【新增】
- 新增双向信使书信系统:
玩家可回覆 NPC 讯息或主动寄信。收到 NPC 讯息时,视窗出现「寄送回信」按钮,显示信使费用(依与 NPC 距离计算)。MCM 新增「每距离信使费用」(10-50 第纳尔,预设 15)与「每距离投递时间」(0.5-5.0 小时,预设 1.0)。书信依距离延迟送达。NPC 收到玩家书信後可回覆或忽略。若回覆,NPC 可在信中执行有限技术行动(go_to_settlement丶wait_near_settlement丶follow_player),前提是玩家书信明确要求。所有书信在对话历史标记为「玩家透过信使寄送」或「玩家透过信使回信」。系统自动解析书信中提及定居点并提供精确 string_id。
- 新增 MCM「除错与修复」区块的「强制关闭对话(修复卡住对话)」按钮:
可强制关闭与 NPC 卡住的对话,并重置所有阻挡旗标(CombatResponse丶Decision丶IsSurrendering丶MarriageResponse丶PendingDeath丶PendingSettlementCombat丶PendingAIResponse 等)。用於因崩溃导致对话未自动关闭时解除游戏卡死。按钮透过 ConversationManager 强制结束对话并清除 NPC 状态。
- 新增对话中定居点提及解析系统,用於正确生成经济效果:
现在从玩家对话中生成动态事件时,系统会自动侦测提及的定居点(例如「Sargot」),并提供其精确 string_id(例如「town_S1」)给 AI,让 AI 能正确对指定目标应用经济效果(繁荣度丶食物丶安全丶忠诚丶收入)。解析支援所有语言,透过文字正规化处理,并涵盖城镇丶城堡与村庄。
- 新增针对 200+ NPC 的存档系统全面优化:
实作 NPC 关系快取(NPCRelationsCache)丶档案路径快取丶大量事件(俘虏丶释放)的批次存档,将 SaveQueueManager 信号池从 10 提升至 50,并新增 RecentEvents 清单自动修剪与清理。俘虏事件效能提升 20-50 倍:单一领主被俘虏处理时间从 2-5 秒降至 <0.1 秒,5 名俘虏战斗从 10-25 秒降至 <0.5 秒。
- 新增 MCM 记忆体与效能管理设定:
「近期事件保留天数」(7-90 天,预设 30)控制 NPC 记忆中旧事件自动清理;「每 NPC 最多近期事件数」(10-200,预设 50)限制单 NPC 事件数量,超出时自动移除最旧事件。记忆中最多储存 MaxRecentEvents 事件,但仅将最近 10 天内丶最多 Math.Min(MaxRecentEvents, 50) 个事件送入 AI prompt 以优化效能。
- 新增重要游戏事件自动更新快取机制:
英雄结婚(OnHeroesMarried)时,为双方配偶及其亲属更新快取;氏族变更王国(OnClanChangedKingdom)时,为全氏族成员更新快取,确保 NPC 关系快取资料保持最新。
- 新增防止游戏崩溃的防护补丁(NullReferenceException):
修复游戏进行约 250+ 天後,子嗣出生时父母英雄可能缺乏装备数据(EquipmentRoster 为 null)导致原版程式崩溃的问题。补丁拦截此情况,使用後备装备(CivilianEquipment 或空装备)防止崩溃。※注:此 Bug 非由 AI Influence 模组引起,该功能仅修复原版官方 bug。
- 新增俘虏事件追踪系统:
领主被俘(PrisonerTaken)或释放(PrisonerReleased / PrisonBreakRescue)时,事件不仅加入被俘者本人 RecentEvents,也会加入其友人丶亲属丶氏族与派系成员。事件包含完整 string_id(角色丶氏族丶地点),让 AI 能得知亲近之人命运并在对话中提及。支援所有释放类型(逃脱丶释放丶赎金丶战後释放)。
- 新增非战斗英雄部队防护系统:
防止原版自动解散 AI Action 建立的非战斗英雄部队(战斗技能 <100)。新增 NonCombatantPartyProtector 行为,注册 AI Action 建立的部队(WaitNearSettlement丶PatrolSettlement丶GoToSettlement丶FollowPlayer丶CreateParty),在行动期间防止原版 TeleportationCampaignBehavior 自动更换领袖或 DisbandPartyCampaignBehavior 解散部队。建立非战斗领袖部队时,玩家会收到黄色警告:任务结束後原版可能解散部队。行动中若原版仍更换领袖,系统自动停止行动并显示橙色通知。行动结束後移除保护。
- 新增所有外交关系类型的原因显示於 AI prompt:
现在联盟丶贸易协定丶贡金丶赔偿的原因皆会显示,提供 AI 更完整的脉络理解。
- 新增 WorldInfoManager.OnDailyTick 效能剖析系统:
每日 Tick 会将各方法(UpdateWarStatus丶CleanOldEvents丶ProcessRomanceDecay丶UpdateLastSeenFriendsForAllNPCs丶CleanupDeadNPCs)的执行时间详细写入 mod_log.txt,便於精准定位效能瓶颈。
【修复】
- 修复经济效果 income_multiplier 实作:
先前收入倍率虽储存但未实际应用於定居点收入。现在透过 Harmony 补丁於 DefaultClanFinanceModel.AddSettlementIncome 应用倍率。倍率相对基础收入加成叠加(例如 1.2 = +20%丶1.1 = +10%丶0.8 = -20%),避免过度膨胀。效果过期时正确扣除对应百分比。新增 EconomicEffectsManager.GetSettlementIncomeMultiplier() 取得汇总倍率。
- 修复关键 AI 行动错误导致对话卡死:
先前 attack丶release丶surrender丶accept_surrender丶marriage 等行动发生错误时,对话可能无法自动关闭。现在所有 catch 区块强制关闭对话并清除相关旗标。InitiateCombatLogic 现在无论 EnableModification 为何,都会在战斗开始前强制关闭对话。
- 修复水上对话 release 时战斗视窗错误开启:
先前玩家在水上时 AI 选择 release,对话结束後仍会自动开启战斗视窗。现在正确侦测任务中玩家在水上,处理 PlayerEncounter 时设定玩家保护丶NPC 部队 24 小时不攻击旗标,并结束遭遇,防止战斗视窗开启。
- 修复 release 後 AI 攻击玩家追随部队:
先前仅主玩家部队受 12 小时保护,追随部队(follow_player)未受保护,导致和平离开後立即被攻击。现在 release 时,主玩家部队与所有追随部队皆设定 24 小时内不受攻击标示。
- 修复世界战争宣言时 NPC 情绪状态逻辑:
先前任何战争宣言都会让 NPC 情绪变「紧张」,即使与其派系无关。现在仅在战争直接影响 NPC 派系或氏族时才改变情绪。
- 修复 AI 同时 release 与停止 follow_player 时缺少通知:
先前未显示停止追随通知。现在检查 release 时若同时停止 follow_player,会显示通知告知玩家。
- 修复定居点俘获事件(SettlementCapture)中 NPC 角色判断:
先前军队领袖或参与者可能收到错误讯息(如「你失去控制」而非「你俘获」)。现在透过围城事件检查正确判断角色(军队领袖「你率军俘获」丶围城参与「你协助俘获」丶防守方「你的派系失去」等)。
- 修复 NPC 上下文储存系统:
现在王国领袖上下文於游戏开始建立并每日检查;靠近玩家的 NPC 上下文正确标记初始化并储存。改进储存时资料合并逻辑:使用者编辑的 JSON 栏位(KnownSecrets丶KnownInfo丶AIGeneratedPersonality丶AIGeneratedBackstory丶AIGeneratedSpeechQuirks丶ConversationHistory丶RecentEvents)不再被自动覆盖。KnownSecrets 与 KnownInfo 现在优先载入档案内容,允许使用者自由编辑而不需特殊旗标。
- 修复 MCM「清除当前存档资料」按钮(外交清理):
先前 6 个外交子系统与 4 个档案未清除。现在所有子系统记忆体清除丶9 个外交档案删除,并新增 ClearDialogueAnalysisEvents() 清除所有 NPC 的外交对话分析事件。
- 修复 AI 攻击自身定居点:
先前可能对自身或派系定居点设定 siege_settlement 或 raid_village,导致无限宣战错误。现在程式层级检查定居点归属,若属英雄氏族丶王国或绑定城堡/城镇,则阻挡行动并记录错误。
- 修复载入存档後世界事件视窗事件与统治者声明顺序错误:
先前仅各来源内排序,合并後顺序错乱。现在重构 LoadRealData(),先合并所有来源再加入 UI,统一使用 CampaignDays 时间戳记,全部事件/更新/声明一起排序(最新在前)。修复 DiplomaticStatementsStorage 时间储存,使用 CampaignDays 直接储存。事件顺序现在游戏中与载入後皆正确稳定。
- 修复 NPC 角色扮演死亡系统:
先前玩家可透过角色扮演杀死任何 NPC,即使其在大地图带军队。现在新增死亡条件检查:仅限任务/战斗中丶玩家俘虏丶玩家部队同伴丶定居点无部队或单人部队时可杀。带部队(2+ 人)或他方俘虏时不可杀。prompt 中 character_death 栏位仅在可杀条件下显示,双重保护防止 AI 尝试杀死不可杀的 NPC。
- 修复浪漫关系加成未应用於 NPC 主动机率:
先前因快取不同步,RomanceLevel >50 加成未生效。现在计算前透过 GetOrCreateNPCContext() 刷新上下文,确保使用最新档案资料。新增除错记录追踪 RomanceLevel。
- 修复语气正向时关系增加错误:
先前 ApplyRelationChangeWithDelay 透过 GetHeroesForEffectiveRelation 将关系变更为整个氏族。现在直接使用 SetPersonalRelation,仅改变与对话 NPC 的个人关系。
- 修复未退出游戏直接新存档时资料跨战役残留:
先前新战役载入旧外交与事件资料,因 OnSessionLaunched 重复呼叫跳过初始化,Singleton 保留旧资料。现在检查 UniqueGameId 侦测新战役,自动呼叫 ResetAllSystems() 重置所有 Singleton 与外交系统,清除记忆体旧资料。新存档不再出现前战役资料。
【优化】
- 优化 AI 俘虏任务状态显示:
玩家部队中的俘虏「Your Current Task」现在完整显示「因被俘虏而无任务」,包含玩家部队名称(string_id)与当前位置(定居点类型丶文化丶拥有者丶王国丶区域,或最近定居点,或荒野)。
- 优化 AI 语癖系统:
移除 prompt 中重复的语癖资讯,现在仅在回应指令中显示,提升 AI 控制清晰度。
- 优化 UpdateWarStatus 方法效能:
先前每 NPC 个别呼叫并遍历所有王国/氏族,耗时 ~75ms/NPC(占 OnDailyTick 98.8%)。现在每日计算一次战争状态并快取,再指派给所有 NPC,执行时间从 ~2200ms 降至 ~5ms(约 440 倍提升)。
|