예제 #1
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>());
        }
예제 #2
0
        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;
                }
            }
        }