using System; using System.Collections.Generic; using LitJson; using UnityEngine; namespace Wizard; public class MyRotationAllInfo { public class PeriodData { public DateTime BeginTime = DateTime.MaxValue; public DateTime EndTime = DateTime.MinValue; public double StartUnixTime { get; set; } public double EndUnixTime { get; set; } } private Dictionary _myRotationDictionary = new Dictionary(); public PeriodData GatheringPeriod = new PeriodData(); public PeriodData FreeMatchPeriod = new PeriodData(); private bool _myRotationScheduleExist; private float _receiveSinceTime; private double _receiveServerUnixTime; public List MyRotationInfoList { get; } = new List(); public MyRotationInfo FirstPackInfo { get; private set; } public MyRotationInfo FirstPackInfoNemesis { get; private set; } public List AbilityGroup { get; private set; } = new List(); public List DisableCardPackIdList { get; private set; } = new List(); public bool IsFinishInitializeText { get; private set; } public bool IsMyRotationEnable => IsWithinPeriod(FreeMatchPeriod); public bool IsWithinGatheringPeriod => IsWithinPeriod(GatheringPeriod); public bool IsWithinFreeMatchPeriod => IsWithinPeriod(FreeMatchPeriod); public bool IsWithinCopyDeckIntroductionPeriod => IsWithinFreeMatchPeriod; public void InitializeText() { IsFinishInitializeText = true; int num = int.MaxValue; int num2 = int.MaxValue; foreach (MyRotationInfo myRotationInfo in MyRotationInfoList) { myRotationInfo.InitializeText(); int num3 = int.Parse(myRotationInfo.LastPackId); if (num3 < num) { num = num3; FirstPackInfo = myRotationInfo; } if (myRotationInfo.IsEnableNemesis && num3 < num2) { num2 = num3; FirstPackInfoNemesis = myRotationInfo; } } InitializeAbilityGroup(); InitializeRePrintCard(); } private void InitializeRePrintCard() { CardMaster instance = CardMaster.GetInstance(FormatBehaviorManager.GetDefaultBehaviour(Format.MyRotation).CardMasterId); List allCardIds = instance.GetAllCardIds(); List list = new List(allCardIds.Count); foreach (int item in allCardIds) { list.Add(instance.GetCardParameterFromId(item)); } foreach (MyRotationInfo myRotationInfo in MyRotationInfoList) { myRotationInfo.InitializeRePrintCard(list); } } public MyRotationInfo Get(string id) { if (string.IsNullOrEmpty(id)) { return null; } if (_myRotationDictionary.TryGetValue(id, out var value)) { return value; } return null; } private void InitializeAbilityGroup() { if (MyRotationInfoList.Count == 0) { return; } MyRotationInfo myRotationInfo = MyRotationInfoList[0]; MyRotationInfo lastPack = MyRotationInfoList[0]; bool isFirst = true; for (int i = 0; i < MyRotationInfoList.Count; i++) { MyRotationInfo myRotationInfo2 = MyRotationInfoList[i]; if (!MyRotationInfo.IsEqualAbility(myRotationInfo, myRotationInfo2)) { AbilityGroup.Add(CreateGroup(myRotationInfo, lastPack, isFirst)); isFirst = false; myRotationInfo = (lastPack = myRotationInfo2); } else { lastPack = myRotationInfo2; } } AbilityGroup.Add(CreateGroup(myRotationInfo, lastPack, isFirst)); } private static MyRotationAbilityGroup CreateGroup(MyRotationInfo startPack, MyRotationInfo lastPack, bool isFirst) { int startNumber = int.Parse(startPack.LastPackId) - 10000; int lastNumber = int.Parse(lastPack.LastPackId) - 10000; string shortName = Data.Master.CardSetNameMgr.Get(startPack.LastPackId).ShortName; string shortName2 = Data.Master.CardSetNameMgr.Get(lastPack.LastPackId).ShortName; if (isFirst) { startNumber = int.Parse(startPack.FirstPackId) - 10000; shortName = Data.Master.CardSetNameMgr.Get(startPack.FirstPackId).ShortName; } return new MyRotationAbilityGroup(startNumber, lastNumber, shortName, shortName2, startPack.Abilities); } public void Parse(JsonData json, JsonData headerData) { JsonData jsonData = json["setting"]; JsonData jsonData2 = json["restricted_base_card_id_list"]; JsonData jsonData3 = json["abilities"]; foreach (string key in jsonData.Keys) { MyRotationInfo myRotationInfo = new MyRotationInfo(jsonData[key]); _myRotationDictionary[myRotationInfo.Id] = myRotationInfo; MyRotationInfoList.Add(myRotationInfo); } if (jsonData2.IsObject) { foreach (string key2 in jsonData2.Keys) { _myRotationDictionary[key2].ParseRestrictJson(jsonData2[key2]); } } JsonData jsonData4 = json["reprinted_base_card_ids"]; if (jsonData4.IsObject) { foreach (string key3 in jsonData4.Keys) { _myRotationDictionary[key3].ParseRePrintJson(jsonData4[key3]); } } if (jsonData3.IsObject) { foreach (MyRotationInfo myRotationInfo2 in MyRotationInfoList) { myRotationInfo2.ParseAbilitiesJson(jsonData3); } } JsonData jsonData5 = json["schedules"]; if (jsonData5.IsObject) { if (jsonData5.TryGetValue("gathering", out var value)) { SetPeriodData(GatheringPeriod, value); } if (jsonData5.TryGetValue("free_battle", out var value2)) { SetPeriodData(FreeMatchPeriod, value2); _myRotationScheduleExist = true; _receiveSinceTime = Time.realtimeSinceStartup; _receiveServerUnixTime = headerData["servertime"].ToDouble(); } } if (json.TryGetValue("disable_card_set_ids", out var value3)) { for (int i = 0; i < value3.Count; i++) { DisableCardPackIdList.Add(value3[i].ToString()); } } } private void SetPeriodData(PeriodData period, JsonData jsonData) { period.BeginTime = DateTime.Parse(jsonData["begin_time"].ToString()); period.EndTime = DateTime.Parse(jsonData["end_time"].ToString()); period.StartUnixTime = ConvertTime.DateTimeToUnixTime(DateTime.Parse(jsonData["begin_time"].ToString())); period.EndUnixTime = ConvertTime.DateTimeToUnixTime(DateTime.Parse(jsonData["end_time"].ToString())); } private bool IsWithinPeriod(PeriodData period) { if (!_myRotationScheduleExist) { return false; } double num = _receiveServerUnixTime + (double)Time.realtimeSinceStartup - (double)_receiveSinceTime; if (num >= period.EndUnixTime) { return false; } return num > period.StartUnixTime; } }