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.DrawCards(2); host.AddActions(1); var inserted = await host.SelectCard("Choose a card to put in your deck.", Zone.Hand); var deckSize = host.Count(Zone.Deck); if (deckSize == 0) { host.PutOnDeck(inserted); } else { var options = Enumerable.Range(0, deckSize + 1).Select(i => { var label = i == 0 ? "Top" : i == deckSize ? "Bottom" : i.ToString(); return(new NamedOption(label, () => host.InsertIntoDeck(inserted.Name, i))); }); await host.ChooseOne($"Choose where to put {inserted.Name}.", options.ToArray()); } }
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 void Act(IActionHost host) { host.DrawCards(2); if (host.Count(Zone.Hand) <= 5) { host.AddActions(2); } }
protected override void Act(IActionHost host) { if (host.Count(Zone.Hand) > 0) { host.Discard(Zone.Hand); } else { host.CompleteDuration(); } }
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) { 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) { 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) { 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); } }) ); }
public async Task <Cost> GetValueAsync(IActionHost host) { var total = host.Count(Zone.Deck) + host.Count(Zone.Discard); return(total / 5); }