diff options
author | ccrs <ccrs@users.noreply.github.com> | 2017-05-03 15:14:41 +0200 |
---|---|---|
committer | ccrs <ccrs@users.noreply.github.com> | 2017-05-03 15:14:41 +0200 |
commit | b6274578b1119c8722aa5b429a74c1e0ac4fbdff (patch) | |
tree | 27254eed5dc8574d4eb8f80f19c8b54344742045 /src | |
parent | d92132f1dcc097daca20804880f7d4874b86e59b (diff) |
Core/Unit: revert recent changes
master cherry pick incomming :D
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, 19 insertions, 13 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 9b0747a6cd6..eca6f44681f 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -1929,14 +1929,12 @@ 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 newPosition(x, y, z, orientation); + Position oldPos = GetPosition(); if (HasUnitMovementFlag(MOVEMENTFLAG_HOVER)) - newPosition.m_positionZ += GetFloatValue(UNIT_FIELD_HOVERHEIGHT); - + z += GetFloatValue(UNIT_FIELD_HOVERHEIGHT); + Relocate(x, y, z, orientation); SendTeleportAckPacket(); - SendTeleportPacket(); - UpdatePosition(newPosition, true); - UpdateObjectVisibility(); + SendTeleportPacket(oldPos); // this automatically relocates to oldPos in order to broadcast the packet in the right place } } else diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 0b817a59c54..51739b3a864 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13809,18 +13809,26 @@ void Unit::NearTeleportTo(Position const& pos, bool casting /*= false*/) } else { - SendTeleportPacket(); + SendTeleportPacket(pos); UpdatePosition(pos, true); UpdateObjectVisibility(); } } -void Unit::SendTeleportPacket() +void Unit::SendTeleportPacket(Position const& pos) { - WorldPacket data(MSG_MOVE_TELEPORT, 38); - data << GetPackGUID(); - BuildMovementPacket(&data); - SendMessageToSet(&data, false); + 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); } 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 a2090a6d1b1..baf91f41779 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(); + void SendTeleportPacket(Position const& pos); 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); |