Skip to content

Commit

Permalink
antiaim update
Browse files Browse the repository at this point in the history
add fakelag's
add antiaim
add thirdperson
add some shit
  • Loading branch information
pa1n-dev committed Mar 27, 2024
1 parent d132445 commit 0d505ef
Show file tree
Hide file tree
Showing 34 changed files with 569 additions and 69 deletions.
39 changes: 26 additions & 13 deletions README.md
Expand Up @@ -3,22 +3,23 @@ This is a cheat for [Garry's Mod](https://store.steampowered.com/app/4000/Garrys

The cheat almost completely repeats the old nixware menu, which is why it has such a name

#### Cool features
- OBS Bypass
- Custom menu background
- Custom loading screen
- Backtrack ([cl_interp abuse](https://www.unknowncheats.me/forum/garry-s-mod/414371-cl_interp-abuse-1-backtrack-fakeping.html)) (not 100% accuracy)

#### Screenshots
![image](https://github.com/pa1n-dev/nixware_x64/assets/74207477/c21beff3-5d31-45c7-a8ca-fafbeb5318a3)
![image](https://github.com/pa1n-dev/nixware_x64/assets/74207477/5873042b-de4d-4312-9434-7c46c36efbdf)

#### How to use
Select beta version:

![image](https://github.com/pa1n-dev/nixware_x64/assets/74207477/838dc11e-aceb-4c5a-84b3-c3ca4b54b06b)

injection via process hacker
#### Features
- Aimbot (Silent, Automatic fire, Hitbox, Priority, Smooth)
- Predict spread (m9k, swb)
- Disable recoil
- Backtrack
- AntiAim (Fake duck)
- Fakelag's
- ThirdPerson
- OBS Bypass
- Custom menu background
- Custom loading screen
- [AnimFix](https://www.unknowncheats.me/forum/garry-s-mod/502883-animfix-fake-chams.html)
- Backtrack ([cl_interp abuse](https://www.unknowncheats.me/forum/garry-s-mod/414371-cl_interp-abuse-1-backtrack-fakeping.html)) (not 100% accuracy)

#### ToDo
- Visuals
Expand All @@ -27,8 +28,20 @@ injection via process hacker
- Lua API
- Bitch

### Credits
#### How to use
Open properties:

![image](https://github.com/pa1n-dev/nixware_x64/assets/74207477/fc20776e-2fd9-4b0c-a078-193f379b92dd)

Select beta version:

![image](https://github.com/pa1n-dev/nixware_x64/assets/74207477/e26b3f7f-0723-40be-8e45-cdf56df507b6)

Also, when starting the game, select x64

Afterwards you need to inject via process hacker

### Credits
#### Maintainers / Devs
- [pa1n](https://github.com/pa1n-dev)

Expand Down
5 changes: 5 additions & 0 deletions dependencies/minhook/min_hook.cpp
Expand Up @@ -20,4 +20,9 @@ bool c_min_hook::create_hook(LPVOID target, PVOID detour, LPVOID* original)
bool c_min_hook::enable_hook(PVOID hook)
{
return MH_EnableHook(hook) == MH_OK;
}

bool c_min_hook::remove_all_hooks()
{
return MH_DisableHook(MH_ALL_HOOKS) == MH_OK;
}
1 change: 1 addition & 0 deletions dependencies/minhook/min_hook.h
Expand Up @@ -11,4 +11,5 @@ inline class c_min_hook

bool create_hook(LPVOID target, PVOID detour, LPVOID* original);
bool enable_hook(PVOID hook = MH_ALL_HOOKS);
bool remove_all_hooks();
} min_hook;
7 changes: 2 additions & 5 deletions features/aimbot/aimbot.cpp
Expand Up @@ -15,7 +15,7 @@ void aimbot::run(c_user_cmd* cmd)
return;

c_base_combat_weapon* weapon = local_player->get_active_weapon();
if (!weapon)
if (!weapon || !weapon->can_shoot() || weapon->is_holding_tool())
return;

target = find_best_target(cmd, local_player);
Expand All @@ -28,9 +28,6 @@ void aimbot::run(c_user_cmd* cmd)
if (cmd->is_typing || cmd->is_world_clicking)
return;

if (weapon->is_holding_tool() || !weapon->can_shoot())
return;

if (!settings::aimbot::globals::hotkey.check())
return;

Expand Down Expand Up @@ -155,7 +152,7 @@ bool aimbot::get_hit_position(c_base_entity* local_player, c_base_entity* entity

if (!bone_to_world)
{
bone_to_world.reset(new matrix3x4[hdr->num_bones]);
bone_to_world = std::make_unique<matrix3x4[]>(hdr->num_bones);

entity->invalidate_bone_cache();
if (!entity->get_client_renderable()->setup_bones(bone_to_world.get(), hdr->num_bones, BONE_USED_BY_ANYTHING, interfaces::global_vars->curtime))
Expand Down
2 changes: 1 addition & 1 deletion features/aimbot/backtrack/history.cpp
Expand Up @@ -173,7 +173,7 @@ void history::update()
if (!hdr)
continue;

record.bone_to_world.reset(new matrix3x4[hdr->num_bones]);
record.bone_to_world = std::make_unique<matrix3x4[]>(hdr->num_bones);

entity->invalidate_bone_cache();
if (!entity->get_client_renderable()->setup_bones(record.bone_to_world.get(), hdr->num_bones, BONE_USED_BY_ANYTHING, interfaces::global_vars->curtime))
Expand Down
4 changes: 2 additions & 2 deletions features/aimbot/penetrate_walls.cpp
Expand Up @@ -5,11 +5,11 @@ bool penetrate_walls::is_visible(c_base_entity* local_player, c_base_entity* ent
c_vector eye_position = local_player->get_eye_position();

trace_t trace;
ray_t ray(eye_position, end);

c_trace_filter filter;
filter.skip = local_player;

ray_t ray(eye_position, end);

interfaces::engine_trace->trace_ray(ray, MASK_SHOT, &filter, &trace);

return (trace.entity == entity || trace.fraction >= 0.98f);
Expand Down
86 changes: 86 additions & 0 deletions features/antiaim/animfix.cpp
@@ -0,0 +1,86 @@
#include "animfix.h"

void animfix::update_real_anim_state(c_user_cmd* cmd)
{
allow_anim_state_update = true;

real_anim_state->update(
cmd->view_angles.y,
cmd->view_angles.x
);
}

void animfix::update_fake_anim_state(c_user_cmd* cmd, c_base_entity* local_player)
{
allow_anim_state_update = true;

local_player->get_anim_state()->update(
cmd->view_angles.y,
cmd->view_angles.x
);
}

void animfix::update_real_bones(c_base_entity* local_player)
{
local_player->invalidate_bone_cache();
if (local_player->get_client_renderable()->setup_bones(real_matrix, MAX_STUDIO_BONES, BONE_USED_BY_ANYTHING, interfaces::global_vars->curtime))
created_real_matrix = true;
}

void animfix::update_fake_bones(c_base_entity* local_player)
{
local_player->invalidate_bone_cache();
if (local_player->get_client_renderable()->setup_bones(fake_matrix, MAX_STUDIO_BONES, BONE_USED_BY_ANYTHING, interfaces::global_vars->curtime))
created_fake_matrix = true;
}

void animfix::swap_anim_states(c_base_entity* local_player)
{
std::swap(*real_anim_state, *local_player->get_anim_state());
}

void animfix::run(c_user_cmd* cmd, bool send_packet)
{
c_base_entity* local_player = interfaces::entity_list->get_entity(interfaces::engine->get_local_player());
if (!local_player || !local_player->is_alive())
return;

if (allow_anim_state_reset)
{
real_anim_state = local_player->create_anim_state();

if (!real_move_data)
real_move_data = new multi_player_movement_data_t{};

real_anim_state->init(local_player, *real_move_data);

allow_anim_state_reset = false;
}

float ft = interfaces::global_vars->frametime;
interfaces::global_vars->frametime = interfaces::global_vars->interval_per_tick;

q_angle old = local_player->eye_angles();
local_player->eye_angles() = cmd->view_angles;

update_real_anim_state(cmd);

if (send_packet)
{
swap_anim_states(local_player);
update_real_bones(local_player);
swap_anim_states(local_player);

interfaces::global_vars->frametime = interfaces::global_vars->interval_per_tick * ticks_elapsed;

update_fake_anim_state(cmd, local_player);
update_fake_bones(local_player);

ticks_elapsed = 1;
}
else
ticks_elapsed++;

local_player->eye_angles() = old;
interfaces::global_vars->frametime = ft;
}
26 changes: 26 additions & 0 deletions features/antiaim/animfix.h
@@ -0,0 +1,26 @@
#pragma once
#include "../../hooks/hooks.h"

namespace animfix
{
inline c_hl2mp_player_anim_state* real_anim_state;
inline multi_player_movement_data_t* real_move_data;

inline matrix3x4 real_matrix[MAX_STUDIO_BONES];
inline matrix3x4 fake_matrix[MAX_STUDIO_BONES];

inline bool created_real_matrix = false;
inline bool created_fake_matrix = false;

inline bool allow_anim_state_update = false;
inline bool allow_anim_state_reset = true;

inline int ticks_elapsed = 0;

void update_real_anim_state(c_user_cmd* cmd);
void update_fake_anim_state(c_user_cmd* cmd, c_base_entity* local_player);
void update_real_bones(c_base_entity* local_player);
void update_fake_bones(c_base_entity* local_player);
void swap_anim_states(c_base_entity* local_player);
void run(c_user_cmd* cmd, bool send_packet);
}
49 changes: 49 additions & 0 deletions features/antiaim/antiaim.cpp
@@ -0,0 +1,49 @@
#include "antiaim.h"

void antiaim::run(c_user_cmd* cmd, bool send_packet)
{
if (!settings::antiaim::globals::enable)
return;

if (!settings::antiaim::globals::hotkey.check())
return;

c_base_entity* local_player = interfaces::entity_list->get_entity(interfaces::engine->get_local_player());
if (!local_player || !local_player->is_alive())
return;

if (local_player->get_move_type() == MOVETYPE_NOCLIP || local_player->get_move_type() == MOVETYPE_LADDER)
return;

if (cmd->buttons & IN_USE || cmd->buttons & IN_ATTACK)
return;

q_angle view;
interfaces::engine->get_view_angles(view);

float pitch = 0.f;
float yaw = 0.f;

switch (settings::antiaim::globals::pitch)
{
case 0:
pitch = 90.f;
break;
case 1:
pitch = -90.f;
break;
}

switch (settings::antiaim::globals::yaw)
{
case 0:
yaw = view.y + (send_packet ^ settings::antiaim::globals::invert_yaw ? -90 : 90);
break;
case 1:
yaw = local_player->get_anim_state()->current_feet_yaw + (send_packet ? 180 : 0);
break;
}

cmd->view_angles.x = pitch;
cmd->view_angles.y = yaw;
}
7 changes: 7 additions & 0 deletions features/antiaim/antiaim.h
@@ -0,0 +1,7 @@
#pragma once
#include "../../hooks/hooks.h"

namespace antiaim
{
void run(c_user_cmd* cmd, bool send_packet);
}
65 changes: 65 additions & 0 deletions features/antiaim/fakelags.cpp
@@ -0,0 +1,65 @@
#include "fakelags.h"

bool fakelags::run(c_user_cmd* cmd)
{
c_base_entity* local_player = interfaces::entity_list->get_entity(interfaces::engine->get_local_player());
if (!local_player || !local_player->is_alive())
return true;

if (settings::antiaim::globals::fake_duck && cmd->buttons & IN_DUCK && local_player->get_flags() & FL_ONGROUND)
{
if (cmd->command_number & 1)
{
cmd->buttons &= ~IN_DUCK;
return false;
}

return true;
}

if (!settings::antiaim::fakelags::enable || cmd->buttons & IN_ATTACK)
return true;

if (interfaces::client_state->choked_commands < settings::antiaim::fakelags::count)
{
switch (settings::antiaim::fakelags::method)
{
case 0:
if (local_player->get_flags() & FL_ONGROUND)
return false;
break;
case 1:
if (!(local_player->get_flags() & FL_ONGROUND))
return false;
break;
case 2:
if (local_player->get_velocity().length_2d() > 50.f)
return false;
break;
case 3:
if (local_player->get_velocity().length_2d() < 50.f)
return false;
break;
case 4:
return false;
default:
break;
}
}

return true;
}

//https://www.unknowncheats.me/forum/garry-s-mod/615861-cusercmd-createmove-fakelag-x64.html
void fakelags::apply(bool send_packet)
{
static void* p_send_packet = reinterpret_cast<void*>((uintptr_t)memory::pattern_scanner(xorstr("engine.dll"), xorstr("40 55 53 48 8D AC 24 38 F0 FF FF B8 C8 10 00 00 E8 ?? ?? ?? ?? 48 2B E0 0F 29 B4 24 B0 10 00 00")) + 0x168);

static uint8_t jz_bytes[] = { 0x0f, 0x84, 0x04, 0x01, 0x00, 0x00 };
static uint8_t jnz_bytes[] = { 0x0f, 0x85, 0x04, 0x01, 0x00, 0x00 };

DWORD old_protect;
VirtualProtect(p_send_packet, 6, PAGE_EXECUTE_READWRITE, &old_protect);
memcpy(p_send_packet, send_packet ? jz_bytes : jnz_bytes, 6);
VirtualProtect(p_send_packet, 6, old_protect, &old_protect);
}
8 changes: 8 additions & 0 deletions features/antiaim/fakelags.h
@@ -0,0 +1,8 @@
#pragma once
#include "../../hooks/hooks.h"

namespace fakelags
{
bool run(c_user_cmd* cmd);
void apply(bool send_packet);
}

0 comments on commit 0d505ef

Please sign in to comment.