aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjoschiwald <joschiwald@online.de>2013-11-21 16:13:13 +0100
committerjoschiwald <joschiwald@online.de>2013-11-21 16:13:13 +0100
commit82d4ed56153a60a1d7d9389ec502abca4d8f29e8 (patch)
treea511492468f4c8de76988e280879f822945903b9 /src
parent0a2a552b5abb90a179ef49888faefffa29717d95 (diff)
Core/Movement: fix player fall under ground on teleport
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp2
-rw-r--r--src/server/game/Handlers/MovementHandler.cpp7
2 files changed, 7 insertions, 2 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index a6e8733f0fa..445c8946a4b 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -2190,6 +2190,8 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
{
Position oldPos;
GetPosition(&oldPos);
+ if (HasUnitMovementFlag(MOVEMENTFLAG_HOVER))
+ z += GetFloatValue(UNIT_FIELD_HOVERHEIGHT);
Relocate(x, y, z, orientation);
SendTeleportAckPacket();
SendTeleportPacket(oldPos); // this automatically relocates to oldPos in order to broadcast the packet in the right place
diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp
index cfab7baccf2..4b53dedc363 100644
--- a/src/server/game/Handlers/MovementHandler.cpp
+++ b/src/server/game/Handlers/MovementHandler.cpp
@@ -83,8 +83,11 @@ void WorldSession::HandleMoveWorldportAckOpcode()
GetPlayer()->TeleportTo(GetPlayer()->m_homebindMapId, GetPlayer()->m_homebindX, GetPlayer()->m_homebindY, GetPlayer()->m_homebindZ, GetPlayer()->GetOrientation());
return;
}
- else
- GetPlayer()->Relocate(&loc);
+
+ float z = loc.GetPositionZ();
+ if (GetPlayer()->HasUnitMovementFlag(MOVEMENTFLAG_HOVER))
+ z += GetPlayer()->GetFloatValue(UNIT_FIELD_HOVERHEIGHT);
+ GetPlayer()->Relocate(loc.GetPositionX(), loc.GetPositionY(), z, loc.GetOrientation());
GetPlayer()->ResetMap();
GetPlayer()->SetMap(newMap);