aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp24
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp11
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp34
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp70
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp38
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp38
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp41
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp34
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp22
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp242
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/stratholme.h28
12 files changed, 276 insertions, 308 deletions
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp
index 6d83a03d636..4d67e50144e 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp
@@ -16,7 +16,6 @@
*/
#include "ScriptMgr.h"
-#include "InstanceScript.h"
#include "ScriptedCreature.h"
#include "SpellInfo.h"
#include "stratholme.h"
@@ -62,23 +61,10 @@ uint32 const RaiseDeadSpells[6] =
struct boss_baron_rivendare : public BossAI
{
public:
- boss_baron_rivendare(Creature* creature) : BossAI(creature, TYPE_BARON), RaiseDead(false) { }
-
- void Reset() override
- {
- // needed until re-write of instance scripts is done
- if (instance->GetData(TYPE_RAMSTEIN) == DONE)
- instance->SetData(TYPE_BARON, NOT_STARTED);
-
- BossAI::Reset();
- }
+ boss_baron_rivendare(Creature* creature) : BossAI(creature, BOSS_RIVENDARE), RaiseDead(false) { }
void JustEngagedWith(Unit* who) override
{
- // needed until re-write of instance scripts is done
- if (instance->GetData(TYPE_BARON) == NOT_STARTED)
- instance->SetData(TYPE_BARON, IN_PROGRESS);
-
events.ScheduleEvent(EVENT_SHADOWBOLT, 5s);
events.ScheduleEvent(EVENT_CLEAVE, 8s);
events.ScheduleEvent(EVENT_MORTALSTRIKE, 12s);
@@ -87,14 +73,6 @@ public:
BossAI::JustEngagedWith(who);
}
- void JustDied(Unit* killer) override
- {
- // needed until re-write of instance scripts is done
- instance->SetData(TYPE_BARON, DONE);
-
- BossAI::JustDied(killer);
- }
-
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp
index 241af832759..dd2a0214de8 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp
@@ -43,12 +43,14 @@ enum BaronessAnastariEvents
struct boss_baroness_anastari : public BossAI
{
- boss_baroness_anastari(Creature* creature) : BossAI(creature, TYPE_BARONESS) { }
+ boss_baroness_anastari(Creature* creature) : BossAI(creature, BOSS_BARONESS_ANASTARI) { }
ObjectGuid _possessedTargetGuid;
void Reset() override
{
+ _Reset();
+
_possessedTargetGuid.Clear();
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_POSSESS);
@@ -66,13 +68,6 @@ struct boss_baroness_anastari : public BossAI
events.ScheduleEvent(EVENT_SPELL_POSSESS, 20s, 30s);
}
- void JustDied(Unit* /*killer*/) override
- {
- // needed until crystals implemented,
- // see line 305 instance_stratholme.cpp
- instance->SetData(TYPE_BARONESS, IN_PROGRESS);
- }
-
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp
index 03726b6124b..5259ab5f260 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp
@@ -41,21 +41,18 @@ enum WilleyEvents
};
// 10997 - Cannon Master Willey
-struct boss_cannon_master_willey : public ScriptedAI
+struct boss_cannon_master_willey : public BossAI
{
- boss_cannon_master_willey(Creature* creature) : ScriptedAI(creature) { }
+ boss_cannon_master_willey(Creature* creature) : BossAI(creature, BOSS_CANNON_MASTER_WILLEY) { }
- void Reset() override
+ void JustEngagedWith(Unit* who) override
{
- _events.Reset();
- }
+ BossAI::JustEngagedWith(who);
- void JustEngagedWith(Unit* /*who*/) override
- {
- _events.ScheduleEvent(EVENT_SHOOT, 0s);
- _events.ScheduleEvent(EVENT_KNOCK_AWAY, 10s, 20s);
- _events.ScheduleEvent(EVENT_PUMMEL, 10s, 15s);
- _events.ScheduleEvent(EVENT_SUMMON_RIFLEMAN, 5s, 10s);
+ events.ScheduleEvent(EVENT_SHOOT, 0s);
+ events.ScheduleEvent(EVENT_KNOCK_AWAY, 10s, 20s);
+ events.ScheduleEvent(EVENT_PUMMEL, 10s, 15s);
+ events.ScheduleEvent(EVENT_SUMMON_RIFLEMAN, 5s, 10s);
}
void AttackStart(Unit* who) override
@@ -68,30 +65,30 @@ struct boss_cannon_master_willey : public ScriptedAI
if (!UpdateVictim())
return;
- _events.Update(diff);
+ events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
- while (uint32 eventId = _events.ExecuteEvent())
+ while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_SHOOT:
DoCastVictim(SPELL_SHOOT);
- _events.Repeat(2s, 4s);
+ events.Repeat(2s, 4s);
break;
case EVENT_KNOCK_AWAY:
DoCastVictim(SPELL_KNOCK_AWAY);
- _events.Repeat(15s, 25s);
+ events.Repeat(15s, 25s);
break;
case EVENT_PUMMEL:
DoCastVictim(SPELL_PUMMEL);
- _events.Repeat(10s, 15s);
+ events.Repeat(10s, 15s);
break;
case EVENT_SUMMON_RIFLEMAN:
DoCastSelf(SPELL_SUMMON_RIFLEMAN);
- _events.Repeat(15s, 25s);
+ events.Repeat(15s, 25s);
break;
default:
break;
@@ -103,9 +100,6 @@ struct boss_cannon_master_willey : public ScriptedAI
DoMeleeAttackIfReady();
}
-
-private:
- EventMap _events;
};
void AddSC_boss_cannon_master_willey()
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp
index 3d8ad605753..705d829ae09 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp
@@ -74,13 +74,14 @@ enum DathrohanMisc
};
// 10812 - Grand Crusader Dathrohan
-struct boss_dathrohan_balnazzar : public ScriptedAI
+struct boss_dathrohan_balnazzar : public BossAI
{
- boss_dathrohan_balnazzar(Creature* creature) : ScriptedAI(creature), _transformed(false) { }
+ boss_dathrohan_balnazzar(Creature* creature) : BossAI(creature, BOSS_BALNAZZAR), _transformed(false) { }
void Reset() override
{
- _events.Reset();
+ BossAI::Reset();
+
_transformed = false;
if (me->GetEntry() == NPC_BALNAZZAR)
@@ -89,14 +90,16 @@ struct boss_dathrohan_balnazzar : public ScriptedAI
SetEquipmentSlots(true);
}
- void JustEngagedWith(Unit* /*who*/) override
+ void JustEngagedWith(Unit* who) override
{
+ BossAI::JustEngagedWith(who);
+
Talk(SAY_AGGRO);
- _events.ScheduleEvent(EVENT_CRUSADERS_HAMMER, 15s, 25s);
- _events.ScheduleEvent(EVENT_CRUSADER_STRIKE, 5s, 10s);
- _events.ScheduleEvent(EVENT_HOLY_STRIKE, 10s, 20s);
- _events.ScheduleEvent(EVENT_MIND_BLAST, 5s, 15s);
+ events.ScheduleEvent(EVENT_CRUSADERS_HAMMER, 15s, 25s);
+ events.ScheduleEvent(EVENT_CRUSADER_STRIKE, 5s, 10s);
+ events.ScheduleEvent(EVENT_HOLY_STRIKE, 10s, 20s);
+ events.ScheduleEvent(EVENT_MIND_BLAST, 5s, 15s);
}
void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override
@@ -104,12 +107,14 @@ struct boss_dathrohan_balnazzar : public ScriptedAI
if (!_transformed && me->HealthBelowPctDamaged(40, damage))
{
_transformed = true;
- _events.ScheduleEvent(EVENT_TRANSFORM_1, 0s);
+ events.ScheduleEvent(EVENT_TRANSFORM_1, 0s);
}
}
- void JustDied(Unit* /*killer*/) override
+ void JustDied(Unit* killer) override
{
+ BossAI::JustDied(killer);
+
Talk(SAY_DEATH);
me->SummonCreatureGroup(SUMMON_GROUP_DEATH);
}
@@ -119,78 +124,78 @@ struct boss_dathrohan_balnazzar : public ScriptedAI
if (!UpdateVictim())
return;
- _events.Update(diff);
+ events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
- while (uint32 eventId = _events.ExecuteEvent())
+ while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_CRUSADERS_HAMMER:
DoCastSelf(SPELL_CRUSADERS_HAMMER);
- _events.Repeat(20s, 30s);
+ events.Repeat(20s, 30s);
break;
case EVENT_CRUSADER_STRIKE:
DoCastVictim(SPELL_CRUSADER_STRIKE);
- _events.Repeat(10s, 20s);
+ events.Repeat(10s, 20s);
break;
case EVENT_HOLY_STRIKE:
DoCastVictim(SPELL_HOLY_STRIKE);
- _events.Repeat(10s, 15s);
+ events.Repeat(10s, 15s);
break;
case EVENT_MIND_BLAST:
DoCastVictim(SPELL_MIND_BLAST);
- _events.Repeat(10s, 15s);
+ events.Repeat(10s, 15s);
break;
case EVENT_SHADOW_SHOCK:
DoCastSelf(SPELL_SHADOW_SHOCK);
- _events.Repeat(10s, 15s);
+ events.Repeat(10s, 15s);
break;
case EVENT_PSYCHIC_SCREAM:
DoCastSelf(SPELL_PSYCHIC_SCREAM);
- _events.Repeat(20s, 30s);
+ events.Repeat(20s, 30s);
break;
case EVENT_SLEEP:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
DoCast(target, SPELL_SLEEP);
- _events.Repeat(15s, 20s);
+ events.Repeat(15s, 20s);
break;
case EVENT_DOMINATION:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1))
DoCast(target, SPELL_DOMINATION);
- _events.Repeat(20s, 25s);
+ events.Repeat(20s, 25s);
break;
case EVENT_TRANSFORM_1:
- _events.CancelEvent(EVENT_CRUSADERS_HAMMER);
- _events.CancelEvent(EVENT_CRUSADER_STRIKE);
- _events.CancelEvent(EVENT_HOLY_STRIKE);
- _events.CancelEvent(EVENT_MIND_BLAST);
+ events.CancelEvent(EVENT_CRUSADERS_HAMMER);
+ events.CancelEvent(EVENT_CRUSADER_STRIKE);
+ events.CancelEvent(EVENT_HOLY_STRIKE);
+ events.CancelEvent(EVENT_MIND_BLAST);
DoCastSelf(SPELL_BALNAZZAR_TRANSFORM);
me->SetReactState(REACT_PASSIVE);
- _events.ScheduleEvent(EVENT_TRANSFORM_2, 2s);
+ events.ScheduleEvent(EVENT_TRANSFORM_2, 2s);
break;
case EVENT_TRANSFORM_2:
me->UpdateEntry(NPC_BALNAZZAR);
me->SetReactState(REACT_PASSIVE);
SetEquipmentSlots(false, EQUIP_UNEQUIP);
- _events.ScheduleEvent(EVENT_TRANSFORM_3, 2s);
+ events.ScheduleEvent(EVENT_TRANSFORM_3, 2s);
break;
case EVENT_TRANSFORM_3:
Talk(SAY_TRANSFORM);
- _events.ScheduleEvent(EVENT_TRANSFORM_4, 4s);
+ events.ScheduleEvent(EVENT_TRANSFORM_4, 4s);
break;
case EVENT_TRANSFORM_4:
me->SetReactState(REACT_AGGRESSIVE);
- _events.ScheduleEvent(EVENT_MIND_BLAST, 5s, 15s);
- _events.ScheduleEvent(EVENT_SHADOW_SHOCK, 10s, 15s);
- _events.ScheduleEvent(EVENT_PSYCHIC_SCREAM, 15s, 25s);
- _events.ScheduleEvent(EVENT_SLEEP, 5s, 15s);
- _events.ScheduleEvent(EVENT_DOMINATION, 15s, 25s);
+ events.ScheduleEvent(EVENT_MIND_BLAST, 5s, 15s);
+ events.ScheduleEvent(EVENT_SHADOW_SHOCK, 10s, 15s);
+ events.ScheduleEvent(EVENT_PSYCHIC_SCREAM, 15s, 25s);
+ events.ScheduleEvent(EVENT_SLEEP, 5s, 15s);
+ events.ScheduleEvent(EVENT_DOMINATION, 15s, 25s);
break;
default:
break;
@@ -205,7 +210,6 @@ struct boss_dathrohan_balnazzar : public ScriptedAI
private:
bool _transformed;
- EventMap _events;
};
void AddSC_boss_dathrohan_balnazzar()
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp
index b70fb048ad9..f6ab4f6b195 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp
@@ -42,25 +42,24 @@ enum BarthilasEvents
};
// 10435 - Magistrate Barthilas
-struct boss_magistrate_barthilas : public ScriptedAI
+struct boss_magistrate_barthilas : public BossAI
{
- boss_magistrate_barthilas(Creature* creature) : ScriptedAI(creature) { }
+ boss_magistrate_barthilas(Creature* creature) : BossAI(creature, BOSS_MAGISTRATE_BARTHILAS) { }
- void Reset() override
+ void JustEngagedWith(Unit* who) override
{
- _events.Reset();
- }
+ BossAI::JustEngagedWith(who);
- void JustEngagedWith(Unit* /*who*/) override
- {
- _events.ScheduleEvent(EVENT_FURIOUS_ANGER, 0s, 4s);
- _events.ScheduleEvent(EVENT_DRAINING_BLOW, 0s, 5s);
- _events.ScheduleEvent(EVENT_CROWD_PUMMEL, 15s, 20s);
- _events.ScheduleEvent(EVENT_MIGHTY_BLOW, 15s, 25s);
+ events.ScheduleEvent(EVENT_FURIOUS_ANGER, 0s, 4s);
+ events.ScheduleEvent(EVENT_DRAINING_BLOW, 0s, 5s);
+ events.ScheduleEvent(EVENT_CROWD_PUMMEL, 15s, 20s);
+ events.ScheduleEvent(EVENT_MIGHTY_BLOW, 15s, 25s);
}
- void JustDied(Unit* /*killer*/) override
+ void JustDied(Unit* killer) override
{
+ BossAI::JustDied(killer);
+
DoCastSelf(SPELL_TRANSFORMATION, true);
}
@@ -69,30 +68,30 @@ struct boss_magistrate_barthilas : public ScriptedAI
if (!UpdateVictim())
return;
- _events.Update(diff);
+ events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
- while (uint32 eventId = _events.ExecuteEvent())
+ while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_FURIOUS_ANGER:
DoCastSelf(SPELL_FURIOUS_ANGER);
- _events.Repeat(4s);
+ events.Repeat(4s);
break;
case EVENT_DRAINING_BLOW:
DoCastVictim(SPELL_DRAINING_BLOW);
- _events.Repeat(2s, 14s);
+ events.Repeat(2s, 14s);
break;
case EVENT_CROWD_PUMMEL:
DoCastSelf(SPELL_CROWD_PUMMEL);
- _events.Repeat(25s, 30s);
+ events.Repeat(25s, 30s);
break;
case EVENT_MIGHTY_BLOW:
DoCastVictim(SPELL_MIGHTY_BLOW);
- _events.Repeat(10s, 15s);
+ events.Repeat(10s, 15s);
break;
default:
break;
@@ -104,9 +103,6 @@ struct boss_magistrate_barthilas : public ScriptedAI
DoMeleeAttackIfReady();
}
-
-private:
- EventMap _events;
};
void AddSC_boss_magistrate_barthilas()
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp
index 7631032302e..208a3fb0d9c 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp
@@ -42,27 +42,25 @@ enum MalekiEvents
};
// 10438 - Maleki the Pallid
-struct boss_maleki_the_pallid : public ScriptedAI
+struct boss_maleki_the_pallid : public BossAI
{
- boss_maleki_the_pallid(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
+ boss_maleki_the_pallid(Creature* creature) : BossAI(creature, BOSS_MALEKI_THE_PALLID) { }
void Reset() override
{
- _events.Reset();
+ BossAI::Reset();
+
DoCastSelf(SPELL_FROST_ARMOR);
}
- void JustEngagedWith(Unit* /*who*/) override
+ void JustEngagedWith(Unit* who) override
{
- _events.ScheduleEvent(EVENT_FROSTBOLT, 0s, 8s);
- _events.ScheduleEvent(EVENT_DRAIN_LIFE, 20s, 25s);
- _events.ScheduleEvent(EVENT_DRAIN_MANA, 15s, 25s);
- _events.ScheduleEvent(EVENT_ICE_TOMB, 10s, 20s);
- }
+ BossAI::JustEngagedWith(who);
- void JustDied(Unit* /*killer*/) override
- {
- _instance->SetData(TYPE_PALLID, IN_PROGRESS);
+ events.ScheduleEvent(EVENT_FROSTBOLT, 0s, 8s);
+ events.ScheduleEvent(EVENT_DRAIN_LIFE, 20s, 25s);
+ events.ScheduleEvent(EVENT_DRAIN_MANA, 15s, 25s);
+ events.ScheduleEvent(EVENT_ICE_TOMB, 10s, 20s);
}
void UpdateAI(uint32 diff) override
@@ -70,34 +68,34 @@ struct boss_maleki_the_pallid : public ScriptedAI
if (!UpdateVictim())
return;
- _events.Update(diff);
+ events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
- while (uint32 eventId = _events.ExecuteEvent())
+ while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_FROSTBOLT:
DoCastVictim(SPELL_FROSTBOLT);
- _events.Repeat(2s, 8s);
+ events.Repeat(2s, 8s);
break;
case EVENT_DRAIN_LIFE:
DoCastVictim(SPELL_DRAIN_LIFE);
- _events.Repeat(20s, 30s);
+ events.Repeat(20s, 30s);
break;
case EVENT_DRAIN_MANA:
{
Unit* target = me->GetVictim();
if (target && target->GetPowerType() == POWER_MANA)
DoCast(target, SPELL_DRAIN_MANA);
- _events.Repeat(15s, 20s);
+ events.Repeat(15s, 20s);
break;
}
case EVENT_ICE_TOMB:
DoCastVictim(SPELL_ICE_TOMB);
- _events.Repeat(15s, 25s);
+ events.Repeat(15s, 25s);
break;
default:
break;
@@ -106,10 +104,6 @@ struct boss_maleki_the_pallid : public ScriptedAI
DoMeleeAttackIfReady();
}
-
-private:
- EventMap _events;
- InstanceScript* _instance;
};
void AddSC_boss_maleki_the_pallid()
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp
index 4d22f887b3e..147d01d66e3 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp
@@ -20,7 +20,6 @@
*/
#include "ScriptMgr.h"
-#include "InstanceScript.h"
#include "ScriptedCreature.h"
#include "stratholme.h"
@@ -41,26 +40,18 @@ enum NerubenkanEvents
};
// 10437 - Nerub'enkan
-struct boss_nerubenkan : public ScriptedAI
+struct boss_nerubenkan : public BossAI
{
- boss_nerubenkan(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
+ boss_nerubenkan(Creature* creature) : BossAI(creature, BOSS_NERUB_ENKAN) { }
- void Reset() override
+ void JustEngagedWith(Unit* who) override
{
- _events.Reset();
- }
-
- void JustEngagedWith(Unit* /*who*/) override
- {
- _events.ScheduleEvent(EVENT_CRYPT_SCARABS, 0s);
- _events.ScheduleEvent(EVENT_ENCASING_WEBS, 5s, 10s);
- _events.ScheduleEvent(EVENT_PIERCE_ARMOR, 5s, 20s);
- _events.ScheduleEvent(EVENT_RAISE_SCARAB, 6s, 12s);
- }
+ BossAI::JustEngagedWith(who);
- void JustDied(Unit* /*killer*/) override
- {
- _instance->SetData(TYPE_NERUB, IN_PROGRESS);
+ events.ScheduleEvent(EVENT_CRYPT_SCARABS, 0s);
+ events.ScheduleEvent(EVENT_ENCASING_WEBS, 5s, 10s);
+ events.ScheduleEvent(EVENT_PIERCE_ARMOR, 5s, 20s);
+ events.ScheduleEvent(EVENT_RAISE_SCARAB, 6s, 12s);
}
void UpdateAI(uint32 diff) override
@@ -68,30 +59,30 @@ struct boss_nerubenkan : public ScriptedAI
if (!UpdateVictim())
return;
- _events.Update(diff);
+ events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
- while (uint32 eventId = _events.ExecuteEvent())
+ while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_CRYPT_SCARABS:
DoCastVictim(SPELL_CRYPT_SCARABS);
- _events.Repeat(2s, 10s);
+ events.Repeat(2s, 10s);
break;
case EVENT_ENCASING_WEBS:
DoCastVictim(SPELL_ENCASING_WEBS);
- _events.Repeat(6s, 10s);
+ events.Repeat(6s, 10s);
break;
case EVENT_PIERCE_ARMOR:
DoCastVictim(SPELL_PIERCE_ARMOR);
- _events.Repeat(10s, 20s);
+ events.Repeat(10s, 20s);
break;
case EVENT_RAISE_SCARAB:
DoCastSelf(SPELL_RAISE_SCARAB);
- _events.Repeat(25s, 30s);
+ events.Repeat(25s, 30s);
break;
default:
break;
@@ -100,10 +91,6 @@ struct boss_nerubenkan : public ScriptedAI
DoMeleeAttackIfReady();
}
-
-private:
- EventMap _events;
- InstanceScript* _instance;
};
void AddSC_boss_nerubenkan()
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp
index cc46fc37a2f..d61a30db0c9 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp
@@ -49,7 +49,7 @@ enum MalownEvents
// 11143 - Postmaster Malown
struct boss_postmaster_malown : public BossAI
{
- boss_postmaster_malown(Creature* creature) : BossAI(creature, TYPE_MALOWN) { }
+ boss_postmaster_malown(Creature* creature) : BossAI(creature, BOSS_POSTMASTER_MALOWN) { }
void Reset() override
{
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp
index 41faa239cb5..63840c528fc 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp
@@ -21,7 +21,6 @@
*/
#include "ScriptMgr.h"
-#include "InstanceScript.h"
#include "ScriptedCreature.h"
#include "stratholme.h"
@@ -45,28 +44,31 @@ enum RamsteinMisc
};
// 10439 - Ramstein the Gorger
-struct boss_ramstein_the_gorger : public ScriptedAI
+struct boss_ramstein_the_gorger : public BossAI
{
- boss_ramstein_the_gorger(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
+ boss_ramstein_the_gorger(Creature* creature) : BossAI(creature, BOSS_RAMSTEIN_THE_GORGER) { }
void Reset() override
{
- _events.Reset();
+ BossAI::Reset();
+
DoCastSelf(SPELL_FLURRY);
}
- void JustEngagedWith(Unit* /*who*/) override
+ void JustEngagedWith(Unit* who) override
{
- _events.ScheduleEvent(EVENT_TRAMPLE, 10s, 15s);
- _events.ScheduleEvent(EVENT_KNOCKOUT, 10s, 20s);
+ BossAI::JustEngagedWith(who);
+
+ events.ScheduleEvent(EVENT_TRAMPLE, 10s, 15s);
+ events.ScheduleEvent(EVENT_KNOCKOUT, 10s, 20s);
}
- void JustDied(Unit* /*killer*/) override
+ void JustDied(Unit* killer) override
{
+ BossAI::JustDied(killer);
+
me->SummonCreatureGroup(SUMMON_GROUP_SENTRY);
me->SummonCreatureGroup(SUMMON_GROUP_UNDEAD);
-
- _instance->SetData(TYPE_RAMSTEIN, DONE);
}
void UpdateAI(uint32 diff) override
@@ -74,22 +76,22 @@ struct boss_ramstein_the_gorger : public ScriptedAI
if (!UpdateVictim())
return;
- _events.Update(diff);
+ events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
- while (uint32 eventId = _events.ExecuteEvent())
+ while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_TRAMPLE:
DoCastSelf(SPELL_TRAMPLE);
- _events.Repeat(10s, 25s);
+ events.Repeat(10s, 25s);
break;
case EVENT_KNOCKOUT:
DoCastVictim(SPELL_KNOCKOUT);
- _events.Repeat(15s, 20s);
+ events.Repeat(15s, 20s);
break;
default:
break;
@@ -101,10 +103,6 @@ struct boss_ramstein_the_gorger : public ScriptedAI
DoMeleeAttackIfReady();
}
-
-private:
- EventMap _events;
- InstanceScript* _instance;
};
void AddSC_boss_ramstein_the_gorger()
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp
index be9f85b0e83..c9b878b2d94 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp
@@ -40,21 +40,24 @@ enum TimmyEvents
};
// 10808 - Timmy the Cruel
-struct boss_timmy_the_cruel : public ScriptedAI
+struct boss_timmy_the_cruel : public BossAI
{
- boss_timmy_the_cruel(Creature* creature) : ScriptedAI(creature) { }
+ boss_timmy_the_cruel(Creature* creature) : BossAI(creature, BOSS_TIMMY_THE_CRUEL) { }
void Reset() override
{
- _events.Reset();
+ BossAI::Reset();
+
DoCastSelf(SPELL_THRASH);
}
- void JustEngagedWith(Unit* /*who*/) override
+ void JustEngagedWith(Unit* who) override
{
+ BossAI::JustEngagedWith(who);
+
Talk(SAY_AGGRO);
- _events.ScheduleEvent(EVENT_RAVENOUS_CLAW, 10s, 15s);
+ events.ScheduleEvent(EVENT_RAVENOUS_CLAW, 10s, 15s);
}
void UpdateAI(uint32 diff) override
@@ -62,18 +65,18 @@ struct boss_timmy_the_cruel : public ScriptedAI
if (!UpdateVictim())
return;
- _events.Update(diff);
+ events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
- while (uint32 eventId = _events.ExecuteEvent())
+ while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_RAVENOUS_CLAW:
DoCastVictim(SPELL_RAVENOUS_CLAW);
- _events.Repeat(10s, 15s);
+ events.Repeat(10s, 15s);
break;
default:
break;
@@ -85,9 +88,6 @@ struct boss_timmy_the_cruel : public ScriptedAI
DoMeleeAttackIfReady();
}
-
-private:
- EventMap _events;
};
void AddSC_boss_timmy_the_cruel()
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
index 59f4ede242b..0c003e5adfa 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
@@ -84,21 +84,22 @@ class instance_stratholme : public InstanceMapScript
instance_stratholme_InstanceMapScript(InstanceMap* map) : InstanceScript(map)
{
SetHeaders(DataHeader);
-
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- EncounterState[i] = NOT_STARTED;
+ SetBossNumber(MAX_ENCOUNTER);
for (uint8 i = 0; i < 5; ++i)
IsSilverHandDead[i] = false;
timmySpawned = false;
scarletsKilled = 0;
+ brokenCrystals = 0;
+ baronRunState = NOT_STARTED;
events.ScheduleEvent(EVENT_RAT_TRAP_CLOSE, 15s);
}
- uint32 EncounterState[MAX_ENCOUNTER];
uint8 scarletsKilled;
+ int32 brokenCrystals;
+ EncounterState baronRunState;
bool IsSilverHandDead[5];
bool timmySpawned;
@@ -148,6 +149,20 @@ class instance_stratholme : public InstanceMapScript
}
break;
}
+ case NPC_HEARTHSINGER_FORRESTEN:
+ SetBossState(BOSS_HEARTHSINGER_FORRESTEN, DONE);
+ break;
+ case NPC_COMMANDER_MALOR:
+ SetBossState(BOSS_COMMANDER_MALOR, DONE);
+ break;
+ case NPC_INSTRUCTOR_GALFORD:
+ SetBossState(BOSS_INSTRUCTOR_GALFORD, DONE);
+ break;
+ case NPC_THE_UNFORGIVEN:
+ SetBossState(BOSS_THE_UNFORGIVEN, DONE);
+ break;
+ default:
+ break;
case NPC_PLAGUED_RAT:
{
for (GateTrapData& trapGate : TrapGates)
@@ -167,8 +182,7 @@ class instance_stratholme : public InstanceMapScript
bool StartSlaugtherSquare()
{
- //change to DONE when crystals implemented
- if (EncounterState[1] == IN_PROGRESS && EncounterState[2] == IN_PROGRESS && EncounterState[3] == IN_PROGRESS)
+ if (brokenCrystals >= 3)
{
HandleGameObject(portGauntletGUID, true);
HandleGameObject(portSlaugtherGUID, true);
@@ -264,37 +278,37 @@ class instance_stratholme : public InstanceMapScript
break;
case GO_ZIGGURAT1:
ziggurat1GUID = go->GetGUID();
- if (GetData(TYPE_BARONESS) == IN_PROGRESS)
+ if (GetBossState(BOSS_BARONESS_ANASTARI) == DONE)
HandleGameObject(ObjectGuid::Empty, true, go);
break;
case GO_ZIGGURAT2:
ziggurat2GUID = go->GetGUID();
- if (GetData(TYPE_NERUB) == IN_PROGRESS)
+ if (GetBossState(BOSS_NERUB_ENKAN) == DONE)
HandleGameObject(ObjectGuid::Empty, true, go);
break;
case GO_ZIGGURAT3:
ziggurat3GUID = go->GetGUID();
- if (GetData(TYPE_PALLID) == IN_PROGRESS)
+ if (GetBossState(BOSS_MALEKI_THE_PALLID) == DONE)
HandleGameObject(ObjectGuid::Empty, true, go);
break;
case GO_ZIGGURAT4:
ziggurat4GUID = go->GetGUID();
- if (GetData(TYPE_BARON) == DONE || GetData(TYPE_RAMSTEIN) == DONE)
+ if (GetBossState(BOSS_RIVENDARE) == DONE || GetBossState(BOSS_RAMSTEIN_THE_GORGER) == DONE)
HandleGameObject(ObjectGuid::Empty, true, go);
break;
case GO_ZIGGURAT5:
ziggurat5GUID = go->GetGUID();
- if (GetData(TYPE_BARON) == DONE || GetData(TYPE_RAMSTEIN) == DONE)
+ if (GetBossState(BOSS_RIVENDARE) == DONE || GetBossState(BOSS_RAMSTEIN_THE_GORGER) == DONE)
HandleGameObject(ObjectGuid::Empty, true, go);
break;
case GO_PORT_GAUNTLET:
portGauntletGUID = go->GetGUID();
- if (GetData(TYPE_BARONESS) == IN_PROGRESS && GetData(TYPE_NERUB) == IN_PROGRESS && GetData(TYPE_PALLID) == IN_PROGRESS)
+ if (brokenCrystals >= 3)
HandleGameObject(ObjectGuid::Empty, true, go);
break;
case GO_PORT_SLAUGTHER:
portSlaugtherGUID = go->GetGUID();
- if (GetData(TYPE_BARONESS) == IN_PROGRESS && GetData(TYPE_NERUB) == IN_PROGRESS && GetData(TYPE_PALLID) == IN_PROGRESS)
+ if (brokenCrystals >= 3)
HandleGameObject(ObjectGuid::Empty, true, go);
break;
case GO_PORT_ELDERS:
@@ -318,6 +332,72 @@ class instance_stratholme : public InstanceMapScript
}
}
+ bool SetBossState(uint32 id, EncounterState state) override
+ {
+ if (!InstanceScript::SetBossState(id, state))
+ return false;
+
+ switch (id)
+ {
+ case BOSS_BARONESS_ANASTARI:
+ if (state == DONE)
+ {
+ HandleGameObject(ziggurat1GUID, true);
+
+ //remove when crystals implemented
+ ++brokenCrystals;
+ StartSlaugtherSquare();
+ }
+ break;
+ case BOSS_NERUB_ENKAN:
+ if (state == DONE)
+ {
+ HandleGameObject(ziggurat2GUID, true);
+
+ //remove when crystals implemented
+ ++brokenCrystals;
+ StartSlaugtherSquare();
+ }
+ break;
+ case BOSS_MALEKI_THE_PALLID:
+ if (state == DONE)
+ {
+ HandleGameObject(ziggurat3GUID, true);
+
+ //remove when crystals implemented
+ ++brokenCrystals;
+ StartSlaugtherSquare();
+ }
+ break;
+ case BOSS_RAMSTEIN_THE_GORGER:
+ if (state == NOT_STARTED)
+ HandleGameObject(portGauntletGUID, true);
+
+ if (state == DONE)
+ {
+ events.ScheduleEvent(EVENT_SLAUGHTER_SQUARE, 1min);
+ TC_LOG_DEBUG("scripts", "Instance Stratholme: Slaugther event will continue in 1 minute.");
+ }
+ break;
+ case BOSS_RIVENDARE:
+ HandleGameObject(ziggurat4GUID, GetBossState(BOSS_RAMSTEIN_THE_GORGER) == DONE && state != IN_PROGRESS);
+ HandleGameObject(ziggurat5GUID, GetBossState(BOSS_RAMSTEIN_THE_GORGER) == DONE && state != IN_PROGRESS);
+ if (state == DONE)
+ {
+ HandleGameObject(portGauntletGUID, true);
+ if (GetData(TYPE_BARON_RUN) == IN_PROGRESS)
+ DoRemoveAurasDueToSpellOnPlayers(SPELL_BARON_ULTIMATUM);
+
+ SetData(TYPE_BARON_RUN, DONE);
+ }
+ break;
+ default:
+ break;
+ }
+
+ return true;
+ }
+
void SetData(uint32 type, uint32 data) override
{
switch (type)
@@ -326,9 +406,9 @@ class instance_stratholme : public InstanceMapScript
switch (data)
{
case IN_PROGRESS:
- if (EncounterState[0] == IN_PROGRESS || EncounterState[0] == FAIL)
+ if (baronRunState == IN_PROGRESS || baronRunState == FAIL)
break;
- EncounterState[0] = data;
+ baronRunState = IN_PROGRESS;
events.ScheduleEvent(EVENT_BARON_RUN, 45min);
TC_LOG_DEBUG("scripts", "Instance Stratholme: Baron run in progress.");
break;
@@ -336,10 +416,10 @@ class instance_stratholme : public InstanceMapScript
DoRemoveAurasDueToSpellOnPlayers(SPELL_BARON_ULTIMATUM);
if (Creature* ysida = instance->GetCreature(ysidaGUID))
ysida->CastSpell(ysida, SPELL_PERM_FEIGN_DEATH, true);
- EncounterState[0] = data;
+ baronRunState = FAIL;
break;
case DONE:
- EncounterState[0] = data;
+ baronRunState = DONE;
if (Creature* ysida = instance->GetCreature(ysidaGUID))
{
@@ -374,33 +454,6 @@ class instance_stratholme : public InstanceMapScript
break;
}
break;
- case TYPE_BARONESS:
- EncounterState[1] = data;
- if (data == IN_PROGRESS)
- {
- HandleGameObject(ziggurat1GUID, true);
- //change to DONE when crystals implemented
- StartSlaugtherSquare();
- }
- break;
- case TYPE_NERUB:
- EncounterState[2] = data;
- if (data == IN_PROGRESS)
- {
- HandleGameObject(ziggurat2GUID, true);
- //change to DONE when crystals implemented
- StartSlaugtherSquare();
- }
- break;
- case TYPE_PALLID:
- EncounterState[3] = data;
- if (data == IN_PROGRESS)
- {
- HandleGameObject(ziggurat3GUID, true);
- //change to DONE when crystals implemented
- StartSlaugtherSquare();
- }
- break;
case TYPE_RAMSTEIN:
if (data == IN_PROGRESS)
{
@@ -425,37 +478,6 @@ class instance_stratholme : public InstanceMapScript
else
TC_LOG_DEBUG("scripts", "Instance Stratholme: {} Abomnation left to kill.", count);
}
-
- if (data == NOT_STARTED)
- HandleGameObject(portGauntletGUID, true);
-
- if (data == DONE)
- {
- events.ScheduleEvent(EVENT_SLAUGHTER_SQUARE, 1min);
- TC_LOG_DEBUG("scripts", "Instance Stratholme: Slaugther event will continue in 1 minute.");
- }
- EncounterState[4] = data;
- break;
- case TYPE_BARON:
- if (data == IN_PROGRESS)
- {
- HandleGameObject(ziggurat4GUID, false);
- HandleGameObject(ziggurat5GUID, false);
- }
- if (data == DONE || data == NOT_STARTED)
- {
- HandleGameObject(ziggurat4GUID, true);
- HandleGameObject(ziggurat5GUID, true);
- }
- if (data == DONE)
- {
- HandleGameObject(portGauntletGUID, true);
- if (GetData(TYPE_BARON_RUN) == IN_PROGRESS)
- DoRemoveAurasDueToSpellOnPlayers(SPELL_BARON_ULTIMATUM);
-
- SetData(TYPE_BARON_RUN, DONE);
- }
- EncounterState[5] = data;
break;
case TYPE_SH_AELMAR:
IsSilverHandDead[0] = (data) ? true : false;
@@ -472,47 +494,9 @@ class instance_stratholme : public InstanceMapScript
case TYPE_SH_VICAR:
IsSilverHandDead[4] = (data) ? true : false;
break;
+ default:
+ break;
}
-
- if (data == DONE)
- SaveToDB();
- }
-
- std::string GetSaveData() override
- {
- OUT_SAVE_INST_DATA;
-
- std::ostringstream saveStream;
- saveStream << EncounterState[0] << ' ' << EncounterState[1] << ' ' << EncounterState[2] << ' '
- << EncounterState[3] << ' ' << EncounterState[4] << ' ' << EncounterState[5];
-
- OUT_SAVE_INST_DATA_COMPLETE;
- return saveStream.str();
- }
-
- void Load(char const* in) override
- {
- if (!in)
- {
- OUT_LOAD_INST_DATA_FAIL;
- return;
- }
-
- OUT_LOAD_INST_DATA(in);
-
- std::istringstream loadStream(in);
- loadStream >> EncounterState[0] >> EncounterState[1] >> EncounterState[2] >> EncounterState[3]
- >> EncounterState[4] >> EncounterState[5];
-
- // Do not reset 1, 2 and 3. they are not set to done, yet .
- if (EncounterState[0] == IN_PROGRESS)
- EncounterState[0] = NOT_STARTED;
- if (EncounterState[4] == IN_PROGRESS)
- EncounterState[4] = NOT_STARTED;
- if (EncounterState[5] == IN_PROGRESS)
- EncounterState[5] = NOT_STARTED;
-
- OUT_LOAD_INST_DATA_COMPLETE;
}
uint32 GetData(uint32 type) const override
@@ -524,17 +508,19 @@ class instance_stratholme : public InstanceMapScript
return 1;
return 0;
case TYPE_BARON_RUN:
- return EncounterState[0];
+ return baronRunState;
case TYPE_BARONESS:
- return EncounterState[1];
+ return GetBossState(BOSS_BARONESS_ANASTARI);
case TYPE_NERUB:
- return EncounterState[2];
+ return GetBossState(BOSS_NERUB_ENKAN);
case TYPE_PALLID:
- return EncounterState[3];
+ return GetBossState(BOSS_MALEKI_THE_PALLID);
case TYPE_RAMSTEIN:
- return EncounterState[4];
+ return GetBossState(BOSS_RAMSTEIN_THE_GORGER);
case TYPE_BARON:
- return EncounterState[5];
+ return GetBossState(BOSS_RIVENDARE);
+ default:
+ break;
}
return 0;
}
@@ -549,6 +535,8 @@ class instance_stratholme : public InstanceMapScript
return ysidaTriggerGUID;
case NPC_YSIDA:
return ysidaGUID;
+ default:
+ break;
}
return ObjectGuid::Empty;
}
@@ -611,6 +599,18 @@ class instance_stratholme : public InstanceMapScript
}
}
}
+
+ void ReadSaveDataMore(std::istringstream& /*data*/) override
+ {
+ if (GetBossState(BOSS_BARONESS_ANASTARI) == DONE)
+ ++brokenCrystals;
+ if (GetBossState(BOSS_NERUB_ENKAN) == DONE)
+ ++brokenCrystals;
+ if (GetBossState(BOSS_MALEKI_THE_PALLID) == DONE)
+ ++brokenCrystals;
+
+ baronRunState = FAIL;
+ }
};
InstanceScript* GetInstanceScript(InstanceMap* map) const override
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h
index fa0554c5c67..68c6ce2d094 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h
+++ b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h
@@ -23,6 +23,26 @@
#define StratholmeScriptName "instance_stratholme"
#define DataHeader "STR"
+enum STRBossIds
+{
+ BOSS_HEARTHSINGER_FORRESTEN = 0,
+ BOSS_TIMMY_THE_CRUEL = 1,
+ BOSS_COMMANDER_MALOR = 2,
+ BOSS_CANNON_MASTER_WILLEY = 3,
+ BOSS_INSTRUCTOR_GALFORD = 4,
+ BOSS_BALNAZZAR = 5,
+ BOSS_THE_UNFORGIVEN = 6,
+ BOSS_BARONESS_ANASTARI = 7,
+ BOSS_NERUB_ENKAN = 8,
+ BOSS_MALEKI_THE_PALLID = 9,
+ BOSS_MAGISTRATE_BARTHILAS = 10,
+ BOSS_RAMSTEIN_THE_GORGER = 11,
+ BOSS_RIVENDARE = 12,
+ BOSS_POSTMASTER_MALOWN = 13,
+
+ MAX_ENCOUNTER
+};
+
enum STRDataTypes
{
TYPE_BARON_RUN = 1,
@@ -32,8 +52,6 @@ enum STRDataTypes
TYPE_RAMSTEIN = 5,
TYPE_BARON = 6,
- TYPE_MALOWN = 7,
-
DATA_BARON = 10,
DATA_YSIDA_TRIGGER = 11,
@@ -47,6 +65,11 @@ enum STRDataTypes
enum STRCreatureIds
{
+ NPC_HEARTHSINGER_FORRESTEN = 10558,
+ NPC_COMMANDER_MALOR = 11032,
+ NPC_INSTRUCTOR_GALFORD = 10811,
+ NPC_THE_UNFORGIVEN = 10516,
+
NPC_CRYSTAL = 10415, // ziggurat crystal
NPC_BARON = 10440, // ziggurat crystal
NPC_YSIDA_TRIGGER = 16100, // ziggurat crystal
@@ -106,7 +129,6 @@ enum STRMisc
{
//! amount of crusade monsters required to be killed in order for timmy the cruel to spawn
TIMMY_THE_CRUEL_CRUSADERS_REQUIRED = 15,
- MAX_ENCOUNTER = 6
};
template <class AI, class T>