源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

455 lines
15 KiB

преди 4 седмици
  1. --新复活界面(把以前的全部删除)
  2. --20004
  3. --1元宝复活
  4. --2绑定元宝复活
  5. --3回城复活
  6. --4根据参数staus复活
  7. --5原地满血复活
  8. --6客户端请求变成幽灵
  9. --7暂无
  10. --8挂机自动复活
  11. --9通用副本复活
  12. ReliveView = ReliveView or BaseClass(BaseView)
  13. local ReliveView = ReliveView
  14. local SceneManager = SceneManager
  15. function ReliveView:__init()
  16. self.base_file = "relive"
  17. self.layout_file = "ReliveView"
  18. self.layer_name = "Main"
  19. self.destroy_imm = true
  20. self.use_background = false
  21. self.change_scene_close = true
  22. self.cost = 0
  23. self.is_set_zdepth = true
  24. self.delay_time = 15
  25. self.is_guardian_three_cd = false
  26. self.cancelBtnText_str = "安全区复活"
  27. self.sceneMgr = SceneManager:getInstance()
  28. self.relive_cost = 20 --默认复活20彩钻
  29. self.is_first_open = true
  30. self.is_set_zdepth = true
  31. self.item_list = {}
  32. self.load_callback = function ()
  33. self:LoadSuccess()
  34. end
  35. self.close_callback = function ()
  36. self:Remove()
  37. end
  38. end
  39. function ReliveView:Remove()
  40. if self.cd_timer_id then
  41. GlobalTimerQuest:CancelQuest(self.cd_timer_id)
  42. self.cd_timer_id = nil
  43. end
  44. if self.timer_id then
  45. GlobalTimerQuest:CancelQuest(self.timer_id)
  46. self.timer_id = nil
  47. end
  48. if self.next_relive_time_id then
  49. self.sceneMgr:UnBind(self.next_relive_time_id)
  50. self.next_relive_time_id = nil
  51. end
  52. if self.main_role_ghost_mode_id then
  53. RoleManager.Instance.mainRoleInfo:UnBind(self.main_role_ghost_mode_id)
  54. self.main_role_ghost_mode_id = nil
  55. end
  56. self:StopGuardianThreeTime()
  57. for k,v in pairs(self.item_list) do
  58. v:DeleteMe()
  59. end
  60. end
  61. function ReliveView:Open( )
  62. BaseView.Open(self)
  63. end
  64. function ReliveView:LoadSuccess()
  65. local nodes = {
  66. "reliveCon/Window:raw","reliveCon/contenText:tmp","reliveCon/cancelBtn/cancelBtnText:tmp","reliveCon/Window/windowCloseBtn:obj","reliveCon/contenText2:tmp"
  67. ,"reliveCon/confirmBtn/confirmBtnText:tmp","reliveCon/lb1:tmp","reliveCon/can_use_time:tmp"
  68. ,"reliveCon/cancelBtn:obj:img","reliveCon/confirmBtn:obj","reliveCon:obj","reliveCon/gold:img:obj","reliveCon/price:tmp:obj",
  69. "reliveCon/btnScroll/Viewport/btnCon", "reliveCon/btnScroll", "reliveCon/contenText3:tmp", "reliveCon/left_live_times:tmp",
  70. "back_bg",
  71. "reliveCon/title_img:img",
  72. }
  73. self:GetChildren(nodes)
  74. self:InitEvent()
  75. self.back_bg.transform.sizeDelta = Vector2(SrcScreenWidth * 1.2 , ScreenHeight * 1.2)
  76. lua_resM:setOutsideRawImage(self, self.Window_raw, GameResPath.GetViewBigBg("relive_view_bg_707_265"), false)
  77. --self.windowTitleText_tmp.text = "复活"
  78. if SceneManager.Instance:IsBabyScene() then -- 宝宝副本内修改描述
  79. lua_resM:setImageSprite(self, self.title_img_img, "relive_asset", "relive_img_4", true)
  80. end
  81. if SceneManager.Instance:IsGuardianThreeDun() then
  82. BaseDungeonModel:getInstance():Fire(BaseDungeonModel.REQUEST_CCMD_EVENT, 61031)
  83. self.is_guardian_three_view = true
  84. end
  85. local goods_num = GoodsModel:getInstance():GetTypeGoodsNum( 102000 )
  86. self.ticket_count = goods_num or 0
  87. if goods_num > 0 and not self.is_guardian_three_view and not SceneManager:getInstance():IsBossDesertedScene() and not SceneManager.Instance:IsBossHomeScene() then -- 复活券
  88. self.price_tmp.text = string.format('%s/%s', HtmlColorTxt( 1, ColorUtil.GREEN_DARK),goods_num)
  89. lua_resM:setImageSprite(self,self.gold_img,"uiComponent_asset", "ui_momey_icon_102000", true)
  90. SetLocalScale(self.gold, 0.35, 0.35, 0.3)
  91. else -- 彩钻
  92. self.price_tmp.text = self.relive_cost
  93. lua_resM:setImageSprite(self,self.gold_img,"uiComponent_asset", "ui_momey_icon_1", true)
  94. SetLocalScale(self.gold, 1, 1,10)
  95. end
  96. if SceneManager.Instance:IsWastelandScene() then -- 废土战场改为10秒复活
  97. self.delay_time = 11
  98. self.cancelBtn_img.gray = true
  99. SetTMPSharedMaterial(self.cancelBtnText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
  100. self.cancelBtnText_str = "免费复活"
  101. end
  102. self:ResetViewUIZDepth(self:GetCurrLayerDepth(self.layer_name))
  103. self:SetReliveInfo()
  104. self:UpdateLeftLiveTimes()
  105. end
  106. function ReliveView:UpdateLeftLiveTimes( )
  107. self.gold_obj:SetActive(true)
  108. self.price_obj:SetActive(true)
  109. if SceneManager.Instance:IsPetDungeon() then--宠物副本
  110. local dun_pet_left_live_times = BaseDungeonModel:GetInstance():GetDunPetReliveTimes()
  111. local color = dun_pet_left_live_times > 0 and "#2CF86F" or "#ff203a"
  112. SetAnchoredPosition(self.left_live_times,0,-70)
  113. self.left_live_times_tmp.text = string.format("剩余复活次数 <%s>%s</color>", color, dun_pet_left_live_times)
  114. elseif SceneManager.Instance:IsBossDesertedScene() then--混乱星域
  115. local left_deserted_boss_free_times = BossModel:GetInstance():GetLeftDesertedBossFreeReliveTimes()
  116. if left_deserted_boss_free_times > 0 then
  117. SetAnchoredPosition(self.left_live_times,201,-70)
  118. self.left_live_times_tmp.text = string.format("<color=#2CF86F>本次免费复活 剩余次数:%s</color>",left_deserted_boss_free_times)
  119. self.gold_obj:SetActive(false)
  120. self.price_obj:SetActive(false)
  121. else
  122. SetAnchoredPosition(self.left_live_times,0,-70)
  123. self.left_live_times_tmp.text = ""
  124. end
  125. else
  126. SetAnchoredPosition(self.left_live_times,0,-70)
  127. self.left_live_times_tmp.text = ""
  128. end
  129. end
  130. function ReliveView:InitEvent()
  131. local function onClickHandler(target)
  132. if self.confirmBtn_obj == target then--花钱原地复活
  133. if self.is_guardian_three_view then -- 绝地守卫
  134. if self.is_enough_cost then
  135. self:RequestGoldRelive()
  136. else
  137. Message.show("您当前彩钻不足,无法使用原地复活")
  138. end
  139. elseif SceneManager.Instance:IsBossDesertedScene() or SceneManager.Instance:IsBossHomeScene() then
  140. GlobalEventSystem:Fire(EventName.RELIVEBYTYPE,1)
  141. else
  142. if self.ticket_count and self.ticket_count > 0 then
  143. self:RequestTicketRelive()
  144. elseif GoodsModel:getInstance():IsJinEnough( self.relive_cost ) then
  145. self:RequestGoldRelive()
  146. else
  147. Message.show("您当前彩钻不足,无法使用原地复活")
  148. end
  149. end
  150. elseif self.cancelBtn_obj == target then
  151. if self.is_guardian_three_view then
  152. if self.is_guardian_three_cd then
  153. Message.show("安全区复活CD中")
  154. end
  155. else
  156. if self.safe_relive_is_cd == false then
  157. Message.show("安全区复活CD中")
  158. return
  159. end
  160. self:RequestFreeRelive()
  161. end
  162. elseif self.windowCloseBtn_obj == target then
  163. self:RequestFreeRelive()
  164. end
  165. end
  166. AddClickEvent(self.confirmBtn_obj,onClickHandler,1)
  167. AddClickEvent(self.cancelBtn_obj,onClickHandler,1)
  168. AddClickEvent(self.windowCloseBtn_obj,onClickHandler,1)
  169. -- local function onNextReliveTimeHandler()
  170. -- self:SetReliveInfo()
  171. -- end
  172. -- self.next_relive_time_id = self.sceneMgr:BindOne("next_relive_time", onNextReliveTimeHandler)
  173. -- local function onMainRoleGhostModeChangeHandler()
  174. -- self:SetReliveInfo()
  175. -- end
  176. -- self.main_role_ghost_mode_id = RoleManager.Instance.mainRoleInfo:BindOne("ghost_mode", onMainRoleGhostModeChangeHandler)
  177. -- self.be_kill_info_id = GlobalEventSystem:Bind(EventName.UPDATE_BE_KILL_INFO, onMainRoleGhostModeChangeHandler)
  178. local function update_guardian_three_info( ... )
  179. self:UpdateGuardianThreeReliveInfo()
  180. end
  181. self:BindEvent(DunManyModel:getInstance(), DunManyModel.UPDATE_GUARDIAN_THREE_RELIVE_INFO, update_guardian_three_info)
  182. end
  183. function ReliveView:SetReliveInfo()
  184. local desc_str = "您已被击败,是否立刻复活?"
  185. local confirmBtnText_str = "原地复活"
  186. local scene_mgr = SceneManager.Instance
  187. local beKillInfo = FightManager:getInstance():GetBeKillInfo()
  188. if beKillInfo and beKillInfo.be_kill_type then
  189. if beKillInfo.be_kill_type==1 then
  190. desc_str = string.format("您已被 <color=%s>%s(%d级)</color> 击败!", ColorUtil.GREEN_DARK, beKillInfo.name, beKillInfo.level)
  191. else
  192. desc_str = string.format("您已被 <color=%s>%s(%s)</color> 击败!", ColorUtil.GREEN_DARK, beKillInfo.name,
  193. WordManager:GetRoleLevel2(beKillInfo.level, beKillInfo.turn, true,true))
  194. end
  195. end
  196. if SceneManager.Instance:IsBabyScene() then -- 宝宝副本内修改描述
  197. self.cancelBtnText_str = "安全区痊愈"
  198. confirmBtnText_str = "原地痊愈"
  199. end
  200. self.cancelBtnText_tmp.text = self.cancelBtnText_str
  201. self.confirmBtnText_tmp.text = confirmBtnText_str
  202. self.contenText_tmp.text = desc_str
  203. if SceneManager.Instance:IsBossMoneyScene( ) then
  204. self.contenText2_tmp.text = string.format("(有损复活将会%s您已造成的累计伤害)", HtmlColorTxt( "损失20%" , '#fa1022'))
  205. self.confirmBtnText_tmp.text = "无损复活"
  206. self.cancelBtnText_tmp.text = "有损复活"
  207. else
  208. self.contenText2_tmp.text = ""
  209. end
  210. if self.is_guardian_three_view then
  211. self:UpdateGuardianThreeReliveInfo()
  212. else
  213. self:UpdateTime()
  214. self:NeedCdFunc()
  215. end
  216. self:UpdateStrengthenBtn( )
  217. end
  218. function ReliveView:NeedCdFunc( )--判断是否需要免费复活Cd
  219. --副本不需要再判断冷却cd了
  220. -- if SceneManager:getInstance():IsDungeonScene() then
  221. -- local dun_id = SceneManager:getInstance():GetCurrDunId()
  222. -- if Config.Dungeoncfg[dun_id] then
  223. -- -- self.cd_time = self.sceneMgr.next_relive_time - TimeUtil:getServerTime()--服务端发的下一次强制复活时间
  224. -- self.cd_time = Config.Dungeoncfg[dun_id].revive_time
  225. -- self:UpdateCd()
  226. -- end
  227. -- else
  228. -- -- self.cancelBtnText_shadow.enabled = true
  229. -- -- self.cancelBtn_img.gray = false
  230. -- self.can_use_time_tmp.text = ""
  231. -- end
  232. self.can_use_time_tmp.text = ""
  233. end
  234. function ReliveView:UpdateCd( )--更新冷却时间
  235. if not self.is_loaded then return end
  236. if self.cd_time > 0 then
  237. self.safe_relive_is_cd = false
  238. --self.cancelBtnText_shadow.enabled = false
  239. self.cancelBtn_img.gray = true
  240. SetTMPSharedMaterial(self.cancelBtnText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
  241. else
  242. self.can_use_time_tmp.text = ""
  243. return
  244. end
  245. local time = self.cd_time
  246. local function countDown()
  247. time = time - 1
  248. self.can_use_time_tmp.text = string.format("等待时间: <color=%s>%s</color> 秒",ColorUtil.GREEN_DARK,time)
  249. if time <= 0 then
  250. self.safe_relive_is_cd = true
  251. --self.cancelBtnText_shadow.enabled = true
  252. self.cancelBtn_img.gray = false
  253. SetTMPSharedMaterial(self.cancelBtnText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkBlueBtn)
  254. if self.cd_timer_id then
  255. GlobalTimerQuest:CancelQuest(self.cd_timer_id)
  256. self.cd_timer_id = nil
  257. end
  258. self.can_use_time_tmp.text = ""
  259. end
  260. end
  261. if not self.cd_timer_id then
  262. countDown()
  263. self.cd_timer_id = GlobalTimerQuest:AddPeriodQuest(countDown,1)
  264. end
  265. end
  266. function ReliveView:UpdateTime( )--更新倒计时
  267. if not self.is_loaded or self.delay_time <= 0 then return end
  268. local time = self.delay_time
  269. local function countDown()
  270. time = time - 1
  271. if SceneManager.Instance:IsEndlessScene() then--无尽领域复活提示
  272. self.lb1_tmp.text = string.format("<color=%s>%s</color> 秒后安全区复活<color=%s>(概率掉层)</color>",ColorUtil.GREEN_DARK,time,ColorUtil.RED_DARK)
  273. else
  274. self.lb1_tmp.text = string.format("<color=%s>%s</color> 秒后安全区复活",ColorUtil.GREEN_DARK,time)
  275. end
  276. -- if lua_settingM:GetAutoRebornSet() then --勾选了自动买活
  277. -- if time <= 10 then
  278. -- if GoodsModel:getInstance():IsJinEnough( self.relive_cost ) then
  279. -- self:RequestGoldRelive()
  280. -- if self.timer_id then
  281. -- GlobalTimerQuest:CancelQuest(self.timer_id)
  282. -- self.timer_id = nil
  283. -- end
  284. -- return
  285. -- end
  286. -- end
  287. -- end
  288. if time <= 0 then
  289. self:RequestFreeRelive(true)
  290. if self.timer_id then
  291. GlobalTimerQuest:CancelQuest(self.timer_id)
  292. self.timer_id = nil
  293. end
  294. end
  295. end
  296. if not self.timer_id then
  297. countDown()
  298. self.timer_id = GlobalTimerQuest:AddPeriodQuest(countDown,1)
  299. end
  300. end
  301. function ReliveView:RequestGoldRelive()--彩钻复活
  302. MainUIModel:getInstance():MinReliveTimes()--先加上
  303. if SceneManager.Instance:IsEndlessScene() then--无尽领域走自己的复活协议
  304. EndlessModel:getInstance():Fire(EndlessConst.REQ_ENDLESS_SCMD, 60008, 1)
  305. else
  306. GlobalEventSystem:Fire(EventName.RELIVEBYTYPE,1)
  307. end
  308. end
  309. function ReliveView:RequestTicketRelive()--复活券复活
  310. MainUIModel:getInstance():MinReliveTimes()--先加上
  311. -- if SceneManager.Instance:IsEndlessScene() then--无尽领域走自己的复活协议
  312. -- EndlessModel:getInstance():Fire(EndlessConst.REQ_ENDLESS_SCMD, 60008, 1)
  313. -- else
  314. GlobalEventSystem:Fire(EventName.RELIVEBYTYPE, 16)
  315. -- end
  316. end
  317. function ReliveView:RequestFreeRelive(is_force)--免费复活
  318. MainUIModel:getInstance():MinReliveTimes()--先加上
  319. --GlobalEventSystem:Fire(EventName.RELIVEBYTYPE,3)
  320. local temp = 3
  321. if SceneManager.Instance:IsDungeonScene() then
  322. temp = 9
  323. end
  324. if SceneManager.Instance:IsEndlessScene() then--无尽领域走自己的复活协议
  325. EndlessModel:getInstance():Fire(EndlessConst.REQ_ENDLESS_SCMD, 60008, 3)
  326. else
  327. GlobalEventSystem:Fire(EventName.RELIVEBYTYPE, temp, is_force)
  328. end
  329. end
  330. function ReliveView:UpdateGuardianThreeReliveInfo( )
  331. local cfg = Config.Dunguardrevive
  332. local data = DunManyModel:getInstance():GetGuardianThreeReliveInfo()
  333. if TableSize(data) > 0 then
  334. for i,v in ipairs(data.revive_list) do
  335. if v.type == 9 then
  336. self:UpdateGuardianThreeTime(v.next_time)
  337. elseif v.type == 1 then
  338. if cfg[v.revive_count] then
  339. self.price_tmp.text = cfg[v.revive_count].cost
  340. self.is_enough_cost = GoodsModel:getInstance():IsJinEnough(cfg[v.revive_count].cost)
  341. else
  342. self.price_tmp.text = cfg[TableSize(cfg)].cost
  343. self.is_enough_cost = GoodsModel:getInstance():IsJinEnough(cfg[#cfg].cost)
  344. end
  345. end
  346. end
  347. end
  348. end
  349. function ReliveView:UpdateGuardianThreeTime( time )--更新绝地守卫倒计时
  350. if not self.is_loaded then return end
  351. self:StopGuardianThreeTime()
  352. self.relive_time = time
  353. local function countDown()
  354. local left_time = self.relive_time - TimeUtil:getServerTime( )
  355. self.lb1_tmp.text = string.format("<color=%s>%s</color> 秒后安全区复活",ColorUtil.GREEN_DARK,left_time)
  356. if left_time <= 0 then
  357. self.is_guardian_three_cd = false
  358. self:StopGuardianThreeTime()
  359. self:Close()
  360. else
  361. self.is_guardian_three_cd = true
  362. end
  363. end
  364. if not self.timer_id2 then
  365. self.timer_id2 = GlobalTimerQuest:AddPeriodQuest(countDown,0.8)
  366. end
  367. end
  368. function ReliveView:StopGuardianThreeTime( )
  369. if self.timer_id2 then
  370. GlobalTimerQuest:CancelQuest(self.timer_id2)
  371. self.timer_id2 = nil
  372. end
  373. end
  374. --更新强化按钮
  375. function ReliveView:UpdateStrengthenBtn( )
  376. self:HideAllItem()
  377. local streng_cfg = StrengthModel:getInstance():GetStrongWayCfg()
  378. local data = streng_cfg or {}
  379. local show_max_btn = 4
  380. local show_count = 0
  381. for i = 1, show_max_btn do
  382. if data[i] then
  383. local cfg = OpenFun.LinkWin[data[i].module_id.."@"..data[i].sub_id]
  384. if cfg then
  385. self.item_list[i] = self.item_list[i] or ReliveStrengthenItem.New(self.btnCon)
  386. local item = self.item_list[i]
  387. local on_click = function ( )
  388. --self:Close()
  389. OpenFun.Open(data[i].module_id,data[i].sub_id)
  390. end
  391. item:SetData(cfg, on_click)
  392. item:SetVisible(true)
  393. show_count = show_count + 1
  394. else
  395. print("死亡强化配置不存在", data[i].module_id,data[i].sub_id)
  396. end
  397. end
  398. end
  399. if show_count > 0 then
  400. self.contenText3_tmp.text = "可以按照以下方式提升自己战斗力"
  401. if self.contenText2_tmp.text == "" then
  402. SetAnchoredPositionY(self.contenText3, 57)
  403. else
  404. SetAnchoredPositionY(self.contenText3, 41)
  405. end
  406. else
  407. self.contenText3_tmp.text = ""
  408. end
  409. end
  410. function ReliveView:HideAllItem( )
  411. for k,v in pairs(self.item_list) do
  412. v:SetVisible(false)
  413. end
  414. end
  415. function ReliveView:ResetViewUIZDepth(layer_count)
  416. UIDepth.SetUIDepth(self.gameObject,true, layer_count + 5)
  417. end