diff options
-rw-r--r-- | sql/updates/world/2011_08_19_02_world_spell_script_names.sql | 4 | ||||
-rw-r--r-- | src/server/scripts/Northrend/Ulduar/ulduar/boss_assembly_of_iron.cpp | 43 |
2 files changed, 44 insertions, 3 deletions
diff --git a/sql/updates/world/2011_08_19_02_world_spell_script_names.sql b/sql/updates/world/2011_08_19_02_world_spell_script_names.sql new file mode 100644 index 00000000000..8035a77d778 --- /dev/null +++ b/sql/updates/world/2011_08_19_02_world_spell_script_names.sql @@ -0,0 +1,4 @@ +DELETE FROM `spell_script_names` WHERE `spell_id`=61889; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) +VALUES +(61889,'spell_assembly_meltdown'); diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_assembly_of_iron.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_assembly_of_iron.cpp index 4b2776b688f..cab271f923f 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_assembly_of_iron.cpp +++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_assembly_of_iron.cpp @@ -95,6 +95,7 @@ enum AssemblyActions ACTION_STEELBREAKER = 0, ACTION_MOLGEIM = 1, ACTION_BRUNDIR = 2, + ACTION_ADD_CHARGE = 3, }; enum AssemblyYells @@ -243,7 +244,10 @@ class boss_steelbreaker : public CreatureScript events.RescheduleEvent(EVENT_STATIC_DISRUPTION, 30000); if (phase >= 3) events.RescheduleEvent(EVENT_OVERWHELMING_POWER, urand(2000, 5000)); - break; + break; + case ACTION_ADD_CHARGE: + DoCast(me, SPELL_ELECTRICAL_CHARGE, true); + break; } } @@ -413,7 +417,7 @@ class boss_runemaster_molgeim : public CreatureScript DoCast(SPELL_BERSERK); events.CancelEvent(EVENT_BERSERK); break; - case EVENT_RUNE_OF_POWER: // Improve target selection; random alive friendly + case EVENT_RUNE_OF_POWER: { Unit* target = NULL; switch (urand(0, 2)) @@ -628,7 +632,7 @@ class boss_stormcaller_brundir : public CreatureScript Steelbreaker->AI()->DoAction(ACTION_STEELBREAKER); // Prevent to have Brundir somewhere in the air when he die in Air phase - if (me->GetPositionZ() > FLOOR_Z/* + 5.0f*/) + if (me->GetPositionZ() > FLOOR_Z) me->GetMotionMaster()->MoveFall(FLOOR_Z); } @@ -765,6 +769,38 @@ class spell_shield_of_runes : public SpellScriptLoader } }; +class spell_assembly_meltdown : public SpellScriptLoader +{ + public: + spell_assembly_meltdown() : SpellScriptLoader("spell_assembly_meltdown") { } + + class spell_assembly_meltdown_SpellScript : public SpellScript + { + PrepareSpellScript(spell_assembly_meltdown_SpellScript); + + void HandleInstaKill(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + if (!caster) + return; + + if (InstanceScript* instance = caster->GetInstanceScript()) + if (Creature* Steelbreaker = ObjectAccessor::GetCreature(*caster, instance->GetData64(BOSS_STEELBREAKER))) + Steelbreaker->AI()->DoAction(ACTION_ADD_CHARGE); + } + + void Register() + { + OnEffect += SpellEffectFn(spell_assembly_meltdown_SpellScript::HandleInstaKill, EFFECT_1, SPELL_EFFECT_INSTAKILL); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_assembly_meltdown_SpellScript(); + } +}; + void AddSC_boss_assembly_of_iron() { new boss_steelbreaker(); @@ -774,4 +810,5 @@ void AddSC_boss_assembly_of_iron() new mob_rune_of_summoning(); new mob_rune_of_power(); new spell_shield_of_runes(); + new spell_assembly_meltdown(); } |