Пример #1
0
        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"));
                    }
                }
            }
        }
Пример #2
0
        protected override async Task ActAsync(IActionHost host)
        {
            var matted = await host.SelectCard("Choose an additional card to put on your Island mat.");

            host.PutOnMat("IslandMat", "Island", Zone.InPlay);
            host.PutOnMat("IslandMat", matted, Zone.Hand);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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());
            }
        }
Пример #5
0
        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);
        }
Пример #6
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.AddActions(1);

            await host.ChooseOne("Lurker",
                                 new NamedOption("Trash an Action card from the Supply", async() =>
            {
                var trashed = await host.SelectCard("Choose a card to trash.", Zone.SupplyAvailable, cards => cards.OfType <IActionCard>());
                host.Trash(trashed, Zone.SupplyAvailable);
            }),
                                 new NamedOption("Gain an Action card from the Trash", async() =>
            {
                var gained = await host.SelectCard("Choose a card to gain.", Zone.Trash, cards => cards.OfType <IActionCard>());
                await host.GainFrom(gained, Zone.Trash);
            })
                                 );
        }
Пример #7
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.DrawCards(3);

            var put = await host.SelectCard("Choose a card to put onto your deck.");

            host.PutOnDeck(put);
        }
Пример #8
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.AddCoins(2);
            host.Trash("Embargo", Zone.InPlay);

            var pile = await host.SelectCard("Choose a Supply pile to embargo.", Zone.SupplyAvailable);

            host.AddToken("EmbargoToken", pile.Name);
        }
Пример #9
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.AddActions(1);

            var trashed = await host.SelectCard("Choose a card to trash.", Zone.DeckTop(3));

            if (trashed != null)
            {
                host.Trash(trashed, Zone.Deck);

                var discarded = await host.SelectCard("Choose a card to discard.", Zone.DeckTop(2));

                if (discarded != null)
                {
                    host.Discard(discarded, Zone.Deck);
                }
            }
        }
Пример #10
0
        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);
        }
Пример #11
0
        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);
                }
            }
        }
Пример #12
0
        protected override async Task ActAsync(IActionHost host)
        {
            var doubledCard = await host.SelectCard("Choose an Action card.", Zone.Hand, cards => cards.OfType <IActionCard>());

            if (doubledCard != null)
            {
                await host.PlayCard(doubledCard, Zone.Hand);

                await host.PlayCard(doubledCard, Zone.InPlay);
            }
        }
Пример #13
0
        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);
        }
Пример #14
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.AddBuys(1);

            var trashed = await host.SelectCard("Choose a card to trash.");

            if (trashed != null)
            {
                host.Trash(trashed);
                host.AddCoins(trashed.GetCost(host).Coins);
            }
        }
Пример #15
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.AddActions(1);

            var trashed = await host.SelectCard("Choose a card to trash.");

            if (trashed != null)
            {
                var cost = trashed.GetCost(host);
                host.Trash(trashed);

                host.DrawCards(cost.Coins + (cost.Potion ? 2 : 0));
            }
        }
Пример #16
0
        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"))
                                          );
            }
        }
Пример #17
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);
            }
        }
Пример #18
0
        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);
            }
        }
Пример #19
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.DrawCards(1);
            host.AddActions(1);

            var setAside = await host.SelectCard("Choose a card to set aside.");

            if (setAside != null)
            {
                host.Attach(setAside, Zone.Hand);
            }
            else
            {
                host.CompleteDuration();
            }
        }
Пример #20
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.DrawCards(1);
            host.AddActions(1);

            var named = await host.SelectCard("Name a card.", Zone.SupplyAll);

            host.Name(named);

            var top1 = host.Reveal(Zone.DeckTop(1));

            if (named.Equals(top1.SingleOrDefault()))
            {
                host.PutIntoHand(named, Zone.Deck);
            }
        }
Пример #21
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));
            }
        }
Пример #22
0
        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);
            }
        }
Пример #23
0
        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");
                }
            }
        }
Пример #24
0
        protected override async Task ActAsync(IActionHost host)
        {
            host.AddCoins(2);

            await host.Attack(async target =>
            {
                var topDeck = target.Examine(Zone.DeckTop(1)).SingleOrDefault();
                if (topDeck != null)
                {
                    var topDeckCost = topDeck.GetCost(host);

                    target.Trash(topDeck, Zone.Deck);

                    var gained = await host.SelectCard(
                        $"Choose a card for {target.Player} to gain.",
                        Zone.SupplyAvailable,
                        card => card.GetCost(host).Equals(topDeckCost)
                        );
                    await target.Gain(gained);
                }
            });
        }
Пример #25
0
        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);
                }
            })
                                 );
        }
Пример #26
0
        protected override async Task ActAsync(IActionHost host)
        {
            var trashed = new List <ICard>();

            await host.Attack(async player =>
            {
                var top2 = player.Reveal(Zone.DeckTop(2));

                var treasures = top2.OfType <ITreasureCard>();
                if (treasures.Any())
                {
                    if (treasures.Count() == 1 || treasures.First().Equals(treasures.Last()))
                    {
                        var soleTreasure = treasures.First();
                        player.Trash(soleTreasure, Zone.Deck);
                        trashed.Add(soleTreasure);
                    }
                    else
                    {
                        var chosenTreasure = await host.SelectCard("Choose a Treasure to trash.", treasures);
                        player.Trash(chosenTreasure, Zone.Deck);
                        trashed.Add(chosenTreasure);
                    }
                }
            });

            if (trashed.Any())
            {
                var gained = await host.SelectCards("Choose trashed Treasures to gain.", trashed);

                if (gained.Any())
                {
                    await host.GainFrom(gained, Zone.Trash);
                }
            }
        }