//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $Workfile: $ // $Date: $ // //----------------------------------------------------------------------------- // $Log: $ // // $NoKeywords: $ //=============================================================================// #ifndef HL2MP_GAMERULES_H #define HL2MP_GAMERULES_H #pragma once #include "gamerules.h" #include "gamevars_shared.h" #include "teamplay_gamerules.h" #ifndef CLIENT_DLL #include "hl2mp_player.h" #endif #define VEC_CROUCH_TRACE_MIN \ HL2MPRules()->GetHL2MPViewVectors()->m_vCrouchTraceMin #define VEC_CROUCH_TRACE_MAX \ HL2MPRules()->GetHL2MPViewVectors()->m_vCrouchTraceMax enum { TEAM_COMBINE = 2, TEAM_REBELS, }; #ifdef CLIENT_DLL #define CHL2MPRules C_HL2MPRules #define CHL2MPGameRulesProxy C_HL2MPGameRulesProxy #endif class CHL2MPGameRulesProxy : public CGameRulesProxy { public: DECLARE_CLASS(CHL2MPGameRulesProxy, CGameRulesProxy); DECLARE_NETWORKCLASS(); }; class HL2MPViewVectors : public CViewVectors { public: HL2MPViewVectors(Vector vView, Vector vHullMin, Vector vHullMax, Vector vDuckHullMin, Vector vDuckHullMax, Vector vDuckView, Vector vObsHullMin, Vector vObsHullMax, Vector vDeadViewHeight, Vector vCrouchTraceMin, Vector vCrouchTraceMax) : CViewVectors(vView, vHullMin, vHullMax, vDuckHullMin, vDuckHullMax, vDuckView, vObsHullMin, vObsHullMax, vDeadViewHeight) { m_vCrouchTraceMin = vCrouchTraceMin; m_vCrouchTraceMax = vCrouchTraceMax; } Vector m_vCrouchTraceMin; Vector m_vCrouchTraceMax; }; class CHL2MPRules : public CTeamplayRules { public: DECLARE_CLASS(CHL2MPRules, CTeamplayRules); #ifdef CLIENT_DLL DECLARE_CLIENTCLASS_NOBASE(); // This makes datatables able to access our // private vars. #else DECLARE_SERVERCLASS_NOBASE(); // This makes datatables able to access our // private vars. #endif CHL2MPRules(); virtual ~CHL2MPRules(); virtual void Precache(void); virtual bool ShouldCollide(int collisionGroup0, int collisionGroup1); virtual bool ClientCommand(CBaseEntity *pEdict, const CCommand &args); virtual float FlWeaponRespawnTime(CBaseCombatWeapon *pWeapon); virtual float FlWeaponTryRespawn(CBaseCombatWeapon *pWeapon); virtual Vector VecWeaponRespawnSpot(CBaseCombatWeapon *pWeapon); virtual int WeaponShouldRespawn(CBaseCombatWeapon *pWeapon); virtual void Think(void); virtual void CreateStandardEntities(void); virtual void ClientSettingsChanged(CBasePlayer *pPlayer); virtual int PlayerRelationship(CBaseEntity *pPlayer, CBaseEntity *pTarget); virtual void GoToIntermission(void); virtual void DeathNotice(CBasePlayer *pVictim, const CTakeDamageInfo &info); virtual const char *GetGameDescription(void); // derive this function if you mod uses encrypted weapon info files virtual const unsigned char *GetEncryptionKey(void) { return (unsigned char *)"x9Ke0BY7"; } virtual const CViewVectors *GetViewVectors() const; const HL2MPViewVectors *GetHL2MPViewVectors() const; float GetMapRemainingTime(); void CleanUpMap(); void CheckRestartGame(); void RestartGame(); #ifndef CLIENT_DLL virtual Vector VecItemRespawnSpot(CItem *pItem); virtual QAngle VecItemRespawnAngles(CItem *pItem); virtual float FlItemRespawnTime(CItem *pItem); virtual bool CanHavePlayerItem(CBasePlayer *pPlayer, CBaseCombatWeapon *pItem); virtual bool FShouldSwitchWeapon(CBasePlayer *pPlayer, CBaseCombatWeapon *pWeapon); void AddLevelDesignerPlacedObject(CBaseEntity *pEntity); void RemoveLevelDesignerPlacedObject(CBaseEntity *pEntity); void ManageObjectRelocation(void); void CheckChatForReadySignal(CHL2MP_Player *pPlayer, const char *chatmsg); const char *GetChatFormat(bool bTeamOnly, CBasePlayer *pPlayer); #endif virtual void ClientDisconnected(edict_t *pClient); bool CheckGameOver(void); bool IsIntermission(void); void PlayerKilled(CBasePlayer *pVictim, const CTakeDamageInfo &info); bool IsTeamplay(void) { return m_bTeamPlayEnabled; } void CheckAllPlayersReady(void); virtual bool IsConnectedUserInfoChangeAllowed(CBasePlayer *pPlayer); private: CNetworkVar(bool, m_bTeamPlayEnabled); CNetworkVar(float, m_flGameStartTime); CUtlVector m_hRespawnableItemsAndWeapons; float m_tmNextPeriodicThink; float m_flRestartGameTime; bool m_bCompleteReset; bool m_bAwaitingReadyRestart; bool m_bHeardAllPlayersReady; #ifndef CLIENT_DLL bool m_bChangelevelDone; #endif }; inline CHL2MPRules *HL2MPRules() { return static_cast(g_pGameRules); } #endif // HL2MP_GAMERULES_H