require("game.proto.462.Require462") require("game.bossHome.BossHomeConst") require("game.bossHome.BossHomeModel") require("game.bossHome.BossHomeSceneBossItem") require("game.bossHome.BossHomeSceneRankItem") require("game.bossHome.BossHomeSceneView") require("game.bossHome.BossHomeSubView") require("game.bossHome.BossHomeMainTabItem") require("game.bossHome.BossHomeTabItem") BossHomeController = BossHomeController or BaseClass(BaseController, true) local BossHomeController = BossHomeController function BossHomeController:__init() BossHomeController.Instance = self self.model = BossHomeModel:getInstance() self:AddEvents() self:RegisterAllProtocal() end function BossHomeController:AddEvents() --请求信息 i|32 h|16 c|8 l|64 s|字符串 local function onRequestHandler(...) local args_list = {...} if args_list[1] == 46201 then self:SendFmtToGame(args_list[1], "ccl", args_list[2], args_list[3], args_list[4]) elseif args_list[1] == 46202 then self:SendFmtToGame(args_list[1], "ci", args_list[2], args_list[3]) elseif args_list[1] == 46203 then self:SendFmtToGame(args_list[1]) elseif args_list[1] == 46204 then self:SendFmtToGame(args_list[1], "ci", args_list[2], args_list[3]) else self:SendFmtToGame(args_list[1]) end end self.model:Bind(BossHomeConst.REQUEST_CCMD_EVENT, onRequestHandler) local function req_basic_data(level) if GetModuleIsOpen(462) and (level == nil or GetModuleOpenLevel(462) == level ) then self.model:Fire(BossHomeConst.REQUEST_CCMD_EVENT, 46205) self.model:CheckBossHomeRedByType(BossConst.RedType.Login) end end GlobalEventSystem:Bind(EventName.GAME_START, req_basic_data) -- 跨天红点请求, 4点 local function chnage_day_func(type) if SettingModel.CHANGE_DAY.HOUR_4 == type then req_basic_data() end end GlobalEventSystem:Bind(EventName.CHANE_DAY, chnage_day_func) --升级 local function onLevelUp(level) req_basic_data(level) if GetModuleOpenLevel(462) == level then --首次开启幻魔之家时,给一个红点,点击界面后消失 self.model:CheckBossHomeRedByType(BossConst.RedType.ModuleOpen, true) -- self.model:SetBossHomeFirstRed(true) -- BossModel.Instance:Fire(BossModel.EVENT_UPDATE_RED_DOT) end end RoleManager.Instance.mainRoleInfo:Bind(EventName.CHANGE_LEVEL, onLevelUp) local function loadComplete() self:ChangeScene() --刷新所有墓碑 if SceneManager:getInstance():IsShowGraveScene() and self.scmd_boss_info then self.model:UpdateSceneGrave(self.scmd_boss_info) end self.scmd_boss_info = false local function delay_method( ) local need_find_boss_id = self.model:GetNeedFindBoss() if need_find_boss_id then local cfg = Config.Homeboss["1@"..need_find_boss_id] cfg = cfg or Config.Homeboss["2@"..need_find_boss_id] local pos = stringtotable(cfg.born_pos) local function call_back( ... ) GlobalEventSystem:Fire(EventName.STARTAUTOFIGHT) end local findVo = FindVo.New() findVo.sceneId = SceneManager.Instance:GetSceneId() findVo.type = FindVo.POINT findVo.x = pos[1]/ SceneObj.LogicRealRatio.x findVo.y = pos[2]/ SceneObj.LogicRealRatio.y findVo.call_back = call_back findVo.range = 3 GlobalEventSystem:Fire(EventName.FIND,findVo) self.model:SetNeedFindBoss(false) end end setTimeout(delay_method, 1.5) end GlobalEventSystem:Bind(EventName.SCENE_LOAD_VIEW_COMPLETE, loadComplete) end --切换场景 function BossHomeController:ChangeScene() local scene_mgr = SceneManager.Instance local last = scene_mgr.last_scene_id ------------------------- if scene_mgr:IsBossHomeScene(last) then -- 需要确确实实是从星域幻魔返回到大世界场景,才需要撤销相关信息栏的隐藏 if scene_mgr:IsMainCityAndFieldScene() then self:SetMainUIVisible(true) end self.model:SetCurFightBossId(nil)--重置boss_id end if self.bossHomesceneview and self.bossHomesceneview:HasOpen() then self.bossHomesceneview:Close() end ------------------------- if scene_mgr:IsBossHomeScene() then self:SetMainUIVisible(false) if not self.bossHomesceneview then self.bossHomesceneview = BossHomeSceneView.New() end if not self.bossHomesceneview:HasOpen() then self.bossHomesceneview:Open() end end end function BossHomeController:SetMainUIVisible( value ) self:Fire(EventName.HIDE_NEW_OPEN_VIEW, not value, MainUIModel.DESERTED_BOSS_MODE) self:Fire(EventName.CHANGE_PK_MODE, not value, MainUIModel.DESERTED_BOSS_MODE) self:Fire(EventName.HIDE_LEFT_MIDDLE_VIEW, not value, MainUIModel.DESERTED_BOSS_MODE) self:Fire(EventName.HIDE_TASK_TEAM_VIEW, not value, MainUIModel.DESERTED_BOSS_MODE) GlobalEventSystem:Fire(EventName.LEFT_VIPICON_VISIBLE, not value) GlobalEventSystem:Fire(EventName.CHANGE_RIGHT_TIP_ICON, not value,MainUIModel.DESERTED_BOSS_MODE) GlobalEventSystem:Fire(EventName.HIDE_LEFT_TOP_ACT_VIEW,not value,MainUIModel.DESERTED_BOSS_MODE) GlobalEventSystem:Fire(EventName.SHOW_MAIN_TASK_ANNOUNCE_ROOT, not value, MainUIModel.DESERTED_BOSS_MODE) end function BossHomeController:RegisterAllProtocal( ) local register_cfg = { [46201] = { -- 列表信息 handler = function(self, vo) self.scmd_boss_info = vo for k,v in pairs(vo.boss_info) do self.model:SetBossHomeInfo(v.boss_id,v.reborn_time,v.killer) end self.model:Fire(BossHomeConst.ANS_BOSS_HOME_INFO, vo.boss_type, vo.level, vo.guild) if SceneManager.Instance:IsShowGraveScene() then self.model:UpdateSceneGrave(vo) end end, }, [46202] = { -- 伤害排名信息 handler = function(self, vo) if self.delay_clear_desert_call then self.delay_clear_desert_call() end self.model:SetBossHomeRankInfo(vo) self.model:Fire(BossHomeConst.ANS_BOSS_HOME_RANK_INFO) end, }, [46203] = { -- 脱战通知 handler = function(self, vo) if self.delay_clear_desert then GlobalTimerQuest:CancelQuest(self.delay_clear_desert) self.delay_clear_desert = nil end self.delay_clear_desert_call = false ------------------------- local function clear_call( ) self.model:CleanBossHomeRankInfoById(vo.boss_id) self.model:SetCurFightBossId(nil)--重置boss_id self.model:Fire(BossHomeConst.OUT_OF_BOSS_HOME_LIST, vo.boss_id, true) end local cur_data = self.model:GetBossHomeRankInfo(vo.boss_id) if cur_data and cur_data.boss_hp == 0 then --击杀boss后数据保留5s self.delay_clear_desert_call = function( ) clear_call() ------------------------- if self.delay_clear_desert then GlobalTimerQuest:CancelQuest(self.delay_clear_desert) self.delay_clear_desert = nil end self.delay_clear_desert_call = false ------------------------- end self.delay_clear_desert = setTimeout(self.delay_clear_desert_call,5) else clear_call() end end, }, [46204] = { -- boss进场 handler = function(self, vo) if vo.res == 1 then GlobalEventSystem:Fire(EventName.PLAY_UI_EFFECT_SOUND,LuaSoundManager.SOUND_UI.SUCCESS) Message.show("进入场景中") if vo.boss_type == 1 then elseif vo.boss_type == 2 then end else ErrorCodeShow(vo.res) end end, }, [46205] = { -- 社团之家信息 handler = function(self, vo) self.model:SetBossHomeGuildExclusiveData(vo) self.model:Fire(BossHomeConst.UPDATE_GUILD_EXCLUSIVE_DATA) end, }, [46206] = { -- 社团之家后端通知10s后踢人 handler = function(self, vo) if SceneManager:getInstance():IsBossHomeScene() then local special_tip_data = { type = SpecialTipType.Timer1, sepeical_str = "您所在社团已丧失领地归属,%s秒后您将离开领地", show_time = 10, } CommonController.Instance:Fire(EventName.OPEN_SPECIALTIPVIEW, special_tip_data) end end, }, } self:RegisterProtocalByCFG(register_cfg) end