Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
boss_twin_valkyr.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// Known bugs:
7// - They should be floating but they aren't respecting the floor =(
8// - Hardcoded bullets spawner
9
10#include "ScriptMgr.h"
11#include "ScriptedCreature.h"
12#include "ScriptedGossip.h"
13#include "SpellScript.h"
14#include "SpellAuraEffects.h"
15#include "GridNotifiers.h"
16#include "GridNotifiersImpl.h"
17#include "Cell.h"
18#include "CellImpl.h"
20
33
35{
38};
39
47
80
81#define SPELL_DARK_ESSENCE_HELPER RAID_MODE<uint32>(65684, 67176, 67177, 67178)
82#define SPELL_LIGHT_ESSENCE_HELPER RAID_MODE<uint32>(65686, 67222, 67223, 67224)
83
84#define SPELL_POWERING_UP_HELPER RAID_MODE<uint32>(67590, 67602, 67603, 67604)
85
86#define SPELL_UNLEASHED_DARK_HELPER RAID_MODE<uint32>(65808, 67172, 67173, 67174)
87#define SPELL_UNLEASHED_LIGHT_HELPER RAID_MODE<uint32>(65795, 67238, 67239, 67240)
88
94
95#define ESSENCE_REMOVE 0
96#define ESSENCE_APPLY 1
97
99{
100 public:
101 explicit OrbsDespawner(Creature* creature) : _creature(creature)
102 {
103 }
104
105 bool Execute(uint64 /*currTime*/, uint32 /*diff*/)
106 {
108 _creature->VisitNearbyGridObject(5000.0f, worker);
109 return true;
110 }
111
112 void operator()(Creature* creature) const
113 {
114 switch (creature->GetEntry())
115 {
116 case NPC_BULLET_DARK:
117 case NPC_BULLET_LIGHT:
118 creature->DespawnOrUnsummon();
119 return;
120 default:
121 return;
122 }
123 }
124
125 private:
127};
128
130{
132 {
133 }
134
136 {
138 me->SetReactState(REACT_PASSIVE);
139 me->ModifyAuraState(AuraState, true);
140 /* Uncomment this once that they are floating above the ground
141 me->SetLevitate(true);
142 me->SetFlying(true); */
143 IsBerserk = false;
144
147 TouchTimer = std::rand() % 15000 + 10000;
149
150 summons.DespawnAll();
151 }
152
154 {
155 if (instance)
156 instance->SetBossState(BOSS_VALKIRIES, FAIL);
157
158 summons.DespawnAll();
159 me->DespawnOrUnsummon();
160 }
161
163 {
164 if (uiType != POINT_MOTION_TYPE)
165 return;
166
167 switch (uiId)
168 {
169 case 1:
171 me->SetReactState(REACT_AGGRESSIVE);
172 break;
173 default:
174 break;
175 }
176 }
177
179 {
180 if (who->GetTypeId() == TypeID::TYPEID_PLAYER)
181 {
183 if (instance)
185 }
186 }
187
189 {
190 summons.Summon(summoned);
191 }
192
194 {
195 switch (summoned->GetEntry())
196 {
198 instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_LIGHT_ESSENCE_HELPER);
199 instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_POWERING_UP_HELPER);
200 break;
201 case NPC_DARK_ESSENCE:
202 instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_DARK_ESSENCE_HELPER);
203 instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_POWERING_UP_HELPER);
204 break;
206 me->m_Events.AddEvent(new OrbsDespawner(me), me->m_Events.CalculateTime(100));
207 break;
208 default:
209 break;
210 }
211 summons.Despawn(summoned);
212 }
213
214 void JustDied(Unit* /*killer*/) OVERRIDE
215 {
217 if (instance)
218 {
219 if (Creature* pSister = GetSister())
220 {
221 if (!pSister->IsAlive())
222 {
225 _JustDied();
226 }
227 else
228 {
230 instance->SetBossState(BOSS_VALKIRIES, SPECIAL);
231 }
232 }
233 }
234 summons.DespawnAll();
235 }
236
237 // Called when sister pointer needed
239 {
240 return Unit::GetCreature((*me), instance->GetData64(SisterNpcId));
241 }
242
243 void EnterCombat(Unit* /*who*/) OVERRIDE
244 {
245 me->SetInCombatWithZone();
246 if (instance)
247 {
248 if (Creature* pSister = GetSister())
249 {
250 me->AddAura(MyEmphatySpellId, pSister);
251 pSister->SetInCombatWithZone();
252 }
253 instance->SetBossState(BOSS_VALKIRIES, IN_PROGRESS);
254 }
255
258 }
259
261 {
262 switch (action)
263 {
264 case ACTION_VORTEX:
265 Stage = me->GetEntry() == NPC_LIGHTBANE ? 2 : 1;
266 break;
267 case ACTION_PACT:
268 Stage = me->GetEntry() == NPC_LIGHTBANE ? 1 : 2;
269 break;
270 default:
271 break;
272 }
273 }
274
275 void EnableDualWield(bool mode = true)
276 {
278 me->SetCanDualWield(mode);
279 me->UpdateDamagePhysical(mode ? WeaponAttackType::OFF_ATTACK : WeaponAttackType::BASE_ATTACK);
280 }
281
283 {
284 if (!instance || !UpdateVictim())
285 return;
286
287 if (me->HasUnitState(UNIT_STATE_CASTING))
288 return;
289
290 switch (Stage)
291 {
292 case 0:
293 break;
294 case 1: // Vortex
295 if (SpecialAbilityTimer <= diff)
296 {
297 if (Creature* pSister = GetSister())
298 pSister->AI()->DoAction(ACTION_VORTEX);
301 Stage = 0;
303 }
304 else
305 SpecialAbilityTimer -= diff;
306 break;
307 case 2: // Shield + Pact
308 if (SpecialAbilityTimer <= diff)
309 {
312 if (Creature* pSister = GetSister())
313 {
314 pSister->AI()->DoAction(ACTION_PACT);
315 pSister->CastSpell(pSister, SPELL_POWER_TWINS, false);
316 }
319 Stage = 0;
321 }
322 else
323 SpecialAbilityTimer -= diff;
324 break;
325 default:
326 break;
327 }
328
329 if (SpikeTimer <= diff)
330 {
333 }
334 else
335 SpikeTimer -= diff;
336
337 if (IsHeroic() && TouchTimer <= diff)
338 {
339 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 200.0f, true, OtherEssenceSpellId))
340 me->CastCustomSpell(TouchSpellId, SPELLVALUE_MAX_TARGETS, 1, target, false);
341 TouchTimer = std::rand() % (15 * IN_MILLISECONDS) + (10 * IN_MILLISECONDS);
342 }
343 else
344 TouchTimer -= diff;
345
346 if (!IsBerserk && BerserkTimer <= diff)
347 {
350 IsBerserk = true;
351 }
352 else
353 BerserkTimer -= diff;
354
356 }
357
358 protected:
360
363
369
380};
381
383{
384 public:
385 boss_fjola() : CreatureScript("boss_fjola") { }
386
388 {
390 {
391 }
392
414
416 {
417 if (instance)
419
420 me->SummonCreature(NPC_BULLET_CONTROLLER, ToCCommonLoc[1].GetPositionX(), ToCCommonLoc[1].GetPositionY(), ToCCommonLoc[1].GetPositionZ(), 0.0f, TempSummonType::TEMPSUMMON_MANUAL_DESPAWN);
422 }
423
425 {
426 instance->DoUseDoorOrButton(instance->GetData64(GO_MAIN_GATE_DOOR));
428 }
429
431 {
432 if (instance)
433 instance->DoUseDoorOrButton(instance->GetData64(GO_MAIN_GATE_DOOR));
434
436 }
437 };
438
440 {
441 return new boss_fjolaAI(creature);
442 }
443};
444
479
481{
482 public:
483 npc_essence_of_twin() : CreatureScript("npc_essence_of_twin") { }
484
486 {
487 npc_essence_of_twinAI(Creature* creature) : ScriptedAI(creature) { }
488
490 {
491 uint32 spellReturned = 0;
492 switch (me->GetEntry())
493 {
496 break;
497 case NPC_DARK_ESSENCE:
499 break;
500 default:
501 break;
502 }
503
504 return spellReturned;
505 }
506 };
507
509 {
510 return new npc_essence_of_twinAI(creature);
511 };
512
513 bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
514 {
515 player->RemoveAurasDueToSpell(creature->GetAI()->GetData(ESSENCE_REMOVE));
516 player->CastSpell(player, creature->GetAI()->GetData(ESSENCE_APPLY), true);
517 player->CLOSE_GOSSIP_MENU();
518 return true;
519 }
520};
521
523{
525 {
526 }
527
529 {
530 float x0 = ToCCommonLoc[1].GetPositionX(), y0 = ToCCommonLoc[1].GetPositionY(), r = 47.0f;
531 float y = y0;
532 float x = frand(x0 - r, x0 + r);
533 float sq = pow(r, 2) - pow(x - x0, 2);
534 float rt = sqrtf(fabs(sq));
535 if (std::rand() % 1)
536 y = y0 + rt;
537 else
538 y = y0 - rt;
539 me->GetMotionMaster()->MovePoint(0, x, y, me->GetPositionZ());
540 }
541
543 {
545 me->SetReactState(REACT_PASSIVE);
546 me->SetDisableGravity(true);
547 me->SetCanFly(true);
548 SetCombatMovement(false);
550 RangeCheckTimer = 500;
551 }
552
554 {
555 if (uiType != POINT_MOTION_TYPE)
556 return;
557
558 switch (uiId)
559 {
560 case 0:
561 if ((std::rand() % 3) == 0)
563 else
564 me->DisappearAndDie();
565 break;
566 default:
567 break;
568 }
569 }
570
571 protected:
573};
574
576{
577 public:
578 npc_unleashed_dark() : CreatureScript("npc_unleashed_dark") { }
579
581 {
583
585 {
586 if (RangeCheckTimer < diff)
587 {
588 if (me->SelectNearestPlayer(3.0f))
589 {
591 me->GetMotionMaster()->MoveIdle();
592 me->DespawnOrUnsummon(1000);
593 }
594 RangeCheckTimer = 500;
595 }
596 else
597 RangeCheckTimer -= diff;
598 }
599 };
600
602 {
603 return new npc_unleashed_darkAI(creature);
604 }
605};
606
608{
609 public:
610 npc_unleashed_light() : CreatureScript("npc_unleashed_light") { }
611
613 {
615
617 {
618 if (RangeCheckTimer < diff)
619 {
620 if (me->SelectNearestPlayer(3.0f))
621 {
623 me->GetMotionMaster()->MoveIdle();
624 me->DespawnOrUnsummon(1000);
625 }
626 RangeCheckTimer = 500;
627 }
628 else
629 RangeCheckTimer -= diff;
630 }
631 };
632
634 {
635 return new npc_unleashed_lightAI(creature);
636 }
637};
638
640{
641 public:
642 npc_bullet_controller() : CreatureScript("npc_bullet_controller") { }
643
645 {
647 {
648 SetCombatMovement(false);
649 }
650
655
656 void UpdateAI(uint32 /*diff*/) OVERRIDE
657 {
658 UpdateVictim();
659 }
660 };
661
663 {
664 return new npc_bullet_controllerAI(creature);
665 }
666};
667
669{
670 public:
671 spell_powering_up() : SpellScriptLoader("spell_powering_up") { }
672
674 {
675 public:
677
678 uint32 spellId;
680
682 {
683 spellId = sSpellMgr->GetSpellIdForDifficulty(SPELL_SURGE_OF_SPEED, GetCaster());
684 if (!sSpellMgr->GetSpellInfo(spellId))
685 return false;
686
687 poweringUp = sSpellMgr->GetSpellIdForDifficulty(SPELL_POWERING_UP, GetCaster());
688 if (!sSpellMgr->GetSpellInfo(poweringUp))
689 return false;
690
691 return true;
692 }
693
695 {
696 if (Unit* target = GetHitUnit())
697 {
698 if (Aura* pAura = target->GetAura(poweringUp))
699 {
700 if (pAura->GetStackAmount() >= 100)
701 {
702 if (target->GetDummyAuraEffect(SPELLFAMILY_GENERIC, 2206, EFFECT_1))
703 target->CastSpell(target, SPELL_EMPOWERED_DARK, true);
704
705 if (target->GetDummyAuraEffect(SPELLFAMILY_GENERIC, 2845, EFFECT_1))
706 target->CastSpell(target, SPELL_EMPOWERED_LIGHT, true);
707
708 target->RemoveAurasDueToSpell(poweringUp);
709 }
710 }
711 }
712 }
713
718 };
719
721 {
723 }
724};
725
727{
728 public:
729 spell_valkyr_essences() : SpellScriptLoader("spell_valkyr_essences") { }
730
732 {
734
736
738 {
739 spellId = sSpellMgr->GetSpellIdForDifficulty(SPELL_SURGE_OF_SPEED, GetCaster());
740 if (!sSpellMgr->GetSpellInfo(spellId))
741 return false;
742 return true;
743 }
744
745 void Absorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & /*absorbAmount*/)
746 {
747 if (Unit* owner = GetUnitOwner())
748 {
749 if (dmgInfo.GetSpellInfo())
750 {
751 if (uint32 poweringUp = sSpellMgr->GetSpellIdForDifficulty(SPELL_POWERING_UP, owner))
752 {
753 if ((std::rand() % 99) < 5)
755
756 // Twin Vortex part
757 uint32 lightVortex = sSpellMgr->GetSpellIdForDifficulty(SPELL_LIGHT_VORTEX_DAMAGE, owner);
758 uint32 darkVortex = sSpellMgr->GetSpellIdForDifficulty(SPELL_DARK_VORTEX_DAMAGE, owner);
759 int32 stacksCount = int32(dmgInfo.GetSpellInfo()->Effects[EFFECT_0].CalcValue()) * 0.001 - 1;
760
761 if (lightVortex && darkVortex && stacksCount)
762 {
763 if (dmgInfo.GetSpellInfo()->Id == darkVortex || dmgInfo.GetSpellInfo()->Id == lightVortex)
764 {
765 Aura* pAura = owner->GetAura(poweringUp);
766 if (pAura)
767 {
768 pAura->ModStackAmount(stacksCount);
769 owner->CastSpell(owner, poweringUp, true);
770 }
771 else
772 {
773 owner->CastSpell(owner, poweringUp, true);
774 if (Aura* pTemp = owner->GetAura(poweringUp))
775 pTemp->ModStackAmount(stacksCount);
776 }
777 }
778 }
779
780 // Picking floating balls
781 uint32 unleashedDark = sSpellMgr->GetSpellIdForDifficulty(SPELL_UNLEASHED_DARK, owner);
782 uint32 unleashedLight = sSpellMgr->GetSpellIdForDifficulty(SPELL_UNLEASHED_LIGHT, owner);
783
784 if (unleashedDark && unleashedLight)
785 {
786 if (dmgInfo.GetSpellInfo()->Id == unleashedDark || dmgInfo.GetSpellInfo()->Id == unleashedLight)
787 {
788 // need to do the things in this order, else players might have 100 charges of Powering Up without anything happening
789 Aura* pAura = owner->GetAura(poweringUp);
790 if (pAura)
791 {
792 // 2 lines together add the correct amount of buff stacks
793 pAura->ModStackAmount(stacksCount);
794 owner->CastSpell(owner, poweringUp, true);
795 }
796 else
797 {
798 owner->CastSpell(owner, poweringUp, true);
799 if (Aura* pTemp = owner->GetAura(poweringUp))
800 pTemp->ModStackAmount(stacksCount);
801 }
802 }
803 }
804 }
805 }
806 }
807 }
808
813 };
814
819};
820
822{
823 public:
824 spell_power_of_the_twins() : SpellScriptLoader("spell_power_of_the_twins") { }
825
827 {
829
831 {
833 }
834
835 void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
836 {
837 if (InstanceScript* instance = GetCaster()->GetInstanceScript())
838 {
839 if (Creature* Valk = ObjectAccessor::GetCreature(*GetCaster(), instance->GetData64(GetCaster()->GetEntry())))
840 CAST_AI(boss_twin_baseAI, Valk->AI())->EnableDualWield(true);
841 }
842 }
843
844 void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
845 {
846 if (InstanceScript* instance = GetCaster()->GetInstanceScript())
847 {
848 if (Creature* Valk = ObjectAccessor::GetCreature(*GetCaster(), instance->GetData64(GetCaster()->GetEntry())))
849 CAST_AI(boss_twin_baseAI, Valk->AI())->EnableDualWield(false);
850 }
851 }
852
858 };
859
864};
865
867{
868 new boss_fjola();
869 new boss_eydis();
871 new npc_unleashed_dark();
874
875 new spell_powering_up();
878}
Actions
@ IN_MILLISECONDS
Definition Common.h:125
@ MINUTE
Definition Common.h:119
@ EQUIP_UNEQUIP
Definition CreatureAI.h:50
@ EQUIP_NO_CHANGE
Definition CreatureAI.h:49
@ ACHIEVEMENT_TIMED_TYPE_EVENT
Definition DBCEnums.h:158
std::int32_t int32
Definition Define.h:73
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
std::uint64_t uint64
Definition Define.h:76
@ IN_PROGRESS
@ FAIL
@ SPECIAL
@ 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
@ SPELL_EFFECT_SCRIPT_EFFECT
@ UNIT_DYNFLAG_LOOTABLE
@ SPELLFAMILY_GENERIC
AuraStateType
@ AURA_STATE_UNKNOWN19
@ AURA_STATE_UNKNOWN22
@ SPELL_AURA_MOD_DAMAGE_PERCENT_DONE
AuraEffectHandleModes
@ AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK
@ AURA_EFFECT_HANDLE_REAL
#define sSpellMgr
Definition SpellMgr.h:744
#define SpellEffectFn(F, I, N)
#define AuraEffectAbsorbFn(F, I)
#define AuraEffectApplyFn(F, I, N, M)
#define AuraEffectRemoveFn(F, I, N, M)
@ SPELLVALUE_MAX_TARGETS
Definition Unit.h:118
@ UNIT_STATE_CASTING
Definition Unit.h:527
@ REACT_PASSIVE
Definition Unit.h:1156
@ REACT_AGGRESSIVE
Definition Unit.h:1158
@ UNIT_FLAG_NON_ATTACKABLE
Definition Unit.h:626
@ UNIT_FLAG_NOT_SELECTABLE
Definition Unit.h:650
@ UNIT_FLAG_IMMUNE_TO_PC
Definition Unit.h:633
@ SELECT_TARGET_RANDOM
Definition UnitAI.h:23
@ UNIT_FIELD_FLAGS
@ OBJECT_FIELD_DYNAMIC_FLAGS
float frand(float min, float max)
Definition Util.cpp:39
@ SAY_BERSERK
#define SAY_DEATH
#define SAY_AGGRO
#define SPELL_BERSERK
@ ACTION_VORTEX
@ ACTION_PACT
#define SPELL_DARK_ESSENCE_HELPER
@ SAY_DEATH
@ SAY_NIGHT
@ SAY_AGGRO
@ EMOTE_TWINK_PACT
@ SAY_LIGHT
@ SAY_KILL_PLAYER
@ SAY_BERSERK
@ SAY_TWINK_PACT
@ EMOTE_VORTEX
#define SPELL_LIGHT_ESSENCE_HELPER
@ SPELL_EMPOWERED_DARK
@ SPELL_EMPOWERED_LIGHT
@ SPELL_DARK_SURGE
@ SPELL_LIGHT_VORTEX
@ SPELL_LIGHT_TOUCH
@ SPELL_POWER_TWINS
@ SPELL_SURGE_OF_SPEED
@ SPELL_LIGHT_TWIN_PACT
@ SPELL_DARK_VORTEX_DAMAGE
@ SPELL_UNLEASHED_LIGHT
@ SPELL_LIGHT_VORTEX_DAMAGE
@ SPELL_LIGHT_SHIELD
@ SPELL_TWIN_EMPATHY_DARK
@ SPELL_DARK_TOUCH
@ SPELL_POWERING_UP
@ SPELL_DARK_TWIN_SPIKE
@ SPELL_LIGHT_ESSENCE
@ SPELL_DARK_VORTEX
@ SPELL_DARK_TWIN_PACT
@ SPELL_DARK_SHIELD
@ SPELL_LIGHT_SURGE
@ SPELL_LIGHT_TWIN_SPIKE
@ SPELL_BERSERK
@ SPELL_UNLEASHED_DARK
@ SPELL_DARK_ESSENCE
@ SPELL_CONTROLLER_PERIODIC
@ SPELL_TWIN_EMPATHY_LIGHT
#define SPELL_POWERING_UP_HELPER
#define SPELL_UNLEASHED_DARK_HELPER
#define ESSENCE_APPLY
void AddSC_boss_twin_valkyr()
#define ESSENCE_REMOVE
@ NPC_BULLET_DARK
@ NPC_BULLET_CONTROLLER
@ NPC_BULLET_LIGHT
@ EQUIP_MAIN_2
@ EQUIP_MAIN_1
#define SPELL_UNLEASHED_LIGHT_HELPER
bool ModStackAmount(int32 num, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
HookList< EffectApplyHandler > AfterEffectRemove
HookList< EffectApplyHandler > AfterEffectApply
Unit * GetCaster() const
HookList< EffectAbsorbHandler > OnEffectAbsorb
Unit * GetTarget() const
Unit * GetUnitOwner() const
InstanceScript *const instance
SummonList summons
BossAI(Creature *creature, uint32 bossId)
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
bool UpdateVictim()
virtual void EnterEvadeMode()
void DespawnOrUnsummon(uint32 msTimeToDespawn=0)
CreatureScript(const char *name)
SpellInfo const * GetSpellInfo() const
Definition Unit.h:907
static Creature * GetCreature(WorldObject const &u, uint64 guid)
TypeID GetTypeId() const
Definition Object.h:131
uint32 GetEntry() const
Definition Object.h:125
bool Execute(uint64, uint32)
OrbsDespawner(Creature *creature)
void operator()(Creature *creature) const
int32 CalcValue(Unit const *caster=NULL, int32 const *basePoints=NULL, Unit const *target=NULL) const
SpellEffectInfo Effects[MAX_SPELL_EFFECTS]
Definition SpellInfo.h:255
uint32 Id
Definition SpellInfo.h:160
HookList< EffectHandler > OnEffectHitTarget
Unit * GetHitUnit()
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
void DoCastAOE(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:176
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)
static Creature * GetCreature(WorldObject &object, uint64 guid)
Definition Unit.cpp:4905
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
bool OnGossipHello(Player *player, Creature *creature) OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
PrepareAuraScript(spell_power_of_the_twins_AuraScript)
void HandleEffectRemove(AuraEffect const *, AuraEffectHandleModes)
void HandleEffectApply(AuraEffect const *, AuraEffectHandleModes)
AuraScript * GetAuraScript() const OVERRIDE
PrepareSpellScript(spell_powering_up_SpellScript) uint32 spellId
SpellScript * GetSpellScript() const OVERRIDE
PrepareAuraScript(spell_valkyr_essences_AuraScript)
void Absorb(AuraEffect *, DamageInfo &dmgInfo, uint32 &)
AuraScript * GetAuraScript() const OVERRIDE
bool IsHeroic() const
void SetEquipmentSlots(bool loadDefault, int32 mainHand=EQUIP_NO_CHANGE, int32 offHand=EQUIP_NO_CHANGE, int32 ranged=EQUIP_NO_CHANGE)
void SetCombatMovement(bool allowMovement)
Creature * me
ScriptedAI(Creature *creature)
boss_eydisAI(Creature *creature)
boss_fjolaAI(Creature *creature)
void EnterCombat(Unit *who) OVERRIDE
void EnableDualWield(bool mode=true)
void JustDied(Unit *) OVERRIDE
void JustSummoned(Creature *summoned) OVERRIDE
void MovementInform(uint32 uiType, uint32 uiId) OVERRIDE
void Reset() OVERRIDE
AuraStateType AuraState
void JustReachedHome() OVERRIDE
void DoAction(int32 action) OVERRIDE
void EnterCombat(Unit *) OVERRIDE
void SummonedCreatureDespawn(Creature *summoned) OVERRIDE
boss_twin_baseAI(Creature *creature)
void KilledUnit(Unit *who) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32) OVERRIDE
== Triggered Actions Requested ==================
uint32 GetData(uint32 data) const OVERRIDE
npc_unleashed_ballAI(Creature *creature)
void MovementInform(uint32 uiType, uint32 uiId) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
@ GO_MAIN_GATE_DOOR
@ NPC_LIGHT_ESSENCE
@ NPC_DARK_ESSENCE
const Position ToCCommonLoc[]
@ EVENT_START_TWINS_FIGHT
@ DATA_TRIBUTE_TO_IMMORTALITY_ELIGIBLE
@ BOSS_VALKIRIES