diff options
author | NoName <322016+Faq@users.noreply.github.com> | 2020-03-17 21:01:13 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-12-23 22:44:06 +0100 |
commit | cc1c67183f9e35c4495cd19a7fd1c786c653e368 (patch) | |
tree | 93f297ddfdc1fa3dcee4ad48d013658ffd2660d4 /src | |
parent | 934c320d4b0da40691be7449f860447fe79b4083 (diff) |
Core/Spell: SPELL_EFFECT_PULL_TOWARDS correction (#24251)
* SPELL_EFFECT_PULL_TOWARDS correction
* Hi Appveyor
(cherry picked from commit b88881f8adc2448395f7487d398012094a06a64f)
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() |