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));
}
}
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)
{
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<Vector, Vector> 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
{

View File

@ -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<Vector,Vector> 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<Vector,Vector> 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<Vector,Vector> 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<Vector, Vector> toret(virtualOrigin, virtualOrigin2);
if (!checkWalkable)
return toret;