From c35c7c60b36f0e2c0420b99c7e882354fa11a1c7 Mon Sep 17 00:00:00 2001 From: s1lentq Date: Thu, 2 Jul 2015 03:22:46 +0600 Subject: [PATCH] Fix linux compilation cleanup fixed offset some of a members of the class Reversed CRecharge, CCStrikeGameMgrHelper, CVoiceGameMgr --- regamedll/build.gradle | 8 +- regamedll/common/com_model.h | 10 - regamedll/dlls/bot/cs_bot.h | 80 +++++- regamedll/dlls/bot/cs_bot_manager.h | 2 +- regamedll/dlls/bot/states/cs_bot_follow.cpp | 77 ------ regamedll/dlls/career_tasks.h | 22 +- regamedll/dlls/cbase.h | 16 +- regamedll/dlls/doors.cpp | 3 + regamedll/dlls/doors.h | 3 - regamedll/dlls/effects.cpp | 26 -- regamedll/dlls/effects.h | 47 ++-- regamedll/dlls/enginecallback.h | 2 + regamedll/dlls/func_tank.cpp | 13 +- regamedll/dlls/func_tank.h | 10 +- regamedll/dlls/gamerules.cpp | 7 + regamedll/dlls/gamerules.h | 66 ++++- regamedll/dlls/ggrenade.cpp | 5 - regamedll/dlls/h_ai.h | 39 +++ regamedll/dlls/h_battery.cpp | 135 ++++++++-- regamedll/dlls/h_battery.h | 43 ++-- regamedll/dlls/hostage/hostage.cpp | 1 + regamedll/dlls/hostage/hostage.h | 2 + regamedll/dlls/lights.cpp | 9 - regamedll/dlls/lights.h | 2 +- regamedll/dlls/maprules.cpp | 11 - regamedll/dlls/maprules.h | 10 +- regamedll/dlls/monsters.h | 2 +- regamedll/dlls/multiplay_gamerules.cpp | 250 ++++++++++++++---- regamedll/dlls/plats.cpp | 113 +------- regamedll/dlls/plats.h | 97 ++++--- regamedll/dlls/player.cpp | 25 +- regamedll/dlls/player.h | 20 +- regamedll/dlls/trains.h | 5 +- regamedll/dlls/weapons.h | 2 +- regamedll/engine/cmd.h | 60 +++++ regamedll/engine/maintypes.h | 1 + regamedll/game_shared/bot/bot_profile.h | 4 + regamedll/game_shared/bot/nav_area.cpp | 96 +++---- regamedll/game_shared/bot/nav_area.h | 53 +++- regamedll/game_shared/voice_common.h | 2 +- regamedll/game_shared/voice_gamemgr.cpp | 257 ++++++++++++------- regamedll/game_shared/voice_gamemgr.h | 49 +++- regamedll/hookers/6153_hooker.cpp | 100 ++++++-- regamedll/hookers/engine.h | 1 + regamedll/msvc/ReGameDLL.vcxproj | 2 + regamedll/msvc/ReGameDLL.vcxproj.filters | 6 + regamedll/regamedll/dlls.h | 1 + regamedll/unittests/struct_offsets_tests.cpp | 49 ++-- 48 files changed, 1169 insertions(+), 675 deletions(-) create mode 100644 regamedll/dlls/h_ai.h create mode 100644 regamedll/engine/cmd.h diff --git a/regamedll/build.gradle b/regamedll/build.gradle index 624a304e..0350ad74 100644 --- a/regamedll/build.gradle +++ b/regamedll/build.gradle @@ -125,7 +125,7 @@ void setupToolchain(NativeBinarySpec b) { } b.lib LazyNativeDepSet.create(dep_bzip2, 'bzip2', b.buildType.name, true) - cfg.singleDefines 'USE_BREAKPAD_HANDLER', 'DEDICATED', 'REGAMEDLL_SELF' + cfg.singleDefines 'USE_BREAKPAD_HANDLER', 'DEDICATED', 'REGAMEDLL_SELF', 'HOOK_GAMEDLL' if (cfg instanceof MsvcToolchainConfig) { @@ -168,9 +168,13 @@ void setupToolchain(NativeBinarySpec b) { // TODO: check it //if (!unitTestExecutable && !mpLib) { - cfg.singleDefines 'HOOK_GAMEDLL' + // cfg.singleDefines 'HOOK_GAMEDLL' //} + if (unitTestExecutable) { + cfg.singleDefines 'REGAMEDLL_UNIT_TESTS' + } + if (regamedllFixes) { cfg.singleDefines 'REGAMEDLL_FIXES', 'REGAMEDLL_CHECKS' } diff --git a/regamedll/common/com_model.h b/regamedll/common/com_model.h index 79b61279..feb99fab 100644 --- a/regamedll/common/com_model.h +++ b/regamedll/common/com_model.h @@ -175,16 +175,6 @@ typedef struct mleaf_s byte ambient_sound_level[ NUM_AMBIENTS ]; } mleaf_t; -#ifdef CUSTOM_H - -void da(void) -{ - ; -} - -#endif// TI_LOX - - struct msurface_s { int visframe; // should be drawn when node is crossed diff --git a/regamedll/dlls/bot/cs_bot.h b/regamedll/dlls/bot/cs_bot.h index b375199e..da69b227 100644 --- a/regamedll/dlls/bot/cs_bot.h +++ b/regamedll/dlls/bot/cs_bot.h @@ -1297,7 +1297,6 @@ private: };/* size: 8, cachelines: 1, members: 2 */ - /* <5a0af3> ../cstrike/dlls/bot/cs_bot.h:1114 */ class PathCost { @@ -1396,7 +1395,84 @@ public: private: CCSBot *m_bot; RouteType m_route; -}; + +};/* size: 8, cachelines: 1, members: 2 */ + +/* <568fae> ../cstrike/dlls/bot/states/cs_bot_follow.cpp:95 */ +class FollowTargetCollector +{ +public: + FollowTargetCollector(CBasePlayer *player) + { + m_player = player; + + Vector playerVel = player->pev->velocity; + + m_forward.x = playerVel.x; + m_forward.y = playerVel.y; + + float speed = m_forward.NormalizeInPlace(); + + Vector playerOrigin = player->pev->origin; + + const float walkSpeed = 100.0f; + if (speed < walkSpeed) + { + m_cutoff.x = playerOrigin.x; + m_cutoff.y = playerOrigin.y; + + m_forward.x = 0.0f; + m_forward.y = 0.0f; + } + else + { + const float k = 1.5f; // 2.0f; + float trimSpeed = min(speed, 200.0f); + + m_cutoff.x = playerOrigin.x + k * trimSpeed * m_forward.x; + m_cutoff.y = playerOrigin.y + k * trimSpeed * m_forward.y; + } + + m_targetAreaCount = 0; + } + + enum { MAX_TARGET_AREAS = 128 }; + + /* <568dc3> ../cstrike/dlls/bot/states/cs_bot_follow.cpp:124 */ + bool operator()(CNavArea *area) + { + if (m_targetAreaCount >= MAX_TARGET_AREAS) + return false; + + // only use two-way connections + if (!area->GetParent() || area->IsConnected(area->GetParent(), NUM_DIRECTIONS)) + { + if (m_forward.IsZero()) + { + m_targetArea[ m_targetAreaCount++ ] = area; + } + else + { + // collect areas in the direction of the player's forward motion + Vector2D to(((*area->GetCenter()).x - m_cutoff.x), (*area->GetCenter()).y - m_cutoff.y); + to.NormalizeInPlace(); + + //if (DotProduct( to, m_forward ) > 0.7071f) + if ((to.x * m_forward.x + to.y * m_forward.y) > 0.7071f) + m_targetArea[ m_targetAreaCount++ ] = area; + } + } + + return (m_targetAreaCount < MAX_TARGET_AREAS); + } + + CBasePlayer *m_player; + Vector2D m_forward; + Vector2D m_cutoff; + CNavArea *m_targetArea[ MAX_TARGET_AREAS ]; + int m_targetAreaCount; + +};/* size: 536, cachelines: 9, members: 5 */ #ifdef HOOK_GAMEDLL diff --git a/regamedll/dlls/bot/cs_bot_manager.h b/regamedll/dlls/bot/cs_bot_manager.h index 20272fd4..111d1606 100644 --- a/regamedll/dlls/bot/cs_bot_manager.h +++ b/regamedll/dlls/bot/cs_bot_manager.h @@ -387,7 +387,7 @@ public: NOBODY static void MonitorBotCVars(void); NOBODY static void MaintainBotQuota(void); NOBODY static bool AddBot(BotProfile *profile, BotProfileTeamType team); - NOBODY static bool BotAddCommand(BotProfileTeamType, bool isFromConsole); + NOBODY static bool BotAddCommand(BotProfileTeamType team, bool isFromConsole); #ifndef HOOK_GAMEDLL private: diff --git a/regamedll/dlls/bot/states/cs_bot_follow.cpp b/regamedll/dlls/bot/states/cs_bot_follow.cpp index 9e22a91a..805ff6d3 100644 --- a/regamedll/dlls/bot/states/cs_bot_follow.cpp +++ b/regamedll/dlls/bot/states/cs_bot_follow.cpp @@ -26,83 +26,6 @@ NOBODY void FollowState::ComputeLeaderMotionState(float leaderSpeed) // } } -/* <568fae> ../cstrike/dlls/bot/states/cs_bot_follow.cpp:95 */ -class FollowTargetCollector -{ -public: - FollowTargetCollector(CBasePlayer *player) - { - m_player = player; - - Vector playerVel = player->pev->velocity; - - m_forward.x = playerVel.x; - m_forward.y = playerVel.y; - - float speed = m_forward.NormalizeInPlace(); - - Vector playerOrigin = player->pev->origin; - - const float walkSpeed = 100.0f; - if (speed < walkSpeed) - { - m_cutoff.x = playerOrigin.x; - m_cutoff.y = playerOrigin.y; - - m_forward.x = 0.0f; - m_forward.y = 0.0f; - } - else - { - const float k = 1.5f; // 2.0f; - float trimSpeed = min(speed, 200.0f); - - m_cutoff.x = playerOrigin.x + k * trimSpeed * m_forward.x; - m_cutoff.y = playerOrigin.y + k * trimSpeed * m_forward.y; - } - - m_targetAreaCount = 0; - } - - enum { MAX_TARGET_AREAS = 128 }; - - /* <568dc3> ../cstrike/dlls/bot/states/cs_bot_follow.cpp:124 */ - bool operator()(CNavArea *area) - { - if (m_targetAreaCount >= MAX_TARGET_AREAS) - return false; - - // only use two-way connections - if (!area->GetParent() || area->IsConnected(area->GetParent(), NUM_DIRECTIONS)) - { - if (m_forward.IsZero()) - { - m_targetArea[ m_targetAreaCount++ ] = area; - } - else - { - // collect areas in the direction of the player's forward motion - Vector2D to(((*area->GetCenter()).x - m_cutoff.x), (*area->GetCenter()).y - m_cutoff.y); - to.NormalizeInPlace(); - - //if (DotProduct( to, m_forward ) > 0.7071f) - if ((to.x * m_forward.x + to.y * m_forward.y) > 0.7071f) - m_targetArea[ m_targetAreaCount++ ] = area; - } - } - - return (m_targetAreaCount < MAX_TARGET_AREAS); - } - - CBasePlayer *m_player; - Vector2D m_forward; - Vector2D m_cutoff; - CNavArea *m_targetArea[ MAX_TARGET_AREAS ]; - int m_targetAreaCount; - -};/* size: 536, cachelines: 9, members: 5 */ - - /* <569368> ../cstrike/dlls/bot/states/cs_bot_follow.cpp:164 */ NOBODY void FollowState::OnUpdate(CCSBot *me) { diff --git a/regamedll/dlls/career_tasks.h b/regamedll/dlls/career_tasks.h index 1f8f0301..914c4b29 100644 --- a/regamedll/dlls/career_tasks.h +++ b/regamedll/dlls/career_tasks.h @@ -74,7 +74,6 @@ public: void SendPartialNotification(void); private: - //int ()(void) * * _vptr.CCareerTask; bool m_isComplete; const char *m_name; @@ -95,13 +94,15 @@ private: typedef std::list CareerTaskList; +/* <1efed1> ../cstrike/dlls/career_tasks.cpp:636 */ class CCareerTaskManager { public: CCareerTaskManager(void); public: - void Create(void); + static void Create(void); + void Reset(bool deleteTasks); void AddTask(const char *taskName, const char *weaponName, int eventCount, bool mustLive, bool crossRounds, bool isComplete); @@ -138,19 +139,17 @@ public: void UnlatchRoundEndMessage(void); private: - CareerTaskList m_tasks; // Lin - 0 | Win - 0 #if defined(_WIN32) && defined(HOOK_GAMEDLL) - // TODO: std::list have be size with 12 on platform Windows - - int padding_std_list_size_12; - + int unknown_padding1; #endif // HOOK_GAMEDLL - int m_nextId; // Lin - 8 | Win - 12 - float m_roundStartTime; // Lin - 12 | Win - 16 - int m_taskTime; // Lin - 16 | Win - 20 - int m_finishedTaskTime; // Lin - 20 | Win - 24 + CareerTaskList m_tasks; + + int m_nextId; + float m_roundStartTime; + int m_taskTime; + int m_finishedTaskTime; int m_finishedTaskRound; GameEventType m_roundEndMessage; @@ -168,6 +167,7 @@ struct TaskInfo };/* size: 12, cachelines: 1, members: 3 */ +/* <1ef56d> ../cstrike/dlls/career_tasks.cpp:139 */ class CPreventDefuseTask: public CCareerTask { public: diff --git a/regamedll/dlls/cbase.h b/regamedll/dlls/cbase.h index e23f0ab0..ab8848b7 100644 --- a/regamedll/dlls/cbase.h +++ b/regamedll/dlls/cbase.h @@ -430,7 +430,7 @@ public: } virtual BOOL ReflectGauss(void) { - return (IsBSPModel() && pev->takedamage == 0.0f); + return (IsBSPModel() && pev->takedamage == DAMAGE_NO); } virtual BOOL HasTarget(string_t targetname) { @@ -667,7 +667,10 @@ class CPointEntity: public CBaseEntity { public: NOBODY virtual void Spawn(void); - NOBODY virtual int ObjectCaps(void); + NOBODY virtual int ObjectCaps(void) + { + return ObjectCaps_(); + } #ifdef HOOK_GAMEDLL @@ -918,17 +921,12 @@ public: int Restore_(CRestore &restore); int ObjectCaps_(void) { - if(pev->takedamage == 0.0f) + if(pev->takedamage == DAMAGE_NO) return FCAP_IMPULSE_USE; - return (CBaseToggle:: ObjectCaps() & ~FCAP_ACROSS_TRANSITION); + return (CBaseToggle::ObjectCaps() & ~FCAP_ACROSS_TRANSITION); } - - - - - #endif // HOOK_GAMEDLL public: diff --git a/regamedll/dlls/doors.cpp b/regamedll/dlls/doors.cpp index c3d41239..762fcb4a 100644 --- a/regamedll/dlls/doors.cpp +++ b/regamedll/dlls/doors.cpp @@ -98,6 +98,9 @@ NOBODY void CBaseDoor::SetToggleState_(int state) // int state); // 350 } +#define noiseMoving noise1 +#define noiseArrived noise2 + /* <6924c> ../cstrike/dlls/doors.cpp:359 */ NOBODY void CBaseDoor::Precache_(void) { diff --git a/regamedll/dlls/doors.h b/regamedll/dlls/doors.h index c209f899..0db71e2e 100644 --- a/regamedll/dlls/doors.h +++ b/regamedll/dlls/doors.h @@ -32,9 +32,6 @@ #pragma once #endif -#define noiseMoving noise1 -#define noiseArrived noise2 - #define DOOR_SENTENCEWAIT 6 #define DOOR_SOUNDWAIT 3 #define BUTTON_SOUNDWAIT 0.5 diff --git a/regamedll/dlls/effects.cpp b/regamedll/dlls/effects.cpp index 82641603..9e2d0ebf 100644 --- a/regamedll/dlls/effects.cpp +++ b/regamedll/dlls/effects.cpp @@ -79,12 +79,6 @@ LINK_ENTITY_TO_CLASS(env_bubbles, CBubbling); /* <741e0> ../cstrike/dlls/effects.cpp:68 */ IMPLEMENT_SAVERESTORE(CBubbling, CBaseEntity); -/* <73427> ../cstrike/dlls/effects.cpp:48 */ -NOBODY int CBubbling::ObjectCaps_(void) -{ - return 0; -} - /* <7344d> ../cstrike/dlls/effects.cpp:73 */ NOBODY void CBubbling::Spawn_(void) { @@ -1245,11 +1239,6 @@ int CSprite::Restore(CRestore &restore) return Restore_(restore); } -int CSprite::ObjectCaps(void) -{ - return ObjectCaps_(); -} - void CSprite::Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) { Use_(pActivator, pCaller, useType, value); @@ -1265,16 +1254,6 @@ void CBeam::Precache(void) Precache_(); } -int CBeam::ObjectCaps(void) -{ - return ObjectCaps_(); -} - -Vector CBeam::Center(void) -{ - return Center_(); -} - void CLaser::Spawn(void) { Spawn_(); @@ -1330,11 +1309,6 @@ int CBubbling::Restore(CRestore &restore) return Restore_(restore); } -int CBubbling::ObjectCaps(void) -{ - return ObjectCaps_(); -} - void CBubbling::Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) { Use_(pActivator, pCaller, useType, value); diff --git a/regamedll/dlls/effects.h b/regamedll/dlls/effects.h index d4890724..86487b02 100644 --- a/regamedll/dlls/effects.h +++ b/regamedll/dlls/effects.h @@ -77,14 +77,10 @@ public: NOBODY virtual void Restart(void); NOBODY virtual int Save(CSave &save); NOBODY virtual int Restore(CRestore &restore); - NOBODY virtual int ObjectCaps(void); - //{ - // int flags = 0; - // if (pev->spawnflags & SF_SPRITE_TEMPORARY) - // flags = FCAP_DONT_SAVE; - - // return (CBaseEntity :: ObjectCaps() & ~FCAP_ACROSS_TRANSITION)|flags; - //} + NOBODY virtual int ObjectCaps(void) + { + return ObjectCaps_(); + } NOBODY virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value); #ifdef HOOK_GAMEDLL @@ -100,7 +96,7 @@ public: if (pev->spawnflags & SF_SPRITE_TEMPORARY) flags = FCAP_DONT_SAVE; - return (CBaseEntity :: ObjectCaps() & ~FCAP_ACROSS_TRANSITION)|flags; + return (CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION)|flags; } void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value); @@ -187,18 +183,14 @@ class CBeam: public CBaseEntity public: NOBODY virtual void Spawn(void); NOBODY virtual void Precache(void); - NOBODY virtual int ObjectCaps(void); - //{ - // int flags = 0; - // if (pev->spawnflags & SF_BEAM_TEMPORARY) - // flags = FCAP_DONT_SAVE; - - // return (CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION)|flags; - //} - NOBODY virtual Vector Center(void); - //{ - // return (GetStartPos() + GetEndPos()) * 0.5; - //} + NOBODY virtual int ObjectCaps(void) + { + return ObjectCaps_(); + } + NOBODY virtual Vector Center(void) + { + return Center_(); + } #ifdef HOOK_GAMEDLL @@ -402,10 +394,10 @@ public: NOBODY virtual void KeyValue(KeyValueData *pkvd); NOBODY virtual int Save(CSave &save); NOBODY virtual int Restore(CRestore &restore); - NOBODY virtual int ObjectCaps(void); - //{ - // return 0;//CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION; - //} + NOBODY virtual int ObjectCaps(void) + { + return ObjectCaps_(); + } NOBODY virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value); #ifdef HOOK_GAMEDLL @@ -415,7 +407,10 @@ public: void KeyValue_(KeyValueData *pkvd); int Save_(CSave &save); int Restore_(CRestore &restore); - int ObjectCaps_(void); + int ObjectCaps_(void) + { + return CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION; + } void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value); #endif // HOOK_GAMEDLL diff --git a/regamedll/dlls/enginecallback.h b/regamedll/dlls/enginecallback.h index d52d7609..e39eb920 100644 --- a/regamedll/dlls/enginecallback.h +++ b/regamedll/dlls/enginecallback.h @@ -82,6 +82,8 @@ extern enginefuncs_t g_engfuncs; #define CRC32_FINAL (*g_engfuncs.pfnCRC32_Final) #define RANDOM_LONG (*g_engfuncs.pfnRandomLong) #define RANDOM_FLOAT (*g_engfuncs.pfnRandomFloat) +#define ADD_SERVER_COMMAND (*g_engfuncs.pfnAddServerCommand) +#define SET_CLIENT_LISTENING (*g_engfuncs.pfnVoice_SetClientListening) #define GETPLAYERAUTHID (*g_engfuncs.pfnGetPlayerAuthId) #define IS_CAREER_MATCH (*g_engfuncs.pfnIsCareerMatch) diff --git a/regamedll/dlls/func_tank.cpp b/regamedll/dlls/func_tank.cpp index e5edb8dd..d7e41c0a 100644 --- a/regamedll/dlls/func_tank.cpp +++ b/regamedll/dlls/func_tank.cpp @@ -483,13 +483,7 @@ NOBODY void CFuncTankMortar::Fire_(const Vector &barrelEnd, const Vector &forwar LINK_ENTITY_TO_CLASS(func_tankcontrols, CFuncTankControls); /* <8d71d> ../cstrike/dlls/func_tank.cpp:995 */ -IMPLEMENT_SAVERESTORE(CFuncTankControls, CBaseEntity); - -/* <8d2ea> ../cstrike/dlls/func_tank.cpp:997 */ -NOBODY int CFuncTankControls::ObjectCaps_(void) -{ - return (CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION) | FCAP_IMPULSE_USE; -} +IMPLEMENT_SAVERESTORE(CFuncTankControls, CBaseEntity); /* <8d310> ../cstrike/dlls/func_tank.cpp:1003 */ NOBODY void CFuncTankControls::Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) @@ -631,11 +625,6 @@ int CFuncTankControls::Restore(CRestore &restore) return Restore_(restore); } -int CFuncTankControls::ObjectCaps(void) -{ - return ObjectCaps_(); -} - void CFuncTankControls::Think(void) { Think_(); diff --git a/regamedll/dlls/func_tank.h b/regamedll/dlls/func_tank.h index e2c211b5..0888ca22 100644 --- a/regamedll/dlls/func_tank.h +++ b/regamedll/dlls/func_tank.h @@ -260,7 +260,10 @@ public: NOBODY virtual void Spawn(void); NOBODY virtual int Save(CSave &save); NOBODY virtual int Restore(CRestore &restore); - NOBODY virtual int ObjectCaps(void); + NOBODY virtual int ObjectCaps(void) + { + return ObjectCaps_(); + } NOBODY virtual void Think(void); NOBODY virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value); @@ -269,7 +272,10 @@ public: void Spawn_(void); int Save_(CSave &save); int Restore_(CRestore &restore); - int ObjectCaps_(void); + int ObjectCaps_(void) + { + return (CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION) | FCAP_IMPULSE_USE; + } void Think_(void); void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value); diff --git a/regamedll/dlls/gamerules.cpp b/regamedll/dlls/gamerules.cpp index 10d8a21e..b090112a 100644 --- a/regamedll/dlls/gamerules.cpp +++ b/regamedll/dlls/gamerules.cpp @@ -85,6 +85,13 @@ void CGameRules::RefreshSkillData_(void) /* ../cstrike/dlls/gamerules.cpp:157 */ NOBODY CGameRules *InstallGameRules(void) { + SERVER_COMMAND("exec game.cfg\n"); + SERVER_EXECUTE(); + + if (!gpGlobals->deathmatch) + return new CHalfLifeTraining; + + return new CHalfLifeMultiplay; } #ifdef HOOK_GAMEDLL diff --git a/regamedll/dlls/gamerules.h b/regamedll/dlls/gamerules.h index 530ccc14..df566814 100644 --- a/regamedll/dlls/gamerules.h +++ b/regamedll/dlls/gamerules.h @@ -35,7 +35,9 @@ #include "game_shared/voice_gamemgr.h" #define MAX_RULE_BUFFER 1024 +#define MAX_VOTE_MAPS 100 #define ITEM_RESPAWN_TIME 30 +#define MAX_VIP_QUEUES 5 enum { @@ -487,7 +489,7 @@ public: int m_iTotalArmourCount; int m_iUnBalancedRounds; int m_iNumEscapeRounds; - int m_iMapVotes[100]; + int m_iMapVotes[ MAX_VOTE_MAPS ]; int m_iLastPick; int m_iMaxMapTime; int m_iMaxRounds; @@ -498,7 +500,7 @@ public: float m_flForceChaseCamValue; float m_flFadeToBlackValue; CBasePlayer *m_pVIP; - CBasePlayer *VIPQueue[5]; + CBasePlayer *VIPQueue[ MAX_VIP_QUEUES ]; protected: float m_flIntermissionEndTime; float m_flIntermissionStartTime; @@ -537,23 +539,75 @@ class CMapInfo: public CPointEntity public: virtual void Spawn(void); virtual void KeyValue(KeyValueData *pkvd); + +#ifdef HOOK_GAMEDLL + + void Spawn_(void); + void KeyValue_(KeyValueData *pkvd); + +#endif // HOOK_GAMEDLL + public: int m_iBuyingStatus; float m_flBombRadius; + };/* size: 160, cachelines: 3, members: 3 */ +/* <111732> ../cstrike/dlls/multiplay_gamerules.cpp:292 */ +class CCStrikeGameMgrHelper: public IVoiceGameMgrHelper +{ +public: + virtual bool CanPlayerHearPlayer(CBasePlayer *pListener, CBasePlayer *pSender) + { + return CanPlayerHearPlayer_(pListener, pSender); + } + +#ifdef HOOK_GAMEDLL + + bool CanPlayerHearPlayer_(CBasePlayer *pListener, CBasePlayer *pSender) + { + if (!pSender->IsPlayer() || pListener->m_iTeam != pSender->m_iTeam) + return false; + + BOOL bListenerAlive = pListener->IsAlive(); + BOOL bSenderAlive = pSender->IsAlive(); + + if (pListener->IsObserver()) + return true; + + if (bListenerAlive) + { + if (!bSenderAlive) + return false; + } + else + { + if (bSenderAlive) + return true; + } + + return (bListenerAlive == bSenderAlive); + } + +#endif // HOOK_GAMEDLL + +};/* size: 4, cachelines: 1, members: 1 */ + #ifdef HOOK_GAMEDLL #define g_pGameRules (*pg_pGameRules) +#define g_GameMgrHelper (*pg_GameMgrHelper) +#define sv_clienttrace (*psv_clienttrace) +#define g_pMPGameRules (*pg_pMPGameRules) #endif // HOOK_GAMEDLL extern CHalfLifeMultiplay *g_pGameRules; +extern CCStrikeGameMgrHelper g_GameMgrHelper; +extern cvar_t *sv_clienttrace; +extern CHalfLifeMultiplay *g_pMPGameRules; -NOBODY CGameRules *InstallGameRules(void); - - - +CGameRules *InstallGameRules(void); /* * Multiplay gamerules diff --git a/regamedll/dlls/ggrenade.cpp b/regamedll/dlls/ggrenade.cpp index 49024431..59ed9219 100644 --- a/regamedll/dlls/ggrenade.cpp +++ b/regamedll/dlls/ggrenade.cpp @@ -703,11 +703,6 @@ int CGrenade::Restore(CRestore &restore) Restore_(restore); } -//int CGrenade::ObjectCaps(void) -//{ -// return ObjectCaps_(); -//} - void CGrenade::Killed(entvars_t *pevAttacker, int iGib) { Killed_(pevAttacker, iGib); diff --git a/regamedll/dlls/h_ai.h b/regamedll/dlls/h_ai.h new file mode 100644 index 00000000..f55ecd9c --- /dev/null +++ b/regamedll/dlls/h_ai.h @@ -0,0 +1,39 @@ +/* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +* +*/ + +#ifndef H_AI_H +#define H_AI_H +#ifdef _WIN32 +#pragma once +#endif + +NOBODY BOOL FBoxVisible(entvars_t *pevLooker, entvars_t *pevTarget, Vector &vecTargetOrigin, float flSize); +NOBODY Vector VecCheckToss(entvars_t *pev, Vector &vecSpot1, Vector vecSpot2, float flGravityAdj); +NOBODY Vector VecCheckThrow(entvars_t *pev, Vector &vecSpot1, Vector vecSpot2, float flSpeed, float flGravityAdj); + +#endif // H_AI_H diff --git a/regamedll/dlls/h_battery.cpp b/regamedll/dlls/h_battery.cpp index bb85e57c..2d443451 100644 --- a/regamedll/dlls/h_battery.cpp +++ b/regamedll/dlls/h_battery.cpp @@ -29,55 +29,142 @@ LINK_ENTITY_TO_CLASS(func_recharge, CRecharge); /* ../cstrike/dlls/h_battery.cpp:66 */ void CRecharge::KeyValue_(KeyValueData *pkvd) { -// FStrEq(const char *sz1, -// const char *sz2); // 68 -// FStrEq(const char *sz1, -// const char *sz2); // 69 -// FStrEq(const char *sz1, -// const char *sz2); // 70 -// FStrEq(const char *sz1, -// const char *sz2); // 71 -// FStrEq(const char *sz1, -// const char *sz2); // 72 -// FStrEq(const char *sz1, -// const char *sz2); // 76 -// atoi(const char *__nptr); // 78 + if (FStrEq(pkvd->szKeyName, "style") + || FStrEq(pkvd->szKeyName, "height") + || FStrEq(pkvd->szKeyName, "value1") + || FStrEq(pkvd->szKeyName, "value2") + || FStrEq(pkvd->szKeyName, "value3")) + { + pkvd->fHandled = TRUE; + } + else if (FStrEq(pkvd->szKeyName, "dmdelay")) + { + m_iReactivate = atoi(pkvd->szValue); + pkvd->fHandled = TRUE; + } + else + CBaseToggle::KeyValue(pkvd); } /* ../cstrike/dlls/h_battery.cpp:85 */ void CRecharge::Spawn_(void) { + Precache(); + + pev->solid = SOLID_BSP; + pev->movetype = MOVETYPE_PUSH; + + UTIL_SetOrigin(pev, pev->origin); // set size and link into world + UTIL_SetSize(pev, pev->mins, pev->maxs); + SET_MODEL(ENT(pev), STRING(pev->model)); + + m_iJuice = (int)gSkillData.suitchargerCapacity; + pev->frame = 0; } /* ../cstrike/dlls/h_battery.cpp:99 */ void CRecharge::Precache_(void) { + PRECACHE_SOUND("items/suitcharge1.wav"); + PRECACHE_SOUND("items/suitchargeno1.wav"); + PRECACHE_SOUND("items/suitchargeok1.wav"); } /* ../cstrike/dlls/h_battery.cpp:107 */ void CRecharge::Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) { -// FClassnameIs(entvars_t *pev, -// const char *szClassname); // 110 -// Use(CRecharge *const this, -// class CBaseEntity *pActivator, -// class CBaseEntity *pCaller, -// USE_TYPE useType, -// float value); // 107 + // if it's not a player, ignore + if (!FClassnameIs(pActivator->pev, "player")) + return; + + // if there is no juice left, turn it off + if (m_iJuice <= 0) + { + pev->frame = 1; + Off(); + } + + // if the player doesn't have the suit, or there is no juice left, make the deny noise + if (m_iJuice <= 0 || !(pActivator->pev->weapons & (1 << WEAPON_SUIT))) + { + if (m_flSoundTime <= gpGlobals->time) + { + m_flSoundTime = gpGlobals->time + 0.62; + EMIT_SOUND(ENT(pev), CHAN_ITEM, "items/suitchargeno1.wav", 0.85, ATTN_NORM); + } + + return; + } + + pev->nextthink = pev->ltime + 0.25; + SetThink(&CRecharge::Off); + + // Time to recharge yet? + if (m_flNextCharge >= gpGlobals->time) + return; + + // Make sure that we have a caller + if (!pActivator) + return; + + m_hActivator = pActivator;//EHANDLE::CBaseEntity *operator= + + //only recharge the player + if (!m_hActivator->IsPlayer()) + return; + + // Play the on sound or the looping charging sound + if (!m_iOn) + { + m_iOn++; + EMIT_SOUND(ENT(pev), CHAN_ITEM, "items/suitchargeok1.wav", 0.85, ATTN_NORM); + m_flSoundTime = gpGlobals->time + 0.56; + } + + if (m_iOn == 1 && m_flSoundTime <= gpGlobals->time) + { + m_iOn++; + EMIT_SOUND(ENT(pev), CHAN_STATIC, "items/suitcharge1.wav", 0.85, ATTN_NORM); + } + + // charge the player + if (m_hActivator->pev->armorvalue < 100) + { + m_iJuice--; + m_hActivator->pev->armorvalue += 1; + + if (m_hActivator->pev->armorvalue > 100) + m_hActivator->pev->armorvalue = 100; + } + + // govern the rate of charge + m_flNextCharge = gpGlobals->time + 0.1; } /* ../cstrike/dlls/h_battery.cpp:178 */ void CRecharge::Recharge(void) { + m_iJuice = gSkillData.suitchargerCapacity; + pev->frame = 0; + SetThink(&CRecharge::SUB_DoNothing); } /* ../cstrike/dlls/h_battery.cpp:185 */ void CRecharge::Off(void) { -// STOP_SOUND(edict_t *entity, -// int channel, -// const char *sample); // 189 -// Off(CRecharge *const this); // 185 + // Stop looping sound. + if (m_iOn > 1) + STOP_SOUND(ENT(pev), CHAN_STATIC, "items/suitcharge1.wav"); + + m_iOn = 0; + + if (!m_iJuice && (m_iReactivate = g_pGameRules->FlHEVChargerRechargeTime()) > 0) + { + pev->nextthink = pev->ltime + m_iReactivate; + SetThink(&CRecharge::Recharge); + } + else + SetThink(&CRecharge::SUB_DoNothing); } #ifdef HOOK_GAMEDLL diff --git a/regamedll/dlls/h_battery.h b/regamedll/dlls/h_battery.h index 0c83047b..6c2ec266 100644 --- a/regamedll/dlls/h_battery.h +++ b/regamedll/dlls/h_battery.h @@ -35,16 +35,32 @@ class CRecharge: public CBaseToggle { public: - NOBODY virtual void Spawn(void); - NOBODY virtual void Precache(void); - NOBODY virtual void KeyValue(KeyValueData *pkvd); - NOBODY virtual int Save(CSave &save); - NOBODY virtual int Restore(CRestore &restore); - NOBODY virtual int ObjectCaps(void) + virtual void Spawn(void); + virtual void Precache(void); + virtual void KeyValue(KeyValueData *pkvd); + virtual int Save(CSave &save); + virtual int Restore(CRestore &restore); + virtual int ObjectCaps(void) + { + return ObjectCaps_(); + } + virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value); + +#ifdef HOOK_GAMEDLL + + void Spawn_(void); + void Precache_(void); + void KeyValue_(KeyValueData *pkvd); + int Save_(CSave &save); + int Restore_(CRestore &restore); + int ObjectCaps_(void) { return ((CBaseToggle::ObjectCaps()|FCAP_CONTINUOUS_USE) & ~FCAP_ACROSS_TRANSITION); } - NOBODY virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value); + void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value); + +#endif // HOOK_GAMEDLL + public: void EXPORT Off(void); void EXPORT Recharge(void); @@ -65,19 +81,6 @@ public: int m_iOn; float m_flSoundTime; -#ifdef HOOK_GAMEDLL - - NOBODY void Spawn_(void); - NOBODY void Precache_(void); - NOBODY void KeyValue_(KeyValueData *pkvd); - NOBODY int Save_(CSave &save); - NOBODY int Restore_(CRestore &restore); - NOBODY void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value); - -#endif // HOOK_GAMEDLL - };/* size: 332, cachelines: 6, members: 7 */ - - #endif // H_BATTERY_H diff --git a/regamedll/dlls/hostage/hostage.cpp b/regamedll/dlls/hostage/hostage.cpp index 03f395df..68879f50 100644 --- a/regamedll/dlls/hostage/hostage.cpp +++ b/regamedll/dlls/hostage/hostage.cpp @@ -16,6 +16,7 @@ #endif // HOOK_GAMEDLL CHostageManager *g_pHostages; +int g_iHostageNumber; /* <45c3fa> ../cstrike/dlls/hostage/hostage.cpp:47 */ LINK_ENTITY_TO_CLASS(hostage_entity, CHostage); diff --git a/regamedll/dlls/hostage/hostage.h b/regamedll/dlls/hostage/hostage.h index 9de640a7..093bb8aa 100644 --- a/regamedll/dlls/hostage/hostage.h +++ b/regamedll/dlls/hostage/hostage.h @@ -271,10 +271,12 @@ private: #ifdef HOOK_GAMEDLL #define g_pHostages (*pg_pHostages) +#define g_iHostageNumber (*pg_iHostageNumber) #endif // HOOK_GAMEDLL extern CHostageManager *g_pHostages; +extern int g_iHostageNumber; NOBODY void Hostage_RegisterCVars(void); NOBODY void InstallHostageManager(void); diff --git a/regamedll/dlls/lights.cpp b/regamedll/dlls/lights.cpp index 9f28b486..328e9f85 100644 --- a/regamedll/dlls/lights.cpp +++ b/regamedll/dlls/lights.cpp @@ -13,12 +13,6 @@ TYPEDESCRIPTION CLight::m_SaveData[] = #else -TYPEDESCRIPTION CLight::m_SaveData2[] = -{ - DEFINE_FIELD(CLight, m_iStyle, FIELD_INTEGER), - DEFINE_FIELD(CLight, m_iszPattern, FIELD_STRING), -}; - TYPEDESCRIPTION (*CLight::m_SaveData)[2]; #endif // HOOK_GAMEDLL @@ -153,9 +147,6 @@ void CEnvLight::KeyValue_(KeyValueData *pkvd) g = pow( g / 114.0, 0.6 ) * 264; b = pow( b / 114.0, 0.6 ) * 264; - //r = (int)(powf(r / 114.0, 0.6) * 264); - //g = (int)(powf(g / 114.0, 0.6) * 264); - //b = (int)(powf(b / 114.0, 0.6) * 264); pkvd->fHandled = TRUE; char szColor[64]; diff --git a/regamedll/dlls/lights.h b/regamedll/dlls/lights.h index f1c432aa..bf9ae611 100644 --- a/regamedll/dlls/lights.h +++ b/regamedll/dlls/lights.h @@ -55,7 +55,7 @@ public: void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value); #endif // HOOK_GAMEDLL - static TYPEDESCRIPTION m_SaveData2[2]; + #ifndef HOOK_GAMEDLL static TYPEDESCRIPTION m_SaveData[2]; #else // HOOK_GAMEDLL diff --git a/regamedll/dlls/maprules.cpp b/regamedll/dlls/maprules.cpp index 917b364f..3a903714 100644 --- a/regamedll/dlls/maprules.cpp +++ b/regamedll/dlls/maprules.cpp @@ -157,12 +157,6 @@ NOBODY void CGameText::Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_T // float value); // 321 } -/* ../cstrike/dlls/maprules.cpp:357 */ -NOBODY int CGameTeamMaster::ObjectCaps_(void) -{ - return CRulePointEntity:: ObjectCaps() | FCAP_MASTER; -} - /* ../cstrike/dlls/maprules.cpp:371 */ LINK_ENTITY_TO_CLASS(game_team_master, CGameTeamMaster); @@ -489,11 +483,6 @@ void CGameTeamMaster::KeyValue(KeyValueData *pkvd) KeyValue_(pkvd); } -int CGameTeamMaster::ObjectCaps(void) -{ - return ObjectCaps_(); -} - BOOL CGameTeamMaster::IsTriggered(CBaseEntity *pActivator) { return IsTriggered_(pActivator); diff --git a/regamedll/dlls/maprules.h b/regamedll/dlls/maprules.h index ca07e49d..7b68cf55 100644 --- a/regamedll/dlls/maprules.h +++ b/regamedll/dlls/maprules.h @@ -218,7 +218,10 @@ class CGameTeamMaster: public CRulePointEntity { public: NOBODY virtual void KeyValue(KeyValueData *pkvd); - NOBODY virtual int ObjectCaps(void); + NOBODY virtual int ObjectCaps(void) + { + return ObjectCaps_(); + } NOBODY virtual BOOL IsTriggered(CBaseEntity *pActivator); NOBODY virtual const char *TeamID(void); NOBODY virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value); @@ -226,7 +229,10 @@ public: #ifdef HOOK_GAMEDLL void KeyValue_(KeyValueData *pkvd); - int ObjectCaps_(void); + int ObjectCaps_(void) + { + return CRulePointEntity::ObjectCaps() | FCAP_MASTER; + } BOOL IsTriggered_(CBaseEntity *pActivator); const char *TeamID_(void); void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value); diff --git a/regamedll/dlls/monsters.h b/regamedll/dlls/monsters.h index 15d75bd9..55c3ef6c 100644 --- a/regamedll/dlls/monsters.h +++ b/regamedll/dlls/monsters.h @@ -116,7 +116,7 @@ class CGib: public CBaseEntity public: virtual int ObjectCaps(void) { - return (CBaseEntity :: ObjectCaps() & ~FCAP_ACROSS_TRANSITION)|FCAP_DONT_SAVE; + return (CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION)|FCAP_DONT_SAVE; } public: NOBODY void Spawn(const char *szGibModel); diff --git a/regamedll/dlls/multiplay_gamerules.cpp b/regamedll/dlls/multiplay_gamerules.cpp index 6e3f0c3c..cceac3d4 100644 --- a/regamedll/dlls/multiplay_gamerules.cpp +++ b/regamedll/dlls/multiplay_gamerules.cpp @@ -6,17 +6,17 @@ #ifndef HOOK_GAMEDLL //static char mp_com_token[1500]; -//cvar_t *sv_clienttrace; +cvar_t *sv_clienttrace; #else //char mp_com_token[1500]; -//cvar_t *sv_clienttrace; +cvar_t *sv_clienttrace; #endif // HOOK_GAMEDLL -//CCStrikeGameMgrHelper g_GameMgrHelper; -//CHalfLifeMultiplay *g_pMPGameRules; +CCStrikeGameMgrHelper g_GameMgrHelper; +CHalfLifeMultiplay *g_pMPGameRules; //void info_map_parameters(entvars_t *pev) @@ -128,7 +128,7 @@ BOOL CHalfLifeMultiplay::IsCareer(void) } /* <113e08> ../cstrike/dlls/multiplay_gamerules.cpp:263 */ -NOBODY void CMapInfo::KeyValue(KeyValueData *pkvd) +NOBODY void CMapInfo::KeyValue_(KeyValueData *pkvd) { // FStrEq(const char *sz1, // const char *sz2); // 265 @@ -140,7 +140,7 @@ NOBODY void CMapInfo::KeyValue(KeyValueData *pkvd) } /* <112879> ../cstrike/dlls/multiplay_gamerules.cpp:280 */ -NOBODY void CMapInfo::Spawn(void) +NOBODY void CMapInfo::Spawn_(void) { } @@ -150,35 +150,6 @@ NOBODY void CMapInfo::Spawn(void) // GetClassPtr(CMapInfo *a); // 288 //} -/* <111732> ../cstrike/dlls/multiplay_gamerules.cpp:292 */ -class CCStrikeGameMgrHelper: public IVoiceGameMgrHelper -{ -public: - virtual bool CanPlayerHearPlayer(CBasePlayer *pListener, CBasePlayer *pSender) - { - if (pListener->m_iTeam == pSender->m_iTeam) - { - BOOL bListenerAlive = pListener->IsAlive(); - BOOL bSenderAlive = pSender->IsAlive(); - - if (!pListener->pev->iuser1) - return true; - - if (!bListenerAlive) - { - if (bSenderAlive) - return true; - } - else - { - if (!bSenderAlive) - return false; - } - return (bListenerAlive == bSenderAlive); - } - } -};/* size: 4, cachelines: 1, members: 1 */ - /* <11474f> ../cstrike/dlls/multiplay_gamerules.cpp:331 */ NOBODY void Broadcast(const char *sentence) { @@ -222,23 +193,188 @@ NOBODY void ReadMultiplayCvars(CHalfLifeMultiplay *mp) /* <11492c> ../cstrike/dlls/multiplay_gamerules.cpp:479 */ NOBODY CHalfLifeMultiplay::CHalfLifeMultiplay(void) -{ -// { -// float flAutoKickIdle; // 570 -// bool installedCommands; // 633 -// RefreshSkillData(CHalfLifeMultiplay *const this); // 483 -// { -// int j; // 541 -// } -// { -// char *lservercfgfile; // 612 -// { -// char szCommand; // 616 -// } -// } -// { -// } -// } +{ + m_VoiceGameMgr.Init(&g_GameMgrHelper, gpGlobals->maxClients); + RefreshSkillData(); + + m_flIntermissionEndTime = 0; + m_flIntermissionStartTime = 0; + m_fTeamCount = 0; + m_iAccountCT = 0; + m_iAccountTerrorist = 0; + m_iHostagesRescued = 0; + m_iRoundWinStatus = 0; + m_iNumCTWins = 0; + m_iNumTerroristWins = 0; + m_pVIP = NULL; + m_iNumCT = 0; + m_iNumTerrorist = 0; + m_iNumSpawnableCT = 0; + m_iNumSpawnableTerrorist = 0; + m_bMapHasCameras = 2; + g_fGameOver = FALSE; + + m_iLoserBonus = 1400; + m_iNumConsecutiveCTLoses = 0; + m_iNumConsecutiveTerroristLoses = 0; + m_iC4Guy = 0; + m_bBombDefused = false; + m_bTargetBombed = false; + m_bFreezePeriod = TRUE; + m_bLevelInitialized = false; + m_tmNextPeriodicThink = 0; + m_bFirstConnected = 0; + m_bCompleteReset = false; + m_flRequiredEscapeRatio = 0.5; + m_iNumEscapers = 0; + m_bCTCantBuy = false; + m_bTCantBuy = false; + m_flBombRadius = 500.0; + m_iTotalGunCount = 0; + m_iTotalGrenadeCount = 0; + m_iTotalArmourCount = 0; + m_iConsecutiveVIP = 0; + m_iUnBalancedRounds = 0; + m_iNumEscapeRounds = 0; + m_bRoundTerminating = false; + + g_iHostageNumber = 0; + + m_bBombDropped = FALSE; + m_iMaxRounds = (int)CVAR_GET_FLOAT("mp_maxrounds"); + + if (m_iMaxRounds < 0) + { + m_iMaxRounds = 0; + CVAR_SET_FLOAT("mp_maxrounds", 0); + } + + m_iTotalRoundsPlayed = 0; + m_iMaxRoundsWon = (int)CVAR_GET_FLOAT("mp_winlimit"); + + if (m_iMaxRoundsWon < 0) + { + m_iMaxRoundsWon = 0; + CVAR_SET_FLOAT("mp_winlimit", 0); + } + + memset(m_iMapVotes, 0, sizeof(m_iMapVotes)); + + m_iLastPick = 1; + m_bMapHasEscapeZone = false; + m_iMapHasVIPSafetyZone = 0; + m_bMapHasBombZone = false; + m_bMapHasRescueZone = false; + m_iStoredSpectValue = (int)allow_spectators.value; + + for (int j = 0; j < MAX_VIP_QUEUES; j++) + VIPQueue[ j ] = NULL; + + CVAR_SET_FLOAT("cl_himodels", 0); + ReadMultiplayCvars(this); + + m_iIntroRoundTime += 2; + m_fMaxIdlePeriod = m_iRoundTime * 2; + + float flAutoKickIdle = CVAR_GET_FLOAT("mp_autokick_timeout"); + if (flAutoKickIdle > 0.0) + m_fMaxIdlePeriod = flAutoKickIdle; + + m_bInCareerGame = false; + m_iRoundTimeSecs = m_iIntroRoundTime; + + if (IS_DEDICATED_SERVER()) + { + CVAR_SET_FLOAT("pausable", 0); + } + else + { + if (IsCareer()) + { + CVAR_SET_FLOAT("pausable", 1); + CVAR_SET_FLOAT("sv_aim", 0); + CVAR_SET_FLOAT("sv_maxspeed", 322); + CVAR_SET_FLOAT("sv_cheats", 0); + CVAR_SET_FLOAT("mp_windifference", 2); + + m_bInCareerGame = true; + UTIL_LogPrintf("Career Start\n"); + } + else + { + CVAR_SET_FLOAT("pausable", 0); + + const char *lservercfgfile = CVAR_GET_STRING("lservercfgfile"); + + if (lservercfgfile && *lservercfgfile) + { + char szCommand[256]; + ALERT(at_console, "Executing listen server config file\n"); + Q_sprintf(szCommand, "exec %s\n", lservercfgfile); + SERVER_COMMAND(szCommand); + } + } + } + + m_fRoundCount = 0; + m_fIntroRoundCount = 0; + + InstallBotControl(); + InstallHostageManager(); + + m_bSkipSpawn = m_bInCareerGame; + + static bool installedCommands = false; + + if (!installedCommands) + { + if (UTIL_IsGame("czero")) + { +#if defined(HOOK_GAMEDLL) && !defined(REGAMEDLL_UNIT_TESTS) + ADD_SERVER_COMMAND("career_continue", (xcommand_t)GetOriginalFuncAddrOrDefault("_Z13SV_Continue_fv", (void *)SV_Continue_f)); + ADD_SERVER_COMMAND("career_matchlimit", (xcommand_t)GetOriginalFuncAddrOrDefault("_Z21SV_CareerMatchLimit_fv", (void *)SV_CareerMatchLimit_f)); + ADD_SERVER_COMMAND("career_add_task", (xcommand_t)GetOriginalFuncAddrOrDefault("_Z18SV_CareerAddTask_fv", (void *)SV_CareerAddTask_f)); + ADD_SERVER_COMMAND("career_endround", (xcommand_t)GetOriginalFuncAddrOrDefault("_Z20SV_Career_EndRound_fv", (void *)SV_Career_EndRound_f)); + ADD_SERVER_COMMAND("career_restart", (xcommand_t)GetOriginalFuncAddrOrDefault("_Z19SV_Career_Restart_fv", (void *)SV_Career_Restart_f)); + ADD_SERVER_COMMAND("tutor_toggle", (xcommand_t)GetOriginalFuncAddrOrDefault("_Z17SV_Tutor_Toggle_fv", (void *)SV_Tutor_Toggle_f)); +#else + ADD_SERVER_COMMAND("career_continue", SV_Continue_f); + ADD_SERVER_COMMAND("career_matchlimit", SV_CareerMatchLimit_f); + ADD_SERVER_COMMAND("career_add_task", SV_CareerAddTask_f); + ADD_SERVER_COMMAND("career_endround", SV_Career_EndRound_f); + ADD_SERVER_COMMAND("career_restart", SV_Career_Restart_f); + ADD_SERVER_COMMAND("tutor_toggle", SV_Tutor_Toggle_f); +#endif // HOOK_GAMEDLL + } + +#if defined(HOOK_GAMEDLL) && !defined(REGAMEDLL_UNIT_TESTS) + ADD_SERVER_COMMAND("perf_test", (xcommand_t)GetOriginalFuncAddrOrDefault("_Z15loopPerformancev", (void *)loopPerformance)); + ADD_SERVER_COMMAND("print_ent", (xcommand_t)GetOriginalFuncAddrOrDefault("_Z13printEntitiesv", (void *)printEntities)); +#else + ADD_SERVER_COMMAND("perf_test", loopPerformance); + ADD_SERVER_COMMAND("print_ent", printEntities); +#endif // HOOK_GAMEDLL + + installedCommands = true; + } + + m_fCareerRoundMenuTime = 0; + m_fCareerMatchMenuTime = 0; + m_iCareerMatchWins = 0; + + m_iRoundWinDifference = (int)CVAR_GET_FLOAT("mp_windifference"); + CCareerTaskManager::Create(); + + if (m_iRoundWinDifference < 1) + { + m_iRoundWinDifference = 1; + CVAR_SET_FLOAT("mp_windifference", 1); + } + + sv_clienttrace = CVAR_GET_POINTER("sv_clienttrace"); + InstallTutor(CVAR_GET_POINTER("tutor_enable") != NULL); + + g_pMPGameRules = this; } /* <113b92> ../cstrike/dlls/multiplay_gamerules.cpp:678 */ @@ -1488,6 +1624,16 @@ NOBODY void CHalfLifeMultiplay::ClientUserInfoChanged_(CBasePlayer *pPlayer, cha #ifdef HOOK_GAMEDLL +void CMapInfo::Spawn(void) +{ + Spawn_(); +} + +void CMapInfo::KeyValue(KeyValueData *pkvd) +{ + KeyValue_(pkvd); +} + void CHalfLifeMultiplay::RefreshSkillData(void) { RefreshSkillData_(); diff --git a/regamedll/dlls/plats.cpp b/regamedll/dlls/plats.cpp index 3d37cb0c..a16a16dd 100644 --- a/regamedll/dlls/plats.cpp +++ b/regamedll/dlls/plats.cpp @@ -70,18 +70,6 @@ TYPEDESCRIPTION (*CGunTarget::m_SaveData)[1]; #endif // HOOK_GAMEDLL -/* <12d629> ../cstrike/dlls/plats.cpp:36 */ -NOBODY int CBasePlatTrain::ObjectCaps_(void) -{ - return CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION; -} - -/* <12d64f> ../cstrike/dlls/plats.cpp:41 */ -NOBODY BOOL CBasePlatTrain::IsTogglePlat_(void) -{ - return (pev->spawnflags & SF_PLAT_TOGGLE) != 0; -} - /* <12e11a> ../cstrike/dlls/plats.cpp:59 */ IMPLEMENT_SAVERESTORE(CBasePlatTrain, CBaseToggle); @@ -105,6 +93,8 @@ NOBODY void CBasePlatTrain::KeyValue_(KeyValueData *pkvd) // atof(const char *__nptr); // 90 } +#define noiseMoving noise +#define noiseArrived noise1 /* <12d675> ../cstrike/dlls/plats.cpp:105 */ NOBODY void CBasePlatTrain::Precache_(void) @@ -132,6 +122,9 @@ NOBODY void CFuncPlat::CallHitBottom(void) /* <130666> ../cstrike/dlls/plats.cpp:244 */ LINK_ENTITY_TO_CLASS(func_plat, CFuncPlat); +#define noiseMovement noise +#define noiseStopMoving noise1 + /* <130730> ../cstrike/dlls/plats.cpp:275 */ NOBODY void CFuncPlat::Setup(void) { @@ -697,12 +690,6 @@ NOBODY void CFuncTrackTrain::Precache_(void) /* <1314d9> ../cstrike/dlls/plats.cpp:1595 */ LINK_ENTITY_TO_CLASS(func_traincontrols, CFuncTrainControls); -/* <12d7cc> ../cstrike/dlls/plats.cpp:1591 */ -NOBODY int CFuncTrainControls::ObjectCaps_(void) -{ - return CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION; -} - /* <12fb10> ../cstrike/dlls/plats.cpp:1598 */ NOBODY void CFuncTrainControls::Find(void) { @@ -922,32 +909,6 @@ NOBODY void CFuncTrackAuto::Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, // float value); // 2083 } -/* <12d873> ../cstrike/dlls/plats.cpp:2146 */ -NOBODY int CGunTarget::BloodColor_(void) -{ - return DONT_BLEED; -} - -/* <12d899> ../cstrike/dlls/plats.cpp:2147 */ -NOBODY int CGunTarget::Classify_(void) -{ - return CLASS_MACHINE; -} - -/* <12d8bf> ../cstrike/dlls/plats.cpp:2150 */ -NOBODY Vector CGunTarget::BodyTarget_(const Vector &posSrc) -{ - return pev->origin; -// Vector(Vector *const this, -// const Vector &v); // 2150 -} - -/* <12d921> ../cstrike/dlls/plats.cpp:2152 */ -NOBODY int CGunTarget::ObjectCaps_(void) -{ - return CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION; -} - /* <131c90> ../cstrike/dlls/plats.cpp:2163 */ LINK_ENTITY_TO_CLASS(func_guntarget, CGunTarget); @@ -1051,16 +1012,6 @@ int CBasePlatTrain::Restore(CRestore &restore) return Restore_(restore); } -int CBasePlatTrain::ObjectCaps(void) -{ - return ObjectCaps_(); -} - -BOOL CBasePlatTrain::IsTogglePlat(void) -{ - return IsTogglePlat_(); -} - void CFuncPlat::Spawn(void) { Spawn_(); @@ -1096,11 +1047,6 @@ void CFuncPlat::HitBottom(void) HitBottom_(); } -int CPlatTrigger::ObjectCaps(void) -{ - return ObjectCaps_(); -} - void CPlatTrigger::Touch(CBaseEntity *pOther) { Touch_(pOther); @@ -1140,11 +1086,6 @@ void CFuncPlatRot::HitBottom(void) { HitBottom_(); } - - - - - void CFuncTrain::Spawn(void) { @@ -1226,11 +1167,6 @@ int CFuncTrackTrain::Restore(CRestore &restore) return Restore_(restore); } -int CFuncTrackTrain::ObjectCaps(void) -{ - return ObjectCaps_(); -} - void CFuncTrackTrain::OverrideReset(void) { OverrideReset_(); @@ -1256,17 +1192,6 @@ void CFuncTrainControls::Spawn(void) Spawn_(); } -int CFuncTrainControls::ObjectCaps(void) -{ - return ObjectCaps_(); -} - - - - - - - void CFuncTrackChange::Spawn(void) { Spawn_(); @@ -1347,14 +1272,6 @@ void CFuncTrackAuto::UpdateAutoTargets(int toggleState) UpdateAutoTargets_(toggleState); } - - - - - - - - void CGunTarget::Spawn(void) { Spawn_(); @@ -1370,39 +1287,19 @@ int CGunTarget::Restore(CRestore &restore) return Restore_(restore); } -int CGunTarget::ObjectCaps(void) -{ - return ObjectCaps_(); -} - void CGunTarget::Activate(void) { Activate_(); } -int CGunTarget::Classify(void) -{ - return Classify_(); -} - int CGunTarget::TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType) { return TakeDamage_(pevInflictor, pevAttacker, flDamage, bitsDamageType); } -int CGunTarget::BloodColor(void) -{ - return BloodColor_(); -} - void CGunTarget::Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) { Use_(pActivator, pCaller, useType, value); } -Vector CGunTarget::BodyTarget(const Vector &posSrc) -{ - return BodyTarget_(posSrc); -} - #endif // HOOK_GAMEDLL diff --git a/regamedll/dlls/plats.h b/regamedll/dlls/plats.h index 23dc4813..3149243e 100644 --- a/regamedll/dlls/plats.h +++ b/regamedll/dlls/plats.h @@ -34,14 +34,6 @@ #define SF_PLAT_TOGGLE 0x0001 -// CBasePlatTrain -#define noiseMoving noise -#define noiseArrived noise1 - -// CFuncPlat -#define noiseMovement noise -#define noiseStopMoving noise1 - #define TRAIN_STARTPITCH 60 #define TRAIN_MAXPITCH 200 #define TRAIN_MAXSPEED 1000 @@ -62,10 +54,16 @@ public: NOBODY virtual void KeyValue(KeyValueData *pkvd); NOBODY virtual int Save(CSave &save); NOBODY virtual int Restore(CRestore &restore); - NOBODY virtual int ObjectCaps(void); + NOBODY virtual int ObjectCaps(void) + { + return ObjectCaps_(); + } // This is done to fix spawn flag collisions between this class and a derived class - NOBODY virtual BOOL IsTogglePlat(void); + NOBODY virtual BOOL IsTogglePlat(void) + { + return IsTogglePlat_(); + } #ifdef HOOK_GAMEDLL @@ -73,8 +71,14 @@ public: void KeyValue_(KeyValueData *pkvd); int Save_(CSave &save); int Restore_(CRestore &restore); - int ObjectCaps_(void); - BOOL IsTogglePlat_(void); + int ObjectCaps_(void) + { + return CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION; + } + BOOL IsTogglePlat_(void) + { + return (pev->spawnflags & SF_PLAT_TOGGLE) != 0; + } #endif // HOOK_GAMEDLL @@ -131,7 +135,10 @@ public: class CPlatTrigger: public CBaseEntity { public: - NOBODY virtual int ObjectCaps(void); + NOBODY virtual int ObjectCaps(void) + { + return ObjectCaps_(); + } NOBODY virtual void Touch(CBaseEntity *pOther); #ifdef HOOK_GAMEDLL @@ -249,12 +256,18 @@ class CFuncTrainControls: public CBaseEntity { public: NOBODY virtual void Spawn(void); - NOBODY virtual int ObjectCaps(void); + NOBODY virtual int ObjectCaps(void) + { + return ObjectCaps_(); + } #ifdef HOOK_GAMEDLL void Spawn_(void); - int ObjectCaps_(void); + int ObjectCaps_(void) + { + return CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION; + } #endif // HOOK_GAMEDLL @@ -370,26 +383,50 @@ public: NOBODY virtual void Spawn(void); NOBODY virtual int Save(CSave &save); NOBODY virtual int Restore(CRestore &restore); - NOBODY virtual int ObjectCaps(void); + NOBODY virtual int ObjectCaps(void) + { + return ObjectCaps_(); + } NOBODY virtual void Activate(void); - NOBODY virtual int Classify(void); + NOBODY virtual int Classify(void) + { + return Classify_(); + } NOBODY virtual int TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType); - NOBODY virtual int BloodColor(void); + NOBODY virtual int BloodColor(void) + { + return BloodColor_(); + } NOBODY virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value); - NOBODY virtual Vector BodyTarget(const Vector &posSrc); + NOBODY virtual Vector BodyTarget(const Vector &posSrc) + { + return BodyTarget_(posSrc); + } #ifdef HOOK_GAMEDLL void Spawn_(void); int Save_(CSave &save); int Restore_(CRestore &restore); - int ObjectCaps_(void); + int ObjectCaps_(void) + { + return CBaseEntity::ObjectCaps() & ~FCAP_ACROSS_TRANSITION; + } void Activate_(void); - int Classify_(void); + int Classify_(void) + { + return CLASS_MACHINE; + } int TakeDamage_(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType); - int BloodColor_(void); + int BloodColor_(void) + { + return DONT_BLEED; + } void Use_(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value); - Vector BodyTarget_(const Vector &posSrc); + Vector BodyTarget_(const Vector &posSrc) + { + return pev->origin; + } #endif // HOOK_GAMEDLL @@ -412,22 +449,8 @@ private: };/* size: 408, cachelines: 7, members: 3 */ - - - - - - - - - - NOBODY void PlatSpawnInsideTrigger(entvars_t *pevPlatform); NOBODY float Fix(float angle); NOBODY void FixupAngles(Vector &v); - - - - #endif // PLATS_H diff --git a/regamedll/dlls/player.cpp b/regamedll/dlls/player.cpp index 6e70e313..dcaab6a5 100644 --- a/regamedll/dlls/player.cpp +++ b/regamedll/dlls/player.cpp @@ -770,7 +770,7 @@ int TrainSpeed(int iSpeed, int iMax) } /* <153c8e> ../cstrike/dlls/player.cpp:902 */ -void CBasePlayer::DeathSound(void) +NOXREF void CBasePlayer::DeathSound(void) { switch (RANDOM_LONG(1, 4)) { @@ -823,7 +823,7 @@ void CBasePlayer::TraceAttack_(entvars_t *pevAttacker, float flDamage, Vector ve if (CVAR_GET_FLOAT("mp_friendlyfire") == 0 && m_iTeam == pAttacker->m_iTeam) bShouldBleed = false; - if (!pev->takedamage) + if (pev->takedamage == DAMAGE_NO) return; m_LastHitGroup = ptr->iHitgroup; @@ -3202,14 +3202,8 @@ NOBODY void FixPlayerCrouchStuck(edict_t *pPlayer) /* <153ef5> ../cstrike/dlls/player.cpp:4580 */ NOBODY void CBasePlayer::Duck_(void) { - //TODO: check it, check last of update. -#ifdef _WIN32 if (pev->button & IN_DUCK) SetAnimation(PLAYER_WALK); -#else - if (pev->button & IN_DUCK && pev->modelindex && (m_flFlinchTime < gpGlobals->time || pev->health <= 0.0f)) - SetAnimation(PLAYER_WALK); -#endif } /* <150f8f> ../cstrike/dlls/player.cpp:4591 */ @@ -3761,11 +3755,6 @@ NOBODY const char *CBasePlayer::TeamID_(void) { } -/* <151094> ../cstrike/dlls/player.cpp:7007 */ -NOBODY int CSprayCan::ObjectCaps_(void) -{ -} - /* <1573aa> ../cstrike/dlls/player.cpp:7010 */ NOBODY void CSprayCan::Spawn(entvars_t *pevOwner) { @@ -5699,11 +5688,6 @@ int CBasePlayer::Restore(CRestore &restore) return Restore_(restore); } -int CBasePlayer::ObjectCaps(void) -{ - return ObjectCaps_(); -} - int CBasePlayer::Classify(void) { return Classify_(); @@ -5919,11 +5903,6 @@ void CSprayCan::Think(void) Think_(); } -int CSprayCan::ObjectCaps(void) -{ - return ObjectCaps_(); -} - void CInfoIntermission::Spawn(void) { Spawn_(); diff --git a/regamedll/dlls/player.h b/regamedll/dlls/player.h index d1551698..dae43e73 100644 --- a/regamedll/dlls/player.h +++ b/regamedll/dlls/player.h @@ -329,12 +329,18 @@ class CSprayCan: public CBaseEntity { public: NOBODY virtual void Think(void); - NOBODY virtual int ObjectCaps(void); + NOBODY virtual int ObjectCaps(void) + { + return ObjectCaps_(); + } #ifdef HOOK_GAMEDLL void Think_(void); - int ObjectCaps_(void); + int ObjectCaps_(void) + { + return FCAP_DONT_SAVE; + } #endif // HOOK_GAMEDLL @@ -362,10 +368,10 @@ public: NOBODY virtual void Precache(void); NOBODY virtual int Save(CSave &save); NOBODY virtual int Restore(CRestore &restore); - virtual int ObjectCaps(void); - //{ - // return (CBaseMonster::ObjectCaps() & ~FCAP_ACROSS_TRANSITION); - //} + NOBODY virtual int ObjectCaps(void) + { + return ObjectCaps_(); + } virtual int Classify(void); virtual void TraceAttack(entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType); NOBODY virtual int TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType); @@ -562,7 +568,7 @@ public: void FlashlightTurnOn(void); NOBODY void FlashlightTurnOff(void); NOBODY void UpdatePlayerSound(void); - void DeathSound(void); + NOXREF void DeathSound(void); void SetAnimation(PLAYER_ANIM playerAnim); NOBODY void SetWeaponAnimType(const char *szExtention); NOBODY void CheatImpulseCommands(int iImpulse); diff --git a/regamedll/dlls/trains.h b/regamedll/dlls/trains.h index 6578f8d4..fc62686d 100644 --- a/regamedll/dlls/trains.h +++ b/regamedll/dlls/trains.h @@ -111,7 +111,10 @@ public: NOBODY virtual void KeyValue(KeyValueData* pkvd); NOBODY virtual int Save(CSave &save); NOBODY virtual int Restore(CRestore &restore); - NOBODY virtual int ObjectCaps(void); + NOBODY virtual int ObjectCaps(void) + { + return ObjectCaps_(); + } NOBODY virtual void OverrideReset(void); NOBODY virtual BOOL OnControls(entvars_t *pev); NOBODY virtual void Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value); diff --git a/regamedll/dlls/weapons.h b/regamedll/dlls/weapons.h index 6370e5b2..922baeab 100644 --- a/regamedll/dlls/weapons.h +++ b/regamedll/dlls/weapons.h @@ -140,7 +140,7 @@ public: int Restore_(CRestore &restore); int ObjectCaps_(void) { - return m_bIsC4 != false ? FCAP_CONTINUOUS_USE : 0; + return m_bIsC4 ? FCAP_CONTINUOUS_USE : 0; } void Killed_(entvars_t *pevAttacker, int iGib); int BloodColor_(void) diff --git a/regamedll/engine/cmd.h b/regamedll/engine/cmd.h new file mode 100644 index 00000000..6d132708 --- /dev/null +++ b/regamedll/engine/cmd.h @@ -0,0 +1,60 @@ +/* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +* +*/ + +#ifndef CMD_H +#define CMD_H +#ifdef _WIN32 +#pragma once +#endif + +#define FCMD_HUD_COMMAND BIT(0) +#define FCMD_GAME_COMMAND BIT(1) +#define FCMD_WRAPPER_COMMAND BIT(2) + +/* <8f1> ../engine/cmd.h:65 */ +typedef void (*xcommand_t)(void); + +/* <904> ../engine/cmd.h:71 */ +typedef struct cmd_function_s +{ + struct cmd_function_s *next; + char *name; + xcommand_t function; + int flags; + +} cmd_function_t; + +/* <95a> ../engine/cmd.h:80 */ +typedef enum cmd_source_s +{ + src_client = 0, // came in over a net connection as a clc_stringcmd. host_client will be valid during this state. + src_command = 1, // from the command buffer. + +} cmd_source_t; + +#endif // CMD_H diff --git a/regamedll/engine/maintypes.h b/regamedll/engine/maintypes.h index 32f38451..bf0d6f7d 100644 --- a/regamedll/engine/maintypes.h +++ b/regamedll/engine/maintypes.h @@ -52,6 +52,7 @@ typedef unsigned int string_t; // from engine's pr_comp.h; typedef int EOFFSET; +typedef int BOOL; #ifndef __cplusplus typedef enum { false, true } qboolean; diff --git a/regamedll/game_shared/bot/bot_profile.h b/regamedll/game_shared/bot/bot_profile.h index 68cc0895..c349c3a9 100644 --- a/regamedll/game_shared/bot/bot_profile.h +++ b/regamedll/game_shared/bot/bot_profile.h @@ -252,6 +252,10 @@ public: int FindVoiceBankIndex(const char *filename); protected: + +#if defined(_WIN32) && defined(HOOK_GAMEDLL) + int unknown_padding1; +#endif // HOOK_GAMEDLL BotProfileList m_profileList; VoiceBankList m_voiceBanks; diff --git a/regamedll/game_shared/bot/nav_area.cpp b/regamedll/game_shared/bot/nav_area.cpp index 943787b8..eba4df43 100644 --- a/regamedll/game_shared/bot/nav_area.cpp +++ b/regamedll/game_shared/bot/nav_area.cpp @@ -49,8 +49,7 @@ HidingSpotList TheHidingSpotList; NavAreaList TheNavAreaList; CNavAreaGrid TheNavAreaGrid; CNavArea *(*CNavArea::m_openList); - -//bool CNavArea::m_isReset = false; +bool (*CNavArea::m_isReset); //float lastDrawTimestamp; NavAreaList goodSizedAreaList; @@ -210,49 +209,46 @@ NOBODY CNavArea::CNavArea(CNavNode *nwNode, class CNavNode *neNode, class CNavNo /* <4d58d7> ../game_shared/bot/nav_area.cpp:295 */ NOBODY CNavArea::~CNavArea(void) { -// { -// iterator iter; // 302 -// { -// class CNavArea *area; // 305 -// OnDestroyNotify(CNavArea *const this, -// class CNavArea *dead); // 310 -// } -// operator++(_List_iterator *const this); // 303 -// { -// int i; // 314 -// { /* ~CNavArea+0x18e */ -// iterator liter; // 316 -// { -// class CNavLadder *ladder; // 318 -// OnDestroyNotify(CNavLadder *const this, -// class CNavArea *dead); // 320 -// } -// operator++(_List_iterator *const this); // 316 -// } -// } -// RemoveNavArea(CNavAreaGrid *const this, -// class CNavArea *area); // 325 -// } -// ~list(list> *const this, -// int const __in_chrg); // 295 -// ~list(list> *const this, -// int const __in_chrg); // 295 -// ~list(list> *const this, -// int const __in_chrg); // 295 -// ~list(list> *const this, -// int const __in_chrg); // 295 -// ~list(list> *const this, -// int const __in_chrg); // 295 -// ~list(list> *const this, -// int const __in_chrg); // 295 -// ~list(list> *const this, -// int const __in_chrg); // 295 -// ~list(list> *const this, -// int const __in_chrg); // 295 -// ~list(list> *const this, -// int const __in_chrg); // 295 -// ~list(list> *const this, -// int const __in_chrg); // 295 +#ifndef HOOK_GAMEDLL + if (m_isReset) +#else + if (*m_isReset) +#endif // HOOK_GAMEDLL + { + //m_overlapList.~list(); + //m_ladder->~list(); + //m_connect->~list(); + //m_spotEncounterList.~list(); + //m_hidingSpotList.~list(); + + return; + } + + // tell the other areas we are going away + NavAreaList::iterator iter; + for (iter = TheNavAreaList.begin(); iter != TheNavAreaList.end(); ++iter) + { + CNavArea *area = *iter; + + if (area == this) + continue; + + area->OnDestroyNotify(this); + } + + // unhook from ladders + for (int i = 0; i < NUM_LADDER_DIRECTIONS; ++i) + { + for (NavLadderList::iterator liter = m_ladder[i].begin(); liter != m_ladder[i].end(); ++liter) + { + CNavLadder *ladder = *liter; + + ladder->OnDestroyNotify(this); + } + } + + // remove the area from the grid + TheNavAreaGrid.RemoveNavArea(this); } /* <4c67f0> ../game_shared/bot/nav_area.cpp:333 */ @@ -1510,6 +1506,16 @@ NOBODY void CNavArea::UpdateOnOpenList(void) /* <4cbdbc> ../game_shared/bot/nav_area.cpp:2713 */ NOBODY void CNavArea::RemoveFromOpenList(void) { + if (m_prevOpen) + m_prevOpen->m_nextOpen = m_nextOpen; + else + (*m_openList) = m_nextOpen; + + if (m_nextOpen) + m_nextOpen->m_prevOpen = m_prevOpen; + + // zero is an invalid marker + m_openMarker = 0; } /* <4cbddf> ../game_shared/bot/nav_area.cpp:2731 */ diff --git a/regamedll/game_shared/bot/nav_area.h b/regamedll/game_shared/bot/nav_area.h index 00641b8a..254702e3 100644 --- a/regamedll/game_shared/bot/nav_area.h +++ b/regamedll/game_shared/bot/nav_area.h @@ -524,12 +524,13 @@ private: friend class CCSBotManager; void Initialize(void); - static bool m_isReset; #ifndef HOOK_GAMEDLL + static bool m_isReset; static unsigned int m_nextID; #else public: + static bool (*m_isReset); static unsigned int (*m_nextID); private: #endif // HOOK_GAMEDLL @@ -549,7 +550,16 @@ private: float m_danger[MAX_AREA_TEAMS]; float m_dangerTimestamp[MAX_AREA_TEAMS]; +#if defined(_WIN32) && defined(HOOK_GAMEDLL) + int unknown_padding1; +#endif // HOOK_GAMEDLL + HidingSpotList m_hidingSpotList; + +#if defined(_WIN32) && defined(HOOK_GAMEDLL) + int unknown_padding2; +#endif // HOOK_GAMEDLL + SpotEncounterList m_spotEncounterList; enum { MAX_APPROACH_AREAS = 16 }; @@ -579,14 +589,38 @@ public: private: #endif // HOOK_GAMEDLL - CNavArea *m_nextOpen, *m_prevOpen; + CNavArea *m_nextOpen; + CNavArea *m_prevOpen; unsigned int m_openMarker; - NavConnectList m_connect[NUM_DIRECTIONS]; - NavLadderList m_ladder[NUM_LADDER_DIRECTIONS]; +#ifdef _WIN32 + int unknown_padding3; +#endif // _WIN32 + + NavConnectList m_connect[ NUM_DIRECTIONS ]; + +#ifdef _WIN32 + int unknown_padding4; + int unknown_padding5; + + int unknown_padding6; + int unknown_padding7; +#endif // _WIN32 + + NavLadderList m_ladder[ NUM_LADDER_DIRECTIONS ]; + +#ifdef _WIN32 + int unknown_padding8; +#endif // _WIN32 + + CNavNode *m_node[ NUM_CORNERS ]; + +#ifdef _WIN32 + int unknown_padding9; +#endif // _WIN32 - CNavNode *m_node[NUM_CORNERS]; NavAreaList m_overlapList; + CNavArea *m_prevHash; CNavArea *m_nextHash; @@ -594,11 +628,13 @@ private: extern NavAreaList TheNavAreaList; +/* <4c1534> ../game_shared/bot/nav_area.h:417 */ inline bool CNavArea::IsDegenerate(void) const { return (m_extent.lo.x >= m_extent.hi.x || m_extent.lo.y >= m_extent.hi.y); } +/* <568e1d> ../game_shared/bot/nav_area.h:422 */ inline CNavArea *CNavArea::GetAdjacentArea(NavDirType dir, int i) const { NavConnectList::const_iterator iter; @@ -611,6 +647,7 @@ inline CNavArea *CNavArea::GetAdjacentArea(NavDirType dir, int i) const return NULL; } +/* <5a01dc> ../game_shared/bot/nav_area.h:435 */ inline bool CNavArea::IsOpen(void) const { #ifndef HOOK_GAMEDLL @@ -620,6 +657,7 @@ inline bool CNavArea::IsOpen(void) const #endif // HOOK_GAMEDLL } +/* <5a0a62> ../game_shared/bot/nav_area.h:440 */ inline bool CNavArea::IsOpenListEmpty(void) { #ifndef HOOK_GAMEDLL @@ -629,6 +667,7 @@ inline bool CNavArea::IsOpenListEmpty(void) #endif // HOOK_GAMEDLL } +/* <5a1483> ../game_shared/bot/nav_area.h:445 */ inline CNavArea *CNavArea::PopOpenList(void) { #ifndef HOOK_GAMEDLL @@ -649,6 +688,7 @@ inline CNavArea *CNavArea::PopOpenList(void) return NULL; } +/* <5a0a2a> ../game_shared/bot/nav_area.h:460 */ inline bool CNavArea::IsClosed(void) const { if (IsMarked() && !IsOpen()) @@ -657,16 +697,19 @@ inline bool CNavArea::IsClosed(void) const return false; } +/* <5a0a46> ../game_shared/bot/nav_area.h:468 */ inline void CNavArea::AddToClosedList(void) { Mark(); } +/* <5a01f8> ../game_shared/bot/nav_area.h:473 */ inline void CNavArea::RemoveFromClosedList(void) { } +/* <4cf943> ../game_shared/bot/nav_area.cpp:4947 */ class CNavAreaGrid { public: diff --git a/regamedll/game_shared/voice_common.h b/regamedll/game_shared/voice_common.h index 808a6e46..57591c67 100644 --- a/regamedll/game_shared/voice_common.h +++ b/regamedll/game_shared/voice_common.h @@ -38,6 +38,6 @@ #define VOICE_MAX_PLAYERS 32 #define VOICE_MAX_PLAYERS_DW ((VOICE_MAX_PLAYERS / 32) + !!(VOICE_MAX_PLAYERS & 31)) -typedef CBitVec CPlayerBitVec; +typedef CBitVec< VOICE_MAX_PLAYERS > CPlayerBitVec; #endif // VOICE_COMMON_H diff --git a/regamedll/game_shared/voice_gamemgr.cpp b/regamedll/game_shared/voice_gamemgr.cpp index c59912cc..e68de0f4 100644 --- a/regamedll/game_shared/voice_gamemgr.cpp +++ b/regamedll/game_shared/voice_gamemgr.cpp @@ -5,137 +5,220 @@ */ #ifndef HOOK_GAMEDLL -//cvar_t voice_serverdebug = { "voice_serverdebug", "0" }; -//cvar_t sv_alltalk = { "sv_alltalk", "0", FCVAR_SERVER }; +cvar_t voice_serverdebug = { "voice_serverdebug", "0" }; +cvar_t sv_alltalk = { "sv_alltalk", "0", FCVAR_SERVER }; #else -//cvar_t voice_serverdebug; -//cvar_t sv_alltalk; +cvar_t voice_serverdebug; +cvar_t sv_alltalk; #endif // HOOK_GAMEDLL -//CPlayerBitVec g_PlayerModEnable; -//CBitVec<32> g_BanMasks[32]; -//CBitVec<32> g_SentGameRulesMasks[32]; -//CBitVec<32> g_SentBanMasks[32]; -//CPlayerBitVec g_bWantModEnable; +CPlayerBitVec g_PlayerModEnable; +CBitVec< VOICE_MAX_PLAYERS > g_BanMasks[ VOICE_MAX_PLAYERS ]; +CBitVec< VOICE_MAX_PLAYERS > g_SentGameRulesMasks[ VOICE_MAX_PLAYERS ]; +CBitVec< VOICE_MAX_PLAYERS > g_SentBanMasks[ VOICE_MAX_PLAYERS ]; +CPlayerBitVec g_bWantModEnable; /* <2d3c38> ../game_shared/voice_gamemgr.cpp:68 */ -NOBODY void VoiceServerDebug(const char *pFmt, ...) +void VoiceServerDebug(const char *pFmt, ...) { -// { -// char msg; // 70 -// va_list marker; // 71 -// } + char msg[4096]; + va_list marker; + + if (!voice_serverdebug.value) + return; + + va_start(marker, pFmt); + Q_vsnprintf(msg, sizeof(msg), pFmt, marker); + va_end(marker); + + ALERT(at_console, "%s", msg); } /* <2d3cd1> ../game_shared/voice_gamemgr.cpp:89 */ CVoiceGameMgr::CVoiceGameMgr(void) { + m_UpdateInterval = 0; + m_nMaxPlayers = 0; } /* <2d3c98> ../game_shared/voice_gamemgr.cpp:96 */ CVoiceGameMgr::~CVoiceGameMgr(void) { -// ~CVoiceGameMgr(CVoiceGameMgr::~CVoiceGameMgr(); // 98 + ; } /* <2d3d0b> ../game_shared/voice_gamemgr.cpp:101 */ -NOBODY bool CVoiceGameMgr::Init(IVoiceGameMgrHelper *pHelper, int maxClients) +bool CVoiceGameMgr::Init(IVoiceGameMgrHelper *pHelper, int maxClients) { + m_pHelper = pHelper; + m_nMaxPlayers = (maxClients > VOICE_MAX_PLAYERS) ? VOICE_MAX_PLAYERS : maxClients; + + PRECACHE_MODEL("sprites/voiceicon.spr"); + + m_msgPlayerVoiceMask = REG_USER_MSG("VoiceMask", VOICE_MAX_PLAYERS_DW * 4 * 2); + m_msgRequestState = REG_USER_MSG("ReqState", 0); + + // register voice_serverdebug if it hasn't been registered already + if (!CVAR_GET_POINTER("voice_serverdebug")) + CVAR_REGISTER(&voice_serverdebug); + + if (!CVAR_GET_POINTER("sv_alltalk")) + CVAR_REGISTER(&sv_alltalk); + + return true; } /* <2d3d4e> ../game_shared/voice_gamemgr.cpp:123 */ -NOBODY void CVoiceGameMgr::SetHelper(IVoiceGameMgrHelper *pHelper) +NOXREF void CVoiceGameMgr::SetHelper(IVoiceGameMgrHelper *pHelper) { + m_pHelper = pHelper; } /* <2d4486> ../game_shared/voice_gamemgr.cpp:129 */ -NOBODY void CVoiceGameMgr::Update(double frametime) +void CVoiceGameMgr::Update(double frametime) { + // Only update periodically. + m_UpdateInterval += frametime; + + if(m_UpdateInterval >= UPDATE_INTERVAL) + UpdateMasks(); } /* <2d3d82> ../game_shared/voice_gamemgr.cpp:140 */ -NOBODY void CVoiceGameMgr::ClientConnected(edict_t *pEdict) +void CVoiceGameMgr::ClientConnected(edict_t *pEdict) { -// { -// int index; // 142 -// ENTINDEX(edict_t *pEdict); // 142 -// operator=(CBitVecAccessor *const this, -// int val); // 145 -// Init(CBitVec<32> *const this, -// int val); // 146 -// Init(CBitVec<32> *const this, -// int val); // 147 -// } + int index = ENTINDEX(pEdict) - 1; + + // Clear out everything we use for deltas on this guy. + g_bWantModEnable[index] = true; + g_SentGameRulesMasks[index].Init(0); + g_SentBanMasks[index].Init(0); } +// Called to determine if the Receiver has muted (blocked) the Sender +// Returns true if the receiver has blocked the sender + /* <2d3ec5> ../game_shared/voice_gamemgr.cpp:152 */ -NOBODY bool CVoiceGameMgr::PlayerHasBlockedPlayer(CBasePlayer *pReceiver, CBasePlayer *pSender) +bool CVoiceGameMgr::PlayerHasBlockedPlayer(CBasePlayer *pReceiver, CBasePlayer *pSender) { -// { -// int iReceiverIndex; // 154 -// int iSenderIndex; // 154 -// entindex(CBaseEntity *const this); // 159 -// entindex(CBaseEntity *const this); // 160 -// operator uint32(CBitVecAccessor *const this); // 165 -// } + int iReceiverIndex, iSenderIndex; + + if (!pReceiver || !pSender) + return false; + + iReceiverIndex = pReceiver->entindex() - 1; + iSenderIndex = pSender->entindex() - 1; + + if (iReceiverIndex < 0 || iReceiverIndex >= m_nMaxPlayers || iSenderIndex < 0 || iSenderIndex >= m_nMaxPlayers) + return false; + + return (g_BanMasks[ iReceiverIndex ][ iSenderIndex ] != 0); } -NOBODY bool CVoiceGameMgr::ClientCommand(CBasePlayer *pPlayer, const char *cmd) +/* <2d401a> ../game_shared/voice_gamemgr.cpp:169 */ +bool CVoiceGameMgr::ClientCommand(CBasePlayer *pPlayer, const char *cmd) { + int playerClientIndex = pPlayer->entindex() - 1; + if (playerClientIndex < 0 || playerClientIndex >= m_nMaxPlayers) + { + VoiceServerDebug("CVoiceGameMgr::ClientCommand: cmd %s from invalid client (%d)\n", cmd, playerClientIndex); + return true; + } + + bool bBan = Q_stricmp(cmd, "vban") == 0; + if (bBan && CMD_ARGC() >= 2) + { + for (int i = 1; i < CMD_ARGC(); i++) + { + uint32 mask = 0; + sscanf(CMD_ARGV(i), "%x", &mask); + + if (i <= VOICE_MAX_PLAYERS_DW) + { + VoiceServerDebug("CVoiceGameMgr::ClientCommand: vban (0x%x) from %d\n", mask, playerClientIndex); + g_BanMasks[ playerClientIndex ].SetDWord(i - 1, mask); + } + else + VoiceServerDebug("CVoiceGameMgr::ClientCommand: invalid index (%d)\n", i); + } + + return true; + } + else if (Q_stricmp(cmd, "VModEnable") == 0 && CMD_ARGC() >= 2) + { + VoiceServerDebug("CVoiceGameMgr::ClientCommand: VModEnable (%d)\n", !!atoi(CMD_ARGV(1))); + + g_PlayerModEnable[ playerClientIndex ] = !!atoi(CMD_ARGV(1)); + g_bWantModEnable[ playerClientIndex ] = false; + + return true; + } + + return false; } /* <2d416b> ../game_shared/voice_gamemgr.cpp:215 */ -NOBODY void CVoiceGameMgr::UpdateMasks(void) +void CVoiceGameMgr::UpdateMasks(void) { -// { -// bool bAllTalk; // 219 -// { -// int iClient; // 221 -// { -// class CBaseEntity *pEnt; // 223 -// class CBasePlayer *pPlayer; // 234 -// CPlayerBitVec gameRulesMask; // 236 -// operator uint32(CBitVecAccessor *const this); // 228 -// MESSAGE_BEGIN(int msg_dest, -// int msg_type, -// const float *pOrigin, -// entvars_t *ent); // 230 -// CBitVec(CBitVec<32> *const this); // 236 -// { -// int iOtherClient; // 240 -// { -// class CBaseEntity *pEnt; // 242 -// operator=(CBitVecAccessor *const this, -// int val); // 245 -// } -// } -// operator!=(CBitVec<32> *const this, -// const class CBitVec<32> &other); // 251 -// operator!=(CBitVec<32> *const this, -// const class CBitVec<32> &other); // 252 -// { -// int dw; // 258 -// operator=(CBitVec<32> *const this, -// const class CBitVec<32> &other); // 254 -// operator=(CBitVec<32> *const this, -// const class CBitVec<32> &other); // 255 -// MESSAGE_BEGIN(int msg_dest, -// int msg_type, -// const float *pOrigin, -// entvars_t *ent); // 257 -// } -// { -// int iOtherClient; // 268 -// { -// bool bCanHear; // 270 -// operator uint32(CBitVecAccessor *const this); // 270 -// operator uint32(CBitVecAccessor *const this); // 270 -// } -// } -// } -// } -// } + m_UpdateInterval = 0; + + bool bAllTalk = !!(sv_alltalk.value); + + for (int iClient = 0; iClient < m_nMaxPlayers; iClient++) + { + CBaseEntity *pEnt = UTIL_PlayerByIndex(iClient + 1); + + if (!pEnt || !pEnt->IsPlayer()) + continue; + + CBasePlayer *pPlayer = (CBasePlayer *)pEnt; + CPlayerBitVec gameRulesMask; + + // Request the state of their "VModEnable" cvar. + if (g_bWantModEnable[ iClient ]) + { + MESSAGE_BEGIN(MSG_ONE, m_msgRequestState, NULL, pEnt->pev); + MESSAGE_END(); + } + + if (g_PlayerModEnable[ iClient ]) + { + // Build a mask of who they can hear based on the game rules. + for (int iOtherClient = 0; iOtherClient < m_nMaxPlayers; iOtherClient++) + { + CBaseEntity *pEnt = UTIL_PlayerByIndex(iOtherClient + 1); + + if (pEnt && (bAllTalk || m_pHelper->CanPlayerHearPlayer(pPlayer, (CBasePlayer *)pEnt))) + { + gameRulesMask[ iOtherClient ] = true; + } + } + } + + // If this is different from what the client has, send an update. + if (gameRulesMask != g_SentGameRulesMasks[ iClient ] || g_BanMasks[ iClient ] != g_SentBanMasks[ iClient ]) + { + g_SentGameRulesMasks[ iClient ] = gameRulesMask; + g_SentBanMasks[ iClient ] = g_BanMasks[ iClient ]; + + MESSAGE_BEGIN(MSG_ONE, m_msgPlayerVoiceMask, NULL, pPlayer->pev); + int dw; + for (dw = 0; dw < VOICE_MAX_PLAYERS_DW; dw++) + { + WRITE_LONG(gameRulesMask.GetDWord(dw)); + WRITE_LONG(g_BanMasks[ iClient ].GetDWord(dw)); + } + MESSAGE_END(); + } + + // Tell the engine. + for (int iOtherClient = 0; iOtherClient < m_nMaxPlayers; iOtherClient++) + { + bool bCanHear = gameRulesMask[ iOtherClient ] && !g_BanMasks[ iClient ][ iOtherClient ]; + SET_CLIENT_LISTENING(iClient + 1, iOtherClient + 1, bCanHear); + } + } } diff --git a/regamedll/game_shared/voice_gamemgr.h b/regamedll/game_shared/voice_gamemgr.h index 484324cc..7baf9924 100644 --- a/regamedll/game_shared/voice_gamemgr.h +++ b/regamedll/game_shared/voice_gamemgr.h @@ -32,14 +32,39 @@ #pragma once #endif +#define UPDATE_INTERVAL 0.3 + #include "voice_common.h" +#ifdef HOOK_GAMEDLL + +#define voice_serverdebug (*pvoice_serverdebug) +#define sv_alltalk (*psv_alltalk) + +#define g_PlayerModEnable (*pg_PlayerModEnable) +#define g_BanMasks (*pg_BanMasks) +#define g_SentGameRulesMasks (*pg_SentGameRulesMasks) +#define g_SentBanMasks (*pg_SentBanMasks) +#define g_bWantModEnable (*pg_bWantModEnable) + +#endif // HOOK_GAMEDLL + +extern cvar_t voice_serverdebug; +extern cvar_t sv_alltalk; + +extern CPlayerBitVec g_PlayerModEnable; +extern CBitVec< VOICE_MAX_PLAYERS > g_BanMasks[ VOICE_MAX_PLAYERS ]; +extern CBitVec< VOICE_MAX_PLAYERS > g_SentGameRulesMasks[ VOICE_MAX_PLAYERS ]; +extern CBitVec< VOICE_MAX_PLAYERS > g_SentBanMasks[ VOICE_MAX_PLAYERS ]; +extern CPlayerBitVec g_bWantModEnable; + /* <111716> ../game_shared/voice_gamemgr.h:23 */ class IVoiceGameMgrHelper { public: virtual ~IVoiceGameMgrHelper() {} NOBODY virtual bool CanPlayerHearPlayer(CBasePlayer *pListener, CBasePlayer *pTalker) = 0; + };/* size: 4, cachelines: 1, members: 1 */ class CVoiceGameMgr @@ -47,20 +72,30 @@ class CVoiceGameMgr public: CVoiceGameMgr(void); virtual ~CVoiceGameMgr(void); - NOBODY bool Init(IVoiceGameMgrHelper *pHelper, int maxClients); - NOBODY void SetHelper(IVoiceGameMgrHelper *pHelper); - NOBODY void Update(double frametime); - NOBODY void ClientConnected(edict_t *pEdict); - NOBODY bool ClientCommand(CBasePlayer *pPlayer, const char *cmd); - NOBODY bool PlayerHasBlockedPlayer(CBasePlayer *pReceiver, CBasePlayer *pSender); + + bool Init(IVoiceGameMgrHelper *pHelper, int maxClients); + NOXREF void SetHelper(IVoiceGameMgrHelper *pHelper); + void Update(double frametime); + void ClientConnected(edict_t *pEdict); + bool ClientCommand(CBasePlayer *pPlayer, const char *cmd); + bool PlayerHasBlockedPlayer(CBasePlayer *pReceiver, CBasePlayer *pSender); + +#ifdef HOOK_GAMEDLL +public: +#else private: - NOBODY void UpdateMasks(void); +#endif // HOOK_GAMEDLL + + void UpdateMasks(void); private: int m_msgPlayerVoiceMask; int m_msgRequestState; IVoiceGameMgrHelper *m_pHelper; int m_nMaxPlayers; double m_UpdateInterval; + };/* size: 28, cachelines: 1, members: 6 */ +void VoiceServerDebug(const char *pFmt, ...); + #endif // VOICE_GAMEMGR_H diff --git a/regamedll/hookers/6153_hooker.cpp b/regamedll/hookers/6153_hooker.cpp index c1bf23a0..cfa7fb82 100644 --- a/regamedll/hookers/6153_hooker.cpp +++ b/regamedll/hookers/6153_hooker.cpp @@ -99,12 +99,14 @@ extern const size_t g_BaseOffset = NULL; //#define Nav_Region //#define Hostage_Region //#define GameShr_BotProfile_Region +//#define VoiceManager_Region //#define Data_References_Region //#define Function_References_Region FunctionHook g_FunctionHooks[] = { + #ifndef Mem_Region #ifdef _WIN32 @@ -1775,6 +1777,7 @@ FunctionHook g_FunctionHooks[] = #endif // MapRules_Region #ifndef HintMessage_Region + //CHintMessage //{ 0x0, "_ZNK12CHintMessage11GetDurationEv", mfunc_ptr_cast(&CHintMessage::GetDuration) }, // NOXREF //{ 0x0, "_ZN12CHintMessage4SendER11CBaseEntity", mfunc_ptr_cast(&CHintMessage::Send) }, // NOXREF @@ -2405,7 +2408,7 @@ FunctionHook g_FunctionHooks[] = #ifndef GameRules_Region - //{ 0x0, "_Z16InstallGameRulesv", (size_t)&InstallGameRules }, + //{ 0x01D80C90, "_Z16InstallGameRulesv", (size_t)&InstallGameRules }, { 0x01D80C00, "_ZN10CGameRules16RefreshSkillDataEv", mfunc_ptr_cast(&CGameRules::RefreshSkillData_) }, //{ 0x0, "_ZN10CGameRules18GetPlayerSpawnSpotEP11CBasePlayer", mfunc_ptr_cast(&CGameRules::GetPlayerSpawnSpot_) }, //{ 0x0, "_ZN10CGameRules17CanHavePlayerItemEP11CBasePlayerP15CBasePlayerItem", mfunc_ptr_cast(&CGameRules::CanHavePlayerItem_) }, @@ -2464,6 +2467,7 @@ FunctionHook g_FunctionHooks[] = //CHalfLifeMultiplay //virtual func + //{ 0x01D8B8A0, "_ZN18CHalfLifeMultiplayC2Ev", mfunc_ptr_cast(&CHalfLifeMultiplay::CHalfLifeMultiplay) }, // constuctor { 0x01D8BF00, "_ZN18CHalfLifeMultiplay16RefreshSkillDataEv", mfunc_ptr_cast(&CHalfLifeMultiplay::RefreshSkillData_) }, //{ 0x0, "_ZN18CHalfLifeMultiplay5ThinkEv", mfunc_ptr_cast(&CHalfLifeMultiplay::Think_) }, //{ 0x0, "_ZN18CHalfLifeMultiplay16IsAllowedToSpawnEP11CBaseEntity", mfunc_ptr_cast(&CHalfLifeMultiplay::IsAllowedToSpawn_) }, @@ -2559,7 +2563,7 @@ FunctionHook g_FunctionHooks[] = //{ 0x0, "_Z9BroadcastPKc", (size_t)&Broadcast }, { 0x01D8B780, "_Z7GetTeami", (size_t)&GetTeam }, //{ 0x0, "_Z15EndRoundMessagePKci", (size_t)&EndRoundMessage }, - //{ 0x0, "_ZL18ReadMultiplayCvarsP18CHalfLifeMultiplay", (size_t)&ReadMultiplayCvars }, + //{ 0x01D8BD80, "_ZL18ReadMultiplayCvarsP18CHalfLifeMultiplay", (size_t)&ReadMultiplayCvars }, //{ 0x0, "_Z15DestroyMapCycleP10mapcycle_s", (size_t)&DestroyMapCycle }, //{ 0x0, "_Z15MP_COM_GetTokenv", (size_t)&MP_COM_GetToken }, //{ 0x0, "_Z12MP_COM_ParsePc", (size_t)&MP_COM_Parse }, @@ -2568,6 +2572,13 @@ FunctionHook g_FunctionHooks[] = //{ 0x0, "_Z12CountPlayersv", (size_t)&CountPlayers }, //{ 0x0, "_Z20ExtractCommandStringPcS_", (size_t)&ExtractCommandString }, //{ 0x0, "_Z11GetMapCountv", (size_t)&GetMapCount }, +//CCStrikeGameMgrHelper + //virtual func + { 0x01D8B630, "_ZN21CCStrikeGameMgrHelper19CanPlayerHearPlayerEP11CBasePlayerS1_", mfunc_ptr_cast(&CCStrikeGameMgrHelper::CanPlayerHearPlayer_) }, +//CMapInfo + //virtual func + //{ 0x0, "_ZN21CCStrikeGameMgrHelper19CanPlayerHearPlayerEP11CBasePlayerS1_", mfunc_ptr_cast(&CMapInfo::Spawn_) }, + //{ 0x0, "_ZN21CCStrikeGameMgrHelper19CanPlayerHearPlayerEP11CBasePlayerS1_", mfunc_ptr_cast(&CMapInfo::KeyValue_) }, #endif // Multiplay_GameRules_Region @@ -2626,7 +2637,7 @@ FunctionHook g_FunctionHooks[] = //{ 0x0, "_ZNK11CCareerTask10IsValidForEP11CBasePlayer ", mfunc_ptr_cast(&CCareerTask::IsValidFor) }, //{ 0x0, "_ZN11CCareerTask23SendPartialNotificationEv", mfunc_ptr_cast(&CCareerTask::SendPartialNotification) }, //CCareerTaskManager - //{ 0x0, "_ZN18CCareerTaskManager6CreateEv", mfunc_ptr_cast(&CCareerTaskManager::Create) }, + //{ 0x01DDD750, "_ZN18CCareerTaskManager6CreateEv", mfunc_ptr_cast(&CCareerTaskManager::Create) }, //{ 0x01DDD800, "_ZN18CCareerTaskManager5ResetEb", mfunc_ptr_cast(&CCareerTaskManager::Reset) }, //{ 0x0, "_ZN18CCareerTaskManager7AddTaskEPKcS1_ibbb", mfunc_ptr_cast(&CCareerTaskManager::AddTask) }, //{ 0x0, "_ZN18CCareerTaskManager11HandleEventE13GameEventTypeP11CBasePlayerS2_", mfunc_ptr_cast(&CCareerTaskManager::HandleEvent) }, @@ -3895,7 +3906,6 @@ FunctionHook g_FunctionHooks[] = //{ 0x0, "_ZN9IdleState7OnEnterEP6CCSBot", mfunc_ptr_cast(&IdleState::OnEnter) }, //{ 0x0, "_ZN9IdleState8OnUpdateEP6CCSBot", mfunc_ptr_cast(&IdleState::OnUpdate) }, //{ 0x0, "_ZNK9IdleState7GetNameEv", mfunc_ptr_cast(&IdleState::GetName) }, - //{ 0x0, "___XAXAXAX____", mfunc_ptr_cast(&IdleState::OnExit) }, //HuntState //virtual func //{ 0x0, "_ZN9HuntState7OnEnterEP6CCSBot", mfunc_ptr_cast(&HuntState::OnEnter) }, @@ -3991,13 +4001,17 @@ FunctionHook g_FunctionHooks[] = //non-virtual func //{ 0x0, "_ZN14UseEntityState9SetEntityEP11CBaseEntity", mfunc_ptr_cast(&UseEntityState::SetEntity) }, // NOXREF +#ifdef _WIN32 + //{ 0x01D12F90, "_ZN8PathCostclEP8CNavAreaS1_PK10CNavLadder", mfunc_ptr_cast(&FollowTargetCollector::operator()) }, +#endif // _WIN32 + #endif // CS_BotState_Region #ifndef Bot_Region //ActiveGrenade //virtual func - //{ 0x0, "__XAX__", mfunc_ptr_cast(&ActiveGrenade::ActiveGrenade) }, + //{ 0x0, "_ZN13ActiveGrenadeC2EiP8CGrenade", mfunc_ptr_cast(&ActiveGrenade::ActiveGrenade) }, { 0x01D34080, "_ZN13ActiveGrenade12OnEntityGoneEv", mfunc_ptr_cast(&ActiveGrenade::OnEntityGone) }, { 0x01D340A0, "_ZNK13ActiveGrenade7IsValidEv", mfunc_ptr_cast(&ActiveGrenade::IsValid) }, //{ 0x0, "_ZNK13ActiveGrenade8IsEntityEP8CGrenade", mfunc_ptr_cast(&ActiveGrenade::IsEntity) }, // NOXREF @@ -4265,20 +4279,24 @@ FunctionHook g_FunctionHooks[] = #ifndef H_Region +//AI + //{ 0x01D848B0, "_Z11FBoxVisibleP9entvars_sS0_R6Vectorf", (size_t)&FBoxVisible }, // NOXREF + //{ 0x01D84A10, "_Z12VecCheckTossP9entvars_sRK6VectorS1_f", (size_t)&VecCheckToss }, // NOXREF + //{ 0x01D84EB0, "_Z13VecCheckThrowP9entvars_sRK6VectorS1_ff", (size_t)&VecCheckThrow }, // NOXREF + //CRecharge //virtual func - //{ 0x0, "_ZN9CRecharge5SpawnEv", mfunc_ptr_cast(&CRecharge::Spawn_) }, - //{ 0x0, "_ZN9CRecharge8PrecacheEv", mfunc_ptr_cast(&CRecharge::Precache_) }, - //{ 0x01D85130, "_ZN9CRecharge8KeyValueEP14KeyValueData_s", mfunc_ptr_cast(&CRecharge::KeyValue_) }, - //{ 0x0, "_ZN9CRecharge4SaveER5CSave", mfunc_ptr_cast(&CRecharge::Save_) }, - //{ 0x0, "_ZN9CRecharge7RestoreER8CRestore", mfunc_ptr_cast(&CRecharge::Restore_) }, - //{ 0x0, "_ZN9CRecharge10ObjectCapsEv", mfunc_ptr_cast(&CRecharge::ObjectCaps_) }, - //{ 0x01D852A0, "_ZN9CRecharge3UseEP11CBaseEntityS1_8USE_TYPEf", mfunc_ptr_cast(&CRecharge::Use_) }, + { 0x01D851E0, "_ZN9CRecharge5SpawnEv", mfunc_ptr_cast(&CRecharge::Spawn_) }, + { 0x01D85270, "_ZN9CRecharge8PrecacheEv", mfunc_ptr_cast(&CRecharge::Precache_) }, + { 0x01D85130, "_ZN9CRecharge8KeyValueEP14KeyValueData_s", mfunc_ptr_cast(&CRecharge::KeyValue_) }, + { 0x01D85070, "_ZN9CRecharge4SaveER5CSave", mfunc_ptr_cast(&CRecharge::Save_) }, + { 0x01D850A0, "_ZN9CRecharge7RestoreER8CRestore", mfunc_ptr_cast(&CRecharge::Restore_) }, + { 0x01D85120, "_ZN9CRecharge10ObjectCapsEv", mfunc_ptr_cast(&CRecharge::ObjectCaps_) }, + { 0x01D852A0, "_ZN9CRecharge3UseEP11CBaseEntityS1_8USE_TYPEf", mfunc_ptr_cast(&CRecharge::Use_) }, //non-virtual func //{ 0x01D850D0, "func_recharge", (size_t)&func_recharge }, - //{ 0x0, "_ZN9CRecharge3OffEv", mfunc_ptr_cast(&CRecharge::Off) }, - //{ 0x0, "_ZN9CRecharge3OffEv", mfunc_ptr_cast(&CRecharge::Off) }, - //{ 0x0, "_ZN9CRecharge8RechargeEv", mfunc_ptr_cast(&CRecharge::Recharge) }, + { 0x01D855A0, "_ZN9CRecharge3OffEv", mfunc_ptr_cast(&CRecharge::Off) }, + { 0x01D85570, "_ZN9CRecharge8RechargeEv", mfunc_ptr_cast(&CRecharge::Recharge) }, //CCycler //virtual func //{ 0x0, "_ZN7CCycler5SpawnEv", mfunc_ptr_cast(&CCycler::Spawn_) }, @@ -4582,12 +4600,30 @@ FunctionHook g_FunctionHooks[] = //{ 0x0, "_ZN17BotProfileManager13GetCustomSkinEi", mfunc_ptr_cast(&BotProfileManager::GetCustomSkin) }, { 0x01D35DD0, "_ZN17BotProfileManager22GetCustomSkinModelnameEi", mfunc_ptr_cast(&BotProfileManager::GetCustomSkinModelname) }, { 0x01D35DB0, "_ZN17BotProfileManager18GetCustomSkinFnameEi", mfunc_ptr_cast(&BotProfileManager::GetCustomSkinFname) }, - //{ 0x0, "_ZN17BotProfileManager18GetCustomSkinIndexEPKcS1_", mfunc_ptr_cast(&BotProfileManager::GetCustomSkinIndex) }, + //{ 0x01D35DF0, "_ZN17BotProfileManager18GetCustomSkinIndexEPKcS1_", mfunc_ptr_cast(&BotProfileManager::GetCustomSkinIndex) }, // NOXREF //{ 0x0, "_ZNK17BotProfileManager13GetVoiceBanksEv", mfunc_ptr_cast(&BotProfileManager::GetVoiceBanks) }, // NOXREF //{ 0x0, "_ZN17BotProfileManager18FindVoiceBankIndexEPKc", mfunc_ptr_cast(&BotProfileManager::FindVoiceBankIndex) }, #endif // GameShr_BotProfile_Region +#ifndef VoiceManager_Region + +//CVoiceGameMgr + //virtual func + //{ 0x0, "_ZN13CVoiceGameMgrD0Ev", mfunc_ptr_cast(&CVoiceGameMgr::~CVoiceGameMgr) }, + //non-virtual func + //{ 0x01DCC6F0, "_ZN13CVoiceGameMgrC2Ev", mfunc_ptr_cast(&CVoiceGameMgr::CVoiceGameMgr) }, + { 0x01DCC740, "_ZN13CVoiceGameMgr4InitEP19IVoiceGameMgrHelperi", mfunc_ptr_cast(&CVoiceGameMgr::Init) }, + //{ 0x01DCC7D0, "_ZN13CVoiceGameMgr9SetHelperEP19IVoiceGameMgrHelper", mfunc_ptr_cast(&CVoiceGameMgr::SetHelper) }, // NOXREF + { 0x01DCC7E0, "_ZN13CVoiceGameMgr6UpdateEd", mfunc_ptr_cast(&CVoiceGameMgr::Update) }, + { 0x01DCC800, "_ZN13CVoiceGameMgr15ClientConnectedEP7edict_s", mfunc_ptr_cast(&CVoiceGameMgr::ClientConnected) }, + { 0x01DCC910, "_ZN13CVoiceGameMgr13ClientCommandEP11CBasePlayerPKc", mfunc_ptr_cast(&CVoiceGameMgr::ClientCommand) }, + { 0x01DCC890, "_ZN13CVoiceGameMgr22PlayerHasBlockedPlayerEP11CBasePlayerS1_", mfunc_ptr_cast(&CVoiceGameMgr::PlayerHasBlockedPlayer) }, + { 0x01DCCB10, "_ZN13CVoiceGameMgr11UpdateMasksEv", mfunc_ptr_cast(&CVoiceGameMgr::UpdateMasks) }, + { 0x01DCCAB0, "_Z14GetBspFilenamePKc", (size_t)&VoiceServerDebug }, + +#endif // VoiceManager_Region + #ifndef Nav_Region //Nav_File @@ -4726,16 +4762,16 @@ FunctionHook g_FunctionHooks[] = //{ 0x0, "", mfunc_ptr_cast(&CNavArea::CNavArea) }, //{ 0x0, "", mfunc_ptr_cast(&CNavArea::CNavArea) }, //{ 0x0, "", mfunc_ptr_cast(&CNavArea::CNavArea) }, - //{ 0x0, "", mfunc_ptr_cast(&CNavArea::~CNavArea) }, + //{ 0x01D386A0, "", mfunc_ptr_cast(&CNavArea::~CNavArea) }, //{ 0x0, "_ZN8CNavArea10InitializeEv", mfunc_ptr_cast(&CNavArea::Initialize) }, - //{ 0x0, "_ZN8CNavArea15OnDestroyNotifyEPS_", mfunc_ptr_cast(&CNavArea::OnDestroyNotify) }, + //{ 0x01D388A0, "_ZN8CNavArea15OnDestroyNotifyEPS_", mfunc_ptr_cast(&CNavArea::OnDestroyNotify) }, // NOXREF //{ 0x0, "_ZN8CNavArea9ConnectToEPS_10NavDirType", mfunc_ptr_cast(&CNavArea::ConnectTo) }, - //{ 0x0, "_ZN8CNavArea10DisconnectEPS_", mfunc_ptr_cast(&CNavArea::Disconnect) }, + //{ 0x01D389D0, "_ZN8CNavArea10DisconnectEPS_", mfunc_ptr_cast(&CNavArea::Disconnect) }, // NOXREF //{ 0x0, "_ZN8CNavArea11FinishMergeEPS_", mfunc_ptr_cast(&CNavArea::FinishMerge) }, //{ 0x0, "_ZN8CNavArea24MergeAdjacentConnectionsEPS_", mfunc_ptr_cast(&CNavArea::MergeAdjacentConnections) }, - //{ 0x0, "_ZN8CNavArea11AssignNodesEPS_", mfunc_ptr_cast(&CNavArea::AssignNodes) }, + //{ 0x01D38D70, "_ZN8CNavArea11AssignNodesEPS_", mfunc_ptr_cast(&CNavArea::AssignNodes) }, //{ 0x0, "_ZN8CNavArea9SplitEditEbfPPS_S1_", mfunc_ptr_cast(&CNavArea::SplitEdit) }, - //{ 0x0, "_ZNK8CNavArea11IsConnectedEPKS_10NavDirType", mfunc_ptr_cast(&CNavArea::IsConnected) }, + //{ 0x01D390F0, "_ZNK8CNavArea11IsConnectedEPKS_10NavDirType", mfunc_ptr_cast(&CNavArea::IsConnected) }, //{ 0x0, "_ZN8CNavArea19ComputeHeightChangeEPKS_", mfunc_ptr_cast(&CNavArea::ComputeHeightChange) }, //{ 0x0, "_ZN8CNavArea15FinishSplitEditEPS_10NavDirType", mfunc_ptr_cast(&CNavArea::FinishSplitEdit) }, //{ 0x0, "_ZN8CNavArea10SpliceEditEPS_", mfunc_ptr_cast(&CNavArea::SpliceEdit) }, @@ -4760,7 +4796,7 @@ FunctionHook g_FunctionHooks[] = //{ 0x0, "_ZN8CNavArea16DrawMarkedCornerE13NavCornerTypehhhi", mfunc_ptr_cast(&CNavArea::DrawMarkedCorner) }, //{ 0x0, "_ZN8CNavArea13AddToOpenListEv", mfunc_ptr_cast(&CNavArea::AddToOpenList) }, //{ 0x0, "_ZN8CNavArea16UpdateOnOpenListEv", mfunc_ptr_cast(&CNavArea::UpdateOnOpenList) }, - //{ 0x0, "_ZN8CNavArea18RemoveFromOpenListEv", mfunc_ptr_cast(&CNavArea::RemoveFromOpenList) }, + //{ 0x01D3DBC0, "_ZN8CNavArea18RemoveFromOpenListEv", mfunc_ptr_cast(&CNavArea::RemoveFromOpenList) }, //{ 0x0, "_ZN8CNavArea16ClearSearchListsEv", mfunc_ptr_cast(&CNavArea::ClearSearchLists) }, //{ 0x0, "_ZNK8CNavArea9GetCornerE13NavCornerType", mfunc_ptr_cast(&CNavArea::GetCorner) }, //{ 0x0, "_ZNK8CNavArea21IsHidingSpotCollisionEPK6Vector", mfunc_ptr_cast(&CNavArea::IsHidingSpotCollision) }, @@ -4783,7 +4819,7 @@ FunctionHook g_FunctionHooks[] = //{ 0x0, "_ZN12CNavAreaGrid5ResetEv", mfunc_ptr_cast(&CNavAreaGrid::Reset) }, //{ 0x0, "_ZN12CNavAreaGrid10InitializeEffff", mfunc_ptr_cast(&CNavAreaGrid::Initialize) }, //{ 0x0, "_ZN12CNavAreaGrid10AddNavAreaEP8CNavArea", mfunc_ptr_cast(&CNavAreaGrid::AddNavArea) }, - //{ 0x0, "_ZN12CNavAreaGrid13RemoveNavAreaEP8CNavArea", mfunc_ptr_cast(&CNavAreaGrid::RemoveNavArea) }, + //{ 0x01D43560, "_ZN12CNavAreaGrid13RemoveNavAreaEP8CNavArea", mfunc_ptr_cast(&CNavAreaGrid__RemoveNavArea) }, //!@{ 0x01D43710, "_ZNK12CNavAreaGrid10GetNavAreaEPK6Vectorf", mfunc_ptr_cast(&CNavAreaGrid::GetNavArea) }, // Used refs //!@{ 0x01D43860, "_ZNK12CNavAreaGrid17GetNearestNavAreaEPK6Vectorb", mfunc_ptr_cast(&CNavAreaGrid::GetNearestNavArea) }, // Used refs //{ 0x0, "_ZNK12CNavAreaGrid14GetNavAreaByIDEj", mfunc_ptr_cast(&CNavAreaGrid::GetNavAreaByID) }, @@ -5014,7 +5050,7 @@ FunctionHook g_FunctionHooks[] = //{ 0x0, "_ZN19HostageAnimateState6OnExitEP14CHostageImprov", mfunc_ptr_cast(&HostageAnimateState::OnExit) }, //{ 0x0, "_ZNK19HostageAnimateState7GetNameEv", mfunc_ptr_cast(&HostageAnimateState::GetName) }, //non-virtual func - //{ 0x01D49D60, "_ZN19HostageAnimateState5ResetEv", mfunc_ptr_cast(&HostageAnimateState__Reset) }, + //{ 0x01D49D60, "_ZN19HostageAnimateState5ResetEv", mfunc_ptr_cast(&HostageAnimateState::Reset) }, //{ 0x0, "_ZN19HostageAnimateState11AddSequenceEP14CHostageImprovPKcff", mfunc_ptr_cast(&HostageAnimateState::AddSequence) }, //{ 0x01D49F00, "_ZN19HostageAnimateState11AddSequenceEP14CHostageImproviff", mfunc_ptr_cast(&HostageAnimateState::AddSequence) }, //{ 0x0, "_ZNK19HostageAnimateState6IsBusyEv", mfunc_ptr_cast(&HostageAnimateState::IsBusy) }, @@ -5173,6 +5209,7 @@ AddressRef g_DataRefs[] = { 0x01E61E4C, "WorldGraph", (size_t)&pWorldGraph }, { 0x01E61B98, "g_pGameRules", (size_t)&pg_pGameRules }, + { 0x01E62560, "g_pMPGameRules", (size_t)&pg_pMPGameRules }, { 0x01E0B0B0, "weaponAliasInfo", (size_t)&pweaponAliasInfo }, { 0x01E0B1E8, "weaponBuyAliasInfo", (size_t)&pweaponBuyAliasInfo }, @@ -5304,6 +5341,17 @@ AddressRef g_DataRefs[] = { 0x01E61B84, "g_psv_aim", (size_t)&pg_psv_aim },//TODO: unused, used cvar_t *sv_aim { 0x01E63598, "sv_aim", (size_t)&psv_aim }, + { 0x01E61E6C, "sv_clienttrace", (size_t)&psv_clienttrace }, + { 0x01E61E68, "g_GameMgrHelper", (size_t)&pg_GameMgrHelper }, + { 0x01E22624, "voice_serverdebug", (size_t)&pvoice_serverdebug }, + { 0x01E22638, "sv_alltalk", (size_t)&psv_alltalk }, + + { 0x01E75D20, "g_PlayerModEnable", (size_t)&pg_PlayerModEnable }, + { 0x01E75D28, "g_BanMasks", (size_t)&pg_BanMasks }, + { 0x01E75DA8, "g_SentGameRulesMasks", (size_t)&pg_SentGameRulesMasks }, + { 0x01E75E30, "g_SentBanMasks", (size_t)&pg_SentBanMasks }, + { 0x01E75E28, "g_bWantModEnable", (size_t)&pg_bWantModEnable }, + { 0x01E76580, "s_tutorDisabledThisGame", (size_t)&ps_tutorDisabledThisGame }, { 0x01E76584, "s_nextCvarCheckTime", (size_t)&ps_nextCvarCheckTime }, @@ -5460,6 +5508,7 @@ AddressRef g_DataRefs[] = { 0x01E1BE38, "_ZN6CLight10m_SaveDataE", mfunc_ptr_cast(&CLight::m_SaveData) }, { 0x01E1BB00, "_ZN11CWallHealth10m_SaveDataE", mfunc_ptr_cast(&CWallHealth::m_SaveData) }, + { 0x01E1B850, "_ZN9CRecharge10m_SaveDataE", mfunc_ptr_cast(&CRecharge::m_SaveData) }, //{ 0x0, "_ZN16CFuncMortarField10m_SaveDataE", mfunc_ptr_cast(&CFuncMortarField::m_SaveData) }, //{ 0x0, "_ZN13CEnvExplosion10m_SaveDataE", mfunc_ptr_cast(&CEnvExplosion::m_SaveData) }, //{ 0x0, "_ZN13CFuncRotating10m_SaveDataE", mfunc_ptr_cast(&CFuncRotating::m_SaveData) }, @@ -5563,7 +5612,9 @@ AddressRef g_DataRefs[] = { 0x01E11588, "_ZN10HidingSpot8m_nextIDE", mfunc_ptr_cast(&HidingSpot::m_nextID) }, //{ 0x0, "_ZN10HidingSpot14m_masterMarkerE", mfunc_ptr_cast(&HidingSpot::m_masterMarker) }, + { 0x01E2A100, "_ZN8CNavArea9m_isResetE", mfunc_ptr_cast(&CNavArea::m_isReset) }, { 0x01E2A0FC, "_ZN8CNavArea10m_openListE", mfunc_ptr_cast(&CNavArea::m_openList) }, + //{ 0x0, "lastDrawTimestamp", (size_t)&plastDrawTimestamp }, //{ 0x0, "goodSizedAreaList", (size_t)&pgoodSizedAreaList }, //{ 0x0, "markedArea", (size_t)&pmarkedArea }, @@ -5586,6 +5637,7 @@ AddressRef g_DataRefs[] = { 0x01E287F0, "TheBotPhrases", (size_t)&pTheBotPhrases }, { 0x01E7657C, "TheTutor", (size_t)&pTheTutor }, { 0x01E2A25C, "g_pHostages", (size_t)&pg_pHostages }, + { 0x01E2A258, "g_iHostageNumber", (size_t)&pg_iHostageNumber }, { 0x01E16EE0, "outputLevel", (size_t)&poutputLevel }, { 0x01E61B40, "theDebugOutputTypes", (size_t)&ptheDebugOutputTypes }, diff --git a/regamedll/hookers/engine.h b/regamedll/hookers/engine.h index 0c623fa1..42c693c7 100644 --- a/regamedll/hookers/engine.h +++ b/regamedll/hookers/engine.h @@ -27,4 +27,5 @@ */ #include "common.h" +#include "cmd.h" #include "unicode_strtools.h" diff --git a/regamedll/msvc/ReGameDLL.vcxproj b/regamedll/msvc/ReGameDLL.vcxproj index 55e23cb7..52369553 100644 --- a/regamedll/msvc/ReGameDLL.vcxproj +++ b/regamedll/msvc/ReGameDLL.vcxproj @@ -543,6 +543,7 @@ + @@ -579,6 +580,7 @@ + diff --git a/regamedll/msvc/ReGameDLL.vcxproj.filters b/regamedll/msvc/ReGameDLL.vcxproj.filters index 063bf155..4b03ada8 100644 --- a/regamedll/msvc/ReGameDLL.vcxproj.filters +++ b/regamedll/msvc/ReGameDLL.vcxproj.filters @@ -1094,6 +1094,12 @@ dlls + + dlls + + + engine + diff --git a/regamedll/regamedll/dlls.h b/regamedll/regamedll/dlls.h index 0ec8aa33..45eed853 100644 --- a/regamedll/regamedll/dlls.h +++ b/regamedll/regamedll/dlls.h @@ -119,6 +119,7 @@ #include "hostage/hostage_improv.h" #include "airtank.h" +#include "h_ai.h" #include "h_cycler.h" #include "h_battery.h" diff --git a/regamedll/unittests/struct_offsets_tests.cpp b/regamedll/unittests/struct_offsets_tests.cpp index 71650bc8..653d3169 100644 --- a/regamedll/unittests/struct_offsets_tests.cpp +++ b/regamedll/unittests/struct_offsets_tests.cpp @@ -25,35 +25,50 @@ #define REPEAT_OFFSETOF(st,memb)\ offsetof(st,memb), offsetof(st,memb) +#define REPEAT_SIZEOF_PRINT(st)\ + printf("sizeof %s: 0x%2X (%d)\n", #st, sizeof(st), sizeof(st)) + +#define REPEAT_OFFSETOF_PRINT(st,memb)\ + printf("sizeof %s::%s: 0x%2X (%d)\n", #st, #memb, offsetof(st,memb), offsetof(st,memb)) + TEST(StructOffsets, ReversingChecks, 5000) { + // sizeof class + REPEAT_SIZEOF_PRINT(CNavArea); + REPEAT_SIZEOF_PRINT(CBot); + REPEAT_SIZEOF_PRINT(CCSBot); + REPEAT_SIZEOF_PRINT(CBotManager); + REPEAT_SIZEOF_PRINT(CCSBotManager); + REPEAT_SIZEOF_PRINT(BotPhraseManager); + REPEAT_SIZEOF_PRINT(CBasePlayer); + REPEAT_SIZEOF_PRINT(ActiveGrenade); + + REPEAT_SIZEOF_PRINT(CHostageImprov); + REPEAT_SIZEOF_PRINT(HostageStateMachine); + REPEAT_SIZEOF_PRINT(HostageFollowState); + REPEAT_SIZEOF_PRINT(CHalfLifeMultiplay); + REPEAT_SIZEOF_PRINT(CHalfLifeTraining); + + // offset the members + REPEAT_OFFSETOF_PRINT(CBaseEntity, pev); + REPEAT_OFFSETOF_PRINT(CBaseEntity, has_disconnected); + + // assert + CHECK_CLASS_SIZE(CNavArea, 0x238u, 0x214u); + CHECK_CLASS_SIZE(CBasePlayer, 0x9B0, 0x9C4); CHECK_CLASS_SIZE(CHostageImprov, 0x1C8Cu, 0x1C8Cu); CHECK_CLASS_SIZE(BotPhraseManager, 0x21Cu, 0x214u); + CHECK_CLASS_SIZE(CHalfLifeMultiplay, 0x2D0u, 0x2C4u); + CHECK_CLASS_SIZE(CHalfLifeTraining, 0x2E8u, 0x2D8u); + //CHECK_CLASS_SIZE(CBotManager, 12u, 12); //CHECK_CLASS_SIZE(CCSBotManager, 740, 0x2E0u);//0x2E4u | 0x2E0u //CHECK_CLASS_SIZE(HostageStateMachine, 0x10, 0x10); //CHECK_CLASS_SIZE(HostageFollowState, 0x4C, 0x4C); //CHECK_CLASS_SIZE(CCSBot, 0x2CA0, 0x2CA0); - - printf("sizeof CBot: 0x%2X (%d)\n", REPEAT_SIZEOF(CBot)); - printf("sizeof CCSBot: 0x%2X (%d)\n", REPEAT_SIZEOF(CCSBot)); - - printf("sizeof CBotManager: 0x%2X (%d)\n", REPEAT_SIZEOF(CBotManager)); - printf("sizeof CCSBotManager: 0x%2X (%d)\n", REPEAT_SIZEOF(CCSBotManager)); - printf("sizeof BotPhraseManager: 0x%2X (%d)\n", REPEAT_SIZEOF(BotPhraseManager)); - - printf("sizeof CBasePlayer: 0x%2X (%d)\n", REPEAT_SIZEOF(CBasePlayer)); - printf("sizeof ActiveGrenade: 0x%2X (%d)\n", REPEAT_SIZEOF(ActiveGrenade)); - printf("sizeof CHostageImprov: 0x%2X (%d)\n", REPEAT_SIZEOF(CHostageImprov)); - printf("sizeof HostageStateMachine: 0x%2X (%d)\n", REPEAT_SIZEOF(HostageStateMachine)); - printf("sizeof HostageFollowState: 0x%2X (%d)\n", REPEAT_SIZEOF(HostageFollowState)); - - printf("offsetof CBaseEntity::pev: 0x%2X (%d)\n", REPEAT_OFFSETOF(CBaseEntity, pev)); - printf("offsetof CBaseEntity::has_disconnected: 0x%2X (%d)\n", REPEAT_OFFSETOF(CBaseEntity, has_disconnected)); - } #pragma warning( pop )