From a7b8934a1b43873c15c0856e7688dec3ac3e06a5 Mon Sep 17 00:00:00 2001 From: Fabio Bas Date: Sun, 22 Feb 2015 20:02:58 +0100 Subject: [PATCH] Fix remaining issues --- cockatrice/src/player.cpp | 2 +- common/server_cardzone.cpp | 6 +++--- common/server_cardzone.h | 2 +- common/server_player.cpp | 8 ++++---- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cockatrice/src/player.cpp b/cockatrice/src/player.cpp index 9caad1b1..000d9962 100644 --- a/cockatrice/src/player.cpp +++ b/cockatrice/src/player.cpp @@ -1592,7 +1592,7 @@ void Player::playCard(CardItem *c, bool faceDown, bool tapped) QPoint gridPoint = QPoint(-1, 2 - tableRow); cardToMove->set_face_down(faceDown); cardToMove->set_pt(ci->getPowTough().toStdString()); - cardToMove->set_tapped(tapped); + cardToMove->set_tapped(faceDown ? false : tapped); if (tableRow != 3) cmd.set_target_zone("table"); cmd.set_x(gridPoint.x()); diff --git a/common/server_cardzone.cpp b/common/server_cardzone.cpp index c6456f5f..5ae65093 100644 --- a/common/server_cardzone.cpp +++ b/common/server_cardzone.cpp @@ -85,7 +85,7 @@ void Server_CardZone::insertCardIntoCoordMap(Server_Card *card, int x, int y) coordinateMap[y].insert(x, card); if (!(x % 3)) { - if (!freePilesMap[y].contains(card->getName(), x) && card->getAttachedCards().isEmpty()) + if (!card->getFaceDown() && !freePilesMap[y].contains(card->getName(), x) && card->getAttachedCards().isEmpty()) freePilesMap[y].insert(card->getName(), x); if (freeSpaceMap[y] == x) { int nextFreeX = x; @@ -141,11 +141,11 @@ Server_Card *Server_CardZone::getCard(int id, int *position, bool remove) } } -int Server_CardZone::getFreeGridColumn(int x, int y, const QString &cardName) const +int Server_CardZone::getFreeGridColumn(int x, int y, const QString &cardName, bool dontStackSameName) const { const QMap &coordMap = coordinateMap.value(y); if (x == -1) { - if (freePilesMap[y].contains(cardName)) { + if (!dontStackSameName && freePilesMap[y].contains(cardName)) { x = (freePilesMap[y].value(cardName) / 3) * 3; if (!coordMap.contains(x)) return x; diff --git a/common/server_cardzone.h b/common/server_cardzone.h index a00b367a..102aebb0 100644 --- a/common/server_cardzone.h +++ b/common/server_cardzone.h @@ -62,7 +62,7 @@ public: Server_Player *getPlayer() const { return player; } void getInfo(ServerInfo_Zone *info, Server_Player *playerWhosAsking, bool omniscient); - int getFreeGridColumn(int x, int y, const QString &cardName) const; + int getFreeGridColumn(int x, int y, const QString &cardName, bool dontStackSameName) const; bool isColumnEmpty(int x, int y) const; bool isColumnStacked(int x, int y) const; void fixFreeSpaces(GameEventStorage &ges); diff --git a/common/server_player.cpp b/common/server_player.cpp index f6d7ffce..906577b7 100644 --- a/common/server_player.cpp +++ b/common/server_player.cpp @@ -439,11 +439,12 @@ Response::ResponseCode Server_Player::moveCard(GameEventStorage &ges, Server_Car card->deleteLater(); } else { + card->setFaceDown(faceDown); if (!targetzone->hasCoords()) { y = 0; card->resetState(); } else - newX = targetzone->getFreeGridColumn(newX, y, card->getName()); + newX = targetzone->getFreeGridColumn(newX, y, card->getName(), faceDown); targetzone->insertCard(card, newX, y); @@ -464,7 +465,6 @@ Response::ResponseCode Server_Player::moveCard(GameEventStorage &ges, Server_Car int oldCardId = card->getId(); if ((faceDown && (startzone != targetzone)) || (targetzone->getPlayer() != startzone->getPlayer())) card->setId(targetzone->getPlayer()->newCardId()); - card->setFaceDown(faceDown); // The player does not get to see which card he moved if it moves between two parts of hidden zones which // are not being looked at. @@ -1043,7 +1043,7 @@ Response::ResponseCode Server_Player::cmdAttachCard(const Command_AttachCard &cm if (targetzone->isColumnStacked(targetCard->getX(), targetCard->getY())) { CardToMove *cardToMove = new CardToMove; cardToMove->set_card_id(targetCard->getId()); - targetPlayer->moveCard(ges, targetzone, QList() << cardToMove, targetzone, targetzone->getFreeGridColumn(-2, targetCard->getY(), targetCard->getName()), targetCard->getY(), targetCard->getFaceDown()); + targetPlayer->moveCard(ges, targetzone, QList() << cardToMove, targetzone, targetzone->getFreeGridColumn(-2, targetCard->getY(), targetCard->getName(), false), targetCard->getY(), targetCard->getFaceDown()); delete cardToMove; } @@ -1080,7 +1080,7 @@ Response::ResponseCode Server_Player::cmdCreateToken(const Command_CreateToken & int x = cmd.x(); int y = cmd.y(); if (zone->hasCoords()) - x = zone->getFreeGridColumn(x, y, cardName); + x = zone->getFreeGridColumn(x, y, cardName, false); if (x < 0) x = 0; if (y < 0)