---@class KLUISkillDescribePanel:UIKmlLuaPanelBase ---@field view KLUISkillDescribePanelView local KLUISkillDescribePanel = class(UIKmlLuaPanelBase) local this = KLUISkillDescribePanel ---创建时调用一次 function this:Init() end ---创建或者刷新界面数据时调用 function this:Refresh() if self.args then self.skillId = self.args self:RefreshSkillInfo(self.skillId) end end ---注册UI事件和服务器消息 function this:RegistEvents() GUI:AddOnClickEvent(self.view.CostTips, self, self.AddCostOnClick) GUI:AddOnClickEvent(self.view.BtnLearn, self, self.BtnLearnOnClick) SL:RegisterLUAEvent(LUA_EVENT_SELECT_SKILL_UI, self.SelectSkill, self) SL:RegisterLUAEvent(Event.SkillChange, self.ResSkillChangeMessage, self) SL:RegisterLUAEvent(Event.BagInfo_Change, self.BagInfo_Change, self) GUI:AddOnClickEvent(self.view.costItem, self, self.OnCostItemOnClick) end function this:OnCostItemOnClick() SL:OpenTips(nil, self.costId) end function this:BagInfo_Change() self:RefreshSkillInfo(self.skillId) end ---@param eventData SkillProtos.SkillChangeRes function this:ResSkillChangeMessage(_, eventData) if not eventData or not eventData.skillInfo then return end for _, skillInfo in pairs(eventData.skillInfo) do if skillInfo.skillId == self.skillId then self:RefreshSkillInfo(self.skillId) end end end function this:AddCostOnClick() return SL:CommonItemGetPath(nil, self.costId) end function this:BtnLearnOnClick() --点击学习技能或者升级技能 if not self.skillId then return end if self.isLearned and not self.canUp then SL:TipMessage(SL:GetConfig('cfg_string', 253).text, 1, NoticeType.NoticeMid)--"道具数量不足", return end if not self.isLearned and not self.isOpen then SL:TipMessage(SL:GetConfig('cfg_string', 300).text, 1, NoticeType.NoticeMid)--"学习技能,未达到条件 return end SL:ReqUpSkillMessage(self.skillId) end ---@param skillItem KLUISkillItem function this:SelectSkill(_, skillItem) return self:RefreshSkillInfo(skillItem.skillId) end ---@param skillId number function this:RefreshSkillInfo(skillId) self.skillId = skillId if not self.skillUI then ---@type KLUISkillInfoPanel self.skillUI = GUI:GetUI("dev/ui/Skill/Panel/KLUISkillInfo/KLUISkillInfoPanel") end ---@type Skill local skill = SL:GetMetaValue(EMetaVarGetKey.SKILL_DATA, self.skillId) local skillLv = skill and skill.level or 1 if false or self.skillUI.skillShowType == E_SkillShowType.Transfer then self.isLearned = true else self.isLearned = skill ~= nil end ---@type cfg_skill_info_column local skillInfoTbl = SL:GetConfigMultiKeys('cfg_skill_info', self.skillId, skillLv, 'skillID', 'skillLevel') local spriteName = string.isNullOrEmpty(skillInfoTbl.icon) and "" or skillInfoTbl.icon GUI:Image_loadTexture(self.view.skillIcon, spriteName, "Atlas/UIOutSkillIcon.spriteatlas") self.isOpen = self:UpdateOpenConds(skillInfoTbl) local nextLv = skillLv + 1 ---@type cfg_skill_info_column local nextSkillInfoTbl = SL:GetConfigMultiKeys('cfg_skill_info', self.skillId, nextLv, 'skillID', 'skillLevel') self.canUp = false if self.isLearned then --学习过技能 GUI:SetActive(self.view.Unlearned, false) GUI:SetActive(self.view.desc1, true) --技能等级 GUI:Text_setString(self.view.levelTxt1, "当前等级 " .. skillLv .. "级") if cfg_equip_angelTalentLv_post.IsAngelTalentSkill(self.skillId) then local angelTalentLvTbl = cfg_equip_angelTalentLv_post.GetAngleTalentLvTbl(self.skillId, skillLv) --技能描述 if angelTalentLvTbl then GUI:Text_setString(self.view.skillDes1, angelTalentLvTbl.description) else GUI:Text_setString(self.view.skillDes1, "") end else --技能描述 GUI:Text_setString(self.view.skillDes1, skillInfoTbl.tips) end GUI:Text_setString(self.view.SkillName, skillInfoTbl.name .. " " .. skillLv .. "级") if nextSkillInfoTbl then --有下一级 GUI:SetActive(self.view.desc2, true) --技能等级 GUI:Text_setString(self.view.levelTxt2, "下一等级 " .. nextLv .. "级") if cfg_equip_angelTalentLv_post.IsAngelTalentSkill(self.skillId) then local angelTalentLvTbl = cfg_equip_angelTalentLv_post.GetAngleTalentLvTbl(self.skillId, nextLv) --技能描述 if angelTalentLvTbl then GUI:Text_setString(self.view.skillDes2, angelTalentLvTbl.description) else GUI:Text_setString(self.view.skillDes2, "") end else --技能描述 GUI:Text_setString(self.view.skillDes2, nextSkillInfoTbl.tips) end GUI:SetActive(self.view.maxLevelTips, false) GUI:SetActive(self.view.CostShow, true) if #nextSkillInfoTbl.skillLevelUpItemID > 0 then GUI:SetActive(self.view.CostShow, true) self.costId = nextSkillInfoTbl.skillLevelUpItemID[1][1] local costCount = nextSkillInfoTbl.skillLevelUpItemID[1][2] GUI:Item_setItemId(self.view.costItem, self.costId) local ownCount = SL:GetMetaValue(EMetaVarGetKey.MONEY, self.costId) GUI:Text_setString(self.view.costCount, ownCount .. "/" .. costCount) if ownCount >= costCount then self.canUp = true GUI:Text_setTextColor(self.view.costCount, "#00ff00") else GUI:Text_setTextColor(self.view.costCount, "#ff0000") end GUI:Text_setString(self.view.BtnText, "升级") GUI:SetActive(self.view.BtnLearn, true) else GUI:SetActive(self.view.CostShow, false) GUI:SetActive(self.view.BtnLearn, false) end else GUI:SetActive(self.view.desc2, false) GUI:SetActive(self.view.maxLevelTips, true) GUI:SetActive(self.view.CostShow, false) GUI:SetActive(self.view.BtnLearn, false) end else GUI:SetActive(self.view.Unlearned, true) GUI:SetActive(self.view.desc1, false) GUI:SetActive(self.view.desc2, true) --技能等级 GUI:Text_setString(self.view.levelTxt2, "下一等级 " .. skillLv .. "级") if cfg_equip_angelTalentLv_post.IsAngelTalentSkill(self.skillId) then local angelTalentLvTbl = cfg_equip_angelTalentLv_post.GetAngleTalentLvTbl(self.skillId, skillLv) --技能描述 if angelTalentLvTbl then GUI:Text_setString(self.view.skillDes2, angelTalentLvTbl.description) else GUI:Text_setString(self.view.skillDes2, "") end else --技能描述 GUI:Text_setString(self.view.skillDes2, nextSkillInfoTbl.tips) end GUI:Text_setString(self.view.SkillName, skillInfoTbl.name) if #skillInfoTbl.skillLevelUpItemID > 0 then GUI:SetActive(self.view.CostShow, true) self.costId = skillInfoTbl.skillLevelUpItemID[1][1] local costCount = skillInfoTbl.skillLevelUpItemID[1][2] GUI:Item_setItemId(self.view.costItem, self.costId) local ownCount = SL:GetMetaValue(EMetaVarGetKey.MONEY, self.costId) GUI:Text_setString(self.view.costCount, ownCount .. "/" .. costCount) if ownCount >= costCount then self.canUp = true GUI:Text_setTextColor(self.view.costCount, "#00ff00") else GUI:Text_setTextColor(self.view.costCount, "#ff0000") end GUI:Text_setString(self.view.BtnText, "学习") GUI:SetActive(self.view.BtnLearn, true) else GUI:SetActive(self.view.CostShow, false) GUI:SetActive(self.view.BtnLearn, false) end GUI:SetActive(self.view.maxLevelTips, false) end end ---@param skillInfoTbl cfg_skill_info_column function this:UpdateOpenConds(skillInfoTbl) --职业 local isMeet = false ---@type cfg_career_column local careerTbl = SL:GetMetaValue(EMetaVarGetKey.ME_CAREER_TAB_COLUMN) for _, v in pairs(skillInfoTbl.needCareer) do if v[1] == careerTbl.baseCareer then if v[2] <= careerTbl.careerRank then GUI:Text_setString(self.view.Condition_1, careerTbl.name) isMeet = true break else careerTbl = SL:GetConfigMultiKeys("cfg_career", v[1], v[2], "baseCareer", "careerRank") GUI:Text_setString(self.view.Condition_1, careerTbl.name) end end end if isMeet then GUI:Text_setTextColor(self.view.Condition_1, "#00ff00") GUI:SetActive(self.view.bingo1, true) else GUI:Text_setTextColor(self.view.Condition_1, "#ff0000") GUI:SetActive(self.view.bingo1, false) end --等级 local needLv1 = skillInfoTbl.needLevel[1] or 0 local needLv2 = skillInfoTbl.needLevel[2] local meLv = SL:GetMetaValue(EMetaVarGetKey.LEVEL) local isMeetLv = false if needLv2 then isMeetLv = meLv >= needLv1 and meLv <= needLv2 else isMeetLv = meLv >= needLv1 end GUI:Text_setString(self.view.Condition_2, "角色 " .. needLv1 .. "级") if isMeetLv then GUI:Text_setTextColor(self.view.Condition_2, "#00ff00") GUI:SetActive(self.view.bingo2, true) else isMeet = false GUI:Text_setTextColor(self.view.Condition_2, "#ff0000") GUI:SetActive(self.view.bingo2, false) end --武器限制 GUI:Text_setString(self.view.Condition_3, "武器技能") if SL:GetMetaValue(EMetaVarGetKey.SKILL_CHECK_EQUIP, skillInfoTbl.skillID, skillInfoTbl.skillLevel) then GUI:Text_setTextColor(self.view.Condition_3, "#00ff00") GUI:SetActive(self.view.bingo3, true) else isMeet = false GUI:Text_setTextColor(self.view.Condition_3, "#ff0000") GUI:SetActive(self.view.bingo3, false) end return isMeet end function this:Close() self.skillUI = nil end return this