diff options
| author | Shauren <shauren.trinity@gmail.com> | 2021-11-28 00:05:38 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-11-28 00:05:38 +0100 |
| commit | a809932f5017c98092a02694e86e276add03f8b9 (patch) | |
| tree | 1ba76f989a3082339832c2e50ad40d138f8d386d /src/server/game/Spells/SpellEffects.cpp | |
| parent | 684cd9d9681466019dcd06ad6f994890cff8cb2e (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.cpp | 45 |
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) |
