protected override async Task ActAsync(IActionHost host) { var setAside = new List <string>(); while (host.Count(Zone.Hand) < 7) { var drawn = host.DrawCards(1).SingleOrDefault(); if (drawn == null) { break; // no cards left in deck or discard } if (drawn.Types.Contains(CardType.Action)) { var shouldSkip = await host.YesNo("Library", $@"<spans> <run>Skip drawing</run> <card>{drawn.Name}</card> <run>and put it into your discard pile?</run> </spans>"); if (shouldSkip) { setAside.Add(drawn.Name); } } } if (setAside.Any()) { host.Discard(setAside.ToArray()); } }
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) { host.AddCoins(2); if (await host.YesNo("Chancellor", "Do you want to put your deck into your discard pile?")) { host.DiscardEntireDeck(); } }
protected sealed override async Task ReactAsync(IActionHost host, string attacker) { if (attacker != host.Player && await host.YesNo(Name, $@"<run>Reveal</run><card>{Name}</card><run>from your hand?</run>")) { host.Reveal(Name); await ReactAsync(host.Isolate()); } }
protected override async Task OnDiscardFromPlayAsync(IActionHost host) { // XXX RAW you choose discard order, but we elide that for UI reasons. in practice we trigger all IReactor discards first var playedPotion = host.Examine(Zone.InPlay).Any(card => card.Name == "Potion"); if (playedPotion && await host.YesNo("Alchemist", "<run>Put</run><card>Alchemist</card><run>back onto your deck?</run>")) { host.PutOnDeck("Alchemist", Zone.Discard); } }
protected override async Task OnDiscardFromPlayAsync(IActionHost host) { var bought = host.Examine(Zone.RecentBuys); var boughtVictories = bought.Any(card => card.Types.Contains(CardType.Victory)); if (!boughtVictories && await host.YesNo("Treasury", "<run>Put</run><card>Treasury</card><run>back onto your deck?</run>")) { host.PutOnDeck("Treasury", Zone.Discard); } }
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) { 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(1); var bottomCard = host.Examine(Zone.DeckBottom).SingleOrDefault(); if (bottomCard != null && await host.YesNo("Pearl Diver", $"<run>Put</run><card>{bottomCard.Name}</card><run>on top of your deck?</run>")) { host.PutOnDeck(bottomCard, Zone.DeckBottom); } }
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) { 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.DrawCards(1); host.AddActions(1); await host.AllPlayers(async target => { var revealed = target.Reveal(Zone.DeckTop(1)).SingleOrDefault(); if (revealed != null) { var subject = host == target ? "<run>Do you want</run>" : $"<run>Force</run><player>{target.Player}</player>"; if (await host.YesNo("Spy", $@"{subject} <run>to discard</run> <card suffix='?'>{revealed.Name}</card>")) { target.Discard(revealed, Zone.Deck); } } }, isAttack : true); }
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"); }