local lianhuo = {}
function lianhuo.main(param1, param2, param3, param4)
lib:Require(param1, function(state)
if state then
if param1 then
lianhuo.parent = lib:openwin(param1, nil, true, param4) or {}
你提供的代码框架很不错,已经实现了核心的数值获取和更新逻辑。根据你描述的交互需求,我们需要在点击按钮时,根据服务端返回的结果,在界面上方显示不同的飘字提示。
这里的关键是:**在发送网络消息(`SL:SendLuaNetMsg`)后,接收服务端的返回,并根据返回结果触发飘字**。
由于你已注册了 `LUA_EVENT_SERVER_VALUE_CHANGE` 事件来监听 `U48` 的变化,我们可以假设服务端在 `58003` 协议返回时,会改变 `U48` 这个服务器变量。但为了区分“成功”、“失败”和“最终完成”三种状态,我们通常需要服务端返回一个更具体的状态码。
以下是修改和补充后的代码方案:
1. **修改网络回调**:我们为 `58003` 协议注册一个网络消息回调,直接处理服务端的返回。
2. **添加飘字函数**:创建一个函数,用于在屏幕上方显示提示文字。
3. **整合逻辑**:在按钮点击发送请求后,在网络回调中判断结果并调用飘字函数。
```lua
local lianhuo = {}
-- 新增:飘字提示函数
function lianhuo.showTip(text)
-- 创建一个父节点用于承载飘字,通常会挂接到游戏主界面
-- 这里假设存在一个名为 `GMMain` 的根节点,你可以根据实际情况调整
local root = GUI:Win_Create("GMMain", 0, 0, 0, 0, false, false, true, false, false, false, 1)
if GUI:Win_IsNull(root) then
-- 如果获取不到,可以尝试其他方式获取根节点,这里为示例直接返回
return
end
-- 创建文本控件
local tipText = GUI:Text_Create(root, "lianhuo_tip", 400, 300, 28, "#FFD700", text) -- 位置(400,300)和颜色可调
if GUI:Win_IsNull(tipText) then
return
end
-- 设置字体(可选)
GUI:Text_setFontName(tipText, "fonts/font5.ttf")
-- 创建上浮并淡出的动作序列
local moveAction = GUI:ActionMoveBy(2.0, 0, -100) -- 2秒内向上移动100像素
local fadeAction = GUI:ActionFadeTo(2.0, 0) -- 2秒内淡出到透明
local removeAction = GUI:CallFunc(function()
GUI:removeFromParent(tipText)
end)
-- 顺序执行:上移和淡出同时进行,然后移除控件
local spawn = GUI:ActionSpawn(moveAction, fadeAction)
local sequence = GUI:ActionSequence(spawn, removeAction)
GUI:runAction(tipText, sequence)
end
function lianhuo.main(param1, param2, param3, param4)
-- 假设 lib:Require 和 lib:openwin 是你们项目中的自定义函数
-- 这里保持你的原逻辑
lib:Require(param1, function(state)
if state then
if param1 then
lianhuo.parent = lib:openwin(param1, nil, true, param4) or {}
lianhuo.param1 = param1
end
if param2 then
lianhuo.param2 = param2
end
if param3 then
lianhuo.param3 = param3
end
if lianhuo.parent.cfg and next(lianhuo.parent.cfg) then
lianhuo.upmain()
else
lib:msg("系统未配置!")
GUI:Win_Close(lianhuo.parent._parent)
end
end
end)
end
function lianhuo.upmain()
if not lianhuo.parent or not lianhuo.parent._ui then
return
end
local ui = lianhuo.parent._ui
local cfg = lianhuo.parent.cfg
if not cfg then
return
end
local var = SL:GetMetaValue("SERVER_VALUE", "U48")
SL:Print("获取当前焚天等级 var =", var)
if var == "" then
var = 0
end
var = tonumber(var) or 0
if not GUI:Win_IsNull(ui.Text_1) then
GUI:Text_setString(ui.Text_1, tostring(var))
end
if GUI:Win_IsNotNull(ui.Button_1) then
GUI:addOnClickEvent(ui.Button_1, function()
SL:Print("点击了第1个按钮")
GUI:delayTouchEnabled(ui.Button_1, 0.2)
local msg = {}
msg.Script = lianhuo.param1
local jsonstr = SL:JsonEncode(msg)
SL:SendLuaNetMsg(58003, lianhuo.param2, 0, 0, jsonstr)
end)
end
end
-- 新增:注册网络消息回调,接收58003协议的返回
SL:RegisterLuaNetMsg(58003, function(msg)
SL:Print("收到焚天操作返回", msg)
-- 假设服务端返回的msg是一个table,其中包含一个 `result` 字段
-- 1: 成功, 2: 失败, 3: 最终完成
local result = tonumber(msg.result) or 0
local tip = ""
if result == 1 then
tip = "哦?!居然成功了!好小子,运气不错!再来再来!"
elseif result == 2 then
tip = "轰!你看,我就说吧!没死算你命大!还愣着干什么,再去给老夫找炎核来!"
elseif result == 3 then
tip = "三缕稳定之火…成了!混沌熔炉百年内再无爆裂之忧!小子,你真是个赌徒中的赌徒,这是你应得的!"
else
-- 其他状态或默认,比如第一次打开对话框的提示,这个可能需要另一个触发点
-- tip = "小子,想过去?可以!先帮老夫一个玩命的忙..."
-- 这个提示可能更适合在打开界面时触发,而不是在每次操作后。
return
end
-- 显示飘字
lianhuo.showTip(tip)
-- 更新界面显示
lianhuo.upmain()
end)
--注册游戏事件
SL:RegisterLUAEvent(LUA_EVENT_PLAYER_EQUIP_CHANGE, "lianhuo", function(data)
if data and data.opera == 1 then
lianhuo.upmain()
end
end)
SL:RegisterLUAEvent(LUA_EVENT_SERVER_VALUE_CHANGE, "lianhuo", function(data)
if next(data) and data.key == "U48" then
lianhuo.upmain()
end
end)
SL:RegisterLUAEvent(LUA_EVENT_CLOSEWIN, "lianhuo", function(CLOSEWINdata)
if CLOSEWINdata and CLOSEWINdata == "lianhuo" then
SL:UnRegisterLUAEvent(LUA_EVENT_PLAYER_EQUIP_CHANGE, "lianhuo")
SL:UnRegisterLUAEvent(LUA_EVENT_CLOSEWIN, "lianhuo")
-- 记得也要取消注册网络消息
SL:UnRegisterLuaNetMsg(58003)
end
end)
return lianhuo
```
**重点说明:**
1. **`lianhuo.showTip` 函数**:这是一个自定义函数,用于创建会向上飘动并淡出的文字。它使用了 `GUI:ActionMoveBy`、`GUI:ActionFadeTo` 和 `GUI:ActionSequence` 等动作。
2. **网络协议回调**:`SL:RegisterLuaNetMsg(58003, function(msg) ... end)` 是关键。它直接监听服务端对 `58003` 协议的响应。你需要**与服务端开发者确认**,返回的 `msg` 数据结构,特别是用于区分成功、失败的状态字段(这里示例用了 `msg.result`)。
3. **事件清理**:在 `LUA_EVENT_CLOSEWIN` 事件中,增加了 `SL:UnRegisterLuaNetMsg(58003)` 来清理网络回调,防止内存泄漏。
4. **首次打开提示**:你需求中的 **a.打开对话框(未完成时)** 这段提示,更适合在 `lianhuo.main` 函数中,刚打开界面时判断 `U48` 的值,如果为0(未开始),则直接显示。这需要额外逻辑,你可以思考一下加在哪里合适。
请根据你的实际项目情况,调整飘字的位置、样式和动作时间。最重要的是,**与服务端确认协议 `58003` 的返回格式**,以确保状态判断正确。