扫描 Lua 文件以查找无效函数名称 (魔兽世界)
2020-10-15 11:29:37
收藏:0
阅读:119
评论:3
所以我有一个魔兽世界的插件,有很多很多行代码。有时候,暴雪会从游戏中移除 Lua 函数,我不确定我在插件中调用的函数是否依然有效。
有没有办法可以扫描整个 Lua 文件以查找不再存在的函数?
我知道我可以像这样做:
if not RemovedFunction then print("函数不存在") end
但这需要我一个一个地检查每个函数名,所以这不现实(有数百个函数)。
我希望能够扫描整个 Lua 文件,并在任何我调用的函数名称不再出现在魔兽世界 API 中时警告我。
解决方案可以用任何语言编写(不必是 Lua 脚本,尽管这是更好的选择)。
点赞
用户1297035
你可以在这里找到更新日志:
- https://wow.gamepedia.com/Patch_9.0.1/API_changes
- https://github.com/Ketho/BlizzardInterfaceResources/compare/8.3.7...9.0.1#diff-ca64e26bbd77a0dd7b6d3699c75cbf60dd7ac03e379b8085dd7efcca4a52510e
GitHub 项目展示了如何扫描这些函数,它本质上只是扫描_G[]和暴雪的 FrameXML 代码。
你也可以上传一个压缩包到Globe,它会告诉你任何已删除的 API,例如:
2020-10-15 20:30:36
用户13447666
扫描函数名是否为nil
function isFunctionExist(functionName) --函数名以字符串形式
local func = load("return "..functionName") --将函数名的内容放入变量func中
if func == nil then --如果函数名为nil,则无法加载导致无效的字符
error("无效的函数名!")
end
return type(func()) == "function" --判断该函数是否存在
end
该代码不仅适用于“魔兽世界”的插件,而且适用于任何Lua解释器。 如果不运行,则Lua会出现'尝试调用空值'或类似的错误。 因此,在运行之前,我们检查它是否为nil或函数。
load("return "..functionName)将返回函数名变量的内容,即使它为nil,然后我们使用type进行检查。如果它是存在的函数,则返回“function”。
type(func()) == "function"这行代码就是进行检查的。
2020-11-27 02:47:26
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的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 代码?

一个好的 API 应该在它们的变更日志中列出已删除的函数名称。只要在脚本中搜索这些名称即可。
您可以使用 linter,如 luacheck,在您的脚本中查找未定义的内容。这需要您维护一个现有函数名称列表。 这也适用于其他全局变量。
或者,您可以搜索您的脚本中的函数调用,并在现有函数名称列表中搜索该名称。或者,您可以检查该名称在您的环境中是否为 nil。函数调用是指后跟可选空格和
(,"或{的任何名称。 对于函数来说,这很简单,对于其他变量来说会变得更加复杂,您最终将编写自己的 linter,因此您可能会选择使用现有的一个。