This commit is contained in:
2025-12-28 16:40:03 +08:00
parent 98d88c353d
commit 17d40a2bdd
8 changed files with 61 additions and 10 deletions

View File

@@ -17,32 +17,54 @@ namespace WulaFallenEmpire.EventSystem.AI
public static void ProcessLetter(Letter letter)
{
if (letter == null) return;
if (letter == null)
{
WulaLog.Debug("[AI Commentary] Letter is null, skipping.");
return;
}
WulaLog.Debug($"[AI Commentary] Received letter: {letter.Label.Resolve()}");
// 检查设置
var settings = WulaFallenEmpireMod.settings;
if (settings == null || !settings.enableAIAutoCommentary) return;
if (settings == null)
{
WulaLog.Debug("[AI Commentary] Settings is null, skipping.");
return;
}
if (!settings.enableAIAutoCommentary)
{
WulaLog.Debug("[AI Commentary] Auto commentary is disabled in settings, skipping.");
return;
}
// 简单的冷却检查,避免刷屏
int currentTick = Find.TickManager?.TicksGame ?? 0;
if (currentTick - lastProcessedTick < MinTicksBetweenComments) return;
if (currentTick - lastProcessedTick < MinTicksBetweenComments)
{
WulaLog.Debug($"[AI Commentary] Cooldown active ({currentTick - lastProcessedTick} < {MinTicksBetweenComments}), skipping.");
return;
}
lastProcessedTick = currentTick;
// 获取 AI 核心
var aiCore = Find.World?.GetComponent<AIIntelligenceCore>();
if (aiCore == null)
{
WulaLog.Debug("[AI Commentary] AIIntelligenceCore not found.");
WulaLog.Debug("[AI Commentary] AIIntelligenceCore not found on World.");
return;
}
// 构建提示词 - 让 AI 自己决定是否需要回复
string prompt = BuildPrompt(letter);
WulaLog.Debug($"[AI Commentary] Sending to AI: {letter.Label.Resolve()}");
// 直接发送到正常的 AI 对话流程(会经过完整的思考流程)
aiCore.SendAutoCommentaryMessage(prompt);
WulaLog.Debug($"[AI Commentary] Sent letter to AI: {letter.Label.Resolve()}");
WulaLog.Debug($"[AI Commentary] Successfully sent letter to AI: {letter.Label.Resolve()}");
}
private static string BuildPrompt(Letter letter)
@@ -53,16 +75,28 @@ namespace WulaFallenEmpire.EventSystem.AI
string label = letter.Label.Resolve() ?? "Unknown";
string defName = letter.def?.defName ?? "Unknown";
sb.AppendLine("[游戏事件通知]");
// 获取事件描述ChoiceLetter 才有 Text 属性)
string description = "";
if (letter is ChoiceLetter choiceLetter)
{
description = choiceLetter.Text.Resolve() ?? "";
}
sb.AppendLine("[游戏事件通知 - 自动评论请求]");
sb.AppendLine($"事件标题: {label}");
sb.AppendLine($"事件类型: {defName}");
if (!string.IsNullOrEmpty(description))
{
sb.AppendLine($"事件描述: {description}");
}
sb.AppendLine();
sb.AppendLine("请根据这个事件决定是否需要向玩家发表简短评论。");
sb.AppendLine("- 如果是重要事件(如袭击、死亡),可以提供建议或警告");
sb.AppendLine("- 如果是有趣的事件,可以发表幽默评论");
sb.AppendLine("- 如果事件不重要或不值得评论,什么都不说即可");
sb.AppendLine("- 如果事件不重要或不值得评论,回复 [NO_COMMENT] 即可跳过");
sb.AppendLine();
sb.AppendLine("评论要简短1-2句话符合你作为帝国AI的人设。");
sb.AppendLine("如果你决定不评论,只需回复: [NO_COMMENT]");
return sb.ToString();
}