changes
This commit is contained in:
parent
8e62ac5cf6
commit
904eddf1b6
13
TODO
13
TODO
@ -20,23 +20,16 @@ Improve Projectile Aimbot. A lot. // //
|
|||||||
ProjPredOrigin // //
|
ProjPredOrigin // //
|
||||||
MAX -> MIN priority // //
|
MAX -> MIN priority // //
|
||||||
// //
|
// //
|
||||||
Hunter Rifle? // //
|
|
||||||
// //
|
// //
|
||||||
// //
|
// //
|
||||||
Ambassador bodyshotting // //
|
|
||||||
No Trigger Mediguns // //
|
No Trigger Mediguns // //
|
||||||
More projectile weapons aimbot (wrap assassin, wrangler, stickybomb, airstrike) // //
|
More projectile weapons aimbot (wrap assassin, wrangler, stickybomb, airstrike) // //
|
||||||
Auto trigger DR before rockets // //
|
|
||||||
// //
|
// //
|
||||||
// //
|
// //
|
||||||
Make building aimbot compensate for gravity on projectile weapons // //
|
Make building aimbot compensate for gravity on projectile weapons // //
|
||||||
// //
|
// //
|
||||||
add Spectator Silent for projectile weapons // //
|
add Spectator Silent for projectile weapons // //
|
||||||
// //
|
// //
|
||||||
Improve aimbot accuracy // //
|
|
||||||
// //
|
|
||||||
// //
|
|
||||||
// //
|
|
||||||
// //
|
// //
|
||||||
// //
|
// //
|
||||||
//------------------------------------------------------------------------------------------------------------------// //
|
//------------------------------------------------------------------------------------------------------------------// //
|
||||||
@ -97,10 +90,8 @@ dominatesay assistsay worldsay // //
|
|||||||
//Followbots //
|
//Followbots //
|
||||||
//------------------------------------------------------------------------------------------------------------------// //
|
//------------------------------------------------------------------------------------------------------------------// //
|
||||||
// //
|
// //
|
||||||
Proper medic followbot AI, breadcrumb followbot is good but a nav system would be better // //
|
|
||||||
// //
|
// //
|
||||||
Bot option for aiming at owner's prey (just for fun) // //
|
Bot option for aiming at owner's prey (just for fun) // //
|
||||||
Bot pathfinding & navigation files system // //
|
|
||||||
Proper entity classes (actually I might just use a lot of helper functions taking IClientEntity* as first arg) // //
|
Proper entity classes (actually I might just use a lot of helper functions taking IClientEntity* as first arg) // //
|
||||||
// //
|
// //
|
||||||
//------------------------------------------------------------------------------------------------------------------// //
|
//------------------------------------------------------------------------------------------------------------------// //
|
||||||
@ -117,15 +108,11 @@ Proper entity classes (actually I might just use a lot of helper functions takin
|
|||||||
// //
|
// //
|
||||||
Spy alert uses angles // //
|
Spy alert uses angles // //
|
||||||
// //
|
// //
|
||||||
Add ignore gunslinger to melee crit hack // //
|
|
||||||
// //
|
|
||||||
Priority system optimization and testing // //
|
Priority system optimization and testing // //
|
||||||
General optimization and refactoring // //
|
General optimization and refactoring // //
|
||||||
// //
|
// //
|
||||||
XorString or something to make it harder to detect. // //
|
XorString or something to make it harder to detect. // //
|
||||||
// //
|
// //
|
||||||
TF2C teams // //
|
|
||||||
TF2C merc // //
|
|
||||||
HL2DM teams // //
|
HL2DM teams // //
|
||||||
// //
|
// //
|
||||||
//------------------------------------------------------------------------------------------------------------------// //
|
//------------------------------------------------------------------------------------------------------------------// //
|
||||||
|
@ -50,6 +50,7 @@
|
|||||||
<Option name="FakeLeft" value="19"/>
|
<Option name="FakeLeft" value="19"/>
|
||||||
<Option name="FakeRight" value="20"/>
|
<Option name="FakeRight" value="20"/>
|
||||||
<Option name="FakeREdge" value="21"/>
|
<Option name="FakeREdge" value="21"/>
|
||||||
|
<Option name="OmegaFake" value="22"/>
|
||||||
</Select>
|
</Select>
|
||||||
</LabeledObject>
|
</LabeledObject>
|
||||||
</List>
|
</List>
|
||||||
|
@ -168,7 +168,7 @@ struct offsets
|
|||||||
}
|
}
|
||||||
static constexpr uint32_t PreDataUpdate()
|
static constexpr uint32_t PreDataUpdate()
|
||||||
{
|
{
|
||||||
return PlatformOffset(14, undefined, undefined);
|
return PlatformOffset(17, undefined, undefined);
|
||||||
}
|
}
|
||||||
static constexpr uint32_t Paint()
|
static constexpr uint32_t Paint()
|
||||||
{
|
{
|
||||||
|
@ -11,5 +11,5 @@ namespace hacks::tf2::autobackstab
|
|||||||
{
|
{
|
||||||
|
|
||||||
void CreateMove();
|
void CreateMove();
|
||||||
const Vector GetWorldSpaceCenter(CachedEntity *ent);
|
void Draw();
|
||||||
} // namespace hacks::tf2::autobackstab
|
} // namespace hacks::tf2::autobackstab
|
||||||
|
@ -163,13 +163,9 @@ public:
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (AreRandomCritsEnabled(self))
|
if (AreRandomCritsEnabled(self))
|
||||||
{
|
|
||||||
return CalcIsAttackCriticalHelper(self);
|
return CalcIsAttackCriticalHelper(self);
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
return CalcIsAttackCriticalHelperNoCrits(self);
|
return CalcIsAttackCriticalHelperNoCrits(self);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,12 @@ int *g_PredictionRandomSeed = nullptr;
|
|||||||
|
|
||||||
namespace criticals
|
namespace criticals
|
||||||
{
|
{
|
||||||
|
CatCommand test("crit_debug_print", "debug", []() {
|
||||||
|
bool test = (*((unsigned char *) RAW_ENT(LOCAL_E) + 9645) & 2) >> 1;
|
||||||
|
int test2 = (*((unsigned char *) RAW_ENT(LOCAL_E) + 9645) & 2);
|
||||||
|
int test3 = (*((unsigned *) RAW_ENT(LOCAL_E) + 9645));
|
||||||
|
logging::Info("%d, %d, %d", test, test2, test3);
|
||||||
|
});
|
||||||
int find_next_random_crit_for_weapon(IClientEntity *weapon)
|
int find_next_random_crit_for_weapon(IClientEntity *weapon)
|
||||||
{
|
{
|
||||||
int tries = 0, number = current_user_cmd->command_number, found = 0, seed,
|
int tries = 0, number = current_user_cmd->command_number, found = 0, seed,
|
||||||
|
@ -404,10 +404,7 @@ void FakeCrouch(CUserCmd *cmd)
|
|||||||
void ProcessUserCmd(CUserCmd *cmd)
|
void ProcessUserCmd(CUserCmd *cmd)
|
||||||
{
|
{
|
||||||
if (!enable)
|
if (!enable)
|
||||||
{
|
|
||||||
*bSendPackets = true;
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if (!ShouldAA(cmd))
|
if (!ShouldAA(cmd))
|
||||||
return;
|
return;
|
||||||
static bool keepmode = true;
|
static bool keepmode = true;
|
||||||
@ -416,6 +413,7 @@ void ProcessUserCmd(CUserCmd *cmd)
|
|||||||
float &y = cmd->viewangles.y;
|
float &y = cmd->viewangles.y;
|
||||||
static bool flip = false;
|
static bool flip = false;
|
||||||
static bool bsendflip = true;
|
static bool bsendflip = true;
|
||||||
|
static float rngyaw = 0.0f;
|
||||||
bool clamp = !no_clamping;
|
bool clamp = !no_clamping;
|
||||||
switch ((int) yaw_mode)
|
switch ((int) yaw_mode)
|
||||||
{
|
{
|
||||||
@ -546,6 +544,15 @@ void ProcessUserCmd(CUserCmd *cmd)
|
|||||||
y = useEdge(y) + 180.0f;
|
y = useEdge(y) + 180.0f;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 22: // Omegayaw
|
||||||
|
if (*bSendPackets)
|
||||||
|
{
|
||||||
|
rngyaw = RandFloatRange(-180.0f, 180.0f);
|
||||||
|
y = rngyaw;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
y = rngyaw - 180.0f;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -256,4 +256,49 @@ void CreateMove()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
const Vector GetWorldSpaceCenter(CachedEntity *ent)
|
||||||
|
{
|
||||||
|
Vector vMin, vMax;
|
||||||
|
RAW_ENT(ent)->GetRenderBounds(vMin, vMax);
|
||||||
|
Vector vWorldSpaceCenter = RAW_ENT(ent)->GetAbsOrigin();
|
||||||
|
vWorldSpaceCenter.z += (vMin.z + vMax.z) / 2;
|
||||||
|
return vWorldSpaceCenter;
|
||||||
|
}
|
||||||
|
void Draw()
|
||||||
|
{
|
||||||
|
int idx = -1;
|
||||||
|
Vector result{};
|
||||||
|
WhatIAmLookingAt(&idx, &result);
|
||||||
|
if (idx == -1)
|
||||||
|
return;
|
||||||
|
CachedEntity *target = ENTITY(idx);
|
||||||
|
if (CE_BAD(target))
|
||||||
|
return;
|
||||||
|
Vector angle = NET_VECTOR(RAW_ENT(LOCAL_E), netvar.m_angEyeAngles);
|
||||||
|
Vector tarAngle = NET_VECTOR(RAW_ENT(target), netvar.m_angEyeAngles);
|
||||||
|
Vector wsc_spy_to_victim = GetWorldSpaceCenter(target) - GetWorldSpaceCenter(LOCAL_E);
|
||||||
|
wsc_spy_to_victim.z = 0;
|
||||||
|
wsc_spy_to_victim.NormalizeInPlace();
|
||||||
|
|
||||||
|
Vector eye_spy = angle;
|
||||||
|
eye_spy.z = 0;
|
||||||
|
eye_spy.NormalizeInPlace();
|
||||||
|
|
||||||
|
Vector eye_victim = tarAngle;
|
||||||
|
eye_victim.z = 0;
|
||||||
|
eye_victim.NormalizeInPlace();
|
||||||
|
|
||||||
|
float dot1 = DotProduct(wsc_spy_to_victim, eye_victim);
|
||||||
|
float dot2 = DotProduct(wsc_spy_to_victim, eye_spy);
|
||||||
|
float dot3 = DotProduct(eye_spy, eye_victim);
|
||||||
|
bool IsBehind = dot1 <= 0.0f;
|
||||||
|
bool LookingAtVic = dot2 <= 0.5f;
|
||||||
|
bool InBackstabAngleRange = dot3 <= -0.3f;
|
||||||
|
rgba_t col1 = IsBehind ? colors::red : colors::green;
|
||||||
|
rgba_t col2 = LookingAtVic ? colors::red : colors::green;
|
||||||
|
rgba_t col3 = InBackstabAngleRange ? colors::red : colors::green;
|
||||||
|
AddCenterString(format("Behind target: ", dot1), col1);
|
||||||
|
AddCenterString(format("Looking at Target: ", dot2), col2);
|
||||||
|
AddCenterString(format("In Angle Range: ", dot3), col3);
|
||||||
|
}
|
||||||
} // namespace hacks::tf2::autobackstab
|
} // namespace hacks::tf2::autobackstab
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
static settings::Bool autojoin_team{ "autojoin.team", "false" };
|
static settings::Bool autojoin_team{ "autojoin.team", "false" };
|
||||||
static settings::Int autojoin_class{ "autojoin.class", "0" };
|
static settings::Int autojoin_class{ "autojoin.class", "0" };
|
||||||
static settings::Bool auto_queue{ "autojoin.auto-queue", "false" };
|
static settings::Bool auto_queue{ "autojoin.auto-queue", "false" };
|
||||||
|
static settings::Bool party_bypass{ "autojoin.party-bypass", "false" };
|
||||||
|
|
||||||
namespace hacks::shared::autojoin
|
namespace hacks::shared::autojoin
|
||||||
{
|
{
|
||||||
@ -42,7 +43,8 @@ static Timer req_timer{};
|
|||||||
void updateSearch()
|
void updateSearch()
|
||||||
{
|
{
|
||||||
// segfaults for no reason
|
// segfaults for no reason
|
||||||
/*static bool calld = false;
|
static bool calld = false;
|
||||||
|
/*
|
||||||
if (party_bypass && !calld)
|
if (party_bypass && !calld)
|
||||||
{
|
{
|
||||||
static unsigned char patch[] = { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 };
|
static unsigned char patch[] = { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 };
|
||||||
@ -97,6 +99,7 @@ void updateSearch()
|
|||||||
typedef int (*GetPendingInvites_t)(uintptr_t);
|
typedef int (*GetPendingInvites_t)(uintptr_t);
|
||||||
GetPendingInvites_t GetPendingInvites = GetPendingInvites_t(offset1);
|
GetPendingInvites_t GetPendingInvites = GetPendingInvites_t(offset1);
|
||||||
int invites = GetPendingInvites(offset0);
|
int invites = GetPendingInvites(offset0);
|
||||||
|
|
||||||
re::CTFGCClientSystem *gc = re::CTFGCClientSystem::GTFGCClientSystem();
|
re::CTFGCClientSystem *gc = re::CTFGCClientSystem::GTFGCClientSystem();
|
||||||
re::CTFPartyClient *pc = re::CTFPartyClient::GTFPartyClient();
|
re::CTFPartyClient *pc = re::CTFPartyClient::GTFPartyClient();
|
||||||
if (current_user_cmd && gc && gc->BConnectedToMatchServer(false) &&
|
if (current_user_cmd && gc && gc->BConnectedToMatchServer(false) &&
|
||||||
|
@ -261,25 +261,13 @@ bool ValidTick(BacktrackData &i, CachedEntity *ent)
|
|||||||
return true;
|
return true;
|
||||||
if (istickinvalid[ent->m_IDX][i.index])
|
if (istickinvalid[ent->m_IDX][i.index])
|
||||||
return false;
|
return false;
|
||||||
if (hacks::shared::aimbot::IsBacktracking())
|
if (IsVectorVisible(g_pLocalPlayer->v_Eye, i.hitboxes[head].center, true))
|
||||||
{
|
if (fabsf(NET_FLOAT(RAW_ENT(ent), netvar.m_flSimulationTime) * 1000.0f -
|
||||||
if (IsVectorVisible(g_pLocalPlayer->v_Eye, i.hitboxes[head].center,
|
getLatency() - i.simtime * 1000.0f) <= 200.0f)
|
||||||
true))
|
{
|
||||||
if (fabsf(NET_FLOAT(RAW_ENT(ent), netvar.m_flSimulationTime) *
|
istickvalid[ent->m_IDX][i.index] = true;
|
||||||
1000.0f -
|
return true;
|
||||||
getLatency() - i.simtime * 1000.0f) <= 200.0f)
|
}
|
||||||
{
|
|
||||||
istickvalid[ent->m_IDX][i.index] = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (fabsf(NET_FLOAT(RAW_ENT(ent), netvar.m_flSimulationTime) *
|
|
||||||
1000.0f -
|
|
||||||
getLatency() - i.simtime * 1000.0f) <= 200.0f)
|
|
||||||
{
|
|
||||||
istickvalid[ent->m_IDX][i.index] = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
istickinvalid[ent->m_IDX][i.index] = true;
|
istickinvalid[ent->m_IDX][i.index] = true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -492,14 +492,25 @@ void CreateMove()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
int bestscr = INT_MAX;
|
||||||
|
hacks::shared::backtrack::BacktrackData besttick{};
|
||||||
for (auto i : hacks::shared::backtrack::headPositions
|
for (auto i : hacks::shared::backtrack::headPositions
|
||||||
[tar->m_IDX])
|
[tar->m_IDX])
|
||||||
{
|
{
|
||||||
if (!hacks::shared::backtrack::ValidTick(i, tar))
|
if (!hacks::shared::backtrack::ValidTick(i, tar))
|
||||||
continue;
|
{
|
||||||
nav::NavTo(i.entorigin, false, false);
|
int scr = i.tickcount;
|
||||||
break;
|
if (scr < bestscr)
|
||||||
|
{
|
||||||
|
bestscr = scr;
|
||||||
|
besttick = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (besttick.tickcount)
|
||||||
|
nav::NavTo(besttick.entorigin, false, false);
|
||||||
|
else if (!nav::NavTo(tar->m_vecOrigin(), false))
|
||||||
|
last_tar = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ bool CanBacktrack()
|
|||||||
? ENTITY(hacks::shared::backtrack::iBestTarget)
|
? ENTITY(hacks::shared::backtrack::iBestTarget)
|
||||||
: nullptr;
|
: nullptr;
|
||||||
if (CE_BAD(tar))
|
if (CE_BAD(tar))
|
||||||
return false;
|
return true;
|
||||||
for (auto i : hacks::shared::backtrack::headPositions[tar->m_IDX])
|
for (auto i : hacks::shared::backtrack::headPositions[tar->m_IDX])
|
||||||
{
|
{
|
||||||
if (!hacks::shared::backtrack::ValidTick(i, tar))
|
if (!hacks::shared::backtrack::ValidTick(i, tar))
|
||||||
@ -88,10 +88,10 @@ bool CanBacktrack()
|
|||||||
angles.y = i.viewangles;
|
angles.y = i.viewangles;
|
||||||
current_user_cmd->tick_count = i.tickcount;
|
current_user_cmd->tick_count = i.tickcount;
|
||||||
current_user_cmd->buttons |= IN_ATTACK;
|
current_user_cmd->buttons |= IN_ATTACK;
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
// The main "loop" of the triggerbot
|
// The main "loop" of the triggerbot
|
||||||
void CreateMove()
|
void CreateMove()
|
||||||
@ -116,7 +116,7 @@ void CreateMove()
|
|||||||
|
|
||||||
// Check if can backtrack, shoot if we can
|
// Check if can backtrack, shoot if we can
|
||||||
if (hacks::shared::backtrack::isBacktrackEnabled)
|
if (hacks::shared::backtrack::isBacktrackEnabled)
|
||||||
if (!CanBacktrack())
|
if (CanBacktrack())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Check if dormant or null to prevent crashes
|
// Check if dormant or null to prevent crashes
|
||||||
@ -442,7 +442,7 @@ bool HeadPreferable(CachedEntity *target)
|
|||||||
{
|
{
|
||||||
|
|
||||||
// Switch based on the priority type we need
|
// Switch based on the priority type we need
|
||||||
switch ((int) hitbox_mode)
|
switch (*hitbox_mode)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
{ // AUTO-HEAD priority
|
{ // AUTO-HEAD priority
|
||||||
@ -558,25 +558,19 @@ bool UpdateAimkey()
|
|||||||
// Only while key is depressed, enable
|
// Only while key is depressed, enable
|
||||||
case 1:
|
case 1:
|
||||||
if (!key_down)
|
if (!key_down)
|
||||||
{
|
|
||||||
allow_trigger_key = false;
|
allow_trigger_key = false;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
// Only while key is not depressed, enable
|
// Only while key is not depressed, enable
|
||||||
case 2:
|
case 2:
|
||||||
if (key_down)
|
if (key_down)
|
||||||
{
|
|
||||||
allow_trigger_key = false;
|
allow_trigger_key = false;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
// Aimkey acts like a toggle switch
|
// Aimkey acts like a toggle switch
|
||||||
case 3:
|
case 3:
|
||||||
if (!pressed_last_tick && key_down)
|
if (!pressed_last_tick && key_down)
|
||||||
trigger_key_flip = !trigger_key_flip;
|
trigger_key_flip = !trigger_key_flip;
|
||||||
if (!trigger_key_flip)
|
if (!trigger_key_flip)
|
||||||
{
|
|
||||||
allow_trigger_key = false;
|
allow_trigger_key = false;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
pressed_last_tick = key_down;
|
pressed_last_tick = key_down;
|
||||||
}
|
}
|
||||||
|
@ -1155,13 +1155,10 @@ void WhatIAmLookingAt(int *result_eindex, Vector *result_pos)
|
|||||||
if (result_pos)
|
if (result_pos)
|
||||||
*result_pos = trace.endpos;
|
*result_pos = trace.endpos;
|
||||||
if (result_eindex)
|
if (result_eindex)
|
||||||
{
|
*result_eindex = -1;
|
||||||
*result_eindex = 0;
|
|
||||||
}
|
|
||||||
if (trace.m_pEnt && result_eindex)
|
if (trace.m_pEnt && result_eindex)
|
||||||
{
|
|
||||||
*result_eindex = ((IClientEntity *) (trace.m_pEnt))->entindex();
|
*result_eindex = ((IClientEntity *) (trace.m_pEnt))->entindex();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsSentryBuster(CachedEntity *entity)
|
bool IsSentryBuster(CachedEntity *entity)
|
||||||
|
@ -168,6 +168,7 @@ void DrawCheatVisuals()
|
|||||||
{
|
{
|
||||||
criticals::draw();
|
criticals::draw();
|
||||||
}
|
}
|
||||||
|
hacks::tf2::autobackstab::Draw();
|
||||||
#ifndef FEATURE_FIDGET_SPINNER_ENABLED
|
#ifndef FEATURE_FIDGET_SPINNER_ENABLED
|
||||||
DrawSpinner();
|
DrawSpinner();
|
||||||
#endif
|
#endif
|
||||||
|
@ -94,7 +94,7 @@ static void initPlayerlist()
|
|||||||
controller =
|
controller =
|
||||||
std::make_unique<zerokernel::special::PlayerListController>(*pl);
|
std::make_unique<zerokernel::special::PlayerListController>(*pl);
|
||||||
controller->setKickButtonCallback([](int uid) {
|
controller->setKickButtonCallback([](int uid) {
|
||||||
hack::command_stack().push("callvote kick " + uid);
|
hack::command_stack().push(format("callvote kick ", uid));
|
||||||
});
|
});
|
||||||
controller->setOpenSteamCallback([](unsigned steam) {
|
controller->setOpenSteamCallback([](unsigned steam) {
|
||||||
CSteamID id{};
|
CSteamID id{};
|
||||||
|
Reference in New Issue
Block a user