KLActivityComboPanel.lua 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. ---@class KLActivityComboPanel:UIKmlLuaPanelBase
  2. ---@field view KLActivityComboPanelView
  3. local KLActivityComboPanel = class(UIKmlLuaPanelBase)
  4. local this =KLActivityComboPanel
  5. function this:AsyncLoadUI()
  6. end
  7. ---创建时调用一次
  8. function this:Init()
  9. self.activityType = 24001
  10. self.activityCfg = {}
  11. self.levelData_all_item = {}
  12. self.player_challenge_time = 0
  13. GUI:DataListInitData(self.view.levelList, function()
  14. return self:LevelDataListItemCountFunc()
  15. end, function(realIndex)
  16. return self:LevelDataListItemGetFunc(realIndex)
  17. end, function(realIndex, kmlCtrl)
  18. return self:LevelDataListItemInitFunc(realIndex, kmlCtrl)
  19. end, function(realIndex, kmlCtrl)
  20. return self:LevelDataListItemUpdateFunc(realIndex, kmlCtrl)
  21. end)
  22. self.reward_all_item = {}
  23. GUI:DataListInitData(self.view.rewardList, function()
  24. return self:RewardDataListItemCountFunc()
  25. end, function(realIndex)
  26. return self:RewardDataListItemGetFunc(realIndex)
  27. end, function(realIndex, kmlCtrl)
  28. return self:RewardDataListItemInitFunc(realIndex, kmlCtrl)
  29. end, function(realIndex, kmlCtrl)
  30. return self:RewardDataListItemUpdateFunc(realIndex, kmlCtrl)
  31. end)
  32. --SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_BLOODY_CASTLE_PANEL, tbl.id)
  33. end
  34. --region levelList
  35. function this:LevelDataListItemCountFunc()
  36. return #self.levelData
  37. end
  38. function this:LevelDataListItemGetFunc(realIndex)
  39. end
  40. function this:LevelDataListItemInitFunc(realIndex, kmlcontrol)
  41. end
  42. function this:LevelDataListItemUpdateFunc(realIndex, kmlCtrl)
  43. ---@type cfg_rep_column
  44. local data = self.levelData[realIndex + 1]
  45. local KLLevel = GUI:GetChildControl(self.view.levelList, realIndex, "KLLevel")
  46. local noClick = GUI:GetChildControl(self.view.levelList, realIndex, "noClick")
  47. local levelName = GUI:GetChildControl(self.view.levelList, realIndex, "levelName")
  48. if #data.skill == 0 then
  49. GUI:Text_setString(levelName, data.name[1])
  50. GUI:setVisible(noClick, false)
  51. GUI:setSwallowTouches(KLLevel,false)
  52. elseif self.comboSkillLevel >= data.skill[1][3] then
  53. GUI:Text_setString(levelName, data.name[1] .. " 连击技Lv." .. data.skill[1][3])
  54. GUI:setVisible(noClick, false)
  55. GUI:setSwallowTouches(KLLevel,false)
  56. else
  57. GUI:Text_setString(levelName, "连击技Lv." .. data.skill[1][3] .. "开启")
  58. GUI:setVisible(noClick, true)
  59. GUI:setSwallowTouches(KLLevel,true)
  60. end
  61. GUI:SetIsOnWithoutNotify(KLLevel, data.id == self.nowSelectLevelId)
  62. GUI:SetToggleOnValueChange(KLLevel, self, self.LevelOnToggleValueChange, data.id)
  63. end
  64. function this:LevelOnToggleValueChange(_, data, eventData)
  65. self:RefreshLevelMainInfo(data)
  66. end
  67. --endregion
  68. --region rewardList
  69. function this:RewardDataListItemCountFunc()
  70. return #self.rewardData
  71. end
  72. function this:RewardDataListItemGetFunc(realIndex)
  73. end
  74. function this:RewardDataListItemInitFunc(realIndex, kmlcontrol)
  75. end
  76. function this:RewardDataListItemUpdateFunc(realIndex, kmlcontrol)
  77. local reward = self.rewardData[realIndex + 1]
  78. local pass_reward = GUI:GetChildControl(self.view.rewardList, realIndex, 'pass_reward')
  79. local img_pass_reward_click = GUI:GetChildControl(self.view.rewardList, realIndex, 'img_pass_reward_click')
  80. GUI:Item_setItemId(pass_reward, reward[1])
  81. GUI:Item_UpdataData(pass_reward, { itemcount = reward[2] })
  82. GUI:AddOnClickEvent(img_pass_reward_click, self, self.ShowItemTips, reward[1])
  83. end
  84. function this:ShowItemTips(_, id)
  85. SL:OpenTips(nil, id)
  86. end
  87. --endregion
  88. ---注册UI事件和服务器消息
  89. function this:RegistEvents()
  90. GUI:AddOnClickEvent(self.view.addCountBtn, self, self.OnClickAddCountBtn)
  91. GUI:AddOnClickEvent(self.view.enterBtn, self, self.OnClickEnterBtn)
  92. GUI:AddOnClickEvent(self.view.sweepBtn, self, self.OnClickSweepBtn)
  93. GUI:AddOnClickEvent(self.view.desBtn, self, self.OnClickDesBtn)
  94. GUI:AddOnClickEvent(self.view.closeBtn, self, self.OnClickCloseBtn)
  95. GUI:AddOnClickEvent(self.view.bgClose, self, self.OnClickCloseBtn)
  96. GUI:AddOnClickEvent(self.view.ticketBtn, self, self.OnClickTicketBtn)
  97. GUI:AddOnClickEvent(self.view.ClickMask, self, self.ClickMaskOnClick)
  98. GUI:AddOnClickEvent(self.view.BtnBuy, self, self.BtnBuyOnClick)
  99. GUI:Input_SetOnEndEdit(self.view.InputFieldLevel, self, self.InputFieldLevelOnEndEdit)
  100. GUI:AddOnClickEvent(self.view.BtnLevelAdd, self, self.BtnLevelAddOnClick)
  101. GUI:AddOnClickEvent(self.view.BtnLevelMinus, self, self.BtnLevelMinusOnClick)
  102. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_GET_ACTIVITY_COUNT, self.RES_GET_ACTIVITY_COUNT, self)
  103. SL:RegisterLuaNetMsg(LuaMessageIdToClient.COMBO_TEST_PANEL_INFO, self.RES_COMBO_TEST_PANEL_INFO, self)
  104. SL:RegisterLUAEvent(LUA_EVENT_MONEYCHANGE, self.LUA_EVENT_BAG_CHANGE_AFTER, self)
  105. end
  106. ---界面显示时调用一次
  107. function this:Show()
  108. end
  109. ---创建或者刷新界面数据时调用
  110. function this:Refresh()
  111. SL.HideMainPanel()
  112. GUI:setVisible(self.view.TextTotalPrice, false)
  113. GUI:setVisible(self.view.TotalPrice, false)
  114. GUI:Text_setString(self.view.BtnText, "扫荡")
  115. GUI:setVisible(self.view.sweep_panel, false)
  116. self.comboSkillLevel = InfoManager.dragonSoulSkillInfo.comboSkillLevel and InfoManager.dragonSoulSkillInfo.comboSkillLevel or 0
  117. self:RefreshLevelList()
  118. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_GET_ACTIVITY_COUNT, self.activityType)
  119. SL:SendLuaNetMsg(LuaMessageIdToSever.COMBO_TEST_PANEL_INFO)
  120. end
  121. function this:RefreshLevelList()
  122. local tblList = SL:GetConfigTable("cfg_rep")
  123. self.levelData = {}
  124. ---@param v cfg_rep_column
  125. for i, v in pairs(tblList) do
  126. if self.activityType == v.type then
  127. self.activityCfg[v.id] = v
  128. self.levelData[v.repLevel] = v
  129. end
  130. end
  131. GUI:setContentSize(self.view.levelLayout,165,53 * #self.levelData)
  132. end
  133. function this:RefreshLevelMainInfo(id)
  134. self.nowSelectLevelId = id
  135. ---@type cfg_rep_column
  136. local data = self.activityCfg[id]
  137. self.nowSelectLevel = data.repLevel
  138. if #data.skill > 0 then
  139. GUI:Text_setString(self.view.level, data.repLevel .. "级(连击技能Lv." .. data.skill[1][3] .. ")")
  140. else
  141. GUI:Text_setString(self.view.level, data.repLevel .. "级")
  142. end
  143. --local defense = SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", data.recommend[1])
  144. --local isMeet = defense >= data.recommend[2]
  145. --local color = isMeet and "#28E529" or "#ff2323"
  146. --local recommend = isMeet and data.recommend[2] or data.recommend[2] .. "(您的防御值低于推荐值)"
  147. local isMeet = data.repLevel <= self.comboSkillLevel
  148. local color = isMeet and "#28E529" or "#ff2323"
  149. local recommend = data.repLevel .. "级"
  150. recommend = GUIUtil.GetColorText(recommend, color)
  151. GUI:Text_setString(self.view.defense, recommend)
  152. self:RefreshItemCount()
  153. self.rewardData = data.UIreward
  154. GUI:DataListUpdateData(self.view.rewardList)
  155. if self.nowSelectLevel > self.nowMaxLevel + 1 then
  156. GUI:setVisible(self.view.enterBtn, false)
  157. GUI:setVisible(self.view.text_btnTips, true)
  158. else
  159. GUI:setVisible(self.view.enterBtn, true)
  160. GUI:setVisible(self.view.text_btnTips, false)
  161. end
  162. if self.nowSelectLevelId <= self.nowMaxLevelId then
  163. GUI:setVisible(self.view.sweepBtn, true)
  164. else
  165. GUI:setVisible(self.view.sweepBtn, false)
  166. end
  167. end
  168. function this:RefreshItemCount()
  169. local data = self.activityCfg[self.nowSelectLevelId]
  170. local cost = SL:GetBagItemCount(data.itemId[1])
  171. local text
  172. if cost >= data.itemId[2] then
  173. text = "<color=#1ADD1F>" .. cost .. "</color>"
  174. else
  175. text = "<color=#FF2323>" .. cost .. "</color>"
  176. end
  177. GUI:Text_setString(self.view.ticketCount, text .. "/" .. data.itemId[2])
  178. GUI:Item_setItemId(self.view.ticketItem, data.itemId[1])
  179. end
  180. function this:OnClickAddCountBtn()
  181. ---@type cfg_rep_column
  182. local tbl = SL:GetConfigMultiKeys("cfg_rep", self.activityType, self.nowSelectLevel, "type", "repLevel")
  183. SL:CommonItemGetPath(nil, tbl.itemId[1])
  184. end
  185. function this:OnClickEnterBtn()
  186. local isInTeam = SL:GetMetaValue(EMetaVarGetKey.TEAM_IS_IN)
  187. if isInTeam then
  188. return
  189. end
  190. ---@type cfg_rep_column
  191. local tbl = self.activityCfg[self.nowSelectLevelId]
  192. if not tbl then
  193. return
  194. end
  195. local ownerTicket = SL:GetBagItemCount(tbl.itemId[1])
  196. local tip
  197. if ownerTicket < tbl.itemId[2] then
  198. tip = "门票不足"
  199. ---@type cfg_rep_column
  200. SL:CommonItemGetPath(nil, tbl.itemId[1])
  201. elseif self.player_challenge_time <= 0 then
  202. tip = "今日次数不足"
  203. end
  204. if not tip then
  205. ---进入副本
  206. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_ENTER_DUPLICATE, tbl.id)
  207. self:OnClickCloseBtn()
  208. else
  209. SL:TipMessage(tip, 1, NoticeType.NoticeMid)
  210. end
  211. end
  212. function this:OnClickSweepBtn()
  213. if PrivilegeCardManager.isSaoDangOpen() then
  214. if self.player_challenge_time > 0 then
  215. GUI:setVisible(self.view.sweep_panel, true)
  216. GUI:Text_setString(self.view.InputFieldLevel, "1")
  217. GUI:Text_setString(self.view.sweepCount, "剩余次数:" .. self.player_challenge_time)
  218. else
  219. SL:TipMessage( SL:GetConfig('cfg_string',493).text, 1, NoticeType.NoticeMid )
  220. end
  221. else
  222. SL:CommonTipsMessage({ stringTblID = 492, showTips = "", ui = self, sureBtnText = "确定", cancelBtnText = "取消",
  223. callback = self.OpenFirsh })
  224. end
  225. end
  226. function this:OpenFirsh()
  227. GUI:UIPanel_Close("dev/outui/Activity/Panel/KLActivityCombo/KLActivityComboPanel")
  228. GUI:UIPanel_Open("dev/outui/ShopMain/Panel/KLShopMain/KLShopMainPanel",nil,nil,{2} )
  229. end
  230. function this:OnClickDesBtn()
  231. local helpCfg = SL:GetConfig("cfg_rule_text", 202)
  232. if helpCfg then
  233. SL:CommonStrTipsMessage({ title = helpCfg.menutxt, str = helpCfg.location })
  234. end
  235. end
  236. function this:OnClickCloseBtn()
  237. GUI:UIPanel_Close("dev/outui/Activity/Panel/KLActivityCombo/KLActivityComboPanel")
  238. end
  239. function this:OnClickTicketBtn()
  240. ---@type cfg_rep_column
  241. local tbl = SL:GetConfigMultiKeys("cfg_rep", self.activityType, self.nowSelectLevel, "type", "repLevel")
  242. SL:OpenTips(nil, tbl.itemId[1])
  243. end
  244. function this:BtnBuyOnClick()
  245. local count = tonumber(GUI:Text_getString(self.view.InputFieldLevel))
  246. if self.player_challenge_time > 0 and count > 0 then
  247. ---@type cfg_rep_column
  248. local tbl = self.activityCfg[self.nowSelectLevelId]
  249. local ownerTicket = SL:GetBagItemCount(tbl.itemId[1])
  250. if ownerTicket < tbl.itemId[2] * count then
  251. SL:TipMessage("门票不足", 1, NoticeType.NoticeMid)
  252. else
  253. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_SWEEP_THROUGH_DUNGEONS, { self.nowSelectLevelId, count })
  254. GUI:setVisible(self.view.sweep_panel, false)
  255. end
  256. end
  257. end
  258. function this:InputFieldLevelOnEndEdit(_, _, eventData)
  259. local text = eventData[1]
  260. GUI:Text_setString(self.view.InputFieldLevel, tostring(text))
  261. self:CheckInput()
  262. end
  263. function this:BtnLevelAddOnClick()
  264. local inputNum = tonumber(GUI:Text_getString(self.view.InputFieldLevel))
  265. GUI:Text_setString(self.view.InputFieldLevel, tostring(inputNum + 1))
  266. self:CheckInput()
  267. end
  268. function this:BtnLevelMinusOnClick()
  269. local inputNum = tonumber(GUI:Text_getString(self.view.InputFieldLevel))
  270. inputNum = inputNum - 1
  271. GUI:Text_setString(self.view.InputFieldLevel, tostring(inputNum))
  272. self:CheckInput()
  273. end
  274. function this:CheckInput()
  275. local inputStr = GUI:Text_getString(self.view.InputFieldLevel)
  276. local inputNum = tonumber(inputStr)
  277. if not inputNum then
  278. GUI:Text_setString(self.view.InputFieldLevel, "1")
  279. return
  280. end
  281. if inputNum >= self.player_challenge_time then
  282. GUI:Text_setString(self.view.InputFieldLevel, tostring(self.player_challenge_time))
  283. return
  284. end
  285. if inputNum <= 0 then
  286. GUI:Text_setString(self.view.InputFieldLevel, "0")
  287. return
  288. end
  289. end
  290. function this:ClickMaskOnClick()
  291. GUI:setVisible(self.view.sweep_panel, false)
  292. end
  293. function this:RES_GET_ACTIVITY_COUNT(_, message)
  294. if tonumber(message["1"]) == self.activityType then
  295. self.player_challenge_time = message["2"]
  296. if self.maxCount then
  297. self:RefreshChallengeTime()
  298. end
  299. end
  300. end
  301. function this:RES_COMBO_TEST_PANEL_INFO(_, message)
  302. self.nowMaxLevelId = message.id
  303. self.nowMaxLevel = message.level
  304. self.maxCount = message.count
  305. self:GetNowCanChallengeLevel()
  306. self:RefreshLevelMainInfo(self.nowSelectLevelId)
  307. GUI:DataListUpdateData(self.view.levelList)
  308. if self.nowMaxLevel ~= 0 then
  309. ---刷新滚动条位置
  310. if #self.levelData - self.nowMaxLevel < 7 then
  311. local offset = 53 * #self.levelData - 395
  312. if offset < 0 then
  313. offset = 0
  314. end
  315. GUI:setPositionY(self.view.levelLayout, offset)
  316. else
  317. GUI:setPositionY(self.view.levelLayout, (self.nowMaxLevel - 1) * 53)
  318. end
  319. end
  320. if self.player_challenge_time then
  321. self:RefreshChallengeTime()
  322. end
  323. end
  324. function this:GetNowCanChallengeLevel()
  325. ---@type cfg_rep_column
  326. local data = self.levelData[self.nowMaxLevel + 1]
  327. if data and (#data.skill == 0 or data.skill[1][3] <= self.comboSkillLevel) then
  328. self.nowSelectLevelId = data.id
  329. else
  330. self.nowSelectLevelId = self.nowMaxLevelId
  331. end
  332. end
  333. function this:LUA_EVENT_BAG_CHANGE_AFTER()
  334. if self.timer then
  335. SL:UnSchedule(self.timer)
  336. end
  337. self.timer = SL:ScheduleOnce(0.1, function()
  338. self:RefreshItemCount()
  339. end)
  340. end
  341. function this:RefreshChallengeTime()
  342. local text
  343. if self.player_challenge_time <= 0 then
  344. text = "<color=#FF2323>" .. 0 .. "</color>"
  345. else
  346. text = self.player_challenge_time
  347. end
  348. GUI:Text_setString(self.view.countTxt, text .. "/" .. self.maxCount .. "次")
  349. end
  350. function this:Hide()
  351. end
  352. function this:Close()
  353. if self.timer then
  354. SL:UnSchedule(self.timer)
  355. self.timer = nil
  356. end
  357. GUI:setVisible(self.view.TextTotalPrice, true)
  358. GUI:setVisible(self.view.TotalPrice, true)
  359. GUI:Text_setString(self.view.BtnText, "购买")
  360. SL.ShowMainPanel()
  361. end
  362. return this