refactor(Scripts/SunwellPlateau): Update Brutallus script (#20548)
This commit is contained in:
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user