protected override async Task ActAsync(IActionHost host) { var trashed = await host.SelectCard("Choose a card to trash.", Zone.Hand); if (trashed != null) { var cost = trashed.GetCost(host); host.Trash(trashed); var gained = await host.SelectCard( "Choose a card to gain.", Zone.SupplyAvailable, card => card.GetCost(host).LessThanOrEqual(cost.Plus(2)) ); if (gained != null) { if (gained.Types.Contains(CardType.Action) || gained.Types.Contains(CardType.Treasure)) { await host.Gain(gained, Zone.Deck); } else { await host.Gain(gained); } if (gained.Types.Contains(CardType.Victory)) { await host.Attack(target => target.Gain("Curse")); } } } }
protected override async Task ActAsync(IActionHost host) { var hand = host.Examine(Zone.Hand); if (hand.Names().Contains("Province") && await host.YesNo("Explorer", "<run>Reveal a</run><card>Province</card><run>from your hand?</run>")) { host.Reveal("Province"); await host.Gain("Gold", Zone.Hand); } else { await host.Gain("Silver", Zone.Hand); } }
protected override async Task ActAsync(IActionHost host) { var lastGains = host.Examine(Zone.RecentGains, host.GetPlayerToRight()).Where(c => c.GetCost(host).LessThanOrEqual(6)); if (lastGains.Count() == 1) { await host.Gain(lastGains.Single()); } else if (lastGains.Count() > 1) { var gainedCopy = await host.SelectCard("Choose a card to gain.", lastGains); await host.Gain(gainedCopy); } }
protected override async Task ActAsync(IActionHost host) { await host.Gain("Gold"); var trashed = new List <ICard>(); await host.Attack(async player => { var top2 = player.Reveal(Zone.DeckTop(2)); var trashed = false; foreach (var card in top2) { if (!trashed && card.Types.Contains(CardType.Treasure) && card.Name != "Copper") { trashed = true; player.Trash(card, Zone.Deck); } else { player.Discard(card, Zone.Deck); } } }); }
protected override async Task ActAsync(IActionHost host) { var gainedCard = await host.SelectCard( "Choose a card to gain.", Zone.SupplyAvailable, card => card.GetCost(host).LessThanOrEqual(4) ); await host.Gain(gainedCard.Name); }
protected override async Task ActAsync(IActionHost host) { var trashed = await host.SelectCard("Choose a card to trash."); if (trashed != null) { if (trashed.Types.Contains(CardType.Action)) { await host.Gain("Duchy"); } if (trashed.Types.Contains(CardType.Treasure)) { await host.Gain("Transmute"); } if (trashed.Types.Contains(CardType.Victory)) { await host.Gain("Gold"); } } }
protected override async Task ActAsync(IActionHost host) { host.Trash("TreasureMap", Zone.InPlay); var hand = host.Examine(Zone.Hand); if (hand.Any(card => card.Name == "TreasureMap")) { host.Trash("TreasureMap", Zone.Hand); await host.Gain(new[] { "Gold", "Gold", "Gold", "Gold" }, Zone.Deck); } }
protected override async Task ActAsync(IActionHost host) { var handSize = host.Count(Zone.Hand); var trashed = handSize <= 2 ? host.Examine(Zone.Hand) : await host.SelectCards("Choose cards to trash.", Zone.Hand, 2, 2); host.Trash(trashed); if (trashed.Count() == 2) { await host.Gain("Silver", Zone.Hand); } }
protected override async Task ActAsync(IActionHost host) { host.Trash("Feast", Zone.InPlay); var gainedCard = await host.SelectCard( "Choose a card to gain.", Zone.SupplyAvailable, card => card.GetCost(host).LessThanOrEqual(5) ); await host.Gain(gainedCard); }
protected override async Task ActAsync(IActionHost host) { host.AddActions(2); var gained = await host.SelectCards( "Choose a card to gain, or none.", Zone.SupplyAvailable, card => card.Types.Contains(CardType.Action) && card.GetCost(host).LessThan(6), 0, 1 ); await host.Gain(gained); }
protected override async Task ActAsync(IActionHost host) { var modifiers = host.GetModifiers(); var trashedCard = await host.SelectCard("Choose a card to trash."); host.Trash(trashedCard.Name); var gainedCard = await host.SelectCard( "Choose a card to gain.", Zone.SupplyAvailable, card => card.GetCost(modifiers).LessThanOrEqual(trashedCard.GetCost(modifiers).Plus(2)) ); await host.Gain(gainedCard.Name); }
protected override async Task ActAsync(IActionHost host) { var gainedCard = await host.SelectCard( "Choose a card to gain.", Zone.SupplyAvailable, card => card.GetCost(host).LessThanOrEqual(5) ); await host.Gain(gainedCard.Name, Zone.Hand); var placedCard = await host.SelectCard( "Choose a card to put onto your deck.", Zone.Hand ); host.PutOnDeck(placedCard, Zone.Hand); }
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) { host.DrawCards(1); host.AddActions(1); var trashed = await host.SelectCard("Choose a card to trash.", Zone.Hand); if (trashed != null) { host.Trash(trashed); var value = trashed.GetCost(host).Plus(1); var gained = await host.SelectCard("Choose a card to gain.", Zone.SupplyAvailable, card => card.GetCost(host).Equals(value)); if (gained != null) { await host.Gain(gained); } } }
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.Gain("Silver", Zone.Deck); await host.Attack(async player => { var hand = player.Examine(Zone.Hand); if (hand.Any(card => card.Types.Contains(CardType.Victory))) { var onTop = await player.SelectCard( "Choose a card to put onto your deck.", Zone.Hand, cards => cards.OfType <IVictoryCard>() ); player.Reveal(onTop, Zone.Hand); player.PutOnDeck(onTop, Zone.Hand); } else { player.Reveal(Zone.Hand); } }); }
protected override async Task ActAsync(IActionHost host) { var modifiers = host.GetModifiers(); var trashedCard = await host.SelectCard( "Choose a Treasure to trash.", cards => cards.OfType <ITreasureCard>() ); if (trashedCard != null) { host.Trash(trashedCard); var gainedCard = await host.SelectCard( "Choose a Treasure to gain.", Zone.SupplyAvailable, cards => cards .OfType <ITreasureCard>() .Where(card => card.GetCost(modifiers).LessThanOrEqual(trashedCard.GetCost(modifiers).Plus(3))) ); await host.Gain(gainedCard.Name, Zone.Hand); } }
public static Task Gain(this IActionHost host, ICard card) { return(host.Gain(new[] { card.Name }, Zone.Discard)); }
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 async Task ReactAsync(IActionHost host, string trigger) { await host.Gain("Curse"); }
public static Task Gain(this IActionHost host, string card) { return(host.Gain(new[] { card }, Zone.Discard)); }
public static Task Gain(this IActionHost host, ICard[] cards) { return(host.Gain(cards.Names(), Zone.Discard)); }