diff options
author | offl <11556157+offl@users.noreply.github.com> | 2022-06-25 00:15:33 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-25 00:15:33 +0300 |
commit | 2d348b6d8b39f93a7cc18731aa394116332c5cf5 (patch) | |
tree | eccb5a1f85fbec8f63a00aaea738b512fc57e996 /src | |
parent | f922a7dff644451a05a6b0088b652fbe86dafebc (diff) |
Scripts/Oculus: Update Drakos the Interrogator (#28053)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp | 170 |
1 files changed, 75 insertions, 95 deletions
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp index 24f688ab4ad..77c3d618245 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp @@ -15,70 +15,87 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "ScriptMgr.h" #include "InstanceScript.h" -#include "MotionMaster.h" -#include "oculus.h" #include "ScriptedCreature.h" +#include "ScriptMgr.h" +#include "SpellScript.h" +#include "SpellInfo.h" +#include "SpellMgr.h" +#include "oculus.h" -enum Spells +enum Texts { - SPELL_MAGIC_PULL = 51336, - SPELL_THUNDERING_STOMP = 50774, - SPELL_UNSTABLE_SPHERE_PASSIVE = 50756, - SPELL_UNSTABLE_SPHERE_PULSE = 50757, - SPELL_UNSTABLE_SPHERE_TIMER = 50758, - NPC_UNSTABLE_SPHERE = 28166, + SAY_AGGRO = 0, + SAY_KILL = 1, + SAY_DEATH = 2, + SAY_PULL = 3, + SAY_STOMP = 4, + EMOTE_PULL = 5 }; -enum Yells +enum Spells { - SAY_AGGRO = 0, - SAY_KILL = 1, - SAY_DEATH = 2, - SAY_PULL = 3, - SAY_STOMP = 4 + SPELL_SUMMON_UNSTABLE_SPHERE = 50754, + SPELL_MAGIC_PULL = 51336, + SPELL_THUNDERING_STOMP = 50774, + + SPELL_MAGIC_PULL_EFFECT = 50770 }; -enum DrakosAchievement +enum Events { - ACHIEV_TIMED_START_EVENT = 18153, + EVENT_BOMB_SUMMON = 1, + EVENT_MAGIC_PULL, + EVENT_STOMP }; -enum DrakosEvents +enum Misc { - EVENT_MAGIC_PULL = 1, - EVENT_STOMP, - EVENT_BOMB_SUMMON + ACHIEV_TIMED_START_EVENT = 18153 }; struct boss_drakos : public BossAI { - boss_drakos(Creature* creature) : BossAI(creature, DATA_DRAKOS) + boss_drakos(Creature* creature) : BossAI(creature, DATA_DRAKOS) { } + + void JustEngagedWith(Unit* who) override { - Initialize(); + BossAI::JustEngagedWith(who); + Talk(SAY_AGGRO); + + events.ScheduleEvent(EVENT_BOMB_SUMMON, 2s); + events.ScheduleEvent(EVENT_MAGIC_PULL, 10s, 18s); + events.ScheduleEvent(EVENT_STOMP, 10s, 18s); } - void Initialize() + void OnSpellStart(SpellInfo const* spell) override { - postPull = false; + if (spell->Id == SPELL_MAGIC_PULL) + { + Talk(SAY_PULL); + Talk(EMOTE_PULL); + } } - void Reset() override + void OnSpellCast(SpellInfo const* spell) override { - _Reset(); - - events.ScheduleEvent(EVENT_MAGIC_PULL, 15s); - events.ScheduleEvent(EVENT_STOMP, 15s); - events.ScheduleEvent(EVENT_BOMB_SUMMON, 2s); + if (spell->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_THUNDERING_STOMP, me)) + if (roll_chance_i(50)) + Talk(SAY_STOMP); + } - Initialize(); + void KilledUnit(Unit* /*victim*/) override + { + Talk(SAY_KILL); } - void JustEngagedWith(Unit* who) override + void JustDied(Unit* /*killer*/) override { - BossAI::JustEngagedWith(who); - Talk(SAY_AGGRO); + _JustDied(); + Talk(SAY_DEATH); + + // start achievement timer (kill Eregos within 20 min) + instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); } void UpdateAI(uint32 diff) override @@ -96,24 +113,16 @@ struct boss_drakos : public BossAI switch (eventId) { case EVENT_BOMB_SUMMON: - { - for (uint8 i = 0; i <= (postPull ? 3 : 0); i++) - { - Position position = me->GetRandomNearPosition(frand(0.0f, 10.0f)); - me->SummonCreature(NPC_UNSTABLE_SPHERE, position); - } - } - events.ScheduleEvent(EVENT_BOMB_SUMMON, 2s); + DoCastSelf(SPELL_SUMMON_UNSTABLE_SPHERE); + events.Repeat(2s); break; case EVENT_MAGIC_PULL: - DoCast(SPELL_MAGIC_PULL); - postPull = true; - events.ScheduleEvent(EVENT_MAGIC_PULL, 15s); + DoCastSelf(SPELL_MAGIC_PULL); + events.Repeat(6s, 14s); break; case EVENT_STOMP: - Talk(SAY_STOMP); - DoCast(SPELL_THUNDERING_STOMP); - events.ScheduleEvent(EVENT_STOMP, 15s); + DoCastSelf(SPELL_THUNDERING_STOMP); + events.Repeat(10s, 20s); break; default: break; @@ -125,68 +134,39 @@ struct boss_drakos : public BossAI DoMeleeAttackIfReady(); } - - void JustDied(Unit* /*killer*/) override - { - _JustDied(); - - Talk(SAY_DEATH); - - // start achievement timer (kill Eregos within 20 min) - instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); - } - - void KilledUnit(Unit* /*victim*/) override - { - Talk(SAY_KILL); - } - -private: - bool postPull; }; -struct npc_unstable_sphere : public ScriptedAI +// 51336 - Magic Pull +class spell_drakos_magic_pull : public SpellScript { - npc_unstable_sphere(Creature* creature) : ScriptedAI(creature) + PrepareSpellScript(spell_drakos_magic_pull); + + bool Validate(SpellInfo const* /*spellInfo*/) override { - Initialize(); + return ValidateSpellInfo({ SPELL_MAGIC_PULL_EFFECT, SPELL_SUMMON_UNSTABLE_SPHERE }); } - void Initialize() + void HandleDummy(SpellEffIndex /*effIndex*/) { - pulseTimer = 3000; + GetCaster()->CastSpell(GetHitUnit(), SPELL_MAGIC_PULL_EFFECT, true); } - void Reset() override + void HandleAfterCast() { - me->SetReactState(REACT_PASSIVE); - me->GetMotionMaster()->MoveRandom(40.0f); - - me->AddAura(SPELL_UNSTABLE_SPHERE_PASSIVE, me); - me->AddAura(SPELL_UNSTABLE_SPHERE_TIMER, me); - - Initialize(); - - me->DespawnOrUnsummon(19s); + Unit* caster = GetCaster(); + for (uint8 i = 0; i < 5; i++) + caster->CastSpell(caster, SPELL_SUMMON_UNSTABLE_SPHERE, true); } - void UpdateAI(uint32 diff) override + void Register() override { - if (pulseTimer <= diff) - { - DoCast(SPELL_UNSTABLE_SPHERE_PULSE); - pulseTimer = 3 * IN_MILLISECONDS; - } - else - pulseTimer -= diff; + OnEffectHitTarget += SpellEffectFn(spell_drakos_magic_pull::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + AfterCast += SpellCastFn(spell_drakos_magic_pull::HandleAfterCast); } - -private: - uint32 pulseTimer; }; void AddSC_boss_drakos() { RegisterOculusCreatureAI(boss_drakos); - RegisterOculusCreatureAI(npc_unstable_sphere); + RegisterSpellScript(spell_drakos_magic_pull); } |