GUI:addOnClickEvent(chouquyici,function()
SL:SendLuaNetMsg(1111, 1, p2, p3, "抽取一次")
local function onRefAttr(data)
if data and data.id == 13 then
-- 方法1:使用tostring确保不为nil
SL:print("货币13发生变化,新值:", tostring(data.count or 0)..tostr
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-06-11 16:39:42 |
👁️ 阅读: 1
你的代码有几个问题需要修正:
1. **事件注册位置错误**:`SL:RegisterLUAEvent` 不应该在点击回调里重复注册,应该放在外面只注册一次
2. **网络消息参数问题**:`p2, p3` 没有定义
3. **逻辑结构问题**:货币变化监听应该是全局的,而不是每次点击才监听
修正后的代码:
```lua
-- 先注册货币变化监听(只注册一次)
local function onRefAttr(data)
if data and data.id == 13 then
local valueStr = data.count or "未知"
local idStr = data.id or "未知"
SL:print("货币13发生变化,新值:"..valueStr..",ID:"..idStr)
end
end
SL:RegisterLUAEvent("LUA_EVENT_MONEYCHANGE", "货币变化", onRefAttr)
-- 按钮点击事件
GUI:addOnClickEvent(chouquyici, function()
-- 发送网络消息,需要替换实际的参数值
SL:SendLuaNetMsg(1111, 1, 0, 0, "抽取一次")
-- 这里不需要再注册事件,上面已经注册过了
end)
```
**解释:**
- `SL:RegisterLUAEvent` 是注册事件监听器,只需要注册一次
- 每次点击按钮发送 `SL:SendLuaNetMsg` 请求
- 服务器响应后,会触发 `LUA_EVENT_MONEYCHANGE` 事件,自动执行 `onRefAttr` 函数
- `p2, p3` 需要替换为实际的值,比如 `0, 0` 或其他参数
这样每次点击按钮都会发送请求,当货币13发生变化时,就会打印日志。
你的代码有几个问题需要修正:
1. **事件注册位置错误**:`SL:RegisterLUAEvent` 不应该在点击回调里重复注册,应该放在外面只注册一次
2. **网络消息参数问题**:`p2, p3` 没有定义
3. **逻辑结构问题**:货币变化监听应该是全局的,而不是每次点击才监听
修正后的代码:
```lua
-- 先注册货币变化监听(只注册一次)
local function onRefAttr(data)
if data and data.id == 13 then
local valueStr = data.count or "未知"
local idStr = data.id or "未知"
SL:print("货币13发生变化,新值:"..valueStr..",ID:"..idStr)
end
end
SL:RegisterLUAEvent("LUA_EVENT_MONEYCHANGE", "货币变化", onRefAttr)
-- 按钮点击事件
GUI:addOnClickEvent(chouquyici, function()
-- 发送网络消息,需要替换实际的参数值
SL:SendLuaNetMsg(1111, 1, 0, 0, "抽取一次")
-- 这里不需要再注册事件,上面已经注册过了
end)
```
**解释:**
- `SL:RegisterLUAEvent` 是注册事件监听器,只需要注册一次
- 每次点击按钮发送 `SL:SendLuaNetMsg` 请求
- 服务器响应后,会触发 `LUA_EVENT_MONEYCHANGE` 事件,自动执行 `onRefAttr` 函数
- `p2, p3` 需要替换为实际的值,比如 `0, 0` 或其他参数
这样每次点击按钮都会发送请求,当货币13发生变化时,就会打印日志。
← 返回问答库