diff --git a/src/hacks/AutoBackstab.cpp b/src/hacks/AutoBackstab.cpp index a35306a2..d554e270 100644 --- a/src/hacks/AutoBackstab.cpp +++ b/src/hacks/AutoBackstab.cpp @@ -103,69 +103,41 @@ static void doBacktrackStab() CachedEntity *ent; if (hacks::shared::backtrack::iBestTarget < 1) return; + // Get the best ent decided by backtrack (no reason to do work twice) ent = ENTITY(hacks::shared::backtrack::iBestTarget); if (!ent->m_bEnemy() || !player_tools::shouldTarget(ent)) return; - auto &btd = hacks::shared::backtrack::headPositions[ent->m_IDX]; - Vector newangle = g_pLocalPlayer->v_OrigViewangles; - std::vector yangles; - float best_scr = FLT_MAX; - hacks::shared::backtrack::BacktrackData *best_tick; - for (int ii = 0; ii < 66; ii++) + // Get the ent's backtrack ticks + auto &btd = hacks::shared::backtrack::headPositions[ent->m_IDX]; + + for (int i = 0; i < 66; i++) { - std::vector yangles_tmp; - auto &i = btd[ii]; - - Vector distcheck = i.entorigin; + auto &btp = btd[i]; + // Check if the backtrack positions are valid + if (!hacks::shared::backtrack::ValidTick(btp, ent)) + continue; + Vector distcheck = btp.entorigin; distcheck.z = g_pLocalPlayer->v_Eye.z; - if (distcheck.DistTo(g_pLocalPlayer->v_Eye) < best_scr && distcheck.DistTo(g_pLocalPlayer->v_Eye) > 20.0f) + if (distcheck.DistTo(g_pLocalPlayer->v_Eye) < 20.0f) + continue; + // Get and calculate an angle to use to backstab the ent + Vector newangle = GetAimAtAngles(g_pLocalPlayer->v_Eye, btp.hitboxes.at(spine_1).center); + if (!angleCheck(ent, btp.entorigin, newangle)) + continue; + Vector &min = btp.collidable.min; + Vector &max = btp.collidable.max; + Vector hit; + if (hacks::shared::triggerbot::CheckLineBox(min, max, g_pLocalPlayer->v_Eye, GetForwardVector(g_pLocalPlayer->v_Eye, newangle, swingrange), hit)) { - for (newangle.y = -180.0f; newangle.y < 180.0f; newangle.y += 5.0f) - { - if (!hacks::shared::backtrack::ValidTick(i, ent)) - continue; - if (!angleCheck(ent, i.entorigin, newangle)) - continue; - - Vector &min = i.collidable.min; - Vector &max = i.collidable.max; - - // Get the min and max for the hitbox - Vector minz(fminf(min.x, max.x), fminf(min.y, max.y), fminf(min.z, max.z)); - Vector maxz(fmaxf(min.x, max.x), fmaxf(min.y, max.y), fmaxf(min.z, max.z)); - - // Shrink the hitbox here - Vector size = maxz - minz; - Vector smod = { size.x * 0.20f, size.y * 0.20f, 0 }; - - // Save the changes to the vectors - minz += smod; - maxz -= smod; - maxz.z += 20.0f; - - Vector hit; - if (hacks::shared::triggerbot::CheckLineBox(minz, maxz, g_pLocalPlayer->v_Eye, GetForwardVector(g_pLocalPlayer->v_Eye, newangle, swingrange), hit)) - yangles_tmp.push_back(newangle.y); - } - if (!yangles_tmp.empty()) - { - yangles.clear(); - best_scr = distcheck.DistTo(g_pLocalPlayer->v_Eye); - best_tick = &i; - yangles = yangles_tmp; - } + current_user_cmd->tick_count = btp.tickcount; + current_user_cmd->viewangles = newangle; + current_user_cmd->buttons |= IN_ATTACK; + g_pLocalPlayer->bUseSilentAngles = true; + if (!*bSendPackets) + *bSendPackets = true; + return; } } - if (!yangles.empty() && best_tick) - { - newangle.y = yangles.at(std::floor((float) yangles.size() / 2)); - current_user_cmd->tick_count = best_tick->tickcount; - current_user_cmd->viewangles = newangle; - current_user_cmd->buttons |= IN_ATTACK; - g_pLocalPlayer->bUseSilentAngles = true; - } - if (!*bSendPackets) - *bSendPackets = true; } static void doLegitBacktrackStab() // lol