This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
nekohook/modules/source2013/sdk/game/server/basemultiplayerplayer.h
2020-08-04 13:13:01 -04:00

138 lines
4.6 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
//=============================================================================
#ifndef BASEMULTIPLAYERPLAYER_H
#define BASEMULTIPLAYERPLAYER_H
#pragma once
#include "ai_speech.h"
#include "player.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