function fashion_advanced(actor) --时装进阶按钮
local item = getboxitem(actor, 0) -- 获取自定义OK框中的物品唯一id(为空返回"0")
local item_name = getiteminfo(actor, item, 7) -- 获取自定义OK框中的物品名称
if item == "0" then
sendcenterms
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-03-17 22:33:32 |
👁️ 阅读: 3
我是lua后端老师!
小仙,你遇到的问题很典型,这是因为`getiteminfo`获取的是物品在数据库`cfg_equip`或`cfg_item`表中的原始名称,而不是通过`changeitemname`这类函数修改后显示在背包里的名字。
根据参考资料,要获取物品当前显示的名字,你应该使用`getiteminfo`的`类型7`,这个参数获取的就是物品的当前名称(包括你修改过的)。你的代码里已经这么用了,所以理论上`item_name`应该就是“血色战甲+1”。
如果获取到的还是“血色战甲”,可能有以下几种情况,需要你检查一下:
1. **检查物品对象**:你通过`getboxitem(actor, 0)`获取到的`item`对象,是否确实是背包里那个名字已经变成“血色战甲+1”的物品?请确保自定义OK框中放入的是正确的物品。
2. **检查修改时机**:你是在什么时候、通过什么函数将名字改为“血色战甲+1”的?如果是在`fashion_advanced`函数**之外**修改的,那么在`fashion_advanced`函数内获取时,名字应该已经是新的了。如果修改名字的代码和`getiteminfo`在同一个函数或同一个触发流程里,你需要确保修改名字的操作**发生在** `getiteminfo` **之前**。
3. **刷新物品信息**:在极少数情况下,修改名字后可能需要刷新物品信息才能正确获取。你可以尝试在修改名字后调用`refreshitem(actor, item)`,然后再用`getiteminfo`获取。
这里给你一个修改后的示例流程,你可以参考一下:
```lua
function fashion_advanced(actor) -- 时装进阶按钮
local item = getboxitem(actor, 0) -- 获取自定义OK框中的物品唯一id(为空返回"0")
if item == "0" then
sendcentermsg(actor, 180, 0, "请放入需要打造的时装", 0, 3)
return
end
-- 首先,获取当前名字(修改前)
local old_item_name = getiteminfo(actor, item, 7)
release_print("修改前名字: " .. tostring(old_item_name))
-- 然后,进行你的改名操作(例如:进阶成功,名字+1)
-- 假设新的名字是 old_item_name .. "+1"
local new_item_name = old_item_name .. "+1"
changeitemname(actor, item, new_item_name) -- 修改物品显示名称
-- 改名后,立即刷新一下物品信息(可选,但建议)
refreshitem(actor, item)
-- 再次获取,验证新名字
local current_item_name = getiteminfo(actor, item, 7)
release_print("修改后名字: " .. tostring(current_item_name))
local advanced_level = string.match(current_item_name, "%+(%d)")
sendcentermsg(actor, 180, 0, "物品名称:" .. tostring(current_item_name), 0, 3)
sendcentermsg(actor, 180, 0, "当前等级:" .. tostring(advanced_level), 0, 3)
end
```
如果按照以上步骤检查后问题依旧,请再仔细核对一下你的物品操作流程,或者告诉我更多细节,比如你改名用的具体函数和调用时机。不懂的可以随时问我,或者请教浮生梦尊师!
我是lua后端老师!
小仙,你遇到的问题很典型,这是因为`getiteminfo`获取的是物品在数据库`cfg_equip`或`cfg_item`表中的原始名称,而不是通过`changeitemname`这类函数修改后显示在背包里的名字。
根据参考资料,要获取物品当前显示的名字,你应该使用`getiteminfo`的`类型7`,这个参数获取的就是物品的当前名称(包括你修改过的)。你的代码里已经这么用了,所以理论上`item_name`应该就是“血色战甲+1”。
如果获取到的还是“血色战甲”,可能有以下几种情况,需要你检查一下:
1. **检查物品对象**:你通过`getboxitem(actor, 0)`获取到的`item`对象,是否确实是背包里那个名字已经变成“血色战甲+1”的物品?请确保自定义OK框中放入的是正确的物品。
2. **检查修改时机**:你是在什么时候、通过什么函数将名字改为“血色战甲+1”的?如果是在`fashion_advanced`函数**之外**修改的,那么在`fashion_advanced`函数内获取时,名字应该已经是新的了。如果修改名字的代码和`getiteminfo`在同一个函数或同一个触发流程里,你需要确保修改名字的操作**发生在** `getiteminfo` **之前**。
3. **刷新物品信息**:在极少数情况下,修改名字后可能需要刷新物品信息才能正确获取。你可以尝试在修改名字后调用`refreshitem(actor, item)`,然后再用`getiteminfo`获取。
这里给你一个修改后的示例流程,你可以参考一下:
```lua
function fashion_advanced(actor) -- 时装进阶按钮
local item = getboxitem(actor, 0) -- 获取自定义OK框中的物品唯一id(为空返回"0")
if item == "0" then
sendcentermsg(actor, 180, 0, "请放入需要打造的时装", 0, 3)
return
end
-- 首先,获取当前名字(修改前)
local old_item_name = getiteminfo(actor, item, 7)
release_print("修改前名字: " .. tostring(old_item_name))
-- 然后,进行你的改名操作(例如:进阶成功,名字+1)
-- 假设新的名字是 old_item_name .. "+1"
local new_item_name = old_item_name .. "+1"
changeitemname(actor, item, new_item_name) -- 修改物品显示名称
-- 改名后,立即刷新一下物品信息(可选,但建议)
refreshitem(actor, item)
-- 再次获取,验证新名字
local current_item_name = getiteminfo(actor, item, 7)
release_print("修改后名字: " .. tostring(current_item_name))
local advanced_level = string.match(current_item_name, "%+(%d)")
sendcentermsg(actor, 180, 0, "物品名称:" .. tostring(current_item_name), 0, 3)
sendcentermsg(actor, 180, 0, "当前等级:" .. tostring(advanced_level), 0, 3)
end
```
如果按照以上步骤检查后问题依旧,请再仔细核对一下你的物品操作流程,或者告诉我更多细节,比如你改名用的具体函数和调用时机。不懂的可以随时问我,或者请教浮生梦尊师!
← 返回问答库