---@class KLEquipJewelryPanel:UIKmlLuaPanelBase ---@field view KLEquipJewelryPanelView local KLEquipJewelryPanel = class(UIKmlLuaPanelBase) local this = KLEquipJewelryPanel ---创建时调用一次 function this:Init() self.equipPanel = GUI:UIPanel_Open("dev/ui/Equip/Panel/KLEquipUI/KLEquipUIPanel", nil, nil, { x = -465, hideTips = true, callBack = self.CloseEquipUi,forgeGroupType=EForgeGroupType.Jewelry}) self.OrnamentsGroupList = {} local ornamentsTbl = SL:GetConfigTable('cfg_equip_ornaments') for _, v in pairs(ornamentsTbl) do if not self.OrnamentsGroupList[v.ornamentsGroup] then self.OrnamentsGroupList[v.ornamentsGroup] = {} end table.insert(self.OrnamentsGroupList[v.ornamentsGroup], v) end self.AttTextList = {} GUI:DataListInitData(self.view.Attr_list, function() return table.count(self.AttTextList) end, function() end, function() end, function(realIndex) local strengthInfo = self.AttTextList[realIndex + 1] local name = strengthInfo['attrName'] local preValue = strengthInfo['preValue'] local nextValue = strengthInfo['nextValue'] local arrowShow = strengthInfo['arrowShow'] local attControl = GUI:GetChildControl(self.view.Attr_list, realIndex, 'attrName') local preControl = GUI:GetChildControl(self.view.Attr_list, realIndex, 'preValue') local nextControl = GUI:GetChildControl(self.view.Attr_list, realIndex, 'nextValue') local arrowControl = GUI:GetChildControl(self.view.Attr_list, realIndex, 'attrArrow') GUI:Text_setString(attControl, name) GUI:Text_setString(preControl, tostring(preValue)) GUI:Text_setString(nextControl, tostring(nextValue)) GUI:setVisible(arrowControl, arrowShow) end) self.ExceAttTextList = {} GUI:DataListInitData(self.view.Exce_list, function() return table.count(self.ExceAttTextList) end, function() end, function() end, function(realIndex) local strengthInfo = self.ExceAttTextList[realIndex + 1] local attrName = strengthInfo['attrName'] local lv = strengthInfo['lv'] local attrValue = strengthInfo['attrValue'] local isActive = strengthInfo['isActive'] local isUnlock = strengthInfo['isUnlock'] local attShow = strengthInfo['attShow'] local nameControl = GUI:GetChildControl(self.view.Exce_list, realIndex, 'ExceAttrName') local BtnControl = GUI:GetChildControl(self.view.Exce_list, realIndex, 'ExceActiveBtn') local LockControl = GUI:GetChildControl(self.view.Exce_list, realIndex, 'ExceLock') local activeTextControl = GUI:GetChildControl(self.view.Exce_list, realIndex, 'ActiveText') local exceActiveBtnRedPoint = GUI:GetChildControl(self.view.Exce_list, realIndex, 'ExceActiveBtnRedPoint') GUI:SetActive(exceActiveBtnRedPoint,InfoManager.equipJewelryInfo:IsJewelryCanActive(self.equipInfo)) if isActive then GUI:SetActive(LockControl, false) GUI:SetActive(BtnControl, false) GUI:SetActive(activeTextControl, true) if attShow == 0 then GUI:Text_setString(nameControl, string.format('%s', attrName)) else GUI:Text_setString(nameControl, string.format('%s', attrName .. " +" .. attrValue)) end GUI:Text_setString(activeTextControl, string.format('%s', "")) else if isUnlock then GUI:SetActive(LockControl, false) GUI:SetActive(BtnControl, true) else GUI:SetActive(LockControl, true) GUI:SetActive(BtnControl, false) end GUI:SetActive(activeTextControl, false) if attShow == 0 then GUI:Text_setString(nameControl, string.format('%s', attrName)) else GUI:Text_setString(nameControl, string.format('%s', attrName .. " +" .. attrValue)) end end GUI:AddOnClickEvent(BtnControl, self, self.ActiveBtn, { ExceAttTextList = self.ExceAttTextList, preLevel = self.preLevel, equipInfo = self.equipInfo }) end) self.costList = {} GUI:DataListInitData(self.view.cost_List, function() return table.count(self.costList) end, function() end, function() end, function(realIndex) local costInfo = self.costList[realIndex + 1] local cfgId = costInfo['cfgId'] local needCount = costInfo['needCount'] local itemControl = GUI:GetChildControl(self.view.cost_List, realIndex, 'cost_item') local nameControl = GUI:GetChildControl(self.view.cost_List, realIndex, 'cost_name') local numControl = GUI:GetChildControl(self.view.cost_List, realIndex, 'cost_num') local costAddBtn = GUI:GetChildControl(self.view.cost_List, realIndex, 'costAddBtn') if SL:GetConfig('cfg_item', cfgId) == nil then return end GUI:Item_setItemId(itemControl, cfgId) local name = SL:GetConfig('cfg_item', cfgId).name GUI:Text_setString(nameControl, name) local haveCount = SL:GetBagItemCount(cfgId) if haveCount < needCount then GUI:Text_setString(numControl, string.format('%d/%d', haveCount, needCount)) else GUI:Text_setString(numControl, string.format('%d/%d', haveCount, needCount)) end GUI:AddOnClickEvent(costAddBtn, self, self.costAddBtn, { cfgId = cfgId }) end) end function this:costAddBtn(control, eventData) local cfgId = eventData.cfgId SL:CommonItemGetPath(nil, cfgId) end function this:ActiveBtn(control, eventData) GUI:UIPanel_Open("dev/outui/Equip/Panel/KLEquipJewelryActive/KLEquipJewelryActivePanel", nil, nil, { ExceAttTextList = eventData.ExceAttTextList, preLevel = eventData.preLevel, equipInfo = eventData.equipInfo }) end function this.CloseEquipUi() GUI:UIPanel_Close("dev/ui/UIForgeGroup/Panel/KLUIForgeGroup/KLUIForgeGroupPanel") GUI:UIPanel_Close("dev/ui/Equip/Panel/KLEquipUI/KLEquipUIPanel") GUI:UIPanel_Close("dev/outui/Equip/Panel/KLEquipJewelry/KLEquipJewelryPanel") end ---创建或者刷新界面数据时调用 function this:Refresh() GUI:setVisible(self.view.bg2, false) GUI:setVisible(self.view.tips, true) local equipAll = SL:GetMetaValue(EMetaVarGetKey.EQUIP_DATA) if equipAll and equipAll[1] and next(equipAll[1]) then for i, v in pairs(equipAll[1]) do for _, j in pairs(E_JewelryEquipType) do if i == j then self:LUA_EVENT_EQUIP_GRID_CLICK(_, i) return end end end end end ---注册UI事件和服务器消息 function this:RegistEvents() SL:RegisterLUAEvent(LUA_EVENT_EQUIP_GRID_CLICK, self.LUA_EVENT_EQUIP_GRID_CLICK, self) GUI:AddOnClickEvent(self.view.CloseBtn, self, self.CloseEquipUi) GUI:AddOnClickEvent(self.view.LevelButton, self, self.LevelButtonOnClick) GUI:AddOnClickEvent(self.view.item_model, self, self.item_modelOnClick) SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_UPDATE_EQUIP_ORNAMENTS, self.RES_UPDATE_EQUIP_ORNAMENTS, self) SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_ACT_EQUIP_ORNAMENTS, self.RES_ACT_EQUIP_ORNAMENTS, self) --SL:RegisterLUAEvent(LUA_EVENT_BAG_CHANGE_AFTER, self.LUA_EVENT_BAG_CHANGE_AFTER, self) --SL:RegisterLUAEvent(LUA_EVENT_MONEYCHANGE, self.LUA_EVENT_MONEYCHANGE, self) SL:RegisterLUAEvent(LUA_EVENT_FORGE_GROUP_PANEL_CLOSE, self.CloseEquipUi, self) end function this:item_modelOnClick() SL:OpenTips("equip",self.equipInfo.cfgId,self.equipInfo.id,nil, self.equipInfo, {hideBtn=true}) end function this:LUA_EVENT_BAG_CHANGE_AFTER(_,message) if not message then return end if not self.equipInfo then return end ----加载升级消耗 self:SetLevelUpCost(self.equipInfo, self.preLevel) self.equipPanel:UpdateAllItem() GUI:DataListUpdateData(self.view.Exce_list) SL:RefreshPanelALLRedPoint("KLUIForgeGroupPanel") end function this:LUA_EVENT_MONEYCHANGE(_,message) if not self.equipInfo then return end ----加载升级消耗 self:SetLevelUpCost(self.equipInfo, self.preLevel) self.equipPanel:UpdateAllItem() SL:RefreshPanelALLRedPoint("KLUIForgeGroupPanel") end ---@param message RES_UPDATE_EQUIP_ORNAMENTS function this:RES_ACT_EQUIP_ORNAMENTS(_, message) if message then local firstUnlock = false for _, v in pairs(self.ExceAttTextList) do for _, j in pairs(message.ssactlv) do if tonumber(j) == v.lv then v.isActive = true end end if v.isActive == false and not firstUnlock then ---第一个未激活的解锁 firstUnlock = true v.isUnlock = true end end GUI:DataListUpdateData(self.view.Exce_list) SL:onLUAEvent(LUA_EVENT_JEWELRY_CHANGE,self.equipInfo) SL:RefreshPanelALLRedPoint("KLUIForgeGroupPanel") self.equipPanel:UpdateAllItem() end end ---@param message RES_UPDATE_EQUIP_ORNAMENTS function this:RES_UPDATE_EQUIP_ORNAMENTS(_, message) GUI:setVisible(self.view.success_ok, false) if message then GUI:setVisible(self.view.success_ok, true) if self.equipInfo.id == message.itemId then self.OutEquipData = message end self:ClickEquip(self.equipInfo) SL:onLUAEvent(LUA_EVENT_JEWELRY_CHANGE,self.equipInfo) SL:RefreshPanelALLRedPoint("KLUIForgeGroupPanel") self.equipPanel:UpdateAllItem() end end function this:LevelButtonOnClick() if not self.isHaveLevelCount then SL:TipMessage( SL:GetConfig('cfg_string', 260).text, 1, NoticeType.NoticeMid )--"材料不足!", SL:CommonItemGetPath(nil, self.levelCfgId) else SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_UPDATE_EQUIP_ORNAMENTS, { itemId = self.equipInfo.id }) end end function this:LUA_EVENT_EQUIP_GRID_CLICK(_, index) ---@type CommonProtos.Item local equip = SL:GetMetaValue("EQUIP_TARGET_DATA", 1, index) if index == E_AppearEquipType.Weapon and equip == nil then equip = SL:GetMetaValue("EQUIP_TARGET_DATA", 1, E_AppearEquipType.TwoHandWeapon) end if equip then ---@type RES_UPDATE_EQUIP_ORNAMENTS self.OutEquipData = SL:JsonDecode(equip.luaExtData,false)---json.decode(equip.luaExtData) if SL:HasConfig('cfg_equip_ornamentsMain', equip['cfgId']) then local ornament_tbl = SL:GetConfig('cfg_equip_ornamentsMain', equip['cfgId']) if ornament_tbl then self.equipPanel:SetSelectIndex(index) self.equipInfo = equip self:ClickEquip(equip) return end else SL:TipMessage( SL:GetConfig('cfg_string', 261).text, 1, NoticeType.NoticeMid )--"请选择首饰装备!", end end end ---@param equipInfo CommonProtos.Item function this:ClickEquip(equipInfo) if self.OutEquipData == nil or (self.OutEquipData and not self.OutEquipData.ssuplv) then self.preLevel = 0 else self.preLevel = tonumber(self.OutEquipData.ssuplv) end local PreOrnament_Tbl = self:GetJewelryTblInfoByLevel(equipInfo.cfgId, self.preLevel) local NextOrnament_Tbl = self:GetJewelryTblInfoByLevel(equipInfo.cfgId, self.preLevel + 1) ---@type cfg_item_column local itemTbl = SL:GetConfig("cfg_item", equipInfo.cfgId) if PreOrnament_Tbl then local nextLevel = "" if NextOrnament_Tbl then nextLevel = self.preLevel + 1 end GUI:setVisible(self.view.bg2, true) GUI:setVisible(self.view.tips, false) if nextLevel == "" then GUI:Text_setString(self.view.preLevel, "+" .. self.preLevel) GUI:Text_setString(self.view.nextLevel, "") GUI:SetActive(self.view.arrow, false) GUI:SetActive(self.view.Material, false) GUI:SetActive(self.view.LevelButton, false) GUI:SetActive(self.view.maxLevelTips, true) GUI:SetActive(self.view.maxLevelTips, true) else GUI:Text_setString(self.view.preLevel, "+" .. self.preLevel) GUI:Text_setString(self.view.nextLevel, "+" .. nextLevel) GUI:SetActive(self.view.arrow, true) GUI:SetActive(self.view.Material, true) GUI:SetActive(self.view.LevelButton, true) GUI:SetActive(self.view.maxLevelTips, false) ----加载升级消耗 self:SetLevelUpCost(equipInfo, self.preLevel) end GUI:Text_setString(self.view.equipName, itemTbl.name .. "(" .. self.preLevel .. "级)") ---@type cfg_color_column local colorCfg = SL:GetConfig("cfg_color",itemTbl.color) GUI:Text_setTextColor(self.view.equipName, colorCfg.color) ----加载上面模型 self:SetEquipModel(equipInfo.cfgId) ----加载基础属性 self:SetAttrInfo(PreOrnament_Tbl, NextOrnament_Tbl) ----加载卓越属性 self:SetExcellenceAttrInfo(equipInfo.cfgId) end end function this:SetEquipModel(cfgId) GUI:setVisible(self.view.item_model, true) GUI:Item_setItemId(self.view.item_model, cfgId) GUI:setScale(self.view.item_model,2) GUI:setPosition(self.view.item_model,0,-50) end function this:SetLevelUpCost(equipInfo, level) self.costList = {} self.isHaveLevelCount = true local ornament_tbl = self:GetJewelryTblInfoByLevel(equipInfo.cfgId, level) if next(ornament_tbl.lvDeplete) then for _, attrValue in pairs(ornament_tbl.lvDeplete) do local tbl = {} tbl = { cfgId = tonumber(attrValue[1]), needCount = tonumber(attrValue[2]) } local haveCount = SL:GetBagItemCount(tbl.cfgId) local needCount = tbl.needCount if haveCount < needCount then self.isHaveLevelCount = false self.levelCfgId = tbl.cfgId end table.insert(self.costList, tbl) end end GUI:SetActive(self.view.LevelButtonRedPoint, InfoManager.equipJewelryInfo:IsJewelryCanUpLevel(self.equipInfo)) GUI:DataListUpdateData(self.view.cost_List) end function this:SetExcellenceAttrInfo(cfgId) self.ExceAttTextList = {} local firstUnlock = false local ornament_tbl = SL:GetConfig('cfg_equip_ornamentsMain', cfgId) if ornament_tbl.ornamentsGroup and self.OrnamentsGroupList[ornament_tbl.ornamentsGroup] then for i, v in pairs(self.OrnamentsGroupList[ornament_tbl.ornamentsGroup]) do if next(v.excellenceAtt) then for _, attrValue in pairs(v.excellenceAtt) do local attrName = SL:GetConfig("cfg_att_info", tonumber(attrValue[1])).name local att_remark = SL:GetConfig("cfg_att_info", tonumber(attrValue[1])).remarks local att_show = SL:GetConfig("cfg_att_info", tonumber(attrValue[1])).attShow local att_Value = attrValue[2] local isActive = false --是否激活 local isUnlock = false ---是否解锁 if self.OutEquipData and self.OutEquipData.ssactlv then for _, data in pairs(self.OutEquipData.ssactlv) do if tonumber(data) == v.lv then isActive = true end end end if isActive == false and not firstUnlock then ---第一个未激活的解锁 firstUnlock = true isUnlock = true end local tbl = {} if att_remark == 1 then tbl = { attrName = attrName, attrValue = tostring(att_Value), lv = v.lv, unlockDeplete = v.unlockDeplete, isActive = isActive, isUnlock = isUnlock, attShow = att_show } else tbl = { attrName = attrName, attrValue = tonumber(att_Value) / 100 .. '%', lv = v.lv, unlockDeplete = v.unlockDeplete, isActive = isActive, isUnlock = isUnlock, attShow = att_show } end table.insert(self.ExceAttTextList, tbl) end end end end GUI:DataListUpdateData(self.view.Exce_list) end function this:SetAttrInfo(PreOrnament_Tbl, NextOrnament_Tbl) self.AttTextList = {} local AtkSpecialTbl=InfoManager.equipJewelryInfo:GetAttrJewelSpecialTbl(ESpecialAttrID.minAtk,ESpecialAttrID.maxAtk,PreOrnament_Tbl, NextOrnament_Tbl,"攻 击 力") if AtkSpecialTbl then table.insert(self.AttTextList, AtkSpecialTbl) end for _, attrValue in pairs(PreOrnament_Tbl.basicAtt) do local attrId = attrValue[1] if not InfoManager.equipJewelryInfo:IsSpecialAttrId(attrId) then local name = SL:GetConfig("cfg_att_info", tonumber(attrId)).name local att_remark = SL:GetConfig("cfg_att_info", tonumber(attrId)).remarks local att_Value = attrValue[2] local NextAttrValue = "" local arrowShow = true if NextOrnament_Tbl then for _, nextAttrvalue in pairs(NextOrnament_Tbl.basicAtt) do if tonumber(nextAttrvalue[1]) == tonumber(attrValue[1]) then NextAttrValue = nextAttrvalue[2] end end end if NextAttrValue == "" then arrowShow = false end local tbl = {} if att_remark == 1 then tbl = { attrName = name, preValue = att_Value, nextValue = NextAttrValue, arrowShow = arrowShow } else tbl = { attrName = name, preValue = tonumber(att_Value) / 100 .. '%', nextValue = NextAttrValue, arrowShow = arrowShow } end table.insert(self.AttTextList, tbl) end end GUI:DataListUpdateData(self.view.Attr_list) end ---@return cfg_equip_ornaments_column function this:GetJewelryTblInfoByLevel(cfgId, Level) ---@type cfg_equip_ornamentsMain_column local ornament_tbl = SL:GetConfig('cfg_equip_ornamentsMain', cfgId) if ornament_tbl.ornamentsGroup and self.OrnamentsGroupList[ornament_tbl.ornamentsGroup] then for _, v in pairs(self.OrnamentsGroupList[ornament_tbl.ornamentsGroup]) do if v.lv == tonumber(Level) then return v end end end return nil end function this:Close() if self.coHide ~= nil then Coroutine.Stop(self.coHide) end GUI:UIPanel_Close("dev/outui/Equip/Panel/KLEquipJewelryActive/KLEquipJewelryActivePanel") end return this