bool CSDKGameRules::IsPlayerClassOnTeam( int cls, int team ) { if( cls == PLAYERCLASS_RANDOM ) return true; CSDKTeam *pTeam = GetGlobalSDKTeam( team ); return ( cls >= 0 && cls < pTeam->GetNumPlayerClasses() ); }
void CSDKGameRules::ChooseRandomClass( CSDKPlayer *pPlayer ) { int i; int numChoices = 0; int choices[16]; int firstclass = 0; CSDKTeam *pTeam = GetGlobalSDKTeam( pPlayer->GetTeamNumber() ); int lastclass = pTeam->GetNumPlayerClasses(); int previousClass = pPlayer->m_Shared.PlayerClass(); // Compile a list of the classes that aren't full for( i=firstclass;i<lastclass;i++ ) { // don't join the same class twice in a row if ( i == previousClass ) continue; if( CanPlayerJoinClass( pPlayer, i ) ) { choices[numChoices] = i; numChoices++; } } // If ALL the classes are full if( numChoices == 0 ) { Msg( "Random class found that all classes were full - ignoring class limits for this spawn\n" ); pPlayer->m_Shared.SetPlayerClass( random->RandomFloat( firstclass, lastclass ) ); } else { // Choose a slot randomly i = random->RandomInt( 0, numChoices-1 ); // We are now the class that was in that slot pPlayer->m_Shared.SetPlayerClass( choices[i] ); } }
const char *CSDKGameRules::GetPlayerClassName( int cls, int team ) { CSDKTeam *pTeam = GetGlobalSDKTeam( team ); if( cls == PLAYERCLASS_RANDOM ) { return "#class_random"; } if( cls < 0 || cls >= pTeam->GetNumPlayerClasses() ) { Assert( false ); return NULL; } const CSDKPlayerClassInfo &pClassInfo = pTeam->GetPlayerClassInfo( cls ); return pClassInfo.m_szPrintName; }