diff options
Diffstat (limited to 'src/server/scripts')
3 files changed, 94 insertions, 7 deletions
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp index c3c22ef0172..c1150e6e47a 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp @@ -88,7 +88,11 @@ enum BossSpells SPELL_POWER_TWINS = 65879, SPELL_BERSERK = 64238, SPELL_POWERING_UP = 67590, - SPELL_SURGE_OF_SPEED = 65828 + SPELL_SURGE_OF_SPEED = 65828, + + SPELL_SUMMON_PERIODIC_LIGHT = 66152, + SPELL_SUMMON_PERIODIC_DARK = 66153 + }; enum Events @@ -685,6 +689,32 @@ class npc_bullet_controller : public CreatureScript } }; +// 66149 - Bullet Controller Periodic +class spell_bullet_controller : public AuraScript +{ + PrepareAuraScript(spell_bullet_controller); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + return ValidateSpellInfo({ SPELL_SUMMON_PERIODIC_LIGHT, SPELL_SUMMON_PERIODIC_DARK }); + } + + void PeriodicTick(AuraEffect const* /*aurEff*/) + { + Unit* caster = GetCaster(); + if (!caster) + return; + + caster->CastCustomSpell(SPELL_SUMMON_PERIODIC_LIGHT, SPELLVALUE_MAX_TARGETS, urand(1, 6), GetTarget(), true); + caster->CastCustomSpell(SPELL_SUMMON_PERIODIC_DARK, SPELLVALUE_MAX_TARGETS, urand(1, 6), GetTarget(), true); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_bullet_controller::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + } +}; + class spell_powering_up : public SpellScriptLoader { public: @@ -871,6 +901,7 @@ void AddSC_boss_twin_valkyr() new npc_essence_of_twin(); new npc_bullet_controller(); + RegisterAuraScript(spell_bullet_controller); new spell_powering_up(); new spell_valkyr_essences(); new spell_power_of_the_twins(); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp index 5192129aa6f..cb5599cbcea 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -36,6 +36,7 @@ #include "ScriptedEscortAI.h" #include "ScriptedGossip.h" #include "Spell.h" +#include "SpellAuraEffects.h" #include "SpellInfo.h" #include "SpellScript.h" #include "ulduar.h" @@ -1466,6 +1467,54 @@ class achievement_orbit_uary : public AchievementCriteriaScript } }; +// 62399 Overload Circuit +class spell_overload_circuit : public AuraScript +{ + PrepareAuraScript(spell_overload_circuit); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + return ValidateSpellInfo({ SPELL_SYSTEMS_SHUTDOWN }); + } + + void PeriodicTick(AuraEffect const* /*aurEff*/) + { + if (!GetTarget()->GetMap()->IsDungeon() || int32(GetTarget()->GetAppliedAuras().count(GetId())) < (GetTarget()->GetMap()->Is25ManRaid() ? 4 : 2)) + return; + + GetTarget()->CastSpell(nullptr, SPELL_SYSTEMS_SHUTDOWN, true); + if (Unit* veh = GetTarget()->GetVehicleBase()) + veh->CastSpell(nullptr, SPELL_SYSTEMS_SHUTDOWN, true); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_overload_circuit::PeriodicTick, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY); + } +}; + +// 62292 Blaze +class spell_tar_blaze : public AuraScript +{ + PrepareAuraScript(spell_tar_blaze); + + bool Validate(SpellInfo const* spellInfo) + { + return ValidateSpellInfo({ spellInfo->GetEffect(EFFECT_0)->TriggerSpell }); + } + + void PeriodicTick(AuraEffect const* aurEff) + { + // should we use custom damage? + GetTarget()->CastSpell(nullptr, GetSpellInfo()->GetEffect(aurEff->GetEffIndex())->TriggerSpell, true); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_tar_blaze::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + } +}; + class spell_load_into_catapult : public SpellScriptLoader { enum Spells @@ -1824,6 +1873,8 @@ void AddSC_boss_flame_leviathan() new achievement_nuked_from_orbit(); new achievement_orbit_uary(); + RegisterAuraScript(spell_overload_circuit); + RegisterAuraScript(spell_tar_blaze); new spell_load_into_catapult(); new spell_auto_repair(); new spell_systems_shutdown(); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp index 8b4771c5f70..eeb5b293aee 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp @@ -640,7 +640,9 @@ struct boss_razorscale : public BossAI DoCastSelf(SPELL_FIREBOLT); break; case EVENT_FUSE_ARMOR: - DoCastVictim(SPELL_FUSE_ARMOR); + if (Unit* victim = me->GetVictim()) + if (!victim->HasAura(SPELL_FUSED_ARMOR)) + DoCast(victim, SPELL_FUSE_ARMOR); events.Repeat(Seconds(10), Seconds(15)); break; case EVENT_RESUME_MOVE_CHASE: @@ -1658,7 +1660,7 @@ class spell_razorscale_summon_iron_dwarves : public SpellScript } }; -// 64771 - Fuse Armor +// 64821 - Fuse Armor class spell_razorscale_fuse_armor : public AuraScript { PrepareAuraScript(spell_razorscale_fuse_armor); @@ -1668,15 +1670,18 @@ class spell_razorscale_fuse_armor : public AuraScript return ValidateSpellInfo({ SPELL_FUSED_ARMOR }); } - void HandleFused(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + void HandleFused(AuraEffect const* /*aurEff*/) { - if (GetStackAmount() == 5) - GetTarget()->CastSpell(GetTarget(), SPELL_FUSED_ARMOR, true); + if (GetStackAmount() != GetSpellInfo()->StackAmount) + return; + + GetTarget()->CastSpell(nullptr, SPELL_FUSED_ARMOR, true); + Remove(); } void Register() override { - AfterEffectApply += AuraEffectRemoveFn(spell_razorscale_fuse_armor::HandleFused, EFFECT_1, SPELL_AURA_MOD_MELEE_HASTE, AURA_EFFECT_HANDLE_REAL); + OnEffectPeriodic += AuraEffectPeriodicFn(spell_razorscale_fuse_armor::HandleFused, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; |
