KLKuaFuBossInfoItem.lua 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. ---@class KLKuaFuBossInfoItem:UIKmlLuaPanelBase
  2. ---@field view KLKuaFuBossInfoItemView
  3. ---@field nowSelectMonster KLUIChallengeBossSelectBtnItem
  4. local KLKuaFuBossInfoItem = class(UIKmlLuaPanelBase)
  5. local this =KLKuaFuBossInfoItem
  6. ---创建时调用一次
  7. function this:Init()
  8. self.allBossData = {}
  9. self.activityId = 23001
  10. self.recommendIndex = nil
  11. local recommendLv = nil
  12. local index = 0
  13. local tbl = SL:GetConfigTable("cfg_BOSS_challenge")
  14. local lv = tonumber(SL:GetMetaValue(EMetaVarGetKey.LEVEL))
  15. local baseCareer = SL:GetMetaValue(EMetaVarGetKey.JOB)
  16. ---@param cfg cfg_BOSS_challenge_column
  17. for _, cfg in pairs(tbl) do
  18. if cfg.monsterType == 4 then
  19. --跨服boss
  20. index = index + 1
  21. local rewards = {}
  22. -- for _, v in pairs(cfg.monsterDrop) do
  23. -- for _, data in pairs(v) do
  24. -- table.insert(rewards, data)
  25. -- end
  26. -- end
  27. local Rwward = cfg.monsterDrop
  28. for i, one_reward in ipairs(Rwward) do
  29. if one_reward[1] == baseCareer then
  30. table.insert(rewards,one_reward[2])
  31. end
  32. end
  33. table.insert(self.allBossData, {level=cfg.level, monsterid=cfg.monsterid, index=index, uiReward = rewards, mapId = cfg.mapId, cfgId = cfg.id, size = cfg.size, offset = cfg.offset})
  34. if not recommendLv or (lv >= cfg.level and cfg.level > recommendLv) then
  35. recommendLv = cfg.level
  36. self.recommendIndex = index
  37. end
  38. end
  39. end
  40. --怪物列表
  41. GUI:DataListInitData(self.view.privilege_boss_level_data_list,function()
  42. return self:PrivilegeBossBtnDataListItemCountFunc()
  43. end,function(realIndex)
  44. return self:PrivilegeBossBtnDataListItemGetFunc(realIndex)
  45. end,function(realIndex, kmlcontrol)
  46. return self:PrivilegeBossBtnDataListItemInitFunc(realIndex, kmlcontrol)
  47. end, function(realIndex, kmlcontrol)
  48. return self:PrivilegeBossBtnDataListItemUpdateFunc(realIndex, kmlcontrol)
  49. end)
  50. self.privilege_boss_level_btn_all_item = {}
  51. --奖励列表
  52. self.PrivilegeAllRwward = {}
  53. GUI:DataListInitData(self.view.privilege_boss_reward_data_list,function()
  54. return self:PrivilegeRewardDataListItemCountFunc()
  55. end,function(realIndex)
  56. return self:PrivilegeRewardDataListItemGetFunc(realIndex)
  57. end,function(realIndex, kmlcontrol)
  58. return self:PrivilegeRewardDataListItemInitFunc(realIndex, kmlcontrol)
  59. end, function(realIndex, kmlcontrol)
  60. return self:PrivilegeRewardDataListItemUpdateFunc(realIndex, kmlcontrol)
  61. end)
  62. self.privilege_reward_level_all_item = {}
  63. --立即刷新怪物列表
  64. self.nowSelectMonster = nil
  65. GUI:DataListUpdateData(self.view.privilege_boss_level_data_list)
  66. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_GODS_DESCENDED_DATA)
  67. end
  68. function this:PrivilegeBossBtnDataListItemCountFunc()
  69. return #self.allBossData
  70. end
  71. function this:PrivilegeBossBtnDataListItemGetFunc(realIndex)
  72. local item = GUI:UIPanel_Open("dev/outui/ChallengeBoss/Item/KLUIChallengeBossSelectBtnItem/KLUIChallengeBossSelectBtnItem",self.view.privilege_boss_level_data_list,self,{},true)
  73. self.privilege_boss_level_btn_all_item[item.view.root]=item
  74. return item.view.root
  75. end
  76. function this:PrivilegeBossBtnDataListItemInitFunc(realIndex, kmlcontrol)
  77. end
  78. function this:PrivilegeBossBtnDataListItemUpdateFunc(realIndex, kmlcontrol)
  79. self.privilege_boss_level_btn_all_item[kmlcontrol]:RefreshItem(self.allBossData[realIndex + 1],self.recommendIndex,self,4)
  80. if realIndex + 1 == self.recommendIndex and self.nowSelectMonster == nil then
  81. self:SelectLevelPrivilege(realIndex + 1, self.privilege_boss_level_btn_all_item[kmlcontrol])
  82. end
  83. end
  84. function this:PrivilegeRewardDataListItemCountFunc()
  85. return #self.PrivilegeAllRwward
  86. end
  87. function this:PrivilegeRewardDataListItemGetFunc(realIndex)
  88. local item = GUI:UIPanel_Open("dev/outui/ChallengeBoss/Item/KLUIChallengeBossRewardItem/KLUIChallengeBossRewardItem",self.view.privilege_boss_reward_data_list,self,{},true)
  89. self.privilege_reward_level_all_item[item.view.root] = item
  90. return item.view.root
  91. end
  92. function this:PrivilegeRewardDataListItemInitFunc(realIndex, kmlcontrol)
  93. end
  94. function this:PrivilegeRewardDataListItemUpdateFunc(realIndex, kmlcontrol)
  95. local data = self.PrivilegeAllRwward[realIndex + 1]
  96. self.privilege_reward_level_all_item[kmlcontrol]:RefreshItem({cfgId=data},self.select_Secret_level,self)
  97. end
  98. --取消上一个选中
  99. function this:HideSelectLevelPrivilege()
  100. if self.nowSelectMonster then
  101. self.nowSelectMonster:HideItem()
  102. end
  103. self.nowSelectMonster = nil
  104. end
  105. --选中后显示怪物信息
  106. function this:SelectLevelPrivilege(index, item)
  107. self.nowSelectMonster = item
  108. local data = self.allBossData[index]
  109. local monsterid = data.monsterid
  110. InfoManager.uiHuntingDemonsInfo:SetIntegralInControl(self.view.Integral_BG,self.view.Integral_Text,monsterid)
  111. self.cfgId = monsterid
  112. local tab = SL:GetConfigMultiKeys('cfg_monster', monsterid, 'id')
  113. local name = tab.name
  114. local appr = tab.appr
  115. local path = SL:GetConfigMultiKeys('cfg_model_monster', appr, 'id').path
  116. GUI:Text_setString(self.view.privilege_boss_name,name)
  117. local mscale
  118. if data.size then
  119. local scale = math.ceil(data.size/100)
  120. mscale = scale .. "," .. scale .. "," .. scale
  121. end
  122. GUI:Model_setSrc(self.view.privilege_boss_path,path, mscale)
  123. if data.offset and #data.offset >= 2 then
  124. GUI:setPosition(self.view.privilege_boss_path,data.offset[1],data.offset[2])
  125. end
  126. --活动信息
  127. self:UpdateActivityInfo()
  128. --奖励
  129. self.PrivilegeAllRwward = data.uiReward
  130. GUI:DataListUpdateData(self.view.privilege_boss_reward_data_list)
  131. end
  132. function this:UpdateActivityInfo()
  133. local monsterid = self.cfgId
  134. ---@type {id:number, cfgid:number, name:string, state:number, ownerid:number, ownername:string}[]
  135. local datas = InfoManager.godsDescendInfo.GetMonsterInfosByCfgId(monsterid)
  136. local showCountDown = false
  137. if table.count(datas) == 0 then
  138. showCountDown = true --未刷新
  139. else
  140. local allKilled = true
  141. for _, v in pairs(datas) do
  142. if v.state ~= 2 then
  143. --已死亡
  144. allKilled = false
  145. break
  146. end
  147. end
  148. if allKilled then
  149. showCountDown = true
  150. end
  151. end
  152. self:UnScheduleTimer()
  153. local activityInfo = InfoManager.activityPreviewInfo:GetActivityInfo(self.activityId)
  154. if (activityInfo and activityInfo.open == false) or showCountDown then
  155. GUI:setVisible(self.view.reviveText, true)
  156. local serverTime = SL:GetMetaValue(EMetaVarGetKey.SERVER_TIME)
  157. local count = (activityInfo.leftTime - tonumber(serverTime)) * 0.001 + 1
  158. local func = function()
  159. local now = tonumber(SL:GetMetaValue(EMetaVarGetKey.SERVER_TIME))
  160. local deltaTime = activityInfo.leftTime - now
  161. GUI:Text_setString(self.view.txt_countDown, self:FormatTimeHMS(deltaTime))
  162. if deltaTime <= 0 then
  163. self:ResetInfo()
  164. self:UnScheduleTimer()
  165. end
  166. end
  167. self.countDown = SL:Schedule(self.countDown, 0, 1, count, func)
  168. --GUI:Text_setString(self.view.btn_goNow, "")
  169. GUI:setVisible(self.view.btn_goNow, false)
  170. GUI:setVisible(self.view.img_tip, true)
  171. func()
  172. else
  173. self:ResetInfo()
  174. end
  175. end
  176. function this:ResetInfo()
  177. GUI:setVisible(self.view.reviveText, false)
  178. GUI:Text_setString(self.view.txt_countDown, "")
  179. GUI:setVisible(self.view.btn_goNow, true)
  180. GUI:setVisible(self.view.img_tip, false)
  181. end
  182. --单位毫秒
  183. function this:FormatTimeHMS(time)
  184. time = time // 1000
  185. local s = time % 60
  186. local m = time // 60 % 60
  187. local h = time // 3600 % 24
  188. return string.format("%02s:%02s:%02s", h, m, s);
  189. end
  190. function this:UnScheduleTimer()
  191. if self.countDown then
  192. SL:UnSchedule(self.countDown)
  193. end
  194. self.countDown = nil
  195. end
  196. ---注册UI事件和服务器消息
  197. function this:RegistEvents()
  198. GUI:AddOnClickEvent(self.view.btn_goNow, self, self.Go)
  199. SL:RegisterLUAEvent(LUA_EVENT_GODSDESCEND_DATA_CHANGE, self.LUA_EVENT_GODSDESCEND_DATA_CHANGE, self)
  200. end
  201. function this:Go()
  202. if self.nowSelectMonster then
  203. --奖励列表
  204. local cond, message = InfoManager.godsDescendInfo.CheckActivityConditionMapId(self.activityId)
  205. if cond then
  206. --[[ ---@type cfg_activity_rule_column
  207. local tbl = SL:GetConfig("cfg_activity_rule", self.activityId)
  208. SL:ShortcutDO(tbl.panel)]]
  209. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_GOTO_CROSS_MAP,{})
  210. else
  211. SL:TipMessage(message, 1, NoticeType.NoticeMid)
  212. end
  213. end
  214. end
  215. function this:LUA_EVENT_GODSDESCEND_DATA_CHANGE(_, data)
  216. if not data then
  217. self:UpdateActivityInfo()
  218. else
  219. for _, v in pairs(data) do
  220. if tonumber(data.cfgid) == self.cfgId then
  221. self:UpdateActivityInfo()
  222. break
  223. end
  224. end
  225. end
  226. end
  227. ---界面显示时调用一次
  228. function this:Show()
  229. end
  230. ---创建或者刷新界面数据时调用
  231. function this:Refresh()
  232. end
  233. function this:Close()
  234. self:UnScheduleTimer()
  235. end
  236. return this