Skip to content

Commit

Permalink
Fix an issue with Piloting leaders triggering Ambush on deploy (#790)
Browse files Browse the repository at this point in the history
  • Loading branch information
moyerr authored Mar 6, 2025
1 parent 5825c5f commit 5e8292b
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 12 deletions.
3 changes: 2 additions & 1 deletion server/game/abilities/keyword/AmbushAbility.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import TriggeredAbility from '../../core/ability/TriggeredAbility';
import type { TriggeredAbilityContext } from '../../core/ability/TriggeredAbilityContext';
import type { Card } from '../../core/card/Card';
import { KeywordName } from '../../core/Constants';
import { KeywordName, WildcardZoneName } from '../../core/Constants';
import type Game from '../../core/Game';
import * as Contract from '../../core/utils/Contract';
import { ConditionalSystem } from '../../gameSystems/ConditionalSystem';
Expand All @@ -19,6 +19,7 @@ export class AmbushAbility extends TriggeredAbility {
title: 'Ambush',
optional: true,
when: { onUnitEntersPlay: (event, context) => event.card === context.source },
zoneFilter: WildcardZoneName.AnyArena,
immediateEffect: new ConditionalSystem({
condition: AmbushAbility.unitWouldHaveAmbushTarget<TSource>,
onTrue: new SequentialSystem([
Expand Down
3 changes: 2 additions & 1 deletion server/game/gameSystems/DeployAndAttachPilotLeaderSystem.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,10 @@ export class DeployAndAttachPilotLeaderSystem<TContext extends AbilityContext =
protected override updateEvent(event, card: Card, context: TContext, additionalProperties: any = {}) {
super.updateEvent(event, card, context, additionalProperties);
event.setContingentEventsGenerator(() => {
const properties = this.generatePropertiesFromContext(context);
const entersPlayEvent = new GameEvent(EventName.OnUnitEntersPlay, context, {
player: context.player,
card
card: properties.leaderPilotCard
});

return [entersPlayEvent];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ describe('Boba Fett, Any Methods Necessary', function() {
phase: 'action',
player1: {
leader: 'boba-fett#any-methods-necessary',
spaceArena: ['cartel-spacer'],
spaceArena: ['cartel-spacer', 'auzituck-liberator-gunship'],
resources: 6
},
player2: {
Expand All @@ -133,16 +133,16 @@ describe('Boba Fett, Any Methods Necessary', function() {
expect(context.player1).toHaveExactPromptButtons(['Cancel', 'Deploy Boba Fett', 'Deploy Boba Fett as a Pilot']);
context.player1.clickPrompt('Deploy Boba Fett as a Pilot');
expect(context.player2).not.toBeActivePlayer();
expect(context.player1).toBeAbleToSelectExactly([context.cartelSpacer]);
context.player1.clickCard(context.cartelSpacer);
expect(context.player1).toBeAbleToSelectExactly([context.cartelSpacer, context.auzituckLiberatorGunship]);
context.player1.clickCard(context.auzituckLiberatorGunship);

expect(context.bobaFett.deployed).toBe(true);
expect(context.bobaFett).toBeInZone('spaceArena');
expect(context.cartelSpacer.getPower()).toBe(6);
expect(context.cartelSpacer.getHp()).toBe(7);
expect(context.cartelSpacer).toHaveExactUpgradeNames(['boba-fett#any-methods-necessary']);
expect(context.auzituckLiberatorGunship.getPower()).toBe(7);
expect(context.auzituckLiberatorGunship.getHp()).toBe(8);
expect(context.auzituckLiberatorGunship).toHaveExactUpgradeNames(['boba-fett#any-methods-necessary']);

expect(context.player1).toBeAbleToSelectExactly([context.cartelSpacer, context.wampa, context.moistureFarmer, context.concordDawnInterceptors]);
expect(context.player1).toBeAbleToSelectExactly([context.cartelSpacer, context.auzituckLiberatorGunship, context.wampa, context.moistureFarmer, context.concordDawnInterceptors]);
expect(context.player1).toHaveChooseNoTargetButton();
context.player1.setDistributeDamagePromptState(new Map([
[context.wampa, 2],
Expand All @@ -156,10 +156,10 @@ describe('Boba Fett, Any Methods Necessary', function() {
expect(context.cartelSpacer.damage).toBe(1);

context.player2.clickCard(context.rivalsFall);
expect(context.player2).toBeAbleToSelectExactly([context.cartelSpacer, context.wampa, context.moistureFarmer, context.concordDawnInterceptors]);
context.player2.clickCard(context.cartelSpacer);
expect(context.player2).toBeAbleToSelectExactly([context.cartelSpacer, context.auzituckLiberatorGunship, context.wampa, context.moistureFarmer, context.concordDawnInterceptors]);
context.player2.clickCard(context.auzituckLiberatorGunship);

expect(context.cartelSpacer).toBeInZone('discard');
expect(context.auzituckLiberatorGunship).toBeInZone('discard');
expect(context.bobaFett).toBeInZone('base');
expect(context.bobaFett.exhausted).toBe(true);
expect(context.bobaFett.deployed).toBe(false);
Expand Down

0 comments on commit 5e8292b

Please sign in to comment.