From 6e659a1681522b64f2f9ca57f5a1c76df6827386 Mon Sep 17 00:00:00 2001 From: Eddy Vega <61223313+Si1ker@users.noreply.github.com> Date: Mon, 25 Jul 2022 19:10:50 -0600 Subject: [PATCH] fix(Scripts/RuinsOfAhnQiraj): Improve Moam (#12142) --- .../rev_1658790562433074900.sql | 8 ++ .../Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp | 97 ++++++++----------- 2 files changed, 48 insertions(+), 57 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1658790562433074900.sql diff --git a/data/sql/updates/pending_db_world/rev_1658790562433074900.sql b/data/sql/updates/pending_db_world/rev_1658790562433074900.sql new file mode 100644 index 000000000..bdbcd5bde --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1658790562433074900.sql @@ -0,0 +1,8 @@ +-- + +UPDATE `creature_template` SET `mingold`=0, `maxgold`=0, `AIName`='SmartAI' WHERE `entry`=15527; +DELETE FROM `smart_scripts` WHERE `entryorguid`=15527 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `target_type`, `comment`) VALUES +(15527, 0, 0, 0, 0, 0, 100, 0, 6000, 6000, 6000, 6000, 11, 25679, 2, 2, 'Mana Fiend - In Combat - Cast Arcane Explosion'), +(15527, 0, 1, 0, 13, 0, 100, 0, 10000, 20000, 0, 0, 11, 15122, 0, 2, 'Mana Fiend - In Combat - Cast Counterspell'); + diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp index 7a1fd966a..f1908a381 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp @@ -21,8 +21,8 @@ enum Texts { - EMOTE_AGGRO = 0, - EMOTE_MANA_FULL = 1 + EMOTE_AGGRO = 0, + EMOTE_MANA_FULL = 1 }; enum Spells @@ -40,17 +40,16 @@ enum Spells enum Events { - EVENT_TRAMPLE = 1, - EVENT_DRAIN_MANA = 2, - EVENT_STONE_PHASE = 3, - EVENT_STONE_PHASE_END = 4, - EVENT_WIDE_SLASH = 5, + EVENT_SPELL_TRAMPLE = 1, + EVENT_SPELL_DRAIN_MANA = 2, + EVENT_STONE_PHASE = 3, + EVENT_STONE_PHASE_END = 4 }; enum Actions { - ACTION_STONE_PHASE_START = 1, - ACTION_STONE_PHASE_END = 2, + ACTION_STONE_PHASE_START = 1, + ACTION_STONE_PHASE_END = 2 }; class boss_moam : public CreatureScript @@ -60,9 +59,7 @@ public: struct boss_moamAI : public BossAI { - boss_moamAI(Creature* creature) : BossAI(creature, DATA_MOAM) - { - } + boss_moamAI(Creature* creature) : BossAI(creature, DATA_MOAM) {} void Reset() override { @@ -70,17 +67,6 @@ public: me->SetPower(POWER_MANA, 0); me->SetRegeneratingPower(false); _isStonePhase = false; - events.ScheduleEvent(EVENT_STONE_PHASE, 90000); - //events.ScheduleEvent(EVENT_WIDE_SLASH, 11000); - } - - void DamageTaken(Unit*, uint32& /*damage*/, DamageEffectType, SpellSchoolMask) override - { - if (!_isStonePhase && HealthBelowPct(45)) - { - _isStonePhase = true; - DoAction(ACTION_STONE_PHASE_START); - } } void DoAction(int32 action) override @@ -96,10 +82,10 @@ public: } case ACTION_STONE_PHASE_START: { - DoCast(me, SPELL_SUMMON_MANA_FIEND_1); - DoCast(me, SPELL_SUMMON_MANA_FIEND_2); - DoCast(me, SPELL_SUMMON_MANA_FIEND_3); - DoCast(me, SPELL_ENERGIZE); + DoCastSelf(SPELL_SUMMON_MANA_FIEND_1); + DoCastSelf(SPELL_SUMMON_MANA_FIEND_2); + DoCastSelf(SPELL_SUMMON_MANA_FIEND_3); + DoCastSelf(SPELL_ENERGIZE); events.ScheduleEvent(EVENT_STONE_PHASE_END, 90000); break; } @@ -108,6 +94,15 @@ public: } } + void EnterCombat(Unit* who) override + { + BossAI::EnterCombat(who); + Talk(EMOTE_AGGRO); + events.ScheduleEvent(EVENT_STONE_PHASE, 90000); + events.ScheduleEvent(EVENT_SPELL_TRAMPLE, 9000); + events.ScheduleEvent(EVENT_SPELL_DRAIN_MANA, 3000); + } + void JustDied(Unit* /*killer*/) override { _JustDied(); @@ -120,26 +115,13 @@ public: return; events.Update(diff); - if (me->GetPower(POWER_MANA) == me->GetMaxPower(POWER_MANA)) { - if (_isStonePhase) - DoAction(ACTION_STONE_PHASE_END); - DoCastAOE(SPELL_ARCANE_ERUPTION); + Talk(EMOTE_MANA_FULL); + DoCastAOE(SPELL_ARCANE_ERUPTION, true); me->SetPower(POWER_MANA, 0); } - if (_isStonePhase) - { - if (events.ExecuteEvent() == EVENT_STONE_PHASE_END) - DoAction(ACTION_STONE_PHASE_END); - return; - } - - // Messing up mana-drain channel - //if (me->HasUnitState(UNIT_STATE_CASTING)) - // return; - while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) @@ -147,37 +129,38 @@ public: case EVENT_STONE_PHASE: DoAction(ACTION_STONE_PHASE_START); break; - case EVENT_DRAIN_MANA: + case EVENT_STONE_PHASE_END: + DoAction(ACTION_STONE_PHASE_END); + break; + case EVENT_SPELL_DRAIN_MANA: { std::list targetList; { const std::list& threatlist = me->GetThreatMgr().getThreatList(); for (std::list::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr) + { if ((*itr)->getTarget()->GetTypeId() == TYPEID_PLAYER && (*itr)->getTarget()->getPowerType() == POWER_MANA) + { targetList.push_back((*itr)->getTarget()); + } + } } - - Acore::Containers::RandomResize(targetList, 5); - + Acore::Containers::RandomResize(targetList, 6); for (std::list::iterator itr = targetList.begin(); itr != targetList.end(); ++itr) + { DoCast(*itr, SPELL_DRAIN_MANA); - - events.ScheduleEvent(EVENT_DRAIN_MANA, urand(5000, 15000)); + } + events.ScheduleEvent(EVENT_SPELL_DRAIN_MANA, urand(2000, 6000)); break; - }/* - case EVENT_WIDE_SLASH: - DoCast(me, SPELL_WIDE_SLASH); - events.ScheduleEvent(EVENT_WIDE_SLASH, 11000); + } + case EVENT_SPELL_TRAMPLE: + DoCastVictim(SPELL_TRAMPLE); + events.ScheduleEvent(EVENT_SPELL_TRAMPLE, 15000); break; - case EVENT_TRASH: - DoCast(me, SPELL_TRASH); - events.ScheduleEvent(EVENT_WIDE_SLASH, 16000); - break;*/ default: break; } } - DoMeleeAttackIfReady(); } private: