diff options
-rw-r--r-- | src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp | 232 |
1 files changed, 105 insertions, 127 deletions
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp index 28d34c6f053..33dd1372999 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp @@ -55,103 +55,92 @@ enum Spells Position const xerestraszaMovePos = {3151.236f, 379.8733f, 86.31996f, 0.0f}; -class npc_xerestrasza : public CreatureScript +struct npc_xerestrasza : public ScriptedAI { - public: - npc_xerestrasza() : CreatureScript("npc_xerestrasza") { } - - struct npc_xerestraszaAI : public ScriptedAI + npc_xerestrasza(Creature* creature) : ScriptedAI(creature) + { + _isIntro = true; + _introDone = false; + } + + void Reset() override + { + _events.Reset(); + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + } + + void DoAction(int32 action) override + { + if (action == ACTION_BALTHARUS_DEATH) { - npc_xerestraszaAI(Creature* creature) : ScriptedAI(creature) - { - _isIntro = true; - _introDone = false; - } + me->setActive(true); + me->SetFarVisible(true); + _isIntro = false; + + Talk(SAY_XERESTRASZA_EVENT); + me->SetWalk(true); + me->GetMotionMaster()->MovePoint(0, xerestraszaMovePos); + + _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_1, 16s); + _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_2, 25s); + _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_3, 32s); + _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_4, 42s); + _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_5, 51s); + _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_6, 61s); + _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_7, 69s); + } + else if (action == ACTION_INTRO_BALTHARUS && !_introDone) + { + _introDone = true; + Talk(SAY_XERESTRASZA_INTRO); + } + } - void Reset() override - { - _events.Reset(); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); - } + void UpdateAI(uint32 diff) override + { + if (_isIntro) + return; - void DoAction(int32 action) override - { - if (action == ACTION_BALTHARUS_DEATH) - { - me->setActive(true); - me->SetFarVisible(true); - _isIntro = false; - - Talk(SAY_XERESTRASZA_EVENT); - me->SetWalk(true); - me->GetMotionMaster()->MovePoint(0, xerestraszaMovePos); - - _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_1, 16s); - _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_2, 25s); - _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_3, 32s); - _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_4, 42s); - _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_5, 51s); - _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_6, 61s); - _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_7, 69s); - } - else if (action == ACTION_INTRO_BALTHARUS && !_introDone) - { - _introDone = true; - Talk(SAY_XERESTRASZA_INTRO); - } - } + _events.Update(diff); - void UpdateAI(uint32 diff) override + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) { - if (_isIntro) - return; - - _events.Update(diff); - - while (uint32 eventId = _events.ExecuteEvent()) - { - switch (eventId) - { - case EVENT_XERESTRASZA_EVENT_1: - Talk(SAY_XERESTRASZA_EVENT_1); - break; - case EVENT_XERESTRASZA_EVENT_2: - Talk(SAY_XERESTRASZA_EVENT_2); - break; - case EVENT_XERESTRASZA_EVENT_3: - Talk(SAY_XERESTRASZA_EVENT_3); - break; - case EVENT_XERESTRASZA_EVENT_4: - Talk(SAY_XERESTRASZA_EVENT_4); - break; - case EVENT_XERESTRASZA_EVENT_5: - Talk(SAY_XERESTRASZA_EVENT_5); - break; - case EVENT_XERESTRASZA_EVENT_6: - Talk(SAY_XERESTRASZA_EVENT_6); - break; - case EVENT_XERESTRASZA_EVENT_7: - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); - Talk(SAY_XERESTRASZA_EVENT_7); - me->setActive(false); - me->SetFarVisible(false); - break; - default: - break; - } - } + case EVENT_XERESTRASZA_EVENT_1: + Talk(SAY_XERESTRASZA_EVENT_1); + break; + case EVENT_XERESTRASZA_EVENT_2: + Talk(SAY_XERESTRASZA_EVENT_2); + break; + case EVENT_XERESTRASZA_EVENT_3: + Talk(SAY_XERESTRASZA_EVENT_3); + break; + case EVENT_XERESTRASZA_EVENT_4: + Talk(SAY_XERESTRASZA_EVENT_4); + break; + case EVENT_XERESTRASZA_EVENT_5: + Talk(SAY_XERESTRASZA_EVENT_5); + break; + case EVENT_XERESTRASZA_EVENT_6: + Talk(SAY_XERESTRASZA_EVENT_6); + break; + case EVENT_XERESTRASZA_EVENT_7: + me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + Talk(SAY_XERESTRASZA_EVENT_7); + me->setActive(false); + me->SetFarVisible(false); + break; + default: + break; } - - private: - EventMap _events; - bool _isIntro; - bool _introDone; - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetRubySanctumAI<npc_xerestraszaAI>(creature); } + } + +private: + EventMap _events; + bool _isIntro; + bool _introDone; }; class at_baltharus_plateau : public OnlyOnceAreaTriggerScript @@ -176,53 +165,42 @@ class at_baltharus_plateau : public OnlyOnceAreaTriggerScript }; // 75415 - Rallying Shout -class spell_ruby_sanctum_rallying_shout : public SpellScriptLoader +class spell_ruby_sanctum_rallying_shout : public SpellScript { - public: - spell_ruby_sanctum_rallying_shout() : SpellScriptLoader("spell_ruby_sanctum_rallying_shout") { } - - class spell_ruby_sanctum_rallying_shout_SpellScript : public SpellScript - { - PrepareSpellScript(spell_ruby_sanctum_rallying_shout_SpellScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_RALLY }); - } - - void CountTargets(std::list<WorldObject*>& targets) - { - _targetCount = targets.size(); - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - if (_targetCount && !GetCaster()->HasAura(SPELL_RALLY)) - { - CastSpellExtraArgs args(TRIGGERED_FULL_MASK); - args.AddSpellMod(SPELLVALUE_AURA_STACK, _targetCount); - GetCaster()->CastSpell(GetCaster(), SPELL_RALLY, args); - } - } + PrepareSpellScript(spell_ruby_sanctum_rallying_shout); - void Register() override - { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_ruby_sanctum_rallying_shout_SpellScript::CountTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); - OnEffectHit += SpellEffectFn(spell_ruby_sanctum_rallying_shout_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_RALLY }); + } - uint32 _targetCount = 0; - }; + void CountTargets(std::list<WorldObject*>& targets) + { + _targetCount = targets.size(); + } - SpellScript* GetSpellScript() const override + void HandleDummy(SpellEffIndex /*effIndex*/) + { + if (_targetCount && !GetCaster()->HasAura(SPELL_RALLY)) { - return new spell_ruby_sanctum_rallying_shout_SpellScript(); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.AddSpellMod(SPELLVALUE_AURA_STACK, _targetCount); + GetCaster()->CastSpell(GetCaster(), SPELL_RALLY, args); } + } + + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_ruby_sanctum_rallying_shout::CountTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); + OnEffectHit += SpellEffectFn(spell_ruby_sanctum_rallying_shout::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } + + uint32 _targetCount = 0; }; void AddSC_ruby_sanctum() { - new npc_xerestrasza(); + RegisterRubySanctumCreatureAI(npc_xerestrasza); new at_baltharus_plateau(); - new spell_ruby_sanctum_rallying_shout(); + RegisterSpellScript(spell_ruby_sanctum_rallying_shout); } |