/// <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); }
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 } }
/// <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) )); }
/// <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; }
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); }
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 } }