aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp83
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp50
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp49
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp96
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp67
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp255
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp103
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp33
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp42
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp59
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp31
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp50
12 files changed, 541 insertions, 377 deletions
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp
index af62380ba0e..5546d56f84e 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp
@@ -15,13 +15,35 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+/*
+ * Timers requires to be revisited
+ */
+
#include "ScriptMgr.h"
#include "scholomance.h"
#include "ScriptedCreature.h"
+enum DarkreaverTexts
+{
+ SAY_SPAWN = 0
+};
+
enum DarkreaverSpells
{
- SUMMON_FALLEN_CHARGER = 23261
+ SPELL_SHADOW_BOLT = 17393,
+ SPELL_CLEAVE = 15284,
+ SPELL_BLOOD_LEECH = 22644,
+ SPELL_DOMINATE_MIND = 7645,
+
+ SPELL_SUMMON_FALLEN_CHARGER = 23261
+};
+
+enum DarkreaverEvents
+{
+ EVENT_SHADOW_BOLT = 1,
+ EVENT_CLEAVE,
+ EVENT_BLOOD_LEECH,
+ EVENT_DOMINATE_MIND
};
// 14516 - Death Knight Darkreaver
@@ -29,18 +51,73 @@ struct boss_death_knight_darkreaver : public ScriptedAI
{
boss_death_knight_darkreaver(Creature* creature) : ScriptedAI(creature) { }
+ void JustAppeared() override
+ {
+ Talk(SAY_SPAWN);
+ }
+
void Reset() override
{
+ _events.Reset();
+ }
+
+ void JustEngagedWith(Unit* /*who*/) override
+ {
+ _events.ScheduleEvent(EVENT_SHADOW_BOLT, 0s);
+ _events.ScheduleEvent(EVENT_CLEAVE, 5s, 10s);
+ _events.ScheduleEvent(EVENT_BLOOD_LEECH, 10s, 15s);
+ _events.ScheduleEvent(EVENT_DOMINATE_MIND, 10s, 15s);
}
void JustDied(Unit* /*killer*/) override
{
- DoCastSelf(SUMMON_FALLEN_CHARGER, true);
+ DoCastSelf(SPELL_SUMMON_FALLEN_CHARGER, true);
}
- void JustEngagedWith(Unit* /*who*/) override
+ void UpdateAI(uint32 diff) override
{
+ if (!UpdateVictim())
+ return;
+
+ _events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_SHADOW_BOLT:
+ DoCastVictim(SPELL_SHADOW_BOLT);
+ _events.Repeat(5s, 10s);
+ break;
+ case EVENT_CLEAVE:
+ DoCastVictim(SPELL_CLEAVE);
+ _events.Repeat(5s, 10s);
+ break;
+ case EVENT_BLOOD_LEECH:
+ DoCastSelf(SPELL_BLOOD_LEECH);
+ _events.Repeat(15s, 25s);
+ break;
+ case EVENT_DOMINATE_MIND:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1))
+ DoCast(target, SPELL_DOMINATE_MIND);
+ _events.Repeat(15s, 20s);
+ break;
+ default:
+ break;
+ }
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+ }
+
+ DoMeleeAttackIfReady();
}
+
+private:
+ EventMap _events;
};
void AddSC_boss_death_knight_darkreaver()
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp
index 74879b5dbd4..cc92c49594b 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp
@@ -15,13 +15,19 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+/*
+ * Timers requires to be revisited
+ */
+
#include "ScriptMgr.h"
#include "scholomance.h"
#include "ScriptedCreature.h"
+#include "SpellInfo.h"
enum TheolenTexts
{
- EMOTE_FRENZY_KILL = 0
+ SAY_AGGRO = 0,
+ EMOTE_FRENZY = 1
};
enum TheolenSpells
@@ -33,7 +39,7 @@ enum TheolenSpells
enum TheolenEvents
{
- EVENT_REND = 1,
+ EVENT_REND = 1,
EVENT_BACKHAND,
EVENT_FRENZY
};
@@ -41,14 +47,37 @@ enum TheolenEvents
// 11261 - Doctor Theolen Krastinov
struct boss_doctor_theolen_krastinov : public BossAI
{
- boss_doctor_theolen_krastinov(Creature* creature) : BossAI(creature, DATA_DOCTOR_THEOLEN_KRASTINOV) { }
+ boss_doctor_theolen_krastinov(Creature* creature) : BossAI(creature, DATA_DOCTOR_THEOLEN_KRASTINOV), _frenzied(false) { }
+
+ void Reset() override
+ {
+ _Reset();
+ _frenzied = false;
+ }
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_REND, 8s);
- events.ScheduleEvent(EVENT_BACKHAND, 9s);
- events.ScheduleEvent(EVENT_FRENZY, 1s);
+
+ Talk(SAY_AGGRO);
+
+ events.ScheduleEvent(EVENT_REND, 5s, 15s);
+ events.ScheduleEvent(EVENT_BACKHAND, 5s, 15s);
+ }
+
+ void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override
+ {
+ if (!_frenzied && me->HealthBelowPctDamaged(50, damage))
+ {
+ _frenzied = true;
+ events.ScheduleEvent(EVENT_FRENZY, 0s);
+ }
+ }
+
+ void OnSpellCast(SpellInfo const* spell) override
+ {
+ if (spell->Id == SPELL_FRENZY)
+ Talk(EMOTE_FRENZY);
}
void UpdateAI(uint32 diff) override
@@ -67,16 +96,14 @@ struct boss_doctor_theolen_krastinov : public BossAI
{
case EVENT_REND:
DoCastVictim(SPELL_REND);
- events.Repeat(10s);
+ events.Repeat(15s, 20s);
break;
case EVENT_BACKHAND:
DoCastVictim(SPELL_BACKHAND);
- events.Repeat(10s);
+ events.Repeat(10s, 20s);
break;
case EVENT_FRENZY:
DoCastSelf(SPELL_FRENZY);
- Talk(EMOTE_FRENZY_KILL);
- events.Repeat(120s);
break;
default:
break;
@@ -88,6 +115,9 @@ struct boss_doctor_theolen_krastinov : public BossAI
DoMeleeAttackIfReady();
}
+
+private:
+ bool _frenzied;
};
void AddSC_boss_theolenkrastinov()
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp
index b9b40ee9aae..4c609c239a5 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp
@@ -15,6 +15,10 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+/*
+ * Timers requires to be revisited
+ */
+
#include "ScriptMgr.h"
#include "scholomance.h"
#include "ScriptedCreature.h"
@@ -22,18 +26,19 @@
enum IlluciaSpells
{
SPELL_CURSE_OF_AGONY = 18671,
- SPELL_DOMINATE = 7645, // UNUSED YET added for documentation
+ SPELL_DOMINATE_MIND = 14515,
SPELL_FEAR = 12542,
- SPELL_SHADOW_SHOCK = 17234,
+ SPELL_SHADOW_SHOCK = 17289,
SPELL_SILENCE = 12528
};
enum IlluciaEvents
{
- EVENT_CURSE_OF_AGONY = 1,
+ EVENT_CURSE_OF_AGONY = 1,
+ EVENT_DOMINATE_MIND,
+ EVENT_FEAR,
EVENT_SHADOW_SHOCK,
- EVENT_SILENCE,
- EVENT_FEAR
+ EVENT_SILENCE
};
// 10502 - Lady Illucia Barov
@@ -44,10 +49,12 @@ struct boss_illucia_barov : public BossAI
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_CURSE_OF_AGONY, 18s);
- events.ScheduleEvent(EVENT_SHADOW_SHOCK, 9s);
- events.ScheduleEvent(EVENT_SILENCE, 5s);
- events.ScheduleEvent(EVENT_FEAR, 30s);
+
+ events.ScheduleEvent(EVENT_CURSE_OF_AGONY, 10s, 20s);
+ events.ScheduleEvent(EVENT_DOMINATE_MIND, 15s, 25s);
+ events.ScheduleEvent(EVENT_FEAR, 15s, 30s);
+ events.ScheduleEvent(EVENT_SHADOW_SHOCK, 10s, 15s);
+ events.ScheduleEvent(EVENT_SILENCE, 10s, 15s);
}
void UpdateAI(uint32 diff) override
@@ -65,20 +72,26 @@ struct boss_illucia_barov : public BossAI
switch (eventId)
{
case EVENT_CURSE_OF_AGONY:
- DoCastVictim(SPELL_CURSE_OF_AGONY);
- events.Repeat(30s);
+ DoCastSelf(SPELL_CURSE_OF_AGONY);
+ events.Repeat(20s, 30s);
+ break;
+ case EVENT_DOMINATE_MIND:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1))
+ DoCast(target, SPELL_DOMINATE_MIND);
+ events.Repeat(25s, 40s);
+ break;
+ case EVENT_FEAR:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
+ DoCast(target, SPELL_FEAR);
+ events.Repeat(15s, 25s);
break;
case EVENT_SHADOW_SHOCK:
- DoCast(SelectTarget(SelectTargetMethod::Random, 0, 100, true), SPELL_SHADOW_SHOCK);
- events.Repeat(12s);
+ DoCastVictim(SPELL_SHADOW_SHOCK);
+ events.Repeat(10s, 15s);
break;
case EVENT_SILENCE:
DoCastSelf(SPELL_SILENCE);
- events.Repeat(14s);
- break;
- case EVENT_FEAR:
- DoCastVictim(SPELL_FEAR);
- events.Repeat(30s);
+ events.Repeat(20s, 30s);
break;
default:
break;
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
index df70433bfeb..547883b4ddf 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
@@ -15,6 +15,10 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+/*
+ * Timers requires to be revisited
+ */
+
#include "ScriptMgr.h"
#include "scholomance.h"
#include "ScriptedCreature.h"
@@ -22,52 +26,38 @@
enum MaliciaSpells
{
SPELL_CALL_OF_GRAVES = 17831,
- SPELL_CORRUPTION = 11672,
- SPELL_FLASH_HEAL = 10917,
- SPELL_RENEW = 10929,
- SPELL_HEALING_TOUCH = 9889
+ SPELL_CORRUPTION = 18376,
+ SPELL_SLOW = 13747,
+ SPELL_FLASH_HEAL = 17843,
+ SPELL_HEAL = 15586,
+ SPELL_RENEW = 8362
};
enum MaliciaEvents
{
- EVENT_CALL_OF_GRAVES = 1,
+ EVENT_CALL_OF_GRAVES = 1,
EVENT_CORRUPTION,
+ EVENT_SLOW,
EVENT_FLASH_HEAL,
- EVENT_RENEW,
- EVENT_HEALING_TOUCH
+ EVENT_HEAL,
+ EVENT_RENEW
};
// 10505 - Instructor Malicia
struct boss_instructor_malicia : public BossAI
{
- boss_instructor_malicia(Creature* creature) : BossAI(creature, DATA_INSTRUCTOR_MALICIA)
- {
- Initialize();
- }
-
- void Initialize()
- {
- FlashCounter = 0;
- TouchCounter = 0;
- }
-
- uint32 FlashCounter;
- uint32 TouchCounter;
-
- void Reset() override
- {
- _Reset();
- Initialize();
- }
+ boss_instructor_malicia(Creature* creature) : BossAI(creature, DATA_INSTRUCTOR_MALICIA) { }
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_CALL_OF_GRAVES, 4s);
- events.ScheduleEvent(EVENT_CORRUPTION, 8s);
- events.ScheduleEvent(EVENT_RENEW, 32s);
- events.ScheduleEvent(EVENT_FLASH_HEAL, 38s);
- events.ScheduleEvent(EVENT_HEALING_TOUCH, 45s);
+
+ events.ScheduleEvent(EVENT_CALL_OF_GRAVES, 20s, 30s);
+ events.ScheduleEvent(EVENT_CORRUPTION, 10s, 15s);
+ events.ScheduleEvent(EVENT_SLOW, 5s, 10s);
+ events.ScheduleEvent(EVENT_FLASH_HEAL, 5s, 10s);
+ events.ScheduleEvent(EVENT_HEAL, 5s, 15s);
+ events.ScheduleEvent(EVENT_RENEW, 15s, 20s);
}
void UpdateAI(uint32 diff) override
@@ -86,43 +76,27 @@ struct boss_instructor_malicia : public BossAI
{
case EVENT_CALL_OF_GRAVES:
DoCastSelf(SPELL_CALL_OF_GRAVES);
- events.Repeat(65s);
+ events.Repeat(30s, 40s);
break;
case EVENT_CORRUPTION:
- DoCast(SelectTarget(SelectTargetMethod::Random, 0, 100, true), SPELL_CORRUPTION);
- events.Repeat(24s);
+ DoCastSelf(SPELL_CORRUPTION);
+ events.Repeat(30s, 40s);
break;
- case EVENT_RENEW:
- DoCastSelf(SPELL_RENEW);
- events.Repeat(10s);
+ case EVENT_SLOW:
+ DoCastSelf(SPELL_SLOW);
+ events.Repeat(15s, 25s);
break;
case EVENT_FLASH_HEAL:
- // 5 Flash Heal will be cast
DoCastSelf(SPELL_FLASH_HEAL);
- if (FlashCounter < 2)
- {
- events.ScheduleEvent(EVENT_FLASH_HEAL, 5s);
- ++FlashCounter;
- }
- else
- {
- FlashCounter=0;
- events.ScheduleEvent(EVENT_FLASH_HEAL, 30s);
- }
+ events.Repeat(10s, 15s);
+ break;
+ case EVENT_HEAL:
+ DoCastSelf(SPELL_HEAL);
+ events.Repeat(20s, 30s);
break;
- case EVENT_HEALING_TOUCH:
- // 3 Healing Touch will be cast
- DoCastSelf(SPELL_HEALING_TOUCH);
- if (TouchCounter < 2)
- {
- events.ScheduleEvent(EVENT_HEALING_TOUCH, 5500ms);
- ++TouchCounter;
- }
- else
- {
- TouchCounter=0;
- events.ScheduleEvent(EVENT_HEALING_TOUCH, 30s);
- }
+ case EVENT_RENEW:
+ DoCastSelf(SPELL_RENEW);
+ events.Repeat(15s, 20s);
break;
default:
break;
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
index 32f7e0cd2cb..982c2e118a1 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
@@ -15,55 +15,57 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+/*
+ * Timers requires to be revisited
+ */
+
#include "ScriptMgr.h"
#include "scholomance.h"
#include "ScriptedCreature.h"
+enum JandiceTexts
+{
+ EMOTE_DROP_JOURNAL = 0
+};
+
enum JandiceSpells
{
- SPELL_CURSE_OF_BLOOD = 24673,
- SPELL_ILLUSION = 17773,
+ SPELL_CURSE_OF_BLOOD = 16098,
+ SPELL_BANISH = 8994,
+ SPELL_SUMMON_ILLUSION = 17773,
+ SPELL_SPREAD = 17774,
+
SPELL_DROP_JOURNAL = 26096
};
enum JandiceEvents
{
- EVENT_CURSE_OF_BLOOD = 1,
- EVENT_ILLUSION,
- EVENT_CLEAVE,
- EVENT_SET_VISIBILITY
+ EVENT_CURSE_OF_BLOOD = 1,
+ EVENT_BANISH,
+ EVENT_SUMMON_ILLUSION
};
// 10503 - Jandice Barov
struct boss_jandice_barov : public ScriptedAI
{
- boss_jandice_barov(Creature* creature) : ScriptedAI(creature), _summons(me) { }
+ boss_jandice_barov(Creature* creature) : ScriptedAI(creature) { }
void Reset() override
{
_events.Reset();
- _summons.DespawnAll();
- }
-
- void JustSummoned(Creature* summoned) override
- {
- // Illusions should attack a random target.
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
- summoned->AI()->AttackStart(target);
-
- _summons.Summon(summoned);
}
void JustEngagedWith(Unit* /*who*/) override
{
- _events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, 15s);
- _events.ScheduleEvent(EVENT_ILLUSION, 30s);
+ _events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, 5s, 10s);
+ _events.ScheduleEvent(EVENT_BANISH, 10s, 15s);
+ _events.ScheduleEvent(EVENT_SUMMON_ILLUSION, 15s, 25s);
}
void JustDied(Unit* /*killer*/) override
{
- _summons.DespawnAll();
- DoCastSelf(SPELL_DROP_JOURNAL, true);
+ DoCastSelf(SPELL_DROP_JOURNAL);
+ Talk(EMOTE_DROP_JOURNAL);
}
void UpdateAI(uint32 diff) override
@@ -81,20 +83,18 @@ struct boss_jandice_barov : public ScriptedAI
switch (eventId)
{
case EVENT_CURSE_OF_BLOOD:
- DoCastVictim(SPELL_CURSE_OF_BLOOD);
- _events.Repeat(30s);
+ DoCastSelf(SPELL_CURSE_OF_BLOOD);
+ _events.Repeat(25s, 30s);
break;
- case EVENT_ILLUSION:
- DoCast(SPELL_ILLUSION);
- me->SetUnitFlag(UNIT_FLAG_UNINTERACTIBLE);
- me->SetDisplayId(11686); // Invisible Model
- ModifyThreatByPercent(me->GetVictim(), -99);
- _events.ScheduleEvent(EVENT_SET_VISIBILITY, 3s);
- _events.Repeat(25s);
+ case EVENT_BANISH:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
+ DoCast(target, SPELL_BANISH);
+ _events.Repeat(15s, 25s);
break;
- case EVENT_SET_VISIBILITY:
- me->RemoveUnitFlag(UNIT_FLAG_UNINTERACTIBLE);
- me->SetDisplayId(11073); // Jandice Model
+ case EVENT_SUMMON_ILLUSION:
+ DoCastSelf(SPELL_SUMMON_ILLUSION);
+ DoCastSelf(SPELL_SPREAD);
+ _events.Repeat(30s, 40s);
break;
default:
break;
@@ -109,7 +109,6 @@ struct boss_jandice_barov : public ScriptedAI
private:
EventMap _events;
- SummonList _summons;
};
void AddSC_boss_jandicebarov()
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
index 7e2640da7c3..14ee3c36f3d 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
@@ -15,6 +15,10 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+/*
+ * Timers requires to be revisited
+ */
+
#include "ScriptMgr.h"
#include "GameObject.h"
#include "GameObjectAI.h"
@@ -28,7 +32,7 @@
enum KirtonosTexts
{
- EMOTE_SUMMONED = 0
+ EMOTE_SUMMONED = 0
};
enum KirtonosSpells
@@ -37,160 +41,146 @@ enum KirtonosSpells
SPELL_WING_FLAP = 12882,
SPELL_PIERCE_ARMOR = 6016,
SPELL_DISARM = 8379,
- SPELL_KIRTONOS_TRANSFORM = 16467,
- SPELL_SHADOW_BOLT = 17228,
+ SPELL_SHADOW_BOLT_VOLLEY = 17228,
SPELL_CURSE_OF_TONGUES = 12889,
- SPELL_DOMINATE_MIND = 14515
+ SPELL_DOMINATE_MIND = 14515,
+ SPELL_KIRTONOS_TRANSFORM = 16467
};
enum KirtonosEvents
{
- INTRO_1 = 1,
- INTRO_2 = 2,
- INTRO_3 = 3,
- INTRO_4 = 4,
- INTRO_5 = 5,
- INTRO_6 = 6,
- EVENT_SWOOP = 7,
- EVENT_WING_FLAP = 8,
- EVENT_PIERCE_ARMOR = 9,
- EVENT_DISARM = 10,
- EVENT_SHADOW_BOLT = 11,
- EVENT_CURSE_OF_TONGUES = 12,
- EVENT_DOMINATE_MIND = 13,
- EVENT_KIRTONOS_TRANSFORM = 14
+ EVENT_SWOOP = 1,
+ EVENT_WING_FLAP,
+ EVENT_PIERCE_ARMOR,
+ EVENT_DISARM,
+ EVENT_SHADOW_BOLT_VOLLEY,
+ EVENT_CURSE_OF_TONGUES,
+ EVENT_DOMINATE_MIND,
+ EVENT_KIRTONOS_TRANSFORM,
+
+ EVENT_INTRO_1,
+ EVENT_INTRO_2,
+ EVENT_INTRO_3,
+ EVENT_INTRO_4,
+ EVENT_INTRO_5
};
enum KirtonosMisc
{
- WEAPON_KIRTONOS_STAFF = 11365,
- POINT_KIRTONOS_LAND = 13,
- KIRTONOS_PATH = 105061
+ EQUIP_ID_STAFF = 11365,
+ POINT_LANDING = 13,
+ POINT_STAIRS_UP = 0,
+ POINT_STAIRS_DOWN = 1,
+ PATH_INTRO = 105061,
+ NPC_KIRTONOS = 10506,
+ SOUND_SCREECH = 557
};
-Position const PosMove[2] =
-{
- { 299.4884f, 92.76137f, 105.6335f, 0.0f },
- { 314.8673f, 90.30210f, 101.6459f, 0.0f }
-};
+Position const SpawnPosition = { 315.0280f, 70.53845f, 102.1496f, 0.3859715f };
+Position const MovePosition1 = { 299.4884f, 92.76137f, 105.6335f, 0.0f };
+Position const MovePosition2 = { 314.8673f, 90.30210f, 101.6459f, 0.0f };
// 10506 - Kirtonos the Herald
struct boss_kirtonos_the_herald : public BossAI
{
boss_kirtonos_the_herald(Creature* creature) : BossAI(creature, DATA_KIRTONOS) { }
- void Reset() override
+ void JustAppeared() override
{
- _Reset();
+ events.ScheduleEvent(EVENT_INTRO_1, 0s);
+ me->SetDisableGravity(true);
}
void JustEngagedWith(Unit* who) override
{
- events.ScheduleEvent(EVENT_SWOOP, 8s, 8s);
- events.ScheduleEvent(EVENT_WING_FLAP, 15s, 15s);
- events.ScheduleEvent(EVENT_PIERCE_ARMOR, 18s, 18s);
- events.ScheduleEvent(EVENT_DISARM, 22s, 22s);
- events.ScheduleEvent(EVENT_SHADOW_BOLT, 42s, 42s);
- events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, 53s, 53s);
- events.ScheduleEvent(EVENT_DOMINATE_MIND, 34s, 48s);
- events.ScheduleEvent(EVENT_KIRTONOS_TRANSFORM, 20s, 20s);
BossAI::JustEngagedWith(who);
+
+ // Abilities he uses doesn't depend on form
+ events.ScheduleEvent(EVENT_SWOOP, 15s, 20s);
+ events.ScheduleEvent(EVENT_WING_FLAP, 10s, 20s);
+ events.ScheduleEvent(EVENT_PIERCE_ARMOR, 10s, 30s);
+ events.ScheduleEvent(EVENT_DISARM, 10s, 25s);
+ events.ScheduleEvent(EVENT_SHADOW_BOLT_VOLLEY, 40s, 50s);
+ events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, 50s, 60s);
+ events.ScheduleEvent(EVENT_DOMINATE_MIND, 60s);
+ events.ScheduleEvent(EVENT_KIRTONOS_TRANSFORM, 18s);
}
- void JustDied(Unit* /*killer*/) override
+ void MovementInform(uint32 type, uint32 pointId) override
{
- if (GameObject* gate = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GATE_KIRTONOS)))
- gate->SetGoState(GO_STATE_ACTIVE);
- if (GameObject* brazier = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_BRAZIER_OF_THE_HERALD)))
- {
- brazier->ResetDoorOrButton();
- brazier->SetGoState(GO_STATE_READY);
- }
- _JustDied();
+ if (type == WAYPOINT_MOTION_TYPE && pointId == POINT_LANDING)
+ events.ScheduleEvent(EVENT_INTRO_2, 0s);
+
+ if (type == POINT_MOTION_TYPE && pointId == POINT_STAIRS_UP)
+ events.ScheduleEvent(EVENT_INTRO_3, 2s);
}
void EnterEvadeMode(EvadeReason /*why*/) override
{
if (GameObject* gate = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GATE_KIRTONOS)))
gate->SetGoState(GO_STATE_ACTIVE);
- if (GameObject* brazier = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_BRAZIER_OF_THE_HERALD)))
- {
- brazier->ResetDoorOrButton();
- brazier->SetGoState(GO_STATE_READY);
- }
- me->DespawnOrUnsummon(5s);
- }
- void IsSummonedBy(WorldObject* /*summoner*/) override
- {
- events.ScheduleEvent(INTRO_1, 500ms);
- me->SetDisableGravity(true);
- me->SetReactState(REACT_PASSIVE);
- me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_UNINTERACTIBLE);
- Talk(EMOTE_SUMMONED);
+ me->DespawnOrUnsummon();
}
- void JustSummoned(Creature* summon) override
+ void JustDied(Unit* /*killer*/) override
{
- BossAI::JustSummoned(summon);
- }
+ if (GameObject* gate = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GATE_KIRTONOS)))
+ gate->SetGoState(GO_STATE_ACTIVE);
- void MovementInform(uint32 type, uint32 id) override
- {
- if (type == WAYPOINT_MOTION_TYPE && id == POINT_KIRTONOS_LAND)
- events.ScheduleEvent(INTRO_2, 1500ms);
+ _JustDied();
}
- void UpdateAI(uint32 diff) override
+ void UpdateIntroEvents(uint32 diff)
{
events.Update(diff);
- if (!UpdateVictim())
+ while (uint32 eventId = events.ExecuteEvent())
{
- while (uint32 eventId = events.ExecuteEvent())
+ switch (eventId)
{
- switch (eventId)
- {
- case INTRO_1:
- me->GetMotionMaster()->MovePath(KIRTONOS_PATH, false);
- break;
- case INTRO_2:
- me->GetMotionMaster()->MovePoint(0, PosMove[0]);
- events.ScheduleEvent(INTRO_3, 1s);
- break;
- case INTRO_3:
- if (GameObject* gate = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GATE_KIRTONOS)))
- gate->SetGoState(GO_STATE_READY);
- me->SetFacingTo(0.01745329f);
- events.ScheduleEvent(INTRO_4, 3s);
- break;
- case INTRO_4:
- if (GameObject* brazier = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_BRAZIER_OF_THE_HERALD)))
- brazier->SetGoState(GO_STATE_READY);
- me->SetWalk(true);
- me->SetDisableGravity(false);
- DoCast(me, SPELL_KIRTONOS_TRANSFORM);
- me->SetCanFly(false);
- events.ScheduleEvent(INTRO_5, 1s);
- break;
- case INTRO_5:
- me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
- me->SetVirtualItem(0, uint32(WEAPON_KIRTONOS_STAFF));
- me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_UNINTERACTIBLE);
- me->SetReactState(REACT_AGGRESSIVE);
- events.ScheduleEvent(INTRO_6, 5s);
- break;
- case INTRO_6:
- me->GetMotionMaster()->MovePoint(0, PosMove[1]);
- break;
- default:
- break;
- }
+ case EVENT_INTRO_1:
+ Talk(EMOTE_SUMMONED);
+ me->GetMotionMaster()->MovePath(PATH_INTRO, false);
+ break;
+ case EVENT_INTRO_2:
+ me->GetMotionMaster()->MovePoint(POINT_STAIRS_UP, MovePosition1, true, 0.01745329f);
+ if (GameObject* gate = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GATE_KIRTONOS)))
+ gate->SetGoState(GO_STATE_READY);
+ break;
+ case EVENT_INTRO_3:
+ me->SetDisableGravity(false);
+ DoCastSelf(SPELL_KIRTONOS_TRANSFORM);
+ events.ScheduleEvent(EVENT_INTRO_4, 1s);
+ break;
+ case EVENT_INTRO_4:
+ me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
+ SetEquipmentSlots(false, EQUIP_ID_STAFF);
+ me->SetImmuneToAll(false);
+ if (GameObject* brazier = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_BRAZIER_OF_THE_HERALD)))
+ brazier->SetGoState(GO_STATE_READY);
+ events.ScheduleEvent(EVENT_INTRO_5, 5s);
+ break;
+ case EVENT_INTRO_5:
+ me->SetWalk(true);
+ me->GetMotionMaster()->MovePoint(POINT_STAIRS_DOWN, MovePosition2);
+ break;
+ default:
+ break;
}
+ }
+ }
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ {
+ UpdateIntroEvents(diff);
return;
}
+ events.Update(diff);
+
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
@@ -199,47 +189,48 @@ struct boss_kirtonos_the_herald : public BossAI
switch (eventId)
{
case EVENT_SWOOP:
- DoCastVictim(SPELL_SWOOP);
- events.Repeat(15s);
+ DoCastSelf(SPELL_SWOOP);
+ events.Repeat(10s, 15s);
break;
case EVENT_WING_FLAP:
DoCastSelf(SPELL_WING_FLAP);
- events.Repeat(13s);
+ events.Repeat(15s);
break;
case EVENT_PIERCE_ARMOR:
DoCastVictim(SPELL_PIERCE_ARMOR);
- events.Repeat(12s);
+ events.Repeat(45s, 60s);
break;
case EVENT_DISARM:
DoCastVictim(SPELL_DISARM);
- events.Repeat(11s);
+ events.Repeat(10s, 20s);
break;
- case EVENT_SHADOW_BOLT:
- DoCastVictim(SPELL_SHADOW_BOLT);
- events.Repeat(42s);
+ case EVENT_SHADOW_BOLT_VOLLEY:
+ DoCastSelf(SPELL_SHADOW_BOLT_VOLLEY);
+ events.Repeat(3s, 7s);
break;
case EVENT_CURSE_OF_TONGUES:
- DoCastVictim(SPELL_CURSE_OF_TONGUES);
- events.Repeat(35s);
+ DoCastSelf(SPELL_CURSE_OF_TONGUES);
+ events.Repeat(30s, 50s);
break;
case EVENT_DOMINATE_MIND:
- DoCastVictim(SPELL_DOMINATE_MIND);
- events.Repeat(44s, 48s);
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1))
+ DoCast(target, SPELL_DOMINATE_MIND);
+ events.Repeat(30s, 50s);
break;
case EVENT_KIRTONOS_TRANSFORM:
if (me->HasAura(SPELL_KIRTONOS_TRANSFORM))
{
+ // This is how it works...
+ DoCastSelf(SPELL_KIRTONOS_TRANSFORM);
me->RemoveAura(SPELL_KIRTONOS_TRANSFORM);
- me->SetVirtualItem(0, uint32(0));
- me->SetCanFly(false);
+ SetEquipmentSlots(true);
}
else
{
- DoCast(me, SPELL_KIRTONOS_TRANSFORM);
- me->SetVirtualItem(0, uint32(WEAPON_KIRTONOS_STAFF));
- me->SetCanFly(true);
+ DoCastSelf(SPELL_KIRTONOS_TRANSFORM);
+ SetEquipmentSlots(false, EQUIP_ID_STAFF);
}
- events.Repeat(16s, 18s);
+ events.Repeat(20s, 30s);
break;
default:
break;
@@ -253,17 +244,7 @@ struct boss_kirtonos_the_herald : public BossAI
}
};
-enum Brazier_Of_The_Herald
-{
- NPC_KIRTONOS = 10506,
- SOUND_SCREECH = 557
-};
-
-Position const PosSummon[1] =
-{
- { 315.028f, 70.53845f, 102.1496f, 0.3859715f }
-};
-
+// 175564 - Brazier of the Herald
struct go_brazier_of_the_herald : public GameObjectAI
{
go_brazier_of_the_herald(GameObject* go) : GameObjectAI(go) { }
@@ -271,8 +252,8 @@ struct go_brazier_of_the_herald : public GameObjectAI
bool OnGossipHello(Player* player) override
{
me->UseDoorOrButton();
- me->PlayDirectSound(SOUND_SCREECH, 0);
- player->SummonCreature(NPC_KIRTONOS, PosSummon[0], TEMPSUMMON_DEAD_DESPAWN, 15min);
+ me->PlayDirectSound(SOUND_SCREECH);
+ player->SummonCreature(NPC_KIRTONOS, SpawnPosition, TEMPSUMMON_MANUAL_DESPAWN);
return true;
}
};
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp
index e9f35b087fb..55665ca7582 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp
@@ -15,23 +15,40 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+/*
+ * Timers requires to be revisited
+ */
+
#include "ScriptMgr.h"
#include "scholomance.h"
#include "ScriptedCreature.h"
+#include "SpellInfo.h"
#include "SpellScript.h"
+enum KormokTexts
+{
+ SAY_SPAWN = 0,
+ SAY_AGGRO = 1,
+ SAY_DEATH = 2,
+ EMOTE_FRENZY = 3
+};
+
enum KormokSpells
{
- SPELL_SHADOWBOLT_VOLLEY = 20741,
+ // Combat
+ SPELL_SHADOW_BOLT_VOLLEY = 17228,
SPELL_BONE_SHIELD = 27688,
-
+ SPELL_BLOODLUST = 27689,
SPELL_SUMMON_BONE_MAGES = 27695,
+ SPELL_SUMMON_BONE_MINIONS = 27687,
+ SPELL_FRENZY = 8269,
+
+ // Scripts
SPELL_SUMMON_BONE_MAGE_FRONT_LEFT = 27696,
SPELL_SUMMON_BONE_MAGE_FRONT_RIGHT = 27697,
SPELL_SUMMON_BONE_MAGE_BACK_RIGHT = 27698,
SPELL_SUMMON_BONE_MAGE_BACK_LEFT = 27699,
- SPELL_SUMMON_BONE_MINIONS = 27687,
SPELL_SUMMON_BONE_MINION_FRONT = 27690,
SPELL_SUMMON_BONE_MINION_BACK = 27691,
SPELL_SUMMON_BONE_MINION_LEFT = 27692,
@@ -40,34 +57,94 @@ enum KormokSpells
enum KormokEvents
{
- EVENT_SHADOWBOLT_VOLLEY = 1,
+ // Combat
+ EVENT_SHADOWBOLT_VOLLEY = 1,
EVENT_BONE_SHIELD,
+ EVENT_BLOODLUST,
EVENT_SUMMON_MAGES,
- EVENT_SUMMON_MINIONS
+ EVENT_SUMMON_MINIONS,
+ EVENT_FRENZY,
+
+ // Intro
+ EVENT_INTRO_1,
+ EVENT_INTRO_2,
+ EVENT_INTRO_3
};
// 16118 - Kormok
struct boss_kormok : public ScriptedAI
{
- boss_kormok(Creature* creature) : ScriptedAI(creature) { }
+ boss_kormok(Creature* creature) : ScriptedAI(creature), _frenzied(false) { }
+
+ void JustAppeared() override
+ {
+ _events.ScheduleEvent(EVENT_INTRO_1, 0s);
+ }
void Reset() override
{
_events.Reset();
+ _frenzied = false;
}
void JustEngagedWith(Unit* /*who*/) override
{
- _events.ScheduleEvent(EVENT_SHADOWBOLT_VOLLEY, 10s);
+ Talk(SAY_AGGRO);
+
+ _events.ScheduleEvent(EVENT_SHADOWBOLT_VOLLEY, 10s, 15s);
_events.ScheduleEvent(EVENT_BONE_SHIELD, 2s);
+ _events.ScheduleEvent(EVENT_BLOODLUST, 20s, 30s);
_events.ScheduleEvent(EVENT_SUMMON_MAGES, 10s, 15s);
_events.ScheduleEvent(EVENT_SUMMON_MINIONS, 5s, 10s);
}
+ void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override
+ {
+ if (!_frenzied && me->HealthBelowPctDamaged(20, damage))
+ {
+ _frenzied = true;
+ _events.ScheduleEvent(EVENT_FRENZY, 0s);
+ }
+ }
+
+ void OnSpellCast(SpellInfo const* spell) override
+ {
+ if (spell->Id == SPELL_FRENZY)
+ Talk(EMOTE_FRENZY);
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ Talk(SAY_DEATH);
+ }
+
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
+ {
+ _events.Update(diff);
+
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_INTRO_1:
+ me->SetImmuneToPC(true);
+ _events.ScheduleEvent(EVENT_INTRO_2, 2s);
+ break;
+ case EVENT_INTRO_2:
+ Talk(SAY_SPAWN);
+ _events.ScheduleEvent(EVENT_INTRO_3, 5s);
+ break;
+ case EVENT_INTRO_3:
+ me->SetImmuneToPC(false);
+ break;
+ default:
+ break;
+ }
+ }
return;
+ }
_events.Update(diff);
@@ -79,13 +156,17 @@ struct boss_kormok : public ScriptedAI
switch (eventId)
{
case EVENT_SHADOWBOLT_VOLLEY:
- DoCastSelf(SPELL_SHADOWBOLT_VOLLEY);
- _events.Repeat(15s);
+ DoCastSelf(SPELL_SHADOW_BOLT_VOLLEY);
+ _events.Repeat(15s, 20s);
break;
case EVENT_BONE_SHIELD:
DoCastSelf(SPELL_BONE_SHIELD);
_events.Repeat(45s);
break;
+ case EVENT_BLOODLUST:
+ DoCastSelf(SPELL_BLOODLUST);
+ _events.Repeat(30s, 40s);
+ break;
case EVENT_SUMMON_MAGES:
DoCastSelf(SPELL_SUMMON_BONE_MAGES);
_events.Repeat(10s, 15s);
@@ -94,6 +175,9 @@ struct boss_kormok : public ScriptedAI
DoCastSelf(SPELL_SUMMON_BONE_MINIONS);
_events.Repeat(20s, 25s);
break;
+ case EVENT_FRENZY:
+ DoCastSelf(SPELL_FRENZY);
+ break;
default:
break;
}
@@ -106,6 +190,7 @@ struct boss_kormok : public ScriptedAI
}
private:
+ bool _frenzied;
EventMap _events;
};
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp
index bd678b8e71a..f44e64c7e1d 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp
@@ -15,21 +15,28 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "scholomance.h"
+/*
+ * Timers requires to be revisited
+ */
+
#include "ScriptMgr.h"
+#include "scholomance.h"
#include "ScriptedCreature.h"
enum AlexeiSpells
{
- SPELL_IMMOLATE = 20294,
- SPELL_VEIL_OF_SHADOW = 17820,
- SPELL_UNHOLY_AURA = 17467
+ // Passive
+ SPELL_IMMOLATE = 15506,
+ SPELL_UNHOLY_AURA = 17467,
+
+ // Combat
+ SPELL_VEIL_OF_SHADOW = 17820
+
};
enum AlexeiEvents
{
- EVENT_IMMOLATE = 1,
- EVENT_VEIL_OF_SHADOW
+ EVENT_VEIL_OF_SHADOW = 1
};
// 10504 - Lord Alexei Barov
@@ -41,15 +48,15 @@ struct boss_lord_alexei_barov : public BossAI
{
_Reset();
- if (!me->HasAura(SPELL_UNHOLY_AURA))
- DoCastSelf(SPELL_UNHOLY_AURA);
+ DoCastSelf(SPELL_IMMOLATE);
+ DoCastSelf(SPELL_UNHOLY_AURA);
}
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_IMMOLATE, 7s);
- events.ScheduleEvent(EVENT_VEIL_OF_SHADOW, 15s);
+
+ events.ScheduleEvent(EVENT_VEIL_OF_SHADOW, 10s, 15s);
}
void UpdateAI(uint32 diff) override
@@ -66,13 +73,9 @@ struct boss_lord_alexei_barov : public BossAI
{
switch (eventId)
{
- case EVENT_IMMOLATE:
- DoCast(SelectTarget(SelectTargetMethod::Random, 0, 100, true), SPELL_IMMOLATE);
- events.Repeat(12s);
- break;
case EVENT_VEIL_OF_SHADOW:
DoCastVictim(SPELL_VEIL_OF_SHADOW);
- events.Repeat(20s);
+ events.Repeat(15s, 25s);
break;
default:
break;
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
index 4accabc4746..defb87a86ce 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
@@ -15,24 +15,26 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "scholomance.h"
+/*
+ * Timers requires to be revisited
+ */
+
#include "ScriptMgr.h"
+#include "scholomance.h"
#include "ScriptedCreature.h"
enum PolkeltSpells
{
- SPELL_VOLATILE_INFECTION = 24928,
- SPELL_DARK_PLAGUE = 18270,
- SPELL_CORROSIVE_ACID = 23313,
- SPELL_NOXIOUS_CATALYST = 18151
+ SPELL_VOLATILE_INFECTION = 18149,
+ SPELL_NOXIOUS_CATALYST = 18151,
+ SPELL_CORROSIVE_ACID = 8245
};
enum PolkeltEvents
{
- EVENT_VOLATILE_INFECTION = 1,
- EVENT_DARK_PLAGUE,
- EVENT_CORROSIVE_ACID,
- EVENT_NOXIOUS_CATALYST
+ EVENT_VOLATILE_INFECTION = 1,
+ EVENT_NOXIOUS_CATALYST,
+ EVENT_CORROSIVE_ACID
};
// 10901 - Lorekeeper Polkelt
@@ -43,10 +45,10 @@ struct boss_lorekeeper_polkelt : public BossAI
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_VOLATILE_INFECTION, 38s);
- events.ScheduleEvent(EVENT_DARK_PLAGUE, 8s);
- events.ScheduleEvent(EVENT_CORROSIVE_ACID, 45s);
- events.ScheduleEvent(EVENT_NOXIOUS_CATALYST, 35s);
+
+ events.ScheduleEvent(EVENT_VOLATILE_INFECTION, 15s, 20s);
+ events.ScheduleEvent(EVENT_NOXIOUS_CATALYST, 10s, 20s);
+ events.ScheduleEvent(EVENT_CORROSIVE_ACID, 20s, 30s);
}
void UpdateAI(uint32 diff) override
@@ -65,19 +67,15 @@ struct boss_lorekeeper_polkelt : public BossAI
{
case EVENT_VOLATILE_INFECTION:
DoCastVictim(SPELL_VOLATILE_INFECTION);
- events.Repeat(32s);
+ events.Repeat(10s, 20s);
break;
- case EVENT_DARK_PLAGUE:
- DoCastVictim(SPELL_DARK_PLAGUE);
- events.Repeat(8s);
+ case EVENT_NOXIOUS_CATALYST:
+ DoCastVictim(SPELL_NOXIOUS_CATALYST);
+ events.Repeat(20s, 30s);
break;
case EVENT_CORROSIVE_ACID:
DoCastSelf(SPELL_CORROSIVE_ACID);
- events.Repeat(25s);
- break;
- case EVENT_NOXIOUS_CATALYST:
- DoCastVictim(SPELL_NOXIOUS_CATALYST);
- events.Repeat(38s);
+ events.Repeat(30s, 40s);
break;
default:
break;
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp
index 8581e5f66aa..3656e4e5e52 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp
@@ -15,28 +15,32 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "scholomance.h"
+/*
+ * Timers requires to be revisited
+ */
+
#include "ScriptMgr.h"
+#include "scholomance.h"
#include "ScriptedCreature.h"
enum RasSpells
{
- SPELL_FROSTBOLT = 21369,
- SPELL_ICE_ARMOR = 18100, // This is actually a buff he gives himself
+ SPELL_ICE_ARMOR = 18100,
SPELL_FREEZE = 18763,
- SPELL_FEAR = 26070,
+ SPELL_FEAR = 12096,
SPELL_CHILL_NOVA = 18099,
+ SPELL_KNOCK_AWAY = 11130,
SPELL_FROSTBOLT_VOLLEY = 8398
};
enum RasEvents
{
- EVENT_FROSTBOLT = 1,
- EVENT_ICE_ARMOR,
+ EVENT_ICE_ARMOR = 1,
EVENT_FREEZE,
EVENT_FEAR,
EVENT_CHILL_NOVA,
- EVENT_FROSTVOLLEY
+ EVENT_KNOCK_AWAY,
+ EVENT_FROSTBOLT_VOLLEY
};
// 10508 - Ras Frostwhisper
@@ -47,16 +51,18 @@ struct boss_boss_ras_frostwhisper : public ScriptedAI
void Reset() override
{
_events.Reset();
+
DoCastSelf(SPELL_ICE_ARMOR);
}
void JustEngagedWith(Unit* /*who*/) override
{
- _events.ScheduleEvent(EVENT_ICE_ARMOR, 2s);
- _events.ScheduleEvent(EVENT_FROSTBOLT, 8s);
- _events.ScheduleEvent(EVENT_CHILL_NOVA, 12s);
- _events.ScheduleEvent(EVENT_FREEZE, 18s);
- _events.ScheduleEvent(EVENT_FEAR, 45s);
+ _events.ScheduleEvent(EVENT_ICE_ARMOR, 30s);
+ _events.ScheduleEvent(EVENT_FREEZE, 20s, 30s);
+ _events.ScheduleEvent(EVENT_FEAR, 10s, 20s);
+ _events.ScheduleEvent(EVENT_CHILL_NOVA, 10s, 15s);
+ _events.ScheduleEvent(EVENT_KNOCK_AWAY, 20s, 30s);
+ _events.ScheduleEvent(EVENT_FROSTBOLT_VOLLEY, 10s, 20s);
}
void UpdateAI(uint32 diff) override
@@ -74,29 +80,30 @@ struct boss_boss_ras_frostwhisper : public ScriptedAI
switch (eventId)
{
case EVENT_ICE_ARMOR:
- DoCastSelf(SPELL_ICE_ARMOR);
- _events.Repeat(3min);
- break;
- case EVENT_FROSTBOLT:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
- DoCast(target, SPELL_FROSTBOLT);
- _events.Repeat(8s);
+ if (!me->HasAura(SPELL_ICE_ARMOR))
+ DoCastSelf(SPELL_ICE_ARMOR);
+ _events.Repeat(30s);
break;
case EVENT_FREEZE:
DoCastVictim(SPELL_FREEZE);
- _events.Repeat(24s);
+ _events.Repeat(30s, 40s);
break;
case EVENT_FEAR:
- DoCastSelf(SPELL_FEAR);
- _events.Repeat(30s);
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
+ DoCast(target, SPELL_FEAR);
+ _events.Repeat(20s, 30s);
break;
case EVENT_CHILL_NOVA:
DoCastSelf(SPELL_CHILL_NOVA);
- _events.Repeat(14s);
+ _events.Repeat(15s, 25s);
+ break;
+ case EVENT_KNOCK_AWAY:
+ DoCastSelf(SPELL_KNOCK_AWAY);
+ _events.Repeat(20s, 30s);
break;
- case EVENT_FROSTVOLLEY:
- DoCastVictim(SPELL_FROSTBOLT_VOLLEY);
- _events.Repeat(15s);
+ case EVENT_FROSTBOLT_VOLLEY:
+ DoCastSelf(SPELL_FROSTBOLT_VOLLEY);
+ _events.Repeat(10s, 20s);
break;
default:
break;
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp
index 5965e8bf9d3..081cfe52a98 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp
@@ -15,21 +15,25 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "scholomance.h"
+/*
+ * Timers requires to be revisited
+ */
+
#include "ScriptMgr.h"
+#include "scholomance.h"
#include "ScriptedCreature.h"
enum RavenianSpells
{
SPELL_TRAMPLE = 15550,
- SPELL_CLEAVE = 20691,
- SPELL_SUNDERING_CLEAVE = 25174,
- SPELL_KNOCK_AWAY = 10101
+ SPELL_CLEAVE = 40504,
+ SPELL_SUNDERING_CLEAVE = 17963,
+ SPELL_KNOCK_AWAY = 18670
};
enum RavenianEvents
{
- EVENT_TRAMPLE = 1,
+ EVENT_TRAMPLE = 1,
EVENT_CLEAVE,
EVENT_SUNDERING_CLEAVE,
EVENT_KNOCK_AWAY
@@ -43,10 +47,11 @@ struct boss_the_ravenian : public BossAI
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_TRAMPLE, 24s);
- events.ScheduleEvent(EVENT_CLEAVE, 15s);
- events.ScheduleEvent(EVENT_SUNDERING_CLEAVE, 40s);
- events.ScheduleEvent(EVENT_KNOCK_AWAY, 32s);
+
+ events.ScheduleEvent(EVENT_TRAMPLE, 8s, 15s);
+ events.ScheduleEvent(EVENT_CLEAVE, 10s, 15s);
+ events.ScheduleEvent(EVENT_SUNDERING_CLEAVE, 20s, 30s);
+ events.ScheduleEvent(EVENT_KNOCK_AWAY, 5s, 10s);
}
void UpdateAI(uint32 diff) override
@@ -65,19 +70,19 @@ struct boss_the_ravenian : public BossAI
{
case EVENT_TRAMPLE:
DoCastSelf(SPELL_TRAMPLE);
- events.Repeat(10s);
+ events.Repeat(8s, 15s);
break;
case EVENT_CLEAVE:
DoCastVictim(SPELL_CLEAVE);
- events.Repeat(7s);
+ events.Repeat(10s, 15s);
break;
case EVENT_SUNDERING_CLEAVE:
DoCastVictim(SPELL_SUNDERING_CLEAVE);
- events.Repeat(20s);
+ events.Repeat(20s, 30s);
break;
case EVENT_KNOCK_AWAY:
DoCastVictim(SPELL_KNOCK_AWAY);
- events.Repeat(12s);
+ events.Repeat(8s, 15s);
break;
default:
break;
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp
index 768e96b3c8a..422e0963d66 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp
@@ -15,28 +15,28 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "scholomance.h"
+/*
+ * Timers requires to be revisited
+ */
+
#include "ScriptMgr.h"
+#include "scholomance.h"
#include "ScriptedCreature.h"
-enum VectusTexts
-{
- EMOTE_FRENZY = 0
-};
-
enum VectusSpells
{
- SPELL_FLAMESTRIKE = 18399,
+ // Passive
+ SPELL_FIRE_SHIELD = 13377,
+
+ // Combat
SPELL_BLAST_WAVE = 16046,
- SPELL_FIRE_SHIELD = 19626,
- SPELL_FRENZY = 8269 // 28371
+ SPELL_FLAMESTRIKE = 18399
};
enum VectusEvents
{
- EVENT_FIRE_SHIELD = 1,
- EVENT_BLAST_WAVE,
- EVENT_FRENZY
+ EVENT_BLAST_WAVE = 1,
+ EVENT_FLAMESTRIKE
};
// 10432 - Vectus
@@ -47,18 +47,14 @@ struct boss_vectus : public ScriptedAI
void Reset() override
{
_events.Reset();
- }
- void JustEngagedWith(Unit* /*who*/) override
- {
- _events.ScheduleEvent(EVENT_FIRE_SHIELD, 2s);
- _events.ScheduleEvent(EVENT_BLAST_WAVE, 14s);
+ DoCastSelf(SPELL_FIRE_SHIELD);
}
- void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override
+ void JustEngagedWith(Unit* /*who*/) override
{
- if (!me->HasAura(SPELL_FRENZY) && me->HealthBelowPctDamaged(25, damage))
- _events.ScheduleEvent(EVENT_FRENZY, 0s);
+ _events.ScheduleEvent(EVENT_BLAST_WAVE, 15s, 25s);
+ _events.ScheduleEvent(EVENT_FLAMESTRIKE, 10s, 15s);
}
void UpdateAI(uint32 diff) override
@@ -75,18 +71,14 @@ struct boss_vectus : public ScriptedAI
{
switch (eventId)
{
- case EVENT_FIRE_SHIELD:
- DoCastSelf(SPELL_FIRE_SHIELD);
- _events.Repeat(90s);
- break;
case EVENT_BLAST_WAVE:
DoCastSelf(SPELL_BLAST_WAVE);
- _events.Repeat(12s);
+ _events.Repeat(20s, 30s);
break;
- case EVENT_FRENZY:
- DoCastSelf(SPELL_FRENZY);
- Talk(EMOTE_FRENZY);
- _events.Repeat(24s);
+ case EVENT_FLAMESTRIKE:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
+ DoCast(target, SPELL_FLAMESTRIKE);
+ _events.Repeat(10s, 15s);
break;
default:
break;