|
|
//========= Copyright � 1996-2005, 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, bool bTeamOnly ); 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; }
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
|