refactor(Scripts/SunwellPlateau): Update Brutallus script (#20548)

This commit is contained in:
Andrew
2024-11-13 16:02:01 -03:00
committed by GitHub
parent 32f15256c7
commit d6b2529557
@@ -70,17 +70,8 @@ struct boss_brutallus : public BossAI
void Reset() override void Reset() override
{ {
BossAI::Reset(); BossAI::Reset();
me->CastSpell(me, SPELL_DUAL_WIELD, true); DoCastSelf(SPELL_DUAL_WIELD, true);
} me->m_Events.KillAllEvents(false);
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;
}
} }
void JustEngagedWith(Unit* who) override void JustEngagedWith(Unit* who) override
@@ -91,10 +82,24 @@ struct boss_brutallus : public BossAI
Talk(YELL_AGGRO); Talk(YELL_AGGRO);
BossAI::JustEngagedWith(who); BossAI::JustEngagedWith(who);
events.ScheduleEvent(EVENT_SPELL_SLASH, 11000); ScheduleTimedEvent(11s, [&] {
events.ScheduleEvent(EVENT_SPELL_STOMP, 30000); DoCastVictim(SPELL_METEOR_SLASH);
events.ScheduleEvent(EVENT_SPELL_BURN, 45000); }, 10s);
events.ScheduleEvent(EVENT_SPELL_BERSERK, 360000);
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 void KilledUnit(Unit* victim) override
@@ -108,7 +113,7 @@ struct boss_brutallus : public BossAI
BossAI::JustDied(killer); BossAI::JustDied(killer);
Talk(YELL_DEATH); 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)) if (Creature* madrigosa = instance->GetCreature(DATA_MADRIGOSA))
madrigosa->AI()->DoAction(ACTION_SPAWN_FELMYST); madrigosa->AI()->DoAction(ACTION_SPAWN_FELMYST);
} }
@@ -119,40 +124,6 @@ struct boss_brutallus : public BossAI
return; return;
BossAI::AttackStart(who); 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 enum eMadrigosa
@@ -400,18 +371,13 @@ class spell_madrigosa_activate_barrier : public SpellScript
{ {
go->SetGoState(GO_STATE_READY); go->SetGoState(GO_STATE_READY);
if (Map* map = go->GetMap()) if (Map* map = go->GetMap())
{ map->DoForAllPlayers([&](Player* player) {
Map::PlayerList const& PlayerList = map->GetPlayers(); UpdateData data;
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) WorldPacket pkt;
if (i->GetSource()) go->BuildValuesUpdateBlockForPlayer(&data, player);
{ data.BuildPacket(pkt);
UpdateData data; player->GetSession()->SendPacket(&pkt);
WorldPacket pkt; });
go->BuildValuesUpdateBlockForPlayer(&data, i->GetSource());
data.BuildPacket(pkt);
i->GetSource()->GetSession()->SendPacket(&pkt);
}
}
} }
} }
@@ -432,18 +398,13 @@ class spell_madrigosa_deactivate_barrier : public SpellScript
{ {
go->SetGoState(GO_STATE_ACTIVE); go->SetGoState(GO_STATE_ACTIVE);
if (Map* map = go->GetMap()) if (Map* map = go->GetMap())
{ map->DoForAllPlayers([&](Player* player) {
Map::PlayerList const& PlayerList = map->GetPlayers(); UpdateData data;
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) WorldPacket pkt;
if (i->GetSource()) go->BuildValuesUpdateBlockForPlayer(&data, player);
{ data.BuildPacket(pkt);
UpdateData data; player->GetSession()->SendPacket(&pkt);
WorldPacket pkt; });
go->BuildValuesUpdateBlockForPlayer(&data, i->GetSource());
data.BuildPacket(pkt);
i->GetSource()->GetSession()->SendPacket(&pkt);
}
}
} }
} }