90 {70867, 71473, 71532, 71533},
91 {70879, 71525, 71530, 71531},
92 {70877, 71474, 70877, 71474},
95#define ESSENCE_OF_BLOOD_QUEEN RAID_MODE<uint32>(70867, 71473, 71532, 71533)
96#define ESSENCE_OF_BLOOD_QUEEN_PLR RAID_MODE<uint32>(70879, 71525, 71530, 71531)
97#define FRENZIED_BLOODTHIRST RAID_MODE<uint32>(70877, 71474, 70877, 71474)
98#define DELIRIOUS_SLASH RAID_MODE<uint32>(71623, 71624, 71625, 71626)
99#define PRESENCE_OF_THE_DARKFALLEN RAID_MODE<uint32>(70994, 71962, 71963, 71964)
138 for (
uint8 i = 0; i < 3; ++i)
216 minchar->SetCanFly(
false);
217 minchar->RemoveAllAuras();
218 minchar->GetMotionMaster()->MoveCharge(4629.3711f, 2782.6089f, 401.5301f,
SPEED_CHARGE / 3.0f);
360 std::list<Player*> targets;
362 if (!targets.empty())
364 Unit* target = targets.front();
411 std::list<Player*> targets;
414 if (targets.size() > 1)
417 for (std::list<Player*>::iterator itr = targets.begin(); itr != targets.end(); ++itr)
434 std::list<Player*> targets;
437 for (std::list<Player*>::iterator itr = targets.begin(); itr != targets.end(); ++itr)
485 std::list<Player*> tempTargets;
489 if (refTarget != maintank && (includeOfftank || (refTarget->GetGUID() !=
_offtankGUID)))
490 tempTargets.push_back(refTarget->ToPlayer());
492 if (tempTargets.empty())
497 *targetList = std::move(tempTargets);
504 return tempTargets.front();
553 if (aura->GetStackAmount() == 3)
647 uint32 targetCount = (targets.size() + 2) / 3;
651 for (std::list<WorldObject*>::const_iterator itr = targets.begin(); itr != targets.end(); ++itr)
682 if (!damageInfo || !damageInfo->
GetDamage())
706 std::list<WorldObject*>::const_iterator itrEnd = targets.end(), itr, itr2;
708 for (itr = targets.begin(); itr != itrEnd && remove; ++itr)
713 for (itr2 = targets.begin(); itr2 != itrEnd && remove; ++itr2)
714 if (itr != itr2 && !(*itr2)->IsWithinDist(*itr, 5.0f,
false))
750 damage =
int32(damage * multiplier);
792 resistAmount = resistedDamage;
812 return !lanaThelAI->WasVampire(source->
GetGUID());
828 return lanaThelAI->WasVampire(source->
GetGUID());
std::set< ObjectGuid > GuidSet
@ QUEST_STATUS_INCOMPLETE
#define RegisterSpellScript(spell_script)
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_TRIGGER_SPELL
@ TARGET_UNIT_SRC_AREA_ALLY
@ TARGET_UNIT_SRC_AREA_ENEMY
@ SPELL_SCHOOL_MASK_SHADOW
@ SPELL_SCHOOL_MASK_ARCANE
@ SPELL_CUSTOM_ERROR_CANT_TARGET_VAMPIRES
@ SPELL_FAILED_CUSTOM_ERROR
@ AURA_REMOVE_BY_ENEMY_SPELL
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_OVERRIDE_SPELLS
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
@ TRIGGERED_FULL_MASK
Will return SPELL_FAILED_DONT_REPORT in CheckCast functions.
#define BeforeSpellHitFn(F)
#define SpellCheckCastFn(F)
#define AuraEffectProcFn(F, I, N)
#define SpellOnResistAbsorbCalculateFn(F)
#define SpellEffectFn(F, I, N)
#define SpellObjectAreaTargetSelectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
#define AuraEffectApplyFn(F, I, N, M)
#define AuraEffectRemoveFn(F, I, N, M)
T CalculatePct(T base, U pct)
@ SAY_PACT_OF_THE_DARKFALLEN
uint32 const vampireAuras[3][MAX_DIFFICULTY]
#define ESSENCE_OF_BLOOD_QUEEN
@ SPELL_FRENZIED_BLOODTHIRST_VISUAL
@ SPELL_UNCONTROLLABLE_FRENZY
@ SPELL_CLEAR_ALL_STATUS_AILMENTS
@ SPELL_PACT_OF_THE_DARKFALLEN_TARGET
@ SPELL_PRESENCE_OF_THE_DARKFALLEN
@ SPELL_PACT_OF_THE_DARKFALLEN_DAMAGE
@ SPELL_FRENZIED_BLOODTHIRST
@ SPELL_BLOOD_MIRROR_VISUAL
@ SPELL_VAMPIRIC_BITE_DUMMY
@ SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_PLR
@ SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_HEAL
@ SPELL_BLOOD_INFUSION_CREDIT
@ SPELL_TWILIGHT_BLOODBOLT
@ SPELL_BLOOD_MIRROR_DAMAGE
@ SPELL_PACT_OF_THE_DARKFALLEN
@ SPELL_PRESENCE_OF_THE_DARKFALLEN_2
@ SPELL_TWILIGHT_BLOODBOLT_TARGET
@ SPELL_BLOOD_MIRROR_DUMMY
boss_blood_queen_lana_thel LanaThelAI
#define ESSENCE_OF_BLOOD_QUEEN_PLR
bool IsVampire(Unit const *unit)
void AddSC_boss_blood_queen_lana_thel()
@ EVENT_PACT_OF_THE_DARKFALLEN
@ EVENT_TWILIGHT_BLOODBOLT
@ EVENT_GROUP_CANCELLABLE
#define PRESENCE_OF_THE_DARKFALLEN
#define FRENZIED_BLOODTHIRST
Position const mincharPos
uint32 GetTickNumber() const
void PreventDefaultAction()
AuraApplication const * GetTargetApplication() const
HookList< EffectApplyHandler > AfterEffectRemove
HookList< EffectPeriodicHandler > OnEffectPeriodic
HookList< EffectProcHandler > OnEffectProc
HookList< AuraProcHandler > OnProc
HookList< EffectApplyHandler > OnEffectApply
bool operator()(WorldObject *object) const
BloodboltHitCheck(LanaThelAI *ai)
InstanceScript *const instance
bool _EnterEvadeMode(EvadeReason why=EVADE_REASON_OTHER)
void DoZoneInCombat(Creature *creature=nullptr)
void SetReactState(ReactStates st)
Player * GetLootRecipient() const
Unit * GetAttacker() const
void DelayEvents(Milliseconds delay)
void RescheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
void CancelEventGroup(GroupIndex group)
void ScheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
virtual bool SetBossState(uint32 id, EncounterState state)
void DoRemoveAurasDueToSpellOnPlayers(uint32 spell, bool includePets=false, bool includeControlled=false)
void DoCastSpellOnPlayers(uint32 spell, bool includePets=false, bool includeControlled=false)
EncounterState GetBossState(uint32 id) const
virtual bool CheckRequiredBosses(uint32, Player const *=nullptr) const
uint8 GetSpawnMode() const
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={})
static ObjectGuid const Empty
static ObjectGuid GetGUID(Object const *o)
static Player * ToPlayer(Object *o)
QuestStatus GetQuestStatus(uint32 quest_id) const
DamageInfo * GetDamageInfo() const
int32 CalcValue(WorldObject const *caster=nullptr, int32 const *basePoints=nullptr) const
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
HookList< CheckCastHandler > OnCheckCast
void PreventHitDefaultEffect(SpellEffIndex effIndex)
Unit * GetHitUnit() const
HookList< EffectHandler > OnEffectHitTarget
HookList< CastHandler > OnCast
HookList< OnCalculateResistAbsorbHandler > OnCalculateResistAbsorb
void SetCustomCastResultMessage(SpellCustomErrors result)
HookList< BeforeHitHandler > BeforeHit
Unit * GetExplTargetUnit() const
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
Unit * GetCurrentVictim()
bool IsThreatListEmpty(bool includeOffline=false) const
Trinity::IteratorPair< ThreatListIterator, std::nullptr_t > GetSortedThreatList() const
void DoMeleeAttackIfReady()
SpellCastResult DoCastSelf(uint32 spellId, CastSpellExtraArgs const &args={})
SpellCastResult DoCastVictim(uint32 spellId, CastSpellExtraArgs const &args={})
virtual void SetGUID(ObjectGuid const &, int32=0)
SpellCastResult DoCastAOE(uint32 spellId, CastSpellExtraArgs const &args={})
SpellCastResult DoCast(uint32 spellId)
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
ThreatManager & GetThreatManager()
MotionMaster * GetMotionMaster()
static uint32 CalcSpellResistedDamage(Unit const *attacker, Unit *victim, uint32 damage, SpellSchoolMask schoolMask, SpellInfo const *spellInfo)
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
bool SetDisableGravity(bool disable, bool updateAnimTier=true)
AnimTier GetAnimTier() const
void AddUnitState(uint32 f)
Unit * EnsureVictim() const
bool HasUnitState(const uint32 f) const
Vehicle * GetVehicleKit() const
InstanceScript * GetInstanceScript() const
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
void setActive(bool isActiveObject)
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
bool IsWithinDist(WorldObject const *obj, float dist2compare, bool is3D=true) const
virtual uint32 GetData(uint32) const
virtual void SetData(uint32, uint32)
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
bool OnCheck(Player *source, Unit *target) override
achievement_once_bitten_twice_shy_n()
achievement_once_bitten_twice_shy_v()
bool OnCheck(Player *source, Unit *target) override
bool Validate(SpellInfo const *) override
void FilterTargets(std::list< WorldObject * > &targets)
PrepareSpellScript(spell_blood_queen_bloodbolt)
void HandleScript(SpellEffIndex effIndex)
void OnProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_blood_queen_essence_of_the_blood_queen)
PrepareAuraScript(spell_blood_queen_frenzied_bloodthirst)
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
void OnApply(AuraEffect const *, AuraEffectHandleModes)
PrepareSpellScript(spell_blood_queen_pact_of_the_darkfallen_dmg_target)
void FilterTargets(std::list< WorldObject * > &unitList)
void PeriodicTick(AuraEffect const *aurEff)
PrepareAuraScript(spell_blood_queen_pact_of_the_darkfallen_dmg)
bool Validate(SpellInfo const *) override
void FilterTargets(std::list< WorldObject * > &targets)
PrepareSpellScript(spell_blood_queen_pact_of_the_darkfallen)
PrepareSpellScript(spell_blood_queen_twilight_bloodbolt)
void HandleResistance(DamageInfo const &damageInfo, uint32 &resistAmount, int32 &)
bool Validate(SpellInfo const *) override
SpellCastResult CheckTarget()
void HandlePresence(SpellEffIndex)
void OnCast(SpellMissInfo missInfo)
PrepareSpellScript(spell_blood_queen_vampiric_bite)
@ LIGHT_S_HAMMER_TELEPORT
#define RegisterIcecrownCitadelCreatureAI(ai_name)
@ DATA_BLOOD_QUICKENING_STATE
@ DATA_BLOOD_QUEEN_LANA_THEL
@ NPC_INFILTRATOR_MINCHAR_BQ
@ NPC_BLOOD_QUEEN_LANA_THEL
@ NPC_INFILTRATOR_MINCHAR_BQ_25
TC_GAME_API Player * GetPlayer(Map const *, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
auto SelectRandomContainerElement(C const &container) -> typename std::add_const< decltype(*std::begin(container))>::type &
void RandomResize(C &container, std::size_t requestedSize)
void AttackStart(Unit *) override
void KilledUnit(Unit *victim) override
void JustEngagedWith(Unit *who) override
bool _creditBloodQuickening
bool WasBloodbolted(ObjectGuid guid) const
void JustReachedHome() override
GuidSet _bloodboltedPlayers
bool WasVampire(ObjectGuid guid) const
void JustDied(Unit *) override
void SetGUID(ObjectGuid const &guid, int32 id) override
void UpdateAI(uint32 diff) override
void DoAction(int32 action) override
Player * SelectRandomTarget(bool includeOfftank, std::list< Player * > *targetList=nullptr)
void MovementInform(uint32 type, uint32 id) override
void EnterEvadeMode(EvadeReason why) override
boss_blood_queen_lana_thel(Creature *creature)