diff options
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 2fb4d4cd29a..492dab27bf5 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -1051,19 +1051,17 @@ void Spell::EffectTeleportUnits(SpellEffIndex /*effIndex*/) } // Init dest coordinates - uint32 mapid = destTarget->GetMapId(); - if (mapid == MAPID_INVALID) - mapid = unitTarget->GetMapId(); - float x, y, z, orientation; - destTarget->GetPosition(x, y, z, orientation); - if (!orientation && m_targets.GetUnitTarget()) - orientation = m_targets.GetUnitTarget()->GetOrientation(); - TC_LOG_DEBUG("spells", "Spell::EffectTeleportUnits - teleport unit to %u %f %f %f %f\n", mapid, x, y, z, orientation); + WorldLocation targetDest(*destTarget); + if (targetDest.GetMapId() == MAPID_INVALID) + targetDest.m_mapId = unitTarget->GetMapId(); - if (unitTarget->GetTypeId() == TYPEID_PLAYER) - unitTarget->ToPlayer()->TeleportTo(mapid, x, y, z, orientation, unitTarget == m_caster ? TELE_TO_SPELL | TELE_TO_NOT_LEAVE_COMBAT : 0); - else if (mapid == unitTarget->GetMapId()) - unitTarget->NearTeleportTo(x, y, z, orientation, unitTarget == m_caster); + if (!targetDest.GetOrientation() && m_targets.GetUnitTarget()) + targetDest.SetOrientation(m_targets.GetUnitTarget()->GetOrientation()); + + if (targetDest.GetMapId() == unitTarget->GetMapId()) + unitTarget->NearTeleportTo(targetDest, unitTarget == m_caster); + else if (unitTarget->GetTypeId() == TYPEID_PLAYER) + unitTarget->ToPlayer()->TeleportTo(targetDest, unitTarget == m_caster ? TELE_TO_SPELL : 0); else { TC_LOG_ERROR("spells", "Spell::EffectTeleportUnits - spellId %u attempted to teleport creature to a different map.", m_spellInfo->Id); @@ -1071,6 +1069,7 @@ void Spell::EffectTeleportUnits(SpellEffIndex /*effIndex*/) } // post effects for TARGET_DEST_DB + /// @todo: awful hacks, move this to spellscripts switch (m_spellInfo->Id) { // Dimensional Ripper - Everlook |