2021-12-25 22:36:38 +01:00
|
|
|
#pragma once
|
|
|
|
#include "mathlib/vector.h"
|
|
|
|
|
|
|
|
enum class HostStates_t : int
|
|
|
|
{
|
|
|
|
HS_NEW_GAME = 0x0,
|
|
|
|
HS_LOAD_GAME = 0x1,
|
|
|
|
HS_CHANGE_LEVEL_SP = 0x2,
|
|
|
|
HS_CHANGE_LEVEL_MP = 0x3,
|
|
|
|
HS_RUN = 0x4,
|
|
|
|
HS_GAME_SHUTDOWN = 0x5,
|
|
|
|
HS_SHUTDOWN = 0x6,
|
|
|
|
HS_RESTART = 0x7,
|
|
|
|
};
|
|
|
|
|
|
|
|
class CHostState
|
|
|
|
{
|
|
|
|
public:
|
2023-03-18 17:36:09 +01:00
|
|
|
static void FrameUpdate(CHostState* pHostState, double flCurrentTime, float flFrameTime);
|
|
|
|
void LoadConfig(void) const;
|
2022-04-12 02:48:46 +02:00
|
|
|
|
2023-03-18 17:36:09 +01:00
|
|
|
void Init(void);
|
|
|
|
void Setup(void);
|
|
|
|
void Think(void) const;
|
2022-02-19 02:31:16 +01:00
|
|
|
|
2023-03-18 17:36:09 +01:00
|
|
|
void GameShutDown(void);
|
|
|
|
void State_NewGame(void);
|
2022-02-19 02:31:16 +01:00
|
|
|
|
2023-03-18 17:36:09 +01:00
|
|
|
void State_ChangeLevelSP(void);
|
|
|
|
void State_ChangeLevelMP(void);
|
2022-05-15 12:20:21 +02:00
|
|
|
|
2023-03-18 17:36:09 +01:00
|
|
|
void ResetLevelName(void);
|
2022-05-04 02:25:27 +02:00
|
|
|
|
2022-02-19 02:31:16 +01:00
|
|
|
public:
|
|
|
|
HostStates_t m_iCurrentState; //0x0000
|
|
|
|
HostStates_t m_iNextState; //0x0004
|
2022-07-06 21:11:32 +02:00
|
|
|
Vector3D m_vecLocation; //0x0008
|
2022-02-19 02:31:16 +01:00
|
|
|
QAngle m_angLocation; //0x0014
|
2022-05-20 20:14:39 +02:00
|
|
|
char m_levelName[MAX_MAP_NAME_HOST]; //0x0020
|
2022-02-19 02:31:16 +01:00
|
|
|
char m_mapGroupName[256]; //0x0060
|
|
|
|
char m_landMarkName[256]; //0x0160
|
|
|
|
float m_flShortFrameTime; //0x0260
|
|
|
|
bool m_bActiveGame; //0x0264
|
|
|
|
bool m_bRememberLocation; //0x0265
|
|
|
|
bool m_bBackgroundLevel; //0x0266
|
|
|
|
bool m_bWaitingForConnection; //0x0267
|
2023-02-18 19:18:00 +01:00
|
|
|
bool m_bSplitScreenConnect; //0x0268
|
|
|
|
bool m_bGameHasShutDownAndFlushedMemory; //0x0269
|
|
|
|
HostStates_t m_iServerState; //0x026C
|
2021-12-25 22:36:38 +01:00
|
|
|
};
|
|
|
|
|
2022-04-09 02:18:57 +02:00
|
|
|
/* ==== CHOSTSTATE ====================================================================================================================================================== */
|
2022-04-18 03:35:08 +02:00
|
|
|
inline CMemory p_CHostState_FrameUpdate;
|
2023-07-02 23:01:29 +02:00
|
|
|
inline void(*CHostState_FrameUpdate)(CHostState* pHostState, double flCurrentTime, float flFrameTime);
|
2021-12-25 22:36:38 +01:00
|
|
|
|
2022-04-18 03:35:08 +02:00
|
|
|
inline CMemory p_CHostState_State_Run;
|
2023-07-02 23:01:29 +02:00
|
|
|
inline void(*CHostState_State_Run)(HostStates_t* pState, double flCurrentTime, float flFrameTime);
|
2022-04-12 02:48:46 +02:00
|
|
|
|
2022-04-18 03:35:08 +02:00
|
|
|
inline CMemory p_CHostState_State_GameShutDown;
|
2023-07-02 23:01:29 +02:00
|
|
|
inline void(*CHostState_State_GameShutDown)(CHostState* thisptr);
|
2021-12-25 22:36:38 +01:00
|
|
|
|
2022-08-22 03:53:38 +02:00
|
|
|
inline CMemory p_HostState_ChangeLevelMP;
|
2023-07-02 23:01:29 +02:00
|
|
|
inline void(*v_HostState_ChangeLevelMP)(char const* pNewLevel, char const* pLandmarkName);
|
2022-08-22 03:53:38 +02:00
|
|
|
|
2021-12-25 22:36:38 +01:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern CHostState* g_pHostState;
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
2022-05-13 14:53:25 +02:00
|
|
|
class VHostState : public IDetour
|
2021-12-25 22:36:38 +01:00
|
|
|
{
|
2022-04-11 01:44:30 +02:00
|
|
|
virtual void GetAdr(void) const
|
2021-12-25 22:36:38 +01:00
|
|
|
{
|
2023-01-25 02:26:52 +01:00
|
|
|
LogFunAdr("CHostState::FrameUpdate", p_CHostState_FrameUpdate.GetPtr());
|
|
|
|
LogFunAdr("CHostState::State_Run", p_CHostState_State_Run.GetPtr());
|
|
|
|
LogFunAdr("CHostState::State_GameShutDown", p_CHostState_State_GameShutDown.GetPtr());
|
|
|
|
LogFunAdr("HostState_ChangeLevelMP", p_HostState_ChangeLevelMP.GetPtr());
|
|
|
|
LogVarAdr("g_pHostState", reinterpret_cast<uintptr_t>(g_pHostState));
|
2021-12-25 22:36:38 +01:00
|
|
|
}
|
2022-04-12 02:48:46 +02:00
|
|
|
virtual void GetFun(void) const
|
|
|
|
{
|
2022-12-01 22:44:55 +01:00
|
|
|
p_CHostState_FrameUpdate = g_GameDll.FindPatternSIMD("48 89 5C 24 08 48 89 6C 24 20 F3 0F 11 54 24 18");
|
|
|
|
p_CHostState_State_Run = g_GameDll.FindPatternSIMD("48 8B C4 48 89 58 10 48 89 70 18 48 89 78 20 55 41 54 41 55 41 56 41 57 48 8D A8 ?? ?? ?? ?? 48 81 EC ?? ?? ?? ?? 0F 29 70 C8 45 33 E4");
|
2022-04-12 02:48:46 +02:00
|
|
|
#if defined (GAMEDLL_S0) || defined (GAMEDLL_S1)
|
2022-12-01 22:44:55 +01:00
|
|
|
p_CHostState_State_GameShutDown = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 56 48 83 EC 20 8B 05 ?? ?? ?? ?? 48 8B F1");
|
2022-04-18 22:25:03 +02:00
|
|
|
#elif defined (GAMEDLL_S2)
|
2022-12-01 22:44:55 +01:00
|
|
|
p_CHostState_State_GameShutDown = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 74 24 ?? 57 48 83 EC 20 8B 05 ?? ?? ?? ?? 33 FF 48 8B F1");
|
2022-04-18 22:25:03 +02:00
|
|
|
#elif defined (GAMEDLL_S3)
|
2022-12-01 22:44:55 +01:00
|
|
|
p_CHostState_State_GameShutDown = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 57 48 83 EC 20 48 8B D9 E8 ?? ?? ?? ?? 48 8B 0D ?? ?? ?? ??");
|
2022-04-12 02:48:46 +02:00
|
|
|
#endif
|
2022-12-01 22:44:55 +01:00
|
|
|
p_HostState_ChangeLevelMP = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 74 24 ?? 57 48 83 EC 20 48 8B F9 48 8B F2 8B 0D ?? ?? ?? ??");
|
2022-08-22 03:53:38 +02:00
|
|
|
|
2022-07-17 12:16:31 +02:00
|
|
|
CHostState_FrameUpdate = p_CHostState_FrameUpdate.RCast<void(*)(CHostState*, double, float)>(); /*48 89 5C 24 08 48 89 6C 24 20 F3 0F 11 54 24 18*/
|
|
|
|
CHostState_State_Run = p_CHostState_State_Run.RCast<void(*)(HostStates_t*, double, float)>(); /*48 8B C4 48 89 58 10 48 89 70 18 48 89 78 20 55 41 54 41 55 41 56 41 57 48 8D A8 ?? ?? ?? ?? 48 81 EC ?? ?? ?? ?? 0F 29 70 C8 45 33 E4*/
|
2022-04-18 03:35:08 +02:00
|
|
|
CHostState_State_GameShutDown = p_CHostState_State_GameShutDown.RCast<void(*)(CHostState* thisptr)>(); /*48 89 5C 24 ?? 57 48 83 EC 20 48 8B D9 E8 ?? ?? ?? ?? 48 8B 0D ?? ?? ?? ??*/
|
2022-08-22 03:53:38 +02:00
|
|
|
v_HostState_ChangeLevelMP = p_HostState_ChangeLevelMP.RCast<void(*)(char const*, char const*)>(); /*48 89 5C 24 ? 48 89 74 24 ? 57 48 83 EC 20 48 8B F9 48 8B F2 8B 0D ? ? ? ?*/
|
2022-04-12 02:48:46 +02:00
|
|
|
}
|
|
|
|
virtual void GetVar(void) const
|
|
|
|
{
|
2022-04-18 03:35:08 +02:00
|
|
|
g_pHostState = p_CHostState_FrameUpdate.FindPattern("48 8D ?? ?? ?? ?? 01", CMemory::Direction::DOWN, 100).ResolveRelativeAddressSelf(0x3, 0x7).RCast<CHostState*>();
|
2022-04-12 02:48:46 +02:00
|
|
|
}
|
2022-04-11 01:44:30 +02:00
|
|
|
virtual void GetCon(void) const { }
|
2023-01-25 02:26:52 +01:00
|
|
|
virtual void Attach(void) const;
|
|
|
|
virtual void Detach(void) const;
|
2021-12-25 22:36:38 +01:00
|
|
|
};
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|