using Google.Protobuf.WellKnownTypes; using Sog; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; namespace CheckConfig.Strategy { class SystemStrategy : ConfigStrategy, InitializingConfig { public void AfterPropertiesSet() { CheckConfigStrategyFactory.Register("系统", this); } private static DateTime m_dateTime1970_utc = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); private static DateTime m_dateTime1970 = m_dateTime1970_utc.ToLocalTime(); /// /// 系统检测- /// public override void CheckConfigAlgorithm() { //foreach (var item in MarketShopDescMgr.Instance.ItemTable) //{ // SortedList itemDataGroup; // MarketShopGoodsDescMgr.Instance.ItemTable.TryGetValue(item.Key, out itemDataGroup); // if (itemDataGroup == null) // { // ConsoleStyle.Write("系统", "MarketShop", $"shopId:{item.Value.shopId}"," goods is null"); // return; // } // // var marketShops = itemDataGroup.Values.ToList().GroupBy(e => e.goodsPos).Select(g => new { key = g.Key, count = g.Count() }); // // 策划需求,先临时注释,后面调整规则 // //int i = 0; // //foreach (var ms in marketShops) // //{ // // //0代表通用 // // if (ms.key == 0) // // i += ms.count; // // else // // i++; // //} // //if (i < item.Value.goodsNum) // // ConsoleStyle.Write("系统", "MarketShop", $"商品ID:{item.Key},MarketShopDesc表数量:{item.Value.goodsNum},MarketShopGoods根据pos计算后数量:{i}", "小于MarketShopDesc表中设计数量"); // foreach (var value in itemDataGroup.Values) // { // var goodsNum = MarketShopDescMgr.Instance.GetConfig(value.shopId).goodsNum; // if (value.goodsPos > goodsNum) // { // ConsoleStyle.Write("系统", "MarketShop", $"shopId:{value.shopId}, goodsIndex :{value.goodsIndex}, ", $" MarketShopGoodsDesc 表中 goods_pos:{value.goodsPos} 大于 MarketShopDesc表中 goodsNum:{goodsNum}"); // } // } //} // 奖励表奖励数量与数组校验 RewardCheck(); //LogicWorldCheck(); //ArenaPeakSeasonInfoCheck(); } public void RewardCheck() { //foreach (var item in DropDescMgr.Instance.ItemTable) //{ // var num = item.Value.Num; // int rewordCount = 0; // foreach (var reword in item.Value.bindDropOne) // { // if (reword.WareID != 0 || reword.WareType != 0) // { // rewordCount++; // } // } // if (rewordCount != num && num != 0) // { // ConsoleStyle.Write("系统", "Drop", $"key:{item.Key}" , $" Drop 表中 DropNum:{num} 不等于 DropRewordCount:{rewordCount}"); // } //} } public void ArenaPeakSeasonInfoCheck() { // 初始化realmList string path = "../realmList.json"; //string path = "../../../../arpg_svr_proj/cfg/u2_overseas/Realmlist/realmList.json"; //string path = "C:\\arpg\\arpg_svr_proj\\cfg\\u2_overseas\\Realmlist\\realmList.json"; // 测试 RealmListConfig realmConfig = JsonConfig.parseFileLitJson(path); List myRealmList = new List(); Dictionary myRealmDict = new Dictionary(); // Dictionary realmWorldDict = new Dictionary(); foreach (var areaRealm in realmConfig.areaRealmList) { foreach (var world in areaRealm.worldList) { myRealmList.AddRange(world.realmList); foreach (var realm in world.realmList) { realmWorldDict.Add(realm.realmId, world.worldId); myRealmDict.Add(realm.realmId, realm); } } } } public void LogicWorldCheck() { Dictionary realmMap = new Dictionary(); Dictionary> bigRealmList = new Dictionary>(); string path = "../realmList.json"; RealmListConfig realmConfig = JsonConfig.parseFileLitJson(path); foreach(var areaConfig in realmConfig.areaRealmList) { foreach(var worldConfig in areaConfig.worldList) { int worldId = worldConfig.worldId; foreach(var oneRealm in worldConfig.realmList) { oneRealm.worldId = worldId; realmMap.Add(oneRealm.realmId, oneRealm); if (!bigRealmList.ContainsKey(oneRealm.bigRealmId)) { bigRealmList.Add(oneRealm.bigRealmId, new List()); } bigRealmList[oneRealm.bigRealmId].Add(oneRealm.realmId); } } } //检查星球竞技场区服 bigRealm相同的服务器world和logicWorld一定得相同 foreach(var it in bigRealmList) { int bigRealm = it.Key; int headRealm = 0; int worldId = 0; int logicWorldId = 0; foreach(var realmId in it.Value) { if (realmMap.ContainsKey(realmId)) { int tmpWorldId = realmMap[realmId].worldId; if (worldId == 0) { worldId = tmpWorldId; headRealm = realmId; } if (worldId == 0 || tmpWorldId != worldId) { ConsoleStyle.Write("系统", "realmList.json 配置", "", $"bigRealm:{bigRealm} realm:{realmId} worldId:{tmpWorldId}与首个realm:{headRealm} 的world:{worldId} 不符 "); } int tmpLogicWorldId = realmMap[realmId].logicWorldId; if (logicWorldId == 0) { logicWorldId = tmpLogicWorldId; } if (logicWorldId == 0 || tmpLogicWorldId != logicWorldId) { ConsoleStyle.Write("系统", "realmList.json bigRealm配置", "", $" bigRealm:{bigRealm} realm:{realmId} logicWorldId:{tmpLogicWorldId}与首个realm:{headRealm}的logicWorldId:{logicWorldId} 不符 "); } } } } } public static long TryGetStartTimeByDate(string date) { long time = 0; string pattern = @"(\d{4})(\d{2})(\d{2})"; var match = Regex.Match(date, pattern); if (match.Groups.Count == 4) { DateTime dt = new DateTime(int.Parse(match.Groups[1].Value), int.Parse(match.Groups[2].Value), int.Parse(match.Groups[3].Value)); var correct = dt.AddHours(AppTime.GetGameResetHour()); time = AppTime.GetTimeSecond(correct); return time; } return time; } public static long ParseConfigTime(string time) { if (string.IsNullOrEmpty(time)) { return 0; } DateTime result; bool bSuccess = DateTime.TryParse(time, out result); if (bSuccess == false) { return 0; } long timeSecond = AppTime.GetTimeSecond(result); return timeSecond; } public static long GetNowDateTimeTs(DateTime time) { TimeSpan ts = time - m_dateTime1970; long times = (long)ts.TotalMilliseconds / 1000; return times; } } }