diff --git a/cockatrice/src/messagelogwidget.cpp b/cockatrice/src/messagelogwidget.cpp index a166e5a9..a2a6d091 100644 --- a/cockatrice/src/messagelogwidget.cpp +++ b/cockatrice/src/messagelogwidget.cpp @@ -3,190 +3,87 @@ #include "cardzone.h" #include "carditem.h" #include "soundengine.h" -#include "tab_supervisor.h" -#include "settingscache.h" #include "pb/serverinfo_user.pb.h" #include "pb/context_move_card.pb.h" #include "pb/context_mulligan.pb.h" -#include -#include + +const QString MessageLogWidget::tableConstant() const +{ + static const QString constant("table"); + return constant; +} + +const QString MessageLogWidget::graveyardConstant() const +{ + static const QString constant("grave"); + return constant; +} + +const QString MessageLogWidget::exileConstant() const +{ + static const QString constant("rfg"); + return constant; +} + +const QString MessageLogWidget::handConstant() const +{ + static const QString constant("hand"); + return constant; +} + +const QString MessageLogWidget::deckConstant() const +{ + static const QString constant("deck"); + return constant; +} + +const QString MessageLogWidget::sideboardConstant() const +{ + static const QString constant("sb"); + return constant; +} + +const QString MessageLogWidget::stackConstant() const +{ + static const QString constant("stack"); + return constant; +} QString MessageLogWidget::sanitizeHtml(QString dirty) const { return dirty - .replace("&", "&") - .replace("<", "<") - .replace(">", ">") - .replace("\"", """); + .replace("&", "&") + .replace("<", "<") + .replace(">", ">") + .replace("\"", """); } -QString MessageLogWidget::cardLink(const QString &cardName) const +QString MessageLogWidget::cardLink(const QString cardName) const { - return QString("%2").arg(cardName).arg(cardName); + return QString("%2") + .arg(cardName) + .arg(cardName); } -void MessageLogWidget::logGameJoined(int gameId) -{ - soundEngine->playSound("player_join"); - appendHtmlServerMessage(tr("You have joined game #%1.").arg(""+ QString::number(gameId) + "")); -} - -void MessageLogWidget::logReplayStarted(int gameId) -{ - appendHtmlServerMessage(tr("You are watching a replay of game #%1.").arg(gameId)); -} - -void MessageLogWidget::logJoin(Player *player) -{ - soundEngine->playSound("player_join"); - appendHtmlServerMessage(tr("%1 has joined the game.").arg(sanitizeHtml(player->getName()))); -} - -void MessageLogWidget::logLeave(Player *player, QString reason) -{ - soundEngine->playSound("player_leave"); - appendHtmlServerMessage(tr("%1 has left the game (%2).").arg(sanitizeHtml(player->getName()), sanitizeHtml(reason))); -} - -void MessageLogWidget::logGameClosed() -{ - appendHtmlServerMessage(tr("The game has been closed.")); -} - -void MessageLogWidget::logKicked() -{ - appendHtmlServerMessage(tr("You have been kicked out of the game."), true); -} - -void MessageLogWidget::logJoinSpectator(QString name) -{ - soundEngine->playSound("spectator_join"); - appendHtmlServerMessage(tr("%1 is now watching the game.").arg(sanitizeHtml(name))); -} - -void MessageLogWidget::logLeaveSpectator(QString name, QString reason) -{ - soundEngine->playSound("spectator_leave"); - appendHtmlServerMessage(tr("%1 is not watching the game any more (%2).").arg(sanitizeHtml(name), sanitizeHtml(reason))); -} - -void MessageLogWidget::logDeckSelect(Player *player, QString deckHash, int sideboardSize) -{ - if (sideboardSize < 0) - appendHtmlServerMessage(tr("%1 has loaded a deck (%2).").arg(sanitizeHtml(player->getName())).arg(deckHash)); - else - appendHtmlServerMessage(tr("%1 has loaded a deck with %2 sideboard cards (%3)."). - arg(sanitizeHtml(player->getName())). - arg("" + QString::number(sideboardSize) + ""). - arg(deckHash)); -} - -void MessageLogWidget::logReadyStart(Player *player) -{ - appendHtmlServerMessage(tr("%1 is ready to start the game.").arg(sanitizeHtml(player->getName()))); -} - -void MessageLogWidget::logNotReadyStart(Player *player) -{ - appendHtmlServerMessage(tr("%1 is not ready to start the game any more.").arg(sanitizeHtml(player->getName()))); -} - -void MessageLogWidget::logSetSideboardLock(Player *player, bool locked) -{ - if (locked) { - appendHtmlServerMessage(tr("%1 has locked their sideboard.").arg(sanitizeHtml(player->getName()))); - } else { - appendHtmlServerMessage(tr("%1 has unlocked their sideboard.").arg(sanitizeHtml(player->getName()))); - } -} - -void MessageLogWidget::logConcede(Player *player) -{ - soundEngine->playSound("player_concede"); - appendHtmlServerMessage(tr("%1 has conceded the game.").arg(sanitizeHtml(player->getName()))); -} - -void MessageLogWidget::logGameStart() -{ - appendHtmlServerMessage(tr("The game has started.")); -} - -void MessageLogWidget::logConnectionStateChanged(Player *player, bool connectionState) -{ - if (connectionState) { - soundEngine->playSound("player_reconnect"); - appendHtmlServerMessage(tr("%1 has restored connection to the game.").arg(sanitizeHtml(player->getName()))); - } else { - soundEngine->playSound("player_disconnect"); - appendHtmlServerMessage(tr("%1 has lost connection to the game.").arg(sanitizeHtml(player->getName()))); - } -} - -void MessageLogWidget::logSay(Player *player, QString message) -{ - appendMessage(message, 0, player->getName(), UserLevelFlags(player->getUserInfo()->user_level()), QString::fromStdString(player->getUserInfo()->privlevel()), true); -} - -void MessageLogWidget::logSpectatorSay(QString spectatorName, UserLevelFlags spectatorUserLevel, QString userPrivLevel, QString message) -{ - appendMessage(message, 0, spectatorName, spectatorUserLevel, userPrivLevel, false); -} - -void MessageLogWidget::logShuffle(Player *player, CardZone *zone) -{ - soundEngine->playSound("shuffle"); - if (currentContext != MessageContext_Mulligan) { - appendHtmlServerMessage( - tr("%1 shuffles %2.") - .arg(sanitizeHtml(player->getName())) - .arg(zone->getTranslatedName(true, CaseShuffleZone))); - } -} - -void MessageLogWidget::logRollDie(Player *player, int sides, int roll) -{ - QString coinOptions[2] = {tr("Heads")+" (1)", tr("Tails")+" (2)"}; - soundEngine->playSound("roll_dice"); - - if (sides == 2) - appendHtmlServerMessage(tr("%1 flipped a coin. It landed as %2.").arg(sanitizeHtml(player->getName())).arg("" + coinOptions[roll - 1] + "")); - else - appendHtmlServerMessage(tr("%1 rolls a %2 with a %3-sided die.").arg(sanitizeHtml(player->getName())).arg("" + QString::number(roll) + "").arg("" + QString::number(sides) + "")); -} - -void MessageLogWidget::logDrawCards(Player *player, int number) -{ - if (currentContext == MessageContext_Mulligan) - mulliganPlayer = player; - else { - soundEngine->playSound("draw_card"); - appendHtmlServerMessage(tr("%1 draws %2 card(s).").arg(sanitizeHtml(player->getName())).arg("" + QString::number(number) + "")); - } -} - -void MessageLogWidget::logUndoDraw(Player *player, QString cardName) -{ - if (cardName.isEmpty()) - appendHtmlServerMessage(tr("%1 undoes their last draw.").arg(sanitizeHtml(player->getName()))); - else - appendHtmlServerMessage(tr("%1 undoes their last draw (%2).").arg(sanitizeHtml(player->getName())).arg(QString("%2").arg(sanitizeHtml(cardName)).arg(sanitizeHtml(cardName)))); -} - -QPair MessageLogWidget::getFromStr(CardZone *zone, QString cardName, int position, bool ownerChange) const +QPair MessageLogWidget::getFromStr( + CardZone *zone, + QString cardName, + int position, + bool ownerChange) const { bool cardNameContainsStartZone = false; QString fromStr; - QString startName = zone->getName(); + QString zoneName = zone->getName(); - if (startName == "table") + if (zoneName == tableConstant()) fromStr = tr(" from play"); - else if (startName == "grave") + else if (zoneName == graveyardConstant()) fromStr = tr(" from their graveyard"); - else if (startName == "rfg") + else if (zoneName == exileConstant()) fromStr = tr(" from exile"); - else if (startName == "hand") + else if (zoneName == handConstant()) fromStr = tr(" from their hand"); - else if (startName == "deck") { + else if (zoneName == deckConstant()) { if (position == 0) { if (cardName.isEmpty()) { if (ownerChange) @@ -219,9 +116,9 @@ QPair MessageLogWidget::getFromStr(CardZone *zone, QString car else fromStr = tr(" from their library"); } - } else if (startName == "sb") + } else if (zoneName == sideboardConstant()) fromStr = tr(" from sideboard"); - else if (startName == "stack") + else if (zoneName == stackConstant()) fromStr = tr(" from the stack"); if (!cardNameContainsStartZone) @@ -229,69 +126,328 @@ QPair MessageLogWidget::getFromStr(CardZone *zone, QString car return QPair(cardName, fromStr); } -void MessageLogWidget::doMoveCard(LogMoveCard &attributes) +void MessageLogWidget::containerProcessingDone() { - bool ownerChange = attributes.startZone->getPlayer() != attributes.targetZone->getPlayer(); - QString startName = attributes.startZone->getName(); - QString targetName = attributes.targetZone->getName(); - if (((startName == "table") && (targetName == "table") && (attributes.startZone == attributes.targetZone)) || ((startName == "hand") && (targetName == "hand"))) - return; - QString cardName = attributes.cardName; - QPair temp = getFromStr(attributes.startZone, cardName, attributes.oldX, ownerChange); - bool cardNameContainsStartZone = false; - if (!temp.first.isEmpty()) { - cardNameContainsStartZone = true; - cardName = temp.first; + if (currentContext == MessageContext_MoveCard) { + for (int i = 0; i < moveCardQueue.size(); ++i) + logDoMoveCard(moveCardQueue[i]); + moveCardQueue.clear(); + moveCardPT.clear(); + moveCardTapped.clear(); + } else if (currentContext == MessageContext_Mulligan) { + logMulligan(mulliganPlayer, mulliganNumber); + mulliganPlayer = 0; + mulliganNumber = 0; } - QString fromStr = temp.second; + + currentContext = MessageContext_None; +} + +void MessageLogWidget::containerProcessingStarted(const GameEventContext &context) +{ + if (context.HasExtension(Context_MoveCard::ext)) + currentContext = MessageContext_MoveCard; + else if (context.HasExtension(Context_Mulligan::ext)) { + const Context_Mulligan &contextMulligan = context.GetExtension(Context_Mulligan::ext); + currentContext = MessageContext_Mulligan; + mulliganPlayer = 0; + mulliganNumber = contextMulligan.number(); + } +} + +void MessageLogWidget::logAlwaysRevealTopCard(Player *player, CardZone *zone, bool reveal) +{ + appendHtmlServerMessage((reveal ? tr("%1 is now keeping the top card %2 revealed.") + : tr("%1 is not revealing the top card %2 any longer.")) + .arg(sanitizeHtml(player->getName())) + .arg(zone->getTranslatedName(true, CaseTopCardsOfZone))); +} + +void MessageLogWidget::logAttachCard(Player *player, QString cardName, Player *targetPlayer, QString targetCardName) +{ + appendHtmlServerMessage(QString("%1 attaches %2 to %3's %4.") + .arg(sanitizeHtml(player->getName())) + .arg(cardLink(cardName)) + .arg(sanitizeHtml(targetPlayer->getName())) + .arg(cardLink(targetCardName))); +} + +void MessageLogWidget::logConcede(Player *player) +{ + soundEngine->playSound("player_concede"); + appendHtmlServerMessage(tr("%1 has conceded the game.") + .arg(sanitizeHtml(player->getName())), true); +} + +void MessageLogWidget::logConnectionStateChanged(Player *player, bool connectionState) +{ + if (connectionState) { + soundEngine->playSound("player_reconnect"); + appendHtmlServerMessage(tr("%1 has restored connection to the game.") + .arg(sanitizeHtml(player->getName())), true); + } else { + soundEngine->playSound("player_disconnect"); + appendHtmlServerMessage(tr("%1 has lost connection to the game.") + .arg(sanitizeHtml(player->getName())), true); + } +} + +void MessageLogWidget::logCreateArrow( + Player *player, + Player *startPlayer, + QString startCard, + Player *targetPlayer, + QString targetCard, + bool playerTarget) +{ + startCard = cardLink(startCard); + targetCard = cardLink(targetCard); + QString str; + if (playerTarget) { + if (player == startPlayer && player == targetPlayer) { + str = tr("%1 points from their %2 to themselves."); + appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())) + .arg(startCard)); + } else if (player == startPlayer) { + str = tr("%1 points from their %2 to %3."); + appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())) + .arg(startCard) + .arg(sanitizeHtml(targetPlayer->getName()))); + } else if (player == targetPlayer) { + str = tr("%1 points from %2's %3 to themselves."); + appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())) + .arg(sanitizeHtml(startPlayer->getName())) + .arg(startCard)); + } else { + str = tr("%1 points from %2's %3 to %4."); + appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())) + .arg(sanitizeHtml(startPlayer->getName())) + .arg(startCard) + .arg(sanitizeHtml(targetPlayer->getName()))); + } + } else { + if (player == startPlayer && player == targetPlayer) { + str = tr("%1 points from their %2 to their %3."); + appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())) + .arg(startCard).arg(targetCard)); + } else if (player == startPlayer) { + str = tr("%1 points from their %2 to %3's %4."); + appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())) + .arg(startCard) + .arg(sanitizeHtml(targetPlayer->getName())) + .arg(targetCard)); + } else if (player == targetPlayer) { + str = tr("%1 points from %2's %3 to their own %4."); + appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())) + .arg(sanitizeHtml(startPlayer->getName())) + .arg(startCard) + .arg(targetCard)); + } else { + str = tr("%1 points from %2's %3 to %4's %5."); + appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())) + .arg(sanitizeHtml(startPlayer->getName())) + .arg(startCard) + .arg(sanitizeHtml(targetPlayer->getName())) + .arg(targetCard)); + } + } +} + +void MessageLogWidget::logCreateToken(Player *player, QString cardName, QString pt) +{ + appendHtmlServerMessage(tr("%1 creates token: %2%3.") + .arg(sanitizeHtml(player->getName())) + .arg(cardLink(cardName)) + .arg(pt.isEmpty() ? QString() : QString(" (%1)") + .arg(sanitizeHtml(pt)))); +} + +void MessageLogWidget::logDeckSelect(Player *player, QString deckHash, int sideboardSize) +{ + if (sideboardSize < 0) + appendHtmlServerMessage(tr("%1 has loaded a deck (%2).") + .arg(sanitizeHtml(player->getName())) + .arg(deckHash)); + else + appendHtmlServerMessage(tr("%1 has loaded a deck with %2 sideboard cards (%3).") + .arg(sanitizeHtml(player->getName())) + .arg("" + QString::number(sideboardSize) + "") + .arg(deckHash)); +} + +void MessageLogWidget::logDestroyCard(Player *player, QString cardName) +{ + appendHtmlServerMessage(tr("%1 destroys %2.") + .arg(sanitizeHtml(player->getName())) + .arg(cardLink(cardName))); +} + +void MessageLogWidget::logDoMoveCard(LogMoveCard &lmc) +{ + QString startZone = lmc.startZone->getName(); + QString targetZone = lmc.targetZone->getName(); + bool ownerChanged = lmc.startZone->getPlayer() != lmc.targetZone->getPlayer(); + + // do not log if moved within the same zone + if ((startZone == tableConstant() && targetZone == tableConstant() && !ownerChanged) + || (startZone == handConstant() && targetZone == handConstant()) + || (startZone == exileConstant() && targetZone == exileConstant())) + return; + + QString cardName = lmc.cardName; + QPair nameFrom = getFromStr(lmc.startZone, cardName, lmc.oldX, ownerChanged); + if (!nameFrom.first.isEmpty()) + cardName = nameFrom.first; + QString cardStr; - if (cardNameContainsStartZone) + if (!nameFrom.first.isEmpty()) cardStr = cardName; else if (cardName.isEmpty()) cardStr = tr("a card"); else cardStr = cardLink(cardName); - if (ownerChange && (attributes.startZone->getPlayer() == attributes.player)) { - appendHtmlServerMessage(tr("%1 gives %2 control over %3.").arg(sanitizeHtml(attributes.player->getName())).arg(sanitizeHtml(attributes.targetZone->getPlayer()->getName())).arg(cardStr)); + if (ownerChanged && (lmc.startZone->getPlayer() == lmc.player)) { + appendHtmlServerMessage( + tr("%1 gives %2 control over %3.") + .arg(sanitizeHtml(lmc.player->getName())) + .arg(sanitizeHtml(lmc.targetZone->getPlayer()->getName())) + .arg(cardStr)); return; } QString finalStr; - if (targetName == "table") { + if (targetZone == tableConstant()) { soundEngine->playSound("play_card"); - if (moveCardTapped.value(attributes.card)) + if (moveCardTapped.value(lmc.card)) finalStr = tr("%1 puts %2 into play tapped%3."); else finalStr = tr("%1 puts %2 into play%3."); - } else if (targetName == "grave") + } else if (targetZone == graveyardConstant()) finalStr = tr("%1 puts %2%3 into their graveyard."); - else if (targetName == "rfg") + else if (targetZone == exileConstant()) finalStr = tr("%1 exiles %2%3."); - else if (targetName == "hand") + else if (targetZone == handConstant()) finalStr = tr("%1 moves %2%3 to their hand."); - else if (targetName == "deck") { - if (attributes.newX == -1) + else if (targetZone == deckConstant()) { + if (lmc.newX == -1) finalStr = tr("%1 puts %2%3 into their library."); - else if (attributes.newX == attributes.targetZone->getCards().size() - 1) + else if (lmc.newX == lmc.targetZone->getCards().size() - 1) finalStr = tr("%1 puts %2%3 on bottom of their library."); - else if (attributes.newX == 0) + else if (lmc.newX == 0) finalStr = tr("%1 puts %2%3 on top of their library."); else { - attributes.newX++; + lmc.newX++; finalStr = tr("%1 puts %2%3 into their library %4 cards from the top."); } - } else if (targetName == "sb") + } else if (targetZone == sideboardConstant()) finalStr = tr("%1 moves %2%3 to sideboard."); - else if (targetName == "stack") { + else if (targetZone == stackConstant()) { soundEngine->playSound("play_card"); finalStr = tr("%1 plays %2%3."); } - appendHtmlServerMessage(finalStr.arg(sanitizeHtml(attributes.player->getName())).arg(cardStr).arg(fromStr).arg(attributes.newX)); + appendHtmlServerMessage( + finalStr.arg(sanitizeHtml(lmc.player->getName())) + .arg(cardStr) + .arg(nameFrom.second) + .arg(lmc.newX)); } -void MessageLogWidget::logMoveCard(Player *player, CardItem *card, CardZone *startZone, int oldX, CardZone *targetZone, int newX) +void MessageLogWidget::logDrawCards(Player *player, int number) +{ + if (currentContext == MessageContext_Mulligan) + mulliganPlayer = player; + else { + soundEngine->playSound("draw_card"); + appendHtmlServerMessage(tr("%1 draws %2 card(s).") + .arg(sanitizeHtml(player->getName())) + .arg("" + QString::number(number) + "")); + } +} + +void MessageLogWidget::logDumpZone(Player *player, CardZone *zone, int numberCards) +{ + if (numberCards == -1) + appendHtmlServerMessage(tr("%1 is looking at %2.") + .arg(sanitizeHtml(player->getName())) + .arg(zone->getTranslatedName(zone->getPlayer() == player, CaseLookAtZone))); + else + appendHtmlServerMessage(tr("%1 is looking at the top %2 card(s) %3.") + .arg(sanitizeHtml(player->getName())) + .arg("" + QString::number(numberCards) + "") + .arg(zone->getTranslatedName(zone->getPlayer() == player, CaseTopCardsOfZone))); +} + +void MessageLogWidget::logFlipCard(Player *player, QString cardName, bool faceDown) +{ + if (faceDown) { + appendHtmlServerMessage(tr("%1 flips %2 face-down.") + .arg(sanitizeHtml(player->getName())) + .arg(cardName)); + } else { + appendHtmlServerMessage(tr("%1 flips %2 face-up.") + .arg(sanitizeHtml(player->getName())) + .arg(cardName)); + } +} + +void MessageLogWidget::logGameClosed() +{ + appendHtmlServerMessage(tr("The game has been closed.")); +} + +void MessageLogWidget::logGameStart() +{ + appendHtmlServerMessage(tr("The game has started.")); +} + +void MessageLogWidget::logJoin(Player *player) +{ + soundEngine->playSound("player_join"); + appendHtmlServerMessage(tr("%1 has joined the game.") + .arg(sanitizeHtml(player->getName()))); +} + +void MessageLogWidget::logJoinSpectator(QString name) +{ + soundEngine->playSound("spectator_join"); + appendHtmlServerMessage(tr("%1 is now watching the game.") + .arg(sanitizeHtml(name))); +} + +void MessageLogWidget::logKicked() +{ + appendHtmlServerMessage(tr("You have been kicked out of the game."), true); +} + +void MessageLogWidget::logLeave(Player *player, QString reason) +{ + soundEngine->playSound("player_leave"); + appendHtmlServerMessage(tr("%1 has left the game (%2).") + .arg(sanitizeHtml(player->getName()), sanitizeHtml(reason)), true); +} + +void MessageLogWidget::logLeaveSpectator(QString name, QString reason) +{ + soundEngine->playSound("spectator_leave"); + appendHtmlServerMessage(tr("%1 is not watching the game any more (%2).") + .arg(sanitizeHtml(name), sanitizeHtml(reason))); +} + +void MessageLogWidget::logNotReadyStart(Player *player) +{ + appendHtmlServerMessage(tr("%1 is not ready to start the game any more.") + .arg(sanitizeHtml(player->getName()))); +} + +void MessageLogWidget::logMoveCard( + Player *player, + CardItem *card, + CardZone *startZone, + int oldX, + CardZone *targetZone, + int newX) { LogMoveCard attributes = {player, card, card->getName(), startZone, oldX, targetZone, newX}; if (currentContext == MessageContext_MoveCard) @@ -299,198 +455,40 @@ void MessageLogWidget::logMoveCard(Player *player, CardItem *card, CardZone *sta else if (currentContext == MessageContext_Mulligan) mulliganPlayer = player; else - doMoveCard(attributes); + logDoMoveCard(attributes); } void MessageLogWidget::logMulligan(Player *player, int number) { if (!player) return; - - if (number > -1) { - appendHtmlServerMessage(tr("%1 takes a mulligan to %2.").arg(sanitizeHtml(player->getName())).arg(number)); - } else { - appendHtmlServerMessage(tr("%1 draws their initial hand.").arg(sanitizeHtml(player->getName()))); - } -} - -void MessageLogWidget::logFlipCard(Player *player, QString cardName, bool faceDown) -{ - if (faceDown) { - appendHtmlServerMessage(tr("%1 flips %2 face-down.").arg(sanitizeHtml(player->getName())).arg(cardName)); - } else { - appendHtmlServerMessage(tr("%1 flips %2 face-up.").arg(sanitizeHtml(player->getName())).arg(cardName)); - } -} - -void MessageLogWidget::logDestroyCard(Player *player, QString cardName) -{ - appendHtmlServerMessage(tr("%1 destroys %2.").arg(sanitizeHtml(player->getName())).arg(cardLink(cardName))); -} - -void MessageLogWidget::logAttachCard(Player *player, QString cardName, Player *targetPlayer, QString targetCardName) -{ - QString str; - str = tr("%1 attaches %2 to %3's %4."); - appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())).arg(cardLink(cardName)).arg(sanitizeHtml(targetPlayer->getName())).arg(cardLink(targetCardName))); -} - -void MessageLogWidget::logUnattachCard(Player *player, QString cardName) -{ - appendHtmlServerMessage(tr("%1 unattaches %2.").arg(sanitizeHtml(player->getName())).arg(cardLink(cardName))); -} - -void MessageLogWidget::logCreateToken(Player *player, QString cardName, QString pt) -{ - appendHtmlServerMessage(tr("%1 creates token: %2%3.").arg(sanitizeHtml(player->getName())).arg(cardLink(cardName)).arg(pt.isEmpty() ? QString() : QString(" (%1)").arg(sanitizeHtml(pt)))); -} - -void MessageLogWidget::logCreateArrow(Player *player, Player *startPlayer, QString startCard, Player *targetPlayer, QString targetCard, bool playerTarget) -{ - startCard = cardLink(startCard); - targetCard = cardLink(targetCard); - QString str; - if (playerTarget) { - if ((player == startPlayer) && (player == targetPlayer)) { - str = tr("%1 points from their %2 to themselves."); - appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())).arg(startCard)); - } else if (player == startPlayer) { - str = tr("%1 points from their %2 to %3."); - appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())).arg(startCard).arg(sanitizeHtml(targetPlayer->getName()))); - } else if (player == targetPlayer) { - str = tr("%1 points from %2's %3 to themselves."); - appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())).arg(sanitizeHtml(startPlayer->getName())).arg(startCard)); - } else { - str = tr("%1 points from %2's %3 to %4."); - appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())).arg(sanitizeHtml(startPlayer->getName())).arg(startCard).arg(sanitizeHtml(targetPlayer->getName()))); - } - } else { - if ((player == startPlayer) && (player == targetPlayer)) { - str = tr("%1 points from their %2 to their %3."); - appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())).arg(startCard).arg(targetCard)); - } else if (player == startPlayer) { - str = tr("%1 points from their %2 to %3's %4."); - appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())).arg(startCard).arg(sanitizeHtml(targetPlayer->getName())).arg(targetCard)); - } else if (player == targetPlayer) { - str = tr("%1 points from %2's %3 to their own %4."); - appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())).arg(sanitizeHtml(startPlayer->getName())).arg(startCard).arg(targetCard)); - } else { - str = tr("%1 points from %2's %3 to %4's %5."); - appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())).arg(sanitizeHtml(startPlayer->getName())).arg(startCard).arg(sanitizeHtml(targetPlayer->getName())).arg(targetCard)); - } - } -} - -void MessageLogWidget::logSetCardCounter(Player *player, QString cardName, int counterId, int value, int oldValue) -{ - QString finalStr, colorStr; - - int delta = abs(oldValue - value); - if (value > oldValue) { - finalStr = tr("%1 places %2 %3 counter(s) on %4 (now %5)."); - } else { - finalStr = tr("%1 removes %2 %3 counter(s) from %4 (now %5)."); - } - - switch (counterId) { - case 0: colorStr = tr("red", "", delta); break; - case 1: colorStr = tr("yellow", "", delta); break; - case 2: colorStr = tr("green", "", delta); break; - default: ; - } - - appendHtmlServerMessage(finalStr.arg(sanitizeHtml(player->getName())).arg("" + QString::number(delta) + "").arg(colorStr).arg(cardLink(cardName)).arg(value)); -} - -void MessageLogWidget::logSetTapped(Player *player, CardItem *card, bool tapped) -{ - if (tapped) - soundEngine->playSound("tap_card"); + if (number > -1) + appendHtmlServerMessage(tr("%1 takes a mulligan to %2.") + .arg(sanitizeHtml(player->getName())) + .arg(number)); else - soundEngine->playSound("untap_card"); - - if (currentContext == MessageContext_MoveCard) - moveCardTapped.insert(card, tapped); - else { - QString str; - if (!card) { - if (tapped) - str = tr("%1 taps their permanents."); - else - str = tr("%1 untaps their permanents."); - appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName()))); - } else { - if (tapped) - str = tr("%1 taps %2."); - else - str = tr("%1 untaps %2."); - appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())).arg(cardLink(card->getName()))); - } - } + appendHtmlServerMessage(tr("%1 draws their initial hand.") + .arg(sanitizeHtml(player->getName()))); } -void MessageLogWidget::logSetCounter(Player *player, QString counterName, int value, int oldValue) +void MessageLogWidget::logReplayStarted(int gameId) { - if (counterName == "life") - soundEngine->playSound("life_change"); - - QString str; - str = tr("%1 sets counter %2 to %3 (%4%5)."); - appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())).arg(QString("%1").arg(sanitizeHtml(counterName))).arg(QString("%1").arg(value)).arg(value > oldValue ? "+" : "").arg(value - oldValue)); + appendHtmlServerMessage(tr("You are watching a replay of game #%1.").arg(gameId)); } -void MessageLogWidget::logSetDoesntUntap(Player *player, CardItem *card, bool doesntUntap) +void MessageLogWidget::logReadyStart(Player *player) { - QString str; - if (doesntUntap) { - str = tr("%1 sets %2 to not untap normally."); - } else { - str = tr("%1 sets %2 to untap normally."); - } - appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())).arg(cardLink(card->getName()))); + appendHtmlServerMessage(tr("%1 is ready to start the game.") + .arg(sanitizeHtml(player->getName()))); } -void MessageLogWidget::logSetPT(Player *player, CardItem *card, QString newPT) -{ - if (currentContext == MessageContext_MoveCard) - moveCardPT.insert(card, newPT); - else { - QString str; - str = tr("%1 sets PT of %2 to %3."); - appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())).arg(cardLink(card->getName())).arg(QString("%1").arg(sanitizeHtml(newPT)))); - } -} - -void MessageLogWidget::logSetAnnotation(Player *player, CardItem *card, QString newAnnotation) -{ - QString str; - str = tr("%1 sets annotation of %2 to %3."); - appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())).arg(cardLink(card->getName())).arg(QString(""%1"").arg(sanitizeHtml(newAnnotation)))); -} - -void MessageLogWidget::logDumpZone(Player *player, CardZone *zone, int numberCards) -{ - if (numberCards == -1) - appendHtmlServerMessage(( - tr("%1 is looking at %2.") - ).arg(sanitizeHtml(player->getName())) - .arg(zone->getTranslatedName(zone->getPlayer() == player, CaseLookAtZone))); - else - appendHtmlServerMessage(( - tr("%1 is looking at the top %2 card(s) %3.") - ).arg(sanitizeHtml(player->getName())).arg("" + QString::number(numberCards) + "") - .arg(zone->getTranslatedName(zone->getPlayer() == player, CaseTopCardsOfZone))); -} - -void MessageLogWidget::logStopDumpZone(Player *player, CardZone *zone) -{ - appendHtmlServerMessage( - tr("%1 stops looking at %2.") - .arg(sanitizeHtml(player->getName())) - .arg(zone->getTranslatedName(zone->getPlayer() == player, CaseLookAtZone))); -} - -void MessageLogWidget::logRevealCards(Player *player, CardZone *zone, int cardId, QString cardName, Player *otherPlayer, bool faceDown) +void MessageLogWidget::logRevealCards( + Player *player, + CardZone *zone, + int cardId, + QString cardName, + Player *otherPlayer, + bool faceDown) { QPair temp = getFromStr(zone, cardName, cardId, false); bool cardNameContainsStartZone = false; @@ -508,79 +506,142 @@ void MessageLogWidget::logRevealCards(Player *player, CardZone *zone, int cardId else cardStr = cardLink(cardName); - QString str; if (cardId == -1) { - if (otherPlayer) { - str = tr("%1 reveals %2 to %3."); - appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())).arg(zone->getTranslatedName(true, CaseRevealZone)).arg(sanitizeHtml(otherPlayer->getName()))); - } else { - appendHtmlServerMessage(( - tr("%1 reveals %2.") - ).arg(sanitizeHtml(player->getName())) - .arg(zone->getTranslatedName(true, CaseRevealZone))); - } + if (otherPlayer) + appendHtmlServerMessage(tr("%1 reveals %2 to %3.") + .arg(sanitizeHtml(player->getName())) + .arg(zone->getTranslatedName(true, CaseRevealZone)) + .arg(sanitizeHtml(otherPlayer->getName()))); + else + appendHtmlServerMessage(tr("%1 reveals %2.") + .arg(sanitizeHtml(player->getName())) + .arg(zone->getTranslatedName(true, CaseRevealZone))); } else if (cardId == -2) { - if (otherPlayer) { - - str = tr("%1 randomly reveals %2%3 to %4."); - appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())).arg(cardStr).arg(fromStr).arg(sanitizeHtml(otherPlayer->getName()))); - } else { - appendHtmlServerMessage(tr("%1 randomly reveals %2%3.").arg(sanitizeHtml(player->getName())).arg(cardStr).arg(fromStr)); - } + if (otherPlayer) + appendHtmlServerMessage(tr("%1 randomly reveals %2%3 to %4.") + .arg(sanitizeHtml(player->getName())) + .arg(cardStr) + .arg(fromStr) + .arg(sanitizeHtml(otherPlayer->getName()))); + else + appendHtmlServerMessage(tr("%1 randomly reveals %2%3.") + .arg(sanitizeHtml(player->getName())) + .arg(cardStr) + .arg(fromStr)); } else { - if (faceDown && (player == otherPlayer)) { - if (cardName.isEmpty()) { - str = tr("%1 peeks at face down card #%2."); - appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())).arg(cardId)); - } else { - str = tr("%1 peeks at face down card #%2: %3."); - appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())).arg(cardId).arg(cardStr)); - } - } else if (otherPlayer) { - - str = tr("%1 reveals %2%3 to %4."); - appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())).arg(cardStr).arg(fromStr).arg(sanitizeHtml(otherPlayer->getName()))); - } else { - appendHtmlServerMessage(tr("%1 reveals %2%3.").arg(sanitizeHtml(player->getName())).arg(cardStr).arg(fromStr)); - } + if (faceDown && player == otherPlayer) { + if (cardName.isEmpty()) + appendHtmlServerMessage(tr("%1 peeks at face down card #%2.") + .arg(sanitizeHtml(player->getName())) + .arg(cardId)); + else + appendHtmlServerMessage(tr("%1 peeks at face down card #%2: %3.") + .arg(sanitizeHtml(player->getName())) + .arg(cardId) + .arg(cardStr)); + } else if (otherPlayer) + appendHtmlServerMessage(tr("%1 reveals %2%3 to %4.") + .arg(sanitizeHtml(player->getName())) + .arg(cardStr) + .arg(fromStr) + .arg(sanitizeHtml(otherPlayer->getName()))); + else + appendHtmlServerMessage(tr("%1 reveals %2%3.") + .arg(sanitizeHtml(player->getName())) + .arg(cardStr) + .arg(fromStr)); } } -void MessageLogWidget::logAlwaysRevealTopCard(Player *player, CardZone *zone, bool reveal) +void MessageLogWidget::logRollDie(Player *player, int sides, int roll) { - appendHtmlServerMessage((reveal - ? tr("%1 is now keeping the top card %2 revealed.") - : tr("%1 is not revealing the top card %2 any longer.") - ).arg(sanitizeHtml(player->getName())) - .arg(zone->getTranslatedName(true, CaseTopCardsOfZone)) - ); + if (sides == 2) { + QString coinOptions[2] = {tr("Heads") + " (1)", tr("Tails") + " (2)"}; + appendHtmlServerMessage(tr("%1 flipped a coin. It landed as %2.") + .arg(sanitizeHtml(player->getName())) + .arg("" + coinOptions[roll - 1] + "")); + } + else + appendHtmlServerMessage(tr("%1 rolls a %2 with a %3-sided die.") + .arg(sanitizeHtml(player->getName())) + .arg("" + QString::number(roll) + "") + .arg("" + QString::number(sides) + "")); + soundEngine->playSound("roll_dice"); } -void MessageLogWidget::logSetActivePlayer(Player *player) +void MessageLogWidget::logSay(Player *player, QString message) { - - QString str; - str = tr("%1's turn."); - appendHtml("
" + QDateTime::currentDateTime().toString("[hh:mm:ss] ") + str.arg(player->getName()) + "
"); + appendMessage(message, + 0, + player->getName(), + UserLevelFlags(player->getUserInfo()->user_level()), + QString::fromStdString(player->getUserInfo()->privlevel()), true); } void MessageLogWidget::logSetActivePhase(int phase) { QString phaseName; - QString color = "green"; + QString color; switch (phase) { - case 0: phaseName = tr("Untap"); soundEngine->playSound("untap_step"); break; - case 1: phaseName = tr("Upkeep"); soundEngine->playSound("upkeep_step"); break; - case 2: phaseName = tr("Draw"); soundEngine->playSound("draw_step"); break; - case 3: phaseName = tr("First Main"); soundEngine->playSound("main_1"); color="blue"; break; - case 4: phaseName = tr("Beginning of Combat"); soundEngine->playSound("start_combat"); color="red"; break; - case 5: phaseName = tr("Declare Attackers"); soundEngine->playSound("attack_step"); color="red"; break; - case 6: phaseName = tr("Declare Blockers"); soundEngine->playSound("block_step"); color="red"; break; - case 7: phaseName = tr("Combat Damage"); soundEngine->playSound("damage_step"); color="red"; break; - case 8: phaseName = tr("End of Combat"); soundEngine->playSound("end_combat"); color="red"; break; - case 9: phaseName = tr("Second Main"); soundEngine->playSound("main_2"); color="blue"; break; - case 10: phaseName = tr("End/Cleanup"); soundEngine->playSound("end_step"); break; - default: phaseName = tr("Unknown Phase"); break; + case 0: + phaseName = tr("Untap"); + soundEngine->playSound("untap_step"); + color = "green"; + break; + case 1: + phaseName = tr("Upkeep"); + soundEngine->playSound("upkeep_step"); + color = "green"; + break; + case 2: + phaseName = tr("Draw"); + soundEngine->playSound("draw_step"); + color = "green"; + break; + case 3: + phaseName = tr("First Main"); + soundEngine->playSound("main_1"); + color="blue"; + break; + case 4: + phaseName = tr("Beginning of Combat"); + soundEngine->playSound("start_combat"); + color="red"; + break; + case 5: + phaseName = tr("Declare Attackers"); + soundEngine->playSound("attack_step"); + color="red"; + break; + case 6: + phaseName = tr("Declare Blockers"); + soundEngine->playSound("block_step"); + color="red"; + break; + case 7: + phaseName = tr("Combat Damage"); + soundEngine->playSound("damage_step"); + color="red"; + break; + case 8: + phaseName = tr("End of Combat"); + soundEngine->playSound("end_combat"); + color="red"; + break; + case 9: + phaseName = tr("Second Main"); + soundEngine->playSound("main_2"); + color="blue"; + break; + case 10: + phaseName = tr("End/Cleanup"); + soundEngine->playSound("end_step"); + color = "green"; + break; + default: + phaseName = tr("Unknown Phase"); + color = "black"; + break; } appendHtml("" + QDateTime::currentDateTime().toString("[hh:mm:ss] ") @@ -588,59 +649,214 @@ void MessageLogWidget::logSetActivePhase(int phase) + ""); } -void MessageLogWidget::containerProcessingStarted(const GameEventContext &_context) +void MessageLogWidget::logSetActivePlayer(Player *player) { - if (_context.HasExtension(Context_MoveCard::ext)) - currentContext = MessageContext_MoveCard; - else if (_context.HasExtension(Context_Mulligan::ext)) { - const Context_Mulligan &contextMulligan = _context.GetExtension(Context_Mulligan::ext); - currentContext = MessageContext_Mulligan; - mulliganPlayer = 0; - mulliganNumber = contextMulligan.number(); + appendHtml("
" + + QDateTime::currentDateTime().toString("[hh:mm:ss] ") + + QString(tr("%1's turn.")).arg(player->getName()) + + "
"); +} + +void MessageLogWidget::logSetAnnotation(Player *player, CardItem *card, QString newAnnotation) +{ + appendHtmlServerMessage(QString(tr("%1 sets annotation of %2 to %3.")) + .arg(sanitizeHtml(player->getName())) + .arg(cardLink(card->getName())) + .arg(QString(""%1"") + .arg(sanitizeHtml(newAnnotation)))); +} + +void MessageLogWidget::logSetCardCounter(Player *player, QString cardName, int counterId, int value, int oldValue) +{ + QString finalStr; + int delta = abs(oldValue - value); + if (value > oldValue) + finalStr = tr("%1 places %2 %3 counter(s) on %4 (now %5)."); + else + finalStr = tr("%1 removes %2 %3 counter(s) from %4 (now %5)."); + + QString colorStr; + switch (counterId) { + case 0: + colorStr = tr("red", "", delta); + break; + case 1: + colorStr = tr("yellow", "", delta); + break; + case 2: + colorStr = tr("green", "", delta); + break; + default: ; + } + + appendHtmlServerMessage(finalStr.arg(sanitizeHtml(player->getName())) + .arg("" + QString::number(delta) + "") + .arg(colorStr) + .arg(cardLink(cardName)) + .arg(value)); +} + +void MessageLogWidget::logSetCounter(Player *player, QString counterName, int value, int oldValue) +{ + if (counterName == "life") + soundEngine->playSound("life_change"); + + appendHtmlServerMessage(tr("%1 sets counter %2 to %3 (%4%5).") + .arg(sanitizeHtml(player->getName())) + .arg(QString("%1") + .arg(sanitizeHtml(counterName))) + .arg(QString("%1") + .arg(value)) + .arg(value > oldValue ? "+" : "") + .arg(value - oldValue)); +} + +void MessageLogWidget::logSetDoesntUntap(Player *player, CardItem *card, bool doesntUntap) +{ + QString str; + if (doesntUntap) + str = tr("%1 sets %2 to not untap normally."); + else + str = tr("%1 sets %2 to untap normally."); + appendHtmlServerMessage(str.arg(sanitizeHtml(player->getName())) + .arg(cardLink(card->getName()))); +} + +void MessageLogWidget::logSetPT(Player *player, CardItem *card, QString newPT) +{ + if (currentContext == MessageContext_MoveCard) + moveCardPT.insert(card, newPT); + else + appendHtmlServerMessage(tr("%1 sets PT of %2 to %3.") + .arg(sanitizeHtml(player->getName())) + .arg(cardLink(card->getName())) + .arg(QString("%1") + .arg(sanitizeHtml(newPT)))); +} + +void MessageLogWidget::logSetSideboardLock(Player *player, bool locked) +{ + if (locked) + appendHtmlServerMessage(tr("%1 has locked their sideboard.") + .arg(sanitizeHtml(player->getName()))); + else + appendHtmlServerMessage(tr("%1 has unlocked their sideboard.") + .arg(sanitizeHtml(player->getName()))); +} + +void MessageLogWidget::logSetTapped(Player *player, CardItem *card, bool tapped) +{ + if (tapped) + soundEngine->playSound("tap_card"); + else + soundEngine->playSound("untap_card"); + + if (currentContext == MessageContext_MoveCard) + moveCardTapped.insert(card, tapped); + else { + QString str; + if (!card) + appendHtmlServerMessage((tapped ? tr("%1 taps their permanents.") + : tr("%1 untaps their permanents.")) + .arg(sanitizeHtml(player->getName()))); + else + appendHtmlServerMessage((tapped ? tr("%1 taps %2.") + : tr("%1 untaps %2.")) + .arg(sanitizeHtml(player->getName())) + .arg(cardLink(card->getName()))); } } -void MessageLogWidget::containerProcessingDone() +void MessageLogWidget::logShuffle(Player *player, CardZone *zone) { - if (currentContext == MessageContext_MoveCard) { - for (int i = 0; i < moveCardQueue.size(); ++i) - doMoveCard(moveCardQueue[i]); - moveCardQueue.clear(); - moveCardPT.clear(); - moveCardTapped.clear(); - } else if (currentContext == MessageContext_Mulligan) { - logMulligan(mulliganPlayer, mulliganNumber); - mulliganPlayer = 0; - mulliganNumber = 0; - } + soundEngine->playSound("shuffle"); + if (currentContext != MessageContext_Mulligan) + appendHtmlServerMessage(tr("%1 shuffles %2.") + .arg(sanitizeHtml(player->getName())) + .arg(zone->getTranslatedName(true, CaseShuffleZone))); +} - currentContext = MessageContext_None; +void MessageLogWidget::logSpectatorSay(QString spectatorName, + UserLevelFlags spectatorUserLevel, + QString userPrivLevel, + QString message) +{ + appendMessage(message, 0, spectatorName, spectatorUserLevel, userPrivLevel, false); +} + +void MessageLogWidget::logStopDumpZone(Player *player, CardZone *zone) +{ + appendHtmlServerMessage(tr("%1 stops looking at %2.") + .arg(sanitizeHtml(player->getName())) + .arg(zone->getTranslatedName(zone->getPlayer() == player, CaseLookAtZone))); +} + +void MessageLogWidget::logUnattachCard(Player *player, QString cardName) +{ + appendHtmlServerMessage(tr("%1 unattaches %2.") + .arg(sanitizeHtml(player->getName())) + .arg(cardLink(cardName))); +} + +void MessageLogWidget::logUndoDraw(Player *player, QString cardName) +{ + if (cardName.isEmpty()) + appendHtmlServerMessage(tr("%1 undoes their last draw.") + .arg(sanitizeHtml(player->getName()))); + else + appendHtmlServerMessage(tr("%1 undoes their last draw (%2).") + .arg(sanitizeHtml(player->getName())) + .arg(QString("%2") + .arg(sanitizeHtml(cardName)) + .arg(sanitizeHtml(cardName)))); } void MessageLogWidget::connectToPlayer(Player *player) { - connect(player, SIGNAL(logSay(Player *, QString)), this, SLOT(logSay(Player *, QString))); - connect(player, SIGNAL(logShuffle(Player *, CardZone *)), this, SLOT(logShuffle(Player *, CardZone *))); - connect(player, SIGNAL(logRollDie(Player *, int, int)), this, SLOT(logRollDie(Player *, int, int))); - connect(player, SIGNAL(logCreateArrow(Player *, Player *, QString, Player *, QString, bool)), this, SLOT(logCreateArrow(Player *, Player *, QString, Player *, QString, bool))); - connect(player, SIGNAL(logCreateToken(Player *, QString, QString)), this, SLOT(logCreateToken(Player *, QString, QString))); - connect(player, SIGNAL(logSetCounter(Player *, QString, int, int)), this, SLOT(logSetCounter(Player *, QString, int, int))); - connect(player, SIGNAL(logSetCardCounter(Player *, QString, int, int, int)), this, SLOT(logSetCardCounter(Player *, QString, int, int, int))); - connect(player, SIGNAL(logSetTapped(Player *, CardItem *, bool)), this, SLOT(logSetTapped(Player *, CardItem *, bool))); - connect(player, SIGNAL(logSetDoesntUntap(Player *, CardItem *, bool)), this, SLOT(logSetDoesntUntap(Player *, CardItem *, bool))); - connect(player, SIGNAL(logSetPT(Player *, CardItem *, QString)), this, SLOT(logSetPT(Player *, CardItem *, QString))); - connect(player, SIGNAL(logSetAnnotation(Player *, CardItem *, QString)), this, SLOT(logSetAnnotation(Player *, CardItem *, QString))); - connect(player, SIGNAL(logMoveCard(Player *, CardItem *, CardZone *, int, CardZone *, int)), this, SLOT(logMoveCard(Player *, CardItem *, CardZone *, int, CardZone *, int))); - connect(player, SIGNAL(logFlipCard(Player *, QString, bool)), this, SLOT(logFlipCard(Player *, QString, bool))); - connect(player, SIGNAL(logDestroyCard(Player *, QString)), this, SLOT(logDestroyCard(Player *, QString))); - connect(player, SIGNAL(logAttachCard(Player *, QString, Player *, QString)), this, SLOT(logAttachCard(Player *, QString, Player *, QString))); - connect(player, SIGNAL(logUnattachCard(Player *, QString)), this, SLOT(logUnattachCard(Player *, QString))); - connect(player, SIGNAL(logDumpZone(Player *, CardZone *, int)), this, SLOT(logDumpZone(Player *, CardZone *, int))); - connect(player, SIGNAL(logStopDumpZone(Player *, CardZone *)), this, SLOT(logStopDumpZone(Player *, CardZone *))); - connect(player, SIGNAL(logDrawCards(Player *, int)), this, SLOT(logDrawCards(Player *, int))); - connect(player, SIGNAL(logUndoDraw(Player *, QString)), this, SLOT(logUndoDraw(Player *, QString))); - connect(player, SIGNAL(logRevealCards(Player *, CardZone *, int, QString, Player *, bool)), this, SLOT(logRevealCards(Player *, CardZone *, int, QString, Player *, bool))); - connect(player, SIGNAL(logAlwaysRevealTopCard(Player *, CardZone *, bool)), this, SLOT(logAlwaysRevealTopCard(Player *, CardZone *, bool))); + connect(player, SIGNAL(logSay(Player *, QString)), + this, SLOT(logSay(Player *, QString))); + connect(player, SIGNAL(logShuffle(Player *, CardZone *)), + this, SLOT(logShuffle(Player *, CardZone *))); + connect(player, SIGNAL(logRollDie(Player *, int, int)), + this, SLOT(logRollDie(Player *, int, int))); + connect(player, SIGNAL(logCreateArrow(Player *, Player *, QString, Player *, QString, bool)), + this, SLOT(logCreateArrow(Player *, Player *, QString, Player *, QString, bool))); + connect(player, SIGNAL(logCreateToken(Player *, QString, QString)), + this, SLOT(logCreateToken(Player *, QString, QString))); + connect(player, SIGNAL(logSetCounter(Player *, QString, int, int)), + this, SLOT(logSetCounter(Player *, QString, int, int))); + connect(player, SIGNAL(logSetCardCounter(Player *, QString, int, int, int)), + this, SLOT(logSetCardCounter(Player *, QString, int, int, int))); + connect(player, SIGNAL(logSetTapped(Player *, CardItem *, bool)), + this, SLOT(logSetTapped(Player *, CardItem *, bool))); + connect(player, SIGNAL(logSetDoesntUntap(Player *, CardItem *, bool)), + this, SLOT(logSetDoesntUntap(Player *, CardItem *, bool))); + connect(player, SIGNAL(logSetPT(Player *, CardItem *, QString)), + this, SLOT(logSetPT(Player *, CardItem *, QString))); + connect(player, SIGNAL(logSetAnnotation(Player *, CardItem *, QString)), + this, SLOT(logSetAnnotation(Player *, CardItem *, QString))); + connect(player, SIGNAL(logMoveCard(Player *, CardItem *, CardZone *, int, CardZone *, int)), + this, SLOT(logMoveCard(Player *, CardItem *, CardZone *, int, CardZone *, int))); + connect(player, SIGNAL(logFlipCard(Player *, QString, bool)), + this, SLOT(logFlipCard(Player *, QString, bool))); + connect(player, SIGNAL(logDestroyCard(Player *, QString)), + this, SLOT(logDestroyCard(Player *, QString))); + connect(player, SIGNAL(logAttachCard(Player *, QString, Player *, QString)), + this, SLOT(logAttachCard(Player *, QString, Player *, QString))); + connect(player, SIGNAL(logUnattachCard(Player *, QString)), + this, SLOT(logUnattachCard(Player *, QString))); + connect(player, SIGNAL(logDumpZone(Player *, CardZone *, int)), + this, SLOT(logDumpZone(Player *, CardZone *, int))); + connect(player, SIGNAL(logStopDumpZone(Player *, CardZone *)), + this, SLOT(logStopDumpZone(Player *, CardZone *))); + connect(player, SIGNAL(logDrawCards(Player *, int)), + this, SLOT(logDrawCards(Player *, int))); + connect(player, SIGNAL(logUndoDraw(Player *, QString)), + this, SLOT(logUndoDraw(Player *, QString))); + connect(player, SIGNAL(logRevealCards(Player *, CardZone *, int, QString, Player *, bool)), + this, SLOT(logRevealCards(Player *, CardZone *, int, QString, Player *, bool))); + connect(player, SIGNAL(logAlwaysRevealTopCard(Player *, CardZone *, bool)), + this, SLOT(logAlwaysRevealTopCard(Player *, CardZone *, bool))); } MessageLogWidget::MessageLogWidget(const TabSupervisor *_tabSupervisor, const UserlistProxy *_userlistProxy, TabGame *_game, QWidget *parent) diff --git a/cockatrice/src/messagelogwidget.h b/cockatrice/src/messagelogwidget.h index e9b058d9..645cb864 100644 --- a/cockatrice/src/messagelogwidget.h +++ b/cockatrice/src/messagelogwidget.h @@ -23,64 +23,76 @@ struct LogMoveCard { class MessageLogWidget : public ChatView { Q_OBJECT private: - enum MessageContext { MessageContext_None, MessageContext_MoveCard, MessageContext_Mulligan }; + enum MessageContext { + MessageContext_None, + MessageContext_MoveCard, + MessageContext_Mulligan + }; - QString sanitizeHtml(QString dirty) const; - QString cardLink(const QString &cardName) const; - QPair getFromStr(CardZone *zone, QString cardName, int position, bool ownerChange) const; + int mulliganNumber; + Player *mulliganPlayer; MessageContext currentContext; - QList moveCardQueue; QMap moveCardPT; QMap moveCardTapped; - Player *mulliganPlayer; - int mulliganNumber; + const QString tableConstant() const; + const QString graveyardConstant() const; + const QString exileConstant() const; + const QString handConstant() const; + const QString deckConstant() const; + const QString sideboardConstant() const; + const QString stackConstant() const; + + QString sanitizeHtml(QString dirty) const; + QString cardLink(const QString cardName) const; + QPair getFromStr(CardZone *zone, QString cardName, int position, bool ownerChange) const; + public slots: - void logGameJoined(int gameId); - void logReplayStarted(int gameId); - void logJoin(Player *player); - void logLeave(Player *player, QString reason); - void logGameClosed(); - void logKicked(); - void logJoinSpectator(QString name); - void logLeaveSpectator(QString name, QString reason); - void logDeckSelect(Player *player, QString deckHash, int sideboardSize); - void logReadyStart(Player *player); - void logNotReadyStart(Player *player); - void logSetSideboardLock(Player *player, bool locked); + void containerProcessingDone(); + void containerProcessingStarted(const GameEventContext &context); + void logAlwaysRevealTopCard(Player *player, CardZone *zone, bool reveal); + void logAttachCard(Player *player, QString cardName, Player *targetPlayer, QString targetCardName); void logConcede(Player *player); - void logGameStart(); void logConnectionStateChanged(Player *player, bool connectionState); - void logSay(Player *player, QString message); - void logSpectatorSay(QString spectatorName, UserLevelFlags spectatorUserLevel, QString userPrivLevel, QString message); - void logShuffle(Player *player, CardZone *zone); - void logRollDie(Player *player, int sides, int roll); + void logCreateArrow(Player *player, Player *startPlayer, QString startCard, Player *targetPlayer, QString targetCard, bool playerTarget); + void logCreateToken(Player *player, QString cardName, QString pt); + void logDeckSelect(Player *player, QString deckHash, int sideboardSize); + void logDestroyCard(Player *player, QString cardName); + void logDoMoveCard(LogMoveCard &lmc); void logDrawCards(Player *player, int number); - void logUndoDraw(Player *player, QString cardName); - void doMoveCard(LogMoveCard &attributes); + void logDumpZone(Player *player, CardZone *zone, int numberCards); + void logFlipCard(Player *player, QString cardName, bool faceDown); + void logGameClosed(); + void logGameStart(); + void logJoin(Player *player); + void logJoinSpectator(QString name); + void logKicked(); + void logLeave(Player *player, QString reason); + void logLeaveSpectator(QString name, QString reason); + void logNotReadyStart(Player *player); void logMoveCard(Player *player, CardItem *card, CardZone *startZone, int oldX, CardZone *targetZone, int newX); void logMulligan(Player *player, int number); - void logFlipCard(Player *player, QString cardName, bool faceDown); - void logDestroyCard(Player *player, QString cardName); - void logAttachCard(Player *player, QString cardName, Player *targetPlayer, QString targetCardName); - void logUnattachCard(Player *player, QString cardName); - void logCreateToken(Player *player, QString cardName, QString pt); - void logCreateArrow(Player *player, Player *startPlayer, QString startCard, Player *targetPlayer, QString targetCard, bool playerTarget); + void logReplayStarted(int gameId); + void logReadyStart(Player *player); + void logRevealCards(Player *player, CardZone *zone, int cardId, QString cardName, Player *otherPlayer, bool faceDown); + void logRollDie(Player *player, int sides, int roll); + void logSay(Player *player, QString message); + void logSetActivePhase(int phase); + void logSetActivePlayer(Player *player); + void logSetAnnotation(Player *player, CardItem *card, QString newAnnotation); void logSetCardCounter(Player *player, QString cardName, int counterId, int value, int oldValue); - void logSetTapped(Player *player, CardItem *card, bool tapped); void logSetCounter(Player *player, QString counterName, int value, int oldValue); void logSetDoesntUntap(Player *player, CardItem *card, bool doesntUntap); void logSetPT(Player *player, CardItem *card, QString newPT); - void logSetAnnotation(Player *player, CardItem *card, QString newAnnotation); - void logDumpZone(Player *player, CardZone *zone, int numberCards); + void logSetSideboardLock(Player *player, bool locked); + void logSetTapped(Player *player, CardItem *card, bool tapped); + void logShuffle(Player *player, CardZone *zone); + void logSpectatorSay(QString spectatorName, UserLevelFlags spectatorUserLevel, QString userPrivLevel, QString message); void logStopDumpZone(Player *player, CardZone *zone); - void logRevealCards(Player *player, CardZone *zone, int cardId, QString cardName, Player *otherPlayer, bool faceDown); - void logAlwaysRevealTopCard(Player *player, CardZone *zone, bool reveal); - void logSetActivePlayer(Player *player); - void logSetActivePhase(int phase); - void containerProcessingStarted(const GameEventContext &context); - void containerProcessingDone(); + void logUnattachCard(Player *player, QString cardName); + void logUndoDraw(Player *player, QString cardName); + public: void connectToPlayer(Player *player); MessageLogWidget(const TabSupervisor *_tabSupervisor, const UserlistProxy *_userlistProxy, TabGame *_game, QWidget *parent = 0); diff --git a/cockatrice/src/tab_game.cpp b/cockatrice/src/tab_game.cpp index dcc87cac..ea0e84e5 100644 --- a/cockatrice/src/tab_game.cpp +++ b/cockatrice/src/tab_game.cpp @@ -412,7 +412,6 @@ TabGame::TabGame(TabSupervisor *_tabSupervisor, QList &_client retranslateUi(); connect(&settingsCache->shortcuts(), SIGNAL(shortCutchanged()),this,SLOT(refreshShortcuts())); refreshShortcuts(); - messageLog->logGameJoined(gameInfo.game_id()); // append game to rooms game list for others to see for (int i = gameInfo.game_types_size() - 1; i >= 0; i--)