@firestone-hs/simulate-bgs-battle 1.1.430 → 1.1.431

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.
@@ -224,8 +224,7 @@ class Spectator {
224
224
  if (!spawnedEntities || spawnedEntities.length === 0) {
225
225
  return;
226
226
  }
227
- if (!sourceEntity.entityId) {
228
- console.error('missing spawn source entity id', sourceEntity);
227
+ if (!(sourceEntity === null || sourceEntity === void 0 ? void 0 : sourceEntity.entityId)) {
229
228
  }
230
229
  const friendlyBoard = boardOnWhichToSpawn.every((entity) => entity.friendly) ? boardOnWhichToSpawn : null;
231
230
  const opponentBoard = boardOnWhichToSpawn.every((entity) => !entity.friendly) ? boardOnWhichToSpawn : null;
@@ -1 +1 @@
1
- {"version":3,"file":"spectator.js","sourceRoot":"","sources":["../../../src/simulation/spectator/spectator.ts"],"names":[],"mappings":"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","sourcesContent":["import { BgsPlayerEntity } from 'src/bgs-player-entity';\r\nimport { BgsBattleInfo } from '../../bgs-battle-info';\r\nimport { BoardEntity } from '../../board-entity';\r\nimport { BoardSecret } from '../../board-secret';\r\nimport { GameAction } from './game-action';\r\nimport { GameSample } from './game-sample';\r\n\r\nconst MAX_SAMPLES = 1;\r\n\r\nexport class Spectator {\r\n\tprivate actionsForCurrentBattle: GameAction[];\r\n\tprivate wonBattles: GameSample[];\r\n\tprivate tiedBattles: GameSample[];\r\n\tprivate lostBattles: GameSample[];\r\n\r\n\tprivate readonly playerCardId?: string;\r\n\tprivate readonly playerHeroPowerCardId: string;\r\n\tprivate readonly playerHeroPowerUsed: boolean;\r\n\t// private readonly playerRewardCardId: string;\r\n\t// private readonly playerRewardData: number;\r\n\tprivate readonly opponentCardId: string;\r\n\tprivate readonly opponentHeroPowerCardId: string;\r\n\tprivate readonly opponentHeroPowerUsed: boolean;\r\n\t// private readonly opponentRewardCardId: string;\r\n\t// private readonly opponentRewardData: number;\r\n\r\n\tconstructor(battleInput: BgsBattleInfo) {\r\n\t\tthis.playerCardId = battleInput.playerBoard.player.cardId;\r\n\t\tthis.playerHeroPowerCardId = battleInput.playerBoard.player.heroPowerId;\r\n\t\tthis.playerHeroPowerUsed = battleInput.playerBoard.player.heroPowerUsed;\r\n\t\tthis.opponentCardId = battleInput.opponentBoard.player.cardId;\r\n\t\tthis.opponentHeroPowerCardId = battleInput.opponentBoard.player.heroPowerId;\r\n\t\tthis.opponentHeroPowerUsed = battleInput.opponentBoard.player.heroPowerUsed;\r\n\r\n\t\tthis.actionsForCurrentBattle = [];\r\n\t\tthis.wonBattles = [];\r\n\t\tthis.tiedBattles = [];\r\n\t\tthis.lostBattles = [];\r\n\t}\r\n\r\n\tpublic prune(): void {\r\n\t\tthis.wonBattles = this.wonBattles.slice(0, MAX_SAMPLES);\r\n\t\tthis.lostBattles = this.lostBattles.slice(0, MAX_SAMPLES);\r\n\t\tthis.tiedBattles = this.tiedBattles.slice(0, MAX_SAMPLES);\r\n\t}\r\n\r\n\tpublic buildOutcomeSamples(): {\r\n\t\twon: readonly GameSample[];\r\n\t\tlost: readonly GameSample[];\r\n\t\ttied: readonly GameSample[];\r\n\t} {\r\n\t\treturn {\r\n\t\t\twon: this.wonBattles?.map((battle) => this.cleanUpActions(battle)),\r\n\t\t\tlost: this.lostBattles?.map((battle) => this.cleanUpActions(battle)),\r\n\t\t\ttied: this.tiedBattles?.map((battle) => this.cleanUpActions(battle)),\r\n\t\t};\r\n\t}\r\n\r\n\tprivate cleanUpActions(battle: GameSample): GameSample {\r\n\t\tconst collapsed = this.collapseActions(battle.actions);\r\n\t\tconst result: GameSample = {\r\n\t\t\t...battle,\r\n\t\t\tactions: collapsed,\r\n\t\t};\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic commitBattleResult(result: 'won' | 'lost' | 'tied'): void {\r\n\t\tif (\r\n\t\t\tthis.wonBattles.length >= MAX_SAMPLES &&\r\n\t\t\tthis.lostBattles.length >= MAX_SAMPLES &&\r\n\t\t\tthis.tiedBattles.length >= MAX_SAMPLES\r\n\t\t) {\r\n\t\t\tthis.actionsForCurrentBattle = [];\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// const actionsForBattle = this.collapseActions(this.actionsForCurrentBattle);\r\n\t\tconst actionsForBattle = this.actionsForCurrentBattle;\r\n\t\tthis.actionsForCurrentBattle = [];\r\n\r\n\t\tconst battle: GameSample = {\r\n\t\t\tactions: actionsForBattle,\r\n\t\t\tplayerCardId: this.playerCardId,\r\n\t\t\tplayerHeroPowerCardId: this.playerHeroPowerCardId,\r\n\t\t\tplayerHeroPowerUsed: this.playerHeroPowerUsed,\r\n\t\t\t// playerRewardCardId: this.playerRewardCardId,\r\n\t\t\t// playerRewardData: this.playerRewardData,\r\n\t\t\topponentCardId: this.opponentCardId,\r\n\t\t\topponentHeroPowerCardId: this.opponentHeroPowerCardId,\r\n\t\t\topponentHeroPowerUsed: this.opponentHeroPowerUsed,\r\n\t\t\t// opponentRewardCardId: this.opponentRewardCardId,\r\n\t\t\t// opponentRewardData: this.opponentRewardData,\r\n\t\t};\r\n\t\tswitch (result) {\r\n\t\t\tcase 'won':\r\n\t\t\t\tthis.wonBattles.push(battle);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'lost':\r\n\t\t\t\tthis.lostBattles.push(battle);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'tied':\r\n\t\t\t\tthis.tiedBattles.push(battle);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic registerAttack(\r\n\t\tattackingEntity: BoardEntity,\r\n\t\tdefendingEntity: BoardEntity,\r\n\t\tattackingBoard: readonly BoardEntity[],\r\n\t\tdefendingBoard: readonly BoardEntity[],\r\n\t\tattackingBoardHero: BgsPlayerEntity,\r\n\t\tdefendingBoardHero: BgsPlayerEntity,\r\n\t): void {\r\n\t\t// console.debug(\r\n\t\t// \t'\\n register attack',\r\n\t\t// \tstringifySimple(attackingBoard),\r\n\t\t// \t'\\n',\r\n\t\t// \tstringifySimple(defendingBoard),\r\n\t\t// \t'\\n',\r\n\t\t// \tattackingBoard.find((e) => e.entityId === 2441),\r\n\t\t// \t'\\n',\r\n\t\t// \tattackingBoard.find((e) => e.entityId === 2442),\r\n\t\t// );\r\n\t\tconst isAttackerFriendly = attackingBoard.every((entity) => entity.friendly);\r\n\t\tconst friendlyBoard = isAttackerFriendly ? attackingBoard : defendingBoard;\r\n\t\tconst opponentBoard = isAttackerFriendly ? defendingBoard : attackingBoard;\r\n\t\tconst playerSecrets = isAttackerFriendly ? attackingBoardHero.secrets : defendingBoardHero.secrets;\r\n\t\tconst opponentSecrets = isAttackerFriendly ? defendingBoardHero.secrets : attackingBoardHero.secrets;\r\n\t\tconst playerHero = isAttackerFriendly ? attackingBoardHero : defendingBoardHero;\r\n\t\tconst opponentHero = isAttackerFriendly ? defendingBoardHero : attackingBoardHero;\r\n\t\tconst action: GameAction = {\r\n\t\t\ttype: 'attack',\r\n\t\t\tsourceEntityId: attackingEntity.entityId,\r\n\t\t\ttargetEntityId: defendingEntity.entityId,\r\n\t\t\tplayerBoard: this.sanitize(friendlyBoard),\r\n\t\t\tplayerHand: this.sanitize(playerHero.hand),\r\n\t\t\topponentBoard: this.sanitize(opponentBoard),\r\n\t\t\topponentHand: this.sanitize(opponentHero.hand),\r\n\t\t\tplayerSecrets: (playerSecrets ?? []).filter((s) => !s.triggered),\r\n\t\t\topponentSecrets: (opponentSecrets ?? []).filter((s) => !s.triggered),\r\n\r\n\t\t\tplayerRewardCardId: playerHero?.questRewardEntities?.[0]?.cardId ?? playerHero?.questRewards?.[0],\r\n\t\t\tplayerRewardEntityId: playerHero?.questRewardEntities?.[0]?.entityId,\r\n\t\t\tplayerRewardData: playerHero?.questRewardEntities?.[0]?.scriptDataNum1,\r\n\t\t\topponentRewardCardId: opponentHero?.questRewardEntities?.[0]?.cardId ?? opponentHero?.questRewards?.[0],\r\n\t\t\topponentRewardEntityId: opponentHero?.questRewardEntities?.[0]?.entityId,\r\n\t\t\topponentRewardData: opponentHero?.questRewardEntities?.[0]?.scriptDataNum1,\r\n\t\t};\r\n\t\tthis.addAction(action);\r\n\t}\r\n\r\n\tpublic registerStartOfCombat(\r\n\t\tfriendlyBoard: readonly BoardEntity[],\r\n\t\topponentBoard: readonly BoardEntity[],\r\n\t\tfriendlyHero: BgsPlayerEntity,\r\n\t\topponentHero: BgsPlayerEntity,\r\n\t): void {\r\n\t\tconst playerSecrets = friendlyHero.secrets;\r\n\t\tconst opponentSecrets = opponentHero.secrets;\r\n\t\tconst action: GameAction = {\r\n\t\t\ttype: 'start-of-combat',\r\n\t\t\tplayerBoard: this.sanitize(friendlyBoard),\r\n\t\t\topponentBoard: this.sanitize(opponentBoard),\r\n\t\t\tplayerHand: this.sanitize(friendlyHero.hand),\r\n\t\t\topponentHand: this.sanitize(opponentHero.hand),\r\n\t\t\tplayerSecrets: playerSecrets ?? [],\r\n\t\t\topponentSecrets: opponentSecrets ?? [],\r\n\t\t\tplayerRewardCardId: friendlyHero.questRewardEntities?.[0]?.cardId ?? friendlyHero.questRewards?.[0],\r\n\t\t\tplayerRewardEntityId: friendlyHero.questRewardEntities?.[0]?.entityId,\r\n\t\t\tplayerRewardData: friendlyHero.questRewardEntities?.[0]?.scriptDataNum1,\r\n\t\t\topponentRewardCardId: opponentHero.questRewardEntities?.[0]?.cardId ?? opponentHero.questRewards?.[0],\r\n\t\t\topponentRewardEntityId: opponentHero.questRewardEntities?.[0]?.entityId,\r\n\t\t\topponentRewardData: opponentHero.questRewardEntities?.[0]?.scriptDataNum1,\r\n\t\t};\r\n\t\tthis.addAction(action);\r\n\t}\r\n\r\n\tpublic registerPlayerAttack(\r\n\t\tfriendlyBoard: readonly BoardEntity[],\r\n\t\topponentBoard: readonly BoardEntity[],\r\n\t\tdamage: number,\r\n\t): void {\r\n\t\tconst action: GameAction = {\r\n\t\t\ttype: 'player-attack',\r\n\t\t\tplayerBoard: this.sanitize(friendlyBoard),\r\n\t\t\topponentBoard: this.sanitize(opponentBoard),\r\n\t\t\tplayerHand: null,\r\n\t\t\topponentHand: null,\r\n\t\t\tplayerSecrets: null,\r\n\t\t\topponentSecrets: null,\r\n\t\t\tplayerRewardCardId: null,\r\n\t\t\tplayerRewardEntityId: null,\r\n\t\t\tplayerRewardData: null,\r\n\t\t\topponentRewardCardId: null,\r\n\t\t\topponentRewardEntityId: null,\r\n\t\t\topponentRewardData: null,\r\n\t\t\tdamages: [\r\n\t\t\t\t{\r\n\t\t\t\t\tdamage: damage,\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\t\tthis.addAction(action);\r\n\t}\r\n\r\n\tpublic registerOpponentAttack(\r\n\t\tfriendlyBoard: readonly BoardEntity[],\r\n\t\topponentBoard: readonly BoardEntity[],\r\n\t\tdamage: number,\r\n\t): void {\r\n\t\tconst action: GameAction = {\r\n\t\t\ttype: 'opponent-attack',\r\n\t\t\tplayerBoard: this.sanitize(friendlyBoard),\r\n\t\t\topponentBoard: this.sanitize(opponentBoard),\r\n\t\t\tplayerHand: null,\r\n\t\t\topponentHand: null,\r\n\t\t\tplayerSecrets: null,\r\n\t\t\topponentSecrets: null,\r\n\t\t\tplayerRewardCardId: null,\r\n\t\t\tplayerRewardEntityId: null,\r\n\t\t\tplayerRewardData: null,\r\n\t\t\topponentRewardCardId: null,\r\n\t\t\topponentRewardEntityId: null,\r\n\t\t\topponentRewardData: null,\r\n\t\t\tdamages: [\r\n\t\t\t\t{\r\n\t\t\t\t\tdamage: damage,\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\t\tthis.addAction(action);\r\n\t}\r\n\r\n\tpublic registerDamageDealt(\r\n\t\tdamagingEntity: BoardEntity,\r\n\t\tdamagedEntity: BoardEntity,\r\n\t\tdamageTaken: number,\r\n\t\tdamagedEntityBoard: BoardEntity[],\r\n\t): void {\r\n\t\tif (!damagingEntity.entityId) {\r\n\t\t\t// console.error('missing damaging entity id', damagingEntity.cardId);\r\n\t\t}\r\n\t\tconst friendlyBoard = damagedEntityBoard.every((entity) => entity.friendly) ? damagedEntityBoard : null;\r\n\t\tconst opponentBoard = damagedEntityBoard.every((entity) => !entity.friendly) ? damagedEntityBoard : null;\r\n\t\tconst action: GameAction = {\r\n\t\t\ttype: 'damage',\r\n\t\t\tdamages: [\r\n\t\t\t\t{\r\n\t\t\t\t\tsourceEntityId: damagingEntity.entityId,\r\n\t\t\t\t\ttargetEntityId: damagedEntity.entityId,\r\n\t\t\t\t\tdamage: damageTaken,\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t\tplayerBoard: this.sanitize(friendlyBoard),\r\n\t\t\topponentBoard: this.sanitize(opponentBoard),\r\n\t\t\tplayerHand: null,\r\n\t\t\topponentHand: null,\r\n\t\t\tplayerSecrets: null,\r\n\t\t\topponentSecrets: null,\r\n\t\t\tplayerRewardCardId: null,\r\n\t\t\tplayerRewardEntityId: null,\r\n\t\t\tplayerRewardData: null,\r\n\t\t\topponentRewardCardId: null,\r\n\t\t\topponentRewardEntityId: null,\r\n\t\t\topponentRewardData: null,\r\n\t\t};\r\n\t\tthis.addAction(action);\r\n\t}\r\n\r\n\tpublic registerPowerTarget(\r\n\t\tsourceEntity: BoardEntity | BgsPlayerEntity | BoardSecret,\r\n\t\ttargetEntity: BoardEntity | BgsPlayerEntity,\r\n\t\ttargetBoard: BoardEntity[],\r\n\t\thero1: BgsPlayerEntity,\r\n\t\thero2: BgsPlayerEntity,\r\n\t): void {\r\n\t\tif (!targetEntity) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (!sourceEntity.entityId && !(sourceEntity as BgsPlayerEntity).heroPowerId) {\r\n\t\t\t// console.error('missing damaging entity id', sourceEntity.cardId);\r\n\t\t}\r\n\t\t// console.log('registerPowerTarget', stringifySimpleCard(sourceEntity), stringifySimpleCard(targetEntity), new Error().stack);\r\n\t\tconst friendlyBoard = targetBoard?.every((entity) => entity.friendly) ? targetBoard : null;\r\n\t\tconst opponentBoard = targetBoard?.every((entity) => !entity.friendly) ? targetBoard : null;\r\n\t\tconst friendlyHero = hero1?.friendly ? hero1 : hero2?.friendly ? hero2 : null;\r\n\t\tconst opponentHero = hero1?.friendly ? hero2 : hero2?.friendly ? hero1 : null;\r\n\t\tconst action: GameAction = {\r\n\t\t\ttype: 'power-target',\r\n\t\t\tsourceEntityId: sourceEntity.entityId,\r\n\t\t\ttargetEntityId: targetEntity.entityId,\r\n\t\t\tplayerBoard: this.sanitize(friendlyBoard),\r\n\t\t\topponentBoard: this.sanitize(opponentBoard),\r\n\t\t\tplayerHand: this.sanitize(friendlyHero?.hand),\r\n\t\t\topponentHand: this.sanitize(opponentHero?.hand),\r\n\t\t\tplayerSecrets: (friendlyHero?.secrets ?? []).filter((s) => !s.triggered),\r\n\t\t\topponentSecrets: (opponentHero?.secrets ?? []).filter((s) => !s.triggered),\r\n\t\t\tplayerRewardCardId: friendlyHero?.questRewardEntities?.[0]?.cardId ?? friendlyHero?.questRewards?.[0],\r\n\t\t\tplayerRewardEntityId: friendlyHero?.questRewardEntities?.[0]?.entityId,\r\n\t\t\tplayerRewardData: friendlyHero?.questRewardEntities?.[0]?.scriptDataNum1,\r\n\t\t\topponentRewardCardId: opponentHero?.questRewardEntities?.[0]?.cardId ?? opponentHero?.questRewards?.[0],\r\n\t\t\topponentRewardEntityId: opponentHero?.questRewardEntities?.[0]?.entityId,\r\n\t\t\topponentRewardData: opponentHero?.questRewardEntities?.[0]?.scriptDataNum1,\r\n\t\t};\r\n\t\tthis.addAction(action);\r\n\t}\r\n\r\n\tpublic registerMinionsSpawn(\r\n\t\tsourceEntity: BoardEntity | BgsPlayerEntity,\r\n\t\tboardOnWhichToSpawn: BoardEntity[],\r\n\t\tspawnedEntities: readonly BoardEntity[],\r\n\t): void {\r\n\t\tif (!spawnedEntities || spawnedEntities.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!sourceEntity.entityId) {\r\n\t\t\tconsole.error('missing spawn source entity id', sourceEntity);\r\n\t\t}\r\n\t\tconst friendlyBoard = boardOnWhichToSpawn.every((entity) => entity.friendly) ? boardOnWhichToSpawn : null;\r\n\t\tconst opponentBoard = boardOnWhichToSpawn.every((entity) => !entity.friendly) ? boardOnWhichToSpawn : null;\r\n\t\tconst action: GameAction = {\r\n\t\t\ttype: 'spawn',\r\n\t\t\tspawns: this.sanitize(spawnedEntities),\r\n\t\t\tsourceEntityId: sourceEntity?.entityId,\r\n\t\t\tplayerBoard: this.sanitize(friendlyBoard),\r\n\t\t\topponentBoard: this.sanitize(opponentBoard),\r\n\t\t\tplayerHand: null,\r\n\t\t\topponentHand: null,\r\n\t\t\tplayerSecrets: null,\r\n\t\t\topponentSecrets: null,\r\n\t\t\tplayerRewardCardId: null,\r\n\t\t\tplayerRewardEntityId: null,\r\n\t\t\tplayerRewardData: null,\r\n\t\t\topponentRewardCardId: null,\r\n\t\t\topponentRewardEntityId: null,\r\n\t\t\topponentRewardData: null,\r\n\t\t};\r\n\t\tthis.addAction(action);\r\n\t}\r\n\r\n\tpublic registerDeadEntities(\r\n\t\tdeadMinionIndexes1: number[],\r\n\t\tdeadEntities1: BoardEntity[],\r\n\t\tboard1: BoardEntity[],\r\n\t\tdeadMinionIndexes2: number[],\r\n\t\tdeadEntities2: BoardEntity[],\r\n\t\tboard2: BoardEntity[],\r\n\t): void {\r\n\t\tconst deaths = [...(deadEntities1 || []), ...(deadEntities2 || [])];\r\n\t\tif (!deaths || deaths.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst action: GameAction = {\r\n\t\t\ttype: 'minion-death',\r\n\t\t\tdeaths: this.sanitize(deaths),\r\n\t\t\tdeadMinionsPositionsOnBoard: [\r\n\t\t\t\t...(deadMinionIndexes1 || []).map((i) => board1.length - i),\r\n\t\t\t\t...(deadMinionIndexes2 || []).map((i) => board2.length - i),\r\n\t\t\t],\r\n\t\t\tplayerBoard: undefined,\r\n\t\t\topponentBoard: undefined,\r\n\t\t\tplayerHand: null,\r\n\t\t\topponentHand: null,\r\n\t\t\tplayerSecrets: null,\r\n\t\t\topponentSecrets: null,\r\n\t\t\tplayerRewardCardId: null,\r\n\t\t\tplayerRewardEntityId: null,\r\n\t\t\tplayerRewardData: null,\r\n\t\t\topponentRewardCardId: null,\r\n\t\t\topponentRewardEntityId: null,\r\n\t\t\topponentRewardData: null,\r\n\t\t};\r\n\t\tthis.addAction(action);\r\n\t}\r\n\r\n\tprivate addAction(action: GameAction) {\r\n\t\tthis.actionsForCurrentBattle.push(action);\r\n\t}\r\n\r\n\tprivate collapseActions(actions: readonly GameAction[]): readonly GameAction[] {\r\n\t\tif (!actions || actions.length === 0) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\tconst result: GameAction[] = [];\r\n\t\tfor (let i = 0; i < actions.length; i++) {\r\n\t\t\tconst action: GameAction = {\r\n\t\t\t\t...actions[i],\r\n\t\t\t\tplayerBoard: this.sanitize(actions[i].playerBoard),\r\n\t\t\t\topponentBoard: this.sanitize(actions[i].opponentBoard),\r\n\t\t\t\tplayerHand: this.sanitize(actions[i].playerHand),\r\n\t\t\t\topponentHand: this.sanitize(actions[i].opponentHand),\r\n\t\t\t\t// spawns: this.sanitize(actions[i].spawns),\r\n\t\t\t\tdeaths: this.sanitize(actions[i].deaths),\r\n\t\t\t};\r\n\t\t\t// action.playerBoard && console.debug('\\naction playerboard', stringifySimple(action.playerBoard));\r\n\t\t\tconst lastAction = result.length > 0 ? result[result.length - 1] : null;\r\n\r\n\t\t\tif (lastAction && !action.playerBoard) {\r\n\t\t\t\taction.playerBoard = lastAction.playerBoard;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.opponentBoard) {\r\n\t\t\t\taction.opponentBoard = lastAction.opponentBoard;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.playerHand) {\r\n\t\t\t\taction.playerHand = lastAction.playerHand;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.opponentHand) {\r\n\t\t\t\taction.opponentHand = lastAction.opponentHand;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.playerSecrets) {\r\n\t\t\t\taction.playerSecrets = lastAction.playerSecrets;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.opponentSecrets) {\r\n\t\t\t\taction.opponentSecrets = lastAction.opponentSecrets;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.playerRewardCardId) {\r\n\t\t\t\taction.playerRewardCardId = lastAction.playerRewardCardId;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.playerRewardEntityId) {\r\n\t\t\t\taction.playerRewardEntityId = lastAction.playerRewardEntityId;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.playerRewardData) {\r\n\t\t\t\taction.playerRewardData = lastAction.playerRewardData;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.opponentRewardCardId) {\r\n\t\t\t\taction.opponentRewardCardId = lastAction.opponentRewardCardId;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.opponentRewardEntityId) {\r\n\t\t\t\taction.opponentRewardEntityId = lastAction.opponentRewardEntityId;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.opponentRewardData) {\r\n\t\t\t\taction.opponentRewardData = lastAction.opponentRewardData;\r\n\t\t\t}\r\n\r\n\t\t\tif (lastAction && action.type === 'damage' && lastAction.type === 'attack') {\r\n\t\t\t\tlastAction.damages = lastAction.damages || [];\r\n\t\t\t\tlastAction.damages.push({\r\n\t\t\t\t\tdamage: action.damages[0].damage,\r\n\t\t\t\t\tsourceEntityId: action.damages[0].sourceEntityId,\r\n\t\t\t\t\ttargetEntityId: action.damages[0].targetEntityId,\r\n\t\t\t\t});\r\n\t\t\t\tlastAction.playerBoard = action.playerBoard;\r\n\t\t\t\tlastAction.opponentBoard = action.opponentBoard;\r\n\t\t\t\tlastAction.playerHand = action.playerHand;\r\n\t\t\t\tlastAction.opponentHand = action.opponentHand;\r\n\t\t\t\tlastAction.playerSecrets = action.playerSecrets;\r\n\t\t\t\tlastAction.opponentSecrets = action.opponentSecrets;\r\n\t\t\t} else if (lastAction && action.type === 'damage' && lastAction.type === 'damage') {\r\n\t\t\t\tlastAction.damages = lastAction.damages || [];\r\n\t\t\t\tlastAction.damages.push({\r\n\t\t\t\t\tdamage: action.damages[0].damage,\r\n\t\t\t\t\tsourceEntityId: action.damages[0].sourceEntityId,\r\n\t\t\t\t\ttargetEntityId: action.damages[0].targetEntityId,\r\n\t\t\t\t});\r\n\t\t\t\tlastAction.playerBoard = action.playerBoard;\r\n\t\t\t\tlastAction.opponentBoard = action.opponentBoard;\r\n\t\t\t\tlastAction.playerHand = action.playerHand;\r\n\t\t\t\tlastAction.opponentHand = action.opponentHand;\r\n\t\t\t\tlastAction.playerSecrets = action.playerSecrets;\r\n\t\t\t\tlastAction.opponentSecrets = action.opponentSecrets;\r\n\t\t\t} else if (\r\n\t\t\t\tlastAction &&\r\n\t\t\t\taction.type === 'power-target' &&\r\n\t\t\t\tlastAction.type === 'power-target' &&\r\n\t\t\t\taction.sourceEntityId === lastAction.sourceEntityId\r\n\t\t\t) {\r\n\t\t\t\tlastAction.targetEntityIds =\r\n\t\t\t\t\tlastAction.targetEntityIds ?? (lastAction.targetEntityId ? [lastAction.targetEntityId] : []);\r\n\t\t\t\taction.targetEntityIds =\r\n\t\t\t\t\taction.targetEntityIds ?? (action.targetEntityId ? [action.targetEntityId] : []);\r\n\t\t\t\tlastAction.targetEntityIds.push(...action.targetEntityIds);\r\n\t\t\t\t// So that when multiple Leapfroggers enchantments target the same minion,\r\n\t\t\t\t// we can count them in the replay viewer's text\r\n\t\t\t\t// lastAction.targetEntityIds = [...new Set(lastAction.targetEntityIds)];\r\n\t\t\t\tlastAction.playerBoard = action.playerBoard;\r\n\t\t\t\tlastAction.opponentBoard = action.opponentBoard;\r\n\t\t\t\tlastAction.playerHand = action.playerHand;\r\n\t\t\t\tlastAction.opponentHand = action.opponentHand;\r\n\t\t\t\tlastAction.playerSecrets = action.playerSecrets;\r\n\t\t\t\tlastAction.opponentSecrets = action.opponentSecrets;\r\n\t\t\t} else {\r\n\t\t\t\tresult.push(action);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t// Calling sanitize every time before we add an action to the list is mandatory, since\r\n\t// the entities and boards are mutable\r\n\tprivate sanitize(board: readonly BoardEntity[]): readonly BoardEntity[] {\r\n\t\tif (!board) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\t\treturn board.map(\r\n\t\t\t(entity) =>\r\n\t\t\t\t({\r\n\t\t\t\t\tentityId: entity.entityId,\r\n\t\t\t\t\tcardId: entity.cardId,\r\n\t\t\t\t\tfriendly: entity.friendly,\r\n\t\t\t\t\tattack: entity.attack,\r\n\t\t\t\t\thealth: entity.health,\r\n\t\t\t\t\tmaxHealth: entity.maxHealth,\r\n\t\t\t\t\ttaunt: entity.taunt,\r\n\t\t\t\t\tdivineShield: entity.divineShield,\r\n\t\t\t\t\tpoisonous: entity.poisonous,\r\n\t\t\t\t\tvenomous: entity.venomous,\r\n\t\t\t\t\treborn: entity.reborn,\r\n\t\t\t\t\twindfury: entity.windfury,\r\n\t\t\t\t\tstealth: entity.stealth,\r\n\t\t\t\t} as BoardEntity),\r\n\t\t);\r\n\t}\r\n}\r\n"]}
1
+ {"version":3,"file":"spectator.js","sourceRoot":"","sources":["../../../src/simulation/spectator/spectator.ts"],"names":[],"mappings":"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","sourcesContent":["import { BgsPlayerEntity } from 'src/bgs-player-entity';\r\nimport { BgsBattleInfo } from '../../bgs-battle-info';\r\nimport { BoardEntity } from '../../board-entity';\r\nimport { BoardSecret } from '../../board-secret';\r\nimport { GameAction } from './game-action';\r\nimport { GameSample } from './game-sample';\r\n\r\nconst MAX_SAMPLES = 1;\r\n\r\nexport class Spectator {\r\n\tprivate actionsForCurrentBattle: GameAction[];\r\n\tprivate wonBattles: GameSample[];\r\n\tprivate tiedBattles: GameSample[];\r\n\tprivate lostBattles: GameSample[];\r\n\r\n\tprivate readonly playerCardId?: string;\r\n\tprivate readonly playerHeroPowerCardId: string;\r\n\tprivate readonly playerHeroPowerUsed: boolean;\r\n\t// private readonly playerRewardCardId: string;\r\n\t// private readonly playerRewardData: number;\r\n\tprivate readonly opponentCardId: string;\r\n\tprivate readonly opponentHeroPowerCardId: string;\r\n\tprivate readonly opponentHeroPowerUsed: boolean;\r\n\t// private readonly opponentRewardCardId: string;\r\n\t// private readonly opponentRewardData: number;\r\n\r\n\tconstructor(battleInput: BgsBattleInfo) {\r\n\t\tthis.playerCardId = battleInput.playerBoard.player.cardId;\r\n\t\tthis.playerHeroPowerCardId = battleInput.playerBoard.player.heroPowerId;\r\n\t\tthis.playerHeroPowerUsed = battleInput.playerBoard.player.heroPowerUsed;\r\n\t\tthis.opponentCardId = battleInput.opponentBoard.player.cardId;\r\n\t\tthis.opponentHeroPowerCardId = battleInput.opponentBoard.player.heroPowerId;\r\n\t\tthis.opponentHeroPowerUsed = battleInput.opponentBoard.player.heroPowerUsed;\r\n\r\n\t\tthis.actionsForCurrentBattle = [];\r\n\t\tthis.wonBattles = [];\r\n\t\tthis.tiedBattles = [];\r\n\t\tthis.lostBattles = [];\r\n\t}\r\n\r\n\tpublic prune(): void {\r\n\t\tthis.wonBattles = this.wonBattles.slice(0, MAX_SAMPLES);\r\n\t\tthis.lostBattles = this.lostBattles.slice(0, MAX_SAMPLES);\r\n\t\tthis.tiedBattles = this.tiedBattles.slice(0, MAX_SAMPLES);\r\n\t}\r\n\r\n\tpublic buildOutcomeSamples(): {\r\n\t\twon: readonly GameSample[];\r\n\t\tlost: readonly GameSample[];\r\n\t\ttied: readonly GameSample[];\r\n\t} {\r\n\t\treturn {\r\n\t\t\twon: this.wonBattles?.map((battle) => this.cleanUpActions(battle)),\r\n\t\t\tlost: this.lostBattles?.map((battle) => this.cleanUpActions(battle)),\r\n\t\t\ttied: this.tiedBattles?.map((battle) => this.cleanUpActions(battle)),\r\n\t\t};\r\n\t}\r\n\r\n\tprivate cleanUpActions(battle: GameSample): GameSample {\r\n\t\tconst collapsed = this.collapseActions(battle.actions);\r\n\t\tconst result: GameSample = {\r\n\t\t\t...battle,\r\n\t\t\tactions: collapsed,\r\n\t\t};\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic commitBattleResult(result: 'won' | 'lost' | 'tied'): void {\r\n\t\tif (\r\n\t\t\tthis.wonBattles.length >= MAX_SAMPLES &&\r\n\t\t\tthis.lostBattles.length >= MAX_SAMPLES &&\r\n\t\t\tthis.tiedBattles.length >= MAX_SAMPLES\r\n\t\t) {\r\n\t\t\tthis.actionsForCurrentBattle = [];\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// const actionsForBattle = this.collapseActions(this.actionsForCurrentBattle);\r\n\t\tconst actionsForBattle = this.actionsForCurrentBattle;\r\n\t\tthis.actionsForCurrentBattle = [];\r\n\r\n\t\tconst battle: GameSample = {\r\n\t\t\tactions: actionsForBattle,\r\n\t\t\tplayerCardId: this.playerCardId,\r\n\t\t\tplayerHeroPowerCardId: this.playerHeroPowerCardId,\r\n\t\t\tplayerHeroPowerUsed: this.playerHeroPowerUsed,\r\n\t\t\t// playerRewardCardId: this.playerRewardCardId,\r\n\t\t\t// playerRewardData: this.playerRewardData,\r\n\t\t\topponentCardId: this.opponentCardId,\r\n\t\t\topponentHeroPowerCardId: this.opponentHeroPowerCardId,\r\n\t\t\topponentHeroPowerUsed: this.opponentHeroPowerUsed,\r\n\t\t\t// opponentRewardCardId: this.opponentRewardCardId,\r\n\t\t\t// opponentRewardData: this.opponentRewardData,\r\n\t\t};\r\n\t\tswitch (result) {\r\n\t\t\tcase 'won':\r\n\t\t\t\tthis.wonBattles.push(battle);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'lost':\r\n\t\t\t\tthis.lostBattles.push(battle);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'tied':\r\n\t\t\t\tthis.tiedBattles.push(battle);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic registerAttack(\r\n\t\tattackingEntity: BoardEntity,\r\n\t\tdefendingEntity: BoardEntity,\r\n\t\tattackingBoard: readonly BoardEntity[],\r\n\t\tdefendingBoard: readonly BoardEntity[],\r\n\t\tattackingBoardHero: BgsPlayerEntity,\r\n\t\tdefendingBoardHero: BgsPlayerEntity,\r\n\t): void {\r\n\t\t// console.debug(\r\n\t\t// \t'\\n register attack',\r\n\t\t// \tstringifySimple(attackingBoard),\r\n\t\t// \t'\\n',\r\n\t\t// \tstringifySimple(defendingBoard),\r\n\t\t// \t'\\n',\r\n\t\t// \tattackingBoard.find((e) => e.entityId === 2441),\r\n\t\t// \t'\\n',\r\n\t\t// \tattackingBoard.find((e) => e.entityId === 2442),\r\n\t\t// );\r\n\t\tconst isAttackerFriendly = attackingBoard.every((entity) => entity.friendly);\r\n\t\tconst friendlyBoard = isAttackerFriendly ? attackingBoard : defendingBoard;\r\n\t\tconst opponentBoard = isAttackerFriendly ? defendingBoard : attackingBoard;\r\n\t\tconst playerSecrets = isAttackerFriendly ? attackingBoardHero.secrets : defendingBoardHero.secrets;\r\n\t\tconst opponentSecrets = isAttackerFriendly ? defendingBoardHero.secrets : attackingBoardHero.secrets;\r\n\t\tconst playerHero = isAttackerFriendly ? attackingBoardHero : defendingBoardHero;\r\n\t\tconst opponentHero = isAttackerFriendly ? defendingBoardHero : attackingBoardHero;\r\n\t\tconst action: GameAction = {\r\n\t\t\ttype: 'attack',\r\n\t\t\tsourceEntityId: attackingEntity.entityId,\r\n\t\t\ttargetEntityId: defendingEntity.entityId,\r\n\t\t\tplayerBoard: this.sanitize(friendlyBoard),\r\n\t\t\tplayerHand: this.sanitize(playerHero.hand),\r\n\t\t\topponentBoard: this.sanitize(opponentBoard),\r\n\t\t\topponentHand: this.sanitize(opponentHero.hand),\r\n\t\t\tplayerSecrets: (playerSecrets ?? []).filter((s) => !s.triggered),\r\n\t\t\topponentSecrets: (opponentSecrets ?? []).filter((s) => !s.triggered),\r\n\r\n\t\t\tplayerRewardCardId: playerHero?.questRewardEntities?.[0]?.cardId ?? playerHero?.questRewards?.[0],\r\n\t\t\tplayerRewardEntityId: playerHero?.questRewardEntities?.[0]?.entityId,\r\n\t\t\tplayerRewardData: playerHero?.questRewardEntities?.[0]?.scriptDataNum1,\r\n\t\t\topponentRewardCardId: opponentHero?.questRewardEntities?.[0]?.cardId ?? opponentHero?.questRewards?.[0],\r\n\t\t\topponentRewardEntityId: opponentHero?.questRewardEntities?.[0]?.entityId,\r\n\t\t\topponentRewardData: opponentHero?.questRewardEntities?.[0]?.scriptDataNum1,\r\n\t\t};\r\n\t\tthis.addAction(action);\r\n\t}\r\n\r\n\tpublic registerStartOfCombat(\r\n\t\tfriendlyBoard: readonly BoardEntity[],\r\n\t\topponentBoard: readonly BoardEntity[],\r\n\t\tfriendlyHero: BgsPlayerEntity,\r\n\t\topponentHero: BgsPlayerEntity,\r\n\t): void {\r\n\t\tconst playerSecrets = friendlyHero.secrets;\r\n\t\tconst opponentSecrets = opponentHero.secrets;\r\n\t\tconst action: GameAction = {\r\n\t\t\ttype: 'start-of-combat',\r\n\t\t\tplayerBoard: this.sanitize(friendlyBoard),\r\n\t\t\topponentBoard: this.sanitize(opponentBoard),\r\n\t\t\tplayerHand: this.sanitize(friendlyHero.hand),\r\n\t\t\topponentHand: this.sanitize(opponentHero.hand),\r\n\t\t\tplayerSecrets: playerSecrets ?? [],\r\n\t\t\topponentSecrets: opponentSecrets ?? [],\r\n\t\t\tplayerRewardCardId: friendlyHero.questRewardEntities?.[0]?.cardId ?? friendlyHero.questRewards?.[0],\r\n\t\t\tplayerRewardEntityId: friendlyHero.questRewardEntities?.[0]?.entityId,\r\n\t\t\tplayerRewardData: friendlyHero.questRewardEntities?.[0]?.scriptDataNum1,\r\n\t\t\topponentRewardCardId: opponentHero.questRewardEntities?.[0]?.cardId ?? opponentHero.questRewards?.[0],\r\n\t\t\topponentRewardEntityId: opponentHero.questRewardEntities?.[0]?.entityId,\r\n\t\t\topponentRewardData: opponentHero.questRewardEntities?.[0]?.scriptDataNum1,\r\n\t\t};\r\n\t\tthis.addAction(action);\r\n\t}\r\n\r\n\tpublic registerPlayerAttack(\r\n\t\tfriendlyBoard: readonly BoardEntity[],\r\n\t\topponentBoard: readonly BoardEntity[],\r\n\t\tdamage: number,\r\n\t): void {\r\n\t\tconst action: GameAction = {\r\n\t\t\ttype: 'player-attack',\r\n\t\t\tplayerBoard: this.sanitize(friendlyBoard),\r\n\t\t\topponentBoard: this.sanitize(opponentBoard),\r\n\t\t\tplayerHand: null,\r\n\t\t\topponentHand: null,\r\n\t\t\tplayerSecrets: null,\r\n\t\t\topponentSecrets: null,\r\n\t\t\tplayerRewardCardId: null,\r\n\t\t\tplayerRewardEntityId: null,\r\n\t\t\tplayerRewardData: null,\r\n\t\t\topponentRewardCardId: null,\r\n\t\t\topponentRewardEntityId: null,\r\n\t\t\topponentRewardData: null,\r\n\t\t\tdamages: [\r\n\t\t\t\t{\r\n\t\t\t\t\tdamage: damage,\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\t\tthis.addAction(action);\r\n\t}\r\n\r\n\tpublic registerOpponentAttack(\r\n\t\tfriendlyBoard: readonly BoardEntity[],\r\n\t\topponentBoard: readonly BoardEntity[],\r\n\t\tdamage: number,\r\n\t): void {\r\n\t\tconst action: GameAction = {\r\n\t\t\ttype: 'opponent-attack',\r\n\t\t\tplayerBoard: this.sanitize(friendlyBoard),\r\n\t\t\topponentBoard: this.sanitize(opponentBoard),\r\n\t\t\tplayerHand: null,\r\n\t\t\topponentHand: null,\r\n\t\t\tplayerSecrets: null,\r\n\t\t\topponentSecrets: null,\r\n\t\t\tplayerRewardCardId: null,\r\n\t\t\tplayerRewardEntityId: null,\r\n\t\t\tplayerRewardData: null,\r\n\t\t\topponentRewardCardId: null,\r\n\t\t\topponentRewardEntityId: null,\r\n\t\t\topponentRewardData: null,\r\n\t\t\tdamages: [\r\n\t\t\t\t{\r\n\t\t\t\t\tdamage: damage,\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\t\tthis.addAction(action);\r\n\t}\r\n\r\n\tpublic registerDamageDealt(\r\n\t\tdamagingEntity: BoardEntity,\r\n\t\tdamagedEntity: BoardEntity,\r\n\t\tdamageTaken: number,\r\n\t\tdamagedEntityBoard: BoardEntity[],\r\n\t): void {\r\n\t\tif (!damagingEntity.entityId) {\r\n\t\t\t// console.error('missing damaging entity id', damagingEntity.cardId);\r\n\t\t}\r\n\t\tconst friendlyBoard = damagedEntityBoard.every((entity) => entity.friendly) ? damagedEntityBoard : null;\r\n\t\tconst opponentBoard = damagedEntityBoard.every((entity) => !entity.friendly) ? damagedEntityBoard : null;\r\n\t\tconst action: GameAction = {\r\n\t\t\ttype: 'damage',\r\n\t\t\tdamages: [\r\n\t\t\t\t{\r\n\t\t\t\t\tsourceEntityId: damagingEntity.entityId,\r\n\t\t\t\t\ttargetEntityId: damagedEntity.entityId,\r\n\t\t\t\t\tdamage: damageTaken,\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t\tplayerBoard: this.sanitize(friendlyBoard),\r\n\t\t\topponentBoard: this.sanitize(opponentBoard),\r\n\t\t\tplayerHand: null,\r\n\t\t\topponentHand: null,\r\n\t\t\tplayerSecrets: null,\r\n\t\t\topponentSecrets: null,\r\n\t\t\tplayerRewardCardId: null,\r\n\t\t\tplayerRewardEntityId: null,\r\n\t\t\tplayerRewardData: null,\r\n\t\t\topponentRewardCardId: null,\r\n\t\t\topponentRewardEntityId: null,\r\n\t\t\topponentRewardData: null,\r\n\t\t};\r\n\t\tthis.addAction(action);\r\n\t}\r\n\r\n\tpublic registerPowerTarget(\r\n\t\tsourceEntity: BoardEntity | BgsPlayerEntity | BoardSecret,\r\n\t\ttargetEntity: BoardEntity | BgsPlayerEntity,\r\n\t\ttargetBoard: BoardEntity[],\r\n\t\thero1: BgsPlayerEntity,\r\n\t\thero2: BgsPlayerEntity,\r\n\t): void {\r\n\t\tif (!targetEntity) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (!sourceEntity.entityId && !(sourceEntity as BgsPlayerEntity).heroPowerId) {\r\n\t\t\t// console.error('missing damaging entity id', sourceEntity.cardId);\r\n\t\t}\r\n\t\t// console.log('registerPowerTarget', stringifySimpleCard(sourceEntity), stringifySimpleCard(targetEntity), new Error().stack);\r\n\t\tconst friendlyBoard = targetBoard?.every((entity) => entity.friendly) ? targetBoard : null;\r\n\t\tconst opponentBoard = targetBoard?.every((entity) => !entity.friendly) ? targetBoard : null;\r\n\t\tconst friendlyHero = hero1?.friendly ? hero1 : hero2?.friendly ? hero2 : null;\r\n\t\tconst opponentHero = hero1?.friendly ? hero2 : hero2?.friendly ? hero1 : null;\r\n\t\tconst action: GameAction = {\r\n\t\t\ttype: 'power-target',\r\n\t\t\tsourceEntityId: sourceEntity.entityId,\r\n\t\t\ttargetEntityId: targetEntity.entityId,\r\n\t\t\tplayerBoard: this.sanitize(friendlyBoard),\r\n\t\t\topponentBoard: this.sanitize(opponentBoard),\r\n\t\t\tplayerHand: this.sanitize(friendlyHero?.hand),\r\n\t\t\topponentHand: this.sanitize(opponentHero?.hand),\r\n\t\t\tplayerSecrets: (friendlyHero?.secrets ?? []).filter((s) => !s.triggered),\r\n\t\t\topponentSecrets: (opponentHero?.secrets ?? []).filter((s) => !s.triggered),\r\n\t\t\tplayerRewardCardId: friendlyHero?.questRewardEntities?.[0]?.cardId ?? friendlyHero?.questRewards?.[0],\r\n\t\t\tplayerRewardEntityId: friendlyHero?.questRewardEntities?.[0]?.entityId,\r\n\t\t\tplayerRewardData: friendlyHero?.questRewardEntities?.[0]?.scriptDataNum1,\r\n\t\t\topponentRewardCardId: opponentHero?.questRewardEntities?.[0]?.cardId ?? opponentHero?.questRewards?.[0],\r\n\t\t\topponentRewardEntityId: opponentHero?.questRewardEntities?.[0]?.entityId,\r\n\t\t\topponentRewardData: opponentHero?.questRewardEntities?.[0]?.scriptDataNum1,\r\n\t\t};\r\n\t\tthis.addAction(action);\r\n\t}\r\n\r\n\tpublic registerMinionsSpawn(\r\n\t\tsourceEntity: BoardEntity | BgsPlayerEntity,\r\n\t\tboardOnWhichToSpawn: BoardEntity[],\r\n\t\tspawnedEntities: readonly BoardEntity[],\r\n\t): void {\r\n\t\tif (!spawnedEntities || spawnedEntities.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!sourceEntity?.entityId) {\r\n\t\t\t// console.error('missing spawn source entity id', sourceEntity);\r\n\t\t}\r\n\t\tconst friendlyBoard = boardOnWhichToSpawn.every((entity) => entity.friendly) ? boardOnWhichToSpawn : null;\r\n\t\tconst opponentBoard = boardOnWhichToSpawn.every((entity) => !entity.friendly) ? boardOnWhichToSpawn : null;\r\n\t\tconst action: GameAction = {\r\n\t\t\ttype: 'spawn',\r\n\t\t\tspawns: this.sanitize(spawnedEntities),\r\n\t\t\tsourceEntityId: sourceEntity?.entityId,\r\n\t\t\tplayerBoard: this.sanitize(friendlyBoard),\r\n\t\t\topponentBoard: this.sanitize(opponentBoard),\r\n\t\t\tplayerHand: null,\r\n\t\t\topponentHand: null,\r\n\t\t\tplayerSecrets: null,\r\n\t\t\topponentSecrets: null,\r\n\t\t\tplayerRewardCardId: null,\r\n\t\t\tplayerRewardEntityId: null,\r\n\t\t\tplayerRewardData: null,\r\n\t\t\topponentRewardCardId: null,\r\n\t\t\topponentRewardEntityId: null,\r\n\t\t\topponentRewardData: null,\r\n\t\t};\r\n\t\tthis.addAction(action);\r\n\t}\r\n\r\n\tpublic registerDeadEntities(\r\n\t\tdeadMinionIndexes1: number[],\r\n\t\tdeadEntities1: BoardEntity[],\r\n\t\tboard1: BoardEntity[],\r\n\t\tdeadMinionIndexes2: number[],\r\n\t\tdeadEntities2: BoardEntity[],\r\n\t\tboard2: BoardEntity[],\r\n\t): void {\r\n\t\tconst deaths = [...(deadEntities1 || []), ...(deadEntities2 || [])];\r\n\t\tif (!deaths || deaths.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst action: GameAction = {\r\n\t\t\ttype: 'minion-death',\r\n\t\t\tdeaths: this.sanitize(deaths),\r\n\t\t\tdeadMinionsPositionsOnBoard: [\r\n\t\t\t\t...(deadMinionIndexes1 || []).map((i) => board1.length - i),\r\n\t\t\t\t...(deadMinionIndexes2 || []).map((i) => board2.length - i),\r\n\t\t\t],\r\n\t\t\tplayerBoard: undefined,\r\n\t\t\topponentBoard: undefined,\r\n\t\t\tplayerHand: null,\r\n\t\t\topponentHand: null,\r\n\t\t\tplayerSecrets: null,\r\n\t\t\topponentSecrets: null,\r\n\t\t\tplayerRewardCardId: null,\r\n\t\t\tplayerRewardEntityId: null,\r\n\t\t\tplayerRewardData: null,\r\n\t\t\topponentRewardCardId: null,\r\n\t\t\topponentRewardEntityId: null,\r\n\t\t\topponentRewardData: null,\r\n\t\t};\r\n\t\tthis.addAction(action);\r\n\t}\r\n\r\n\tprivate addAction(action: GameAction) {\r\n\t\tthis.actionsForCurrentBattle.push(action);\r\n\t}\r\n\r\n\tprivate collapseActions(actions: readonly GameAction[]): readonly GameAction[] {\r\n\t\tif (!actions || actions.length === 0) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\tconst result: GameAction[] = [];\r\n\t\tfor (let i = 0; i < actions.length; i++) {\r\n\t\t\tconst action: GameAction = {\r\n\t\t\t\t...actions[i],\r\n\t\t\t\tplayerBoard: this.sanitize(actions[i].playerBoard),\r\n\t\t\t\topponentBoard: this.sanitize(actions[i].opponentBoard),\r\n\t\t\t\tplayerHand: this.sanitize(actions[i].playerHand),\r\n\t\t\t\topponentHand: this.sanitize(actions[i].opponentHand),\r\n\t\t\t\t// spawns: this.sanitize(actions[i].spawns),\r\n\t\t\t\tdeaths: this.sanitize(actions[i].deaths),\r\n\t\t\t};\r\n\t\t\t// action.playerBoard && console.debug('\\naction playerboard', stringifySimple(action.playerBoard));\r\n\t\t\tconst lastAction = result.length > 0 ? result[result.length - 1] : null;\r\n\r\n\t\t\tif (lastAction && !action.playerBoard) {\r\n\t\t\t\taction.playerBoard = lastAction.playerBoard;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.opponentBoard) {\r\n\t\t\t\taction.opponentBoard = lastAction.opponentBoard;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.playerHand) {\r\n\t\t\t\taction.playerHand = lastAction.playerHand;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.opponentHand) {\r\n\t\t\t\taction.opponentHand = lastAction.opponentHand;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.playerSecrets) {\r\n\t\t\t\taction.playerSecrets = lastAction.playerSecrets;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.opponentSecrets) {\r\n\t\t\t\taction.opponentSecrets = lastAction.opponentSecrets;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.playerRewardCardId) {\r\n\t\t\t\taction.playerRewardCardId = lastAction.playerRewardCardId;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.playerRewardEntityId) {\r\n\t\t\t\taction.playerRewardEntityId = lastAction.playerRewardEntityId;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.playerRewardData) {\r\n\t\t\t\taction.playerRewardData = lastAction.playerRewardData;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.opponentRewardCardId) {\r\n\t\t\t\taction.opponentRewardCardId = lastAction.opponentRewardCardId;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.opponentRewardEntityId) {\r\n\t\t\t\taction.opponentRewardEntityId = lastAction.opponentRewardEntityId;\r\n\t\t\t}\r\n\t\t\tif (lastAction && !action.opponentRewardData) {\r\n\t\t\t\taction.opponentRewardData = lastAction.opponentRewardData;\r\n\t\t\t}\r\n\r\n\t\t\tif (lastAction && action.type === 'damage' && lastAction.type === 'attack') {\r\n\t\t\t\tlastAction.damages = lastAction.damages || [];\r\n\t\t\t\tlastAction.damages.push({\r\n\t\t\t\t\tdamage: action.damages[0].damage,\r\n\t\t\t\t\tsourceEntityId: action.damages[0].sourceEntityId,\r\n\t\t\t\t\ttargetEntityId: action.damages[0].targetEntityId,\r\n\t\t\t\t});\r\n\t\t\t\tlastAction.playerBoard = action.playerBoard;\r\n\t\t\t\tlastAction.opponentBoard = action.opponentBoard;\r\n\t\t\t\tlastAction.playerHand = action.playerHand;\r\n\t\t\t\tlastAction.opponentHand = action.opponentHand;\r\n\t\t\t\tlastAction.playerSecrets = action.playerSecrets;\r\n\t\t\t\tlastAction.opponentSecrets = action.opponentSecrets;\r\n\t\t\t} else if (lastAction && action.type === 'damage' && lastAction.type === 'damage') {\r\n\t\t\t\tlastAction.damages = lastAction.damages || [];\r\n\t\t\t\tlastAction.damages.push({\r\n\t\t\t\t\tdamage: action.damages[0].damage,\r\n\t\t\t\t\tsourceEntityId: action.damages[0].sourceEntityId,\r\n\t\t\t\t\ttargetEntityId: action.damages[0].targetEntityId,\r\n\t\t\t\t});\r\n\t\t\t\tlastAction.playerBoard = action.playerBoard;\r\n\t\t\t\tlastAction.opponentBoard = action.opponentBoard;\r\n\t\t\t\tlastAction.playerHand = action.playerHand;\r\n\t\t\t\tlastAction.opponentHand = action.opponentHand;\r\n\t\t\t\tlastAction.playerSecrets = action.playerSecrets;\r\n\t\t\t\tlastAction.opponentSecrets = action.opponentSecrets;\r\n\t\t\t} else if (\r\n\t\t\t\tlastAction &&\r\n\t\t\t\taction.type === 'power-target' &&\r\n\t\t\t\tlastAction.type === 'power-target' &&\r\n\t\t\t\taction.sourceEntityId === lastAction.sourceEntityId\r\n\t\t\t) {\r\n\t\t\t\tlastAction.targetEntityIds =\r\n\t\t\t\t\tlastAction.targetEntityIds ?? (lastAction.targetEntityId ? [lastAction.targetEntityId] : []);\r\n\t\t\t\taction.targetEntityIds =\r\n\t\t\t\t\taction.targetEntityIds ?? (action.targetEntityId ? [action.targetEntityId] : []);\r\n\t\t\t\tlastAction.targetEntityIds.push(...action.targetEntityIds);\r\n\t\t\t\t// So that when multiple Leapfroggers enchantments target the same minion,\r\n\t\t\t\t// we can count them in the replay viewer's text\r\n\t\t\t\t// lastAction.targetEntityIds = [...new Set(lastAction.targetEntityIds)];\r\n\t\t\t\tlastAction.playerBoard = action.playerBoard;\r\n\t\t\t\tlastAction.opponentBoard = action.opponentBoard;\r\n\t\t\t\tlastAction.playerHand = action.playerHand;\r\n\t\t\t\tlastAction.opponentHand = action.opponentHand;\r\n\t\t\t\tlastAction.playerSecrets = action.playerSecrets;\r\n\t\t\t\tlastAction.opponentSecrets = action.opponentSecrets;\r\n\t\t\t} else {\r\n\t\t\t\tresult.push(action);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t// Calling sanitize every time before we add an action to the list is mandatory, since\r\n\t// the entities and boards are mutable\r\n\tprivate sanitize(board: readonly BoardEntity[]): readonly BoardEntity[] {\r\n\t\tif (!board) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\t\treturn board.map(\r\n\t\t\t(entity) =>\r\n\t\t\t\t({\r\n\t\t\t\t\tentityId: entity.entityId,\r\n\t\t\t\t\tcardId: entity.cardId,\r\n\t\t\t\t\tfriendly: entity.friendly,\r\n\t\t\t\t\tattack: entity.attack,\r\n\t\t\t\t\thealth: entity.health,\r\n\t\t\t\t\tmaxHealth: entity.maxHealth,\r\n\t\t\t\t\ttaunt: entity.taunt,\r\n\t\t\t\t\tdivineShield: entity.divineShield,\r\n\t\t\t\t\tpoisonous: entity.poisonous,\r\n\t\t\t\t\tvenomous: entity.venomous,\r\n\t\t\t\t\treborn: entity.reborn,\r\n\t\t\t\t\twindfury: entity.windfury,\r\n\t\t\t\t\tstealth: entity.stealth,\r\n\t\t\t\t} as BoardEntity),\r\n\t\t);\r\n\t}\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@firestone-hs/simulate-bgs-battle",
3
- "version": "1.1.430",
3
+ "version": "1.1.431",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "lint": "eslint --color --fix --ext .ts .",