#[COLOR=rgb(167,29,93)]include [COLOR=rgb(24,54,145)]“ScriptMgr.h[COLOR=rgb(24,54,145)]”
1
#[COLOR=rgb(167,29,93)]include [COLOR=rgb(24,54,145)]"ScriptedCreature.h[COLOR=rgb(24,54,145)]"
2
#[COLOR=rgb(167,29,93)]include [COLOR=rgb(24,54,145)]"maw_of_souls.h[COLOR=rgb(24,54,145)]"
3
[COLOR=rgb(167,29,93)]enum Spells {
4
[COLOR=rgb(150,152,150)]// Helya Spells
5
SPELL_HELYA_TORRENT_SIEGE = [COLOR=rgb(0,134,179)]197805,
6
SPELL_HELYA_TORRENT_BREACH = [COLOR=rgb(0,134,179)]198495,
7
SPELL_HELYA_WING_BUFFET = [COLOR=rgb(0,134,179)]198520,
8
SPELL_HELYA_CORRUPTED = [COLOR=rgb(0,134,179)]227223,
9
SPELL_HELYA_SUBMERGED = [COLOR=rgb(0,134,179)]196947,
10
SPELL_HELYA_BARRAGE = [COLOR=rgb(0,134,179)]202088,
11
[COLOR=rgb(150,152,150)]// Destructor Tentacle Spells
12
SPELL_DESTRUCTOR_SMASH = [COLOR=rgb(0,134,179)]196534,
13
SPELL_DESTRUCTOR_RUPTURE = [COLOR=rgb(0,134,179)]185539,
14
[COLOR=rgb(150,152,150)]// Grasping Tentacle Spells
15
[COLOR=rgb(150,152,150)]// Piercing Tentacle Spells
16
SPELL_PIERCING_TENTACLE = [COLOR=rgb(0,134,179)]197117,
17
};
18
[COLOR=rgb(167,29,93)]enum CreaturesIds {
19
NPC_DESTRUCTOR_TENTACLE = [COLOR=rgb(0,134,179)]99801, [COLOR=rgb(150,152,150)]// Level 112
20
NPC_GRASPING_TENTACLE = [COLOR=rgb(0,134,179)]100360, [COLOR=rgb(150,152,150)]// Level 111
21
NPC_PIERCING_TENTACLE = [COLOR=rgb(0,134,179)]100188, [COLOR=rgb(150,152,150)]// Level 112
22
};
23
[COLOR=rgb(167,29,93)]enum Auras {
24
AURA_HELYA_TAINT = [COLOR=rgb(0,134,179)]197262
25
};
26
[COLOR=rgb(167,29,93)]enum Yells {
27
YELL_PRE_ENCOUNTER = [COLOR=rgb(0,134,179)]0,
28
YELL_ENTER_COMBAT = [COLOR=rgb(0,134,179)]1,
29
YELL_TAINT = [COLOR=rgb(0,134,179)]2,
30
YELL_TENTACLE = [COLOR=rgb(0,134,179)]3,
31
YELL_CORRUPTED = [COLOR=rgb(0,134,179)]4,
32
YELL_KILL = [COLOR=rgb(0,134,179)]5,
33
YELL_WIPE = [COLOR=rgb(0,134,179)]6,
34
YELL_KILLED = [COLOR=rgb(0,134,179)]7
35
};
36
[COLOR=rgb(167,29,93)]enum Events {
37
EVENT_TAINT = [COLOR=rgb(0,134,179)]1,
38
EVENT_BARRAGE = [COLOR=rgb(0,134,179)]2
39
};
40
[COLOR=rgb(167,29,93)]enum Phases {
41
PHASE_SIEGE = [COLOR=rgb(0,134,179)]0,
42
PHASE_SUBMERGE = [COLOR=rgb(0,134,179)]1,
43
PHASE_BREACH = [COLOR=rgb(0,134,179)]2
44
};
45
[COLOR=rgb(167,29,93)]class [COLOR=rgb(121,93,163)]boss_helya_maw : [COLOR=rgb(167,29,93)]public [COLOR=rgb(121,93,163)]CreatureScript {
46
[COLOR=rgb(167,29,93)]public:
47
[COLOR=rgb(121,93,163)]boss_helya_maw() : CreatureScript([COLOR=rgb(24,54,145)]"boss_helya_maw[COLOR=rgb(24,54,145)]") {}
48
[COLOR=rgb(167,29,93)]struct [COLOR=rgb(121,93,163)]boss_helya_mawAI : [COLOR=rgb(167,29,93)]public [COLOR=rgb(121,93,163)]BossAI {
49
[COLOR=rgb(121,93,163)]boss_helya_mawAI(Creature* creature) : BossAI(creature, DATA_HELYA_MAW) {
50
[COLOR=rgb(0,134,179)]Initialize();
51
[COLOR=rgb(0,134,179)]SetCombatMovement([COLOR=rgb(0,134,179)]false);
52
}
53
[COLOR=rgb(167,29,93)]void [COLOR=rgb(121,93,163)]Initialize() {
54
[COLOR=rgb(0,134,179)]DifficultyModifier();
55
Phase = PHASE_SIEGE;
56
[COLOR=rgb(167,29,93)]if(isHeroic || isMythic) {
57
events.[COLOR=rgb(0,134,179)]ScheduleEvent(EVENT_TAINT, [COLOR=rgb(0,134,179)]1 * IN_MILLISECONDS, PHASE_SIEGE);
58
events.[COLOR=rgb(0,134,179)]ScheduleEvent(EVENT_BARRAGE, [COLOR=rgb(0,134,179)]42 * IN_MILLISECONDS, PHASE_SIEGE);
59
}
60
}
61
[COLOR=rgb(167,29,93)]void [COLOR=rgb(121,93,163)]Reset() [COLOR=rgb(167,29,93)]override {
62
[COLOR=rgb(0,134,179)]_Reset();
63
[COLOR=rgb(0,134,179)]Initialize();
64
[COLOR=rgb(150,152,150)]//summons.DespawnAll();
65
}
66
[COLOR=rgb(167,29,93)]void [COLOR=rgb(121,93,163)]DifficultyModifier() {
67
Difficulty instanceDifficulty = instance->instance->[COLOR=rgb(0,134,179)]GetDifficultyID();
68
uint64 myHealth = me->[COLOR=rgb(0,134,179)]GetHealth();
69
[COLOR=rgb(167,29,93)]double healthModifier;
70
[COLOR=rgb(167,29,93)]double damageModifier;
71
[COLOR=rgb(167,29,93)]if(instanceDifficulty == DIFFICULTY_NORMAL) {
72
healthModifier = [COLOR=rgb(0,134,179)]1.0;
73
damageModifier = [COLOR=rgb(0,134,179)]1.0;
74
} [COLOR=rgb(167,29,93)]else [COLOR=rgb(167,29,93)]if(instanceDifficulty == DIFFICULTY_HEROIC) {
75
healthModifier = [COLOR=rgb(0,134,179)]1.29687495317; [COLOR=rgb(150,152,150)]// HealthModifier 36.99
76
damageModifier = [COLOR=rgb(0,134,179)]1.30167051743;
77
isHeroic = [COLOR=rgb(0,134,179)]true;
78
} [COLOR=rgb(167,29,93)]else [COLOR=rgb(167,29,93)]if(instanceDifficulty == DIFFICULTY_MYTHIC) {
79
healthModifier = [COLOR=rgb(0,134,179)]1.62109363383; [COLOR=rgb(150,152,150)]// HealthModifier 46.25
80
damageModifier = [COLOR=rgb(0,134,179)]1.82000519133;
81
isMythic = [COLOR=rgb(0,134,179)]true;
82
} [COLOR=rgb(167,29,93)]else {
83
healthModifier = [COLOR=rgb(0,134,179)]20;
84
damageModifier = [COLOR=rgb(0,134,179)]20;
85
}
86
uint64 difficultyAdjustedHealth = [COLOR=rgb(167,29,93)]static_cast<[COLOR=rgb(167,29,93)]unsigned [COLOR=rgb(167,29,93)]long [COLOR=rgb(167,29,93)]long>(myHealth * healthModifier);
87
me->[COLOR=rgb(0,134,179)]SetMaxHealth(difficultyAdjustedHealth);
88
me->[COLOR=rgb(0,134,179)]SetHealth(difficultyAdjustedHealth);
89
me->[COLOR=rgb(0,134,179)]SetModifierValue(UNIT_MOD_DAMAGE_MAINHAND, BASE_VALUE, [COLOR=rgb(167,29,93)]static_cast<[COLOR=rgb(167,29,93)]float>(damageModifier));
90
}
91
[COLOR=rgb(167,29,93)]void [COLOR=rgb(121,93,163)]EnterCombat(Unit* victim) [COLOR=rgb(167,29,93)]override {
92
[COLOR=rgb(0,134,179)]BossAI::EnterCombat(victim);
93
instance->[COLOR=rgb(0,134,179)]SetBossState(DATA_HELYA_MAW, IN_PROGRESS);
94
[COLOR=rgb(0,134,179)]Talk(YELL_ENTER_COMBAT);
95
[COLOR=rgb(0,134,179)]DoZoneInCombat();
96
}
97
[COLOR=rgb(167,29,93)]void [COLOR=rgb(121,93,163)]JustDied(Unit* [COLOR=rgb(150,152,150)]/*killer[COLOR=rgb(150,152,150)]*/) [COLOR=rgb(167,29,93)]override {
98
[COLOR=rgb(0,134,179)]_JustDied();
99
[COLOR=rgb(0,134,179)]Talk(YELL_KILLED);
100
[COLOR=rgb(150,152,150)]//summons.DespawnAll();
101
instance->[COLOR=rgb(0,134,179)]SetBossState(DATA_HELYA_MAW, DONE);
102
}
103
[COLOR=rgb(167,29,93)]void [COLOR=rgb(121,93,163)]EnterEvadeMode(EvadeReason [COLOR=rgb(150,152,150)]/*why[COLOR=rgb(150,152,150)]*/) [COLOR=rgb(167,29,93)]override {
104
instance->[COLOR=rgb(0,134,179)]SetBossState(DATA_HELYA_MAW, FAIL);
105
[COLOR=rgb(150,152,150)]//summons.DespawnAll();
106
me->[COLOR=rgb(0,134,179)]CombatStop();
107
me->[COLOR=rgb(0,134,179)]DespawnOrUnsummon();
108
me->[COLOR=rgb(0,134,179)]SetCorpseDelay([COLOR=rgb(0,134,179)]5);
109
me->[COLOR=rgb(0,134,179)]SetRespawnDelay([COLOR=rgb(0,134,179)]10);
110
me->[COLOR=rgb(0,134,179)]RemoveAllAuras();
111
events.[COLOR=rgb(0,134,179)]Reset();
112
[COLOR=rgb(0,134,179)]Initialize();
113
}
114
[COLOR=rgb(167,29,93)]void [COLOR=rgb(121,93,163)]KilledUnit(Unit* victim) [COLOR=rgb(167,29,93)]override {
115
[COLOR=rgb(167,29,93)]if(victim->[COLOR=rgb(0,134,179)]GetTypeId() == TYPEID_PLAYER)
116
[COLOR=rgb(0,134,179)]Talk(YELL_KILL);
117
}
118
[COLOR=rgb(167,29,93)]void [COLOR=rgb(121,93,163)]JustSummoned(Creature* summoned) [COLOR=rgb(167,29,93)]override {
119
}
120
[COLOR=rgb(167,29,93)]void [COLOR=rgb(121,93,163)]EnterNextPhase() {
121
}
122
[COLOR=rgb(167,29,93)]void [COLOR=rgb(121,93,163)]UpdateAI(uint32 diff) [COLOR=rgb(167,29,93)]override {
123
[COLOR=rgb(167,29,93)]if(Phase < PHASE_BREACH) {
124
} [COLOR=rgb(167,29,93)]else {
125
[COLOR=rgb(167,29,93)]if(![COLOR=rgb(0,134,179)]UpdateVictim())
126
[COLOR=rgb(167,29,93)]return;
127
}
128
events.[COLOR=rgb(0,134,179)]Update(diff);
129
[COLOR=rgb(167,29,93)]while(uint32 eventID = events.[COLOR=rgb(0,134,179)]ExecuteEvent()) {
130
[COLOR=rgb(167,29,93)]switch(eventID) {
131
[COLOR=rgb(167,29,93)]case EVENT_TAINT:
132
[COLOR=rgb(167,29,93)]if(Unit* target = [COLOR=rgb(0,134,179)]SelectTarget(SELECT_TARGET_RANDOM, [COLOR=rgb(0,134,179)]0, [COLOR=rgb(0,134,179)]100.[COLOR=rgb(0,134,179)]0f, [COLOR=rgb(0,134,179)]true)) {
133
[COLOR=rgb(167,29,93)]if(!target->[COLOR=rgb(0,134,179)]HasAura(AURA_HELYA_TAINT)) {
134
[COLOR=rgb(0,134,179)]DoCast(target, AURA_HELYA_TAINT, [COLOR=rgb(0,134,179)]false);
135
}
136
}
137
[COLOR=rgb(167,29,93)]break;
138
[COLOR=rgb(167,29,93)]case EVENT_BARRAGE:
139
[COLOR=rgb(167,29,93)]if(Unit* target = [COLOR=rgb(0,134,179)]SelectTarget(SELECT_TARGET_RANDOM, [COLOR=rgb(0,134,179)]0, [COLOR=rgb(0,134,179)]100.[COLOR=rgb(0,134,179)]0f, [COLOR=rgb(0,134,179)]true)) {
140
[COLOR=rgb(0,134,179)]DoCast(target, SPELL_HELYA_BARRAGE);
141
}
142
[COLOR=rgb(167,29,93)]break;
143
}
144
}
145
[COLOR=rgb(0,134,179)]DoMeleeAttackIfReady();
146
}
147
[COLOR=rgb(167,29,93)]private:
148
uint8 Phase;
149
[COLOR=rgb(150,152,150)]//SummonList summons;
150
[COLOR=rgb(167,29,93)]bool isSubmerged;
151
[COLOR=rgb(167,29,93)]bool isHeroic = [COLOR=rgb(0,134,179)]false;
152
[COLOR=rgb(167,29,93)]bool isMythic = [COLOR=rgb(0,134,179)]false;
153
};
154
[COLOR=rgb(167,29,93)]private:
155
CreatureAI* [COLOR=rgb(121,93,163)]GetAI(Creature* creature) [COLOR=rgb(167,29,93)]const [COLOR=rgb(167,29,93)]override {
156
[COLOR=rgb(167,29,93)]return GetMawOfSoulsAI<boss_helya_mawAI>(creature);
157
}
158
};
159
[COLOR=rgb(150,152,150)]// NPC 99801
160
[COLOR=rgb(167,29,93)]class [COLOR=rgb(121,93,163)]npc_helya_maw_destructor_tentacle : [COLOR=rgb(167,29,93)]public [COLOR=rgb(121,93,163)]CreatureScript {
161
[COLOR=rgb(167,29,93)]public:
162
[COLOR=rgb(121,93,163)]npc_helya_maw_destructor_tentacle() : CreatureScript([COLOR=rgb(24,54,145)]"npc_helya_maw_destructor_tentacle[COLOR=rgb(24,54,145)]") { }
163
[COLOR=rgb(167,29,93)]struct [COLOR=rgb(121,93,163)]npc_helya_maw_destructor_tentacleAI : [COLOR=rgb(167,29,93)]public [COLOR=rgb(121,93,163)]ScriptedAI {
164
[COLOR=rgb(121,93,163)]npc_helya_maw_destructor_tentacleAI(Creature* creature) : ScriptedAI(creature) {
165
instance = creature->[COLOR=rgb(0,134,179)]GetInstanceScript();
166
[COLOR=rgb(0,134,179)]SetCombatMovement([COLOR=rgb(0,134,179)]false);
167
[COLOR=rgb(0,134,179)]Initialize();
168
}
169
[COLOR=rgb(167,29,93)]void [COLOR=rgb(121,93,163)]Initialize() {
170
[COLOR=rgb(0,134,179)]DoCastVictim(SPELL_DESTRUCTOR_RUPTURE);
171
}
172
[COLOR=rgb(167,29,93)]void [COLOR=rgb(121,93,163)]EnterCombat(Unit* who) [COLOR=rgb(167,29,93)]override {
173
}
174
[COLOR=rgb(167,29,93)]void [COLOR=rgb(121,93,163)]JustDied(Unit* [COLOR=rgb(150,152,150)]/*killer[COLOR=rgb(150,152,150)]*/) {
175
[COLOR=rgb(167,29,93)]if(Creature* helya = [COLOR=rgb(0,134,179)]ObjectAccessor::GetCreature((*me), instance->[COLOR=rgb(0,134,179)]GetGuidData(DATA_HELYA_MAW))) {
176
helya->[COLOR=rgb(0,134,179)]AI()->[COLOR=rgb(0,134,179)]Talk(YELL_TENTACLE);
177
uint64 damagePerTentacle = helya->[COLOR=rgb(0,134,179)]GetMaxHealth() * [COLOR=rgb(0,134,179)]0.0333;
178
uint64 newHealth = helya->[COLOR=rgb(0,134,179)]GetHealth() - damagePerTentacle;
179
helya->[COLOR=rgb(0,134,179)]SetHealth(newHealth);
180
}
181
}
182
[COLOR=rgb(167,29,93)]void [COLOR=rgb(121,93,163)]UpdateAI(uint32 diff) [COLOR=rgb(167,29,93)]override {
183
[COLOR=rgb(167,29,93)]if(![COLOR=rgb(0,134,179)]UpdateVictim())
184
[COLOR=rgb(167,29,93)]return;
185
[COLOR=rgb(167,29,93)]if(presenseCheck <= diff) {
186
[COLOR=rgb(167,29,93)]if (!playerInRange) {
187
[COLOR=rgb(0,134,179)]DoCastAOE(SPELL_DESTRUCTOR_SMASH);
188
}
189
presenseCheck = [COLOR=rgb(0,134,179)]5 * IN_MILLISECONDS;
190
} [COLOR=rgb(167,29,93)]else presenseCheck -= diff;
191
[COLOR=rgb(167,29,93)]if(ruptureEvery <= diff) {
192
[COLOR=rgb(167,29,93)]if(playerInRange) {
193
[COLOR=rgb(0,134,179)]DoCastVictim(SPELL_DESTRUCTOR_RUPTURE);
194
ruptureEvery = [COLOR=rgb(0,134,179)]14 * IN_MILLISECONDS;
195
} [COLOR=rgb(167,29,93)]else {
196
ruptureEvery = [COLOR=rgb(0,134,179)]1 * IN_MILLISECONDS;
197
}
198
} [COLOR=rgb(167,29,93)]else ruptureEvery -= diff;
199
[COLOR=rgb(0,134,179)]DoMeleeAttackIfReady();
}
200
[COLOR=rgb(167,29,93)]void [COLOR=rgb(121,93,163)]MoveInLineOfSight(Unit* who) [COLOR=rgb(167,29,93)]override {
201
playerInRange = (who->[COLOR=rgb(0,134,179)]GetTypeId() == TYPEID_PLAYER && me->[COLOR=rgb(0,134,179)]GetDistance2d(who) < [COLOR=rgb(0,134,179)]3.[COLOR=rgb(0,134,179)]0f) ? [COLOR=rgb(0,134,179)]true : [COLOR=rgb(0,134,179)]false;
202
}
203
[COLOR=rgb(167,29,93)]private:
204
InstanceScript* instance;
205
uint32 ruptureEvery = [COLOR=rgb(0,134,179)]14 * IN_MILLISECONDS;
206
uint32 presenseCheck = [COLOR=rgb(0,134,179)]5 * IN_MILLISECONDS;
207
[COLOR=rgb(167,29,93)]bool playerInRange = [COLOR=rgb(0,134,179)]false;
208
};
209
CreatureAI* [COLOR=rgb(121,93,163)]GetAI(Creature* creature) [COLOR=rgb(167,29,93)]const [COLOR=rgb(167,29,93)]override {
210
[COLOR=rgb(167,29,93)]return GetMawOfSoulsAI<npc_helya_maw_destructor_tentacleAI>(creature);
211
}
212
};
213
[COLOR=rgb(167,29,93)]void [COLOR=rgb(121,93,163)]AddSC_boss_helya_maw() {
214
[COLOR=rgb(167,29,93)]new [COLOR=rgb(0,134,179)]boss_helya_maw();
215
[COLOR=rgb(167,29,93)]new [COLOR=rgb(0,134,179)]npc_helya_maw_destructor_tentacle();