This commit is contained in:
nullifiedcat 2016-12-21 21:14:14 +03:00
parent 2a6e41e4a2
commit 428f35b97a
24 changed files with 318 additions and 142 deletions

View File

@ -21,6 +21,7 @@
#include "relations.h"
#include "usercmd.h"
#include "trace.h"
#include "cvwrapper.h"
#include "prediction.h"
#define CON_NAME "cat"

View File

@ -1,6 +1,5 @@
#include "Netvar.h"
//#include "SDK.h"
#include "../interfaces.h"
#include "../logging.h"
#include <memory>

View File

@ -10,33 +10,76 @@
#include "common.h"
#include "sdk.h"
void CatVar::Increment() {
CatEnum::CatEnum(const char** values, int size, int min) {
m_Values = values;
m_iMin = min;
m_iMax = min + size - 1;
m_iLength = size;
logging::Info("Created enum with size %i", size);
}
const char* CatEnum::Name(int value) {
if (value + m_iMin >= 0 && value + m_iMin < m_iMax) {
return m_Values[value + m_iMin];
}
return (const char*)0;
}
int CatEnum::Maximum() {
return m_iMax;
}
int CatEnum::Minimum() {
return m_iMin;
}
bool CatVar::GetBool() { return m_pConVar->GetBool(); }
int CatVar::GetInt() { return m_pConVar->GetInt(); }
float CatVar::GetFloat() { return m_pConVar->GetFloat(); }
void CatVar::Increment(int factor) {
if (!m_pConVar) return;
switch (m_Type) {
case CatVar_t::CV_SWITCH: {
m_pConVar->SetValue(!m_pConVar->GetInt());
} break;
case CatVar_t::CV_INT:
m_pConVar->SetValue(m_pConVar->GetInt() + 1);
m_pConVar->SetValue(m_pConVar->GetInt() + factor * m_iStep);
break;
case CatVar_t::CV_FLOAT:
m_pConVar->SetValue(m_pConVar->GetFloat() + 0.5f);
m_pConVar->SetValue(m_pConVar->GetFloat() + (float)factor * m_fStep);
break;
case CatVar_t::CV_ENUM: {
int cur = m_pConVar->GetInt();
int newv = cur + 1;
if (newv > m_EnumType->Maximum()) {
newv = m_EnumType->Minimum();
}
m_pConVar->SetValue(newv);
} break;
}
}
void CatVar::Decrement() {
void CatVar::Decrement(int factor) {
if (!m_pConVar) return;
switch (m_Type) {
case CatVar_t::CV_SWITCH:
m_pConVar->SetValue((int)!m_pConVar->GetInt());
break;
case CatVar_t::CV_INT:
m_pConVar->SetValue(m_pConVar->GetInt() - 1);
m_pConVar->SetValue(m_pConVar->GetInt() - factor * m_iStep);
break;
case CatVar_t::CV_FLOAT:
m_pConVar->SetValue(m_pConVar->GetFloat() - 0.5f);
m_pConVar->SetValue(m_pConVar->GetFloat() - (float)factor * m_fStep);
break;
case CatVar_t::CV_ENUM: {
int cur = m_pConVar->GetInt();
int newv = cur - 1;
if (newv < m_EnumType->Minimum()) {
newv = m_EnumType->Maximum() - 1;
}
m_pConVar->SetValue(newv);
} break;
}
}

View File

@ -10,21 +10,59 @@
class ConVar;
#define CREATE_CV(type, name, defaults, description) \
new CatVar(CreateConVar(CON_PREFIX name, defaults, description), type);
enum CatVar_t {
CV_SWITCH,
CV_INT,
CV_FLOAT,
CV_STRING
CV_STRING,
CV_ENUM
};
class ICatEnum {
public:
inline virtual ~ICatEnum() {}
virtual const char* Name(int value) = 0;
virtual int Minimum() = 0;
virtual int Maximum() = 0;
};
class CatEnum : public ICatEnum {
public:
CatEnum(const char** values, int size, int min = 0);
virtual const char* Name(int value);
virtual int Maximum();
virtual int Minimum();
const char** m_Values;
int m_iMin;
int m_iMax;
int m_iLength;
};
class CatVar {
public:
inline CatVar(ConVar* var, CatVar_t type) { m_pConVar = var; m_Type = type; }
inline CatVar(ConVar* var, CatVar_t type) { m_iStep = 1; m_fStep = 0.5f; m_pConVar = var; m_Type = type; }
inline CatVar(ConVar* var, ICatEnum* catenum) { m_pConVar = var; m_Type = CatVar_t::CV_ENUM; m_EnumType = catenum; }
inline CatVar_t GetType() { return m_Type; }
inline ICatEnum* GetEnum() { return 0; }
inline ConVar* GetConVar() { return m_pConVar; }
void Increment();
void Decrement();
bool GetBool();
int GetInt();
float GetFloat();
void Increment(int factor = 1);
void Decrement(int factor = 1);
inline void SetStep(int step) { m_iStep = step; }
inline void SetStep(float step) { m_fStep = step; }
int m_iStep;
float m_fStep;
ICatEnum* m_EnumType;
CatVar_t m_Type;
ConVar* m_pConVar;
};

View File

@ -535,26 +535,24 @@ enum weaponmode {
};
enum hitbox_t {
hb_head = 0,
hb_neck,
hb_necklower,
hb_pelvis,
hb_body,
hb_lowerchest,
hb_chest,
hb_upperchest,
hb_rightthigh,
hb_leftthigh,
hb_rightshin,
hb_leftshin,
hb_rightfoot,
hb_leftfoot,
hb_righthand,
hb_lefthand,
hb_rightupperarm,
hb_rightlowerarm,
hb_leftupperArm,
hb_leftlowerArm
head = 0,
pelvis = 1,
spine_0 = 2,
spine_1 = 3,
spine_2 = 4,
spine_3 = 5,
upperArm_L = 6,
lowerArm_L = 7,
hand_L = 8,
upperArm_R = 9,
lowerArm_R = 10,
hand_R = 11,
hip_L = 12,
knee_L = 13,
foot_L = 14,
hip_R = 15,
knee_R = 16,
foot_R = 17
};
enum relation {

View File

@ -121,20 +121,35 @@ void GUIListElement_Var::Draw(int x, int y, bool selected) {
draw::GetStringLength(strfmt("%i", m_pCatVar->GetConVar()->GetInt()), l, h);
draw::DrawString(x + LIST_WIDTH - l - 3, y, selected ? colors::pink : colors::Transparent(colors::pink), "%i", m_pCatVar->GetConVar()->GetInt());
} break;
case CatVar_t::CV_ENUM: {
draw::DrawString(x, y, selected ? colors::pink : colors::Transparent(colors::pink), "%s", m_pCatVar->GetConVar()->GetHelpText());
int l, h;
const char* str = m_pCatVar->m_EnumType->Name(m_pCatVar->GetInt());
if (str) {
draw::GetStringLength((char*)str, l, h);
draw::DrawString(x + LIST_WIDTH - l - 3, y, selected ? colors::pink : colors::Transparent(colors::pink), str);
} else {
draw::GetStringLength(strfmt("%i", m_pCatVar->GetConVar()->GetInt()), l, h);
draw::DrawString(x + LIST_WIDTH - l - 3, y, selected ? colors::pink : colors::Transparent(colors::pink), "%i", m_pCatVar->GetConVar()->GetInt());
}
} break;
}
}
void GUIListElement_Var::KeyEvent(ButtonCode_t key) {
int factor = 1;
if (g_pGUI->m_bPressedState[ButtonCode_t::KEY_LSHIFT]) factor *= 10;
if (g_pGUI->m_bPressedState[ButtonCode_t::KEY_LCONTROL]) factor *= 100;
switch (key) {
case ButtonCode_t::KEY_SPACE:
case ButtonCode_t::KEY_ENTER:
m_pCatVar->Increment();
m_pCatVar->Increment(factor);
break;
case ButtonCode_t::KEY_RIGHT:
m_pCatVar->Increment();
m_pCatVar->Increment(factor);
break;
case ButtonCode_t::KEY_LEFT:
m_pCatVar->Decrement();
m_pCatVar->Decrement(factor);
break;
}
}

View File

@ -52,18 +52,35 @@ void GUI::Draw() {
}
}
bool GUI::KeyEvent(ButtonCode_t key) {
if (key == KEY_INSERT)
m_bActive = !m_bActive;
if (!m_bActive) return false;
if (key == KEY_BACKSPACE) {
PopList();
return false;
void GUI::UpdateKeys() {
for (int i = 0; i < ButtonCode_t::KEY_COUNT; i++) {
bool down = interfaces::input->IsButtonDown((ButtonCode_t)(KEY_FIRST + i));
bool changed = m_bPressedState[i] != down;
if (changed && down) m_iPressedFrame[i] = interfaces::gvars->framecount;
m_bPressedState[i] = down;
if (m_bKeysInit) {
if (changed) {
KeyEvent((ButtonCode_t)i);
}
}
}
if (!m_bKeysInit) m_bKeysInit = 1;
}
if (m_nStackSize) {
if (m_ListStack[m_nStackSize - 1])
m_ListStack[m_nStackSize - 1]->KeyEvent(key);
bool GUI::KeyEvent(ButtonCode_t key) {
if (m_bPressedState[key]) {
if (key == KEY_INSERT)
m_bActive = !m_bActive;
if (!m_bActive) return false;
if (key == KEY_BACKSPACE) {
PopList();
return false;
}
if (m_nStackSize) {
if (m_ListStack[m_nStackSize - 1])
m_ListStack[m_nStackSize - 1]->KeyEvent(key);
}
}
return false;
}
@ -84,6 +101,9 @@ bool GUI::KeyEvent(ButtonCode_t key) {
#define ADD_FLOAT(list, var) \
list_##list->AddElement(new GUIListElement_Var(new CatVar(var, CatVar_t::CV_FLOAT)));
#define ADD_VAR(list, var) \
list_##list->AddElement(new GUIListElement_Var(var));
void GUI::Setup() {
CREATE_LIST(main, "MAIN");
@ -106,24 +126,24 @@ void GUI::Setup() {
ADD_SUBLIST(main, autoheal);
ADD_SUBLIST(main, bhop);
ADD_SWITCH(aimbot, g_phAimbot->v_bEnabled);
ADD_VAR(aimbot, g_phAimbot->v_bEnabled);
// TODO enums
ADD_INT(aimbot, g_phAimbot->v_iAimKeyMode);
ADD_INT(aimbot, g_phAimbot->v_iAimKey);
ADD_INT(aimbot, g_phAimbot->v_iHitbox);
ADD_SWITCH(aimbot, g_phAimbot->v_bAutoHitbox);
ADD_SWITCH(aimbot, g_phAimbot->v_bPrediction);
ADD_SWITCH(aimbot, g_phAimbot->v_bAutoShoot);
ADD_SWITCH(aimbot, g_phAimbot->v_bSilent);
ADD_SWITCH(aimbot, g_phAimbot->v_bZoomedOnly);
ADD_SWITCH(aimbot, g_phAimbot->v_bRespectCloak);
ADD_SWITCH(aimbot, g_phAimbot->v_bAimBuildings);
ADD_FLOAT(aimbot, g_phAimbot->v_fFOV);
ADD_SWITCH(aimbot, g_phAimbot->v_bMachinaPenetration);
ADD_VAR(aimbot, g_phAimbot->v_eAimKeyMode);
ADD_VAR(aimbot, g_phAimbot->v_eAimKey);
ADD_VAR(aimbot, g_phAimbot->v_eHitbox);
ADD_VAR(aimbot, g_phAimbot->v_bAutoHitbox);
ADD_VAR(aimbot, g_phAimbot->v_bPrediction);
ADD_VAR(aimbot, g_phAimbot->v_bAutoShoot);
ADD_VAR(aimbot, g_phAimbot->v_bSilent);
ADD_VAR(aimbot, g_phAimbot->v_bZoomedOnly);
ADD_VAR(aimbot, g_phAimbot->v_bRespectCloak);
ADD_VAR(aimbot, g_phAimbot->v_bAimBuildings);
ADD_VAR(aimbot, g_phAimbot->v_fFOV);
ADD_VAR(aimbot, g_phAimbot->v_bMachinaPenetration);
CREATE_LIST(aimbot_smooth, "Smooth")
ADD_SUBLIST(aimbot, aimbot_smooth);
ADD_SWITCH(aimbot_smooth, g_phAimbot->v_bSmooth);
ADD_INT(aimbot, g_phAimbot->v_iSeenDelay);
ADD_VAR(aimbot_smooth, g_phAimbot->v_bSmooth);
ADD_VAR(aimbot, g_phAimbot->v_iSeenDelay);
ADD_SWITCH(antiaim, g_phAntiAim->v_bEnabled);
ADD_FLOAT(antiaim, g_phAntiAim->v_flPitch);

View File

@ -23,9 +23,13 @@ public:
void PushList(const char* id);
void PopList();
void UpdateKeys();
void Setup();
bool m_bKeysInit;
bool m_bPressedState[ButtonCode_t::KEY_COUNT];
int m_iPressedFrame[ButtonCode_t::KEY_COUNT];
GUI_List** m_Lists;
GUI_List** m_ListStack;
int m_nListCount;

View File

@ -85,7 +85,7 @@ void hack::Hk_PaintTraverse(void* p, unsigned int vp, bool fr, bool ar) {
}
SEGV_BEGIN;
((PaintTraverse_t*)hooks::hkPanel->GetMethod(hooks::offPaintTraverse))(p, vp, fr, ar);
SAFE_CALL(((PaintTraverse_t*)hooks::hkPanel->GetMethod(hooks::offPaintTraverse))(p, vp, fr, ar));
// Because of single-multi thread shit I'm gonna put this thing riiiight here.
if (g_phFollowBot->v_bEnabled->GetBool()) {
ipc_client_seg* seg_g = g_phFollowBot->m_pIPC->GetClientSegment(0);
@ -156,6 +156,7 @@ void hack::Hk_PaintTraverse(void* p, unsigned int vp, bool fr, bool ar) {
}
}
}
g_pGUI->UpdateKeys();
g_pGUI->Draw();
DrawStrings();
}
@ -365,6 +366,12 @@ void hack::CC_Cat(const CCommand& args) {
interfaces::cvar->ConsoleColorPrintf(colors::red, "[DEVELOPER BUILD]\n");
}
typedef bool(HandleInputEvent_t)(IMatSystemSurface* thisptr, const InputEvent_t& event);
bool hk_HandleInputEvent(IMatSystemSurface* thisptr, const InputEvent_t& event) {
//logging::Info("Handling event %u [%u]", event.m_nType, event.m_nData);
return ((HandleInputEvent_t*)hooks::hkMatSurface->GetMethod(hooks::offHandleInputEvent))(thisptr, event);
}
void hack::Initialize() {
logging::Initialize();
prctl(PR_SET_DUMPABLE,0,42,42,42);
@ -382,6 +389,14 @@ void hack::Initialize() {
draw::Initialize();
logging::Info("Colorizing...");
colors::Init();
logging::Info("Boosting luck...");
uintptr_t mmmf = (gSignatures.GetClientSignature("C7 44 24 04 09 00 00 00 BB ? ? ? ? C7 04 24 00 00 00 00 E8 ? ? ? ? BA ? ? ? ? 85 C0 B8 ? ? ? ? 0F 44 DA") + 37);
if (mmmf) {
unsigned char patch1[] = { 0x89, 0xD3, 0x90 };
unsigned char patch2[] = { 0x89, 0xC2, 0x90 };
Patch((void*)mmmf, (void*)patch1, 3);
Patch((void*)(mmmf + 8), (void*)patch2, 3);
} else logging::Info("You are already filled with luck.");
logging::Info("Adding hacks...");
BeginConVars();
@ -421,6 +436,11 @@ void hack::Initialize() {
hooks::hkClient->HookMethod((void*)&hack::Hk_DispatchUserMessage, hooks::offFrameStageNotify + 1);
hooks::hkClient->HookMethod((void*)&Hk_IN_KeyEvent, hooks::offKeyEvent);
hooks::hkClient->Apply();
/*hooks::hkMatSurface = new hooks::VMTHook();
hooks::hkMatSurface->Init((void*)interfaces::matsurface, 0);
hooks::hkMatSurface->HookMethod((void*)hk_HandleInputEvent, hooks::offHandleInputEvent);
hooks::hkMatSurface->Apply();
logging::Info("MatSurface Hooked? %f", interfaces::matsurface->DrawGetAlphaMultiplier());*/
logging::Info("Hooked!");
InitStrings();
logging::Info("Init done!");
@ -436,9 +456,10 @@ void hack::Shutdown() {
logging::Info("Shutting down...");
logging::Shutdown();
ConVar_Unregister();
hooks::hkPanel->Kill();
hooks::hkClientMode->Kill();
hooks::hkClient->Kill();
if (hooks::hkPanel) hooks::hkPanel->Kill();
if (hooks::hkClientMode) hooks::hkClientMode->Kill();
if (hooks::hkClient) hooks::hkClient->Kill();
if (hooks::hkMatSurface) hooks::hkMatSurface->Kill();
for (IHack* i_hack : hack::hacks) {
delete i_hack;
}

View File

@ -16,7 +16,7 @@
#define CREATE_MOVE(x) \
g_ph##x->CreateMove(thisptr, inputSample, cmd)
#define DEBUG_SEGV false
#define DEBUG_SEGV true
#if DEBUG_SEGV == true

View File

@ -38,41 +38,51 @@ const char* Aimbot::GetName() {
}
/* null-safe */
const char* psza__AimKeyMode[] = { "DISABLED", "AIMKEY", "REVERSE", "TOGGLE" };
const char* psza__Hitbox[] = {
"HEAD", "PELVIS", "SPINE 0", "SPINE 1", "SPINE 2", "SPINE 3", "UPPER ARM L", "LOWER ARM L",
"HAND L", "UPPER ARM R", "LOWER ARM R", "HAND R", "HIP L", "KNEE L", "FOOT L", "HIP R",
"KNEE R", "FOOT R"
};
const char* psza__Priority[] = {
"SMART", "FOV", "DISTANCE", "HEALTH"
};
Aimbot::Aimbot() {
target_systems[0] = new TargetSystemSmart();
target_systems[1] = new TargetSystemFOV();
target_systems[2] = new TargetSystemDistance();
m_bAimKeySwitch = false;
this->v_iAimKeyMode = CreateConVar(CON_PREFIX "aimbot_aimkey_mode", "1", "Aimkey Mode");
this->v_bEnabled = CreateConVar(CON_PREFIX "aimbot_enabled", "0", "Enabled");
this->v_iHitbox = CreateConVar(CON_PREFIX "aimbot_hitbox", "0", "Hitbox");
this->v_bAutoHitbox = CreateConVar(CON_PREFIX "aimbot_autohitbox", "1", "Autohitbox");
this->v_bPrediction = CreateConVar(CON_PREFIX "aimbot_prediction", "1", "Latency pred");
this->v_bAutoShoot = CreateConVar(CON_PREFIX "aimbot_autoshoot", "1", "Autoshoot");
this->v_bSilent = CreateConVar(CON_PREFIX "aimbot_silent", "1", "Silent");
this->v_bZoomedOnly = CreateConVar(CON_PREFIX "aimbot_zoomed", "1", "Zoomed Only");
this->v_iAutoShootCharge = CreateConVar(CON_PREFIX "aimbot_autoshoot_charge", "0.0", "Autoshoot Charge");
this->v_iMaxRange = CreateConVar(CON_PREFIX "aimbot_maxrange", "0", "Max distance");
this->v_bRespectCloak = CreateConVar(CON_PREFIX "aimbot_respect_cloak", "1", "Respect cloak");
this->v_bCharge = CreateConVar(CON_PREFIX "aimbot_charge", "0", "Wait for charge");
this->v_bEnabledAttacking = CreateConVar(CON_PREFIX "aimbot_enable_attack_only", "0", "Active when attacking");
this->v_bStrictAttack = CreateConVar(CON_PREFIX "aimbot_strict_attack", "0", "Strict attack");
this->v_bProjectileAimbot = CreateConVar(CON_PREFIX "aimbot_projectile", "1", "Projectile aimbot");
this->v_iOverrideProjSpeed = CreateConVar(CON_PREFIX "aimbot_proj_speed", "0", "Projectile speed");
this->v_bDebug = CreateConVar(CON_PREFIX "aimbot_debug", "0", "Debug");
this->v_fFOV = CreateConVar(CON_PREFIX "aimbot_fov", "0", "FOV");
this->v_bMachinaPenetration = CreateConVar(CON_PREFIX "aimbot_machina", "0", "Machina Mode");
this->v_bSmooth = CreateConVar(CON_PREFIX "aimbot_smooth", "0", "Smooth");
this->v_flAutoShootHuntsmanCharge = CreateConVar(CON_PREFIX "aimbot_huntsman_charge", "0.5", "Huntsman charge");
this->v_fSmoothValue = CreateConVar(CON_PREFIX "aimbot_smooth_value", "0.2", "Smooth value");
this->v_iAimKey = CreateConVar(CON_PREFIX "aimbot_aimkey", "0", "Aimkey");
this->v_iPriorityMode = CreateConVar(CON_PREFIX "aimbot_prioritymode", "0", "Priority mode");
this->v_bMinigunFix = CreateConVar(CON_PREFIX "aimbot_minigun_fix", "1", "Minigun fix");
v_bAimBuildings = CreateConVar(CON_PREFIX "aimbot_buildings", "1", "Aim @ Buildings");
v_bActiveOnlyWhenCanShoot = CreateConVar(CON_PREFIX "aimbot_only_when_can_shoot", "1", "Active when can shoot");
v_fSmoothAutoshootTreshold = CreateConVar(CON_PREFIX "aimbot_smooth_autoshoot_treshold", "0.01", "Smooth autoshoot");
this->v_fSmoothRandomness = CreateConVar(CON_PREFIX "aimbot_smooth_randomness", "1.0", "Smooth randomness");
this->v_iSeenDelay = CreateConVar(CON_PREFIX "aimbot_delay", "0", "Aimbot delay");
this->v_eAimKeyMode = CREATE_CV(new CatEnum(psza__AimKeyMode, ARRAYSIZE(psza__AimKeyMode)), "aimbot_aimkey_mode", "1", "Aimkey Mode");
this->v_bEnabled = CREATE_CV(CV_SWITCH, "aimbot_enabled", "0", "Enabled");
this->v_eHitbox = CREATE_CV(new CatEnum(psza__Hitbox, ARRAYSIZE(psza__Hitbox)), "aimbot_hitbox", "0", "Hitbox");
this->v_bAutoHitbox = CREATE_CV(CV_SWITCH, "aimbot_autohitbox", "1", "Autohitbox");
this->v_bPrediction = CREATE_CV(CV_SWITCH, "aimbot_prediction", "1", "Latency pred");
this->v_bAutoShoot = CREATE_CV(CV_SWITCH, "aimbot_autoshoot", "1", "Autoshoot");
this->v_bSilent = CREATE_CV(CV_SWITCH, "aimbot_silent", "1", "Silent");
this->v_bZoomedOnly = CREATE_CV(CV_SWITCH, "aimbot_zoomed", "1", "Zoomed Only");
this->v_iAutoShootCharge = CREATE_CV(CV_FLOAT, "aimbot_autoshoot_charge", "0.0", "Autoshoot Charge");
this->v_iMaxRange = CREATE_CV(CV_INT, "aimbot_maxrange", "0", "Max distance");
this->v_bRespectCloak = CREATE_CV(CV_SWITCH, "aimbot_respect_cloak", "1", "Respect cloak");
this->v_bCharge = CREATE_CV(CV_SWITCH, "aimbot_charge", "0", "Wait for charge");
this->v_bEnabledAttacking = CREATE_CV(CV_SWITCH, "aimbot_enable_attack_only", "0", "Active when attacking");
this->v_bTriggerMode = CREATE_CV(CV_SWITCH, "aimbot_triggerlock", "0", "Trigger lock");
this->v_bProjectileAimbot = CREATE_CV(CV_SWITCH, "aimbot_projectile", "1", "Projectile aimbot");
this->v_fOverrideProjSpeed = CREATE_CV(CV_FLOAT, "aimbot_proj_speed", "0", "Projectile speed");
this->v_bDebug = CREATE_CV(CV_SWITCH, "aimbot_debug", "0", "Debug");
this->v_fFOV = CREATE_CV(CV_FLOAT, "aimbot_fov", "0", "FOV");
this->v_bMachinaPenetration = CREATE_CV(CV_SWITCH, "aimbot_machina", "0", "Machina Mode");
this->v_bSmooth = CREATE_CV(CV_SWITCH, "aimbot_smooth", "0", "Smooth");
this->v_fAutoShootHuntsmanCharge = CREATE_CV(CV_FLOAT, "aimbot_huntsman_charge", "0.5", "Huntsman charge");
this->v_fSmoothValue = CREATE_CV(CV_FLOAT, "aimbot_smooth_value", "0.2", "Smooth value");
this->v_eAimKey = CREATE_CV(CV_INT, "aimbot_aimkey", "0", "Aimkey");
this->v_ePriorityMode = CREATE_CV(new CatEnum(psza__Priority, ARRAYSIZE(psza__Priority)), "aimbot_prioritymode", "0", "Priority mode");
v_bAimBuildings = CREATE_CV(CV_SWITCH, "aimbot_buildings", "1", "Aim @ Buildings");
v_bActiveOnlyWhenCanShoot = CREATE_CV(CV_SWITCH, "aimbot_only_when_can_shoot", "1", "Active when can shoot");
v_fSmoothAutoshootTreshold = CREATE_CV(CV_FLOAT, "aimbot_smooth_autoshoot_treshold", "0.01", "Smooth autoshoot");
this->v_fSmoothRandomness = CREATE_CV(CV_FLOAT, "aimbot_smooth_randomness", "1.0", "Smooth randomness");
this->v_iSeenDelay = CREATE_CV(CV_INT, "aimbot_delay", "0", "Aimbot delay");
fix_silent = false;
}
@ -80,9 +90,9 @@ bool Aimbot::CreateMove(void*, float, CUserCmd* cmd) {
if (!this->v_bEnabled->GetBool()) return true;
if (g_pLocalPlayer->entity && g_pLocalPlayer->life_state) return true;
this->m_iLastTarget = -1;
if (this->v_iAimKey->GetBool() && this->v_iAimKeyMode->GetBool()) {
bool key_down = interfaces::input->IsButtonDown((ButtonCode_t)this->v_iAimKey->GetInt());
switch (this->v_iAimKeyMode->GetInt()) {
if (this->v_eAimKey->GetBool() && this->v_eAimKeyMode->GetBool()) {
bool key_down = interfaces::input->IsButtonDown((ButtonCode_t)this->v_eAimKey->GetInt());
switch (this->v_eAimKeyMode->GetInt()) {
case AimKeyMode_t::PRESS_TO_ENABLE:
if (key_down) break;
else return true;
@ -136,13 +146,13 @@ bool Aimbot::CreateMove(void*, float, CUserCmd* cmd) {
if(cmd->buttons & IN_USE) return true;
if (this->v_bStrictAttack->GetBool() ) {
if (this->v_bTriggerMode->GetBool() ) {
cmd->buttons = cmd->buttons &~ IN_ATTACK;
}
IClientEntity* player = g_pLocalPlayer->entity;
if (!player) return true;
if (player->IsDormant()) return true;
m_iHitbox = this->v_iHitbox->GetInt();
m_iHitbox = this->v_eHitbox->GetInt();
if (this->v_bAutoHitbox->GetBool()) m_iHitbox = 7;
if (g_pLocalPlayer->weapon && this->v_bAutoHitbox->GetBool()) {
switch (g_pLocalPlayer->weapon->GetClientClass()->m_ClassID) {
@ -192,7 +202,7 @@ bool Aimbot::CreateMove(void*, float, CUserCmd* cmd) {
if (ent == 0) continue;
if (!(IsPlayer(ent) || IsBuilding(ent))) continue;
if (ShouldTarget(ent)) {
if (GetWeaponMode(player) == weaponmode::weapon_melee || this->v_iPriorityMode->GetInt() == 2) {
if (GetWeaponMode(player) == weaponmode::weapon_melee || this->v_ePriorityMode->GetInt() == 2) {
Vector result;
if (IsBuilding(ent)) {
result = GetBuildingPosition(ent);
@ -205,7 +215,7 @@ bool Aimbot::CreateMove(void*, float, CUserCmd* cmd) {
target_highest = ent;
}
} else {
switch (this->v_iPriorityMode->GetInt()) {
switch (this->v_ePriorityMode->GetInt()) {
case 0: {
int scr = GetScoreForEntity(ent);
if (scr > target_highest_score) {
@ -288,7 +298,7 @@ bool Aimbot::ShouldTarget(IClientEntity* entity) {
char life_state = GetEntityValue<char>(entity, netvar.iLifeState);
if (life_state) return false;
if (!player) return false;
if (v_bRespectCloak->GetBool() && (GetEntityValue<int>(entity, netvar.iCond) & cond::cloaked)) return false;
if (v_bRespectCloak->GetBool() && IsPlayerInvisible(entity)) return false;
int health = GetEntityValue<int>(entity, netvar.iHealth);
/*if (this->v_bCharge->GetBool() && (GetEntityValue<int>(player, eoffsets.iClass) == 2)) {
int rifleHandle = GetEntityValue<int>(player, eoffsets.hActiveWeapon);
@ -316,7 +326,7 @@ bool Aimbot::ShouldTarget(IClientEntity* entity) {
} else {
if (v_bMachinaPenetration->GetBool()) {
if (GetHitboxPosition(entity, m_iHitbox, resultAim)) return false;
if (!IsEntityVisiblePenetration(entity, v_iHitbox->GetInt())) return false;
if (!IsEntityVisiblePenetration(entity, v_eHitbox->GetInt())) return false;
} else {
if (GetHitboxPosition(entity, m_iHitbox, resultAim)) return false;
if (!IsEntityVisible(entity, m_iHitbox)) return false;
@ -371,8 +381,8 @@ bool Aimbot::Aim(IClientEntity* entity, CUserCmd* cmd) {
}
if (v_bProjectileAimbot->GetBool()) {
if (m_bProjectileMode) {
if (v_iOverrideProjSpeed->GetBool())
m_flProjSpeed = v_iOverrideProjSpeed->GetFloat();
if (v_fOverrideProjSpeed->GetBool())
m_flProjSpeed = v_fOverrideProjSpeed->GetFloat();
hit = ProjectilePrediction(entity, m_iHitbox, m_flProjSpeed, m_flProjGravity);
}
}
@ -414,7 +424,7 @@ bool Aimbot::Aim(IClientEntity* entity, CUserCmd* cmd) {
charge = interfaces::gvars->curtime - begincharge;
if (charge > 1.0f) charge = 1.0f;
}
if (charge >= v_flAutoShootHuntsmanCharge->GetFloat()) {
if (charge >= v_fAutoShootHuntsmanCharge->GetFloat()) {
cmd->buttons &= ~IN_ATTACK;
}
} else {

View File

@ -40,36 +40,36 @@ public:
int m_iHitbox;
bool m_bAimKeySwitch;
int m_nMinigunFixTicks;
ConVar* v_iAimKey;
ConVar* v_iAimKeyMode;
ConVar* v_bMinigunFix;
ConVar* v_bSmooth;
ConVar* v_fSmoothValue;
ConVar* v_bDebug;
ConVar* v_bEnabled;
ConVar* v_fFOV;
ConVar* v_iHitbox;
ConVar* v_bAutoHitbox;
ConVar* v_iSeenDelay;
ConVar* v_bPrediction;
ConVar* v_bAutoShoot;
ConVar* v_bSilent;
ConVar* v_bZoomedOnly;
ConVar* v_iAutoShootCharge;
ConVar* v_flAutoShootHuntsmanCharge;
ConVar* v_iMaxRange;
ConVar* v_bRespectCloak;
ConVar* v_bCharge;
ConVar* v_bEnabledAttacking;
ConVar* v_bStrictAttack;
ConVar* v_bProjectileAimbot;
ConVar* v_iOverrideProjSpeed;
ConVar* v_bMachinaPenetration;
ConVar* v_bAimBuildings;
ConVar* v_bActiveOnlyWhenCanShoot;
ConVar* v_fSmoothAutoshootTreshold;
ConVar* v_fSmoothRandomness;
ConVar* v_iPriorityMode;
CatVar* v_eAimKey;
CatVar* v_eAimKeyMode;
CatVar* v_bSmooth;
CatVar* v_fSmoothValue;
CatVar* v_bDebug;
CatVar* v_bEnabled;
CatVar* v_fFOV;
CatVar* v_eHitbox;
CatVar* v_bAutoHitbox;
CatVar* v_iSeenDelay;
CatVar* v_bPrediction;
CatVar* v_bAutoShoot;
CatVar* v_bSilent;
CatVar* v_bZoomedOnly;
CatVar* v_iAutoShootCharge;
CatVar* v_fAutoShootHuntsmanCharge;
CatVar* v_iMaxRange;
CatVar* v_bRespectCloak;
CatVar* v_bCharge;
CatVar* v_bEnabledAttacking;
CatVar* v_bTriggerMode;
CatVar* v_bProjectileAimbot;
CatVar* v_fOverrideProjSpeed;
CatVar* v_bMachinaPenetration;
CatVar* v_bAimBuildings;
CatVar* v_bActiveOnlyWhenCanShoot;
CatVar* v_fSmoothAutoshootTreshold;
CatVar* v_fSmoothRandomness;
CatVar* v_ePriorityMode;
};
DECLARE_HACK_SINGLETON(Aimbot);

View File

@ -59,7 +59,7 @@ bool AutoHeal::CanHeal(int idx) {
if (g_pLocalPlayer->team != GetEntityValue<int>(ent, netvar.iTeamNum)) return false;
if (g_pLocalPlayer->v_Origin.DistToSqr(ent->GetAbsOrigin()) > 420 * 420) return false;
if (!IsEntityVisible(ent, 7)) return false;
if (GetEntityValue<int>(ent, netvar.iCond) & cond::cloaked) return false;
if (IsPlayerInvisible(ent)) return false;
return true;
}

View File

@ -69,7 +69,7 @@ ESP::ESP() {
void ESP::DrawBox(CachedEntity* ent, Color clr, float widthFactor, float addHeight, bool healthbar, int health, int healthmax) {
if (!CheckCE(ent)) return;
bool cloak = ent->m_iClassID == ClassID::CTFPlayer && (ent->Var<int>(netvar.iCond) & cond::cloaked);
bool cloak = ent->m_iClassID == ClassID::CTFPlayer && IsPlayerInvisible(ent->m_pEntity);//(ent->Var<int>(netvar.iCond) & cond::cloaked);
Vector min, max;
ent->m_pEntity->GetRenderBounds(min, max);
Vector origin = ent->m_pEntity->GetAbsOrigin();
@ -120,7 +120,7 @@ void ESP::ProcessEntityPT(CachedEntity* ent) {
Color fg = colors::EntityF(ent);
switch (ent->m_iClassID) {
case ClassID::CTFPlayer: {
bool cloak = ent->Var<int>(netvar.iCond) & cond::cloaked;
bool cloak = IsPlayerInvisible(ent->m_pEntity);//ent->Var<int>(netvar.iCond) & cond::cloaked;
if (v_bLegit->GetBool() && ent->m_iTeam != g_pLocalPlayer->team && !GetRelation(ent->m_pEntity)) {
if (cloak) return;
if (ent->m_lLastSeen > v_iLegitSeenTicks->GetInt()) {
@ -272,7 +272,8 @@ void ESP::ProcessEntity(CachedEntity* ent) {
// If target is enemy, always show powerups, if player is teammate, show powerups
// only if bTeammatePowerup or bTeammates is true
if (v_bLegit->GetBool() && ent->m_iTeam != g_pLocalPlayer->team && !GetRelation(ent->m_pEntity)) {
if (pcond & cond::cloaked) return;
//if (pcond & cond::cloaked) return;
if (IsPlayerInvisible(ent->m_pEntity)) return;
if (ent->m_lLastSeen > (unsigned)v_iLegitSeenTicks->GetInt()) {
return;
}

View File

@ -10,6 +10,7 @@
class CUserCmd;
class ConVar;
class CatVar;
class ConCommand;
class CCommand;

View File

@ -323,6 +323,7 @@ void Misc::PaintTraverse(void*, unsigned int, bool, bool) {
AddSideString(colors::white, colors::black, "ToGround: %f", DistanceToGround(g_pLocalPlayer->v_Origin));
AddSideString(colors::white, colors::black, "ServerTime: %f", GetEntityValue<float>(g_pLocalPlayer->entity, netvar.nTickBase) * interfaces::gvars->interval_per_tick);
AddSideString(colors::white, colors::black, "CurTime: %f", interfaces::gvars->curtime);
AddSideString(colors::white, colors::black, "FrameCount: %i", interfaces::gvars->framecount);
float speed, gravity;
GetProjectileData(g_pLocalPlayer->weapon, speed, gravity);
AddSideString(colors::white, colors::black, "Speed: %f", speed);

View File

@ -89,7 +89,7 @@ bool Triggerbot::CreateMove(void* thisptr, float sampl, CUserCmd* cmd) {
if (rel == relation::FRIEND || rel == relation::DEVELOPER) return true;
if (IsPlayerInvulnerable(entity)) return true;
if (!this->v_bIgnoreCloak->GetBool() &&
((GetEntityValue<int>(entity, netvar.iCond)) & cond::cloaked)) return true;
(IsPlayerInvisible(entity))) return true;
int health = GetEntityValue<int>(entity, netvar.iHealth);
bool bodyshot = false;
if (g_pLocalPlayer->clazz == tf_class::tf_sniper) {

View File

@ -10,6 +10,7 @@
#include "sdk.h"
#include <pwd.h>
#include <sys/mman.h>
FILE* hConVarsFile = 0;
void BeginConVars() {
@ -296,7 +297,12 @@ float deg2rad(float deg) {
}
bool IsPlayerInvisible(IClientEntity* player) {
return false; // TODO stumpy.flv
int cond = GetEntityValue<int>(player, netvar.iCond);
int mask = cloaked;
int cond_1 = GetEntityValue<int>(player, netvar.iCond1);
int mask_1 = cond_ex2::cloak_spell | cond_ex2::cloak_spell_fading;
int mask_v = on_fire | jarate | milk;
return !((cond & mask_v) || !((cond & mask) || (cond_1 & mask_1)));
}
float RandFloatRange(float min, float max)
@ -460,6 +466,13 @@ bool IsProjectile(IClientEntity* ent) {
return false;
}
void Patch(void* address, void* patch, size_t length) {
void* page = (void*)((uintptr_t)address &~ 0xFFF);
mprotect(page, 0xFFF, PROT_WRITE | PROT_EXEC);
memcpy(address, patch, length);
mprotect(page, 0xFFF, PROT_EXEC);
}
bool IsProjectileCrit(IClientEntity* ent) {
if (!ent) return false;
switch (ent->GetClientClass()->m_ClassID) {

View File

@ -69,6 +69,8 @@ bool IsSentryBuster(IClientEntity* ent);
char* strfmt(const char* fmt, ...);
bool IsAmbassador(IClientEntity* ent);
void Patch(void* address, void* patch, size_t length);
void AimAt(Vector origin, Vector target, CUserCmd* cmd);
void AimAtHitbox(IClientEntity* ent, int hitbox, CUserCmd* cmd);

View File

@ -19,6 +19,7 @@ unsigned int hooks::offCanPacket = 57;
unsigned int hooks::offSendNetMsg = 41;
unsigned int hooks::offShutdown = 37;
unsigned int hooks::offKeyEvent = 20;
unsigned int hooks::offHandleInputEvent = 78;
// This thing had been copypasted from somewhere, maybe from F1Public.
@ -74,3 +75,4 @@ hooks::VMTHook* hooks::hkPanel = 0;
hooks::VMTHook* hooks::hkClient = 0;
hooks::VMTHook* hooks::hkNetChannel = 0;
hooks::VMTHook* hooks::hkClientDLL = 0;
hooks::VMTHook* hooks::hkMatSurface = 0;

View File

@ -36,7 +36,9 @@ extern VMTHook* hkClientMode;
extern VMTHook* hkClient;
extern VMTHook* hkNetChannel;
extern VMTHook* hkClientDLL;
extern VMTHook* hkMatSurface;
extern unsigned int offHandleInputEvent;
extern unsigned int offPaintTraverse;
extern unsigned int offCreateMove;
extern unsigned int offOverrideView;

View File

@ -31,6 +31,7 @@ CGlobalVarsBase* interfaces::gvars = 0;
IPrediction* interfaces::prediction = 0;
IGameMovement* interfaces::gamemovement = 0;
IInput* interfaces::iinput = 0;
IMatSystemSurface* interfaces::matsurface = 0;
void interfaces::CreateInterfaces() {
interfaces::centerPrint = reinterpret_cast<ICenterPrint*>(sharedobj::client->fptr("VCENTERPRINT002", nullptr));
@ -56,5 +57,6 @@ void interfaces::CreateInterfaces() {
interfaces::prediction = reinterpret_cast<IPrediction*>(sharedobj::client->CreateInterface("VClientPrediction001"));
interfaces::gamemovement = reinterpret_cast<IGameMovement*>(sharedobj::client->CreateInterface("GameMovement001"));
interfaces::iinput = **(reinterpret_cast<IInput***>((uintptr_t)1 + gSignatures.GetClientSignature("A1 ? ? ? ? C6 05 ? ? ? ? 01 8B 10 89 04 24 FF 92 B4 00 00 00 A1 ? ? ? ? 8B 10")));
interfaces::matsurface = **reinterpret_cast<IMatSystemSurface***>((uintptr_t)19 + gSignatures.GetClientSignature("FF 92 94 02 00 00 8B 8D C4 FE FF FF 89 85 B0 FE FF FF A1 ? ? ? ? 8B 10 89 4C 24 0C"));
}

View File

@ -30,6 +30,7 @@ class CGlobalVarsBase;
class IPrediction;
class IGameMovement;
class IInput;
class IMatSystemSurface;
namespace interfaces {
@ -50,6 +51,7 @@ extern CGlobalVarsBase* gvars;
extern IPrediction* prediction;
extern IGameMovement* gamemovement;
extern IInput* iinput;
extern IMatSystemSurface* matsurface;
void CreateInterfaces();

View File

@ -36,6 +36,7 @@
#include <iclient.h>
#include <iserver.h>
#include <view_shared.h>
#include <VGuiMatSurface/IMatSystemSurface.h>
#include "sdk/in_buttons.h"
#include "sdk/iinput.h"