【发布时间】:2019-12-17 09:34:28
【问题描述】:
我正在尝试修复导致游戏崩溃的 Payday 2 BLT mod,但我是 modding 和 Lua 的初学者,作者一年多没有更新它,我设法找到了崩溃到脚本的第 13 行:
这是错误:
Application has crashed: C++ exception
mods/ShadowRaidLoud/lua/coremissionscriptelement.lua:13: stack overflow
据我了解,tostring(self._id) 可能会导致错误,但我不知道从这里该怎么做。
这是发薪日 2 模组,移除模组可能会阻止崩溃,但我希望自己修复它。尝试联系作者,但没有成功。
coremissionscriptelement.lua:
core:module("CoreMissionScriptElement")
core:import("CoreXml")
core:import("CoreCode")
core:import("CoreClass")
_G.ShadowRaidLoud = _G.ShadowRaidLoud or {}
ShadowRaidLoud = _G.ShadowRaidLoud
ShadowRaidLoud.Run_Script_Data = ShadowRaidLoud.Run_Script_Data or {}
local ShadowRaidLoud_OpenVault = MissionScriptElement.on_executed
function MissionScriptElement:on_executed(instigator, ...)
local _id = "id_" .. tostring(self._id) -- stack overflow crash here
if ShadowRaidLoud and ShadowRaidLoud.Enable and not Network:is_client() then
if (_id == "id_100961" or _id == "id_100962") and not ShadowRaidLoud.Run_Script_Data[_id] then
local element = self:get_mission_element(100964)
if element then
local msg = "[System] Vault will open in ".. ShadowRaidLoud.Time4Use.OpenVault .." seconds"
ShadowRaidLoud:Announce(msg)
local _tmp = ShadowRaidLoud:Run_Script("id_100964", self, 100964, element, instigator, ShadowRaidLoud.Time4Use.OpenVault)
ShadowRaidLoud.Run_Script_Data["id_100961"] = _tmp
ShadowRaidLoud.Run_Script_Data["id_100962"] = _tmp
end
end
end
ShadowRaidLoud_OpenVault(self, instigator, ...)
end
编辑:我尝试将 return 添加到函数的最后一行,但它仍然导致此崩溃日志崩溃:
Application has crashed: access violation
-------------------------------
Callstack:
payday2_win32_release (???) ???
-------------------------------
Current thread: LoadingEnvironment
-------------------------------
System information:
Application version : 1.92.790
CPU : Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz (2 cores); SSE; SSE2; SSE3; SSSE3; SSE4.1; SSE4.2
DirectX : 12.0
GPU : NVIDIA GeForce GTX 1070 / nvldumd.dll[26.21.14.3160]
Language : english
Memory : 16269MB 264KB
OS : 6.1.7600 () 0x300-0x1 (64 bits)
Physics : threaded
Renderer : DX9 threaded
Sound : Realtek Semiconductor Corp. (Speakers (Realtek High Definition Audio))
【问题讨论】:
-
MissionScriptElement:on_executed调用ShadowRaidLoud_OpenVault等于MissionScriptElement.on_executed。小心使用递归(否则 ouroboros 会导致程序中的堆栈溢出)
标签: lua stack-overflow