don't send useless information in getGameState; fixed bug that caused an attached card to have undefined coordinates when its parent card was destroyed by conceding or leaving
This commit is contained in:
parent
eb06d6b4ea
commit
5692addf54
4 changed files with 45 additions and 14 deletions
|
@ -108,7 +108,7 @@ void RemoteClient::readData()
|
||||||
|
|
||||||
ServerMessage newServerMessage;
|
ServerMessage newServerMessage;
|
||||||
newServerMessage.ParseFromArray(inputBuffer.data(), messageLength);
|
newServerMessage.ParseFromArray(inputBuffer.data(), messageLength);
|
||||||
qDebug((QString::number(messageLength) + ": " + QString::fromStdString(newServerMessage.ShortDebugString())).toUtf8());
|
qDebug((QString::number(messageLength) + ": " + QString::fromStdString(newServerMessage.DebugString())).toUtf8());
|
||||||
inputBuffer.remove(0, messageLength);
|
inputBuffer.remove(0, messageLength);
|
||||||
messageInProgress = false;
|
messageInProgress = false;
|
||||||
|
|
||||||
|
|
|
@ -317,9 +317,13 @@ void Server_Game::removePlayer(Server_Player *player)
|
||||||
QMutexLocker locker(&gameMutex);
|
QMutexLocker locker(&gameMutex);
|
||||||
|
|
||||||
players.remove(player->getPlayerId());
|
players.remove(player->getPlayerId());
|
||||||
removeArrowsToPlayer(player);
|
|
||||||
|
|
||||||
sendGameEventContainer(prepareGameEvent(Event_Leave(), player->getPlayerId()));
|
GameEventStorage ges;
|
||||||
|
removeArrowsToPlayer(ges, player);
|
||||||
|
unattachCards(ges, player);
|
||||||
|
ges.enqueueGameEvent(Event_Leave(), player->getPlayerId());
|
||||||
|
ges.sendToGame(this);
|
||||||
|
|
||||||
bool playerActive = activePlayer == player->getPlayerId();
|
bool playerActive = activePlayer == player->getPlayerId();
|
||||||
bool playerHost = hostId == player->getPlayerId();
|
bool playerHost = hostId == player->getPlayerId();
|
||||||
bool spectator = player->getSpectator();
|
bool spectator = player->getSpectator();
|
||||||
|
@ -350,7 +354,7 @@ void Server_Game::removePlayer(Server_Player *player)
|
||||||
room->broadcastGameListUpdate(this);
|
room->broadcastGameListUpdate(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Server_Game::removeArrowsToPlayer(Server_Player *player)
|
void Server_Game::removeArrowsToPlayer(GameEventStorage &ges, Server_Player *player)
|
||||||
{
|
{
|
||||||
QMutexLocker locker(&gameMutex);
|
QMutexLocker locker(&gameMutex);
|
||||||
|
|
||||||
|
@ -372,13 +376,31 @@ void Server_Game::removeArrowsToPlayer(Server_Player *player)
|
||||||
for (int i = 0; i < toDelete.size(); ++i) {
|
for (int i = 0; i < toDelete.size(); ++i) {
|
||||||
Event_DeleteArrow event;
|
Event_DeleteArrow event;
|
||||||
event.set_arrow_id(toDelete[i]->getId());
|
event.set_arrow_id(toDelete[i]->getId());
|
||||||
sendGameEventContainer(prepareGameEvent(event, p->getPlayerId()));
|
ges.enqueueGameEvent(event, p->getPlayerId());
|
||||||
|
|
||||||
p->deleteArrow(toDelete[i]->getId());
|
p->deleteArrow(toDelete[i]->getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Server_Game::unattachCards(GameEventStorage &ges, Server_Player *player)
|
||||||
|
{
|
||||||
|
QMutexLocker locker(&gameMutex);
|
||||||
|
|
||||||
|
QMapIterator<QString, Server_CardZone *> zoneIterator(player->getZones());
|
||||||
|
while (zoneIterator.hasNext()) {
|
||||||
|
Server_CardZone *zone = zoneIterator.next().value();
|
||||||
|
for (int i = 0; i < zone->cards.size(); ++i) {
|
||||||
|
Server_Card *card = zone->cards.at(i);
|
||||||
|
|
||||||
|
// Make a copy of the list because the original one gets modified during the loop
|
||||||
|
QList<Server_Card *> attachedCards = card->getAttachedCards();
|
||||||
|
for (int i = 0; i < attachedCards.size(); ++i)
|
||||||
|
attachedCards[i]->getZone()->getPlayer()->unattachCard(ges, attachedCards[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool Server_Game::kickPlayer(int playerId)
|
bool Server_Game::kickPlayer(int playerId)
|
||||||
{
|
{
|
||||||
QMutexLocker roomLocker(&room->roomMutex);
|
QMutexLocker roomLocker(&room->roomMutex);
|
||||||
|
@ -519,14 +541,21 @@ QList<ServerInfo_Player> Server_Game::getGameState(Server_Player *playerWhosAski
|
||||||
cardInfo->set_name(displayedName.toStdString());
|
cardInfo->set_name(displayedName.toStdString());
|
||||||
cardInfo->set_x(card->getX());
|
cardInfo->set_x(card->getX());
|
||||||
cardInfo->set_y(card->getY());
|
cardInfo->set_y(card->getY());
|
||||||
cardInfo->set_face_down(card->getFaceDown());
|
if (card->getFaceDown())
|
||||||
|
cardInfo->set_face_down(true);
|
||||||
cardInfo->set_tapped(card->getTapped());
|
cardInfo->set_tapped(card->getTapped());
|
||||||
cardInfo->set_attacking(card->getAttacking());
|
if (card->getAttacking())
|
||||||
cardInfo->set_color(card->getColor().toStdString());
|
cardInfo->set_attacking(true);
|
||||||
cardInfo->set_pt(card->getPT().toStdString());
|
if (!card->getColor().isEmpty())
|
||||||
cardInfo->set_annotation(card->getAnnotation().toStdString());
|
cardInfo->set_color(card->getColor().toStdString());
|
||||||
cardInfo->set_destroy_on_zone_change(card->getDestroyOnZoneChange());
|
if (!card->getPT().isEmpty())
|
||||||
cardInfo->set_doesnt_untap(card->getDoesntUntap());
|
cardInfo->set_pt(card->getPT().toStdString());
|
||||||
|
if (!card->getAnnotation().isEmpty())
|
||||||
|
cardInfo->set_annotation(card->getAnnotation().toStdString());
|
||||||
|
if (card->getDestroyOnZoneChange())
|
||||||
|
cardInfo->set_destroy_on_zone_change(true);
|
||||||
|
if (card->getDoesntUntap())
|
||||||
|
cardInfo->set_doesnt_untap(true);
|
||||||
|
|
||||||
QList<ServerInfo_CardCounter *> cardCounterList;
|
QList<ServerInfo_CardCounter *> cardCounterList;
|
||||||
QMapIterator<int, int> cardCounterIterator(card->getCounters());
|
QMapIterator<int, int> cardCounterIterator(card->getCounters());
|
||||||
|
|
|
@ -86,7 +86,8 @@ public:
|
||||||
bool containsUser(const QString &userName) const;
|
bool containsUser(const QString &userName) const;
|
||||||
Server_Player *addPlayer(Server_ProtocolHandler *handler, bool spectator, bool broadcastUpdate = true);
|
Server_Player *addPlayer(Server_ProtocolHandler *handler, bool spectator, bool broadcastUpdate = true);
|
||||||
void removePlayer(Server_Player *player);
|
void removePlayer(Server_Player *player);
|
||||||
void removeArrowsToPlayer(Server_Player *player);
|
void removeArrowsToPlayer(GameEventStorage &ges, Server_Player *player);
|
||||||
|
void unattachCards(GameEventStorage &ges, Server_Player *player);
|
||||||
bool kickPlayer(int playerId);
|
bool kickPlayer(int playerId);
|
||||||
void startGameIfReady();
|
void startGameIfReady();
|
||||||
void stopGameIfFinished();
|
void stopGameIfFinished();
|
||||||
|
|
|
@ -897,7 +897,8 @@ Response::ResponseCode Server_ProtocolHandler::cmdConcede(const Command_Concede
|
||||||
return Response::RespContextError;
|
return Response::RespContextError;
|
||||||
|
|
||||||
player->setConceded(true);
|
player->setConceded(true);
|
||||||
game->removeArrowsToPlayer(player);
|
game->removeArrowsToPlayer(ges, player);
|
||||||
|
game->unattachCards(ges, player);
|
||||||
player->clearZones();
|
player->clearZones();
|
||||||
|
|
||||||
Event_PlayerPropertiesChanged event;
|
Event_PlayerPropertiesChanged event;
|
||||||
|
|
Loading…
Reference in a new issue