27#include "G3DPosition.hpp"
421 if (areaTriggers.size() >= 3)
422 areaTriggers.front()->SetDuration(0);
430 if (caster->IsFriendlyTo(unit))
453 extraDuration = duration_cast<Milliseconds>(
FloatSeconds(durationEffect->GetAmount()));
460 if (!answeredPrayers)
471 answeredPrayers->
Remove();
475 apotheosis->SetDuration(apotheosis->GetDuration() + extraDuration.count());
476 apotheosis->SetMaxDuration(apotheosis->GetMaxDuration() + extraDuration.count());
507 if (!healInfo || !healInfo->
GetHeal())
623 if (target->IsInDist2d(priest, distanceLimit))
636 static constexpr std::array<SpellEffectValue, 20> DamageByStack = { 20.0f, 20.0f, 20.0f, 20.0f, 20.0f, 17.5f, 15.0f, 12.5f, 10.0f, 7.5f, 5.5f, 4.0f, 2.5f, 2.0f, 1.5f, 1.25f, 1.0f, 0.75f, 0.63f, 0.5f };
640 sinOfTheMany->ChangeAmount(DamageByStack[std::min(
_appliedAtonements.size(), DamageByStack.size() - 1)]);
668 AddPct(pctMod, abyssalReverieEffect->GetAmount());
722 caster, &
GetSpell()->GetPowerCost()))).count());
753 RegisterHelper<&spell_pri_atonement::AddAtonementTarget>();
758 RegisterHelper<&spell_pri_atonement::RemoveAtonementTarget>();
761 template<
void(spell_pri_atonement::*func)(ObjectGu
id const&)>
799 script->TriggerAtonementHealOnTargets(atonementEffect, eventInfo);
874 .TriggeringAura = aurEff,
904 if (
GetTarget()->IsValidAttackTarget(procTarget))
927 .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
928 .TriggeringSpell = eventInfo.GetProcSpell(),
929 .TriggeringAura = aurEff,
930 .SpellValueOverrides = { { SPELLVALUE_BASE_POINT0, SpellEffectValue(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount())) } }
956 targets.push_front(explicitTarget);
1070 for (
int32 i = 1; i <= maxHits; ++i)
1074 if (Unit* target = ObjectAccessor::GetUnit(*caster, targetGuid))
1075 caster->CastSpell(target, SPELL_PRIEST_SHADOW_WORD_DEATH, CastSpellExtraArgsInit{
1076 .TriggerFlags = TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD | TRIGGERED_IGNORE_POWER_COST | TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
1077 .CustomArg = Data{ .DamagePct = effectiveness }
1102 if (!healInfo || !healInfo->
GetHeal())
1111 .TriggeringAura = aurEff,
1112 .SpellValueOverrides =
1248 tempSummon->RefreshTimer();
1255 .SetTriggeringAura(aurEff)
1264 .SetTriggeringAura(aurEff)
1340 owner->RemoveAuraFromStack(spelId);
1363 AddPct(pctMod, divineServiceEffect->GetAmount() * prayerOfMending->GetStackAmount());
1487 returnSplinePoints.push_back(PositionToVector3(
at->
GetPosition()));
1488 returnSplinePoints.push_back(PositionToVector3(caster->
GetPosition()));
1541 .TriggerFlags = TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_IGNORE_CAST_TIME,
1542 .TriggeringSpell = procInfo.GetProcSpell()
1622 .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
1623 .TriggeringSpell = procInfo.GetProcSpell(),
1624 .TriggeringAura = aurEff,
1625 .SpellValueOverrides = { { SPELLVALUE_AURA_STACK, int32(sSpellMgr->AssertSpellInfo(aurEff->GetSpellEffectInfo().TriggerSpell, DIFFICULTY_NONE)->StackAmount) } }
1670 AddPct(pctMod, empRenew->GetAmount());
1696 .TriggeringAura = aurEff,
1763 .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
1764 .CustomArg = target->GetGUID()
1834 { .X = 0.0f, .Y = 1.0f },
1835 { .X = 1.0f, .Y = 1.0f },
1899 if (!damageSpell || damageSpell->
GetEffects().empty())
1910 if (!target || !check(target))
1912 std::vector<Unit*> targets;
1916 if (!targets.empty())
1989 apotheosisAura->SetDuration(apotheosisAura->GetDuration() + aurEff->
GetAmountAsInt());
2062 if (!expiationConsume || !expiationDmgMul)
2066 if (!swPainAuraEffect)
2072 if (consumeDuration == 0)
2075 float ticksConsumed =
static_cast<float>(consumeDuration) / swPainAuraEffect->
GetPeriod();
2079 swPainAura->
SetDuration(debuffDuration - consumeDuration);
2106 bool const* isEmpoweredByFocusedMending = std::any_cast<bool>(&
GetSpell()->m_customArg);
2108 if (isEmpoweredByFocusedMending && *isEmpoweredByFocusedMending)
2109 AddPct(pctMod, focusedMendingEffect->GetAmount());
2199 float channelDuration = penanceChannel->
GetDuration();
2202 float baseBolts = channelDuration / channelPeriod;
2214 .SpellValueOverrides = {
2358 if (caster->IsValidAttackTarget(unit))
2361 else if (caster->IsValidAssistTarget(unit))
2381 if (caster->IsValidAttackTarget(unit))
2384 else if (caster->IsValidAssistTarget(unit))
2447 switch (spellInfo->
Id)
2646 Aura const* requiredAuras[] =
2718 if (!lastingWordsEff)
2846 shadowWordPain->SetMaxDuration(shadowWordPain->GetDuration() + durationExtend);
2847 shadowWordPain->SetDuration(shadowWordPain->GetDuration() + durationExtend);
2852 vampiricTouch->SetMaxDuration(vampiricTouch->GetDuration() + durationExtend);
2853 vampiricTouch->SetDuration(vampiricTouch->GetDuration() + durationExtend);
2940 if (!mindDevourer || !
GetSpell()->m_appliedMods.contains(mindDevourer->
GetBase()))
2988 if (!caster || !target)
2994 shadowWordPain->SetDuration(shadowWordPain->GetDuration() + additionalDuration);
2997 purgeTheWicked->SetDuration(purgeTheWicked->GetDuration() + additionalDuration);
3248 AddPct(pctMod, powerOfTheDarkSide->GetAmount());
3269 AddPct(pctMod, powerOfTheDarkSide->GetAmount());
3314 .TriggeringAura = aurEff
3318 caster->
CastSpell(caster, spellId, args);
3372 if (target == explTarget)
3390 [explTarget](
WorldObject const* target) {
return target == explTarget; },
3392 [](
Unit const* target) {
return !target->IsFullHealth(); },
3393 [](
WorldObject const* target) {
return target->IsPlayer() || (target->IsCreature() && target->ToCreature()->IsTreatedAsRaidUnit()); },
3394 [caster](
Unit const* target) {
return target->IsInRaidWith(caster); }
3456 AddPct(pctMod, masteryGraceEffect->GetAmount());
3545 if (!atonementScript)
3549 if (atonementTargets.empty())
3553 auto it = std::ranges::min_element(atonementTargets, std::ranges::less(), [caster](
ObjectGuid const& guidA)
3557 return std::numeric_limits<int32>::max();
3560 if (!atonementEffect)
3561 return std::numeric_limits<int32>::max();
3573 atonement->SetDuration(newDuration);
3574 atonement->SetMaxDuration(newDuration);
3704 if (stackAmount > 1)
3708 int32 newStackAmount = stackAmount - 1;
3749 if (
bool const* isEmpoweredByFocusedMending = std::any_cast<bool>(&
GetSpell()->m_customArg))
3797 AddPct(pctMod, prayerfulLitanyEff->GetAmount());
4021 targets.remove_if([&](
WorldObject*
object) ->
bool
4028 if (targets.empty())
4059 if (targets.size() > spreadCount)
4060 targets.resize(spreadCount);
4090 rhapsodyStack->ModStackAmount(1);
4197 if (!amountHolderEffect)
4232 .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS,
4233 .SpellValueOverrides = { { SPELLVALUE_BASE_POINT0, dotDmg } }
4379 int32 damageForAuraRemoveAmount = periodicAmount * 10;
4384 else if (target->IsInCombat() && periodicAmount)
4461 ApplyPct(pctMod, deathsTorment->DamagePct);
4474 backlashDamage =
CalculatePct(backlashDamage, deathsTorment->BacklashPct);
4477 AddPct(backlashDamage, -titheEvasion->GetAmount());
4483 .SetOriginalCastId(originalCastId)
4529 .TriggeringAura = aurEff
4693 if (healInfo->GetEffectiveHeal())
4694 if (healTarget->GetHealth() >= healTarget->GetMaxHealth())
4727 if (!healInfo || !healInfo->
GetHeal())
4915 twilightEquilibrium->GetBase()->Remove();
4975 .OriginalCastId = originalCastId,
4992 canBeRecalculated =
false;
5032 if (enemies.empty())
5059 std::list<WorldObject*> targets;
5087 [](
WorldObject const* target) {
return target->IsPlayer() || (target->IsCreature() && target->ToCreature()->IsTreatedAsRaidUnit()); },
5127 bool canTriggerDirectDamage = [&]
5129 if (!
GetSpell()->m_originalCastId.IsEmpty())
5132 if (
GetSpell()->m_appliedMods.contains(unfurlingDarkness->GetBase()))
5137 if (!canTriggerDirectDamage)
5143 if (!
GetSpell()->m_originalCastId.IsEmpty())
5150 if (
GetSpell()->m_appliedMods.contains(unfurlingDarkness->GetBase()))
5152 unfurlingDarkness->GetBase()->Remove();
5186 if (!damageInfo || !damageInfo->
GetDamage())
5280 template <u
int32 TargetSpellId>
5396 auto getVampiricTouch = [&](
WorldObject const* target)
5404 int32 duration1 = 0;
5405 if (
Aura const* aura1 = getVampiricTouch(target1))
5406 duration1 = aura1->GetDuration();
5407 int32 duration2 = 0;
5408 if (
Aura const* aura2 = getVampiricTouch(target2))
5409 duration2 = aura2->GetDuration();
5410 return duration1 < duration2;
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
std::chrono::duration< double, Seconds::period > FloatSeconds
std::chrono::seconds Seconds
Seconds shorthand typedef.
@ GRID_MAP_TYPE_MASK_PLAYER
@ GRID_MAP_TYPE_MASK_CREATURE
#define TC_LOG_WARN(filterType__, message__,...)
#define EXTRA_CELL_SEARCH_RADIUS
std::optional< T > Optional
Optional helper class to wrap optional values within.
@ RACE_LIGHTFORGED_DRAENEI
@ RACE_EARTHEN_DWARF_HORDE
@ RACE_HIGHMOUNTAIN_TAUREN
@ RACE_EARTHEN_DWARF_ALLIANCE
bool roll_chance(T chance)
#define RegisterSpellAndAuraScriptPair(script_1, script_2)
#define RegisterAreaTriggerAI(ai_name)
#define RegisterSpellScript(spell_script)
#define RegisterSpellScriptWithArgs(spell_script, script_name,...)
@ TARGET_UNIT_DEST_AREA_ALLY
@ TARGET_UNIT_CASTER_AREA_PARTY
@ TARGET_UNIT_DEST_AREA_ENEMY
@ TARGET_UNIT_SRC_AREA_ALLY
@ TARGET_UNIT_SRC_AREA_ENEMY
@ TARGET_UNIT_TARGET_ENEMY
@ TARGET_UNIT_DEST_AREA_ENTRY
@ SPELL_SCHOOL_MASK_SHADOW
@ SPELL_EFFECT_CREATE_AREATRIGGER
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_TRIGGER_MISSILE
@ SPELL_EFFECT_SCHOOL_DAMAGE
@ SPELL_EFFECT_APPLY_AURA
@ SPELL_FAILED_UNIT_NOT_INFRONT
@ SPELL_FAILED_BAD_TARGETS
@ AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK
@ AURA_EFFECT_HANDLE_REAL
@ AURA_REMOVE_BY_ENEMY_SPELL
@ SPELL_AURA_PERIODIC_DAMAGE
@ SPELL_AURA_PROC_TRIGGER_SPELL
@ SPELL_AURA_PERIODIC_HEAL
@ SPELL_AURA_ADD_FLAT_MODIFIER_BY_SPELL_LABEL
@ SPELL_AURA_MOD_SPEED_ALWAYS
@ SPELL_AURA_SCHOOL_ABSORB
@ SPELL_AURA_PERIODIC_LEECH
@ SPELL_AURA_PERIODIC_DUMMY
@ SPELL_AURA_MECHANIC_IMMUNITY_MASK
double SpellEffectValue
This is a double instead of float to be able to store full range of int32.
@ TRIGGERED_FULL_MASK
Used when doing CastSpell with triggered == true.
@ TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD
Will ignore Spell and Category cooldowns.
@ TRIGGERED_CAST_DIRECTLY
In Spell::prepare, will be cast directly without setting containers for executed spell.
@ TRIGGERED_IGNORE_CASTER_AURASTATE
Will ignore caster aura states including combat requirements and death state.
@ TRIGGERED_IGNORE_CAST_IN_PROGRESS
Will not check if a current cast is in progress.
@ TRIGGERED_IGNORE_SHAPESHIFT
Will ignore shapeshift checks.
@ TRIGGERED_IGNORE_POWER_COST
Will ignore power and reagent cost.
@ TRIGGERED_IGNORE_GCD
Will ignore GCD.
@ TRIGGERED_DISALLOW_PROC_EVENTS
Disallows proc events from triggered spell (default)
@ TRIGGERED_DONT_REPORT_CAST_ERROR
Will return SPELL_FAILED_DONT_REPORT in CheckCast functions.
@ TRIGGERED_SUPPRESS_CASTER_ANIM
Will not play cast animations on caster.
@ TRIGGERED_IGNORE_CAST_TIME
Will always be instantly cast.
@ SPELLVALUE_DURATION_PCT
@ TARGET_OBJECT_TYPE_UNIT
@ PROC_FLAG_DEAL_HARMFUL_PERIODIC
#define SpellObjectTargetSelectFn(F, I, N)
#define SpellCheckCastFn(F)
#define AuraEffectProcFn(F, I, N)
#define SpellOnResistAbsorbCalculateFn(F)
#define SpellEffectFn(F, I, N)
#define AuraEffectCalcAbsorbFn(F, I)
#define AuraEffectCalcAmountFn(F, I, N)
#define SpellObjectAreaTargetSelectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
#define AuraCheckEffectProcFn(F, I, N)
#define AuraEffectCalcHealingFn(F, I, N)
#define SpellCalcDamageFn(F)
#define SpellDestinationTargetSelectFn(F, I, N)
#define AuraEffectAbsorbFn(F, I)
#define AuraEffectApplyFn(F, I, N, M)
#define AuraEffectAbsorbOverkillFn(F, I)
#define AuraCheckProcFn(F)
#define AuraEffectCalcDamageFn(F, I, N)
#define SpellCalcHealingFn(F)
#define AuraEffectRemoveFn(F, I, N, M)
@ CR_VERSATILITY_DAMAGE_DONE
float GetPctOf(T value, T max)
T ApplyPct(T &base, U pct)
T CalculatePct(T base, U pct)
AreaTriggerAI(AreaTrigger *a, uint32 scriptId={}) noexcept
GuidUnorderedSet const & GetInsideUnits() const
void InitSplines(std::vector< G3D::Vector3 > const &splinePoints, Optional< float > overrideSpeed={}, Optional< bool > speedIsTimeInSeconds={})
uint32 GetSpellId() const
UF::UpdateField< UF::AreaTriggerData, int32(WowCS::EntityFragment::CGObject), TYPEID_AREATRIGGER > m_areaTriggerData
void SetOverrideScaleCurve(float overrideScale)
void SetDuration(int32 newDuration)
void SetPathTarget(ObjectGuid pathTarget)
void ChangeAmount(SpellEffectValue newAmount, bool mark=true, bool onStackOrReapply=false, AuraEffect const *triggeredBy=nullptr)
SpellEffectInfo const & GetSpellEffectInfo() const
int32 GetAmountAsInt() const
static Optional< SpellEffectValue > CalculateEstimatedAmount(Unit const *caster, Unit *target, SpellInfo const *spellInfo, SpellEffectInfo const &spellEffectInfo, SpellEffectValue amount, uint8 stack, AuraEffect const *aurEff)
SpellEffectValue GetAmount() const
HookList< EffectCalcDamageAndHealingHandler > DoEffectCalcDamageAndHealing
void PreventDefaultAction()
AuraApplication const * GetTargetApplication() const
int32 GetDuration() const
HookList< EffectApplyHandler > AfterEffectRemove
HookList< CheckEffectProcHandler > DoCheckEffectProc
HookList< EffectPeriodicHandler > OnEffectPeriodic
SpellInfo const * GetSpellInfo() const
HookList< EffectApplyHandler > AfterEffectApply
int32 GetMaxDuration() const
HookList< EffectAbsorbHandler > AfterEffectAbsorb
HookList< EffectCalcAmountHandler > DoEffectCalcAmount
SpellEffectInfo const & GetEffectInfo(SpellEffIndex effIndex) const
AuraEffect * GetEffect(uint8 effIndex) const
HookList< EffectAbsorbHandler > OnEffectAbsorb
ObjectGuid GetCasterGUID() const
HookList< AuraProcHandler > AfterProc
Difficulty GetCastDifficulty() const
HookList< CheckProcHandler > DoCheckProc
HookList< EffectApplyHandler > OnEffectRemove
HookList< AuraDispelHandler > AfterDispel
HookList< EffectProcHandler > OnEffectProc
Unit * GetUnitOwner() const
HookList< AuraProcHandler > DoPrepareProc
HookList< AuraProcHandler > OnProc
uint8 GetStackAmount() const
HookList< EffectApplyHandler > OnEffectApply
void DropChargeDelayed(uint32 delay, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
int32 GetDuration() const
AuraEffect * GetEffect(uint32 index) const
bool ModStackAmount(int32 num, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT, bool resetPeriodicTimer=true)
int32 CalcMaxDuration() const
void SetDuration(int32 duration, bool withMods=false)
uint8 GetStackAmount() const
Script * GetScript() const
virtual void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)=0
ObjectGuid const & GetGUID() const
void AbsorbDamage(uint32 amount)
Unit * GetAttacker() const
SpellInfo const * GetSpellInfo() const
SpellSchoolMask GetSchoolMask() const
WorldObject * GetDispeller() const
void AddEvent(BasicEvent *event, Milliseconds e_time, bool set_addtime=true)
void AddEventAtOffset(BasicEvent *event, Milliseconds offset)
Movement::PointsArray const & GetPath() const
bool CalculatePath(float srcX, float srcY, float srcZ, float destX, float destY, float destZ, bool forceDest=false)
ChrSpecialization GetPrimarySpecialization() const
float GetRatingBonusValue(CombatRating cr) const
Group * GetGroup(Optional< uint8 > partyIndex)
HealInfo * GetHealInfo() const
Unit * GetActionTarget() const
ProcFlagsSpellType GetSpellTypeMask() const
Spell const * GetProcSpell() const
SpellInfo const * GetSpellInfo() const
ProcFlagsInit GetTypeMask() const
DamageInfo * GetDamageInfo() const
Unit * GetProcTarget() const
RaidCheck(Unit const *caster)
bool operator()(WorldObject *obj) const
void SetDst(float x, float y, float z, float orientation, uint32 mapId=MAPID_INVALID)
SpellDestination const * GetDst() const
void SetUnitTarget(Unit *target)
SpellEffectValue CalcValue(WorldObject const *caster=nullptr, SpellEffectValue const *basePoints=nullptr, Unit const *target=nullptr, float *variance=nullptr, uint32 castItemId=0, int32 itemLevel=-1) const
uint32 GetPeriodicTickCount() const
std::shared_ptr< std::vector< Condition > > ImplicitTargetConditions
int32 CalcValueAsInt(WorldObject const *caster=nullptr, SpellEffectValue const *basePoints=nullptr, Unit const *target=nullptr, float *variance=nullptr, uint32 castItemId=0, int32 itemLevel=-1) const
SpellRange CalcRadius(WorldObject const *caster=nullptr, SpellTargetIndex targetIndex=SpellTargetIndex::TargetA, Spell *spell=nullptr) const
SpellImplicitTargetInfo TargetB
void ResetCooldown(uint32 spellId, bool update=false)
void ModifyCooldown(uint32 spellId, Duration cooldownMod, bool withoutCategoryCooldown=false)
Targets GetTarget() const
bool IsAffected(uint32 familyName, flag128 const &familyFlags) const
SpellRange GetMinMaxRange(bool positive=false, WorldObject const *caster=nullptr, Spell *spell=nullptr) const
float GetMaxRange(bool positive=false, WorldObject const *caster=nullptr, Spell *spell=nullptr) const
int32 GetDuration() const
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
std::vector< SpellEffectInfo > const & GetEffects() const
bool HasLabel(uint32 labelId) const
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
static bool ValidateSpellEffect(std::initializer_list< std::pair< uint32, SpellEffIndex > > effects)
HookList< DamageAndHealingCalcHandler > CalcDamage
HookList< CastHandler > AfterCast
WorldLocation * GetHitDest() const
HookList< CheckCastHandler > OnCheckCast
Aura * GetHitAura(bool dynObjAura=false, bool withRemoved=false) const
HookList< HitHandler > AfterHit
void SetEffectValue(SpellEffectValue value)
SpellEffectValue GetEffectValue() const
HookList< DestinationTargetSelectHandler > OnDestinationTargetSelect
int32 GetEffectValueAsInt() const
HookList< HitHandler > OnHit
HookList< EffectHandler > OnEffectHit
void PreventHitDefaultEffect(SpellEffIndex effIndex)
Unit * GetHitUnit() const
SpellValue const * GetSpellValue() const
SpellEffectInfo const & GetEffectInfo() const
HookList< EffectHandler > OnEffectHitTarget
HookList< ObjectTargetSelectHandler > OnObjectTargetSelect
HookList< CastHandler > OnCast
HookList< OnCalculateResistAbsorbHandler > OnCalculateResistAbsorb
HookList< CastHandler > BeforeCast
HookList< EffectHandler > OnEffectLaunchTarget
Difficulty GetCastDifficulty() const
HookList< EffectHandler > OnEffectLaunch
HookList< DamageAndHealingCalcHandler > CalcHealing
Unit * GetExplTargetUnit() const
SpellInfo const * GetSpellInfo() const
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
Unit * GetOriginalCaster() const
SpellInfo const * GetSpellInfo() const
SpellCastTargets m_targets
ObjectGuid m_originalCastId
void SetSpellValue(CastSpellExtraArgsInit::SpellValueOverride const &value)
static uint32 GetSearcherTypeMask(SpellInfo const *spellInfo, SpellEffectInfo const &spellEffectInfo, SpellTargetObjectTypes objType, ConditionContainer const *condList)
static void SearchTargets(SEARCHER &searcher, uint32 containerMask, WorldObject *referer, Position const *pos, float radius)
TaskContext & Repeat(TaskScheduler::duration_t duration)
TaskScheduler & Schedule(duration_t time, task_handler_t task)
TaskScheduler & Update()
Update the scheduler to the current time.
void ModifyTimer(Milliseconds mod)
float GetHealthPct() const
uint64 CountPctFromMaxHealth(float pct) const
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
void SendPlaySpellVisual(Unit *target, uint32 spellVisualId, uint8 missReason, uint8 reflectStatus, float travelSpeed, bool speedAsTime=false, float launchDelay=0.0f)
Aura * GetOwnedAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, Aura *except=nullptr) const
Powers GetPowerType() const
AuraEffect * GetAuraEffect(uint32 spellId, uint8 effIndex, ObjectGuid casterGUID=ObjectGuid::Empty) const
bool IsFullHealth() const
TempSummon * ToTempSummon()
bool IsInCombatWith(Unit const *who) const
float SpellCritChanceDone(Spell *spell, AuraEffect const *aurEff, SpellSchoolMask schoolMask, WeaponAttackType attackType=BASE_ATTACK) const
virtual bool HasSpell(uint32) const
float SpellCritChanceTaken(Unit const *caster, Spell *spell, AuraEffect const *aurEff, SpellSchoolMask schoolMask, float doneChance, WeaponAttackType attackType=BASE_ATTACK) const
bool HasAuraEffect(uint32 spellId, uint8 effIndex, ObjectGuid caster=ObjectGuid::Empty) const
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
bool HealthBelowPctDamaged(float pct, uint32 damage) const
bool HealthBelowPct(float pct) const
void NearTeleportTo(TeleportLocation const &target, bool casting=false)
bool IsInRaidWith(Unit const *unit) const
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
SpellHistory * GetSpellHistory()
bool HasBreakableByDamageCrowdControlAura(Unit const *excludeCasterChannel=nullptr) const
void RemoveMovementImpairingAuras(bool withRoot)
std::vector< AreaTrigger * > GetAreaTriggers(uint32 spellId) const
int32 SpellBaseDamageBonusDone(SpellSchoolMask schoolMask) const
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
int32 SpellHealingBonusDone(Unit *victim, SpellInfo const *spellProto, int32 healamount, DamageEffectType damagetype, SpellEffectInfo const &spellEffectInfo, uint32 stack=1, Spell *spell=nullptr, AuraEffect const *aurEff=nullptr) const
ObjectGuid GetTarget() const
AreaTrigger * GetAreaTrigger(uint32 spellId) const
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
bool IsValidAttackTarget(WorldObject const *target, SpellInfo const *bySpell=nullptr) const
PhaseShift & GetPhaseShift()
bool isInFront(WorldObject const *target, float arc=float(M_PI)) const
Position GetRandomNearPosition(float radius)
bool IsValidAssistTarget(WorldObject const *target, SpellInfo const *bySpell=nullptr) const
void MovePositionToFirstCollision(Position &pos, float dist, float angle) const
float GetDistance(WorldObject const *obj) const
bool IsWithinDist(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
bool IsFriendlyTo(WorldObject const *target) const
bool Validate(SpellInfo const *) override
void CalculateHealingBonus(SpellEffectInfo const &, Unit const *, int32 const &, int32 const &, float &pctMod) const
bool Validate(SpellInfo const *spellInfo) override
bool CheckProc(ProcEventInfo const &eventInfo) const
void HandleProc(ProcEventInfo const &eventInfo) const
void HandleEffectDummy(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void HandleOnProc(AuraEffect const *aurEff, ProcEventInfo const &eventInfo) const
bool Validate(SpellInfo const *spellInfo) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void HandleEffectHitTarget(SpellEffIndex) const
void HandleOnRemove(AuraEffect const *, AuraEffectHandleModes)
void HandleOnApply(AuraEffect const *, AuraEffectHandleModes)
void RegisterHelper() const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleOnHitTarget() const
void HandleOnProc(AuraEffect const *, ProcEventInfo const &eventInfo) const
static bool CheckProc(ProcEventInfo const &eventInfo)
bool Validate(SpellInfo const *) override
void AddAtonementTarget(ObjectGuid const &target)
void UpdateTrinityEffect() const
void UpdateSinsOfTheManyValue() const
void TriggerAtonementHealOnTargets(AuraEffect const *atonementEffect, ProcEventInfo const &eventInfo)
void RemoveAtonementTarget(ObjectGuid const &target)
std::vector< ObjectGuid > const & GetAtonementTargets() const
void HandleOnProc(AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
static bool CheckProc(AuraScript const &, ProcEventInfo const &eventInfo)
std::vector< ObjectGuid > _appliedAtonements
bool Validate(SpellInfo const *spellInfo) override
bool Validate(SpellInfo const *) override
static void PreventTarget(SpellScript const &, WorldObject *&target)
bool Validate(SpellInfo const *) override
void HandleEffectHitTarget(SpellEffIndex) const
bool Validate(SpellInfo const *) override
static void HandleEffectProc(AuraScript const &, AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
static bool CheckProc(AuraScript const &, ProcEventInfo const &eventInfo)
void HandleProc(ProcEventInfo const &eventInfo) const
bool Validate(SpellInfo const *) override
void HandleEffectProc(AuraEffect const *aurEff, ProcEventInfo const &eventInfo) const
bool Validate(SpellInfo const *) override
void FilterTargets(std::list< WorldObject * > &targets) const
bool Validate(SpellInfo const *spellInfo) override
void HandleAfterAbsorb(AuraEffect const *, DamageInfo const &dmgInfo, uint32 const &absorbAmount) const
bool Validate(SpellInfo const *) override
void HandleOnApply(AuraEffect const *aurEff, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
void HandleEffectHit(SpellEffIndex) const
void HandleProc(ProcEventInfo const &eventInfo) const
bool Validate(SpellInfo const *spellInfo) override
static bool CheckProc(AuraScript const &, ProcEventInfo const &eventInfo)
void FilterTargets(std::list< WorldObject * > &targets) const
bool Validate(SpellInfo const *spellInfo) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo const &eventInfo) const
static bool CheckProc(AuraScript const &, ProcEventInfo const &eventInfo)
static void HandleProc(AuraScript const &, AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
bool Validate(SpellInfo const *) override
void HandleAfterRemove(AuraEffect const *, AuraEffectHandleModes) const
static bool CheckProc(AuraScript const &, ProcEventInfo const &eventInfo)
bool Validate(SpellInfo const *) override
void TrackStackApplicationTime(AuraEffect const *, AuraEffectHandleModes) const
static void HandleProc(AuraScript const &script, AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &) const
void CalculateHealingBonus(SpellEffectInfo const &, Unit const *victim, int32 &, int32 &, float &pctMod) const
bool Validate(SpellInfo const *) override
void HandleHitTarget(SpellEffIndex effIndex)
void FilterTargets(std::list< WorldObject * > &targets) const
bool Validate(SpellInfo const *spellInfo) override
bool Validate(SpellInfo const *) override
void HandleEffectPeriodic(AuraEffect const *) const
bool Validate(SpellInfo const *spellInfo) override
void HandleProc(ProcEventInfo const &procInfo) const
bool Validate(SpellInfo const *spellInfo) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo const &procInfo)
static bool CheckProc(AuraScript const &, ProcEventInfo const &eventInfo)
void CalculateHealing(AuraEffect const *, Unit *, int32 &, int32 &, float &pctMod) const
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo const &eventInfo) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
static void HandleProc(AuraScript const &, AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleRemove(AuraEffect const *, AuraEffectHandleModes) const
void HandlePeriodic(AuraEffect const *) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleEffectHit(SpellEffIndex) const
static bool CheckProc(AuraScript const &, AuraEffect const *aurEff, ProcEventInfo &)
void HandleOnProc(AuraEffect const *aurEff, ProcEventInfo &) const
bool Validate(SpellInfo const *) override
static void FilterTargets(SpellScript const &, std::list< WorldObject * > &targets)
static void HandleEffectProc(AuraScript const &, AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
static bool CheckProc(AuraScript const &, ProcEventInfo const &eventInfo)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex) const
void HandleHitTarget(SpellEffIndex) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void CalculateHealingBonus(SpellEffectInfo const &, Unit *, int32 &, int32 &, float &pctMod) const
void HandleEffectProc(AuraEffect const *aurEff, ProcEventInfo &) const
void Absorb(AuraEffect *, DamageInfo const &dmgInfo, uint32 &absorbAmount)
bool Validate(SpellInfo const *spellInfo) override
static void CalculateAmount(AuraScript const &, AuraEffect const *, SpellEffectValue &amount, bool &)
bool Validate(SpellInfo const *) override
static void PreventUnwantedAura(SpellScript const &, WorldObject *&target)
bool Validate(SpellInfo const *) override
static void PreventUnwantedAura(SpellScript const &, WorldObject *&target)
void HandleHitTarget(SpellEffIndex effIndex)
bool Validate(SpellInfo const *) override
void HandleEffectHit(SpellEffIndex) const
static bool CheckProc(AuraScript const &, ProcEventInfo const &eventInfo)
static void HandleEffectProc(AuraScript const &, AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
bool Validate(SpellInfo const *) override
static void FilterTargets(SpellScript const &, std::list< WorldObject * > &targets)
void HandleEffectDummy(SpellEffIndex) const
bool Validate(SpellInfo const *) override
static bool CheckProc(AuraScript const &, AuraEffect const *aurEff, ProcEventInfo &)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo const &eventInfo) const
void HandleOnRemove(AuraEffect const *aurEff, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleEffectDummy(SpellEffIndex) const
static void HandleProc(AuraScript const &, AuraEffect *aurEff, ProcEventInfo const &eventInfo)
static bool CheckProc(AuraScript const &, AuraEffect const *, ProcEventInfo const &procInfo)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleAfterHit() const
void ReduceCooldown() const
bool Validate(SpellInfo const *) override
SpellEffectInfo const * _healEffectDummy
SpellInfo const * _spellInfoHeal
bool Validate(SpellInfo const *spellInfo) override
void HandleApplyBuffs(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *, ProcEventInfo const &eventInfo) const
void HandleEffectHit(SpellEffIndex) const
static TempSummon * GetSummon(Unit const *owner)
bool Validate(SpellInfo const *) override
static void HandleProc(AuraScript const &, ProcEventInfo const &eventInfo)
void HandleProc(AuraEffect *, ProcEventInfo const &eventInfo)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleEffectHit(SpellEffIndex) const
spell_pri_lasting_words(SpellEffIndex spellEff)
bool Validate(SpellInfo const *) override
void HandleEffectDummy(SpellEffIndex) const
void HandleDummy(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void OnPrecast() override
void CalculateDamageBonus(SpellEffectInfo const &, Unit const *, int32 const &, int32 const &, float &pctMod) const
bool Validate(SpellInfo const *spellInfo) override
static void HandleEffectProc(AuraScript const &, AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
bool Validate(SpellInfo const *) override
void RemoveEffect(AuraEffect const *, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
void CalculateDamage(AuraEffect const *, Unit *, int32 &, int32 &, float &pctMod) const
SpellEffectValue DamageIncrease
bool Validate(SpellInfo const *) override
void ModifyAuraValueAndRemoveBuff(SpellEffIndex) const
void OnPrecast() override
void CalculateDamage(SpellEffectInfo const &, Unit *, int32 &, int32 &, float &pctMod) const
SpellEffectValue _damageIncrease
void HandleEffectHitTarget(SpellEffIndex) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
static void HandleEffectProc(AuraScript const &, AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
void HandleOnRemove(AuraEffect const *, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
spell_pri_penance(uint32 damageSpellId, uint32 healingSpellId)
void HandleDummy(SpellEffIndex) const
SpellCastResult CheckCast() const
bool Validate(SpellInfo const *) override
void HandleEffectHit(SpellEffIndex) const
static bool CheckProc(AuraScript const &, ProcEventInfo const &eventInfo)
void HandleOnProc(AuraEffect const *aurEff, ProcEventInfo &) const
bool Validate(SpellInfo const *) override
void CalculateDamageBonus(SpellEffectInfo const &, Unit *, int32 &, int32 &, float &pctMod) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void CalculateHealingBonus(SpellEffectInfo const &, Unit *, int32 &, int32 &, float &pctMod) const
void HandleOnRemove(AuraEffect const *, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
void HandleOnApply(AuraEffect const *, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
spell_pri_power_surge_periodic(uint32 haloSpellId)
void HandleEffectPeriodic(AuraEffect const *) const
static void HandleProc(AuraScript const &, AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void CalculateHealing(SpellEffectInfo const &, Unit *, int32 &, int32 &, float &pctMod) const
bool Validate(SpellInfo const *) override
void FilterTargets(std::list< WorldObject * > &targets)
void HandleEffectHitTarget(SpellEffIndex) const
static std::array< Trinity::TargetPriorityRule, 5 > GetRadianceRules(Unit const *caster, Unit const *explTarget)
std::vector< ObjectGuid > _visualTargets
void CalculateAbsorb(AuraEffect const *aurEff, Unit *, int32 &, int32 &, float &pctMod)
void HandleOnRemove(AuraEffect const *aurEff, AuraEffectHandleModes) const
void HandleOnApply(AuraEffect const *aurEff, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void RestoreMana(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void CastPrayerOfMendingAura(Unit *caster, Unit *target, Unit *visualSender, int32 stack, bool firstCast) const
SpellInfo const * _spellInfoHeal
bool Validate(SpellInfo const *) override
void HandleHeal(AuraEffect const *aurEff, ProcEventInfo const &)
bool _isEmpoweredByFocusedMending
void SetEmpoweredByFocusedMending(bool isEmpowered)
void HandleEffectDummy(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void HandleJump(SpellEffIndex) const
static void FilterTargets(SpellScript const &, std::list< WorldObject * > &targets)
void HandleEffectDummy(SpellEffIndex) const
void CalcPrimaryTargetHealing(SpellEffectInfo const &, Unit const *victim, int32 &, int32 &, float &pctMod) const
bool Validate(SpellInfo const *) override
bool CheckEffectProc(AuraEffect const *, ProcEventInfo const &eventInfo) const
void HandleEffectProc(AuraEffect const *aurEff, ProcEventInfo &) const
bool Validate(SpellInfo const *) override
void HandleEffectHit(SpellEffIndex) const
void HandleDummy(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void FilterTargets(std::list< WorldObject * > &targets) const
void HandleDummy(SpellEffIndex) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleAfterCast() const
void HandleEffectDummy(SpellEffIndex)
ObjectGuid _raptureTarget
void RemoveAura(ProcEventInfo const &) const
void PreventChargeDrop(ProcEventInfo const &)
void HandlePeriodic(AuraEffect const *aurEff) const
bool Validate(SpellInfo const *) override
void CalcAbsorbAmount(AuraEffect const *, DamageInfo &dmgInfo, uint32 &)
bool Validate(SpellInfo const *) override
void HandleEffectHit(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void HandleEffectHitTarget(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void HandleEffectProc(AuraEffect const *aurEff, ProcEventInfo const &eventInfo) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleAfterCast() const
bool Validate(SpellInfo const *) override
void HandleDummyTick(AuraEffect const *aurEff) const
void HandleProc(AuraEffect *aurEff, ProcEventInfo const &eventInfo)
static bool CheckProc(AuraScript const &, ProcEventInfo const &eventInfo)
bool Validate(SpellInfo const *) override
void HandleEffectHit() const
void HandleDeathsTormentEnergize(SpellEffIndex)
void HandleDamageCalculation(SpellEffectInfo const &, Unit const *victim, int32 const &, int32 const &, float &pctMod) const
void DetermineKillStatus(DamageInfo const &damageInfo, uint32 &, int32 &) const
bool Validate(SpellInfo const *spellInfo) override
static constexpr Seconds BACKLASH_DELAY
void FilterTargets(std::list< WorldObject * > &targets) const
static constexpr uint32 GetSpellVisual(Races race, Gender gender)
bool Validate(SpellInfo const *) override
void HandleEffectHit(SpellEffIndex) const
static void HandleProc(AuraScript const &, AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
static bool CheckProc(AuraScript const &, ProcEventInfo const &eventInfo)
bool Validate(SpellInfo const *) override
void HandleOnRemove(AuraEffect const *, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
void HandleOnApply(AuraEffect const *, AuraEffectHandleModes) const
void HandleAbsorb(AuraEffect const *aurEff, DamageInfo const &, uint32 const &) const
bool Validate(SpellInfo const *) override
static bool CheckProc(AuraScript const &, ProcEventInfo const &eventInfo)
void HandleEffectProc(AuraEffect const *aurEff, ProcEventInfo &) const
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &)
static bool CheckProc(AuraScript const &, ProcEventInfo const &eventInfo)
void HandleOnProc(AuraEffect *aurEff, ProcEventInfo const &eventInfo) const
bool Validate(SpellInfo const *) override
std::queue< ObjectGuid > _healQueue
bool CheckProc(ProcEventInfo const &eventInfo)
static bool CheckEffect1(AuraScript const &, AuraEffect const *, ProcEventInfo const &eventInfo)
static bool CheckEffect0(AuraScript const &, AuraEffect const *, ProcEventInfo const &eventInfo)
void ReducePenanceCooldown(AuraEffect const *aurEff, ProcEventInfo const &) const
bool Validate(SpellInfo const *) override
void ReducePowerWordShieldCooldown(AuraEffect const *aurEff, ProcEventInfo const &) const
static void PreventEffect(SpellScript const &, WorldObject *&target)
void CalcDamage(AuraEffect const *, Unit *, int32 &, int32 &, float &pctMod) const
bool Validate(SpellInfo const *) override
void OnApply(AuraEffect const *, SpellEffectValue &, bool &)
void HandleProc(ProcEventInfo const &eventInfo) const
bool Validate(SpellInfo const *) override
static bool CheckProc(AuraScript const &, AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
void CalculateAmount(AuraEffect const *, SpellEffectValue &amount, bool &canBeRecalculated) const
void HandlePeriodic(AuraEffect const *aurEff) const
std::list< WorldObject * > SearchTargetCandidates(uint32 spellId, SpellTargetCheckTypes checkType) const
static std::array< Trinity::TargetPriorityRule, 2 > GetHealingRules(Unit const *caster)
void HandleRemoveEffect(AuraEffect const *, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
bool TryDealingDamage() const
static constexpr Position JumpOffset
static void SetDestTarget(SpellScript const &, SpellDestination &dest)
bool Validate(SpellInfo const *) override
void TriggerImmunity() const
void TriggerUnfurlingDarkness() const
void PreventDirectDamage(WorldObject *&target) const
bool Validate(SpellInfo const *) override
void FilterTargets(std::list< WorldObject * > &unitList) const
void HandleEffectProc(AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
bool Validate(SpellInfo const *) override
static bool CheckProc(AuraScript const &, ProcEventInfo const &eventInfo)
bool Validate(SpellInfo const *) override
void HandleDispel(DispelInfo const *dispelInfo) const
void HandleApplyEffect(AuraEffect const *, AuraEffectHandleModes) const
static bool CheckHolyWordSanctify(AuraScript const &, AuraEffect const *, ProcEventInfo const &eventInfo)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo const &) const
bool Validate(SpellInfo const *) override
static bool CheckHolyWordChastise(AuraScript const &, AuraEffect const *, ProcEventInfo const &eventInfo)
static bool CheckHolyWordSerenity(AuraScript const &, AuraEffect const *, ProcEventInfo const &eventInfo)
bool Execute(uint64 time, uint32) override
static constexpr Milliseconds Period
ObjectGuid _originalCastId
BoltEvent(Unit *caster, ObjectGuid target, ObjectGuid originalCastId, int32 count)
void HandleEffectHit(SpellEffIndex) const
bool Validate(SpellInfo const *spellInfo) override
void HandleEffectHitTarget(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void FilterTargets(std::list< WorldObject * > &targets) const
bool Validate(SpellInfo const *) override
void HandleEffectHitTarget(SpellEffIndex effIndex)
Unit * GetSummon(Unit const *owner)
Optional< uint32 > GetSpellToCast(uint32 spellId)
void Trigger(AuraScript const &, AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
std::vector< Vector3 > PointsArray
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
constexpr void EraseIf(Container &c, Predicate p)
auto SelectRandomContainerElement(C const &container) -> std::add_const_t< decltype(*std::ranges::begin(container))> &
void RandomResize(C &container, std::size_t requestedSize)
void SelectRandomInjuredTargets(std::list< WorldObject * > &targets, size_t maxTargets, bool prioritizePlayers, Unit const *prioritizeGroupMembersOf)
void SortTargetsWithPriorityRules(std::list< WorldObject * > &targets, size_t maxTargets, std::span< TargetPriorityRule const > rules)
struct advstd::ranges::Contains contains
@ SPELL_PRIEST_DIVINE_HYMN_HEAL
@ NPC_PRIEST_DIVINE_IMAGE
void AddSC_priest_spell_scripts()
@ SPELL_LABEL_PRIEST_APOTHEOSIS
@ SPELL_PRIEST_POWER_SURGE_PERIODIC_SHADOW
@ SPELL_PRIEST_SEARING_LIGHT_DAMAGE
@ SPELL_PRIEST_ANGELIC_BULWARK_BUFF
@ SPELL_PRIEST_PENANCE_HEALING
@ SPELL_PRIEST_LEVITATE_EFFECT
@ SPELL_PRIEST_DIVINE_BLESSING
@ SPELL_PRIEST_POWER_OF_THE_DARK_SIDE
@ SPELL_PRIEST_DAZZLING_LIGHT
@ SPELL_PRIEST_MINDBENDER_SHADOW
@ SPELL_PRIEST_HOLY_10_1_CLASS_SET_2P_CHOOSER
@ SPELL_PRIEST_MASTERY_GRACE
@ SPELL_PRIEST_POWER_LEECH_MINDBENDER_INSANITY
@ SPELL_PRIEST_LIGHT_ERUPTION
@ SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P_EFFECT
@ SPELL_PRIEST_HOLY_WORD_CHASTISE_STUN
@ SPELL_PRIEST_ABYSSAL_REVERIE
@ SPELL_PRIEST_ULTIMATE_PENITENCE_DAMAGE
@ SPELL_PRIEST_BLAZE_OF_LIGHT_DECREASE
@ SPELL_PRIEST_TWILIGHT_EQUILIBRIUM_HOLY
@ SPELL_PRIEST_DIVINE_HYMN_HEAL
@ SPELL_PRIEST_DARK_REPRIMAND_CHANNEL_HEALING
@ SPELL_PRIEST_ENTROPIC_RIFT
@ SPELL_PRIEST_TRAIL_OF_LIGHT_HEAL
@ SPELL_PRIEST_ASSURED_SAFETY
@ SPELL_PRIEST_HOLY_WORD_SERENITY
@ SPELL_PRIEST_INESCAPABLE_TORMENT
@ SPELL_PRIEST_SURGE_OF_LIGHT_EFFECT
@ SPELL_PRIEST_CRYSTALLINE_REFLECTION_HEAL
@ SPELL_PRIEST_DARK_REPRIMAND_CHANNEL_DAMAGE
@ SPELL_PRIEST_ANGELIC_FEATHER_AURA
@ SPELL_PRIEST_POWER_WORD_SHIELD
@ SPELL_PRIEST_PENANCE_DAMAGE
@ SPELL_PRIEST_EMPYREAL_BLAZE_AURA
@ SPELL_PRIEST_EMPYREAL_BLAZE
@ SPELL_PRIEST_ARMOR_OF_FAITH
@ SPELL_PRIEST_ATONEMENT_HEAL
@ SPELL_PRIEST_BODY_AND_SOUL_SPEED
@ SPELL_PRIEST_HOLY_10_1_CLASS_SET_4P
@ SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL
@ SPELL_PRIEST_PENANCE_CHANNEL_DAMAGE
@ SPELL_PRIEST_BLAZE_OF_LIGHT
@ SPELL_PRIEST_PRAYER_OF_MENDING_AURA
@ SPELL_PRIEST_FOCUSED_MENDING
@ SPELL_PRIEST_POWER_LEECH_MINDBENDER_MANA
@ SPELL_PRIEST_DIVINE_STAR_SHADOW_HEAL
@ SPELL_PRIEST_DARK_INDULGENCE
@ SPELL_PRIEST_MINDBENDER_DISC
@ SPELL_PRIEST_REVEL_IN_PURITY
@ SPELL_PRIEST_BURNING_VEHEMENCE_DAMAGE
@ SPELL_PRIEST_DARK_REPRIMAND_DAMAGE
@ SPELL_PRIEST_POWER_WORD_SOLACE_ENERGIZE
@ SPELL_PRIEST_INSIDIOUS_IRE_AURA
@ SPELL_PRIEST_VAMPIRIC_TOUCH
@ SPELL_PRIEST_HALO_SHADOW_HEAL
@ SPELL_PRIEST_MIND_DEVOURER_AURA
@ SPELL_PRIEST_DEVOURING_PLAGUE
@ SPELL_PRIEST_SHIELD_DISCIPLINE
@ SPELL_PRIEST_PENANCE_CHANNEL_HEALING
@ SPELL_PRIEST_MASOCHISM_TALENT
@ SPELL_PRIEST_THE_PENITENT_AURA
@ SPELL_PRIEST_ENTROPIC_RIFT_AURA
@ SPELL_PRIEST_DISPERSING_LIGHT_HEAL
@ SPELL_PRIEST_DIVINE_AEGIS
@ SPELL_PRIEST_VOID_SHIELD
@ SPELL_PRIEST_WHISPERING_SHADOWS
@ SPELL_PRIEST_DIVINITY_AURA
@ SPELL_PRIEST_EMPOWERED_RENEW_HEAL
@ SPELL_PRIEST_TITHE_EVASION
@ SPELL_PRIEST_UNFURLING_DARKNESS_AURA
@ SPELL_PRIEST_PRAYER_OF_HEALING
@ SPELL_PRIEST_MINDGAMES_VENTHYR
@ SPELL_PRIEST_DARK_REPRIMAND
@ SPELL_PRIEST_GREATER_HEAL
@ SPELL_PRIEST_EPIPHANY_HIGHLIGHT
@ SPELL_PRIEST_PROTECTIVE_LIGHT_AURA
@ SPELL_PRIEST_HOLY_WORD_SANCTIFY
@ SPELL_PRIEST_ANGELIC_FEATHER_AREATRIGGER
@ SPELL_PRIEST_PRAYER_OF_MENDING
@ SPELL_PRIEST_FLASH_HEAL
@ SPELL_PRIEST_MIND_BOMB_STUN
@ SPELL_PRIEST_ULTIMATE_PENITENCE_FALLING_FACING_CONTROL
@ SPELL_PRIEST_TRANSLUCENT_IMAGE
@ SPELL_PRIEST_AUSPICIOUS_SPIRITS
@ SPELL_PRIEST_VOID_VOLLEY_DAMAGE
@ SPELL_PRIEST_PURGE_THE_WICKED_PERIODIC
@ SPELL_PRIEST_POWER_OF_THE_DARK_SIDE_TINT
@ SPELL_PRIEST_SHADOW_WORD_PAIN
@ SPELL_PRIEST_CRYSTALLINE_REFLECTION
@ SPELL_PRIEST_PROTECTOR_OF_THE_FRAIL
@ SPELL_PRIEST_ESSENCE_DEVOURER
@ SPELL_PRIEST_PAIN_TRANSFORMATION
@ SPELL_PRIEST_ORACULAR_HEAL
@ SPELL_PRIEST_POWER_SURGE
@ SPELL_PRIEST_SHADOW_COVENANT_EFFECT
@ SPELL_PRIEST_EXPIATION_DAMAGE
@ SPELL_PRIEST_EVANGELISM
@ SPELL_PRIEST_PRAYER_OF_MENDING_HEAL
@ SPELL_PRIEST_LIGHTS_WRATH_VISUAL
@ SPELL_PRIEST_WHISPERING_SHADOWS_DUMMY
@ SPELL_PRIEST_HOLY_WORD_CHASTISE_INCAPACITATE
@ SPELL_PRIEST_VAMPIRIC_EMBRACE_HEAL
@ SPELL_PRIEST_HALO_SHADOW_DAMAGE
@ SPELL_PRIEST_SHADOWY_APPARITION_DUMMY
@ SPELL_PRIEST_DIVINE_AEGIS_ABSORB
@ SPELL_PRIEST_DIVINE_STAR_HOLY_DAMAGE
@ SPELL_PRIEST_UNFURLING_DARKNESS_DEBUFF
@ SPELL_PRIEST_DARK_REPRIMAND_HEALING
@ SPELL_PRIEST_ATONEMENT_EFFECT
@ SPELL_PRIEST_HOLY_MENDING_HEAL
@ SPELL_PRIEST_PAIN_SUPPRESSION
@ SPELL_PRIEST_PAIN_TRANSFORMATION_HEAL
@ SPELL_PRIEST_DIVINE_STAR_SHADOW_DAMAGE
@ SPELL_PRIEST_DISPERSING_LIGHT
@ SPELL_PRIEST_SHADOW_WORD_DEATH_DAMAGE
@ SPELL_PRIEST_POWER_WORD_LIFE
@ SPELL_PRIEST_DIVINE_WRATH
@ SPELL_PRIEST_DIVINE_HALO
@ SPELL_PRIEST_BLESSED_LIGHT
@ SPELL_PRIEST_ULTIMATE_PENITENCE_CHANNEL
@ SPELL_PRIEST_DIVINE_STAR_HOLY
@ SPELL_PRIEST_DIVINE_IMAGE_EMPOWER_STACK
@ SPELL_PRIEST_SEARING_LIGHT
@ SPELL_PRIEST_ULTIMATE_PENITENCE_HEAL
@ SPELL_PRIEST_POWER_LEECH_SHADOWFIEND_MANA
@ SPELL_PRIEST_POWER_WORD_RADIANCE
@ SPELL_PRIEST_DIVINE_IMAGE_SUMMON
@ SPELL_PRIEST_DIVINE_IMAGE_EMPOWER
@ SPELL_PRIEST_DIVINE_SERVICE
@ SPELL_PRIEST_MASOCHISM_PERIODIC_HEAL
@ SPELL_PRIEST_INESCAPABLE_TORMENT_TELEPORT
@ SPELL_PRIEST_POWER_SURGE_HALO_VISUAL_RETURN
@ SPELL_PRIEST_WEAKENED_SOUL
@ SPELL_PRIEST_SPIRIT_OF_REDEMPTION
@ SPELL_PRIEST_HALO_HOLY_DAMAGE
@ SPELL_PRIEST_SURGE_OF_LIGHT
@ SPELL_PRIEST_DIVINE_FAVOR_SERENITY
@ SPELL_PRIEST_MIND_DEVOURER
@ SPELL_PRIEST_ANGELIC_BULWARK_DEBUFF
@ SPELL_PRIEST_VOID_TORRENT
@ SPELL_PRIEST_STRENGTH_OF_SOUL
@ SPELL_PRIEST_ANSWERED_PRAYERS
@ SPELL_PRIEST_BINDING_HEALS_HEAL
@ SPELL_PRIEST_HOLY_WORD_CHASTISE
@ SPELL_PVP_RULES_ENABLED_HARDCODED
@ SPELL_PRIEST_PURGE_THE_WICKED_DUMMY
@ SPELL_PRIEST_SHADOWY_APPARITION_MISSILE
@ SPELL_PRIEST_TRANQUIL_LIGHT
@ SPELL_PRIEST_SHIELD_DISCIPLINE_EFFECT
@ SPELL_PRIEST_ENTROPIC_RIFT_AREATRIGGER
@ SPELL_PRIEST_HALO_HOLY_HEAL
@ SPELL_PRIEST_CRYSTALLINE_REFLECTION_REFLECT
@ SPELL_PRIEST_TWILIGHT_EQUILIBRIUM_SHADOW
@ SPELL_PRIEST_HEAVENS_WRATH
@ SPELL_PRIEST_HALO_SHADOW
@ SPELL_PRIEST_CIRCLE_OF_HEALING
@ SPELL_PRIEST_DIVINE_FAVOR_CHASTISE
@ SPELL_PRIEST_ENTROPIC_RIFT_DAMAGE
@ SPELL_PRIEST_PRAYER_OF_MENDING_JUMP
@ SPELL_PRIEST_APOTHEOSIS
@ SPELL_PRIEST_POWER_LEECH_SHADOWFIEND_INSANITY
@ SPELL_PRIEST_ULTIMATE_PENITENCE_IMMUNITY
@ SPELL_PRIEST_SEARING_LIGHT_DIVINE_IMAGE
@ SPELL_PRIEST_SINS_OF_THE_MANY
@ SPELL_PRIEST_PHANTOM_REACH
@ SPELL_PRIEST_ESSENCE_DEVOURER_MINDBENDER_HEAL
@ SPELL_PRIEST_LASTING_WORDS
@ SPELL_PRIEST_HEALING_LIGHT
@ SPELL_PRIEST_DIVINE_STAR_SHADOW
@ SPELL_PRIEST_UNFURLING_DARKNESS
@ SPELL_PRIEST_BLAZE_OF_LIGHT_INCREASE
@ SPELL_PRIEST_RENEWED_HOPE
@ SPELL_PRIEST_SANCTUARY_ABSORB
@ SPELL_PRIEST_SAY_YOUR_PRAYERS
@ SPELL_PRIEST_ITEM_EFFICIENCY
@ SPELL_PRIEST_SHADOW_WORD_DEATH
@ SPELL_PRIEST_POWER_SURGE_PERIODIC_HOLY
@ SPELL_PRIEST_SHADOW_MEND_PERIODIC_DUMMY
@ SPELL_PRIEST_ULTIMATE_PENITENCE
@ SPELL_PRIEST_EMPOWERED_RENEW
@ SPELL_PRIEST_RHAPSODY_PROC
@ SPELL_PRIEST_BLESSED_HEALING
@ SPELL_PRIEST_TRINITY_EFFECT
@ SPELL_PRIEST_PRAYERFUL_LITANY
@ SPELL_PRIEST_BENEDICTION
@ SPELL_PRIEST_ESSENCE_DEVOURER_SHADOWFIEND_HEAL
@ SPELL_PRIEST_SCHISM_AURA
@ SPELL_PRIEST_RENEWED_HOPE_EFFECT
@ SPELL_PRIEST_SHADOW_MEND_DAMAGE
@ SPELL_PRIEST_DIVINE_WORD_SANCTUARY_AREATRIGGER
@ SPELL_PRIEST_SANCTUARY_AURA
@ SPELL_PRIEST_VOID_SHIELD_EFFECT
@ SPELL_PRIEST_BODY_AND_SOUL
@ SPELL_PRIEST_STRENGTH_OF_SOUL_EFFECT
@ SPELL_PRIEST_ARCHANGEL_AURA
@ SPELL_PRIEST_ENTROPIC_RIFT_PERIODIC
@ SPELL_PRIEST_LEAP_OF_FAITH_EFFECT
@ SPELL_PRIEST_MIND_BLAST
@ SPELL_PRIEST_INESCAPABLE_TORMENT_DAMAGE
@ SPELL_PRIEST_PURGE_THE_WICKED
@ SPELL_PRIEST_SHADOW_COVENANT
@ SPELL_PRIEST_HOLY_WORD_SALVATION
@ SPELL_PRIEST_DIVINE_WORD_SANCTUARY_HEAL
@ SPELL_PRIEST_VOICE_OF_HARMONY
@ SPELL_PRIEST_FROM_DARKNESS_COMES_LIGHT_AURA
@ SPELL_PRIEST_HARSH_DISCIPLINE
@ SPELL_PRIEST_CASTIGATION
@ SPELL_PRIEST_SIN_AND_PUNISHMENT
@ SPELL_PRIEST_HARSH_DISCIPLINE_AURA
@ SPELL_PRIEST_DIVINE_STAR_HOLY_HEAL
@ SPELL_PRIEST_POWER_SURGE_HALO_VISUAL
@ SPELL_VISUAL_PRIEST_POWER_WORD_RADIANCE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_ORC_FEMALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_TROLL_MALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_PANDAREN_FEMALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_WORGEN_FEMALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_TROLL_FEMALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_DWARF_FEMALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_UNDEAD_MALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_GNOME_MALE
@ SPELL_VISUAL_PRIEST_PRAYER_OF_MENDING
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_GOBLIN_MALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_PANDAREN_MALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_ORC_MALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_UNDEAD_FEMALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_HUMAN_MALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_HUMAN_FEMALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_WORGEN_MALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_TAUREN_MALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_TAUREN_FEMALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_BELF_MALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_BELF_FEMALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_NIGHTELF_MALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_DWARF_MALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_DRAENEI_FEMALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_NIGHTELF_FEMALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_GNOME_FEMALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_GOBLIN_FEMALE
@ SPELL_VISUAL_PRIEST_SHADOWY_APPARITION_DRAENEI_MALE
constexpr float GetPositionX() const
constexpr float GetPositionY() const
constexpr bool IsInDist2d(float x, float y, float dist) const
float GetExactDist(float x, float y, float z) const
constexpr void GetPosition(float &x, float &y) const
constexpr float GetPositionZ() const
void RelocateOffset(Position const &offset)
uint32 MaxAffectedTargets
void OnInitialize() override
areatrigger_pri_angelic_feather(AreaTrigger *areatrigger)
void OnUnitEnter(Unit *unit) override
Position _casterCurrentPosition
void OnInitialize() override
void OnUnitEnter(Unit *unit) override
void OnDestinationReached() override
void OnUpdate(uint32 diff) override
void OnUnitExit(Unit *unit, AreaTriggerExitReason) override
void HandleUnitEnterExit(Unit *unit)
std::vector< ObjectGuid > _affectedUnits
void OnDestinationReached() override
Unit * UpdateTarget() const
void OnUpdate(uint32 diff) override
void OnCreate(Spell const *creatingSpell) override
static constexpr std::array< DBCPosition2D, 2 > OverrideScaleCurve
void OnUnitExit(Unit *unit, AreaTriggerExitReason reason) override
void OnUnitEnter(Unit *unit) override
SpellSchoolMask DamageSchoolMask
SpellInfo const * TriggeredBy
SpellEffectValue DamagePct
ObjectGuid TargetToExclude
SpellEffectValue EffectivenessPct
static void ModifyCooldown(Unit *priest, SpellInfo const *spellInfo, Milliseconds cooldownMod)