Improve auto backstab some more
This commit is contained in:
parent
674f4afd38
commit
1dabe6a672
@ -68,7 +68,7 @@ static void doRageBackstab()
|
|||||||
float swingrange = re::C_TFWeaponBaseMelee::GetSwingRange(RAW_ENT(LOCAL_W));
|
float swingrange = re::C_TFWeaponBaseMelee::GetSwingRange(RAW_ENT(LOCAL_W));
|
||||||
Vector newangle = g_pLocalPlayer->v_OrigViewangles;
|
Vector newangle = g_pLocalPlayer->v_OrigViewangles;
|
||||||
std::vector<float> yangles;
|
std::vector<float> yangles;
|
||||||
for (newangle.y = -180.0f; newangle.y < 180.0f; newangle.y += 2.0f)
|
for (newangle.y = -180.0f; newangle.y < 180.0f; newangle.y += 1.0f)
|
||||||
{
|
{
|
||||||
trace_t trace;
|
trace_t trace;
|
||||||
Ray_t ray;
|
Ray_t ray;
|
||||||
@ -89,14 +89,31 @@ static void doRageBackstab()
|
|||||||
}
|
}
|
||||||
if (!yangles.empty())
|
if (!yangles.empty())
|
||||||
{
|
{
|
||||||
newangle.y = yangles.at(std::floor((float) yangles.size() / 2));
|
std::sort(yangles.begin(), yangles.end(), [](float &a, float &b) { return a < b; });
|
||||||
|
newangle.y = (yangles.at(0) + yangles.at(yangles.size() - 1)) / 2.0f;
|
||||||
current_user_cmd->buttons |= IN_ATTACK;
|
current_user_cmd->buttons |= IN_ATTACK;
|
||||||
current_user_cmd->viewangles = newangle;
|
current_user_cmd->viewangles = newangle;
|
||||||
g_pLocalPlayer->bUseSilentAngles = true;
|
g_pLocalPlayer->bUseSilentAngles = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
static float bestdist = FLT_MAX;
|
||||||
|
static hacks::shared::backtrack::BacktrackData besttick;
|
||||||
|
static void getClosestTick(CachedEntity *ent, std::vector<int> blacklisted_tickcount)
|
||||||
|
{
|
||||||
|
bestdist = FLT_MAX;
|
||||||
|
auto &btd = hacks::shared::backtrack::headPositions[ent->m_IDX];
|
||||||
|
for (auto &i : btd)
|
||||||
|
{
|
||||||
|
if (!blacklisted_tickcount.empty() && std::find(blacklisted_tickcount.begin(), blacklisted_tickcount.end(), i.tickcount) != blacklisted_tickcount.end())
|
||||||
|
continue;
|
||||||
|
if (i.entorigin.DistTo(g_pLocalPlayer->v_Eye) < bestdist)
|
||||||
|
{
|
||||||
|
besttick = i;
|
||||||
|
bestdist = i.entorigin.DistTo(g_pLocalPlayer->v_Eye);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
static void doBacktrackStab()
|
static void doBacktrackStab()
|
||||||
{
|
{
|
||||||
float swingrange = re::C_TFWeaponBaseMelee::GetSwingRange(RAW_ENT(LOCAL_W));
|
float swingrange = re::C_TFWeaponBaseMelee::GetSwingRange(RAW_ENT(LOCAL_W));
|
||||||
@ -106,33 +123,55 @@ static void doBacktrackStab()
|
|||||||
ent = ENTITY(hacks::shared::backtrack::iBestTarget);
|
ent = ENTITY(hacks::shared::backtrack::iBestTarget);
|
||||||
if (!ent->m_bEnemy() || !player_tools::shouldTarget(ent))
|
if (!ent->m_bEnemy() || !player_tools::shouldTarget(ent))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto &btd = hacks::shared::backtrack::headPositions[ent->m_IDX];
|
|
||||||
Vector newangle = g_pLocalPlayer->v_OrigViewangles;
|
Vector newangle = g_pLocalPlayer->v_OrigViewangles;
|
||||||
for (auto &i : btd)
|
static std::vector<int> blacklisted_ticks;
|
||||||
|
besttick = {};
|
||||||
|
getClosestTick(ent, blacklisted_ticks);
|
||||||
|
if (besttick.simtime <= 0.0f)
|
||||||
|
return;
|
||||||
|
std::vector<float> yangles;
|
||||||
|
for (newangle.y = -180.0f; newangle.y < 180.0f; newangle.y += 1.0f)
|
||||||
{
|
{
|
||||||
std::vector<float> yangles;
|
if (!hacks::shared::backtrack::ValidTick(besttick, ent))
|
||||||
for (newangle.y = -180.0f; newangle.y < 180.0f; newangle.y += 2.0f)
|
continue;
|
||||||
|
if (!angleCheck(ent, besttick.entorigin, newangle))
|
||||||
|
continue;
|
||||||
|
Vector hit;
|
||||||
|
if (hacks::shared::triggerbot::CheckLineBox(besttick.collidable.min, besttick.collidable.max, g_pLocalPlayer->v_Eye, GetForwardVector(g_pLocalPlayer->v_Eye, newangle, swingrange), hit))
|
||||||
{
|
{
|
||||||
if (!hacks::shared::backtrack::ValidTick(i, ent))
|
yangles.push_back(newangle.y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int tries = 0;
|
||||||
|
while (yangles.empty() && tries < 10)
|
||||||
|
{
|
||||||
|
tries++;
|
||||||
|
blacklisted_ticks.push_back(besttick.tickcount);
|
||||||
|
getClosestTick(ent, blacklisted_ticks);
|
||||||
|
if (besttick.simtime <= 0.0f)
|
||||||
|
return;
|
||||||
|
for (newangle.y = -180.0f; newangle.y < 180.0f; newangle.y += 1.0f)
|
||||||
|
{
|
||||||
|
if (!hacks::shared::backtrack::ValidTick(besttick, ent))
|
||||||
continue;
|
continue;
|
||||||
if (!angleCheck(ent, i.entorigin, newangle))
|
if (!angleCheck(ent, besttick.entorigin, newangle))
|
||||||
continue;
|
continue;
|
||||||
Vector hit;
|
Vector hit;
|
||||||
if (hacks::shared::triggerbot::CheckLineBox(i.collidable.min, i.collidable.max, g_pLocalPlayer->v_Eye, GetForwardVector(g_pLocalPlayer->v_Eye, newangle, swingrange), hit))
|
if (hacks::shared::triggerbot::CheckLineBox(besttick.collidable.min, besttick.collidable.max, g_pLocalPlayer->v_Eye, GetForwardVector(g_pLocalPlayer->v_Eye, newangle, swingrange), hit))
|
||||||
{
|
{
|
||||||
yangles.push_back(newangle.y);
|
yangles.push_back(newangle.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!yangles.empty())
|
}
|
||||||
{
|
if (!yangles.empty())
|
||||||
newangle.y = yangles.at(std::floor((float) yangles.size() / 2));
|
{
|
||||||
current_user_cmd->tick_count = i.tickcount;
|
std::sort(yangles.begin(), yangles.end(), [](float &a, float &b) { return a < b; });
|
||||||
current_user_cmd->viewangles = newangle;
|
newangle.y = (yangles.at(0) + yangles.at(yangles.size() - 1)) / 2.0f;
|
||||||
current_user_cmd->buttons |= IN_ATTACK;
|
current_user_cmd->tick_count = besttick.tickcount;
|
||||||
g_pLocalPlayer->bUseSilentAngles = true;
|
current_user_cmd->viewangles = newangle;
|
||||||
return;
|
current_user_cmd->buttons |= IN_ATTACK;
|
||||||
}
|
g_pLocalPlayer->bUseSilentAngles = true;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user