Ejemplo n.º 1
0
        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));
            })
                                 );
        }
Ejemplo n.º 2
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.AddActions(2);

            var cards = host.Examine(Zone.PlayerMat("NativeVillageMat"));

            await host.ChooseOne("Native Village",
                                 new NamedOption("Add card to mat.", () =>
            {
                var topDeck = host.Examine(Zone.DeckTop(1));
                host.PutOnMat("NativeVillageMat", topDeck, Zone.Deck);
            }),
                                 new NamedOption($"Retrieve all cards ({(cards.Any() ? cards.Length.ToString() : "none")}).", () =>
            {
                host.PutIntoHand(Zone.PlayerMat("NativeVillageMat"));
            })
                                 );
        }
Ejemplo n.º 3
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);
            }
        }
Ejemplo n.º 4
0
        public static ICard[] Reveal(this IActionHost host, Zone from)
        {
            var cards = host.Examine(from);

            if (cards.Any())
            {
                host.Reveal(cards, from);
            }
            return(cards);
        }
Ejemplo n.º 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);
            }
        }
Ejemplo n.º 6
0
        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);
            }
        }
Ejemplo n.º 7
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);
         }
     }
 }
Ejemplo n.º 8
0
 protected override void Act(IActionHost host)
 {
     if (host.Examine(Zone.RecentPlays).Any(card => card.Name == "Outpost") || host.PreviousPlayer == host.Player)
     {
         host.CompleteDuration();
     }
     else
     {
         host.InsertExtraTurn(host.Player, host.Player);
     }
 }
Ejemplo n.º 9
0
        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);
            }
        }
Ejemplo n.º 10
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);
            }
        }
Ejemplo n.º 11
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);
            }
        }
Ejemplo n.º 12
0
        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);
            }
        }
Ejemplo n.º 13
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);
                }
            }
        }
Ejemplo n.º 14
0
        protected override async Task OnDiscardFromPlayAsync(IActionHost host)
        {
            var playedTreasures = host.Examine(Zone.RecentPlays).Any(card => card.Types.Contains(CardType.Treasure));

            if (playedTreasures)
            {
                var putBack = await host.SelectCards(
                    "Choose a Treasure, or none, to put back onto your deck.",
                    Zone.InPlay,
                    card => card.Types.Contains(CardType.Treasure),
                    0, 1
                    );

                host.PutOnDeck(putBack, Zone.InPlay);
            }
        }
Ejemplo n.º 15
0
        protected override async Task ActAsync(IActionHost host)
        {
            var revealed = await host.SelectCard("Choose a card to reveal.");

            if (revealed != null)
            {
                host.Reveal(revealed);
                var hand   = host.Examine(Zone.Hand);
                var copies = hand.Where(c => c == revealed);

                var returned = await host.SelectCards("Choose copies to return.", copies);

                host.ReturnToSupply(returned);

                await host.Attack(target => target.Gain(revealed));
            }
        }
Ejemplo n.º 16
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");
        }
Ejemplo n.º 17
0
        public static void PutIntoHand(this IActionHost host, Zone from)
        {
            var cards = host.Examine(from);

            host.PutIntoHand(cards, from);
        }
Ejemplo n.º 18
0
        public static async Task <ICard[]> OrderCards(this IActionHost host, string prompt, Zone @in)
        {
            var sourceCards = host.Examine(@in);

            return(await host.OrderCards(prompt, sourceCards.Names()));
        }