diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/shared/teamplay_gamerules.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/shared/teamplay_gamerules.h')
| -rw-r--r-- | game/shared/teamplay_gamerules.h | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/game/shared/teamplay_gamerules.h b/game/shared/teamplay_gamerules.h new file mode 100644 index 0000000..6be6082 --- /dev/null +++ b/game/shared/teamplay_gamerules.h @@ -0,0 +1,126 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $Workfile: $ +// $Date: $ +// +//----------------------------------------------------------------------------- +// $Log: $ +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef TEAMPLAY_GAMERULES_H +#define TEAMPLAY_GAMERULES_H +#pragma once + +#include "gamerules.h" +#include "multiplay_gamerules.h" + +#ifdef CLIENT_DLL + + #define CTeamplayRules C_TeamplayRules + +#else + + #include "takedamageinfo.h" + +#endif + + +// +// teamplay_gamerules.h +// + + +#define MAX_TEAMNAME_LENGTH 16 +#define MAX_TEAMS 32 + +#define TEAMPLAY_TEAMLISTLENGTH MAX_TEAMS*MAX_TEAMNAME_LENGTH + + +class CTeamplayRules : public CMultiplayRules +{ +public: + DECLARE_CLASS( CTeamplayRules, CMultiplayRules ); + + // Return the value of this player towards capturing a point + virtual int GetCaptureValueForPlayer( CBasePlayer *pPlayer ) { return 1; } + virtual bool TeamMayCapturePoint( int iTeam, int iPointIndex ) { return true; } + virtual bool PlayerMayCapturePoint( CBasePlayer *pPlayer, int iPointIndex, char *pszReason = NULL, int iMaxReasonLength = 0 ) { return true; } + virtual bool PlayerMayBlockPoint( CBasePlayer *pPlayer, int iPointIndex, char *pszReason = NULL, int iMaxReasonLength = 0 ) { return false; } + + // Return false if players aren't allowed to cap points at this time (i.e. in WaitingForPlayers) + virtual bool PointsMayBeCaptured( void ) { return true; } + virtual void SetLastCapPointChanged( int iIndex ) { return; } + +#ifdef CLIENT_DLL + +#else + + CTeamplayRules(); + virtual ~CTeamplayRules() {}; + + virtual void Precache( void ); + + virtual bool ClientCommand( CBaseEntity *pEdict, const CCommand &args ); + virtual void ClientSettingsChanged( CBasePlayer *pPlayer ); + virtual bool IsTeamplay( void ); + virtual bool FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker, const CTakeDamageInfo &info ); + virtual int PlayerRelationship( CBaseEntity *pPlayer, CBaseEntity *pTarget ); + virtual bool PlayerCanHearChat( CBasePlayer *pListener, CBasePlayer *pSpeaker ); + virtual const char *GetTeamID( CBaseEntity *pEntity ); + virtual bool ShouldAutoAim( CBasePlayer *pPlayer, edict_t *target ); + virtual int IPointsForKill( CBasePlayer *pAttacker, CBasePlayer *pKilled ); + virtual void InitHUD( CBasePlayer *pl ); + virtual void DeathNotice( CBasePlayer *pVictim, const CTakeDamageInfo &info ); + virtual const char *GetGameDescription( void ) { return "Teamplay"; } // this is the game name that gets seen in the server browser + virtual void PlayerKilled( CBasePlayer *pVictim, const CTakeDamageInfo &info ); + virtual void Think ( void ); + virtual int GetTeamIndex( const char *pTeamName ); + virtual const char *GetIndexedTeamName( int teamIndex ); + virtual bool IsValidTeam( const char *pTeamName ); + virtual const char *SetDefaultPlayerTeam( CBasePlayer *pPlayer ); + virtual void ChangePlayerTeam( CBasePlayer *pPlayer, const char *pTeamName, bool bKill, bool bGib ); + virtual void ClientDisconnected( edict_t *pClient ); + virtual bool TimerMayExpire( void ) { return true; } + + // A game has been won by the specified team + virtual void SetWinningTeam( int team, int iWinReason, bool bForceMapReset = true, bool bSwitchTeams = false, bool bDontAddScore = false, bool bFinal = false ) { return; } + virtual void SetStalemate( int iReason, bool bForceMapReset = true, bool bSwitchTeams = false ) { return; } + + // Used to determine if all players should switch teams + virtual void SetSwitchTeams( bool bSwitch ){ m_bSwitchTeams = bSwitch; } + virtual bool ShouldSwitchTeams( void ){ return m_bSwitchTeams; } + virtual void HandleSwitchTeams( void ){ return; } + + // Used to determine if we should scramble the teams + virtual void SetScrambleTeams( bool bScramble ){ m_bScrambleTeams = bScramble; } + virtual bool ShouldScrambleTeams( void ){ return m_bScrambleTeams; } + virtual void HandleScrambleTeams( void ){ return; } + + virtual bool PointsMayAlwaysBeBlocked(){ return false; } + +protected: + bool m_DisableDeathMessages; + +private: + void RecountTeams( void ); + const char *TeamWithFewestPlayers( void ); + + bool m_DisableDeathPenalty; + bool m_teamLimit; // This means the server set only some teams as valid + char m_szTeamList[TEAMPLAY_TEAMLISTLENGTH]; + bool m_bSwitchTeams; + bool m_bScrambleTeams; + +#endif +}; + +inline CTeamplayRules* TeamplayGameRules() +{ + return static_cast<CTeamplayRules*>(g_pGameRules); +} + +#endif // TEAMPLAY_GAMERULES_H |