using System; using System.Collections.Generic; using LitJson; using UnityEngine; using Wizard; using Wizard.Scripts.Network.Data.TaskData.Arena; public class ArenaCompetition : ArenaEntryDataBase { public enum EntryStatusType { NotEntry, NotChallenge, NotRegistDeck, InBattle } public enum FreebieStatusType { InFreeBattle, CanPermanentEntry, PermanentEntryDone } public enum EntryCostType { EntryWithFree, EntryWithCost } private bool _isRankMatching; public bool IsCompetitionPeriod { get; private set; } public bool IsEntry { get; set; } public bool IsInFreeBattleRegistDeck { get; set; } public bool NeedsFirstTips { get; private set; } public int CompetitionId { get; private set; } public FreebieStatusType FreebieStatus { get; set; } public Format DeckFormat { get; private set; } public ArenaColosseum.eRule Rule { get; private set; } public bool IsSpecialMode { get; private set; } public string NowRoundTimeText { get; private set; } public string EntryEndTimeText { get; private set; } public string EndTimeText { get; private set; } public double EntryRemainingUnixTime { get; set; } public double RemainingUnixTime { get; set; } public float RemainingSinceTime { get; set; } public double RemainingServerUnixTime { get; set; } public string EntryTimeText { get; private set; } public List DeckList { get; set; } public List EntryRewardList { get; set; } public bool IsRewardReceived { get; private set; } public string AnnounceId { get; private set; } public string CompetitionName { get; private set; } public int MaxEntryCount { get; private set; } public int MaxChallengeCount { get; private set; } public int MaxWinCount { get; private set; } public int BestWinCount { get; private set; } public int MaxLoseCount { get; private set; } public int RestChallangeCount { get; private set; } public int RestEntryCount { get; private set; } public int CurrentWinCount { get; private set; } public int FreebieChallengeCount { get; private set; } public bool IsChampion { get; private set; } public bool IsEntryTimeEnd { get; private set; } public int MaxBattleCount { get; private set; } public int IsCompletedTwoPickDeck { get; private set; } public int MaxFreebieChallengeCount { get; private set; } public EntryStatusType EntryStatus { get; private set; } public EntryCostType CostType { get; private set; } public bool IsRankMatching { get { return _isRankMatching; } set { if (_isRankMatching != value) { _isRankMatching = value; if (RealTimeNetworkAgent.FinishTaskBase != null) { RealTimeNetworkAgent.FinishTaskBase = new CompetitionBattleFinishTask(); } } } } public ArenaCompetition() { } public ArenaCompetition(JsonData responseData) { JsonData jsonData = responseData["data"]["competition_info"]; IsCompetitionPeriod = jsonData["is_competition_period"].ToBoolean(); if (IsCompetitionPeriod) { Rule = (ArenaColosseum.eRule)jsonData["deck_format"].ToInt(); DeckFormat = ArenaData.ApiDeckFormatParse(Rule); IsEntry = jsonData["is_entry"].ToBoolean(); IsInFreeBattleRegistDeck = jsonData["is_in_battle"].ToBoolean(); IsSpecialMode = jsonData["is_special_mode"].ToInt() == 1; string text = ConvertTime.ToLocal(DateTime.Parse(jsonData["entry_start_time"].ToString())); EntryRemainingUnixTime = ConvertTime.DateTimeToUnixTime(DateTime.Parse(jsonData["entry_end_time"].ToString())); string text2 = ConvertTime.ToLocal(DateTime.Parse(jsonData["entry_end_time"].ToString())); EntryTimeText = Data.SystemText.Get("Colosseum_0033", text, text2); EntryEndTimeText = text2; string text3 = ConvertTime.ToLocal(DateTime.Parse(jsonData["start_time"].ToString())); RemainingUnixTime = ConvertTime.DateTimeToUnixTime(DateTime.Parse(jsonData["end_time"].ToString())); string text4 = ConvertTime.ToLocal(DateTime.Parse(jsonData["end_time"].ToString())); NowRoundTimeText = Data.SystemText.Get("Colosseum_0033", text3, text4); EndTimeText = text4; RemainingSinceTime = Time.realtimeSinceStartup; RemainingServerUnixTime = responseData["data_headers"]["servertime"].ToDouble(); NeedsFirstTips = jsonData.GetValueOrDefault("is_display_tips", 0) == 1; CompetitionId = jsonData.GetValueOrDefault("competition_id", 0); FreebieStatus = (FreebieStatusType)jsonData["freebie_status"].ToInt(); DeckList = new List(); EntryRewardList = new List(); JsonData jsonData2 = jsonData["featured_entry_reward_list"]; for (int i = 0; i < jsonData2.Count; i++) { Wizard.Scripts.Network.Data.TaskData.Arena.Reward item = new Wizard.Scripts.Network.Data.TaskData.Arena.Reward(jsonData2[i]); EntryRewardList.Add(item); } IsRewardReceived = jsonData["is_received_featured_entry_reward"].ToBoolean(); if (jsonData["announce_id"] != null) { AnnounceId = jsonData["announce_id"].ToString(); } MaxEntryCount = jsonData.GetValueOrDefault("max_entry_count", 0); MaxChallengeCount = jsonData.GetValueOrDefault("max_challenge_count", 0); MaxWinCount = jsonData.GetValueOrDefault("max_win_count", 0); MaxLoseCount = jsonData.GetValueOrDefault("max_lose_count", 0); MaxBattleCount = jsonData.GetValueOrDefault("max_battle_count", 0); MaxFreebieChallengeCount = jsonData["max_freebie_challenge_count"].ToInt(); crystalCost = jsonData.GetValueOrDefault("crystal_cost", 0); rupyCost = jsonData.GetValueOrDefault("rupy_cost", 0); BestWinCount = jsonData["max_win_count_in_entry"].ToInt(); RestChallangeCount = jsonData["rest_challenge_num"].ToInt(); RestEntryCount = jsonData["rest_entry_num"].ToInt(); CurrentWinCount = jsonData["current_win_count"].ToInt(); FreebieChallengeCount = jsonData["freebie_challenge_count"].ToInt(); EntryStatus = (EntryStatusType)jsonData["entry_status"].ToInt(); CostType = (EntryCostType)jsonData["entry_type"].ToInt(); IsChampion = jsonData.GetValueOrDefault("is_champion", 0) == 1; CompetitionName = jsonData.GetValueOrDefault("competition_name", string.Empty).Replace("\\n", "\n"); double num = RemainingServerUnixTime + (double)Time.realtimeSinceStartup - (double)RemainingSinceTime; IsEntryTimeEnd = EntryRemainingUnixTime - num < 0.0; bool flag = CompetitionId <= PlayerPrefsWrapper.GetValue(PlayerPrefsWrapper.COMPETITION_JOIN_BUTTON_LATEST_ID); Data.MyPageNotifications.data.IsCompetitionBadge = !IsRewardReceived && EntryStatus == EntryStatusType.NotEntry && !IsEntryTimeEnd && !flag; base.ExpirtyInfo = new ShopExpirtyInfo(jsonData["sales_period_info"]); if (DeckFormat == Format.TwoPick) { IsCompletedTwoPickDeck = jsonData["is_completed_two_pick_deck"].ToInt(); } } base.LootBoxType = PlayerStaticData.LootBoxType.COMPETITION; } public void SetRestChallangeCountByEntry(JsonData responseData) { RestChallangeCount = responseData["rest_challenge_count"].ToInt(); IsEntry = true; } }