public void LoadTianTiRankData(DateTime now) { try { ExecuteSqlNoQuery("INSERT IGNORE INTO t_async(`id`,`value`) VALUES(4,1);"); object ageObj = DbHelperMySQL.GetSingle("select value from t_async where id = " + AsyncTypes.TianTiPaiHangModifyOffsetDay); if (null != ageObj) { int dayId = (int)ageObj; DateTime modifyDate = DataHelper2.GetRealDate(dayId); List <TianTiRoleInfoData> tianTiRoleInfoDataList = new List <TianTiRoleInfoData>(); List <TianTiRoleInfoData> tianTiMonthRoleInfoDataList = new List <TianTiRoleInfoData>(); MySqlDataReader sdr = null; try { LoadTianTiRankDayList(tianTiRoleInfoDataList); //ReloadTianTiRankDayList(tianTiRoleInfoDataList); sdr = DbHelperMySQL.ExecuteReader(string.Format("SELECT rid,rname,zoneid,duanweiid,duanweijifen,duanweirank,zhanli,data1,data2 FROM t_tianti_month_paihang ORDER BY `duanweirank` ASC LIMIT {0};", RankData.MaxPaiMingRank)); for (int index = 1; sdr.Read(); index++) { TianTiRoleInfoData tianTiRoleInfoData = new TianTiRoleInfoData(); tianTiRoleInfoData.RoleId = (int)Convert.ToInt32(sdr["rid"]); if (index <= MaxSendDetailDataCount) { tianTiRoleInfoData.ZoneId = (int)Convert.ToInt32(sdr["zoneid"]); tianTiRoleInfoData.DuanWeiId = (int)Convert.ToInt32(sdr["duanweiid"]); tianTiRoleInfoData.DuanWeiJiFen = (int)Convert.ToInt32(sdr["duanweijifen"]); //tianTiRoleInfoData.DuanWeiRank = (int)Convert.ToInt32(sdr["duanweirank"]); tianTiRoleInfoData.ZhanLi = (int)Convert.ToInt32(sdr["zhanli"]); tianTiRoleInfoData.RoleName = sdr["rname"].ToString(); if (!sdr.IsDBNull(sdr.GetOrdinal("data1"))) { tianTiRoleInfoData.TianTiPaiHangRoleData = (byte[])(sdr["data1"]); } // if (!sdr.IsDBNull(sdr.GetOrdinal("data2"))) tianTiRoleInfoData.PlayerJingJiMirrorData = (byte[])(sdr["data2"]); } tianTiRoleInfoData.DuanWeiRank = index; tianTiMonthRoleInfoDataList.Add(tianTiRoleInfoData); } } catch (System.Exception ex) { LogManager.WriteExceptionUseCache(ex.ToString()); } finally { if (null != sdr) { sdr.Close(); } } lock (Mutex) { RankData.ModifyTime = modifyDate; RankData.TianTiRoleInfoDataList = tianTiRoleInfoDataList; RankData.TianTiMonthRoleInfoDataList = tianTiMonthRoleInfoDataList; } if (DataHelper2.GetOffsetDay(now) != dayId) { UpdateTianTiRankData(now, modifyDate.Month != now.Month, true); } } } catch (System.Exception ex) { LogManager.WriteException(ex.ToString()); } }
/// <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); }