mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-12 09:04:53 -07:00
blah
This commit is contained in:
parent
55482246dd
commit
59e9416f57
29 changed files with 332 additions and 187 deletions
|
|
@ -37,6 +37,7 @@ void ProtocolItem::initializeHash()
|
|||
|
||||
registerSerializableItem("generic_eventlist_games", Event_ListGames::newItem);
|
||||
registerSerializableItem("generic_eventlist_chat_channels", Event_ListChatChannels::newItem);
|
||||
registerSerializableItem("game_eventjoin", Event_Join::newItem);
|
||||
registerSerializableItem("game_eventgame_state_changed", Event_GameStateChanged::newItem);
|
||||
registerSerializableItem("game_eventcreate_arrows", Event_CreateArrows::newItem);
|
||||
registerSerializableItem("game_eventcreate_counters", Event_CreateCounters::newItem);
|
||||
|
|
@ -214,9 +215,20 @@ Event_ListGames::Event_ListGames(const QList<ServerInfo_Game *> &_gameList)
|
|||
itemList.append(_gameList[i]);
|
||||
}
|
||||
|
||||
Event_GameStateChanged::Event_GameStateChanged(int _gameId, const QList<ServerInfo_Player *> &_playerList)
|
||||
Event_Join::Event_Join(int _gameId, ServerInfo_Player *player)
|
||||
: GameEvent("join", _gameId, -1)
|
||||
{
|
||||
if (!player)
|
||||
player = new ServerInfo_Player;
|
||||
insertItem(player);
|
||||
}
|
||||
|
||||
Event_GameStateChanged::Event_GameStateChanged(int _gameId, bool _gameStarted, int _activePlayer, int _activePhase, const QList<ServerInfo_Player *> &_playerList)
|
||||
: GameEvent("game_state_changed", _gameId, -1)
|
||||
{
|
||||
insertItem(new SerializableItem_Bool("game_started", _gameStarted));
|
||||
insertItem(new SerializableItem_Int("active_player", _activePlayer));
|
||||
insertItem(new SerializableItem_Int("active_phase", _activePhase));
|
||||
for (int i = 0; i < _playerList.size(); ++i)
|
||||
itemList.append(_playerList[i]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ enum ItemId {
|
|||
ItemId_Event_CreateArrows = ItemId_Other + 204,
|
||||
ItemId_Event_CreateCounters = ItemId_Other + 205,
|
||||
ItemId_Event_DrawCards = ItemId_Other + 206,
|
||||
ItemId_Event_Join = ItemId_Other + 207,
|
||||
ItemId_Response_DeckList = ItemId_Other + 300,
|
||||
ItemId_Response_DeckDownload = ItemId_Other + 301,
|
||||
ItemId_Response_DeckUpload = ItemId_Other + 302,
|
||||
|
|
@ -236,13 +237,25 @@ public:
|
|||
QList<ServerInfo_Game *> getGameList() const { return typecastItemList<ServerInfo_Game *>(); }
|
||||
};
|
||||
|
||||
class Event_Join : public GameEvent {
|
||||
Q_OBJECT
|
||||
public:
|
||||
Event_Join(int _gameId = -1, ServerInfo_Player * player = 0);
|
||||
static SerializableItem *newItem() { return new Event_Join; }
|
||||
int getItemId() const { return ItemId_Event_Join; }
|
||||
ServerInfo_Player *getPlayer() const { return static_cast<ServerInfo_Player *>(itemMap.value("player")); }
|
||||
};
|
||||
|
||||
class Event_GameStateChanged : public GameEvent {
|
||||
Q_OBJECT
|
||||
public:
|
||||
Event_GameStateChanged(int _gameId = -1, const QList<ServerInfo_Player *> &_playerList = QList<ServerInfo_Player *>());
|
||||
Event_GameStateChanged(int _gameId = -1, bool _gameStarted = false, int _activePlayer = -1, int _activePhase = -1, const QList<ServerInfo_Player *> &_playerList = QList<ServerInfo_Player *>());
|
||||
static SerializableItem *newItem() { return new Event_GameStateChanged; }
|
||||
int getItemId() const { return ItemId_Event_GameStateChanged; }
|
||||
QList<ServerInfo_Player *> getPlayerList() const { return typecastItemList<ServerInfo_Player *>(); }
|
||||
bool getGameStarted() const { return static_cast<SerializableItem_Bool *>(itemMap.value("game_started"))->getData(); }
|
||||
int getActivePlayer() const { return static_cast<SerializableItem_Int *>(itemMap.value("active_player"))->getData(); }
|
||||
int getActivePhase() const { return static_cast<SerializableItem_Int *>(itemMap.value("active_phase"))->getData(); }
|
||||
};
|
||||
|
||||
class Event_CreateArrows : public GameEvent {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#include "protocol_datastructures.h"
|
||||
#include "decklist.h"
|
||||
#include <QXmlStreamReader>
|
||||
#include <QXmlStreamWriter>
|
||||
|
||||
|
|
@ -107,11 +108,16 @@ ServerInfo_Arrow::ServerInfo_Arrow(int _id, int _startPlayerId, const QString &_
|
|||
insertItem(new SerializableItem_Color("color", _color));
|
||||
}
|
||||
|
||||
ServerInfo_Player::ServerInfo_Player(int _playerId, const QString &_name, const QList<ServerInfo_Zone *> &_zoneList, const QList<ServerInfo_Counter *> &_counterList, const QList<ServerInfo_Arrow *> &_arrowList)
|
||||
ServerInfo_Player::ServerInfo_Player(int _playerId, const QString &_name, bool _spectator, DeckList *_deck, const QList<ServerInfo_Zone *> &_zoneList, const QList<ServerInfo_Counter *> &_counterList, const QList<ServerInfo_Arrow *> &_arrowList)
|
||||
: SerializableItem_Map("player"), zoneList(_zoneList), counterList(_counterList), arrowList(_arrowList)
|
||||
{
|
||||
insertItem(new SerializableItem_Int("player_id", _playerId));
|
||||
insertItem(new SerializableItem_String("name", _name));
|
||||
insertItem(new SerializableItem_Bool("spectator", _spectator));
|
||||
if (!_deck)
|
||||
insertItem(new DeckList);
|
||||
else
|
||||
insertItem(new DeckList(_deck));
|
||||
|
||||
for (int i = 0; i < _zoneList.size(); ++i)
|
||||
itemList.append(_zoneList[i]);
|
||||
|
|
@ -136,6 +142,11 @@ void ServerInfo_Player::extractData()
|
|||
}
|
||||
}
|
||||
|
||||
DeckList *ServerInfo_Player::getDeck() const
|
||||
{
|
||||
return static_cast<DeckList *>(itemMap.value("cockatrice_deck"));
|
||||
}
|
||||
|
||||
DeckList_TreeItem::DeckList_TreeItem(const QString &_itemType, const QString &_name, int _id)
|
||||
: SerializableItem_Map(_itemType)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@
|
|||
#include <QDateTime>
|
||||
#include "serializable_item.h"
|
||||
|
||||
class DeckList;
|
||||
|
||||
enum ResponseCode { RespNothing, RespOk, RespInvalidCommand, RespInvalidData, RespNameNotFound, RespLoginNeeded, RespContextError, RespWrongPassword, RespSpectatorsNotAllowed };
|
||||
|
||||
// PrivateZone: Contents of the zone are always visible to the owner,
|
||||
|
|
@ -110,10 +112,12 @@ private:
|
|||
protected:
|
||||
void extractData();
|
||||
public:
|
||||
ServerInfo_Player(int _playerId = -1, const QString &_name = QString(), const QList<ServerInfo_Zone *> &_zoneList = QList<ServerInfo_Zone *>(), const QList<ServerInfo_Counter *> &_counterList = QList<ServerInfo_Counter *>(), const QList<ServerInfo_Arrow *> &_arrowList = QList<ServerInfo_Arrow *>());
|
||||
ServerInfo_Player(int _playerId = -1, const QString &_name = QString(), bool _spectator = false, DeckList *_deck = 0, const QList<ServerInfo_Zone *> &_zoneList = QList<ServerInfo_Zone *>(), const QList<ServerInfo_Counter *> &_counterList = QList<ServerInfo_Counter *>(), const QList<ServerInfo_Arrow *> &_arrowList = QList<ServerInfo_Arrow *>());
|
||||
static SerializableItem *newItem() { return new ServerInfo_Player; }
|
||||
int getPlayerId() const { return static_cast<SerializableItem_Int *>(itemMap.value("player_id"))->getData(); }
|
||||
QString getName() const { return static_cast<SerializableItem_String *>(itemMap.value("name"))->getData(); }
|
||||
bool getSpectator() const { return static_cast<SerializableItem_Bool *>(itemMap.value("spectator"))->getData(); }
|
||||
DeckList *getDeck() const;
|
||||
const QList<ServerInfo_Zone *> &getZoneList() const { return zoneList; }
|
||||
const QList<ServerInfo_Counter *> &getCounterList() const { return counterList; }
|
||||
const QList<ServerInfo_Arrow *> &getArrowList() const { return arrowList; }
|
||||
|
|
|
|||
|
|
@ -33,28 +33,27 @@ ItemId_Command_SetActivePhase = 1031,
|
|||
ItemId_Command_DumpZone = 1032,
|
||||
ItemId_Command_StopDumpZone = 1033,
|
||||
ItemId_Event_Say = 1034,
|
||||
ItemId_Event_Join = 1035,
|
||||
ItemId_Event_Leave = 1036,
|
||||
ItemId_Event_DeckSelect = 1037,
|
||||
ItemId_Event_GameClosed = 1038,
|
||||
ItemId_Event_ReadyStart = 1039,
|
||||
ItemId_Event_GameStart = 1040,
|
||||
ItemId_Event_Shuffle = 1041,
|
||||
ItemId_Event_RollDie = 1042,
|
||||
ItemId_Event_MoveCard = 1043,
|
||||
ItemId_Event_CreateToken = 1044,
|
||||
ItemId_Event_DeleteArrow = 1045,
|
||||
ItemId_Event_SetCardAttr = 1046,
|
||||
ItemId_Event_SetCounter = 1047,
|
||||
ItemId_Event_DelCounter = 1048,
|
||||
ItemId_Event_SetActivePlayer = 1049,
|
||||
ItemId_Event_SetActivePhase = 1050,
|
||||
ItemId_Event_DumpZone = 1051,
|
||||
ItemId_Event_StopDumpZone = 1052,
|
||||
ItemId_Event_ServerMessage = 1053,
|
||||
ItemId_Event_GameJoined = 1054,
|
||||
ItemId_Event_ChatJoinChannel = 1055,
|
||||
ItemId_Event_ChatLeaveChannel = 1056,
|
||||
ItemId_Event_ChatSay = 1057,
|
||||
ItemId_Other = 1058
|
||||
ItemId_Event_Leave = 1035,
|
||||
ItemId_Event_DeckSelect = 1036,
|
||||
ItemId_Event_GameClosed = 1037,
|
||||
ItemId_Event_ReadyStart = 1038,
|
||||
ItemId_Event_GameStart = 1039,
|
||||
ItemId_Event_Shuffle = 1040,
|
||||
ItemId_Event_RollDie = 1041,
|
||||
ItemId_Event_MoveCard = 1042,
|
||||
ItemId_Event_CreateToken = 1043,
|
||||
ItemId_Event_DeleteArrow = 1044,
|
||||
ItemId_Event_SetCardAttr = 1045,
|
||||
ItemId_Event_SetCounter = 1046,
|
||||
ItemId_Event_DelCounter = 1047,
|
||||
ItemId_Event_SetActivePlayer = 1048,
|
||||
ItemId_Event_SetActivePhase = 1049,
|
||||
ItemId_Event_DumpZone = 1050,
|
||||
ItemId_Event_StopDumpZone = 1051,
|
||||
ItemId_Event_ServerMessage = 1052,
|
||||
ItemId_Event_GameJoined = 1053,
|
||||
ItemId_Event_ChatJoinChannel = 1054,
|
||||
ItemId_Event_ChatLeaveChannel = 1055,
|
||||
ItemId_Event_ChatSay = 1056,
|
||||
ItemId_Other = 1057
|
||||
};
|
||||
|
|
|
|||
|
|
@ -195,12 +195,6 @@ Event_Say::Event_Say(int _gameId, int _playerId, const QString &_message)
|
|||
{
|
||||
insertItem(new SerializableItem_String("message", _message));
|
||||
}
|
||||
Event_Join::Event_Join(int _gameId, int _playerId, const QString &_playerName, bool _spectator)
|
||||
: GameEvent("join", _gameId, _playerId)
|
||||
{
|
||||
insertItem(new SerializableItem_String("player_name", _playerName));
|
||||
insertItem(new SerializableItem_Bool("spectator", _spectator));
|
||||
}
|
||||
Event_Leave::Event_Leave(int _gameId, int _playerId)
|
||||
: GameEvent("leave", _gameId, _playerId)
|
||||
{
|
||||
|
|
@ -365,7 +359,6 @@ void ProtocolItem::initializeHashAuto()
|
|||
itemNameHash.insert("cmddump_zone", Command_DumpZone::newItem);
|
||||
itemNameHash.insert("cmdstop_dump_zone", Command_StopDumpZone::newItem);
|
||||
itemNameHash.insert("game_eventsay", Event_Say::newItem);
|
||||
itemNameHash.insert("game_eventjoin", Event_Join::newItem);
|
||||
itemNameHash.insert("game_eventleave", Event_Leave::newItem);
|
||||
itemNameHash.insert("game_eventdeck_select", Event_DeckSelect::newItem);
|
||||
itemNameHash.insert("game_eventgame_closed", Event_GameClosed::newItem);
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@
|
|||
2:dump_zone:i,player_id:s,zone_name:i,number_cards
|
||||
2:stop_dump_zone:i,player_id:s,zone_name
|
||||
3:say:s,message
|
||||
3:join:s,player_name:b,spectator
|
||||
3:leave
|
||||
3:deck_select:i,deck_id
|
||||
3:game_closed
|
||||
|
|
|
|||
|
|
@ -299,15 +299,6 @@ public:
|
|||
static SerializableItem *newItem() { return new Event_Say; }
|
||||
int getItemId() const { return ItemId_Event_Say; }
|
||||
};
|
||||
class Event_Join : public GameEvent {
|
||||
Q_OBJECT
|
||||
public:
|
||||
Event_Join(int _gameId = -1, int _playerId = -1, const QString &_playerName = QString(), bool _spectator = false);
|
||||
QString getPlayerName() const { return static_cast<SerializableItem_String *>(itemMap.value("player_name"))->getData(); };
|
||||
bool getSpectator() const { return static_cast<SerializableItem_Bool *>(itemMap.value("spectator"))->getData(); };
|
||||
static SerializableItem *newItem() { return new Event_Join; }
|
||||
int getItemId() const { return ItemId_Event_Join; }
|
||||
};
|
||||
class Event_Leave : public GameEvent {
|
||||
Q_OBJECT
|
||||
public:
|
||||
|
|
|
|||
|
|
@ -56,16 +56,12 @@ void SerializableItem_Map::readElement(QXmlStreamReader *xml)
|
|||
else if (xml->isStartElement()) {
|
||||
QString childName = xml->name().toString();
|
||||
QString childSubType = xml->attributes().value("type").toString();
|
||||
qDebug() << "Map: started new item, name=" << childName << "subtype=" << childSubType;
|
||||
currentItem = itemMap.value(childName);
|
||||
if (!currentItem) {
|
||||
qDebug() << "Item not found in map";
|
||||
currentItem = getNewItem(childName + childSubType);
|
||||
itemList.append(currentItem);
|
||||
if (!currentItem) {
|
||||
qDebug() << "Item still not found";
|
||||
if (!currentItem)
|
||||
currentItem = new SerializableItem_Invalid(childName);
|
||||
}
|
||||
}
|
||||
if (currentItem->read(xml))
|
||||
currentItem = 0;
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
#include "server_counter.h"
|
||||
#include "server_chatchannel.h"
|
||||
#include "server_protocolhandler.h"
|
||||
|
||||
#include <QDebug>
|
||||
Server::Server(QObject *parent)
|
||||
: QObject(parent), nextGameId(0)
|
||||
{
|
||||
|
|
@ -54,6 +54,22 @@ void Server::removeClient(Server_ProtocolHandler *client)
|
|||
qDebug(QString("Server::removeClient: %1 clients left").arg(clients.size()).toLatin1());
|
||||
}
|
||||
|
||||
void Server::closeOldSession(const QString &playerName)
|
||||
{
|
||||
qDebug() << "closing old";
|
||||
Server_ProtocolHandler *session = 0;
|
||||
for (int i = 0; i < clients.size(); ++i)
|
||||
if (clients[i]->getPlayerName() == playerName) {
|
||||
session = clients[i];
|
||||
break;
|
||||
}
|
||||
if (session) {
|
||||
qDebug() << "found";
|
||||
removeClient(session);
|
||||
delete session;
|
||||
}
|
||||
}
|
||||
|
||||
Server_Game *Server::getGame(int gameId) const
|
||||
{
|
||||
return games.value(gameId);
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ public:
|
|||
|
||||
void addClient(Server_ProtocolHandler *player);
|
||||
void removeClient(Server_ProtocolHandler *player);
|
||||
void closeOldSession(const QString &playerName);
|
||||
virtual QString getLoginMessage() const = 0;
|
||||
Server_Game *createGame(const QString &description, const QString &password, int maxPlayers, bool spectatorsAllowed, Server_ProtocolHandler *creator);
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -59,10 +59,12 @@ void Server_Game::startGameIfReady()
|
|||
playerIterator.toFront();
|
||||
while (playerIterator.hasNext())
|
||||
playerIterator.next().value()->setupZones();
|
||||
|
||||
gameStarted = true;
|
||||
playerIterator.toFront();
|
||||
while (playerIterator.hasNext()) {
|
||||
Server_Player *player = playerIterator.next().value();
|
||||
player->sendProtocolItem(new Event_GameStateChanged(gameId, getGameState(player)));
|
||||
player->sendProtocolItem(new Event_GameStateChanged(gameId, gameStarted, 0, 0, getGameState(player)));
|
||||
}
|
||||
|
||||
/* QSqlQuery query;
|
||||
|
|
@ -81,7 +83,6 @@ void Server_Game::startGameIfReady()
|
|||
query.exec();
|
||||
}
|
||||
*/
|
||||
gameStarted = true;
|
||||
sendGameEvent(new Event_GameStart);
|
||||
setActivePlayer(0);
|
||||
}
|
||||
|
|
@ -115,7 +116,7 @@ Server_Player *Server_Game::addPlayer(Server_ProtocolHandler *handler, bool spec
|
|||
playerId = -1;
|
||||
|
||||
Server_Player *newPlayer = new Server_Player(this, playerId, handler->getPlayerName(), spectator, handler);
|
||||
sendGameEvent(new Event_Join(-1, playerId, handler->getPlayerName(), spectator));
|
||||
sendGameEvent(new Event_Join(-1, new ServerInfo_Player(playerId, handler->getPlayerName(), spectator)));
|
||||
|
||||
if (spectator)
|
||||
spectators << newPlayer;
|
||||
|
|
@ -214,7 +215,7 @@ QList<ServerInfo_Player *> Server_Game::getGameState(Server_Player *playerWhosAs
|
|||
zoneList.append(new ServerInfo_Zone(zone->getName(), zone->getType(), zone->hasCoords(), zone->cards.size(), cardList));
|
||||
}
|
||||
|
||||
result.append(new ServerInfo_Player(player->getPlayerId(), player->getPlayerName(), zoneList, counterList, arrowList));
|
||||
result.append(new ServerInfo_Player(player->getPlayerId(), player->getPlayerName(), player->getSpectator(), player->getDeck(), zoneList, counterList, arrowList));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,8 +22,12 @@ Server_ProtocolHandler::~Server_ProtocolHandler()
|
|||
// The socket has to be removed from the server's list before it is removed from the game's list
|
||||
// so it will not receive the game update event.
|
||||
server->removeClient(this);
|
||||
// if (game)
|
||||
// game->removePlayer(this);
|
||||
|
||||
QMapIterator<int, QPair<Server_Game *, Server_Player *> > gameIterator(games);
|
||||
while (gameIterator.hasNext()) {
|
||||
Server_Player *p = gameIterator.next().value().second;
|
||||
p->setProtocolHandler(0);
|
||||
}
|
||||
|
||||
QMapIterator<QString, Server_ChatChannel *> chatChannelIterator(chatChannels);
|
||||
while (chatChannelIterator.hasNext())
|
||||
|
|
@ -135,12 +139,29 @@ ResponseCode Server_ProtocolHandler::cmdPing(Command_Ping * /*cmd*/)
|
|||
|
||||
ResponseCode Server_ProtocolHandler::cmdLogin(Command_Login *cmd)
|
||||
{
|
||||
authState = server->checkUserPassword(cmd->getUsername(), cmd->getPassword());
|
||||
QString userName = cmd->getUsername();
|
||||
authState = server->checkUserPassword(userName, cmd->getPassword());
|
||||
if (authState == PasswordWrong)
|
||||
return RespWrongPassword;
|
||||
playerName = cmd->getUsername();
|
||||
|
||||
if (authState == PasswordRight)
|
||||
server->closeOldSession(userName);
|
||||
|
||||
playerName = userName;
|
||||
enqueueProtocolItem(new Event_ServerMessage(server->getLoginMessage()));
|
||||
|
||||
// This might not scale very well. Use an extra QMap if it becomes a problem.
|
||||
const QList<Server_Game *> &serverGames = server->getGames();
|
||||
for (int i = 0; i < serverGames.size(); ++i) {
|
||||
const QList<Server_Player *> &gamePlayers = serverGames[i]->getPlayers();
|
||||
for (int j = 0; j < gamePlayers.size(); ++j)
|
||||
if (gamePlayers[j]->getPlayerName() == playerName) {
|
||||
gamePlayers[j]->setProtocolHandler(this);
|
||||
games.insert(serverGames[i]->getGameId(), QPair<Server_Game *, Server_Player *>(serverGames[i], gamePlayers[j]));
|
||||
enqueueProtocolItem(new Event_GameJoined(serverGames[i]->getGameId(), gamePlayers[j]->getPlayerId(), gamePlayers[j]->getSpectator()));
|
||||
enqueueProtocolItem(new Event_GameStateChanged(serverGames[i]->getGameId(), serverGames[i]->getGameStarted(), serverGames[i]->getActivePlayer(), serverGames[i]->getActivePhase(), serverGames[i]->getGameState(gamePlayers[j])));
|
||||
}
|
||||
}
|
||||
|
||||
return RespOk;
|
||||
}
|
||||
|
||||
|
|
@ -222,7 +243,7 @@ ResponseCode Server_ProtocolHandler::cmdCreateGame(Command_CreateGame *cmd)
|
|||
games.insert(game->getGameId(), QPair<Server_Game *, Server_Player *>(game, creator));
|
||||
|
||||
enqueueProtocolItem(new Event_GameJoined(game->getGameId(), creator->getPlayerId(), false));
|
||||
enqueueProtocolItem(new Event_GameStateChanged(game->getGameId(), game->getGameState(creator)));
|
||||
enqueueProtocolItem(new Event_GameStateChanged(game->getGameId(), game->getGameStarted(), game->getActivePlayer(), game->getActivePhase(), game->getGameState(creator)));
|
||||
return RespOk;
|
||||
}
|
||||
|
||||
|
|
@ -237,7 +258,7 @@ ResponseCode Server_ProtocolHandler::cmdJoinGame(Command_JoinGame *cmd)
|
|||
Server_Player *player = g->addPlayer(this, cmd->getSpectator());
|
||||
games.insert(cmd->getGameId(), QPair<Server_Game *, Server_Player *>(g, player));
|
||||
enqueueProtocolItem(new Event_GameJoined(cmd->getGameId(), player->getPlayerId(), cmd->getSpectator()));
|
||||
enqueueProtocolItem(new Event_GameStateChanged(cmd->getGameId(), g->getGameState(player)));
|
||||
enqueueProtocolItem(new Event_GameStateChanged(cmd->getGameId(), g->getGameStarted(), g->getActivePlayer(), g->getActivePhase(), g->getGameState(player)));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
@ -357,7 +378,10 @@ ResponseCode Server_ProtocolHandler::cmdMoveCard(Command_MoveCard *cmd, Server_G
|
|||
privateCardId = -1;
|
||||
privateCardName = QString();
|
||||
}
|
||||
player->sendProtocolItem(new Event_MoveCard(game->getGameId(), player->getPlayerId(), privateCardId, privateCardName, startzone->getName(), position, targetzone->getName(), x, y, facedown));
|
||||
int privatePosition = -1;
|
||||
if (startzone->getType() == HiddenZone)
|
||||
privatePosition = position;
|
||||
player->sendProtocolItem(new Event_MoveCard(game->getGameId(), player->getPlayerId(), privateCardId, privateCardName, startzone->getName(), privatePosition, targetzone->getName(), x, y, facedown));
|
||||
|
||||
// Other players do not get to see the start and/or target position of the card if the respective
|
||||
// part of the zone is being looked at. The information is not needed anyway because in hidden zones,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue