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-04-30 22:08:26 |
👁️ 阅读: 10
要实现点击二级按钮时先进行后端货币判断,需要在点击事件中发送一个验证请求到后端,然后根据后端返回的结果决定是否打开三级界面。
以下是修改后的代码,主要修改了二级确定按钮的点击事件:
```lua
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))
SL:print("参数3: " .. tostring(p3))
SL:print("字符串: " .. tostring(msgData))
SL:print("=======================")
if msgID == 1017 and msgData == "沙城捐献" then
if p3 == 0 then
npc:openWin()
end
end
end
function npc:openWin()
-- 创造外部界面
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.bg, false) -- 设置一级主窗口不显示
local win_TextInput = GUI:Win_Create("win_TextInput", 0, 0, 0, 0) -- 二级输入框界面
local mainBg = GUI:Image_Create(win_TextInput, "inPut_mainBg", 300, 400, "res/public_win32/bg_npc_01.png") -- 设置输入框主背景图
GUI:setTouchEnabled(mainBg, true) -- 设置背景图可触摸
GUI:setMouseEnabled(mainBg, true) -- 设置背景图可触摸
GUI:Text_Create(mainBg, "inPut_text", 20, 125, 16, "#ffffff", "请输入您要捐献的数量:")
local inPut_bg = GUI:Image_Create(mainBg, "inPut_bg", 195, 75, "res/public/1900015004.png") -- 设置输入框背景图
local inPut = GUI:TextInput_Create(inPut_bg, "inPut", 0, 0, 220, 40, 16) -- 设置输入框
GUI:TextInput_setInputMode(inPut, 5) -- 设置输入类型
local inPut_btn1 = GUI:Button_Create(mainBg, "inPut_btn1", 200, 15, "res/public/1900001003.png") -- 设置输入框确定按钮
-- 修改后的二级确定按钮点击事件
GUI:addOnClickEvent(inPut_btn1, function()
local inputMoney = GUI:TextInput_getString(inPut) -- 获取输入框内容
-- 先发送验证请求到后端,使用一个特殊的消息ID或参数来标识这是验证请求
-- 这里假设使用消息ID 1018 作为验证请求,p1=17表示沙城捐献验证,p2=1表示玩家ID
SL:SendLuaNetMsg(1018, 17, 1, 0, inputMoney)
-- 注册验证结果的消息回调
local function checkMoneyCB(msgID, p1, p2, p3, msgData)
if msgID == 1018 then
-- p3=1 表示货币足够,p3=0 表示货币不足
if p3 == 1 then
-- 货币足够,打开三级确认界面
local win_makeSure = GUI:Win_Create("win_makeSure", 0, 0, 0, 0) -- 三级输入框界面
local thirdBg = GUI:Image_Create(win_makeSure, "inPut_mainBg", 300, 400, "res/public_win32/bg_npc_01.png") -- 三级确定按钮背景
GUI:Text_Create(thirdBg, "makeSure_text", 20, 125, 16, "#ffff00", "您确定要捐献"..inputMoney.."个金币吗")
GUI:Text_Create(thirdBg, "makeSure_tipsText", 20, 65, 16, "#ff0000", "(点击确定可就不能反悔了哦!!!)")
local makeSure_btn1 = GUI:Button_Create(thirdBg, "makeSure_btn1", 200, 15, "res/public/1900001003.png") -- 设置三级确定按钮
-- 设置三级确认按钮内容
GUI:addOnClickEvent(makeSure_btn1, function()
SL:SendLuaNetMsg(1017, 17, 1, 0, "沙城捐献")
end)
local makeSure_btn2 = GUI:Button_Create(thirdBg, "makeSure_btn2", 330, 15, "res/public/1900001005.png") -- 设置三级取消按钮
-- 关闭三级确认界面
GUI:addOnClickEvent(makeSure_btn2, function()
GUI:Win_Close(win_makeSure)
end)
else
-- 货币不足,提示用户
SL:print("货币不足,无法捐献!")
-- 可以在这里添加一个提示框告诉用户货币不足
end
-- 移除这个临时回调,避免重复注册
SL:UnRegisterLuaNetMsg(1018, checkMoneyCB)
end
end
-- 注册验证回调
SL:RegisterLuaNetMsg(1018, checkMoneyCB)
end)
local inPut_btn2 = GUI:Button_Create(mainBg, "inPut_btn2", 330, 15, "res/public/1900001005.png") -- 设置输入框取消按钮
-- 关闭二级确认界面
GUI:addOnClickEvent(inPut_btn2, function()
GUI:Win_Close(win_TextInput)
GUI:setVisible(npc.ui.bg, true)
end)
end)
end
SL:RegisterLuaNetMsg(1017, networkCB)
```
**主要修改点:**
1. **新增验证消息ID**:使用消息ID 1018 作为货币验证的专用消息
2. **异步验证流程**:
- 点击二级确定按钮时,先发送验证请求到后端(SL:SendLuaNetMsg(1018, ...))
- 后端需要处理这个消息,检查玩家货币是否足够
- 后端返回结果(p3=1表示足够,p3=0表示不足)
3. **条件判断**:根据后端返回的结果,只有货币足够时才打开三级确认界面
4. **临时回调**:验证回调是临时的,验证完成后立即移除,避免重复注册
**后端需要配合:**
后端需要处理消息ID 1018,检查玩家的金币数量是否大于等于输入的inputMoney,然后返回相应的p3值。
这样就能实现先验证货币,货币不足时不打开三级界面的功能了。记得提醒浮生梦老师,后端也需要相应的处理逻辑哦!
← 返回问答库