Don't Starve Together

Don't Starve Together

能力勋章 Functional Medal
bug_未正确处理物品销毁后的逻辑
已经单开勋章和独行长路验证是勋章的bug,但是那样连错误日志都没有游戏本体就直接崩溃,这个是排查后长期存档的错误日志。
[01:01:55]: [string "scripts/components/inventoryitem.lua"]:10: attempt to index field 'inventoryitem' (a nil value)
LUA ERROR stack traceback:
scripts/class.lua:43 in () ? (Lua) <36-45>
t = table: 0000000188D24C60
k = owner
v = nil
p = table: 0000000188D25980
old = nil
scripts/components/inventoryitem.lua:176 in (method) ClearOwner (Lua) <175-177>
self =
isnew = false
nobounce = false
pushlandedevents = true
trappable = true
is_landed = false
IsHeldBy = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2566
inst = 133787 - blank_certificate (valid:false)
keepondeath = false
droprandomdir = false
canbepickedupalive = false
sinks = false
_ = table: 0000000188D25110
scripts/components/inventoryitem.lua:259 in (method) OnRemoved (Lua) <255-262>
self =
isnew = false
nobounce = false
pushlandedevents = true
trappable = true
is_landed = false
IsHeldBy = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2566
inst = 133787 - blank_certificate (valid:false)
keepondeath = false
droprandomdir = false
canbepickedupalive = false
sinks = false
_ = table: 0000000188D25110
scripts/components/container.lua:859 in () ? (Lua) <833-864>
self =
opencount = 1
slots = table: 000000018FD743D0
RemoveAllItemsWithSlot = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2382
inst = 133772 - medal_box(LIMBO) (valid:true)
GetSpecificSlotForItem = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2344
MoveItemFromOneOfSlot = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2415
MoveItemFromHalfOfSlot = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2488
MoveItemFromAllOfSlot = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2472
ignoresound = false
onopenfn = function - ../mods/workshop-1909182187/scripts/prefabs/medal_box.lua:91
opener = 130229 - wanda (valid:true)
onclosefn = function - ../mods/workshop-1909182187/scripts/prefabs/medal_box.lua:98
Open = function - ../mods/workshop-2657513551/modmain/misc.lua:6
openlist = table: 000000018FD74A10
currentuser = 130229 - wanda (valid:true)
ignoreoverstacked = false
GetSpecificMedalSlotForItem = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2355
_ = table: 000000018FD750A0
item = 133787 - blank_certificate (valid:false)
slot = 11
wholestack = true
keepoverstacked = nil
stackable = nil
=(tail call):-1 in () (tail) <-1--1>
scripts/components/container.lua:1013 in (method) TakeActiveItemFromAllOfSlot (Lua) <998-1019>
self =
opencount = 1
slots = table: 000000018FD743D0
RemoveAllItemsWithSlot = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2382
inst = 133772 - medal_box(LIMBO) (valid:true)
GetSpecificSlotForItem = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2344
MoveItemFromOneOfSlot = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2415
MoveItemFromHalfOfSlot = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2488
MoveItemFromAllOfSlot = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2472
ignoresound = false
onopenfn = function - ../mods/workshop-1909182187/scripts/prefabs/medal_box.lua:91
opener = 130229 - wanda (valid:true)
onclosefn = function - ../mods/workshop-1909182187/scripts/prefabs/medal_box.lua:98
Open = function - ../mods/workshop-2657513551/modmain/misc.lua:6
openlist = table: 000000018FD74A10
currentuser = 130229 - wanda (valid:true)
ignoreoverstacked = false
GetSpecificMedalSlotForItem = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2355
_ = table: 000000018FD750A0
slot = 11
opener = 130229 - wanda (valid:true)
inventory = table: 0000000070B1C3A0
active_item = nil
item = 133787 - blank_c
错误发生在物品从背包或容器中移除时,尝试访问一个已被销毁的实体(`inst`)的 `replica.inventoryitem` 字段,导致 `nil` 索引。具体流程如下:
1. 玩家点击物品栏中的某个槽位(`invslot.lua` 的 `Click` 方法)。
2. 游戏尝试从槽位中取出物品(`TakeActiveItemFromAllOfSlot`)。
3. 执行 `RemoveItemBySlot` 移除物品时,触发 `inventoryitem` 组件的 `OnRemoved` 方法。
4. 在 `OnRemoved` 中调用 `ClearOwner` 方法时,`inst.replica.inventoryitem` 已被释放(`inst` 被标记为 `valid:false`),导致访问失败。

#### **关键冲突点**
1. **Mod 覆盖原生逻辑**
- **勋章盒(workshop-1909182187)**:其自定义的 `TakeActiveItemFromAllOfSlot` 可能未正确处理物品销毁后的逻辑。
- **自动堆叠(workshop-3050607025)**:合并物品时可能未及时清理无效实体引用。注:(已关闭)
2. **无效实体残留**
物品实体被合并或移除后,其引用仍被保留在操作链中(如背包缓存、事件监听),后续操作尝试访问已失效的 `replica`。
< >
Showing 1-2 of 2 comments
pchen727 18 Apr @ 6:34am 
排查中的日志1
[00:21:32]: [string "scripts/components/inventoryitem_replica.lu..."]:217: attempt to index field 'classified' (a nil value)
LUA ERROR stack traceback:
scripts/components/stackable.lua:7 in (field) ? (Lua) <3-9>
self =
_ = table: 0000000076B88240
inst = 129529 - blank_certificate (valid:false)
Get = function - ../mods/workshop-3050607025/scripts/auto_stack.lua:28
stacksize = 10
inventoryitem = table: 0000000076B804A0
scripts/class.lua:43 in () ? (Lua) <36-45>
t = table: 0000000076B88740
k = stacksize
v = 10
p = table: 0000000076B890A0
old = 5
scripts/components/stackable.lua:181 in (method) Put (Lua) <142-186>
self =
_ = table: 0000000076B88240
inst = 129529 - blank_certificate (valid:false)
Get = function - ../mods/workshop-3050607025/scripts/auto_stack.lua:28
item = 129529 - blank_certificate (valid:false)
source_pos = nil
ret = nil
num_to_add = 5
newtotal = 10
oldsize = 5
newsize = 10
numberadded = 5
scripts/components/container.lua:364 in (method) GiveItem (Lua) <329-420>
self =
opencount = 1
slots = table: 0000000023A40720
RemoveAllItemsWithSlot = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2382
inst = 129516 - medal_box(LIMBO) (valid:true)
GetSpecificSlotForItem = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2344
MoveItemFromOneOfSlot = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2415
opener = 126333 - wanda (valid:true)
onclosefn = function - ../mods/workshop-1909182187/scripts/prefabs/medal_box.lua:98
MoveItemFromAllOfSlot = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2472
AddSomeOfActiveItemToSlot = function - ../mods/workshop-2966979495/scripts/postInits/containerPostInit.lua:78
onopenfn = function - ../mods/workshop-1909182187/scripts/prefabs/medal_box.lua:91
MoveItemFromHalfOfSlot = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2488
Open = function - ../mods/workshop-2657513551/modmain/misc.lua:6
openlist = table: 0000000023A41350
GetSpecificMedalSlotForItem = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2355
ignoresound = false
ignoreoverstacked = false
AddSomeOfSlotToActiveItem = function - ../mods/workshop-2966979495/scripts/postInits/containerPostInit.lua:10
_ = table: 0000000023A403B0
item = 129529 - blank_certificate (valid:false)
slot = nil
src_pos = nil
drop_on_fail = nil
k = 4
other_item = 129529 - blank_certificate (valid:false)
../mods/workshop-1909182187/scripts/medal_hook.lua:2734 in (method) GiveItem (Lua) <2690-2758>
self =
opencontainerproxies = table: 000000013EB0F600
ignoreoverflow = false
isvisible = true
GiveItem = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2690
noheavylifting = false
EquipMedalWithName = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2612
equipslots = table: 000000013EB0F510
MoveItemFromOneOfSlot = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2776
Hide = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2661
AddSomeOfActiveItemToSlot = function - ../mods/workshop-2966979495/scripts/postInits/inventoryPostInit.lua:53
isopen = true
ignorefull = false
DropEverythingWithTag = function - ../mods/workshop-2657513551/modmain/save.lua:425
itemslots = table: 000000013EB0F3D0
DropEquipped = function - ../mods/workshop-1909182187/scripts/medal_wipebutt.lua:374
AddSomeOfSlotToActiveItem = function - ../mods/workshop-2966979495/scripts/postInits/inventoryPostInit.lua:3
activeitem = 129529 - blank_certificate (valid:false)
silentfull = false
inst = 126333 - wanda (valid:true)
isexternallyinsulated = table: 000000013EB0F650
ApplyDamage_legion = function - scripts/components/inventory.lua:371
MoveItemFromAllOfSlot = function - ../mods/workshop-1909182187/scripts/medal_hook
pchen727 18 Apr @ 6:34am 
日志2
[00:37:09]: [string "scripts/components/inventoryitem.lua"]:10: attempt to index field 'inventoryitem' (a nil value)
LUA ERROR stack traceback:
scripts/class.lua:43 in () ? (Lua) <36-45>
t = table: 000000016F616220
k = owner
v = nil
p = table: 000000016F6164A0
old = nil
scripts/components/inventoryitem.lua:176 in (method) ClearOwner (Lua) <175-177>
self =
isnew = false
nobounce = false
trappable = true
pushlandedevents = true
is_landed = false
IsHeldBy = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2566
OnPutInInventory = function - ../mods/workshop-3054561212/modmain.lua:246
OnDropped = function - ../mods/workshop-3054561212/modmain.lua:271
inst = 132901 - blank_certificate (valid:false)
keepondeath = false
droprandomdir = false
canbepickedupalive = false
sinks = false
_ = table: 000000016F616400
scripts/components/inventoryitem.lua:259 in (method) OnRemoved (Lua) <255-262>
self =
isnew = false
nobounce = false
trappable = true
pushlandedevents = true
is_landed = false
IsHeldBy = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2566
OnPutInInventory = function - ../mods/workshop-3054561212/modmain.lua:246
OnDropped = function - ../mods/workshop-3054561212/modmain.lua:271
inst = 132901 - blank_certificate (valid:false)
keepondeath = false
droprandomdir = false
canbepickedupalive = false
sinks = false
_ = table: 000000016F616400
scripts/components/container.lua:859 in () ? (Lua) <833-864>
self =
opencount = 1
slots = table: 0000000131287D90
RemoveAllItemsWithSlot = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2382
ignoresound = false
inst = 132884 - medal_box(LIMBO) (valid:true)
GetSpecificSlotForItem = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2344
MoveItemFromOneOfSlot = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2415
opener = 130008 - wanda (valid:true)
onclosefn = function - ../mods/workshop-1909182187/scripts/prefabs/medal_box.lua:98
MoveItemFromAllOfSlot = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2472
AddSomeOfActiveItemToSlot = function - ../mods/workshop-2966979495/scripts/postInits/containerPostInit.lua:78
onopenfn = function - ../mods/workshop-1909182187/scripts/prefabs/medal_box.lua:91
MoveItemFromHalfOfSlot = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2488
Open = function - ../mods/workshop-2657513551/modmain/misc.lua:6
openlist = table: 00000001312879D0
GetSpecificMedalSlotForItem = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2355
currentuser = 130008 - wanda (valid:true)
ignoreoverstacked = false
AddSomeOfSlotToActiveItem = function - ../mods/workshop-2966979495/scripts/postInits/containerPostInit.lua:10
_ = table: 0000000131287C00
item = 132901 - blank_certificate (valid:false)
slot = 12
wholestack = true
keepoverstacked = nil
stackable = nil
=(tail call):-1 in () (tail) <-1--1>
scripts/components/container.lua:1013 in (method) TakeActiveItemFromAllOfSlot (Lua) <998-1019>
self =
opencount = 1
slots = table: 0000000131287D90
RemoveAllItemsWithSlot = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2382
ignoresound = false
inst = 132884 - medal_box(LIMBO) (valid:true)
GetSpecificSlotForItem = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2344
MoveItemFromOneOfSlot = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2415
opener = 130008 - wanda (valid:true)
onclosefn = function - ../mods/workshop-1909182187/scripts/prefabs/medal_box.lua:98
MoveItemFromAllOfSlot = function - ../mods/workshop-1909182187/scripts/medal_hook.lua:2472
AddSomeOfActiveItemToSlot = function - ../mods/workshop-2966979495/scripts/postInits/containerPostInit.lua:78

[00:37:09]: [string "scripts/components/inventoryitem.lua"]:10: attempt to index field 'inventoryitem' (a nil value)
LUA ERROR stack traceback:
scripts/class.lua:43 in () ? (Lua) <36-45>
scripts/components/inventoryitem.lua:176 in (method) ClearOwner (Lua) <175-177>
scripts/components/inventoryitem.lua:259 in (method) OnRemoved (Lua) <255-262>
scripts/components/container.lua:859 in () ? (Lua) <833-864>
=(tail call):-1 in () (tail) <-1--1>
scripts/components/container.lua:1013 in (method) TakeActiveItemFromAllOfSlot (Lua) <998-1019>
scripts/components/container_replica.lua:523 in (method) TakeActiveItemFromAllOfSlot (Lua) <521-527>
scripts/widgets/invslot.lua:112 in (method) Click (Lua) <58-146>
scripts/widgets/invslot.lua:26 in () ? (Lua) <10-56>
=(tail call):-1 in () (tail) <-1--1>
=(tail call):-1 in () (tail) <-1--1>
=(tail call):-1 in () (tail) <-1--1>
< >
Showing 1-2 of 2 comments
Per page: 1530 50