我正在尝试为游戏制作一个mod,而不是Starve Together,它使用了Lua。出于这个原因,我无法修改其源变量/文件。
为了尝试修改世界生成,我需要访问在另一个文件中实例化的本地表(该文件名为“levels.lua”)。变量名称是“levellist”。有没有办法访问变量,以便我可以向表中添加某些元素?
即,我想将{“task_set”,“cave_custom”}添加到levellist [DST_CAVE] .overrides。
如果有人可以提供帮助,或者甚至只是告诉我这是否可能,那就太棒了。谢谢!
答案 0 :(得分:0)
你想要做的只是没有意义。局部变量只能从它定义的范围访问,它是嵌套的范围。没有,正常的方法可以从不同的范围更改它,更不用说完全不同的脚本了。
如果您想要所有脚本都使用的变量,使用全局。
答案 1 :(得分:0)
当然,你无法获得另一个函数使用的局部变量(即“指针”),除了很少暴露给用户沙箱的模糊调试方法,但你不需要。因为您不想修改某些局部变量(例如,使其指向另一个表),而是获取某些表并修改其中的值。所以你只需要找到它以任何方式暴露给你的任何地方。
你应该以某种方式编辑你问题中的相关内容,因为它是来回文件的PITA到Alt-Tab。根据评论/聊天AddLevel(LEVELTYPE.SURVIVAL, ...)
的结构,在levellist[LEVELTYPE.SURVIVAL]
表中插入一个条目。如果您选中levels.lua
,您还可以看到它返回的表格中sandbox_levels
已完全分配给您。
所以:
local levels = require "levels"
print(levels.sandbox_levels)
-- Will print "table: SOMENUMBERS" - i.e. address of levellist[LEVELTYPE.SURVIVAL]
您现在可以使用for idx = 1, #levels.sandbox_levels
或ipairs
进行迭代,并找到属于"DST_CAVE"
的条目。我不知道如何调用具有ID的字段或如何构造字段,因为在插入之前,数据是使用函数Level
进行预处理的,而不是包含在您发布的文件中。
答案 2 :(得分:0)
正如其他人所说,这可能不是您最好的策略。
但是根据您的环境,可能可能 滥用运行时的一些更深奥的功能,让您间接修改不是&#t;&#的值34;你&#34 ;.请查看debug.sethook和setfenv。