aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h3
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp103
2 files changed, 35 insertions, 71 deletions
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h
index b2097c34b33..51c5a5221ea 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h
@@ -46,7 +46,8 @@ enum CreatureIds
NPC_THE_MAKER = 17381,
NPC_BROGGOK = 17380,
NPC_KELIDAN_THE_BREAKER = 17377,
- NPC_PRISONER = 17398
+ NPC_PRISONER = 17398,
+ NPC_BROGGOK_POISON_CLOUD = 17662
};
enum GameObjectIds
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
index 55e9801320f..880efd0cfaf 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
@@ -43,6 +43,13 @@ enum Spells
SPELL_POISON_CLOUD_PASSIVE = 30914
};
+enum Events
+{
+ EVENT_SLIME_SPRAY = 1,
+ EVENT_POISON_BOLT,
+ EVENT_POISON_CLOUD,
+};
+
class boss_broggok : public CreatureScript
{
public:
@@ -52,17 +59,9 @@ class boss_broggok : public CreatureScript
{
boss_broggokAI(Creature* creature) : BossAI(creature, DATA_BROGGOK) { }
- uint32 AcidSpray_Timer;
- uint32 PoisonSpawn_Timer;
- uint32 PoisonBolt_Timer;
- bool canAttack;
-
void Reset() override
{
_Reset();
- AcidSpray_Timer = 10000;
- PoisonSpawn_Timer = 5000;
- PoisonBolt_Timer = 7000;
DoAction(ACTION_RESET_BROGGOK);
}
@@ -72,44 +71,35 @@ class boss_broggok : public CreatureScript
Talk(SAY_AGGRO);
}
- void UpdateAI(uint32 diff) override
+ void JustSummoned(Creature* summoned) override
{
- if (!UpdateVictim())
- return;
-
- if (!canAttack)
- return;
-
- if (AcidSpray_Timer <= diff)
- {
- DoCastVictim(SPELL_SLIME_SPRAY);
- AcidSpray_Timer = 4000 + rand32() % 8000;
- }
- else
- AcidSpray_Timer -=diff;
-
- if (PoisonBolt_Timer <= diff)
+ if (summoned->GetEntry() == NPC_BROGGOK_POISON_CLOUD)
{
- DoCastVictim(SPELL_POISON_BOLT);
- PoisonBolt_Timer = 4000 + rand32() % 8000;
+ summoned->SetReactState(REACT_PASSIVE);
+ summoned->CastSpell(summoned, SPELL_POISON_CLOUD_PASSIVE, true);
+ summons.Summon(summoned);
}
- else
- PoisonBolt_Timer -=diff;
-
- if (PoisonSpawn_Timer <= diff)
- {
- DoCast(me, SPELL_POISON_CLOUD);
- PoisonSpawn_Timer = 20000;
- }
- else
- PoisonSpawn_Timer -=diff;
-
- DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) override
+ void ExecuteEvent(uint32 eventId) override
{
- _JustDied();
+ switch (eventId)
+ {
+ case EVENT_SLIME_SPRAY:
+ DoCastVictim(SPELL_SLIME_SPRAY);
+ events.ScheduleEvent(EVENT_SLIME_SPRAY, urand(4000, 12000));
+ break;
+ case EVENT_POISON_BOLT:
+ DoCastVictim(SPELL_POISON_BOLT);
+ events.ScheduleEvent(EVENT_POISON_BOLT, urand(4000, 12000));
+ break;
+ case EVENT_POISON_CLOUD:
+ DoCast(me, SPELL_POISON_CLOUD);
+ events.ScheduleEvent(EVENT_POISON_CLOUD, 20000);
+ break;
+ default:
+ break;
+ }
}
void DoAction(int32 action) override
@@ -122,12 +112,13 @@ class boss_broggok : public CreatureScript
case ACTION_ACTIVATE_BROGGOK:
me->SetReactState(REACT_AGGRESSIVE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
- canAttack = true;
+ events.ScheduleEvent(EVENT_SLIME_SPRAY, 10000);
+ events.ScheduleEvent(EVENT_POISON_BOLT, 7000);
+ events.ScheduleEvent(EVENT_POISON_CLOUD, 5000);
break;
case ACTION_RESET_BROGGOK:
me->SetReactState(REACT_PASSIVE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
- canAttack = false;
break;
}
}
@@ -140,33 +131,6 @@ class boss_broggok : public CreatureScript
}
};
-class npc_broggok_poison_cloud : public CreatureScript
-{
- public:
- npc_broggok_poison_cloud() : CreatureScript("npc_broggok_poison_cloud") { }
-
- struct npc_broggok_poison_cloudAI : public ScriptedAI
- {
- npc_broggok_poison_cloudAI(Creature* creature) : ScriptedAI(creature)
- {
- SetCombatMovement(false);
- creature->SetReactState(REACT_PASSIVE);
- }
-
- void IsSummonedBy(Unit* /*summoner*/) override
- {
- DoCast(me, SPELL_POISON_CLOUD_PASSIVE, true);
- }
-
- void UpdateAI(uint32 /*diff*/) override { }
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_broggok_poison_cloudAI(creature);
- }
-};
-
class go_broggok_lever : public GameObjectScript
{
public:
@@ -228,7 +192,6 @@ class spell_broggok_poison_cloud : public SpellScriptLoader
void AddSC_boss_broggok()
{
new boss_broggok();
- new npc_broggok_poison_cloud();
new go_broggok_lever();
new spell_broggok_poison_cloud();
}