diff options
| author | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
|---|---|---|
| committer | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
| commit | 39ed87570bdb2f86969d4be821c94b722dc71179 (patch) | |
| tree | abc53757f75f40c80278e87650ea92808274aa59 /sp/src/game/shared/teamplay_gamerules.h | |
| download | source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip | |
First version of the SOurce SDK 2013
Diffstat (limited to 'sp/src/game/shared/teamplay_gamerules.h')
| -rw-r--r-- | sp/src/game/shared/teamplay_gamerules.h | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/sp/src/game/shared/teamplay_gamerules.h b/sp/src/game/shared/teamplay_gamerules.h new file mode 100644 index 00000000..275907af --- /dev/null +++ b/sp/src/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 );
+ 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 ) { 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
|