local fentian = {}
-- 属性映射配置(1-8)
local attr_mapping = {
[2] = { id = 36, name = "防御加成" },
[3] = { id = 60, name = "生命加成" },
[4] = { id = 200, name = "攻击力" },
[5] = { id = 207, name = "防御值" },
[6] = { id = 1, name = "生命值" },
根据你的需求,我来帮你实现根据后端随机属性显示对应特效的功能。T13记录了随机到的属性编号,特效控件名称是cur_attr_2到cur_attr_9,需要根据T13的值来显示对应特效。
```lua
function fentian.upmain()
local ui = fentian.parent._ui
local cfgs = fentian.parent.cfg
local first_cfg = cfgs[1]
--获取装备位
local pos = fentian:get_fentian_pos()
local equip_data = lib:equippos(pos)
if not equip_data or not next(equip_data) then
lib:msg("请穿戴焚天装备")
GUI:Win_Close(fentian.parent._parent)
return
end
local cur_cfg = gbl_fentian[equip_data.Name]
if not cur_cfg then
lib:msg("装备未配置")
GUI:Win_Close(fentian.parent._parent)
return
end
local next_level = cur_cfg.level + 1
local next_cfg = cfgs[next_level]
if not next_cfg then
lib:msg("焚天已满级!")
GUI:Win_Close(fentian.parent._parent)
return
end
-- 获取T13的值(随机到的属性编号)
local used_attr_str = SL:GetMetaValue("SERVER_VALUE", "T13") or ""
local used_attr_list = {}
if used_attr_str ~= "" then
for v in string.gmatch(used_attr_str, "[^,]+") do
table.insert(used_attr_list, tonumber(v))
end
end
-- 先隐藏所有特效
for i = 2, 9 do
local effect_name = "cur_attr_" .. i
if not GUI:Win_IsNull(ui[effect_name]) then
GUI:setVisible(ui[effect_name], false)
end
end
-- 根据T13显示对应特效
for _, attr_id in ipairs(used_attr_list) do
local effect_name = "cur_attr_" .. attr_id
if not GUI:Win_IsNull(ui[effect_name]) then
GUI:setVisible(ui[effect_name], true)
end
end
-- 其他原有代码保持不变
GUI:Image_loadTexture(ui.item_name_img, "res/yidalu/fentian2.0/xin/dnegji/" .. cur_cfg.level .. ".png")
--创建单个物品框
lib:item_create(ui.equip_layout, { name = cur_cfg.name }, 0, true, nil, true)
--创建属性展示
lib:create_attr_list_single(ui.attr_layout, next_cfg, true, 10)
--创建扣除物品框
lib:createitemlist(ui.item_layout, next_cfg, 22)
local var = tonumber(SL:GetMetaValue("SERVER_VALUE", "U13") or 0)
if not GUI:Win_IsNull(ui.Text_2) then
GUI:Text_setString(ui.Text_2, var)
end
if GUI:Win_IsNotNull(ui.Image_2) then
GUI:Image_loadTexture(ui.Image_2, "res/yidalu/fentian2.0/xin/".. var ..".png")
end
GUI:addOnClickEvent(ui["Button_1"], function()
local msg = {}
msg.Script = fentian.param1
local jsonstr = SL:JsonEncode(msg)
SL:SendLuaNetMsg(58003, 0, 0, 0, jsonstr)
end)
-- 属性值显示
if not GUI:Win_IsNull(ui.Text_3) then
GUI:Text_setString(ui.Text_3, "生命值+" .. (cur_cfg.cur_attr_6 or 0))
end
if not GUI:Win_IsNull(ui.Text_4) then
GUI:Text_setString(ui.Text_4, "攻击力+" .. (cur_cfg.cur_attr_4 or 0))
end
if not GUI:Win_IsNull(ui.Text_5) then
GUI:Text_setString(ui.Text_5, "攻魔道+" .. (cur_cfg.cur_attr_7 or 0).."%")
end
if not GUI:Win_IsNull(ui.Text_6) then
GUI:Text_setString(ui.Text_6, "生命加成+" .. (cur_cfg.cur_attr_3 or 0).."%")
end
if not GUI:Win_IsNull(ui.Text_7) then
GUI:Text_setString(ui.Text_7, "防御加成+" .. (cur_cfg.cur_attr_2 or 0).."%")
end
if not GUI:Win_IsNull(ui.Text_8) then
GUI:Text_setString(ui.Text_8, "打怪伤害+" .. (cur_cfg.cur_attr_9 or 0).."%")
end
if not GUI:Win_IsNull(ui.Text_9) then
GUI:Text_setString(ui.Text_9, "刀刀切割+" .. (cur_cfg.cur_attr_8 or 0))
end
if not GUI:Win_IsNull(ui.Text_10) then
GUI:Text_setString(ui.Text_10, "防御值+" .. (cur_cfg.cur_attr_5 or 0))
end
end
```
**实现思路:**
1. **获取T13值**:使用`SL:GetMetaValue("SERVER_VALUE", "T13")`获取后端记录的随机属性编号字符串
2. **解析属性列表**:将逗号分隔的字符串解析为数字数组
3. **隐藏所有特效**:先循环隐藏cur_attr_2到cur_attr_9所有特效控件
4. **显示对应特效**:根据解析出的属性编号,显示对应的特效控件
**关键函数说明:**
- `GUI:setVisible(widget, value)`:设置控件可见性,true显示/false隐藏
- `GUI:Win_IsNull(widget)`:判断控件是否为空或已销毁
- `string.gmatch()`:Lua字符串模式匹配函数,用于分割逗号分隔的字符串
这样当玩家随机到某个属性时,对应的特效就会显示出来,其他特效保持隐藏状态。记得在UI设计时,特效控件cur_attr_2到cur_attr_9的初始visible属性要设置为false。