143 caster->GetSpellHistory()->ResetCooldown(
GetId(),
true);
256 other->SetDuration(0);
365 concussiveShot->SetDuration(newDuration.count());
366 concussiveShot->SetMaxDuration(newDuration.count());
453 other->SetDuration(0);
460 if (caster->IsValidAttackTarget(unit))
504 other->SetDuration(0);
511 if (caster->IsValidAttackTarget(unit))
676 .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
677 .TriggeringAura = aurEff
703 .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
704 .SpellValueOverrides = { { SPELLVALUE_BASE_POINT0, damage } }
858 amount =
CalculatePct(critChanceDone, amountHolder->GetAmount());
865 bonus->RecalculateAmount(aurEff);
945 .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
946 .TriggeringSpell = eventInfo.GetProcSpell()
1255 if (target->GetLevelForTarget(caster) > caster->
GetLevel())
1259 if (!target->GetCreatureTemplate()->IsTameable(caster->
CanTameExoticPets(), target->GetCreatureDifficulty()))
1264 if (petStable->CurrentPetIndex)
1267 auto freeSlotItr = std::find_if(petStable->ActivePets.begin(), petStable->ActivePets.end(), [](
Optional<PetStable::PetInfo> const& petInfo)
1269 return !petInfo.has_value();
1272 if (freeSlotItr == petStable->ActivePets.end())
1279 std::size_t freeSlotIndex = std::distance(petStable->ActivePets.begin(), freeSlotItr);
1290 if (!target->GetOwnerGUID().IsEmpty())
1327 if (caster->IsValidAttackTarget(unit))
1348 other->SetDuration(0);
1355 if (caster->IsValidAttackTarget(unit))
1437 if (!wildernessMedicine)
1450 .TriggeringAura = aurEff
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
std::chrono::duration< double, Seconds::period > FloatSeconds
std::optional< T > Optional
Optional helper class to wrap optional values within.
bool roll_chance(T chance)
#define RegisterAreaTriggerAI(ai_name)
#define RegisterSpellScript(spell_script)
#define EFFECT_FIRST_FOUND
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_SCHOOL_DAMAGE
@ SPELL_FAILED_BAD_IMPLICIT_TARGETS
@ SPELL_FAILED_ALREADY_HAVE_SUMMON
@ SPELL_FAILED_ALREADY_HAVE_CHARM
@ SPELL_FAILED_DONT_REPORT
@ SPELL_FAILED_BAD_TARGETS
@ SPELL_FAILED_LINE_OF_SIGHT
@ AURA_EFFECT_HANDLE_REAL
@ AURA_REMOVE_BY_INTERRUPT
@ SPELL_AURA_MOD_ATTACKER_MELEE_HIT_CHANCE
@ SPELL_AURA_OBS_MOD_HEALTH
@ SPELL_AURA_MOD_INCREASE_SPEED
@ SPELL_AURA_PROC_TRIGGER_SPELL
@ SPELL_AURA_CAST_WHILE_WALKING
@ SPELL_AURA_MOD_CRIT_DAMAGE_BONUS
@ SPELL_AURA_MOD_MINIMUM_SPEED
@ SPELL_AURA_PERIODIC_DUMMY
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_DONT_REPORT_CAST_ERROR
Will return SPELL_FAILED_DONT_REPORT in CheckCast functions.
#define SpellObjectTargetSelectFn(F, I, N)
#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 AuraEffectApplyFn(F, I, N, M)
#define AuraCheckProcFn(F)
#define AuraEffectRemoveFn(F, I, N, M)
@ CURRENT_AUTOREPEAT_SPELL
T CalculatePct(T base, U pct)
AreaTriggerAI(AreaTrigger *a, uint32 scriptId={}) noexcept
GuidUnorderedSet const & GetInsideUnits() const
ObjectGuid const & GetCasterGuid() const
int32 GetAmountAsInt() const
int32 GetMiscValue() const
SpellEffectValue GetAmount() const
void PreventDefaultAction()
AuraApplication const * GetTargetApplication() const
HookList< EffectApplyHandler > AfterEffectRemove
HookList< CheckEffectProcHandler > DoCheckEffectProc
HookList< EffectPeriodicHandler > OnEffectPeriodic
HookList< EffectApplyHandler > AfterEffectApply
HookList< EffectCalcAmountHandler > DoEffectCalcAmount
AuraEffect * GetEffect(uint8 effIndex) const
HookList< CheckProcHandler > DoCheckProc
HookList< EffectApplyHandler > OnEffectRemove
HookList< EffectProcHandler > OnEffectProc
Unit * GetUnitOwner() const
HookList< AuraProcHandler > OnProc
ObjectGuid const & GetGUID() const
uint32 GetOriginalDamage() const
SpellSchoolMask GetSchoolMask() const
void SendAttackSwingCancelAttack() const
bool CanTameExoticPets() const
PetStable * GetPetStable()
void SendTameFailure(PetTameResult result)
bool HasSpell(uint32 spell) const override
Unit * GetActionTarget() const
Spell const * GetProcSpell() const
DamageInfo * GetDamageInfo() const
Unit * GetProcTarget() const
SpellEffectValue CalcValue(WorldObject const *caster=nullptr, SpellEffectValue const *basePoints=nullptr, Unit const *target=nullptr, float *variance=nullptr, uint32 castItemId=0, int32 itemLevel=-1) const
int32 CalcValueAsInt(WorldObject const *caster=nullptr, SpellEffectValue const *basePoints=nullptr, Unit const *target=nullptr, float *variance=nullptr, uint32 castItemId=0, int32 itemLevel=-1) const
void ResetCooldown(uint32 spellId, bool update=false)
void ModifyCooldown(uint32 spellId, Duration cooldownMod, bool withoutCategoryCooldown=false)
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
static bool ValidateSpellEffect(std::initializer_list< std::pair< uint32, SpellEffIndex > > effects)
HookList< CastHandler > AfterCast
HookList< CheckCastHandler > OnCheckCast
int32 GetHitDamage() const
HookList< HitHandler > AfterHit
int32 GetEffectValueAsInt() const
HookList< HitHandler > OnHit
Unit * GetHitUnit() const
SpellEffectInfo const & GetEffectInfo() const
HookList< EffectHandler > OnEffectHitTarget
HookList< ObjectTargetSelectHandler > OnObjectTargetSelect
HookList< CastHandler > OnCast
Difficulty GetCastDifficulty() const
void SetHitDamage(int32 damage)
WorldLocation const * GetExplTargetDest() const
Unit * GetExplTargetUnit() const
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 UnregisterRedirectThreat(uint32 spellId)
uint64 CountPctFromMaxHealth(float pct) const
ThreatManager & GetThreatManager()
ObjectGuid GetCharmedGUID() const
AuraEffect * GetAuraEffect(uint32 spellId, uint8 effIndex, ObjectGuid casterGUID=ObjectGuid::Empty) const
uint64 GetMaxHealth() const
float GetUnitCriticalChanceDone(WeaponAttackType attackType) const
UF::UpdateField< UF::UnitData, int32(WowCS::EntityFragment::CGObject), TYPEID_UNIT > m_unitData
bool HealthBelowPct(float pct) const
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
SpellHistory * GetSpellHistory()
ObjectGuid GetCharmerGUID() const
void RemoveMovementImpairingAuras(bool withRoot)
Guardian * GetGuardianPet() const
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
void InterruptSpell(CurrentSpellTypes spellType, bool withDelayed=true, bool withInstant=true)
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
bool IsWithinLOSInMap(WorldObject const *obj, LineOfSightChecks checks=LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags ignoreFlags=VMAP::ModelIgnoreFlags::Nothing) const
void HandleDummyTick(AuraEffect const *)
void RemoveEffect(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleOnRemove(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *spellInfo) override
static void HandleCastWhileWalking(SpellScript const &, WorldObject *&target)
void OnApply(AuraEffect const *, AuraEffectHandleModes)
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
static bool CheckEffectProc(AuraScript const &, AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
bool RollProc(AuraEffect const *, ProcEventInfo &)
bool Validate(SpellInfo const *spellInfo) override
void HandleDuration(SpellEffIndex) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleAfterCast() const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandlePeriodic(AuraEffect const *)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *aurEff, ProcEventInfo &)
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
static void HandleProc(AuraScript const &, AuraEffect const *, ProcEventInfo const &eventInfo)
static bool CheckProc(AuraScript const &, AuraEffect const *aurEff, ProcEventInfo 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
bool Validate(SpellInfo const *) override
static void HandleProc(AuraScript const &, AuraEffect const *aurEff, ProcEventInfo const &eventInfo)
SpellCastResult DoCheckCast()
void HandleDummy(SpellEffIndex)
void HandleScriptEffect(SpellEffIndex)
bool Validate(SpellInfo const *spellInfo) override
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
void HandleProc(AuraEffect *aurEff, ProcEventInfo &)
bool Validate(SpellInfo const *) override
void CalcAmount(AuraEffect const *, SpellEffectValue &amount, bool const &) const
void UpdatePeriodic(AuraEffect const *aurEff) const
void HandleScript(SpellEffIndex)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleProc(ProcEventInfo const &eventInfo) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleHit(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandlePeriodic(AuraEffect const *)
void HandleProc(AuraEffect const *aurEff, ProcEventInfo const &)
bool Validate(SpellInfo const *) override
bool CheckProc(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *spellInfo) override
static void HandleMinSpeed(SpellScript const &, WorldObject *&target)
bool Validate(SpellInfo const *) override
void HandleEffectProc(AuraEffect const *aurEff, ProcEventInfo const &) const
static constexpr std::array< uint32, 3 > AffectedSpellIds
bool Validate(SpellInfo const *) override
void HandleProc(ProcEventInfo const &) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleAfterCast() const
void HandleProc(ProcEventInfo const &) const
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
bool CheckProc(ProcEventInfo &eventInfo)
static constexpr uint32 CallPetSpellIds[MAX_ACTIVE_PETS]
SpellCastResult CheckCast()
void OnPeriodic(AuraEffect const *aurEff) const
bool Validate(SpellInfo const *) override
SpellEffectValue _dispelChance
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
@ SPELL_DRAENEI_GIFT_OF_THE_NAARU
@ SPELL_HUNTER_MASTER_MARKSMAN
@ SPELL_HUNTER_ASPECT_OF_THE_TURTLE_PACIFY_AURA
@ SPELL_HUNTER_ENTRAPMENT_TALENT
@ SPELL_HUNTER_A_MURDER_OF_CROWS_DAMAGE
@ SPELL_HUNTER_BINDING_SHOT_VISUAL_ARROW
@ SPELL_HUNTER_MARKSMANSHIP_HUNTER_AURA
@ SPELL_HUNTER_GREVIOUS_INJURY
@ SPELL_HUNTER_EMERGENCY_SALVE_TALENT
@ SPELL_HUNTER_BINDING_SHOT_VISUAL
@ SPELL_HUNTER_A_MURDER_OF_CROWS_VISUAL_1
@ SPELL_HUNTER_BINDING_SHOT_MARKER
@ SPELL_HUNTER_TAR_TRAP_SLOW
@ SPELL_HUNTER_SHRAPNEL_SHOT_TALENT
@ SPELL_HUNTER_STEADY_SHOT_FOCUS
@ SPELL_HUNTER_WILDERNESS_MEDICINE_DISPEL
@ SPELL_HUNTER_MISDIRECTION_PROC
@ SPELL_HUNTER_CONCUSSIVE_SHOT
@ SPELL_HUNTER_SHRAPNEL_SHOT_DEBUFF
@ SPELL_HUNTER_BINDING_SHOT
@ SPELL_HUNTER_LOCK_AND_LOAD
@ SPELL_HUNTER_POSTHASTE_TALENT
@ SPELL_HUNTER_MISDIRECTION
@ SPELL_HUNTER_A_MURDER_OF_CROWS_VISUAL_2
@ SPELL_HUNTER_SCOUTS_INSTINCTS
@ SPELL_HUNTER_RAPID_FIRE_DAMAGE
@ SPELL_HUNTER_MASTERS_CALL_TRIGGERED
@ SPELL_HUNTER_RAPID_FIRE_ENERGIZE
@ SPELL_HUNTER_RAPID_FIRE
@ SPELL_HUNTER_BINDING_SHOT_STUN
@ SPELL_HUNTER_EXHILARATION_PET
@ SPELL_HUNTER_A_MURDER_OF_CROWS_VISUAL_3
@ SPELL_HUNTER_INTIMIDATION
@ SPELL_HUNTER_EXHILARATION
@ SPELL_HUNTER_BINDING_SHOT_IMMUNE
@ SPELL_HUNTER_LATENT_POISON_STACK
@ SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF
@ SPELL_HUNTER_LATENT_POISON_INJECTORS_DAMAGE
@ SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_TRIGGERED
@ SPELL_HUNTER_ASPECT_CHEETAH_SLOW
@ SPELL_HUNTER_STEADY_SHOT
@ SPELL_HUNTER_EXHILARATION_R2
@ SPELL_HUNTER_AIMED_SHOT
@ SPELL_HUNTER_MULTI_SHOT_FOCUS
@ SPELL_HUNTER_STREAMLINE_BUFF
@ SPELL_ROAR_OF_SACRIFICE_TRIGGERED
@ SPELL_HUNTER_STREAMLINE_TALENT
@ SPELL_HUNTER_IMPLOSIVE_TRAP
@ SPELL_HUNTER_ASPECT_OF_THE_FOX
@ SPELL_HUNTER_POSTHASTE_INCREASE_SPEED
@ SPELL_HUNTER_LATENT_POISON_DAMAGE
@ SPELL_HUNTER_REJUVENATING_WIND_HEAL
@ SPELL_HUNTER_ENTRAPMENT_ROOT
@ SPELL_HUNTER_PET_LAST_STAND_TRIGGERED
@ SPELL_HUNTER_EXPLOSIVE_SHOT_DAMAGE
@ SPELL_HUNTER_HIGH_EXPLOSIVE_TRAP
@ SPELL_HUNTER_TAR_TRAP_AREATRIGGER
@ SPELL_HUNTER_PRECISE_SHOTS
@ SPELL_HUNTER_T29_2P_MARKSMANSHIP_DAMAGE
@ SPELL_HUNTER_T9_4P_GREATNESS
@ SPELL_HUNTER_IMPLOSIVE_TRAP_DAMAGE
@ SPELL_HUNTER_HIGH_EXPLOSIVE_TRAP_DAMAGE
@ SPELL_HUNTER_LATENT_POISON_INJECTORS_STACK
@ SPELL_HUNTER_WILDERNESS_MEDICINE_TALENT
@ SPELL_HUNTER_INTIMIDATION_MARKSMANSHIP
@ SPELL_HUNTER_EMERGENCY_SALVE_DISPEL
void AddSC_hunter_spell_scripts()
constexpr void GetPosition(float &x, float &y) const
void OnUnitEnter(Unit *unit) override
void OnInitialize() override
void OnUnitEnter(Unit *unit) override
void OnInitialize() override
void OnInitialize() override
void OnUnitEnter(Unit *unit) override
void OnUnitEnter(Unit *unit) override
void OnUnitExit(Unit *unit, AreaTriggerExitReason) override
void OnCreate(Spell const *) override
void OnUpdate(uint32 diff) override
void OnUnitExit(Unit *unit, AreaTriggerExitReason) override
void OnCreate(Spell const *) override
void OnUnitEnter(Unit *unit) override
void OnInitialize() override