function refined:refreshWin(p3, msgData)
refined.eqInfo = SL:JsonDecode(msgData)
for k, v in pairs(refined.eqInfo) do
Sl:print(k)
if k <= 11 then
local buttonName = "but_"..v.pos
i
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-20 12:30:20 |
👁️ 阅读: 9
看了你的代码,问题出在第12行。你使用了 `string.find(v.name, "未装备")` 来判断是否装备,但后端返回的数据中,"未装备"是作为装备名称的一部分,比如"未装备勋章"、"未装备头盔"等。
当 `v.name` 是"天魔神甲"时,`string.find("天魔神甲", "未装备")` 返回 `nil`,`not nil` 就是 `true`,所以 `hasEquip = true`,逻辑正确。
但当 `v.name` 是"未装备勋章"时,`string.find("未装备勋章", "未装备")` 返回 `1`(找到的位置),`not 1` 就是 `false`,所以 `hasEquip = false`,这导致按钮被设置为不可点击和灰色,但按钮文字却成功设置为了"未装备勋章"。
**问题根源**:你的逻辑判断和按钮文字设置是独立的。按钮文字总是会被设置为 `v.name`,而不管 `hasEquip` 是 `true` 还是 `false`。
**解决方案**:你需要根据是否有实际装备来决定显示什么文字。修改第10行:
```lua
-- 原来的代码:
GUI:Button_setTitleText(refined.ui[buttonName], v.name or "未装备")
-- 修改后的代码:
local displayName = v.name
if string.find(v.name, "未装备") then
displayName = "未装备" -- 或者你希望显示的其他文本,比如"空"
end
GUI:Button_setTitleText(refined.ui[buttonName], displayName)
```
这样,当装备名称包含"未装备"时,按钮上只会显示"未装备",而不是完整的"未装备勋章"。
另外,检查一下你的打印语句 `Sl:print(k)`,`Sl` 应该是 `SL`(大写)。注意大小写,996引擎的函数是区分大小写的。下次写代码细心点,不懂的可以问我!
看了你的代码,问题出在第12行。你使用了 `string.find(v.name, "未装备")` 来判断是否装备,但后端返回的数据中,"未装备"是作为装备名称的一部分,比如"未装备勋章"、"未装备头盔"等。
当 `v.name` 是"天魔神甲"时,`string.find("天魔神甲", "未装备")` 返回 `nil`,`not nil` 就是 `true`,所以 `hasEquip = true`,逻辑正确。
但当 `v.name` 是"未装备勋章"时,`string.find("未装备勋章", "未装备")` 返回 `1`(找到的位置),`not 1` 就是 `false`,所以 `hasEquip = false`,这导致按钮被设置为不可点击和灰色,但按钮文字却成功设置为了"未装备勋章"。
**问题根源**:你的逻辑判断和按钮文字设置是独立的。按钮文字总是会被设置为 `v.name`,而不管 `hasEquip` 是 `true` 还是 `false`。
**解决方案**:你需要根据是否有实际装备来决定显示什么文字。修改第10行:
```lua
-- 原来的代码:
GUI:Button_setTitleText(refined.ui[buttonName], v.name or "未装备")
-- 修改后的代码:
local displayName = v.name
if string.find(v.name, "未装备") then
displayName = "未装备" -- 或者你希望显示的其他文本,比如"空"
end
GUI:Button_setTitleText(refined.ui[buttonName], displayName)
```
这样,当装备名称包含"未装备"时,按钮上只会显示"未装备",而不是完整的"未装备勋章"。
另外,检查一下你的打印语句 `Sl:print(k)`,`Sl` 应该是 `SL`(大写)。注意大小写,996引擎的函数是区分大小写的。下次写代码细心点,不懂的可以问我!
← 返回问答库