149 { 517.4877f, 400.7993f, 112.7837f },
150 { 468.4435f, 401.1062f, 118.5379f }
155 { 495.5628f, 462.7089f, 112.8169f, 4.1808090f },
156 { 498.3421f, 463.8384f, 112.8673f, 4.5634810f },
157 { 501.6708f, 463.8806f, 112.8673f, 3.7157850f },
158 { 532.4264f, 448.4718f, 112.8563f, 3.9813020f },
159 { 532.9113f, 451.6227f, 112.8671f, 4.6479530f },
160 { 532.8243f, 453.9475f, 112.8671f, 4.7032810f },
161 { 521.5317f, 402.3790f, 112.8671f, 3.1138120f },
162 { 521.9184f, 404.6848f, 112.8671f, 4.0787760f },
163 { 522.4290f, 406.5160f, 112.8671f, 3.3869470f },
164 { 521.0833f, 393.1852f, 112.8611f, 3.0750830f },
165 { 521.9014f, 395.6381f, 112.8671f, 4.0157140f },
166 { 522.2610f, 397.7423f, 112.8671f, 3.4417790f },
167 { 532.4565f, 345.3987f, 112.8585f, 1.7232640f },
168 { 532.5565f, 346.8792f, 112.8671f, 1.8325960f },
169 { 532.5491f, 348.6840f, 112.8671f, 0.2054047f },
170 { 501.4669f, 338.5967f, 112.8504f, 1.7038430f },
171 { 499.0937f, 337.9894f, 112.8673f, 1.8586250f },
172 { 496.8722f, 338.0152f, 112.8673f, 0.5428222f }
177 { 479.1884f, 434.8635f, 112.7838f },
178 { 479.7349f, 435.9843f, 112.7838f },
179 { 480.5328f, 436.8310f, 112.7838f },
180 { 493.1714f, 420.1136f, 112.7838f },
181 { 494.7830f, 417.4830f, 112.7838f },
182 { 492.9280f, 423.1891f, 112.7838f },
183 { 491.8618f, 403.2035f, 112.7838f },
184 { 491.7784f, 400.2046f, 112.7838f },
185 { 491.9451f, 406.2023f, 112.7838f },
186 { 488.3535f, 395.3652f, 112.7838f },
187 { 488.8324f, 392.3267f, 112.7838f },
188 { 489.2300f, 398.3135f, 112.7838f },
189 { 491.9286f, 383.0433f, 112.7838f },
190 { 491.1526f, 380.0966f, 112.7839f },
191 { 493.6747f, 385.5407f, 112.7838f },
192 { 476.2499f, 369.0865f, 112.7839f },
193 { 473.7637f, 367.8766f, 112.7839f },
194 { 478.8986f, 370.1895f, 112.7839f }
289 if (
Player* player = i->GetSource())
290 if (player->IsAlive() && !player->IsGameMaster() &&
IsInBoundary(player))
309 std::list<Creature*> SpawnerList;
311 for (
Creature* spawner : SpawnerList)
320 channeler->SetUninteractible(
false);
437 for (
uint8 i = 0; i < 18; i++)
441 summoned->SetWalk(
true);
442 summoned->GetMotionMaster()->MovePoint(0,
BrokenWP[i]);
527 if (shade->IsAlive())
533 if (gossipListId == 0)
564 if (shade->IsUninteractible())
565 DoCastSelf(SPELL_SHADE_SOUL_CHANNEL);
568 me->DespawnOrUnsummon(Seconds(3));
691 if (shade->IsUninteractible())
729 if (shade->IsUninteractible())
731 me->SetFacingToObject(shade);
732 DoCastSelf(SPELL_SHADE_SOUL_CHANNEL);
733 sorcer_channel.Repeat(Seconds(2));
737 me->InterruptSpell(CURRENT_CHANNELED_SPELL);
738 _switchToCombat = true;
739 if (Creature* akama = _instance->GetCreature(DATA_AKAMA_SHADE))
749 _scheduler.Update(diff);
1092 int32 const maxSlowEff = -99;
1095 slowEff->ChangeAmount(maxSlowEff);
std::chrono::seconds Seconds
Seconds shorthand typedef.
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
std::vector< ObjectGuid > GuidVector
float frand(float min, float max)
#define RegisterSpellScript(spell_script)
void CloseGossipMenuFor(Player *player)
@ FACTION_MONSTER_SPAR_BUDDY
@ FACTION_ASHTONGUE_DEATHSWORN
@ AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_MOD_DECREASE_SPEED
#define AuraEffectApplyFn(F, I, N, M)
#define AuraEffectRemoveFn(F, I, N, M)
#define RegisterBlackTempleCreatureAI(ai_name)
static float const MIDDLE_OF_ROOM
static float const FACE_THE_DOOR
@ ACTION_SHADE_OF_AKAMA_DEAD
@ ACTION_DESPAWN_ALL_SPAWNS
@ NPC_ASHTONGUE_CHANNELER
@ NPC_CREATURE_SPAWNER_AKAMA
Position const AkamaWP[2]
@ SPELL_SUMMON_ASHTONGUE_DEFENDER
@ SPELL_SUMMON_ASHTONGUE_SORCERER
@ SPELL_SHADE_SOUL_CHANNEL
@ SPELL_DEBILITATING_POISON
@ SPELL_SHADE_OF_AKAMA_TRIGGER
@ SPELL_SHADE_SOUL_CHANNEL_2
@ SPELL_DESTRUCTIVE_POISON
@ SPELL_DEBILITATING_STRIKE
@ SPELL_AKAMA_SOUL_EXPEL_CHANNEL
@ SPELL_AKAMA_SOUL_RETRIEVE
@ SPELL_AKAMA_SOUL_CHANNEL
@ SPELL_SPIRITBINDER_SPIRIT_HEAL
static float const FACE_THE_PLATFORM
void AddSC_boss_shade_of_akama()
Position const BrokenWP[18]
Position const BrokenPos[18]
@ EVENT_SPIRIT_MEND_RESET
@ EVENT_START_SOUL_RETRIEVE
@ EVENT_SUMMON_ASHTONGUE_DEFENDER
@ EVENT_START_BROKEN_FREE
@ EVENT_DESTRUCTIVE_POISON
@ EVENT_INITIALIZE_SPAWNERS
@ EVENT_DEBILITATING_POISON
@ EVENT_SUMMON_ASHTONGUE_SORCERER
@ EVENT_DEBILITATING_STRIKE
@ EVENT_START_CHANNELERS_AND_SPAWNERS
HookList< EffectApplyHandler > AfterEffectRemove
HookList< EffectApplyHandler > AfterEffectApply
AuraEffect * GetEffect(uint8 effIndex) const
InstanceScript *const instance
void _DespawnAtEvade(Seconds delayToRespawn=30s, Creature *who=nullptr)
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
bool IsInBoundary(Position const *who=nullptr) const
void SetImmuneToPC(bool apply) override
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
void Repeat(Milliseconds time)
void ScheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
virtual bool SetBossState(uint32 id, EncounterState state)
Creature * GetCreature(uint32 type)
virtual ObjectGuid GetGuidData(uint32 type) const override
EncounterState GetBossState(uint32 id) const
PlayerList const & GetPlayers() const
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={}, Optional< float > speed={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default, Optional< float > closeEnoughDistance={})
static ObjectGuid GetGUID(Object const *o)
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
void DespawnEntry(uint32 entry)
void Summon(Creature const *summon)
void DoAction(int32 info, Predicate &&predicate, uint16 max=0)
TaskContext & Repeat(std::chrono::duration< Rep, Period > duration)
TaskScheduler & Schedule(std::chrono::duration< Rep, Period > time, task_handler_t task)
TaskScheduler & Update(success_t const &callback=nullptr)
SpellCastResult DoCastSelf(uint32 spellId, CastSpellExtraArgs const &args={})
SpellCastResult DoCastVictim(uint32 spellId, CastSpellExtraArgs const &args={})
SpellCastResult DoCast(uint32 spellId)
void CombatStop(bool includingCast=false, bool mutualPvP=true, bool(*unitFilter)(Unit const *otherUnit)=nullptr)
void SetStandState(UnitStandStateType state, uint32 animKitID=0)
void SetFaction(uint32 faction) override
MotionMaster * GetMotionMaster()
void SetFacingToObject(WorldObject const *object, bool force=true)
void RemoveNpcFlag(NPCFlags flags)
void SetUninteractible(bool apply)
void SetEmoteState(Emote emote)
bool HealthBelowPct(int32 pct) const
uint32 GetFaction() const override
void SetNpcFlag(NPCFlags flags)
bool SetWalk(bool enable)
void RemoveAuraFromStack(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT, uint16 num=1)
void SetFacingTo(float const ori, bool force=true)
void HandleEmoteCommand(Emote emoteId, Player *target=nullptr, Trinity::IteratorPair< int32 const * > spellVisualKitIds={}, int32 sequenceVariation=0)
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
InstanceScript * GetInstanceScript() const
void GetCreatureListWithEntryInGrid(Container &creatureContainer, uint32 entry, float maxSearchRange=250.0f) const
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)
bool IsWithinDist(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
void SummonCreatureGroup(uint8 group, std::list< TempSummon * > *list=nullptr)
bool Validate(SpellInfo const *) override
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
void OnApply(AuraEffect const *aurEff, AuraEffectHandleModes)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
constexpr float GetPositionX() const
constexpr float GetPositionY() const
constexpr float GetPositionZ() const
void AttackStart(Unit *) override
== Triggered Actions Requested ==================
bool HealthBelowPct(uint32 pct) const
void UpdateAI(uint32 diff) override
boss_shade_of_akama(Creature *creature)
void EnterEvadeMode(EvadeReason) override
void MovementInform(uint32 motionType, uint32) override
void JustDied(Unit *) override
void EnterEvadeModeIfNeeded()
void SpellHit(WorldObject *, SpellInfo const *spellInfo) override
void JustDied(Unit *) override
InstanceScript * _instance
void MovementInform(uint32 motionType, uint32 pointId) override
void JustSummoned(Creature *summon) override
void SpellHit(WorldObject *, SpellInfo const *spellInfo) override
bool OnGossipSelect(Player *player, uint32, uint32 gossipListId) override
npc_akama_shade(Creature *creature)
void DamageTaken(Unit *, uint32 &, DamageEffectType, SpellInfo const *) override
void DoAction(int32 actionId) override
void EnterEvadeMode(EvadeReason) override
DummyEntryCheckPredicate _pred
void UpdateAI(uint32 diff) override
void DoAction(int32 actionId) override
void MovementInform(uint32 motionType, uint32) override
npc_ashtongue_broken(Creature *creature)
InstanceScript * _instance
InstanceScript * _instance
npc_ashtongue_channeler(Creature *creature)
void UpdateAI(uint32 diff) override
npc_ashtongue_defender(Creature *creature)
void JustEngagedWith(Unit *) override
void UpdateAI(uint32 diff) override
void JustDied(Unit *) override
InstanceScript * _instance
void JustDied(Unit *) override
InstanceScript * _instance
void JustEngagedWith(Unit *) override
void UpdateAI(uint32 diff) override
npc_ashtongue_elementalist(Creature *creature)
void EnterEvadeMode(EvadeReason) override
void JustEngagedWith(Unit *) override
void JustDied(Unit *) override
InstanceScript * _instance
npc_ashtongue_rogue(Creature *creature)
void UpdateAI(uint32 diff) override
void EnterEvadeMode(EvadeReason) override
npc_ashtongue_sorcerer(Creature *creature)
void UpdateAI(uint32 diff) override
void JustDied(Unit *) override
void MoveInLineOfSight(Unit *who) override
void AttackStart(Unit *who) override
== Triggered Actions Requested ==================
InstanceScript * _instance
void JustEngagedWith(Unit *) override
void EnterEvadeMode(EvadeReason) override
void DamageTaken(Unit *, uint32 &, DamageEffectType, SpellInfo const *) override
void JustDied(Unit *) override
InstanceScript * _instance
void JustEngagedWith(Unit *) override
void UpdateAI(uint32 diff) override
npc_ashtongue_spiritbinder(Creature *creature)
void EnterEvadeMode(EvadeReason) override
void UpdateAI(uint32 diff) override
npc_creature_generator_akama(Creature *creature)
void DoAction(int32 actionId) override
void JustSummoned(Creature *summon) override