void CArmorRechargerClassic::Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ) { // if it's not a player, ignore if ( !pActivator || !pActivator->IsPlayer()) { return; } else if (GameRules()->GetGameMode() == GAMEMODE_CLASSIC) { if (ClassicGameRules()->GetCurrentPhaseID() == PHASE_BUILD) { if (m_flSoundTime <= gpGlobals->curtime) { m_flSoundTime = gpGlobals->curtime + 0.62; EmitSound( "SuitRecharge.Deny" ); } return; } else if (GetTeamNumber() != pActivator->GetTeamNumber() && GetTeamNumber() != TEAM_SPECTATOR) { if (m_flSoundTime <= gpGlobals->curtime) { CBasePlayer *pPlayer = ToBasePlayer( pActivator ); Assert( pPlayer ); ClientPrint( pPlayer, HUD_PRINTTALK, "#lf_armor_charger_deny" ); m_flSoundTime = gpGlobals->curtime + 0.62; EmitSound( "SuitRecharge.Deny" ); } return; } } CSDKPlayer *pPlayer = ToSDKPlayer( pCaller ); AssertMsg( pPlayer, "Failure SDKPlayer Armor charger\n" ); CSDKTeam *pTeam = GetGlobalSDKTeam( pPlayer->GetTeamNumber() ); const CSDKPlayerClassInfo &pClassInfo = pTeam->GetPlayerClassInfo( pPlayer->m_Shared.PlayerClass() ); SetMaxArmor( pClassInfo.m_iArmor ); BaseClass::Use( pActivator, pCaller, useType, value ); }
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; }
int CSDKGameRules::GetClassLimit( int team, int cls ) { CSDKTeam *pTeam = GetGlobalSDKTeam( team ); Assert( pTeam ); const CSDKPlayerClassInfo &pClassInfo = pTeam->GetPlayerClassInfo( cls ); int iClassLimit; ConVar *pLimitCvar = ( ConVar * )cvar->FindVar( pClassInfo.m_szLimitCvar ); Assert( pLimitCvar ); if( pLimitCvar ) iClassLimit = pLimitCvar->GetInt(); else iClassLimit = -1; return iClassLimit; }
void CSDKPlayer::InitSpeeds() { #if !defined ( SDK_USE_PLAYERCLASSES ) m_Shared.m_flRunSpeed = SDK_DEFAULT_PLAYER_RUNSPEED; m_Shared.m_flSprintSpeed = SDK_DEFAULT_PLAYER_SPRINTSPEED; m_Shared.m_flProneSpeed = SDK_DEFAULT_PLAYER_PRONESPEED; // Set the absolute max to sprint speed SetMaxSpeed( m_Shared.m_flSprintSpeed ); return; #endif #if defined ( SDK_USE_PLAYERCLASSES ) int playerclass = m_Shared.PlayerClass(); //Tony; error checkings. if ( playerclass == PLAYERCLASS_UNDEFINED ) { m_Shared.m_flRunSpeed = SDK_DEFAULT_PLAYER_RUNSPEED; m_Shared.m_flSprintSpeed = SDK_DEFAULT_PLAYER_SPRINTSPEED; m_Shared.m_flProneSpeed = SDK_DEFAULT_PLAYER_PRONESPEED; } else { CSDKTeam *pTeam = GetGlobalSDKTeam( GetTeamNumber() ); const CSDKPlayerClassInfo &pClassInfo = pTeam->GetPlayerClassInfo( playerclass ); Assert( pClassInfo.m_iTeam == GetTeamNumber() ); m_Shared.m_flRunSpeed = pClassInfo.m_flRunSpeed; m_Shared.m_flSprintSpeed = pClassInfo.m_flSprintSpeed; m_Shared.m_flProneSpeed = pClassInfo.m_flProneSpeed; } // Set the absolute max to sprint speed SetMaxSpeed( m_Shared.m_flSprintSpeed ); #endif // SDK_USE_PLAYERCLASSES }
void CSDKGameRules::PlayerSpawn( CBasePlayer *p ) { CSDKPlayer *pPlayer = ToSDKPlayer( p ); int team = pPlayer->GetTeamNumber(); if( team != TEAM_SPECTATOR ) { #if defined ( SDK_USE_PLAYERCLASSES ) if( pPlayer->m_Shared.DesiredPlayerClass() == PLAYERCLASS_RANDOM ) { ChooseRandomClass( pPlayer ); ClientPrint( pPlayer, HUD_PRINTTALK, "#game_now_as", GetPlayerClassName( pPlayer->m_Shared.PlayerClass(), team ) ); } else { pPlayer->m_Shared.SetPlayerClass( pPlayer->m_Shared.DesiredPlayerClass() ); } int playerclass = pPlayer->m_Shared.PlayerClass(); if( playerclass != PLAYERCLASS_UNDEFINED ) { //Assert( PLAYERCLASS_UNDEFINED < playerclass && playerclass < NUM_PLAYERCLASSES ); CSDKTeam *pTeam = GetGlobalSDKTeam( team ); const CSDKPlayerClassInfo &pClassInfo = pTeam->GetPlayerClassInfo( playerclass ); Assert( pClassInfo.m_iTeam == team ); pPlayer->SetModel( pClassInfo.m_szPlayerModel ); pPlayer->SetHitboxSet( 0 ); char buf[64]; int bufsize = sizeof(buf); //Give weapons // Primary weapon Q_snprintf( buf, bufsize, "weapon_%s", WeaponIDToAlias(pClassInfo.m_iPrimaryWeapon) ); CBaseEntity *pPrimaryWpn = pPlayer->GiveNamedItem( buf ); Assert( pPrimaryWpn ); // Secondary weapon CBaseEntity *pSecondaryWpn = NULL; if ( pClassInfo.m_iSecondaryWeapon != WEAPON_NONE ) { Q_snprintf( buf, bufsize, "weapon_%s", WeaponIDToAlias(pClassInfo.m_iSecondaryWeapon) ); pSecondaryWpn = pPlayer->GiveNamedItem( buf ); } // Melee weapon if ( pClassInfo.m_iMeleeWeapon ) { Q_snprintf( buf, bufsize, "weapon_%s", WeaponIDToAlias(pClassInfo.m_iMeleeWeapon) ); pPlayer->GiveNamedItem( buf ); } CWeaponSDKBase *pWpn = NULL; // Primary Ammo pWpn = dynamic_cast<CWeaponSDKBase *>(pPrimaryWpn); if( pWpn ) { int iNumClip = pWpn->GetSDKWpnData().m_iDefaultAmmoClips - 1; //account for one clip in the gun int iClipSize = pWpn->GetSDKWpnData().iMaxClip1; pPlayer->GiveAmmo( iNumClip * iClipSize, pWpn->GetSDKWpnData().szAmmo1 ); } // Secondary Ammo if ( pSecondaryWpn ) { pWpn = dynamic_cast<CWeaponSDKBase *>(pSecondaryWpn); if( pWpn ) { int iNumClip = pWpn->GetSDKWpnData().m_iDefaultAmmoClips - 1; //account for one clip in the gun int iClipSize = pWpn->GetSDKWpnData().iMaxClip1; pPlayer->GiveAmmo( iNumClip * iClipSize, pWpn->GetSDKWpnData().szAmmo1 ); } } // Grenade Type 1 if ( pClassInfo.m_iGrenType1 != WEAPON_NONE ) { Q_snprintf( buf, bufsize, "weapon_%s", WeaponIDToAlias(pClassInfo.m_iGrenType1) ); CBaseEntity *pGrenade = pPlayer->GiveNamedItem( buf ); Assert( pGrenade ); pWpn = dynamic_cast<CWeaponSDKBase *>(pGrenade); if( pWpn ) { pPlayer->GiveAmmo( pClassInfo.m_iNumGrensType1 - 1, pWpn->GetSDKWpnData().szAmmo1 ); } } // Grenade Type 2 if ( pClassInfo.m_iGrenType2 != WEAPON_NONE ) { Q_snprintf( buf, bufsize, "weapon_%s", WeaponIDToAlias(pClassInfo.m_iGrenType2) ); CBaseEntity *pGrenade2 = pPlayer->GiveNamedItem( buf ); Assert( pGrenade2 ); pWpn = dynamic_cast<CWeaponSDKBase *>(pGrenade2); if( pWpn ) { pPlayer->GiveAmmo( pClassInfo.m_iNumGrensType2 - 1, pWpn->GetSDKWpnData().szAmmo1 ); } } pPlayer->Weapon_Switch( (CBaseCombatWeapon *)pPrimaryWpn ); // DevMsg("setting spawn armor to: %d\n", pClassInfo.m_iArmor ); pPlayer->SetSpawnArmorValue( pClassInfo.m_iArmor ); } else { // Assert( !"Player spawning with PLAYERCLASS_UNDEFINED" ); pPlayer->SetModel( SDK_PLAYER_MODEL ); } #else pPlayer->GiveDefaultItems(); #endif // SDK_USE_PLAYERCLASSES pPlayer->SetMaxSpeed( 600 ); } }