NavBot fixes!

This commit is contained in:
LightCat 2018-08-20 15:53:38 +02:00
parent 9cb761abbe
commit e8f9133764
3 changed files with 52 additions and 26 deletions

View File

@ -1,6 +1,7 @@
// //
// Created by bencat07 on 17.08.18. // Created by bencat07 on 17.08.18.
// //
#include <hacks/Backtrack.hpp>
#include "common.hpp" #include "common.hpp"
#include "navparser.hpp" #include "navparser.hpp"
#include "FollowBot.hpp" #include "FollowBot.hpp"
@ -120,30 +121,38 @@ CachedEntity *nearestAmmo()
} }
return bestent; return bestent;
} }
int last_tar = -1;
CachedEntity *NearestEnemy() CachedEntity *NearestEnemy()
{ {
float bestscr = FLT_MAX; if (last_tar == -1 || nav::ReadyForCommands) {
CachedEntity *bestent = nullptr; float bestscr = FLT_MAX;
for (int i = 0; i < g_IEngine->GetMaxClients(); i++) CachedEntity *bestent = nullptr;
{ for (int i = 0; i < g_IEngine->GetMaxClients(); i++) {
CachedEntity *ent = ENTITY(i); CachedEntity *ent = ENTITY(i);
if (CE_BAD(ent) || ent->m_Type() != ENTITY_PLAYER) if (CE_BAD(ent) || ent->m_Type() != ENTITY_PLAYER)
continue; continue;
if (ent == LOCAL_E || !ent->m_bAlivePlayer() || if (ent == LOCAL_E || !ent->m_bAlivePlayer() ||
ent->m_iTeam() == LOCAL_E->m_iTeam()) ent->m_iTeam() == LOCAL_E->m_iTeam())
continue; continue;
float scr = ent->m_flDistance(); float scr = ent->m_flDistance();
if (g_pPlayerResource->GetClass(ent) == tf_engineer) if (g_pPlayerResource->GetClass(ent) == tf_engineer)
scr *= 5.0f; scr *= 5.0f;
if (g_pPlayerResource->GetClass(ent) == tf_pyro) if (g_pPlayerResource->GetClass(ent) == tf_pyro)
scr *= 7.0f; scr *= 7.0f;
if (scr < bestscr) if (scr < bestscr) {
{ bestscr = scr;
bestscr = scr; bestent = ent;
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 cdr{};
Timer cd2{}; Timer cd2{};
@ -215,6 +224,8 @@ void CreateMove()
nav::NavTo(ammo->m_vecOrigin(), true, true, 6); nav::NavTo(ammo->m_vecOrigin(), true, true, 6);
} }
} }
if ((!HasLowHealth() && nav::priority == 7) || (!HasLowAmmo() && nav::priority == 6))
nav::clearInstructions();
if (enable) if (enable)
{ {
if (!nav::ReadyForCommands && !spy_mode && !heavy_mode) if (!nav::ReadyForCommands && !spy_mode && !heavy_mode)
@ -236,10 +247,10 @@ void CreateMove()
if (random_spot.z) if (random_spot.z)
nav::NavTo(random_spot, true, true); nav::NavTo(random_spot, true, true);
} }
else if (cdr.check(5000)) else
{ {
CachedEntity *tar = NearestEnemy(); CachedEntity *tar = NearestEnemy();
if (CE_BAD(tar)) if (CE_BAD(tar) && last_tar == -1 && nav::ReadyForCommands)
{ {
Vector random_spot; Vector random_spot;
if (cd2.test_and_set(5000)) if (cd2.test_and_set(5000))
@ -252,7 +263,21 @@ void CreateMove()
nav::NavTo(random_spot, false); nav::NavTo(random_spot, false);
return; 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;
}
}
}
} }
} }
} }

View File

@ -115,8 +115,9 @@ void CreateMove()
CachedEntity *ent = FindEntInSight(EffectiveTargetingRange()); CachedEntity *ent = FindEntInSight(EffectiveTargetingRange());
// Check if can backtrack, shoot if we can // Check if can backtrack, shoot if we can
if (!CanBacktrack() || hacks::shared::backtrack::isBacktrackEnabled) if (hacks::shared::backtrack::isBacktrackEnabled)
return; if (!CanBacktrack())
return;
// Check if dormant or null to prevent crashes // Check if dormant or null to prevent crashes
if (CE_BAD(ent)) if (CE_BAD(ent))

View File

@ -437,7 +437,7 @@ void Draw()
draw::WorldToScreen(crumbs[i + 1], wts2)) draw::WorldToScreen(crumbs[i + 1], wts2))
{ {
glez::draw::line(wts1.x, wts1.y, wts2.x - wts1.x, wts2.y - wts1.y, 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; Vector wts;