TrinityCore
Loading...
Searching...
No Matches
boss_krickandick.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "pit_of_saron.h"
19#include "InstanceScript.h"
20#include "Map.h"
21#include "MotionMaster.h"
22#include "ObjectAccessor.h"
23#include "Player.h"
24#include "ScriptedCreature.h"
25#include "ScriptMgr.h"
26#include "SpellInfo.h"
27#include "SpellScript.h"
28#include "TemporarySummon.h"
29#include "Vehicle.h"
30
32{
33 SPELL_MIGHTY_KICK = 69021, // ick's spell
34 SPELL_SHADOW_BOLT = 69028, // krick's spell
35 SPELL_TOXIC_WASTE = 69024, // krick's spell
36 SPELL_EXPLOSIVE_BARRAGE_KRICK = 69012, // special spell 1
37 SPELL_EXPLOSIVE_BARRAGE_ICK = 69263, // special spell 1
38 SPELL_POISON_NOVA = 68989, // special spell 2
39 SPELL_PURSUIT = 68987, // special spell 3
40
42 SPELL_EXPLODING_ORB = 69017, // visual on exploding orb
43 SPELL_AUTO_GROW = 69020, // grow effect on exploding orb
44 SPELL_HASTY_GROW = 44851, // need to check growing stacks
45 SPELL_EXPLOSIVE_BARRAGE_DAMAGE = 69019, // damage done by orb while exploding
46
47 SPELL_STRANGULATING = 69413, // krick's selfcast in intro
51};
52
81
108
114
121
123{
125 POINT_KRICK_DEATH = 364771
127
128static Position const outroPos[8] =
129{
130 { 828.9342f, 118.6247f, 509.5190f, 0.0000000f }, // Krick's Outro Position
131 { 841.0100f, 196.2450f, 573.9640f, 0.2046099f }, // Scourgelord Tyrannus Outro Position (Tele to...)
132 { 777.2274f, 119.5521f, 510.0363f, 6.0562930f }, // Sylvanas / Jaine Outro Spawn Position (NPC_SYLVANAS_PART1)
133 { 823.3984f, 114.4907f, 509.4899f, 0.0000000f }, // Sylvanas / Jaine Outro Move Position (1)
134 { 835.5887f, 139.4345f, 530.9526f, 0.0000000f }, // Tyrannus fly down Position (not sniffed)
135 { 828.9342f, 118.6247f, 514.5190f, 0.0000000f }, // Krick's Choke Position
136 { 828.9342f, 118.6247f, 509.4958f, 0.0000000f }, // Kirck's Death Position
137 { 914.4820f, 143.1602f, 633.3624f, 0.0000000f } // Tyrannus fly up (not sniffed)
138};
139
140struct boss_ick : public BossAI
141{
142 boss_ick(Creature* creature) : BossAI(creature, DATA_ICK)
143 {
144 _oldTargetThreat = 0.0f;
145 }
146
147 void Reset() override
148 {
149 _Reset();
150
152 _oldTargetThreat = 0.0f;
153 }
154
155 void JustSummoned(Creature* summon) override
156 {
157 if (summon->GetEntry() == NPC_KRICK)
158 return;
159
160 BossAI::JustSummoned(summon);
161 }
162
163 void JustEngagedWith(Unit* who) override
164 {
166
167 if (Creature* krick = GetKrick())
168 krick->AI()->Talk(SAY_KRICK_AGGRO);
169
174 }
175
176 void JustDied(Unit* /*killer*/) override
177 {
178 _JustDied();
179
180 if (Vehicle* _vehicle = me->GetVehicleKit())
181 _vehicle->RemoveAllPassengers();
182
183 if (Creature* krick = GetKrick())
184 {
185 ForceCombatStop(krick, false);
186 if (krick->AI())
187 krick->AI()->DoAction(ACTION_OUTRO);
188 }
189 }
190
191 void DoAction(int32 actionId) override
192 {
193 switch (actionId)
194 {
196 if (Unit* victim = me->GetVictim())
197 {
198 _oldTargetGUID = victim->GetGUID();
199 _oldTargetThreat = GetThreat(victim);
200 }
201 break;
204
205 if (Unit* oldTarget = ObjectAccessor::GetUnit(*me, _oldTargetGUID))
206 {
207 AddThreat(oldTarget, _oldTargetThreat);
209 _oldTargetThreat = 0.0f;
210 }
211 if (Unit* current = me->GetVictim())
212 ResetThreat(current);
213 break;
214 default:
215 break;
216 }
217 }
218
219 void UpdateAI(uint32 diff) override
220 {
221 if (!UpdateVictim())
222 return;
223
224 events.Update(diff);
225
227 return;
228
229 while (uint32 eventId = events.ExecuteEvent())
230 {
231 switch (eventId)
232 {
234 if (Creature* krick = GetKrick())
235 {
236 if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.f, true))
237 krick->CastSpell(target, SPELL_TOXIC_WASTE);
238 }
240 break;
242 if (Creature* krick = GetKrick())
243 {
244 if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.f, true))
245 krick->CastSpell(target, SPELL_SHADOW_BOLT);
246 }
248 return;
252 return;
253 case EVENT_SPECIAL:
254 // Select one of these three special events
257 break;
259 if (Creature* krick = GetKrick())
260 {
261 krick->AI()->Talk(SAY_KRICK_BARRAGE_1);
262 krick->AI()->Talk(SAY_KRICK_BARRAGE_2);
263 krick->CastSpell(krick, SPELL_EXPLOSIVE_BARRAGE_KRICK, true);
265 }
266 events.DelayEvents(20s);
267 break;
269 if (Creature* krick = GetKrick())
270 krick->AI()->Talk(SAY_KRICK_POISON_NOVA);
271
274 break;
275 case EVENT_PURSUIT:
276 if (Creature* krick = GetKrick())
277 krick->AI()->Talk(SAY_KRICK_CHASE);
279 break;
280 default:
281 break;
282 }
283
285 return;
286 }
287
289 }
290
291private:
296
299};
300
301struct boss_krick : public ScriptedAI
302{
303 boss_krick(Creature* creature) : ScriptedAI(creature), _instanceScript(creature->GetInstanceScript()), _summons(creature)
304 {
305 Initialize();
306 }
307
309 {
313 }
314
315 void Reset() override
316 {
317 _events.Reset();
318 Initialize();
319
322 }
323
324 void KilledUnit(Unit* victim) override
325 {
326 if (victim->GetTypeId() != TYPEID_PLAYER)
327 return;
328
330 }
331
332 void JustSummoned(Creature* summon) override
333 {
334 _summons.Summon(summon);
335 if (summon->GetEntry() == NPC_EXPLODING_ORB)
336 {
337 summon->CastSpell(summon, SPELL_EXPLODING_ORB, true);
338 summon->CastSpell(summon, SPELL_AUTO_GROW, true);
339 }
340 }
341
342 void DoAction(int32 actionId) override
343 {
344 if (actionId == ACTION_OUTRO)
345 {
347 tyrannusPtr->NearTeleportTo(outroPos[1].GetPositionX(), outroPos[1].GetPositionY(), outroPos[1].GetPositionZ(), outroPos[1].GetOrientation());
349 {
350 newTyrannus->SetCanFly(true);
351 newTyrannus->SetFacingToObject(me);
352 }
353
354 me->GetMotionMaster()->MovePoint(POINT_KRICK_INTRO, outroPos[0].GetPositionX(), outroPos[0].GetPositionY(), outroPos[0].GetPositionZ());
355 }
356 }
357
358 void MovementInform(uint32 type, uint32 id) override
359 {
360 if (type != POINT_MOTION_TYPE || id != POINT_KRICK_INTRO)
361 return;
362
365 _events.Reset();
367 }
368
369 void UpdateAI(uint32 diff) override
370 {
371 if (_phase != PHASE_OUTRO)
372 return;
373
374 _events.Update(diff);
375
376 while (uint32 eventId = _events.ExecuteEvent())
377 {
378 switch (eventId)
379 {
380 case EVENT_OUTRO_1:
381 {
383 temp->DespawnOrUnsummon();
384
385 Creature* jainaOrSylvanas = nullptr;
388 else
390
391 if (jainaOrSylvanas)
392 {
393 jainaOrSylvanas->GetMotionMaster()->MovePoint(0, outroPos[3]);
394 _outroNpcGUID = jainaOrSylvanas->GetGUID();
395 }
397 break;
398 }
399 case EVENT_OUTRO_2:
400 if (Creature* jainaOrSylvanas = ObjectAccessor::GetCreature(*me, _outroNpcGUID))
401 {
402 jainaOrSylvanas->SetFacingToObject(me);
403 me->SetFacingToObject(jainaOrSylvanas);
405 jainaOrSylvanas->AI()->Talk(SAY_JAYNA_OUTRO_2);
406 else
407 jainaOrSylvanas->AI()->Talk(SAY_SYLVANAS_OUTRO_2);
408 }
410 break;
411 case EVENT_OUTRO_3:
414 break;
415 case EVENT_OUTRO_4:
416 if (Creature* jainaOrSylvanas = ObjectAccessor::GetCreature(*me, _outroNpcGUID))
417 {
419 jainaOrSylvanas->AI()->Talk(SAY_JAYNA_OUTRO_4);
420 else
421 jainaOrSylvanas->AI()->Talk(SAY_SYLVANAS_OUTRO_4);
422 }
424 break;
425 case EVENT_OUTRO_5:
428 break;
429 case EVENT_OUTRO_6:
431 {
432 tyrannus->SetSpeedRate(MOVE_FLIGHT, 3.5f);
433 tyrannus->GetMotionMaster()->MovePoint(1, outroPos[4]);
434 _tyrannusGUID = tyrannus->GetGUID();
435 }
437 break;
438 case EVENT_OUTRO_7:
440 tyrannus->AI()->Talk(SAY_TYRANNUS_OUTRO_7);
442 break;
443 case EVENT_OUTRO_8:
449 break;
450 case EVENT_OUTRO_9:
453 // there shall be some visual spell effect
455 tyrannus->CastSpell(me, SPELL_NECROMANTIC_POWER, true); //not sure if it's the right spell :/
457 break;
458 case EVENT_OUTRO_10:
464 break;
465 case EVENT_OUTRO_11:
466 DoCast(me, SPELL_KRICK_KILL_CREDIT); // don't really know if we need it
468 me->SetHealth(0);
470 break;
471 case EVENT_OUTRO_12:
473 tyrannus->AI()->Talk(SAY_TYRANNUS_OUTRO_9);
475 break;
476 case EVENT_OUTRO_13:
477 if (Creature* jainaOrSylvanas = ObjectAccessor::GetCreature(*me, _outroNpcGUID))
478 {
480 jainaOrSylvanas->AI()->Talk(SAY_JAYNA_OUTRO_10);
481 else
482 jainaOrSylvanas->AI()->Talk(SAY_SYLVANAS_OUTRO_10);
483 }
484 // End of OUTRO. for now...
487 tyrannus->GetMotionMaster()->MovePoint(0, outroPos[7]);
488 break;
489 case EVENT_OUTRO_END:
491 tyrannus->DespawnOrUnsummon();
492
494 break;
495 default:
496 break;
497 }
498 }
499 }
500
501private:
506
510
514};
515
516// 69012 - Explosive Barrage
518{
520
521 void HandlePeriodicTick(AuraEffect const* /*aurEff*/)
522 {
524 Unit* caster = GetCaster();
525 if (!caster || caster->GetTypeId() != TYPEID_UNIT)
526 return;
527
528 Map::PlayerList const& players = caster->GetMap()->GetPlayers();
529 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
530 {
531 if (Player* player = itr->GetSource())
532 if (player->IsWithinDist(caster, 60.0f)) // don't know correct range
533 caster->CastSpell(player, SPELL_EXPLOSIVE_BARRAGE_SUMMON, true);
534 }
535 }
536
541};
542
543// 69263 - Explosive Barrage
572
573// 44851 - Hasty Grow
575{
577
578 void OnStackChange(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
579 {
580 if (GetStackAmount() == 15)
581 {
582 Unit* target = GetTarget(); // store target because aura gets removed
583 target->CastSpell(target, SPELL_EXPLOSIVE_BARRAGE_DAMAGE, false);
587 if (Creature* creature = target->ToCreature())
588 creature->DespawnOrUnsummon();
589 }
590 }
591
596};
597
598// 68987 - Pursuit
600{
602
604 {
605 Unit* target = GetHitUnit();
606 if (Creature* ick = GetCaster()->ToCreature())
607 {
608 ick->AI()->Talk(SAY_ICK_CHASE_1, target);
609 ick->AddAura(GetSpellInfo()->Id, target);
610 ick->AI()->DoAction(ACTION_STORE_OLD_TARGET);
611 ick->GetThreatManager().AddThreat(target, float(GetEffectValue()), GetSpellInfo(), true, true);
612 ick->GetThreatManager().FixateTarget(target);
613 }
614 }
615
620};
621
640
641// 69029, 70850 - Pursuit Confusion
664
Actions
First const & RAND(First const &first, Second const &second, Rest const &... rest)
int32_t int32
Definition Define.h:129
uint32_t uint32
Definition Define.h:133
@ POINT_MOTION_TYPE
@ TEMPSUMMON_MANUAL_DESPAWN
@ TYPEID_UNIT
Definition ObjectGuid.h:38
@ TYPEID_PLAYER
Definition ObjectGuid.h:39
Spells
Definition PlayerAI.cpp:32
#define RegisterSpellAndAuraScriptPair(script_1, script_2)
Definition ScriptMgr.h:1130
#define RegisterSpellScript(spell_script)
Definition ScriptMgr.h:1128
SpellEffIndex
@ EFFECT_1
@ EFFECT_0
@ EFFECT_2
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_ATTACK_ME
@ IMMUNITY_STATE
@ IMMUNITY_EFFECT
@ ALLIANCE
AuraEffectHandleModes
@ AURA_EFFECT_HANDLE_REAPPLY
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_LINKED
@ SPELL_AURA_DUMMY
@ SPELL_AURA_MOD_TAUNT
@ SPELL_AURA_MOD_SCALE
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
@ SPELLVALUE_MAX_TARGETS
#define SpellEffectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
#define AuraEffectApplyFn(F, I, N, M)
#define AuraEffectRemoveFn(F, I, N, M)
@ REACT_PASSIVE
@ REACT_AGGRESSIVE
@ UNIT_STAND_STATE_DEAD
Definition UnitDefines.h:41
@ MOVEMENTFLAG_FLYING
@ MOVEMENTFLAG_FALLING_FAR
@ MOVE_FLIGHT
@ UNIT_FLAG_NON_ATTACKABLE
@ UNIT_STATE_CASTING
Definition Unit.h:235
void AddSC_boss_ick()
@ ACTION_RESET_THREAT
@ ACTION_STORE_OLD_TARGET
@ ACTION_OUTRO
@ SAY_KRICK_OUTRO_8
@ SAY_KRICK_OUTRO_3
@ SAY_JAYNA_OUTRO_4
@ SAY_ICK_POISON_NOVA
@ SAY_KRICK_OUTRO_1
@ SAY_TYRANNUS_OUTRO_9
@ SAY_ICK_CHASE_1
@ SAY_JAYNA_OUTRO_2
@ SAY_KRICK_SLAY
@ SAY_KRICK_BARRAGE_1
@ SAY_KRICK_POISON_NOVA
@ SAY_JAYNA_OUTRO_10
@ SAY_KRICK_AGGRO
@ SAY_SYLVANAS_OUTRO_10
@ SAY_KRICK_BARRAGE_2
@ SAY_KRICK_OUTRO_5
@ SAY_SYLVANAS_OUTRO_2
@ SAY_SYLVANAS_OUTRO_4
@ SAY_KRICK_CHASE
@ SAY_TYRANNUS_OUTRO_7
@ PHASE_OUTRO
@ PHASE_COMBAT
@ POINT_KRICK_INTRO
@ POINT_KRICK_DEATH
@ SPELL_PURSUIT
@ SPELL_AUTO_GROW
@ SPELL_NECROMANTIC_POWER
@ SPELL_EXPLOSIVE_BARRAGE_ICK
@ SPELL_EXPLODING_ORB
@ SPELL_KRICK_KILL_CREDIT
@ SPELL_STRANGULATING
@ SPELL_SHADOW_BOLT
@ SPELL_SUICIDE
@ SPELL_EXPLOSIVE_BARRAGE_DAMAGE
@ SPELL_HASTY_GROW
@ SPELL_TOXIC_WASTE
@ SPELL_EXPLOSIVE_BARRAGE_SUMMON
@ SPELL_MIGHTY_KICK
@ SPELL_POISON_NOVA
@ SPELL_EXPLOSIVE_BARRAGE_KRICK
static Position const outroPos[8]
@ EVENT_OUTRO_9
@ EVENT_PURSUIT
@ EVENT_OUTRO_2
@ EVENT_SPECIAL
@ EVENT_OUTRO_3
@ EVENT_OUTRO_11
@ EVENT_OUTRO_7
@ EVENT_OUTRO_12
@ EVENT_OUTRO_END
@ EVENT_TOXIC_WASTE
@ EVENT_OUTRO_5
@ EVENT_OUTRO_8
@ EVENT_POISON_NOVA
@ EVENT_OUTRO_13
@ EVENT_OUTRO_6
@ EVENT_OUTRO_10
@ EVENT_EXPLOSIVE_BARRAGE
@ EVENT_OUTRO_1
@ EVENT_MIGHTY_KICK
@ EVENT_OUTRO_4
@ EVENT_SHADOW_BOLT
Yells
void PreventDefaultAction()
HookList< EffectApplyHandler > AfterEffectRemove
HookList< EffectPeriodicHandler > OnEffectPeriodic
HookList< EffectApplyHandler > AfterEffectApply
Unit * GetCaster() const
Unit * GetTarget() const
HookList< EffectApplyHandler > OnEffectRemove
uint8 GetStackAmount() const
HookList< EffectApplyHandler > OnEffectApply
InstanceScript *const instance
void JustEngagedWith(Unit *who) override
void JustSummoned(Creature *summon) override
EventMap events
bool UpdateVictim()
Creature *const me
Definition CreatureAI.h:82
void SetReactState(ReactStates st)
Definition Creature.h:119
void DisappearAndDie()
Definition Creature.h:73
void Update(uint32 time)
Definition EventMap.h:67
void DelayEvents(Milliseconds delay)
Definition EventMap.cpp:95
EventId ExecuteEvent()
Definition EventMap.cpp:73
void ScheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
Definition EventMap.cpp:36
void Reset()
Definition EventMap.cpp:21
virtual ObjectGuid GetGuidData(uint32 type) const override
iterator end()
iterator begin()
PlayerList const & GetPlayers() const
Definition Map.h:448
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={})
void Clear()
Definition ObjectGuid.h:150
static Creature * ToCreature(Object *o)
Definition Object.h:186
TypeID GetTypeId() const
Definition Object.h:93
uint32 GetEntry() const
Definition Object.h:81
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:78
Unit * GetCaster() const
Unit * GetHitUnit() const
int32 GetEffectValue() const
HookList< EffectHandler > OnEffectHitTarget
SpellInfo const * GetSpellInfo() const
void Summon(Creature const *summon)
virtual void DoAction(int32)
Definition UnitAI.h:154
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:54
SpellCastResult DoCastSelf(uint32 spellId, CastSpellExtraArgs const &args={})
Definition UnitAI.h:241
SpellCastResult DoCastVictim(uint32 spellId, CastSpellExtraArgs const &args={})
Definition UnitAI.cpp:166
Unit * SelectTarget(SelectTargetMethod targetType, uint32 offset=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
Definition UnitAI.cpp:96
SpellCastResult DoCastAOE(uint32 spellId, CastSpellExtraArgs const &args={})
Definition UnitAI.h:243
SpellCastResult DoCast(uint32 spellId)
Definition UnitAI.cpp:106
Definition Unit.h:769
ThreatManager & GetThreatManager()
Definition Unit.h:1155
MotionMaster * GetMotionMaster()
Definition Unit.h:1667
void SetHealth(uint32 val)
Definition Unit.cpp:9361
UnitAI * GetAI() const
Definition Unit.h:800
void SetFacingToObject(WorldObject const *object, bool force=true, uint32 movementId=EVENT_FACE)
Definition Unit.cpp:13259
void AddUnitMovementFlag(uint32 f)
Definition Unit.h:1676
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:3784
Unit * GetVictim() const
Definition Unit.h:859
bool HasUnitState(const uint32 f) const
Definition Unit.h:876
void ApplySpellImmune(uint32 spellId, uint32 op, uint32 type, bool apply)
Definition Unit.cpp:8142
void RemoveUnitMovementFlag(uint32 f)
Definition Unit.h:1677
void SetStandState(UnitStandStateType state)
Definition Unit.cpp:10363
void SetUnitFlag(UnitFlags flags)
Definition Unit.h:954
Vehicle * GetVehicleKit() const
Definition Unit.h:1735
Map * GetMap() const
Definition Object.h:449
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition Object.cpp:2832
TempSummon * SummonCreature(uint32 entry, Position const &pos, TempSummonType despawnType=TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime=0s, uint32 vehId=0, uint32 spellId=0, ObjectGuid privateObjectOwner=ObjectGuid::Empty)
Definition Object.cpp:1992
virtual uint32 GetData(uint32) const
Definition ZoneScript.h:55
PrepareAuraScript(spell_exploding_orb_hasty_grow)
void OnStackChange(AuraEffect const *, AuraEffectHandleModes)
void HandleEffectRemove(AuraEffect const *, AuraEffectHandleModes)
PrepareAuraScript(spell_ick_explosive_barrage)
void HandleEffectApply(AuraEffect const *, AuraEffectHandleModes)
PrepareAuraScript(spell_krick_explosive_barrage)
void HandlePeriodicTick(AuraEffect const *)
PrepareAuraScript(spell_krick_pursuit_AuraScript)
void HandleExtraEffect(AuraEffect const *, AuraEffectHandleModes)
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
PrepareAuraScript(spell_krick_pursuit_confusion)
void OnApply(AuraEffect const *, AuraEffectHandleModes)
void HandleScriptEffect(SpellEffIndex)
PrepareSpellScript(spell_krick_pursuit)
@ DATA_TEAM_IN_INSTANCE
@ NPC_JAINA_PART1
@ NPC_SYLVANAS_PART1
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
#define RegisterPitOfSaronCreatureAI(ai_name)
@ DATA_ICK
@ DATA_TYRANNUS_EVENT
@ DATA_KRICK
@ DATA_JAINA_SYLVANAS_1
@ NPC_TYRANNUS_EVENTS
@ NPC_KRICK
@ NPC_EXPLODING_ORB
void ForceCombatStop(Creature *who, bool reset=true)
float GetThreat(Unit const *victim, Unit const *who=nullptr)
void ResetThreat(Unit *victim, Unit *who=nullptr)
void AddThreat(Unit *victim, float amount, Unit *who=nullptr)
boss_ick(Creature *creature)
ObjectGuid _oldTargetGUID
void DoAction(int32 actionId) override
Creature * GetKrick()
void JustSummoned(Creature *summon) override
void JustEngagedWith(Unit *who) override
void JustDied(Unit *) override
void UpdateAI(uint32 diff) override
void Reset() override
SummonList _summons
void UpdateAI(uint32 diff) override
void MovementInform(uint32 type, uint32 id) override
void JustSummoned(Creature *summon) override
Creature * GetIck()
void DoAction(int32 actionId) override
ObjectGuid _outroNpcGUID
void KilledUnit(Unit *victim) override
InstanceScript * _instanceScript
ObjectGuid _tyrannusGUID
void Reset() override
KrickPhase _phase
boss_krick(Creature *creature)