aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/SpellEffects.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-11-28 00:05:38 +0100
committerShauren <shauren.trinity@gmail.com>2021-11-28 00:05:38 +0100
commita809932f5017c98092a02694e86e276add03f8b9 (patch)
tree1ba76f989a3082339832c2e50ad40d138f8d386d /src/server/game/Spells/SpellEffects.cpp
parent684cd9d9681466019dcd06ad6f994890cff8cb2e (diff)
Core/Spells: Implemented spell effect 254 (SPELL_EFFECT_JUMP_CHARGE)
Diffstat (limited to 'src/server/game/Spells/SpellEffects.cpp')
-rw-r--r--src/server/game/Spells/SpellEffects.cpp45
1 files changed, 44 insertions, 1 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index e4930d40296..2d8fd4e2394 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -335,7 +335,7 @@ NonDefaultConstructible<SpellEffectHandlerFn> SpellEffectHandlers[TOTAL_SPELL_EF
&Spell::EffectNULL, //251 SPELL_EFFECT_SET_GARRISON_CACHE_SIZE
&Spell::EffectTeleportUnits, //252 SPELL_EFFECT_TELEPORT_UNITS
&Spell::EffectGiveHonor, //253 SPELL_EFFECT_GIVE_HONOR
- &Spell::EffectNULL, //254 SPELL_EFFECT_JUMP_CHARGE
+ &Spell::EffectJumpCharge, //254 SPELL_EFFECT_JUMP_CHARGE
&Spell::EffectLearnTransmogSet, //255 SPELL_EFFECT_LEARN_TRANSMOG_SET
&Spell::EffectUnused, //256 SPELL_EFFECT_256
&Spell::EffectUnused, //257 SPELL_EFFECT_257
@@ -5856,6 +5856,49 @@ void Spell::EffectGiveHonor()
playerTarget->SendDirectMessage(packet.Write());
}
+void Spell::EffectJumpCharge()
+{
+ if (effectHandleMode != SPELL_EFFECT_HANDLE_LAUNCH)
+ return;
+
+ if (!unitCaster)
+ return;
+
+ if (unitCaster->IsInFlight())
+ return;
+
+ JumpChargeParams const* params = sObjectMgr->GetJumpChargeParams(effectInfo->MiscValue);
+ if (!params)
+ return;
+
+ float speed = params->Speed;
+ if (params->TreatSpeedAsMoveTimeSeconds)
+ speed = unitCaster->GetExactDist2d(destTarget) / params->MoveTimeInSec;
+
+ Optional<JumpArrivalCastArgs> arrivalCast;
+ if (effectInfo->TriggerSpell)
+ {
+ arrivalCast.emplace();
+ arrivalCast->SpellId = effectInfo->TriggerSpell;
+ }
+
+ Optional<Movement::SpellEffectExtraData> effectExtra;
+ if (params->SpellVisualId || params->ProgressCurveId || params->ParabolicCurveId)
+ {
+ effectExtra.emplace();
+ if (params->SpellVisualId)
+ effectExtra->SpellVisualId = *params->SpellVisualId;
+
+ if (params->ProgressCurveId)
+ effectExtra->ProgressCurveId = *params->ProgressCurveId;
+
+ if (params->ParabolicCurveId)
+ effectExtra->ParabolicCurveId = *params->ParabolicCurveId;
+ }
+
+ unitCaster->GetMotionMaster()->MoveJumpWithGravity(*destTarget, speed, params->JumpGravity, EVENT_JUMP, false, arrivalCast.get_ptr(), effectExtra.get_ptr());
+}
+
void Spell::EffectLearnTransmogSet()
{
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)