This commit is contained in:
6arelyFuture 2021-11-17 00:00:49 +00:00
parent b7a618a649
commit 4ddc368348
No known key found for this signature in database
GPG Key ID: E883E2BC9657D955
4 changed files with 105 additions and 5 deletions

90
src/component/cheats.cpp Normal file
View File

@ -0,0 +1,90 @@
#include <stdinc.hpp>
#include <loader/component_loader.hpp>
#include <utils/hook.hpp>
#include "key_catcher.hpp"
namespace cheats
{
game::dvar_t* cl_wallhack;
__declspec(naked) void draw_red_box_stub()
{
__asm
{
push eax
mov eax, cl_wallhack
cmp byte ptr [eax + 12], 1
pop eax
je draw
test byte ptr ds:0x8FF110, 0x10
push 0x430568
retn
draw:
push 0x43056A
retn
}
}
__declspec(naked) void blind_eye_check_stub()
{
__asm
{
push eax
mov eax, cl_wallhack
cmp byte ptr [eax + 12], 1
pop eax
je draw
test byte ptr [esi], 0x20
jnz skipBecauseBlindeye
jmp draw
skipBecauseBlindeye:
push 0x5AA5A2
retn
draw:
push 0x05AA529
retn
}
}
class component final : public component_interface
{
public:
void post_unpack() override
{
cl_wallhack = game::Dvar_RegisterBool("cl_EnableCheats", false, game::DVAR_FLAG_NONE, "Enable FoF wallhack");
utils::hook::jump(0x430561, draw_red_box_stub);
utils::hook::nop(0x430566, 2);
utils::hook::jump(0x5AA524, blind_eye_check_stub);
add_cheat_commands();
}
private:
static void add_cheat_commands()
{
key_catcher::on_key_press("Z", [](const game::LocalClientNum_t&)
{
game::Dvar_SetBool(cl_wallhack, true);
});
key_catcher::on_key_press("X", [](const game::LocalClientNum_t&)
{
game::Dvar_SetBool(cl_wallhack, false);
});
}
};
}
REGISTER_COMPONENT(cheats::component)

View File

@ -8,11 +8,11 @@
namespace exploit
{
bool exploit = false;
game::dvar_t* cl_exploit;
void cl_netchan_transmit_stub(int a1, unsigned char* data, int size)
{
if (exploit)
if (cl_exploit->current.enabled)
{
data[1] = 0xAA;
data[8] = 0x80;
@ -26,6 +26,8 @@ namespace exploit
public:
void post_unpack() override
{
cl_exploit = game::Dvar_RegisterBool("cl_exploit", false, game::DVAR_FLAG_NONE, "Enable server freezer");
add_exploit_commands();
add_key_hooks();
@ -55,12 +57,12 @@ namespace exploit
{
command::add("exploit", [](const command::params&)
{
exploit = true;
game::Dvar_SetBool(cl_exploit, true);
});
command::add("undo_exploit", [](const command::params&)
{
exploit = false;
game::Dvar_SetBool(cl_exploit, false);
});
}
};

View File

@ -54,6 +54,11 @@ namespace key_catcher
{
cl_key_event_hook.create(0x4CD840, &cl_key_event_stub);
}
void pre_destroy() override
{
cl_key_event_hook.clear();
}
};
}

View File

@ -22,6 +22,8 @@ namespace game
Dvar_RegisterString{0x4157E0};
WEAK symbol<dvar_t*(const char* dvarName, float value, float min, float max, unsigned __int16 flags, const char* description)>
Dvar_RegisterFloat{0x4A5CF0};
WEAK symbol<void(dvar_t* var, bool value)> Dvar_SetBool{0x46DD70};
WEAK symbol<void(const char* dvarName, bool value)> Dvar_SetBoolByName{0x48C7D0};
WEAK symbol<int(const char* cmd)> Key_GetBindingForCmd{0x47D300};
WEAK symbol<int(const char* keyAsText)> Key_StringToKeynum{0x50A710}; // Virtual-Key Code
@ -29,10 +31,11 @@ namespace game
WEAK symbol<void(int arg, char* buffer, int bufferLength)> SV_Cmd_ArgvBuffer{0x4F6B00};
WEAK symbol<bool(netsrc_t, game::netadr_s dest, const char* message)> NET_OutOfBandPrint{0x496230};
WEAK symbol<bool(netsrc_t, netadr_s dest, const char* message)> NET_OutOfBandPrint{0x496230};
WEAK symbol<void()> Com_Quit_f{0x556060};
// Variables
WEAK symbol<CmdArgs> cmd_args{0x1C96850};
WEAK symbol<PlayerKeyState> playerKeys{0xB3A38C};
WEAK symbol<netadr_s> server_remote{0xB3D370};
}