language fix

This commit is contained in:
Max-Wilhelm Bruker 2009-08-27 15:28:19 +02:00
parent 5324012582
commit a5280946c2
16 changed files with 1026 additions and 581 deletions

View file

@ -103,7 +103,6 @@ void ChatWidget::retranslateUi()
joinButton->setText(tr("Joi&n"));
QTreeWidgetItem *header = channelList->headerItem();
Q_ASSERT(header != 0);
header->setText(0, tr("Channel"));
header->setText(1, tr("Players"));
header->setTextAlignment(1, Qt::AlignRight);

View file

@ -301,9 +301,9 @@ PendingCommand *Client::shuffle()
return cmd("shuffle");
}
PendingCommand *Client::rollDice(unsigned int sides)
PendingCommand *Client::rollDie(unsigned int sides)
{
return cmd(QString("roll_dice|%1").arg(sides));
return cmd(QString("roll_die|%1").arg(sides));
}
PendingCommand *Client::drawCards(unsigned int number)

View file

@ -106,7 +106,7 @@ public slots:
PendingCommand *login(const QString &name, const QString &pass);
PendingCommand *say(const QString &s);
PendingCommand *shuffle();
PendingCommand *rollDice(unsigned int sides);
PendingCommand *rollDie(unsigned int sides);
PendingCommand *drawCards(unsigned int number);
PendingCommand *moveCard(int cardid, const QString &startzone, const QString &targetzone, int x, int y = 0, bool faceDown = false);
PendingCommand *createToken(const QString &zone, const QString &name, const QString &powtough, int x, int y);

View file

@ -23,33 +23,25 @@ Game::Game(CardDatabase *_db, Client *_client, QGraphicsScene *_scene, QMenu *_a
connect(client, SIGNAL(gameEvent(const ServerEventData &)), this, SLOT(gameEvent(const ServerEventData &)));
connect(client, SIGNAL(playerListReceived(QList<ServerPlayer *>)), this, SLOT(playerListReceived(QList<ServerPlayer *>)));
aUntapAll = new QAction(tr("&Untap all permanents"), this);
aUntapAll->setShortcut(tr("Ctrl+U"));
aUntapAll = new QAction(this);
connect(aUntapAll, SIGNAL(triggered()), this, SLOT(actUntapAll()));
aDecLife = new QAction(tr("&Decrement life"), this);
aDecLife->setShortcut(tr("F11"));
aDecLife = new QAction(this);
connect(aDecLife, SIGNAL(triggered()), this, SLOT(actDecLife()));
aIncLife = new QAction(tr("&Increment life"), this);
aIncLife->setShortcut(tr("F12"));
aIncLife = new QAction(this);
connect(aIncLife, SIGNAL(triggered()), this, SLOT(actIncLife()));
aSetLife = new QAction(tr("&Set life"), this);
aSetLife->setShortcut(tr("Ctrl+L"));
aSetLife = new QAction(this);
connect(aSetLife, SIGNAL(triggered()), this, SLOT(actSetLife()));
aRollDice = new QAction(tr("R&oll dice..."), this);
aRollDice->setShortcut(tr("Ctrl+I"));
connect(aRollDice, SIGNAL(triggered()), this, SLOT(actRollDice()));
aRollDie = new QAction(this);
connect(aRollDie, SIGNAL(triggered()), this, SLOT(actRollDie()));
aCreateToken = new QAction(tr("&Create token..."), this);
aCreateToken->setShortcut(tr("Ctrl+T"));
aCreateToken = new QAction(this);
connect(aCreateToken, SIGNAL(triggered()), this, SLOT(actCreateToken()));
aNextPhase = new QAction(tr("Next &phase"), this);
aNextPhase->setShortcut(tr("Ctrl+Space"));
aNextPhase = new QAction(this);
connect(aNextPhase, SIGNAL(triggered()), this, SLOT(actNextPhase()));
aNextTurn = new QAction(tr("Next &turn"), this);
aNextTurn->setShortcuts(QList<QKeySequence>() << QKeySequence(tr("Ctrl+Return")) << QKeySequence(tr("Ctrl+Enter")));
aNextTurn = new QAction(this);
connect(aNextTurn, SIGNAL(triggered()), this, SLOT(actNextTurn()));
actionsMenu->addAction(aNextPhase);
@ -61,25 +53,25 @@ Game::Game(CardDatabase *_db, Client *_client, QGraphicsScene *_scene, QMenu *_a
actionsMenu->addAction(aIncLife);
actionsMenu->addAction(aSetLife);
actionsMenu->addSeparator();
actionsMenu->addAction(aRollDice);
actionsMenu->addAction(aRollDie);
actionsMenu->addSeparator();
actionsMenu->addAction(aCreateToken);
actionsMenu->addSeparator();
sayMenu = actionsMenu->addMenu(tr("S&ay"));
sayMenu = actionsMenu->addMenu(QString());
initSayMenu();
aTap = new QAction(tr("&Tap"), this);
aUntap = new QAction(tr("&Untap"), this);
aDoesntUntap = new QAction(tr("Toggle &normal untapping"), this);
aFlip = new QAction(tr("&Flip"), this);
aAddCounter = new QAction(tr("&Add counter"), this);
aRemoveCounter = new QAction(tr("&Remove counter"), this);
aSetCounters = new QAction(tr("&Set counters..."), this);
aTap = new QAction(this);
aUntap = new QAction(this);
aDoesntUntap = new QAction(this);
aFlip = new QAction(this);
aAddCounter = new QAction(this);
aRemoveCounter = new QAction(this);
aSetCounters = new QAction(this);
connect(aSetCounters, SIGNAL(triggered()), this, SLOT(actSetCounters()));
aMoveToTopLibrary = new QAction(tr("&top of library"), this);
aMoveToBottomLibrary = new QAction(tr("&bottom of library"), this);
aMoveToGraveyard = new QAction(tr("&graveyard"), this);
aMoveToExile = new QAction(tr("&exile"), this);
aMoveToTopLibrary = new QAction(this);
aMoveToBottomLibrary = new QAction(this);
aMoveToGraveyard = new QAction(this);
aMoveToExile = new QAction(this);
cardMenu->addAction(aTap);
cardMenu->addAction(aUntap);
@ -91,7 +83,7 @@ Game::Game(CardDatabase *_db, Client *_client, QGraphicsScene *_scene, QMenu *_a
cardMenu->addAction(aRemoveCounter);
cardMenu->addAction(aSetCounters);
cardMenu->addSeparator();
moveMenu = cardMenu->addMenu(tr("&Move to"));
moveMenu = cardMenu->addMenu(QString());
moveMenu->addAction(aMoveToTopLibrary);
moveMenu->addAction(aMoveToBottomLibrary);
@ -118,6 +110,8 @@ Game::Game(CardDatabase *_db, Client *_client, QGraphicsScene *_scene, QMenu *_a
dlgStartGame = new DlgStartGame(db);
connect(dlgStartGame, SIGNAL(newDeckLoaded(const QStringList &)), client, SLOT(submitDeck(const QStringList &)));
connect(dlgStartGame, SIGNAL(finished(int)), this, SLOT(readyStart()));
retranslateUi();
}
Game::~Game()
@ -129,6 +123,45 @@ Game::~Game()
}
}
void Game::retranslateUi()
{
aUntapAll->setText(tr("&Untap all permanents"));
aUntapAll->setShortcut(tr("Ctrl+U"));
aDecLife->setText(tr("&Decrement life"));
aDecLife->setShortcut(tr("F11"));
aIncLife->setText(tr("&Increment life"));
aIncLife->setShortcut(tr("F12"));
aSetLife->setText(tr("&Set life"));
aSetLife->setShortcut(tr("Ctrl+L"));
aRollDie->setText(tr("R&oll die..."));
aRollDie->setShortcut(tr("Ctrl+I"));
aCreateToken->setText(tr("&Create token..."));
aCreateToken->setShortcut(tr("Ctrl+T"));
aNextPhase->setText(tr("Next &phase"));
aNextPhase->setShortcut(tr("Ctrl+Space"));
aNextTurn->setText(tr("Next &turn"));
aNextTurn->setShortcuts(QList<QKeySequence>() << QKeySequence(tr("Ctrl+Return")) << QKeySequence(tr("Ctrl+Enter")));
sayMenu->setTitle(tr("S&ay"));
aTap->setText(tr("&Tap"));
aUntap->setText(tr("&Untap"));
aDoesntUntap->setText(tr("Toggle &normal untapping"));
aFlip->setText(tr("&Flip"));
aAddCounter->setText(tr("&Add counter"));
aRemoveCounter->setText(tr("&Remove counter"));
aSetCounters->setText(tr("&Set counters..."));
aMoveToTopLibrary->setText(tr("&top of library"));
aMoveToBottomLibrary->setText(tr("&bottom of library"));
aMoveToGraveyard->setText(tr("&graveyard"));
aMoveToExile->setText(tr("&exile"));
moveMenu->setTitle(tr("&Move to"));
for (int i = 0; i < players.size(); ++i)
players[i]->retranslateUi();
}
void Game::initSayMenu()
{
sayMenu->clear();
@ -238,11 +271,11 @@ void Game::gameEvent(const ServerEventData &msg)
case eventShuffle:
emit logShuffle(p);
break;
case eventRollDice: {
case eventRollDie: {
QStringList data = msg.getEventData();
int sides = data[0].toInt();
int roll = data[1].toInt();
emit logRollDice(p, sides, roll);
emit logRollDie(p, sides, roll);
break;
}
case eventSetActivePlayer: {
@ -279,12 +312,24 @@ void Game::gameEvent(const ServerEventData &msg)
}
case eventDumpZone: {
QStringList data = msg.getEventData();
emit logDumpZone(p, data[1], players.findPlayer(data[0].toInt())->getName(), data[2].toInt());
Player *zoneOwner = players.findPlayer(data[0].toInt());
if (!zoneOwner)
break;
CardZone *zone = zoneOwner->getZones()->findZone(data[1]);
if (!zone)
break;
emit logDumpZone(p, zone, zoneOwner, data[2].toInt());
break;
}
case eventStopDumpZone: {
QStringList data = msg.getEventData();
emit logStopDumpZone(p, data[1], players.findPlayer(data[0].toInt())->getName());
Player *zoneOwner = players.findPlayer(data[0].toInt());
if (!zoneOwner)
break;
CardZone *zone = zoneOwner->getZones()->findZone(data[1]);
if (!zone)
break;
emit logStopDumpZone(p, zone, zoneOwner);
break;
}
case eventMoveCard: {
@ -345,12 +390,12 @@ void Game::actSetLife()
client->setCounter("life", life);
}
void Game::actRollDice()
void Game::actRollDie()
{
bool ok;
int sides = QInputDialog::getInteger(0, tr("Roll dice"), tr("Number of sides:"), 20, 2, 1000, 1, &ok);
int sides = QInputDialog::getInteger(0, tr("Roll die"), tr("Number of sides:"), 20, 2, 1000, 1, &ok);
if (ok)
client->rollDice(sides);
client->rollDie(sides);
}
void Game::actCreateToken()

View file

@ -24,7 +24,7 @@ private:
QMenu *actionsMenu, *sayMenu, *cardMenu, *moveMenu;
QAction *aTap, *aUntap, *aDoesntUntap, *aFlip, *aAddCounter, *aRemoveCounter, *aSetCounters,
*aMoveToTopLibrary, *aMoveToBottomLibrary, *aMoveToGraveyard, *aMoveToExile,
*aNextPhase, *aNextTurn, *aUntapAll, *aDecLife, *aIncLife, *aSetLife, *aRollDice, *aCreateToken;
*aNextPhase, *aNextTurn, *aUntapAll, *aDecLife, *aIncLife, *aSetLife, *aRollDie, *aCreateToken;
DlgStartGame *dlgStartGame;
CardDatabase *db;
@ -45,7 +45,7 @@ private slots:
void actIncLife();
void actDecLife();
void actSetLife();
void actRollDice();
void actRollDie();
void actCreateToken();
void showCardMenu(QPoint p);
@ -80,7 +80,7 @@ signals:
void logGameStart();
void logSay(Player *player, QString text);
void logShuffle(Player *player);
void logRollDice(Player *player, int sides, int roll);
void logRollDie(Player *player, int sides, int roll);
void logDraw(Player *player, int number);
void logMoveCard(Player *player, QString cardName, CardZone *startZone, int oldX, CardZone *targetZone, int newX);
void logCreateToken(Player *player, QString cardName);
@ -88,14 +88,15 @@ signals:
void logSetTapped(Player *player, QString cardName, bool tapped);
void logSetCounter(Player *player, QString counterName, int value, int oldValue);
void logSetDoesntUntap(Player *player, QString cardName, bool doesntUntap);
void logDumpZone(Player *player, QString zoneName, QString zoneOwner, int numberCards);
void logStopDumpZone(Player *player, QString zoneName, QString zoneOwner);
void logDumpZone(Player *player, CardZone *zone, Player *zoneOwner, int numberCards);
void logStopDumpZone(Player *player, CardZone *zone, Player *zoneOwner);
void logSetActivePlayer(Player *player);
void setActivePhase(int phase);
public:
Game(CardDatabase *_db, Client *_client, QGraphicsScene *_scene, QMenu *_actionsMenu, QMenu *_cardMenu, int playerId, const QString &playerName, QObject *parent = 0);
~Game();
Player *getLocalPlayer() const { return localPlayer; }
void retranslateUi();
void restartGameDialog();
void hoverCardEvent(CardItem *card);
};

View file

@ -3,7 +3,7 @@
#include "player.h"
#include "cardzone.h"
QString MessageLogWidget::sanitizeHtml(QString dirty)
QString MessageLogWidget::sanitizeHtml(QString dirty) const
{
return dirty
.replace("&", "&amp;")
@ -11,6 +11,29 @@ QString MessageLogWidget::sanitizeHtml(QString dirty)
.replace(">", "&gt;");
}
QString MessageLogWidget::trZoneName(CardZone *zone, Player *owner, bool hisOwn, GrammaticalCase gc) const
{
if (zone->getName() == "hand")
switch (gc) {
// case CaseNominative: return hisOwn ? tr("his hand") : tr("%1's hand").arg(owner->getName());
case CaseGenitive: return hisOwn ? tr("of his hand") : tr("of %1's hand").arg(owner->getName());
case CaseAccusative: return hisOwn ? tr("his hand") : tr("%1's hand").arg(owner->getName());
}
else if (zone->getName() == "deck")
switch (gc) {
// case CaseNominative: return hisOwn ? tr("his library") : tr("%1's library").arg(owner->getName());
case CaseGenitive: return hisOwn ? tr("of his library") : tr("of %1's library").arg(owner->getName());
case CaseAccusative: return hisOwn ? tr("his library") : tr("%1's library").arg(owner->getName());
}
else if (zone->getName() == "sb")
switch (gc) {
// case CaseNominative: return hisOwn ? tr("his sideboard") : tr("%1's sideboard").arg(owner->getName());
case CaseGenitive: return hisOwn ? tr("of his sideboard") : tr("of %1's sideboard").arg(owner->getName());
case CaseAccusative: return hisOwn ? tr("his sideboard") : tr("%1's sideboard").arg(owner->getName());
}
return QString();
}
void MessageLogWidget::logConnecting(QString hostname)
{
append(tr("Connecting to %1...").arg(sanitizeHtml(hostname)));
@ -69,7 +92,7 @@ void MessageLogWidget::logReadyStart(Player *player)
void MessageLogWidget::logGameStart()
{
append(tr("Game has started."));
append(tr("The game has started."));
}
void MessageLogWidget::logSay(Player *player, QString message)
@ -79,20 +102,20 @@ void MessageLogWidget::logSay(Player *player, QString message)
void MessageLogWidget::logShuffle(Player *player)
{
append(tr("%1 shuffles his/her library").arg(sanitizeHtml(player->getName())));
append(tr("%1 shuffles his library.").arg(sanitizeHtml(player->getName())));
}
void MessageLogWidget::logRollDice(Player *player, int sides, int roll)
void MessageLogWidget::logRollDie(Player *player, int sides, int roll)
{
append(tr("%1 rolled a %2 with a %3-sided dice").arg(sanitizeHtml(player->getName())).arg(roll).arg(sides));
append(tr("%1 rolls a %2 with a %3-sided die.").arg(sanitizeHtml(player->getName())).arg(roll).arg(sides));
}
void MessageLogWidget::logDraw(Player *player, int number)
{
if (number == 1)
append(tr("%1 draws a card").arg(sanitizeHtml(player->getName())));
append(tr("%1 draws a card.").arg(sanitizeHtml(player->getName())));
else
append(tr("%1 draws %2 cards").arg(sanitizeHtml(player->getName())).arg(number));
append(tr("%1 draws %2 cards.").arg(sanitizeHtml(player->getName())).arg(number));
}
void MessageLogWidget::logMoveCard(Player *player, QString cardName, CardZone *startZone, int oldX, CardZone *targetZone, int newX)
@ -102,60 +125,78 @@ void MessageLogWidget::logMoveCard(Player *player, QString cardName, CardZone *s
if (((startName == "table") && (targetName == "table")) || ((startName == "hand") && (targetName == "hand")))
return;
QString fromStr;
bool cardNameContainsStartZone = false;
if (startName == "table")
fromStr = tr("from table");
fromStr = tr(" from table");
else if (startName == "grave")
fromStr = tr("from graveyard");
fromStr = tr(" from graveyard");
else if (startName == "rfg")
fromStr = tr("from exile");
fromStr = tr(" from exile");
else if (startName == "hand")
fromStr = tr("from hand");
fromStr = tr(" from hand");
else if (startName == "deck") {
if (oldX == startZone->getCards().size() - 1)
fromStr = tr("from the bottom of his library");
else if (oldX == 0)
fromStr = tr("from the top of his library");
else
fromStr = tr("from library");
if (oldX == startZone->getCards().size() - 1) {
if (cardName.isEmpty()) {
cardName = tr("the bottom card of his library");
cardNameContainsStartZone = true;
} else
fromStr = tr(" from the bottom of his library");
} else if (oldX == 0) {
if (cardName.isEmpty()) {
cardName = tr("the top card of his library");
cardNameContainsStartZone = true;
} else
fromStr = tr(" from the top of his library");
} else
fromStr = tr(" from library");
} else if (startName == "sb")
fromStr = tr("from sideboard");
fromStr = tr(" from sideboard");
QString finalStr;
if (targetName == "table")
finalStr = tr("%1 puts %2 into play %3");
finalStr = tr("%1 puts %2 into play%3.");
else if (targetName == "grave")
finalStr = tr("%1 puts %2 %3 into graveyard");
finalStr = tr("%1 puts %2%3 into graveyard.");
else if (targetName == "rfg")
finalStr = tr("%1 exiles %2 %3");
finalStr = tr("%1 exiles %2%3.");
else if (targetName == "hand")
finalStr = tr("%1 moves %2 %3 to hand");
finalStr = tr("%1 moves %2%3 to hand.");
else if (targetName == "deck") {
if (newX == -1)
finalStr = tr("%1 puts %2 %3 into his library");
finalStr = tr("%1 puts %2%3 into his library.");
else if (newX == targetZone->getCards().size())
finalStr = tr("%1 puts %2 %3 on bottom of his library");
finalStr = tr("%1 puts %2%3 on bottom of his library.");
else if (newX == 0)
finalStr = tr("%1 puts %2 %3 on top of his library");
finalStr = tr("%1 puts %2%3 on top of his library.");
else
finalStr = tr("%1 puts %2 %3 into his library at position %4");
finalStr = tr("%1 puts %2%3 into his library at position %4.");
} else if (targetName == "sb")
finalStr = tr("%1 moves %2 %3 to sideboard");
finalStr = tr("%1 moves %2%3 to sideboard.");
append(finalStr.arg(sanitizeHtml(player->getName())).arg(cardName.isEmpty() ? tr("a card") : QString("<font color=\"blue\">%1</font>").arg(sanitizeHtml(cardName))).arg(fromStr).arg(newX));
QString cardStr;
if (cardNameContainsStartZone)
cardStr = cardName;
else if (cardName.isEmpty())
cardStr = tr("a card");
else
cardStr = QString("<font color=\"blue\">%1</font>").arg(sanitizeHtml(cardName));
append(finalStr.arg(sanitizeHtml(player->getName())).arg(cardStr).arg(fromStr).arg(newX));
}
void MessageLogWidget::logCreateToken(Player *player, QString cardName)
{
append(tr("%1 creates token: %2").arg(sanitizeHtml(player->getName())).arg(QString("<font color=\"blue\">%1</font>").arg(sanitizeHtml(cardName))));
append(tr("%1 creates token: %2.").arg(sanitizeHtml(player->getName())).arg(QString("<font color=\"blue\">%1</font>").arg(sanitizeHtml(cardName))));
}
void MessageLogWidget::logSetCardCounters(Player *player, QString cardName, int value, int oldValue)
{
QString finalStr;
if (value > oldValue)
finalStr = tr("%1 places %2 counters on %3 (now %4)");
finalStr = tr("%1 places %2 counters on %3 (now %4).");
else
finalStr = tr("%1 removes %2 counters from %3 (now %4)");
finalStr = tr("%1 removes %2 counters from %3 (now %4).");
append(finalStr.arg(sanitizeHtml(player->getName())).arg(abs(oldValue - value)).arg(QString("<font color=\"blue\">%1</font>").arg(sanitizeHtml(cardName))).arg(value));
}
@ -166,12 +207,12 @@ void MessageLogWidget::logSetTapped(Player *player, QString cardName, bool tappe
cardStr = tr("his permanents");
else
cardStr = QString("<font color=\"blue\">%1</font>").arg(sanitizeHtml(cardName));
append(tr("%1 %2 %3").arg(sanitizeHtml(player->getName())).arg(tapped ? tr("taps") : tr("untaps")).arg(cardStr));
append(tr("%1 %2 %3.").arg(sanitizeHtml(player->getName())).arg(tapped ? tr("taps") : tr("untaps")).arg(cardStr));
}
void MessageLogWidget::logSetCounter(Player *player, QString counterName, int value, int oldValue)
{
append(tr("%1 sets counter \"%2\" to %3 (%4%5)").arg(sanitizeHtml(player->getName())).arg(counterName).arg(value).arg(value > oldValue ? "+" : "").arg(value - oldValue));
append(tr("%1 sets counter \"%2\" to %3 (%4%5).").arg(sanitizeHtml(player->getName())).arg(counterName).arg(value).arg(value > oldValue ? "+" : "").arg(value - oldValue));
}
void MessageLogWidget::logSetDoesntUntap(Player *player, QString cardName, bool doesntUntap)
@ -184,17 +225,18 @@ void MessageLogWidget::logSetDoesntUntap(Player *player, QString cardName, bool
append(finalStr.arg(sanitizeHtml(player->getName())).arg(QString("<font color=\"blue\">%1</font>").arg(sanitizeHtml(cardName))));
}
void MessageLogWidget::logDumpZone(Player *player, QString zoneName, QString zoneOwner, int numberCards)
void MessageLogWidget::logDumpZone(Player *player, CardZone *zone, Player *zoneOwner, int numberCards)
{
if (numberCards != -1)
append(tr("%1 is looking at the top %2 cards of %3's %4").arg(sanitizeHtml(player->getName())).arg(numberCards).arg(zoneOwner).arg(zoneName));
append(tr("%1 is looking at the top %2 cards %3.").arg(sanitizeHtml(player->getName())).arg(numberCards).arg(trZoneName(zone, zoneOwner, zoneOwner == player, CaseGenitive)));
else
append(tr("%1 is looking at %2's %3").arg(sanitizeHtml(player->getName())).arg(zoneOwner).arg(zoneName));
append(tr("%1 is looking at %2.").arg(sanitizeHtml(player->getName())).arg(trZoneName(zone, zoneOwner, zoneOwner == player, CaseAccusative)));
}
void MessageLogWidget::logStopDumpZone(Player *player, QString zoneName, QString zoneOwner)
void MessageLogWidget::logStopDumpZone(Player *player, CardZone *zone, Player *zoneOwner)
{
append(tr("%1 stops looking at %2's %3").arg(sanitizeHtml(player->getName())).arg(zoneOwner).arg(zoneName));
QString zoneName = trZoneName(zone, zoneOwner, zoneOwner == player, CaseAccusative);
append(tr("%1 stops looking at %2.").arg(sanitizeHtml(player->getName())).arg(zoneName));
}
void MessageLogWidget::logSetActivePlayer(Player *player)
@ -218,7 +260,7 @@ void MessageLogWidget::logSetActivePhase(int phase)
case 7: phaseName = tr("combat damage step"); break;
case 8: phaseName = tr("end of combat step"); break;
case 9: phaseName = tr("second main phase"); break;
case 10: phaseName = tr("end of turn step"); break;
case 10: phaseName = tr("ending phase"); break;
}
append("<font color=\"green\">" + tr("It is now the %1.").arg(phaseName) + "</font>");
}
@ -232,7 +274,7 @@ void MessageLogWidget::connectToGame(Game *game)
connect(game, SIGNAL(logGameStart()), this, SLOT(logGameStart()));
connect(game, SIGNAL(logSay(Player *, QString)), this, SLOT(logSay(Player *, QString)));
connect(game, SIGNAL(logShuffle(Player *)), this, SLOT(logShuffle(Player *)));
connect(game, SIGNAL(logRollDice(Player *, int, int)), this, SLOT(logRollDice(Player *, int, int)));
connect(game, SIGNAL(logRollDie(Player *, int, int)), this, SLOT(logRollDie(Player *, int, int)));
connect(game, SIGNAL(logDraw(Player *, int)), this, SLOT(logDraw(Player *, int)));
connect(game, SIGNAL(logMoveCard(Player *, QString, CardZone *, int, CardZone *, int)), this, SLOT(logMoveCard(Player *, QString, CardZone *, int, CardZone *, int)));
connect(game, SIGNAL(logCreateToken(Player *, QString)), this, SLOT(logCreateToken(Player *, QString)));
@ -240,8 +282,8 @@ void MessageLogWidget::connectToGame(Game *game)
connect(game, SIGNAL(logSetTapped(Player *, QString, bool)), this, SLOT(logSetTapped(Player *, QString, bool)));
connect(game, SIGNAL(logSetCounter(Player *, QString, int, int)), this, SLOT(logSetCounter(Player *, QString, int, int)));
connect(game, SIGNAL(logSetDoesntUntap(Player *, QString, bool)), this, SLOT(logSetDoesntUntap(Player *, QString, bool)));
connect(game, SIGNAL(logDumpZone(Player *, QString, QString, int)), this, SLOT(logDumpZone(Player *, QString, QString, int)));
connect(game, SIGNAL(logStopDumpZone(Player *, QString, QString)), this, SLOT(logStopDumpZone(Player *, QString, QString)));
connect(game, SIGNAL(logDumpZone(Player *, CardZone *, Player *, int)), this, SLOT(logDumpZone(Player *, CardZone *, Player *, int)));
connect(game, SIGNAL(logStopDumpZone(Player *, CardZone *, Player *)), this, SLOT(logStopDumpZone(Player *, CardZone *, Player *)));
connect(game, SIGNAL(logSetActivePlayer(Player *)), this, SLOT(logSetActivePlayer(Player *)));
connect(game, SIGNAL(setActivePhase(int)), this, SLOT(logSetActivePhase(int)));
}

View file

@ -12,7 +12,9 @@ class CardZone;
class MessageLogWidget : public QTextEdit {
Q_OBJECT
private:
QString sanitizeHtml(QString dirty);
enum GrammaticalCase { /*CaseNominative, */CaseGenitive, CaseAccusative };
QString sanitizeHtml(QString dirty) const;
QString trZoneName(CardZone *zone, Player *player, bool hisOwn, GrammaticalCase gc) const;
public slots:
void logConnecting(QString hostname);
void logConnected(const QStringList WelcomeMsg);
@ -27,7 +29,7 @@ private slots:
void logGameStart();
void logSay(Player *player, QString message);
void logShuffle(Player *player);
void logRollDice(Player *player, int sides, int roll);
void logRollDie(Player *player, int sides, int roll);
void logDraw(Player *player, int number);
void logMoveCard(Player *player, QString cardName, CardZone *startZone, int oldX, CardZone *targetZone, int newX);
void logCreateToken(Player *player, QString cardName);
@ -35,8 +37,8 @@ private slots:
void logSetTapped(Player *player, QString cardName, bool tapped);
void logSetCounter(Player *player, QString counterName, int value, int oldValue);
void logSetDoesntUntap(Player *player, QString cardName, bool doesntUntap);
void logDumpZone(Player *player, QString zoneName, QString zoneOwner, int numberCards);
void logStopDumpZone(Player *player, QString zoneName, QString zoneOwner);
void logDumpZone(Player *player, CardZone *zone, Player *zoneOwner, int numberCards);
void logStopDumpZone(Player *player, CardZone *zone, Player *zoneOwner);
void logSetActivePlayer(Player *player);
void logSetActivePhase(int phase);
public:

View file

@ -17,50 +17,44 @@ Player::Player(const QString &_name, int _id, QPointF _base, bool _local, CardDa
_scene->addItem(area);
if (local) {
aMoveHandToTopLibrary = new QAction(tr("Move to &top of library"), this);
aMoveHandToTopLibrary = new QAction(this);
connect(aMoveHandToTopLibrary, SIGNAL(triggered()), this, SLOT(actMoveHandToTopLibrary()));
aMoveHandToBottomLibrary = new QAction(tr("Move to &bottom of library"), this);
aMoveHandToBottomLibrary = new QAction(this);
connect(aMoveHandToBottomLibrary, SIGNAL(triggered()), this, SLOT(actMoveHandToBottomLibrary()));
aViewLibrary = new QAction(tr("&View library"), this);
aViewLibrary->setShortcut(tr("F3"));
aViewLibrary = new QAction(this);
connect(aViewLibrary, SIGNAL(triggered()), this, SLOT(actViewLibrary()));
aViewTopCards = new QAction(tr("View &top cards of library..."), this);
aViewTopCards = new QAction(this);
connect(aViewTopCards, SIGNAL(triggered()), this, SLOT(actViewTopCards()));
}
aViewGraveyard = new QAction(tr("&View graveyard"), this);
if (local)
aViewGraveyard->setShortcut(tr("F4"));
aViewGraveyard = new QAction(this);
connect(aViewGraveyard, SIGNAL(triggered()), this, SLOT(actViewGraveyard()));
aViewRfg = new QAction(tr("&View removed cards"), this);
aViewRfg = new QAction(this);
connect(aViewRfg, SIGNAL(triggered()), this, SLOT(actViewRfg()));
if (local) {
aViewSideboard = new QAction(tr("&View sideboard"), this);
aViewSideboard = new QAction(this);
connect(aViewSideboard, SIGNAL(triggered()), this, SLOT(actViewSideboard()));
aDrawCard = new QAction(tr("&Draw card"), this);
aDrawCard = new QAction(this);
connect(aDrawCard, SIGNAL(triggered()), this, SLOT(actDrawCard()));
aDrawCard->setShortcut(tr("Ctrl+D"));
aDrawCards = new QAction(tr("D&raw cards..."), this);
aDrawCards = new QAction(this);
connect(aDrawCards, SIGNAL(triggered()), this, SLOT(actDrawCards()));
aDrawCards->setShortcut(tr("Ctrl+E"));
aShuffle = new QAction(tr("&Shuffle"), this);
aShuffle = new QAction(this);
connect(aShuffle, SIGNAL(triggered()), this, SLOT(actShuffle()));
aShuffle->setShortcut(tr("Ctrl+S"));
}
playerMenu = new QMenu(tr("Player \"%1\"").arg(name));
playerMenu = new QMenu(QString());
if (local) {
QMenu *handMenu = playerMenu->addMenu(tr("&Hand"));
handMenu = playerMenu->addMenu(QString());
handMenu->addAction(aMoveHandToTopLibrary);
handMenu->addAction(aMoveHandToBottomLibrary);
zones.findZone("hand")->setMenu(handMenu);
QMenu *libraryMenu = playerMenu->addMenu(tr("&Library"));
libraryMenu = playerMenu->addMenu(QString());
libraryMenu->addAction(aDrawCard);
libraryMenu->addAction(aDrawCards);
libraryMenu->addSeparator();
@ -69,21 +63,27 @@ Player::Player(const QString &_name, int _id, QPointF _base, bool _local, CardDa
libraryMenu->addAction(aViewLibrary);
libraryMenu->addAction(aViewTopCards);
zones.findZone("deck")->setMenu(libraryMenu, aDrawCard);
} else {
handMenu = 0;
libraryMenu = 0;
}
QMenu *graveMenu = playerMenu->addMenu(tr("&Graveyard"));
graveMenu = playerMenu->addMenu(QString());
graveMenu->addAction(aViewGraveyard);
zones.findZone("grave")->setMenu(graveMenu, aViewGraveyard);
QMenu *rfgMenu = playerMenu->addMenu(tr("&Removed cards"));
rfgMenu = playerMenu->addMenu(QString());
rfgMenu->addAction(aViewRfg);
zones.findZone("rfg")->setMenu(rfgMenu, aViewRfg);
if (local) {
QMenu *sbMenu = playerMenu->addMenu(tr("&Sideboard"));
sbMenu = playerMenu->addMenu(QString());
sbMenu->addAction(aViewSideboard);
zones.findZone("sb")->setMenu(sbMenu, aViewSideboard);
}
} else
sbMenu = 0;
retranslateUi();
}
Player::~Player()
@ -96,6 +96,35 @@ Player::~Player()
delete area;
}
void Player::retranslateUi()
{
aViewGraveyard->setText(tr("&View graveyard"));
aViewRfg->setText(tr("&View exile"));
playerMenu->setTitle(tr("Player \"%1\"").arg(name));
graveMenu->setTitle(tr("&Graveyard"));
rfgMenu->setTitle(tr("&Exile"));
if (local) {
aMoveHandToTopLibrary->setText(tr("Move to &top of library"));
aMoveHandToBottomLibrary->setText(tr("Move to &bottom of library"));
aViewLibrary->setText(tr("&View library"));
aViewLibrary->setShortcut(tr("F3"));
aViewTopCards->setText(tr("View &top cards of library..."));
aViewGraveyard->setShortcut(tr("F4"));
aViewSideboard->setText(tr("&View sideboard"));
aDrawCard->setText(tr("&Draw card"));
aDrawCard->setShortcut(tr("Ctrl+D"));
aDrawCards->setText(tr("D&raw cards..."));
aDrawCards->setShortcut(tr("Ctrl+E"));
aShuffle->setText(tr("&Shuffle"));
aShuffle->setShortcut(tr("Ctrl+S"));
handMenu->setTitle(tr("&Hand"));
sbMenu->setTitle(tr("&Sideboard"));
libraryMenu->setTitle(tr("&Library"));
}
}
void Player::actMoveHandToTopLibrary()
{
zones.findZone("hand")->moveAllToZone("deck", 0);

View file

@ -43,7 +43,7 @@ private slots:
void actViewRfg();
void actViewSideboard();
private:
QMenu *playerMenu;
QMenu *playerMenu, *handMenu, *graveMenu, *rfgMenu, *libraryMenu, *sbMenu;
QAction *aMoveHandToTopLibrary, *aMoveHandToBottomLibrary,
*aViewLibrary, *aViewTopCards, *aViewGraveyard, *aViewRfg, *aViewSideboard,
*aDrawCard, *aDrawCards, *aShuffle;
@ -63,6 +63,7 @@ public:
void addZone(CardZone *z);
Player(const QString &_name, int _id, QPointF _base, bool _local, CardDatabase *_db, Client *_client, QGraphicsScene *_scene, Game *_parent);
~Player();
void retranslateUi();
QMenu *getPlayerMenu() const { return playerMenu; }
int getId() const { return id; }
QString getName() const { return name; }

View file

@ -17,7 +17,7 @@ ServerEventData::ServerEventData(const QString &line)
eventHash.insert("setup_zones", eventSetupZones);
eventHash.insert("game_start", eventGameStart);
eventHash.insert("shuffle", eventShuffle);
eventHash.insert("roll_dice", eventRollDice);
eventHash.insert("roll_die", eventRollDie);
eventHash.insert("draw", eventDraw);
eventHash.insert("move_card", eventMoveCard);
eventHash.insert("create_token", eventCreateToken);

View file

@ -15,7 +15,7 @@ enum ServerEventType {
eventSetupZones,
eventGameStart,
eventShuffle,
eventRollDice,
eventRollDie,
eventDraw,
eventMoveCard,
eventCreateToken,

View file

@ -219,6 +219,8 @@ void MainWindow::retranslateUi()
cardInfo->retranslateUi();
chatWidget->retranslateUi();
gameSelector->retranslateUi();
if (game)
game->retranslateUi();
}
void MainWindow::createActions()

File diff suppressed because it is too large Load diff

View file

@ -73,12 +73,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/chatwidget.cpp" line="107"/>
<location filename="../src/chatwidget.cpp" line="106"/>
<source>Channel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/chatwidget.cpp" line="108"/>
<location filename="../src/chatwidget.cpp" line="107"/>
<source>Players</source>
<translation type="unfinished"></translation>
</message>
@ -250,222 +250,222 @@
<context>
<name>Game</name>
<message>
<location filename="../src/game.cpp" line="26"/>
<location filename="../src/game.cpp" line="128"/>
<source>&amp;Untap all permanents</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="27"/>
<location filename="../src/game.cpp" line="129"/>
<source>Ctrl+U</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="30"/>
<location filename="../src/game.cpp" line="130"/>
<source>&amp;Decrement life</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="31"/>
<location filename="../src/game.cpp" line="131"/>
<source>F11</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="33"/>
<location filename="../src/game.cpp" line="132"/>
<source>&amp;Increment life</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="34"/>
<location filename="../src/game.cpp" line="133"/>
<source>F12</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="36"/>
<location filename="../src/game.cpp" line="134"/>
<source>&amp;Set life</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="37"/>
<location filename="../src/game.cpp" line="135"/>
<source>Ctrl+L</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="40"/>
<source>R&amp;oll dice...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="41"/>
<location filename="../src/game.cpp" line="137"/>
<source>Ctrl+I</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="44"/>
<location filename="../src/game.cpp" line="138"/>
<source>&amp;Create token...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="45"/>
<location filename="../src/game.cpp" line="139"/>
<source>Ctrl+T</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="48"/>
<location filename="../src/game.cpp" line="140"/>
<source>Next &amp;phase</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="49"/>
<location filename="../src/game.cpp" line="141"/>
<source>Ctrl+Space</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="51"/>
<location filename="../src/game.cpp" line="142"/>
<source>Next &amp;turn</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="52"/>
<location filename="../src/game.cpp" line="143"/>
<source>Ctrl+Enter</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="52"/>
<location filename="../src/game.cpp" line="143"/>
<source>Ctrl+Return</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="68"/>
<location filename="../src/game.cpp" line="145"/>
<source>S&amp;ay</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="71"/>
<location filename="../src/game.cpp" line="147"/>
<source>&amp;Tap</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="72"/>
<location filename="../src/game.cpp" line="148"/>
<source>&amp;Untap</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="73"/>
<location filename="../src/game.cpp" line="149"/>
<source>Toggle &amp;normal untapping</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="74"/>
<location filename="../src/game.cpp" line="150"/>
<source>&amp;Flip</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="75"/>
<location filename="../src/game.cpp" line="151"/>
<source>&amp;Add counter</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="76"/>
<location filename="../src/game.cpp" line="152"/>
<source>&amp;Remove counter</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="77"/>
<location filename="../src/game.cpp" line="153"/>
<source>&amp;Set counters...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="79"/>
<location filename="../src/game.cpp" line="154"/>
<source>&amp;top of library</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="80"/>
<location filename="../src/game.cpp" line="155"/>
<source>&amp;bottom of library</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="81"/>
<location filename="../src/game.cpp" line="156"/>
<source>&amp;graveyard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="82"/>
<location filename="../src/game.cpp" line="157"/>
<source>&amp;exile</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="94"/>
<location filename="../src/game.cpp" line="159"/>
<source>&amp;Move to</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="143"/>
<location filename="../src/game.cpp" line="176"/>
<source>F5</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="144"/>
<location filename="../src/game.cpp" line="177"/>
<source>F6</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="145"/>
<location filename="../src/game.cpp" line="178"/>
<source>F7</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="146"/>
<location filename="../src/game.cpp" line="179"/>
<source>F8</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="147"/>
<location filename="../src/game.cpp" line="180"/>
<source>F9</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="148"/>
<location filename="../src/game.cpp" line="181"/>
<source>F10</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="343"/>
<location filename="../src/game.cpp" line="388"/>
<source>Set life</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="343"/>
<location filename="../src/game.cpp" line="388"/>
<source>New life total:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="351"/>
<source>Roll dice</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="351"/>
<location filename="../src/game.cpp" line="396"/>
<source>Number of sides:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="421"/>
<location filename="../src/game.cpp" line="466"/>
<source>Number:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="358"/>
<location filename="../src/game.cpp" line="403"/>
<source>Create token</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="358"/>
<location filename="../src/game.cpp" line="136"/>
<source>R&amp;oll die...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="396"/>
<source>Roll die</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="403"/>
<source>Name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/game.cpp" line="421"/>
<location filename="../src/game.cpp" line="466"/>
<source>Set counters</source>
<translation type="unfinished"></translation>
</message>
@ -694,287 +694,357 @@
<context>
<name>MessageLogWidget</name>
<message>
<location filename="../src/messagelogwidget.cpp" line="16"/>
<location filename="../src/messagelogwidget.cpp" line="39"/>
<source>Connecting to %1...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="21"/>
<location filename="../src/messagelogwidget.cpp" line="44"/>
<source>Connected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="30"/>
<location filename="../src/messagelogwidget.cpp" line="53"/>
<source>Disconnected from server.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="41"/>
<location filename="../src/messagelogwidget.cpp" line="64"/>
<source>Invalid password.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="49"/>
<location filename="../src/messagelogwidget.cpp" line="72"/>
<source>You have joined the game. Player list:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="57"/>
<location filename="../src/messagelogwidget.cpp" line="80"/>
<source>%1 has joined the game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="62"/>
<location filename="../src/messagelogwidget.cpp" line="85"/>
<source>%1 has left the game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="67"/>
<location filename="../src/messagelogwidget.cpp" line="90"/>
<source>%1 is ready to start a new game.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="72"/>
<source>Game has started.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="82"/>
<source>%1 shuffles his/her library</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="87"/>
<source>%1 rolled a %2 with a %3-sided dice</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="93"/>
<source>%1 draws a card</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="95"/>
<source>%1 draws %2 cards</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="144"/>
<source>a card</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="106"/>
<source>from table</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="108"/>
<source>from graveyard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="110"/>
<source>from exile</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="112"/>
<source>from hand</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="115"/>
<source>from the bottom of his library</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="117"/>
<source>from the top of his library</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="119"/>
<source>from library</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="121"/>
<source>from sideboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="125"/>
<source>%1 puts %2 into play %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="127"/>
<source>%1 puts %2 %3 into graveyard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="129"/>
<source>%1 exiles %2 %3</source>
<source>%1 rolls a %2 with a %3-sided die.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="131"/>
<source>%1 moves %2 %3 to hand</source>
<source> from table</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="134"/>
<source>%1 puts %2 %3 into his library</source>
<location filename="../src/messagelogwidget.cpp" line="133"/>
<source> from graveyard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="136"/>
<source>%1 puts %2 %3 on bottom of his library</source>
<location filename="../src/messagelogwidget.cpp" line="135"/>
<source> from exile</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="138"/>
<source>%1 puts %2 %3 on top of his library</source>
<location filename="../src/messagelogwidget.cpp" line="137"/>
<source> from hand</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="140"/>
<source>%1 puts %2 %3 into his library at position %4</source>
<location filename="../src/messagelogwidget.cpp" line="141"/>
<source>the bottom card of his library</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="142"/>
<source>%1 moves %2 %3 to sideboard</source>
<location filename="../src/messagelogwidget.cpp" line="144"/>
<source> from the bottom of his library</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="197"/>
<source>%1 stops looking at %2&apos;s %3</source>
<location filename="../src/messagelogwidget.cpp" line="147"/>
<source>the top card of his library</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="203"/>
<source>It is now %1&apos;s turn.</source>
<location filename="../src/messagelogwidget.cpp" line="150"/>
<source> from the top of his library</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="211"/>
<source>untap step</source>
<location filename="../src/messagelogwidget.cpp" line="152"/>
<source> from library</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="212"/>
<source>upkeep step</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="213"/>
<source>draw step</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="214"/>
<source>first main phase</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="215"/>
<source>beginning of combat step</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="216"/>
<source>declare attackers step</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="217"/>
<source>declare blockers step</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="218"/>
<source>combat damage step</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="219"/>
<source>end of combat step</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="220"/>
<source>second main phase</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="221"/>
<source>end of turn step</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="223"/>
<source>It is now the %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="149"/>
<source>%1 creates token: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="156"/>
<source>%1 places %2 counters on %3 (now %4)</source>
<location filename="../src/messagelogwidget.cpp" line="154"/>
<source> from sideboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="158"/>
<source>%1 removes %2 counters from %3 (now %4)</source>
<source>%1 puts %2 into play%3.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="160"/>
<source>%1 puts %2%3 into graveyard.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="162"/>
<source>%1 exiles %2%3.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="164"/>
<source>%1 moves %2%3 to hand.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="167"/>
<source>%1 puts %2%3 into his library.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="169"/>
<source>%1 %2 %3</source>
<source>%1 puts %2%3 on bottom of his library.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="169"/>
<source>taps</source>
<location filename="../src/messagelogwidget.cpp" line="171"/>
<source>%1 puts %2%3 on top of his library.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="169"/>
<source>untaps</source>
<location filename="../src/messagelogwidget.cpp" line="173"/>
<source>%1 puts %2%3 into his library at position %4.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="174"/>
<source>%1 sets counter &quot;%2&quot; to %3 (%4%5)</source>
<location filename="../src/messagelogwidget.cpp" line="175"/>
<source>%1 moves %2%3 to sideboard.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="181"/>
<source>%1 sets %2 to not untap normally.</source>
<source>a card</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="183"/>
<source>%1 sets %2 to untap normally.</source>
<location filename="../src/messagelogwidget.cpp" line="231"/>
<source>%1 is looking at the top %2 cards %3.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="19"/>
<source>of his hand</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="19"/>
<source>of %1&apos;s hand</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="20"/>
<source>his hand</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="20"/>
<source>%1&apos;s hand</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="25"/>
<source>of his library</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="25"/>
<source>of %1&apos;s library</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="26"/>
<source>his library</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="26"/>
<source>%1&apos;s library</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="31"/>
<source>of his sideboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="31"/>
<source>of %1&apos;s sideboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="32"/>
<source>his sideboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="32"/>
<source>%1&apos;s sideboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="95"/>
<source>The game has started.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="116"/>
<source>%1 draws a card.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="118"/>
<source>%1 draws %2 cards.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="190"/>
<source>%1 is looking at the top %2 cards of %3&apos;s %4</source>
<source>%1 creates token: %2.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="192"/>
<source>%1 is looking at %2&apos;s %3</source>
<location filename="../src/messagelogwidget.cpp" line="197"/>
<source>%1 places %2 counters on %3 (now %4).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="166"/>
<location filename="../src/messagelogwidget.cpp" line="199"/>
<source>%1 removes %2 counters from %3 (now %4).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="210"/>
<source>%1 %2 %3.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="215"/>
<source>%1 sets counter &quot;%2&quot; to %3 (%4%5).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="233"/>
<source>%1 is looking at %2.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="239"/>
<source>%1 stops looking at %2.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="263"/>
<source>ending phase</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="245"/>
<source>It is now %1&apos;s turn.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="105"/>
<source>%1 shuffles his library.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="253"/>
<source>untap step</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="254"/>
<source>upkeep step</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="255"/>
<source>draw step</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="256"/>
<source>first main phase</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="257"/>
<source>beginning of combat step</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="258"/>
<source>declare attackers step</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="259"/>
<source>declare blockers step</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="260"/>
<source>combat damage step</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="261"/>
<source>end of combat step</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="262"/>
<source>second main phase</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="265"/>
<source>It is now the %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="210"/>
<source>taps</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="210"/>
<source>untaps</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="222"/>
<source>%1 sets %2 to not untap normally.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="224"/>
<source>%1 sets %2 to untap normally.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/messagelogwidget.cpp" line="207"/>
<source>his permanents</source>
<translation type="unfinished"></translation>
</message>
@ -1063,127 +1133,127 @@
<context>
<name>Player</name>
<message>
<location filename="../src/player.cpp" line="20"/>
<location filename="../src/player.cpp" line="108"/>
<source>Move to &amp;top of library</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="22"/>
<location filename="../src/player.cpp" line="109"/>
<source>Move to &amp;bottom of library</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="25"/>
<location filename="../src/player.cpp" line="110"/>
<source>&amp;View library</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="26"/>
<location filename="../src/player.cpp" line="111"/>
<source>F3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="28"/>
<location filename="../src/player.cpp" line="112"/>
<source>View &amp;top cards of library...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="32"/>
<location filename="../src/player.cpp" line="101"/>
<source>&amp;View graveyard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="34"/>
<location filename="../src/player.cpp" line="113"/>
<source>F4</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="37"/>
<source>&amp;View removed cards</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="41"/>
<location filename="../src/player.cpp" line="114"/>
<source>&amp;View sideboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="55"/>
<location filename="../src/player.cpp" line="103"/>
<source>Player &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="58"/>
<location filename="../src/player.cpp" line="122"/>
<source>&amp;Hand</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="63"/>
<location filename="../src/player.cpp" line="124"/>
<source>&amp;Library</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="74"/>
<location filename="../src/player.cpp" line="104"/>
<source>&amp;Graveyard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="78"/>
<source>&amp;Removed cards</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="83"/>
<location filename="../src/player.cpp" line="123"/>
<source>&amp;Sideboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="117"/>
<location filename="../src/player.cpp" line="146"/>
<source>View top cards of library</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="117"/>
<location filename="../src/player.cpp" line="146"/>
<source>Number of cards:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="44"/>
<location filename="../src/player.cpp" line="115"/>
<source>&amp;Draw card</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="46"/>
<location filename="../src/player.cpp" line="102"/>
<source>&amp;View exile</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="105"/>
<source>&amp;Exile</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="116"/>
<source>Ctrl+D</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="47"/>
<location filename="../src/player.cpp" line="117"/>
<source>D&amp;raw cards...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="49"/>
<location filename="../src/player.cpp" line="118"/>
<source>Ctrl+E</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="50"/>
<location filename="../src/player.cpp" line="119"/>
<source>&amp;Shuffle</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="52"/>
<location filename="../src/player.cpp" line="120"/>
<source>Ctrl+S</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="151"/>
<location filename="../src/player.cpp" line="180"/>
<source>Draw cards</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/player.cpp" line="151"/>
<location filename="../src/player.cpp" line="180"/>
<source>Number:</source>
<translation type="unfinished"></translation>
</message>

View file

@ -219,7 +219,7 @@ const ServerSocket::CommandProperties ServerSocket::commandList[ServerSocket::nu
<< QVariant::Int, &ServerSocket::cmdDumpZone},
{"stop_dump_zone", true, true, true, QList<QVariant::Type>() << QVariant::Int
<< QVariant::String, &ServerSocket::cmdStopDumpZone},
{"roll_dice", true, true, true, QList<QVariant::Type>() << QVariant::Int, &ServerSocket::cmdRollDice},
{"roll_die", true, true, true, QList<QVariant::Type>() << QVariant::Int, &ServerSocket::cmdRollDie},
{"next_turn", true, true, true, QList<QVariant::Type>(), &ServerSocket::cmdNextTurn},
{"set_active_phase", true, true, true, QList<QVariant::Type>() << QVariant::Int, &ServerSocket::cmdSetActivePhase}
};
@ -662,10 +662,10 @@ ReturnMessage::ReturnCode ServerSocket::cmdStopDumpZone(const QList<QVariant> &p
return ReturnMessage::ReturnOk;
}
ReturnMessage::ReturnCode ServerSocket::cmdRollDice(const QList<QVariant> &params)
ReturnMessage::ReturnCode ServerSocket::cmdRollDie(const QList<QVariant> &params)
{
int sides = params[0].toInt();
emit broadcastEvent(QString("roll_dice|%1|%2").arg(sides).arg(server->getRNG()->getNumber(1, sides)), this);
emit broadcastEvent(QString("roll_die|%1|%2").arg(sides).arg(server->getRNG()->getNumber(1, sides)), this);
return ReturnMessage::ReturnOk;
}

View file

@ -86,7 +86,7 @@ private:
ReturnMessage::ReturnCode cmdListZones(const QList<QVariant> &params);
ReturnMessage::ReturnCode cmdDumpZone(const QList<QVariant> &params);
ReturnMessage::ReturnCode cmdStopDumpZone(const QList<QVariant> &params);
ReturnMessage::ReturnCode cmdRollDice(const QList<QVariant> &params);
ReturnMessage::ReturnCode cmdRollDie(const QList<QVariant> &params);
ReturnMessage::ReturnCode cmdNextTurn(const QList<QVariant> &params);
ReturnMessage::ReturnCode cmdSetActivePhase(const QList<QVariant> &params);