diff options
-rw-r--r-- | sql/updates/world/master/2025_09_06_00_world.sql | 24 | ||||
-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 |
4 files changed, 39 insertions, 4 deletions
diff --git a/sql/updates/world/master/2025_09_06_00_world.sql b/sql/updates/world/master/2025_09_06_00_world.sql new file mode 100644 index 00000000000..26981e387c3 --- /dev/null +++ b/sql/updates/world/master/2025_09_06_00_world.sql @@ -0,0 +1,24 @@ +ALTER TABLE `jump_charge_params` ADD COLUMN `triggerSpellId` INT(11) NULL AFTER `parabolicCurveId`; + +DELETE FROM `jump_charge_params` WHERE `id` IN (529,530,531,592,574,566,661,557,707,658,719,660,700,693,649,720,648,647,709,702); +INSERT INTO `jump_charge_params` (`id`,`speed`,`treatSpeedAsMoveTimeSeconds`,`jumpGravity`,`spellVisualId`,`progressCurveId`,`parabolicCurveId`,`triggerSpellId`) VALUES +(529, 0.5, 1, 47.8086, NULL, NULL, NULL, NULL), +(530, 0.5, 1, 47.8086, NULL, NULL, NULL, NULL), +(531, 0.15, 1, 526.293, NULL, NULL, NULL, NULL), +(592, 0.3, 1, 266.666, 109373, NULL, NULL, NULL), +(574, 0.04, 1, 5234.23, 108414, NULL, NULL, NULL), +(566, 1, 1, 39.3676, 108168, NULL, NULL, NULL), +(557, 1.25, 1, 19.2911, 109373, NULL, NULL, NULL), +(661, 0.75, 1, 70.9219, NULL, 392, NULL, NULL), +(707, 2, 1, 19.2911, NULL, NULL, NULL, NULL), +(658, 2, 1, 19.2911, 116541, NULL, NULL, 374075), +(719, 2, 1, 23.976, NULL, NULL, NULL, NULL), +(660, 1, 1, 23.9521, NULL, NULL, NULL, NULL), +(700, 0.75, 1, 73.6797, 119220, NULL, NULL, NULL), +(693, 1, 1, 6.96146, 93595, NULL, NULL, 382441), +(649, 0.75, 1, 42.5531, NULL, NULL, NULL, 369696), +(720, 5, 1, 3.19871, NULL, NULL, NULL, NULL), +(648, 0.35, 1, 189.37, NULL, NULL, NULL, 369602), +(647, 0.5, 1, 84.7985, NULL, NULL, NULL, 369424), +(709, 0.233, 1, 19.2911, NULL, NULL, NULL, NULL), +(702, 0.5, 1, 19.2911, NULL, NULL, NULL, NULL); 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; |