M0r3 W411CH3CK 57uff
This commit is contained in:
parent
5d995c73dd
commit
fc2d1885b7
@ -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
|
||||||
{
|
{
|
||||||
|
@ -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;
|
||||||
|
Reference in New Issue
Block a user