diff options
author | offl <11556157+offl@users.noreply.github.com> | 2021-07-15 01:55:10 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-15 01:55:10 +0300 |
commit | 24bd519f5ccbf444434aec50e956d8a904dac4c8 (patch) | |
tree | c759aaf0e1f37e06d8734205da420f1ee1600c50 | |
parent | f91e6c6b3bb2719f17b082df4a763e35c0ba8922 (diff) |
Scripts/FoS: Update remaining scripts to new register model (#26700)
-rw-r--r-- | src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp | 572 | ||||
-rw-r--r-- | src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp | 314 |
2 files changed, 410 insertions, 476 deletions
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp index 40a1d7f7b43..5b63c77bffc 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp @@ -125,351 +125,307 @@ enum Misc DATA_THREE_FACED = 1 }; -class boss_devourer_of_souls : public CreatureScript +struct boss_devourer_of_souls : public BossAI { - public: - boss_devourer_of_souls() : CreatureScript("boss_devourer_of_souls") { } - - struct boss_devourer_of_soulsAI : public BossAI + boss_devourer_of_souls(Creature* creature) : BossAI(creature, DATA_DEVOURER_OF_SOULS) + { + Initialize(); + beamAngle = 0.f; + beamAngleDiff = 0.f; + wailingSoulTick = 0; + } + + void Initialize() + { + threeFaced = true; + } + + void Reset() override + { + _Reset(); + me->SetControlled(false, UNIT_STATE_ROOT); + me->SetDisplayId(DISPLAY_ANGER); + me->SetReactState(REACT_AGGRESSIVE); + + Initialize(); + } + + void JustEngagedWith(Unit* who) override + { + BossAI::JustEngagedWith(who); + Talk(SAY_FACE_AGGRO); + + if (!me->FindNearestCreature(NPC_CRUCIBLE_OF_SOULS, 60)) // Prevent double spawn + instance->instance->SummonCreature(NPC_CRUCIBLE_OF_SOULS, CrucibleSummonPos); + events.ScheduleEvent(EVENT_PHANTOM_BLAST, 5s); + events.ScheduleEvent(EVENT_MIRRORED_SOUL, 8s); + events.ScheduleEvent(EVENT_WELL_OF_SOULS, 30s); + events.ScheduleEvent(EVENT_UNLEASHED_SOULS, 20s); + events.ScheduleEvent(EVENT_WAILING_SOULS, 60s, 70s); + } + + void KilledUnit(Unit* victim) override + { + if (victim->GetTypeId() != TYPEID_PLAYER) + return; + + uint8 textId = 0; + switch (me->GetDisplayId()) { - boss_devourer_of_soulsAI(Creature* creature) : BossAI(creature, DATA_DEVOURER_OF_SOULS) - { - Initialize(); - beamAngle = 0.f; - beamAngleDiff = 0.f; - wailingSoulTick = 0; - } + case DISPLAY_ANGER: + textId = SAY_FACE_ANGER_SLAY; + break; + case DISPLAY_SORROW: + textId = SAY_FACE_SORROW_SLAY; + break; + case DISPLAY_DESIRE: + textId = SAY_FACE_DESIRE_SLAY; + break; + default: + break; + } - void Initialize() - { - threeFaced = true; - } + if (textId) + Talk(textId); + } - void Reset() override - { - _Reset(); - me->SetControlled(false, UNIT_STATE_ROOT); - me->SetDisplayId(DISPLAY_ANGER); - me->SetReactState(REACT_AGGRESSIVE); + void JustDied(Unit* /*killer*/) override + { + _JustDied(); - Initialize(); - } + Position spawnPoint = {5618.139f, 2451.873f, 705.854f, 0}; - void JustEngagedWith(Unit* who) override - { - BossAI::JustEngagedWith(who); - Talk(SAY_FACE_AGGRO); - - if (!me->FindNearestCreature(NPC_CRUCIBLE_OF_SOULS, 60)) // Prevent double spawn - instance->instance->SummonCreature(NPC_CRUCIBLE_OF_SOULS, CrucibleSummonPos); - events.ScheduleEvent(EVENT_PHANTOM_BLAST, 5s); - events.ScheduleEvent(EVENT_MIRRORED_SOUL, 8s); - events.ScheduleEvent(EVENT_WELL_OF_SOULS, 30s); - events.ScheduleEvent(EVENT_UNLEASHED_SOULS, 20s); - events.ScheduleEvent(EVENT_WAILING_SOULS, 60s, 70s); - } + Talk(SAY_FACE_DEATH); - void KilledUnit(Unit* victim) override + int32 entryIndex; + if (instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + entryIndex = 0; + else + entryIndex = 1; + + for (int8 i = 0; outroPositions[i].entry[entryIndex] != 0; ++i) + { + if (TempSummon* summon = instance->instance->SummonCreature(outroPositions[i].entry[entryIndex], spawnPoint)) { - if (victim->GetTypeId() != TYPEID_PLAYER) - return; - - uint8 textId = 0; - switch (me->GetDisplayId()) - { - case DISPLAY_ANGER: - textId = SAY_FACE_ANGER_SLAY; - break; - case DISPLAY_SORROW: - textId = SAY_FACE_SORROW_SLAY; - break; - case DISPLAY_DESIRE: - textId = SAY_FACE_DESIRE_SLAY; - break; - default: - break; - } - - if (textId) - Talk(textId); + summon->SetTempSummonType(TEMPSUMMON_DEAD_DESPAWN); + summon->GetMotionMaster()->MovePoint(0, outroPositions[i].movePosition); + if (summon->GetEntry() == NPC_JAINA_PART2) + summon->AI()->Talk(SAY_JAINA_OUTRO); + else if (summon->GetEntry() == NPC_SYLVANAS_PART2) + summon->AI()->Talk(SAY_SYLVANAS_OUTRO); } + } + } - void JustDied(Unit* /*killer*/) override - { - _JustDied(); + void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override + { + if (spellInfo->Id == H_SPELL_PHANTOM_BLAST) + threeFaced = false; + } + + uint32 GetData(uint32 type) const override + { + if (type == DATA_THREE_FACED) + return threeFaced; + + return 0; + } - Position spawnPoint = {5618.139f, 2451.873f, 705.854f, 0}; + void UpdateAI(uint32 diff) override + { + // Return since we have no target + if (!UpdateVictim()) + return; - Talk(SAY_FACE_DEATH); + events.Update(diff); - int32 entryIndex; - if (instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - entryIndex = 0; - else - entryIndex = 1; + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - for (int8 i = 0; outroPositions[i].entry[entryIndex] != 0; ++i) - { - if (TempSummon* summon = instance->instance->SummonCreature(outroPositions[i].entry[entryIndex], spawnPoint)) + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_PHANTOM_BLAST: + DoCastVictim(SPELL_PHANTOM_BLAST); + events.ScheduleEvent(EVENT_PHANTOM_BLAST, 5s); + break; + case EVENT_MIRRORED_SOUL: + DoCastAOE(SPELL_MIRRORED_SOUL_TARGET_SELECTOR); + Talk(EMOTE_MIRRORED_SOUL); + events.ScheduleEvent(EVENT_MIRRORED_SOUL, 15s, 30s); + break; + case EVENT_WELL_OF_SOULS: + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) + DoCast(target, SPELL_WELL_OF_SOULS); + events.ScheduleEvent(EVENT_WELL_OF_SOULS, 20s); + break; + case EVENT_UNLEASHED_SOULS: + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) + DoCast(target, SPELL_UNLEASHED_SOULS); + me->SetDisplayId(DISPLAY_SORROW); + Talk(SAY_FACE_UNLEASH_SOUL); + Talk(EMOTE_UNLEASH_SOUL); + events.ScheduleEvent(EVENT_UNLEASHED_SOULS, 30s); + events.ScheduleEvent(EVENT_FACE_ANGER, 5s); + break; + case EVENT_FACE_ANGER: + me->SetDisplayId(DISPLAY_ANGER); + break; + + case EVENT_WAILING_SOULS: + me->SetDisplayId(DISPLAY_DESIRE); + Talk(SAY_FACE_WAILING_SOUL); + Talk(EMOTE_WAILING_SOUL); + DoCast(me, SPELL_WAILING_SOULS_STARTING); + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) { - summon->SetTempSummonType(TEMPSUMMON_DEAD_DESPAWN); - summon->GetMotionMaster()->MovePoint(0, outroPositions[i].movePosition); - if (summon->GetEntry() == NPC_JAINA_PART2) - summon->AI()->Talk(SAY_JAINA_OUTRO); - else if (summon->GetEntry() == NPC_SYLVANAS_PART2) - summon->AI()->Talk(SAY_SYLVANAS_OUTRO); + me->SetFacingToObject(target); + DoCast(me, SPELL_WAILING_SOULS_BEAM); } - } - } - void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override - { - if (spellInfo->Id == H_SPELL_PHANTOM_BLAST) - threeFaced = false; - } + beamAngle = me->GetOrientation(); - uint32 GetData(uint32 type) const override - { - if (type == DATA_THREE_FACED) - return threeFaced; + beamAngleDiff = float(M_PI)/30.0f; // PI/2 in 15 sec = PI/30 per tick + if (RAND(true, false)) + beamAngleDiff = -beamAngleDiff; - return 0; - } + me->InterruptNonMeleeSpells(false); + me->SetReactState(REACT_PASSIVE); - void UpdateAI(uint32 diff) override - { - // Return since we have no target - if (!UpdateVictim()) - return; + //Remove any target + me->SetTarget(ObjectGuid::Empty); - events.Update(diff); + me->GetMotionMaster()->Clear(); + me->SetControlled(true, UNIT_STATE_ROOT); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; + wailingSoulTick = 15; + events.DelayEvents(18s); // no other events during wailing souls + events.ScheduleEvent(EVENT_WAILING_SOULS_TICK, 3s); // first one after 3 secs. + break; - while (uint32 eventId = events.ExecuteEvent()) - { - switch (eventId) - { - case EVENT_PHANTOM_BLAST: - DoCastVictim(SPELL_PHANTOM_BLAST); - events.ScheduleEvent(EVENT_PHANTOM_BLAST, 5s); - break; - case EVENT_MIRRORED_SOUL: - DoCastAOE(SPELL_MIRRORED_SOUL_TARGET_SELECTOR); - Talk(EMOTE_MIRRORED_SOUL); - events.ScheduleEvent(EVENT_MIRRORED_SOUL, 15s, 30s); - break; - case EVENT_WELL_OF_SOULS: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) - DoCast(target, SPELL_WELL_OF_SOULS); - events.ScheduleEvent(EVENT_WELL_OF_SOULS, 20s); - break; - case EVENT_UNLEASHED_SOULS: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) - DoCast(target, SPELL_UNLEASHED_SOULS); - me->SetDisplayId(DISPLAY_SORROW); - Talk(SAY_FACE_UNLEASH_SOUL); - Talk(EMOTE_UNLEASH_SOUL); - events.ScheduleEvent(EVENT_UNLEASHED_SOULS, 30s); - events.ScheduleEvent(EVENT_FACE_ANGER, 5s); - break; - case EVENT_FACE_ANGER: - me->SetDisplayId(DISPLAY_ANGER); - break; - - case EVENT_WAILING_SOULS: - me->SetDisplayId(DISPLAY_DESIRE); - Talk(SAY_FACE_WAILING_SOUL); - Talk(EMOTE_WAILING_SOUL); - DoCast(me, SPELL_WAILING_SOULS_STARTING); - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) - { - me->SetFacingToObject(target); - DoCast(me, SPELL_WAILING_SOULS_BEAM); - } - - beamAngle = me->GetOrientation(); - - beamAngleDiff = float(M_PI)/30.0f; // PI/2 in 15 sec = PI/30 per tick - if (RAND(true, false)) - beamAngleDiff = -beamAngleDiff; - - me->InterruptNonMeleeSpells(false); - me->SetReactState(REACT_PASSIVE); - - //Remove any target - me->SetTarget(ObjectGuid::Empty); - - me->GetMotionMaster()->Clear(); - me->SetControlled(true, UNIT_STATE_ROOT); - - wailingSoulTick = 15; - events.DelayEvents(18s); // no other events during wailing souls - events.ScheduleEvent(EVENT_WAILING_SOULS_TICK, 3s); // first one after 3 secs. - break; - - case EVENT_WAILING_SOULS_TICK: - beamAngle += beamAngleDiff; - me->SetFacingTo(beamAngle); - - DoCast(me, SPELL_WAILING_SOULS); - - if (--wailingSoulTick) - events.ScheduleEvent(EVENT_WAILING_SOULS_TICK, 1s); - else - { - me->SetReactState(REACT_AGGRESSIVE); - me->SetDisplayId(DISPLAY_ANGER); - me->SetControlled(false, UNIT_STATE_ROOT); - me->GetMotionMaster()->MoveChase(me->GetVictim()); - events.ScheduleEvent(EVENT_WAILING_SOULS, 60s, 70s); - } - break; - } + case EVENT_WAILING_SOULS_TICK: + beamAngle += beamAngleDiff; + me->SetFacingTo(beamAngle); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - } + DoCast(me, SPELL_WAILING_SOULS); - DoMeleeAttackIfReady(); + if (--wailingSoulTick) + events.ScheduleEvent(EVENT_WAILING_SOULS_TICK, 1s); + else + { + me->SetReactState(REACT_AGGRESSIVE); + me->SetDisplayId(DISPLAY_ANGER); + me->SetControlled(false, UNIT_STATE_ROOT); + me->GetMotionMaster()->MoveChase(me->GetVictim()); + events.ScheduleEvent(EVENT_WAILING_SOULS, 60s, 70s); + } + break; } - private: - bool threeFaced; + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + } - // wailing soul event - float beamAngle; - float beamAngleDiff; - int8 wailingSoulTick; - }; + DoMeleeAttackIfReady(); + } - CreatureAI* GetAI(Creature* creature) const override - { - return GetForgeOfSoulsAI<boss_devourer_of_soulsAI>(creature); - } +private: + bool threeFaced; + + // wailing soul event + float beamAngle; + float beamAngleDiff; + int8 wailingSoulTick; }; // 69051 - Mirrored Soul -class spell_devourer_of_souls_mirrored_soul : public SpellScriptLoader +class spell_devourer_of_souls_mirrored_soul : public SpellScript { - public: - spell_devourer_of_souls_mirrored_soul() : SpellScriptLoader("spell_devourer_of_souls_mirrored_soul") { } - - class spell_devourer_of_souls_mirrored_soul_SpellScript : public SpellScript - { - PrepareSpellScript(spell_devourer_of_souls_mirrored_soul_SpellScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_MIRRORED_SOUL_PROC_AURA }); - } - - void HandleScript(SpellEffIndex /*effIndex*/) - { - if (Unit* target = GetHitUnit()) - target->CastSpell(GetCaster(), SPELL_MIRRORED_SOUL_PROC_AURA, true); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_devourer_of_souls_mirrored_soul_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const override - { - return new spell_devourer_of_souls_mirrored_soul_SpellScript(); - } + PrepareSpellScript(spell_devourer_of_souls_mirrored_soul); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_MIRRORED_SOUL_PROC_AURA }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + if (Unit* target = GetHitUnit()) + target->CastSpell(GetCaster(), SPELL_MIRRORED_SOUL_PROC_AURA, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_devourer_of_souls_mirrored_soul::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } }; // 69023 - Mirrored Soul (Proc) -class spell_devourer_of_souls_mirrored_soul_proc : public SpellScriptLoader +class spell_devourer_of_souls_mirrored_soul_proc : public AuraScript { - public: - spell_devourer_of_souls_mirrored_soul_proc() : SpellScriptLoader("spell_devourer_of_souls_mirrored_soul_proc") { } - - class spell_devourer_of_souls_mirrored_soul_proc_AuraScript : public AuraScript - { - PrepareAuraScript(spell_devourer_of_souls_mirrored_soul_proc_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_MIRRORED_SOUL_DAMAGE }); - } - - bool CheckProc(ProcEventInfo& /*eventInfo*/) - { - return GetCaster() && GetCaster()->IsAlive(); - } - - void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); - DamageInfo* damageInfo = eventInfo.GetDamageInfo(); - if (!damageInfo || !damageInfo->GetDamage()) - return; - - CastSpellExtraArgs args(TRIGGERED_FULL_MASK); - args.AddSpellBP0(CalculatePct(damageInfo->GetDamage(), 45)); - GetTarget()->CastSpell(GetCaster(), SPELL_MIRRORED_SOUL_DAMAGE, args); - } - - void Register() override - { - DoCheckProc += AuraCheckProcFn(spell_devourer_of_souls_mirrored_soul_proc_AuraScript::CheckProc); - OnEffectProc += AuraEffectProcFn(spell_devourer_of_souls_mirrored_soul_proc_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); - } - }; - - AuraScript* GetAuraScript() const override - { - return new spell_devourer_of_souls_mirrored_soul_proc_AuraScript(); - } + PrepareAuraScript(spell_devourer_of_souls_mirrored_soul_proc); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_MIRRORED_SOUL_DAMAGE }); + } + + bool CheckProc(ProcEventInfo& /*eventInfo*/) + { + return GetCaster() && GetCaster()->IsAlive(); + } + + void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + DamageInfo* damageInfo = eventInfo.GetDamageInfo(); + if (!damageInfo || !damageInfo->GetDamage()) + return; + + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.AddSpellBP0(CalculatePct(damageInfo->GetDamage(), 45)); + GetTarget()->CastSpell(GetCaster(), SPELL_MIRRORED_SOUL_DAMAGE, args); + } + + void Register() override + { + DoCheckProc += AuraCheckProcFn(spell_devourer_of_souls_mirrored_soul_proc::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_devourer_of_souls_mirrored_soul_proc::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); + } }; // 69048 - Mirrored Soul (Target Selector) -class spell_devourer_of_souls_mirrored_soul_target_selector : public SpellScriptLoader +class spell_devourer_of_souls_mirrored_soul_target_selector : public SpellScript { - public: - spell_devourer_of_souls_mirrored_soul_target_selector() : SpellScriptLoader("spell_devourer_of_souls_mirrored_soul_target_selector") { } - - class spell_devourer_of_souls_mirrored_soul_target_selector_SpellScript : public SpellScript - { - PrepareSpellScript(spell_devourer_of_souls_mirrored_soul_target_selector_SpellScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_MIRRORED_SOUL_BUFF }); - } - - void FilterTargets(std::list<WorldObject*>& targets) - { - if (targets.empty()) - return; - - WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets); - targets.clear(); - targets.push_back(target); - } - - void HandleScript(SpellEffIndex /*effIndex*/) - { - if (Unit* target = GetHitUnit()) - GetCaster()->CastSpell(target, SPELL_MIRRORED_SOUL_BUFF, false); - } - - void Register() override - { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_devourer_of_souls_mirrored_soul_target_selector_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY); - OnEffectHitTarget += SpellEffectFn(spell_devourer_of_souls_mirrored_soul_target_selector_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const override - { - return new spell_devourer_of_souls_mirrored_soul_target_selector_SpellScript(); - } + PrepareSpellScript(spell_devourer_of_souls_mirrored_soul_target_selector); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_MIRRORED_SOUL_BUFF }); + } + + void FilterTargets(std::list<WorldObject*>& targets) + { + if (targets.empty()) + return; + + WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets); + targets.clear(); + targets.push_back(target); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + if (Unit* target = GetHitUnit()) + GetCaster()->CastSpell(target, SPELL_MIRRORED_SOUL_BUFF, false); + } + + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_devourer_of_souls_mirrored_soul_target_selector::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY); + OnEffectHitTarget += SpellEffectFn(spell_devourer_of_souls_mirrored_soul_target_selector::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } }; class achievement_three_faced : public AchievementCriteriaScript @@ -492,9 +448,9 @@ class achievement_three_faced : public AchievementCriteriaScript void AddSC_boss_devourer_of_souls() { - new boss_devourer_of_souls(); - new spell_devourer_of_souls_mirrored_soul(); - new spell_devourer_of_souls_mirrored_soul_proc(); - new spell_devourer_of_souls_mirrored_soul_target_selector(); + RegisterForgeOfSoulsCreatureAI(boss_devourer_of_souls); + RegisterSpellScript(spell_devourer_of_souls_mirrored_soul); + RegisterSpellScript(spell_devourer_of_souls_mirrored_soul_proc); + RegisterSpellScript(spell_devourer_of_souls_mirrored_soul_target_selector); new achievement_three_faced(); } diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp index 9529a97744c..bbcebee96c4 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp @@ -76,210 +76,188 @@ enum ForgeSpells SPELL_LETHARGY = 69133 }; -class npc_sylvanas_fos : public CreatureScript +struct npc_sylvanas_fos : public ScriptedAI { -public: - npc_sylvanas_fos() : CreatureScript("npc_sylvanas_fos") { } + npc_sylvanas_fos(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + instance = me->GetInstanceScript(); + me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + } - struct npc_sylvanas_fosAI : public ScriptedAI + void Initialize() { - npc_sylvanas_fosAI(Creature* creature) : ScriptedAI(creature) - { - Initialize(); - instance = me->GetInstanceScript(); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - } + phase = PHASE_NORMAL; + } - void Initialize() - { - phase = PHASE_NORMAL; - } + InstanceScript* instance; - InstanceScript* instance; + EventMap events; + Phase phase; - EventMap events; - Phase phase; + void Reset() override + { + events.Reset(); + Initialize(); + } - void Reset() override + bool OnGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override + { + if (menuId == MENU_ID_SYLVANAS && gossipListId == GOSSIP_OPTION_ID) { + CloseGossipMenuFor(player); + phase = PHASE_INTRO; + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); events.Reset(); - Initialize(); + events.ScheduleEvent(EVENT_INTRO_1, 1s); } + return false; + } - bool OnGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override + void UpdateAI(uint32 diff) override + { + if (phase == PHASE_INTRO) { - if (menuId == MENU_ID_SYLVANAS && gossipListId == GOSSIP_OPTION_ID) + events.Update(diff); + switch (events.ExecuteEvent()) { - CloseGossipMenuFor(player); - phase = PHASE_INTRO; - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - events.Reset(); - events.ScheduleEvent(EVENT_INTRO_1, 1s); + case EVENT_INTRO_1: + Talk(SAY_SYLVANAS_INTRO_1); + events.ScheduleEvent(EVENT_INTRO_2, 11500ms); + break; + + case EVENT_INTRO_2: + Talk(SAY_SYLVANAS_INTRO_2); + events.ScheduleEvent(EVENT_INTRO_3, 10500ms); + break; + + case EVENT_INTRO_3: + Talk(SAY_SYLVANAS_INTRO_3); + events.ScheduleEvent(EVENT_INTRO_4, 9500ms); + break; + + case EVENT_INTRO_4: + Talk(SAY_SYLVANAS_INTRO_4); + events.ScheduleEvent(EVENT_INTRO_5, 10500ms); + break; + + case EVENT_INTRO_5: + Talk(SAY_SYLVANAS_INTRO_5); + events.ScheduleEvent(EVENT_INTRO_6, 9500ms); + break; + + case EVENT_INTRO_6: + Talk(SAY_SYLVANAS_INTRO_6); + // End of Intro + phase = PHASE_NORMAL; + break; } - return false; } - void UpdateAI(uint32 diff) override - { - if (phase == PHASE_INTRO) - { - events.Update(diff); - switch (events.ExecuteEvent()) - { - case EVENT_INTRO_1: - Talk(SAY_SYLVANAS_INTRO_1); - events.ScheduleEvent(EVENT_INTRO_2, 11500ms); - break; - - case EVENT_INTRO_2: - Talk(SAY_SYLVANAS_INTRO_2); - events.ScheduleEvent(EVENT_INTRO_3, 10500ms); - break; - - case EVENT_INTRO_3: - Talk(SAY_SYLVANAS_INTRO_3); - events.ScheduleEvent(EVENT_INTRO_4, 9500ms); - break; - - case EVENT_INTRO_4: - Talk(SAY_SYLVANAS_INTRO_4); - events.ScheduleEvent(EVENT_INTRO_5, 10500ms); - break; - - case EVENT_INTRO_5: - Talk(SAY_SYLVANAS_INTRO_5); - events.ScheduleEvent(EVENT_INTRO_6, 9500ms); - break; - - case EVENT_INTRO_6: - Talk(SAY_SYLVANAS_INTRO_6); - // End of Intro - phase = PHASE_NORMAL; - break; - } - } - - //Return since we have no target - if (!UpdateVictim()) - return; + //Return since we have no target + if (!UpdateVictim()) + return; - events.Update(diff); - DoMeleeAttackIfReady(); - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetForgeOfSoulsAI<npc_sylvanas_fosAI>(creature); + events.Update(diff); + DoMeleeAttackIfReady(); } }; -class npc_jaina_fos : public CreatureScript +struct npc_jaina_fos: public ScriptedAI { -public: - npc_jaina_fos() : CreatureScript("npc_jaina_fos") { } + npc_jaina_fos(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + instance = me->GetInstanceScript(); + me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + } - struct npc_jaina_fosAI: public ScriptedAI + void Initialize() { - npc_jaina_fosAI(Creature* creature) : ScriptedAI(creature) - { - Initialize(); - instance = me->GetInstanceScript(); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - } + phase = PHASE_NORMAL; + } - void Initialize() - { - phase = PHASE_NORMAL; - } + InstanceScript* instance; - InstanceScript* instance; + EventMap events; + Phase phase; - EventMap events; - Phase phase; + void Reset() override + { + events.Reset(); + Initialize(); + } - void Reset() override + bool OnGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override + { + if (menuId == MENU_ID_JAINA && gossipListId == GOSSIP_OPTION_ID) { + CloseGossipMenuFor(player); + phase = PHASE_INTRO; + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); events.Reset(); - Initialize(); + events.ScheduleEvent(EVENT_INTRO_1, 1s); } + return false; + } - bool OnGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override + void UpdateAI(uint32 diff) override + { + if (phase == PHASE_INTRO) { - if (menuId == MENU_ID_JAINA && gossipListId == GOSSIP_OPTION_ID) + events.Update(diff); + switch (events.ExecuteEvent()) { - CloseGossipMenuFor(player); - phase = PHASE_INTRO; - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - events.Reset(); - events.ScheduleEvent(EVENT_INTRO_1, 1s); + case EVENT_INTRO_1: + Talk(SAY_JAINA_INTRO_1); + events.ScheduleEvent(EVENT_INTRO_2, 8s); + break; + + case EVENT_INTRO_2: + Talk(SAY_JAINA_INTRO_2); + events.ScheduleEvent(EVENT_INTRO_3, 8500ms); + break; + + case EVENT_INTRO_3: + Talk(SAY_JAINA_INTRO_3); + events.ScheduleEvent(EVENT_INTRO_4, 8s); + break; + + case EVENT_INTRO_4: + Talk(SAY_JAINA_INTRO_4); + events.ScheduleEvent(EVENT_INTRO_5, 10s); + break; + + case EVENT_INTRO_5: + Talk(SAY_JAINA_INTRO_5); + events.ScheduleEvent(EVENT_INTRO_6, 8s); + break; + + case EVENT_INTRO_6: + Talk(SAY_JAINA_INTRO_6); + events.ScheduleEvent(EVENT_INTRO_7, 12s); + break; + + case EVENT_INTRO_7: + Talk(SAY_JAINA_INTRO_7); + events.ScheduleEvent(EVENT_INTRO_8, 8s); + break; + + case EVENT_INTRO_8: + Talk(SAY_JAINA_INTRO_8); + // End of Intro + phase = PHASE_NORMAL; + break; } - return false; } - void UpdateAI(uint32 diff) override - { - if (phase == PHASE_INTRO) - { - events.Update(diff); - switch (events.ExecuteEvent()) - { - case EVENT_INTRO_1: - Talk(SAY_JAINA_INTRO_1); - events.ScheduleEvent(EVENT_INTRO_2, 8s); - break; - - case EVENT_INTRO_2: - Talk(SAY_JAINA_INTRO_2); - events.ScheduleEvent(EVENT_INTRO_3, 8500ms); - break; - - case EVENT_INTRO_3: - Talk(SAY_JAINA_INTRO_3); - events.ScheduleEvent(EVENT_INTRO_4, 8s); - break; - - case EVENT_INTRO_4: - Talk(SAY_JAINA_INTRO_4); - events.ScheduleEvent(EVENT_INTRO_5, 10s); - break; - - case EVENT_INTRO_5: - Talk(SAY_JAINA_INTRO_5); - events.ScheduleEvent(EVENT_INTRO_6, 8s); - break; - - case EVENT_INTRO_6: - Talk(SAY_JAINA_INTRO_6); - events.ScheduleEvent(EVENT_INTRO_7, 12s); - break; - - case EVENT_INTRO_7: - Talk(SAY_JAINA_INTRO_7); - events.ScheduleEvent(EVENT_INTRO_8, 8s); - break; - - case EVENT_INTRO_8: - Talk(SAY_JAINA_INTRO_8); - // End of Intro - phase = PHASE_NORMAL; - break; - } - } - - //Return since we have no target - if (!UpdateVictim()) - return; + //Return since we have no target + if (!UpdateVictim()) + return; - events.Update(diff); + events.Update(diff); - DoMeleeAttackIfReady(); - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetForgeOfSoulsAI<npc_jaina_fosAI>(creature); + DoMeleeAttackIfReady(); } }; @@ -310,7 +288,7 @@ class spell_forge_of_souls_soul_sickness : public AuraScript void AddSC_forge_of_souls() { - new npc_sylvanas_fos(); - new npc_jaina_fos(); + RegisterForgeOfSoulsCreatureAI(npc_sylvanas_fos); + RegisterForgeOfSoulsCreatureAI(npc_jaina_fos); RegisterSpellScript(spell_forge_of_souls_soul_sickness); } |