using System.Collections; using System.Collections.Generic; using System.Threading.Tasks; using UnityEngine; using UnityEngine.UI; namespace TcgEngine { /// /// Use this tool to upload your cards, packs and rewards to the Mongo Database (it will overwrite existing data) /// public class CardUploader : MonoBehaviour { public string username = "admin"; [Header("References")] public InputField username_txt; public InputField password_txt; public Text msg_text; [Header("Upload")] public bool upload_cards = true; public bool upload_packs = true; public bool upload_decks = true; public bool upload_variants = true; public bool upload_rewards = true; void Start() { username_txt.text = username; msg_text.text = ""; } private async void Login() { LoginResponse res = await ApiClient.Get().Login(username_txt.text, password_txt.text); if (res.success && res.permission_level >= 10) { UploadAll(); } else { ShowText("Admin Login Failed"); } } private async void UploadAll() { //Delete previous data ShowText("Deleting previous data..."); if(upload_packs) await DeleteAllPacks(); if (upload_cards) await DeleteAllCards(); if (upload_variants) await DeleteAllVariants(); if (upload_decks) await DeleteAllDecks(); if (upload_rewards) await DeleteAllRewards(); //Packs if (upload_packs) { List packs = PackData.GetAll(); for (int i = 0; i < packs.Count; i++) { PackData pack = packs[i]; if (pack.available) { ShowText("Uploading Packs: " + pack.id); UploadPack(pack); await TimeTool.Delay(100); } } } //Cards if (upload_cards) { List cards = CardData.GetAll(); for (int i = 0; i < cards.Count; i += 100) { List list = GetCardGroup(cards, i, 100); ShowText("Uploading Cards: " + i + "-" + (i + 100 - 1)); UploadCardList(list); await TimeTool.Delay(200); } } //Variants if (upload_variants) { List variants = VariantData.GetAll(); for (int i = 0; i < variants.Count; i++) { VariantData variant = variants[i]; ShowText("Uploading Variant: " + variant.id); UploadVariant(variant); await TimeTool.Delay(100); } } //Starter Decks if (upload_decks) { DeckData[] decks = GameplayData.Get().starter_decks; for (int i = 0; i < decks.Length; i++) { DeckData deck = decks[i]; ShowText("Uploading Deck: " + deck.id); UploadDeck(deck); UploadDeckReward(deck); await TimeTool.Delay(100); } } //Solo rewards if (upload_rewards) { List levels = LevelData.GetAll(); for (int i = 0; i < levels.Count; i++) { LevelData level = levels[i]; ShowText("Uploading Reward: " + level.id); UploadLevelReward(level); if (level.reward_decks != null) { foreach (DeckData deck in level.reward_decks) UploadDeck(deck); } await TimeTool.Delay(100); } } //Custom rewards if (upload_rewards) { List rewards = RewardData.GetAll(); for (int i = 0; i < rewards.Count; i++) { RewardData reward = rewards[i]; ShowText("Uploading Reward: " + reward.id); UploadReward(reward); foreach (DeckData deck in reward.decks) UploadDeck(deck); await TimeTool.Delay(100); } } ShowText("Completed!"); ApiClient.Get().Logout(); } private async Task DeleteAllPacks() { string url = ApiClient.ServerURL + "/packs"; await ApiClient.Get().SendRequest(url, WebRequest.METHOD_DELETE); } private async Task DeleteAllCards() { string url = ApiClient.ServerURL + "/cards"; await ApiClient.Get().SendRequest(url, WebRequest.METHOD_DELETE); } private async Task DeleteAllVariants() { string url = ApiClient.ServerURL + "/variants"; await ApiClient.Get().SendRequest(url, WebRequest.METHOD_DELETE); } private async Task DeleteAllDecks() { string url = ApiClient.ServerURL + "/decks"; await ApiClient.Get().SendRequest(url, WebRequest.METHOD_DELETE); } private async Task DeleteAllRewards() { string url = ApiClient.ServerURL + "/rewards"; await ApiClient.Get().SendRequest(url, WebRequest.METHOD_DELETE); } private async void UploadPack(PackData pack) { PackAddRequest req = new PackAddRequest(); req.tid = pack.id; req.cards = pack.cards; req.cost = pack.cost; req.random = pack.type == PackType.Random; req.rarities_1st = new PackAddProbability[pack.rarities_1st.Length]; req.rarities = new PackAddProbability[pack.rarities.Length]; req.variants = new PackAddProbability[pack.variants.Length]; for (int i = 0; i < req.rarities_1st.Length; i++) req.rarities_1st[i] = AddPackRarity(pack.rarities_1st[i]); for (int i = 0; i < req.rarities.Length; i++) req.rarities[i] = AddPackRarity(pack.rarities[i]); for (int i = 0; i < req.variants.Length; i++) req.variants[i] = AddPackVariant(pack.variants[i]); string url = ApiClient.ServerURL + "/packs/add"; string json = ApiTool.ToJson(req); await ApiClient.Get().SendPostRequest(url, json); } private PackAddProbability AddPackRarity(PackRarity rarity) { PackAddProbability add = new PackAddProbability(); add.tid = rarity.rarity.id; add.value = rarity.probability; return add; } private PackAddProbability AddPackVariant(PackVariant rarity) { PackAddProbability add = new PackAddProbability(); add.tid = rarity.variant.id; add.value = rarity.probability; return add; } private async void UploadCard(CardData card) { CardAddRequest req = new CardAddRequest(); req.tid = card.id; req.type = card.GetTypeId(); req.team = TeamTitleData.Team(card.team.id); req.rarity = card.rarity.id; req.mana = card.mana; req.attack = card.attack; req.hp = card.hp; req.cost = card.cost; req.packs = new string[card.packs.Length]; for (int i = 0; i < req.packs.Length; i++) { req.packs[i] = card.packs[i].id; } string url = ApiClient.ServerURL + "/cards/add"; string json = ApiTool.ToJson(req); await ApiClient.Get().SendPostRequest(url, json); } private async void UploadCardList(List cards) { CardAddListRequest req = new CardAddListRequest(); req.cards = new CardAddRequest[cards.Count]; for(int i=0; i GetCardGroup(List all_cards, int start, int count) { List list = new List(); for (int i = 0; i < count; i++) { int index = start + i; if (index < all_cards.Count) { CardData card = all_cards[index]; if (card.deckbuilding) { list.Add(card); } } } return list; } private void ShowText(string txt) { msg_text.text = txt; Debug.Log(txt); } public void OnClickStart() { msg_text.text = ""; Login(); } } [System.Serializable] public class CardAddListRequest { public CardAddRequest[] cards; } [System.Serializable] public class CardAddRequest { public string tid; public string type; public string team; public string rarity; public int mana; public int attack; public int hp; public int cost; public string[] packs; } [System.Serializable] public class PackAddRequest { public string tid; public int cards; public int cost; public bool random; public PackAddProbability[] rarities_1st; public PackAddProbability[] rarities; public PackAddProbability[] variants; } [System.Serializable] public class PackAddProbability { public string tid; public int value; } [System.Serializable] public class VariantAddRequest { public string tid; public int cost_factor; public bool is_default; } [System.Serializable] public class RewardAddRequest { public string tid; public string group; public int coins; public int xp; public string[] packs; public string[] cards; public string[] decks; public bool repeat; } }