diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Object/Object.h | 3 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 5 |
3 files changed, 13 insertions, 7 deletions
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 87b158ab81a..21c893cfe54 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -329,6 +329,9 @@ class WorldLocation : public Position explicit WorldLocation(uint32 _mapId = MAPID_INVALID, float _x = 0.f, float _y = 0.f, float _z = 0.f, float _o = 0.f) : Position(_x, _y, _z, _o), m_mapId(_mapId) { } + WorldLocation(uint32 mapId, Position const& position) + : Position(position), m_mapId(mapId) { } + WorldLocation(WorldLocation const& loc) : Position(loc), m_mapId(loc.GetMapId()) { } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index a51292c4a30..ce3f6e2a150 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -16878,21 +16878,23 @@ bool Unit::IsFalling() const return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_FALLING | MOVEMENTFLAG_FALLING_FAR) || movespline->isFalling(); } -void Unit::NearTeleportTo(float x, float y, float z, float orientation, bool casting /*= false*/) +void Unit::NearTeleportTo(Position const& pos, bool casting /*= false*/) { DisableSpline(); if (GetTypeId() == TYPEID_PLAYER) - ToPlayer()->TeleportTo(GetMapId(), x, y, z, orientation, TELE_TO_NOT_LEAVE_TRANSPORT | TELE_TO_NOT_LEAVE_COMBAT | TELE_TO_NOT_UNSUMMON_PET | (casting ? TELE_TO_SPELL : 0)); + { + WorldLocation target(GetMapId(), pos); + ToPlayer()->TeleportTo(target, TELE_TO_NOT_LEAVE_TRANSPORT | TELE_TO_NOT_LEAVE_COMBAT | TELE_TO_NOT_UNSUMMON_PET | (casting ? TELE_TO_SPELL : 0)); + } else { - Position pos = {x, y, z, orientation}; SendTeleportPacket(pos); - UpdatePosition(x, y, z, orientation, true); + UpdatePosition(pos, true); UpdateObjectVisibility(); } } -void Unit::SendTeleportPacket(Position& pos) +void Unit::SendTeleportPacket(Position const& pos) { Position oldPos = { GetPositionX(), GetPositionY(), GetPositionZMinusOffset(), GetOrientation() }; if (GetTypeId() == TYPEID_UNIT) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index c553ac8459b..3f6ea205563 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1581,8 +1581,9 @@ class TC_GAME_API Unit : public WorldObject void SendSpellDamageResist(Unit* target, uint32 spellId); void SendSpellDamageImmune(Unit* target, uint32 spellId); - void NearTeleportTo(float x, float y, float z, float orientation, bool casting = false); - void SendTeleportPacket(Position& pos); + 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); 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); |