aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2014_09_03_01_world_loot.sql (renamed from sql/updates/world/2014_09_03_00_world_loot.sql)2
-rw-r--r--sql/updates/world/2014_09_04_00_world_creature_template.sql2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h3
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp103
4 files changed, 38 insertions, 72 deletions
diff --git a/sql/updates/world/2014_09_03_00_world_loot.sql b/sql/updates/world/2014_09_03_01_world_loot.sql
index 6b44d166526..b56eba26355 100644
--- a/sql/updates/world/2014_09_03_00_world_loot.sql
+++ b/sql/updates/world/2014_09_03_01_world_loot.sql
@@ -1 +1 @@
-UPDATE `creature_loot_template` SET `ChanceOrQuestChance`=6 WHERE `entry` IN (34566, 35216, 35268, 35269, 35347, 35348, 35349, 35350, 35351, 35352, 35447, 35448, 35449, 35615, 35616) AND `item`=3
+UPDATE `creature_loot_template` SET `ChanceOrQuestChance`=6 WHERE `entry` IN (34566, 35216, 35268, 35269, 35347, 35348, 35349, 35350, 35351, 35352, 35447, 35448, 35449, 35615, 35616) AND `item`=3;
diff --git a/sql/updates/world/2014_09_04_00_world_creature_template.sql b/sql/updates/world/2014_09_04_00_world_creature_template.sql
new file mode 100644
index 00000000000..1484f317983
--- /dev/null
+++ b/sql/updates/world/2014_09_04_00_world_creature_template.sql
@@ -0,0 +1,2 @@
+-- Remove no longer used script
+UPDATE `creature_template` SET `ScriptName` = '' WHERE `entry` = 17662; -- Broggok Poison Cloud
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();
}