summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew <47818697+Nyeriah@users.noreply.github.com>2025-09-23 05:46:17 -0300
committerGitHub <noreply@github.com>2025-09-23 10:46:17 +0200
commit7a0b9785bb5ae22a99e269d8f462295bb43aedc4 (patch)
treea9ee4a7c71c60aa769afeccf5aa1919ec4b33ece
parentc6f24a23cc18b2ef8052237008a02093df500dcd (diff)
fix(Scripts/Gundrak): Update Slad'ran script (#22975)
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp112
1 files changed, 36 insertions, 76 deletions
diff --git a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp
index d9e57fab19..68a22e9640 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp
@@ -75,21 +75,32 @@ class boss_slad_ran : public CreatureScript
public:
boss_slad_ran() : CreatureScript("boss_slad_ran") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetGundrakAI<boss_slad_ranAI>(creature);
- }
-
struct boss_slad_ranAI : public BossAI
{
- boss_slad_ranAI(Creature* creature) : BossAI(creature, DATA_SLAD_RAN)
- {
- }
+ boss_slad_ranAI(Creature* creature) : BossAI(creature, DATA_SLAD_RAN) { }
void Reset() override
{
BossAI::Reset();
_achievement = true;
+
+ ScheduleHealthCheckEvent(90, [&] {
+ Talk(SAY_SUMMON_SNAKES);
+
+ ScheduleTimedEvent(1s, [&] {
+ for (uint8 i = MAX_CONSTRICTOR; i < MAX_SUMMONS; ++i)
+ me->SummonCreature(NPC_SLADRAN_VIPER, SpawnLoc[i], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20 * IN_MILLISECONDS);
+ }, 8s);
+ });
+
+ ScheduleHealthCheckEvent(DUNGEON_MODE(50, 75), [&] {
+ Talk(SAY_SUMMON_CONSTRICTORS);
+
+ ScheduleTimedEvent(1s, [&] {
+ for (uint8 i = 0; i < MAX_CONSTRICTOR; ++i)
+ me->SummonCreature(NPC_SLADRAN_CONSTRICTORS, SpawnLoc[i], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20 * IN_MILLISECONDS);
+ }, 3s, 5s);
+ });
}
uint32 GetData(uint32 data) const override
@@ -110,11 +121,18 @@ public:
Talk(SAY_AGGRO);
BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_POISON_NOVA, 10s);
- events.ScheduleEvent(EVENT_POWERFULL_BITE, 3s);
- events.ScheduleEvent(EVENT_VENOM_BOLT, 15s);
- events.ScheduleEvent(EVENT_CHECK_HEALTH1, 1s);
- events.ScheduleEvent(EVENT_CHECK_HEALTH2, 1s);
+ ScheduleTimedEvent(10s, [&]{
+ Talk(EMOTE_NOVA);
+ DoCastAOE(SPELL_POISON_NOVA);
+ }, 15s);
+
+ ScheduleTimedEvent(3s, [&] {
+ DoCastVictim(SPELL_POWERFULL_BITE);
+ }, 10s);
+
+ ScheduleTimedEvent(15s, [&] {
+ DoCastVictim(SPELL_VENOM_BOLT);
+ }, 10s);
}
void JustDied(Unit* killer) override
@@ -133,72 +151,14 @@ public:
}
}
- void JustSummoned(Creature* summon) override
- {
- summon->SetInCombatWithZone();
- summons.Summon(summon);
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- switch (events.ExecuteEvent())
- {
- case EVENT_CHECK_HEALTH1:
- if (me->HealthBelowPct(70))
- {
- Talk(SAY_SUMMON_SNAKES);
- events.ScheduleEvent(EVENT_SUMMON1, 1s);
- break;
- }
- events.ScheduleEvent(EVENT_CHECK_HEALTH1, 1s);
- break;
- case EVENT_CHECK_HEALTH2:
- if (me->HealthBelowPct(50))
- {
- Talk(SAY_SUMMON_CONSTRICTORS);
- events.ScheduleEvent(EVENT_SUMMON2, 1s);
- break;
- }
- events.ScheduleEvent(EVENT_CHECK_HEALTH2, 1s);
- break;
- case EVENT_POISON_NOVA:
- Talk(EMOTE_NOVA);
- me->CastSpell(me, SPELL_POISON_NOVA, false);
- events.ScheduleEvent(EVENT_POISON_NOVA, 15s);
- break;
- case EVENT_POWERFULL_BITE:
- me->CastSpell(me->GetVictim(), SPELL_POWERFULL_BITE, false);
- events.ScheduleEvent(EVENT_POWERFULL_BITE, 10s);
- break;
- case EVENT_VENOM_BOLT:
- me->CastSpell(me->GetVictim(), SPELL_VENOM_BOLT, false);
- events.ScheduleEvent(EVENT_VENOM_BOLT, 10s);
- break;
- case EVENT_SUMMON1:
- for (uint8 i = MAX_CONSTRICTOR; i < MAX_SUMMONS; ++i)
- me->SummonCreature(NPC_SLADRAN_VIPER, SpawnLoc[i], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20 * IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_SUMMON1, 8s);
- break;
- case EVENT_SUMMON2:
- for (uint8 i = 0; i < MAX_CONSTRICTOR; ++i)
- me->SummonCreature(NPC_SLADRAN_CONSTRICTORS, SpawnLoc[i], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20 * IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_SUMMON2, 3s, 5s);
- break;
- }
-
- DoMeleeAttackIfReady();
- }
-
private:
bool _achievement;
};
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetGundrakAI<boss_slad_ranAI>(creature);
+ }
};
class spell_sladran_grip_of_sladran_aura : public AuraScript