From 48715b89e9804d516a844c48d1ae208cff2a5ef2 Mon Sep 17 00:00:00 2001 From: LightCat Date: Wed, 22 Aug 2018 22:42:51 +0200 Subject: [PATCH 1/4] more sniper spot things stuff --- src/hacks/NavBot.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/hacks/NavBot.cpp b/src/hacks/NavBot.cpp index 997148c3..1d4044b4 100644 --- a/src/hacks/NavBot.cpp +++ b/src/hacks/NavBot.cpp @@ -185,14 +185,13 @@ void Init() sniper_spots.size(), preferred_sniper_spots.size(), nest_spots.size()); } -// I doubtwe'd use more than 128 Sniper spots -std::array priority_spots; + +std::unordered_map priority_spots; void initonce() { for (int i = 0; i < afkTicks.size(); i++) afkTicks[i].update(); - for (auto &e :priority_spots) - e = 0; + priority_spots.clear(); cdr.update(); cd2.update(); cd3.update(); From ed63cca1c6ef0ea739c6ded3c6937af6d8b28018 Mon Sep 17 00:00:00 2001 From: LightCat Date: Thu, 23 Aug 2018 14:14:41 +0200 Subject: [PATCH 2/4] more sniper stuff --- src/hacks/NavBot.cpp | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/hacks/NavBot.cpp b/src/hacks/NavBot.cpp index 1d4044b4..e4ffa29d 100644 --- a/src/hacks/NavBot.cpp +++ b/src/hacks/NavBot.cpp @@ -293,11 +293,11 @@ int GetClosestBuilding() return BestBuilding; } -void NavToSniperSpot(int priority) +bool NavToSniperSpot(int priority) { Vector random_spot; if (!sniper_spots.size() && !preferred_sniper_spots.size()) - return; + return false; auto snip_spot = preferred_sniper_spots.size() ? preferred_sniper_spots : sniper_spots; @@ -322,12 +322,13 @@ void NavToSniperSpot(int priority) } if (best_spot == -1) - return; + return false; random_spot = snip_spot.at(best_spot); + bool toret = false; if (random_spot.z) - nav::NavTo(random_spot, false, true, priority); + toret = nav::NavTo(random_spot, false, true, priority); priority_spots[best_spot]++; - return; + return toret; } int follow_target = 0; void CreateMove() @@ -359,15 +360,17 @@ void CreateMove() cd3.update(); bool isready = (spy_mode || heavy_mode || engi_mode) ? 1 : nav::ReadyForCommands; - int waittime = (spy_mode || heavy_mode || engi_mode) ? 100 : 5000; + static int waittime = (spy_mode || heavy_mode || engi_mode) ? 100 : 2000; if (isready && cd3.test_and_set(waittime)) { + waittime = (spy_mode || heavy_mode || engi_mode) ? 100 : 2000; if (!spy_mode && !heavy_mode && !engi_mode) { cd3.update(); if (cd2.test_and_set(5000)) Init(); - NavToSniperSpot(5); + if (!NavToSniperSpot(5)) + waittime = 1; } else if (!engi_mode) { @@ -376,13 +379,17 @@ void CreateMove() { if (cd2.test_and_set(5000)) Init(); - NavToSniperSpot(5); + if (!NavToSniperSpot(5)) + waittime = 1; } if (CE_GOOD(tar)) { if (!spy_mode || !hacks::shared::backtrack::isBacktrackEnabled) - nav::NavTo(tar->m_vecOrigin(), false); + { + if (!nav::NavTo(tar->m_vecOrigin(), false)) + last_tar = -1; + } else { for (auto i : hacks::shared::backtrack::headPositions @@ -507,7 +514,8 @@ void CreateMove() { if (cd2.test_and_set(5000)) Init(); - NavToSniperSpot(1); + if (!NavToSniperSpot(1)) + waittime = 1; return; } } From 1d4fdf2121b2583c783defdd94b15a4f2f1a1160 Mon Sep 17 00:00:00 2001 From: Olek <23708759+Roguezilla@users.noreply.github.com> Date: Thu, 23 Aug 2018 13:31:48 +0100 Subject: [PATCH 3/4] Update CatBot.cpp [VALVE] BenCat07, [23.08.18 13:29] [In reply to roguezilla] no u [VALVE] BenCat07, [23.08.18 13:29] it's open source --- src/hacks/CatBot.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/hacks/CatBot.cpp b/src/hacks/CatBot.cpp index 0b670a80..f61988ac 100644 --- a/src/hacks/CatBot.cpp +++ b/src/hacks/CatBot.cpp @@ -118,7 +118,9 @@ void update_catbot_list() strcasestr(info.name, "zCat") || strcasestr(info.name, "lagger bot") || strcasestr(info.name, "zLag-bot") || - strcasestr(info.name, "crash-bot")) + strcasestr(info.name, "crash-bot") || + strcasestr(info.name, "reichstagbot") + ) { if (human_detecting_map.find(info.friendsID) == human_detecting_map.end()) From a13188317ff8d18b2dcfa863d844f9125bf53043 Mon Sep 17 00:00:00 2001 From: LightCat Date: Fri, 24 Aug 2018 13:00:28 +0200 Subject: [PATCH 4/4] Sentry ignore for NavBots! --- include/navparser.hpp | 43 ++++++++++++++++++++++++++----------------- include/trace.hpp | 14 ++++++++++++++ src/helpers.cpp | 24 +++++++++++++++++------- src/navparser.cpp | 14 ++++++++++++-- src/trace.cpp | 28 ++++++++++++++++++++++++++++ 5 files changed, 97 insertions(+), 26 deletions(-) diff --git a/include/navparser.hpp b/include/navparser.hpp index efd3b794..afa010e9 100644 --- a/include/navparser.hpp +++ b/include/navparser.hpp @@ -33,7 +33,8 @@ class inactivityTracker std::unordered_map, std::pair, boost::hash>> inactives; - std::vector sentryAreas; + std::unordered_map sentryAreas; + std::vector sentries; bool vischeckConnection(std::pair &connection) { @@ -89,36 +90,52 @@ public: i.second.second = 0; } } + bool ShouldCancelPath(std::vector crumbs) + { + for (auto sentry : sentries) + for (auto crumb : crumbs) + { + if (crumb.DistTo(sentry) > 1100) + continue; + if (!IsVectorVisible(crumb, sentry, true)) + continue; + return true; + } + return false; + } void updateSentries() { - logging::Info("1"); sentryAreas.clear(); - + sentries.clear(); for (int i = 0; i < HIGHEST_ENTITY; i++) { CachedEntity *ent = ENTITY(i); - if (CE_BAD(ent) || ent->m_iClassID() != CL_CLASS(CObjectSentrygun)) + if (CE_BAD(ent) || ent->m_iClassID() != CL_CLASS(CObjectSentrygun) || ent->m_iTeam() == LOCAL_E->m_iTeam()) continue; Vector sentryloc = GetBuildingPosition(ent); + sentries.push_back(sentryloc); for (auto i : areas) { Vector area = i.m_center; - area.z += 30.0f; + area.z += 83.0f; if (area.DistTo(sentryloc) > 1100.0f) continue; if (!IsVectorVisible(area, sentryloc, true)) continue; - logging::Info("5"); - sentryAreas.push_back(i.m_id); + sentryAreas[i.m_id] = true; } } } bool IsIgnored(std::pair connection) { - if (inactives.find(connection) == inactives.end()) + if (sentryAreas[connection.first] || + sentryAreas[connection.second]) { - return false; + logging::Info("Ignored a connection due to sentry gun coverage"); + return true; } + if (inactives.find(connection) == inactives.end()) + return false; auto &pair = inactives.at(connection); if (pair.second >= 5000) { @@ -131,14 +148,6 @@ public: "Ignored a connection due to type 2 connection type."); return true; } - if (std::find(sentryAreas.begin(), sentryAreas.end(), - connection.first) != sentryAreas.end() || - std::find(sentryAreas.begin(), sentryAreas.end(), - connection.second) != sentryAreas.end()) - { - logging::Info("Ignored a connection due to sentry gun coverage"); - return true; - } return false; } diff --git a/include/trace.hpp b/include/trace.hpp index bc3f47b2..5bdb9b0d 100644 --- a/include/trace.hpp +++ b/include/trace.hpp @@ -42,6 +42,19 @@ public: virtual TraceType_t GetTraceType() const; }; +class FilterNoEntity : public ITraceFilter +{ +public: + IClientEntity *m_pSelf; + +public: + virtual ~FilterNoEntity(); + FilterNoEntity(); + virtual bool ShouldHitEntity(IHandleEntity *entity, int mask); + void SetSelf(IClientEntity *self); + virtual TraceType_t GetTraceType() const; +}; + class FilterPenetration : public ITraceFilter { public: @@ -59,5 +72,6 @@ public: extern FilterDefault filter_default; extern FilterNoPlayer filter_no_player; +extern FilterNoEntity filter_no_entity; extern FilterPenetration filter_penetration; } // namespace trace diff --git a/src/helpers.cpp b/src/helpers.cpp index 11e808b6..63a9bf4b 100644 --- a/src/helpers.cpp +++ b/src/helpers.cpp @@ -1107,19 +1107,29 @@ netvar.iHealth)); bool IsVectorVisible(Vector origin, Vector target, bool enviroment_only) { - trace_t trace_visible; - Ray_t ray; - trace::filter_no_player.SetSelf(RAW_ENT(g_pLocalPlayer->entity)); - ray.Init(origin, target); if (!enviroment_only) + { + trace_t trace_visible; + Ray_t ray; + + trace::filter_no_player.SetSelf(RAW_ENT(g_pLocalPlayer->entity)); + ray.Init(origin, target); g_ITrace->TraceRay(ray, MASK_SHOT_HULL, &trace::filter_no_player, &trace_visible); + return (trace_visible.fraction == 1.0f); + } else - g_ITrace->TraceRay(ray, 0x4200400B, &trace::filter_no_player, - &trace_visible); + { + trace_t trace_visible; + Ray_t ray; - return (trace_visible.fraction == 1.0f); + trace::filter_no_entity.SetSelf(RAW_ENT(g_pLocalPlayer->entity)); + ray.Init(origin, target); + g_ITrace->TraceRay(ray, MASK_SHOT_HULL, &trace::filter_no_entity, + &trace_visible); + return (trace_visible.fraction == 1.0f); + } } void WhatIAmLookingAt(int *result_eindex, Vector *result_pos) diff --git a/src/navparser.cpp b/src/navparser.cpp index c2676055..46a38e97 100644 --- a/src/navparser.cpp +++ b/src/navparser.cpp @@ -243,6 +243,7 @@ void clearInstructions() static Timer ignoreReset{}; static Timer patherReset{}; static Timer sentryUpdate{}; +static Timer sentryCheck{}; // Function for removing ignores void ignoreManagerCM() { @@ -252,8 +253,8 @@ void ignoreManagerCM() TF2MAP->inactiveTracker.reset(); if (patherReset.test_and_set(30000)) TF2MAP->pather->Reset(); - if(sentryUpdate.test_and_set(2000)) - TF2MAP->inactiveTracker.updateSentries(); + if(sentryUpdate.test_and_set(1000)) + TF2MAP->inactiveTracker.updateSentries(); } void Repath() @@ -265,6 +266,7 @@ void Repath() // Throwaway int int i1, i2; // Find a new path + TF2MAP->pather->Reset(); crumbs = findPath(g_pLocalPlayer->v_Origin, crumbs.back(), i1, i2); } else @@ -273,6 +275,7 @@ void Repath() "Pathing: NavBot inactive for too long. Canceling tasks and " "ignoring connection..."); // Wait for new instructions + TF2MAP->pather->Reset(); crumbs.clear(); } } @@ -325,6 +328,13 @@ void CreateMove() inactivity.update(); return; } + // Check for new sentries + if (sentryCheck.test_and_set(1000) && TF2MAP->inactiveTracker.ShouldCancelPath(crumbs)) + { + logging::Info("Pathing: New Sentry found!"); + TF2MAP->pather->Reset(); + Repath(); + } // If inactive for too long if (inactivity.check(5000)) { diff --git a/src/trace.cpp b/src/trace.cpp index 3100dfe7..384d7e69 100755 --- a/src/trace.cpp +++ b/src/trace.cpp @@ -110,7 +110,34 @@ TraceType_t trace::FilterNoPlayer::GetTraceType() const { return TRACE_EVERYTHING; } +/* No-Entity filter */ +trace::FilterNoEntity::FilterNoEntity() +{ + m_pSelf = nullptr; +} + +trace::FilterNoEntity::~FilterNoEntity(){}; + +void trace::FilterNoEntity::SetSelf(IClientEntity *self) +{ + if (self == nullptr) + { + logging::Info("nullptr in FilterNoPlayer::SetSelf"); + return; + } + m_pSelf = self; +} + +bool trace::FilterNoEntity::ShouldHitEntity(IHandleEntity *handle, int mask) +{ + return false; +} + +TraceType_t trace::FilterNoEntity::GetTraceType() const +{ + return TRACE_EVERYTHING; +} /* Penetration Filter */ trace::FilterPenetration::FilterPenetration() @@ -172,4 +199,5 @@ void trace::FilterPenetration::Reset() trace::FilterDefault trace::filter_default{}; trace::FilterNoPlayer trace::filter_no_player{}; +trace::FilterNoEntity trace::filter_no_entity{}; trace::FilterPenetration trace::filter_penetration{};