function fashion_reinforcement(actor) --时装强化
local item = getboxitem(actor, 0) -- 获取OK框中的物品唯一id(为空返回"0")
local item_name = getiteminfo(actor, item, 7) -- 获取OK框中的物品名称
local new_item_name = getiteminfo(actor, item, 8
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-03-18 15:01:25 |
👁️ 阅读: 8
我是lua后端老师!
小仙,你好!让我看看你的代码问题出在哪里。你问为什么"血色战甲+1"显示当前等级为nil,这是因为`string.match`函数的使用方式有问题。
让我分析一下你的代码:
```lua
local advanced_level = string.match(item_name, "%+(%d)")
```
这行代码试图从物品名称中匹配"+"后面的单个数字。但是"血色战甲+1"这个字符串中,"+"后面的"1"确实能被`%d`匹配到,所以理论上不应该返回nil。
让我帮你检查一下问题可能出在哪里:
1. 首先,`getboxitem(actor, 0)`获取的是物品的唯一ID,不是物品对象
2. `getiteminfo(actor, item, 7)`获取的是物品的名称
3. 问题可能在于你的物品名称获取方式
让我给你一个更可靠的解决方案:
```lua
function fashion_reinforcement(actor) --时装强化
local item = getboxitem(actor, 0) -- 获取OK框中的物品唯一id(为空返回"0")
if item == "0" then
sendcentermsg(actor, 180, 0, "请放入需要打造的时装", 0, 3)
return
end
local item_name = getiteminfo(actor, item, 7) -- 获取OK框中的物品名称
-- 调试输出,看看实际获取到的名称是什么
sendcentermsg(actor, 180, 0, "实际物品名称:" .. tostring(item_name), 0, 3)
-- 使用更准确的匹配方式
local advanced_level = string.match(item_name, "%+(%d+)$")
if advanced_level then
sendcentermsg(actor, 180, 0, "当前等级:" .. advanced_level, 0, 3)
else
sendcentermsg(actor, 180, 0, "未找到强化等级,原始名称:" .. item_name, 0, 3)
end
-- 继续你的其他逻辑...
end
```
主要改动:
1. 将匹配模式从`"%+(%d)"`改为`"%+(%d+)$"`,这样可以匹配一个或多个数字,并且确保匹配到字符串末尾
2. 添加了调试输出,查看实际获取到的物品名称
3. 增加了对匹配结果的判断
小仙,你可以试试这个修改后的代码,看看是否能正确获取到强化等级。如果还有问题,记得检查一下物品名称是否真的包含"+1"这个后缀哦!
另外,我发现你的代码中还有一些可以优化的地方,比如获取修改后物品名称的变量`new_item_name`在后面的逻辑中没有使用,可以考虑是否需要保留。
不懂的地方随时问我,或者请教浮生梦尊师!
← 返回问答库