aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoName <322016+Faq@users.noreply.github.com>2020-03-17 21:01:13 +0200
committerShauren <shauren.trinity@gmail.com>2021-12-23 22:44:06 +0100
commitcc1c67183f9e35c4495cd19a7fd1c786c653e368 (patch)
tree93f297ddfdc1fa3dcee4ad48d013658ffd2660d4
parent934c320d4b0da40691be7449f860447fe79b4083 (diff)
Core/Spell: SPELL_EFFECT_PULL_TOWARDS correction (#24251)
* SPELL_EFFECT_PULL_TOWARDS correction * Hi Appveyor (cherry picked from commit b88881f8adc2448395f7487d398012094a06a64f)
-rw-r--r--src/server/game/Spells/SpellEffects.cpp13
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()