using System; using System.Collections.Generic; using LitJson; namespace Wizard; public class Crossover { public class PeriodData { public DateTime BeginTime = DateTime.MaxValue; public DateTime EndTime = DateTime.MinValue; } public const int MAIN_CLASS_CARD_MIN_NUM = 24; public const int SUB_CLASS_CARD_MIN_NUM = 9; public const int AUTO_CREATE_NEUTRAL_MAX = 7; public PeriodData RankMatchPeriod = new PeriodData(); public PeriodData FreeMatchPeriod = new PeriodData(); public PeriodData GatheringPeriod = new PeriodData(); public PeriodData PracticePeriod = new PeriodData(); public List CardSetIdList = new List(); public List ReprintedBaseCardIds = new List(); public CrossoverRestrictedCard RestrictedCard = new CrossoverRestrictedCard(); private int _startRankId; private int _maxRankId; private Dictionary UserRankData = new Dictionary(); private List _userRankList = new List(); public static int AUTO_CREATE_MAIN_AND_NEUTRAL_MAX => 31; public static int AUTO_CREATE_SUB_AND_NEUTRAL_MAX => 16; public bool IsWithinAnyPeriod { get { if (!IsWithinGatheringPeriod && !IsWithinFreeMatchPeriod && !IsWithinRankMatchPeriod) { return IsWithinPracticePeriod; } return true; } } public bool IsWithinGatheringPeriod => IsWithinPeriod(GatheringPeriod); public bool IsWithinFreeMatchPeriod => IsWithinPeriod(FreeMatchPeriod); public bool IsWithinRankMatchPeriod => IsWithinPeriod(RankMatchPeriod); public bool IsWithinPracticePeriod => IsWithinPeriod(PracticePeriod); private bool IsWithinPeriod(PeriodData period) { DateTime nowTime_UTC = PlayerStaticData.UserTime.GetNowTime_UTC(); if (nowTime_UTC >= period.BeginTime) { return nowTime_UTC <= period.EndTime; } return false; } public void Parse(JsonData data) { JsonData data2 = data["schedules"]; if (data2.TryGetValue("rank_battle", out var value)) { SetPeriodData(RankMatchPeriod, value); } if (data2.TryGetValue("free_battle", out var value2)) { SetPeriodData(FreeMatchPeriod, value2); } if (data2.TryGetValue("gathering", out var value3)) { SetPeriodData(GatheringPeriod, value3); } if (data2.TryGetValue("practice", out var value4)) { SetPeriodData(PracticePeriod, value4); } if (data.TryGetValue("card_set_id_list", out var value5)) { for (int i = 0; i < value5.Count; i++) { CardSetIdList.Add(value5[i].ToInt()); } } if (data.TryGetValue("reprinted_base_card_ids", out var value6)) { for (int j = 0; j < value6.Count; j++) { ReprintedBaseCardIds.Add(value6[j].ToInt()); } } if (data.TryGetValue("restricted_base_card_id_list", out var value7)) { RestrictedCard.Parse(value7); } ParseRankData(data); } public void ParseRankData(JsonData data) { JsonData jsonData = data["rank_info"]; _startRankId = int.MaxValue; _maxRankId = int.MinValue; for (int i = 0; i < jsonData.Count; i++) { RankInfo rankInfo = new RankInfo(jsonData[i]); _userRankList.Add(rankInfo); UserRankData[rankInfo.RankId] = rankInfo; if (rankInfo.RankId < _startRankId) { _startRankId = rankInfo.RankId; } if (rankInfo.RankId > _maxRankId) { _maxRankId = rankInfo.RankId; } } } public RankInfo GetRankInfo(int rankId) { return UserRankData[rankId]; } public bool IsStartRank(int rankId) { return rankId == _startRankId; } public bool IsMaxRank(int rankId) { return rankId == _maxRankId; } public List GetRankInfoRawList() { return _userRankList; } private void SetPeriodData(PeriodData period, JsonData jsonData) { period.BeginTime = DateTime.Parse(jsonData["begin_time"].ToString()); period.EndTime = DateTime.Parse(jsonData["end_time"].ToString()); } }