コード例 #1
0
ファイル: TaskHandler.cs プロジェクト: cool8868/H5Nball
        /// <summary>
        /// 任务处理
        /// </summary>
        /// <param name="managerId"></param>
        /// <param name="requireType">任务</param>
        /// <param name="subParam"></param>
        /// <param name="thirdParam"></param>
        /// <param name="doneKey"></param>
        List <PopMessageEntity> Handler(Guid managerId, EnumTaskRequireFunc requireType, int count, int subParam = 0, int thirdParam = 0, string doneKey = "", bool sendByChat = false)
        {
            List <PopMessageEntity> popList = new List <PopMessageEntity>();

            try
            {
                var list = GetTaskList(managerId);

                foreach (var entity in list)
                {
                    var pop = Handler(entity, requireType, count, subParam, thirdParam, doneKey, sendByChat);
                    if (pop != null)
                    {
                        popList.Add(pop);
                    }
                }

                var pop2 = HandlerDaily(managerId, requireType, count, subParam, thirdParam, doneKey, sendByChat);
                if (pop2 != null)
                {
                    popList.Add(pop2);
                }
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("Task Handler", ex);
            }
            return(popList);
        }
コード例 #2
0
        /// <summary>
        /// 根据require获取任务
        /// </summary>
        /// <param name="type"></param>
        /// <param name="reqsub"></param>
        /// <param name="reqthird"></param>
        /// <param name="overstate"></param>
        /// <returns></returns>
        public List <ConfigTaskrequireEntity> GetAchievementTask(EnumTaskRequireFunc type, int reqsub = 0,
                                                                 int reqthird = 0, int overstate = 0)
        {
            var key = CreateKey((int)type, reqsub, reqthird, overstate);

            if (_taskAchievement.ContainsKey(key))
            {
                return(_taskAchievement[key]);
            }
            return(new List <ConfigTaskrequireEntity>());
        }
コード例 #3
0
ファイル: TaskHandler.cs プロジェクト: cool8868/H5Nball
        PopMessageEntity HandlerDaily(Guid managerId, EnumTaskRequireFunc requireType, int count, int subParam = 0,
                                      int thirdParam = 0, string doneKey = "", bool sendByChat = false)
        {
            var daily = TaskCore.Instance.GetDailyRecord(managerId);

            if (daily != null)
            {
                return(Handler(daily, requireType, count, subParam, thirdParam, doneKey, sendByChat));
            }
            return(null);
        }
コード例 #4
0
ファイル: TaskHandler.cs プロジェクト: cool8868/H5Nball
 bool CheckTaskRequire(ConfigTaskrequireEntity taskrequireEntity, EnumTaskRequireFunc requireType, int subParam = 0, int thirdParam = 0)
 {
     if (taskrequireEntity.RequireType == (int)requireType)
     {
         if (CheckTaskRequire(taskrequireEntity.OverState, taskrequireEntity.RequireSub, subParam) &&
             CheckTaskRequire(taskrequireEntity.OverState, taskrequireEntity.RequireThird, thirdParam))
         {
             return(true);
         }
     }
     return(false);
 }
コード例 #5
0
ファイル: TaskHandler.cs プロジェクト: cool8868/H5Nball
 private PopMessageEntity Handler(TaskDailyrecordEntity entity, EnumTaskRequireFunc requireType, int count, int subParam = 0,
                                  int thirdParam = 0, string doneKey = "", bool sendByChat = false)
 {
     try
     {
         var    taskList       = TaskCore.Instance.BuildDailyTaskList(entity);
         string allStepRecords = "";
         string allStatus      = "";
         string allCurtimes    = "";
         byte[] doneParam      = new byte[0];
         bool   needUpdate     = false;
         foreach (var taskEntity in taskList)
         {
             string stepRecord = taskEntity.StepRecord;
             int    curTimes   = taskEntity.CurTimes;
             int    status     = taskEntity.Status;
             if (status == (int)EnumTaskStatus.Init)
             {
                 if (doHandler(taskEntity.TaskId, count, ref doneParam, ref stepRecord, ref curTimes, ref status,
                               requireType, subParam,
                               thirdParam, doneKey))
                 {
                     needUpdate = true;
                 }
             }
             allStepRecords += stepRecord + "|";
             allStatus      += status + ",";
             allCurtimes    += curTimes + ",";
         }
         entity.DoneParam   = doneParam;
         entity.StepRecords = allStepRecords.Remove(allStepRecords.LastIndexOf('|'), 1);
         entity.CurTimes    = allCurtimes.TrimEnd(',');
         entity.Status      = allStatus.TrimEnd(',');
         if (needUpdate)
         {
             if (TaskDailyrecordMgr.Update(entity))
             {
                 //if (status == (int)EnumTaskStatus.Done)
                 //    return ChatHelper.SendTaskFinishPop(entity.ManagerId, entity.TaskId, sendByChat);
                 //else if (curTimes != oldTimes)
                 //{
                 //    return ChatHelper.SendTaskProgressPop(entity.ManagerId, entity.TaskId, curTimes, sendByChat);
                 //}
             }
         }
     }
     catch (Exception ex)
     {
         SystemlogMgr.Error("Task Handler", ex);
     }
     return(null);
 }
コード例 #6
0
ファイル: TaskHandler.cs プロジェクト: cool8868/H5Nball
 private PopMessageEntity Handler(TaskRecordEntity entity, EnumTaskRequireFunc requireType, int count, int subParam = 0,
                                  int thirdParam = 0, string doneKey = "", bool sendByChat = false)
 {
     try
     {
         if (entity.Status == (int)EnumTaskStatus.Done || entity.Status == (int)EnumTaskStatus.Pending)
         {
             return(null);
         }
         byte[] doneParam  = entity.DoneParam;
         string stepRecord = entity.StepRecord;
         int    oldTimes   = entity.CurTimes;
         int    curTimes   = entity.CurTimes;
         int    status     = entity.Status;
         if (doTaskHandler(entity.ManagerId, entity.TaskId, count, ref doneParam, ref stepRecord, ref curTimes, ref status, requireType, subParam,
                           thirdParam, doneKey))
         {
             entity.DoneParam  = doneParam;
             entity.StepRecord = stepRecord;
             entity.CurTimes   = curTimes;
             entity.Status     = status;
             if (TaskRecordMgr.Update(entity))
             {
                 //if (status == (int)EnumTaskStatus.Done)
                 //{
                 //    return ChatHelper.SendTaskFinishPop(entity.ManagerId, entity.TaskId, sendByChat);
                 //}
                 //else if (curTimes != oldTimes)
                 //{
                 //    return ChatHelper.SendTaskProgressPop(entity.ManagerId, entity.TaskId, curTimes, sendByChat);
                 //}
             }
         }
     }
     catch (Exception ex)
     {
         SystemlogMgr.Error("Task Handler", ex);
     }
     return(null);
 }
コード例 #7
0
ファイル: TaskHandler.cs プロジェクト: cool8868/H5Nball
        bool doTaskHandler(Guid managerId, int taskId, int count, ref byte[] doneParam, ref string stepRecord, ref int curTimes, ref int status,
                           EnumTaskRequireFunc requireType, int subParam = 0, int thirdParam = 0, string doneKey = "")
        {
            var taskCache = CacheFactory.TaskConfigCache.GetTask(taskId);

            if (taskCache == null)
            {
                SystemlogMgr.Error("TaskHandler", "no task config taskid:" + taskId);
                return(false);
            }
            if (taskCache.TaskType == (int)EnumTaskType.Achievement)
            {
                return(doAchievementHandler(managerId, taskId, count, ref doneParam, ref stepRecord, ref curTimes, ref status, requireType,
                                            subParam,
                                            thirdParam, doneKey));
            }
            else
            {
                return(doHandler(taskId, count, ref doneParam, ref stepRecord, ref curTimes, ref status, requireType,
                                 subParam,
                                 thirdParam, doneKey));
            }
        }
コード例 #8
0
        /// <summary>
        /// 更新成就背包
        /// </summary>
        /// <param name="managerId">经理ID</param>
        /// <param name="isOddDays">是否是单日</param>
        /// <param name="type">任务类型</param>
        /// <param name="isRank">是否是排名</param>
        /// <param name="isClear">是否清空数据</param>
        /// <param name="curTime">数量</param>
        /// <param name="isOverlay">是否叠加</param>
        /// <param name="reqsub">二级类型</param>
        /// <param name="reqthird">三级类型</param>
        /// <param name="overstate">四级类型</param>
        public void UpdateAchievementTaskPackage(Guid managerId, bool isOddDays, EnumTaskRequireFunc type, bool isRank, bool isClear, int curTime, bool isOverlay, int reqsub = 0,
                                                 int reqthird = 0, int overstate = 0, List <TaskRecordEntity> taskRecord = null, DbTransaction trans = null)
        {
            var taskList = CacheFactory.TaskConfigCache.GetAchievementTask(type, reqsub, reqthird, overstate);

            if (taskRecord == null)
            {
                taskRecord = TaskRecordMgr.GetManagerTaskList(managerId);
            }
            bool isUpdate = true;

            foreach (var item in taskRecord)
            {
                try
                {
                    if (item.Status != 0)
                    {
                        continue;
                    }
                    if (!taskList.Exists(r => r.TaskId == item.TaskId))
                    {
                        continue;
                    }
                    var taskConfig = CacheFactory.TaskConfigCache.GetTask(item.TaskId);
                    if (taskConfig == null)
                    {
                        continue;
                    }
                    if (isOddDays)
                    {
                        if (item.UpdateTime.Date != DateTime.Now.Date)
                        {
                            item.CurTimes = 0;
                        }
                    }
                    if (isOverlay)
                    {
                        item.CurTimes += curTime;
                    }
                    else
                    {
                        if (isRank)
                        {
                            if (item.CurTimes > curTime)
                            {
                                item.CurTimes = curTime;
                            }
                            else
                            {
                                isUpdate = false;
                            }
                        }
                        else
                        {
                            if (item.CurTimes < curTime)
                            {
                                item.CurTimes = curTime;
                            }
                            else
                            {
                                isUpdate = false;
                            }
                        }
                    }
                    if (isClear)
                    {
                        item.CurTimes = 0;
                    }

                    if (taskConfig.Times <= item.CurTimes)
                    {
                        item.Status = 1;
                        if (item.CurTimes > taskConfig.Times)
                        {
                            item.CurTimes = taskConfig.Times;
                        }
                    }
                    item.UpdateTime = DateTime.Now;
                    if (isUpdate)
                    {
                        TaskRecordMgr.Update(item, trans);
                    }
                }
                catch (Exception ex)
                {
                    SystemlogMgr.Error("增加成就任务记录", ex);
                }
            }
        }
コード例 #9
0
ファイル: TaskHandler.cs プロジェクト: cool8868/H5Nball
        bool doHandler(int taskId, int count, ref byte[] doneParam, ref string stepRecord, ref int curTimes, ref int status,
                       EnumTaskRequireFunc requireType, int subParam = 0, int thirdParam = 0, string doneKey = "")
        {
            try
            {
                if (count <= 0)//次数,对应一次分解6张卡这种情况
                {
                    count = 1;
                }
                var taskCache = CacheFactory.TaskConfigCache.GetTask(taskId);
                if (taskCache == null)
                {
                    SystemlogMgr.Error("TaskHandler", "no task config taskid:" + taskId);
                    return(false);
                }
                int tempRequireType = (int)requireType;
                if (!taskCache.RequireFuncDic.ContainsKey(tempRequireType))
                {
                    return(false);
                }
                TaskDoneRecordEntity doneRecordEntity = null;
                if (taskCache.UniqueConstraint)
                {
                    if (doneParam == null || doneParam.Length <= 0)
                    {
                        doneRecordEntity = new TaskDoneRecordEntity(taskCache.RequireList.Count);
                    }
                    else
                    {
                        doneRecordEntity = SerializationHelper.FromByte <TaskDoneRecordEntity>(doneParam);
                    }
                }
                var  stepArray = BuildStepArray(stepRecord, taskCache.RequireList.Count);
                bool sync      = false;
                for (int i = 0; i < taskCache.RequireList.Count; i++)
                {
                    if (doneRecordEntity != null)
                    {
                        if (doneRecordEntity.Records[i].Params.Contains(doneKey))
                        {
                            continue;
                        }
                    }
                    var taskrequireEntity = taskCache.RequireList[i];
                    //处理连胜
                    if (requireType == EnumTaskRequireFunc.LadderFight ||
                        requireType == EnumTaskRequireFunc.FriendMatchCount)
                    {
                        if (taskrequireEntity.RequireType == (int)requireType)
                        {
                            if (taskrequireEntity.RequireSub == (int)EnumTaskWinType.WinningStreak)
                            {
                                if (subParam == (int)EnumWinType.Win)
                                {
                                    subParam = (int)EnumTaskWinType.WinningStreak;
                                }
                                else
                                {
                                    subParam = 0;
                                    sync     = true;
                                    curTimes = 0;
                                }
                            }
                        }
                    }
                    if (CheckTaskRequire(taskrequireEntity, requireType, subParam, thirdParam))
                    {
                        if (doneRecordEntity != null)
                        {
                            doneRecordEntity.Records[i].Add(doneKey);
                        }
                        stepArray[i] = "1";
                        sync         = true;
                    }
                }
                bool isDone = true;
                foreach (var s in stepArray)
                {
                    if (s != "1")
                    {
                        isDone = false;
                        break;
                    }
                }

                if (isDone)
                {
                    sync      = true;
                    curTimes += count;
                    if (curTimes >= taskCache.Times)
                    {
                        status = (int)EnumTaskStatus.Done;
                    }
                    stepRecord = "";
                }
                else
                {
                    stepRecord = string.Join(",", stepArray);
                }
                if (sync)
                {
                    if (doneRecordEntity != null)
                    {
                        doneParam = SerializationHelper.ToByte(doneRecordEntity);
                    }
                }
                return(sync);
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("Task Handler", ex);
                return(false);
            }
        }
コード例 #10
0
ファイル: TaskHandler.cs プロジェクト: cool8868/H5Nball
        //成就任务
        private bool doAchievementHandler(Guid managerId, int taskId, int count, ref byte[] doneParam, ref string stepRecord, ref int curTimes, ref int status,
                                          EnumTaskRequireFunc requireType, int subParam = 0, int thirdParam = 0, string doneKey = "")
        {
            try
            {
                var taskCache = CacheFactory.TaskConfigCache.GetTask(taskId);
                if (taskCache == null)
                {
                    SystemlogMgr.Error("TaskHandler", "no task config taskid:" + taskId);
                    return(false);
                }
                int tempRequireType = (int)requireType;
                if (!taskCache.RequireFuncDic.ContainsKey(tempRequireType))
                {
                    return(false);
                }
                TaskDoneRecordEntity doneRecordEntity = null;
                if (taskCache.UniqueConstraint)
                {
                    if (doneParam == null || doneParam.Length <= 0)
                    {
                        doneRecordEntity = new TaskDoneRecordEntity(taskCache.RequireList.Count);
                    }
                    else
                    {
                        doneRecordEntity = SerializationHelper.FromByte <TaskDoneRecordEntity>(doneParam);
                    }
                }
                var  stepArray = BuildStepArray(stepRecord, taskCache.RequireList.Count);
                bool sync      = false;
                for (int i = 0; i < taskCache.RequireList.Count; i++)
                {
                    if (doneRecordEntity != null)
                    {
                        if (doneRecordEntity.Records[i].Params.Contains(doneKey))
                        {
                            continue;
                        }
                    }
                    var require = taskCache.RequireList[i];
                    if (require.RequireType == (int)EnumTaskRequireFunc.PlayCardCollection)
                    {
                        if (require.RequireSub != 0 && require.RequireSub <= 4)
                        {
                            var achievementManager = AchievementManagerMgr.GetById(managerId);
                            if (achievementManager != null)
                            {
                                switch (require.RequireSub)
                                {
                                case 4:
                                    curTimes = achievementManager.PurpleCardCount;
                                    break;

                                case 3:
                                    curTimes = achievementManager.OrangeCardCount;
                                    break;

                                case 2:
                                    curTimes = achievementManager.SilverCardCount;
                                    break;

                                case 1:
                                    curTimes = achievementManager.GoldCardCount;
                                    break;
                                }
                                stepArray[i] = "1";
                            }
                        }
                    }
                    else if (require.RequireType == (int)EnumTaskRequireFunc.PlayerCardLevel)
                    {
                        if (require.RequireSub != 0 && require.RequireSub <= 30)
                        {
                            var achievementManager = AchievementManagerMgr.GetById(managerId);
                            if (achievementManager != null)
                            {
                                switch (require.RequireSub)
                                {
                                case 5:
                                    curTimes = achievementManager.Level5CardCount;
                                    break;

                                case 10:
                                    curTimes = achievementManager.Level10CardCount;
                                    break;

                                case 20:
                                    curTimes = achievementManager.Level20CardCount;
                                    break;

                                case 30:
                                    curTimes = achievementManager.Level30CardCount;
                                    break;
                                }
                                stepArray[i] = "1";
                            }
                        }
                    }
                    else if (require.RequireType == (int)EnumTaskRequireFunc.LeagueChampionScore)
                    {
                        if (require.RequireSub != 0 && require.RequireSub <= 8)
                        {
                            var achievementManager = AchievementManagerMgr.GetById(managerId);
                            if (achievementManager != null)
                            {
                                switch (require.RequireSub)
                                {
                                case 1:
                                    if (achievementManager.LeagueScore1 >= require.RequireThird)
                                    {
                                        curTimes = 1;
                                    }
                                    break;

                                case 2:
                                    if (achievementManager.LeagueScore2 >= require.RequireThird)
                                    {
                                        curTimes = 1;
                                    }
                                    break;

                                case 3:
                                    if (achievementManager.LeagueScore3 >= require.RequireThird)
                                    {
                                        curTimes = 1;
                                    }
                                    break;

                                case 4:
                                    if (achievementManager.LeagueScore4 >= require.RequireThird)
                                    {
                                        curTimes = 1;
                                    }
                                    break;

                                case 5:
                                    if (achievementManager.LeagueScore5 >= require.RequireThird)
                                    {
                                        curTimes = 1;
                                    }
                                    break;

                                case 6:
                                    if (achievementManager.LeagueScore6 >= require.RequireThird)
                                    {
                                        curTimes = 1;
                                    }
                                    break;

                                case 7:
                                    if (achievementManager.LeagueScore7 >= require.RequireThird)
                                    {
                                        curTimes = 1;
                                    }
                                    break;

                                case 8:
                                    if (achievementManager.LeagueScore8 >= require.RequireThird)
                                    {
                                        curTimes = 1;
                                    }
                                    break;
                                }
                            }
                        }
                    }
                    else if (require.RequireType == (int)EnumTaskRequireFunc.DailyCupRank)
                    {
                        var achievementManager = AchievementManagerMgr.GetById(managerId);
                        if (achievementManager != null)
                        {
                            if (achievementManager.MaxDailyCupRank <= require.RequireSub)
                            {
                                curTimes     = 1;
                                stepArray[i] = "1";
                            }
                        }
                    }
                    if (require.RequireType == (int)EnumTaskRequireFunc.PkMatchGoals)
                    {
                        var achievementManager = AchievementManagerMgr.GetById(managerId);
                        if (achievementManager != null)
                        {
                            if (achievementManager.MaxPkMatchGoals >= curTimes)
                            {
                                curTimes     = achievementManager.MaxPkMatchGoals;
                                stepArray[i] = "1";
                            }
                        }
                    }
                    else if (require.RequireType == (int)EnumTaskRequireFunc.PkMatchDayGoals)
                    {
                        var achievementManager = AchievementManagerMgr.GetById(managerId);
                        if (achievementManager != null)
                        {
                            if (achievementManager.DayPkMatchGoals >= curTimes)
                            {
                                curTimes     = achievementManager.DayPkMatchGoals;
                                stepArray[i] = "1";
                            }
                        }
                    }
                    else if (require.RequireType == (int)EnumTaskRequireFunc.LadderWinCountSeason)
                    {
                        var achievementManager = AchievementManagerMgr.GetById(managerId);
                        if (achievementManager != null)
                        {
                            if (achievementManager.MaxLadderWin >= curTimes)
                            {
                                curTimes     = achievementManager.MaxLadderWin;
                                stepArray[i] = "1";
                            }
                        }
                    }
                    else if (require.RequireType == (int)EnumTaskRequireFunc.LadderMatchGoals)
                    {
                        var achievementManager = AchievementManagerMgr.GetById(managerId);
                        if (achievementManager != null)
                        {
                            if (achievementManager.MaxLadderGoals >= curTimes)
                            {
                                curTimes     = achievementManager.MaxLadderGoals;
                                stepArray[i] = "1";
                            }
                        }
                    }
                    else if (require.RequireType == (int)EnumTaskRequireFunc.FriendMatchWin)
                    {
                        var achievementManager = AchievementManagerMgr.GetById(managerId);
                        if (achievementManager != null)
                        {
                            if (achievementManager.MaxFriendWinComb >= curTimes)
                            {
                                curTimes     = achievementManager.MaxFriendWinComb;
                                stepArray[i] = "1";
                            }
                        }
                    }

                    else if (require.RequireType == (int)EnumTaskRequireFunc.PkOrFriendMatchCount)
                    {
                        var matchStat = NbMatchstatMgr.GetByManager(managerId);
                        if (matchStat != null)
                        {
                            var matchCount = 0;
                            foreach (var nbMatchstatEntity in matchStat)
                            {
                                if (nbMatchstatEntity.MatchType == (int)EnumMatchType.PlayerKill ||
                                    nbMatchstatEntity.MatchType == (int)EnumMatchType.Friend)
                                {
                                    matchCount += nbMatchstatEntity.TotalCount;
                                }
                            }
                            if (matchCount >= curTimes)
                            {
                                curTimes     = matchCount;
                                stepArray[i] = "1";
                            }
                        }
                    }
                    else if (require.RequireType == (int)EnumTaskRequireFunc.LadderMatchCount)
                    {
                        var matchStat = NbMatchstatMgr.GetByManagerAndType(managerId, (int)EnumMatchType.Ladder);
                        if (matchStat != null)
                        {
                            if (matchStat.TotalCount >= curTimes)
                            {
                                curTimes     = matchStat.TotalCount;
                                stepArray[i] = "1";
                            }
                        }
                    }
                    else if (require.RequireType == (int)EnumTaskRequireFunc.FriendMatchCount)
                    {
                        var matchStat = NbMatchstatMgr.GetByManagerAndType(managerId, (int)EnumMatchType.Friend);
                        if (matchStat != null)
                        {
                            if (matchStat.TotalCount >= curTimes)
                            {
                                curTimes     = matchStat.TotalCount;
                                stepArray[i] = "1";
                            }
                        }
                    }
                    else if (require.RequireType == (int)EnumTaskRequireFunc.LadderScore)
                    {
                        var ladderInfo = LadderCore.Instance.GetLadderManager(managerId);
                        if (ladderInfo != null)
                        {
                            if (ladderInfo.MaxScore >= require.RequireSub)
                            {
                                curTimes     = ladderInfo.MaxScore;
                                stepArray[i] = "1";
                            }
                        }
                    }
                    else if (require.RequireType == (int)EnumTaskRequireFunc.PlayerCardStrengthCollection)
                    {
                        var package = ItemCore.Instance.GetPackage(managerId,
                                                                   EnumTransactionType.AchievementUpdate);
                        if (package != null)
                        {
                            var cardCount = package.GetStrengthCardCount(require.RequireSub, require.RequireThird);
                            if (cardCount >= curTimes)
                            {
                                curTimes     = cardCount;
                                stepArray[i] = "1";
                            }
                        }
                    }
                    if (doneRecordEntity != null)
                    {
                        doneRecordEntity.Records[i].Add(doneKey);
                    }
                }
                bool isDone = true;
                foreach (var s in stepArray)
                {
                    if (s != "1")
                    {
                        isDone = false;
                        break;
                    }
                }

                if (isDone)
                {
                    sync = true;
                    if (curTimes >= taskCache.Times)
                    {
                        status = (int)EnumTaskStatus.Done;
                    }
                    stepRecord = "";
                }
                else
                {
                    stepRecord = string.Join(",", stepArray);
                }
                if (sync)
                {
                    if (doneRecordEntity != null)
                    {
                        doneParam = SerializationHelper.ToByte(doneRecordEntity);
                    }
                }
                return(sync);
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("Task Handler", ex);
                return(false);
            }
        }