Пример #1
0
        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());
            }
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
 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();
     }
 }
Пример #4
0
 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());
     }
 }
Пример #5
0
        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);
            }
        }
Пример #6
0
        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);
            }
        }
Пример #7
0
        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);
            }
        }
Пример #8
0
 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);
         }
     }
 }
Пример #9
0
        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);
            }
        }
Пример #10
0
        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);
            }
        }
Пример #11
0
        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);
                }
            }
        }
Пример #12
0
        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);
        }
Пример #13
0
        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");
        }