merged from master
This commit is contained in:
commit
767d53b5a8
5 changed files with 2182 additions and 2373 deletions
|
@ -65,8 +65,8 @@
|
||||||
<!-- <file>translations/cockatrice_cs.qm</file>
|
<!-- <file>translations/cockatrice_cs.qm</file>
|
||||||
<file>translations/cockatrice_pl.qm</file>
|
<file>translations/cockatrice_pl.qm</file>
|
||||||
<file>translations/cockatrice_sk.qm</file>
|
<file>translations/cockatrice_sk.qm</file>
|
||||||
-->
|
--> <file>translations/cockatrice_sv.qm</file>
|
||||||
<file>translations/cockatrice_sv.qm</file>
|
|
||||||
<file>resources/countries/ar.svg</file>
|
<file>resources/countries/ar.svg</file>
|
||||||
<file>resources/countries/at.svg</file>
|
<file>resources/countries/at.svg</file>
|
||||||
<file>resources/countries/au.svg</file>
|
<file>resources/countries/au.svg</file>
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -413,7 +413,7 @@ void Server_Game::removePlayer(Server_Player *player)
|
||||||
players.remove(player->getPlayerId());
|
players.remove(player->getPlayerId());
|
||||||
|
|
||||||
GameEventStorage ges;
|
GameEventStorage ges;
|
||||||
removeArrowsToPlayer(ges, player);
|
removeArrowsRelatedToPlayer(ges, player);
|
||||||
unattachCards(ges, player);
|
unattachCards(ges, player);
|
||||||
ges.enqueueGameEvent(Event_Leave(), player->getPlayerId());
|
ges.enqueueGameEvent(Event_Leave(), player->getPlayerId());
|
||||||
ges.sendToGame(this);
|
ges.sendToGame(this);
|
||||||
|
@ -451,11 +451,13 @@ void Server_Game::removePlayer(Server_Player *player)
|
||||||
emit gameInfoChanged(gameInfo);
|
emit gameInfoChanged(gameInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Server_Game::removeArrowsToPlayer(GameEventStorage &ges, Server_Player *player)
|
void Server_Game::removeArrowsRelatedToPlayer(GameEventStorage &ges, Server_Player *player)
|
||||||
{
|
{
|
||||||
QMutexLocker locker(&gameMutex);
|
QMutexLocker locker(&gameMutex);
|
||||||
|
|
||||||
// Remove all arrows of other players pointing to the player being removed or to one of his cards.
|
// Remove all arrows of other players pointing to the player being removed or to one of his cards.
|
||||||
|
// Also remove all arrows starting at one of his cards. This is necessary since players can create
|
||||||
|
// arrows that start at another person's cards.
|
||||||
QMapIterator<int, Server_Player *> playerIterator(players);
|
QMapIterator<int, Server_Player *> playerIterator(players);
|
||||||
while (playerIterator.hasNext()) {
|
while (playerIterator.hasNext()) {
|
||||||
Server_Player *p = playerIterator.next().value();
|
Server_Player *p = playerIterator.next().value();
|
||||||
|
@ -467,7 +469,11 @@ void Server_Game::removeArrowsToPlayer(GameEventStorage &ges, Server_Player *pla
|
||||||
if (targetCard) {
|
if (targetCard) {
|
||||||
if (targetCard->getZone()->getPlayer() == player)
|
if (targetCard->getZone()->getPlayer() == player)
|
||||||
toDelete.append(a);
|
toDelete.append(a);
|
||||||
} else if ((static_cast<Server_Player *>(a->getTargetItem()) == player) || (a->getStartCard()->getZone()->getPlayer() == player))
|
} else if (static_cast<Server_Player *>(a->getTargetItem()) == player)
|
||||||
|
toDelete.append(a);
|
||||||
|
|
||||||
|
// Don't use else here! It has to happen regardless of whether targetCard == 0.
|
||||||
|
if (a->getStartCard()->getZone()->getPlayer() == player)
|
||||||
toDelete.append(a);
|
toDelete.append(a);
|
||||||
}
|
}
|
||||||
for (int i = 0; i < toDelete.size(); ++i) {
|
for (int i = 0; i < toDelete.size(); ++i) {
|
||||||
|
|
|
@ -97,7 +97,7 @@ public:
|
||||||
bool containsUser(const QString &userName) const;
|
bool containsUser(const QString &userName) const;
|
||||||
void addPlayer(Server_AbstractUserInterface *userInterface, ResponseContainer &rc, bool spectator, bool broadcastUpdate = true);
|
void addPlayer(Server_AbstractUserInterface *userInterface, ResponseContainer &rc, bool spectator, bool broadcastUpdate = true);
|
||||||
void removePlayer(Server_Player *player);
|
void removePlayer(Server_Player *player);
|
||||||
void removeArrowsToPlayer(GameEventStorage &ges, Server_Player *player);
|
void removeArrowsRelatedToPlayer(GameEventStorage &ges, Server_Player *player);
|
||||||
void unattachCards(GameEventStorage &ges, Server_Player *player);
|
void unattachCards(GameEventStorage &ges, Server_Player *player);
|
||||||
bool kickPlayer(int playerId);
|
bool kickPlayer(int playerId);
|
||||||
void startGameIfReady();
|
void startGameIfReady();
|
||||||
|
|
|
@ -718,7 +718,7 @@ Response::ResponseCode Server_Player::cmdConcede(const Command_Concede & /*cmd*/
|
||||||
return Response::RespContextError;
|
return Response::RespContextError;
|
||||||
|
|
||||||
setConceded(true);
|
setConceded(true);
|
||||||
game->removeArrowsToPlayer(ges, this);
|
game->removeArrowsRelatedToPlayer(ges, this);
|
||||||
game->unattachCards(ges, this);
|
game->unattachCards(ges, this);
|
||||||
clearZones();
|
clearZones();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue