89 {70867, 71473, 71532, 71533},
90 {70879, 71525, 71530, 71531},
91 {70877, 71474, 70877, 71474},
94#define ESSENCE_OF_BLOOD_QUEEN RAID_MODE<uint32>(70867, 71473, 71532, 71533)
95#define ESSENCE_OF_BLOOD_QUEEN_PLR RAID_MODE<uint32>(70879, 71525, 71530, 71531)
96#define FRENZIED_BLOODTHIRST RAID_MODE<uint32>(70877, 71474, 70877, 71474)
97#define DELIRIOUS_SLASH RAID_MODE<uint32>(71623, 71624, 71625, 71626)
98#define PRESENCE_OF_THE_DARKFALLEN RAID_MODE<uint32>(70994, 71962, 71963, 71964)
135 for (
uint8 i = 0; i < 3; ++i)
308 std::list<Player*> targets;
310 if (!targets.empty())
312 Unit* target = targets.front();
359 std::list<Player*> targets;
362 if (targets.size() > 1)
365 for (std::list<Player*>::iterator itr = targets.begin(); itr != targets.end(); ++itr)
382 std::list<Player*> targets;
385 for (std::list<Player*>::iterator itr = targets.begin(); itr != targets.end(); ++itr)
431 std::list<Player*> tempTargets;
435 if (refTarget != maintank && (includeOfftank || (refTarget->GetGUID() !=
_offtankGUID)))
436 tempTargets.push_back(refTarget->ToPlayer());
438 if (tempTargets.empty())
443 *targetList = std::move(tempTargets);
450 return tempTargets.front();
494 if (aura->GetStackAmount() == 3)
584 uint32 targetCount = (targets.size() + 2) / 3;
588 for (std::list<WorldObject*>::const_iterator itr = targets.begin(); itr != targets.end(); ++itr)
617 if (!damageInfo || !damageInfo->
GetDamage())
639 std::list<WorldObject*>::const_iterator itrEnd = targets.end(), itr, itr2;
641 for (itr = targets.begin(); itr != itrEnd && remove; ++itr)
643 if (!
GetCaster()->IsWithinDist(*itr, 5.0f,
false))
646 for (itr2 = targets.begin(); itr2 != itrEnd && remove; ++itr2)
647 if (itr != itr2 && !(*itr2)->IsWithinDist(*itr, 5.0f,
false))
681 damage =
int32(damage * multiplier);
719 resistAmount = resistedDamage;
739 return !lanaThelAI->WasVampire(source->
GetGUID());
755 return lanaThelAI->WasVampire(source->
GetGUID());
std::set< ObjectGuid > GuidSet
@ QUEST_STATUS_INCOMPLETE
#define RegisterSpellScript(spell_script)
@ TARGET_UNIT_SRC_AREA_ALLY
@ TARGET_UNIT_SRC_AREA_ENEMY
@ SPELL_SCHOOL_MASK_SHADOW
@ SPELL_SCHOOL_MASK_ARCANE
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_TRIGGER_SPELL
@ SPELL_CUSTOM_ERROR_CANT_TARGET_VAMPIRES
@ SPELL_FAILED_CUSTOM_ERROR
@ AURA_EFFECT_HANDLE_REAL
@ AURA_REMOVE_BY_ENEMY_SPELL
@ SPELL_AURA_OVERRIDE_SPELLS
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
@ TRIGGERED_FULL_MASK
Used when doing CastSpell with triggered == true.
#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)
#define ESSENCE_OF_BLOOD_QUEEN
boss_blood_queen_lana_thel LanaThelAI
#define ESSENCE_OF_BLOOD_QUEEN_PLR
@ 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
bool IsVampire(Unit const *unit)
void AddSC_boss_blood_queen_lana_thel()
#define PRESENCE_OF_THE_DARKFALLEN
#define FRENZIED_BLOODTHIRST
@ SAY_PACT_OF_THE_DARKFALLEN
uint32 const vampireAuras[3][4]
@ EVENT_PACT_OF_THE_DARKFALLEN
@ EVENT_TWILIGHT_BLOODBOLT
@ EVENT_GROUP_CANCELLABLE
uint32 GetTickNumber() const
void PreventDefaultAction()
AuraApplication const * GetTargetApplication() const
HookList< EffectApplyHandler > AfterEffectRemove
HookList< EffectPeriodicHandler > OnEffectPeriodic
Difficulty GetCastDifficulty() const
HookList< EffectProcHandler > OnEffectProc
HookList< AuraProcHandler > OnProc
HookList< EffectApplyHandler > OnEffectApply
bool operator()(WorldObject *object) const
BloodboltHitCheck(LanaThelAI *ai)
InstanceScript *const instance
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
bool _EnterEvadeMode(EvadeReason why=EvadeReason::Other)
void SetReactState(ReactStates st)
Unit * GetAttacker() const
void DelayEvents(Milliseconds delay)
void CancelEventGroup(uint32 group)
void ScheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
void RescheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
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)
virtual bool CheckRequiredBosses(uint32, Player const *=nullptr) const
Difficulty GetDifficultyID() 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 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, Unit const *target=nullptr, float *variance=nullptr, uint32 castItemId=0, int32 itemLevel=-1) const
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
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
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 SetDisableGravity(bool disable, bool updateAnimTier=true)
AnimTier GetAnimTier() const
void AddUnitState(uint32 f)
Unit * EnsureVictim() const
bool HasUnitState(const uint32 f) const
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
void RemoveVehicleKit(bool onRemoveFromWorld=false)
Vehicle * GetVehicleKit() const
InstanceScript * GetInstanceScript() const
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
void setActive(bool isActiveObject)
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)
void HandleScript(SpellEffIndex effIndex)
void OnProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
void OnApply(AuraEffect const *, AuraEffectHandleModes)
void FilterTargets(std::list< WorldObject * > &unitList)
void PeriodicTick(AuraEffect const *aurEff)
bool Validate(SpellInfo const *) override
void FilterTargets(std::list< WorldObject * > &targets)
void HandleResistance(DamageInfo const &damageInfo, uint32 &resistAmount, int32 &)
bool Validate(SpellInfo const *) override
SpellCastResult CheckTarget()
void HandlePresence(SpellEffIndex)
void OnCast(SpellMissInfo missInfo)
@ LIGHT_S_HAMMER_TELEPORT
#define RegisterIcecrownCitadelCreatureAI(ai_name)
@ DATA_BLOOD_QUEEN_LANA_THEL
@ NPC_BLOOD_QUEEN_LANA_THEL
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
== Triggered Actions Requested ==================
void KilledUnit(Unit *victim) override
void JustEngagedWith(Unit *who) override
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
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)