Have servatrice inform players of sideboard size

Ref #142
This commit is contained in:
Daenyth 2014-06-28 00:36:08 -04:00
parent c0bd7db658
commit 4c2a553f03
7 changed files with 38 additions and 12 deletions

View file

@ -86,12 +86,16 @@ void MessageLogWidget::logLeaveSpectator(QString name)
appendHtml(tr("%1 is not watching the game any more.").arg(sanitizeHtml(name)));
}
void MessageLogWidget::logDeckSelect(Player *player, QString deckHash)
void MessageLogWidget::logDeckSelect(Player *player, QString deckHash, int sideboardSize)
{
if (isFemale(player))
appendHtml(tr("%1 has loaded a deck (%2).", "female").arg(sanitizeHtml(player->getName())).arg(deckHash));
const char* gender = isFemale(player) ? "female" : "male";
if (sideboardSize < 0)
appendHtml(tr("%1 has loaded a deck (%2).", gender).arg(sanitizeHtml(player->getName())).arg(deckHash));
else
appendHtml(tr("%1 has loaded a deck (%2).", "male").arg(sanitizeHtml(player->getName())).arg(deckHash));
appendHtml(tr("%1 has loaded a deck with (%2) sideboard cards (%3).", gender).
arg(sanitizeHtml(player->getName())).
arg(sideboardSize).
arg(deckHash));
}
void MessageLogWidget::logReadyStart(Player *player)

View file

@ -48,7 +48,7 @@ public slots:
void logKicked();
void logJoinSpectator(QString name);
void logLeaveSpectator(QString name);
void logDeckSelect(Player *player, QString deckHash);
void logDeckSelect(Player *player, QString deckHash, int sideboardSize);
void logReadyStart(Player *player);
void logNotReadyStart(Player *player);
void logSetSideboardLock(Player *player, bool locked);

View file

@ -1012,7 +1012,10 @@ void TabGame::eventPlayerPropertiesChanged(const Event_PlayerPropertiesChanged &
break;
}
case GameEventContext::DECK_SELECT: {
messageLog->logDeckSelect(player, QString::fromStdString(context.GetExtension(Context_DeckSelect::ext).deck_hash()));
Context_DeckSelect deckSelect = context.GetExtension(Context_DeckSelect::ext);
messageLog->logDeckSelect(player,
QString::fromStdString(deckSelect.deck_hash()),
deckSelect.sideboard_size());
break;
}
case GameEventContext::SET_SIDEBOARD_LOCK: {

View file

@ -633,6 +633,21 @@ QStringList DeckList::getCardList() const
return result.toList();
}
int DeckList::getSideboardSize() const
{
int size = 0;
for (int i = 0; i < root->size(); ++i) {
InnerDecklistNode *node = dynamic_cast<InnerDecklistNode *>(root->at(i));
if (node->getName() != "side")
continue;
for (int j = 0; j < node->size(); j++) {
DecklistCardNode *card = dynamic_cast<DecklistCardNode *>(node->at(j));
size += card->getNumber();
}
}
return size;
}
DecklistCardNode *DeckList::addCard(const QString &cardName, const QString &zoneName)
{
InnerDecklistNode *zoneNode = dynamic_cast<InnerDecklistNode *>(root->findChild(zoneName));

View file

@ -161,6 +161,8 @@ public:
bool isEmpty() const { return root->isEmpty() && name.isEmpty() && comments.isEmpty() && sideboardPlans.isEmpty(); }
QStringList getCardList() const;
int getSideboardSize() const;
QString getDeckHash() const { return deckHash; }
void updateDeckHash();

View file

@ -5,4 +5,5 @@ message Context_DeckSelect {
optional Context_DeckSelect ext = 1002;
}
optional string deck_hash = 1;
optional int32 sideboard_size = 2 [default = -1];
}

View file

@ -657,6 +657,7 @@ Response::ResponseCode Server_Player::cmdDeckSelect(const Command_DeckSelect &cm
Context_DeckSelect context;
context.set_deck_hash(deck->getDeckHash().toStdString());
context.set_sideboard_size(deck->getSideboardSize());
ges.setGameEventContext(context);
Response_DeckDownload *re = new Response_DeckDownload;