From fc2d1885b76fc493feaace88a75d1bebe459793a Mon Sep 17 00:00:00 2001 From: TotallyNotElite <1yourexperiment@protonmail.com> Date: Sun, 22 Jul 2018 16:42:32 +0200 Subject: [PATCH] M0r3 W411CH3CK 57uff --- src/hacks/FollowBot.cpp | 65 ++++++++++++++++++++++++++++++++-------- src/helpers.cpp | 66 ++++++++++++++++++++++++++++++++++++----- 2 files changed, 111 insertions(+), 20 deletions(-) diff --git a/src/hacks/FollowBot.cpp b/src/hacks/FollowBot.cpp index b9c2b550..be04d8d7 100644 --- a/src/hacks/FollowBot.cpp +++ b/src/hacks/FollowBot.cpp @@ -117,6 +117,43 @@ void addCrumbs(CachedEntity *target, Vector corner = g_pLocalPlayer->v_Origin) corner + dist / vectorMax(vectorAbs(dist)) * 40.0f * (i + 1)); } } + +void addCrumbPair(CachedEntity *player1, CachedEntity *player2, + std::pair corners) +{ + Vector corner1 = corners.first; + Vector corner2 = corners.second; + + { + Vector dist = corner1 - player1->m_vecOrigin(); + int maxiterations = floor(corner1.DistTo(player1->m_vecOrigin())) / 40; + for (int i = 0; i < maxiterations; i++) + { + breadcrumbs.push_back(player1->m_vecOrigin() + + dist / vectorMax(vectorAbs(dist)) * 40.0f * + (i + 1)); + } + } + { + Vector dist = corner2 - corner1; + int maxiterations = floor(corner2.DistTo(corner1)) / 40; + for (int i = 0; i < maxiterations; i++) + { + breadcrumbs.push_back(corner1 + dist / vectorMax(vectorAbs(dist)) * + 40.0f * (i + 1)); + } + } + { + Vector dist = player2->m_vecOrigin() - corner2; + int maxiterations = floor(corner2.DistTo(player2->m_vecOrigin())) / 40; + for (int i = 0; i < maxiterations; i++) + { + breadcrumbs.push_back(corner2 + dist / vectorMax(vectorAbs(dist)) * + 40.0f * (i + 1)); + } + } +} + int ClassPriority(CachedEntity *ent) { switch (g_pPlayerResource->GetClass(ent)) @@ -209,8 +246,9 @@ void WorldTick() corners = VischeckWall(LOCAL_E, entity, float(follow_activation) / 2, true); if (!corners.first.z || !corners.second.z) continue; - addCrumbs(LOCAL_E, corners.first); - addCrumbs(entity, corners.second); + //addCrumbs(LOCAL_E, corners.first); + //addCrumbs(entity, corners.second); + addCrumbPair(LOCAL_E, entity, corners); } if (indirectOrigin.z) addCrumbs(entity, indirectOrigin); @@ -287,23 +325,24 @@ void WorldTick() { Vector indirectOrigin = VischeckCorner(LOCAL_E, entity, 250, - true); // get the corner location that the - // future target is visible from + true); // get the corner location that the + // future target is visible from std::pair corners; - corners.first.z = 0; + corners.first.z = 0; corners.second.z = 0; - if (!indirectOrigin.z && entity->m_IDX == lastent) // if we couldn't find it, run wallcheck instead + if (!indirectOrigin.z && + entity->m_IDX == lastent) // if we couldn't find it, run + // wallcheck instead { - corners = VischeckWall(LOCAL_E, entity, 250, true); - if (!corners.first.z || !corners.second.z) - continue; - addCrumbs(LOCAL_E, corners.first); - addCrumbs(entity, corners.second); + corners = VischeckWall(LOCAL_E, entity, 250, true); + if (!corners.first.z || !corners.second.z) + continue; + addCrumbPair(LOCAL_E, entity, corners); } if (indirectOrigin.z) - addCrumbs(entity, indirectOrigin); + addCrumbs(entity, indirectOrigin); else if (!indirectOrigin.z && !corners.first.z) - continue; + continue; } else { diff --git a/src/helpers.cpp b/src/helpers.cpp index 3e514429..ca0630a6 100644 --- a/src/helpers.cpp +++ b/src/helpers.cpp @@ -123,7 +123,7 @@ Vector VischeckCorner(CachedEntity *player, CachedEntity *target, float maxdist, return origin; } - for (int i = 0; i < 4; i++) // for loop for all 4 directions + for (int i = 0; i < 8; i++) // for loop for all 4 directions { // 40 * maxiterations = range in HU for (int j = 0; j < maxiterations; j++) @@ -144,6 +144,22 @@ Vector VischeckCorner(CachedEntity *player, CachedEntity *target, float maxdist, case 3: virtualOrigin.y = virtualOrigin.y - 40 * (j + 1); break; + case 4: + virtualOrigin.x = virtualOrigin.x + 20 * (j + 1); + virtualOrigin.y = virtualOrigin.y + 20 * (j + 1); + break; + case 5: + virtualOrigin.x = virtualOrigin.x - 20 * (j + 1); + virtualOrigin.y = virtualOrigin.y - 20 * (j + 1); + break; + case 6: + virtualOrigin.x = virtualOrigin.x - 20 * (j + 1); + virtualOrigin.y = virtualOrigin.y + 20 * (j + 1); + break; + case 7: + virtualOrigin.x = virtualOrigin.x + 20 * (j + 1); + virtualOrigin.y = virtualOrigin.y - 20 * (j + 1); + break; } // check if player can see the players virtualOrigin if (!IsVectorVisible(origin, virtualOrigin, true)) @@ -182,7 +198,7 @@ std::pair VischeckWall(CachedEntity *player, CachedEntity *target return orig; } - for (int i = 0; i < 4; i++) // for loop for all 4 directions + for (int i = 0; i < 8; i++) // for loop for all 4 directions { // 40 * maxiterations = range in HU for (int j = 0; j < maxiterations; j++) @@ -203,11 +219,27 @@ std::pair VischeckWall(CachedEntity *player, CachedEntity *target case 3: virtualOrigin.y = virtualOrigin.y - 40 * (j + 1); break; + case 4: + virtualOrigin.x = virtualOrigin.x + 20 * (j + 1); + virtualOrigin.y = virtualOrigin.y + 20 * (j + 1); + break; + case 5: + virtualOrigin.x = virtualOrigin.x - 20 * (j + 1); + virtualOrigin.y = virtualOrigin.y - 20 * (j + 1); + break; + case 6: + virtualOrigin.x = virtualOrigin.x - 20 * (j + 1); + virtualOrigin.y = virtualOrigin.y + 20 * (j + 1); + break; + case 7: + virtualOrigin.x = virtualOrigin.x + 20 * (j + 1); + virtualOrigin.y = virtualOrigin.y - 20 * (j + 1); + break; } // check if player can see the players virtualOrigin if (!IsVectorVisible(origin, virtualOrigin, true)) continue; - for (int i = 0; i < 4; i++) // for loop for all 4 directions + for (int i = 0; i < 8; i++) // for loop for all 4 directions { // 40 * maxiterations = range in HU for (int j = 0; j < maxiterations; j++) @@ -228,14 +260,34 @@ std::pair VischeckWall(CachedEntity *player, CachedEntity *target case 3: virtualOrigin2.y = virtualOrigin2.y - 40 * (j + 1); break; + case 4: + virtualOrigin2.x = virtualOrigin2.x + 20 * (j + 1); + virtualOrigin2.y = virtualOrigin2.y + 20 * (j + 1); + break; + case 5: + virtualOrigin2.x = virtualOrigin2.x - 20 * (j + 1); + virtualOrigin2.y = virtualOrigin2.y - 20 * (j + 1); + break; + case 6: + virtualOrigin2.x = virtualOrigin2.x - 20 * (j + 1); + virtualOrigin2.y = virtualOrigin2.y + 20 * (j + 1); + break; + case 7: + virtualOrigin2.x = virtualOrigin2.x + 20 * (j + 1); + virtualOrigin2.y = virtualOrigin2.y - 20 * (j + 1); + break; } // check if the virtualOrigin2 can see the target - if (!VisCheckEntFromEntVector(virtualOrigin2, player, target)) - continue; +// if (!VisCheckEntFromEntVector(virtualOrigin2, player, target)) +// continue; +// if (!IsVectorVisible(virtualOrigin, virtualOrigin2, true)) +// continue; +// if (!IsVectorVisible(virtualOrigin2, target->m_vecOrigin(), true)) +// continue; if (!IsVectorVisible(virtualOrigin, virtualOrigin2, true)) continue; - if (!IsVectorVisible(virtualOrigin2, target->m_vecOrigin(), true)) - continue; + if (!IsVectorVisible(virtualOrigin2, target->m_vecOrigin())) + continue; std::pair toret(virtualOrigin, virtualOrigin2); if (!checkWalkable) return toret;