mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-26 07:06:23 +00:00
fix(Scripts/RuinsOfAhnQiraj): Improve Moam (#12142)
This commit is contained in:
@@ -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');
|
||||
|
||||
@@ -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<Unit*> targetList;
|
||||
{
|
||||
const std::list<HostileReference*>& threatlist = me->GetThreatMgr().getThreatList();
|
||||
for (std::list<HostileReference*>::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<Unit*>::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:
|
||||
|
||||
Reference in New Issue
Block a user