private void DoAttack(Player attacker, Player attacked) { List<CardModel> cards = attacked.DrawCards(2); bool hadTreasure = cards.Any(c => c.Is(CardType.Treasure)); IEnumerable<CardModel> gainable = cards.Where(c => c is Silver || c is Gold); if (gainable.Any()) { CardModel treasure = attacker.Chooser.ChooseOneCard(CardChoiceType.TrashForNobleBrigand, "Trash a treasure", ChoiceSource.None, gainable); if (treasure != null) { attacked.Trash(treasure); attacker.GainCard(treasure, null); cards.Remove(treasure); } } foreach (CardModel other in cards) { attacked.DiscardCard(other); } if (!hadTreasure) { attacked.GainCard(typeof(Copper)); } }
private void DoAttack(Player attacker, Player attacked) { List<CardModel> revealed = attacked.DrawCards(2); if (revealed.Count > 0) { string cards = Log.FormatSortedCards(revealed); string target = attacked == attacker ? "You" : attacked.Name; int choice = attacker.Chooser.ChooseOneEffect(attacker == attacked ? EffectChoiceType.DiscardOrPutOnDeckToDraw: EffectChoiceType.ForceDiscardOrPutOnDeck, revealed, target + " revealed " + cards, choices, choices); if (choice == 0) { IEnumerable<CardModel> order = attacked.Chooser.ChooseOrder(CardOrderType.OrderOnDeck, "Put " + cards + " back in any order", revealed); foreach (CardModel c in order) { attacked.Deck.PlaceOnTop(c); } } else { foreach (CardModel c in revealed) { attacked.DiscardCard(c); } } } }