//打开NPC对话 public bool OpenMissionNpcDialog(int npcId, ulong objId = TypeDefine.INVALID_ULONG) { NpcId = npcId; NpcObjId = objId; CurrentMissionData = null; CurrentMissionTableData = null; var tableCharacter = Table.GetCharacterBase(npcId); if (null != tableCharacter) { var tableNpc = Table.GetNpcBase(tableCharacter.ExdataId); if (null != tableNpc) { for (var i = 0; i < tableNpc.pop.Length; i++) { if (!string.IsNullOrEmpty(tableNpc.pop[i])) { //打开任务的时候关闭引导 EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.NewbieGuide)); EventDispatcher.Instance.DispatchEvent(new UIEvent_UpdateCurrentMission(-1)); UIManager.Instance.ShowUI(UIConfig.MissionFrame); return(true); } } } } return(false); }
//打开当前任务 public bool OpenMissionById(int Id, int npcId = -1, ulong objId = TypeDefine.INVALID_ULONG) { var tableData = Table.GetMissionBase(Id); if (null == tableData) { return(false); } MissionBaseModel data = null; if (!MissionData.Datas.TryGetValue(Id, out data)) { Logger.Fatal("Don't have this mission[" + Id + "]"); return(false); } NpcId = npcId; NpcObjId = objId; CurrentMissionData = data; CurrentMissionTableData = Table.GetMissionBase(Id); //打开任务的时候关闭引导 EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.NewbieGuide)); EventDispatcher.Instance.DispatchEvent(new UIEvent_UpdateCurrentMission(-1)); //if (!UIConfig.MissionFrame.Visible()) { UIManager.Instance.ShowUI(UIConfig.MissionFrame); } return(true); }
private static int MissionCompare(MissionBaseModel a, MissionBaseModel b) { //return a.MissionId < b.MissionId ? 1 : -1; int x = GetWeight(b); int y = GetWeight(a); return(GetWeight(b) - GetWeight(a)); }
//获得任务数据 public MissionBaseModel GetMissionById(int missionId) { MissionBaseModel data = null; if (MissionData.Datas.TryGetValue(missionId, out data)) { } return(data); }
//判断这个npc身上是否有关联任务 public eMissionState GetMissionState(int id) { MissionBaseModel data = null; if (!MissionData.Datas.TryGetValue(id, out data)) { return(eMissionState.Unfinished); } return((eMissionState)data.Exdata[0]); }
private MissionListItemSimpleDataModel CreateMissionDataModel(MissionBaseModel mis, MissionListItemSimpleDataModel data = null) { //任务id和数据 var missionId = mis.MissionId; var missionData = mis; //查表 var tableData = Table.GetMissionBase(missionId); if (null == tableData) { return(null); } //new个数据源 if (null == data) { data = new MissionListItemSimpleDataModel(); } //任务数据 data.MissionId = tableData.Id; data.MissionName = tableData.Name; data.State = missionData.Exdata[0]; data.Type = tableData.ViewType; //data.MissionDesc = tableData.TrackDescription + MissionManager.MissionContent(tableData, missionData.Exdata); var state = (eMissionState)data.State; ////跟据任务状态设置按钮文字 if (eMissionState.Unfinished == state) { //data.BtnName = Table.GetDictionary(Resource.Dictrionary.GoToMission).Desc[1]; data.BtnName = GameUtils.GetDictionaryText(522); } else if (eMissionState.Finished == state) { //data.BtnName = Table.GetDictionary(Resource.Dictrionary.ClaimReward).Desc[1]; data.BtnName = GameUtils.GetDictionaryText(523); } else if (eMissionState.Acceptable == state) { //data.BtnName = Table.GetDictionary(Resource.Dictrionary.ClaimReward).Desc[1]; data.BtnName = GameUtils.GetDictionaryText(524); } return(data); }
private IEnumerator AcceptMissionCoroutine(int id) { using (new BlockingLayerHelper(0)) { var msg = NetManager.Instance.AcceptMission(id); yield return(msg.SendAndWaitUntilDone()); if (msg.State != MessageState.Reply) { Logger.Debug("AcceptMissionCoroutine:MessageState.Timeout"); yield break; } if (msg.ErrorCode != (int)ErrorCodes.OK) { UIManager.Instance.ShowNetError(msg.ErrorCode); if ((int)ErrorCodes.Error_AcceptMission == msg.ErrorCode) { EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); PlayerDataManager.Instance.ApplyMissions(-1); Logger.Debug("AcceptMissionCoroutine:ErrorCodes.Error_AcceptMission == msg.ErrorCode"); } yield break; } //更新任务数据 MissionData.Datas.Remove(msg.Response.MissionId); var missionBaseModel = new MissionBaseModel { MissionId = msg.Response.MissionId }; for (var i = 0; i != 5; ++i) { missionBaseModel.Exdata[i] = msg.Response.Exdata[i]; } MissionData.Datas.Add(msg.Response.MissionId, missionBaseModel); EventDispatcher.Instance.DispatchEvent(new Event_UpdateMissionData()); Logger.Debug("Accept mission[{0}]", msg.Response.MissionId); PlatformHelper.UMEvent("Mission", "Accept", id); } OnAcceptMission(id); }
public static int MissionCompare(MissionBaseModel a, MissionBaseModel b) { var v1 = a.MissionId; var v2 = b.MissionId; var s1 = a.Exdata[0]; var s2 = b.Exdata[0]; if (eMissionState.Finished == (eMissionState)s1) { v1 += 100000; } else if (eMissionState.Unfinished == (eMissionState)s1) { v1 += 1000000; } else if (eMissionState.Acceptable == (eMissionState)s1) { v1 += 10000000; } if (eMissionState.Finished == (eMissionState)s2) { v2 += 100000; } else if (eMissionState.Unfinished == (eMissionState)s2) { v2 += 1000000; } else if (eMissionState.Acceptable == (eMissionState)s2) { v2 += 10000000; } if (v1 > v2) { return(1); } if (v1 < v2) { return(-1); } return(a.MissionId - b.MissionId); }
private static int GetWeight(MissionBaseModel a) { int ret = 0; try { int stat = a.Exdata[0]; //状态 switch (stat) { case (int)eMissionState.Finished: stat = 5; break; case (int)eMissionState.Unfinished: stat = 3; break; case (int)eMissionState.Acceptable: stat = 1; break; default: stat = 0; break; } var missionid = PlayerDataManager.Instance.GetExData(713); if (a.MissionId == missionid) { ret = 100 * 1000 * 1000;//mainui任务列表支线任务显示追踪任务 } int priority = Table.GetMissionBase(a.MissionId).MissionPriority; priority = priority > 0 ? priority : 0; ret += stat * 1000 * 1000 + priority * 10 * 1000 * 1000 + a.MissionId; //a.Exdata[4] = ret; } catch { ret = a.MissionId; } return(ret); }
public void SyncMissions(MissionDataMessage missions) { var data = MissionManager.Instance.MissionData.Datas; var listCompletedMission = new List <int>(); var listAcceptableMission = new List <int>(); { // foreach(var pair in missions.Missions) var __enumerator1 = (missions.Missions).GetEnumerator(); while (__enumerator1.MoveNext()) { var pair = __enumerator1.Current; { var newMission = pair.Value; MissionBaseModel mission = null; if (!data.TryGetValue(newMission.MissionId, out mission)) { mission = new MissionBaseModel { MissionId = newMission.MissionId }; data.Add(newMission.MissionId, mission); } if (eMissionState.Finished != (eMissionState)mission.Exdata[0] && eMissionState.Finished == (eMissionState)newMission.Exdata[0]) { listCompletedMission.Add(mission.MissionId); } else if (eMissionState.Acceptable == (eMissionState)newMission.Exdata[0]) { listAcceptableMission.Add(mission.MissionId); } for (var i = 0; i != 5; ++i) { mission.Exdata[i] = newMission.Exdata[i]; } EventDispatcher.Instance.DispatchEvent(new Event_UpdateMissionData(newMission.MissionId)); } } } if (null != GameLogic.Instance && null != GameLogic.Instance.GuideTrigger) { { var __list3 = listCompletedMission; var __listCount3 = __list3.Count; for (var __i3 = 0; __i3 < __listCount3; ++__i3) { var id = __list3[__i3]; { MissionManager.Instance.OnMissionComplete(id); } } } { var __list4 = listCompletedMission; var __listCount4 = __list4.Count; for (var __i4 = 0; __i4 < __listCount4; ++__i4) { var id = __list4[__i4]; { if (GameLogic.Instance.GuideTrigger.OnMissionComplete(id)) { return; } } } } { var __list5 = listAcceptableMission; var __listCount5 = __list5.Count; for (var __i5 = 0; __i5 < __listCount5; ++__i5) { var id = __list5[__i5]; { if (GameLogic.Instance.GuideTrigger.OnMissionBecomeAcceptable(id)) { return; } } } } //自动提交 MissionManager.Instance.CheckAndAutoCommitMission(); } }
//根据任务状态去往任务所需地点 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)); }
private IEnumerator CommitMissionCoroutine(int id) { using (new BlockingLayerHelper(0)) { var msg = NetManager.Instance.CommitMission(id); yield return(msg.SendAndWaitUntilDone()); if (msg.State != MessageState.Reply) { Logger.Debug("MessageState.Reply CommitMissionCoroutine mission[{0}]", msg.State); yield break; } var errorCode = (ErrorCodes)msg.ErrorCode; if (ErrorCodes.OK != errorCode) { Logger.Debug("CommitMissionCoroutine ErrorCode[{0}] mission[{1}]", msg.ErrorCode, id); if (ErrorCodes.Error_NotHaveMission == errorCode) { PlayerDataManager.Instance.ApplyMissions(-1); EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.MissionFrame)); } else // if (ErrorCodes.Error_ItemNoInBag_All == errorCode) { EventDispatcher.Instance.DispatchEvent(new UIEvent_ErrorTip(errorCode)); } yield break; } //删除已经提交的任务 if (null != MissionData) { MissionData.Datas.Remove(id); } //原有任务数据 var data = Instance.MissionData.Datas; //交完任务后服务端同步过来变化的任务 var missions = msg.Response.Missions; //收集一下新的可接的任务 var listAcceptableMission = new List <int>(); { // foreach(var pair in missions) var __enumerator4 = (missions).GetEnumerator(); while (__enumerator4.MoveNext()) { var pair = __enumerator4.Current; { var newMission = pair.Value; MissionBaseModel mission = null; if (!data.TryGetValue(newMission.MissionId, out mission)) { mission = new MissionBaseModel { MissionId = newMission.MissionId }; data.Add(newMission.MissionId, mission); } //收集一下新的可接的任务 if (eMissionState.Acceptable == (eMissionState)newMission.Exdata[0]) { listAcceptableMission.Add(mission.MissionId); } for (var i = 0; i != 5; ++i) { mission.Exdata[i] = newMission.Exdata[i]; } } } } //if (id != msg.Response) //{ // Logger.Debug("Response[{0}] != mission[{1}]", msg.Response, id); // id = msg.Response; //} EventDispatcher.Instance.DispatchEvent(new Event_UpdateMissionData()); Logger.Debug("Complete mission[{0}]", id); PlatformHelper.UMEvent("Mission", "Complete", id); OnCommitMission(id, listAcceptableMission); } }