在 Lua 中从另一个脚本修改本地变量
我正在尝试创建一个使用 Lua 语言的游戏 Don't Starve Together 的 mod。因此,我不能修改他们的源变量/文件。
为了尝试修改世界生成,我需要访问在另一个文件(该文件名为 "levels.lua")中实例化的本地表。 变量名是 "levellist"。 是否有一种方法可以访问该变量,以便我可以向表中添加某些元素?
具体来说,我想向 levellist[DST_CAVE].overrides 添加 {"task_set", "cave_custom"}。
如果有人可以帮助或者告诉我是否可能,那就太好了。 谢谢!
当然,你无法访问另一个函数使用的局部变量(即“指针”),除非使用很少暴露给用户沙盒的模糊调试方法,但你并不需要这样做。因为你不想修改某些局部变量(例如将它指向另一个表),而是想要访问某个表并修改其中的值。所以你只需要找到任何一个地方,以任何方式将其暴露给你。
你应该在问题中编辑相关内容,因为来回切换文件真的很麻烦。根据注释/聊天记录提供的结构,AddLevel(LEVELTYPE.SURVIVAL, ...)会向levellist[LEVELTYPE.SURVIVAL]表中插入一个条目。如果你检查levels.lua,你还可以看到它返回一个表,sandbox_levels 正好分配给它。
因此:
local levels = require "levels"
print(levels.sandbox_levels)
-- 将打印“table: SOMENUMBERS”-即levellist[LEVELTYPE.SURVIVAL]的地址
你现在可以使用for idx = 1, #levels.sandbox_levels或ipairs来迭代它,并找到属于"DST_CAVE"的条目。我无法告诉你ID字段将被称为什么或其结构将如何,因为在插入你发布的文件之前,数据将经过函数Level 预处理。
正如其他人所建议的那样,这可能不是你最好的策略。
但是,根据你的环境,也许可以滥用一些更深奥的运行时特征,让你间接地修改那些不属于“你”的值。请查看debug.sethook和setfenv。
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
你要做的事情根本没有意义。局部变量只能从定义它的范围内以及嵌套的范围内访问。没有普通方法可以从不同的范围中进行更改,更不用说完全不同的脚本了。
如果你希望所有脚本都使用变量,请使用全局变量。