1
This commit is contained in:
107
game/server/tf2/info_customtech.cpp
Normal file
107
game/server/tf2/info_customtech.cpp
Normal file
@ -0,0 +1,107 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: Map entity that adds a custom technology to the techtree
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
#include "cbase.h"
|
||||
#include "EntityOutput.h"
|
||||
#include "EntityList.h"
|
||||
#include "tf_team.h"
|
||||
#include "techtree.h"
|
||||
#include "info_customtech.h"
|
||||
#include "tier1/strtools.h"
|
||||
|
||||
BEGIN_DATADESC( CInfoCustomTechnology )
|
||||
|
||||
// outputs
|
||||
DEFINE_OUTPUT( m_flTechPercentage, "TechPercentage" ),
|
||||
|
||||
// keys
|
||||
DEFINE_KEYFIELD_NOT_SAVED( m_iszTech , FIELD_STRING, "TechToWatch" ),
|
||||
DEFINE_KEYFIELD_NOT_SAVED( m_iszTechTreeFile , FIELD_STRING, "NewTechFile" ),
|
||||
|
||||
END_DATADESC()
|
||||
|
||||
IMPLEMENT_SERVERCLASS_ST( CInfoCustomTechnology, DT_InfoCustomTechnology )
|
||||
SendPropString( SENDINFO( m_szTechTreeFile ) ),
|
||||
END_SEND_TABLE();
|
||||
|
||||
LINK_ENTITY_TO_CLASS( info_customtech, CInfoCustomTechnology );
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Always transmit
|
||||
//-----------------------------------------------------------------------------
|
||||
int CInfoCustomTechnology::ShouldTransmit( const CCheckTransmitInfo *pInfo )
|
||||
{
|
||||
// Don't need to transmit ones that don't add new techs
|
||||
if ( !m_iszTechTreeFile )
|
||||
return FL_EDICT_DONTSEND;
|
||||
|
||||
// Only transmit to members of my team
|
||||
CBaseEntity* pRecipientEntity = CBaseEntity::Instance( pInfo->m_pClientEnt );
|
||||
if ( InSameTeam( pRecipientEntity ) )
|
||||
{
|
||||
//Msg( "SENDING\n" );
|
||||
return FL_EDICT_ALWAYS;
|
||||
}
|
||||
|
||||
return FL_EDICT_DONTSEND;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CInfoCustomTechnology::Spawn( void )
|
||||
{
|
||||
m_flTechPercentage.Set( 0, this, this );
|
||||
memset( m_szTechTreeFile.GetForModify(), 0, sizeof(m_szTechTreeFile) );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Add myself to the technology tree
|
||||
//-----------------------------------------------------------------------------
|
||||
void CInfoCustomTechnology::Activate( void )
|
||||
{
|
||||
BaseClass::Activate();
|
||||
if ( !GetTeamNumber() )
|
||||
{
|
||||
Msg( "ERROR: info_customtech without a specified team.\n" );
|
||||
UTIL_Remove( this );
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the Team's Technology Tree
|
||||
CTFTeam *pTeam = (CTFTeam *)GetTeam();
|
||||
if ( pTeam )
|
||||
{
|
||||
CTechnologyTree *pTechTree = pTeam->GetTechnologyTree();
|
||||
if ( pTechTree )
|
||||
{
|
||||
// Am I supposed to add some new technologies to the tech tree?
|
||||
if ( m_iszTechTreeFile != NULL_STRING )
|
||||
{
|
||||
pTechTree->AddTechnologyFile( filesystem, GetTeamNumber(), (char*)STRING(m_iszTechTreeFile ) );
|
||||
|
||||
// Tell our clients about the technology
|
||||
Q_strncpy( m_szTechTreeFile.GetForModify(), STRING(m_iszTechTreeFile), sizeof(m_szTechTreeFile) );
|
||||
}
|
||||
|
||||
// Find the technology in the techtree
|
||||
CBaseTechnology *pTechnology = pTechTree->GetTechnology( STRING(m_iszTech) );
|
||||
// Now hook the technology up to me
|
||||
if ( pTechnology )
|
||||
{
|
||||
pTechnology->RegisterWatcher( this );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Update the amount of our technology that's owned
|
||||
//-----------------------------------------------------------------------------
|
||||
void CInfoCustomTechnology::UpdateTechPercentage( float flPercentage )
|
||||
{
|
||||
m_flTechPercentage.Set( flPercentage, this, this );
|
||||
}
|
Reference in New Issue
Block a user