summaryrefslogtreecommitdiff
path: root/game/server/tf/entity_armor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/server/tf/entity_armor.cpp')
-rw-r--r--game/server/tf/entity_armor.cpp90
1 files changed, 90 insertions, 0 deletions
diff --git a/game/server/tf/entity_armor.cpp b/game/server/tf/entity_armor.cpp
new file mode 100644
index 0000000..81a58b0
--- /dev/null
+++ b/game/server/tf/entity_armor.cpp
@@ -0,0 +1,90 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: CTF Armor.
+//
+//=============================================================================//
+#include "cbase.h"
+#include "items.h"
+#include "tf_gamerules.h"
+#include "tf_shareddefs.h"
+#include "tf_player.h"
+#include "tf_team.h"
+#include "engine/IEngineSound.h"
+#include "entity_armor.h"
+
+//=============================================================================
+//
+// CTF Armor defines.
+//
+
+#define TF_ARMOR_PICKUP_SOUND "Armor.Touch"
+#define TF_ARMOR_CAPACITY 200
+
+LINK_ENTITY_TO_CLASS( item_armor, CArmor );
+
+//=============================================================================
+//
+// CTF Armor functions.
+//
+
+//-----------------------------------------------------------------------------
+// Purpose: Spawn function for the armor
+//-----------------------------------------------------------------------------
+void CArmor::Spawn( void )
+{
+ BaseClass::Spawn();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Precache function for the armor
+//-----------------------------------------------------------------------------
+void CArmor::Precache( void )
+{
+ PrecacheScriptSound( TF_ARMOR_PICKUP_SOUND );
+ BaseClass::Precache();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: MyTouch function for the armor
+//-----------------------------------------------------------------------------
+bool CArmor::MyTouch( CBasePlayer *pPlayer )
+{
+ bool bSuccess = false;
+
+ if ( ValidTouch( pPlayer ) )
+ {
+ CTFPlayer *pCTFPlayer = ToTFPlayer(pPlayer);
+
+ if ( pCTFPlayer )
+ {
+ int iMaxArmor = pCTFPlayer->GetPlayerClass()->GetMaxArmor();
+ int iCurrentArmor = pCTFPlayer->ArmorValue();
+
+ if ( iCurrentArmor < iMaxArmor )
+ {
+ if ( iCurrentArmor + TF_ARMOR_CAPACITY >= iMaxArmor )
+ {
+ pCTFPlayer->SetArmorValue( iMaxArmor );
+ }
+ else
+ {
+ pCTFPlayer->SetArmorValue( iCurrentArmor + TF_ARMOR_CAPACITY );
+ }
+
+ CSingleUserRecipientFilter user( pPlayer );
+ user.MakeReliable();
+
+ UserMessageBegin( user, "ItemPickup" );
+ WRITE_STRING( GetClassname() );
+ MessageEnd();
+
+ CPASAttenuationFilter filter( this, TF_ARMOR_PICKUP_SOUND );
+ EmitSound( filter, entindex(), TF_ARMOR_PICKUP_SOUND );
+
+ bSuccess = true;
+ }
+ }
+ }
+
+ return bSuccess;
+}