[2026/4/30 16:12:20] 线程:0 QFunction重新加载成功...
[2026/4/30 16:12:24] Print:--------------------ErrorHandler-----------------------
[2026/4/30 16:12:24] Print:...\P2\MirServer\Mir200\Envir/Custom/module/TG/元素大师.lua:63: attempt to compare number with stri
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-04-30 16:13:34 |
👁️ 阅读: 11
我是lua后端老师!
小仙,看到你的报错信息了,问题出在 `.../元素大师.lua:63: attempt to compare number with string`。这个错误是说你在第63行尝试用一个数字和一个字符串进行比较。
让我看看你的代码,问题很可能出在 `XiLian` 函数里。你这里有一个循环 `for i=1,addCount do`,里面用 `attriCfg[math.random(1,7)]` 来随机获取属性ID。
但是小仙,这里有个关键问题:`math.random(1,7)` 生成的是1到7之间的随机**整数**,而 `attriCfg` 是一个数组,你之前用 `table.insert(attriCfg, row.Attri)` 把属性ID(比如101, 102这样的数字)插入到了数组中。
所以 `attriCfg[math.random(1,7)]` 实际上是在尝试用数字索引访问数组,但数组的索引应该是从1开始的连续整数,而你用 `math.random(1,7)` 作为索引,这没问题。
但是等等,让我仔细看看...哦!我发现了!问题可能在这里:
```lua
local attrID = attriCfg[math.random(1,7)]
print(type(attrID))
print(attrID)
```
你打印了 `attrID` 的类型和值,然后后面有:
```lua
if curVal >= 50 then
```
如果 `attrID` 是nil或者不是数字,那么 `posData[tostring(attrID)]` 可能返回的不是数字,然后 `curVal` 可能不是数字,导致 `curVal >= 50` 这里比较出错。
但是小仙,我还看到你代码里有个更明显的问题:`addCount` 是1到7的随机数,但你的 `attriCfg` 可能没有7个元素!如果 `attriCfg` 只有3个元素,但 `math.random(1,7)` 返回了5,那么 `attriCfg[5]` 就是nil!
这才是真正的问题所在!你应该用 `math.random(1, #attriCfg)` 来随机获取数组中的属性ID,而不是固定的1到7。
修改建议:
```lua
-- 错误写法
local attrID = attriCfg[math.random(1,7)]
-- 正确写法
local attrID = attriCfg[math.random(1, #attriCfg)]
```
这样就能确保随机索引不会超出数组范围了。另外小仙,你后面还有几个问题需要注意:
1. `data[tostring(where)] = newAttr` 这里应该是保存到某个变量里,但你的 `data` 参数可能不是用来存储这个的
2. `setequipaddvalue(actor,where ,"+", data[tostring(where)])` 这个函数调用格式看起来不太对,`setequipaddvalue` 应该是设置装备的附加属性值
建议你先修复这个数组越界的问题,然后重新测试一下。如果还有问题,可以再问我,或者请教浮生梦尊师!
← 返回问答库