//========================================================= //========================================================= BOOL CGameRules::CanHavePlayerItem( CBasePlayer *pPlayer, CBasePlayerWeapon *pWeapon ) { // only living players can have items if ( pPlayer->pev->deadflag != DEAD_NO ) return FALSE; if ( pWeapon->pszAmmo1() ) { if ( !CanHaveAmmo( pPlayer, pWeapon->pszAmmo1(), pWeapon->iMaxAmmo1() ) ) { // we can't carry anymore ammo for this gun. We can only // have the gun if we aren't already carrying one of this type if ( pPlayer->HasPlayerItem( pWeapon ) ) { return FALSE; } } } else { // weapon doesn't use ammo, don't take another if you already have it. if ( pPlayer->HasPlayerItem( pWeapon ) ) { return FALSE; } } // note: will fall through to here if GetItemInfo doesn't fill the struct! return TRUE; }
/* <ad9a3> ../cstrike/dlls/gamerules.cpp:75 */ BOOL CGameRules::__MAKE_VHOOK(CanHavePlayerItem)(CBasePlayer *pPlayer, CBasePlayerItem *pWeapon) { // only living players can have items if (pPlayer->pev->deadflag != DEAD_NO) { return FALSE; } CCSBotManager *ctrl = TheCSBots(); if (pPlayer->IsBot() && ctrl != NULL && !ctrl->IsWeaponUseable(pWeapon)) { return FALSE; } if (pWeapon->pszAmmo1()) { if (!CanHaveAmmo(pPlayer, pWeapon->pszAmmo1(), pWeapon->iMaxAmmo1())) { // we can't carry anymore ammo for this gun. We can only // have the gun if we aren't already carrying one of this type if (pPlayer->HasPlayerItem(pWeapon)) { return FALSE; } } } else { // weapon doesn't use ammo, don't take another if you already have it. if (pPlayer->HasPlayerItem(pWeapon)) { return FALSE; } } // note: will fall through to here if GetItemInfo doesn't fill the struct! return TRUE; }
//----------------------------------------------------------------------------- // Purpose: Return true if the specified player can carry any more of the ammo type //----------------------------------------------------------------------------- bool CGameRules::CanHaveAmmo( CBaseCombatCharacter *pPlayer, const char *szName ) { return CanHaveAmmo( pPlayer, GetAmmoDef()->Index(szName) ); }