aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Maps/Map.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Maps/Map.cpp')
-rwxr-xr-xsrc/server/game/Maps/Map.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index 7f27a474534..7403a86a47f 100755
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -702,6 +702,12 @@ void Map::PlayerRelocation(Player* player, float x, float y, float z, float orie
Cell old_cell(player->GetPositionX(), player->GetPositionY());
Cell new_cell(x, y);
+ //! If hovering, always increase our server-side Z position
+ //! Client automatically projects correct position based on Z coord sent in monster move
+ //! and UNIT_FIELD_HOVERHEIGHT sent in object updates
+ if (player->HasUnitMovementFlag(MOVEMENTFLAG_HOVER))
+ z += player->GetFloatValue(UNIT_FIELD_HOVERHEIGHT);
+
player->Relocate(x, y, z, orientation);
if (player->IsVehicle())
player->GetVehicleKit()->RelocatePassengers(x, y, z, orientation);
@@ -731,6 +737,12 @@ void Map::CreatureRelocation(Creature* creature, float x, float y, float z, floa
if (!respawnRelocationOnFail && !getNGrid(new_cell.GridX(), new_cell.GridY()))
return;
+ //! If hovering, always increase our server-side Z position
+ //! Client automatically projects correct position based on Z coord sent in monster move
+ //! and UNIT_FIELD_HOVERHEIGHT sent in object updates
+ if (creature->HasUnitMovementFlag(MOVEMENTFLAG_HOVER))
+ z += creature->GetFloatValue(UNIT_FIELD_HOVERHEIGHT);
+
// delay creature move for grid/cell to grid/cell moves
if (old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell))
{