From bfde3971c159bed85f938128d3bf59eebb06643f Mon Sep 17 00:00:00 2001 From: Benedict Etzel Date: Sat, 16 Dec 2023 01:58:31 +0100 Subject: [PATCH] feat(DeckImporter): import Whizbang decks from memory --- Hearthstone Deck Tracker/DeckManager.cs | 12 ++++ .../Hearthstone/QueueEvents.cs | 2 +- .../Importing/DeckImporter.cs | 68 ++++++++++++------- .../LogReader/Handlers/TagChangeActions.cs | 2 +- .../Utility/RemoteData/RemoteData.Config.cs | 3 - 5 files changed, 56 insertions(+), 31 deletions(-) diff --git a/Hearthstone Deck Tracker/DeckManager.cs b/Hearthstone Deck Tracker/DeckManager.cs index 34d211cef..4bc7cfec3 100644 --- a/Hearthstone Deck Tracker/DeckManager.cs +++ b/Hearthstone Deck Tracker/DeckManager.cs @@ -399,6 +399,18 @@ public static bool AutoImportArena(ArenaImportingBehaviour behaviour, ArenaInfo? return false; } + public static void AutoImportTemplateDeckById(IGame game, int deckId) + { + if(DeckList.Instance.Decks.All(x => x.HsId != deckId)) + { + var selectedDeck2 = DeckImporter.FromTemplateDeck(deckId); + if(selectedDeck2 is null) + return; + ImportDecks(new List() { selectedDeck2 }, false); + } + AutoSelectDeckById(game, deckId); + } + internal static async void AutoSelectDeckById(IGame game, long id) { Log.Info($"Trying to select deck for id={id}"); diff --git a/Hearthstone Deck Tracker/Hearthstone/QueueEvents.cs b/Hearthstone Deck Tracker/Hearthstone/QueueEvents.cs index 62a63216b..5d5d9eda5 100644 --- a/Hearthstone Deck Tracker/Hearthstone/QueueEvents.cs +++ b/Hearthstone Deck Tracker/Hearthstone/QueueEvents.cs @@ -112,7 +112,7 @@ private void AutoSelectArenaDeck() private static long GetSelectedDeckId(Mode mode) { - var selectedDeckId = Reflection.Client.GetSelectedDeckInMenu(); + var selectedDeckId = Reflection.Client.GetDeckPickerSelectedDeck(); if(selectedDeckId > 0) return selectedDeckId; if(mode != TAVERN_BRAWL) diff --git a/Hearthstone Deck Tracker/Importing/DeckImporter.cs b/Hearthstone Deck Tracker/Importing/DeckImporter.cs index b0c0bf5f9..6bbaf3e6b 100644 --- a/Hearthstone Deck Tracker/Importing/DeckImporter.cs +++ b/Hearthstone Deck Tracker/Importing/DeckImporter.cs @@ -15,6 +15,7 @@ using Hearthstone_Deck_Tracker.Utility; using Hearthstone_Deck_Tracker.Utility.RemoteData; using Hearthstone_Deck_Tracker.Utility.Extensions; +using HearthDb.Enums; #endregion @@ -121,32 +122,7 @@ public static List GetImportedDecks(IEnumerable - { - if(!Hearthstone.CardIds.CardClassHero.TryGetValue(x.Class, out var hero)) - return null; - return new HearthMirror.Objects.Deck - { - Id = x.DeckId, - Name = x.Title, - Cards = x.Cards.Select(c => { - var card = Database.GetCardFromDbfId(c.DbfId); - if(card == null) - return null; - return new HearthMirror.Objects.Card(card.Id, c.Count, 0); - }).Where(x => x != null).ToList(), - Hero = hero, - }; - }).WhereNotNull(); - - importedDecks.AddRange(GetImportedDecks(whizbangDecks, localDecks)); - continue; - } - } + continue; // Cannot be imported here (will need to happen in the context of a game with a deck id) var otherDecks = hsDecks.Except(new[] {deck}); var existing = localDecks.Where(x => otherDecks.All(d => d.Id != x.HsId)).Select(x => @@ -198,5 +174,45 @@ public static List GetImportedDecks(IEnumerable dbfId, (dbfId, dbfIds) => + { + var card = Database.GetCardFromDbfId(dbfId); + if(card == null) + return null; + return new HearthMirror.Objects.Card(card.Id, dbfIds.Count(), 0); + }).WhereNotNull().ToList(), + Hero = hero, + }; + } + catch(Exception e) + { + Log.Error(e); + } + return null; + } } } diff --git a/Hearthstone Deck Tracker/LogReader/Handlers/TagChangeActions.cs b/Hearthstone Deck Tracker/LogReader/Handlers/TagChangeActions.cs index 0e067bae3..8c189e93c 100644 --- a/Hearthstone Deck Tracker/LogReader/Handlers/TagChangeActions.cs +++ b/Hearthstone Deck Tracker/LogReader/Handlers/TagChangeActions.cs @@ -251,7 +251,7 @@ private void WhizbangDeckIdChange(int id, int value, IGame game) game.Opponent.IsPlayingWhizbang = true; if(!entity.IsPlayer) return; - DeckManager.AutoSelectDeckById(game, value); + DeckManager.AutoImportTemplateDeckById(game, value); } private void CreatorChanged(int id, int value, IGame game) diff --git a/Hearthstone Deck Tracker/Utility/RemoteData/RemoteData.Config.cs b/Hearthstone Deck Tracker/Utility/RemoteData/RemoteData.Config.cs index aa05389c4..2cc369614 100644 --- a/Hearthstone Deck Tracker/Utility/RemoteData/RemoteData.Config.cs +++ b/Hearthstone Deck Tracker/Utility/RemoteData/RemoteData.Config.cs @@ -17,9 +17,6 @@ internal class Config [JsonProperty("arena")] public ArenaData? Arena { get; set; } - [JsonProperty("whizbang_decks")] - public List? WhizbangDecks { get; set; } - [JsonProperty("battlegrounds_short_names")] public List? BattlegroundsShortNames { get; set; }