@firestone-hs/reference-data 2.0.21 → 2.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,6 +11,7 @@ export declare const defaultStartingHp: (gameType: GameType, heroCardId: string,
11
11
  getCard: (cardId: string | number) => ReferenceCard;
12
12
  }) => number;
13
13
  export declare const isBattlegrounds: (gameType: GameType) => boolean;
14
+ export declare const isBattlegroundsDuo: (gameType: GameType) => boolean;
14
15
  export declare const normalizeHeroCardId: (heroCardId: string, allCards: {
15
16
  getCard: (cardId: string | number) => ReferenceCard;
16
17
  }) => string;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getHeroPower = exports.getReferenceTribeCardId = exports.getTribeIcon = exports.getTribeName = exports.normalizeHeroCardId = exports.isBattlegrounds = exports.defaultStartingHp = exports.BUDDIES_TRIBE_REQUIREMENTS = exports.NON_DISCOVERABLE_BUDDIES = exports.NON_BUYABLE_MINION_IDS = exports.TOTAL_RACES_IN_GAME = exports.ALL_BG_RACES = void 0;
3
+ exports.getHeroPower = exports.getReferenceTribeCardId = exports.getTribeIcon = exports.getTribeName = exports.normalizeHeroCardId = exports.isBattlegroundsDuo = exports.isBattlegrounds = exports.defaultStartingHp = exports.BUDDIES_TRIBE_REQUIREMENTS = exports.NON_DISCOVERABLE_BUDDIES = exports.NON_BUYABLE_MINION_IDS = exports.TOTAL_RACES_IN_GAME = exports.ALL_BG_RACES = void 0;
4
4
  const public_api_1 = require("../public-api");
5
5
  exports.ALL_BG_RACES = [
6
6
  public_api_1.Race.BEAST,
@@ -178,9 +178,22 @@ const isBattlegrounds = (gameType) => {
178
178
  public_api_1.GameType.GT_BATTLEGROUNDS_FRIENDLY,
179
179
  public_api_1.GameType.GT_BATTLEGROUNDS_AI_VS_AI,
180
180
  public_api_1.GameType.GT_BATTLEGROUNDS_PLAYER_VS_AI,
181
+ public_api_1.GameType.GT_BATTLEGROUNDS_DUO,
182
+ public_api_1.GameType.GT_BATTLEGROUNDS_DUO_VS_AI,
183
+ public_api_1.GameType.GT_BATTLEGROUNDS_DUO_FRIENDLY,
184
+ public_api_1.GameType.GT_BATTLEGROUNDS_DUO_AI_VS_AI,
181
185
  ].includes(gameType);
182
186
  };
183
187
  exports.isBattlegrounds = isBattlegrounds;
188
+ const isBattlegroundsDuo = (gameType) => {
189
+ return [
190
+ public_api_1.GameType.GT_BATTLEGROUNDS_DUO,
191
+ public_api_1.GameType.GT_BATTLEGROUNDS_DUO_VS_AI,
192
+ public_api_1.GameType.GT_BATTLEGROUNDS_DUO_FRIENDLY,
193
+ public_api_1.GameType.GT_BATTLEGROUNDS_DUO_AI_VS_AI,
194
+ ].includes(gameType);
195
+ };
196
+ exports.isBattlegroundsDuo = isBattlegroundsDuo;
184
197
  const normalizeHeroCardId = (heroCardId, allCards) => {
185
198
  if (!heroCardId) {
186
199
  return heroCardId;
@@ -1 +1 @@
1
- {"version":3,"file":"bgs-utils.js","sourceRoot":"","sources":["../../src/services/bgs-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds, GameType, Race, ReferenceCard } from '../public-api';\r\n\r\nexport const ALL_BG_RACES = [\r\n\tRace.BEAST,\r\n\tRace.DEMON,\r\n\tRace.DRAGON,\r\n\tRace.MECH,\r\n\tRace.MURLOC,\r\n\tRace.PIRATE,\r\n\tRace.ELEMENTAL,\r\n\tRace.QUILBOAR,\r\n\tRace.NAGA,\r\n\tRace.UNDEAD,\r\n];\r\n\r\nexport const TOTAL_RACES_IN_GAME = 5;\r\n\r\nexport const NON_BUYABLE_MINION_IDS = [\r\n\tCardIds.Cuddlgam_TB_BaconShop_HP_033t_SKIN_A,\r\n\tCardIds.Cuddlgam_TB_BaconShop_HP_033t_SKIN_A_G,\r\n\tCardIds.AbominableAmalgam_TB_BaconShop_HP_033t_SKIN_D,\r\n\tCardIds.AbominableAmalgam_TB_BaconShop_HP_033t_SKIN_D_G,\r\n\tCardIds.BookEatingAmalgam_TB_BaconShop_HP_033t_SKIN_B,\r\n\tCardIds.BookEatingAmalgam_TB_BaconShop_HP_033t_SKIN_B_G,\r\n\t// CardIds.ArgentBraggart_BG_SCH_149,\r\n\t// CardIds.ArgentBraggart_TB_BaconUps_308,\r\n\tCardIds.AvatarOfNzoth_FishOfNzothToken,\r\n\tCardIds.FishOfNzoth,\r\n\tCardIds.CattlecarpOfNzoth_TB_BaconShop_HP_105t_SKIN_A,\r\n\tCardIds.CattlecarpOfNzoth_TB_BaconShop_HP_105t_SKIN_A_G,\r\n\tCardIds.SnakeTrap_SnakeLegacyToken,\r\n\tCardIds.SnakeTrap_SnakeVanillaToken,\r\n\tCardIds.ImprovedSnakeTrap_SnakeToken,\r\n\tCardIds.ElementEarth_StoneElementalToken,\r\n\tCardIds.BabyKrush_DevilsaurToken,\r\n\tCardIds.Devilsaur,\r\n\t// To remove once the cards list is properly updated\r\n\tCardIds.FriendOfAFriend_BG22_404,\r\n\tCardIds.FriendOfAFriend_BG22_404_G,\r\n\tCardIds.Onyxia_OnyxianWhelpToken,\r\n\tCardIds.MurlocWarleaderCore,\r\n\tCardIds.MurlocWarleaderVanilla,\r\n\t// 23.4, probably not needed since they are already tokens\r\n\tCardIds.Tentacular_OzumatsTentacleToken_BG23_HERO_201pt,\r\n\tCardIds.Tentacular_OzumatsTentacleToken_BG23_HERO_201pt2,\r\n\tCardIds.Tentacular_OzumatsTentacleToken_BG23_HERO_201pt3,\r\n\tCardIds.Tentacular_OzumatsTentacleToken_BG23_HERO_201pt4,\r\n\tCardIds.Tentacular_OzumatsTentacleToken_BG23_HERO_201pt5,\r\n\tCardIds.Tentacular_OzumatsTentacleToken_BG23_HERO_201pt6,\r\n\t// 24.0, same\r\n\tCardIds.EmperorCobraLegacy_BG_EX1_170,\r\n\tCardIds.EmperorCobraLegacy_BG_EX1_170_G,\r\n\tCardIds.EmperorCobraLegacy_EX1_170,\r\n\tCardIds.SnakeLegacyToken,\r\n\tCardIds.SnakeLegacy,\r\n\tCardIds.ElementEarth_StoneElementalToken,\r\n\tCardIds.BolvarFireblood_CORE_ICC_858,\r\n\tCardIds.BolvarFireblood_ICC_858,\r\n\t// 25.2\r\n\tCardIds.HandlessForsaken_HelpingHandToken_BG25_010t,\r\n\tCardIds.HandlessForsaken_HelpingHandToken_BG25_010_Gt,\r\n\tCardIds.GeneralDrakkisath_SmolderwingToken_BG25_309t,\r\n\tCardIds.GeneralDrakkisath_SmolderwingToken_BG25_309_Gt,\r\n\tCardIds.MechaJaraxxus_RustedReggieToken,\r\n\tCardIds.MechaJaraxxus_MagtheridonPrimeToken,\r\n\tCardIds.MechaJaraxxus_BaltharakToken,\r\n\tCardIds.RustedReggie,\r\n\tCardIds.MagtheridonPrime,\r\n\tCardIds.Baltharak,\r\n\tCardIds.Shudderskull_TB_BaconShop_HP_022t_SKIN_C,\r\n\tCardIds.Shudderskull_TB_BaconShop_HP_022t_SKIN_C_G,\r\n\tCardIds.OzumatsTentacle_BG23_HERO_201pt_SKIN_A,\r\n\tCardIds.OzumatsTentacle_BG23_HERO_201pt_SKIN_A_G,\r\n\t// 26.2\r\n\tCardIds.Manasaber_CublingToken_BG26_800t,\r\n\tCardIds.Manasaber_CublingToken_BG26_800_Gt,\r\n\tCardIds.TentacleOfOctosariToken_BG26_803t,\r\n\tCardIds.TentacleOfOctosariToken_BG26_803_Gt,\r\n\t//27.2\r\n\tCardIds.OozelingGladiator_SlimyShieldToken_BG27_002t,\r\n\tCardIds.SurfNSurf_CrabMountToken_BG27_004t,\r\n\tCardIds.SurfNSurf_CrabMountToken_BG27_004_Gt,\r\n\tCardIds.SurfNSurf_CrabToken_BG27_004t2,\r\n\tCardIds.SurfNSurf_CrabToken_BG27_004_Gt2,\r\n\tCardIds.MechanizedGiftHorse_MechorseToken_BG27_008_Gt,\r\n\tCardIds.MechanizedGiftHorse_MechaponyToken_BG27_008t2,\r\n\tCardIds.MechanizedGiftHorse_MechorseToken_BG27_008_Gt,\r\n\tCardIds.MechanizedGiftHorse_MechaponyToken_BG27_008_Gt2,\r\n\tCardIds.TavernTier2,\r\n\tCardIds.TavernTier3,\r\n\tCardIds.TavernTier4,\r\n\tCardIds.TavernTier5,\r\n\tCardIds.TavernTier6,\r\n\tCardIds.TavernTier7_TB_BaconShopTechUp07_Button,\r\n\tCardIds.TombPillager_WON_340,\r\n\t// 27.2.2\r\n\tCardIds.MechanizedGiftHorse_MechorseToken_BG27_008t,\r\n\tCardIds.MechanizedGiftHorse_MechorseToken_BG27_008_Gt,\r\n\t// 28.6\r\n\tCardIds.StableAmalgamation_TotallyNormalHorseToken_BG28_Reward_518t,\r\n\tCardIds.TotallyNormalHorse_BG28_Reward_518t_G,\r\n\tCardIds.BoonOfBeetles_BeetleToken_BG28_603t,\r\n\tCardIds.Beetle_BG28_603t_G,\r\n\tCardIds.ToxicTumbleweed_TumblingAssassinToken_BG28_641t,\r\n\tCardIds.TumblingAssassin_BG28_641t_G,\r\n];\r\n\r\nexport const NON_DISCOVERABLE_BUDDIES = [\r\n\tCardIds.SpiritRaptor_BG22_HERO_001_Buddy,\r\n\tCardIds.RagingContender_TB_BaconShop_HERO_67_Buddy,\r\n\tCardIds.CaptainFairmount_BG21_HERO_000_Buddy,\r\n\tCardIds.FlightTrainer_BG20_HERO_283_Buddy,\r\n\tCardIds.JandicesApprentice_TB_BaconShop_HERO_71_Buddy,\r\n\tCardIds.CrimsonHandCenturion_TB_BaconShop_HERO_60_Buddy,\r\n\tCardIds.CrazyMonkey_TB_BaconShop_HERO_38_Buddy,\r\n\tCardIds.ShadowWarden_TB_BaconShop_HERO_62_Buddy,\r\n\tCardIds.NexusLord_TB_BaconShop_HERO_58_Buddy,\r\n\tCardIds.LeiFlamepaw_BG20_HERO_202_Buddy,\r\n\tCardIds.Watfin_BG23_HERO_303_Buddy,\r\n\tCardIds.NightmareEctoplasm_BG20_HERO_301_Buddy,\r\n\tCardIds.ManyWhelps_BG22_HERO_305_Buddy,\r\n\tCardIds.DranoshSaurfang_BG20_HERO_102_Buddy,\r\n\tCardIds.Tamuzo_BG23_HERO_201_Buddy,\r\n\tCardIds.MaxwellMightySteed_TB_BaconShop_HERO_40_Buddy,\r\n\tCardIds.Crabby_BG22_HERO_000_Buddy,\r\n\tCardIds.Mishmash_TB_BaconShop_HERO_33_Buddy,\r\n\tCardIds.PigeonLord_TB_BaconShop_HERO_12_Buddy,\r\n\tCardIds.VardensAquarrior_BG22_HERO_004_Buddy,\r\n\tCardIds.AcolyteOfYoggSaron_TB_BaconShop_HERO_35_Buddy,\r\n\tCardIds.SubmersibleChef_BG22_HERO_201_Buddy,\r\n];\r\n\r\nexport const BUDDIES_TRIBE_REQUIREMENTS = [\r\n\t{\r\n\t\tbuddy: CardIds.Vaelastrasz_TB_BaconShop_HERO_56_Buddy,\r\n\t\ttribe: Race.DRAGON,\r\n\t},\r\n\t{\r\n\t\tbuddy: CardIds.DeathsHeadSage_BG20_HERO_103_Buddy,\r\n\t\ttribe: Race.QUILBOAR,\r\n\t},\r\n\t{\r\n\t\tbuddy: CardIds.SparkfinSoothsayer_TB_BaconShop_HERO_55_Buddy,\r\n\t\ttribe: Race.MURLOC,\r\n\t},\r\n\t{\r\n\t\tbuddy: CardIds.SubScrubber_BG22_HERO_200_Buddy,\r\n\t\ttribe: Race.MECH,\r\n\t},\r\n\t{\r\n\t\tbuddy: CardIds.CoilfangElite_BG23_HERO_304_Buddy,\r\n\t\ttribe: Race.NAGA,\r\n\t},\r\n\t{\r\n\t\tbuddy: CardIds.Kilrek_TB_BaconShop_HERO_37_Buddy,\r\n\t\ttribe: Race.DEMON,\r\n\t},\r\n\t{\r\n\t\tbuddy: CardIds.ElementiumSquirrelBomb_TB_BaconShop_HERO_17_Buddy,\r\n\t\ttribe: Race.MECH,\r\n\t},\r\n\t{\r\n\t\tbuddy: CardIds.TuskarrRaider_TB_BaconShop_HERO_18_Buddy,\r\n\t\ttribe: Race.PIRATE,\r\n\t},\r\n\t{\r\n\t\tbuddy: CardIds.Festergut_BG25_HERO_100_Buddy,\r\n\t\ttribe: Race.UNDEAD,\r\n\t},\r\n\t{\r\n\t\tbuddy: CardIds.ImperialDefender_BG22_HERO_007_Buddy,\r\n\t\ttribe: Race.NAGA,\r\n\t},\r\n\t{\r\n\t\tbuddy: CardIds.ValithriaDreamwalker_TB_BaconShop_HERO_53_Buddy,\r\n\t\ttribe: Race.DRAGON,\r\n\t},\r\n];\r\n\r\nexport const defaultStartingHp = (\r\n\tgameType: GameType,\r\n\theroCardId: string,\r\n\tallCards: { getCard: (cardId: string | number) => ReferenceCard },\r\n): number => {\r\n\tif (isBattlegrounds(gameType)) {\r\n\t\tconst normalized = normalizeHeroCardId(heroCardId, allCards);\r\n\t\treturn allCards.getCard(normalized).health || 30;\r\n\t}\r\n\treturn 30;\r\n};\r\n\r\nexport const isBattlegrounds = (gameType: GameType): boolean => {\r\n\treturn [\r\n\t\tGameType.GT_BATTLEGROUNDS,\r\n\t\tGameType.GT_BATTLEGROUNDS_FRIENDLY,\r\n\t\tGameType.GT_BATTLEGROUNDS_AI_VS_AI,\r\n\t\tGameType.GT_BATTLEGROUNDS_PLAYER_VS_AI,\r\n\t].includes(gameType as GameType);\r\n};\r\n\r\nexport const normalizeHeroCardId = (\r\n\theroCardId: string,\r\n\tallCards: { getCard: (cardId: string | number) => ReferenceCard },\r\n): string => {\r\n\tif (!heroCardId) {\r\n\t\treturn heroCardId;\r\n\t}\r\n\r\n\tconst normalizedAfterSkin = normalizeHeroCardIdAfterSkin(heroCardId, allCards);\r\n\tswitch (normalizedAfterSkin) {\r\n\t\tcase 'TB_BaconShop_HERO_59t':\r\n\t\t\treturn 'TB_BaconShop_HERO_59';\r\n\t\tcase CardIds.QueenAzshara_NagaQueenAzsharaToken:\r\n\t\t\treturn CardIds.QueenAzshara_BG22_HERO_007;\r\n\t\tdefault:\r\n\t\t\treturn normalizedAfterSkin;\r\n\t}\r\n};\r\n\r\nconst normalizeHeroCardIdAfterSkin = (\r\n\theroCardId: string,\r\n\tallCards: { getCard: (cardId: string | number) => ReferenceCard },\r\n): string => {\r\n\tconst heroCard = allCards.getCard(heroCardId);\r\n\tif (!!heroCard?.battlegroundsHeroParentDbfId) {\r\n\t\tconst parentCard = allCards.getCard(heroCard.battlegroundsHeroParentDbfId);\r\n\t\tif (!!parentCard) {\r\n\t\t\treturn parentCard.id;\r\n\t\t}\r\n\t}\r\n\t// Fallback to regex\r\n\tconst bgHeroSkinMatch = heroCardId.match(/(.*)_SKIN_.*/);\r\n\tif (bgHeroSkinMatch) {\r\n\t\treturn bgHeroSkinMatch[1];\r\n\t}\r\n\treturn heroCardId;\r\n};\r\n\r\nexport const getTribeName = (tribe: Race, i18n: { translateString: (input: string) => string }): string =>\r\n\ti18n.translateString(`app.battlegrounds.tribes.${Race[tribe]?.toLowerCase()}`);\r\n\r\nexport const getTribeIcon = (tribe: string | Race): string => {\r\n\tconst referenceCardId = getReferenceTribeCardId(tribe);\r\n\treturn `https://static.zerotoheroes.com/hearthstone/cardart/256x/${referenceCardId}.jpg`;\r\n};\r\n\r\nexport const getReferenceTribeCardId = (tribe: string | Race): string => {\r\n\tlet referenceCardId: string;\r\n\ttribe = (tribe as string)?.padStart ? (tribe as string).toLowerCase() : tribe;\r\n\tswitch (tribe) {\r\n\t\tcase 'mech':\r\n\t\tcase Race.MECH:\r\n\t\t\treferenceCardId = CardIds.DeflectOBot_BGS_071;\r\n\t\t\tbreak;\r\n\t\tcase 'beast':\r\n\t\tcase Race.BEAST:\r\n\t\t\treferenceCardId = CardIds.MamaBear_BGS_021;\r\n\t\t\tbreak;\r\n\t\tcase 'demon':\r\n\t\tcase Race.DEMON:\r\n\t\t\treferenceCardId = CardIds.ImpulsiveTrickster_BG21_006;\r\n\t\t\tbreak;\r\n\t\tcase 'dragon':\r\n\t\tcase Race.DRAGON:\r\n\t\t\treferenceCardId = CardIds.KalecgosArcaneAspect_BGS_041;\r\n\t\t\tbreak;\r\n\t\tcase 'murloc':\r\n\t\tcase Race.MURLOC:\r\n\t\t\treferenceCardId = CardIds.RockpoolHunter_BG_UNG_073;\r\n\t\t\tbreak;\r\n\t\tcase 'pirate':\r\n\t\tcase Race.PIRATE:\r\n\t\t\treferenceCardId = CardIds.Scallywag_BGS_061;\r\n\t\t\tbreak;\r\n\t\tcase 'elemental':\r\n\t\tcase Race.ELEMENTAL:\r\n\t\t\treferenceCardId = CardIds.Sellemental_BGS_115;\r\n\t\t\tbreak;\r\n\t\tcase 'naga':\r\n\t\tcase Race.NAGA:\r\n\t\t\treferenceCardId = CardIds.ShellCollector_BG23_002;\r\n\t\t\tbreak;\r\n\t\tcase 'quilboar':\r\n\t\tcase Race.QUILBOAR:\r\n\t\t\treferenceCardId = CardIds.SunBaconRelaxer_BG20_301;\r\n\t\t\tbreak;\r\n\t\tcase 'undead':\r\n\t\tcase Race.UNDEAD:\r\n\t\t\treferenceCardId = CardIds.EternalKnight_BG25_008;\r\n\t\t\tbreak;\r\n\t\tcase 'all':\r\n\t\tcase Race.ALL:\r\n\t\t\treferenceCardId = CardIds.Amalgadon_BGS_069;\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\treferenceCardId = CardIds.PatientScout_BG24_715;\r\n\t\t\tbreak;\r\n\t}\r\n\treturn referenceCardId;\r\n};\r\n\r\nexport const getHeroPower = (\r\n\theroCardId: string,\r\n\tallCards: { getCard: (cardId: string | number) => ReferenceCard },\r\n): string => {\r\n\tconst normalized = normalizeHeroCardId(heroCardId, allCards);\r\n\tswitch (normalized) {\r\n\t\tcase 'TB_BaconShop_HERO_01':\r\n\t\t\treturn 'TB_BaconShop_HP_001';\r\n\t\tcase 'TB_BaconShop_HERO_02':\r\n\t\t\treturn 'TB_BaconShop_HP_011';\r\n\t\tcase 'TB_BaconShop_HERO_08':\r\n\t\t\treturn 'TB_BaconShop_HP_069';\r\n\t\tcase CardIds.RagnarosTheFirelord_TB_BaconShop_HERO_11:\r\n\t\t\treturn CardIds.DieInsects_TB_BaconShop_HP_087;\r\n\t\tcase 'TB_BaconShop_HERO_12':\r\n\t\t\treturn 'TB_BaconShop_HP_041';\r\n\t\tcase CardIds.QueenWagtoggle_TB_BaconShop_HERO_14:\r\n\t\t\treturn CardIds.WaxWarband;\r\n\t\tcase 'TB_BaconShop_HERO_15':\r\n\t\t\treturn 'TB_BaconShop_HP_010';\r\n\t\tcase 'TB_BaconShop_HERO_16':\r\n\t\t\treturn 'TB_BaconShop_HP_044';\r\n\t\tcase 'TB_BaconShop_HERO_17':\r\n\t\t\treturn 'TB_BaconShop_HP_015';\r\n\t\tcase 'TB_BaconShop_HERO_18':\r\n\t\t\treturn 'TB_BaconShop_HP_072';\r\n\t\tcase 'TB_BaconShop_HERO_20':\r\n\t\t\treturn 'TB_BaconShop_HP_018';\r\n\t\tcase 'TB_BaconShop_HERO_21':\r\n\t\t\treturn 'TB_BaconShop_HP_020';\r\n\t\tcase 'TB_BaconShop_HERO_22':\r\n\t\t\treturn 'TB_BaconShop_HP_024';\r\n\t\tcase CardIds.Shudderwock_TB_BaconShop_HERO_23:\r\n\t\t\treturn CardIds.SnickerSnack;\r\n\t\tcase 'TB_BaconShop_HERO_25':\r\n\t\t\treturn 'TB_BaconShop_HP_049';\r\n\t\tcase 'TB_BaconShop_HERO_27':\r\n\t\t\treturn 'TB_BaconShop_HP_014';\r\n\t\tcase 'TB_BaconShop_HERO_28':\r\n\t\t\treturn 'TB_BaconShop_HP_028';\r\n\t\tcase 'TB_BaconShop_HERO_30':\r\n\t\t\treturn 'TB_BaconShop_HP_043';\r\n\t\tcase 'TB_BaconShop_HERO_31':\r\n\t\t\treturn 'TB_BaconShop_HP_009';\r\n\t\tcase 'TB_BaconShop_HERO_33':\r\n\t\t\treturn 'TB_BaconShop_HP_033';\r\n\t\tcase 'TB_BaconShop_HERO_34':\r\n\t\t\treturn 'TB_BaconShop_HP_035';\r\n\t\tcase 'TB_BaconShop_HERO_35':\r\n\t\t\treturn 'TB_BaconShop_HP_039';\r\n\t\tcase 'TB_BaconShop_HERO_36':\r\n\t\t\treturn 'TB_BaconShop_HP_042';\r\n\t\tcase 'TB_BaconShop_HERO_37':\r\n\t\t\treturn 'TB_BaconShop_HP_036';\r\n\t\tcase 'TB_BaconShop_HERO_38':\r\n\t\t\treturn 'TB_BaconShop_HP_038';\r\n\t\tcase 'TB_BaconShop_HERO_39':\r\n\t\t\treturn 'TB_BaconShop_HP_040';\r\n\t\tcase 'TB_BaconShop_HERO_40':\r\n\t\t\treturn 'TB_BaconShop_HP_057';\r\n\t\tcase 'TB_BaconShop_HERO_41':\r\n\t\t\treturn 'TB_BaconShop_HP_046';\r\n\t\tcase 'TB_BaconShop_HERO_42':\r\n\t\t\treturn 'TB_BaconShop_HP_047';\r\n\t\tcase 'TB_BaconShop_HERO_43':\r\n\t\t\treturn 'TB_BaconShop_HP_048';\r\n\t\t// case 'TB_BaconShop_HERO_44':\r\n\t\t// \treturn 'TB_BaconShop_HP_050';\r\n\t\tcase 'TB_BaconShop_HERO_45':\r\n\t\t\treturn 'TB_BaconShop_HP_053';\r\n\t\tcase 'TB_BaconShop_HERO_47':\r\n\t\t\treturn 'TB_BaconShop_HP_051';\r\n\t\tcase 'TB_BaconShop_HERO_49':\r\n\t\t\treturn 'TB_BaconShop_HP_054';\r\n\t\tcase 'TB_BaconShop_HERO_50':\r\n\t\t\treturn 'TB_BaconShop_HP_077';\r\n\t\tcase 'TB_BaconShop_HERO_52':\r\n\t\t\treturn 'TB_BaconShop_HP_061';\r\n\t\tcase 'TB_BaconShop_HERO_53':\r\n\t\t\treturn 'TB_BaconShop_HP_062';\r\n\t\tcase 'TB_BaconShop_HERO_55':\r\n\t\t\treturn 'TB_BaconShop_HP_056';\r\n\t\tcase 'TB_BaconShop_HERO_56':\r\n\t\t\treturn 'TB_BaconShop_HP_064';\r\n\t\tcase 'TB_BaconShop_HERO_57':\r\n\t\t\treturn 'TB_BaconShop_HP_063';\r\n\t\tcase 'TB_BaconShop_HERO_58':\r\n\t\t\treturn 'TB_BaconShop_HP_052';\r\n\t\tcase 'TB_BaconShop_HERO_59t':\r\n\t\t\treturn 'TB_BaconShop_HP_065t2';\r\n\t\tcase 'TB_BaconShop_HERO_59':\r\n\t\t\treturn 'TB_BaconShop_HP_065';\r\n\t\tcase 'TB_BaconShop_HERO_60':\r\n\t\t\treturn 'TB_BaconShop_HP_066';\r\n\t\tcase 'TB_BaconShop_HERO_61':\r\n\t\t\treturn 'TB_BaconShop_HP_067';\r\n\t\tcase 'TB_BaconShop_HERO_62':\r\n\t\t\treturn 'TB_BaconShop_HP_068';\r\n\t\tcase 'TB_BaconShop_HERO_64':\r\n\t\t\treturn 'TB_BaconShop_HP_074';\r\n\t\tcase CardIds.CaptainHooktusk_TB_BaconShop_HERO_67:\r\n\t\t\treturn CardIds.TrashForTreasure;\r\n\t\tcase 'TB_BaconShop_HERO_68':\r\n\t\t\treturn 'TB_BaconShop_HP_076';\r\n\t\tcase 'TB_BaconShop_HERO_70':\r\n\t\t\treturn 'TB_BaconShop_HP_080';\r\n\t\tcase 'TB_BaconShop_HERO_71':\r\n\t\t\treturn 'TB_BaconShop_HP_084';\r\n\t\tcase 'TB_BaconShop_HERO_72':\r\n\t\t\treturn 'TB_BaconShop_HP_081';\r\n\t\tcase 'TB_BaconShop_HERO_74':\r\n\t\t\treturn 'TB_BaconShop_HP_082';\r\n\t\tcase CardIds.Chenvaala_TB_BaconShop_HERO_78:\r\n\t\t\treturn CardIds.Avalanche_TB_BaconShop_HP_088;\r\n\t\tcase CardIds.Rakanishu_TB_BaconShop_HERO_75:\r\n\t\t\treturn CardIds.TavernLighting;\r\n\t\tcase CardIds.Alakir:\r\n\t\t\treturn CardIds.SwattingInsects;\r\n\t\tcase CardIds.ZephrysTheGreat_TB_BaconShop_HERO_91:\r\n\t\t\treturn CardIds.ThreeWishes;\r\n\t\tcase CardIds.SilasDarkmoon_TB_BaconShop_HERO_90:\r\n\t\t\treturn CardIds.ComeOneComeAll;\r\n\t\tcase CardIds.Cthun_TB_BaconShop_HERO_29:\r\n\t\t\treturn CardIds.SaturdayCthuns;\r\n\t\tcase CardIds.Nzoth:\r\n\t\t\treturn CardIds.AvatarOfNzoth;\r\n\t\tcase CardIds.Yshaarj:\r\n\t\t\treturn CardIds.EmbraceYourRage;\r\n\t\tcase CardIds.Tickatus_TB_BaconShop_HERO_94:\r\n\t\t\treturn CardIds.PrizeWall;\r\n\t\tcase CardIds.Greybough_TB_BaconShop_HERO_95:\r\n\t\t\treturn CardIds.SproutItOut;\r\n\t\tcase CardIds.OverlordSaurfang_BG20_HERO_102:\r\n\t\t\treturn CardIds.OverlordSaurfang_ForTheHorde;\r\n\t\tcase CardIds.DeathSpeakerBlackthorn_BG20_HERO_103:\r\n\t\t\treturn CardIds.DeathSpeakerBlackthorn_Bloodbound;\r\n\t\tcase CardIds.Voljin_BG20_HERO_201:\r\n\t\t\treturn CardIds.Voljin_SpiritSwap_BG20_HERO_201p;\r\n\t\tcase CardIds.Xyrella_BG20_HERO_101:\r\n\t\t\treturn CardIds.Xyrella_SeeTheLight;\r\n\t\tcase CardIds.MutanusTheDevourer_BG20_HERO_301:\r\n\t\t\treturn CardIds.MutanusTheDevourer_Devour;\r\n\t\tcase CardIds.GuffRunetotem_BG20_HERO_242:\r\n\t\t\treturn CardIds.GuffRunetotem_NaturalBalance;\r\n\t\tcase CardIds.KurtrusAshfallen_BG20_HERO_280:\r\n\t\t\treturn CardIds.KurtrusAshfallen_GlaiveRicochet;\r\n\t\tcase CardIds.Galewing:\r\n\t\t\treturn CardIds.Galewing_DungarsGryphon;\r\n\t\tcase CardIds.TradePrinceGallywix_TB_BaconShop_HERO_10:\r\n\t\t\treturn CardIds.SmartSavings;\r\n\t\tcase CardIds.MasterNguyen:\r\n\t\t\treturn CardIds.MasterNguyen_PowerOfTheStorm;\r\n\t\tcase CardIds.CarielRoame_BG21_HERO_000:\r\n\t\t\treturn CardIds.CarielRoame_Conviction;\r\n\t\tcase CardIds.Sneed_BG21_HERO_030:\r\n\t\t\treturn CardIds.Sneed_SneedsReplicator;\r\n\t\tcase CardIds.CookieTheCook_BG21_HERO_020:\r\n\t\t\treturn CardIds.CookieTheCook_StirThePot;\r\n\t\tcase CardIds.TamsinRoame_BG20_HERO_282:\r\n\t\t\treturn CardIds.TamsinRoame_FragrantPhylactery;\r\n\t\tcase CardIds.ScabbsCutterbutter_BG21_HERO_010:\r\n\t\t\treturn CardIds.ScabbsCutterbutter_ISpy;\r\n\t\tcase CardIds.Brukan_BG22_HERO_001:\r\n\t\t\treturn CardIds.Brukan_EmbraceTheElements;\r\n\t\tcase CardIds.Drekthar_BG22_HERO_002:\r\n\t\t\treturn CardIds.Drekthar_LeadTheFrostwolves;\r\n\t\tcase CardIds.VanndarStormpike_BG22_HERO_003:\r\n\t\t\treturn CardIds.VanndarStormpike_LeadTheStormpikes;\r\n\t\tcase CardIds.TavishStormpike_BG22_HERO_000:\r\n\t\t\treturn CardIds.TavishStormpike_Deadeye;\r\n\t\tcase CardIds.VardenDawngrasp_BG22_HERO_004:\r\n\t\t\treturn CardIds.VardenDawngrasp_TwiceAsNice;\r\n\t\tcase CardIds.Rokara_BG20_HERO_100:\r\n\t\t\treturn CardIds.Rokara_GloryOfCombat;\r\n\t\tcase CardIds.Onyxia_BG22_HERO_305:\r\n\t\t\treturn CardIds.Onyxia_Broodmother;\r\n\t\tcase CardIds.AmbassadorFaelin_BG22_HERO_201:\r\n\t\t\treturn CardIds.AmbassadorFaelin_ExpeditionPlans;\r\n\t\tcase CardIds.IniStormcoil_BG22_HERO_200:\r\n\t\t\treturn CardIds.IniStormcoil_Mechgyver;\r\n\t\tcase CardIds.QueenAzshara_BG22_HERO_007:\r\n\t\t\treturn CardIds.QueenAzshara_AzsharasAmbition;\r\n\t\tcase CardIds.QueenAzshara_NagaQueenAzsharaToken:\r\n\t\t\treturn CardIds.QueenAzshara_NagaConquest;\r\n\t\tcase CardIds.Ozumat_BG23_HERO_201:\r\n\t\t\treturn CardIds.Ozumat_Tentacular;\r\n\t\tcase CardIds.LadyVashj_BG23_HERO_304:\r\n\t\t\treturn CardIds.LadyVashj_RelicsOfTheDeep;\r\n\t\tcase CardIds.HeistbaronTogwaggle_BG23_HERO_305:\r\n\t\t\treturn CardIds.HeistbaronTogwaggle_ThePerfectCrime;\r\n\t\tcase CardIds.MurlocHolmes_BG23_HERO_303:\r\n\t\t\treturn CardIds.MurlocHolmes_DetectiveForHire;\r\n\t\tcase CardIds.SireDenathrius_BG24_HERO_100:\r\n\t\t\treturn CardIds.SireDenathrius_Whodunitquestion;\r\n\t\tcase CardIds.SylvanasWindrunner_BG23_HERO_306:\r\n\t\t\treturn CardIds.SylvanasWindrunner_ReclaimedSouls;\r\n\t\tcase CardIds.TheJailer_TB_BaconShop_HERO_702:\r\n\t\t\treturn CardIds.RunicEmpowerment;\r\n\t\tcase CardIds.EnhanceOMechano_BG24_HERO_204:\r\n\t\t\treturn CardIds.EnhanceOMechano_Enhancification;\r\n\t\tcase CardIds.ProfessorPutricide_BG25_HERO_100:\r\n\t\t\treturn CardIds.ProfessorPutricide_BuildAnUndead;\r\n\t\tcase CardIds.TeronGorefiend_BG25_HERO_103:\r\n\t\t\treturn CardIds.TeronGorefiend_RapidReanimation;\r\n\t\tcase CardIds.ETCBandManager_BG25_HERO_105:\r\n\t\t\treturn CardIds.ETCBandManager_SignANewArtist;\r\n\t\tcase CardIds.RockMasterVoone_BG26_HERO_104:\r\n\t\t\treturn CardIds.RockMasterVoone_UpbeatHarmony;\r\n\t\tcase CardIds.IngeTheIronHymn:\r\n\t\t\treturn CardIds.IngeTheIronHymn_MajorHymn;\r\n\t\tcase CardIds.CapnHoggarr_BG26_HERO_101:\r\n\t\t\treturn CardIds.CapnHoggarr_ImTheCapnNow;\r\n\t\tcase CardIds.Diablo:\r\n\t\t\treturn CardIds.Diablo_RealmOfTerror;\r\n\t\tcase CardIds.ThorimStormlord_BG27_HERO_801:\r\n\t\t\treturn CardIds.ThorimStormlord_ChooseYourChampion_BG27_HERO_801p2;\r\n\t\tcase CardIds.SnakeEyes_BG28_HERO_400:\r\n\t\t\treturn CardIds.SnakeEyes_LuckyRoll_BG28_HERO_400p;\r\n\t\tcase CardIds.TaethelanBloodwatcher_BG28_HERO_800:\r\n\t\t\treturn CardIds.TaethelanBloodwatcher_ReliquaryResearch_BG28_HERO_800p;\r\n\t\tcase CardIds.DoctorHollidae_BG28_HERO_801:\r\n\t\t\treturn CardIds.DoctorHollidae_BlessingOfTheNineFrogs_BG28_HERO_801p;\r\n\r\n\t\tcase '':\r\n\t\t\treturn null; // new heroes\r\n\t}\r\n};\r\n"]}
1
+ {"version":3,"file":"bgs-utils.js","sourceRoot":"","sources":["../../src/services/bgs-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds, GameType, Race, ReferenceCard } from '../public-api';\r\n\r\nexport const ALL_BG_RACES = [\r\n\tRace.BEAST,\r\n\tRace.DEMON,\r\n\tRace.DRAGON,\r\n\tRace.MECH,\r\n\tRace.MURLOC,\r\n\tRace.PIRATE,\r\n\tRace.ELEMENTAL,\r\n\tRace.QUILBOAR,\r\n\tRace.NAGA,\r\n\tRace.UNDEAD,\r\n];\r\n\r\nexport const TOTAL_RACES_IN_GAME = 5;\r\n\r\nexport const NON_BUYABLE_MINION_IDS = [\r\n\tCardIds.Cuddlgam_TB_BaconShop_HP_033t_SKIN_A,\r\n\tCardIds.Cuddlgam_TB_BaconShop_HP_033t_SKIN_A_G,\r\n\tCardIds.AbominableAmalgam_TB_BaconShop_HP_033t_SKIN_D,\r\n\tCardIds.AbominableAmalgam_TB_BaconShop_HP_033t_SKIN_D_G,\r\n\tCardIds.BookEatingAmalgam_TB_BaconShop_HP_033t_SKIN_B,\r\n\tCardIds.BookEatingAmalgam_TB_BaconShop_HP_033t_SKIN_B_G,\r\n\t// CardIds.ArgentBraggart_BG_SCH_149,\r\n\t// CardIds.ArgentBraggart_TB_BaconUps_308,\r\n\tCardIds.AvatarOfNzoth_FishOfNzothToken,\r\n\tCardIds.FishOfNzoth,\r\n\tCardIds.CattlecarpOfNzoth_TB_BaconShop_HP_105t_SKIN_A,\r\n\tCardIds.CattlecarpOfNzoth_TB_BaconShop_HP_105t_SKIN_A_G,\r\n\tCardIds.SnakeTrap_SnakeLegacyToken,\r\n\tCardIds.SnakeTrap_SnakeVanillaToken,\r\n\tCardIds.ImprovedSnakeTrap_SnakeToken,\r\n\tCardIds.ElementEarth_StoneElementalToken,\r\n\tCardIds.BabyKrush_DevilsaurToken,\r\n\tCardIds.Devilsaur,\r\n\t// To remove once the cards list is properly updated\r\n\tCardIds.FriendOfAFriend_BG22_404,\r\n\tCardIds.FriendOfAFriend_BG22_404_G,\r\n\tCardIds.Onyxia_OnyxianWhelpToken,\r\n\tCardIds.MurlocWarleaderCore,\r\n\tCardIds.MurlocWarleaderVanilla,\r\n\t// 23.4, probably not needed since they are already tokens\r\n\tCardIds.Tentacular_OzumatsTentacleToken_BG23_HERO_201pt,\r\n\tCardIds.Tentacular_OzumatsTentacleToken_BG23_HERO_201pt2,\r\n\tCardIds.Tentacular_OzumatsTentacleToken_BG23_HERO_201pt3,\r\n\tCardIds.Tentacular_OzumatsTentacleToken_BG23_HERO_201pt4,\r\n\tCardIds.Tentacular_OzumatsTentacleToken_BG23_HERO_201pt5,\r\n\tCardIds.Tentacular_OzumatsTentacleToken_BG23_HERO_201pt6,\r\n\t// 24.0, same\r\n\tCardIds.EmperorCobraLegacy_BG_EX1_170,\r\n\tCardIds.EmperorCobraLegacy_BG_EX1_170_G,\r\n\tCardIds.EmperorCobraLegacy_EX1_170,\r\n\tCardIds.SnakeLegacyToken,\r\n\tCardIds.SnakeLegacy,\r\n\tCardIds.ElementEarth_StoneElementalToken,\r\n\tCardIds.BolvarFireblood_CORE_ICC_858,\r\n\tCardIds.BolvarFireblood_ICC_858,\r\n\t// 25.2\r\n\tCardIds.HandlessForsaken_HelpingHandToken_BG25_010t,\r\n\tCardIds.HandlessForsaken_HelpingHandToken_BG25_010_Gt,\r\n\tCardIds.GeneralDrakkisath_SmolderwingToken_BG25_309t,\r\n\tCardIds.GeneralDrakkisath_SmolderwingToken_BG25_309_Gt,\r\n\tCardIds.MechaJaraxxus_RustedReggieToken,\r\n\tCardIds.MechaJaraxxus_MagtheridonPrimeToken,\r\n\tCardIds.MechaJaraxxus_BaltharakToken,\r\n\tCardIds.RustedReggie,\r\n\tCardIds.MagtheridonPrime,\r\n\tCardIds.Baltharak,\r\n\tCardIds.Shudderskull_TB_BaconShop_HP_022t_SKIN_C,\r\n\tCardIds.Shudderskull_TB_BaconShop_HP_022t_SKIN_C_G,\r\n\tCardIds.OzumatsTentacle_BG23_HERO_201pt_SKIN_A,\r\n\tCardIds.OzumatsTentacle_BG23_HERO_201pt_SKIN_A_G,\r\n\t// 26.2\r\n\tCardIds.Manasaber_CublingToken_BG26_800t,\r\n\tCardIds.Manasaber_CublingToken_BG26_800_Gt,\r\n\tCardIds.TentacleOfOctosariToken_BG26_803t,\r\n\tCardIds.TentacleOfOctosariToken_BG26_803_Gt,\r\n\t//27.2\r\n\tCardIds.OozelingGladiator_SlimyShieldToken_BG27_002t,\r\n\tCardIds.SurfNSurf_CrabMountToken_BG27_004t,\r\n\tCardIds.SurfNSurf_CrabMountToken_BG27_004_Gt,\r\n\tCardIds.SurfNSurf_CrabToken_BG27_004t2,\r\n\tCardIds.SurfNSurf_CrabToken_BG27_004_Gt2,\r\n\tCardIds.MechanizedGiftHorse_MechorseToken_BG27_008_Gt,\r\n\tCardIds.MechanizedGiftHorse_MechaponyToken_BG27_008t2,\r\n\tCardIds.MechanizedGiftHorse_MechorseToken_BG27_008_Gt,\r\n\tCardIds.MechanizedGiftHorse_MechaponyToken_BG27_008_Gt2,\r\n\tCardIds.TavernTier2,\r\n\tCardIds.TavernTier3,\r\n\tCardIds.TavernTier4,\r\n\tCardIds.TavernTier5,\r\n\tCardIds.TavernTier6,\r\n\tCardIds.TavernTier7_TB_BaconShopTechUp07_Button,\r\n\tCardIds.TombPillager_WON_340,\r\n\t// 27.2.2\r\n\tCardIds.MechanizedGiftHorse_MechorseToken_BG27_008t,\r\n\tCardIds.MechanizedGiftHorse_MechorseToken_BG27_008_Gt,\r\n\t// 28.6\r\n\tCardIds.StableAmalgamation_TotallyNormalHorseToken_BG28_Reward_518t,\r\n\tCardIds.TotallyNormalHorse_BG28_Reward_518t_G,\r\n\tCardIds.BoonOfBeetles_BeetleToken_BG28_603t,\r\n\tCardIds.Beetle_BG28_603t_G,\r\n\tCardIds.ToxicTumbleweed_TumblingAssassinToken_BG28_641t,\r\n\tCardIds.TumblingAssassin_BG28_641t_G,\r\n];\r\n\r\nexport const NON_DISCOVERABLE_BUDDIES = [\r\n\tCardIds.SpiritRaptor_BG22_HERO_001_Buddy,\r\n\tCardIds.RagingContender_TB_BaconShop_HERO_67_Buddy,\r\n\tCardIds.CaptainFairmount_BG21_HERO_000_Buddy,\r\n\tCardIds.FlightTrainer_BG20_HERO_283_Buddy,\r\n\tCardIds.JandicesApprentice_TB_BaconShop_HERO_71_Buddy,\r\n\tCardIds.CrimsonHandCenturion_TB_BaconShop_HERO_60_Buddy,\r\n\tCardIds.CrazyMonkey_TB_BaconShop_HERO_38_Buddy,\r\n\tCardIds.ShadowWarden_TB_BaconShop_HERO_62_Buddy,\r\n\tCardIds.NexusLord_TB_BaconShop_HERO_58_Buddy,\r\n\tCardIds.LeiFlamepaw_BG20_HERO_202_Buddy,\r\n\tCardIds.Watfin_BG23_HERO_303_Buddy,\r\n\tCardIds.NightmareEctoplasm_BG20_HERO_301_Buddy,\r\n\tCardIds.ManyWhelps_BG22_HERO_305_Buddy,\r\n\tCardIds.DranoshSaurfang_BG20_HERO_102_Buddy,\r\n\tCardIds.Tamuzo_BG23_HERO_201_Buddy,\r\n\tCardIds.MaxwellMightySteed_TB_BaconShop_HERO_40_Buddy,\r\n\tCardIds.Crabby_BG22_HERO_000_Buddy,\r\n\tCardIds.Mishmash_TB_BaconShop_HERO_33_Buddy,\r\n\tCardIds.PigeonLord_TB_BaconShop_HERO_12_Buddy,\r\n\tCardIds.VardensAquarrior_BG22_HERO_004_Buddy,\r\n\tCardIds.AcolyteOfYoggSaron_TB_BaconShop_HERO_35_Buddy,\r\n\tCardIds.SubmersibleChef_BG22_HERO_201_Buddy,\r\n];\r\n\r\nexport const BUDDIES_TRIBE_REQUIREMENTS = [\r\n\t{\r\n\t\tbuddy: CardIds.Vaelastrasz_TB_BaconShop_HERO_56_Buddy,\r\n\t\ttribe: Race.DRAGON,\r\n\t},\r\n\t{\r\n\t\tbuddy: CardIds.DeathsHeadSage_BG20_HERO_103_Buddy,\r\n\t\ttribe: Race.QUILBOAR,\r\n\t},\r\n\t{\r\n\t\tbuddy: CardIds.SparkfinSoothsayer_TB_BaconShop_HERO_55_Buddy,\r\n\t\ttribe: Race.MURLOC,\r\n\t},\r\n\t{\r\n\t\tbuddy: CardIds.SubScrubber_BG22_HERO_200_Buddy,\r\n\t\ttribe: Race.MECH,\r\n\t},\r\n\t{\r\n\t\tbuddy: CardIds.CoilfangElite_BG23_HERO_304_Buddy,\r\n\t\ttribe: Race.NAGA,\r\n\t},\r\n\t{\r\n\t\tbuddy: CardIds.Kilrek_TB_BaconShop_HERO_37_Buddy,\r\n\t\ttribe: Race.DEMON,\r\n\t},\r\n\t{\r\n\t\tbuddy: CardIds.ElementiumSquirrelBomb_TB_BaconShop_HERO_17_Buddy,\r\n\t\ttribe: Race.MECH,\r\n\t},\r\n\t{\r\n\t\tbuddy: CardIds.TuskarrRaider_TB_BaconShop_HERO_18_Buddy,\r\n\t\ttribe: Race.PIRATE,\r\n\t},\r\n\t{\r\n\t\tbuddy: CardIds.Festergut_BG25_HERO_100_Buddy,\r\n\t\ttribe: Race.UNDEAD,\r\n\t},\r\n\t{\r\n\t\tbuddy: CardIds.ImperialDefender_BG22_HERO_007_Buddy,\r\n\t\ttribe: Race.NAGA,\r\n\t},\r\n\t{\r\n\t\tbuddy: CardIds.ValithriaDreamwalker_TB_BaconShop_HERO_53_Buddy,\r\n\t\ttribe: Race.DRAGON,\r\n\t},\r\n];\r\n\r\nexport const defaultStartingHp = (\r\n\tgameType: GameType,\r\n\theroCardId: string,\r\n\tallCards: { getCard: (cardId: string | number) => ReferenceCard },\r\n): number => {\r\n\tif (isBattlegrounds(gameType)) {\r\n\t\tconst normalized = normalizeHeroCardId(heroCardId, allCards);\r\n\t\treturn allCards.getCard(normalized).health || 30;\r\n\t}\r\n\treturn 30;\r\n};\r\n\r\nexport const isBattlegrounds = (gameType: GameType): boolean => {\r\n\treturn [\r\n\t\tGameType.GT_BATTLEGROUNDS,\r\n\t\tGameType.GT_BATTLEGROUNDS_FRIENDLY,\r\n\t\tGameType.GT_BATTLEGROUNDS_AI_VS_AI,\r\n\t\tGameType.GT_BATTLEGROUNDS_PLAYER_VS_AI,\r\n\t\tGameType.GT_BATTLEGROUNDS_DUO,\r\n\t\tGameType.GT_BATTLEGROUNDS_DUO_VS_AI,\r\n\t\tGameType.GT_BATTLEGROUNDS_DUO_FRIENDLY,\r\n\t\tGameType.GT_BATTLEGROUNDS_DUO_AI_VS_AI,\r\n\t].includes(gameType as GameType);\r\n};\r\n\r\nexport const isBattlegroundsDuo = (gameType: GameType): boolean => {\r\n\treturn [\r\n\t\tGameType.GT_BATTLEGROUNDS_DUO,\r\n\t\tGameType.GT_BATTLEGROUNDS_DUO_VS_AI,\r\n\t\tGameType.GT_BATTLEGROUNDS_DUO_FRIENDLY,\r\n\t\tGameType.GT_BATTLEGROUNDS_DUO_AI_VS_AI,\r\n\t].includes(gameType as GameType);\r\n};\r\n\r\nexport const normalizeHeroCardId = (\r\n\theroCardId: string,\r\n\tallCards: { getCard: (cardId: string | number) => ReferenceCard },\r\n): string => {\r\n\tif (!heroCardId) {\r\n\t\treturn heroCardId;\r\n\t}\r\n\r\n\tconst normalizedAfterSkin = normalizeHeroCardIdAfterSkin(heroCardId, allCards);\r\n\tswitch (normalizedAfterSkin) {\r\n\t\tcase 'TB_BaconShop_HERO_59t':\r\n\t\t\treturn 'TB_BaconShop_HERO_59';\r\n\t\tcase CardIds.QueenAzshara_NagaQueenAzsharaToken:\r\n\t\t\treturn CardIds.QueenAzshara_BG22_HERO_007;\r\n\t\tdefault:\r\n\t\t\treturn normalizedAfterSkin;\r\n\t}\r\n};\r\n\r\nconst normalizeHeroCardIdAfterSkin = (\r\n\theroCardId: string,\r\n\tallCards: { getCard: (cardId: string | number) => ReferenceCard },\r\n): string => {\r\n\tconst heroCard = allCards.getCard(heroCardId);\r\n\tif (!!heroCard?.battlegroundsHeroParentDbfId) {\r\n\t\tconst parentCard = allCards.getCard(heroCard.battlegroundsHeroParentDbfId);\r\n\t\tif (!!parentCard) {\r\n\t\t\treturn parentCard.id;\r\n\t\t}\r\n\t}\r\n\t// Fallback to regex\r\n\tconst bgHeroSkinMatch = heroCardId.match(/(.*)_SKIN_.*/);\r\n\tif (bgHeroSkinMatch) {\r\n\t\treturn bgHeroSkinMatch[1];\r\n\t}\r\n\treturn heroCardId;\r\n};\r\n\r\nexport const getTribeName = (tribe: Race, i18n: { translateString: (input: string) => string }): string =>\r\n\ti18n.translateString(`app.battlegrounds.tribes.${Race[tribe]?.toLowerCase()}`);\r\n\r\nexport const getTribeIcon = (tribe: string | Race): string => {\r\n\tconst referenceCardId = getReferenceTribeCardId(tribe);\r\n\treturn `https://static.zerotoheroes.com/hearthstone/cardart/256x/${referenceCardId}.jpg`;\r\n};\r\n\r\nexport const getReferenceTribeCardId = (tribe: string | Race): string => {\r\n\tlet referenceCardId: string;\r\n\ttribe = (tribe as string)?.padStart ? (tribe as string).toLowerCase() : tribe;\r\n\tswitch (tribe) {\r\n\t\tcase 'mech':\r\n\t\tcase Race.MECH:\r\n\t\t\treferenceCardId = CardIds.DeflectOBot_BGS_071;\r\n\t\t\tbreak;\r\n\t\tcase 'beast':\r\n\t\tcase Race.BEAST:\r\n\t\t\treferenceCardId = CardIds.MamaBear_BGS_021;\r\n\t\t\tbreak;\r\n\t\tcase 'demon':\r\n\t\tcase Race.DEMON:\r\n\t\t\treferenceCardId = CardIds.ImpulsiveTrickster_BG21_006;\r\n\t\t\tbreak;\r\n\t\tcase 'dragon':\r\n\t\tcase Race.DRAGON:\r\n\t\t\treferenceCardId = CardIds.KalecgosArcaneAspect_BGS_041;\r\n\t\t\tbreak;\r\n\t\tcase 'murloc':\r\n\t\tcase Race.MURLOC:\r\n\t\t\treferenceCardId = CardIds.RockpoolHunter_BG_UNG_073;\r\n\t\t\tbreak;\r\n\t\tcase 'pirate':\r\n\t\tcase Race.PIRATE:\r\n\t\t\treferenceCardId = CardIds.Scallywag_BGS_061;\r\n\t\t\tbreak;\r\n\t\tcase 'elemental':\r\n\t\tcase Race.ELEMENTAL:\r\n\t\t\treferenceCardId = CardIds.Sellemental_BGS_115;\r\n\t\t\tbreak;\r\n\t\tcase 'naga':\r\n\t\tcase Race.NAGA:\r\n\t\t\treferenceCardId = CardIds.ShellCollector_BG23_002;\r\n\t\t\tbreak;\r\n\t\tcase 'quilboar':\r\n\t\tcase Race.QUILBOAR:\r\n\t\t\treferenceCardId = CardIds.SunBaconRelaxer_BG20_301;\r\n\t\t\tbreak;\r\n\t\tcase 'undead':\r\n\t\tcase Race.UNDEAD:\r\n\t\t\treferenceCardId = CardIds.EternalKnight_BG25_008;\r\n\t\t\tbreak;\r\n\t\tcase 'all':\r\n\t\tcase Race.ALL:\r\n\t\t\treferenceCardId = CardIds.Amalgadon_BGS_069;\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\treferenceCardId = CardIds.PatientScout_BG24_715;\r\n\t\t\tbreak;\r\n\t}\r\n\treturn referenceCardId;\r\n};\r\n\r\nexport const getHeroPower = (\r\n\theroCardId: string,\r\n\tallCards: { getCard: (cardId: string | number) => ReferenceCard },\r\n): string => {\r\n\tconst normalized = normalizeHeroCardId(heroCardId, allCards);\r\n\tswitch (normalized) {\r\n\t\tcase 'TB_BaconShop_HERO_01':\r\n\t\t\treturn 'TB_BaconShop_HP_001';\r\n\t\tcase 'TB_BaconShop_HERO_02':\r\n\t\t\treturn 'TB_BaconShop_HP_011';\r\n\t\tcase 'TB_BaconShop_HERO_08':\r\n\t\t\treturn 'TB_BaconShop_HP_069';\r\n\t\tcase CardIds.RagnarosTheFirelord_TB_BaconShop_HERO_11:\r\n\t\t\treturn CardIds.DieInsects_TB_BaconShop_HP_087;\r\n\t\tcase 'TB_BaconShop_HERO_12':\r\n\t\t\treturn 'TB_BaconShop_HP_041';\r\n\t\tcase CardIds.QueenWagtoggle_TB_BaconShop_HERO_14:\r\n\t\t\treturn CardIds.WaxWarband;\r\n\t\tcase 'TB_BaconShop_HERO_15':\r\n\t\t\treturn 'TB_BaconShop_HP_010';\r\n\t\tcase 'TB_BaconShop_HERO_16':\r\n\t\t\treturn 'TB_BaconShop_HP_044';\r\n\t\tcase 'TB_BaconShop_HERO_17':\r\n\t\t\treturn 'TB_BaconShop_HP_015';\r\n\t\tcase 'TB_BaconShop_HERO_18':\r\n\t\t\treturn 'TB_BaconShop_HP_072';\r\n\t\tcase 'TB_BaconShop_HERO_20':\r\n\t\t\treturn 'TB_BaconShop_HP_018';\r\n\t\tcase 'TB_BaconShop_HERO_21':\r\n\t\t\treturn 'TB_BaconShop_HP_020';\r\n\t\tcase 'TB_BaconShop_HERO_22':\r\n\t\t\treturn 'TB_BaconShop_HP_024';\r\n\t\tcase CardIds.Shudderwock_TB_BaconShop_HERO_23:\r\n\t\t\treturn CardIds.SnickerSnack;\r\n\t\tcase 'TB_BaconShop_HERO_25':\r\n\t\t\treturn 'TB_BaconShop_HP_049';\r\n\t\tcase 'TB_BaconShop_HERO_27':\r\n\t\t\treturn 'TB_BaconShop_HP_014';\r\n\t\tcase 'TB_BaconShop_HERO_28':\r\n\t\t\treturn 'TB_BaconShop_HP_028';\r\n\t\tcase 'TB_BaconShop_HERO_30':\r\n\t\t\treturn 'TB_BaconShop_HP_043';\r\n\t\tcase 'TB_BaconShop_HERO_31':\r\n\t\t\treturn 'TB_BaconShop_HP_009';\r\n\t\tcase 'TB_BaconShop_HERO_33':\r\n\t\t\treturn 'TB_BaconShop_HP_033';\r\n\t\tcase 'TB_BaconShop_HERO_34':\r\n\t\t\treturn 'TB_BaconShop_HP_035';\r\n\t\tcase 'TB_BaconShop_HERO_35':\r\n\t\t\treturn 'TB_BaconShop_HP_039';\r\n\t\tcase 'TB_BaconShop_HERO_36':\r\n\t\t\treturn 'TB_BaconShop_HP_042';\r\n\t\tcase 'TB_BaconShop_HERO_37':\r\n\t\t\treturn 'TB_BaconShop_HP_036';\r\n\t\tcase 'TB_BaconShop_HERO_38':\r\n\t\t\treturn 'TB_BaconShop_HP_038';\r\n\t\tcase 'TB_BaconShop_HERO_39':\r\n\t\t\treturn 'TB_BaconShop_HP_040';\r\n\t\tcase 'TB_BaconShop_HERO_40':\r\n\t\t\treturn 'TB_BaconShop_HP_057';\r\n\t\tcase 'TB_BaconShop_HERO_41':\r\n\t\t\treturn 'TB_BaconShop_HP_046';\r\n\t\tcase 'TB_BaconShop_HERO_42':\r\n\t\t\treturn 'TB_BaconShop_HP_047';\r\n\t\tcase 'TB_BaconShop_HERO_43':\r\n\t\t\treturn 'TB_BaconShop_HP_048';\r\n\t\t// case 'TB_BaconShop_HERO_44':\r\n\t\t// \treturn 'TB_BaconShop_HP_050';\r\n\t\tcase 'TB_BaconShop_HERO_45':\r\n\t\t\treturn 'TB_BaconShop_HP_053';\r\n\t\tcase 'TB_BaconShop_HERO_47':\r\n\t\t\treturn 'TB_BaconShop_HP_051';\r\n\t\tcase 'TB_BaconShop_HERO_49':\r\n\t\t\treturn 'TB_BaconShop_HP_054';\r\n\t\tcase 'TB_BaconShop_HERO_50':\r\n\t\t\treturn 'TB_BaconShop_HP_077';\r\n\t\tcase 'TB_BaconShop_HERO_52':\r\n\t\t\treturn 'TB_BaconShop_HP_061';\r\n\t\tcase 'TB_BaconShop_HERO_53':\r\n\t\t\treturn 'TB_BaconShop_HP_062';\r\n\t\tcase 'TB_BaconShop_HERO_55':\r\n\t\t\treturn 'TB_BaconShop_HP_056';\r\n\t\tcase 'TB_BaconShop_HERO_56':\r\n\t\t\treturn 'TB_BaconShop_HP_064';\r\n\t\tcase 'TB_BaconShop_HERO_57':\r\n\t\t\treturn 'TB_BaconShop_HP_063';\r\n\t\tcase 'TB_BaconShop_HERO_58':\r\n\t\t\treturn 'TB_BaconShop_HP_052';\r\n\t\tcase 'TB_BaconShop_HERO_59t':\r\n\t\t\treturn 'TB_BaconShop_HP_065t2';\r\n\t\tcase 'TB_BaconShop_HERO_59':\r\n\t\t\treturn 'TB_BaconShop_HP_065';\r\n\t\tcase 'TB_BaconShop_HERO_60':\r\n\t\t\treturn 'TB_BaconShop_HP_066';\r\n\t\tcase 'TB_BaconShop_HERO_61':\r\n\t\t\treturn 'TB_BaconShop_HP_067';\r\n\t\tcase 'TB_BaconShop_HERO_62':\r\n\t\t\treturn 'TB_BaconShop_HP_068';\r\n\t\tcase 'TB_BaconShop_HERO_64':\r\n\t\t\treturn 'TB_BaconShop_HP_074';\r\n\t\tcase CardIds.CaptainHooktusk_TB_BaconShop_HERO_67:\r\n\t\t\treturn CardIds.TrashForTreasure;\r\n\t\tcase 'TB_BaconShop_HERO_68':\r\n\t\t\treturn 'TB_BaconShop_HP_076';\r\n\t\tcase 'TB_BaconShop_HERO_70':\r\n\t\t\treturn 'TB_BaconShop_HP_080';\r\n\t\tcase 'TB_BaconShop_HERO_71':\r\n\t\t\treturn 'TB_BaconShop_HP_084';\r\n\t\tcase 'TB_BaconShop_HERO_72':\r\n\t\t\treturn 'TB_BaconShop_HP_081';\r\n\t\tcase 'TB_BaconShop_HERO_74':\r\n\t\t\treturn 'TB_BaconShop_HP_082';\r\n\t\tcase CardIds.Chenvaala_TB_BaconShop_HERO_78:\r\n\t\t\treturn CardIds.Avalanche_TB_BaconShop_HP_088;\r\n\t\tcase CardIds.Rakanishu_TB_BaconShop_HERO_75:\r\n\t\t\treturn CardIds.TavernLighting;\r\n\t\tcase CardIds.Alakir:\r\n\t\t\treturn CardIds.SwattingInsects;\r\n\t\tcase CardIds.ZephrysTheGreat_TB_BaconShop_HERO_91:\r\n\t\t\treturn CardIds.ThreeWishes;\r\n\t\tcase CardIds.SilasDarkmoon_TB_BaconShop_HERO_90:\r\n\t\t\treturn CardIds.ComeOneComeAll;\r\n\t\tcase CardIds.Cthun_TB_BaconShop_HERO_29:\r\n\t\t\treturn CardIds.SaturdayCthuns;\r\n\t\tcase CardIds.Nzoth:\r\n\t\t\treturn CardIds.AvatarOfNzoth;\r\n\t\tcase CardIds.Yshaarj:\r\n\t\t\treturn CardIds.EmbraceYourRage;\r\n\t\tcase CardIds.Tickatus_TB_BaconShop_HERO_94:\r\n\t\t\treturn CardIds.PrizeWall;\r\n\t\tcase CardIds.Greybough_TB_BaconShop_HERO_95:\r\n\t\t\treturn CardIds.SproutItOut;\r\n\t\tcase CardIds.OverlordSaurfang_BG20_HERO_102:\r\n\t\t\treturn CardIds.OverlordSaurfang_ForTheHorde;\r\n\t\tcase CardIds.DeathSpeakerBlackthorn_BG20_HERO_103:\r\n\t\t\treturn CardIds.DeathSpeakerBlackthorn_Bloodbound;\r\n\t\tcase CardIds.Voljin_BG20_HERO_201:\r\n\t\t\treturn CardIds.Voljin_SpiritSwap_BG20_HERO_201p;\r\n\t\tcase CardIds.Xyrella_BG20_HERO_101:\r\n\t\t\treturn CardIds.Xyrella_SeeTheLight;\r\n\t\tcase CardIds.MutanusTheDevourer_BG20_HERO_301:\r\n\t\t\treturn CardIds.MutanusTheDevourer_Devour;\r\n\t\tcase CardIds.GuffRunetotem_BG20_HERO_242:\r\n\t\t\treturn CardIds.GuffRunetotem_NaturalBalance;\r\n\t\tcase CardIds.KurtrusAshfallen_BG20_HERO_280:\r\n\t\t\treturn CardIds.KurtrusAshfallen_GlaiveRicochet;\r\n\t\tcase CardIds.Galewing:\r\n\t\t\treturn CardIds.Galewing_DungarsGryphon;\r\n\t\tcase CardIds.TradePrinceGallywix_TB_BaconShop_HERO_10:\r\n\t\t\treturn CardIds.SmartSavings;\r\n\t\tcase CardIds.MasterNguyen:\r\n\t\t\treturn CardIds.MasterNguyen_PowerOfTheStorm;\r\n\t\tcase CardIds.CarielRoame_BG21_HERO_000:\r\n\t\t\treturn CardIds.CarielRoame_Conviction;\r\n\t\tcase CardIds.Sneed_BG21_HERO_030:\r\n\t\t\treturn CardIds.Sneed_SneedsReplicator;\r\n\t\tcase CardIds.CookieTheCook_BG21_HERO_020:\r\n\t\t\treturn CardIds.CookieTheCook_StirThePot;\r\n\t\tcase CardIds.TamsinRoame_BG20_HERO_282:\r\n\t\t\treturn CardIds.TamsinRoame_FragrantPhylactery;\r\n\t\tcase CardIds.ScabbsCutterbutter_BG21_HERO_010:\r\n\t\t\treturn CardIds.ScabbsCutterbutter_ISpy;\r\n\t\tcase CardIds.Brukan_BG22_HERO_001:\r\n\t\t\treturn CardIds.Brukan_EmbraceTheElements;\r\n\t\tcase CardIds.Drekthar_BG22_HERO_002:\r\n\t\t\treturn CardIds.Drekthar_LeadTheFrostwolves;\r\n\t\tcase CardIds.VanndarStormpike_BG22_HERO_003:\r\n\t\t\treturn CardIds.VanndarStormpike_LeadTheStormpikes;\r\n\t\tcase CardIds.TavishStormpike_BG22_HERO_000:\r\n\t\t\treturn CardIds.TavishStormpike_Deadeye;\r\n\t\tcase CardIds.VardenDawngrasp_BG22_HERO_004:\r\n\t\t\treturn CardIds.VardenDawngrasp_TwiceAsNice;\r\n\t\tcase CardIds.Rokara_BG20_HERO_100:\r\n\t\t\treturn CardIds.Rokara_GloryOfCombat;\r\n\t\tcase CardIds.Onyxia_BG22_HERO_305:\r\n\t\t\treturn CardIds.Onyxia_Broodmother;\r\n\t\tcase CardIds.AmbassadorFaelin_BG22_HERO_201:\r\n\t\t\treturn CardIds.AmbassadorFaelin_ExpeditionPlans;\r\n\t\tcase CardIds.IniStormcoil_BG22_HERO_200:\r\n\t\t\treturn CardIds.IniStormcoil_Mechgyver;\r\n\t\tcase CardIds.QueenAzshara_BG22_HERO_007:\r\n\t\t\treturn CardIds.QueenAzshara_AzsharasAmbition;\r\n\t\tcase CardIds.QueenAzshara_NagaQueenAzsharaToken:\r\n\t\t\treturn CardIds.QueenAzshara_NagaConquest;\r\n\t\tcase CardIds.Ozumat_BG23_HERO_201:\r\n\t\t\treturn CardIds.Ozumat_Tentacular;\r\n\t\tcase CardIds.LadyVashj_BG23_HERO_304:\r\n\t\t\treturn CardIds.LadyVashj_RelicsOfTheDeep;\r\n\t\tcase CardIds.HeistbaronTogwaggle_BG23_HERO_305:\r\n\t\t\treturn CardIds.HeistbaronTogwaggle_ThePerfectCrime;\r\n\t\tcase CardIds.MurlocHolmes_BG23_HERO_303:\r\n\t\t\treturn CardIds.MurlocHolmes_DetectiveForHire;\r\n\t\tcase CardIds.SireDenathrius_BG24_HERO_100:\r\n\t\t\treturn CardIds.SireDenathrius_Whodunitquestion;\r\n\t\tcase CardIds.SylvanasWindrunner_BG23_HERO_306:\r\n\t\t\treturn CardIds.SylvanasWindrunner_ReclaimedSouls;\r\n\t\tcase CardIds.TheJailer_TB_BaconShop_HERO_702:\r\n\t\t\treturn CardIds.RunicEmpowerment;\r\n\t\tcase CardIds.EnhanceOMechano_BG24_HERO_204:\r\n\t\t\treturn CardIds.EnhanceOMechano_Enhancification;\r\n\t\tcase CardIds.ProfessorPutricide_BG25_HERO_100:\r\n\t\t\treturn CardIds.ProfessorPutricide_BuildAnUndead;\r\n\t\tcase CardIds.TeronGorefiend_BG25_HERO_103:\r\n\t\t\treturn CardIds.TeronGorefiend_RapidReanimation;\r\n\t\tcase CardIds.ETCBandManager_BG25_HERO_105:\r\n\t\t\treturn CardIds.ETCBandManager_SignANewArtist;\r\n\t\tcase CardIds.RockMasterVoone_BG26_HERO_104:\r\n\t\t\treturn CardIds.RockMasterVoone_UpbeatHarmony;\r\n\t\tcase CardIds.IngeTheIronHymn:\r\n\t\t\treturn CardIds.IngeTheIronHymn_MajorHymn;\r\n\t\tcase CardIds.CapnHoggarr_BG26_HERO_101:\r\n\t\t\treturn CardIds.CapnHoggarr_ImTheCapnNow;\r\n\t\tcase CardIds.Diablo:\r\n\t\t\treturn CardIds.Diablo_RealmOfTerror;\r\n\t\tcase CardIds.ThorimStormlord_BG27_HERO_801:\r\n\t\t\treturn CardIds.ThorimStormlord_ChooseYourChampion_BG27_HERO_801p2;\r\n\t\tcase CardIds.SnakeEyes_BG28_HERO_400:\r\n\t\t\treturn CardIds.SnakeEyes_LuckyRoll_BG28_HERO_400p;\r\n\t\tcase CardIds.TaethelanBloodwatcher_BG28_HERO_800:\r\n\t\t\treturn CardIds.TaethelanBloodwatcher_ReliquaryResearch_BG28_HERO_800p;\r\n\t\tcase CardIds.DoctorHollidae_BG28_HERO_801:\r\n\t\t\treturn CardIds.DoctorHollidae_BlessingOfTheNineFrogs_BG28_HERO_801p;\r\n\r\n\t\tcase '':\r\n\t\t\treturn null; // new heroes\r\n\t}\r\n};\r\n"]}
@@ -72,6 +72,11 @@ const formatGameType = (gameType) => {
72
72
  case public_api_1.GameType.GT_BATTLEGROUNDS_AI_VS_AI:
73
73
  case public_api_1.GameType.GT_BATTLEGROUNDS_PLAYER_VS_AI:
74
74
  return 'battlegrounds';
75
+ case public_api_1.GameType.GT_BATTLEGROUNDS_DUO:
76
+ case public_api_1.GameType.GT_BATTLEGROUNDS_DUO_VS_AI:
77
+ case public_api_1.GameType.GT_BATTLEGROUNDS_DUO_FRIENDLY:
78
+ case public_api_1.GameType.GT_BATTLEGROUNDS_DUO_AI_VS_AI:
79
+ return 'battlegrounds-duo';
75
80
  case public_api_1.GameType.GT_MERCENARIES_AI_VS_AI:
76
81
  return 'mercenaries-ai-vs-ai';
77
82
  case public_api_1.GameType.GT_MERCENARIES_FRIENDLY:
@@ -112,6 +117,8 @@ const formatGameTypeReverse = (gameType) => {
112
117
  return public_api_1.GameType.GT_TAVERNBRAWL;
113
118
  case 'battlegrounds':
114
119
  return public_api_1.GameType.GT_BATTLEGROUNDS;
120
+ case 'battlegrounds-duo':
121
+ return public_api_1.GameType.GT_BATTLEGROUNDS_DUO;
115
122
  case 'mercenaries-ai-vs-ai':
116
123
  return public_api_1.GameType.GT_MERCENARIES_AI_VS_AI;
117
124
  case 'mercenaries-friendly':
@@ -1 +1 @@
1
- {"version":3,"file":"hs-utils.js","sourceRoot":"","sources":["../../src/services/hs-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { GameFormatString } from '../enums/game-format';\r\nimport { ReferenceCard } from '../models/reference-cards/reference-card';\r\nimport { CardClass, CardIds, GameFormat, GameType, allDuelsHeroesExtended } from '../public-api';\r\nimport { AllCardsService } from './all-cards.service';\r\n\r\nexport const ALL_CLASSES = [\r\n\t'deathknight',\r\n\t'druid',\r\n\t'hunter',\r\n\t'mage',\r\n\t'paladin',\r\n\t'priest',\r\n\t'rogue',\r\n\t'shaman',\r\n\t'warlock',\r\n\t'warrior',\r\n\t'demonhunter',\r\n];\r\n\r\nexport const formatFormat = (format: GameFormat): GameFormatString => {\r\n\tswitch (format) {\r\n\t\tcase GameFormat.FT_STANDARD:\r\n\t\t\treturn 'standard';\r\n\t\tcase GameFormat.FT_CLASSIC:\r\n\t\t\treturn 'classic';\r\n\t\tcase GameFormat.FT_TWIST:\r\n\t\t\treturn 'twist';\r\n\t\tcase GameFormat.FT_WILD:\r\n\t\tdefault:\r\n\t\t\treturn 'wild';\r\n\t}\r\n};\r\nexport const formatFormatReverse = (format: GameFormatString): GameFormat => {\r\n\tswitch (format) {\r\n\t\tcase 'standard':\r\n\t\t\treturn GameFormat.FT_STANDARD;\r\n\t\tcase 'classic':\r\n\t\t\treturn GameFormat.FT_CLASSIC;\r\n\t\tcase 'twist':\r\n\t\t\treturn GameFormat.FT_TWIST;\r\n\t\tcase 'wild':\r\n\t\tdefault:\r\n\t\t\treturn GameFormat.FT_WILD;\r\n\t}\r\n};\r\n\r\nexport const formatGameType = (gameType: GameType): string => {\r\n\tswitch (gameType) {\r\n\t\tcase GameType.GT_UNKNOWN:\r\n\t\t\treturn 'unknown';\r\n\t\tcase GameType.GT_VS_AI:\r\n\t\t\treturn 'practice';\r\n\t\tcase GameType.GT_VS_FRIEND:\r\n\t\t\treturn 'friendly';\r\n\t\tcase GameType.GT_TUTORIAL:\r\n\t\t\treturn 'tutorial';\r\n\t\tcase GameType.GT_ARENA:\r\n\t\t\treturn 'arena';\r\n\t\tcase GameType.GT_RANKED:\r\n\t\t\treturn 'ranked';\r\n\t\tcase GameType.GT_CASUAL:\r\n\t\t\treturn 'casual';\r\n\t\tcase GameType.GT_TAVERNBRAWL:\r\n\t\tcase GameType.GT_TB_1P_VS_AI:\r\n\t\tcase GameType.GT_TB_2P_COOP:\r\n\t\tcase GameType.GT_FSG_BRAWL_VS_FRIEND:\r\n\t\tcase GameType.GT_FSG_BRAWL:\r\n\t\tcase GameType.GT_FSG_BRAWL_1P_VS_AI:\r\n\t\tcase GameType.GT_FSG_BRAWL_2P_COOP:\r\n\t\t\treturn 'tavern-brawl';\r\n\t\tcase GameType.GT_BATTLEGROUNDS:\r\n\t\tcase GameType.GT_BATTLEGROUNDS_FRIENDLY:\r\n\t\tcase GameType.GT_BATTLEGROUNDS_AI_VS_AI:\r\n\t\tcase GameType.GT_BATTLEGROUNDS_PLAYER_VS_AI:\r\n\t\t\treturn 'battlegrounds';\r\n\t\tcase GameType.GT_MERCENARIES_AI_VS_AI:\r\n\t\t\treturn 'mercenaries-ai-vs-ai';\r\n\t\tcase GameType.GT_MERCENARIES_FRIENDLY:\r\n\t\t\treturn 'mercenaries-friendly';\r\n\t\tcase GameType.GT_MERCENARIES_PVE:\r\n\t\t\treturn 'mercenaries-pve';\r\n\t\tcase GameType.GT_MERCENARIES_PVP:\r\n\t\t\treturn 'mercenaries-pvp';\r\n\t\tcase GameType.GT_MERCENARIES_PVE_COOP:\r\n\t\t\treturn 'mercenaries-pve-coop';\r\n\t\tcase GameType.GT_PVPDR:\r\n\t\t\treturn 'duels';\r\n\t\tcase GameType.GT_PVPDR_PAID:\r\n\t\t\treturn 'paid-duels';\r\n\t\tdefault:\r\n\t\t\tconsole.warn('unsupported game type', gameType);\r\n\t\t\treturn 'unknown';\r\n\t}\r\n};\r\n\r\nexport const formatGameTypeReverse = (gameType: string): GameType => {\r\n\tswitch (gameType) {\r\n\t\tcase 'unknown':\r\n\t\t\treturn GameType.GT_UNKNOWN;\r\n\t\tcase 'practice':\r\n\t\t\treturn GameType.GT_VS_AI;\r\n\t\tcase 'friendly':\r\n\t\t\treturn GameType.GT_VS_FRIEND;\r\n\t\tcase 'tutorial':\r\n\t\t\treturn GameType.GT_TUTORIAL;\r\n\t\tcase 'arena':\r\n\t\t\treturn GameType.GT_ARENA;\r\n\t\tcase 'ranked':\r\n\t\t\treturn GameType.GT_RANKED;\r\n\t\tcase 'casual':\r\n\t\t\treturn GameType.GT_CASUAL;\r\n\t\tcase 'tavern-brawl':\r\n\t\t\treturn GameType.GT_TAVERNBRAWL;\r\n\t\tcase 'battlegrounds':\r\n\t\t\treturn GameType.GT_BATTLEGROUNDS;\r\n\t\tcase 'mercenaries-ai-vs-ai':\r\n\t\t\treturn GameType.GT_MERCENARIES_AI_VS_AI;\r\n\t\tcase 'mercenaries-friendly':\r\n\t\t\treturn GameType.GT_MERCENARIES_FRIENDLY;\r\n\t\tcase 'mercenaries-pve':\r\n\t\t\treturn GameType.GT_MERCENARIES_PVE;\r\n\t\tcase 'mercenaries-pvp':\r\n\t\t\treturn GameType.GT_MERCENARIES_PVP;\r\n\t\tcase 'mercenaries-pve-coop':\r\n\t\t\treturn GameType.GT_MERCENARIES_PVE_COOP;\r\n\t\tcase 'duels':\r\n\t\t\treturn GameType.GT_PVPDR;\r\n\t\tcase 'paid-duels':\r\n\t\t\treturn GameType.GT_PVPDR_PAID;\r\n\t\tdefault:\r\n\t\t\tconsole.warn('unsupported game type', gameType);\r\n\t\t\treturn GameType.GT_UNKNOWN;\r\n\t}\r\n};\r\n\r\nexport const getDefaultHeroDbfIdForClass = (playerClass: string): number => {\r\n\tswitch (playerClass?.toLowerCase()) {\r\n\t\tcase 'deathknight':\r\n\t\t\treturn 78065;\r\n\t\tcase 'demonhunter':\r\n\t\t\treturn 56550;\r\n\t\tcase 'druid':\r\n\t\t\treturn 274;\r\n\t\tcase 'hunter':\r\n\t\t\treturn 31;\r\n\t\tcase 'mage':\r\n\t\t\treturn 637;\r\n\t\tcase 'paladin':\r\n\t\t\treturn 671;\r\n\t\tcase 'priest':\r\n\t\t\treturn 813;\r\n\t\tcase 'rogue':\r\n\t\t\treturn 930;\r\n\t\tcase 'shaman':\r\n\t\t\treturn 1066;\r\n\t\tcase 'warlock':\r\n\t\t\treturn 893;\r\n\t\tcase 'warrior':\r\n\t\t\treturn 7;\r\n\t\tdefault:\r\n\t\t\tconsole.warn('Could not normalize hero card id', playerClass);\r\n\t\t\treturn 7;\r\n\t}\r\n};\r\n\r\nexport const normalizeDeckHeroDbfId = (\r\n\theroDbfId: number,\r\n\tcards: AllCardsService,\r\n\tduelsClass?: CardClass,\r\n\t// Should probably not be needed, but it's a safeguard in case we can't figure out the class from the Duels sign treasure\r\n\tdeckClass?: CardClass,\r\n): number => {\r\n\tconst cardFromHeroDbfId = cards.getCardFromDbfId(heroDbfId);\r\n\t// Don't normalize the dual-class heroes\r\n\tswitch (cardFromHeroDbfId.id) {\r\n\t\t// Sometimes a neutral hero is provided even though the deck has class cards\r\n\t\tcase CardIds.VanndarStormpikeTavernBrawl:\r\n\t\t\tswitch (duelsClass ?? deckClass) {\r\n\t\t\t\tcase CardClass.DEMONHUNTER:\r\n\t\t\t\t\treturn cards.getCard(CardIds.VanndarStormpike_VanndarStormpikeTavernBrawl_PVPDR_Hero_Vanndarv1)\r\n\t\t\t\t\t\t.dbfId;\r\n\t\t\t\tcase CardClass.HUNTER:\r\n\t\t\t\t\treturn cards.getCard(CardIds.VanndarStormpike_VanndarStormpikeTavernBrawl_PVPDR_Hero_Vanndarv2)\r\n\t\t\t\t\t\t.dbfId;\r\n\t\t\t\tcase CardClass.PALADIN:\r\n\t\t\t\t\treturn cards.getCard(CardIds.VanndarStormpike_VanndarStormpikeTavernBrawl_PVPDR_Hero_Vanndarv3)\r\n\t\t\t\t\t\t.dbfId;\r\n\t\t\t\tcase CardClass.PRIEST:\r\n\t\t\t\t\treturn cards.getCard(CardIds.VanndarStormpike_VanndarStormpikeTavernBrawl_PVPDR_Hero_Vanndarv4)\r\n\t\t\t\t\t\t.dbfId;\r\n\t\t\t\tcase CardClass.ROGUE:\r\n\t\t\t\t\treturn cards.getCard(CardIds.VanndarStormpike_VanndarStormpikeTavernBrawl_PVPDR_Hero_Vanndarv5)\r\n\t\t\t\t\t\t.dbfId;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.DrektharTavernBrawl:\r\n\t\t\tswitch (duelsClass ?? deckClass) {\r\n\t\t\t\tcase CardClass.DRUID:\r\n\t\t\t\t\treturn cards.getCard(CardIds.Drekthar_DrektharTavernBrawl_PVPDR_Hero_DrekTharv1).dbfId;\r\n\t\t\t\tcase CardClass.MAGE:\r\n\t\t\t\t\treturn cards.getCard(CardIds.Drekthar_DrektharTavernBrawl_PVPDR_Hero_DrekTharv2).dbfId;\r\n\t\t\t\tcase CardClass.SHAMAN:\r\n\t\t\t\t\treturn cards.getCard(CardIds.Drekthar_DrektharTavernBrawl_PVPDR_Hero_DrekTharv3).dbfId;\r\n\t\t\t\tcase CardClass.WARLOCK:\r\n\t\t\t\t\treturn cards.getCard(CardIds.Drekthar_DrektharTavernBrawl_PVPDR_Hero_DrekTharv4).dbfId;\r\n\t\t\t\tcase CardClass.WARRIOR:\r\n\t\t\t\t\treturn cards.getCard(CardIds.Drekthar_DrektharTavernBrawl_PVPDR_Hero_DrekTharv5).dbfId;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\t// No need for further normalization, all heroes are supported in Duels\r\n\tif (duelsClass || allDuelsHeroesExtended.includes(cardFromHeroDbfId.id as CardIds)) {\r\n\t\treturn heroDbfId;\r\n\t}\r\n\r\n\tconst playerClass: CardClass = CardClass[cards.getCard(heroDbfId)?.playerClass?.toUpperCase()];\r\n\t// Not sure this should happen anymore now that all Duels heroes are supported\r\n\tif (!playerClass) {\r\n\t\treturn heroDbfId;\r\n\t}\r\n\r\n\t// Used for all the skins\r\n\tswitch (playerClass) {\r\n\t\tcase CardClass.DEATHKNIGHT:\r\n\t\t\treturn 78065;\r\n\t\tcase CardClass.DEMONHUNTER:\r\n\t\t\treturn 56550;\r\n\t\tcase CardClass.DRUID:\r\n\t\t\treturn 274;\r\n\t\tcase CardClass.HUNTER:\r\n\t\t\treturn 31;\r\n\t\tcase CardClass.MAGE:\r\n\t\t\treturn 637;\r\n\t\tcase CardClass.PALADIN:\r\n\t\t\treturn 671;\r\n\t\tcase CardClass.PRIEST:\r\n\t\t\treturn 813;\r\n\t\tcase CardClass.ROGUE:\r\n\t\t\treturn 930;\r\n\t\tcase CardClass.SHAMAN:\r\n\t\t\treturn 1066;\r\n\t\tcase CardClass.WARLOCK:\r\n\t\t\treturn 893;\r\n\t\tcase CardClass.WARRIOR:\r\n\t\t\treturn 7;\r\n\t\tdefault:\r\n\t\t\t// Keep the neutral heroes\r\n\t\t\treturn heroDbfId;\r\n\t}\r\n};\r\n\r\nexport const isBattlegroundsCard = (card: ReferenceCard): boolean => {\r\n\treturn !!card.techLevel || !!card.battlegroundsNormalDbfId || !!card.battlegroundsPremiumDbfId;\r\n};\r\n\r\nexport const getEffectiveTechLevel = (card: ReferenceCard, allCards: AllCardsService): number => {\r\n\tif (card.techLevel) {\r\n\t\treturn card.techLevel;\r\n\t}\r\n\r\n\tif (card.battlegroundsNormalDbfId) {\r\n\t\tconst normalCard = allCards.getCardFromDbfId(card.battlegroundsNormalDbfId);\r\n\t\treturn normalCard.techLevel ?? 1;\r\n\t}\r\n\r\n\tif (card.battlegroundsPremiumDbfId) {\r\n\t\tconst premiumCard = allCards.getCardFromDbfId(card.battlegroundsPremiumDbfId);\r\n\t\treturn premiumCard.techLevel ?? 1;\r\n\t}\r\n\r\n\treturn 1;\r\n};\r\n"]}
1
+ {"version":3,"file":"hs-utils.js","sourceRoot":"","sources":["../../src/services/hs-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { GameFormatString } from '../enums/game-format';\r\nimport { ReferenceCard } from '../models/reference-cards/reference-card';\r\nimport { CardClass, CardIds, GameFormat, GameType, allDuelsHeroesExtended } from '../public-api';\r\nimport { AllCardsService } from './all-cards.service';\r\n\r\nexport const ALL_CLASSES = [\r\n\t'deathknight',\r\n\t'druid',\r\n\t'hunter',\r\n\t'mage',\r\n\t'paladin',\r\n\t'priest',\r\n\t'rogue',\r\n\t'shaman',\r\n\t'warlock',\r\n\t'warrior',\r\n\t'demonhunter',\r\n];\r\n\r\nexport const formatFormat = (format: GameFormat): GameFormatString => {\r\n\tswitch (format) {\r\n\t\tcase GameFormat.FT_STANDARD:\r\n\t\t\treturn 'standard';\r\n\t\tcase GameFormat.FT_CLASSIC:\r\n\t\t\treturn 'classic';\r\n\t\tcase GameFormat.FT_TWIST:\r\n\t\t\treturn 'twist';\r\n\t\tcase GameFormat.FT_WILD:\r\n\t\tdefault:\r\n\t\t\treturn 'wild';\r\n\t}\r\n};\r\nexport const formatFormatReverse = (format: GameFormatString): GameFormat => {\r\n\tswitch (format) {\r\n\t\tcase 'standard':\r\n\t\t\treturn GameFormat.FT_STANDARD;\r\n\t\tcase 'classic':\r\n\t\t\treturn GameFormat.FT_CLASSIC;\r\n\t\tcase 'twist':\r\n\t\t\treturn GameFormat.FT_TWIST;\r\n\t\tcase 'wild':\r\n\t\tdefault:\r\n\t\t\treturn GameFormat.FT_WILD;\r\n\t}\r\n};\r\n\r\nexport const formatGameType = (gameType: GameType): string => {\r\n\tswitch (gameType) {\r\n\t\tcase GameType.GT_UNKNOWN:\r\n\t\t\treturn 'unknown';\r\n\t\tcase GameType.GT_VS_AI:\r\n\t\t\treturn 'practice';\r\n\t\tcase GameType.GT_VS_FRIEND:\r\n\t\t\treturn 'friendly';\r\n\t\tcase GameType.GT_TUTORIAL:\r\n\t\t\treturn 'tutorial';\r\n\t\tcase GameType.GT_ARENA:\r\n\t\t\treturn 'arena';\r\n\t\tcase GameType.GT_RANKED:\r\n\t\t\treturn 'ranked';\r\n\t\tcase GameType.GT_CASUAL:\r\n\t\t\treturn 'casual';\r\n\t\tcase GameType.GT_TAVERNBRAWL:\r\n\t\tcase GameType.GT_TB_1P_VS_AI:\r\n\t\tcase GameType.GT_TB_2P_COOP:\r\n\t\tcase GameType.GT_FSG_BRAWL_VS_FRIEND:\r\n\t\tcase GameType.GT_FSG_BRAWL:\r\n\t\tcase GameType.GT_FSG_BRAWL_1P_VS_AI:\r\n\t\tcase GameType.GT_FSG_BRAWL_2P_COOP:\r\n\t\t\treturn 'tavern-brawl';\r\n\t\tcase GameType.GT_BATTLEGROUNDS:\r\n\t\tcase GameType.GT_BATTLEGROUNDS_FRIENDLY:\r\n\t\tcase GameType.GT_BATTLEGROUNDS_AI_VS_AI:\r\n\t\tcase GameType.GT_BATTLEGROUNDS_PLAYER_VS_AI:\r\n\t\t\treturn 'battlegrounds';\r\n\t\tcase GameType.GT_BATTLEGROUNDS_DUO:\r\n\t\tcase GameType.GT_BATTLEGROUNDS_DUO_VS_AI:\r\n\t\tcase GameType.GT_BATTLEGROUNDS_DUO_FRIENDLY:\r\n\t\tcase GameType.GT_BATTLEGROUNDS_DUO_AI_VS_AI:\r\n\t\t\treturn 'battlegrounds-duo';\r\n\t\tcase GameType.GT_MERCENARIES_AI_VS_AI:\r\n\t\t\treturn 'mercenaries-ai-vs-ai';\r\n\t\tcase GameType.GT_MERCENARIES_FRIENDLY:\r\n\t\t\treturn 'mercenaries-friendly';\r\n\t\tcase GameType.GT_MERCENARIES_PVE:\r\n\t\t\treturn 'mercenaries-pve';\r\n\t\tcase GameType.GT_MERCENARIES_PVP:\r\n\t\t\treturn 'mercenaries-pvp';\r\n\t\tcase GameType.GT_MERCENARIES_PVE_COOP:\r\n\t\t\treturn 'mercenaries-pve-coop';\r\n\t\tcase GameType.GT_PVPDR:\r\n\t\t\treturn 'duels';\r\n\t\tcase GameType.GT_PVPDR_PAID:\r\n\t\t\treturn 'paid-duels';\r\n\t\tdefault:\r\n\t\t\tconsole.warn('unsupported game type', gameType);\r\n\t\t\treturn 'unknown';\r\n\t}\r\n};\r\n\r\nexport const formatGameTypeReverse = (gameType: string): GameType => {\r\n\tswitch (gameType) {\r\n\t\tcase 'unknown':\r\n\t\t\treturn GameType.GT_UNKNOWN;\r\n\t\tcase 'practice':\r\n\t\t\treturn GameType.GT_VS_AI;\r\n\t\tcase 'friendly':\r\n\t\t\treturn GameType.GT_VS_FRIEND;\r\n\t\tcase 'tutorial':\r\n\t\t\treturn GameType.GT_TUTORIAL;\r\n\t\tcase 'arena':\r\n\t\t\treturn GameType.GT_ARENA;\r\n\t\tcase 'ranked':\r\n\t\t\treturn GameType.GT_RANKED;\r\n\t\tcase 'casual':\r\n\t\t\treturn GameType.GT_CASUAL;\r\n\t\tcase 'tavern-brawl':\r\n\t\t\treturn GameType.GT_TAVERNBRAWL;\r\n\t\tcase 'battlegrounds':\r\n\t\t\treturn GameType.GT_BATTLEGROUNDS;\r\n\t\tcase 'battlegrounds-duo':\r\n\t\t\treturn GameType.GT_BATTLEGROUNDS_DUO;\r\n\t\tcase 'mercenaries-ai-vs-ai':\r\n\t\t\treturn GameType.GT_MERCENARIES_AI_VS_AI;\r\n\t\tcase 'mercenaries-friendly':\r\n\t\t\treturn GameType.GT_MERCENARIES_FRIENDLY;\r\n\t\tcase 'mercenaries-pve':\r\n\t\t\treturn GameType.GT_MERCENARIES_PVE;\r\n\t\tcase 'mercenaries-pvp':\r\n\t\t\treturn GameType.GT_MERCENARIES_PVP;\r\n\t\tcase 'mercenaries-pve-coop':\r\n\t\t\treturn GameType.GT_MERCENARIES_PVE_COOP;\r\n\t\tcase 'duels':\r\n\t\t\treturn GameType.GT_PVPDR;\r\n\t\tcase 'paid-duels':\r\n\t\t\treturn GameType.GT_PVPDR_PAID;\r\n\t\tdefault:\r\n\t\t\tconsole.warn('unsupported game type', gameType);\r\n\t\t\treturn GameType.GT_UNKNOWN;\r\n\t}\r\n};\r\n\r\nexport const getDefaultHeroDbfIdForClass = (playerClass: string): number => {\r\n\tswitch (playerClass?.toLowerCase()) {\r\n\t\tcase 'deathknight':\r\n\t\t\treturn 78065;\r\n\t\tcase 'demonhunter':\r\n\t\t\treturn 56550;\r\n\t\tcase 'druid':\r\n\t\t\treturn 274;\r\n\t\tcase 'hunter':\r\n\t\t\treturn 31;\r\n\t\tcase 'mage':\r\n\t\t\treturn 637;\r\n\t\tcase 'paladin':\r\n\t\t\treturn 671;\r\n\t\tcase 'priest':\r\n\t\t\treturn 813;\r\n\t\tcase 'rogue':\r\n\t\t\treturn 930;\r\n\t\tcase 'shaman':\r\n\t\t\treturn 1066;\r\n\t\tcase 'warlock':\r\n\t\t\treturn 893;\r\n\t\tcase 'warrior':\r\n\t\t\treturn 7;\r\n\t\tdefault:\r\n\t\t\tconsole.warn('Could not normalize hero card id', playerClass);\r\n\t\t\treturn 7;\r\n\t}\r\n};\r\n\r\nexport const normalizeDeckHeroDbfId = (\r\n\theroDbfId: number,\r\n\tcards: AllCardsService,\r\n\tduelsClass?: CardClass,\r\n\t// Should probably not be needed, but it's a safeguard in case we can't figure out the class from the Duels sign treasure\r\n\tdeckClass?: CardClass,\r\n): number => {\r\n\tconst cardFromHeroDbfId = cards.getCardFromDbfId(heroDbfId);\r\n\t// Don't normalize the dual-class heroes\r\n\tswitch (cardFromHeroDbfId.id) {\r\n\t\t// Sometimes a neutral hero is provided even though the deck has class cards\r\n\t\tcase CardIds.VanndarStormpikeTavernBrawl:\r\n\t\t\tswitch (duelsClass ?? deckClass) {\r\n\t\t\t\tcase CardClass.DEMONHUNTER:\r\n\t\t\t\t\treturn cards.getCard(CardIds.VanndarStormpike_VanndarStormpikeTavernBrawl_PVPDR_Hero_Vanndarv1)\r\n\t\t\t\t\t\t.dbfId;\r\n\t\t\t\tcase CardClass.HUNTER:\r\n\t\t\t\t\treturn cards.getCard(CardIds.VanndarStormpike_VanndarStormpikeTavernBrawl_PVPDR_Hero_Vanndarv2)\r\n\t\t\t\t\t\t.dbfId;\r\n\t\t\t\tcase CardClass.PALADIN:\r\n\t\t\t\t\treturn cards.getCard(CardIds.VanndarStormpike_VanndarStormpikeTavernBrawl_PVPDR_Hero_Vanndarv3)\r\n\t\t\t\t\t\t.dbfId;\r\n\t\t\t\tcase CardClass.PRIEST:\r\n\t\t\t\t\treturn cards.getCard(CardIds.VanndarStormpike_VanndarStormpikeTavernBrawl_PVPDR_Hero_Vanndarv4)\r\n\t\t\t\t\t\t.dbfId;\r\n\t\t\t\tcase CardClass.ROGUE:\r\n\t\t\t\t\treturn cards.getCard(CardIds.VanndarStormpike_VanndarStormpikeTavernBrawl_PVPDR_Hero_Vanndarv5)\r\n\t\t\t\t\t\t.dbfId;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.DrektharTavernBrawl:\r\n\t\t\tswitch (duelsClass ?? deckClass) {\r\n\t\t\t\tcase CardClass.DRUID:\r\n\t\t\t\t\treturn cards.getCard(CardIds.Drekthar_DrektharTavernBrawl_PVPDR_Hero_DrekTharv1).dbfId;\r\n\t\t\t\tcase CardClass.MAGE:\r\n\t\t\t\t\treturn cards.getCard(CardIds.Drekthar_DrektharTavernBrawl_PVPDR_Hero_DrekTharv2).dbfId;\r\n\t\t\t\tcase CardClass.SHAMAN:\r\n\t\t\t\t\treturn cards.getCard(CardIds.Drekthar_DrektharTavernBrawl_PVPDR_Hero_DrekTharv3).dbfId;\r\n\t\t\t\tcase CardClass.WARLOCK:\r\n\t\t\t\t\treturn cards.getCard(CardIds.Drekthar_DrektharTavernBrawl_PVPDR_Hero_DrekTharv4).dbfId;\r\n\t\t\t\tcase CardClass.WARRIOR:\r\n\t\t\t\t\treturn cards.getCard(CardIds.Drekthar_DrektharTavernBrawl_PVPDR_Hero_DrekTharv5).dbfId;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\t// No need for further normalization, all heroes are supported in Duels\r\n\tif (duelsClass || allDuelsHeroesExtended.includes(cardFromHeroDbfId.id as CardIds)) {\r\n\t\treturn heroDbfId;\r\n\t}\r\n\r\n\tconst playerClass: CardClass = CardClass[cards.getCard(heroDbfId)?.playerClass?.toUpperCase()];\r\n\t// Not sure this should happen anymore now that all Duels heroes are supported\r\n\tif (!playerClass) {\r\n\t\treturn heroDbfId;\r\n\t}\r\n\r\n\t// Used for all the skins\r\n\tswitch (playerClass) {\r\n\t\tcase CardClass.DEATHKNIGHT:\r\n\t\t\treturn 78065;\r\n\t\tcase CardClass.DEMONHUNTER:\r\n\t\t\treturn 56550;\r\n\t\tcase CardClass.DRUID:\r\n\t\t\treturn 274;\r\n\t\tcase CardClass.HUNTER:\r\n\t\t\treturn 31;\r\n\t\tcase CardClass.MAGE:\r\n\t\t\treturn 637;\r\n\t\tcase CardClass.PALADIN:\r\n\t\t\treturn 671;\r\n\t\tcase CardClass.PRIEST:\r\n\t\t\treturn 813;\r\n\t\tcase CardClass.ROGUE:\r\n\t\t\treturn 930;\r\n\t\tcase CardClass.SHAMAN:\r\n\t\t\treturn 1066;\r\n\t\tcase CardClass.WARLOCK:\r\n\t\t\treturn 893;\r\n\t\tcase CardClass.WARRIOR:\r\n\t\t\treturn 7;\r\n\t\tdefault:\r\n\t\t\t// Keep the neutral heroes\r\n\t\t\treturn heroDbfId;\r\n\t}\r\n};\r\n\r\nexport const isBattlegroundsCard = (card: ReferenceCard): boolean => {\r\n\treturn !!card.techLevel || !!card.battlegroundsNormalDbfId || !!card.battlegroundsPremiumDbfId;\r\n};\r\n\r\nexport const getEffectiveTechLevel = (card: ReferenceCard, allCards: AllCardsService): number => {\r\n\tif (card.techLevel) {\r\n\t\treturn card.techLevel;\r\n\t}\r\n\r\n\tif (card.battlegroundsNormalDbfId) {\r\n\t\tconst normalCard = allCards.getCardFromDbfId(card.battlegroundsNormalDbfId);\r\n\t\treturn normalCard.techLevel ?? 1;\r\n\t}\r\n\r\n\tif (card.battlegroundsPremiumDbfId) {\r\n\t\tconst premiumCard = allCards.getCardFromDbfId(card.battlegroundsPremiumDbfId);\r\n\t\treturn premiumCard.techLevel ?? 1;\r\n\t}\r\n\r\n\treturn 1;\r\n};\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@firestone-hs/reference-data",
3
- "version": "2.0.21",
3
+ "version": "2.0.22",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "build": "rm -rf dist && tsc",