KLBloodCopyTaskProgressPanel.lua 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. ---@class KLBloodCopyTaskProgressPanel:UIKmlLuaPanelBase
  2. ---@field view KLBloodCopyTaskProgressPanel
  3. ---@field expItem KLItemItem
  4. local KLBloodCopyTaskProgressPanel = class(UIKmlLuaPanelBase)
  5. local this =KLBloodCopyTaskProgressPanel
  6. ---创建时调用一次
  7. function this:Init()
  8. SL:KeepOpenPanel("KLBloodCopyTaskProgressPanel",true)
  9. self.reward_all_item = {}
  10. self.rewardData = {}
  11. GUI:DataListInitData(self.view.rewardList,function()
  12. return self:RewardDataListItemCountFunc()
  13. end,function(realIndex)
  14. return self:RewardDataListItemGetFunc(realIndex)
  15. end,function(realIndex, kmlcontrol)
  16. return self:RewardDataListItemInitFunc(realIndex, kmlcontrol)
  17. end, function(realIndex, kmlcontrol)
  18. return self:RewardDataListItemUpdateFunc(realIndex, kmlcontrol)
  19. end)
  20. end
  21. ---创建或者刷新界面数据时调用
  22. function this:Refresh()
  23. GUI:UIPanel_Close("dev/outui/Activity/Panel/KLCopyTeam/KLCopyTeamPanel")
  24. InfoManager.copActivityInfo.bloodTaskState = 0
  25. self:RefreshPrepareStage(nil,self.args)
  26. SL:SetMetaValue(EMetaVarSetKey.SET_ISNOTCHANGEPKMODE,true)
  27. SL:SetMetaValue(EMetaVarSetKey.SET_PKMODE,EPKMode.Peace)
  28. SL:CreateSceneItemModel("Streaming/prefab/buildings/1012_mesh25.prefab",function(res)
  29. self.doorModel = res
  30. if not IsNil(res) then
  31. res:SetLocalEulerAngles(45, 180, 0)
  32. res:SetLocalPosition(15,1.9,76)
  33. end
  34. end)
  35. self.isPutDownDoor = false
  36. end
  37. ---注册UI事件和服务器消息
  38. function this:RegistEvents()
  39. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_BLOODY_CASTLE_STATE_UPDATE,self.RefreshPrepareStage,self)
  40. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_BLOODY_CASTLE_TASK_UPDATE ,self.RefreshFightStage,self)
  41. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_QUIT_DUPLICATE,self.RES_QUIT_SUCCESS,self)
  42. SL:RegisterLuaNetMsg(LuaMessageIdToClient.BLOODY_CASTLE_SWORD_VIEW ,self.BLOODY_CASTLE_SWORD_VIEW,self)
  43. SL:RegisterLUAEvent(LUA_EVENT_ME_CREATE_SUCCESS,self.LUA_EVENT_ME_CREATE_SUCCESS,self)
  44. GUI:AddOnClickEvent(self.view.openActivityBtn,self,self.OnCliCkOpenActivityBtn)
  45. GUI:AddOnClickEvent(self.view.desBtn,self,self.OnCliCkDesBtn)
  46. GUI:AddOnClickEvent(self.view.exitBtn,self,self.OnCliCkExitBtn)
  47. end
  48. function this:LUA_EVENT_ME_CREATE_SUCCESS()
  49. if self.stage == 2 then
  50. self:SetDoorResistancePoint(true)
  51. self:SetSafeResistancePoint(false)
  52. self:SetSecondResistancePoint(true)
  53. end
  54. end
  55. function this:RefreshPrepareStage(id,message)
  56. self.stage = message["1"]
  57. local countdown = tonumber(message["2"])
  58. self.repCfgId = tonumber(message["3"])
  59. ---@type cfg_rep_column
  60. local tbl = SL:GetConfig("cfg_rep",self.repCfgId,"id")
  61. GUI:Text_setString(self.view.title,"血色城堡第".. tbl.repLevel .."层")
  62. countdown = countdown-SL:GetMetaValue(EMetaVarGetKey.SERVER_TIME)
  63. self.countdown = math.modf(countdown/1000)
  64. GUI:setVisible(self.view.fightRoot,false)
  65. GUI:setVisible(self.view.prepareRoot,self.stage == 1)
  66. GUI:setVisible(self.view.endTime,self.stage == 2)
  67. if self.stage == 1 then
  68. GUI:Text_setString(self.view.openDesTxt,"后开启")
  69. ---@type cfg_repGlobal_column
  70. local tbl = SL:GetConfig("cfg_repGlobal",10001002,"id")
  71. local waitTime = tonumber(tbl.value)
  72. local isChange = false
  73. if waitTime < self.countdown then
  74. GUI:Text_setString(self.view.openDes,"当前处于准备阶段")
  75. GUI:setVisible(self.view.openActivityBtn,false)
  76. else
  77. GUI:Text_setString(self.view.openDes,"战斗即将开始做好准备")
  78. GUI:setVisible(self.view.openActivityBtn,true)
  79. end
  80. local str = ""
  81. self.timer = SL:Schedule(self.timer,0,1,self.countdown,function()
  82. self.countdown = self.countdown - 1
  83. if waitTime < self.countdown then
  84. if not isChange then
  85. str = "后开启"
  86. GUI:Text_setString(self.view.openDes,"当前处于准备阶段")
  87. GUI:setVisible(self.view.openActivityBtn,false)
  88. isChange = true
  89. end
  90. elseif waitTime == self.countdown then
  91. str = "秒后开启副本"
  92. GUI:Text_setString(self.view.openDes,"战斗即将开始做好准备")
  93. GUI:setVisible(self.view.openActivityBtn,true)
  94. end
  95. GUI:Text_setString(self.view.openTime,GUIUtil.FormatTimeMS(self.countdown)..GUIUtil.GetColorText(str,"#1add1f"))
  96. if self.countdown <=0 then
  97. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_CHANGE_DUPLICATE_STATE,EDuplicateType.StartCopy)
  98. end
  99. end)
  100. self:SetSafeResistancePoint(true)
  101. elseif self.stage == 2 then
  102. self.timer = SL:Schedule(self.timer,0,0.9,self.countdown,function()
  103. self.countdown = self.countdown - 1
  104. GUI:Text_setString(self.view.endTime,GUIUtil.FormatTimeMS(self.countdown))
  105. if self.countdown <= 0 and self.timer then
  106. SL:UnSchedule(self.timer)
  107. end
  108. if self.countdown <=0 then
  109. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_QUIT_DUPLICATE)
  110. end
  111. end)
  112. self:SetDoorResistancePoint(true)
  113. self:SetSafeResistancePoint(false)
  114. self:SetSecondResistancePoint(true)
  115. end
  116. end
  117. function this:SetDoorResistancePoint(isAdd)
  118. ---@type cfg_repGlobal_column
  119. local tbl = SL:GetConfig("cfg_repGlobal",11001002,"id")
  120. local strList = string.split(tbl.value,"|")
  121. for i, v in pairs(strList) do
  122. local strs = string.split(v,"#")
  123. SL:SetResistancePoint(tonumber(strs[1]),tonumber(strs[2]),isAdd)
  124. end
  125. end
  126. function this:SetSafeResistancePoint(isAdd)
  127. ---@type cfg_repGlobal_column
  128. local tbl = SL:GetConfig("cfg_repGlobal",11001007,"id")
  129. local strList = string.split(tbl.value,"|")
  130. for i, v in pairs(strList) do
  131. local strs = string.split(v,"#")
  132. SL:SetResistancePoint(tonumber(strs[1]),tonumber(strs[2]),isAdd)
  133. end
  134. end
  135. function this:SetSecondResistancePoint(isAdd)
  136. ---@type cfg_repGlobal_column
  137. local tbl = SL:GetConfig("cfg_repGlobal",11001004,"id")
  138. local strList = string.split(tbl.value,"|")
  139. for i, v in pairs(strList) do
  140. local strs = string.split(v,"#")
  141. SL:SetResistancePoint(tonumber(strs[1]),tonumber(strs[2]),isAdd)
  142. end
  143. end
  144. function this:RefreshFightStage(id,message)
  145. self.phase = tonumber(message.phase)
  146. self.taskId = tonumber(message.taskId)
  147. if self.phase >= 2 and not self.isPutDownDoor then
  148. self.doorModel:SetLocalEulerAngles(90, 180, 0)
  149. self.isPutDownDoor = true
  150. end
  151. ---@type cfg_repTask_column
  152. local tbl = SL:GetConfig("cfg_repTask",tonumber(message.taskId),"id")
  153. if self.stage == 2 then
  154. self:RefreshReward()
  155. GUI:Text_setString(self.view.waveNumber,"阶段".. GUIUtil.ToNumberString(message.phase))
  156. GUI:Text_setString(self.view.taskName,tbl.UItext)
  157. GUI:Text_setString(self.view.taskCount,"<color=#ff2323>"..message.nowCount .. "</color>/"..message.totalCount)
  158. end
  159. if self.phase >= 2 then
  160. self:SetDoorResistancePoint(false)
  161. end
  162. if self.phase >= 3 then
  163. self:SetSecondResistancePoint(false)
  164. end
  165. local rid = SL:GetMetaValue(EMetaVarGetKey.MAIN_ACTOR_ID)
  166. rid = tonumber(rid)
  167. GUI:setVisible(self.view.noPickUpWeaponTip,self.phase >=5 and InfoManager.copActivityInfo.pickUpWeaponRid~=rid)
  168. if self.phase > 4 then
  169. InfoManager.copActivityInfo.bloodTaskState = 1
  170. elseif self.phase < 4 then
  171. InfoManager.copActivityInfo.bloodTaskState = 0
  172. end
  173. local state = self.phase >= 5 and message.nowCount >= message.totalCount
  174. if state then
  175. InfoManager.copActivityInfo.bloodTaskState = 2
  176. SL:AttachActivityWeapon(InfoManager.copActivityInfo.pickUpWeaponRid,0)
  177. end
  178. ---@type cfg_repTask_column[]
  179. local tblList = SL:GetConfigTable("cfg_repTask")
  180. ---@param v cfg_repTask_column
  181. for i, v in pairs(tblList) do
  182. if v.type == 3 and v.param[2] then
  183. if InfoManager.copActivityInfo.bloodTaskState == 0 then
  184. SL:SetNpcIcon(v.param[2], "task_progress")
  185. elseif InfoManager.copActivityInfo.bloodTaskState > 1 then
  186. SL:SetNpcIcon(v.param[2], "task_finish")
  187. end
  188. break
  189. end
  190. end
  191. GUI:setVisible(self.view.endRoot,state and InfoManager.copActivityInfo.pickUpWeaponRid==rid)
  192. GUI:setVisible(self.view.fightRoot,not state and not (self.phase >=5 and InfoManager.copActivityInfo.pickUpWeaponRid~=rid))
  193. end
  194. function this:RES_QUIT_SUCCESS(id,message)
  195. ---@type cfg_rep_column
  196. local tbl = SL:GetConfig("cfg_rep",message,"id")
  197. if tbl.type == EActivityType.BloodyCastle then
  198. GUI:UIPanel_Close("dev/outui/Activity/Panel/KLBloodCopyTaskProgress/KLBloodCopyTaskProgressPanel")
  199. end
  200. end
  201. function this:BLOODY_CASTLE_SWORD_VIEW(id,message)
  202. local pickUpWeaponRid = tonumber(message["1"])
  203. if not pickUpWeaponRid then
  204. pickUpWeaponRid = tonumber(message[1])
  205. end
  206. local rid = SL:GetMetaValue(EMetaVarGetKey.MAIN_ACTOR_ID)
  207. rid = tonumber(rid)
  208. InfoManager.copActivityInfo.pickUpWeaponRid = pickUpWeaponRid
  209. GUI:setVisible(self.view.noPickUpWeaponTip,self.phase >=5 and pickUpWeaponRid~=rid)
  210. GUI:setVisible(self.view.fightRoot,not (self.phase >=5 and pickUpWeaponRid~=rid))
  211. end
  212. function this:RefreshReward()
  213. ---@type cfg_rep_column
  214. local tbl = SL:GetConfig("cfg_rep",self.repCfgId,"id")
  215. self.rewardData = tbl.UIreward
  216. GUI:DataListUpdateData(self.view.rewardList)
  217. end
  218. function this:RewardDataListItemCountFunc()
  219. return #self.rewardData
  220. end
  221. function this:RewardDataListItemGetFunc(realIndex)
  222. local data = self.rewardData[realIndex + 1]
  223. local message = {cfgId = data[1],count="",width = 70,height=70}
  224. local item = GUI:UIPanel_Open("dev/outui/Activity/Item/KLItem/KLItemItem",self.view.rewardList,self,message,true)
  225. self.reward_all_item[item.view.root] = item
  226. return item.view.root
  227. end
  228. function this:RewardDataListItemInitFunc(realIndex, kmlcontrol)
  229. end
  230. function this:RewardDataListItemUpdateFunc(realIndex, kmlcontrol)
  231. local data = self.rewardData[realIndex + 1]
  232. self.reward_all_item[kmlcontrol]:RefreshItem(data[1],"")
  233. end
  234. function this:OnCliCkOpenActivityBtn()
  235. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_CHANGE_DUPLICATE_STATE,EDuplicateType.StartCopy)
  236. end
  237. function this:OnCliCkDesBtn()
  238. local des = "1、开启时间:从1:00开始,每2小时开启一场一天总开启12场。\n2、不同等级可进入不同层血色城堡,每次进入血色城堡需消耗1个透明披风。\n3、血色城堡内怪物密集、刷新频率高、击杀怪物经验多,此副本内挂机打怪可获得大量经验\n4、完成血色城堡任务:攻破城门、打开水晶棺交还大天使之武器后,可额外获得奖励。\n5、血色城堡可组队一起进入,击杀怪物经验平分。队伍内人数越多,经验加成越高,2人+20%,3人队+40%,4人队+60%,5人队+80%,怪物经验共享有效范围为20码。\n6、为保证队伍其他成员收益,此副本内限制组队玩家对金币/白装的拾取设置,单人进入不限制。"
  239. GUI:UIPanel_Open("dev/outui/Activity/Panel/KLDescribeDetail/KLDescribeDetailPanel",nil,nil,{title="血色城堡",content=des})
  240. end
  241. function this:OnCliCkExitBtn()
  242. local data = {content="离开副本将丢失进度,是否退出",okFunc=function()
  243. --请求退出副本
  244. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_QUIT_DUPLICATE)
  245. end}
  246. GUI:UIPanel_Open("dev/outui/Activity/Panel/KLSure/KLSurePanel",nil,nil,data)
  247. end
  248. function this:SetVisible(isVisible)
  249. GUI:setVisible(self.view.root,isVisible)
  250. end
  251. function this:Close()
  252. if self.timer then
  253. SL:UnSchedule(self.timer)
  254. self.timer = nil
  255. end
  256. InfoManager.copActivityInfo.hideTask = false
  257. self.stage = 1
  258. self:SetDoorResistancePoint(false)
  259. self:SetSafeResistancePoint(false)
  260. local rid = SL:GetMetaValue(EMetaVarGetKey.MAIN_ACTOR_ID)
  261. SL:AttachActivityWeapon(tonumber(rid),0)
  262. InfoManager.copActivityInfo.bloodTaskState = 0
  263. ---@type KLUILeftUpPanel
  264. local panel = GUI:GetUI("dev/ui/MainUI/Panel/KLUILeftUp/KLUILeftUpPanel")
  265. if panel then
  266. panel:OnClickTaskToggle(nil,nil,{true})
  267. end
  268. if self.doorModel then
  269. SL:RecycleSceneItemModel(self.doorModel)
  270. end
  271. self.doorModel = nil
  272. self.isPutDownDoor = false
  273. SL:SetMetaValue(EMetaVarSetKey.SET_ISNOTCHANGEPKMODE,false)
  274. SL:SetMetaValue(EMetaVarSetKey.SET_PKMODE,EPKMode.Peace)
  275. end
  276. return this