Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
boss_krickandick.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#include "ScriptMgr.h"
7#include "ScriptedCreature.h"
8#include "SpellScript.h"
9#include "SpellAuraEffects.h"
10#include "pit_of_saron.h"
11#include "Vehicle.h"
12#include "Player.h"
13
15{
16 SPELL_MIGHTY_KICK = 69021, //ick's spell
17 SPELL_SHADOW_BOLT = 69028, //krick's spell
18 SPELL_TOXIC_WASTE = 69024, //krick's spell
19 SPELL_EXPLOSIVE_BARRAGE_KRICK = 69012, //special spell 1
20 SPELL_EXPLOSIVE_BARRAGE_ICK = 69263, //special spell 1
21 SPELL_POISON_NOVA = 68989, //special spell 2
22 SPELL_PURSUIT = 68987, //special spell 3
23
25 SPELL_EXPLODING_ORB = 69017, //visual on exploding orb
26 SPELL_AUTO_GROW = 69020, //grow effect on exploding orb
27 SPELL_HASTY_GROW = 44851, //need to check growing stacks
28 SPELL_EXPLOSIVE_BARRAGE_DAMAGE = 69019, //damage done by orb while exploding
29
30 SPELL_STRANGULATING = 69413, //krick's selfcast in intro
34};
35
64
91
97
99{
101};
102
104{
107};
108
109static const Position outroPos[8] =
110{
111 {828.9342f, 118.6247f, 509.5190f, 0.0000000f}, // Krick's Outro Position
112 {841.0100f, 196.2450f, 573.9640f, 0.2046099f}, // Scourgelord Tyrannus Outro Position (Tele to...)
113 {777.2274f, 119.5521f, 510.0363f, 6.0562930f}, // Sylvanas / Jaine Outro Spawn Position (NPC_SYLVANAS_PART1)
114 {823.3984f, 114.4907f, 509.4899f, 0.0000000f}, // Sylvanas / Jaine Outro Move Position (1)
115 {835.5887f, 139.4345f, 530.9526f, 0.0000000f}, // Tyrannus fly down Position (not sniffed)
116 {828.9342f, 118.6247f, 514.5190f, 0.0000000f}, // Krick's Choke Position
117 {828.9342f, 118.6247f, 509.4958f, 0.0000000f}, // Kirck's Death Position
118 {914.4820f, 143.1602f, 633.3624f, 0.0000000f} // Tyrannus fly up (not sniffed)
119};
120
122{
123 public:
124 boss_ick() : CreatureScript("boss_ick") { }
125
126 struct boss_ickAI : public BossAI
127 {
128 boss_ickAI(Creature* creature) : BossAI(creature, DATA_ICK), _vehicle(creature->GetVehicleKit())
129 {
131 }
132
134 {
135 events.Reset();
136 instance->SetBossState(DATA_ICK, NOT_STARTED);
137 }
138
140 {
142 }
143
144 void EnterCombat(Unit* /*who*/) OVERRIDE
145 {
146 _EnterCombat();
147
148 if (Creature* krick = GetKrick())
149 krick->AI()->Talk(SAY_KRICK_AGGRO);
150
151 events.ScheduleEvent(EVENT_MIGHTY_KICK, 20000);
152 events.ScheduleEvent(EVENT_TOXIC_WASTE, 5000);
153 events.ScheduleEvent(EVENT_SHADOW_BOLT, 10000);
154 events.ScheduleEvent(EVENT_SPECIAL, std::rand() % 35000 + 30000);
155 }
156
158 {
159 me->GetMotionMaster()->Clear();
161 }
162
163 void JustDied(Unit* /*killer*/) OVERRIDE
164 {
165 if (Creature* krick = GetKrick())
166 {
167 _vehicle->RemoveAllPassengers();
168 if (krick->AI())
169 krick->AI()->DoAction(ACTION_OUTRO);
170 }
171
172 instance->SetBossState(DATA_ICK, DONE);
173 }
174
175 void SetTempThreat(float threat)
176 {
177 _tempThreat = threat;
178 }
179
180 void _ResetThreat(Unit* target)
181 {
182 DoModifyThreatPercent(target, -100);
183 me->AddThreat(target, _tempThreat);
184 }
185
187 {
188 if (!me->IsInCombat())
189 return;
190
191 if (!me->GetVictim() && me->getThreatManager().isThreatListEmpty())
192 {
194 return;
195 }
196
197 events.Update(diff);
198
199 if (me->HasUnitState(UNIT_STATE_CASTING))
200 return;
201
202 while (uint32 eventId = events.ExecuteEvent())
203 {
204 switch (eventId)
205 {
207 if (Creature* krick = GetKrick())
208 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
209 krick->CastSpell(target, SPELL_TOXIC_WASTE);
210 events.ScheduleEvent(EVENT_TOXIC_WASTE, std::rand() % 10000 + 7000);
211 break;
213 if (Creature* krick = GetKrick())
214 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1))
215 krick->CastSpell(target, SPELL_SHADOW_BOLT);
216 events.ScheduleEvent(EVENT_SHADOW_BOLT, 15000);
217 return;
220 events.ScheduleEvent(EVENT_MIGHTY_KICK, 25000);
221 return;
222 case EVENT_SPECIAL:
223 //select one of these three special events
225 events.ScheduleEvent(EVENT_SPECIAL, std::rand() % 28000 + 23000);
226 break;
228 if (Creature* krick = GetKrick())
229 {
230 krick->AI()->Talk(SAY_KRICK_BARRAGE_1);
231 krick->AI()->Talk(SAY_KRICK_BARRAGE_2);
232 krick->CastSpell(krick, SPELL_EXPLOSIVE_BARRAGE_KRICK, true);
234 }
235 events.DelayEvents(20000);
236 break;
238 if (Creature* krick = GetKrick())
239 krick->AI()->Talk(SAY_KRICK_POISON_NOVA);
240
243 break;
244 case EVENT_PURSUIT:
245 if (Creature* krick = GetKrick())
246 krick->AI()->Talk(SAY_KRICK_CHASE);
248 break;
249 default:
250 break;
251 }
252 }
253
255 }
256
257 private:
260 };
261
263 {
264 return GetPitOfSaronAI<boss_ickAI>(creature);
265 }
266};
267
269{
270 public:
271 boss_krick() : CreatureScript("boss_krick") { }
272
273 struct boss_krickAI : public ScriptedAI
274 {
275 boss_krickAI(Creature* creature) : ScriptedAI(creature), _instanceScript(creature->GetInstanceScript()), _summons(creature)
276 {
277 }
278
280 {
281 _events.Reset();
283 _outroNpcGUID = 0;
284 _tyrannusGUID = 0;
285
286 me->SetReactState(REACT_PASSIVE);
288 }
289
291 {
293 }
294
296 {
297 if (victim->GetTypeId() != TypeID::TYPEID_PLAYER)
298 return;
299
301 }
302
304 {
305 _summons.Summon(summon);
306 if (summon->GetEntry() == NPC_EXPLODING_ORB)
307 {
308 summon->CastSpell(summon, SPELL_EXPLODING_ORB, true);
309 summon->CastSpell(summon, SPELL_AUTO_GROW, true);
310 }
311 }
312
313 void DoAction(int32 actionId) OVERRIDE
314 {
315 if (actionId == ACTION_OUTRO)
316 {
318 if (tyrannusPtr)
319 tyrannusPtr->NearTeleportTo(outroPos[1].GetPositionX(), outroPos[1].GetPositionY(), outroPos[1].GetPositionZ(), outroPos[1].GetOrientation());
320 else
322
323 tyrannusPtr->SetCanFly(true);
324 me->GetMotionMaster()->MovePoint(POINT_KRICK_INTRO, outroPos[0].GetPositionX(), outroPos[0].GetPositionY(), outroPos[0].GetPositionZ());
325 tyrannusPtr->SetFacingToObject(me);
326 }
327 }
328
330 {
331 if (type != POINT_MOTION_TYPE || id != POINT_KRICK_INTRO)
332 return;
333
336 _events.Reset();
337 _events.ScheduleEvent(EVENT_OUTRO_1, 1000);
338 }
339
341 {
342 if (_phase != PHASE_OUTRO)
343 return;
344
345 _events.Update(diff);
346
347 while (uint32 eventId = _events.ExecuteEvent())
348 {
349 switch (eventId)
350 {
351 case EVENT_OUTRO_1:
352 {
353 if (Creature* temp = me->GetCreature(*me, _instanceScript->GetData64(DATA_JAINA_SYLVANAS_1)))
354 temp->DespawnOrUnsummon();
355
356 Creature* jainaOrSylvanas = NULL;
358 jainaOrSylvanas = me->SummonCreature(NPC_JAINA_PART1, outroPos[2], TempSummonType::TEMPSUMMON_MANUAL_DESPAWN);
359 else
360 jainaOrSylvanas = me->SummonCreature(NPC_SYLVANAS_PART1, outroPos[2], TempSummonType::TEMPSUMMON_MANUAL_DESPAWN);
361
362 if (jainaOrSylvanas)
363 {
364 jainaOrSylvanas->GetMotionMaster()->MovePoint(0, outroPos[3]);
365 _outroNpcGUID = jainaOrSylvanas->GetGUID();
366 }
367 _events.ScheduleEvent(EVENT_OUTRO_2, 6000);
368 break;
369 }
370 case EVENT_OUTRO_2:
371 if (Creature* jainaOrSylvanas = ObjectAccessor::GetCreature(*me, _outroNpcGUID))
372 {
373 jainaOrSylvanas->SetFacingToObject(me);
374 me->SetFacingToObject(jainaOrSylvanas);
376 jainaOrSylvanas->AI()->Talk(SAY_JAYNA_OUTRO_2);
377 else
378 jainaOrSylvanas->AI()->Talk(SAY_SYLVANAS_OUTRO_2);
379 }
380 _events.ScheduleEvent(EVENT_OUTRO_3, 5000);
381 break;
382 case EVENT_OUTRO_3:
384 _events.ScheduleEvent(EVENT_OUTRO_4, 18000);
385 break;
386 case EVENT_OUTRO_4:
387 if (Creature* jainaOrSylvanas = ObjectAccessor::GetCreature(*me, _outroNpcGUID))
388 {
390 jainaOrSylvanas->AI()->Talk(SAY_JAYNA_OUTRO_4);
391 else
392 jainaOrSylvanas->AI()->Talk(SAY_SYLVANAS_OUTRO_4);
393 }
394 _events.ScheduleEvent(EVENT_OUTRO_5, 5000);
395 break;
396 case EVENT_OUTRO_5:
398 _events.ScheduleEvent(EVENT_OUTRO_6, 1000);
399 break;
400 case EVENT_OUTRO_6:
401 if (Creature* tyrannus = me->GetCreature(*me, _instanceScript->GetData64(DATA_TYRANNUS_EVENT)))
402 {
403 tyrannus->SetSpeed(MOVE_FLIGHT, 3.5f, true);
404 tyrannus->GetMotionMaster()->MovePoint(1, outroPos[4]);
405 _tyrannusGUID = tyrannus->GetGUID();
406 }
407 _events.ScheduleEvent(EVENT_OUTRO_7, 5000);
408 break;
409 case EVENT_OUTRO_7:
411 tyrannus->AI()->Talk(SAY_TYRANNUS_OUTRO_7);
412 _events.ScheduleEvent(EVENT_OUTRO_8, 5000);
413 break;
414 case EVENT_OUTRO_8:
416 me->AddUnitMovementFlag(MOVEMENTFLAG_FLYING);
417 me->GetMotionMaster()->MovePoint(0, outroPos[5]);
419 _events.ScheduleEvent(EVENT_OUTRO_9, 2000);
420 break;
421 case EVENT_OUTRO_9:
424 // there shall be some visual spell effect
426 tyrannus->CastSpell(me, SPELL_NECROMANTIC_POWER, true); //not sure if it's the right spell :/
427 _events.ScheduleEvent(EVENT_OUTRO_10, 1000);
428 break;
429 case EVENT_OUTRO_10:
431 me->RemoveUnitMovementFlag(MOVEMENTFLAG_FLYING);
432 me->AddUnitMovementFlag(MOVEMENTFLAG_FALLING_FAR);
433 me->GetMotionMaster()->MovePoint(0, outroPos[6]);
434 _events.ScheduleEvent(EVENT_OUTRO_11, 2000);
435 break;
436 case EVENT_OUTRO_11:
437 DoCast(me, SPELL_KRICK_KILL_CREDIT); // don't really know if we need it
438 me->SetStandState(UNIT_STAND_STATE_DEAD);
439 me->SetHealth(0);
440 _events.ScheduleEvent(EVENT_OUTRO_12, 3000);
441 break;
442 case EVENT_OUTRO_12:
444 tyrannus->AI()->Talk(SAY_TYRANNUS_OUTRO_9);
445 _events.ScheduleEvent(EVENT_OUTRO_13, 2000);
446 break;
447 case EVENT_OUTRO_13:
448 if (Creature* jainaOrSylvanas = ObjectAccessor::GetCreature(*me, _outroNpcGUID))
449 {
451 jainaOrSylvanas->AI()->Talk(SAY_JAYNA_OUTRO_10);
452 else
453 jainaOrSylvanas->AI()->Talk(SAY_SYLVANAS_OUTRO_10);
454 }
455 // End of OUTRO. for now...
456 _events.ScheduleEvent(EVENT_OUTRO_END, 3000);
458 tyrannus->GetMotionMaster()->MovePoint(0, outroPos[7]);
459 break;
460 case EVENT_OUTRO_END:
462 tyrannus->DespawnOrUnsummon();
463
464 me->DisappearAndDie();
465 break;
466 default:
467 break;
468 }
469 }
470 }
471
472 private:
476
480 };
481
483 {
484 return GetPitOfSaronAI<boss_krickAI>(creature);
485 }
486};
487
489{
490 public:
491 spell_krick_explosive_barrage() : SpellScriptLoader("spell_krick_explosive_barrage") { }
492
494 {
496
497 void HandlePeriodicTick(AuraEffect const* /*aurEff*/)
498 {
500 if (Unit* caster = GetCaster())
501 if (caster->GetTypeId() == TypeID::TYPEID_UNIT)
502 {
503 Map::PlayerList const &players = caster->GetMap()->GetPlayers();
504 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
505 if (Player* player = itr->GetSource())
506 if (player->IsWithinDist(caster, 60.0f)) // don't know correct range
507 caster->CastSpell(player, SPELL_EXPLOSIVE_BARRAGE_SUMMON, true);
508 }
509 }
510
515 };
516
521};
522
524{
525 public:
526 spell_ick_explosive_barrage() : SpellScriptLoader("spell_ick_explosive_barrage") { }
527
529 {
531
532 void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
533 {
534 if (Unit* caster = GetCaster())
535 if (caster->GetTypeId() == TypeID::TYPEID_UNIT)
536 caster->GetMotionMaster()->MoveIdle();
537 }
538
539 void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
540 {
541 if (Unit* caster = GetCaster())
542 if (caster->GetTypeId() == TypeID::TYPEID_UNIT)
543 {
544 caster->GetMotionMaster()->Clear();
545 caster->GetMotionMaster()->MoveChase(caster->GetVictim());
546 }
547 }
548
554 };
555
560};
561
563{
564 public:
565 spell_exploding_orb_hasty_grow() : SpellScriptLoader("spell_exploding_orb_hasty_grow") { }
566
568 {
570
571 void OnStackChange(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
572 {
573 if (GetStackAmount() == 15)
574 {
575 Unit* target = GetTarget(); // store target because aura gets removed
576 target->CastSpell(target, SPELL_EXPLOSIVE_BARRAGE_DAMAGE, false);
580 if (Creature* creature = target->ToCreature())
581 creature->DespawnOrUnsummon();
582 }
583 }
584
589 };
590
595};
596
598{
599 public:
600 spell_krick_pursuit() : SpellScriptLoader("spell_krick_pursuit") { }
601
603 {
605
607 {
608 if (GetCaster())
609 if (Creature* ick = GetCaster()->ToCreature())
610 {
611 if (Unit* target = ick->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0, 200.0f, true))
612 {
613 ick->AI()->Talk(SAY_ICK_CHASE_1, target);
614 ick->AddAura(GetSpellInfo()->Id, target);
615 CAST_AI(boss_ick::boss_ickAI, ick->AI())->SetTempThreat(ick->getThreatManager().getThreat(target));
616 ick->AddThreat(target, float(GetEffectValue()));
617 target->AddThreat(ick, float(GetEffectValue()));
618 }
619 }
620 }
621
626 };
627
644
649
651 {
653 }
654};
655
689
Actions
const T & RAND(const T &v1, const T &v2)
std::int32_t int32
Definition Define.h:73
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
std::uint64_t uint64
Definition Define.h:76
#define ASSERT
Definition Errors.h:29
@ DONE
@ NOT_STARTED
@ POINT_MOTION_TYPE
@ TYPEID_PLAYER
Definition Object.h:55
@ TYPEID_UNIT
Definition Object.h:54
@ TEMPSUMMON_MANUAL_DESPAWN
Definition Object.h:75
#define CAST_AI(a, b)
SpellEffIndex
@ EFFECT_1
@ EFFECT_0
@ EFFECT_2
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_ATTACK_ME
@ IMMUNITY_STATE
@ IMMUNITY_EFFECT
@ ALLIANCE
@ SPELL_AURA_LINKED
@ SPELL_AURA_DUMMY
@ SPELL_AURA_MOD_TAUNT
@ SPELL_AURA_MOD_SCALE
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
AuraEffectHandleModes
@ AURA_EFFECT_HANDLE_REAPPLY
@ AURA_EFFECT_HANDLE_REAL
#define SpellEffectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
#define AuraEffectApplyFn(F, I, N, M)
#define AuraEffectRemoveFn(F, I, N, M)
@ MOVEMENTFLAG_FLYING
Definition Unit.h:747
@ MOVEMENTFLAG_FALLING_FAR
Definition Unit.h:735
@ UNIT_STAND_STATE_DEAD
Definition Unit.h:169
@ UNIT_STATE_CASTING
Definition Unit.h:527
@ MOVE_FLIGHT
Definition Unit.h:561
@ REACT_PASSIVE
Definition Unit.h:1156
@ UNIT_FLAG_NON_ATTACKABLE
Definition Unit.h:626
@ SELECT_TARGET_RANDOM
Definition UnitAI.h:23
@ UNIT_FIELD_FLAGS
@ PHASE_COMBAT
@ SPELL_SHADOW_BOLT
void AddSC_boss_ick()
@ 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 const Position 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
@ EVENT_SHADOW_BOLT
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
EventMap events
BossAI(Creature *creature, uint32 bossId)
void _EnterCombat()
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
virtual void EnterEvadeMode()
CreatureScript(const char *name)
MapRefManager PlayerList
Definition Map.h:406
iterator end()
iterator begin()
LinkedListHead::Iterator< MapReference const > const_iterator
void MovePoint(uint32 id, Position const &pos, bool generatePath=true)
static Creature * GetCreature(WorldObject const &u, uint64 guid)
uint64 GetGUID() const
Definition Object.h:119
Creature * ToCreature()
Definition Object.h:207
SpellInfo const * GetSpellInfo()
HookList< EffectHandler > OnEffectHitTarget
int32 GetEffectValue()
Unit * GetCaster()
SpellScriptLoader(const char *name)
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:28
void DoCast(uint32 spellId)
Definition UnitAI.cpp:110
Unit * SelectTarget(SelectAggroTarget targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, int32 aura=0)
Definition UnitAI.cpp:66
void DoCastVictim(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:168
Definition Unit.h:1367
void CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=NULL, AuraEffect const *triggeredByAura=NULL, uint64 originalCaster=0)
void RemoveAurasDueToSpell(uint32 spellId, uint64 casterGUID=0, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
MotionMaster * GetMotionMaster()
Definition Unit.h:2605
void SetFacingToObject(WorldObject *object)
Definition Unit.cpp:9124
void NearTeleportTo(float x, float y, float z, float orientation, bool casting=false)
Definition Unit.cpp:8393
bool SetCanFly(bool enable)
Definition Unit.cpp:9219
void ApplySpellImmune(uint32 spellId, uint32 op, uint32 type, bool apply)
Definition Unit.cpp:3580
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
AuraScript * GetAuraScript() const OVERRIDE
void HandleEffectApply(AuraEffect const *, AuraEffectHandleModes)
void HandleEffectRemove(AuraEffect const *, AuraEffectHandleModes)
AuraScript * GetAuraScript() const OVERRIDE
AuraScript * GetAuraScript() const OVERRIDE
void HandleExtraEffect(AuraEffect const *, AuraEffectHandleModes)
PrepareAuraScript(spell_krick_pursuit_AuraScript)
PrepareSpellScript(spell_krick_pursuit_SpellScript)
AuraScript * GetAuraScript() const OVERRIDE
AuraScript * GetAuraScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
@ NPC_JAINA_PART1
@ NPC_SYLVANAS_PART1
@ DATA_TEAM_IN_INSTANCE
@ NPC_TYRANNUS_EVENTS
@ NPC_EXPLODING_ORB
AI * GetPitOfSaronAI(Creature *creature)
@ DATA_ICK
@ DATA_TYRANNUS_EVENT
@ DATA_KRICK
@ DATA_JAINA_SYLVANAS_1
Creature * me
ScriptedAI(Creature *creature)
void DoModifyThreatPercent(Unit *unit, int32 pct)
void EnterCombat(Unit *) OVERRIDE
void SetTempThreat(float threat)
boss_ickAI(Creature *creature)
void JustDied(Unit *) OVERRIDE
void EnterEvadeMode() OVERRIDE
void _ResetThreat(Unit *target)
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void JustSummoned(Creature *summon) OVERRIDE
void KilledUnit(Unit *victim) OVERRIDE
void DoAction(int32 actionId) OVERRIDE
void MovementInform(uint32 type, uint32 id) OVERRIDE
boss_krickAI(Creature *creature)
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================