diff --git a/src/net/common/clientstate.cpp b/src/net/common/clientstate.cpp index 2d41dc9f..b9a9ef4e 100644 --- a/src/net/common/clientstate.cpp +++ b/src/net/common/clientstate.cpp @@ -1651,7 +1651,8 @@ ClientStateWaitHand::InternalHandlePacket(boost::shared_ptr client if (numPlayers && seatStates && *seatStates) { for (int i = 0; i < (int)numPlayers; i++) { NetPlayerState_t *seatState = seatStates[i]; - boost::shared_ptr tmpPlayer = client->GetGame()->getPlayerByNumber((i + client->GetOrigGuiPlayerNum()) % numPlayers); + int numberDiff = client->GetStartData().numberOfPlayers - client->GetOrigGuiPlayerNum(); + boost::shared_ptr tmpPlayer = client->GetGame()->getPlayerByNumber((i + numberDiff) % client->GetStartData().numberOfPlayers); if (!tmpPlayer) throw ClientException(__FILE__, __LINE__, ERR_NET_UNKNOWN_PLAYER_ID, 0); switch (*seatState) diff --git a/src/net/common/clientthread.cpp b/src/net/common/clientthread.cpp index 4081eea0..529a6ca0 100644 --- a/src/net/common/clientthread.cpp +++ b/src/net/common/clientthread.cpp @@ -1102,11 +1102,8 @@ ClientThread::MapPlayerDataList() while (i != end) { boost::shared_ptr tmpData(new PlayerData(*(*i))); - int numberDiff = tmpData->GetNumber() - m_origGuiPlayerNum; - if (numberDiff >= 0) - tmpData->SetNumber(numberDiff); - else - tmpData->SetNumber(numPlayers + numberDiff); + int numberDiff = GetStartData().numberOfPlayers - m_origGuiPlayerNum; + tmpData->SetNumber((tmpData->GetNumber() + numberDiff) % GetStartData().numberOfPlayers); mappedList.push_back(tmpData); ++i; } diff --git a/src/net/common/servergamestate.cpp b/src/net/common/servergamestate.cpp index a8cf104c..0dd28a8a 100644 --- a/src/net/common/servergamestate.cpp +++ b/src/net/common/servergamestate.cpp @@ -1197,7 +1197,8 @@ ServerGameStateHand::StartNewHand(boost::shared_ptr server) } PlayerListIterator player_i = curGame.getSeatsList()->begin(); PlayerListIterator player_end = curGame.getSeatsList()->end(); - while (player_i != player_end) { + unsigned playerCounter = 0; + while (player_i != player_end && playerCounter < server->GetStartData().numberOfPlayers) { NetPlayerState_t *seatState = (NetPlayerState_t *)calloc(1, sizeof(NetPlayerState_t)); if ((*player_i)->getMyCash() <= 0) { *seatState = NetPlayerState_playerStateNoMoney; @@ -1208,6 +1209,7 @@ ServerGameStateHand::StartNewHand(boost::shared_ptr server) } ASN_SEQUENCE_ADD(&netHandStart->seatStates.list, seatState); ++player_i; + ++playerCounter; } if (!errorFlag) {