272 for (
uint8 s = 0; s < 3; ++s)
318 flatMod += t5->GetAmount();
335 flatMod += t5->GetAmount();
366 aura->SetDuration(aura->GetDuration() + amount);
467 if (targets.empty() ||
GetCaster()->GetVehicleBase())
605 int32 currentDuration = 0;
610 currentDuration = aura->GetDuration();
615 std::vector<uint32> possibleBuffs(std::begin(
Spells), std::end(
Spells));
626 else if (chance <= 20)
629 for (
int32 i = 0; i < numBuffs; ++i)
631 uint32 spellId = possibleBuffs[i];
664 if (!auraVenomousWounds)
673 int32 extraAmount = float(cost->Amount) * pct;
760 damagePerCombo += t5->GetAmount();
762 int32 finalDamage = damagePerCombo;
764 auto c = std::find_if(costs.begin(), costs.end(), [](
SpellPowerCost const& cost) { return cost.Power == POWER_COMBO_POINTS; });
765 if (c != costs.end())
766 finalDamage *= c->Amount;
824 masterOfSubtletyAura->SetMaxDuration(masterOfSubtletyPassive->GetAmount());
825 masterOfSubtletyAura->RefreshDuration();
908 script->SetRedirectTarget(explTarget->GetGUID());
DB2Storage< SpellItemEnchantmentEntry > sSpellItemEnchantmentStore("SpellItemEnchantment.db2", &SpellItemEnchantmentLoadInfo::Instance)
@ ITEM_ENCHANTMENT_TYPE_COMBAT_SPELL
std::chrono::seconds Seconds
Seconds shorthand typedef.
#define TC_LOG_ERROR(filterType__,...)
std::list< ObjectGuid > GuidList
std::optional< T > Optional
Optional helper class to wrap optional values within.
@ EQUIPMENT_SLOT_MAINHAND
#define INVENTORY_SLOT_BAG_0
int32 irand(int32 min, int32 max)
bool roll_chance_i(int 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
@ 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_DONT_REPORT_CAST_ERROR
Will return SPELL_FAILED_DONT_REPORT in CheckCast functions.
#define BeforeSpellHitFn(F)
#define SpellCheckCastFn(F)
#define AuraEffectProcFn(F, I, N)
#define SpellEffectFn(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 AuraEffectRemoveFn(F, I, N, M)
SpellEffectInfo const & GetSpellEffectInfo() const
void PreventDefaultAction()
AuraApplication const * GetTargetApplication() const
HookList< EffectApplyHandler > AfterEffectRemove
HookList< CheckEffectProcHandler > DoCheckEffectProc
HookList< EffectPeriodicHandler > OnEffectPeriodic
SpellInfo const * GetSpellInfo() const
HookList< EffectApplyHandler > AfterEffectApply
SpellEffectInfo const & GetEffectInfo(SpellEffIndex effIndex) const
HookList< EffectAbsorbHandler > OnEffectAbsorb
ObjectGuid GetCasterGUID() const
HookList< CheckProcHandler > DoCheckProc
HookList< EffectApplyHandler > OnEffectRemove
void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
HookList< EffectProcHandler > OnEffectProc
int32 GetMaxDuration() const
int32 GetDuration() const
uint32 GetEnchantmentId(EnchantmentSlot slot) const
static ObjectGuid const Empty
std::string ToString() const
static ObjectGuid GetGUID(Object const *o)
static Player * ToPlayer(Object *o)
Item * GetItemByPos(uint16 pos) const
Unit * GetActionTarget() const
Spell const * GetProcSpell() const
DamageInfo * GetDamageInfo() const
Unit * GetProcTarget() const
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< CheckCastHandler > OnCheckCast
int32 GetHitDamage() const
HookList< HitHandler > AfterHit
void PreventHitDefaultEffect(SpellEffIndex effIndex)
Unit * GetHitUnit() const
SpellEffectInfo const & GetEffectInfo() const
HookList< EffectHandler > OnEffectHitTarget
Item * GetCastItem() const
Aura * GetHitAura(bool dynObjAura=false) const
void FinishCast(SpellCastResult result, int32 *param1=nullptr, int32 *param2=nullptr)
HookList< EffectHandler > OnEffectLaunchTarget
HookList< BeforeHitHandler > BeforeHit
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
std::vector< SpellPowerCost > const & GetPowerCost() 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)
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
ThreatManager & GetThreatManager()
Unit * SelectNearbyTarget(Unit *exclude=nullptr, float dist=NOMINAL_MELEE_RANGE) const
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
bool HasAuraType(AuraType auraType) const
uint64 CountPctFromMaxHealth(int32 pct) 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={ })
std::string const & GetName() const
bool isInBack(WorldObject const *target, float arc=float(M_PI)) 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)
void HandleBeforeHit(SpellMissInfo missInfo)
void CalculateDamage(Unit *, int32 &, int32 &flatMod, float &pctMod) const
void CalculateDamage(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 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)
bool Validate(SpellInfo const *) override
bool HandleCheckProc(ProcEventInfo &eventInfo)
void HandleProc(AuraEffect *aurEff, ProcEventInfo &procInfo)
SpellCastResult CheckCast()
void OnApply(AuraEffect const *, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *aurEff, ProcEventInfo &procInfo)
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void OnEffectRemoved(AuraEffect const *, AuraEffectHandleModes)
void HandleProc(AuraEffect *aurEff, ProcEventInfo &procInfo)
bool _hasPremeditationAura
bool Validate(SpellInfo const *) override
void HandleEnergize(SpellEffIndex)
SpellCastResult HandleCheckCast()
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleEffectApply(AuraEffect const *, AuraEffectHandleModes)
void HandleEffectRemove(AuraEffect const *, 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) -> typename std::add_const< decltype(*std::begin(container))>::type &
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_ADRENALINE_RUSH
@ SPELL_ROGUE_SLICE_AND_DICE
@ SPELL_ROGUE_TRUE_BEARING
@ SPELL_ROGUE_DEATH_FROM_ABOVE
@ SPELL_ROGUE_PREMEDITATION_PASSIVE
@ SPELL_ROGUE_TURN_THE_TABLES_BUFF
@ SPELL_ROGUE_MAIN_GAUCHE
@ 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_GRAND_MELEE
@ SPELL_ROGUE_MASTER_OF_SUBTLETY_PASSIVE
@ SPELL_ROGUE_GRAPPLING_HOOK
@ SPELL_ROGUE_CHEATING_DEATH
@ SPELL_ROGUE_TRICKS_OF_THE_TRADE
@ SPELL_ROGUE_RUTHLESS_PRECISION
@ SPELL_ROGUE_SYMBOLS_OF_DEATH_RANK2
@ SPELL_ROGUE_STEALTH_SHAPESHIFT_AURA
@ SPELL_ROGUE_SHADOW_FOCUS
@ SPELL_ROGUE_KILLING_SPREE
@ SPELL_ROGUE_STEALTH_STEALTH_AURA
@ SPELL_ROGUE_T5_2P_SET_BONUS
@ SPELL_ROGUE_VANISH_AURA
@ SPELL_ROGUE_KILLING_SPREE_DMG_BUFF
@ SPELL_ROGUE_MASTER_OF_SUBTLETY_DAMAGE_PERCENT
@ SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK
@ 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_BETWEEN_THE_EYES
@ SPELL_ROGUE_VENOMOUS_WOUNDS
@ SPELL_ROGUE_CHEAT_DEATH_DUMMY
std::array< uint32, MAX_ITEM_ENCHANTMENT_EFFECTS > EffectArg
std::array< uint8, MAX_ITEM_ENCHANTMENT_EFFECTS > Effect