1
This commit is contained in:
139
game/server/tf2/info_resourceprocessor.cpp
Normal file
139
game/server/tf2/info_resourceprocessor.cpp
Normal file
@ -0,0 +1,139 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: A team's resource processor back at their base
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
#include "cbase.h"
|
||||
#include "tf_team.h"
|
||||
#include "info_resourceprocessor.h"
|
||||
#include "tf_player.h"
|
||||
#include "npc_minicarrier.h"
|
||||
#include "tf_gamerules.h"
|
||||
|
||||
BEGIN_DATADESC( CResourceProcessor )
|
||||
|
||||
// functions
|
||||
DEFINE_FUNCTION( ProcessorTouch ),
|
||||
|
||||
END_DATADESC()
|
||||
|
||||
IMPLEMENT_SERVERCLASS_ST(CResourceProcessor, DT_ResourceProcessor)
|
||||
END_SEND_TABLE()
|
||||
|
||||
LINK_ENTITY_TO_CLASS( info_resourceprocessor, CResourceProcessor);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CResourceProcessor::Spawn( void )
|
||||
{
|
||||
Precache();
|
||||
|
||||
SetSolid( SOLID_SLIDEBOX );
|
||||
SetMoveType( MOVETYPE_NONE );
|
||||
AddFlag( FL_NOTARGET );
|
||||
|
||||
UTIL_SetSize( pev, Vector(-32,-32,0), Vector(32,32, 128) );
|
||||
SetModel( "models/objects/obj_resourceprocessor.mdl" );
|
||||
SetTouch( ProcessorTouch );
|
||||
|
||||
m_flHackSpawnHeight = 256;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CResourceProcessor::Precache( void )
|
||||
{
|
||||
PrecacheModel( "models/objects/obj_resourceprocessor.mdl" );
|
||||
|
||||
UTIL_PrecacheOther( "npc_minicarrier" );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CResourceProcessor::Activate( void )
|
||||
{
|
||||
BaseClass::Activate();
|
||||
if ( GetTeamNumber() < 0 || GetTeamNumber() >= GetNumberOfTeams() )
|
||||
{
|
||||
Warning( "Warning, info_resourceprocessor with invalid Team Number set.\n" );
|
||||
UTIL_Remove( this );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CResourceProcessor::ProcessorTouch( CBaseEntity *pOther )
|
||||
{
|
||||
// Players
|
||||
if ( pOther->IsPlayer() )
|
||||
{
|
||||
// Ignore touches from enemy players
|
||||
if ( !InSameTeam( pOther ) )
|
||||
return;
|
||||
|
||||
CBaseTFPlayer *pPlayer = (CBaseTFPlayer *)pOther;
|
||||
|
||||
// Remove all the player's resources and add them to the team's stash
|
||||
for ( int i = 0; i < MAX_RESOURCE_TYPES; i++ )
|
||||
{
|
||||
int iCount = pPlayer->GetResourceChunkCount(i, false);
|
||||
if ( iCount )
|
||||
{
|
||||
pPlayer->RemoveResourceChunks( i, iCount, false );
|
||||
AddResources( i, iCount * CHUNK_RESOURCE_VALUE );
|
||||
}
|
||||
|
||||
// Now remove processed versions too
|
||||
iCount = pPlayer->GetResourceChunkCount(i, true);
|
||||
if ( iCount )
|
||||
{
|
||||
pPlayer->RemoveResourceChunks( i, iCount, true );
|
||||
AddResources( i, iCount * PROCESSED_CHUNK_RESOURCE_VALUE );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Add resources to the processor, and hence the team's bank
|
||||
//-----------------------------------------------------------------------------
|
||||
void CResourceProcessor::AddResources( int iResourceType, float flResources )
|
||||
{
|
||||
if ( !GetTeam() )
|
||||
return;
|
||||
|
||||
((CTFTeam *)GetTeam())->AddResources( iResourceType, flResources );
|
||||
((CTFTeam *)GetTeam())->ResourceLoadDeposited();
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Spawn a minicarrier
|
||||
//-----------------------------------------------------------------------------
|
||||
void CResourceProcessor::SpawnMiniCarrier( void )
|
||||
{
|
||||
CNPC_MiniCarrier *pMiniCarrier = (CNPC_MiniCarrier*)CreateEntityByName( "npc_minicarrier" );
|
||||
pMiniCarrier->Spawn();
|
||||
pMiniCarrier->ChangeTeam( m_iTeamNumber );
|
||||
|
||||
// Find a clear spot near me & spawn in it
|
||||
if ( !EntityPlacementTest( pMiniCarrier, GetAbsOrigin() + Vector(0,0,m_flHackSpawnHeight),
|
||||
pMiniCarrier->GetAbsOrigin(), false ) )
|
||||
{
|
||||
Warning( "Failed to find empty space to spawn a minicarrier.\n" );
|
||||
( ( CTFTeam * )GetTeam() )->RemoveRobot( pMiniCarrier );
|
||||
UTIL_Remove( pMiniCarrier );
|
||||
return;
|
||||
}
|
||||
|
||||
m_flHackSpawnHeight += 64;
|
||||
|
||||
engine->SetOrigin( pMiniCarrier->pev, pMiniCarrier->GetOrigin() );
|
||||
pMiniCarrier->SetHomeProcessor( this );
|
||||
}
|
Reference in New Issue
Block a user