From 96593c03e86acb3b80412fd77098051de0300d70 Mon Sep 17 00:00:00 2001 From: Grimgravy Date: Thu, 25 Jun 2026 18:58:55 -0300 Subject: [PATCH] fix(Scripts/StormPeaks): fix Jokkum summon for quest "Krolmir, Hammer of Storms" (#25392) Co-authored-by: sudlud Co-authored-by: Claude Opus 4.8 (1M context) --- .../rev_1775570033345703200.sql | 8 +++ .../scripts/Northrend/zone_storm_peaks.cpp | 69 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1775570033345703200.sql diff --git a/data/sql/updates/pending_db_world/rev_1775570033345703200.sql b/data/sql/updates/pending_db_world/rev_1775570033345703200.sql new file mode 100644 index 000000000..56a12a5a6 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1775570033345703200.sql @@ -0,0 +1,8 @@ +-- Riding Jokkum cast is now handled by spell_q13010_jokkum_summon +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 30331) AND (`source_type` = 0) AND (`id` IN (5)); + +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_q13010_jokkum_summon'; +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_riding_jokkum'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(56541, 'spell_q13010_jokkum_summon'), +(56606, 'spell_riding_jokkum'); diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index 7b5637693..1df406b29 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -1290,6 +1290,73 @@ struct npc_oathbound_warder : public ScriptedAI } }; +class spell_q13010_jokkum_summon : public SpellScript +{ + PrepareSpellScript(spell_q13010_jokkum_summon); + + void HandleSummon(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + + Unit* caster = GetCaster(); + Player* player = caster->ToPlayer(); + if (!player) + return; + + if (player->IsInDisallowedMountForm()) + player->RemoveAurasByType(SPELL_AURA_MOD_SHAPESHIFT); + + uint32 entry = uint32(GetSpellInfo()->Effects[effIndex].MiscValue); + SummonPropertiesEntry const* properties = sSummonPropertiesStore.LookupEntry(uint32(GetSpellInfo()->Effects[effIndex].MiscValueB)); + uint32 duration = uint32(GetSpellInfo()->GetDuration()); + + Position pos = caster->GetPosition(); + if (Creature* summon = caster->GetMap()->SummonCreature(entry, pos, properties, duration, caster, GetSpellInfo()->Id)) + { + uint32 spellId = GetSpellInfo()->Effects[EFFECT_0].CalcValue(); + caster->CastSpell(summon, spellId, true); + + if (summon->IsImmuneToNPC()) + summon->SetDisableGravity(false); + } + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_q13010_jokkum_summon::HandleSummon, EFFECT_0, SPELL_EFFECT_SUMMON); + } +}; + +enum KingJokkum +{ + NPC_KING_JOKKUM = 30331 +}; + +class spell_riding_jokkum : public AuraScript +{ + PrepareAuraScript(spell_riding_jokkum); + + void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* charm = GetUnitOwner()->GetCharm(); + if (!charm || charm->GetEntry() != NPC_KING_JOKKUM) + return; + + Creature* summoned = charm->ToCreature(); + if (!summoned) + return; + + AuraRemoveMode removeMode = GetTargetApplication()->GetRemoveMode(); + if (removeMode == AURA_REMOVE_BY_CANCEL) + summoned->DespawnOrUnsummon(); + } + + void Register() override + { + OnEffectRemove += AuraEffectRemoveFn(spell_riding_jokkum::HandleEffectRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + void AddSC_storm_peaks() { RegisterCreatureAI(npc_frosthound); @@ -1316,4 +1383,6 @@ void AddSC_storm_peaks() RegisterSpellScript(spell_fatal_strike); RegisterSpellScript(spell_player_mount_wyrm); RegisterSpellScript(spell_eject_passenger_wild_wyrm); + RegisterSpellScript(spell_q13010_jokkum_summon); + RegisterSpellScript(spell_riding_jokkum); }