aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2018-02-04 22:47:53 -0300
committerariel- <ariel-@users.noreply.github.com>2018-02-04 22:47:53 -0300
commit65709e1c3081c97442792695cbc0f0826015d625 (patch)
treed5ddf163a690bf33ac6515d15ccc05ade2c8c18c /src
parente979a58d17081edb2a8bbba81b8ff1f80472b42c (diff)
Core/Spells: fix logic error causing near teleports to drop combat for players
Closes #21362
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Spells/SpellEffects.cpp23
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