diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 854fd4b22d9..6004dc11ac7 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -4002,12 +4002,15 @@ void Spell::EffectPullTowards() if (!unitTarget) return; - float speedXY = effectInfo->MiscValue / 10.0f; - float speedZ = damage / 10.0f; - Position pos; - pos.Relocate(m_caster); + Position pos = m_caster->GetFirstCollisionPosition(m_caster->GetCombatReach(), m_caster->GetRelativeAngle(unitTarget)); + + // This is a blizzlike mistake: this should be 2D distance according to projectile motion formulas, but Blizzard erroneously used 3D distance. + float distXY = unitTarget->GetExactDist(pos); + float distZ = pos.GetPositionZ() - unitTarget->GetPositionZ(); + float speedXY = effectInfo->MiscValue ? effectInfo->MiscValue / 10.0f : 30.0f; + float speedZ = (2 * speedXY * speedXY * distZ + Movement::gravity * distXY * distXY) / (2 * speedXY * distXY); - unitTarget->GetMotionMaster()->MoveJump(pos, speedXY, speedZ); + unitTarget->JumpTo(speedXY, speedZ, true, pos); } void Spell::EffectPullTowardsDest() |