137 AddPct(absorb, calmingCoalescence->GetAmount());
138 calmingCoalescence->GetBase()->Remove();
231 return singleTargetExplicitResult;
381 float newAmount = (base / (base + K));
382 newAmount *= multiplier;
385 float absorbAmount = float(dmgInfo.
GetDamage()) * newAmount;
386 if (absorbAmount > 0)
408 if (!effStaggerRemaining)
411 float newAmount = effStaggerRemaining->
GetAmount() + amount;
415 auraStagger->RefreshDuration();
416 effStaggerRemaining->
ChangeAmount(newAmount,
false,
true );
431 const float StaggerHeavy = 0.6f;
432 const float StaggerModerate = 0.3f;
434 float staggerPct = amount / float(unit->
GetMaxHealth());
462 float total = float(auraEff->GetAmount());
463 float tickDamage = float(aurEff->
GetAmount());
464 auraEff->ChangeAmount(total - tickDamage);
493 float total = float(aurEff->
GetAmount());
535 eff->ChangeAmount(tickDamage);
T GetEntry(std::unordered_map< uint32, T > const &map, CriteriaTreeEntry const *tree)
bool roll_chance_i(int chance)
#define RegisterSpellScript(spell_script)
@ SPELL_FAILED_BAD_TARGETS
@ AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_PERIODIC_DAMAGE
@ SPELL_AURA_PROC_TRIGGER_SPELL
@ SPELL_AURA_MECHANIC_IMMUNITY
@ SPELL_AURA_MOD_MINIMUM_SPEED
@ SPELL_AURA_MOD_SPEED_NO_CONTROL
@ SPELL_AURA_PERIODIC_DUMMY
@ SPELL_AURA_USE_NORMAL_MOVEMENT_SPEED
@ 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.
#define SpellCheckCastFn(F)
#define AuraEffectProcFn(F, I, N)
#define SpellEffectFn(F, I, N)
#define AuraEffectCalcAmountFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
#define AuraCheckEffectProcFn(F, I, N)
#define AuraEffectAbsorbFn(F, I)
#define AuraEffectApplyFn(F, I, N, M)
#define AuraCheckProcFn(F)
#define AuraEffectRemoveFn(F, I, N, M)
@ CURRENT_CHANNELED_SPELL
@ CR_VERSATILITY_HEALING_DONE
T CalculatePct(T base, U pct)
SpellInfo const * GetSpellInfo() const
void ChangeAmount(int32 newAmount, bool mark=true, bool onStackOrReapply=false, AuraEffect const *triggeredBy=nullptr)
void PreventDefaultAction()
int32 GetDuration() const
HookList< EffectApplyHandler > AfterEffectRemove
HookList< CheckEffectProcHandler > DoCheckEffectProc
HookList< EffectPeriodicHandler > OnEffectPeriodic
HookList< EffectApplyHandler > AfterEffectApply
HookList< EffectCalcAmountHandler > DoEffectCalcAmount
AuraEffect * GetEffect(uint8 effIndex) const
HookList< EffectAbsorbHandler > OnEffectAbsorb
Difficulty GetCastDifficulty() const
HookList< CheckProcHandler > DoCheckProc
HookList< EffectProcHandler > OnEffectProc
AuraEffect * GetEffect(uint32 index) const
void AbsorbDamage(uint32 amount)
SpellInfo const * GetSpellInfo() const
uint32 GetExplicitTargetMask() const
SpellCastResult CheckExplicitTarget(WorldObject const *caster, WorldObject const *target, Item const *itemTarget=nullptr) const
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
static bool ValidateSpellEffect(std::initializer_list< std::pair< uint32, SpellEffIndex > > effects)
HookList< CheckCastHandler > OnCheckCast
void PreventHitDefaultEffect(SpellEffIndex effIndex)
Unit * GetHitUnit() const
int32 GetEffectValue() const
HookList< EffectHandler > OnEffectHitTarget
Difficulty GetCastDifficulty() const
HookList< EffectHandler > OnEffectLaunch
Unit * GetExplTargetUnit() const
SpellInfo const * GetSpellInfo() const
void SetSpellValue(SpellValueMod mod, int32 value)
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
void UpdateSpeed(UnitMoveType mtype)
void SetSpeed(UnitMoveType mtype, float newValue)
AuraEffect * GetAuraEffect(uint32 spellId, uint8 effIndex, ObjectGuid casterGUID=ObjectGuid::Empty) const
uint64 GetMaxHealth() const
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
uint64 CountPctFromMaxHealth(int32 pct) const
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
float GetStat(Stats stat) const
Spell * GetCurrentSpell(CurrentSpellTypes spellType) const
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
bool Validate(SpellInfo const *) override
bool CheckProc(ProcEventInfo &eventInfo)
void HandleProc(AuraEffect *, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void OnTick(AuraEffect const *)
bool Validate(SpellInfo const *) override
void CalculateAbsorb(SpellEffIndex)
bool Validate(SpellInfo const *) override
bool CheckProc(AuraEffect const *, ProcEventInfo &)
void HandlePeriodic(AuraEffect const *)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *, ProcEventInfo &)
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex effIndex)
static uint32 const BlackOxStatusEntry
bool Validate(SpellInfo const *spellInfo) override
SpellCastResult CheckExplicitTarget()
void RestoreRunBackSpeed(AuraEffect const *, AuraEffectHandleModes)
void CalcImmunityAmount(AuraEffect const *, int32 &amount, bool &)
void CalcMovementAmount(AuraEffect const *, int32 &amount, bool &)
void ChangeRunBackSpeed(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
SpellCastResult CheckCast()
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
void OnPeriodicDamage(AuraEffect const *aurEff)
void OnReapply(AuraEffect const *aurEff, AuraEffectHandleModes)
void CastOrChangeTickDamage(float tickDamage)
bool Validate(SpellInfo const *) override
void OnRemove(AuraEffect const *, AuraEffectHandleModes mode)
void AbsorbMagic(AuraEffect *, DamageInfo &dmgInfo, uint32 &)
void Absorb(DamageInfo &dmgInfo, float multiplier)
void AbsorbNormal(AuraEffect *, DamageInfo &dmgInfo, uint32 &)
void AddNewStagger(Unit *unit, uint32 staggerSpellId, float staggerAmount)
bool Validate(SpellInfo const *) override
void AddAndRefreshStagger(float amount)
uint32 GetStaggerSpellId(Unit *unit, float amount)
void AddSC_monk_spell_scripts()
Aura * FindExistingStaggerEffect(Unit *unit)
@ SPELL_MONK_NO_FEATHER_FALL
@ SPELL_MONK_STAGGER_LIGHT
@ SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK_CD
@ SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK
@ SPELL_MONK_CRACKLING_JADE_LIGHTNING_CHANNEL
@ SPELL_MONK_POWER_STRIKE_ENERGIZE
@ SPELL_MONK_STAGGER_HEAVY
@ SPELL_MONK_OPEN_PALM_STRIKES_TALENT
@ SPELL_MONK_ROLL_BACKWARD
@ SPELL_MONK_STAGGER_MODERATE
@ SPELL_MONK_PROVOKE_SINGLE_TARGET
@ SPELL_MONK_STAGGER_DAMAGE_AURA
@ SPELL_MONK_POWER_STRIKE_PROC
@ SPELL_MONK_SURGING_MIST_HEAL
@ SPELL_MONK_ROLL_FORWARD
@ SPELL_MONK_CALMING_COALESCENCE
@ SPELL_MONK_STANCE_OF_THE_SPIRITED_CRANE
@ SPELL_MONK_CRACKLING_JADE_LIGHTNING_CHI_PROC
@ SPELL_MONK_SOOTHING_MIST
static constexpr SpellEffIndex AuraStaggerEffectTick
static constexpr SpellEffIndex AuraStaggerEffectTotal