diff options
Diffstat (limited to 'game/server/basemultiplayerplayer.h')
| -rw-r--r-- | game/server/basemultiplayerplayer.h | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/game/server/basemultiplayerplayer.h b/game/server/basemultiplayerplayer.h new file mode 100644 index 0000000..a1ea58f --- /dev/null +++ b/game/server/basemultiplayerplayer.h @@ -0,0 +1,127 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +//============================================================================= +#ifndef BASEMULTIPLAYERPLAYER_H +#define BASEMULTIPLAYERPLAYER_H +#pragma once + +#include "player.h" +#include "ai_speech.h" + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +class CBaseMultiplayerPlayer : public CAI_ExpresserHost<CBasePlayer> +{ + + DECLARE_CLASS( CBaseMultiplayerPlayer, CAI_ExpresserHost<CBasePlayer> ); + +public: + + CBaseMultiplayerPlayer(); + ~CBaseMultiplayerPlayer(); + + virtual void Spawn( void ); + + virtual void PostConstructor( const char *szClassname ); + virtual void ModifyOrAppendCriteria( AI_CriteriaSet& criteriaSet ); + + virtual bool SpeakIfAllowed( AIConcept_t concept, const char *modifiers = NULL, char *pszOutResponseChosen = NULL, size_t bufsize = 0, IRecipientFilter *filter = NULL ); + virtual IResponseSystem *GetResponseSystem(); + bool SpeakConcept( AI_Response& response, int iConcept ); + virtual bool SpeakConceptIfAllowed( int iConcept, const char *modifiers = NULL, char *pszOutResponseChosen = NULL, size_t bufsize = 0, IRecipientFilter *filter = NULL ); + + virtual bool CanHearAndReadChatFrom( CBasePlayer *pPlayer ); + virtual bool CanSpeak( void ) { return true; } + virtual bool CanBeAutobalanced() { return true; } + + virtual void Precache( void ) + { + PrecacheParticleSystem( "achieved" ); + + BaseClass::Precache(); + } + + virtual bool ClientCommand( const CCommand &args ); + + virtual bool CanSpeakVoiceCommand( void ) { return true; } + virtual bool ShouldShowVoiceSubtitleToEnemy( void ); + virtual void NoteSpokeVoiceCommand( const char *pszScenePlayed ) {} + + virtual void OnAchievementEarned( int iAchievement ) {} + + enum + { + CHAT_IGNORE_NONE = 0, + CHAT_IGNORE_ALL, + CHAT_IGNORE_TEAM, + }; + + int m_iIgnoreGlobalChat; + + //--------------------------------- + // Speech support + virtual CAI_Expresser *GetExpresser() { return m_pExpresser; } + virtual CMultiplayer_Expresser *GetMultiplayerExpresser() { return m_pExpresser; } + + void SetLastForcedChangeTeamTimeToNow( void ) { m_flLastForcedChangeTeamTime = gpGlobals->curtime; } + float GetLastForcedChangeTeamTime( void ) { return m_flLastForcedChangeTeamTime; } + + void SetTeamBalanceScore( int iScore ) { m_iBalanceScore = iScore; } + int GetTeamBalanceScore( void ) { return m_iBalanceScore; } + + virtual int CalculateTeamBalanceScore( void ); + + void AwardAchievement( int iAchievement, int iCount = 1 ); + int GetPerLifeCounterKV( const char *name ); + void SetPerLifeCounterKV( const char *name, int value ); + void ResetPerLifeCounters( void ); + + KeyValues *GetPerLifeCounterKeys( void ) { return m_pAchievementKV; } + + void EscortScoringThink( void ); + void StartScoringEscortPoints( float flRate ); + void StopScoringEscortPoints( void ); + float m_flAreaCaptureScoreAccumulator; + float m_flCapPointScoreRate; + + float GetConnectionTime( void ) { return m_flConnectionTime; } + + // Command rate limiting. + bool ShouldRunRateLimitedCommand( const CCommand &args ); + bool ShouldRunRateLimitedCommand( const char *pszCommand ); + +protected: + virtual CAI_Expresser *CreateExpresser( void ); + + int m_iCurrentConcept; +private: + //--------------------------------- + CMultiplayer_Expresser *m_pExpresser; + + float m_flConnectionTime; + float m_flLastForcedChangeTeamTime; + + int m_iBalanceScore; // a score used to determine which players are switched to balance the teams + + KeyValues *m_pAchievementKV; + + // This lets us rate limit the commands the players can execute so they don't overflow things like reliable buffers. + CUtlDict<float,int> m_RateLimitLastCommandTimes; +}; + +//----------------------------------------------------------------------------- +// Inline methods +//----------------------------------------------------------------------------- +inline CBaseMultiplayerPlayer *ToBaseMultiplayerPlayer( CBaseEntity *pEntity ) +{ + if ( !pEntity || !pEntity->IsPlayer() ) + return NULL; +#if _DEBUG + return dynamic_cast<CBaseMultiplayerPlayer *>( pEntity ); +#else + return static_cast<CBaseMultiplayerPlayer *>( pEntity ); +#endif +} + +#endif // BASEMULTIPLAYERPLAYER_H |