aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorccrs <ccrs@users.noreply.github.com>2017-05-02 14:57:10 +0200
committerccrs <ccrs@users.noreply.github.com>2017-05-02 14:57:10 +0200
commit6fe4d37f8d8bbe0c20cb4f3b23917e76483420d8 (patch)
treeaf015c2802132e46ea4159ea9089a67aef63ec10 /src
parent17579f8d91e0dcc6990fe581de9ca51ed444b754 (diff)
Core/Unit: SendTeleportPacket corrections
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp10
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp20
-rw-r--r--src/server/game/Entities/Unit/Unit.h2
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);