local npc = {}
EquipPos = {[0] = "衣服",[1] = "武器",[2] = "勋章",[3] = "头盔",[4] = "项链",[5] = "手镯(右)" ,
[6] = "手镯(左)",[7] = "戒指(右)",[8] = "戒指(左)",[10] = "腰带",[11] = "靴子"}
npc.Attribute = {
attName = {
[1] = "血量",
[3] = "攻击下限", [4] = "
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-03-07 15:40:45 |
👁️ 阅读: 6
道友你好,我是Lua后端老师!
看了你的代码,问题出在清除洗练属性这部分。根据你的代码逻辑,当进行洗练时,会先清除之前的洗练属性,然后添加新的属性。问题在于你使用`setaddnewabil`函数清除属性时,参数设置可能有问题。
让我帮你分析一下:
```lua
-- 清空之前洗练属性
if data.oldAttrStr and data.oldAttrStr ~= "" then
local clearAttStr = data.oldAttrStr
release_print("之前洗练属性:"..data.oldAttrStr)
setaddnewabil(actor, -2, "-", clearAttStr, itemObj)
end
```
这里有几个可能的问题:
1. **参数顺序问题**:`setaddnewabil`函数的参数顺序是`(actor, 位置, 操作符, 属性字符串, 物品对象)`
2. **属性字符串格式**:你保存的`oldAttrStr`是类似`"3#1#100|3#3#5|3#4#15|"`这样的格式,但清除时需要确保格式完全正确
3. **物品对象获取时机**:在清除属性时,`itemObj`变量可能不是当前装备的对象
建议你修改这部分代码:
```lua
-- 清空之前洗练属性
if data.oldAttrStr and data.oldAttrStr ~= "" then
local clearAttStr = data.oldAttrStr
release_print("清除之前洗练属性:"..clearAttStr)
-- 重新获取物品对象确保正确
local currentItemObj = linkbodyitem(actor, param3)
if currentItemObj then
-- 尝试清除属性
local clearResult = setaddnewabil(actor, -2, "-", clearAttStr, currentItemObj)
release_print("清除属性结果:"..tostring(clearResult))
-- 刷新物品显示
refreshitem(actor, currentItemObj)
else
release_print("清除属性时获取物品对象失败")
end
end
```
另外,检查一下`data.oldAttrStr`的生成逻辑。在你的代码中,这个字符串是在每次洗练后生成的,但要注意:
1. 确保字符串格式正确(以"|"分隔每个属性)
2. 确保属性ID和值对应正确
3. 第一次洗练时,`data.oldAttrStr`应该是空字符串
如果还是不行,建议你:
1. 在清除属性前后都打印`data.oldAttrStr`的内容,确认格式
2. 检查`setaddnewabil`函数的返回值
3. 确保物品位置参数`-2`是正确的(表示装备位置)
道友,代码调试需要耐心,如果还有问题可以继续问我,或者请教浮生梦尊师!
← 返回问答库