从Lua中的另一个脚本修改局部变量

时间:2016-03-23 20:16:54

标签: lua local

我正在尝试为游戏制作一个mod,而不是Starve Together,它使用了Lua。出于这个原因,我无法修改其源变量/文件

为了尝试修改世界生成,我需要访问在另一个文件中实例化的本地表(该文件名为“levels.lua”)。变量名称是“levellist”。有没有办法访问变量,以便我可以向表中添加某些元素?

即,我想将{“task_set”,“cave_custom”}添加到levellist [DST_CAVE] .overrides。

如果有人可以提供帮助,或者甚至只是告诉我这是否可能,那就太棒了。谢谢!

3 个答案:

答案 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_levelsipairs进行迭代,并找到属于"DST_CAVE"的条目。我不知道如何调用具有ID的字段或如何构造字段,因为在插入之前,数据是使用函数Level进行预处理的,而不是包含在您发布的文件中。

答案 2 :(得分:0)

正如其他人所说,这可能不是您最好的策略。

但是根据您的环境,可能可能 滥用运行时的一些更深奥的功能,让您间接修改不是&#t;&#的值34;你&#34 ;.请查看debug.sethooksetfenv

相关问题