protected override async Task ActAsync(IActionHost host) { host.DrawCards(1); host.AddActions(1); var handSize = host.Count(Zone.Hand); if (handSize >= 2 && await host.YesNo("Mill", "<run>Discard 2 cards for</run><sym>+coin2?</sym>")) { if (handSize > 2) { var discarded = await host.SelectCards("Choose cards to discard.", 2, 2); host.Discard(discarded); } else { host.Discard(Zone.Hand); } if (handSize > 1) { host.AddCoins(2); } } }
protected override async Task ActAsync(IActionHost host) { var discarded = await host.SelectCards("Choose cards to discard."); host.Discard(discarded); host.AddCoins(discarded.Length); }
protected override void Act(IActionHost host) { host.DrawCards(1); host.AddActions(1); host.AddBuys(1); host.AddCoins(1); }
protected override async Task ActAsync(IActionHost host) { host.AddCoins(2); var top5 = host.Examine(Zone.DeckTop(5)); var namesBuilder = new StringBuilder(); { for (var i = 0; i < top5.Length; i++) { var suffix = (i == top5.Length - 1) ? "" : (i == top5.Length - 2) ? " and" : ","; namesBuilder.Append($"<card suffix='{suffix}'>{top5[i].Name}</card>"); } } var names = namesBuilder.ToString(); await host.ChooseOne("Navigator", new NamedOption($"<run>Discard cards:</run>{names}.", () => host.Discard(top5, Zone.Deck)), new NamedOption("<run>Put cards back on deck.</run>", async() => { var reordered = await host.OrderCards("Navigator", Zone.DeckTop(5)); host.Reorder(reordered, Zone.DeckTop(5)); }) ); }
protected override async Task ActAsync(IActionHost host) { host.AddCoins(2); if (await host.YesNo("Chancellor", "Do you want to put your deck into your discard pile?")) { host.DiscardEntireDeck(); } }
protected override async Task ActAsync(IActionHost host) { host.AddCoins(2); host.Trash("Embargo", Zone.InPlay); var pile = await host.SelectCard("Choose a Supply pile to embargo.", Zone.SupplyAvailable); host.AddToken("EmbargoToken", pile.Name); }
protected override void Act(IActionHost host) { host.AddCoins(2); if (host.ActionCount >= 3) { host.DrawCards(1); host.AddActions(1); } }
protected override async Task ActAsync(IActionHost host) { host.AddCoins(2); await host.Attack(player => player.Count(Zone.Hand) > 3, async player => { var n = player.Count(Zone.Hand) - 3; var discardedCards = await player.SelectCards(n == 1 ? "Choose a card to discard." : $"Choose {n} cards to discard.", n, n); player.Discard(discardedCards); }); }
protected override async Task ActAsync(IActionHost host) { if (host.Examine(Zone.Hand).Any(card => card is Base.Copper)) { if (await host.YesNo("Moneylender", $@"Do you want to trash a Copper?")) { host.Trash("Copper"); host.AddCoins(3); } } }
protected override async Task ActAsync(IActionHost host) { host.DrawCards(1); host.AddActions(2); if (await host.YesNo("Mining Village", "<run>Trash</run><card>MiningVillage</card><run>for</run><sym>+coin2?</sym>")) { host.Trash("MiningVillage", Zone.InPlay); host.AddCoins(2); } }
protected override async Task ActAsync(IActionHost host) { host.AddBuys(1); var trashed = await host.SelectCard("Choose a card to trash."); if (trashed != null) { host.Trash(trashed); host.AddCoins(trashed.GetCost(host).Coins); } }
protected override async Task ActAsync(IActionHost host) { host.AddCoins(2); var discarded = host.Examine(Zone.DeckTop(1)).SingleOrDefault(); if (discarded != null && discarded.Types.Contains(CardType.Action)) { host.Discard(discarded, Zone.Deck); if (await host.YesNo("Vassal", $"<card prefix='Play ' suffix='?'>{discarded.Name}</card>")) { await host.PlayCard(discarded.Name, Zone.Discard); } } }
protected override async Task ActAsync(IActionHost host) { host.AddCoins(2); await host.Attack(target => { var hand = target.Examine(Zone.Hand); if (hand.Any(card => card.Name == "Copper")) { target.Discard("Copper"); } else { target.Reveal(Zone.Hand); } }); }
protected override async Task ActAsync(IActionHost host) { host.AddActions(1); await host.ChooseOne("Minion", new NamedOption("<sym>+coin2</sym>", () => host.AddCoins(2)), new NamedOption("<run>More</run><card suffix='s!'>Minion</card>", async() => { host.Discard(Zone.Hand); host.DrawCards(4); await host.Attack(target => target.Count(Zone.Hand) >= 5, target => { target.Discard(Zone.Hand); target.DrawCards(4); }); }) ); }
protected override async Task ActAsync(IActionHost host) { var gained = await host.SelectCard("Choose a card to gain.", Zone.SupplyAvailable, card => card.GetCost(host).LessThanOrEqual(4)); await host.Gain(gained); if (gained is IActionCard) { host.AddActions(1); } if (gained is ITreasureCard) { host.AddCoins(1); } if (gained is IVictoryCard) { host.DrawCards(1); } }
protected override async Task ActAsync(IActionHost host) { await host.ChooseOne("Steward", new NamedOption("+2 Cards", () => host.DrawCards(2)), new NamedOption("<sym>+coin2</sym>", () => host.AddCoins(2)), new NamedOption("Trash 2 cards", async() => { var handSize = host.Count(Zone.Hand); if (handSize > 2) { var trashed = await host.SelectCards("Choose cards to trash.", Zone.Hand, 2, 2); host.Trash(trashed); } else { host.Trash(Zone.Hand); } }) ); }
protected override async Task ActAsync(IActionHost host) { host.DrawCards(1); host.AddActions(1); host.AddCoins(1); var emptyPiles = host.Count(Zone.SupplyEmpty); var handSize = host.Count(Zone.Hand); var toDiscard = Math.Min(emptyPiles, handSize); if (toDiscard > 0) { var discarded = await host.SelectCards( toDiscard == 1? "Choose a card to discard." : $"Choose {toDiscard} cards to discard.", toDiscard, toDiscard ); host.Discard(discarded); } }
protected override async Task ActAsync(IActionHost host) { host.AddBuys(1); var hand = host.Examine(Zone.Hand); if (hand.Any(card => card.Name == "Estate")) { if (await host.YesNo("Baron", @"<run>Discard an</run> <card>Estate</card> <run>for</run> <sym>+coin4?</sym>")) { host.Discard("Estate"); host.AddCoins(4); return; } } await host.Gain("Estate"); }
protected override async Task ActAsync(IActionHost host) { await host.OnePlayer(host.GetPlayerToLeft(), target => { foreach (var card in target.Examine(Zone.DeckTop(2))) { target.Discard(card, Zone.Deck); if (card.Types.Contains(CardType.Action)) { host.AddActions(2); } if (card.Types.Contains(CardType.Treasure)) { host.AddCoins(2); } if (card.Types.Contains(CardType.Victory)) { host.DrawCards(2); } } }); }
protected override async Task ActAsync(IActionHost host) { host.AddCoins(2); await host.Attack(async target => { var topDeck = target.Examine(Zone.DeckTop(1)).SingleOrDefault(); if (topDeck != null) { var topDeckCost = topDeck.GetCost(host); target.Trash(topDeck, Zone.Deck); var gained = await host.SelectCard( $"Choose a card for {target.Player} to gain.", Zone.SupplyAvailable, card => card.GetCost(host).Equals(topDeckCost) ); await target.Gain(gained); } }); }
protected override async Task ActAsync(IActionHost host) { var tokens = host.Count(Zone.PlayerMat("PirateShipMat")); await host.ChooseOne("Pirate Ship", new NamedOption($"<sym>+coin1</sym><run>per Coin token (+${tokens}).</run>", () => { host.AddCoins(tokens); }), new NamedOption("Raid for Treasures!", async() => { var anyTrashes = false; await host.Attack(async target => { var top2 = target.Reveal(Zone.DeckTop(2)); var top2Treasures = top2.OfType <ITreasureCard>(); if (top2Treasures.Count() == 1) { target.Trash(top2Treasures.Single(), Zone.Deck); anyTrashes = true; } else if (top2Treasures.Count() == 2) { var trashed = await host.SelectCard($"Choose a Treasure for {target.Player} to trash.", top2Treasures); target.Trash(trashed, Zone.Deck); anyTrashes = true; } target.Discard(top2.Without(top2Treasures).ToArray(), Zone.Deck); }); if (anyTrashes) { host.PutOnMat("PirateShipMat", "Coin", Zone.Create); } }) ); }
protected override async Task ActAsync(IActionHost host) { var revealed = await host.SelectCard("Choose a card to reveal."); if (revealed != null) { host.Reveal(revealed); await host.ChooseMultiple("Courtier", revealed.Types.Length, new NamedOption("<bold>+1 Action</bold>", () => host.AddActions(1)), new NamedOption("<bold>+1 Buy</bold>", () => host.AddBuys(1)), new NamedOption("<bold><sym>+coin3</sym></bold>", () => host.AddCoins(3)), new NamedOption("<run>Gain a</run><card>Gold</card>", () => host.Gain("Gold")) ); } }
protected override void Act(IActionHost host) { host.AddBuys(1); host.AddCoins(1); host.AddEffect(nameof(BridgeEffect)); }
protected override void React(IActionHost host, string trigger) { host.AddCoins(1); host.RemoveEffect(Name); }
protected override async Task ActAsync(IActionHost host) { await host.ChooseMultiple("Pawn", 2, new NamedOption("<bold>+1 Card</bold>", () => host.DrawCards(1)), new NamedOption("<bold>+1 Action</bold>", () => host.AddActions(1)), new NamedOption("<bold>+1 Buy</bold>", () => host.AddBuys(1)), new NamedOption("<bold><sym>+coin1</sym></bold>", () => host.AddCoins(1)) ); }
protected override void OnBeginTurn(IActionHost host) { host.AddCoins(1); }
protected override void Act(IActionHost host) { host.AddActions(1); host.AddCoins(1); }