From b0c37b25cc3402e6563597ef7df5fa5e08fbaaab Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Sat, 23 Feb 2019 22:37:17 +0100 Subject: [PATCH] Core/Movement: ported some undermap fixups from a TC pull request --- src/server/game/Maps/Map.cpp | 14 +++++--------- .../ConfusedMovementGenerator.cpp | 2 +- .../FleeingMovementGenerator.cpp | 2 +- .../MovementGenerators/RandomMovementGenerator.cpp | 2 +- src/server/game/Movement/PathGenerator.cpp | 4 ++-- src/server/game/Spells/Spell.cpp | 3 +-- 6 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 7e763d5275a..ed77002542c 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2454,11 +2454,7 @@ float Map::GetStaticHeight(PhaseShift const& phaseShift, float x, float y, float float mapHeight = VMAP_INVALID_HEIGHT_VALUE; uint32 terrainMapId = PhasingHandler::GetTerrainMapId(phaseShift, this, x, y); if (GridMap* gmap = m_parentTerrainMap->GetGrid(terrainMapId, x, y)) - { - float gridHeight = gmap->getHeight(x, y); - if (G3D::fuzzyGe(z, gridHeight - GROUND_HEIGHT_TOLERANCE)) - mapHeight = gridHeight; - } + float mapHeight = gmap->getHeight(x, y); float vmapHeight = VMAP_INVALID_HEIGHT_VALUE; if (checkVMap) @@ -2480,11 +2476,11 @@ float Map::GetStaticHeight(PhaseShift const& phaseShift, float x, float y, float // or if the distance of the vmap height is less the land height distance if (vmapHeight > mapHeight || std::fabs(mapHeight - z) > std::fabs(vmapHeight - z)) return vmapHeight; - else - return mapHeight; // better use .map surface height + + return mapHeight; // better use .map surface height } - else - return vmapHeight; // we have only vmapHeight (if have) + + return vmapHeight; // we have only vmapHeight (if have) } return mapHeight; // explicitly use map data diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp index 313545ac0d9..72a937bd18c 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp @@ -82,7 +82,7 @@ bool ConfusedMovementGenerator::DoUpdate(T* owner, uint32 diff) _path->SetPathLengthLimit(30.0f); bool result = _path->CalculatePath(destination.GetPositionX(), destination.GetPositionY(), destination.GetPositionZ()); - if (!result || (_path->GetPathType() & PATHFIND_NOPATH)) + if (!result || (_path->GetPathType() & PATHFIND_NOPATH) || (_path->GetPathType() & PATHFIND_SHORTCUT)) { _timer.Reset(100); return true; diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp index d2a707e5ba3..98cc77e9c22 100644 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp @@ -128,7 +128,7 @@ void FleeingMovementGenerator::SetTargetLocation(T* owner) _path->SetPathLengthLimit(30.0f); bool result = _path->CalculatePath(destination.GetPositionX(), destination.GetPositionY(), destination.GetPositionZ()); - if (!result || (_path->GetPathType() & PATHFIND_NOPATH)) + if (!result || (_path->GetPathType() & PATHFIND_NOPATH) || (_path->GetPathType() & PATHFIND_SHORTCUT)) { _timer.Reset(100); return; diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp index 2561484a3ab..8e5331f750b 100644 --- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp @@ -102,7 +102,7 @@ void RandomMovementGenerator::SetRandomLocation(Creature* owner) _path->SetPathLengthLimit(30.0f); bool result = _path->CalculatePath(position.GetPositionX(), position.GetPositionY(), position.GetPositionZ()); - if (!result || (_path->GetPathType() & PATHFIND_NOPATH)) + if (!result || (_path->GetPathType() & PATHFIND_NOPATH) || (_path->GetPathType() & PATHFIND_SHORTCUT)) { _timer.Reset(100); return; diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp index 336098c673a..61b8e637bf1 100644 --- a/src/server/game/Movement/PathGenerator.cpp +++ b/src/server/game/Movement/PathGenerator.cpp @@ -538,14 +538,14 @@ void PathGenerator::BuildPointPath(const float *startPoint, const float *endPoin /// @todo check the exact cases TC_LOG_DEBUG("maps", "++ PathGenerator::BuildPointPath FAILED! path sized %d returned\n", pointCount); BuildShortcut(); - _type = PATHFIND_NOPATH; + _type = PathType(_type | PATHFIND_NOPATH); return; } else if (pointCount == _pointPathLimit) { TC_LOG_DEBUG("maps", "++ PathGenerator::BuildPointPath FAILED! path sized %d returned, lower than limit set to %d\n", pointCount, _pointPathLimit); BuildShortcut(); - _type = PATHFIND_SHORT; + _type = PathType(_type | PATHFIND_SHORT); return; } diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 10831fb5942..29266fceabb 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -1379,9 +1379,8 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffIndex effIndex, SpellImplici pos.m_positionX = m_preGeneratedPath->GetActualEndPosition().x; pos.m_positionY = m_preGeneratedPath->GetActualEndPosition().y; pos.m_positionZ = m_preGeneratedPath->GetActualEndPosition().z; + dest.Relocate(pos); } - - dest.Relocate(pos); break; } default: