Beispiel #1
0
    //打开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);
    }
Beispiel #2
0
    //打开当前任务
    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));
        }
Beispiel #4
0
    //获得任务数据
    public MissionBaseModel GetMissionById(int missionId)
    {
        MissionBaseModel data = null;

        if (MissionData.Datas.TryGetValue(missionId, out data))
        {
        }
        return(data);
    }
Beispiel #5
0
    //判断这个npc身上是否有关联任务

    public eMissionState GetMissionState(int id)
    {
        MissionBaseModel data = null;

        if (!MissionData.Datas.TryGetValue(id, out data))
        {
            return(eMissionState.Unfinished);
        }
        return((eMissionState)data.Exdata[0]);
    }
Beispiel #6
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);
        }
Beispiel #7
0
    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);
        }
Beispiel #10
0
    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();
        }
    }
Beispiel #11
0
    //根据任务状态去往任务所需地点
    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));
    }
Beispiel #12
0
    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);
        }
    }