aboutsummaryrefslogtreecommitdiff
path: root/mp/src/game/shared/multiplay_gamerules.h
diff options
context:
space:
mode:
authorJørgen P. Tjernø <[email protected]>2013-12-02 19:31:46 -0800
committerJørgen P. Tjernø <[email protected]>2013-12-02 19:46:31 -0800
commitf56bb35301836e56582a575a75864392a0177875 (patch)
treede61ddd39de3e7df52759711950b4c288592f0dc /mp/src/game/shared/multiplay_gamerules.h
parentMark some more files as text. (diff)
downloadsource-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz
source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip
Fix line endings. WHAMMY.
Diffstat (limited to 'mp/src/game/shared/multiplay_gamerules.h')
-rw-r--r--mp/src/game/shared/multiplay_gamerules.h562
1 files changed, 281 insertions, 281 deletions
diff --git a/mp/src/game/shared/multiplay_gamerules.h b/mp/src/game/shared/multiplay_gamerules.h
index b742fd36..4512c9c9 100644
--- a/mp/src/game/shared/multiplay_gamerules.h
+++ b/mp/src/game/shared/multiplay_gamerules.h
@@ -1,281 +1,281 @@
-//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-//=============================================================================//
-
-#ifndef MULTIPLAY_GAMERULES_H
-#define MULTIPLAY_GAMERULES_H
-#ifdef _WIN32
-#pragma once
-#endif
-
-
-#include "gamerules.h"
-
-#ifdef CLIENT_DLL
-
- #define CMultiplayRules C_MultiplayRules
-
-#else
-
-extern ConVar mp_restartgame;
-extern ConVar mp_restartgame_immediate;
-extern ConVar mp_waitingforplayers_time;
-extern ConVar mp_waitingforplayers_restart;
-extern ConVar mp_waitingforplayers_cancel;
-extern ConVar mp_clan_readyrestart;
-extern ConVar mp_clan_ready_signal;
-extern ConVar nextlevel;
-extern INetworkStringTable *g_pStringTableServerMapCycle;
-
-#if defined ( TF_DLL ) || defined ( TF_CLIENT_DLL )
-extern INetworkStringTable *g_pStringTableServerPopFiles;
-extern INetworkStringTable *g_pStringTableServerMapCycleMvM;
-#endif
-
-#define VOICE_COMMAND_MAX_SUBTITLE_DIST 1900
-
-class CBaseMultiplayerPlayer;
-
-#endif
-
-extern ConVar mp_show_voice_icons;
-
-#define MAX_SPEAK_CONCEPT_LEN 64
-#define MAX_VOICE_COMMAND_SUBTITLE 256
-
-typedef struct
-{
-#ifndef CLIENT_DLL
- // concept to speak
- int m_iConcept;
-
- // play subtitle?
- bool m_bShowSubtitle;
- bool m_bDistanceBasedSubtitle;
-
- char m_szGestureActivity[64];
-
-#else
- // localizable subtitle
- char m_szSubtitle[MAX_VOICE_COMMAND_SUBTITLE];
-
- // localizable string for menu
- char m_szMenuLabel[MAX_VOICE_COMMAND_SUBTITLE];
-#endif
-
-} VoiceCommandMenuItem_t;
-
-extern ConVar mp_timelimit;
-
-//=========================================================
-// CMultiplayRules - rules for the basic half life multiplayer
-// competition
-//=========================================================
-class CMultiplayRules : public CGameRules
-{
-public:
- DECLARE_CLASS( CMultiplayRules, CGameRules );
-
-// Functions to verify the single/multiplayer status of a game
- virtual bool IsMultiplayer( void );
-
- virtual bool Init();
-
- // Damage query implementations.
- virtual bool Damage_IsTimeBased( int iDmgType ); // Damage types that are time-based.
- virtual bool Damage_ShouldGibCorpse( int iDmgType ); // Damage types that gib the corpse.
- virtual bool Damage_ShowOnHUD( int iDmgType ); // Damage types that have client HUD art.
- virtual bool Damage_NoPhysicsForce( int iDmgType ); // Damage types that don't have to supply a physics force & position.
- virtual bool Damage_ShouldNotBleed( int iDmgType ); // Damage types that don't make the player bleed.
- // TEMP: These will go away once DamageTypes become enums.
- virtual int Damage_GetTimeBased( void );
- virtual int Damage_GetShouldGibCorpse( void );
- virtual int Damage_GetShowOnHud( void );
- virtual int Damage_GetNoPhysicsForce( void );
- virtual int Damage_GetShouldNotBleed( void );
-
- CMultiplayRules();
- virtual ~CMultiplayRules() {}
-
- void LoadVoiceCommandScript( void );
-
- virtual bool ShouldDrawHeadLabels()
- {
- if ( mp_show_voice_icons.GetBool() == false )
- return false;
-
- return BaseClass::ShouldDrawHeadLabels();
- }
-
-#ifndef CLIENT_DLL
- virtual void FrameUpdatePostEntityThink();
-
-// GR_Think
- virtual void Think( void );
- virtual void RefreshSkillData( bool forceUpdate );
- virtual bool IsAllowedToSpawn( CBaseEntity *pEntity );
- virtual bool FAllowFlashlight( void );
-
- virtual bool FShouldSwitchWeapon( CBasePlayer *pPlayer, CBaseCombatWeapon *pWeapon );
- virtual CBaseCombatWeapon *GetNextBestWeapon( CBaseCombatCharacter *pPlayer, CBaseCombatWeapon *pCurrentWeapon );
- virtual bool SwitchToNextBestWeapon( CBaseCombatCharacter *pPlayer, CBaseCombatWeapon *pCurrentWeapon );
-
-// Functions to verify the single/multiplayer status of a game
- virtual bool IsDeathmatch( void );
- virtual bool IsCoOp( void );
-
-// Client connection/disconnection
- // If ClientConnected returns FALSE, the connection is rejected and the user is provided the reason specified in
- // svRejectReason
- // Only the client's name and remote address are provided to the dll for verification.
- virtual bool ClientConnected( edict_t *pEntity, const char *pszName, const char *pszAddress, char *reject, int maxrejectlen );
- virtual void InitHUD( CBasePlayer *pl ); // the client dll is ready for updating
- virtual void ClientDisconnected( edict_t *pClient );
-
-// Client damage rules
- virtual float FlPlayerFallDamage( CBasePlayer *pPlayer );
- virtual bool FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker );
- virtual bool AllowDamage( CBaseEntity *pVictim, const CTakeDamageInfo &info );
-
-// Client spawn/respawn control
- virtual void PlayerSpawn( CBasePlayer *pPlayer );
- virtual void PlayerThink( CBasePlayer *pPlayer );
- virtual bool FPlayerCanRespawn( CBasePlayer *pPlayer );
- virtual float FlPlayerSpawnTime( CBasePlayer *pPlayer );
- virtual CBaseEntity *GetPlayerSpawnSpot( CBasePlayer *pPlayer );
-
- virtual bool AllowAutoTargetCrosshair( void );
-
-// Client kills/scoring
- virtual int IPointsForKill( CBasePlayer *pAttacker, CBasePlayer *pKilled );
- virtual void PlayerKilled( CBasePlayer *pVictim, const CTakeDamageInfo &info );
- virtual void DeathNotice( CBasePlayer *pVictim, const CTakeDamageInfo &info );
- CBasePlayer *GetDeathScorer( CBaseEntity *pKiller, CBaseEntity *pInflictor ); // old version of method - kept for backward compat
- virtual CBasePlayer *GetDeathScorer( CBaseEntity *pKiller, CBaseEntity *pInflictor, CBaseEntity *pVictim ); // new version of method
-
-// Weapon retrieval
- virtual bool CanHavePlayerItem( CBasePlayer *pPlayer, CBaseCombatWeapon *pWeapon );// The player is touching an CBaseCombatWeapon, do I give it to him?
-
-// Weapon spawn/respawn control
- virtual int WeaponShouldRespawn( CBaseCombatWeapon *pWeapon );
- virtual float FlWeaponRespawnTime( CBaseCombatWeapon *pWeapon );
- virtual float FlWeaponTryRespawn( CBaseCombatWeapon *pWeapon );
- virtual Vector VecWeaponRespawnSpot( CBaseCombatWeapon *pWeapon );
-
-// Item retrieval
- virtual bool CanHaveItem( CBasePlayer *pPlayer, CItem *pItem );
- virtual void PlayerGotItem( CBasePlayer *pPlayer, CItem *pItem );
-
-// Item spawn/respawn control
- virtual int ItemShouldRespawn( CItem *pItem );
- virtual float FlItemRespawnTime( CItem *pItem );
- virtual Vector VecItemRespawnSpot( CItem *pItem );
- virtual QAngle VecItemRespawnAngles( CItem *pItem );
-
-// Ammo retrieval
- virtual void PlayerGotAmmo( CBaseCombatCharacter *pPlayer, char *szName, int iCount );
-
-// Healthcharger respawn control
- virtual float FlHealthChargerRechargeTime( void );
- virtual float FlHEVChargerRechargeTime( void );
-
-// What happens to a dead player's weapons
- virtual int DeadPlayerWeapons( CBasePlayer *pPlayer );
-
-// What happens to a dead player's ammo
- virtual int DeadPlayerAmmo( CBasePlayer *pPlayer );
-
-// Teamplay stuff
- virtual const char *GetTeamID( CBaseEntity *pEntity ) {return "";}
- virtual int PlayerRelationship( CBaseEntity *pPlayer, CBaseEntity *pTarget );
- virtual bool PlayerCanHearChat( CBasePlayer *pListener, CBasePlayer *pSpeaker );
-
- virtual bool PlayTextureSounds( void ) { return FALSE; }
- virtual bool PlayFootstepSounds( CBasePlayer *pl );
-
-// NPCs
- virtual bool FAllowNPCs( void );
-
- // Immediately end a multiplayer game
- virtual void EndMultiplayerGame( void ) { GoToIntermission(); }
-
-// Voice commands
- virtual bool ClientCommand( CBaseEntity *pEdict, const CCommand &args );
- virtual VoiceCommandMenuItem_t *VoiceCommand( CBaseMultiplayerPlayer *pPlayer, int iMenu, int iItem );
-
-// Bugbait report
- bool IsLoadingBugBaitReport( void );
-
- virtual void ResetMapCycleTimeStamp( void ){ m_nMapCycleTimeStamp = 0; }
-
- virtual void HandleTimeLimitChange( void ){ return; }
-
- void IncrementMapCycleIndex();
-
- void HaveAllPlayersSpeakConceptIfAllowed( int iConcept, int iTeam = TEAM_UNASSIGNED, const char *modifiers = NULL );
-
- virtual void GetTaggedConVarList( KeyValues *pCvarTagList );
-
- void SkipNextMapInCycle();
-
- virtual void ClientCommandKeyValues( edict_t *pEntity, KeyValues *pKeyValues );
-
-public:
-
- struct ResponseRules_t
- {
- CUtlVector<IResponseSystem*> m_ResponseSystems;
- };
- CUtlVector<ResponseRules_t> m_ResponseRules;
-
- virtual void InitCustomResponseRulesDicts() {}
- virtual void ShutdownCustomResponseRulesDicts() {}
-
- // NVNT virtual to check for haptic device
- virtual void ClientSettingsChanged( CBasePlayer *pPlayer );
- virtual void GetNextLevelName( char *szNextMap, int bufsize, bool bRandom = false );
-
- static void DetermineMapCycleFilename( char *pszResult, int nSizeResult, bool bForceSpew );
- static void LoapMapCycleFileIntoVector ( const char *pszMapCycleFile, CUtlVector<char *> &mapList );
- static void FreeMapCycleFileVector ( CUtlVector<char *> &mapList );
-
- bool IsMapInMapCycle( const char *pszName );
-
-protected:
- virtual bool UseSuicidePenalty() { return true; } // apply point penalty for suicide?
-
-public:
- virtual void ChangeLevel( void );
-
-protected:
- virtual void GoToIntermission( void );
- void LoadMapCycleFile( void );
- void ChangeLevelToMap( const char *pszMap );
-
- float m_flIntermissionEndTime;
- static int m_nMapCycleTimeStamp;
- static int m_nMapCycleindex;
- static CUtlVector<char*> m_MapList;
-
- float m_flTimeLastMapChangeOrPlayerWasConnected;
-
-#else
-
- public:
- const char *GetVoiceCommandSubtitle( int iMenu, int iItem );
- bool GetVoiceMenuLabels( int iMenu, KeyValues *pKV );
-
-#endif
-
- private:
- CUtlVector< CUtlVector< VoiceCommandMenuItem_t > > m_VoiceCommandMenus;
-};
-
-inline CMultiplayRules* MultiplayRules()
-{
- return static_cast<CMultiplayRules*>(g_pGameRules);
-}
-
-#endif // MULTIPLAY_GAMERULES_H
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#ifndef MULTIPLAY_GAMERULES_H
+#define MULTIPLAY_GAMERULES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#include "gamerules.h"
+
+#ifdef CLIENT_DLL
+
+ #define CMultiplayRules C_MultiplayRules
+
+#else
+
+extern ConVar mp_restartgame;
+extern ConVar mp_restartgame_immediate;
+extern ConVar mp_waitingforplayers_time;
+extern ConVar mp_waitingforplayers_restart;
+extern ConVar mp_waitingforplayers_cancel;
+extern ConVar mp_clan_readyrestart;
+extern ConVar mp_clan_ready_signal;
+extern ConVar nextlevel;
+extern INetworkStringTable *g_pStringTableServerMapCycle;
+
+#if defined ( TF_DLL ) || defined ( TF_CLIENT_DLL )
+extern INetworkStringTable *g_pStringTableServerPopFiles;
+extern INetworkStringTable *g_pStringTableServerMapCycleMvM;
+#endif
+
+#define VOICE_COMMAND_MAX_SUBTITLE_DIST 1900
+
+class CBaseMultiplayerPlayer;
+
+#endif
+
+extern ConVar mp_show_voice_icons;
+
+#define MAX_SPEAK_CONCEPT_LEN 64
+#define MAX_VOICE_COMMAND_SUBTITLE 256
+
+typedef struct
+{
+#ifndef CLIENT_DLL
+ // concept to speak
+ int m_iConcept;
+
+ // play subtitle?
+ bool m_bShowSubtitle;
+ bool m_bDistanceBasedSubtitle;
+
+ char m_szGestureActivity[64];
+
+#else
+ // localizable subtitle
+ char m_szSubtitle[MAX_VOICE_COMMAND_SUBTITLE];
+
+ // localizable string for menu
+ char m_szMenuLabel[MAX_VOICE_COMMAND_SUBTITLE];
+#endif
+
+} VoiceCommandMenuItem_t;
+
+extern ConVar mp_timelimit;
+
+//=========================================================
+// CMultiplayRules - rules for the basic half life multiplayer
+// competition
+//=========================================================
+class CMultiplayRules : public CGameRules
+{
+public:
+ DECLARE_CLASS( CMultiplayRules, CGameRules );
+
+// Functions to verify the single/multiplayer status of a game
+ virtual bool IsMultiplayer( void );
+
+ virtual bool Init();
+
+ // Damage query implementations.
+ virtual bool Damage_IsTimeBased( int iDmgType ); // Damage types that are time-based.
+ virtual bool Damage_ShouldGibCorpse( int iDmgType ); // Damage types that gib the corpse.
+ virtual bool Damage_ShowOnHUD( int iDmgType ); // Damage types that have client HUD art.
+ virtual bool Damage_NoPhysicsForce( int iDmgType ); // Damage types that don't have to supply a physics force & position.
+ virtual bool Damage_ShouldNotBleed( int iDmgType ); // Damage types that don't make the player bleed.
+ // TEMP: These will go away once DamageTypes become enums.
+ virtual int Damage_GetTimeBased( void );
+ virtual int Damage_GetShouldGibCorpse( void );
+ virtual int Damage_GetShowOnHud( void );
+ virtual int Damage_GetNoPhysicsForce( void );
+ virtual int Damage_GetShouldNotBleed( void );
+
+ CMultiplayRules();
+ virtual ~CMultiplayRules() {}
+
+ void LoadVoiceCommandScript( void );
+
+ virtual bool ShouldDrawHeadLabels()
+ {
+ if ( mp_show_voice_icons.GetBool() == false )
+ return false;
+
+ return BaseClass::ShouldDrawHeadLabels();
+ }
+
+#ifndef CLIENT_DLL
+ virtual void FrameUpdatePostEntityThink();
+
+// GR_Think
+ virtual void Think( void );
+ virtual void RefreshSkillData( bool forceUpdate );
+ virtual bool IsAllowedToSpawn( CBaseEntity *pEntity );
+ virtual bool FAllowFlashlight( void );
+
+ virtual bool FShouldSwitchWeapon( CBasePlayer *pPlayer, CBaseCombatWeapon *pWeapon );
+ virtual CBaseCombatWeapon *GetNextBestWeapon( CBaseCombatCharacter *pPlayer, CBaseCombatWeapon *pCurrentWeapon );
+ virtual bool SwitchToNextBestWeapon( CBaseCombatCharacter *pPlayer, CBaseCombatWeapon *pCurrentWeapon );
+
+// Functions to verify the single/multiplayer status of a game
+ virtual bool IsDeathmatch( void );
+ virtual bool IsCoOp( void );
+
+// Client connection/disconnection
+ // If ClientConnected returns FALSE, the connection is rejected and the user is provided the reason specified in
+ // svRejectReason
+ // Only the client's name and remote address are provided to the dll for verification.
+ virtual bool ClientConnected( edict_t *pEntity, const char *pszName, const char *pszAddress, char *reject, int maxrejectlen );
+ virtual void InitHUD( CBasePlayer *pl ); // the client dll is ready for updating
+ virtual void ClientDisconnected( edict_t *pClient );
+
+// Client damage rules
+ virtual float FlPlayerFallDamage( CBasePlayer *pPlayer );
+ virtual bool FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker );
+ virtual bool AllowDamage( CBaseEntity *pVictim, const CTakeDamageInfo &info );
+
+// Client spawn/respawn control
+ virtual void PlayerSpawn( CBasePlayer *pPlayer );
+ virtual void PlayerThink( CBasePlayer *pPlayer );
+ virtual bool FPlayerCanRespawn( CBasePlayer *pPlayer );
+ virtual float FlPlayerSpawnTime( CBasePlayer *pPlayer );
+ virtual CBaseEntity *GetPlayerSpawnSpot( CBasePlayer *pPlayer );
+
+ virtual bool AllowAutoTargetCrosshair( void );
+
+// Client kills/scoring
+ virtual int IPointsForKill( CBasePlayer *pAttacker, CBasePlayer *pKilled );
+ virtual void PlayerKilled( CBasePlayer *pVictim, const CTakeDamageInfo &info );
+ virtual void DeathNotice( CBasePlayer *pVictim, const CTakeDamageInfo &info );
+ CBasePlayer *GetDeathScorer( CBaseEntity *pKiller, CBaseEntity *pInflictor ); // old version of method - kept for backward compat
+ virtual CBasePlayer *GetDeathScorer( CBaseEntity *pKiller, CBaseEntity *pInflictor, CBaseEntity *pVictim ); // new version of method
+
+// Weapon retrieval
+ virtual bool CanHavePlayerItem( CBasePlayer *pPlayer, CBaseCombatWeapon *pWeapon );// The player is touching an CBaseCombatWeapon, do I give it to him?
+
+// Weapon spawn/respawn control
+ virtual int WeaponShouldRespawn( CBaseCombatWeapon *pWeapon );
+ virtual float FlWeaponRespawnTime( CBaseCombatWeapon *pWeapon );
+ virtual float FlWeaponTryRespawn( CBaseCombatWeapon *pWeapon );
+ virtual Vector VecWeaponRespawnSpot( CBaseCombatWeapon *pWeapon );
+
+// Item retrieval
+ virtual bool CanHaveItem( CBasePlayer *pPlayer, CItem *pItem );
+ virtual void PlayerGotItem( CBasePlayer *pPlayer, CItem *pItem );
+
+// Item spawn/respawn control
+ virtual int ItemShouldRespawn( CItem *pItem );
+ virtual float FlItemRespawnTime( CItem *pItem );
+ virtual Vector VecItemRespawnSpot( CItem *pItem );
+ virtual QAngle VecItemRespawnAngles( CItem *pItem );
+
+// Ammo retrieval
+ virtual void PlayerGotAmmo( CBaseCombatCharacter *pPlayer, char *szName, int iCount );
+
+// Healthcharger respawn control
+ virtual float FlHealthChargerRechargeTime( void );
+ virtual float FlHEVChargerRechargeTime( void );
+
+// What happens to a dead player's weapons
+ virtual int DeadPlayerWeapons( CBasePlayer *pPlayer );
+
+// What happens to a dead player's ammo
+ virtual int DeadPlayerAmmo( CBasePlayer *pPlayer );
+
+// Teamplay stuff
+ virtual const char *GetTeamID( CBaseEntity *pEntity ) {return "";}
+ virtual int PlayerRelationship( CBaseEntity *pPlayer, CBaseEntity *pTarget );
+ virtual bool PlayerCanHearChat( CBasePlayer *pListener, CBasePlayer *pSpeaker );
+
+ virtual bool PlayTextureSounds( void ) { return FALSE; }
+ virtual bool PlayFootstepSounds( CBasePlayer *pl );
+
+// NPCs
+ virtual bool FAllowNPCs( void );
+
+ // Immediately end a multiplayer game
+ virtual void EndMultiplayerGame( void ) { GoToIntermission(); }
+
+// Voice commands
+ virtual bool ClientCommand( CBaseEntity *pEdict, const CCommand &args );
+ virtual VoiceCommandMenuItem_t *VoiceCommand( CBaseMultiplayerPlayer *pPlayer, int iMenu, int iItem );
+
+// Bugbait report
+ bool IsLoadingBugBaitReport( void );
+
+ virtual void ResetMapCycleTimeStamp( void ){ m_nMapCycleTimeStamp = 0; }
+
+ virtual void HandleTimeLimitChange( void ){ return; }
+
+ void IncrementMapCycleIndex();
+
+ void HaveAllPlayersSpeakConceptIfAllowed( int iConcept, int iTeam = TEAM_UNASSIGNED, const char *modifiers = NULL );
+
+ virtual void GetTaggedConVarList( KeyValues *pCvarTagList );
+
+ void SkipNextMapInCycle();
+
+ virtual void ClientCommandKeyValues( edict_t *pEntity, KeyValues *pKeyValues );
+
+public:
+
+ struct ResponseRules_t
+ {
+ CUtlVector<IResponseSystem*> m_ResponseSystems;
+ };
+ CUtlVector<ResponseRules_t> m_ResponseRules;
+
+ virtual void InitCustomResponseRulesDicts() {}
+ virtual void ShutdownCustomResponseRulesDicts() {}
+
+ // NVNT virtual to check for haptic device
+ virtual void ClientSettingsChanged( CBasePlayer *pPlayer );
+ virtual void GetNextLevelName( char *szNextMap, int bufsize, bool bRandom = false );
+
+ static void DetermineMapCycleFilename( char *pszResult, int nSizeResult, bool bForceSpew );
+ static void LoapMapCycleFileIntoVector ( const char *pszMapCycleFile, CUtlVector<char *> &mapList );
+ static void FreeMapCycleFileVector ( CUtlVector<char *> &mapList );
+
+ bool IsMapInMapCycle( const char *pszName );
+
+protected:
+ virtual bool UseSuicidePenalty() { return true; } // apply point penalty for suicide?
+
+public:
+ virtual void ChangeLevel( void );
+
+protected:
+ virtual void GoToIntermission( void );
+ void LoadMapCycleFile( void );
+ void ChangeLevelToMap( const char *pszMap );
+
+ float m_flIntermissionEndTime;
+ static int m_nMapCycleTimeStamp;
+ static int m_nMapCycleindex;
+ static CUtlVector<char*> m_MapList;
+
+ float m_flTimeLastMapChangeOrPlayerWasConnected;
+
+#else
+
+ public:
+ const char *GetVoiceCommandSubtitle( int iMenu, int iItem );
+ bool GetVoiceMenuLabels( int iMenu, KeyValues *pKV );
+
+#endif
+
+ private:
+ CUtlVector< CUtlVector< VoiceCommandMenuItem_t > > m_VoiceCommandMenus;
+};
+
+inline CMultiplayRules* MultiplayRules()
+{
+ return static_cast<CMultiplayRules*>(g_pGameRules);
+}
+
+#endif // MULTIPLAY_GAMERULES_H