From 3596fc11f4dc0660a4950a2f125ff7a8716ced16 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Wed, 17 Jun 2026 21:26:05 -0300 Subject: [PATCH] fix(Scripts/Ulduar): correct Ignis Iron Construct Brittle shatter threshold (#26260) Co-authored-by: Claude Opus 4.8 --- .../rev_1781737630533813500.sql | 8 +++ .../Northrend/Ulduar/Ulduar/boss_ignis.cpp | 68 ++++++++++++++----- 2 files changed, 59 insertions(+), 17 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1781737630533813500.sql diff --git a/data/sql/updates/pending_db_world/rev_1781737630533813500.sql b/data/sql/updates/pending_db_world/rev_1781737630533813500.sql new file mode 100644 index 000000000..09d85aaae --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1781737630533813500.sql @@ -0,0 +1,8 @@ +-- +-- Ignis the Furnace Master: bind the Brittle aura proc script (spell_ignis_brittle_aura) +-- to both raid difficulty variants so Iron Constructs shatter at the correct, +-- tooltip-accurate damage threshold (62382 = 10m/5000, 67114 = 25m/3000). +DELETE FROM `spell_script_names` WHERE `spell_id` IN (62382, 67114); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(62382, 'spell_ignis_brittle_aura'), +(67114, 'spell_ignis_brittle_aura'); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp index e0756cbd9..1ac32a60c 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp @@ -77,6 +77,16 @@ enum eEvents EVENT_GRAB, }; +enum IgnisActions +{ + ACTION_CONSTRUCT_SHATTERED = 0, +}; + +enum IgnisData +{ + DATA_SHATTERED = 0, +}; + struct npc_ulduar_iron_construct : public ScriptedAI { npc_ulduar_iron_construct(Creature* pCreature) : ScriptedAI(pCreature) @@ -130,19 +140,6 @@ struct npc_ulduar_iron_construct : public ScriptedAI } } - void DamageTaken(Unit* attacker, uint32& damage, DamageEffectType, SpellSchoolMask) override - { - if (damage >= RAID_MODE(3000U, 5000U) && me->GetAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_BRITTLE, me))) - { - me->CastSpell(me, SPELL_SHATTER, true); - Unit::Kill(attacker, me); - - if (InstanceScript* instance = me->GetInstanceScript()) - if (Creature* ignis = instance->GetCreature(BOSS_IGNIS)) - ignis->AI()->SetData(1337, 0); - } - } - void JustDied(Unit* /*killer*/) override { if (InstanceScript* instance = me->GetInstanceScript()) @@ -233,9 +230,9 @@ struct boss_ignis : public BossAI } } - void SetData(uint32 id, uint32 /*value*/) override + void DoAction(int32 action) override { - if (id == 1337) + if (action == ACTION_CONSTRUCT_SHATTERED) { if (lastShatterMSTime) if (getMSTimeDiff(lastShatterMSTime, GameTime::GetGameTimeMS().count()) <= 5000) @@ -247,7 +244,7 @@ struct boss_ignis : public BossAI uint32 GetData(uint32 id) const override { - if (id == 1337) + if (id == DATA_SHATTERED) return (bShattered ? 1 : 0); return 0; } @@ -498,6 +495,42 @@ class spell_ignis_slag_pot_aura : public AuraScript } }; +// 62382, 67114 - Brittle +class spell_ignis_brittle_aura : public AuraScript +{ + PrepareAuraScript(spell_ignis_brittle_aura); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SHATTER }); + } + + bool CheckProc(ProcEventInfo& eventInfo) + { + DamageInfo* damageInfo = eventInfo.GetDamageInfo(); + return damageInfo && damageInfo->GetDamage() >= (GetId() == SPELL_BRITTLE ? 5000u : 3000u); + } + + void HandleProc(ProcEventInfo& eventInfo) + { + Unit* construct = GetTarget(); + construct->CastSpell(construct, SPELL_SHATTER, true); + + Unit* attacker = eventInfo.GetActor(); + Unit::Kill(attacker ? attacker : construct, construct); + + if (InstanceScript* instance = construct->GetInstanceScript()) + if (Creature* ignis = instance->GetCreature(BOSS_IGNIS)) + ignis->AI()->DoAction(ACTION_CONSTRUCT_SHATTERED); + } + + void Register() override + { + DoCheckProc += AuraCheckProcFn(spell_ignis_brittle_aura::CheckProc); + OnProc += AuraProcFn(spell_ignis_brittle_aura::HandleProc); + } +}; + class achievement_ignis_shattered : public AchievementCriteriaScript { public: @@ -507,7 +540,7 @@ public: { if (!target || !target->IsCreature()) return false; - return !!target->ToCreature()->AI()->GetData(1337); + return !!target->ToCreature()->AI()->GetData(DATA_SHATTERED); } }; @@ -518,5 +551,6 @@ void AddSC_boss_ignis() RegisterSpellScript(spell_ignis_scorch_aura); RegisterSpellScript(spell_ignis_grab_initial); RegisterSpellScript(spell_ignis_slag_pot_aura); + RegisterSpellScript(spell_ignis_brittle_aura); new achievement_ignis_shattered(); }