public override void DoSpecializedAction(PlayerState currentPlayer, GameState gameState) { currentPlayer.GainCardFromSupply(Silver.card, gameState); // look at the top card of the deck and discard or put it back Card card = currentPlayer.DrawAndLookAtOneCardFromDeck(); if (card != null) { if (currentPlayer.actions.ShouldPlayerDiscardCardFromDeck(gameState, currentPlayer, card)) { currentPlayer.gameLog.PushScope(); currentPlayer.MoveLookedAtCardsToDiscard(gameState); currentPlayer.gameLog.PlayerDiscardCard(currentPlayer, card); currentPlayer.gameLog.PopScope(); } else { currentPlayer.MoveLookedAtCardToTopOfDeck(card); } } currentPlayer.DrawUntilCountInHand(5); currentPlayer.RequestPlayerTrashCardFromHand(gameState, acceptableCard => !acceptableCard.isTreasure, isOptional: true); }