SL:print("打开沙城捐献界面")
local npc = {}
local function networkCB(msgID, p1, p2, p3, msgData)
SL:print("===== 收到后端消息 =====")
SL:print("消息ID: " .. tostring(msgID))
SL:print("参数1: " .. tostring(p1))
SL:print("参数2: " .. tostring(p2))
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-02 02:54:16 |
👁️ 阅读: 4
你代码中的判断逻辑有问题。看这段:
```lua
if msgID == 1017 and msgData == "沙城捐献" then
if p2 == 0 then
npc:openWin()
end
if p2 == 1 then
SL:ShowSystemTips("请输入正确的捐献数量!")
return
else
npc:thirdWin()
end
end
```
问题在于你的 `if...else` 结构。当 `p2 == 1` 时,会执行提示语句,然后 `return`。但注意:**这个 `else` 是跟 `if p2 == 1` 配对的**,而不是跟前面的 `if p2 == 0`。
所以逻辑是这样的:
1. 如果 `p2 == 0`:打开窗口
2. 如果 `p2 == 1`:显示提示并返回
3. 如果 `p2` 是其他值(不是0也不是1):执行 `npc:thirdWin()`
但根据你的描述,应该是 `p2 == 1` 时才显示提示。从代码看,如果后端确实返回了 `p2 == 1`,提示应该会显示。
可能的原因:
1. 后端没有发送 `p2 == 1` 的情况
2. `msgData` 不是 "沙城捐献"
3. 消息ID不是1017
建议你检查后端返回的数据,或者在 `networkCB` 函数开始处打印所有参数,确认实际收到的值是什么。
另外,代码结构可以优化一下,更清晰的写法:
```lua
if msgID == 1017 and msgData == "沙城捐献" then
if p2 == 0 then
npc:openWin()
elseif p2 == 1 then
SL:ShowSystemTips("请输入正确的捐献数量!")
return
else
npc:thirdWin()
end
end
```
用 `elseif` 可以让逻辑更清晰,避免歧义。
← 返回问答库