aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dep/PackageList.txt3
-rw-r--r--dep/recastnavigation/Detour/Source/DetourCommon.cpp10
-rw-r--r--dep/recastnavigation/Detour/Source/DetourNavMeshQuery.cpp4
-rw-r--r--src/server/game/Movement/PathGenerator.cpp9
4 files changed, 19 insertions, 7 deletions
diff --git a/dep/PackageList.txt b/dep/PackageList.txt
index c68c3912aaf..d84d808a8fe 100644
--- a/dep/PackageList.txt
+++ b/dep/PackageList.txt
@@ -54,7 +54,8 @@ gSOAP (a portable development toolkit for C and C++ XML Web services and XML dat
recastnavigation (Recast is state of the art navigation mesh construction toolset for games)
https://github.com/recastnavigation/recastnavigation
- Version: 14b2631527c4792e95b2c78ebfa8ac4cd3413363
+ Version: 3a619d773deb7e3a15ee215217c825995fe71312
+ Custom changes: https://github.com/TrinityCore/recastnavigation/tree/3.3.5
CascLib (An open-source implementation of library for reading CASC storage from Blizzard games since 2014)
https://github.com/ladislav-zezula/CascLib
diff --git a/dep/recastnavigation/Detour/Source/DetourCommon.cpp b/dep/recastnavigation/Detour/Source/DetourCommon.cpp
index 3886f14b04d..e10e6276170 100644
--- a/dep/recastnavigation/Detour/Source/DetourCommon.cpp
+++ b/dep/recastnavigation/Detour/Source/DetourCommon.cpp
@@ -226,7 +226,15 @@ bool dtClosestHeightPointTriangle(const float* p, const float* a, const float* b
// If point lies inside the triangle, return interpolated ycoord.
if (u >= epsilon && v >= epsilon && (u+v) <= denom - epsilon) {
- h = a[1] + (v0[1]*u + v1[1]*v) / denom;
+
+ if (denom == 0.f && u == 0.f && v == 0.f)
+ h = a[1];
+ else
+ h = a[1] + (v0[1]*u + v1[1]*v) / denom;
+
+ if (!dtMathIsfinite(h))
+ return false;
+
return true;
}
return false;
diff --git a/dep/recastnavigation/Detour/Source/DetourNavMeshQuery.cpp b/dep/recastnavigation/Detour/Source/DetourNavMeshQuery.cpp
index c18db1c1968..9e470824287 100644
--- a/dep/recastnavigation/Detour/Source/DetourNavMeshQuery.cpp
+++ b/dep/recastnavigation/Detour/Source/DetourNavMeshQuery.cpp
@@ -1301,8 +1301,8 @@ dtStatus dtNavMeshQuery::initSlicedFindPath(dtPolyRef startRef, dtPolyRef endRef
m_query.raycastLimitSqr = FLT_MAX;
// Validate input
- if (!m_nav->isValidPolyRef(startRef) || !m_nav->isValidPolyRef(endRef)
- || !startPos || !dtVisfinite(startPos) ||
+ if (!m_nav->isValidPolyRef(startRef) || !m_nav->isValidPolyRef(endRef) ||
+ !startPos || !dtVisfinite(startPos) ||
!endPos || !dtVisfinite(endPos) || !filter)
{
return DT_FAILURE | DT_INVALID_PARAM;
diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp
index c9dd1647268..7be391a5e80 100644
--- a/src/server/game/Movement/PathGenerator.cpp
+++ b/src/server/game/Movement/PathGenerator.cpp
@@ -818,10 +818,12 @@ dtStatus PathGenerator::FindSmoothPath(float const* startPos, float const* endPo
dtPolyRef visited[MAX_VISIT_POLY];
uint32 nvisited = 0;
- _navMeshQuery->moveAlongSurface(polys[0], iterPos, moveTgt, &_filter, result, visited, (int*)&nvisited, MAX_VISIT_POLY);
+ if (dtStatusFailed(_navMeshQuery->moveAlongSurface(polys[0], iterPos, moveTgt, &_filter, result, visited, (int*)&nvisited, MAX_VISIT_POLY)))
+ return DT_FAILURE;
npolys = FixupCorridor(polys, npolys, MAX_PATH_LENGTH, visited, nvisited);
- _navMeshQuery->getPolyHeight(polys[0], result, &result[1]);
+ if (dtStatusFailed(_navMeshQuery->getPolyHeight(polys[0], result, &result[1])))
+ return DT_FAILURE;
result[1] += 0.5f;
dtVcopy(iterPos, result);
@@ -866,7 +868,8 @@ dtStatus PathGenerator::FindSmoothPath(float const* startPos, float const* endPo
}
// Move position at the other side of the off-mesh link.
dtVcopy(iterPos, connectionEndPos);
- _navMeshQuery->getPolyHeight(polys[0], iterPos, &iterPos[1]);
+ if (dtStatusFailed(_navMeshQuery->getPolyHeight(polys[0], iterPos, &iterPos[1])))
+ return DT_FAILURE;
iterPos[1] += 0.5f;
}
}