diff --git a/src/engine/boardinterface.h b/src/engine/boardinterface.h index 813d2ef5..79c8989f 100644 --- a/src/engine/boardinterface.h +++ b/src/engine/boardinterface.h @@ -53,6 +53,8 @@ public: virtual void distributePot() =0; + virtual std::list getWinners() const =0; + }; diff --git a/src/engine/local_engine/localboard.cpp b/src/engine/local_engine/localboard.cpp index 2deffece..de72f55b 100755 --- a/src/engine/local_engine/localboard.cpp +++ b/src/engine/local_engine/localboard.cpp @@ -73,6 +73,8 @@ void LocalBoard::collectPot() { void LocalBoard::distributePot() { + winners.clear(); + size_t i,j,k,l; PlayerListIterator it; PlayerListConstIterator it_c; @@ -177,11 +179,14 @@ void LocalBoard::distributePot() { throw LocalException(ERR_SEAT_NOT_FOUND); } (*it)->setMyCash( (*it)->getMyCash() + ((potLevel[1])/winnerCount)); + + // filling winners vector + winners.push_back((*it)->getMyID()); } } // pot level sum not divisible by winnerCount - // --> distribution after smallBlind (perhaps lastActionPlayer? - TODO) + // --> distribution after smallBlind else { winnerPointer = currentHand->getDealerPosition(); @@ -215,8 +220,12 @@ void LocalBoard::distributePot() { } if(jsetMyCash( (*it)->getMyCash() + (int)((potLevel[1])/winnerCount) + 1); + // filling winners vector + winners.push_back((*it)->getMyID()); } else { (*it)->setMyCash( (*it)->getMyCash() + (int)((potLevel[1])/winnerCount)); + // filling winners vector + winners.push_back((*it)->getMyID()); } } } @@ -241,6 +250,11 @@ void LocalBoard::distributePot() { } } + // winners sort and unique + winners.sort(); + winners.unique(); + + // ERROR-Outputs if(pot!=0) cout << "distributePot-ERROR: Pot = " << pot << endl; diff --git a/src/engine/local_engine/localboard.h b/src/engine/local_engine/localboard.h index 93c1ef7f..e0f462c0 100755 --- a/src/engine/local_engine/localboard.h +++ b/src/engine/local_engine/localboard.h @@ -50,6 +50,8 @@ public: void collectPot() ; void distributePot(); + + std::list getWinners() const { return winners; } private: @@ -60,6 +62,8 @@ private: HandInterface *currentHand; + std::list winners; + int myCards[5]; int pot; int sets; diff --git a/src/engine/local_engine/localplayer.h b/src/engine/local_engine/localplayer.h index b7637583..81574258 100755 --- a/src/engine/local_engine/localplayer.h +++ b/src/engine/local_engine/localplayer.h @@ -142,8 +142,8 @@ public: bool getSBluffStatus() const { return sBluffStatus; } void setMyWinnerState ( bool theValue, int pot ) { - myWinnerState = theValue; - if(theValue) actualHand->getGuiInterface()->logPlayerWinsMsg(myName, pot); + if(theValue) myWinnerState = theValue; + actualHand->getGuiInterface()->logPlayerWinsMsg(myName, pot, theValue); } bool getMyWinnerState() const { return myWinnerState;} diff --git a/src/engine/network_engine/clientboard.cpp b/src/engine/network_engine/clientboard.cpp index 809c57a1..aec19e00 100644 --- a/src/engine/network_engine/clientboard.cpp +++ b/src/engine/network_engine/clientboard.cpp @@ -119,4 +119,10 @@ ClientBoard::distributePot() } +std::list +ClientBoard::getWinners() const +{ + return winners; +} + diff --git a/src/engine/network_engine/clientboard.h b/src/engine/network_engine/clientboard.h index e9166254..94a8cd43 100644 --- a/src/engine/network_engine/clientboard.h +++ b/src/engine/network_engine/clientboard.h @@ -50,6 +50,8 @@ public: void distributePot(); + std::list getWinners() const; + private: mutable boost::recursive_mutex m_syncMutex; @@ -60,6 +62,8 @@ private: HandInterface *actualHand; + std::list winners; + int myCards[5]; int pot; int sets; diff --git a/src/engine/network_engine/clientplayer.cpp b/src/engine/network_engine/clientplayer.cpp index 97839ac5..520e6025 100644 --- a/src/engine/network_engine/clientplayer.cpp +++ b/src/engine/network_engine/clientplayer.cpp @@ -378,9 +378,8 @@ void ClientPlayer::setMyWinnerState(bool theValue, int pot) { boost::recursive_mutex::scoped_lock lock(m_syncMutex); - myWinnerState = theValue; - if(theValue) - actualHand->getGuiInterface()->logPlayerWinsMsg(myName, pot); + if(theValue) myWinnerState = theValue; + actualHand->getGuiInterface()->logPlayerWinsMsg(myName, pot, theValue); } bool diff --git a/src/gui/generic/serverguiwrapper.cpp b/src/gui/generic/serverguiwrapper.cpp index 31e59d1f..958d9fce 100644 --- a/src/gui/generic/serverguiwrapper.cpp +++ b/src/gui/generic/serverguiwrapper.cpp @@ -100,7 +100,8 @@ void ServerGuiWrapper::stopTimeoutAnimation(int /*playerId*/) {} void ServerGuiWrapper::logPlayerActionMsg(string /*playerName*/, int /*action*/, int /*setValue*/) {} void ServerGuiWrapper::logNewGameHandMsg(int /*gameID*/, int /*handID*/) {} -void ServerGuiWrapper::logPlayerWinsMsg(std::string /*playerName*/, int /*pot*/) {} +void ServerGuiWrapper::logPlayerWinsMsg(std::string /*playerName*/, int /*pot*/, bool /*main*/) {} +void ServerGuiWrapper::logPlayerSitsOut(std::string /*playerName*/) {} void ServerGuiWrapper::logNewBlindsSetsMsg(int /*sbSet*/, int /*bbSet*/, std::string /*sbName*/, std::string /*bbName*/) {} void ServerGuiWrapper::logDealBoardCardsMsg(int /*roundID*/, int /*card1*/, int /*card2*/, int /*card3*/, int /*card4*/, int /*card5*/) {} diff --git a/src/gui/generic/serverguiwrapper.h b/src/gui/generic/serverguiwrapper.h index 315d8f43..c408d49b 100644 --- a/src/gui/generic/serverguiwrapper.h +++ b/src/gui/generic/serverguiwrapper.h @@ -84,7 +84,8 @@ public: void logPlayerActionMsg(std::string playerName, int action, int setValue) ; void logNewGameHandMsg(int gameID, int handID) ; - void logPlayerWinsMsg(std::string playerName, int pot); + void logPlayerWinsMsg(std::string playerName, int pot, bool main); + void logPlayerSitsOut(std::string playerName); void logNewBlindsSetsMsg(int sbSet, int bbSet, std::string sbName, std::string bbName); void logDealBoardCardsMsg(int roundID, int card1, int card2, int card3, int card4 = -1, int card5 = -1) ; void logFlipHoleCardsMsg(std::string playerName, int card1, int card2, int cardsValueInt = -1, std::string showHas = "shows") ; diff --git a/src/gui/guiinterface.h b/src/gui/guiinterface.h index 2245b9f9..b6d68da5 100644 --- a/src/gui/guiinterface.h +++ b/src/gui/guiinterface.h @@ -95,7 +95,8 @@ public: //log.cpp virtual void logPlayerActionMsg(std::string playName, int action, int setValue) =0; virtual void logNewGameHandMsg(int gameID, int HandID) =0; - virtual void logPlayerWinsMsg(std::string playerName, int pot) = 0; + virtual void logPlayerWinsMsg(std::string playerName, int pot, bool main) = 0; + virtual void logPlayerSitsOut(std::string playerName) = 0; virtual void logNewBlindsSetsMsg(int sbSet, int bbSet, std::string sbName, std::string bbName) =0; virtual void logDealBoardCardsMsg(int roundID, int card1, int card2, int card3, int card4 = -1, int card5 = -1) = 0; virtual void logFlipHoleCardsMsg(std::string playerName, int card1, int card2, int cardsValueInt = -1, std::string showHas = "shows") = 0; diff --git a/src/gui/qt/guiwrapper.cpp b/src/gui/qt/guiwrapper.cpp index 3a56f1ad..3146809c 100644 --- a/src/gui/qt/guiwrapper.cpp +++ b/src/gui/qt/guiwrapper.cpp @@ -102,7 +102,8 @@ void GuiWrapper::stopTimeoutAnimation(int playerId) { myW->signalStopTimeoutAnim void GuiWrapper::logPlayerActionMsg(string playerName, int action, int setValue) { myLog->signalLogPlayerActionMsg(QString::fromUtf8(playerName.c_str()), action, setValue); } void GuiWrapper::logNewGameHandMsg(int gameID, int handID) { myLog->signalLogNewGameHandMsg(gameID, handID); } void GuiWrapper::logNewBlindsSetsMsg(int sbSet, int bbSet, std::string sbName, std::string bbName) { myLog->signalLogNewBlindsSetsMsg(sbSet, bbSet, QString::fromUtf8(sbName.c_str()), QString::fromUtf8(bbName.c_str())); } -void GuiWrapper::logPlayerWinsMsg(std::string playerName, int pot) { myLog->signalLogPlayerWinsMsg(QString::fromUtf8(playerName.c_str()), pot); } +void GuiWrapper::logPlayerWinsMsg(std::string playerName, int pot, bool main) { myLog->signalLogPlayerWinsMsg(QString::fromUtf8(playerName.c_str()), pot, main); } +void GuiWrapper::logPlayerSitsOut(std::string playerName) { myLog->signalLogPlayerSitsOut(QString::fromUtf8(playerName.c_str())); } void GuiWrapper::logDealBoardCardsMsg(int roundID, int card1, int card2, int card3, int card4, int card5) { myLog->signalLogDealBoardCardsMsg(roundID, card1, card2, card3, card4, card5); } void GuiWrapper::logFlipHoleCardsMsg(string playerName, int card1, int card2, int cardsValueInt, string showHas) { myLog->signalLogFlipHoleCardsMsg(QString::fromUtf8(playerName.c_str()), card1, card2, cardsValueInt, QString::fromUtf8(showHas.c_str())); } void GuiWrapper::logPlayerWinGame(std::string playerName, int gameID) { myLog->signalLogPlayerWinGame(QString::fromUtf8(playerName.c_str()), gameID); } diff --git a/src/gui/qt/guiwrapper.h b/src/gui/qt/guiwrapper.h index ee17b80b..edd4e078 100644 --- a/src/gui/qt/guiwrapper.h +++ b/src/gui/qt/guiwrapper.h @@ -92,7 +92,8 @@ public: void logPlayerActionMsg(std::string playerName, int action, int setValue) ; void logNewGameHandMsg(int gameID, int handID) ; void logNewBlindsSetsMsg(int sbSet, int bbSet, std::string sbName, std::string bbName); - void logPlayerWinsMsg(std::string playerName, int pot); + void logPlayerWinsMsg(std::string playerName, int pot, bool main); + void logPlayerSitsOut(std::string playerName); void logDealBoardCardsMsg(int roundID, int card1, int card2, int card3, int card4 = -1, int card5 = -1); void logFlipHoleCardsMsg(std::string playerName, int card1, int card2, int cardsValueInt = -1, std::string showHas = "shows"); void logPlayerWinGame(std::string playerName, int gameID); diff --git a/src/gui/qt/mainwindow/log/log.cpp b/src/gui/qt/mainwindow/log/log.cpp index 777a7c3a..580b3586 100644 --- a/src/gui/qt/mainwindow/log/log.cpp +++ b/src/gui/qt/mainwindow/log/log.cpp @@ -36,7 +36,8 @@ Log::Log(mainWindowImpl* w, ConfigFile *c) : myW(w), myConfig(c), myLogDir(0), m connect(this, SIGNAL(signalLogPlayerActionMsg(QString, int, int)), this, SLOT(logPlayerActionMsg(QString, int, int))); connect(this, SIGNAL(signalLogNewGameHandMsg(int, int)), this, SLOT(logNewGameHandMsg(int, int))); connect(this, SIGNAL(signalLogNewBlindsSetsMsg(int, int, QString, QString)), this, SLOT(logNewBlindsSetsMsg(int, int, QString, QString))); - connect(this, SIGNAL(signalLogPlayerWinsMsg(QString, int)), this, SLOT(logPlayerWinsMsg(QString, int))); + connect(this, SIGNAL(signalLogPlayerWinsMsg(QString, int, bool)), this, SLOT(logPlayerWinsMsg(QString, int, bool))); + connect(this, SIGNAL(signalLogPlayerSitsOut(QString)), this, SLOT(logPlayerSitsOut(QString))); connect(this, SIGNAL(signalLogDealBoardCardsMsg(int, int, int, int, int, int)), this, SLOT(logDealBoardCardsMsg(int, int, int, int, int, int))); connect(this, SIGNAL(signalLogFlipHoleCardsMsg(QString, int, int, int, QString)), this, SLOT(logFlipHoleCardsMsg(QString, int, int, int, QString))); connect(this, SIGNAL(signalLogPlayerLeftMsg(QString)), this, SLOT(logPlayerLeftMsg(QString))); @@ -66,7 +67,7 @@ Log::Log(mainWindowImpl* w, ConfigFile *c) : myW(w), myConfig(c), myLogDir(0), m stream << "\n"; stream << ""; stream << "\n"; - stream << "\n"; + stream << "\n"; stream << "\n"; stream << "

Log-File for PokerTH 0.6 Session started on "+QDate::currentDate().toString("yyyy-MM-dd")+" at "+QTime::currentTime().toString("hh:mm:ss")+"

\n"; // stream << "\n"; @@ -125,7 +126,7 @@ void Log::logPlayerActionMsg(QString msg, int action, int setValue) { break; case 4: msg += " bets "; break; - case 5: msg += " sets "; + case 5: msg += " bets "; break; case 6: msg += " is all in with "; break; @@ -341,9 +342,9 @@ void Log::logNewGameHandMsg(int gameID, int handID) { if(myConfig->readConfigInt("LogOnOff")) { //if write logfiles is enabled - + logFileStreamString += "

Game: "+QString::number(gameID,10)+" | Hand: "+QString::number(handID,10)+"
"; - logFileStreamString += "

BLIND LEVEL: "+QString::number(currentHand->getSmallBlind())+"$/"+QString::number(currentHand->getSmallBlind()*2)+"$
"; + logFileStreamString += "BLIND LEVEL: "+QString::number(currentHand->getSmallBlind())+"$/"+QString::number(currentHand->getSmallBlind()*2)+"$
"; //print cash only for active players for(it_c=currentHand->getActivePlayerList()->begin(); it_c!=currentHand->getActivePlayerList()->end(); it_c++) { @@ -438,7 +439,7 @@ void Log::logNewBlindsSetsMsg(int sbSet, int bbSet, QString sbName, QString bbNa logFileStreamString += "
\n"; } -void Log::logPlayerWinsMsg(QString playerName, int pot) { +void Log::logPlayerWinsMsg(QString playerName, int pot, bool main) { // HandInterface *currentHand = myW->getSession().getCurrentGame()->getCurrentHand(); @@ -446,7 +447,11 @@ void Log::logPlayerWinsMsg(QString playerName, int pot) { // PlayerListConstIterator playerConstIt = currentHand->getActivePlayerIt(playerID); // assert( playerConstIt != currentHand->getActivePlayerList()->end() ); - myW->textBrowser_Log->append(""+playerName+" wins "+QString::number(pot,10)+"$!
"); + if(main) { + myW->textBrowser_Log->append(""+playerName+" wins "+QString::number(pot,10)+"$"); + } else { + myW->textBrowser_Log->append(""+playerName+" wins "+QString::number(pot,10)+"$ (side pot)"); + } if(myConfig->readConfigInt("LogOnOff")) { //if write logfiles is enabled @@ -460,7 +465,12 @@ void Log::logPlayerWinsMsg(QString playerName, int pot) { // logFileStreamString += "
"+QString::fromUtf8(currentHand->getPlayerArray()[playerID]->getMyName().c_str())+" wins "+QString::number(pot,10)+"$!!!

\n"; - logFileStreamString += "
"+playerName+" wins "+QString::number(pot,10)+"$!!!

\n"; + logFileStreamString += "
"+playerName+" wins "+QString::number(pot,10)+"$"; + if(!main) { + logFileStreamString += " (side pot)"; + } + logFileStreamString += "\n"; + if(myConfig->readConfigInt("LogInterval") == 0) { writeLogFileStream(logFileStreamString); @@ -469,6 +479,24 @@ void Log::logPlayerWinsMsg(QString playerName, int pot) { } } + +void Log::logPlayerSitsOut(QString playerName) { + + myW->textBrowser_Log->append(""+playerName+" sits out"); + + if(myConfig->readConfigInt("LogOnOff")) { + + logFileStreamString += "
"+playerName+" sits out\n"; + + + if(myConfig->readConfigInt("LogInterval") == 0) { + writeLogFileStream(logFileStreamString); + logFileStreamString = ""; + } + } +} + + void Log::logDealBoardCardsMsg(int roundID, int card1, int card2, int card3, int card4, int card5) { QString round; diff --git a/src/gui/qt/mainwindow/log/log.h b/src/gui/qt/mainwindow/log/log.h index a0616d66..0f2b0a9b 100644 --- a/src/gui/qt/mainwindow/log/log.h +++ b/src/gui/qt/mainwindow/log/log.h @@ -43,7 +43,8 @@ public slots: void logPlayerActionMsg(QString playerName, int action, int setValue); void logNewGameHandMsg(int gameID, int handID); void logNewBlindsSetsMsg(int sbSet, int bbSet, QString sbName, QString bbName); - void logPlayerWinsMsg(QString playerName, int pot); + void logPlayerWinsMsg(QString playerName, int pot, bool main); + void logPlayerSitsOut(QString playerName); void logDealBoardCardsMsg(int roundID, int card1, int card2, int card3, int card4 = -1, int card5 = -1); void logFlipHoleCardsMsg(QString playerName, int card1, int card2, int cardsValueInt = -1, QString showHas = "shows"); void logPlayerLeftMsg(QString playerName); @@ -63,7 +64,8 @@ signals: void signalLogPlayerActionMsg(QString playerName, int action, int setValue); void signalLogNewGameHandMsg(int gameID, int handID); void signalLogNewBlindsSetsMsg(int sbSet, int bbSet, QString sbName, QString bbName); - void signalLogPlayerWinsMsg(QString playerName, int pot); + void signalLogPlayerWinsMsg(QString playerName, int pot, bool main); + void signalLogPlayerSitsOut(QString playerName); void signalLogDealBoardCardsMsg(int roundID, int card1, int card2, int card3, int card4 = -1, int card5 = -1); void signalLogFlipHoleCardsMsg(QString playerName, int card1, int card2, int cardsValueInt = -1, QString showHas = "shows"); void signalLogPlayerLeftMsg(QString playerName); diff --git a/src/gui/qt/mainwindow/mainwindowimpl.cpp b/src/gui/qt/mainwindow/mainwindowimpl.cpp index 6ec9d87b..c7c7ba86 100755 --- a/src/gui/qt/mainwindow/mainwindowimpl.cpp +++ b/src/gui/qt/mainwindow/mainwindowimpl.cpp @@ -2887,6 +2887,8 @@ void mainWindowImpl::postRiverRunAnimation3() { } + list winners = currentHand->getBoard()->getWinners(); + for(it_c=currentHand->getActivePlayerList()->begin(); it_c!=currentHand->getActivePlayerList()->end(); it_c++) { if((*it_c)->getMyAction() != PLAYER_ACTION_FOLD && (*it_c)->getMyCardsValueInt() == currentHand->getCurrentBeRo()->getHighestCardsValue() ) { @@ -2955,7 +2957,7 @@ void mainWindowImpl::postRiverRunAnimation3() { // if (textLabel_handLabel->text() == "River") { //set Player value (logging) - (*it_c)->setMyWinnerState(1, pot); + (*it_c)->setMyWinnerState(true, pot); // } // else { @@ -2963,7 +2965,7 @@ void mainWindowImpl::postRiverRunAnimation3() { // } } else { - + if( currentHand->getActivePlayerList()->size() != 1 && (*it_c)->getMyAction() != PLAYER_ACTION_FOLD && myConfig->readConfigInt("ShowFadeOutCardsAnimation") ) { //aufgedeckte Gegner auch ausblenden @@ -2973,14 +2975,29 @@ void mainWindowImpl::postRiverRunAnimation3() { } } + // log side pot winners -> TODO + list::iterator it_int; + for(it_c=currentHand->getActivePlayerList()->begin(); it_c!=currentHand->getActivePlayerList()->end(); it_c++) { + if((*it_c)->getMyAction() != PLAYER_ACTION_FOLD && (*it_c)->getMyCardsValueInt() != currentHand->getCurrentBeRo()->getHighestCardsValue() ) { + for(it_int = winners.begin(); it_int != winners.end(); it_int++) { + if((*it_int) == (*it_c)->getMyID()) { + bool toIntBool = TRUE; + int pot = (*it_c)->getMyCash() - cashLabelArray[(*it_c)->getMyID()]->text().remove(" $").toInt(&toIntBool,10); + (*it_c)->setMyWinnerState(false, pot); + } + } + } + } + for(it_c=currentHand->getActivePlayerList()->begin(); it_c!=currentHand->getActivePlayerList()->end(); it_c++) { + if((*it_c)->getMyCash() == 0) { + currentHand->getGuiInterface()->logPlayerSitsOut((*it_c)->getMyName()); + } + } - - - - + textBrowser_Log->append(""); postRiverRunAnimation3Timer->start(postRiverRunAnimationSpeed/2); }