diff options
author | Traesh <Traesh@users.noreply.github.com> | 2025-09-06 23:05:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-09-06 23:05:02 +0200 |
commit | b6b0eced74676816ae41d46ddb0ae7fa74068d3f (patch) | |
tree | aa26a648e909c3ee0ce704866074caeb28818a2c /src/server/game | |
parent | 31beaf0ba1b4ba9742b86e29d0aeef4fbbaf4983 (diff) |
Core/Spells: Implemented setting spell to cast on arrival from SPELL_EFFECT_JUMP_CHARGE in database (#30210)
Diffstat (limited to 'src/server/game')
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 13 | ||||
-rw-r--r-- | src/server/game/Movement/MovementDefines.h | 1 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 5 |
3 files changed, 15 insertions, 4 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 8f858b9ffd1..dfb0beeb00e 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -12027,8 +12027,8 @@ void ObjectMgr::LoadJumpChargeParams() // need for reload case _jumpChargeParams.clear(); - // 0 1 2 3 4 5 6 - QueryResult result = WorldDatabase.Query("SELECT id, speed, treatSpeedAsMoveTimeSeconds, jumpGravity, spellVisualId, progressCurveId, parabolicCurveId FROM jump_charge_params"); + // 0 1 2 3 4 5 6 7 + QueryResult result = WorldDatabase.Query("SELECT id, speed, treatSpeedAsMoveTimeSeconds, jumpGravity, spellVisualId, progressCurveId, parabolicCurveId, triggerSpellId FROM jump_charge_params"); if (!result) { return; @@ -12045,6 +12045,7 @@ void ObjectMgr::LoadJumpChargeParams() Optional<int32> spellVisualId = fields[4].GetInt32OrNull(); Optional<int32> progressCurveId = fields[5].GetInt32OrNull(); Optional<int32> parabolicCurveId = fields[6].GetInt32OrNull(); + Optional<int32> triggerSpellId = fields[7].GetInt32OrNull(); if (speed <= 0.0f) { @@ -12081,6 +12082,13 @@ void ObjectMgr::LoadJumpChargeParams() parabolicCurveId.reset(); } + if (triggerSpellId && !sSpellMgr->GetSpellInfo(*triggerSpellId, DIFFICULTY_NONE)) + { + TC_LOG_DEBUG("sql.sql", "Table `jump_charge_params` references non-existing trigger spell id: {} for id {}, ignored.", + *triggerSpellId, id); + triggerSpellId.reset(); + } + JumpChargeParams& params = _jumpChargeParams[id]; params.Speed = speed; params.TreatSpeedAsMoveTimeSeconds = treatSpeedAsMoveTimeSeconds; @@ -12088,6 +12096,7 @@ void ObjectMgr::LoadJumpChargeParams() params.SpellVisualId = spellVisualId; params.ProgressCurveId = progressCurveId; params.ParabolicCurveId = parabolicCurveId; + params.TriggerSpellId = triggerSpellId; } while (result->NextRow()); diff --git a/src/server/game/Movement/MovementDefines.h b/src/server/game/Movement/MovementDefines.h index 837cb7d81b2..af51de795c9 100644 --- a/src/server/game/Movement/MovementDefines.h +++ b/src/server/game/Movement/MovementDefines.h @@ -153,6 +153,7 @@ struct JumpChargeParams Optional<uint32> SpellVisualId; Optional<uint32> ProgressCurveId; Optional<uint32> ParabolicCurveId; + Optional<uint32> TriggerSpellId; }; using MovementFacingTarget = std::variant<std::monostate, Position, Unit const*, float>; diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index da0fd7be46c..01cf68b89c2 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -5865,10 +5865,11 @@ void Spell::EffectJumpCharge() } Optional<JumpArrivalCastArgs> arrivalCast; - if (effectInfo->TriggerSpell) + if (effectInfo->TriggerSpell || params->TriggerSpellId) { arrivalCast.emplace(); - arrivalCast->SpellId = effectInfo->TriggerSpell; + arrivalCast->SpellId = params->TriggerSpellId ? *params->TriggerSpellId : effectInfo->TriggerSpell; + arrivalCast->Target = unitTarget ? unitTarget->GetGUID() : ObjectGuid::Empty; } Optional<Movement::SpellEffectExtraData> effectExtra; |