KLUISkillDescribePanel.lua 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. ---@class KLUISkillDescribePanel:UIKmlLuaPanelBase
  2. ---@field view KLUISkillDescribePanelView
  3. local KLUISkillDescribePanel = class(UIKmlLuaPanelBase)
  4. local this = KLUISkillDescribePanel
  5. ---创建时调用一次
  6. function this:Init()
  7. end
  8. ---创建或者刷新界面数据时调用
  9. function this:Refresh()
  10. if self.args then
  11. self.skillId = self.args
  12. self:RefreshSkillInfo(self.skillId)
  13. end
  14. end
  15. ---注册UI事件和服务器消息
  16. function this:RegistEvents()
  17. GUI:AddOnClickEvent(self.view.CostTips, self, self.AddCostOnClick)
  18. GUI:AddOnClickEvent(self.view.BtnLearn, self, self.BtnLearnOnClick)
  19. SL:RegisterLUAEvent(LUA_EVENT_SELECT_SKILL_UI, self.SelectSkill, self)
  20. SL:RegisterLUAEvent(Event.SkillChange, self.ResSkillChangeMessage, self)
  21. SL:RegisterLUAEvent(Event.BagInfo_Change, self.BagInfo_Change, self)
  22. GUI:AddOnClickEvent(self.view.costItem, self, self.OnCostItemOnClick)
  23. end
  24. function this:OnCostItemOnClick()
  25. SL:OpenTips(nil, self.costId)
  26. end
  27. function this:BagInfo_Change()
  28. self:RefreshSkillInfo(self.skillId)
  29. end
  30. ---@param eventData SkillProtos.SkillChangeRes
  31. function this:ResSkillChangeMessage(_, eventData)
  32. if not eventData or not eventData.skillInfo then
  33. return
  34. end
  35. for _, skillInfo in pairs(eventData.skillInfo) do
  36. if skillInfo.skillId == self.skillId then
  37. self:RefreshSkillInfo(self.skillId)
  38. end
  39. end
  40. end
  41. function this:AddCostOnClick()
  42. return SL:CommonItemGetPath(nil, self.costId)
  43. end
  44. function this:BtnLearnOnClick()
  45. --点击学习技能或者升级技能
  46. if not self.skillId then
  47. return
  48. end
  49. if self.isLearned and not self.canUp then
  50. SL:TipMessage(SL:GetConfig('cfg_string', 253).text, 1, NoticeType.NoticeMid)--"道具数量不足",
  51. return
  52. end
  53. if not self.isLearned and not self.isOpen then
  54. SL:TipMessage(SL:GetConfig('cfg_string', 300).text, 1, NoticeType.NoticeMid)--"学习技能,未达到条件
  55. return
  56. end
  57. SL:ReqUpSkillMessage(self.skillId)
  58. end
  59. ---@param skillItem KLUISkillItem
  60. function this:SelectSkill(_, skillItem)
  61. return self:RefreshSkillInfo(skillItem.skillId)
  62. end
  63. ---@param skillId number
  64. function this:RefreshSkillInfo(skillId)
  65. self.skillId = skillId
  66. if not self.skillUI then
  67. ---@type KLUISkillInfoPanel
  68. self.skillUI = GUI:GetUI("dev/ui/Skill/Panel/KLUISkillInfo/KLUISkillInfoPanel")
  69. end
  70. ---@type Skill
  71. local skill = SL:GetMetaValue(EMetaVarGetKey.SKILL_DATA, self.skillId)
  72. local skillLv = skill and skill.level or 1
  73. if false or self.skillUI.skillShowType == E_SkillShowType.Transfer then
  74. self.isLearned = true
  75. else
  76. self.isLearned = skill ~= nil
  77. end
  78. ---@type cfg_skill_info_column
  79. local skillInfoTbl = SL:GetConfigMultiKeys('cfg_skill_info', self.skillId, skillLv, 'skillID', 'skillLevel')
  80. local spriteName = string.isNullOrEmpty(skillInfoTbl.icon) and "" or skillInfoTbl.icon
  81. GUI:Image_loadTexture(self.view.skillIcon, spriteName, "Atlas/UIOutSkillIcon.spriteatlas")
  82. self.isOpen = self:UpdateOpenConds(skillInfoTbl)
  83. local nextLv = skillLv + 1
  84. ---@type cfg_skill_info_column
  85. local nextSkillInfoTbl = SL:GetConfigMultiKeys('cfg_skill_info', self.skillId, nextLv, 'skillID', 'skillLevel')
  86. self.canUp = false
  87. if self.isLearned then
  88. --学习过技能
  89. GUI:SetActive(self.view.Unlearned, false)
  90. GUI:SetActive(self.view.desc1, true)
  91. --技能等级
  92. GUI:Text_setString(self.view.levelTxt1, "当前等级 " .. skillLv .. "级")
  93. if cfg_equip_angelTalentLv_post.IsAngelTalentSkill(self.skillId) then
  94. local angelTalentLvTbl = cfg_equip_angelTalentLv_post.GetAngleTalentLvTbl(self.skillId, skillLv)
  95. --技能描述
  96. if angelTalentLvTbl then
  97. GUI:Text_setString(self.view.skillDes1, angelTalentLvTbl.description)
  98. else
  99. GUI:Text_setString(self.view.skillDes1, "")
  100. end
  101. else
  102. --技能描述
  103. GUI:Text_setString(self.view.skillDes1, skillInfoTbl.tips)
  104. end
  105. GUI:Text_setString(self.view.SkillName, skillInfoTbl.name .. " <color=yellow>" .. skillLv .. "级</color>")
  106. if nextSkillInfoTbl then
  107. --有下一级
  108. GUI:SetActive(self.view.desc2, true)
  109. --技能等级
  110. GUI:Text_setString(self.view.levelTxt2, "下一等级 " .. nextLv .. "级")
  111. if cfg_equip_angelTalentLv_post.IsAngelTalentSkill(self.skillId) then
  112. local angelTalentLvTbl = cfg_equip_angelTalentLv_post.GetAngleTalentLvTbl(self.skillId, nextLv)
  113. --技能描述
  114. if angelTalentLvTbl then
  115. GUI:Text_setString(self.view.skillDes2, angelTalentLvTbl.description)
  116. else
  117. GUI:Text_setString(self.view.skillDes2, "")
  118. end
  119. else
  120. --技能描述
  121. GUI:Text_setString(self.view.skillDes2, nextSkillInfoTbl.tips)
  122. end
  123. GUI:SetActive(self.view.maxLevelTips, false)
  124. GUI:SetActive(self.view.CostShow, true)
  125. if #nextSkillInfoTbl.skillLevelUpItemID > 0 then
  126. GUI:SetActive(self.view.CostShow, true)
  127. self.costId = nextSkillInfoTbl.skillLevelUpItemID[1][1]
  128. local costCount = nextSkillInfoTbl.skillLevelUpItemID[1][2]
  129. GUI:Item_setItemId(self.view.costItem, self.costId)
  130. local ownCount = SL:GetMetaValue(EMetaVarGetKey.MONEY, self.costId)
  131. GUI:Text_setString(self.view.costCount, ownCount .. "/" .. costCount)
  132. if ownCount >= costCount then
  133. self.canUp = true
  134. GUI:Text_setTextColor(self.view.costCount, "#00ff00")
  135. else
  136. GUI:Text_setTextColor(self.view.costCount, "#ff0000")
  137. end
  138. GUI:Text_setString(self.view.BtnText, "升级")
  139. GUI:SetActive(self.view.BtnLearn, true)
  140. else
  141. GUI:SetActive(self.view.CostShow, false)
  142. GUI:SetActive(self.view.BtnLearn, false)
  143. end
  144. else
  145. GUI:SetActive(self.view.desc2, false)
  146. GUI:SetActive(self.view.maxLevelTips, true)
  147. GUI:SetActive(self.view.CostShow, false)
  148. GUI:SetActive(self.view.BtnLearn, false)
  149. end
  150. else
  151. GUI:SetActive(self.view.Unlearned, true)
  152. GUI:SetActive(self.view.desc1, false)
  153. GUI:SetActive(self.view.desc2, true)
  154. --技能等级
  155. GUI:Text_setString(self.view.levelTxt2, "下一等级 " .. skillLv .. "级")
  156. if cfg_equip_angelTalentLv_post.IsAngelTalentSkill(self.skillId) then
  157. local angelTalentLvTbl = cfg_equip_angelTalentLv_post.GetAngleTalentLvTbl(self.skillId, skillLv)
  158. --技能描述
  159. if angelTalentLvTbl then
  160. GUI:Text_setString(self.view.skillDes2, angelTalentLvTbl.description)
  161. else
  162. GUI:Text_setString(self.view.skillDes2, "")
  163. end
  164. else
  165. --技能描述
  166. GUI:Text_setString(self.view.skillDes2, nextSkillInfoTbl.tips)
  167. end
  168. GUI:Text_setString(self.view.SkillName, skillInfoTbl.name)
  169. if #skillInfoTbl.skillLevelUpItemID > 0 then
  170. GUI:SetActive(self.view.CostShow, true)
  171. self.costId = skillInfoTbl.skillLevelUpItemID[1][1]
  172. local costCount = skillInfoTbl.skillLevelUpItemID[1][2]
  173. GUI:Item_setItemId(self.view.costItem, self.costId)
  174. local ownCount = SL:GetMetaValue(EMetaVarGetKey.MONEY, self.costId)
  175. GUI:Text_setString(self.view.costCount, ownCount .. "/" .. costCount)
  176. if ownCount >= costCount then
  177. self.canUp = true
  178. GUI:Text_setTextColor(self.view.costCount, "#00ff00")
  179. else
  180. GUI:Text_setTextColor(self.view.costCount, "#ff0000")
  181. end
  182. GUI:Text_setString(self.view.BtnText, "学习")
  183. GUI:SetActive(self.view.BtnLearn, true)
  184. else
  185. GUI:SetActive(self.view.CostShow, false)
  186. GUI:SetActive(self.view.BtnLearn, false)
  187. end
  188. GUI:SetActive(self.view.maxLevelTips, false)
  189. end
  190. end
  191. ---@param skillInfoTbl cfg_skill_info_column
  192. function this:UpdateOpenConds(skillInfoTbl)
  193. --职业
  194. local isMeet = false
  195. ---@type cfg_career_column
  196. local careerTbl = SL:GetMetaValue(EMetaVarGetKey.ME_CAREER_TAB_COLUMN)
  197. for _, v in pairs(skillInfoTbl.needCareer) do
  198. if v[1] == careerTbl.baseCareer then
  199. if v[2] <= careerTbl.careerRank then
  200. GUI:Text_setString(self.view.Condition_1, careerTbl.name)
  201. isMeet = true
  202. break
  203. else
  204. careerTbl = SL:GetConfigMultiKeys("cfg_career", v[1], v[2], "baseCareer", "careerRank")
  205. GUI:Text_setString(self.view.Condition_1, careerTbl.name)
  206. end
  207. end
  208. end
  209. if isMeet then
  210. GUI:Text_setTextColor(self.view.Condition_1, "#00ff00")
  211. GUI:SetActive(self.view.bingo1, true)
  212. else
  213. GUI:Text_setTextColor(self.view.Condition_1, "#ff0000")
  214. GUI:SetActive(self.view.bingo1, false)
  215. end
  216. --等级
  217. local needLv1 = skillInfoTbl.needLevel[1] or 0
  218. local needLv2 = skillInfoTbl.needLevel[2]
  219. local meLv = SL:GetMetaValue(EMetaVarGetKey.LEVEL)
  220. local isMeetLv = false
  221. if needLv2 then
  222. isMeetLv = meLv >= needLv1 and meLv <= needLv2
  223. else
  224. isMeetLv = meLv >= needLv1
  225. end
  226. GUI:Text_setString(self.view.Condition_2, "角色 " .. needLv1 .. "级")
  227. if isMeetLv then
  228. GUI:Text_setTextColor(self.view.Condition_2, "#00ff00")
  229. GUI:SetActive(self.view.bingo2, true)
  230. else
  231. isMeet = false
  232. GUI:Text_setTextColor(self.view.Condition_2, "#ff0000")
  233. GUI:SetActive(self.view.bingo2, false)
  234. end
  235. --武器限制
  236. GUI:Text_setString(self.view.Condition_3, "武器技能")
  237. if SL:GetMetaValue(EMetaVarGetKey.SKILL_CHECK_EQUIP, skillInfoTbl.skillID, skillInfoTbl.skillLevel) then
  238. GUI:Text_setTextColor(self.view.Condition_3, "#00ff00")
  239. GUI:SetActive(self.view.bingo3, true)
  240. else
  241. isMeet = false
  242. GUI:Text_setTextColor(self.view.Condition_3, "#ff0000")
  243. GUI:SetActive(self.view.bingo3, false)
  244. end
  245. return isMeet
  246. end
  247. function this:Close()
  248. self.skillUI = nil
  249. end
  250. return this