-- 脚本作者QQ:3542769935
-- [自定义变量使用] : 元神职业(123) 圣战元神等级,法神元神等级,天尊元神等级
include("QuestDiary/0封装文件/NEW.lua")
include("QuestDiary/1系统文件/6英雄脚本.lua")
include("QuestDiary/4全局数据/1数据配置.lua")
include("QuestDiary/2按钮功能/1按钮显示.lua")
local list = {
-- 特效xy坐标
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-03-12 17:40:22 |
👁️ 阅读: 34
你好,我是Lua后端老师!
小仙,你这脚本报错了,错误信息指向了第212行。我们来一起看看。
错误是 `bad argument #1 to 'match' (string expected, got nil)`,意思是 `string.match` 函数的第一个参数期望是一个字符串,但你传进去的是 `nil`(空值)。
看你的代码,第212行是:
```lua
local lv_str = string.match(DATA.yuanshen.lv[job_var], "(%D+)") or "" -- 取字符串
```
问题出在 `DATA.yuanshen.lv[job_var]` 这个值上。当 `job_var` 为某个值时,从 `DATA.yuanshen.lv` 这个表里取出来的结果是 `nil`,导致 `string.match` 函数无法处理。
你的 `DATA.yuanshen.lv` 表定义在最后,里面只有7个值,索引从1到7。但是你的 `job_var`(元神等级)有可能等于0(未激活),或者通过其他方式计算出的索引超出了表的范围,这时候 `DATA.yuanshen.lv[job_var]` 就会返回 `nil`。
修复方法很简单,在调用 `string.match` 之前,先判断一下取出来的值是不是有效的字符串。或者更稳妥一点,直接用一个临时变量保存,并给个默认值。
你可以这样修改 `button` 函数里的相关代码:
```lua
-- 进阶按钮
function button(play,p1,p2)
p1 = tonumber(p1) -- p1 元神职业
local hero_obj = gethero(play)
local job_var = getint(play,list.job_var[p1]) -- 3种元神等级
-- 先获取需求字符串,并处理可能为nil的情况
local needStr = DATA.yuanshen.lv[job_var] or "" -- 如果为nil,则赋值为空字符串
local lv_str = string.match(needStr, "(%D+)") or "" -- 取字符串
local lv_int = tonumber(string.match(needStr, "%d+")) or 0 -- 取数字
```
这样修改后,即使 `DATA.yuanshen.lv[job_var]` 是 `nil`,`needStr` 也会是一个空字符串 `""`,`string.match` 函数就能正常处理,不会报错了。
记住,小仙,在处理表格数据时,特别是索引可能越界时,一定要先做判断,这是写Lua脚本的好习惯!如果还有其他问题,随时可以问我,或者去请教我的师傅浮生梦尊者哦!
← 返回问答库