//----------------------------------------------------------------------------- // Purpose: Called every usercmd by the player PreThink //----------------------------------------------------------------------------- void CBasePlayer::ItemPreFrame() { // Handle use events PlayerUse(); CBaseCombatWeapon *pActive = GetActiveWeapon(); // Allow all the holstered weapons to update for ( int i = 0; i < WeaponCount(); ++i ) { CBaseCombatWeapon *pWeapon = GetWeapon( i ); if ( pWeapon == NULL ) continue; if ( pActive == pWeapon ) continue; pWeapon->ItemHolsterFrame(); } if ( gpGlobals->curtime < m_flNextAttack ) return; if (!pActive) return; #if defined( CLIENT_DLL ) // Not predicting this weapon if ( !pActive->IsPredicted() ) return; #endif pActive->ItemPreFrame(); }
CWeaponSDKBase* CSDKPlayer::FindWeapon (SDKWeaponID id) { int i; for (i = 0; i < WeaponCount(); i++) { CWeaponSDKBase *wpn = (CWeaponSDKBase *)GetWeapon (i); if (wpn) { if (wpn->GetWeaponID () == id) return wpn; } } return NULL; }
CBaseCombatWeapon* CSDKPlayer::GetLastWeapon() { // This is pretty silly, but I'd rather mess around with stock Valve code as little as possible. #ifdef CLIENT_DLL CBaseCombatWeapon* pLastWeapon = BaseClass::GetLastWeapon(); #else CBaseCombatWeapon* pLastWeapon = BaseClass::Weapon_GetLast(); #endif if (pLastWeapon && pLastWeapon != GetActiveWeapon()) return pLastWeapon; CWeaponSDKBase* pHeaviest = NULL; CWeaponSDKBase* pBrawl = NULL; for (int i = 0; i < WeaponCount(); i++) { if (!GetWeapon(i)) continue; if (GetWeapon(i) == GetActiveWeapon()) continue; CWeaponSDKBase* pSDKWeapon = dynamic_cast<CWeaponSDKBase*>(GetWeapon(i)); if (!pSDKWeapon) continue; if (pSDKWeapon->GetWeaponID() == SDK_WEAPON_BRAWL) { pBrawl = pSDKWeapon; continue; } if (!pHeaviest) { pHeaviest = pSDKWeapon; continue; } if (pHeaviest->GetWeight() < pSDKWeapon->GetWeight()) pHeaviest = pSDKWeapon; } if (!pHeaviest) pHeaviest = pBrawl; return pHeaviest; }
//----------------------------------------------------------------------------- // Purpose: Called every usercmd by the player PreThink //----------------------------------------------------------------------------- void CBasePlayer::ItemPreFrame() { // Handle use events PlayerUse(); //Tony; re-ordered this for efficiency and to make sure that certain things happen in the correct order! if ( gpGlobals->curtime < m_flNextAttack ) { return; } if (!GetActiveWeapon()) return; #if defined( CLIENT_DLL ) // Not predicting this weapon if ( !GetActiveWeapon()->IsPredicted() ) return; #endif GetActiveWeapon()->ItemPreFrame(); CBaseCombatWeapon *pWeapon; CBaseCombatWeapon *pActive = GetActiveWeapon(); // Allow all the holstered weapons to update for ( int i = 0; i < WeaponCount(); ++i ) { pWeapon = GetWeapon( i ); if ( pWeapon == NULL ) continue; if ( pActive == pWeapon ) continue; pWeapon->ItemHolsterFrame(); } }