public ZhengBaSyncData LoadZhengBaSyncData(DateTime now, int selectRoleIfNewCreate, long dayBeginTicks) { ZhengBaSyncData syncData = new ZhengBaSyncData(); syncData.Month = ZhengBaUtils.MakeMonth(now); syncData.IsThisMonthInActivity = CheckThisMonthInActivity(now, dayBeginTicks); bool bMonthFirst = false; if (syncData.IsThisMonthInActivity) { bMonthFirst = CheckBuildZhengBaRank(selectRoleIfNewCreate, syncData.Month); syncData.RoleList = LoadZhengBaRankData(syncData.Month); syncData.SupportList = LoadZhengBaSupportData(syncData.Month); } else { bMonthFirst = false; syncData.RoleList = new List <ZhengBaRoleInfoData>(); syncData.SupportList = new List <ZhengBaSupportAnalysisData>(); } syncData.RoleModTime = now; syncData.SupportModTime = now; // 本月的参赛人数第一次创建到db中,那么广播公告和邮件通知 if (bMonthFirst && MonthRankFirstCreate != null) { MonthRankFirstCreate(selectRoleIfNewCreate); } return(syncData); }
public bool SaveSupportLog(ZhengBaSupportLogData data) { if (data == null) { return(false); } try { string sql = string.Format("INSERT INTO t_zhengba_support_log(month,from_rid,from_zoneid,from_rolename,support_type,to_union_group,to_group,`time`,rank_of_day,from_serverid) " + "VALUES({0},{1},{2},'{3}',{4},{5},{6},'{7}',{8},{9});", ZhengBaUtils.MakeMonth(data.Time), data.FromRoleId, data.FromZoneId, data.FromRolename, (int)data.SupportType, data.ToUnionGroup, data.ToGroup, data.Time.ToString("yyyy-MM-dd HH:mm:ss"), data.RankOfDay, data.FromServerId); if (DbHelperMySQL.ExecuteSql(sql) <= 0) { return(false); } } catch (Exception ex) { LogManager.WriteLog(LogTypes.Error, "SaveSupportLog failed!", ex); return(false); } return(true); }
public ZhengBaSyncData LoadZhengBaSyncData(DateTime now, int selectRoleIfNewCreate, long dayBeginTicks) { ZhengBaSyncData syncData = new ZhengBaSyncData(); syncData.Month = ZhengBaUtils.MakeMonth(now); syncData.IsThisMonthInActivity = this.CheckThisMonthInActivity(now, dayBeginTicks); bool bMonthFirst; if (syncData.IsThisMonthInActivity) { bMonthFirst = this.CheckBuildZhengBaRank(selectRoleIfNewCreate, syncData.Month); syncData.RoleList = this.LoadZhengBaRankData(syncData.Month); syncData.SupportList = this.LoadZhengBaSupportData(syncData.Month); } else { bMonthFirst = false; syncData.RoleList = new List <ZhengBaRoleInfoData>(); syncData.SupportList = new List <ZhengBaSupportAnalysisData>(); } syncData.LastKingData = this.LoadZhengBaKingData(ref syncData.LastKingModTime); syncData.RoleModTime = now; syncData.SupportModTime = now; if (bMonthFirst && this.MonthRankFirstCreate != null) { this.MonthRankFirstCreate(selectRoleIfNewCreate); } return(syncData); }
/// <summary> /// 检测生成众生争霸排行榜 /// </summary> /// <param name="now"></param> private bool CheckBuildZhengBaRank(int selectRoleIfNewCreate, int nowMonth) { bool bMonthFirst = false; try { DbHelperMySQL.ExecuteSql( string.Format("INSERT IGNORE INTO t_async(`id`,`value`) VALUES({0},{1});", AsyncTypes.ZhengBaCurrMonth, ZhengBaConsts.DefaultAsyncMonth) ); // 防止人为的重新reload月排行榜导致众神争霸战斗信息丢失 /* 这里有一些细节要注意: * 1:每月1号凌晨3点更新月排行榜,然后触发更新争霸角色 * 2: 服务器启动的时候,尝试生成争霸角色 * 3:要防止当月的争霸角色重复生成 * 4:必须保证天梯排行角色已经生成,才能生成争霸角色 -->例如,1号凌晨两点启动,必须保证等到3点的时候,天梯月排行榜生成之后,能够生成本月的争霸角色 */ int oldMonth = (int)DbHelperMySQL.GetSingle("select value from t_async where id = " + AsyncTypes.ZhengBaCurrMonth); object ageObj_tiantiMonth = DbHelperMySQL.GetSingle("select value from t_async where id = " + AsyncTypes.TianTiPaiHangModifyOffsetDay); if (oldMonth != nowMonth && ageObj_tiantiMonth != null && ZhengBaUtils.MakeMonth(DataHelper2.GetRealDate((int)ageObj_tiantiMonth)) == nowMonth) { string strSql = string.Format("SELECT rid,rname,zoneid,duanweiid,duanweijifen,duanweirank,zhanli,data1,data2 FROM t_tianti_month_paihang ORDER BY duanweirank ASC LIMIT {0};", selectRoleIfNewCreate); var sdr = DbHelperMySQL.ExecuteReader(strSql); while (sdr != null && sdr.Read()) { ZhengBaRoleInfoData roleData = new ZhengBaRoleInfoData(); roleData.RoleId = (int)Convert.ToInt32(sdr["rid"]); roleData.ZoneId = (int)Convert.ToInt32(sdr["zoneid"]); roleData.DuanWeiId = (int)Convert.ToInt32(sdr["duanweiid"]); roleData.DuanWeiJiFen = (int)Convert.ToInt32(sdr["duanweijifen"]); roleData.DuanWeiRank = (int)Convert.ToInt32(sdr["duanweirank"]); roleData.ZhanLi = (int)Convert.ToInt32(sdr["zhanli"]); roleData.RoleName = sdr["rname"].ToString(); if (!sdr.IsDBNull(sdr.GetOrdinal("data1"))) { roleData.TianTiPaiHangRoleData = (byte[])(sdr["data1"]); } if (!sdr.IsDBNull(sdr.GetOrdinal("data2"))) { roleData.PlayerJingJiMirrorData = (byte[])(sdr["data2"]); } if (string.IsNullOrEmpty(roleData.RoleName) && roleData.TianTiPaiHangRoleData != null) { var onlyName = DataHelper2.BytesToObject <TianTiPaiHangRoleData_OnlyName>( roleData.TianTiPaiHangRoleData, 0, roleData.TianTiPaiHangRoleData.Length); if (onlyName != null) { roleData.RoleName = onlyName.RoleName; } } string repSql = string.Format( "REPLACE INTO t_zhengba_roles(`month`,rid,zoneid,duanweiid,duanweijifen,duanweirank,zhanli,`grade`,`group`,state,rname,data1,data2) " + "VALUES({0},{1},{2},{3},{4},{5},{6},{7},{8},{9},'{10}',@content,@mirror)", nowMonth, roleData.RoleId, roleData.ZoneId, roleData.DuanWeiId, roleData.DuanWeiJiFen, roleData.DuanWeiRank, roleData.ZhanLi, (int)EZhengBaGrade.Grade100, (int)ZhengBaConsts.NoneGroup, (int)EZhengBaState.None, roleData.RoleName); DbHelperMySQL.ExecuteSqlInsertImg(repSql, new List <Tuple <string, byte[]> > { new Tuple <string, byte[]>("content", roleData.TianTiPaiHangRoleData), new Tuple <string, byte[]>("mirror", roleData.PlayerJingJiMirrorData) }); } if (sdr != null) { sdr.Close(); } DbHelperMySQL.ExecuteSql( string.Format("REPLACE INTO t_async(`id`,`value`) VALUES({0},{1});", AsyncTypes.ZhengBaCurrMonth, nowMonth) ); bMonthFirst = true; } } catch (Exception ex) { LogManager.WriteExceptionUseCache(ex.ToString()); } return(bMonthFirst); }
private bool CheckBuildZhengBaRank(int selectRoleIfNewCreate, int nowMonth) { bool bMonthFirst = false; try { DbHelperMySQL.ExecuteSql(string.Format("INSERT IGNORE INTO t_async(`id`,`value`) VALUES({0},{1});", 30, 201111)); int oldMonth = (int)DbHelperMySQL.GetSingle("select value from t_async where id = " + 30); object ageObj_tiantiMonth = DbHelperMySQL.GetSingle("select value from t_async where id = " + 4); if (oldMonth != nowMonth && ageObj_tiantiMonth != null && ZhengBaUtils.MakeMonth(DataHelper2.GetRealDate((int)ageObj_tiantiMonth)) == nowMonth) { string strSql = string.Format("SELECT rid,rname,zoneid,duanweiid,duanweijifen,duanweirank,zhanli,data1,data2 FROM t_tianti_month_paihang ORDER BY duanweirank ASC LIMIT {0};", selectRoleIfNewCreate); MySqlDataReader sdr = DbHelperMySQL.ExecuteReader(strSql, false); while (sdr != null && sdr.Read()) { ZhengBaRoleInfoData roleData = new ZhengBaRoleInfoData(); roleData.RoleId = Convert.ToInt32(sdr["rid"]); roleData.ZoneId = Convert.ToInt32(sdr["zoneid"]); roleData.DuanWeiId = Convert.ToInt32(sdr["duanweiid"]); roleData.DuanWeiJiFen = Convert.ToInt32(sdr["duanweijifen"]); roleData.DuanWeiRank = Convert.ToInt32(sdr["duanweirank"]); roleData.ZhanLi = Convert.ToInt32(sdr["zhanli"]); roleData.RoleName = sdr["rname"].ToString(); if (!sdr.IsDBNull(sdr.GetOrdinal("data1"))) { roleData.TianTiPaiHangRoleData = (byte[])sdr["data1"]; } if (!sdr.IsDBNull(sdr.GetOrdinal("data2"))) { roleData.PlayerJingJiMirrorData = (byte[])sdr["data2"]; } if (string.IsNullOrEmpty(roleData.RoleName) && roleData.TianTiPaiHangRoleData != null) { TianTiPaiHangRoleData_OnlyName onlyName = DataHelper2.BytesToObject <TianTiPaiHangRoleData_OnlyName>(roleData.TianTiPaiHangRoleData, 0, roleData.TianTiPaiHangRoleData.Length); if (onlyName != null) { roleData.RoleName = onlyName.RoleName; } } string repSql = string.Format("REPLACE INTO t_zhengba_roles(`month`,rid,zoneid,duanweiid,duanweijifen,duanweirank,zhanli,`grade`,`group`,state,rname,data1,data2) VALUES({0},{1},{2},{3},{4},{5},{6},{7},{8},{9},'{10}',@content,@mirror)", new object[] { nowMonth, roleData.RoleId, roleData.ZoneId, roleData.DuanWeiId, roleData.DuanWeiJiFen, roleData.DuanWeiRank, roleData.ZhanLi, 100, 0, 0, roleData.RoleName }); DbHelperMySQL.ExecuteSqlInsertImg(repSql, new List <Tuple <string, byte[]> > { new Tuple <string, byte[]>("content", roleData.TianTiPaiHangRoleData), new Tuple <string, byte[]>("mirror", roleData.PlayerJingJiMirrorData) }); } if (sdr != null) { sdr.Close(); } DbHelperMySQL.ExecuteSql(string.Format("REPLACE INTO t_async(`id`,`value`) VALUES({0},{1});", 30, nowMonth)); bMonthFirst = true; } } catch (Exception ex) { LogManager.WriteExceptionUseCache(ex.ToString()); } return(bMonthFirst); }
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); }