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变量记录的随机属性来显示对应的特效。以下是修改后的前端代码实现:
```lua
local fentian = {}
function fentian.main(param1, param2, param3, param4)
lib:Require(param1, function(state)
if state then
if param1 then
fentian.parent = lib:openwin(param1, nil, true, param4) or {}
fentian.param1 = param1
end
if param2 then
fentian.param2 = param2
end
if param3 then
fentian.param3 = param3
end
if fentian.parent.cfg and next(fentian.parent.cfg) then
fentian.upmain()
else
lib:msg("系统未配置!")
GUI:Win_Close(fentian.parent._parent)
end
end
end)
end
function fentian:get_fentian_pos()
local first_cfg = fentian.parent.cfg[1]
local pos = nil
local item_data = lib:get_item_date(first_cfg.name)
if item_data.StdMode == 25 then
pos = 9
else
pos = lib:get_equip_pos(first_cfg[1].name)
end
return pos
end
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
-- 加载装备图标
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)
-- 获取T13变量(已随机到的属性列表)
local T13 = SL:GetMetaValue("SERVER_VALUE", "T13") or ""
SL:Print("T13值:", T13)
-- 初始化所有特效为隐藏
for i = 2, 9 do
local effect_name = "cur_attr_" .. i
local effect_widget = GUI:getChildByName(ui.PMainUI, effect_name)
if not GUI:Win_IsNull(effect_widget) then
GUI:setVisible(effect_widget, false)
end
end
-- 显示已随机到的属性特效
if T13 ~= "" then
local used_attr_list = {}
for v in string.gmatch(T13, "[^,]+") do
table.insert(used_attr_list, tonumber(v))
end
for _, attr_id in ipairs(used_attr_list) do
if attr_id >= 2 and attr_id <= 9 then
local effect_name = "cur_attr_" .. attr_id
local effect_widget = GUI:getChildByName(ui.PMainUI, effect_name)
if not GUI:Win_IsNull(effect_widget) then
GUI:setVisible(effect_widget, true)
-- 添加闪烁特效
local function blink_callback()
GUI:setOpacity(effect_widget, 255)
end
GUI:runAction(effect_widget,
GUI:ActionSequence(
GUI:ActionFadeTo(0.5, 100),
GUI:ActionFadeTo(0.5, 255),
GUI:CallFunc(blink_callback)
)
)
end
end
end
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
-- 添加升级按钮事件
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)
end
-- 注册游戏事件
SL:RegisterLUAEvent(LUA_EVENT_PLAYER_EQUIP_CHANGE, "fentian", function(data)
if data and data.opera == 1 then
fentian.upmain()
end
end)
SL:RegisterLUAEvent(LUA_EVENT_SERVER_VALUE_CHANGE, "fentian", function(data)
if next(data) and data.key == "T13" then
fentian.upmain()
end
end)
SL:RegisterLUAEvent(LUA_EVENT_CLOSEWIN, "fentian", function(CLOSEWINdata)
if CLOSEWINdata and CLOSEWINdata == "fentian" then
SL:UnRegisterLUAEvent(LUA_EVENT_PLAYER_EQUIP_CHANGE, "fentian")
SL:UnRegisterLUAEvent(LUA_EVENT_CLOSEWIN, "fentian")
end
end)
return fentian
```
**代码说明:**
1. **获取T13变量**:使用`SL:GetMetaValue("SERVER_VALUE", "T13")`获取服务端记录的随机属性列表
2. **初始化特效隐藏**:循环2-9,将所有`cur_attr_`开头的特效组件初始化为隐藏状态
3. **解析T13并显示特效**:
- 使用`string.gmatch`解析逗号分隔的属性ID
- 对每个已随机到的属性,显示对应的特效组件
- 添加闪烁动画增强视觉效果
4. **事件监听优化**:
- 监听`T13`变量变化事件,当随机到新属性时自动刷新界面
- 装备变更时也刷新界面
**注意事项:**
- 确保UI布局中有命名为`cur_attr_2`到`cur_attr_9`的控件(可以是Image、Layout等)
- 如果特效控件不存在,代码会自动跳过不会报错
- 闪烁效果使用`ActionFadeTo`实现透明度变化
这样就能根据后端随机给的属性实时显示对应的特效了!