diff --git a/src/hacks/NavBot.cpp b/src/hacks/NavBot.cpp index 78792fdd..7a642aaa 100644 --- a/src/hacks/NavBot.cpp +++ b/src/hacks/NavBot.cpp @@ -1,6 +1,7 @@ // // Created by bencat07 on 17.08.18. // +#include #include "common.hpp" #include "navparser.hpp" #include "FollowBot.hpp" @@ -120,30 +121,38 @@ CachedEntity *nearestAmmo() } return bestent; } +int last_tar = -1; CachedEntity *NearestEnemy() { - float bestscr = FLT_MAX; - CachedEntity *bestent = nullptr; - for (int i = 0; i < g_IEngine->GetMaxClients(); i++) - { - CachedEntity *ent = ENTITY(i); - if (CE_BAD(ent) || ent->m_Type() != ENTITY_PLAYER) - continue; - if (ent == LOCAL_E || !ent->m_bAlivePlayer() || - ent->m_iTeam() == LOCAL_E->m_iTeam()) - continue; - float scr = ent->m_flDistance(); - if (g_pPlayerResource->GetClass(ent) == tf_engineer) - scr *= 5.0f; - if (g_pPlayerResource->GetClass(ent) == tf_pyro) - scr *= 7.0f; - if (scr < bestscr) - { - bestscr = scr; - bestent = ent; + if (last_tar == -1 || nav::ReadyForCommands) { + float bestscr = FLT_MAX; + CachedEntity *bestent = nullptr; + for (int i = 0; i < g_IEngine->GetMaxClients(); i++) { + CachedEntity *ent = ENTITY(i); + if (CE_BAD(ent) || ent->m_Type() != ENTITY_PLAYER) + continue; + if (ent == LOCAL_E || !ent->m_bAlivePlayer() || + ent->m_iTeam() == LOCAL_E->m_iTeam()) + continue; + float scr = ent->m_flDistance(); + if (g_pPlayerResource->GetClass(ent) == tf_engineer) + scr *= 5.0f; + if (g_pPlayerResource->GetClass(ent) == tf_pyro) + scr *= 7.0f; + if (scr < bestscr) { + bestscr = scr; + bestent = ent; + } } + if (!bestent) + last_tar = -1; + else + last_tar = bestent->m_IDX; + return bestent; } - return bestent; + if (CE_GOOD(ENTITY(last_tar))) + return ENTITY(last_tar); + return nullptr; } Timer cdr{}; Timer cd2{}; @@ -215,6 +224,8 @@ void CreateMove() nav::NavTo(ammo->m_vecOrigin(), true, true, 6); } } + if ((!HasLowHealth() && nav::priority == 7) || (!HasLowAmmo() && nav::priority == 6)) + nav::clearInstructions(); if (enable) { if (!nav::ReadyForCommands && !spy_mode && !heavy_mode) @@ -236,10 +247,10 @@ void CreateMove() if (random_spot.z) nav::NavTo(random_spot, true, true); } - else if (cdr.check(5000)) + else { CachedEntity *tar = NearestEnemy(); - if (CE_BAD(tar)) + if (CE_BAD(tar) && last_tar == -1 && nav::ReadyForCommands) { Vector random_spot; if (cd2.test_and_set(5000)) @@ -252,7 +263,21 @@ void CreateMove() nav::NavTo(random_spot, false); return; } - nav::NavTo(tar->m_vecOrigin(), false); + if (CE_GOOD(tar)) + { + if (!spy_mode || !hacks::shared::backtrack::isBacktrackEnabled) + nav::NavTo(tar->m_vecOrigin(), false); + else + { + for (auto i : hacks::shared::backtrack::headPositions[tar->m_IDX]) + { + if (!hacks::shared::backtrack::ValidTick(i, tar)) + continue; + nav::NavTo(i.entorigin, false, false); + break; + } + } + } } } } diff --git a/src/hacks/Trigger.cpp b/src/hacks/Trigger.cpp index fe7c254c..be9bfe3e 100644 --- a/src/hacks/Trigger.cpp +++ b/src/hacks/Trigger.cpp @@ -115,8 +115,9 @@ void CreateMove() CachedEntity *ent = FindEntInSight(EffectiveTargetingRange()); // Check if can backtrack, shoot if we can - if (!CanBacktrack() || hacks::shared::backtrack::isBacktrackEnabled) - return; + if (hacks::shared::backtrack::isBacktrackEnabled) + if (!CanBacktrack()) + return; // Check if dormant or null to prevent crashes if (CE_BAD(ent)) diff --git a/src/navparser.cpp b/src/navparser.cpp index 8c6c5fad..758f5058 100644 --- a/src/navparser.cpp +++ b/src/navparser.cpp @@ -437,7 +437,7 @@ void Draw() draw::WorldToScreen(crumbs[i + 1], wts2)) { glez::draw::line(wts1.x, wts1.y, wts2.x - wts1.x, wts2.y - wts1.y, - colors::white, 0.1f); + colors::white, 0.3f); } } Vector wts;