rimworld吧 关注:278,868贴子:5,153,675
  • 7回复贴,共1

不能和绮罗村庄交互是什么原因?

只看楼主收藏回复

原版的部落,鼠族的部落都能交互,只有绮罗的村庄不显示交互选项,好感度是满的。


IP属地:广东1楼2026-01-18 16:55回复
    顶顶


    IP属地:广东3楼2026-01-18 17:50
    回复
      2026-01-29 19:01:21
      广告
      不感兴趣
      开通SVIP免广告
      System.NullReferenceException: Object reference not set to an instance of an object
      [Ref A8FC6F49] Duplicate stacktrace, see ref for original
      UnityEngine.StackTraceUtility:ExtractStackTrace ()
      (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Log.Error_Patch1 (string)
      Verse.MapComponentUtility:MapComponentTick (Verse.Map)
      Verse.Map:MapPostTick ()
      (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.TickManager.DoSingleTick_Patch2 (Verse.TickManager)
      Verse.TickManager:TickManagerUpdate ()
      Verse.Game:UpdatePlay ()
      Verse.Root_Play:Update ()
      红字有一行好像是地图出问题了


      IP属地:广东4楼2026-01-18 17:56
      回复
        System.NullReferenceException: Object reference not set to an instance of an object[Ref 6866AD34] at Kiiro_Event.Kiiro_CaravanVisitUtility.GetAllPlayerSettlements () [0x00046] in <e827084d09274b3bb0975287ac524622>:0 at Kiiro_Event.KiiroMerchantCompUtility.MerchantCommand (RimWorld.Planet.Settlement settlement, RimWorld.Planet.Caravan caravan, Kiiro_Event.KiiroMerchantComp merchantComp, RimWorld.TraderKindDef trader) [0x00038] in <e827084d09274b3bb0975287ac524622>:0 at Kiiro_Event.KiiroMerchantComp+<GetCaravanGizmos>d__18.MoveNext () [0x000c0] in <e827084d09274b3bb0975287ac524622>:0 at RimWorld.Planet.WorldObject+<GetCaravanGizmos>d__112.MoveNext () [0x00086] in <46372f5dadbf4af8939e608076251180>:0 at RimWorld.Planet.Settlement+<GetCaravanGizmos>d__66.MoveNext () [0x00148] in <46372f5dadbf4af8939e608076251180>:0 at RimWorld.Planet.Caravan+<GetGizmos>d__123.MoveNext () [0x00528] in <46372f5dadbf4af8939e608076251180>:0 at System.Linq.Enumerable+ConcatIterator`1[TSource].MoveNext () [0x0002b] in <1f993cbf88314b1baa1e10ca917bdc64>:0 at VEF.Abilities.VanillaExpandedFramework_Caravan_GetGizmos_Patch+<Postfix>d__0.MoveNext () [0x0006b] in <5577266d3ccd4be6bdbd8576f196d061>:0 at Outposts.HarmonyPatches+<AddCaravanGizmos>d__1.MoveNext () [0x0008b] in <bb0550e4232948bda4ebfc79d60f4981>:0 at System.Collections.Generic.List`1[T].AddEnumerable (System.Collections.Generic.IEnumerable`1[T] enumerable) [0x00059] in <51fded79cd284d4d911c5949aff4cb21>:0 at System.Collections.Generic.List`1[T].InsertRange (System.Int32 index, System.Collections.Generic.IEnumerable`1[T] collection) [0x000f4] in <51fded79cd284d4d911c5949aff4cb21>:0 at System.Collections.Generic.List`1[T].AddRange (System.Collections.Generic.IEnumerable`1[T] collection) [0x00000] in <51fded79cd284d4d911c5949aff4cb21>:0 at Verse.GizmoGridDrawer.DrawGizmoGridFor (System.Collections.Generic.IEnumerable`1[T] selectedObjects, Verse.Gizmo& mouseoverGizmo) [0x0010a] in <46372f5dadbf4af8939e608076251180>:0 - TRANSPILER UnlimitedHugs.AllowTool: IEnumerable`1 AllowTool.Patches.GizmoGridDrawer_DrawGizmoGridFor_Patch:ClearReverseDesignators(IEnumerable`1 instructions) currentSelectable: nullUnityEngine.StackTraceUtility:ExtractStackTrace ()(wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Log.Error_Patch1 (string)Verse.Log:ErrorOnce (string,int)(wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.GizmoGridDrawer.DrawGizmoGridFor_Patch1 (System.Collections.Generic.IEnumerable`1<object>,Verse.Gizmo&)RimWorld.Planet.WorldGizmoUtility:WorldUIOnGUI ()RimWorld.WorldInterface:WorldInterfaceOnGUI ()(wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:RimWorld.UIRoot_Play.UIRootOnGUI_Patch1 (RimWorld.UIRoot_Play)(wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Root.OnGUI_Patch1 (Verse.Root)


        IP属地:广东5楼2026-01-18 18:37
        回复
          同样的MOD设置,读一个星期前的档是正常的,最近一天的档就不行了


          IP属地:广东6楼2026-01-18 19:10
          回复
            解决了,好像是绮罗事件扩展的问题,不知道跟什么东西冲突了


            IP属地:广东7楼2026-01-18 19:22
            回复
              你提供的报错是 .NET 中的 System.NullReferenceException(空引用异常),这是最常见的编程异常之一,核心原因可以先明确:1. 报错本质定义Object reference not set to an instance of an object 直译是「对象引用未设置为对象的实例」,通俗来讲就是:你试图访问一个「尚未被初始化(实例化)」的对象成员(属性、方法、字段等),而这个对象当前的值是 null(空),不存在实际的对象数据,因此无法完成访问操作并抛出异常。2. 从报错堆栈定位具体问题通过报错堆栈信息(StackTrace),可以精准定位异常发生的位置和相关上下文:
              异常发生的核心方法:Kiiro_Event.Kiiro_CaravanVisitUtility.GetAllPlayerSettlements () [0x00046]异常在 Kiiro_Event 模块的 Kiiro_CaravanVisitUtility 类中,GetAllPlayerSettlements 方法的第 0x00046 行(对应编译后的代码偏移量,对应源码中某一行)触发。
              异常传播链路:该方法被 KiiroMerchantCompUtility.MerchantCommand 调用,最终在 caravan(商队)的 Gizmo(游戏悬浮交互按钮)渲染时暴露,最终影响到 RimWorld 的世界界面 GUI 绘制。
              关键附加信息:堆栈末尾提到 currentSelectable: null,进一步佐证了「存在空对象被尝试访问」—— 当前需要被选中的对象(大概率是玩家殖民地、商队相关对象)为 null。
              3. 该场景下的具体可能原因(结合 RimWorld 模组场景)结合报错所属的 RimWorld(环世界)模组环境,GetAllPlayerSettlements 方法的功能应该是「获取玩家的所有殖民地 / 定居点」,触发空引用的具体场景大概率是以下一种或多种:
              场景 1:GetAllPlayerSettlements 方法中,某一个用于存储「玩家定居点」的集合对象(如 List<Settlement>)未被初始化,直接调用 Add()、ForEach() 等方法,例:csharp运行// 错误示例:只声明了集合,未实例化private List<Settlement> playerSettlements;public void GetAllPlayerSettlements(){ // 此时 playerSettlements 为 null,调用 Clear() 会触发空引用 playerSettlements.Clear(); }
              场景 2:方法中尝试获取「玩家定居点」数据时,返回了 null(比如当前游戏存档中玩家尚未建立任何殖民地,或获取定居点的 API 调用失败返回 null),随后直接访问该返回值的属性 / 方法,例:csharp运行// 错误示例:未判断返回值是否为 nullpublic void GetAllPlayerSettlements(){ // 假设 GetFirstPlayerSettlement() 无定居点时返回 null Settlement firstSettlement = SettlementAPI.GetFirstPlayerSettlement(); // 直接访问 Name 属性,触发空引用 string settlementName = firstSettlement.Name; }
              场景 3:外部调用该方法时,传入的参数为 null(如 MerchantCommand 方法调用 GetAllPlayerSettlements() 时,传递的定居点 / 商队对象为 null),导致方法内部处理时触发异常。
              附加佐证:堆栈中 currentSelectable: null 说明当前 UI 渲染时,「被选中的交互对象」为空,而模组代码未做空值判断,直接尝试从该空对象中获取定居点数据,最终触发异常。
              总结
              核心报错:NullReferenceException(空引用异常),本质是访问了 null 对象的成员;
              定位:异常源于 Kiiro_Event 模组的 GetAllPlayerSettlements 方法,与玩家定居点数据获取 / 处理相关;
              关键诱因:未初始化的对象、API 返回 null 未做判断、传入参数 null,结合 RimWorld UI 渲染时选中对象为空;
              解决方向(模组层面):在 GetAllPlayerSettlements 方法及调用链路中添加空值判断(if (obj != null)),初始化必要集合对象,处理「无玩家定居点」的边界场景。


              IP属地:广东8楼2026-01-18 19:57
              回复
                报错详细分析:Kiiro_Event 模组空引用异常你遇到的依然是 System.NullReferenceException(空引用异常),但本次报错有明确的模组指向和具体方法调用链,下面从核心本质、堆栈定位、具体原因推测、关键补充四个方面展开详细分析:一、核心本质(不变)该异常的核心根源始终是:尝试访问一个值为 null 的引用类型对象的成员(属性、方法、字段等),即你要操作的对象尚未被实例化(不指向任何实际内存空间),却直接调用了它的相关成员,导致 CLR(公共语言运行时)无法找到对应的资源而抛出异常。二、从堆栈信息定位报错核心位置通过你提供的报错堆栈,可以清晰锁定报错的源头、模组和调用链路,这是排查的关键:1. 核心报错模组与方法
                报错模组:Kiiro_Event(这是一个 RimWorld 自定义模组,所有报错方法均归属该模组)
                原始报错位置(根节点):Kiiro_Event.Kiiro_CaravanVisitUtility.GetAllPlayerSettlements () [0x00046]
                说明:异常最先在 Kiiro_CaravanVisitUtility 类的 GetAllPlayerSettlements() 方法中抛出,偏移量 [0x00046] 对应该方法内部的第 46 行附近(编译后偏移,对应源码的某一行逻辑)。
                调用链路(异常传播路径):GetAllPlayerSettlements()(报错根源) → KiiroMerchantCompUtility.MerchantCommand() → KiiroMerchantComp.<GetCaravanGizmos>d__18.MoveNext() → 后续 RimWorld 原生框架的 Gizmo(界面交互元素)绘制逻辑 → 最终上报异常。
                2. 关键上下文补充堆栈末尾的 currentSelectable: null 是重要线索,说明当前界面中被选中的交互对象为 null,而 Kiiro_Event 模组的逻辑依赖于一个有效的选中对象(商队 / 定居点),这也是触发异常的潜在诱因。三、针对该场景的具体报错原因推测(按概率从高到低)结合 Kiiro_Event 模组的方法命名(CaravanVisit(商队访问)、PlayerSettlements(玩家定居点)、MerchantComp(商人组件))和 RimWorld 的框架逻辑,该空引用异常的具体原因可归纳为以下 4 种:1. 最可能:GetAllPlayerSettlements() 方法内部访问了 null 对象的成员GetAllPlayerSettlements() 方法的核心功能应该是获取所有玩家的定居点集合,在实现该功能时,存在未做 null 判断就访问对象成员的逻辑,具体场景包括:
                场景 A:访问 RimWorld 原生的「世界定居点集合」(如 Find.WorldObjects.Settlements)时,Find.WorldObjects 为 null(世界对象尚未初始化、场景切换中),直接调用 Find.WorldObjects.Settlements 触发异常;
                场景 B:遍历定居点集合时,集合本身为 null,或集合中的某个 Settlement 实例为 null,后续对其进行 settlement.IsPlayerSettlement(判断是否为玩家定居点)等成员访问时报错;
                场景 C:该方法内部定义的自定义变量(如定居点列表容器 List<Settlement> playerSettlements)未初始化(即 playerSettlements = null,未执行 new List<Settlement>()),就直接调用 playerSettlements.Add() 等方法报错。
                模拟报错逻辑(对应该方法的潜在错误代码):csharp运行// Kiiro_CaravanVisitUtility 类中的错误实现(模拟)public static List<Settlement> GetAllPlayerSettlements(){ // 错误1:Find.WorldObjects 可能为 null,未做判断直接访问 var allSettlements = Find.WorldObjects.Settlements; List<Settlement> playerSettlements = null; // 错误2:列表未初始化,为 null foreach (var settlement in allSettlements) { // 错误3:settlement 可能为 null,直接访问其成员 if (settlement.IsPlayerSettlement) { playerSettlements.Add(settlement); // 错误4:访问 null 列表的 Add 方法 } } return playerSettlements;}2. 次可能:传入 MerchantCommand() 方法的参数为 nullMerchantCommand() 方法接收了 4 个参数(Settlement settlement、Caravan caravan、KiiroMerchantComp merchantComp、TraderKindDef trader),该方法调用了 GetAllPlayerSettlements(),而传入的参数中存在 null 值,导致后续触发异常:
                场景 A:settlement 为 null(无有效定居点对象),但方法内部直接将其传入 GetAllPlayerSettlements() 或访问 settlement.Position 等成员;
                场景 B:merchantComp 为 null(商人组件未挂载、未初始化),MerchantCommand() 方法中先调用 GetAllPlayerSettlements(),再尝试访问 merchantComp.TraderName 等成员,最终异常上报在 GetAllPlayerSettlements()(或后续链路);
                场景 C:caravan 为 null(无有效商队对象),而 GetAllPlayerSettlements() 的逻辑依赖商队的位置、所属派系等信息,导致访问 caravan.Faction 时报错。
                3. 模组交互问题:Kiiro_Event 与其他模组(VEF/Outposts/AllowTool)冲突从堆栈中可以看到其他加载的模组(VEF.Abilities、Outposts、UnlimitedHugs.AllowTool),这些模组均对「商队 Gizmo 界面」进行了补丁(Patch)修改:
                多个模组同时修改了 Caravan.GetGizmos()(商队获取交互按钮)、GizmoGridDrawer.DrawGizmoGridFor()(绘制交互界面)等方法,导致模组执行时序混乱;
                其他模组先修改了定居点 / 商队对象,将其置为 null,后续 Kiiro_Event 模组执行时,访问该 null 对象触发异常;
                例如 AllowTool 模组对 Gizmo 绘制逻辑进行了转译(TRANSPILER),可能破坏了 Kiiro_Event 模组的对象引用,导致其无法获取有效的定居点 / 商队对象。
                4. 界面交互时序问题:未选中有效对象就触发了商人命令堆栈显示异常源于 Gizmo 界面绘制(GetCaravanGizmos),对应游戏内的界面交互操作:
                玩家未选中任何有效商队 / 定居点(currentSelectable: null),却触发了 Kiiro_Event 模组的商人交互按钮;
                模组未做「选中对象有效性判断」,直接执行 MerchantCommand() 和 GetAllPlayerSettlements() 方法,导致依赖的对象(caravan/settlement)为 null,触发空引用异常;
                额外场景:地图加载未完成、商队正在移动 / 解散过程中,对象处于无效状态(null),但模组的界面按钮已显示并可点击,点击后触发异常。
                四、补充关键说明
                [Ref 6866AD34] 仅为异常重复上报的引用编号,和之前的 [Ref A8FC6F49] 作用一致,无需关注该编号,核心报错信息仍为空引用异常;
                堆栈中的 MonoMod.Utils.DynamicMethodDefinition 是 RimWorld 模组的通用 Hook / 补丁工具,进一步验证了报错与模组的补丁逻辑或交互逻辑相关;
                该报错并非 RimWorld 原生代码问题,完全源于 Kiiro_Event 模组自身的实现缺陷,或其与其他模组的兼容性问题。
                总结
                核心根源:访问了 null 引用对象的成员,这是 NullReferenceException 的唯一本质;
                报错核心:Kiiro_Event 模组的 GetAllPlayerSettlements() 方法(获取玩家定居点)存在 null 判断缺失或对象未初始化的逻辑缺陷;
                排查方向:优先禁用其他模组单独测试 Kiiro_Event → 检查该模组的 Kiiro_CaravanVisitUtility 类源码 → 补充关键对象的 null 判断和初始化逻辑 → 排查与 VEF/Outposts/AllowTool 模组的兼容性。


                IP属地:广东9楼2026-01-19 02:57
                回复