diff options
author | ccrs <ccrs@users.noreply.github.com> | 2017-05-02 14:57:10 +0200 |
---|---|---|
committer | ccrs <ccrs@users.noreply.github.com> | 2017-05-02 14:57:10 +0200 |
commit | 6fe4d37f8d8bbe0c20cb4f3b23917e76483420d8 (patch) | |
tree | af015c2802132e46ea4159ea9089a67aef63ec10 /src | |
parent | 17579f8d91e0dcc6990fe581de9ca51ed444b754 (diff) |
Core/Unit: SendTeleportPacket corrections
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 20 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 2 |
3 files changed, 13 insertions, 19 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index eca6f44681f..d1bda821fc0 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -1929,12 +1929,14 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati // near teleport, triggering send MSG_MOVE_TELEPORT_ACK from client at landing if (!GetSession()->PlayerLogout()) { - Position oldPos = GetPosition(); + Position newPosition(x, y, z, orientation); if (HasUnitMovementFlag(MOVEMENTFLAG_HOVER)) - z += GetFloatValue(UNIT_FIELD_HOVERHEIGHT); - Relocate(x, y, z, orientation); + newPosition.m_positionZ += GetFloatValue(UNIT_FIELD_HOVERHEIGHT); + + UpdatePosition(newPosition, true); SendTeleportAckPacket(); - SendTeleportPacket(oldPos); // this automatically relocates to oldPos in order to broadcast the packet in the right place + SendTeleportPacket(); + UpdateObjectVisibility(); } } else diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 51739b3a864..e710708faae 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13809,26 +13809,18 @@ void Unit::NearTeleportTo(Position const& pos, bool casting /*= false*/) } else { - SendTeleportPacket(pos); UpdatePosition(pos, true); + SendTeleportPacket(); UpdateObjectVisibility(); } } -void Unit::SendTeleportPacket(Position const& pos) +void Unit::SendTeleportPacket() { - Position oldPos = { GetPositionX(), GetPositionY(), GetPositionZMinusOffset(), GetOrientation() }; - if (GetTypeId() == TYPEID_UNIT) - Relocate(&pos); - - WorldPacket data2(MSG_MOVE_TELEPORT, 38); - data2 << GetPackGUID(); - BuildMovementPacket(&data2); - if (GetTypeId() == TYPEID_UNIT) - Relocate(&oldPos); - if (GetTypeId() == TYPEID_PLAYER) - Relocate(&pos); - SendMessageToSet(&data2, false); + WorldPacket data(MSG_MOVE_TELEPORT, 38); + data << GetPackGUID(); + BuildMovementPacket(&data); + SendMessageToSet(&data, false); } bool Unit::UpdatePosition(float x, float y, float z, float orientation, bool teleport) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index baf91f41779..a2090a6d1b1 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1620,7 +1620,7 @@ class TC_GAME_API Unit : public WorldObject void NearTeleportTo(Position const& pos, bool casting = false); void NearTeleportTo(float x, float y, float z, float orientation, bool casting = false) { NearTeleportTo(Position(x, y, z, orientation), casting); } - void SendTeleportPacket(Position const& pos); + void SendTeleportPacket(); virtual bool UpdatePosition(float x, float y, float z, float ang, bool teleport = false); // returns true if unit's position really changed virtual bool UpdatePosition(const Position &pos, bool teleport = false); |