-
Автор темы
- #1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
__declspec(naked) void __fastcall hkCreateMove_Proxy(void* _this, int, int sequence_number, float input_sample_frametime, bool active)
{
__asm
{
push ebp
mov ebp, esp
push ebx
lea ecx, [esp]
push ecx
push dword ptr[active]
push dword ptr[input_sample_frametime]
push dword ptr[sequence_number]
call Hooks::CreateMoveHook
pop ebx
pop ebp
retn 0Ch
}
}
C++:
void __stdcall Hooks::CreateMoveHook(int sequence_number, float input_sample_frametime, bool active, bool& bSendPacket)
{
static auto oCreateMove = enghook.get_original<decltype(&Hooks::hkCreateMove_Proxy)>(index::CreateMove);
oCreateMove(g_CHLClient, 0, sequence_number, input_sample_frametime, active);
auto cmd = g_Input->GetUserCmd(sequence_number);
auto verified = g_Input->GetVerifiedCmd(sequence_number);
if (!cmd || !g_engine->IsInGame() || !g_engine->IsConnected() || !cmd->tick_count)
return ;
for (auto hk : c_lua::get()->hooks->getHooks("on_create_move"))
hk.func(cmd, &G::SendPacket);
if (c_config::get()->b["misc_autojump"])
misc::Bhop(cmd);
if (c_config::get()->b["misc_autostrafe"])
misc::AutoStrafe(cmd);
uintptr_t* frame_ptr;
__asm mov frame_ptr, ebp;
*(bool*)(*frame_ptr - 0x1C) = G::SendPacket;
verified->m_cmd = *cmd;
verified->m_crc = cmd->GetChecksum();
}
C++:
#pragma once
#include "../classes/c_usercmd.hpp"
#include "../math/vector3d.hpp"
#define MULTIPLAYER_BACKUP 150
class bf_write;
class bf_read;
class CInput
{
public:
char pad_0x00[0x0C];
bool m_trackir_available;
bool m_mouse_initiated;
bool m_mouse_active;
bool m_fJoystickAdvancedInit;
char pad_0x08[0x2C];
void* m_pKeys;
char pad_0x38[0x6C];
bool m_fCameraInterceptingMouse;
bool m_fCameraInThirdPerson;
bool m_fCameraMovingWithMouse;
vec3_t m_vecCameraOffset;
bool m_fCameraDistanceMove;
int m_nCameraOldX;
int m_nCameraOldY;
int m_nCameraX;
int m_nCameraY;
bool m_CameraIsOrthographic;
vec3_t m_angPreviousViewAngles;
vec3_t m_angPreviousViewAnglesTilt;
float m_flLastForwardMove;
int m_nClearInputState;
char pad_0xE4[0x8];
c_usercmd* m_pCommands;
CVerifiedUserCmd* m_pVerifiedCommands;
inline c_usercmd* GetUserCmd(int sequence_number);
inline c_usercmd* GetUserCmd(int nSlot, int sequence_number);
inline CVerifiedUserCmd* GetVerifiedCmd(int sequence_number);
};
c_usercmd* CInput::GetUserCmd(int sequence_number)
{
using OriginalFn = c_usercmd * (__thiscall *)(void *, int, int);
return vfunc<OriginalFn>(this, 8)(this, 0, sequence_number);
}
c_usercmd*CInput::GetUserCmd(int nSlot, int sequence_number)
{
typedef c_usercmd*(__thiscall *GetUserCmd_t)(void*, int, int);
return vfunc<GetUserCmd_t>(this, 8)(this, nSlot, sequence_number);
}
CVerifiedUserCmd* CInput::GetVerifiedCmd(int sequence_number)
{
auto verifiedCommands = *(CVerifiedUserCmd **)(reinterpret_cast<uint32_t>(this) + 0xF8);
return &verifiedCommands[sequence_number % MULTIPLAYER_BACKUP];
}
cmd->buttons &= ~IN_JUMP;
не могу использовать прыжок и так со всеми.