aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVincent-Michael <Vincent_Michael@gmx.de>2014-09-04 06:41:51 +0200
committerVincent-Michael <Vincent_Michael@gmx.de>2014-09-04 06:41:51 +0200
commitecb317c3006181611dac01554560f15f265aa0e9 (patch)
tree9f68584ccac553a219eaee65d4dd9f064a7f0ecc /src
parentd7dfef900fff2f52f34fb32a7854475786d34158 (diff)
parentd4049e62a3b915867e9668a82402b7e7f2389b9f (diff)
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Conflicts: src/server/game/AI/SmartScripts/SmartScriptMgr.cpp src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp src/server/scripts/EasternKingdoms/zone_hinterlands.cpp src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp src/server/scripts/EasternKingdoms/zone_tirisfal_glades.cpp
Diffstat (limited to 'src')
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp58
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp1
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h13
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp16
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp56
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp37
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp30
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp22
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp16
-rw-r--r--src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp16
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp18
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp28
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp30
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp28
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp62
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp68
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp179
-rw-r--r--src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp36
-rw-r--r--src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp16
-rw-r--r--src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/zone_duskwood.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/zone_undercity.cpp46
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h3
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp103
41 files changed, 767 insertions, 359 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 58e82bfcbbf..8e2d7cbf886 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -2227,6 +2227,64 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
sGameEventMgr->StartEvent(eventId, true);
break;
}
+ case SMART_ACTION_START_CLOSEST_WAYPOINT:
+ {
+ uint32 waypoints[SMART_ACTION_PARAM_COUNT];
+ waypoints[0] = e.action.closestWaypointFromList.wp1;
+ waypoints[1] = e.action.closestWaypointFromList.wp2;
+ waypoints[2] = e.action.closestWaypointFromList.wp3;
+ waypoints[3] = e.action.closestWaypointFromList.wp4;
+ waypoints[4] = e.action.closestWaypointFromList.wp5;
+ waypoints[5] = e.action.closestWaypointFromList.wp6;
+ float distanceToClosest = std::numeric_limits<float>::max();
+ WayPoint* closestWp = NULL;
+
+ ObjectList* targets = GetTargets(e, unit);
+ if (targets)
+ {
+ for (ObjectList::iterator itr = targets->begin(); itr != targets->end(); ++itr)
+ {
+ if (Creature* target = (*itr)->ToCreature())
+ {
+ if (IsSmart(target))
+ {
+ for (uint8 i = 0; i < SMART_ACTION_PARAM_COUNT; i++)
+ {
+ if (!waypoints[i])
+ continue;
+
+ WPPath* path = sSmartWaypointMgr->GetPath(waypoints[i]);
+
+ if (!path || path->empty())
+ continue;
+
+ WPPath::const_iterator itrWp = path->find(0);
+
+ if (itrWp != path->end())
+ {
+ if (WayPoint* wp = itrWp->second)
+ {
+ float distToThisPath = target->GetDistance(wp->x, wp->y, wp->z);
+
+ if (distToThisPath < distanceToClosest)
+ {
+ distanceToClosest = distToThisPath;
+ closestWp = wp;
+ }
+ }
+ }
+ }
+
+ if (closestWp)
+ CAST_AI(SmartAI, target->AI())->StartPath(false, closestWp->id, true);
+ }
+ }
+ }
+
+ delete targets;
+ }
+ break;
+ }
default:
TC_LOG_ERROR("sql.sql", "SmartScript::ProcessAction: Entry %d SourceType %u, Event %u, Unhandled Action type %u", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
break;
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
index af24298c60d..7831594016a 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
@@ -1046,6 +1046,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
}
break;
}
+ case SMART_ACTION_START_CLOSEST_WAYPOINT:
case SMART_ACTION_FOLLOW:
case SMART_ACTION_SET_ORIENTATION:
case SMART_ACTION_STORE_TARGET_LIST:
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index bff2e903f37..e3c4e644751 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -530,8 +530,9 @@ enum SMART_ACTION
SMART_ACTION_REMOVE_POWER = 110, // PowerType, newPower
SMART_ACTION_GAME_EVENT_STOP = 111, // GameEventId
SMART_ACTION_GAME_EVENT_START = 112, // GameEventId
+ SMART_ACTION_START_CLOSEST_WAYPOINT = 113, // wp1, wp2, wp3, wp4, wp5, wp6, wp7
- SMART_ACTION_END = 113
+ SMART_ACTION_END = 114
};
struct SmartAction
@@ -995,6 +996,16 @@ struct SmartAction
uint32 id;
} gameEventStart;
+ struct
+ {
+ uint32 wp1;
+ uint32 wp2;
+ uint32 wp3;
+ uint32 wp4;
+ uint32 wp5;
+ uint32 wp6;
+ } closestWaypointFromList;
+
//! Note for any new future actions
//! All parameters must have type uint32
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
index 08e3de1941a..ee624c4f6a5 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
@@ -389,7 +389,16 @@ public:
struct npc_scarlet_courierAI : public ScriptedAI
{
- npc_scarlet_courierAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_scarlet_courierAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ uiStage = 1;
+ uiStage_timer = 3000;
+ }
uint32 uiStage;
uint32 uiStage_timer;
@@ -397,8 +406,7 @@ public:
void Reset() override
{
me->Mount(14338); // not sure about this id
- uiStage = 1;
- uiStage_timer = 3000;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
index e202e55e675..f6757afd5bc 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
@@ -312,6 +312,8 @@ public:
npc_highlord_darion_mograineAI(Creature* creature) : npc_escortAI(creature)
{
uiTirionGUID = 0;
+ uiAlexandrosGUID = 0;
+ uiDarionGUID = 0;
uiKorfaxGUID = 0;
uiMaxwellGUID = 0;
uiEligorGUID = 0;
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp
index cad51dd55e0..efba7040b76 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp
@@ -46,7 +46,19 @@ public:
struct npc_valkyr_battle_maidenAI : public PassiveAI
{
- npc_valkyr_battle_maidenAI(Creature* creature) : PassiveAI(creature) { }
+ npc_valkyr_battle_maidenAI(Creature* creature) : PassiveAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ FlyBackTimer = 500;
+ phase = 0;
+ x = 0.f;
+ y = 0.f;
+ z = 0.f;
+ }
uint32 FlyBackTimer;
float x, y, z;
@@ -58,8 +70,6 @@ public:
me->SetVisible(false);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->SetCanFly(true);
- FlyBackTimer = 500;
- phase = 0;
me->GetPosition(x, y, z);
z += 4.0f;
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
index cad46b84748..307bcd5add6 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
@@ -232,7 +232,20 @@ public:
struct npc_headAI : public ScriptedAI
{
- npc_headAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_headAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Phase = 0;
+ bodyGUID = 0;
+ die = false;
+ withbody = true;
+ wait = 1000;
+ laugh = urand(15000, 30000);
+ }
uint64 bodyGUID;
@@ -245,12 +258,7 @@ public:
void Reset() override
{
- Phase = 0;
- bodyGUID = 0;
- die = false;
- withbody = true;
- wait = 1000;
- laugh = urand(15000, 30000);
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override { }
@@ -380,10 +388,29 @@ public:
{
boss_headless_horsemanAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
headGUID = 0;
}
+ void Initialize()
+ {
+ Phase = 1;
+ conflagrate = 15000;
+ summonadds = 15000;
+ laugh = urand(16000, 20000);
+ cleave = 2000;
+ regen = 1000;
+ burn = 6000;
+ count = 0;
+ say_timer = 3000;
+
+ withhead = true;
+ returned = true;
+ burned = false;
+ IsFlying = false;
+ }
+
InstanceScript* instance;
uint64 headGUID;
@@ -410,20 +437,7 @@ public:
void Reset() override
{
- Phase = 1;
- conflagrate = 15000;
- summonadds = 15000;
- laugh = urand(16000, 20000);
- cleave = 2000;
- regen = 1000;
- burn = 6000;
- count = 0;
- say_timer = 3000;
-
- withhead = true;
- returned = true;
- burned = false;
- IsFlying = false;
+ Initialize();
DoCast(me, SPELL_HEAD);
if (headGUID)
{
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp
index a4a3660b360..78a317b216e 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp
@@ -51,9 +51,21 @@ public:
{
boss_high_inquisitor_fairbanksAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ CurseOfBlood_Timer = 10000;
+ DispelMagic_Timer = 30000;
+ Fear_Timer = 40000;
+ Heal_Timer = 30000;
+ Sleep_Timer = 30000;
+ Dispel_Timer = 20000;
+ PowerWordShield = false;
+ }
+
uint32 CurseOfBlood_Timer;
uint32 DispelMagic_Timer;
uint32 Fear_Timer;
@@ -65,13 +77,7 @@ public:
void Reset() override
{
- CurseOfBlood_Timer = 10000;
- DispelMagic_Timer = 30000;
- Fear_Timer = 40000;
- Heal_Timer = 30000;
- Sleep_Timer = 30000;
- Dispel_Timer = 20000;
- PowerWordShield = false;
+ Initialize();
me->SetStandState(UNIT_STAND_STATE_DEAD);
me->SetUInt32Value(UNIT_FIELD_BYTES_1, 7);
instance->SetBossState(DATA_HIGH_INQUISITOR_FAIRBANKS, NOT_STARTED);
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp
index a73cf946a7c..c05de1bb800 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp
@@ -55,9 +55,17 @@ public:
{
boss_interrogator_vishasAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = me->GetInstanceScript();
}
+ void Initialize()
+ {
+ ShadowWordPain_Timer = 5000;
+ Yell60 = false;
+ Yell30 = false;
+ }
+
InstanceScript* instance;
bool Yell30;
@@ -66,9 +74,7 @@ public:
void Reset() override
{
- ShadowWordPain_Timer = 5000;
- Yell60 = false;
- Yell30 = false;
+ Initialize();
instance->SetBossState(DATA_INTERROGATOR_VISHAS, NOT_STARTED);
}
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp
index a9988584edd..02f7c815414 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp
@@ -72,9 +72,19 @@ public:
{
boss_scarlet_commander_mograineAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ CrusaderStrike_Timer = 10000;
+ HammerOfJustice_Timer = 10000;
+ _bHasDied = false;
+ _bHeal = false;
+ _bFakeDeath = false;
+ }
+
InstanceScript* instance;
uint32 CrusaderStrike_Timer;
@@ -86,8 +96,7 @@ public:
void Reset() override
{
- CrusaderStrike_Timer = 10000;
- HammerOfJustice_Timer = 10000;
+ Initialize();
//Incase wipe during phase that mograine fake death
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -96,10 +105,6 @@ public:
if (me->IsAlive())
instance->SetBossState(DATA_MOGRAINE_AND_WHITE_EVENT, NOT_STARTED);
-
- _bHasDied = false;
- _bHeal = false;
- _bFakeDeath = false;
}
void JustReachedHome() override
@@ -230,9 +235,21 @@ public:
{
boss_high_inquisitor_whitemaneAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ Wait_Timer = 7000;
+ Heal_Timer = 10000;
+ PowerWordShield_Timer = 15000;
+ HolySmite_Timer = 6000;
+
+ _bCanResurrectCheck = false;
+ _bCanResurrect = false;
+ }
+
InstanceScript* instance;
uint32 Heal_Timer;
@@ -245,13 +262,7 @@ public:
void Reset() override
{
- Wait_Timer = 7000;
- Heal_Timer = 10000;
- PowerWordShield_Timer = 15000;
- HolySmite_Timer = 6000;
-
- _bCanResurrectCheck = false;
- _bCanResurrect = false;
+ Initialize();
if (me->IsAlive())
instance->SetBossState(DATA_MOGRAINE_AND_WHITE_EVENT, NOT_STARTED);
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
index 84ada04a989..4a9703b509b 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
@@ -50,7 +50,16 @@ class boss_instructor_malicia : public CreatureScript
struct boss_instructormaliciaAI : public BossAI
{
- boss_instructormaliciaAI(Creature* creature) : BossAI(creature, DATA_INSTRUCTORMALICIA) { }
+ boss_instructormaliciaAI(Creature* creature) : BossAI(creature, DATA_INSTRUCTORMALICIA)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ FlashCounter = 0;
+ TouchCounter = 0;
+ }
uint32 FlashCounter;
uint32 TouchCounter;
@@ -58,8 +67,7 @@ class boss_instructor_malicia : public CreatureScript
void Reset() override
{
_Reset();
- FlashCounter = 0;
- TouchCounter = 0;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
index 57331d84b82..02c0f70b7c8 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
@@ -47,7 +47,18 @@ public:
struct boss_jandicebarovAI : public ScriptedAI
{
- boss_jandicebarovAI(Creature* creature) : ScriptedAI(creature) { }
+ boss_jandicebarovAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ CurseOfBlood_Timer = 15000;
+ Illusion_Timer = 30000;
+ Invisible_Timer = 3000; //Too much too low?
+ Invisible = false;
+ }
uint32 CurseOfBlood_Timer;
uint32 Illusion_Timer;
@@ -57,10 +68,7 @@ public:
void Reset() override
{
- CurseOfBlood_Timer = 15000;
- Illusion_Timer = 30000;
- Invisible_Timer = 3000; //Too much too low?
- Invisible = false;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
@@ -169,13 +177,21 @@ public:
struct npc_illusionofjandicebarovAI : public ScriptedAI
{
- npc_illusionofjandicebarovAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_illusionofjandicebarovAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Cleave_Timer = urand(2000, 8000);
+ }
uint32 Cleave_Timer;
void Reset() override
{
- Cleave_Timer = urand(2000, 8000);
+ Initialize();
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp
index b88954bd1b7..3864c598459 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp
@@ -44,7 +44,19 @@ public:
struct boss_kormokAI : public ScriptedAI
{
- boss_kormokAI(Creature* creature) : ScriptedAI(creature) { }
+ boss_kormokAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ ShadowVolley_Timer = 10000;
+ BoneShield_Timer = 2000;
+ Minion_Timer = 15000;
+ Mage_Timer = 0;
+ Mages = false;
+ }
uint32 ShadowVolley_Timer;
uint32 BoneShield_Timer;
@@ -54,11 +66,7 @@ public:
void Reset() override
{
- ShadowVolley_Timer = 10000;
- BoneShield_Timer = 2000;
- Minion_Timer = 15000;
- Mage_Timer = 0;
- Mages = false;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp
index 2aecc8bd491..9351224863c 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp
@@ -48,7 +48,20 @@ public:
struct boss_rasfrostAI : public ScriptedAI
{
- boss_rasfrostAI(Creature* creature) : ScriptedAI(creature) { }
+ boss_rasfrostAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ IceArmor_Timer = 2000;
+ Frostbolt_Timer = 8000;
+ ChillNova_Timer = 12000;
+ Freeze_Timer = 18000;
+ FrostVolley_Timer = 24000;
+ Fear_Timer = 45000;
+ }
uint32 IceArmor_Timer;
uint32 Frostbolt_Timer;
@@ -59,12 +72,7 @@ public:
void Reset() override
{
- IceArmor_Timer = 2000;
- Frostbolt_Timer = 8000;
- ChillNova_Timer = 12000;
- Freeze_Timer = 18000;
- FrostVolley_Timer = 24000;
- Fear_Timer = 45000;
+ Initialize();
DoCast(me, SPELL_ICEARMOR, true);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp
index c111eb103b4..fba5f3faa14 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp
@@ -51,7 +51,17 @@ public:
struct boss_vectusAI : public ScriptedAI
{
- boss_vectusAI(Creature* creature) : ScriptedAI(creature) { }
+ boss_vectusAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ m_uiFireShield_Timer = 2000;
+ m_uiBlastWave_Timer = 14000;
+ m_uiFrenzy_Timer = 0;
+ }
uint32 m_uiFireShield_Timer;
uint32 m_uiBlastWave_Timer;
@@ -59,9 +69,7 @@ public:
void Reset() override
{
- m_uiFireShield_Timer = 2000;
- m_uiBlastWave_Timer = 14000;
- m_uiFrenzy_Timer = 0;
+ Initialize();
}
void UpdateAI(uint32 uiDiff) override
diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp
index fb839650b86..a6e77a234c6 100644
--- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp
+++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp
@@ -164,16 +164,22 @@ public:
{
npc_arugal_voidwalkerAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ uiDarkOffering = urand(200, 1000);
+ }
+
InstanceScript* instance;
uint32 uiDarkOffering;
void Reset() override
{
- uiDarkOffering = urand(200, 1000);
+ Initialize();
}
void UpdateAI(uint32 uiDiff) override
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp
index de54e87fc97..85f5b51b52e 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp
@@ -75,9 +75,19 @@ public:
{
boss_baron_rivendareAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = me->GetInstanceScript();
}
+ void Initialize()
+ {
+ ShadowBolt_Timer = 5000;
+ Cleave_Timer = 8000;
+ MortalStrike_Timer = 12000;
+ // RaiseDead_Timer = 30000;
+ SummonSkeletons_Timer = 34000;
+ }
+
InstanceScript* instance;
uint32 ShadowBolt_Timer;
@@ -88,11 +98,7 @@ public:
void Reset() override
{
- ShadowBolt_Timer = 5000;
- Cleave_Timer = 8000;
- MortalStrike_Timer = 12000;
- // RaiseDead_Timer = 30000;
- SummonSkeletons_Timer = 34000;
+ Initialize();
if (instance->GetData(TYPE_RAMSTEIN) == DONE)
instance->SetData(TYPE_BARON, NOT_STARTED);
}
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp
index a3eb66ac23c..fa8f0f39563 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp
@@ -49,9 +49,18 @@ public:
{
boss_baroness_anastariAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = me->GetInstanceScript();
}
+ void Initialize()
+ {
+ BansheeWail_Timer = 1000;
+ BansheeCurse_Timer = 11000;
+ Silence_Timer = 13000;
+ //Possess_Timer = 35000;
+ }
+
InstanceScript* instance;
uint32 BansheeWail_Timer;
@@ -61,10 +70,7 @@ public:
void Reset() override
{
- BansheeWail_Timer = 1000;
- BansheeCurse_Timer = 11000;
- Silence_Timer = 13000;
- //Possess_Timer = 35000;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
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 14d2a9a9f26..063081021fd 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp
@@ -92,7 +92,18 @@ public:
struct boss_cannon_master_willeyAI : public ScriptedAI
{
- boss_cannon_master_willeyAI(Creature* creature) : ScriptedAI(creature) { }
+ boss_cannon_master_willeyAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Shoot_Timer = 1000;
+ Pummel_Timer = 7000;
+ KnockAway_Timer = 11000;
+ SummonRifleman_Timer = 15000;
+ }
uint32 KnockAway_Timer;
uint32 Pummel_Timer;
@@ -101,10 +112,7 @@ public:
void Reset() override
{
- Shoot_Timer = 1000;
- Pummel_Timer = 7000;
- KnockAway_Timer = 11000;
- SummonRifleman_Timer = 15000;
+ Initialize();
}
void JustDied(Unit* /*killer*/) override
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp
index f0a8c5c418f..1c7af67190f 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp
@@ -81,7 +81,23 @@ public:
struct boss_dathrohan_balnazzarAI : public ScriptedAI
{
- boss_dathrohan_balnazzarAI(Creature* creature) : ScriptedAI(creature) { }
+ boss_dathrohan_balnazzarAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ m_uiCrusadersHammer_Timer = 8000;
+ m_uiCrusaderStrike_Timer = 12000;
+ m_uiMindBlast_Timer = 6000;
+ m_uiHolyStrike_Timer = 18000;
+ m_uiShadowShock_Timer = 4000;
+ m_uiPsychicScream_Timer = 16000;
+ m_uiDeepSleep_Timer = 20000;
+ m_uiMindControl_Timer = 10000;
+ m_bTransformed = false;
+ }
uint32 m_uiCrusadersHammer_Timer;
uint32 m_uiCrusaderStrike_Timer;
@@ -95,15 +111,7 @@ public:
void Reset() override
{
- m_uiCrusadersHammer_Timer = 8000;
- m_uiCrusaderStrike_Timer = 12000;
- m_uiMindBlast_Timer = 6000;
- m_uiHolyStrike_Timer = 18000;
- m_uiShadowShock_Timer = 4000;
- m_uiPsychicScream_Timer = 16000;
- m_uiDeepSleep_Timer = 20000;
- m_uiMindControl_Timer = 10000;
- m_bTransformed = false;
+ Initialize();
if (me->GetEntry() == NPC_BALNAZZAR)
me->UpdateEntry(NPC_DATHROHAN);
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp
index 8b6f2da87e4..ddd51320b1c 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp
@@ -53,7 +53,19 @@ public:
struct boss_magistrate_barthilasAI : public ScriptedAI
{
- boss_magistrate_barthilasAI(Creature* creature) : ScriptedAI(creature) { }
+ boss_magistrate_barthilasAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ DrainingBlow_Timer = 20000;
+ CrowdPummel_Timer = 15000;
+ MightyBlow_Timer = 10000;
+ FuriousAnger_Timer = 5000;
+ AngerCount = 0;
+ }
uint32 DrainingBlow_Timer;
uint32 CrowdPummel_Timer;
@@ -63,11 +75,7 @@ public:
void Reset() override
{
- DrainingBlow_Timer = 20000;
- CrowdPummel_Timer = 15000;
- MightyBlow_Timer = 10000;
- FuriousAnger_Timer = 5000;
- AngerCount = 0;
+ Initialize();
if (me->IsAlive())
me->SetDisplayId(MODEL_NORMAL);
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 b3fae9821aa..68193ffd0c2 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp
@@ -50,9 +50,17 @@ public:
{
boss_maleki_the_pallidAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = me->GetInstanceScript();
}
+ void Initialize()
+ {
+ Frostbolt_Timer = 1000;
+ IceTomb_Timer = 16000;
+ DrainLife_Timer = 31000;
+ }
+
InstanceScript* instance;
uint32 Frostbolt_Timer;
@@ -61,9 +69,7 @@ public:
void Reset() override
{
- Frostbolt_Timer = 1000;
- IceTomb_Timer = 16000;
- DrainLife_Timer = 31000;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp
index 1b5127a5e1c..1d3e28946be 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp
@@ -49,9 +49,18 @@ public:
{
boss_nerubenkanAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = me->GetInstanceScript();
}
+ void Initialize()
+ {
+ CryptScarabs_Timer = 3000;
+ EncasingWebs_Timer = 7000;
+ PierceArmor_Timer = 19000;
+ RaiseUndeadScarab_Timer = 3000;
+ }
+
InstanceScript* instance;
uint32 EncasingWebs_Timer;
@@ -61,10 +70,7 @@ public:
void Reset() override
{
- CryptScarabs_Timer = 3000;
- EncasingWebs_Timer = 7000;
- PierceArmor_Timer = 19000;
- RaiseUndeadScarab_Timer = 3000;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp
index dfc3e570e1b..0a09bc85ea3 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp
@@ -65,9 +65,16 @@ public:
{
boss_silver_hand_bossesAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ HolyLight_Timer = 20000;
+ DivineShield_Timer = 20000;
+ }
+
InstanceScript* instance;
uint32 HolyLight_Timer;
@@ -75,8 +82,7 @@ public:
void Reset() override
{
- HolyLight_Timer = 20000;
- DivineShield_Timer = 20000;
+ Initialize();
switch (me->GetEntry())
{
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 df9b6a04af4..531a4f3887a 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp
@@ -52,9 +52,16 @@ public:
{
boss_ramstein_the_gorgerAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = me->GetInstanceScript();
}
+ void Initialize()
+ {
+ Trample_Timer = 3000;
+ Knockout_Timer = 12000;
+ }
+
InstanceScript* instance;
uint32 Trample_Timer;
@@ -62,8 +69,7 @@ public:
void Reset() override
{
- Trample_Timer = 3000;
- Knockout_Timer = 12000;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
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 a45b3594da0..f721fca8aab 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp
@@ -48,15 +48,23 @@ public:
struct boss_timmy_the_cruelAI : public ScriptedAI
{
- boss_timmy_the_cruelAI(Creature* creature) : ScriptedAI(creature) { }
+ boss_timmy_the_cruelAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ RavenousClaw_Timer = 10000;
+ HasYelled = false;
+ }
uint32 RavenousClaw_Timer;
bool HasYelled;
void Reset() override
{
- RavenousClaw_Timer = 10000;
- HasYelled = false;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp
index 4109328afda..01ee7139ae5 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp
@@ -142,7 +142,17 @@ public:
struct npc_restless_soulAI : public ScriptedAI
{
- npc_restless_soulAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_restless_soulAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Tagger = 0;
+ Die_Timer = 5000;
+ Tagged = false;
+ }
uint64 Tagger;
uint32 Die_Timer;
@@ -150,9 +160,7 @@ public:
void Reset() override
{
- Tagger = 0;
- Die_Timer = 5000;
- Tagged = false;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override { }
@@ -224,15 +232,23 @@ public:
struct npc_spectral_ghostly_citizenAI : public ScriptedAI
{
- npc_spectral_ghostly_citizenAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_spectral_ghostly_citizenAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Die_Timer = 5000;
+ Tagged = false;
+ }
uint32 Die_Timer;
bool Tagged;
void Reset() override
{
- Die_Timer = 5000;
- Tagged = false;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override { }
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
index eb9b6c2a1df..4e401be7df3 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
@@ -70,10 +70,26 @@ public:
{
boss_brutallusAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
Intro = true;
}
+ void Initialize()
+ {
+ SlashTimer = 11000;
+ StompTimer = 30000;
+ BurnTimer = 60000;
+ BerserkTimer = 360000;
+
+ IntroPhase = 0;
+ IntroPhaseTimer = 0;
+ IntroFrostBoltTimer = 0;
+
+ IsIntro = false;
+ Enraged = false;
+ }
+
InstanceScript* instance;
uint32 SlashTimer;
@@ -91,17 +107,7 @@ public:
void Reset() override
{
- SlashTimer = 11000;
- StompTimer = 30000;
- BurnTimer = 60000;
- BerserkTimer = 360000;
-
- IntroPhase = 0;
- IntroPhaseTimer = 0;
- IntroFrostBoltTimer = 0;
-
- IsIntro = false;
- Enraged = false;
+ Initialize();
DoCast(me, SPELL_DUAL_WIELD, true);
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp
index 3701d37ed7f..d2382cda37d 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp
@@ -82,9 +82,22 @@ public:
{
boss_sacrolashAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ ShadowbladesTimer = 10000;
+ ShadownovaTimer = 30000;
+ ConfoundingblowTimer = 25000;
+ ShadowimageTimer = 20000;
+ ConflagrationTimer = 30000;
+ EnrageTimer = 360000;
+ SisterDeath = false;
+ Enraged = false;
+ }
+
InstanceScript* instance;
bool SisterDeath;
@@ -111,13 +124,7 @@ public:
if (!me->IsInCombat())
{
- ShadowbladesTimer = 10000;
- ShadownovaTimer = 30000;
- ConfoundingblowTimer = 25000;
- ShadowimageTimer = 20000;
- ConflagrationTimer = 30000;
- EnrageTimer = 360000;
- SisterDeath = false;
+ Initialize();
}
instance->SetBossState(DATA_EREDAR_TWINS, NOT_STARTED);
@@ -319,12 +326,27 @@ public:
{
boss_alythessAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
SetCombatMovement(false);
instance = creature->GetInstanceScript();
IntroStepCounter = 10;
}
+ void Initialize()
+ {
+ ConflagrationTimer = 45000;
+ BlazeTimer = 100;
+ PyrogenicsTimer = 15000;
+ ShadownovaTimer = 40000;
+ EnrageTimer = 360000;
+ FlamesearTimer = 15000;
+ IntroYellTimer = 10000;
+
+ SisterDeath = false;
+ Enraged = false;
+ }
+
InstanceScript* instance;
bool SisterDeath;
@@ -354,15 +376,7 @@ public:
if (!me->IsInCombat())
{
- ConflagrationTimer = 45000;
- BlazeTimer = 100;
- PyrogenicsTimer = 15000;
- ShadownovaTimer = 40000;
- EnrageTimer = 360000;
- FlamesearTimer = 15000;
- IntroYellTimer = 10000;
-
- SisterDeath = false;
+ Initialize();
}
instance->SetBossState(DATA_EREDAR_TWINS, NOT_STARTED);
@@ -635,7 +649,17 @@ public:
struct npc_shadow_imageAI : public ScriptedAI
{
- npc_shadow_imageAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_shadow_imageAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ ShadowfuryTimer = 5000 + (rand32() % 15000);
+ DarkstrikeTimer = 3000;
+ KillTimer = 15000;
+ }
uint32 ShadowfuryTimer;
uint32 KillTimer;
@@ -644,9 +668,7 @@ public:
void Reset() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- ShadowfuryTimer = 5000 + (rand32() % 15000);
- DarkstrikeTimer = 3000;
- KillTimer = 15000;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override { }
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
index 120d3a0b231..4b17f698553 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
@@ -116,7 +116,17 @@ public:
{
boss_felmystAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
+ uiBreathCount = 0;
+ breathX = 0.f;
+ breathY = 0.f;
+ }
+
+ void Initialize()
+ {
+ phase = PHASE_NONE;
+ uiFlightCount = 0;
}
InstanceScript* instance;
@@ -130,12 +140,10 @@ public:
void Reset() override
{
- phase = PHASE_NONE;
+ Initialize();
events.Reset();
- uiFlightCount = 0;
-
me->SetDisableGravity(true);
me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 10);
me->SetFloatValue(UNIT_FIELD_COMBATREACH, 10);
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
index b7e03fe0459..3284febb9f3 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
@@ -107,13 +107,30 @@ public:
{
boss_kalecgosAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
- SathGUID = 0;
- DoorGUID = 0;
bJustReset = false;
me->setActive(true);
}
+ void Initialize()
+ {
+ SathGUID = 0;
+ ArcaneBuffetTimer = 8000;
+ FrostBreathTimer = 15000;
+ WildMagicTimer = 10000;
+ TailLashTimer = 25000;
+ SpectralBlastTimer = urand(20000, 25000);
+ CheckTimer = 1000;
+ ResetTimer = 30000;
+
+ TalkTimer = 0;
+ TalkSequence = 0;
+ isFriendly = false;
+ isEnraged = false;
+ isBanished = false;
+ }
+
InstanceScript* instance;
uint32 ArcaneBuffetTimer;
@@ -132,7 +149,6 @@ public:
bool bJustReset;
uint64 SathGUID;
- uint64 DoorGUID;
void Reset() override
{
@@ -151,19 +167,6 @@ public:
me->SetStandState(UNIT_STAND_STATE_SLEEP);
}
me->SetFullHealth(); //dunno why it does not resets health at evade..
- ArcaneBuffetTimer = 8000;
- FrostBreathTimer = 15000;
- WildMagicTimer = 10000;
- TailLashTimer = 25000;
- SpectralBlastTimer = urand(20000, 25000);
- CheckTimer = 1000;
- ResetTimer = 30000;
-
- TalkTimer = 0;
- TalkSequence = 0;
- isFriendly = false;
- isEnraged = false;
- isBanished = false;
}
void EnterEvadeMode() override
@@ -459,13 +462,13 @@ public:
boss_kalecAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
+ SathGUID = 0;
}
- void Reset() override
+ void Initialize()
{
- SathGUID = instance->GetData64(DATA_SATHROVARR);
-
RevitalizeTimer = 5000;
HeroicStrikeTimer = 3000;
YellTimer = 5000;
@@ -474,6 +477,13 @@ public:
isEnraged = false;
}
+ void Reset() override
+ {
+ SathGUID = instance->GetData64(DATA_SATHROVARR);
+
+ Initialize();
+ }
+
void DamageTaken(Unit* done_by, uint32 &damage) override
{
if (done_by->GetGUID() != SathGUID)
@@ -581,11 +591,23 @@ public:
{
boss_sathrovarrAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
KalecGUID = 0;
KalecgosGUID = 0;
}
+ void Initialize()
+ {
+ ShadowBoltTimer = urand(7, 10) * 1000;
+ AgonyCurseTimer = 20000;
+ CorruptionStrikeTimer = 13000;
+ CheckTimer = 1000;
+ ResetThreat = 1000;
+ isEnraged = false;
+ isBanished = false;
+ }
+
InstanceScript* instance;
uint32 CorruptionStrikeTimer;
@@ -613,13 +635,7 @@ public:
KalecGUID = 0;
}
- ShadowBoltTimer = urand(7, 10) * 1000;
- AgonyCurseTimer = 20000;
- CorruptionStrikeTimer = 13000;
- CheckTimer = 1000;
- ResetThreat = 1000;
- isEnraged = false;
- isBanished = false;
+ Initialize();
me->CastSpell(me, AURA_DEMONIC_VISUAL, true);
TeleportAllPlayersBack();
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
index 1f66f834b28..5df2d683e21 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
@@ -243,17 +243,23 @@ public:
{
boss_kalecgos_kjAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ OrbsEmpowered = 0;
+ EmpowerCount = 0;
+ }
+
InstanceScript* instance;
uint8 OrbsEmpowered;
uint8 EmpowerCount;
void Reset() override
{
- OrbsEmpowered = 0;
- EmpowerCount = 0;
+ Initialize();
me->SetDisableGravity(true);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->setActive(true);
@@ -393,11 +399,21 @@ public:
{
npc_kiljaeden_controllerAI(Creature* creature) : ScriptedAI(creature), summons(me)
{
+ Initialize();
instance = creature->GetInstanceScript();
SetCombatMovement(false);
}
+ void Initialize()
+ {
+ phase = PHASE_DECEIVERS;
+ deceiverDeathCount = 0;
+ bSummonedDeceivers = false;
+ bKiljaedenDeath = false;
+ uiRandomSayTimer = 30000;
+ }
+
InstanceScript* instance;
SummonList summons;
@@ -419,14 +435,10 @@ public:
void Reset() override
{
- phase = PHASE_DECEIVERS;
+ Initialize();
if (Creature* pKalecKJ = ObjectAccessor::GetCreature((*me), instance->GetData64(DATA_KALECGOS_KJ)))
ENSURE_AI(boss_kalecgos_kj::boss_kalecgos_kjAI, pKalecKJ->AI())->ResetOrbs();
- deceiverDeathCount = 0;
- bSummonedDeceivers = false;
- bKiljaedenDeath = false;
- uiRandomSayTimer = 30000;
summons.DespawnAll();
}
@@ -489,11 +501,47 @@ public:
{
boss_kiljaedenAI(Creature* creature) : ScriptedAI(creature), summons(me)
{
+ Initialize();
instance = creature->GetInstanceScript();
SetCombatMovement(false);
}
+ void Initialize()
+ {
+ TimerIsDeactivated[TIMER_SPEECH] = false;
+ Timer[TIMER_SPEECH] = 0;
+
+ //Phase 2 Timer
+ Timer[TIMER_SOUL_FLAY] = 11000;
+ Timer[TIMER_LEGION_LIGHTNING] = 30000;
+ Timer[TIMER_FIRE_BLOOM] = 20000;
+ Timer[TIMER_SUMMON_SHILEDORB] = 35000;
+
+ //Phase 3 Timer
+ Timer[TIMER_SHADOW_SPIKE] = 4000;
+ Timer[TIMER_FLAME_DART] = 3000;
+ Timer[TIMER_DARKNESS] = 45000;
+ Timer[TIMER_ORBS_EMPOWER] = 35000;
+
+ //Phase 4 Timer
+ Timer[TIMER_ARMAGEDDON] = 2000;
+
+ ActiveTimers = 5;
+ WaitTimer = 0;
+ speechCount = 0;
+ SpeechTimer = 0;
+
+ Phase = PHASE_NORMAL;
+
+ IsInDarkness = false;
+ IsWaiting = false;
+ OrbActivated = false;
+ SpeechBegins = true;
+
+ ChangeTimers(false, 0);
+ }
+
InstanceScript* instance;
SummonList summons;
@@ -520,41 +568,12 @@ public:
void Reset() override
{
- TimerIsDeactivated[TIMER_SPEECH] = false;
- Timer[TIMER_SPEECH] = 0;
-
- //Phase 2 Timer
- Timer[TIMER_SOUL_FLAY] = 11000;
- Timer[TIMER_LEGION_LIGHTNING] = 30000;
- Timer[TIMER_FIRE_BLOOM] = 20000;
- Timer[TIMER_SUMMON_SHILEDORB] = 35000;
-
- //Phase 3 Timer
- Timer[TIMER_SHADOW_SPIKE] = 4000;
- Timer[TIMER_FLAME_DART] = 3000;
- Timer[TIMER_DARKNESS] = 45000;
- Timer[TIMER_ORBS_EMPOWER] = 35000;
-
- //Phase 4 Timer
- Timer[TIMER_ARMAGEDDON] = 2000;
-
- ActiveTimers = 5;
- WaitTimer = 0;
- speechCount = 0;
- SpeechTimer = 0;
-
- Phase = PHASE_NORMAL;
-
- IsInDarkness = false;
- IsWaiting = false;
- OrbActivated = false;
- SpeechBegins = true;
+ Initialize();
if (Creature* pKalec = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KALECGOS_KJ)))
pKalec->RemoveDynObject(SPELL_RING_OF_BLUE_FLAMES);
me->SetFloatValue(UNIT_FIELD_COMBATREACH, 12);
- ChangeTimers(false, 0);
summons.DespawnAll();
}
@@ -890,9 +909,17 @@ public:
{
npc_hand_of_the_deceiverAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ /// @todo Timers!
+ ShadowBoltVolleyTimer = urand(8000, 14000); // So they don't all cast it in the same moment.
+ FelfirePortalTimer = 20000;
+ }
+
InstanceScript* instance;
uint32 ShadowBoltVolleyTimer;
@@ -900,9 +927,7 @@ public:
void Reset() override
{
- /// @todo Timers!
- ShadowBoltVolleyTimer = urand(8000, 14000); // So they don't all cast it in the same moment.
- FelfirePortalTimer = 20000;
+ Initialize();
instance->SetBossState(DATA_KILJAEDEN, NOT_STARTED);
}
@@ -989,14 +1014,20 @@ public:
{
npc_felfire_portalAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
SetCombatMovement(false);
}
+ void Initialize()
+ {
+ uiSpawnFiendTimer = 5000;
+ }
+
uint32 uiSpawnFiendTimer;
void Reset() override
{
- uiSpawnFiendTimer = 5000;
+ Initialize();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_NON_ATTACKABLE);
}
@@ -1034,7 +1065,16 @@ public:
struct npc_volatile_felfire_fiendAI : public ScriptedAI
{
- npc_volatile_felfire_fiendAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_volatile_felfire_fiendAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ uiExplodeTimer = 2000;
+ bLockedTarget = false;
+ }
uint32 uiExplodeTimer;
@@ -1042,8 +1082,7 @@ public:
void Reset() override
{
- uiExplodeTimer = 2000;
- bLockedTarget = false;
+ Initialize();
}
void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
@@ -1093,16 +1132,22 @@ public:
{
npc_armageddonAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
SetCombatMovement(false);
}
+ void Initialize()
+ {
+ spell = 0;
+ uiTimer = 0;
+ }
+
uint8 spell;
uint32 uiTimer;
void Reset() override
{
- spell = 0;
- uiTimer = 0;
+ Initialize();
}
void UpdateAI(uint32 diff) override
@@ -1150,7 +1195,22 @@ public:
{
npc_shield_orbAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
+ x = 0.f;
+ y = 0.f;
+ }
+
+ void Initialize()
+ {
+ bPointReached = true;
+ uiTimer = urand(500, 1000);
+ uiCheckTimer = 1000;
+ r = 17;
+ c = 0;
+ mx = ShieldOrbLocations[0][0];
+ my = ShieldOrbLocations[0][1];
+ bClockwise = roll_chance_i(50);
}
InstanceScript* instance;
@@ -1164,14 +1224,7 @@ public:
void Reset() override
{
me->SetDisableGravity(true);
- bPointReached = true;
- uiTimer = urand(500, 1000);
- uiCheckTimer = 1000;
- r = 17;
- c = 0;
- mx = ShieldOrbLocations[0][0];
- my = ShieldOrbLocations[0][1];
- bClockwise = roll_chance_i(50);
+ Initialize();
}
void UpdateAI(uint32 diff) override
@@ -1235,12 +1288,12 @@ public:
struct npc_sinster_reflectionAI : public ScriptedAI
{
- npc_sinster_reflectionAI(Creature* creature) : ScriptedAI(creature) { }
-
- uint8 victimClass;
- uint32 uiTimer[3];
+ npc_sinster_reflectionAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
- void Reset() override
+ void Initialize()
{
uiTimer[0] = 0;
uiTimer[1] = 0;
@@ -1248,6 +1301,14 @@ public:
victimClass = 0;
}
+ uint8 victimClass;
+ uint32 uiTimer[3];
+
+ void Reset() override
+ {
+ Initialize();
+ }
+
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp
index f06dc247883..f82d71901ac 100644
--- a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp
+++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp
@@ -64,9 +64,21 @@ class boss_archaedas : public CreatureScript
{
boss_archaedasAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = me->GetInstanceScript();
}
+ void Initialize()
+ {
+ uiTremorTimer = 60000;
+ iAwakenTimer = 0;
+ uiWallMinionTimer = 10000;
+
+ bWakingUp = false;
+ bGuardiansAwake = false;
+ bVaultWalkersAwake = false;
+ }
+
uint32 uiTremorTimer;
int32 iAwakenTimer;
uint32 uiWallMinionTimer;
@@ -78,13 +90,7 @@ class boss_archaedas : public CreatureScript
void Reset() override
{
- uiTremorTimer = 60000;
- iAwakenTimer = 0;
- uiWallMinionTimer = 10000;
-
- bWakingUp = false;
- bGuardiansAwake = false;
- bVaultWalkersAwake = false;
+ Initialize();
instance->SetData(0, 5); // respawn any dead minions
me->setFaction(35);
@@ -224,9 +230,19 @@ class npc_archaedas_minions : public CreatureScript
{
npc_archaedas_minionsAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = me->GetInstanceScript();
}
+ void Initialize()
+ {
+ uiArcing_Timer = 3000;
+ iAwakenTimer = 0;
+
+ bWakingUp = false;
+ bAmIAwake = false;
+ }
+
uint32 uiArcing_Timer;
int32 iAwakenTimer;
bool bWakingUp;
@@ -236,11 +252,7 @@ class npc_archaedas_minions : public CreatureScript
void Reset() override
{
- uiArcing_Timer = 3000;
- iAwakenTimer = 0;
-
- bWakingUp = false;
- bAmIAwake = false;
+ Initialize();
me->setFaction(35);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp
index 13a475604a7..6062f01691c 100644
--- a/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp
+++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp
@@ -45,7 +45,17 @@ class boss_ironaya : public CreatureScript
struct boss_ironayaAI : public ScriptedAI
{
- boss_ironayaAI(Creature* creature) : ScriptedAI(creature) { }
+ boss_ironayaAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ uiArcingTimer = 3000;
+ bHasCastKnockaway = false;
+ bHasCastWstomp = false;
+ }
uint32 uiArcingTimer;
bool bHasCastWstomp;
@@ -53,9 +63,7 @@ class boss_ironaya : public CreatureScript
void Reset() override
{
- uiArcingTimer = 3000;
- bHasCastKnockaway = false;
- bHasCastWstomp = false;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp
index fdb71cbbf83..236cc55eee8 100644
--- a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp
+++ b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp
@@ -54,13 +54,21 @@ class npc_jadespine_basilisk : public CreatureScript
struct npc_jadespine_basiliskAI : public ScriptedAI
{
- npc_jadespine_basiliskAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_jadespine_basiliskAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ uiCslumberTimer = 2000;
+ }
uint32 uiCslumberTimer;
void Reset() override
{
- uiCslumberTimer = 2000;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp
index 4eaf98d0a0e..b42f09b009e 100644
--- a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp
@@ -55,12 +55,20 @@ public:
struct boss_twilight_corrupterAI : public ScriptedAI
{
- boss_twilight_corrupterAI(Creature* creature) : ScriptedAI(creature) { }
+ boss_twilight_corrupterAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ KillCount = 0;
+ }
void Reset() override
{
_events.Reset();
- KillCount = 0;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp
index 25ee8bc1702..24d370155a6 100644
--- a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp
@@ -56,15 +56,23 @@ public:
struct npc_converted_sentryAI : public ScriptedAI
{
- npc_converted_sentryAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_converted_sentryAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Credit = false;
+ Timer = 2500;
+ }
bool Credit;
uint32 Timer;
void Reset() override
{
- Credit = false;
- Timer = 2500;
+ Initialize();
}
void MoveInLineOfSight(Unit* /*who*/) override { }
diff --git a/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp b/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp
index b52cb9fa1bf..d1bb7ae3c6a 100644
--- a/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp
@@ -50,15 +50,21 @@ public:
{
npc_yennikuAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
bReset = false;
}
+ void Initialize()
+ {
+ Reset_Timer = 0;
+ }
+
uint32 Reset_Timer;
bool bReset;
void Reset() override
{
- Reset_Timer = 0;
+ Initialize();
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
}
diff --git a/src/server/scripts/EasternKingdoms/zone_undercity.cpp b/src/server/scripts/EasternKingdoms/zone_undercity.cpp
index 41e6bafd4a7..ea997c5563f 100644
--- a/src/server/scripts/EasternKingdoms/zone_undercity.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_undercity.cpp
@@ -99,7 +99,23 @@ public:
struct npc_lady_sylvanas_windrunnerAI : public ScriptedAI
{
- npc_lady_sylvanas_windrunnerAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_lady_sylvanas_windrunnerAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ LamentEventTimer = 5000;
+ LamentEvent = false;
+ targetGUID = 0;
+
+ FadeTimer = 30000;
+ SummonSkeletonTimer = 20000;
+ BlackArrowTimer = 15000;
+ ShotTimer = 8000;
+ MultiShotTimer = 10000;
+ }
uint32 LamentEventTimer;
bool LamentEvent;
@@ -113,15 +129,7 @@ public:
void Reset() override
{
- LamentEventTimer = 5000;
- LamentEvent = false;
- targetGUID = 0;
-
- FadeTimer = 30000;
- SummonSkeletonTimer = 20000;
- BlackArrowTimer = 15000;
- ShotTimer = 8000;
- MultiShotTimer = 10000;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override { }
@@ -231,7 +239,18 @@ public:
struct npc_highborne_lamenterAI : public ScriptedAI
{
- npc_highborne_lamenterAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_highborne_lamenterAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ EventMoveTimer = 10000;
+ EventCastTimer = 17500;
+ EventMove = true;
+ EventCast = true;
+ }
uint32 EventMoveTimer;
uint32 EventCastTimer;
@@ -240,10 +259,7 @@ public:
void Reset() override
{
- EventMoveTimer = 10000;
- EventCastTimer = 17500;
- EventMove = true;
- EventCast = true;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override { }
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h
index b2097c34b33..51c5a5221ea 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h
@@ -46,7 +46,8 @@ enum CreatureIds
NPC_THE_MAKER = 17381,
NPC_BROGGOK = 17380,
NPC_KELIDAN_THE_BREAKER = 17377,
- NPC_PRISONER = 17398
+ NPC_PRISONER = 17398,
+ NPC_BROGGOK_POISON_CLOUD = 17662
};
enum GameObjectIds
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
index 55e9801320f..880efd0cfaf 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
@@ -43,6 +43,13 @@ enum Spells
SPELL_POISON_CLOUD_PASSIVE = 30914
};
+enum Events
+{
+ EVENT_SLIME_SPRAY = 1,
+ EVENT_POISON_BOLT,
+ EVENT_POISON_CLOUD,
+};
+
class boss_broggok : public CreatureScript
{
public:
@@ -52,17 +59,9 @@ class boss_broggok : public CreatureScript
{
boss_broggokAI(Creature* creature) : BossAI(creature, DATA_BROGGOK) { }
- uint32 AcidSpray_Timer;
- uint32 PoisonSpawn_Timer;
- uint32 PoisonBolt_Timer;
- bool canAttack;
-
void Reset() override
{
_Reset();
- AcidSpray_Timer = 10000;
- PoisonSpawn_Timer = 5000;
- PoisonBolt_Timer = 7000;
DoAction(ACTION_RESET_BROGGOK);
}
@@ -72,44 +71,35 @@ class boss_broggok : public CreatureScript
Talk(SAY_AGGRO);
}
- void UpdateAI(uint32 diff) override
+ void JustSummoned(Creature* summoned) override
{
- if (!UpdateVictim())
- return;
-
- if (!canAttack)
- return;
-
- if (AcidSpray_Timer <= diff)
- {
- DoCastVictim(SPELL_SLIME_SPRAY);
- AcidSpray_Timer = 4000 + rand32() % 8000;
- }
- else
- AcidSpray_Timer -=diff;
-
- if (PoisonBolt_Timer <= diff)
+ if (summoned->GetEntry() == NPC_BROGGOK_POISON_CLOUD)
{
- DoCastVictim(SPELL_POISON_BOLT);
- PoisonBolt_Timer = 4000 + rand32() % 8000;
+ summoned->SetReactState(REACT_PASSIVE);
+ summoned->CastSpell(summoned, SPELL_POISON_CLOUD_PASSIVE, true);
+ summons.Summon(summoned);
}
- else
- PoisonBolt_Timer -=diff;
-
- if (PoisonSpawn_Timer <= diff)
- {
- DoCast(me, SPELL_POISON_CLOUD);
- PoisonSpawn_Timer = 20000;
- }
- else
- PoisonSpawn_Timer -=diff;
-
- DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) override
+ void ExecuteEvent(uint32 eventId) override
{
- _JustDied();
+ switch (eventId)
+ {
+ case EVENT_SLIME_SPRAY:
+ DoCastVictim(SPELL_SLIME_SPRAY);
+ events.ScheduleEvent(EVENT_SLIME_SPRAY, urand(4000, 12000));
+ break;
+ case EVENT_POISON_BOLT:
+ DoCastVictim(SPELL_POISON_BOLT);
+ events.ScheduleEvent(EVENT_POISON_BOLT, urand(4000, 12000));
+ break;
+ case EVENT_POISON_CLOUD:
+ DoCast(me, SPELL_POISON_CLOUD);
+ events.ScheduleEvent(EVENT_POISON_CLOUD, 20000);
+ break;
+ default:
+ break;
+ }
}
void DoAction(int32 action) override
@@ -122,12 +112,13 @@ class boss_broggok : public CreatureScript
case ACTION_ACTIVATE_BROGGOK:
me->SetReactState(REACT_AGGRESSIVE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
- canAttack = true;
+ events.ScheduleEvent(EVENT_SLIME_SPRAY, 10000);
+ events.ScheduleEvent(EVENT_POISON_BOLT, 7000);
+ events.ScheduleEvent(EVENT_POISON_CLOUD, 5000);
break;
case ACTION_RESET_BROGGOK:
me->SetReactState(REACT_PASSIVE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
- canAttack = false;
break;
}
}
@@ -140,33 +131,6 @@ class boss_broggok : public CreatureScript
}
};
-class npc_broggok_poison_cloud : public CreatureScript
-{
- public:
- npc_broggok_poison_cloud() : CreatureScript("npc_broggok_poison_cloud") { }
-
- struct npc_broggok_poison_cloudAI : public ScriptedAI
- {
- npc_broggok_poison_cloudAI(Creature* creature) : ScriptedAI(creature)
- {
- SetCombatMovement(false);
- creature->SetReactState(REACT_PASSIVE);
- }
-
- void IsSummonedBy(Unit* /*summoner*/) override
- {
- DoCast(me, SPELL_POISON_CLOUD_PASSIVE, true);
- }
-
- void UpdateAI(uint32 /*diff*/) override { }
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_broggok_poison_cloudAI(creature);
- }
-};
-
class go_broggok_lever : public GameObjectScript
{
public:
@@ -228,7 +192,6 @@ class spell_broggok_poison_cloud : public SpellScriptLoader
void AddSC_boss_broggok()
{
new boss_broggok();
- new npc_broggok_poison_cloud();
new go_broggok_lever();
new spell_broggok_poison_cloud();
}