//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CTFForceRespawn::ForceRespawn( bool bSwitchTeams ) { int i = 0; // respawn the players for ( i = 1 ; i <= gpGlobals->maxClients ; i++ ) { CTFPlayer *pPlayer = ToTFPlayer( UTIL_PlayerByIndex( i ) ); if ( pPlayer ) { pPlayer->RemoveAllOwnedEntitiesFromWorld(); // Ignore players who aren't on an active team if ( pPlayer->GetTeamNumber() != TF_TEAM_RED && pPlayer->GetTeamNumber() != TF_TEAM_BLUE ) { // Let the player spawn immediately when they do pick a class pPlayer->AllowInstantSpawn(); continue; } if ( bSwitchTeams ) { if ( pPlayer->GetTeamNumber() == TF_TEAM_RED ) { pPlayer->ForceChangeTeam( TF_TEAM_BLUE ); } else if ( pPlayer->GetTeamNumber() == TF_TEAM_BLUE ) { pPlayer->ForceChangeTeam( TF_TEAM_RED ); } } // Ignore players who haven't picked a class yet if ( !pPlayer->GetPlayerClass() || pPlayer->GetPlayerClass()->GetClassIndex() == TF_CLASS_UNDEFINED ) { // Allow them to spawn instantly when they do choose pPlayer->AllowInstantSpawn(); continue; } pPlayer->ForceRespawn(); } } // remove any dropped weapons/ammo packs CBaseEntity *pEnt = NULL; while ( (pEnt = gEntList.FindEntityByClassname( pEnt, "tf_ammo_pack" )) != NULL ) { UTIL_Remove( pEnt ); } // Output. m_outputOnForceRespawn.FireOutput( this, this ); }