mirror of
https://github.com/liyunfan1223/mod-playerbots.git
synced 2026-06-20 15:39:25 +02:00
fix(Core/Travel): Reject 2-point BuildShortcut paths between non-adjacent nodes
This commit is contained in:
parent
bb69ed12d6
commit
bd1364db06
@ -752,15 +752,6 @@ std::vector<WorldPosition> WorldPosition::getPathStepFrom(WorldPosition startPos
|
||||
|
||||
std::vector<WorldPosition> retvec = fromPointsArray(points);
|
||||
|
||||
// PathGenerator can also return PATHFIND_NORMAL with just two
|
||||
// points (start + end) as a fallback when polygon search fails
|
||||
// partway through — effectively a teleport across whatever lies
|
||||
// between. Reject long 2-point segments to avoid the chained
|
||||
// probe accepting a 1000y+ "shortcut" as a valid path step.
|
||||
// 75y matches the nodeFirstDis travelnode threshold elsewhere.
|
||||
if (retvec.size() == 2 && retvec.front().distance(&retvec.back()) > 75.0f)
|
||||
return {};
|
||||
|
||||
// Underwater path-extension. When PATHFIND_INCOMPLETE ends within
|
||||
// 50y of dest and both endpoints are underwater with LOS, extend
|
||||
// by one 5y step (or straight to dest if <5y). Lets bots traverse
|
||||
|
||||
@ -226,6 +226,12 @@ TravelNodePath* TravelNode::BuildPath(TravelNode* endNode, Unit* bot, bool postP
|
||||
|
||||
bool canPath = endPos->isPathTo(path); // Check if we reached our destination.
|
||||
|
||||
// Reject 2-point paths between non-adjacent nodes — that's
|
||||
// PathGenerator's BuildShortcut fallback "teleporting" the chain
|
||||
// endpoint across whatever lies between, not a real walkable route.
|
||||
if (canPath && path.size() == 2 && getPosition()->distance(endNode->getPosition()) > 5.0f)
|
||||
canPath = false;
|
||||
|
||||
// Reject too-short or too-steep results — geometry shortcut that
|
||||
// mmap returns but a player can't actually walk.
|
||||
if (canPath && TravelPath::IsPathCheating(path, getPosition()->distance(endNode->getPosition())))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user