Exemple #1
0
        /// <summary>
        /// 获取刷新星级
        /// </summary>
        /// <param name="currStar"></param>
        /// <param name="taskDate"></param>
        /// <returns></returns>
        public static TaskStar GetTaskStar(TaskStar currStar, DateTime taskDate)
        {
            TaskStar taskStar;

            if (currStar == TaskStar.Star5 &&
                (DateTime.Now.DayOfWeek != DayOfWeek.Monday ||
                 taskDate.DayOfWeek == DayOfWeek.Monday)
                )
            {
                //保留5星
                taskStar = currStar;
                return(taskStar);
            }
            string persent    = DailyIncreasePesent.Length > (int)currStar - 1 ? DailyIncreasePesent[(int)currStar - 1] : string.Empty;
            double persentNum = persent.ToDouble();
            bool   isIncrease = RandomUtils.IsHit(persentNum);

            if (isIncrease && currStar < TaskStar.Star5)
            {
                taskStar = (TaskStar)((int)currStar + 1);
            }
            else
            {
                taskStar = currStar;
            }

            return(taskStar);
        }
Exemple #2
0
 protected override object this[string index]
 {
     get
     {
         #region
         switch (index)
         {
             case "UserID": return UserID;
             case "TaskID": return TaskID;
             case "TaskType": return TaskType;
             case "TaskState": return TaskState;
             case "TaskStar": return TaskStar;
             case "TaskTargetNum": return TaskTargetNum;
             case "TakeDate": return TakeDate;
             case "CompleteNum": return CompleteNum;
             case "CreateDate": return CreateDate;
             default: throw new ArgumentException(string.Format("UserTask index[{0}] isn't exist.", index));
         }
         #endregion
     }
     set
     {
         #region
         switch (index)
         {
             case "UserID":
                 _UserID = value.ToNotNullString();
                 break;
             case "TaskID":
                 _TaskID = value.ToInt();
                 break;
             case "TaskType":
                 _TaskType = value.ToEnum<TaskType>();
                 break;
             case "TaskState":
                 _TaskState = value.ToEnum<TaskState>();
                 break;
             case "TaskStar":
                 _TaskStar = value.ToEnum<TaskStar>();
                 break;
             case "TaskTargetNum":
                 _TaskTargetNum = value.ToNotNullString();
                 break;
             case "TakeDate":
                 _TakeDate = value.ToDateTime();
                 break;
             case "CompleteNum":
                 _CompleteNum = value.ToInt();
                 break;
             case "CreateDate":
                 _CreateDate = value.ToDateTime();
                 break;
             default: throw new ArgumentException(string.Format("UserTask index[{0}] isn't exist.", index));
         }
         #endregion
     }
 }
Exemple #3
0
        /// <summary>
        /// 刷新日常任务,当天的记录不清空
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="userTask"></param>
        /// <returns></returns>
        public static List <UserTask> RefreshDailyTask(string userID, UserTask userTask)
        {
            List <UserTask> userTaskList = new GameDataCacheSet <UserTask>().FindAll(userID, m => !m.TaskState.Equals(TaskState.Disable) && m.TaskType.Equals(TaskType.Daily));

            foreach (UserTask userTaskTemp in userTaskList)
            {
                //关掉任务
                userTaskTemp.TaskState = TaskState.Disable;
                //userTaskTemp.Update();
            }

            TaskStar taskStar = TaskStar.Star1;

            if (userTask != null)
            {
                if (DateTime.Now.DayOfWeek == DayOfWeek.Monday && userTask.CreateDate.Date < DateTime.Now.Date)
                {
                    taskStar = TaskStar.Star1;
                }
                else
                {
                    taskStar = GetTaskStar(userTask.TaskStar, userTask.TakeDate);
                }
            }

            DailyTaskInfo[] dtaskList = RandomUtils.GetRandomArray(new ConfigCacheSet <DailyTaskInfo>().FindAll().ToArray(), DailyMaxCount);
            foreach (DailyTaskInfo item in dtaskList)
            {
                UserTask tempTask = new GameDataCacheSet <UserTask>().FindKey(userID, item.TaskID);
                if (tempTask == null)
                {
                    tempTask = new UserTask
                    {
                        UserID        = userID,
                        TaskID        = item.TaskID,
                        TaskType      = item.TaskType,
                        TaskStar      = taskStar,
                        TaskState     = TaskState.AllowTake,
                        TaskTargetNum = "0",
                        CompleteNum   = 0,
                        CreateDate    = DateTime.Now
                    };
                    new GameDataCacheSet <UserTask>().Add(tempTask);
                }
                else
                {
                    tempTask.TaskStar      = taskStar;
                    tempTask.TaskState     = TaskState.AllowTake;
                    tempTask.TaskTargetNum = "0";
                    if (!tempTask.CreateDate.Date.Equals(DateTime.Now.Date))
                    {
                        tempTask.CompleteNum = 0;
                    }
                    tempTask.CreateDate = DateTime.Now;
                }
            }

            return(new GameDataCacheSet <UserTask>().FindAll(userID,
                                                             m => m.TaskType.Equals(TaskType.Daily) &&
                                                             (m.TaskState.Equals(TaskState.Taked) || m.TaskState.Equals(TaskState.AllowTake) || m.TaskState.Equals(TaskState.Completed)) &&
                                                             m.CreateDate.Date.Equals(DateTime.Now.Date)
                                                             ));
        }
Exemple #4
0
        /// <summary>
        /// 获取刷新星级
        /// </summary>
        /// <param name="currStar"></param>
        /// <param name="taskDate"></param>
        /// <returns></returns>
        public static TaskStar GetTaskStar(TaskStar currStar, DateTime taskDate)
        {
            TaskStar taskStar;
            if (currStar == TaskStar.Star5 &&
                (DateTime.Now.DayOfWeek != DayOfWeek.Monday ||
                taskDate.DayOfWeek == DayOfWeek.Monday)
                )
            {
                //保留5星
                taskStar = currStar;
                return taskStar;
            }
            string persent = DailyIncreasePesent.Length > (int)currStar - 1 ? DailyIncreasePesent[(int)currStar - 1] : string.Empty;
            double persentNum = persent.ToDouble();
            bool isIncrease = RandomUtils.IsHit(persentNum);
            if (isIncrease && currStar < TaskStar.Star5)
            {
                taskStar = (TaskStar)((int)currStar + 1);
            }
            else
            {
                taskStar = currStar;
            }

            return taskStar;
        }
Exemple #5
0
        public override bool TakeAction()
        {
            TaskStar taskOpsStar = TaskStar.Star1;

            userLv         = ContextUser.UserLv;
            this.ErrorCode = ops;
            if (ops == 1)
            {
                if (!VipHelper.GetVipOpenFun(ContextUser.VipLv, ExpandType.RefreashDailyTask))
                {
                    ErrorCode = LanguageManager.GetLang().ErrorCode;
                    ErrorInfo = LanguageManager.GetLang().St_VipNotEnoughNotFuntion;
                    return(false);
                }
                List <UserTask> taskArray = new GameDataCacheSet <UserTask>().FindAll(ContextUser.UserID, u => u.TaskState == TaskState.AllowTake && u.TaskType == TaskType.Daily);
                if (taskArray.Count > 0)
                {
                    if (taskArray[0].TaskStar == TaskStar.Star5)
                    {
                        ErrorCode = LanguageManager.GetLang().ErrorCode;
                        ErrorInfo = LanguageManager.GetLang().St3005_RefreashStarFull;
                        return(false);
                    }
                }
                ErrorInfo = string.Format(LanguageManager.GetLang().St3005_RefreashUseGold, useProGold);
                return(false);
            }
            else if (ops == 2)
            {
                if (ContextUser.GoldNum < useProGold)
                {
                    ErrorCode = LanguageManager.GetLang().ErrorCode;
                    ErrorInfo = LanguageManager.GetLang().St_GoldNotEnough;
                    return(false);
                }

                List <UserTask> taskArray = new GameDataCacheSet <UserTask>().FindAll(ContextUser.UserID, u => u.TaskState != TaskState.Disable && u.TaskType == TaskType.Daily);
                if (taskArray.Count > 0)
                {
                    taskOpsStar = TaskHelper.GetTaskStar(taskArray[0].TaskStar, taskArray[0].TakeDate);
                }
                foreach (UserTask taskInfo in taskArray)
                {
                    taskInfo.TaskStar = taskOpsStar;
                    //taskInfo.Update();
                }
                ContextUser.UseGold = MathUtils.Addition(ContextUser.UseGold, useProGold, int.MaxValue);
                //ContextUser.Update();
                if (taskArray.Count > 0)
                {
                    userTaskList = taskArray;
                    //UserTask userTask = taskArray[0];
                    //刷新任务
                    //userTaskList = TaskHelper.RefreshDailyTask(ContextUser.UserID, userTask);
                }
            }
            else if (ops == 3)
            {
                if (!VipHelper.GetVipOpenFun(ContextUser.VipLv, ExpandType.ShuanChuMaxXingJiRenWu))
                {
                    this.ErrorCode = LanguageManager.GetLang().ErrorCode;
                    this.ErrorInfo = LanguageManager.GetLang().St_VipNotEnoughNotFuntion;
                    return(false);
                }
                this.ErrorInfo = string.Format(LanguageManager.GetLang().St3005_RefreashUseGold, useFullGold);
                return(false);
            }
            else if (ops == 4)
            {
                if (ContextUser.GoldNum < useFullGold)
                {
                    this.ErrorCode = LanguageManager.GetLang().ErrorCode;
                    this.ErrorInfo = LanguageManager.GetLang().St_GoldNotEnough;
                    return(false);
                }

                taskOpsStar = TaskStar.Star5;
                List <UserTask> taskArray = new GameDataCacheSet <UserTask>().FindAll(ContextUser.UserID, u => u.TaskState == TaskState.AllowTake && u.TaskType == TaskType.Daily);

                foreach (UserTask taskInfo in taskArray)
                {
                    taskInfo.TaskStar = taskOpsStar;
                    //taskInfo.Update();
                }
                if (taskArray.Count > 0)
                {
                    UserTask userTask = taskArray[0];
                    //刷新任务
                    userTaskList = TaskHelper.RefreshDailyTask(ContextUser.UserID, userTask);
                }

                ContextUser.UseGold = MathUtils.Addition(ContextUser.UseGold, useFullGold, int.MaxValue);
                //ContextUser.Update();
            }
            else if (ops == 5)
            {
                if (!VipHelper.GetVipOpenFun(ContextUser.VipLv, ExpandType.DailyRenWuZhiJieWanCheng))
                {
                    this.ErrorCode = LanguageManager.GetLang().ErrorCode;
                    this.ErrorInfo = LanguageManager.GetLang().St_VipNotEnoughNotFuntion;
                    return(false);
                }
                this.ErrorInfo = string.Format(LanguageManager.GetLang().St3005_CompletedUseGold, completedUseGold);
                return(false);
            }
            else if (ops == 6)
            {
                if (ContextUser.GoldNum < completedUseGold)
                {
                    this.ErrorCode = LanguageManager.GetLang().ErrorCode;
                    this.ErrorInfo = LanguageManager.GetLang().St_GoldNotEnough;
                    return(false);
                }

                List <UserTask> taskArray = new GameDataCacheSet <UserTask>().FindAll(ContextUser.UserID, u => u.TaskState == TaskState.Taked && u.TaskType == TaskType.Daily);
                if (taskArray.Count > 0)
                {
                    UserTask      userTask  = taskArray[0];
                    DailyTaskInfo dtaskInfo = new ConfigCacheSet <DailyTaskInfo>().FindKey(taskArray[0].TaskID);
                    //交付任务

                    //奖励
                    int userExp = ContextUser.ExpNum;
                    int expNum  = userTask.GetDailyExpNum(userLv);
                    ContextUser.ExpNum = MathUtils.Addition(ContextUser.ExpNum, expNum, int.MaxValue);
                    //ContextUser.Update();
                    var userItem = userTask.GetDailyItem(userLv);
                    if (userItem != null)
                    {
                        UserItemHelper.AddUserItem(ContextUser.UserID, userItem.ItemID, userItem.Num);
                    }
                    userTask.TaskState   = TaskState.Close;
                    userTask.CompleteNum = MathUtils.Addition(userTask.CompleteNum, 1, int.MaxValue);
                    //userTask.Update();
                    //奖励日志
                    UserTaskLog taskLog = new UserTaskLog()
                    {
                        LogID     = System.Guid.NewGuid().ToString(),
                        TaskID    = userTask.TaskID,
                        UserID    = userTask.UserID,
                        TaskType  = userTask.TaskType,
                        TaskState = userTask.TaskState,
                        TaskPrize = string.Format("ExpNum:{0},item:{1}={2};User expnum:{3}", expNum,
                                                  userItem != null ? userItem.ItemID : 0,
                                                  userItem != null ? userItem.Num : 0,
                                                  userExp
                                                  ),
                        CreateDate = DateTime.Now
                    };
                    var sender = DataSyncManager.GetDataSender();
                    sender.Send(taskLog);
                    //刷新任务
                    userTaskList = TaskHelper.RefreshDailyTask(ContextUser.UserID, userTask);

                    ContextUser.UseGold = MathUtils.Addition(ContextUser.UseGold, completedUseGold, int.MaxValue);
                    //ContextUser.Update();
                }
            }
            else if (ops == 0)
            {
                if (TaskID > 0)
                {
                    UserTask userTask = new GameDataCacheSet <UserTask>().FindKey(ContextUser.UserID, TaskID);
                    if (userTask == null || userTask.TaskState != TaskState.Completed)
                    {
                        this.ErrorCode = LanguageManager.GetLang().ErrorCode;
                        this.ErrorInfo = LanguageManager.GetLang().St3007_NoCompleted;
                        return(false);
                    }
                    if (TaskHelper.GetTaskCompleteNum(ContextUser.UserID) >= TaskHelper.DailyEveryMaxNum)
                    {
                        this.ErrorCode = LanguageManager.GetLang().ErrorCode;
                        this.ErrorInfo = LanguageManager.GetLang().St3005_CompletedTimeout;
                        return(false);
                    }
                    DailyTaskInfo dtaskInfo = new ConfigCacheSet <DailyTaskInfo>().FindKey(userTask.TaskID);
                    //交付任务

                    //奖励
                    int userExp = ContextUser.ExpNum;
                    int expNum  = userTask.GetDailyExpNum(userLv);
                    ContextUser.ExpNum = MathUtils.Addition(ContextUser.ExpNum, expNum, int.MaxValue);
                    //ContextUser.Update();
                    var userItem = userTask.GetDailyItem(userLv);
                    if (userItem != null)
                    {
                        UserItemHelper.AddUserItem(ContextUser.UserID, userItem.ItemID, userItem.Num);
                    }
                    userTask.TaskState   = TaskState.Close;
                    userTask.CompleteNum = MathUtils.Addition(userTask.CompleteNum, 1, int.MaxValue);
                    //userTask.Update();
                    //奖励日志
                    UserTaskLog taskLog = new UserTaskLog()
                    {
                        LogID     = System.Guid.NewGuid().ToString(),
                        TaskID    = userTask.TaskID,
                        UserID    = userTask.UserID,
                        TaskType  = userTask.TaskType,
                        TaskState = userTask.TaskState,
                        TaskPrize = string.Format("ExpNum:{0},item:{1}={2};User expnum:{3}", expNum,
                                                  userItem != null ? userItem.ItemID : 0,
                                                  userItem != null ? userItem.Num : 0,
                                                  userExp
                                                  ),
                        CreateDate = DateTime.Now
                    };

                    var sender = DataSyncManager.GetDataSender();
                    sender.Send(taskLog);
                    //刷新任务
                    userTaskList = TaskHelper.RefreshDailyTask(ContextUser.UserID, userTask);
                }
                else
                {
                    //刷新当天任务
                    if (!TaskHelper.CheckDailyTaskTimeout(ContextUser.UserID, out userTaskList))
                    {
                        userTaskList = new GameDataCacheSet <UserTask>().FindAll(ContextUser.UserID,
                                                                                 m => m.TaskType.Equals(TaskType.Daily) &&
                                                                                 !m.TaskState.Equals(TaskState.NoTake) &&
                                                                                 !m.TaskState.Equals(TaskState.Disable)
                                                                                 );
                    }

                    if (userTaskList.Count == 0)
                    {
                        //初始化时刷新任务
                        userTaskList = TaskHelper.RefreshDailyTask(ContextUser.UserID, null);
                    }

                    //刷新状态
                    foreach (UserTask userTask in userTaskList)
                    {
                        bool isModify = false;

                        if (userTask.TaskState == TaskState.Taked &&
                            userTask.TaskTargetNum.ToInt() >= (int)userTask.TaskStar)
                        {
                            isModify           = true;
                            userTask.TaskState = TaskState.Completed;
                        }
                        if (isModify)
                        {
                            //userTask.Update();
                        }
                    }
                }
            }

            //计算当天完成次数
            currNum = TaskHelper.GetTaskCompleteNum(ContextUser.UserID);
            return(true);
        }
Exemple #6
0
        protected override object this[string index]
        {
            get
            {
                #region
                switch (index)
                {
                case "UserID": return(UserID);

                case "TaskID": return(TaskID);

                case "TaskType": return(TaskType);

                case "TaskState": return(TaskState);

                case "TaskStar": return(TaskStar);

                case "TaskTargetNum": return(TaskTargetNum);

                case "TakeDate": return(TakeDate);

                case "CompleteNum": return(CompleteNum);

                case "CreateDate": return(CreateDate);

                default: throw new ArgumentException(string.Format("UserTask index[{0}] isn't exist.", index));
                }
                #endregion
            }
            set
            {
                #region
                switch (index)
                {
                case "UserID":
                    _UserID = value.ToNotNullString();
                    break;

                case "TaskID":
                    _TaskID = value.ToInt();
                    break;

                case "TaskType":
                    _TaskType = value.ToEnum <TaskType>();
                    break;

                case "TaskState":
                    _TaskState = value.ToEnum <TaskState>();
                    break;

                case "TaskStar":
                    _TaskStar = value.ToEnum <TaskStar>();
                    break;

                case "TaskTargetNum":
                    _TaskTargetNum = value.ToNotNullString();
                    break;

                case "TakeDate":
                    _TakeDate = value.ToDateTime();
                    break;

                case "CompleteNum":
                    _CompleteNum = value.ToInt();
                    break;

                case "CreateDate":
                    _CreateDate = value.ToDateTime();
                    break;

                default: throw new ArgumentException(string.Format("UserTask index[{0}] isn't exist.", index));
                }
                #endregion
            }
        }