SL:print("打开洗练界面")
local refined = {}
EquipPos = {[0] = "衣服",[1] = "武器",[2] = "勋章",[3] = "头盔",[4] = "项链",[5] = "手镯(右)" ,
[6] = "手镯(左)",[7] = "戒指(右)",[8] = "戒指(左)",[10] = "腰带",[11] = "靴子"}
refined.currentAttributes = {
{type = 0, name = "无属性",
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-22 14:09:28 |
👁️ 阅读: 9
根据你提供的代码,要实现进入页面后默认显示衣服的状态(包括复选框),需要在 `openWin` 函数中,在创建界面并发送首次请求后,主动为默认选中的“衣服”位置(pos=0)触发一次复选框状态的获取和装备查询。
以下是修改后的 `openWin` 函数部分:
```lua
function refined:openWin()
-- 创造外部界面
local win_refined = GUI:Win_Create("win_refined", 0, 0, 0, 0)
GUI:LoadExport(win_refined, "refined")
refined.ui = GUI:ui_delegate(win_refined)
GUI:addOnClickEvent(refined.ui.esc, function()
GUI:Win_Close(win_refined)
end)
SL:SendLuaNetMsg(2013, 13, 0, 0, "装备洗练")
refined.currentEquipPos = 0 -- 默认选中衣服位置0
for x, y in pairs(EquipPos) do
refined.lockStatus[x] = {0, 0, 0} -- 默认复选框状态
local buttonName = "but_"..x
GUI:addOnClickEvent(refined.ui[buttonName], function()
refined.currentEquipPos = x
refined:createHighLight(refined.ui[buttonName], x)
-- 获取复选框状态
-- 逻辑与实际相反,打钩为false..1,未打钩为true..0
local lockData = {}
for i = 1 ,3 do
local lockState = "CheckBox_"..i
local lockState_i = GUI:CheckBox_isSelected(refined.ui[lockState])
if lockState_i == true then
lockData[i] = 1
else
lockData[i] = 0
end
end
local lockJson = SL:JsonEncode(lockData)
SL:SendLuaNetMsg(2013, 13, 0, x, lockJson) -- 放入装备
end)
end
-- 首次进入时,在第一个按钮上创建高亮
if refined.ui["but_0"] then
refined:createHighLight(refined.ui["but_0"], 0)
end
-- 新增:默认触发衣服位置的装备查询和复选框状态
-- 1. 获取当前复选框状态(默认全未锁定)
local defaultLockData = {}
for i = 1, 3 do
-- 假设初始状态复选框未选中(未锁定)
defaultLockData[i] = 0
end
local defaultLockJson = SL:JsonEncode(defaultLockData)
-- 2. 发送请求,查询pos=0(衣服)的装备信息
SL:SendLuaNetMsg(2013, 13, 0, 0, defaultLockJson)
end
```
**修改说明:**
1. 在 `openWin` 函数的最后,新增了默认触发逻辑。
2. 构建了一个默认的锁定数据 `defaultLockData`,假设三个复选框初始状态都是未选中(对应锁定状态为0)。
3. 使用 `SL:JsonEncode` 将数据转换为JSON字符串。
4. 调用 `SL:SendLuaNetMsg(2013, 13, 0, 0, defaultLockJson)` 发送请求。这个请求与你点击“衣服”按钮时发送的请求完全一致,参数为:消息ID 2013,子类型13,p2=0,p3=0(衣服位置),msgData为默认的锁定状态JSON。
5. 后端收到此消息后,应返回 `msgID == 1013 and p1 == 13 and p2 == 1` 的消息,从而触发你的 `refined:refreshWin(p3, msgData)` 函数,完成衣服装备信息和按钮状态的默认显示。
这样,界面打开后,就会自动高亮“衣服”按钮,并显示衣服的装备信息(如果已装备)或“未装备”状态。复选框的初始显示状态由你代码中 `CheckBox` 的默认UI导出状态决定,通常为未选中。
← 返回问答库