diff --git a/common/server_game.cpp b/common/server_game.cpp index 63abe40d..7e9b4955 100644 --- a/common/server_game.cpp +++ b/common/server_game.cpp @@ -138,7 +138,8 @@ void Server_Game::startGameIfReady() query.exec(); } */ - setActivePlayer(0); + activePlayer = -1; + nextTurn(); } void Server_Game::stopGameIfFinished() @@ -254,6 +255,21 @@ void Server_Game::setActivePhase(int _activePhase) sendGameEvent(new Event_SetActivePhase(-1, activePhase)); } +void Server_Game::nextTurn() +{ + const QList keys = players.keys(); + int listPos = -1; + if (activePlayer != -1) + listPos = keys.indexOf(activePlayer); + do { + ++listPos; + if (listPos == keys.size()) + listPos = 0; + } while (players.value(keys[listPos])->getSpectator()); + + setActivePlayer(keys[listPos]); +} + QList Server_Game::getGameState(Server_Player *playerWhosAsking) const { QList result; diff --git a/common/server_game.h b/common/server_game.h index c6df423f..cd70ebf6 100644 --- a/common/server_game.h +++ b/common/server_game.h @@ -76,6 +76,7 @@ public: int getActivePhase() const { return activePhase; } void setActivePlayer(int _activePlayer); void setActivePhase(int _activePhase); + void nextTurn(); QList getGameState(Server_Player *playerWhosAsking) const; void sendGameEvent(GameEvent *event, GameEventContext *context = 0, Server_Player *exclude = 0); diff --git a/common/server_protocolhandler.cpp b/common/server_protocolhandler.cpp index 6251c631..b7bc934d 100644 --- a/common/server_protocolhandler.cpp +++ b/common/server_protocolhandler.cpp @@ -952,18 +952,7 @@ ResponseCode Server_ProtocolHandler::cmdNextTurn(Command_NextTurn * /*cmd*/, Com if (!game->getGameStarted()) return RespGameNotStarted; - const QMap &players = game->getPlayers(); - const QList keys = players.keys(); - - int activePlayer = game->getActivePlayer(); - int listPos = keys.indexOf(activePlayer); - do { - ++listPos; - if (listPos == keys.size()) - listPos = 0; - } while (players.value(keys[listPos])->getSpectator()); - - game->setActivePlayer(keys[listPos]); + game->nextTurn(); return RespOk; }