/// <summary> /// 检索目标数量 /// </summary> /// <param name="taskInfo"></param> /// <param name="plotNpcId"></param> /// <param name="currMonsterList"></param> /// <returns></returns> private static List <string> FindTargetMonsterNum(StoryTaskInfo taskInfo, int plotNpcId, string[] currMonsterList) { string[] targetMonsterList = taskInfo.TargetMonsterID.ToNotNullString().Split(','); string[] targetMonsterNumList = ObjectExtend.ToNotNullString(taskInfo.TargetMonsterNum).Split(','); List <string> targetNumList = new List <string>(); int index = 0; foreach (string monster in targetMonsterList) { int num = currMonsterList.Length > index?ObjectExtend.ToInt(currMonsterList[index]) : 0; int maxNum = targetMonsterNumList.Length > index?ObjectExtend.ToInt(targetMonsterNumList[index]) : 0; if (num < maxNum) { var plotEmbattleList = new ConfigCacheSet <PlotEmbattleInfo>().FindAll(m => m.PlotNpcID == plotNpcId); foreach (PlotEmbattleInfo plotEmbattle in plotEmbattleList) { if (plotEmbattle.MonsterID == ObjectExtend.ToInt(monster)) { num += 1; } } targetNumList.Add(num.ToString()); } else { targetNumList.Add(maxNum.ToString()); } index++; } return(targetNumList); }
/// <summary> /// 任务是否完成 /// </summary> /// <param name="user"></param> /// <param name="taskInfo"></param> /// <returns></returns> public static short IsComplete(GameUser user, StoryTaskInfo taskInfo) { UserTask userTask = new GameDataCacheSet <UserTask>().FindKey(user.UserID, taskInfo.TaskID); if (userTask != null && userTask.TaskState == TaskState.Close) { return(3); } if (taskInfo.TaskLv > user.UserLv) { return(0); } if (user.UserLv >= taskInfo.TaskLv) { int collectNum = TrumpHelper.GetUserItemNum(user.UserID, taskInfo.TargetItemID); if (collectNum >= taskInfo.TargetItemNum) { return(2); } else { return(1); } } return(0); }
/// <summary> /// 下发任务 /// </summary> /// <param name="user"></param> /// <param name="taskID"></param> public static List <UserTask> SendAllowTask(GameUser user, int taskID) { List <UserTask> userTaskList = new List <UserTask>(); var cacheSet = new GameDataCacheSet <UserTask>(); UserTask preTask = cacheSet.FindKey(user.UserID, taskID); if (taskID > 0 && preTask != null && (preTask.TaskState != TaskState.Close || preTask.TaskType == TaskType.Offset)) { return(userTaskList); } if (taskID == 0 && cacheSet.FindAll(user.UserID, m => m.TaskType < TaskType.Daily).Count > 0) { return(userTaskList); } IList <StoryTaskInfo> taskList = StoryTaskInfo.GetNextTask(taskID); bool isSend = true; foreach (StoryTaskInfo taskInfo in taskList) { if (taskInfo.CountryID != CountryType.None && user.CountryID != taskInfo.CountryID) { continue; } UserTask userTask = cacheSet.FindKey(user.UserID, taskInfo.TaskID); if (userTask == null) { userTask = new UserTask { TaskID = taskInfo.TaskID, UserID = user.UserID, TaskType = taskInfo.TaskType, TaskState = taskInfo.TaskLv <= user.UserLv ? TaskState.AllowTake : TaskState.NoTake, CompleteNum = 0, CreateDate = DateTime.Now }; cacheSet.Add(userTask); userTask = cacheSet.FindKey(user.UserID, taskInfo.TaskID); userTaskList.Add(userTask); } else { //判断是否已下发过 isSend = false; break; } } if (isSend) { return(userTaskList); } return(new List <UserTask>()); }
public static short IsComplete(GameUser user, StoryTaskInfo taskInfo) { if (user.UserLv >= taskInfo.TaskLv) { int collectNum = TrumpHelper.GetUserItemNum(user.UserID, taskInfo.TargetItemID); if (collectNum >= taskInfo.TargetItemNum) { return(1); } else { return(0); } } return(2); }
protected override void ProcessCmd(string[] args) { int taskID = args.Length > 0 ? args[0].Trim().ToInt() : 0; GameUser user = new GameDataCacheSet <GameUser>().FindKey(UserID); if (user == null) { UserCacheGlobal.Load(UserID); user = new GameDataCacheSet <GameUser>().FindKey(UserID); } var taskList = StoryTaskInfo.GetNextTask(taskID); foreach (StoryTaskInfo taskInfo in taskList) { if (taskInfo.CountryID != CountryType.None && user.CountryID != taskInfo.CountryID) { continue; } var cacheSet = new GameDataCacheSet <UserTask>(); UserTask userTask = cacheSet.FindKey(UserID, taskInfo.TaskID); if (userTask == null) { userTask = new UserTask { TaskID = taskInfo.TaskID, UserID = UserID, TaskType = taskInfo.TaskType, TaskState = TaskState.AllowTake, CreateDate = DateTime.Now }; cacheSet.Add(userTask, GameEnvironment.CacheUserPeriod); } else { userTask.TaskState = TaskState.AllowTake; } } }
public override bool TakeAction() { bool result = true; taskInfo = new ConfigCacheSet <StoryTaskInfo>().FindKey(TaskID); if (taskInfo == null) { ErrorCode = LanguageManager.GetLang().ErrorCode; //this.ErrorInfo = LanguageManager.GetLang().St3002_NotFind; SaveLog(new Exception(string.Format("{0},User:{1},task:{2}", LanguageManager.GetLang().St3002_NotFind, ContextUser.UserID, TaskID))); return(false); } _userGeneral = UserGeneral.GetMainGeneral(Uid); //获得奖励 UserTask userTask = new GameDataCacheSet <UserTask>().FindKey(ContextUser.UserID, TaskID); if (userTask == null || userTask.TaskState != TaskState.Completed) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St3007_NoCompleted; return(false); } //交付物品任务扣除材料 if (taskInfo.TermsType == PlotTermsType.Shouji || taskInfo.TermsType == PlotTermsType.Delivery) { UserItemHelper.UseUserItem(Uid, taskInfo.TargetItemID, taskInfo.TargetItemNum); } userTask.TaskState = TaskState.Close; UserTaskLog taskLog = new UserTaskLog() { LogID = Guid.NewGuid().ToString(), TaskID = userTask.TaskID, UserID = userTask.UserID, TaskType = userTask.TaskType, TaskState = userTask.TaskState, TaskPrize = string.Format("Experience:{0},GameCoin:{1};GameCoin:{2} ", taskInfo.Experience, taskInfo.GameCoin, ContextUser.GameCoin ), CreateDate = DateTime.Now }; var sender = DataSyncManager.GetDataSender(); sender.Send(taskLog); ContextUser.GameCoin = MathUtils.Addition(ContextUser.GameCoin, taskInfo.GameCoin, int.MaxValue); if (taskInfo.TaskType == TaskType.Master && ContextUser.TaskProgress < TaskID) { ContextUser.TaskProgress = TaskID; } //ContextUser.Update(); //任务加佣兵经验 //var userEmbattles = new GameDataCacheSet<UserEmbattle>().FindAll(UserEmbattle.Index_UserID_MagicID, Uid, ContextUser.UseMagicID); //foreach (var userEmbattle in userEmbattles) //{ // UserGeneral userGeneral = new GameDataCacheSet<UserGeneral>().FindKey(ContextUser.UserID, userEmbattle.GeneralID); // if (userGeneral == null) continue; // userGeneral.CurrExperience = MathUtils.Addition(userGeneral.CurrExperience, taskInfo.Experience, int.MaxValue); // //userGeneral.Update(); //} UserHelper.UserGeneralExp(ContextUser.UserID, taskInfo.Experience); //开启功能 TaskHelper.EnableFunction(ContextUser, taskInfo.FunctionEnum); //下发可接任务 TaskHelper.SendAllowTask(ContextUser, TaskID); //开启副本 PlotHelper.EnablePlot(Uid, taskInfo.EnablePlot); //保留主线任务 var cacheSet = new GameDataCacheSet <UserTask>(); if (userTask.TaskType == TaskType.Master) { //userTask.Update(); } else { //原因:最后支线任务无限刷新BUG if (!TaskHelper.IsLastTask(userTask)) { cacheSet.Delete(userTask); } } return(result); }