KLActivityDetailPanel.lua 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. ---@class KLActivityDetailPanel:UIKmlLuaPanelBase
  2. ---@field view KLActivityDetailPanelView
  3. local KLActivityDetailPanel = class(UIKmlLuaPanelBase)
  4. local this =KLActivityDetailPanel
  5. ---创建时调用一次
  6. function this:Init()
  7. self.levelData_all_item = {}
  8. GUI:DataListInitData(self.view.levelList,function()
  9. return self:LevelDataListItemCountFunc()
  10. end,function(realIndex)
  11. return self:LevelDataListItemGetFunc(realIndex)
  12. end,function(realIndex, kmlcontrol)
  13. return self:LevelDataListItemInitFunc(realIndex, kmlcontrol)
  14. end, function(realIndex, kmlcontrol)
  15. return self:LevelDataListItemUpdateFunc(realIndex, kmlcontrol)
  16. end)
  17. self.reward_all_item = {}
  18. GUI:DataListInitData(self.view.rewardList,function()
  19. return self:RewardDataListItemCountFunc()
  20. end,function(realIndex)
  21. return self:RewardDataListItemGetFunc(realIndex)
  22. end,function(realIndex, kmlcontrol)
  23. return self:RewardDataListItemInitFunc(realIndex, kmlcontrol)
  24. end, function(realIndex, kmlcontrol)
  25. return self:RewardDataListItemUpdateFunc(realIndex, kmlcontrol)
  26. end)
  27. end
  28. ---创建或者刷新界面数据时调用
  29. function this:Refresh()
  30. self.args = tonumber(self.args)
  31. SL.HideMainPanel()
  32. self:RefreshLevelList()
  33. end
  34. ---注册UI事件和服务器消息
  35. function this:RegistEvents()
  36. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_DEVIL_SQUARE_PANEL,self.RES_DEVIL_SQUARE_PANEL,self)
  37. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_BLOODY_CASTLE_PANEL,self.RES_BLOODY_CASTLE_PANEL,self)
  38. SL:RegisterLUAEvent(SELECT_LEVEL_STAGE,self.SELECT_LEVEL_STAGE,self)
  39. SL:RegisterLUAEvent(LUA_EVENT_BAG_CHANGE_AFTER,self.LUA_EVENT_BAG_CHANGE_AFTER,self)
  40. GUI:AddOnClickEvent(self.view.addCountBtn,self,self.OnCliCkAddCountBtn)
  41. GUI:AddOnClickEvent(self.view.enterBtn,self,self.OnCliCkEnterBtn)
  42. GUI:AddOnClickEvent(self.view.desBtn,self,self.OnCliCkDesBtn)
  43. GUI:AddOnClickEvent(self.view.closeBtn,self,self.OnCliCkCloseBtn)
  44. GUI:AddOnClickEvent(self.view.bgClose,self,self.OnCliCkCloseBtn)
  45. GUI:AddOnClickEvent(self.view.ticketBtn,self,self.OnCliCkTicketBtn)
  46. end
  47. function this:RefreshLevelList()
  48. GUI:setVisible(self.view.bloodTitle,self.args == EActivityType.BloodyCastle)
  49. GUI:setVisible(self.view.devilTitle,self.args == EActivityType.DevilSquare)
  50. GUI:setVisible(self.view.bloodTitleicon,self.args == EActivityType.BloodyCastle)
  51. GUI:setVisible(self.view.devilTitleicon,self.args == EActivityType.DevilSquare)
  52. local scale = self.args == EActivityType.BloodyCastle and 0.6 or 1
  53. local y = self.args == EActivityType.BloodyCastle and -11 or 0
  54. GUI:setScale(self.view.ticketModel,scale)
  55. GUI:setScale(self.view.ticketModel,scale)
  56. GUI:setPositionY(self.view.ticketModel,y)
  57. local tblList = SL:GetConfigTable("cfg_rep")
  58. self.levelData = {}
  59. self.curSelectLevelStage = 1
  60. local index = 0
  61. local level = SL:GetMetaValue(EMetaVarGetKey.LEVEL)
  62. ---@param v cfg_rep_column
  63. for i, v in pairs(tblList) do
  64. if self.args == v.type then
  65. local isMeet = level >= v.level[1] and level <= v.level[2]
  66. if isMeet and self.curSelectLevelStage < v.repLevel then
  67. self.curSelectLevelStage = v.repLevel
  68. index = #self.levelData + 1
  69. end
  70. table.insert(self.levelData,v)
  71. end
  72. end
  73. local h = #self.levelData*53
  74. GUI:setContentSize(self.view.levelLayout,165,h)
  75. ---@type cfg_rep_column
  76. local tbl = SL:GetConfigMultiKeys("cfg_rep",self.args,self.curSelectLevelStage,"type","repLevel")
  77. if self.args == EActivityType.DevilSquare then
  78. SL:SendLuaNetMsg(LuaMessageIdToSever.GET_DEVIL_SQUARE_PANEL,tbl.id)
  79. else
  80. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_BLOODY_CASTLE_PANEL,tbl.id)
  81. end
  82. GUI:DataListUpdateData(self.view.levelList)
  83. GUI:setPositionY(self.view.levelLayout,index>7 and -67+ (index-8)*53+25 or -67)
  84. end
  85. function this:LevelDataListItemCountFunc()
  86. return #self.levelData
  87. end
  88. function this:LevelDataListItemGetFunc(realIndex)
  89. local data = self.levelData[realIndex + 1]
  90. local item = GUI:UIPanel_Open("dev/outui/Activity/Item/KLLevel/KLLevelItem",self.view.levelList,self,data,true)
  91. self.levelData_all_item[item.view.root] = item
  92. return item.view.root
  93. end
  94. function this:LevelDataListItemInitFunc(realIndex, kmlcontrol)
  95. end
  96. function this:LevelDataListItemUpdateFunc(realIndex, kmlcontrol)
  97. local data = self.levelData[realIndex + 1]
  98. self.levelData_all_item[kmlcontrol]:RefreshItem(data)
  99. end
  100. function this:RES_BLOODY_CASTLE_PANEL(id,message)
  101. self:RefreshCopyInfo(self.curSelectLevelStage,message["2"],message["3"],tonumber(message["4"]))
  102. end
  103. function this:RES_DEVIL_SQUARE_PANEL(id,message)
  104. self:RefreshCopyInfo(self.curSelectLevelStage,message["2"],message["3"],tonumber(message["4"]))
  105. end
  106. ---@param data cfg_rep_column
  107. function this:SELECT_LEVEL_STAGE(_,data)
  108. if self.curSelectLevelStage ~= data.repLevel then
  109. self.curSelectLevelStage = data.repLevel
  110. ---@type cfg_rep_column
  111. local tbl = SL:GetConfigMultiKeys("cfg_rep",self.args,self.curSelectLevelStage,"type","repLevel")
  112. SL:SendLuaNetMsg(LuaMessageIdToSever.GET_DEVIL_SQUARE_PANEL,tbl.id)
  113. end
  114. end
  115. function this:LUA_EVENT_BAG_CHANGE_AFTER()
  116. self:RefreshCostItem()
  117. end
  118. function this:RefreshCopyInfo(levelStage,leftCount,isOpen,time)
  119. self.leftCount = leftCount
  120. self.isOpen = isOpen
  121. if SL:HasConfigTwoKeys("cfg_rep",self.args,levelStage,"type","repLevel") then
  122. ---@type cfg_rep_column
  123. local tbl = SL:GetConfigMultiKeys("cfg_rep",self.args,levelStage,"type","repLevel")
  124. local levelStr = string.split(tbl.name[1]," ")
  125. GUI:Text_setString(self.view.level,levelStage.."级(".. levelStr[2] ..")")
  126. local definse = SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", tbl.recommend[1])
  127. local isMeet = definse >= tbl.recommend[2]
  128. local color = isMeet and "#28E529" or "#ff2323"
  129. local recommend = isMeet and tbl.recommend[2] or tbl.recommend[2] .. "(您的防御值低于推荐值)"
  130. recommend = GUIUtil.GetColorText(recommend,color)
  131. GUI:Text_setString(self.view.defense,recommend)
  132. ---@type cfg_activity_rule_column
  133. local activityTbl = SL:GetConfigMultiKeys("cfg_activity_rule",self.args,"id")
  134. if not isOpen then
  135. local countdown = time-SL:GetMetaValue(EMetaVarGetKey.SERVER_TIME)
  136. countdown = math.floor(countdown/1000)
  137. GUI:SetControl_time(self.view.nextOpenTime,countdown)
  138. end
  139. GUI:Text_setString(self.view.openTime,activityTbl.timeText)
  140. GUI:setVisible(self.view.nextOpenTime,not isOpen)
  141. GUI:setVisible(self.view.openTxt,isOpen)
  142. self:RefreshCostItem()
  143. self:RefreshReward()
  144. isMeet = leftCount > 0
  145. color = isMeet and "#28E529" or "#ff2323"
  146. GUI:Text_setString(self.view.leftcount,GUIUtil.GetColorText(leftCount.."次",color))
  147. end
  148. end
  149. function this:RefreshCostItem()
  150. ---@type cfg_rep_column
  151. local tbl = SL:GetConfigMultiKeys("cfg_rep",self.args,self.curSelectLevelStage,"type","repLevel")
  152. local ownerTicket = SL:GetBagItemCount(tbl.itemId[1])
  153. isMeet = tbl.itemId[2] <= ownerTicket
  154. color = isMeet and "#28E529" or "#ff2323"
  155. GUI:Text_setString(self.view.ticketCount,GUIUtil.GetColorText(ownerTicket.."/"..tbl.itemId[2],color))
  156. ---@type cfg_item_column
  157. local itemTbl = SL:GetConfig("cfg_item",tbl.itemId[1],"id")
  158. ---@type cfg_model_charactor_column
  159. local modelTbl = SL:GetConfig("cfg_model_charactor",itemTbl.shape[1],"id")
  160. GUI:Model_setSrc(self.view.ticketModel,modelTbl.path)
  161. end
  162. function this:RefreshReward()
  163. ---@type cfg_rep_column
  164. local tbl = SL:GetConfigMultiKeys("cfg_rep",self.args,self.curSelectLevelStage,"type","repLevel")
  165. self.rewardData = tbl.UIreward
  166. GUI:DataListUpdateData(self.view.rewardList)
  167. end
  168. function this:RewardDataListItemCountFunc()
  169. return #self.rewardData
  170. end
  171. function this:RewardDataListItemGetFunc(realIndex)
  172. local data = self.rewardData[realIndex + 1]
  173. local message = {cfgId = data[1],count="",width = 70,height=70}
  174. local item = GUI:UIPanel_Open("dev/outui/Activity/Item/KLItem/KLItemItem",self.view.rewardList,self,message,true)
  175. self.reward_all_item[item.view.root] = item
  176. return item.view.root
  177. end
  178. function this:RewardDataListItemInitFunc(realIndex, kmlcontrol)
  179. end
  180. function this:RewardDataListItemUpdateFunc(realIndex, kmlcontrol)
  181. local data = self.rewardData[realIndex + 1]
  182. self.reward_all_item[kmlcontrol]:RefreshItem(data[1],"")
  183. end
  184. function this:OnCliCkAddCountBtn()
  185. ---@type cfg_rep_column
  186. local tbl = SL:GetConfigMultiKeys("cfg_rep",self.args,self.curSelectLevelStage,"type","repLevel")
  187. SL:CommonItemGetPath(nil,tbl.itemId[1])
  188. end
  189. function this:OnCliCkEnterBtn()
  190. local isInTeam = SL:GetMetaValue(EMetaVarGetKey.TEAM_IS_IN)
  191. if isInTeam then
  192. local isNoLeader = SL:GetMetaValue(EMetaVarGetKey.TEAM_IS_TEAM_LEADER)
  193. if not isNoLeader then
  194. SL:TipMessage("您不是队长",1,NoticeType.NoticeMid)
  195. return
  196. end
  197. end
  198. ---@type cfg_rep_column
  199. local tbl = SL:GetConfigMultiKeys("cfg_rep",self.args,self.curSelectLevelStage,"type","repLevel")
  200. local ownerTicket = SL:GetBagItemCount(tbl.itemId[1])
  201. local tip
  202. if not self.isOpen then
  203. tip = "副本未开启"
  204. elseif ownerTicket < tbl.itemId[2] then
  205. tip = "门票不足"
  206. ---@type cfg_rep_column
  207. SL:CommonItemGetPath(nil,tbl.itemId[1])
  208. elseif self.leftCount <= 0 then
  209. tip = "今日次数不足"
  210. end
  211. if not tip then
  212. ---进入副本
  213. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_ENTER_DUPLICATE,tbl.id)
  214. else
  215. SL:TipMessage(tip,1,NoticeType.NoticeMid)
  216. end
  217. end
  218. function this:OnCliCkDesBtn()
  219. local des = ""
  220. local title = ""
  221. if self.args == EActivityType.DevilSquare then
  222. des = "1、开启时间:从1:00开始,每2小时开启一场一天总开启12场。\n2、不同等级可进入不同层恶魔广场,每次进入恶魔广场需消耗对应数量的恶魔通行证。\n3、恶魔广场内怪物密集、刷新频率高、击杀怪物经验多,此副本内挂机打怪可获得大量经验。\n4.恶魔广场可组队进入,击杀怪物均分经验。\n5.组队进入恶魔广场后,击杀怪物可获得积分,结算时根据积分可获得额外奖励。\n6.根据积分数量对组队成员进行排名,恶魔广场结算时根据排名前三名可获得额外奖励。"
  223. title = "恶魔广场"
  224. elseif self.args == EActivityType.BloodyCastle then
  225. des = "1、开启时间:从1:00开始,每2小时开启一场一天总开启12场。\n2、不同等级可进入不同层血色城堡,每次进入血色城堡需消耗1个透明披风。\n3、血色城堡内怪物密集、刷新频率高、击杀怪物经验多,此副本内挂机打怪可获得大量经验\n4、完成血色城堡任务:攻破城门、打开水晶棺交还大天使之武器后,可额外获得奖励。\n5、血色城堡可组队一起进入,击杀怪物经验平分。队伍内人数越多,经验加成越高,2人+20%,3人队+40%,4人队+60%,5人队+80%,怪物经验共享有效范围为20码。\n6、为保证队伍其他成员收益,此副本内限制组队玩家对金币/白装的拾取设置,单人进入不限制。"
  226. title = "血色城堡"
  227. end
  228. GUI:UIPanel_Open("dev/outui/Activity/Panel/KLDescribeDetail/KLDescribeDetailPanel",nil,nil,{title=title,content=des})
  229. end
  230. function this:OnCliCkCloseBtn()
  231. GUI:UIPanel_Close("dev/outui/Activity/Panel/KLActivityDetail/KLActivityDetailPanel")
  232. SL.ShowMainPanel()
  233. end
  234. function this:OnCliCkTicketBtn()
  235. ---@type cfg_rep_column
  236. local tbl = SL:GetConfigMultiKeys("cfg_rep",self.args,self.curSelectLevelStage,"type","repLevel")
  237. SL:OpenTips(nil, tbl.itemId[1])
  238. end
  239. function this:Close()
  240. SL.ShowMainPanel()
  241. end
  242. return this