This commit is contained in:
LightCat 2018-08-28 15:24:56 +02:00
parent 8e62ac5cf6
commit 904eddf1b6
15 changed files with 98 additions and 63 deletions

13
TODO
View File

@ -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 // //
// // // //
//------------------------------------------------------------------------------------------------------------------// // //------------------------------------------------------------------------------------------------------------------// //

View File

@ -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>

View File

@ -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()
{ {

View File

@ -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

View File

@ -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);
}
} }
} }
} }

View File

@ -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,

View File

@ -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;
} }

View File

@ -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

View File

@ -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) &&

View File

@ -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;
} }

View File

@ -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;
} }
} }
} }

View File

@ -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;
} }

View File

@ -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)

View File

@ -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

View File

@ -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{};