public void OnLoadSceneOver() { mIsLoadSceneOver = true; while (mLoadSceneOverActions.Count > 0) { var act = mLoadSceneOverActions.Dequeue(); try { act(true); } catch (Exception) { // do nothing. } } if (null != GameLogic.Instance && null != GameLogic.Instance.Scene) { var table = Table.GetScene(GameLogic.Instance.Scene.SceneTypeId); if (null != table) { var fuben = Table.GetFuben(table.FubenId); if (null != fuben) { if (-1 != fuben.BeforeStoryId) { PlayCG.PlayById(fuben.BeforeStoryId); } } } } if (isInMieshiFuben()) { var e1 = new Show_UI_Event(UIConfig.MieShiTapUI); EventDispatcher.Instance.DispatchEvent(e1); } var logic = GameLogic.Instance; if (logic != null) { var scene = logic.Scene; if (scene != null) { var tbScene = Table.GetScene(scene.SceneTypeId); if (tbScene != null && tbScene.FubenId == -1) // 不是副本 { PlayerDataManager.Instance.PlayerDataModel.DungeonState = (int)eDungeonState.Start; } } } }
private void ExcuteDungeonLogicOpration(bool isReconnectDungeon = false) { if (lastLogicId == LogicId) { return; } var tbFubenLogic = Table.GetFubenLogic(LogicId); if (tbFubenLogic == null) { return; } lastLogicId = LogicId; for (int i = 0, imax = tbFubenLogic.AdvanceOpTYpe.Length; i < imax; ++i) { var opType = (eFubenPhaseOpType)tbFubenLogic.AdvanceOpTYpe[i]; if (opType == eFubenPhaseOpType.None) { break; } var param1 = tbFubenLogic.AdvanceParam1[i]; switch (opType) { case eFubenPhaseOpType.PlayAnimation: { if (isReconnectDungeon) { //下线后回来的第一次 break; } PlayCG.PlayById(param1, CallBackPlayCgOver); } break; case eFubenPhaseOpType.PlayBgMusic: { if (isReconnectDungeon) { //下线后回来的第一次 SoundManager.Instance.StopBGM(0); SoundManager.Instance.PlayBGMusic(param1, 0, 3, false); } else { SoundManager.Instance.PlayBGMusic(param1, 3, 3, false); } Logger.Info("-----------------eFubenPhaseOpType.PlayBgMusic:id = {0}-------------------", param1); } break; } } }
public void OnLoadSceneOver(int formersceneid) { bool needAutoFinght = true; mIsLoadSceneOver = true; while (mLoadSceneOverActions.Count > 0) { var act = mLoadSceneOverActions.Dequeue(); try { act(true); } catch (Exception) { // do nothing. } } if (null != GameLogic.Instance && null != GameLogic.Instance.Scene) { var table = Table.GetScene(GameLogic.Instance.Scene.SceneTypeId); if (null != table && table.FubenId >= 0) { var fuben = Table.GetFuben(table.FubenId); if (null != fuben) { if (-1 != fuben.BeforeStoryId) { PlayCG.PlayById(fuben.BeforeStoryId); needAutoFinght = false; } } } } if (PlayCG.Instance.IsPlayCG) { needAutoFinght = false; } PlayerDataManager.Instance.CheckShowSkill(); if (isInMieshiFuben()) { var e1 = new Show_UI_Event(UIConfig.MieShiTapUI); EventDispatcher.Instance.DispatchEvent(e1); needAutoFinght = false; } var logic = GameLogic.Instance; if (logic != null) { var scene = logic.Scene; if (scene != null) { var tbScene = Table.GetScene(scene.SceneTypeId); if (tbScene != null && tbScene.FubenId == -1) // 不是副本 { PlayerDataManager.Instance.PlayerDataModel.DungeonState = (int)eDungeonState.Start; } if (!PlayCG.Instance.IsPlayCG) { var player = ObjManager.Instance.MyPlayer; if (null == player) { Logger.Debug("null==player"); return; } var tbFormerScene = Table.GetScene(formersceneid); if (null == tbFormerScene) { return; } if (null != tbFormerScene && EnterSceneCounter > 1)//第一次进入游戏不需要播放传送特效 { var tbFormerFuben = Table.GetFuben(tbFormerScene.FubenId); var tbNowFuben = Table.GetFuben(tbScene.FubenId); if (null == tbFormerFuben)//从场景切 { if (null == tbNowFuben) {//切场景播 var tableData = Table.GetEffect(2002); if (tableData != null) { EffectManager.Instance.CreateEffect(tableData, player, null, null, null, (tableData.BroadcastType == 0 && player.GetObjType() == OBJ.TYPE.MYPLAYER) || tableData.BroadcastType == 1); } } else if (tbNowFuben.AssistType != (int)eDungeonAssistType.PhaseDungeon) {//进非相位副本播 var tableData = Table.GetEffect(2002); if (tableData != null) { EffectManager.Instance.CreateEffect(tableData, player, null, null, null, (tableData.BroadcastType == 0 && player.GetObjType() == OBJ.TYPE.MYPLAYER) || tableData.BroadcastType == 1); } } } else {//从副本切 if (tbFormerFuben.AssistType != (int)eDungeonAssistType.PhaseDungeon) { var tableData = Table.GetEffect(2002); if (tableData != null) { EffectManager.Instance.CreateEffect(tableData, player, null, null, null, (tableData.BroadcastType == 0 && player.GetObjType() == OBJ.TYPE.MYPLAYER) || tableData.BroadcastType == 1); } } } } } if (!needAutoFinght) { return; } if (tbScene != null && tbScene.FubenId != -1) { var tbFuben = Table.GetFuben(tbScene.FubenId); if (null == tbFuben) { return; } if (-1 != tbFuben.FarmLogic) { ObjManager.Instance.MyPlayer.EnterAutoCombat(); } } } } }
//当任务完成时 private void OnCommitMission(int id, List <int> newMissionList = null) { var npcId = NpcId; //任务场景特效 GameLogic.Instance.SceneEffect.OnCommitMission(id); //关闭任务窗口 //EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); //尝试触发新功能系统 if (null != newMissionList) { { var __list5 = newMissionList; var __listCount5 = __list5.Count; for (var __i5 = 0; __i5 < __listCount5; ++__i5) { var missionId = __list5[__i5]; { if (GameLogic.Instance.GuideTrigger.OnMissionBecomeAcceptable(missionId)) { EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); return; } } } } } //比方特效 //EffectManager.Instance.CreateEffect(11, ObjManager.Instance.MyPlayer.gameObject); { //潜规则 if (id == 6 && 0 == PlayerDataManager.Instance.GetRoleId()) { if (0 == PlayerDataManager.Instance.GetCurrentEquipSkillCount()) { //关闭任务窗口 EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); EventDispatcher.Instance.DispatchEvent(new Show_UI_Event(UIConfig.MainUI)); var e = new SkillEquipMainUiAnime(4, 0); EventDispatcher.Instance.DispatchEvent(e); return; } } else if (id == 6 && 1 == PlayerDataManager.Instance.GetRoleId()) { if (0 == PlayerDataManager.Instance.GetCurrentEquipSkillCount()) { //关闭任务窗口 EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); EventDispatcher.Instance.DispatchEvent(new Show_UI_Event(UIConfig.MainUI)); var e = new SkillEquipMainUiAnime(104, 0); EventDispatcher.Instance.DispatchEvent(e); return; } } else if (id == 6 && 2 == PlayerDataManager.Instance.GetRoleId()) { if (0 == PlayerDataManager.Instance.GetCurrentEquipSkillCount()) { //关闭任务窗口 EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); EventDispatcher.Instance.DispatchEvent(new Show_UI_Event(UIConfig.MainUI)); var e = new SkillEquipMainUiAnime(204, 0); EventDispatcher.Instance.DispatchEvent(e); return; } } else if (id == 107) { if (2 == PlayerDataManager.Instance.GetCurrentEquipSkillCount()) { if (0 == PlayerDataManager.Instance.GetRoleId()) { //关闭任务窗口 EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); EventDispatcher.Instance.DispatchEvent(new Show_UI_Event(UIConfig.MainUI)); var e = new SkillEquipMainUiAnime(6, 2); EventDispatcher.Instance.DispatchEvent(e); return; } else if (1 == PlayerDataManager.Instance.GetRoleId()) { //关闭任务窗口 EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); EventDispatcher.Instance.DispatchEvent(new Show_UI_Event(UIConfig.MainUI)); var e = new SkillEquipMainUiAnime(106, 2); EventDispatcher.Instance.DispatchEvent(e); return; } else if (2 == PlayerDataManager.Instance.GetRoleId()) { //关闭任务窗口 EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); EventDispatcher.Instance.DispatchEvent(new Show_UI_Event(UIConfig.MainUI)); var e = new SkillEquipMainUiAnime(207, 2); EventDispatcher.Instance.DispatchEvent(e); return; } } } else if (id == 411) { //关闭任务窗口 //EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); //EventDispatcher.Instance.DispatchEvent(new Show_UI_Event(UIConfig.CharacterUI)); //return; } } //每日任务就不接了着了 var table = Table.GetMissionBase(id); if (null == table) { //关闭任务窗口 EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); return; } if (eMissionMainType.Daily == (eMissionMainType)table.ViewType || eMissionMainType.Circle == (eMissionMainType)table.ViewType) { //关闭任务窗口 EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); return; } //有限播放剧情 var roleId = PlayerDataManager.Instance.GetRoleId(); if (roleId >= 0 && roleId < table.StoryId.Length) { var storyId = table.StoryId[roleId]; if (storyId != -1) { //关闭任务窗口 EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); PlayCG.PlayById(storyId, () => { NextMissionAction(table.NextMission, npcId); }); return; } } //弹出完成提示 if (-1 != table.UIGuideId) { ShowMissionUI(id); //关闭任务窗口 EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); return; } //没有剧情就打开下一个任务 if (-1 == NextMissionAction(table.NextMission, npcId, 0.5f)) { //关闭任务窗口 EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); } }
//当接受任务时 private void OnAcceptMission(int id) { var tableData = Table.GetMissionBase(id); if (null == tableData) { return; } if (eMissionType.Dungeon == (eMissionType)tableData.FinishCondition) { ChangedSceneByMission(tableData.FinishParam[0], id); EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); return; } var npcId = NpcId; //场景特效 GameLogic.Instance.SceneEffect.OnAcceptMission(id); //播放接受任务特效 //EffectManager.Instance.CreateEffect(10, ObjManager.Instance.MyPlayer.gameObject); //尝试触发新功能系统 if (GameLogic.Instance.GuideTrigger.OnMissionAccept(id)) { EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); return; } //是否需要显示对话框 //播放剧情 var callBack = new Action(() => { if (eMissionType.AcceptStroy == (eMissionType)tableData.FinishCondition) { // 播放剧情 var roleId = PlayerDataManager.Instance.GetRoleId(); var idx = -1; if (roleId >= 0 && roleId < tableData.FinishParam.Count) { idx = tableData.FinishParam[roleId]; } if (-1 == idx) { idx = tableData.FinishParam[0]; } if (-1 != idx) { //关闭UI EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); var call = new Action(() => { NextMissionAction(id, NpcId); }); var willDestroy = true; //120任务硬编码 if (120 == id) { call = () => { ChangedSceneByMission(5, 120); }; willDestroy = false; } PlayCG.PlayById(idx, call, willDestroy); } else { EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); } } else { { //如果是支线任务,并且不是从NPC那里接受的,就不继续做什么 var type = (eMissionMainType)tableData.ViewType; if (eMissionMainType.SubStoryLine == type) { if (-1 == tableData.NpcStart) { EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); return; } } } if (-1 == NextMissionAction(id, npcId, 0.5f)) { //关闭UI EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); } } }); //显示任务剧情对话 if (-1 != tableData.TalkId) { //关闭UI EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); StartDialog(tableData.TalkId, callBack); return; } //判断剧情播放 callBack(); }
//根据任务状态去往任务所需地点 public void GoToMissionPlace(int id) { MissionBaseModel data = null; if (!MissionData.Datas.TryGetValue(id, out data)) { return; } GameControl.Executer.Stop(); var table = Table.GetMissionBase(id); if (null == table) { Logger.Error("GoToMissionPlace({0}) null == table", id); return; } var type = (eMissionMainType)table.ViewType; var state = (eMissionState)data.Exdata[0]; if (eMissionState.Acceptable == state) { if (-1 == table.NpcStart) { var arg = new MissionListArguments(); arg.Tab = 2; arg.MissionId = id; EventDispatcher.Instance.DispatchEvent(new Show_UI_Event(UIConfig.MissionList, arg)); //GameLogic.Instance.StartCoroutine(ShowMissionById(2,id)); return; } ObjManager.Instance.MyPlayer.LeaveAutoCombat(); var e = new MapSceneDrawPath(new Vector3(table.PosX, 0, table.PosY), 1.0f); EventDispatcher.Instance.DispatchEvent(e); var command = GameControl.GoToCommand(table.NpcScene, table.PosX, table.PosY, 1.0f); GameControl.Executer.PushCommand(command); var command1 = new FuncCommand(() => { Instance.OpenMissionById(id, table.NpcStart); }); GameControl.Executer.PushCommand(command1); } else if (eMissionState.Finished == state) { //如果是日常任务就直接弹界面 if (eMissionMainType.Daily == type || eMissionMainType.Circle == type) { var arg = new MissionListArguments(); arg.Tab = 3; arg.MissionId = id; EventDispatcher.Instance.DispatchEvent(new Show_UI_Event(UIConfig.MissionList, arg)); //GameLogic.Instance.StartCoroutine(ShowMissionById(3,id)); return; } if (eMissionMainType.SubStoryLine == type && -1 == table.FinishNpcId) { var arg = new MissionListArguments(); arg.Tab = 2; arg.MissionId = id; EventDispatcher.Instance.DispatchEvent(new Show_UI_Event(UIConfig.MissionList, arg)); return; } ObjManager.Instance.MyPlayer.LeaveAutoCombat(); var e = new MapSceneDrawPath(new Vector3(table.FinishPosX, 0, table.FinishPosY), 1.0f); EventDispatcher.Instance.DispatchEvent(e); var command = GameControl.GoToCommand(table.FinishSceneId, table.FinishPosX, table.FinishPosY, 1.0f); GameControl.Executer.PushCommand(command); var command1 = new FuncCommand(() => { Instance.OpenMissionById(id, table.FinishNpcId); }); GameControl.Executer.PushCommand(command1); } else if (eMissionState.Unfinished == state) { if (eMissionMainType.Circle == type) { //记录一下当前正在做的环任务 CurrentDoingCircleMission = id; } else { CurrentDoingCircleMission = -1; } EventDispatcher.Instance.DispatchEvent(new UIEvent_DoMissionGoTo()); if (0 == table.TrackType) { //到地图某一地方 ObjManager.Instance.MyPlayer.LeaveAutoCombat(); var e = new MapSceneDrawPath(new Vector3(table.TrackParam[1], 0, table.TrackParam[2]), 1.0f); EventDispatcher.Instance.DispatchEvent(e); var command = GameControl.GoToCommand(table.TrackParam[0], table.TrackParam[1], table.TrackParam[2]); GameControl.Executer.ExeCommand(command); } else if (1 == table.TrackType) { //直接开某个界面 if (13 == table.TrackParam[0]) { var arg = new MissionListArguments(); arg.IsFromMisson = true; arg.Tab = table.TrackParam[1]; var e = new Show_UI_Event(UIConfig.MissionList, arg); EventDispatcher.Instance.DispatchEvent(e); } else { GameUtils.GotoUiTab(table.TrackParam[0], table.TrackParam[1], table.TrackParam[2]); } return; } switch ((eMissionType)table.FinishCondition) { case eMissionType.KillMonster: case eMissionType.CheckItem: { //计算下和该任务完成地点相同的其他任务 var missionList = new List <int>(); missionList.Add(id); { // foreach(var tempData in MissionData.Datas) var __enumerator3 = (MissionData.Datas).GetEnumerator(); while (__enumerator3.MoveNext()) { var tempData = __enumerator3.Current; { var missionData = tempData.Value; if (missionData.MissionId == id) { continue; } //正在做的任务 if (eMissionState.Unfinished != (eMissionState)missionData.Exdata[0]) { continue; } //只检查杀怪和获得物品的任务 var tableTemp = Table.GetMissionBase(missionData.MissionId); var typeTemp = (eMissionType)tableTemp.FinishCondition; if (eMissionType.KillMonster != typeTemp && eMissionType.CheckItem != typeTemp) { continue; } //检查任务完成地点 if (tableTemp.TrackParam[0] != table.TrackParam[0] || tableTemp.TrackParam[1] != table.TrackParam[1] || tableTemp.TrackParam[2] != table.TrackParam[2]) { continue; } missionList.Add(missionData.MissionId); } } } var command1 = new FuncCommand(() => { GameControl.Instance.TargetObj = null; ObjManager.Instance.MyPlayer.EnterAutoCombat(missionList); }); GameControl.Executer.PushCommand(command1); } break; case eMissionType.AcceptProgressBar: case eMissionType.AreaProgressBar: { var command1 = new FuncCommand(() => { if (OBJ.CHARACTER_STATE.IDLE != ObjManager.Instance.MyPlayer.GetCurrentStateName()) { return; } var dicId = table.FinishParam[1]; var e = new ShowMissionProgressEvent(GameUtils.GetDictionaryText(dicId)); EventDispatcher.Instance.DispatchEvent(e); Logger.Info("FuncCommand CallBackFun.......................1"); Action endCallback = () => { ObjManager.Instance.MyPlayer.PlayAnimation(OBJ.CHARACTER_ANI.STAND); CompleteMission(id); if (-1 != table.FinishParam[2]) { GameLogic.Instance.SceneEffect.StopEffect(table.FinishParam[2]); } var e1 = new HideMissionProgressEvent(id); EventDispatcher.Instance.DispatchEvent(e1); }; Action interruptCallback = () => { if (-1 != table.FinishParam[2]) { GameLogic.Instance.SceneEffect.StopEffect(table.FinishParam[2]); } var e1 = new HideMissionProgressEvent(id); EventDispatcher.Instance.DispatchEvent(e1); }; GameLogic.Instance.StopCoroutine("LaunchAction"); var animationId = -1; if (!int.TryParse(table.PlayCollectionAct, out animationId)) { Logger.Error("int.TryParse(table.PlayCollectionAct) failed [{0}]", table.Id); } if (-1 == animationId) { animationId = 11; } GameLogic.Instance.StartCoroutine(GameUtils.LaunchAction(animationId, table.FinishParam[0], endCallback, interruptCallback)); if (-1 != table.FinishParam[2]) { GameLogic.Instance.SceneEffect.PlayEffect(table.FinishParam[2]); } }); GameControl.Executer.PushCommand(command1); } break; case eMissionType.EquipItem: case eMissionType.EnhanceEquip: { } break; case eMissionType.AreaStroy: { //播放剧情 if (-1 != CurrentMissionTableData.FinishParam[0]) { var storyId = CurrentMissionTableData.FinishParam[0]; Action endCallback = () => { CompleteMission(id); }; PlayCG.PlayById(storyId, endCallback); } } break; case eMissionType.BuyItem: case eMissionType.DepotTakeOut: { var command1 = new FuncCommand(() => { OpenMissionByNpcId(table.FinishParam[2]); }); GameControl.Executer.PushCommand(command1); } break; case eMissionType.Dungeon: { var sceneId = table.FinishParam[0]; var currentSceneId = GameLogic.Instance.Scene.SceneTypeId; if (sceneId != currentSceneId) { UIManager.Instance.ShowMessage(MessageBoxType.OkCancel, GameUtils.GetDictionaryText(220507), GameUtils.GetDictionaryText(1503), () => { ChangedSceneByMission(sceneId, id); }); } else { var player = ObjManager.Instance.MyPlayer; if (null != player) { player.EnterAutoCombat(); } } } break; default: { EventDispatcher.Instance.DispatchEvent(new ShowUIHintBoard(210118)); } break; } } EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionList)); }