SL:print("打开新服活动界面")
local npc = {}
npc.activityData = {
-- 第1个按钮:激情泡点
{
title = "激情泡点",
text = {"活动时间:开区30分钟开启。",
"活动介绍:场地内有4个普通光圈、1个超级光圈,占领光圈可获得海量经验和元宝。活动持续5分钟。"},
drops = {"大量元宝", "大量元宝", "海量经验", "海量经验"},
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-29 03:36:23 |
👁️ 阅读: 11
```lua
-- 检查代码发现问题:
-- 1. 网络消息注册的时机问题
-- 2. 表格初始化顺序问题
-- 建议修改方式:
SL:print("打开新服活动界面")
local npc = {}
-- 先定义networkCB函数
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 == 1018 and msgData == "新服活动" then
if p3 == 0 then
-- 确保npc对象和openWin方法存在
if npc and npc.openWin then
npc:openWin()
else
SL:print("错误:npc.openWin方法不存在或npc未正确初始化")
end
end
end
end
-- 注册网络消息(必须在函数定义后)
SL:RegisterLuaNetMsg(1018, networkCB)
-- 然后定义activityData
npc.activityData = {
-- 第1个按钮:激情泡点
{
title = "激情泡点",
text = {"活动时间:开区30分钟开启。",
"活动介绍:场地内有4个普通光圈、1个超级光圈,占领光圈可获得海量经验和元宝。活动持续5分钟。"},
drops = {"大量元宝", "大量元宝", "海量经验", "海量经验"},
status = "未开启"
},
-- 第2个按钮:全民跑酷
{
title = "全民跑酷",
text = {"活动时间:开区45分钟开启。",
"活动介绍:在土城跑动即可获得随机装备、元宝和经验等奖励。活动持续3分钟。"},
drops = {"绑金红包", "羽毛", "宝石碎片", "高级装备"},
status = "未开启"
},
-- 第3个按钮:喜砸金蛋
{
title = "喜砸金蛋",
text = {"活动时间:开区60分钟开启。",
"活动介绍:消耗活动道具砸金蛋,可随机获得稀有道具、极品装备、大量元宝。击杀全部金蛋后会刷新一只金牛,击杀金牛的玩家会获得一件强力装备和大量真实充值。"},
reward = {"极品装备", "海量元宝", "高级材料", "时装碎片"},
status = "未开启"
}
}
function npc:openWin()
-- 创造外部界面
local win_newGActive = GUI:Win_Create("win_newGActive", 0, 0, 0, 0)
GUI:LoadExport(win_newGActive, "newGActive")
npc.ui = GUI:ui_delegate(win_newGActive)
GUI:addOnClickEvent(npc.ui.esc, function()
GUI:Win_Close(win_newGActive)
end)
GUI:Timeline_MoveBy(npc.ui.Panel_leftBtn, {x = 420, y = 0}, 0.25, function() end)
GUI:Timeline_MoveBy(npc.ui.Panel_rightText, {x = -900, y = 0}, 0.25, function() end)
local selectBtn = nil -- 左侧按钮变量
for i = 1, 3 do
local btn = GUI:getChildByName(npc.ui.Panel_leftBtn, "btn_" .. i)
if GUI:Win_IsNull(btn) then
SL:print("错误:按钮btn_" .. i .. "不存在")
return
end
-- 界面默认第一个按钮绿色
if i == 1 then
GUI:Button_setTitleColor(btn, "#00ff00")
selectBtn = btn
-- 默认显示第一个活动
GUI:Text_setString(npc.ui.active_title, npc.activityData[i].title)
GUI:Text_setTextColor(npc.ui.active_title, "#EBEB00")
GUI:Text_enableOutline(npc.ui.active_title, "#000000", 1)
GUI:Text_setFontSize(npc.ui.active_title, 24)
GUI:Text_setString(npc.ui.Text_1, npc.activityData[i].text[1])
GUI:Text_setString(npc.ui.Text_2, npc.activityData[i].text[2])
GUI:Button_setTitleText(npc.ui.goto_btn, npc.activityData[i].status)
GUI:Button_setTitleColor(npc.ui.goto_btn, "#0000cd")
GUI:Button_titleEnableOutline(npc.ui.goto_btn, "#FFFF00", 1)
else
GUI:Button_setTitleColor(btn, "#ffffff")
end
GUI:addOnClickEvent(btn, function()
-- 点击按钮变为绿色
if selectBtn and not GUI:Win_IsNull(selectBtn) then
GUI:Button_setTitleColor(selectBtn, "#ffffff")
end
GUI:Button_setTitleColor(btn, "#27ff00")
selectBtn = btn
GUI:Text_setString(npc.ui.active_title, npc.activityData[i].title)
GUI:Text_setTextColor(npc.ui.active_title, "#EBEB00")
GUI:Text_enableOutline(npc.ui.active_title, "#000000", 1)
GUI:Text_setFontSize(npc.ui.active_title, 24)
GUI:Text_setString(npc.ui.Text_1, npc.activityData[i].text[1])
GUI:Text_setTextColor(npc.ui.Text_1, "#E300C3")
GUI:Text_enableOutline(npc.ui.Text_1, "#0000D5", 1)
GUI:Text_setFontSize(npc.ui.Text_1, 18)
GUI:Text_setString(npc.ui.Text_2, npc.activityData[i].text[2])
GUI:Text_setTextColor(npc.ui.Text_2, "#E300C3")
GUI:Text_enableOutline(npc.ui.Text_2, "#0000D5", 1)
GUI:Text_setFontSize(npc.ui.Text_2, 18)
GUI:Button_setTitleText(npc.ui.goto_btn, npc.activityData[i].status)
GUI:Button_setTitleColor(npc.ui.goto_btn, "#0000cd")
GUI:Button_titleEnableOutline(npc.ui.goto_btn, "#FFFF00", 1)
-- 设置地图传送
GUI:addOnClickEvent(npc.ui.goto_btn, function()
SL:SendLuaNetMsg(2018, 18, i, 0, "新服活动")
end)
end)
end
end
```
**主要问题分析:**
1. **函数定义顺序问题**:`networkCB`函数在注册时被调用,但此时`npc.activityData`和`npc:openWin()`都还未定义
2. **缺少空值检查**:在按钮循环中没有检查按钮是否存在
3. **默认状态未设置**:界面打开时第一个活动的内容没有默认显示
**修改建议:**
- 将`networkCB`函数定义放在最前面
- 在注册网络消息前确保回调函数已定义
- 添加必要的空值检查
- 设置界面打开时的默认显示内容
这样修改后,前端接收后端消息应该能正常工作了。如果还有问题,可以继续问我!
← 返回问答库