From 1232017e3a998dac94e7f6f6e859c179fb719e87 Mon Sep 17 00:00:00 2001 From: lotodore Date: Sun, 27 May 2007 13:24:52 +0000 Subject: [PATCH] Fixed running more than the first hand in network games. --- src/engine/network_engine/clientboard.cpp | 8 -- src/net/common/clientstate.cpp | 22 +++- src/net/common/serverrecvstate.cpp | 128 +++++++++++----------- 3 files changed, 80 insertions(+), 78 deletions(-) diff --git a/src/engine/network_engine/clientboard.cpp b/src/engine/network_engine/clientboard.cpp index 729c9c92..cc4990b1 100644 --- a/src/engine/network_engine/clientboard.cpp +++ b/src/engine/network_engine/clientboard.cpp @@ -48,19 +48,11 @@ ClientBoard::setHand(HandInterface* br) void ClientBoard::collectSets() { - sets = 0; - int i; - for(i=0; igetMySet(); - } void ClientBoard::collectPot() { - int i; - pot += sets; - sets = 0; - for(i=0; isetMySetNull(); } } diff --git a/src/net/common/clientstate.cpp b/src/net/common/clientstate.cpp index 28c2e998..c40a9f92 100644 --- a/src/net/common/clientstate.cpp +++ b/src/net/common/clientstate.cpp @@ -620,10 +620,8 @@ ClientStateRunHand::InternalProcess(ClientThread &client, boost::shared_ptrgetPlayerArray()[i]->getMyAction(); if (action != 1 && action != 6) curGame->getPlayerArray()[i]->setMyAction(0); + curGame->getPlayerArray()[i]->setMySetNull(); } - // Move sets to pot - curGame->getCurrentHand()->getBoard()->collectSets(); - curGame->getCurrentHand()->getBoard()->collectPot(); client.GetGui().refreshPot(); client.GetGui().refreshSet(); @@ -691,6 +689,12 @@ ClientStateRunHand::InternalProcess(ClientThread &client, boost::shared_ptrgetPlayerArray()[i]->setMyAction(0); + curGame->getPlayerArray()[i]->setMySetNull(); + } // Wait for next Hand. client.SetState(ClientStateWaitHand::Instance()); retVal = MSG_NET_GAME_SERVER_HAND_END; @@ -712,9 +716,9 @@ ClientStateRunHand::InternalProcess(ClientThread &client, boost::shared_ptrgetPlayerByUniqueId((*i).playerId); assert(tmpPlayer); // TODO: throw exception - int tmpCards[2]; - tmpCards[0] = static_cast((*i).cards[0]); - tmpCards[1] = static_cast((*i).cards[1]); + int tmpCards[2]; + tmpCards[0] = static_cast((*i).cards[0]); + tmpCards[1] = static_cast((*i).cards[1]); tmpPlayer->setMyCards(tmpCards); for (int num = 0; num < 5; num++) tmpPlayer->getMyBestHandPosition()[num] = (*i).bestHandPos[num]; @@ -728,6 +732,12 @@ ClientStateRunHand::InternalProcess(ClientThread &client, boost::shared_ptrgetCurrentHand()->getRiver()->setHighestCardsValue(highestValueOfCards); client.GetGui().postRiverRunAnimation1(); + // Reset player sets + for (int i = 0; i < MAX_NUMBER_OF_PLAYERS; i++) + { + curGame->getPlayerArray()[i]->setMyAction(0); + curGame->getPlayerArray()[i]->setMySetNull(); + } // Wait for next Hand. client.SetState(ClientStateWaitHand::Instance()); retVal = MSG_NET_GAME_SERVER_HAND_END; diff --git a/src/net/common/serverrecvstate.cpp b/src/net/common/serverrecvstate.cpp index 01427869..d5b432dd 100644 --- a/src/net/common/serverrecvstate.cpp +++ b/src/net/common/serverrecvstate.cpp @@ -33,7 +33,7 @@ using namespace std; #define SERVER_WAIT_TIMEOUT_MSEC 50 -#define SERVER_NEXT_HAND_DELAY_SEC 5 +#define SERVER_NEXT_HAND_DELAY_SEC 10 ServerRecvState::~ServerRecvState() @@ -459,24 +459,24 @@ ServerRecvStateStartRound::Process(ServerRecvThread &server) curGame.getCurrentHand()->getRiver()->postRiverRun(); // Count active players. If only one player is left, no cards are shown. - int activePlayersCounter = 0; - std::list activePlayers; - for (int i = 0; i < curGame.getActualQuantityPlayers() ; i++) - { - if (curGame.getPlayerArray()[i]->getMyActiveStatus() - && curGame.getPlayerArray()[i]->getMyAction() != PLAYER_ACTION_FOLD) - { - activePlayersCounter++; - activePlayers.push_back(curGame.getPlayerArray()[i]); - } - } - assert(activePlayersCounter); - assert(!activePlayers.empty()); - - if (activePlayersCounter == 1) - { - // End of Hand, but keep cards hidden. - PlayerInterface *player = activePlayers.front(); + int activePlayersCounter = 0; + std::list activePlayers; + for (int i = 0; i < curGame.getActualQuantityPlayers() ; i++) + { + if (curGame.getPlayerArray()[i]->getMyActiveStatus() + && curGame.getPlayerArray()[i]->getMyAction() != PLAYER_ACTION_FOLD) + { + activePlayersCounter++; + activePlayers.push_back(curGame.getPlayerArray()[i]); + } + } + assert(activePlayersCounter); + assert(!activePlayers.empty()); + + if (activePlayersCounter == 1) + { + // End of Hand, but keep cards hidden. + PlayerInterface *player = activePlayers.front(); boost::shared_ptr endHand(new NetPacketEndOfHandHideCards); NetPacketEndOfHandHideCards::Data endHandData; endHandData.playerId = player->getMyUniqueID(); @@ -484,58 +484,58 @@ ServerRecvStateStartRound::Process(ServerRecvThread &server) endHandData.playerMoney = player->getMyCash(); static_cast(endHand.get())->SetData(endHandData); - server.SendToAllPlayers(endHand); - } - else - { - // End of Hand - show cards of active players. + server.SendToAllPlayers(endHand); + } + else + { + // End of Hand - show cards of active players. boost::shared_ptr endHand(new NetPacketEndOfHandShowCards); NetPacketEndOfHandShowCards::Data endHandData; - - std::list::iterator i = activePlayers.begin(); - std::list::iterator end = activePlayers.end(); - - while (i != end) - { - NetPacketEndOfHandShowCards::PlayerResult tmpPlayerResult; - tmpPlayerResult.playerId = (*i)->getMyUniqueID(); - - int tmpCards[2]; - (*i)->getMyCards(tmpCards); - tmpPlayerResult.cards[0] = static_cast(tmpCards[0]); - tmpPlayerResult.cards[1] = static_cast(tmpCards[1]); - - for (int num = 0; num < 5; num++) - tmpPlayerResult.bestHandPos[num] = (*i)->getMyBestHandPosition()[num]; - - tmpPlayerResult.valueOfCards = (*i)->getMyCardsValueInt(); - tmpPlayerResult.moneyWon = 0; // TODO - tmpPlayerResult.playerMoney = (*i)->getMyCash(); - - endHandData.playerResults.push_back(tmpPlayerResult); - ++i; - } + + std::list::iterator i = activePlayers.begin(); + std::list::iterator end = activePlayers.end(); + + while (i != end) + { + NetPacketEndOfHandShowCards::PlayerResult tmpPlayerResult; + tmpPlayerResult.playerId = (*i)->getMyUniqueID(); + + int tmpCards[2]; + (*i)->getMyCards(tmpCards); + tmpPlayerResult.cards[0] = static_cast(tmpCards[0]); + tmpPlayerResult.cards[1] = static_cast(tmpCards[1]); + + for (int num = 0; num < 5; num++) + tmpPlayerResult.bestHandPos[num] = (*i)->getMyBestHandPosition()[num]; + + tmpPlayerResult.valueOfCards = (*i)->getMyCardsValueInt(); + tmpPlayerResult.moneyWon = 0; // TODO + tmpPlayerResult.playerMoney = (*i)->getMyCash(); + + endHandData.playerResults.push_back(tmpPlayerResult); + ++i; + } static_cast(endHand.get())->SetData(endHandData); - server.SendToAllPlayers(endHand); - } - // Start next hand - if enough players are left. - int playersPositiveCashCounter = 0; - for (int i = 0; i < curGame.getStartQuantityPlayers(); i++) - { - if (curGame.getCurrentHand()->getPlayerArray()[i]->getMyCash() > 0) - playersPositiveCashCounter++; - } - if (playersPositiveCashCounter == 1) - server.SetState(ServerRecvStateFinal::Instance()); // TODO - else - { + server.SendToAllPlayers(endHand); + } + // Start next hand - if enough players are left. + int playersPositiveCashCounter = 0; + for (int i = 0; i < curGame.getStartQuantityPlayers(); i++) + { + if (curGame.getCurrentHand()->getPlayerArray()[i]->getMyCash() > 0) + playersPositiveCashCounter++; + } + if (playersPositiveCashCounter == 1) + server.SetState(ServerRecvStateFinal::Instance()); // TODO + else + { boost::microsec_timer delayTimer; delayTimer.start(); ServerRecvStateNextHand::Instance().SetTimer(delayTimer); - server.SetState(ServerRecvStateNextHand::Instance()); - retVal = MSG_NET_GAME_SERVER_HAND_END; - } + server.SetState(ServerRecvStateNextHand::Instance()); + retVal = MSG_NET_GAME_SERVER_HAND_END; + } } return retVal; }