173 .TriggeringAura = aurEff
365 if (!cloakedInShadows)
444 flatMod += t5->GetAmountAsInt();
461 flatMod += t5->GetAmountAsInt();
492 aura->SetDuration(aura->GetDuration() + amount);
706 if (targets.empty() ||
GetCaster()->GetVehicleBase())
758 .TriggeringAura = aurEff
769 if (!hasLethalPoisonActive)
877 if (caster->
HasAura(poisonAura))
907 .TriggeringAura = aurEff
929 .TriggeringAura = aurEff
1003 int32 currentDuration = 0;
1008 currentDuration = aura->GetDuration();
1013 std::vector<uint32> possibleBuffs(std::begin(
Spells), std::end(
Spells));
1024 else if (chance <= 20)
1027 for (
int32 i = 0; i < numBuffs; ++i)
1029 uint32 spellId = possibleBuffs[i];
1062 if (!auraVenomousWounds)
1071 int32 extraAmount = float(cost->Amount) * pct;
1163 .TriggeringAura = aurEff
1261 .TriggeringAura = aurEff
1283 damagePerCombo += t5->GetAmountAsInt();
1285 int32 finalDamage = damagePerCombo;
1287 finalDamage *= *comboPointCost;
1344 .TriggeringAura = aurEff
1348 .TriggeringAura = aurEff
1352 .TriggeringAura = aurEff
1435 script->SetRedirectTarget(explTarget->GetGUID());
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
std::chrono::duration< double, Seconds::period > FloatSeconds
std::list< ObjectGuid > GuidList
std::optional< T > Optional
Optional helper class to wrap optional values within.
int32 irand(int32 min, int32 max)
bool roll_chance(T chance)
#define RegisterSpellAndAuraScriptPair(script_1, script_2)
#define RegisterSpellScript(spell_script)
@ TARGET_UNIT_DEST_AREA_ENEMY
@ SPELL_EFFECT_TRIGGER_SPELL
@ SPELL_EFFECT_SCHOOL_DAMAGE
@ SPELL_EFFECT_APPLY_AURA
@ SPELL_FAILED_OUT_OF_RANGE
@ SPELL_FAILED_BAD_TARGETS
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_PERIODIC_DAMAGE
@ SPELL_AURA_PROC_TRIGGER_SPELL
@ SPELL_AURA_MOD_MELEE_HASTE
@ SPELL_AURA_MOD_POWER_REGEN_PERCENT
@ SPELL_AURA_PERIODIC_DUMMY
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
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_CAST_IN_PROGRESS
Will not check if a current cast is in progress.
@ TRIGGERED_IGNORE_POWER_COST
Will ignore power and reagent cost.
@ TRIGGERED_IGNORE_GCD
Will ignore GCD.
@ TRIGGERED_DONT_REPORT_CAST_ERROR
Will return SPELL_FAILED_DONT_REPORT in CheckCast functions.
#define SpellCheckCastFn(F)
#define AuraEffectProcFn(F, I, N)
#define SpellEffectFn(F, I, N)
#define AuraEffectCalcAmountFn(F, I, N)
#define SpellObjectAreaTargetSelectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
#define AuraCheckEffectProcFn(F, I, N)
#define SpellCalcDamageFn(F)
#define AuraEffectApplyFn(F, I, N, M)
#define AuraEffectAbsorbOverkillFn(F, I)
#define AuraCheckProcFn(F)
#define AuraEffectCalcDamageFn(F, I, N)
#define AuraEffectRemoveFn(F, I, N, M)
SpellEffectInfo const & GetSpellEffectInfo() const
int32 GetAmountAsInt() const
SpellEffectValue GetAmount() const
HookList< EffectCalcDamageAndHealingHandler > DoEffectCalcDamageAndHealing
void PreventDefaultAction()
AuraApplication const * GetTargetApplication() const
HookList< EffectApplyHandler > AfterEffectRemove
HookList< CheckEffectProcHandler > DoCheckEffectProc
HookList< EffectPeriodicHandler > OnEffectPeriodic
SpellInfo const * GetSpellInfo() const
HookList< EffectApplyHandler > AfterEffectApply
HookList< EffectCalcAmountHandler > DoEffectCalcAmount
SpellEffectInfo const & GetEffectInfo(SpellEffIndex effIndex) const
HookList< EffectAbsorbHandler > OnEffectAbsorb
ObjectGuid GetCasterGUID() const
Difficulty GetCastDifficulty() const
HookList< CheckProcHandler > DoCheckProc
HookList< EffectApplyHandler > OnEffectRemove
HookList< EffectProcHandler > OnEffectProc
int32 GetMaxDuration() const
int32 GetDuration() const
ObjectGuid const & GetGUID() const
static ObjectGuid const Empty
Unit * GetActionTarget() const
Spell const * GetProcSpell() const
DamageInfo * GetDamageInfo() const
Unit * GetProcTarget() const
void ModifyChargeRecoveryTime(uint32 chargeCategoryId, Duration cooldownMod)
void ModifyCooldown(uint32 spellId, Duration cooldownMod, bool withoutCategoryCooldown=false)
Optional< SpellPowerCost > CalcPowerCost(Powers powerType, bool optionalCost, WorldObject const *caster, SpellSchoolMask schoolMask, Spell *spell=nullptr) const
bool HasAura(AuraType aura) 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
HookList< CheckCastHandler > OnCheckCast
Aura * GetHitAura(bool dynObjAura=false, bool withRemoved=false) const
int32 GetHitDamage() const
HookList< HitHandler > AfterHit
HookList< EffectHandler > OnEffectHit
void PreventHitDefaultEffect(SpellEffIndex effIndex)
int64 GetUnitTargetCountForEffect(SpellEffIndex effect) const
Unit * GetHitUnit() const
SpellEffectInfo const & GetEffectInfo() const
HookList< EffectHandler > OnEffectHitTarget
void FinishCast(SpellCastResult result, int32 *param1=nullptr, int32 *param2=nullptr)
WorldObject * GetExplTargetWorldObject() const
HookList< EffectHandler > OnEffectLaunchTarget
void SetHitDamage(int32 damage)
Unit * GetExplTargetUnit() const
SpellInfo const * GetSpellInfo() const
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
SpellInfo const * GetSpellInfo() const
bool HasPowerTypeCost(Powers power) const
Optional< int32 > GetPowerTypeCostAmount(Powers power) const
void UnregisterRedirectThreat(uint32 spellId)
int32 ModifyPower(Powers power, int32 val, bool withPowerUpdate=true)
void RemoveAurasByType(AuraType auraType, std::function< bool(AuraApplication const *)> const &check, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
void SetHealth(uint64 val)
uint64 CountPctFromMaxHealth(float pct) const
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
ThreatManager & GetThreatManager()
Unit * SelectNearbyTarget(Unit *exclude=nullptr, float dist=NOMINAL_MELEE_RANGE) const
AuraEffect * GetAuraEffect(uint32 spellId, uint8 effIndex, ObjectGuid casterGUID=ObjectGuid::Empty) 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 HasAuraType(AuraType auraType) const
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
SpellHistory * GetSpellHistory()
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
bool isInBack(WorldObject const *target, float arc=float(M_PI)) const
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *aurEff, ProcEventInfo &) const
void FilterTargets(std::list< WorldObject * > &targets) const
bool Validate(SpellInfo const *) override
void HandleHit(SpellEffIndex) const
void HandleHitDamage(SpellEffIndex)
bool Validate(SpellInfo const *spellInfo) override
bool Validate(SpellInfo const *) override
void EffectRemove(AuraEffect const *, AuraEffectHandleModes) const
bool CheckProc(ProcEventInfo &eventInfo)
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *spellInfo) override
void HandleAbsorb(AuraEffect const *, DamageInfo const &, uint32 &absorbAmount)
bool Validate(SpellInfo const *) override
void HandleCloakedInShadows() const
bool Validate(SpellInfo const *) override
void HandleInstantDamage(SpellEffIndex) const
void HandleProc(AuraEffect const *aurEff, ProcEventInfo const &procInfo) const
bool Validate(SpellInfo const *) override
static bool CheckProc(AuraScript const &, AuraEffect const *, ProcEventInfo const &procEvent)
void CalculateDamage(SpellEffectInfo const &, Unit *, int32 &, int32 &flatMod, float &pctMod) const
void CalculateDamage(SpellEffectInfo const &, Unit *, int32 &, int32 &flatMod, float &pctMod) const
bool HandleCheckProc(ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *aurEff, ProcEventInfo &procInfo)
void HandleProc(AuraEffect *aurEff, ProcEventInfo &)
bool Validate(SpellInfo const *) override
void CalculateDamage(AuraEffect const *, Unit const *, int32 &, int32 &, float &pctMod) const
bool Validate(SpellInfo const *) override
void CalculateBonus(AuraEffect const *, SpellEffectValue &, bool &)
void HandleEffectRemove(AuraEffect const *, AuraEffectHandleModes) const
void HandleEffectApply(AuraEffect const *, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
void HandleBuff(uint32 spellToCast, uint32 auraToRemove) const
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex) const
void AddTarget(Unit *target)
void HandleRemove(AuraEffect const *, AuraEffectHandleModes)
void HandleEffectPeriodic(AuraEffect const *)
bool Validate(SpellInfo const *) override
void HandleApply(AuraEffect const *, AuraEffectHandleModes)
void HandleDummy(SpellEffIndex)
void FilterTargets(std::list< WorldObject * > &targets)
bool CheckProc(AuraEffect const *, ProcEventInfo &procInfo)
void HandleOnApply(AuraEffect const *aurEff, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
void HandleOnRemove(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
bool HandleCheckProc(ProcEventInfo &eventInfo)
void HandleProc(AuraEffect *aurEff, ProcEventInfo &procInfo)
bool Validate(SpellInfo const *) override
void HandleEnergize(SpellEffIndex) const
SpellCastResult CheckCast()
void HandleHit(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *aurEff, ProcEventInfo &)
bool Validate(SpellInfo const *) override
void HandleEffectApply(AuraEffect const *aurEff, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
void OnApply(AuraEffect const *, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *aurEff, ProcEventInfo &procInfo)
bool Validate(SpellInfo const *) override
static uint32 constexpr Spells[]
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
static uint32 constexpr Spells[]
bool Validate(SpellInfo const *) override
void OnEffectRemoved(AuraEffect const *, AuraEffectHandleModes)
void HandleProc(AuraEffect *aurEff, ProcEventInfo &procInfo)
void HandleEffectRemove(AuraEffect const *, AuraEffectHandleModes)
void HandleEffectApply(AuraEffect const *aurEff, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
bool _hasPremeditationAura
bool Validate(SpellInfo const *) override
void HandleEnergize(SpellEffIndex)
SpellCastResult HandleCheckCast()
bool Validate(SpellInfo const *) override
void HandleEffectRemove(AuraEffect const *, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
void HandleAfterCast() const
bool Validate(SpellInfo const *) override
void HandleEnergize(SpellEffIndex effIndex) const
bool Validate(SpellInfo const *) override
void HandlePeriodicEffect(AuraEffect const *aurEff) const
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleEffectRemove(AuraEffect const *, AuraEffectHandleModes)
void HandleEffectApply(AuraEffect const *aurEff, AuraEffectHandleModes)
void HandleEffectHitTarget(SpellEffIndex)
bool Validate(SpellInfo const *) override
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
ObjectGuid _redirectTarget
void SetRedirectTarget(ObjectGuid guid)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *aurEff, ProcEventInfo &)
void HandleRemove(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
void CheckForStun(AuraEffect const *aurEff)
bool CheckForStun(AuraEffect const *, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void HandleEffectRemove(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
void OnLaunchTarget(SpellEffIndex effIndex)
void HandleProc(AuraEffect *aurEff, ProcEventInfo &)
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
void RandomShuffle(Iterator begin, Iterator end)
Reorder the elements of the iterator range randomly.
auto SelectRandomContainerElement(C const &container) -> std::add_const_t< decltype(*std::ranges::begin(container))> &
static constexpr std::array< std::pair< uint32, uint32 >, 7 > PoisonAuraToDebuff
bool IsFinishingMove(Spell const *spell)
void AddSC_rogue_spell_scripts()
Optional< int32 > GetFinishingMoveCPCost(Spell const *spell)
@ SPELL_ROGUE_PREY_ON_THE_WEAK
@ SPELL_ROGUE_TRICKS_OF_THE_TRADE_PROC
@ SPELL_ROGUE_SHURIKEN_STORM_DAMAGE
@ SPELL_ROGUE_AIRBORNE_IRRITANT
@ SPELL_ROGUE_ADRENALINE_RUSH
@ SPELL_ROGUE_SLICE_AND_DICE
@ SPELL_ROGUE_IMPROVED_SHIV
@ SPELL_ROGUE_WOUND_POISON_DEBUFF
@ SPELL_ROGUE_DEADLY_POISON
@ SPELL_ROGUE_TRUE_BEARING
@ SPELL_ROGUE_PREMEDITATION_PASSIVE
@ SPELL_ROGUE_IMPROVED_GARROTE_STEALTH
@ SPELL_ROGUE_TURN_THE_TABLES_BUFF
@ SPELL_ROGUE_MAIN_GAUCHE
@ SPELL_ROGUE_WOUND_POISON
@ SPELL_ROGUE_SHIV_NATURE_DAMAGE
@ SPELL_ROGUE_PREY_ON_THE_WEAK_TALENT
@ SPELL_ROGUE_KILLING_SPREE_WEAPON_DMG
@ SPELL_ROGUE_SHADOW_FOCUS_EFFECT
@ SPELL_ROGUE_BURIED_TREASURE
@ SPELL_ROGUE_PREMEDITATION_AURA
@ SPELL_ROGUE_BLADE_FLURRY
@ SPELL_ROGUE_ATROPHIC_POISON_DEBUFF
@ SPELL_ROGUE_GRAND_MELEE
@ SPELL_ROGUE_GRAPPLING_HOOK
@ SPELL_ROGUE_CHEATING_DEATH
@ SPELL_ROGUE_IMPROVED_GARROTE_AFTER_STEALTH
@ SPELL_ROGUE_CRIPPLING_POISON
@ SPELL_ROGUE_TRICKS_OF_THE_TRADE
@ SPELL_ROGUE_RUTHLESS_PRECISION
@ SPELL_ROGUE_SYMBOLS_OF_DEATH_RANK2
@ SPELL_ROGUE_NUMBING_POISON_DEBUFF
@ SPELL_ROGUE_STEALTH_SHAPESHIFT_AURA
@ SPELL_ROGUE_SHADOW_FOCUS
@ SPELL_ROGUE_CLOAKED_IN_SHADOWS_TALENT
@ SPELL_ROGUE_ATROPHIC_POISON
@ SPELL_ROGUE_KILLING_SPREE
@ SPELL_ROGUE_STEALTH_STEALTH_AURA
@ SPELL_ROGUE_AMPLIFYING_POISON
@ SPELL_ROGUE_T5_2P_SET_BONUS
@ SPELL_ROGUE_INSTANT_POISON
@ SPELL_ROGUE_NUMBING_POISON
@ SPELL_ROGUE_VANISH_AURA
@ SPELL_ROGUE_SOOTHING_DARKNESS_TALENT
@ SPELL_ROGUE_SOOTHING_DARKNESS_HEAL
@ SPELL_ROGUE_CRIPPLING_POISON_DEBUFF
@ SPELL_ROGUE_IMPROVED_GARROTE_TALENT
@ SPELL_ROGUE_KILLING_SPREE_DMG_BUFF
@ SPELL_ROGUE_DEADLY_POISON_DEBUFF
@ SPELL_ROGUE_LEECHING_POISON_AURA
@ SPELL_ROGUE_LEECHING_POISON_TALENT
@ SPELL_ROGUE_SHOT_IN_THE_DARK_BUFF
@ SPELL_ROGUE_SHOT_IN_THE_DARK_TALENT
@ SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK
@ SPELL_ROGUE_SHURIKEN_STORM_ENERGIZE
@ SPELL_ROGUE_CHEATED_DEATH
@ SPELL_ROGUE_KILLING_SPREE_TELEPORT
@ SPELL_ROGUE_SKULL_AND_CROSSBONES
@ SPELL_ROGUE_MARKED_FOR_DEATH
@ SPELL_ROGUE_HONOR_AMONG_THIEVES_ENERGIZE
@ SPELL_ROGUE_BLACKJACK_TALENT
@ SPELL_ROGUE_SYMBOLS_OF_DEATH_CRIT_AURA
@ SPELL_ROGUE_SHADOWS_GRASP
@ SPELL_ROGUE_BETWEEN_THE_EYES
@ SPELL_ROGUE_SHADOW_DANCE
@ SPELL_ROGUE_CLOAKED_IN_SHADOWS_ABSORB
@ SPELL_ROGUE_PREMEDITATION_ENERGIZE
@ SPELL_ROGUE_ACROBATIC_STRIKES_PROC
@ SPELL_ROGUE_INSTANT_POISON_DAMAGE
@ SPELL_ROGUE_VENOMOUS_WOUNDS
@ SPELL_ROGUE_DEADLY_POISON_INSTANT_DAMAGE
@ SPELL_ROGUE_CHEAT_DEATH_DUMMY
@ SPELL_ROGUE_AMPLIFYING_POISON_DEBUFF
@ SPELL_ROGUE_NIGHT_TERRORS
static constexpr bool IsLethalPoison(uint32 spellId)