aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Object/Object.cpp1
-rw-r--r--src/server/game/Spells/SpellInfo.cpp1
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp22
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp22
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp22
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp58
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp11
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp24
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp11
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp22
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp26
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp124
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp19
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp40
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp41
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp64
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp54
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp183
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp35
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp70
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp210
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp55
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp60
-rw-r--r--src/server/scripts/Outland/zone_zangarmarsh.cpp8
-rw-r--r--src/server/scripts/Pet/pet_dk.cpp12
-rw-r--r--src/server/scripts/Pet/pet_generic.cpp12
-rw-r--r--src/server/scripts/Pet/pet_hunter.cpp13
-rw-r--r--src/server/scripts/World/boss_emerald_dragons.cpp44
-rw-r--r--src/server/scripts/World/guards.cpp36
-rw-r--r--src/server/scripts/World/mob_generic_creature.cpp16
-rw-r--r--src/server/scripts/World/npcs_special.cpp113
-rw-r--r--src/tools/vmap4_extractor/model.cpp1
45 files changed, 1148 insertions, 448 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 77f318066a2..45450a0c129 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -74,6 +74,7 @@ Object::Object() : m_PackGUID(sizeof(uint64)+1)
{
m_objectTypeId = TYPEID_OBJECT;
m_objectType = TYPEMASK_OBJECT;
+ m_updateFlag = UPDATEFLAG_NONE;
m_uint32Values = NULL;
m_valuesCount = 0;
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index 99c3d234ef8..5ef6acbcce1 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -853,6 +853,7 @@ SpellInfo::SpellInfo(SpellEntry const* spellEntry)
Effects[i] = SpellEffectInfo(spellEntry, this, i);
ChainEntry = NULL;
+ ExplicitTargetMask = 0;
}
SpellInfo::~SpellInfo()
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
index 6f8b93bbdba..a9fc95fdb14 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
@@ -84,10 +84,20 @@ class npc_av_marshal_or_warmaster : public CreatureScript
struct npc_av_marshal_or_warmasterAI : public ScriptedAI
{
- npc_av_marshal_or_warmasterAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_av_marshal_or_warmasterAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ _hasAura = false;
+ }
void Reset() override
{
+ Initialize();
+
events.Reset();
events.ScheduleEvent(EVENT_CHARGE_TARGET, urand(2 * IN_MILLISECONDS, 12 * IN_MILLISECONDS));
events.ScheduleEvent(EVENT_CLEAVE, urand(1 * IN_MILLISECONDS, 11 * IN_MILLISECONDS));
@@ -95,8 +105,6 @@ class npc_av_marshal_or_warmaster : public CreatureScript
events.ScheduleEvent(EVENT_WHIRLWIND, urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS));
events.ScheduleEvent(EVENT_ENRAGE, urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS));
events.ScheduleEvent(EVENT_CHECK_RESET, 5000);
-
- _hasAura = false;
}
void JustRespawned() override
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp
index 52a05f6c0a3..8bc969e9020 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp
@@ -110,7 +110,20 @@ public:
struct boss_balindaAI : public ScriptedAI
{
- boss_balindaAI(Creature* creature) : ScriptedAI(creature), summons(me) { }
+ boss_balindaAI(Creature* creature) : ScriptedAI(creature), summons(me)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ arcaneExplosionTimer = urand(5 * IN_MILLISECONDS, 15 * IN_MILLISECONDS);
+ coneOfColdTimer = 8 * IN_MILLISECONDS;
+ fireBoltTimer = 1 * IN_MILLISECONDS;
+ frostboltTimer = 4 * IN_MILLISECONDS;
+ resetTimer = 5 * IN_MILLISECONDS;
+ waterElementalTimer = 0;
+ }
uint32 arcaneExplosionTimer;
uint32 coneOfColdTimer;
@@ -123,12 +136,7 @@ public:
void Reset() override
{
- arcaneExplosionTimer = urand(5 * IN_MILLISECONDS, 15 * IN_MILLISECONDS);
- coneOfColdTimer = 8 * IN_MILLISECONDS;
- fireBoltTimer = 1 * IN_MILLISECONDS;
- frostboltTimer = 4 * IN_MILLISECONDS;
- resetTimer = 5 * IN_MILLISECONDS;
- waterElementalTimer = 0;
+ Initialize();
summons.DespawnAll();
}
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp
index 4ecb57177a6..49c5a61b7d0 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp
@@ -45,7 +45,20 @@ public:
struct boss_drektharAI : public ScriptedAI
{
- boss_drektharAI(Creature* creature) : ScriptedAI(creature) { }
+ boss_drektharAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ WhirlwindTimer = urand(1 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
+ Whirlwind2Timer = urand(1 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
+ KnockdownTimer = 12 * IN_MILLISECONDS;
+ FrenzyTimer = 6 * IN_MILLISECONDS;
+ ResetTimer = 5 * IN_MILLISECONDS;
+ YellTimer = urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS); //20 to 30 seconds
+ }
uint32 WhirlwindTimer;
uint32 Whirlwind2Timer;
@@ -56,12 +69,7 @@ public:
void Reset() override
{
- WhirlwindTimer = urand(1 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
- Whirlwind2Timer = urand(1 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
- KnockdownTimer = 12 * IN_MILLISECONDS;
- FrenzyTimer = 6 * IN_MILLISECONDS;
- ResetTimer = 5 * IN_MILLISECONDS;
- YellTimer = urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS); //20 to 30 seconds
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp
index 9e4fc5838ad..e422975bd1a 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp
@@ -46,7 +46,20 @@ public:
struct boss_galvangarAI : public ScriptedAI
{
- boss_galvangarAI(Creature* creature) : ScriptedAI(creature) { }
+ boss_galvangarAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ CleaveTimer = urand(1 * IN_MILLISECONDS, 9 * IN_MILLISECONDS);
+ FrighteningShoutTimer = urand(2 * IN_MILLISECONDS, 19 * IN_MILLISECONDS);
+ Whirlwind1Timer = urand(1 * IN_MILLISECONDS, 13 * IN_MILLISECONDS);
+ Whirlwind2Timer = urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
+ MortalStrikeTimer = urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
+ ResetTimer = 5 * IN_MILLISECONDS;
+ }
uint32 CleaveTimer;
uint32 FrighteningShoutTimer;
@@ -57,12 +70,7 @@ public:
void Reset() override
{
- CleaveTimer = urand(1 * IN_MILLISECONDS, 9 * IN_MILLISECONDS);
- FrighteningShoutTimer = urand(2 * IN_MILLISECONDS, 19 * IN_MILLISECONDS);
- Whirlwind1Timer = urand(1 * IN_MILLISECONDS, 13 * IN_MILLISECONDS);
- Whirlwind2Timer = urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
- MortalStrikeTimer = urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
- ResetTimer = 5 * IN_MILLISECONDS;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp
index 076607a5672..1eabfb67f57 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp
@@ -42,7 +42,19 @@ public:
struct boss_vanndarAI : public ScriptedAI
{
- boss_vanndarAI(Creature* creature) : ScriptedAI(creature) { }
+ boss_vanndarAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ AvatarTimer = 3 * IN_MILLISECONDS;
+ ThunderclapTimer = 4 * IN_MILLISECONDS;
+ StormboltTimer = 6 * IN_MILLISECONDS;
+ ResetTimer = 5 * IN_MILLISECONDS;
+ YellTimer = urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS);
+ }
uint32 AvatarTimer;
uint32 ThunderclapTimer;
@@ -52,11 +64,7 @@ public:
void Reset() override
{
- AvatarTimer = 3 * IN_MILLISECONDS;
- ThunderclapTimer = 4 * IN_MILLISECONDS;
- StormboltTimer = 6 * IN_MILLISECONDS;
- ResetTimer = 5 * IN_MILLISECONDS;
- YellTimer = urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS);
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp
index 907aaed3a0d..51ca327738b 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp
@@ -124,10 +124,27 @@ public:
{
npc_grimstoneAI(Creature* creature) : npc_escortAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
MobSpawnId = rand32() % 6;
}
+ void Initialize()
+ {
+ EventPhase = 0;
+ Event_Timer = 1000;
+
+ MobCount = 0;
+ MobDeath_Timer = 0;
+
+ for (uint8 i = 0; i < MAX_NPC_AMOUNT; ++i)
+ RingMobGUID[i] = 0;
+
+ RingBossGUID = 0;
+
+ CanWalk = false;
+ }
+
InstanceScript* instance;
uint8 EventPhase;
@@ -144,20 +161,9 @@ public:
void Reset() override
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
-
- EventPhase = 0;
- Event_Timer = 1000;
-
- MobCount = 0;
- MobDeath_Timer = 0;
+ Initialize();
- for (uint8 i = 0; i < MAX_NPC_AMOUNT; ++i)
- RingMobGUID[i] = 0;
-
- RingBossGUID = 0;
-
- CanWalk = false;
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
}
/// @todo move them to center
@@ -353,7 +359,17 @@ public:
struct npc_phalanxAI : public ScriptedAI
{
- npc_phalanxAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_phalanxAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ ThunderClap_Timer = 12000;
+ FireballVolley_Timer = 0;
+ MightyBlow_Timer = 15000;
+ }
uint32 ThunderClap_Timer;
uint32 FireballVolley_Timer;
@@ -361,9 +377,7 @@ public:
void Reset() override
{
- ThunderClap_Timer = 12000;
- FireballVolley_Timer = 0;
- MightyBlow_Timer = 15000;
+ Initialize();
}
void UpdateAI(uint32 diff) override
@@ -1238,9 +1252,16 @@ public:
{
npc_rocknotAI(Creature* creature) : npc_escortAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ BreakKeg_Timer = 0;
+ BreakDoor_Timer = 0;
+ }
+
InstanceScript* instance;
uint32 BreakKeg_Timer;
@@ -1251,8 +1272,7 @@ public:
if (HasEscortState(STATE_ESCORT_ESCORTING))
return;
- BreakKeg_Timer = 0;
- BreakDoor_Timer = 0;
+ Initialize();
}
void DoGo(uint32 id, uint32 state)
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp
index 83464c12230..77a8c68d28e 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp
@@ -157,12 +157,18 @@ class boss_doomrel : public CreatureScript
{
boss_doomrelAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
_instance = creature->GetInstanceScript();
}
- void Reset() override
+ void Initialize()
{
_voidwalkers = false;
+ }
+
+ void Reset() override
+ {
+ Initialize();
me->setFaction(FACTION_FRIEND);
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp
index ed62e26075c..ea92aa91b69 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp
@@ -53,13 +53,21 @@ public:
struct boss_gythAI : public BossAI
{
- boss_gythAI(Creature* creature) : BossAI(creature, DATA_GYTH) { }
+ boss_gythAI(Creature* creature) : BossAI(creature, DATA_GYTH)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ SummonedRend = false;
+ }
bool SummonedRend;
void Reset() override
{
- SummonedRend = false;
+ Initialize();
if (instance->GetBossState(DATA_GYTH) == IN_PROGRESS)
{
instance->SetBossState(DATA_GYTH, DONE);
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp
index d5f7a4ce34b..b85cf4611ac 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp
@@ -45,12 +45,20 @@ public:
struct boss_halyconAI : public BossAI
{
- boss_halyconAI(Creature* creature) : BossAI(creature, DATA_HALYCON) { }
+ boss_halyconAI(Creature* creature) : BossAI(creature, DATA_HALYCON)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Summoned = false;
+ }
void Reset() override
{
_Reset();
- Summoned = false;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp
index 23593442e86..bc1bdca1f61 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp
@@ -46,15 +46,23 @@ public:
struct boss_lord_valthalakAI : public BossAI
{
- boss_lord_valthalakAI(Creature* creature) : BossAI(creature, DATA_LORD_VALTHALAK) { }
+ boss_lord_valthalakAI(Creature* creature) : BossAI(creature, DATA_LORD_VALTHALAK)
+ {
+ Initialize();
+ }
- void Reset() override
+ void Initialize()
{
- _Reset();
frenzy40 = false;
frenzy15 = false;
}
+ void Reset() override
+ {
+ _Reset();
+ Initialize();
+ }
+
void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp
index cc6911b5da7..4b4633d54ca 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp
@@ -57,14 +57,22 @@ public:
struct boss_overlordwyrmthalakAI : public BossAI
{
- boss_overlordwyrmthalakAI(Creature* creature) : BossAI(creature, DATA_OVERLORD_WYRMTHALAK) { }
+ boss_overlordwyrmthalakAI(Creature* creature) : BossAI(creature, DATA_OVERLORD_WYRMTHALAK)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Summoned = false;
+ }
bool Summoned;
void Reset() override
{
_Reset();
- Summoned = false;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp
index efe0a0e2a78..1a97f668558 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp
@@ -73,6 +73,8 @@ public:
{
boss_chromaggusAI(Creature* creature) : BossAI(creature, BOSS_CHROMAGGUS)
{
+ Initialize();
+
// Select the 2 breaths that we are going to use until despawned
// 5 possiblities for the first breath, 4 for the second, 20 total possiblites
// This way we don't end up casting 2 of the same breath
@@ -173,12 +175,17 @@ public:
EnterEvadeMode();
}
+ void Initialize()
+ {
+ CurrentVurln_Spell = 0; // We use this to store our last vulnerabilty spell so we can remove it later
+ Enraged = false;
+ }
+
void Reset() override
{
_Reset();
- CurrentVurln_Spell = 0; // We use this to store our last vulnerabilty spell so we can remove it later
- Enraged = false;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp
index 262befdd3ec..d5a08d157d0 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp
@@ -166,11 +166,19 @@ public:
struct boss_victor_nefariusAI : public BossAI
{
- boss_victor_nefariusAI(Creature* creature) : BossAI(creature, BOSS_NEFARIAN) { }
+ boss_victor_nefariusAI(Creature* creature) : BossAI(creature, BOSS_NEFARIAN)
+ {
+ Initialize();
+ }
- void Reset() override
+ void Initialize()
{
SpawnedAdds = 0;
+ }
+
+ void Reset() override
+ {
+ Initialize();
if (me->GetMapId() == 469)
{
@@ -386,15 +394,23 @@ public:
struct boss_nefarianAI : public BossAI
{
- boss_nefarianAI(Creature* creature) : BossAI(creature, BOSS_NEFARIAN) { }
+ boss_nefarianAI(Creature* creature) : BossAI(creature, BOSS_NEFARIAN)
+ {
+ Initialize();
+ }
- void Reset() override
+ void Initialize()
{
Phase3 = false;
canDespawn = false;
DespawnTimer = 30000;
}
+ void Reset() override
+ {
+ Initialize();
+ }
+
void JustReachedHome() override
{
canDespawn = true;
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp
index 8d4a84197b1..b83cc4694ab 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp
@@ -68,13 +68,21 @@ public:
struct boss_razorgoreAI : public BossAI
{
- boss_razorgoreAI(Creature* creature) : BossAI(creature, BOSS_RAZORGORE) { }
+ boss_razorgoreAI(Creature* creature) : BossAI(creature, BOSS_RAZORGORE)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ secondPhase = false;
+ }
void Reset() override
{
_Reset();
- secondPhase = false;
+ Initialize();
instance->SetData(DATA_EGG_EVENT, NOT_STARTED);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp
index e3085854f4a..1282cdcd313 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp
@@ -70,19 +70,24 @@ public:
{
boss_vaelAI(Creature* creature) : BossAI(creature, BOSS_VAELASTRAZ)
{
+ Initialize();
creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
creature->setFaction(35);
creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
+ void Initialize()
+ {
+ PlayerGUID = 0;
+ HasYelled = false;
+ }
+
void Reset() override
{
_Reset();
me->SetStandState(UNIT_STAND_STATE_DEAD);
- PlayerGUID = 0;
-
- HasYelled = false;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp
index 2a1309dc097..a268890c25d 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp
@@ -108,13 +108,21 @@ class npc_firesworn : public CreatureScript
struct npc_fireswornAI : public ScriptedAI
{
- npc_fireswornAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_fireswornAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ immolateTimer = 4000; //These times are probably wrong
+ }
uint32 immolateTimer;
void Reset() override
{
- immolateTimer = 4000; //These times are probably wrong
+ Initialize();
}
void DamageTaken(Unit* /*attacker*/, uint32& damage) override
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp
index f9757997731..c8b33e48852 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp
@@ -131,12 +131,18 @@ class npc_core_rager : public CreatureScript
{
npc_core_ragerAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ mangleTimer = 7 * IN_MILLISECONDS; // These times are probably wrong
+ }
+
void Reset() override
{
- mangleTimer = 7*IN_MILLISECONDS; // These times are probably wrong
+ Initialize();
}
void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp
index 6eafb41a8fa..4a0e22b1ba8 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp
@@ -82,18 +82,24 @@ class boss_ragnaros : public CreatureScript
{
boss_ragnarosAI(Creature* creature) : BossAI(creature, BOSS_RAGNAROS)
{
+ Initialize();
_introState = 0;
me->SetReactState(REACT_PASSIVE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
}
- void Reset() override
+ void Initialize()
{
- BossAI::Reset();
_emergeTimer = 90000;
_hasYelledMagmaBurst = false;
_hasSubmergedOnce = false;
_isBanished = false;
+ }
+
+ void Reset() override
+ {
+ BossAI::Reset();
+ Initialize();
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
}
diff --git a/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp b/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp
index ffb3c02d101..b0222413513 100644
--- a/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp
+++ b/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp
@@ -52,9 +52,22 @@ public:
{
boss_mr_smiteAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ uiTrashTimer = urand(5000, 9000);
+ uiSlamTimer = 9000;
+ uiNimbleReflexesTimer = urand(15500, 31600);
+
+ uiHealth = 0;
+
+ uiPhase = 0;
+ uiTimer = 0;
+ }
+
InstanceScript* instance;
uint32 uiTrashTimer;
@@ -68,14 +81,7 @@ public:
void Reset() override
{
- uiTrashTimer = urand(5000, 9000);
- uiSlamTimer = 9000;
- uiNimbleReflexesTimer = urand(15500, 31600);
-
- uiHealth = 0;
-
- uiPhase = 0;
- uiTimer = 0;
+ Initialize();
SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
}
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp
index 9fe21313f71..f469bf6deb1 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp
@@ -60,7 +60,19 @@ public:
struct boss_curatorAI : public ScriptedAI
{
- boss_curatorAI(Creature* creature) : ScriptedAI(creature) { }
+ boss_curatorAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ AddTimer = 10000;
+ HatefulBoltTimer = 15000; //This time may be wrong
+ BerserkTimer = 720000; //12 minutes
+ Enraged = false;
+ Evocating = false;
+ }
uint32 AddTimer;
uint32 HatefulBoltTimer;
@@ -71,11 +83,7 @@ public:
void Reset() override
{
- AddTimer = 10000;
- HatefulBoltTimer = 15000; //This time may be wrong
- BerserkTimer = 720000; //12 minutes
- Enraged = false;
- Evocating = false;
+ Initialize();
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_ARCANE, true);
}
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
index 5d1e5451ab1..bbddf0aa5f5 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
@@ -62,13 +62,20 @@ public:
{
boss_attumenAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
+
Phase = 1;
CleaveTimer = urand(10000, 15000);
CurseTimer = 30000;
RandomYellTimer = urand(30000, 60000); //Occasionally yell
ChargeTimer = 20000;
+ }
+
+ void Initialize()
+ {
ResetTimer = 0;
+ Midnight = 0;
}
uint64 Midnight;
@@ -81,8 +88,7 @@ public:
void Reset() override
{
- ResetTimer = 0;
- Midnight = 0;
+ Initialize();
}
void EnterEvadeMode() override
@@ -127,7 +133,17 @@ public:
struct boss_midnightAI : public ScriptedAI
{
- boss_midnightAI(Creature* creature) : ScriptedAI(creature) { }
+ boss_midnightAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Phase = 1;
+ Attumen = 0;
+ Mount_Timer = 0;
+ }
uint64 Attumen;
uint8 Phase;
@@ -135,9 +151,7 @@ public:
void Reset() override
{
- Phase = 1;
- Attumen = 0;
- Mount_Timer = 0;
+ Initialize();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->SetVisible(true);
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp
index 6ff1faf35b6..5b4f25aea44 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp
@@ -105,12 +105,25 @@ public:
{
boss_moroesAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
memset(AddId, 0, sizeof(AddId));
memset(AddGUID, 0, sizeof(AddGUID));
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ Vanish_Timer = 30000;
+ Blind_Timer = 35000;
+ Gouge_Timer = 23000;
+ Wait_Timer = 0;
+ CheckAdds_Timer = 5000;
+
+ Enrage = false;
+ InVanish = false;
+ }
+
InstanceScript* instance;
uint64 AddGUID[4];
@@ -127,14 +140,7 @@ public:
void Reset() override
{
- Vanish_Timer = 30000;
- Blind_Timer = 35000;
- Gouge_Timer = 23000;
- Wait_Timer = 0;
- CheckAdds_Timer = 5000;
-
- Enrage = false;
- InVanish = false;
+ Initialize();
if (me->IsAlive())
SpawnAdds();
@@ -391,7 +397,17 @@ public:
struct boss_baroness_dorothea_millstipeAI : public boss_moroes_guestAI
{
//Shadow Priest
- boss_baroness_dorothea_millstipeAI(Creature* creature) : boss_moroes_guestAI(creature) { }
+ boss_baroness_dorothea_millstipeAI(Creature* creature) : boss_moroes_guestAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ ManaBurn_Timer = 7000;
+ MindFlay_Timer = 1000;
+ ShadowWordPain_Timer = 6000;
+ }
uint32 ManaBurn_Timer;
uint32 MindFlay_Timer;
@@ -399,9 +415,7 @@ public:
void Reset() override
{
- ManaBurn_Timer = 7000;
- MindFlay_Timer = 1000;
- ShadowWordPain_Timer = 6000;
+ Initialize();
DoCast(me, SPELL_SHADOWFORM, true);
@@ -454,7 +468,17 @@ public:
struct boss_baron_rafe_dreugerAI : public boss_moroes_guestAI
{
//Retr Pally
- boss_baron_rafe_dreugerAI(Creature* creature) : boss_moroes_guestAI(creature){ }
+ boss_baron_rafe_dreugerAI(Creature* creature) : boss_moroes_guestAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ HammerOfJustice_Timer = 1000;
+ SealOfCommand_Timer = 7000;
+ JudgementOfCommand_Timer = SealOfCommand_Timer + 29000;
+ }
uint32 HammerOfJustice_Timer;
uint32 SealOfCommand_Timer;
@@ -462,9 +486,7 @@ public:
void Reset() override
{
- HammerOfJustice_Timer = 1000;
- SealOfCommand_Timer = 7000;
- JudgementOfCommand_Timer = SealOfCommand_Timer + 29000;
+ Initialize();
boss_moroes_guestAI::Reset();
}
@@ -511,7 +533,18 @@ public:
struct boss_lady_catriona_von_indiAI : public boss_moroes_guestAI
{
//Holy Priest
- boss_lady_catriona_von_indiAI(Creature* creature) : boss_moroes_guestAI(creature) { }
+ boss_lady_catriona_von_indiAI(Creature* creature) : boss_moroes_guestAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ DispelMagic_Timer = 11000;
+ GreaterHeal_Timer = 1500;
+ HolyFire_Timer = 5000;
+ PowerWordShield_Timer = 1000;
+ }
uint32 DispelMagic_Timer;
uint32 GreaterHeal_Timer;
@@ -520,10 +553,7 @@ public:
void Reset() override
{
- DispelMagic_Timer = 11000;
- GreaterHeal_Timer = 1500;
- HolyFire_Timer = 5000;
- PowerWordShield_Timer = 1000;
+ Initialize();
AcquireGUID();
@@ -581,7 +611,18 @@ public:
struct boss_lady_keira_berrybuckAI : public boss_moroes_guestAI
{
//Holy Pally
- boss_lady_keira_berrybuckAI(Creature* creature) : boss_moroes_guestAI(creature) { }
+ boss_lady_keira_berrybuckAI(Creature* creature) : boss_moroes_guestAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Cleanse_Timer = 13000;
+ GreaterBless_Timer = 1000;
+ HolyLight_Timer = 7000;
+ DivineShield_Timer = 31000;
+ }
uint32 Cleanse_Timer;
uint32 GreaterBless_Timer;
@@ -590,10 +631,7 @@ public:
void Reset() override
{
- Cleanse_Timer = 13000;
- GreaterBless_Timer = 1000;
- HolyLight_Timer = 7000;
- DivineShield_Timer = 31000;
+ Initialize();
AcquireGUID();
@@ -655,7 +693,17 @@ public:
struct boss_lord_robin_darisAI : public boss_moroes_guestAI
{
//Arms Warr
- boss_lord_robin_darisAI(Creature* creature) : boss_moroes_guestAI(creature) { }
+ boss_lord_robin_darisAI(Creature* creature) : boss_moroes_guestAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Hamstring_Timer = 7000;
+ MortalStrike_Timer = 10000;
+ WhirlWind_Timer = 21000;
+ }
uint32 Hamstring_Timer;
uint32 MortalStrike_Timer;
@@ -663,9 +711,7 @@ public:
void Reset() override
{
- Hamstring_Timer = 7000;
- MortalStrike_Timer = 10000;
- WhirlWind_Timer = 21000;
+ Initialize();
boss_moroes_guestAI::Reset();
}
@@ -711,7 +757,18 @@ public:
struct boss_lord_crispin_ferenceAI : public boss_moroes_guestAI
{
//Arms Warr
- boss_lord_crispin_ferenceAI(Creature* creature) : boss_moroes_guestAI(creature) { }
+ boss_lord_crispin_ferenceAI(Creature* creature) : boss_moroes_guestAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Disarm_Timer = 6000;
+ HeroicStrike_Timer = 10000;
+ ShieldBash_Timer = 8000;
+ ShieldWall_Timer = 4000;
+ }
uint32 Disarm_Timer;
uint32 HeroicStrike_Timer;
@@ -720,10 +777,7 @@ public:
void Reset() override
{
- Disarm_Timer = 6000;
- HeroicStrike_Timer = 10000;
- ShieldBash_Timer = 8000;
- ShieldWall_Timer = 4000;
+ Initialize();
boss_moroes_guestAI::Reset();
}
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp
index ac24f868670..a928413fea0 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp
@@ -78,6 +78,7 @@ public:
{
boss_netherspiteAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
for (int i=0; i<3; ++i)
@@ -86,6 +87,19 @@ public:
BeamTarget[i] = 0;
BeamerGUID[i] = 0;
}
+
+ PortalPhase = false;
+ PhaseTimer = 0;
+ EmpowermentTimer = 0;
+ PortalTimer = 0;
+ }
+
+ void Initialize()
+ {
+ Berserk = false;
+ NetherInfusionTimer = 540000;
+ VoidZoneTimer = 15000;
+ NetherbreathTimer = 3000;
}
InstanceScript* instance;
@@ -129,10 +143,7 @@ public:
void Reset() override
{
- Berserk = false;
- NetherInfusionTimer = 540000;
- VoidZoneTimer = 15000;
- NetherbreathTimer = 3000;
+ Initialize();
HandleDoors(true);
DestroyPortals();
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp
index af9f8b72abf..9084a6b0371 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp
@@ -78,10 +78,32 @@ public:
{
boss_nightbaneAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
Intro = true;
}
+ void Initialize()
+ {
+ BellowingRoarTimer = 30000;
+ CharredEarthTimer = 15000;
+ DistractingAshTimer = 20000;
+ SmolderingBreathTimer = 10000;
+ TailSweepTimer = 12000;
+ RainofBonesTimer = 10000;
+ SmokingBlastTimer = 20000;
+ FireballBarrageTimer = 13000;
+ SearingCindersTimer = 14000;
+ WaitTimer = 1000;
+
+ Phase = 1;
+ FlyCount = 0;
+ MovePhase = 0;
+
+ Flying = false;
+ Movement = false;
+ }
+
InstanceScript* instance;
uint32 Phase;
@@ -111,20 +133,7 @@ public:
void Reset() override
{
- BellowingRoarTimer = 30000;
- CharredEarthTimer = 15000;
- DistractingAshTimer = 20000;
- SmolderingBreathTimer = 10000;
- TailSweepTimer = 12000;
- RainofBonesTimer = 10000;
- SmokingBlastTimer = 20000;
- FireballBarrageTimer = 13000;
- SearingCindersTimer = 14000;
- WaitTimer = 1000;
-
- Phase =1;
- FlyCount = 0;
- MovePhase = 0;
+ Initialize();
me->SetSpeed(MOVE_RUN, 2.0f);
me->SetDisableGravity(true);
@@ -138,9 +147,6 @@ public:
HandleTerraceDoors(true);
- Flying = false;
- Movement = false;
-
if (!Intro)
{
me->SetHomePosition(IntroWay[7][0], IntroWay[7][1], IntroWay[7][2], 0);
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
index 518c4eacbd9..c09b349f143 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
@@ -186,10 +186,33 @@ public:
{
boss_malchezaarAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
+
instance = creature->GetInstanceScript();
memset(axes, 0, sizeof(axes));
}
+ void Initialize()
+ {
+ EnfeebleTimer = 30000;
+ EnfeebleResetTimer = 38000;
+ ShadowNovaTimer = 35500;
+ SWPainTimer = 20000;
+ AmplifyDamageTimer = 5000;
+ Cleave_Timer = 8000;
+ InfernalTimer = 40000;
+ InfernalCleanupTimer = 47000;
+ AxesTargetSwitchTimer = urand(7500, 20000);
+ SunderArmorTimer = urand(5000, 10000);
+ phase = 1;
+
+ for (uint8 i = 0; i < 5; ++i)
+ {
+ enfeeble_targets[i] = 0;
+ enfeeble_health[i] = 0;
+ }
+ }
+
InstanceScript* instance;
uint32 EnfeebleTimer;
uint32 EnfeebleResetTimer;
@@ -218,27 +241,11 @@ public:
InfernalCleanup();
positions.clear();
- for (uint8 i = 0; i < 5; ++i)
- {
- enfeeble_targets[i] = 0;
- enfeeble_health[i] = 0;
- }
+ Initialize();
for (uint8 i = 0; i < TOTAL_INFERNAL_POINTS; ++i)
positions.push_back(&InfernalPoints[i]);
- EnfeebleTimer = 30000;
- EnfeebleResetTimer = 38000;
- ShadowNovaTimer = 35500;
- SWPainTimer = 20000;
- AmplifyDamageTimer = 5000;
- Cleave_Timer = 8000;
- InfernalTimer = 40000;
- InfernalCleanupTimer = 47000;
- AxesTargetSwitchTimer = urand(7500, 20000);
- SunderArmorTimer = urand(5000, 10000);
- phase = 1;
-
instance->HandleGameObject(instance->GetData64(DATA_GO_NETHER_DOOR), true);
}
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp
index 6a89adca967..c66f2b335c4 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp
@@ -93,9 +93,35 @@ public:
{
boss_aranAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ SecondarySpellTimer = 5000;
+ NormalCastTimer = 0;
+ SuperCastTimer = 35000;
+ BerserkTimer = 720000;
+ CloseDoorTimer = 15000;
+
+ LastSuperSpell = rand32() % 3;
+
+ FlameWreathTimer = 0;
+ FlameWreathCheckTime = 0;
+
+ CurrentNormalSpell = 0;
+ ArcaneCooldown = 0;
+ FireCooldown = 0;
+ FrostCooldown = 0;
+
+ DrinkInterruptTimer = 10000;
+
+ ElementalsSpawned = false;
+ Drinking = false;
+ DrinkInturrupted = false;
+ }
+
InstanceScript* instance;
uint32 SecondarySpellTimer;
@@ -125,27 +151,7 @@ public:
void Reset() override
{
- SecondarySpellTimer = 5000;
- NormalCastTimer = 0;
- SuperCastTimer = 35000;
- BerserkTimer = 720000;
- CloseDoorTimer = 15000;
-
- LastSuperSpell = rand32() % 3;
-
- FlameWreathTimer = 0;
- FlameWreathCheckTime = 0;
-
- CurrentNormalSpell = 0;
- ArcaneCooldown = 0;
- FireCooldown = 0;
- FrostCooldown = 0;
-
- DrinkInterruptTimer = 10000;
-
- ElementalsSpawned = false;
- Drinking = false;
- DrinkInturrupted = false;
+ Initialize();
// Not in progress
instance->SetData(TYPE_ARAN, NOT_STARTED);
@@ -362,6 +368,10 @@ public:
Available[0] = SUPER_FLAME;
Available[1] = SUPER_AE;
break;
+ default:
+ Available[0] = 0;
+ Available[1] = 0;
+ break;
}
LastSuperSpell = Available[urand(0, 1)];
@@ -508,13 +518,21 @@ public:
struct water_elementalAI : public ScriptedAI
{
- water_elementalAI(Creature* creature) : ScriptedAI(creature) { }
+ water_elementalAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ CastTimer = 2000 + (rand32() % 3000);
+ }
uint32 CastTimer;
void Reset() override
{
- CastTimer = 2000 + (rand32() % 3000);
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override { }
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
index 9b66beb5986..ed40c18f70e 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
@@ -79,16 +79,22 @@ public:
{
npc_kilrekAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ AmplifyTimer = 2000;
+ }
+
InstanceScript* instance;
uint32 AmplifyTimer;
void Reset() override
{
- AmplifyTimer = 2000;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override { }
@@ -131,13 +137,21 @@ public:
struct npc_demon_chainAI : public ScriptedAI
{
- npc_demon_chainAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_demon_chainAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ SacrificeGUID = 0;
+ }
uint64 SacrificeGUID;
void Reset() override
{
- SacrificeGUID = 0;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override { }
@@ -203,13 +217,21 @@ public:
struct npc_fiendish_impAI : public ScriptedAI
{
- npc_fiendish_impAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_fiendish_impAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ FireboltTimer = 2000;
+ }
uint32 FireboltTimer;
void Reset() override
{
- FireboltTimer = 2000;
+ Initialize();
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true);
}
@@ -247,11 +269,24 @@ public:
{
boss_terestianAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
for (uint8 i = 0; i < 2; ++i)
PortalGUID[i] = 0;
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ PortalsCount = 0;
+ SacrificeTimer = 30000;
+ ShadowboltTimer = 5000;
+ SummonTimer = 10000;
+ BerserkTimer = 600000;
+
+ SummonedPortals = false;
+ Berserk = false;
+ }
+
InstanceScript* instance;
uint64 PortalGUID[2];
@@ -281,14 +316,7 @@ public:
}
}
- PortalsCount = 0;
- SacrificeTimer = 30000;
- ShadowboltTimer = 5000;
- SummonTimer = 10000;
- BerserkTimer = 600000;
-
- SummonedPortals = false;
- Berserk = false;
+ Initialize();
instance->SetData(TYPE_TERESTIAN, NOT_STARTED);
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
index 19ec8da7fc9..ce8223c90cf 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
@@ -125,9 +125,22 @@ public:
{
boss_dorotheeAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ AggroTimer = 500;
+
+ WaterBoltTimer = 5000;
+ FearTimer = 15000;
+ SummonTitoTimer = 47500;
+
+ SummonedTito = false;
+ TitoDied = false;
+ }
+
InstanceScript* instance;
uint32 AggroTimer;
@@ -141,14 +154,7 @@ public:
void Reset() override
{
- AggroTimer = 500;
-
- WaterBoltTimer = 5000;
- FearTimer = 15000;
- SummonTitoTimer = 47500;
-
- SummonedTito = false;
- TitoDied = false;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
@@ -237,15 +243,23 @@ public:
struct npc_titoAI : public ScriptedAI
{
- npc_titoAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_titoAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ DorotheeGUID = 0;
+ YipTimer = 10000;
+ }
uint64 DorotheeGUID;
uint32 YipTimer;
void Reset() override
{
- DorotheeGUID = 0;
- YipTimer = 10000;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override { }
@@ -305,9 +319,17 @@ public:
{
boss_strawmanAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ AggroTimer = 13000;
+ BrainBashTimer = 5000;
+ BrainWipeTimer = 7000;
+ }
+
InstanceScript* instance;
uint32 AggroTimer;
@@ -316,9 +338,7 @@ public:
void Reset() override
{
- AggroTimer = 13000;
- BrainBashTimer = 5000;
- BrainWipeTimer = 7000;
+ Initialize();
}
void AttackStart(Unit* who) override
@@ -419,9 +439,19 @@ public:
{
boss_tinheadAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ AggroTimer = 15000;
+ CleaveTimer = 5000;
+ RustTimer = 30000;
+
+ RustCount = 0;
+ }
+
InstanceScript* instance;
uint32 AggroTimer;
@@ -432,11 +462,7 @@ public:
void Reset() override
{
- AggroTimer = 15000;
- CleaveTimer = 5000;
- RustTimer = 30000;
-
- RustCount = 0;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
@@ -528,9 +554,18 @@ public:
{
boss_roarAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ AggroTimer = 20000;
+ MangleTimer = 5000;
+ ShredTimer = 10000;
+ ScreamTimer = 15000;
+ }
+
InstanceScript* instance;
uint32 AggroTimer;
@@ -540,10 +575,7 @@ public:
void Reset() override
{
- AggroTimer = 20000;
- MangleTimer = 5000;
- ShredTimer = 10000;
- ScreamTimer = 15000;
+ Initialize();
}
void MoveInLineOfSight(Unit* who) override
@@ -636,9 +668,16 @@ public:
{
boss_croneAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ CycloneTimer = 30000;
+ ChainLightningTimer = 10000;
+ }
+
InstanceScript* instance;
uint32 CycloneTimer;
@@ -646,8 +685,7 @@ public:
void Reset() override
{
- CycloneTimer = 30000;
- ChainLightningTimer = 10000;
+ Initialize();
}
void JustReachedHome() override
@@ -717,13 +755,21 @@ public:
struct npc_cycloneAI : public ScriptedAI
{
- npc_cycloneAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_cycloneAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ MoveTimer = 1000;
+ }
uint32 MoveTimer;
void Reset() override
{
- MoveTimer = 1000;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override { }
@@ -812,9 +858,22 @@ public:
{
boss_bigbadwolfAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ ChaseTimer = 30000;
+ FearTimer = urand(25000, 35000);
+ SwipeTimer = 5000;
+
+ HoodGUID = 0;
+ TempThreat = 0;
+
+ IsChasing = false;
+ }
+
InstanceScript* instance;
uint32 ChaseTimer;
@@ -828,14 +887,7 @@ public:
void Reset() override
{
- ChaseTimer = 30000;
- FearTimer = urand(25000, 35000);
- SwipeTimer = 5000;
-
- HoodGUID = 0;
- TempThreat = 0;
-
- IsChasing = false;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
@@ -1011,12 +1063,30 @@ public:
{
boss_julianneAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
EntryYellTimer = 1000;
AggroYellTimer = 10000;
IsFakingDeath = false;
}
+ void Initialize()
+ {
+ RomuloGUID = 0;
+ Phase = PHASE_JULIANNE;
+
+ BlindingPassionTimer = 30000;
+ DevotionTimer = 15000;
+ EternalAffectionTimer = 25000;
+ PowerfulAttractionTimer = 5000;
+ SummonRomuloTimer = 10000;
+ DrinkPoisonTimer = 0;
+ ResurrectSelfTimer = 0;
+
+ SummonedRomulo = false;
+ RomuloDead = false;
+ }
+
InstanceScript* instance;
uint32 EntryYellTimer;
@@ -1041,25 +1111,12 @@ public:
void Reset() override
{
- RomuloGUID = 0;
- Phase = PHASE_JULIANNE;
-
- BlindingPassionTimer = 30000;
- DevotionTimer = 15000;
- EternalAffectionTimer = 25000;
- PowerfulAttractionTimer = 5000;
- SummonRomuloTimer = 10000;
- DrinkPoisonTimer = 0;
- ResurrectSelfTimer = 0;
-
+ Initialize();
if (IsFakingDeath)
{
Resurrect(me);
IsFakingDeath = false;
}
-
- SummonedRomulo = false;
- RomuloDead = false;
}
void EnterCombat(Unit* /*who*/) override { }
@@ -1131,11 +1188,27 @@ public:
{
boss_romuloAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
EntryYellTimer = 8000;
AggroYellTimer = 15000;
}
+ void Initialize()
+ {
+ JulianneGUID = 0;
+ Phase = PHASE_ROMULO;
+
+ BackwardLungeTimer = 15000;
+ DaringTimer = 20000;
+ DeadlySwatheTimer = 25000;
+ PoisonThrustTimer = 10000;
+ ResurrectTimer = 10000;
+
+ IsFakingDeath = false;
+ JulianneDead = false;
+ }
+
InstanceScript* instance;
uint64 JulianneGUID;
@@ -1154,17 +1227,7 @@ public:
void Reset() override
{
- JulianneGUID = 0;
- Phase = PHASE_ROMULO;
-
- BackwardLungeTimer = 15000;
- DaringTimer = 20000;
- DeadlySwatheTimer = 25000;
- PoisonThrustTimer = 10000;
- ResurrectTimer = 10000;
-
- IsFakingDeath = false;
- JulianneDead = false;
+ Initialize();
}
void JustReachedHome() override
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
index c89950b7de3..c37829e26d5 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
@@ -131,11 +131,23 @@ public:
{
npc_barnesAI(Creature* creature) : npc_escortAI(creature)
{
+ Initialize();
RaidWiped = false;
m_uiEventId = 0;
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ m_uiSpotlightGUID = 0;
+
+ TalkCount = 0;
+ TalkTimer = 2000;
+ WipeTimer = 5000;
+
+ PerformanceReady = false;
+ }
+
InstanceScript* instance;
uint64 m_uiSpotlightGUID;
@@ -150,13 +162,7 @@ public:
void Reset() override
{
- m_uiSpotlightGUID = 0;
-
- TalkCount = 0;
- TalkTimer = 2000;
- WipeTimer = 5000;
-
- PerformanceReady = false;
+ Initialize();
m_uiEventId = instance->GetData(DATA_OPERA_PERFORMANCE);
}
@@ -476,9 +482,20 @@ public:
{
npc_image_of_medivhAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
+ Step = 0;
+ FireArcanagosTimer = 0;
+ FireMedivhTimer = 0;
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ ArcanagosGUID = 0;
+ EventStarted = false;
+ YellTimer = 0;
+ }
+
InstanceScript* instance;
uint64 ArcanagosGUID;
@@ -492,9 +509,7 @@ public:
void Reset() override
{
- ArcanagosGUID = 0;
- EventStarted = false;
- YellTimer = 0;
+ Initialize();
if (instance->GetData64(DATA_IMAGE_OF_MEDIVH) == 0)
{
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
index 7944011c7a0..1aafb32cef9 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
@@ -103,9 +103,29 @@ public:
{
boss_felblood_kaelthasAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ /// @todo Timers
+ FireballTimer = 0;
+ PhoenixTimer = 10000;
+ FlameStrikeTimer = 25000;
+ CombatPulseTimer = 0;
+
+ PyroblastTimer = 60000;
+
+ GravityLapseTimer = 0;
+ GravityLapsePhase = 0;
+
+ FirstGravityLapse = true;
+ HasTaunted = false;
+
+ Phase = 0;
+ }
+
InstanceScript* instance;
uint32 FireballTimer;
@@ -134,21 +154,7 @@ public:
void Reset() override
{
- /// @todo Timers
- FireballTimer = 0;
- PhoenixTimer = 10000;
- FlameStrikeTimer = 25000;
- CombatPulseTimer = 0;
-
- PyroblastTimer = 60000;
-
- GravityLapseTimer = 0;
- GravityLapsePhase = 0;
-
- FirstGravityLapse = true;
- HasTaunted = false;
-
- Phase = 0;
+ Initialize();
instance->SetBossState(DATA_KAELTHAS, NOT_STARTED);
}
@@ -439,13 +445,19 @@ public:
{
npc_felkael_flamestrikeAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ FlameStrikeTimer = 5000;
}
uint32 FlameStrikeTimer;
void Reset() override
{
- FlameStrikeTimer = 5000;
+ Initialize();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->setFaction(14);
@@ -481,9 +493,18 @@ public:
{
npc_felkael_phoenixAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ BurnTimer = 2000;
+ Death_Timer = 3000;
+ Rebirth = false;
+ FakeDeath = false;
+ }
+
InstanceScript* instance;
uint32 BurnTimer;
uint32 Death_Timer;
@@ -495,10 +516,7 @@ public:
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE);
me->SetDisableGravity(true);
DoCast(me, SPELL_PHOENIX_BURN, true);
- BurnTimer = 2000;
- Death_Timer = 3000;
- Rebirth = false;
- FakeDeath = false;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override { }
@@ -592,13 +610,21 @@ public:
struct npc_felkael_phoenix_eggAI : public ScriptedAI
{
- npc_felkael_phoenix_eggAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_felkael_phoenix_eggAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ HatchTimer = 10000;
+ }
uint32 HatchTimer;
void Reset() override
{
- HatchTimer = 10000;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override { }
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
index 40dedcf6d93..cc2af3dcea5 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
@@ -117,11 +117,24 @@ public:
{
boss_priestess_delrissaAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
memset(&m_auiLackeyGUID, 0, sizeof(m_auiLackeyGUID));
LackeyEntryList.clear();
}
+ void Initialize()
+ {
+ PlayersKilled = 0;
+
+ HealTimer = 15000;
+ RenewTimer = 10000;
+ ShieldTimer = 2000;
+ SWPainTimer = 5000;
+ DispelTimer = 7500;
+ ResetTimer = 5000;
+ }
+
InstanceScript* instance;
std::vector<uint32> LackeyEntryList;
@@ -138,14 +151,7 @@ public:
void Reset() override
{
- PlayersKilled = 0;
-
- HealTimer = 15000;
- RenewTimer = 10000;
- ShieldTimer = 2000;
- SWPainTimer = 5000;
- DispelTimer = 7500;
- ResetTimer = 5000;
+ Initialize();
InitializeLackeys();
}
@@ -353,11 +359,23 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
{
boss_priestess_lackey_commonAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
memset(&m_auiLackeyGUIDs, 0, sizeof(m_auiLackeyGUIDs));
AcquireGUIDs();
}
+ void Initialize()
+ {
+ UsedPotion = false;
+
+ // These guys does not follow normal threat system rules
+ // For later development, some alternative threat system should be made
+ // We do not know what this system is based upon, but one theory is class (healers=high threat, dps=medium, etc)
+ // We reset their threat frequently as an alternative until such a system exist
+ ResetThreatTimer = urand(5000, 20000);
+ }
+
InstanceScript* instance;
uint64 m_auiLackeyGUIDs[MAX_ACTIVE_LACKEY];
@@ -367,13 +385,7 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
void Reset() override
{
- UsedPotion = false;
-
- // These guys does not follow normal threat system rules
- // For later development, some alternative threat system should be made
- // We do not know what this system is based upon, but one theory is class (healers=high threat, dps=medium, etc)
- // We reset their threat frequently as an alternative until such a system exist
- ResetThreatTimer = urand(5000, 20000);
+ Initialize();
// in case she is not alive and Reset was for some reason called, respawn her (most likely party wipe after killing her)
if (Creature* pDelrissa = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DELRISSA)))
@@ -493,7 +505,20 @@ public:
struct boss_kagani_nightstrikeAI : public boss_priestess_lackey_commonAI
{
//Rogue
- boss_kagani_nightstrikeAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { }
+ boss_kagani_nightstrikeAI(Creature* creature) : boss_priestess_lackey_commonAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Gouge_Timer = 5500;
+ Kick_Timer = 7000;
+ Vanish_Timer = 2000;
+ Eviscerate_Timer = 6000;
+ Wait_Timer = 5000;
+ InVanish = false;
+ }
uint32 Gouge_Timer;
uint32 Kick_Timer;
@@ -504,12 +529,7 @@ public:
void Reset() override
{
- Gouge_Timer = 5500;
- Kick_Timer = 7000;
- Vanish_Timer = 2000;
- Eviscerate_Timer = 6000;
- Wait_Timer = 5000;
- InVanish = false;
+ Initialize();
me->SetVisible(true);
boss_priestess_lackey_commonAI::Reset();
@@ -597,7 +617,19 @@ public:
struct boss_ellris_duskhallowAI : public boss_priestess_lackey_commonAI
{
//Warlock
- boss_ellris_duskhallowAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { }
+ boss_ellris_duskhallowAI(Creature* creature) : boss_priestess_lackey_commonAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Immolate_Timer = 6000;
+ Shadow_Bolt_Timer = 3000;
+ Seed_of_Corruption_Timer = 2000;
+ Curse_of_Agony_Timer = 1000;
+ Fear_Timer = 10000;
+ }
uint32 Immolate_Timer;
uint32 Shadow_Bolt_Timer;
@@ -607,11 +639,7 @@ public:
void Reset() override
{
- Immolate_Timer = 6000;
- Shadow_Bolt_Timer = 3000;
- Seed_of_Corruption_Timer = 2000;
- Curse_of_Agony_Timer = 1000;
- Fear_Timer = 10000;
+ Initialize();
boss_priestess_lackey_commonAI::Reset();
}
@@ -688,15 +716,23 @@ public:
struct boss_eramas_brightblazeAI : public boss_priestess_lackey_commonAI
{
//Monk
- boss_eramas_brightblazeAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { }
+ boss_eramas_brightblazeAI(Creature* creature) : boss_priestess_lackey_commonAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Knockdown_Timer = 6000;
+ Snap_Kick_Timer = 4500;
+ }
uint32 Knockdown_Timer;
uint32 Snap_Kick_Timer;
void Reset() override
{
- Knockdown_Timer = 6000;
- Snap_Kick_Timer = 4500;
+ Initialize();
boss_priestess_lackey_commonAI::Reset();
}
@@ -749,7 +785,24 @@ public:
struct boss_yazzaiAI : public boss_priestess_lackey_commonAI
{
//Mage
- boss_yazzaiAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { }
+ boss_yazzaiAI(Creature* creature) : boss_priestess_lackey_commonAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ HasIceBlocked = false;
+
+ Polymorph_Timer = 1000;
+ Ice_Block_Timer = 20000;
+ Wait_Timer = 10000;
+ Blizzard_Timer = 8000;
+ Ice_Lance_Timer = 12000;
+ Cone_of_Cold_Timer = 10000;
+ Frostbolt_Timer = 3000;
+ Blink_Timer = 8000;
+ }
bool HasIceBlocked;
@@ -764,16 +817,7 @@ public:
void Reset() override
{
- HasIceBlocked = false;
-
- Polymorph_Timer = 1000;
- Ice_Block_Timer = 20000;
- Wait_Timer = 10000;
- Blizzard_Timer = 8000;
- Ice_Lance_Timer = 12000;
- Cone_of_Cold_Timer = 10000;
- Frostbolt_Timer = 3000;
- Blink_Timer = 8000;
+ Initialize();
boss_priestess_lackey_commonAI::Reset();
}
@@ -879,7 +923,20 @@ public:
struct boss_warlord_salarisAI : public boss_priestess_lackey_commonAI
{
//Warrior
- boss_warlord_salarisAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { }
+ boss_warlord_salarisAI(Creature* creature) : boss_priestess_lackey_commonAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Intercept_Stun_Timer = 500;
+ Disarm_Timer = 6000;
+ Piercing_Howl_Timer = 10000;
+ Frightening_Shout_Timer = 18000;
+ Hamstring_Timer = 4500;
+ Mortal_Strike_Timer = 8000;
+ }
uint32 Intercept_Stun_Timer;
uint32 Disarm_Timer;
@@ -890,12 +947,7 @@ public:
void Reset() override
{
- Intercept_Stun_Timer = 500;
- Disarm_Timer = 6000;
- Piercing_Howl_Timer = 10000;
- Frightening_Shout_Timer = 18000;
- Hamstring_Timer = 4500;
- Mortal_Strike_Timer = 8000;
+ Initialize();
boss_priestess_lackey_commonAI::Reset();
}
@@ -1001,9 +1053,20 @@ public:
//Hunter
boss_garaxxasAI(Creature* creature) : boss_priestess_lackey_commonAI(creature)
{
+ Initialize();
m_uiPetGUID = 0;
}
+ void Initialize()
+ {
+ Aimed_Shot_Timer = 6000;
+ Shoot_Timer = 2500;
+ Concussive_Shot_Timer = 8000;
+ Multi_Shot_Timer = 10000;
+ Wing_Clip_Timer = 4000;
+ Freezing_Trap_Timer = 15000;
+ }
+
uint64 m_uiPetGUID;
uint32 Aimed_Shot_Timer;
@@ -1015,12 +1078,7 @@ public:
void Reset() override
{
- Aimed_Shot_Timer = 6000;
- Shoot_Timer = 2500;
- Concussive_Shot_Timer = 8000;
- Multi_Shot_Timer = 10000;
- Wing_Clip_Timer = 4000;
- Freezing_Trap_Timer = 15000;
+ Initialize();
Unit* pPet = ObjectAccessor::GetUnit(*me, m_uiPetGUID);
if (!pPet)
@@ -1110,7 +1168,20 @@ public:
struct boss_apokoAI : public boss_priestess_lackey_commonAI
{
//Shaman
- boss_apokoAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { }
+ boss_apokoAI(Creature* creature) : boss_priestess_lackey_commonAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Totem_Timer = 2000;
+ Totem_Amount = 1;
+ War_Stomp_Timer = 10000;
+ Purge_Timer = 8000;
+ Healing_Wave_Timer = 5000;
+ Frost_Shock_Timer = 7000;
+ }
uint32 Totem_Timer;
uint8 Totem_Amount;
@@ -1121,12 +1192,7 @@ public:
void Reset() override
{
- Totem_Timer = 2000;
- Totem_Amount = 1;
- War_Stomp_Timer = 10000;
- Purge_Timer = 8000;
- Healing_Wave_Timer = 5000;
- Frost_Shock_Timer = 7000;
+ Initialize();
boss_priestess_lackey_commonAI::Reset();
}
@@ -1199,7 +1265,19 @@ public:
struct boss_zelfanAI : public boss_priestess_lackey_commonAI
{
//Engineer
- boss_zelfanAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { }
+ boss_zelfanAI(Creature* creature) : boss_priestess_lackey_commonAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Goblin_Dragon_Gun_Timer = 20000;
+ Rocket_Launch_Timer = 7000;
+ Recombobulate_Timer = 4000;
+ High_Explosive_Sheep_Timer = 10000;
+ Fel_Iron_Bomb_Timer = 15000;
+ }
uint32 Goblin_Dragon_Gun_Timer;
uint32 Rocket_Launch_Timer;
@@ -1209,11 +1287,7 @@ public:
void Reset() override
{
- Goblin_Dragon_Gun_Timer = 20000;
- Rocket_Launch_Timer = 7000;
- Recombobulate_Timer = 4000;
- High_Explosive_Sheep_Timer = 10000;
- Fel_Iron_Bomb_Timer = 15000;
+ Initialize();
boss_priestess_lackey_commonAI::Reset();
}
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp
index 28f4800b6cf..a20f595183f 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp
@@ -115,13 +115,21 @@ public:
struct npc_kalecgosAI : public ScriptedAI
{
- npc_kalecgosAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_kalecgosAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ m_uiTransformTimer = 0;
+ }
uint32 m_uiTransformTimer;
void Reset() override
{
- m_uiTransformTimer = 0;
+ Initialize();
// we must assume he appear as dragon somewhere outside the platform of orb, and then move directly to here
if (me->GetEntry() != NPC_KAEL)
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
index 95990f18829..7355674963a 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
@@ -102,9 +102,21 @@ public:
{
npc_unworthy_initiateAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
me->SetReactState(REACT_PASSIVE);
if (!me->GetCurrentEquipmentId())
me->SetCurrentEquipmentId(me->GetOriginalEquipmentId());
+
+ playerGUID = 0;
+ wait_timer = 0;
+ anchorX = 0.f;
+ anchorY = 0.f;
+ }
+
+ void Initialize()
+ {
+ anchorGUID = 0;
+ phase = PHASE_CHAINED;
}
uint64 playerGUID;
@@ -117,8 +129,7 @@ public:
void Reset() override
{
- anchorGUID = 0;
- phase = PHASE_CHAINED;
+ Initialize();
events.Reset();
me->setFaction(7);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
@@ -516,7 +527,15 @@ public:
{
npc_death_knight_initiateAI(Creature* creature) : CombatAI(creature)
{
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ m_uiDuelerGUID = 0;
+ m_uiDuelTimer = 5000;
m_bIsDuelInProgress = false;
+ lose = false;
}
bool lose;
@@ -526,15 +545,11 @@ public:
void Reset() override
{
- lose = false;
+ Initialize();
+
me->RestoreFaction();
CombatAI::Reset();
-
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_15);
-
- m_uiDuelerGUID = 0;
- m_uiDuelTimer = 5000;
- m_bIsDuelInProgress = false;
}
void SpellHit(Unit* pCaster, const SpellInfo* pSpell) override
@@ -630,9 +645,12 @@ class npc_dark_rider_of_acherus : public CreatureScript
struct npc_dark_rider_of_acherusAI : public ScriptedAI
{
- npc_dark_rider_of_acherusAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_dark_rider_of_acherusAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
- void Reset() override
+ void Initialize()
{
PhaseTimer = 4000;
Phase = 0;
@@ -640,6 +658,11 @@ class npc_dark_rider_of_acherus : public CreatureScript
TargetGUID = 0;
}
+ void Reset() override
+ {
+ Initialize();
+ }
+
void UpdateAI(uint32 diff) override
{
if (!Intro || !TargetGUID)
@@ -1067,18 +1090,24 @@ class npc_scarlet_miner : public CreatureScript
{
npc_scarlet_minerAI(Creature* creature) : npc_escortAI(creature)
{
+ Initialize();
me->SetReactState(REACT_PASSIVE);
}
+ void Initialize()
+ {
+ carGUID = 0;
+ IntroTimer = 0;
+ IntroPhase = 0;
+ }
+
uint32 IntroTimer;
uint32 IntroPhase;
uint64 carGUID;
void Reset() override
{
- carGUID = 0;
- IntroTimer = 0;
- IntroPhase = 0;
+ Initialize();
}
void IsSummonedBy(Unit* summoner) override
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
index 8e3743ad5e2..08e3de1941a 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
@@ -51,7 +51,17 @@ public:
struct npc_crusade_persuadedAI : public ScriptedAI
{
- npc_crusade_persuadedAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_crusade_persuadedAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ speechTimer = 0;
+ speechCounter = 0;
+ playerGUID = 0;
+ }
uint32 speechTimer;
uint32 speechCounter;
@@ -59,9 +69,7 @@ public:
void Reset() override
{
- speechTimer = 0;
- speechCounter = 0;
- playerGUID = 0;
+ Initialize();
me->SetReactState(REACT_AGGRESSIVE);
me->RestoreFaction();
}
@@ -207,16 +215,22 @@ public:
{
npc_koltira_deathweaverAI(Creature* creature) : npc_escortAI(creature)
{
+ Initialize();
me->SetReactState(REACT_DEFENSIVE);
}
+ void Initialize()
+ {
+ wave = 0;
+ waveTimer = 3000;
+ valrothGUID = 0;
+ }
+
void Reset() override
{
if (!HasEscortState(STATE_ESCORT_ESCORTING))
{
- wave = 0;
- waveTimer = 3000;
- valrothGUID = 0;
+ Initialize();
me->LoadEquipment(0, true);
me->RemoveAurasDueToSpell(SPELL_ANTI_MAGIC_ZONE);
me->RemoveAurasDueToSpell(SPELL_KOLTIRA_TRANSFORM);
@@ -467,7 +481,17 @@ public:
struct npc_high_inquisitor_valrothAI : public ScriptedAI
{
- npc_high_inquisitor_valrothAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_high_inquisitor_valrothAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ uiRenew_timer = 1000;
+ uiInquisitor_Penance_timer = 2000;
+ uiValroth_Smite_timer = 1000;
+ }
uint32 uiRenew_timer;
uint32 uiInquisitor_Penance_timer;
@@ -475,9 +499,7 @@ public:
void Reset() override
{
- uiRenew_timer = 1000;
- uiInquisitor_Penance_timer = 2000;
- uiValroth_Smite_timer = 1000;
+ Initialize();
}
void EnterCombat(Unit* who) override
@@ -603,7 +625,17 @@ public:
struct npc_a_special_surpriseAI : public ScriptedAI
{
- npc_a_special_surpriseAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_a_special_surpriseAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ ExecuteSpeech_Timer = 0;
+ ExecuteSpeech_Counter = 0;
+ PlayerGUID = 0;
+ }
uint32 ExecuteSpeech_Timer;
uint32 ExecuteSpeech_Counter;
@@ -611,9 +643,7 @@ public:
void Reset() override
{
- ExecuteSpeech_Timer = 0;
- ExecuteSpeech_Counter = 0;
- PlayerGUID = 0;
+ Initialize();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
}
diff --git a/src/server/scripts/Outland/zone_zangarmarsh.cpp b/src/server/scripts/Outland/zone_zangarmarsh.cpp
index b9736c523c3..c7627d1aa04 100644
--- a/src/server/scripts/Outland/zone_zangarmarsh.cpp
+++ b/src/server/scripts/Outland/zone_zangarmarsh.cpp
@@ -178,6 +178,12 @@ public:
npc_cooshcooshAI(Creature* creature) : ScriptedAI(creature)
{
m_uiNormFaction = creature->getFaction();
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ LightningBolt_Timer = 2000;
}
uint32 m_uiNormFaction;
@@ -185,7 +191,7 @@ public:
void Reset() override
{
- LightningBolt_Timer = 2000;
+ Initialize();
if (me->getFaction() != m_uiNormFaction)
me->setFaction(m_uiNormFaction);
}
diff --git a/src/server/scripts/Pet/pet_dk.cpp b/src/server/scripts/Pet/pet_dk.cpp
index 34da2a242f4..b24336cb33c 100644
--- a/src/server/scripts/Pet/pet_dk.cpp
+++ b/src/server/scripts/Pet/pet_dk.cpp
@@ -43,12 +43,20 @@ class npc_pet_dk_ebon_gargoyle : public CreatureScript
struct npc_pet_dk_ebon_gargoyleAI : CasterAI
{
- npc_pet_dk_ebon_gargoyleAI(Creature* creature) : CasterAI(creature) { }
+ npc_pet_dk_ebon_gargoyleAI(Creature* creature) : CasterAI(creature)
+ {
+ Initialize();
+ }
- void InitializeAI() override
+ void Initialize()
{
// Not needed to be despawned now
_despawnTimer = 0;
+ }
+
+ void InitializeAI() override
+ {
+ Initialize();
CasterAI::InitializeAI();
uint64 ownerGuid = me->GetOwnerGUID();
diff --git a/src/server/scripts/Pet/pet_generic.cpp b/src/server/scripts/Pet/pet_generic.cpp
index cfb4820c040..d0e950dec32 100644
--- a/src/server/scripts/Pet/pet_generic.cpp
+++ b/src/server/scripts/Pet/pet_generic.cpp
@@ -39,11 +39,19 @@ class npc_pet_gen_mojo : public CreatureScript
struct npc_pet_gen_mojoAI : public ScriptedAI
{
- npc_pet_gen_mojoAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_pet_gen_mojoAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
- void Reset() override
+ void Initialize()
{
_victimGUID = 0;
+ }
+
+ void Reset() override
+ {
+ Initialize();
if (Unit* owner = me->GetOwner())
me->GetMotionMaster()->MoveFollow(owner, 0.0f, 0.0f);
diff --git a/src/server/scripts/Pet/pet_hunter.cpp b/src/server/scripts/Pet/pet_hunter.cpp
index 8fd6cb54b0e..20412415fbe 100644
--- a/src/server/scripts/Pet/pet_hunter.cpp
+++ b/src/server/scripts/Pet/pet_hunter.cpp
@@ -42,13 +42,22 @@ class npc_pet_hunter_snake_trap : public CreatureScript
struct npc_pet_hunter_snake_trapAI : public ScriptedAI
{
- npc_pet_hunter_snake_trapAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_pet_hunter_snake_trapAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ _spellTimer = 0;
+ _isViper = false;
+ }
void EnterCombat(Unit* /*who*/) override { }
void Reset() override
{
- _spellTimer = 0;
+ Initialize();
CreatureTemplate const* Info = me->GetCreatureTemplate();
diff --git a/src/server/scripts/World/boss_emerald_dragons.cpp b/src/server/scripts/World/boss_emerald_dragons.cpp
index 950b4cd10e9..23e373312cb 100644
--- a/src/server/scripts/World/boss_emerald_dragons.cpp
+++ b/src/server/scripts/World/boss_emerald_dragons.cpp
@@ -170,13 +170,19 @@ class npc_dream_fog : public CreatureScript
{
npc_dream_fogAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
}
- void Reset() override
+ void Initialize()
{
_roamTimer = 0;
}
+ void Reset() override
+ {
+ Initialize();
+ }
+
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
@@ -247,11 +253,17 @@ class boss_ysondre : public CreatureScript
{
boss_ysondreAI(Creature* creature) : emerald_dragonAI(creature)
{
+ Initialize();
}
- void Reset() override
+ void Initialize()
{
_stage = 1;
+ }
+
+ void Reset() override
+ {
+ Initialize();
emerald_dragonAI::Reset();
events.ScheduleEvent(EVENT_LIGHTNING_WAVE, 12000);
}
@@ -335,11 +347,17 @@ class boss_lethon : public CreatureScript
{
boss_lethonAI(Creature* creature) : emerald_dragonAI(creature)
{
+ Initialize();
}
- void Reset() override
+ void Initialize()
{
_stage = 1;
+ }
+
+ void Reset() override
+ {
+ Initialize();
emerald_dragonAI::Reset();
events.ScheduleEvent(EVENT_SHADOW_BOLT_WHIRL, 10000);
}
@@ -457,11 +475,17 @@ class boss_emeriss : public CreatureScript
{
boss_emerissAI(Creature* creature) : emerald_dragonAI(creature)
{
+ Initialize();
}
- void Reset() override
+ void Initialize()
{
_stage = 1;
+ }
+
+ void Reset() override
+ {
+ Initialize();
emerald_dragonAI::Reset();
events.ScheduleEvent(EVENT_VOLATILE_INFECTION, 12000);
}
@@ -549,16 +573,22 @@ class boss_taerar : public CreatureScript
{
boss_taerarAI(Creature* creature) : emerald_dragonAI(creature)
{
+ Initialize();
}
- void Reset() override
+ void Initialize()
{
- me->RemoveAurasDueToSpell(SPELL_SHADE);
_stage = 1;
-
_shades = 0;
_banished = false;
_banishedTimer = 0;
+ }
+
+ void Reset() override
+ {
+ me->RemoveAurasDueToSpell(SPELL_SHADE);
+
+ Initialize();
emerald_dragonAI::Reset();
events.ScheduleEvent(EVENT_ARCANE_BLAST, 12000);
diff --git a/src/server/scripts/World/guards.cpp b/src/server/scripts/World/guards.cpp
index a156a41fcef..bd953a285ab 100644
--- a/src/server/scripts/World/guards.cpp
+++ b/src/server/scripts/World/guards.cpp
@@ -54,14 +54,22 @@ public:
struct guard_genericAI : public GuardAI
{
- guard_genericAI(Creature* creature) : GuardAI(creature) { }
+ guard_genericAI(Creature* creature) : GuardAI(creature)
+ {
+ Initialize();
+ }
- void Reset() override
+ void Initialize()
{
globalCooldown = 0;
buffTimer = 0;
}
+ void Reset() override
+ {
+ Initialize();
+ }
+
void EnterCombat(Unit* who) override
{
if (me->GetEntry() == NPC_CENARION_HOLD_INFANTRY)
@@ -263,9 +271,12 @@ public:
struct guard_shattrath_scryerAI : public GuardAI
{
- guard_shattrath_scryerAI(Creature* creature) : GuardAI(creature) { }
+ guard_shattrath_scryerAI(Creature* creature) : GuardAI(creature)
+ {
+ Initialize();
+ }
- void Reset() override
+ void Initialize()
{
banishTimer = 5000;
exileTimer = 8500;
@@ -273,6 +284,11 @@ public:
canTeleport = false;
}
+ void Reset() override
+ {
+ Initialize();
+ }
+
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
@@ -328,9 +344,12 @@ public:
struct guard_shattrath_aldorAI : public GuardAI
{
- guard_shattrath_aldorAI(Creature* creature) : GuardAI(creature) { }
+ guard_shattrath_aldorAI(Creature* creature) : GuardAI(creature)
+ {
+ Initialize();
+ }
- void Reset() override
+ void Initialize()
{
banishTimer = 5000;
exileTimer = 8500;
@@ -338,6 +357,11 @@ public:
canTeleport = false;
}
+ void Reset() override
+ {
+ Initialize();
+ }
+
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
diff --git a/src/server/scripts/World/mob_generic_creature.cpp b/src/server/scripts/World/mob_generic_creature.cpp
index a27a78a5338..eb6fbea170e 100644
--- a/src/server/scripts/World/mob_generic_creature.cpp
+++ b/src/server/scripts/World/mob_generic_creature.cpp
@@ -36,7 +36,17 @@ public:
struct generic_creatureAI : public ScriptedAI
{
- generic_creatureAI(Creature* creature) : ScriptedAI(creature) { }
+ generic_creatureAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ GlobalCooldown = 0;
+ BuffTimer = 0; //Rebuff as soon as we can
+ IsSelfRooted = false;
+ }
uint32 GlobalCooldown; //This variable acts like the global cooldown that players have (1.5 seconds)
uint32 BuffTimer; //This variable keeps track of buffs
@@ -44,9 +54,7 @@ public:
void Reset() override
{
- GlobalCooldown = 0;
- BuffTimer = 0; //Rebuff as soon as we can
- IsSelfRooted = false;
+ Initialize();
}
void EnterCombat(Unit* who) override
diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp
index e8a4a78e1bb..944ebe27b7b 100644
--- a/src/server/scripts/World/npcs_special.cpp
+++ b/src/server/scripts/World/npcs_special.cpp
@@ -329,13 +329,21 @@ public:
struct npc_chicken_cluckAI : public ScriptedAI
{
- npc_chicken_cluckAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_chicken_cluckAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ ResetFlagTimer = 120000;
+ }
uint32 ResetFlagTimer;
void Reset() override
{
- ResetFlagTimer = 120000;
+ Initialize();
me->setFaction(FACTION_CHICKEN);
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
}
@@ -424,15 +432,23 @@ public:
struct npc_dancing_flamesAI : public ScriptedAI
{
- npc_dancing_flamesAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_dancing_flamesAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Active = true;
+ CanIteract = 3500;
+ }
bool Active;
uint32 CanIteract;
void Reset() override
{
- Active = true;
- CanIteract = 3500;
+ Initialize();
DoCast(me, SPELL_BRAZIER, true);
DoCast(me, SPELL_FIERY_AURA, false);
float x, y, z;
@@ -575,7 +591,25 @@ public:
struct npc_doctorAI : public ScriptedAI
{
- npc_doctorAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_doctorAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ PlayerGUID = 0;
+
+ SummonPatientTimer = 10000;
+ SummonPatientCount = 0;
+ PatientDiedCount = 0;
+ PatientSavedCount = 0;
+
+ Patients.clear();
+ Coordinates.clear();
+
+ Event = false;
+ }
uint64 PlayerGUID;
@@ -591,18 +625,7 @@ public:
void Reset() override
{
- PlayerGUID = 0;
-
- SummonPatientTimer = 10000;
- SummonPatientCount = 0;
- PatientDiedCount = 0;
- PatientSavedCount = 0;
-
- Patients.clear();
- Coordinates.clear();
-
- Event = false;
-
+ Initialize();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
@@ -720,15 +743,23 @@ public:
struct npc_injured_patientAI : public ScriptedAI
{
- npc_injured_patientAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_injured_patientAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ DoctorGUID = 0;
+ Coord = NULL;
+ }
uint64 DoctorGUID;
Location* Coord;
void Reset() override
{
- DoctorGUID = 0;
- Coord = NULL;
+ Initialize();
//no select
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -1449,14 +1480,20 @@ public:
{
npc_tonk_mineAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
me->SetReactState(REACT_PASSIVE);
}
+ void Initialize()
+ {
+ ExplosionTimer = 3000;
+ }
+
uint32 ExplosionTimer;
void Reset() override
{
- ExplosionTimer = 3000;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override { }
@@ -1651,13 +1688,21 @@ class npc_wormhole : public CreatureScript
struct npc_wormholeAI : public PassiveAI
{
- npc_wormholeAI(Creature* creature) : PassiveAI(creature) { }
+ npc_wormholeAI(Creature* creature) : PassiveAI(creature)
+ {
+ Initialize();
+ }
- void InitializeAI() override
+ void Initialize()
{
_showUnderground = urand(0, 100) == 0; // Guessed value, it is really rare though
}
+ void InitializeAI() override
+ {
+ Initialize();
+ }
+
uint32 GetData(uint32 type) const override
{
return (type == DATA_SHOW_UNDERGROUND && _showUnderground) ? 1 : 0;
@@ -2305,7 +2350,19 @@ public:
struct npc_spring_rabbitAI : public ScriptedAI
{
- npc_spring_rabbitAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_spring_rabbitAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ inLove = false;
+ rabbitGUID = 0;
+ jumpTimer = urand(5000, 10000);
+ bunnyTimer = urand(10000, 20000);
+ searchTimer = urand(5000, 10000);
+ }
bool inLove;
uint32 jumpTimer;
@@ -2315,11 +2372,7 @@ public:
void Reset() override
{
- inLove = false;
- rabbitGUID = 0;
- jumpTimer = urand(5000, 10000);
- bunnyTimer = urand(10000, 20000);
- searchTimer = urand(5000, 10000);
+ Initialize();
if (Unit* owner = me->GetOwner())
me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
}
diff --git a/src/tools/vmap4_extractor/model.cpp b/src/tools/vmap4_extractor/model.cpp
index c527ec32ddb..519f59cb086 100644
--- a/src/tools/vmap4_extractor/model.cpp
+++ b/src/tools/vmap4_extractor/model.cpp
@@ -143,6 +143,7 @@ Vec3D fixCoordSystem2(Vec3D v)
}
ModelInstance::ModelInstance(MPQFile& f, char const* ModelInstName, uint32 mapID, uint32 tileX, uint32 tileY, FILE *pDirfile)
+ : scale(0), flags(0)
{
float ff[3];
f.read(&id, 4);