SL:print("打开沙城捐献界面")
local npc = {}
-- 定义称号对应表
npc.rankTitle = {
[1] = "至尊",
[2] = "战神",
[3] = "枭雄",
[4] = "猛将",
[5] = "忠勇"
}
-- 玩家职业
npc.job ={
[0] = "战士",
[1] = "法师",
[2] = "道士"
}
function npc:openWin(msgID, p1
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-05 01:14:50 |
👁️ 阅读: 4
```lua
SL:print("打开沙城捐献界面")
local npc = {}
npc.rankTitle = {
[1] = "至尊",
[2] = "战神",
[3] = "枭雄",
[4] = "猛将",
[5] = "忠勇"
}
npc.job = {
[0] = "战士",
[1] = "法师",
[2] = "道士"
}
function npc:openWin(msgID, p1, p2, p3, msgData)
SL:print("===== 收到后端消息 =====")
SL:print("消息ID: " .. tostring(msgID))
SL:print("参数1: " .. tostring(p1))
SL:print("参数2: " .. tostring(p2))
SL:print("参数3: " .. tostring(p3))
SL:print("字符串: " .. tostring(msgData))
SL:print("=======================")
if p2 == 0 then
SL:SendLuaNetMsg(2017, 17, 0, 0, "沙城捐献")
local win_donate = GUI:Win_Create("win_donate", 0, 0, 0, 0)
GUI:LoadExport(win_donate, "donate")
npc.ui = GUI:ui_delegate(win_donate)
GUI:addOnClickEvent(npc.ui.esc, function()
GUI:Win_Close(win_donate)
end)
GUI:addMouseOverTips(npc.ui.hint_btn, "str", {x = 0, y = -55}, {x = 0.5, y = 0.5}, nil)
GUI:addOnClickEvent(npc.ui.donate_btn, function()
GUI:setVisible(npc.ui.firstBg, false)
GUI:setVisible(npc.ui.secondBg, true)
GUI:setVisible(npc.ui.thirdBg, false)
GUI:TextInput_Create(npc.ui.inPut_bg, "inPut", 0, 0, 220, 40, 16)
GUI:TextInput_setInputMode(npc.ui.inPut, 5)
end)
GUI:addOnClickEvent(npc.ui.inPut_btn1, function()
local inputMoney = GUI:TextInput_getString(npc.ui.inPut)
SL:SendLuaNetMsg(2017, 17, 2, 0, inputMoney)
end)
GUI:addOnClickEvent(npc.ui.inPut_btn2, function()
GUI:setVisible(npc.ui.firstBg, true)
GUI:setVisible(npc.ui.secondBg, false)
GUI:setVisible(npc.ui.thirdBg, false)
end)
end
if p2 == 1 then
SL:ShowSystemTips("请输入正确的捐献数量!")
return
elseif p2 == 2 then
if not npc.ui or GUI:Win_IsNull(npc.ui.makeSure_text) then
return
end
local inputMoney = GUI:TextInput_getString(npc.ui.inPut)
GUI:Text_setString(npc.ui.makeSure_text, "您确定要捐献" .. inputMoney .. "个金币吗")
GUI:setVisible(npc.ui.firstBg, false)
GUI:setVisible(npc.ui.secondBg, false)
GUI:setVisible(npc.ui.thirdBg, true)
GUI:addOnClickEvent(npc.ui.makeSure_btn1, function()
SL:SendLuaNetMsg(2017, 17, 3, 0, inputMoney)
end)
GUI:addOnClickEvent(npc.ui.makeSure_btn2, function()
GUI:setVisible(npc.ui.firstBg, false)
GUI:setVisible(npc.ui.secondBg, true)
GUI:setVisible(npc.ui.thirdBg, false)
end)
end
if p2 == 3 then
SL:ShowSystemTips("你的金币不足请确认好数量再来捐献!")
return
elseif p2 == 4 then
if not npc.ui then
return
end
local rankData = SL:JsonDecode(msgData)
SL:dump(rankData)
for i = 1, 5 do
local topName = "Top" .. i .. "_Name"
local topLv = "Top" .. i .. "_Lv"
local topJob = "Top" .. i .. "_Job"
local topCount = "Top" .. i .. "_Count"
if rankData.rankList and rankData.rankList[i] then
local data = rankData.rankList[i]
GUI:Text_setString(npc.ui[topName], data.name or "暂无")
GUI:Text_setString(npc.ui[topLv], tostring(data.lv or "暂无"))
GUI:Text_setString(npc.ui[topJob], npc.job[data.job] or "暂无")
GUI:Text_setString(npc.ui[topCount], tostring(data.total or "暂无"))
end
end
local player = rankData.playerData or {}
local total = tostring(player.playerPos or 0)
local rank = "第" .. total .. "名"
GUI:Text_setString(npc.ui.count, tostring(player.total or 0))
GUI:Text_setString(npc.ui.ranking, rank or "未上榜")
GUI:setVisible(npc.ui.firstBg, true)
GUI:setVisible(npc.ui.secondBg, false)
GUI:setVisible(npc.ui.thirdBg, false)
end
end
SL:RegisterLuaNetMsg(1017, function(msgID, p1, p2, p3, msgData)
npc:openWin(msgID, p1, p2, p3, msgData)
end)
GUI:addKeyboardEvent("KEY_SPACE", function()
SL:Require("qianduan/reload", true)
SL:Require("qianduan/qdreLevel", true)
SL:Require("qianduan/invite", true)
SL:Require("qianduan/mission", true)
SL:Require("qianduan/topbutton", true)
SL:Require("qianduan/daily", true)
SL:Require("qianduan/yaochen", true)
SL:Require("qianduan/choujiang", true)
SL:Require("qianduan/eqrefined", true)
SL:Require("qianduan/tujian", true)
SL:Require("qianduan/furious", true)
SL:Require("qianduan/skillmaster", true)
SL:Require("qianduan/juanxian", true)
SL:Require("qianduan/newServerActive", true)
SL:Require("qianduan/dailyActive", true)
SL:Require("qianduan/worldFirst", true)
end)
```
**代码问题分析:**
1. **变量作用域问题**:`inputMoney` 变量在函数内部定义,但在 `p2 == 2` 的判断中直接使用,这会导致变量为 `nil`。需要将 `inputMoney` 定义为局部变量或存储在 `npc` 表中。
2. **UI控件安全判断缺失**:在 `p2 == 2` 和 `p2 == 4` 的代码块中,没有检查 `npc.ui` 是否存在以及控件是否为空,可能导致空指针错误。
3. **函数调用错误**:`npc:openWin(msgData)` 这行代码会导致递归调用,因为 `msgData` 是字符串而不是消息参数。
4. **缺少 `delayTouchEnabled` 函数**:`GUI:delayTouchEnabled` 这个函数在浮生梦老师前端课程内容中不存在。
5. **数据转换问题**:`y.lv` 可能是数字类型,直接赋值给 `Text_setString` 可能导致类型错误。
**建议修改:**
- 将 `inputMoney` 定义为局部变量
- 添加 `GUI:Win_IsNull()` 检查
- 移除错误的递归调用
- 使用 `tostring()` 进行类型转换
- 注意代码的缩进和可读性
如果还有不明白的地方,随时可以问浮生梦尊师!
← 返回问答库