SL:release_print("打开装备回收界面")
local npc = {}
npc.equipCategory = {
[1] = {
title = "武器",
sub = {
[1] = { name = "刀剑类", list = { "木剑", "乌木剑", "铁剑", "青铜剑", "斩马剑", "短剑", "凝霜", "青铜斧", "七首", "井中月",
"修罗", "屠龙"
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-07 00:47:43 |
👁️ 阅读: 8
```lua
-- 问题分析:当选中复选框时,你发送的是 npc.selectedItems[n](单个装备信息),
-- 但取消选中时,你发送的也是 npc.selectedItems[n](此时 checkBox_state = 0)。
-- 然而,在取消选中的事件处理中,你直接打印了 checkBox_state(局部变量,值为0)而不是 isSelected,
-- 并且发送的JSON数据可能因为 npc.selectedItems[n] 在取消选中时被重新赋值,但服务端接收到的字符串显示为空。
-- 主要问题:
-- 1. 取消选中时,checkBox_state 是局部变量,值为0,但实际应该使用 isSelected 参数
-- 2. 服务端接收到的字符串为空,可能是因为 JSON 编码失败或数据为空
-- 建议修改复选框点击事件部分:
GUI:addOnClickEvent(chcek_Box, function()
-- 直接使用复选框的回调函数,而不是嵌套 addOnEvent
local function onCheckBoxEvent()
local isSelected = GUI:CheckBox_isSelected(chcek_Box)
SL:print("当前复选框状态:", isSelected)
-- 更新选中项信息
npc.selectedItems[n] = {
mainTitle = mainTitle,
subName = subName,
equipName = n,
checkBox_state = isSelected and 1 or 0
}
-- 打印调试信息
SL:print("==================================")
SL:print("主分类:"..mainTitle)
SL:print("二级分类:"..subName)
SL:print("装备名:"..n)
SL:print("选中状态:"..tostring(isSelected))
SL:print("==================================")
-- 发送到服务端前检查数据
if npc.selectedItems[n] then
local checkBoxJson = SL:JsonEncode(npc.selectedItems[n], true)
if checkBoxJson and checkBoxJson ~= "" then
SL:print("发送JSON:", checkBoxJson)
SL:SendLuaNetMsg(2021, 21, 0, 0, checkBoxJson)
else
SL:print("JSON编码失败或为空")
end
end
-- 获取全部状态
local allStatus = npc:getChceckBoxStatus()
-- SL:dump(allStatus)
end
-- 设置复选框事件回调
GUI:CheckBox_addOnEvent(chcek_Box, onCheckBoxEvent)
end)
-- 另外,确保服务端的网络消息注册正确:
-- 在服务端应该有对应的消息处理,如:
-- SL:RegisterLuaNetMsg(2021, function(msgID, arg1, arg2, arg3, jsonStr)
-- local data = SL:JsonDecode(jsonStr, false)
-- SL:print("收到装备选择状态:", data)
-- end)
-- 浮生梦老师提示:在发送网络消息前,务必检查JSON编码是否成功,避免发送空字符串到服务端。
```
← 返回问答库