Main/System/Task/TaskManager.cs
@@ -5,1809 +5,73 @@
using LitJson;
using System.Text.RegularExpressions;
using System.Text;
using vnxbqy.UI;
using UnityEngine.Events;
//任务信息的存储
/** 任务结构 */
public class MissionDetailDates
public class TaskDetailDates
{
    public DateTime Time;//记录时间
    public int ID;//任务ID
    public string Name;//任务名称
    public int Type;//任务类型
    public int NPC_ID;//起始NPCID
    public int LV;//可接等级
    public int ColorLV;//任务难度
    public string Desclist;//任务详情
    public string RewardList;//奖励信息
    public List<TsakLight> LightList;//任务灯信息
    public string InforList;//任务完成条件
    public int MissionState;//任务状态0未接,1进行中,2可提交,3已完成,6特殊卡级
    public int descIndex;//任务描述索引
    public int TaskGroup;   // 任务组,0-主线
    public int TaskID;      // 当前任务ID,可能为0,表示该分组暂时没有任务
    public int CurValue;      // 当前进度值
    public int State;      // 任务状态 1-进行中 2-可领取
}
public class MissionDict//任务字典信息
public enum TaskTypenum//任务类型分类
{
    public int MissionId;//任务ID
    public int DictKeyLen;//任务字典中的某个Key
    public string DictKey;//key的长度
    public int DictValue;//该key对应的值
    MainlineTaskType = 0,//主线
    SideQuestsType = 1,//支线
}
public class RunTaskAwardRecord
{
    public int Num;
    public int AwardState;
}
public struct TsakLight
{
    public int NpcId;
    public int StateLight;
}
public class TaskManager : GameSystemManager<TaskManager>
{
    /** 任务总清单 */
    public static bool _globalbool = false;
    public Dictionary<int, MissionDetailDates> allMissionDict = new Dictionary<int, MissionDetailDates>();//任务初始化接收字典
    public Dictionary<int, MissionDetailDates> MainTaskDic = new Dictionary<int, MissionDetailDates>();//主线任务字典
    public Dictionary<int, MissionDetailDates> SideQuestsDic = new Dictionary<int, MissionDetailDates>();//支线任务字典
    public Dictionary<int, MissionDetailDates> BountyDic = new Dictionary<int, MissionDetailDates>();//赏金任务
    public Dictionary<int, MissionDetailDates> FairyAuDic = new Dictionary<int, MissionDetailDates>();//仙盟任务
    public int FairyAuTaskCount_Day { get; private set; }
    public int FairyAuTaskCount_Round { get; private set; }
    public Dictionary<int, MissionDetailDates> SpecialTask = new Dictionary<int, MissionDetailDates>();//特殊任务类型
    public Dictionary<int, Dictionary<string, string>> _DicTaskInformation = new Dictionary<int, Dictionary<string, string>>();//任务字典的信息
    public Dictionary<int, Dictionary<string, int>> ReplaceDic = new Dictionary<int, Dictionary<string, int>>();//key值替换字典
    public Dictionary<int, RunTaskAwardRecord> AwardRecordDic = new Dictionary<int, RunTaskAwardRecord>();//跑环奖励记录
    public Dictionary<int, int> NPCShowDic = new Dictionary<int, int>();//关于NPC的显隐问题
    Dictionary<int, int> m_ShowNpcCache = new Dictionary<int, int>();
    public delegate void OnTaskToAdd(int MissionID, int MissionState, int DiscriptionIndex);
    public static event OnTaskToAdd Event_TaskToAdd;//任务添加
    public delegate void OnTaskRefreshes(int _taskId);
    public static event OnTaskRefreshes Event_TaskRefreshes;//任务的刷新
    public delegate void OnBounty();//赏金任务的添加
    public static event OnBounty Event_nBounty;
    public delegate void OnFairyAuTask();//仙盟任务的添加和刷新
    public static event OnFairyAuTask Event_FairyAuTask;
    public delegate void OnTaskInformation(int _id, Dictionary<int, Dictionary<string, string>> _Dic);
    public static event OnTaskInformation Event_TaskInformation;//任务字典信息
    public delegate void OnTaskToDelete(int _taskID);
    public static event OnTaskToDelete Event_TaskToDelete;//任务的删除
    public delegate void OnBountyRewards(int Number, int AwardState);//获取赏金奖励
    public static event OnBountyRewards Event_BountyRewards;
    public int BountyRewardsNumber = 0;//获取赏金内容的奖励值
    public delegate void OnFairyAuReward(int Number, int AwardState);//仙盟奖励
    public static event OnFairyAuReward Event_FairyAuReward;
    public int OnFairyAuNumber = 0;//获取仙盟的奖励值
    public string _conversation = null;//对话内容、
    public int _TaskNow = 0;//获取当前任务ID
    public string _DefaultDialogContent = null;//默认对话内容
    public delegate void OnMainlineTask(int MissionID, int MissionState);//主线任务任务状态变更和刷新
    public static event OnMainlineTask Event_MainlineTask;
    public delegate void OnTaskResponse(int _nowNPCid, int _nPCLamp, Dictionary<int, int> _dic = null);//NPCNPC灯状态,可接取任务(NPCID,任务灯状态)
    public static event OnTaskResponse Event_TaskResponse;
    public static event Action tryGetTaskAwardEvent;//这个是客户端只要尝试去领奖就会触发,不管最后的领奖结果。
    public static event Action<int> CardLevelChange;//关于任务卡机状态的转变
    public static event Action<int> SideQuestChangeEvent;//支线任务状态改变
    public static event Action<int> MainCardLevelChange;//主线任务卡级状态改变
    public static event Action<int> CompletionOfTaskEvent;//任务完成回调
    public event Action<int> talkNpcIdUpdate;
    public event Action<int> taskDescriptionRefresh;
    public static event Action TaskCoinTaskEvent;//赏金任务信息字典变更
    public static event Action FairyTaskEvent;//仙盟任务信息字典变更
    public int NPCid = 0;//获取NPCID(打开任务面板时)、
    public bool BountyMotionBool = false;//控制赏金任务是否自动移动
    public bool FairyAuBool = false;//控制仙盟任务是否自动移动
    public int currentMission { get; private set; }
    public int currentMissionState { get; private set; }
    public int GetNowTaskID { get; set; }//获取当前选中条的任务ID
    private bool isServerPrepare = false;//控制是否自动进行自动任务
    private int retainTaskID = 0;
    private float BossDelayTimeint = 0;
    public Vector3 UIeffectFabaoVec = new Vector3();//法宝NPC消失时获取的坐标
    //----关于前期无操作自动执行主线
    public int TaskAutoLv = 0;
    public int TaskAutoTime = 0;
    public bool TaskOverBool = false;
    private int Times = 0;
    private int NeedWaitTime = 4;
    public int clientGuardDugeonTask { get; private set; }
    List<int[]> priorityTaskChains = new List<int[]>();
    List<int> allowAutoTaskMapIds = new List<int>();
    private float mainTaskAutoWaitTime = 0f;
    public readonly TaskWait taskWait = new TaskWait();
    public List<int> npcImages = new List<int>();
    public List<int> playerJobImages = new List<int>();
    //跳转到任务,0为置顶
    public event Action OnJumpTask;
    private int m_JumpTaskID = 0;
    public int jumpTaskID {
        get { return m_JumpTaskID; }
        set {
            m_JumpTaskID = value;
            OnJumpTask?.Invoke();
        }
    }
    //任务组:任务信息;只有任务包没有删除包,可以认为一个任务组只有一个任务
    //public Dictionary<int, TaskDetailDates> allMissionDict = new Dictionary<int, TaskDetailDates>();
    //主线任务,暂且只处理主线任务
    public TaskDetailDates mainTask = new TaskDetailDates();
    public event Action OnTaskUpdate;
    public override void Init()
    {
        // StageLoad.Instance.onStageLoadFinish += onStageLoadFinish;
        // NPCInteractProcessor.s_NpcInteractEvent += NpcInterac;
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize;
        string BossDelayTime = FuncConfigConfig.Get("BossDelayTime").Numerical1;
        BossDelayTimeint = float.Parse(BossDelayTime);
        var Task_Auto = FuncConfigConfig.Get("TaskAuto");
        TaskAutoLv = int.Parse(Task_Auto.Numerical1);
        TaskAutoTime = int.Parse(Task_Auto.Numerical2);
        mainTaskAutoWaitTime = int.Parse(Task_Auto.Numerical3) / 1000f;
        var mapIds = ConfigParse.GetMultipleStr<int>(Task_Auto.Numerical4);
        if (mapIds != null && mapIds.Length > 0)
        {
            allowAutoTaskMapIds.AddRange(mapIds);
        }
        FairyAuTaskCount_Day = int.Parse(FuncConfigConfig.Get("RunTaskCnt").Numerical1.Split('|')[1].Split('_')[1]);
        FairyAuTaskCount_Round = int.Parse(FuncConfigConfig.Get("RunTaskCnt").Numerical2.Split('|')[1].Split('_')[1]);
        var cliengGuardConfig = FuncConfigConfig.Get("ClientGuardDungeon");
        clientGuardDugeonTask = int.Parse(cliengGuardConfig.Numerical5);
        var funcConfig = FuncConfigConfig.Get("AutoSelectTaskChain");
        var taskChainArray = LitJson.JsonMapper.ToObject<int[][]>(funcConfig.Numerical1);
        if (taskChainArray != null)
        {
            for (int i = 0; i < taskChainArray.Length; i++)
            {
                priorityTaskChains.Add(taskChainArray[i]);
            }
        }
        var config = FuncConfigConfig.Get("NPCTalk");
        npcImages = JsonMapper.ToObject<List<int>>(config.Numerical1);
        playerJobImages = JsonMapper.ToObject<List<int>>(config.Numerical2);
    }
    public override void Release()
    {
        // StageLoad.Instance.onStageLoadFinish -= onStageLoadFinish;
        // NPCInteractProcessor.s_NpcInteractEvent -= NpcInterac;
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize;
    }
    public void OnBeforePlayerDataInitialize()
    {
        allMissionDict.Clear();
        MainTaskDic.Clear();
        SideQuestsDic.Clear();
        BountyDic.Clear();
        FairyAuDic.Clear();
        SpecialTask.Clear();
        _DicTaskInformation.Clear();
        ReplaceDic.Clear();
        AwardRecordDic.Clear();
        NPCShowDic.Clear();
        m_ShowNpcCache.Clear();
        _conversation = null;
        _DefaultDialogContent = null;
        _TaskNow = 0;
        BountyRewardsNumber = 0;
        NPCid = 0;
        retainTaskID = 0;
        currentMission = 0;
        _globalbool = false;
        BountyMotionBool = false;
        FairyAuBool = false;
        isServerPrepare = false;
    }
    public void OnPlayerLoginOk()
    {
        GlobalTimeEvent.Instance.secondEvent -= secondEvent;
        GlobalTimeEvent.Instance.secondEvent += secondEvent;
        TaskAllocation.Instance.TaskTime = TimeUtility.ServerNow;
        isServerPrepare = true;
        TaskOverBool = false;
    }
    // private void onStageLoadFinish()//地图切换时调用
    // {
    //     var inDungeon = IsDungeon();
    //     if (!inDungeon && retainTaskID != 0)
    //     {
    //         if (ReplaceDic.ContainsKey(retainTaskID))
    //         {
    //             AutomaticTripToTask(retainTaskID);
    //             //int missionState = SideQuestState(retainTaskID);
    //             //TaskTerminationToHangUp(retainTaskID, missionState);
    //             retainTaskID = 0;
    //         }
    //     }
    // }
    List<int> ListMissionID = new List<int>();
    public void RefreshMissionState(int MissionID, int MissionState, int DiscriptionIndex)//1.任务ID,2任务状态,3,任务描述Index(接收任务)
    {
        // TODO YYL
        // try
        // {
        //     if (isServerPrepare && MissionState != 3 && MissionID != 2000 && MissionID != 3000)
        //     {
        //         TaskupToDate = MissionID;
        //     }
        //     var pytaskM = PyTaskConfig.Get(MissionID);
        //     if (pytaskM == null)
        //     {
        //         return;
        //     }
        //     if ((pytaskM.type == (int)TaskTypenum.MainlineTaskType || pytaskM.type == (int)TaskTypenum.MainlineTaskTyp2) && MissionState != 0 && MissionState != 3)
        //     {
        //         currentMission = MissionID;
        //         currentMissionState = MissionState;
        //     }
        //     //仙盟任务完成
        //     if ((pytaskM.type == 12 || pytaskM.type == 14) && TaskAllocation.Instance.FairyAuAllNumber() >= FairyAuTaskCount_Day)
        //     {
        //         Event_FairyAuTask();
        //         return;
        //     }
        //     if (allMissionDict.ContainsKey(MissionID))
        //     {
        //         int missionState = allMissionDict[MissionID].MissionState;
        //         var lastDescriptionIndex = allMissionDict[MissionID].descIndex;
        //         if (allMissionDict[MissionID].MissionState != MissionState && MissionState == 3 && isServerPrepare)
        //         {
        //             TaskOverBool = true;
        //             taskWait.Push(TaskWaitType.TaskComplete);
        //             if (CompletionOfTaskEvent != null)
        //             {
        //                 CompletionOfTaskEvent(MissionID);
        //             }
        //         }
        //         TaskChanges(MissionID, MissionState, DiscriptionIndex);//任务的状态修改
        //         if (missionState == 0 && (MissionState == 1 || MissionState == 2))
        //         {
        //             if (Event_TaskToAdd != null)//任务添加(用于存储于身上的未接取任务的特殊处理)
        //             {
        //                 Event_TaskToAdd(MissionID, MissionState, DiscriptionIndex);
        //             }
        //         }
        //         else
        //         {
        //             if (Event_TaskRefreshes != null)//刷新任务
        //             {
        //                 Event_TaskRefreshes(MissionID);
        //             }
        //         }
        //         if (lastDescriptionIndex != DiscriptionIndex)
        //         {
        //             if (taskDescriptionRefresh != null)
        //             {
        //                 taskDescriptionRefresh(MissionID);
        //             }
        //         }
        //     }
        //     else
        //     {
        //         AddMission(MissionID, MissionState, DiscriptionIndex);//任务的添加
        //         if (taskDescriptionRefresh != null)
        //         {
        //             taskDescriptionRefresh(MissionID);
        //         }
        //         if (Event_TaskToAdd != null)
        //         {
        //             Event_TaskToAdd(MissionID, MissionState, DiscriptionIndex);
        //         }
        //     }
        //     TaskClassification(MissionID, MissionState);//任务分类
        //     IsShowNpC(1);//是否显示NPC
        //     IsShowNpC(MissionID);//是否显示NPC
        //     if (isServerPrepare)
        //     {
        //         AutotaskingPrecedence(isServerPrepare, MissionID);//是否执行自动任务
        //     }
        //     TaskTerminationToHangUp(MissionID, MissionState);//结束赏金和仙盟任务前往挂机
        //     if (Event_TaskResponse != null)//发送任务灯信息
        //     {
        //         if (allMissionDict[MissionID].LightList.Equals(default(TsakLight)))
        //         {
        //             return;
        //         }
        //         for (int i = 0; i < allMissionDict[MissionID].LightList.Count; i++)
        //         {
        //             Event_TaskResponse(allMissionDict[MissionID].LightList[i].NpcId, allMissionDict[MissionID].LightList[i].StateLight);
        //         }
        //     }
        // }
        // catch (Exception ex)
        // {
        //     Debug.Log(ex.StackTrace);
        // }
        mainTask = new TaskDetailDates();
    }
    // public ImpactRankModel.RankAwardItem GetRunTaskRward()//添加任务奖励
    // {
    //     var runTaskAward = FuncConfigConfig.Get("RunTaskAward");
    //     ImpactRankModel.RankAwardItem _award = new ImpactRankModel.RankAwardItem();
    //     var _jsonData = LitJson.JsonMapper.ToObject(runTaskAward.Numerical3);
    //     var jsonData2 = LitJson.JsonMapper.ToObject(runTaskAward.Numerical4);
    //     foreach (string key in _jsonData.Keys)
    //     {
    //         var _job = int.Parse(key);
    //         var _itemArray = LitJson.JsonMapper.ToObject<int[][]>(_jsonData[key].ToJson());
    //         for (int j = 0; j < _itemArray.Length; j++)
    //         {
    //             _award.Add(_job, new Item(_itemArray[j][0], _itemArray[j][1]));
    //         }
    //     }
    //     foreach (string key in jsonData2.Keys)
    //     {
    //         var _job = int.Parse(key);
    //         _award.Add(_job, new Item(2301, 0));
    //     }
    //     return _award;
    // }
    public int GetLatestMainTaskId()
    public void UpdateTask(HB110_tagMCTaskInfo netPack)
    {
        var taskId = 0;
        //主线任务的顺序由任务列表的顺序决定 TaskListConfig.GetMissionIndex
        //这里是bug,但是因为只有一个主线任务,所以暂时不影响
        foreach (var id in MainTaskDic.Keys)
        for (int i = 0; i < netPack.TaskList.Length; i++)
        {
            if (id > taskId)
            if (netPack.TaskList[i].TaskGroup == 0)
            {
                taskId = id;
            }
        }
        return taskId;
    }
    public bool TryGetTaskData(int _taskId, out MissionDetailDates taskData)
    {
        return allMissionDict.TryGetValue(_taskId, out taskData);
    }
    void DefaultDialogue()//关于打开默认对话界面
    {
        // if (NewBieCenter.Instance.inGuiding || ModelCenter.Instance.GetModel<TreasureModel>().newGotShowing)
        // {
        //     return;
        // }
        // bool IsOpenMain = UIManager.Instance.IsOpened<MainWin>();
        // if (!UIManager.Instance.IsOpened<DefaultDialogueBoxWin>() && IsOpenMain)
        // {
        //     UIManager.Instance.OpenWindow<DefaultDialogueBoxWin>();
        //     UIManager.Instance.CloseWindow<MainInterfaceWin>();
        // }
        // else
        // {
        //     if (talkNpcIdUpdate != null)
        //     {
        //         talkNpcIdUpdate(NPCid);
        //     }
        // }
    }
    private void OnEventTalkEvent(int taskID)//NPC对话后的弹框
    {
        //if (UIManager.Instance.ExitAnyFullScreenOrMaskWin())
        //{
        //    return;
        //}
        //bug: 功能开启引导时,未收到服务端的封包快速对话会导致功能开启引导被打断,如果只是判断inGuiding又导致无法继续任务
        //解决方案:1. 对话时判断有引导且必须界面在打开状态;2. 功能引导飞入的时候如果中断则取消引导
        // -------------------------TODO YYL-----------------------------------
        // if ((NewBieCenter.Instance.inGuiding && UIManager.Instance.IsOpened<NewBieWin>()) || ModelCenter.Instance.GetModel<TreasureModel>().newGotShowing
        //     || UIManager.Instance.IsOpened<TreasureChapterWin>())
        // {
        //     return;
        // }
        // bool IsOpenMain = UIManager.Instance.IsOpened<MainInterfaceWin>();
        // var state = 0;
        // if (TryGetCustomTaskState(taskID, out state))
        // {
        //     var config = StoryMissionsConfig.GetConfig(taskID, state);
        //     if (config != null && NPCid == config.NpcID)
        //     {
        //         if (!UIManager.Instance.IsOpened<DialogueDuidanceWin>() && IsOpenMain
        //              && !UIManager.Instance.ExistAnyFullScreenOrMaskWin())
        //         {
        //             UIManager.Instance.CloseWindow<MainInterfaceWin>();
        //             DialogueDuidanceWin.storyMissionId = config.id;
        //             DialogueDuidanceWin.taskId = taskID;
        //             UIManager.Instance.OpenWindow<DialogueDuidanceWin>();
        //         }
        //         return;
        //     }
        // }
        // if (!UIManager.Instance.IsOpened<TaskBoxBGMWin>() && IsOpenMain)
        // {
        //     UIManager.Instance.CloseWindow<MainInterfaceWin>();
        //     UIManager.Instance.OpenWindow<TaskBoxBGMWin>();
        //     return;
        // }
        // if (BountyDic.ContainsKey(_TaskNow) || FairyAuDic.ContainsKey(_TaskNow))
        // {
        //     if (!ModelCenter.Instance.GetModel<TeamModel>().teamPrepare.isPreparing)
        //     {
        //         RequestGetTaskAward("OK", _TaskNow);
        //     }
        // }
    }
    private void BountySelfMotion()
    {
        int blank = PackManager.Instance.GetEmptyGridCount(PackType.Item);
        if (blank < 1)//"请先清理背包再领取奖励
        {
            return;
        }
    }
    public bool TryGetCustomTaskState(int taskId, out int state)
    {
        state = 0;
        if (ReplaceDic.ContainsKey(taskId))
        {
            var keyValue = ReplaceDic[taskId];
            if (keyValue.ContainsKey("state"))
            {
                state = keyValue["state"];
                return true;
            }
        }
        return false;
    }
    void AddMission(int MissionID, int MissionState, int DiscriptionIndex)//添加任务
    {
        //  TODO YYL
        // var config = PyTaskConfig.Get(MissionID);
        // if (config == null)
        // {
        //     Debug.LogError(MissionID + "表格中不存在此任务ID");
        //     return;
        // }
        // if (allMissionDict == null)
        //     allMissionDict = new Dictionary<int, MissionDetailDates>();
        // MissionDetailDates vDetailData = new MissionDetailDates();
        // vDetailData.Time = DateTime.Now;
        // vDetailData.ID = int.Parse(config.id);
        // vDetailData.Name = config.name;
        // vDetailData.Type = config.type;
        // vDetailData.NPC_ID = config.npcId;
        // vDetailData.LV = config.lv;
        // vDetailData.ColorLV = config.colorLV;
        // vDetailData.RewardList = RewardInformation(config.rewardList, DiscriptionIndex);//奖励信息
        // if (ReplaceDic.ContainsKey(MissionID))
        // {
        //     Dictionary<string, int> _dic = ReplaceDic[MissionID];
        //     if (_dic.ContainsKey("visit_npc_id") || _dic.ContainsKey("kill_npc_id"))
        //     {
        //         vDetailData.LightList = CharactersReplace(config.lightList, DiscriptionIndex, int.Parse(config.id));
        //     }
        //     else
        //     {
        //         vDetailData.LightList = StrSegmentation(config.lightList, DiscriptionIndex);//任务信息灯
        //     }
        //     if (MissionState == 3)
        //     {
        //         for (int i = 0; i < vDetailData.LightList.Count; i++)
        //         {
        //             TsakLight TsakLight = new TsakLight();
        //             TsakLight.NpcId = vDetailData.LightList[i].NpcId;
        //             TsakLight.StateLight = -1;
        //             vDetailData.LightList[i] = TsakLight;
        //         }
        //     }
        // }
        // else
        // {
        //     vDetailData.LightList = StrSegmentation(config.lightList, DiscriptionIndex);//任务信息灯
        //     if (MissionState == 3)
        //     {
        //         for (int i = 0; i < vDetailData.LightList.Count; i++)
        //         {
        //             TsakLight TsakLight = new TsakLight();
        //             TsakLight.NpcId = vDetailData.LightList[i].NpcId;
        //             TsakLight.StateLight = -1;
        //             vDetailData.LightList[i] = TsakLight;
        //         }
        //     }
        // }
        // vDetailData.Desclist = TaskDetails(config.descList, DiscriptionIndex);//任务详情
        // vDetailData.InforList = StrInforList(config.infoList, DiscriptionIndex);//任务完成条件
        // vDetailData.MissionState = MissionState;
        // vDetailData.descIndex = DiscriptionIndex;
        // var canSwitchSelectTask = true;
        // if (GetNowTaskID != 0 && !IsMainTaskType(vDetailData.Type))
        // {
        //     MissionDetailDates taskData;
        //     if (TryGetTaskData(GetNowTaskID, out taskData)
        //         && IsMainTaskType(taskData.Type)
        //         && taskData.MissionState != 3)
        //     {
        //         canSwitchSelectTask = false;
        //     }
        // }
        // if (isServerPrepare && PriorityTaskChainContains(MissionID))
        // {
        //     canSwitchSelectTask = true;
        // }
        // if (canSwitchSelectTask)
        // {
        //     GetNowTaskID = MissionID;
        // }
        // allMissionDict.Add(MissionID, vDetailData);//添加任务
    }
    public bool PriorityTaskChainContains(int taskId)
    {
        for (int i = 0; i < priorityTaskChains.Count; i++)
        {
            if (taskId >= priorityTaskChains[i][0]
                && taskId <= priorityTaskChains[i][1])
            {
                return true;
            }
        }
        return false;
    }
    public bool IsMainTaskType(int type)
    {
        return type == (int)TaskTypenum.MainlineTaskType || type == (int)TaskTypenum.MainlineTaskTyp2;
    }
    public enum TaskTypenum//任务类型分类
    {
        MainlineTaskType = 0,//主线
        MainlineTaskTyp2 = 1,
        SideQuestsType2 = 2,//支线
        SideQuestsType3 = 3,//支线任务(本源法宝支线)
        SideQuestsType4 = 4,
        SideQuestsType5 = 5,
        BountyMissionsType6 = 6,//赏金任务
        BountyMissionsType7 = 7,
        BountyMissionsType8 = 8,
        FairyAuMissionType11 = 11,//仙盟任务
        FairyAuMissionType12 = 12,
        SpecialTaskType13 = 13,//特殊任务类型(用于赏金)
        SpecialTaskType14 = 14,//特殊任务类型(用于仙盟)
        AchievementTask = 15,//成就任务(暂未开出专属字典)
        SpecialTaskType16 = 16,//特殊任务类型(用于法宝)
        SideQuestsType17 = 17,//支线17-21新增
        SideQuestsType18 = 18,
        SideQuestsType19 = 19,
        SideQuestsType20 = 20,//(后端特殊处理,暂定不让使用)
        SideQuestsType21 = 21,
        //后续IL开发添加预设
        default1,
        default2,
        default3,
        default4,
        default5,
        default6,
        default7,
        default8,
        default9,
        default10,
    }
    void TaskClassification(int _taskID, int MissionState)//任务分类(主线任务,支线任务)
    {
        if (!allMissionDict.ContainsKey(_taskID))
        {
            return;
        }
        TaskTypenum type = (TaskTypenum)allMissionDict[_taskID].Type;
        switch (type)
        {
            case TaskTypenum.MainlineTaskType:
            case TaskTypenum.MainlineTaskTyp2:
                {
                    if (_taskID != 1)//主线任务(添加与更新)
                    {
                        if (MainTaskDic.ContainsKey(_taskID))
                        {
                            MainTaskDic[_taskID] = allMissionDict[_taskID];
                        }
                        else
                        {
                            MainTaskDic.Add(_taskID, allMissionDict[_taskID]);
                        }
                        if (Event_MainlineTask != null)
                        {
                            Event_MainlineTask(_taskID, MissionState);
                        }
                    }
                }
                mainTask.TaskGroup = netPack.TaskList[i].TaskGroup;
                mainTask.TaskID = (int)netPack.TaskList[i].TaskID;
                mainTask.CurValue = (int)netPack.TaskList[i].CurValue;
                mainTask.State = netPack.TaskList[i].State;
                break;
            case TaskTypenum.SideQuestsType2:
            case TaskTypenum.SideQuestsType3:
            case TaskTypenum.SideQuestsType4:
            case TaskTypenum.SideQuestsType5:
            case TaskTypenum.SideQuestsType17:
            case TaskTypenum.SideQuestsType18:
            case TaskTypenum.SideQuestsType19:
            case TaskTypenum.SideQuestsType20:
            case TaskTypenum.SideQuestsType21:
                {
                    if (SideQuestsDic.ContainsKey(_taskID))
                    {
                        SideQuestsDic[_taskID] = allMissionDict[_taskID];
                    }
                    else
                    {
                        SideQuestsDic.Add(_taskID, allMissionDict[_taskID]);
                    }
                    if (SideQuestChangeEvent != null)
                    {
                        SideQuestChangeEvent(_taskID);
                    }
                }
                break;
            case TaskTypenum.BountyMissionsType6:
            case TaskTypenum.BountyMissionsType7:
            case TaskTypenum.BountyMissionsType8:
                {
                    if (BountyDic.ContainsKey(_taskID))
                        BountyDic[_taskID] = allMissionDict[_taskID];
                    else
                        BountyDic.Add(_taskID, allMissionDict[_taskID]);
                    if (Event_nBounty != null)
                        Event_nBounty();
                }
                break;
            case TaskTypenum.FairyAuMissionType11:
            case TaskTypenum.FairyAuMissionType12:
                {
                    if (FairyAuDic.ContainsKey(_taskID))
                        FairyAuDic[_taskID] = allMissionDict[_taskID];
                    else
                        FairyAuDic.Add(_taskID, allMissionDict[_taskID]);
                    if (Event_FairyAuTask != null && MissionState != 3)
                        Event_FairyAuTask();
                }
                break;
            case TaskTypenum.SpecialTaskType13:
            case TaskTypenum.SpecialTaskType14:
            case TaskTypenum.SpecialTaskType16:
                {
                    if (SpecialTask.ContainsKey(_taskID))
                        SpecialTask[_taskID] = allMissionDict[_taskID];
                    else
                        SpecialTask.Add(_taskID, allMissionDict[_taskID]);
                }
                break;
            default:
                break;
        }
    }
    void TaskTypeDeletion(int _taskID)//任务类型的删除
    {
        if (MainTaskDic.ContainsKey(_taskID))//主线
        {
            MainTaskDic.Remove(_taskID);
        }
        else if (SideQuestsDic.ContainsKey(_taskID))//支线
        {
            SideQuestsDic.Remove(_taskID);
        }
        else if (BountyDic.ContainsKey(_taskID))//赏金
        {
            BountyDic.Remove(_taskID);
            if (Event_nBounty != null)
                Event_nBounty();
        }
        else if (SpecialTask.ContainsKey(_taskID))//特殊任务
        {
            SpecialTask.Remove(_taskID);
        }
        else if (FairyAuDic.ContainsKey(_taskID))
        {
            FairyAuDic.Remove(_taskID);
            if (Event_FairyAuTask != null)
                Event_FairyAuTask();
        }
    }
    string TaskDetails(string _string, int _index)////Json解析
    {
        JsonData _Json = JsonMapper.ToObject(_string);
        if (_Json.Count == 1)
        {
            string _TaskDetails = _Json["0"].ToString().Replace("\"", "");
            return _TaskDetails;
        }
        else
        {
            string _TaskDetails = _Json[_index.ToString()].ToString().Replace("\"", "");
            return _TaskDetails;
        }
    }
    List<TsakLight> CharactersReplace(string _string, int _index, int Id)
    {
        JsonData _Json = JsonMapper.ToObject(_string);
        List<TsakLight> TsakLightList = new List<TsakLight>();
        TsakLightList.Clear();
        TsakLight taskLight = new TsakLight();
        foreach (var key in _Json.Keys)
        {
            if (int.Parse(key) == _index)
            {
                JsonData _Json1 = _Json[key];
                if (_Json1.Count != 0)
                {
                    foreach (var _key in _Json1.Keys)
                    {
                        string Str = _key.ToString();
                        Match match = Regex.Match(Str, pattern);
                        if (ReplaceDic.ContainsKey(Id))
                        {
                            Dictionary<string, int> _dic = ReplaceDic[Id];
                            if (_dic.ContainsKey(match.Groups[1].Value))
                            {
                                taskLight.NpcId = _dic[match.Groups[1].Value];
                                taskLight.StateLight = int.Parse(_Json1[_key].ToString());
                                TsakLightList.Add(taskLight);
                            }
                        }
                    }
                }
                return TsakLightList;
            }
        }
        return TsakLightList;
    }
    string StrInforList(string _string, int _index)
    {
        JsonData _Json = JsonMapper.ToObject(_string);
        foreach (var key in _Json.Keys)
        {
            if (int.Parse(key) == _index)
            {
                JsonData _Json1 = _Json[key];
                if (_Json1.Count != 0)
                {
                    foreach (var _key in _Json1.Keys)
                    {
                        return _Json1[_key].ToString();
                    }
                }
            }
        }
        return string.Empty;
    }
    List<TsakLight> StrSegmentation(string _string, int _index)
    {
        int val;
        JsonData _Json = JsonMapper.ToObject(_string);
        List<TsakLight> TsakLightList = new List<TsakLight>();
        TsakLightList.Clear();
        foreach (var key in _Json.Keys)
        {
            if (int.Parse(key) == _index)
            {
                JsonData _Json1 = _Json[key];
                if (_Json1.Count != 0)
                {
                    foreach (var _key in _Json1.Keys)
                    {
                        if (int.TryParse(_key, out val))
                        {
                            TsakLight taskLight = new TsakLight();
                            taskLight.NpcId = int.Parse(_key);
                            taskLight.StateLight = int.Parse(_Json1[_key].ToString());
                            TsakLightList.Add(taskLight);
                        }
                    }
                }
                return TsakLightList;
            }
        }
        return TsakLightList;
    }
    string RewardInformation(string _string, int _index)//奖励信息
    {
        string _occupation = ("J" + PlayerDatas.Instance.baseData.Job).ToString();
        JsonData _Json = JsonMapper.ToObject(_string);
        foreach (var key in _Json.Keys)
        {
            if (int.Parse(key) == _index)
            {
                JsonData _Json1 = _Json[key];
                if (_Json1.Count != 0)
                {
                    foreach (var _key in _Json1.Keys)
                    {
                        if (_key == _occupation)
                            return _Json1[_key].ToString();
                        else if (_key == "-")
                            return _Json1[_key].ToString();
                    }
                }
                else
                {
                    return null;
                }
            }
        }
        return null;
    }
    void TaskChanges(int MissionID, int MissionState, int DiscriptionIndex)//存在的任务的修改
    {
        //  TODO YYL
        // var pytaskM = PyTaskConfig.Get(MissionID);
        // if (pytaskM == null)
        //     return;
        // allMissionDict[MissionID].Time = DateTime.Now;
        // allMissionDict[MissionID].MissionState = MissionState;
        // allMissionDict[MissionID].descIndex = DiscriptionIndex;
        // allMissionDict[MissionID].RewardList = RewardInformation(pytaskM.rewardList, DiscriptionIndex);//奖励信息
        // allMissionDict[MissionID].Desclist = TaskDetails(pytaskM.descList, DiscriptionIndex);//任务详情
        // allMissionDict[MissionID].InforList = StrInforList(pytaskM.infoList, DiscriptionIndex);//任务完成条件
        // if (MissionState == 3)
        // {
        //     if (allMissionDict[MissionID].LightList.Equals(default(TsakLight)))
        //     {
        //         return;
        //     }
        //     for (int i = 0; i < allMissionDict[MissionID].LightList.Count; i++)
        //     {
        //         TsakLight TsakLight = new TsakLight();
        //         TsakLight.NpcId = allMissionDict[MissionID].LightList[i].NpcId;
        //         TsakLight.StateLight = -1;
        //         allMissionDict[MissionID].LightList[i] = TsakLight;
        //     }
        //     return;
        // }
        // else
        // {
        //     if (ReplaceDic.ContainsKey(MissionID))
        //     {
        //         Dictionary<string, int> _dic = ReplaceDic[MissionID];
        //         if (_dic.ContainsKey("visit_npc_id") || _dic.ContainsKey("kill_npc_id"))
        //         {
        //             allMissionDict[MissionID].LightList = CharactersReplace(pytaskM.lightList, DiscriptionIndex, allMissionDict[MissionID].ID);
        //         }
        //         else
        //         {
        //             allMissionDict[MissionID].LightList = StrSegmentation(pytaskM.lightList, DiscriptionIndex);//任务信息灯
        //         }
        //     }
        //     else
        //     {
        //         allMissionDict[MissionID].LightList = StrSegmentation(pytaskM.lightList, DiscriptionIndex);//任务信息灯
        //     }
        // }
    }
    public void Task0820(H0820_tagMissionDict info)//0820信息字典
    {
        // TODO YYL
        // Dictionary<string, int> dic = null;
        // ReplaceDic.TryGetValue((int)info.MissionID, out dic);
        // if (dic == null)
        // {
        //     dic = new Dictionary<string, int>();
        //     StorageNPCDic(info.MissionID, info.DictKey, (int)info.DictValue);
        //     dic.Add(info.DictKey, (int)info.DictValue);
        //     ReplaceDic.Add((int)info.MissionID, dic);
        // }
        // else
        // {
        //     if (dic.ContainsKey(info.DictKey))
        //     {
        //         StorageNPCDic(info.MissionID, info.DictKey, (int)info.DictValue);
        //         dic[info.DictKey] = (int)info.DictValue;
        //         if (info.DictKey == "around_allcount")
        //         {
        //             if (TaskCoinTaskEvent != null)
        //             {
        //                 TaskCoinTaskEvent();
        //             }
        //         }
        //         if (info.DictKey == "around_count_family")
        //         {
        //             if (FairyTaskEvent != null)
        //             {
        //                 FairyTaskEvent();
        //             }
        //         }
        //     }
        //     else
        //     {
        //         StorageNPCDic(info.MissionID, info.DictKey, (int)info.DictValue);
        //         dic.Add(info.DictKey, (int)info.DictValue);
        //     }
        // }
        OnTaskUpdate?.Invoke();
    }
    public void RequestGetTaskAward(string _answer, int taskId = 0)
    {
        // TODO YYL
        // if (taskId == clientGuardDugeonTask)
        // {
        //     ClientGuardDungeon.RequestEnter();
        //     return;
        // }
        // var sendInfo = new C0802_tagCNPCAnswer();
        // sendInfo.Answer = _answer;
        // sendInfo.AnswerLen = (byte)_answer.Length;
        // GameNetSystem.Instance.SendInfo(sendInfo);
        // if (tryGetTaskAwardEvent != null)
        // {
        //     tryGetTaskAwardEvent();
        // }
    }
    public void TaskRefreshes(int _MissionId, int _DictKeyLen, string _DictKey, int _DictValue)//任务数据的刷新(任务字典信息)
    {
        if (!_DicTaskInformation.ContainsKey(_MissionId))
        {
            Dictionary<string, string> _dic = new Dictionary<string, string>();
            if (_dic.ContainsKey(_DictKey))
            {
                _dic[_DictKey] = _DictValue.ToString();
            }
            else
            {
                _dic.Add(_DictKey, _DictValue.ToString());
            }
            _DicTaskInformation.Add(_MissionId, _dic);
            string kaji = "kaji";
            if (_DicTaskInformation.ContainsKey(_MissionId) && _DicTaskInformation[_MissionId].ContainsKey(kaji))
            {
                if (MainTaskDic.ContainsKey(_MissionId) && MainCardLevelChange != null && _DictValue == 0)
                {
                    if (IsGetOnBool)
                    {
                        GetNowTaskID = _MissionId;
                    }
                    MainCardLevelChange(_MissionId);
                }
            }
        }
        else
        {
            if (_DicTaskInformation[_MissionId].ContainsKey(_DictKey))
            {
                _DicTaskInformation[_MissionId][_DictKey] = _DictValue.ToString();
                if (_DictKey == "kaji" && (_DictValue == 0 || _DictValue == 1))//kaji:0为主线卡级变更,kaji:1为魔族卡级变更
                {
                    if (CardLevelChange != null)
                    {
                        CardLevelChange(_MissionId);
                    }
                    if (MainTaskDic.ContainsKey(_MissionId))
                    {
                        if (IsGetOnBool)
                        {
                            GetNowTaskID = _MissionId;
                        }
                        if (MainCardLevelChange != null)
                        {
                            MainCardLevelChange(_MissionId);
                        }
                    }
                }
            }
            else
            {
                _DicTaskInformation[_MissionId].Add(_DictKey, _DictValue.ToString());
            }
        }
        if (Event_TaskInformation != null)
            Event_TaskInformation(_MissionId, _DicTaskInformation);
    }
    public void DelMission(int _taskID)//真实任务删除
    {
        if (allMissionDict.ContainsKey(_taskID))
        {
            allMissionDict.Remove(_taskID);
            if (_DicTaskInformation.ContainsKey(_taskID))
            {
                _DicTaskInformation.Remove(_taskID);
            }
        }
        TaskTypeDeletion(_taskID);
        if (Event_TaskToDelete != null)
        {
            Event_TaskToDelete(_taskID);
        }
    }
    bool _bool = false;
    string _conversationA = null;
    public void EventTalk(H0801_tagEventTalk info)//访问任务是否可提交
    {
        NPCid = (int)info.NPCID;
        if (info.Msg == null || info.Msg[0].MsgLen == 0)
        {
            _conversation = _conversationA;
        }
        else
        {
            if (_conversationA != info.Msg[0].Msg)
            {
                _conversation = info.Msg[0].Msg;
                _conversationA = _conversation;
            }
        }
        if (_bool)
        {
            if ((int)info.MissionID != 0)
            {
                _TaskNow = (int)info.MissionID;
                OnEventTalkEvent((int)info.MissionID);
                _bool = false;
                return;
            }
        }
        for (int i = 0; i < info.Answer.Length; i++)
        {
            string[] str = info.Answer[i].Msg.Split('_');
            int var;
            if (str.Length > 1)
            {
                for (int j = 0; j < info.Answer.Length; j++)
                {
                    string[] stX = info.Answer[j].Msg.Split('_');
                    if (stX.Length > 1)
                    {
                        string strXX = stX[stX.Length - 1];
                        if (int.TryParse(strXX, out var))
                        {
                            if (int.Parse(strXX) == GetNowTaskID)
                            {
                                RequestGetTaskAward(strXX);
                                _bool = true;
                                return;
                            }
                        }
                    }
                }
                string str1 = str[str.Length - 1];
                RequestGetTaskAward(str1);
                _bool = true;
                return;
            }
            else
            {
                _bool = false;
                if ((int)info.NPCID != 32504001)
                {
                    DefaultDialogue();
                }
                return;
            }
        }
    }
    public string pattern = @"\{(.+)\}";
    public int StatusLightQuery(int _NpcID)//状态灯查询
    {
        int Light = -1;
        foreach (int key in allMissionDict.Keys)
        {
            if (allMissionDict[key].LightList.Equals(default(TsakLight)))
            {
                continue;
            }
            for (int i = 0; i < allMissionDict[key].LightList.Count; i++)
            {
                if (_NpcID == allMissionDict[key].LightList[i].NpcId)
                {
                    if (allMissionDict[key].LightList[i].StateLight > Light)
                    {
                        Light = allMissionDict[key].LightList[i].StateLight;
                    }
                }
            }
        }
        return Light;
    }
    public void DailyFairyTaskMove()//日常仙盟任务
    {
        // TODO YYL
        // if (SpecialTask.Count != 0)
        // {
        //     foreach (int key in SpecialTask.Keys)
        //     {
        //         if (SpecialTask[key].Type == 14 && SpecialTask[key].MissionState != 3)//未接任务
        //         {
        //             PlayerDatas.Instance.hero.Behaviour.StopHandupAI();
        //             SnxxzGame.Instance.StartCoroutine(WaitForSkillFinished(key));
        //             return;
        //         }
        //     }
        // }
        // if (FairyAuDic.Count != 0)
        // {
        //     foreach (int key in FairyAuDic.Keys)
        //     {
        //         if (FairyAuDic[key].MissionState != 0 && FairyAuDic[key].MissionState != 3)
        //         {
        //             PlayerDatas.Instance.hero.Behaviour.StopHandupAI();
        //             SnxxzGame.Instance.StartCoroutine(WaitForSkillFinished(key));
        //             return;
        //         }
        //     }
        // }
    }
    public void DailyBountyMove()//日常赏金任务
    {
        // if (SpecialTask.Count != 0)
        // {
        //     foreach (int key in SpecialTask.Keys)
        //     {
        //         if (SpecialTask[key].Type == 13 && SpecialTask[key].MissionState != 3)//未接任务
        //         {
        //             PlayerDatas.Instance.hero.Behaviour.StopHandupAI();
        //             SnxxzGame.Instance.StartCoroutine(WaitForSkillFinished(key));
        //             return;
        //         }
        //     }
        // }
        // if (BountyDic.Count != 0)
        // {
        //     foreach (int key in BountyDic.Keys)
        //     {
        //         if (BountyDic[key].MissionState != 0 && BountyDic[key].MissionState != 3)
        //         {
        //             PlayerDatas.Instance.hero.Behaviour.StopHandupAI();
        //             SnxxzGame.Instance.StartCoroutine(WaitForSkillFinished(key));
        //             return;
        //         }
        //     }
        // }
    // 任务状态 1-进行中 2-可领取
    public int GetMainTaskState()
    {
        return mainTask.State;
    }
    private void AutotaskingPrecedence(bool automaticityBool, int missionID)//关于是否执行自动任务和自动任务的优先级
    {
        if (automaticityBool)
        {
            var inDungeon = IsDungeon();
            if (inDungeon)//判断是否再副本中对任务ID进行储存
            {
                retainTaskID = Autotasking(missionID);
            }
            else
            {
                retainTaskID = 0;
                if (Autotasking(missionID) != 0)
                {
                    AutomaticTripToTask(Autotasking(missionID));
                }
            }
        }
    }
    private int Autotasking(int taskID)
    {
        foreach (var value in MainTaskDic.Values)
        {
            if (value.MissionState != 0 && value.MissionState != 3)
            {
                if (allMissionDict.ContainsKey(taskID) && (allMissionDict[taskID].Time - value.Time).TotalSeconds <= 1)
                {
                    if (ReplaceDic.ContainsKey(value.ID))
                    {
                        Dictionary<string, int> _dic = ReplaceDic[value.ID];
                        if (_dic.ContainsKey("continue") && _dic["continue"] == 1)
                        {
                            return value.ID;
                        }
                    }
                }
            }
        }
        if (ReplaceDic.ContainsKey(taskID))
        {
            Dictionary<string, int> _dic = ReplaceDic[taskID];
            if (_dic.ContainsKey("continue") && _dic["continue"] == 1)
            {
                return taskID;
            }
        }
        return 0;
    }
    public void AutomaticTripToTask(int _taskID)//任务自动前往(任务添加)
    {
        // TODO YYL
        // try
        // {
        //     if (!allowAutoTaskMapIds.Contains(PlayerDatas.Instance.baseData.MapID))
        //     {
        //         return;
        //     }
        //     var _hero = PlayerDatas.Instance.hero;
        //     if (_hero != null)
        //     {
        //         if (MapArea.IsInMapArea(_hero.CurMapArea, MapArea.E_Type.Boss))
        //         {
        //             return;
        //         }
        //     }
        //     if (MainTaskDic.ContainsKey(_taskID))//主线任务
        //     {
        //         if (MainTaskDic[_taskID].MissionState == 0 || MainTaskDic[_taskID].MissionState == 3)
        //             return;
        //         if (MainTaskDic.ContainsKey(_taskID))
        //         {
        //             PlayerDatas.Instance.hero.Behaviour.StopHandupAI();
        //             if (PlayerDatas.Instance.baseData.LV != 1)
        //                 SnxxzGame.Instance.StartCoroutine(WaitForSkillFinished(_taskID));
        //             return;
        //         }
        //     }
        //     if (BountyDic.ContainsKey(_taskID))//赏金任务
        //     {
        //         if (BountyDic[_taskID].MissionState == 3 || BountyMotionBool)
        //         {
        //             return;
        //         }
        //         else
        //         {
        //             if (BountyDic.ContainsKey(_taskID))
        //             {
        //                 PlayerDatas.Instance.hero.Behaviour.StopHandupAI();
        //                 SnxxzGame.Instance.StartCoroutine(WaitForSkillFinished(_taskID));
        //                 return;
        //             }
        //         }
        //     }
        //     else if (FairyAuDic.ContainsKey(_taskID))//仙盟任务
        //     {
        //         if (FairyAuDic[_taskID].MissionState == 3 || FairyAuBool)
        //         {
        //             return;
        //         }
        //         if (FairyAuDic.ContainsKey(_taskID))
        //         {
        //             PlayerDatas.Instance.hero.Behaviour.StopHandupAI();
        //             SnxxzGame.Instance.StartCoroutine(WaitForSkillFinished(_taskID));
        //             return;
        //         }
        //     }
        //     else if (SideQuestsDic.ContainsKey(_taskID))
        //     {
        //         if (SideQuestsDic[_taskID].MissionState == 0 || SideQuestsDic[_taskID].MissionState == 3)
        //         {
        //             return;
        //         }
        //         else
        //         {
        //             PlayerDatas.Instance.hero.Behaviour.StopHandupAI();
        //             SnxxzGame.Instance.StartCoroutine(WaitForSkillFinished(_taskID));
        //             return;
        //         }
        //     }
        // }
        // catch (Exception ex)
        // {
        //     Debug.Log(ex);
        // }
    }
    public void RunTaskAwarInfo(HA708_tagMCRunTaskAwardInfo info)//通知跑环奖励记录
    {
        for (int i = 0; i < info.Cnt; i++)
        {
            if (!AwardRecordDic.ContainsKey(info.InfoList[i].Type))
            {
                RunTaskAwardRecord _RunTaskAwardRecord = new RunTaskAwardRecord();
                _RunTaskAwardRecord.Num = (int)info.InfoList[i].Num;
                _RunTaskAwardRecord.AwardState = info.InfoList[i].AwardState;
                AwardRecordDic.Add(info.InfoList[i].Type, _RunTaskAwardRecord);
            }
            else
            {
                AwardRecordDic[info.InfoList[i].Type].Num = (int)info.InfoList[i].Num;
                AwardRecordDic[info.InfoList[i].Type].AwardState = info.InfoList[i].AwardState;
            }
            if (info.InfoList[i].Type == (int)TaskTypenum.BountyMissionsType7)
            {
                BountyRewardsNumber = (int)info.InfoList[i].Num;
                if (Event_BountyRewards != null)
                    Event_BountyRewards((int)info.InfoList[i].Num, info.InfoList[i].AwardState);
            }
            else if (info.InfoList[i].Type == (int)TaskTypenum.FairyAuMissionType12)
            {
                OnFairyAuNumber = (int)info.InfoList[i].Num;
                if (Event_FairyAuReward != null)
                    Event_FairyAuReward((int)info.InfoList[i].Num, info.InfoList[i].AwardState);
            }
        }
    }
    // private IEnumerator WaitForSkillFinished(int _taskID)
    // {
    //     GA_Hero _hero = PlayerDatas.Instance.hero;
    //     if (_hero == null)
    //     {
    //         yield break;
    //     }
    //     while (_hero != null && _hero.SkillMgr.CurCastSkill != null &&
    //            _hero.SkillMgr.CurCastSkill.SkillCompelete == false)
    //     {
    //         yield return null;
    //     }
    //     yield return WaitingForSecondConst.WaitMS500;
    //     // 如果有守护, 则不拾取
    //     var equipIndex = EquipSet.ClientPlaceToServerPlace(new Int2(0, (int)RoleEquipType.Guard));
    //     var _itemModel = PackManager.Instance.GetItemByIndex(PackType.Equip, equipIndex);
    //     if (_itemModel == null || !GeneralDefine.GuardianPickUpID.Contains(_itemModel.itemId))
    //     {
    //         float _chkDistanceSqrt;
    //         DropItemManager.DropObject _obj = null;
    //         while (DropItemManager.HandupTryGetHeroItem(out _obj))
    //         {
    //             if (DropItemManager.StopMissionPickup)
    //             {
    //                 break;
    //             }
    //             if (MapTransferUtility.Instance.MapTransferDoType != MapTransferUtility.E_MapTransferDoType.None)
    //             {
    //                 break;
    //             }
    //             Vector3 _targetPosition = _obj.dropItem.transform.position;
    //             _chkDistanceSqrt = MathUtility.DistanceSqrtXZ(_hero.Pos, _targetPosition);
    //             if (_chkDistanceSqrt > 0.5f)
    //             {
    //                 if (_hero.State != E_ActorState.AutoRun)
    //                 {
    //                     _hero.MoveToPosition(_targetPosition);
    //                 }
    //             }
    //             yield return null;
    //         }
    //     }
    //     if (AdventureStage.Instance.IsInAdventureStage)
    //     {
    //         yield break;
    //     }
    //     if (NewBieCenter.Instance.inGuiding || ModelCenter.Instance.GetModel<TreasureModel>().newGotShowing
    //         || UIManager.Instance.IsOpened<TreasureChapterWin>())
    //     {
    //         yield break;
    //     }
    //     if (UIManager.Instance.IsOpened<TreasureBaseWin>())
    //     {
    //         yield break;
    //     }
    //     if (UIManager.Instance.IsOpened<MysteriousMissionWin>())
    //     {
    //         yield break;
    //     }
    //     if (CrossServerUtility.IsCrossServer())
    //     {
    //         yield break;
    //     }
    //     if (BossShowModel.Instance.BossShowing)
    //     {
    //         yield break;
    //     }
    //     if (BountyDic.ContainsKey(_taskID) || FairyAuDic.ContainsKey(_taskID))
    //     {
    //         yield return WaitingForSecondConst.WaitMS800;//缓冲一秒再进行
    //     }
    //     if (MainTaskDic.ContainsKey(_taskID))//主线等待表现
    //     {
    //         if (taskWait.wait)
    //         {
    //             yield return WaitingForSecondConst.GetWaitForSeconds(mainTaskAutoWaitTime);
    //         }
    //     }
    //     while(ClientSceneManager.Instance.isWaitPickup)
    //     {
    //         yield return null;
    //     }
    //     if (GA_Hero.s_MapSwitching)
    //     {
    //         yield break;
    //     }
    //     try
    //     {
    //         TaskMove(_taskID);
    //     }
    //     catch (Exception ex)
    //     {
    //         Debug.Log(ex);
    //     }
    // }
    public enum TaskStatus//任务状态
    {
        None = -5,//没有
        Normal = 0,//正常任务(绿)
        TreasureCardLevel = 1,//法宝卡级(红)
        CardLevel = 2,//等级卡级(红)
        Completed = 3,//立即完成任务
    }
    public TaskStatus GetTaskStatus(int taskID)
    {
        if (_DicTaskInformation.ContainsKey(taskID) && _DicTaskInformation[taskID].ContainsKey("kaji"))
        {
            var kaji = _DicTaskInformation[taskID]["kaji"];
            switch (int.Parse(kaji))
            {
                case 0:
                    return TaskStatus.Normal;
                case 1:
                    return TaskStatus.TreasureCardLevel;
                case 2:
                    return TaskStatus.CardLevel;
                case 3:
                    return TaskStatus.Completed;
                default:
                    return TaskStatus.None;
            }
        }
        else
        {
            return TaskStatus.None;
        }
    }
    private bool IsDungeon()//判断是否在副本中
    {
        return false;
        // if (ClientDungeonStageUtility.isClientDungeon)
        //     return true;
        // var mapId = PlayerDatas.Instance.baseData.MapID;
        // var mapConfig = MapConfig.Get(mapId);
        // return mapConfig != null && mapConfig.MapFBType != 0;
    }
    public bool IsGather(int npdId)//是否能采集NPC
    {
        // TODO YYL
        // var taskListConfig = TaskListConfig.Get(currentMission);
        // if (taskListConfig != null)
        // {
        //     int[] collectNPCList = taskListConfig.CollectNPC;
        //     var isTaskNPC = false;
        //     for (int i = 0; i < collectNPCList.Length; i++)
        //     {
        //         if (collectNPCList[i] == npdId)
        //         {
        //             isTaskNPC = true;
        //             break;
        //         }
        //     }
        //     if (isTaskNPC)
        //     {
        //         if ((collectNPCList.Length == 1 && collectNPCList[0] == 0) || GetTaskStatus(currentMission) != 0)
        //         {
        //             return false;
        //         }
        //     }
        // }
        return true;
    }
    public static bool IsOPenAutoResolve()//任务面板不开启自动挂机状态
    {
        bool _bool = true;
        // TODO YYL
        // if (UIManager.Instance.IsOpened<TaskBoxBGMWin>())
        // {
        //     _bool = false;
        // }
        // else if (UIManager.Instance.IsOpened<DefaultDialogueBoxWin>())
        // {
        //     _bool = false;
        // }
        // else if (UIManager.Instance.IsOpened<DialogueDuidanceWin>())
        // {
        //     _bool = false;
        // }
        return _bool;
    }
    private int BOUNTYTASK = 2009;//赏金任务
    private int FAIRYAUTASK = 3009;//仙盟任务
    private void TaskTerminationToHangUp(int taskID, int MissionState)//(完成任务后前往挂机地点)任务ID,任务状态
    {
        // TODO YYL
        // if (!isServerPrepare)
        // {
        //     return;
        // }
        // if ((taskID == BOUNTYTASK && MissionState == 1 && !BountyMotionBool && TaskAllocation.Instance.ForRingAllNumber() != 10)
        //     || (taskID == FAIRYAUTASK && MissionState == 1 && !FairyAuBool && TaskAllocation.Instance.FairyAuAllNumber() == 70))
        // {
        //     var mapModel = ModelCenter.Instance.GetModel<MapModel>();
        //     var point = mapModel.GetRecommendHangPoint();
        //     var config = MapEventPointConfig.Get(point);
        //     MapTransferUtility.Instance.MoveToNPC(config.NPCID);
        // }
    }
    public void CompletionOfTask(int TaskID)//任务完成
    {
        CA206_tagCMQuickFinishMission _CA206 = new CA206_tagCMQuickFinishMission();
        _CA206.MissionID = (uint)TaskID;
        _CA206.DoType = 0;
        GameNetSystem.Instance.SendInfo(_CA206);
    }
    public int SideQuestState(int TaskID)//关于查询任务的状态(-1没有此任务,0未接,1正在进行中,2可提交)
    {
        if (allMissionDict.ContainsKey(TaskID))
        {
            return allMissionDict[TaskID].MissionState;
        }
        else
        {
            return -1;
        }
    }
    public int GetQuestState(int _taskId)
    {
        if (allMissionDict.ContainsKey(_taskId))
        {
            return allMissionDict[_taskId].MissionState;
        }
        else
        {
            return -1;
        }
    }
    //--------主要用于记录任务列表选中条的智能性 (-_-||)
    public int TaskupToDate = 0;//获取最新任务ID
    public int GetOnTaskId = 0;
    public bool IsGetOnBool = false;
    private int NeedTime = 10;
    private DateTime dateTimeA;
    public void GetTaskGetOnNow(int TaskID, string DictKey)//记录下信息字典的ID
    {
        string key1Str = "on_kill_" + TaskID;
        string key2Str = "get_byid_" + TaskID;
        if (TaskID > 1 && (key1Str == DictKey || key2Str == DictKey))
        {
            GetOnTaskId = TaskID;
            dateTimeA = DateTime.Now;
        }
    }
    private void secondEvent()
    {
        TimeSpan timeS = DateTime.Now - dateTimeA;
        int timeSend = timeS.Seconds;
        if (timeSend >= NeedTime)
        {
            IsGetOnBool = true;
            GetOnTaskId = GetNowTaskID;//获取当前选中的ID
        }
        else
        {
            IsGetOnBool = false;
        }
        if (TaskOverBool)
        {
            Times += 1;
            if (Times >= NeedTime)
            {
                TaskOverBool = false;
            }
        }
        else
        {
            if (Times != 0)
            {
                Times = 0;
            }
        }
    }
    public bool IsTaskMove()
    {
        bool IsBool = false;
        if (!UIManager.Instance.IsOpened<MainWin>())
        {
            return IsBool;
        }
        if (PlayerDatas.Instance.baseData.LV > TaskAutoLv)
        {
            return IsBool;
        }
        if (GetTaskStatus(currentMission) == TaskStatus.Normal)
        {
            IsBool = true;
        }
        return IsBool;
    }
    public void TaskMove(int _taskID)
    {
        //  TODO YYL
        // if (allMissionDict.ContainsKey(_taskID) && !NewBieCenter.Instance.inGuiding)
        // {
        //     string _strTest = allMissionDict[_taskID].InforList;
        //     string strTask = TaskAllocation.Instance.GetTaskInfo(TASKINFOConfig.Get(_strTest).show_writing, _taskID);
        //     HrefAnalysis.Inst.ExcuteHrefEvent(strTask, 0, true);
        //     DropItemManager.StopMissionPickup = false;
        //     TaskAllocation.Instance.TaskTime = TimeUtility.ServerNow;
        // }
    }
    public class TaskWait
    {
        public bool wait
        {
            get
            {
                foreach (var key in taskWaits.Keys)
                {
                    if ((Time.realtimeSinceStartup - taskWaits[key]) < 1f)
                    {
#if UNITY_EDITOR
                        Debug.LogFormat("<color=#00ffff>由于{0}开始任务等待</color>", GetTaskWaitTypeLabel(key));
#endif
                        return true;
                    }
                }
                return false;
            }
        }
        Dictionary<TaskWaitType, float> taskWaits = new Dictionary<TaskWaitType, float>();
        public void Push(TaskWaitType type)
        {
            taskWaits[type] = Time.realtimeSinceStartup;
        }
#if UNITY_EDITOR
        static string GetTaskWaitTypeLabel(TaskWaitType waitType)
        {
            switch (waitType)
            {
                case TaskWaitType.TaskComplete:
                    return "主界面任务完成表现";
                case TaskWaitType.LevelUp:
                    return "玩家升级表现";
                case TaskWaitType.TreasureProgress:
                    return "法宝进度更新";
                case TaskWaitType.BetterEquip:
                    return "获得更好装备";
                default:
                    return waitType.ToString();
            }
        }
#endif
    }
    public enum TaskWaitType
    {
        TaskComplete,
        LevelUp,
        TreasureProgress,
        BetterEquip,
    }
}