diff --git a/src/game/CPlayerManager.cpp b/src/game/CPlayerManager.cpp index 1254f079..bff1bdef 100644 --- a/src/game/CPlayerManager.cpp +++ b/src/game/CPlayerManager.cpp @@ -527,8 +527,8 @@ FunctionTable *CPlayerManagerImpl::GetFunctions() { static int ASK_INTERVAL = MSEC_TO_TICK_COUNT(500); static int WAITING_MESSAGE_COUNT = 4; - // don't wait for for players who are completely done (after limbo and spectating) - if (frameFuncs[i].validFrame != itsGame->frameNumber && theNetManager->IAmAlive()) { + // don't wait for for players who are completely done (after last life and after limbo) + if (frameFuncs[i].validFrame != itsGame->frameNumber && !IsDeadOrDone()) { long firstTime = askAgainTime = TickCount(); long quickTick = firstTime; long giveUpTime = firstTime + MSEC_TO_TICK_COUNT(15000); @@ -1141,6 +1141,10 @@ void CPlayerManagerImpl::DeadOrDone() { theNetManager->deadOrDonePlayers |= 1 << slot; } +bool CPlayerManagerImpl::IsDeadOrDone() { + return (theNetManager->deadOrDonePlayers & (1 << slot)); +} + short CPlayerManagerImpl::GetStatusChar() { if (itsPlayer == NULL || (loadingStatus != kLActive && loadingStatus != kLPaused)) { return -1; diff --git a/src/game/CPlayerManager.h b/src/game/CPlayerManager.h index d5dffc3c..23ced5ba 100644 --- a/src/game/CPlayerManager.h +++ b/src/game/CPlayerManager.h @@ -81,6 +81,7 @@ class CPlayerManager { virtual void GameKeyPress(char c) = 0; virtual FunctionTable *GetFunctions() = 0; virtual void DeadOrDone() = 0; + virtual bool IsDeadOrDone() = 0; virtual short Position() = 0; virtual Str255& PlayerName() = 0; virtual std::string GetPlayerName() = 0; @@ -257,6 +258,7 @@ class CPlayerManagerImpl : public CDirectObject, public CPlayerManager, public s virtual void RemoveFromGame(); virtual void DeadOrDone(); + virtual bool IsDeadOrDone(); virtual short GetStatusChar(); virtual short GetMessageIndicator();