summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp109
1 files changed, 35 insertions, 74 deletions
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
index 86f6312741..74d7ff147c 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
@@ -70,17 +70,8 @@ struct boss_brutallus : public BossAI
void Reset() override
{
BossAI::Reset();
- me->CastSpell(me, SPELL_DUAL_WIELD, true);
- }
-
- void DamageTaken(Unit* who, uint32& damage, DamageEffectType, SpellSchoolMask) override
- {
- if (me->GetReactState() == REACT_PASSIVE && (!who || who->GetEntry() != NPC_MADRIGOSA))
- {
- if (who)
- Unit::Kill(me, who);
- damage = 0;
- }
+ DoCastSelf(SPELL_DUAL_WIELD, true);
+ me->m_Events.KillAllEvents(false);
}
void JustEngagedWith(Unit* who) override
@@ -91,10 +82,24 @@ struct boss_brutallus : public BossAI
Talk(YELL_AGGRO);
BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_SPELL_SLASH, 11000);
- events.ScheduleEvent(EVENT_SPELL_STOMP, 30000);
- events.ScheduleEvent(EVENT_SPELL_BURN, 45000);
- events.ScheduleEvent(EVENT_SPELL_BERSERK, 360000);
+ ScheduleTimedEvent(11s, [&] {
+ DoCastVictim(SPELL_METEOR_SLASH);
+ }, 10s);
+
+ ScheduleTimedEvent(30s, [&] {
+ DoCastVictim(SPELL_STOMP);
+ Talk(YELL_LOVE);
+ }, 30s);
+
+ ScheduleTimedEvent(45s, [&] {
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true, true, -SPELL_BURN_DAMAGE))
+ DoCast(target, SPELL_BURN);
+ }, 1min);
+
+ me->m_Events.AddEventAtOffset([&] {
+ DoCastSelf(SPELL_BERSERK, true);
+ Talk(YELL_BERSERK);
+ }, 6min);
}
void KilledUnit(Unit* victim) override
@@ -108,7 +113,7 @@ struct boss_brutallus : public BossAI
BossAI::JustDied(killer);
Talk(YELL_DEATH);
- me->CastSpell(me, SPELL_SUMMON_BRUTALLUS_DEATH_CLOUD, true);
+ DoCastAOE(SPELL_SUMMON_BRUTALLUS_DEATH_CLOUD, true);
if (Creature* madrigosa = instance->GetCreature(DATA_MADRIGOSA))
madrigosa->AI()->DoAction(ACTION_SPAWN_FELMYST);
}
@@ -119,40 +124,6 @@ struct boss_brutallus : public BossAI
return;
BossAI::AttackStart(who);
}
-
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- switch (events.ExecuteEvent())
- {
- case EVENT_SPELL_SLASH:
- me->CastSpell(me->GetVictim(), SPELL_METEOR_SLASH, false);
- events.ScheduleEvent(EVENT_SPELL_SLASH, 10000);
- break;
- case EVENT_SPELL_STOMP:
- me->CastSpell(me->GetVictim(), SPELL_STOMP, false);
- Talk(YELL_LOVE);
- events.ScheduleEvent(EVENT_SPELL_STOMP, 30000);
- break;
- case EVENT_SPELL_BURN:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true, true, -SPELL_BURN_DAMAGE))
- me->CastSpell(target, SPELL_BURN, false);
- events.ScheduleEvent(EVENT_SPELL_BURN, 60000);
- break;
- case EVENT_SPELL_BERSERK:
- me->CastSpell(me, SPELL_BERSERK, true);
- Talk(YELL_BERSERK);
- break;
- }
-
- DoMeleeAttackIfReady();
- }
};
enum eMadrigosa
@@ -400,18 +371,13 @@ class spell_madrigosa_activate_barrier : public SpellScript
{
go->SetGoState(GO_STATE_READY);
if (Map* map = go->GetMap())
- {
- Map::PlayerList const& PlayerList = map->GetPlayers();
- for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
- if (i->GetSource())
- {
- UpdateData data;
- WorldPacket pkt;
- go->BuildValuesUpdateBlockForPlayer(&data, i->GetSource());
- data.BuildPacket(pkt);
- i->GetSource()->GetSession()->SendPacket(&pkt);
- }
- }
+ map->DoForAllPlayers([&](Player* player) {
+ UpdateData data;
+ WorldPacket pkt;
+ go->BuildValuesUpdateBlockForPlayer(&data, player);
+ data.BuildPacket(pkt);
+ player->GetSession()->SendPacket(&pkt);
+ });
}
}
@@ -432,18 +398,13 @@ class spell_madrigosa_deactivate_barrier : public SpellScript
{
go->SetGoState(GO_STATE_ACTIVE);
if (Map* map = go->GetMap())
- {
- Map::PlayerList const& PlayerList = map->GetPlayers();
- for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
- if (i->GetSource())
- {
- UpdateData data;
- WorldPacket pkt;
- go->BuildValuesUpdateBlockForPlayer(&data, i->GetSource());
- data.BuildPacket(pkt);
- i->GetSource()->GetSession()->SendPacket(&pkt);
- }
- }
+ map->DoForAllPlayers([&](Player* player) {
+ UpdateData data;
+ WorldPacket pkt;
+ go->BuildValuesUpdateBlockForPlayer(&data, player);
+ data.BuildPacket(pkt);
+ player->GetSession()->SendPacket(&pkt);
+ });
}
}