------------------------------------------------ --作者: 杨全福 --日期: 2019-04-15 --文件: MapLogicExSystem.lua --模块: MapLogicExSystem --描述: 地图逻辑类 ------------------------------------------------ local L_WaterParams = require "Logic.TaskSystem.Data.WaterWaveParam" --local ChatSystem = CS.Thousandto.Code.Center.GameCenter.ChatSystem --构造函数 local MapLogicExSystem = { MapId = 0, MapCfg = nil, --当前所在场景配置 ActiveLogicMoudle = nil, --当前的副本逻辑文件名 ActiveLogic = nil, --当前激活的逻辑 CacheMsg = List:New(), --缓存的消息 MainUIState = nil, --主界面分页状态 LeftUIState = nil, --左侧分页状态 CopyFormUIState = nil, --副本分页状态 } --进入场景处理 function MapLogicExSystem:OnEnterScene(mapId, isPlane) --进入场景时清除地图设置 GameCenter.MapLogicSwitch:Reset() GameCenter.GetNewItemSystem.PauseGetNewItemTips = false --查找地图配置 self.MapId = mapId self.MapCfg = DataConfig.DataMapsetting[mapId] --创建逻辑脚本 self:NewMapLogic() self.MainUIState = nil self.LeftUIState = nil self.CopyFormUIState = nil --设置当前地图是否可以支援 if self.MapCfg and self.MapCfg.IfWorldSupport == 1 then self.IsWorldSupport = true else self.IsWorldSupport = false end if self.ActiveLogic ~= nil then local _closeLoading = true if self.ActiveLogic.OnEnterScene ~= nil then --进入场景处理 if self.ActiveLogic:OnEnterScene(self) == false then _closeLoading = false end end if self.ActiveLogic.GetMainUIState ~= nil then self.MainUIState = self.ActiveLogic:GetMainUIState() end if self.MainUIState == nil then self.MainUIState = self:GetMainUIState() end if self.ActiveLogic.GetMainLeftUIState ~= nil then self.LeftUIState = self.ActiveLogic:GetMainLeftUIState() end if self.LeftUIState == nil then self.LeftUIState = self:GetMainLeftUIState() end --设置主界面开关状态 GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_MAIN_SUBPANELOPENSTATE) --设置左侧组队和任务界面状态 GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_MAINLEFTSUBPABNELOPENSTATE) if self.CopyFormUIState ~= nil then GameCenter.MapLogicSwitch:SetCopyFormUIState(self.CopyFormUIState) end --处理缓存的消息 if self.ActiveLogic.OnMsgHandle ~= nil then for i = 1, self.CacheMsg:Count() do self.ActiveLogic:OnMsgHandle(self.CacheMsg[i]) end end self.CacheMsg:Clear() self:OnSceneCinematicFinish(_closeLoading) if not isPlane then if self.MapCfg.PkState == 0 then --不能PK Utils.ShowPromptByEnum("C_ENTERMAPTIPS_SAFE") GameCenter.ChatSystem:AddChat(4, DataConfig.DataMessageString.Get("C_ENTERMAPTIPS_SAFE")) else --可以PK Utils.ShowPromptByEnum("C_ENTERMAPTIPS_WEIXIAN") GameCenter.ChatSystem:AddChat(4, DataConfig.DataMessageString.Get("C_ENTERMAPTIPS_WEIXIAN")) end end --设置屏幕水波纹 local _param = GameCenter.LuaTaskManager:GetWaterWaveParam() if _param == nil then _param = L_WaterParams:New() end if _param ~= nil then if GameCenter.GameSetting:IsEnabled(GameSettingKeyCode.EnablePostEffect) then if _param.DistanceFactor == 0 and _param.TimeFactor == 0 and _param.WaveWidth == 0 and _param.WaveSpeed == 0 then GameCenter.TaskController:ResumeForTransPort() else PostEffectManager.Instance:StopWaterWave() PostEffectManager.Instance:PlayWaterWave(_param.distanceFactor, _param.timeFactor, _param.totalFactor, _param.waveWidth, _param.waveSpeed, function() GameCenter.TaskController:ResumeForTransPort() end) end else GameCenter.TaskController:ResumeForTransPort() end end end end --离开场景处理 function MapLogicExSystem:OnLeaveScene(isPlane) -- if self.MapCfg ~= nil then -- Debug.Log("MapLogicExSystem:OnLeaveScene" .. self.MapCfg.MapId) -- end -- if self.MapCfg and self.MapCfg.IfNewguildCall == 1 then -- GameCenter.PushFixEvent(UIEventDefine.UICallSoulForm_CLOSE) -- end if not isPlane then if GameCenter.MapLogicSwitch.IsCopyMap then --copy GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_CLOSE_ALL_FORM, {"UIPanelCopyFailedForm", "UIHUDForm", "UIMainForm", "UIMainFormPC", "UIGuideForm", "UIReliveForm", "UIMsgPromptForm", "UIMsgMarqueeForm", "UILoadingForm", "UICinematicForm", "UIGetEquipTIps", "UIPowerSaveForm", "UIPropertyChangeForm" }) else --normal GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_CLOSE_ALL_FORM, {"UIPanelCopyFailedForm", "UIReliveForm", "UIHUDForm", "UIMainForm", "UIMainFormPC", "UIGuideForm", "UICopyTeamAskForm", "UICopyTeamPrepareForm", "UICrossMatchingForm", "UILoadingForm", "UIMsgPromptForm", "UIMsgMarqueeForm", "UICinematicForm", "UICopyMapResultExForm", "UIGetEquipTIps", "UIPowerSaveForm", "UIPropertyChangeForm" }) end end --切换地图关闭巅峰竞技匹配 local _msg = ReqMsg.MSG_Peak.ReqCancelPeakMatch:New() _msg:Send() if self.ActiveLogic ~= nil and self.ActiveLogic.OnLeaveScene ~= nil then --离开场景处理 self.ActiveLogic:OnLeaveScene() end self.ActiveLogic = nil if self.ActiveLogicMoudle ~= nil then --卸载脚本 Utils.RemoveRequiredByName(self.ActiveLogicMoudle) self.ActiveLogicMoudle = nil end self.MapId = 0 self.MapCfg = nil self.CacheMsg:Clear() self.MainUIState = nil self.LeftUIState = nil self.CopyFormUIState = nil --清空立即前往BOSS所在地system的配置表ID,以免其他系统误用 GameCenter.BossInfoTipsSystem.CustomCfgID = 0 GameCenter.LuaCharacterSystem:OnLeaveScene() end --更新 function MapLogicExSystem:Update(dt) if self.ActiveLogic ~= nil and self.ActiveLogic.Update ~= nil then self.ActiveLogic:Update(dt) end end --创建地图逻辑处理类 function MapLogicExSystem:NewMapLogic() if self.MapCfg.MapLogicType == MapLogicTypeDefine.WanYaoTa then self.ActiveLogicMoudle = "Logic.MapLogicEx.WanYaoTa.WanYaoTaLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.DaNengYiFu then self.ActiveLogicMoudle = "Logic.MapLogicEx.DaNengYiFu.DaNengYiFuLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.XianJieZhiMen then self.ActiveLogicMoudle = "Logic.MapLogicEx.XianJieZhiMen.XianJieZhiMenLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.PlaneCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.PlaneCopy.PlaneCopyLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.YZZDCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.YZZDCopy.YZZDMapLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.SZZQCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.SZZQLogic.SZZQMapLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.FuDiCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.FuDiCopy.FuDiLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.FuDiDuoBaoCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.FuDiCopy.FuDiDuoBaoLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.MySelfBossCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.MySelfBoss.MySelfBossLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.WorldBossCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.NewWorldBoss.NewWorldBossLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.SuitGemCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.NewWorldBoss.SuitGemBossLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.MarryQingYuanCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.MarryCopy.MarryQingYuanCopyLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.WuXianBossCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.NewWorldBoss.WuXianBossLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.ArenaShouXi then self.ActiveLogicMoudle = "Logic.MapLogicEx.ArenaShouXi.ArenaShouXiLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.LvDuPanelCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.PlaneCopy.LvDuPlaneCopyLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.SkyDoorCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.SkyDoor.SkyDoorMapLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.ExpCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.ExpCopy.ExpCopyLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.WuXingCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.ManyCopy.WuXingCopyMapLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.XinMoCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.ManyCopy.XinMoCopyMapLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.GuardianFaction then self.ActiveLogicMoudle = "Logic.MapLogicEx.GuardianFaction.GuardianFactionLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.MonsterLand then self.ActiveLogicMoudle = "Logic.MapLogicEx.HunShouShenLin.HunShouShenLinLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.RealmExpMap then self.ActiveLogicMoudle = "Logic.MapLogicEx.RealmExpMap.RealmExpMapLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.StatureBossCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.StatureBoss.StatureBossLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.ShanMen then self.ActiveLogicMoudle = "Logic.MapLogicEx.ShanMenMap.ShanMenMapLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.DuJieCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.DuJieCopy.DuJieCopyLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.CeShiCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.CeShiCopy.CeShiCopyLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.TerritorialWar then self.ActiveLogicMoudle = "Logic.MapLogicEx.TerritorialWar.TerritorialWarLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.MarryCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.MarryCopy.MarryCopyLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.BaJiZhenCopy then self.ActiveLogicMoudle = "Logic/MapLogicEx/BaJiZhen/BaJiZhenLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.WorldBonfire then self.ActiveLogicMoudle = "Logic/MapLogicEx/WorldBonfire/WorldBonfireLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.ChuanDaoCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.ChuanDaoCopy.ChuanDaoCopyLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.GuildTaskCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.GuildTaskCopy.GuildTaskCopyLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.XmFight then self.ActiveLogicMoudle = "Logic.MapLogicEx.XmFight.XmFightMapLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.XMBoss then self.ActiveLogicMoudle = "Logic.MapLogicEx.XMBoss.XMBossMapLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.WaoYaoJuanJieFeng then self.ActiveLogicMoudle = "Logic.MapLogicEx.WYJJieFeng.WYJJieFengLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.NewComCopy then --self.ActiveLogicMoudle = "Logic.MapLogicEx.NewWorldBoss.NewComLogic" --新手层替换成普通的Boss逻辑 self.ActiveLogicMoudle = "Logic.MapLogicEx.NewWorldBoss.NewWorldBossLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.ChangeJobCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.ChangeJobLogic.ChangeJocLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.SwordSoulCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.SwordSoulCopy.SwordSoulCopyLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.JZSLCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.JZSLCopy.JZSLCopyLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.FirstFight then self.ActiveLogicMoudle = "Logic.MapLogicEx.FirstFight.FirstFightLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.TopJjc then self.ActiveLogicMoudle = "Logic.MapLogicEx.TopJjc.TopJjcLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.CrossFuDi then self.ActiveLogicMoudle = "Logic.MapLogicEx.FuDiCopy.CrossFuDiLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.CrossMonutCopy then self.ActiveLogicMoudle = "Logic.MapLogicEx.CrossMount.CrossMountLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.OyLieKai then self.ActiveLogicMoudle = "Logic.MapLogicEx.FuDiCopy.OyLieKaiLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.SlayerMap then self.ActiveLogicMoudle = "Logic.MapLogicEx.SlayerMap.SlayerMapLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.XianFuHouse then self.ActiveLogicMoudle = "Logic.MapLogicEx.XianFu.XianFuHouseMapLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.TopJjcWait then self.ActiveLogicMoudle = "Logic.MapLogicEx.TopJjc.TopJjcWaitLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.ChangeJobBos1 then self.ActiveLogicMoudle = "Logic.MapLogicEx.PlaneCopy.ChangeJobBoss1CopyLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.LoversFightFight then self.ActiveLogicMoudle = "Logic.MapLogicEx.LoversFight.LoversFightFreelogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.LoversFightWait then self.ActiveLogicMoudle = "Logic.MapLogicEx.LoversFight.LoversFightWaitLogic" elseif self.MapCfg.MapLogicType == MapLogicTypeDefine.XuMiBaoKu then self.ActiveLogicMoudle = "Logic.MapLogicEx.XuMiBaoKu.XuMiBaoKuLogic" else self.ActiveLogicMoudle = "Logic.MapLogicEx.Normal.NormalMapLogic" end if self.ActiveLogicMoudle ~= nil then --注册副本逻辑脚本 self.ActiveLogic = require(self.ActiveLogicMoudle) end end --处理协议 function MapLogicExSystem:OnMsgHandle(msg) if self.ActiveLogic == nil then --还未进入场景,缓存消息 self.CacheMsg:Add(msg) else --已经进入场景,直接处理消息 if self.ActiveLogic.OnMsgHandle ~= nil then self.ActiveLogic:OnMsgHandle(msg) end end end --进入场景剧情播放完成 function MapLogicExSystem:OnSceneCinematicFinish(closeLoading) if closeLoading then --关闭loading GameCenter.LoadingSystem:Close() end --引导检测 GameCenter.GuideSystem:Check(GuideTriggerType.EnterMap, self.MapCfg.MapId) GameCenter.MainFunctionSystem:OnEnterScene() GameCenter.CopyMapSystem:OnEnterScene() GameCenter.DailyActivityTipsSystem:OnEnterScene(self.MapCfg) GameCenter.AuctionHouseSystem:OnEnterScene() GameCenter.CrossFuDiSystem:OnEnterScene() GameCenter.WorldSupportSystem:OnEnterScene() GameCenter.FuDiSystem:OnEnterScene() GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_ENTERMAP, self.MapCfg.MapId) GameCenter.LuaCharacterSystem:OnEnterScene() GameCenter.RankAwardSystem:OnEnterScene() GameCenter.DailyActivitySystem:OnEnterScene() if self.MapCfg.CanRiding == 0 then --当前地图不能骑马,下马 local _lp = GameCenter.GameSceneSystem:GetLocalPlayer() if _lp ~= nil then _lp:MountDown() end end end --发送离开地图消息 --askText为询问退出的内容,不传则默认 function MapLogicExSystem:SendLeaveMapMsg(needAsk, askText) if needAsk then if askText ~= nil then GameCenter.MsgPromptSystem:ShowMsgBox(askText, function(code) if code == MsgBoxResultCode.Button2 then self:DoLeaveMap() end end) else Utils.ShowMsgBox(function(code) if code == MsgBoxResultCode.Button2 then self:DoLeaveMap() end end, "C_COPY_EXIT_ASK") end else self:DoLeaveMap() end end --执行离开地图 function MapLogicExSystem:DoLeaveMap() GameCenter.Network.Send("MSG_copyMap.ReqCopyMapOut", {}) if GameCenter.MapLogicSystem.MapCfg.MapLogicType == MapLogicTypeDefine.WuXingCopy then GameCenter.BISystem:ReqClickEvent(BiIdCode.SLTLeaveChallengeing) elseif GameCenter.MapLogicSystem.MapCfg.MapLogicType == MapLogicTypeDefine.XinMoCopy then GameCenter.BISystem:ReqClickEvent(BiIdCode.XMHJLeaveChallengeing) end end --离开地图是否给出提示 function MapLogicExSystem:IsShowExitPrompt() if self.MapCfg ~= nil and self.MapCfg.IsLeave == 1 then --弹出提示 Utils.ShowPromptByEnum("C_PLEASE_LEAVE_CURCOPY") return true end return false end function MapLogicExSystem:GetMainUIState() return { [MainFormSubPanel.PlayerHead] = true, --主角头像 [MainFormSubPanel.TargetHead] = true, --目标头像 [MainFormSubPanel.TopMenu] = true, --顶部菜单 [MainFormSubPanel.MiniMap] = true, --小地图 [MainFormSubPanel.FlySwordGrave] = false, --境界 [MainFormSubPanel.TaskAndTeam] = true, --任务和组队 [MainFormSubPanel.Joystick] = true, --摇杆 [MainFormSubPanel.Exp] = true, --经验 [MainFormSubPanel.MiniChat] = true, --小聊天框 [MainFormSubPanel.Skill] = true, --技能 [MainFormSubPanel.SelectPkMode] = true, --选择PK模式 [MainFormSubPanel.FunctionFly] = true, --新功能开启飞行界面 [MainFormSubPanel.FastPrompt] = true, --快速提醒界面 [MainFormSubPanel.FastBts] = true, --快速操作按钮界面 [MainFormSubPanel.Ping] = true, --ping [MainFormSubPanel.SkillWarning] = false, --技能释放警示 [MainFormSubPanel.CustomBtn] = true, --自定义按钮 [MainFormSubPanel.SitDown] = true, --打坐 [MainFormSubPanel.RemotePlayerHead] = true, --远程玩家头像 [MainFormSubPanel.ChangeSkill] = true, --变身技能 } end function MapLogicExSystem:GetMainLeftUIState() return { [MainLeftSubPanel.Task] = true, --任务分页 [MainLeftSubPanel.Team] = true, --队伍分页 [MainLeftSubPanel.Other] = false, --其他分页 } end return MapLogicExSystem