191 float damageReductionPct = float(effect1->
GetAmount()) / 3;
193 damageReductionPct +=
frand(0.0f, damageReductionPct);
238 canBeRecalculated =
false;
241 float extraAmount = caster->SpellBaseDamageBonusDone(
GetSpellInfo()->GetSchoolMask()) * 2.5f;
243 caster->SetHealth(caster->GetHealth() - absorb);
302 player->NearTeleportTo(circle->GetPositionX(), circle->GetPositionY(), circle->GetPositionZ(), circle->GetOrientation());
303 player->RemoveMovementImpairingAuras(
false);
439 damageInfo.
damage = damage;
511 if (pet->IsPetSayaad())
512 pet->DespawnOrUnsummon();
541 .SetOriginalCaster(pet->GetGUID())
614 if (!damageInfo || !damageInfo->
GetDamage())
620 const_cast<AuraEffect*
>(aurEff)->SetAmount(amount);
659 if (!damageInfo || !damageInfo->
GetDamage())
665 const_cast<AuraEffect*
>(aurEff)->SetAmount(amount);
752 if (!warlock || !swapVictim)
760 if (!swapSpellScript)
765 for (Unit::AuraApplicationMap::const_iterator itr = appliedAuras.begin(); itr != appliedAuras.end(); ++itr)
767 SpellInfo const* spellProto = itr->second->GetBase()->GetSpellInfo();
768 if (itr->second->GetBase()->GetCaster() == warlock)
770 swapSpellScript->
AddDot(itr->first);
793 Unit* swapTarget =
nullptr;
796 swapTarget = swapScript->GetOriginalSwapSource();
799 if (swapTarget && currentTarget && swapTarget == currentTarget)
810 std::list<uint32> dotList;
811 Unit* swapSource =
nullptr;
824 for (std::list<uint32>::const_iterator itr = dotList.begin(); itr != dotList.end(); ++itr)
827 if (!hasGlyph && swapSource)
857 if (target->GetThreatManager().IsThreatenedBy(caster,
true))
944template <u
int32 Trigger>
981 int32 bp = aurEff->GetAmount();
982 bp = target->SpellDamageBonusTaken(caster, aurEff->GetSpellInfo(), bp,
DOT);
1009 for (
AreaTrigger* rainOfFireAreaTrigger : rainOfFireAreaTriggers)
1011 GuidUnorderedSet const& insideTargets = rainOfFireAreaTrigger->GetInsideUnits();
1012 targetsInRainOfFire.insert(insideTargets.begin(), insideTargets.end());
1015 for (
ObjectGuid insideTargetGuid : targetsInRainOfFire)
1017 if (!
GetTarget()->IsFriendlyTo(insideTarget))
std::unordered_set< ObjectGuid > GuidUnorderedSet
constexpr uint32 PET_SUMMONING_DISORIENTATION
float frand(float min, float max)
bool roll_chance_i(int chance)
#define RegisterSpellAndAuraScriptPair(script_1, script_2)
#define RegisterSpellScript(spell_script)
#define RegisterSpellScriptWithArgs(spell_script, script_name,...)
@ TARGET_UNIT_DEST_AREA_ENEMY
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_SCHOOL_DAMAGE
@ SPELL_EFFECT_APPLY_AURA
@ SPELL_CUSTOM_ERROR_YOU_DONT_HAVE_ENOUGH_HEALTH
@ SPELL_FAILED_CUSTOM_ERROR
@ SPELL_FAILED_BAD_TARGETS
@ AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK
@ AURA_EFFECT_HANDLE_REAPPLY
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_PERIODIC_DAMAGE
@ SPELL_AURA_OBS_MOD_HEALTH
@ SPELL_AURA_PERIODIC_DAMAGE_PERCENT
@ SPELL_AURA_MECHANIC_IMMUNITY
@ SPELL_AURA_SCHOOL_ABSORB
@ SPELL_AURA_PERIODIC_LEECH
@ SPELL_AURA_PERIODIC_DUMMY
@ TRIGGERED_FULL_MASK
Used when doing CastSpell with triggered == true.
#define SpellOnCalcCritChanceFn(F)
#define BeforeSpellHitFn(F)
#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 AuraEffectAbsorbFn(F, I)
#define AuraEffectApplyFn(F, I, N, M)
#define AuraEffectRemoveFn(F, I, N, M)
T CalculatePct(T base, U pct)
int32 GetBaseAmount() const
void PreventDefaultAction()
AuraApplication const * GetTargetApplication() const
HookList< EffectApplyHandler > AfterEffectRemove
HookList< EffectPeriodicHandler > OnEffectPeriodic
SpellInfo const * GetSpellInfo() const
HookList< EffectCalcAmountHandler > DoEffectCalcAmount
SpellEffectInfo const & GetEffectInfo(SpellEffIndex effIndex) const
AuraEffect * GetEffect(uint8 effIndex) const
HookList< EffectAbsorbHandler > OnEffectAbsorb
Difficulty GetCastDifficulty() const
HookList< EffectApplyHandler > OnEffectRemove
HookList< AuraDispelHandler > AfterDispel
void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
HookList< EffectProcHandler > OnEffectProc
bool HasEffect(uint8 effIndex) const
HookList< EffectApplyHandler > OnEffectApply
WorldObject * GetDispeller() const
static ObjectGuid const Empty
static Unit * ToUnit(Object *o)
static Player * ToPlayer(Object *o)
Unit * GetActionTarget() const
DamageInfo * GetDamageInfo() const
int32 CalcValue(WorldObject const *caster=nullptr, int32 const *basePoints=nullptr, Unit const *target=nullptr, float *variance=nullptr, uint32 castItemId=0, int32 itemLevel=-1) const
float GetMaxRange(bool positive=false, WorldObject *caster=nullptr, Spell *spell=nullptr) 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
HookList< HitHandler > OnHit
HookList< EffectHandler > OnEffectHit
Unit * GetHitUnit() const
SpellEffectInfo const & GetEffectInfo() const
HookList< EffectHandler > OnEffectHitTarget
Aura * GetHitAura(bool dynObjAura=false) const
void SetCustomCastResultMessage(SpellCustomErrors result)
HookList< BeforeHitHandler > BeforeHit
void SetHitDamage(int32 damage)
HookList< EffectHandler > OnEffectSuccessfulDispel
HookList< OnCalcCritChanceHandler > OnCalcCritChance
void SetHitHeal(int32 heal)
Unit * GetExplTargetUnit() const
SpellInfo const * GetSpellInfo() const
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
void RemoveGameObject(GameObject *gameObj, bool del)
float GetHealthPct() const
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
std::multimap< uint32, AuraApplication * > AuraApplicationMap
void DealSpellDamage(SpellNonMeleeDamage const *damageInfo, bool durabilityLoss)
Aura * AddAura(uint32 spellId, Unit *target)
void SendSpellNonMeleeDamageLog(SpellNonMeleeDamage const *log)
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
bool HealthBelowPctDamaged(int32 pct, uint32 damage) const
AuraApplicationMap & GetAppliedAuras()
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)
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Player * GetSpellModOwner() const
void HandleBanish(SpellMissInfo missInfo)
void PeriodicTick(AuraEffect const *aurEff)
bool Validate(SpellInfo const *spellInfo) override
SpellCastResult CheckApplyAura()
void HandleDummy(SpellEffIndex)
void CalcCritChance(Unit const *, float &critChance)
void HandleAbsorb(AuraEffect *, DamageInfo &dmgInfo, uint32 &absorbAmount)
bool Validate(SpellInfo const *) override
void HandleScriptEffect(SpellEffIndex)
bool Validate(SpellInfo const *spellInfo) override
void CalculateAmount(AuraEffect const *, int32 &amount, bool &canBeRecalculated)
void HandleRemove(AuraEffect const *, AuraEffectHandleModes mode)
void HandleDummyTick(AuraEffect const *)
void HandleTeleport(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *spellInfo) override
void OnSuccessfulDispel(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleEffectPeriodic(AuraEffect const *)
void HandleRemove(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
void ApplyEffect(AuraEffect const *, AuraEffectHandleModes)
void RemoveEffect(AuraEffect const *, AuraEffectHandleModes)
void OnPeriodic(AuraEffect const *aurEff)
bool Validate(SpellInfo const *) override
void HandleOnEffectHit(SpellEffIndex)
void HandleDummyTick(AuraEffect const *)
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
void OnPrecast() override
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleScriptEffect(SpellEffIndex)
void CalculateBuffer(AuraEffect const *, int32 &amount, bool &)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void FilterTargets(std::list< WorldObject * > &targets)
bool Validate(SpellInfo const *) override
Soul Swap Copy Spells - 92795 - Simply copies spell IDs.
void HandleHit(SpellEffIndex)
SpellCastResult CheckCast()
bool Validate(SpellInfo const *) override
void OnEffectHit(SpellEffIndex)
Unit * GetOriginalSwapSource() const
void SetOriginalSwapSource(Unit *victim)
std::list< uint32 > _dotList
void Register() override
Forced to, pure virtual functions must have a body when linking.
std::list< uint32 > const GetDotList() const
bool Validate(SpellInfo const *) override
void HandleHit(SpellEffIndex)
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
void HandleDispel(DispelInfo *dispelInfo)
bool Validate(SpellInfo const *) override
TC_GAME_API void Trigger(uint32 gameEventId, WorldObject *source, WorldObject *target)
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
TC_GAME_API GameObject * GetGameObject(WorldObject const &u, ObjectGuid const &guid)
void AddSC_warlock_spell_scripts()
@ SPELL_GEN_REPLENISHMENT
@ SPELL_PRIEST_SHADOW_WORD_DEATH
@ SPELL_WARLOCK_SOUL_SWAP_MOD_COST
@ SPELL_WARLOCK_STRENGTHEN_PACT_SUCCUBUS
@ SPELL_WARLOCK_DEMONIC_CIRCLE_TELEPORT
@ SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R2
@ SPELL_WARLOCK_SOUL_SWAP_DOT_MARKER
@ SPELL_WARLOCK_RAIN_OF_FIRE
@ SPELL_WARLOCK_SHADOWFLAME
@ SPELL_WARLOCK_GLYPH_OF_DEMON_TRAINING
@ SPELL_WARLOCK_RAIN_OF_FIRE_DAMAGE
@ SPELL_WARLOCK_GLYPH_OF_SOUL_SWAP
@ SPELL_WARLOCK_DRAIN_SOUL_ENERGIZE
@ SPELL_WARLOCK_SHADOW_BOLT_ENERGIZE
@ SPELL_WARLOCK_DEMONIC_CIRCLE_SUMMON
@ SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_R1
@ SPELL_WARLOCK_STRENGTHEN_PACT_INCUBUS
@ SPELL_WARLOCK_SOUL_SWAP_OVERRIDE
@ SPELL_WARLOCK_SUMMON_SUCCUBUS
@ SPELL_WARLOCK_SEED_OF_CORRUPTION_GENERIC
@ SPELL_WARLOCK_DEVOUR_MAGIC_HEAL
@ SPELL_WARLOCK_SEED_OF_CORRUPTION_DAMAGE
@ SPELL_WARLOCK_SUCCUBUS_PACT
@ SPELL_WARLOCK_SOULSHATTER_EFFECT
@ SPELL_WARLOCK_SOUL_SWAP_CD_MARKER
@ SPELL_WARLOCK_DEMONIC_CIRCLE_ALLOW_CAST
@ SPELL_WARLOCK_CREATE_HEALTHSTONE
@ SPELL_WARLOCK_SUMMON_INCUBUS
@ SPELL_WARLOCK_UNSTABLE_AFFLICTION
@ SPELL_WARLOCK_GLYPH_OF_SUCCUBUS
@ SPELL_WARLOCK_INCUBUS_PACT
@ SPELL_WARLOCK_FLAMESHADOW
@ SPELL_WARLOCK_UNSTABLE_AFFLICTION_DISPEL
@ SPELL_WARLOCK_DOOM_ENERGIZE
@ SPELL_WARLOCK_IMMOLATE_PERIODIC
@ SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_R2
@ SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R1