KLHuntingDemonsRewardPanel.lua 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. ---@class KLHuntingDemonsRewardPanel:UIKmlLuaPanelBase
  2. ---@field view KLHuntingDemonsRewardPanelView
  3. ---@field Reward4DataList table<number,{rank:number,rewardList:table<number,{id:number,count:number}>}>
  4. ---@field playerSeverDataList table<number,{roleInfo:{career:number, name:string, online:number, serverid:number},integral:number, rank:number, rid:number, medal:number}> @所有排行榜数据
  5. local KLHuntingDemonsRewardPanel = class(UIKmlLuaPanelBase)
  6. local this =KLHuntingDemonsRewardPanel
  7. function this:AsyncLoadUI()
  8. end
  9. ---创建时调用一次
  10. function this:Init()
  11. self.maxRankShowNum = 100
  12. ---跳转路径
  13. self.jumpPath = {"openUIPanel","dev/outui/ChallengeBoss/Panel/KLChallengeBoss/KLChallengeBossPanel","1","monsterType=1"}
  14. self:InitMyRankInfo()
  15. self:RefreshJackpot()
  16. self:GetRewardData()
  17. GUI:DataListInitData(self.view.Reward4DataList,function()
  18. return self:GetReward4DataListItemCountFunc()
  19. end,function(realIndex)
  20. return self:GetReward4DataListItemGetFunc(realIndex)
  21. end,function(realIndex, kmlcontrol)
  22. return self:GetReward4DataListItemInitFunc(realIndex, kmlcontrol)
  23. end, function(realIndex, kmlcontrol)
  24. return self:GetReward4DataListItemUpdateFunc(realIndex, kmlcontrol)
  25. end)
  26. GUI:DataListInitData(self.view.PlayerDataList,function()
  27. return self:PlayerDataListItemCountFunc()
  28. end,function(realIndex)
  29. return self:PlayerDataListItemGetFunc(realIndex)
  30. end,function(realIndex, kmlcontrol)
  31. return self:PlayerDataListItemInitFunc(realIndex, kmlcontrol)
  32. end, function(realIndex, kmlcontrol)
  33. return self:PlayerDataListItemUpdateFunc(realIndex, kmlcontrol)
  34. end)
  35. end
  36. ---注册UI事件和服务器消息
  37. function this:RegistEvents()
  38. GUI:AddOnClickEvent(self.view.button_go,self,self.OnClickGo)
  39. GUI:AddOnClickEvent(self.view.HelpButton,self,self.OnClickHelp)
  40. SL:RegisterLUAEvent(LUA_EVENT_HUNTING_DEMONS_RANK_DATA_CHANGE, self.LUA_EVENT_HUNTING_DEMONS_RANK_DATA_CHANGE, self)
  41. SL:RegisterLUAEvent(LUA_EVENT_HUNTING_DEMONS_INFO_CHANGE, self.LUA_EVENT_HUNTING_DEMONS_INFO_CHANGE, self)
  42. end
  43. ---猎魔信息变动
  44. function this:LUA_EVENT_HUNTING_DEMONS_INFO_CHANGE()
  45. self.isRest = true
  46. local time = InfoManager.uiHuntingDemonsInfo.resetSec * 1000
  47. if time > InfoManager.uiHuntingDemonsInfo.settleSec * 1000 then
  48. time = InfoManager.uiHuntingDemonsInfo.settleSec * 1000
  49. self.isRest = false
  50. end
  51. GUI:Button_setGrey(self.view.button_go,self.isRest)
  52. GUI:Button_setTitleText(self.view.button_go,self.isRest and "等待下次开启" or "前往挑战")
  53. local count = (time - tonumber(SL:GetMetaValue(EMetaVarGetKey.SERVER_TIME))) * 0.001 + 1
  54. local func = function()
  55. local now = tonumber(SL:GetMetaValue(EMetaVarGetKey.SERVER_TIME))
  56. local deltaTime = time - now
  57. GUI:Text_setString(self.view.TimeText, self.isRest
  58. and "离重置的剩余时间:".. self:FormatTimeHMS(deltaTime) or "离结算的剩余时间:"..self:FormatTimeHMS(deltaTime))
  59. if deltaTime <= 0 then
  60. if time > 0 then
  61. self.isRest = not self.isRest
  62. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_MONSTER_HUNT_INFO)
  63. end
  64. GUI:Text_setString(self.view.TimeText, "")
  65. GUI:Button_setGrey(self.view.button_go,self.isRest)
  66. GUI:Button_setTitleText(self.view.button_go,self.isRest and "等待下次开启" or "前往挑战")
  67. self:UnScheduleTimer()
  68. end
  69. end
  70. func()
  71. self.countDown = SL:Schedule(self.countDown, 0, 1, count, func)
  72. end
  73. --单位毫秒
  74. function this:FormatTimeHMS(time)
  75. time = time // 1000
  76. local s = time % 60
  77. local m = time // 60 % 60
  78. local h = time // 3600 % 24
  79. return string.format("%02s:%02s:%02s", h, m, s);
  80. end
  81. function this:UnScheduleTimer()
  82. if self.countDown then
  83. SL:UnSchedule(self.countDown)
  84. end
  85. self.countDown = nil
  86. end
  87. ---点击打开帮助页面
  88. function this:OnClickHelp()
  89. local helpCfg=SL:GetConfig("cfg_rule_text",27002)
  90. if helpCfg then
  91. SL:CommonStrTipsMessage({title =helpCfg.menutxt,str=helpCfg.location})
  92. end
  93. end
  94. ---猎魔排行榜数据变动
  95. function this:LUA_EVENT_HUNTING_DEMONS_RANK_DATA_CHANGE()
  96. local allRankList = InfoManager.uiHuntingDemonsInfo.AllRankDataList
  97. self.playerSeverDataList = {}
  98. for i, v in ipairs(allRankList) do
  99. local data = v
  100. if i <= self.maxRankShowNum then
  101. table.insert(self.playerSeverDataList,data)
  102. end
  103. if data.rid == SL:GetMetaValue(EMetaVarGetKey.UID) then
  104. self:InitMyRankInfo(data,i)
  105. end
  106. end
  107. GUI:DataListUpdateData(self.view.PlayerDataList)
  108. self:GetRewardData()
  109. self:RefreshJackpot()
  110. end
  111. ---显示猎魔道具tips
  112. function this:OnClickShowTips()
  113. SL:OpenTips("",InfoManager.uiHuntingDemonsInfo.itemID)
  114. end
  115. ---点击前往猎魔
  116. function this:OnClickGo()
  117. if self.isRest then
  118. return
  119. end
  120. self.args.mainPanel:OnClickClose()
  121. SL:ShortcutDO(self.jumpPath)
  122. end
  123. ---界面显示时调用一次
  124. function this:Show()
  125. self:LUA_EVENT_HUNTING_DEMONS_RANK_DATA_CHANGE()
  126. self:LUA_EVENT_HUNTING_DEMONS_INFO_CHANGE()
  127. end
  128. ---创建或者刷新界面数据时调用
  129. function this:Refresh()
  130. end
  131. function this:Hide()
  132. end
  133. function this:Close()
  134. self:UnScheduleTimer()
  135. end
  136. ---刷新奖池
  137. function this:RefreshJackpot()
  138. local nowRate = Mathf.Ceil((InfoManager.uiHuntingDemonsInfo:GetNowConversionRateRange() / 10000) * 100)
  139. local nextRate,nextDifferIntegral = InfoManager.uiHuntingDemonsInfo:GetNextConversionRateRange()
  140. GUI:Text_setString(self.view.IntegralText,tostring(InfoManager.uiHuntingDemonsInfo.AllPlayerIntegral))
  141. GUI:setVisible(self.view.NextIntegral,nextRate)
  142. if nextRate then
  143. nextRate = Mathf.Ceil((nextRate.value / 10000) * 100)
  144. GUI:Text_setString(self.view.NextIntegralText,nextRate.."%")
  145. GUI:Text_setString(self.view.NextItemCountText,"离目标差<color=#D9001CFF>"..tostring(nextDifferIntegral).."</color>积分")
  146. end
  147. GUI:Text_setString(self.view.conversionText,nowRate.."%")
  148. self:SetNowAllItemCount(Mathf.Floor(InfoManager.uiHuntingDemonsInfo.AllItemCount))
  149. end
  150. -------------------个人奖励预览---------------------------
  151. ---获取个人奖励信息
  152. function this:GetRewardData()
  153. self.Reward4DataList = {}
  154. local cfgList = SL:GetConfigTable("cfg_monsterHuntReward")
  155. ---@param v cfg_monsterHuntReward_column
  156. for i, v in ipairs(cfgList) do
  157. local rank = ""
  158. --名次相同显示一个
  159. if v.rank[1] == v.rank[2] then
  160. rank = "第"..v.rank[1].."名"
  161. else
  162. rank = "第"..v.rank[1].."名~".."第"..v.rank[2].."名"
  163. end
  164. local rewardList = {}
  165. local itemCount = InfoManager.uiHuntingDemonsInfo:GetRankingIntervalWeightItemCount(i)
  166. local rankData = InfoManager.uiHuntingDemonsInfo:GetRankDataIndex(v.rank[1])
  167. local countStr = ""
  168. if rankData then
  169. countStr = itemCount + v.extra
  170. end
  171. table.insert(rewardList,{id = InfoManager.uiHuntingDemonsInfo.itemID,count = countStr})
  172. for z, a in ipairs(v.item) do
  173. table.insert(rewardList,{id = a[1],count = a[2]})
  174. end
  175. table.insert(self.Reward4DataList,{rank = rank,rewardList = rewardList})
  176. end
  177. GUI:DataListUpdateData(self.view.Reward4DataList)
  178. end
  179. function this:GetReward4DataListItemCountFunc()
  180. return #self.Reward4DataList
  181. end
  182. function this:GetReward4DataListItemGetFunc(realIndex)
  183. ---@type KLHuntingDemonsRewardItem
  184. local item = GUI:UIPanel_Open("dev/outui/HuntingDemons/Item/KLHuntingDemonsReward/KLHuntingDemonsRewardItem", self.view.Reward4DataList, self, nil, true)
  185. if not self.Reward4ItemsList then
  186. ---@type table<KingML.KmlControl,KLHuntingDemonsRewardItem>
  187. self.Reward4ItemsList = {}
  188. end
  189. local kmlCtrl = item.view.root
  190. self.Reward4ItemsList[kmlCtrl] = item
  191. return kmlCtrl
  192. end
  193. function this:GetReward4DataListItemInitFunc(realIndex, kmlcontrol)
  194. end
  195. function this:GetReward4DataListItemUpdateFunc(realIndex, kmlcontrol)
  196. local data = self.Reward4DataList[realIndex + 1]
  197. local item = self.Reward4ItemsList[kmlcontrol]
  198. item:SetRankTextAndReward(data)
  199. end
  200. --------------------------------------------
  201. --------------------------------排行榜玩家信息-------------------------------------------------------
  202. function this:PlayerDataListItemCountFunc()
  203. return #self.playerSeverDataList
  204. end
  205. function this:PlayerDataListItemGetFunc(realIndex)
  206. end
  207. function this:PlayerDataListItemInitFunc(realIndex, kmlcontrol)
  208. end
  209. function this:PlayerDataListItemUpdateFunc(realIndex, kmlcontrol)
  210. local data = self.playerSeverDataList[realIndex + 1]
  211. --local _button = GUI:GetChildControl(self.view.PlayerDataList,realIndex,'PlayerItem_Button',kmlcontrol)
  212. local _bg = GUI:GetChildControl(self.view.PlayerDataList,realIndex,'PlayerItem_BG',kmlcontrol)
  213. local _headIcon = GUI:GetChildControl(self.view.PlayerDataList,realIndex,'PlayerItem_HeadIcon',kmlcontrol)
  214. local _rankText = GUI:GetChildControl(self.view.PlayerDataList,realIndex,'PlayerItem_RankText',kmlcontrol)
  215. local _rankIcon = GUI:GetChildControl(self.view.PlayerDataList,realIndex,'PlayerItem_RankIcon',kmlcontrol)
  216. local _name = GUI:GetChildControl(self.view.PlayerDataList,realIndex,'PlayerItem_Name',kmlcontrol)
  217. local _unionName = GUI:GetChildControl(self.view.PlayerDataList,realIndex,'PlayerItem_UnionName',kmlcontrol)
  218. --local _lv = GUI:GetChildControl(self.view.PlayerDataList,realIndex,'PlayerItem_LV',kmlcontrol)
  219. local rankNo = realIndex + 1
  220. self:SetRankBG(_bg,rankNo)
  221. self:SetPlayerHead(_headIcon,{baseCareer = data.roleInfo.career})
  222. self:SetRankValueIconOrText(_rankText,_rankIcon,nil,rankNo)
  223. local serverName = ""
  224. if data.roleInfo.serverid then
  225. serverName = "S"..data.roleInfo.serverid.."."
  226. end
  227. self:SetPlayerName(_name,serverName..data.roleInfo.name)
  228. self:SetRankShowInfo(_unionName, data.integral)
  229. end
  230. function this:SetRankShowInfo(control, value)
  231. GUI:Text_setString(control, "杀怪积分:" .. value)
  232. end
  233. ---设置玩家名字
  234. function this:SetPlayerName(Control,name)
  235. GUI:Text_setString(Control,name)
  236. end
  237. ---设置玩家头像
  238. ---@param career CommonProtos.Career @职业数据
  239. function this:SetPlayerHead(Control,career)
  240. GUI:Image_loadTexture(Control,"1"..career.baseCareer,"Atlas/MUIcon.spriteatlas")
  241. end
  242. ---根据排名显示图片或文字
  243. function this:SetRankValueIconOrText(Control_Text,Control_Image,Control_Image2,rankValue)
  244. rankValue = tonumber(rankValue)
  245. GUI:SetActive(Control_Text,false)
  246. GUI:SetActive(Control_Image,false)
  247. if Control_Image2 then
  248. GUI:SetActive(Control_Image2,false)
  249. end
  250. if rankValue == -1 then
  251. if Control_Image2 then
  252. GUI:SetActive(Control_Image2,true)
  253. end
  254. return
  255. end
  256. if rankValue > 0 and rankValue < 4 then
  257. GUI:SetActive(Control_Image,true)
  258. GUI:Image_loadTexture(Control_Image,"S_icon"..rankValue,"Atlas/UIRankListPanel.spriteatlas")
  259. return
  260. end
  261. GUI:SetActive(Control_Text,true)
  262. GUI:Text_setString(Control_Text,tostring(rankValue))
  263. end
  264. ---根据排名显示背景图
  265. function this:SetRankBG(Control,rankValue)
  266. rankValue = tonumber(rankValue)
  267. if rankValue == -1 then
  268. GUI:Image_loadTexture(Control,"Pic_My","Atlas/UIRankListPanel.spriteatlas")
  269. return
  270. end
  271. if rankValue > 0 and rankValue < 4 then
  272. GUI:Image_loadTexture(Control,"Pic_"..rankValue,"Atlas/UIRankListPanel.spriteatlas")
  273. return
  274. end
  275. GUI:Image_loadTexture(Control,"Pic_4","Atlas/UIRankListPanel.spriteatlas")
  276. end
  277. ---初始化个人排名信息
  278. ---@param info {roleInfo:{career:number, name:string, online:number, serverid:number},integral:number, rank:number, rid:number, medal:number} @排行榜数据
  279. ---@param rankNo number @排名
  280. function this:InitMyRankInfo(info,rankNo)
  281. local rankValue = -1
  282. if rankNo and rankNo <= self.maxRankShowNum then
  283. rankValue = rankNo
  284. end
  285. local name = SL:GetMetaValue(EMetaVarGetKey.USER_NAME)
  286. self:SetPlayerName(self.view.MyRank_Name,name)
  287. if info and info.integral then--排行榜有值的情况下
  288. self:SetRankShowInfo(self.view.MyRank_UnionName, info.integral)
  289. else--排行榜没有值的情况下为0
  290. local myValue = "0"
  291. self:SetRankShowInfo(self.view.MyRank_UnionName, myValue)
  292. end
  293. self:SetRankValueIconOrText(self.view.MyRank_RankText,self.view.MyRank_RankIcon,self.view.MyRank_NoRank,rankValue)
  294. self:SetPlayerHead(self.view.MyRank_HeadIcon,SL:MeData_GetCareer())
  295. self:SetRankBG(self.view.MyRank_BG,rankValue)
  296. end
  297. --------------------------------------------------------------------------------------------
  298. ---设置当前所有猎魔勋章数量
  299. function this:SetNowAllItemCount(index)
  300. GUI:Text_setString(self.view.item5Text,tostring(index))
  301. end
  302. return this