require("game.guide.GuideModel") require("game.guide.GuideShowView") require("game.guide.GuidePromptView") require("game.guide.HelpType") require("game.guide.GuideMasktView") require("game.guide.GuideHorseUseView") require("game.guide.ReChargePreView") require("game.guide.GuideTaskLimitView") require("game.guide.GuideIntroduceView") require("game.guide.GuideSpiritView") require("game.guide.GuideSpiritItem") --新增 require("game.guide.GuideWelcomeView") require("game.guide.GuideStartView") GuideController = GuideController or BaseClass(BaseController) local GuideController = GuideController function GuideController:__init() GuideController.Instance = self self.model = GuideModel:getInstance() self.is_monster_create = false -- 是否怪物已经创建 self.sound_id = 0 self:RegisterProtocals() self:InitEvent() end function GuideController:RegisterProtocals() self:RegisterProtocal(10210, "on10210") --终身引导的事件列表 self:RegisterProtocal(10211, "on10211") --终身引导的事件状态变更 end function GuideController:on10210( ) local vo = SCMD10210.New(true) self.model:SetLifelongHelpList(vo.list) end function GuideController:on10211( ) local vo = SCMD10211.New(true) self.model:SetLifelongHelp(vo) end function GuideController:InitEvent() local function onReqLifelongHelp( id, state ) self:SendFmtToGame(10211, "hc", id, state) end GlobalEventSystem:Bind(GuideModel.REQ_LIFELONG_HELPER_CHANGE, onReqLifelongHelp) --游戏登陆加载配置 local function onGameStart() self.func_help_vo = false self.need_force_do_task = false self.model:ClearData() self.model:InitCookiesList() self.model:FinishOverHelp() GlobalEventSystem:Fire(EventName.IS_SHOW_TRUN_MASK_HELPER) --cookie加载完 刷新一下主界面 --检测自动做主线 self:StartCheckAutoDoTask() --获取终身引导的事件列表 self:SendFmtToGame(10210) end GlobalEventSystem:Bind(EventName.COOKIE_INIT_FINISH, onGameStart) --新手剧情 local function onWelcome(chapter_id) if ClientConfig.alpha_mode then return end if not self.story_view then self.story_view = GuideWelcomeView.New() end self.story_view:Open(chapter_id) end GlobalEventSystem:Bind(EventName.PLAY_ENTER_WELCOME_VIEW, onWelcome) --新手剧情 local function onGuideStart(chapter_id) if ClientConfig.alpha_mode then return end if not self.guide_start_view then self.guide_start_view = GuideStartView.New() end self.guide_start_view:Open(chapter_id) end GlobalEventSystem:Bind(EventName.PLAY_ENTER_GUIDE_START_VIEW, onGuideStart) local function onSceneLoadFiinish() --当前需要触发特殊引导 if self.need_retrigger_special_type and SceneManager:getInstance():IsMainCityorYieldSceneNotGuild() then local function on_delay( ) GlobalEventSystem:Fire(GuideModel.EXECUTE_LIFELONG_HELPER, self.need_retrigger_special_type) self.need_retrigger_special_type = false end setTimeout(on_delay, 0.5) end --执行cookie所有的引导 if not self.model.scene_init_finish then self.model.scene_init_finish = true setTimeout(function () self:TriggerAllHelper() end,0.3) end end GlobalEventSystem:Bind(EventName.SCENE_LOAD_VIEW_COMPLETE,onSceneLoadFiinish) -- 升级 local function onLevelUp(lv) -- self:TriggerHelper(GuideModel.LEVEL_TRIGGER_TYPE,lv) -- 触发升级引导 --特殊引导 if lv and lv == GuideModel.LIFELONG_MARKET_OPEN_TYPE_LEVEL then if self.model:NeedTriggerMarketOpenType() then self.need_retrigger_special_type = GuideModel.LIFELONG_TYPE.MARKET_OPEN end elseif lv and lv == GuideModel.LIFELONG_ELITE_ASSESS_TYPE_LEVEL then self.need_retrigger_special_type = GuideModel.LIFELONG_TYPE.ELITE_ASSESS end --当前是在大世界中,则直接触发 if self.need_retrigger_special_type and SceneManager:getInstance():IsMainCityorYieldSceneNotGuild() then local function on_delay( ) GlobalEventSystem:Fire(GuideModel.EXECUTE_LIFELONG_HELPER, self.need_retrigger_special_type) self.need_retrigger_special_type = false end setTimeout(on_delay, 0.5) end end RoleManager:getInstance().mainRoleInfo:Bind(EventName.CHANGE_LEVEL, onLevelUp) GlobalEventSystem:Bind(EventName.OFFLINE_LEVEL_UP, onLevelUp) --离线挂机,上线触发升级 local function onTaskFinishHandler(taskId) self:TriggerHelper(GuideModel.TASK_TRIGGER_TYPE,taskId) self:TriggerStory(taskId) end GlobalEventSystem:Bind(TaskEvent.ANS_FINISHED_TASK_LIST, onTaskFinishHandler) local function onTaskSuccessHandler(taskId) --支线完成引导 if taskId == 3150001 then local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.TYPE_EXTENSION_LINE_TASK_FINISH,1) if helpVo then GlobalEventSystem:Fire(EventName.FINISH_CURRENT_HELP_STEP,helpVo) end end end GlobalEventSystem:Bind(TaskEventType.TASK_SUCCESS, onTaskSuccessHandler) local function onFinsishCurrentStep(helpVo,ignore_prompt) self:FinishCurrentHelpStep(helpVo,ignore_prompt) end GlobalEventSystem:Bind(EventName.FINISH_CURRENT_HELP_STEP,onFinsishCurrentStep) local function onFinsishAllStep(helpVo) self.model:FinishAll(helpVo) end GlobalEventSystem:Bind(EventName.FINISH_ALL_HELP_STEP,onFinsishAllStep) --新手引导测试 local function onTestHelpStep(lv) -- self:TriggerHelper(GuideModel.LEVEL_TRIGGER_TYPE,lv) -- 触发升级引导 self:TriggerHelper(GuideModel.TASK_TRIGGER_TYPE,lv) end GlobalEventSystem:Bind(EventName.TEST_HELP_STEP,onTestHelpStep) local function onGuideIntroduceView (helpVo) if self.GuideIntroduceView == nil then self.GuideIntroduceView = GuideIntroduceView.New() end self.GuideIntroduceView:Open(helpVo) end GlobalEventSystem:Bind(EventName.OPEN_GUIDE_INTRODUCE_VIEW,onGuideIntroduceView) local function onGuideMasktView(ref_tar,prompt_type) if self.GuideMasktView == nil then self.GuideMasktView = GuideMasktView.New() end self.GuideMasktView:Open(ref_tar,prompt_type) end GlobalEventSystem:Bind(EventName.OPEN_FORCE_MASK_VIEW,onGuideMasktView) local function onOpenGuideTaskLimitView(show) if show then if self.GuideTaskLimitView == nil then self.GuideTaskLimitView = GuideTaskLimitView.New() end self.GuideTaskLimitView:Open() else if self.GuideTaskLimitView and self.GuideTaskLimitView:HasOpen() then self.GuideTaskLimitView:Close() end end end GlobalEventSystem:Bind(EventName.OPEN_GUIDE_TASK_LIMIT, onOpenGuideTaskLimitView) local function onGuideSpiritView() if self.GuideSpiritView == nil then self.GuideSpiritView = GuideSpiritView.New() end self.GuideSpiritView:Open() end GlobalEventSystem:Bind(EventName.OPEN_GUIDE_SPIRIT_VIEW,onGuideSpiritView) local function onGuideHorseUseView() if self.GuideHorseUseView == nil then self.GuideHorseUseView = GuideHorseUseView.New() end self.GuideHorseUseView:Open() end GlobalEventSystem:Bind(EventName.OPEN_HORSE_GUIDE_VIEW,onGuideHorseUseView) local function onGuidePromptView(attach_node,ui_attach_node,call_back,helpVo,view_layout_file,layer_name,z_depth) if self.GuidePromptView then self.GuidePromptView:Close() end if self.GuidePromptView == nil then self.GuidePromptView = GuidePromptView.New() end self.GuidePromptView:Open(attach_node,ui_attach_node,call_back,helpVo,view_layout_file,layer_name,z_depth) end GlobalEventSystem:Bind(EventName.OPEN_GUIDE_PROMPT_VIEW,onGuidePromptView) local function onCloseGuidePromptView(layout_file) if self.GuidePromptView then local view_layout_file = self.GuidePromptView.view_layout_file if layout_file == nil or layout_file == view_layout_file then self.GuidePromptView:Close() end end end GlobalEventSystem:Bind(EventName.CLOSE_GUIDE_PROMPT_VIEW,onCloseGuidePromptView) local function change_account() if self.GuidePromptView then self.GuidePromptView:Close() end end GlobalEventSystem:Bind(EventName.CHANGE_ACCOUNT,change_account) GlobalEventSystem:Bind(EventName.CHANGE_ROLE,change_account) local function onDirectExecuteGuide(helpVo) if helpVo then self:ExecuteHelps(helpVo) TaskModel:getInstance():SetTaskAutoFlag(true) end end self.model:Bind(GuideModel.DIRECT_EXECUTE_HELPER,onDirectExecuteGuide) end -- cfg_id 可能为等级 或者任务id function GuideController:TriggerHelper(type,cfg_id) -- if ClientConfig.alpha_mode then -- return -- end local voList if type == GuideModel.LEVEL_TRIGGER_TYPE then voList = self.model:GetLevelConfig(cfg_id) elseif type == GuideModel.TASK_TRIGGER_TYPE then voList = self.model:GetTaskConfig(cfg_id) end if voList == nil or #voList < 1 then return end -- print("tanar :GuideController [start:259] ================= ") -- PrintTable(voList) -- print("tanar :GuideController [end] ================= ") for i,vo in ipairs(voList) do if not self.model:HasExecuteStep(vo) then self:ExecuteHelps(vo) break end end end --执行所有cookie的引导 function GuideController:TriggerAllHelper( ) local lvList = self.model:GetLvCookieList() for k,v in pairs(lvList) do if not v.isEnd then local helpList = self.model:GetLevelConfig(v.lv) if helpList and helpList[v.step] and not self.model:IsOverHelp(v.help_type) then self:ExecuteHelps(helpList[v.step]) end end end local taskList = self.model:GetTaskCookieList() for k,v in pairs(taskList) do if not v.isEnd then local helpList = self.model:GetTaskConfig(v.task_id) if helpList and helpList[v.step] and not self.model:IsOverHelp(v.help_type) then self:ExecuteHelps(helpList[v.step]) end end end self.model:TriggerBreakGuide() self.model:TriggerBreakLevelGuide() end function GuideController:PlaySound(helpVo) lua_soundM:StopEffect(self, LuaSoundManager.SOUND_TYPE.GUIDE, self.sound_id) if helpVo.sound and Trim(helpVo.sound) ~= "" then self.sound_id = lua_soundM:PlayEffect(self, Trim(helpVo.sound), false, LuaSoundManager.SOUND_TYPE.GUIDE, 1) end end -- 执行引导 function GuideController:ExecuteHelps(helpVo) if helpVo == nil then return end --判断条件 if helpVo.step==1 then if helpVo.task_id==Config.ConfigHelper.firstRecharge then --如果首充了,就不引导 if not RechargeActivityModel:getInstance():IsNoFirstRecharge() or PlatformMgr:getInstance():IsMlLianyun() then self:FinishCurrentHelpStep(helpVo) GlobalEventSystem:Fire(EventName.START_AUTO_DO_TASK) return end elseif helpVo.task_id==Config.ConfigHelper.firstRechargeTip then if PlatformMgr:getInstance():IsMlLianyun() then self:FinishCurrentHelpStep(helpVo) GlobalEventSystem:Fire(EventName.START_AUTO_DO_TASK) return end end end --为防止多个新功能开放,必须先把之前的清除 if helpVo.help_type == HelpType.NEW_FUNC_OPEN then local last_helpVo = GuideModel:getInstance():GetHelpVo(HelpType.NEW_FUNC_OPEN,1) if last_helpVo then self.model:FinishCurrHelper(last_helpVo) end FuncOpenModel:getInstance():ClearOpenCondition() FuncOpenModel:getInstance():ClearOpenFuncData() if self.open_timer_id then GlobalTimerQuest:CancelQuest(self.open_timer_id) self.open_timer_id = nil end --这个单独处理 if not SceneManager.Instance:IsMainCityorYieldScene() then self.func_help_vo = helpVo return end GlobalEventSystem:Fire(EventName.OPEN_STRENGTH_VIEW, false) end self.model:SetCurTriggerType(helpVo.type) self.model:SetCurHelpType(helpVo.help_type) self.model:SetCurHelpStep(helpVo.step) self.model:SetCurHelpVo(helpVo) helpVo.isEnd = false --正在执行的 标记为false --写入cookies self.model:SetHelperStep(helpVo) if helpVo.hide_small_ui then self.model:SetHideSmallUI(true) ItemUseModel:getInstance():HideItemUseView() self.model:HideUILayUI() end if helpVo.help_type == HelpType.NEW_FUNC_OPEN then -- GlobalEventSystem:Fire(EventName.CLOSE_ALL_VIEW) -- GlobalEventSystem:Fire(EventName.CLOSE_CHAT_VIEW) -- GlobalEventSystem:Fire(EventName.OPEN_TASK_BOUNTY_REWARD_VIEW,nil,true) -- local onDelay = function( ) -- GlobalEventSystem:Fire(EventName.TRIGGER_NEW_FUNC_OPEN_HELPER,helpVo) -- self:ChangeSound(helpVo) -- end -- self.open_timer_id = setTimeout(onDelay, 0.3) GlobalEventSystem:Fire(EventName.STOP_AUTO_DO_TASK) GlobalEventSystem:Fire(EventName.TRIGGER_NEW_FUNC_OPEN_HELPER,helpVo) elseif helpVo.help_type == HelpType.TASK_ITEM_SHOW then -- if self.show_timer_id then -- GlobalTimerQuest:CancelQuest(self.show_timer_id) -- self.show_timer_id = nil -- end -- EventSystem.Fire(GlobalEventSystem, EventName.STOPAUTOFIGHT, false, true)--寻路要先切换掉自动挂机状态 -- GlobalEventSystem:Fire(EventName.STOP_AUTO_DO_TASK) -- GlobalEventSystem:Fire(EventName.CLOSE_ALL_VIEW) -- local onDelay = function( ) -- self:ShowModel(helpVo) -- self:ChangeSound(helpVo) -- end -- self.show_timer_id = setTimeout(onDelay, 0.1) GlobalEventSystem:Fire(EventName.GUIDE_CLOSE_VIEW) self:ShowModel(helpVo) elseif helpVo.help_type == HelpType.OPEN_UI_VIEW then self:OpenUI(helpVo) self:FinishCurrentHelpStep(helpVo) --收起菜单 setTimeout(function() GlobalEventSystem:Fire(EventName.OPEN_LEFT_MIDDLE_MENU, false) end,0.6) elseif helpVo.help_type == HelpType.ENTER_MISSION then self:EnterMission(helpVo) self:FinishCurrentHelpStep(helpVo) elseif helpVo.help_type == HelpType.CAST_SKILL then --播放技能 self:CastSkill(helpVo) elseif helpVo.help_type == HelpType.FORCE_MASK then --强制遮罩 elseif helpVo.help_type == HelpType.OPEN_LIST_SHOW_ICON then --展开列表图标显示特效 local onDelay = function ( ) self:ExpandIconList(helpVo) self:FinishCurrentHelpStep(helpVo) end setTimeout(onDelay, 0.3) GlobalEventSystem:Fire(EventName.START_AUTO_DO_TASK) elseif helpVo.help_type == HelpType.OPEN_LIST_SHOW_PROMPT then --展开列表图标显示指引 local onDelay = function ( ) if helpVo.task_id == Config.ConfigHelper.mountTask then --永恒碑谷没开启的话, 要升级后再判断一次 if not ActivityIconManager:getInstance():IsIconShow(21) then self.model.wait_level_up = helpVo return end end self:ShowIconListGuide(helpVo) end setTimeout(onDelay, 0.5) elseif helpVo.help_type == HelpType.DELAY_TIME then --延迟执行 param 为延迟的秒数 self:DelayTime(helpVo) elseif helpVo.help_type == HelpType.CONTINUM_TASK then --继续任务 self:ContinumTask(helpVo) elseif helpVo.help_type == HelpType.HIDE_SMALL_UI then --隐藏一些如道具使用的小界面 ItemUseModel:getInstance():HideItemUseView() self.model:HideUILayUI() self:FinishCurrentHelpStep(helpVo) elseif helpVo.help_type == HelpType.SHOW_SMALL_UI then --显示一些如道具使用的小界面 ItemUseModel:getInstance():ShowItemUseView() self.model:ShowUILayUI() self:FinishCurrentHelpStep(helpVo) elseif helpVo.help_type == HelpType.SHOW_CHAPTER then --章节引导 GlobalEventSystem:Fire(EventName.PLAY_ENTER_WELCOME_VIEW, helpVo.chapter_id) -- elseif helpVo.help_type == HelpType.PLAY_SOUND then --变身降神 -- if helpVo.sound and Trim(helpVo.sound) ~= "" then -- self:PlaySound(helpVo) -- end -- self:FinishCurrentHelpStep(helpVo) end --播放音效 if helpVo.sound and Trim(helpVo.sound) ~= "" then self:PlaySound(helpVo) end GlobalEventSystem:Fire(EventName.TRIGGER_GUIDE_TYPE, helpVo) end -- 打开UI function GuideController:OpenUI(helpVo) if helpVo then local param = helpVo.param local arr = stringtotable(param) if arr and arr[1] then local winId = tostring(arr[1][1]) local subId = tonumber(arr[1][2]) local value = tonumber(arr[1][3]) OpenFun.Open(winId, subId, value) end end end function GuideController:ShowModel(helpVo) -- if helpVo then -- local param = helpVo.param -- local arr = Split(param,",") -- if arr and #arr > 0 then -- GlobalEventSystem:Fire(EventName.OPEN_GUIDE_SHOW_VIEW,arr,helpVo.saying) -- end -- end local onDelay = function( ) -- self:CheckHideUILayer(helpVo) GlobalEventSystem:Fire(EventName.TRIGGER_NEW_FUNC_OPEN_HELPER,helpVo) self:ChangeSound(helpVo) end setTimeout(onDelay, 0.1) end function GuideController:EnterMission(helpVo) local mission_id = tonumber(helpVo.param) BaseDungeonModel:getInstance():Fire(BaseDungeonModel.REQUEST_CCMD_EVENT, 61001, mission_id) end function GuideController:ExpandIconList( helpVo ) if helpVo then local param = helpVo.param local arr = Split(param,",") if arr and #arr > 0 then GlobalEventSystem:Fire(EventName.EXPAND_LIST_SHOW,arr) end end end function GuideController:ShowIconListGuide( helpVo ) if helpVo then local param = helpVo.param local arr = Split(param,",") if arr and #arr > 0 then GlobalEventSystem:Fire(EventName.EXPAND_LIST_GUIDE,arr) end end end -- 结束当前引导 ignore_prompt 一般用于引导最后一步 结束不关闭 function GuideController:FinishCurrentHelpStep(helpVo,ignore_prompt) if helpVo == nil then return end --关掉界面 这些引导不关,避免把其他引导关了 if not ignore_prompt then GlobalEventSystem:Fire(EventName.CLOSE_GUIDE_PROMPT_VIEW) end local show_small_ui = false if helpVo.show_small_ui then show_small_ui = true end local next_help_vo = self.model:GetNextHelpVo(helpVo) if next_help_vo then self:ExecuteHelps(next_help_vo) else --如果只配置了一个引导,而且是隐藏UI,则需要显示出来 if helpVo.hide_small_ui then show_small_ui = true end self.model:FinishCurrHelper(helpVo) end if show_small_ui then self.model:SetHideSmallUI(false) ItemUseModel:getInstance():ShowItemUseView() self.model:ShowUILayUI() end end -- 场景切换清除数据跟特效 function GuideController:ClearHelpDataAndRes() end -- 释放技能 function GuideController:CastSkill(helpVo) --新手变身降神 不需要释放技能 local god_id = RoleManager.Instance.mainRoleInfo.god_id if god_id > 0 then self:FinishCurrentHelpStep(helpVo) return end local career = RoleManager:getInstance():GetMainRoleCareer() local arr = Split(helpVo.param,",") if arr and arr[career] then local career = RoleManager:getInstance():GetMainRoleCareer() local skill_id = tonumber(arr[career]) local movie_cfg = SkillManager.Instance:GetFightSkillMovie(skill_id) if movie_cfg and movie_cfg.back_swing then SkillManager:getInstance():setCurrentSkillId(skill_id) EventSystem.Fire(GlobalEventSystem,FightEvent.RELEASE_MAIN_SKILL,nil,nil,nil,SkillManager.SKILL_ATTACK_TYPE.ONLY_FIRE_ATTACK,true) local delay_fun = function () self:FinishCurrentHelpStep(helpVo) end setTimeout(delay_fun, movie_cfg.back_swing + 0.15) end end end function GuideController:ChangeSound( helpVo ) if helpVo.sound and Config.ConfigSound.SoundTime[Trim(helpVo.sound)] then local onDealy = function ( ) self.time_id = nil if self.old_value then LuaSoundManager:getInstance():ChangeVolume(self.old_value) end end if not self.time_id then self.old_value = soundMgr.volume LuaSoundManager:getInstance():ChangeVolume(self.old_value*0.2) self.time_id = setTimeout(onDealy, Config.ConfigSound.SoundTime[Trim(helpVo.sound)]) end end end --延迟执行 function GuideController:DelayTime(helpVo) local time = tonumber(helpVo.param) local delay_fun = function () self:FinishCurrentHelpStep(helpVo) end setTimeout(delay_fun, time) end --继续执行任务 function GuideController:ContinumTask(helpVo) self:FinishCurrentHelpStep(helpVo) EventSystem.Fire(GlobalEventSystem,EventName.FORCE_TO_DO_TASK) end --开始检测站街自动任务 function GuideController:StartCheckAutoDoTask() self:StopCheckAutoDoTask() if RoleManager.Instance.mainRoleInfo.level > GuideModel.AUTO_DOTASK.level then return end local function auto_onhook_check() local main_role = Scene.Instance:GetMainRole() if not Scene.Instance:GetMainRole() or not SceneManager:getInstance():IsMainCityAndFieldScene() then return end if RoleManager.Instance.mainRoleInfo.level > GuideModel.AUTO_DOTASK.level then self:StopCheckAutoDoTask() return end local stand_time = self.model.auto_task_stand_time ~= 0 and Time.time - self.model.auto_task_stand_time or 0 local touch_time = GlobalUserOperateTime ~= 0 and Time.time - GlobalUserOperateTime or 0 if stand_time > GuideModel.AUTO_DOTASK.time and touch_time > GuideModel.AUTO_DOTASK.time then GlobalEventSystem:Fire(EventName.FORCE_TO_DO_TASK) GlobalEventSystem:Fire(EventName.START_AUTO_DO_TASK) end end self.start_autotask_timer_id = GlobalTimerQuest:AddPeriodQuest(auto_onhook_check, 5, -1) end function GuideController:StopCheckAutoDoTask() if self.start_autotask_timer_id then GlobalTimerQuest:CancelQuest(self.start_autotask_timer_id) self.start_autotask_timer_id = false end end function GuideController:TriggerStory(task_id) if task_id == 10360 then if RoleManager.Instance.mainRoleInfo.career == 1 or RoleManager.Instance.mainRoleInfo.career == 2 then task_id = 1036001 else task_id = 1036002 end end local story_cfg = Config.Story[99999][task_id] if story_cfg then local main_role = Scene.Instance.main_role if story_cfg and main_role then main_role:DoStory(story_cfg) end end end