@firestone-hs/reference-data 2.0.74 → 2.0.75

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.
@@ -421,6 +421,12 @@ const getBaseCardId = (cardId) => {
421
421
  return "TTN_950";
422
422
  case "TTN_930t":
423
423
  return "TTN_930";
424
+ case "WORK_050t":
425
+ return "WORK_050";
426
+ case "WORK_017t":
427
+ return "WORK_017";
428
+ case "WORK_030t":
429
+ return "WORK_030";
424
430
  }
425
431
  if (cardId.startsWith("SCH_199")) {
426
432
  return "SCH_199";
@@ -1 +1 @@
1
- {"version":3,"file":"all-cards.service.js","sourceRoot":"","sources":["../../src/services/all-cards.service.ts"],"names":[],"mappings":";;;AAIA,qFAA+E;AAC/E,mCAA0C;AAE1C,MAAM,aAAa,GAAG,4CAA4C,CAAC;AAEnE,MAAa,eAAe;IAM3B;QALQ,UAAK,GAAwC,EAAE,CAAC;QAChD,eAAU,GAA2C,EAAE,CAAC;IAQhE,CAAC;IAIM,OAAO,CAAC,EAAmB,EAAE,kBAAkB,GAAG,IAAI;;QAC5D,OAAO,MAAA,MAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,mCAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,mCAAK,EAAoB,CAAC;IACvE,CAAC;IAEM,gBAAgB,CAAC,GAAwB;QAC/C,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAGM,gBAAgB,CAAC,KAAa;;QACpC,OAAO,MAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,mCAAK,EAAoB,CAAC;IACxD,CAAC;IAGM,kBAAkB,CAAC,MAAgB;QACzC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5D,CAAC;IAEM,QAAQ;QACd,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,OAAO,GAAG,EAAE,EAAE,SAAS,GAAG,oBAAoB;QAE5E,OAAO,IAAI,OAAO,CAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAClD,IAAI,QAAQ,GAA6B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnE,IAAI,CAAC,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,CAAA,EAAE;gBAEvB,OAAO,EAAE,CAAC;gBACV,OAAO;aACP;YAED,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,aAAa,CAAC;YAC9B,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAC7D,IAAI,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,CAAA,EAAE;gBACtB,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;aAC9E;iBAAM;gBAEN,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;oBAC5B,IAAI,IAAI,CAAC,EAAE,EAAE;wBACZ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;qBAC3B;oBACD,IAAI,IAAI,CAAC,KAAK,EAAE;wBACf,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;qBACnC;iBACD;aACD;YAED,IAAI,CAAC,YAAY,GAAG,IAAI,4DAA2B,EAAE,CAAC;YACtD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO,EAAE,CAAC;QACX,CAAC,CAAC,CAAC;IACJ,CAAC;IAEM,aAAa,CAAC,MAAc;;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,MAAA,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,0CAAG,CAAC,CAAC,mCAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,kBAAkB,mCAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,CAAC;QACrF,OAAO,MAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,0CAAE,EAAE,CAAC;IAChC,CAAC;IAEM,iBAAiB,CAAC,QAAgB;QACxC,OAAO,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAEM,kBAAkB,CAAC,SAAoB,EAAE,MAAkB;QACjE,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACtE,CAAC;IAEM,+BAA+B,CAAC,aAA8B,EAAE,MAAkB;QACxF,OAAO,IAAI,CAAC,YAAY,CAAC,+BAA+B,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACvF,CAAC;IAEM,4BAA4B,CAAC,aAA8B,EAAE,MAAkB;QACrF,OAAO,IAAI,CAAC,YAAY,CAAC,4BAA4B,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACpF,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,OAAe,EAAE,SAAiB,EAAE,OAAe;QAC1E,MAAM,aAAa,GAAG,CAAC,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAA,CAAC,CAAC,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,MAAM,GAAG,GAAG,GAAG,OAAO,IAAI,SAAS,GAAG,aAAa,EAAE,CAAC;QACtD,IAAI,QAAQ,GAAW,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACnD,IAAI,CAAC,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,CAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACpD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAA6B,CAAC;SACxD;QAED,OAAO,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QACtE,MAAM,cAAc,GAAG,CAAC,CAAC;QACzB,MAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE;YACxC,MAAM,QAAQ,GAAG,GAAG,OAAO,UAAU,SAAS,IAAI,CAAC,GAAG,aAAa,EAAE,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAC;YACnD,QAAQ,GAAG,MAAM,uBAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,CAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBACpD,MAAM,UAAU,GAA6B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAClE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CAAC,CAAC;gBACtD,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;aAC3B;SACD;QACD,IAAI,CAAC,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAA,EAAE;YACrB,OAAO,MAAM,CAAC;SACd;QAED,MAAM,UAAU,GAAG,GAAG,OAAO,aAAa,SAAS,MAAM,OAAO,EAAE,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,0DAA0D,EAAE,UAAU,CAAC,CAAC;QACrF,QAAQ,GAAG,MAAM,uBAAe,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,CAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACpD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAA6B,CAAC;SACxD;QACD,OAAO,EAAE,CAAC;IACX,CAAC;IAES,KAAK,CAAC,WAAW,CAAC,GAAW;QACtC,OAAO,MAAM,uBAAe,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC;CACD;AAjID,0CAiIC;AAKM,MAAM,aAAa,GAAG,CAAC,MAAc,EAAU,EAAE;IACvD,IAAI,CAAC,MAAM,EAAE;QACZ,OAAO,IAAI,CAAC;KACZ;IAED,QAAQ,MAAM,EAAE;QAEf,gBAAmE;QACnE;YACC,iBAA8C;QAC/C,kBAA0D;QAC1D;YACC,uBAAoD;QACrD,kBAA4D;QAC5D;YACC,iCAA+D;QAChE,iBAA4D;QAC5D;YACC,uBAAqD;QACtD,kBAA8D;QAC9D;YACC,uBAAsD;QACvD,gBAA+D;QAC/D;YACC,iBAA4C;QAC7C,KAAK,YAAY,CAAC;QAClB,KAAK,YAAY;YAChB,OAAO,UAAU,CAAC;QACnB,KAAK,YAAY,CAAC;QAClB,KAAK,YAAY;YAChB,OAAO,UAAU,CAAC;QACnB,KAAK,YAAY,CAAC;QAClB,KAAK,YAAY;YAChB,OAAO,UAAU,CAAC;QACnB,KAAK,YAAY,CAAC;QAClB,KAAK,YAAY;YAChB,OAAO,UAAU,CAAC;QACnB,KAAK,YAAY,CAAC;QAClB,KAAK,YAAY;YAChB,OAAO,UAAU,CAAC;QACnB,KAAK,YAAY,CAAC;QAClB,KAAK,YAAY;YAChB,OAAO,UAAU,CAAC;QACnB,KAAK,YAAY,CAAC;QAClB,KAAK,YAAY;YAChB,OAAO,UAAU,CAAC;QACnB,KAAK,WAAW,CAAC;QACjB,KAAK,YAAY;YAChB,OAAO,UAAU,CAAC;QACnB,KAAK,WAAW,CAAC;QACjB,KAAK,YAAY;YAChB,OAAO,UAAU,CAAC;QACnB,KAAK,sBAAsB,CAAC;QAC5B,KAAK,sBAAsB;YAC1B,OAAO,oBAAoB,CAAC;QAG7B,KAAK,YAAY;YAChB,OAAO,UAAU,CAAC;QACnB,KAAK,YAAY;YAChB,OAAO,UAAU,CAAC;QACnB,KAAK,YAAY;YAChB,OAAO,UAAU,CAAC;QACnB,KAAK,YAAY;YAChB,OAAO,UAAU,CAAC;QACnB,KAAK,WAAW;YACf,OAAO,UAAU,CAAC;QACnB,KAAK,YAAY;YAChB,OAAO,UAAU,CAAC;QACnB,KAAK,YAAY;YAChB,OAAO,UAAU,CAAC;QACnB,KAAK,YAAY;YAChB,OAAO,UAAU,CAAC;QACnB,KAAK,YAAY;YAChB,OAAO,UAAU,CAAC;QACnB,KAAK,YAAY;YAChB,OAAO,UAAU,CAAC;QACnB,KAAK,YAAY;YAChB,OAAO,UAAU,CAAC;QACnB,KAAK,YAAY;YAChB,OAAO,UAAU,CAAC;QACnB,KAAK,WAAW;YACf,OAAO,SAAS,CAAC;QAClB,KAAK,WAAW;YACf,OAAO,SAAS,CAAC;QAClB,KAAK,WAAW;YACf,OAAO,SAAS,CAAC;QAClB,KAAK,WAAW;YACf,OAAO,SAAS,CAAC;QAElB,iBAA6D;QAC7D;YACC,iBAAmC;QACpC,iBAA8D;QAC9D;YACC,iBAAoC;QACrC,iBAAiE;QACjE;YACC,iBAAuC;QACxC,iBAA+D;QAC/D;YACC,iBAAqC;QACtC,iBAAiE;QACjE;YACC,iBAAuC;QAExC,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,WAAW;YACf,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,SAAS,CAAC;QAClB;YACC,iBAA6B;QAC9B;YACC,iBAAgC;QACjC;YACC,iBAAgC;QACjC;YACC,iBAAgC;QAGjC,gBAAgD;QAChD;YACC,iBAA8B;QAC/B,gBAA0D;QAC1D;YACC,iBAAmC;QACpC,gBAA0C;QAC1C;YACC,iBAA2B;QAC5B,gBAA4C;QAC5C;YACC,iBAA4B;QAC7B,gBAAkD;QAClD;YACC,iBAA+B;QAChC,gBAAkD;QAClD;YACC,iBAA+B;QAChC,gBAAkD;QAClD;YACC,iBAA+B;QAChC,gBAAsD;QACtD;YACC,iBAAiC;QAClC,gBAAsC;QACtC;YACC,iBAAyB;QAC1B,gBAA8C;QAC9C;YACC,iBAA6B;QAG9B;YACC,iBAA8B;QAC/B;YACC,iBAAqC;QACtC;YACC,iBAAgC;QACjC;YACC,iBAAyB;QAC1B;YACC,iBAA4B;QAC7B;YACC,iBAA8B;QAC/B;YACC,iBAAkC;QACnC;YACC,iBAAsC;QACvC;YACC,iBAAmC;QACpC;YACC,iBAAsC;QACvC;YACC,iBAA4B;QAC7B;YACC,iBAAyB;QAC1B;YACC,iBAA6B;QAC9B;YACC,iBAAkC;QACnC;YACC,iBAAyB;QAC1B;YACC,iBAAiC;QAClC;YACC,iBAA0B;QAC3B;YACC,iBAA+B;QAChC;YACC,iBAAkC;QAGnC,gBAA2D;QAC3D,iBAAwD;QACxD,iBAAwD;QACxD;YACC,iBAAmC;QACpC,gBAAiD;QACjD,iBAAqD;QACrD,iBAAoD;QACpD;YACC,iBAA+B;QAChC,gBAAqD;QACrD,iBAAuD;QACvD,iBAAwD;QACxD;YACC,iBAAkC;QACnC,gBAAoD;QACpD,iBAAmD;QACnD,iBAAmD;QACnD;YACC,iBAA+B;QAChC,gBAAwD;QACxD,iBAAyD;QACzD,iBAAqD;QACrD;YACC,iBAAiC;QAElC;YACC,iBAA+B;QAChC;YACC,mBAA4D;QAC7D;YACC,iBAAgC;QACjC;YACC,iBAAkC;QACnC;YACC,iBAA+B;QAChC;YACC,iBAAyB;QAC1B;YACC,iBAA8B;QAC/B;YACC,iBAA+B;QAChC;YACC,iBAA0B;QAC3B;YACC,iBAA0B;QAC3B;YACC,iBAAgC;QACjC;YACC,iBAAyB;QAC1B;YACC,iBAA+B;QAChC;YACC,iBAAgC;QACjC;YACC,iBAAgC;QACjC;YACC,iBAAmC;QACpC;YACC,iBAAgC;QAEjC,gBAAqD;QACrD,iBAAsD;QACtD,iBAAsD;QACtD,iBAAsD;QACtD,iBAAsD;QACtD,iBAAsD;QACtD,iBAAsD;QACtD;YACC,iBAAkC;QACnC,iBAAkE;QAClE,iBAAkE;QAClE,iBAAkE;QAClE,iBAAkE;QAClE,iBAAkE;QAClE,iBAAkE;QAClE;YACC,kBAAmE;QAEpE;YACC,iBAA+B;QAChC;YACC,iBAAkC;KACnC;IAGD,IAAI,MAAM,CAAC,UAAU,WAAyB,EAAE;QAC/C,iBAA+B;KAC/B;IACD,IAAI,MAAM,CAAC,UAAU,WAAmC,EAAE;QACzD,iBAAyC;KACzC;IAED,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAlVW,QAAA,aAAa,iBAkVxB","sourcesContent":["import { Sideboard } from '@firestone-hs/deckstrings';\r\nimport { CardIds } from '../card-ids';\r\nimport { ReferenceCard } from '../models/reference-cards/reference-card';\r\nimport { GameFormat } from '../public-api';\r\nimport { CardsForDeckbuildingService } from './cards-for-deckbuilding.service';\r\nimport { httpWithRetries } from './utils';\r\n\r\nconst CARDS_CDN_URL = 'https://static.firestoneapp.com/data/cards';\r\n\r\nexport class AllCardsService {\r\n\tprivate cache: { [cardId: string]: ReferenceCard } = {};\r\n\tprivate cacheDbfId: { [cardDbfId: string]: ReferenceCard } = {};\r\n\r\n\tprivate deckbuilding: CardsForDeckbuildingService;\r\n\r\n\tconstructor() {\r\n\t\t// We don't call it in the constructor because we want the app to be in control\r\n\t\t// of how they load the cards, and for it to be aware of when cards have been loaded\r\n\t\t// this.retrieveAllCards();\r\n\t}\r\n\r\n\t// We keep this synchronous because we ensure, in the game init pipeline, that loading cards\r\n\t// is the first thing we do\r\n\tpublic getCard(id: string | number, errorWhenUndefined = true): ReferenceCard {\r\n\t\treturn this.cache[id] ?? this.cacheDbfId[id] ?? ({} as ReferenceCard);\r\n\t}\r\n\r\n\tpublic getMultipleCards(ids: (string | number)[]): ReferenceCard[] {\r\n\t\treturn ids.map((id) => this.getCard(id));\r\n\t}\r\n\r\n\t/** @deprecated use getCard instead */\r\n\tpublic getCardFromDbfId(dbfId: number): ReferenceCard {\r\n\t\treturn this.cacheDbfId[dbfId] ?? ({} as ReferenceCard);\r\n\t}\r\n\r\n\t/** @deprecated use getMultipleCards instead */\r\n\tpublic getCardsFromDbfIds(dbfIds: number[]): ReferenceCard[] {\r\n\t\treturn dbfIds.map((dbfId) => this.getCardFromDbfId(dbfId));\r\n\t}\r\n\r\n\tpublic getCards(): ReferenceCard[] {\r\n\t\treturn Object.values(this.cache);\r\n\t}\r\n\r\n\tpublic async initializeCardsDb(version = '', cardsFile = 'cards_enUS.gz.json'): Promise<void> {\r\n\t\t// console.debug('[all-cards] asked to retrieve cards from CDN', version, new Error().stack);\r\n\t\treturn new Promise<void>(async (resolve, reject) => {\r\n\t\t\tlet allCards: readonly ReferenceCard[] = Object.values(this.cache);\r\n\t\t\tif (!!allCards?.length) {\r\n\t\t\t\t// console.debug('[all-cards] already loaded all cards');\r\n\t\t\t\tresolve();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.cache = {};\r\n\t\t\tthis.cacheDbfId = {};\r\n\t\t\tconst baseUrl = CARDS_CDN_URL;\r\n\t\t\tallCards = await this.loadCards(baseUrl, cardsFile, version);\r\n\t\t\tif (!allCards?.length) {\r\n\t\t\t\tconsole.error('[all-cards] could not load cards', baseUrl, version, allCards);\r\n\t\t\t} else {\r\n\t\t\t\t// console.log('[all-cards] retrieved all cards', allCards?.length);\r\n\t\t\t\tfor (const card of allCards) {\r\n\t\t\t\t\tif (card.id) {\r\n\t\t\t\t\t\tthis.cache[card.id] = card;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (card.dbfId) {\r\n\t\t\t\t\t\tthis.cacheDbfId[card.dbfId] = card;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.deckbuilding = new CardsForDeckbuildingService();\r\n\t\t\tthis.deckbuilding.init(this);\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getRootCardId(cardId: string): string {\r\n\t\tconst card = this.getCard(cardId);\r\n\t\tconst dbfId = card?.counterpartCards?.[0] ?? card?.deckDuplicateDbfId ?? card?.dbfId;\r\n\t\treturn this.getCard(dbfId)?.id;\r\n\t}\r\n\r\n\tpublic normalizeDeckList(decklist: string): string {\r\n\t\treturn this.deckbuilding.normalizeDeckList(decklist, this);\r\n\t}\r\n\r\n\tpublic normalizeSideboard(sideboard: Sideboard, format: GameFormat): Sideboard {\r\n\t\treturn this.deckbuilding.normalizeSideboard(sideboard, format, this);\r\n\t}\r\n\r\n\tpublic getBaseCardDbfIdForDeckbuilding(cardIdOrDbfId: number | string, format: GameFormat): number {\r\n\t\treturn this.deckbuilding.getBaseCardDbfIdForDeckbuilding(cardIdOrDbfId, format, this);\r\n\t}\r\n\r\n\tpublic getBaseCardIdForDeckbuilding(cardIdOrDbfId: number | string, format: GameFormat): string {\r\n\t\treturn this.deckbuilding.getBaseCardIdForDeckbuilding(cardIdOrDbfId, format, this);\r\n\t}\r\n\r\n\tprivate async loadCards(baseUrl: string, cardsFile: string, version: string): Promise<readonly ReferenceCard[]> {\r\n\t\tconst versionString = !!version?.length ? `?v=${version}` : '';\r\n\t\tconst url = `${baseUrl}/${cardsFile}${versionString}`;\r\n\t\tlet cardsStr: string = await this.getCardsStr(url);\r\n\t\tif (!!cardsStr?.length && !cardsStr.startsWith('<')) {\r\n\t\t\treturn JSON.parse(cardsStr) as readonly ReferenceCard[];\r\n\t\t}\r\n\r\n\t\tconsole.warn('[all-cards] could not load cards, defaulting to split');\r\n\t\tconst numberOfSplits = 4;\r\n\t\tconst result: ReferenceCard[] = [];\r\n\t\tfor (let i = 0; i < numberOfSplits; i++) {\r\n\t\t\tconst splitUrl = `${baseUrl}/split/${cardsFile}.${i}${versionString}`;\r\n\t\t\tconsole.log('[all-cards] loading split', splitUrl);\r\n\t\t\tcardsStr = await httpWithRetries(splitUrl, 1);\r\n\t\t\tif (!!cardsStr?.length && !cardsStr.startsWith('<')) {\r\n\t\t\t\tconst splitCards: readonly ReferenceCard[] = JSON.parse(cardsStr);\r\n\t\t\t\tconsole.log('loaded split cards', splitCards?.length);\r\n\t\t\t\tresult.push(...splitCards);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (!!result?.length) {\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tconst urlNoAudio = `${baseUrl}/no_audio/${cardsFile}?v=${version}`;\r\n\t\tconsole.warn('[all-cards] could not load cards, defaulting to no_audio', urlNoAudio);\r\n\t\tcardsStr = await httpWithRetries(urlNoAudio, 1);\r\n\t\tif (!!cardsStr?.length && !cardsStr.startsWith('<')) {\r\n\t\t\treturn JSON.parse(cardsStr) as readonly ReferenceCard[];\r\n\t\t}\r\n\t\treturn [];\r\n\t}\r\n\r\n\tprotected async getCardsStr(url: string): Promise<string> {\r\n\t\treturn await httpWithRetries(url, 1);\r\n\t}\r\n}\r\n\r\n// The spellstones are present in the AI decklist in their basic version\r\n// However, if the AI plays the spellstone's upgraded version, we need to remove\r\n// the basic one from the decklist\r\nexport const getBaseCardId = (cardId: string): string => {\r\n\tif (!cardId) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tswitch (cardId) {\r\n\t\t// The spellstones\r\n\t\tcase CardIds.LesserSpinelSpellstone_SpinelSpellstoneToken_TOY_825t:\r\n\t\tcase CardIds.LesserSpinelSpellstone_GreaterSpinelSpellstoneToken_TOY_825t2:\r\n\t\t\treturn CardIds.LesserSpinelSpellstone_TOY_825;\r\n\t\tcase CardIds.LesserJasperSpellstone_JasperSpellstoneToken:\r\n\t\tcase CardIds.LesserJasperSpellstone_GreaterJasperSpellstoneToken:\r\n\t\t\treturn CardIds.LesserJasperSpellstone_CORE_LOOT_051;\r\n\t\tcase CardIds.LesserEmeraldSpellstone_EmeraldSpellstoneToken:\r\n\t\tcase CardIds.LesserEmeraldSpellstone_GreaterEmeraldSpellstoneToken:\r\n\t\t\treturn CardIds.LesserEmeraldSpellstone_CORE_FB_Champs_LOOT_080;\r\n\t\tcase CardIds.LesserDiamondSpellstone_DiamondSpellstoneToken:\r\n\t\tcase CardIds.LesserDiamondSpellstone_GreaterDiamondSpellstoneToken:\r\n\t\t\treturn CardIds.LesserDiamondSpellstone_CORE_LOOT_507;\r\n\t\tcase CardIds.LesserAmethystSpellstone_AmethystSpellstoneToken:\r\n\t\tcase CardIds.LesserAmethystSpellstone_GreaterAmethystSpellstoneToken:\r\n\t\t\treturn CardIds.LesserAmethystSpellstone_CORE_LOOT_043;\r\n\t\tcase CardIds.LesserOpalSpellstone_OpalSpellstoneToken_TOY_645t:\r\n\t\tcase CardIds.LesserOpalSpellstone_GreaterOpalSpellstoneToken_TOY_645t1:\r\n\t\t\treturn CardIds.LesserOpalSpellstone_TOY_645;\r\n\t\tcase 'LOOT_103t1':\r\n\t\tcase 'LOOT_103t2':\r\n\t\t\treturn 'LOOT_103';\r\n\t\tcase 'LOOT_043t2':\r\n\t\tcase 'LOOT_043t3':\r\n\t\t\treturn 'LOOT_043';\r\n\t\tcase 'LOOT_051t1':\r\n\t\tcase 'LOOT_051t2':\r\n\t\t\treturn 'LOOT_051';\r\n\t\tcase 'LOOT_064t1':\r\n\t\tcase 'LOOT_064t2':\r\n\t\t\treturn 'LOOT_064';\r\n\t\tcase 'LOOT_080t2':\r\n\t\tcase 'LOOT_080t3':\r\n\t\t\treturn 'LOOT_080';\r\n\t\tcase 'LOOT_091t1':\r\n\t\tcase 'LOOT_091t2':\r\n\t\t\treturn 'LOOT_091';\r\n\t\tcase 'LOOT_203t2':\r\n\t\tcase 'LOOT_203t3':\r\n\t\t\treturn 'LOOT_203';\r\n\t\tcase 'LOOT_503t':\r\n\t\tcase 'LOOT_503t2':\r\n\t\t\treturn 'LOOT_503';\r\n\t\tcase 'LOOT_507t':\r\n\t\tcase 'LOOT_507t2':\r\n\t\t\treturn 'LOOT_507';\r\n\t\tcase 'FB_Champs_LOOT_080t2':\r\n\t\tcase 'FB_Champs_LOOT_080t3':\r\n\t\t\treturn 'FB_Champs_LOOT_080';\r\n\r\n\t\t// The \"unidentified\" spells\r\n\t\tcase 'LOOT_278t1':\r\n\t\t\treturn 'LOOT_278';\r\n\t\tcase 'LOOT_278t2':\r\n\t\t\treturn 'LOOT_278';\r\n\t\tcase 'LOOT_278t3':\r\n\t\t\treturn 'LOOT_278';\r\n\t\tcase 'LOOT_278t4':\r\n\t\t\treturn 'LOOT_278';\r\n\t\tcase 'LOOT_285t':\r\n\t\t\treturn 'LOOT_285';\r\n\t\tcase 'LOOT_285t2':\r\n\t\t\treturn 'LOOT_285';\r\n\t\tcase 'LOOT_285t3':\r\n\t\t\treturn 'LOOT_285';\r\n\t\tcase 'LOOT_285t4':\r\n\t\t\treturn 'LOOT_285';\r\n\t\tcase 'LOOT_286t1':\r\n\t\t\treturn 'LOOT_286';\r\n\t\tcase 'LOOT_286t2':\r\n\t\t\treturn 'LOOT_286';\r\n\t\tcase 'LOOT_286t3':\r\n\t\t\treturn 'LOOT_286';\r\n\t\tcase 'LOOT_286t4':\r\n\t\t\treturn 'LOOT_286';\r\n\t\tcase 'DAL_366t1':\r\n\t\t\treturn 'DAL_366';\r\n\t\tcase 'DAL_366t2':\r\n\t\t\treturn 'DAL_366';\r\n\t\tcase 'DAL_366t3':\r\n\t\t\treturn 'DAL_366';\r\n\t\tcase 'DAL_366t4':\r\n\t\t\treturn 'DAL_366';\r\n\t\t// Galakrond\r\n\t\tcase CardIds.GalakrondTheTempest_GalakrondTheApocalypseToken:\r\n\t\tcase CardIds.GalakrondTheTempest_GalakrondAzerothsEndToken:\r\n\t\t\treturn CardIds.GalakrondTheTempest;\r\n\t\tcase CardIds.GalakrondTheWretched_GalakrondTheApocalypseToken:\r\n\t\tcase CardIds.GalakrondTheWretched_GalakrondAzerothsEndToken:\r\n\t\t\treturn CardIds.GalakrondTheWretched;\r\n\t\tcase CardIds.GalakrondTheUnspeakable_GalakrondTheApocalypseToken:\r\n\t\tcase CardIds.GalakrondTheUnspeakable_GalakrondAzerothsEndToken:\r\n\t\t\treturn CardIds.GalakrondTheUnspeakable;\r\n\t\tcase CardIds.GalakrondTheNightmare_GalakrondTheApocalypseToken:\r\n\t\tcase CardIds.GalakrondTheNightmare_GalakrondAzerothsEndToken:\r\n\t\t\treturn CardIds.GalakrondTheNightmare;\r\n\t\tcase CardIds.GalakrondTheUnbreakable_GalakrondTheApocalypseToken:\r\n\t\tcase CardIds.GalakrondTheUnbreakable_GalakrondAzerothsEndToken:\r\n\t\t\treturn CardIds.GalakrondTheUnbreakable;\r\n\t\t// Corrupted\r\n\t\tcase 'DMF_054t':\r\n\t\t\treturn 'DMF_054';\r\n\t\tcase 'DMF_061t':\r\n\t\t\treturn 'DMF_061';\r\n\t\tcase 'DMF_064t':\r\n\t\t\treturn 'DMF_064';\r\n\t\tcase 'DMF_073t':\r\n\t\t\treturn 'DMF_073';\r\n\t\tcase 'DMF_078t':\r\n\t\t\treturn 'DMF_078';\r\n\t\tcase 'DMF_080t':\r\n\t\t\treturn 'DMF_080';\r\n\t\tcase 'DMF_082t':\r\n\t\t\treturn 'DMF_082';\r\n\t\tcase 'DMF_083t':\r\n\t\t\treturn 'DMF_083';\r\n\t\tcase 'DMF_090t':\r\n\t\t\treturn 'DMF_090';\r\n\t\tcase 'DMF_101t':\r\n\t\t\treturn 'DMF_101';\r\n\t\tcase 'DMF_105t':\r\n\t\t\treturn 'DMF_105';\r\n\t\tcase 'DMF_117t':\r\n\t\t\treturn 'DMF_117';\r\n\t\tcase 'DMF_117t2':\r\n\t\t\treturn 'DMF_117';\r\n\t\tcase 'DMF_118t':\r\n\t\t\treturn 'DMF_118';\r\n\t\tcase 'DMF_124t':\r\n\t\t\treturn 'DMF_124';\r\n\t\tcase 'DMF_163t':\r\n\t\t\treturn 'DMF_163';\r\n\t\tcase 'DMF_174t':\r\n\t\t\treturn 'DMF_174';\r\n\t\tcase 'DMF_184t':\r\n\t\t\treturn 'DMF_184';\r\n\t\tcase 'DMF_186a':\r\n\t\t\treturn 'DMF_186';\r\n\t\tcase 'DMF_244t':\r\n\t\t\treturn 'DMF_244';\r\n\t\tcase 'DMF_247t':\r\n\t\t\treturn 'DMF_247';\r\n\t\tcase 'DMF_248t':\r\n\t\t\treturn 'DMF_248';\r\n\t\tcase 'DMF_517a':\r\n\t\t\treturn 'DMF_517';\r\n\t\tcase 'DMF_526a':\r\n\t\t\treturn 'DMF_526';\r\n\t\tcase 'DMF_701t':\r\n\t\t\treturn 'DMF_701';\r\n\t\tcase 'DMF_703t':\r\n\t\t\treturn 'DMF_703';\r\n\t\tcase 'DMF_730t':\r\n\t\t\treturn 'DMF_730';\r\n\t\tcase 'DMF_526a':\r\n\t\t\treturn 'DMF_526';\r\n\t\tcase CardIds.DreamingDrake_DreamingDrakeToken:\r\n\t\t\treturn CardIds.DreamingDrake;\r\n\t\tcase CardIds.LibramOfJudgment_LibramOfJudgmentToken:\r\n\t\t\treturn CardIds.LibramOfJudgment;\r\n\t\tcase CardIds.LuckysoulHoarder_LuckysoulHoarderToken:\r\n\t\t\treturn CardIds.LuckysoulHoarder;\r\n\t\tcase CardIds.NitroboostPoison_NitroboostPoisonToken:\r\n\t\t\treturn CardIds.NitroboostPoison;\r\n\t\t// The \"improve during run\" cards in Duels\r\n\t\t// Upgradable ranked spells\r\n\t\tcase CardIds.TameBeastRank1_TameBeastRank2Token:\r\n\t\tcase CardIds.TameBeastRank1_TameBeastRank3Token:\r\n\t\t\treturn CardIds.TameBeastRank1;\r\n\t\tcase CardIds.ChainLightningRank1_ChainLightningRank2Token:\r\n\t\tcase CardIds.ChainLightningRank1_ChainLightningRank3Token:\r\n\t\t\treturn CardIds.ChainLightningRank1;\r\n\t\tcase CardIds.FlurryRank1_FlurryRank2Token:\r\n\t\tcase CardIds.FlurryRank1_FlurryRank3Token:\r\n\t\t\treturn CardIds.FlurryRank1;\r\n\t\tcase CardIds.CondemnRank1_CondemnRank2Token:\r\n\t\tcase CardIds.CondemnRank1_CondemnRank3Token:\r\n\t\t\treturn CardIds.CondemnRank1;\r\n\t\tcase CardIds.WickedStabRank1_WickedStabRank2Token:\r\n\t\tcase CardIds.WickedStabRank1_WickedStabRank3Token:\r\n\t\t\treturn CardIds.WickedStabRank1;\r\n\t\tcase CardIds.LivingSeedRank1_LivingSeedRank2Token:\r\n\t\tcase CardIds.LivingSeedRank1_LivingSeedRank3Token:\r\n\t\t\treturn CardIds.LivingSeedRank1;\r\n\t\tcase CardIds.ConvictionRank1_ConvictionRank2Token:\r\n\t\tcase CardIds.ConvictionRank1_ConvictionRank3Token:\r\n\t\t\treturn CardIds.ConvictionRank1;\r\n\t\tcase CardIds.ConditioningRank1_ConditioningRank2Token:\r\n\t\tcase CardIds.ConditioningRank1_ConditioningRank3Token:\r\n\t\t\treturn CardIds.ConditioningRank1;\r\n\t\tcase CardIds.FuryRank1_FuryRank2Token:\r\n\t\tcase CardIds.FuryRank1_FuryRank3Token:\r\n\t\t\treturn CardIds.FuryRank1;\r\n\t\tcase CardIds.ImpSwarmRank1_ImpSwarmRank2Token:\r\n\t\tcase CardIds.ImpSwarmRank1_ImpSwarmRank3Token:\r\n\t\t\treturn CardIds.ImpSwarmRank1;\r\n\r\n\t\t// Infused\r\n\t\tcase CardIds.MischievousImp_MischievousImpToken:\r\n\t\t\treturn CardIds.MischievousImp;\r\n\t\tcase CardIds.ImpKingRafaam_ImpKingRafaamToken:\r\n\t\t\treturn CardIds.ImpKingRafaam_REV_789;\r\n\t\tcase CardIds.StonebornAccuser_StonebornAccuserToken:\r\n\t\t\treturn CardIds.StonebornAccuser;\r\n\t\tcase CardIds.Murlocula_MurloculaToken:\r\n\t\t\treturn CardIds.Murlocula;\r\n\t\tcase CardIds.FamishedFool_FamishedFoolToken:\r\n\t\t\treturn CardIds.FamishedFool;\r\n\t\tcase CardIds.SinfueledGolem_SinfueledGolemToken:\r\n\t\t\treturn CardIds.SinfueledGolem;\r\n\t\tcase CardIds.InsatiableDevourer_InsatiableDevourerToken:\r\n\t\t\treturn CardIds.InsatiableDevourer;\r\n\t\tcase CardIds.SireDenathrius_SireDenathriusToken:\r\n\t\t\treturn CardIds.SireDenathrius_REV_906;\r\n\t\tcase CardIds.PriestOfTheDeceased_PriestOfTheDeceasedToken:\r\n\t\t\treturn CardIds.PriestOfTheDeceased;\r\n\t\tcase CardIds.ArtificerXymox_ArtificerXymoxToken:\r\n\t\t\treturn CardIds.ArtificerXymox_REV_937;\r\n\t\tcase CardIds.BuffetBiggun_BuffetBiggunToken:\r\n\t\t\treturn CardIds.BuffetBiggun;\r\n\t\tcase CardIds.ImbuedAxe_ImbuedAxeToken:\r\n\t\t\treturn CardIds.ImbuedAxe;\r\n\t\tcase CardIds.CleanTheScene_CleanTheSceneToken:\r\n\t\t\treturn CardIds.CleanTheScene;\r\n\t\tcase CardIds.ConvincingDisguise_ConvincingDisguiseToken:\r\n\t\t\treturn CardIds.ConvincingDisguise;\r\n\t\tcase CardIds.PlotOfSin_PlotOfSinToken:\r\n\t\t\treturn CardIds.PlotOfSin;\r\n\t\tcase CardIds.AllFelBreaksLoose_AllFelBreaksLooseToken:\r\n\t\t\treturn CardIds.AllFelBreaksLoose;\r\n\t\tcase CardIds.Shadehound_ShadehoundToken:\r\n\t\t\treturn CardIds.Shadehound;\r\n\t\tcase CardIds.TotemicEvidence_TotemicEvidenceToken:\r\n\t\t\treturn CardIds.TotemicEvidence;\r\n\t\tcase CardIds.SylvanasTheAccused_SylvanasTheAccusedToken:\r\n\t\t\treturn CardIds.SylvanasTheAccused;\r\n\r\n\t\t// Remixed\r\n\t\tcase CardIds.RemixedDispenseOBot_ChillingDispenseOBotToken:\r\n\t\tcase CardIds.RemixedDispenseOBot_MerchDispenseOBotToken:\r\n\t\tcase CardIds.RemixedDispenseOBot_MoneyDispenseOBotToken:\r\n\t\tcase CardIds.RemixedDispenseOBot_MysteryDispenseOBotToken:\r\n\t\t\treturn CardIds.RemixedDispenseOBot;\r\n\t\tcase CardIds.RemixedRhapsody_AngstyRhapsodyToken:\r\n\t\tcase CardIds.RemixedRhapsody_ResoundingRhapsodyToken:\r\n\t\tcase CardIds.RemixedRhapsody_EmotionalRhapsodyToken:\r\n\t\tcase CardIds.RemixedRhapsody_WailingRhapsodyToken:\r\n\t\t\treturn CardIds.RemixedRhapsody;\r\n\t\tcase CardIds.RemixedTotemcarver_LoudTotemcarverToken:\r\n\t\tcase CardIds.RemixedTotemcarver_BluesyTotemcarverToken:\r\n\t\tcase CardIds.RemixedTotemcarver_BlazingTotemcarverToken:\r\n\t\tcase CardIds.RemixedTotemcarver_KaraokeTotemcarverToken:\r\n\t\t\treturn CardIds.RemixedTotemcarver;\r\n\t\tcase CardIds.RemixedMusician_CathedralMusicianToken:\r\n\t\tcase CardIds.RemixedMusician_TropicalMusicianToken:\r\n\t\tcase CardIds.RemixedMusician_RomanticMusicianToken:\r\n\t\tcase CardIds.RemixedMusician_NoiseMusicianToken:\r\n\t\t\treturn CardIds.RemixedMusician;\r\n\t\tcase CardIds.RemixedTuningFork_SharpenedTuningForkToken:\r\n\t\tcase CardIds.RemixedTuningFork_ReinforcedTuningForkToken:\r\n\t\tcase CardIds.RemixedTuningFork_CurvedTuningForkToken:\r\n\t\tcase CardIds.RemixedTuningFork_BackupTuningForkToken:\r\n\t\t\treturn CardIds.RemixedTuningFork;\r\n\t\t// Forged\r\n\t\tcase CardIds.BellowingFlames_BellowingFlamesToken:\r\n\t\t\treturn CardIds.BellowingFlames;\r\n\t\tcase CardIds.ChampionOfStorms_StormCycloneToken_TTN_801t2:\r\n\t\t\treturn CardIds.ChampionOfStorms_StormCycloneToken_TTN_801t1;\r\n\t\tcase CardIds.CreationProtocol_CreationProtocolToken:\r\n\t\t\treturn CardIds.CreationProtocol;\r\n\t\tcase CardIds.DiscipleOfSargeras_DiscipleOfSargerasToken:\r\n\t\t\treturn CardIds.DiscipleOfSargeras;\r\n\t\tcase CardIds.EmbraceOfNature_EmbraceOfNatureToken:\r\n\t\t\treturn CardIds.EmbraceOfNature;\r\n\t\tcase CardIds.Eulogizer_EulogizerToken:\r\n\t\t\treturn CardIds.Eulogizer;\r\n\t\tcase CardIds.LabConstructor_LabConstructorToken:\r\n\t\t\treturn CardIds.LabConstructor;\r\n\t\tcase CardIds.MechagnomeGuide_MechagnomeGuideToken:\r\n\t\t\treturn CardIds.MechagnomeGuide;\r\n\t\tcase CardIds.MoltenRune_MoltenRuneToken:\r\n\t\t\treturn CardIds.MoltenRune;\r\n\t\tcase CardIds.StormGiant_StormGiantToken:\r\n\t\t\treturn CardIds.StormGiant;\r\n\t\tcase CardIds.TitanforgedTraps_TitanforgedTrapsToken:\r\n\t\t\treturn CardIds.TitanforgedTraps;\r\n\t\tcase CardIds.TyrsTears_TyrsTearsToken:\r\n\t\t\treturn CardIds.TyrsTears;\r\n\t\tcase CardIds.WatcherOfTheSun_WatcherOfTheSunToken:\r\n\t\t\treturn CardIds.WatcherOfTheSun;\r\n\t\tcase CardIds.WeightOfTheWorld_WeightOfTheWorldToken:\r\n\t\t\treturn CardIds.WeightOfTheWorld;\r\n\t\tcase CardIds.Xb488Disposalbot_Xb488DisposalbotToken:\r\n\t\t\treturn CardIds.Xb488Disposalbot;\r\n\t\tcase CardIds.MuscleOTron_MuscleOTronToken_YOG_525t:\r\n\t\t\treturn CardIds.MuscleOTron_YOG_525;\r\n\t\tcase CardIds.Sanitize_SanitizeToken_YOG_502t:\r\n\t\t\treturn CardIds.Sanitize_YOG_502;\r\n\t\t// Bonus effect\r\n\t\tcase CardIds.FromTheScrapheap_SparkbotToken_TTN_719t:\r\n\t\tcase CardIds.FromTheScrapheap_SparkbotToken_TTN_719t1:\r\n\t\tcase CardIds.FromTheScrapheap_SparkbotToken_TTN_719t2:\r\n\t\tcase CardIds.FromTheScrapheap_SparkbotToken_TTN_719t3:\r\n\t\tcase CardIds.FromTheScrapheap_SparkbotToken_TTN_719t4:\r\n\t\tcase CardIds.FromTheScrapheap_SparkbotToken_TTN_719t5:\r\n\t\tcase CardIds.FromTheScrapheap_SparkbotToken_TTN_719t6:\r\n\t\tcase CardIds.FromTheScrapheap_SparkbotToken_TTN_719t7:\r\n\t\t\treturn CardIds.DroneDeconstructor;\r\n\t\tcase CardIds.ElementalInspiration_PrimordialVortexToken_TTN_480t1:\r\n\t\tcase CardIds.ElementalInspiration_PrimordialVortexToken_TTN_480t2:\r\n\t\tcase CardIds.ElementalInspiration_PrimordialVortexToken_TTN_480t3:\r\n\t\tcase CardIds.ElementalInspiration_PrimordialVortexToken_TTN_480t4:\r\n\t\tcase CardIds.ElementalInspiration_PrimordialVortexToken_TTN_480t5:\r\n\t\tcase CardIds.ElementalInspiration_PrimordialVortexToken_TTN_480t6:\r\n\t\tcase CardIds.ElementalInspiration_PrimordialVortexToken_TTN_480t7:\r\n\t\t\treturn CardIds.ElementalInspiration_PrimordialVortexToken_TTN_480t;\r\n\t\t// Transforms in hand\r\n\t\tcase CardIds.ForestSeedlings_ForestBlossomsToken:\r\n\t\t\treturn CardIds.ForestSeedlings;\r\n\t\tcase CardIds.FrostLotusSeedling_FrostLotusBlossomToken:\r\n\t\t\treturn CardIds.FrostLotusSeedling;\r\n\t}\r\n\r\n\t// Transfer Student should be handled on a case by case basis\r\n\tif (cardId.startsWith(CardIds.TransferStudent)) {\r\n\t\treturn CardIds.TransferStudent;\r\n\t}\r\n\tif (cardId.startsWith(CardIds.ZilliaxDeluxe3000_TOY_330)) {\r\n\t\treturn CardIds.ZilliaxDeluxe3000_TOY_330;\r\n\t}\r\n\r\n\treturn cardId;\r\n};\r\n"]}
1
+ {"version":3,"file":"all-cards.service.js","sourceRoot":"","sources":["../../src/services/all-cards.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Sideboard } from '@firestone-hs/deckstrings';\r\nimport { CardIds } from '../card-ids';\r\nimport { ReferenceCard } from '../models/reference-cards/reference-card';\r\nimport { GameFormat } from '../public-api';\r\nimport { CardsForDeckbuildingService } from './cards-for-deckbuilding.service';\r\nimport { httpWithRetries } from './utils';\r\n\r\nconst CARDS_CDN_URL = 'https://static.firestoneapp.com/data/cards';\r\n\r\nexport class AllCardsService {\r\n\tprivate cache: { [cardId: string]: ReferenceCard } = {};\r\n\tprivate cacheDbfId: { [cardDbfId: string]: ReferenceCard } = {};\r\n\r\n\tprivate deckbuilding: CardsForDeckbuildingService;\r\n\r\n\tconstructor() {\r\n\t\t// We don't call it in the constructor because we want the app to be in control\r\n\t\t// of how they load the cards, and for it to be aware of when cards have been loaded\r\n\t\t// this.retrieveAllCards();\r\n\t}\r\n\r\n\t// We keep this synchronous because we ensure, in the game init pipeline, that loading cards\r\n\t// is the first thing we do\r\n\tpublic getCard(id: string | number, errorWhenUndefined = true): ReferenceCard {\r\n\t\treturn this.cache[id] ?? this.cacheDbfId[id] ?? ({} as ReferenceCard);\r\n\t}\r\n\r\n\tpublic getMultipleCards(ids: (string | number)[]): ReferenceCard[] {\r\n\t\treturn ids.map((id) => this.getCard(id));\r\n\t}\r\n\r\n\t/** @deprecated use getCard instead */\r\n\tpublic getCardFromDbfId(dbfId: number): ReferenceCard {\r\n\t\treturn this.cacheDbfId[dbfId] ?? ({} as ReferenceCard);\r\n\t}\r\n\r\n\t/** @deprecated use getMultipleCards instead */\r\n\tpublic getCardsFromDbfIds(dbfIds: number[]): ReferenceCard[] {\r\n\t\treturn dbfIds.map((dbfId) => this.getCardFromDbfId(dbfId));\r\n\t}\r\n\r\n\tpublic getCards(): ReferenceCard[] {\r\n\t\treturn Object.values(this.cache);\r\n\t}\r\n\r\n\tpublic async initializeCardsDb(version = '', cardsFile = 'cards_enUS.gz.json'): Promise<void> {\r\n\t\t// console.debug('[all-cards] asked to retrieve cards from CDN', version, new Error().stack);\r\n\t\treturn new Promise<void>(async (resolve, reject) => {\r\n\t\t\tlet allCards: readonly ReferenceCard[] = Object.values(this.cache);\r\n\t\t\tif (!!allCards?.length) {\r\n\t\t\t\t// console.debug('[all-cards] already loaded all cards');\r\n\t\t\t\tresolve();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.cache = {};\r\n\t\t\tthis.cacheDbfId = {};\r\n\t\t\tconst baseUrl = CARDS_CDN_URL;\r\n\t\t\tallCards = await this.loadCards(baseUrl, cardsFile, version);\r\n\t\t\tif (!allCards?.length) {\r\n\t\t\t\tconsole.error('[all-cards] could not load cards', baseUrl, version, allCards);\r\n\t\t\t} else {\r\n\t\t\t\t// console.log('[all-cards] retrieved all cards', allCards?.length);\r\n\t\t\t\tfor (const card of allCards) {\r\n\t\t\t\t\tif (card.id) {\r\n\t\t\t\t\t\tthis.cache[card.id] = card;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (card.dbfId) {\r\n\t\t\t\t\t\tthis.cacheDbfId[card.dbfId] = card;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.deckbuilding = new CardsForDeckbuildingService();\r\n\t\t\tthis.deckbuilding.init(this);\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tpublic getRootCardId(cardId: string): string {\r\n\t\tconst card = this.getCard(cardId);\r\n\t\tconst dbfId = card?.counterpartCards?.[0] ?? card?.deckDuplicateDbfId ?? card?.dbfId;\r\n\t\treturn this.getCard(dbfId)?.id;\r\n\t}\r\n\r\n\tpublic normalizeDeckList(decklist: string): string {\r\n\t\treturn this.deckbuilding.normalizeDeckList(decklist, this);\r\n\t}\r\n\r\n\tpublic normalizeSideboard(sideboard: Sideboard, format: GameFormat): Sideboard {\r\n\t\treturn this.deckbuilding.normalizeSideboard(sideboard, format, this);\r\n\t}\r\n\r\n\tpublic getBaseCardDbfIdForDeckbuilding(cardIdOrDbfId: number | string, format: GameFormat): number {\r\n\t\treturn this.deckbuilding.getBaseCardDbfIdForDeckbuilding(cardIdOrDbfId, format, this);\r\n\t}\r\n\r\n\tpublic getBaseCardIdForDeckbuilding(cardIdOrDbfId: number | string, format: GameFormat): string {\r\n\t\treturn this.deckbuilding.getBaseCardIdForDeckbuilding(cardIdOrDbfId, format, this);\r\n\t}\r\n\r\n\tprivate async loadCards(baseUrl: string, cardsFile: string, version: string): Promise<readonly ReferenceCard[]> {\r\n\t\tconst versionString = !!version?.length ? `?v=${version}` : '';\r\n\t\tconst url = `${baseUrl}/${cardsFile}${versionString}`;\r\n\t\tlet cardsStr: string = await this.getCardsStr(url);\r\n\t\tif (!!cardsStr?.length && !cardsStr.startsWith('<')) {\r\n\t\t\treturn JSON.parse(cardsStr) as readonly ReferenceCard[];\r\n\t\t}\r\n\r\n\t\tconsole.warn('[all-cards] could not load cards, defaulting to split');\r\n\t\tconst numberOfSplits = 4;\r\n\t\tconst result: ReferenceCard[] = [];\r\n\t\tfor (let i = 0; i < numberOfSplits; i++) {\r\n\t\t\tconst splitUrl = `${baseUrl}/split/${cardsFile}.${i}${versionString}`;\r\n\t\t\tconsole.log('[all-cards] loading split', splitUrl);\r\n\t\t\tcardsStr = await httpWithRetries(splitUrl, 1);\r\n\t\t\tif (!!cardsStr?.length && !cardsStr.startsWith('<')) {\r\n\t\t\t\tconst splitCards: readonly ReferenceCard[] = JSON.parse(cardsStr);\r\n\t\t\t\tconsole.log('loaded split cards', splitCards?.length);\r\n\t\t\t\tresult.push(...splitCards);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (!!result?.length) {\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tconst urlNoAudio = `${baseUrl}/no_audio/${cardsFile}?v=${version}`;\r\n\t\tconsole.warn('[all-cards] could not load cards, defaulting to no_audio', urlNoAudio);\r\n\t\tcardsStr = await httpWithRetries(urlNoAudio, 1);\r\n\t\tif (!!cardsStr?.length && !cardsStr.startsWith('<')) {\r\n\t\t\treturn JSON.parse(cardsStr) as readonly ReferenceCard[];\r\n\t\t}\r\n\t\treturn [];\r\n\t}\r\n\r\n\tprotected async getCardsStr(url: string): Promise<string> {\r\n\t\treturn await httpWithRetries(url, 1);\r\n\t}\r\n}\r\n\r\n// The spellstones are present in the AI decklist in their basic version\r\n// However, if the AI plays the spellstone's upgraded version, we need to remove\r\n// the basic one from the decklist\r\nexport const getBaseCardId = (cardId: string): string => {\r\n\tif (!cardId) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tswitch (cardId) {\r\n\t\t// The spellstones\r\n\t\tcase CardIds.LesserSpinelSpellstone_SpinelSpellstoneToken_TOY_825t:\r\n\t\tcase CardIds.LesserSpinelSpellstone_GreaterSpinelSpellstoneToken_TOY_825t2:\r\n\t\t\treturn CardIds.LesserSpinelSpellstone_TOY_825;\r\n\t\tcase CardIds.LesserJasperSpellstone_JasperSpellstoneToken:\r\n\t\tcase CardIds.LesserJasperSpellstone_GreaterJasperSpellstoneToken:\r\n\t\t\treturn CardIds.LesserJasperSpellstone_CORE_LOOT_051;\r\n\t\tcase CardIds.LesserEmeraldSpellstone_EmeraldSpellstoneToken:\r\n\t\tcase CardIds.LesserEmeraldSpellstone_GreaterEmeraldSpellstoneToken:\r\n\t\t\treturn CardIds.LesserEmeraldSpellstone_CORE_FB_Champs_LOOT_080;\r\n\t\tcase CardIds.LesserDiamondSpellstone_DiamondSpellstoneToken:\r\n\t\tcase CardIds.LesserDiamondSpellstone_GreaterDiamondSpellstoneToken:\r\n\t\t\treturn CardIds.LesserDiamondSpellstone_CORE_LOOT_507;\r\n\t\tcase CardIds.LesserAmethystSpellstone_AmethystSpellstoneToken:\r\n\t\tcase CardIds.LesserAmethystSpellstone_GreaterAmethystSpellstoneToken:\r\n\t\t\treturn CardIds.LesserAmethystSpellstone_CORE_LOOT_043;\r\n\t\tcase CardIds.LesserOpalSpellstone_OpalSpellstoneToken_TOY_645t:\r\n\t\tcase CardIds.LesserOpalSpellstone_GreaterOpalSpellstoneToken_TOY_645t1:\r\n\t\t\treturn CardIds.LesserOpalSpellstone_TOY_645;\r\n\t\tcase 'LOOT_103t1':\r\n\t\tcase 'LOOT_103t2':\r\n\t\t\treturn 'LOOT_103';\r\n\t\tcase 'LOOT_043t2':\r\n\t\tcase 'LOOT_043t3':\r\n\t\t\treturn 'LOOT_043';\r\n\t\tcase 'LOOT_051t1':\r\n\t\tcase 'LOOT_051t2':\r\n\t\t\treturn 'LOOT_051';\r\n\t\tcase 'LOOT_064t1':\r\n\t\tcase 'LOOT_064t2':\r\n\t\t\treturn 'LOOT_064';\r\n\t\tcase 'LOOT_080t2':\r\n\t\tcase 'LOOT_080t3':\r\n\t\t\treturn 'LOOT_080';\r\n\t\tcase 'LOOT_091t1':\r\n\t\tcase 'LOOT_091t2':\r\n\t\t\treturn 'LOOT_091';\r\n\t\tcase 'LOOT_203t2':\r\n\t\tcase 'LOOT_203t3':\r\n\t\t\treturn 'LOOT_203';\r\n\t\tcase 'LOOT_503t':\r\n\t\tcase 'LOOT_503t2':\r\n\t\t\treturn 'LOOT_503';\r\n\t\tcase 'LOOT_507t':\r\n\t\tcase 'LOOT_507t2':\r\n\t\t\treturn 'LOOT_507';\r\n\t\tcase 'FB_Champs_LOOT_080t2':\r\n\t\tcase 'FB_Champs_LOOT_080t3':\r\n\t\t\treturn 'FB_Champs_LOOT_080';\r\n\r\n\t\t// The \"unidentified\" spells\r\n\t\tcase 'LOOT_278t1':\r\n\t\t\treturn 'LOOT_278';\r\n\t\tcase 'LOOT_278t2':\r\n\t\t\treturn 'LOOT_278';\r\n\t\tcase 'LOOT_278t3':\r\n\t\t\treturn 'LOOT_278';\r\n\t\tcase 'LOOT_278t4':\r\n\t\t\treturn 'LOOT_278';\r\n\t\tcase 'LOOT_285t':\r\n\t\t\treturn 'LOOT_285';\r\n\t\tcase 'LOOT_285t2':\r\n\t\t\treturn 'LOOT_285';\r\n\t\tcase 'LOOT_285t3':\r\n\t\t\treturn 'LOOT_285';\r\n\t\tcase 'LOOT_285t4':\r\n\t\t\treturn 'LOOT_285';\r\n\t\tcase 'LOOT_286t1':\r\n\t\t\treturn 'LOOT_286';\r\n\t\tcase 'LOOT_286t2':\r\n\t\t\treturn 'LOOT_286';\r\n\t\tcase 'LOOT_286t3':\r\n\t\t\treturn 'LOOT_286';\r\n\t\tcase 'LOOT_286t4':\r\n\t\t\treturn 'LOOT_286';\r\n\t\tcase 'DAL_366t1':\r\n\t\t\treturn 'DAL_366';\r\n\t\tcase 'DAL_366t2':\r\n\t\t\treturn 'DAL_366';\r\n\t\tcase 'DAL_366t3':\r\n\t\t\treturn 'DAL_366';\r\n\t\tcase 'DAL_366t4':\r\n\t\t\treturn 'DAL_366';\r\n\t\t// Galakrond\r\n\t\tcase CardIds.GalakrondTheTempest_GalakrondTheApocalypseToken:\r\n\t\tcase CardIds.GalakrondTheTempest_GalakrondAzerothsEndToken:\r\n\t\t\treturn CardIds.GalakrondTheTempest;\r\n\t\tcase CardIds.GalakrondTheWretched_GalakrondTheApocalypseToken:\r\n\t\tcase CardIds.GalakrondTheWretched_GalakrondAzerothsEndToken:\r\n\t\t\treturn CardIds.GalakrondTheWretched;\r\n\t\tcase CardIds.GalakrondTheUnspeakable_GalakrondTheApocalypseToken:\r\n\t\tcase CardIds.GalakrondTheUnspeakable_GalakrondAzerothsEndToken:\r\n\t\t\treturn CardIds.GalakrondTheUnspeakable;\r\n\t\tcase CardIds.GalakrondTheNightmare_GalakrondTheApocalypseToken:\r\n\t\tcase CardIds.GalakrondTheNightmare_GalakrondAzerothsEndToken:\r\n\t\t\treturn CardIds.GalakrondTheNightmare;\r\n\t\tcase CardIds.GalakrondTheUnbreakable_GalakrondTheApocalypseToken:\r\n\t\tcase CardIds.GalakrondTheUnbreakable_GalakrondAzerothsEndToken:\r\n\t\t\treturn CardIds.GalakrondTheUnbreakable;\r\n\t\t// Corrupted\r\n\t\tcase 'DMF_054t':\r\n\t\t\treturn 'DMF_054';\r\n\t\tcase 'DMF_061t':\r\n\t\t\treturn 'DMF_061';\r\n\t\tcase 'DMF_064t':\r\n\t\t\treturn 'DMF_064';\r\n\t\tcase 'DMF_073t':\r\n\t\t\treturn 'DMF_073';\r\n\t\tcase 'DMF_078t':\r\n\t\t\treturn 'DMF_078';\r\n\t\tcase 'DMF_080t':\r\n\t\t\treturn 'DMF_080';\r\n\t\tcase 'DMF_082t':\r\n\t\t\treturn 'DMF_082';\r\n\t\tcase 'DMF_083t':\r\n\t\t\treturn 'DMF_083';\r\n\t\tcase 'DMF_090t':\r\n\t\t\treturn 'DMF_090';\r\n\t\tcase 'DMF_101t':\r\n\t\t\treturn 'DMF_101';\r\n\t\tcase 'DMF_105t':\r\n\t\t\treturn 'DMF_105';\r\n\t\tcase 'DMF_117t':\r\n\t\t\treturn 'DMF_117';\r\n\t\tcase 'DMF_117t2':\r\n\t\t\treturn 'DMF_117';\r\n\t\tcase 'DMF_118t':\r\n\t\t\treturn 'DMF_118';\r\n\t\tcase 'DMF_124t':\r\n\t\t\treturn 'DMF_124';\r\n\t\tcase 'DMF_163t':\r\n\t\t\treturn 'DMF_163';\r\n\t\tcase 'DMF_174t':\r\n\t\t\treturn 'DMF_174';\r\n\t\tcase 'DMF_184t':\r\n\t\t\treturn 'DMF_184';\r\n\t\tcase 'DMF_186a':\r\n\t\t\treturn 'DMF_186';\r\n\t\tcase 'DMF_244t':\r\n\t\t\treturn 'DMF_244';\r\n\t\tcase 'DMF_247t':\r\n\t\t\treturn 'DMF_247';\r\n\t\tcase 'DMF_248t':\r\n\t\t\treturn 'DMF_248';\r\n\t\tcase 'DMF_517a':\r\n\t\t\treturn 'DMF_517';\r\n\t\tcase 'DMF_526a':\r\n\t\t\treturn 'DMF_526';\r\n\t\tcase 'DMF_701t':\r\n\t\t\treturn 'DMF_701';\r\n\t\tcase 'DMF_703t':\r\n\t\t\treturn 'DMF_703';\r\n\t\tcase 'DMF_730t':\r\n\t\t\treturn 'DMF_730';\r\n\t\tcase 'DMF_526a':\r\n\t\t\treturn 'DMF_526';\r\n\t\tcase CardIds.DreamingDrake_DreamingDrakeToken:\r\n\t\t\treturn CardIds.DreamingDrake;\r\n\t\tcase CardIds.LibramOfJudgment_LibramOfJudgmentToken:\r\n\t\t\treturn CardIds.LibramOfJudgment;\r\n\t\tcase CardIds.LuckysoulHoarder_LuckysoulHoarderToken:\r\n\t\t\treturn CardIds.LuckysoulHoarder;\r\n\t\tcase CardIds.NitroboostPoison_NitroboostPoisonToken:\r\n\t\t\treturn CardIds.NitroboostPoison;\r\n\t\t// The \"improve during run\" cards in Duels\r\n\t\t// Upgradable ranked spells\r\n\t\tcase CardIds.TameBeastRank1_TameBeastRank2Token:\r\n\t\tcase CardIds.TameBeastRank1_TameBeastRank3Token:\r\n\t\t\treturn CardIds.TameBeastRank1;\r\n\t\tcase CardIds.ChainLightningRank1_ChainLightningRank2Token:\r\n\t\tcase CardIds.ChainLightningRank1_ChainLightningRank3Token:\r\n\t\t\treturn CardIds.ChainLightningRank1;\r\n\t\tcase CardIds.FlurryRank1_FlurryRank2Token:\r\n\t\tcase CardIds.FlurryRank1_FlurryRank3Token:\r\n\t\t\treturn CardIds.FlurryRank1;\r\n\t\tcase CardIds.CondemnRank1_CondemnRank2Token:\r\n\t\tcase CardIds.CondemnRank1_CondemnRank3Token:\r\n\t\t\treturn CardIds.CondemnRank1;\r\n\t\tcase CardIds.WickedStabRank1_WickedStabRank2Token:\r\n\t\tcase CardIds.WickedStabRank1_WickedStabRank3Token:\r\n\t\t\treturn CardIds.WickedStabRank1;\r\n\t\tcase CardIds.LivingSeedRank1_LivingSeedRank2Token:\r\n\t\tcase CardIds.LivingSeedRank1_LivingSeedRank3Token:\r\n\t\t\treturn CardIds.LivingSeedRank1;\r\n\t\tcase CardIds.ConvictionRank1_ConvictionRank2Token:\r\n\t\tcase CardIds.ConvictionRank1_ConvictionRank3Token:\r\n\t\t\treturn CardIds.ConvictionRank1;\r\n\t\tcase CardIds.ConditioningRank1_ConditioningRank2Token:\r\n\t\tcase CardIds.ConditioningRank1_ConditioningRank3Token:\r\n\t\t\treturn CardIds.ConditioningRank1;\r\n\t\tcase CardIds.FuryRank1_FuryRank2Token:\r\n\t\tcase CardIds.FuryRank1_FuryRank3Token:\r\n\t\t\treturn CardIds.FuryRank1;\r\n\t\tcase CardIds.ImpSwarmRank1_ImpSwarmRank2Token:\r\n\t\tcase CardIds.ImpSwarmRank1_ImpSwarmRank3Token:\r\n\t\t\treturn CardIds.ImpSwarmRank1;\r\n\r\n\t\t// Infused\r\n\t\tcase CardIds.MischievousImp_MischievousImpToken:\r\n\t\t\treturn CardIds.MischievousImp;\r\n\t\tcase CardIds.ImpKingRafaam_ImpKingRafaamToken:\r\n\t\t\treturn CardIds.ImpKingRafaam_REV_789;\r\n\t\tcase CardIds.StonebornAccuser_StonebornAccuserToken:\r\n\t\t\treturn CardIds.StonebornAccuser;\r\n\t\tcase CardIds.Murlocula_MurloculaToken:\r\n\t\t\treturn CardIds.Murlocula;\r\n\t\tcase CardIds.FamishedFool_FamishedFoolToken:\r\n\t\t\treturn CardIds.FamishedFool;\r\n\t\tcase CardIds.SinfueledGolem_SinfueledGolemToken:\r\n\t\t\treturn CardIds.SinfueledGolem;\r\n\t\tcase CardIds.InsatiableDevourer_InsatiableDevourerToken:\r\n\t\t\treturn CardIds.InsatiableDevourer;\r\n\t\tcase CardIds.SireDenathrius_SireDenathriusToken:\r\n\t\t\treturn CardIds.SireDenathrius_REV_906;\r\n\t\tcase CardIds.PriestOfTheDeceased_PriestOfTheDeceasedToken:\r\n\t\t\treturn CardIds.PriestOfTheDeceased;\r\n\t\tcase CardIds.ArtificerXymox_ArtificerXymoxToken:\r\n\t\t\treturn CardIds.ArtificerXymox_REV_937;\r\n\t\tcase CardIds.BuffetBiggun_BuffetBiggunToken:\r\n\t\t\treturn CardIds.BuffetBiggun;\r\n\t\tcase CardIds.ImbuedAxe_ImbuedAxeToken:\r\n\t\t\treturn CardIds.ImbuedAxe;\r\n\t\tcase CardIds.CleanTheScene_CleanTheSceneToken:\r\n\t\t\treturn CardIds.CleanTheScene;\r\n\t\tcase CardIds.ConvincingDisguise_ConvincingDisguiseToken:\r\n\t\t\treturn CardIds.ConvincingDisguise;\r\n\t\tcase CardIds.PlotOfSin_PlotOfSinToken:\r\n\t\t\treturn CardIds.PlotOfSin;\r\n\t\tcase CardIds.AllFelBreaksLoose_AllFelBreaksLooseToken:\r\n\t\t\treturn CardIds.AllFelBreaksLoose;\r\n\t\tcase CardIds.Shadehound_ShadehoundToken:\r\n\t\t\treturn CardIds.Shadehound;\r\n\t\tcase CardIds.TotemicEvidence_TotemicEvidenceToken:\r\n\t\t\treturn CardIds.TotemicEvidence;\r\n\t\tcase CardIds.SylvanasTheAccused_SylvanasTheAccusedToken:\r\n\t\t\treturn CardIds.SylvanasTheAccused;\r\n\r\n\t\t// Remixed\r\n\t\tcase CardIds.RemixedDispenseOBot_ChillingDispenseOBotToken:\r\n\t\tcase CardIds.RemixedDispenseOBot_MerchDispenseOBotToken:\r\n\t\tcase CardIds.RemixedDispenseOBot_MoneyDispenseOBotToken:\r\n\t\tcase CardIds.RemixedDispenseOBot_MysteryDispenseOBotToken:\r\n\t\t\treturn CardIds.RemixedDispenseOBot;\r\n\t\tcase CardIds.RemixedRhapsody_AngstyRhapsodyToken:\r\n\t\tcase CardIds.RemixedRhapsody_ResoundingRhapsodyToken:\r\n\t\tcase CardIds.RemixedRhapsody_EmotionalRhapsodyToken:\r\n\t\tcase CardIds.RemixedRhapsody_WailingRhapsodyToken:\r\n\t\t\treturn CardIds.RemixedRhapsody;\r\n\t\tcase CardIds.RemixedTotemcarver_LoudTotemcarverToken:\r\n\t\tcase CardIds.RemixedTotemcarver_BluesyTotemcarverToken:\r\n\t\tcase CardIds.RemixedTotemcarver_BlazingTotemcarverToken:\r\n\t\tcase CardIds.RemixedTotemcarver_KaraokeTotemcarverToken:\r\n\t\t\treturn CardIds.RemixedTotemcarver;\r\n\t\tcase CardIds.RemixedMusician_CathedralMusicianToken:\r\n\t\tcase CardIds.RemixedMusician_TropicalMusicianToken:\r\n\t\tcase CardIds.RemixedMusician_RomanticMusicianToken:\r\n\t\tcase CardIds.RemixedMusician_NoiseMusicianToken:\r\n\t\t\treturn CardIds.RemixedMusician;\r\n\t\tcase CardIds.RemixedTuningFork_SharpenedTuningForkToken:\r\n\t\tcase CardIds.RemixedTuningFork_ReinforcedTuningForkToken:\r\n\t\tcase CardIds.RemixedTuningFork_CurvedTuningForkToken:\r\n\t\tcase CardIds.RemixedTuningFork_BackupTuningForkToken:\r\n\t\t\treturn CardIds.RemixedTuningFork;\r\n\t\t// Forged\r\n\t\tcase CardIds.BellowingFlames_BellowingFlamesToken:\r\n\t\t\treturn CardIds.BellowingFlames;\r\n\t\tcase CardIds.ChampionOfStorms_StormCycloneToken_TTN_801t2:\r\n\t\t\treturn CardIds.ChampionOfStorms_StormCycloneToken_TTN_801t1;\r\n\t\tcase CardIds.CreationProtocol_CreationProtocolToken:\r\n\t\t\treturn CardIds.CreationProtocol;\r\n\t\tcase CardIds.DiscipleOfSargeras_DiscipleOfSargerasToken:\r\n\t\t\treturn CardIds.DiscipleOfSargeras;\r\n\t\tcase CardIds.EmbraceOfNature_EmbraceOfNatureToken:\r\n\t\t\treturn CardIds.EmbraceOfNature;\r\n\t\tcase CardIds.Eulogizer_EulogizerToken:\r\n\t\t\treturn CardIds.Eulogizer;\r\n\t\tcase CardIds.LabConstructor_LabConstructorToken:\r\n\t\t\treturn CardIds.LabConstructor;\r\n\t\tcase CardIds.MechagnomeGuide_MechagnomeGuideToken:\r\n\t\t\treturn CardIds.MechagnomeGuide;\r\n\t\tcase CardIds.MoltenRune_MoltenRuneToken:\r\n\t\t\treturn CardIds.MoltenRune;\r\n\t\tcase CardIds.StormGiant_StormGiantToken:\r\n\t\t\treturn CardIds.StormGiant;\r\n\t\tcase CardIds.TitanforgedTraps_TitanforgedTrapsToken:\r\n\t\t\treturn CardIds.TitanforgedTraps;\r\n\t\tcase CardIds.TyrsTears_TyrsTearsToken:\r\n\t\t\treturn CardIds.TyrsTears;\r\n\t\tcase CardIds.WatcherOfTheSun_WatcherOfTheSunToken:\r\n\t\t\treturn CardIds.WatcherOfTheSun;\r\n\t\tcase CardIds.WeightOfTheWorld_WeightOfTheWorldToken:\r\n\t\t\treturn CardIds.WeightOfTheWorld;\r\n\t\tcase CardIds.Xb488Disposalbot_Xb488DisposalbotToken:\r\n\t\t\treturn CardIds.Xb488Disposalbot;\r\n\t\tcase CardIds.MuscleOTron_MuscleOTronToken_YOG_525t:\r\n\t\t\treturn CardIds.MuscleOTron_YOG_525;\r\n\t\tcase CardIds.Sanitize_SanitizeToken_YOG_502t:\r\n\t\t\treturn CardIds.Sanitize_YOG_502;\r\n\t\t// Bonus effect\r\n\t\tcase CardIds.FromTheScrapheap_SparkbotToken_TTN_719t:\r\n\t\tcase CardIds.FromTheScrapheap_SparkbotToken_TTN_719t1:\r\n\t\tcase CardIds.FromTheScrapheap_SparkbotToken_TTN_719t2:\r\n\t\tcase CardIds.FromTheScrapheap_SparkbotToken_TTN_719t3:\r\n\t\tcase CardIds.FromTheScrapheap_SparkbotToken_TTN_719t4:\r\n\t\tcase CardIds.FromTheScrapheap_SparkbotToken_TTN_719t5:\r\n\t\tcase CardIds.FromTheScrapheap_SparkbotToken_TTN_719t6:\r\n\t\tcase CardIds.FromTheScrapheap_SparkbotToken_TTN_719t7:\r\n\t\t\treturn CardIds.DroneDeconstructor;\r\n\t\tcase CardIds.ElementalInspiration_PrimordialVortexToken_TTN_480t1:\r\n\t\tcase CardIds.ElementalInspiration_PrimordialVortexToken_TTN_480t2:\r\n\t\tcase CardIds.ElementalInspiration_PrimordialVortexToken_TTN_480t3:\r\n\t\tcase CardIds.ElementalInspiration_PrimordialVortexToken_TTN_480t4:\r\n\t\tcase CardIds.ElementalInspiration_PrimordialVortexToken_TTN_480t5:\r\n\t\tcase CardIds.ElementalInspiration_PrimordialVortexToken_TTN_480t6:\r\n\t\tcase CardIds.ElementalInspiration_PrimordialVortexToken_TTN_480t7:\r\n\t\t\treturn CardIds.ElementalInspiration_PrimordialVortexToken_TTN_480t;\r\n\t\t// Transforms in hand\r\n\t\tcase CardIds.ForestSeedlings_ForestBlossomsToken:\r\n\t\t\treturn CardIds.ForestSeedlings;\r\n\t\tcase CardIds.FrostLotusSeedling_FrostLotusBlossomToken:\r\n\t\t\treturn CardIds.FrostLotusSeedling;\r\n\t\tcase CardIds.UngoroBrochure_DalaranBrochureToken_WORK_050t:\r\n\t\t\treturn CardIds.UngoroBrochure_WORK_050;\r\n\t\tcase CardIds.SilvermoonBrochure_GilneasBrochureToken_WORK_017t:\r\n\t\t\treturn CardIds.SilvermoonBrochure_WORK_017;\r\n\t\tcase CardIds.IcecrownBrochure_BlackrockBrochureToken_WORK_030t:\r\n\t\t\treturn CardIds.IcecrownBrochure_WORK_030;\r\n\t}\r\n\r\n\t// Transfer Student should be handled on a case by case basis\r\n\tif (cardId.startsWith(CardIds.TransferStudent)) {\r\n\t\treturn CardIds.TransferStudent;\r\n\t}\r\n\tif (cardId.startsWith(CardIds.ZilliaxDeluxe3000_TOY_330)) {\r\n\t\treturn CardIds.ZilliaxDeluxe3000_TOY_330;\r\n\t}\r\n\r\n\treturn cardId;\r\n};\r\n"]}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getEffectiveTribesEnum = exports.getTribesForInclusion = exports.getEffectiveTribes = exports.isBaconGhost = exports.getHeroPower = exports.getReferenceTribeCardId = exports.getTribeIcon = exports.getTribeName = exports.normalizeMinionCardId = 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
+ const hs_utils_1 = require("./hs-utils");
5
6
  exports.ALL_BG_RACES = [
6
7
  public_api_1.Race.BEAST,
7
8
  public_api_1.Race.DEMON,
@@ -615,9 +616,5 @@ const getTribesForInclusion = (card, includeOwnTribe) => {
615
616
  }
616
617
  };
617
618
  exports.getTribesForInclusion = getTribesForInclusion;
618
- const getEffectiveTribesEnum = (card) => {
619
- var _a;
620
- return !!((_a = card.races) === null || _a === void 0 ? void 0 : _a.length) ? card.races.map((r) => public_api_1.Race[r]) : [public_api_1.Race.BLANK];
621
- };
622
- exports.getEffectiveTribesEnum = getEffectiveTribesEnum;
619
+ exports.getEffectiveTribesEnum = hs_utils_1.getEffectiveTribesEnumBase;
623
620
  //# sourceMappingURL=bgs-utils.js.map
@@ -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\t// 29.2\r\n\tCardIds.SilverGoose_SilverFledglingToken_BG29_801t,\r\n\tCardIds.SilverGoose_SilverFledglingToken_BG29_801_Gt,\r\n\tCardIds.ReplicatingMenace_MicrobotToken_BG_BOT_312t,\r\n\tCardIds.ReplicatingMenace_MicrobotToken_TB_BaconUps_032t,\r\n\tCardIds.TheUninvitedGuest_ShadowToken_BG29_875t,\r\n\tCardIds.TheUninvitedGuest_ShadowToken_BG29_875_Gt,\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.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\n// Used to make the mapping between premium / normal minions\r\nexport const normalizeMinionCardId = (\r\n\tcardId: string,\r\n\tallCards: { getCard: (cardId: string | number) => ReferenceCard },\r\n) => {\r\n\tconst refCard = allCards.getCard(cardId);\r\n\tif (refCard?.battlegroundsNormalDbfId) {\r\n\t\tconst normalCard = allCards.getCard(refCard.battlegroundsNormalDbfId);\r\n\t\treturn normalCard?.id;\r\n\t}\r\n\treturn cardId;\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.GoldrinnTheGreatWolf_BGS_018;\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.RisenRider_BG25_001;\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\t\tcase CardIds.Cho_BGDUO_HERO_222:\r\n\t\t\treturn CardIds.Cho_DoubleTrouble_BGDUO_HERO_222p;\r\n\t\tcase CardIds.Gall_BGDUO_HERO_223:\r\n\t\t\treturn CardIds.Gall_DoubleTrouble_BGDUO_HERO_223p;\r\n\t\tcase CardIds.TheNamelessOne_BGDUO_HERO_100:\r\n\t\t\treturn CardIds.TheNamelessOne_X_BGDUO_HERO_100p;\r\n\t\tcase CardIds.FlobbidinousFloop_BGDUO_HERO_101:\r\n\t\t\treturn CardIds.FlobbidinousFloop_GloriousGloop_BGDUO_HERO_101p;\r\n\t\tcase CardIds.MadamGoya_BGDUO_HERO_104:\r\n\t\t\treturn CardIds.MadamGoya_EfficientExchange_BGDUO_HERO_104p;\r\n\t\tcase CardIds.MarinTheManager_BG30_HERO_304:\r\n\t\t\treturn CardIds.MarinTheManager_FantasticTreasure_BG30_HERO_304p;\r\n\r\n\t\tcase '':\r\n\t\t\treturn null; // new heroes\r\n\t}\r\n};\r\n\r\nexport const isBaconGhost = (cardId: string): boolean => {\r\n\treturn (\r\n\t\tcardId === CardIds.Kelthuzad_TB_BaconShop_HERO_KelThuzad ||\r\n\t\tcardId === CardIds.LadyDeathwhisper_TB_BaconShop_HERO_Deathwhisper\r\n\t);\r\n};\r\n\r\nexport const getEffectiveTribes = (\r\n\tcard: ReferenceCard,\r\n\tgroupMinionsIntoTheirTribeGroup: boolean,\r\n): readonly string[] => {\r\n\tconst tribes: readonly Race[] = groupMinionsIntoTheirTribeGroup\r\n\t\t? getTribesForInclusion(card, true)\r\n\t\t: getEffectiveTribesEnum(card);\r\n\treturn tribes.map((tribe) => Race[tribe]);\r\n};\r\n\r\nexport const getTribesForInclusion = (card: ReferenceCard, includeOwnTribe: boolean): readonly Race[] => {\r\n\tif (!card) {\r\n\t\treturn [];\r\n\t}\r\n\tconst nativeRaces = card.races?.map((r) => Race[r]) ?? [];\r\n\tconst cardRaces = includeOwnTribe ? nativeRaces : [];\r\n\tswitch (card.id) {\r\n\t\t// Some cases are only included when specific tribes are\r\n\t\tcase CardIds.BirdBuddy_BG21_002:\r\n\t\tcase CardIds.BirdBuddy_BG21_002_G:\r\n\t\tcase CardIds.PackLeader_BGS_017:\r\n\t\tcase CardIds.PackLeader_TB_BaconUps_086:\r\n\t\tcase CardIds.VirmenSensei_CFM_816:\r\n\t\tcase CardIds.VirmenSensei_TB_BaconUps_074:\r\n\t\tcase CardIds.HoundmasterLegacy:\r\n\t\tcase CardIds.HoundmasterVanilla:\r\n\t\tcase CardIds.Houndmaster_TB_BaconUps_068:\r\n\t\tcase CardIds.Houndmaster_BG_DS1_070:\r\n\t\t\treturn [Race.BEAST, ...cardRaces];\r\n\t\tcase CardIds.ImpatientDoomsayer_BG21_007:\r\n\t\tcase CardIds.ImpatientDoomsayer_BG21_007_G:\r\n\t\tcase CardIds.SoulJuggler_BGS_002:\r\n\t\tcase CardIds.SoulJuggler_TB_BaconUps_075:\r\n\t\tcase CardIds.WrathWeaver_BGS_004:\r\n\t\tcase CardIds.WrathWeaver_TB_BaconUps_079:\r\n\t\tcase CardIds.CultistSthara_BG27_081:\r\n\t\tcase CardIds.CultistSthara_BG27_081_G:\r\n\t\t\treturn [Race.DEMON, ...cardRaces];\r\n\t\tcase CardIds.SeafoodSlinger_BG21_011:\r\n\t\tcase CardIds.SeafoodSlinger_BG21_011_G:\r\n\t\t\treturn [Race.MURLOC, ...cardRaces];\r\n\t\tcase CardIds.NadinaTheRed_BGS_040:\r\n\t\tcase CardIds.NadinaTheRed_TB_BaconUps_154:\r\n\t\tcase CardIds.WaxriderTogwaggle_BGS_035:\r\n\t\tcase CardIds.WaxriderTogwaggle_TB_BaconUps_105:\r\n\t\tcase CardIds.WhelpSmuggler_BG21_013:\r\n\t\tcase CardIds.WhelpSmuggler_BG21_013_G:\r\n\t\t\treturn [Race.DRAGON, ...cardRaces];\r\n\t\tcase CardIds.MajordomoExecutus_BGS_105:\r\n\t\tcase CardIds.MajordomoExecutus_TB_BaconUps_207:\r\n\t\tcase CardIds.MasterOfRealities_BG21_036:\r\n\t\tcase CardIds.MasterOfRealities_BG21_036_G:\r\n\t\tcase CardIds.NomiKitchenNightmare_BGS_104:\r\n\t\tcase CardIds.NomiKitchenNightmare_TB_BaconUps_201:\r\n\t\t\treturn [Race.ELEMENTAL, ...cardRaces];\r\n\t\tcase CardIds.KangorsApprentice_BGS_012:\r\n\t\tcase CardIds.KangorsApprentice_TB_BaconUps_087:\r\n\t\t\treturn [Race.MECH, ...cardRaces];\r\n\t\tcase CardIds.DefiantShipwright_BG21_018:\r\n\t\tcase CardIds.DefiantShipwright_BG21_018_G:\r\n\t\tcase CardIds.TheTideRazor_BGS_079:\r\n\t\tcase CardIds.TheTideRazor_TB_BaconUps_137:\r\n\t\t\treturn [Race.PIRATE, ...cardRaces];\r\n\t\tcase CardIds.AgamagganTheGreatBoar_BG20_205:\r\n\t\tcase CardIds.AgamagganTheGreatBoar_BG20_205_G:\r\n\t\tcase CardIds.ProphetOfTheBoar_BG20_203:\r\n\t\tcase CardIds.ProphetOfTheBoar_BG20_203_G:\r\n\t\t\treturn [Race.QUILBOAR, ...cardRaces];\r\n\t\tcase CardIds.OrgozoaTheTender_BG23_015:\r\n\t\tcase CardIds.OrgozoaTheTender_BG23_015_G:\r\n\t\t\treturn [Race.NAGA, ...cardRaces];\r\n\t\tcase CardIds.DisguisedGraverobber_BG28_303:\r\n\t\tcase CardIds.DisguisedGraverobber_BG28_303_G:\r\n\t\t\treturn [Race.UNDEAD, ...cardRaces];\r\n\t\tdefault:\r\n\t\t\treturn getEffectiveTribesEnum(card);\r\n\t}\r\n};\r\n\r\nexport const getEffectiveTribesEnum = (card: ReferenceCard): readonly Race[] => {\r\n\treturn !!card.races?.length ? card.races.map((r) => Race[r]) : [Race.BLANK];\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\nimport { getEffectiveTribesEnumBase } from './hs-utils';\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\t// 29.2\r\n\tCardIds.SilverGoose_SilverFledglingToken_BG29_801t,\r\n\tCardIds.SilverGoose_SilverFledglingToken_BG29_801_Gt,\r\n\tCardIds.ReplicatingMenace_MicrobotToken_BG_BOT_312t,\r\n\tCardIds.ReplicatingMenace_MicrobotToken_TB_BaconUps_032t,\r\n\tCardIds.TheUninvitedGuest_ShadowToken_BG29_875t,\r\n\tCardIds.TheUninvitedGuest_ShadowToken_BG29_875_Gt,\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.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\n// Used to make the mapping between premium / normal minions\r\nexport const normalizeMinionCardId = (\r\n\tcardId: string,\r\n\tallCards: { getCard: (cardId: string | number) => ReferenceCard },\r\n) => {\r\n\tconst refCard = allCards.getCard(cardId);\r\n\tif (refCard?.battlegroundsNormalDbfId) {\r\n\t\tconst normalCard = allCards.getCard(refCard.battlegroundsNormalDbfId);\r\n\t\treturn normalCard?.id;\r\n\t}\r\n\treturn cardId;\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.GoldrinnTheGreatWolf_BGS_018;\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.RisenRider_BG25_001;\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\t\tcase CardIds.Cho_BGDUO_HERO_222:\r\n\t\t\treturn CardIds.Cho_DoubleTrouble_BGDUO_HERO_222p;\r\n\t\tcase CardIds.Gall_BGDUO_HERO_223:\r\n\t\t\treturn CardIds.Gall_DoubleTrouble_BGDUO_HERO_223p;\r\n\t\tcase CardIds.TheNamelessOne_BGDUO_HERO_100:\r\n\t\t\treturn CardIds.TheNamelessOne_X_BGDUO_HERO_100p;\r\n\t\tcase CardIds.FlobbidinousFloop_BGDUO_HERO_101:\r\n\t\t\treturn CardIds.FlobbidinousFloop_GloriousGloop_BGDUO_HERO_101p;\r\n\t\tcase CardIds.MadamGoya_BGDUO_HERO_104:\r\n\t\t\treturn CardIds.MadamGoya_EfficientExchange_BGDUO_HERO_104p;\r\n\t\tcase CardIds.MarinTheManager_BG30_HERO_304:\r\n\t\t\treturn CardIds.MarinTheManager_FantasticTreasure_BG30_HERO_304p;\r\n\r\n\t\tcase '':\r\n\t\t\treturn null; // new heroes\r\n\t}\r\n};\r\n\r\nexport const isBaconGhost = (cardId: string): boolean => {\r\n\treturn (\r\n\t\tcardId === CardIds.Kelthuzad_TB_BaconShop_HERO_KelThuzad ||\r\n\t\tcardId === CardIds.LadyDeathwhisper_TB_BaconShop_HERO_Deathwhisper\r\n\t);\r\n};\r\n\r\nexport const getEffectiveTribes = (\r\n\tcard: ReferenceCard,\r\n\tgroupMinionsIntoTheirTribeGroup: boolean,\r\n): readonly string[] => {\r\n\tconst tribes: readonly Race[] = groupMinionsIntoTheirTribeGroup\r\n\t\t? getTribesForInclusion(card, true)\r\n\t\t: getEffectiveTribesEnum(card);\r\n\treturn tribes.map((tribe) => Race[tribe]);\r\n};\r\n\r\nexport const getTribesForInclusion = (card: ReferenceCard, includeOwnTribe: boolean): readonly Race[] => {\r\n\tif (!card) {\r\n\t\treturn [];\r\n\t}\r\n\tconst nativeRaces = card.races?.map((r) => Race[r]) ?? [];\r\n\tconst cardRaces = includeOwnTribe ? nativeRaces : [];\r\n\tswitch (card.id) {\r\n\t\t// Some cases are only included when specific tribes are\r\n\t\tcase CardIds.BirdBuddy_BG21_002:\r\n\t\tcase CardIds.BirdBuddy_BG21_002_G:\r\n\t\tcase CardIds.PackLeader_BGS_017:\r\n\t\tcase CardIds.PackLeader_TB_BaconUps_086:\r\n\t\tcase CardIds.VirmenSensei_CFM_816:\r\n\t\tcase CardIds.VirmenSensei_TB_BaconUps_074:\r\n\t\tcase CardIds.HoundmasterLegacy:\r\n\t\tcase CardIds.HoundmasterVanilla:\r\n\t\tcase CardIds.Houndmaster_TB_BaconUps_068:\r\n\t\tcase CardIds.Houndmaster_BG_DS1_070:\r\n\t\t\treturn [Race.BEAST, ...cardRaces];\r\n\t\tcase CardIds.ImpatientDoomsayer_BG21_007:\r\n\t\tcase CardIds.ImpatientDoomsayer_BG21_007_G:\r\n\t\tcase CardIds.SoulJuggler_BGS_002:\r\n\t\tcase CardIds.SoulJuggler_TB_BaconUps_075:\r\n\t\tcase CardIds.WrathWeaver_BGS_004:\r\n\t\tcase CardIds.WrathWeaver_TB_BaconUps_079:\r\n\t\tcase CardIds.CultistSthara_BG27_081:\r\n\t\tcase CardIds.CultistSthara_BG27_081_G:\r\n\t\t\treturn [Race.DEMON, ...cardRaces];\r\n\t\tcase CardIds.SeafoodSlinger_BG21_011:\r\n\t\tcase CardIds.SeafoodSlinger_BG21_011_G:\r\n\t\t\treturn [Race.MURLOC, ...cardRaces];\r\n\t\tcase CardIds.NadinaTheRed_BGS_040:\r\n\t\tcase CardIds.NadinaTheRed_TB_BaconUps_154:\r\n\t\tcase CardIds.WaxriderTogwaggle_BGS_035:\r\n\t\tcase CardIds.WaxriderTogwaggle_TB_BaconUps_105:\r\n\t\tcase CardIds.WhelpSmuggler_BG21_013:\r\n\t\tcase CardIds.WhelpSmuggler_BG21_013_G:\r\n\t\t\treturn [Race.DRAGON, ...cardRaces];\r\n\t\tcase CardIds.MajordomoExecutus_BGS_105:\r\n\t\tcase CardIds.MajordomoExecutus_TB_BaconUps_207:\r\n\t\tcase CardIds.MasterOfRealities_BG21_036:\r\n\t\tcase CardIds.MasterOfRealities_BG21_036_G:\r\n\t\tcase CardIds.NomiKitchenNightmare_BGS_104:\r\n\t\tcase CardIds.NomiKitchenNightmare_TB_BaconUps_201:\r\n\t\t\treturn [Race.ELEMENTAL, ...cardRaces];\r\n\t\tcase CardIds.KangorsApprentice_BGS_012:\r\n\t\tcase CardIds.KangorsApprentice_TB_BaconUps_087:\r\n\t\t\treturn [Race.MECH, ...cardRaces];\r\n\t\tcase CardIds.DefiantShipwright_BG21_018:\r\n\t\tcase CardIds.DefiantShipwright_BG21_018_G:\r\n\t\tcase CardIds.TheTideRazor_BGS_079:\r\n\t\tcase CardIds.TheTideRazor_TB_BaconUps_137:\r\n\t\t\treturn [Race.PIRATE, ...cardRaces];\r\n\t\tcase CardIds.AgamagganTheGreatBoar_BG20_205:\r\n\t\tcase CardIds.AgamagganTheGreatBoar_BG20_205_G:\r\n\t\tcase CardIds.ProphetOfTheBoar_BG20_203:\r\n\t\tcase CardIds.ProphetOfTheBoar_BG20_203_G:\r\n\t\t\treturn [Race.QUILBOAR, ...cardRaces];\r\n\t\tcase CardIds.OrgozoaTheTender_BG23_015:\r\n\t\tcase CardIds.OrgozoaTheTender_BG23_015_G:\r\n\t\t\treturn [Race.NAGA, ...cardRaces];\r\n\t\tcase CardIds.DisguisedGraverobber_BG28_303:\r\n\t\tcase CardIds.DisguisedGraverobber_BG28_303_G:\r\n\t\t\treturn [Race.UNDEAD, ...cardRaces];\r\n\t\tdefault:\r\n\t\t\treturn getEffectiveTribesEnum(card);\r\n\t}\r\n};\r\n\r\n// To avoid braking existing imports\r\nexport const getEffectiveTribesEnum = getEffectiveTribesEnumBase;\r\n"]}
@@ -1,6 +1,6 @@
1
1
  import { GameFormatString } from '../enums/game-format';
2
2
  import { ReferenceCard } from '../models/reference-cards/reference-card';
3
- import { CardClass, GameFormat, GameType } from '../public-api';
3
+ import { CardClass, GameFormat, GameType, Race } from '../public-api';
4
4
  import { AllCardsService } from './all-cards.service';
5
5
  export declare const ALL_CLASSES: string[];
6
6
  export declare const formatFormat: (format: GameFormat) => GameFormatString;
@@ -11,3 +11,5 @@ export declare const getDefaultHeroDbfIdForClass: (playerClass: string) => numbe
11
11
  export declare const normalizeDeckHeroDbfId: (heroDbfId: number, cards: AllCardsService, duelsClass?: CardClass, deckClass?: CardClass) => number;
12
12
  export declare const isBattlegroundsCard: (card: ReferenceCard) => boolean;
13
13
  export declare const getEffectiveTechLevel: (card: ReferenceCard, allCards: AllCardsService) => number;
14
+ export declare const hasCorrectTribe: (card: ReferenceCard, targetTribe: Race) => boolean;
15
+ export declare const getEffectiveTribesEnumBase: (card: ReferenceCard) => readonly Race[];
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getEffectiveTechLevel = exports.isBattlegroundsCard = exports.normalizeDeckHeroDbfId = exports.getDefaultHeroDbfIdForClass = exports.formatGameTypeReverse = exports.formatGameType = exports.formatFormatReverse = exports.formatFormat = exports.ALL_CLASSES = void 0;
3
+ exports.getEffectiveTribesEnumBase = exports.hasCorrectTribe = exports.getEffectiveTechLevel = exports.isBattlegroundsCard = exports.normalizeDeckHeroDbfId = exports.getDefaultHeroDbfIdForClass = exports.formatGameTypeReverse = exports.formatGameType = exports.formatFormatReverse = exports.formatFormat = exports.ALL_CLASSES = void 0;
4
4
  const public_api_1 = require("../public-api");
5
5
  exports.ALL_CLASSES = [
6
6
  'deathknight',
@@ -262,4 +262,14 @@ const getEffectiveTechLevel = (card, allCards) => {
262
262
  return 1;
263
263
  };
264
264
  exports.getEffectiveTechLevel = getEffectiveTechLevel;
265
+ const hasCorrectTribe = (card, targetTribe) => {
266
+ const cardTribes = exports.getEffectiveTribesEnumBase(card);
267
+ return cardTribes.includes(targetTribe) || cardTribes.includes(public_api_1.Race.ALL);
268
+ };
269
+ exports.hasCorrectTribe = hasCorrectTribe;
270
+ const getEffectiveTribesEnumBase = (card) => {
271
+ var _a;
272
+ return !!((_a = card.races) === null || _a === void 0 ? void 0 : _a.length) ? card.races.map((r) => public_api_1.Race[r]) : [public_api_1.Race.BLANK];
273
+ };
274
+ exports.getEffectiveTribesEnumBase = getEffectiveTribesEnumBase;
265
275
  //# sourceMappingURL=hs-utils.js.map
@@ -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'demonhunter',\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];\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"]}
1
+ {"version":3,"file":"hs-utils.js","sourceRoot":"","sources":["../../src/services/hs-utils.ts"],"names":[],"mappings":";;;AAEA,8CAAuG;AAG1F,QAAA,WAAW,GAAG;IAC1B,aAAa;IACb,aAAa;IACb,OAAO;IACP,QAAQ;IACR,MAAM;IACN,SAAS;IACT,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,SAAS;IACT,SAAS;CACT,CAAC;AAEK,MAAM,YAAY,GAAG,CAAC,MAAkB,EAAoB,EAAE;IACpE,QAAQ,MAAM,EAAE;QACf,KAAK,uBAAU,CAAC,WAAW;YAC1B,OAAO,UAAU,CAAC;QACnB,KAAK,uBAAU,CAAC,UAAU;YACzB,OAAO,SAAS,CAAC;QAClB,KAAK,uBAAU,CAAC,QAAQ;YACvB,OAAO,OAAO,CAAC;QAChB,KAAK,uBAAU,CAAC,OAAO,CAAC;QACxB;YACC,OAAO,MAAM,CAAC;KACf;AACF,CAAC,CAAC;AAZW,QAAA,YAAY,gBAYvB;AACK,MAAM,mBAAmB,GAAG,CAAC,MAAwB,EAAc,EAAE;IAC3E,QAAQ,MAAM,EAAE;QACf,KAAK,UAAU;YACd,OAAO,uBAAU,CAAC,WAAW,CAAC;QAC/B,KAAK,SAAS;YACb,OAAO,uBAAU,CAAC,UAAU,CAAC;QAC9B,KAAK,OAAO;YACX,OAAO,uBAAU,CAAC,QAAQ,CAAC;QAC5B,KAAK,MAAM,CAAC;QACZ;YACC,OAAO,uBAAU,CAAC,OAAO,CAAC;KAC3B;AACF,CAAC,CAAC;AAZW,QAAA,mBAAmB,uBAY9B;AAEK,MAAM,cAAc,GAAG,CAAC,QAAkB,EAAU,EAAE;IAC5D,QAAQ,QAAQ,EAAE;QACjB,KAAK,qBAAQ,CAAC,UAAU;YACvB,OAAO,SAAS,CAAC;QAClB,KAAK,qBAAQ,CAAC,QAAQ;YACrB,OAAO,UAAU,CAAC;QACnB,KAAK,qBAAQ,CAAC,YAAY;YACzB,OAAO,UAAU,CAAC;QACnB,KAAK,qBAAQ,CAAC,WAAW;YACxB,OAAO,UAAU,CAAC;QACnB,KAAK,qBAAQ,CAAC,QAAQ;YACrB,OAAO,OAAO,CAAC;QAChB,KAAK,qBAAQ,CAAC,SAAS;YACtB,OAAO,QAAQ,CAAC;QACjB,KAAK,qBAAQ,CAAC,SAAS;YACtB,OAAO,QAAQ,CAAC;QACjB,KAAK,qBAAQ,CAAC,cAAc,CAAC;QAC7B,KAAK,qBAAQ,CAAC,cAAc,CAAC;QAC7B,KAAK,qBAAQ,CAAC,aAAa,CAAC;QAC5B,KAAK,qBAAQ,CAAC,sBAAsB,CAAC;QACrC,KAAK,qBAAQ,CAAC,YAAY,CAAC;QAC3B,KAAK,qBAAQ,CAAC,qBAAqB,CAAC;QACpC,KAAK,qBAAQ,CAAC,oBAAoB;YACjC,OAAO,cAAc,CAAC;QACvB,KAAK,qBAAQ,CAAC,gBAAgB,CAAC;QAC/B,KAAK,qBAAQ,CAAC,yBAAyB,CAAC;QACxC,KAAK,qBAAQ,CAAC,yBAAyB,CAAC;QACxC,KAAK,qBAAQ,CAAC,6BAA6B;YAC1C,OAAO,eAAe,CAAC;QACxB,KAAK,qBAAQ,CAAC,oBAAoB,CAAC;QACnC,KAAK,qBAAQ,CAAC,0BAA0B,CAAC;QACzC,KAAK,qBAAQ,CAAC,6BAA6B,CAAC;QAC5C,KAAK,qBAAQ,CAAC,6BAA6B;YAC1C,OAAO,mBAAmB,CAAC;QAC5B,KAAK,qBAAQ,CAAC,uBAAuB;YACpC,OAAO,sBAAsB,CAAC;QAC/B,KAAK,qBAAQ,CAAC,uBAAuB;YACpC,OAAO,sBAAsB,CAAC;QAC/B,KAAK,qBAAQ,CAAC,kBAAkB;YAC/B,OAAO,iBAAiB,CAAC;QAC1B,KAAK,qBAAQ,CAAC,kBAAkB;YAC/B,OAAO,iBAAiB,CAAC;QAC1B,KAAK,qBAAQ,CAAC,uBAAuB;YACpC,OAAO,sBAAsB,CAAC;QAC/B,KAAK,qBAAQ,CAAC,QAAQ;YACrB,OAAO,OAAO,CAAC;QAChB,KAAK,qBAAQ,CAAC,aAAa;YAC1B,OAAO,YAAY,CAAC;QACrB;YACC,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;YAChD,OAAO,SAAS,CAAC;KAClB;AACF,CAAC,CAAC;AApDW,QAAA,cAAc,kBAoDzB;AAEK,MAAM,qBAAqB,GAAG,CAAC,QAAgB,EAAY,EAAE;IACnE,QAAQ,QAAQ,EAAE;QACjB,KAAK,SAAS;YACb,OAAO,qBAAQ,CAAC,UAAU,CAAC;QAC5B,KAAK,UAAU;YACd,OAAO,qBAAQ,CAAC,QAAQ,CAAC;QAC1B,KAAK,UAAU;YACd,OAAO,qBAAQ,CAAC,YAAY,CAAC;QAC9B,KAAK,UAAU;YACd,OAAO,qBAAQ,CAAC,WAAW,CAAC;QAC7B,KAAK,OAAO;YACX,OAAO,qBAAQ,CAAC,QAAQ,CAAC;QAC1B,KAAK,QAAQ;YACZ,OAAO,qBAAQ,CAAC,SAAS,CAAC;QAC3B,KAAK,QAAQ;YACZ,OAAO,qBAAQ,CAAC,SAAS,CAAC;QAC3B,KAAK,cAAc;YAClB,OAAO,qBAAQ,CAAC,cAAc,CAAC;QAChC,KAAK,eAAe;YACnB,OAAO,qBAAQ,CAAC,gBAAgB,CAAC;QAClC,KAAK,mBAAmB;YACvB,OAAO,qBAAQ,CAAC,oBAAoB,CAAC;QACtC,KAAK,sBAAsB;YAC1B,OAAO,qBAAQ,CAAC,uBAAuB,CAAC;QACzC,KAAK,sBAAsB;YAC1B,OAAO,qBAAQ,CAAC,uBAAuB,CAAC;QACzC,KAAK,iBAAiB;YACrB,OAAO,qBAAQ,CAAC,kBAAkB,CAAC;QACpC,KAAK,iBAAiB;YACrB,OAAO,qBAAQ,CAAC,kBAAkB,CAAC;QACpC,KAAK,sBAAsB;YAC1B,OAAO,qBAAQ,CAAC,uBAAuB,CAAC;QACzC,KAAK,OAAO;YACX,OAAO,qBAAQ,CAAC,QAAQ,CAAC;QAC1B,KAAK,YAAY;YAChB,OAAO,qBAAQ,CAAC,aAAa,CAAC;QAC/B;YACC,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;YAChD,OAAO,qBAAQ,CAAC,UAAU,CAAC;KAC5B;AACF,CAAC,CAAC;AAxCW,QAAA,qBAAqB,yBAwChC;AAEK,MAAM,2BAA2B,GAAG,CAAC,WAAmB,EAAU,EAAE;IAC1E,QAAQ,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,WAAW,EAAE,EAAE;QACnC,KAAK,aAAa;YACjB,OAAO,KAAK,CAAC;QACd,KAAK,aAAa;YACjB,OAAO,KAAK,CAAC;QACd,KAAK,OAAO;YACX,OAAO,GAAG,CAAC;QACZ,KAAK,QAAQ;YACZ,OAAO,EAAE,CAAC;QACX,KAAK,MAAM;YACV,OAAO,GAAG,CAAC;QACZ,KAAK,SAAS;YACb,OAAO,GAAG,CAAC;QACZ,KAAK,QAAQ;YACZ,OAAO,GAAG,CAAC;QACZ,KAAK,OAAO;YACX,OAAO,GAAG,CAAC;QACZ,KAAK,QAAQ;YACZ,OAAO,IAAI,CAAC;QACb,KAAK,SAAS;YACb,OAAO,GAAG,CAAC;QACZ,KAAK,SAAS;YACb,OAAO,CAAC,CAAC;QACV;YACC,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,WAAW,CAAC,CAAC;YAC9D,OAAO,CAAC,CAAC;KACV;AACF,CAAC,CAAC;AA5BW,QAAA,2BAA2B,+BA4BtC;AAEK,MAAM,sBAAsB,GAAG,CACrC,SAAiB,EACjB,KAAsB,EACtB,UAAsB,EAEtB,SAAqB,EACZ,EAAE;;IACX,MAAM,iBAAiB,GAAG,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAE5D,QAAQ,iBAAiB,CAAC,EAAE,EAAE;QAE7B;YACC,QAAQ,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,SAAS,EAAE;gBAChC,KAAK,sBAAS,CAAC,WAAW;oBACzB,OAAO,KAAK,CAAC,OAAO,wBAA2E;yBAC7F,KAAK,CAAC;gBACT,KAAK,sBAAS,CAAC,MAAM;oBACpB,OAAO,KAAK,CAAC,OAAO,wBAA2E;yBAC7F,KAAK,CAAC;gBACT,KAAK,sBAAS,CAAC,OAAO;oBACrB,OAAO,KAAK,CAAC,OAAO,wBAA2E;yBAC7F,KAAK,CAAC;gBACT,KAAK,sBAAS,CAAC,MAAM;oBACpB,OAAO,KAAK,CAAC,OAAO,wBAA2E;yBAC7F,KAAK,CAAC;gBACT,KAAK,sBAAS,CAAC,KAAK;oBACnB,OAAO,KAAK,CAAC,OAAO,wBAA2E;yBAC7F,KAAK,CAAC;aACT;YACD,MAAM;QACP;YACC,QAAQ,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,SAAS,EAAE;gBAChC,KAAK,sBAAS,CAAC,KAAK;oBACnB,OAAO,KAAK,CAAC,OAAO,yBAA4D,CAAC,KAAK,CAAC;gBACxF,KAAK,sBAAS,CAAC,IAAI;oBAClB,OAAO,KAAK,CAAC,OAAO,yBAA4D,CAAC,KAAK,CAAC;gBACxF,KAAK,sBAAS,CAAC,MAAM;oBACpB,OAAO,KAAK,CAAC,OAAO,yBAA4D,CAAC,KAAK,CAAC;gBACxF,KAAK,sBAAS,CAAC,OAAO;oBACrB,OAAO,KAAK,CAAC,OAAO,yBAA4D,CAAC,KAAK,CAAC;gBACxF,KAAK,sBAAS,CAAC,OAAO;oBACrB,OAAO,KAAK,CAAC,OAAO,yBAA4D,CAAC,KAAK,CAAC;aACxF;YACD,MAAM;KACP;IAGD,IAAI,UAAU,IAAI,mCAAsB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAa,CAAC,EAAE;QACnF,OAAO,SAAS,CAAC;KACjB;IAED,MAAM,WAAW,GAAc,sBAAS,CAAC,MAAA,MAAA,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,0CAAE,WAAW,0CAAE,WAAW,EAAE,CAAC,CAAC;IAE/F,IAAI,CAAC,WAAW,EAAE;QACjB,OAAO,SAAS,CAAC;KACjB;IAGD,QAAQ,WAAW,EAAE;QACpB,KAAK,sBAAS,CAAC,WAAW;YACzB,OAAO,KAAK,CAAC;QACd,KAAK,sBAAS,CAAC,WAAW;YACzB,OAAO,KAAK,CAAC;QACd,KAAK,sBAAS,CAAC,KAAK;YACnB,OAAO,GAAG,CAAC;QACZ,KAAK,sBAAS,CAAC,MAAM;YACpB,OAAO,EAAE,CAAC;QACX,KAAK,sBAAS,CAAC,IAAI;YAClB,OAAO,GAAG,CAAC;QACZ,KAAK,sBAAS,CAAC,OAAO;YACrB,OAAO,GAAG,CAAC;QACZ,KAAK,sBAAS,CAAC,MAAM;YACpB,OAAO,GAAG,CAAC;QACZ,KAAK,sBAAS,CAAC,KAAK;YACnB,OAAO,GAAG,CAAC;QACZ,KAAK,sBAAS,CAAC,MAAM;YACpB,OAAO,IAAI,CAAC;QACb,KAAK,sBAAS,CAAC,OAAO;YACrB,OAAO,GAAG,CAAC;QACZ,KAAK,sBAAS,CAAC,OAAO;YACrB,OAAO,CAAC,CAAC;QACV;YAEC,OAAO,SAAS,CAAC;KAClB;AACF,CAAC,CAAC;AArFW,QAAA,sBAAsB,0BAqFjC;AAEK,MAAM,mBAAmB,GAAG,CAAC,IAAmB,EAAW,EAAE;IACnE,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC;AAChG,CAAC,CAAC;AAFW,QAAA,mBAAmB,uBAE9B;AAEK,MAAM,qBAAqB,GAAG,CAAC,IAAmB,EAAE,QAAyB,EAAU,EAAE;;IAC/F,IAAI,IAAI,CAAC,SAAS,EAAE;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC;KACtB;IAED,IAAI,IAAI,CAAC,wBAAwB,EAAE;QAClC,MAAM,UAAU,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC5E,OAAO,MAAA,UAAU,CAAC,SAAS,mCAAI,CAAC,CAAC;KACjC;IAED,IAAI,IAAI,CAAC,yBAAyB,EAAE;QACnC,MAAM,WAAW,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC9E,OAAO,MAAA,WAAW,CAAC,SAAS,mCAAI,CAAC,CAAC;KAClC;IAED,OAAO,CAAC,CAAC;AACV,CAAC,CAAC;AAhBW,QAAA,qBAAqB,yBAgBhC;AAEK,MAAM,eAAe,GAAG,CAAC,IAAmB,EAAE,WAAiB,EAAW,EAAE;IAClF,MAAM,UAAU,GAAG,kCAA0B,CAAC,IAAI,CAAC,CAAC;IACpD,OAAO,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,iBAAI,CAAC,GAAG,CAAC,CAAC;AAC1E,CAAC,CAAC;AAHW,QAAA,eAAe,mBAG1B;AAEK,MAAM,0BAA0B,GAAG,CAAC,IAAmB,EAAmB,EAAE;;IAClF,OAAO,CAAC,CAAC,CAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,MAAM,CAAA,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAI,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC,CAAC;AAFW,QAAA,0BAA0B,8BAErC","sourcesContent":["import { GameFormatString } from '../enums/game-format';\r\nimport { ReferenceCard } from '../models/reference-cards/reference-card';\r\nimport { CardClass, CardIds, GameFormat, GameType, Race, 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'demonhunter',\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];\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\r\nexport const hasCorrectTribe = (card: ReferenceCard, targetTribe: Race): boolean => {\r\n\tconst cardTribes = getEffectiveTribesEnumBase(card);\r\n\treturn cardTribes.includes(targetTribe) || cardTribes.includes(Race.ALL);\r\n};\r\n\r\nexport const getEffectiveTribesEnumBase = (card: ReferenceCard): readonly Race[] => {\r\n\treturn !!card.races?.length ? card.races.map((r) => Race[r]) : [Race.BLANK];\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.74",
3
+ "version": "2.0.75",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "build": "rm -rf dist && tsc",