This repository has been archived on 2024-06-01. You can view files and clone it, but cannot push or open issues or pull requests.
cathook/src/hooks/CreateMove.cpp

235 lines
7.1 KiB
C++

/*
* CreateMove.cpp
*
* Created on: Jan 8, 2017
* Author: nullifiedcat
*/
#include "CreateMove.h"
#include "../hooks.h"
#include "../hack.h"
#include "../common.h"
#include "hookedmethods.h"
float AngleDiff( float destAngle, float srcAngle )
{
float delta;
delta = fmodf(destAngle - srcAngle, 360.0f);
if ( destAngle > srcAngle )
{
if ( delta >= 180 )
delta -= 360;
}
else
{
if ( delta <= -180 )
delta += 360;
}
return delta;
}//TODO temporary
#include "../profiler.h"
static CatVar minigun_jump(CV_SWITCH, "minigun_jump", "0", "TF2C minigun jump", "Allows jumping while shooting with minigun");
CatVar jointeam(CV_SWITCH, "fb_autoteam", "1", "Joins player team automatically (NYI)");
CatVar joinclass(CV_STRING, "fb_autoclass", "spy", "Class that will be picked after joining a team (NYI)");
bool CreateMove_hook(void* thisptr, float inputSample, CUserCmd* cmd) {
SEGV_BEGIN;
g_pUserCmd = cmd;
if (TF2C && CE_GOOD(LOCAL_W) && minigun_jump && LOCAL_W->m_iClassID == g_pClassID->CTFMinigun) {
CE_INT(LOCAL_W, netvar.iWeaponState) = 0;
}
bool ret = ((CreateMove_t*)hooks::hkClientMode->GetMethod(hooks::offCreateMove))(thisptr, inputSample, cmd);
PROF_SECTION(CreateMove);
if (!cmd) {
return ret;
}
if (!cathook) {
return ret;
}
if (!g_IEngine->IsInGame()) {
g_Settings.bInvalid = true;
return true;
}
// PROF_BEGIN();
INetChannel* ch = (INetChannel*)g_IEngine->GetNetChannelInfo();
if (ch && !hooks::IsHooked((void*)((uintptr_t)ch))) {
hooks::hkNetChannel = new hooks::VMTHook();
hooks::hkNetChannel->Init(ch, 0);
hooks::hkNetChannel->HookMethod((void*)CanPacket_hook, hooks::offCanPacket);
hooks::hkNetChannel->HookMethod((void*)SendNetMsg_hook, hooks::offSendNetMsg);
hooks::hkNetChannel->HookMethod((void*)Shutdown_hook, hooks::offShutdown);
hooks::hkNetChannel->Apply();
}
//logging::Info("canpacket: %i", ch->CanPacket());
//if (!cmd) return ret;
bool time_replaced = false;
float curtime_old = g_GlobalVars->curtime;;
if (hacks::shared::airstuck::IsStuck()) {
return ret;
}
if (!g_Settings.bInvalid && CE_GOOD(g_pLocalPlayer->entity)) {
float servertime = (float)CE_INT(g_pLocalPlayer->entity, netvar.nTickBase) * g_GlobalVars->interval_per_tick;
g_GlobalVars->curtime = servertime;
time_replaced = true;
}
if (g_Settings.bInvalid) {
gEntityCache.Invalidate();
}
// PROF_BEGIN();
{ PROF_SECTION(EntityCache); SAFE_CALL(gEntityCache.Update()); }
// PROF_END("Entity Cache updating");
SAFE_CALL(g_pPlayerResource->Update());
SAFE_CALL(g_pLocalPlayer->Update());
g_Settings.bInvalid = false;
// Disabled because this causes EXTREME aimbot inaccuracy
//if (!cmd->command_number) return ret;
if (hacks::shared::followbot::bot) {
static int team_joining_state = 0;
static float last_jointeam_try = 0;
if (g_GlobalVars->curtime < last_jointeam_try) last_jointeam_try = 0.0f;
if (!g_pLocalPlayer->team || (g_pLocalPlayer->team == TEAM_SPEC)) team_joining_state = 1;
else {
if (team_joining_state) {
logging::Info("Trying to change CLASS");
g_IEngine->ExecuteClientCmd(format("join_class ", joinclass.GetString()).c_str());
}
team_joining_state = 0;
}
if (team_joining_state) {
CachedEntity* found_entity = nullptr;
for (int i = 1; i < 32 && i < HIGHEST_ENTITY; i++) {
CachedEntity* ent = ENTITY(i);
if (CE_BAD(ent)) continue;
if (!ent->m_pPlayerInfo) continue;
if (ent->m_pPlayerInfo->friendsID == hacks::shared::followbot::follow_steamid) {
found_entity = ent;
break;
}
}
if (found_entity && CE_GOOD(found_entity)) {
if (jointeam && (g_GlobalVars->curtime - last_jointeam_try) > 1.0f) {
last_jointeam_try = g_GlobalVars->curtime;
switch (CE_INT(found_entity, netvar.iTeamNum)) {
case TEAM_RED:
logging::Info("Trying to join team RED");
g_IEngine->ExecuteClientCmd("jointeam red"); break;
case TEAM_BLU:
logging::Info("Trying to join team BLUE");
g_IEngine->ExecuteClientCmd("jointeam blue"); break;
}
}
}
}
}
if (CE_GOOD(g_pLocalPlayer->entity)) {
g_pLocalPlayer->v_OrigViewangles = cmd->viewangles;
// PROF_BEGIN();
//RunEnginePrediction(g_pLocalPlayer->entity, cmd);
SAFE_CALL(hacks::shared::esp::CreateMove());
if (!g_pLocalPlayer->life_state && CE_GOOD(g_pLocalPlayer->weapon())) {
if (TF2) SAFE_CALL(hacks::tf2::noisemaker::CreateMove());
SAFE_CALL(hacks::shared::bunnyhop::CreateMove());
SAFE_CALL(hacks::shared::aimbot::CreateMove());
SAFE_CALL(hacks::shared::antiaim::ProcessUserCmd(cmd));
if (TF) SAFE_CALL(hacks::tf::autosticky::CreateMove());
if (TF) SAFE_CALL(hacks::tf::autoreflect::CreateMove());
SAFE_CALL(hacks::shared::triggerbot::CreateMove());
if (TF) SAFE_CALL(hacks::tf::autoheal::CreateMove());
}
//SAFE_CALL(CREATE_MOVE(FollowBot));
SAFE_CALL(hacks::shared::misc::CreateMove());
SAFE_CALL(hacks::shared::spam::CreateMove());
// PROF_END("Hacks processing");
if (time_replaced) g_GlobalVars->curtime = curtime_old;
}
/*for (IHack* i_hack : hack::hacks) {
if (!i_hack->CreateMove(thisptr, inputSample, cmd)) {
ret = false;
}
}*/
g_Settings.bInvalid = false;
chat_stack::OnCreateMove();
if (CE_GOOD(g_pLocalPlayer->entity)) {
bool speedapplied = false;
if (roll_speedhack && g_pGUI->m_bPressedState[(int)roll_speedhack] && !(cmd->buttons & IN_ATTACK)) { // FIXME OOB
float speed = cmd->forwardmove;
if (fabs(speed) > 0.0f) {
cmd->forwardmove = -speed;
cmd->sidemove = 0.0f;
cmd->viewangles.y = g_pLocalPlayer->v_OrigViewangles.y;
cmd->viewangles.y -= 180.0f;
if (cmd->viewangles.y < -180.0f) cmd->viewangles.y += 360.0f;
cmd->viewangles.z = 90.0f;
g_pLocalPlayer->bUseSilentAngles = true;
speedapplied = true;
}
/*Vector vecMove( cmd->forwardmove, 0.0f, 0.0f );
float flLength = vecMove.Length();
if( flLength > 0.0f && !(cmd->buttons & IN_ATTACK) )
{
//Vector nvm = -vecMove;
Vector angMoveReverse;
VectorAngles( vecMove, angMoveReverse );
cmd->forwardmove = -flLength;
cmd->sidemove = 0.0f; // Move only backwards, no sidemove
cmd->viewangles.y = AngleDiff( cmd->viewangles.y , angMoveReverse.y ) ;
logging::Info("yaw %.2f", cmd->viewangles.y);
cmd->viewangles.y += 180.0f;
if (cmd->viewangles.y > 180.0f) cmd->viewangles.y -= 360.0f;
cmd->viewangles.z = 89.0f; // OMFG SUPER 1337 SPEEDHAQ METHODS 8)
g_pLocalPlayer->bUseSilentAngles = true;
}*/
}
if (g_pLocalPlayer->bUseSilentAngles) {
if (!speedapplied) {
Vector vsilent(cmd->forwardmove, cmd->sidemove, cmd->upmove);
float speed = sqrt(vsilent.x * vsilent.x + vsilent.y * vsilent.y);
Vector ang;
VectorAngles(vsilent, ang);
float yaw = DEG2RAD(ang.y - g_pLocalPlayer->v_OrigViewangles.y + cmd->viewangles.y);
cmd->forwardmove = cos(yaw) * speed;
cmd->sidemove = sin(yaw) * speed;
}
ret = false;
}
if (CE_GOOD(g_pLocalPlayer->entity) && !g_pLocalPlayer->life_state) {
SAFE_CALL(hacks::shared::followbot::AfterCreateMove());
}
if (cmd)
g_Settings.last_angles = cmd->viewangles;
}
// PROF_END("CreateMove");
g_pLocalPlayer->bAttackLastTick = (cmd->buttons & IN_ATTACK);
return ret;
SEGV_END;
return true;
}