Ejemplo n.º 1
0
 /// <summary>
 /// 根据grade获取是第几天活动的结束时的grade
 /// </summary>
 /// <param name="grade"></param>
 /// <returns></returns>
 public static int WhichDayResultByGrade(EZhengBaGrade grade)
 {
     if (grade == EZhengBaGrade.Grade100)
     {
         return(0);
     }
     else if (grade == EZhengBaGrade.Grade64)
     {
         return(1);
     }
     else if (grade == EZhengBaGrade.Grade32)
     {
         return(2);
     }
     else if (grade == EZhengBaGrade.Grade16)
     {
         return(3);
     }
     else if (grade == EZhengBaGrade.Grade8)
     {
         return(4);
     }
     else if (grade == EZhengBaGrade.Grade4)
     {
         return(5);
     }
     else if (grade == EZhengBaGrade.Grade2)
     {
         return(6);
     }
     else if (grade == EZhengBaGrade.Grade1)
     {
         return(7);
     }
     else
     {
         return(-1);
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// 修复日期
        /// </summary>
        /// <param name="now"></param>
        /// <returns></returns>
        private bool FixSyncData_State(DateTime now)
        {
            bool bForceModify = false;
            int  nowDay       = now.Day - ZhengBaConsts.StartMonthDay + 1;

            lock (Mutex)
            {
                // 检测已有的排行数据应该是活动的第几天的战斗结果
                int rankOfDay = ZhengBaConsts.ContinueDays;
                for (; rankOfDay >= 1; rankOfDay--)
                {
                    EZhengBaGrade              willUpGrade = ZhengBaUtils.GetDayUpGrade(rankOfDay);
                    ZhengBaMatchConfig         matchConfig = _Config.MatchConfigList.Find(_m => _m.Day == rankOfDay);
                    List <ZhengBaRoleInfoData> roleList    = SyncData.RoleList.FindAll(_r => _r.Grade == (int)willUpGrade);
                    if (roleList.Count <= 0)
                    {
                        continue;
                    }

                    int needUpNum = matchConfig.MaxUpGradeNum - roleList.Count;
                    if (needUpNum > 0)
                    {
                        List <ZhengBaRoleInfoData> upGradeList = new List <ZhengBaRoleInfoData>();
                        if (rankOfDay <= 3)
                        {
                            //补位选手 --- 被淘汰的角色按照晋级、段位进行排序
                            List <ZhengBaRoleInfoData> luckList = SyncData.RoleList.FindAll(_r => _r.Grade > (int)willUpGrade);
                            luckList.Sort((_l, _r) =>
                            {
                                if (_l.Grade < _r.Grade)
                                {
                                    return(-1);
                                }
                                else if (_l.Grade > _r.Grade)
                                {
                                    return(1);
                                }
                                else
                                {
                                    return(_l.DuanWeiRank - _r.DuanWeiRank);
                                }
                            });

                            foreach (var luckRole in luckList.GetRange(0, Math.Min(needUpNum, luckList.Count)))
                            {
                                upGradeList.Add(luckRole);
                                LogManager.WriteLog(LogTypes.Error, string.Format("晋级补位 [s{0}.{1}] {2}->{3}", luckRole.ZoneId, luckRole.RoleId, luckRole.Grade, (int)willUpGrade));
                                luckRole.Grade = (int)willUpGrade;
                                bForceModify   = true;
                            }
                        }
                        else
                        {
                            // 第4天开始就是固定分组pk了,要防止同一个组的两个人都补位晋级的情况
                            foreach (var range in ZhengBaUtils.GetDayPkGroupRange(rankOfDay))
                            {
                                // 找出这个group中,在rankOfDay-1天晋级的玩家列表,尝试选取一个晋级到rankOfDay中
                                var groupRoleList = SyncData.RoleList.FindAll(_r => _r.Group >= range.Left && _r.Group <= range.Right);
                                if (groupRoleList.Exists(_r => _r.Grade <= (int)ZhengBaUtils.GetDayUpGrade(rankOfDay)))
                                {
                                    continue; // 本分组已有人在本天已晋级
                                }
                                // 只从rankOfDay-1天晋级的玩家中挑选
                                groupRoleList.RemoveAll(_r => _r.Grade != (int)ZhengBaUtils.GetDayUpGrade(rankOfDay - 1));
                                if (groupRoleList.Count <= 0)
                                {
                                    continue;
                                }

                                // 段位高者晋级
                                groupRoleList.Sort((_l, _r) => { return(_l.DuanWeiRank - _r.DuanWeiRank); });
                                ZhengBaRoleInfoData selectRole = groupRoleList[0];
                                LogManager.WriteLog(LogTypes.Error, string.Format("晋级补位 [s{0}.{1}] {2}->{3}", selectRole.ZoneId, selectRole.RoleId, selectRole.Grade, (int)willUpGrade));
                                selectRole.Grade = (int)ZhengBaUtils.GetDayUpGrade(rankOfDay);
                                bForceModify     = true;
                                upGradeList.Add(selectRole);
                            }
                        }

                        foreach (var luckRole in upGradeList)
                        {
                            AsyncEvQ.Enqueue(new AsyncDataItem(KuaFuEventTypes.ZhengBaButtetinJoin, new ZhengBaBulletinJoinData()
                            {
                                NtfType = ZhengBaBulletinJoinData.ENtfType.MailUpgradeRole,
                                Args1   = luckRole.RoleId,
                            }));
                        }
                    }

                    break;
                }

                // rankOfDay 表示当前是第几天结束时的结果
                SyncData.RankResultOfDay = rankOfDay;
                SyncData.RealActDay      = rankOfDay;
                foreach (var role in SyncData.RoleList)
                {
                    if (rankOfDay <= 0)
                    {
                        if (role.Grade != (int)EZhengBaGrade.Grade100 ||
                            role.State != (int)EZhengBaState.None ||
                            role.Group != (int)ZhengBaConsts.NoneGroup)
                        {
                            role.Grade   = (int)EZhengBaGrade.Grade100;
                            role.State   = (int)EZhengBaState.None;
                            role.Group   = (int)ZhengBaConsts.NoneGroup;
                            bForceModify = true;
                        }
                    }
                    else
                    {
                        EZhengBaGrade upGrade = _Config.MatchConfigList.Find(_m => _m.Day == rankOfDay).WillUpGrade;
                        if (role.Grade <= (int)upGrade && role.State != (int)EZhengBaState.UpGrade)
                        {
                            role.State   = (int)EZhengBaState.UpGrade;
                            bForceModify = true;
                        }

                        if (role.Grade > (int)upGrade && role.State != (int)EZhengBaState.Failed)
                        {
                            role.State   = (int)EZhengBaState.Failed;
                            bForceModify = true;
                        }
                    }
                }

                // 检测是否推进到后一天,进入活动开始日期 , 并且当前的实际活动天数 小于 现实天数
                if (nowDay > 0 && SyncData.RealActDay < nowDay)
                {
                    // 不是活动的最后一天, 才能够尝试推进到下一天
                    if (SyncData.RealActDay < ZhengBaConsts.ContinueDays)
                    {
                        ZhengBaMatchConfig matchConfig = _Config.MatchConfigList.Find(_m => _m.Day == SyncData.RealActDay + 1);
                        if (now.TimeOfDay.Ticks < matchConfig.DayBeginTick)
                        {
                            // 当前时间小于下一天活动的开始时间,ok,推进到下一天, 这里的时间按照相对于凌晨的Ticks而言
                            SyncData.RealActDay++;
                        }
                    }
                    else
                    {
                        // 当前是第7天的数据,可以直接推进到下一天了
                        SyncData.RealActDay = ZhengBaConsts.ContinueDays + 1;
                    }
                }
            }

            return(bForceModify);
        }
Ejemplo n.º 3
0
        private static bool FixSyncData_State(DateTime now)
        {
            bool bForceModify = false;
            int  endID        = 0;

            lock (ZhanDuiZhengBa_K.Mutex)
            {
                if (now.Day > ZhanDuiZhengBaConsts.StartMonthDay)
                {
                    endID = ZhanDuiZhengBa_K._Config.MatchConfigList[ZhanDuiZhengBa_K._Config.MatchConfigList.Count - 1].ID;
                }
                else if (now.Day == ZhanDuiZhengBaConsts.StartMonthDay)
                {
                    for (int i = 0; i < ZhanDuiZhengBa_K._Config.MatchConfigList.Count; i++)
                    {
                        ZhanDuiZhengBaMatchConfig c0 = ZhanDuiZhengBa_K._Config.MatchConfigList[i];
                        if (now.TimeOfDay.Ticks < c0.DayBeginTick)
                        {
                            break;
                        }
                        if (now.TimeOfDay.Ticks >= c0.ResultTick)
                        {
                            endID = c0.ID;
                        }
                    }
                }
                if (endID == ZhanDuiZhengBaUtils.WhichDayResultByGrade(EZhengBaGrade.Grade1))
                {
                    ZhanDuiZhengBa_K.SyncData.HasSeasonEnd = true;
                    ZhanDuiZhengBa_K.SyncData.TopZhanDui   = ZhanDuiZhengBa_K.Persistence.GetLastTopZhanDui(ZhanDuiZhengBa_K.SyncData.Month);
                }
                else
                {
                    ZhanDuiZhengBa_K.SyncData.HasSeasonEnd = false;
                    ZhanDuiZhengBa_K.SyncData.TopZhanDui   = ZhanDuiZhengBa_K.Persistence.GetLastTopZhanDui(ZhengBaUtils.MakeMonth(now.AddMonths(-1)));
                }
                int id;
                for (id = 1; id <= endID; id++)
                {
                    ZhanDuiZhengBaMatchConfig        config      = ZhanDuiZhengBa_K._Config.MatchConfigList.Find((ZhanDuiZhengBaMatchConfig _m) => _m.ID == id);
                    EZhengBaGrade                    preGrade    = config.JoinGrade;
                    EZhengBaGrade                    willUpGrade = config.WillUpGrade;
                    List <ZhanDuiZhengBaZhanDuiData> roleList    = ZhanDuiZhengBa_K.SyncData.ZhanDuiList.FindAll((ZhanDuiZhengBaZhanDuiData _r) => _r.Grade > (int)willUpGrade);
                    if (roleList.Count > 0)
                    {
                        List <ZhanDuiZhengBaZhanDuiData> upGradeList = new List <ZhanDuiZhengBaZhanDuiData>();
                        using (List <RangeKey> .Enumerator enumerator = ZhanDuiZhengBaUtils.GetDayPkGroupRange(id).GetEnumerator())
                        {
                            while (enumerator.MoveNext())
                            {
                                RangeKey range = enumerator.Current;
                                List <ZhanDuiZhengBaZhanDuiData> groupRoleList = ZhanDuiZhengBa_K.SyncData.ZhanDuiList.FindAll((ZhanDuiZhengBaZhanDuiData _r) => _r.Group >= range.Left && _r.Group <= range.Right && _r.Grade <= (int)preGrade);
                                if (groupRoleList.Count != 0)
                                {
                                    if (!groupRoleList.Exists((ZhanDuiZhengBaZhanDuiData _r) => _r.Grade <= (int)willUpGrade))
                                    {
                                        groupRoleList.Sort(delegate(ZhanDuiZhengBaZhanDuiData _l, ZhanDuiZhengBaZhanDuiData _r)
                                        {
                                            int result;
                                            if (_l.Grade != _r.Grade)
                                            {
                                                result = _l.Grade - _r.Grade;
                                            }
                                            else
                                            {
                                                result = _l.DuanWeiRank - _r.DuanWeiRank;
                                            }
                                            return(result);
                                        });
                                        ZhanDuiZhengBaZhanDuiData selectRole = groupRoleList[0];
                                        LogManager.WriteLog(LogTypes.Error, string.Format("战队争霸::晋级补位 [s{0}.{1}] {2}->{3}", new object[]
                                        {
                                            selectRole.ZoneId,
                                            selectRole.ZhanDuiID,
                                            selectRole.Grade,
                                            (int)willUpGrade
                                        }), null, true);
                                        selectRole.Grade = (int)willUpGrade;
                                        bForceModify     = true;
                                        upGradeList.Add(selectRole);
                                        if (groupRoleList.Count >= 2)
                                        {
                                            ZhanDuiZhengBaZhanDuiData faildRole = groupRoleList[1];
                                            faildRole.Grade = (int)preGrade;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                ZhanDuiZhengBa_K.SyncData.RealActID = endID;
                foreach (ZhanDuiZhengBaZhanDuiData role in ZhanDuiZhengBa_K.SyncData.ZhanDuiList)
                {
                    if (endID <= 0)
                    {
                        if (role.Grade != 64 || role.State != 0)
                        {
                            role.Grade   = 64;
                            role.State   = 0;
                            bForceModify = true;
                        }
                    }
                    else
                    {
                        EZhengBaGrade upGrade = ZhanDuiZhengBa_K._Config.MatchConfigList.Find((ZhanDuiZhengBaMatchConfig _m) => _m.ID == endID).WillUpGrade;
                        if (role.Grade <= (int)upGrade && role.State != 1)
                        {
                            role.State   = 1;
                            bForceModify = true;
                        }
                        if (role.Grade > (int)upGrade && role.State != 2)
                        {
                            role.State   = 2;
                            bForceModify = true;
                        }
                        if (role.Grade == 1)
                        {
                            ZhanDuiZhengBa_K.SyncData.TopZhanDui = role.ZhanDuiID;
                        }
                    }
                }
            }
            return(bForceModify);
        }
Ejemplo n.º 4
0
        private bool FixSyncData_State(DateTime now)
        {
            bool bForceModify = false;
            int  nowDay       = now.Day - ZhengBaConsts.StartMonthDay + 1;

            lock (this.Mutex)
            {
                int rankOfDay;
                for (rankOfDay = 7; rankOfDay >= 1; rankOfDay--)
                {
                    EZhengBaGrade              willUpGrade = ZhengBaUtils.GetDayUpGrade(rankOfDay);
                    ZhengBaMatchConfig         matchConfig = this._Config.MatchConfigList.Find((ZhengBaMatchConfig _m) => _m.Day == rankOfDay);
                    List <ZhengBaRoleInfoData> roleList    = this.SyncData.RoleList.FindAll((ZhengBaRoleInfoData _r) => _r.Grade == (int)willUpGrade);
                    if (roleList.Count > 0)
                    {
                        int needUpNum = matchConfig.MaxUpGradeNum - roleList.Count;
                        if (needUpNum > 0)
                        {
                            List <ZhengBaRoleInfoData> upGradeList = new List <ZhengBaRoleInfoData>();
                            if (rankOfDay <= 3)
                            {
                                List <ZhengBaRoleInfoData> luckList = this.SyncData.RoleList.FindAll((ZhengBaRoleInfoData _r) => _r.Grade > (int)willUpGrade);
                                luckList.Sort(delegate(ZhengBaRoleInfoData _l, ZhengBaRoleInfoData _r)
                                {
                                    int result;
                                    if (_l.Grade < _r.Grade)
                                    {
                                        result = -1;
                                    }
                                    else if (_l.Grade > _r.Grade)
                                    {
                                        result = 1;
                                    }
                                    else
                                    {
                                        result = _l.DuanWeiRank - _r.DuanWeiRank;
                                    }
                                    return(result);
                                });
                                foreach (ZhengBaRoleInfoData luckRole in luckList.GetRange(0, Math.Min(needUpNum, luckList.Count)))
                                {
                                    upGradeList.Add(luckRole);
                                    LogManager.WriteLog(LogTypes.Error, string.Format("晋级补位 [s{0}.{1}] {2}->{3}", new object[]
                                    {
                                        luckRole.ZoneId,
                                        luckRole.RoleId,
                                        luckRole.Grade,
                                        (int)willUpGrade
                                    }), null, true);
                                    luckRole.Grade = (int)willUpGrade;
                                    bForceModify   = true;
                                }
                            }
                            else
                            {
                                using (List <RangeKey> .Enumerator enumerator2 = ZhengBaUtils.GetDayPkGroupRange(rankOfDay).GetEnumerator())
                                {
                                    while (enumerator2.MoveNext())
                                    {
                                        RangeKey range = enumerator2.Current;
                                        List <ZhengBaRoleInfoData> groupRoleList = this.SyncData.RoleList.FindAll((ZhengBaRoleInfoData _r) => _r.Group >= range.Left && _r.Group <= range.Right);
                                        if (!groupRoleList.Exists((ZhengBaRoleInfoData _r) => _r.Grade <= (int)ZhengBaUtils.GetDayUpGrade(rankOfDay)))
                                        {
                                            groupRoleList.RemoveAll((ZhengBaRoleInfoData _r) => _r.Grade != (int)ZhengBaUtils.GetDayUpGrade(rankOfDay - 1));
                                            if (groupRoleList.Count > 0)
                                            {
                                                groupRoleList.Sort((ZhengBaRoleInfoData _l, ZhengBaRoleInfoData _r) => _l.DuanWeiRank - _r.DuanWeiRank);
                                                ZhengBaRoleInfoData selectRole = groupRoleList[0];
                                                LogManager.WriteLog(LogTypes.Error, string.Format("晋级补位 [s{0}.{1}] {2}->{3}", new object[]
                                                {
                                                    selectRole.ZoneId,
                                                    selectRole.RoleId,
                                                    selectRole.Grade,
                                                    (int)willUpGrade
                                                }), null, true);
                                                selectRole.Grade = (int)ZhengBaUtils.GetDayUpGrade(rankOfDay);
                                                bForceModify     = true;
                                                upGradeList.Add(selectRole);
                                            }
                                        }
                                    }
                                }
                            }
                            foreach (ZhengBaRoleInfoData luckRole in upGradeList)
                            {
                                this.AsyncEvQ.Enqueue(new AsyncDataItem(KuaFuEventTypes.ZhengBaButtetinJoin, new object[]
                                {
                                    new ZhengBaBulletinJoinData
                                    {
                                        NtfType = ZhengBaBulletinJoinData.ENtfType.MailUpgradeRole,
                                        Args1   = luckRole.RoleId
                                    }
                                }));
                            }
                        }
                        break;
                    }
                }
                this.SyncData.RankResultOfDay = rankOfDay;
                this.SyncData.RealActDay      = rankOfDay;
                foreach (ZhengBaRoleInfoData role in this.SyncData.RoleList)
                {
                    if (rankOfDay <= 0)
                    {
                        if (role.Grade != 100 || role.State != 0 || role.Group != 0)
                        {
                            role.Grade   = 100;
                            role.State   = 0;
                            role.Group   = 0;
                            bForceModify = true;
                        }
                    }
                    else
                    {
                        EZhengBaGrade upGrade = this._Config.MatchConfigList.Find((ZhengBaMatchConfig _m) => _m.Day == rankOfDay).WillUpGrade;
                        if (role.Grade <= (int)upGrade && role.State != 1)
                        {
                            role.State   = 1;
                            bForceModify = true;
                        }
                        if (role.Grade > (int)upGrade && role.State != 2)
                        {
                            role.State   = 2;
                            bForceModify = true;
                        }
                    }
                    if (role.Grade == 1 && this.SyncData.LastKingModTime != this.SyncData.Month)
                    {
                        this.SyncData.LastKingData    = role;
                        this.SyncData.LastKingModTime = this.SyncData.Month;
                    }
                }
                if (nowDay > 0 && this.SyncData.RealActDay < nowDay)
                {
                    if (this.SyncData.RealActDay < 7)
                    {
                        ZhengBaMatchConfig matchConfig = this._Config.MatchConfigList.Find((ZhengBaMatchConfig _m) => _m.Day == this.SyncData.RealActDay + 1);
                        if (now.TimeOfDay.Ticks < matchConfig.DayBeginTick)
                        {
                            this.SyncData.RealActDay++;
                        }
                    }
                    else
                    {
                        this.SyncData.RealActDay = 8;
                    }
                }
            }
            return(bForceModify);
        }