aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorTraesh <Traesh@users.noreply.github.com>2025-09-06 23:05:02 +0200
committerGitHub <noreply@github.com>2025-09-06 23:05:02 +0200
commitb6b0eced74676816ae41d46ddb0ae7fa74068d3f (patch)
treeaa26a648e909c3ee0ce704866074caeb28818a2c /src/server
parent31beaf0ba1b4ba9742b86e29d0aeef4fbbaf4983 (diff)
Core/Spells: Implemented setting spell to cast on arrival from SPELL_EFFECT_JUMP_CHARGE in database (#30210)
Diffstat (limited to 'src/server')
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp13
-rw-r--r--src/server/game/Movement/MovementDefines.h1
-rw-r--r--src/server/game/Spells/SpellEffects.cpp5
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;