Handle the case if there is no winner in a game.
This commit is contained in:
@@ -920,11 +920,10 @@ ServerGameStateHand::TimerNextGame(const boost::system::error_code &ec, boost::s
|
|||||||
{
|
{
|
||||||
if (!ec && &server->GetState() == this)
|
if (!ec && &server->GetState() == this)
|
||||||
{
|
{
|
||||||
Game &curGame = server->GetGame();
|
|
||||||
// The game has ended. Notify all clients.
|
// The game has ended. Notify all clients.
|
||||||
boost::shared_ptr<PlayerInterface> winnerPlayer;
|
boost::shared_ptr<PlayerInterface> winnerPlayer;
|
||||||
PlayerListIterator i = curGame.getActivePlayerList()->begin();
|
PlayerListIterator i = server->GetGame().getActivePlayerList()->begin();
|
||||||
PlayerListIterator end = curGame.getActivePlayerList()->end();
|
PlayerListIterator end = server->GetGame().getActivePlayerList()->end();
|
||||||
while (i != end)
|
while (i != end)
|
||||||
{
|
{
|
||||||
winnerPlayer = *i;
|
winnerPlayer = *i;
|
||||||
@@ -933,18 +932,26 @@ ServerGameStateHand::TimerNextGame(const boost::system::error_code &ec, boost::s
|
|||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::shared_ptr<NetPacket> endGame(new NetPacketEndOfGame);
|
if (winnerPlayer)
|
||||||
NetPacketEndOfGame::Data endGameData;
|
{
|
||||||
endGameData.winnerPlayerId = winnerPlayer->getMyUniqueID();
|
boost::shared_ptr<NetPacket> endGame(new NetPacketEndOfGame);
|
||||||
static_cast<NetPacketEndOfGame *>(endGame.get())->SetData(endGameData);
|
NetPacketEndOfGame::Data endGameData;
|
||||||
|
endGameData.winnerPlayerId = winnerPlayer->getMyUniqueID();
|
||||||
|
static_cast<NetPacketEndOfGame *>(endGame.get())->SetData(endGameData);
|
||||||
|
|
||||||
server->SendToAllPlayers(endGame, SessionData::Game);
|
server->SendToAllPlayers(endGame, SessionData::Game);
|
||||||
|
|
||||||
// Wait for the start of a new game.
|
// Wait for the start of a new game.
|
||||||
server->ResetComputerPlayerList();
|
server->ResetComputerPlayerList();
|
||||||
server->ResetGame();
|
server->ResetGame();
|
||||||
server->GetLobbyThread().NotifyReopeningGame(server->GetId());
|
server->GetLobbyThread().NotifyReopeningGame(server->GetId());
|
||||||
server->SetState(ServerGameStateInit::Instance());
|
server->SetState(ServerGameStateInit::Instance());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG_ERROR("Game " << server->GetId() << " - Has no winner!");
|
||||||
|
server->RemoveAllSessions(); // This is fatal, close this game.
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user