TrinityCore
boss_kologarn.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 "ScriptMgr.h"
19#include "InstanceScript.h"
20#include "Map.h"
21#include "MotionMaster.h"
22#include "ObjectAccessor.h"
23#include "ScriptedCreature.h"
24#include "SpellAuraEffects.h"
25#include "SpellScript.h"
26#include "ulduar.h"
27#include "Vehicle.h"
28
29/* ScriptData
30SDName: boss_kologarn
31SD%Complete: 90
32SDComment: @todo Achievements
33SDCategory: Ulduar
34EndScriptData */
35
37{
47
53
54 // Passive
57 SPELL_KOLOGARN_UNK_0 = 65219, // Not found in DBC
58
59 SPELL_BERSERK = 47008 // guess
60};
61
62#define SPELL_TWO_ARM_SMASH RAID_MODE<uint32>(63356,64003)
63#define SPELL_FALLING_RUBBLE RAID_MODE<uint32>(63821,64001)
64#define SPELL_ARM_DEAD_DAMAGE RAID_MODE<uint32>(63629,63979)
65
66enum NPCs
67{
70};
71
73{
85};
86
88{
98};
99
101{
102 public:
103 boss_kologarn() : CreatureScript("boss_kologarn") { }
104
105 struct boss_kologarnAI : public BossAI
106 {
108 left(false), right(false)
109 {
110 me->SetUninteractible(false);
112
114 SetCombatMovement(false);
115 }
116
117 bool left, right;
119
120 void JustEngagedWith(Unit* who) override
121 {
123
130
131 if (Vehicle* vehicle = me->GetVehicleKit())
132 for (uint8 i = 0; i < 2; ++i)
133 if (Unit* arm = vehicle->GetPassenger(i))
134 DoZoneInCombat(arm->ToCreature());
135
137 }
138
139 void Reset() override
140 {
141 _Reset();
142 me->SetUninteractible(false);
144 }
145
146 void JustDied(Unit* /*killer*/) override
147 {
151 me->SetUninteractible(true);
152 me->SetCorpseDelay(604800); // Prevent corpse from despawning.
153 _JustDied();
154 }
155
156 void KilledUnit(Unit* who) override
157 {
158 if (who->GetTypeId() == TYPEID_PLAYER)
159 Talk(SAY_SLAY);
160 }
161
162 void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override
163 {
164 bool isEncounterInProgress = instance->GetBossState(DATA_KOLOGARN) == IN_PROGRESS;
165 if (who->GetEntry() == NPC_LEFT_ARM)
166 {
167 left = apply;
168 if (!apply && isEncounterInProgress)
169 {
172 }
173 }
174
175 else if (who->GetEntry() == NPC_RIGHT_ARM)
176 {
177 right = apply;
178 if (!apply && isEncounterInProgress)
179 {
182 }
183 }
184
185 if (!isEncounterInProgress)
186 return;
187
188 if (!apply)
189 {
191
192 if (Creature* rubbleStalker = who->FindNearestCreature(NPC_RUBBLE_STALKER, 70.0f))
193 {
194 rubbleStalker->CastSpell(rubbleStalker, SPELL_FALLING_RUBBLE, true);
195 rubbleStalker->CastSpell(rubbleStalker, SPELL_SUMMON_RUBBLE, true);
197 }
198
199 if (!right && !left)
201
203 }
204 else
205 {
208 }
209 }
210
211 void JustSummoned(Creature* summon) override
212 {
213 BossAI::JustSummoned(summon);
214 switch (summon->GetEntry())
215 {
218 break;
221 break;
222 case NPC_RUBBLE:
223 summons.Summon(summon);
224 [[fallthrough]];
225 default:
226 return;
227 }
228
229 summon->CastSpell(summon, SPELL_FOCUSED_EYEBEAM_PERIODIC, true);
230 summon->CastSpell(summon, SPELL_FOCUSED_EYEBEAM_VISUAL, true);
232
233 // Victim gets 67351
234 if (!eyebeamTarget.IsEmpty())
235 {
236 if (Unit* target = ObjectAccessor::GetUnit(*summon, eyebeamTarget))
237 {
238 summon->Attack(target, false);
239 summon->GetMotionMaster()->MoveChase(target);
240 }
241 }
242 }
243
244 void UpdateAI(uint32 diff) override
245 {
246 if (!UpdateVictim())
247 return;
248
249 events.Update(diff);
250
252 return;
253
254 while (uint32 eventId = events.ExecuteEvent())
255 {
256 switch (eventId)
257 {
262 break;
263 case EVENT_SWEEP:
264 if (left)
267 break;
268 case EVENT_SMASH:
269 if (left && right)
271 else if (left || right)
274 break;
278 break;
279 case EVENT_ENRAGE:
282 break;
285 {
286 if (Vehicle* vehicle = me->GetVehicleKit())
287 {
288 int8 seat = eventId == EVENT_RESPAWN_LEFT_ARM ? 0 : 1;
290 vehicle->InstallAccessory(entry, seat, true, TEMPSUMMON_MANUAL_DESPAWN, 0);
291 }
292 break;
293 }
294 case EVENT_STONE_GRIP:
295 {
296 if (right)
297 {
301 }
303 break;
304 }
306 if (Unit* eyebeamTargetUnit = SelectTarget(SelectTargetMethod::MaxDistance, 0, 0, true))
307 {
308 eyebeamTarget = eyebeamTargetUnit->GetGUID();
310 }
312 break;
313 }
314
316 return;
317 }
318 }
319 };
320
321 CreatureAI* GetAI(Creature* creature) const override
322 {
323 return GetUlduarAI<boss_kologarnAI>(creature);
324 }
325};
326
327// 63633 - Summon Rubble
329{
330 public:
331 spell_ulduar_rubble_summon() : SpellScriptLoader("spell_ulduar_rubble_summon") { }
332
334 {
335 void HandleScript(SpellEffIndex /*effIndex*/)
336 {
337 Unit* caster = GetCaster();
338 if (!caster)
339 return;
340
342 uint32 spellId = GetEffectValue();
343 for (uint8 i = 0; i < 5; ++i)
344 caster->CastSpell(caster, spellId, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
345 .SetOriginalCaster(originalCaster));
346 }
347
348 void Register() override
349 {
351 }
352 };
353
354 SpellScript* GetSpellScript() const override
355 {
357 }
358};
359
360// predicate function to select non main tank target
362{
363 public:
364 StoneGripTargetSelector(Creature* me, Unit const* victim) : _me(me), _victim(victim) { }
365
367 {
368 if (target == _victim && _me->GetThreatManager().GetThreatListSize() > 1)
369 return true;
370
371 if (target->GetTypeId() != TYPEID_PLAYER)
372 return true;
373
374 return false;
375 }
376
378 Unit const* _victim;
379};
380
381// 62166, 63981 - Stone Grip
383{
384 public:
385 spell_ulduar_stone_grip_cast_target() : SpellScriptLoader("spell_ulduar_stone_grip_cast_target") { }
386
388 {
389 bool Load() override
390 {
391 if (GetCaster()->GetTypeId() != TYPEID_UNIT)
392 return false;
393 return true;
394 }
395
396 void FilterTargetsInitial(std::list<WorldObject*>& unitList)
397 {
398 // Remove "main tank" and non-player targets
399 unitList.remove_if(StoneGripTargetSelector(GetCaster()->ToCreature(), GetCaster()->GetThreatManager().GetCurrentVictim()));
400 // Maximum affected targets per difficulty mode
401 uint32 maxTargets = 1;
402 if (GetSpellInfo()->Id == 63981)
403 maxTargets = 3;
404
405 // Return a random amount of targets based on maxTargets
406 while (maxTargets < unitList.size())
407 {
408 std::list<WorldObject*>::iterator itr = unitList.begin();
409 advance(itr, urand(0, unitList.size()-1));
410 unitList.erase(itr);
411 }
412
413 // For subsequent effects
414 _unitList = unitList;
415 }
416
417 void FillTargetsSubsequential(std::list<WorldObject*>& unitList)
418 {
419 unitList = _unitList;
420 }
421
422 void Register() override
423 {
427 }
428
429 private:
430 // Shared between effects
431 std::list<WorldObject*> _unitList;
432 };
433
434 SpellScript* GetSpellScript() const override
435 {
437 }
438};
439
440// 65594 - Cancel Stone Grip
442{
443 public:
444 spell_ulduar_cancel_stone_grip() : SpellScriptLoader("spell_ulduar_cancel_stone_grip") { }
445
447 {
448 bool Validate(SpellInfo const* spellInfo) override
449 {
450 return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } });
451 }
452
453 void HandleScript(SpellEffIndex /*effIndex*/)
454 {
455 Unit* target = GetHitUnit();
456 if (!target || !target->GetVehicle())
457 return;
458
459 SpellEffIndex effectIndexToCancel = EFFECT_0;
460 if (target->GetMap()->Is25ManRaid())
461 effectIndexToCancel = EFFECT_1;
462
463 target->RemoveAura(GetEffectInfo(effectIndexToCancel).CalcValue());
464 }
465
466 void Register() override
467 {
469 }
470 };
471
472 SpellScript* GetSpellScript() const override
473 {
475 }
476};
477
478// 64702 - Squeezed Lifeless
480{
481 public:
482 spell_ulduar_squeezed_lifeless() : SpellScriptLoader("spell_ulduar_squeezed_lifeless") { }
483
485 {
487 {
488 if (GetHitUnit()->GetTypeId() != TYPEID_PLAYER || !GetHitUnit()->GetVehicle())
489 return;
490
493 Position pos;
494 pos.m_positionX = 1756.25f + irand(-3, 3);
495 pos.m_positionY = -8.3f + irand(-3, 3);
496 pos.m_positionZ = 448.8f;
497 pos.SetOrientation(float(M_PI));
499 GetHitUnit()->ExitVehicle(&pos);
501 }
502
503 void Register() override
504 {
506 }
507 };
508
509 SpellScript* GetSpellScript() const override
510 {
512 }
513};
514
515// 64224, 64225 - Stone Grip Absorb
517{
518 public:
519 spell_ulduar_stone_grip_absorb() : SpellScriptLoader("spell_ulduar_stone_grip_absorb") { }
520
522 {
525 void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
526 {
527 if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_ENEMY_SPELL)
528 return;
529
530 if (GetOwner()->GetTypeId() != TYPEID_UNIT)
531 return;
532
533 uint32 rubbleStalkerEntry = (GetOwner()->GetMap()->GetDifficultyID() == DIFFICULTY_NORMAL ? 33809 : 33942);
534 Creature* rubbleStalker = GetOwner()->FindNearestCreature(rubbleStalkerEntry, 200.0f, true);
535 if (rubbleStalker)
536 rubbleStalker->CastSpell(rubbleStalker, SPELL_STONE_GRIP_CANCEL, true);
537 }
538
539 void Register() override
540 {
542 }
543 };
544
545 AuraScript* GetAuraScript() const override
546 {
548 }
549};
550
551// 62056, 63985 - Stone Grip
553{
554 public:
555 spell_ulduar_stone_grip() : SpellScriptLoader("spell_ulduar_stone_grip") { }
556
558 {
559 void OnRemoveStun(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
560 {
562 }
563
564 void OnRemoveVehicle(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
565 {
567 Unit* caster = GetCaster();
568 if (!caster)
569 return;
570
571 Position exitPosition;
572 exitPosition.m_positionX = 1750.0f;
573 exitPosition.m_positionY = -7.5f + frand(-3.0f, 3.0f);
574 exitPosition.m_positionZ = 457.9322f;
575
576 // Remove pending passengers before exiting vehicle - might cause an Uninstall
578 caster->_ExitVehicle(&exitPosition);
579 caster->RemoveAurasDueToSpell(GetId());
580
581 // Temporarily relocate player to vehicle exit dest serverside to send proper fall movement
582 // beats me why blizzard sends these 2 spline packets one after another instantly
583 Position oldPos = caster->GetPosition();
584 caster->Relocate(exitPosition);
585 caster->GetMotionMaster()->MoveFall();
586 caster->Relocate(oldPos);
587 }
588
589 void Register() override
590 {
593 }
594 };
595
596 AuraScript* GetAuraScript() const override
597 {
599 }
600};
601
602// 63720, 64004 - Stone Shout
604{
605 public:
606 spell_kologarn_stone_shout() : SpellScriptLoader("spell_kologarn_stone_shout") { }
607
609 {
610 void FilterTargets(std::list<WorldObject*>& targets)
611 {
612 targets.remove_if([](WorldObject* object) -> bool
613 {
614 if (object->GetTypeId() == TYPEID_PLAYER)
615 return false;
616
617 if (Creature* creature = object->ToCreature())
618 return !creature->IsPet();
619
620 return true;
621 });
622 }
623
624 void Register() override
625 {
627 }
628 };
629
630 SpellScript* GetSpellScript() const override
631 {
633 }
634};
635
636// 63342 - Focused Eyebeam Summon Trigger
638{
639 public:
640 spell_kologarn_summon_focused_eyebeam() : SpellScriptLoader("spell_kologarn_summon_focused_eyebeam") { }
641
643 {
645 {
646 PreventHitDefaultEffect(effIndex);
647 GetCaster()->CastSpell(GetCaster(), GetEffectInfo().TriggerSpell, true);
648 }
649
650 void Register() override
651 {
654 }
655 };
656
657 SpellScript* GetSpellScript() const override
658 {
660 }
661};
662
664{
665 new boss_kologarn();
674}
#define M_PI
Definition: Common.h:115
@ DIFFICULTY_NORMAL
Definition: DBCEnums.h:875
uint8_t uint8
Definition: Define.h:144
int8_t int8
Definition: Define.h:140
uint32_t uint32
Definition: Define.h:142
@ IN_PROGRESS
@ TEMPSUMMON_MANUAL_DESPAWN
Definition: ObjectDefines.h:70
@ TYPEID_UNIT
Definition: ObjectGuid.h:40
@ TYPEID_PLAYER
Definition: ObjectGuid.h:41
Spells
Definition: PlayerAI.cpp:32
float frand(float min, float max)
Definition: Random.cpp:55
int32 irand(int32 min, int32 max)
Definition: Random.cpp:35
uint32 urand(uint32 min, uint32 max)
Definition: Random.cpp:42
if(posix_memalign(&__mallocedMemory, __align, __size)) return NULL
SpellEffIndex
Definition: SharedDefines.h:29
@ EFFECT_1
Definition: SharedDefines.h:31
@ EFFECT_0
Definition: SharedDefines.h:30
@ EFFECT_2
Definition: SharedDefines.h:32
@ TARGET_UNIT_SRC_AREA_ENEMY
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_INSTAKILL
@ SPELL_EFFECT_FORCE_CAST
AuraEffectHandleModes
@ AURA_EFFECT_HANDLE_REAL
@ AURA_REMOVE_BY_ENEMY_SPELL
@ SPELL_AURA_CONTROL_VEHICLE
@ SPELL_AURA_SCHOOL_ABSORB
@ SPELL_AURA_MOD_STUN
@ TRIGGERED_FULL_MASK
Used when doing CastSpell with triggered == true.
Definition: SpellDefines.h:266
#define SpellEffectFn(F, I, N)
Definition: SpellScript.h:842
#define SpellObjectAreaTargetSelectFn(F, I, N)
Definition: SpellScript.h:864
#define AuraEffectRemoveFn(F, I, N, M)
Definition: SpellScript.h:2040
@ REACT_PASSIVE
Definition: UnitDefines.h:506
@ UNIT_STATE_ROOT
Definition: Unit.h:265
@ UNIT_STATE_CASTING
Definition: Unit.h:270
@ SAY_DEATH
@ SAY_AGGRO
@ SAY_GRAB_PLAYER
@ SAY_SHOCKWAVE
@ SAY_RIGHT_ARM_GONE
@ SAY_LEFT_ARM_GONE
@ EMOTE_STONE_GRIP
@ SAY_SLAY
@ SAY_BERSERK
@ SPELL_FOCUSED_EYEBEAM_VISUAL
@ SPELL_ARM_SWEEP
@ SPELL_ONE_ARM_SMASH
@ SPELL_PETRIFY_BREATH
@ SPELL_KOLOGARN_UNK_0
@ SPELL_SUMMON_FOCUSED_EYEBEAM
@ SPELL_ARM_ENTER_VEHICLE
@ SPELL_STONE_GRIP
@ SPELL_STONE_GRIP_CANCEL
@ SPELL_ARM_ENTER_VISUAL
@ SPELL_STONE_SHOUT
@ SPELL_FOCUSED_EYEBEAM_VISUAL_LEFT
@ SPELL_FOCUSED_EYEBEAM_PERIODIC
@ SPELL_KOLOGARN_REDUCE_PARRY
@ SPELL_BERSERK
@ SPELL_FOCUSED_EYEBEAM_VISUAL_RIGHT
@ SPELL_KOLOGARN_PACIFY
@ SPELL_SUMMON_RUBBLE
@ NPC_ARM_SWEEP_STALKER
@ NPC_RUBBLE_STALKER
#define SPELL_FALLING_RUBBLE
void AddSC_boss_kologarn()
#define SPELL_TWO_ARM_SMASH
#define SPELL_ARM_DEAD_DAMAGE
@ EVENT_RESPAWN_RIGHT_ARM
@ EVENT_ENRAGE
@ EVENT_INSTALL_ACCESSORIES
@ EVENT_STONE_GRIP
@ EVENT_SMASH
@ EVENT_RESPAWN_LEFT_ARM
@ EVENT_MELEE_CHECK
@ EVENT_NONE
@ EVENT_FOCUSED_EYEBEAM
@ EVENT_SWEEP
@ EVENT_STONE_SHOUT
Yells
int32 GetAmount() const
void PreventDefaultAction()
AuraApplication const * GetTargetApplication() const
HookList< EffectApplyHandler > AfterEffectRemove
Definition: SpellScript.h:2039
WorldObject * GetOwner() const
Unit * GetCaster() const
Unit * GetTarget() const
HookList< EffectApplyHandler > OnEffectRemove
Definition: SpellScript.h:2035
Unit * GetUnitOwner() const
uint32 GetId() const
InstanceScript *const instance
void JustEngagedWith(Unit *who) override
void JustSummoned(Creature *summon) override
SummonList summons
EventMap events
void _JustDied()
void DoZoneInCombat()
Definition: CreatureAI.h:161
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
Definition: CreatureAI.cpp:56
bool UpdateVictim()
Definition: CreatureAI.cpp:245
Creature *const me
Definition: CreatureAI.h:61
void SetReactState(ReactStates st)
Definition: Creature.h:160
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
Definition: Creature.cpp:2415
void SetCorpseDelay(uint32 delay, bool ignoreCorpseDecayRatio=false)
Definition: Creature.h:104
uint32 ExecuteEvent()
Definition: EventMap.cpp:73
void Update(uint32 time)
Definition: EventMap.h:56
void ScheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
Definition: EventMap.cpp:36
void CancelEvent(uint32 eventId)
Definition: EventMap.cpp:131
virtual ObjectGuid GetGuidData(uint32 type) const override
EncounterState GetBossState(uint32 id) const
void TriggerGameEvent(uint32 gameEventId, WorldObject *source=nullptr, WorldObject *target=nullptr) override
bool Is25ManRaid() const
Definition: Map.cpp:3320
Difficulty GetDifficultyID() const
Definition: Map.h:324
void MoveChase(Unit *target, Optional< ChaseRange > dist={}, Optional< ChaseAngle > angle={})
void MoveTargetedHome()
void MoveFall(uint32 id=0)
static ObjectGuid const Empty
Definition: ObjectGuid.h:274
bool IsEmpty() const
Definition: ObjectGuid.h:319
void Clear()
Definition: ObjectGuid.h:286
static Creature * ToCreature(Object *o)
Definition: Object.h:219
TypeID GetTypeId() const
Definition: Object.h:173
uint32 GetEntry() const
Definition: Object.h:161
uint32 const Id
Definition: SpellInfo.h:325
static bool ValidateSpellEffect(std::initializer_list< std::pair< uint32, SpellEffIndex > > effects)
Definition: SpellScript.h:173
Unit * GetCaster() const
void PreventHitDefaultEffect(SpellEffIndex effIndex)
Unit * GetHitUnit() const
int32 GetEffectValue() const
SpellEffectInfo const & GetEffectInfo() const
HookList< EffectHandler > OnEffectHitTarget
Definition: SpellScript.h:840
SpellInfo const * GetSpellInfo() const
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
Definition: SpellScript.h:863
StoneGripTargetSelector(Creature *me, Unit const *victim)
bool operator()(WorldObject *target)
void Summon(Creature const *summon)
size_t GetThreatListSize() const
SpellCastResult DoCastVictim(uint32 spellId, CastSpellExtraArgs const &args={})
Definition: UnitAI.cpp:180
Unit * SelectTarget(SelectTargetMethod targetType, uint32 offset=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
Definition: UnitAI.cpp:79
SpellCastResult DoCast(uint32 spellId)
Definition: UnitAI.cpp:89
Definition: Unit.h:627
bool IsWithinMeleeRange(Unit const *obj) const
Definition: Unit.h:699
Vehicle * GetVehicle() const
Definition: Unit.h:1713
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
Definition: Unit.cpp:3685
void UpdateObjectVisibility(bool forced=true) override
Definition: Unit.cpp:11836
ThreatManager & GetThreatManager()
Definition: Unit.h:1063
void SetControlled(bool apply, UnitState state)
Definition: Unit.cpp:10911
MotionMaster * GetMotionMaster()
Definition: Unit.h:1652
void _ExitVehicle(Position const *exitPosition=nullptr)
Definition: Unit.cpp:12223
void SetUninteractible(bool apply)
Definition: Unit.cpp:8147
bool Attack(Unit *victim, bool meleeAttack)
Definition: Unit.cpp:5670
Unit * GetVictim() const
Definition: Unit.h:715
bool HasUnitState(const uint32 f) const
Definition: Unit.h:732
Vehicle * GetVehicleKit() const
Definition: Unit.h:1711
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition: Unit.cpp:3831
virtual void ExitVehicle(Position const *exitPosition=nullptr)
Definition: Unit.cpp:12204
void RemovePendingEventsForPassenger(Unit *passenger)
Definition: Vehicle.cpp:762
Map * GetMap() const
Definition: Object.h:624
InstanceScript * GetInstanceScript() const
Definition: Object.cpp:1042
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition: Object.cpp:2896
void DestroyForNearbyPlayers()
Definition: Object.cpp:3623
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition: Object.cpp:2148
CreatureAI * GetAI(Creature *creature) const override
SpellScript * GetSpellScript() const override
SpellScript * GetSpellScript() const override
SpellScript * GetSpellScript() const override
SpellScript * GetSpellScript() const override
SpellScript * GetSpellScript() const override
void OnRemoveStun(AuraEffect const *aurEff, AuraEffectHandleModes)
void OnRemoveVehicle(AuraEffect const *, AuraEffectHandleModes)
AuraScript * GetAuraScript() const override
SpellScript * GetSpellScript() const override
AuraScript * GetAuraScript() const override
void apply(T *val)
Definition: ByteConverter.h:41
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
constexpr void SetOrientation(float orientation)
Definition: Position.h:71
float m_positionZ
Definition: Position.h:55
float m_positionX
Definition: Position.h:53
float m_positionY
Definition: Position.h:54
constexpr void GetPosition(float &x, float &y) const
Definition: Position.h:81
constexpr void Relocate(float x, float y)
Definition: Position.h:63
void SetCombatMovement(bool allowMovement)
void JustSummoned(Creature *summon) override
void KilledUnit(Unit *who) override
void PassengerBoarded(Unit *who, int8, bool apply) override
== Fields =======================================
void JustDied(Unit *) override
boss_kologarnAI(Creature *creature)
void UpdateAI(uint32 diff) override
void JustEngagedWith(Unit *who) override
@ DATA_KOLOGARN
Definition: ulduar.h:42
@ NPC_RIGHT_ARM
Definition: ulduar.h:75
@ NPC_FOCUSED_EYEBEAM_RIGHT
Definition: ulduar.h:73
@ NPC_LEFT_ARM
Definition: ulduar.h:74
@ NPC_FOCUSED_EYEBEAM
Definition: ulduar.h:72
@ NPC_RUBBLE
Definition: ulduar.h:76
@ CRITERIA_DISARMED
Definition: ulduar.h:351