环境
- tModLoader: 2026.06 stable(1.4.4.9 内核)
- InnoVault: v1.9.101(Steam 工坊订阅,ID 3338554501)
- 相关模组: FargowiltasSouls(栈里的 EternityWingDrawer),ImproveGame(栈里的隐身药水钩子)
- 服务器模式:多人专用服务器(SSC 开启)
现象
服务器运行中,每当有新玩家进服,已在服内的其他玩家客户端有概率会崩溃弹窗(IndexOutOfRangeException)。
刚进服的人不崩;被崩的人重进后,又可能会导致其他人崩,反复几次才稳定。
单人模式不出现。
报错栈
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at Terraria.ModLoader.PlayerLoader.DrawEffects(PlayerDrawSet drawInfo, ...) in PlayerLoader.cs:line 1199
at Terraria.DataStructures.PlayerDrawSet.BoringSetup_2(...)
at Terraria.Graphics.Renderers.LegacyPlayerRenderer.DrawPlayerInternal(...)
at ImproveGame.Content.Functions.MinorPatches.TranslucentInvisPotion.PatchDrawPlayerFull(...)
at FargowiltasSouls.Common.Graphics.Drawers.EternityWingDrawer.DrawWingTarget(...)
at InnoVault.RenderHandles.RenderHandleLoader.DrawPlayersHook(...)
at InnoVault.GameSystem.PlayerRebuildLoader.On_DrawPlayersHook(...)
......
我的初步分析(仅供参考)
崩溃点是 tML 的 PlayerLoader.DrawEffects 在遍历玩家 ModPlayer 特效列表
(FilteredSpanEnumerator)时越界,疑似列表在遍历途中被修改。
三个模组都挂在"渲染玩家"这条必经之路上,但真正与"列表被中途修改"对得上号的只有 InnoVault 的重建系统
(PlayerRebuildLoader),另外两个只是同路被记录。
栈中 InnoVault 的 PlayerRebuildLoader.On_DrawPlayersHook 用 ref players
且调用 SnapshotOverrides / VaultTypeRegistry 运行时注册,
怀疑新玩家进服触发 PlayerOverride 重建与 DrawEffects 遍历发生竞态。
##附日志
client.log
环境
现象
服务器运行中,每当有新玩家进服,已在服内的其他玩家客户端有概率会崩溃弹窗(IndexOutOfRangeException)。
刚进服的人不崩;被崩的人重进后,又可能会导致其他人崩,反复几次才稳定。
单人模式不出现。
报错栈
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at Terraria.ModLoader.PlayerLoader.DrawEffects(PlayerDrawSet drawInfo, ...) in PlayerLoader.cs:line 1199
at Terraria.DataStructures.PlayerDrawSet.BoringSetup_2(...)
at Terraria.Graphics.Renderers.LegacyPlayerRenderer.DrawPlayerInternal(...)
at ImproveGame.Content.Functions.MinorPatches.TranslucentInvisPotion.PatchDrawPlayerFull(...)
at FargowiltasSouls.Common.Graphics.Drawers.EternityWingDrawer.DrawWingTarget(...)
at InnoVault.RenderHandles.RenderHandleLoader.DrawPlayersHook(...)
at InnoVault.GameSystem.PlayerRebuildLoader.On_DrawPlayersHook(...)
......
我的初步分析(仅供参考)
崩溃点是 tML 的 PlayerLoader.DrawEffects 在遍历玩家 ModPlayer 特效列表
(FilteredSpanEnumerator)时越界,疑似列表在遍历途中被修改。
三个模组都挂在"渲染玩家"这条必经之路上,但真正与"列表被中途修改"对得上号的只有 InnoVault 的重建系统
(PlayerRebuildLoader),另外两个只是同路被记录。
栈中 InnoVault 的 PlayerRebuildLoader.On_DrawPlayersHook 用 ref players
且调用 SnapshotOverrides / VaultTypeRegistry 运行时注册,
怀疑新玩家进服触发 PlayerOverride 重建与 DrawEffects 遍历发生竞态。
##附日志
client.log