From 6fe4d37f8d8bbe0c20cb4f3b23917e76483420d8 Mon Sep 17 00:00:00 2001 From: ccrs Date: Tue, 2 May 2017 14:57:10 +0200 Subject: Core/Unit: SendTeleportPacket corrections --- src/server/game/Entities/Player/Player.cpp | 10 ++++++---- src/server/game/Entities/Unit/Unit.cpp | 20 ++++++-------------- src/server/game/Entities/Unit/Unit.h | 2 +- 3 files changed, 13 insertions(+), 19 deletions(-) (limited to 'src') 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); -- cgit v1.2.3