Merge pull request #1051 from poixen/reveal_top_x

Reveal top x cards
This commit is contained in:
ctrlaltca 2015-05-16 18:20:56 +02:00
commit 25f444a5af
3 changed files with 26 additions and 4 deletions

View file

@ -515,8 +515,22 @@ void Player::playerListActionTriggered()
if (menu == mRevealLibrary) {
cmd.set_zone_name("deck");
} else if (menu == mRevealTopCard) {
int decksize = zones.value("deck")->getCards().size();
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: (max. %1)").arg(decksize), defaultNumberTopCards, 1, decksize, 1, &ok);
if (ok) {
cmd.set_zone_name("deck");
cmd.set_top_cards(number);
// backward compatibility: servers before #1051 only permits to reveal the first card
cmd.set_card_id(0);
}
} else if (menu == mRevealHand)
cmd.set_zone_name("hand");
else if (menu == mRevealRandomHandCard) {
@ -624,7 +638,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"));

View file

@ -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];
}

View file

@ -1525,7 +1525,14 @@ Response::ResponseCode Server_Player::cmdRevealCards(const Command_RevealCards &
return Response::RespNameNotFound;
QList<Server_Card *> 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())