边缘仙路 RimImmortal RandPlant 空引用修复
【边缘仙路 RandPlant 空引用修复】 本补丁用于修复边缘仙路核心模组(RimImmortal-Core)中 WhoXiuXian.
【边缘仙路 RandPlant 空引用修复】
本补丁用于修复边缘仙路核心模组(RimImmortal-Core)中
WhoXiuXian.Incidents.RI_IncidentWorker_RandPlant.CanSpawnAt 方法
在 GridsUtility.GetRoom 返回 null 时引发的 NullReferenceException。
【问题表现】
游戏运行中( storyteller tick 阶段)抛出空引用异常:
System.NullReferenceException: Object reference not set to an instance of an object
at WhoXiuXian.Incidents.RI_IncidentWorker_RandPlant.CanSpawnAt(...)
at ...TryFindRootCell(...)
原方法在判断灵脉植物能否生成时,直接调用
GridsUtility.GetRoom(c, map).PsychologicallyOutdoors()
而 GetRoom 在格子没有有效 Region 时会返回 null(例如被实体岩石包围的不可通行格子)。
【修复方式】
通过 Harmony Transpiler 将原 IL 中的
callvirt Room::get_PsychologicallyOutdoors()
替换为判空的安全调用
call Patch_CanSpawnAt::SafePsychologicallyOutdoors(Room)
后者在 room 为 null 时返回 false,使该格子被判定为"不可生成",
storyteller 会继续寻找下一个候选格子,逻辑与原版一致。
【加载顺序】
请将本模组放在 Harmony、边缘仙路核心模组(RimImmortal-Core)
以及四象之争扩展之后加载。About.xml 已配置 loadAfter,通常会自动排序。
【兼容性】
- 最小侵入:仅修改一条 IL 指令,不改变原方法其他逻辑。
- 上游更新安全:若上游修复了该 bug,Transpiler 找不到目标时会输出
警告日志而不崩溃,此时可卸载本补丁。
- 与其他 patch IncidentWorker 的模组(VEF、GeologicalLandforms 等)无冲突。