Skip to content

Commit 5a2cfd0

Browse files
authored
Scripts/Scholomance: Update scripts (#31333)
1 parent 806a445 commit 5a2cfd0

13 files changed

+568
-377
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
--
2+
DELETE FROM `creature_text` WHERE `CreatureID` = 16118;
3+
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
4+
(16118,0,0,"You think you can summon us? We are the ones that summon, not you! We bash you good for this and suck the marrow from your bones!",14,0,100,0,0,0,11968,0,"Kormok SAY_SPAWN"),
5+
(16118,1,0,"First Kormok crush your bones! Then Kormok burn your soul!",12,0,100,0,0,0,11958,0,"Kormok SAY_AGGRO"),
6+
(16118,1,1,"You so little and puny... you no make good servants for Kormok!",12,0,100,0,0,0,11959,0,"Kormok SAY_AGGRO"),
7+
(16118,2,0,"We am free! Thank you little, puny ones.",14,0,100,0,0,0,11873,0,"Kormok SAY_DEATH"),
8+
(16118,3,0,"%s goes into a frenzy!",16,0,100,0,0,0,10645,0,"Kormok EMOTE_FRENZY");
9+
10+
DELETE FROM `creature_text` WHERE `CreatureID` = 10432;
11+
12+
DELETE FROM `creature_text` WHERE `CreatureID` = 14516;
13+
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
14+
(14516,0,0,"ENOUGH - this ends now! You fools will be added to my bone collection!",14,0,100,0,0,0,9784,0,"Death Knight Darkreaver");
15+
16+
DELETE FROM `creature_text` WHERE `CreatureID` = 11261;
17+
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
18+
(11261,0,0,"The doctor is in!",12,0,100,0,0,0,6715,0,"Doctor Theolen Krastinov SAY_AGGRO"),
19+
(11261,1,0,"%s goes into a frenzy!",16,0,100,0,0,0,10645,0,"Doctor Theolen Krastinov EMOTE_FRENZY");
20+
21+
DELETE FROM `creature_text` WHERE `CreatureID` = 10503;
22+
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
23+
(10503,0,0,"%s loosens her grasp on the journal she had been clutching.",16,0,100,0,0,0,11408,0,"Jandice Barov");
24+
25+
UPDATE `waypoint_data` SET `move_type` = 1 WHERE `id` = 105061;
26+
27+
UPDATE `creature_template` SET `unit_flags` = 832, `flags_extra` = `flags_extra`|512 WHERE `entry` = 10506;

src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp

Lines changed: 80 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,32 +15,109 @@
1515
* with this program. If not, see <http://www.gnu.org/licenses/>.
1616
*/
1717

18+
/*
19+
* Timers requires to be revisited
20+
*/
21+
1822
#include "ScriptMgr.h"
1923
#include "scholomance.h"
2024
#include "ScriptedCreature.h"
2125

26+
enum DarkreaverTexts
27+
{
28+
SAY_SPAWN = 0
29+
};
30+
2231
enum DarkreaverSpells
2332
{
24-
SUMMON_FALLEN_CHARGER = 23261
33+
SPELL_SHADOW_BOLT = 17393,
34+
SPELL_CLEAVE = 15284,
35+
SPELL_BLOOD_LEECH = 22644,
36+
SPELL_DOMINATE_MIND = 7645,
37+
38+
SPELL_SUMMON_FALLEN_CHARGER = 23261
39+
};
40+
41+
enum DarkreaverEvents
42+
{
43+
EVENT_SHADOW_BOLT = 1,
44+
EVENT_CLEAVE,
45+
EVENT_BLOOD_LEECH,
46+
EVENT_DOMINATE_MIND
2547
};
2648

2749
// 14516 - Death Knight Darkreaver
2850
struct boss_death_knight_darkreaver : public ScriptedAI
2951
{
3052
boss_death_knight_darkreaver(Creature* creature) : ScriptedAI(creature) { }
3153

54+
void JustAppeared() override
55+
{
56+
Talk(SAY_SPAWN);
57+
}
58+
3259
void Reset() override
3360
{
61+
_events.Reset();
62+
}
63+
64+
void JustEngagedWith(Unit* /*who*/) override
65+
{
66+
_events.ScheduleEvent(EVENT_SHADOW_BOLT, 0s);
67+
_events.ScheduleEvent(EVENT_CLEAVE, 5s, 10s);
68+
_events.ScheduleEvent(EVENT_BLOOD_LEECH, 10s, 15s);
69+
_events.ScheduleEvent(EVENT_DOMINATE_MIND, 10s, 15s);
3470
}
3571

3672
void JustDied(Unit* /*killer*/) override
3773
{
38-
DoCastSelf(SUMMON_FALLEN_CHARGER, true);
74+
DoCastSelf(SPELL_SUMMON_FALLEN_CHARGER, true);
3975
}
4076

41-
void JustEngagedWith(Unit* /*who*/) override
77+
void UpdateAI(uint32 diff) override
4278
{
79+
if (!UpdateVictim())
80+
return;
81+
82+
_events.Update(diff);
83+
84+
if (me->HasUnitState(UNIT_STATE_CASTING))
85+
return;
86+
87+
while (uint32 eventId = _events.ExecuteEvent())
88+
{
89+
switch (eventId)
90+
{
91+
case EVENT_SHADOW_BOLT:
92+
DoCastVictim(SPELL_SHADOW_BOLT);
93+
_events.Repeat(5s, 10s);
94+
break;
95+
case EVENT_CLEAVE:
96+
DoCastVictim(SPELL_CLEAVE);
97+
_events.Repeat(5s, 10s);
98+
break;
99+
case EVENT_BLOOD_LEECH:
100+
DoCastSelf(SPELL_BLOOD_LEECH);
101+
_events.Repeat(15s, 25s);
102+
break;
103+
case EVENT_DOMINATE_MIND:
104+
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1))
105+
DoCast(target, SPELL_DOMINATE_MIND);
106+
_events.Repeat(15s, 20s);
107+
break;
108+
default:
109+
break;
110+
}
111+
112+
if (me->HasUnitState(UNIT_STATE_CASTING))
113+
return;
114+
}
115+
116+
DoMeleeAttackIfReady();
43117
}
118+
119+
private:
120+
EventMap _events;
44121
};
45122

46123
void AddSC_boss_death_knight_darkreaver()

src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,19 @@
1515
* with this program. If not, see <http://www.gnu.org/licenses/>.
1616
*/
1717

18+
/*
19+
* Timers requires to be revisited
20+
*/
21+
1822
#include "ScriptMgr.h"
1923
#include "scholomance.h"
2024
#include "ScriptedCreature.h"
25+
#include "SpellInfo.h"
2126

2227
enum TheolenTexts
2328
{
24-
EMOTE_FRENZY_KILL = 0
29+
SAY_AGGRO = 0,
30+
EMOTE_FRENZY = 1
2531
};
2632

2733
enum TheolenSpells
@@ -33,22 +39,45 @@ enum TheolenSpells
3339

3440
enum TheolenEvents
3541
{
36-
EVENT_REND = 1,
42+
EVENT_REND = 1,
3743
EVENT_BACKHAND,
3844
EVENT_FRENZY
3945
};
4046

4147
// 11261 - Doctor Theolen Krastinov
4248
struct boss_doctor_theolen_krastinov : public BossAI
4349
{
44-
boss_doctor_theolen_krastinov(Creature* creature) : BossAI(creature, DATA_DOCTOR_THEOLEN_KRASTINOV) { }
50+
boss_doctor_theolen_krastinov(Creature* creature) : BossAI(creature, DATA_DOCTOR_THEOLEN_KRASTINOV), _frenzied(false) { }
51+
52+
void Reset() override
53+
{
54+
_Reset();
55+
_frenzied = false;
56+
}
4557

4658
void JustEngagedWith(Unit* who) override
4759
{
4860
BossAI::JustEngagedWith(who);
49-
events.ScheduleEvent(EVENT_REND, 8s);
50-
events.ScheduleEvent(EVENT_BACKHAND, 9s);
51-
events.ScheduleEvent(EVENT_FRENZY, 1s);
61+
62+
Talk(SAY_AGGRO);
63+
64+
events.ScheduleEvent(EVENT_REND, 5s, 15s);
65+
events.ScheduleEvent(EVENT_BACKHAND, 5s, 15s);
66+
}
67+
68+
void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override
69+
{
70+
if (!_frenzied && me->HealthBelowPctDamaged(50, damage))
71+
{
72+
_frenzied = true;
73+
events.ScheduleEvent(EVENT_FRENZY, 0s);
74+
}
75+
}
76+
77+
void OnSpellCast(SpellInfo const* spell) override
78+
{
79+
if (spell->Id == SPELL_FRENZY)
80+
Talk(EMOTE_FRENZY);
5281
}
5382

5483
void UpdateAI(uint32 diff) override
@@ -67,16 +96,14 @@ struct boss_doctor_theolen_krastinov : public BossAI
6796
{
6897
case EVENT_REND:
6998
DoCastVictim(SPELL_REND);
70-
events.Repeat(10s);
99+
events.Repeat(15s, 20s);
71100
break;
72101
case EVENT_BACKHAND:
73102
DoCastVictim(SPELL_BACKHAND);
74-
events.Repeat(10s);
103+
events.Repeat(10s, 20s);
75104
break;
76105
case EVENT_FRENZY:
77106
DoCastSelf(SPELL_FRENZY);
78-
Talk(EMOTE_FRENZY_KILL);
79-
events.Repeat(120s);
80107
break;
81108
default:
82109
break;
@@ -88,6 +115,9 @@ struct boss_doctor_theolen_krastinov : public BossAI
88115

89116
DoMeleeAttackIfReady();
90117
}
118+
119+
private:
120+
bool _frenzied;
91121
};
92122

93123
void AddSC_boss_theolenkrastinov()

src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,25 +15,30 @@
1515
* with this program. If not, see <http://www.gnu.org/licenses/>.
1616
*/
1717

18+
/*
19+
* Timers requires to be revisited
20+
*/
21+
1822
#include "ScriptMgr.h"
1923
#include "scholomance.h"
2024
#include "ScriptedCreature.h"
2125

2226
enum IlluciaSpells
2327
{
2428
SPELL_CURSE_OF_AGONY = 18671,
25-
SPELL_DOMINATE = 7645, // UNUSED YET added for documentation
29+
SPELL_DOMINATE_MIND = 14515,
2630
SPELL_FEAR = 12542,
27-
SPELL_SHADOW_SHOCK = 17234,
31+
SPELL_SHADOW_SHOCK = 17289,
2832
SPELL_SILENCE = 12528
2933
};
3034

3135
enum IlluciaEvents
3236
{
33-
EVENT_CURSE_OF_AGONY = 1,
37+
EVENT_CURSE_OF_AGONY = 1,
38+
EVENT_DOMINATE_MIND,
39+
EVENT_FEAR,
3440
EVENT_SHADOW_SHOCK,
35-
EVENT_SILENCE,
36-
EVENT_FEAR
41+
EVENT_SILENCE
3742
};
3843

3944
// 10502 - Lady Illucia Barov
@@ -44,10 +49,12 @@ struct boss_illucia_barov : public BossAI
4449
void JustEngagedWith(Unit* who) override
4550
{
4651
BossAI::JustEngagedWith(who);
47-
events.ScheduleEvent(EVENT_CURSE_OF_AGONY, 18s);
48-
events.ScheduleEvent(EVENT_SHADOW_SHOCK, 9s);
49-
events.ScheduleEvent(EVENT_SILENCE, 5s);
50-
events.ScheduleEvent(EVENT_FEAR, 30s);
52+
53+
events.ScheduleEvent(EVENT_CURSE_OF_AGONY, 10s, 20s);
54+
events.ScheduleEvent(EVENT_DOMINATE_MIND, 15s, 25s);
55+
events.ScheduleEvent(EVENT_FEAR, 15s, 30s);
56+
events.ScheduleEvent(EVENT_SHADOW_SHOCK, 10s, 15s);
57+
events.ScheduleEvent(EVENT_SILENCE, 10s, 15s);
5158
}
5259

5360
void UpdateAI(uint32 diff) override
@@ -65,20 +72,26 @@ struct boss_illucia_barov : public BossAI
6572
switch (eventId)
6673
{
6774
case EVENT_CURSE_OF_AGONY:
68-
DoCastVictim(SPELL_CURSE_OF_AGONY);
69-
events.Repeat(30s);
75+
DoCastSelf(SPELL_CURSE_OF_AGONY);
76+
events.Repeat(20s, 30s);
77+
break;
78+
case EVENT_DOMINATE_MIND:
79+
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1))
80+
DoCast(target, SPELL_DOMINATE_MIND);
81+
events.Repeat(25s, 40s);
82+
break;
83+
case EVENT_FEAR:
84+
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
85+
DoCast(target, SPELL_FEAR);
86+
events.Repeat(15s, 25s);
7087
break;
7188
case EVENT_SHADOW_SHOCK:
72-
DoCast(SelectTarget(SelectTargetMethod::Random, 0, 100, true), SPELL_SHADOW_SHOCK);
73-
events.Repeat(12s);
89+
DoCastVictim(SPELL_SHADOW_SHOCK);
90+
events.Repeat(10s, 15s);
7491
break;
7592
case EVENT_SILENCE:
7693
DoCastSelf(SPELL_SILENCE);
77-
events.Repeat(14s);
78-
break;
79-
case EVENT_FEAR:
80-
DoCastVictim(SPELL_FEAR);
81-
events.Repeat(30s);
94+
events.Repeat(20s, 30s);
8295
break;
8396
default:
8497
break;

0 commit comments

Comments
 (0)