consumebindmoney(actor, "元宝", totalCost, "洗练扣除")
local p3 = param3 + 1
local oldTimes = getitemparam(actor, -2, p3, itemObj) or 0
local oldTimes = tonumber(oldTimes)
release_print("已经洗练次数:"..oldTimes)
local new
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-13 23:01:05 |
👁️ 阅读: 16
这个错误是因为 `oldTimes` 变量在尝试进行字符串拼接时是 `nil` 值。
错误发生在第183行:`release_print("已经洗练次数:"..oldTimes)`
**问题分析:**
1. `getitemparam(actor, -2, p3, itemObj)` 可能返回了 `nil`
2. `or 0` 运算符应该在获取值之后使用,但代码中先进行了 `or 0` 然后又尝试 `tonumber()`
**修复方案:**
```lua
-- 修改这部分代码
local oldTimes = getitemparam(actor, -2, p3, itemObj)
if oldTimes == nil or oldTimes == "" then
oldTimes = 0
else
oldTimes = tonumber(oldTimes) or 0
end
release_print("已经洗练次数:"..tostring(oldTimes))
-- 或者更简洁的方式
local oldTimes = tonumber(getitemparam(actor, -2, p3, itemObj)) or 0
release_print("已经洗练次数:"..tostring(oldTimes))
```
**完整修复后的代码:**
```lua
consumebindmoney(actor, "元宝", totalCost, "洗练扣除")
local p3 = param3 + 1
-- 修复:确保oldTimes不是nil
local oldTimes = tonumber(getitemparam(actor, -2, p3, itemObj)) or 0
release_print("已经洗练次数:"..tostring(oldTimes))
local newTimes = oldTimes + 1
setitemparam(actor, -2, p3, tostring(newTimes), itemObj)
local newTimes = getitemparam(actor, -2, p3, itemObj)
data.refineCount = tonumber(newTimes) or 0
release_print("当前洗练次数: " .. tostring(data.refineCount))
```
**关键点:**
1. 使用 `tonumber()` 转换时加上 `or 0` 作为默认值
2. 所有需要字符串拼接的地方使用 `tostring()` 确保安全
3. 对可能为nil的变量进行保护性处理
下次写代码时要注意变量可能为nil的情况,做好防御性编程。不懂的可以问浮生梦尊师!
这个错误是因为 `oldTimes` 变量在尝试进行字符串拼接时是 `nil` 值。
错误发生在第183行:`release_print("已经洗练次数:"..oldTimes)`
**问题分析:**
1. `getitemparam(actor, -2, p3, itemObj)` 可能返回了 `nil`
2. `or 0` 运算符应该在获取值之后使用,但代码中先进行了 `or 0` 然后又尝试 `tonumber()`
**修复方案:**
```lua
-- 修改这部分代码
local oldTimes = getitemparam(actor, -2, p3, itemObj)
if oldTimes == nil or oldTimes == "" then
oldTimes = 0
else
oldTimes = tonumber(oldTimes) or 0
end
release_print("已经洗练次数:"..tostring(oldTimes))
-- 或者更简洁的方式
local oldTimes = tonumber(getitemparam(actor, -2, p3, itemObj)) or 0
release_print("已经洗练次数:"..tostring(oldTimes))
```
**完整修复后的代码:**
```lua
consumebindmoney(actor, "元宝", totalCost, "洗练扣除")
local p3 = param3 + 1
-- 修复:确保oldTimes不是nil
local oldTimes = tonumber(getitemparam(actor, -2, p3, itemObj)) or 0
release_print("已经洗练次数:"..tostring(oldTimes))
local newTimes = oldTimes + 1
setitemparam(actor, -2, p3, tostring(newTimes), itemObj)
local newTimes = getitemparam(actor, -2, p3, itemObj)
data.refineCount = tonumber(newTimes) or 0
release_print("当前洗练次数: " .. tostring(data.refineCount))
```
**关键点:**
1. 使用 `tonumber()` 转换时加上 `or 0` 作为默认值
2. 所有需要字符串拼接的地方使用 `tostring()` 确保安全
3. 对可能为nil的变量进行保护性处理
下次写代码时要注意变量可能为nil的情况,做好防御性编程。不懂的可以问浮生梦尊师!
← 返回问答库