private List <ZhanDuiZhengBaZhanDuiData> LoadZhengBaRankData(int nowMonth) { List <ZhanDuiZhengBaZhanDuiData> roleList = new List <ZhanDuiZhengBaZhanDuiData>(); try { string strSql = string.Format("SELECT zhanduiid,zhanduiname,zoneid,duanweiid,duanweijifen,duanweirank,zhanli,grade,`group`,state,data1,data2 FROM t_zhandui_zhengba where `month`={0} ORDER BY duanweirank ASC;", nowMonth); using (MySqlDataReader sdr = DbHelperMySQL.ExecuteReader(strSql, false)) { while (sdr != null && sdr.Read()) { ZhanDuiZhengBaZhanDuiData roleData = new ZhanDuiZhengBaZhanDuiData(); roleData.ZhanDuiID = Convert.ToInt32(sdr["zhanduiid"]); roleData.ZoneId = Convert.ToInt32(sdr["zoneid"]); roleData.ZhanDuiName = sdr["zhanduiname"].ToString(); roleData.DuanWeiId = Convert.ToInt32(sdr["duanweiid"]); roleData.DuanWeiRank = Convert.ToInt32(sdr["duanweirank"]); roleData.ZhanLi = Convert.ToInt64(sdr["zhanli"]); if (!sdr.IsDBNull(sdr.GetOrdinal("data1"))) { byte[] bytes = (byte[])sdr["data1"]; roleData.MemberList = DataHelper2.BytesToObject <List <RoleOccuNameZhanLi> >(bytes, 0, bytes.Length); } roleData.Grade = Convert.ToInt32(sdr["grade"]); roleData.Group = Convert.ToInt32(sdr["group"]); roleData.State = Convert.ToInt32(sdr["state"]); roleList.Add(roleData); } } } catch (Exception ex) { LogManager.WriteException(ex.ToString()); } return(roleList); }
public static List <ZhanDuiZhengBaNtfPkResultData> ZhengBaPkResult(int gameId, int winner1) { List <ZhanDuiZhengBaNtfPkResultData> result; lock (ZhanDuiZhengBa_K.Mutex) { LogManager.WriteLog(LogTypes.Trace, string.Format("ZhanDuiZhengBa::ZhengBaPkResult,gameid={0},winner1={1}", gameId, winner1), null, true); ZhanDuiZhengBaPkLogData log = null; if (!ZhanDuiZhengBa_K.ThisLoopPkLogs.TryGetValue(gameId, out log)) { result = null; } else if (winner1 != log.ZhanDuiID1 && winner1 != log.ZhanDuiID2) { result = null; } else { ZhanDuiZhengBaMatchConfig matchConfig = ZhanDuiZhengBa_K._Config.MatchConfigList.Find((ZhanDuiZhengBaMatchConfig _m) => _m.ID == log.ID); ZhanDuiZhengBa_K.JoinRolePkData winJoinRole = ZhanDuiZhengBa_K.TodayJoinRoleDatas.Find((ZhanDuiZhengBa_K.JoinRolePkData _r) => _r.ZhanDuiID == winner1 && _r.CurrGameID == gameId); ZhanDuiZhengBa_K.JoinRolePkData faildJoinRole = ZhanDuiZhengBa_K.TodayJoinRoleDatas.Find((ZhanDuiZhengBa_K.JoinRolePkData _r) => _r.ZhanDuiID != winner1 && _r.CurrGameID == gameId); if (faildJoinRole != null && winJoinRole != null && faildJoinRole.ZhanDuiID != winJoinRole.ZhanDuiID) { ZhanDuiZhengBaZhanDuiData roleData = ZhanDuiZhengBa_K.SyncData.ZhanDuiList.Find((ZhanDuiZhengBaZhanDuiData _r) => _r.ZhanDuiID == faildJoinRole.ZhanDuiID); if (roleData != null) { int newState = 2; LogManager.WriteLog(LogTypes.Trace, string.Format("ZhanDuiZhengBa::ZhengBaPkResult,gameid={0},zhanduiid={1},newstate={2}", gameId, roleData.ZhanDuiID, newState), null, true); if (ZhanDuiZhengBa_K.Persistence.UpdateRole(ZhanDuiZhengBa_K.SyncData.Month, roleData.ZhanDuiID, roleData.Grade, newState)) { roleData.State = newState; ZhanDuiZhengBa_K.SyncData.RoleModTime = TimeUtil.NowDateTime(); } } ZhanDuiZhengBa_K.TodayJoinRoleDatas.RemoveAll((ZhanDuiZhengBa_K.JoinRolePkData _r) => _r.ZhanDuiID == faildJoinRole.ZhanDuiID); } if (winJoinRole != null) { bool bSaveUpdate = false; ZhanDuiZhengBaZhanDuiData roleData = ZhanDuiZhengBa_K.SyncData.ZhanDuiList.Find((ZhanDuiZhengBaZhanDuiData _r) => _r.ZhanDuiID == winJoinRole.ZhanDuiID); if (roleData != null) { int newGrade = (int)matchConfig.WillUpGrade; int newState = 1; LogManager.WriteLog(LogTypes.Trace, string.Format("ZhanDuiZhengBa::ZhengBaPkResult,gameid={0},zhanduiid={1},newstate={2}", gameId, roleData.ZhanDuiID, newState), null, true); if (ZhanDuiZhengBa_K.Persistence.UpdateRole(ZhanDuiZhengBa_K.SyncData.Month, roleData.ZhanDuiID, newGrade, newState)) { roleData.Grade = newGrade; roleData.State = newState; ZhanDuiZhengBa_K.SyncData.RoleModTime = TimeUtil.NowDateTime(); bSaveUpdate = true; } } if (bSaveUpdate) { log.UpGrade = true; ZhanDuiZhengBa_K.TodayJoinRoleDatas.RemoveAll((ZhanDuiZhengBa_K.JoinRolePkData _r) => _r.ZhanDuiID == winJoinRole.ZhanDuiID); } } log.EndTime = TimeUtil.NowDateTime(); if (winner1 > 0 && winner1 == log.ZhanDuiID1) { log.PkResult = 1; } else if (winner1 > 0 && winner1 == log.ZhanDuiID2) { log.PkResult = 2; } else { log.PkResult = 0; } ZhanDuiZhengBa_K.SyncData.PKLogList.Add(log); TimeUtil.AgeByDateTime(ref ZhanDuiZhengBa_K.SyncData.PKLogModTime); ZhanDuiZhengBa_K.Persistence.SavePkLog(log); ZhanDuiZhengBa_K.ThisLoopPkLogs.Remove(gameId); result = null; } } return(result); }
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); }
public ZhanDuiZhengBaSyncData LoadZhengBaSyncData(DateTime now, int selectRoleIfNewCreate) { ZhanDuiZhengBaSyncData syncData = new ZhanDuiZhengBaSyncData(); syncData.Month = ZhengBaUtils.MakeMonth(now); syncData.IsThisMonthInActivity = false; List <ZhanDuiZhengBaZhanDuiData> rankList = new List <ZhanDuiZhengBaZhanDuiData>(); List <ZhanDuiZhengBaZhanDuiData> zhanDuiList = new List <ZhanDuiZhengBaZhanDuiData>(); List <ZhanDuiZhengBaPkLogData> pkLogList = new List <ZhanDuiZhengBaPkLogData>(); if (KuaFuServerManager.IsGongNengOpened(113)) { TianTi5v5RankData rankData = TianTi5v5Service.ZhanDuiGetRankingData(DateTime.MinValue); bool bMonthFirst = this.CheckZhengBaRank(selectRoleIfNewCreate, syncData.Month); if (bMonthFirst) { syncData.IsThisMonthInActivity = true; } else if (syncData.Month == ZhengBaUtils.MakeMonth(rankData.ModifyTime) && rankData.MonthPaiHangList.Count > ZhanDuiZhengBaConsts.MinZhanDuiNum) { syncData.IsThisMonthInActivity = true; int[] groupArray = MathEx.MatchGroupBinary(64); int i = 0; while (i < 64 && i < rankData.MonthPaiHangList.Count) { int group = Array.IndexOf <int>(groupArray, i + 1) + 1; TianTi5v5ZhanDuiData data = rankData.MonthPaiHangList[i]; ZhanDuiZhengBaZhanDuiData zhandui = new ZhanDuiZhengBaZhanDuiData { ZhanDuiName = data.ZhanDuiName, ZhanDuiID = data.ZhanDuiID, ZhanLi = (long)((int)data.ZhanDouLi), DuanWeiId = data.DuanWeiId, DuanWeiRank = data.DuanWeiRank, ZoneId = data.ZoneID, MemberList = new List <RoleOccuNameZhanLi>(), Group = group }; foreach (TianTi5v5ZhanDuiRoleData a in data.teamerList) { if (a.RoleID == data.LeaderRoleID) { zhandui.MemberList.Insert(0, new RoleOccuNameZhanLi { RoleName = a.RoleName, Occupation = a.RoleOcc, ZhanLi = a.ZhanLi }); } else { zhandui.MemberList.Add(new RoleOccuNameZhanLi { RoleName = a.RoleName, Occupation = a.RoleOcc, ZhanLi = a.ZhanLi }); } } rankList.Add(zhandui); i++; } if (!this.BuildZhengBaRank(syncData.Month, rankList)) { LogManager.WriteLog(LogTypes.Fatal, "生成并写入战队争霸64强数据失败!", null, true); syncData.IsThisMonthInActivity = false; } } if (syncData.IsThisMonthInActivity) { zhanDuiList = this.LoadZhengBaRankData(syncData.Month); pkLogList = this.LoadPkLogList(syncData.Month); } } syncData.ZhanDuiList = zhanDuiList; syncData.PKLogList = pkLogList; syncData.RoleModTime = now; return(syncData); }