diff --git a/include/navparser.hpp b/include/navparser.hpp index 54c8ba3a..e449bf36 100644 --- a/include/navparser.hpp +++ b/include/navparser.hpp @@ -10,7 +10,7 @@ extern bool init; extern bool ReadyForCommands; extern std::vector areas; std::vector findPath(Vector loc, Vector dest); -bool NavTo(Vector dest, bool navToLocalCenter = true, bool persistent = true); +bool NavTo(Vector dest, bool navToLocalCenter = true, bool persistent = true, int instructionPriority = 5); int findClosestNavSquare(Vector vec); bool Prepare(); void CreateMove(); diff --git a/src/hacks/NavBot.cpp b/src/hacks/NavBot.cpp index 7d8f9e85..b10173cd 100644 --- a/src/hacks/NavBot.cpp +++ b/src/hacks/NavBot.cpp @@ -153,8 +153,7 @@ void CreateMove() CachedEntity *med = nearestHealth(); if (CE_GOOD(med)) { - nav::NavTo(med->m_vecOrigin()); - return; + nav::NavTo(med->m_vecOrigin(), true, true , 7); } } if (HasLowAmmo() && cdr.test_and_set(5000)) @@ -162,8 +161,7 @@ void CreateMove() CachedEntity *ammo = nearestAmmo(); if (CE_GOOD(ammo)) { - nav::NavTo(ammo->m_vecOrigin()); - return; + nav::NavTo(ammo->m_vecOrigin(), true, true, 6); } } if (!nav::ReadyForCommands && !spy_mode && !heavy_mode) diff --git a/src/navparser.cpp b/src/navparser.cpp index 546c7b27..899b75c7 100644 --- a/src/navparser.cpp +++ b/src/navparser.cpp @@ -259,13 +259,17 @@ static Timer inactivity{}; static Timer lastJump{}; static std::vector crumbs; static bool ensureArrival; +int priority = 0; -bool NavTo(Vector dest, bool navToLocalCenter, bool persistent) +bool NavTo(Vector dest, bool navToLocalCenter, bool persistent, + int instructionPriority) { if (CE_BAD(LOCAL_E)) return false; if (!Prepare()) return false; + if (instructionPriority <= priority) + return false; auto path = findPath(g_pLocalPlayer->v_Origin, dest); if (path.empty()) return false; @@ -273,9 +277,9 @@ bool NavTo(Vector dest, bool navToLocalCenter, bool persistent) crumbs = std::move(path); if (!navToLocalCenter) crumbs.erase(crumbs.begin()); - inactivity.update(); ensureArrival = persistent; localAreas.clear(); + priority = instructionPriority; return true; } @@ -337,15 +341,23 @@ void CreateMove() return; if (CE_BAD(LOCAL_E)) return; + if (!LOCAL_E->m_bAlivePlayer()) + { + crumbs.clear(); + return; + } clearIgnores(); if (crumbs.empty()) { + priority = 0; ReadyForCommands = true; ensureArrival = false; return; } ReadyForCommands = false; - if (g_pLocalPlayer->v_Origin.DistTo(Vector{crumbs.at(0).x, crumbs.at(0).y, g_pLocalPlayer->v_Origin.z}) < 30.0f) + if (g_pLocalPlayer->v_Origin.DistTo(Vector{ crumbs.at(0).x, crumbs.at(0).y, + g_pLocalPlayer->v_Origin.z }) < + 30.0f) { lastArea = crumbs.at(0); crumbs.erase(crumbs.begin()); @@ -410,7 +422,7 @@ CatCommand navfind("nav_find", "Debug nav find", [](const CCommand &args) { }); CatCommand navpath("nav_path", "Debug nav path", [](const CCommand &args) { - if (NavTo(loc, true, true)) + if (NavTo(loc, true, true, 50 + priority)) { logging::Info("Pathing: Success! Walking to path..."); }