diff --git a/cockatrice/src/player.cpp b/cockatrice/src/player.cpp index 0a851de5..276e8ebe 100644 --- a/cockatrice/src/player.cpp +++ b/cockatrice/src/player.cpp @@ -515,8 +515,19 @@ void Player::playerListActionTriggered() if (menu == mRevealLibrary) { cmd.set_zone_name("deck"); } else if (menu == mRevealTopCard) { - cmd.set_zone_name("deck"); - cmd.set_card_id(0); + bool ok; + int number = +#if QT_VERSION < 0x050000 + QInputDialog::getInteger( +#else + QInputDialog::getInt( +#endif + 0, tr("Reveal top cards of library"), tr("Number of cards:"), defaultNumberTopCards, 1, 2000000000, 1, &ok); + if (ok) { + cmd.set_zone_name("deck"); + cmd.set_top_cards(number); + } + } else if (menu == mRevealHand) cmd.set_zone_name("hand"); else if (menu == mRevealRandomHandCard) { @@ -624,7 +635,7 @@ void Player::retranslateUi() aViewLibrary->setText(tr("&View library")); aViewTopCards->setText(tr("View &top cards of library...")); mRevealLibrary->setTitle(tr("Reveal &library to...")); - mRevealTopCard->setTitle(tr("Reveal t&op card to...")); + mRevealTopCard->setTitle(tr("Reveal t&op cards to...")); aAlwaysRevealTopCard->setText(tr("&Always reveal top card")); aOpenDeckInDeckEditor->setText(tr("O&pen deck in deck editor")); aViewSideboard->setText(tr("&View sideboard")); diff --git a/common/pb/command_reveal_cards.proto b/common/pb/command_reveal_cards.proto index af108abc..263fef63 100644 --- a/common/pb/command_reveal_cards.proto +++ b/common/pb/command_reveal_cards.proto @@ -7,4 +7,5 @@ message Command_RevealCards { optional sint32 card_id = 2 [default = -1]; optional sint32 player_id = 3 [default = -1]; optional bool grant_write_access = 4; + optional sint32 top_cards = 5 [default = -1]; } diff --git a/common/server_player.cpp b/common/server_player.cpp index 644d02c7..8347a4eb 100644 --- a/common/server_player.cpp +++ b/common/server_player.cpp @@ -1522,7 +1522,14 @@ Response::ResponseCode Server_Player::cmdRevealCards(const Command_RevealCards & return Response::RespNameNotFound; QList cardsToReveal; - if (!cmd.has_card_id()) + if (cmd.top_cards() != -1) { + for (int i = 0; i < cmd.top_cards(); i++) { + Server_Card *card = zone->getCard(i); + if (!card) + return Response::RespNameNotFound; + cardsToReveal.append(card); + } + } else if (!cmd.has_card_id()) cardsToReveal = zone->getCards(); else if (cmd.card_id() == -2) { if (zone->getCards().isEmpty())