民兵坠机救援

民兵坠机救援

修复了由民兵组织持有过时的定居点引用导致的一个特定战役AI崩溃问题。此修复是在之前正常运行的存档在取消暂停后不久开始崩溃后进行的。

重要

这是一个有针对性的救援/变通方案,并非通用的崩溃修复器。最初复现的案例涉及 War Sails 定居点,但我没有确认是 War Sails 本身导致了民兵队伍异常。我没有确认最初是什么导致了这种损坏。可能是我加载顺序中的某个模组造成的。这个模组有意设计为通用:它捕捉的是损坏的民兵定居点引用状态本身,而不是某个特定的模组。所以如果是另一个模组在你的战役中导致了相同的底层问题,民兵崩溃救援可能仍然能够挽救它。

如果你的存档符合以下情况,它最有可能帮到你:

  • 能正常加载
  • 在取消暂停战役时间后不久崩溃
  • 显示与下方类似的堆栈跟踪

描述

我制作 Militia Crash Rescue 是因为有几个战役都遭遇了同样的问题:之前运行正常的存档能正常加载,但在我取消暂停战役地图后不久就会崩溃。

存档本身看起来没问题。我可以打开菜单、进入定居点、稍微移动一下,但一旦战役 AI 开始运行,游戏就会持续遇到涉及民兵归属的空引用崩溃。

我当时已经在使用 Crash Doctor,但这个特定情况仍然被漏掉了。在翻查崩溃日志并制作了一个小型诊断补丁后,我发现异常的民兵队伍持有过期的定居点引用

当这种情况发生时,民兵可能指向一个没有拥有者的损坏定居点对象,尽管具有相同内部 ID 的真实、活动的定居点仍然完全正常。

这个模组会捕捉这种情况,找到健康的定居点,并使用其有效的拥有者,而不是让游戏崩溃。

如果 Crash Doctor、TaleWorlds 或其他模组最终正确处理了这种情况,那很好。这个模组的任务就完成了。


安装说明

  • 安装 Bannerlord.Harmony
  • MilitiaCrashRescue 文件夹解压到:
Mount & Blade II Bannerlord\Modules
  • 在启动器中启用 Militia Crash Rescue
  • 加载你受影响的存档并进行测试。

主要功能

  • 阻止本模组所针对的民兵拥有者空引用崩溃。
  • 检测过期的民兵定居点引用。
  • 通过内部 StringId 解析健康的、活动的定居点。
  • 不会自动删除民兵队伍。
  • 不会重写定居点归属。
  • 避免同一损坏定居点反复刷日志。
  • 包含诊断控制台命令。

典型崩溃路径:

MilitiaPartyComponent.get_PartyOwner()
PartyBase.get_Owner()
MobileParty.get_MapFaction()
DefaultMobilePartyAIModel.GetBestInitiativeBehavior()

控制台命令:

militiarescue.status
militiarescue.scan_militia_refs
militiarescue.scan_ownership

日志位置:

Documents\Mount and Blade II Bannerlord\Configs\MilitiaCrashRescue.log

需求

  • Mount & Blade II: Bannerlord
  • Bannerlord.Harmony
  • 单人游戏

致谢

非常感谢那两个反复摧毁我战役的民兵队伍,直到我烦得受不了,学会了如何给 Bannerlord 打补丁。