2021-12-25 22:36:38 +01:00
# pragma once
2022-07-15 19:22:02 +02:00
# ifndef DEDICATED // We should think about not including this file at all in dedicated tbh.
2022-08-09 17:18:07 +02:00
# include "public/client_class.h"
# include "public/icliententitylist.h"
2022-07-24 13:40:37 +02:00
# endif // !DEDICATED
2023-01-31 16:23:16 +01:00
# include "game/shared/usercmd.h"
2021-12-25 22:36:38 +01:00
enum class ClientFrameStage_t : int
{
FRAME_UNDEFINED = - 1 , // (haven't run any frames yet)
FRAME_START ,
2023-09-12 11:06:16 +02:00
// A network packet is being received
2021-12-25 22:36:38 +01:00
FRAME_NET_UPDATE_START ,
// Data has been received and we're going to start calling PostDataUpdate
FRAME_NET_UPDATE_POSTDATAUPDATE_START ,
// Data has been received and we've called PostDataUpdate on all data recipients
FRAME_NET_UPDATE_POSTDATAUPDATE_END ,
// We've received all packets, we can now do interpolation, prediction, etc..
FRAME_NET_UPDATE_END ,
// We're about to start rendering the scene
FRAME_RENDER_START ,
// We've finished rendering the scene.
FRAME_RENDER_END ,
FRAME_NET_FULL_FRAME_UPDATE_ON_REMOVE
} ;
class CHLClient
{
public :
2022-04-13 01:25:33 +02:00
static void FrameStageNotify ( CHLClient * pHLClient , ClientFrameStage_t curStage ) ;
2022-07-15 19:22:02 +02:00
# ifndef DEDICATED
2022-05-02 23:53:26 +02:00
ClientClass * GetAllClasses ( ) ;
2022-07-15 19:22:02 +02:00
# endif
2022-01-17 03:35:40 +01:00
2023-06-03 18:21:13 +02:00
void CreateMove ( int sequenceNumber , float inputSampleFrameTime , bool active )
{
const static int index = 27 ;
CallVFunc < void > ( index , this , sequenceNumber , inputSampleFrameTime , active ) ;
}
2023-01-31 16:23:16 +01:00
CUserCmd * GetUserCmd ( int sequenceNumber ) // @0x1405BB020 in R5pc_r5launch_N1094_CL456479_2019_10_30_05_20_PM
2022-01-17 03:35:40 +01:00
{
2022-08-31 14:38:49 +02:00
const static int index = 28 ;
2023-01-31 16:23:16 +01:00
return CallVFunc < CUserCmd * > ( index , this , sequenceNumber ) ; /*48 83 EC 28 48 8B 05 ? ? ? ? 48 8D 0D ? ? ? ? 44 8B C2*/
2022-01-17 03:35:40 +01:00
}
2021-12-25 22:36:38 +01:00
} ;
2022-04-09 02:18:57 +02:00
/* ==== CHLCLIENT ======================================================================================================================================================= */
2022-05-04 21:10:46 +02:00
# ifndef DEDICATED
2022-04-18 03:35:08 +02:00
inline CMemory p_CHLClient_PostInit ;
2023-07-02 23:01:29 +02:00
inline void * ( * CHLClient_PostInit ) ( void ) ;
2023-01-26 02:59:50 +01:00
2022-04-18 03:35:08 +02:00
inline CMemory p_CHLClient_LevelShutdown ;
2023-07-02 23:01:29 +02:00
inline void * ( * CHLClient_LevelShutdown ) ( CHLClient * thisptr ) ;
2022-02-19 16:42:40 +01:00
2022-04-18 03:35:08 +02:00
inline CMemory p_CHLClient_HudProcessInput ;
2023-07-02 23:01:29 +02:00
inline void ( * CHLClient_HudProcessInput ) ( CHLClient * thisptr , bool bActive ) ;
2023-01-26 02:59:50 +01:00
2022-05-04 21:10:46 +02:00
inline CMemory p_CHLClient_FrameStageNotify ;
2023-07-02 23:01:29 +02:00
inline void ( * CHLClient_FrameStageNotify ) ( CHLClient * thisptr , ClientFrameStage_t frameStage ) ;
2022-01-04 11:53:54 +01:00
2022-05-02 23:53:26 +02:00
inline CMemory p_CHLClient_GetAllClasses ;
2023-07-02 23:01:29 +02:00
inline ClientClass * ( * CHLClient_GetAllClasses ) ( ) ;
2022-05-04 21:10:46 +02:00
# endif // !DEDICATED
2022-04-14 19:18:59 +02:00
2023-06-03 18:21:13 +02:00
inline CHLClient * g_pHLClient = nullptr ;
inline CHLClient * * g_ppHLClient = nullptr ;
2021-12-25 22:36:38 +01:00
///////////////////////////////////////////////////////////////////////////////
2022-05-13 14:53:25 +02:00
class VDll_Engine_Int : 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
{
2022-04-14 19:18:59 +02:00
# ifndef DEDICATED
2023-01-25 02:26:52 +01:00
LogFunAdr ( " CHLClient::PostInit " , p_CHLClient_PostInit . GetPtr ( ) ) ;
LogFunAdr ( " CHLClient::LevelShutdown " , p_CHLClient_LevelShutdown . GetPtr ( ) ) ;
LogFunAdr ( " CHLClient::HudProcessInput " , p_CHLClient_HudProcessInput . GetPtr ( ) ) ;
LogFunAdr ( " CHLClient::FrameStageNotify " , p_CHLClient_FrameStageNotify . GetPtr ( ) ) ;
LogFunAdr ( " CHLClient::GetAllClasses " , p_CHLClient_GetAllClasses . GetPtr ( ) ) ;
2022-04-14 19:18:59 +02:00
# endif // !DEDICATED
2023-06-03 18:21:13 +02:00
LogVarAdr ( " g_HLClient " , reinterpret_cast < uintptr_t > ( g_pHLClient ) ) ;
LogVarAdr ( " g_pHLClient " , reinterpret_cast < uintptr_t > ( g_ppHLClient ) ) ;
2021-12-25 22:36:38 +01:00
}
2022-04-18 03:35:08 +02:00
virtual void GetFun ( void ) const
{
# if defined (GAMEDLL_S0) || defined (GAMEDLL_S1)
2022-12-01 22:44:55 +01:00
p_CHLClient_LevelShutdown = g_GameDll . FindPatternSIMD ( " 40 53 56 41 54 41 56 48 83 EC 28 48 8B F1 " ) ;
2022-05-04 21:10:46 +02:00
# ifndef DEDICATED
2022-12-01 22:44:55 +01:00
p_CHLClient_PostInit = g_GameDll . FindPatternSIMD ( " 48 83 3D ?? ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? " ) ;
p_CHLClient_FrameStageNotify = g_GameDll . FindPatternSIMD ( " 48 83 EC 38 89 15 ?? ?? ?? ?? " ) ;
p_CHLClient_GetAllClasses = g_GameDll . FindPatternSIMD ( " 48 8B 05 ?? ?? ?? ?? C3 CC CC CC CC CC CC CC CC 48 89 74 24 ?? " ) ;
2022-05-04 21:10:46 +02:00
# endif // !DEDICATED
2022-04-18 03:35:08 +02:00
# elif defined (GAMEDLL_S2) || defined (GAMEDLL_S3)
2022-05-04 21:10:46 +02:00
# ifndef DEDICATED
2023-01-26 02:59:50 +01:00
p_CHLClient_LevelShutdown = g_GameDll . FindPatternSIMD ( " 48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 48 83 EC 20 48 8B F9 48 8D 0D ?? ?? ?? ?? " ) ;
2022-12-01 22:44:55 +01:00
p_CHLClient_PostInit = g_GameDll . FindPatternSIMD ( " 48 83 EC 28 48 83 3D ?? ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? " ) ;
p_CHLClient_FrameStageNotify = g_GameDll . FindPatternSIMD ( " 48 83 EC 28 89 15 ?? ?? ?? ?? " ) ;
p_CHLClient_GetAllClasses = g_GameDll . FindPatternSIMD ( " 48 8B 05 ?? ?? ?? ?? C3 CC CC CC CC CC CC CC CC 48 8B 05 ?? ?? ?? ?? 48 8D 0D ?? ?? ?? ?? " ) ;
2022-05-04 21:10:46 +02:00
# endif // !DEDICATED
2022-04-18 03:35:08 +02:00
# endif
2022-05-04 21:10:46 +02:00
# ifndef DEDICATED
2023-01-26 02:59:50 +01:00
p_CHLClient_HudProcessInput = g_GameDll . FindPatternSIMD ( " 48 83 EC 28 0F B6 0D ?? ?? ?? ?? 88 15 ?? ?? ?? ?? " ) ;
2022-05-02 23:53:26 +02:00
CHLClient_LevelShutdown = p_CHLClient_LevelShutdown . RCast < void * ( * ) ( CHLClient * ) > ( ) ; /*48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 48 83 EC 20 48 8B F9 48 8D 0D ?? ?? ?? ??*/
2022-05-04 21:10:46 +02:00
CHLClient_PostInit = p_CHLClient_PostInit . RCast < void * ( * ) ( void ) > ( ) ; /*48 83 EC 28 48 83 3D ?? ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ??*/
2022-04-18 03:35:08 +02:00
CHLClient_FrameStageNotify = p_CHLClient_FrameStageNotify . RCast < void ( * ) ( CHLClient * , ClientFrameStage_t ) > ( ) ; /*48 83 EC 28 89 15 ?? ?? ?? ??*/
CHLClient_HudProcessInput = p_CHLClient_HudProcessInput . RCast < void ( * ) ( CHLClient * , bool ) > ( ) ; /*48 83 EC 28 0F B6 0D ?? ?? ?? ?? 88 15 ?? ?? ?? ??*/
2022-05-02 23:53:26 +02:00
CHLClient_GetAllClasses = p_CHLClient_GetAllClasses . RCast < ClientClass * ( * ) ( ) > ( ) ; /*48 8B 05 ? ? ? ? C3 CC CC CC CC CC CC CC CC 48 8B 05 ? ? ? ? 48 8D 0D ? ? ? ?*/
2022-05-04 21:10:46 +02:00
# endif // !DEDICATED
2022-04-18 03:35:08 +02:00
}
virtual void GetVar ( void ) const
{
2023-06-03 18:21:13 +02:00
g_pHLClient = g_GameDll . FindPatternSIMD ( " 48 8D 05 ?? ?? ?? ?? C3 CC CC CC CC CC CC CC CC 48 89 5C 24 ?? 57 48 83 EC 30 48 8B F9 " )
. ResolveRelativeAddressSelf ( 0x3 , 0x7 ) . RCast < CHLClient * > ( ) ;
2022-04-18 03:35:08 +02:00
2023-06-03 18:21:13 +02:00
g_ppHLClient = g_GameDll . FindPatternSIMD ( " 41 55 48 83 EC ?? 4C 63 91 ?? ?? ?? ?? " )
2022-12-01 22:44:55 +01:00
. FindPatternSelf ( " 4C 8B " , CMemory : : Direction : : DOWN , 512 , 2 ) . ResolveRelativeAddressSelf ( 0x3 , 0x7 ) . RCast < CHLClient * * > ( ) ;
2022-04-18 03:35:08 +02:00
}
2022-04-11 01:44:30 +02:00
virtual void GetCon ( void ) const { }
2023-11-26 13:21:20 +01:00
virtual void Detour ( const bool bAttach ) const ;
2021-12-25 22:36:38 +01:00
} ;
///////////////////////////////////////////////////////////////////////////////