Exemplo n.º 1
0
        public void Reset()
        {
            ClearAllTasks();
            SelectedTaskId = 0;
            BountyTaskInfo = null;
            IsNavigatingAcceptBountyTask   = false;
            FinishBountyTaskNoConfirm      = false;
            BountyTaskCoinReward           = 0;
            DoNotAutoRunBountyTaskNextTime = false;
            DoNotAutoRunGuildTaskNextTime  = false;
            IsNavigatingAcceptGuildTask    = false;
            IsNavigatingAcceptEscortTask   = false;
            FinishGuildTaskNoConfirm       = false;
            GuildTaskCtbReward             = 0;

            TaskNet.IsFirstReceiveTaskInfo       = true;
            TaskNet.IsFirstReceiveBountyTaskInfo = true;
            TaskNet.IsFirstReceiveGuildTaskInfo  = true;

            TaskNet.HaveReceivedTaskInfo = false;

            TaskDefine.ClearCache();
        }
Exemplo n.º 2
0
        public static string FillTemplateByContentList(string template, string[] param_list)
        {
            if (param_list.Length <= 0)
            {
                return(template);
            }
            if (string.IsNullOrEmpty(template))
            {
                return(string.Empty);
            }

            int index = 0;

            return(mNoticeRegex.Replace(template, new MatchEvaluator(
                                            delegate(Match match)
            {
                string ret = string.Empty;
                if (index >= param_list.Length)
                {
                    return ret;
                }

                string content = param_list [index];
                string target = match.ToString();
                if (target.Length >= 3)
                {
                    target = target.Substring(1, target.Length - 2);
                    EFillType contentType = (EFillType)(int.Parse(target));
                    uint contentNum = 0xffffffff;
                    try
                    {
                        contentNum = Convert.ToUInt32(content);
                    } catch
                    {
                        // Do nothing.
                    }

                    switch (contentType)
                    {
                    // 怪物名字是后端未经过翻译就发过来的,要翻译一下
                    case EFillType.MONSTER_NAME:
                        ret = xc.TextHelper.GetTranslateText(content);
                        break;

                    // 玩法场景名字是后端未经过翻译就发过来的,要翻译一下
                    case EFillType.ACTIVITY_SCENE_NAME:
                        ret = xc.TextHelper.GetTranslateText(content);
                        break;

                    case EFillType.COLOR_TYPE:
                        ret = GoodsHelper.GetGoodsColor(contentNum);
                        break;

                    case EFillType.CHAT_GOODS_TYPELINK:         // 物品超链接
                        {
                            if (param_list.Length >= 3)
                            {
                                uint playerId = Convert.ToUInt32(param_list[index - 2]);
                                uint goods_gid = Convert.ToUInt32(param_list[index - 1]);
                                ulong goods_oid = Convert.ToUInt64(content);

                                uint color_type = GoodsHelper.GetGoodsColorTypeByTypeId(goods_gid);
                                string color_str = GoodsHelper.GetGoodsColor(color_type);
                                string goods_name = GoodsHelper.GetGoodsOriginalNameByTypeId(goods_gid);

                                uint goodsType = GoodsHelper.GetGoodsType(goods_gid);
                                if (goodsType == GameConst.GIVE_TYPE_EQUIP ||        // 装备
                                    goodsType == GameConst.GIVE_TYPE_RIDE_EQUIP ||   // 坐骑装备
                                    goodsType == GameConst.GIVE_TYPE_MAGIC_EQUIP ||  // 法宝装备
                                    goodsType == GameConst.GIVE_TYPE_DECORATE ||     // 饰品
                                    goodsType == GameConst.GIVE_TYPE_ELEMENT_EP ||   // 元素装备
                                    goodsType == GameConst.GIVE_TYPE_GOD_EQUIP ||    // 神兵
                                    goodsType == GameConst.GIVE_TYPE_ARTIFACT_EP ||  // 神器装备
                                    goodsType == GameConst.GIVE_TYPE_FIVE_ELEM)      // 五行战印
                                {
                                    ret = string.Format(xc.TextHelper.GetConstText("CODE_TEXT_LOCALIZATION_20"), color_str, goods_name);
                                    ret = ret + "{" + playerId + "," + goods_oid + "," + goods_gid + "})";
                                }
                                else
                                {
                                    ret = string.Format(xc.TextHelper.GetConstText("CODE_TEXT_LOCALIZATION_21"), color_str, goods_name);
                                    ret = ret + "{" + playerId + "," + goods_gid + "})";
                                }
                            }
                            else
                            {
                                ret = content;
                            }
                        }
                        break;

                    case EFillType.CLIENT_GOODS_TYPELINK:       // 客户端物品超链接
                        {
                            uint goods_gid = Convert.ToUInt32(param_list[index - 1]);
                            uint goods_oid = contentNum;

                            uint color_type = GoodsHelper.GetGoodsColorTypeByTypeId(goods_gid);
                            string color_str = GoodsHelper.GetGoodsColor(color_type);
                            string goods_name = GoodsHelper.GetGoodsOriginalNameByTypeId(goods_gid);
                            ret = string.Format(xc.TextHelper.GetConstText("CODE_TEXT_LOCALIZATION_22"), color_str, goods_name);
                            ret = ret + "{" + content + "})";
                        }
                        break;

                    case EFillType.GOODS_GID:
                        ret = string.Empty;
                        break;

                    case EFillType.HIDE_PLAYER_ID:
                        ret = string.Empty;
                        break;

                    case EFillType.GOODS_GID_NEW:
                        {
                            if (param_list.Length >= 2)
                            {
                                uint playerId = Convert.ToUInt32(param_list[index - 1]);
                                uint goods_gid = Convert.ToUInt32(param_list[index]);

                                uint color_type = GoodsHelper.GetGoodsColorTypeByTypeId(goods_gid);
                                string color_str = GoodsHelper.GetGoodsColor(color_type);
                                string goods_name = GoodsHelper.GetGoodsOriginalNameByTypeId(goods_gid);
                                ret = string.Format(xc.TextHelper.GetConstText("CODE_TEXT_LOCALIZATION_21"), color_str, goods_name);
                                ret = ret + "{" + playerId + "," + goods_gid + "})";
                            }
                            else
                            {
                                ret = content;
                            }

                            break;
                        }

                    case EFillType.PET_ID:     // 守护ID(显示带守护品质颜色的守护名字)
                        {
                            uint pet_id = Convert.ToUInt32(content);
                            var pet_info = DBManager.Instance.GetDB <DBPet>().GetOnePetInfo(pet_id);
                            if (pet_info != null)
                            {
                                string color_str = GoodsHelper.GetGoodsColor(pet_info.Quality + 1);    //守护品质颜色和物品相差1
                                string actor_name = ActorHelper.GetActorName(pet_info.Actor_id);
                                ret = string.Format("{0}{1}</color>", color_str, actor_name);
                            }
                            else
                            {
                                ret = content;
                            }
                        }
                        break;

                    case EFillType.TITLE_ID:
                        {
                            uint title_id = Convert.ToUInt32(content);
                            var title_info = DBManager.Instance.GetDB <DBHonor>().GetData(title_id);
                            if (title_info != null)
                            {
                                string color_str = GoodsHelper.GetGoodsColor(title_info.Quality);
                                string title_name = title_info.Name;
                                ret = string.Format("{0}{1}</color>", color_str, title_name);
                            }
                            else
                            {
                                ret = content;
                            }
                        }
                        break;

                    case EFillType.QUAL_WORD:
                        {
                            uint qual = Convert.ToUInt32(content);
                            string color_str_name = GoodsHelper.GetGoodsColorName(qual);
                            string color_str = GoodsHelper.GetGoodsColor(qual);
                            ret = string.Format("{0}{1}</color>", color_str, color_str_name);
                        }
                        break;

                    case EFillType.TRANSFER_LV:
                        {
                            if (param_list.Length >= 2)
                            {
                                uint init_vocation = Convert.ToUInt32(param_list[index]);
                                uint transfer_lv = Convert.ToUInt32(param_list[index - 1]);
                                object[] param = { transfer_lv, init_vocation };
                                System.Type[] returnType = { typeof(string) };
                                object[] objs = LuaScriptMgr.Instance.CallLuaFunction_return(LuaScriptMgr.Instance.Lua.Global, "TransferMgr_GetVocationName", param, returnType);
                                if (objs != null && objs.Length > 0 && objs[0] != null)
                                {
                                    ret = (string)objs[0];
                                }
                                else
                                {
                                    ret = content;
                                }
                            }
                            else
                            {
                                ret = content;
                            }
                        }
                        break;

                    case EFillType.InitVocation:
                        ret = string.Empty;
                        break;

                    case EFillType.SHOW_TYPE_TO_NAME:     //外显系统ID =>外显系统名字
                        {
                            uint show_type = Convert.ToUInt32(param_list[index]);
                            object[] param = { show_type };
                            System.Type[] returnType = { typeof(string) };
                            object[] objs = LuaScriptMgr.Instance.CallLuaFunction_return(LuaScriptMgr.Instance.Lua.Global, "ShowManager_GetShowName", param, returnType);
                            if (objs != null && objs.Length > 0 && objs[0] != null)
                            {
                                ret = (string)objs[0];
                            }
                            else
                            {
                                ret = content;
                            }
                        }
                        break;

                    case EFillType.SHOW_TYPE_TO_PARAM:    //外显系统ID => 与25一起使用,组成外显系统的外观名字
                        {
                            ret = string.Empty;
                        }
                        break;

                    case EFillType.SHOW_TYPE_TO_FACADE_ID:
                        {
                            if (param_list.Length >= 2)
                            {
                                uint facade_id = Convert.ToUInt32(param_list[index]);
                                uint show_type = Convert.ToUInt32(param_list[index - 1]);
                                object[] param = { show_type, facade_id };
                                System.Type[] returnType = { typeof(string) };
                                object[] objs = LuaScriptMgr.Instance.CallLuaFunction_return(LuaScriptMgr.Instance.Lua.Global, "ShowManager_GetFacadeName", param, returnType);
                                if (objs != null && objs.Length > 0 && objs[0] != null)
                                {
                                    ret = (string)objs[0];
                                }
                                else
                                {
                                    ret = content;
                                }
                            }
                            else
                            {
                                ret = content;
                            }
                        }
                        break;

                    case EFillType.SHOW_TYPE_TO_SYS_ID:       //外显系统ID =>外显系统ID
                        {
                            uint show_type = Convert.ToUInt32(param_list[index]);
                            object[] param = { show_type };
                            System.Type[] returnType = { typeof(string) };
                            object[] objs = LuaScriptMgr.Instance.CallLuaFunction_return(LuaScriptMgr.Instance.Lua.Global, "ShowManager_GetSysIdStr", param, returnType);
                            if (objs != null && objs.Length > 0 && objs[0] != null)
                            {
                                ret = (string)objs[0];
                            }
                            else
                            {
                                ret = content;
                            }
                        }
                        break;

                    case EFillType.FASHION_NAME:       //时装
                        {
                            uint fashionId = Convert.ToUInt32(param_list[index]);
                            object[] param = { fashionId };
                            System.Type[] returnType = { typeof(string) };
                            object[] objs = LuaScriptMgr.Instance.CallLuaFunction_return(LuaScriptMgr.Instance.Lua.Global, "FashionManager_GetFashionNameWithColor", param, returnType);
                            if (objs != null && objs.Length > 0 && objs[0] != null)
                            {
                                ret = (string)objs[0];
                            }
                            else
                            {
                                ret = content;
                            }
                        }
                        break;

                    case EFillType.MALL_NAME:     //商城名字
                        {
                            uint mall_id = Convert.ToUInt32(param_list[index]);
                            var mall_tmpl = xc.DBManager.Instance.GetDB <DBMallType>().GetOneItem(mall_id);
                            if (mall_tmpl != null)
                            {
                                //string color_str = GoodsHelper.GetGoodsColor(mall_tmpl);
                                string tmall_name = mall_tmpl.Name;
                                //ret = string.Format("{0}{1}</color>", color_str, tmall_name);
                                ret = tmall_name;
                            }
                            else
                            {
                                ret = content;
                            }
                        }
                        break;

                    case EFillType.ESCORT_TASK_ID:     //护送任务的id
                        {
                            uint taskId = Convert.ToUInt32(param_list[index]);
                            TaskDefine taskDefine = TaskDefine.MakeDefine(taskId);
                            if (taskDefine != null)
                            {
                                ret = taskDefine.GetFollowNpcName(0);
                            }
                            else
                            {
                                ret = content;
                            }
                        }
                        break;

                    case EFillType.INSTANCE_ID:     //副本id
                        {
                            uint instanceId = Convert.ToUInt32(param_list[index]);
                            DBInstance.InstanceInfo instanceInfo = DBInstance.Instance.GetInstanceInfo(instanceId);
                            if (instanceInfo != null)
                            {
                                ret = instanceInfo.mName;
                            }
                            else
                            {
                                ret = content;
                            }
                        }
                        break;

                    case EFillType.GODWARE_ID:    //神器id
                        {
                            uint god_ware_id = Convert.ToUInt32(param_list[index]);
                            object[] param = { god_ware_id };
                            System.Type[] returnType = { typeof(string) };
                            object[] objs = LuaScriptMgr.Instance.CallLuaFunction_return(LuaScriptMgr.Instance.Lua.Global, "GodWareManager_GetGodWareName", param, returnType);
                            if (objs != null && objs.Length > 0 && objs[0] != null)
                            {
                                ret = (string)objs[0];
                            }
                            else
                            {
                                ret = content;
                            }
                        }
                        break;

                    case EFillType.TIMEFORMAT:
                        int time = Convert.ToInt32(param_list[index]);
                        string strShowTime = CommonTool.SecondsToStr_2(time);
                        ret = strShowTime;
                        break;

                    case EFillType.BIG_PACKET:
                        uint bigNum = Convert.ToUInt32(param_list[index]);
                        if (bigNum != 0)
                        {
                            //ret = string.Format("{0}个大红包,", bigNum);
                            ret = string.Format(xc.DBConstText.GetText("RAIN_RED_PACKET_BIG"), bigNum);
                        }
                        else
                        {
                            ret = "";
                        }
                        break;

                    case EFillType.SMALL_PACKET:
                        uint smallNum = Convert.ToUInt32(param_list[index]);
                        if (smallNum != 0)
                        {
                            //ret = string.Format("{0}个小红包,", smallNum);
                            ret = string.Format(xc.DBConstText.GetText("RAIN_RED_PACKET_SMALL"), smallNum);
                        }
                        else
                        {
                            ret = "";
                        }
                        break;

                    case EFillType.MARKET_ID:
                        {
                            uint goods_gid = Convert.ToUInt32(param_list[index - 1]);
                            uint goods_oid = contentNum;

                            uint color_type = GoodsHelper.GetGoodsColorTypeByTypeId(goods_gid);
                            string color_str = GoodsHelper.GetGoodsColor(color_type);
                            string goods_name = GoodsHelper.GetGoodsOriginalNameByTypeId(goods_gid);

                            // 【click={0}[{1}]</color>】(marketGoodsTips=
                            ret = string.Format(xc.TextHelper.GetConstText("GAME_CHAT_CLICK_MARKET_GOODS"), color_str, goods_name);
                            ret = ret + "{" + content + "})";
                        }
                        break;

                    case EFillType.CONTROL_ID:
                        var id = Convert.ToInt32(param_list[index]);
                        ret = SpanServerManager.Instance.GetServerNameByControlServerId((uint)id);
                        break;

                    case EFillType.CHANNEL_ID:
                        ret = ChannelHelper.GetChannelName(param_list[index]);
                        break;

                    default:
                        ret = xc.TextHelper.GetTranslateText(content);
                        break;
                    }
                }

                index++;
                return ret;
            }
                                            )));
        }
Exemplo n.º 3
0
 private ushort GetTaskType(uint task_id)
 {
     return(TaskDefine.GetTaskType(task_id));
 }
Exemplo n.º 4
0
        TaskDefine ReadReader(SqliteDataReader reader)
        {
            ushort     taskType = DBTextResource.ParseUS_s(GetReaderString(reader, "type"), 0);
            TaskDefine define   = new TaskDefine();

            define.Id = DBTextResource.ParseUI_s(GetReaderString(reader, "id"), 0);
            define.DescriptionBytes = GetReaderBytes(reader, "description");
            define.NameBytes        = GetReaderBytes(reader, "name");
            define.Type             = taskType;
            define.SubType          = DBTextResource.ParseUI_s(GetReaderString(reader, "sub_type"), 0);
            define.RequestLevelMin  = DBTextResource.ParseI_s(GetReaderString(reader, "lv_min"), 0);
            define.PreviousId       = DBTextResource.ParseUI_s(GetReaderString(reader, "pre_id"), 0);
            define.NextId           = DBTextResource.ParseUI_s(GetReaderString(reader, "next_id"), 0);
            define.NextId           = DBTextResource.ParseUI_s(GetReaderString(reader, "next_id"), 0);

            string serverStepRawsString       = GetReaderString(reader, "goals");
            string clientStepRawsString       = GetReaderString(reader, "steps");
            string navigationPointsRawsString = GetReaderString(reader, "navigation_points");

            define.Steps = TaskDefine.TaskStep.CreateStepsByRawString(serverStepRawsString, clientStepRawsString, navigationPointsRawsString);
            if (define.Steps == null || define.Steps.Count == 0)
            {
                GameDebug.LogError("Parse task " + define.Id + " error, step is empty!!!");
            }

            define.RewardIds = DBTextResource.ParseArrayUint(GetReaderString(reader, "reward_ids"), ",");
            define.GetSkills = DBTextResource.ParseArrayUint(GetReaderString(reader, "get_skills"), ",");
            define.IsShowGetSkillProgress = DBTextResource.ParseI_s(GetReaderString(reader, "is_show_get_skill_progress"), 0) == 0 ? false : true;
            define.ReceiveDialogId        = DBTextResource.ParseUI_s(GetReaderString(reader, "receive_dialog_id"), 0);
            define.SubmitDialogId         = DBTextResource.ParseUI_s(GetReaderString(reader, "submit_dialog_id"), 0);
            define.ReceiveNpc             = NpcScenePosition.Make(GetReaderString(reader, "receive_npc"));
            define.SubmitNpc     = NpcScenePosition.Make(GetReaderString(reader, "submit_npc"));
            define.AutoRunType   = (TaskDefine.EAutoRunType)DBTextResource.ParseBT_s(GetReaderString(reader, "auto_run"), 0);
            define.ShowPriority  = DBManager.Instance.GetDB <DBTaskPriority>().GetTaskPriority((int)taskType);
            define.ShowPriority2 = DBManager.Instance.GetDB <DBTaskPriority>().GetTaskPriority2((int)taskType);

            string raw = GetReaderString(reader, "is_temporary_on_top");

            if (string.IsNullOrEmpty(raw) == true || raw == "0")
            {
                define.IsTemporaryOnTop = false;
            }
            else
            {
                define.IsTemporaryOnTop = true;
            }

            string npcsRawString = GetReaderString(reader, "create_npcs_when_received");

            define.CreateNpcsWhenReceived = TaskDefine.MakeNpcScenePositions(npcsRawString);
            npcsRawString = GetReaderString(reader, "delete_npcs_when_received");
            define.DeleteNpcsWhenReceived = TaskDefine.MakeNpcScenePositions(npcsRawString);
            npcsRawString             = GetReaderString(reader, "create_npcs_when_done");
            define.CreateNpcsWhenDone = TaskDefine.MakeNpcScenePositions(npcsRawString);
            npcsRawString             = GetReaderString(reader, "delete_npcs_when_done");
            define.DeleteNpcsWhenDone = TaskDefine.MakeNpcScenePositions(npcsRawString);

            define.FollowNpcs         = TaskDefine.MakeNpcScenePositions(GetReaderString(reader, "follow_npcs"));
            define.CanUseBoots        = (DBTextResource.ParseI_s(GetReaderString(reader, "can_use_boots"), 0) > 0);
            define.ReceivedTimelineId = DBTextResource.ParseUI_s(GetReaderString(reader, "received_timeline_id"), 0);
            define.SubmitedTimelineId = DBTextResource.ParseUI_s(GetReaderString(reader, "submited_timeline_id"), 0);

            raw = GetReaderString(reader, "cost");
            if (string.IsNullOrEmpty(raw) == false)
            {
                define.Costs = DBTextResource.ParseArrayStringString(raw);
            }

            raw = GetReaderString(reader, "show_reward_goods_id");
            List <List <uint> > showRewardGoodsIdConfigs = DBTextResource.ParseArrayUintUint(raw);

            define.ShowRewardGoodsIds = new Dictionary <uint, uint>();
            define.ShowRewardGoodsIds.Clear();
            define.ShowRewardGoodsNums = new Dictionary <uint, uint>();
            define.ShowRewardGoodsNums.Clear();
            define.ShowRewardGoodsIsBinds = new Dictionary <uint, byte>();
            define.ShowRewardGoodsIsBinds.Clear();
            uint index = 1;

            foreach (List <uint> showRewardGoodsIdConfig in showRewardGoodsIdConfigs)
            {
                define.ShowRewardGoodsIds[index]     = showRewardGoodsIdConfig[0];
                define.ShowRewardGoodsNums[index]    = showRewardGoodsIdConfig[1];
                define.ShowRewardGoodsIsBinds[index] = (byte)showRewardGoodsIdConfig[2];
                ++index;
            }

            mTasksData.Add(define.Id, define);
            if (mTasksDataByType.ContainsKey(define.Type) == true)
            {
                mTasksDataByType[define.Type].Add(define.Id, define);
            }
            else
            {
                Dictionary <uint, TaskDefine> taskDefines = new Dictionary <uint, TaskDefine>();
                taskDefines.Clear();
                taskDefines.Add(define.Id, define);

                mTasksDataByType.Add(define.Type, taskDefines);
            }

            return(define);
        }
Exemplo n.º 5
0
        public static void HandleServerData(ushort protocol, byte[] data)
        {
            switch (protocol)
            {
            case NetMsg.MSG_TASK_INFO:
            {
                S2CTaskInfo pack = S2CPackBase.DeserializePack <S2CTaskInfo>(data);

                // 首先所有任务的置顶取消
                foreach (Task task in TaskManager.Instance.AllTasks)
                {
                    task.IsOnTop = false;
                }

                IsFirstReceiveTaskInfo = !Game.Instance.AllSystemInited;

                List <Task> newTasks = new List <Task>();
                newTasks.Clear();
                List <Task> finishedTasks = new List <Task>();
                finishedTasks.Clear();
                List <Task> newAcceptTasks = new List <Task>();
                newAcceptTasks.Clear();
                List <Task> doneTasks = new List <Task>();
                doneTasks.Clear();
                List <Task> tasksToGuide = new List <Task>();
                tasksToGuide.Clear();
                bool isTitleTaskChanged  = false;           // 头衔任务是否改变
                bool isEscortTaskChanged = false;           // 护送任务是否改变
                foreach (PkgTaskInfo taskInfo in pack.tasks)
                {
                    bool isNewTask = false;
                    if (TaskManager.Instance.HasTask(taskInfo.id))
                    {
                        TaskManager.Instance.DeleteTask(taskInfo.id);
                    }
                    else
                    {
                        isNewTask = true;
                    }

                    var dbTask = TaskDefine.MakeDefine(taskInfo.id);
                    if (dbTask == null)
                    {
                        GameDebug.LogError("Error!!! Can not find task data in db by id " + taskInfo.id);
                        continue;
                    }

                    Task task = new Task(dbTask);

                    uint index = 1;
                    foreach (var step in dbTask.Steps)
                    {
                        Task.StepProgress stepProgress = new Task.StepProgress();
                        stepProgress.StepId = index;
                        if (taskInfo.value.Count > 0)
                        {
                            stepProgress.CurrentValue = taskInfo.value[0];
                        }
                        else
                        {
                            stepProgress.CurrentValue = 0;
                        }

                        task.StepProgresss.Add(stepProgress);

                        ++index;
                    }

                    task.StepProgresss.Sort();
                    task.State     = taskInfo.state;
                    task.StartTime = taskInfo.start_time;
                    if (taskInfo.step > 0)
                    {
                        task.CurrentStepIndex = taskInfo.step - 1;
                    }
                    else
                    {
                        task.CurrentStepIndex = 0;
                    }

                    // 提高任务显示优先级
                    if (IsFirstReceiveTaskInfo == false)
                    {
                        // 头衔任务不受动态排序规则影响
                        if (task.Define.Type != GameConst.QUEST_TITLE)
                        {
                            Task.IncreaseCurDynamicShowPriority();
                            task.DynamicShowPriority = Task.CurDynamicShowPriority;
                        }
                    }

                    TaskManager.Instance.AddTask(task);

                    if (task.State == GameConst.QUEST_STATE_DONE)
                    {
                        Task.StepProgress   stepProgress = task.CurrentStepProgress;
                        TaskDefine.TaskStep curStep      = task.CurrentStep;
                        if (stepProgress != null && curStep != null)
                        {
                            stepProgress.CurrentValue = curStep.ExpectResult;
                        }
                    }

                    // 是否是新接取的任务
                    if (IsFirstReceiveTaskInfo == false && task.State == GameConst.QUEST_STATE_DOING)
                    {
                        if (task.CurrentStepProgress != null && task.CurrentStepProgress.CurrentValue == 0)
                        {
                            newAcceptTasks.Add(task);
                        }
                    }

                    // 是否自动执行,进入游戏首次收到这个消息不执行副本状态下不执行,新任务不执行,不是在追踪状态的任务不执行
                    if (IsFirstReceiveTaskInfo == false && SceneHelp.Instance.IsInNormalWild() == true && task.Define.AutoRunType != TaskDefine.EAutoRunType.None)
                    {
                        // 不可接或者失效的任务不可自动执行
                        if (taskInfo.state != GameConst.QUEST_STATE_UNACCEPT && taskInfo.state != GameConst.QUEST_STATE_INVALID)
                        {
                            if ((task.Define.AutoRunType == TaskDefine.EAutoRunType.AutoRun && InstanceManager.Instance.IsOnHook == false) || task.Define.AutoRunType == TaskDefine.EAutoRunType.ForceAutoRun)
                            {
                                // 如果当前正在导航的任务的自动执行是ForceAutoRun2,则其他任务的自动执行不会打断它
                                Task navigatingTask = TaskManager.Instance.NavigatingTask;
                                if (navigatingTask == null || navigatingTask.Define.AutoRunType != TaskDefine.EAutoRunType.ForceAutoRun2)
                                {
                                    if (taskInfo.state == GameConst.QUEST_STATE_DOING || taskInfo.state == GameConst.QUEST_STATE_DONE)
                                    {
                                        tasksToGuide.Add(task);
                                    }
                                }
                            }
                            else if (task.Define.AutoRunType == TaskDefine.EAutoRunType.ForceAutoRun2)
                            {
                                tasksToGuide.Add(task);
                            }
                        }
                    }

                    if (IsFirstReceiveTaskInfo == false)
                    {
                        if (taskInfo.state == GameConst.QUEST_STATE_FIN)
                        {
                            finishedTasks.Add(task);
                        }
                    }

                    if (IsFirstReceiveTaskInfo == false)
                    {
                        if (taskInfo.state == GameConst.QUEST_STATE_DONE)
                        {
                            doneTasks.Add(task);
                        }
                    }

                    // 任务进度飘字
                    if (isNewTask == false && taskInfo.state == GameConst.QUEST_STATE_DONE)
                    {
                        TaskHelper.ShowTaskProgressTips(task);
                    }

                    if (IsFirstReceiveTaskInfo == false && isNewTask == true)
                    {
                        newTasks.Add(task);
                    }

                    if (task.Define.Type == GameConst.QUEST_TITLE)
                    {
                        isTitleTaskChanged = true;
                    }
                    if (task.Define.Type == GameConst.QUEST_ESCORT)
                    {
                        isEscortTaskChanged = true;
                    }
                }

                //TaskManager.Instance.SortTaskList();

                //ClientEventMgr.Instance.FireEvent((int)ClientEvent.TASK_CHANGED, null);
                StartTaskChangedCoroutine();

                if (isTitleTaskChanged == true)
                {
                    ClientEventMgr.Instance.FireEvent((int)ClientEvent.TITLE_TASK_CHANGED, null);
                }
                if (isEscortTaskChanged == true)
                {
                    ClientEventMgr.Instance.FireEvent((int)ClientEvent.ESCORT_TASK_CHANGED, null);
                }

                if (finishedTasks.Count > 0)
                {
                    ClientEventMgr.Instance.FireEvent((int)ClientEvent.TASK_FINISHED, new CEventBaseArgs(finishedTasks[0].Define.Id));

                    if (finishedTasks[0].Define.SubmitedTimelineId > 0)
                    {
                        // 是否是婚宴剧情动画
                        if (finishedTasks[0].Define.SubmitedTimelineId == GameConstHelper.GetUint("GAME_WEDDING_DRAMA_TIMELINE_ID_1"))
                        {
                            TimelineManager.Instance.PlayWeddingChapelTimeline();
                        }
                        else
                        {
                            TimelineManager.Instance.Play(finishedTasks[0].Define.SubmitedTimelineId);
                        }
                    }
                }

                if (newAcceptTasks.Count > 0)
                {
                    ClientEventMgr.Instance.FireEvent((int)ClientEvent.TASK_NEW_ACCEPTED, new CEventBaseArgs(newAcceptTasks[0].Define.Id));

                    if (newAcceptTasks[0].Define.ReceivedTimelineId > 0)
                    {
                        // 是否是婚宴剧情动画
                        if (newAcceptTasks[0].Define.ReceivedTimelineId == GameConstHelper.GetUint("GAME_WEDDING_DRAMA_TIMELINE_ID_1"))
                        {
                            TimelineManager.Instance.PlayWeddingChapelTimeline();
                        }
                        else
                        {
                            TimelineManager.Instance.Play(newAcceptTasks[0].Define.ReceivedTimelineId);
                        }
                    }

                    // 如果在副本里面接受了AutoRun的赏金任务或者帮派任务,则Post一个TASK_GUIDE的event,等退出副本再次导航这个任务
                    if (SceneHelp.Instance.IsInInstance == true)
                    {
                        if ((newAcceptTasks[0].Define.AutoRunType == TaskDefine.EAutoRunType.AutoRun && InstanceManager.Instance.IsOnHook == false) || newAcceptTasks[0].Define.AutoRunType == TaskDefine.EAutoRunType.ForceAutoRun || newAcceptTasks[0].Define.AutoRunType == TaskDefine.EAutoRunType.ForceAutoRun2)
                        {
                            BountyTaskInfo bountyTaskInfo = TaskManager.Instance.BountyTaskInfo;
                            GuildTaskInfo  guildTaskInfo  = TaskManager.Instance.GuildTaskInfo;

                            // bountyTaskInfo.id == 0即首次接取赏金任务时不自动执行
                            if (newAcceptTasks[0].Define.Type == GameConst.QUEST_SG && !(bountyTaskInfo != null && bountyTaskInfo.id == 0))
                            {
                                ClientEventMgr.GetInstance().PostEvent((int)ClientEvent.TASK_GUIDE, new CEventBaseArgs(newAcceptTasks[0].Define.Id));
                            }
                            // guildTaskInfo.id == 0即首次接取帮派任务时不自动执行
                            else if (newAcceptTasks[0].Define.Type == GameConst.QUEST_GUILD && !(guildTaskInfo != null && guildTaskInfo.id == 0))
                            {
                                ClientEventMgr.GetInstance().PostEvent((int)ClientEvent.TASK_GUIDE, new CEventBaseArgs(newAcceptTasks[0].Define.Id));
                            }
                        }
                    }
                }

                if (doneTasks.Count > 0)
                {
                    ClientEventMgr.Instance.FireEvent((int)ClientEvent.TASK_CAN_SUBMIT, new CEventBaseArgs(doneTasks));
                }

                if (SceneHelp.Instance.IsInNormalWild() == true)
                {
                    if (tasksToGuide.Count > 0)
                    {
                        BountyTaskInfo bountyTaskInfo = TaskManager.Instance.BountyTaskInfo;
                        GuildTaskInfo  guildTaskInfo  = TaskManager.Instance.GuildTaskInfo;

                        // DoNotAutoRunBountyTaskNextTime为true不自动执行,bountyTaskInfo.id == 0即首次接取赏金任务时不自动执行
                        if (tasksToGuide[0].Define.Type == GameConst.QUEST_SG && (TaskManager.Instance.DoNotAutoRunBountyTaskNextTime == true || (bountyTaskInfo != null && bountyTaskInfo.id == 0)))
                        {
                            TaskManager.Instance.DoNotAutoRunBountyTaskNextTime = false;
                        }
                        // DoNotAutoRunGuildTaskNextTime为true不自动执行,guildTaskInfo.id == 0即首次接取帮派任务时不自动执行
                        else if (tasksToGuide[0].Define.Type == GameConst.QUEST_GUILD && (TaskManager.Instance.DoNotAutoRunGuildTaskNextTime == true || (guildTaskInfo != null && guildTaskInfo.id == 0)))
                        {
                            TaskManager.Instance.DoNotAutoRunGuildTaskNextTime = false;
                        }
                        else
                        {
                            // 正在主线任务导航的时候,则不能自动执行其他类型的任务
                            if ((TaskManager.Instance.IsNavigatingMainTask == false && TaskHelper.MainTaskIsInGuideCoroutine == false) || tasksToGuide[0].Define.Type == GameConst.QUEST_MAIN)
                            {
                                if (tasksToGuide[0].State != GameConst.QUEST_STATE_UNACCEPT && tasksToGuide[0].State != GameConst.QUEST_STATE_FIN && tasksToGuide[0].State != GameConst.QUEST_STATE_INVALID)
                                {
                                    if ((TaskManager.Instance.NavigatingTaskType == GameConst.QUEST_NONE || TaskManager.Instance.NavigatingTaskType == tasksToGuide[0].Define.Type) &&
                                        (TaskHelper.TaskTypeInGuideCoroutine == GameConst.QUEST_NONE || TaskHelper.TaskTypeInGuideCoroutine == tasksToGuide[0].Define.Type))
                                    {
                                        // 如果需要自动寻路的任务是第三级别的自动执行,则需要先停止其他的任务寻路
                                        if (tasksToGuide[0].Define.AutoRunType == TaskDefine.EAutoRunType.ForceAutoRun2)
                                        {
                                            TargetPathManager.Instance.StopPlayerAndReset();
                                        }
                                        TaskHelper.TaskGuide(tasksToGuide[0]);
                                    }
                                }
                            }
                        }
                    }
                }

                if (newTasks.Count > 0)
                {
                    ClientEventMgr.Instance.FireEvent((int)ClientEvent.TASK_ADDED, new CEventBaseArgs(newTasks[0].Define.Id));
                }

                TaskNet.HaveReceivedTaskInfo = true;

                break;
            }

            case NetMsg.MSG_TASK_DELETE:
            {
                S2CTaskDelete pack = S2CPackBase.DeserializePack <S2CTaskDelete>(data);

                Task navigatingTask = TaskManager.Instance.NavigatingTask;
                if (navigatingTask != null && navigatingTask.Define.Id == pack.id)
                {
                    TaskManager.Instance.NavigatingTask = null;
                    TargetPathManager.Instance.StopPlayerAndReset(false);
                }

                TaskManager.Instance.DeleteTask(pack.id);

                //ClientEventMgr.Instance.FireEvent((int)ClientEvent.TASK_CHANGED, null);
                StartTaskChangedCoroutine();

                break;
            }

            case NetMsg.MSG_TASK_VALUE:
            {
                S2CTaskValue pack = S2CPackBase.DeserializePack <S2CTaskValue>(data);

                // 其它所有任务的置顶取消
                foreach (Task tempTask in TaskManager.Instance.AllTasks)
                {
                    if (tempTask.Define.Id != pack.id)
                    {
                        tempTask.IsOnTop = false;
                    }
                }

                bool isDone = false;
                uint value  = 0;
                if (pack.value.Count > 0)
                {
                    isDone = TaskManager.Instance.ChangeTaskCurStepValue(pack.id, pack.value[0]);
                    value  = pack.value[0];
                }
                else
                {
                    isDone = TaskManager.Instance.ChangeTaskCurStepValue(pack.id, 0);
                }

                Task task = TaskManager.Instance.GetTask(pack.id);

                // 提高任务显示优先级,头衔任务不受动态排序规则影响
                if (task != null && task.Define.Type != GameConst.QUEST_TITLE)
                {
                    Task.IncreaseCurDynamicShowPriority();
                    task.DynamicShowPriority = Task.CurDynamicShowPriority;
                }

                //TaskManager.Instance.SortTaskList();

                if (SceneHelp.Instance.IsInNormalWild() == true)
                {
                    if ((isDone == true || InstanceManager.Instance.IsAutoFighting == false) && task != null && task.Define.AutoRunType != TaskDefine.EAutoRunType.None)
                    {
                        if ((task.Define.AutoRunType == TaskDefine.EAutoRunType.AutoRun && InstanceManager.Instance.IsOnHook == false) || task.Define.AutoRunType == TaskDefine.EAutoRunType.ForceAutoRun || task.Define.AutoRunType == TaskDefine.EAutoRunType.ForceAutoRun2)
                        {
                            // 正在主线任务导航的时候,则不能自动执行其他类型的任务
                            if ((TaskManager.Instance.IsNavigatingMainTask == false && TaskHelper.MainTaskIsInGuideCoroutine == false) || task.Define.Type == GameConst.QUEST_MAIN)
                            {
                                // 进度大于0才自动执行
                                if (value > 0)
                                {
                                    if ((TaskManager.Instance.NavigatingTaskType == GameConst.QUEST_NONE || TaskManager.Instance.NavigatingTaskType == task.Define.Type) &&
                                        (TaskHelper.TaskTypeInGuideCoroutine == GameConst.QUEST_NONE || TaskHelper.TaskTypeInGuideCoroutine == task.Define.Type))
                                    {
                                        TaskHelper.TaskGuide(task);
                                    }
                                }
                            }
                        }
                    }
                }

                ClientEventMgr.Instance.FireEvent((int)ClientEvent.TASK_PROGRESS_CHANGED, new CEventBaseArgs(pack.id));

                break;
            }

            case NetMsg.MSG_TASK_SG_INFO:
            {
                S2CTaskSgInfo pack = S2CPackBase.DeserializePack <S2CTaskSgInfo>(data);

                TaskManager.Instance.BountyTaskInfo = new BountyTaskInfo(pack.id, pack.num, pack.is_reward);
                if (TaskManager.Instance.BountyTaskInfo.id > 0 || TaskManager.Instance.BountyTaskInfo.is_reward == 0)
                {
                    TaskManager.Instance.BountyTaskCoinReward = 0;
                }

                ClientEventMgr.Instance.FireEvent((int)ClientEvent.BOUNTY_TASK_CHANGED, null);

                if (IsFirstReceiveBountyTaskInfo == false)
                {
                    if (TaskManager.Instance.BountyTaskInfo.num >= TaskHelper.GetBountyTaskMaxTimes() && TaskManager.Instance.BountyTaskInfo.is_reward == 0)
                    {
                        if (SceneHelp.Instance.IsInWildInstance() == true)
                        {
                            xc.ui.ugui.UIManager.Instance.ShowSysWindow("UITaskWindow", xc.GameConst.QUEST_SG, null);
                        }
                        else
                        {
                            ClientEventMgr.GetInstance().PostEvent((int)ClientEvent.OPEN_TASK_WINDOW, new CEventBaseArgs(xc.GameConst.QUEST_SG));
                        }
                    }
                }

                IsFirstReceiveBountyTaskInfo = false;

                xc.ui.ugui.UIManager.Instance.ShowWaitScreen(false);

                break;
            }

            case NetMsg.MSG_TASK_REWARD_SG:
            {
                S2CTaskRewardSg pack = S2CPackBase.DeserializePack <S2CTaskRewardSg>(data);

                TaskManager.Instance.BountyTaskCoinReward = pack.coin;

                ClientEventMgr.Instance.FireEvent((int)ClientEvent.BOUNTY_TASK_CHANGED, null);

                break;
            }

            case NetMsg.MSG_TASK_GUILD_INFO:
            {
                S2CTaskGuildInfo pack = S2CPackBase.DeserializePack <S2CTaskGuildInfo>(data);

                TaskManager.Instance.GuildTaskInfo = new GuildTaskInfo(pack.id, pack.num, pack.reward_state);
                //if (TaskManager.Instance.GuildTaskInfo.id > 0 || TaskManager.Instance.GuildTaskInfo.reward_state == 1)
                //{
                //    TaskManager.Instance.GuildTaskCtbReward = 0;
                //}

                ClientEventMgr.Instance.FireEvent((int)ClientEvent.GUILD_TASK_CHANGED, null);

                if (IsFirstReceiveGuildTaskInfo == false && TaskManager.Instance.GuildTaskInfo.reward_state == 1)
                {
                    if (TaskManager.Instance.GuildTaskInfo.num >= GameConstHelper.GetInt("GAME_QUEST_GUILD_PRE_NUM"))
                    {
                        if (SceneHelp.Instance.IsInWildInstance() == true)
                        {
                            xc.ui.ugui.UIManager.Instance.ShowSysWindow("UITaskWindow", xc.GameConst.QUEST_GUILD, null);
                        }
                        else
                        {
                            ClientEventMgr.GetInstance().PostEvent((int)ClientEvent.OPEN_TASK_WINDOW, new CEventBaseArgs(xc.GameConst.QUEST_GUILD));
                        }
                    }
                }

                IsFirstReceiveGuildTaskInfo = false;

                xc.ui.ugui.UIManager.Instance.ShowWaitScreen(false);

                break;
            }

            case NetMsg.MSG_TASK_REWARD_GUILD:
            {
                S2CTaskRewardGuild pack = S2CPackBase.DeserializePack <S2CTaskRewardGuild>(data);

                TaskManager.Instance.GuildTaskCtbReward = pack.ctb;

                ClientEventMgr.Instance.FireEvent((int)ClientEvent.GUILD_TASK_CHANGED, null);

                //UINotice.Instance.ShowMessage(string.Format(DBConstText.GetText("BAG_GET_GUILD_CTB"), pack.ctb));

                break;
            }

            case NetMsg.MSG_TASK_TRANSFER_INFO:
            {
                S2CTaskTransferInfo pack = S2CPackBase.DeserializePack <S2CTaskTransferInfo>(data);

                TaskManager.Instance.TransferTaskInfo = pack;

                ClientEventMgr.Instance.FireEvent((int)ClientEvent.TRANSFER_TASK_CHANGED, null);

                break;
            }

            case NetMsg.MSG_TASK_REWARD_TRANSFER:
            {
                //暂时没有用到
                break;
            }

            default: break;
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// 飞鞋
        /// </summary>
        public static bool TravelBootsJump(Vector3 pos, uint instanceId = 0, bool isFree = false, uint line = 1, bool isAutoFighting = false)
        {
            if (instanceId == 0)
            {
                instanceId = SceneHelp.Instance.CurSceneID;
            }

            if (PKModeManagerEx.Instance.TryToOtherDungeonScene() == false)
            {
                return(false);
            }

            DBInstance.InstanceInfo instanceInfo = DBInstance.Instance.GetInstanceInfo(instanceId);
            if (instanceInfo == null)
            {
                GameDebug.LogError("Travel boots ump to scene " + instanceId + " error, can not find instance info!!!");
                return(false);
            }

            // 本地玩家处于护送状态不能用飞鞋
            if (CheckLocalPlayerEscortTaskState() == false)
            {
                return(false);
            }

            // 检查道具
            if (isFree == false)
            {
                if (VipHelper.GetIsFlyFree() == false)
                {
                    uint need_goods = GameConstHelper.GetUint("GAME_ITEM_TRAVEL_BOOTS");
                    if (need_goods > 0)
                    {
                        var num = ItemManager.Instance.GetGoodsNumForBagByTypeId(need_goods);
                        if (num <= 0)
                        {
                            UINotice.Instance.ShowMessage(DBConstText.GetText("ITME_NUM_NOTENOUGH"));
                            return(false);
                        }
                    }
                }
            }

            bool isInstance = false;

            if (instanceInfo.mWarType == GameConst.WAR_TYPE_DUNGEON)
            {
                isInstance = true;
            }

            // 检查是否达到等级
            uint needLv = InstanceHelper.GetInstanceNeedRoleLevel(instanceId);

            if (LocalPlayerManager.Instance.LocalActorAttribute.Level < needLv)
            {
                // 巅峰等级
                uint   peakLv   = 0;
                bool   isPeak   = TransferHelper.IsPeak(needLv, out peakLv);
                string levelStr = "";
                if (isPeak)
                {
                    levelStr = string.Format(DBConstText.GetText("UI_PLAYER_PEAK_LEVEL_FORMAT_2"), peakLv); // 巅峰{0}
                }
                else
                {
                    levelStr = peakLv.ToString(); // {0}
                }
                if (isInstance == true)
                {
                    UINotice.Instance.ShowMessage(string.Format(DBConstText.GetText("INSTANCE_IS_NOT_UNLOCK_NEED_LEVEL"), levelStr));
                }
                else
                {
                    UINotice.Instance.ShowMessage(string.Format(DBConstText.GetText("WILD_INSTANCE_IS_NOT_UNLOCK_NEED_LEVEL"), levelStr));
                }
                return(false);
            }

            // 检查是否通关某主线任务
            uint needTaskId = instanceInfo.mNeedTaskId;

            if (needTaskId > 0)
            {
                if (TaskHelper.MainTaskIsPassed(needTaskId) == false)
                {
                    TaskDefine needTaskDefine = TaskDefine.MakeDefine(needTaskId);
                    if (needTaskDefine != null)
                    {
                        // 巅峰等级
                        uint   peakLv   = 0;
                        bool   isPeak   = TransferHelper.IsPeak((uint)needTaskDefine.RequestLevelMin, out peakLv);
                        string levelStr = "";
                        if (isPeak)
                        {
                            levelStr = string.Format(DBConstText.GetText("UI_PLAYER_PEAK_LEVEL_FORMAT_2"), peakLv); // 巅峰{0}
                        }
                        else
                        {
                            levelStr = peakLv.ToString(); // {0}
                        }
                        if (isInstance == true)
                        {
                            UINotice.Instance.ShowMessage(string.Format(DBConstText.GetText("INSTANCE_IS_NOT_UNLOCK_NEED_TASK"), levelStr, needTaskDefine.Name, instanceInfo.mName));
                        }
                        else
                        {
                            UINotice.Instance.ShowMessage(string.Format(DBConstText.GetText("WILD_INSTANCE_IS_NOT_UNLOCK_NEED_TASK"), levelStr, needTaskDefine.Name, instanceInfo.mName));
                        }
                    }
                    return(false);
                }
            }

            // 判断是否可到达
            if (instanceId == SceneHelp.Instance.CurSceneID)
            {
                if (InstanceHelper.CanWalkTo(pos) == false)
                {
                    UINotice.Instance.ShowMessage(DBConstText.GetText("MAP_POS_CAN_NOT_REACH"));
                    return(false);
                }
            }

            // 跳往不同的场景需要加个转圈,防止同时多次跳转
            if (instanceId != SceneHelp.Instance.CurSceneID)
            {
                ui.ugui.UIManager.GetInstance().ShowWaitScreen(true);
            }

            C2STravelBootsJump data = new C2STravelBootsJump();

            data.dungeon_id = instanceId;
            data.line       = line;
            PkgNwarPos pkgNwarPos = new PkgNwarPos();

            pkgNwarPos.px = (int)(pos.x / GlobalConst.UnitScale);
            pkgNwarPos.py = (int)(pos.z / GlobalConst.UnitScale);
            data.pos      = pkgNwarPos;
            if (isFree == true)
            {
                data.is_free = 1;
            }
            else
            {
                data.is_free = 0;
            }

            NetClient.BaseClient.SendData <C2STravelBootsJump>(NetMsg.MSG_TRAVEL_BOOTS_JUMP, data);

            SceneHelp.Instance.IsAutoFightingAfterSwitchInstance = isAutoFighting;

            InstanceManager.Instance.IsAutoFighting = false;

            return(true);
        }
Exemplo n.º 7
0
        public Task(TaskDefine task)
        {
            mDefine = task;

            IsOnTop = mDefine.IsTemporaryOnTop;
        }