M0r3 W411CH3CK 57uff

This commit is contained in:
TotallyNotElite 2018-07-22 16:42:32 +02:00
parent 5d995c73dd
commit fc2d1885b7
2 changed files with 111 additions and 20 deletions

View File

@ -117,6 +117,43 @@ void addCrumbs(CachedEntity *target, Vector corner = g_pLocalPlayer->v_Origin)
corner + dist / vectorMax(vectorAbs(dist)) * 40.0f * (i + 1)); corner + dist / vectorMax(vectorAbs(dist)) * 40.0f * (i + 1));
} }
} }
void addCrumbPair(CachedEntity *player1, CachedEntity *player2,
std::pair<Vector, Vector> 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) int ClassPriority(CachedEntity *ent)
{ {
switch (g_pPlayerResource->GetClass(ent)) switch (g_pPlayerResource->GetClass(ent))
@ -209,8 +246,9 @@ void WorldTick()
corners = VischeckWall(LOCAL_E, entity, float(follow_activation) / 2, true); corners = VischeckWall(LOCAL_E, entity, float(follow_activation) / 2, true);
if (!corners.first.z || !corners.second.z) if (!corners.first.z || !corners.second.z)
continue; continue;
addCrumbs(LOCAL_E, corners.first); //addCrumbs(LOCAL_E, corners.first);
addCrumbs(entity, corners.second); //addCrumbs(entity, corners.second);
addCrumbPair(LOCAL_E, entity, corners);
} }
if (indirectOrigin.z) if (indirectOrigin.z)
addCrumbs(entity, indirectOrigin); addCrumbs(entity, indirectOrigin);
@ -287,23 +325,24 @@ void WorldTick()
{ {
Vector indirectOrigin = Vector indirectOrigin =
VischeckCorner(LOCAL_E, entity, 250, VischeckCorner(LOCAL_E, entity, 250,
true); // get the corner location that the true); // get the corner location that the
// future target is visible from // future target is visible from
std::pair<Vector, Vector> corners; std::pair<Vector, Vector> corners;
corners.first.z = 0; corners.first.z = 0;
corners.second.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); corners = VischeckWall(LOCAL_E, entity, 250, true);
if (!corners.first.z || !corners.second.z) if (!corners.first.z || !corners.second.z)
continue; continue;
addCrumbs(LOCAL_E, corners.first); addCrumbPair(LOCAL_E, entity, corners);
addCrumbs(entity, corners.second);
} }
if (indirectOrigin.z) if (indirectOrigin.z)
addCrumbs(entity, indirectOrigin); addCrumbs(entity, indirectOrigin);
else if (!indirectOrigin.z && !corners.first.z) else if (!indirectOrigin.z && !corners.first.z)
continue; continue;
} }
else else
{ {

View File

@ -123,7 +123,7 @@ Vector VischeckCorner(CachedEntity *player, CachedEntity *target, float maxdist,
return origin; 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 // 40 * maxiterations = range in HU
for (int j = 0; j < maxiterations; j++) for (int j = 0; j < maxiterations; j++)
@ -144,6 +144,22 @@ Vector VischeckCorner(CachedEntity *player, CachedEntity *target, float maxdist,
case 3: case 3:
virtualOrigin.y = virtualOrigin.y - 40 * (j + 1); virtualOrigin.y = virtualOrigin.y - 40 * (j + 1);
break; 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 // check if player can see the players virtualOrigin
if (!IsVectorVisible(origin, virtualOrigin, true)) if (!IsVectorVisible(origin, virtualOrigin, true))
@ -182,7 +198,7 @@ std::pair<Vector,Vector> VischeckWall(CachedEntity *player, CachedEntity *target
return orig; 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 // 40 * maxiterations = range in HU
for (int j = 0; j < maxiterations; j++) for (int j = 0; j < maxiterations; j++)
@ -203,11 +219,27 @@ std::pair<Vector,Vector> VischeckWall(CachedEntity *player, CachedEntity *target
case 3: case 3:
virtualOrigin.y = virtualOrigin.y - 40 * (j + 1); virtualOrigin.y = virtualOrigin.y - 40 * (j + 1);
break; 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 // check if player can see the players virtualOrigin
if (!IsVectorVisible(origin, virtualOrigin, true)) if (!IsVectorVisible(origin, virtualOrigin, true))
continue; 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 // 40 * maxiterations = range in HU
for (int j = 0; j < maxiterations; j++) for (int j = 0; j < maxiterations; j++)
@ -228,14 +260,34 @@ std::pair<Vector,Vector> VischeckWall(CachedEntity *player, CachedEntity *target
case 3: case 3:
virtualOrigin2.y = virtualOrigin2.y - 40 * (j + 1); virtualOrigin2.y = virtualOrigin2.y - 40 * (j + 1);
break; 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 // check if the virtualOrigin2 can see the target
if (!VisCheckEntFromEntVector(virtualOrigin2, player, target)) // if (!VisCheckEntFromEntVector(virtualOrigin2, player, target))
continue; // continue;
// if (!IsVectorVisible(virtualOrigin, virtualOrigin2, true))
// continue;
// if (!IsVectorVisible(virtualOrigin2, target->m_vecOrigin(), true))
// continue;
if (!IsVectorVisible(virtualOrigin, virtualOrigin2, true)) if (!IsVectorVisible(virtualOrigin, virtualOrigin2, true))
continue; continue;
if (!IsVectorVisible(virtualOrigin2, target->m_vecOrigin(), true)) if (!IsVectorVisible(virtualOrigin2, target->m_vecOrigin()))
continue; continue;
std::pair<Vector, Vector> toret(virtualOrigin, virtualOrigin2); std::pair<Vector, Vector> toret(virtualOrigin, virtualOrigin2);
if (!checkWalkable) if (!checkWalkable)
return toret; return toret;