r5sdk/r5dev/client/client.h

71 lines
2.0 KiB
C++

#pragma once
#include "tier0/basetypes.h"
#include "server/IVEngineServer.h"
//-----------------------------------------------------------------------------
// Forward declarations
//-----------------------------------------------------------------------------
class CClient;
///////////////////////////////////////////////////////////////////////////////
extern CClient* g_pClient;
namespace
{
#if defined (GAMEDLL_S0) || defined (GAMEDLL_S1)
const std::uintptr_t g_dwCClientSize = 0x4A440;
const std::uintptr_t g_dwPersistenceVar = 0x5B4;
const std::uintptr_t g_dwCClientPadding = 303232;
#elif defined (GAMEDLL_S2) || defined (GAMEDLL_S3)
const std::uintptr_t g_dwCClientSize = 0x4A4C0;
const std::uintptr_t g_dwPersistenceVar = 0x5BC;
const std::uintptr_t g_dwCClientPadding = 303360;
#endif
static ADDRESS g_pClientBuffer = p_IVEngineServer_PersistenceAvailable.FindPatternSelf("48 8D 0D", ADDRESS::Direction::DOWN, 150).ResolveRelativeAddressSelf(0x3, 0x7);
}
class CClient
{
public:
inline CClient* GetClientInstance(int nIndex)
{
return (CClient*)(std::uintptr_t)(g_pClientBuffer.GetPtr() + (nIndex * g_dwCClientSize));
}
void*& GetNetChan()
{
return m_nNetChannel;
}
private:
char pad_0000[16]; //0x0000
public:
int m_iUserID; //0x0010
private:
char pad_0014[908]; //0x0014
public:
void* m_nNetChannel; //0x03A0
private:
char pad_03A8[8]; //0x03A8
public:
int m_iSignonstate; //0x03B0
private:
char pad_03B4[4]; //0x03B4
public:
std::int64_t m_iOriginID; //0x03B8
private:
char pad_03C0[g_dwCClientPadding]; //0x03C0
};
///////////////////////////////////////////////////////////////////////////////
class HClient : public IDetour
{
virtual void debugp()
{
std::cout << "| VAR: g_pClient : 0x" << std::hex << std::uppercase << g_pClient << std::setw(0) << " |" << std::endl;
std::cout << "+----------------------------------------------------------------+" << std::endl;
}
};
///////////////////////////////////////////////////////////////////////////////
REGISTER(HClient);