-- 创建一个表来存储每个装备位置的锁定状态
refined.equipLocks = {
[0] = {0, 0, 0}, -- 衣服位置
[1] = {0, 0, 0}, -- 武器位置
-- ... 其他装备位置
}
-- 修改复选框点击事件,关联到当前选中的装备位置
for i = 1, 3 do
local lockState = "CheckBox_"..i
GUI:addOnClickEvent(refined.ui[lockStat
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-21 00:48:22 |
👁️ 阅读: 22
根据浮生梦老师前端课程内容,你这段代码中的`refined.equipLocks`表是在脚本加载时初始化的局部变量,所以**每次重新登录游戏时,这个表都会被重新初始化**为代码中设定的默认值。
要解决这个问题,你需要将锁定状态保存到持久化存储中。在996引擎中,可以使用`SL:SetMetaValue()`和`SL:GetMetaValue()`来保存和读取数据:
```lua
-- 保存装备锁定状态
local function saveEquipLocks()
local jsonStr = SL:JsonEncode(refined.equipLocks, true)
SL:SetMetaValue("EQUIP_REFINE_LOCKS", jsonStr)
end
-- 加载装备锁定状态
local function loadEquipLocks()
local jsonStr = SL:GetMetaValue("EQUIP_REFINE_LOCKS", "")
if jsonStr and jsonStr ~= "" then
refined.equipLocks = SL:JsonDecode(jsonStr)
else
-- 如果没保存过,使用默认值
refined.equipLocks = {
[0] = {0, 0, 0}, -- 衣服位置
[1] = {0, 0, 0}, -- 武器位置
-- ... 其他装备位置
}
end
end
-- 在初始化时调用
loadEquipLocks()
-- 在复选框点击事件中,更新状态后保存
GUI:addOnClickEvent(refined.ui[lockState], function()
local lockState_i = GUI:CheckBox_isSelected(refined.ui[lockState])
if refined.currentEquipPos then
if lockState_i == true then
refined.equipLocks[refined.currentEquipPos][i] = 1
else
refined.equipLocks[refined.currentEquipPos][i] = 0
end
-- 发送到服务端
local lockJson = SL:JsonEncode(refined.equipLocks[refined.currentEquipPos], true)
SL:SendLuaNetMsg(2013, 13, 0, refined.currentEquipPos, lockJson)
-- 保存到本地
saveEquipLocks()
end
end)
```
这样重新登录后,装备的锁定状态就能保持上次设置的值了。记得在脚本初始化时先调用`loadEquipLocks()`来加载保存的状态。
← 返回问答库