--新复活界面(把以前的全部删除) --20004 --1元宝复活 --2绑定元宝复活 --3回城复活 --4根据参数staus复活 --5原地满血复活 --6客户端请求变成幽灵 --7暂无 --8挂机自动复活 --9通用副本复活 ReliveView = ReliveView or BaseClass(BaseView) local ReliveView = ReliveView local SceneManager = SceneManager function ReliveView:__init() self.base_file = "relive" self.layout_file = "ReliveView" self.layer_name = "Main" self.destroy_imm = true self.use_background = false self.change_scene_close = true self.cost = 0 self.is_set_zdepth = true self.delay_time = 15 self.is_guardian_three_cd = false self.cancelBtnText_str = "安全区复活" self.sceneMgr = SceneManager:getInstance() self.relive_cost = 20 --默认复活20彩钻 self.is_first_open = true self.is_set_zdepth = true self.item_list = {} self.load_callback = function () self:LoadSuccess() end self.close_callback = function () self:Remove() end end function ReliveView:Remove() if self.cd_timer_id then GlobalTimerQuest:CancelQuest(self.cd_timer_id) self.cd_timer_id = nil end if self.timer_id then GlobalTimerQuest:CancelQuest(self.timer_id) self.timer_id = nil end if self.next_relive_time_id then self.sceneMgr:UnBind(self.next_relive_time_id) self.next_relive_time_id = nil end if self.main_role_ghost_mode_id then RoleManager.Instance.mainRoleInfo:UnBind(self.main_role_ghost_mode_id) self.main_role_ghost_mode_id = nil end self:StopGuardianThreeTime() for k,v in pairs(self.item_list) do v:DeleteMe() end end function ReliveView:Open( ) BaseView.Open(self) end function ReliveView:LoadSuccess() local nodes = { "reliveCon/Window:raw","reliveCon/contenText:tmp","reliveCon/cancelBtn/cancelBtnText:tmp","reliveCon/Window/windowCloseBtn:obj","reliveCon/contenText2:tmp" ,"reliveCon/confirmBtn/confirmBtnText:tmp","reliveCon/lb1:tmp","reliveCon/can_use_time:tmp" ,"reliveCon/cancelBtn:obj:img","reliveCon/confirmBtn:obj","reliveCon:obj","reliveCon/gold:img:obj","reliveCon/price:tmp:obj", "reliveCon/btnScroll/Viewport/btnCon", "reliveCon/btnScroll", "reliveCon/contenText3:tmp", "reliveCon/left_live_times:tmp", "back_bg", "reliveCon/title_img:img", } self:GetChildren(nodes) self:InitEvent() self.back_bg.transform.sizeDelta = Vector2(SrcScreenWidth * 1.2 , ScreenHeight * 1.2) lua_resM:setOutsideRawImage(self, self.Window_raw, GameResPath.GetViewBigBg("relive_view_bg_707_265"), false) --self.windowTitleText_tmp.text = "复活" if SceneManager.Instance:IsBabyScene() then -- 宝宝副本内修改描述 lua_resM:setImageSprite(self, self.title_img_img, "relive_asset", "relive_img_4", true) end if SceneManager.Instance:IsGuardianThreeDun() then BaseDungeonModel:getInstance():Fire(BaseDungeonModel.REQUEST_CCMD_EVENT, 61031) self.is_guardian_three_view = true end local goods_num = GoodsModel:getInstance():GetTypeGoodsNum( 102000 ) self.ticket_count = goods_num or 0 if goods_num > 0 and not self.is_guardian_three_view and not SceneManager:getInstance():IsBossDesertedScene() and not SceneManager.Instance:IsBossHomeScene() then -- 复活券 self.price_tmp.text = string.format('%s/%s', HtmlColorTxt( 1, ColorUtil.GREEN_DARK),goods_num) lua_resM:setImageSprite(self,self.gold_img,"uiComponent_asset", "ui_momey_icon_102000", true) SetLocalScale(self.gold, 0.35, 0.35, 0.3) else -- 彩钻 self.price_tmp.text = self.relive_cost lua_resM:setImageSprite(self,self.gold_img,"uiComponent_asset", "ui_momey_icon_1", true) SetLocalScale(self.gold, 1, 1,10) end if SceneManager.Instance:IsWastelandScene() then -- 废土战场改为10秒复活 self.delay_time = 11 self.cancelBtn_img.gray = true SetTMPSharedMaterial(self.cancelBtnText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn) self.cancelBtnText_str = "免费复活" end self:ResetViewUIZDepth(self:GetCurrLayerDepth(self.layer_name)) self:SetReliveInfo() self:UpdateLeftLiveTimes() end function ReliveView:UpdateLeftLiveTimes( ) self.gold_obj:SetActive(true) self.price_obj:SetActive(true) if SceneManager.Instance:IsPetDungeon() then--宠物副本 local dun_pet_left_live_times = BaseDungeonModel:GetInstance():GetDunPetReliveTimes() local color = dun_pet_left_live_times > 0 and "#2CF86F" or "#ff203a" SetAnchoredPosition(self.left_live_times,0,-70) self.left_live_times_tmp.text = string.format("剩余复活次数 <%s>%s", color, dun_pet_left_live_times) elseif SceneManager.Instance:IsBossDesertedScene() then--混乱星域 local left_deserted_boss_free_times = BossModel:GetInstance():GetLeftDesertedBossFreeReliveTimes() if left_deserted_boss_free_times > 0 then SetAnchoredPosition(self.left_live_times,201,-70) self.left_live_times_tmp.text = string.format("本次免费复活 剩余次数:%s",left_deserted_boss_free_times) self.gold_obj:SetActive(false) self.price_obj:SetActive(false) else SetAnchoredPosition(self.left_live_times,0,-70) self.left_live_times_tmp.text = "" end else SetAnchoredPosition(self.left_live_times,0,-70) self.left_live_times_tmp.text = "" end end function ReliveView:InitEvent() local function onClickHandler(target) if self.confirmBtn_obj == target then--花钱原地复活 if self.is_guardian_three_view then -- 绝地守卫 if self.is_enough_cost then self:RequestGoldRelive() else Message.show("您当前彩钻不足,无法使用原地复活") end elseif SceneManager.Instance:IsBossDesertedScene() or SceneManager.Instance:IsBossHomeScene() then GlobalEventSystem:Fire(EventName.RELIVEBYTYPE,1) else if self.ticket_count and self.ticket_count > 0 then self:RequestTicketRelive() elseif GoodsModel:getInstance():IsJinEnough( self.relive_cost ) then self:RequestGoldRelive() else Message.show("您当前彩钻不足,无法使用原地复活") end end elseif self.cancelBtn_obj == target then if self.is_guardian_three_view then if self.is_guardian_three_cd then Message.show("安全区复活CD中") end else if self.safe_relive_is_cd == false then Message.show("安全区复活CD中") return end self:RequestFreeRelive() end elseif self.windowCloseBtn_obj == target then self:RequestFreeRelive() end end AddClickEvent(self.confirmBtn_obj,onClickHandler,1) AddClickEvent(self.cancelBtn_obj,onClickHandler,1) AddClickEvent(self.windowCloseBtn_obj,onClickHandler,1) -- local function onNextReliveTimeHandler() -- self:SetReliveInfo() -- end -- self.next_relive_time_id = self.sceneMgr:BindOne("next_relive_time", onNextReliveTimeHandler) -- local function onMainRoleGhostModeChangeHandler() -- self:SetReliveInfo() -- end -- self.main_role_ghost_mode_id = RoleManager.Instance.mainRoleInfo:BindOne("ghost_mode", onMainRoleGhostModeChangeHandler) -- self.be_kill_info_id = GlobalEventSystem:Bind(EventName.UPDATE_BE_KILL_INFO, onMainRoleGhostModeChangeHandler) local function update_guardian_three_info( ... ) self:UpdateGuardianThreeReliveInfo() end self:BindEvent(DunManyModel:getInstance(), DunManyModel.UPDATE_GUARDIAN_THREE_RELIVE_INFO, update_guardian_three_info) end function ReliveView:SetReliveInfo() local desc_str = "您已被击败,是否立刻复活?" local confirmBtnText_str = "原地复活" local scene_mgr = SceneManager.Instance local beKillInfo = FightManager:getInstance():GetBeKillInfo() if beKillInfo and beKillInfo.be_kill_type then if beKillInfo.be_kill_type==1 then desc_str = string.format("您已被 %s(%d级) 击败!", ColorUtil.GREEN_DARK, beKillInfo.name, beKillInfo.level) else desc_str = string.format("您已被 %s(%s) 击败!", ColorUtil.GREEN_DARK, beKillInfo.name, WordManager:GetRoleLevel2(beKillInfo.level, beKillInfo.turn, true,true)) end end if SceneManager.Instance:IsBabyScene() then -- 宝宝副本内修改描述 self.cancelBtnText_str = "安全区痊愈" confirmBtnText_str = "原地痊愈" end self.cancelBtnText_tmp.text = self.cancelBtnText_str self.confirmBtnText_tmp.text = confirmBtnText_str self.contenText_tmp.text = desc_str if SceneManager.Instance:IsBossMoneyScene( ) then self.contenText2_tmp.text = string.format("(有损复活将会%s您已造成的累计伤害)", HtmlColorTxt( "损失20%" , '#fa1022')) self.confirmBtnText_tmp.text = "无损复活" self.cancelBtnText_tmp.text = "有损复活" else self.contenText2_tmp.text = "" end if self.is_guardian_three_view then self:UpdateGuardianThreeReliveInfo() else self:UpdateTime() self:NeedCdFunc() end self:UpdateStrengthenBtn( ) end function ReliveView:NeedCdFunc( )--判断是否需要免费复活Cd --副本不需要再判断冷却cd了 -- if SceneManager:getInstance():IsDungeonScene() then -- local dun_id = SceneManager:getInstance():GetCurrDunId() -- if Config.Dungeoncfg[dun_id] then -- -- self.cd_time = self.sceneMgr.next_relive_time - TimeUtil:getServerTime()--服务端发的下一次强制复活时间 -- self.cd_time = Config.Dungeoncfg[dun_id].revive_time -- self:UpdateCd() -- end -- else -- -- self.cancelBtnText_shadow.enabled = true -- -- self.cancelBtn_img.gray = false -- self.can_use_time_tmp.text = "" -- end self.can_use_time_tmp.text = "" end function ReliveView:UpdateCd( )--更新冷却时间 if not self.is_loaded then return end if self.cd_time > 0 then self.safe_relive_is_cd = false --self.cancelBtnText_shadow.enabled = false self.cancelBtn_img.gray = true SetTMPSharedMaterial(self.cancelBtnText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn) else self.can_use_time_tmp.text = "" return end local time = self.cd_time local function countDown() time = time - 1 self.can_use_time_tmp.text = string.format("等待时间: %s 秒",ColorUtil.GREEN_DARK,time) if time <= 0 then self.safe_relive_is_cd = true --self.cancelBtnText_shadow.enabled = true self.cancelBtn_img.gray = false SetTMPSharedMaterial(self.cancelBtnText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkBlueBtn) if self.cd_timer_id then GlobalTimerQuest:CancelQuest(self.cd_timer_id) self.cd_timer_id = nil end self.can_use_time_tmp.text = "" end end if not self.cd_timer_id then countDown() self.cd_timer_id = GlobalTimerQuest:AddPeriodQuest(countDown,1) end end function ReliveView:UpdateTime( )--更新倒计时 if not self.is_loaded or self.delay_time <= 0 then return end local time = self.delay_time local function countDown() time = time - 1 if SceneManager.Instance:IsEndlessScene() then--无尽领域复活提示 self.lb1_tmp.text = string.format("%s 秒后安全区复活(概率掉层)",ColorUtil.GREEN_DARK,time,ColorUtil.RED_DARK) else self.lb1_tmp.text = string.format("%s 秒后安全区复活",ColorUtil.GREEN_DARK,time) end -- if lua_settingM:GetAutoRebornSet() then --勾选了自动买活 -- if time <= 10 then -- if GoodsModel:getInstance():IsJinEnough( self.relive_cost ) then -- self:RequestGoldRelive() -- if self.timer_id then -- GlobalTimerQuest:CancelQuest(self.timer_id) -- self.timer_id = nil -- end -- return -- end -- end -- end if time <= 0 then self:RequestFreeRelive(true) if self.timer_id then GlobalTimerQuest:CancelQuest(self.timer_id) self.timer_id = nil end end end if not self.timer_id then countDown() self.timer_id = GlobalTimerQuest:AddPeriodQuest(countDown,1) end end function ReliveView:RequestGoldRelive()--彩钻复活 MainUIModel:getInstance():MinReliveTimes()--先加上 if SceneManager.Instance:IsEndlessScene() then--无尽领域走自己的复活协议 EndlessModel:getInstance():Fire(EndlessConst.REQ_ENDLESS_SCMD, 60008, 1) else GlobalEventSystem:Fire(EventName.RELIVEBYTYPE,1) end end function ReliveView:RequestTicketRelive()--复活券复活 MainUIModel:getInstance():MinReliveTimes()--先加上 -- if SceneManager.Instance:IsEndlessScene() then--无尽领域走自己的复活协议 -- EndlessModel:getInstance():Fire(EndlessConst.REQ_ENDLESS_SCMD, 60008, 1) -- else GlobalEventSystem:Fire(EventName.RELIVEBYTYPE, 16) -- end end function ReliveView:RequestFreeRelive(is_force)--免费复活 MainUIModel:getInstance():MinReliveTimes()--先加上 --GlobalEventSystem:Fire(EventName.RELIVEBYTYPE,3) local temp = 3 if SceneManager.Instance:IsDungeonScene() then temp = 9 end if SceneManager.Instance:IsEndlessScene() then--无尽领域走自己的复活协议 EndlessModel:getInstance():Fire(EndlessConst.REQ_ENDLESS_SCMD, 60008, 3) else GlobalEventSystem:Fire(EventName.RELIVEBYTYPE, temp, is_force) end end function ReliveView:UpdateGuardianThreeReliveInfo( ) local cfg = Config.Dunguardrevive local data = DunManyModel:getInstance():GetGuardianThreeReliveInfo() if TableSize(data) > 0 then for i,v in ipairs(data.revive_list) do if v.type == 9 then self:UpdateGuardianThreeTime(v.next_time) elseif v.type == 1 then if cfg[v.revive_count] then self.price_tmp.text = cfg[v.revive_count].cost self.is_enough_cost = GoodsModel:getInstance():IsJinEnough(cfg[v.revive_count].cost) else self.price_tmp.text = cfg[TableSize(cfg)].cost self.is_enough_cost = GoodsModel:getInstance():IsJinEnough(cfg[#cfg].cost) end end end end end function ReliveView:UpdateGuardianThreeTime( time )--更新绝地守卫倒计时 if not self.is_loaded then return end self:StopGuardianThreeTime() self.relive_time = time local function countDown() local left_time = self.relive_time - TimeUtil:getServerTime( ) self.lb1_tmp.text = string.format("%s 秒后安全区复活",ColorUtil.GREEN_DARK,left_time) if left_time <= 0 then self.is_guardian_three_cd = false self:StopGuardianThreeTime() self:Close() else self.is_guardian_three_cd = true end end if not self.timer_id2 then self.timer_id2 = GlobalTimerQuest:AddPeriodQuest(countDown,0.8) end end function ReliveView:StopGuardianThreeTime( ) if self.timer_id2 then GlobalTimerQuest:CancelQuest(self.timer_id2) self.timer_id2 = nil end end --更新强化按钮 function ReliveView:UpdateStrengthenBtn( ) self:HideAllItem() local streng_cfg = StrengthModel:getInstance():GetStrongWayCfg() local data = streng_cfg or {} local show_max_btn = 4 local show_count = 0 for i = 1, show_max_btn do if data[i] then local cfg = OpenFun.LinkWin[data[i].module_id.."@"..data[i].sub_id] if cfg then self.item_list[i] = self.item_list[i] or ReliveStrengthenItem.New(self.btnCon) local item = self.item_list[i] local on_click = function ( ) --self:Close() OpenFun.Open(data[i].module_id,data[i].sub_id) end item:SetData(cfg, on_click) item:SetVisible(true) show_count = show_count + 1 else print("死亡强化配置不存在", data[i].module_id,data[i].sub_id) end end end if show_count > 0 then self.contenText3_tmp.text = "可以按照以下方式提升自己战斗力" if self.contenText2_tmp.text == "" then SetAnchoredPositionY(self.contenText3, 57) else SetAnchoredPositionY(self.contenText3, 41) end else self.contenText3_tmp.text = "" end end function ReliveView:HideAllItem( ) for k,v in pairs(self.item_list) do v:SetVisible(false) end end function ReliveView:ResetViewUIZDepth(layer_count) UIDepth.SetUIDepth(self.gameObject,true, layer_count + 5) end