AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
Unit Class Referenceabstract

#include "Unit.h"

Inheritance diagram for Unit:
WorldObject Object WorldLocation Position Creature Player TempSummon TestCreature Minion Guardian Puppet Totem Pet

Public Types

typedef std::unordered_set< Unit * > AttackerSet
 
typedef std::set< Unit * > ControlSet
 
typedef std::multimap< uint32, Aura * > AuraMap
 
typedef std::pair< AuraMap::const_iterator, AuraMap::const_iterator > AuraMapBounds
 
typedef std::pair< AuraMap::iterator, AuraMap::iterator > AuraMapBoundsNonConst
 
typedef std::multimap< uint32, AuraApplication * > AuraApplicationMap
 
typedef std::pair< AuraApplicationMap::const_iterator, AuraApplicationMap::const_iterator > AuraApplicationMapBounds
 
typedef std::pair< AuraApplicationMap::iterator, AuraApplicationMap::iterator > AuraApplicationMapBoundsNonConst
 
typedef std::multimap< AuraStateType, AuraApplication * > AuraStateAurasMap
 
typedef std::pair< AuraStateAurasMap::const_iterator, AuraStateAurasMap::const_iterator > AuraStateAurasMapBounds
 
typedef std::vector< AuraEffect * > AuraEffectList
 
typedef std::list< Aura * > AuraList
 
typedef std::list< AuraApplication * > AuraApplicationList
 
typedef std::vector< std::pair< uint8, AuraApplication * > > AuraApplicationProcContainer
 
typedef std::list< DiminishingReturnDiminishing
 
typedef GuidUnorderedSet ComboPointHolderSet
 
typedef std::map< uint8, AuraApplication * > VisibleAuraMap
 
typedef std::unordered_multimap< uint32, uint32SpellImmuneContainer
 
typedef std::set< PetAura const * > PetAuraSet
 

Public Member Functions

 ~Unit () override
 
void Update (uint32 time) override
 
UnitAIGetAI ()
 
void SetAI (UnitAI *newAI)
 
void AddToWorld () override
 
void RemoveFromWorld () override
 
void CleanupBeforeRemoveFromMap (bool finalCleanup)
 
void CleanupsBeforeDelete (bool finalCleanup=true) override
 
virtual bool isBeingLoaded () const
 
bool IsDuringRemoveFromWorld () const
 
void SetUInt32Value (uint16 index, uint32 value)
 
UnitGetOwner () const
 
ObjectGuid GetOwnerGUID () const
 
void SetOwnerGUID (ObjectGuid owner)
 
ObjectGuid GetCreatorGUID () const
 
void SetCreatorGUID (ObjectGuid creator)
 
ObjectGuid GetMinionGUID () const
 
void SetMinionGUID (ObjectGuid guid)
 
ObjectGuid GetCharmerGUID () const
 
void SetCharmerGUID (ObjectGuid owner)
 
ObjectGuid GetCharmGUID () const
 
void SetPetGUID (ObjectGuid guid)
 
ObjectGuid GetPetGUID () const
 
void SetCritterGUID (ObjectGuid guid)
 
ObjectGuid GetCritterGUID () const
 
ObjectGuid GetTransGUID () const override
 
PetToPet ()
 
TotemToTotem ()
 
TempSummonToTempSummon ()
 
const TempSummonToTempSummon () const
 
void AddUnitState (uint32 f)
 
bool HasUnitState (const uint32 f) const
 
void ClearUnitState (uint32 f)
 
uint32 GetUnitState () const
 
uint32 HasUnitTypeMask (uint32 mask) const
 
void AddUnitTypeMask (uint32 mask)
 
uint32 GetUnitTypeMask () const
 
UnitFlags GetUnitFlags () const
 
bool HasUnitFlag (UnitFlags flags) const
 
void SetUnitFlag (UnitFlags flags)
 UnitFlags available in UnitDefines.h.
 
void RemoveUnitFlag (UnitFlags flags)
 UnitFlags available in UnitDefines.h.
 
void ReplaceAllUnitFlags (UnitFlags flags)
 Remove the Unit flag specify only.
 
UnitFlags2 GetUnitFlags2 () const
 Remove all UnitFlags and set new ones. UnitFlags available in UnitDefines.h.
 
bool HasUnitFlag2 (UnitFlags2 flags) const
 
void SetUnitFlag2 (UnitFlags2 flags)
 
void RemoveUnitFlag2 (UnitFlags2 flags)
 
void ReplaceAllUnitFlags2 (UnitFlags2 flags)
 
void SetEmoteState (Emote emoteState)
 
void ClearEmoteState ()
 Sets emote state (looping emote). Emotes available in SharedDefines.h.
 
NPCFlags GetNpcFlags () const
 Clears emote state (looping emote)
 
bool HasNpcFlag (NPCFlags flags) const
 
void SetNpcFlag (NPCFlags flags)
 
void RemoveNpcFlag (NPCFlags flags)
 
void ReplaceAllNpcFlags (NPCFlags flags)
 
uint32 GetDynamicFlags () const override
 
void ReplaceAllDynamicFlags (uint32 flag) override
 
void AddUnitMovementFlag (uint32 f)
 
void RemoveUnitMovementFlag (uint32 f)
 
bool HasUnitMovementFlag (uint32 f) const
 
uint32 GetUnitMovementFlags () const
 
void SetUnitMovementFlags (uint32 f)
 
void AddExtraUnitMovementFlag (uint16 f)
 
void RemoveExtraUnitMovementFlag (uint16 f)
 
uint16 HasExtraUnitMovementFlag (uint16 f) const
 
uint16 GetExtraUnitMovementFlags () const
 
void SetExtraUnitMovementFlags (uint16 f)
 
bool IsCrowdControlled () const
 
bool IsImmobilizedState () const
 
void SetAnimTier (AnimTier animTier)
 
bool IsSummon () const
 
bool IsGuardian () const
 
bool IsControllableGuardian () const
 
bool IsPet () const
 
bool IsHunterPet () const
 
bool IsTotem () const
 
bool IsVehicle () const
 
bool IsVendor () const
 
bool IsTrainer () const
 
bool IsQuestGiver () const
 
bool IsGossip () const
 
bool IsTaxi () const
 
bool IsGuildMaster () const
 
bool IsBattleMaster () const
 
bool IsBanker () const
 
bool IsInnkeeper () const
 
bool IsSpiritHealer () const
 
bool IsSpiritGuide () const
 
bool IsTabardDesigner () const
 
bool IsAuctioner () const
 
bool IsArmorer () const
 
bool IsServiceProvider () const
 
bool IsSpiritService () const
 
uint32 GetCreatureType () const
 
uint32 GetCreatureTypeMask () const
 
bool IsCritter () const
 
uint8 getRace (bool original=false) const
 
void setRace (uint8 race)
 
uint32 getRaceMask () const
 
DisplayRace GetDisplayRaceFromModelId (uint32 modelId) const
 
DisplayRace GetDisplayRace () const
 
uint8 getClass () const
 
virtual bool IsClass (Classes unitClass, ClassContext context=CLASS_CONTEXT_NONE) const
 
uint32 getClassMask () const
 
uint8 getGender () const
 
uint32 GetFaction () const
 
FactionTemplateEntry const * GetFactionTemplateEntry () const
 
void SetFaction (uint32 faction)
 
void RestoreFaction ()
 
uint32 GetOldFactionId () const
 
ObjectGuid GetTarget () const
 
virtual void SetTarget (ObjectGuid=ObjectGuid::Empty)=0
 
bool isTargetableForAttack (bool checkFakeDeath=true, Unit const *byWho=nullptr) const
 
bool IsValidAttackTarget (Unit const *target, SpellInfo const *bySpell=nullptr) const
 
bool _IsValidAttackTarget (Unit const *target, SpellInfo const *bySpell, WorldObject const *obj=nullptr) const
 
bool IsValidAssistTarget (Unit const *target) const
 
bool _IsValidAssistTarget (Unit const *target, SpellInfo const *bySpell) const
 
bool IsClientControlled (Player const *exactClient=nullptr) const
 
Player const * GetClientControlling () const
 
float GetBoundaryRadius () const
 
float GetCombatReach () const override
 
float GetMeleeReach () const
 
bool IsWithinRange (Unit const *obj, float dist) const
 
bool IsWithinBoundaryRadius (const Unit *obj) const
 
bool IsWithinCombatRange (Unit const *obj, float dist2compare) const
 
bool IsWithinMeleeRange (Unit const *obj, float dist=0.f) const
 
float GetMeleeRange (Unit const *target) const
 
void setAttackTimer (WeaponAttackType type, int32 time)
 
void resetAttackTimer (WeaponAttackType type=BASE_ATTACK)
 
int32 getAttackTimer (WeaponAttackType type) const
 
bool isAttackReady (WeaponAttackType type=BASE_ATTACK) const
 
virtual SpellSchoolMask GetMeleeDamageSchoolMask (WeaponAttackType attackType=BASE_ATTACK, uint8 damageIndex=0) const =0
 
bool GetRandomContactPoint (Unit const *target, float &x, float &y, float &z, bool force=false) const
 
UnitgetAttackerForHelper () const
 
bool Attack (Unit *victim, bool meleeAttack)
 
void CastStop (uint32 except_spellid=0, bool withInstant=true)
 Interrupt the unit cast for all the current spells.
 
bool AttackStop ()
 Force the unit to stop attacking. This will clear UNIT_STATE_MELEE_ATTACKING, Interrupt current spell, AI assistance, and call SendMeleeAttackStop() to the client.
 
void RemoveAllAttackers ()
 Remove all units in m_attackers list and send them AttackStop()
 
AttackerSet const & getAttackers () const
 
bool GetMeleeAttackPoint (Unit *attacker, Position &pos)
 
bool isAttackingPlayer () const
 
UnitGetVictim () const
 
void CombatStop (bool includingCast=false, bool mutualPvP=true)
 
void CombatStopWithPets (bool includingCast=false)
 
void StopAttackFaction (uint32 faction_id)
 
void StopAttackingInvalidTarget ()
 
UnitSelectNearbyTarget (Unit *exclude=nullptr, float dist=NOMINAL_MELEE_RANGE) const
 
UnitSelectNearbyNoTotemTarget (Unit *exclude=nullptr, float dist=NOMINAL_MELEE_RANGE) const
 
void SendMeleeAttackStop (Unit *victim=nullptr)
 Send to the client SMSG_ATTACKSTOP but doesn't clear UNIT_STATE_MELEE_ATTACKING on server side or interrupt spells. Unless you know exactly what you're doing, use AttackStop() or RemoveAllAttackers() instead.
 
void SendMeleeAttackStart (Unit *victim, Player *sendTo=nullptr)
 
uint32 GetAttackTime (WeaponAttackType att) const
 
void SetAttackTime (WeaponAttackType att, uint32 val)
 
void ApplyAttackTimePercentMod (WeaponAttackType att, float val, bool apply)
 
void ApplyCastTimePercentMod (float val, bool apply)
 
void SetImmuneToAll (bool apply, bool keepCombat=false)
 
bool IsImmuneToAll () const
 
void SetImmuneToPC (bool apply, bool keepCombat=false)
 
bool IsImmuneToPC () const
 
void SetImmuneToNPC (bool apply, bool keepCombat=false)
 
bool IsImmuneToNPC () const
 
virtual bool IsEngaged () const
 
bool IsEngagedBy (Unit const *who) const
 
void EngageWithTarget (Unit *who)
 
bool IsInCombat () const
 
bool IsInCombatWith (Unit const *who) const
 
bool IsPetInCombat () const
 
void SetInCombatWith (Unit *enemy, bool addSecondUnitSuppressed=false)
 
void ClearInCombat ()
 
void ClearInPetCombat ()
 
uint32 GetCombatTimer () const
 
void SetCombatTimer (uint32 timer)
 
bool CanHaveThreatList (bool skipAliveCheck=false) const
 
void AddThreat (Unit *victim, float fThreat, SpellSchoolMask schoolMask=SPELL_SCHOOL_MASK_NORMAL, SpellInfo const *threatSpell=nullptr)
 
void AtTargetAttacked (Unit *target, bool canInitialAggro)
 
ThreatManagerGetThreatMgr ()
 
ThreatManager const & GetThreatMgr () const
 
CombatManagerGetCombatManager ()
 
CombatManager const & GetCombatManager () const
 
bool IsThreatened () const
 
bool IsThreatenedBy (Unit const *who) const
 
void UpdatePetCombatState ()
 
virtual void AtEnterCombat ()
 
virtual void AtExitCombat ()
 
virtual void AtEngage (Unit *target)
 
virtual void AtDisengage ()
 
bool IsCombatDisallowed () const
 
void SetIsCombatDisallowed (bool value)
 
void SetLastDamagedTargetGuid (ObjectGuid const &guid)
 
ObjectGuid const & GetLastDamagedTargetGuid () const
 
void AttackerStateUpdate (Unit *victim, WeaponAttackType attType=BASE_ATTACK, bool extra=false, bool ignoreCasting=false)
 
bool haveOffhandWeapon () const
 
bool CanDualWield () const
 
virtual void SetCanDualWield (bool value)
 
virtual void SetDualWieldMode (DualWieldMode mode)
 
virtual bool HasWeapon (WeaponAttackType type) const =0
 
bool HasMainhandWeapon () const
 
bool HasOffhandWeapon () const
 
bool HasRangedWeapon () const
 
bool hasMainhandWeaponForAttack () const
 
virtual bool HasWeaponForAttack (WeaponAttackType type) const
 
bool HasMainhandWeaponForAttack () const
 
bool HasOffhandWeaponForAttack () const
 
bool HasRangedWeaponForAttack () const
 
bool CanUseAttackType (WeaponAttackType attacktype) const
 
void HandleProcExtraAttackFor (Unit *victim, uint32 count)
 
void SetLastExtraAttackSpell (uint32 spellId)
 
uint32 GetLastExtraAttackSpell () const
 
void AddExtraAttacks (uint32 count)
 
uint8 GetComboPoints (Unit const *who=nullptr) const
 
uint8 GetComboPoints (ObjectGuid const &guid) const
 
UnitGetComboTarget () const
 
ObjectGuid const GetComboTargetGUID () const
 
void AddComboPoints (Unit *target, int8 count)
 
void AddComboPoints (int8 count)
 
void ClearComboPoints ()
 
void AddComboPointHolder (Unit *unit)
 
void RemoveComboPointHolder (Unit *unit)
 
void ClearComboPointHolders ()
 
void SetContestedPvP (Player *attackedPlayer=nullptr, bool lookForNearContestedGuards=true)
 
bool IsContestedGuard () const
 
bool RespondsToCallForHelp () const
 
bool IsInSanctuary () const
 
bool IsPvP () const
 
bool IsFFAPvP () const
 
void SetPvP (bool state)
 
float GetStat (Stats stat) const
 
void SetStat (Stats stat, int32 val)
 
Stats GetStatByAuraGroup (UnitMods unitMod) const
 
float GetCreateStat (Stats stat) const
 
void SetCreateStat (Stats stat, float val)
 
float GetPosStat (Stats stat) const
 
float GetNegStat (Stats stat) const
 
void InitStatBuffMods ()
 
bool HandleStatFlatModifier (UnitMods unitMod, UnitModifierFlatType modifierType, float amount, bool apply)
 
void ApplyStatPctModifier (UnitMods unitMod, UnitModifierPctType modifierType, float amount)
 
void SetStatFlatModifier (UnitMods unitMod, UnitModifierFlatType modifierType, float val)
 
void SetStatPctModifier (UnitMods unitMod, UnitModifierPctType modifierType, float val)
 
float GetFlatModifierValue (UnitMods unitMod, UnitModifierFlatType modifierType) const
 
float GetPctModifierValue (UnitMods unitMod, UnitModifierPctType modifierType) const
 
void UpdateUnitMod (UnitMods unitMod)
 
virtual bool CheckAttackFitToAuraRequirement (WeaponAttackType, AuraEffect const *) const
 
virtual void UpdateDamageDoneMods (WeaponAttackType attackType, int32 skipEnchantSlot=-1)
 
void UpdateAllDamageDoneMods ()
 
void UpdateDamagePctDoneMods (WeaponAttackType attackType)
 
void UpdateAllDamagePctDoneMods ()
 
float GetTotalStatValue (Stats stat, float additionalValue=0.0f) const
 
void SetCanModifyStats (bool modifyStats)
 
bool CanModifyStats () const
 
void UpdateStatBuffMod (Stats stat)
 
uint8 GetLevel () const
 
uint8 getLevelForTarget (WorldObject const *) const override
 
void SetLevel (uint8 lvl, bool showLevelChange=true)
 
uint32 GetHealth () const
 
uint32 GetMaxHealth () const
 
float GetHealthPct () const
 
int32 GetHealthGain (int32 dVal)
 
uint32 GetCreateHealth () const
 
bool IsFullHealth () const
 
bool HealthBelowPct (int32 pct) const
 
bool HealthBelowPctDamaged (int32 pct, uint32 damage) const
 
bool HealthAbovePct (int32 pct) const
 
bool HealthAbovePctHealed (int32 pct, uint32 heal) const
 
uint32 CountPctFromMaxHealth (int32 pct) const
 
uint32 CountPctFromCurHealth (int32 pct) const
 
void SetHealth (uint32 val)
 
void SetMaxHealth (uint32 val)
 
void SetFullHealth ()
 
int32 ModifyHealth (int32 val)
 
void SetCreateHealth (uint32 val)
 
Powers getPowerType () const
 
virtual bool HasActivePowerType (Powers power)
 
Powers GetPowerTypeByAuraGroup (UnitMods unitMod) const
 
uint32 GetPower (Powers power) const
 
uint32 GetMaxPower (Powers power) const
 
float GetPowerPct (Powers power) const
 
uint32 GetCreatePowers (Powers power) const
 
void setPowerType (Powers power)
 
void SetPower (Powers power, uint32 val, bool withPowerUpdate=true, bool fromRegenerate=false)
 
void SetMaxPower (Powers power, uint32 val)
 
int32 ModifyPower (Powers power, int32 val, bool withPowerUpdate=true)
 
void RewardRage (uint32 damage, uint32 weaponSpeedHitFactor, bool attacker)
 
uint32 GetCreateMana () const
 
void SetCreateMana (uint32 val)
 
bool CanRestoreMana (SpellInfo const *spellInfo) const
 
void SetLastManaUse (uint32 spellCastTime)
 
bool IsUnderLastManaUseEffect () const
 
float GetAPMultiplier (WeaponAttackType attType, bool normalized)
 
uint32 GetArmor () const
 
void SetArmor (int32 val)
 
float GetUnitDodgeChance () const
 
float GetUnitParryChance () const
 
float GetUnitBlockChance () const
 
float GetUnitMissChance (WeaponAttackType attType) const
 
float GetUnitCriticalChance (WeaponAttackType attackType, Unit const *victim) const
 
MeleeHitOutcome RollMeleeOutcomeAgainst (Unit const *victim, WeaponAttackType attType) const
 
MeleeHitOutcome RollMeleeOutcomeAgainst (Unit const *victim, WeaponAttackType attType, int32 crit_chance, int32 miss_chance, int32 dodge_chance, int32 parry_chance, int32 block_chance) const
 
bool CanApplyResilience () const
 
virtual uint32 GetShieldBlockValue () const =0
 
uint32 GetShieldBlockValue (uint32 soft_cap, uint32 hard_cap) const
 
uint32 GetUnitMeleeSkill (Unit const *target=nullptr) const
 
uint32 GetDefenseSkillValue (Unit const *target=nullptr) const
 
uint32 GetWeaponSkillValue (WeaponAttackType attType, Unit const *target=nullptr) const
 
int32 GetMechanicResistChance (SpellInfo const *spell)
 
uint32 GetResistance (SpellSchoolMask mask) const
 
uint32 GetResistance (SpellSchools school) const
 
void SetResistance (SpellSchools school, int32 val)
 
void UpdateResistanceBuffModsMod (SpellSchools school)
 
uint16 GetMaxSkillValueForLevel (Unit const *target=nullptr) const
 
float GetTotalAuraModValue (UnitMods unitMod) const
 
SpellSchools GetSpellSchoolByAuraGroup (UnitMods unitMod) const
 
float GetTotalAttackPowerValue (WeaponAttackType attType, Unit *pVictim=nullptr) const
 
float GetWeaponDamageRange (WeaponAttackType attType, WeaponDamageRange type, uint8 damageIndex=0) const
 
void SetBaseWeaponDamage (WeaponAttackType attType, WeaponDamageRange damageRange, float value, uint8 damageIndex=0)
 
virtual bool UpdateStats (Stats stat)=0
 
virtual bool UpdateAllStats ()=0
 
virtual void UpdateResistances (uint32 school)=0
 
virtual void UpdateAllResistances ()
 
virtual void UpdateArmor ()=0
 
virtual void UpdateMaxHealth ()=0
 
virtual void UpdateMaxPower (Powers power)=0
 
virtual void UpdateAttackPowerAndDamage (bool ranged=false)=0
 
virtual void UpdateDamagePhysical (WeaponAttackType attType)
 
void DealMeleeDamage (CalcDamageInfo *damageInfo, bool durabilityLoss)
 
void DealSpellDamage (SpellNonMeleeDamage *damageInfo, bool durabilityLoss, Spell const *spell=nullptr)
 
void DealDamageShieldDamage (Unit *victim)
 
void KillSelf (bool durabilityLoss=true, WeaponAttackType attackType=BASE_ATTACK, SpellInfo const *spellProto=nullptr, Spell const *spell=nullptr)
 
uint32 CalculateDamage (WeaponAttackType attType, bool normalized, bool addTotalPct, uint8 itemDamagesMask=0)
 
virtual void CalculateMinMaxDamage (WeaponAttackType attType, bool normalized, bool addTotalPct, float &minDamage, float &maxDamage, uint8 damageIndex=0)=0
 
void CalculateMeleeDamage (Unit *victim, CalcDamageInfo *damageInfo, WeaponAttackType attackType=BASE_ATTACK, const bool sittingVictim=false)
 
void CalculateSpellDamageTaken (SpellNonMeleeDamage *damageInfo, int32 damage, SpellInfo const *spellInfo, WeaponAttackType attackType=BASE_ATTACK, bool crit=false)
 
int32 CalculateSpellDamage (Unit const *target, SpellInfo const *spellProto, uint8 effect_index, int32 const *basePoints=nullptr) const
 
float CalculateDefaultCoefficient (SpellInfo const *spellInfo, DamageEffectType damagetype) const
 
uint32 MeleeDamageBonusDone (Unit *pVictim, uint32 damage, WeaponAttackType attType, SpellInfo const *spellProto=nullptr, SpellSchoolMask damageSchoolMask=SPELL_SCHOOL_MASK_NORMAL)
 
uint32 MeleeDamageBonusTaken (Unit *attacker, uint32 pdamage, WeaponAttackType attType, SpellInfo const *spellProto=nullptr, SpellSchoolMask damageSchoolMask=SPELL_SCHOOL_MASK_NORMAL)
 
int32 SpellBaseDamageBonusDone (SpellSchoolMask schoolMask)
 
int32 SpellBaseDamageBonusTaken (SpellSchoolMask schoolMask, bool isDoT=false)
 
float SpellPctDamageModsDone (Unit *victim, SpellInfo const *spellProto, DamageEffectType damagetype)
 
uint32 SpellDamageBonusDone (Unit *victim, SpellInfo const *spellProto, uint32 pdamage, DamageEffectType damagetype, uint8 effIndex, float TotalMod=0.0f, uint32 stack=1)
 
uint32 SpellDamageBonusTaken (Unit *caster, SpellInfo const *spellProto, uint32 pdamage, DamageEffectType damagetype, uint32 stack=1)
 
int32 CalculateAOEDamageReduction (int32 damage, uint32 schoolMask, bool npcCaster) const
 
uint32 GetMeleeDamageReduction (uint32 damage) const
 
uint32 GetRangedDamageReduction (uint32 damage) const
 
uint32 GetSpellDamageReduction (uint32 damage) const
 
float GetMeleeCritChanceReduction () const
 
float GetRangedCritChanceReduction () const
 
float GetSpellCritChanceReduction () const
 
uint32 GetMeleeCritDamageReduction (uint32 damage) const
 
uint32 GetRangedCritDamageReduction (uint32 damage) const
 
uint32 GetSpellCritDamageReduction (uint32 damage) const
 
CharmInfoGetCharmInfo ()
 
CharmInfoInitCharmInfo ()
 
UnitGetCharmer () const
 
UnitGetCharm () const
 
UnitGetCharmerOrOwner () const
 
UnitGetCharmerOrOwnerOrSelf () const
 
PlayerGetCharmerOrOwnerPlayerOrPlayerItself () const
 
ObjectGuid GetCharmerOrOwnerGUID () const
 
ObjectGuid GetCharmerOrOwnerOrOwnGUID () const
 
PlayerGetAffectingPlayer () const
 
UnitGetFirstControlled () const
 
bool IsControlledByPlayer () const
 
bool IsCreatedByPlayer () const
 
bool IsCharmedOwnedByPlayerOrPlayer () const
 
bool IsCharmed () const
 
bool isPossessed () const
 
bool isPossessedByPlayer () const
 
bool isPossessing () const
 
bool isPossessing (Unit *u) const
 
void SetCharm (Unit *target, bool apply)
 
bool SetCharmedBy (Unit *charmer, CharmType type, AuraApplication const *aurApp=nullptr)
 
void UpdateCharmAI ()
 
void RemoveCharmedBy (Unit *charmer)
 
void RemoveCharmAuras ()
 
void RemoveAllControlled (bool onDeath=false)
 
void DeleteCharmInfo ()
 
virtual bool HasSpellCooldown (uint32) const
 
virtual bool HasSpellItemCooldown (uint32, uint32) const
 
virtual void AddSpellCooldown (uint32, uint32, uint32, bool needSendToClient=false, bool forceSendToSpectator=false)
 
void BuildCooldownPacket (WorldPacket &data, uint8 flags, uint32 spellId, uint32 cooldown)
 
void BuildCooldownPacket (WorldPacket &data, uint8 flags, PacketCooldowns const &cooldowns)
 
AuraAddAura (uint32 spellId, Unit *target)
 
AuraAddAura (SpellInfo const *spellInfo, uint8 effMask, Unit *target)
 
void SetAuraStack (uint32 spellId, Unit *target, uint32 stack)
 
int32 GetHighestExclusiveSameEffectSpellGroupValue (AuraEffect const *aurEff, AuraType auraType, bool checkMiscValue=false, int32 miscValue=0) const
 
bool IsHighestExclusiveAura (Aura const *aura, bool removeOtherAuraApplications=false)
 
bool IsHighestExclusiveAuraEffect (SpellInfo const *spellInfo, AuraType auraType, int32 effectAmount, uint8 auraEffectMask, bool removeOtherAuraApplications=false)
 
Aura_TryStackingOrRefreshingExistingAura (SpellInfo const *newAura, uint8 effMask, Unit *caster, int32 *baseAmount=nullptr, Item *castItem=nullptr, ObjectGuid casterGUID=ObjectGuid::Empty, bool periodicReset=false)
 
void _AddAura (UnitAura *aura, Unit *caster)
 
AuraApplication_CreateAuraApplication (Aura *aura, uint8 effMask)
 
void _ApplyAuraEffect (Aura *aura, uint8 effIndex)
 
void _ApplyAura (AuraApplication *aurApp, uint8 effMask)
 
void _UnapplyAura (AuraApplicationMap::iterator &i, AuraRemoveMode removeMode)
 
void _UnapplyAura (AuraApplication *aurApp, AuraRemoveMode removeMode)
 
void _RemoveNoStackAuraApplicationsDueToAura (Aura *aura)
 
void _RemoveNoStackAurasDueToAura (Aura *aura, bool owned)
 
bool _IsNoStackAuraDueToAura (Aura *appliedAura, Aura *existingAura) const
 
void _RegisterAuraEffect (AuraEffect *aurEff, bool apply)
 
AuraMapGetOwnedAuras ()
 
AuraMap const & GetOwnedAuras () const
 
void RemoveOwnedAura (AuraMap::iterator &i, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
 
void RemoveOwnedAura (uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
 
void RemoveOwnedAura (Aura *aura, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
 
AuraGetOwnedAura (uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, Aura *except=nullptr) const
 
AuraApplicationMapGetAppliedAuras ()
 
AuraApplicationMap const & GetAppliedAuras () const
 
void RemoveAura (AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
 
void RemoveAura (uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
 
void RemoveAura (AuraApplication *aurApp, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
 
void RemoveAura (Aura *aur, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
 
void RemoveBindSightAuras ()
 
void RemoveAppliedAuras (std::function< bool(AuraApplication const *)> const &check)
 
void RemoveOwnedAuras (std::function< bool(Aura const *)> const &check)
 
void RemoveAppliedAuras (uint32 spellId, std::function< bool(AuraApplication const *)> const &check)
 
void RemoveOwnedAuras (uint32 spellId, std::function< bool(Aura const *)> const &check)
 
void RemoveAurasDueToSpell (uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
 
void RemoveAuraFromStack (uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
 
void RemoveAurasDueToSpellByDispel (uint32 spellId, uint32 dispellerSpellId, ObjectGuid casterGUID, Unit *dispeller, uint8 chargesRemoved=1)
 
void RemoveAurasDueToSpellBySteal (uint32 spellId, ObjectGuid casterGUID, Unit *stealer)
 
void RemoveAurasDueToItemSpell (uint32 spellId, ObjectGuid castItemGuid)
 
void RemoveAurasByType (AuraType auraType, ObjectGuid casterGUID=ObjectGuid::Empty, Aura *except=nullptr, bool negative=true, bool positive=true)
 
void RemoveNotOwnSingleTargetAuras ()
 
void RemoveAurasWithInterruptFlags (uint32 flag, uint32 except=0, bool isAutoshot=false)
 
void RemoveAurasWithAttribute (uint32 flags)
 
void RemoveAurasWithFamily (SpellFamilyNames family, uint32 familyFlag1, uint32 familyFlag2, uint32 familyFlag3, ObjectGuid casterGUID)
 
void RemoveAurasWithMechanic (uint64 mechanic_mask, AuraRemoveMode removemode=AURA_REMOVE_BY_DEFAULT, uint32 except=0)
 
void RemoveMovementImpairingAuras (bool withRoot)
 
void RemoveAurasByShapeShift ()
 
void RemoveAreaAurasDueToLeaveWorld ()
 
void RemoveAllAuras ()
 
void RemoveArenaAuras ()
 
void RemoveAllAurasOnDeath ()
 
void RemoveAllAurasRequiringDeadTarget ()
 
void RemoveAllAurasExceptType (AuraType type)
 
void RemoveEvadeAuras ()
 
void DelayOwnedAuras (uint32 spellId, ObjectGuid caster, int32 delaytime)
 
void _RemoveAllAuraStatMods ()
 
void _ApplyAllAuraStatMods ()
 
AuraEffectList const & GetAuraEffectsByType (AuraType type) const
 
AuraListGetSingleCastAuras ()
 
AuraList const & GetSingleCastAuras () const
 
AuraEffectGetAuraEffect (uint32 spellId, uint8 effIndex, ObjectGuid casterGUID=ObjectGuid::Empty) const
 
AuraEffectGetAuraEffectOfRankedSpell (uint32 spellId, uint8 effIndex, ObjectGuid casterGUID=ObjectGuid::Empty) const
 
AuraEffectGetAuraEffect (AuraType type, SpellFamilyNames name, uint32 iconId, uint8 effIndex) const
 
AuraEffectGetAuraEffect (AuraType type, SpellFamilyNames family, uint32 familyFlag1, uint32 familyFlag2, uint32 familyFlag3, ObjectGuid casterGUID=ObjectGuid::Empty) const
 
AuraEffectGetAuraEffectDummy (uint32 spellid) const
 
AuraEffectGetDummyAuraEffect (SpellFamilyNames name, uint32 iconId, uint8 effIndex) const
 
AuraApplicationGetAuraApplication (uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraApplication *except=nullptr) const
 
AuraGetAura (uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
 
AuraApplicationGetAuraApplicationOfRankedSpell (uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraApplication *except=nullptr) const
 
AuraGetAuraOfRankedSpell (uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
 
void GetDispellableAuraList (Unit *caster, uint32 dispelMask, DispelChargesList &dispelList, SpellInfo const *dispelSpell)
 
bool HasAuraEffect (uint32 spellId, uint8 effIndex, ObjectGuid caster=ObjectGuid::Empty) const
 
uint32 GetAuraCount (uint32 spellId) const
 
bool HasAuras (SearchMethod sm, std::vector< uint32 > &spellIds) const
 Check if unit has ANY or ALL specified auras.
 
template<typename... Auras>
bool HasAnyAuras (Auras... spellIds) const
 Checks if the unit has ANY specified auras.
 
template<typename... Auras>
bool HasAllAuras (Auras... spellIds) const
 Checks if the unit has ALL specified auras.
 
bool HasAura (uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
 
bool HasAuraType (AuraType auraType) const
 
bool HasAuraTypeWithCaster (AuraType auratype, ObjectGuid caster) const
 
bool HasAuraTypeWithMiscvalue (AuraType auratype, int32 miscvalue) const
 
bool HasAuraTypeWithAffectMask (AuraType auratype, SpellInfo const *affectedSpell) const
 
bool HasAuraTypeWithValue (AuraType auratype, int32 value) const
 
bool HasAuraTypeWithTriggerSpell (AuraType auratype, uint32 triggerSpell) const
 
bool HasNegativeAuraWithInterruptFlag (uint32 flag, ObjectGuid guid=ObjectGuid::Empty)
 
bool HasVisibleAuraType (AuraType auraType) const
 
bool HasNegativeAuraWithAttribute (uint32 flag, ObjectGuid guid=ObjectGuid::Empty)
 
bool HasAuraWithMechanic (uint64 mechanicMask) const
 
bool HasAuraTypeWithFamilyFlags (AuraType auraType, uint32 familyName, uint32 familyFlags) const
 
bool HasBreakableByDamageAuraType (AuraType type, uint32 excludeAura=0) const
 
bool HasBreakableByDamageCrowdControlAura (Unit *excludeCasterChannel=nullptr) const
 
AuraEffectIsScriptOverriden (SpellInfo const *spell, int32 script) const
 
uint32 GetDiseasesByCaster (ObjectGuid casterGUID, uint8 mode=0)
 
uint32 GetDoTsByCaster (ObjectGuid casterGUID) const
 
int32 GetTotalAuraModifier (AuraType auratype) const
 
float GetTotalAuraMultiplier (AuraType auratype) const
 
int32 GetMaxPositiveAuraModifier (AuraType auratype) const
 
int32 GetMaxNegativeAuraModifier (AuraType auratype) const
 
int32 GetTotalAuraModifier (AuraType auratype, std::function< bool(AuraEffect const *)> const &predicate) const
 
float GetTotalAuraMultiplier (AuraType auraType, std::function< bool(AuraEffect const *)> const &predicate) const
 
int32 GetMaxPositiveAuraModifier (AuraType auraType, std::function< bool(AuraEffect const *)> const &predicate) const
 
int32 GetMaxNegativeAuraModifier (AuraType auraType, std::function< bool(AuraEffect const *)> const &predicate) const
 
int32 GetTotalAuraModifierByMiscMask (AuraType auratype, uint32 misc_mask) const
 
float GetTotalAuraMultiplierByMiscMask (AuraType auratype, uint32 misc_mask) const
 
int32 GetMaxPositiveAuraModifierByMiscMask (AuraType auratype, uint32 misc_mask, const AuraEffect *except=nullptr) const
 
int32 GetMaxNegativeAuraModifierByMiscMask (AuraType auratype, uint32 misc_mask) const
 
int32 GetTotalAuraModifierByMiscValue (AuraType auratype, int32 misc_value) const
 
float GetTotalAuraMultiplierByMiscValue (AuraType auratype, int32 misc_value) const
 
int32 GetMaxPositiveAuraModifierByMiscValue (AuraType auratype, int32 misc_value) const
 
int32 GetMaxNegativeAuraModifierByMiscValue (AuraType auratype, int32 misc_value) const
 
int32 GetTotalAuraModifierByAffectMask (AuraType auratype, SpellInfo const *affectedSpell) const
 
float GetTotalAuraMultiplierByAffectMask (AuraType auratype, SpellInfo const *affectedSpell) const
 
int32 GetMaxPositiveAuraModifierByAffectMask (AuraType auratype, SpellInfo const *affectedSpell) const
 
int32 GetMaxNegativeAuraModifierByAffectMask (AuraType auratype, SpellInfo const *affectedSpell) const
 
VisibleAuraMap const * GetVisibleAuras ()
 
AuraApplicationGetVisibleAura (uint8 slot)
 
void SetVisibleAura (uint8 slot, AuraApplication *aur)
 
void RemoveVisibleAura (uint8 slot)
 
void ModifyAuraState (AuraStateType flag, bool apply)
 
uint32 BuildAuraStateUpdateForTarget (Unit *target) const
 
bool HasAuraState (AuraStateType flag, SpellInfo const *spellProto=nullptr, Unit const *Caster=nullptr) const
 
bool CanProc ()
 
void SetCantProc (bool apply)
 
void ProcSkillsAndReactives (bool isVictim, Unit *target, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, SpellInfo const *procSpellInfo, uint32 damage, SpellInfo const *procAura=nullptr, int8 procAuraEffectIndex=-1, Spell const *procSpell=nullptr, DamageInfo *damageInfo=nullptr, HealInfo *healInfo=nullptr, uint32 procPhase=2)
 
void GetProcAurasTriggeredOnEvent (AuraApplicationProcContainer &aurasTriggeringProc, std::list< AuraApplication * > *procAuras, ProcEventInfo eventInfo)
 
void TriggerAurasProcOnEvent (CalcDamageInfo &damageInfo)
 
void TriggerAurasProcOnEvent (std::list< AuraApplication * > *myProcAuras, std::list< AuraApplication * > *targetProcAuras, Unit *actionTarget, uint32 typeMaskActor, uint32 typeMaskActionTarget, uint32 spellTypeMask, uint32 spellPhaseMask, uint32 hitMask, Spell *spell, DamageInfo *damageInfo, HealInfo *healInfo)
 
void TriggerAurasProcOnEvent (ProcEventInfo &eventInfo, AuraApplicationProcContainer &procAuras)
 
float GetWeaponProcChance () const
 
float GetPPMProcChance (uint32 WeaponSpeed, float PPM, SpellInfo const *spellProto) const
 
PlayerGetSpellModOwner () const
 
SpellGetCurrentSpell (CurrentSpellTypes spellType) const
 
SpellGetCurrentSpell (uint32 spellType) const
 
SpellGetFirstCurrentCastingSpell () const
 
SpellFindCurrentSpellBySpellId (uint32 spell_id) const
 
int32 GetCurrentSpellCastTime (uint32 spell_id) const
 
virtual bool HasSpell (uint32) const
 
void SetCurrentCastedSpell (Spell *pSpell)
 
virtual void ProhibitSpellSchool (SpellSchoolMask, uint32)
 
void SetInstantCast (bool set)
 
bool CanInstantCast () const
 
bool IsNonMeleeSpellCast (bool withDelayed, bool skipChanneled=false, bool skipAutorepeat=false, bool isAutoshoot=false, bool skipInstant=true) const
 
void InterruptNonMeleeSpells (bool withDelayed, uint32 spellid=0, bool withInstant=true, bool bySelf=false)
 
float GetSpellMaxRangeForTarget (Unit const *target, SpellInfo const *spellInfo) const
 
float GetSpellMinRangeForTarget (Unit const *target, SpellInfo const *spellInfo) const
 
uint32 GetInterruptMask () const
 
void AddInterruptMask (uint32 mask)
 
void UpdateInterruptMask ()
 
void InterruptSpell (CurrentSpellTypes spellType, bool withDelayed=true, bool withInstant=true, bool bySelf=false)
 
bool isSpellBlocked (Unit *victim, SpellInfo const *spellProto, WeaponAttackType attackType=BASE_ATTACK)
 
void FinishSpell (CurrentSpellTypes spellType, bool ok=true)
 
UnitGetMagicHitRedirectTarget (Unit *victim, SpellInfo const *spellInfo)
 
UnitGetMeleeHitRedirectTarget (Unit *victim, SpellInfo const *spellInfo=nullptr)
 
float MeleeSpellMissChance (Unit const *victim, WeaponAttackType attType, int32 skillDiff, uint32 spellId) const
 
SpellMissInfo MeleeSpellHitResult (Unit *victim, SpellInfo const *spell)
 
SpellMissInfo MagicSpellHitResult (Unit *victim, SpellInfo const *spell)
 
SpellMissInfo SpellHitResult (Unit *victim, SpellInfo const *spell, bool canReflect=false)
 
SpellMissInfo SpellHitResult (Unit *victim, Spell const *spell, bool canReflect=false)
 
void SendHealSpellLog (HealInfo const &healInfo, bool critical=false)
 
int32 HealBySpell (HealInfo &healInfo, bool critical=false)
 
int32 SpellBaseHealingBonusDone (SpellSchoolMask schoolMask)
 
float SpellPctHealingModsDone (Unit *victim, SpellInfo const *spellProto, DamageEffectType damagetype, bool includeHealingDonePct=true)
 
uint32 SpellHealingBonusDone (Unit *victim, SpellInfo const *spellProto, uint32 healamount, DamageEffectType damagetype, uint8 effIndex, float TotalMod=0.0f, uint32 stack=1)
 
uint32 SpellHealingBonusTaken (Unit *caster, SpellInfo const *spellProto, uint32 healamount, DamageEffectType damagetype, uint32 stack=1)
 
void SendEnergizeSpellLog (Unit *victim, uint32 SpellID, uint32 Damage, Powers powertype)
 
void EnergizeBySpell (Unit *victim, uint32 SpellID, uint32 Damage, Powers powertype)
 
void ApplySpellImmune (uint32 spellId, uint32 op, uint32 type, bool apply, SpellImmuneBlockType blockType=SPELL_BLOCK_TYPE_ALL)
 
virtual bool IsImmunedToSpell (SpellInfo const *spellInfo, Spell const *spell=nullptr)
 
bool IsImmunedToSpell (SpellInfo const *spellInfo, uint32 effectMask, Unit const *caster=nullptr)
 
bool IgnoresSchoolImmunityFromFriendlyCaster (Unit const *caster, uint32 immunityAuraId, SpellInfo const *immunitySpellInfo) const
 
bool IsImmunedToDamage (SpellSchoolMask schoolMask) const
 
bool IsImmunedToDamage (Unit const *caster, SpellInfo const *spellInfo) const
 
bool IsImmunedToSchool (SpellSchoolMask schoolMask) const
 
uint32 GetSchoolImmunityMask () const
 
uint32 GetDamageImmunityMask () const
 
bool IsImmunedToSchool (SpellInfo const *spellInfo) const
 
bool IsImmunedToSchool (Spell const *spell) const
 
bool IsImmunedToDamageOrSchool (SpellSchoolMask schoolMask) const
 
bool IsImmunedToAuraPeriodicTick (Unit const *caster, SpellInfo const *spellInfo) const
 
virtual bool IsImmunedToSpellEffect (SpellInfo const *spellInfo, uint32 index, Unit const *caster=nullptr) const
 
bool isBlockCritical ()
 
float SpellDoneCritChance (Unit const *, SpellInfo const *spellProto, SpellSchoolMask schoolMask, WeaponAttackType attackType, bool skipEffectCheck) const
 
float SpellTakenCritChance (Unit const *caster, SpellInfo const *spellProto, SpellSchoolMask schoolMask, float doneChance, WeaponAttackType attackType, bool skipEffectCheck) const
 
float ApplyEffectModifiers (SpellInfo const *spellProto, uint8 effect_index, float value) const
 
int32 CalcSpellDuration (SpellInfo const *spellProto)
 
int32 ModSpellDuration (SpellInfo const *spellProto, Unit const *target, int32 duration, bool positive, uint32 effectMask)
 
void ModSpellCastTime (SpellInfo const *spellProto, int32 &castTime, Spell *spell=nullptr)
 
float CalculateLevelPenalty (SpellInfo const *spellProto) const
 
uint32 GetCastingTimeForBonus (SpellInfo const *spellProto, DamageEffectType damagetype, uint32 CastingTime) const
 
void CastDelayedSpellWithPeriodicAmount (Unit *caster, uint32 spellId, AuraType auraType, int32 addAmount, uint8 effectIndex=0)
 
SpellCastResult CastSpell (SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastSpell (Unit *victim, uint32 spellId, bool triggered, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastSpell (Unit *victim, uint32 spellId, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastSpell (Unit *victim, SpellInfo const *spellInfo, bool triggered, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastSpell (Unit *victim, SpellInfo const *spellInfo, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastSpell (float x, float y, float z, uint32 spellId, bool triggered, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastSpell (GameObject *go, uint32 spellId, bool triggered, Item *castItem=nullptr, AuraEffect *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastCustomSpell (Unit *victim, uint32 spellId, int32 const *bp0, int32 const *bp1, int32 const *bp2, bool triggered, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastCustomSpell (uint32 spellId, SpellValueMod mod, int32 value, Unit *victim, bool triggered, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastCustomSpell (uint32 spellId, SpellValueMod mod, int32 value, Unit *victim=nullptr, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastCustomSpell (uint32 spellId, CustomSpellValues const &value, Unit *victim=nullptr, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastCustomSpell (SpellInfo const *spellInfo, CustomSpellValues const &value, Unit *victim=nullptr, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
void _RegisterDynObject (DynamicObject *dynObj)
 
void _UnregisterDynObject (DynamicObject *dynObj)
 
DynamicObjectGetDynObject (uint32 spellId)
 
bool RemoveDynObject (uint32 spellId)
 
void RemoveAllDynObjects ()
 
GameObjectGetGameObject (uint32 spellId) const
 
void AddGameObject (GameObject *gameObj)
 
void RemoveGameObject (GameObject *gameObj, bool del)
 
void RemoveGameObject (uint32 spellid, bool del)
 
void RemoveAllGameObjects ()
 
bool IsPolymorphed () const
 
bool isFrozen () const
 
bool IsInFlight () const
 
bool IsLevitating () const
 
bool IsWalking () const
 
bool isMoving () const
 
bool isTurning () const
 
bool IsHovering () const
 
bool isSwimming () const
 
virtual bool CanFly () const =0
 
bool IsFlying () const
 
bool IsFalling () const
 
bool IsRooted () const
 
float GetHoverHeight () const
 
virtual bool IsMovementPreventedByCasting () const
 
virtual bool CanEnterWater () const =0
 
virtual bool CanSwim () const
 this method checks the current flag of a unit
 
bool CanFreeMove () const
 
bool HasLeewayMovement () const
 
void KnockbackFrom (float x, float y, float speedXY, float speedZ)
 
void JumpTo (float speedXY, float speedZ, bool forward=true)
 
void JumpTo (WorldObject *obj, float speedZ)
 
void UpdateSpeed (UnitMoveType mtype, bool forced)
 
float GetSpeed (UnitMoveType mtype) const
 
float GetSpeedRate (UnitMoveType mtype) const
 
void SetSpeed (UnitMoveType mtype, float rate, bool forced=false)
 
void SetSpeedRate (UnitMoveType mtype, float rate)
 
void propagateSpeedChange ()
 
void SendMonsterMove (float NewPosX, float NewPosY, float NewPosZ, uint32 TransitTime, SplineFlags sf=SPLINEFLAG_WALK_MODE)
 
void MonsterMoveWithSpeed (float x, float y, float z, float speed)
 
virtual bool SetWalk (bool enable)
 
void SetDisableGravity (bool disable)
 
virtual bool SetSwim (bool enable)
 
void SetCanFly (bool enable)
 Add the movement flag: MOVEMENTFLAGCAN_FLY. Generaly only use by players, allowing them to fly by pressing space for example. For creatures, please look for DisableGravity().
 
void SetWaterWalking (bool enable)
 
void SetFeatherFall (bool enable)
 
void SetHover (bool enable)
 
MotionMasterGetMotionMaster ()
 
const MotionMasterGetMotionMaster () const
 
virtual MovementGeneratorType GetDefaultMovementType () const
 -------—End of Pet responses methods-------—
 
bool IsStopped () const
 
void StopMoving ()
 
void StopMovingOnCurrentPos ()
 
virtual void PauseMovement (uint32 timer=0, uint8 slot=0)
 Disable the unit movement by clearing UNIT_STATE_MOVING and stopping the spline.
 
void ResumeMovement (uint32 timer=0, uint8 slot=0)
 
void SetControlled (bool apply, UnitState state, Unit *source=nullptr, bool isFear=false)
 
void DisableRotate (bool apply)
 
void DisableSpline ()
 
SheathState GetSheath () const
 
virtual void SetSheath (SheathState sheathed)
 
uint8 getStandState () const
 
bool IsSitState () const
 
bool IsStandState () const
 
bool IsStandUpOnMovementState () const
 
void SetStandState (uint8 state)
 
void SetStandFlags (uint8 flags)
 
void RemoveStandFlags (uint8 flags)
 
DeathState getDeathState ()
 
virtual void setDeathState (DeathState s, bool despawn=false)
 
bool IsAlive () const
 
bool isDying () const
 
bool isDead () const
 
bool HasGhostAura () const
 
bool HasMountedAura () const
 
bool HasWaterWalkAura () const
 
bool HasFeatherFallAura () const
 
bool HasHoverAura () const
 
bool HasFlyAura () const
 
bool HasSpiritOfRedemptionAura () const
 
bool HasPreventsFleeingAura () const
 
bool HasPreventDurabilityLossAura () const
 
bool HasPreventResurectionAura () const
 
bool HasTransformAura () const
 
bool HasInterruptRegenAura () const
 
bool HasNoPVPCreditAura () const
 
bool HasWaterBreathingAura () const
 
bool HasIgnoreHitDirectionAura () const
 
bool HasSpellMagnetAura () const
 
bool HasOpenStableAura () const
 
bool HasCloneCasterAura () const
 
bool HasReflectSpellsAura () const
 
bool HasDetectAmoreAura () const
 
bool HasAllowOnlyAbilityAura () const
 
bool HasPeriodicDummyAura () const
 
bool HasControlVehicleAura () const
 
bool HasAOECharmAura () const
 
bool HasDetectSpellsAura () const
 
bool HasPacifySilenceAura () const
 
bool HasSilenceAura () const
 
bool HasShapeshiftAura () const
 
bool HasDecreaseSpeedAura () const
 
bool HasPacifyAura () const
 
bool HasIgnoreTargetResistAura () const
 
bool HasIncreaseMountedSpeedAura () const
 
bool HasIncreaseMountedFlightSpeedAura () const
 
bool HasAttackerSpellCritChanceAura () const
 
bool HasUnattackableAura () const
 
bool HasHealthRegenInCombatAura () const
 
bool HasRegenDuringCombatAura () const
 
bool HasFearAura () const
 
bool HasConfuseAura () const
 
bool HasRootAura () const
 
bool HasStunAura () const
 
bool HasTauntAura () const
 
bool HasStealthAura () const
 
bool HasStealthDetectAura () const
 
bool HasInvisibilityAura () const
 
bool HasInvisibilityDetectAura () const
 
bool IsHostileTo (Unit const *unit) const
 
bool IsHostileToPlayers () const
 
bool IsFriendlyTo (Unit const *unit) const
 
bool IsNeutralToAll () const
 
void ClearAllReactives ()
 
void StartReactiveTimer (ReactiveType reactive)
 
void UpdateReactives (uint32 p_time)
 
DiminishingLevels GetDiminishing (DiminishingGroup group)
 
void IncrDiminishing (DiminishingGroup group)
 
float ApplyDiminishingToDuration (DiminishingGroup group, int32 &duration, Unit *caster, DiminishingLevels Level, int32 limitduration)
 
void ApplyDiminishingAura (DiminishingGroup group, bool apply)
 
void ClearDiminishings ()
 
bool IsInPartyWith (Unit const *unit) const
 
bool IsInRaidWith (Unit const *unit) const
 
void GetPartyMembers (std::list< Unit * > &units)
 
UnitGetNextRandomRaidMemberOrPet (float radius)
 
void UpdateAuraForGroup (uint8 slot)
 
ReputationRank GetReactionTo (Unit const *target, bool checkOriginalFaction=false) const
 
ReputationRank GetFactionReactionTo (FactionTemplateEntry const *factionTemplateEntry, Unit const *target) const
 
SharedVisionList const & GetSharedVisionList ()
 
void AddPlayerToVision (Player *player)
 
void RemovePlayerFromVision (Player *player)
 
bool HasSharedVision () const
 
uint32 GetVirtualItemId (uint32 slot) const
 
void SetVirtualItem (uint32 slot, uint32 itemId)
 
bool IsMounted () const
 
uint32 GetMountID () const
 
void Mount (uint32 mount, uint32 vehicleId=0, uint32 creatureEntry=0)
 
void Dismount ()
 
bool IsInDisallowedMountForm () const
 
void FollowerAdded (AbstractFollower *f)
 
void FollowerRemoved (AbstractFollower *f)
 
virtual float GetFollowAngle () const
 
void RemoveAllFollowers ()
 
GuardianGetGuardianPet () const
 
MinionGetFirstMinion () const
 
CreatureGetCompanionPet () const
 
PetCreateTamedPetFrom (Creature *creatureTarget, uint32 spell_id=0)
 
PetCreateTamedPetFrom (uint32 creatureEntry, uint32 spell_id=0)
 
bool InitTamedPet (Pet *pet, uint8 level, uint32 spell_id)
 
void SetMinion (Minion *minion, bool apply)
 
void GetAllMinionsByEntry (std::list< Creature * > &Minions, uint32 entry)
 
void RemoveAllMinionsByEntry (uint32 entry)
 
void AddPetAura (PetAura const *petSpell)
 
void RemovePetAura (PetAura const *petSpell)
 
void CastPetAura (PetAura const *aura)
 
bool IsPetAura (Aura const *aura)
 
void PetSpellFail (SpellInfo const *spellInfo, Unit *target, uint32 result)
 
void UnsummonAllTotems (bool onDeath=false)
 
TransportBaseGetDirectTransport () const
 
bool CreateVehicleKit (uint32 id, uint32 creatureEntry)
 Returns the transport this unit is on directly (if on vehicle and transport, return vehicle)
 
void RemoveVehicleKit ()
 
VehicleGetVehicleKit () const
 
VehicleGetVehicle () const
 
bool IsOnVehicle (Unit const *vehicle) const
 
UnitGetVehicleBase () const
 
CreatureGetVehicleCreatureBase () const
 
void EnterVehicle (Unit *base, int8 seatId=-1)
 
void EnterVehicleUnattackable (Unit *base, int8 seatId=-1)
 
void ExitVehicle (Position const *exitPosition=nullptr)
 
void ChangeSeat (int8 seatId, bool next=true)
 
bool HandleSpellClick (Unit *clicker, int8 seatId=-1)
 
void _ExitVehicle (Position const *exitPosition=nullptr)
 
void _EnterVehicle (Vehicle *vehicle, int8 seatId, AuraApplication const *aurApp=nullptr)
 
void HandleEmoteCommand (uint32 emoteId)
 
virtual void Talk (std::string_view text, ChatMsg msgType, Language language, float textRange, WorldObject const *target)
 
virtual void Say (std::string_view text, Language language, WorldObject const *target=nullptr)
 
virtual void Yell (std::string_view text, Language language, WorldObject const *target=nullptr)
 
virtual void TextEmote (std::string_view text, WorldObject const *target=nullptr, bool isBossEmote=false)
 
virtual void Whisper (std::string_view text, Language language, Player *target, bool isBossWhisper=false)
 
virtual void Talk (uint32 textId, ChatMsg msgType, float textRange, WorldObject const *target)
 
virtual void Say (uint32 textId, WorldObject const *target=nullptr)
 
virtual void Yell (uint32 textId, WorldObject const *target=nullptr)
 
virtual void TextEmote (uint32 textId, WorldObject const *target=nullptr, bool isBossEmote=false)
 
virtual void Whisper (uint32 textId, Player *target, bool isBossWhisper=false)
 
ShapeshiftForm GetShapeshiftForm () const
 
void SetShapeshiftForm (ShapeshiftForm form)
 
bool IsAttackSpeedOverridenShapeShift () const
 
bool IsInFeralForm () const
 
void setTransForm (uint32 spellid)
 
uint32 getTransForm () const
 
void DeMorph ()
 
virtual float GetNativeObjectScale () const
 
virtual void RecalculateObjectScale ()
 
uint32 GetDisplayId () const
 
virtual void SetDisplayId (uint32 modelId, float displayScale=1.f)
 
uint32 GetNativeDisplayId () const
 
void RestoreDisplayId ()
 
void SetNativeDisplayId (uint32 displayId)
 
uint32 GetModelForForm (ShapeshiftForm form, uint32 spellId)
 
virtual bool IsInWater () const
 
virtual bool IsUnderWater () const
 
void NearTeleportTo (Position &pos, bool casting=false, bool vehicleTeleport=false, bool withPet=false, bool removeTransport=false)
 
void NearTeleportTo (float x, float y, float z, float orientation, bool casting=false, bool vehicleTeleport=false, bool withPet=false, bool removeTransport=false)
 
void SetInFront (WorldObject const *target)
 
void SetFacingTo (float ori)
 
void SetFacingToObject (WorldObject *object, Milliseconds timed=0ms)
 
bool isInAccessiblePlaceFor (Creature const *c) const
 
bool isInFrontInMap (Unit const *target, float distance, float arc=M_PI) const
 
bool isInBackInMap (Unit const *target, float distance, float arc=M_PI) const
 
float GetCollisionHeight () const override
 Return collision height sent to client.
 
float GetCollisionWidth () const override
 this method gets the diameter of a Unit by DB if any value is defined, otherwise it gets the value by the DBC
 
float GetCollisionRadius () const override
 this method gets the radius of a Unit by DB if any value is defined, otherwise it gets the value by the DBC
 
void UpdateOrientation (float orientation)
 Only server-side orientation update, does not broadcast to client.
 
void UpdateHeight (float newZ)
 Only server-side height update, does not broadcast to client.
 
virtual bool UpdatePosition (float x, float y, float z, float ang, bool teleport=false)
 
bool UpdatePosition (const Position &pos, bool teleport=false)
 
void ProcessPositionDataChanged (PositionFullTerrainStatus const &data) override
 
virtual void ProcessTerrainStatusUpdate ()
 
bool IsVisible () const
 
void SetVisible (bool x)
 
void SetModelVisible (bool on)
 
uint32 GetPhaseByAuras () const
 
void SetPhaseMask (uint32 newPhaseMask, bool update) override
 
void UpdateObjectVisibility (bool forced=true, bool fromUpdate=false) override
 
void AddPointedBy (SafeUnitPointer *sup)
 
void RemovePointedBy (SafeUnitPointer *sup)
 
void SendAttackStateUpdate (CalcDamageInfo *damageInfo)
 
void SendAttackStateUpdate (uint32 HitInfo, Unit *target, uint8 SwingType, SpellSchoolMask damageSchoolMask, uint32 Damage, uint32 AbsorbDamage, uint32 Resist, VictimState TargetState, uint32 BlockedAmount)
 
void SendComboPoints ()
 
void SendPlaySpellVisual (uint32 id)
 
void SendPlaySpellImpact (ObjectGuid guid, uint32 id)
 
void SendPetActionFeedback (uint8 msg) const
 -------—Pet responses methods--------------—
 
void SendPetActionSound (PetAction action) const
 
void SendPetDismissSound () const
 
void SendPetAIReaction (ObjectGuid guid) const
 
void SendPeriodicAuraLog (SpellPeriodicAuraLogInfo *pInfo)
 
void SendSpellNonMeleeDamageLog (SpellNonMeleeDamage *log)
 
void SendSpellNonMeleeReflectLog (SpellNonMeleeDamage *log, Unit *attacker)
 
void SendSpellNonMeleeDamageLog (Unit *target, SpellInfo const *spellInfo, uint32 Damage, SpellSchoolMask damageSchoolMask, uint32 AbsorbedDamage, uint32 Resist, bool PhysicalDamage, uint32 Blocked, bool CriticalHit=false, bool Split=false)
 
void SendSpellMiss (Unit *target, uint32 spellID, SpellMissInfo missInfo)
 
void SendSpellDamageResist (Unit *target, uint32 spellId)
 
void SendSpellDamageImmune (Unit *target, uint32 spellId)
 
void SendTameFailure (uint8 result)
 
void SendTeleportPacket (Position &pos)
 
void SendMovementFlagUpdate (bool self=false)
 
void SendMovementWaterWalking (Player *sendTo)
 
void SendMovementFeatherFall (Player *sendTo)
 
void SendMovementHover (Player *sendTo)
 
void SendClearTarget ()
 
void ExecuteDelayedUnitRelocationEvent ()
 
void ExecuteDelayedUnitAINotifyEvent ()
 
void BuildHeartBeatMsg (WorldPacket *data) const
 
void BuildMovementPacket (ByteBuffer *data) const
 
void OutDebugInfo () const
 
std::string GetDebugInfo () const override
 
- Public Member Functions inherited from WorldObject
 ~WorldObject () override
 
void _Create (ObjectGuid::LowType guidlow, HighGuid guidhigh, uint32 phaseMask)
 
void AddToWorld () override
 
void RemoveFromWorld () override
 
void GetNearPoint2D (WorldObject const *searcher, float &x, float &y, float distance, float absAngle, Position const *startPos=nullptr) const
 
void GetNearPoint2D (float &x, float &y, float distance, float absAngle, Position const *startPos=nullptr) const
 
void GetNearPoint (WorldObject const *searcher, float &x, float &y, float &z, float searcher_size, float distance2d, float absAngle, float controlZ=0, Position const *startPos=nullptr) const
 
void GetVoidClosePoint (float &x, float &y, float &z, float size, float distance2d=0, float relAngle=0, float controlZ=0) const
 
bool GetClosePoint (float &x, float &y, float &z, float size, float distance2d=0, float angle=0, WorldObject const *forWho=nullptr, bool force=false) const
 
void MovePosition (Position &pos, float dist, float angle)
 
Position GetNearPosition (float dist, float angle)
 
void MovePositionToFirstCollision (Position &pos, float dist, float angle)
 
Position GetFirstCollisionPosition (float startX, float startY, float startZ, float destX, float destY)
 
Position GetFirstCollisionPosition (float destX, float destY, float destZ)
 
Position GetFirstCollisionPosition (float dist, float angle)
 
Position GetRandomNearPosition (float radius)
 
void GetContactPoint (WorldObject const *obj, float &x, float &y, float &z, float distance2d=CONTACT_DISTANCE) const
 
void GetChargeContactPoint (WorldObject const *obj, float &x, float &y, float &z, float distance2d=CONTACT_DISTANCE) const
 
float GetObjectSize () const
 
void UpdateGroundPositionZ (float x, float y, float &z) const
 
void UpdateAllowedPositionZ (float x, float y, float &z, float *groundZ=nullptr) const
 
void GetRandomPoint (const Position &srcPos, float distance, float &rand_x, float &rand_y, float &rand_z) const
 
Position GetRandomPoint (const Position &srcPos, float distance) const
 
uint32 GetInstanceId () const
 
uint32 GetPhaseMask () const
 
bool InSamePhase (WorldObject const *obj) const
 
bool InSamePhase (uint32 phasemask) const
 
uint32 GetZoneId () const
 
uint32 GetAreaId () const
 
void GetZoneAndAreaId (uint32 &zoneid, uint32 &areaid) const
 
bool IsOutdoors () const
 
LiquidData const & GetLiquidData () const
 
InstanceScriptGetInstanceScript () const
 
std::string const & GetName () const
 
void SetName (std::string const &newname)
 
virtual std::string const & GetNameForLocaleIdx (LocaleConstant) const
 
float GetDistance (WorldObject const *obj) const
 
float GetDistance (const Position &pos) const
 
float GetDistance (float x, float y, float z) const
 
float GetDistance2d (WorldObject const *obj) const
 
float GetDistance2d (float x, float y) const
 
float GetDistanceZ (WorldObject const *obj) const
 
bool IsSelfOrInSameMap (WorldObject const *obj) const
 
bool IsInMap (WorldObject const *obj) const
 
bool IsWithinDist3d (float x, float y, float z, float dist) const
 
bool IsWithinDist3d (const Position *pos, float dist) const
 
bool IsWithinDist2d (float x, float y, float dist) const
 
bool IsWithinDist2d (const Position *pos, float dist) const
 
virtual bool IsWithinSightRange (Position const &pos, float dist) const
 
bool IsWithinDist (WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
 
bool IsWithinDistInMap (WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
 
bool IsWithinLOS (float x, float y, float z, VMAP::ModelIgnoreFlags ignoreFlags=VMAP::ModelIgnoreFlags::Nothing, LineOfSightChecks checks=LINEOFSIGHT_ALL_CHECKS) const
 
bool IsWithinLOSInMap (WorldObject const *obj, VMAP::ModelIgnoreFlags ignoreFlags=VMAP::ModelIgnoreFlags::Nothing, LineOfSightChecks checks=LINEOFSIGHT_ALL_CHECKS, Optional< float > collisionHeight={ }, Optional< float > combatReach={ }) const
 
Position GetHitSpherePointFor (Position const &dest, Optional< float > collisionHeight={ }, Optional< float > combatReach={ }) const
 
void GetHitSpherePointFor (Position const &dest, float &x, float &y, float &z, Optional< float > collisionHeight={ }, Optional< float > combatReach={ }) const
 
bool GetDistanceOrder (WorldObject const *obj1, WorldObject const *obj2, bool is3D=true) const
 
bool IsInRange (WorldObject const *obj, float minRange, float maxRange, bool is3D=true) const
 
bool IsInRange2d (float x, float y, float minRange, float maxRange) const
 
bool IsInRange3d (float x, float y, float z, float minRange, float maxRange) const
 
bool isInFront (WorldObject const *target, float arc=M_PI) const
 
bool isInBack (WorldObject const *target, float arc=M_PI) const
 
bool IsInBetween (WorldObject const *obj1, WorldObject const *obj2, float size=0) const
 
virtual void SendMessageToSet (WorldPacket const *data, bool self) const
 
virtual void SendMessageToSetInRange (WorldPacket const *data, float dist, bool self) const
 
virtual void SendMessageToSet (WorldPacket const *data, Player const *skipped_rcvr) const
 
void PlayDistanceSound (uint32 sound_id, Player *target=nullptr)
 
void PlayDirectSound (uint32 sound_id, Player *target=nullptr)
 
void PlayRadiusSound (uint32 sound_id, float radius)
 
void PlayDirectMusic (uint32 music_id, Player *target=nullptr)
 
void PlayRadiusMusic (uint32 music_id, float radius)
 
template<typename Worker >
void DoForAllVisiblePlayers (Worker &&worker)
 
template<typename Worker >
void DoForAllVisibleWorldObjects (Worker &&worker)
 
void DestroyForVisiblePlayers ()
 
void SendObjectDeSpawnAnim (ObjectGuid guid)
 
virtual void SaveRespawnTime ()
 
void AddObjectToRemoveList ()
 
float GetGridActivationRange () const
 
float GetVisibilityRange () const
 
virtual float GetSightRange (WorldObject const *target=nullptr) const
 
bool CanSeeOrDetect (WorldObject const *obj, bool ignoreStealth=false, bool distanceCheck=false, bool checkAlert=false) const
 
void SendPlayMusic (uint32 Music, bool OnlySelf)
 
virtual void SetMap (Map *map)
 
virtual void ResetMap ()
 
MapGetMap () const
 
MapFindMap () const
 
void SetZoneScript ()
 
void ClearZoneScript ()
 
ZoneScriptGetZoneScript () const
 
TempSummonSummonCreature (uint32 id, const Position &pos, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false) const
 
TempSummonSummonCreature (uint32 id, float x, float y, float z, float ang=0, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false)
 
GameObjectSummonGameObject (uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime, bool checkTransport=true, GOSummonType summonType=GO_SUMMON_TIMED_OR_CORPSE_DESPAWN)
 
CreatureSummonTrigger (float x, float y, float z, float ang, uint32 dur, bool setLevel=false, CreatureAI *(*GetAI)(Creature *)=nullptr)
 
void SummonCreatureGroup (uint8 group, std::list< TempSummon * > *list=nullptr)
 
void SummonGameObjectGroup (uint8 group, std::list< GameObject * > *list=nullptr)
 
CreatureFindNearestCreature (uint32 entry, float range, bool alive=true) const
 
GameObjectFindNearestGameObject (uint32 entry, float range, bool onlySpawned=false) const
 
GameObjectFindNearestGameObjectOfType (GameobjectTypes type, float range) const
 
PlayerSelectNearestPlayer (float distance=0) const
 
void GetGameObjectListWithEntryInGrid (std::list< GameObject * > &lList, uint32 uiEntry, float fMaxSearchRange) const
 
void GetGameObjectListWithEntryInGrid (std::list< GameObject * > &gameobjectList, std::vector< uint32 > const &entries, float maxSearchRange) const
 
void GetCreatureListWithEntryInGrid (std::list< Creature * > &lList, uint32 uiEntry, float fMaxSearchRange) const
 
void GetCreatureListWithEntryInGrid (std::list< Creature * > &creatureList, std::vector< uint32 > const &entries, float maxSearchRange) const
 
void GetDeadCreatureListInGrid (std::list< Creature * > &lList, float maxSearchRange, bool alive=false) const
 
virtual void UpdateObjectVisibilityOnCreate ()
 
void BuildUpdate (UpdateDataMapType &data_map) override
 
void GetCreaturesWithEntryInRange (std::list< Creature * > &creatureList, float radius, uint32 entry)
 
void SetPositionDataUpdate ()
 
void UpdatePositionData ()
 
void AddToObjectUpdate () override
 
void RemoveFromObjectUpdate () override
 
void AddToNotify (uint16 f)
 
void RemoveFromNotify (uint16 f)
 
bool isNeedNotify (uint16 f) const
 
uint16 GetNotifyFlags () const
 
bool NotifyExecuted (uint16 f) const
 
void SetNotified (uint16 f)
 
void ResetAllNotifies ()
 
bool isActiveObject () const
 
void setActive (bool isActiveObject)
 
VisibilityDistanceType GetVisibilityOverrideType () const
 
bool IsVisibilityOverridden () const
 
bool IsZoneWideVisible () const
 
bool IsFarVisible () const
 
float GetVisibilityOverrideDistance () const
 
void SetVisibilityDistanceOverride (VisibilityDistanceType type)
 
bool IsInWintergrasp () const
 
TransportGetTransport () const
 
float GetTransOffsetX () const
 
float GetTransOffsetY () const
 
float GetTransOffsetZ () const
 
float GetTransOffsetO () const
 
uint32 GetTransTime () const
 
int8 GetTransSeat () const
 
void SetTransport (Transport *t)
 
virtual float GetStationaryX () const
 
virtual float GetStationaryY () const
 
virtual float GetStationaryZ () const
 
virtual float GetStationaryO () const
 
float GetMapWaterOrGroundLevel (Position pos, float *ground=nullptr) const
 
float GetMapWaterOrGroundLevel (float x, float y, float z, float *ground=nullptr) const
 
float GetMapHeight (float x, float y, float z, bool vmap=true, float distanceToSearch=50.0f) const
 
float GetFloorZ () const
 
float GetMinHeightInWater () const
 Get the minimum height of a object that should be in water to start floating/swim.
 
void AddAllowedLooter (ObjectGuid guid)
 
void ResetAllowedLooters ()
 
void SetAllowedLooters (GuidUnorderedSet const looters)
 
bool HasAllowedLooter (ObjectGuid guid) const
 
GuidUnorderedSet const & GetAllowedLooters () const
 
void RemoveAllowedLooter (ObjectGuid guid)
 
virtual bool IsUpdateNeeded ()
 
bool CanBeAddedToMapUpdateList ()
 
std::string GetDebugInfo () const override
 
ObjectVisibilityContainerGetObjectVisibilityContainer ()
 
ObjectVisibilityContainer const & GetObjectVisibilityContainer () const
 
- Public Member Functions inherited from Object
virtual ~Object ()
 
bool IsInWorld () const
 
ObjectGuid GetGUID () const
 
PackedGuid const & GetPackGUID () const
 
uint32 GetEntry () const
 
void SetEntry (uint32 entry)
 
float GetObjectScale () const
 
virtual void SetObjectScale (float scale)
 
bool HasDynamicFlag (uint32 flag) const
 
virtual void SetDynamicFlag (uint32 flag)
 
virtual void RemoveDynamicFlag (uint32 flag)
 
TypeID GetTypeId () const
 
bool isType (uint16 mask) const
 
virtual void BuildCreateUpdateBlockForPlayer (UpdateData *data, Player *target)
 
void SendUpdateToPlayer (Player *player)
 
void BuildValuesUpdateBlockForPlayer (UpdateData *data, Player *target)
 
void BuildOutOfRangeUpdateBlock (UpdateData *data) const
 
void BuildMovementUpdateBlock (UpdateData *data, uint32 flags=0) const
 
virtual void DestroyForPlayer (Player *target, bool onDeath=false) const
 
int32 GetInt32Value (uint16 index) const
 
uint32 GetUInt32Value (uint16 index) const
 
uint64 GetUInt64Value (uint16 index) const
 
float GetFloatValue (uint16 index) const
 
uint8 GetByteValue (uint16 index, uint8 offset) const
 
uint16 GetUInt16Value (uint16 index, uint8 offset) const
 
ObjectGuid GetGuidValue (uint16 index) const
 
void SetInt32Value (uint16 index, int32 value)
 
void SetUInt32Value (uint16 index, uint32 value)
 
void UpdateUInt32Value (uint16 index, uint32 value)
 
void SetUInt64Value (uint16 index, uint64 value)
 
void SetFloatValue (uint16 index, float value)
 
void SetByteValue (uint16 index, uint8 offset, uint8 value)
 
void SetUInt16Value (uint16 index, uint8 offset, uint16 value)
 
void SetInt16Value (uint16 index, uint8 offset, int16 value)
 
void SetGuidValue (uint16 index, ObjectGuid value)
 
void SetStatFloatValue (uint16 index, float value)
 
void SetStatInt32Value (uint16 index, int32 value)
 
bool AddGuidValue (uint16 index, ObjectGuid value)
 
bool RemoveGuidValue (uint16 index, ObjectGuid value)
 
void ApplyModUInt32Value (uint16 index, int32 val, bool apply)
 
void ApplyModInt32Value (uint16 index, int32 val, bool apply)
 
void ApplyModUInt64Value (uint16 index, int32 val, bool apply)
 
void ApplyModPositiveFloatValue (uint16 index, float val, bool apply)
 
void ApplyModSignedFloatValue (uint16 index, float val, bool apply)
 
void SetFlag (uint16 index, uint32 newFlag)
 
void RemoveFlag (uint16 index, uint32 oldFlag)
 
void ToggleFlag (uint16 index, uint32 flag)
 
bool HasFlag (uint16 index, uint32 flag) const
 
void ApplyModFlag (uint16 index, uint32 flag, bool apply)
 
void SetByteFlag (uint16 index, uint8 offset, uint8 newFlag)
 
void RemoveByteFlag (uint16 index, uint8 offset, uint8 newFlag)
 
bool HasByteFlag (uint16 index, uint8 offset, uint8 flag) const
 
void SetFlag64 (uint16 index, uint64 newFlag)
 
void RemoveFlag64 (uint16 index, uint64 oldFlag)
 
void ToggleFlag64 (uint16 index, uint64 flag)
 
bool HasFlag64 (uint16 index, uint64 flag) const
 
void ApplyModFlag64 (uint16 index, uint64 flag, bool apply)
 
void ClearUpdateMask (bool remove)
 
uint16 GetValuesCount () const
 
virtual bool hasQuest (uint32) const
 
virtual bool hasInvolvedQuest (uint32) const
 
void BuildFieldsUpdate (Player *, UpdateDataMapType &)
 
void SetFieldNotifyFlag (uint16 flag)
 
void RemoveFieldNotifyFlag (uint16 flag)
 
void ForceValuesUpdateAtIndex (uint32)
 
bool IsPlayer () const
 
PlayerToPlayer ()
 
Player const * ToPlayer () const
 
bool IsCreature () const
 
CreatureToCreature ()
 
Creature const * ToCreature () const
 
bool IsUnit () const
 
UnitToUnit ()
 
Unit const * ToUnit () const
 
bool IsGameObject () const
 
GameObjectToGameObject ()
 
GameObject const * ToGameObject () const
 
bool IsCorpse () const
 
CorpseToCorpse ()
 
Corpse const * ToCorpse () const
 
bool IsDynamicObject () const
 
DynamicObjectToDynObject ()
 
DynamicObject const * ToDynObject () const
 
bool IsItem () const
 
virtual void Heartbeat ()
 
template<typename... T>
bool EntryEquals (T... entries) const
 
- Public Member Functions inherited from WorldLocation
 WorldLocation (uint32 _mapId=MAPID_INVALID, float x=0.f, float y=0.f, float z=0.f, float o=0.f)
 
 WorldLocation (uint32 mapId, Position const &position)
 
void WorldRelocate (const WorldLocation &loc)
 
void WorldRelocate (uint32 mapId=MAPID_INVALID, float x=0.f, float y=0.f, float z=0.f, float o=0.f)
 
void SetMapId (uint32 mapId)
 
uint32 GetMapId () const
 
void GetWorldLocation (uint32 &mapId, float &x, float &y) const
 
void GetWorldLocation (uint32 &mapId, float &x, float &y, float &z) const
 
void GetWorldLocation (uint32 &mapId, float &x, float &y, float &z, float &o) const
 
void GetWorldLocation (WorldLocation *location) const
 
WorldLocation GetWorldLocation () const
 
std::string GetDebugInfo () const
 
- Public Member Functions inherited from Position
 Position (float x=0, float y=0, float z=0, float o=0)
 
 Position (Position const &loc)
 
 Position (Position &&)=default
 
Positionoperator= (const Position &)=default
 
Positionoperator= (Position &&)=default
 
bool operator== (Position const &a) const
 
bool operator!= (Position const &a)
 
bool operator!= (Position const &a) const
 
 operator G3D::Vector3 () const
 
void Relocate (float x, float y)
 
void Relocate (float x, float y, float z)
 
void Relocate (float x, float y, float z, float orientation)
 
void Relocate (const Position &pos)
 
void Relocate (const Position *pos)
 
void RelocatePolarOffset (float angle, float dist, float z=0.0f)
 
void RelocateOffset (const Position &offset)
 
void SetOrientation (float orientation)
 
float GetPositionX () const
 
float GetPositionY () const
 
float GetPositionZ () const
 
float GetOrientation () const
 
void GetPosition (float &x, float &y) const
 
void GetPosition (float &x, float &y, float &z) const
 
void GetPosition (float &x, float &y, float &z, float &o) const
 
Position GetPosition () const
 
Position::PositionXYZStreamer PositionXYZStream ()
 
Position::PositionXYZOStreamer PositionXYZOStream ()
 
bool IsPositionValid () const
 
float GetExactDist2dSq (const float x, const float y) const
 
float GetExactDist2dSq (Position const &pos) const
 
float GetExactDist2dSq (Position const *pos) const
 
float GetExactDist2d (const float x, const float y) const
 
float GetExactDist2d (Position const &pos) const
 
float GetExactDist2d (Position const *pos) const
 
float GetExactDistSq (float x, float y, float z) const
 
float GetExactDistSq (Position const &pos) const
 
float GetExactDistSq (Position const *pos) const
 
float GetExactDist (float x, float y, float z) const
 
float GetExactDist (Position const &pos) const
 
float GetExactDist (Position const *pos) const
 
void GetPositionOffsetTo (const Position &endPos, Position &retOffset) const
 
Position GetPositionWithOffset (Position const &offset) const
 
float GetAngle (const Position *pos) const
 
float GetAngle (float x, float y) const
 
float GetAbsoluteAngle (float x, float y) const
 
float GetAbsoluteAngle (Position const &pos) const
 
float GetAbsoluteAngle (Position const *pos) const
 
float GetRelativeAngle (const Position *pos) const
 
float GetRelativeAngle (float x, float y) const
 
float ToAbsoluteAngle (float relAngle) const
 
void GetSinCos (float x, float y, float &vsin, float &vcos) const
 
bool IsInDist2d (float x, float y, float dist) const
 
bool IsInDist2d (const Position *pos, float dist) const
 
bool IsInDist (float x, float y, float z, float dist) const
 
bool IsInDist (const Position *pos, float dist) const
 
bool IsWithinBox (const Position &center, float xradius, float yradius, float zradius) const
 
bool HasInArc (float arcangle, const Position *pos, float targetRadius=0.0f) const
 
bool HasInLine (Position const *pos, float width) const
 
bool HasInLine (Position const *pos, float objSize, float width) const
 
std::string ToString () const
 

Static Public Member Functions

static void ApplyResilience (Unit const *victim, float *crit, int32 *damage, bool isCrit, CombatRating type)
 
static float GetEffectiveResistChance (Unit const *owner, SpellSchoolMask schoolMask, Unit const *victim, SpellInfo const *spellInfo=nullptr)
 
static uint32 DealDamage (Unit *attacker, Unit *victim, uint32 damage, CleanDamage const *cleanDamage=nullptr, DamageEffectType damagetype=DIRECT_DAMAGE, SpellSchoolMask damageSchoolMask=SPELL_SCHOOL_MASK_NORMAL, SpellInfo const *spellProto=nullptr, bool durabilityLoss=true, bool allowGM=false, Spell const *spell=nullptr)
 
static void DealDamageMods (Unit const *victim, uint32 &damage, uint32 *absorb)
 
static void Kill (Unit *killer, Unit *victim, bool durabilityLoss=true, WeaponAttackType attackType=BASE_ATTACK, SpellInfo const *spellProto=nullptr, Spell const *spell=nullptr)
 
static bool IsDamageReducedByArmor (SpellSchoolMask damageSchoolMask, SpellInfo const *spellInfo=nullptr, uint8 effIndex=MAX_SPELL_EFFECTS)
 
static uint32 CalcArmorReducedDamage (Unit const *attacker, Unit const *victim, const uint32 damage, SpellInfo const *spellInfo, uint8 attackerLevel=0, WeaponAttackType attackType=MAX_ATTACK)
 
static uint32 SpellCriticalDamageBonus (Unit const *caster, SpellInfo const *spellProto, uint32 damage, Unit const *victim)
 
static void ProcSkillsAndAuras (Unit *actor, Unit *victim, uint32 procAttacker, uint32 procVictim, uint32 procEx, uint32 amount, WeaponAttackType attType=BASE_ATTACK, SpellInfo const *procSpellInfo=nullptr, SpellInfo const *procAura=nullptr, int8 procAuraEffectIndex=-1, Spell const *procSpell=nullptr, DamageInfo *damageInfo=nullptr, HealInfo *healInfo=nullptr, uint32 procPhase=2)
 
static int32 DealHeal (Unit *healer, Unit *victim, uint32 addhealth)
 
static uint32 SpellCriticalHealingBonus (Unit const *caster, SpellInfo const *spellProto, uint32 damage, Unit const *victim)
 
static void CalcAbsorbResist (DamageInfo &dmgInfo, bool Splited=false)
 
static void CalcHealAbsorb (HealInfo &healInfo)
 
static bool IsImmuneMaskFully (SpellSchoolMask immuneMask, SpellSchoolMask schoolMask)
 
static void HandleSafeUnitPointersOnDelete (Unit *thisUnit)
 
- Static Public Member Functions inherited from Object
static ObjectGuid GetGUID (Object const *o)
 
- Static Public Member Functions inherited from Position
static float NormalizeOrientation (float o)
 

Public Attributes

uint32 m_extraAttacks
 
DualWieldMode _dualWieldMode
 
ControlSet m_Controlled
 
SafeUnitPointer m_movedByPlayer
 
ObjectGuid m_SummonSlot [MAX_SUMMON_SLOT]
 
ObjectGuid m_ObjectSlot [MAX_GAMEOBJECT_SLOT]
 
float m_modMeleeHitChance
 
float m_modRangedHitChance
 
float m_modSpellHitChance
 
int32 m_baseSpellCritChance
 
float m_modAttackSpeedPct [3]
 
SpellImmuneContainer m_spellImmune [MAX_SPELL_IMMUNITY]
 
uint32 m_lastSanctuaryTime
 
PetAuraSet m_petAuras
 
ObjectGuid LastCharmerGUID
 
bool IsAIEnabled
 
bool NeedChangeAI
 
bool m_ControlledByPlayer
 
bool m_CreatedByPlayer
 
std::set< SafeUnitPointer * > SafeUnitPointerSet
 
Position m_last_notify_position
 
uint32 m_last_notify_mstime
 
uint16 m_delayed_unit_relocation_timer
 
uint16 m_delayed_unit_ai_notify_timer
 
bool bRequestForcedVisibilityUpdate
 
Movement::MoveSplinemovespline
 
- Public Attributes inherited from WorldObject
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPESm_stealth
 
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPESm_stealthDetect
 
FlaggedValuesArray32< int32, uint32, InvisibilityType, TOTAL_INVISIBILITY_TYPESm_invisibility
 
FlaggedValuesArray32< int32, uint32, InvisibilityType, TOTAL_INVISIBILITY_TYPESm_invisibilityDetect
 
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPESm_serverSideVisibility
 
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPESm_serverSideVisibilityDetect
 
uint32 LastUsedScriptID
 
MovementInfo m_movementInfo
 
ALEEventProcessor * ALEEvents
 
EventProcessor m_Events
 
- Public Attributes inherited from Object
DataMap CustomData
 
- Public Attributes inherited from WorldLocation
uint32 m_mapId
 
- Public Attributes inherited from Position
float m_positionX = 0
 
float m_positionY = 0
 
float m_positionZ = 0
 
float m_orientation = 0
 

Protected Types

typedef std::list< DynamicObject * > DynObjectList
 
typedef GuidList GameObjectList
 
typedef std::map< ObjectGuid, float > CharmThreatMap
 

Protected Member Functions

 Unit ()
 
void BuildValuesUpdate (uint8 updateType, ByteBuffer *data, Player *target) override
 
void _UpdateSpells (uint32 time)
 
void _DeleteRemovedAuras ()
 
void _UpdateAutoRepeatSpell ()
 
bool CanSparringWith (Unit const *attacker) const
 
bool IsAlwaysVisibleFor (WorldObject const *seer) const override
 : Check if unit is eligible for sparring damages. Work only if attacker and victim are creatures.
 
bool IsAlwaysDetectableFor (WorldObject const *seer) const override
 
void SetFeared (bool apply, Unit *fearedBy=nullptr, bool isFear=false)
 
void SetConfused (bool apply)
 
void SetStunned (bool apply)
 
void SetRooted (bool apply, bool stun=false, bool logout=false)
 
void SendMoveRoot (bool state)
 
- Protected Member Functions inherited from WorldObject
 WorldObject ()
 
void SetLocationMapId (uint32 _mapId)
 
void SetLocationInstanceId (uint32 _instanceId)
 
virtual bool IsNeverVisible () const
 
virtual bool IsInvisibleDueToDespawn () const
 
- Protected Member Functions inherited from Object
 Object ()
 
void _InitValues ()
 
void _Create (ObjectGuid::LowType guidlow, uint32 entry, HighGuid guidhigh)
 
std::string _ConcatFields (uint16 startIndex, uint16 size) const
 
bool _LoadIntoDataField (std::string const &data, uint32 startOffset, uint32 count)
 
uint32 GetUpdateFieldData (Player const *target, uint32 *&flags) const
 
void BuildMovementUpdate (ByteBuffer *data, uint16 flags) const
 
void AddToObjectUpdateIfNeeded ()
 

Protected Attributes

UnitAIi_AI
 
UnitAIi_disabledAI
 
uint8 m_realRace
 
uint8 m_race
 
bool m_AutoRepeatFirstCast
 
int32 m_attackTimer [MAX_ATTACK]
 
float m_createStats [MAX_STATS]
 
AttackerSet m_attackers
 
Unitm_attacking
 
DeathState m_deathState
 
int32 m_procDeep
 
DynObjectList m_dynObj
 
GameObjectList m_gameObj
 
uint32 m_transform
 
Spellm_currentSpells [CURRENT_MAX_SPELL]
 
AuraMap m_ownedAuras
 
AuraApplicationMap m_appliedAuras
 
AuraList m_removedAuras
 
AuraMap::iterator m_auraUpdateIterator
 
uint32 m_removedAurasCount
 
AuraEffectList m_modAuras [TOTAL_AURAS]
 
AuraList m_scAuras
 
AuraApplicationList m_interruptableAuras
 
AuraStateAurasMap m_auraStateAuras
 
uint32 m_interruptMask
 
float m_auraFlatModifiersGroup [UNIT_MOD_END][MODIFIER_TYPE_FLAT_END]
 
float m_auraPctModifiersGroup [UNIT_MOD_END][MODIFIER_TYPE_PCT_END]
 
float m_weaponDamage [MAX_ATTACK][MAX_WEAPON_DAMAGE_RANGE][MAX_ITEM_PROTO_DAMAGES]
 
bool m_canModifyStats
 
VisibleAuraMap m_visibleAuras
 
float m_speed_rate [MAX_MOVE_TYPE]
 
CharmInfom_charmInfo
 
SharedVisionList m_sharedVision
 
MotionMasteri_motionMaster
 
uint32 m_reactiveTimer [MAX_REACTIVE]
 
int32 m_regenTimer
 
ThreatManager m_threatManager
 
CombatManager m_combatManager
 
CharmThreatMap _charmThreatInfo
 
Vehiclem_vehicle
 
Vehiclem_vehicleKit
 
uint32 m_unitTypeMask
 
LiquidTypeEntry const * _lastLiquid
 
bool m_applyResilience
 
bool _instantCast
 
- Protected Attributes inherited from WorldObject
std::string m_name
 
bool m_isActive
 
VisibilityDistanceType _visibilityDistanceOverrideType
 
ZoneScriptm_zoneScript
 
uint32 _zoneId
 
uint32 _areaId
 
float _floorZ
 
bool _outdoors
 
LiquidData _liquidData
 
bool _updatePositionData
 
Transportm_transport
 
- Protected Attributes inherited from Object
uint16 m_objectType
 
TypeID m_objectTypeId
 
uint16 m_updateFlag
 
union { 
 
   int32 *   m_int32Values 
 
   uint32 *   m_uint32Values 
 
   float *   m_floatValues 
 
};  
 
UpdateMask _changesMask
 
uint16 m_valuesCount
 
uint16 _fieldNotifyFlags
 
bool m_objectUpdated
 

Private Types

typedef std::unordered_map< uint64, BuildValuesCachedBufferValuesUpdateCache
 

Private Member Functions

bool HandleAuraRaidProcFromChargeWithValue (AuraEffect *triggeredByAura)
 
bool HandleAuraRaidProcFromCharge (AuraEffect *triggeredByAura)
 
void UpdateSplineMovement (uint32 t_diff)
 
void UpdateSplinePosition ()
 
float GetCombatRatingReduction (CombatRating cr) const
 
uint32 GetCombatRatingDamageReduction (CombatRating cr, float rate, float cap, uint32 damage) const
 
void PatchValuesUpdate (ByteBuffer &valuesUpdateBuf, BuildValuesCachePosPointers &posPointers, Player *target)
 
void InvalidateValuesUpdateCache ()
 
float processDummyAuras (float TakenTotalMod) const
 
void _addAttacker (Unit *pAttacker)
 
void _removeAttacker (Unit *pAttacker)
 

Private Attributes

uint32 m_state
 
uint32 m_CombatTimer
 
uint32 m_lastManaUse
 
Diminishing m_Diminishing
 
std::unordered_set< AbstractFollower * > m_followingMe
 
Unitm_comboTarget
 
int8 m_comboPoints
 
std::unordered_set< Unit * > m_ComboPointHolders
 
bool m_cleanupDone
 
bool m_duringRemoveFromWorld
 
uint32 _oldFactionId
 faction before charm
 
bool _isWalkingBeforeCharm
 Are we walking before we were charmed?
 
bool _isCombatDisallowed
 
uint32 _lastExtraAttackSpell
 
std::unordered_map< ObjectGuid, uint32extraAttacksTargets
 
ObjectGuid _lastDamagedTargetGuid
 
ValuesUpdateCache _valuesUpdateCache
 

Detailed Description

Member Typedef Documentation

◆ AttackerSet

typedef std::unordered_set<Unit*> Unit::AttackerSet

◆ AuraApplicationList

◆ AuraApplicationMap

◆ AuraApplicationMapBounds

typedef std::pair<AuraApplicationMap::const_iterator, AuraApplicationMap::const_iterator> Unit::AuraApplicationMapBounds

◆ AuraApplicationMapBoundsNonConst

typedef std::pair<AuraApplicationMap::iterator, AuraApplicationMap::iterator> Unit::AuraApplicationMapBoundsNonConst

◆ AuraApplicationProcContainer

typedef std::vector<std::pair<uint8 , AuraApplication*> > Unit::AuraApplicationProcContainer

◆ AuraEffectList

typedef std::vector<AuraEffect*> Unit::AuraEffectList

◆ AuraList

typedef std::list<Aura*> Unit::AuraList

◆ AuraMap

typedef std::multimap<uint32, Aura*> Unit::AuraMap

◆ AuraMapBounds

typedef std::pair<AuraMap::const_iterator, AuraMap::const_iterator> Unit::AuraMapBounds

◆ AuraMapBoundsNonConst

typedef std::pair<AuraMap::iterator, AuraMap::iterator> Unit::AuraMapBoundsNonConst

◆ AuraStateAurasMap

◆ AuraStateAurasMapBounds

typedef std::pair<AuraStateAurasMap::const_iterator, AuraStateAurasMap::const_iterator> Unit::AuraStateAurasMapBounds

◆ CharmThreatMap

typedef std::map<ObjectGuid, float> Unit::CharmThreatMap
protected

◆ ComboPointHolderSet

◆ ControlSet

typedef std::set<Unit*> Unit::ControlSet

◆ Diminishing

◆ DynObjectList

typedef std::list<DynamicObject*> Unit::DynObjectList
protected

◆ GameObjectList

typedef GuidList Unit::GameObjectList
protected

◆ PetAuraSet

typedef std::set<PetAura const*> Unit::PetAuraSet

◆ SpellImmuneContainer

typedef std::unordered_multimap<uint32 , uint32 > Unit::SpellImmuneContainer

◆ ValuesUpdateCache

typedef std::unordered_map<uint64 , BuildValuesCachedBuffer> Unit::ValuesUpdateCache
private

◆ VisibleAuraMap

Constructor & Destructor Documentation

◆ ~Unit()

Unit::~Unit ( )
override
460{
461 // set current spells as deletable
462 for (uint8 i = 0; i < CURRENT_MAX_SPELL; ++i)
463 if (m_currentSpells[i])
464 {
466 m_currentSpells[i] = nullptr;
467 }
468
470
471 delete i_motionMaster;
472 delete m_charmInfo;
473 delete movespline;
474
477 ASSERT(m_attackers.empty());
478
479 // pussywizard: clear m_sharedVision along with back references
480 if (!m_sharedVision.empty())
481 {
482 do
483 {
484 Player* p = *(m_sharedVision.begin());
485 p->m_isInSharedVisionOf.erase(this);
486 m_sharedVision.remove(p);
487 } while (!m_sharedVision.empty());
488 }
489
490 ASSERT(m_Controlled.empty());
491 ASSERT(m_appliedAuras.empty());
492 ASSERT(m_ownedAuras.empty());
493 ASSERT(m_removedAuras.empty());
494 ASSERT(m_gameObj.empty());
495 ASSERT(m_dynObj.empty());
496
497 if (m_movedByPlayer && m_movedByPlayer != this)
498 LOG_INFO("misc", "Unit::~Unit (A1)");
499
501}
std::uint8_t uint8
Definition Define.h:109
#define ASSERT
Definition Errors.h:68
#define LOG_INFO(filterType__,...)
Definition Log.h:166
#define CURRENT_MAX_SPELL
Definition Unit.h:562
Definition Player.h:1084
std::set< Unit * > m_isInSharedVisionOf
Definition Player.h:2370
void SetReferencedFromCurrent(bool yes)
Definition Spell.h:576
bool m_duringRemoveFromWorld
Definition Unit.h:2245
Spell * m_currentSpells[CURRENT_MAX_SPELL]
Definition Unit.h:2165
AuraList m_removedAuras
Definition Unit.h:2169
ControlSet m_Controlled
Definition Unit.h:2075
Movement::MoveSpline * movespline
Definition Unit.h:2115
CharmInfo * m_charmInfo
Definition Unit.h:2187
MotionMaster * i_motionMaster
Definition Unit.h:2190
void _DeleteRemovedAuras()
Definition Unit.cpp:4007
DynObjectList m_dynObj
Definition Unit.h:2159
SafeUnitPointer m_movedByPlayer
Definition Unit.h:2077
AttackerSet m_attackers
Definition Unit.h:2151
Unit * m_attacking
Definition Unit.h:2152
GameObjectList m_gameObj
Definition Unit.h:2162
AuraMap m_ownedAuras
Definition Unit.h:2167
AuraApplicationMap m_appliedAuras
Definition Unit.h:2168
static void HandleSafeUnitPointersOnDelete(Unit *thisUnit)
Definition Unit.cpp:4536
SharedVisionList m_sharedVision
Definition Unit.h:2188

References _DeleteRemovedAuras(), ASSERT, CURRENT_MAX_SPELL, HandleSafeUnitPointersOnDelete(), i_motionMaster, LOG_INFO, m_appliedAuras, m_attackers, m_attacking, m_charmInfo, m_Controlled, m_currentSpells, m_duringRemoveFromWorld, m_dynObj, m_gameObj, Player::m_isInSharedVisionOf, m_movedByPlayer, m_ownedAuras, m_removedAuras, m_sharedVision, movespline, and Spell::SetReferencedFromCurrent().

◆ Unit()

Unit::Unit ( )
explicitprotected
333 : WorldObject(),
334 m_movedByPlayer(nullptr),
336 IsAIEnabled(false),
337 NeedChangeAI(false),
339 m_CreatedByPlayer(false),
341 i_AI(nullptr),
342 i_disabledAI(nullptr),
343 m_realRace(0),
344 m_race(0),
346 m_procDeep(0),
348 i_motionMaster(new MotionMaster(this)),
349 m_regenTimer(0),
350 m_threatManager(this),
351 m_combatManager(this),
352 m_vehicle(nullptr),
353 m_vehicleKit(nullptr),
355 m_comboTarget(nullptr),
357{
358#ifdef _MSC_VER
359#pragma warning(default:4355)
360#endif
363
365
372
374
375 m_state = 0;
377
378 for (uint8 i = 0; i < CURRENT_MAX_SPELL; ++i)
379 m_currentSpells[i] = nullptr;
380
381 for (uint8 i = 0; i < MAX_SUMMON_SLOT; ++i)
382 m_SummonSlot[i].Clear();
383
384 for (uint8 i = 0; i < MAX_GAMEOBJECT_SLOT; ++i)
385 m_ObjectSlot[i].Clear();
386
388
389 m_interruptMask = 0;
390 m_transform = 0;
391 m_canModifyStats = false;
392
393 for (uint8 i = 0; i < UNIT_MOD_END; ++i)
394 {
399 }
400 // implement 50% base damage from offhand
402
403 for (uint8 i = 0; i < MAX_ATTACK; ++i)
404 {
407
408 m_weaponDamage[i][MINDAMAGE][1] = 0.f;
409 m_weaponDamage[i][MAXDAMAGE][1] = 0.f;
410 }
411
412 for (uint8 i = 0; i < MAX_STATS; ++i)
413 m_createStats[i] = 0.0f;
414
415 m_attacking = nullptr;
416 m_modMeleeHitChance = 0.0f;
418 m_modSpellHitChance = 0.0f;
420
421 m_CombatTimer = 0;
422 m_lastManaUse = 0;
423
424 for (uint8 i = 0; i < MAX_MOVE_TYPE; ++i)
425 m_speed_rate[i] = 1.0f;
426
427 m_charmInfo = nullptr;
428
429 // remove aurastates allowing special moves
430 for (uint8 i = 0; i < MAX_REACTIVE; ++i)
431 m_reactiveTimer[i] = 0;
432
433 m_cleanupDone = false;
435
437
438 m_last_notify_position.Relocate(-5000.0f, -5000.0f, -5000.0f, 0.0f);
443
444 m_applyResilience = false;
445 _instantCast = false;
446
447 _lastLiquid = nullptr;
448
449 _oldFactionId = 0;
450
451 _isWalkingBeforeCharm = false;
452 _isCombatDisallowed = false;
453
455}
@ TYPEID_UNIT
Definition ObjectGuid.h:35
@ TYPEMASK_UNIT
Definition ObjectGuid.h:49
@ SERVERSIDE_VISIBILITY_GHOST
Definition SharedDefines.h:1262
#define MAX_STATS
Definition SharedDefines.h:253
@ MAX_SUMMON_SLOT
Definition SharedDefines.h:3552
@ GHOST_VISIBILITY_ALIVE
Definition SharedDefines.h:1269
#define MAX_GAMEOBJECT_SLOT
Definition SharedDefines.h:3556
@ UNIT_MASK_NONE
Definition UnitDefines.h:158
#define MAX_MOVE_TYPE
Definition UnitDefines.h:367
@ BASE_VALUE
Definition Unit.h:127
@ TOTAL_VALUE
Definition Unit.h:128
@ MINDAMAGE
Definition Unit.h:141
@ MAXDAMAGE
Definition Unit.h:142
@ UNIT_MOD_DAMAGE_OFFHAND
Definition Unit.h:172
@ UNIT_MOD_END
Definition Unit.h:174
@ OFF_ATTACK
Definition Unit.h:216
@ MAX_ATTACK
Definition Unit.h:218
@ BASE_ATTACK
Definition Unit.h:215
@ RANGED_ATTACK
Definition Unit.h:217
#define BASE_MAXDAMAGE
Definition Unit.h:40
@ MAX_REACTIVE
Definition Unit.h:624
#define BASE_MINDAMAGE
Definition Unit.h:39
@ TOTAL_PCT
Definition Unit.h:135
@ BASE_PCT
Definition Unit.h:134
@ UPDATEFLAG_LIVING
Definition UpdateData.h:44
@ UPDATEFLAG_STATIONARY_POSITION
Definition UpdateData.h:45
void SetValue(FLAG_TYPE flag, T_VALUES value)
Definition Object.h:398
Definition MotionMaster.h:138
Definition MoveSpline.h:40
uint16 m_objectType
Definition Object.h:252
uint16 m_updateFlag
Definition Object.h:255
TypeID m_objectTypeId
Definition Object.h:254
uint32 m_reactiveTimer[MAX_REACTIVE]
Definition Unit.h:2192
uint32 m_lastSanctuaryTime
Definition Unit.h:2091
LiquidTypeEntry const * _lastLiquid
Definition Unit.h:2204
uint32 m_transform
Definition Unit.h:2163
uint32 m_CombatTimer
Definition Unit.h:2232
bool m_canModifyStats
Definition Unit.h:2182
bool _isCombatDisallowed
Definition Unit.h:2249
UnitAI * i_disabledAI
Definition Unit.h:2140
bool NeedChangeAI
Definition Unit.h:2099
uint32 m_state
Definition Unit.h:2231
int32 m_attackTimer[MAX_ATTACK]
Definition Unit.h:2147
float m_modAttackSpeedPct[3]
Definition Unit.h:2087
uint8 m_realRace
Definition Unit.h:2142
Vehicle * m_vehicle
Definition Unit.h:2200
uint8 m_race
Definition Unit.h:2143
UnitAI * i_AI
Definition Unit.h:2139
uint32 _lastExtraAttackSpell
Definition Unit.h:2251
bool _instantCast
Definition Unit.h:2208
ObjectGuid m_ObjectSlot[MAX_GAMEOBJECT_SLOT]
Definition Unit.h:2080
float m_createStats[MAX_STATS]
Definition Unit.h:2149
float m_auraFlatModifiersGroup[UNIT_MOD_END][MODIFIER_TYPE_FLAT_END]
Definition Unit.h:2179
float m_modRangedHitChance
Definition Unit.h:2083
DeathState m_deathState
Definition Unit.h:2154
uint32 m_unitTypeMask
Definition Unit.h:2203
uint32 m_removedAurasCount
Definition Unit.h:2171
Unit * m_comboTarget
Definition Unit.h:2240
AuraMap::iterator m_auraUpdateIterator
Definition Unit.h:2170
bool m_AutoRepeatFirstCast
Definition Unit.h:2145
uint16 m_delayed_unit_ai_notify_timer
Definition Unit.h:2111
int32 m_regenTimer
Definition Unit.h:2193
bool bRequestForcedVisibilityUpdate
Definition Unit.h:2112
bool m_ControlledByPlayer
Definition Unit.h:2101
uint32 m_last_notify_mstime
Definition Unit.h:2109
int8 m_comboPoints
Definition Unit.h:2241
ThreatManager m_threatManager
Definition Unit.h:2195
uint32 _oldFactionId
faction before charm
Definition Unit.h:2247
int32 m_baseSpellCritChance
Definition Unit.h:2085
float m_modMeleeHitChance
Definition Unit.h:2082
float m_weaponDamage[MAX_ATTACK][MAX_WEAPON_DAMAGE_RANGE][MAX_ITEM_PROTO_DAMAGES]
Definition Unit.h:2181
Position m_last_notify_position
Definition Unit.h:2108
Vehicle * m_vehicleKit
Definition Unit.h:2201
bool IsAIEnabled
Definition Unit.h:2098
DualWieldMode _dualWieldMode
Definition Unit.h:2073
bool m_applyResilience
Definition Unit.h:2207
uint32 m_interruptMask
Definition Unit.h:2177
int32 m_procDeep
Definition Unit.h:2156
CombatManager m_combatManager
Definition Unit.h:2196
float m_speed_rate[MAX_MOVE_TYPE]
Definition Unit.h:2185
float m_modSpellHitChance
Definition Unit.h:2084
ObjectGuid m_SummonSlot[MAX_SUMMON_SLOT]
Definition Unit.h:2079
bool m_cleanupDone
Definition Unit.h:2244
bool _isWalkingBeforeCharm
Are we walking before we were charmed?
Definition Unit.h:2248
bool m_CreatedByPlayer
Definition Unit.h:2102
uint16 m_delayed_unit_relocation_timer
Definition Unit.h:2110
uint32 m_lastManaUse
Definition Unit.h:2233
float m_auraPctModifiersGroup[UNIT_MOD_END][MODIFIER_TYPE_PCT_END]
Definition Unit.h:2180
WorldObject()
Definition Object.cpp:1056
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPES > m_serverSideVisibility
Definition Object.h:617
void Relocate(float x, float y)
Definition Position.h:77

References _dualWieldMode, _instantCast, _isCombatDisallowed, _isWalkingBeforeCharm, _lastExtraAttackSpell, _lastLiquid, _oldFactionId, Alive, AUTO, BASE_ATTACK, BASE_MAXDAMAGE, BASE_MINDAMAGE, BASE_PCT, BASE_VALUE, bRequestForcedVisibilityUpdate, CURRENT_MAX_SPELL, GHOST_VISIBILITY_ALIVE, m_applyResilience, m_attacking, m_attackTimer, m_auraFlatModifiersGroup, m_auraPctModifiersGroup, m_auraUpdateIterator, m_baseSpellCritChance, m_canModifyStats, m_charmInfo, m_cleanupDone, m_CombatTimer, m_createStats, m_currentSpells, m_deathState, m_delayed_unit_ai_notify_timer, m_delayed_unit_relocation_timer, m_duringRemoveFromWorld, m_interruptMask, m_last_notify_mstime, m_last_notify_position, m_lastManaUse, m_modAttackSpeedPct, m_modMeleeHitChance, m_modRangedHitChance, m_modSpellHitChance, m_ObjectSlot, Object::m_objectType, Object::m_objectTypeId, m_ownedAuras, m_reactiveTimer, WorldObject::m_serverSideVisibility, m_speed_rate, m_state, m_SummonSlot, m_transform, Object::m_updateFlag, m_weaponDamage, MAX_ATTACK, MAX_GAMEOBJECT_SLOT, MAX_MOVE_TYPE, MAX_REACTIVE, MAX_STATS, MAX_SUMMON_SLOT, MAXDAMAGE, MINDAMAGE, OFF_ATTACK, RANGED_ATTACK, Position::Relocate(), SERVERSIDE_VISIBILITY_GHOST, FlaggedValuesArray32< T_VALUES, T_FLAGS, FLAG_TYPE, ARRAY_SIZE >::SetValue(), TOTAL_PCT, TOTAL_VALUE, TYPEID_UNIT, TYPEMASK_UNIT, UNIT_MOD_DAMAGE_OFFHAND, UNIT_MOD_END, UPDATEFLAG_LIVING, and UPDATEFLAG_STATIONARY_POSITION.

Member Function Documentation

◆ _addAttacker()

void Unit::_addAttacker ( Unit pAttacker)
inlineprivate
2227{ m_attackers.insert(pAttacker); }

References m_attackers.

Referenced by Attack().

◆ _AddAura()

void Unit::_AddAura ( UnitAura aura,
Unit caster 
)
4694{
4696 m_ownedAuras.insert(AuraMap::value_type(aura->GetId(), aura));
4697
4698 _RemoveNoStackAurasDueToAura(aura, true);
4699
4700 if (aura->IsRemoved())
4701 return;
4702
4704 if (aura->IsSingleTarget())
4705 {
4706 ASSERT((IsInWorld() && !IsDuringRemoveFromWorld()) || (aura->GetCasterGUID() == GetGUID()));
4707 /* @HACK: Player is not in world during loading auras.
4708 * Single target auras are not saved or loaded from database
4709 * but may be created as a result of aura links (player mounts with passengers)
4710 */
4711
4712 // register single target aura
4713 caster->GetSingleCastAuras().push_back(aura);
4714 // remove other single target auras
4715 Unit::AuraList& scAuras = caster->GetSingleCastAuras();
4716 for (Unit::AuraList::iterator itr = scAuras.begin(); itr != scAuras.end();)
4717 {
4718 if ((*itr) != aura &&
4719 (*itr)->IsSingleTargetWith(aura))
4720 {
4721 (*itr)->Remove();
4722 itr = scAuras.begin();
4723 }
4724 else
4725 ++itr;
4726 }
4727 }
4728}
@ SPELL_AURA_CONTROL_VEHICLE
Definition SpellAuraDefines.h:299
ObjectGuid GetCasterGUID() const
Definition SpellAuras.h:105
bool IsRemoved() const
Definition SpellAuras.h:162
bool IsSingleTargetWith(Aura const *aura) const
Definition SpellAuras.cpp:1088
uint32 GetId() const
Definition SpellAuras.cpp:405
bool HasEffectType(AuraType type) const
Definition SpellAuras.cpp:1168
SpellInfo const * GetSpellInfo() const
Definition SpellAuras.h:100
void SetIsSingleTarget(bool val)
Definition SpellAuras.h:167
bool IsSingleTarget() const
Definition SpellAuras.h:165
bool IsInWorld() const
Definition Object.h:109
ObjectGuid GetGUID() const
Definition Object.h:115
bool IsSingleTarget() const
Definition SpellInfo.cpp:1384
void _RemoveNoStackAurasDueToAura(Aura *aura, bool owned)
Definition Unit.cpp:4946
std::list< Aura * > AuraList
Definition Unit.h:681
bool IsDuringRemoveFromWorld() const
Definition Unit.h:703
AuraList & GetSingleCastAuras()
Definition Unit.h:1429

References _RemoveNoStackAurasDueToAura(), ASSERT, Aura::GetCasterGUID(), Object::GetGUID(), Aura::GetId(), GetSingleCastAuras(), Aura::GetSpellInfo(), Aura::HasEffectType(), IsDuringRemoveFromWorld(), Object::IsInWorld(), Aura::IsRemoved(), Aura::IsSingleTarget(), SpellInfo::IsSingleTarget(), Aura::IsSingleTargetWith(), m_cleanupDone, m_ownedAuras, Aura::SetIsSingleTarget(), and SPELL_AURA_CONTROL_VEHICLE.

Referenced by UnitAura::UnitAura().

◆ _ApplyAllAuraStatMods()

void Unit::_ApplyAllAuraStatMods ( )
5778{
5779 for (AuraApplicationMap::iterator i = m_appliedAuras.begin(); i != m_appliedAuras.end(); ++i)
5780 (*i).second->GetBase()->HandleAllEffects(i->second, AURA_EFFECT_HANDLE_STAT, true);
5781}
@ AURA_EFFECT_HANDLE_STAT
Definition SpellAuraDefines.h:46

References AURA_EFFECT_HANDLE_STAT, and m_appliedAuras.

Referenced by Player::_ApplyAllStatBonuses().

◆ _ApplyAura()

void Unit::_ApplyAura ( AuraApplication aurApp,
uint8  effMask 
)
4785{
4786 Aura* aura = aurApp->GetBase();
4787
4788 _RemoveNoStackAurasDueToAura(aura, false);
4789
4790 if (aurApp->GetRemoveMode())
4791 return;
4792
4793 Unit* caster = aura->GetCaster();
4794
4795 // Update target aura state flag
4796 SpellInfo const* spellInfo = aura->GetSpellInfo();
4797 if (AuraStateType aState = spellInfo->GetAuraState())
4798 {
4799 uint32 aStateMask = (1 << (aState - 1));
4800 // force update so the new caster registers it
4801 if ((aStateMask & PER_CASTER_AURA_STATE_MASK) && HasFlag(UNIT_FIELD_AURASTATE, aStateMask))
4803 else
4804 ModifyAuraState(aState, true);
4805 }
4806
4807 if (aurApp->GetRemoveMode())
4808 return;
4809
4810 // Sitdown on apply aura req seated
4813
4814 if (aurApp->GetRemoveMode())
4815 return;
4816
4817 aura->HandleAuraSpecificMods(aurApp, caster, true, false);
4818
4819 // apply effects of the aura
4820 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
4821 {
4822 if (effMask & 1 << i && (!aurApp->GetRemoveMode()))
4823 aurApp->_HandleEffect(i, true);
4824 }
4825
4826 sScriptMgr->OnAuraApply(this, aura);
4827}
#define MAX_SPELL_EFFECTS
Definition DBCStructure.h:1637
std::uint32_t uint32
Definition Define.h:107
#define sScriptMgr
Definition ScriptMgr.h:735
#define PER_CASTER_AURA_STATE_MASK
Definition SharedDefines.h:1306
AuraStateType
Definition SharedDefines.h:1276
@ AURA_INTERRUPT_FLAG_NOT_SEATED
Definition SpellDefines.h:61
@ UNIT_STAND_STATE_SIT
Definition UnitDefines.h:36
@ UNIT_FIELD_AURASTATE
Definition UpdateFields.h:119
void _HandleEffect(uint8 effIndex, bool apply)
Definition SpellAuras.cpp:161
Aura * GetBase() const
Definition SpellAuras.h:62
AuraRemoveMode GetRemoveMode() const
Definition SpellAuras.h:73
Definition SpellAuras.h:87
Unit * GetCaster() const
Definition SpellAuras.cpp:410
void HandleAuraSpecificMods(AuraApplication const *aurApp, Unit *caster, bool apply, bool onReapply)
Definition SpellAuras.cpp:1211
bool HasFlag(uint16 index, uint32 flag) const
Definition Object.cpp:871
void ForceValuesUpdateAtIndex(uint32)
Definition Object.cpp:2099
Definition SpellInfo.h:340
AuraStateType GetAuraState() const
Definition SpellInfo.cpp:1967
uint32 AuraInterruptFlags
Definition SpellInfo.h:377
Definition Unit.h:664
void ModifyAuraState(AuraStateType flag, bool apply)
Definition Unit.cpp:7607
void SetStandState(uint8 state)
Definition Unit.cpp:13130
bool IsSitState() const
Definition Unit.cpp:13106

References AuraApplication::_HandleEffect(), _RemoveNoStackAurasDueToAura(), AURA_INTERRUPT_FLAG_NOT_SEATED, SpellInfo::AuraInterruptFlags, Object::ForceValuesUpdateAtIndex(), SpellInfo::GetAuraState(), AuraApplication::GetBase(), Aura::GetCaster(), AuraApplication::GetRemoveMode(), Aura::GetSpellInfo(), Aura::HandleAuraSpecificMods(), Object::HasFlag(), IsSitState(), MAX_SPELL_EFFECTS, ModifyAuraState(), PER_CASTER_AURA_STATE_MASK, SetStandState(), sScriptMgr, UNIT_FIELD_AURASTATE, and UNIT_STAND_STATE_SIT.

Referenced by _ApplyAuraEffect().

◆ _ApplyAuraEffect()

void Unit::_ApplyAuraEffect ( Aura aura,
uint8  effIndex 
)
4771{
4772 ASSERT(aura);
4773 ASSERT(aura->HasEffect(effIndex));
4775 ASSERT(aurApp);
4776 if (!aurApp->GetEffectMask())
4777 _ApplyAura(aurApp, 1 << effIndex);
4778 else
4779 aurApp->_HandleEffect(effIndex, true);
4780}
Definition SpellAuras.h:37
uint8 GetEffectMask() const
Definition SpellAuras.h:66
bool HasEffect(uint8 effIndex) const
Definition SpellAuras.h:174
const AuraApplication * GetApplicationOfTarget(ObjectGuid guid) const
Definition SpellAuras.h:184
void _ApplyAura(AuraApplication *aurApp, uint8 effMask)
Definition Unit.cpp:4784

References _ApplyAura(), AuraApplication::_HandleEffect(), ASSERT, Aura::GetApplicationOfTarget(), AuraApplication::GetEffectMask(), Object::GetGUID(), and Aura::HasEffect().

◆ _CreateAuraApplication()

AuraApplication * Unit::_CreateAuraApplication ( Aura aura,
uint8  effMask 
)
4733{
4734 // can't apply aura on unit which is going to be deleted - to not create a memory leak
4736 // aura musn't be removed
4737 ASSERT(!aura->IsRemoved());
4738
4739 // aura mustn't be already applied on target
4740 ASSERT (!aura->IsAppliedOnTarget(GetGUID()) && "Unit::_CreateAuraApplication: aura musn't be applied on target");
4741
4742 SpellInfo const* aurSpellInfo = aura->GetSpellInfo();
4743 uint32 aurId = aurSpellInfo->Id;
4744
4745 // ghost spell check, allow apply any auras at player loading in ghost mode (will be cleanup after load)
4746 // Xinef: Added IsAllowingDeadTarget check
4747 if (!IsAlive() && !aurSpellInfo->IsDeathPersistent() && !aurSpellInfo->IsAllowingDeadTarget() && (!IsPlayer() || !ToPlayer()->GetSession()->PlayerLoading()))
4748 return nullptr;
4749
4750 Unit* caster = aura->GetCaster();
4751
4752 AuraApplication* aurApp = new AuraApplication(this, caster, aura, effMask);
4753 m_appliedAuras.insert(AuraApplicationMap::value_type(aurId, aurApp));
4754
4755 // xinef: do not insert our application to interruptible list if application target is not the owner (area auras)
4756 // xinef: even if it gets removed, it will be reapplied in a second
4757 if (aurSpellInfo->AuraInterruptFlags && this == aura->GetOwner())
4758 {
4759 m_interruptableAuras.push_back(aurApp);
4760 AddInterruptMask(aurSpellInfo->AuraInterruptFlags);
4761 }
4762
4763 if (AuraStateType aState = aura->GetSpellInfo()->GetAuraState())
4764 m_auraStateAuras.insert(AuraStateAurasMap::value_type(aState, aurApp));
4765
4766 aura->_ApplyForTarget(this, caster, aurApp);
4767 return aurApp;
4768}
WorldObject * GetOwner() const
Definition SpellAuras.h:107
bool IsAppliedOnTarget(ObjectGuid guid) const
Definition SpellAuras.h:186
virtual void _ApplyForTarget(Unit *target, Unit *caster, AuraApplication *auraApp)
Definition SpellAuras.cpp:431
bool IsPlayer() const
Definition Object.h:201
Player * ToPlayer()
Definition Object.h:202
bool IsDeathPersistent() const
Definition SpellInfo.cpp:1249
uint32 Id
Definition SpellInfo.h:344
bool IsAllowingDeadTarget() const
Definition SpellInfo.cpp:1259
void AddInterruptMask(uint32 mask)
Definition Unit.h:1604
bool IsAlive() const
Definition Unit.h:1794
AuraApplicationList m_interruptableAuras
Definition Unit.h:2175
AuraStateAurasMap m_auraStateAuras
Definition Unit.h:2176

References Aura::_ApplyForTarget(), AddInterruptMask(), ASSERT, SpellInfo::AuraInterruptFlags, SpellInfo::GetAuraState(), Aura::GetCaster(), Object::GetGUID(), Aura::GetOwner(), Aura::GetSpellInfo(), SpellInfo::Id, IsAlive(), SpellInfo::IsAllowingDeadTarget(), Aura::IsAppliedOnTarget(), SpellInfo::IsDeathPersistent(), Object::IsPlayer(), Aura::IsRemoved(), m_appliedAuras, m_auraStateAuras, m_cleanupDone, m_interruptableAuras, and Object::ToPlayer().

◆ _DeleteRemovedAuras()

void Unit::_DeleteRemovedAuras ( )
protected
4008{
4009 while (!m_removedAuras.empty())
4010 {
4011 delete m_removedAuras.front();
4012 m_removedAuras.pop_front();
4013 }
4014}

References m_removedAuras.

Referenced by _UpdateSpells(), and ~Unit().

◆ _EnterVehicle()

void Unit::_EnterVehicle ( Vehicle vehicle,
int8  seatId,
AuraApplication const *  aurApp = nullptr 
)
15638{
15639 // Must be called only from aura handler
15640 if (!IsAlive() || GetVehicleKit() == vehicle || vehicle->GetBase()->IsOnVehicle(this))
15641 return;
15642
15643 if (m_vehicle)
15644 {
15645 if (m_vehicle == vehicle)
15646 {
15647 if (seatId >= 0 && seatId != GetTransSeat())
15648 {
15649 LOG_DEBUG("vehicles", "EnterVehicle: {} leave vehicle {} seat {} and enter {}.", GetEntry(), m_vehicle->GetBase()->GetEntry(), GetTransSeat(), seatId);
15650 ChangeSeat(seatId);
15651 }
15652
15653 return;
15654 }
15655 else
15656 {
15657 LOG_DEBUG("vehicles", "EnterVehicle: {} exit {} and enter {}.", GetEntry(), m_vehicle->GetBase()->GetEntry(), vehicle->GetBase()->GetEntry());
15658 ExitVehicle();
15659 }
15660 }
15661
15662 if (!aurApp || aurApp->GetRemoveMode())
15663 return;
15664
15665 if (Player* player = ToPlayer())
15666 {
15667 if (vehicle->GetBase()->IsPlayer() && player->IsInCombat())
15668 return;
15669
15670 sScriptMgr->AnticheatSetUnderACKmount(player);
15671
15673 player->StopCastingCharm();
15674 player->StopCastingBindSight();
15675 Dismount();
15677
15678 // drop flag at invisible in bg
15679 if (Battleground* bg = player->GetBattleground())
15680 bg->EventPlayerDroppedFlag(player);
15681
15683 player->SendDirectMessage(&data);
15684 }
15685
15686 ASSERT(!m_vehicle);
15687 m_vehicle = vehicle;
15688
15689 if (!m_vehicle->AddPassenger(this, seatId))
15690 {
15691 m_vehicle = nullptr;
15692 return;
15693 }
15694
15695 // Xinef: remove movement auras when entering vehicle (food buffs etc)
15697}
#define LOG_DEBUG(filterType__,...)
Definition Log.h:170
@ SPELL_AURA_MOUNTED
Definition SpellAuraDefines.h:141
@ AURA_INTERRUPT_FLAG_MOVE
Definition SpellDefines.h:46
@ AURA_INTERRUPT_FLAG_TURNING
Definition SpellDefines.h:47
Definition Battleground.h:294
uint32 GetEntry() const
Definition Object.h:117
void InterruptNonMeleeSpells(bool withDelayed, uint32 spellid=0, bool withInstant=true, bool bySelf=false)
Definition Unit.cpp:4327
void Dismount()
Definition Unit.cpp:10580
bool IsOnVehicle(Unit const *vehicle) const
Definition Unit.h:1928
void RemoveAurasByType(AuraType auraType, ObjectGuid casterGUID=ObjectGuid::Empty, Aura *except=nullptr, bool negative=true, bool positive=true)
Definition Unit.cpp:5390
void ChangeSeat(int8 seatId, bool next=true)
Definition Unit.cpp:15699
Vehicle * GetVehicleKit() const
Definition Unit.h:1926
void RemoveAurasWithInterruptFlags(uint32 flag, uint32 except=0, bool isAutoshot=false)
Definition Unit.cpp:5461
void ExitVehicle(Position const *exitPosition=nullptr)
Definition Unit.cpp:15718
Unit * GetBase() const
May be called from scripts.
Definition Vehicle.h:37
bool AddPassenger(Unit *passenger, int8 seatId=-1)
Definition Vehicle.cpp:319
int8 GetTransSeat() const
Definition Object.h:694
Definition WorldPacket.h:26
@ SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA
Definition Opcodes.h:1211

References Vehicle::AddPassenger(), ASSERT, AURA_INTERRUPT_FLAG_MOVE, AURA_INTERRUPT_FLAG_TURNING, ChangeSeat(), Dismount(), ExitVehicle(), Vehicle::GetBase(), Object::GetEntry(), AuraApplication::GetRemoveMode(), WorldObject::GetTransSeat(), GetVehicleKit(), InterruptNonMeleeSpells(), IsAlive(), IsOnVehicle(), Object::IsPlayer(), LOG_DEBUG, m_vehicle, RemoveAurasByType(), RemoveAurasWithInterruptFlags(), SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, SPELL_AURA_MOUNTED, sScriptMgr, and Object::ToPlayer().

Referenced by AuraEffect::HandleAuraControlVehicle().

◆ _ExitVehicle()

void Unit::_ExitVehicle ( Position const *  exitPosition = nullptr)
15756{
15757 if (!m_vehicle)
15758 return;
15759
15760 // This should be done before dismiss, because there may be some aura removal
15763
15764 Player* player = ToPlayer();
15765
15766 // If player is on mouted duel and exits the mount should immediatly lose the duel
15767 if (player && player->duel && player->duel->IsMounted)
15768 player->DuelComplete(DUEL_FLED);
15769
15770 Vehicle* vehicle = m_vehicle;
15771 Unit* vehicleBase = m_vehicle->GetBase();
15772 m_vehicle = nullptr;
15773
15774 if (!vehicleBase)
15775 return;
15776
15777 if (IsPlayer())
15779
15780 SetControlled(false, UNIT_STATE_ROOT); // SMSG_MOVE_FORCE_UNROOT, ~MOVEMENTFLAG_ROOT
15781
15782 Position pos;
15783 // If we ask for a specific exit position, use that one. Otherwise allow scripts to modify it
15784 if (exitPosition)
15785 pos = *exitPosition;
15786 else
15787 {
15788 // Set exit position to vehicle position and use the current orientation
15789 pos = vehicleBase->GetPosition(); // This should use passenger's current position, leaving it as it is now
15790 pos.SetOrientation(vehicleBase->GetOrientation());
15791
15792 // Change exit position based on seat entry addon data
15793 if (seatAddon)
15794 {
15796 pos.RelocateOffset({ seatAddon->ExitParameterX, seatAddon->ExitParameterY, seatAddon->ExitParameterZ, seatAddon->ExitParameterO });
15798 pos.Relocate({ seatAddon->ExitParameterX, seatAddon->ExitParameterY, seatAddon->ExitParameterZ, seatAddon->ExitParameterO });
15799
15801 float floorZ = GetMapHeight(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ());
15802
15803 if (!isInLoS || pos.GetPositionZ() < floorZ)
15804 pos = vehicleBase->GetPosition();
15805 }
15806 }
15807
15809
15810 if (player)
15811 {
15813
15814 sScriptMgr->AnticheatSetUnderACKmount(player);
15815 }
15816
15817 // xinef: hack for flameleviathan seat vehicle
15818 VehicleEntry const* vehicleInfo = vehicle->GetVehicleInfo();
15819 if (!vehicleInfo || vehicleInfo->m_ID != 341)
15820 {
15821 Movement::MoveSplineInit init(this);
15822 init.MoveTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ());
15823 init.SetFacing(vehicleBase->GetOrientation());
15824 init.SetTransportExit();
15825 init.Launch();
15826 }
15827 else
15828 {
15829 float o = pos.GetAngle(this);
15830 Movement::MoveSplineInit init(this);
15831 init.MoveTo(pos.GetPositionX() + 8 * cos(o), pos.GetPositionY() + 8 * std::sin(o), pos.GetPositionZ() + 16.0f);
15832 init.SetFacing(GetOrientation());
15833 init.SetTransportExit();
15834 init.Launch();
15835 DisableSpline();
15836 KnockbackFrom(pos.GetPositionX(), pos.GetPositionY(), 10.0f, 20.0f);
15838 }
15839
15840 // xinef: move fall, should we support all creatures that exited vehicle in air? Currently Quest Drag and Drop only, Air Assault quest
15841 if (IsCreature() && !CanFly() && vehicleInfo && (vehicleInfo->m_ID == 113 || vehicleInfo->m_ID == 8 || vehicleInfo->m_ID == 290 || vehicleInfo->m_ID == 298))
15842 {
15844 }
15845
15846 if ((!player || !(player->GetDelayedOperations() & DELAYED_VEHICLE_TELEPORT)) && vehicle->GetBase()->HasUnitTypeMask(UNIT_MASK_MINION))
15847 if (((Minion*)vehicleBase)->GetOwner() == this)
15848 {
15849 if (!vehicleInfo || vehicleInfo->m_ID != 349)
15850 {
15851 vehicle->Dismiss();
15852 }
15853 else if (vehicleBase->IsCreature())
15854 {
15855 vehicle->Uninstall();
15856 vehicleBase->m_Events.AddEventAtOffset(new VehicleDespawnEvent(*vehicleBase, 2s), 2s);
15857 }
15858
15859 // xinef: ugly hack, no appripriate hook later to cast spell
15860 if (player)
15861 {
15862 if (vehicleBase->GetEntry() == NPC_EIDOLON_WATCHER)
15863 player->CastSpell(player, VEHICLE_SPELL_SHADE_CONTROL_END, true);
15864 else if (vehicleBase->GetEntry() == NPC_LITHE_STALKER)
15865 player->CastSpell(player, VEHICLE_SPELL_GEIST_CONTROL_END, true);
15866 }
15867 }
15868
15870 {
15871 // Vehicle just died, we die too
15872 if (vehicleBase->getDeathState() == DeathState::JustDied)
15874 // If for other reason we as minion are exiting the vehicle (ejected, master dismounted) - unsummon
15875 else
15876 ToTempSummon()->UnSummon(2s); // Approximation
15877 }
15878
15879 if (player)
15880 {
15882 player->SetCanTeleport(true);
15883 }
15884}
@ LINEOFSIGHT_ALL_CHECKS
Definition Map.h:113
@ DELAYED_VEHICLE_TELEPORT
Definition Player.h:902
@ DUEL_FLED
Definition SharedDefines.h:3870
@ UNIT_MASK_ACCESSORY
Definition UnitDefines.h:168
@ UNIT_MASK_MINION
Definition UnitDefines.h:160
@ UNIT_STATE_ROOT
Definition UnitDefines.h:183
@ UNIT_STATE_MOVE
Definition UnitDefines.h:192
@ VEHICLE_SPELL_PARACHUTE
Definition VehicleDefines.h:53
@ VEHICLE_SPELL_SHADE_CONTROL_END
Definition VehicleDefines.h:56
@ VEHICLE_SPELL_GEIST_CONTROL_END
Definition VehicleDefines.h:55
@ NPC_EIDOLON_WATCHER
Definition VehicleDefines.h:69
@ NPC_LITHE_STALKER
Definition VehicleDefines.h:70
void AddEventAtOffset(BasicEvent *event, Milliseconds offset, uint8 eventGroup=0)
Definition EventProcessor.h:108
bool isInLineOfSight(float x1, float y1, float z1, float x2, float y2, float z2, uint32 phasemask, LineOfSightChecks checks, VMAP::ModelIgnoreFlags ignoreFlags) const
Definition Map.cpp:1538
Definition TemporarySummon.h:87
void MoveFall(uint32 id=0, bool addFlagForNPC=false)
The unit will fall. Used when in the air. Doesn't work with UNIT_FLAG_DISABLE_MOVE.
Definition MotionMaster.cpp:688
Definition MoveSplineInit.h:63
bool IsCreature() const
Definition Object.h:205
void SetCanTeleport(bool value)
Definition Player.h:2534
void DuelComplete(DuelCompleteType type)
Definition Player.cpp:6411
void SetFallInformation(uint32 time, float z)
Definition Player.h:2371
void SetExpectingChangeTransport(bool state)
Definition Player.h:2672
std::unique_ptr< DuelInfo > duel
Definition Player.h:1894
void ResummonPetTemporaryUnSummonedIfAny()
Definition Player.cpp:14272
uint32 GetDelayedOperations() const
Definition Player.h:2117
virtual void UnSummon(Milliseconds msTime=0ms)
Definition TemporarySummon.cpp:292
virtual void setDeathState(DeathState s, bool despawn=false)
Definition Unit.cpp:11376
Unit * GetOwner() const
Definition Unit.cpp:7710
DeathState getDeathState()
Definition Unit.h:1791
virtual bool CanFly() const =0
MotionMaster * GetMotionMaster()
Definition Unit.h:1759
TempSummon * ToTempSummon()
Definition Unit.h:731
void DisableSpline()
Definition Unit.cpp:756
void AddUnitState(uint32 f)
Definition Unit.h:735
void SetControlled(bool apply, UnitState state, Unit *source=nullptr, bool isFear=false)
Definition Unit.cpp:14309
SpellCastResult CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
Definition Unit.cpp:1375
uint32 HasUnitTypeMask(uint32 mask) const
Definition Unit.h:741
void KnockbackFrom(float x, float y, float speedXY, float speedZ)
Definition Unit.cpp:15400
Definition Vehicle.h:102
Definition Vehicle.h:28
void Dismiss()
Definition Vehicle.cpp:546
VehicleEntry const * GetVehicleInfo() const
Definition Vehicle.h:38
void RemovePassenger(Unit *passenger)
Definition Vehicle.cpp:467
void Uninstall()
Definition Vehicle.cpp:102
VehicleSeatAddon const * GetSeatAddonForSeatOfPassenger(Unit const *passenger) const
Definition Vehicle.cpp:238
uint32 GetPhaseMask() const
Definition Object.h:516
Map * GetMap() const
Definition Object.h:625
float GetMapHeight(float x, float y, float z, bool vmap=true, float distanceToSearch=50.0f) const
Definition Object.cpp:3085
EventProcessor m_Events
Definition Object.h:736
Seconds GetGameTime()
Definition GameTime.cpp:38
Definition Position.h:27
void RelocateOffset(const Position &offset)
Definition Position.cpp:66
float GetPositionZ() const
Definition Position.h:123
float GetOrientation() const
Definition Position.h:124
void SetOrientation(float orientation)
Definition Position.h:116
float GetPositionX() const
Definition Position.h:121
void GetPosition(float &x, float &y) const
Definition Position.h:126
float GetPositionY() const
Definition Position.h:122
float GetAngle(const Position *pos) const
Definition Position.cpp:85
Definition DBCStructure.h:2027
uint32 m_ID
Definition DBCStructure.h:2028
Definition VehicleDefines.h:86
float ExitParameterO
Definition VehicleDefines.h:96
float ExitParameterX
Definition VehicleDefines.h:93
float ExitParameterY
Definition VehicleDefines.h:94
float ExitParameterZ
Definition VehicleDefines.h:95
VehicleExitParameters ExitParameter
Definition VehicleDefines.h:97

References EventProcessor::AddEventAtOffset(), AddUnitState(), CanFly(), CastSpell(), DELAYED_VEHICLE_TELEPORT, DisableSpline(), Vehicle::Dismiss(), Player::duel, DUEL_FLED, Player::DuelComplete(), VehicleSeatAddon::ExitParameter, VehicleSeatAddon::ExitParameterO, VehicleSeatAddon::ExitParameterX, VehicleSeatAddon::ExitParameterY, VehicleSeatAddon::ExitParameterZ, Position::GetAngle(), Vehicle::GetBase(), getDeathState(), Player::GetDelayedOperations(), Object::GetEntry(), GameTime::GetGameTime(), WorldObject::GetMap(), WorldObject::GetMapHeight(), GetMotionMaster(), Position::GetOrientation(), GetOwner(), WorldObject::GetPhaseMask(), Position::GetPosition(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), Vehicle::GetSeatAddonForSeatOfPassenger(), Vehicle::GetVehicleInfo(), HasUnitTypeMask(), Object::IsCreature(), Map::isInLineOfSight(), Object::IsPlayer(), JustDied, KnockbackFrom(), Movement::MoveSplineInit::Launch(), LINEOFSIGHT_ALL_CHECKS, WorldObject::m_Events, VehicleEntry::m_ID, m_vehicle, MotionMaster::MoveFall(), Movement::MoveSplineInit::MoveTo(), VMAP::Nothing, NPC_EIDOLON_WATCHER, NPC_LITHE_STALKER, Position::Relocate(), Position::RelocateOffset(), Vehicle::RemovePassenger(), Player::ResummonPetTemporaryUnSummonedIfAny(), Player::SetCanTeleport(), SetControlled(), setDeathState(), Player::SetExpectingChangeTransport(), Movement::MoveSplineInit::SetFacing(), Player::SetFallInformation(), Position::SetOrientation(), Movement::MoveSplineInit::SetTransportExit(), sScriptMgr, Object::ToPlayer(), ToTempSummon(), Vehicle::Uninstall(), UNIT_MASK_ACCESSORY, UNIT_MASK_MINION, UNIT_STATE_MOVE, UNIT_STATE_ROOT, TempSummon::UnSummon(), VEHICLE_SPELL_GEIST_CONTROL_END, VEHICLE_SPELL_PARACHUTE, VEHICLE_SPELL_SHADE_CONTROL_END, VehicleExitParamDest, and VehicleExitParamOffset.

Referenced by AuraEffect::HandleAuraControlVehicle(), and boss_mimiron::UpdateAI().

◆ _IsNoStackAuraDueToAura()

bool Unit::_IsNoStackAuraDueToAura ( Aura appliedAura,
Aura existingAura 
) const

◆ _IsValidAssistTarget()

bool Unit::_IsValidAssistTarget ( Unit const *  target,
SpellInfo const *  bySpell 
) const
10891{
10892 ASSERT(target);
10893
10894 // can assist to self
10895 if (this == target)
10896 return true;
10897
10898 // can't assist unattackable units or GMs
10899 if (target->HasUnitState(UNIT_STATE_UNATTACKABLE)
10900 || (target->IsPlayer() && target->ToPlayer()->IsGameMaster()))
10901 return false;
10902
10903 // can't assist own vehicle or passenger
10904 if (m_vehicle)
10905 if (IsOnVehicle(target) || m_vehicle->GetBase()->IsOnVehicle(target))
10906 return false;
10907
10908 // can't assist invisible
10909 if ((!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_IGNORE_PHASE_SHIFT)) && !CanSeeOrDetect(target, bySpell && bySpell->IsAffectingArea()))
10910 return false;
10911
10912 // can't assist dead
10913 if ((!bySpell || !bySpell->IsAllowingDeadTarget()) && !target->IsAlive())
10914 return false;
10915
10916 // can't assist untargetable
10917 if ((!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_CAN_TARGET_UNTARGETABLE))
10918 && target->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE))
10919 return false;
10920
10921 if (!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_CAN_ASSIST_IMMUNE_PC))
10922 {
10923 // xinef: do not allow to assist non attackable units
10924 if (target->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
10925 return false;
10926
10928 {
10929 if (target->IsImmuneToPC())
10930 return false;
10931 }
10932 else
10933 {
10934 if (target->IsImmuneToNPC())
10935 return false;
10936 }
10937 }
10938
10939 // can't assist non-friendly targets
10940 if (GetReactionTo(target) < REP_NEUTRAL
10941 && target->GetReactionTo(this) < REP_NEUTRAL
10942 && (!ToCreature() || !(ToCreature()->GetCreatureTemplate()->type_flags & CREATURE_TYPE_FLAG_TREAT_AS_RAID_UNIT)))
10943 return false;
10944
10945 // PvP case
10946 if (target->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED))
10947 {
10948 Player const* targetPlayerOwner = target->GetAffectingPlayer();
10950 {
10951 Player const* selfPlayerOwner = GetAffectingPlayer();
10952 if (selfPlayerOwner && targetPlayerOwner)
10953 {
10954 // can't assist player which is dueling someone
10955 if (selfPlayerOwner != targetPlayerOwner
10956 && targetPlayerOwner->duel)
10957 return false;
10958 }
10959 // can't assist player in ffa_pvp zone from outside
10960 if (target->IsFFAPvP() && !IsFFAPvP())
10961 return false;
10962
10963 // can't assist player out of sanctuary from sanctuary if has pvp enabled
10964 if (target->IsPvP())
10965 if (IsInSanctuary() && !target->IsInSanctuary())
10966 return false;
10967 }
10968 }
10969 // PvC case - player can assist creature only if has specific type flags
10970 // !target->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED) &&
10972 && (!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_CAN_ASSIST_IMMUNE_PC))
10973 && !target->IsPvP())
10974 {
10975 if (Creature const* creatureTarget = target->ToCreature())
10976 return creatureTarget->GetCreatureTemplate()->type_flags & CREATURE_TYPE_FLAG_TREAT_AS_RAID_UNIT || creatureTarget->GetCreatureTemplate()->type_flags & CREATURE_TYPE_FLAG_CAN_ASSIST;
10977 }
10978 return true;
10979}
@ REP_NEUTRAL
Definition SharedDefines.h:160
@ CREATURE_TYPE_FLAG_TREAT_AS_RAID_UNIT
Definition SharedDefines.h:2715
@ CREATURE_TYPE_FLAG_CAN_ASSIST
Definition SharedDefines.h:2701
@ SPELL_ATTR6_CAN_TARGET_UNTARGETABLE
Definition SharedDefines.h:616
@ SPELL_ATTR6_IGNORE_PHASE_SHIFT
Definition SharedDefines.h:605
@ SPELL_ATTR6_CAN_ASSIST_IMMUNE_PC
Definition SharedDefines.h:595
@ UNIT_STATE_UNATTACKABLE
Definition UnitDefines.h:214
@ UNIT_FLAG_NON_ATTACKABLE
Definition UnitDefines.h:258
@ UNIT_FLAG_NOT_SELECTABLE
Definition UnitDefines.h:282
@ UNIT_FLAG_PLAYER_CONTROLLED
Definition UnitDefines.h:260
Definition Creature.h:47
Creature * ToCreature()
Definition Object.h:206
ReputationRank GetReactionTo(Unit const *target, bool checkOriginalFaction=false) const
Definition Unit.cpp:7092
bool HasUnitFlag(UnitFlags flags) const
Definition Unit.h:747
bool IsInSanctuary() const
Definition Unit.h:1043
bool IsFFAPvP() const
Definition Unit.h:1045
Player * GetAffectingPlayer() const
Definition Unit.cpp:7735
bool CanSeeOrDetect(WorldObject const *obj, bool ignoreStealth=false, bool distanceCheck=false, bool checkAlert=false) const
Definition Object.cpp:1756

References ASSERT, WorldObject::CanSeeOrDetect(), CREATURE_TYPE_FLAG_CAN_ASSIST, CREATURE_TYPE_FLAG_TREAT_AS_RAID_UNIT, Player::duel, GetAffectingPlayer(), Vehicle::GetBase(), GetReactionTo(), SpellInfo::HasAttribute(), HasUnitFlag(), HasUnitState(), SpellInfo::IsAffectingArea(), IsAlive(), SpellInfo::IsAllowingDeadTarget(), IsFFAPvP(), Player::IsGameMaster(), IsImmuneToNPC(), IsImmuneToPC(), IsInSanctuary(), IsOnVehicle(), Object::IsPlayer(), IsPvP(), m_vehicle, REP_NEUTRAL, SPELL_ATTR6_CAN_ASSIST_IMMUNE_PC, SPELL_ATTR6_CAN_TARGET_UNTARGETABLE, SPELL_ATTR6_IGNORE_PHASE_SHIFT, Object::ToCreature(), Object::ToPlayer(), UNIT_FLAG_NON_ATTACKABLE, UNIT_FLAG_NOT_SELECTABLE, UNIT_FLAG_PLAYER_CONTROLLED, and UNIT_STATE_UNATTACKABLE.

Referenced by SpellInfo::CheckExplicitTarget(), IsValidAssistTarget(), and Acore::WorldObjectSpellTargetCheck::operator()().

◆ _IsValidAttackTarget()

bool Unit::_IsValidAttackTarget ( Unit const *  target,
SpellInfo const *  bySpell,
WorldObject const *  obj = nullptr 
) const
10753{
10754 ASSERT(target);
10755
10756 // can't attack self
10757 if (this == target)
10758 return false;
10759
10760 // can't attack unattackable units or GMs
10761 if (target->HasUnitState(UNIT_STATE_UNATTACKABLE)
10762 || (target->IsPlayer() && target->ToPlayer()->IsGameMaster()))
10763 return false;
10764
10765 // can't attack own vehicle or passenger
10766 if (m_vehicle)
10767 if (IsOnVehicle(target) || m_vehicle->GetBase()->IsOnVehicle(target))
10768 if (!IsHostileTo(target)) // pussywizard: actually can attack own vehicle or passenger if it's hostile to us - needed for snobold in Gormok encounter
10769 return false;
10770
10771 // can't attack invisible (ignore stealth for aoe spells) also if the area being looked at is from a spell use the dynamic object created instead of the casting unit.
10772 //Ignore stealth if target is player and unit in combat with same player
10773 if ((!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_IGNORE_PHASE_SHIFT)) && (obj ? !obj->CanSeeOrDetect(target, bySpell && bySpell->IsAffectingArea()) : !CanSeeOrDetect(target, (bySpell && bySpell->IsAffectingArea()) || (target->IsPlayer() && target->HasStealthAura() && target->IsInCombat() && IsInCombatWith(target)))))
10774 return false;
10775
10776 // can't attack dead
10777 if ((!bySpell || !bySpell->IsAllowingDeadTarget()) && !target->IsAlive())
10778 return false;
10779
10780 // can't attack untargetable
10781 if ((!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_CAN_TARGET_UNTARGETABLE))
10782 && target->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE))
10783 return false;
10784
10785 if (Player const* playerAttacker = ToPlayer())
10786 {
10787 if (playerAttacker->HasPlayerFlag(PLAYER_FLAGS_UBER) || playerAttacker->IsSpectator())
10788 return false;
10789 }
10790 // check flags
10792 || (!HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED) && target->IsImmuneToNPC())
10793 || (!target->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED) && IsImmuneToNPC())
10794 || (HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED) && target->IsImmuneToPC())
10795 // check if this is a world trigger cast - GOs are using world triggers to cast their spells, so we need to ignore their immunity flag here, this is a temp workaround, needs removal when go cast is implemented properly
10796 || ((GetEntry() != WORLD_TRIGGER && (!obj || !obj->isType(TYPEMASK_GAMEOBJECT | TYPEMASK_DYNAMICOBJECT))) && target->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED) && IsImmuneToPC()))
10797 return false;
10798
10799 // CvC case - can attack each other only when one of them is hostile
10801 return GetReactionTo(target) <= REP_HOSTILE || target->GetReactionTo(this) <= REP_HOSTILE;
10802
10803 // PvP, PvC, CvP case
10804 // can't attack friendly targets
10805 ReputationRank repThisToTarget = GetReactionTo(target);
10806 ReputationRank repTargetToThis;
10807
10808 if (repThisToTarget > REP_NEUTRAL
10809 || (repTargetToThis = target->GetReactionTo(this)) > REP_NEUTRAL)
10810 {
10811 // contested guards can attack contested PvP players even though players may be friendly
10812 if (!target->IsControlledByPlayer())
10813 return false;
10814
10815 bool isContestedGuard = false;
10816 if (FactionTemplateEntry const* entry = GetFactionTemplateEntry())
10817 isContestedGuard = entry->factionFlags & FACTION_TEMPLATE_FLAG_ATTACK_PVP_ACTIVE_PLAYERS;
10818
10819 bool isContestedPvp = false;
10820 if (Player const* player = target->GetCharmerOrOwnerPlayerOrPlayerItself())
10821 isContestedPvp = player->HasPlayerFlag(PLAYER_FLAGS_CONTESTED_PVP);
10822
10823 if (!isContestedGuard && !isContestedPvp)
10824 return false;
10825 }
10826
10827 // Not all neutral creatures can be attacked (even some unfriendly faction does not react aggresive to you, like Sporaggar)
10828 if (repThisToTarget == REP_NEUTRAL &&
10829 repTargetToThis <= REP_NEUTRAL)
10830 {
10831 Player* owner = GetAffectingPlayer();
10832 Unit const* const thisUnit = owner ? owner : this;
10833 if (!(target->IsPlayer() && thisUnit->IsPlayer()) &&
10834 !(target->IsCreature() && thisUnit->IsCreature()))
10835 {
10836 Player const* player = target->IsPlayer() ? target->ToPlayer() : thisUnit->ToPlayer();
10837 Unit const* creature = target->IsCreature() ? target : thisUnit;
10838
10839 if (FactionTemplateEntry const* factionTemplate = creature->GetFactionTemplateEntry())
10840 {
10841 if (!(player->GetReputationMgr().GetForcedRankIfAny(factionTemplate)))
10842 if (FactionEntry const* factionEntry = sFactionStore.LookupEntry(factionTemplate->faction))
10843 if (FactionState const* repState = player->GetReputationMgr().GetState(factionEntry))
10844 if (!(repState->Flags & FACTION_FLAG_AT_WAR))
10845 return false;
10846 }
10847 }
10848 }
10849
10850 Creature const* creatureAttacker = ToCreature();
10851 if (creatureAttacker && creatureAttacker->GetCreatureTemplate()->type_flags & CREATURE_TYPE_FLAG_TREAT_AS_RAID_UNIT)
10852 return false;
10853
10854 Player const* playerAffectingAttacker = HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED) ? GetAffectingPlayer() : nullptr;
10855 Player const* playerAffectingTarget = target->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED) ? target->GetAffectingPlayer() : nullptr;
10856
10857 // check duel - before sanctuary checks
10858 if (playerAffectingAttacker && playerAffectingTarget)
10859 if (playerAffectingAttacker->duel && playerAffectingAttacker->duel->Opponent == playerAffectingTarget && playerAffectingAttacker->duel->State == DUEL_STATE_IN_PROGRESS)
10860 return true;
10861
10862 // PvP case - can't attack when attacker or target are in sanctuary
10863 // however, 13850 client doesn't allow to attack when one of the unit's has sanctuary flag and is pvp
10864 if (target->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED) && HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED) && (target->IsInSanctuary() || IsInSanctuary()))
10865 return false;
10866
10867 // additional checks - only PvP case
10868 if (playerAffectingAttacker && playerAffectingTarget)
10869 {
10870 if (!IsPvP() && bySpell && bySpell->IsAffectingArea() && !bySpell->HasAttribute(SPELL_ATTR5_IGNORE_AREA_EFFECT_PVP_CHECK))
10871 return false;
10872
10873 if (target->IsPvP())
10874 return true;
10875
10876 if (IsFFAPvP() && target->IsFFAPvP())
10877 return true;
10878
10880 }
10881 return true;
10882}
@ FACTION_FLAG_AT_WAR
Definition DBCEnums.h:308
@ FACTION_TEMPLATE_FLAG_ATTACK_PVP_ACTIVE_PLAYERS
Definition DBCEnums.h:331
DBCStorage< FactionEntry > sFactionStore(FactionEntryfmt)
@ TYPEMASK_DYNAMICOBJECT
Definition ObjectGuid.h:52
@ TYPEMASK_GAMEOBJECT
Definition ObjectGuid.h:51
@ DUEL_STATE_IN_PROGRESS
Definition Player.h:359
@ PLAYER_FLAGS_CONTESTED_PVP
Definition Player.h:467
@ PLAYER_FLAGS_UBER
Definition Player.h:478
@ SPELL_ATTR5_IGNORE_AREA_EFFECT_PVP_CHECK
Definition SharedDefines.h:561
ReputationRank
Definition SharedDefines.h:156
@ REP_HOSTILE
Definition SharedDefines.h:158
@ UNIT_BYTE2_FLAG_UNK1
Definition UnitDefines.h:140
@ UNIT_FLAG_TAXI_FLIGHT
Definition UnitDefines.h:277
@ UNIT_FLAG_NON_ATTACKABLE_2
Definition UnitDefines.h:273
@ UNIT_FLAG_NOT_ATTACKABLE_1
Definition UnitDefines.h:264
#define WORLD_TRIGGER
Definition Unit.h:37
@ UNIT_FIELD_BYTES_2
Definition UpdateFields.h:161
CreatureTemplate const * GetCreatureTemplate() const
Definition Creature.h:207
bool HasByteFlag(uint16 index, uint8 offset, uint8 flag) const
Definition Object.cpp:931
ReputationMgr & GetReputationMgr()
Definition Player.h:2144
FactionState const * GetState(FactionEntry const *factionEntry) const
Definition ReputationMgr.h:81
ReputationRank const * GetForcedRankIfAny(FactionTemplateEntry const *factionTemplateEntry) const
Definition ReputationMgr.h:106
FactionTemplateEntry const * GetFactionTemplateEntry() const
Definition Unit.cpp:7062
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
Definition Unit.cpp:7726
bool IsPvP() const
Definition Unit.h:1044
bool HasStealthAura() const
Definition Unit.h:1842
bool IsInCombatWith(Unit const *who) const
Definition Unit.cpp:17089
bool IsImmuneToNPC() const
Definition Unit.h:929
bool IsHostileTo(Unit const *unit) const
Definition Unit.cpp:7264
bool IsImmuneToPC() const
Definition Unit.h:927
bool IsInCombat() const
Definition Unit.h:935
uint32 type_flags
Definition CreatureData.h:219
Definition DBCStructure.h:907
Definition ReputationMgr.h:41
Definition DBCStructure.h:939

References ASSERT, WorldObject::CanSeeOrDetect(), CREATURE_TYPE_FLAG_TREAT_AS_RAID_UNIT, Player::duel, DUEL_STATE_IN_PROGRESS, FACTION_FLAG_AT_WAR, FACTION_TEMPLATE_FLAG_ATTACK_PVP_ACTIVE_PLAYERS, GetAffectingPlayer(), Vehicle::GetBase(), GetCharmerOrOwnerPlayerOrPlayerItself(), Creature::GetCreatureTemplate(), Object::GetEntry(), GetFactionTemplateEntry(), ReputationMgr::GetForcedRankIfAny(), GetReactionTo(), Player::GetReputationMgr(), ReputationMgr::GetState(), SpellInfo::HasAttribute(), Object::HasByteFlag(), HasStealthAura(), HasUnitFlag(), HasUnitState(), SpellInfo::IsAffectingArea(), IsAlive(), SpellInfo::IsAllowingDeadTarget(), IsControlledByPlayer(), Object::IsCreature(), IsFFAPvP(), Player::IsGameMaster(), IsHostileTo(), IsImmuneToNPC(), IsImmuneToPC(), IsInCombat(), IsInCombatWith(), IsInSanctuary(), IsOnVehicle(), Object::IsPlayer(), IsPvP(), Object::isType(), m_vehicle, PLAYER_FLAGS_CONTESTED_PVP, PLAYER_FLAGS_UBER, REP_HOSTILE, REP_NEUTRAL, sFactionStore, SPELL_ATTR5_IGNORE_AREA_EFFECT_PVP_CHECK, SPELL_ATTR6_CAN_TARGET_UNTARGETABLE, SPELL_ATTR6_IGNORE_PHASE_SHIFT, Object::ToCreature(), Object::ToPlayer(), CreatureTemplate::type_flags, TYPEMASK_DYNAMICOBJECT, TYPEMASK_GAMEOBJECT, UNIT_BYTE2_FLAG_UNK1, UNIT_FIELD_BYTES_2, UNIT_FLAG_NON_ATTACKABLE, UNIT_FLAG_NON_ATTACKABLE_2, UNIT_FLAG_NOT_ATTACKABLE_1, UNIT_FLAG_NOT_SELECTABLE, UNIT_FLAG_PLAYER_CONTROLLED, UNIT_FLAG_TAXI_FLIGHT, UNIT_STATE_UNATTACKABLE, and WORLD_TRIGGER.

Referenced by SpellInfo::CheckExplicitTarget(), Spell::DoSpellHitOnUnit(), GetMagicHitRedirectTarget(), GetMeleeHitRedirectTarget(), IsValidAttackTarget(), Acore::AnyAoETargetUnitInObjectRangeCheck::operator()(), and Acore::WorldObjectSpellTargetCheck::operator()().

◆ _RegisterAuraEffect()

void Unit::_RegisterAuraEffect ( AuraEffect aurEff,
bool  apply 
)
4970{
4971 if (apply)
4972 m_modAuras[aurEff->GetAuraType()].push_back(aurEff);
4973 else
4974 m_modAuras[aurEff->GetAuraType()].erase(std::remove(m_modAuras[aurEff->GetAuraType()].begin(), m_modAuras[aurEff->GetAuraType()].end(), aurEff), m_modAuras[aurEff->GetAuraType()].end());
4975}
AuraType GetAuraType() const
Definition SpellAuraEffects.cpp:447
AuraEffectList m_modAuras[TOTAL_AURAS]
Definition Unit.h:2173

References AuraEffect::GetAuraType(), and m_modAuras.

Referenced by AuraEffect::HandleEffect().

◆ _RegisterDynObject()

void Unit::_RegisterDynObject ( DynamicObject dynObj)
6516{
6517 m_dynObj.push_back(dynObj);
6518}

References m_dynObj.

Referenced by DynamicObject::BindToCaster().

◆ _RemoveAllAuraStatMods()

void Unit::_RemoveAllAuraStatMods ( )
5772{
5773 for (AuraApplicationMap::iterator i = m_appliedAuras.begin(); i != m_appliedAuras.end(); ++i)
5774 (*i).second->GetBase()->HandleAllEffects(i->second, AURA_EFFECT_HANDLE_STAT, false);
5775}

References AURA_EFFECT_HANDLE_STAT, and m_appliedAuras.

Referenced by Player::_RemoveAllStatBonuses().

◆ _removeAttacker()

void Unit::_removeAttacker ( Unit pAttacker)
inlineprivate
Note
: Call only in Unit::Attack()
2228{ m_attackers.erase(pAttacker); }

References m_attackers.

Referenced by Attack(), and AttackStop().

◆ _RemoveNoStackAuraApplicationsDueToAura()

void Unit::_RemoveNoStackAuraApplicationsDueToAura ( Aura aura)

◆ _RemoveNoStackAurasDueToAura()

void Unit::_RemoveNoStackAurasDueToAura ( Aura aura,
bool  owned 
)
4947{
4948 //SpellInfo const* spellProto = aura->GetSpellInfo();
4949
4950 // passive spell special case (only non stackable with ranks)
4951
4952 // xinef: this check makes caster to have 2 area auras thanks to spec switch
4953 // if (spellProto->IsPassiveStackableWithRanks())
4954 // return;
4955
4956 ASSERT(aura);
4957 if (!IsHighestExclusiveAura(aura))
4958 {
4959 aura->Remove();
4960 return;
4961 }
4962
4963 if (owned)
4964 RemoveOwnedAuras([aura](Aura const* ownedAura) { return !aura->CanStackWith(ownedAura); });
4965 else
4966 RemoveAppliedAuras([aura](AuraApplication const* appliedAura) { return !aura->CanStackWith(appliedAura->GetBase()); });
4967}
bool CanStackWith(Aura const *existingAura) const
Definition SpellAuras.cpp:1934
virtual void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)=0
void RemoveAppliedAuras(std::function< bool(AuraApplication const *)> const &check)
Definition Unit.cpp:5143
void RemoveOwnedAuras(std::function< bool(Aura const *)> const &check)
Definition Unit.cpp:5130
bool IsHighestExclusiveAura(Aura const *aura, bool removeOtherAuraApplications=false)
Definition Unit.cpp:4585

References ASSERT, Aura::CanStackWith(), AuraApplication::GetBase(), IsHighestExclusiveAura(), Aura::Remove(), RemoveAppliedAuras(), and RemoveOwnedAuras().

Referenced by _AddAura(), and _ApplyAura().

◆ _TryStackingOrRefreshingExistingAura()

Aura * Unit::_TryStackingOrRefreshingExistingAura ( SpellInfo const *  newAura,
uint8  effMask,
Unit caster,
int32 baseAmount = nullptr,
Item castItem = nullptr,
ObjectGuid  casterGUID = ObjectGuid::Empty,
bool  periodicReset = false 
)
4635{
4636 ASSERT(casterGUID || caster);
4637 if (!casterGUID)
4638 casterGUID = caster->GetGUID();
4639
4640 // passive and Incanter's Absorption and auras with different type can stack with themselves any number of times
4641 if (!newAura->IsMultiSlotAura())
4642 {
4643 // check if cast item changed
4644 ObjectGuid castItemGUID;
4645 if (castItem)
4646 castItemGUID = castItem->GetGUID();
4647
4648 // find current aura from spell and change it's stackamount, or refresh it's duration
4649 // Use castItemGUID for passive auras (weapon imbues) and enchant procs so they can stack from dual-wield
4650 bool useItemGuid = newAura->IsPassive() || newAura->HasAttribute(SPELL_ATTR0_CU_ENCHANT_PROC);
4651 ObjectGuid itemGuidForLookup = (useItemGuid && castItemGUID) ? castItemGUID : ObjectGuid::Empty;
4652 if (Aura* foundAura = GetOwnedAura(newAura->Id, newAura->HasAttribute(SPELL_ATTR0_CU_SINGLE_AURA_STACK) ? ObjectGuid::Empty : casterGUID, itemGuidForLookup, 0))
4653 {
4654 // effect masks do not match
4655 // extremely rare case
4656 // let's just recreate aura
4657 if (effMask != foundAura->GetEffectMask())
4658 return nullptr;
4659
4660 // update basepoints with new values - effect amount will be recalculated in ModStackAmount
4661 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
4662 {
4663 if (!foundAura->HasEffect(i))
4664 continue;
4665
4666 int bp;
4667 if (baseAmount)
4668 bp = *(baseAmount + i);
4669 else
4670 bp = foundAura->GetSpellInfo()->Effects[i].BasePoints;
4671
4672 int32* oldBP = const_cast<int32*>(&(foundAura->GetEffect(i)->m_baseAmount));
4673 *oldBP = bp;
4674 }
4675
4676 // correct cast item guid if needed
4677 if (castItemGUID != foundAura->GetCastItemGUID())
4678 {
4679 ObjectGuid* oldGUID = const_cast<ObjectGuid*>(&foundAura->m_castItemGuid);
4680 *oldGUID = castItemGUID;
4681 }
4682
4683 // try to increase stack amount
4684 foundAura->ModStackAmount(1, AURA_REMOVE_BY_DEFAULT, periodicReset);
4685 sScriptMgr->OnAuraApply(this, foundAura);
4686 return foundAura;
4687 }
4688 }
4689
4690 return nullptr;
4691}
std::int32_t int32
Definition Define.h:103
@ AURA_REMOVE_BY_DEFAULT
Definition SpellAuraDefines.h:392
@ SPELL_ATTR0_CU_ENCHANT_PROC
Definition SpellInfo.h:177
@ SPELL_ATTR0_CU_SINGLE_AURA_STACK
Definition SpellInfo.h:199
Definition ObjectGuid.h:118
static ObjectGuid const Empty
Definition ObjectGuid.h:120
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:114
Aura * GetOwnedAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, Aura *except=nullptr) const
Definition Unit.cpp:5033

References ASSERT, AURA_REMOVE_BY_DEFAULT, ObjectGuid::Empty, Object::GetGUID(), GetOwnedAura(), SpellInfo::HasAttribute(), SpellInfo::Id, SpellInfo::IsMultiSlotAura(), SpellInfo::IsPassive(), MAX_SPELL_EFFECTS, SPELL_ATTR0_CU_ENCHANT_PROC, SPELL_ATTR0_CU_SINGLE_AURA_STACK, and sScriptMgr.

Referenced by Aura::TryRefreshStackOrCreate().

◆ _UnapplyAura() [1/2]

void Unit::_UnapplyAura ( AuraApplication aurApp,
AuraRemoveMode  removeMode 
)
4926{
4927 // aura can be removed from unit only if it's applied on it, shouldn't happen
4928 ASSERT(aurApp->GetBase()->GetApplicationOfTarget(GetGUID()) == aurApp);
4929
4930 uint32 spellId = aurApp->GetBase()->GetId();
4931 AuraApplicationMapBoundsNonConst range = m_appliedAuras.equal_range(spellId);
4932
4933 for (AuraApplicationMap::iterator iter = range.first; iter != range.second;)
4934 {
4935 if (iter->second == aurApp)
4936 {
4937 _UnapplyAura(iter, removeMode);
4938 return;
4939 }
4940 else
4941 ++iter;
4942 }
4943 ABORT();
4944}
#define ABORT
Definition Errors.h:76
std::pair< AuraApplicationMap::iterator, AuraApplicationMap::iterator > AuraApplicationMapBoundsNonConst
Definition Unit.h:675
void _UnapplyAura(AuraApplicationMap::iterator &i, AuraRemoveMode removeMode)
Definition Unit.cpp:4830

References _UnapplyAura(), ABORT, ASSERT, Aura::GetApplicationOfTarget(), AuraApplication::GetBase(), Object::GetGUID(), Aura::GetId(), and m_appliedAuras.

◆ _UnapplyAura() [2/2]

void Unit::_UnapplyAura ( AuraApplicationMap::iterator &  i,
AuraRemoveMode  removeMode 
)
4831{
4832 AuraApplication* aurApp = i->second;
4833 ASSERT(aurApp);
4834 ASSERT(!aurApp->GetRemoveMode());
4835 ASSERT(aurApp->GetTarget() == this);
4836
4837 aurApp->SetRemoveMode(removeMode);
4838 Aura* aura = aurApp->GetBase();
4839 LOG_DEBUG("spells.aura", "Aura {} now is remove mode {}", aura->GetId(), removeMode);
4840
4841 // dead loop is killing the server probably
4842 ASSERT(m_removedAurasCount < 0xFFFFFFFF);
4843
4845
4846 Unit* caster = aura->GetCaster();
4847
4848 // Remove all pointers from lists here to prevent possible pointer invalidation on spellcast/auraapply/auraremove
4849 m_appliedAuras.erase(i);
4850
4851 // xinef: do not insert our application to interruptible list if application target is not the owner (area auras)
4852 // xinef: event if it gets removed, it will be reapplied in a second
4853 if (aura->GetSpellInfo()->AuraInterruptFlags && this == aura->GetOwner())
4854 {
4855 m_interruptableAuras.remove(aurApp);
4857 }
4858
4859 bool auraStateFound = false;
4860 AuraStateType auraState = aura->GetSpellInfo()->GetAuraState();
4861 if (auraState)
4862 {
4863 bool canBreak = false;
4864 // Get mask of all aurastates from remaining auras
4865 for (AuraStateAurasMap::iterator itr = m_auraStateAuras.lower_bound(auraState); itr != m_auraStateAuras.upper_bound(auraState) && !(auraStateFound && canBreak);)
4866 {
4867 if (itr->second == aurApp)
4868 {
4869 m_auraStateAuras.erase(itr);
4870 itr = m_auraStateAuras.lower_bound(auraState);
4871 canBreak = true;
4872 continue;
4873 }
4874 auraStateFound = true;
4875 ++itr;
4876 }
4877 }
4878
4879 aurApp->_Remove();
4880 aura->_UnapplyForTarget(this, caster, aurApp);
4881
4882 // remove effects of the spell - needs to be done after removing aura from lists
4883 for (uint8 itr = 0; itr < MAX_SPELL_EFFECTS; ++itr)
4884 {
4885 if (aurApp->HasEffect(itr))
4886 aurApp->_HandleEffect(itr, false);
4887 }
4888
4889 // all effect mustn't be applied
4890 ASSERT(!aurApp->GetEffectMask());
4891
4892 // Remove totem at next update if totem loses its aura
4893 if (aurApp->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE && IsTotem() && GetGUID() == aura->GetCasterGUID())
4894 {
4895 if (ToTotem()->GetSpell() == aura->GetId() && ToTotem()->GetTotemType() == TOTEM_PASSIVE)
4897 }
4898
4899 // Remove aurastates only if needed and were not found
4900 if (auraState)
4901 {
4902 if (!auraStateFound)
4903 ModifyAuraState(auraState, false);
4904 else
4905 {
4906 // update for casters, some shouldn't 'see' the aura state
4907 uint32 aStateMask = (1 << (auraState - 1));
4908 if ((aStateMask & PER_CASTER_AURA_STATE_MASK) != 0)
4910 }
4911 }
4912
4913 aura->HandleAuraSpecificMods(aurApp, caster, false, false);
4914
4915 // only way correctly remove all auras from list
4916 //if (removedAuras != m_removedAurasCount) new aura may be added
4917 i = m_appliedAuras.begin();
4918
4919 sScriptMgr->OnAuraRemove(this, aurApp, removeMode);
4920
4921 if (this->ToCreature() && this->ToCreature()->IsAIEnabled)
4922 this->ToCreature()->AI()->OnAuraRemove(aurApp, removeMode);
4923}
@ AURA_REMOVE_BY_EXPIRE
Definition SpellAuraDefines.h:395
@ TOTEM_PASSIVE
Definition Totem.h:25
Unit * GetTarget() const
Definition SpellAuras.h:61
void SetRemoveMode(AuraRemoveMode mode)
Definition SpellAuras.h:72
void _Remove()
Definition SpellAuras.cpp:94
bool HasEffect(uint8 effect) const
Definition SpellAuras.h:67
virtual void _UnapplyForTarget(Unit *target, Unit *caster, AuraApplication *auraApp)
Definition SpellAuras.cpp:454
virtual void OnAuraRemove(AuraApplication *, AuraRemoveMode)
Definition CreatureAI.h:268
CreatureAI * AI() const
Definition Creature.h:144
void setDeathState(DeathState s, bool despawn=false) override
A creature can be in 4 different states: Alive, JustDied, Corpse, and JustRespawned....
Definition TemporarySummon.cpp:400
Totem * ToTotem()
Definition Unit.h:730
void UpdateInterruptMask()
Definition Unit.cpp:886
bool IsTotem() const
Definition Unit.h:799

References AuraApplication::_HandleEffect(), AuraApplication::_Remove(), Aura::_UnapplyForTarget(), Creature::AI(), ASSERT, AURA_REMOVE_BY_EXPIRE, SpellInfo::AuraInterruptFlags, Object::ForceValuesUpdateAtIndex(), SpellInfo::GetAuraState(), AuraApplication::GetBase(), Aura::GetCaster(), Aura::GetCasterGUID(), AuraApplication::GetEffectMask(), Object::GetGUID(), Aura::GetId(), Aura::GetOwner(), AuraApplication::GetRemoveMode(), Aura::GetSpellInfo(), AuraApplication::GetTarget(), Aura::HandleAuraSpecificMods(), AuraApplication::HasEffect(), IsAIEnabled, IsTotem(), JustDied, LOG_DEBUG, m_appliedAuras, m_auraStateAuras, m_interruptableAuras, m_removedAurasCount, MAX_SPELL_EFFECTS, ModifyAuraState(), CreatureAI::OnAuraRemove(), PER_CASTER_AURA_STATE_MASK, Minion::setDeathState(), AuraApplication::SetRemoveMode(), sScriptMgr, Object::ToCreature(), TOTEM_PASSIVE, ToTotem(), UNIT_FIELD_AURASTATE, and UpdateInterruptMask().

Referenced by Aura::_Remove(), _UnapplyAura(), RemoveAllAuras(), RemoveAllAurasExceptType(), RemoveAllAurasOnDeath(), RemoveAllAurasRequiringDeadTarget(), RemoveAura(), and RemoveEvadeAuras().

◆ _UnregisterDynObject()

void Unit::_UnregisterDynObject ( DynamicObject dynObj)
6521{
6522 m_dynObj.remove(dynObj);
6523}

References m_dynObj.

Referenced by DynamicObject::UnbindFromCaster().

◆ _UpdateAutoRepeatSpell()

void Unit::_UpdateAutoRepeatSpell ( )
protected
4075{
4076 SpellInfo const* spellProto = nullptr;
4078 {
4080 }
4081
4082 if (!spellProto)
4083 {
4084 return;
4085 }
4086
4087 static uint32 const HUNTER_AUTOSHOOT = 75;
4088
4089 // Check "realtime" interrupts
4090 if ((IsPlayer() && ToPlayer()->isMoving() && spellProto->Id != HUNTER_AUTOSHOOT) || IsNonMeleeSpellCast(false, false, true, spellProto->Id == HUNTER_AUTOSHOOT))
4091 {
4092 // cancel wand shoot
4093 if (spellProto->Id != HUNTER_AUTOSHOOT)
4095 m_AutoRepeatFirstCast = true;
4096 return;
4097 }
4098
4099 // Apply delay (Hunter's autoshoot not affected)
4100 if (m_AutoRepeatFirstCast && getAttackTimer(RANGED_ATTACK) < 500 && spellProto->Id != HUNTER_AUTOSHOOT)
4101 {
4103 }
4104
4105 m_AutoRepeatFirstCast = false;
4106
4107 // Check for ranged attack timer
4109 {
4111 if (result != SPELL_CAST_OK)
4112 {
4113 if (spellProto->Id != HUNTER_AUTOSHOOT)
4114 {
4116 }
4117
4118 return;
4119 }
4120
4121 // We want to shoot
4122 Spell* spell = new Spell(this, spellProto, TRIGGERED_FULL_MASK);
4123 spell->prepare(&(m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_targets));
4124
4125 // Reset attack
4127
4128 // Blizzlike: Reset melee swing timers when performing ranged attack
4131 }
4132}
SpellCastResult
Definition SharedDefines.h:936
@ SPELL_CAST_OK
Definition SharedDefines.h:1126
@ TRIGGERED_FULL_MASK
Will return SPELL_FAILED_DONT_REPORT in CheckCast functions.
Definition SpellDefines.h:150
@ CURRENT_AUTOREPEAT_SPELL
Definition Unit.h:558
Definition Spell.h:298
SpellCastResult prepare(SpellCastTargets const *targets, AuraEffect const *triggeredByAura=nullptr)
Definition Spell.cpp:3404
SpellCastResult CheckCast(bool strict, uint32 *param1=nullptr, uint32 *param2=nullptr)
Definition Spell.cpp:5610
SpellInfo const *const m_spellInfo
Definition Spell.h:535
void InterruptSpell(CurrentSpellTypes spellType, bool withDelayed=true, bool withInstant=true, bool bySelf=false)
Definition Unit.cpp:4255
bool IsNonMeleeSpellCast(bool withDelayed, bool skipChanneled=false, bool skipAutorepeat=false, bool isAutoshoot=false, bool skipInstant=true) const
Definition Unit.cpp:4297
void setAttackTimer(WeaponAttackType type, int32 time)
Definition Unit.h:885
bool isMoving() const
Definition Unit.h:1709
int32 getAttackTimer(WeaponAttackType type) const
Definition Unit.h:887
bool isAttackReady(WeaponAttackType type=BASE_ATTACK) const
Definition Unit.h:888
void resetAttackTimer(WeaponAttackType type=BASE_ATTACK)
Definition Unit.cpp:762

References BASE_ATTACK, Spell::CheckCast(), CURRENT_AUTOREPEAT_SPELL, getAttackTimer(), SpellInfo::Id, InterruptSpell(), isAttackReady(), isMoving(), IsNonMeleeSpellCast(), Object::IsPlayer(), m_AutoRepeatFirstCast, m_currentSpells, Spell::m_spellInfo, OFF_ATTACK, Spell::prepare(), RANGED_ATTACK, resetAttackTimer(), setAttackTimer(), SPELL_CAST_OK, Object::ToPlayer(), and TRIGGERED_FULL_MASK.

Referenced by _UpdateSpells().

◆ _UpdateSpells()

void Unit::_UpdateSpells ( uint32  time)
protected
4017{
4020
4021 // remove finished spells from current pointers
4022 for (uint32 i = 0; i < CURRENT_MAX_SPELL; ++i)
4023 {
4024 if (m_currentSpells[i] && m_currentSpells[i]->getState() == SPELL_STATE_FINISHED)
4025 {
4027 m_currentSpells[i] = nullptr; // remove pointer
4028 }
4029 }
4030
4031 // m_auraUpdateIterator can be updated in indirect called code at aura remove to skip next planned to update but removed auras
4033 {
4034 Aura* i_aura = m_auraUpdateIterator->second;
4035 ++m_auraUpdateIterator; // need shift to next for allow update if need into aura update
4036 i_aura->UpdateOwner(time, this);
4037 }
4038
4039 // remove expired auras - do that after updates(used in scripts?)
4040 for (AuraMap::iterator i = m_ownedAuras.begin(); i != m_ownedAuras.end();)
4041 {
4042 if (i->second->IsExpired())
4044 else if (i->second->GetSpellInfo()->IsChanneled() && i->second->GetCasterGUID() != GetGUID() && !ObjectAccessor::GetWorldObject(*this, i->second->GetCasterGUID()))
4045 RemoveOwnedAura(i, AURA_REMOVE_BY_CANCEL); // remove channeled auras when caster is not on the same map
4046 else
4047 ++i;
4048 }
4049
4050 for (VisibleAuraMap::iterator itr = m_visibleAuras.begin(); itr != m_visibleAuras.end(); ++itr)
4051 if (itr->second->IsNeedClientUpdate())
4052 itr->second->ClientUpdate();
4053
4055
4056 if (!m_gameObj.empty())
4057 {
4058 for (GameObjectList::iterator itr = m_gameObj.begin(); itr != m_gameObj.end();)
4059 {
4060 if (GameObject* go = ObjectAccessor::GetGameObject(*this, *itr))
4061 if (!go->isSpawned())
4062 {
4063 go->SetOwnerGUID(ObjectGuid::Empty);
4064 go->SetRespawnTime(0);
4065 go->Delete();
4066 m_gameObj.erase(itr++);
4067 continue;
4068 }
4069 ++itr;
4070 }
4071 }
4072}
@ AURA_REMOVE_BY_CANCEL
Definition SpellAuraDefines.h:393
@ SPELL_STATE_FINISHED
Definition Spell.h:239
void UpdateOwner(uint32 diff, WorldObject *owner)
Definition SpellAuras.cpp:698
Definition GameObject.h:120
void RemoveOwnedAura(AuraMap::iterator &i, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:4978
void _UpdateAutoRepeatSpell()
Definition Unit.cpp:4074
VisibleAuraMap m_visibleAuras
Definition Unit.h:2183
GameObject * GetGameObject(WorldObject const &u, ObjectGuid const &guid)
Definition ObjectAccessor.cpp:184
WorldObject * GetWorldObject(WorldObject const &, ObjectGuid const &guid)
Definition ObjectAccessor.cpp:115

References _DeleteRemovedAuras(), _UpdateAutoRepeatSpell(), AURA_REMOVE_BY_CANCEL, AURA_REMOVE_BY_EXPIRE, CURRENT_AUTOREPEAT_SPELL, CURRENT_MAX_SPELL, ObjectGuid::Empty, ObjectAccessor::GetGameObject(), Object::GetGUID(), ObjectAccessor::GetWorldObject(), m_auraUpdateIterator, m_currentSpells, m_gameObj, m_ownedAuras, m_visibleAuras, RemoveOwnedAura(), Spell::SetReferencedFromCurrent(), SPELL_STATE_FINISHED, and Aura::UpdateOwner().

Referenced by Update().

◆ AddAura() [1/2]

Aura * Unit::AddAura ( SpellInfo const *  spellInfo,
uint8  effMask,
Unit target 
)
15148{
15149 if (!spellInfo)
15150 return nullptr;
15151
15152 if (target->IsImmunedToSpell(spellInfo, effMask, this))
15153 return nullptr;
15154
15155 for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
15156 {
15157 if (!(effMask & (1 << i)))
15158 continue;
15159 if (target->IsImmunedToSpellEffect(spellInfo, i, this))
15160 effMask &= ~(1 << i);
15161 }
15162
15163 if (Aura* aura = Aura::TryRefreshStackOrCreate(spellInfo, effMask, target, this))
15164 {
15165 aura->ApplyForTargets();
15166 return aura;
15167 }
15168 return nullptr;
15169}
static Aura * TryRefreshStackOrCreate(SpellInfo const *spellproto, uint8 tryEffMask, WorldObject *owner, Unit *caster, int32 *baseAmount=nullptr, Item *castItem=nullptr, ObjectGuid casterGUID=ObjectGuid::Empty, bool *refresh=nullptr, bool periodicReset=false)
Definition SpellAuras.cpp:265
virtual bool IsImmunedToSpell(SpellInfo const *spellInfo, Spell const *spell=nullptr)
Definition Unit.cpp:10026
virtual bool IsImmunedToSpellEffect(SpellInfo const *spellInfo, uint32 index, Unit const *caster=nullptr) const
Definition Unit.cpp:10117

References Aura::ApplyForTargets(), IsImmunedToSpell(), IsImmunedToSpellEffect(), MAX_SPELL_EFFECTS, and Aura::TryRefreshStackOrCreate().

◆ AddAura() [2/2]

Aura * Unit::AddAura ( uint32  spellId,
Unit target 
)
15133{
15134 if (!target)
15135 return nullptr;
15136
15137 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
15138 if (!spellInfo)
15139 return nullptr;
15140
15141 if (!target->IsAlive() && !spellInfo->HasAttribute(SPELL_ATTR0_PASSIVE) && !spellInfo->HasAttribute(SPELL_ATTR2_ALLOW_DEAD_TARGET))
15142 return nullptr;
15143
15144 return AddAura(spellInfo, MAX_EFFECT_MASK, target);
15145}
#define MAX_EFFECT_MASK
Definition DBCStructure.h:1638
@ SPELL_ATTR2_ALLOW_DEAD_TARGET
Definition SharedDefines.h:444
@ SPELL_ATTR0_PASSIVE
Definition SharedDefines.h:376
#define sSpellMgr
Definition SpellMgr.h:836
bool HasAttribute(SpellAttr0 attribute) const
Definition SpellInfo.h:441
Aura * AddAura(uint32 spellId, Unit *target)
Definition Unit.cpp:15132

References AddAura(), SpellInfo::HasAttribute(), IsAlive(), MAX_EFFECT_MASK, SPELL_ATTR0_PASSIVE, SPELL_ATTR2_ALLOW_DEAD_TARGET, and sSpellMgr.

Referenced by boss_flame_leviathan::ActivateTowers(), AddAura(), boss_grand_champion::boss_grand_championAI::AddCreatureAddonAuras(), Pet::AddToWorld(), Player::ApplyItemDependentAuras(), npc_ritual_channeler::npc_ritual_channelerAI::AttackStart(), npc_pet_dk_ebon_gargoyle::AttackStart(), boss_anzu::boss_anzu(), boss_the_lich_king::boss_the_lich_kingAI::boss_the_lich_kingAI(), boss_twilight_halion::boss_twilight_halionAI::boss_twilight_halionAI(), npc_auriaya_feral_defender::DoAction(), UnitAI::DoAddAuraToAllHostilePlayers(), Spell::DoTriggersOnSpellHit(), npc_anubisath_sentinel::aqsentinelAI::GainSentinelAbility(), AuraEffect::HandleAuraDummy(), Aura::HandleAuraSpecificMods(), deserter_commandscript::HandleDeserterAdd(), gm_commandscript::HandleGMVisibleCommand(), spell_mirkblood_blood_mirror_target_picker::HandleHit(), spell_oculus_rider_aura::HandleOnEffectApply(), spell_transitus_shield_beam_aura::HandleOnEffectApply(), npc_pet_dk_dancing_rune_weapon::InitializeAI(), npc_pet_mage_mirror_image::InitializeAI(), npc_pallid_horror::InitializeAI(), Guardian::InitStatsForLevel(), boss_gahzranka::JustEngagedWith(), boss_freya::JustEngagedWith(), boss_yoggsaron_keeper::JustEngagedWith(), npc_dalaran_warrior::npc_dalaran_warriorAI::JustEngagedWith(), boss_shirrak_the_dead_watcher::JustEngagedWith(), boss_kelidan_the_breaker::JustEngagedWith(), boss_prince_keleseth_icc::boss_prince_kelesethAI::JustEngagedWith(), boss_prince_taldaram_icc::boss_prince_taldaramAI::JustEngagedWith(), boss_prince_valanar_icc::boss_prince_valanarAI::JustEngagedWith(), boss_hadronox::JustSummoned(), npc_thrall_bfu::npc_thrall_bfuAI::JustSummoned(), Creature::LoadCreaturesAddon(), npc_brew_bubble::MoveInLineOfSight(), npc_pet_gen_plump_turkey::MovementInform(), instance_halls_of_reflection::OnCreatureCreate(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnCreatureCreate(), spell_yogg_saron_empowered_aura::OnPeriodic(), instance_stratholme::instance_stratholme_InstanceMapScript::OnPlayerEnter(), BattlefieldWG::OnPlayerEnterZone(), AreaTrigger_at_area_52_entrance::OnTrigger(), Player::ProcessDelayedOperations(), npc_lake_frog::npc_lake_frogAI::ReceiveEmote(), npc_corrupted_totem::Reset(), npc_troll_volunteer::npc_troll_volunteerAI::Reset(), npc_vengeful_shade::npc_vengeful_shadeAI::Reset(), boss_the_lich_king::boss_the_lich_kingAI::Reset(), boss_magus_telestra::Reset(), npc_auriaya_feral_defender::Reset(), npc_hodirs_fury::Reset(), npc_mimirons_inferno::Reset(), boss_yoggsaron_immortal_guardian::Reset(), boss_archavon::boss_archavonAI::Reset(), boss_emalon::boss_emalonAI::Reset(), boss_koralon::boss_koralonAI::Reset(), boss_toravon::boss_toravonAI::Reset(), npc_dalaran_mage::npc_dalaran_mageAI::Reset(), npc_pet_gen_argent_pony_bridle::Reset(), Player::SendInitialPacketsAfterAddToMap(), npc_corrupted_totem::SetAura(), SetAuraStack(), Player::SetGMVisible(), Player::SetIsSpectator(), npc_artorius::npc_artoriusAI::SpellHit(), npc_simone::npc_simoneAI::SpellHit(), npc_nelson::npc_nelsonAI::SpellHit(), npc_overlord_drakuru_betrayal::SpellHitTarget(), boss_netherspite::SwitchToPortalPhase(), spell_pal_immunities::TriggerDebuffs(), boss_gyth::UpdateAI(), boss_pyroguard_emberseer::UpdateAI(), npc_tiger_matriarch_credit::npc_tiger_matriarch_creditAI::UpdateAI(), npc_tiger_matriarch::npc_tiger_matriarchAI::UpdateAI(), boss_sister_svalna::boss_sister_svalnaAI::UpdateAI(), npc_boss_gothik_minion::npc_boss_gothik_minionAI::UpdateAI(), boss_freya_elder_brightleaf::UpdateAI(), npc_pet_gen_toxic_wasteling::UpdateAI(), boss_netherspite::UpdatePortals(), and npc_emily::npc_emilyAI::WaypointReached().

◆ AddComboPointHolder()

void Unit::AddComboPointHolder ( Unit unit)
inline
1023{ m_ComboPointHolders.insert(unit); }
std::unordered_set< Unit * > m_ComboPointHolders
Definition Unit.h:2242

References m_ComboPointHolders.

Referenced by AddComboPoints().

◆ AddComboPoints() [1/2]

void Unit::AddComboPoints ( int8  count)
inline
1020{ AddComboPoints(nullptr, count); }
void AddComboPoints(Unit *target, int8 count)
Definition Unit.cpp:13242

References AddComboPoints().

Referenced by AddComboPoints().

◆ AddComboPoints() [2/2]

void Unit::AddComboPoints ( Unit target,
int8  count 
)
13243{
13244 if (!count)
13245 {
13246 return;
13247 }
13248
13249 if (target && target != m_comboTarget)
13250 {
13251 if (m_comboTarget)
13252 {
13254 }
13255
13256 m_comboTarget = target;
13257 m_comboPoints = count;
13258 target->AddComboPointHolder(this);
13259 }
13260 else
13261 {
13262 m_comboPoints = std::max<int8>(std::min<int8>(m_comboPoints + count, 5), 0);
13263 }
13264
13266}
void SendComboPoints()
Definition Unit.cpp:13285
void AddComboPointHolder(Unit *unit)
Definition Unit.h:1023
void RemoveComboPointHolder(Unit *unit)
Definition Unit.h:1024

References AddComboPointHolder(), m_comboPoints, m_comboTarget, RemoveComboPointHolder(), and SendComboPoints().

Referenced by Spell::_handle_finish_phase(), AuraEffect::HandleAuraRetainComboPoints(), and ProcSkillsAndReactives().

◆ AddExtraAttacks()

void Unit::AddExtraAttacks ( uint32  count)
2952{
2954 if (!targetGUID)
2955 {
2956 if (ObjectGuid selection = GetTarget())
2957 {
2958 targetGUID = selection; // Spell was cast directly (not triggered by aura)
2959 }
2960 else
2961 return;
2962 }
2963
2964 extraAttacksTargets[targetGUID] += count;
2965}
std::unordered_map< ObjectGuid, uint32 > extraAttacksTargets
Definition Unit.h:2252
ObjectGuid _lastDamagedTargetGuid
Definition Unit.h:2253
ObjectGuid GetTarget() const
Definition Unit.h:861

References _lastDamagedTargetGuid, extraAttacksTargets, and GetTarget().

Referenced by Spell::EffectAddExtraAttacks().

◆ AddExtraUnitMovementFlag()

void Unit::AddExtraUnitMovementFlag ( uint16  f)
inline
778{ m_movementInfo.flags2 |= f; }
MovementInfo m_movementInfo
Definition Object.h:698
uint16 flags2
Definition Object.h:292

References MovementInfo::flags2, and WorldObject::m_movementInfo.

Referenced by Vehicle::InitMovementInfoForBase().

◆ AddGameObject()

void Unit::AddGameObject ( GameObject gameObj)
6577{
6578 if (!gameObj || gameObj->GetOwnerGUID())
6579 return;
6580
6581 m_gameObj.push_back(gameObj->GetGUID());
6582 gameObj->SetOwnerGUID(GetGUID());
6583
6584 if (IsPlayer() && gameObj->GetSpellId())
6585 {
6586 SpellInfo const* createBySpell = sSpellMgr->GetSpellInfo(gameObj->GetSpellId());
6587 // Need disable spell use for owner
6588 if (createBySpell && createBySpell->IsCooldownStartedOnEvent())
6589 // note: item based cooldowns and cooldown spell mods with charges ignored (unknown existing cases)
6590 ToPlayer()->AddSpellAndCategoryCooldowns(createBySpell, 0, nullptr, true);
6591 }
6592}
uint32 GetSpellId() const
Definition GameObject.h:182
void SetOwnerGUID(ObjectGuid owner)
Definition GameObject.h:164
ObjectGuid GetOwnerGUID() const
Definition GameObject.h:174
void AddSpellAndCategoryCooldowns(SpellInfo const *spellInfo, uint32 itemId, Spell *spell=nullptr, bool infinityCooldown=false)
Definition Player.cpp:10843
bool IsCooldownStartedOnEvent() const
Definition SpellInfo.cpp:1244

References Player::AddSpellAndCategoryCooldowns(), Object::GetGUID(), Object::GetGUID(), GameObject::GetOwnerGUID(), GameObject::GetSpellId(), SpellInfo::IsCooldownStartedOnEvent(), Object::IsPlayer(), m_gameObj, GameObject::SetOwnerGUID(), sSpellMgr, and Object::ToPlayer().

Referenced by Spell::EffectDuel(), Spell::EffectSummonObject(), Spell::EffectTransmitted(), npc_midsummer_bonfire::Ignite(), and WorldObject::SummonGameObject().

◆ AddInterruptMask()

void Unit::AddInterruptMask ( uint32  mask)
inline
1604{ m_interruptMask |= mask; }

References m_interruptMask.

Referenced by _CreateAuraApplication(), and Spell::handle_immediate().

◆ AddPetAura()

void Unit::AddPetAura ( PetAura const *  petSpell)
13714{
13715 if (!IsPlayer())
13716 return;
13717
13718 m_petAuras.insert(petSpell);
13719 if (Pet* pet = ToPlayer()->GetPet())
13720 pet->CastPetAura(petSpell);
13721 else if (Unit* charm = GetCharm())
13722 charm->CastPetAura(petSpell);
13723}
Definition Pet.h:41
Unit * GetCharm() const
Definition Unit.cpp:7781
PetAuraSet m_petAuras
Definition Unit.h:2095
Pet * GetPet(WorldObject const &, ObjectGuid const &guid)
Definition ObjectAccessor.cpp:215

References GetCharm(), Object::IsPlayer(), m_petAuras, and Object::ToPlayer().

Referenced by Spell::EffectDummy(), and AuraEffect::HandleAuraDummy().

◆ AddPlayerToVision()

void Unit::AddPlayerToVision ( Player player)
8293{
8294 if (m_sharedVision.empty())
8295 setActive(true);
8296
8297 m_sharedVision.push_back(player);
8298 player->m_isInSharedVisionOf.insert(this);
8299}
void setActive(bool isActiveObject)
Definition Object.cpp:1082

References Player::m_isInSharedVisionOf, m_sharedVision, and WorldObject::setActive().

◆ AddPointedBy()

void Unit::AddPointedBy ( SafeUnitPointer sup)
inline
2022{ SafeUnitPointerSet.insert(sup); }
std::set< SafeUnitPointer * > SafeUnitPointerSet
Definition Unit.h:2105

References SafeUnitPointerSet.

Referenced by SafeUnitPointer::SetPointedTo().

◆ AddSpellCooldown()

virtual void Unit::AddSpellCooldown ( uint32  ,
uint32  ,
uint32  ,
bool  needSendToClient = false,
bool  forceSendToSpectator = false 
)
inlinevirtual

Reimplemented in Player, and Creature.

1338 {
1339 // workaround for unused parameters
1340 (void)needSendToClient;
1341 (void)forceSendToSpectator;
1342 }

Referenced by spell_yogg_saron_protective_gaze_aura::Absorb(), Spell::DoSpellHitOnUnit(), spell_sha_earth_shield::HandleProc(), spell_warr_sweeping_strikes::HandleProc(), and spell_dk_wandering_plague_aura::HandleProc().

◆ AddThreat()

void Unit::AddThreat ( Unit victim,
float  fThreat,
SpellSchoolMask  schoolMask = SPELL_SCHOOL_MASK_NORMAL,
SpellInfo const *  threatSpell = nullptr 
)
11455{
11456 // Only mobs can manage threat lists
11458 {
11459 m_threatManager.AddThreat(victim, fThreat, threatSpell);
11460 }
11461}
@ UNIT_STATE_EVADE
Definition UnitDefines.h:194
void AddThreat(Unit *target, float amount, SpellInfo const *spell=nullptr, bool ignoreModifiers=false, bool ignoreRedirects=false)
== AFFECT MY THREAT LIST ==
Definition ThreatManager.cpp:388
bool HasUnitState(const uint32 f) const
Definition Unit.h:736
bool CanHaveThreatList(bool skipAliveCheck=false) const
Definition Unit.cpp:11435

References ThreatManager::AddThreat(), CanHaveThreatList(), HasUnitState(), m_threatManager, and UNIT_STATE_EVADE.

Referenced by npc_ritual_channeler::npc_ritual_channelerAI::AttackStart(), boss_shade_of_aran::AttackStart(), boss_alythess::AttackStart(), npc_vengeful_shade::npc_vengeful_shadeAI::AttackStart(), boss_kelthuzad_minion::boss_kelthuzad_minionAI::AttackStart(), npc_capernian::AttackStart(), npc_zuljin_vortex::ChangeToNewPlayer(), npc_dirt_mound::ChaseNewTarget(), boss_buru::ChaseNewVictim(), npc_dark_nucleus::npc_dark_nucleusAI::DamageTaken(), boss_prince_keleseth_icc::boss_prince_kelesethAI::DamageTaken(), boss_prince_taldaram_icc::boss_prince_taldaramAI::DamageTaken(), boss_prince_valanar_icc::boss_prince_valanarAI::DamageTaken(), boss_yoggsaron_crusher_tentacle::DamageTaken(), boss_thorim::DamageTaken(), DealDamage(), npc_ball_of_flame::npc_ball_of_flameAI::DoAction(), npc_living_constellation::DoAction(), boss_sapphiron::boss_sapphironAI::EnterCombatSelfFunction(), npc_raging_flames::FixateRandomTarget(), npc_torloth_the_magnificent::npc_torloth_the_magnificentAI::HandleAnimation(), AuraEffect::HandleAuraDummy(), spell_morogrim_tidewalker_water_globule_new_target::HandleDummy(), spell_teron_gorefiend_shadowy_construct::HandleEffectApply(), AuraEffect::HandlePeriodicManaLeechAuraTick(), spell_frostwarden_handler_focus_fire::HandleScript(), spell_the_lich_king_vile_spirit_move_target_search::HandleScript(), spell_pursue::HandleScript(), npc_supremus_punch_invisible_stalker::IsSummonedBy(), npc_tiger_matriarch::npc_tiger_matriarchAI::IsSummonedBy(), npc_little_ooze::npc_little_oozeAI::IsSummonedBy(), npc_malchezaar_axe::JustEngagedWith(), boss_kagani_nightstrike::JustEngagedWith(), boss_buru::JustEngagedWith(), npc_daphne_stilwell::npc_daphne_stilwellAI::JustSummoned(), npc_hor_lich_king::JustSummoned(), boss_curator::JustSummoned(), boss_sacrolash::JustSummoned(), boss_devourer_of_souls::JustSummoned(), npc_akama_illidan::JustSummoned(), boss_nethermancer_sepethrea::JustSummoned(), npc_thrall_bfu::npc_thrall_bfuAI::JustSummoned(), boss_shade_of_akama::MovementInform(), npc_gunship_mage::npc_gunship_mageAI::MovementInform(), boss_leotheras_the_blind::MoveToTargetIfOutOfRange(), npc_pet_mage_mirror_image::MySelectNextTarget(), boss_razorgore::OnCharmed(), RemoveCharmedBy(), npc_dark_fiend::Reset(), npc_swarm_scarab::npc_swarm_scarabAI::Reset(), boss_skarvald_the_constructor::Reset(), boss_dalronn_the_controller::Reset(), boss_warbringer_omrogg::ScheduleBurningPhase(), boss_romulo::ScheduleCombat(), npc_thaladred::ScheduleEvents(), boss_warbringer_omrogg::ScheduleNonBurningPhase(), boss_supremus::SchedulePhase(), boss_thorim_arena_npcs::SelectT(), npc_varian_wrynn::npc_varian_wrynnAI::SpawnWave(), npc_thrall_bfu::npc_thrall_bfuAI::SpawnWave(), boss_eck::SpellHitTarget(), boss_darkmaster_gandling::boss_darkmaster_gandlingAI::SpellHitTarget(), spell_putricide_ooze_channel::StartAttack(), npc_vaelastrasz_the_red::UpdateAI(), npc_varian_wrynn::npc_varian_wrynnAI::UpdateAI(), npc_thrall_bfu::npc_thrall_bfuAI::UpdateAI(), boss_sartura::UpdateAI(), npc_sartura_royal_guard::UpdateAI(), npc_toc5_grand_champion_minion::npc_toc5_grand_champion_minionAI::UpdateAI(), boss_grand_champion::boss_grand_championAI::UpdateAI(), npc_fel_infernal::npc_fel_infernalAI::UpdateAI(), npc_shadowy_mercenary::UpdateAI(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::UpdateAI(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::UpdateAI(), npc_gunship_boarding_addAI::UpdateAI(), npc_gunship_gunner::npc_gunship_gunnerAI::UpdateAI(), npc_little_ooze::npc_little_oozeAI::UpdateAI(), boss_patchwerk::boss_patchwerkAI::UpdateAI(), boss_thaddius_summon::boss_thaddius_summonAI::UpdateAI(), npc_molten_golem::UpdateAI(), boss_skarvald_the_constructor::UpdateAI(), npc_frozen_orb::npc_frozen_orbAI::UpdateAI(), and npc_hourglass_of_eternity::npc_hourglass_of_eternityAI::UpdateAI().

◆ AddToWorld()

void Unit::AddToWorld ( )
overridevirtual

Reimplemented from Object.

12553{
12554 if (!IsInWorld())
12555 {
12557 }
12558}
void AddToWorld() override
Definition Object.cpp:1214

References WorldObject::AddToWorld(), and Object::IsInWorld().

Referenced by Creature::AddToWorld(), Pet::AddToWorld(), and Player::AddToWorld().

◆ AddUnitMovementFlag()

◆ AddUnitState()

void Unit::AddUnitState ( uint32  f)
inline
735{ m_state |= f; }

References m_state.

Referenced by CreatureAI::_EnterEvadeMode(), _ExitVehicle(), RandomMovementGenerator< T >::_setRandomLocation(), MotionTransport::AddPassenger(), Attack(), boss_prince_keleseth_icc::boss_prince_kelesethAI::boss_prince_kelesethAI(), boss_prince_taldaram_icc::boss_prince_taldaramAI::boss_prince_taldaramAI(), boss_prince_valanar_icc::boss_prince_valanarAI::boss_prince_valanarAI(), Creature::Create(), MotionTransport::CreateNPCPassenger(), boss_black_knight::boss_black_knightAI::DamageTaken(), boss_thorim::DisableThorim(), boss_nightbane::DoAction(), WaypointMovementGenerator< Creature >::DoInitialize(), RandomMovementGenerator< T >::DoInitialize(), ChaseMovementGenerator< T >::DoInitialize(), ChaseMovementGenerator< T >::DoInitialize(), FlightPathMovementGenerator::DoReset(), boss_yoggsaron_sara::EnableSara(), boss_jindo::EnterEvadeMode(), SmartAI::EnterEvadeMode(), Creature::FocusTarget(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::GoToMinchar(), AuraEffect::HandleAuraModSchoolImmunity(), debug_commandscript::HandleDebugUnitStateCommand(), AuraEffect::HandleFeignDeath(), WorldSession::HandlePetCastSpellOpcode(), RotateMovementGenerator::Initialize(), DistractMovementGenerator::Initialize(), npc_pet_dk_ebon_gargoyle::InitializeAI(), FormationMovementGenerator::LaunchMovement(), Player::LoadFromDB(), boss_ayamiss::MovementInform(), boss_lady_vashj::MovementInform(), npc_pet_gen_moth::npc_pet_gen_moth(), npc_pet_gen_valkyr_guardian::npc_pet_gen_valkyr_guardian(), npc_pet_gen_wind_rider_cub::npc_pet_gen_wind_rider_cub(), npc_corrupted_totem::Reset(), boss_jedoga_shadowseeker::Reset(), npc_ulduar_mimiron_rocket::Reset(), boss_hungarfen::Reset(), npc_torloth_the_magnificent::npc_torloth_the_magnificentAI::Reset(), SetCharmedBy(), SmartAI::SetCombatMovement(), SetContestedPvP(), SetControlled(), SetCurrentCastedSpell(), Player::setDeathState(), Player::SetIsSpectator(), SetRooted(), boss_urom::boss_uromAI::SpellHit(), WaypointMovementGenerator< Creature >::StartMove(), npc_madrigosa::UpdateAI(), boss_devourer_of_souls::UpdateAI(), boss_krick::boss_krickAI::UpdateAI(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::UpdateAI(), and boss_svala::boss_svalaAI::UpdateAI().

◆ AddUnitTypeMask()

void Unit::AddUnitTypeMask ( uint32  mask)
inline
742{ m_unitTypeMask |= mask; }

References m_unitTypeMask.

◆ ApplyAttackTimePercentMod()

void Unit::ApplyAttackTimePercentMod ( WeaponAttackType  att,
float  val,
bool  apply 
)
13464{
13466
13467 float remainingTimePct = std::max((float)m_attackTimer[att], 0.0f) / (GetAttackTime(att) * m_modAttackSpeedPct[att]);
13468 if (val > 0.f)
13469 {
13471 ApplyPercentModFloatVar(amount, val, !apply);
13472 }
13473 else
13474 {
13476 ApplyPercentModFloatVar(amount, -val, apply);
13477 }
13479 m_attackTimer[att] = uint32(GetAttackTime(att) * m_modAttackSpeedPct[att] * remainingTimePct);
13480}
void ApplyPercentModFloatVar(float &var, float val, bool apply)
Definition Unit.cpp:13458
@ UNIT_FIELD_BASEATTACKTIME
Definition UpdateFields.h:120
constexpr std::underlying_type< E >::type AsUnderlyingType(E enumValue)
Definition Util.h:610
float GetFloatValue(uint16 index) const
Definition Object.cpp:306
void SetFloatValue(uint16 index, float value)
Definition Object.cpp:726
uint32 GetAttackTime(WeaponAttackType att) const
Definition Unit.h:914

References ApplyPercentModFloatVar(), AsUnderlyingType(), GetAttackTime(), Object::GetFloatValue(), m_attackTimer, m_modAttackSpeedPct, Object::SetFloatValue(), and UNIT_FIELD_BASEATTACKTIME.

Referenced by Player::ApplyRatingMod(), AuraEffect::HandleAuraModRangedHaste(), AuraEffect::HandleModAttackSpeed(), AuraEffect::HandleModCombatSpeedPct(), AuraEffect::HandleModMeleeRangedSpeedPct(), AuraEffect::HandleModMeleeSpeedPct(), and AuraEffect::HandleRangedAmmoHaste().

◆ ApplyCastTimePercentMod()

void Unit::ApplyCastTimePercentMod ( float  val,
bool  apply 
)
13483{
13484 float amount = GetFloatValue(UNIT_MOD_CAST_SPEED);
13485
13486 if (val > 0.f)
13487 ApplyPercentModFloatVar(amount, val, !apply);
13488 else
13489 ApplyPercentModFloatVar(amount, -val, apply);
13490
13492}
@ UNIT_MOD_CAST_SPEED
Definition UpdateFields.h:137

References ApplyPercentModFloatVar(), Object::GetFloatValue(), Object::SetFloatValue(), and UNIT_MOD_CAST_SPEED.

Referenced by Player::ApplyRatingMod(), AuraEffect::HandleModCastingSpeed(), and AuraEffect::HandleModCombatSpeedPct().

◆ ApplyDiminishingAura()

void Unit::ApplyDiminishingAura ( DiminishingGroup  group,
bool  apply 
)
11875{
11876 // Checking for existing in the table
11877 for (Diminishing::iterator i = m_Diminishing.begin(); i != m_Diminishing.end(); ++i)
11878 {
11879 if (i->DRGroup != group)
11880 continue;
11881
11882 if (apply)
11883 i->stack += 1;
11884 else if (i->stack)
11885 {
11886 i->stack -= 1;
11887 // Remember time after last aura from group removed
11888 if (i->stack == 0)
11889 i->hitTime = GameTime::GetGameTimeMS().count();
11890 }
11891 break;
11892 }
11893}
Diminishing m_Diminishing
Definition Unit.h:2236
Milliseconds GetGameTimeMS()
Definition GameTime.cpp:43

References GameTime::GetGameTimeMS(), and m_Diminishing.

Referenced by UnitAura::_ApplyForTarget(), and UnitAura::_UnapplyForTarget().

◆ ApplyDiminishingToDuration()

float Unit::ApplyDiminishingToDuration ( DiminishingGroup  group,
int32 duration,
Unit caster,
DiminishingLevels  Level,
int32  limitduration 
)
11796{
11797 // xinef: dont apply diminish to self casts
11798 if (duration == -1 || group == DIMINISHING_NONE)
11799 return 1.0f;
11800
11801 // test pet/charm masters instead pets/charmeds
11802 Unit const* targetOwner = GetOwner();
11803 Unit const* casterOwner = caster->GetOwner();
11804
11805 // Duration of crowd control abilities on pvp target is limited by 10 sec. (2.2.0)
11806 if (limitduration > 0 && duration > limitduration)
11807 {
11808 Unit const* target = targetOwner ? targetOwner : this;
11809 Unit const* source = casterOwner ? casterOwner : caster;
11810
11811 if ((target->IsPlayer()
11813 && source->IsPlayer())
11814 duration = limitduration;
11815 }
11816
11817 float mod = 1.0f;
11818
11819 if (group == DIMINISHING_TAUNT)
11820 {
11822 {
11823 DiminishingLevels diminish = Level;
11824 switch (diminish)
11825 {
11827 break;
11829 mod = 0.65f;
11830 break;
11832 mod = 0.4225f;
11833 break;
11835 mod = 0.274625f;
11836 break;
11838 mod = 0.0f;
11839 break;
11840 default:
11841 break;
11842 }
11843 }
11844 }
11845 // Some diminishings applies to mobs too (for example, Stun)
11847 && ((targetOwner ? (targetOwner->IsPlayer()) : (IsPlayer()))
11848 || (IsCreature() && ToCreature()->HasFlagsExtra(CREATURE_FLAG_EXTRA_ALL_DIMINISH))))
11850 {
11851 DiminishingLevels diminish = Level;
11852 switch (diminish)
11853 {
11855 break;
11857 mod = 0.5f;
11858 break;
11860 mod = 0.25f;
11861 break;
11863 mod = 0.0f;
11864 break;
11865 default:
11866 break;
11867 }
11868 }
11869
11870 duration = int32(duration * mod);
11871 return mod;
11872}
@ CREATURE_FLAG_EXTRA_OBEYS_TAUNT_DIMINISHING_RETURNS
Definition CreatureData.h:65
@ CREATURE_FLAG_EXTRA_ALL_DIMINISH
Definition CreatureData.h:66
@ Level
Requires the player to be at least a specific level.
@ DIMINISHING_NONE
Definition SharedDefines.h:3491
@ DIMINISHING_TAUNT
Definition SharedDefines.h:3509
@ DRTYPE_PLAYER
Definition SharedDefines.h:3484
@ DRTYPE_ALL
Definition SharedDefines.h:3485
DiminishingReturnsType GetDiminishingReturnsGroupType(DiminishingGroup group)
Definition SpellMgr.cpp:292
DiminishingLevels
Definition Unit.h:268
@ DIMINISHING_LEVEL_3
Definition Unit.h:271
@ DIMINISHING_LEVEL_1
Definition Unit.h:269
@ DIMINISHING_LEVEL_4
Definition Unit.h:273
@ DIMINISHING_LEVEL_IMMUNE
Definition Unit.h:272
@ DIMINISHING_LEVEL_TAUNT_IMMUNE
Definition Unit.h:274
@ DIMINISHING_LEVEL_2
Definition Unit.h:270
bool HasFlagsExtra(uint32 flag) const
Definition Creature.h:77

References CREATURE_FLAG_EXTRA_ALL_DIMINISH, CREATURE_FLAG_EXTRA_OBEYS_TAUNT_DIMINISHING_RETURNS, DIMINISHING_LEVEL_1, DIMINISHING_LEVEL_2, DIMINISHING_LEVEL_3, DIMINISHING_LEVEL_4, DIMINISHING_LEVEL_IMMUNE, DIMINISHING_LEVEL_TAUNT_IMMUNE, DIMINISHING_NONE, DIMINISHING_TAUNT, DRTYPE_ALL, DRTYPE_PLAYER, GetDiminishingReturnsGroupType(), GetOwner(), Creature::HasFlagsExtra(), Object::IsCreature(), Object::IsPlayer(), Level, and Object::ToCreature().

Referenced by Spell::DoSpellHitOnUnit().

◆ ApplyEffectModifiers()

float Unit::ApplyEffectModifiers ( SpellInfo const *  spellProto,
uint8  effect_index,
float  value 
) const
11578{
11579 if (Player* modOwner = GetSpellModOwner())
11580 {
11581 modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_ALL_EFFECTS, value);
11582 switch (effect_index)
11583 {
11584 case 0:
11585 modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_EFFECT1, value);
11586 break;
11587 case 1:
11588 modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_EFFECT2, value);
11589 break;
11590 case 2:
11591 modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_EFFECT3, value);
11592 break;
11593 }
11594 }
11595 return value;
11596}
@ SPELLMOD_EFFECT2
Definition SpellDefines.h:88
@ SPELLMOD_ALL_EFFECTS
Definition SpellDefines.h:84
@ SPELLMOD_EFFECT3
Definition SpellDefines.h:99
@ SPELLMOD_EFFECT1
Definition SpellDefines.h:79
Player * GetSpellModOwner() const
Definition Unit.cpp:12966

References GetSpellModOwner(), SpellInfo::Id, SPELLMOD_ALL_EFFECTS, SPELLMOD_EFFECT1, SPELLMOD_EFFECT2, and SPELLMOD_EFFECT3.

Referenced by spell_mage_ice_barrier_aura::CalculateSpellAmount(), spell_mage_ice_barrier::CalculateSpellAmount(), CalculateSpellAmount(), SpellEffectInfo::CalcValue(), and Spell::EffectSchoolDMG().

◆ ApplyResilience()

void Unit::ApplyResilience ( Unit const *  victim,
float *  crit,
int32 damage,
bool  isCrit,
CombatRating  type 
)
static
15197{
15198 // player mounted on multi-passenger mount is also classified as vehicle
15199 if (victim->IsVehicle() && !victim->IsPlayer())
15200 return;
15201
15202 Unit const* target = nullptr;
15203 if (victim->IsPlayer())
15204 target = victim;
15205 else if (victim->IsCreature())
15206 {
15207 if (Unit* owner = victim->GetOwner())
15208 if (owner->IsPlayer())
15209 target = owner;
15210 }
15211
15212 if (!target)
15213 return;
15214
15215 switch (type)
15216 {
15218 // Crit chance reduction works against nonpets
15219 if (crit)
15220 *crit -= target->GetMeleeCritChanceReduction();
15221 if (damage)
15222 {
15223 if (isCrit)
15224 *damage -= target->GetMeleeCritDamageReduction(*damage);
15225 *damage -= target->GetMeleeDamageReduction(*damage);
15226 }
15227 break;
15229 // Crit chance reduction works against nonpets
15230 if (crit)
15231 *crit -= target->GetRangedCritChanceReduction();
15232 if (damage)
15233 {
15234 if (isCrit)
15235 *damage -= target->GetRangedCritDamageReduction(*damage);
15236 *damage -= target->GetRangedDamageReduction(*damage);
15237 }
15238 break;
15240 // Crit chance reduction works against nonpets
15241 if (crit)
15242 *crit -= target->GetSpellCritChanceReduction();
15243 if (damage)
15244 {
15245 if (isCrit)
15246 *damage -= target->GetSpellCritDamageReduction(*damage);
15247 *damage -= target->GetSpellDamageReduction(*damage);
15248 }
15249 break;
15250 default:
15251 break;
15252 }
15253}
@ CR_CRIT_TAKEN_RANGED
Definition Unit.h:238
@ CR_CRIT_TAKEN_SPELL
Definition Unit.h:239
@ CR_CRIT_TAKEN_MELEE
Definition Unit.h:237
float GetSpellCritChanceReduction() const
Definition Unit.h:1272
float GetRangedCritChanceReduction() const
Definition Unit.h:1271
uint32 GetSpellCritDamageReduction(uint32 damage) const
Definition Unit.h:1276
float GetMeleeCritChanceReduction() const
Definition Unit.h:1270
uint32 GetRangedDamageReduction(uint32 damage) const
Definition Unit.h:1264
uint32 GetRangedCritDamageReduction(uint32 damage) const
Definition Unit.h:1275
uint32 GetMeleeCritDamageReduction(uint32 damage) const
Definition Unit.h:1274
uint32 GetSpellDamageReduction(uint32 damage) const
Definition Unit.h:1265
uint32 GetMeleeDamageReduction(uint32 damage) const
Definition Unit.h:1263

References CR_CRIT_TAKEN_MELEE, CR_CRIT_TAKEN_RANGED, CR_CRIT_TAKEN_SPELL, GetMeleeCritChanceReduction(), GetMeleeCritDamageReduction(), GetMeleeDamageReduction(), GetOwner(), GetRangedCritChanceReduction(), GetRangedCritDamageReduction(), GetRangedDamageReduction(), GetSpellCritChanceReduction(), GetSpellCritDamageReduction(), GetSpellDamageReduction(), Object::IsCreature(), Object::IsPlayer(), and IsVehicle().

Referenced by CalculateMeleeDamage(), CalculateSpellDamageTaken(), GetUnitCriticalChance(), spell_valkyr_touch_aura::HandleEffectPeriodic(), AuraEffect::HandlePeriodicDamageAurasTick(), AuraEffect::HandlePeriodicHealthLeechAuraTick(), and SpellTakenCritChance().

◆ ApplySpellImmune()

void Unit::ApplySpellImmune ( uint32  spellId,
uint32  op,
uint32  type,
bool  apply,
SpellImmuneBlockType  blockType = SPELL_BLOCK_TYPE_ALL 
)
10479{
10480 if (apply)
10481 m_spellImmune[op].emplace(type, spellId);
10482 else
10483 {
10484 auto bounds = m_spellImmune[op].equal_range(type);
10485 for (auto itr = bounds.first; itr != bounds.second;)
10486 {
10487 if (itr->second == spellId)
10488 itr = m_spellImmune[op].erase(itr);
10489 else
10490 ++itr;
10491 }
10492 }
10493}
SpellImmuneContainer m_spellImmune[MAX_SPELL_IMMUNITY]
Definition Unit.h:2090

References m_spellImmune.

Referenced by Vehicle::ApplyAllImmunities(), SpellInfo::ApplyAllSpellImmunitiesTo(), boss_kelidan_the_breaker::ApplyImmunities(), ApplyMechanicImmune(), boss_anubarak_trial::boss_anubarak_trialAI::boss_anubarak_trialAI(), boss_grand_champion::boss_grand_championAI::boss_grand_championAI(), boss_icehowl::boss_icehowlAI::boss_icehowlAI(), boss_sindragosa::boss_sindragosaAI::boss_sindragosaAI(), boss_twin_valkyrAI::boss_twin_valkyrAI(), boss_void_reaver::boss_void_reaver(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::DamageTaken(), boss_auriaya::ExecuteEvent(), AuraEffect::HandleAuraDummy(), AuraEffect::HandleAuraModEffectImmunity(), AuraEffect::HandleAuraModIncreaseFlightSpeed(), AuraEffect::HandleAuraModSchoolImmunity(), AuraEffect::HandleAuraModStateImmunity(), Aura::HandleAuraSpecificMods(), spell_q13007_iron_colossus::HandleDummy(), spell_love_in_air_perfume_immune::HandleEffectApply(), spell_teron_gorefiend_shadowy_construct::HandleEffectApply(), spell_dk_anti_magic_shell_self::HandleEffectApply(), spell_dk_army_of_the_dead_passive::HandleEffectApply(), spell_dk_pet_scaling::HandleEffectApply(), spell_dru_treant_scaling::HandleEffectApply(), spell_pet_hit_expertise_scalling::HandleEffectApply(), spell_pet_intellect_spirit_resilience_scaling::HandleEffectApply(), spell_pet_spellhit_expertise_spellpen_scaling::HandleEffectApply(), spell_mage_pet_scaling::HandleEffectApply(), spell_pri_shadowfiend_scaling::HandleEffectApply(), spell_sha_feral_spirit_scaling::HandleEffectApply(), spell_sha_fire_elemental_scaling::HandleEffectApply(), spell_warl_infernal_scaling::HandleEffectApply(), spell_love_in_air_perfume_immune::HandleEffectRemove(), spell_dk_anti_magic_shell_self::HandleEffectRemove(), spell_illidan_shadow_prison_aura::HandleOnEffectApply(), spell_illidan_shadow_prison_aura::HandleOnEffectRemove(), npc_hyjal_jaina::hyjalJainaAI::hyjalJainaAI(), boss_hydross_the_unstable::JustSummoned(), npc_thrall_bfu::npc_thrall_bfuAI::JustSummoned(), npc_varian_wrynn::npc_varian_wrynnAI::JustSummoned(), Player::LoadFromDB(), Creature::LoadTemplateImmunities(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::MovementInform(), npc_frost_sphere::npc_frost_sphereAI::npc_frost_sphereAI(), npc_mageguard_dalaran::npc_mageguard_dalaranAI::npc_mageguard_dalaranAI(), npc_necrotic_shard::npc_necrotic_shard(), npc_pos_freed_slave::npc_pos_freed_slaveAI::npc_pos_freed_slaveAI(), npc_tournament_training_dummy::npc_tournament_training_dummyAI::npc_tournament_training_dummyAI(), npc_ulduar_arachnopod_destroyer::npc_ulduar_arachnopod_destroyer(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::npc_valkyr_shadowguardAI(), spell_yogg_saron_malady_of_the_mind_aura::OnApply(), instance_violet_hold::instance_violet_hold_InstanceMapScript::OnCreatureCreate(), spell_yogg_saron_malady_of_the_mind_aura::OnRemove(), boss_flame_leviathan_seat::PassengerBoarded(), npc_hover_disk::PassengerBoarded(), npc_chesspiece::Reset(), boss_curator::Reset(), boss_shade_of_aran::Reset(), npc_sanguine_spirit::Reset(), boss_felblood_kaelthas::Reset(), npc_varian_wrynn::npc_varian_wrynnAI::Reset(), npc_jaina_proudmoore_bfu::npc_jaina_proudmoore_bfuAI::Reset(), npc_thrall_bfu::npc_thrall_bfuAI::Reset(), npc_lady_sylvanas_windrunner_bfu::npc_lady_sylvanas_windrunner_bfuAI::Reset(), npc_dark_iron_guzzler::Reset(), boss_mal_ganis::boss_mal_ganisAI::Reset(), boss_tharon_ja::boss_tharon_jaAI::Reset(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::Reset(), boss_valithria_dreamwalker::boss_valithria_dreamwalkerAI::Reset(), boss_gluth::boss_gluthAI::Reset(), boss_urom::boss_uromAI::Reset(), boss_varos::boss_varosAI::Reset(), boss_auriaya::Reset(), boss_flame_leviathan::Reset(), boss_supremus::Reset(), boss_kaelthas::Reset(), npc_injured_patient::npc_injured_patientAI::Reset(), boss_supremus::SchedulePhase(), boss_hydross_the_unstable::SetForm(), npc_iron_watcher::npc_iron_watcherAI::UpdateAI(), and Creature::UpdateEntry().

◆ ApplyStatPctModifier()

void Unit::ApplyStatPctModifier ( UnitMods  unitMod,
UnitModifierPctType  modifierType,
float  amount 
)
11983{
11984 if (unitMod >= UNIT_MOD_END || modifierType >= MODIFIER_TYPE_PCT_END)
11985 {
11986 LOG_ERROR("entities.unit", "ERROR in ApplyStatPctModifier(): non-existing UnitMods or wrong UnitModifierType!");
11987 return;
11988 }
11989
11990 if (!pct)
11991 return;
11992
11993 switch (modifierType)
11994 {
11995 case BASE_PCT:
11996 case TOTAL_PCT:
11997 AddPct(m_auraPctModifiersGroup[unitMod][modifierType], pct);
11998 break;
11999 default:
12000 break;
12001 }
12002
12003 UpdateUnitMod(unitMod);
12004}
#define LOG_ERROR(filterType__,...)
Definition Log.h:158
@ MODIFIER_TYPE_PCT_END
Definition Unit.h:136
T AddPct(T &base, U pct)
Definition Util.h:58
void UpdateUnitMod(UnitMods unitMod)
Definition Unit.cpp:12046

References AddPct(), BASE_PCT, LOG_ERROR, m_auraPctModifiersGroup, MODIFIER_TYPE_PCT_END, TOTAL_PCT, UNIT_MOD_END, and UpdateUnitMod().

Referenced by boss_marli::_schedulePhaseSpider(), boss_marli::_schedulePhaseTroll(), AuraEffect::HandleAuraIncreaseBaseHealthPercent(), AuraEffect::HandleAuraModAttackPowerPercent(), AuraEffect::HandleAuraModBaseResistancePCT(), AuraEffect::HandleAuraModIncreaseEnergyPercent(), AuraEffect::HandleAuraModIncreaseHealthPercent(), AuraEffect::HandleAuraModRangedAttackPowerPercent(), AuraEffect::HandleModPercentStat(), spell_astromancer_solarian_transform::OnApply(), spell_astromancer_solarian_transform::OnRemove(), boss_arlokk::boss_arlokkAI::Reset(), boss_marli::Reset(), and boss_arlokk::boss_arlokkAI::UpdateAI().

◆ AtDisengage()

virtual void Unit::AtDisengage ( )
inlinevirtual

Reimplemented in Creature.

966{}

Referenced by Creature::AtDisengage(), and CombatManager::UpdateOwnerCombatState().

◆ AtEngage()

void Unit::AtEngage ( Unit target)
virtual

Reimplemented in Creature.

7583{
7585 {
7588 }
7589}
@ MOTION_SLOT_CONTROLLED
Definition MotionMaster.h:66
@ UNIT_STATE_DISTRACTED
Definition UnitDefines.h:185
void MovementExpiredOnSlot(MovementSlot slot, bool reset=true)
Definition MotionMaster.h:220
void ClearUnitState(uint32 f)
Definition Unit.h:737

References ClearUnitState(), GetMotionMaster(), HasUnitState(), MOTION_SLOT_CONTROLLED, MotionMaster::MovementExpiredOnSlot(), and UNIT_STATE_DISTRACTED.

Referenced by Creature::AtEngage(), and CombatManager::UpdateOwnerCombatState().

◆ AtEnterCombat()

virtual void Unit::AtEnterCombat ( )
inlinevirtual

◆ AtExitCombat()

void Unit::AtExitCombat ( )
virtual

◆ Attack()

bool Unit::Attack ( Unit victim,
bool  meleeAttack 
)
Todo:
: Implement aggro range, detection range and assistance range templates
7301{
7302 if (!victim || victim == this)
7303 return false;
7304
7305 // dead units can neither attack nor be attacked
7306 if (!IsAlive() || !victim->IsAlive())
7307 return false;
7308
7309 // pussywizard: check map, world, phase >_> multithreading crash fix
7310 if (!IsInMap(victim) || !InSamePhase(victim))
7311 return false;
7312
7313 // player cannot attack in mount state
7314 if (IsPlayer() && IsMounted())
7315 return false;
7316
7317 // creatures cannot attack while evading
7318 Creature* creature = ToCreature();
7319 if (creature && creature->IsInEvadeMode())
7320 {
7321 return false;
7322 }
7323
7324 // creatures should not try to attack the player during polymorph
7325 if (creature && creature->IsPolymorphed())
7326 {
7327 return false;
7328 }
7329
7330 //if (HasUnitFlag(UNIT_FLAG_PACIFIED)) // pussywizard: why having this flag prevents from entering combat? it should just prevent melee attack
7331 // return false;
7332
7333 // nobody can attack GM in GM-mode
7334 if (victim->IsPlayer())
7335 {
7336 if (victim->ToPlayer()->IsGameMaster())
7337 return false;
7338 }
7339 else
7340 {
7341 if (victim->ToCreature()->IsEvadingAttacks())
7342 return false;
7343 }
7344
7345 // Unit with SPELL_AURA_SPIRIT_OF_REDEMPTION can not attack
7347 return false;
7348
7349 // remove SPELL_AURA_MOD_UNATTACKABLE at attack (in case non-interruptible spells stun aura applied also that not let attack)
7350 if (HasUnattackableAura())
7352
7353 if (m_attacking)
7354 {
7355 if (m_attacking == victim)
7356 {
7357 // switch to melee attack from ranged/magic
7358 if (meleeAttack)
7359 {
7361 {
7363 SendMeleeAttackStart(victim);
7364 return true;
7365 }
7366 }
7368 {
7370 SendMeleeAttackStop(victim);
7371 return true;
7372 }
7373 return false;
7374 }
7375
7376 // switch target
7377 InterruptSpell(CURRENT_MELEE_SPELL, true, true, true);
7378 if (!meleeAttack)
7380 }
7381
7382 if (m_attacking)
7384
7385 m_attacking = victim;
7387
7388 // Set our target
7389 SetTarget(victim->GetGUID());
7390
7391 if (meleeAttack)
7393
7394 Unit* owner = GetCharmerOrOwner();
7395 Creature* ownerCreature = owner ? owner->ToCreature() : nullptr;
7396 Creature* controlledCreatureWithSameVictim = nullptr;
7397 if (creature && !m_Controlled.empty())
7398 {
7399 for (ControlSet::iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr)
7400 {
7401 if ((*itr)->ToCreature() && (*itr)->GetVictim() == victim)
7402 {
7403 controlledCreatureWithSameVictim = (*itr)->ToCreature();
7404 break;
7405 }
7406 }
7407 }
7408
7409 // Share leash timer with controlled unit
7410 if (controlledCreatureWithSameVictim)
7411 creature->SetLastLeashExtensionTimePtr(controlledCreatureWithSameVictim->GetLastLeashExtensionTimePtr());
7412 // Share leash timer with owner
7413 else if (creature && ownerCreature && ownerCreature->GetVictim() == victim)
7415 // Update leash timer when attacking creatures
7416 else if (victim->IsCreature())
7418
7419 // set position before any AI calls/assistance
7420 //if (IsCreature())
7421 // ToCreature()->SetCombatStartPosition(GetPositionX(), GetPositionY(), GetPositionZ());
7422 if (creature)
7423 {
7424 EngageWithTarget(victim);
7425
7426 if (!IsControlledByPlayer())
7427 {
7429
7432 creature->CallAssistance();
7433
7435
7437 }
7438 }
7439
7440 // delay offhand weapon attack by 50% of the base attack time
7443
7444 if (meleeAttack)
7445 SendMeleeAttackStart(victim);
7446
7447 // Let the pet know we've started attacking someting. Handles melee attacks only
7448 // Spells such as auto-shot and others handled in WorldSession::HandleCastSpellOpcode
7449 if (IsPlayer())
7450 {
7451 for (Unit* controlled : m_Controlled)
7452 if (Creature* cControlled = controlled->ToCreature())
7453 if (CreatureAI* controlledAI = cControlled->AI())
7454 controlledAI->OwnerAttacked(victim);
7455 }
7456
7457 return true;
7458}
@ CREATURE_FLAG_EXTRA_DONT_CALL_ASSISTANCE
Definition CreatureData.h:71
@ EMOTE_ONESHOT_NONE
Definition SharedDefines.h:1898
@ AI_REACTION_HOSTILE
Definition SharedDefines.h:3475
@ SPELL_AURA_MOD_UNATTACKABLE
Definition SpellAuraDefines.h:156
@ UNIT_STATE_MELEE_ATTACKING
Definition UnitDefines.h:174
@ CURRENT_MELEE_SPELL
Definition Unit.h:555
@ UNIT_NPC_EMOTESTATE
Definition UpdateFields.h:140
T CalculatePct(T base, U pct)
Definition Util.h:52
@ CONFIG_CREATURE_FAMILY_ASSISTANCE_PERIOD
Definition WorldConfig.h:241
Definition CreatureAI.h:69
void CallAssistance(Unit *target=nullptr)
Definition Creature.cpp:2457
bool IsEvadingAttacks() const
Definition Creature.h:139
std::shared_ptr< time_t > const & GetLastLeashExtensionTimePtr() const
Definition Creature.cpp:3682
void UpdateLeashExtensionTime()
Definition Creature.cpp:3704
void SetAssistanceTimer(uint32 value)
Definition Creature.h:427
void SetLastLeashExtensionTimePtr(std::shared_ptr< time_t > const &timer)
Definition Creature.cpp:3689
void SendAIReaction(AiReaction reactionType)
Definition Creature.cpp:2445
bool IsInEvadeMode() const
Definition Creature.h:138
bool IsGameMaster() const
Definition Player.h:1174
bool HasOffhandWeaponForAttack() const
Definition Unit.h:990
bool IsPolymorphed() const
Definition Unit.cpp:13145
void _removeAttacker(Unit *pAttacker)
Definition Unit.h:2228
void _addAttacker(Unit *pAttacker)
Definition Unit.h:2227
bool HasUnattackableAura() const
Definition Unit.h:1834
Unit * GetCharmerOrOwner() const
Definition Unit.h:1286
void EngageWithTarget(Unit *who)
Definition Unit.cpp:7530
bool IsMounted() const
Definition Unit.h:1887
Unit * GetVictim() const
Definition Unit.h:903
void SendMeleeAttackStart(Unit *victim, Player *sendTo=nullptr)
Definition Unit.cpp:3245
void SetUInt32Value(uint16 index, uint32 value)
Definition Unit.cpp:17367
void SendMeleeAttackStop(Unit *victim=nullptr)
Send to the client SMSG_ATTACKSTOP but doesn't clear UNIT_STATE_MELEE_ATTACKING on server side or int...
Definition Unit.cpp:3261
bool IsControlledByPlayer() const
Definition Unit.h:1307
bool HasSpiritOfRedemptionAura() const
Definition Unit.h:1805
virtual void SetTarget(ObjectGuid=ObjectGuid::Empty)=0
bool InSamePhase(WorldObject const *obj) const
Definition Object.h:517
bool IsInMap(WorldObject const *obj) const
Definition Object.cpp:1335
#define sWorld
Definition World.h:316

References _addAttacker(), _removeAttacker(), AddUnitState(), AI_REACTION_HOSTILE, BASE_ATTACK, CalculatePct(), Creature::CallAssistance(), ClearUnitState(), CONFIG_CREATURE_FAMILY_ASSISTANCE_PERIOD, CREATURE_FLAG_EXTRA_DONT_CALL_ASSISTANCE, CURRENT_MELEE_SPELL, EMOTE_ONESHOT_NONE, EngageWithTarget(), getAttackTimer(), GetCharmerOrOwner(), Object::GetFloatValue(), Object::GetGUID(), Creature::GetLastLeashExtensionTimePtr(), GetVictim(), Creature::HasFlagsExtra(), HasOffhandWeaponForAttack(), HasSpiritOfRedemptionAura(), HasUnattackableAura(), HasUnitState(), WorldObject::InSamePhase(), InterruptSpell(), IsAlive(), isAttackReady(), IsControlledByPlayer(), Object::IsCreature(), Creature::IsEvadingAttacks(), Player::IsGameMaster(), Creature::IsInEvadeMode(), WorldObject::IsInMap(), IsMounted(), Object::IsPlayer(), IsPolymorphed(), m_attacking, m_Controlled, OFF_ATTACK, RemoveAurasByType(), Creature::SendAIReaction(), SendMeleeAttackStart(), SendMeleeAttackStop(), Creature::SetAssistanceTimer(), setAttackTimer(), Creature::SetLastLeashExtensionTimePtr(), SetTarget(), SetUInt32Value(), SPELL_AURA_MOD_UNATTACKABLE, sWorld, Object::ToCreature(), Object::ToPlayer(), UNIT_FIELD_BASEATTACKTIME, UNIT_NPC_EMOTESTATE, UNIT_STATE_MELEE_ATTACKING, and Creature::UpdateLeashExtensionTime().

Referenced by UnitAI::AttackStart(), FollowerAI::AttackStart(), PossessedAI::AttackStart(), boss_ragnaros::AttackStart(), npc_gunship_mage::npc_gunship_mageAI::AttackStart(), npc_gunship_gunner::npc_gunship_gunnerAI::AttackStart(), boss_priestess_lackey_commonAI::AttackStart(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::AttackStart(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::AttackStart(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::AttackStart(), boss_malygos::AttackStart(), npc_nexus_lord::AttackStart(), boss_swamplord_muselek::AttackStart(), ArcherAI::AttackStart(), TurretAI::AttackStart(), npc_escortAI::AttackStart(), SmartAI::AttackStart(), boss_shade_of_aran::AttackStart(), boss_alythess::AttackStart(), npc_daphne_stilwell::npc_daphne_stilwellAI::AttackStart(), npc_hyjal_ground_trash::AttackStart(), npc_hyjal_gargoyle::AttackStart(), npc_hyjal_frost_wyrm::AttackStart(), boss_jormungarAI::AttackStart(), boss_four_horsemen::boss_four_horsemenAI::AttackStart(), boss_magus_telestra::AttackStart(), boss_kologarn::AttackStart(), boss_mimiron::AttackStart(), boss_razorscale::AttackStart(), boss_lady_malande::AttackStart(), boss_the_lurker_below::AttackStart(), boss_olm_the_summoner::AttackStart(), boss_kiggler_the_crazed::AttackStart(), boss_krosh_firehand::AttackStart(), boss_nazan::AttackStart(), npc_millhouse_manastorm::npc_millhouse_manastormAI::AttackStart(), boss_high_astromancer_solarian::AttackStart(), npc_capernian::AttackStart(), npc_pet_gen_gnomish_flame_turret::AttackStart(), UnitAI::AttackStartCaster(), ScriptedAI::AttackStartNoMove(), PetAI::DoAttack(), WorldSession::HandleAttackSwingOpcode(), spell_q12096_q12092_dummy::HandleDummy(), WorldSession::HandlePetActionHelper(), boss_kologarn_eyebeam::IsSummonedBy(), boss_halazzi::JustSummoned(), boss_algalon_the_observer::JustSummoned(), boss_fathomlord_karathress::JustSummoned(), boss_fathomguard_tidalvess::JustSummoned(), RemoveCharmedBy(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::SelectNewTarget(), npc_hor_leader_second::npc_hor_leader_secondAI::UpdateAI(), npc_tirion_fordring_tft::npc_tirion_fordringAI::UpdateAI(), boss_stormcaller_brundir::UpdateAI(), Player::UpdateCharmedAI(), and npc_ranger_lilatha::WaypointReached().

◆ AttackerStateUpdate()

void Unit::AttackerStateUpdate ( Unit victim,
WeaponAttackType  attType = BASE_ATTACK,
bool  extra = false,
bool  ignoreCasting = false 
)
2757{
2759 {
2760 return;
2761 }
2762
2763 if (HasUnitState(UNIT_STATE_CANNOT_AUTOATTACK) && !extra && !ignoreCasting)
2764 {
2765 return;
2766 }
2767
2768 if (!victim->IsAlive())
2769 return;
2770
2771 if ((attType == BASE_ATTACK || attType == OFF_ATTACK) && !IsWithinLOSInMap(victim))
2772 return;
2773
2774 // CombatStart puts the target into stand state, so we need to cache sit state here to know if we should crit later
2775 const bool sittingVictim = victim->IsPlayer() && (victim->IsSitState() || victim->getStandState() == UNIT_STAND_STATE_SLEEP);
2776
2777 AtTargetAttacked(victim, true);
2779
2780 if (attType != BASE_ATTACK && attType != OFF_ATTACK)
2781 return; // ignore ranged case
2782
2783 if (!extra && _lastExtraAttackSpell)
2784 {
2786 }
2787
2788 bool meleeAttack = true;
2789
2790 // melee attack spell casted at main hand attack only - no normal melee dmg dealt
2791 if (attType == BASE_ATTACK && m_currentSpells[CURRENT_MELEE_SPELL] && !extra)
2792 {
2793 meleeAttack = false; // The melee attack is replaced by the melee spell
2794
2796 SpellCastResult castResult = meleeSpell->CheckCast(false);
2797 if (castResult != SPELL_CAST_OK)
2798 {
2799 meleeSpell->SendCastResult(castResult);
2800 meleeSpell->SendInterrupted(0);
2801
2802 meleeSpell->finish(false);
2803 meleeSpell->SetExecutedCurrently(false);
2804
2805 if (castResult == SPELL_FAILED_NO_POWER)
2806 {
2807 // Not enough rage, do a regular melee attack instead
2808 meleeAttack = true;
2809 }
2810 }
2811 else
2812 {
2813 meleeSpell->cast(true);
2814 }
2815 }
2816 if (meleeAttack)
2817 {
2818 // attack can be redirected to another target
2819 victim = GetMeleeHitRedirectTarget(victim);
2820 CalcDamageInfo damageInfo;
2821 CalculateMeleeDamage(victim, &damageInfo, attType, sittingVictim);
2822
2823 // Send log damage message to client
2824 for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
2825 {
2826 Unit::DealDamageMods(victim, damageInfo.damages[i].damage, &damageInfo.damages[i].absorb);
2827 }
2828
2829 // Related to sparring system. Allow attack animations even if there are no damages
2830 if (victim->CanSparringWith(damageInfo.attacker))
2831 damageInfo.HitInfo |= HITINFO_FAKE_DAMAGE;
2832
2833 SendAttackStateUpdate(&damageInfo);
2834
2835 _lastDamagedTargetGuid = victim->GetGUID();
2836
2837 DealMeleeDamage(&damageInfo, true);
2838
2839 DamageInfo dmgInfo(damageInfo);
2840 Unit::ProcSkillsAndAuras(damageInfo.attacker, damageInfo.target, damageInfo.procAttacker, damageInfo.procVictim, dmgInfo.GetHitMask(), dmgInfo.GetDamage(),
2841 damageInfo.attackType, nullptr, nullptr, -1, nullptr, &dmgInfo);
2842
2843 if (IsPlayer())
2844 LOG_DEBUG("entities.unit", "AttackerStateUpdate: (Player) {} attacked {} for {} dmg, absorbed {}, blocked {}, resisted {}.",
2845 GetGUID().ToString(), victim->GetGUID().ToString(), dmgInfo.GetDamage(), dmgInfo.GetAbsorb(), dmgInfo.GetBlock(), dmgInfo.GetResist());
2846 else
2847 LOG_DEBUG("entities.unit", "AttackerStateUpdate: (NPC) {} attacked {} for {} dmg, absorbed {}, blocked {}, resisted {}.",
2848 GetGUID().ToString(), victim->GetGUID().ToString(), dmgInfo.GetDamage(), dmgInfo.GetAbsorb(), dmgInfo.GetBlock(), dmgInfo.GetResist());
2849
2850 }
2851}
#define MAX_ITEM_PROTO_DAMAGES
Definition ItemTemplate.h:613
@ SPELL_FAILED_NO_POWER
Definition SharedDefines.h:1022
@ AURA_INTERRUPT_FLAG_MELEE_ATTACK
Definition SpellDefines.h:55
@ UNIT_STAND_STATE_SLEEP
Definition UnitDefines.h:38
@ UNIT_STATE_CANNOT_AUTOATTACK
Definition UnitDefines.h:221
@ UNIT_FLAG_PACIFIED
Definition UnitDefines.h:274
@ HITINFO_FAKE_DAMAGE
Definition Unit.h:122
Definition Unit.h:336
std::string ToString() const
Definition ObjectGuid.cpp:47
void cast(bool skipCheck=false)
Definition Spell.cpp:3727
void SetExecutedCurrently(bool yes)
Definition Spell.h:578
void SendInterrupted(uint8 result)
Definition Spell.cpp:5124
static void SendCastResult(Player *caster, SpellInfo const *spellInfo, uint8 castCount, SpellCastResult result, SpellCustomErrors customError=SPELL_CUSTOM_ERROR_NONE)
Definition Spell.cpp:4619
void finish(bool ok=true)
Definition Spell.cpp:4431
void SendAttackStateUpdate(CalcDamageInfo *damageInfo)
Definition Unit.cpp:6898
void AtTargetAttacked(Unit *target, bool canInitialAggro)
Definition Unit.cpp:11465
Unit * GetMeleeHitRedirectTarget(Unit *victim, SpellInfo const *spellInfo=nullptr)
Definition Unit.cpp:8173
void CalculateMeleeDamage(Unit *victim, CalcDamageInfo *damageInfo, WeaponAttackType attackType=BASE_ATTACK, const bool sittingVictim=false)
Definition Unit.cpp:1677
uint8 getStandState() const
Definition Unit.h:1781
static void ProcSkillsAndAuras(Unit *actor, Unit *victim, uint32 procAttacker, uint32 procVictim, uint32 procEx, uint32 amount, WeaponAttackType attType=BASE_ATTACK, SpellInfo const *procSpellInfo=nullptr, SpellInfo const *procAura=nullptr, int8 procAuraEffectIndex=-1, Spell const *procSpell=nullptr, DamageInfo *damageInfo=nullptr, HealInfo *healInfo=nullptr, uint32 procPhase=2)
Definition Unit.cpp:6774
void DealMeleeDamage(CalcDamageInfo *damageInfo, bool durabilityLoss)
Definition Unit.cpp:2019
bool CanSparringWith(Unit const *attacker) const
Definition Unit.cpp:4134
static void DealDamageMods(Unit const *victim, uint32 &damage, uint32 *absorb)
Definition Unit.cpp:997
bool IsWithinLOSInMap(WorldObject const *obj, VMAP::ModelIgnoreFlags ignoreFlags=VMAP::ModelIgnoreFlags::Nothing, LineOfSightChecks checks=LINEOFSIGHT_ALL_CHECKS, Optional< float > collisionHeight={ }, Optional< float > combatReach={ }) const
Definition Object.cpp:1403
Definition Unit.h:483
uint32 procAttacker
Definition Unit.h:500
uint32 procVictim
Definition Unit.h:501
uint32 absorb
Definition Unit.h:491
struct CalcDamageInfo::@269 damages[MAX_ITEM_PROTO_DAMAGES]
uint32 damage
Definition Unit.h:490
uint32 HitInfo
Definition Unit.h:496
Unit * attacker
Definition Unit.h:484
Unit * target
Definition Unit.h:485
WeaponAttackType attackType
Definition Unit.h:499
std::string ToString() const
Definition Position.cpp:59

References _lastDamagedTargetGuid, _lastExtraAttackSpell, CalcDamageInfo::absorb, CalcDamageInfo::attacker, CalcDamageInfo::attackType, AtTargetAttacked(), AURA_INTERRUPT_FLAG_MELEE_ATTACK, BASE_ATTACK, CalculateMeleeDamage(), CanSparringWith(), Spell::cast(), Spell::CheckCast(), CURRENT_MELEE_SPELL, CalcDamageInfo::damage, CalcDamageInfo::damages, DealDamageMods(), DealMeleeDamage(), Spell::finish(), DamageInfo::GetAbsorb(), DamageInfo::GetBlock(), DamageInfo::GetDamage(), Object::GetGUID(), Object::GetGUID(), DamageInfo::GetHitMask(), GetMeleeHitRedirectTarget(), DamageInfo::GetResist(), getStandState(), HasUnitFlag(), HasUnitState(), CalcDamageInfo::HitInfo, HITINFO_FAKE_DAMAGE, IsAlive(), Object::IsPlayer(), IsSitState(), WorldObject::IsWithinLOSInMap(), LOG_DEBUG, m_currentSpells, MAX_ITEM_PROTO_DAMAGES, OFF_ATTACK, CalcDamageInfo::procAttacker, ProcSkillsAndAuras(), CalcDamageInfo::procVictim, RemoveAurasWithInterruptFlags(), SendAttackStateUpdate(), Spell::SendCastResult(), Spell::SendInterrupted(), Spell::SetExecutedCurrently(), SPELL_CAST_OK, SPELL_FAILED_NO_POWER, CalcDamageInfo::target, ObjectGuid::ToString(), Position::ToString(), UNIT_FLAG_PACIFIED, UNIT_STAND_STATE_SLEEP, and UNIT_STATE_CANNOT_AUTOATTACK.

Referenced by UnitAI::DoMeleeAttackIfReady(), boss_mandokir::boss_mandokirAI::DoMeleeAttackIfReady(), boss_ambassador_hellmaw::DoMeleeAttackIfReady(), HandleProcExtraAttackFor(), boss_twin_valkyrAI::myDoMeleeAttackIfReady(), boss_dred::boss_dredAI::ScheduleTasks(), npc_daphne_stilwell::npc_daphne_stilwellAI::Update(), Player::Update(), boss_kologarn::UpdateAI(), and boss_the_lurker_below::UpdateAI().

◆ AttackStop()

bool Unit::AttackStop ( )

Force the unit to stop attacking. This will clear UNIT_STATE_MELEE_ATTACKING, Interrupt current spell, AI assistance, and call SendMeleeAttackStop() to the client.

7465{
7466 if (!m_attacking)
7467 return false;
7468
7469 Unit* victim = m_attacking;
7470
7472 m_attacking = nullptr;
7473
7474 // Clear our target
7476
7478
7480
7481 // reset only at real combat stop
7482 if (Creature* creature = ToCreature())
7483 {
7484 creature->SetNoCallAssistance(false);
7485
7486 if (creature->HasSearchedAssistance())
7487 {
7488 creature->SetNoSearchAssistance(false);
7489 }
7490 }
7491
7492 SendMeleeAttackStop(victim);
7493
7494 return true;
7495}

References _removeAttacker(), ClearUnitState(), CURRENT_MELEE_SPELL, ObjectGuid::Empty, InterruptSpell(), m_attacking, SendMeleeAttackStop(), SetTarget(), Object::ToCreature(), and UNIT_STATE_MELEE_ATTACKING.

Referenced by PetAI::_stopAttack(), boss_professor_putricide::boss_professor_putricideAI::ChangePhase(), CombatStop(), boss_jedoga_shadowseeker::DamageTaken(), npc_terenas_menethil::npc_terenas_menethilAI::DamageTaken(), boss_algalon_the_observer::DamageTaken(), boss_freya::DamageTaken(), boss_hodir::DamageTaken(), npc_ulduar_leviathan_mkii::DamageTaken(), npc_ulduar_aerial_command_unit::DamageTaken(), advisor_baseAI::DamageTaken(), npc_molten_golem::DamageTaken(), boss_thekal::DamageTaken(), boss_viscidus::DamageTaken(), boss_the_lich_king::boss_the_lich_kingAI::DamageTaken(), ChaseMovementGenerator< T >::DispatchSplineToPosition(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::DoAction(), boss_algalon_the_observer::DoAction(), npc_ulduar_aerial_command_unit::DoAction(), ScriptedAI::DoStopAttack(), Player::DuelComplete(), SmartAI::EnterEvadeMode(), npc_crystalline_frayer::EnterSeedPod(), TimedFleeingMovementGenerator::Finalize(), Spell::finish(), WorldSession::HandleAttackStopOpcode(), spell_hun_scatter_shot::HandleDummy(), spell_mc_play_dead_aura::HandleEffectApply(), spell_q11065_wrangle_some_aether_rays_aura::HandleEffectApply(), AuraEffect::HandleFeignDeath(), WorldSession::HandlePetActionHelper(), WorldSession::HandlePetStopAttack(), RotateMovementGenerator::Initialize(), boss_janalai::JustEngagedWith(), PetAI::KilledUnit(), MotionMaster::MoveSeekAssistance(), spell_halion_twilight_phasing_aura::OnApply(), spell_halion_twilight_phasing_aura::OnRemove(), PetSpellFail(), RemoveCharmedBy(), boss_janalai::Reset(), boss_talon_king_ikiss::Reset(), boss_warbringer_omrogg::ScheduleBurningPhase(), boss_felmyst::ScheduleGroundAbilities(), boss_warbringer_omrogg::ScheduleNonBurningPhase(), npc_putricide_oozeAI::SelectNewTarget(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::SelectNewTarget(), SetCharmedBy(), npc_cult_fanatic::npc_cult_fanaticAI::SpellHit(), npc_cult_adherent::npc_cult_adherentAI::SpellHit(), boss_attumen::SpellHit(), boss_noth::boss_nothAI::StartBalconyPhase(), boss_heigan::StartFightPhase(), boss_lord_valthalak::StartTalking(), StopAttackFaction(), StopAttackingInvalidTarget(), boss_ouro::Submerge(), npc_vaelastrasz_the_red::UpdateAI(), boss_ragnaros::UpdateAI(), boss_arlokk::boss_arlokkAI::UpdateAI(), boss_onyxia::UpdateAI(), npc_qiraj_war_spawn::npc_qiraj_war_spawnAI::UpdateAI(), boss_hadronox::UpdateAI(), boss_saviana_ragefire::boss_saviana_ragefireAI::UpdateAI(), boss_icehowl::boss_icehowlAI::UpdateAI(), npc_hor_leader_second::npc_hor_leader_secondAI::UpdateAI(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::UpdateAI(), boss_sindragosa::boss_sindragosaAI::UpdateAI(), npc_rimefang::npc_rimefangAI::UpdateAI(), boss_the_lich_king::boss_the_lich_kingAI::UpdateAI(), npc_terenas_menethil::npc_terenas_menethilAI::UpdateAI(), boss_gothik::boss_gothikAI::UpdateAI(), boss_sapphiron::boss_sapphironAI::UpdateAI(), boss_malygos::UpdateAI(), boss_krystallus::boss_krystallusAI::UpdateAI(), boss_mimiron::UpdateAI(), npc_pet_hunter_snake_trap::UpdateAI(), PossessedAI::UpdateAI(), Player::UpdateFFAPvPFlag(), Player::UpdateFFAPvPState(), and CreatureAI::UpdateVictim().

◆ AtTargetAttacked()

void Unit::AtTargetAttacked ( Unit target,
bool  canInitialAggro 
)
11466{
11467 if (!target->IsEngaged() && !canInitialAggro)
11468 return;
11469
11470 target->EngageWithTarget(this);
11471 if (Unit* targetOwner = target->GetCharmerOrOwner())
11472 targetOwner->EngageWithTarget(this);
11473 if (Unit* myOwner = GetCharmerOrOwner())
11474 target->EngageWithTarget(myOwner);
11475
11476 // Patch 3.0.8: All player spells which cause a creature to become aggressive
11477 // to you will now also immediately cause the creature to be tapped.
11478 if (Creature* creature = target->ToCreature())
11479 if (!creature->hasLootRecipient() && IsPlayer())
11480 creature->SetLootRecipient(this);
11481
11483 Player* targetPlayerOwner = target->GetCharmerOrOwnerPlayerOrPlayerItself();
11484 if (myPlayerOwner && targetPlayerOwner && !(myPlayerOwner->duel && myPlayerOwner->duel->Opponent == targetPlayerOwner))
11485 {
11486 myPlayerOwner->UpdatePvP(true);
11487 myPlayerOwner->SetContestedPvP(targetPlayerOwner);
11489 }
11490}
@ AURA_INTERRUPT_FLAG_ENTER_PVP_COMBAT
Definition SpellDefines.h:66
void UpdatePvP(bool state, bool _override=false)
Definition PlayerUpdates.cpp:1525
void SetContestedPvP(Player *attackedPlayer=nullptr, bool lookForNearContestedGuards=true)
Definition Unit.cpp:13664
virtual bool IsEngaged() const
Definition Unit.h:931

References AURA_INTERRUPT_FLAG_ENTER_PVP_COMBAT, Player::duel, EngageWithTarget(), GetCharmerOrOwner(), GetCharmerOrOwnerPlayerOrPlayerItself(), IsEngaged(), Object::IsPlayer(), RemoveAurasWithInterruptFlags(), SetContestedPvP(), Object::ToCreature(), and Player::UpdatePvP().

Referenced by AttackerStateUpdate(), and Spell::DoAllEffectOnTarget().

◆ BuildAuraStateUpdateForTarget()

uint32 Unit::BuildAuraStateUpdateForTarget ( Unit target) const
7647{
7649 for (AuraStateAurasMap::const_iterator itr = m_auraStateAuras.begin(); itr != m_auraStateAuras.end(); ++itr)
7650 if ((1 << (itr->first - 1)) & PER_CASTER_AURA_STATE_MASK)
7651 if (itr->second->GetBase()->GetCasterGUID() == target->GetGUID())
7652 auraStates |= (1 << (itr->first - 1));
7653
7654 return auraStates;
7655}
uint32 GetUInt32Value(uint16 index) const
Definition Object.cpp:294

References Object::GetGUID(), Object::GetUInt32Value(), m_auraStateAuras, PER_CASTER_AURA_STATE_MASK, and UNIT_FIELD_AURASTATE.

Referenced by PatchValuesUpdate().

◆ BuildCooldownPacket() [1/2]

void Unit::BuildCooldownPacket ( WorldPacket data,
uint8  flags,
PacketCooldowns const &  cooldowns 
)
17046{
17047 data.Initialize(SMSG_SPELL_COOLDOWN, 8 + 1 + (4 + 4) * cooldowns.size());
17048 data << GetGUID();
17049 data << uint8(flags);
17050 for (std::unordered_map<uint32, uint32>::const_iterator itr = cooldowns.begin(); itr != cooldowns.end(); ++itr)
17051 {
17052 data << uint32(itr->first);
17053 data << uint32(itr->second);
17054 }
17055}
void Initialize(uint16 opcode, std::size_t newres=200)
Definition WorldPacket.h:68
@ SMSG_SPELL_COOLDOWN
Definition Opcodes.h:338

References Object::GetGUID(), WorldPacket::Initialize(), and SMSG_SPELL_COOLDOWN.

◆ BuildCooldownPacket() [2/2]

◆ BuildHeartBeatMsg()

void Unit::BuildHeartBeatMsg ( WorldPacket data) const
2106{
2107 data->Initialize(MSG_MOVE_HEARTBEAT, 32);
2108 *data << GetPackGUID();
2109 BuildMovementPacket(data);
2110}
PackedGuid const & GetPackGUID() const
Definition Object.h:116
void BuildMovementPacket(ByteBuffer *data) const
Definition Unit.cpp:15886
@ MSG_MOVE_HEARTBEAT
Definition Opcodes.h:268

References BuildMovementPacket(), Object::GetPackGUID(), WorldPacket::Initialize(), and MSG_MOVE_HEARTBEAT.

Referenced by SendMovementFlagUpdate().

◆ BuildMovementPacket()

void Unit::BuildMovementPacket ( ByteBuffer data) const
15887{
15888 *data << uint32(GetUnitMovementFlags()); // movement flags
15889 *data << uint16(GetExtraUnitMovementFlags()); // 2.3.0
15890 *data << uint32(GameTime::GetGameTimeMS().count()); // time / counter
15891 *data << GetPositionX();
15892 *data << GetPositionY();
15893 *data << GetPositionZ();
15894 *data << GetOrientation();
15895
15896 // 0x00000200
15898 {
15899 if (m_vehicle)
15900 *data << m_vehicle->GetBase()->GetPackGUID();
15901 else if (GetTransport())
15902 *data << GetTransport()->GetPackGUID();
15903 else
15904 *data << (uint8)0;
15905
15906 *data << float (GetTransOffsetX());
15907 *data << float (GetTransOffsetY());
15908 *data << float (GetTransOffsetZ());
15909 *data << float (GetTransOffsetO());
15910 *data << uint32(GetTransTime());
15911 *data << uint8 (GetTransSeat());
15912
15915 }
15916
15917 // 0x02200000
15920 *data << (float)m_movementInfo.pitch;
15921
15922 *data << (uint32)m_movementInfo.fallTime;
15923
15924 // 0x00001000
15926 {
15927 *data << (float)m_movementInfo.jump.zspeed;
15928 *data << (float)m_movementInfo.jump.sinAngle;
15929 *data << (float)m_movementInfo.jump.cosAngle;
15930 *data << (float)m_movementInfo.jump.xyspeed;
15931 }
15932
15933 // 0x04000000
15935 *data << (float)m_movementInfo.splineElevation;
15936}
std::uint16_t uint16
Definition Define.h:108
@ MOVEMENTFLAG_ONTRANSPORT
Definition UnitDefines.h:381
@ MOVEMENTFLAG_FLYING
Definition UnitDefines.h:397
@ MOVEMENTFLAG_FALLING
Definition UnitDefines.h:384
@ MOVEMENTFLAG_SWIMMING
Definition UnitDefines.h:393
@ MOVEMENTFLAG_SPLINE_ELEVATION
Definition UnitDefines.h:398
@ MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING
Definition UnitDefines.h:435
@ MOVEMENTFLAG2_INTERPOLATED_MOVEMENT
Definition UnitDefines.h:440
uint32 GetUnitMovementFlags() const
Definition Unit.h:775
uint16 GetExtraUnitMovementFlags() const
Definition Unit.h:781
float GetTransOffsetX() const
Definition Object.h:689
float GetTransOffsetY() const
Definition Object.h:690
float GetTransOffsetZ() const
Definition Object.h:691
uint32 GetTransTime() const
Definition Object.h:693
Transport * GetTransport() const
Definition Object.h:688
float GetTransOffsetO() const
Definition Object.h:692
float cosAngle
Definition Object.h:329
float xyspeed
Definition Object.h:329
float zspeed
Definition Object.h:329
float sinAngle
Definition Object.h:329
uint32 time2
Definition Object.h:312
struct MovementInfo::JumpInfo jump
uint32 fallTime
Definition Object.h:319
struct MovementInfo::TransportInfo transport
float splineElevation
Definition Object.h:333
float pitch
Definition Object.h:316

References MovementInfo::JumpInfo::cosAngle, MovementInfo::fallTime, MovementInfo::flags2, Vehicle::GetBase(), GetExtraUnitMovementFlags(), GameTime::GetGameTimeMS(), Position::GetOrientation(), Object::GetPackGUID(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), WorldObject::GetTransOffsetO(), WorldObject::GetTransOffsetX(), WorldObject::GetTransOffsetY(), WorldObject::GetTransOffsetZ(), WorldObject::GetTransport(), WorldObject::GetTransSeat(), WorldObject::GetTransTime(), GetUnitMovementFlags(), MovementInfo::jump, WorldObject::m_movementInfo, m_vehicle, MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING, MOVEMENTFLAG2_INTERPOLATED_MOVEMENT, MOVEMENTFLAG_FALLING, MOVEMENTFLAG_FLYING, MOVEMENTFLAG_ONTRANSPORT, MOVEMENTFLAG_SPLINE_ELEVATION, MOVEMENTFLAG_SWIMMING, MovementInfo::pitch, MovementInfo::JumpInfo::sinAngle, MovementInfo::splineElevation, MovementInfo::TransportInfo::time2, MovementInfo::transport, MovementInfo::JumpInfo::xyspeed, and MovementInfo::JumpInfo::zspeed.

Referenced by BuildHeartBeatMsg(), Object::BuildMovementUpdate(), WorldSession::HandleMoveKnockBackAck(), Player::SendTeleportAckPacket(), and SendTeleportPacket().

◆ BuildValuesUpdate()

void Unit::BuildValuesUpdate ( uint8  updateType,
ByteBuffer data,
Player target 
)
overrideprotectedvirtual

Reimplemented from Object.

16759{
16760 if (!target)
16761 return;
16762
16764 uint32 visibleFlag = UF_FLAG_PUBLIC;
16765
16766 if (target == this)
16767 visibleFlag |= UF_FLAG_PRIVATE;
16768
16770 if (GetOwnerGUID() == target->GetGUID())
16771 visibleFlag |= UF_FLAG_OWNER;
16772
16775 visibleFlag |= UF_FLAG_SPECIAL_INFO;
16776
16777 if (plr && plr->IsInSameRaidWith(target))
16778 visibleFlag |= UF_FLAG_PARTY_MEMBER;
16779
16780 uint64 cacheKey = static_cast<uint64>(visibleFlag) << 8 | updateType;
16781
16782 auto cacheIt = _valuesUpdateCache.find(cacheKey);
16783 if (cacheIt != _valuesUpdateCache.end())
16784 {
16785 int32 cachePos = static_cast<int32>(data->wpos());
16786 data->append(cacheIt->second.buffer);
16787
16788 BuildValuesCachePosPointers dataAdjustedPos = cacheIt->second.posPointers;
16789 if (cachePos)
16790 dataAdjustedPos.ApplyOffset(cachePos);
16791
16792 PatchValuesUpdate(*data, dataAdjustedPos, target);
16793
16794 return;
16795 }
16796
16797 BuildValuesCachedBuffer cacheValue(500);
16798
16799 ByteBuffer fieldBuffer(400);
16800
16801 UpdateMask updateMask;
16802 updateMask.SetCount(m_valuesCount);
16803
16804 for (uint16 index = 0; index < m_valuesCount; ++index)
16805 {
16806 if (_fieldNotifyFlags & flags[index] ||
16807 ((flags[index] & visibleFlag) & UF_FLAG_SPECIAL_INFO) ||
16808 ((updateType == UPDATETYPE_VALUES ? _changesMask.GetBit(index) : m_uint32Values[index]) && (flags[index] & visibleFlag)) ||
16810 {
16811 updateMask.SetBit(index);
16812
16813 if (index == UNIT_NPC_FLAGS)
16814 {
16815 cacheValue.posPointers.UnitNPCFlagsPos = int32(fieldBuffer.wpos());
16816 fieldBuffer << m_uint32Values[UNIT_NPC_FLAGS];
16817 }
16818 else if (index == UNIT_FIELD_AURASTATE)
16819 {
16820 cacheValue.posPointers.UnitFieldAuraStatePos = int32(fieldBuffer.wpos());
16821 fieldBuffer << uint32(0); // Fill in later.
16822 }
16823 // FIXME: Some values at server stored in float format but must be sent to client in uint32 format
16824 else if (index >= UNIT_FIELD_BASEATTACKTIME && index <= UNIT_FIELD_RANGEDATTACKTIME)
16825 {
16826 // convert from float to uint32 and send
16827 fieldBuffer << uint32(m_floatValues[index] < 0 ? 0 : m_floatValues[index]);
16828 }
16829 // there are some float values which may be negative or can't get negative due to other checks
16830 else if ((index >= UNIT_FIELD_NEGSTAT0 && index <= UNIT_FIELD_NEGSTAT4) ||
16833 (index >= UNIT_FIELD_POSSTAT0 && index <= UNIT_FIELD_POSSTAT4))
16834 {
16835 fieldBuffer << uint32(m_floatValues[index]);
16836 }
16837 // Gamemasters should be always able to select units - remove not selectable flag
16838 else if (index == UNIT_FIELD_FLAGS)
16839 {
16840 cacheValue.posPointers.UnitFieldFlagsPos = int32(fieldBuffer.wpos());
16841 fieldBuffer << m_uint32Values[UNIT_FIELD_FLAGS];
16842 }
16843 // use modelid_a if not gm, _h if gm for CREATURE_FLAG_EXTRA_TRIGGER creatures
16844 else if (index == UNIT_FIELD_DISPLAYID)
16845 {
16846 cacheValue.posPointers.UnitFieldDisplayPos = int32(fieldBuffer.wpos());
16847 fieldBuffer << m_uint32Values[UNIT_FIELD_DISPLAYID];
16848 }
16849 else if (index == UNIT_DYNAMIC_FLAGS)
16850 {
16851 cacheValue.posPointers.UnitDynamicFlagsPos = int32(fieldBuffer.wpos());
16853 fieldBuffer << dynamicFlags;
16854 }
16855 else if (index == UNIT_FIELD_BYTES_2)
16856 {
16857 cacheValue.posPointers.UnitFieldBytes2Pos = int32(fieldBuffer.wpos());
16858 fieldBuffer << m_uint32Values[index];
16859 }
16860 else if (index == UNIT_FIELD_FACTIONTEMPLATE)
16861 {
16862 cacheValue.posPointers.UnitFieldFactionTemplatePos = int32(fieldBuffer.wpos());
16863 fieldBuffer << m_uint32Values[index];
16864 }
16865 else
16866 {
16867 if (sScriptMgr->ShouldTrackValuesUpdatePosByIndex(this, updateType, index))
16868 cacheValue.posPointers.other[index] = static_cast<uint32>(fieldBuffer.wpos());
16869
16870 // send in current format (float as float, uint32 as uint32)
16871 fieldBuffer << m_uint32Values[index];
16872 }
16873 }
16874 }
16875
16876 cacheValue.buffer << uint8(updateMask.GetBlockCount());
16877 updateMask.AppendToPacket(&cacheValue.buffer);
16878 int32 fieldBufferPos = static_cast<int32>(cacheValue.buffer.wpos());
16879 cacheValue.buffer.append(fieldBuffer);
16880 cacheValue.posPointers.ApplyOffset(fieldBufferPos);
16881
16882 int32 cachePos = static_cast<int32>(data->wpos());
16883 data->append(cacheValue.buffer);
16884
16885 BuildValuesCachePosPointers dataAdjustedPos = cacheValue.posPointers;
16886 if (cachePos)
16887 dataAdjustedPos.ApplyOffset(cachePos);
16888
16889 PatchValuesUpdate(*data, dataAdjustedPos, target);
16890
16891 _valuesUpdateCache.insert(std::pair<uint64, BuildValuesCachedBuffer>(cacheKey, std::move(cacheValue)));
16892}
std::uint64_t uint64
Definition Define.h:106
@ UNIT_DYNFLAG_SPECIALINFO
Definition SharedDefines.h:3358
@ UNIT_DYNFLAG_TAPPED_BY_PLAYER
Definition SharedDefines.h:3357
@ UNIT_DYNFLAG_TAPPED
Definition SharedDefines.h:3356
@ SPELL_AURA_EMPATHY
Definition SpellAuraDefines.h:184
@ UPDATETYPE_VALUES
Definition UpdateData.h:28
uint32 UnitUpdateFieldFlags[PLAYER_END]
Definition UpdateFieldFlags.cpp:162
@ UF_FLAG_SPECIAL_INFO
Definition UpdateFieldFlags.h:32
@ UF_FLAG_PUBLIC
Definition UpdateFieldFlags.h:27
@ UF_FLAG_OWNER
Definition UpdateFieldFlags.h:29
@ UF_FLAG_PRIVATE
Definition UpdateFieldFlags.h:28
@ UF_FLAG_PARTY_MEMBER
Definition UpdateFieldFlags.h:33
@ UNIT_NPC_FLAGS
Definition UpdateFields.h:139
@ UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE
Definition UpdateFields.h:157
@ UNIT_FIELD_POSSTAT0
Definition UpdateFields.h:146
@ UNIT_FIELD_RANGEDATTACKTIME
Definition UpdateFields.h:121
@ UNIT_FIELD_DISPLAYID
Definition UpdateFields.h:124
@ UNIT_FIELD_FACTIONTEMPLATE
Definition UpdateFields.h:115
@ UNIT_FIELD_POSSTAT4
Definition UpdateFields.h:150
@ UNIT_FIELD_NEGSTAT4
Definition UpdateFields.h:155
@ UNIT_FIELD_FLAGS
Definition UpdateFields.h:117
@ UNIT_FIELD_NEGSTAT0
Definition UpdateFields.h:151
@ UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE
Definition UpdateFields.h:158
@ UNIT_DYNAMIC_FLAGS
Definition UpdateFields.h:136
Definition ByteBuffer.h:70
void append(T value)
Definition ByteBuffer.h:129
std::size_t wpos() const
Definition ByteBuffer.h:330
uint16 _fieldNotifyFlags
Definition Object.h:268
bool HasDynamicFlag(uint32 flag) const
Definition Object.h:124
UpdateMask _changesMask
Definition Object.h:264
uint32 * m_uint32Values
Definition Object.h:260
uint16 m_valuesCount
Definition Object.h:266
float * m_floatValues
Definition Object.h:261
bool IsInSameRaidWith(Player const *p) const
Definition Player.h:1902
ValuesUpdateCache _valuesUpdateCache
Definition Unit.h:2256
bool HasAuraTypeWithCaster(AuraType auratype, ObjectGuid caster) const
Definition Unit.cpp:6022
ObjectGuid GetOwnerGUID() const
Definition Unit.h:713
void PatchValuesUpdate(ByteBuffer &valuesUpdateBuf, BuildValuesCachePosPointers &posPointers, Player *target)
Definition Unit.cpp:16894
Definition UpdateMask.h:25
uint32 GetBlockCount() const
Definition UpdateMask.h:62
bool GetBit(uint32 index) const
Definition UpdateMask.h:47
void SetCount(uint32 valuesCount)
Definition UpdateMask.h:65
void SetBit(uint32 index)
Definition UpdateMask.h:45
void AppendToPacket(ByteBuffer *data)
Definition UpdateMask.h:49
Definition UnitUtils.h:65
void ApplyOffset(uint32 offset)
Definition UnitUtils.h:70
Definition UnitUtils.h:110

References Object::_changesMask, Object::_fieldNotifyFlags, _valuesUpdateCache, ByteBuffer::append(), UpdateMask::AppendToPacket(), BuildValuesCachePosPointers::ApplyOffset(), BuildValuesCachedBuffer::buffer, UpdateMask::GetBit(), UpdateMask::GetBlockCount(), GetCharmerOrOwnerPlayerOrPlayerItself(), Object::GetGUID(), GetOwnerGUID(), HasAuraTypeWithCaster(), Object::HasDynamicFlag(), Object::HasFlag(), Player::IsInSameRaidWith(), Object::m_floatValues, Object::m_uint32Values, Object::m_valuesCount, BuildValuesCachePosPointers::other, PatchValuesUpdate(), PER_CASTER_AURA_STATE_MASK, BuildValuesCachedBuffer::posPointers, UpdateMask::SetBit(), UpdateMask::SetCount(), SPELL_AURA_EMPATHY, sScriptMgr, UF_FLAG_OWNER, UF_FLAG_PARTY_MEMBER, UF_FLAG_PRIVATE, UF_FLAG_PUBLIC, UF_FLAG_SPECIAL_INFO, UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_SPECIALINFO, UNIT_DYNFLAG_TAPPED, UNIT_DYNFLAG_TAPPED_BY_PLAYER, UNIT_FIELD_AURASTATE, UNIT_FIELD_BASEATTACKTIME, UNIT_FIELD_BYTES_2, UNIT_FIELD_DISPLAYID, UNIT_FIELD_FACTIONTEMPLATE, UNIT_FIELD_FLAGS, UNIT_FIELD_NEGSTAT0, UNIT_FIELD_NEGSTAT4, UNIT_FIELD_POSSTAT0, UNIT_FIELD_POSSTAT4, UNIT_FIELD_RANGEDATTACKTIME, UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE, UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE, UNIT_NPC_FLAGS, BuildValuesCachePosPointers::UnitDynamicFlagsPos, BuildValuesCachePosPointers::UnitFieldAuraStatePos, BuildValuesCachePosPointers::UnitFieldBytes2Pos, BuildValuesCachePosPointers::UnitFieldDisplayPos, BuildValuesCachePosPointers::UnitFieldFactionTemplatePos, BuildValuesCachePosPointers::UnitFieldFlagsPos, BuildValuesCachePosPointers::UnitNPCFlagsPos, UnitUpdateFieldFlags, UPDATETYPE_VALUES, and ByteBuffer::wpos().

◆ CalcAbsorbResist()

void Unit::CalcAbsorbResist ( DamageInfo dmgInfo,
bool  Splited = false 
)
static
2346{
2347 Unit* victim = dmgInfo.GetVictim();
2348 Unit* attacker = dmgInfo.GetAttacker();
2349 uint32 damage = dmgInfo.GetDamage();
2350 SpellSchoolMask schoolMask = dmgInfo.GetSchoolMask();
2351 SpellInfo const* spellInfo = dmgInfo.GetSpellInfo();
2352
2353 if (!victim || !victim->IsAlive() || !damage)
2354 return;
2355
2356 // Magic damage, check for resists
2357 // Ignore spells that cant be resisted
2358 // Xinef: holy resistance exists for npcs
2359 if (!(schoolMask & SPELL_SCHOOL_MASK_NORMAL) && (!(schoolMask & SPELL_SCHOOL_MASK_HOLY) || victim->IsCreature()) && (!spellInfo || (!spellInfo->HasAttribute(SPELL_ATTR0_CU_BINARY_SPELL) && !spellInfo->HasAttribute(SPELL_ATTR4_NO_CAST_LOG))))
2360 {
2361 float averageResist = Unit::GetEffectiveResistChance(attacker, schoolMask, victim);
2362
2363 float discreteResistProbability[11];
2364 for (uint32 i = 0; i < 11; ++i)
2365 {
2366 discreteResistProbability[i] = 0.5f - 2.5f * std::fabs(0.1f * i - averageResist);
2367 if (discreteResistProbability[i] < 0.0f)
2368 discreteResistProbability[i] = 0.0f;
2369 }
2370
2371 if (averageResist <= 0.1f)
2372 {
2373 discreteResistProbability[0] = 1.0f - 7.5f * averageResist;
2374 discreteResistProbability[1] = 5.0f * averageResist;
2375 discreteResistProbability[2] = 2.5f * averageResist;
2376 }
2377
2378 float r = float(rand_norm());
2379 uint32 i = 0;
2380 float probabilitySum = discreteResistProbability[0];
2381
2382 while (r >= probabilitySum && i < 10)
2383 probabilitySum += discreteResistProbability[++i];
2384
2385 float damageResisted = float(damage * i / 10);
2386
2387 if (damageResisted) // if equal to 0, checking these is pointless
2388 {
2389 if (attacker)
2390 {
2391 float mult = attacker->GetTotalAuraMultiplier(SPELL_AURA_MOD_ABILITY_IGNORE_TARGET_RESIST, [schoolMask, spellInfo](AuraEffect const* aurEff)
2392 {
2393 if (!(aurEff->GetMiscValue() & schoolMask))
2394 return false;
2395
2396 if (!aurEff->IsAffectedOnSpell(spellInfo))
2397 return false;
2398
2399 return true;
2400 });
2401 damageResisted -= damageResisted * (mult - 1.0f);
2403 damageResisted -= damageResisted * (mult - 1.0f);
2404 }
2405
2406 // pussywizard:
2407 if (spellInfo && spellInfo->HasAttribute(SPELL_ATTR0_CU_SCHOOLMASK_NORMAL_WITH_MAGIC))
2408 {
2409 uint32 damageAfterArmor = Unit::CalcArmorReducedDamage(attacker, victim, damage, spellInfo, 0, BASE_ATTACK);
2410 uint32 armorReduction = damage - damageAfterArmor;
2411 if (armorReduction < damageResisted) // pick the lower one, the weakest resistance counts
2412 damageResisted = armorReduction;
2413 }
2414 }
2415
2416 dmgInfo.ResistDamage(uint32(damageResisted));
2417 }
2418
2419 // Ignore Absorption Auras
2420 float auraAbsorbMod = 0;
2421 if (attacker)
2422 {
2424 auraAbsorbMod = std::max(auraAbsorbMod, float(attacker->GetMaxPositiveAuraModifier(SPELL_AURA_MOD_TARGET_ABILITY_ABSORB_SCHOOL, [spellInfo, schoolMask](AuraEffect const* aurEff)
2425 {
2426 if (!(aurEff->GetMiscValue() & schoolMask))
2427 return false;
2428
2429 if (!aurEff->IsAffectedOnSpell(spellInfo))
2430 return false;
2431
2432 return true;
2433 })));
2434 RoundToInterval(auraAbsorbMod, 0.0f, 100.0f);
2435 }
2436
2437 // We're going to call functions which can modify content of the list during iteration over it's elements
2438 // Let's copy the list so we can prevent iterator invalidation
2440 std::sort(vSchoolAbsorbCopy.begin(), vSchoolAbsorbCopy.end(), Acore::AbsorbAuraOrderPred());
2441
2442 // absorb without mana cost
2443 for (AuraEffectList::iterator itr = vSchoolAbsorbCopy.begin(); (itr != vSchoolAbsorbCopy.end()) && (dmgInfo.GetDamage() > 0); ++itr)
2444 {
2445 AuraEffect* absorbAurEff = *itr;
2446 // Check if aura was removed during iteration - we don't need to work on such auras
2447 AuraApplication const* aurApp = absorbAurEff->GetBase()->GetApplicationOfTarget(victim->GetGUID());
2448 if (!aurApp)
2449 continue;
2450 if (!(absorbAurEff->GetMiscValue() & schoolMask))
2451 continue;
2452
2453 // get amount which can be still absorbed by the aura
2454 int32 currentAbsorb = absorbAurEff->GetAmount();
2455 // aura with infinite absorb amount - let the scripts handle absorbtion amount, set here to 0 for safety
2456 if (currentAbsorb < 0)
2457 currentAbsorb = 0;
2458
2459 uint32 tempAbsorb = uint32(currentAbsorb);
2460
2461 bool defaultPrevented = false;
2462
2463 absorbAurEff->GetBase()->CallScriptEffectAbsorbHandlers(absorbAurEff, aurApp, dmgInfo, tempAbsorb, defaultPrevented);
2464 currentAbsorb = tempAbsorb;
2465
2466 if (defaultPrevented)
2467 continue;
2468
2469 // absorb must be smaller than the damage itself
2470 currentAbsorb = RoundToInterval(currentAbsorb, 0, int32(dmgInfo.GetDamage()));
2471
2472 // xinef: do this after absorb is rounded to damage...
2473 AddPct(currentAbsorb, -auraAbsorbMod);
2474
2475 dmgInfo.AbsorbDamage(currentAbsorb);
2476
2477 tempAbsorb = currentAbsorb;
2478 absorbAurEff->GetBase()->CallScriptEffectAfterAbsorbHandlers(absorbAurEff, aurApp, dmgInfo, tempAbsorb);
2479
2480 // Check if our aura is using amount to count damage
2481 if (absorbAurEff->GetAmount() >= 0)
2482 {
2483 // Reduce shield amount
2484 absorbAurEff->SetAmount(absorbAurEff->GetAmount() - currentAbsorb);
2485 // Aura cannot absorb anything more - remove it
2486 if (absorbAurEff->GetAmount() <= 0)
2487 absorbAurEff->GetBase()->Remove(AURA_REMOVE_BY_ENEMY_SPELL);
2488 }
2489 }
2490
2491 // absorb by mana cost
2493 for (AuraEffectList::const_iterator itr = vManaShieldCopy.begin(); (itr != vManaShieldCopy.end()) && (dmgInfo.GetDamage() > 0); ++itr)
2494 {
2495 AuraEffect* absorbAurEff = *itr;
2496 // Check if aura was removed during iteration - we don't need to work on such auras
2497 AuraApplication const* aurApp = absorbAurEff->GetBase()->GetApplicationOfTarget(victim->GetGUID());
2498 if (!aurApp)
2499 continue;
2500 // check damage school mask
2501 if (!(absorbAurEff->GetMiscValue() & schoolMask))
2502 continue;
2503
2504 // get amount which can be still absorbed by the aura
2505 int32 currentAbsorb = absorbAurEff->GetAmount();
2506 // aura with infinite absorb amount - let the scripts handle absorbtion amount, set here to 0 for safety
2507 if (currentAbsorb < 0)
2508 currentAbsorb = 0;
2509
2510 uint32 tempAbsorb = currentAbsorb;
2511
2512 bool defaultPrevented = false;
2513
2514 absorbAurEff->GetBase()->CallScriptEffectManaShieldHandlers(absorbAurEff, aurApp, dmgInfo, tempAbsorb, defaultPrevented);
2515 currentAbsorb = tempAbsorb;
2516
2517 if (defaultPrevented)
2518 continue;
2519
2520 // absorb must be smaller than the damage itself
2521 currentAbsorb = RoundToInterval(currentAbsorb, 0, int32(dmgInfo.GetDamage()));
2522
2523 // xinef: do this after absorb is rounded to damage...
2524 AddPct(currentAbsorb, -auraAbsorbMod);
2525
2526 int32 manaReduction = currentAbsorb;
2527
2528 // lower absorb amount by talents
2529 if (float manaMultiplier = absorbAurEff->GetSpellInfo()->Effects[absorbAurEff->GetEffIndex()].CalcValueMultiplier(absorbAurEff->GetCaster()))
2530 manaReduction = int32(float(manaReduction) * manaMultiplier);
2531
2532 int32 manaTaken = -victim->ModifyPower(POWER_MANA, -manaReduction);
2533
2534 // take case when mana has ended up into account
2535 currentAbsorb = currentAbsorb ? int32(float(currentAbsorb) * (float(manaTaken) / float(manaReduction))) : 0;
2536
2537 dmgInfo.AbsorbDamage(currentAbsorb);
2538
2539 tempAbsorb = currentAbsorb;
2540 absorbAurEff->GetBase()->CallScriptEffectAfterManaShieldHandlers(absorbAurEff, aurApp, dmgInfo, tempAbsorb);
2541
2542 // Check if our aura is using amount to count damage
2543 if (absorbAurEff->GetAmount() >= 0)
2544 {
2545 absorbAurEff->SetAmount(absorbAurEff->GetAmount() - currentAbsorb);
2546 if ((absorbAurEff->GetAmount() <= 0))
2547 absorbAurEff->GetBase()->Remove(AURA_REMOVE_BY_ENEMY_SPELL);
2548 }
2549 }
2550
2551 // split damage auras - only when not damaging self
2552 // Xinef: not true - Warlock Hellfire
2553 if (/*victim != attacker &&*/ !Splited)
2554 {
2555 // We're going to call functions which can modify content of the list during iteration over it's elements
2556 // Let's copy the list so we can prevent iterator invalidation
2557 AuraEffectList vSplitDamageFlatCopy(victim->GetAuraEffectsByType(SPELL_AURA_SPLIT_DAMAGE_FLAT)); // Not used by any spell
2558 for (AuraEffectList::iterator itr = vSplitDamageFlatCopy.begin(); (itr != vSplitDamageFlatCopy.end()) && (dmgInfo.GetDamage() > 0); ++itr)
2559 {
2560 // Check if aura was removed during iteration - we don't need to work on such auras
2561 if (!((*itr)->GetBase()->IsAppliedOnTarget(victim->GetGUID())))
2562 continue;
2563 // check damage school mask
2564 if (!((*itr)->GetMiscValue() & schoolMask))
2565 continue;
2566
2567 // Damage can be splitted only if aura has an alive caster
2568 Unit* caster = (*itr)->GetCaster();
2569 if (!caster || (caster == victim) || !caster->IsInWorld() || !caster->IsAlive())
2570 continue;
2571
2572 int32 splitDamage = (*itr)->GetAmount();
2573
2574 // absorb must be smaller than the damage itself
2575 splitDamage = RoundToInterval(splitDamage, 0, int32(dmgInfo.GetDamage()));
2576
2577 dmgInfo.AbsorbDamage(splitDamage);
2578
2579 uint32 splitted = splitDamage;
2580 uint32 splitted_absorb = 0;
2581 uint32 splitted_resist = 0;
2582
2583 uint32 procAttacker = 0, procVictim = 0;
2584 DamageInfo splittedDmgInfo(attacker, caster, splitted, spellInfo, schoolMask, dmgInfo.GetDamageType());
2585 splittedDmgInfo.AddHitMask(PROC_HIT_NORMAL);
2586 if (caster->IsImmunedToDamageOrSchool(schoolMask))
2587 {
2588 splittedDmgInfo.AddHitMask(PROC_HIT_IMMUNE);
2589 splittedDmgInfo.AbsorbDamage(splitted);
2590 }
2591 else
2592 {
2593 Unit::CalcAbsorbResist(splittedDmgInfo, true);
2594 Unit::DealDamageMods(caster, splitted, &splitted_absorb);
2595 }
2596
2597 splitted_absorb = splittedDmgInfo.GetAbsorb();
2598 splitted_resist = splittedDmgInfo.GetResist();
2599 splitted = splittedDmgInfo.GetDamage();
2600
2601 // Add absorb to hitMask if damage was absorbed
2602 if (splittedDmgInfo.GetAbsorb())
2603 splittedDmgInfo.AddHitMask(PROC_HIT_ABSORB);
2604
2605 // create procs
2606 createProcFlags(spellInfo, BASE_ATTACK, false, procAttacker, procVictim);
2607 caster->ProcSkillsAndReactives(true, attacker, procVictim, splittedDmgInfo.GetHitMask(), BASE_ATTACK, spellInfo, splitted, nullptr, -1, nullptr, &splittedDmgInfo);
2608
2609 if (attacker)
2610 {
2611 attacker->SendSpellNonMeleeDamageLog(caster, (*itr)->GetSpellInfo(), splitted, schoolMask, splitted_absorb, splitted_resist, false, 0, false, true);
2612 }
2613
2614 CleanDamage cleanDamage = CleanDamage(splitted, 0, BASE_ATTACK, MELEE_HIT_NORMAL);
2615 Unit::DealDamage(attacker, caster, splitted, &cleanDamage, DIRECT_DAMAGE, schoolMask, (*itr)->GetSpellInfo(), false);
2616 }
2617
2618 // We're going to call functions which can modify content of the list during iteration over it's elements
2619 // Let's copy the list so we can prevent iterator invalidation
2621 for (AuraEffectList::iterator itr = vSplitDamagePctCopy.begin(); (itr != vSplitDamagePctCopy.end()) && (dmgInfo.GetDamage() > 0); ++itr)
2622 {
2623 // Check if aura was removed during iteration - we don't need to work on such auras
2624 AuraApplication const* aurApp = (*itr)->GetBase()->GetApplicationOfTarget(victim->GetGUID());
2625 if (!aurApp)
2626 continue;
2627
2628 // check damage school mask
2629 if (!((*itr)->GetMiscValue() & schoolMask))
2630 continue;
2631
2632 // Damage can be splitted only if aura has an alive caster
2633 Unit* caster = (*itr)->GetCaster();
2634 if (!caster || (caster == victim) || !caster->IsInWorld() || !caster->IsAlive())
2635 continue;
2636
2637 SpellInfo const* splitSpellInfo = (*itr)->GetSpellInfo();
2638 uint32 splitDamage = CalculatePct(dmgInfo.GetDamage(), (*itr)->GetAmount());
2639 SpellSchoolMask splitSchoolMask = schoolMask;
2640
2641 (*itr)->GetBase()->CallScriptEffectSplitHandlers(*itr, aurApp, dmgInfo, splitDamage);
2642
2643 // absorb must be smaller than the damage itself
2644 splitDamage = RoundToInterval(splitDamage, uint32(0), uint32(dmgInfo.GetDamage()));
2645
2646 // Roar of Sacrifice, dont absorb it
2647 if (splitSpellInfo->Id != 53480)
2648 dmgInfo.AbsorbDamage(splitDamage);
2649 else
2650 splitSchoolMask = SPELL_SCHOOL_MASK_NATURE;
2651
2652 uint32 splitted = splitDamage;
2653 uint32 splitted_absorb = 0;
2654 uint32 splitted_resist = 0;
2655
2656 uint32 procAttacker = 0, procVictim = 0;
2657 DamageInfo splittedDmgInfo(attacker, caster, splitted, spellInfo, splitSchoolMask, dmgInfo.GetDamageType());
2658 splittedDmgInfo.AddHitMask(PROC_HIT_NORMAL);
2659 if (caster->IsImmunedToDamageOrSchool(schoolMask))
2660 {
2661 splittedDmgInfo.AddHitMask(PROC_HIT_IMMUNE);
2662 splittedDmgInfo.AbsorbDamage(splitted);
2663 }
2664 else
2665 {
2666 Unit::CalcAbsorbResist(splittedDmgInfo, true);
2667 Unit::DealDamageMods(caster, splitted, &splitted_absorb);
2668 }
2669
2670 splitted_absorb = splittedDmgInfo.GetAbsorb();
2671 splitted_resist = splittedDmgInfo.GetResist();
2672 splitted = splittedDmgInfo.GetDamage();
2673
2674 // Add absorb to hitMask if damage was absorbed
2675 if (splittedDmgInfo.GetAbsorb())
2676 splittedDmgInfo.AddHitMask(PROC_HIT_ABSORB);
2677
2678 // create procs
2679 createProcFlags(spellInfo, BASE_ATTACK, false, procAttacker, procVictim);
2680 caster->ProcSkillsAndReactives(true, attacker, procVictim, splittedDmgInfo.GetHitMask(), BASE_ATTACK, spellInfo, splitted);
2681
2682 if (attacker)
2683 {
2684 attacker->SendSpellNonMeleeDamageLog(caster, splitSpellInfo, splitted, splitSchoolMask, splitted_absorb, splitted_resist, false, 0, false, true);
2685 }
2686
2687 CleanDamage cleanDamage = CleanDamage(splitted, 0, BASE_ATTACK, MELEE_HIT_NORMAL);
2688 Unit::DealDamage(attacker, caster, splitted, &cleanDamage, DIRECT_DAMAGE, splitSchoolMask, splitSpellInfo, false);
2689 }
2690 }
2691}
double rand_norm()
Definition Random.cpp:85
@ POWER_MANA
Definition SharedDefines.h:257
@ SPELL_ATTR4_NO_CAST_LOG
Definition SharedDefines.h:518
SpellSchoolMask
Definition SharedDefines.h:283
@ SPELL_SCHOOL_MASK_NORMAL
Definition SharedDefines.h:285
@ SPELL_SCHOOL_MASK_NATURE
Definition SharedDefines.h:288
@ SPELL_SCHOOL_MASK_HOLY
Definition SharedDefines.h:286
@ SPELL_AURA_MANA_SHIELD
Definition SpellAuraDefines.h:160
@ SPELL_AURA_MOD_TARGET_ABSORB_SCHOOL
Definition SpellAuraDefines.h:257
@ SPELL_AURA_MOD_IGNORE_TARGET_RESIST
Definition SpellAuraDefines.h:332
@ SPELL_AURA_SPLIT_DAMAGE_FLAT
Definition SpellAuraDefines.h:216
@ SPELL_AURA_MOD_TARGET_ABILITY_ABSORB_SCHOOL
Definition SpellAuraDefines.h:258
@ SPELL_AURA_SPLIT_DAMAGE_PCT
Definition SpellAuraDefines.h:144
@ SPELL_AURA_SCHOOL_ABSORB
Definition SpellAuraDefines.h:132
@ SPELL_AURA_MOD_ABILITY_IGNORE_TARGET_RESIST
Definition SpellAuraDefines.h:333
@ AURA_REMOVE_BY_ENEMY_SPELL
Definition SpellAuraDefines.h:394
@ SPELL_ATTR0_CU_BINARY_SPELL
Definition SpellInfo.h:197
@ SPELL_ATTR0_CU_SCHOOLMASK_NORMAL_WITH_MAGIC
Definition SpellInfo.h:200
@ PROC_HIT_IMMUNE
Definition SpellMgr.h:265
@ PROC_HIT_ABSORB
Definition SpellMgr.h:267
@ PROC_HIT_NORMAL
Definition SpellMgr.h:257
void createProcFlags(SpellInfo const *spellInfo, WeaponAttackType attackType, bool positive, uint32 &procAttacker, uint32 &procVictim)
Definition Unit.cpp:12698
@ DIRECT_DAMAGE
Definition Unit.h:254
@ MELEE_HIT_NORMAL
Definition Unit.h:292
T RoundToInterval(T &num, T floor, T ceil)
Definition Util.h:70
Definition SpellAuraEffects.h:351
Definition SpellAuraEffects.h:39
SpellInfo const * GetSpellInfo() const
Definition SpellAuraEffects.h:54
bool IsAffectedOnSpell(SpellInfo const *spell) const
Definition SpellAuraEffects.cpp:1104
void SetAmount(int32 amount)
Definition SpellAuraEffects.h:66
Unit * GetCaster() const
Definition SpellAuraEffects.h:47
int32 GetMiscValue() const
Definition SpellAuraEffects.cpp:442
Aura * GetBase() const
Definition SpellAuraEffects.h:49
uint32 GetEffIndex() const
Definition SpellAuraEffects.h:56
int32 GetAmount() const
Definition SpellAuraEffects.h:64
void CallScriptEffectAbsorbHandlers(AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &absorbAmount, bool &defaultPrevented)
Definition SpellAuras.cpp:2551
void CallScriptEffectAfterAbsorbHandlers(AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &absorbAmount)
Definition SpellAuras.cpp:2569
void CallScriptEffectManaShieldHandlers(AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &absorbAmount, bool &defaultPrevented)
Definition SpellAuras.cpp:2583
void CallScriptEffectAfterManaShieldHandlers(AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &absorbAmount)
Definition SpellAuras.cpp:2597
void ResistDamage(uint32 amount)
Definition Unit.cpp:269
void AbsorbDamage(uint32 amount)
Definition Unit.cpp:262
Unit * GetVictim() const
Definition Unit.h:367
Unit * GetAttacker() const
Definition Unit.h:366
SpellInfo const * GetSpellInfo() const
Definition Unit.h:368
DamageEffectType GetDamageType() const
Definition Unit.h:370
SpellSchoolMask GetSchoolMask() const
Definition Unit.h:369
uint32 GetDamage() const
Definition Unit.h:372
std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > Effects
Definition SpellInfo.h:417
int32 ModifyPower(Powers power, int32 val, bool withPowerUpdate=true)
Definition Unit.cpp:11039
int32 GetMaxPositiveAuraModifierByMiscMask(AuraType auratype, uint32 misc_mask, const AuraEffect *except=nullptr) const
Definition Unit.cpp:6336
AuraEffectList const & GetAuraEffectsByType(AuraType type) const
Definition Unit.h:1428
static float GetEffectiveResistChance(Unit const *owner, SpellSchoolMask schoolMask, Unit const *victim, SpellInfo const *spellInfo=nullptr)
Definition Unit.cpp:2310
std::vector< AuraEffect * > AuraEffectList
Definition Unit.h:680
static uint32 CalcArmorReducedDamage(Unit const *attacker, Unit const *victim, const uint32 damage, SpellInfo const *spellInfo, uint8 attackerLevel=0, WeaponAttackType attackType=MAX_ATTACK)
Definition Unit.cpp:2228
float GetTotalAuraMultiplier(AuraType auratype) const
Definition Unit.cpp:6301
int32 GetMaxPositiveAuraModifier(AuraType auratype) const
Definition Unit.cpp:6306
void SendSpellNonMeleeDamageLog(SpellNonMeleeDamage *log)
Definition Unit.cpp:6707
float GetTotalAuraMultiplierByMiscMask(AuraType auratype, uint32 misc_mask) const
Definition Unit.cpp:6326
void ProcSkillsAndReactives(bool isVictim, Unit *target, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, SpellInfo const *procSpellInfo, uint32 damage, SpellInfo const *procAura=nullptr, int8 procAuraEffectIndex=-1, Spell const *procSpell=nullptr, DamageInfo *damageInfo=nullptr, HealInfo *healInfo=nullptr, uint32 procPhase=2)
Definition Unit.cpp:12772
static void CalcAbsorbResist(DamageInfo &dmgInfo, bool Splited=false)
Definition Unit.cpp:2345
bool IsImmunedToDamageOrSchool(SpellSchoolMask schoolMask) const
Definition Unit.cpp:9981
static uint32 DealDamage(Unit *attacker, Unit *victim, uint32 damage, CleanDamage const *cleanDamage=nullptr, DamageEffectType damagetype=DIRECT_DAMAGE, SpellSchoolMask damageSchoolMask=SPELL_SCHOOL_MASK_NORMAL, SpellInfo const *spellProto=nullptr, bool durabilityLoss=true, bool allowGM=false, Spell const *spell=nullptr)
Definition Unit.cpp:1007
Definition Unit.h:321

References DamageInfo::AbsorbDamage(), DamageInfo::AddHitMask(), AddPct(), AURA_REMOVE_BY_ENEMY_SPELL, BASE_ATTACK, CalcAbsorbResist(), CalcArmorReducedDamage(), CalculatePct(), Aura::CallScriptEffectAbsorbHandlers(), Aura::CallScriptEffectAfterAbsorbHandlers(), Aura::CallScriptEffectAfterManaShieldHandlers(), Aura::CallScriptEffectManaShieldHandlers(), createProcFlags(), DealDamage(), DealDamageMods(), DIRECT_DAMAGE, SpellInfo::Effects, DamageInfo::GetAbsorb(), AuraEffect::GetAmount(), Aura::GetApplicationOfTarget(), DamageInfo::GetAttacker(), GetAuraEffectsByType(), AuraEffect::GetBase(), AuraApplication::GetBase(), AuraEffect::GetCaster(), DamageInfo::GetDamage(), DamageInfo::GetDamageType(), GetEffectiveResistChance(), AuraEffect::GetEffIndex(), Object::GetGUID(), DamageInfo::GetHitMask(), GetMaxPositiveAuraModifier(), GetMaxPositiveAuraModifierByMiscMask(), AuraEffect::GetMiscValue(), DamageInfo::GetResist(), DamageInfo::GetSchoolMask(), DamageInfo::GetSpellInfo(), AuraEffect::GetSpellInfo(), GetTotalAuraMultiplier(), GetTotalAuraMultiplierByMiscMask(), DamageInfo::GetVictim(), SpellInfo::HasAttribute(), SpellInfo::Id, AuraEffect::IsAffectedOnSpell(), IsAlive(), Object::IsCreature(), IsImmunedToDamageOrSchool(), Object::IsInWorld(), MELEE_HIT_NORMAL, ModifyPower(), POWER_MANA, PROC_HIT_ABSORB, PROC_HIT_IMMUNE, PROC_HIT_NORMAL, ProcSkillsAndReactives(), rand_norm(), Aura::Remove(), DamageInfo::ResistDamage(), RoundToInterval(), SendSpellNonMeleeDamageLog(), AuraEffect::SetAmount(), SPELL_ATTR0_CU_BINARY_SPELL, SPELL_ATTR0_CU_SCHOOLMASK_NORMAL_WITH_MAGIC, SPELL_ATTR4_NO_CAST_LOG, SPELL_AURA_MANA_SHIELD, SPELL_AURA_MOD_ABILITY_IGNORE_TARGET_RESIST, SPELL_AURA_MOD_IGNORE_TARGET_RESIST, SPELL_AURA_MOD_TARGET_ABILITY_ABSORB_SCHOOL, SPELL_AURA_MOD_TARGET_ABSORB_SCHOOL, SPELL_AURA_SCHOOL_ABSORB, SPELL_AURA_SPLIT_DAMAGE_FLAT, SPELL_AURA_SPLIT_DAMAGE_PCT, SPELL_SCHOOL_MASK_HOLY, SPELL_SCHOOL_MASK_NATURE, and SPELL_SCHOOL_MASK_NORMAL.

Referenced by CalcAbsorbResist(), CalculateMeleeDamage(), CalculateSpellDamageTaken(), DealDamage(), DealDamageShieldDamage(), Player::EnvironmentalDamage(), spell_valkyr_touch_aura::HandleEffectPeriodic(), AuraEffect::HandlePeriodicDamageAurasTick(), and AuraEffect::HandlePeriodicHealthLeechAuraTick().

◆ CalcArmorReducedDamage()

uint32 Unit::CalcArmorReducedDamage ( Unit const *  attacker,
Unit const *  victim,
const uint32  damage,
SpellInfo const *  spellInfo,
uint8  attackerLevel = 0,
WeaponAttackType  attackType = MAX_ATTACK 
)
static
2229{
2230 float armor = float(victim->GetArmor());
2231
2232 // Ignore enemy armor by SPELL_AURA_MOD_TARGET_RESISTANCE aura
2233 if (attacker)
2234 {
2235 armor += attacker->GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_TARGET_RESISTANCE, SPELL_SCHOOL_MASK_NORMAL);
2236
2237 if (spellInfo)
2238 if (Player* modOwner = attacker->GetSpellModOwner())
2239 modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_IGNORE_ARMOR, armor);
2240
2241 AuraEffectList const& ResIgnoreAurasAb = attacker->GetAuraEffectsByType(SPELL_AURA_MOD_ABILITY_IGNORE_TARGET_RESIST);
2242 for (AuraEffectList::const_iterator j = ResIgnoreAurasAb.begin(); j != ResIgnoreAurasAb.end(); ++j)
2243 {
2244 if ((*j)->GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL
2245 && (*j)->IsAffectedOnSpell(spellInfo))
2246 armor = std::floor(AddPct(armor, -(*j)->GetAmount()));
2247 }
2248
2249 AuraEffectList const& ResIgnoreAuras = attacker->GetAuraEffectsByType(SPELL_AURA_MOD_IGNORE_TARGET_RESIST);
2250 for (AuraEffectList::const_iterator j = ResIgnoreAuras.begin(); j != ResIgnoreAuras.end(); ++j)
2251 {
2252 if ((*j)->GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL)
2253 armor = std::floor(AddPct(armor, -(*j)->GetAmount()));
2254 }
2255
2256 // Apply Player CR_ARMOR_PENETRATION rating and buffs from stances\specializations etc.
2257 if (attacker->IsPlayer())
2258 {
2259 float bonusPct = 0;
2260 bonusPct += attacker->GetTotalAuraModifier(SPELL_AURA_MOD_ARMOR_PENETRATION_PCT, [spellInfo,attacker](AuraEffect const* aurEff)
2261 {
2262 if (aurEff->GetSpellInfo()->EquippedItemClass == -1)
2263 {
2264 if (!spellInfo || aurEff->IsAffectedOnSpell(spellInfo) || aurEff->GetMiscValue() & spellInfo->GetSchoolMask())
2265 return true;
2266 else if (!aurEff->GetMiscValue() && !aurEff->HasSpellClassMask())
2267 return true;
2268 }
2269 else
2270 {
2271 if (attacker->ToPlayer()->HasItemFitToSpellRequirements(aurEff->GetSpellInfo()))
2272 return true;
2273 }
2274 return false;
2275 });
2276
2277 float maxArmorPen = 0;
2278 if (victim->GetLevel() < 60)
2279 maxArmorPen = float(400 + 85 * victim->GetLevel());
2280 else
2281 maxArmorPen = 400 + 85 * victim->GetLevel() + 4.5f * 85 * (victim->GetLevel() - 59);
2282
2283 // Cap armor penetration to this number
2284 maxArmorPen = std::min((armor + maxArmorPen) / 3, armor);
2285 // Figure out how much armor do we ignore
2286 float armorPen = CalculatePct(maxArmorPen, bonusPct + attacker->ToPlayer()->GetRatingBonusValue(CR_ARMOR_PENETRATION));
2287 // Got the value, apply it
2288 armor -= std::min(armorPen, maxArmorPen);
2289 }
2290 }
2291
2292 if (armor < 0.0f)
2293 armor = 0.0f;
2294
2295 float levelModifier = attacker ? attacker->GetLevel() : attackerLevel;
2296 if (levelModifier > 59)
2297 levelModifier = levelModifier + (4.5f * (levelModifier - 59));
2298
2299 float tmpvalue = 0.1f * armor / (8.5f * levelModifier + 40);
2300 tmpvalue = tmpvalue / (1.0f + tmpvalue);
2301
2302 if (tmpvalue < 0.0f)
2303 tmpvalue = 0.0f;
2304 if (tmpvalue > 0.75f)
2305 tmpvalue = 0.75f;
2306
2307 return uint32(std::ceil(std::max(damage * (1.0f - tmpvalue), 0.0f)));
2308}
@ SPELL_AURA_MOD_ARMOR_PENETRATION_PCT
Definition SpellAuraDefines.h:343
@ SPELL_AURA_MOD_TARGET_RESISTANCE
Definition SpellAuraDefines.h:186
@ SPELLMOD_IGNORE_ARMOR
Definition SpellDefines.h:89
@ CR_ARMOR_PENETRATION
Definition Unit.h:247
bool HasSpellClassMask() const
Definition SpellAuraEffects.cpp:1116
int32 EquippedItemClass
Definition SpellInfo.h:399

References AddPct(), CalculatePct(), CR_ARMOR_PENETRATION, SpellInfo::EquippedItemClass, GetArmor(), GetAuraEffectsByType(), GetLevel(), AuraEffect::GetMiscValue(), Player::GetRatingBonusValue(), SpellInfo::GetSchoolMask(), AuraEffect::GetSpellInfo(), GetSpellModOwner(), GetTotalAuraModifier(), GetTotalAuraModifierByMiscMask(), Player::HasItemFitToSpellRequirements(), AuraEffect::HasSpellClassMask(), SpellInfo::Id, AuraEffect::IsAffectedOnSpell(), Object::IsPlayer(), SPELL_AURA_MOD_ABILITY_IGNORE_TARGET_RESIST, SPELL_AURA_MOD_ARMOR_PENETRATION_PCT, SPELL_AURA_MOD_IGNORE_TARGET_RESIST, SPELL_AURA_MOD_TARGET_RESISTANCE, SPELL_SCHOOL_MASK_NORMAL, SPELLMOD_IGNORE_ARMOR, and Object::ToPlayer().

Referenced by CalcAbsorbResist(), CalculateMeleeDamage(), CalculateSpellDamageTaken(), boss_priestess_lackey_commonAI::GetThreatMod(), boss_faction_championsAI::GetThreatMod(), AuraEffect::HandlePeriodicDamageAurasTick(), and AuraEffect::HandlePeriodicHealthLeechAuraTick().

◆ CalcHealAbsorb()

void Unit::CalcHealAbsorb ( HealInfo healInfo)
static
2694{
2695 if (!healInfo.GetHeal())
2696 return;
2697
2698 int32 const healing = static_cast<int32>(healInfo.GetHeal());
2699 int32 absorbAmount = 0;
2700
2701 // Need remove expired auras after
2702 bool existExpired = false;
2703
2704 // absorb without mana cost
2706 for (AuraEffectList::const_iterator i = vHealAbsorb.begin(); i != vHealAbsorb.end() && absorbAmount <= healing; ++i)
2707 {
2708 if (!((*i)->GetMiscValue() & healInfo.GetSpellInfo()->SchoolMask))
2709 continue;
2710
2711 // Max Amount can be absorbed by this aura
2712 int32 currentAbsorb = (*i)->GetAmount();
2713
2714 // Found empty aura (impossible but..)
2715 if (currentAbsorb <= 0)
2716 {
2717 existExpired = true;
2718 continue;
2719 }
2720
2721 // currentAbsorb - damage can be absorbed by shield
2722 // If need absorb less damage
2723 if (healing < currentAbsorb + absorbAmount)
2724 currentAbsorb = healing - absorbAmount;
2725
2726 absorbAmount += currentAbsorb;
2727
2728 // Reduce shield amount
2729 (*i)->SetAmount((*i)->GetAmount() - currentAbsorb);
2730 // Need remove it later
2731 if ((*i)->GetAmount() <= 0)
2732 existExpired = true;
2733 }
2734
2735 // Remove all expired absorb auras
2736 if (existExpired)
2737 {
2738 for (AuraEffectList::const_iterator i = vHealAbsorb.begin(); i != vHealAbsorb.end();)
2739 {
2740 AuraEffect* auraEff = *i;
2741 ++i;
2742 if (auraEff->GetAmount() <= 0)
2743 {
2744 uint32 removedAuras = healInfo.GetTarget()->m_removedAurasCount;
2746 if (healInfo.GetTarget()->m_removedAurasCount > removedAuras)
2747 i = vHealAbsorb.begin();
2748 }
2749 }
2750 }
2751
2752 if (absorbAmount > 0)
2753 healInfo.AbsorbHeal(absorbAmount);
2754}
@ SPELL_AURA_SCHOOL_HEAL_ABSORB
Definition SpellAuraDefines.h:364
SpellInfo const * GetSpellInfo() const
Definition Unit.h:433
void AbsorbHeal(uint32 amount)
Definition Unit.h:402
Unit * GetTarget() const
Definition Unit.h:428
uint32 GetHeal() const
Definition Unit.h:429
uint32 SchoolMask
Definition SpellInfo.h:416

References HealInfo::AbsorbHeal(), AURA_REMOVE_BY_ENEMY_SPELL, AuraEffect::GetAmount(), GetAuraEffectsByType(), AuraEffect::GetBase(), HealInfo::GetHeal(), HealInfo::GetSpellInfo(), HealInfo::GetTarget(), m_removedAurasCount, Aura::Remove(), SpellInfo::SchoolMask, and SPELL_AURA_SCHOOL_HEAL_ABSORB.

Referenced by AuraEffect::HandlePeriodicHealAurasTick(), and HealBySpell().

◆ CalcSpellDuration()

int32 Unit::CalcSpellDuration ( SpellInfo const *  spellProto)
11605{
11606 uint8 comboPoints = GetComboPoints();
11607
11608 int32 minduration = spellProto->GetDuration();
11609 int32 maxduration = spellProto->GetMaxDuration();
11610
11611 int32 duration;
11612
11613 if (comboPoints && minduration != -1 && minduration != maxduration)
11614 duration = minduration + int32((maxduration - minduration) * comboPoints / 5);
11615 else
11616 duration = minduration;
11617
11618 return duration;
11619}
uint8 GetComboPoints(Unit const *who=nullptr) const
Definition Unit.h:1014

References GetComboPoints(), SpellInfo::GetDuration(), and SpellInfo::GetMaxDuration().

Referenced by Aura::CalcMaxDuration(), Spell::EffectInterruptCast(), Spell::EffectSchoolDMG(), and Aura::HandleAuraSpecificMods().

◆ CalculateAOEDamageReduction()

int32 Unit::CalculateAOEDamageReduction ( int32  damage,
uint32  schoolMask,
bool  npcCaster 
) const
16329{
16330 damage = int32(float(damage) * GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE, schoolMask));
16331 if (npcCaster)
16333
16334 return damage;
16335}
@ SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE
Definition SpellAuraDefines.h:373
@ SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE
Definition SpellAuraDefines.h:292

References GetTotalAuraMultiplierByMiscMask(), SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE, and SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE.

Referenced by Spell::DoAllEffectOnLaunchTarget(), AuraEffect::HandlePeriodicDamageAurasTick(), and spell_dk_death_and_decay::RecalculateDamage().

◆ CalculateDamage()

uint32 Unit::CalculateDamage ( WeaponAttackType  attType,
bool  normalized,
bool  addTotalPct,
uint8  itemDamagesMask = 0 
)
3169{
3170 float minDamage = 0.0f;
3171 float maxDamage = 0.0f;
3172
3173 if (normalized || !addTotalPct || itemDamagesMask)
3174 {
3175 // get both by default
3176 if (!itemDamagesMask)
3177 {
3178 itemDamagesMask = (1 << 0) | (1 << 1);
3179 }
3180
3181 for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
3182 {
3183 if (itemDamagesMask & (1 << i))
3184 {
3185 float minTmp, maxTmp;
3186 CalculateMinMaxDamage(attType, normalized, addTotalPct, minTmp, maxTmp, i);
3187 minDamage += minTmp;
3188 maxDamage += maxTmp;
3189 }
3190 }
3191 }
3192 else
3193 {
3194 switch (attType)
3195 {
3196 case RANGED_ATTACK:
3199 break;
3200 case BASE_ATTACK:
3203 break;
3204 case OFF_ATTACK:
3207 break;
3208 default:
3209 break;
3210 }
3211 }
3212
3213 minDamage = std::max(0.f, minDamage);
3214 maxDamage = std::max(0.f, maxDamage);
3215
3216 if (minDamage > maxDamage)
3217 {
3218 std::swap(minDamage, maxDamage);
3219 }
3220
3221 return urand(uint32(minDamage), uint32(maxDamage));
3222}
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:44
@ UNIT_FIELD_MINDAMAGE
Definition UpdateFields.h:127
@ UNIT_FIELD_MAXDAMAGE
Definition UpdateFields.h:128
@ UNIT_FIELD_MAXOFFHANDDAMAGE
Definition UpdateFields.h:130
@ UNIT_FIELD_MAXRANGEDDAMAGE
Definition UpdateFields.h:169
@ UNIT_FIELD_MINRANGEDDAMAGE
Definition UpdateFields.h:168
@ UNIT_FIELD_MINOFFHANDDAMAGE
Definition UpdateFields.h:129
virtual void CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bool addTotalPct, float &minDamage, float &maxDamage, uint8 damageIndex=0)=0

References BASE_ATTACK, CalculateMinMaxDamage(), Object::GetFloatValue(), MAX_ITEM_PROTO_DAMAGES, OFF_ATTACK, RANGED_ATTACK, UNIT_FIELD_MAXDAMAGE, UNIT_FIELD_MAXOFFHANDDAMAGE, UNIT_FIELD_MAXRANGEDDAMAGE, UNIT_FIELD_MINDAMAGE, UNIT_FIELD_MINOFFHANDDAMAGE, UNIT_FIELD_MINRANGEDDAMAGE, and urand().

Referenced by CalculateMeleeDamage(), and Spell::EffectWeaponDmg().

◆ CalculateDefaultCoefficient()

float Unit::CalculateDefaultCoefficient ( SpellInfo const *  spellInfo,
DamageEffectType  damagetype 
) const
13613{
13614 // Damage over Time spells bonus calculation
13615 float DotFactor = 1.0f;
13616 if (damagetype == DOT)
13617 {
13618 int32 DotDuration = spellInfo->GetDuration();
13619 if (!spellInfo->IsChanneled() && DotDuration > 0)
13620 DotFactor = DotDuration / 15000.0f;
13621
13622 if (uint32 DotTicks = spellInfo->GetMaxTicks())
13623 DotFactor /= DotTicks;
13624 }
13625
13626 int32 CastingTime = spellInfo->IsChanneled() ? spellInfo->GetDuration() : spellInfo->CalcCastTime();
13627 // Distribute Damage over multiple effects, reduce by AoE
13628 CastingTime = GetCastingTimeForBonus(spellInfo, damagetype, CastingTime);
13629
13630 // As wowwiki says: C = (Cast Time / 3.5)
13631 return (CastingTime / 3500.0f) * DotFactor;
13632}
@ DOT
Definition Unit.h:256
uint32 GetCastingTimeForBonus(SpellInfo const *spellProto, DamageEffectType damagetype, uint32 CastingTime) const
Definition Unit.cpp:13494

References SpellInfo::CalcCastTime(), DOT, GetCastingTimeForBonus(), SpellInfo::GetDuration(), SpellInfo::GetMaxTicks(), and SpellInfo::IsChanneled().

Referenced by SpellDamageBonusTaken(), and SpellHealingBonusTaken().

◆ CalculateLevelPenalty()

float Unit::CalculateLevelPenalty ( SpellInfo const *  spellProto) const
3225{
3226 if (!IsPlayer())
3227 return 1.0f;
3228
3229 if (spellProto->SpellLevel <= 0 || spellProto->SpellLevel >= spellProto->MaxLevel)
3230 return 1.0f;
3231
3232 float LvlPenalty = 0.0f;
3233
3234 // xinef: added brackets
3235 if (spellProto->SpellLevel < 20)
3236 LvlPenalty = (20.0f - spellProto->SpellLevel) * 3.75f;
3237
3238 float LvlFactor = (float(spellProto->SpellLevel) + 6.0f) / float(GetLevel());
3239 if (LvlFactor > 1.0f)
3240 LvlFactor = 1.0f;
3241
3242 return AddPct(LvlFactor, -LvlPenalty);
3243}
uint8 GetLevel() const
Definition Unit.h:1103

References AddPct(), GetLevel(), Object::IsPlayer(), SpellInfo::MaxLevel, and SpellInfo::SpellLevel.

Referenced by spell_mage_ice_barrier_aura::CalculateSpellAmount(), spell_mage_ice_barrier::CalculateSpellAmount(), CalculateSpellAmount(), SpellDamageBonusDone(), SpellDamageBonusTaken(), SpellHealingBonusDone(), and SpellHealingBonusTaken().

◆ CalculateMeleeDamage()

void Unit::CalculateMeleeDamage ( Unit victim,
CalcDamageInfo damageInfo,
WeaponAttackType  attackType = BASE_ATTACK,
const bool  sittingVictim = false 
)
1678{
1679 damageInfo->attacker = this;
1680 damageInfo->target = victim;
1681
1682 for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
1683 {
1684 damageInfo->damages[i].damageSchoolMask = GetMeleeDamageSchoolMask(attackType, i);
1685 damageInfo->damages[i].damage = 0;
1686 damageInfo->damages[i].absorb = 0;
1687 damageInfo->damages[i].resist = 0;
1688 }
1689
1690 damageInfo->attackType = attackType;
1691 damageInfo->cleanDamage = 0;
1692 damageInfo->blocked_amount = 0;
1693
1694 damageInfo->TargetState = 0;
1695 damageInfo->HitInfo = 0;
1696 damageInfo->procAttacker = PROC_FLAG_NONE;
1697 damageInfo->procVictim = PROC_FLAG_NONE;
1698 damageInfo->hitOutCome = MELEE_HIT_EVADE;
1699
1700 if (!victim)
1701 return;
1702
1703 if (!IsAlive() || !victim->IsAlive())
1704 return;
1705
1706 // Select HitInfo/procAttacker/procVictim flag based on attack type
1707 switch (attackType)
1708 {
1709 case BASE_ATTACK:
1712 break;
1713 case OFF_ATTACK:
1716 damageInfo->HitInfo = HITINFO_OFFHAND;
1717 break;
1718 default:
1719 return;
1720 }
1721
1722 // School Immune check
1723 uint8 immunedMask = 0;
1724 bool hasNonPhysicalSchoolMask = false;
1725 for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
1726 {
1728 {
1729 immunedMask |= (1 << i);
1731 {
1732 hasNonPhysicalSchoolMask = true;
1733 }
1734 }
1735 }
1736
1737 // School Immune check
1738 if (immunedMask & ((1 << 0) | (1 << 1)))
1739 {
1740 if (hasNonPhysicalSchoolMask || immunedMask == ((1 << 0) | (1 << 1)))
1741 {
1742 damageInfo->HitInfo |= HITINFO_NORMALSWING;
1743 damageInfo->TargetState = VICTIMSTATE_IS_IMMUNE;
1744 return;
1745 }
1746 }
1747
1748 for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
1749 {
1750 // only players have secondary weapon damage
1751 if (i > 0 && !IsPlayer())
1752 {
1753 break;
1754 }
1755
1756 if (immunedMask & (1 << i))
1757 {
1758 continue;
1759 }
1760
1761 SpellSchoolMask schoolMask = SpellSchoolMask(damageInfo->damages[i].damageSchoolMask);
1762 bool const addPctMods = (schoolMask & SPELL_SCHOOL_MASK_NORMAL);
1763
1764 uint32 damage = 0;
1765 uint8 itemDamagesMask = (IsPlayer()) ? (1 << i) : 0;
1766
1767 damage += CalculateDamage(damageInfo->attackType, false, addPctMods, itemDamagesMask);
1768 // Add melee damage bonus
1769 damage = MeleeDamageBonusDone(damageInfo->target, damage, damageInfo->attackType, nullptr, schoolMask);
1770 damage = damageInfo->target->MeleeDamageBonusTaken(this, damage, damageInfo->attackType, nullptr, schoolMask);
1771
1772 // Script Hook For CalculateMeleeDamage -- Allow scripts to change the Damage pre class mitigation calculations
1773 sScriptMgr->ModifyMeleeDamage(damageInfo->target, damageInfo->attacker, damage);
1774
1775 if (victim->GetAI())
1776 {
1777 victim->GetAI()->OnCalculateMeleeDamageReceived(damage, this);
1778 }
1779
1780 // Calculate armor reduction
1782 {
1783 damageInfo->damages[i].damage = Unit::CalcArmorReducedDamage(this, damageInfo->target, damage, nullptr, 0, damageInfo->attackType);
1784 damageInfo->cleanDamage += damage - damageInfo->damages[i].damage;
1785 }
1786 else
1787 {
1788 damageInfo->damages[i].damage = damage;
1789 }
1790 }
1791
1792 damageInfo->hitOutCome = RollMeleeOutcomeAgainst(damageInfo->target, damageInfo->attackType);
1793
1794 // If the victim was a sitting player and we didn't roll a miss, then crit.
1795 if (sittingVictim && damageInfo->hitOutCome != MELEE_HIT_MISS)
1796 {
1797 damageInfo->hitOutCome = MELEE_HIT_CRIT;
1798 }
1799 switch (damageInfo->hitOutCome)
1800 {
1801 case MELEE_HIT_EVADE:
1803 damageInfo->TargetState = VICTIMSTATE_EVADES;
1804
1805 for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
1806 {
1807 damageInfo->damages[i].damage = 0;
1808 }
1809
1810 damageInfo->cleanDamage = 0;
1811 return;
1812 case MELEE_HIT_MISS:
1813 damageInfo->HitInfo |= HITINFO_MISS;
1814 damageInfo->TargetState = VICTIMSTATE_INTACT;
1815
1816 for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
1817 {
1818 damageInfo->damages[i].damage = 0;
1819 }
1820 damageInfo->cleanDamage = 0;
1821 break;
1822 case MELEE_HIT_NORMAL:
1823 damageInfo->TargetState = VICTIMSTATE_HIT;
1824 break;
1825 case MELEE_HIT_CRIT:
1826 {
1827 damageInfo->HitInfo |= HITINFO_CRITICALHIT;
1828 damageInfo->TargetState = VICTIMSTATE_HIT;
1829 // Crit bonus calc
1830 for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
1831 {
1832 damageInfo->damages[i].damage *= 2;
1833
1834 float mod = 0.0f;
1835 // Apply SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE or SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE
1836 if (damageInfo->attackType == RANGED_ATTACK)
1837 {
1839 }
1840 else
1841 {
1843
1844 // Increase crit damage from SPELL_AURA_MOD_CRIT_DAMAGE_BONUS
1846 }
1847
1848 uint32 crTypeMask = damageInfo->target->GetCreatureTypeMask();
1849
1850 // Increase crit damage from SPELL_AURA_MOD_CRIT_PERCENT_VERSUS
1852 if (mod != 0)
1853 {
1854 AddPct(damageInfo->damages[i].damage, mod);
1855 }
1856 }
1857 break;
1858 }
1859 case MELEE_HIT_PARRY:
1860 damageInfo->TargetState = VICTIMSTATE_PARRY;
1861 damageInfo->cleanDamage = 0;
1862
1863 for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
1864 {
1865 damageInfo->cleanDamage += damageInfo->damages[i].damage;
1866 damageInfo->damages[i].damage = 0;
1867 }
1868 break;
1869 case MELEE_HIT_DODGE:
1870 damageInfo->TargetState = VICTIMSTATE_DODGE;
1871 damageInfo->cleanDamage = 0;
1872
1873 for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
1874 {
1875 damageInfo->cleanDamage += damageInfo->damages[i].damage;
1876 damageInfo->damages[i].damage = 0;
1877 }
1878 break;
1879 case MELEE_HIT_BLOCK:
1880 {
1881 damageInfo->TargetState = VICTIMSTATE_HIT;
1882 damageInfo->HitInfo |= HITINFO_BLOCK;
1883 damageInfo->blocked_amount = damageInfo->target->GetShieldBlockValue();
1884 // double blocked amount if block is critical
1885 if (damageInfo->target->isBlockCritical())
1886 damageInfo->blocked_amount += damageInfo->blocked_amount;
1887
1888 uint32 remainingBlock = damageInfo->blocked_amount;
1889 uint8 fullBlockMask = 0;
1890 for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
1891 {
1892 if (remainingBlock && remainingBlock >= damageInfo->damages[i].damage)
1893 {
1894 fullBlockMask |= (1 << i);
1895
1896 remainingBlock -= damageInfo->damages[i].damage;
1897 damageInfo->cleanDamage += damageInfo->damages[i].damage;
1898 damageInfo->damages[i].damage = 0;
1899 }
1900 else
1901 {
1902 damageInfo->cleanDamage += remainingBlock;
1903 damageInfo->damages[i].damage -= remainingBlock;
1904 remainingBlock = 0;
1905 }
1906 }
1907
1908 // full block
1909 if (fullBlockMask == ((1 << 0) | (1 << 1)))
1910 {
1911 damageInfo->TargetState = VICTIMSTATE_BLOCKS;
1912 damageInfo->blocked_amount -= remainingBlock;
1913 }
1914 break;
1915 }
1916 case MELEE_HIT_GLANCING:
1917 {
1918 damageInfo->HitInfo |= HITINFO_GLANCING;
1919 damageInfo->TargetState = VICTIMSTATE_HIT;
1920 int32 leveldif = int32(victim->GetLevel()) - int32(GetLevel());
1921 if (leveldif > 3)
1922 leveldif = 3;
1923 float reducePercent = 1 - leveldif * 0.1f;
1924
1925 for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
1926 {
1927 uint32 reducedDamage = uint32(reducePercent * damageInfo->damages[i].damage);
1928 damageInfo->cleanDamage += damageInfo->damages[i].damage - reducedDamage;
1929 damageInfo->damages[i].damage = reducedDamage;
1930 }
1931 break;
1932 }
1933 case MELEE_HIT_CRUSHING:
1934 damageInfo->HitInfo |= HITINFO_CRUSHING;
1935 damageInfo->TargetState = VICTIMSTATE_HIT;
1936
1937 // 150% normal damage
1938 for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
1939 {
1940 damageInfo->damages[i].damage += (damageInfo->damages[i].damage / 2);
1941 }
1942 break;
1943 default:
1944 break;
1945 }
1946
1947 // Always apply HITINFO_AFFECTS_VICTIM in case its not a miss
1948 if (!(damageInfo->HitInfo & HITINFO_MISS))
1949 damageInfo->HitInfo |= HITINFO_AFFECTS_VICTIM;
1950
1951 uint32 tmpHitInfo[MAX_ITEM_PROTO_DAMAGES] = { };
1952
1953 for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
1954 {
1955 int32 dmg = damageInfo->damages[i].damage;
1956 int32 cleanDamage = damageInfo->cleanDamage;
1957 // attackType is checked already for BASE_ATTACK or OFF_ATTACK so it can't be RANGED_ATTACK here
1958 if (CanApplyResilience())
1959 {
1960 int32 resilienceReduction = damageInfo->damages[i].damage;
1961 Unit::ApplyResilience(victim, nullptr, &resilienceReduction, (damageInfo->hitOutCome == MELEE_HIT_CRIT), CR_CRIT_TAKEN_MELEE);
1962
1963 resilienceReduction = damageInfo->damages[i].damage - resilienceReduction;
1964 dmg -= resilienceReduction;
1965 cleanDamage += resilienceReduction;
1966 }
1967
1968 damageInfo->damages[i].damage = std::max(0, dmg);
1969 damageInfo->cleanDamage = std::max(0, cleanDamage);
1970
1971 // Calculate absorb resist
1972 if (damageInfo->damages[i].damage > 0)
1973 {
1974 damageInfo->procVictim |= PROC_FLAG_TAKEN_DAMAGE;
1975
1976 // Calculate absorb & resists
1977 DamageInfo dmgInfo(*damageInfo, i);
1978 Unit::CalcAbsorbResist(dmgInfo);
1979 damageInfo->damages[i].absorb = dmgInfo.GetAbsorb();
1980 damageInfo->damages[i].resist = dmgInfo.GetResist();
1981
1982 if (damageInfo->damages[i].absorb)
1983 {
1984 tmpHitInfo[i] |= (damageInfo->damages[i].damage - damageInfo->damages[i].absorb == 0 ? HITINFO_FULL_ABSORB : HITINFO_PARTIAL_ABSORB);
1985 }
1986
1987 if (damageInfo->damages[i].resist)
1988 {
1989 tmpHitInfo[i] |= (damageInfo->damages[i].damage - damageInfo->damages[i].resist == 0 ? HITINFO_FULL_RESIST : HITINFO_PARTIAL_RESIST);
1990 }
1991
1992 damageInfo->damages[i].damage = dmgInfo.GetDamage();
1993 }
1994 }
1995
1996 // set proper HitInfo flags
1997 if ((tmpHitInfo[0] & HITINFO_FULL_ABSORB) != 0)
1998 {
1999 // set partial absorb when secondary damage isn't full absorbed
2000 damageInfo->HitInfo |= ((tmpHitInfo[1] & HITINFO_PARTIAL_ABSORB) != 0) ? HITINFO_PARTIAL_ABSORB : HITINFO_FULL_ABSORB;
2001 }
2002 else
2003 {
2004 damageInfo->HitInfo |= (tmpHitInfo[0] & HITINFO_PARTIAL_ABSORB);
2005 }
2006
2007 if ((tmpHitInfo[0] & HITINFO_FULL_RESIST) != 0)
2008 {
2009 // set partial resist when secondary damage isn't full resisted
2010 damageInfo->HitInfo |= ((tmpHitInfo[1] & HITINFO_PARTIAL_RESIST) != 0) ? HITINFO_PARTIAL_RESIST : HITINFO_FULL_RESIST;
2011 }
2012 else
2013 {
2014 damageInfo->HitInfo |= (tmpHitInfo[0] & HITINFO_PARTIAL_RESIST);
2015 }
2016
2017}
@ SPELL_AURA_MOD_CRIT_PERCENT_VERSUS
Definition SpellAuraDefines.h:232
@ SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE
Definition SpellAuraDefines.h:267
@ SPELL_AURA_MOD_CRIT_DAMAGE_BONUS
Definition SpellAuraDefines.h:226
@ SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE
Definition SpellAuraDefines.h:266
@ PROC_FLAG_DONE_MELEE_AUTO_ATTACK
Definition SpellMgr.h:113
@ PROC_FLAG_DONE_MAINHAND_ATTACK
Definition SpellMgr.h:143
@ PROC_FLAG_TAKEN_DAMAGE
Definition SpellMgr.h:140
@ PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK
Definition SpellMgr.h:114
@ PROC_FLAG_DONE_OFFHAND_ATTACK
Definition SpellMgr.h:144
@ PROC_FLAG_NONE
Definition SpellMgr.h:108
@ VICTIMSTATE_INTACT
Definition Unit.h:84
@ VICTIMSTATE_HIT
Definition Unit.h:85
@ VICTIMSTATE_DODGE
Definition Unit.h:86
@ VICTIMSTATE_IS_IMMUNE
Definition Unit.h:91
@ VICTIMSTATE_PARRY
Definition Unit.h:87
@ VICTIMSTATE_BLOCKS
Definition Unit.h:89
@ VICTIMSTATE_EVADES
Definition Unit.h:90
@ HITINFO_PARTIAL_ABSORB
Definition Unit.h:104
@ HITINFO_FULL_RESIST
Definition Unit.h:105
@ HITINFO_NORMALSWING
Definition Unit.h:97
@ HITINFO_BLOCK
Definition Unit.h:111
@ HITINFO_CRUSHING
Definition Unit.h:115
@ HITINFO_SWINGNOHITSOUND
Definition Unit.h:119
@ HITINFO_MISS
Definition Unit.h:102
@ HITINFO_FULL_ABSORB
Definition Unit.h:103
@ HITINFO_OFFHAND
Definition Unit.h:100
@ HITINFO_GLANCING
Definition Unit.h:114
@ HITINFO_CRITICALHIT
Definition Unit.h:107
@ HITINFO_PARTIAL_RESIST
Definition Unit.h:106
@ HITINFO_AFFECTS_VICTIM
Definition Unit.h:99
@ MELEE_HIT_CRUSHING
Definition Unit.h:292
@ MELEE_HIT_BLOCK
Definition Unit.h:291
@ MELEE_HIT_CRIT
Definition Unit.h:292
@ MELEE_HIT_EVADE
Definition Unit.h:291
@ MELEE_HIT_DODGE
Definition Unit.h:291
@ MELEE_HIT_MISS
Definition Unit.h:291
@ MELEE_HIT_PARRY
Definition Unit.h:291
@ MELEE_HIT_GLANCING
Definition Unit.h:292
virtual void OnCalculateMeleeDamageReceived(uint32 &, Unit *)
Called during damage calculations.
Definition UnitAI.h:383
bool isBlockCritical()
Definition Unit.cpp:3310
uint32 MeleeDamageBonusTaken(Unit *attacker, uint32 pdamage, WeaponAttackType attType, SpellInfo const *spellProto=nullptr, SpellSchoolMask damageSchoolMask=SPELL_SCHOOL_MASK_NORMAL)
Definition Unit.cpp:10370
virtual SpellSchoolMask GetMeleeDamageSchoolMask(WeaponAttackType attackType=BASE_ATTACK, uint8 damageIndex=0) const =0
int32 GetTotalAuraModifierByMiscMask(AuraType auratype, uint32 misc_mask) const
Definition Unit.cpp:6316
bool CanApplyResilience() const
Definition Unit.h:1171
uint32 CalculateDamage(WeaponAttackType attType, bool normalized, bool addTotalPct, uint8 itemDamagesMask=0)
Definition Unit.cpp:3168
virtual uint32 GetShieldBlockValue() const =0
static void ApplyResilience(Unit const *victim, float *crit, int32 *damage, bool isCrit, CombatRating type)
Definition Unit.cpp:15196
UnitAI * GetAI()
Definition Unit.h:693
static bool IsDamageReducedByArmor(SpellSchoolMask damageSchoolMask, SpellInfo const *spellInfo=nullptr, uint8 effIndex=MAX_SPELL_EFFECTS)
Definition Unit.cpp:2205
int32 GetTotalAuraModifier(AuraType auratype) const
Definition Unit.cpp:6296
MeleeHitOutcome RollMeleeOutcomeAgainst(Unit const *victim, WeaponAttackType attType) const
Definition Unit.cpp:2967
uint32 GetCreatureTypeMask() const
Definition Unit.h:828
uint32 MeleeDamageBonusDone(Unit *pVictim, uint32 damage, WeaponAttackType attType, SpellInfo const *spellProto=nullptr, SpellSchoolMask damageSchoolMask=SPELL_SCHOOL_MASK_NORMAL)
Definition Unit.cpp:10180
uint32 damageSchoolMask
Definition Unit.h:489
uint32 blocked_amount
Definition Unit.h:495
MeleeHitOutcome hitOutCome
Definition Unit.h:503
uint32 cleanDamage
Definition Unit.h:502
uint32 TargetState
Definition Unit.h:497
uint32 resist
Definition Unit.h:492

References CalcDamageInfo::absorb, AddPct(), ApplyResilience(), CalcDamageInfo::attacker, CalcDamageInfo::attackType, BASE_ATTACK, CalcDamageInfo::blocked_amount, CalcAbsorbResist(), CalcArmorReducedDamage(), CalculateDamage(), CanApplyResilience(), CalcDamageInfo::cleanDamage, CR_CRIT_TAKEN_MELEE, CalcDamageInfo::damage, CalcDamageInfo::damages, CalcDamageInfo::damageSchoolMask, DamageInfo::GetAbsorb(), GetAI(), GetCreatureTypeMask(), DamageInfo::GetDamage(), GetLevel(), GetMeleeDamageSchoolMask(), DamageInfo::GetResist(), GetShieldBlockValue(), GetTotalAuraModifier(), GetTotalAuraModifierByMiscMask(), GetTotalAuraMultiplierByMiscMask(), CalcDamageInfo::HitInfo, HITINFO_AFFECTS_VICTIM, HITINFO_BLOCK, HITINFO_CRITICALHIT, HITINFO_CRUSHING, HITINFO_FULL_ABSORB, HITINFO_FULL_RESIST, HITINFO_GLANCING, HITINFO_MISS, HITINFO_NORMALSWING, HITINFO_OFFHAND, HITINFO_PARTIAL_ABSORB, HITINFO_PARTIAL_RESIST, HITINFO_SWINGNOHITSOUND, CalcDamageInfo::hitOutCome, IsAlive(), isBlockCritical(), IsDamageReducedByArmor(), IsImmunedToDamageOrSchool(), Object::IsPlayer(), MAX_ITEM_PROTO_DAMAGES, MELEE_HIT_BLOCK, MELEE_HIT_CRIT, MELEE_HIT_CRUSHING, MELEE_HIT_DODGE, MELEE_HIT_EVADE, MELEE_HIT_GLANCING, MELEE_HIT_MISS, MELEE_HIT_NORMAL, MELEE_HIT_PARRY, MeleeDamageBonusDone(), MeleeDamageBonusTaken(), OFF_ATTACK, UnitAI::OnCalculateMeleeDamageReceived(), PROC_FLAG_DONE_MAINHAND_ATTACK, PROC_FLAG_DONE_MELEE_AUTO_ATTACK, PROC_FLAG_DONE_OFFHAND_ATTACK, PROC_FLAG_NONE, PROC_FLAG_TAKEN_DAMAGE, PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK, CalcDamageInfo::procAttacker, CalcDamageInfo::procVictim, RANGED_ATTACK, CalcDamageInfo::resist, RollMeleeOutcomeAgainst(), SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE, SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE, SPELL_AURA_MOD_CRIT_DAMAGE_BONUS, SPELL_AURA_MOD_CRIT_PERCENT_VERSUS, SPELL_SCHOOL_MASK_NORMAL, sScriptMgr, CalcDamageInfo::target, CalcDamageInfo::TargetState, VICTIMSTATE_BLOCKS, VICTIMSTATE_DODGE, VICTIMSTATE_EVADES, VICTIMSTATE_HIT, VICTIMSTATE_INTACT, VICTIMSTATE_IS_IMMUNE, and VICTIMSTATE_PARRY.

Referenced by AttackerStateUpdate(), and spell_dk_dancing_rune_weapon::HandleProc().

◆ CalculateMinMaxDamage()

virtual void Unit::CalculateMinMaxDamage ( WeaponAttackType  attType,
bool  normalized,
bool  addTotalPct,
float &  minDamage,
float &  maxDamage,
uint8  damageIndex = 0 
)
pure virtual

Implemented in Creature, and Player.

Referenced by CalculateDamage(), and UpdateDamagePhysical().

◆ CalculateSpellDamage()

int32 Unit::CalculateSpellDamage ( Unit const *  target,
SpellInfo const *  spellProto,
uint8  effect_index,
int32 const *  basePoints = nullptr 
) const

◆ CalculateSpellDamageTaken()

void Unit::CalculateSpellDamageTaken ( SpellNonMeleeDamage damageInfo,
int32  damage,
SpellInfo const *  spellInfo,
WeaponAttackType  attackType = BASE_ATTACK,
bool  crit = false 
)
1509{
1510 if (damage < 0)
1511 return;
1512
1513 Unit* victim = damageInfo->target;
1514 if (!victim || !victim->IsAlive())
1515 return;
1516
1517 SpellSchoolMask damageSchoolMask = SpellSchoolMask(damageInfo->schoolMask);
1518 uint32 crTypeMask = victim->GetCreatureTypeMask();
1519
1520 // Script Hook For CalculateSpellDamageTaken -- Allow scripts to change the Damage post class mitigation calculations
1521 sScriptMgr->ModifySpellDamageTaken(damageInfo->target, damageInfo->attacker, damage, spellInfo);
1522
1523 if (victim->GetAI())
1524 {
1525 victim->GetAI()->OnCalculateSpellDamageReceived(damage, this);
1526 }
1527
1528 int32 cleanDamage = 0;
1529 if (!spellInfo->HasAttribute(SPELL_ATTR4_IGNORE_DAMAGE_TAKEN_MODIFIERS) && Unit::IsDamageReducedByArmor(damageSchoolMask, spellInfo))
1530 {
1531 int32 oldDamage = damage;
1532 damage = Unit::CalcArmorReducedDamage(this, victim, damage, spellInfo, 0, attackType);
1533 cleanDamage = oldDamage - damage;
1534 }
1535
1536 bool blocked = false;
1537 // Per-school calc
1538 switch (spellInfo->DmgClass)
1539 {
1540 // Melee and Ranged Spells
1543 {
1544 // Physical Damage
1545 if (damageSchoolMask & SPELL_SCHOOL_MASK_NORMAL)
1546 {
1547 // Get blocked status
1548 blocked = isSpellBlocked(victim, spellInfo, attackType);
1549 }
1550
1551 if (crit)
1552 {
1553 damageInfo->HitInfo |= SPELL_HIT_TYPE_CRIT;
1554
1555 // Calculate crit bonus
1556 uint32 crit_bonus = damage;
1557 // Apply crit_damage bonus for melee spells
1558 if (Player* modOwner = GetSpellModOwner())
1559 modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_CRIT_DAMAGE_BONUS, crit_bonus);
1560 damage += crit_bonus;
1561
1562 // Apply SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE or SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE
1563 float critPctDamageMod = 0.0f;
1564 if (attackType == RANGED_ATTACK)
1566 else
1568
1569 // Increase crit damage from SPELL_AURA_MOD_CRIT_DAMAGE_BONUS
1570 critPctDamageMod += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_CRIT_DAMAGE_BONUS, spellInfo->GetSchoolMask());
1571
1572 // Increase crit damage from SPELL_AURA_MOD_CRIT_PERCENT_VERSUS
1574
1575 if (critPctDamageMod != 0)
1576 AddPct(damage, critPctDamageMod);
1577 }
1578
1579 // Spell weapon based damage CAN BE crit & blocked at same time
1580 if (blocked)
1581 {
1582 damageInfo->blocked = victim->GetShieldBlockValue();
1583 // double blocked amount if block is critical
1584 if (victim->isBlockCritical())
1585 damageInfo->blocked *= 2;
1586 if (damage < int32(damageInfo->blocked))
1587 damageInfo->blocked = uint32(damage);
1588
1589 damage -= damageInfo->blocked;
1590 cleanDamage += damageInfo->blocked;
1591 }
1592
1593 int32 resilienceReduction = damage;
1594 if (CanApplyResilience())
1595 {
1596 if (attackType != RANGED_ATTACK)
1597 {
1598 Unit::ApplyResilience(victim, nullptr, &resilienceReduction, crit, CR_CRIT_TAKEN_MELEE);
1599 }
1600 else
1601 {
1602 Unit::ApplyResilience(victim, nullptr, &resilienceReduction, crit, CR_CRIT_TAKEN_RANGED);
1603 }
1604 }
1605
1606 resilienceReduction = damage - resilienceReduction;
1607 damage -= resilienceReduction;
1608 cleanDamage += resilienceReduction;
1609 break;
1610 }
1611 // Magical Attacks
1614 {
1615 // If crit add critical bonus
1616 if (crit)
1617 {
1618 damageInfo->HitInfo |= SPELL_HIT_TYPE_CRIT;
1619 damage = Unit::SpellCriticalDamageBonus(this, spellInfo, damage, victim);
1620 }
1621
1622 int32 resilienceReduction = damage;
1623 if (CanApplyResilience())
1624 {
1625 Unit::ApplyResilience(victim, nullptr, &resilienceReduction, crit, CR_CRIT_TAKEN_SPELL);
1626 }
1627
1628 resilienceReduction = damage - resilienceReduction;
1629 damage -= resilienceReduction;
1630 cleanDamage += resilienceReduction;
1631 break;
1632 }
1633 default:
1634 break;
1635 }
1636
1637 damageInfo->cleanDamage = std::max(0, cleanDamage);
1638 damageInfo->damage = std::max(0, damage);
1639
1640 // Calculate absorb resist
1641 if (damageInfo->damage > 0)
1642 {
1643 DamageInfo dmgInfo(*damageInfo, SPELL_DIRECT_DAMAGE, BASE_ATTACK, 0);
1644 Unit::CalcAbsorbResist(dmgInfo);
1645 damageInfo->absorb = dmgInfo.GetAbsorb();
1646 damageInfo->resist = dmgInfo.GetResist();
1647 damageInfo->damage = dmgInfo.GetDamage();
1648 }
1649}
@ SPELL_DAMAGE_CLASS_RANGED
Definition SharedDefines.h:1552
@ SPELL_DAMAGE_CLASS_MAGIC
Definition SharedDefines.h:1550
@ SPELL_DAMAGE_CLASS_NONE
Definition SharedDefines.h:1549
@ SPELL_DAMAGE_CLASS_MELEE
Definition SharedDefines.h:1551
@ SPELL_HIT_TYPE_CRIT
Definition SharedDefines.h:1540
@ SPELL_ATTR4_IGNORE_DAMAGE_TAKEN_MODIFIERS
Definition SharedDefines.h:526
@ SPELLMOD_CRIT_DAMAGE_BONUS
Definition SpellDefines.h:91
@ SPELL_DIRECT_DAMAGE
Definition Unit.h:255
virtual void OnCalculateSpellDamageReceived(int32 &, Unit *)
Definition UnitAI.h:384
bool isSpellBlocked(Unit *victim, SpellInfo const *spellProto, WeaponAttackType attackType=BASE_ATTACK)
Definition Unit.cpp:3284
static uint32 SpellCriticalDamageBonus(Unit const *caster, SpellInfo const *spellProto, uint32 damage, Unit const *victim)
Definition Unit.cpp:9383
Unit * target
Definition Unit.h:514
uint32 HitInfo
Definition Unit.h:525
uint32 damage
Definition Unit.h:517
uint32 absorb
Definition Unit.h:520
Unit * attacker
Definition Unit.h:515
uint32 schoolMask
Definition Unit.h:519
uint32 cleanDamage
Definition Unit.h:527
uint32 resist
Definition Unit.h:521
uint32 blocked
Definition Unit.h:524

References SpellNonMeleeDamage::absorb, AddPct(), ApplyResilience(), SpellNonMeleeDamage::attacker, BASE_ATTACK, SpellNonMeleeDamage::blocked, CalcAbsorbResist(), CalcArmorReducedDamage(), CanApplyResilience(), SpellNonMeleeDamage::cleanDamage, CR_CRIT_TAKEN_MELEE, CR_CRIT_TAKEN_RANGED, CR_CRIT_TAKEN_SPELL, SpellNonMeleeDamage::damage, SpellInfo::DmgClass, DamageInfo::GetAbsorb(), GetAI(), GetCreatureTypeMask(), DamageInfo::GetDamage(), DamageInfo::GetResist(), SpellInfo::GetSchoolMask(), GetShieldBlockValue(), GetSpellModOwner(), GetTotalAuraModifier(), GetTotalAuraModifierByMiscMask(), SpellInfo::HasAttribute(), SpellNonMeleeDamage::HitInfo, SpellInfo::Id, IsAlive(), isBlockCritical(), IsDamageReducedByArmor(), isSpellBlocked(), UnitAI::OnCalculateSpellDamageReceived(), RANGED_ATTACK, SpellNonMeleeDamage::resist, SpellNonMeleeDamage::schoolMask, SPELL_ATTR4_IGNORE_DAMAGE_TAKEN_MODIFIERS, SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE, SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE, SPELL_AURA_MOD_CRIT_DAMAGE_BONUS, SPELL_AURA_MOD_CRIT_PERCENT_VERSUS, SPELL_DAMAGE_CLASS_MAGIC, SPELL_DAMAGE_CLASS_MELEE, SPELL_DAMAGE_CLASS_NONE, SPELL_DAMAGE_CLASS_RANGED, SPELL_DIRECT_DAMAGE, SPELL_HIT_TYPE_CRIT, SPELL_SCHOOL_MASK_NORMAL, SpellCriticalDamageBonus(), SPELLMOD_CRIT_DAMAGE_BONUS, sScriptMgr, and SpellNonMeleeDamage::target.

Referenced by Spell::DoAllEffectOnTarget(), AuraEffect::HandlePeriodicPowerBurnAuraTick(), and AuraEffect::HandleProcTriggerDamageAuraProc().

◆ CanApplyResilience()

bool Unit::CanApplyResilience ( ) const
inline

◆ CanDualWield()

◆ CanEnterWater()

virtual bool Unit::CanEnterWater ( ) const
pure virtual

Implemented in Creature, and Player.

◆ CanFly()

◆ CanFreeMove()

bool Unit::CanFreeMove ( ) const
inline
1725 {
1728 }
@ UNIT_STATE_CONFUSED
Definition UnitDefines.h:184
@ UNIT_STATE_FLEEING
Definition UnitDefines.h:180
@ UNIT_STATE_IN_FLIGHT
Definition UnitDefines.h:181
@ UNIT_STATE_STUNNED
Definition UnitDefines.h:176

References GetOwnerGUID(), HasUnitState(), UNIT_STATE_CONFUSED, UNIT_STATE_DISTRACTED, UNIT_STATE_FLEEING, UNIT_STATE_IN_FLIGHT, UNIT_STATE_ROOT, and UNIT_STATE_STUNNED.

Referenced by Creature::IsFreeToMove().

◆ CanHaveThreatList()

bool Unit::CanHaveThreatList ( bool  skipAliveCheck = false) const
11436{
11437 // Delegate to ThreatManager's cached value for consistency
11439 return false;
11440
11441 // only alive units can have threat list
11442 if (!skipAliveCheck && !IsAlive())
11443 return false;
11444
11445 // vehicles can not have threat list in battlegrounds
11446 if (ToCreature()->IsVehicle() && GetMap()->IsBattlegroundOrArena())
11447 return false;
11448
11449 return true;
11450}
static bool CanHaveThreatList(Unit const *who)
Definition ThreatManager.cpp:189
bool IsVehicle() const
Definition Unit.h:800

References ThreatManager::CanHaveThreatList(), WorldObject::GetMap(), IsAlive(), IsVehicle(), m_threatManager, and Object::ToCreature().

Referenced by AddThreat(), Creature::CanPeriodicallyCallForAssistance(), ScriptedAI::DoResetThreatList(), Spell::EffectTaunt(), Spell::EffectThreat(), EngageWithTarget(), AuraEffect::HandleAuraDummy(), AuraEffect::HandleModDetaunt(), AuraEffect::HandleModTaunt(), spell_pet_guard_dog::HandleProc(), Spell::HandleThreatSpells(), IsEngagedBy(), CreatureAI::JustEnteredCombat(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnCreatureCreate(), SmartScript::ProcessAction(), and Creature::SelectVictim().

◆ CanInstantCast()

bool Unit::CanInstantCast ( ) const
inline
1587{ return _instantCast; }

References _instantCast.

Referenced by ModSpellCastTime().

◆ CanModifyStats()

◆ CanProc()

bool Unit::CanProc ( )
inline
1557{ return !m_procDeep; }

References m_procDeep.

Referenced by Spell::DoAllEffectOnTarget().

◆ CanRestoreMana()

bool Unit::CanRestoreMana ( SpellInfo const *  spellInfo) const
17278{
17279 // Aura of Despair exceptions
17280 switch (spellInfo->Id)
17281 {
17282 case 16666: // Demonic Rune
17283 case 27869: // Dark Rune
17284 case 30824: // Shamanistic Rage
17285 case 31786: // Spiritual Attunement
17286 case 31930: // Judgements of the Wise
17287 case 34075: // Aspect of the Viper
17288 case 34720: // Thrill of the hunt
17289 case 47755: // Rapture
17290 case 54425: // Improved Felhunter
17291 case 57319: // Blessing of Sanctuary
17292 case 63337: // Saronite Vapors (regenerate mana)
17293 case 63375: // Improved stormstrike
17294 case 64372: // Lifebloom
17295 case 68285: // Improved Leader of the Pack
17296 return true;
17297 case 54428: // Divine Plea - only with talent Guarded by the Light
17298 return HasSpell(53583);
17299 default:
17300 break;
17301 }
17302
17303 return false;
17304}
virtual bool HasSpell(uint32) const
Definition Unit.h:1582

References HasSpell(), and SpellInfo::Id.

Referenced by IsImmunedToSpellEffect().

◆ CanSparringWith()

bool Unit::CanSparringWith ( Unit const *  attacker) const
protected
4135{
4137 return false;
4138
4139 if (!attacker)
4140 return false;
4141
4142 if (!attacker->IsCreature() || attacker->IsCharmedOwnedByPlayerOrPlayer())
4143 return false;
4144
4145 if (Creature const* creature = ToCreature())
4146 if (!creature->GetSparringPct())
4147 return false;
4148
4149 return true;
4150}
bool IsCharmedOwnedByPlayerOrPlayer() const
Definition Unit.h:1309

References IsCharmedOwnedByPlayerOrPlayer(), Object::IsCreature(), and Object::ToCreature().

Referenced by AttackerStateUpdate(), and DealDamage().

◆ CanSwim()

bool Unit::CanSwim ( ) const
virtual

this method checks the current flag of a unit

These flags can be set within the database or dynamically changed at runtime UNIT_FLAG_SWIMMING must be updated when a unit enters a swimmable area

Reimplemented in Creature.

15952{
15953 // Mirror client behavior, if this method returns false then client will not use swimming animation and for players will apply gravity as if there was no water
15955 return false;
15957 return true;
15959 return false;
15961 return true;
15963}
@ UNIT_FLAG2_UNUSED_6
Definition UnitDefines.h:314
@ UNIT_FLAG_CANNOT_SWIM
Definition UnitDefines.h:271
@ UNIT_FLAG_POSSESSED
Definition UnitDefines.h:281
@ UNIT_FLAG_SWIMMING
Definition UnitDefines.h:272
@ UNIT_FLAG_RENAME
Definition UnitDefines.h:261
@ UNIT_FLAG_PET_IN_COMBAT
Definition UnitDefines.h:268
bool HasUnitFlag2(UnitFlags2 flags) const
Definition Unit.h:753

References HasUnitFlag(), HasUnitFlag2(), UNIT_FLAG2_UNUSED_6, UNIT_FLAG_CANNOT_SWIM, UNIT_FLAG_PET_IN_COMBAT, UNIT_FLAG_PLAYER_CONTROLLED, UNIT_FLAG_POSSESSED, UNIT_FLAG_RENAME, and UNIT_FLAG_SWIMMING.

Referenced by PathGenerator::BuildPolyPath(), and Creature::CanSwim().

◆ CanUseAttackType()

◆ CastCustomSpell() [1/5]

SpellCastResult Unit::CastCustomSpell ( SpellInfo const *  spellInfo,
CustomSpellValues const &  value,
Unit victim = nullptr,
TriggerCastFlags  triggerFlags = TRIGGERED_NONE,
Item castItem = nullptr,
AuraEffect const *  triggeredByAura = nullptr,
ObjectGuid  originalCaster = ObjectGuid::Empty 
)
1471{
1472 SpellCastTargets targets;
1473 targets.SetUnitTarget(victim);
1474
1475 return CastSpell(targets, spellInfo, &value, triggerFlags, castItem, triggeredByAura, originalCaster);
1476}
Definition Spell.h:121
void SetUnitTarget(Unit *target)
Definition Spell.cpp:238

References CastSpell(), and SpellCastTargets::SetUnitTarget().

◆ CastCustomSpell() [2/5]

SpellCastResult Unit::CastCustomSpell ( uint32  spellId,
CustomSpellValues const &  value,
Unit victim = nullptr,
TriggerCastFlags  triggerFlags = TRIGGERED_NONE,
Item castItem = nullptr,
AuraEffect const *  triggeredByAura = nullptr,
ObjectGuid  originalCaster = ObjectGuid::Empty 
)
1459{
1460 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
1461 if (!spellInfo)
1462 {
1463 LOG_ERROR("entities.unit", "CastSpell: unknown spell {} by caster {}", spellId, GetGUID().ToString());
1465 }
1466
1467 return CastCustomSpell(spellInfo, value, victim, triggerFlags, castItem, triggeredByAura, originalCaster);
1468}
@ SPELL_FAILED_SPELL_UNAVAILABLE
Definition SharedDefines.h:1044
SpellCastResult CastCustomSpell(Unit *victim, uint32 spellId, int32 const *bp0, int32 const *bp1, int32 const *bp2, bool triggered, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
Definition Unit.cpp:1432

References CastCustomSpell(), Object::GetGUID(), LOG_ERROR, SPELL_FAILED_SPELL_UNAVAILABLE, sSpellMgr, and Position::ToString().

◆ CastCustomSpell() [3/5]

SpellCastResult Unit::CastCustomSpell ( uint32  spellId,
SpellValueMod  mod,
int32  value,
Unit victim,
bool  triggered,
Item castItem = nullptr,
AuraEffect const *  triggeredByAura = nullptr,
ObjectGuid  originalCaster = ObjectGuid::Empty 
)
1445{
1446 CustomSpellValues values;
1447 values.AddSpellMod(mod, value);
1448 return CastCustomSpell(spellId, values, target, triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE, castItem, triggeredByAura, originalCaster);
1449}
@ TRIGGERED_NONE
Definition SpellDefines.h:133
Definition SpellDefines.h:165
void AddSpellMod(SpellValueMod mod, int32 value)
Definition SpellDefines.h:167

References CustomSpellValues::AddSpellMod(), CastCustomSpell(), TRIGGERED_FULL_MASK, and TRIGGERED_NONE.

◆ CastCustomSpell() [4/5]

SpellCastResult Unit::CastCustomSpell ( uint32  spellId,
SpellValueMod  mod,
int32  value,
Unit victim = nullptr,
TriggerCastFlags  triggerFlags = TRIGGERED_NONE,
Item castItem = nullptr,
AuraEffect const *  triggeredByAura = nullptr,
ObjectGuid  originalCaster = ObjectGuid::Empty 
)
1452{
1453 CustomSpellValues values;
1454 values.AddSpellMod(mod, value);
1455 return CastCustomSpell(spellId, values, target, triggerFlags, castItem, triggeredByAura, originalCaster);
1456}

References CustomSpellValues::AddSpellMod(), and CastCustomSpell().

◆ CastCustomSpell() [5/5]

SpellCastResult Unit::CastCustomSpell ( Unit victim,
uint32  spellId,
int32 const *  bp0,
int32 const *  bp1,
int32 const *  bp2,
bool  triggered,
Item castItem = nullptr,
AuraEffect const *  triggeredByAura = nullptr,
ObjectGuid  originalCaster = ObjectGuid::Empty 
)
1433{
1434 CustomSpellValues values;
1435 if (bp0)
1436 values.AddSpellMod(SPELLVALUE_BASE_POINT0, *bp0);
1437 if (bp1)
1438 values.AddSpellMod(SPELLVALUE_BASE_POINT1, *bp1);
1439 if (bp2)
1440 values.AddSpellMod(SPELLVALUE_BASE_POINT2, *bp2);
1441 return CastCustomSpell(spellId, values, target, triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE, castItem, triggeredByAura, originalCaster);
1442}
@ SPELLVALUE_BASE_POINT1
Definition SpellDefines.h:114
@ SPELLVALUE_BASE_POINT2
Definition SpellDefines.h:115
@ SPELLVALUE_BASE_POINT0
Definition SpellDefines.h:113

References CustomSpellValues::AddSpellMod(), CastCustomSpell(), SPELLVALUE_BASE_POINT0, SPELLVALUE_BASE_POINT1, SPELLVALUE_BASE_POINT2, TRIGGERED_FULL_MASK, and TRIGGERED_NONE.

Referenced by spell_pri_guardian_spirit::Absorb(), spell_mage_fire_frost_ward::Absorb(), spell_pal_ardent_defender::Absorb(), spell_dru_survival_instincts_aura::AfterApply(), spell_the_lich_king_necrotic_plague_jump_aura::AfterDispel(), spell_dru_lifebloom::AfterRemove(), Player::ApplyEnchantment(), CastCustomSpell(), CastCustomSpell(), CastCustomSpell(), CastCustomSpell(), CastDelayedSpellWithPeriodicAmount(), npc_gas_cloud::npc_gas_cloudAI::CastMainSpell(), CastPetAura(), spell_ruby_sanctum_rallying_shout::CountAllies(), spell_igb_rocket_artillery_explosion::DamageGunship(), boss_illidari_council_memberAI::DamageTaken(), boss_tenris_mirkblood::DamageTaken(), boss_leotheras_the_blind::DemonTime(), boss_sister_svalna::boss_sister_svalnaAI::DoAction(), Spell::EffectDestroyAllTotems(), Spell::EffectDispel(), Spell::EffectFeedPet(), Spell::EffectForceCast(), Spell::EffectSchoolDMG(), Spell::EffectSummonType(), EnterVehicle(), EnterVehicleUnattackable(), AuraMunchingQueue::Execute(), TriggerWickedSpirit::Execute(), spell_sha_totem_of_wrath::HandleAfterCast(), spell_reflective_shield_aura::HandleAfterEffectAbsorb(), spell_dk_scourge_strike::HandleAfterHit(), spell_dru_enrage::HandleApply(), spell_pal_avenging_wrath::HandleApply(), AuraEffect::HandleAuraLinked(), AuraEffect::HandleAuraModShapeshift(), HandleAuraRaidProcFromChargeWithValue(), Aura::HandleAuraSpecificMods(), spell_pri_shadow_word_death::HandleDamage(), spell_dk_corpse_explosion::HandleDamage(), spell_dru_lifebloom::HandleDispel(), spell_igb_burning_pitch::HandleDummy(), spell_ahn_kahet_swarmer_aura::HandleDummy(), spell_deathbringer_blood_link::HandleDummy(), spell_dk_death_coil::HandleDummy(), spell_dk_death_strike::HandleDummy(), spell_gen_dummy_trigger::HandleDummy(), spell_hun_last_stand_pet::HandleDummy(), spell_item_deadly_precision_dummy::HandleDummy(), spell_pal_divine_storm_dummy::HandleDummy(), spell_sha_ancestral_awakening_proc::HandleDummy(), spell_sha_cleansing_totem_pulse::HandleDummy(), spell_warl_life_tap::HandleDummy(), spell_warr_last_stand::HandleDummy(), spell_warr_charge::HandleDummy(), spell_warr_slam::HandleDummy(), spell_warr_bloodthirst::HandleDummy(), spell_egg_explosion::HandleDummyHitTarget(), spell_warr_execute::HandleEffect(), spell_dk_improved_blood_presence::HandleEffectApply(), spell_dk_improved_frost_presence::HandleEffectApply(), spell_dk_improved_unholy_presence::HandleEffectApply(), spell_rog_prey_on_the_weak::HandleEffectPeriodic(), spell_serpentshrine_cavern_infection::HandleEffectRemove(), spell_dk_presence::HandleImprovedBloodPresence(), spell_dk_presence::HandleImprovedFrostPresence(), spell_dk_presence::HandleImprovedUnholyPresence(), spell_ragin_flames_inferno::HandlePeriodic(), spell_dk_death_and_decay_aura::HandlePeriodic(), spell_dru_frenzied_regeneration::HandlePeriodic(), spell_hun_rapid_recuperation::HandlePeriodic(), AuraEffect::HandlePeriodicDummyAuraTick(), AuraEffect::HandlePeriodicManaLeechAuraTick(), AuraEffect::HandlePeriodicTriggerSpellAuraTick(), spell_deathbringer_blood_link_aura::HandleProc(), spell_soul_deflection::HandleProc(), spell_reliquary_of_souls_aura_of_desire_aura::HandleProc(), spell_black_temple_consuming_strikes_aura::HandleProc(), spell_gen_petrified_bark::HandleProc(), spell_gen_overlords_brand::HandleProc(), spell_gen_overlords_brand_dot::HandleProc(), spell_item_blood_draining_enchant::HandleProc(), spell_dk_butchery::HandleProc(), spell_dk_vendetta::HandleProc(), spell_dru_living_seed_proc::HandleProc(), spell_dru_glyph_of_innervate::HandleProc(), spell_dru_leader_of_the_pack::HandleProc(), spell_hun_ascpect_of_the_viper::HandleProc(), spell_hun_cobra_strikes::HandleProc(), spell_mage_empowered_fire::HandleProc(), spell_mage_magic_absorption::HandleProc(), spell_sha_earth_shield::HandleProc(), spell_sha_shamanistic_rage::HandleProc(), spell_anetheron_vampiric_aura::HandleProc(), spell_deathbringer_blood_beast_blood_link::HandleProc(), spell_the_lich_king_dark_hunger_aura::HandleProc(), spell_yogg_saron_grim_reprisal_aura::HandleProc(), spell_dk_improved_blood_presence_triggered::HandleProc(), spell_dk_blood_gorged::HandleProc(), spell_dk_necrosis::HandleProc(), spell_dru_living_seed::HandleProc(), spell_dru_glyph_of_rejuvenation::HandleProc(), spell_dru_t3_8p_bonus::HandleProc(), spell_dru_t10_restoration_4p_bonus_dummy::HandleProc(), spell_gen_blade_warding::HandleProc(), spell_gen_vampiric_touch::HandleProc(), spell_gen_earth_shield_toc::HandleProc(), spell_hun_glyph_of_arcane_shot::HandleProc(), spell_hun_thrill_of_the_hunt::HandleProc(), spell_item_blessing_of_ancient_kings::HandleProc(), spell_item_necrotic_touch::HandleProc(), spell_item_alchemists_stone::HandleProc(), spell_item_charm_witch_doctor::HandleProc(), spell_item_frozen_shadoweave::HandleProc(), spell_item_persistent_shield::HandleProc(), spell_item_pet_healing::HandleProc(), spell_item_swift_hand_justice_dummy::HandleProc(), spell_mage_burnout::HandleProc(), spell_mage_master_of_elements::HandleProc(), spell_pal_seal_of_command_aura::HandleProc(), spell_pal_seal_of_righteousness::HandleProc(), spell_pal_sheath_of_light::HandleProc(), spell_pal_judgement_of_light_heal::HandleProc(), spell_pal_judgement_of_wisdom_mana::HandleProc(), spell_pal_spiritual_attunement::HandleProc(), spell_pal_infusion_of_light::HandleProc(), spell_pal_t8_2p_bonus::HandleProc(), spell_pal_glyph_of_holy_light_dummy::HandleProc(), spell_pal_illumination::HandleProc(), spell_pal_light_s_beacon::HandleProc(), spell_pri_divine_aegis::HandleProc(), spell_pri_glyph_of_prayer_of_healing::HandleProc(), spell_pri_vampiric_embrace::HandleProc(), spell_pri_glyph_of_dispel_magic::HandleProc(), spell_pri_aq_3p_bonus::HandleProc(), spell_pri_t10_heal_2p_bonus::HandleProc(), spell_pri_blessed_recovery::HandleProc(), spell_rog_blade_flurry::HandleProc(), spell_rog_quick_recovery::HandleProc(), spell_sha_item_mana_surge::HandleProc(), spell_sha_nature_guardian::HandleProc(), spell_sha_glyph_of_healing_wave::HandleProc(), spell_sha_spirit_hunt::HandleProc(), spell_sha_lightning_overload::HandleProc(), spell_sha_ancestral_awakening::HandleProc(), spell_sha_flametongue_weapon::HandleProc(), spell_sha_glyph_of_totem_of_wrath::HandleProc(), spell_sha_windfury_weapon::HandleProc(), spell_warl_soul_leech::HandleProc(), spell_warr_sweeping_strikes::HandleProc(), spell_warr_deep_wounds_aura::HandleProc(), spell_warr_item_t10_prot_4p_bonus::HandleProc(), spell_dk_wandering_plague_aura::HandleProc(), spell_gen_vampiric_might::HandleProc(), spell_gen_mirrored_soul::HandleProc(), spell_warl_improved_drain_soul::HandleProc(), AuraEffect::HandleProcTriggerSpellWithValueAuraProc(), AuraEffect::HandleRaidProcFromChargeWithValueAuraProc(), spell_igb_rocket_pack_aura::HandleRemove(), spell_warl_haunt_aura::HandleRemove(), spell_pal_lay_on_hands::HandleScript(), spell_kelthuzad_detonate_mana_aura::HandleScript(), spell_hun_chimera_shot::HandleScriptEffect(), spell_pal_judgement::HandleScriptEffect(), spell_sha_stoneclaw_totem::HandleScriptEffect(), spell_pal_seal_of_vengeance_aura::HandleSeal(), AuraEffect::HandleShapeshiftBoosts(), spell_illidari_council_circle_of_healing::HandleSharedRule(), HandleSpellClick(), spell_halion_damage_aoe_summon::HandleSummon(), spell_putricide_mutated_transformation::HandleSummon(), spell_putricide_mutated_plague_aura::HandleTriggerSpell(), boss_sathrovarr::JustEngagedWith(), boss_essence_of_suffering::boss_essence_of_sufferingAI::JustEngagedWith(), boss_essence_of_anger::boss_essence_of_angerAI::JustEngagedWith(), boss_felblood_kaelthas::JustEngagedWith(), boss_kalecgos::JustEngagedWith(), boss_gurtogg_bloodboil::JustEngagedWith(), boss_teron_gorefiend::JustEngagedWith(), boss_najentus::JustEngagedWith(), boss_morogrim_tidewalker::JustEngagedWith(), boss_felmyst::MovementInform(), boss_sindragosa::boss_sindragosaAI::MovementInform(), npc_janalai_hatcher::MovementInform(), npc_frost_tomb::npc_frost_tomb(), spell_dru_tiger_s_fury::OnHit(), spell_gen_flurry_of_claws::OnPeriodic(), spell_blood_queen_essence_of_the_blood_queen_aura::OnProc(), spell_pal_eye_for_an_eye::OnProc(), spell_pal_glyph_of_divinity::OnProc(), spell_warl_siphon_life::OnProc(), spell_warl_fel_synergy::OnProc(), spell_warr_improved_spell_reflection::OnProc(), spell_warr_damage_shield::OnProc(), spell_kalecgos_curse_of_boundless_agony_aura::OnRemove(), spell_halion_marks_aura::OnRemove(), spell_putricide_mutated_plague_aura::OnRemove(), spell_the_lich_king_necrotic_plague_aura::OnRemove(), spell_yogg_saron_malady_of_the_mind_aura::OnRemove(), spell_hor_shared_suffering_aura::OnRemove(), spell_sindragosa_instability_aura::OnRemove(), spell_the_lich_king_necrotic_plague_jump_aura::OnRemove(), npc_wild_wyrm::PassengerBoarded(), spell_karazhan_overload_aura::PeriodicTick(), spell_entropius_negative_energy_periodic::PeriodicTick(), spell_doomfire::PeriodicTick(), spell_blood_queen_pact_of_the_darkfallen_dmg_aura::PeriodicTick(), spell_broggok_poison_cloud::PeriodicTick(), spell_sha_mana_tide::PeriodicTick(), boss_reliquary_of_souls::boss_reliquary_of_soulsAI::PhaseTransitionSpawns(), spell_item_oracle_ablutions::PrepareSpellScript(), spell_q11198_take_down_tethyr::PrepareSpellScript(), SmartScript::ProcessAction(), spell_illidari_council_reflective_shield_aura::ReflectDamage(), spell_pri_power_word_shield_aura::ReflectDamage(), boss_kiljaeden::Reset(), npc_tournament_training_dummy::npc_tournament_training_dummyAI::Reset(), boss_kiljaeden::ScheduleBasicAbilities(), boss_magtheridon::ScheduleCombatEvents(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::SpellHitTarget(), npc_simon_bunny::npc_simon_bunnyAI::SpellHitTarget(), boss_viscidus::SummonedCreatureDies(), boss_krik_thir::boss_krik_thirAI::SummonWatcher(), spell_dk_anti_magic_shell_self::Trigger(), spell_mage_incanters_absorbtion_base_AuraScript::Trigger(), spell_the_lich_king_life_siphon::TriggerHeal(), spell_pal_divine_storm::TriggerHeal(), spell_black_temple_shadow_inferno_aura::Update(), spell_black_temple_spell_absorption_aura::Update(), npc_coren_direbrew::UpdateAI(), boss_huhuran::UpdateAI(), boss_halion::boss_halionAI::UpdateAI(), boss_saviana_ragefire::boss_saviana_ragefireAI::UpdateAI(), boss_anubarak_trial::boss_anubarak_trialAI::UpdateAI(), boss_bronjahm::UpdateAI(), boss_devourer_of_souls::UpdateAI(), boss_festergut::boss_festergutAI::UpdateAI(), boss_rotface::boss_rotfaceAI::UpdateAI(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::UpdateAI(), boss_gluth::boss_gluthAI::UpdateAI(), boss_noth::boss_nothAI::UpdateAI(), boss_sapphiron::boss_sapphironAI::UpdateAI(), boss_malygos::UpdateAI(), boss_algalon_the_observer::UpdateAI(), npc_living_constellation::UpdateAI(), boss_freya::UpdateAI(), boss_freya_elder_brightleaf::UpdateAI(), boss_freya_elder_ironbranch::UpdateAI(), npc_ulduar_hodir_priest::UpdateAI(), boss_ignis::UpdateAI(), npc_ulduar_vx001::UpdateAI(), boss_thorim::UpdateAI(), boss_xt002::UpdateAI(), boss_yoggsaron_sara::UpdateAI(), boss_yoggsaron::UpdateAI(), boss_ymiron::boss_ymironAI::UpdateAI(), boss_emalon::boss_emalonAI::UpdateAI(), and boss_toravon::boss_toravonAI::UpdateAI().

◆ CastDelayedSpellWithPeriodicAmount()

void Unit::CastDelayedSpellWithPeriodicAmount ( Unit caster,
uint32  spellId,
AuraType  auraType,
int32  addAmount,
uint8  effectIndex = 0 
)
16241{
16242 AuraEffect* aurEff = nullptr;
16243 for (AuraEffectList::iterator i = m_modAuras[auraType].begin(); i != m_modAuras[auraType].end(); ++i)
16244 {
16245 aurEff = *i;
16246 if (aurEff->GetCasterGUID() != caster->GetGUID() || aurEff->GetId() != spellId || aurEff->GetEffIndex() != effectIndex || !aurEff->GetTotalTicks())
16247 continue;
16248
16249 addAmount += ((aurEff->GetOldAmount() * std::max<int32>(aurEff->GetTotalTicks() - int32(aurEff->GetTickNumber()), 0)) / aurEff->GetTotalTicks());
16250 break;
16251 }
16252
16253 // xinef: delay only for casting on different unit
16254 if (this == caster || !sWorld->getBoolConfig(CONFIG_MUNCHING_BLIZZLIKE))
16255 caster->CastCustomSpell(spellId, SPELLVALUE_BASE_POINT0, addAmount, this, TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_NO_PERIODIC_RESET), nullptr, aurEff, caster->GetGUID());
16256 else
16257 caster->m_Events.AddEvent(new AuraMunchingQueue(*caster, GetGUID(), addAmount, spellId, aurEff, auraType), caster->m_Events.CalculateQueueTime(400));
16258}
TriggerCastFlags
Definition SpellDefines.h:132
@ TRIGGERED_NO_PERIODIC_RESET
Will ignore equipped item requirements.
Definition SpellDefines.h:152
@ CONFIG_MUNCHING_BLIZZLIKE
Definition WorldConfig.h:148
uint32 GetTickNumber() const
Definition SpellAuraEffects.h:87
int32 GetOldAmount() const
Definition SpellAuraEffects.h:116
uint32 GetId() const
Definition SpellAuraEffects.cpp:432
int32 GetTotalTicks() const
Definition SpellAuraEffects.cpp:7062
ObjectGuid GetCasterGUID() const
Definition SpellAuraEffects.h:48
Definition Unit.cpp:16207
uint64 CalculateQueueTime(uint64 delay) const
Definition EventProcessor.cpp:164
void AddEvent(BasicEvent *Event, uint64 e_time, bool set_addtime=true, uint8 eventGroup=0)
Definition EventProcessor.cpp:136

References EventProcessor::AddEvent(), EventProcessor::CalculateQueueTime(), CastCustomSpell(), CONFIG_MUNCHING_BLIZZLIKE, AuraEffect::GetCasterGUID(), AuraEffect::GetEffIndex(), Object::GetGUID(), Object::GetGUID(), AuraEffect::GetId(), AuraEffect::GetOldAmount(), AuraEffect::GetTickNumber(), AuraEffect::GetTotalTicks(), WorldObject::m_Events, m_modAuras, SPELLVALUE_BASE_POINT0, sWorld, TRIGGERED_FULL_MASK, and TRIGGERED_NO_PERIODIC_RESET.

Referenced by spell_mage_ignite::HandleProc(), spell_dk_unholy_blight::HandleProc(), spell_dru_t10_balance_4p_bonus::HandleProc(), spell_hun_piercing_shots::HandleProc(), spell_pal_righteous_vengeance::HandleProc(), spell_sha_t10_restoration_4p_bonus::HandleProc(), spell_sha_t8_elemental_4p_bonus::HandleProc(), and spell_sha_t9_elemental_4p_bonus::HandleProc().

◆ CastPetAura()

void Unit::CastPetAura ( PetAura const *  aura)
13738{
13739 uint32 auraId = aura->GetAura(GetEntry());
13740 if (!auraId)
13741 return;
13742
13743 if (auraId == 35696) // Demonic Knowledge
13744 {
13745 int32 basePoints = aura->GetDamage();
13746 CastCustomSpell(this, auraId, &basePoints, nullptr, nullptr, true);
13747 }
13748 else
13749 CastSpell(this, auraId, true);
13750}

References CastCustomSpell(), CastSpell(), PetAura::GetAura(), PetAura::GetDamage(), and Object::GetEntry().

Referenced by Pet::CastPetAuras().

◆ CastSpell() [1/7]

SpellCastResult Unit::CastSpell ( float  x,
float  y,
float  z,
uint32  spellId,
bool  triggered,
Item castItem = nullptr,
AuraEffect const *  triggeredByAura = nullptr,
ObjectGuid  originalCaster = ObjectGuid::Empty 
)
1479{
1480 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
1481 if (!spellInfo)
1482 {
1483 LOG_ERROR("entities.unit", "CastSpell: unknown spell {} by caster {}", spellId, GetGUID().ToString());
1485 }
1486
1487 SpellCastTargets targets;
1488 targets.SetDst(x, y, z, GetOrientation());
1489
1490 return CastSpell(targets, spellInfo, nullptr, triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE, castItem, triggeredByAura, originalCaster);
1491}
void SetDst(float x, float y, float z, float orientation, uint32 mapId=MAPID_INVALID)
Definition Spell.cpp:405

References CastSpell(), Object::GetGUID(), Position::GetOrientation(), LOG_ERROR, SpellCastTargets::SetDst(), SPELL_FAILED_SPELL_UNAVAILABLE, sSpellMgr, Position::ToString(), TRIGGERED_FULL_MASK, and TRIGGERED_NONE.

◆ CastSpell() [2/7]

SpellCastResult Unit::CastSpell ( GameObject go,
uint32  spellId,
bool  triggered,
Item castItem = nullptr,
AuraEffect triggeredByAura = nullptr,
ObjectGuid  originalCaster = ObjectGuid::Empty 
)
1494{
1495 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
1496 if (!spellInfo)
1497 {
1498 LOG_ERROR("entities.unit", "CastSpell: unknown spell {} by caster {}", spellId, GetGUID().ToString());
1500 }
1501
1502 SpellCastTargets targets;
1503 targets.SetGOTarget(go);
1504
1505 return CastSpell(targets, spellInfo, nullptr, triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE, castItem, triggeredByAura, originalCaster);
1506}
void SetGOTarget(GameObject *target)
Definition Spell.cpp:270

References CastSpell(), Object::GetGUID(), LOG_ERROR, SpellCastTargets::SetGOTarget(), SPELL_FAILED_SPELL_UNAVAILABLE, sSpellMgr, Position::ToString(), TRIGGERED_FULL_MASK, and TRIGGERED_NONE.

◆ CastSpell() [3/7]

SpellCastResult Unit::CastSpell ( SpellCastTargets const &  targets,
SpellInfo const *  spellInfo,
CustomSpellValues const *  value,
TriggerCastFlags  triggerFlags = TRIGGERED_NONE,
Item castItem = nullptr,
AuraEffect const *  triggeredByAura = nullptr,
ObjectGuid  originalCaster = ObjectGuid::Empty 
)
Todo:
: this is a workaround - not needed anymore, but required for some scripts :(
1376{
1377 if (!spellInfo)
1378 {
1379 LOG_ERROR("entities.unit", "CastSpell: unknown spell by caster {}", GetGUID().ToString());
1381 }
1382
1384 if (!originalCaster && triggeredByAura)
1385 {
1386 originalCaster = triggeredByAura->GetCasterGUID();
1387 }
1388
1389 Spell* spell = new Spell(this, spellInfo, triggerFlags, originalCaster);
1390
1391 if (value)
1392 {
1393 for (CustomSpellValues::const_iterator itr = value->begin(); itr != value->end(); ++itr)
1394 {
1395 spell->SetSpellValue(itr->first, itr->second);
1396 }
1397 }
1398
1399 spell->m_CastItem = castItem;
1400 return spell->prepare(&targets, triggeredByAura);
1401}
void SetSpellValue(SpellValueMod mod, int32 value)
Definition Spell.cpp:8461
Item * m_CastItem
Definition Spell.h:536

References AuraEffect::GetCasterGUID(), Object::GetGUID(), LOG_ERROR, Spell::m_CastItem, Spell::prepare(), Spell::SetSpellValue(), SPELL_FAILED_SPELL_UNAVAILABLE, and Position::ToString().

Referenced by Player::_addSpell(), Player::_addTalentAurasAndSpells(), Spell::_cast(), _ExitVehicle(), Player::_LoadGlyphAuras(), Battleground::_ProcessResurrect(), spell_yogg_saron_protective_gaze_aura::Absorb(), spell_rog_cheat_death::Absorb(), npc_q24545_wretched_ghoul::npc_q24545_wretched_ghoulAI::Activate(), Player::ActivateSpec(), spell_halion_combustion_consumption_aura::AddMarkStack(), Battleground::AddPlayer(), Arena::AddPlayer(), BattlegroundIC::AddPlayer(), BattlegroundMap::AddPlayerToMap(), Battleground::AddPlayerToResurrectQueue(), Pet::addSpell(), spell_item_thrallmar_and_honor_hold_favor::AfterApply(), spell_dru_savage_roar_aura::AfterApply(), spell_the_cleansing_cleansing_soul::AfterRemove(), spell_astromancer_wrath_of_the_astromancer::AfterRemove(), spell_item_darkmoon_card_illusion::AfterRemove(), spell_gen_lifebloom::AfterRemove(), spell_oculus_stop_time_aura::Apply(), spell_sha_earthbind_totem::Apply(), spell_warl_health_funnel::ApplyEffect(), Player::ApplyEnchantment(), Player::ApplyEquipSpell(), Player::ApplyItemObtainSpells(), npc_ritual_channeler::npc_ritual_channelerAI::AttackStart(), npc_dark_nucleus::npc_dark_nucleusAI::AttackStart(), boss_grand_champion::boss_grand_championAI::boss_grand_championAI(), boss_yoggsaron_crusher_tentacle::boss_yoggsaron_crusher_tentacle(), boss_yoggsaron_death_orb::boss_yoggsaron_death_orb(), boss_yoggsaron_influence_tentacle::boss_yoggsaron_influence_tentacle(), WorldState::BuffAdalsSongOfBattle(), WorldState::BuffMagtheridonTeam(), Player::BuildPlayerRepop(), spell_igb_incinerating_blast::CalculateDamage(), spell_igb_cannon_blast::CalculatePower(), npc_echo_of_medivh::CastChangeFacing(), npc_chesspiece::CastChangeFacing(), CastCustomSpell(), npc_hallows_end_soh::CastFires(), Player::CastItemCombatSpell(), npc_volatile_ooze::npc_volatile_oozeAI::CastMainSpell(), CastPetAura(), boss_mor_grayhoof::CastRandomSpell(), CastSpell(), CastSpell(), GameObject::CastSpell(), CastSpell(), CastSpell(), CastSpell(), CastSpell(), spell_summon_gauntlet_mobs_periodic::CastTheNextTwoSpells(), spell_the_lich_king_defile::ChangeDamageAndGrow(), boss_professor_putricide::boss_professor_putricideAI::ChangePhase(), spell_eredar_twins_handle_touch::CheckCast(), Spell::CheckCast(), Spell::CheckItems(), spell_botanica_shift_form_aura::CheckProc(), spell_mage_combustion::CheckProc(), boss_isle_of_conquest::boss_isle_of_conquestAI::CheckRageBuff(), spell_the_lich_king_shadow_trap_periodic::CheckTargetCount(), spell_dk_raise_dead::ConsumeReagents(), spell_frost_giant_death_plague::CountTargets(), instance_blackrock_spire::CreatureLooted(), boss_garfrost::boss_garfrostAI::DamageTaken(), npc_jenny::DamageTaken(), boss_baron_geddon::DamageTaken(), boss_headless_horseman::DamageTaken(), boss_headless_horseman_head::DamageTaken(), boss_sartharion::DamageTaken(), boss_eadric::boss_eadricAI::DamageTaken(), boss_paletress::boss_paletressAI::DamageTaken(), npc_argent_soldier::npc_argent_soldierAI::DamageTaken(), boss_black_knight::boss_black_knightAI::DamageTaken(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::DamageTaken(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::DamageTaken(), npc_gunship_boarding_addAI::DamageTaken(), npc_shambling_horror_icc::npc_shambling_horror_iccAI::DamageTaken(), npc_terenas_menethil::npc_terenas_menethilAI::DamageTaken(), npc_crok_scourgebane::npc_crok_scourgebaneAI::DamageTaken(), npc_power_spark::DamageTaken(), npc_collapsing_star::DamageTaken(), boss_freya::DamageTaken(), boss_hodir::DamageTaken(), npc_ulduar_leviathan_mkii::DamageTaken(), npc_ulduar_vx001::DamageTaken(), npc_ulduar_aerial_command_unit::DamageTaken(), npc_ulduar_arachnopod_destroyer::DamageTaken(), npc_blistering_zombie::npc_blistering_zombieAI::DamageTaken(), npc_tiger_matriarch::npc_tiger_matriarchAI::DamageTaken(), boss_the_lich_king::boss_the_lich_kingAI::DamageTaken(), npc_ulduar_iron_construct::DamageTaken(), boss_mal_ganis::boss_mal_ganisAI::DamageTaken(), boss_thorim::DamageTaken(), boss_yoggsaron_brain::DamageTaken(), DealDamage(), DealMeleeDamage(), boss_twin_valkyrAI::DoAction(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::DoAction(), npc_icc_severed_essence::npc_icc_severed_essenceAI::DoAction(), npc_q24545_wretched_ghoul::npc_q24545_wretched_ghoulAI::DoAction(), npc_eris_hevenfire::npc_eris_hevenfireAI::DoAction(), boss_baltharus_the_warborn::boss_baltharus_the_warbornAI::DoAction(), boss_prince_keleseth_icc::boss_prince_kelesethAI::DoAction(), boss_prince_taldaram_icc::boss_prince_taldaramAI::DoAction(), boss_prince_valanar_icc::boss_prince_valanarAI::DoAction(), npc_ball_of_flame::npc_ball_of_flameAI::DoAction(), boss_deathbringer_saurfang::boss_deathbringer_saurfangAI::DoAction(), boss_the_lich_king::boss_the_lich_kingAI::DoAction(), npc_strangulate_vehicle::npc_strangulate_vehicleAI::DoAction(), npc_terenas_menethil::npc_terenas_menethilAI::DoAction(), boss_algalon_the_observer::DoAction(), boss_flame_leviathan::DoAction(), boss_magtheridon::DoAction(), boss_sacrolash::DoAction(), boss_alythess::DoAction(), npc_kalecgos_kj::DoAction(), npc_pilgrims_bounty_chair::DoAction(), boss_black_knight::boss_black_knightAI::DoAction(), boss_jormungarAI::DoAction(), boss_tyrannus::boss_tyrannusAI::DoAction(), npc_icc_blood_beast::npc_icc_blood_beastAI::DoAction(), npc_icc_putricades_trap::npc_icc_putricades_trapAI::DoAction(), npc_spark_of_ionar::DoAction(), npc_molten_golem::DoAction(), boss_steelbreaker::DoAction(), npc_ulduar_bot_summon_trigger::DoAction(), boss_thorim_sif::DoAction(), boss_xt002::DoAction(), npc_xt002_heart::DoAction(), boss_yoggsaron_sara::DoAction(), boss_yoggsaron_cloud::DoAction(), boss_yoggsaron::DoAction(), boss_yoggsaron_brain::DoAction(), boss_yoggsaron_keeper::DoAction(), Spell::DoAllEffectOnTarget(), UnitAI::DoCast(), UnitAI::DoCast(), UnitAI::DoCastAOE(), ScriptedAI::DoCastSpell(), InstanceScript::DoCastSpellOnPlayer(), InstanceScript::DoCastSpellOnPlayers(), UnitAI::DoCastToAllHostilePlayers(), boss_maexxna::boss_maexxnaAI::DoCastWebWrap(), npc_midsummer_ribbon_pole_target::DoFireworkChecks(), npc_midsummer_ribbon_pole_target::DoGroundFlowerChecks(), UnitAI::DoSpellAttackIfReady(), UnitAI::DoSpellAttackToRandomTargetIfReady(), npc_midsummer_ribbon_pole_target::DoSpewLavaChecks(), boss_skeram::DoTeleport(), Spell::DoTriggersOnSpellHit(), Player::DuelComplete(), Spell::EffectActivateRune(), Spell::EffectApplyGlyph(), Spell::EffectCastButtons(), Spell::EffectDummy(), Spell::EffectEnergize(), Spell::EffectForceCast(), Spell::EffectHeal(), Spell::EffectInebriate(), Spell::EffectSchoolDMG(), Spell::EffectScriptEffect(), Spell::EffectStuck(), Spell::EffectSummonType(), Spell::EffectTaunt(), Spell::EffectTeleportUnits(), Spell::EffectTitanGrip(), Spell::EffectTriggerMissileSpell(), Spell::EffectTriggerRitualOfSummoning(), Spell::EffectTriggerSpell(), Spell::EffectWeaponDmg(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::EmpowerCultist(), boss_the_lich_king::boss_the_lich_kingAI::EnterEvadeMode(), BattlegroundEY::EventPlayerClickedOnFlag(), BattlegroundWS::EventPlayerClickedOnFlag(), BattlegroundEY::EventPlayerDroppedFlag(), BattlegroundWS::EventPlayerDroppedFlag(), BattlegroundEY::EventTeamCapturedPoint(), BattleExperienceEvent::Execute(), OrcDeathEvent::Execute(), CorruptTriggers::Execute(), CastArmageddon::Execute(), UtherBatteredHiltEvent::Execute(), ShockVortexExplodeEvent::Execute(), ResetEncounterEvent::Execute(), FrostBombExplosion::Execute(), IceTombSummonEvent::Execute(), VileSpiritActivateEvent::Execute(), LichKingMovieEvent::Execute(), DelayedCastEvent::Execute(), DelayedCastMincharEvent::Execute(), ChargeRifts::Execute(), CosmicSmashDamageEvent::Execute(), CastRunesEvent::Execute(), BoomEvent::Execute(), SACActivateEvent::Execute(), VerasEnvenom::Execute(), CastQuill::Execute(), lapseTeleport::Execute(), boss_kaelthas::ExecuteMiddleEvent(), boss_salramm::boss_salrammAI::ExplodeGhoul(), spell_festergut_blighted_spores_aura::ExtraEffect(), spell_rotface_mutated_infection_aura::ExtraRemoveEffect(), npc_dark_iron_attack_generator::FinishAttackDueToWin(), npc_pet_dk_ebon_gargoyle::FlyAway(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::GoSiphon(), go_soulwell::go_soulwellAI::GossipHello(), go_orb_of_domination::GossipHello(), spell_cataclysm_breath::HandleAfterCast(), spell_dk_chains_of_ice::HandleAfterCast(), spell_mage_arcane_blast::HandleAfterCast(), spell_q13086_last_line_of_defence::HandleAfterCast(), spell_braziers_hit::HandleAfterEffectApply(), spell_infected_worgen_bite_aura::HandleAfterEffectApply(), spell_dk_blood_boil::HandleAfterHit(), spell_dk_scourge_strike::HandleAfterHit(), spell_rog_deadly_poison::HandleAfterHit(), spell_warlords_rage::HandleAfterRemove(), npc_anachronos_the_ancient::npc_anachronos_the_ancientAI::HandleAnimation(), spell_felmyst_fog_of_corruption_charm_aura::HandleApply(), spell_kiljaeden_vengeance_of_the_blue_flight_aura::HandleApply(), spell_boss_magus_telestra_summon_telestra_clones_aura::HandleApply(), spell_dru_enrage::HandleApply(), spell_rog_killing_spree_aura::HandleApply(), spell_warr_vigilance::HandleApply(), spell_azjol_nerub_pound::HandleApplyAura(), spell_pal_seal_of_vengeance_aura::HandleApplyDoT(), BattlegroundIC::HandleAreaTrigger(), OutdoorPvPSI::HandleAreaTrigger(), AuraEffect::HandleAuraDummy(), AuraEffect::HandleAuraLinked(), AuraEffect::HandleAuraModShapeshift(), HandleAuraRaidProcFromCharge(), HandleAuraRaidProcFromChargeWithValue(), Aura::HandleAuraSpecificMods(), spell_dk_death_grip::HandleBaseDummy(), misc_commandscript::HandleBindSightCommand(), spell_sha_maelstrom_weapon::HandleBonus(), spell_mirkblood_dash_gash_return_to_tank_pre_spell::HandleCast(), spell_rotface_unstable_ooze_explosion_init::HandleCast(), spell_commander_sarannis_summon_reinforcements::HandleCast(), cast_commandscript::HandleCastBackCommand(), cast_commandscript::HandleCastCommand(), cast_commandscript::HandleCastDestCommand(), cast_commandscript::HandleCastDistCommand(), cast_commandscript::HandleCastSelfCommand(), cast_commandscript::HandleCastTargetCommad(), spell_gen_mounted_charge::HandleChargeEffect(), spell_dk_corpse_explosion::HandleCorpseExplosion(), OutdoorPvPSI::HandleCustomSpell(), WorldSession::HandleDuelCancelledOpcode(), spell_icc_shattered_bones::HandleDummy(), spell_player_mount_wyrm::HandleDummy(), spell_corrupted_totems::HandleDummy(), spell_moroes_vanish::HandleDummy(), spell_karazhan_blink::HandleDummy(), spell_karazhan_wrath_titans_stacker::HandleDummy(), spell_ooze_zap::HandleDummy(), spell_saviana_conflagration_init::HandleDummy(), spell_igb_burning_pitch_selector::HandleDummy(), spell_igb_burning_pitch::HandleDummy(), spell_charge_shield_bomber::HandleDummy(), spell_fight_fire_bomber::HandleDummy(), spell_anti_air_rocket_bomber::HandleDummy(), spell_q13007_iron_colossus::HandleDummy(), spell_illidan_found_target::HandleDummy(), spell_leotheras_chaos_blast::HandleDummy(), spell_morogrim_tidewalker_watery_grave::HandleDummy(), spell_q10935_the_exorcism_of_colonel_jules::HandleDummy(), spell_gen_focused_bursts::HandleDummy(), spell_shadowblink::HandleDummy(), spell_spawn_drakonid::HandleDummy(), spell_send_mug_target_picker::HandleDummy(), spell_hallows_end_candy::HandleDummy(), spell_hallows_end_bucket_lands::HandleDummy(), spell_midsummer_torch_catch::HandleDummy(), spell_pilgrims_bounty_pass_generic::HandleDummy(), spell_pilgrims_bounty_feast_on_generic::HandleDummy(), spell_mana_burn_area::HandleDummy(), spell_voljin_war_drums::HandleDummy(), spell_voodoo::HandleDummy(), spell_sartharion_lava_strike::HandleDummy(), spell_halion_meteor_strike_targeting::HandleDummy(), spell_halion_twilight_division::HandleDummy(), spell_drakkari_colossus_emerge::HandleDummy(), spell_drakkari_colossus_surge::HandleDummy(), spell_putricide_ooze_eruption_searcher::HandleDummy(), spell_voa_flaming_cinder::HandleDummy(), spell_q12096_q12092_dummy::HandleDummy(), spell_vehicle_warhead_fuse::HandleDummy(), spell_q12589_shoot_rjr::HandleDummy(), spell_fatal_strike::HandleDummy(), spell_najentus_needle_spine::HandleDummy(), spell_ice_spear_target_picker::HandleDummy(), spell_dru_starfall_dummy::HandleDummy(), spell_gen_cannibalize::HandleDummy(), spell_gen_gadgetzan_transporter_backfire::HandleDummy(), spell_gen_gnomish_transporter::HandleDummy(), spell_hun_masters_call::HandleDummy(), spell_hun_pet_carrion_feeder::HandleDummy(), spell_item_gnomish_universal_remote::HandleDummy(), spell_item_gnomish_shrink_ray::HandleDummy(), spell_item_trigger_spell::HandleDummy(), spell_item_deviate_fish::HandleDummy(), spell_item_flask_of_the_north::HandleDummy(), spell_item_make_a_wish::HandleDummy(), spell_item_mingos_fortune_generator::HandleDummy(), spell_item_net_o_matic::HandleDummy(), spell_item_noggenfogger_elixir::HandleDummy(), spell_item_savory_deviate_delight::HandleDummy(), spell_item_six_demon_bag::HandleDummy(), spell_item_underbelly_elixir::HandleDummy(), spell_item_vanquished_clutches::HandleDummy(), spell_item_purify_helboar_meat::HandleDummy(), spell_item_reindeer_transformation::HandleDummy(), spell_item_nigh_invulnerability::HandleDummy(), spell_item_poultryizer::HandleDummy(), spell_item_socrethars_stone::HandleDummy(), spell_item_demon_broiled_surprise::HandleDummy(), spell_item_complete_raptor_capture::HandleDummy(), spell_item_brewfest_mount_transformation::HandleDummy(), spell_item_nitro_boots::HandleDummy(), spell_item_teach_language::HandleDummy(), spell_item_rocket_boots::HandleDummy(), spell_item_pygmy_oil::HandleDummy(), spell_item_chicken_cover::HandleDummy(), spell_item_greatmothers_soulcatcher::HandleDummy(), spell_item_lifegiving_gem::HandleDummy(), spell_item_mind_control_cap::HandleDummy(), spell_item_hourglass_sand::HandleDummy(), spell_item_ultrasafe_transporter::HandleDummy(), spell_mage_summon_water_elemental::HandleDummy(), spell_pal_blessing_of_faith::HandleDummy(), spell_pal_holy_shock::HandleDummy(), spell_pal_judgement_of_command::HandleDummy(), spell_pri_penance::HandleDummy(), spell_q11520_discovering_your_roots::HandleDummy(), spell_q5206_test_fetid_skull::HandleDummy(), spell_q11396_11399_scourging_crystal_controller::HandleDummy(), spell_q11587_arcane_prisoner_rescue::HandleDummy(), spell_q11730_ultrasonic_screwdriver::HandleDummy(), spell_q12634_despawn_fruit_tosser::HandleDummy(), spell_q12683_take_sputum_sample::HandleDummy(), spell_q9452_cast_net::HandleDummy(), spell_q13291_q13292_q13239_q13261_frostbrood_skytalon_grab_decoy::HandleDummy(), spell_q12308_escape_from_silverbrook::HandleDummy(), spell_q12641_death_comes_from_on_high::HandleDummy(), spell_rog_shiv::HandleDummy(), spell_sha_fire_nova::HandleDummy(), spell_warl_ritual_of_doom_effect::HandleDummy(), spell_warl_soulshatter::HandleDummy(), spell_warr_charge::HandleDummy(), spell_warr_warriors_wrath::HandleDummy(), spell_magtheridon_shadow_grasp::HandleDummyApply(), spell_yogg_saron_destabilization_matrix::HandleDummyEffect(), spell_yogg_saron_insane_periodic_trigger::HandleDummyEffect(), spell_image_of_drakuru_reagent_check::HandleDummyEffect(), spell_herald_volzaj_insanity::HandleDummyEffect(), spell_talon_king_ikiss_blink::HandleDummyHitTarget(), spell_shadowfang_keep_forsaken_skills_aura::HandleDummyTick(), spell_item_rocket_chicken::HandleDummyTick(), spell_warl_demonic_circle_summon::HandleDummyTick(), spell_shadowfang_keep_haunting_spirits_aura::HandleDummyTick(), spell_blood_council_shadow_prison_aura::HandleDummyTick(), spell_mark_of_nature::HandleEffect(), spell_call_of_the_beast::HandleEffect(), spell_target_fissures::HandleEffect(), spell_rog_vanish::HandleEffect(), spell_mc_play_dead_aura::HandleEffectApply(), spell_lich_king_vo_blocker::HandleEffectApply(), spell_midsummer_ribbon_pole::HandleEffectApply(), spell_tharon_ja_dummy_aura::HandleEffectApply(), spell_reliquary_of_souls_aura_of_suffering_aura::HandleEffectApply(), spell_teron_gorefiend_shadowy_construct::HandleEffectApply(), spell_leotheras_insidious_whisper_aura::HandleEffectApply(), spell_pal_aura_mastery::HandleEffectApply(), spell_pal_improved_aura::HandleEffectApply(), spell_q12851_going_bearback::HandleEffectApply(), spell_bloodspore_haze::HandleEffectHit(), spell_oculus_soar_aura::HandleEffectPeriodic(), spell_gen_whisper_gulch_yogg_saron_whisper::HandleEffectPeriodic(), spell_rog_killing_spree_aura::HandleEffectPeriodic(), spell_sha_earthbind_totem::HandleEffectPeriodic(), spell_brewfest_main_ram_buff::HandleEffectPeriodic(), spell_hodir_flash_freeze_aura::HandleEffectPeriodic(), spell_warr_retaliation::HandleEffectProc(), spell_tharon_ja_dummy_aura::HandleEffectRemove(), spell_q11919_q11940_drake_hunt_aura::HandleEffectRemove(), spell_illidan_parasitic_shadowfiend_aura::HandleEffectRemove(), spell_illidan_parasitic_shadowfiend_trigger_aura::HandleEffectRemove(), spell_teron_gorefiend_shadow_of_death::HandleEffectRemove(), spell_black_temple_skeleton_shot_aura::HandleEffectRemove(), spell_hydross_cleansing_field_command::HandleEffectRemove(), spell_serpentshrine_cavern_serpentshrine_parasite::HandleEffectRemove(), spell_serpentshrine_cavern_serpentshrine_parasite_trigger_aura::HandleEffectRemove(), spell_q10930_big_bone_worm_aura::HandleEffectRemove(), spell_q10929_fumping_aura::HandleEffectRemove(), spell_flamewreath::HandleFinish(), spell_midsummer_fling_torch::HandleFinish(), spell_midsummer_juggling_torch::HandleFinish(), spell_wintergrasp_rp_gg::HandleFinish(), spell_dreamwalker_summoner::HandleForceCast(), spell_dreamwalker_summon_suppresser_effect::HandleForceCast(), spell_ioc_bomb_blast_criteria::HandleGameObjectDamage(), OPvPCapturePointZM_Graveyard::HandleGossipOption(), spell_mirkblood_blood_mirror_target_picker::HandleHit(), spell_magtheridon_quake::HandleHit(), spell_chapter5_return_to_capital::HandleHit(), spell_dk_presence::HandleImprovedBloodPresence(), spell_dk_presence::HandleImprovedFrostPresence(), spell_dk_presence::HandleImprovedUnholyPresence(), spell_sindragosa_frost_breath::HandleInfusion(), OutdoorPvPHP::HandleKillImpl(), OutdoorPvPNA::HandleKillImpl(), OutdoorPvPZM::HandleKillImpl(), BattlegroundIC::HandleKillUnit(), learn_commandscript::HandleLearnAllMyTrainerSpellsCommand(), WorldSession::HandleMoveSplineDoneOpcode(), WorldSession::HandleMoveTeleportAck(), WorldSession::HandleMoveWorldportAck(), spell_oculus_soar_aura::HandleOnEffectApply(), spell_oculus_rider_aura::HandleOnEffectApply(), spell_ticking_time_bomb_aura::HandleOnEffectRemove(), spell_delusions_of_jindo::HandleOnHit(), spell_arcane_vacuum::HandleOnHit(), spell_mark_of_frost_freeze::HandleOnHit(), spell_mutate_explode_bug::HandleOnHit(), spell_explode_trigger::HandleOnHit(), spell_blade_dance_targeting::HandleOnHit(), aura_class_call_wild_magic::HandlePeriodic(), spell_shadow_sickle_periodic_damage::HandlePeriodic(), spell_hadronox_summon_periodic_aura::HandlePeriodic(), spell_halion_meteor_strike_spread_aura::HandlePeriodic(), spell_sladran_grip_of_sladran_aura::HandlePeriodic(), spell_algalon_phase_punch_aura::HandlePeriodic(), spell_close_rift_aura::HandlePeriodic(), spell_serpentshrine_cavern_coilfang_water::HandlePeriodic(), spell_rancid_spore_cloud::HandlePeriodic(), spell_kaelthas_remote_toy::HandlePeriodic(), spell_q10923_evil_draws_near_periodic_aura::HandlePeriodic(), spell_sha_totemic_mastery::HandlePeriodic(), spell_garr_separation_anxiety_aura::HandlePeriodic(), spell_majordomo_separation_anxiety_aura::HandlePeriodic(), spell_kiljaeden_shadow_spike_aura::HandlePeriodic(), spell_kiljaeden_armageddon_periodic_aura::HandlePeriodic(), spell_halion_twilight_cutter_periodic_aura::HandlePeriodic(), spell_oculus_ride_ruby_emerald_amber_drake_que_aura::HandlePeriodic(), spell_hun_sniper_training::HandlePeriodic(), spell_shadow_bolt_whirl::HandlePeriodic(), spell_voa_overcharge_aura::HandlePeriodicDummy(), spell_item_dementia::HandlePeriodicDummy(), AuraEffect::HandlePeriodicDummyAuraTick(), spell_magtheridon_shadow_grasp::HandlePeriodicRemove(), spell_igb_periodic_trigger_with_power_cost_aura::HandlePeriodicTick(), spell_item_enchanted_broom_periodic::HandlePeriodicTick(), spell_bronjahm_soulstorm_channel_ooc_aura::HandlePeriodicTick(), spell_bronjahm_soulstorm_visual_aura::HandlePeriodicTick(), spell_item_direbrew_remote_aura::HandlePeriodicTick(), AuraEffect::HandlePeriodicTriggerSpellAuraTick(), npc_echo_of_medivh::HandlePieceMoveByAI(), WorldState::HandlePlayerEnterZone(), OutdoorPvPEP::HandlePlayerEnterZone(), OutdoorPvPHP::HandlePlayerEnterZone(), OutdoorPvPNA::HandlePlayerEnterZone(), OutdoorPvPSI::HandlePlayerEnterZone(), OutdoorPvPTF::HandlePlayerEnterZone(), OutdoorPvPZM::HandlePlayerEnterZone(), WorldSession::HandlePlayerLoginFromDB(), BattlegroundIC::HandlePlayerResurrect(), misc_commandscript::HandlePossessCommand(), spell_blood_queen_vampiric_bite::HandlePresence(), spell_mark_of_malice::HandleProc(), spell_item_lil_phylactery::HandleProc(), spell_item_fate_rune_of_unsurpassed_vigor::HandleProc(), spell_gyth_chromatic_protection::HandleProc(), spell_karazhan_wrath_titans_aura::HandleProc(), spell_ahune_spanky_hands::HandleProc(), spell_hun_glyph_of_mend_pet::HandleProc(), spell_item_trauma::HandleProc(), spell_item_shadows_fate::HandleProc(), spell_utgarde_pinnacle_beast_mark::HandleProc(), spell_dk_scent_of_blood::HandleProc(), spell_dru_omen_of_clarity::HandleProc(), spell_dru_t4_2p_bonus::HandleProc(), spell_dru_maim_interrupt::HandleProc(), spell_hun_improved_mend_pet::HandleProc(), spell_hun_misdirection::HandleProc(), spell_item_aegis_of_preservation::HandleProc(), spell_item_desperate_defense::HandleProc(), spell_mage_focus_magic::HandleProc(), spell_mage_arcane_potency::HandleProc(), spell_mage_imp_mana_gems::HandleProc(), spell_pal_blessing_of_sanctuary::HandleProc(), spell_pal_judgements_of_the_wise::HandleProc(), spell_pal_sacred_shield_dummy::HandleProc(), spell_pri_mana_leech::HandleProc(), spell_pri_t5_heal_2p_bonus::HandleProc(), spell_rog_tricks_of_the_trade_aura::HandleProc(), spell_rog_honor_among_thieves::HandleProc(), spell_rog_turn_the_tables::HandleProc(), spell_warl_nightfall::HandleProc(), spell_warl_glyph_of_life_tap::HandleProc(), spell_warl_t4_2p_bonus_fire::HandleProc(), spell_warl_t4_2p_bonus_shadow::HandleProc(), spell_warr_vigilance::HandleProc(), spell_warr_second_wind::HandleProc(), spell_warr_extra_proc::HandleProc(), spell_warr_glyph_of_blocking::HandleProc(), spell_karazhan_temptation::HandleProc(), spell_putricide_ooze_tank_protection::HandleProc(), spell_uk_second_wind::HandleProc(), spell_twisted_reflection::HandleProc(), spell_pet_guard_dog::HandleProc(), spell_pet_silverback::HandleProc(), spell_dk_blood_caked_blade::HandleProc(), spell_dk_dancing_rune_weapon::HandleProc(), spell_dk_mark_of_blood::HandleProc(), spell_dk_sudden_doom::HandleProc(), spell_dk_threat_of_thassarian::HandleProc(), spell_dk_glyph_of_scourge_strike::HandleProc(), spell_dk_pvp_4p_bonus::HandleProc(), spell_dru_glyph_of_barkskin::HandleProc(), spell_dru_glyph_of_rake::HandleProc(), spell_dru_eclipse::HandleProc(), spell_dru_revitalize::HandleProc(), spell_dru_t3_2p_bonus::HandleProc(), spell_dru_t3_6p_bonus::HandleProc(), spell_dru_item_t6_trinket::HandleProc(), spell_dru_glyph_of_starfire_dummy::HandleProc(), spell_dru_t9_feral_relic::HandleProc(), spell_gen_moss_covered_feet::HandleProc(), spell_gen_retaliation_toc::HandleProc(), spell_hun_hunting_party::HandleProc(), spell_hun_t9_4p_bonus::HandleProc(), spell_item_unsated_craving::HandleProc(), spell_item_shadowmourne::HandleProc(), spell_item_darkmoon_card_greatness::HandleProc(), spell_item_death_choice::HandleProc(), spell_item_trinket_stack< StackSpell, TriggerSpell >::HandleProc(), spell_item_soul_preserver::HandleProc(), spell_item_mana_drain::HandleProc(), spell_item_aura_of_madness::HandleProc(), spell_item_deathbringers_will_normal::HandleProc(), spell_item_deathbringers_will_heroic::HandleProc(), spell_item_discerning_eye_beast_dummy::HandleProc(), spell_item_healing_touch_refund::HandleProc(), spell_item_heartpierce::HandleProc(), spell_item_heartpierce_hero::HandleProc(), spell_item_mark_of_conquest::HandleProc(), spell_item_sunwell_exalted_caster_neck::HandleProc(), spell_item_sunwell_exalted_melee_neck::HandleProc(), spell_item_sunwell_exalted_tank_neck::HandleProc(), spell_item_tiny_abomination_in_a_jar::HandleProc(), spell_item_tiny_abomination_in_a_jar_hero::HandleProc(), spell_item_totem_of_flowing_water::HandleProc(), spell_item_purified_shard_of_the_scale::HandleProc(), spell_item_shiny_shard_of_the_scale::HandleProc(), spell_item_living_root_of_the_wildheart::HandleProc(), spell_mage_hot_streak::HandleProc(), spell_mage_imp_blizzard::HandleProc(), spell_pal_item_t6_trinket::HandleProc(), spell_pal_t3_6p_bonus::HandleProc(), spell_pal_heart_of_the_crusader::HandleProc(), spell_pal_improved_lay_of_hands::HandleProc(), spell_pri_item_t6_trinket::HandleProc(), spell_pri_t3_4p_bonus::HandleProc(), spell_rog_deadly_brew::HandleProc(), spell_sha_item_lightning_shield::HandleProc(), spell_sha_item_lightning_shield_trigger::HandleProc(), spell_sha_nature_guardian::HandleProc(), spell_sha_frozen_power::HandleProc(), spell_sha_imp_water_shield::HandleProc(), spell_sha_item_t6_trinket::HandleProc(), spell_sha_lightning_shield::HandleProc(), spell_sha_static_shock::HandleProc(), spell_sha_t3_6p_bonus::HandleProc(), spell_warl_glyph_of_shadowflame::HandleProc(), spell_warl_glyph_of_corruption_nightfall::HandleProc(), spell_warl_seed_of_corruption_dummy::HandleProc(), spell_warl_seed_of_corruption_generic::HandleProc(), spell_warl_soul_leech::HandleProc(), spell_warr_sweeping_strikes::HandleProc(), spell_mage_burning_determination::HandleProc(), spell_gen_black_bow_of_the_betrayer::HandleProc(), spell_hun_lock_and_load::HandleProc(), spell_item_corpse_tongue_coin::HandleProc(), spell_item_corpse_tongue_coin_heroic::HandleProc(), spell_item_soul_harvesters_charm::HandleProc(), spell_item_petrified_twilight_scale::HandleProc(), spell_item_petrified_twilight_scale_heroic::HandleProc(), spell_mage_gen_extra_effects::HandleProc(), spell_pri_body_and_soul::HandleProcDummy(), AuraEffect::HandleProcTriggerSpellAuraProc(), WorldSession::HandleQuestgiverAcceptQuestOpcode(), AuraEffect::HandleRaidProcFromChargeAuraProc(), AuraEffect::HandleRaidProcFromChargeWithValueAuraProc(), spell_dk_raise_dead::HandleRaiseDead(), spell_hun_rapid_recuperation_trigger::HandleRapidKillingProc(), spell_vael_burning_adrenaline::HandleRemove(), spell_kiljaeden_darkness_aura::HandleRemove(), spell_entropius_void_zone_visual_aura::HandleRemove(), spell_igb_rocket_pack_aura::HandleRemove(), spell_najentus_hurl_spine::HandleSchoolDamage(), spell_gen_mine_sweeper::HandleSchoolDMG(), spell_warl_shadowflame::HandleSchoolDMG(), spell_gen_bandage::HandleScript(), spell_gen_translocate::HandleScript(), spell_pal_lay_on_hands::HandleScript(), spell_kormok_summon_bone_mages::HandleScript(), spell_kormok_summon_bone_minions::HandleScript(), spell_energize_aoe::HandleScript(), spell_saviana_conflagration_throwback::HandleScript(), spell_taldaram_glittering_sparks::HandleScript(), spell_blood_queen_bloodbolt::HandleScript(), spell_blood_queen_presence_of_the_darkfallen::HandleScript(), spell_igb_rocket_artillery::HandleScript(), spell_putricide_unstable_experiment::HandleScript(), spell_sindragosa_icy_grip::HandleScript(), spell_the_lich_king_jump::HandleScript(), spell_the_lich_king_summon_spirit_bomb::HandleScript(), spell_dreamwalker_summon_portal::HandleScript(), spell_dreamwalker_twisted_nightmares::HandleScript(), spell_archavon_rock_shards::HandleScript(), spell_wintergrasp_portal::HandleScript(), spell_gen_create_lance::HandleScript(), spell_item_defibrillate::HandleScript(), spell_item_scroll_of_recall::HandleScript(), spell_shazzrah_gate_dummy::HandleScript(), spell_apothecary_lingering_fumes::HandleScript(), spell_apothecary_validate_area::HandleScript(), spell_apothecary_throw_cologne::HandleScript(), spell_apothecary_throw_perfume::HandleScript(), spell_hallows_end_trick::HandleScript(), spell_hallows_end_put_costume::HandleScript(), spell_hallows_end_trick_or_treat::HandleScript(), spell_winter_veil_mistletoe::HandleScript(), spell_ayamiss_swarmer_teleport_trigger::HandleScript(), spell_moam_summon_mana_fiends::HandleScript(), spell_prince_taldaram_conjure_flame_sphere::HandleScript(), spell_mistress_kiss_area::HandleScript(), spell_novos_summon_minions::HandleScript(), spell_festergut_gastric_bloat::HandleScript(), spell_putricide_unbound_plague::HandleScript(), spell_putricide_choking_gas_bomb::HandleScript(), spell_rotface_little_ooze_combine::HandleScript(), spell_rotface_large_ooze_combine::HandleScript(), spell_rotface_large_ooze_buff_combine::HandleScript(), spell_the_lich_king_cast_back_to_caster::HandleScript(), spell_frost_giant_death_plague::HandleScript(), spell_taunt_brann::HandleScript(), spell_vehicle_grab_pyrite::HandleScript(), spell_yogg_saron_target_selectors::HandleScript(), spell_skadi_poisoned_spear::HandleScript(), spell_freezing_cloud_area_right::HandleScript(), spell_freezing_cloud_area_left::HandleScript(), spell_the_cleansing_shrine_cast::HandleScript(), spell_the_cleansing_mirror_image_script_effect::HandleScript(), spell_low_health_trigger::HandleScript(), spell_the_black_stalker_levitate::HandleScript(), spell_the_black_stalker_levitation_pulse::HandleScript(), spell_the_black_stalker_someone_grab_me::HandleScript(), spell_the_black_stalker_magnetic_pull::HandleScript(), spell_the_flag_of_ownership::HandleScript(), spell_gen_elune_candle::HandleScript(), spell_gen_teleporting::HandleScript(), spell_gen_dalaran_disguise::HandleScript(), spell_hun_pet_heart_of_the_phoenix::HandleScript(), spell_item_dimensional_ripper_area52::HandleScript(), spell_item_eggnog::HandleScript(), spell_item_drums_of_forgotten_kings::HandleScript(), spell_item_drums_of_the_wild::HandleScript(), spell_q12805_lifeblood_dummy::HandleScript(), spell_q12735_song_of_cleansing::HandleScript(), spell_q13011_bear_flank_master::HandleScript(), spell_q12619_emblazon_runeblade_effect::HandleScript(), spell_q12919_gymers_throw::HandleScript(), spell_kalecgos_spectral_realm_dummy::HandleScriptEffect(), spell_marrowgar_coldflame_bonestorm::HandleScriptEffect(), spell_yogg_saron_sanity_reduce::HandleScriptEffect(), spell_black_temple_bloodbolt::HandleScriptEffect(), spell_lady_vashj_summon_sporebat::HandleScriptEffect(), spell_kaelthas_summon_weapons::HandleScriptEffect(), spell_kaelthas_gravity_lapse::HandleScriptEffect(), spell_kaelthas_nether_beam::HandleScriptEffect(), spell_gen_clone::HandleScriptEffect(), spell_gen_clone_weapon::HandleScriptEffect(), spell_gen_break_shield::HandleScriptEffect(), spell_gen_mounted_charge::HandleScriptEffect(), spell_gen_throw_shield::HandleScriptEffect(), spell_item_sleepy_willy::HandleScriptEffect(), spell_item_lil_xt::HandleScriptEffect(), spell_q12698_the_gift_that_keeps_on_giving::HandleScriptEffect(), spell_death_knight_initiate_visual::HandleScriptEffect(), spell_summon_amanishi_sentries::HandleScriptEffect(), spell_brewfest_toss_mug::HandleScriptEffect(), spell_direbrew_summon_mole_machine_target_picker::HandleScriptEffect(), spell_request_second_mug::HandleScriptEffect(), spell_winter_veil_racer_slam_hit::HandleScriptEffect(), spell_winter_veil_shoot_air_rifle::HandleScriptEffect(), spell_azjol_drain_power::HandleScriptEffect(), spell_dtk_summon_random_drakkari::HandleScriptEffect(), spell_marrowgar_coldflame::HandleScriptEffect(), spell_gluth_decimate::HandleScriptEffect(), spell_arcane_chains_character_force_cast::HandleScriptEffect(), spell_dragonblight_devour_ghoul::HandleScriptEffect(), spell_hawk_hunting::HandleScriptEffect(), spell_q12611_deathbolt::HandleScriptEffect(), spell_illidari_council_judgement::HandleScriptEffect(), spell_black_temple_summon_shadowfiends::HandleScriptEffect(), spell_ice_bombardment_dest_picker::HandleScriptEffect(), spell_kaelthas_remove_enchanted_weapons::HandleScriptEffect(), spell_kaelthas_kael_explodes::HandleScriptEffect(), spell_q10612_10613_the_fel_and_the_furious::HandleScriptEffect(), spell_dk_pestilence::HandleScriptEffect(), spell_hun_masters_call::HandleScriptEffect(), spell_item_mirrens_drinking_hat::HandleScriptEffect(), spell_pal_judgement::HandleScriptEffect(), spell_pri_lightwell::HandleScriptEffect(), spell_q1846_bending_shinbone::HandleScriptEffect(), spell_q14112_14145_chum_the_water::HandleScriptEffect(), WorldSession::HandleSelfResOpcode(), AuraEffect::HandleShapeshiftBoosts(), ArenaSpectator::HandleSpectatorWatchCommand(), HandleSpellClick(), spell_marrowgar_bone_spike_graveyard::HandleSpikes(), AuraEffect::HandleSpiritOfRedemption(), spell_gen_paralytic_poison::HandleStun(), spell_putricide_mutated_transformation::HandleSummon(), spell_item_draenic_pale_ale::HandleSummon(), WorldSession::HandleTalentWipeConfirmOpcode(), spell_mother_shahraz_fatal_attraction::HandleTeleportUnits(), spell_warl_drain_soul::HandleTick(), spell_trigger_spell_from_caster::HandleTrigger(), spell_magic_eater_food::HandleTriggerSpell(), spell_alert_drums::HandleTriggerSpell(), spell_winter_veil_racer_rocket_slam::HandleTriggerSpell(), spell_pal_righteous_defense::HandleTriggerSpellHit(), boss_onyxia::HandleWhelpSpam(), boss_valithria_dreamwalker::boss_valithria_dreamwalkerAI::HealReceived(), spell_q10769_dissension_amongst_the_ranks_aura::if(), CharmInfo::InitCharmCreateSpells(), boss_yoggsaron_sara::InitFight(), npc_jenny::Initialize(), boss_urok_doomhowl::InitializeAI(), boss_baltharus_the_warborn::boss_baltharus_the_warbornAI::InitializeAI(), npc_pos_deathwhisper_necrolyte::npc_pos_deathwhisper_necrolyteAI::InitializeAI(), npc_oathbound_warder::InitializeAI(), npc_pet_hunter_snake_trap::InitializeAI(), npc_pet_mage_mirror_image::InitializeAI(), npc_pet_pri_lightwell::InitializeAI(), CharmInfo::InitPossessCreateSpells(), Guardian::InitStatsForLevel(), Totem::InitSummon(), boss_faction_championsAI::IsCCed(), npc_living_inferno::npc_living_infernoAI::IsSummonedBy(), TriggerAI::IsSummonedBy(), npc_vaelastrasz_the_red::IsSummonedBy(), npc_bone_spike::npc_bone_spikeAI::IsSummonedBy(), npc_strangulate_vehicle::npc_strangulate_vehicleAI::IsSummonedBy(), npc_oculus_drake::npc_oculus_drakeAI::IsSummonedBy(), boss_kologarn_eyebeam::IsSummonedBy(), npc_infra_green_bomber_generic::npc_infra_green_bomber_genericAI::IsSummonedBy(), npc_pet_gen_fetch_ball::IsSummonedBy(), npc_hallows_end_soh::JustDied(), boss_rajaxx::JustDied(), boss_black_knight::boss_black_knightAI::JustDied(), npc_swarm_scarab::npc_swarm_scarabAI::JustDied(), npc_gunship::npc_gunshipAI::JustDied(), boss_professor_putricide::boss_professor_putricideAI::JustDied(), npc_gluttonous_abomination::npc_gluttonous_abominationAI::JustDied(), boss_steelbreaker::JustDied(), boss_runemaster_molgeim::JustDied(), boss_stormcaller_brundir::JustDied(), boss_freya_summons::JustDied(), npc_ulduar_saronite_vapors::JustDied(), boss_yoggsaron_guardian_of_ys::JustDied(), boss_skarvald_the_constructor::JustDied(), boss_dalronn_the_controller::JustDied(), boss_fathomguard_sharkkis::JustDied(), boss_fathomguard_tidalvess::JustDied(), boss_fathomguard_caribdis::JustDied(), npc_necropolis_health::JustDied(), npc_necrotic_shard::JustDied(), CombatAI::JustDied(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::JustDied(), boss_halion::boss_halionAI::JustDied(), boss_twilight_halion::boss_twilight_halionAI::JustDied(), boss_tharon_ja::boss_tharon_jaAI::JustDied(), boss_sapphiron::boss_sapphironAI::JustDied(), boss_anomalus::JustDied(), npc_nerubar_victim::npc_nerubar_victimAI::JustDied(), boss_shade_of_akama::JustDied(), CasterAI::JustEngagedWith(), boss_servant_quarters::JustEngagedWith(), npc_tapoke_slim_jahn::npc_tapoke_slim_jahnAI::JustEngagedWith(), boss_akilzon::JustEngagedWith(), npc_hallows_end_soh::JustEngagedWith(), boss_sartharion::JustEngagedWith(), boss_eadric::boss_eadricAI::JustEngagedWith(), npc_toc5_grand_champion_minion::npc_toc5_grand_champion_minionAI::JustEngagedWith(), boss_twin_valkyrAI::JustEngagedWith(), boss_garfrost::boss_garfrostAI::JustEngagedWith(), npc_stinky_icc::npc_stinky_iccAI::JustEngagedWith(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::JustEngagedWith(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::JustEngagedWith(), npc_rimefang::npc_rimefangAI::JustEngagedWith(), npc_nexus_lord::JustEngagedWith(), boss_urom::boss_uromAI::JustEngagedWith(), boss_freya::JustEngagedWith(), boss_freya_summons::JustEngagedWith(), boss_vezax::JustEngagedWith(), boss_hodir::JustEngagedWith(), boss_thorim::JustEngagedWith(), boss_thorim_ancient_rune_giant::JustEngagedWith(), boss_yoggsaron_keeper::JustEngagedWith(), npc_ulduar_storm_tempered_keeper::JustEngagedWith(), boss_koralon::boss_koralonAI::JustEngagedWith(), boss_toravon::boss_toravonAI::JustEngagedWith(), boss_shirrak_the_dead_watcher::JustEngagedWith(), boss_watchkeeper_gargolmar::JustEngagedWith(), boss_gatewatcher_gyrokill::JustEngagedWith(), boss_pathaleon_the_calculator::JustEngagedWith(), npc_pet_shaman_fire_elemental::JustEngagedWith(), CombatAI::JustEngagedWith(), boss_yauj::JustEngagedWith(), boss_moorabi::boss_moorabiAI::JustEngagedWith(), boss_prince_valanar_icc::boss_prince_valanarAI::JustEngagedWith(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::JustEngagedWith(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::JustEngagedWith(), boss_professor_putricide::boss_professor_putricideAI::JustEngagedWith(), boss_sindragosa::boss_sindragosaAI::JustEngagedWith(), boss_kelthuzad::boss_kelthuzadAI::JustEngagedWith(), boss_sapphiron::boss_sapphironAI::JustEngagedWith(), boss_keristrasza::JustEngagedWith(), boss_steelbreaker::JustEngagedWith(), boss_teron_gorefiend::JustEngagedWith(), boss_fathomlord_karathress::JustEngagedWith(), boss_fathomguard_sharkkis::JustEngagedWith(), npc_artorius::npc_artoriusAI::JustEngagedWith(), npc_simone::npc_simoneAI::JustEngagedWith(), npc_nelson::npc_nelsonAI::JustEngagedWith(), npc_franklin::npc_franklinAI::JustEngagedWith(), boss_baltharus_the_warborn::boss_baltharus_the_warbornAI::JustReachedHome(), boss_drakkari_colossus::boss_drakkari_colossusAI::JustReachedHome(), npc_ulduar_iron_construct::JustReachedHome(), boss_freya::JustSummoned(), boss_yoggsaron_brain::JustSummoned(), npc_eris_hevenfire::npc_eris_hevenfireAI::JustSummoned(), boss_skeram::JustSummoned(), boss_majordomo::JustSummoned(), boss_ragnaros::JustSummoned(), boss_vexallus::JustSummoned(), boss_kiljaeden::JustSummoned(), npc_kalecgos_kj::JustSummoned(), boss_jindo::JustSummoned(), npc_medivh_bm::JustSummoned(), boss_taldaram::JustSummoned(), boss_baltharus_the_warborn::boss_baltharus_the_warbornAI::JustSummoned(), boss_halion::boss_halionAI::JustSummoned(), boss_gal_darah::JustSummoned(), boss_prince_valanar_icc::boss_prince_valanarAI::JustSummoned(), boss_professor_putricide::boss_professor_putricideAI::JustSummoned(), boss_the_lich_king::boss_the_lich_kingAI::JustSummoned(), npc_icc_putricades_trap::npc_icc_putricades_trapAI::JustSummoned(), boss_malygos::JustSummoned(), boss_algalon_the_observer::JustSummoned(), boss_svala::boss_svalaAI::JustSummoned(), boss_shirrak_the_dead_watcher::JustSummoned(), boss_nexusprince_shaffar::JustSummoned(), boss_grandmaster_vorpil::JustSummoned(), boss_gurtogg_bloodboil::JustSummoned(), boss_veras_darkshadow::JustSummoned(), boss_reliquary_of_souls::boss_reliquary_of_soulsAI::JustSummoned(), boss_supremus::JustSummoned(), boss_hydross_the_unstable::JustSummoned(), boss_lady_vashj::JustSummoned(), npc_pallid_horror::JustSummoned(), npc_lady_sylvanas_windrunner::npc_lady_sylvanas_windrunnerAI::JustSummoned(), boss_archimonde::JustSummoned(), boss_broggok::JustSummoned(), npc_deaths_door_fell_cannon_target_bunny::npc_deaths_door_fell_cannon_target_bunnyAI::JustSummoned(), boss_ayamiss::JustSummoned(), Kill(), boss_azuregos::boss_azuregosAI::KilledUnit(), boss_anubrekhan::KilledUnit(), boss_doomwalker::KilledUnit(), npc_dark_iron_guzzler::KilledUnit(), boss_steelbreaker::KilledUnit(), emerald_dragonAI::KilledUnit(), boss_emeriss::boss_emerissAI::KilledUnit(), boss_felblood_kaelthas::LapseAction(), spell_mandokir_charge::LaunchHit(), Player::learnQuestRewardedSpells(), spell_taldaram_summon_flame_ball::Load(), npc_dkc1_gothik::npc_dkc1_gothikAI::MoveInLineOfSight(), npc_brewfest_keg_thrower::MoveInLineOfSight(), npc_brewfest_keg_reciver::MoveInLineOfSight(), npc_love_in_air_supply_sentry::MoveInLineOfSight(), npc_love_in_air_snivel::MoveInLineOfSight(), boss_temporus::MoveInLineOfSight(), npc_medivh_bm::MoveInLineOfSight(), npc_jenny::MoveInLineOfSight(), npc_guardian_pavilion::npc_guardian_pavilionAI::MoveInLineOfSight(), boss_doomwalker::MoveInLineOfSight(), npc_air_force_bots::npc_air_force_botsAI::MoveInLineOfSight(), npc_spirit_shade::npc_spirit_shadeAI::MovementInform(), npc_unworthy_initiate::npc_unworthy_initiateAI::MovementInform(), boss_grand_champion::boss_grand_championAI::MovementInform(), boss_garfrost::boss_garfrostAI::MovementInform(), boss_eck::MovementInform(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::MovementInform(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::MovementInform(), boss_malygos::MovementInform(), boss_razorscale::MovementInform(), npc_scarlet_ghoul::npc_scarlet_ghoulAI::MovementInform(), boss_headless_horseman::MovementInform(), boss_stormcaller_brundir::MovementInform(), npc_ashtongue_sorcerer::MovementInform(), gunship_npc_AI::MovementInform(), npc_gunship_boarding_addAI::MovementInform(), npc_gunship_mage::npc_gunship_mageAI::MovementInform(), boss_the_lich_king::boss_the_lich_kingAI::MovementInform(), boss_kagani_nightstrike::MovementInform(), npc_dark_iron_guzzler::MovementInform(), npc_hor_lich_king::MovementInform(), npc_ball_of_flame::npc_ball_of_flameAI::MovementInform(), npc_assembly_lightning::MovementInform(), boss_ymiron::boss_ymironAI::MovementInform(), boss_icehowl::boss_icehowlAI::MovementInform(), npc_attracted_reef_bull::npc_attracted_reef_bullAI::MovementInform(), npc_image_of_medivh::npc_image_of_medivhAI::NextStep(), BattlegroundAB::NodeOccupied(), npc_alexstrasza::npc_alexstrasza(), npc_algalon_worm_hole::npc_algalon_worm_hole(), npc_ball_of_flame::npc_ball_of_flameAI::npc_ball_of_flameAI(), npc_collapsing_star::npc_collapsing_star(), npc_concentrated_ball::npc_concentrated_ballAI::npc_concentrated_ballAI(), npc_frost_sphere::npc_frost_sphereAI::npc_frost_sphereAI(), npc_frost_tomb::npc_frost_tomb(), npc_hallows_end_soh::npc_hallows_end_soh(), npc_nexus_lord::npc_nexus_lord(), npc_scion_of_eternity::npc_scion_of_eternity(), npc_ulduar_iron_construct::npc_ulduar_iron_construct(), npc_ulduar_toasty_fire::npc_ulduar_toasty_fire(), npc_xt002_life_spark::npc_xt002_life_spark(), spell_shadowfang_keep_forsaken_skills_aura::OnApply(), spell_direbrew_disarm::OnApply(), spell_love_is_in_the_air_romantic_picnic::OnApply(), spell_halion_combustion_consumption_aura::OnApply(), spell_load_into_catapult_aura::OnApply(), spell_gen_damage_reduction_aura::OnApply(), spell_item_power_circle::OnApply(), spell_gruul_ground_slam_trigger::OnApply(), spell_hun_ascpect_of_the_viper::OnApply(), spell_hun_viper_attack_speed::OnApply(), spell_item_with_mount_speed::OnApply(), spell_blood_queen_vampiric_bite::OnCast(), npc_chesspiece::OnCharmed(), npc_toc5_player_vehicle::npc_toc5_player_vehicleAI::OnCharmed(), BattlefieldWG::OnCreatureCreate(), instance_halls_of_reflection::OnCreatureCreate(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnCreatureCreate(), spell_item_linken_boomerang::OnEffectLaunchTargetDisarm(), spell_item_linken_boomerang::OnEffectLaunchTargetStun(), npc_essence_of_twin::OnGossipHello(), npc_alchemist_adrianna::OnGossipHello(), go_manticron_cube::OnGossipHello(), go_seer_of_zebhalak::OnGossipHello(), go_jump_a_tron::OnGossipHello(), go_scourge_enclosure::OnGossipHello(), go_strange_pool::OnGossipHello(), go_simon_cluster::OnGossipHello(), go_tablet_of_the_seven::OnGossipHello(), go_arcane_prison::OnGossipHello(), go_jotunheim_cage::OnGossipHello(), npc_taxi::OnGossipSelect(), npc_locksmith::OnGossipSelect(), npc_engineering_tele_trinket::OnGossipSelect(), npc_sayge::OnGossipSelect(), npc_pet_gen_argent_pony_bridle::OnGossipSelect(), npcs_riverbreeze_and_silversky::OnGossipSelect(), npc_adventurous_dwarf::OnGossipSelect(), npc_wg_demolisher_engineer::OnGossipSelect(), npc_innkeeper::OnGossipSelect(), npc_wormhole::OnGossipSelect(), npc_cos_chromie_start::OnGossipSelect(), icecrown_citadel_teleport::OnGossipSelect(), go_amberpine_outhouse::OnGossipSelect(), go_ancient_skull_pile::OnGossipSelect(), go_fel_crystalforge::OnGossipSelect(), go_bashir_crystalforge::OnGossipSelect(), go_apexis_relic::OnGossipSelect(), Player::OnGossipSelect(), spell_summon_all_players_dummy::OnHit(), spell_apothecary_perfume_spill::OnPeriodic(), spell_apothecary_cologne_spill::OnPeriodic(), spell_muru_summon_blood_elves_periodic_aura::OnPeriodic(), spell_claw_rage_aura::OnPeriodic(), spell_love_is_in_the_air_romantic_picnic::OnPeriodic(), spell_anubisath_mortal_strike::OnPeriodic(), spell_the_lich_king_soul_reaper_aura::OnPeriodic(), spell_yogg_saron_brain_link_aura::OnPeriodic(), spell_yogg_saron_empowered_aura::OnPeriodic(), spell_illidan_tear_of_azzinoth_summon_channel_aura::OnPeriodic(), spell_illidan_demon_transform1_aura::OnPeriodic(), spell_illidan_cage_trap_stun_aura::OnPeriodic(), spell_npc22275_crystal_prison_aura::OnPeriodic(), spell_item_eye_of_grillok_aura::OnPeriodic(), spell_kalecgos_curse_of_boundless_agony_aura::OnPeriodic(), spell_muru_darkness_aura::OnPeriodic(), spell_mark_of_kazrogal_aura::OnPeriodic(), spell_the_lich_king_vile_spirits_aura::OnPeriodic(), spell_web_wrap_damage::OnPeriodic(), spell_assembly_rune_of_summoning_aura::OnPeriodic(), spell_tar_blaze_aura::OnPeriodic(), spell_thorim_lightning_pillar_P2_aura::OnPeriodic(), spell_illidan_demon_transform2_aura::OnPeriodic(), spell_mark_of_kazzak_aura::OnPeriodic(), spell_karathress_power_of_tidalvess::OnPeriodic(), spell_karathress_power_of_caribdis::OnPeriodic(), spell_leotheras_demon_link::OnPeriodic(), spell_lurker_below_spout::OnPeriodic(), spell_gen_periodic_knock_away::OnPeriodic(), spell_gen_turkey_marker::OnPeriodic(), instance_eye_of_eternity::OnPlayerEnter(), instance_culling_of_stratholme::instance_culling_of_stratholme_InstanceMapScript::OnPlayerEnter(), instance_hyjal::instance_mount_hyjal_InstanceMapScript::OnPlayerInWaterStateUpdate(), BattlefieldWG::OnPlayerJoinWar(), lfg::LFGPlayerScript::OnPlayerMapChanged(), MidsummerPlayerScript::OnPlayerUpdateZone(), spell_gen_proc_on_victim::OnProc(), spell_pal_judgements_of_the_just::OnProc(), npc_steward_of_time::OnQuestAccept(), npc_mikhail::OnQuestAccept(), npc_thrall_bfu::OnQuestReward(), spell_kalecgos_spectral_realm_aura::OnRemove(), spell_azgalor_doom_aura::OnRemove(), spell_boss_salramm_steal_flesh_aura::OnRemove(), spell_azjol_nerub_web_wrap_aura::OnRemove(), spell_putricide_mutation_init_aura::OnRemove(), spell_the_lich_king_shadow_trap_visual_aura::OnRemove(), spell_the_lich_king_harvest_soul_aura::OnRemove(), spell_icc_web_wrap_aura::OnRemove(), spell_ioc_repair_turret_aura::OnRemove(), spell_dragonblight_devour_ghoul_periodic::OnRemove(), spell_kaelthas_flame_strike::OnRemove(), spell_item_goblin_weather_machine_aura::OnRemove(), spell_q12937_relief_for_the_fallen::OnRemove(), spell_claw_swipe_check::OnRemove(), spell_mage_arcane_missiles::OnRemove(), spell_warl_curse_of_doom::OnRemove(), boss_flame_leviathan_overload_device::OnSpellClick(), boss_yoggsaron_descend_portal::OnSpellClick(), spell_item_shadowmourne_soul_fragment::OnStackChange(), at_hor_battered_hilt_throw::OnTrigger(), at_frozen_throne_teleport::OnTrigger(), AreaTrigger_at_legion_teleporter::OnTrigger(), AreaTrigger_at_stormwright_shelf::OnTrigger(), npc_wintergarde_gryphon::PassengerBoarded(), npc_four_car_garage::npc_four_car_garageAI::PassengerBoarded(), npc_hover_disk::PassengerBoarded(), boss_kologarn::PassengerBoarded(), npc_frosthound::PassengerBoarded(), spell_quest_test_flight_charging::PerformKick(), spell_send_mug_control_aura::PeriodicTick(), spell_barreled_control_aura::PeriodicTick(), spell_dreamwalker_summon_suppresser_aura::PeriodicTick(), spell_summon_ice_spear_delayer::PeriodicTick(), spell_summoning_rhyme_aura::PeriodicTick(), spell_pal_beacon_of_light::PeriodicTick(), spell_halion_twilight_phasing::Phase(), BattlegroundAV::PopulateNode(), spell_azjol_nerub_carrion_beetles::PrepareAuraScript(), spell_item_oracle_ablutions::PrepareSpellScript(), spell_q11653_youre_not_so_big_now::PrepareSpellScript(), spell_q13369_fate_up_against_your_will::PrepareSpellScript(), SmartScript::ProcessAction(), ProcessCastaction(), Player::ProcessDelayedOperations(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::ProcessEvent(), ProcessTerrainStatusUpdate(), ProcessUnlearnAction(), BattlefieldWG::PromotePlayer(), npc_lake_frog::npc_lake_frogAI::ReceiveEmote(), spell_gen_defend::RefreshVisualShields(), Vehicle::RemovePassenger(), spell_igb_below_zero::RemovePassengers(), boss_keristrasza::RemovePrison(), Player::ReportedAfkBy(), npc_demonic_vapor::Reset(), npc_demonic_vapor_trail::Reset(), npc_batrider::Reset(), npc_dark_iron_guzzler::Reset(), boss_headless_horseman_pumpkin::Reset(), npc_taretha::npc_tarethaAI::Reset(), npc_medivh_bm::Reset(), boss_halion::boss_halionAI::Reset(), npc_swarm_scarab::npc_swarm_scarabAI::Reset(), npc_nerubian_burrower::npc_nerubian_burrowerAI::Reset(), boss_tharon_ja::boss_tharon_jaAI::Reset(), boss_drakkari_colossus::boss_drakkari_colossusAI::Reset(), boss_drakkari_elemental::boss_drakkari_elementalAI::Reset(), npc_dark_nucleus::npc_dark_nucleusAI::Reset(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::Reset(), boss_sindragosa::boss_sindragosaAI::Reset(), npc_raging_spirit::npc_raging_spiritAI::Reset(), boss_noth::boss_nothAI::Reset(), boss_anomalus::Reset(), npc_oculus_unstable_sphere::npc_oculus_unstable_sphereAI::Reset(), boss_urom::boss_uromAI::Reset(), boss_varos::boss_varosAI::Reset(), boss_algalon_the_observer::Reset(), boss_flame_leviathan::Reset(), npc_thorims_hammer::Reset(), boss_freya_lifebinder::Reset(), boss_freya_healthy_spore::Reset(), boss_freya_nature_bomb::Reset(), boss_thorim_lightning_orb::Reset(), boss_thorim_sif_blizzard::Reset(), boss_thorim_arena_npcs::Reset(), boss_yoggsaron_cloud::Reset(), boss_yoggsaron_immortal_guardian::Reset(), boss_yoggsaron_voice::Reset(), boss_palehoof::boss_palehoofAI::Reset(), npc_frozen_orb::npc_frozen_orbAI::Reset(), npc_frozen_orb_stalker::npc_frozen_orb_stalkerAI::Reset(), npc_injured_7th_legion_soldier::npc_injured_7th_legion_soldierAI::Reset(), npc_brunnhildar_prisoner::npc_brunnhildar_prisonerAI::Reset(), npc_ashtongue_channeler::Reset(), npc_warden_mellichar::npc_warden_mellicharAI::Reset(), boss_wrath_scryer_soccothrates::Reset(), BfGraveyard::Resurrect(), Resurrect(), Player::ResurrectPlayer(), Player::RewardQuest(), boss_nightbane::ScheduleFly(), boss_the_lurker_below::SchedulerPhaseOne(), boss_drakkari_colossus::boss_drakkari_colossusAI::ScheduleTasks(), Map::ScriptsProcess(), spell_item_mad_alchemists_potion::SecondaryEffect(), spell_item_crazy_alchemists_potion::SecondaryEffect(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::SelectNewTarget(), npc_anubarak_spike::npc_anubarak_spikeAI::SelectNewTarget(), boss_thorim_arena_npcs::SelectT(), npc_sayge::SendAction(), go_skull_pile::SendActionMenu(), npc_xt002_heart::SendEnergyToCorner(), Player::SendInitialPacketsAfterAddToMap(), boss_sartharion::SendLavaWaves(), Player::SendQuestUpdate(), instance_halls_of_reflection::SetBossState(), npc_ulduar_harpoonfirestate::SetData(), instance_halls_of_reflection::SetData(), npc_eastvale_peasent::SetData(), SetModelVisible(), npc_simon_bunny::npc_simon_bunnyAI::SetUpPreGame(), boss_gloomrel::sGossipSelect(), npc_stable_master::npc_stable_masterAI::sGossipSelect(), npc_brewfest_keg_reciver::sGossipSelect(), npc_alexstraza_the_lifebinder::sGossipSelect(), npc_cairne_bloodhoof::npc_cairne_bloodhoofAI::sGossipSelect(), npc_chesspiece::sGossipSelect(), npc_zafod_boombox::npc_zafod_boomboxAI::sGossipSelect(), npc_crusade_recruit::npc_crusade_recruitAI::sGossipSelect(), npc_cultist_engineer::sGossipSelect(), boss_hodir::SmallIcicles(), boss_malchezaar::SpawnInfernal(), boss_pyroguard_emberseer::SpellHit(), boss_eadric::boss_eadricAI::SpellHit(), npc_black_knight_ghoul::npc_black_knight_ghoulAI::SpellHit(), npc_cult_fanatic::npc_cult_fanaticAI::SpellHit(), npc_cult_adherent::npc_cult_adherentAI::SpellHit(), boss_valithria_dreamwalker::boss_valithria_dreamwalkerAI::SpellHit(), boss_urom::boss_uromAI::SpellHit(), npc_ulduar_iron_construct::SpellHit(), npc_ulduar_flames_spread::SpellHit(), npc_franklin::npc_franklinAI::SpellHit(), npc_necropolis_relay::SpellHit(), npc_balance_of_light_and_shadow::npc_balance_of_light_and_shadowAI::SpellHit(), npc_dark_iron_guzzler::SpellHit(), boss_headless_horseman::SpellHit(), npc_pool_of_tar::SpellHit(), boss_thorim_pillar::SpellHit(), npc_necropolis_proxy::SpellHit(), npc_aged_dying_ancient_kodo::SpellHit(), boss_jaraxxus::boss_jaraxxusAI::SpellHit(), npc_living_constellation::SpellHit(), boss_ignis::SpellHit(), npc_brunnhildar_prisoner::npc_brunnhildar_prisonerAI::SpellHit(), npc_necrotic_shard::SpellHit(), npc_soh_fire_trigger::SpellHit(), boss_headless_horseman_head::SpellHit(), boss_magus_telestra::SpellHit(), boss_thorim::SpellHit(), npc_iron_watcher::npc_iron_watcherAI::SpellHit(), boss_black_knight::boss_black_knightAI::SpellHitTarget(), boss_felmyst::SpellHitTarget(), boss_rotface::boss_rotfaceAI::SpellHitTarget(), npc_icc_valkyr_herald::npc_icc_valkyr_heraldAI::SpellHitTarget(), boss_hodir::SpellHitTarget(), npc_ulduar_rocket_strike_trigger::SpellHitTarget(), npc_q24545_lich_king::npc_q24545_lich_kingAI::SpellHitTarget(), npc_chesspiece::SpellHitTarget(), boss_epoch::boss_epochAI::SpellHitTarget(), boss_sapphiron::boss_sapphironAI::SpellHitTarget(), npc_overlord_drakuru_betrayal::SpellHitTarget(), boss_shirrak_the_dead_watcher::SpellHitTarget(), npc_pet_gen_soul_trader_beacon::SpellHitTarget(), Battleground::SpiritOfCompetitionEvent(), npc_rocknot::sQuestReward(), boss_heigan::StartFightPhase(), npc_finklestein::npc_finklesteinAI::StartNextTask(), spell_dk_ghoul_explode::Suicide(), boss_anzu::SummonBroods(), boss_cthun::SummonedCreatureDies(), boss_anubrekhan::SummonedCreatureDies(), boss_vexallus::SummonedCreatureDies(), boss_sartharion::SummonLavaWaves(), boss_paletress::boss_paletressAI::SummonMemory(), go_wind_stone::go_wind_stoneAI::SummonNPC(), Trainer::Trainer::TeachSpell(), Battlefield::TeamCastSpell(), spell_igb_check_for_players::TeleportPlayer(), BattlegroundSA::TeleportToEntrancePosition(), spell_midsummer_fling_torch::ThrowNextTorch(), TriggerBurningPitch(), npc_orb_carrier::npc_orb_carrierAI::TriggerCutter(), spell_koralon_meteor_fists_aura::TriggerFists(), spell_flame_warder_meteor_fists_aura::TriggerFists(), spell_gen_holiday_buff_food::TriggerFoodBuff(), spell_mage_ice_block::TriggerHypothermia(), spell_item_brewfest_hops::Update(), spell_karazhan_brittle_bones_aura::Update(), spell_black_temple_curse_of_the_bleakheart_aura::Update(), spell_illidari_council_deadly_strike_aura::Update(), spell_mother_shahraz_random_periodic_aura::Update(), spell_mother_shahraz_beam_periodic_aura::Update(), spell_mother_shahraz_saber_lash_aura::Update(), spell_black_temple_charge_rage_aura::Update(), Pet::Update(), GameObject::Update(), TotemAI::UpdateAI(), boss_pyroguard_emberseer::UpdateAI(), npc_vaelastrasz_the_red::UpdateAI(), boss_nefarian::UpdateAI(), boss_vaelastrasz::UpdateAI(), boss_ragnaros::UpdateAI(), boss_mr_smite::boss_mr_smiteAI::UpdateAI(), npc_image_of_medivh::npc_image_of_medivhAI::UpdateAI(), npc_scarlet_ghoul::npc_scarlet_ghoulAI::UpdateAI(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::UpdateAI(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::UpdateAI(), npc_scholomance_occultist::npc_scholomance_occultistAI::UpdateAI(), npc_madrigosa::UpdateAI(), npc_demonic_vapor::UpdateAI(), npc_demonic_vapor_trail::UpdateAI(), npc_kalecgos_kj::UpdateAI(), npc_balance_of_light_and_shadow::npc_balance_of_light_and_shadowAI::UpdateAI(), npc_partygoer::UpdateAI(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::UpdateAI(), npc_thrall_bfu::npc_thrall_bfuAI::UpdateAI(), boss_wushoolay::boss_wushoolayAI::UpdateAI(), npc_dark_iron_guzzler::UpdateAI(), npc_brewfest_super_brew_trigger::UpdateAI(), npc_hallows_end_train_fire::UpdateAI(), boss_headless_horseman::UpdateAI(), boss_headless_horseman_head::UpdateAI(), boss_headless_horseman_pumpkin::UpdateAI(), npc_love_in_air_snivel_real::UpdateAI(), boss_epoch::boss_epochAI::UpdateAI(), boss_infinite_corruptor::boss_infinite_corruptorAI::UpdateAI(), boss_mal_ganis::boss_mal_ganisAI::UpdateAI(), boss_meathook::boss_meathookAI::UpdateAI(), boss_salramm::boss_salrammAI::UpdateAI(), npc_arthas::npc_arthasAI::UpdateAI(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UpdateAI(), npc_medivh_bm::UpdateAI(), npc_time_rift::UpdateAI(), boss_onyxia::UpdateAI(), boss_skeram::UpdateAI(), npc_murkdeep::npc_murkdeepAI::UpdateAI(), npc_tharnarian::npc_tharnarianAI::UpdateAI(), boss_baltharus_the_warborn::boss_baltharus_the_warbornAI::UpdateAI(), npc_baltharus_the_warborn_clone::npc_baltharus_the_warborn_cloneAI::UpdateAI(), boss_general_zarithrian::boss_general_zarithrianAI::UpdateAI(), boss_halion::boss_halionAI::UpdateAI(), boss_twilight_halion::boss_twilight_halionAI::UpdateAI(), npc_halion_controller::npc_halion_controllerAI::UpdateAI(), boss_saviana_ragefire::boss_saviana_ragefireAI::UpdateAI(), boss_eadric::boss_eadricAI::UpdateAI(), boss_paletress::boss_paletressAI::UpdateAI(), npc_memory::npc_memoryAI::UpdateAI(), npc_argent_soldier::npc_argent_soldierAI::UpdateAI(), boss_black_knight::boss_black_knightAI::UpdateAI(), npc_black_knight_ghoul::npc_black_knight_ghoulAI::UpdateAI(), npc_toc5_grand_champion_minion::npc_toc5_grand_champion_minionAI::UpdateAI(), boss_grand_champion::boss_grand_championAI::UpdateAI(), boss_anubarak_trial::boss_anubarak_trialAI::UpdateAI(), npc_swarm_scarab::npc_swarm_scarabAI::UpdateAI(), npc_frost_sphere::npc_frost_sphereAI::UpdateAI(), npc_nerubian_burrower::npc_nerubian_burrowerAI::UpdateAI(), npc_anubarak_spike::npc_anubarak_spikeAI::UpdateAI(), npc_toc_druid::npc_toc_druidAI::UpdateAI(), npc_toc_shaman::npc_toc_shamanAI::UpdateAI(), npc_toc_paladin::npc_toc_paladinAI::UpdateAI(), npc_toc_priest::npc_toc_priestAI::UpdateAI(), npc_toc_shadow_priest::npc_toc_shadow_priestAI::UpdateAI(), npc_toc_warlock::npc_toc_warlockAI::UpdateAI(), npc_toc_mage::npc_toc_mageAI::UpdateAI(), npc_toc_hunter::npc_toc_hunterAI::UpdateAI(), npc_toc_boomkin::npc_toc_boomkinAI::UpdateAI(), npc_toc_warrior::npc_toc_warriorAI::UpdateAI(), npc_toc_dk::npc_toc_dkAI::UpdateAI(), npc_toc_rogue::npc_toc_rogueAI::UpdateAI(), npc_toc_enh_shaman::npc_toc_enh_shamanAI::UpdateAI(), npc_toc_retro_paladin::npc_toc_retro_paladinAI::UpdateAI(), npc_toc_pet_warlock::npc_toc_pet_warlockAI::UpdateAI(), npc_toc_pet_hunter::npc_toc_pet_hunterAI::UpdateAI(), boss_jaraxxus::boss_jaraxxusAI::UpdateAI(), npc_fel_infernal::npc_fel_infernalAI::UpdateAI(), npc_mistress_of_pain::npc_mistress_of_painAI::UpdateAI(), npc_snobold_vassal::npc_snobold_vassalAI::UpdateAI(), boss_gormok::boss_gormokAI::UpdateAI(), boss_jormungarAI::UpdateAI(), boss_icehowl::boss_icehowlAI::UpdateAI(), boss_twin_valkyrAI::UpdateAI(), boss_tharon_ja::boss_tharon_jaAI::UpdateAI(), boss_trollgore::boss_trollgoreAI::UpdateAI(), npc_fos_corrupted_soul_fragment::UpdateAI(), npc_hor_lich_king::UpdateAI(), npc_hor_leader_second::npc_hor_leader_secondAI::UpdateAI(), boss_garfrost::boss_garfrostAI::UpdateAI(), boss_ick::boss_ickAI::UpdateAI(), boss_krick::boss_krickAI::UpdateAI(), boss_tyrannus::boss_tyrannusAI::UpdateAI(), npc_pos_leader::npc_pos_leaderAI::UpdateAI(), npc_pos_deathwhisper_necrolyte::npc_pos_deathwhisper_necrolyteAI::UpdateAI(), npc_pos_icicle_trigger::npc_pos_icicle_triggerAI::UpdateAI(), npc_pos_collapsing_icicle::npc_pos_collapsing_icicleAI::UpdateAI(), npc_pos_leader_second::npc_pos_leader_secondAI::UpdateAI(), boss_drakkari_colossus::boss_drakkari_colossusAI::UpdateAI(), boss_drakkari_elemental::boss_drakkari_elementalAI::UpdateAI(), npc_living_mojo::npc_living_mojoAI::UpdateAI(), boss_moorabi::boss_moorabiAI::UpdateAI(), boss_prince_keleseth_icc::boss_prince_kelesethAI::UpdateAI(), boss_prince_taldaram_icc::boss_prince_taldaramAI::UpdateAI(), boss_prince_valanar_icc::boss_prince_valanarAI::UpdateAI(), npc_dark_nucleus::npc_dark_nucleusAI::UpdateAI(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::UpdateAI(), boss_deathbringer_saurfang::boss_deathbringer_saurfangAI::UpdateAI(), boss_festergut::boss_festergutAI::UpdateAI(), npc_stinky_icc::npc_stinky_iccAI::UpdateAI(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::UpdateAI(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::UpdateAI(), npc_gunship_boarding_leader::npc_gunship_boarding_leaderAI::UpdateAI(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::UpdateAI(), npc_cult_fanatic::npc_cult_fanaticAI::UpdateAI(), npc_cult_adherent::npc_cult_adherentAI::UpdateAI(), npc_darnavan::npc_darnavanAI::UpdateAI(), boss_lord_marrowgar::UpdateAI(), npc_coldflame::npc_coldflameAI::UpdateAI(), boss_professor_putricide::boss_professor_putricideAI::UpdateAI(), boss_rotface::boss_rotfaceAI::UpdateAI(), npc_little_ooze::npc_little_oozeAI::UpdateAI(), npc_big_ooze::npc_big_oozeAI::UpdateAI(), npc_precious_icc::npc_precious_iccAI::UpdateAI(), boss_sindragosa::boss_sindragosaAI::UpdateAI(), npc_spinestalker::npc_spinestalkerAI::UpdateAI(), npc_rimefang::npc_rimefangAI::UpdateAI(), npc_sindragosa_trash::npc_sindragosa_trashAI::UpdateAI(), boss_the_lich_king::boss_the_lich_kingAI::UpdateAI(), npc_tirion_fordring_tft::npc_tirion_fordringAI::UpdateAI(), npc_shambling_horror_icc::npc_shambling_horror_iccAI::UpdateAI(), npc_raging_spirit::npc_raging_spiritAI::UpdateAI(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::UpdateAI(), npc_terenas_menethil::npc_terenas_menethilAI::UpdateAI(), npc_spirit_warden::npc_spirit_wardenAI::UpdateAI(), npc_lk_spirit_bomb::npc_lk_spirit_bombAI::UpdateAI(), boss_valithria_dreamwalker::boss_valithria_dreamwalkerAI::UpdateAI(), npc_the_lich_king_controller::npc_the_lich_king_controllerAI::UpdateAI(), npc_risen_archmage::npc_risen_archmageAI::UpdateAI(), npc_valithria_cloud::npc_valithria_cloudAI::UpdateAI(), npc_blazing_skeleton::npc_blazing_skeletonAI::UpdateAI(), npc_gluttonous_abomination::npc_gluttonous_abominationAI::UpdateAI(), boss_sister_svalna::boss_sister_svalnaAI::UpdateAI(), npc_frostwing_vrykul::npc_frostwing_vrykulAI::UpdateAI(), npc_icc_skybreaker_hierophant::npc_icc_skybreaker_hierophantAI::UpdateAI(), npc_icc_skybreaker_marksman::npc_icc_skybreaker_marksmanAI::UpdateAI(), npc_icc_skybreaker_vicar::npc_icc_skybreaker_vicarAI::UpdateAI(), npc_icc_skybreaker_luminary::npc_icc_skybreaker_luminaryAI::UpdateAI(), npc_icc_valkyr_herald::npc_icc_valkyr_heraldAI::UpdateAI(), npc_icc_severed_essence::npc_icc_severed_essenceAI::UpdateAI(), npc_icc_vengeful_fleshreaper::npc_icc_vengeful_fleshreaperAI::UpdateAI(), npc_icc_nerubar_broodkeeper::npc_icc_nerubar_broodkeeperAI::UpdateAI(), boss_isle_of_conquest::boss_isle_of_conquestAI::UpdateAI(), boss_four_horsemen::boss_four_horsemenAI::UpdateAI(), boss_gluth::boss_gluthAI::UpdateAI(), boss_gothik::boss_gothikAI::UpdateAI(), npc_boss_gothik_minion::npc_boss_gothik_minionAI::UpdateAI(), boss_grobbulus::boss_grobbulusAI::UpdateAI(), boss_grobbulus_poison_cloud::boss_grobbulus_poison_cloudAI::UpdateAI(), boss_kelthuzad::boss_kelthuzadAI::UpdateAI(), boss_kelthuzad_minion::boss_kelthuzad_minionAI::UpdateAI(), boss_loatheb::boss_loathebAI::UpdateAI(), boss_maexxna::boss_maexxnaAI::UpdateAI(), boss_noth::boss_nothAI::UpdateAI(), boss_patchwerk::boss_patchwerkAI::UpdateAI(), boss_sapphiron::boss_sapphironAI::UpdateAI(), boss_thaddius::boss_thaddiusAI::UpdateAI(), boss_thaddius_summon::boss_thaddius_summonAI::UpdateAI(), boss_malygos::UpdateAI(), npc_power_spark::UpdateAI(), boss_anomalus::UpdateAI(), boss_keristrasza::UpdateAI(), boss_magus_telestra::UpdateAI(), boss_ormorok::UpdateAI(), npc_crystal_spike::UpdateAI(), boss_drakos::boss_drakosAI::UpdateAI(), npc_oculus_unstable_sphere::npc_oculus_unstable_sphereAI::UpdateAI(), boss_eregos::boss_eregosAI::UpdateAI(), boss_urom::boss_uromAI::UpdateAI(), boss_varos::boss_varosAI::UpdateAI(), npc_stormforged_lieutenant::UpdateAI(), boss_krystallus::boss_krystallusAI::UpdateAI(), boss_maiden_of_grief::boss_maiden_of_griefAI::UpdateAI(), boss_sjonnir_iron_sludge::boss_sjonnir_iron_sludgeAI::UpdateAI(), boss_algalon_the_observer::UpdateAI(), npc_algalon_worm_hole::UpdateAI(), boss_steelbreaker::UpdateAI(), boss_runemaster_molgeim::UpdateAI(), boss_stormcaller_brundir::UpdateAI(), npc_auriaya_sanctum_sentry::UpdateAI(), boss_flame_leviathan::UpdateAI(), npc_freya_ward::UpdateAI(), boss_freya::UpdateAI(), boss_freya_elder_stonebark::UpdateAI(), boss_freya_elder_brightleaf::UpdateAI(), boss_freya_elder_ironbranch::UpdateAI(), boss_freya_lifebinder::UpdateAI(), boss_freya_summons::UpdateAI(), boss_freya_nature_bomb::UpdateAI(), boss_vezax::UpdateAI(), npc_ulduar_saronite_animus::UpdateAI(), boss_hodir::UpdateAI(), npc_ulduar_icicle::UpdateAI(), npc_ulduar_hodir_priest::UpdateAI(), npc_ulduar_hodir_druid::UpdateAI(), npc_ulduar_hodir_shaman::UpdateAI(), npc_ulduar_hodir_mage::UpdateAI(), npc_ulduar_iron_construct::UpdateAI(), boss_ignis::UpdateAI(), boss_kologarn::UpdateAI(), boss_kologarn_eyebeam::UpdateAI(), boss_mimiron::UpdateAI(), npc_ulduar_leviathan_mkii::UpdateAI(), npc_ulduar_vx001::UpdateAI(), npc_ulduar_aerial_command_unit::UpdateAI(), npc_ulduar_proximity_mine::UpdateAI(), npc_ulduar_emergency_fire_bot::UpdateAI(), boss_razorscale::UpdateAI(), npc_ulduar_dark_rune_guardian::UpdateAI(), npc_ulduar_dark_rune_watcher::UpdateAI(), npc_ulduar_dark_rune_sentinel::UpdateAI(), boss_thorim::UpdateAI(), boss_thorim_sif::UpdateAI(), boss_thorim_trap::UpdateAI(), boss_thorim_start_npcs::UpdateAI(), boss_thorim_gauntlet_npcs::UpdateAI(), boss_thorim_runic_colossus::UpdateAI(), boss_thorim_ancient_rune_giant::UpdateAI(), boss_thorim_arena_npcs::UpdateAI(), boss_xt002::UpdateAI(), npc_xt002_pummeller::UpdateAI(), boss_yoggsaron_sara::UpdateAI(), boss_yoggsaron_guardian_of_ys::UpdateAI(), boss_yoggsaron::UpdateAI(), boss_yoggsaron_death_orb::UpdateAI(), boss_yoggsaron_immortal_guardian::UpdateAI(), npc_ulduar_storm_tempered_keeper::UpdateAI(), npc_ulduar_arachnopod_destroyer::UpdateAI(), boss_ingvar_the_plunderer::UpdateAI(), npc_vrykul_skeleton::UpdateAI(), boss_skarvald_the_constructor::UpdateAI(), boss_dalronn_the_controller::UpdateAI(), boss_palehoof::boss_palehoofAI::UpdateAI(), npc_massive_jormungar::npc_massive_jormungarAI::UpdateAI(), npc_ferocious_rhino::npc_ferocious_rhinoAI::UpdateAI(), npc_ravenous_furbolg::npc_ravenous_furbolgAI::UpdateAI(), npc_frenzied_worgen::npc_frenzied_worgenAI::UpdateAI(), boss_svala::boss_svalaAI::UpdateAI(), boss_ymiron::boss_ymironAI::UpdateAI(), boss_emalon::boss_emalonAI::UpdateAI(), boss_koralon::boss_koralonAI::UpdateAI(), boss_toravon::boss_toravonAI::UpdateAI(), npc_conversing_with_the_depths_trigger::npc_conversing_with_the_depths_triggerAI::UpdateAI(), npc_hourglass_of_eternity::npc_hourglass_of_eternityAI::UpdateAI(), npc_q24545_lich_king::npc_q24545_lich_kingAI::UpdateAI(), npc_q24545_vegard::npc_q24545_vegardAI::UpdateAI(), npc_wounded_skirmisher::UpdateAI(), npc_lord_arete::npc_lord_areteAI::UpdateAI(), npc_jungle_punch_target::npc_jungle_punch_targetAI::UpdateAI(), npc_iron_watcher::npc_iron_watcherAI::UpdateAI(), npc_freed_protodrake::npc_freed_protodrakeAI::UpdateAI(), npc_wg_queue::npc_wg_queueAI::UpdateAI(), boss_gathios_the_shatterer::UpdateAI(), boss_lady_malande::UpdateAI(), boss_the_lurker_below::UpdateAI(), npc_millhouse_manastorm::npc_millhouse_manastormAI::UpdateAI(), npc_warden_mellichar::npc_warden_mellicharAI::UpdateAI(), npc_invis_infernal_caster::npc_invis_infernal_casterAI::UpdateAI(), npc_dragonmaw_peon::npc_dragonmaw_peonAI::UpdateAI(), npc_pet_gen_soul_trader_beacon::UpdateAI(), npc_pet_gen_argent_pony_bridle::UpdateAI(), npc_pet_gen_target_following_bomb::UpdateAI(), npc_pet_mage_mirror_image::UpdateAI(), npc_pet_shaman_fire_elemental::UpdateAI(), trigger_periodic::trigger_periodicAI::UpdateAI(), npc_artorius::npc_artoriusAI::UpdateAI(), npc_simone::npc_simoneAI::UpdateAI(), npc_nelson::npc_nelsonAI::UpdateAI(), npc_franklin::npc_franklinAI::UpdateAI(), npc_orb_carrier::npc_orb_carrierAI::UpdateAI(), npc_gunship_rocketeer::npc_gunship_rocketeerAI::UpdateAI(), npc_suppresser::npc_suppresserAI::UpdateAI(), boss_maexxna_webwrap::boss_maexxna_webwrapAI::UpdateAI(), npc_living_poison::UpdateAI(), npc_xt002_life_spark::UpdateAI(), boss_yoggsaron_crusher_tentacle::UpdateAI(), boss_yoggsaron_corruptor_tentacle::UpdateAI(), npc_q24545_vegard_dummy::npc_q24545_vegard_dummyAI::UpdateAI(), Player::UpdateAreaDependentAuras(), Player::UpdateCharmedAI(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UpdateEscortAI(), brann_bronzebeard::brann_bronzebeardAI::UpdateEscortAI(), boss_yoggsaron_cloud::UpdateEscortAI(), npc_tirions_gambit_tirion::npc_tirions_gambit_tirionAI::UpdateEscortAI(), npc_isla_starmane::npc_isla_starmaneAI::UpdateEscortAI(), boss_stormcaller_brundir::UpdatePhase(), Player::UpdateZoneDependentAuras(), GameObject::Use(), Player::VehicleSpellInitialize(), instance_eye_of_eternity::VortexHandling(), npc_arthas::npc_arthasAI::WaypointReached(), and npc_engineer_helice::npc_engineer_heliceAI::WaypointReached().

◆ CastSpell() [4/7]

SpellCastResult Unit::CastSpell ( Unit victim,
SpellInfo const *  spellInfo,
bool  triggered,
Item castItem = nullptr,
AuraEffect const *  triggeredByAura = nullptr,
ObjectGuid  originalCaster = ObjectGuid::Empty 
)
1421{
1422 return CastSpell(victim, spellInfo, triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE, castItem, triggeredByAura, originalCaster);
1423}

References CastSpell(), TRIGGERED_FULL_MASK, and TRIGGERED_NONE.

◆ CastSpell() [5/7]

SpellCastResult Unit::CastSpell ( Unit victim,
SpellInfo const *  spellInfo,
TriggerCastFlags  triggerFlags = TRIGGERED_NONE,
Item castItem = nullptr,
AuraEffect const *  triggeredByAura = nullptr,
ObjectGuid  originalCaster = ObjectGuid::Empty 
)
1426{
1427 SpellCastTargets targets;
1428 targets.SetUnitTarget(victim);
1429 return CastSpell(targets, spellInfo, nullptr, triggerFlags, castItem, triggeredByAura, originalCaster);
1430}

References CastSpell(), and SpellCastTargets::SetUnitTarget().

◆ CastSpell() [6/7]

SpellCastResult Unit::CastSpell ( Unit victim,
uint32  spellId,
bool  triggered,
Item castItem = nullptr,
AuraEffect const *  triggeredByAura = nullptr,
ObjectGuid  originalCaster = ObjectGuid::Empty 
)
1404{
1405 return CastSpell(victim, spellId, triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE, castItem, triggeredByAura, originalCaster);
1406}

References CastSpell(), TRIGGERED_FULL_MASK, and TRIGGERED_NONE.

◆ CastSpell() [7/7]

SpellCastResult Unit::CastSpell ( Unit victim,
uint32  spellId,
TriggerCastFlags  triggerFlags = TRIGGERED_NONE,
Item castItem = nullptr,
AuraEffect const *  triggeredByAura = nullptr,
ObjectGuid  originalCaster = ObjectGuid::Empty 
)
1409{
1410 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
1411 if (!spellInfo)
1412 {
1413 LOG_ERROR("entities.unit", "CastSpell: unknown spell {} by caster {}", spellId, GetGUID().ToString());
1415 }
1416
1417 return CastSpell(victim, spellInfo, triggerFlags, castItem, triggeredByAura, originalCaster);
1418}

References CastSpell(), Object::GetGUID(), LOG_ERROR, SPELL_FAILED_SPELL_UNAVAILABLE, sSpellMgr, and Position::ToString().

◆ CastStop()

◆ ChangeSeat()

void Unit::ChangeSeat ( int8  seatId,
bool  next = true 
)
15700{
15701 if (!m_vehicle)
15702 return;
15703
15704 if (seatId < 0)
15705 {
15706 seatId = m_vehicle->GetNextEmptySeat(GetTransSeat(), next);
15707 if (seatId < 0)
15708 return;
15709 }
15710 else if (seatId == GetTransSeat() || !m_vehicle->HasEmptySeat(seatId))
15711 return;
15712
15714 if (!m_vehicle->AddPassenger(this, seatId))
15715 ABORT();
15716}
int8 GetNextEmptySeat(int8 seatId, bool next) const
Definition Vehicle.cpp:247
bool HasEmptySeat(int8 seatId) const
Definition Vehicle.cpp:221

References ABORT, Vehicle::AddPassenger(), Vehicle::GetNextEmptySeat(), WorldObject::GetTransSeat(), Vehicle::HasEmptySeat(), m_vehicle, and Vehicle::RemovePassenger().

Referenced by _EnterVehicle(), and WorldSession::HandleChangeSeatsOnControlledVehicle().

◆ CheckAttackFitToAuraRequirement()

virtual bool Unit::CheckAttackFitToAuraRequirement ( WeaponAttackType  ,
AuraEffect const *   
) const
inlinevirtual

Reimplemented in Player.

1087{ return true; }

Referenced by UpdateDamageDoneMods(), UpdateDamagePctDoneMods(), and Player::UpdateWeaponDependentCritAuras().

◆ CleanupBeforeRemoveFromMap()

void Unit::CleanupBeforeRemoveFromMap ( bool  finalCleanup)
12609{
12611 return;
12612
12613 // This needs to be before RemoveFromWorld to make GetCaster() return a valid pointer on aura removal
12615
12616 if (IsInWorld()) // not in world and not being removed atm
12618
12619 ASSERT(GetGUID());
12620
12621 // A unit may be in removelist and not in world, but it is still in grid
12622 // and may have some references during delete
12625
12626 if (finalCleanup)
12627 m_cleanupDone = true;
12628
12629 CombatStop();
12632 GetMotionMaster()->Clear(false); // remove different non-standard movement generators.
12633}
void Clear(bool reset=true)
Definition MotionMaster.h:193
void RemoveAllGameObjects()
Definition Unit.cpp:6660
void ClearComboPoints()
Definition Unit.cpp:13268
void ClearComboPointHolders()
Definition Unit.cpp:13323
void RemoveFromWorld() override
Definition Unit.cpp:12560
void RemoveAllAuras()
Definition Unit.cpp:5605
void CombatStop(bool includingCast=false, bool mutualPvP=true)
Definition Unit.cpp:7497

References ASSERT, MotionMaster::Clear(), ClearComboPointHolders(), ClearComboPoints(), CombatStop(), Object::GetGUID(), GetMotionMaster(), InterruptNonMeleeSpells(), IsDuringRemoveFromWorld(), Object::IsInWorld(), m_cleanupDone, RemoveAllAuras(), RemoveAllGameObjects(), and RemoveFromWorld().

Referenced by CleanupsBeforeDelete().

◆ CleanupsBeforeDelete()

void Unit::CleanupsBeforeDelete ( bool  finalCleanup = true)
overridevirtual

Reimplemented from WorldObject.

12636{
12637 if (GetTransport())
12638 {
12640 SetTransport(nullptr);
12643 }
12644
12645 CleanupBeforeRemoveFromMap(finalCleanup);
12646}
virtual void RemovePassenger(WorldObject *passenger, bool withAll=false)=0
void CleanupBeforeRemoveFromMap(bool finalCleanup)
Definition Unit.cpp:12608
void SetTransport(Transport *t)
Definition Object.h:696
void Reset()
Definition Object.h:299
void RemoveMovementFlag(uint32 flag)
Definition Object.h:345

References CleanupBeforeRemoveFromMap(), WorldObject::GetTransport(), WorldObject::m_movementInfo, MOVEMENTFLAG_ONTRANSPORT, MovementInfo::RemoveMovementFlag(), Transport::RemovePassenger(), MovementInfo::TransportInfo::Reset(), WorldObject::SetTransport(), and MovementInfo::transport.

Referenced by Player::CleanupsBeforeDelete(), npc_commandscript::HandleNpcAddCommand(), and Map::RemoveAllObjectsInRemoveList().

◆ ClearAllReactives()

void Unit::ClearAllReactives ( )
13332{
13333 for (uint8 i = 0; i < MAX_REACTIVE; ++i)
13334 m_reactiveTimer[i] = 0;
13335
13342}
@ CLASS_HUNTER
Definition SharedDefines.h:128
@ CLASS_WARRIOR
Definition SharedDefines.h:126
@ AURA_STATE_DEFENSE
Definition SharedDefines.h:1280
@ AURA_STATE_HUNTER_PARRY
Definition SharedDefines.h:1286
@ CLASS_CONTEXT_ABILITY_REACTIVE
Definition UnitDefines.h:242
virtual bool IsClass(Classes unitClass, ClassContext context=CLASS_CONTEXT_NONE) const
Definition Unit.h:844
bool HasAuraState(AuraStateType flag, SpellInfo const *spellProto=nullptr, Unit const *Caster=nullptr) const
Definition Unit.cpp:7657

References AURA_STATE_DEFENSE, AURA_STATE_HUNTER_PARRY, CLASS_CONTEXT_ABILITY_REACTIVE, CLASS_HUNTER, CLASS_WARRIOR, ClearComboPoints(), HasAuraState(), IsClass(), Object::IsPlayer(), m_reactiveTimer, MAX_REACTIVE, and ModifyAuraState().

Referenced by Player::ActivateSpec(), and setDeathState().

◆ ClearComboPointHolders()

void Unit::ClearComboPointHolders ( )
13324{
13325 while (!m_ComboPointHolders.empty())
13326 {
13327 (*m_ComboPointHolders.begin())->ClearComboPoints(); // this also removes it from m_comboPointHolders
13328 }
13329}

References ClearComboPoints(), and m_ComboPointHolders.

Referenced by CreatureAI::_EnterEvadeMode(), CleanupBeforeRemoveFromMap(), Player::RemoveFromWorld(), and setDeathState().

◆ ClearComboPoints()

void Unit::ClearComboPoints ( )
13269{
13270 if (!m_comboTarget)
13271 {
13272 return;
13273 }
13274
13275 // remove Premed-like effects
13276 // (NB: this Aura retains the CP while it's active - now that CP have reset, it shouldn't be there anymore)
13278
13279 m_comboPoints = 0;
13282 m_comboTarget = nullptr;
13283}
@ SPELL_AURA_RETAIN_COMBO_POINTS
Definition SpellAuraDefines.h:211

References m_comboPoints, m_comboTarget, RemoveAurasByType(), RemoveComboPointHolder(), SendComboPoints(), and SPELL_AURA_RETAIN_COMBO_POINTS.

Referenced by Spell::_handle_finish_phase(), CleanupBeforeRemoveFromMap(), ClearAllReactives(), ClearComboPointHolders(), Player::DuelComplete(), Player::RemoveFromWorld(), Player::setDeathState(), and UpdateReactives().

◆ ClearDiminishings()

void Unit::ClearDiminishings ( )
inline
1863{ m_Diminishing.clear(); }

References m_Diminishing.

Referenced by setDeathState().

◆ ClearEmoteState()

void Unit::ClearEmoteState ( )
inline

Sets emote state (looping emote). Emotes available in SharedDefines.h.

void SetEmoteState(Emote emoteState)
Definition Unit.h:758

References EMOTE_ONESHOT_NONE, and SetEmoteState().

Referenced by boss_felblood_kaelthas::DoAction().

◆ ClearInCombat()

void Unit::ClearInCombat ( )
10679{
10680 m_CombatTimer = 0;
10681 // Let CombatManager handle flag removal through UpdateOwnerCombatState
10682 // so that AtExitCombat/AtDisengage callbacks properly fire.
10684 // If flag is still set (e.g. set by old code path without CombatReference),
10685 // remove it directly.
10686 if (IsInCombat())
10688
10689 // Player's state will be cleared in Player::UpdateContestedPvP
10690 if (Creature* creature = ToCreature())
10691 {
10692 if (creature->GetCreatureTemplate() && creature->GetCreatureTemplate()->unit_flags & UNIT_FLAG_IMMUNE_TO_PC)
10693 SetImmuneToPC(true); // set immunity state to the one from db on evade
10694
10697 ReplaceAllDynamicFlags(creature->GetCreatureTemplate()->dynamicflags);
10698
10699 creature->SetAssistanceTimer(0);
10700
10701 // Xinef: will be recalculated at follow movement generator initialization
10702 if (!IsPet() && !IsCharmed())
10703 return;
10704 }
10705 else if (Player* player = ToPlayer())
10706 {
10707 player->UpdatePotionCooldown();
10708 if (player->IsClass(CLASS_DEATH_KNIGHT, CLASS_CONTEXT_ABILITY))
10709 for (uint8 i = 0; i < MAX_RUNES; ++i)
10710 player->SetGracePeriod(i, 0);
10711 }
10712
10713 if (Player* player = this->ToPlayer())
10714 {
10715 sScriptMgr->OnPlayerLeaveCombat(player);
10716 }
10717}
#define MAX_RUNES
Definition Player.h:385
@ CLASS_DEATH_KNIGHT
Definition SharedDefines.h:131
@ CLASS_CONTEXT_ABILITY
Definition UnitDefines.h:241
@ UNIT_STATE_ATTACK_PLAYER
Definition UnitDefines.h:187
@ UNIT_FLAG_IN_COMBAT
Definition UnitDefines.h:276
@ UNIT_FLAG_IMMUNE_TO_PC
Definition UnitDefines.h:265
void EndAllCombat()
Definition CombatManager.h:147
void ReplaceAllDynamicFlags(uint32 flag) override
Definition Unit.h:769
bool IsCharmed() const
Definition Unit.h:1310
bool IsPet() const
Definition Unit.h:797
CombatManager & GetCombatManager()
Definition Unit.h:953
void SetImmuneToPC(bool apply, bool keepCombat=false)
Definition Unit.cpp:10638
void RemoveUnitFlag(UnitFlags flags)
UnitFlags available in UnitDefines.h.
Definition Unit.h:749

References CLASS_CONTEXT_ABILITY, CLASS_DEATH_KNIGHT, ClearUnitState(), CombatManager::EndAllCombat(), GetCombatManager(), Object::HasDynamicFlag(), IsCharmed(), IsInCombat(), IsPet(), m_CombatTimer, MAX_RUNES, RemoveUnitFlag(), ReplaceAllDynamicFlags(), SetImmuneToPC(), sScriptMgr, Object::ToCreature(), Object::ToPlayer(), UNIT_DYNFLAG_TAPPED, UNIT_FLAG_IMMUNE_TO_PC, UNIT_FLAG_IN_COMBAT, and UNIT_STATE_ATTACK_PLAYER.

Referenced by CombatStop(), Player::LoadFromDB(), and Update().

◆ ClearInPetCombat()

◆ ClearUnitState()

void Unit::ClearUnitState ( uint32  f)
inline
737{ m_state &= ~f; }

References m_state.

Referenced by Spell::_cast(), HomeMovementGenerator< Creature >::_setTargetLocation(), Creature::AtDisengage(), AtEngage(), Attack(), FollowerAI::AttackStart(), npc_dark_nucleus::npc_dark_nucleusAI::AttackStart(), AttackStop(), ClearInCombat(), boss_thorim::DisableThorim(), npc_ball_of_flame::npc_ball_of_flameAI::DoAction(), FormationMovementGenerator::DoFinalize(), HomeMovementGenerator< Creature >::DoFinalize(), WaypointMovementGenerator< Creature >::DoFinalize(), RandomMovementGenerator< T >::DoFinalize(), ConfusedMovementGenerator< T >::DoFinalize(), FlightPathMovementGenerator::DoFinalize(), FleeingMovementGenerator< T >::DoFinalize(), ConfusedMovementGenerator< T >::DoFinalize(), WaypointMovementGenerator< Creature >::DoUpdate(), RandomMovementGenerator< T >::DoUpdate(), Spell::EffectResurrectPet(), boss_yoggsaron_sara::EnableSara(), boss_ayamiss::EnterEvadeMode(), CreatureAI::EnterEvadeMode(), SmartAI::EnterEvadeMode(), violet_hold_trashAI::EnterEvadeMode(), npc_future_you::npc_future_youAI::EnterEvadeMode(), npc_pet_dk_ebon_gargoyle::EnterEvadeMode(), TimedFleeingMovementGenerator::Finalize(), RotateMovementGenerator::Finalize(), DistractMovementGenerator::Finalize(), AssistanceDistractMovementGenerator::Finalize(), Spell::finish(), npc_torloth_the_magnificent::npc_torloth_the_magnificentAI::HandleAnimation(), AuraEffect::HandleAuraModSchoolImmunity(), debug_commandscript::HandleDebugUnitStateCommand(), AuraEffect::HandleFeignDeath(), WorldSession::HandlePetActionHelper(), WorldSession::HandlePetCastSpellOpcode(), FollowerAI::MoveInLineOfSight(), npc_escortAI::MoveInLineOfSight(), SmartAI::MoveInLineOfSight(), SmartAI::MovementInform(), boss_lady_vashj::MovementInform(), boss_jedoga_shadowseeker::MovementInform(), MotionMaster::MoveTargetedHome(), boss_loken::OnAuraRemove(), boss_nightbane::PathEndReached(), WaypointMovementGenerator< Creature >::ProcessWaypointArrival(), Creature::ReleaseFocus(), RemoveCharmedBy(), MotionTransport::RemovePassenger(), boss_ayamiss::Reset(), boss_hungarfen::Reset(), Player::ResetContestedPvP(), boss_loken::ScheduleTasks(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::SelectNewTarget(), SetCharm(), Player::SetClientControl(), SmartAI::SetCombatMovement(), SetControlled(), Creature::setDeathState(), Player::setDeathState(), FollowerAI::SetFollowComplete(), FollowerAI::SetFollowPaused(), Player::SetIsSpectator(), SetRooted(), TestCreature::SetupForCombatTest(), boss_urom::boss_uromAI::SpellHit(), boss_black_knight::boss_black_knightAI::SpellHitTarget(), spell_putricide_ooze_channel::StartAttack(), StopMoving(), StopMovingOnCurrentPos(), boss_devourer_of_souls::UpdateAI(), npc_dark_nucleus::npc_dark_nucleusAI::UpdateAI(), and boss_the_lich_king::boss_the_lich_kingAI::UpdateAI().

◆ CombatStop()

void Unit::CombatStop ( bool  includingCast = false,
bool  mutualPvP = true 
)
7498{
7499 if (includingCast && IsNonMeleeSpellCast(false))
7501
7502 AttackStop();
7504 if (IsPlayer())
7505 ToPlayer()->SendAttackSwingCancelAttack(); // melee and ranged forced attack cancel
7506 if (Creature* pCreature = ToCreature())
7507 pCreature->ClearLastLeashExtensionTimePtr();
7508
7509 if (mutualPvP)
7510 ClearInCombat();
7511 else
7512 {
7515 }
7516
7517 // xinef: just in case
7518 if (IsPetInCombat() && !IsPlayer())
7520}
void SuppressPvPCombat()
Definition CombatManager.cpp:325
void EndAllPvECombat()
Definition CombatManager.cpp:334
void SendAttackSwingCancelAttack()
Definition PlayerMisc.cpp:141
bool IsPetInCombat() const
Definition Unit.h:938
void ClearInPetCombat()
Definition Unit.cpp:10719
void RemoveAllAttackers()
Remove all units in m_attackers list and send them AttackStop()
Definition Unit.cpp:7594
void ClearInCombat()
Definition Unit.cpp:10678
bool AttackStop()
Force the unit to stop attacking. This will clear UNIT_STATE_MELEE_ATTACKING, Interrupt current spell...
Definition Unit.cpp:7464

References AttackStop(), ClearInCombat(), ClearInPetCombat(), CombatManager::EndAllPvECombat(), GetCombatManager(), InterruptNonMeleeSpells(), IsNonMeleeSpellCast(), IsPetInCombat(), Object::IsPlayer(), RemoveAllAttackers(), Player::SendAttackSwingCancelAttack(), CombatManager::SuppressPvPCombat(), Object::ToCreature(), and Object::ToPlayer().

Referenced by CreatureAI::_EnterEvadeMode(), PetAI::_stopAttack(), Player::ActivateTaxiPathTo(), CleanupBeforeRemoveFromMap(), CombatStopWithPets(), boss_grand_champion::boss_grand_championAI::DamageTaken(), boss_hodir::DamageTaken(), npc_ulduar_arachnopod_destroyer::DamageTaken(), npc_overlord_drakuru_betrayal::DamageTaken(), npc_magister_aledis::DamageTaken(), npc_tapoke_slim_jahn::npc_tapoke_slim_jahnAI::DamageTaken(), boss_the_lich_king::boss_the_lich_kingAI::DamageTaken(), boss_thorim::DamageTaken(), npc_crok_scourgebane::npc_crok_scourgebaneAI::DoAction(), npc_spark_of_ionar::DoAction(), npc_maiev_illidan::DoAction(), npc_taskmaster_fizzule::npc_taskmaster_fizzuleAI::DoFriend(), npc_unkor_the_ruthless::npc_unkor_the_ruthlessAI::DoNice(), Spell::EffectSanctuary(), npc_tirion_fordring_tft::npc_tirion_fordringAI::EnterEvadeMode(), GuardAI::EnterEvadeMode(), TotemAI::EnterEvadeMode(), boss_doomrel::EnterEvadeMode(), npc_varian_wrynn::npc_varian_wrynnAI::EnterEvadeMode(), npc_thrall_bfu::npc_thrall_bfuAI::EnterEvadeMode(), npc_pos_freed_slave::npc_pos_freed_slaveAI::EnterEvadeMode(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::EnterEvadeMode(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::EnterEvadeMode(), gunship_npc_AI::EnterEvadeMode(), npc_gunship_boarding_addAI::EnterEvadeMode(), npc_terenas_menethil::npc_terenas_menethilAI::EnterEvadeMode(), violet_hold_trashAI::EnterEvadeMode(), npc_pet_mage_mirror_image::EnterEvadeMode(), npc_escortAI::EnterEvadeMode(), FollowerAI::EnterEvadeMode(), npc_crystalline_frayer::EnterSeedPod(), npc_pet_dk_ebon_gargoyle::FlyAway(), Aura::HandleAuraSpecificMods(), misc_commandscript::HandleCombatStopCommand(), spell_q11919_q11940_drake_hunt_aura::HandleEffectRemove(), AuraEffect::HandleFeignDeath(), spell_chapter2_persuasive_strike::HandleHit(), npc_commandscript::HandleNpcDeleteCommand(), npc_echo_of_medivh::HandlePieceJustDied(), Battlefield::HideNpc(), npc_supremus_punch_invisible_stalker::IsSummonedBy(), boss_deathbringer_saurfang::boss_deathbringer_saurfangAI::JustEngagedWith(), boss_professor_putricide::boss_professor_putricideAI::JustEngagedWith(), Kill(), boss_urom::boss_uromAI::LeaveCombat(), npc_pet_dk_ebon_gargoyle::MySelectNextTarget(), SmartScript::ProcessAction(), Player::RemovePet(), npc_the_lich_king_controller::npc_the_lich_king_controllerAI::Reset(), setDeathState(), npc_venture_co_straggler::npc_venture_co_stragglerAI::SpellHit(), Player::TeleportTo(), Totem::UnSummon(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::UpdateAI(), npc_anachronos_the_ancient::npc_anachronos_the_ancientAI::UpdateAI(), npc_snobold_vassal::npc_snobold_vassalAI::UpdateAI(), npc_frost_freeze_trap::npc_frost_freeze_trapAI::UpdateAI(), boss_stormcaller_brundir::UpdateAI(), npc_aeranas::npc_aeranasAI::UpdateAI(), npc_torloth_the_magnificent::npc_torloth_the_magnificentAI::UpdateAI(), npc_nelson::npc_nelsonAI::UpdateAI(), npc_franklin::npc_franklinAI::UpdateAI(), and npc_deaths_fel_cannon::npc_deaths_fel_cannonAI::UpdateAI().

◆ CombatStopWithPets()

void Unit::CombatStopWithPets ( bool  includingCast = false)
7523{
7524 CombatStop(includingCast);
7525
7526 for (ControlSet::const_iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr)
7527 (*itr)->CombatStop(includingCast);
7528}

References CombatStop(), and m_Controlled.

Referenced by DealDamage(), WorldSession::HandleDuelCancelledOpcode(), Player::SetGameMaster(), Player::SetGMVisible(), and Player::UpdateArea().

◆ CountPctFromCurHealth()

uint32 Unit::CountPctFromCurHealth ( int32  pct) const
inline
1122{ return CalculatePct(GetHealth(), pct); }
uint32 GetHealth() const
Definition Unit.h:1108

References CalculatePct(), and GetHealth().

Referenced by spell_gen_leeching_swarm_aura::HandleEffectPeriodic().

◆ CountPctFromMaxHealth()

uint32 Unit::CountPctFromMaxHealth ( int32  pct) const
inline
1121{ return CalculatePct(GetMaxHealth(), pct); }
uint32 GetMaxHealth() const
Definition Unit.h:1109

References CalculatePct(), and GetMaxHealth().

Referenced by spell_pri_guardian_spirit::Absorb(), spell_rog_cheat_death::Absorb(), spell_pal_ardent_defender::Absorb(), spell_dru_survival_instincts_aura::AfterApply(), spell_dk_anti_magic_shell_self::CalculateAmount(), spell_dk_vampiric_blood::CalculateAmount(), boss_ichoron::DoAction(), Spell::EffectHeal(), Spell::EffectHealPct(), Spell::EffectResurrect(), Spell::EffectResurrectPet(), Spell::EffectSelfResurrect(), Spell::EffectSummonType(), spell_alar_ember_blast::HandleCast(), misc_commandscript::HandleDamageCommand(), spell_dk_death_strike::HandleDummy(), spell_hun_last_stand_pet::HandleDummy(), spell_warr_last_stand::HandleDummy(), AuraEffect::HandlePeriodicDummyAuraTick(), AuraEffect::HandlePeriodicHealAurasTick(), AuraEffect::HandlePeriodicTriggerSpellAuraTick(), spell_item_blood_draining_enchant::HandleProc(), spell_dk_vendetta::HandleProc(), spell_dru_leader_of_the_pack::HandleProc(), spell_item_swift_hand_justice_dummy::HandleProc(), spell_pal_judgement_of_light_heal::HandleProc(), spell_pri_glyph_of_dispel_magic::HandleProc(), HealthAbovePct(), HealthAbovePctHealed(), HealthBelowPct(), HealthBelowPctDamaged(), spell_pri_lightwell_renew::InitializeAmount(), boss_harbinger_skyriss::JustSummoned(), boss_hadronox::KilledUnit(), Pet::LoadPetFromDB(), spell_gluth_decimate_damage::PrepareSpellScript(), boss_vaelastrasz::Reset(), npc_draenei_survivor::npc_draenei_survivorAI::Reset(), npc_injured_draenei::npc_injured_draeneiAI::Reset(), boss_murmur::Reset(), npc_injured_patient::npc_injured_patientAI::Reset(), npc_crok_scourgebane::npc_crok_scourgebaneAI::UpdateAI(), and npc_injured_patient::npc_injured_patientAI::UpdateAI().

◆ CreateTamedPetFrom() [1/2]

Pet * Unit::CreateTamedPetFrom ( Creature creatureTarget,
uint32  spell_id = 0 
)
13768{
13769 if (!IsPlayer())
13770 return nullptr;
13771
13772 Pet* pet = new Pet(ToPlayer(), HUNTER_PET);
13773
13774 if (!pet->CreateBaseAtCreature(creatureTarget))
13775 {
13776 delete pet;
13777 return nullptr;
13778 }
13779
13780 uint8 level = creatureTarget->GetLevel() + 5 < GetLevel() ? (GetLevel() - 5) : creatureTarget->GetLevel();
13781
13782 if (!InitTamedPet(pet, level, spell_id))
13783 {
13784 delete pet;
13785 return nullptr;
13786 }
13787
13788 return pet;
13789}
@ HUNTER_PET
Definition PetDefines.h:33
bool CreateBaseAtCreature(Creature *creature)
Definition Pet.cpp:941
bool InitTamedPet(Pet *pet, uint8 level, uint32 spell_id)
Definition Unit.cpp:13811

References Pet::CreateBaseAtCreature(), GetLevel(), HUNTER_PET, InitTamedPet(), Object::IsPlayer(), and Object::ToPlayer().

Referenced by Player::CreatePet(), Player::CreatePet(), Spell::EffectCreateTamedPet(), and Spell::EffectTameCreature().

◆ CreateTamedPetFrom() [2/2]

Pet * Unit::CreateTamedPetFrom ( uint32  creatureEntry,
uint32  spell_id = 0 
)
13792{
13793 if (!IsPlayer())
13794 return nullptr;
13795
13796 CreatureTemplate const* creatureInfo = sObjectMgr->GetCreatureTemplate(creatureEntry);
13797 if (!creatureInfo)
13798 return nullptr;
13799
13800 Pet* pet = new Pet(ToPlayer(), HUNTER_PET);
13801
13802 if (!pet->CreateBaseAtCreatureInfo(creatureInfo, this) || !InitTamedPet(pet, GetLevel(), spell_id))
13803 {
13804 delete pet;
13805 return nullptr;
13806 }
13807
13808 return pet;
13809}
#define sObjectMgr
Definition ObjectMgr.h:1723
bool CreateBaseAtCreatureInfo(CreatureTemplate const *cinfo, Unit *owner)
Definition Pet.cpp:976
Definition CreatureData.h:187

References Pet::CreateBaseAtCreatureInfo(), GetLevel(), HUNTER_PET, InitTamedPet(), Object::IsPlayer(), sObjectMgr, and Object::ToPlayer().

◆ CreateVehicleKit()

bool Unit::CreateVehicleKit ( uint32  id,
uint32  creatureEntry 
)

Returns the transport this unit is on directly (if on vehicle and transport, return vehicle)

14985{
14986 VehicleEntry const* vehInfo = sVehicleStore.LookupEntry(id);
14987 if (!vehInfo)
14988 return false;
14989
14990 m_vehicleKit = new Vehicle(this, vehInfo, creatureEntry);
14993 return true;
14994}
DBCStorage< VehicleEntry > sVehicleStore(VehicleEntryfmt)
@ UNIT_MASK_VEHICLE
Definition UnitDefines.h:164
@ UPDATEFLAG_VEHICLE
Definition UpdateData.h:46

References m_unitTypeMask, Object::m_updateFlag, m_vehicleKit, sVehicleStore, UNIT_MASK_VEHICLE, and UPDATEFLAG_VEHICLE.

Referenced by Creature::CreateFromProto(), AuraEffect::HandleAuraSetVehicle(), Mount(), and npc_isle_of_conquest_turret::npc_isle_of_conquest_turretAI::SpellHit().

◆ DealDamage()

uint32 Unit::DealDamage ( Unit attacker,
Unit victim,
uint32  damage,
CleanDamage const *  cleanDamage = nullptr,
DamageEffectType  damagetype = DIRECT_DAMAGE,
SpellSchoolMask  damageSchoolMask = SPELL_SCHOOL_MASK_NORMAL,
SpellInfo const *  spellProto = nullptr,
bool  durabilityLoss = true,
bool  allowGM = false,
Spell const *  spell = nullptr 
)
static

@fix: Hack to avoid premature leashing

1008{
1009 damage = sScriptMgr->DealDamage(attacker, victim, damage, damagetype);
1010 // Xinef: initialize damage done for rage calculations
1011 // Xinef: its rare to modify damage in hooks, however training dummy's sets damage to 0
1012 uint32 rage_damage = damage + ((cleanDamage != nullptr) ? cleanDamage->absorbed_damage : 0);
1013
1014 //if (attacker)
1015 {
1016 if (victim->IsAIEnabled)
1017 victim->GetAI()->DamageTaken(attacker, damage, damagetype, damageSchoolMask);
1018
1019 if (attacker && attacker->IsAIEnabled)
1020 attacker->GetAI()->DamageDealt(victim, damage, damagetype, damageSchoolMask);
1021 }
1022
1023 // Hook for OnDamage Event
1024 sScriptMgr->OnDamage(attacker, victim, damage);
1025
1026 // Signal to pets that their owner was attacked - except when DOT.
1027 if (attacker != victim && damagetype != DOT)
1028 {
1029 for (Unit* controlled : victim->m_Controlled)
1030 if (Creature* cControlled = controlled->ToCreature())
1031 if (CreatureAI* controlledAI = cControlled->AI())
1032 controlledAI->OwnerAttackedBy(attacker);
1033 }
1034
1035 //Dont deal damage to unit if .cheat god is enable.
1036 if (victim->IsPlayer())
1037 {
1038 if (victim->ToPlayer()->GetCommandStatus(CHEAT_GOD))
1039 {
1040 return 0;
1041 }
1042 }
1043
1044 // Signal the pet it was attacked so the AI can respond if needed
1045 if (victim->IsCreature() && attacker != victim && victim->IsPet() && victim->IsAlive())
1046 victim->ToPet()->AI()->AttackedBy(attacker);
1047
1048 if (damagetype != NODAMAGE)
1049 {
1050 // interrupting auras with AURA_INTERRUPT_FLAG_DAMAGE before checking !damage (absorbed damage breaks that type of auras)
1051 if (spellProto)
1052 {
1053 if (attacker && damagetype != DOT && spellProto->DmgClass == SPELL_DAMAGE_CLASS_MELEE && !(spellProto->GetSchoolMask() & SPELL_SCHOOL_MASK_HOLY))
1054 attacker->DealDamageShieldDamage(victim);
1055
1056 if (!spellProto->HasAttribute(SPELL_ATTR4_DAMAGE_DOESNT_BREAK_AURAS))
1058 }
1059 else
1061
1062 // interrupt spells with SPELL_INTERRUPT_FLAG_ABORT_ON_DMG on absorbed damage (no dots)
1063 if (!damage && damagetype != DOT && cleanDamage && cleanDamage->absorbed_damage)
1064 {
1065 if (victim != attacker && victim->IsPlayer())
1066 {
1067 if (Spell* spell = victim->m_currentSpells[CURRENT_GENERIC_SPELL])
1068 {
1069 if (spell->getState() == SPELL_STATE_PREPARING)
1070 {
1071 uint32 interruptFlags = spell->m_spellInfo->InterruptFlags;
1072 if (interruptFlags & SPELL_INTERRUPT_FLAG_ABORT_ON_DMG)
1073 {
1074 victim->InterruptNonMeleeSpells(false);
1075 }
1076 }
1077 }
1078 }
1079 }
1080
1081 // We're going to call functions which can modify content of the list during iteration over it's elements
1082 // Let's copy the list so we can prevent iterator invalidation
1084 // copy damage to casters of this aura
1085 for (AuraEffectList::iterator i = vCopyDamageCopy.begin(); i != vCopyDamageCopy.end(); ++i)
1086 {
1087 // Check if aura was removed during iteration - we don't need to work on such auras
1088 if (!((*i)->GetBase()->IsAppliedOnTarget(victim->GetGUID())))
1089 continue;
1090 // check damage school mask
1091 if (((*i)->GetMiscValue() & damageSchoolMask) == 0)
1092 continue;
1093
1094 Unit* shareDamageTarget = (*i)->GetCaster();
1095 if (!shareDamageTarget)
1096 continue;
1097 SpellInfo const* spell = (*i)->GetSpellInfo();
1098
1099 uint32 shareDamage = CalculatePct(damage, (*i)->GetAmount());
1100
1101 uint32 shareAbsorb = 0;
1102 uint32 shareResist = 0;
1103
1104 if (shareDamageTarget->IsImmunedToDamageOrSchool(damageSchoolMask))
1105 {
1106 shareAbsorb = shareDamage;
1107 shareDamage = 0;
1108 }
1109 else
1110 {
1111 DamageInfo sharedDamageInfo(attacker, shareDamageTarget, shareDamage, spellProto, damageSchoolMask, damagetype);
1112 Unit::CalcAbsorbResist(sharedDamageInfo, true);
1113 shareAbsorb = sharedDamageInfo.GetAbsorb();
1114 shareResist = sharedDamageInfo.GetResist();
1115 shareDamage = sharedDamageInfo.GetDamage();
1116 Unit::DealDamageMods(shareDamageTarget, shareDamage, &shareAbsorb);
1117 }
1118
1119 if (attacker && shareDamageTarget->IsPlayer())
1120 {
1121 attacker->SendSpellNonMeleeDamageLog(shareDamageTarget, spell, shareDamage, damageSchoolMask, shareAbsorb, shareResist, damagetype == DIRECT_DAMAGE, 0, false, true);
1122 }
1123
1124 Unit::DealDamage(attacker, shareDamageTarget, shareDamage, cleanDamage, NODAMAGE, damageSchoolMask, spellProto, false, false, damageSpell);
1125 }
1126 }
1127
1128 // Rage from Damage made (only from direct weapon damage)
1129 if (attacker && cleanDamage && damagetype == DIRECT_DAMAGE && attacker != victim && attacker->HasActivePowerType(POWER_RAGE))
1130 {
1131 uint32 weaponSpeedHitFactor;
1132
1133 switch (cleanDamage->attackType)
1134 {
1135 case BASE_ATTACK:
1136 case OFF_ATTACK:
1137 {
1138 weaponSpeedHitFactor = uint32(attacker->GetAttackTime(cleanDamage->attackType) / 1000.0f * (cleanDamage->attackType == BASE_ATTACK ? 3.5f : 1.75f));
1139 if (cleanDamage->hitOutCome == MELEE_HIT_CRIT)
1140 weaponSpeedHitFactor *= 2;
1141
1142 attacker->RewardRage(rage_damage, weaponSpeedHitFactor, true);
1143 break;
1144 }
1145 case RANGED_ATTACK:
1146 break;
1147 default:
1148 break;
1149 }
1150 }
1151
1152 if (!damage)
1153 {
1154 // Rage from absorbed damage
1155 if (cleanDamage && cleanDamage->absorbed_damage)
1156 {
1157 if (victim->HasActivePowerType(POWER_RAGE))
1158 victim->RewardRage(cleanDamage->absorbed_damage, 0, false);
1159
1160 if (attacker && attacker->HasActivePowerType(POWER_RAGE))
1161 attacker->RewardRage(cleanDamage->absorbed_damage, 0, true);
1162 }
1163
1164 return 0;
1165 }
1166
1167 LOG_DEBUG("entities.unit", "DealDamageStart");
1168
1169 uint32 health = victim->GetHealth();
1170 LOG_DEBUG("entities.unit", "deal dmg:{} to health:{} ", damage, health);
1171
1172 // duel ends when player has 1 or less hp
1173 bool duel_hasEnded = false;
1174 bool duel_wasMounted = false;
1175 if (victim->IsPlayer() && victim->ToPlayer()->duel && damage >= (health - 1))
1176 {
1177 // xinef: situation not possible earlier, just return silently.
1178 if (!attacker)
1179 return 0;
1180
1181 // prevent kill only if killed in duel and killed by opponent or opponent controlled creature
1182 if (victim->ToPlayer()->duel->Opponent == attacker || victim->ToPlayer()->duel->Opponent->GetGUID() == attacker->GetOwnerGUID())
1183 damage = health - 1;
1184
1185 duel_hasEnded = true;
1186 }
1187 else if (victim->IsVehicle() && damage >= (health - 1) && victim->GetCharmer() && victim->GetCharmer()->IsPlayer())
1188 {
1189 Player* victimRider = victim->GetCharmer()->ToPlayer();
1190
1191 if (victimRider && victimRider->duel && victimRider->duel->IsMounted)
1192 {
1193 // xinef: situation not possible earlier, just return silently.
1194 if (!attacker)
1195 return 0;
1196
1197 // prevent kill only if killed in duel and killed by opponent or opponent controlled creature
1198 if (victimRider->duel->Opponent == attacker || victimRider->duel->Opponent->GetGUID() == attacker->GetCharmerGUID())
1199 damage = health - 1;
1200
1201 duel_wasMounted = true;
1202 duel_hasEnded = true;
1203 }
1204 }
1205
1206 if (attacker && attacker != victim)
1207 if (Player* killer = attacker->GetCharmerOrOwnerPlayerOrPlayerItself())
1208 {
1209 // pussywizard: don't allow GMs to deal damage in normal way (this leaves no evidence in logs!), they have commands to do so
1210 //if (!allowGM && killer->GetSession()->GetSecurity() && killer->GetSession()->GetSecurity() <= SEC_ADMINISTRATOR)
1211 // return 0;
1212
1213 if (Battleground* bg = killer->GetBattleground())
1214 {
1215 bg->UpdatePlayerScore(killer, SCORE_DAMAGE_DONE, damage);
1216 killer->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_DAMAGE_DONE, damage, 0, victim); // pussywizard: InBattleground() optimization
1217 }
1218 //killer->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HIT_DEALT, damage); // pussywizard: optimization
1219 }
1220
1221 if (victim->IsPlayer())
1222 ;//victim->ToPlayer()->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HIT_RECEIVED, damage); // pussywizard: optimization
1223 else if (!victim->IsControlledByPlayer() || victim->IsVehicle())
1224 {
1225 if (!victim->ToCreature()->hasLootRecipient())
1226 victim->ToCreature()->SetLootRecipient(attacker);
1227
1228 if (!attacker || attacker->IsControlledByPlayer() || attacker->IsCreatedByPlayer())
1229 {
1230 uint32 unDamage = health < damage ? health : damage;
1231 bool damagedByPlayer = unDamage && attacker && (attacker->IsPlayer() || attacker->m_movedByPlayer != nullptr
1232 || attacker->GetCharmerOrOwnerGUID().IsPlayer());
1233 victim->ToCreature()->LowerPlayerDamageReq(unDamage, damagedByPlayer);
1234 }
1235 }
1236
1237 // Sparring
1238 if (victim->CanSparringWith(attacker))
1239 {
1240 if (damage >= victim->GetHealth())
1241 damage = 0;
1242
1243 uint32 sparringHealth = victim->GetHealth() * (victim->ToCreature()->GetSparringPct() / 100);
1244 if (victim->GetHealth() - damage <= sparringHealth)
1245 damage = 0;
1246 }
1247
1248 if (health <= damage)
1249 {
1250 LOG_DEBUG("entities.unit", "DealDamage: victim just died");
1251
1252 //if (attacker && victim->IsPlayer() && victim != attacker)
1253 //victim->ToPlayer()->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_TOTAL_DAMAGE_RECEIVED, health); // pussywizard: optimization
1254 Unit::Kill(attacker, victim, durabilityLoss, cleanDamage ? cleanDamage->attackType : BASE_ATTACK, spellProto, damageSpell);
1255 }
1256 else
1257 {
1258 LOG_DEBUG("entities.unit", "DealDamageAlive");
1259
1260 //if (victim->IsPlayer())
1261 // victim->ToPlayer()->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_TOTAL_DAMAGE_RECEIVED, damage); // pussywizard: optimization
1262
1263 victim->ModifyHealth(- (int32)damage);
1264
1265 if (damagetype == DIRECT_DAMAGE || damagetype == SPELL_DIRECT_DAMAGE)
1266 victim->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_DIRECT_DAMAGE, spellProto ? spellProto->Id : 0);
1267
1268 if (!victim->IsPlayer())
1269 {
1271 if (damagetype != DOT && damage > 0 && !victim->GetOwnerGUID().IsPlayer() && (!spellProto || !spellProto->HasAura(SPELL_AURA_DAMAGE_SHIELD)))
1273
1274 if (attacker && attacker != victim)
1275 {
1276 victim->AddThreat(attacker, float(damage), damageSchoolMask, spellProto);
1277 }
1278 }
1279 else // victim is a player
1280 {
1281 // random durability for items (HIT TAKEN)
1283 {
1286 }
1287 }
1288
1289 // Rage from damage received
1290 if (attacker != victim && victim->HasActivePowerType(POWER_RAGE))
1291 {
1292 uint32 rageDamage = damage + (cleanDamage ? cleanDamage->absorbed_damage : 0);
1293 victim->RewardRage(rageDamage, 0, false);
1294 }
1295
1296 if (attacker && attacker->IsPlayer())
1297 {
1298 // random durability for items (HIT DONE)
1300 {
1302 attacker->ToPlayer()->DurabilityPointLossForEquipSlot(slot);
1303 }
1304 }
1305
1306 if (damagetype != NODAMAGE && damage && (!spellProto || !(spellProto->HasAttribute(SPELL_ATTR3_TREAT_AS_PERIODIC) || spellProto->HasAttribute(SPELL_ATTR7_DONT_CAUSE_SPELL_PUSHBACK))))
1307 {
1308 if (victim != attacker && victim->IsPlayer()) // does not support creature push_back
1309 {
1310 if (damagetype != DOT && !(damageSpell && damageSpell->m_targets.HasDstChannel()))
1311 {
1312 if (Spell* spell = victim->m_currentSpells[CURRENT_GENERIC_SPELL])
1313 {
1314 if (spell->getState() == SPELL_STATE_PREPARING)
1315 {
1316 uint32 interruptFlags = spell->m_spellInfo->InterruptFlags;
1317 if (interruptFlags & SPELL_INTERRUPT_FLAG_ABORT_ON_DMG)
1318 {
1319 victim->InterruptNonMeleeSpells(false);
1320 }
1321 else if (interruptFlags & SPELL_INTERRUPT_FLAG_PUSH_BACK)
1322 {
1323 spell->Delayed();
1324 }
1325 }
1326 }
1327
1328 if (Spell* spell = victim->m_currentSpells[CURRENT_CHANNELED_SPELL])
1329 if (spell->getState() == SPELL_STATE_CASTING)
1330 {
1331 if ((spell->m_spellInfo->ChannelInterruptFlags & CHANNEL_FLAG_DELAY) != 0)
1332 {
1333 spell->DelayedChannel();
1334 }
1335 }
1336 }
1337 }
1338 }
1339
1340 // last damage from duel opponent
1341 if (duel_hasEnded)
1342 {
1343 Player* he = duel_wasMounted ? victim->GetCharmer()->ToPlayer() : victim->ToPlayer();
1344
1345 ASSERT_NODEBUGINFO(he && he->duel);
1346
1347 if (duel_wasMounted) // In this case victim==mount
1348 victim->SetHealth(1);
1349 else
1350 he->SetHealth(1);
1351
1352 he->duel->Opponent->CombatStopWithPets(true);
1353 he->CombatStopWithPets(true);
1354
1355 he->CastSpell(he, 7267, true); // beg
1357 }
1358 }
1359
1360 LOG_DEBUG("entities.unit", "DealDamageEnd returned {} damage", damage);
1361
1362 return damage;
1363}
@ SCORE_DAMAGE_DONE
Definition BattlegroundScore.h:32
@ ACHIEVEMENT_CRITERIA_TYPE_DAMAGE_DONE
Definition DBCEnums.h:130
#define ASSERT_NODEBUGINFO
Definition Errors.h:69
@ CHEAT_GOD
Definition Player.h:995
EquipmentSlots
Definition Player.h:659
@ EQUIPMENT_SLOT_END
Definition Player.h:680
bool roll_chance_f(float chance)
Definition Random.h:57
@ POWER_RAGE
Definition SharedDefines.h:258
@ SPELL_ATTR7_DONT_CAUSE_SPELL_PUSHBACK
Definition SharedDefines.h:635
@ SPELL_ATTR3_TREAT_AS_PERIODIC
Definition SharedDefines.h:506
@ DUEL_WON
Definition SharedDefines.h:3869
@ SPELL_ATTR4_DAMAGE_DOESNT_BREAK_AURAS
Definition SharedDefines.h:532
@ SPELL_AURA_DAMAGE_SHIELD
Definition SpellAuraDefines.h:78
@ SPELL_AURA_SHARE_DAMAGE_PCT
Definition SpellAuraDefines.h:363
@ CHANNEL_FLAG_DELAY
Definition SpellDefines.h:38
@ AURA_INTERRUPT_FLAG_TAKE_DAMAGE
Definition SpellDefines.h:44
@ AURA_INTERRUPT_FLAG_DIRECT_DAMAGE
Definition SpellDefines.h:67
@ SPELL_INTERRUPT_FLAG_ABORT_ON_DMG
Definition SpellDefines.h:30
@ SPELL_INTERRUPT_FLAG_PUSH_BACK
Definition SpellDefines.h:27
@ SPELL_STATE_PREPARING
Definition Spell.h:237
@ SPELL_STATE_CASTING
Definition Spell.h:238
@ NODAMAGE
Definition Unit.h:258
@ CURRENT_CHANNELED_SPELL
Definition Unit.h:557
@ CURRENT_GENERIC_SPELL
Definition Unit.h:556
@ RATE_DURABILITY_LOSS_DAMAGE
Definition WorldConfig.h:488
virtual void AttackedBy(Unit *)
Definition CreatureAI.h:180
void SetLootRecipient(Unit *unit, bool withGroup=true)
Definition Creature.cpp:1305
bool hasLootRecipient() const
Definition Creature.h:236
float GetSparringPct() const
Definition Creature.h:192
void LowerPlayerDamageReq(uint32 unDamage, bool damagedByPlayer=true)
Definition Creature.cpp:3834
bool IsPlayer() const
Definition ObjectGuid.h:168
void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscValue1=0, uint32 miscValue2=0, Unit *unit=nullptr)
Definition PlayerUpdates.cpp:2169
void DurabilityPointLossForEquipSlot(EquipmentSlots slot)
Definition Player.cpp:4722
bool GetCommandStatus(uint32 command) const
Definition Player.h:1197
uint32 ChannelInterruptFlags
Definition SpellInfo.h:378
uint32 InterruptFlags
Definition SpellInfo.h:376
virtual void DamageDealt(Unit *, uint32 &, DamageEffectType, SpellSchoolMask)
Called at any Damage to any victim (before damage apply)
Definition UnitAI.h:364
virtual void DamageTaken(Unit *, uint32 &, DamageEffectType, SpellSchoolMask)
Called at any Damage from any attacker (before damage apply)
Definition UnitAI.h:371
int32 ModifyHealth(int32 val)
Definition Unit.cpp:10981
Pet * ToPet()
Definition Unit.h:729
bool IsCreatedByPlayer() const
Definition Unit.h:1308
void AddThreat(Unit *victim, float fThreat, SpellSchoolMask schoolMask=SPELL_SCHOOL_MASK_NORMAL, SpellInfo const *threatSpell=nullptr)
Definition Unit.cpp:11454
Unit * GetCharmer() const
Definition Unit.cpp:7718
static void Kill(Unit *killer, Unit *victim, bool durabilityLoss=true, WeaponAttackType attackType=BASE_ATTACK, SpellInfo const *spellProto=nullptr, Spell const *spell=nullptr)
Definition Unit.cpp:13979
void RewardRage(uint32 damage, uint32 weaponSpeedHitFactor, bool attacker)
Definition Unit.cpp:16064
void SetHealth(uint32 val)
Definition Unit.cpp:12356
ObjectGuid GetCharmerGUID() const
Definition Unit.h:719
void DealDamageShieldDamage(Unit *victim)
Definition Unit.cpp:2143
virtual bool HasActivePowerType(Powers power)
Definition Unit.h:1132
ObjectGuid GetCharmerOrOwnerGUID() const
Definition Unit.h:1295
void CombatStopWithPets(bool includingCast=false)
Definition Unit.cpp:7522

References CleanDamage::absorbed_damage, ACHIEVEMENT_CRITERIA_TYPE_DAMAGE_DONE, AddThreat(), Creature::AI(), ASSERT_NODEBUGINFO, CreatureAI::AttackedBy(), CleanDamage::attackType, AURA_INTERRUPT_FLAG_DIRECT_DAMAGE, AURA_INTERRUPT_FLAG_TAKE_DAMAGE, BASE_ATTACK, CalcAbsorbResist(), CalculatePct(), CanSparringWith(), CastSpell(), CHANNEL_FLAG_DELAY, CHEAT_GOD, CombatStopWithPets(), CURRENT_CHANNELED_SPELL, CURRENT_GENERIC_SPELL, UnitAI::DamageDealt(), UnitAI::DamageTaken(), DealDamage(), DealDamageMods(), DealDamageShieldDamage(), DIRECT_DAMAGE, SpellInfo::DmgClass, DOT, Player::duel, DUEL_WON, Player::DuelComplete(), Player::DurabilityPointLossForEquipSlot(), EQUIPMENT_SLOT_END, DamageInfo::GetAbsorb(), GetAI(), GetAttackTime(), GetAuraEffectsByType(), GetCharmer(), GetCharmerGUID(), GetCharmerOrOwnerGUID(), GetCharmerOrOwnerPlayerOrPlayerItself(), Player::GetCommandStatus(), DamageInfo::GetDamage(), Object::GetGUID(), GetHealth(), GetOwnerGUID(), DamageInfo::GetResist(), SpellInfo::GetSchoolMask(), Creature::GetSparringPct(), HasActivePowerType(), SpellInfo::HasAttribute(), SpellInfo::HasAura(), SpellCastTargets::HasDstChannel(), Creature::hasLootRecipient(), CleanDamage::hitOutCome, SpellInfo::Id, InterruptNonMeleeSpells(), IsAIEnabled, IsAlive(), IsControlledByPlayer(), IsCreatedByPlayer(), Object::IsCreature(), IsImmunedToDamageOrSchool(), IsPet(), Object::IsPlayer(), ObjectGuid::IsPlayer(), IsVehicle(), Kill(), LOG_DEBUG, Creature::LowerPlayerDamageReq(), m_Controlled, m_currentSpells, m_movedByPlayer, Spell::m_targets, MELEE_HIT_CRIT, ModifyHealth(), NODAMAGE, OFF_ATTACK, POWER_RAGE, RANGED_ATTACK, RATE_DURABILITY_LOSS_DAMAGE, RemoveAurasWithInterruptFlags(), RewardRage(), roll_chance_f(), SCORE_DAMAGE_DONE, SendSpellNonMeleeDamageLog(), SetHealth(), Creature::SetLootRecipient(), SPELL_ATTR3_TREAT_AS_PERIODIC, SPELL_ATTR4_DAMAGE_DOESNT_BREAK_AURAS, SPELL_ATTR7_DONT_CAUSE_SPELL_PUSHBACK, SPELL_AURA_DAMAGE_SHIELD, SPELL_AURA_SHARE_DAMAGE_PCT, SPELL_DAMAGE_CLASS_MELEE, SPELL_DIRECT_DAMAGE, SPELL_INTERRUPT_FLAG_ABORT_ON_DMG, SPELL_INTERRUPT_FLAG_PUSH_BACK, SPELL_SCHOOL_MASK_HOLY, SPELL_STATE_CASTING, SPELL_STATE_PREPARING, sScriptMgr, sWorld, Object::ToCreature(), ToPet(), Object::ToPlayer(), Player::UpdateAchievementCriteria(), Creature::UpdateLeashExtensionTime(), and urand().

Referenced by CalcAbsorbResist(), DealDamage(), DealDamageShieldDamage(), DealMeleeDamage(), DealSpellDamage(), npc_the_scourge_cauldron::npc_the_scourge_cauldronAI::DoDie(), Spell::EffectInstaKill(), Player::EnvironmentalDamage(), spell_mt_phoenix_burn::HandleAfterCast(), spell_alar_ember_blast::HandleCast(), misc_commandscript::HandleDamageCommand(), misc_commandscript::HandleDieCommand(), spell_svala_ritual_strike::HandleDummyEffect(), spell_valkyr_touch_aura::HandleEffectPeriodic(), spell_lady_vashj_magic_barrier::HandleEffectRemove(), spell_algalon_collapse_aura::HandlePeriodic(), spell_kaelthas_burn::HandlePeriodic(), AuraEffect::HandlePeriodicDamageAurasTick(), AuraEffect::HandlePeriodicDummyAuraTick(), AuraEffect::HandlePeriodicHealAurasTick(), AuraEffect::HandlePeriodicHealthLeechAuraTick(), spell_gluth_decimate::HandleScriptEffect(), npc_necrotic_shard::SpellHit(), npc_hor_lich_king::SpellHitTarget(), npc_infra_green_bomber_generic::npc_infra_green_bomber_genericAI::UpdateAI(), npc_dragonmaw_peon::npc_dragonmaw_peonAI::UpdateAI(), and Player::UpdateCharmedAI().

◆ DealDamageMods()

void Unit::DealDamageMods ( Unit const *  victim,
uint32 damage,
uint32 absorb 
)
static

◆ DealDamageShieldDamage()

void Unit::DealDamageShieldDamage ( Unit victim)
Todo:
: Move this to a packet handler
2144{
2145 // We're going to call functions which can modify content of the list during iteration over it's elements
2146 // Let's copy the list so we can prevent iterator invalidation
2148 for (AuraEffectList::const_iterator dmgShieldItr = vDamageShieldsCopy.begin(); dmgShieldItr != vDamageShieldsCopy.end(); ++dmgShieldItr)
2149 {
2150 SpellInfo const* i_spellProto = (*dmgShieldItr)->GetSpellInfo();
2151 // Damage shield can be resisted...
2152 if (SpellMissInfo missInfo = victim->SpellHitResult(this, i_spellProto, false))
2153 {
2154 victim->SendSpellMiss(this, i_spellProto->Id, missInfo);
2155 continue;
2156 }
2157
2158 // ...or immuned
2159 if (IsImmunedToDamage(victim, i_spellProto))
2160 {
2161 victim->SendSpellDamageImmune(this, i_spellProto->Id);
2162 continue;
2163 }
2164
2165 uint32 damage = uint32(std::max(0, (*dmgShieldItr)->GetAmount())); // xinef: done calculated at amount calculation
2166
2167 if (Unit* caster = (*dmgShieldItr)->GetCaster())
2168 {
2169 damage = caster->SpellDamageBonusDone(this, i_spellProto, damage, SPELL_DIRECT_DAMAGE, (*dmgShieldItr)->GetEffIndex());
2170 damage = this->SpellDamageBonusTaken(caster, i_spellProto, damage, SPELL_DIRECT_DAMAGE);
2171 }
2172
2173 uint32 absorb = 0;
2174
2175 DamageInfo dmgInfo(victim, this, damage, i_spellProto, i_spellProto->GetSchoolMask(), SPELL_DIRECT_DAMAGE);
2176 Unit::CalcAbsorbResist(dmgInfo);
2177 absorb = dmgInfo.GetAbsorb();
2178 damage = dmgInfo.GetDamage();
2179
2180 Unit::DealDamageMods(this, damage, &absorb);
2181
2183 WorldPacket data(SMSG_SPELLDAMAGESHIELD, (8 + 8 + 4 + 4 + 4 + 4));
2184 data << victim->GetGUID();
2185 data << GetGUID();
2186 data << uint32(i_spellProto->Id);
2187 data << uint32(damage); // Damage
2188 int32 overkill = int32(damage) - int32(GetHealth());
2189 data << uint32(overkill > 0 ? overkill : 0); // Overkill
2190 data << uint32(i_spellProto->GetSchoolMask());
2191 victim->SendMessageToSet(&data, true);
2192
2193 Unit::DealDamage(victim, this, damage, 0, SPELL_DIRECT_DAMAGE, i_spellProto->GetSchoolMask(), i_spellProto, true);
2194 }
2195}
SpellMissInfo
Definition SharedDefines.h:1522
SpellSchoolMask GetSchoolMask() const
Definition SpellInfo.cpp:1894
void SendSpellMiss(Unit *target, uint32 spellID, SpellMissInfo missInfo)
Definition Unit.cpp:6864
void SendSpellDamageImmune(Unit *target, uint32 spellId)
Definition Unit.cpp:6888
SpellMissInfo SpellHitResult(Unit *victim, SpellInfo const *spell, bool canReflect=false)
Definition Unit.cpp:3653
uint32 SpellDamageBonusTaken(Unit *caster, SpellInfo const *spellProto, uint32 pdamage, DamageEffectType damagetype, uint32 stack=1)
Definition Unit.cpp:8897
bool IsImmunedToDamage(SpellSchoolMask schoolMask) const
Definition Unit.cpp:9850
virtual void SendMessageToSet(WorldPacket const *data, bool self) const
Definition Object.cpp:2112
@ SMSG_SPELLDAMAGESHIELD
Definition Opcodes.h:621

References CalcAbsorbResist(), DealDamage(), DealDamageMods(), DamageInfo::GetAbsorb(), GetAuraEffectsByType(), DamageInfo::GetDamage(), Object::GetGUID(), Object::GetGUID(), GetHealth(), SpellInfo::GetSchoolMask(), SpellInfo::Id, IsImmunedToDamage(), WorldObject::SendMessageToSet(), SendSpellDamageImmune(), SendSpellMiss(), SMSG_SPELLDAMAGESHIELD, SPELL_AURA_DAMAGE_SHIELD, SPELL_DIRECT_DAMAGE, SpellDamageBonusTaken(), and SpellHitResult().

Referenced by DealDamage(), and DealMeleeDamage().

◆ DealHeal()

int32 Unit::DealHeal ( Unit healer,
Unit victim,
uint32  addhealth 
)
static
8068{
8069 int32 gain = 0;
8070
8071 if (healer)
8072 {
8073 if (victim->IsAIEnabled)
8074 victim->GetAI()->HealReceived(healer, addhealth);
8075
8076 if (healer->IsAIEnabled)
8077 healer->GetAI()->HealDone(victim, addhealth);
8078 }
8079
8080 if (addhealth)
8081 gain = victim->ModifyHealth(int32(addhealth));
8082
8083 // Hook for OnHeal Event
8084 sScriptMgr->OnHeal(healer, victim, (uint32&)gain);
8085
8086 Unit* unit = healer;
8087
8088 if (healer && healer->IsCreature() && healer->ToCreature()->IsTotem())
8089 unit = healer->GetOwner();
8090
8091 if (!unit)
8092 return gain;
8093
8094 if (Player* player = unit->ToPlayer())
8095 {
8096 if (Battleground* bg = player->GetBattleground())
8097 bg->UpdatePlayerScore(player, SCORE_HEALING_DONE, gain);
8098
8099 // use the actual gain, as the overheal shall not be counted, skip gain 0 (it ignored anyway in to criteria)
8100 if (gain && player->InBattleground()) // pussywizard: InBattleground() optimization
8101 player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HEALING_DONE, gain, 0, victim);
8102
8103 //player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEAL_CASTED, addhealth); // pussywizard: optimization
8104 }
8105
8106 /*if (Player* player = victim->ToPlayer())
8107 {
8108 //player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_TOTAL_HEALING_RECEIVED, gain); // pussywizard: optimization
8109 //player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEALING_RECEIVED, addhealth); // pussywizard: optimization
8110 }*/
8111
8112 return gain;
8113}
@ SCORE_HEALING_DONE
Definition BattlegroundScore.h:33
@ ACHIEVEMENT_CRITERIA_TYPE_HEALING_DONE
Definition DBCEnums.h:169
virtual void HealReceived(Unit *, uint32 &)
Called when the creature receives heal.
Definition UnitAI.h:374
virtual void HealDone(Unit *, uint32 &)
Called when the unit heals.
Definition UnitAI.h:380

References ACHIEVEMENT_CRITERIA_TYPE_HEALING_DONE, GetAI(), GetOwner(), UnitAI::HealDone(), UnitAI::HealReceived(), IsAIEnabled, Object::IsCreature(), IsTotem(), ModifyHealth(), SCORE_HEALING_DONE, sScriptMgr, Object::ToCreature(), and Object::ToPlayer().

Referenced by AuraEffect::HandlePeriodicHealAurasTick(), HealBySpell(), and npc_crok_scourgebane::npc_crok_scourgebaneAI::UpdateAI().

◆ DealMeleeDamage()

void Unit::DealMeleeDamage ( CalcDamageInfo damageInfo,
bool  durabilityLoss 
)
2020{
2021 Unit* victim = damageInfo->target;
2022
2023 auto canTakeMeleeDamage = [&]()
2024 {
2025 return victim->IsAlive() && !victim->IsInFlight() && (!victim->IsCreature() || !victim->ToCreature()->IsEvadingAttacks());
2026 };
2027
2028 if (!canTakeMeleeDamage())
2029 {
2030 return;
2031 }
2032
2033 // Hmmmm dont like this emotes client must by self do all animations
2034 if (damageInfo->HitInfo & HITINFO_CRITICALHIT)
2036 if (damageInfo->blocked_amount && damageInfo->TargetState != VICTIMSTATE_BLOCKS)
2038
2039 // Parry haste is enabled if it's not a creature or if the creature doesn't have the NO_PARRY_HASTEN flag.
2040 bool isParryHasteEnabled = !victim->IsCreature() ||
2042 if (damageInfo->TargetState == VICTIMSTATE_PARRY && isParryHasteEnabled)
2043 {
2044 // Get attack timers
2045 float offtime = float(victim->getAttackTimer(OFF_ATTACK));
2046 float basetime = float(victim->getAttackTimer(BASE_ATTACK));
2047 // Reduce attack time
2048 if (victim->HasOffhandWeaponForAttack() && offtime < basetime)
2049 {
2050 float percent20 = victim->GetAttackTime(OFF_ATTACK) * 0.20f;
2051 float percent60 = 3.0f * percent20;
2052 if (offtime > percent20 && offtime <= percent60)
2053 victim->setAttackTimer(OFF_ATTACK, uint32(percent20));
2054 else if (offtime > percent60)
2055 {
2056 offtime -= 2.0f * percent20;
2057 victim->setAttackTimer(OFF_ATTACK, uint32(offtime));
2058 }
2059 }
2060 else
2061 {
2062 float percent20 = victim->GetAttackTime(BASE_ATTACK) * 0.20f;
2063 float percent60 = 3.0f * percent20;
2064 if (basetime > percent20 && basetime <= percent60)
2065 victim->setAttackTimer(BASE_ATTACK, uint32(percent20));
2066 else if (basetime > percent60)
2067 {
2068 basetime -= 2.0f * percent20;
2069 victim->setAttackTimer(BASE_ATTACK, uint32(basetime));
2070 }
2071 }
2072 }
2073
2074 for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
2075 {
2076 if (!canTakeMeleeDamage() || (!damageInfo->damages[i].damage && !damageInfo->damages[i].absorb && !damageInfo->damages[i].resist))
2077 {
2078 continue;
2079 }
2080
2081 // Call default DealDamage
2082 CleanDamage cleanDamage(damageInfo->cleanDamage, damageInfo->damages[i].absorb, damageInfo->attackType, damageInfo->hitOutCome);
2083 Unit::DealDamage(this, victim, damageInfo->damages[i].damage, &cleanDamage, DIRECT_DAMAGE, SpellSchoolMask(damageInfo->damages[i].damageSchoolMask), nullptr, durabilityLoss);
2084 }
2085
2086 // gain rage if attack is fully blocked, dodged or parried
2088 {
2089 switch (damageInfo->attackType)
2090 {
2091 case BASE_ATTACK:
2092 case OFF_ATTACK:
2093 {
2094 uint32 weaponSpeedHitFactor = uint32(GetAttackTime(damageInfo->attackType) / 1000.0f * (damageInfo->attackType == BASE_ATTACK ? 3.5f : 1.75f));
2095 RewardRage(damageInfo->cleanDamage, weaponSpeedHitFactor, true);
2096 break;
2097 }
2098 default:
2099 break;
2100 }
2101 }
2102
2103 // If this is a creature and it attacks from behind it has a probability to daze it's victim
2104 if ((damageInfo->damages[0].damage + damageInfo->damages[1].damage) && ((damageInfo->hitOutCome == MELEE_HIT_CRIT || damageInfo->hitOutCome == MELEE_HIT_CRUSHING || damageInfo->hitOutCome == MELEE_HIT_NORMAL || damageInfo->hitOutCome == MELEE_HIT_GLANCING) &&
2105 !IsPlayer() && !ToCreature()->IsControlledByPlayer() && !victim->HasInArc(M_PI, this)
2106 && (victim->IsPlayer() || !victim->ToCreature()->isWorldBoss()) && !victim->IsVehicle()))
2107 {
2108 // -probability is between 0% and 40%
2109 // 20% base chance
2110 float Probability = 20.0f;
2111
2112 // there is a newbie protection, at level 10 just 7% base chance; assuming linear function
2113 if (victim->GetLevel() < 30)
2114 Probability = 0.65f * victim->GetLevel() + 0.5f;
2115
2116 uint32 VictimDefense = victim->GetDefenseSkillValue();
2118 uint32 AttackerMeleeSkill = GetUnitMeleeSkill();
2119
2120 // xinef: fix daze mechanics
2121 Probability -= ((float)VictimDefense + (float)VictimAuraDefense - AttackerMeleeSkill) * 0.1428f;
2122
2123 if (Probability > 40.0f)
2124 Probability = 40.0f;
2125
2126 // Daze application
2127 if (sWorld->getBoolConfig(CONFIG_ENABLE_DAZE))
2128 if (roll_chance_f(std::max(0.0f, Probability)))
2129 CastSpell(victim, 1604, true);
2130 }
2131
2132 if (IsPlayer())
2133 {
2134 DamageInfo dmgInfo(*damageInfo);
2135 ToPlayer()->CastItemCombatSpell(victim, damageInfo->attackType, damageInfo->procVictim, dmgInfo.GetHitMask());
2136 }
2137
2138 // Do effect if any damage done to target
2139 if (damageInfo->damages[0].damage + damageInfo->damages[1].damage)
2140 DealDamageShieldDamage(victim);
2141}
@ CREATURE_FLAG_EXTRA_NO_PARRY_HASTEN
Definition CreatureData.h:49
@ EMOTE_ONESHOT_WOUND_CRITICAL
Definition SharedDefines.h:1928
@ EMOTE_ONESHOT_PARRY_SHIELD
Definition SharedDefines.h:1934
@ SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_CHANCE
Definition SpellAuraDefines.h:250
@ CONFIG_ENABLE_DAZE
Definition WorldConfig.h:149
bool isWorldBoss() const
Definition Creature.h:124
void CastItemCombatSpell(Unit *target, WeaponAttackType attType, uint32 procVictim, uint32 procEx)
Definition Player.cpp:7221
uint32 GetUnitMeleeSkill(Unit const *target=nullptr) const
Definition Unit.h:1190
uint32 GetDefenseSkillValue(Unit const *target=nullptr) const
Definition Unit.cpp:3801
bool IsInFlight() const
Definition Unit.h:1706
void HandleEmoteCommand(uint32 emoteId)
Definition Unit.cpp:2197
bool HasFlagsExtra(uint32 flag) const
Definition CreatureData.h:278
bool HasInArc(float arcangle, const Position *pos, float targetRadius=0.0f) const
Definition Position.cpp:148

References CalcDamageInfo::absorb, CalcDamageInfo::attackType, BASE_ATTACK, CalcDamageInfo::blocked_amount, Player::CastItemCombatSpell(), CastSpell(), CalcDamageInfo::cleanDamage, CONFIG_ENABLE_DAZE, CREATURE_FLAG_EXTRA_NO_PARRY_HASTEN, CalcDamageInfo::damage, CalcDamageInfo::damages, CalcDamageInfo::damageSchoolMask, DealDamage(), DealDamageShieldDamage(), DIRECT_DAMAGE, EMOTE_ONESHOT_PARRY_SHIELD, EMOTE_ONESHOT_WOUND_CRITICAL, GetAttackTime(), getAttackTimer(), Creature::GetCreatureTemplate(), GetDefenseSkillValue(), DamageInfo::GetHitMask(), GetLevel(), GetTotalAuraModifier(), GetUnitMeleeSkill(), HandleEmoteCommand(), HasActivePowerType(), CreatureTemplate::HasFlagsExtra(), Position::HasInArc(), HasOffhandWeaponForAttack(), CalcDamageInfo::HitInfo, HITINFO_CRITICALHIT, CalcDamageInfo::hitOutCome, IsAlive(), IsControlledByPlayer(), Object::IsCreature(), Creature::IsEvadingAttacks(), IsInFlight(), Object::IsPlayer(), IsVehicle(), Creature::isWorldBoss(), MAX_ITEM_PROTO_DAMAGES, MELEE_HIT_CRIT, MELEE_HIT_CRUSHING, MELEE_HIT_GLANCING, MELEE_HIT_NORMAL, OFF_ATTACK, POWER_RAGE, CalcDamageInfo::procVictim, CalcDamageInfo::resist, RewardRage(), roll_chance_f(), setAttackTimer(), SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_CHANCE, sWorld, CalcDamageInfo::target, CalcDamageInfo::TargetState, Object::ToCreature(), Object::ToPlayer(), VICTIMSTATE_BLOCKS, VICTIMSTATE_DODGE, and VICTIMSTATE_PARRY.

Referenced by AttackerStateUpdate(), and spell_dk_dancing_rune_weapon::HandleProc().

◆ DealSpellDamage()

void Unit::DealSpellDamage ( SpellNonMeleeDamage damageInfo,
bool  durabilityLoss,
Spell const *  spell = nullptr 
)
1652{
1653 if (damageInfo == 0)
1654 return;
1655
1656 Unit* victim = damageInfo->target;
1657
1658 if (!victim)
1659 return;
1660
1661 if (!victim->IsAlive() || victim->IsInFlight() || (victim->IsCreature() && victim->ToCreature()->IsEvadingAttacks()))
1662 return;
1663
1664 SpellInfo const* spellProto = damageInfo->spellInfo;
1665 if (!spellProto)
1666 {
1667 LOG_DEBUG("entities.unit", "Unit::DealSpellDamage has wrong damageInfo");
1668 return;
1669 }
1670
1671 // Call default DealDamage
1672 CleanDamage cleanDamage(damageInfo->cleanDamage, damageInfo->absorb, BASE_ATTACK, MELEE_HIT_NORMAL);
1673 Unit::DealDamage(this, victim, damageInfo->damage, &cleanDamage, SPELL_DIRECT_DAMAGE, SpellSchoolMask(damageInfo->schoolMask), spellProto, durabilityLoss, false, spell);
1674}
SpellInfo const * spellInfo
Definition Unit.h:516

References SpellNonMeleeDamage::absorb, BASE_ATTACK, SpellNonMeleeDamage::cleanDamage, SpellNonMeleeDamage::damage, DealDamage(), IsAlive(), Object::IsCreature(), Creature::IsEvadingAttacks(), IsInFlight(), LOG_DEBUG, MELEE_HIT_NORMAL, SpellNonMeleeDamage::schoolMask, SPELL_DIRECT_DAMAGE, SpellNonMeleeDamage::spellInfo, SpellNonMeleeDamage::target, and Object::ToCreature().

Referenced by Spell::DoAllEffectOnTarget(), spell_sindragosa_s_fury::HandleDummy(), AuraEffect::HandlePeriodicPowerBurnAuraTick(), and AuraEffect::HandleProcTriggerDamageAuraProc().

◆ DelayOwnedAuras()

void Unit::DelayOwnedAuras ( uint32  spellId,
ObjectGuid  caster,
int32  delaytime 
)
5752{
5753 AuraMapBoundsNonConst range = m_ownedAuras.equal_range(spellId);
5754 for (; range.first != range.second; ++range.first)
5755 {
5756 Aura* aura = range.first->second;
5757 if (!caster || aura->GetCasterGUID() == caster)
5758 {
5759 if (aura->GetDuration() < delaytime)
5760 aura->SetDuration(0);
5761 else
5762 aura->SetDuration(aura->GetDuration() - delaytime);
5763
5764 // update for out of range group members (on 1 slot use)
5766 LOG_DEBUG("spells.aura", "Aura {} partially interrupted on unit {}, new duration: {} ms", aura->GetId(), GetGUID().ToString(), aura->GetDuration());
5767 }
5768 }
5769}
int32 GetDuration() const
Definition SpellAuras.h:133
void SetNeedClientUpdateForTargets() const
Definition SpellAuras.cpp:1204
void SetDuration(int32 duration, bool withMods=false)
Definition SpellAuras.cpp:810
std::pair< AuraMap::iterator, AuraMap::iterator > AuraMapBoundsNonConst
Definition Unit.h:671

References Aura::GetCasterGUID(), Aura::GetDuration(), Object::GetGUID(), Aura::GetId(), LOG_DEBUG, m_ownedAuras, Aura::SetDuration(), Aura::SetNeedClientUpdateForTargets(), and Position::ToString().

◆ DeleteCharmInfo()

void Unit::DeleteCharmInfo ( )
12684{
12685 if (!m_charmInfo)
12686 return;
12687
12689 delete m_charmInfo;
12690 m_charmInfo = nullptr;
12691}
void RestoreState()
Definition CharmInfo.cpp:46

References m_charmInfo, and CharmInfo::RestoreState().

Referenced by RemoveCharmedBy().

◆ DeMorph()

void Unit::DeMorph ( )
4557{
4559}
virtual void SetDisplayId(uint32 modelId, float displayScale=1.f)
Definition Unit.cpp:13166
uint32 GetNativeDisplayId() const
Definition Unit.h:1977

References GetNativeDisplayId(), and SetDisplayId().

Referenced by modify_commandscript::HandleMorphResetCommand().

◆ DisableRotate()

void Unit::DisableRotate ( bool  apply)
14540{
14541 if (!IsCreature())
14542 return;
14543
14544 if (apply)
14548}
@ UNIT_STATE_POSSESSED
Definition UnitDefines.h:189
void SetUnitFlag(UnitFlags flags)
UnitFlags available in UnitDefines.h.
Definition Unit.h:748

References HasUnitState(), Object::IsCreature(), RemoveUnitFlag(), SetUnitFlag(), UNIT_FLAG_POSSESSED, and UNIT_STATE_POSSESSED.

Referenced by boss_ingvar_the_plunderer::DamageTaken(), boss_thorim::DisableThorim(), npc_black_knight_skeletal_gryphon::npc_black_knight_skeletal_gryphonAI::DoAction(), boss_yoggsaron_sara::EnableSara(), boss_anub_arak::EnterEvadeMode(), boss_devourer_of_souls::EnterEvadeMode(), boss_garfrost::boss_garfrostAI::EnterEvadeMode(), boss_rotface::boss_rotfaceAI::EnterEvadeMode(), boss_varos::boss_varosAI::EnterEvadeMode(), boss_ignis::EnterEvadeMode(), boss_razorscale::EnterEvadeMode(), boss_ingvar_the_plunderer::EnterEvadeMode(), boss_garfrost::boss_garfrostAI::MovementInform(), boss_razorscale::MovementInform(), boss_devourer_of_souls::Reset(), boss_garfrost::boss_garfrostAI::Reset(), boss_varos::boss_varosAI::Reset(), boss_ignis::Reset(), boss_kologarn::Reset(), boss_ingvar_the_plunderer::Reset(), boss_devourer_of_souls::SpellHitTarget(), boss_anub_arak::UpdateAI(), boss_garfrost::boss_garfrostAI::UpdateAI(), boss_rotface::boss_rotfaceAI::UpdateAI(), boss_sindragosa::boss_sindragosaAI::UpdateAI(), boss_varos::boss_varosAI::UpdateAI(), boss_ignis::UpdateAI(), boss_razorscale::UpdateAI(), boss_ingvar_the_plunderer::UpdateAI(), and npc_black_knight_skeletal_gryphon::npc_black_knight_skeletal_gryphonAI::WaypointReached().

◆ DisableSpline()

◆ Dismount()

void Unit::Dismount ( )
10581{
10582 if (!IsMounted())
10583 return;
10584
10587
10588 if (Player* player = ToPlayer())
10589 {
10590 WorldPacket data(SMSG_MOVE_SET_COLLISION_HGT, GetPackGUID().size() + 4 + 4);
10591 data << GetPackGUID();
10592 data << player->GetSession()->GetOrderCounter(); // movement counter
10593 data << player->GetCollisionHeight();
10594 player->SendDirectMessage(&data);
10595 player->GetSession()->IncrementOrderCounter();
10596 }
10597
10598 WorldPacket data(SMSG_DISMOUNT, 8);
10599 data << GetPackGUID();
10600 SendMessageToSet(&data, true);
10601
10602 // dismount as a vehicle
10603 if (IsPlayer() && GetVehicleKit())
10604 {
10605 // Send other players that we are no longer a vehicle
10606 data.Initialize(SMSG_PLAYER_VEHICLE_DATA, 8 + 4);
10607 data << GetPackGUID();
10608 data << uint32(0);
10609 ToPlayer()->SendMessageToSet(&data, true);
10610 // Remove vehicle from player
10612 }
10613
10615
10616 // only resummon old pet if the player is already added to a map
10617 // this prevents adding a pet to a not created map which would otherwise cause a crash
10618 // (it could probably happen when logging in after a previous crash)
10619 if (Player* player = ToPlayer())
10620 {
10621 sScriptMgr->AnticheatSetUnderACKmount(player);
10622
10623 if (Pet* pPet = player->GetPet())
10624 {
10625 if (pPet->HasUnitFlag(UNIT_FLAG_STUNNED) && !pPet->HasUnitState(UNIT_STATE_STUNNED))
10626 pPet->RemoveUnitFlag(UNIT_FLAG_STUNNED);
10627 }
10628 else
10629 player->ResummonPetTemporaryUnSummonedIfAny();
10630
10631 // xinef: if we have charmed npc, remove stun also
10632 if (Unit* charm = player->GetCharm())
10633 if (charm->IsCreature() && !charm->HasUnitState(UNIT_STATE_STUNNED))
10634 charm->RemoveUnitFlag(UNIT_FLAG_STUNNED);
10635 }
10636}
@ AURA_INTERRUPT_FLAG_NOT_MOUNTED
Definition SpellDefines.h:49
@ UNIT_FLAG_STUNNED
Definition UnitDefines.h:275
@ UNIT_FLAG_MOUNT
Definition UnitDefines.h:284
@ UNIT_FIELD_MOUNTDISPLAYID
Definition UpdateFields.h:126
void SendMessageToSet(WorldPacket const *data, bool self) const override
Definition Player.cpp:5657
void RemoveVehicleKit()
Definition Unit.cpp:14996
@ SMSG_PLAYER_VEHICLE_DATA
Definition Opcodes.h:1221
@ SMSG_MOVE_SET_COLLISION_HGT
Definition Opcodes.h:1332
@ SMSG_DISMOUNT
Definition Opcodes.h:970

References AURA_INTERRUPT_FLAG_NOT_MOUNTED, GetCharm(), Object::GetPackGUID(), GetVehicleKit(), WorldPacket::Initialize(), IsMounted(), Object::IsPlayer(), RemoveAurasWithInterruptFlags(), RemoveUnitFlag(), RemoveVehicleKit(), WorldObject::SendMessageToSet(), Player::SendMessageToSet(), SetUInt32Value(), SMSG_DISMOUNT, SMSG_MOVE_SET_COLLISION_HGT, SMSG_PLAYER_VEHICLE_DATA, sScriptMgr, Object::ToPlayer(), UNIT_FIELD_MOUNTDISPLAYID, UNIT_FLAG_MOUNT, UNIT_FLAG_STUNNED, and UNIT_STATE_STUNNED.

Referenced by _EnterVehicle(), Creature::AtEngage(), Player::CleanupAfterTaxiFlight(), FlightPathMovementGenerator::DoFinalize(), BattlegroundWS::EventPlayerClickedOnFlag(), AuraEffect::HandleAuraMounted(), WorldSession::HandleCancelMountAuraOpcode(), misc_commandscript::HandleDismountCommand(), spell_mount_check_aura::HandleEffectPeriodic(), npc_scarlet_courier::npc_scarlet_courierAI::JustEngagedWith(), boss_mandokir::boss_mandokirAI::JustEngagedWith(), npc_koltira_deathweaver::npc_koltira_deathweaverAI::MovementInform(), boss_captain_skarloc::MovementInform(), spell_chapter5_light_of_dawn_aura::OnApply(), Creature::setDeathState(), npc_troll_volunteer::npc_troll_volunteerAI::SpellHit(), npc_magister_aledis::StartFight(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UnMountSelf(), and npc_thrall_bfu::npc_thrall_bfuAI::UpdateAI().

◆ EnergizeBySpell()

void Unit::EnergizeBySpell ( Unit victim,
uint32  SpellID,
uint32  Damage,
Powers  powertype 
)
8392{
8393 victim->ModifyPower(powerType, damage, false);
8394
8395 if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellID))
8396 victim->GetThreatMgr().ForwardThreatForAssistingMe(this, float(damage) / 2.0f, spellInfo, true);
8397
8398 SendEnergizeSpellLog(victim, spellID, damage, powerType);
8399}
void ForwardThreatForAssistingMe(Unit *assistant, float baseAmount, SpellInfo const *spell=nullptr, bool ignoreModifiers=false)
== AFFECT OTHERS' THREAT LISTS ==
Definition ThreatManager.cpp:760
void SendEnergizeSpellLog(Unit *victim, uint32 SpellID, uint32 Damage, Powers powertype)
Definition Unit.cpp:8380
ThreatManager & GetThreatMgr()
Definition Unit.h:951

References ThreatManager::ForwardThreatForAssistingMe(), GetThreatMgr(), ModifyPower(), SendEnergizeSpellLog(), and sSpellMgr.

Referenced by Spell::EffectEnergize(), Spell::EffectEnergizePct(), Spell::EffectPowerDrain(), and AuraEffect::HandlePeriodicTriggerSpellAuraTick().

◆ EngageWithTarget()

◆ EnterVehicle()

void Unit::EnterVehicle ( Unit base,
int8  seatId = -1 
)
15623{
15625
15626 if (Player* player = ToPlayer())
15627 {
15628 sScriptMgr->AnticheatSetUnderACKmount(player);
15629 }
15630}
@ TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE
Will ignore caster aura states including combat requirements and death state.
Definition SpellDefines.h:146
@ VEHICLE_SPELL_RIDE_HARDCODED
Definition VehicleDefines.h:52

References CastCustomSpell(), SPELLVALUE_BASE_POINT0, sScriptMgr, Object::ToPlayer(), TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE, and VEHICLE_SPELL_RIDE_HARDCODED.

Referenced by debug_commandscript::HandleDebugEnterVehicleCommand(), WorldSession::HandleEnterPlayerVehicle(), boss_mimiron::JustEngagedWith(), npc_pilgrims_bounty_chair::UpdateAI(), and boss_mimiron::UpdateAI().

◆ EnterVehicleUnattackable()

void Unit::EnterVehicleUnattackable ( Unit base,
int8  seatId = -1 
)

◆ ExecuteDelayedUnitAINotifyEvent()

void Unit::ExecuteDelayedUnitAINotifyEvent ( )
16439{
16441 if (!this->IsInWorld() || this->IsDuringRemoveFromWorld())
16442 return;
16443
16444 Acore::AIRelocationNotifier notifier(*this);
16445 float radius = 60.0f;
16446 Cell::VisitObjects(this, notifier, radius);
16447}
@ NOTIFY_AI_RELOCATION
Definition Object.h:70
void RemoveFromNotify(uint16 f)
Definition Object.h:664
Definition GridNotifiers.h:91
static void VisitObjects(WorldObject const *obj, T &visitor, float radius)
Definition CellImpl.h:165

References IsDuringRemoveFromWorld(), Object::IsInWorld(), NOTIFY_AI_RELOCATION, WorldObject::RemoveFromNotify(), and Cell::VisitObjects().

Referenced by Update().

◆ ExecuteDelayedUnitRelocationEvent()

void Unit::ExecuteDelayedUnitRelocationEvent ( )
16338{
16340 if (!this->IsInWorld() || this->IsDuringRemoveFromWorld())
16341 return;
16342
16343 if (this->HasSharedVision())
16344 for (SharedVisionList::const_iterator itr = this->GetSharedVisionList().begin(); itr != this->GetSharedVisionList().end(); ++itr)
16345 if (Player* player = (*itr))
16346 {
16347 if (player->IsOnVehicle(this) || !player->IsInWorld() || player->IsDuringRemoveFromWorld()) // players on vehicles have their own event executed (due to passenger relocation)
16348 continue;
16349 WorldObject* viewPoint = player;
16350 if (player->m_seer && player->m_seer->IsInWorld())
16351 viewPoint = player->m_seer;
16352 if (!viewPoint->IsPositionValid() || !player->IsPositionValid())
16353 continue;
16354
16355 if (Unit* active = viewPoint->ToUnit())
16356 {
16357 //if (active->IsVehicle()) // always check original unit here, last notify position is not relocated
16358 // active = player;
16359
16360 float dx = active->m_last_notify_position.GetPositionX() - active->GetPositionX();
16361 float dy = active->m_last_notify_position.GetPositionY() - active->GetPositionY();
16362 float dz = active->m_last_notify_position.GetPositionZ() - active->GetPositionZ();
16363 float distsq = dx * dx + dy * dy + dz * dz;
16364 float mindistsq = DynamicVisibilityMgr::GetReqMoveDistSq(active->FindMap()->GetEntry()->map_type);
16365 if (distsq < mindistsq)
16366 continue;
16367
16368 // this will be relocated below sharedvision!
16369 //active->m_last_notify_position.Relocate(active->GetPositionX(), active->GetPositionY(), active->GetPositionZ());
16370 }
16371
16372 Acore::PlayerRelocationNotifier notifier(*player);
16373 Cell::VisitObjects(viewPoint, notifier, player->GetSightRange());
16375 notifier.SendToSelf();
16376 }
16377
16378 if (Player* player = this->ToPlayer())
16379 {
16380 WorldObject* viewPoint = player;
16381 if (player->m_seer && player->m_seer->IsInWorld())
16382 viewPoint = player->m_seer;
16383
16384 if (viewPoint->GetMapId() != player->GetMapId() || !viewPoint->IsPositionValid() || !player->IsPositionValid())
16385 return;
16386
16387 if (Unit* active = viewPoint->ToUnit())
16388 {
16389 if (active->IsVehicle())
16390 active = player;
16391
16392 if (!player->GetFarSightDistance())
16393 {
16394 float dx = active->m_last_notify_position.GetPositionX() - active->GetPositionX();
16395 float dy = active->m_last_notify_position.GetPositionY() - active->GetPositionY();
16396 float dz = active->m_last_notify_position.GetPositionZ() - active->GetPositionZ();
16397 float distsq = dx * dx + dy * dy + dz * dz;
16398
16399 float mindistsq = DynamicVisibilityMgr::GetReqMoveDistSq(active->FindMap()->GetEntry()->map_type);
16400 if (distsq < mindistsq)
16401 return;
16402
16403 active->m_last_notify_position.Relocate(active->GetPositionX(), active->GetPositionY(), active->GetPositionZ());
16404 }
16405 }
16406
16408
16409 Acore::PlayerRelocationNotifier notifier(*player);
16410 Cell::VisitObjects(player->GetSightPosition().GetPositionX(), player->GetSightPosition().GetPositionY(), player->GetMap(), notifier, player->GetSightRange());
16411 Cell::VisitFarVisibleObjects(player->GetSightPosition().GetPositionX(), player->GetSightPosition().GetPositionY(), player->GetMap(), notifier, VISIBILITY_DISTANCE_GIGANTIC);
16412 notifier.SendToSelf();
16413
16415 }
16416 else if (Creature* unit = this->ToCreature())
16417 {
16418 if (!unit->IsPositionValid())
16419 return;
16420
16421 float dx = unit->m_last_notify_position.GetPositionX() - unit->GetPositionX();
16422 float dy = unit->m_last_notify_position.GetPositionY() - unit->GetPositionY();
16423 float dz = unit->m_last_notify_position.GetPositionZ() - unit->GetPositionZ();
16424 float distsq = dx * dx + dy * dy + dz * dz;
16425 float mindistsq = DynamicVisibilityMgr::GetReqMoveDistSq(unit->FindMap()->GetEntry()->map_type);
16426 if (distsq < mindistsq)
16427 return;
16428
16429 unit->m_last_notify_position.Relocate(unit->GetPositionX(), unit->GetPositionY(), unit->GetPositionZ());
16430
16431 Acore::CreatureRelocationNotifier relocate(*unit);
16432 Cell::VisitObjects(unit, relocate, unit->GetVisibilityRange());
16433
16435 }
16436}
#define MAX_VISIBILITY_DISTANCE
Definition ObjectDefines.h:30
#define VISIBILITY_DISTANCE_GIGANTIC
Definition ObjectDefines.h:34
@ NOTIFY_VISIBILITY_CHANGED
Definition Object.h:71
static float GetReqMoveDistSq(uint32 map_type)
Definition DynamicVisibility.h:53
void LoadGridsInRange(Position const &center, float radius)
Definition Map.cpp:225
Unit * ToUnit()
Definition Object.h:210
SharedVisionList const & GetSharedVisionList()
Definition Unit.h:1877
bool HasSharedVision() const
Definition Unit.h:1880
uint32 GetMapId() const
Definition Position.h:281
Definition Object.h:475
void AddToNotify(uint16 f)
Definition Object.cpp:3019
Definition GridNotifiers.h:83
Definition GridNotifiers.h:74
static void VisitFarVisibleObjects(WorldObject const *obj, T &visitor, float radius)
Definition CellImpl.h:181
bool IsPositionValid() const
Definition Position.cpp:183

References WorldObject::AddToNotify(), WorldObject::GetMap(), WorldLocation::GetMapId(), Position::GetPositionX(), DynamicVisibilityMgr::GetReqMoveDistSq(), GetSharedVisionList(), HasSharedVision(), IsDuringRemoveFromWorld(), Object::IsInWorld(), Position::IsPositionValid(), Map::LoadGridsInRange(), MAX_VISIBILITY_DISTANCE, NOTIFY_AI_RELOCATION, NOTIFY_VISIBILITY_CHANGED, WorldObject::RemoveFromNotify(), Acore::VisibleNotifier::SendToSelf(), Object::ToCreature(), Object::ToPlayer(), Object::ToUnit(), VISIBILITY_DISTANCE_GIGANTIC, Cell::VisitFarVisibleObjects(), and Cell::VisitObjects().

◆ ExitVehicle()

void Unit::ExitVehicle ( Position const *  exitPosition = nullptr)

This function can be called at upper level code to initialize an exit from the passenger's side.

The following call would not even be executed successfully as the SPELL_AURA_CONTROL_VEHICLE unapply handler already calls _ExitVehicle without specifying an exitposition. The subsequent call below would return on if (!m_vehicle).

To do: We need to allow SPELL_AURA_CONTROL_VEHICLE unapply handlers in spellscripts to specify exit coordinates and either store those per passenger, or we need to init spline movement based on those coordinates in unapply handlers, and relocate exiting passengers based on Unit::moveSpline data. Either way, Coming Soon(TM)

15719{
15721 if (!m_vehicle)
15722 return;
15723
15725 if (Player* player = ToPlayer())
15726 {
15727 player->SetCanTeleport(true);
15728 }
15732 /*_ExitVehicle(exitPosition);*/
15739
15740 if (Player* player = ToPlayer())
15741 {
15742 sScriptMgr->AnticheatSetUnderACKmount(player);
15743 }
15744}
Unit * GetVehicleBase() const
Definition Unit.cpp:15011

References Object::GetGUID(), GetVehicleBase(), m_vehicle, RemoveAurasByType(), SPELL_AURA_CONTROL_VEHICLE, sScriptMgr, and Object::ToPlayer().

Referenced by _EnterVehicle(), Player::ActivateTaxiPathTo(), MotionTransport::DelayedTeleportTransport(), boss_mimiron::EnterEvadeMode(), npc_ulduar_leviathan_mkii::EnterEvadeMode(), npc_ulduar_vx001::EnterEvadeMode(), npc_ulduar_aerial_command_unit::EnterEvadeMode(), WorldSession::HandleDismissControlledVehicle(), spell_warhead_detonate::HandleDummy(), WorldSession::HandleEjectPassenger(), spell_ulduar_squeezed_lifeless::HandleInstaKill(), WorldSession::HandlePlayerLoginToCharInWorld(), WorldSession::HandleRequestVehicleExit(), spell_vehicle_throw_passenger::HandleScript(), boss_kologarn_arms::JustDied(), spell_dragonblight_devour_ghoul_periodic::OnRemove(), Player::ProcessDelayedOperations(), RemoveFromWorld(), Player::StopCastingCharm(), and Player::TeleportTo().

◆ FindCurrentSpellBySpellId()

◆ FinishSpell()

void Unit::FinishSpell ( CurrentSpellTypes  spellType,
bool  ok = true 
)
4286{
4287 Spell* spell = m_currentSpells[spellType];
4288 if (!spell)
4289 return;
4290
4291 if (spellType == CURRENT_CHANNELED_SPELL)
4292 spell->SendChannelUpdate(0);
4293
4294 spell->finish(ok);
4295}
void SendChannelUpdate(uint32 time)
Definition Spell.cpp:5141

References CURRENT_CHANNELED_SPELL, Spell::finish(), m_currentSpells, and Spell::SendChannelUpdate().

Referenced by AuraEffect::HandleFeignDeath(), AuraEffect::HandleModStealth(), boss_lord_marrowgar::UpdateAI(), and GameObject::Use().

◆ FollowerAdded()

void Unit::FollowerAdded ( AbstractFollower f)
inline
1894{ m_followingMe.insert(f); }
std::unordered_set< AbstractFollower * > m_followingMe
Definition Unit.h:2238

References m_followingMe.

Referenced by AbstractFollower::SetTarget().

◆ FollowerRemoved()

void Unit::FollowerRemoved ( AbstractFollower f)
inline
1895{ m_followingMe.erase(f); }

References m_followingMe.

Referenced by AbstractFollower::SetTarget().

◆ GetAffectingPlayer()

Player * Unit::GetAffectingPlayer ( ) const

◆ GetAI()

UnitAI * Unit::GetAI ( )
inline
693{ return i_AI; }

References i_AI.

Referenced by CalculateMeleeDamage(), CalculateSpellDamageTaken(), spell_algalon_big_bang::CheckTargets(), DealDamage(), DealHeal(), CombatReference::EndCombat(), spell_send_mug_target_picker::FilterTargets(), spell_blood_queen_bloodbolt::FilterTargets(), spell_kologarn_focused_eyebeam::FilterTargetsInitial(), npc_dream_fog::npc_dream_fogAI::GetRandomUnitFromDragonThreatList(), WorldState::HandleActiveZone(), BattlegroundIC::HandleCapturedNodes(), spell_send_mug_target_picker::HandleDummy(), spell_fatal_strike::HandleDummy(), spell_magtheridon_shadow_grasp_visual::HandleDummyApply(), spell_mount_check_aura::HandleEffectPeriodic(), spell_tharon_ja_dummy_aura::HandleEffectRemove(), spell_mirkblood_blood_mirror_target_picker::HandleHit(), spell_random_aggro::HandleOnHit(), spell_shadow_sickle_periodic_damage::HandlePeriodic(), spell_grip::HandlePeriodic(), spell_kiljaeden_armageddon_periodic_aura::HandlePeriodic(), AuraEffect::HandlePeriodicDamageAurasTick(), AuraEffect::HandlePeriodicHealAurasTick(), AuraEffect::HandlePeriodicHealthLeechAuraTick(), spell_frostwarden_handler_focus_fire::HandleScript(), spell_ayamiss_swarmer_start_loop::HandleScript(), spell_pursue::HandleScript(), spell_xt002_gravity_bomb_damage::HandleScript(), spell_the_lich_king_quake::HandleSendEvent(), spell_black_knight_ghoul_claw::HandleSpellHit(), npc_risen_guardian::npc_risen_guardianAI::IsSummonedBy(), npc_risen_guardian::npc_risen_guardianAI::KilledUnit(), ModifyPower(), npc_marzon_silent_blade::npc_marzon_silent_bladeAI::MovementInform(), npc_pet_mage_mirror_image::MySelectNextTarget(), CombatManager::NotifyAICombat(), spell_claw_swipe_check::OnApply(), achievement_respect_your_elders::OnCheck(), achievement_hadronox_denied::OnCheck(), achievement_watch_him_die::OnCheck(), achievement_better_off_dred::OnCheck(), achievement_oh_novos::OnCheck(), achievement_share_the_love::OnCheck(), achievement_snakes_whyd_it_have_to_be_snakes::OnCheck(), achievement_im_on_a_boat::OnCheck(), achievement_all_you_can_eat::OnCheck(), achievement_been_waiting_long_time::OnCheck(), achievement_neck_deep_in_vile::OnCheck(), achievement_portal_jockey::OnCheck(), achievement_chaos_theory::OnCheck(), achievement_split_personality::OnCheck(), achievement_algalon_he_feeds_on_your_tears::OnCheck(), achievement_algalon_herald_of_the_titans::OnCheck(), achievement_flame_leviathan_towers::OnCheck(), achievement_flame_leviathan_shutout::OnCheck(), achievement_freya_getting_back_to_nature::OnCheck(), achievement_freya_knock_on_wood::OnCheck(), achievement_yogg_saron_drive_me_crazy::OnCheck(), achievement_yogg_saron_kiss_and_make_up::OnCheck(), achievement_intense_cold::OnCheck(), achievement_once_bitten_twice_shy::OnCheck(), spell_xt002_gravity_bomb_aura::OnPeriodic(), spell_grip::OnRemove(), spell_claw_swipe_check::OnRemove(), npc_dark_fiend::Reset(), spell_marrowgar_coldflame::SelectTarget(), boss_yoggsaron_immortal_guardian::SpellHit(), CombatReference::SuppressFor(), CombatManager::SuppressPvPCombat(), and CombatManager::Update().

◆ GetAllMinionsByEntry()

void Unit::GetAllMinionsByEntry ( std::list< Creature * > &  Minions,
uint32  entry 
)
7962{
7963 for (Unit::ControlSet::iterator itr = m_Controlled.begin(); itr != m_Controlled.end();)
7964 {
7965 Unit* unit = *itr;
7966 ++itr;
7967 if (unit->GetEntry() == entry && unit->IsCreature()
7968 && unit->ToCreature()->IsSummon()) // minion, actually
7969 Minions.push_back(unit->ToCreature());
7970 }
7971}
bool IsSummon() const
Definition Unit.h:794

References Object::GetEntry(), Object::IsCreature(), IsSummon(), m_Controlled, and Object::ToCreature().

Referenced by spell_item_gift_of_the_harvester::CheckRequirement(), and spell_dk_dancing_rune_weapon::HandleApply().

◆ GetAPMultiplier()

float Unit::GetAPMultiplier ( WeaponAttackType  attType,
bool  normalized 
)
13635{
13636 if (!normalized || !IsPlayer())
13637 return float(GetAttackTime(attType)) / 1000.0f;
13638
13639 Item* Weapon = ToPlayer()->GetWeaponForAttack(attType, true);
13640 if (!Weapon)
13641 return 2.4f; // fist attack
13642
13643 switch (Weapon->GetTemplate()->InventoryType)
13644 {
13645 case INVTYPE_2HWEAPON:
13646 return 3.3f;
13647 case INVTYPE_RANGED:
13649 case INVTYPE_THROWN:
13650 return 2.8f;
13651 case INVTYPE_WEAPON:
13654 default:
13655 return Weapon->GetTemplate()->SubClass == ITEM_SUBCLASS_WEAPON_DAGGER ? 1.7f : 2.4f;
13656 }
13657}
@ ITEM_SUBCLASS_WEAPON_DAGGER
Definition ItemTemplate.h:359
@ INVTYPE_RANGED
Definition ItemTemplate.h:271
@ INVTYPE_THROWN
Definition ItemTemplate.h:281
@ INVTYPE_RANGEDRIGHT
Definition ItemTemplate.h:282
@ INVTYPE_WEAPON
Definition ItemTemplate.h:269
@ INVTYPE_WEAPONMAINHAND
Definition ItemTemplate.h:277
@ INVTYPE_WEAPONOFFHAND
Definition ItemTemplate.h:278
@ INVTYPE_2HWEAPON
Definition ItemTemplate.h:273
Weapon
Definition boss_arlokk.cpp:67
Definition Item.h:220
ItemTemplate const * GetTemplate() const
Definition Item.cpp:544
Item * GetWeaponForAttack(WeaponAttackType attackType, bool useable=false) const
Definition PlayerStorage.cpp:490
uint32 SubClass
Definition ItemTemplate.h:622

References GetAttackTime(), Item::GetTemplate(), Player::GetWeaponForAttack(), INVTYPE_2HWEAPON, INVTYPE_RANGED, INVTYPE_RANGEDRIGHT, INVTYPE_THROWN, INVTYPE_WEAPON, INVTYPE_WEAPONMAINHAND, INVTYPE_WEAPONOFFHAND, Object::IsPlayer(), ITEM_SUBCLASS_WEAPON_DAGGER, ItemTemplate::SubClass, and Object::ToPlayer().

Referenced by Creature::CalculateMinMaxDamage(), Player::CalculateMinMaxDamage(), and MeleeDamageBonusDone().

◆ GetAppliedAuras() [1/2]

◆ GetAppliedAuras() [2/2]

AuraApplicationMap const & Unit::GetAppliedAuras ( ) const
inline
1384{ return m_appliedAuras; }

References m_appliedAuras.

◆ GetArmor()

◆ getAttackerForHelper()

Unit * Unit::getAttackerForHelper ( ) const

◆ getAttackers()

◆ GetAttackTime()

◆ getAttackTimer()

◆ GetAura()

Aura * Unit::GetAura ( uint32  spellId,
ObjectGuid  casterGUID = ObjectGuid::Empty,
ObjectGuid  itemCasterGUID = ObjectGuid::Empty,
uint8  reqEffMask = 0 
) const
5871{
5872 AuraApplication* aurApp = GetAuraApplication(spellId, casterGUID, itemCasterGUID, reqEffMask);
5873 return aurApp ? aurApp->GetBase() : nullptr;
5874}
AuraApplication * GetAuraApplication(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraApplication *except=nullptr) const
Definition Unit.cpp:5851

References GetAuraApplication(), and AuraApplication::GetBase().

Referenced by Player::_addSpell(), Pet::addSpell(), Player::ApplyEquipCooldown(), spell_freezing_cloud_damage::CanBeAppliedOn(), spell_mage_burning_determination::CheckProc(), npc_ulduar_iron_construct::DamageTaken(), boss_deathbringer_saurfang::boss_deathbringer_saurfangAI::DoAction(), boss_freya::DoAction(), Spell::DoTriggersOnSpellHit(), Spell::EffectScriptEffect(), Spell::EffectTitanGrip(), Spell::EffectWeaponDmg(), getOrphanGUID(), spell_rog_mutilate::HandleAfterCast(), spell_dk_scourge_strike::HandleAfterHit(), spell_warl_seduction::HandleAuraApply(), AuraEffect::HandleAuraDummy(), AuraEffect::HandleAuraLinked(), Aura::HandleAuraSpecificMods(), misc_commandscript::HandleAuraStacksCommand(), deserter_commandscript::HandleDeserterAdd(), deserter_commandscript::HandleDeserterRemove(), deserter_commandscript::HandleDeserterRemoveAll(), spell_karazhan_wrath_titans_stacker::HandleDummy(), spell_charge_shield_bomber::HandleDummy(), spell_ahn_kahet_swarmer_aura::HandleDummy(), spell_item_pygmy_oil::HandleDummy(), spell_yogg_saron_sanity_well_aura::HandleEffectPeriodic(), spell_brewfest_main_ram_buff::HandleEffectPeriodic(), spell_hodir_flash_freeze_aura::HandleEffectPeriodic(), spell_sindragosa_frost_breath::HandleInfusion(), spell_mage_glyph_of_polymorph::HandleProc(), spell_warr_extra_proc::HandleProc(), spell_dk_blood_caked_blade::HandleProc(), spell_item_trinket_stack< StackSpell, TriggerSpell >::HandleProc(), spell_item_tiny_abomination_in_a_jar::HandleProc(), spell_item_tiny_abomination_in_a_jar_hero::HandleProc(), AuraEffect::HandleRaidProcFromChargeWithValueAuraProc(), spell_putricide_unstable_experiment::HandleScript(), spell_festergut_gastric_bloat::HandleScript(), spell_putricide_eat_ooze::HandleScript(), spell_rotface_large_ooze_combine::HandleScript(), spell_yogg_saron_sanity_reduce::HandleScriptEffect(), spell_dk_pestilence::HandleScriptEffect(), spell_pri_lightwell::HandleScriptEffect(), npc_pet_dk_ebon_gargoyle::InitializeAI(), npc_spiritual_insight::npc_spiritual_insightAI::IsSummonedBy(), npc_gunship::npc_gunshipAI::JustDied(), boss_high_nethermancer_zerevor::JustEngagedWith(), npc_brew_bubble::MoveInLineOfSight(), npc_brewfest_keg_reciver::MoveInLineOfSight(), npc_air_force_bots::npc_air_force_botsAI::MoveInLineOfSight(), spell_summoning_rhyme_aura::PeriodicTick(), Player::ProcessDelayedOperations(), BattlefieldWG::PromotePlayer(), RemoveAurasDueToSpellBySteal(), Player::ResurrectPlayer(), SetAuraStack(), boss_anomalus::SetData(), npc_ulduar_iron_construct::SpellHit(), npc_pilgrims_bounty_chair::SpellHit(), boss_jaraxxus::boss_jaraxxusAI::SpellHit(), boss_sindragosa::boss_sindragosaAI::SpellHitTarget(), npc_ulduar_hodir_shaman::SpellHitTarget(), boss_yoggsaron_sara::SpellHitTarget(), npc_twilight_summon::UpdateAI(), boss_lord_marrowgar::UpdateAI(), boss_freya::UpdateAI(), boss_freya_elder_brightleaf::UpdateAI(), npc_ulduar_iron_construct::UpdateAI(), npc_tournament_training_dummy::npc_tournament_training_dummyAI::UpdateAI(), and Player::UpdateTitansGrip().

◆ GetAuraApplication()

AuraApplication * Unit::GetAuraApplication ( uint32  spellId,
ObjectGuid  casterGUID = ObjectGuid::Empty,
ObjectGuid  itemCasterGUID = ObjectGuid::Empty,
uint8  reqEffMask = 0,
AuraApplication except = nullptr 
) const
5852{
5853 AuraApplicationMapBounds range = m_appliedAuras.equal_range(spellId);
5854 for (; range.first != range.second; ++range.first)
5855 {
5856 AuraApplication* app = range.first->second;
5857 Aura const* aura = app->GetBase();
5858
5859 if (((aura->GetEffectMask() & reqEffMask) == reqEffMask)
5860 && (!casterGUID || aura->GetCasterGUID() == casterGUID)
5861 && (!itemCasterGUID || aura->GetCastItemGUID() == itemCasterGUID)
5862 && (!except || except != app))
5863 {
5864 return app;
5865 }
5866 }
5867 return nullptr;
5868}
uint8 GetEffectMask() const
Definition SpellAuras.h:177
ObjectGuid GetCastItemGUID() const
Definition SpellAuras.h:103
std::pair< AuraApplicationMap::const_iterator, AuraApplicationMap::const_iterator > AuraApplicationMapBounds
Definition Unit.h:674

References AuraApplication::GetBase(), Aura::GetCasterGUID(), Aura::GetCastItemGUID(), Aura::GetEffectMask(), and m_appliedAuras.

Referenced by AuraApplication::_Remove(), GetAura(), GetAuraApplicationOfRankedSpell(), HasAura(), and Spell::UpdateChanneledTargetList().

◆ GetAuraApplicationOfRankedSpell()

AuraApplication * Unit::GetAuraApplicationOfRankedSpell ( uint32  spellId,
ObjectGuid  casterGUID = ObjectGuid::Empty,
ObjectGuid  itemCasterGUID = ObjectGuid::Empty,
uint8  reqEffMask = 0,
AuraApplication except = nullptr 
) const
5877{
5878 uint32 rankSpell = sSpellMgr->GetFirstSpellInChain(spellId);
5879 while (rankSpell)
5880 {
5881 if (AuraApplication* aurApp = GetAuraApplication(rankSpell, casterGUID, itemCasterGUID, reqEffMask, except))
5882 return aurApp;
5883 rankSpell = sSpellMgr->GetNextSpellInChain(rankSpell);
5884 }
5885 return nullptr;
5886}

References GetAuraApplication(), and sSpellMgr.

Referenced by spell_warl_drain_soul::CheckProc(), spell_warl_improved_drain_soul::CheckProc(), and GetAuraOfRankedSpell().

◆ GetAuraCount()

uint32 Unit::GetAuraCount ( uint32  spellId) const
5972{
5973 uint32 count = 0;
5974 AuraApplicationMapBounds range = m_appliedAuras.equal_range(spellId);
5975
5976 for (AuraApplicationMap::const_iterator itr = range.first; itr != range.second; ++itr)
5977 {
5978 if (itr->second->GetBase()->GetStackAmount() == 0)
5979 ++count;
5980 else
5981 count += (uint32)itr->second->GetBase()->GetStackAmount();
5982 }
5983
5984 return count;
5985}

References m_appliedAuras.

Referenced by npc_brew_bubble::MoveInLineOfSight(), spell_valithria_suppression_aura::OnApply(), achievement_consumption_junction::OnCheck(), achievement_assembly_of_iron::OnCheck(), achievement_cant_do_that_while_stunned::OnCheck(), spell_valithria_suppression_aura::OnRemove(), SmartScript::ProcessEvent(), boss_pyroguard_emberseer::SpellHit(), spell_black_temple_spell_absorption_aura::Update(), and npc_infra_green_bomber_generic::npc_infra_green_bomber_genericAI::UpdateAI().

◆ GetAuraEffect() [1/3]

AuraEffect * Unit::GetAuraEffect ( AuraType  type,
SpellFamilyNames  family,
uint32  familyFlag1,
uint32  familyFlag2,
uint32  familyFlag3,
ObjectGuid  casterGUID = ObjectGuid::Empty 
) const
5824{
5825 AuraEffectList const& auras = GetAuraEffectsByType(type);
5826 for (AuraEffectList::const_iterator i = auras.begin(); i != auras.end(); ++i)
5827 {
5828 SpellInfo const* spell = (*i)->GetSpellInfo();
5829 if (spell->SpellFamilyName == uint32(family) && spell->SpellFamilyFlags.HasFlag(familyFlag1, familyFlag2, familyFlag3))
5830 {
5831 if (casterGUID && (*i)->GetCasterGUID() != casterGUID)
5832 continue;
5833 return (*i);
5834 }
5835 }
5836 return nullptr;
5837}
flag96 SpellFamilyFlags
Definition SpellInfo.h:412
uint32 SpellFamilyName
Definition SpellInfo.h:411
bool HasFlag(uint32 p1=0, uint32 p2=0, uint32 p3=0) const
Definition Util.h:459

References GetAuraEffectsByType(), flag96::HasFlag(), SpellInfo::SpellFamilyFlags, and SpellInfo::SpellFamilyName.

◆ GetAuraEffect() [2/3]

AuraEffect * Unit::GetAuraEffect ( AuraType  type,
SpellFamilyNames  name,
uint32  iconId,
uint8  effIndex 
) const
5810{
5811 AuraEffectList const& auras = GetAuraEffectsByType(type);
5812 for (Unit::AuraEffectList::const_iterator itr = auras.begin(); itr != auras.end(); ++itr)
5813 {
5814 if (effIndex != (*itr)->GetEffIndex())
5815 continue;
5816 SpellInfo const* spell = (*itr)->GetSpellInfo();
5817 if (spell->SpellIconID == iconId && spell->SpellFamilyName == name)
5818 return *itr;
5819 }
5820 return nullptr;
5821}
uint32 SpellIconID
Definition SpellInfo.h:404

References GetAuraEffectsByType(), SpellInfo::SpellFamilyName, and SpellInfo::SpellIconID.

◆ GetAuraEffect() [3/3]

AuraEffect * Unit::GetAuraEffect ( uint32  spellId,
uint8  effIndex,
ObjectGuid  casterGUID = ObjectGuid::Empty 
) const
5784{
5785 AuraApplicationMapBounds range = m_appliedAuras.equal_range(spellId);
5786 for (AuraApplicationMap::const_iterator itr = range.first; itr != range.second; ++itr)
5787 {
5788 if (itr->second->HasEffect(effIndex)
5789 && (!caster || itr->second->GetBase()->GetCasterGUID() == caster))
5790 {
5791 return itr->second->GetBase()->GetEffect(effIndex);
5792 }
5793 }
5794 return nullptr;
5795}

References AuraEffect::GetBase(), Aura::GetEffect(), and m_appliedAuras.

Referenced by CalculateSpellAmount(), spell_mage_ice_barrier::CheckCast(), spell_pri_power_word_shield::CheckCast(), spell_mage_molten_armor::CheckProc(), spell_mage_missile_barrage_proc::CheckProc(), Spell::EffectHeal(), Spell::EffectSchoolDMG(), Spell::EffectWeaponDmg(), GetAuraEffectOfRankedSpell(), GetDummyAuraEffect(), AuraEffect::HandleAuraModShapeshift(), Aura::HandleAuraSpecificMods(), spell_sha_maelstrom_weapon::HandleBonus(), spell_dk_raise_ally::HandleDummy(), spell_dk_death_coil::HandleDummy(), spell_dk_death_strike::HandleDummy(), spell_dk_scourge_strike::HandleDummy(), spell_warl_life_tap::HandleDummy(), spell_warr_execute::HandleEffect(), spell_dru_nourish::HandleHeal(), AuraEffect::HandlePeriodicHealAurasTick(), spell_rog_cut_to_the_chase::HandleProc(), spell_pal_sacred_shield_dummy::HandleProc(), spell_warr_extra_proc::HandleProc(), spell_dk_unholy_blight::HandleProc(), spell_dru_glyph_of_shred::HandleProc(), spell_hun_thrill_of_the_hunt::HandleProc(), spell_item_blessing_of_ancient_kings::HandleProc(), spell_item_persistent_shield::HandleProc(), spell_pal_infusion_of_light::HandleProc(), spell_pri_divine_aegis::HandleProc(), spell_rog_glyph_of_backstab::HandleProc(), spell_sha_glyph_of_earth_shield::HandleProc(), spell_sha_imp_water_shield::HandleProc(), spell_sha_static_shock::HandleProc(), spell_sha_t10_elemental_4p_bonus::HandleProc(), spell_dk_glyph_of_scourge_strike_script::HandleScriptEffect(), spell_sha_stoneclaw_totem::HandleScriptEffect(), spell_pal_seal_of_vengeance_aura::HandleSeal(), AuraEffect::HandleShapeshiftBoosts(), spell_warl_drain_soul::HandleTick(), HasJudgementsOfTheJust(), npc_pet_dk_ebon_gargoyle::InitializeAI(), Guardian::InitStatsForLevel(), npc_anzu_spirit::IsSummonedBy(), ModSpellDuration(), spell_dk_death_and_decay::RecalculateDamage(), RemoveAurasDueToSpellByDispel(), SpellDamageBonusDone(), SpellHealingBonusTaken(), npc_soh_fire_trigger::SpellHit(), npc_hallows_end_train_fire::SpellHit(), SpellPctDamageModsDone(), SpellPctHealingModsDone(), SpellTakenCritChance(), spell_mage_incanters_absorbtion_base_AuraScript::Trigger(), and npc_hallows_end_train_fire::UpdateAI().

◆ GetAuraEffectDummy()

AuraEffect * Unit::GetAuraEffectDummy ( uint32  spellid) const
5840{
5842 for (Unit::AuraEffectList::const_iterator itr = auras.begin(); itr != auras.end(); ++itr)
5843 {
5844 if ((*itr)->GetId() == spellid)
5845 return *itr;
5846 }
5847
5848 return nullptr;
5849}
@ SPELL_AURA_DUMMY
Definition SpellAuraDefines.h:67

References GetAuraEffectsByType(), and SPELL_AURA_DUMMY.

Referenced by Spell::EffectWeaponDmg(), Aura::HandleAuraSpecificMods(), spell_pilgrims_bounty_feast_on_generic::HandleDummy(), spell_dk_scourge_strike::HandleDummy(), Kill(), spell_dk_death_and_decay::RecalculateDamage(), and Player::RemoveSpellMods().

◆ GetAuraEffectOfRankedSpell()

AuraEffect * Unit::GetAuraEffectOfRankedSpell ( uint32  spellId,
uint8  effIndex,
ObjectGuid  casterGUID = ObjectGuid::Empty 
) const
5798{
5799 uint32 rankSpell = sSpellMgr->GetFirstSpellInChain(spellId);
5800 while (rankSpell)
5801 {
5802 if (AuraEffect* aurEff = GetAuraEffect(rankSpell, effIndex, caster))
5803 return aurEff;
5804 rankSpell = sSpellMgr->GetNextSpellInChain(rankSpell);
5805 }
5806 return nullptr;
5807}
AuraEffect * GetAuraEffect(uint32 spellId, uint8 effIndex, ObjectGuid casterGUID=ObjectGuid::Empty) const
Definition Unit.cpp:5783

References GetAuraEffect(), and sSpellMgr.

Referenced by spell_mage_fire_frost_ward::Absorb(), spell_sha_earthbind_totem::Apply(), spell_sha_earthliving_weapon::CheckProc(), GetDiseasesByCaster(), spell_dru_enrage::HandleApply(), spell_pal_avenging_wrath::HandleApply(), Aura::HandleAuraSpecificMods(), spell_dk_presence::HandleImprovedBloodPresence(), spell_dk_presence::HandleImprovedFrostPresence(), spell_dk_presence::HandleImprovedUnholyPresence(), spell_mage_imp_blizzard::HandleProc(), spell_warl_soul_leech::HandleProc(), SpellPctDamageModsDone(), and spell_mage_incanters_absorbtion_base_AuraScript::Trigger().

◆ GetAuraEffectsByType()

AuraEffectList const & Unit::GetAuraEffectsByType ( AuraType  type) const
inline
1428{ return m_modAuras[type]; }

References m_modAuras.

Referenced by Spell::_cast(), CalcAbsorbResist(), CalcArmorReducedDamage(), CalcHealAbsorb(), AuraEffect::CalculateAmount(), Spell::CanAutoCast(), Spell::CheckCast(), Spell::CheckCasterAuras(), DealDamage(), DealDamageShieldDamage(), Spell::EffectHeal(), Spell::EffectSchoolDMG(), RedirectSpellEvent::Execute(), spell_dk_wandering_plague::FilterTargets(), GetAuraEffect(), GetAuraEffect(), GetAuraEffectDummy(), GetDoTsByCaster(), GetHighestExclusiveSameEffectSpellGroupValue(), GetMagicHitRedirectTarget(), GetMaxNegativeAuraModifier(), GetMaxPositiveAuraModifier(), GetMeleeHitRedirectTarget(), GetPhaseByAuras(), Player::GetResurrectionSpellId(), Player::GetRuneBaseCooldown(), GetTotalAuraModifier(), GetTotalAuraMultiplier(), AuraEffect::HandleAuraDummy(), AuraEffect::HandleAuraModDisarm(), AuraEffect::HandleAuraModSchoolImmunity(), Aura::HandleAuraSpecificMods(), AuraEffect::HandleAuraTransform(), AuraEffect::HandleDetectAmore(), spell_pilgrims_bounty_feast_on_generic::HandleDummy(), spell_dru_nourish::HandleHeal(), Spell::HandleLaunchPhase(), WorldSession::HandleMessagechatOpcode(), WorldSession::HandleMirrorImageDataRequest(), AuraEffect::HandleModInvisibility(), modify_commandscript::HandleMorphMountCommand(), AuraEffect::HandleNoReagentUseAura(), spell_warr_heroic_strike::HandleOnHit(), spell_illidari_council_judgement::HandleScriptEffect(), spell_dk_glyph_of_scourge_strike_script::HandleScriptEffect(), spell_pal_judgement::HandleScriptEffect(), AuraEffect::HandleShapeshiftBoosts(), HasAuraState(), HasAuraTypeWithAffectMask(), HasAuraTypeWithCaster(), HasAuraTypeWithFamilyFlags(), HasAuraTypeWithMiscvalue(), HasAuraTypeWithTriggerSpell(), HasAuraTypeWithValue(), HasBreakableByDamageAuraType(), HasVisibleAuraType(), IsHighestExclusiveAuraEffect(), IsImmunedToSpellEffect(), IsScriptOverriden(), Player::isTotalImmune(), list_commandscript::ListAurasCommand(), MeleeDamageBonusTaken(), MeleeSpellHitResult(), Spell::PrepareTriggersExecutedOnHit(), processDummyAuras(), spell_dru_enrage::RecalculateBaseArmor(), Player::RegenerateAll(), Creature::Respawn(), RestoreDisplayId(), PetAI::SelectNextTarget(), Creature::SelectVictim(), Player::SendInitialPacketsAfterAddToMap(), SetControlled(), Player::SetEntryPoint(), Player::SetSkill(), SpellBaseDamageBonusDone(), SpellBaseHealingBonusDone(), SpellDamageBonusTaken(), SpellDoneCritChance(), SpellHealingBonusDone(), SpellHealingBonusTaken(), SpellPctDamageModsDone(), SpellPctHealingModsDone(), SpellTakenCritChance(), Player::SummonPet(), ThreatManager::TauntUpdate(), SimpleCharmedAI::UpdateAI(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::UpdateAI(), Player::UpdateArmor(), Player::UpdateAttackPowerAndDamage(), Player::UpdateCharmedAI(), Player::UpdateManaRegen(), ThreatManager::UpdateMyTempModifiers(), Player::UpdateRating(), Player::UpdateResistances(), UpdateSpeed(), and Player::UpdateStats().

◆ GetAuraOfRankedSpell()

Aura * Unit::GetAuraOfRankedSpell ( uint32  spellId,
ObjectGuid  casterGUID = ObjectGuid::Empty,
ObjectGuid  itemCasterGUID = ObjectGuid::Empty,
uint8  reqEffMask = 0 
) const
5889{
5890 AuraApplication* aurApp = GetAuraApplicationOfRankedSpell(spellId, casterGUID, itemCasterGUID, reqEffMask);
5891 return aurApp ? aurApp->GetBase() : nullptr;
5892}
AuraApplication * GetAuraApplicationOfRankedSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraApplication *except=nullptr) const
Definition Unit.cpp:5876

References GetAuraApplicationOfRankedSpell(), and AuraApplication::GetBase().

Referenced by spell_sha_clearcasting::CalculateAmount(), Aura::HandleAuraSpecificMods(), spell_dk_pestilence::HandleScriptEffect(), and spell_mage_missile_barrage_proc::OnRemove().

◆ GetBoundaryRadius()

float Unit::GetBoundaryRadius ( ) const
inline

◆ GetCastingTimeForBonus()

uint32 Unit::GetCastingTimeForBonus ( SpellInfo const *  spellProto,
DamageEffectType  damagetype,
uint32  CastingTime 
) const
13495{
13496 // Not apply this to creature casted spells with casttime == 0
13497 if (CastingTime == 0 && IsCreature() && !IsPet())
13498 return 3500;
13499
13500 if (CastingTime > 7000) CastingTime = 7000;
13501 if (CastingTime < 1500) CastingTime = 1500;
13502
13503 if (damagetype == DOT && !spellProto->IsChanneled())
13504 CastingTime = 3500;
13505
13506 int32 overTime = 0;
13507 uint8 effects = 0;
13508 bool DirectDamage = false;
13509 bool AreaEffect = false;
13510
13511 for (uint32 i = 0; i < MAX_SPELL_EFFECTS; i++)
13512 {
13513 switch (spellProto->Effects[i].Effect)
13514 {
13520 case SPELL_EFFECT_HEAL:
13521 DirectDamage = true;
13522 break;
13524 switch (spellProto->Effects[i].ApplyAuraName)
13525 {
13529 if (spellProto->GetDuration())
13530 overTime = spellProto->GetDuration();
13531 break;
13532 default:
13533 // -5% per additional effect
13534 ++effects;
13535 break;
13536 }
13537 default:
13538 break;
13539 }
13540
13541 if (spellProto->Effects[i].IsTargetingArea())
13542 AreaEffect = true;
13543 }
13544
13545 // Combined Spells with Both Over Time and Direct Damage
13546 if (overTime > 0 && DirectDamage)
13547 {
13548 // mainly for DoTs which are 3500 here otherwise
13549 uint32 OriginalCastTime = spellProto->CalcCastTime();
13550 if (OriginalCastTime > 7000) OriginalCastTime = 7000;
13551 if (OriginalCastTime < 1500) OriginalCastTime = 1500;
13552 // Portion to Over Time
13553 float PtOT = (overTime / 15000.0f) / ((overTime / 15000.0f) + (OriginalCastTime / 3500.0f));
13554
13555 if (damagetype == DOT)
13556 CastingTime = uint32(CastingTime * PtOT);
13557 else if (PtOT < 1.0f)
13558 CastingTime = uint32(CastingTime * (1 - PtOT));
13559 else
13560 CastingTime = 0;
13561 }
13562
13563 // Area Effect Spells receive only half of bonus
13564 if (AreaEffect)
13565 CastingTime /= 2;
13566
13567 // 50% for damage and healing spells for leech spells from damage bonus and 0% from healing
13568 for (uint8 j = 0; j < MAX_SPELL_EFFECTS; ++j)
13569 {
13570 if (spellProto->Effects[j].Effect == SPELL_EFFECT_HEALTH_LEECH ||
13571 (spellProto->Effects[j].Effect == SPELL_EFFECT_APPLY_AURA && spellProto->Effects[j].ApplyAuraName == SPELL_AURA_PERIODIC_LEECH))
13572 {
13573 CastingTime /= 2;
13574 break;
13575 }
13576 }
13577
13578 // -5% of total per any additional effect
13579 for (uint8 i = 0; i < effects; ++i)
13580 CastingTime *= 0.95f;
13581
13582 return CastingTime;
13583}
@ SPELL_EFFECT_POWER_BURN
Definition SharedDefines.h:828
@ SPELL_EFFECT_HEALTH_LEECH
Definition SharedDefines.h:775
@ SPELL_EFFECT_HEAL
Definition SharedDefines.h:776
@ SPELL_EFFECT_ENVIRONMENTAL_DAMAGE
Definition SharedDefines.h:773
@ SPELL_EFFECT_POWER_DRAIN
Definition SharedDefines.h:774
@ SPELL_EFFECT_SCHOOL_DAMAGE
Definition SharedDefines.h:768
@ SPELL_EFFECT_APPLY_AURA
Definition SharedDefines.h:772
@ SPELL_AURA_PERIODIC_DAMAGE
Definition SpellAuraDefines.h:66
@ SPELL_AURA_PERIODIC_HEAL
Definition SpellAuraDefines.h:71
@ SPELL_AURA_PERIODIC_LEECH
Definition SpellAuraDefines.h:116

References SpellInfo::CalcCastTime(), DOT, SpellInfo::Effects, SpellInfo::GetDuration(), SpellInfo::IsChanneled(), Object::IsCreature(), IsPet(), MAX_SPELL_EFFECTS, SPELL_AURA_PERIODIC_DAMAGE, SPELL_AURA_PERIODIC_HEAL, SPELL_AURA_PERIODIC_LEECH, SPELL_EFFECT_APPLY_AURA, SPELL_EFFECT_ENVIRONMENTAL_DAMAGE, SPELL_EFFECT_HEAL, SPELL_EFFECT_HEALTH_LEECH, SPELL_EFFECT_POWER_BURN, SPELL_EFFECT_POWER_DRAIN, and SPELL_EFFECT_SCHOOL_DAMAGE.

Referenced by CalculateDefaultCoefficient().

◆ GetCharm()

Unit * Unit::GetCharm ( ) const
7782{
7783 if (ObjectGuid charm_guid = GetCharmGUID())
7784 {
7785 if (Unit* pet = ObjectAccessor::GetUnit(*this, charm_guid))
7786 return pet;
7787
7788 LOG_ERROR("entities.unit", "Unit::GetCharm: Charmed creature {} not exist.", charm_guid.ToString());
7790 }
7791
7792 return nullptr;
7793}
@ UNIT_FIELD_CHARM
Definition UpdateFields.h:86
void SetGuidValue(uint16 index, ObjectGuid value)
Definition Object.cpp:712
ObjectGuid GetCharmGUID() const
Definition Unit.h:721
Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
Definition ObjectAccessor.cpp:199

References ObjectGuid::Empty, GetCharmGUID(), ObjectAccessor::GetUnit(), LOG_ERROR, Object::SetGuidValue(), and UNIT_FIELD_CHARM.

Referenced by Spell::_cast(), AddPetAura(), spell_hun_check_pet_los::CheckCast(), Spell::CheckCast(), Dismount(), Spell::finish(), GetFirstControlled(), spell_warl_eye_of_kilrogg::HandleAuraApply(), spell_warl_eye_of_kilrogg::HandleAuraRemove(), spell_dk_raise_ally::HandleDummy(), WorldSession::HandlePetCastSpellOpcode(), WorldSession::HandlePetSpellAutocastOpcode(), WorldSession::HandleRequestPetInfo(), isPossessing(), Mount(), Player::PossessSpellInitialize(), RemovePetAura(), Spell::SelectImplicitCasterObjectTargets(), SetSpeed(), npc_pilgrims_bounty_chair::SpellHitTarget(), and Player::StopCastingCharm().

◆ GetCharmer()

◆ GetCharmerGUID()

◆ GetCharmerOrOwner()

◆ GetCharmerOrOwnerGUID()

◆ GetCharmerOrOwnerOrOwnGUID()

ObjectGuid Unit::GetCharmerOrOwnerOrOwnGUID ( ) const
inline

◆ GetCharmerOrOwnerOrSelf()

Unit * Unit::GetCharmerOrOwnerOrSelf ( ) const
inline
1288 {
1289 if (Unit* u = GetCharmerOrOwner())
1290 return u;
1291
1292 return (Unit*)this;
1293 }

References GetCharmerOrOwner().

Referenced by GetPartyMembers(), GetReactionTo(), IsInPartyWith(), IsInRaidWith(), and TotemAI::UpdateAI().

◆ GetCharmerOrOwnerPlayerOrPlayerItself()

Player * Unit::GetCharmerOrOwnerPlayerOrPlayerItself ( ) const
7727{
7729 if (guid.IsPlayer())
7730 return ObjectAccessor::GetPlayer(*this, guid);
7731
7732 return const_cast<Unit*>(this)->ToPlayer();
7733}
Player * GetPlayer(Map const *, ObjectGuid const &guid)
Definition ObjectAccessor.cpp:220

References GetCharmerOrOwnerGUID(), ObjectAccessor::GetPlayer(), ObjectGuid::IsPlayer(), and Object::ToPlayer().

Referenced by Spell::_handle_finish_phase(), _IsValidAttackTarget(), spell_sha_earthbind_totem::Apply(), npc_escortAI::AssistPlayerInCombatAgainst(), FollowerAI::AssistPlayerInCombatAgainst(), AtTargetAttacked(), BuildValuesUpdate(), CombatManager::CanBeginCombat(), spell_q12237_rescue_villager::CheckCast(), spell_q12237_drop_off_villager::CheckCast(), boss_mal_ganis::boss_mal_ganisAI::DamageTaken(), DealDamage(), Spell::EffectGameObjectSetDestructionState(), Spell::EffectKillCredit(), Spell::EffectKillCreditPersonal(), Spell::EffectSummonPet(), GetAffectingPlayer(), spell_gen_charmed_unit_spell_cooldown::HandleCast(), spell_q13007_iron_colossus::HandleDummy(), spell_pilgrims_bounty_pass_generic::HandleDummy(), spell_pilgrims_bounty_feast_on_generic::HandleDummy(), spell_q12851_going_bearback::HandleEffectApply(), spell_q12726_song_of_wind_and_water::HandleHealPct(), spell_winter_veil_racer_slam_hit::HandleScriptEffect(), spell_q10612_10613_the_fel_and_the_furious::HandleScriptEffect(), spell_q10769_dissension_amongst_the_ranks::HandleScriptEffect(), npc_pet_gen_valkyr_guardian::InitializeAI(), isTargetableForAttack(), GameObject::IsWithinDistInMap(), GuardAI::JustDied(), boss_kurinnaxx::JustDied(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::JustDied(), npc_darnavan::npc_darnavanAI::JustDied(), npc_four_car_garage::npc_four_car_garageAI::JustDied(), npc_scion_of_eternity::JustDied(), Kill(), Condition::Meets(), GameObject::ModifyHealth(), npc_amanishi_lookout::MoveInLineOfSight(), npc_eagle_trash_aggro_trigger::MoveInLineOfSight(), npc_mageguard_dalaran::npc_mageguard_dalaranAI::MoveInLineOfSight(), npc_fel_guard_hound::npc_fel_guard_houndAI::MovementInform(), SmartScript::ProcessAction(), ProcessTerrainStatusUpdate(), Pet::RemoveSpellCooldown(), Spell::SendSpellCooldown(), SetCharm(), SetContestedPvP(), Creature::SetLootRecipient(), npc_deaths_door_fell_cannon_target_bunny::npc_deaths_door_fell_cannon_target_bunnyAI::SpellHit(), npc_scarlet_ghoul::npc_scarlet_ghoulAI::UpdateAI(), npc_fel_guard_hound::npc_fel_guard_houndAI::UpdateAI(), npc_pet_shaman_earth_elemental::UpdateAI(), npc_pet_shaman_fire_elemental::UpdateAI(), and Creature::UpdateEntry().

◆ GetCharmGUID()

◆ GetCharmInfo()

◆ getClass()

uint8 Unit::getClass ( ) const
inline
843{ return GetByteValue(UNIT_FIELD_BYTES_0, 1); }
@ UNIT_FIELD_BYTES_0
Definition UpdateFields.h:95
uint8 GetByteValue(uint16 index, uint8 offset) const
Definition Object.cpp:312

References Object::GetByteValue(), and UNIT_FIELD_BYTES_0.

Referenced by Player::_LoadHomeBind(), Player::_LoadSkills(), Player::_SaveCharacter(), ArenaTeam::AddMember(), SpellEffectInfo::CalcValue(), spell_dk_advantage_t10_4p::CheckProc(), spell_dk_death_rune::CheckProc(), Player::CheckSkillLearnedBySpell(), spell_class_call_handler::FilterTargets(), getClassMask(), GetDebugInfo(), Player::GetDodgeFromAgility(), SocialMgr::GetFriendInfo(), Player::GetMeleeCritFromAgility(), Player::GetMissPercentageFromDefence(), Player::GetPlayerName(), Player::GetRatingMultiplier(), Player::GetSpec(), Player::GetSpellCritFromIntellect(), Player::GetStartPosition(), Player::GiveLevel(), spell_item_flask_of_the_north::HandleDummy(), learn_commandscript::HandleLearnAllMyTrainerSpellsCommand(), WorldSession::HandleMirrorImageDataRequest(), modify_commandscript::HandleModifyGenderCommand(), misc_commandscript::HandlePInfoCommand(), WorldSession::HandlePlayerLoginFromDB(), spell_item_soul_preserver::HandleProc(), spell_item_aura_of_madness::HandleProc(), spell_item_deathbringers_will_normal::HandleProc(), spell_item_deathbringers_will_heroic::HandleProc(), spell_item_sunwell_exalted_caster_neck::HandleProc(), spell_pal_t3_6p_bonus::HandleProc(), spell_sha_t3_6p_bonus::HandleProc(), ArenaSpectator::HandleResetCommand(), reset_commandscript::HandleResetStatsOrLevelHelper(), Player::InitDataForForm(), Player::InitDisplayIds(), Player::InitStatsForLevel(), Guardian::InitStatsForLevel(), Player::InitTaxiNodesForLevel(), Player::IsClass(), IsClass(), Player::IsSpellFitByClassAndRace(), Trainer::Trainer::IsTrainerValidForPlayer(), Player::LearnCustomSpells(), Player::LearnDefaultSkill(), Player::LearnDefaultSkills(), spell_dk_death_rune::Load(), Player::LoadFromDB(), AchievementCriteriaData::Meets(), Player::OCTRegenHPPerSpirit(), Player::OCTRegenMPPerSpirit(), ClassCallSelector::operator()(), Acore::WorldObjectSpellTargetCheck::operator()(), Player::RewardHonor(), WorldSession::SendNameQueryOpcode(), Guild::Member::SetStats(), npc_icc_valkyr_herald::npc_icc_valkyr_heraldAI::SpellHitTarget(), Player::StoreNewItemInBestSlots(), Player::UpdateDodgePercentage(), Player::UpdateParryPercentage(), lfg::LFGMgr::UpdateRaidBrowser(), and Player::UpdateSkillsForLevel().

◆ getClassMask()

◆ GetClientControlling()

Player const * Unit::GetClientControlling ( ) const
17420{
17421 // Serverside reverse "mover" deduction logic at controlled unit
17422
17423 // Applies only to player controlled units
17425 {
17426 // Charm always removes control from original client...
17427 if (GetCharmerGUID())
17428 {
17429 // ... but if it is a possessing charm, some other client may have control
17431 {
17432 Unit const* charmer = GetCharmer();
17433 if (charmer && charmer->IsPlayer())
17434 return static_cast<Player const*>(charmer);
17435 }
17436 }
17437 else if (IsPlayer())
17438 {
17439 // Check if anything prevents original client from controlling
17440 if (IsClientControlled(static_cast<Player const*>(this)))
17441 return static_cast<Player const*>(this);
17442 }
17443 }
17444 return nullptr;
17445}
bool IsClientControlled(Player const *exactClient=nullptr) const
Definition Unit.cpp:17392

References GetCharmer(), GetCharmerGUID(), Object::HasFlag(), IsClientControlled(), Object::IsPlayer(), UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED, and UNIT_FLAG_POSSESSED.

Referenced by SendMoveRoot(), SetCanFly(), SetDisableGravity(), SetFeatherFall(), SetHover(), SetSpeed(), and SetWaterWalking().

◆ GetCollisionHeight()

float Unit::GetCollisionHeight ( ) const
overridevirtual

Return collision height sent to client.

Reimplemented from WorldObject.

17152{
17153 float scaleMod = GetObjectScale(); // 99% sure about this
17154 float defaultHeight = DEFAULT_COLLISION_HEIGHT * scaleMod;
17155
17156 CreatureDisplayInfoEntry const* displayInfo = sCreatureDisplayInfoStore.AssertEntry(GetNativeDisplayId());
17157 CreatureModelDataEntry const* modelData = sCreatureModelDataStore.AssertEntry(displayInfo->ModelId);
17158 float collisionHeight = 0.0f;
17159
17160 if (IsMounted())
17161 {
17163 {
17164 if (CreatureModelDataEntry const* mountModelData = sCreatureModelDataStore.LookupEntry(mountDisplayInfo->ModelId))
17165 {
17166 collisionHeight = scaleMod * (mountModelData->MountHeight + modelData->CollisionHeight * modelData->Scale * displayInfo->scale * 0.5f);
17167 }
17168 }
17169 }
17170 else
17171 collisionHeight = scaleMod * modelData->CollisionHeight * modelData->Scale * displayInfo->scale;
17172
17173 return collisionHeight == 0.0f ? defaultHeight : collisionHeight;
17174}
DBCStorage< CreatureDisplayInfoEntry > sCreatureDisplayInfoStore(CreatureDisplayInfofmt)
DBCStorage< CreatureModelDataEntry > sCreatureModelDataStore(CreatureModelDatafmt)
#define DEFAULT_COLLISION_HEIGHT
Definition ObjectDefines.h:49
float GetObjectScale() const
Definition Object.h:120
Definition DBCStructure.h:721
uint32 ModelId
Definition DBCStructure.h:723
float scale
Definition DBCStructure.h:726
Definition DBCStructure.h:775
float Scale
Definition DBCStructure.h:779
float CollisionHeight
Definition DBCStructure.h:790

References CreatureModelDataEntry::CollisionHeight, DEFAULT_COLLISION_HEIGHT, GetNativeDisplayId(), Object::GetObjectScale(), Object::GetUInt32Value(), IsMounted(), CreatureDisplayInfoEntry::ModelId, CreatureDisplayInfoEntry::scale, CreatureModelDataEntry::Scale, sCreatureDisplayInfoStore, sCreatureModelDataStore, and UNIT_FIELD_MOUNTDISPLAYID.

Referenced by DynObjAura::FillTargetMap(), GetRandomContactPoint(), Acore::NearestAttackableNoTotemUnitInObjectRangeCheck::operator()(), WorldSession::ProcessMovementInfo(), ProcessTerrainStatusUpdate(), Spell::SelectImplicitCasterDestTargets(), spell_spawn_blood_pool::SetDest(), and Creature::UpdateMovementFlags().

◆ GetCollisionRadius()

float Unit::GetCollisionRadius ( ) const
overridevirtual

this method gets the radius of a Unit by DB if any value is defined, otherwise it gets the value by the DBC

If the player is mounted the radius also takes in consideration the mount size

Returns
float The radius of a unit

Reimplemented from WorldObject.

17146{
17147 return GetCollisionWidth() / 2;
17148}
float GetCollisionWidth() const override
this method gets the diameter of a Unit by DB if any value is defined, otherwise it gets the value by...
Definition Unit.cpp:17108

References GetCollisionWidth().

Referenced by GetMeleeAttackPoint(), and Creature::Update().

◆ GetCollisionWidth()

float Unit::GetCollisionWidth ( ) const
overridevirtual

this method gets the diameter of a Unit by DB if any value is defined, otherwise it gets the value by the DBC

If the player is mounted the diameter also takes in consideration the mount size

Returns
float The diameter of a unit

Dismounting case - use basic default model data

Reimplemented from WorldObject.

17109{
17110 if (IsPlayer())
17111 return GetObjectSize();
17112
17113 float scaleMod = GetObjectScale(); // 99% sure about this
17114 float objectSize = GetObjectSize();
17115 float defaultSize = DEFAULT_WORLD_OBJECT_SIZE * scaleMod;
17116
17118 CreatureDisplayInfoEntry const* displayInfo = sCreatureDisplayInfoStore.AssertEntry(GetNativeDisplayId());
17119 CreatureModelDataEntry const* modelData = sCreatureModelDataStore.AssertEntry(displayInfo->ModelId);
17120
17121 if (IsMounted())
17122 {
17124 {
17125 if (CreatureModelDataEntry const* mountModelData = sCreatureModelDataStore.LookupEntry(mountDisplayInfo->ModelId))
17126 {
17127 if (G3D::fuzzyGt(mountModelData->CollisionWidth, modelData->CollisionWidth))
17128 modelData = mountModelData;
17129 }
17130 }
17131 }
17132
17133 float collisionWidth = scaleMod * modelData->CollisionWidth * modelData->Scale * displayInfo->scale * 2;
17134 // if the objectSize is the default value or the creature is mounted and we have a DBC value, then we can retrieve DBC value instead
17135 return G3D::fuzzyGt(collisionWidth, 0.0f) && (G3D::fuzzyEq(objectSize,defaultSize) || IsMounted()) ? collisionWidth : objectSize;
17136}
#define DEFAULT_WORLD_OBJECT_SIZE
Definition ObjectDefines.h:44
float GetObjectSize() const
Definition Object.cpp:2837
float CollisionWidth
Definition DBCStructure.h:789

References CreatureModelDataEntry::CollisionWidth, DEFAULT_WORLD_OBJECT_SIZE, GetNativeDisplayId(), Object::GetObjectScale(), WorldObject::GetObjectSize(), Object::GetUInt32Value(), IsMounted(), Object::IsPlayer(), CreatureDisplayInfoEntry::ModelId, CreatureDisplayInfoEntry::scale, CreatureModelDataEntry::Scale, sCreatureDisplayInfoStore, sCreatureModelDataStore, and UNIT_FIELD_MOUNTDISPLAYID.

Referenced by GetCollisionRadius().

◆ GetCombatManager() [1/2]

◆ GetCombatManager() [2/2]

CombatManager const & Unit::GetCombatManager ( ) const
inline
954{ return m_combatManager; }

References m_combatManager.

◆ GetCombatRatingDamageReduction()

uint32 Unit::GetCombatRatingDamageReduction ( CombatRating  cr,
float  rate,
float  cap,
uint32  damage 
) const
private
15450{
15451 float percent = std::min(GetCombatRatingReduction(cr) * rate, cap);
15452 return CalculatePct(damage, percent);
15453}
float GetCombatRatingReduction(CombatRating cr) const
Definition Unit.cpp:15437

References CalculatePct(), and GetCombatRatingReduction().

Referenced by GetMeleeCritDamageReduction(), GetMeleeDamageReduction(), GetRangedCritDamageReduction(), GetRangedDamageReduction(), GetSpellCritDamageReduction(), and GetSpellDamageReduction().

◆ GetCombatRatingReduction()

float Unit::GetCombatRatingReduction ( CombatRating  cr) const
private
15438{
15439 if (Player const* player = ToPlayer())
15440 return player->GetRatingBonusValue(cr);
15441 // Player's pet get resilience from owner
15442 else if (IsPet() && GetOwner())
15443 if (Player* owner = GetOwner()->ToPlayer())
15444 return owner->GetRatingBonusValue(cr);
15445
15446 return 0.0f;
15447}

References GetOwner(), IsPet(), and Object::ToPlayer().

Referenced by GetCombatRatingDamageReduction(), GetMeleeCritChanceReduction(), GetRangedCritChanceReduction(), and GetSpellCritChanceReduction().

◆ GetCombatReach()

◆ GetCombatTimer()

uint32 Unit::GetCombatTimer ( ) const
inline
942{ return m_CombatTimer; }

References m_CombatTimer.

◆ GetComboPoints() [1/2]

uint8 Unit::GetComboPoints ( ObjectGuid const &  guid) const
inline
1015{ return (m_comboTarget && m_comboTarget->GetGUID() == guid) ? m_comboPoints : 0; }

References Object::GetGUID(), m_comboPoints, and m_comboTarget.

◆ GetComboPoints() [2/2]

uint8 Unit::GetComboPoints ( Unit const *  who = nullptr) const
inline

◆ GetComboTarget()

Unit * Unit::GetComboTarget ( ) const
inline
1016{ return m_comboTarget; }

References m_comboTarget.

Referenced by Player::DuelComplete().

◆ GetComboTargetGUID()

ObjectGuid const Unit::GetComboTargetGUID ( ) const
inline

◆ GetCompanionPet()

Creature * Unit::GetCompanionPet ( ) const
7777{
7779}
@ SUMMON_SLOT_MINIPET
Definition SharedDefines.h:3549
Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
Definition ObjectAccessor.cpp:210

References ObjectAccessor::GetCreature(), m_SummonSlot, and SUMMON_SLOT_MINIPET.

◆ GetCreateHealth()

◆ GetCreateMana()

◆ GetCreatePowers()

uint32 Unit::GetCreatePowers ( Powers  power) const
12525{
12526 // Only hunter pets have POWER_FOCUS and POWER_HAPPINESS
12527 switch (power)
12528 {
12529 case POWER_MANA:
12530 return GetCreateMana();
12531 case POWER_RAGE:
12532 return 1000;
12533 case POWER_FOCUS:
12534 return (IsPlayer() || !((Creature const*)this)->IsPet() || ((Pet const*)this)->getPetType() != HUNTER_PET ? 0 : 100);
12535 case POWER_ENERGY:
12536 return 100;
12537 case POWER_HAPPINESS:
12538 return (IsPlayer() || !((Creature const*)this)->IsPet() || ((Pet const*)this)->getPetType() != HUNTER_PET ? 0 : 1050000);
12539 case POWER_RUNIC_POWER:
12540 return 1000;
12541 case POWER_RUNE:
12542 return 0;
12543 case POWER_HEALTH:
12544 return 0;
12545 default:
12546 break;
12547 }
12548
12549 return 0;
12550}
@ POWER_HEALTH
Definition SharedDefines.h:266
@ POWER_RUNIC_POWER
Definition SharedDefines.h:263
@ POWER_HAPPINESS
Definition SharedDefines.h:261
@ POWER_ENERGY
Definition SharedDefines.h:260
@ POWER_RUNE
Definition SharedDefines.h:262
@ POWER_FOCUS
Definition SharedDefines.h:259
uint32 GetCreateMana() const
Definition Unit.h:1148

References GetCreateMana(), HUNTER_PET, IsPet(), Object::IsPlayer(), POWER_ENERGY, POWER_FOCUS, POWER_HAPPINESS, POWER_HEALTH, POWER_MANA, POWER_RAGE, POWER_RUNE, and POWER_RUNIC_POWER.

Referenced by Pet::CreateBaseAtTamed(), spell_dru_glyph_of_innervate::HandleProc(), Player::InitStatsForLevel(), Pet::LoadPetFromDB(), setPowerType(), Guardian::UpdateMaxPower(), and Player::UpdateMaxPower().

◆ GetCreateStat()

float Unit::GetCreateStat ( Stats  stat) const
inline

◆ GetCreatorGUID()

ObjectGuid Unit::GetCreatorGUID ( ) const
inline
@ UNIT_FIELD_CREATEDBY
Definition UpdateFields.h:91

References Object::GetGuidValue(), and UNIT_FIELD_CREATEDBY.

Referenced by Condition::Meets().

◆ GetCreatureType()

uint32 Unit::GetCreatureType ( ) const
11936{
11937 if (IsPlayer())
11938 {
11940 SpellShapeshiftFormEntry const* ssEntry = sSpellShapeshiftFormStore.LookupEntry(form);
11941 if (ssEntry && ssEntry->creatureType > 0)
11942 return ssEntry->creatureType;
11943 else
11945 }
11946 else
11947 return ToCreature()->GetCreatureTemplate()->type;
11948}
DBCStorage< SpellShapeshiftFormEntry > sSpellShapeshiftFormStore(SpellShapeshiftFormEntryfmt)
@ CREATURE_TYPE_HUMANOID
Definition SharedDefines.h:2628
ShapeshiftForm
Definition UnitDefines.h:71
ShapeshiftForm GetShapeshiftForm() const
Definition Unit.h:1958
uint32 type
Definition CreatureData.h:218
Definition DBCStructure.h:1817
int32 creatureType
Definition DBCStructure.h:1823

References CREATURE_TYPE_HUMANOID, SpellShapeshiftFormEntry::creatureType, Creature::GetCreatureTemplate(), GetShapeshiftForm(), Object::IsPlayer(), sSpellShapeshiftFormStore, Object::ToCreature(), and CreatureTemplate::type.

Referenced by Creature::CanStartAttack(), spell_utgarde_pinnacle_beast_mark::CheckProc(), Spell::EffectKnockBack(), GetCreatureTypeMask(), GetUnitParryChance(), AuraEffect::HandleAuraEmpathy(), spell_dru_starfall_dummy::HandleDummy(), IsCritter(), CreatureAI::MoveInLineOfSight(), npc_mageguard_dalaran::npc_mageguard_dalaranAI::MoveInLineOfSight(), instance_sunken_temple::instance_sunken_temple_InstanceMapScript::OnCreatureCreate(), instance_sunken_temple::instance_sunken_temple_InstanceMapScript::OnUnitDeath(), Acore::AnyUnfriendlyNoTotemUnitInObjectRangeCheck::operator()(), Acore::NearestAttackableNoTotemUnitInObjectRangeCheck::operator()(), and Creature::UpdateMoveInLineOfSightState().

◆ GetCreatureTypeMask()

uint32 Unit::GetCreatureTypeMask ( ) const
inline
829 {
830 uint32 creatureType = GetCreatureType();
831 return (creatureType >= 1) ? (1 << (creatureType - 1)) : 0;
832 }
uint32 GetCreatureType() const
Definition Unit.cpp:11935

References GetCreatureType().

Referenced by CalculateMeleeDamage(), CalculateSpellDamageTaken(), SpellInfo::CheckTargetCreatureType(), MeleeDamageBonusDone(), SpellCriticalDamageBonus(), SpellCriticalHealingBonus(), SpellDamageBonusDone(), SpellPctDamageModsDone(), and SpellTakenCritChance().

◆ GetCritterGUID()

ObjectGuid Unit::GetCritterGUID ( ) const
inline

◆ GetCurrentSpell() [1/2]

◆ GetCurrentSpell() [2/2]

Spell * Unit::GetCurrentSpell ( uint32  spellType) const
inline
1577{ return m_currentSpells[spellType]; }

References m_currentSpells.

◆ GetCurrentSpellCastTime()

int32 Unit::GetCurrentSpellCastTime ( uint32  spell_id) const
4360{
4361 if (Spell const* spell = FindCurrentSpellBySpellId(spell_id))
4362 return spell->GetCastTime();
4363 return 0;
4364}
Spell * FindCurrentSpellBySpellId(uint32 spell_id) const
Definition Unit.cpp:4351

References FindCurrentSpellBySpellId(), and Spell::GetCastTime().

Referenced by CasterAI::JustEngagedWith(), CasterAI::UpdateAI(), and boss_mandokir::boss_mandokirAI::UpdateAI().

◆ GetDamageImmunityMask()

uint32 Unit::GetDamageImmunityMask ( ) const
9830{
9831 uint32 mask = 0;
9833 for (auto const& [immunitySchoolMask, _] : damageList)
9834 mask |= immunitySchoolMask;
9835 return mask;
9836}
@ IMMUNITY_DAMAGE
Definition SharedDefines.h:1401
std::unordered_multimap< uint32, uint32 > SpellImmuneContainer
Definition Unit.h:2089

References IMMUNITY_DAMAGE, and m_spellImmune.

◆ getDeathState()

◆ GetDebugInfo()

std::string Unit::GetDebugInfo ( ) const
overridevirtual

Reimplemented from Object.

17382{
17383 std::stringstream sstr;
17384 sstr << WorldObject::GetDebugInfo() << "\n"
17385 << std::boolalpha
17386 << "AliveState: " << IsAlive()
17387 << " UnitMovementFlags: " << GetUnitMovementFlags() << " ExtraUnitMovementFlags: " << GetExtraUnitMovementFlags()
17388 << " Class: " << std::to_string(getClass());
17389 return sstr.str();
17390}
std::string GetDebugInfo() const override
Definition Object.cpp:2536

References getClass(), WorldObject::GetDebugInfo(), GetExtraUnitMovementFlags(), GetUnitMovementFlags(), and IsAlive().

Referenced by UnitAI::GetDebugInfo(), Creature::GetDebugInfo(), and Player::GetDebugInfo().

◆ GetDefaultMovementType()

MovementGeneratorType Unit::GetDefaultMovementType ( ) const
virtual

-------—End of Pet responses methods-------—

Reimplemented in Creature.

13034{
13035 return IDLE_MOTION_TYPE;
13036}
@ IDLE_MOTION_TYPE
Definition MotionMaster.h:39

References IDLE_MOTION_TYPE.

◆ GetDefenseSkillValue()

uint32 Unit::GetDefenseSkillValue ( Unit const *  target = nullptr) const
3802{
3803 if (IsPlayer())
3804 {
3805 // in PvP use full skill instead current skill value
3806 uint32 value = (target && target->IsPlayer())
3809 value += uint32(ToPlayer()->GetRatingBonusValue(CR_DEFENSE_SKILL));
3810 return value;
3811 }
3812 else
3813 return GetUnitMeleeSkill(target);
3814}
@ SKILL_DEFENSE
Definition SharedDefines.h:3114
@ CR_DEFENSE_SKILL
Definition Unit.h:224
uint16 GetSkillValue(uint32 skill) const
Definition Player.cpp:5438
uint16 GetMaxSkillValue(uint32 skill) const
Definition Player.cpp:5455

References CR_DEFENSE_SKILL, Player::GetMaxSkillValue(), Player::GetSkillValue(), GetUnitMeleeSkill(), Object::IsPlayer(), SKILL_DEFENSE, and Object::ToPlayer().

Referenced by spell_pal_ardent_defender::Absorb(), DealMeleeDamage(), GetUnitCriticalChance(), RollMeleeOutcomeAgainst(), SpellTakenCritChance(), Player::UpdateBlockPercentage(), and lfg::LFGMgr::UpdateRaidBrowser().

◆ GetDiminishing()

DiminishingLevels Unit::GetDiminishing ( DiminishingGroup  group)
11756{
11757 for (Diminishing::iterator i = m_Diminishing.begin(); i != m_Diminishing.end(); ++i)
11758 {
11759 if (i->DRGroup != group)
11760 continue;
11761
11762 if (!i->hitCount)
11763 return DIMINISHING_LEVEL_1;
11764
11765 if (!i->hitTime)
11766 return DIMINISHING_LEVEL_1;
11767
11768 // If last spell was casted more than 15 seconds ago - reset the count.
11769 if (i->stack == 0 && getMSTimeDiff(i->hitTime, GameTime::GetGameTimeMS().count()) > 15000)
11770 {
11771 i->hitCount = DIMINISHING_LEVEL_1;
11772 return DIMINISHING_LEVEL_1;
11773 }
11774 // or else increase the count.
11775 else
11776 return DiminishingLevels(i->hitCount);
11777 }
11778 return DIMINISHING_LEVEL_1;
11779}
uint32 getMSTimeDiff(uint32 oldMSTime, uint32 newMSTime)
Definition Timer.h:110

References DIMINISHING_LEVEL_1, GameTime::GetGameTimeMS(), getMSTimeDiff(), and m_Diminishing.

Referenced by Spell::DoSpellHitOnUnit().

◆ GetDirectTransport()

TransportBase * Unit::GetDirectTransport ( ) const
15037{
15038 if (Vehicle* veh = GetVehicle())
15039 return veh;
15040 return GetTransport();
15041}
Vehicle * GetVehicle() const
Definition Unit.h:1927

References WorldObject::GetTransport(), and GetVehicle().

Referenced by Movement::TransportPathTransform::operator()(), SmartScript::ProcessAction(), CharmInfo::SaveStayPosition(), and UpdateSplinePosition().

◆ GetDiseasesByCaster()

uint32 Unit::GetDiseasesByCaster ( ObjectGuid  casterGUID,
uint8  mode = 0 
)
6134{
6135 static const AuraType diseaseAuraTypes[] =
6136 {
6137 SPELL_AURA_PERIODIC_DAMAGE, // Frost Fever and Blood Plague
6138 SPELL_AURA_LINKED, // Crypt Fever and Ebon Plague
6140 };
6141
6142 ObjectGuid drwGUID;
6143
6144 if (Player* playerCaster = ObjectAccessor::GetPlayer(*this, casterGUID))
6145 drwGUID = playerCaster->getRuneWeaponGUID();
6146
6147 uint32 diseases = 0;
6148 for (uint8 index = 0; diseaseAuraTypes[index] != SPELL_AURA_NONE; ++index)
6149 {
6150 for (AuraEffectList::iterator i = m_modAuras[diseaseAuraTypes[index]].begin(); i != m_modAuras[diseaseAuraTypes[index]].end();)
6151 {
6152 // Get auras with disease dispel type by caster
6153 if ((*i)->GetSpellInfo()->Dispel == DISPEL_DISEASE
6154 && ((*i)->GetCasterGUID() == casterGUID || (*i)->GetCasterGUID() == drwGUID)) // if its caster or his dancing rune weapon
6155 {
6156 ++diseases;
6157
6158 if (mode == 1)
6159 {
6160 RemoveAura((*i)->GetId(), (*i)->GetCasterGUID());
6161 i = m_modAuras[diseaseAuraTypes[index]].begin();
6162 continue;
6163 }
6164 // used for glyph of scourge strike
6165 else if (mode == 2)
6166 {
6167 Aura* aura = (*i)->GetBase();
6168 uint32 countMin = aura->GetMaxDuration();
6169 uint32 countMax = aura->GetSpellInfo()->GetMaxDuration() + 9000;
6170
6171 if (AuraEffect const* epidemic = (*i)->GetCaster()->GetAuraEffectOfRankedSpell(49036, EFFECT_0))
6172 countMax += epidemic->GetAmount();
6173
6174 if (countMin < countMax)
6175 {
6176 aura->SetDuration(uint32(aura->GetDuration() + 3000));
6177 aura->SetMaxDuration(countMin + 3000);
6178 }
6179 }
6180 }
6181 ++i;
6182 }
6183 }
6184 return diseases;
6185}
@ EFFECT_0
Definition SharedDefines.h:31
@ DISPEL_DISEASE
Definition SharedDefines.h:1378
AuraType
Definition SpellAuraDefines.h:62
@ SPELL_AURA_LINKED
Definition SpellAuraDefines.h:347
@ SPELL_AURA_NONE
Definition SpellAuraDefines.h:63
int32 GetMaxDuration() const
Definition SpellAuras.h:129
void SetMaxDuration(int32 duration)
Definition SpellAuras.h:130
int32 GetMaxDuration() const
Definition SpellInfo.cpp:2745
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:5049
AuraEffect * GetAuraEffectOfRankedSpell(uint32 spellId, uint8 effIndex, ObjectGuid casterGUID=ObjectGuid::Empty) const
Definition Unit.cpp:5797

References DISPEL_DISEASE, EFFECT_0, GetAuraEffectOfRankedSpell(), AuraEffect::GetCaster(), Aura::GetDuration(), Aura::GetMaxDuration(), SpellInfo::GetMaxDuration(), ObjectAccessor::GetPlayer(), Aura::GetSpellInfo(), m_modAuras, RemoveAura(), Aura::SetDuration(), Aura::SetMaxDuration(), SPELL_AURA_LINKED, SPELL_AURA_NONE, and SPELL_AURA_PERIODIC_DAMAGE.

Referenced by Spell::EffectWeaponDmg(), and SpellPctDamageModsDone().

◆ GetDispellableAuraList()

void Unit::GetDispellableAuraList ( Unit caster,
uint32  dispelMask,
DispelChargesList dispelList,
SpellInfo const *  dispelSpell 
)
5895{
5896 // we should not be able to dispel diseases if the target is affected by unholy blight
5897 if (dispelMask & (1 << DISPEL_DISEASE) && HasAura(50536))
5898 dispelMask &= ~(1 << DISPEL_DISEASE);
5899
5900 ReputationRank rank = GetReactionTo(caster, IsCharmed());
5901 bool positive = rank >= REP_FRIENDLY;
5902
5903 // Neutral unit not at war with caster should be treated as a friendly unit
5904 if (rank == REP_NEUTRAL)
5905 {
5906 if (Player* casterPlayer = caster->GetAffectingPlayer())
5907 {
5908 if (FactionTemplateEntry const* factionTemplateEntry = GetFactionTemplateEntry())
5909 {
5910 if (FactionEntry const* factionEntry = sFactionStore.LookupEntry(factionTemplateEntry->faction))
5911 {
5912 if (factionEntry->CanBeSetAtWar())
5913 {
5914 positive = !casterPlayer->GetReputationMgr().IsAtWar(factionEntry);
5915 }
5916 }
5917 }
5918 }
5919 }
5920
5921 Unit::VisibleAuraMap const* visibleAuras = GetVisibleAuras();
5922 for (Unit::VisibleAuraMap::const_iterator itr = visibleAuras->begin(); itr != visibleAuras->end(); ++itr)
5923 {
5924 Aura* aura = itr->second->GetBase();
5925
5926 // don't try to remove passive auras
5927 if (aura->IsPassive())
5928 continue;
5929
5930 if (aura->GetSpellInfo()->GetDispelMask() & dispelMask)
5931 {
5932 if (aura->GetSpellInfo()->Dispel == DISPEL_MAGIC)
5933 {
5934 // do not remove positive auras if friendly target
5935 // negative auras if non-friendly target
5936 if (itr->second->IsPositive() == positive)
5937 continue;
5938 }
5939
5940 // Banish should only be dispelled by Mass Dispel
5941 if (aura->GetSpellInfo()->Mechanic == MECHANIC_BANISH && !dispelSpell->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES))
5942 {
5943 continue;
5944 }
5945
5946 // The charges / stack amounts don't count towards the total number of auras that can be dispelled.
5947 // Ie: A dispel on a target with 5 stacks of Winters Chill and a Polymorph has 1 / (1 + 1) -> 50% chance to dispell
5948 // Polymorph instead of 1 / (5 + 1) -> 16%.
5949 bool dispel_charges = aura->GetSpellInfo()->HasAttribute(SPELL_ATTR7_DISPEL_REMOVES_CHARGES);
5950 uint8 charges = dispel_charges ? aura->GetCharges() : aura->GetStackAmount();
5951 if (charges > 0)
5952 dispelList.push_back(std::make_pair(aura, charges));
5953 }
5954 }
5955}
@ SPELL_ATTR7_DISPEL_REMOVES_CHARGES
Definition SharedDefines.h:639
@ MECHANIC_BANISH
Definition SharedDefines.h:1331
@ SPELL_ATTR0_NO_IMMUNITIES
Definition SharedDefines.h:399
@ REP_FRIENDLY
Definition SharedDefines.h:161
@ DISPEL_MAGIC
Definition SharedDefines.h:1376
uint8 GetStackAmount() const
Definition SpellAuras.h:148
uint8 GetCharges() const
Definition SpellAuras.h:141
bool IsPassive() const
Definition SpellAuras.cpp:1028
uint32 Mechanic
Definition SpellInfo.h:347
uint32 GetDispelMask() const
Definition SpellInfo.cpp:1948
uint32 Dispel
Definition SpellInfo.h:346
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition Unit.cpp:6010
std::map< uint8, AuraApplication * > VisibleAuraMap
Definition Unit.h:687
VisibleAuraMap const * GetVisibleAuras()
Definition Unit.h:1539

References SpellInfo::Dispel, DISPEL_DISEASE, DISPEL_MAGIC, GetAffectingPlayer(), Aura::GetCharges(), SpellInfo::GetDispelMask(), GetFactionTemplateEntry(), GetReactionTo(), Aura::GetSpellInfo(), Aura::GetStackAmount(), GetVisibleAuras(), SpellInfo::HasAttribute(), HasAura(), IsCharmed(), Aura::IsPassive(), SpellInfo::Mechanic, MECHANIC_BANISH, REP_FRIENDLY, REP_NEUTRAL, sFactionStore, SPELL_ATTR0_NO_IMMUNITIES, and SPELL_ATTR7_DISPEL_REMOVES_CHARGES.

Referenced by Spell::CheckCast(), and Spell::EffectDispel().

◆ GetDisplayId()

◆ GetDisplayRace()

DisplayRace Unit::GetDisplayRace ( ) const
inline
DisplayRace GetDisplayRaceFromModelId(uint32 modelId) const
Definition Unit.cpp:17076
uint32 GetDisplayId() const
Definition Unit.h:1975

References GetDisplayId(), and GetDisplayRaceFromModelId().

Referenced by AuraEffect::HandleAuraTransform().

◆ GetDisplayRaceFromModelId()

DisplayRace Unit::GetDisplayRaceFromModelId ( uint32  modelId) const
17077{
17078 if (CreatureDisplayInfoEntry const* display = sCreatureDisplayInfoStore.LookupEntry(modelId))
17079 {
17080 if (CreatureDisplayInfoExtraEntry const* displayExtra = sCreatureDisplayInfoExtraStore.LookupEntry(display->ExtendedDisplayInfoID))
17081 {
17082 return DisplayRace(displayExtra->DisplayRaceID);
17083 }
17084 }
17085 return DisplayRace::None;
17086}
DBCStorage< CreatureDisplayInfoExtraEntry > sCreatureDisplayInfoExtraStore(CreatureDisplayInfoExtrafmt)
DisplayRace
Definition SharedDefines.h:96
Definition DBCStructure.h:739

References None, sCreatureDisplayInfoExtraStore, and sCreatureDisplayInfoStore.

Referenced by GetDisplayRace().

◆ GetDoTsByCaster()

uint32 Unit::GetDoTsByCaster ( ObjectGuid  casterGUID) const
6188{
6189 static const AuraType diseaseAuraTypes[] =
6190 {
6194 };
6195
6196 uint32 dots = 0;
6197 for (AuraType const* itr = &diseaseAuraTypes[0]; itr && itr[0] != SPELL_AURA_NONE; ++itr)
6198 {
6199 Unit::AuraEffectList const& auras = GetAuraEffectsByType(*itr);
6200 for (AuraEffectList::const_iterator i = auras.begin(); i != auras.end(); ++i)
6201 {
6202 // Get auras by caster
6203 if ((*i)->GetCasterGUID() == casterGUID)
6204 ++dots;
6205 }
6206 }
6207 return dots;
6208}
@ SPELL_AURA_PERIODIC_DAMAGE_PERCENT
Definition SpellAuraDefines.h:152

References GetAuraEffectsByType(), SPELL_AURA_NONE, SPELL_AURA_PERIODIC_DAMAGE, and SPELL_AURA_PERIODIC_DAMAGE_PERCENT.

Referenced by SpellPctDamageModsDone().

◆ GetDummyAuraEffect()

◆ GetDynamicFlags()

◆ GetDynObject()

DynamicObject * Unit::GetDynObject ( uint32  spellId)
6526{
6527 if (m_dynObj.empty())
6528 return nullptr;
6529 for (DynObjectList::const_iterator i = m_dynObj.begin(); i != m_dynObj.end(); ++i)
6530 {
6531 DynamicObject* dynObj = *i;
6532 if (dynObj->GetSpellId() == spellId)
6533 return dynObj;
6534 }
6535 return nullptr;
6536}
Definition DynamicObject.h:35
uint32 GetSpellId() const
Definition DynamicObject.h:58

References DynamicObject::GetSpellId(), and m_dynObj.

Referenced by Spell::DelayedChannel(), WorldSession::HandleFarSightOpcode(), and boss_akilzon::JustEngagedWith().

◆ GetEffectiveResistChance()

float Unit::GetEffectiveResistChance ( Unit const *  owner,
SpellSchoolMask  schoolMask,
Unit const *  victim,
SpellInfo const *  spellInfo = nullptr 
)
static
2311{
2312 float victimResistance = static_cast<float>(victim->GetResistance(schoolMask));
2313 if (owner)
2314 {
2315 // Xinef: pets inherit 100% of masters penetration
2316 // Xinef: excluding traps
2317 Player const* player = owner->GetSpellModOwner();
2318 if (player && owner->GetEntry() != WORLD_TRIGGER)
2319 {
2320 victimResistance += static_cast<float>(player->GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_TARGET_RESISTANCE, schoolMask));
2321 victimResistance -= static_cast<float>(player->GetSpellPenetrationItemMod());
2322 }
2323 else
2324 victimResistance += static_cast<float>(owner->GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_TARGET_RESISTANCE, schoolMask));
2325 }
2326
2327 victimResistance = std::max(victimResistance, 0.0f);
2328
2329 if (owner && (!spellInfo || !spellInfo->HasAttribute(SPELL_ATTR0_CU_BINARY_SPELL)))
2330 victimResistance += std::max(static_cast<float>(victim->GetLevel() - owner->GetLevel()) * 5.0f, 0.0f);
2331
2332 float level = static_cast<float>(victim->GetLevel());
2333 float resistanceConstant = 0.0f;
2334
2335 if (level > 60.0f)
2336 resistanceConstant = 150.0f + (level - 60.0f) * (level - 67.5f);
2337 else if (level > 20.0f)
2338 resistanceConstant = 50.0f + (level - 20.0f) * 2.5f;
2339 else
2340 resistanceConstant = 50.0f;
2341
2342 return std::min(victimResistance / (victimResistance + resistanceConstant), 0.75f);
2343}
int32 GetSpellPenetrationItemMod() const
Definition Player.h:1992

References Object::GetEntry(), GetLevel(), GetResistance(), GetSpellModOwner(), Player::GetSpellPenetrationItemMod(), GetTotalAuraModifierByMiscMask(), SpellInfo::HasAttribute(), SPELL_ATTR0_CU_BINARY_SPELL, SPELL_AURA_MOD_TARGET_RESISTANCE, and WORLD_TRIGGER.

Referenced by CalcAbsorbResist(), and MagicSpellHitResult().

◆ GetExtraUnitMovementFlags()

uint16 Unit::GetExtraUnitMovementFlags ( ) const
inline

◆ GetFaction()

uint32 Unit::GetFaction ( ) const
inline

References Object::GetUInt32Value(), and UNIT_FIELD_FACTIONTEMPLATE.

Referenced by npc_av_marshal_or_warmaster::npc_av_marshal_or_warmasterAI::AttackStart(), npc_ulduar_arachnopod_destroyer::AttackStart(), Creature::CanAssistTo(), spell_q10985_light_of_the_naaru::CheckProc(), boss_eadric::boss_eadricAI::DamageTaken(), boss_paletress::boss_paletressAI::DamageTaken(), ScriptedAI::DoRewardPlayersInArea(), Spell::EffectDuel(), Spell::EffectSummonType(), npc_av_marshal_or_warmaster::npc_av_marshal_or_warmasterAI::EnterEvadeMode(), npc_ulduar_arachnopod_destroyer::EnterEvadeMode(), npc_chesspiece::GetDefaultOrientationForTeam(), GetFactionTemplateEntry(), GetReactionTo(), WorldSession::HandleAuctionListBidderItems(), WorldSession::HandleAuctionListItems(), WorldSession::HandleAuctionListOwnerItems(), WorldSession::HandleAuctionPlaceBid(), WorldSession::HandleAuctionRemoveItem(), WorldSession::HandleAuctionSellItem(), WorldSession::HandleGossipHelloOpcode(), modify_commandscript::HandleModifyFactionCommand(), npc_commandscript::HandleNpcGuidCommand(), npc_commandscript::HandleNpcInfoCommandShowCreature(), npc_echo_of_medivh::HandlePieceJustDied(), WorldSession::HandlePlayerLoginFromDB(), TempSummon::InitStats(), InitTamedPet(), IsFriendly(), IsInPartyWith(), IsInRaidWith(), npc_infra_green_bomber_generic::npc_infra_green_bomber_genericAI::IsSummonedBy(), npc_isle_of_conquest_turret::npc_isle_of_conquest_turretAI::JustDied(), boss_shade_of_aran::JustEngagedWith(), npc_escortAI::JustRespawned(), FollowerAI::JustRespawned(), SmartAI::JustRespawned(), boss_volkhan::JustSummoned(), Pet::LoadPetFromDB(), npc_chesspiece::npc_chesspiece(), npc_plucky::npc_pluckyAI::npc_pluckyAI(), npc_taskmaster_fizzule::npc_taskmaster_fizzuleAI::npc_taskmaster_fizzuleAI(), npc_eris_hevenfire::OnQuestAccept(), npc_cork_gizelton::OnQuestAccept(), npc_ulduar_arachnopod_destroyer::PassengerBoarded(), npc_frosthound::PassengerBoarded(), PatchValuesUpdate(), npc_taskmaster_fizzule::npc_taskmaster_fizzuleAI::ReceiveEmote(), npc_plucky::npc_pluckyAI::Reset(), npc_swarm_scarab::npc_swarm_scarabAI::Reset(), npc_future_you::npc_future_youAI::Reset(), WorldSession::SendAuctionHello(), SetCharmedBy(), Player::SetGameMaster(), npc_chesspiece::sGossipHello(), boss_malchezaar::SpawnInfernal(), Spell::SummonGuardian(), Player::SummonPet(), npc_chesspiece::UpdateAI(), npc_rabid_thistle_bear::npc_rabid_thistle_bearAI::UpdateAI(), boss_malygos::UpdateAI(), npc_ulduar_arachnopod_destroyer::UpdateAI(), npc_overlord_drakuru_betrayal::UpdateAI(), and Creature::UpdateMoveInLineOfSightState().

◆ GetFactionReactionTo()

ReputationRank Unit::GetFactionReactionTo ( FactionTemplateEntry const *  factionTemplateEntry,
Unit const *  target 
) const
7213{
7214 // always neutral when no template entry found
7215 if (!factionTemplateEntry)
7216 return REP_NEUTRAL;
7217
7218 FactionTemplateEntry const* targetFactionTemplateEntry = target->GetFactionTemplateEntry();
7219 if (!targetFactionTemplateEntry)
7220 return REP_NEUTRAL;
7221
7222 // xinef: check forced reputation for self also
7223 if (Player const* selfPlayerOwner = GetAffectingPlayer())
7224 if (ReputationRank const* repRank = selfPlayerOwner->GetReputationMgr().GetForcedRankIfAny(target->GetFactionTemplateEntry()))
7225 return *repRank;
7226
7227 if (Player const* targetPlayerOwner = target->GetAffectingPlayer())
7228 {
7229 // check contested flags
7230 if (factionTemplateEntry->factionFlags & FACTION_TEMPLATE_FLAG_ATTACK_PVP_ACTIVE_PLAYERS
7231 && targetPlayerOwner->HasPlayerFlag(PLAYER_FLAGS_CONTESTED_PVP))
7232 return REP_HOSTILE;
7233 if (ReputationRank const* repRank = targetPlayerOwner->GetReputationMgr().GetForcedRankIfAny(factionTemplateEntry))
7234 return *repRank;
7235 if (!target->HasUnitFlag2(UNIT_FLAG2_IGNORE_REPUTATION))
7236 {
7237 if (FactionEntry const* factionEntry = sFactionStore.LookupEntry(factionTemplateEntry->faction))
7238 {
7239 if (factionEntry->CanHaveReputation())
7240 {
7241 // CvP case - check reputation, don't allow state higher than neutral when at war
7242 ReputationRank repRank = targetPlayerOwner->GetReputationMgr().GetRank(factionEntry);
7243 if (targetPlayerOwner->GetReputationMgr().IsAtWar(factionEntry))
7244 repRank = std::min(REP_NEUTRAL, repRank);
7245 return repRank;
7246 }
7247 }
7248 }
7249 }
7250
7251 // common faction based check
7252 if (factionTemplateEntry->IsHostileTo(*targetFactionTemplateEntry))
7253 return REP_HOSTILE;
7254 if (factionTemplateEntry->IsFriendlyTo(*targetFactionTemplateEntry))
7255 return REP_FRIENDLY;
7256 if (targetFactionTemplateEntry->IsFriendlyTo(*factionTemplateEntry))
7257 return REP_FRIENDLY;
7258 if (factionTemplateEntry->factionFlags & FACTION_TEMPLATE_FLAG_HATES_ALL_EXCEPT_FRIENDS)
7259 return REP_HOSTILE;
7260 // neutral by default
7261 return REP_NEUTRAL;
7262}
@ FACTION_TEMPLATE_FLAG_HATES_ALL_EXCEPT_FRIENDS
Definition DBCEnums.h:332
@ UNIT_FLAG2_IGNORE_REPUTATION
Definition UnitDefines.h:298
bool IsFriendlyTo(FactionTemplateEntry const &entry) const
Definition DBCStructure.h:951

References FactionTemplateEntry::faction, FACTION_TEMPLATE_FLAG_ATTACK_PVP_ACTIVE_PLAYERS, FACTION_TEMPLATE_FLAG_HATES_ALL_EXCEPT_FRIENDS, FactionTemplateEntry::factionFlags, GetAffectingPlayer(), GetFactionTemplateEntry(), HasUnitFlag2(), FactionTemplateEntry::IsFriendlyTo(), FactionTemplateEntry::IsHostileTo(), PLAYER_FLAGS_CONTESTED_PVP, REP_FRIENDLY, REP_HOSTILE, REP_NEUTRAL, sFactionStore, and UNIT_FLAG2_IGNORE_REPUTATION.

Referenced by GetReactionTo().

◆ GetFactionTemplateEntry()

FactionTemplateEntry const * Unit::GetFactionTemplateEntry ( ) const
7063{
7064 FactionTemplateEntry const* entry = sFactionTemplateStore.LookupEntry(GetFaction());
7065 if (!entry)
7066 {
7067 static ObjectGuid guid; // prevent repeating spam same faction problem
7068
7069 if (GetGUID() != guid)
7070 {
7071 if (Player const* player = ToPlayer())
7072 LOG_ERROR("entities.unit", "Player {} has invalid faction (faction template id) #{}", player->GetName(), GetFaction());
7073 else if (Creature const* creature = ToCreature())
7074 LOG_ERROR("entities.unit", "Creature (template id: {}) has invalid faction (faction template id) #{}", creature->GetCreatureTemplate()->Entry, GetFaction());
7075 else
7076 LOG_ERROR("entities.unit", "Unit (name={}, type={}) has invalid faction (faction template id) #{}", GetName(), uint32(GetTypeId()), GetFaction());
7077
7078 guid = GetGUID();
7079 }
7080 }
7081 return entry;
7082}
DBCStorage< FactionTemplateEntry > sFactionTemplateStore(FactionTemplateEntryfmt)
TypeID GetTypeId() const
Definition Object.h:129
uint32 GetFaction() const
Definition Unit.h:851
std::string const & GetName() const
Definition Object.h:528

References GetFaction(), Object::GetGUID(), WorldObject::GetName(), Object::GetTypeId(), LOG_ERROR, sFactionTemplateStore, Object::ToCreature(), and Object::ToPlayer().

Referenced by _IsValidAttackTarget(), Player::CanUseBattlegroundObject(), npc_necrotic_shard::DamageTaken(), Spell::EffectGameObjectDamage(), GetDispellableAuraList(), GetFactionReactionTo(), GetReactionTo(), Player::GetReputationPriceDiscount(), IsContestedGuard(), IsHostileToPlayers(), IsNeutralToAll(), npc_chesspiece::OnCharmed(), PatchValuesUpdate(), and RespondsToCallForHelp().

◆ GetFirstControlled()

Unit * Unit::GetFirstControlled ( ) const
8192{
8193 // Sequence: charmed, pet, other guardians
8194 Unit* unit = GetCharm();
8195 if (!unit)
8196 if (ObjectGuid guid = GetMinionGUID())
8197 unit = ObjectAccessor::GetUnit(*this, guid);
8198
8199 return unit;
8200}
ObjectGuid GetMinionGUID() const
Definition Unit.h:717

References GetCharm(), GetMinionGUID(), and ObjectAccessor::GetUnit().

Referenced by Player::CharmSpellInitialize(), WorldSession::HandlePetSetAction(), and RemoveCharmedBy().

◆ GetFirstCurrentCastingSpell()

Spell * Unit::GetFirstCurrentCastingSpell ( ) const
4343{
4344 for (uint32 i = 0; i < CURRENT_MAX_SPELL; i++)
4345 if (m_currentSpells[i] && m_currentSpells[i]->GetCastTimeRemaining() > 0)
4346 return m_currentSpells[i];
4347
4348 return nullptr;
4349}

References CURRENT_MAX_SPELL, and m_currentSpells.

Referenced by ChaseMovementGenerator< T >::DoUpdate().

◆ GetFirstMinion()

Minion * Unit::GetFirstMinion ( ) const
7747{
7748 if (ObjectGuid pet_guid = GetMinionGUID())
7749 {
7750 if (Creature* pet = ObjectAccessor::GetCreatureOrPetOrVehicle(*this, pet_guid))
7751 if (pet->HasUnitTypeMask(UNIT_MASK_MINION))
7752 return (Minion*)pet;
7753
7754 LOG_ERROR("entities.unit", "Unit::GetFirstMinion: Minion {} not exist.", pet_guid.ToString());
7755 const_cast<Unit*>(this)->SetMinionGUID(ObjectGuid::Empty);
7756 }
7757
7758 return nullptr;
7759}
void SetMinionGUID(ObjectGuid guid)
Definition Unit.h:718
Creature * GetCreatureOrPetOrVehicle(WorldObject const &, ObjectGuid const &)
Definition ObjectAccessor.cpp:234

References ObjectGuid::Empty, ObjectAccessor::GetCreatureOrPetOrVehicle(), GetMinionGUID(), LOG_ERROR, SetMinionGUID(), and UNIT_MASK_MINION.

◆ GetFlatModifierValue()

float Unit::GetFlatModifierValue ( UnitMods  unitMod,
UnitModifierFlatType  modifierType 
) const

◆ GetFollowAngle()

◆ GetGameObject()

GameObject * Unit::GetGameObject ( uint32  spellId) const
6567{
6568 for (GameObjectList::const_iterator itr = m_gameObj.begin(); itr != m_gameObj.end(); ++itr)
6569 if (GameObject* go = ObjectAccessor::GetGameObject(*this, *itr))
6570 if (go->GetSpellId() == spellId)
6571 return go;
6572
6573 return nullptr;
6574}

References ObjectAccessor::GetGameObject(), and m_gameObj.

Referenced by Player::GetGameObjectIfCanInteractWith(), and Player::TeleportTo().

◆ getGender()

◆ GetGuardianPet()

Guardian * Unit::GetGuardianPet ( ) const
7762{
7763 if (ObjectGuid pet_guid = GetPetGUID())
7764 {
7765 if (Creature* pet = ObjectAccessor::GetCreatureOrPetOrVehicle(*this, pet_guid))
7766 if (pet->HasUnitTypeMask(UNIT_MASK_GUARDIAN))
7767 return (Guardian*)pet;
7768
7769 LOG_FATAL("entities.unit", "Unit::GetGuardianPet: Guardian {} not exist.", pet_guid.ToString());
7770 const_cast<Unit*>(this)->SetPetGUID(ObjectGuid::Empty);
7771 }
7772
7773 return nullptr;
7774}
#define LOG_FATAL(filterType__,...)
Definition Log.h:154
@ UNIT_MASK_GUARDIAN
Definition UnitDefines.h:161
Definition TemporarySummon.h:106
void SetPetGUID(ObjectGuid guid)
Definition Unit.h:722
ObjectGuid GetPetGUID() const
Definition Unit.h:723

References ObjectGuid::Empty, ObjectAccessor::GetCreatureOrPetOrVehicle(), GetPetGUID(), LOG_FATAL, SetPetGUID(), and UNIT_MASK_GUARDIAN.

Referenced by spell_hun_check_pet_los::CheckCast(), Spell::CheckCast(), Spell::EffectSummonPet(), GetNextRandomRaidMemberOrPet(), AuraEffect::HandleAuraDummy(), HandleAuraRaidProcFromChargeWithValue(), AuraEffect::HandleModDamageDone(), WorldSession::HandlePetCastSpellOpcode(), WorldSession::HandlePetSpellAutocastOpcode(), Spell::SelectImplicitCasterObjectTargets(), and SetMinion().

◆ GetHealth()

uint32 Unit::GetHealth ( ) const
inline
@ UNIT_FIELD_HEALTH
Definition UpdateFields.h:96

References Object::GetUInt32Value(), and UNIT_FIELD_HEALTH.

Referenced by Player::_SaveCharacter(), spell_yogg_saron_protective_gaze_aura::Absorb(), spell_pri_guardian_spirit::Absorb(), spell_rog_cheat_death::Absorb(), spell_pal_ardent_defender::Absorb(), boss_twilight_halion::boss_twilight_halionAI::boss_twilight_halionAI(), WorldSession::BuildPartyMemberStatsChangedPacket(), SpellInfo::CalcPowerCost(), Spell::CheckPower(), CountPctFromCurHealth(), ScriptedAI::DamageTaken(), boss_eregos::boss_eregosAI::DamageTaken(), boss_razorgore::DamageTaken(), boss_majordomo::DamageTaken(), boss_ragnaros::DamageTaken(), npc_mc_core_hound::DamageTaken(), boss_attumen::DamageTaken(), boss_midnight::DamageTaken(), boss_julianne::DamageTaken(), boss_romulo::DamageTaken(), boss_apothecary_hummel::boss_apothecary_hummelAI::DamageTaken(), boss_muru::DamageTaken(), npc_dark_fiend::DamageTaken(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::DamageTaken(), boss_headless_horseman::DamageTaken(), boss_headless_horseman_head::DamageTaken(), boss_eadric::boss_eadricAI::DamageTaken(), boss_paletress::boss_paletressAI::DamageTaken(), npc_argent_soldier::npc_argent_soldierAI::DamageTaken(), boss_black_knight::boss_black_knightAI::DamageTaken(), boss_grand_champion::boss_grand_championAI::DamageTaken(), npc_announcer_toc5::npc_announcer_toc5AI::DamageTaken(), npc_frost_sphere::npc_frost_sphereAI::DamageTaken(), boss_ick::boss_ickAI::DamageTaken(), npc_pos_deathwhisper_necrolyte::npc_pos_deathwhisper_necrolyteAI::DamageTaken(), npc_gunship::npc_gunshipAI::DamageTaken(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::DamageTaken(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::DamageTaken(), npc_terenas_menethil::npc_terenas_menethilAI::DamageTaken(), boss_valithria_dreamwalker::boss_valithria_dreamwalkerAI::DamageTaken(), npc_crok_scourgebane::npc_crok_scourgebaneAI::DamageTaken(), npc_crystalline_frayer::DamageTaken(), npc_collapsing_star::DamageTaken(), boss_freya::DamageTaken(), boss_hodir::DamageTaken(), npc_ulduar_leviathan_mkii::DamageTaken(), npc_ulduar_vx001::DamageTaken(), npc_ulduar_aerial_command_unit::DamageTaken(), boss_yoggsaron_immortal_guardian::DamageTaken(), boss_ingvar_the_plunderer::DamageTaken(), npc_vrykul_skeleton::DamageTaken(), npc_wild_wyrm::DamageTaken(), npc_overlord_drakuru_betrayal::DamageTaken(), npc_akama_illidan::DamageTaken(), npc_maiev_illidan::DamageTaken(), boss_illidari_council::DamageTaken(), boss_illidari_council_memberAI::DamageTaken(), boss_essence_of_suffering::boss_essence_of_sufferingAI::DamageTaken(), boss_essence_of_desire::boss_essence_of_desireAI::DamageTaken(), npc_akama_shade::DamageTaken(), boss_the_lurker_below::DamageTaken(), npc_shattered_hand_scout::DamageTaken(), boss_alar::DamageTaken(), advisor_baseAI::DamageTaken(), npc_magister_aledis::DamageTaken(), npc_hor_leader_second::npc_hor_leader_secondAI::DamageTaken(), npc_ice_tomb::npc_ice_tombAI::DamageTaken(), npc_blistering_zombie::npc_blistering_zombieAI::DamageTaken(), npc_molten_golem::DamageTaken(), boss_nightbane::DamageTaken(), boss_thekal::DamageTaken(), boss_felblood_kaelthas::DamageTaken(), boss_anub_arak::DamageTaken(), boss_razorscale::DamageTaken(), boss_illidan_stormrage::DamageTaken(), npc_garr_firesworn::DamageTaken(), boss_the_lich_king::boss_the_lich_kingAI::DamageTaken(), SmartAI::DamageTaken(), boss_mal_ganis::boss_mal_ganisAI::DamageTaken(), boss_kologarn::DamageTaken(), boss_kologarn_arms::DamageTaken(), boss_thorim::DamageTaken(), boss_yoggsaron_sara::DamageTaken(), DealDamage(), DealDamageShieldDamage(), boss_xt002::DoAction(), boss_ichoron::DoAction(), npc_the_scourge_cauldron::npc_the_scourge_cauldronAI::DoDie(), Spell::EffectHealMaxHealth(), Spell::EffectInstaKill(), Pet::FillPetInfo(), boss_supremus::FindHatefulStrikeTarget(), GetHealthGain(), GetHealthPct(), spell_illidari_council_empyreal_balance::HandleAfterCast(), spell_illidari_council_empyreal_equivalency::HandleAfterCast(), AuraEffect::HandleAuraModIncreaseHealth(), AuraEffect::HandleAuraModIncreaseMaxHealth(), spell_rajaxx_thundercrash::HandleDamageCalc(), misc_commandscript::HandleDieCommand(), spell_oculus_soar_aura::HandleEffectPeriodic(), Player::HandleFall(), npc_commandscript::HandleNpcInfoCommandShowCreature(), spell_dk_pet_scaling::HandlePeriodic(), spell_hun_generic_scaling::HandlePeriodic(), spell_mage_pet_scaling::HandlePeriodic(), spell_sha_feral_spirit_scaling::HandlePeriodic(), spell_warl_generic_scaling::HandlePeriodic(), AuraEffect::HandlePeriodicDamageAurasTick(), AuraEffect::HandlePeriodicHealthFunnelAuraTick(), AuraEffect::HandlePeriodicHealthLeechAuraTick(), AuraEffect::HandlePeriodicTriggerSpellAuraTick(), spell_item_blood_draining_enchant::HandleProc(), WorldSession::HandleRequestPartyMemberStatsOpcode(), ArenaSpectator::HandleResetCommand(), HealthAbovePct(), HealthAbovePctHealed(), HealthBelowPct(), HealthBelowPctDamaged(), IsFullHealth(), npc_dirt_mound::JustSummoned(), boss_attumen::JustSummoned(), boss_baltharus_the_warborn::boss_baltharus_the_warbornAI::JustSummoned(), Kill(), ModifyHealth(), spell_xt002_gravity_bomb_aura::OnPeriodic(), Acore::MostHPMissingInRange::operator()(), Acore::MostHPMissingGroupInRange::operator()(), Acore::HealthPctOrderPred::operator()(), Acore::HealthPctOrderPred::operator()(), spell_gluth_decimate_damage::PrepareSpellScript(), boss_priestess_lackey_commonAI::RecalculateThreat(), boss_faction_championsAI::RecalculateThreat(), Creature::RegenerateHealth(), Player::RegenerateHealth(), Creature::ResetPlayerDamageReq(), Player::SaveHealthBeforeDuel(), Pet::SavePetToDB(), Creature::SaveToDB(), SendAttackStateUpdate(), SendSpellNonMeleeDamageLog(), SendSpellNonMeleeReflectLog(), SetMaxHealth(), boss_eadric::boss_eadricAI::SpellHit(), boss_headless_horseman_head::SpellHitTarget(), boss_malchezaar::SpellHitTarget(), boss_ouro::Submerge(), Aura::Update(), boss_headless_horseman::UpdateAI(), boss_prince_valanar_icc::boss_prince_valanarAI::UpdateAI(), boss_patchwerk::boss_patchwerkAI::UpdateAI(), boss_flame_leviathan_defense_turret::UpdateAI(), boss_razorscale::UpdateAI(), boss_ymiron::boss_ymironAI::UpdateAI(), npc_dragonmaw_peon::npc_dragonmaw_peonAI::UpdateAI(), npc_injured_patient::npc_injured_patientAI::UpdateAI(), Player::UpdateCharmedAI(), Creature::UpdateEntry(), and boss_twin_valkyrAI::UpdateSharedHealth().

◆ GetHealthGain()

int32 Unit::GetHealthGain ( int32  dVal)
11014{
11015 int32 gain = 0;
11016
11017 if (dVal == 0)
11018 return 0;
11019
11020 int32 curHealth = (int32)GetHealth();
11021
11022 int32 val = dVal + curHealth;
11023 if (val <= 0)
11024 {
11025 return -curHealth;
11026 }
11027
11028 int32 maxHealth = (int32)GetMaxHealth();
11029
11030 if (val < maxHealth)
11031 gain = dVal;
11032 else if (curHealth != maxHealth)
11033 gain = maxHealth - curHealth;
11034
11035 return gain;
11036}

References GetHealth(), and GetMaxHealth().

Referenced by Spell::DoAllEffectOnTarget().

◆ GetHealthPct()

◆ GetHighestExclusiveSameEffectSpellGroupValue()

int32 Unit::GetHighestExclusiveSameEffectSpellGroupValue ( AuraEffect const *  aurEff,
AuraType  auraType,
bool  checkMiscValue = false,
int32  miscValue = 0 
) const
4562{
4563 int32 val = 0;
4564 SpellSpellGroupMapBounds spellGroup = sSpellMgr->GetSpellSpellGroupMapBounds(aurEff->GetSpellInfo()->GetFirstRankSpell()->Id);
4565 for (SpellSpellGroupMap::const_iterator itr = spellGroup.first; itr != spellGroup.second ; ++itr)
4566 {
4567 if (sSpellMgr->GetSpellGroupStackRule(itr->second) == SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT)
4568 {
4569 AuraEffectList const& auraEffList = GetAuraEffectsByType(auraType);
4570 for (AuraEffectList::const_iterator auraItr = auraEffList.begin(); auraItr != auraEffList.end(); ++auraItr)
4571 {
4572 if (aurEff != (*auraItr) && (!checkMiscValue || (*auraItr)->GetMiscValue() == miscValue) &&
4573 sSpellMgr->IsSpellMemberOfSpellGroup((*auraItr)->GetSpellInfo()->Id, itr->second))
4574 {
4575 // absolute value only
4576 if (abs(val) < abs((*auraItr)->GetAmount()))
4577 val = (*auraItr)->GetAmount();
4578 }
4579 }
4580 }
4581 }
4582 return val;
4583}
std::pair< SpellSpellGroupMap::const_iterator, SpellSpellGroupMap::const_iterator > SpellSpellGroupMapBounds
Definition SpellMgr.h:354
@ SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT
Definition SpellMgr.h:365

References GetAuraEffectsByType(), SpellInfo::GetFirstRankSpell(), AuraEffect::GetSpellInfo(), SpellInfo::Id, SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT, and sSpellMgr.

Referenced by AuraEffect::HandleAuraModStat(), AuraEffect::HandleModCastingSpeed(), AuraEffect::HandleModCombatSpeedPct(), and AuraEffect::HandleModMeleeSpeedPct().

◆ GetHoverHeight()

float Unit::GetHoverHeight ( ) const
inline

◆ GetInterruptMask()

uint32 Unit::GetInterruptMask ( ) const
inline
1603{ return m_interruptMask; }

References m_interruptMask.

◆ GetLastDamagedTargetGuid()

ObjectGuid const & Unit::GetLastDamagedTargetGuid ( ) const
inline
972{ return _lastDamagedTargetGuid; }

References _lastDamagedTargetGuid.

◆ GetLastExtraAttackSpell()

uint32 Unit::GetLastExtraAttackSpell ( ) const
inline

◆ GetLevel()

uint8 Unit::GetLevel ( ) const
inline
@ UNIT_FIELD_LEVEL
Definition UpdateFields.h:114

References Object::GetUInt32Value(), and UNIT_FIELD_LEVEL.

Referenced by Player::_ApplyItemBonuses(), Player::_ApplyWeaponDamage(), KillRewarder::_InitGroupData(), Pet::_LoadAuras(), KillRewarder::_RewardPlayer(), KillRewarder::_RewardXP(), Player::_SaveCharacter(), Player::_SaveStats(), spell_pal_ardent_defender::Absorb(), Pet::addSpell(), Spell::AddUnitTarget(), Player::ApplyEnchantment(), AuraEffect::AuraEffect(), BattlegroundMgr::BuildBattlegroundListPacket(), WorldSession::BuildPartyMemberStatsChangedPacket(), CalcArmorReducedDamage(), SpellInfo::CalcPowerCost(), Aura::CalcProcChance(), SpellEffectInfo::CalcRadius(), spell_gen_disabled_above_63::CalculateAmount(), spell_item_arcane_shroud::CalculateAmount(), spell_item_the_eye_of_diminution::CalculateAmount(), AuraEffect::CalculateAmount(), CalculateLevelPenalty(), CalculateMeleeDamage(), Player::CalculateMinMaxDamage(), Player::CalculateQuestRewardXP(), Player::CalculateReputationGain(), Player::CalculateTalentsPoints(), SpellEffectInfo::CalcValue(), Player::CanEquipItem(), Group::CanJoinBattlegroundQueue(), Creature::CanResetTalents(), Player::CanSeeStartQuest(), Player::CanUseItem(), Player::CheckAreaExploreAndOutdoor(), spell_hun_tame_beast::CheckCast(), Spell::CheckCast(), ServerMailCondition::CheckCondition(), Spell::CheckEffectTarget(), spell_gen_proc_above_75::CheckLevel(), spell_gen_proc_reduced_above_60::CheckProc(), spell_item_green_whelp_armor::CheckProc(), Pet::CreateBaseAtTamed(), Player::CreatePet(), Player::CreatePet(), CreateTamedPetFrom(), CreateTamedPetFrom(), DealMeleeDamage(), DoLowUnlearnCost(), DoMedUnlearnCost(), Spell::DoSpellHitOnUnit(), Spell::EffectAddHonor(), Spell::EffectApplyGlyph(), Spell::EffectDuel(), Spell::EffectEnergize(), Spell::EffectSchoolDMG(), Spell::EffectSkinning(), Spell::EffectTameCreature(), Pet::FillPetInfo(), spell_gen_filter_party_level_80::FilterTargets(), lfg::LFGMgr::FinishDungeon(), Acore::XP::Gain(), Player::GetAverageItemLevel(), Player::GetAverageItemLevelForDF(), Player::GetBarberShopCost(), Player::GetBGAccessByLevel(), Pet::GetCurrentFoodBenefitLevel(), npc_wg_quest_giver::GetDialogStatus(), Player::GetDodgeFromAgility(), GetEffectiveResistChance(), SocialMgr::GetFriendInfo(), getLevelForTarget(), Creature::getLevelForTarget(), GetMaxSkillValueForLevel(), Player::GetMeleeCritFromAgility(), Pet::GetNativeObjectScale(), Player::GetQuestDialogStatus(), Player::GetQuestLevel(), Player::GetRatingMultiplier(), Creature::GetShieldBlockValue(), Player::GetSpellCritFromIntellect(), Trainer::Trainer::GetSpellState(), Player::GetsRecruitAFriendBonus(), GetUnitMeleeSkill(), Player::GiveLevel(), Pet::GivePetLevel(), Pet::GivePetXP(), Player::GiveXP(), WorldSession::HandleAcceptGrantLevel(), OutdoorPvPSI::HandleAreaTrigger(), WorldSession::HandleArenaTeamInviteOpcode(), WorldSession::HandleAuctionListItems(), Aura::HandleAuraSpecificMods(), WorldSession::HandleBattleFieldPortOpcode(), WorldSession::HandleBattlefieldStatusOpcode(), WorldSession::HandleBattlemasterJoinArena(), WorldSession::HandleBattlemasterJoinOpcode(), Player::HandleDrowning(), WorldSession::HandleGrantLevel(), WorldSession::HandleGroupInviteOpcode(), WorldSession::HandleLfgPlayerLockInfoRequestOpcode(), Guild::HandleMemberDepositMoney(), Guild::HandleMemberWithdrawMoney(), WorldSession::HandleMessagechatOpcode(), npc_commandscript::HandleNpcInfoCommandShowCreature(), WorldSession::HandleOfferPetitionOpcode(), WorldSession::HandlePetitionBuyOpcode(), WorldSession::HandlePetitionSignOpcode(), misc_commandscript::HandlePInfoCommand(), WorldSession::HandlePlayerLoginFromDB(), spell_pri_divine_aegis::HandleProc(), WorldSession::HandleRequestPartyMemberStatsOpcode(), reset_commandscript::HandleResetLevelCommand(), spell_wintergrasp_portal::HandleScript(), spell_item_scroll_of_recall::HandleScript(), WorldSession::HandleSendMail(), player_settings_commandscript::HandleSettingsAnnouncerFlags(), Player::InitGlyphsForLevel(), npc_pet_hunter_snake_trap::InitializeAI(), lfg::LFGMgr::InitializeLockedDungeons(), Pet::InitLevelupSpellsForLevel(), Puppet::InitStats(), TempSummon::InitStats(), Player::InitStatsForLevel(), Pet::InitTalentForLevel(), Player::InitTaxiNodesForLevel(), Battlefield::InvitePlayerToWar(), Player::isHonorOrXPTarget(), Player::IsMaxLevel(), Player::LearnDefaultSkill(), Pet::LoadPetFromDB(), WorldSession::LogoutPlayer(), AchievementCriteriaData::Meets(), MeleeSpellHitResult(), npc_eagle_trash_aggro_trigger::MoveInLineOfSight(), Player::OCTRegenHPPerSpirit(), Player::OCTRegenMPPerSpirit(), spell_item_with_mount_speed::OnApply(), item_generic_limit_chance_above_60::OnCastItemCombatSpell(), npc_prof_alchemy::OnGossipHello(), npc_prof_blacksmith::OnGossipHello(), npc_prof_leather::OnGossipHello(), npc_prof_tailor::OnGossipHello(), go_evil_book_for_dummies::OnGossipHello(), Player::OnGossipSelect(), QuestApprenticeAnglerPlayerScript::OnPlayerCompleteQuest(), near_scarshield_infiltrator::OnTrigger(), at_scarshield_infiltrator::OnTrigger(), Player::PrepareGossipMenu(), Player::Regenerate(), Player::RegenerateHealth(), Player::RemovedInsignia(), Pet::removeSpell(), Pet::resetTalents(), Player::ResurrectPlayer(), Player::RewardHonor(), Player::RewardQuest(), RewardRage(), Player::RewardReputation(), RollMeleeOutcomeAgainst(), ArenaTeam::Roster(), Player::Satisfy(), Player::SatisfyQuestLevel(), Pet::SavePetToDB(), CalendarMgr::SendCalendarEvent(), CalendarMgr::SendCalendarEventInvite(), WorldSession::SendLfgPlayerReward(), WorldSession::SendLfgRoleCheckUpdate(), Player::SendLoot(), PlayerMenu::SendQuestGiverOfferReward(), PlayerMenu::SendQuestGiverQuestDetails(), PlayerMenu::SendQuestQueryResponse(), Player::SendQuestReward(), Player::SetRestBonus(), Guild::Member::SetStats(), SpellPctDamageModsDone(), Spell::SummonGuardian(), Player::SummonPet(), Pet::SynchronizeLevelWithOwner(), Aura::Update(), Player::UpdateAttackPowerAndDamage(), Player::UpdateCombatSkills(), Creature::UpdateEntry(), lfg::LFGMgr::UpdateRaidBrowser(), and GameObject::Use().

◆ getLevelForTarget()

◆ GetMagicHitRedirectTarget()

Unit * Unit::GetMagicHitRedirectTarget ( Unit victim,
SpellInfo const *  spellInfo 
)
8136{
8137 // Patch 1.2 notes: Spell Reflection no longer reflects abilities
8138 if (spellInfo->HasAttribute(SPELL_ATTR0_IS_ABILITY) || spellInfo->HasAttribute(SPELL_ATTR1_NO_REDIRECTION) || spellInfo->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES))
8139 return victim;
8140
8142 for (Unit::AuraEffectList::const_iterator itr = magnetAuras.begin(); itr != magnetAuras.end(); ++itr)
8143 {
8144 if (Unit* magnet = (*itr)->GetBase()->GetUnitOwner())
8145 if (spellInfo->CheckExplicitTarget(this, magnet) == SPELL_CAST_OK
8146 //&& spellInfo->CheckTarget(this, magnet, false) == SPELL_CAST_OK
8147 && _IsValidAttackTarget(magnet, spellInfo)
8148 /*&& IsWithinLOSInMap(magnet)*/)
8149 {
8150 // Xinef: We should choose minimum between flight time and queue time as in reflect, however we dont know flight time at this point, use arbitrary small number
8151 magnet->m_Events.AddEvent(new RedirectSpellEvent(*magnet, victim->GetGUID(), *itr), magnet->m_Events.CalculateQueueTime(100));
8152
8153 if (magnet->IsTotem())
8154 {
8155 uint64 queueTime = magnet->m_Events.CalculateQueueTime(100);
8156 if (spellInfo->Speed > 0.0f)
8157 {
8158 float dist = GetDistance(magnet->GetPositionX(), magnet->GetPositionY(), magnet->GetPositionZ());
8159 if (dist < 5.0f)
8160 dist = 5.0f;
8161 queueTime = magnet->m_Events.CalculateTime((uint64)std::floor(dist / spellInfo->Speed * 1000.0f));
8162 }
8163
8164 magnet->m_Events.AddEvent(new KillMagnetEvent(*magnet), queueTime);
8165 }
8166
8167 return magnet;
8168 }
8169 }
8170 return victim;
8171}
@ SPELL_ATTR1_NO_REDIRECTION
Definition SharedDefines.h:410
@ SPELL_ATTR0_IS_ABILITY
Definition SharedDefines.h:374
@ SPELL_AURA_SPELL_MAGNET
Definition SpellAuraDefines.h:159
Definition TotemAI.h:47
Definition Unit.h:2316
bool _IsValidAttackTarget(Unit const *target, SpellInfo const *bySpell, WorldObject const *obj=nullptr) const
Definition Unit.cpp:10752
float GetDistance(WorldObject const *obj) const
Definition Object.cpp:1295

References _IsValidAttackTarget(), SpellInfo::CheckExplicitTarget(), GetAuraEffectsByType(), WorldObject::GetDistance(), Object::GetGUID(), SpellInfo::HasAttribute(), SpellInfo::Speed, SPELL_ATTR0_IS_ABILITY, SPELL_ATTR0_NO_IMMUNITIES, SPELL_ATTR1_NO_REDIRECTION, SPELL_AURA_SPELL_MAGNET, and SPELL_CAST_OK.

Referenced by Spell::SelectExplicitTargets().

◆ GetMaxHealth()

uint32 Unit::GetMaxHealth ( ) const
inline
@ UNIT_FIELD_MAXHEALTH
Definition UpdateFields.h:104

References Object::GetUInt32Value(), and UNIT_FIELD_MAXHEALTH.

Referenced by Player::_SaveStats(), Battleground::AddPlayer(), boss_twin_valkyrAI::boss_twin_valkyrAI(), boss_viscidus::boss_viscidus(), WorldSession::BuildPartyMemberStatsChangedPacket(), spell_item_skull_of_impeding_doom::CalculateDamageAmount(), CountPctFromMaxHealth(), boss_eregos::boss_eregosAI::DamageTaken(), npc_dark_fiend::DamageTaken(), boss_black_knight::boss_black_knightAI::DamageTaken(), boss_alar::DamageTaken(), npc_molten_golem::DamageTaken(), boss_razorscale::DamageTaken(), boss_viscidus::DamageTaken(), boss_twinemperorsAI::DamageTaken(), boss_thorim_start_npcs::DamageTaken(), npc_heated_battle::npc_heated_battleAI::DamageTaken(), boss_thorim::DamageTaken(), boss_yoggsaron_sara::DamageTaken(), boss_prince_valanar_icc::boss_prince_valanarAI::DoAction(), npc_terenas_menethil::npc_terenas_menethilAI::DoAction(), boss_grand_champion::boss_grand_championAI::DoAction(), boss_thaddius_summon::boss_thaddius_summonAI::DoAction(), boss_xt002::DoAction(), npc_xt002_heart::DoAction(), boss_yoggsaron::DoAction(), Spell::EffectHealMaxHealth(), Spell::EffectSummonPet(), boss_prince_keleseth_icc::boss_prince_kelesethAI::EnterEvadeMode(), boss_prince_taldaram_icc::boss_prince_taldaramAI::EnterEvadeMode(), boss_prince_valanar_icc::boss_prince_valanarAI::EnterEvadeMode(), Acore::XP::Gain(), GetHealthGain(), GetHealthPct(), npc_echo_of_medivh::GetPiece(), spell_illidari_council_empyreal_balance::HandleAfterCast(), AuraEffect::HandleAuraModIncreaseHealthPercent(), AuraEffect::HandleAuraModIncreaseMaxHealth(), misc_commandscript::HandleDamageCommand(), misc_commandscript::HandleDieCommand(), Player::HandleDrowning(), spell_oculus_soar_aura::HandleEffectPeriodic(), Player::HandleFall(), spell_pal_lay_on_hands::HandleMaxHealthHeal(), AuraEffect::HandleModTotalPercentStat(), npc_commandscript::HandleNpcInfoCommandShowCreature(), spell_dru_frenzied_regeneration::HandlePeriodic(), AuraEffect::HandlePeriodicDamageAurasTick(), AuraEffect::HandlePeriodicTriggerSpellAuraTick(), npc_echo_of_medivh::HandlePieceJustDied(), spell_sha_nature_guardian::HandleProc(), spell_warr_item_t10_prot_4p_bonus::HandleProc(), WorldSession::HandleRequestPartyMemberStatsOpcode(), ArenaSpectator::HandleResetCommand(), spell_stinky_precious_decimate::HandleScript(), IsFullHealth(), boss_twin_valkyrAI::JustEngagedWith(), boss_sister_svalna::boss_sister_svalnaAI::JustEngagedWith(), boss_ingvar_the_plunderer::JustEngagedWith(), boss_prince_keleseth_icc::boss_prince_kelesethAI::JustEngagedWith(), boss_prince_taldaram_icc::boss_prince_taldaramAI::JustEngagedWith(), boss_prince_valanar_icc::boss_prince_valanarAI::JustEngagedWith(), boss_prince_valanar_icc::boss_prince_valanarAI::JustReachedHome(), npc_dirt_mound::JustSummoned(), boss_skeram::JustSummoned(), boss_drakkari_colossus::boss_drakkari_colossusAI::JustSummoned(), boss_gluth::boss_gluthAI::KilledUnit(), Creature::LoadCreatureFromDB(), Player::LoadFromDB(), Pet::LoadPetFromDB(), ModifyHealth(), npc_xt002_life_spark::npc_xt002_life_spark(), instance_karazhan::instance_karazhan_InstanceMapScript::OnCreatureCreate(), instance_halls_of_reflection::OnCreatureCreate(), Acore::MostHPMissingInRange::operator()(), Acore::MostHPMissingGroupInRange::operator()(), Acore::HealthPctOrderPred::operator()(), Acore::HealthPctOrderPred::operator()(), Player::outDebugValues(), Player::ProcessDelayedOperations(), SmartScript::ProcessEvent(), boss_priestess_lackey_commonAI::RecalculateThreat(), boss_faction_championsAI::RecalculateThreat(), Creature::RegenerateHealth(), Player::RegenerateHealth(), boss_prince_keleseth_icc::boss_prince_kelesethAI::Reset(), boss_prince_taldaram_icc::boss_prince_taldaramAI::Reset(), boss_prince_valanar_icc::boss_prince_valanarAI::Reset(), boss_valithria_dreamwalker::boss_valithria_dreamwalkerAI::Reset(), Player::ResetAllPowers(), Player::ResurectUsingRequestData(), Player::ResurrectPlayer(), SetFullHealth(), SetHealth(), boss_headless_horseman::SpellHit(), npc_necrotic_shard::SpellHit(), boss_black_knight::boss_black_knightAI::SpellHitTarget(), npc_simon_bunny::npc_simon_bunnyAI::SpellHitTarget(), npc_giant_claw_tentacle::Submerge(), boss_drakkari_colossus::boss_drakkari_colossusAI::SummonedCreatureDespawn(), boss_viscidus::SummonedCreatureDies(), boss_headless_horseman::UpdateAI(), npc_nerubian_burrower::npc_nerubian_burrowerAI::UpdateAI(), npc_snobold_vassal::npc_snobold_vassalAI::UpdateAI(), npc_hor_lich_king::UpdateAI(), boss_garfrost::boss_garfrostAI::UpdateAI(), boss_ick::boss_ickAI::UpdateAI(), boss_tyrannus::boss_tyrannusAI::UpdateAI(), boss_flame_leviathan_defense_turret::UpdateAI(), boss_razorscale::UpdateAI(), boss_ymiron::boss_ymironAI::UpdateAI(), npc_boneguard_footman::npc_boneguard_footmanAI::UpdateAI(), npc_target_dummy::UpdateAI(), Creature::UpdateEntry(), and lfg::LFGMgr::UpdateRaidBrowser().

◆ GetMaxNegativeAuraModifier() [1/2]

int32 Unit::GetMaxNegativeAuraModifier ( AuraType  auratype) const

◆ GetMaxNegativeAuraModifier() [2/2]

int32 Unit::GetMaxNegativeAuraModifier ( AuraType  auraType,
std::function< bool(AuraEffect const *)> const &  predicate 
) const
6281{
6282 AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auraType);
6283 if (mTotalAuraList.empty())
6284 return 0;
6285
6286 int32 modifier = 0;
6287 for (AuraEffect const* aurEff : mTotalAuraList)
6288 {
6289 if (predicate(aurEff))
6290 modifier = std::min(modifier, aurEff->GetAmount());
6291 }
6292
6293 return modifier;
6294}

References GetAuraEffectsByType().

◆ GetMaxNegativeAuraModifierByAffectMask()

int32 Unit::GetMaxNegativeAuraModifierByAffectMask ( AuraType  auratype,
SpellInfo const *  affectedSpell 
) const
6427{
6428 return GetMaxNegativeAuraModifier(auraType, [affectedSpell](AuraEffect const* aurEff) -> bool
6429 {
6430 if (aurEff->IsAffectedOnSpell(affectedSpell))
6431 return true;
6432 return false;
6433 });
6434}

References GetMaxNegativeAuraModifier(), and AuraEffect::IsAffectedOnSpell().

◆ GetMaxNegativeAuraModifierByMiscMask()

int32 Unit::GetMaxNegativeAuraModifierByMiscMask ( AuraType  auratype,
uint32  misc_mask 
) const
6347{
6348 return GetMaxNegativeAuraModifier(auraType, [miscMask](AuraEffect const* aurEff) -> bool
6349 {
6350 if ((aurEff->GetMiscValue() & miscMask) != 0)
6351 return true;
6352 return false;
6353 });
6354}

References GetMaxNegativeAuraModifier(), and AuraEffect::GetMiscValue().

Referenced by SpellTakenCritChance().

◆ GetMaxNegativeAuraModifierByMiscValue()

int32 Unit::GetMaxNegativeAuraModifierByMiscValue ( AuraType  auratype,
int32  misc_value 
) const
6387{
6388 return GetMaxNegativeAuraModifier(auraType, [miscValue](AuraEffect const* aurEff) -> bool
6389 {
6390 if (aurEff->GetMiscValue() == miscValue)
6391 return true;
6392 return false;
6393 });
6394}

References GetMaxNegativeAuraModifier(), and AuraEffect::GetMiscValue().

Referenced by MagicSpellHitResult(), and ModSpellDuration().

◆ GetMaxPositiveAuraModifier() [1/2]

◆ GetMaxPositiveAuraModifier() [2/2]

int32 Unit::GetMaxPositiveAuraModifier ( AuraType  auraType,
std::function< bool(AuraEffect const *)> const &  predicate 
) const
6265{
6266 AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auraType);
6267 if (mTotalAuraList.empty())
6268 return 0;
6269
6270 int32 modifier = 0;
6271 for (AuraEffect const* aurEff : mTotalAuraList)
6272 {
6273 if (predicate(aurEff))
6274 modifier = std::max(modifier, aurEff->GetAmount());
6275 }
6276
6277 return modifier;
6278}

References GetAuraEffectsByType().

◆ GetMaxPositiveAuraModifierByAffectMask()

int32 Unit::GetMaxPositiveAuraModifierByAffectMask ( AuraType  auratype,
SpellInfo const *  affectedSpell 
) const
6417{
6418 return GetMaxPositiveAuraModifier(auraType, [affectedSpell](AuraEffect const* aurEff) -> bool
6419 {
6420 if (aurEff->IsAffectedOnSpell(affectedSpell))
6421 return true;
6422 return false;
6423 });
6424}

References GetMaxPositiveAuraModifier(), and AuraEffect::IsAffectedOnSpell().

◆ GetMaxPositiveAuraModifierByMiscMask()

int32 Unit::GetMaxPositiveAuraModifierByMiscMask ( AuraType  auratype,
uint32  misc_mask,
const AuraEffect except = nullptr 
) const
6337{
6338 return GetMaxPositiveAuraModifier(auraType, [miscMask, except](AuraEffect const* aurEff) -> bool
6339 {
6340 if (except != aurEff && (aurEff->GetMiscValue() & miscMask) != 0)
6341 return true;
6342 return false;
6343 });
6344}

References GetMaxPositiveAuraModifier(), and AuraEffect::GetMiscValue().

Referenced by CalcAbsorbResist(), AuraEffect::HandleAuraModResistanceExclusive(), SpellTakenCritChance(), and UpdateResistanceBuffModsMod().

◆ GetMaxPositiveAuraModifierByMiscValue()

int32 Unit::GetMaxPositiveAuraModifierByMiscValue ( AuraType  auratype,
int32  misc_value 
) const
6377{
6378 return GetMaxPositiveAuraModifier(auraType, [miscValue](AuraEffect const* aurEff) -> bool
6379 {
6380 if (aurEff->GetMiscValue() == miscValue)
6381 return true;
6382 return false;
6383 });
6384}

References GetMaxPositiveAuraModifier(), and AuraEffect::GetMiscValue().

Referenced by MagicSpellHitResult().

◆ GetMaxPower()

uint32 Unit::GetMaxPower ( Powers  power) const
inline
1136{ return GetUInt32Value(static_cast<uint16>(UNIT_FIELD_MAXPOWER1) + power); }
@ UNIT_FIELD_MAXPOWER1
Definition UpdateFields.h:105

References Object::GetUInt32Value(), and UNIT_FIELD_MAXPOWER1.

Referenced by Player::_SaveStats(), WorldSession::BuildPartyMemberStatsChangedPacket(), SpellInfo::CalcPowerCost(), spell_gen_replenishment_aura::CalculateAmount(), spell_item_skull_of_impeding_doom::CalculateManaLeechAmount(), Spell::CheckItems(), Player::Create(), boss_shade_of_aran::DamageTaken(), Spell::EffectEnergize(), Spell::EffectEnergizePct(), Spell::EffectPowerBurn(), Spell::EffectResurrect(), Spell::EffectSelfResurrect(), Spell::EffectSummonPet(), GetPowerPct(), Player::GiveLevel(), Aura::HandleAuraSpecificMods(), modify_commandscript::HandleModifyEnergyCommand(), AuraEffect::HandleObsModPowerAuraTick(), spell_hun_rapid_recuperation::HandlePeriodic(), AuraEffect::HandlePeriodicEnergizeAuraTick(), AuraEffect::HandlePeriodicManaLeechAuraTick(), AuraEffect::HandlePeriodicTriggerSpellAuraTick(), spell_dru_leader_of_the_pack::HandleProc(), spell_hun_ascpect_of_the_viper::HandleProc(), spell_mage_magic_absorption::HandleProc(), spell_warl_improved_drain_soul::HandleProc(), WorldSession::HandleRequestPartyMemberStatsOpcode(), ArenaSpectator::HandleResetCommand(), spell_kelthuzad_detonate_mana_aura::HandleScript(), spell_hun_chimera_shot::HandleScriptEffect(), Player::InitStatsForLevel(), Guardian::InitStatsForLevel(), boss_curator::JustEngagedWith(), Creature::LoadCreatureFromDB(), Player::LoadFromDB(), Pet::LoadPetFromDB(), ModifyPower(), boss_shade_of_aran::OnPowerUpdate(), boss_selin_fireheart::OnPowerUpdate(), Acore::PowerPctOrderPred::operator()(), Acore::PowerPctOrderPred::operator()(), Player::outDebugValues(), spell_item_oracle_ablutions::PrepareSpellScript(), Player::ProcessDelayedOperations(), SmartScript::ProcessEvent(), spell_bronjahm_magic_bane::RecalculateDamage(), Creature::Regenerate(), Player::Regenerate(), boss_curator::Reset(), boss_shade_of_aran::Reset(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::Reset(), Player::ResetAllPowers(), Player::ResurectUsingRequestData(), Player::ResurrectPlayer(), SetPower(), setPowerType(), Player::SummonPet(), boss_moam::UpdateAI(), boss_faction_championsAI::UpdateAI(), boss_thorim_start_npcs::UpdateAI(), boss_thorim_gauntlet_npcs::UpdateAI(), boss_thorim_arena_npcs::UpdateAI(), npc_dalaran_mage::npc_dalaran_mageAI::UpdateAI(), Player::UpdateCharmedAI(), and lfg::LFGMgr::UpdateRaidBrowser().

◆ GetMaxSkillValueForLevel()

uint16 Unit::GetMaxSkillValueForLevel ( Unit const *  target = nullptr) const
inline
1204{ return (target ? getLevelForTarget(target) : GetLevel()) * 5; }
uint8 getLevelForTarget(WorldObject const *) const override
Definition Unit.h:1104

References GetLevel(), and getLevelForTarget().

Referenced by Player::GetMaxSkillValueForLevel(), GetUnitCriticalChance(), GetWeaponSkillValue(), isSpellBlocked(), MeleeSpellHitResult(), RollMeleeOutcomeAgainst(), RollMeleeOutcomeAgainst(), and SpellTakenCritChance().

◆ GetMechanicResistChance()

int32 Unit::GetMechanicResistChance ( SpellInfo const *  spell)
3318{
3319 if (!spell)
3320 return 0;
3321 int32 resist_mech = 0;
3322 for (uint8 eff = 0; eff < MAX_SPELL_EFFECTS; ++eff)
3323 {
3324 if (!spell->Effects[eff].IsEffect())
3325 break;
3326 int32 effect_mech = spell->GetEffectMechanic(eff);
3327 if (effect_mech)
3328 {
3330 if (resist_mech < temp)
3331 resist_mech = temp;
3332 }
3333 }
3334 return resist_mech;
3335}
@ SPELL_AURA_MOD_MECHANIC_RESISTANCE
Definition SpellAuraDefines.h:180
int32 GetTotalAuraModifierByMiscValue(AuraType auratype, int32 misc_value) const
Definition Unit.cpp:6356

References SpellInfo::Effects, SpellInfo::GetEffectMechanic(), GetTotalAuraModifierByMiscValue(), MAX_SPELL_EFFECTS, and SPELL_AURA_MOD_MECHANIC_RESISTANCE.

Referenced by MagicSpellHitResult(), and MeleeSpellHitResult().

◆ GetMeleeAttackPoint()

bool Unit::GetMeleeAttackPoint ( Unit attacker,
Position pos 
)
2854{
2855 if (!attacker)
2856 {
2857 return false;
2858 }
2859
2860 AttackerSet attackers = getAttackers();
2861
2862 if (attackers.size() <= 1) // if the attackers are not more than one
2863 {
2864 return false;
2865 }
2866
2867 float meleeReach = GetExactDist2d(attacker);
2868 if (meleeReach <= 0)
2869 {
2870 return false;
2871 }
2872
2873 float minAngle = 0;
2874 Unit *refUnit = nullptr;
2875 uint32 validAttackers = 0;
2876
2877 double attackerSize = attacker->GetCollisionRadius();
2878
2879 for (auto const& otherAttacker: attackers)
2880 {
2881 // if the otherAttacker is not valid, skip
2882 if (!otherAttacker || otherAttacker->GetGUID() == attacker->GetGUID() ||
2883 !otherAttacker->IsWithinMeleeRange(this) || otherAttacker->isMoving())
2884 {
2885 continue;
2886 }
2887
2888 float curretAngle = atan(attacker->GetExactDist2d(otherAttacker) / meleeReach);
2889 if (minAngle == 0 || curretAngle < minAngle)
2890 {
2891 minAngle = curretAngle;
2892 refUnit = otherAttacker;
2893 }
2894
2895 validAttackers++;
2896 }
2897
2898 if (!validAttackers || !refUnit)
2899 {
2900 return false;
2901 }
2902
2903 float contactDist = attackerSize + refUnit->GetCollisionRadius();
2904 float requiredAngle = atan(contactDist / meleeReach);
2905 float attackersAngle = atan(attacker->GetExactDist2d(refUnit) / meleeReach);
2906
2907 // in instance: the more attacker there are, the higher will be the tollerance
2908 // outside: creatures should not intersecate
2909 float angleTollerance = attacker->GetMap()->IsDungeon() ? requiredAngle - requiredAngle * tanh(validAttackers / 5.0f) : requiredAngle;
2910
2911 if (attackersAngle > angleTollerance)
2912 {
2913 return false;
2914 }
2915
2916 double angle = atan(contactDist / meleeReach);
2917
2918 float angularRadius = frand(0.1f, 0.3f) + angle;
2919 int8 direction = (urand(0, 1) ? -1 : 1);
2920 float currentAngle = GetAngle(refUnit);
2921 float absAngle = currentAngle + angularRadius * direction;
2922
2923 float x, y, z;
2924 float distance = meleeReach - GetObjectSize();
2925 GetNearPoint(attacker, x, y, z, distance, 0.0f, absAngle);
2926
2927 if (!GetMap()->CanReachPositionAndGetValidCoords(this, x, y, z, true, true))
2928 {
2929 GetNearPoint(attacker, x, y, z, distance, 0.0f, absAngle * -1); // try the other side
2930
2931 if (!GetMap()->CanReachPositionAndGetValidCoords(this, x, y, z, true, true))
2932 {
2933 return false;
2934 }
2935 }
2936
2937 pos.Relocate(x, y, z);
2938
2939 return true;
2940}
std::int8_t int8
Definition Define.h:105
float frand(float min, float max)
Definition Random.cpp:57
bool IsDungeon() const
Definition Map.h:297
float GetCollisionRadius() const override
this method gets the radius of a Unit by DB if any value is defined, otherwise it gets the value by t...
Definition Unit.cpp:17145
std::unordered_set< Unit * > AttackerSet
Definition Unit.h:666
AttackerSet const & getAttackers() const
Definition Unit.h:900
void GetNearPoint(WorldObject const *searcher, float &x, float &y, float &z, float searcher_size, float distance2d, float absAngle, float controlZ=0, Position const *startPos=nullptr) const
Definition Object.cpp:2692
float GetExactDist2d(const float x, const float y) const
Definition Position.h:170

References frand(), Position::GetAngle(), getAttackers(), GetCollisionRadius(), Position::GetExactDist2d(), Object::GetGUID(), WorldObject::GetMap(), WorldObject::GetNearPoint(), WorldObject::GetObjectSize(), Map::IsDungeon(), Position::Relocate(), and urand().

Referenced by MotionMaster::MoveCircleTarget().

◆ GetMeleeCritChanceReduction()

float Unit::GetMeleeCritChanceReduction ( ) const
inline

◆ GetMeleeCritDamageReduction()

uint32 Unit::GetMeleeCritDamageReduction ( uint32  damage) const
inline
1274{ return GetCombatRatingDamageReduction(CR_CRIT_TAKEN_MELEE, 2.2f, 33.0f, damage); }
uint32 GetCombatRatingDamageReduction(CombatRating cr, float rate, float cap, uint32 damage) const
Definition Unit.cpp:15449

References CR_CRIT_TAKEN_MELEE, and GetCombatRatingDamageReduction().

Referenced by ApplyResilience(), and processDummyAuras().

◆ GetMeleeDamageReduction()

uint32 Unit::GetMeleeDamageReduction ( uint32  damage) const
inline

◆ GetMeleeDamageSchoolMask()

virtual SpellSchoolMask Unit::GetMeleeDamageSchoolMask ( WeaponAttackType  attackType = BASE_ATTACK,
uint8  damageIndex = 0 
) const
pure virtual

Implemented in Player, and Creature.

Referenced by CalculateMeleeDamage().

◆ GetMeleeHitRedirectTarget()

Unit * Unit::GetMeleeHitRedirectTarget ( Unit victim,
SpellInfo const *  spellInfo = nullptr 
)
8174{
8176 for (AuraEffectList::const_iterator i = hitTriggerAuras.begin(); i != hitTriggerAuras.end(); ++i)
8177 {
8178 if (Unit* magnet = (*i)->GetBase()->GetCaster())
8179 if (_IsValidAttackTarget(magnet, spellInfo) && magnet->IsWithinLOSInMap(this)
8180 && (!spellInfo || (spellInfo->CheckExplicitTarget(this, magnet) == SPELL_CAST_OK
8181 && spellInfo->CheckTarget(this, magnet, false) == SPELL_CAST_OK)))
8182 if (roll_chance_i((*i)->GetAmount()))
8183 {
8184 (*i)->GetBase()->DropCharge(AURA_REMOVE_BY_EXPIRE);
8185 return magnet;
8186 }
8187 }
8188 return victim;
8189}
bool roll_chance_i(int chance)
Definition Random.h:63
@ SPELL_AURA_ADD_CASTER_HIT_TRIGGER
Definition SpellAuraDefines.h:174

References _IsValidAttackTarget(), AURA_REMOVE_BY_EXPIRE, SpellInfo::CheckExplicitTarget(), SpellInfo::CheckTarget(), GetAuraEffectsByType(), roll_chance_i(), SPELL_AURA_ADD_CASTER_HIT_TRIGGER, and SPELL_CAST_OK.

Referenced by AttackerStateUpdate(), spell_dk_dancing_rune_weapon::HandleProc(), and Spell::SelectExplicitTargets().

◆ GetMeleeRange()

float Unit::GetMeleeRange ( Unit const *  target) const
802{
803 float range = GetCombatReach() + target->GetCombatReach() + 4.0f / 3.0f;
804 return std::max(range, NOMINAL_MELEE_RANGE);
805}
#define NOMINAL_MELEE_RANGE
Definition ObjectDefines.h:47
float GetCombatReach() const override
Definition Unit.h:877

References GetCombatReach(), and NOMINAL_MELEE_RANGE.

Referenced by Spell::CheckRange(), SmartAI::DistanceYourself(), GetRandomContactPoint(), IsWithinMeleeRange(), CreatureAI::MoveBackwardsChecks(), and SmartScript::ProcessAction().

◆ GetMeleeReach()

float Unit::GetMeleeReach ( ) const
inline
878{ float reach = m_floatValues[UNIT_FIELD_COMBATREACH]; return reach > MIN_MELEE_REACH ? reach : MIN_MELEE_REACH; }
#define MIN_MELEE_REACH
Definition ObjectDefines.h:46

References Object::m_floatValues, MIN_MELEE_REACH, and UNIT_FIELD_COMBATREACH.

Referenced by boss_veknilash::JustEngagedWith(), and npc_rookery_hatcher::UpdateAI().

◆ GetMinionGUID()

ObjectGuid Unit::GetMinionGUID ( ) const
inline
@ UNIT_FIELD_SUMMON
Definition UpdateFields.h:87

References Object::GetGuidValue(), and UNIT_FIELD_SUMMON.

Referenced by GetFirstControlled(), GetFirstMinion(), and OutDebugInfo().

◆ GetModelForForm()

uint32 Unit::GetModelForForm ( ShapeshiftForm  form,
uint32  spellId 
)
15456{
15457 // Hardcoded cases
15458 switch (spellId)
15459 {
15460 case 7090: // Bear form
15461 return 29414;
15462 case 35200: // Roc form
15463 return 4877;
15464 default:
15465 break;
15466 }
15467
15468 if (IsPlayer())
15469 {
15470 if (uint32 ModelId = sObjectMgr->GetModelForShapeshift(form, ToPlayer()))
15471 return ModelId;
15472 }
15473
15474 uint32 modelid = 0;
15475 SpellShapeshiftFormEntry const* formEntry = sSpellShapeshiftFormStore.LookupEntry(form);
15476 if (formEntry && formEntry->modelID_A)
15477 {
15478 // Take the alliance modelid as default
15479 if (!IsPlayer())
15480 return formEntry->modelID_A;
15481 else
15482 {
15484 modelid = formEntry->modelID_A;
15485 else
15486 modelid = formEntry->modelID_H;
15487
15488 // If the player is horde but there are no values for the horde modelid - take the alliance modelid
15489 if (!modelid && Player::TeamIdForRace(getRace()) == TEAM_HORDE)
15490 modelid = formEntry->modelID_A;
15491 }
15492 }
15493
15494 return modelid;
15495}
@ TEAM_ALLIANCE
Definition SharedDefines.h:748
@ TEAM_HORDE
Definition SharedDefines.h:749
static TeamId TeamIdForRace(uint8 race)
Definition Player.cpp:5814
uint8 getRace(bool original=false) const
Definition Unit.cpp:17057
uint32 modelID_H
Definition DBCStructure.h:1827
uint32 modelID_A
Definition DBCStructure.h:1826

References getRace(), Object::IsPlayer(), SpellShapeshiftFormEntry::modelID_A, SpellShapeshiftFormEntry::modelID_H, sObjectMgr, sSpellShapeshiftFormStore, TEAM_ALLIANCE, TEAM_HORDE, Player::TeamIdForRace(), and Object::ToPlayer().

Referenced by AuraEffect::HandleAuraModShapeshift(), AuraEffect::HandleAuraTransform(), and RestoreDisplayId().

◆ GetMotionMaster() [1/2]

MotionMaster * Unit::GetMotionMaster ( )
inline
1759{ return i_motionMaster; }

References i_motionMaster.

Referenced by _ExitVehicle(), HomeMovementGenerator< Creature >::_setTargetLocation(), PetAI::_stopAttack(), BattlegroundAV::AddAVCreature(), AtEngage(), Creature::AtEngage(), UnitAI::AttackStart(), FollowerAI::AttackStart(), boss_priestess_lackey_commonAI::AttackStart(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::AttackStart(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::AttackStart(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::AttackStart(), boss_malygos::AttackStart(), npc_nexus_lord::AttackStart(), boss_swamplord_muselek::AttackStart(), ArcherAI::AttackStart(), npc_escortAI::AttackStart(), SmartAI::AttackStart(), boss_shade_of_aran::AttackStart(), npc_hyjal_ground_trash::AttackStart(), npc_hyjal_gargoyle::AttackStart(), npc_hyjal_frost_wyrm::AttackStart(), npc_icc_vengeful_fleshreaper::npc_icc_vengeful_fleshreaperAI::AttackStart(), boss_magus_telestra::AttackStart(), boss_razorscale::AttackStart(), boss_lady_malande::AttackStart(), boss_olm_the_summoner::AttackStart(), boss_kiggler_the_crazed::AttackStart(), boss_krosh_firehand::AttackStart(), npc_millhouse_manastorm::npc_millhouse_manastormAI::AttackStart(), boss_high_astromancer_solarian::AttackStart(), npc_capernian::AttackStart(), UnitAI::AttackStartCaster(), Creature::CanCreatureAttack(), boss_professor_putricide::boss_professor_putricideAI::ChangePhase(), CleanupBeforeRemoveFromMap(), boss_alar::ConstructWaypointsAndMove(), boss_isalien::DamageTaken(), boss_julianne::DamageTaken(), boss_grand_champion::boss_grand_championAI::DamageTaken(), npc_frost_sphere::npc_frost_sphereAI::DamageTaken(), boss_bronjahm::DamageTaken(), npc_power_spark::DamageTaken(), boss_hodir::DamageTaken(), npc_ulduar_leviathan_mkii::DamageTaken(), npc_ulduar_aerial_command_unit::DamageTaken(), boss_ingvar_the_plunderer::DamageTaken(), npc_vrykul_skeleton::DamageTaken(), npc_wild_wyrm::DamageTaken(), boss_essence_of_suffering::boss_essence_of_sufferingAI::DamageTaken(), boss_essence_of_desire::boss_essence_of_desireAI::DamageTaken(), npc_blistering_zombie::npc_blistering_zombieAI::DamageTaken(), boss_the_lich_king::boss_the_lich_kingAI::DamageTaken(), boss_thorim::DamageTaken(), npc_weegli_blastfuse::npc_weegli_blastfuseAI::DestroyDoor(), SmartAI::DistanceYourself(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::DoAction(), boss_nightbane::DoAction(), npc_apothecary_genericAI::DoAction(), npc_harrison_jones::DoAction(), npc_amanishi_lookout::DoAction(), npc_chained_spirit::DoAction(), boss_anetheron::DoAction(), boss_azgalor::DoAction(), boss_kazrogal::DoAction(), boss_rage_winterchill::DoAction(), npc_hyjal_ground_trash::DoAction(), npc_hyjal_gargoyle::DoAction(), npc_hyjal_frost_wyrm::DoAction(), npc_twilight_volunteer::DoAction(), boss_taldaram::DoAction(), npc_hadronox_crusherPackAI::DoAction(), npc_kinetic_bomb::npc_kinetic_bombAI::DoAction(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::DoAction(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::DoAction(), npc_saurfang_event::npc_saurfang_eventAI::DoAction(), boss_professor_putricide::boss_professor_putricideAI::DoAction(), boss_sindragosa::boss_sindragosaAI::DoAction(), npc_spinestalker::npc_spinestalkerAI::DoAction(), npc_rimefang::npc_rimefangAI::DoAction(), npc_argent_captainAI::DoAction(), npc_icc_spire_frostwyrm::DoAction(), boss_algalon_the_observer::DoAction(), npc_brann_bronzebeard_algalon::DoAction(), npc_ahune_bunny::DoAction(), npc_pos_martin_or_gorkun_second::npc_pos_martin_or_gorkun_secondAI::DoAction(), npc_anubarak_spike::npc_anubarak_spikeAI::DoAction(), boss_tyrannus::boss_tyrannusAI::DoAction(), npc_living_mojo::npc_living_mojoAI::DoAction(), npc_power_spark::DoAction(), npc_hover_disk::DoAction(), npc_spark_of_ionar::DoAction(), npc_ulduar_aerial_command_unit::DoAction(), boss_skadi_grauf::boss_skadi_graufAI::DoAction(), boss_ambassador_hellmaw::DoAction(), boss_illidan_stormrage::DoAction(), npc_akama_illidan::DoAction(), npc_maiev_illidan::DoAction(), npc_akama_shade::DoAction(), boss_nazan::DoAction(), boss_ghazan::DoAction(), PetAI::DoAttack(), Creature::DoFleeToGetAssistance(), npc_taskmaster_fizzule::npc_taskmaster_fizzuleAI::DoFriend(), ScriptedAI::DoStartMovement(), ScriptedAI::DoStartNoMovement(), go_commandscript::DoTeleport(), go_commandscript::DoTeleportToTransport(), Spell::EffectCharge(), Spell::EffectChargeDest(), Spell::EffectDistract(), Spell::EffectJump(), Spell::EffectJumpDest(), Spell::EffectPullTowards(), Spell::EffectSummonType(), npc_battle_at_valhalas::npc_battle_at_valhalasAI::EndBattle(), boss_jindo::EnterEvadeMode(), npc_black_morass_summoned_add::EnterEvadeMode(), boss_professor_putricide::boss_professor_putricideAI::EnterEvadeMode(), npc_argent_captainAI::EnterEvadeMode(), CreatureAI::EnterEvadeMode(), SmartAI::EnterEvadeMode(), GuardAI::EnterEvadeMode(), npc_burning_spirit::EnterEvadeMode(), boss_doomrel::EnterEvadeMode(), npc_varian_wrynn::npc_varian_wrynnAI::EnterEvadeMode(), npc_thrall_bfu::npc_thrall_bfuAI::EnterEvadeMode(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::EnterEvadeMode(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::EnterEvadeMode(), gunship_npc_AI::EnterEvadeMode(), npc_gunship_boarding_addAI::EnterEvadeMode(), violet_hold_trashAI::EnterEvadeMode(), npc_mrfloppy::npc_mrfloppyAI::EnterEvadeMode(), npc_pet_dk_ebon_gargoyle::EnterEvadeMode(), npc_pet_gen_argent_pony_bridle::EnterEvadeMode(), npc_pet_mage_mirror_image::EnterEvadeMode(), npc_escortAI::EnterEvadeMode(), FollowerAI::EnterEvadeMode(), boss_halazzi::EnterPhase(), boss_zuljin::EnterPhase(), VehicleDespawnEvent::Execute(), RestoreAttack::Execute(), OrcMoveEvent::Execute(), NpcRunToHome::Execute(), UtherBatteredHiltEvent::Execute(), SlaveRunEvent::Execute(), DelayedMovementEvent::Execute(), DaranavanMoveEvent::Execute(), FrostwyrmLandEvent::Execute(), SACActivateEvent::Execute(), boss_kaelthas::ExecuteMiddleEvent(), AssistanceMovementGenerator::Finalize(), npc_singularity::FindAndFollowTarget(), npc_dark_iron_guzzler::FindNextKeg(), npc_hallows_end_soh::FinishEvent(), npc_pet_dk_ebon_gargoyle::FlyAway(), boss_nightbane::FlyToClosestPreFlyWayPoint(), Creature::FocusTarget(), CreatureGroup::FormationReset(), boss_volkhan::GoToAnvil(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::GoToMinchar(), spell_apothecary_lingering_fumes::HandleAfterCast(), npc_anachronos_the_ancient::npc_anachronos_the_ancientAI::HandleAnimation(), npc_torloth_the_magnificent::npc_torloth_the_magnificentAI::HandleAnimation(), misc_commandscript::HandleAppearCommand(), AuraEffect::HandleAuraAllowFlight(), AuraEffect::HandleAuraDummy(), AuraEffect::HandleAuraModIncreaseFlightSpeed(), misc_commandscript::HandleComeToMeCommand(), spell_q12589_shoot_rjr::HandleDummy(), spell_q11520_discovering_your_roots::HandleDummy(), spell_q6124_6129_apply_salve::HandleDummy(), spell_q11919_q11940_drake_hunt_aura::HandleEffectRemove(), spell_icc_geist_alarm::HandleEvent(), boss_sartharion_dragonAI::HandleExtraEvent(), go_commandscript::HandleGoGraveyardCommand(), go_commandscript::HandleGoGridCommand(), WorldSession::HandleGossipHelloOpcode(), go_commandscript::HandleGoTicketCommand(), go_commandscript::HandleGoZoneXYCommand(), misc_commandscript::HandleGroupSummonCommand(), spell_chapter2_persuasive_strike::HandleHit(), boss_malygos::HandleIntroSpeech(), spell_item_toxic_wasteling::HandleJump(), AuraEffect::HandleModPossessPet(), misc_commandscript::HandleMovegensCommand(), WorldSession::HandleMoveTeleportAck(), WorldSession::HandleMoveWorldportAck(), npc_commandscript::HandleNpcFollowCommand(), npc_commandscript::HandleNpcMoveCommand(), npc_commandscript::HandleNpcSetMoveTypeCommand(), npc_commandscript::HandleNpcSetWanderDistanceCommand(), npc_commandscript::HandleNpcUnFollowCommand(), spell_item_enchanted_broom_periodic::HandlePeriodicTick(), WorldSession::HandlePetActionHelper(), WorldSession::HandlePlayerLoginFromDB(), spell_entropius_black_hole_effect::HandlePull(), spell_boss_magus_telestra_gravity_well::HandlePull(), WorldSession::HandleQuestgiverHelloOpcode(), PetAI::HandleReturnMovement(), spell_the_lich_king_valkyr_target_search::HandleScript(), spell_ayamiss_swarmer_teleport_trigger::HandleScript(), spell_gen_ayamiss_swarmer_loop::HandleScript(), WorldSession::HandleSetRaidDifficultyOpcode(), spell_sindragosa_icy_grip_jump::HandleSpecial(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::HandleSpeedChangeIfNeeded(), spell_item_draenic_pale_ale::HandleSummon(), tele_commandscript::HandleTeleCommand(), tele_commandscript::HandleTeleGroupCommand(), wp_commandscript::HandleWpLoadCommand(), wp_commandscript::HandleWpUnLoadCommand(), boss_felmyst::InitializeAI(), boss_captain_skarloc::InitializeAI(), boss_lieutenant_drake::InitializeAI(), boss_glob_of_viscidus::InitializeAI(), npc_troll_volunteer::npc_troll_volunteerAI::InitializeAI(), boss_eck::InitializeAI(), npc_bushwhacker::npc_bushwhackerAI::InitializeAI(), boss_ambassador_hellmaw::InitializeAI(), npc_pet_dk_ebon_gargoyle::InitializeAI(), npc_pet_dk_dancing_rune_weapon::InitializeAI(), npc_pet_mage_mirror_image::InitializeAI(), Totem::InitSummon(), boss_grand_warlock_nethekurse::IntroRP(), Creature::IsFreeToMove(), IsMutualChase(), boss_gahzranka::IsSummonedBy(), boss_aeonus::IsSummonedBy(), npc_lk_spirit_bomb::npc_lk_spirit_bombAI::IsSummonedBy(), npc_burning_spirit::IsSummonedBy(), npc_demonic_vapor::IsSummonedBy(), npc_strangulate_vehicle::npc_strangulate_vehicleAI::IsSummonedBy(), npc_oculus_drake::npc_oculus_drakeAI::IsSummonedBy(), boss_kologarn_eyebeam::IsSummonedBy(), npc_wintergarde_gryphon::IsSummonedBy(), npc_frostbrood_skytalon::npc_frostbrood_skytalonAI::IsSummonedBy(), npc_spirit_shade::npc_spirit_shadeAI::IsSummonedBy(), Creature::IsUpdateNeeded(), JumpTo(), JumpTo(), boss_prince_keleseth_icc::boss_prince_kelesethAI::JustDied(), boss_prince_taldaram_icc::boss_prince_taldaramAI::JustDied(), boss_prince_valanar_icc::boss_prince_valanarAI::JustDied(), npc_enraged_spirit::npc_enraged_spiritAI::JustDied(), boss_ayamiss::JustDied(), boss_shade_of_aran::JustEngagedWith(), npc_cyclone::JustEngagedWith(), npc_sunblade_scout::JustEngagedWith(), boss_akilzon::JustEngagedWith(), npc_amanishi_scout::JustEngagedWith(), npc_zulian_prowler::npc_zulian_prowlerAI::JustEngagedWith(), boss_grandmaster_vorpil::JustEngagedWith(), boss_warlord_kalithresh::JustEngagedWith(), boss_swamplord_muselek::JustEngagedWith(), boss_nazan::JustEngagedWith(), boss_high_botanist_freywinn::JustEngagedWith(), boss_ayamiss::JustEngagedWith(), boss_felmyst::JustEngagedWith(), boss_janalai::JustEngagedWith(), boss_jeklik::JustEngagedWith(), boss_alar::JustEngagedWith(), boss_high_astromancer_solarian::JustEngagedWith(), SmartAI::JustReachedHome(), npc_akama_illidan::JustReachedHome(), boss_ghazan::JustReachedHome(), boss_grand_warlock_nethekurse::JustReachedHome(), npc_mature_netherwing_drake::npc_mature_netherwing_drakeAI::JustReachedHome(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::JustSummoned(), boss_kelthuzad::boss_kelthuzadAI::JustSummoned(), boss_auriaya::JustSummoned(), npc_frosthound::JustSummoned(), npc_eris_hevenfire::npc_eris_hevenfireAI::JustSummoned(), npc_daphne_stilwell::npc_daphne_stilwellAI::JustSummoned(), boss_mekgineer_steamrigger::JustSummoned(), npc_hor_lich_king::JustSummoned(), npc_ulduar_storm_tempered_keeper::JustSummoned(), boss_ingvar_the_plunderer::JustSummoned(), boss_vexallus::JustSummoned(), npc_kalecgos_kj::JustSummoned(), boss_janalai::JustSummoned(), boss_captain_skarloc::JustSummoned(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::JustSummoned(), npc_medivh_bm::JustSummoned(), boss_hadronox::JustSummoned(), boss_sartharion::JustSummoned(), boss_novos::JustSummoned(), boss_the_lich_king::boss_the_lich_kingAI::JustSummoned(), boss_algalon_the_observer::JustSummoned(), boss_skadi::boss_skadiAI::JustSummoned(), npc_tirions_gambit_tirion::npc_tirions_gambit_tirionAI::JustSummoned(), npc_overlord_drakuru_betrayal::JustSummoned(), npc_akama_shade::JustSummoned(), npc_creature_generator_akama::JustSummoned(), boss_hydross_the_unstable::JustSummoned(), boss_lady_vashj::JustSummoned(), boss_mennu_the_betrayer::JustSummoned(), boss_kaelthas::JustSummoned(), boss_mechano_lord_capacitus::JustSummoned(), npc_rinji::npc_rinjiAI::JustSummoned(), npc_lady_sylvanas_windrunner::npc_lady_sylvanas_windrunnerAI::JustSummoned(), boss_ichoron::JustSummoned(), boss_xevozz::JustSummoned(), npc_maghar_captive::npc_maghar_captiveAI::JustSummoned(), boss_ayamiss::JustSummoned(), Player::KillPlayer(), KnockbackFrom(), spell_svalna_revive_champion::Land(), CreatureGroup::LeaderStartedMoving(), Player::LeaveBattleground(), npc_crystalline_frayer::LeaveSeedPod(), Creature::Motion_Initialize(), CreatureAI::MoveBackwardsChecks(), CreatureAI::MoveCircleChecks(), FollowerAI::MoveInLineOfSight(), npc_escortAI::MoveInLineOfSight(), SmartAI::MoveInLineOfSight(), boss_nalorakk::MoveInLineOfSight(), npc_aged_dying_ancient_kodo::MoveInLineOfSight(), npc_icc_nerubar_broodkeeper::npc_icc_nerubar_broodkeeperAI::MoveInLineOfSight(), npc_shattered_hand_scout::MoveInLineOfSight(), PetAI::MovementInform(), boss_ebonroc::MovementInform(), boss_nightbane::MovementInform(), npc_harrison_jones::MovementInform(), boss_bug_trio::MovementInform(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::MovementInform(), boss_professor_putricide::boss_professor_putricideAI::MovementInform(), boss_four_horsemen::boss_four_horsemenAI::MovementInform(), boss_malygos::MovementInform(), boss_volkhan::MovementInform(), npc_enslaved_proto_drake::MovementInform(), npc_wild_wyrm::MovementInform(), npc_akama_illidan::MovementInform(), boss_lady_vashj::MovementInform(), boss_nazan::MovementInform(), npc_fel_guard_hound::npc_fel_guard_houndAI::MovementInform(), boss_felmyst::MovementInform(), boss_kaelthas::MovementInform(), boss_jedoga_shadowseeker::MovementInform(), boss_ghazan::MovementInform(), npc_escortAI::MovementInform(), SmartAI::MovepointReached(), npc_cameron::MoveTheChildren(), boss_four_horsemen::boss_four_horsemenAI::MoveToCorner(), npc_janalai_hatcher::MoveToNewWaypoint(), npc_concentrated_ball::npc_concentrated_ballAI::MoveToNextPoint(), npc_hor_leader_second::npc_hor_leader_secondAI::MoveToNextStopPoint(), boss_leotheras_the_blind::MoveToTargetIfOutOfRange(), npc_pet_dk_ebon_gargoyle::MySelectNextTarget(), NearTeleportTo(), npc_attracted_reef_bull::npc_attracted_reef_bullAI::npc_attracted_reef_bullAI(), npc_batrider::npc_batrider(), npc_collapsing_star::npc_collapsing_star(), npc_frost_sphere::npc_frost_sphereAI::npc_frost_sphereAI(), npc_omen::npc_omenAI::npc_omenAI(), npc_pos_after_first_boss::npc_pos_after_first_bossAI::npc_pos_after_first_bossAI(), npc_ulduar_saronite_vapors::npc_ulduar_saronite_vapors(), spell_halion_twilight_phasing_aura::OnApply(), SmartAI::OnCharmed(), instance_serpent_shrine::instance_serpentshrine_cavern_InstanceMapScript::OnCreatureCreate(), npc_hyjal_jaina::OnGossipSelect(), npc_ulduar_expedition_commander::OnGossipSelect(), npc_kernobee::OnQuestAccept(), npc_engineer_helice::OnQuestAccept(), spell_chapter5_light_of_dawn_aura::OnRemove(), spell_halion_twilight_phasing_aura::OnRemove(), spell_malygos_vortex_visual::OnRemove(), SplineHandler::operator()(), npc_vehicle_d16_propelled_delivery::npc_vehicle_d16_propelled_deliveryAI::PassengerBoarded(), npc_wild_wyrm::PassengerBoarded(), npc_oculus_drake::npc_oculus_drakeAI::PassengerBoarded(), npc_hover_disk::PassengerBoarded(), npc_preparations_for_war_vehicle::PassengerBoarded(), boss_nightbane::PathEndReached(), boss_anetheron::PathEndReached(), boss_rage_winterchill::PathEndReached(), npc_hyjal_ground_trash::PathEndReached(), npc_hyjal_frost_wyrm::PathEndReached(), boss_ambassador_hellmaw::PathEndReached(), npc_akama_illidan::PathEndReached(), boss_nefarian::PathEndReached(), npc_hyjal_gargoyle::PathEndReached(), PauseMovement(), Creature::PauseMovementForInteraction(), SmartAI::PausePath(), PetSpellFail(), npc_oculus_unstable_sphere::npc_oculus_unstable_sphereAI::PickNewLocation(), NPCStaveQuestAI::PrepareForEncounter(), PretendToDie(), boss_alar::PretendToDie(), npc_jungle_punch_target::npc_jungle_punch_targetAI::proceedCwEvent(), SmartScript::ProcessAction(), propagateSpeedChange(), npc_lake_frog::npc_lake_frogAI::ReceiveEmote(), RemoveCharmedBy(), CreatureGroup::RemoveFormationMovement(), boss_the_beast::Reset(), boss_felblood_kaelthas::Reset(), npc_acherus_necromancer::npc_acherus_necromancerAI::Reset(), npc_gothik_the_harvester::npc_gothik_the_harvesterAI::Reset(), npc_valkyr_battle_maiden::npc_valkyr_battle_maidenAI::Reset(), boss_janalai::Reset(), npc_janalai_hatcher::Reset(), boss_arlokk::boss_arlokkAI::Reset(), npc_zulian_prowler::npc_zulian_prowlerAI::Reset(), npc_batrider::Reset(), npc_brew_bubble::Reset(), boss_archimonde::Reset(), boss_ayamiss::Reset(), boss_bug_trio::Reset(), boss_jedoga_shadowseeker::Reset(), boss_taldaram::Reset(), npc_kinetic_bomb::npc_kinetic_bombAI::Reset(), npc_crystalline_frayer::Reset(), npc_assembly_lightning::Reset(), boss_kologarn::Reset(), npc_xt002_scrapbot::Reset(), npc_xt002_boombot::Reset(), npc_injured_7th_legion_soldier::npc_injured_7th_legion_soldierAI::Reset(), npc_q24545_lich_king::npc_q24545_lich_kingAI::Reset(), npc_released_offspring_harkoa::npc_released_offspring_harkoaAI::Reset(), npc_voidtraveler::Reset(), boss_lady_vashj::Reset(), boss_leotheras_the_blind::Reset(), boss_magtheridon::Reset(), npc_infernal_attacker::npc_infernal_attackerAI::Reset(), npc_pet_gen_gnomish_flame_turret::Reset(), Creature::Respawn(), Creature::ResumeChasingVictim(), boss_high_botanist_freywinn::ResumeEncounter(), ResumeMovement(), SmartAI::ResumePath(), Resurrect(), SmartAI::ReturnToLastOOCPos(), npc_escortAI::ReturnToLastPoint(), boss_alar::ScheduleAbilities(), boss_illidan_stormrage::ScheduleAbilities(), boss_magtheridon::ScheduleCombatEvents(), npc_dream_fog::npc_dream_fogAI::ScheduleEvents(), boss_felmyst::ScheduleGroundAbilities(), boss_nightbane::ScheduleLand(), boss_drakkari_colossus::boss_drakkari_colossusAI::ScheduleTasks(), boss_loken::ScheduleTasks(), boss_laj::ScheduleTasks(), Map::ScriptsProcess(), npc_putricide_oozeAI::SelectNewTarget(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::SelectNewTarget(), npc_anubarak_spike::npc_anubarak_spikeAI::SelectNewTarget(), WorldSession::SendDoFlight(), boss_sartharion::SendLavaWaves(), WorldSession::SendListInventory(), SetCharmedBy(), SmartAI::SetCombatMovement(), SetConfused(), SmartAI::SetCurrentRangeMode(), boss_grand_warlock_nethekurse::SetData(), npc_ulduar_expedition_engineer::SetData(), gunship_npc_AI::SetData(), npc_enslaved_proto_drake::SetData(), boss_the_beast::SetData(), npc_eastvale_peasent::SetData(), npc_ulduar_mimiron_rocket::SetData(), setDeathState(), Creature::setDeathState(), SetFeared(), SmartAI::SetFollow(), FollowerAI::SetFollowComplete(), FollowerAI::SetFollowPaused(), npc_scarlet_ghoul::npc_scarlet_ghoulAI::SetGUID(), Player::SetMover(), SetSpeed(), npc_tirion_fordring_tft::npc_tirion_fordringAI::sGossipSelect(), npc_harrison_jones::sGossipSelect(), npc_akama_illidan::sGossipSelect(), npc_akama_shade::sGossipSelect(), boss_thorim::SpawnAnArenaNPC(), npc_varian_wrynn::npc_varian_wrynnAI::SpawnWave(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::SpellHit(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::SpellHit(), npc_saurfang_event::npc_saurfang_eventAI::SpellHit(), npc_cult_fanatic::npc_cult_fanaticAI::SpellHit(), npc_cult_adherent::npc_cult_adherentAI::SpellHit(), npc_tirion_fordring_tft::npc_tirion_fordringAI::SpellHit(), boss_urom::boss_uromAI::SpellHit(), boss_attumen::SpellHit(), npc_rabid_thistle_bear::npc_rabid_thistle_bearAI::SpellHit(), npc_forest_frog::SpellHit(), npc_aged_dying_ancient_kodo::SpellHit(), npc_troll_volunteer::npc_troll_volunteerAI::SpellHit(), boss_razorscale::SpellHit(), npc_enslaved_netherwing_drake::SpellHit(), npc_injured_patient::npc_injured_patientAI::SpellHit(), boss_headless_horseman_head::SpellHit(), npc_attracted_reef_bull::npc_attracted_reef_bullAI::SpellHit(), npc_iron_watcher::npc_iron_watcherAI::SpellHit(), npc_wild_wyrm::SpellHit(), npc_vengeful_shade::npc_vengeful_shadeAI::SpellHitTarget(), boss_quartermaster_zigris::SpellHitTarget(), boss_volkhan::SpellHitTarget(), npc_nerubian_burrower::npc_nerubian_burrowerAI::SpellHitTarget(), boss_devourer_of_souls::SpellHitTarget(), npc_chesspiece::SpellHitTarget(), npc_pet_gen_fetch_ball::SpellHitTarget(), npc_belnistrasz::npc_belnistraszAI::sQuestAccept(), npc_escortAI::Start(), instance_violet_hold::instance_violet_hold_InstanceMapScript::StartBossEncounter(), npc_koltira_deathweaver::npc_koltira_deathweaverAI::StartEvent(), FollowerAI::StartFollow(), boss_felmyst::StartIntro(), npc_stillpine_capitive::npc_stillpine_capitiveAI::StartMoving(), SmartAI::StartPath(), SmartAI::StopFollow(), SmartAI::StopPath(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::SummonedCreatureDespawn(), boss_drakkari_colossus::boss_drakkari_colossusAI::SummonedCreatureDespawn(), boss_vazruden_the_herald::SummonedCreatureDies(), boss_jedoga_shadowseeker::SummonedCreatureDies(), Spell::SummonGuardian(), npc_lord_illidan_stormrage::npc_lord_illidan_stormrageAI::SummonNextWave(), Player::TeleportTo(), CreatureAI::TriggerAlert(), Pet::Update(), Update(), SimpleCharmedAI::UpdateAI(), npc_escortAI::UpdateAI(), boss_gyth::UpdateAI(), boss_quartermaster_zigris::UpdateAI(), boss_rend_blackhand::UpdateAI(), npc_rookery_hatcher::UpdateAI(), boss_victor_nefarius::UpdateAI(), boss_majordomo::UpdateAI(), boss_mr_smite::boss_mr_smiteAI::UpdateAI(), npc_scarlet_ghoul::npc_scarlet_ghoulAI::UpdateAI(), npc_unworthy_initiate::npc_unworthy_initiateAI::UpdateAI(), npc_scarlet_courier::npc_scarlet_courierAI::UpdateAI(), npc_acherus_necromancer::npc_acherus_necromancerAI::UpdateAI(), npc_gothik_the_harvester::npc_gothik_the_harvesterAI::UpdateAI(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::UpdateAI(), npc_valkyr_battle_maiden::npc_valkyr_battle_maidenAI::UpdateAI(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::UpdateAI(), npc_madrigosa::UpdateAI(), npc_cameron::UpdateAI(), npc_eastvale_peasent::UpdateAI(), npc_partygoer_pather::UpdateAI(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::UpdateAI(), npc_grand_magister_rommath::npc_grand_magister_rommathAI::UpdateAI(), npc_highborne_lamenter::npc_highborne_lamenterAI::UpdateAI(), npc_thrall_bfu::npc_thrall_bfuAI::UpdateAI(), npc_akilzon_eagle::UpdateAI(), npc_forest_frog::UpdateAI(), boss_arlokk::boss_arlokkAI::UpdateAI(), boss_mandokir::boss_mandokirAI::UpdateAI(), npc_winterfin_playmate::UpdateAI(), npc_snowfall_glade_playmate::UpdateAI(), npc_the_biggest_tree::UpdateAI(), npc_high_oracle_soo_roo::UpdateAI(), npc_elder_kekek::UpdateAI(), npc_the_etymidian::UpdateAI(), npc_alexstraza_the_lifebinder::UpdateAI(), boss_headless_horseman::UpdateAI(), npc_arthas::npc_arthasAI::UpdateAI(), boss_lieutenant_drake::UpdateAI(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UpdateAI(), boss_onyxia::UpdateAI(), npc_draenei_survivor::npc_draenei_survivorAI::UpdateAI(), npc_rabid_thistle_bear::npc_rabid_thistle_bearAI::UpdateAI(), npc_weegli_blastfuse::npc_weegli_blastfuseAI::UpdateAI(), boss_jedoga_shadowseeker::UpdateAI(), npc_twilight_volunteer::UpdateAI(), npc_taldaram_flamesphere::UpdateAI(), boss_hadronox::UpdateAI(), npc_xerestrasza::npc_xerestraszaAI::UpdateAI(), boss_saviana_ragefire::boss_saviana_ragefireAI::UpdateAI(), boss_grand_champion::boss_grand_championAI::UpdateAI(), npc_nerubian_burrower::npc_nerubian_burrowerAI::UpdateAI(), npc_anubarak_spike::npc_anubarak_spikeAI::UpdateAI(), boss_jormungarAI::UpdateAI(), boss_icehowl::boss_icehowlAI::UpdateAI(), npc_fos_corrupted_soul_fragment::UpdateAI(), npc_hor_leader::npc_hor_leaderAI::UpdateAI(), npc_hor_lich_king::UpdateAI(), npc_hor_leader_second::npc_hor_leader_secondAI::UpdateAI(), boss_garfrost::boss_garfrostAI::UpdateAI(), boss_krick::boss_krickAI::UpdateAI(), npc_pos_leader::npc_pos_leaderAI::UpdateAI(), npc_pos_after_first_boss::npc_pos_after_first_bossAI::UpdateAI(), npc_pos_tyrannus_events::npc_pos_tyrannus_eventsAI::UpdateAI(), npc_pos_leader_second::npc_pos_leader_secondAI::UpdateAI(), npc_blood_queen_lana_thel::npc_blood_queen_lana_thelAI::UpdateAI(), npc_kinetic_bomb::npc_kinetic_bombAI::UpdateAI(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::UpdateAI(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::UpdateAI(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::UpdateAI(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::UpdateAI(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::UpdateAI(), boss_lord_marrowgar::UpdateAI(), boss_professor_putricide::boss_professor_putricideAI::UpdateAI(), boss_sindragosa::boss_sindragosaAI::UpdateAI(), npc_rimefang::npc_rimefangAI::UpdateAI(), boss_the_lich_king::boss_the_lich_kingAI::UpdateAI(), npc_tirion_fordring_tft::npc_tirion_fordringAI::UpdateAI(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::UpdateAI(), npc_strangulate_vehicle::npc_strangulate_vehicleAI::UpdateAI(), npc_valithria_cloud::npc_valithria_cloudAI::UpdateAI(), npc_icc_vengeful_fleshreaper::npc_icc_vengeful_fleshreaperAI::UpdateAI(), boss_four_horsemen::boss_four_horsemenAI::UpdateAI(), boss_kelthuzad::boss_kelthuzadAI::UpdateAI(), boss_sapphiron::boss_sapphironAI::UpdateAI(), boss_malygos::UpdateAI(), npc_power_spark::UpdateAI(), npc_oculus_unstable_sphere::npc_oculus_unstable_sphereAI::UpdateAI(), boss_urom::boss_uromAI::UpdateAI(), npc_oculus_drakegiver::npc_oculus_drakegiverAI::UpdateAI(), npc_oculus_drake::npc_oculus_drakeAI::UpdateAI(), npc_spark_of_ionar::UpdateAI(), boss_algalon_the_observer::UpdateAI(), npc_brann_bronzebeard_algalon::UpdateAI(), boss_stormcaller_brundir::UpdateAI(), boss_flame_leviathan::UpdateAI(), npc_hodirs_fury::UpdateAI(), boss_flame_leviathan_safety_container::UpdateAI(), boss_mimiron::UpdateAI(), npc_ulduar_emergency_fire_bot::UpdateAI(), boss_razorscale::UpdateAI(), npc_ulduar_expedition_engineer::UpdateAI(), boss_yoggsaron_death_orb::UpdateAI(), boss_ingvar_the_plunderer::UpdateAI(), npc_vrykul_skeleton::UpdateAI(), boss_skadi_grauf::boss_skadi_graufAI::UpdateAI(), boss_svala::boss_svalaAI::UpdateAI(), boss_ymiron::boss_ymironAI::UpdateAI(), npc_preparations_for_war_vehicle::UpdateAI(), npc_shandy_dalaran::npc_shandy_dalaranAI::UpdateAI(), npc_minigob_manabonk::UpdateAI(), npc_conversing_with_the_depths_trigger::npc_conversing_with_the_depths_triggerAI::UpdateAI(), npc_wintergarde_gryphon::UpdateAI(), npc_q24545_lich_king::npc_q24545_lich_kingAI::UpdateAI(), npc_commander_eligor_dawnbringer::npc_commander_eligor_dawnbringerAI::UpdateAI(), npc_wounded_skirmisher::UpdateAI(), npc_venture_co_straggler::npc_venture_co_stragglerAI::UpdateAI(), npc_battle_at_valhalas::npc_battle_at_valhalasAI::UpdateAI(), npc_lord_arete::npc_lord_areteAI::UpdateAI(), npc_infra_green_bomber_generic::npc_infra_green_bomber_genericAI::UpdateAI(), npc_frostbrood_skytalon::npc_frostbrood_skytalonAI::UpdateAI(), npc_iron_watcher::npc_iron_watcherAI::UpdateAI(), npc_freed_protodrake::npc_freed_protodrakeAI::UpdateAI(), npc_crusade_recruit::npc_crusade_recruitAI::UpdateAI(), boss_omor_the_unscarred::UpdateAI(), npc_millhouse_manastorm::npc_millhouse_manastormAI::UpdateAI(), npc_nether_drake::npc_nether_drakeAI::UpdateAI(), npc_fel_guard_hound::npc_fel_guard_houndAI::UpdateAI(), npc_mature_netherwing_drake::npc_mature_netherwing_drakeAI::UpdateAI(), npc_dragonmaw_peon::npc_dragonmaw_peonAI::UpdateAI(), npc_pet_dk_ebon_gargoyle::UpdateAI(), npc_pet_gen_target_following_bomb::UpdateAI(), npc_pet_gen_wind_rider_cub::UpdateAI(), npc_pet_gen_plump_turkey::UpdateAI(), npc_pet_gen_toxic_wasteling::UpdateAI(), PetAI::UpdateAI(), FollowerAI::UpdateAI(), npc_batrider::UpdateAI(), npc_concentrated_ball::npc_concentrated_ballAI::UpdateAI(), npc_xt002_scrapbot::UpdateAI(), npc_xt002_boombot::UpdateAI(), Player::UpdateCharmedAI(), npc_tirions_gambit_tirion::npc_tirions_gambit_tirionAI::UpdateEscortAI(), npc_tooga::npc_toogaAI::UpdateFollowerAI(), npc_jenny::UpdateFollowerAI(), npc_emily::npc_emilyAI::WaypointReached(), and npc_ancestral_wolf::npc_ancestral_wolfAI::WaypointReached().

◆ GetMotionMaster() [2/2]

const MotionMaster * Unit::GetMotionMaster ( ) const
inline
1760{ return i_motionMaster; }

References i_motionMaster.

◆ GetMountID()

◆ GetNativeDisplayId()

◆ GetNativeObjectScale()

virtual float Unit::GetNativeObjectScale ( ) const
inlinevirtual

Reimplemented in Creature, and Pet.

1973{ return 1.0f; }

Referenced by RecalculateObjectScale().

◆ GetNegStat()

float Unit::GetNegStat ( Stats  stat) const
inline
1067{ return GetFloatValue(static_cast<uint16>(UNIT_FIELD_NEGSTAT0) + stat); }

References Object::GetFloatValue(), and UNIT_FIELD_NEGSTAT0.

◆ GetNextRandomRaidMemberOrPet()

Unit * Unit::GetNextRandomRaidMemberOrPet ( float  radius)
8238{
8239 Player* player = nullptr;
8240 if (IsPlayer())
8241 player = ToPlayer();
8242 // Should we enable this also for charmed units?
8243 else if (IsCreature() && IsPet())
8244 player = GetOwner()->ToPlayer();
8245
8246 if (!player)
8247 return nullptr;
8248 Group* group = player->GetGroup();
8249 // When there is no group check pet presence
8250 if (!group)
8251 {
8252 // We are pet now, return owner
8253 if (player != this)
8254 return IsWithinDistInMap(player, radius) ? player : nullptr;
8255 Unit* pet = GetGuardianPet();
8256 // No pet, no group, nothing to return
8257 if (!pet)
8258 return nullptr;
8259 // We are owner now, return pet
8260 return IsWithinDistInMap(pet, radius) ? pet : nullptr;
8261 }
8262
8263 std::vector<Unit*> nearMembers;
8264 // reserve place for players and pets because resizing vector every unit push is unefficient (vector is reallocated then)
8265 nearMembers.reserve(group->GetMembersCount() * 2);
8266
8267 for (GroupReference* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next())
8268 if (Player* Target = itr->GetSource())
8269 {
8270 if (Target != this && !IsWithinDistInMap(Target, radius))
8271 continue;
8272
8273 // IsHostileTo check duel and controlled by enemy
8274 if (Target != this && Target->IsAlive() && !IsHostileTo(Target))
8275 nearMembers.push_back(Target);
8276
8277 // Push player's pet to vector
8278 if (Unit* pet = Target->GetGuardianPet())
8279 if (pet != this && pet->IsAlive() && IsWithinDistInMap(pet, radius) && !IsHostileTo(pet))
8280 nearMembers.push_back(pet);
8281 }
8282
8283 if (nearMembers.empty())
8284 return nullptr;
8285
8286 uint32 randTarget = urand(0, nearMembers.size() - 1);
8287 return nearMembers[randTarget];
8288}
Definition GroupReference.h:27
Definition Group.h:169
uint32 GetMembersCount() const
Definition Group.h:245
GroupReference * GetFirstMember()
Definition Group.h:243
Group * GetGroup()
Definition Player.h:2504
Guardian * GetGuardianPet() const
Definition Unit.cpp:7761
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
Definition Object.cpp:1377

References Group::GetFirstMember(), Player::GetGroup(), GetGuardianPet(), Group::GetMembersCount(), GetOwner(), Object::IsCreature(), IsHostileTo(), IsPet(), Object::IsPlayer(), WorldObject::IsWithinDistInMap(), Object::ToPlayer(), and urand().

Referenced by HandleAuraRaidProcFromCharge(), and AuraEffect::HandleRaidProcFromChargeAuraProc().

◆ GetNpcFlags()

◆ GetOldFactionId()

uint32 Unit::GetOldFactionId ( ) const
inline
855{ return _oldFactionId; }

References _oldFactionId.

Referenced by npc_chesspiece::OnCharmed().

◆ GetOwnedAura()

Aura * Unit::GetOwnedAura ( uint32  spellId,
ObjectGuid  casterGUID = ObjectGuid::Empty,
ObjectGuid  itemCasterGUID = ObjectGuid::Empty,
uint8  reqEffMask = 0,
Aura except = nullptr 
) const
5034{
5035 AuraMapBounds range = m_ownedAuras.equal_range(spellId);
5036 for (AuraMap::const_iterator itr = range.first; itr != range.second; ++itr)
5037 {
5038 if (((itr->second->GetEffectMask() & reqEffMask) == reqEffMask)
5039 && (!casterGUID || itr->second->GetCasterGUID() == casterGUID)
5040 && (!itemCasterGUID || itr->second->GetCastItemGUID() == itemCasterGUID)
5041 && (!except || except != itr->second))
5042 {
5043 return itr->second;
5044 }
5045 }
5046 return nullptr;
5047}
std::pair< AuraMap::const_iterator, AuraMap::const_iterator > AuraMapBounds
Definition Unit.h:670

References m_ownedAuras.

Referenced by _TryStackingOrRefreshingExistingAura().

◆ GetOwnedAuras() [1/2]

◆ GetOwnedAuras() [2/2]

AuraMap const & Unit::GetOwnedAuras ( ) const
inline
1374{ return m_ownedAuras; }

References m_ownedAuras.

◆ GetOwner()

Unit * Unit::GetOwner ( ) const
Todo:
: move this in Object class or move GetUInt32value here but keep consistency
7711{
7712 if (ObjectGuid ownerGUID = GetOwnerGUID())
7713 return ObjectAccessor::GetUnit(*this, ownerGUID);
7714
7715 return nullptr;
7716}

References GetOwnerGUID(), and ObjectAccessor::GetUnit().

Referenced by _ExitVehicle(), Acore::AnyAoETargetUnitInObjectRangeCheck::AnyAoETargetUnitInObjectRangeCheck(), ApplyDiminishingToDuration(), ApplyResilience(), TotemAI::AttackStart(), spell_dk_anti_magic_zone::CalculateAmount(), spell_warl_generic_scaling::CalculateAPAmount(), npc_pet_dk_army_of_the_dead::CanAIAttack(), Creature::CanStartAttack(), spell_dk_blood_gorged::CheckProc(), spell_pri_mana_leech::CheckProc(), ClearInPetCombat(), DealHeal(), npc_spring_rabbit::npc_spring_rabbitAI::DoAction(), Spell::DoAllEffectOnLaunchTarget(), Spell::DoAllEffectOnTarget(), PetAI::DoAttack(), Spell::EffectDispel(), Spell::EffectSchoolDMG(), Spell::EffectSummonType(), Spell::EffectWeaponDmg(), boss_illidari_council_memberAI::EnterEvadeMode(), npc_pet_dk_ebon_gargoyle::EnterEvadeMode(), ThreatManager::ForwardThreatForAssistingMe(), GetCharmerOrOwner(), GetCombatRatingReduction(), GetNextRandomRaidMemberOrPet(), GetReactionTo(), GetSpellModOwner(), spell_warl_seduction::HandleAuraApply(), HandleAuraRaidProcFromChargeWithValue(), Aura::HandleAuraSpecificMods(), debug_commandscript::HandleDebugThreatListCommand(), spell_sha_healing_stream_totem::HandleDummy(), spell_q12277_wintergarde_mine_explosion::HandleDummy(), spell_sha_mana_tide_totem::HandleDummy(), spell_mount_check_aura::HandleEffectPeriodic(), spell_gen_gryphon_wyvern_mount_check::HandleEffectPeriodic(), spell_ioc_bomb_blast_criteria::HandleGameObjectDamage(), modify_commandscript::HandleModifyTalentCommand(), WorldSession::HandlePetActionHelper(), spell_hun_kill_command_pet::HandleProc(), spell_warl_demonic_pact::HandleProc(), spell_sha_spirit_hunt::HandleProc(), spell_hun_pet_heart_of_the_phoenix::HandleScript(), npc_troll_volunteer::npc_troll_volunteerAI::InitializeAI(), npc_pet_dk_ebon_gargoyle::InitializeAI(), npc_pet_dk_dancing_rune_weapon::InitializeAI(), npc_pet_hunter_snake_trap::InitializeAI(), npc_pet_mage_mirror_image::InitializeAI(), IsAlwaysVisibleFor(), IsPetAura(), npc_enraged_spirit::npc_enraged_spiritAI::JustDied(), npc_webbed_creature::npc_webbed_creatureAI::JustDied(), npc_torloth_the_magnificent::npc_torloth_the_magnificentAI::JustDied(), Kill(), MagicSpellHitResult(), MeleeDamageBonusDone(), npc_dkc1_gothik::npc_dkc1_gothikAI::MoveInLineOfSight(), npc_khunok_the_behemoth::npc_khunok_the_behemothAI::MoveInLineOfSight(), npc_pet_dk_ebon_gargoyle::MySelectNextTarget(), npc_pet_mage_mirror_image::MySelectNextTarget(), npc_ancestral_wolf::npc_ancestral_wolfAI::npc_ancestral_wolfAI(), npc_pet_gen_soul_trader_beacon::npc_pet_gen_soul_trader_beacon(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnCreatureCreate(), spell_hun_aspect_of_the_beast::OnPetApply(), Acore::MostHPMissingGroupInRange::operator()(), PetSpellFail(), RemoveFromWorld(), npc_target_dummy::Reset(), npc_spring_rabbit::npc_spring_rabbitAI::Reset(), RestoreFaction(), Creature::SelectVictim(), SendPetActionFeedback(), SendPetAIReaction(), SetHealth(), SetMaxHealth(), SetMaxPower(), SetPower(), setPowerType(), SetStunned(), SpellDamageBonusDone(), SpellHealingBonusDone(), npc_rabid_thistle_bear::npc_rabid_thistle_bearAI::SpellHit(), SpellPctDamageModsDone(), SpellPctHealingModsDone(), Spell::SummonGuardian(), npc_scarlet_courier::npc_scarlet_courierAI::UpdateAI(), npc_pet_gen_wind_rider_cub::UpdateAI(), npc_target_dummy::UpdateAI(), and UpdateAuraForGroup().

◆ GetOwnerGUID()

ObjectGuid Unit::GetOwnerGUID ( ) const
inline
@ UNIT_FIELD_SUMMONEDBY
Definition UpdateFields.h:90

References Object::GetGuidValue(), and UNIT_FIELD_SUMMONEDBY.

Referenced by Pet::AddToWorld(), BuildValuesUpdate(), PetAI::CanAttack(), CanFreeMove(), boss_thorim_start_npcs::DamageTaken(), DealDamage(), Spell::DoAllEffectOnTarget(), FollowMovementGenerator< T >::DoUpdate(), GetCharmerOrOwnerGUID(), GetOwner(), AuraEffect::HandleModInvisibility(), AuraEffect::HandleModInvisibilityDetect(), AuraEffect::HandleModStealth(), AuraEffect::HandleModStealthDetect(), AuraEffect::HandleModStealthLevel(), WorldSession::HandlePetActionHelper(), WorldSession::HandlePetRename(), HandleSpellClick(), Creature::HasMechanicTemplateImmunity(), Creature::IsDungeonBoss(), Creature::IsImmuneToKnockback(), isInAccessiblePlaceFor(), npc_living_mojo::npc_living_mojoAI::JustEngagedWith(), Kill(), Condition::Meets(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnCreatureCreate(), npc_pet_gen_argent_pony_bridle::OnGossipHello(), npc_venomhide_hatchling::OnGossipHello(), Acore::MostHPMissingGroupInRange::operator()(), PlayerOrPetCheck::operator()(), OutDebugInfo(), PetAI::ReceiveEmote(), Creature::Regenerate(), RemoveAllControlled(), RemoveEvadeAuras(), Pet::SavePetToDB(), spell_item_fetch_ball::SelectTarget(), SetMinion(), SetOwnerGUID(), SpellPctDamageModsDone(), Map::SummonCreature(), NPCStaveQuestAI::UnitIsUnfair(), Creature::Update(), and npc_pet_dk_ebon_gargoyle::UpdateAI().

◆ GetPartyMembers()

void Unit::GetPartyMembers ( std::list< Unit * > &  units)
15089{
15090 Unit* owner = GetCharmerOrOwnerOrSelf();
15091 Group* group = nullptr;
15092 if (owner->IsPlayer())
15093 group = owner->ToPlayer()->GetGroup();
15094
15095 if (group)
15096 {
15097 uint8 subgroup = owner->ToPlayer()->GetSubGroup();
15098
15099 for (GroupReference* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next())
15100 {
15101 Player* Target = itr->GetSource();
15102
15103 // IsHostileTo check duel and controlled by enemy
15104 if (Target && Target->IsInMap(owner) && Target->GetSubGroup() == subgroup && !IsHostileTo(Target))
15105 {
15106 if (Target->IsAlive())
15107 TagUnitMap.push_back(Target);
15108
15109 for (Unit::ControlSet::iterator iterator = Target->m_Controlled.begin(); iterator != Target->m_Controlled.end(); ++iterator)
15110 {
15111 if (Unit* pet = *iterator)
15112 if (pet->IsGuardian() && pet->IsAlive())
15113 TagUnitMap.push_back(pet);
15114 }
15115 }
15116 }
15117 }
15118 else
15119 {
15120 if (owner->IsAlive())
15121 TagUnitMap.push_back(owner);
15122
15123 for (Unit::ControlSet::iterator itr = owner->m_Controlled.begin(); itr != owner->m_Controlled.end(); ++itr)
15124 {
15125 if (Unit* pet = *itr)
15126 if (pet->IsGuardian() && pet->IsAlive())
15127 TagUnitMap.push_back(pet);
15128 }
15129 }
15130}
uint8 GetSubGroup() const
Definition Player.h:2508
Unit * GetCharmerOrOwnerOrSelf() const
Definition Unit.h:1287

References GetCharmerOrOwnerOrSelf(), Group::GetFirstMember(), Player::GetGroup(), Player::GetSubGroup(), IsAlive(), IsHostileTo(), WorldObject::IsInMap(), Object::IsPlayer(), m_Controlled, and Object::ToPlayer().

Referenced by spell_warr_improved_spell_reflection_trigger_aura::HandleRemove().

◆ GetPctModifierValue()

◆ GetPetGUID()

◆ GetPhaseByAuras()

uint32 Unit::GetPhaseByAuras ( ) const
15308{
15309 uint32 currentPhase = 0;
15311 if (!phases.empty())
15312 for (AuraEffectList::const_iterator itr = phases.begin(); itr != phases.end(); ++itr)
15313 currentPhase |= (*itr)->GetMiscValue();
15314
15315 return currentPhase;
15316}
@ SPELL_AURA_PHASE
Definition SpellAuraDefines.h:324

References GetAuraEffectsByType(), and SPELL_AURA_PHASE.

Referenced by Player::GetPhaseMaskForSpawn(), AuraEffect::HandlePhase(), and Player::SetGameMaster().

◆ GetPosStat()

float Unit::GetPosStat ( Stats  stat) const
inline
1066{ return GetFloatValue(static_cast<uint16>(UNIT_FIELD_POSSTAT0) + stat); }

References Object::GetFloatValue(), and UNIT_FIELD_POSSTAT0.

◆ GetPower()

uint32 Unit::GetPower ( Powers  power) const
inline
1135{ return GetUInt32Value(static_cast<uint16>(UNIT_FIELD_POWER1) + power); }
@ UNIT_FIELD_POWER1
Definition UpdateFields.h:97

References Object::GetUInt32Value(), and UNIT_FIELD_POWER1.

Referenced by PetAI::_canMeleeAttack(), Player::_SaveCharacter(), WorldSession::BuildPartyMemberStatsChangedPacket(), SpellInfo::CalcPowerCost(), spell_igb_cannon_blast::CalculatePower(), Creature::CanCastSpell(), Spell::CheckItems(), Spell::CheckPower(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::DamageTaken(), Spell::EffectCastButtons(), Spell::EffectWeaponDmg(), Pet::FillPetInfo(), Pet::GetHappinessState(), GetPowerPct(), Player::GiveLevel(), AuraEffect::HandleAuraModShapeshift(), spell_warr_execute::HandleEffect(), AuraEffect::HandleObsModPowerAuraTick(), spell_dk_pet_scaling::HandlePeriodic(), spell_dru_frenzied_regeneration::HandlePeriodic(), spell_hun_generic_scaling::HandlePeriodic(), spell_mage_pet_scaling::HandlePeriodic(), spell_sha_feral_spirit_scaling::HandlePeriodic(), spell_warl_generic_scaling::HandlePeriodic(), AuraEffect::HandlePeriodicEnergizeAuraTick(), AuraEffect::HandlePeriodicTriggerSpellAuraTick(), WorldSession::HandlePetAbandon(), WorldSession::HandleRequestPartyMemberStatsOpcode(), ArenaSpectator::HandleResetCommand(), spell_pal_lay_on_hands::HandleScript(), Player::InitStatsForLevel(), boss_shade_of_aran::JustEngagedWith(), npc_obsidian_destroyer::JustEngagedWith(), spell_gen_replenishment_aura::Load(), Pet::LoseHappiness(), ModifyPower(), spell_mark_of_kazrogal_aura::OnPeriodic(), spell_mark_of_kazzak_aura::OnPeriodic(), Acore::PowerPctOrderPred::operator()(), Acore::PowerPctOrderPred::operator()(), SmartScript::ProcessAction(), Creature::reachWithSpellAttack(), Creature::reachWithSpellCure(), Creature::Regenerate(), Player::Regenerate(), Creature::RegenerateHealth(), Player::SaveManaBeforeDuel(), Pet::SavePetToDB(), Creature::SaveToDB(), ScriptedAI::SelectSpell(), Spell::SendSpellGo(), Spell::SendSpellStart(), SetMaxPower(), SetPower(), setPowerType(), spell_igb_incinerating_blast::StoreEnergy(), Aura::Update(), boss_moam::UpdateAI(), boss_thorim_start_npcs::UpdateAI(), boss_thorim_gauntlet_npcs::UpdateAI(), boss_thorim_arena_npcs::UpdateAI(), PetAI::UpdateAI(), and Player::UpdateCharmedAI().

◆ GetPowerPct()

float Unit::GetPowerPct ( Powers  power) const
inline
1137{ return GetMaxPower(power) ? 100.f * GetPower(power) / GetMaxPower(power) : 0.0f; }
uint32 GetMaxPower(Powers power) const
Definition Unit.h:1136
uint32 GetPower(Powers power) const
Definition Unit.h:1135

References GetMaxPower(), and GetPower().

Referenced by npc_obsidian_destroyer::JustEngagedWith(), npc_obsidian_eradicator::JustEngagedWith(), npc_obsidian_nullifier::JustEngagedWith(), boss_curator::JustEngagedWith(), SmartScript::ProcessAction(), SmartScript::ProcessEvent(), and boss_hazzarah::UpdateAI().

◆ getPowerType()

Powers Unit::getPowerType ( ) const
inline
1131{ return Powers(GetByteValue(UNIT_FIELD_BYTES_0, 3)); }
Powers
Definition SharedDefines.h:256

References Object::GetByteValue(), and UNIT_FIELD_BYTES_0.

Referenced by boss_marli::_chargePlayer(), Player::ActivateSpec(), WorldSession::BuildPartyMemberStatsChangedPacket(), Creature::CanCastSpell(), spell_pal_judgement_of_wisdom_mana::CheckProc(), Spell::EffectSummonPet(), spell_chain_burn::FilterTargets(), spell_moam_mana_drain_filter::FilterTargets(), AuraEffect::HandleAuraModShapeshift(), Aura::HandleAuraSpecificMods(), AuraEffect::HandleObsModPowerAuraTick(), spell_dru_frenzied_regeneration::HandlePeriodic(), spell_dru_revitalize::HandleProc(), spell_dru_t3_2p_bonus::HandleProc(), spell_item_heartpierce::HandleProc(), spell_item_heartpierce_hero::HandleProc(), WorldSession::HandleRequestPartyMemberStatsOpcode(), ArenaSpectator::HandleResetCommand(), HasActivePowerType(), Player::HasActivePowerType(), Player::InitDataForForm(), ManaVoidSelector::operator()(), LeechingThrowSelector::operator()(), PowerUsersSelector::operator()(), spell_item_oracle_ablutions::PrepareSpellScript(), spell_item_mad_alchemists_potion::SecondaryEffect(), spell_item_crazy_alchemists_potion::SecondaryEffect(), setDeathState(), SetMaxPower(), SetPower(), Pet::Update(), Creature::Update(), boss_vaelastrasz::UpdateAI(), boss_ragnaros::UpdateAI(), boss_hazzarah::UpdateAI(), boss_faction_championsAI::UpdateAI(), npc_nether_drake::npc_nether_drakeAI::UpdateAI(), and lfg::LFGMgr::UpdateRaidBrowser().

◆ GetPowerTypeByAuraGroup()

Powers Unit::GetPowerTypeByAuraGroup ( UnitMods  unitMod) const
12285{
12286 switch (unitMod)
12287 {
12288 case UNIT_MOD_RAGE:
12289 return POWER_RAGE;
12290 case UNIT_MOD_FOCUS:
12291 return POWER_FOCUS;
12292 case UNIT_MOD_ENERGY:
12293 return POWER_ENERGY;
12294 case UNIT_MOD_HAPPINESS:
12295 return POWER_HAPPINESS;
12296 case UNIT_MOD_RUNE:
12297 return POWER_RUNE;
12299 return POWER_RUNIC_POWER;
12300 default:
12301 case UNIT_MOD_MANA:
12302 return POWER_MANA;
12303 }
12304}
@ UNIT_MOD_RUNE
Definition Unit.h:160
@ UNIT_MOD_ENERGY
Definition Unit.h:158
@ UNIT_MOD_FOCUS
Definition Unit.h:157
@ UNIT_MOD_HAPPINESS
Definition Unit.h:159
@ UNIT_MOD_MANA
Definition Unit.h:155
@ UNIT_MOD_RAGE
Definition Unit.h:156
@ UNIT_MOD_RUNIC_POWER
Definition Unit.h:161

References POWER_ENERGY, POWER_FOCUS, POWER_HAPPINESS, POWER_MANA, POWER_RAGE, POWER_RUNE, POWER_RUNIC_POWER, UNIT_MOD_ENERGY, UNIT_MOD_FOCUS, UNIT_MOD_HAPPINESS, UNIT_MOD_MANA, UNIT_MOD_RAGE, UNIT_MOD_RUNE, and UNIT_MOD_RUNIC_POWER.

Referenced by UpdateUnitMod().

◆ GetPPMProcChance()

float Unit::GetPPMProcChance ( uint32  WeaponSpeed,
float  PPM,
SpellInfo const *  spellProto 
) const
10507{
10508 // proc per minute chance calculation
10509 if (PPM <= 0)
10510 return 0.0f;
10511
10512 // Apply chance modifer aura
10513 if (spellProto)
10514 if (Player* modOwner = GetSpellModOwner())
10515 modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_PROC_PER_MINUTE, PPM);
10516
10517 return (WeaponSpeed * PPM) / 600.0f; // result is chance in percents (probability = Speed_in_sec * (PPM / 60))
10518}
@ SPELLMOD_PROC_PER_MINUTE
Definition SpellDefines.h:102

References GetSpellModOwner(), SpellInfo::Id, and SPELLMOD_PROC_PER_MINUTE.

Referenced by Player::CastItemCombatSpell().

◆ GetProcAurasTriggeredOnEvent()

void Unit::GetProcAurasTriggeredOnEvent ( AuraApplicationProcContainer aurasTriggeringProc,
std::list< AuraApplication * > *  procAuras,
ProcEventInfo  eventInfo 
)
12862{
12863 TimePoint now = std::chrono::steady_clock::now();
12864
12865 auto processAuraApplication = [&](AuraApplication* aurApp)
12866 {
12867 if (uint8 procEffectMask = aurApp->GetBase()->GetProcEffectMask(aurApp, eventInfo, now))
12868 {
12869 aurApp->GetBase()->PrepareProcToTrigger(aurApp, eventInfo, now);
12870 aurasTriggeringProc.emplace_back(procEffectMask, aurApp);
12871 }
12872 else
12873 {
12874 if (aurApp->GetBase()->GetSpellInfo()->HasAttribute(SPELL_ATTR2_PROC_COOLDOWN_ON_FAILURE))
12875 if (SpellProcEntry const* procEntry = sSpellMgr->GetSpellProcEntry(aurApp->GetBase()->GetId()))
12876 aurApp->GetBase()->AddProcCooldown(procEntry, now);
12877 }
12878 };
12879
12880 // use provided list of auras which can proc
12881 if (procAuras)
12882 {
12883 for (std::list<AuraApplication*>::iterator itr = procAuras->begin(); itr != procAuras->end(); ++itr)
12884 {
12885 ASSERT((*itr)->GetTarget() == this);
12886 if (!(*itr)->GetRemoveMode())
12887 processAuraApplication(*itr);
12888 }
12889 }
12890 // or generate one on our own
12891 else
12892 {
12893 for (AuraApplicationMap::iterator itr = GetAppliedAuras().begin(); itr != GetAppliedAuras().end(); ++itr)
12894 processAuraApplication(itr->second);
12895 }
12896}
std::chrono::steady_clock::time_point TimePoint
time_point shorthand typedefs
Definition Duration.h:69
@ SPELL_ATTR2_PROC_COOLDOWN_ON_FAILURE
Definition SharedDefines.h:467
AuraApplicationMap & GetAppliedAuras()
Definition Unit.h:1383
Definition SpellMgr.h:286

References ASSERT, GetAppliedAuras(), SPELL_ATTR2_PROC_COOLDOWN_ON_FAILURE, and sSpellMgr.

Referenced by TriggerAurasProcOnEvent().

◆ getRace()

uint8 Unit::getRace ( bool  original = false) const
17058{
17059 if (IsPlayer())
17060 {
17061 if (original)
17062 return m_realRace;
17063 else
17064 return m_race;
17065 }
17066
17068}

References Object::GetByteValue(), Object::IsPlayer(), m_race, m_realRace, and UNIT_FIELD_BYTES_0.

Referenced by Player::_LoadHomeBind(), Player::_LoadSkills(), Player::_SaveCharacter(), Player::BuildPlayerRepop(), Corpse::BuildValuesUpdate(), Player::CheckSkillLearnedBySpell(), Player::CreateCorpse(), GetModelForForm(), ObjectMgr::GetModelForShapeshift(), getRaceMask(), GetReactionTo(), Player::GetStartPosition(), Player::GetTeamId(), Player::GiveLevel(), WorldSession::HandleAlterAppearance(), AuraEffect::HandleAuraTransform(), WorldSession::HandleMirrorImageDataRequest(), modify_commandscript::HandleModifyGenderCommand(), misc_commandscript::HandlePInfoCommand(), WorldSession::HandlePlayerLoginFromDB(), reset_commandscript::HandleResetStatsOrLevelHelper(), Player::InitDisplayIds(), Player::InitStatsForLevel(), Guardian::InitStatsForLevel(), Player::InitTaxiNodesForLevel(), Player::IsSpellFitByClassAndRace(), Trainer::Trainer::IsTrainerValidForPlayer(), Channel::KickOrBan(), Player::LearnCustomSpells(), Player::LearnDefaultSkill(), Player::LearnDefaultSkills(), Player::LoadFromDB(), AchievementCriteriaData::Meets(), instance_culling_of_stratholme::instance_culling_of_stratholme_InstanceMapScript::OnPlayerEnter(), InstanceScript::OnPlayerLeave(), RestoreFaction(), Player::RewardHonor(), WorldSession::SendNameQueryOpcode(), Player::SetGameMaster(), Player::StoreNewItemInBestSlots(), lfg::LFGMgr::UpdateRaidBrowser(), and Player::UpdateSkillsForLevel().

◆ getRaceMask()

◆ GetRandomContactPoint()

bool Unit::GetRandomContactPoint ( Unit const *  target,
float &  x,
float &  y,
float &  z,
bool  force = false 
) const
833{
834 float combat_reach = GetCombatReach();
835 if (combat_reach < 0.1f) // sometimes bugged for players
836 combat_reach = DEFAULT_COMBAT_REACH;
837
838 uint32 attacker_number = getAttackers().size();
839 if (attacker_number > 0)
840 --attacker_number;
841 Creature const* c = obj->ToCreature();
842 if (c)
843 if (c->isWorldBoss() || c->IsDungeonBoss() || (obj->IsPet() && const_cast<Unit*>(obj)->ToPet()->isControlled()))
844 attacker_number = 0; // pussywizard: pets and bosses just come to target from their angle
845
846 GetNearPoint(obj, x, y, z, isMoving() ? (obj->GetCombatReach() > 7.75f ? obj->GetCombatReach() - 7.5f : 0.25f) : obj->GetCombatReach(), 0.0f,
847 GetAngle(obj) + (attacker_number ? (static_cast<float>(M_PI / 2) - static_cast<float>(M_PI) * (float)rand_norm()) * float(attacker_number) / combat_reach * 0.3f : 0));
848
849 // pussywizard
850 if (std::fabs(this->GetPositionZ() - z) > this->GetCollisionHeight() || !IsWithinLOS(x, y, z))
851 {
852 x = this->GetPositionX();
853 y = this->GetPositionY();
854 z = this->GetPositionZ();
855 obj->UpdateAllowedPositionZ(x, y, z);
856 }
857 float maxDist = GetMeleeRange(obj);
858 if (GetExactDistSq(x, y, z) >= maxDist * maxDist)
859 {
860 if (force)
861 {
862 x = this->GetPositionX();
863 y = this->GetPositionY();
864 z = this->GetPositionZ();
865 return true;
866 }
867 return false;
868 }
869 return true;
870}
#define DEFAULT_COMBAT_REACH
Definition ObjectDefines.h:45
bool IsDungeonBoss() const
Definition Creature.cpp:3278
bool isControlled() const
Definition Pet.h:54
float GetCollisionHeight() const override
Return collision height sent to client.
Definition Unit.cpp:17151
float GetMeleeRange(Unit const *target) const
Definition Unit.cpp:801
bool IsWithinLOS(float x, float y, float z, VMAP::ModelIgnoreFlags ignoreFlags=VMAP::ModelIgnoreFlags::Nothing, LineOfSightChecks checks=LINEOFSIGHT_ALL_CHECKS) const
Definition Object.cpp:1382
float GetExactDistSq(float x, float y, float z) const
Definition Position.h:174

References DEFAULT_COMBAT_REACH, Position::GetAngle(), getAttackers(), GetCollisionHeight(), GetCombatReach(), Position::GetExactDistSq(), GetMeleeRange(), WorldObject::GetNearPoint(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), Pet::isControlled(), Creature::IsDungeonBoss(), isMoving(), IsPet(), WorldObject::IsWithinLOS(), Creature::isWorldBoss(), rand_norm(), Object::ToCreature(), ToPet(), and WorldObject::UpdateAllowedPositionZ().

Referenced by boss_bug_trio::DamageTaken(), and boss_bug_trio::DoFinalSpell().

◆ GetRangedCritChanceReduction()

float Unit::GetRangedCritChanceReduction ( ) const
inline

◆ GetRangedCritDamageReduction()

uint32 Unit::GetRangedCritDamageReduction ( uint32  damage) const
inline

◆ GetRangedDamageReduction()

uint32 Unit::GetRangedDamageReduction ( uint32  damage) const
inline

◆ GetReactionTo()

ReputationRank Unit::GetReactionTo ( Unit const *  target,
bool  checkOriginalFaction = false 
) const
7093{
7094 // always friendly to self
7095 if (this == target)
7096 return REP_FRIENDLY;
7097
7098 // always friendly to charmer or owner
7100 return REP_FRIENDLY;
7101
7102 Player const* selfPlayerOwner = GetAffectingPlayer();
7103 Player const* targetPlayerOwner = target->GetAffectingPlayer();
7104
7105 // check forced reputation to support SPELL_AURA_FORCE_REACTION
7106 if (selfPlayerOwner)
7107 {
7108 if (FactionTemplateEntry const* targetFactionTemplateEntry = target->GetFactionTemplateEntry())
7109 if (ReputationRank const* repRank = selfPlayerOwner->GetReputationMgr().GetForcedRankIfAny(targetFactionTemplateEntry))
7110 return *repRank;
7111 }
7112 else if (targetPlayerOwner)
7113 {
7114 if (FactionTemplateEntry const* selfFactionTemplateEntry = GetFactionTemplateEntry())
7115 if (ReputationRank const* repRank = targetPlayerOwner->GetReputationMgr().GetForcedRankIfAny(selfFactionTemplateEntry))
7116 return *repRank;
7117 }
7118
7120 {
7121 if (target->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED))
7122 {
7123 if (selfPlayerOwner && targetPlayerOwner)
7124 {
7125 // always friendly to other unit controlled by player, or to the player himself
7126 if (selfPlayerOwner == targetPlayerOwner)
7127 return REP_FRIENDLY;
7128
7129 // duel - always hostile to opponent
7130 if (selfPlayerOwner->duel && selfPlayerOwner->duel->Opponent == targetPlayerOwner && selfPlayerOwner->duel->State == DUEL_STATE_IN_PROGRESS)
7131 return REP_HOSTILE;
7132
7133 // same group - checks dependant only on our faction - skip FFA_PVP for example
7134 if (selfPlayerOwner->IsInRaidWith(targetPlayerOwner))
7135 return REP_FRIENDLY; // return true to allow config option AllowTwoSide.Interaction.Group to work
7136 // however client seems to allow mixed group parties, because in 13850 client it works like:
7137 // return GetFactionReactionTo(GetFactionTemplateEntry(), target);
7138 }
7139
7140 // check FFA_PVP
7141 if (IsFFAPvP() && target->IsFFAPvP())
7142 return REP_HOSTILE;
7143
7144 if (selfPlayerOwner)
7145 {
7146 if (FactionTemplateEntry const* targetFactionTemplateEntry = target->GetFactionTemplateEntry())
7147 {
7148 if (ReputationRank const* repRank = selfPlayerOwner->GetReputationMgr().GetForcedRankIfAny(targetFactionTemplateEntry))
7149 return *repRank;
7150 if (!selfPlayerOwner->HasUnitFlag2(UNIT_FLAG2_IGNORE_REPUTATION))
7151 {
7152 if (FactionEntry const* targetFactionEntry = sFactionStore.LookupEntry(targetFactionTemplateEntry->faction))
7153 {
7154 if (targetFactionEntry->CanHaveReputation())
7155 {
7156 // check contested flags
7157 if (targetFactionTemplateEntry->factionFlags & FACTION_TEMPLATE_FLAG_ATTACK_PVP_ACTIVE_PLAYERS
7158 && selfPlayerOwner->HasPlayerFlag(PLAYER_FLAGS_CONTESTED_PVP))
7159 return REP_HOSTILE;
7160
7161 // if faction has reputation, hostile state depends only from AtWar state
7162 if (selfPlayerOwner->GetReputationMgr().IsAtWar(targetFactionEntry))
7163 return REP_HOSTILE;
7164 return REP_FRIENDLY;
7165 }
7166 }
7167 }
7168 }
7169 }
7170 }
7171 }
7172
7173 ReputationRank repRank = REP_HATED;
7174 if (!sScriptMgr->IfNormalReaction(this, target, repRank))
7175 {
7176 return ReputationRank(repRank);
7177 }
7178
7179 FactionTemplateEntry const* factionTemplateEntry = nullptr;
7180 if (checkOriginalFaction)
7181 {
7182 if (IsPlayer())
7183 {
7184 if (ChrRacesEntry const* rEntry = sChrRacesStore.LookupEntry(getRace()))
7185 {
7186 factionTemplateEntry = sFactionTemplateStore.LookupEntry(rEntry->FactionID);
7187 }
7188 }
7189 else
7190 {
7191 Unit* owner = GetOwner();
7192 if (HasUnitTypeMask(UNIT_MASK_MINION) && owner)
7193 {
7194 factionTemplateEntry = sFactionTemplateStore.LookupEntry(owner->GetFaction());
7195 }
7196 else if (CreatureTemplate const* cinfo = ToCreature()->GetCreatureTemplate())
7197 {
7198 factionTemplateEntry = sFactionTemplateStore.LookupEntry(cinfo->faction);
7199 }
7200 }
7201 }
7202
7203 if (!factionTemplateEntry)
7204 {
7205 factionTemplateEntry = GetFactionTemplateEntry();
7206 }
7207
7208 // do checks dependant only on our faction
7209 return GetFactionReactionTo(factionTemplateEntry, target);
7210}
DBCStorage< ChrRacesEntry > sChrRacesStore(ChrRacesEntryfmt)
@ REP_HATED
Definition SharedDefines.h:157
bool HasPlayerFlag(PlayerFlags flags) const
Definition Player.h:1123
bool IsAtWar(uint32 faction_id) const
Definition ReputationMgr.cpp:55
ReputationRank GetFactionReactionTo(FactionTemplateEntry const *factionTemplateEntry, Unit const *target) const
Definition Unit.cpp:7212
bool IsInRaidWith(Unit const *unit) const
Definition Unit.cpp:15066
Definition DBCStructure.h:679

References Player::duel, DUEL_STATE_IN_PROGRESS, FACTION_TEMPLATE_FLAG_ATTACK_PVP_ACTIVE_PLAYERS, GetAffectingPlayer(), GetCharmerOrOwnerOrSelf(), GetFaction(), GetFactionReactionTo(), GetFactionTemplateEntry(), ReputationMgr::GetForcedRankIfAny(), GetOwner(), getRace(), Player::GetReputationMgr(), Player::HasPlayerFlag(), HasUnitFlag(), HasUnitFlag2(), HasUnitTypeMask(), ReputationMgr::IsAtWar(), IsFFAPvP(), IsInRaidWith(), Object::IsPlayer(), PLAYER_FLAGS_CONTESTED_PVP, REP_FRIENDLY, REP_HATED, REP_HOSTILE, sChrRacesStore, sFactionStore, sFactionTemplateStore, sScriptMgr, Object::ToCreature(), UNIT_FLAG2_IGNORE_REPUTATION, UNIT_FLAG_PLAYER_CONTROLLED, and UNIT_MASK_MINION.

Referenced by _IsValidAssistTarget(), _IsValidAttackTarget(), GetDispellableAuraList(), Player::GetNPCIfCanInteractWith(), IsFriendlyTo(), IsHostileTo(), and Condition::Meets().

◆ GetResistance() [1/2]

uint32 Unit::GetResistance ( SpellSchoolMask  mask) const
16268{
16269 int32 resist = -1;
16270 for (int i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i)
16271 if (mask & (1 << i) && (resist < 0 || resist > int32(GetResistance(SpellSchools(i)))))
16272 resist = int32(GetResistance(SpellSchools(i)));
16273
16274 // resist value will never be negative here
16275 return uint32(resist);
16276}
SpellSchools
Definition SharedDefines.h:270
constexpr auto MAX_SPELL_SCHOOL
Definition SharedDefines.h:280

References GetResistance(), MAX_SPELL_SCHOOL, and SPELL_SCHOOL_NORMAL.

Referenced by Player::_SaveStats(), GetArmor(), GetEffectiveResistChance(), GetResistance(), and Player::outDebugValues().

◆ GetResistance() [2/2]

uint32 Unit::GetResistance ( SpellSchools  school) const
inline
1197{ return GetUInt32Value(static_cast<uint16>(UNIT_FIELD_RESISTANCES) + school); }
@ UNIT_FIELD_RESISTANCES
Definition UpdateFields.h:156

References Object::GetUInt32Value(), and UNIT_FIELD_RESISTANCES.

◆ GetSchoolImmunityMask()

uint32 Unit::GetSchoolImmunityMask ( ) const

◆ GetShapeshiftForm()

◆ GetSharedVisionList()

◆ GetSheath()

SheathState Unit::GetSheath ( ) const
inline
SheathState
Definition UnitDefines.h:128

References Object::GetByteValue(), and UNIT_FIELD_BYTES_2.

◆ GetShieldBlockValue() [1/2]

virtual uint32 Unit::GetShieldBlockValue ( ) const
pure virtual

◆ GetShieldBlockValue() [2/2]

uint32 Unit::GetShieldBlockValue ( uint32  soft_cap,
uint32  hard_cap 
) const
inline
1176 {
1177 uint32 value = GetShieldBlockValue();
1178 if (value >= hard_cap)
1179 {
1180 value = (soft_cap + hard_cap) / 2;
1181 }
1182 else if (value > soft_cap)
1183 {
1184 value = soft_cap + ((value - soft_cap) / 2);
1185 }
1186
1187 return value;
1188 }

References GetShieldBlockValue().

◆ GetSingleCastAuras() [1/2]

AuraList & Unit::GetSingleCastAuras ( )
inline

◆ GetSingleCastAuras() [2/2]

AuraList const & Unit::GetSingleCastAuras ( ) const
inline
1430{ return m_scAuras; }

References m_scAuras.

◆ GetSpeed()

float Unit::GetSpeed ( UnitMoveType  mtype) const

◆ GetSpeedRate()

◆ GetSpellCritChanceReduction()

float Unit::GetSpellCritChanceReduction ( ) const
inline

◆ GetSpellCritDamageReduction()

◆ GetSpellDamageReduction()

uint32 Unit::GetSpellDamageReduction ( uint32  damage) const
inline

◆ GetSpellMaxRangeForTarget()

float Unit::GetSpellMaxRangeForTarget ( Unit const *  target,
SpellInfo const *  spellInfo 
) const
11896{
11897 if (!spellInfo->RangeEntry)
11898 {
11899 return 0;
11900 }
11901
11902 if (spellInfo->RangeEntry->RangeMax[1] == spellInfo->RangeEntry->RangeMax[0])
11903 {
11904 return spellInfo->GetMaxRange();
11905 }
11906
11907 if (!target)
11908 {
11909 return spellInfo->GetMaxRange(true);
11910 }
11911
11912 return spellInfo->GetMaxRange(!IsHostileTo(target));
11913}

References SpellInfo::GetMaxRange(), IsHostileTo(), SpellInfo::RangeEntry, and SpellRangeEntry::RangeMax.

Referenced by spell_sha_fire_nova::CheckFireTotem(), Spell::CheckRange(), SpellTargetSelector::operator()(), SmartScript::ProcessAction(), ScriptedAI::SelectSpell(), GameObject::TriggeringLinkedGameObject(), and Pet::Update().

◆ GetSpellMinRangeForTarget()

float Unit::GetSpellMinRangeForTarget ( Unit const *  target,
SpellInfo const *  spellInfo 
) const
11916{
11917 if (!spellInfo->RangeEntry)
11918 {
11919 return 0;
11920 }
11921
11922 if (spellInfo->RangeEntry->RangeMin[1] == spellInfo->RangeEntry->RangeMin[0])
11923 {
11924 return spellInfo->GetMinRange();
11925 }
11926
11927 return spellInfo->GetMinRange(!IsHostileTo(target));
11928}

References SpellInfo::GetMinRange(), IsHostileTo(), SpellInfo::RangeEntry, and SpellRangeEntry::RangeMin.

Referenced by Spell::CheckRange(), SpellTargetSelector::operator()(), SmartScript::ProcessAction(), and ScriptedAI::SelectSpell().

◆ GetSpellModOwner()

Player * Unit::GetSpellModOwner ( ) const
12967{
12968 if (Player* player = const_cast<Unit*>(this)->ToPlayer())
12969 {
12970 return player;
12971 }
12972
12973 if (Unit* owner = GetOwner())
12974 {
12975 if (Player* player = owner->ToPlayer())
12976 {
12977 return player;
12978 }
12979 }
12980
12981 // Special handling for Eye of Kilrogg
12983 {
12984 if (TempSummon const* tempSummon = ToTempSummon())
12985 {
12986 if (Unit* summoner = tempSummon->GetSummonerUnit())
12987 {
12988 return summoner->ToPlayer();
12989 }
12990 }
12991 }
12992
12993 return nullptr;
12994}
@ NPC_EYE_OF_KILROGG
Definition PetDefines.h:102
Definition TemporarySummon.h:50

References Object::GetEntry(), GetOwner(), NPC_EYE_OF_KILROGG, Object::ToPlayer(), and ToTempSummon().

Referenced by Spell::_cast(), Creature::AddSpellCooldown(), ApplyEffectModifiers(), CalcArmorReducedDamage(), SpellEffectInfo::CalcDamageMultiplier(), Aura::CalcDispelChance(), Aura::CalcMaxCharges(), Aura::CalcMaxDuration(), AuraEffect::CalcPeriodicCritChance(), SpellInfo::CalcPowerCost(), Aura::CalcProcChance(), SpellEffectInfo::CalcRadius(), spell_dru_brambles_treant::CalculateAmount(), ThreatManager::CalculateModifiedThreat(), AuraEffect::CalculatePeriodic(), CalculateSpellDamageTaken(), SpellEffectInfo::CalcValueMultiplier(), Spell::cancel(), Spell::cast(), Spell::CheckRange(), Spell::CheckRuneCost(), Spell::EffectSummonPet(), Spell::EffectSummonType(), Spell::finish(), GetEffectiveResistChance(), SpellInfo::GetMaxRange(), GetPPMProcChance(), Spell::handle_delayed(), Spell::handle_immediate(), IsAlwaysDetectableFor(), MagicSpellHitResult(), MeleeSpellMissChance(), ModSpellCastTime(), Spell::SelectImplicitChainTargets(), Aura::SetDuration(), SpellCriticalDamageBonus(), SpellCriticalHealingBonus(), SpellDamageBonusDone(), SpellDoneCritChance(), SpellHealingBonusDone(), SpellHealingBonusTaken(), Spell::SummonGuardian(), Spell::TakePower(), Spell::TakeRunePower(), TriggerAurasProcOnEvent(), Spell::UpdateChanneledTargetList(), and Aura::UpdateOwner().

◆ GetSpellSchoolByAuraGroup()

SpellSchools Unit::GetSpellSchoolByAuraGroup ( UnitMods  unitMod) const
12224{
12226
12227 switch (unitMod)
12228 {
12230 school = SPELL_SCHOOL_HOLY;
12231 break;
12233 school = SPELL_SCHOOL_FIRE;
12234 break;
12236 school = SPELL_SCHOOL_NATURE;
12237 break;
12239 school = SPELL_SCHOOL_FROST;
12240 break;
12242 school = SPELL_SCHOOL_SHADOW;
12243 break;
12245 school = SPELL_SCHOOL_ARCANE;
12246 break;
12247
12248 default:
12249 break;
12250 }
12251
12252 return school;
12253}
@ SPELL_SCHOOL_SHADOW
Definition SharedDefines.h:276
@ SPELL_SCHOOL_NATURE
Definition SharedDefines.h:274
@ SPELL_SCHOOL_FROST
Definition SharedDefines.h:275
@ SPELL_SCHOOL_ARCANE
Definition SharedDefines.h:277
@ SPELL_SCHOOL_FIRE
Definition SharedDefines.h:273
@ SPELL_SCHOOL_HOLY
Definition SharedDefines.h:272
@ UNIT_MOD_RESISTANCE_SHADOW
Definition Unit.h:167
@ UNIT_MOD_RESISTANCE_FROST
Definition Unit.h:166
@ UNIT_MOD_RESISTANCE_HOLY
Definition Unit.h:163
@ UNIT_MOD_RESISTANCE_ARCANE
Definition Unit.h:168
@ UNIT_MOD_RESISTANCE_FIRE
Definition Unit.h:164
@ UNIT_MOD_RESISTANCE_NATURE
Definition Unit.h:165

References SPELL_SCHOOL_ARCANE, SPELL_SCHOOL_FIRE, SPELL_SCHOOL_FROST, SPELL_SCHOOL_HOLY, SPELL_SCHOOL_NATURE, SPELL_SCHOOL_NORMAL, SPELL_SCHOOL_SHADOW, UNIT_MOD_RESISTANCE_ARCANE, UNIT_MOD_RESISTANCE_FIRE, UNIT_MOD_RESISTANCE_FROST, UNIT_MOD_RESISTANCE_HOLY, UNIT_MOD_RESISTANCE_NATURE, and UNIT_MOD_RESISTANCE_SHADOW.

Referenced by UpdateUnitMod().

◆ getStandState()

◆ GetStat()

◆ GetStatByAuraGroup()

Stats Unit::GetStatByAuraGroup ( UnitMods  unitMod) const
12256{
12257 Stats stat = STAT_STRENGTH;
12258
12259 switch (unitMod)
12260 {
12262 stat = STAT_STRENGTH;
12263 break;
12265 stat = STAT_AGILITY;
12266 break;
12268 stat = STAT_STAMINA;
12269 break;
12271 stat = STAT_INTELLECT;
12272 break;
12274 stat = STAT_SPIRIT;
12275 break;
12276
12277 default:
12278 break;
12279 }
12280
12281 return stat;
12282}
Stats
Definition SharedDefines.h:245
@ STAT_SPIRIT
Definition SharedDefines.h:250
@ STAT_INTELLECT
Definition SharedDefines.h:249
@ STAT_AGILITY
Definition SharedDefines.h:247
@ STAT_STRENGTH
Definition SharedDefines.h:246
@ STAT_STAMINA
Definition SharedDefines.h:248
@ UNIT_MOD_STAT_INTELLECT
Definition Unit.h:152
@ UNIT_MOD_STAT_SPIRIT
Definition Unit.h:153
@ UNIT_MOD_STAT_STRENGTH
Definition Unit.h:149
@ UNIT_MOD_STAT_AGILITY
Definition Unit.h:150
@ UNIT_MOD_STAT_STAMINA
Definition Unit.h:151

References STAT_AGILITY, STAT_INTELLECT, STAT_SPIRIT, STAT_STAMINA, STAT_STRENGTH, UNIT_MOD_STAT_AGILITY, UNIT_MOD_STAT_INTELLECT, UNIT_MOD_STAT_SPIRIT, UNIT_MOD_STAT_STAMINA, and UNIT_MOD_STAT_STRENGTH.

Referenced by UpdateUnitMod().

◆ GetTarget()

◆ GetThreatMgr() [1/2]

ThreatManager & Unit::GetThreatMgr ( )
inline
951{ return m_threatManager; }

References m_threatManager.

Referenced by PetAI::_stopAttack(), Vehicle::AddPassenger(), ThreatManager::AddThreat(), npc_vengeful_shade::npc_vengeful_shadeAI::AttackStart(), ThreatManager::CalculateModifiedThreat(), Creature::CallForHelp(), boss_hazzarah::CanAIAttack(), boss_renataki::boss_renatakiAI::CanAIAttack(), boss_mor_grayhoof::CastRandomSpell(), spell_hun_misdirection::CheckProc(), Pet::Create(), boss_eadric::boss_eadricAI::DamageTaken(), boss_paletress::boss_paletressAI::DamageTaken(), boss_grand_champion::boss_grand_championAI::DamageTaken(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::DamageTaken(), npc_magister_aledis::DamageTaken(), boss_ysondre::boss_ysondreAI::DamageTaken(), npc_tapoke_slim_jahn::npc_tapoke_slim_jahnAI::DamageTaken(), npc_dark_nucleus::npc_dark_nucleusAI::DamageTaken(), boss_thorim_start_npcs::DamageTaken(), npc_crok_scourgebane::npc_crok_scourgebaneAI::DoAction(), boss_thaddius_summon::boss_thaddius_summonAI::DoAction(), npc_spark_of_ionar::DoAction(), UnitAI::DoAddAuraToAllHostilePlayers(), ScriptedAI::DoAddThreat(), Spell::DoAllEffectOnTarget(), UnitAI::DoCastToAllHostilePlayers(), npc_taskmaster_fizzule::npc_taskmaster_fizzuleAI::DoFriend(), ScriptedAI::DoGetThreat(), ScriptedAI::DoModifyThreatByPercent(), npc_unkor_the_ruthless::npc_unkor_the_ruthlessAI::DoNice(), ScriptedAI::DoResetThreat(), ScriptedAI::DoResetThreatList(), Spell::DoSpellHitOnUnit(), Spell::EffectDispel(), Spell::EffectDispelMechanic(), Spell::EffectModifyThreatPercent(), Spell::EffectRedirectThreat(), Spell::EffectSanctuary(), Spell::EffectTaunt(), Spell::EffectThreat(), CombatManager::EndAllPvECombat(), CombatReference::EndCombat(), boss_faction_championsAI::EnemiesInRange(), EnergizeBySpell(), npc_tirion_fordring_tft::npc_tirion_fordringAI::EnterEvadeMode(), boss_murmur::EnterEvadeMode(), boss_alar::EnterEvadeMode(), GuardAI::EnterEvadeMode(), boss_doomrel::EnterEvadeMode(), npc_varian_wrynn::npc_varian_wrynnAI::EnterEvadeMode(), npc_thrall_bfu::npc_thrall_bfuAI::EnterEvadeMode(), boss_ouro::EnterEvadeMode(), npc_pos_freed_slave::npc_pos_freed_slaveAI::EnterEvadeMode(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::EnterEvadeMode(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::EnterEvadeMode(), gunship_npc_AI::EnterEvadeMode(), npc_gunship_boarding_addAI::EnterEvadeMode(), npc_terenas_menethil::npc_terenas_menethilAI::EnterEvadeMode(), violet_hold_trashAI::EnterEvadeMode(), npc_escortAI::EnterEvadeMode(), FollowerAI::EnterEvadeMode(), npc_crystalline_frayer::EnterSeedPod(), UnitAI::EvadeTimerExpired(), TemporaryThreatModifierEvent::Execute(), StartMovementEvent::Execute(), boss_supremus::FindHatefulStrikeTarget(), npc_raging_flames::FixateRandomTarget(), ThreatManager::ForwardThreatForAssistingMe(), SmartScript::GetTargets(), UnitAI::GetThreatMgr(), AuraEffect::HandleAuraModDmgImmunity(), AuraEffect::HandleAuraModSchoolImmunity(), AuraEffect::HandleAuraModStun(), AuraEffect::HandleAuraModTotalThreat(), misc_commandscript::HandleCombatStopCommand(), debug_commandscript::HandleDebugHostileRefListCommand(), debug_commandscript::HandleDebugThreatInfoCommand(), debug_commandscript::HandleDebugThreatListCommand(), spell_karazhan_blink::HandleDummy(), spell_kaelthas_mind_control::HandleEffect(), spell_tharon_ja_dummy_aura::HandleEffectRemove(), spell_q11919_q11940_drake_hunt_aura::HandleEffectRemove(), AuraEffect::HandleFeignDeath(), AuraEffect::HandleModConfuse(), AuraEffect::HandleModDetaunt(), AuraEffect::HandleModTaunt(), AuraEffect::HandleModThreat(), WorldSession::HandleMoveWorldportAck(), AuraEffect::HandleObsModPowerAuraTick(), spell_enveloping_webs::HandleOnHit(), spell_arcane_vacuum::HandleOnHit(), AuraEffect::HandlePeriodicEnergizeAuraTick(), AuraEffect::HandlePeriodicHealAurasTick(), AuraEffect::HandlePeriodicHealthLeechAuraTick(), spell_pet_guard_dog::HandleProc(), spell_rog_tricks_of_the_trade_proc::HandleRemove(), spell_warr_vigilance::HandleRemove(), PetAI::HandleReturnMovement(), spell_pursue::HandleScript(), spell_gurtogg_eject::HandleScriptEffect(), spell_leotheras_whirlwind::HandleScriptEffect(), spell_kaelthas_nether_beam::HandleScriptEffect(), spell_black_knight_ghoul_claw::HandleSpellHit(), Spell::HandleThreatSpells(), Creature::InitEntry(), npc_pet_mage_mirror_image::InitializeAI(), boss_thaddius::boss_thaddiusAI::IsAnyPlayerInMeleeRange(), NPCStaveQuestAI::IsFairFight(), boss_hadronox::IsInCombatWithPlayer(), boss_attumen::IsSummonedBy(), boss_talon_king_ikiss::JustEngagedWith(), boss_blackheart_the_inciter::JustEngagedWith(), boss_teron_gorefiend::JustEngagedWith(), boss_jindo::JustSummoned(), boss_urom::boss_uromAI::LeaveCombat(), WorldSession::LogoutPlayer(), Creature::ModifyThreatPercentTemp(), boss_bug_trio::MovementInform(), npc_pet_mage_mirror_image::MySelectNextTarget(), spell_halion_twilight_phasing_aura::OnApply(), spell_halion_twilight_phasing_aura::OnRemove(), spell_hun_misdirection::OnRemove(), spell_hun_misdirection_proc::OnRemove(), spell_rog_tricks_of_the_trade_aura::OnRemove(), NonTankTargetSelector::operator()(), PowerUsersSelector::operator()(), MalleableGooSelector::operator()(), StoneGripTargetSelector::operator()(), boss_jeklik::PathEndReached(), SmartScript::ProcessAction(), SmartScript::ProcessEvent(), boss_priestess_lackey_commonAI::RecalculateThreat(), boss_faction_championsAI::RecalculateThreat(), Map::RemovePlayerFromMap(), boss_tharon_ja::boss_tharon_jaAI::Reset(), boss_talon_king_ikiss::Reset(), boss_faction_championsAI::SelectEnemyCaster(), npc_scholomance_occultist::npc_scholomance_occultistAI::SelectUnitCasting(), instance_naxxramas::SetBossState(), Player::SetInWater(), SetPhaseMask(), npc_ulduar_iron_construct::SpellHit(), npc_frostwing_vrykul::npc_frostwing_vrykulAI::SpellHitTarget(), boss_eck::SpellHitTarget(), boss_ouro::SpellHitTarget(), spell_putricide_ooze_channel::StartAttack(), NPCStaveQuestAI::StorePlayerGUID(), ThreatReference::UnregisterAndFree(), Creature::Update(), boss_drakkisath::UpdateAI(), boss_nefarian::UpdateAI(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::UpdateAI(), boss_grilek::boss_grilekAI::UpdateAI(), boss_hakkar::boss_hakkarAI::UpdateAI(), boss_jindo::UpdateAI(), boss_mandokir::boss_mandokirAI::UpdateAI(), boss_renataki::boss_renatakiAI::UpdateAI(), boss_sartura::UpdateAI(), npc_sartura_royal_guard::UpdateAI(), npc_toc5_grand_champion_minion::npc_toc5_grand_champion_minionAI::UpdateAI(), boss_grand_champion::boss_grand_championAI::UpdateAI(), npc_snobold_vassal::npc_snobold_vassalAI::UpdateAI(), npc_raging_spirit::npc_raging_spiritAI::UpdateAI(), boss_gothik::boss_gothikAI::UpdateAI(), boss_kelthuzad::boss_kelthuzadAI::UpdateAI(), boss_patchwerk::boss_patchwerkAI::UpdateAI(), boss_sapphiron::boss_sapphironAI::UpdateAI(), boss_thaddius_summon::boss_thaddius_summonAI::UpdateAI(), boss_malygos::UpdateAI(), npc_molten_golem::UpdateAI(), boss_palehoof::boss_palehoofAI::UpdateAI(), npc_frozen_orb::npc_frozen_orbAI::UpdateAI(), boss_the_lurker_below::UpdateAI(), npc_aeranas::npc_aeranasAI::UpdateAI(), npc_pet_hunter_snake_trap::UpdateAI(), boss_netherspite::UpdatePortals(), and NPCStaveQuestAI::ValidThreatlist().

◆ GetThreatMgr() [2/2]

ThreatManager const & Unit::GetThreatMgr ( ) const
inline
952{ return m_threatManager; }

References m_threatManager.

◆ GetTotalAttackPowerValue()

float Unit::GetTotalAttackPowerValue ( WeaponAttackType  attType,
Unit pVictim = nullptr 
) const
12307{
12308 if (attType == RANGED_ATTACK)
12309 {
12311 if (victim)
12312 ap += victim->GetTotalAuraModifier(SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS);
12313
12314 if (ap < 0)
12315 return 0.0f;
12317 }
12318 else
12319 {
12321 if (victim)
12322 ap += victim->GetTotalAuraModifier(SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS);
12323
12324 if (ap < 0)
12325 return 0.0f;
12327 }
12328}
@ SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS
Definition SpellAuraDefines.h:190
@ SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS
Definition SpellAuraDefines.h:228
@ UNIT_FIELD_ATTACK_POWER_MODS
Definition UpdateFields.h:163
@ UNIT_FIELD_RANGED_ATTACK_POWER
Definition UpdateFields.h:165
@ UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER
Definition UpdateFields.h:167
@ UNIT_FIELD_ATTACK_POWER_MULTIPLIER
Definition UpdateFields.h:164
@ UNIT_FIELD_ATTACK_POWER
Definition UpdateFields.h:162
@ UNIT_FIELD_RANGED_ATTACK_POWER_MODS
Definition UpdateFields.h:166
int32 GetInt32Value(uint16 index) const
Definition Object.cpp:288

References Object::GetFloatValue(), Object::GetInt32Value(), GetTotalAuraModifier(), RANGED_ATTACK, SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS, SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS, UNIT_FIELD_ATTACK_POWER, UNIT_FIELD_ATTACK_POWER_MODS, UNIT_FIELD_ATTACK_POWER_MULTIPLIER, UNIT_FIELD_RANGED_ATTACK_POWER, UNIT_FIELD_RANGED_ATTACK_POWER_MODS, and UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER.

Referenced by spell_dk_ghoul_thrash::CalcDamage(), Creature::CalculateMinMaxDamage(), Player::CalculateMinMaxDamage(), Spell::EffectSchoolDMG(), Spell::EffectWeaponDmg(), spell_warr_execute::HandleEffect(), spell_sha_shamanistic_rage::HandleProc(), spell_pal_seal_of_righteousness::HandleProc(), Spell::HandleThreatSpells(), Guardian::InitStatsForLevel(), SpellBaseDamageBonusDone(), SpellBaseHealingBonusDone(), SpellDamageBonusDone(), SpellHealingBonusDone(), Guardian::UpdateDamagePhysical(), and lfg::LFGMgr::UpdateRaidBrowser().

◆ GetTotalAuraModifier() [1/2]

int32 Unit::GetTotalAuraModifier ( AuraType  auratype) const
6297{
6298 return GetTotalAuraModifier(auraType, [](AuraEffect const* /*aurEff*/) { return true; });
6299}

References GetTotalAuraModifier().

Referenced by Player::AddSpellAndCategoryCooldowns(), CalcArmorReducedDamage(), Aura::CalcDispelChance(), CalculateMeleeDamage(), Player::CalculateReputationGain(), CalculateSpellDamageTaken(), DealMeleeDamage(), Spell::Delayed(), Spell::DelayedChannel(), Creature::GetAggroRange(), Creature::GetAttackDistance(), GetTotalAttackPowerValue(), GetTotalAuraModifier(), GetTotalAuraModifierByAffectMask(), GetTotalAuraModifierByMiscMask(), GetTotalAuraModifierByMiscValue(), GetUnitBlockChance(), GetUnitCriticalChance(), GetUnitDodgeChance(), GetUnitMissChance(), GetUnitParryChance(), Player::HandleFall(), isBlockCritical(), MagicSpellHitResult(), MeleeDamageBonusDone(), MeleeDamageBonusTaken(), MeleeSpellHitResult(), RecalculateObjectScale(), Creature::RegenerateHealth(), Player::RegenerateHealth(), RewardRage(), RollMeleeOutcomeAgainst(), SpellBaseDamageBonusDone(), SpellBaseDamageBonusTaken(), SpellBaseHealingBonusDone(), SpellDamageBonusDone(), SpellDoneCritChance(), SpellHitResult(), SpellHitResult(), SpellTakenCritChance(), Player::UpdateBlockPercentage(), UpdateDamageDoneMods(), Player::UpdateDodgePercentage(), Player::UpdateExpertise(), Player::UpdateManaRegen(), Player::UpdateMeleeHitChances(), Player::UpdateParryPercentage(), Player::UpdateRangedHitChances(), UpdateResistanceBuffModsMod(), UpdateSpeed(), Player::UpdateSpellCritChance(), Player::UpdateSpellHitChances(), UpdateStatBuffMod(), and Player::UpdateWeaponDependentCritAuras().

◆ GetTotalAuraModifier() [2/2]

int32 Unit::GetTotalAuraModifier ( AuraType  auratype,
std::function< bool(AuraEffect const *)> const &  predicate 
) const
6211{
6212 AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auraType);
6213 if (mTotalAuraList.empty())
6214 return 0;
6215
6216 std::map<SpellGroup, int32> sameEffectSpellGroup;
6217 int32 modifier = 0;
6218
6219 for (AuraEffect const* aurEff : mTotalAuraList)
6220 {
6221 if (predicate(aurEff))
6222 {
6223 // Check if the Aura Effect has a the Same Effect Stack Rule and if so, use the highest amount of that SpellGroup
6224 // If the Aura Effect does not have this Stack Rule, it returns false so we can add to the multiplier as usual
6225 if (!sSpellMgr->AddSameEffectStackRuleSpellGroups(aurEff->GetSpellInfo(), static_cast<uint32>(auraType), aurEff->GetAmount(), sameEffectSpellGroup))
6226 modifier += aurEff->GetAmount();
6227 }
6228 }
6229
6230 // Add the highest of the Same Effect Stack Rule SpellGroups to the accumulator
6231 for (auto const& [_, amount] : sameEffectSpellGroup)
6232 modifier += amount;
6233
6234 return modifier;
6235}

References GetAuraEffectsByType(), and sSpellMgr.

◆ GetTotalAuraModifierByAffectMask()

int32 Unit::GetTotalAuraModifierByAffectMask ( AuraType  auratype,
SpellInfo const *  affectedSpell 
) const
6397{
6398 return GetTotalAuraModifier(auraType, [affectedSpell](AuraEffect const* aurEff) -> bool
6399 {
6400 if (aurEff->IsAffectedOnSpell(affectedSpell))
6401 return true;
6402 return false;
6403 });
6404}

References GetTotalAuraModifier(), and AuraEffect::IsAffectedOnSpell().

Referenced by Spell::SelectImplicitAreaTargets(), and Spell::SelectImplicitConeTargets().

◆ GetTotalAuraModifierByMiscMask()

◆ GetTotalAuraModifierByMiscValue()

int32 Unit::GetTotalAuraModifierByMiscValue ( AuraType  auratype,
int32  misc_value 
) const
6357{
6358 return GetTotalAuraModifier(auraType, [miscValue](AuraEffect const* aurEff) -> bool
6359 {
6360 if (aurEff->GetMiscValue() == miscValue)
6361 return true;
6362 return false;
6363 });
6364}

References AuraEffect::GetMiscValue(), and GetTotalAuraModifier().

Referenced by Player::CalculateReputationGain(), GetMechanicResistChance(), MeleeSpellHitResult(), ModSpellDuration(), Creature::Regenerate(), Player::Regenerate(), RollMeleeOutcomeAgainst(), Player::UpdateEnergyRegen(), and Player::UpdateManaRegen().

◆ GetTotalAuraModValue()

float Unit::GetTotalAuraModValue ( UnitMods  unitMod) const
12206{
12207 if (unitMod >= UNIT_MOD_END)
12208 {
12209 LOG_ERROR("entities.unit", "attempt to access non-existing UnitMods in GetTotalAuraModValue()!");
12210 return 0.0f;
12211 }
12212
12213 if (GetPctModifierValue(unitMod, TOTAL_PCT) <= 0.0f)
12214 return 0.0f;
12215
12216 float value = GetFlatModifierValue(unitMod, BASE_VALUE);
12217 value *= GetPctModifierValue(unitMod, BASE_PCT);
12218 value += GetFlatModifierValue(unitMod, TOTAL_VALUE);
12219 value *= GetPctModifierValue(unitMod, TOTAL_PCT);
12220 return value;
12221}
float GetPctModifierValue(UnitMods unitMod, UnitModifierPctType modifierType) const
Definition Unit.cpp:12035
float GetFlatModifierValue(UnitMods unitMod, UnitModifierFlatType modifierType) const
Definition Unit.cpp:12024

References BASE_PCT, BASE_VALUE, GetFlatModifierValue(), GetPctModifierValue(), LOG_ERROR, TOTAL_PCT, TOTAL_VALUE, and UNIT_MOD_END.

Referenced by Creature::UpdateArmor(), Creature::UpdateMaxHealth(), Creature::UpdateMaxPower(), and Creature::UpdateResistances().

◆ GetTotalAuraMultiplier() [1/2]

◆ GetTotalAuraMultiplier() [2/2]

float Unit::GetTotalAuraMultiplier ( AuraType  auraType,
std::function< bool(AuraEffect const *)> const &  predicate 
) const
6238{
6239 AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auraType);
6240 if (mTotalAuraList.empty())
6241 return 1.0f;
6242
6243 std::map<SpellGroup, int32> sameEffectSpellGroup;
6244 float multiplier = 1.0f;
6245
6246 for (AuraEffect const* aurEff : mTotalAuraList)
6247 {
6248 if (predicate(aurEff))
6249 {
6250 // Check if the Aura Effect has a the Same Effect Stack Rule and if so, use the highest amount of that SpellGroup
6251 // If the Aura Effect does not have this Stack Rule, it returns false so we can add to the multiplier as usual
6252 if (!sSpellMgr->AddSameEffectStackRuleSpellGroups(aurEff->GetSpellInfo(), static_cast<uint32>(auraType), aurEff->GetAmount(), sameEffectSpellGroup))
6253 AddPct(multiplier, aurEff->GetAmount());
6254 }
6255 }
6256
6257 // Add the highest of the Same Effect Stack Rule SpellGroups to the multiplier
6258 for (auto itr = sameEffectSpellGroup.begin(); itr != sameEffectSpellGroup.end(); ++itr)
6259 AddPct(multiplier, itr->second);
6260
6261 return multiplier;
6262}

References AddPct(), GetAuraEffectsByType(), and sSpellMgr.

◆ GetTotalAuraMultiplierByAffectMask()

float Unit::GetTotalAuraMultiplierByAffectMask ( AuraType  auratype,
SpellInfo const *  affectedSpell 
) const
6407{
6408 return GetTotalAuraMultiplier(auraType, [affectedSpell](AuraEffect const* aurEff) -> bool
6409 {
6410 if (aurEff->IsAffectedOnSpell(affectedSpell))
6411 return true;
6412 return false;
6413 });
6414}

References GetTotalAuraMultiplier(), and AuraEffect::IsAffectedOnSpell().

◆ GetTotalAuraMultiplierByMiscMask()

◆ GetTotalAuraMultiplierByMiscValue()

float Unit::GetTotalAuraMultiplierByMiscValue ( AuraType  auratype,
int32  misc_value 
) const
6367{
6368 return GetTotalAuraMultiplier(auraType, [miscValue](AuraEffect const* aurEff) -> bool
6369 {
6370 if (aurEff->GetMiscValue() == miscValue)
6371 return true;
6372 return false;
6373 });
6374}

References AuraEffect::GetMiscValue(), and GetTotalAuraMultiplier().

Referenced by AuraEffect::HandleAuraModIncreaseEnergyPercent(), Creature::Regenerate(), Player::Regenerate(), Player::UpdateEnergyRegen(), and Player::UpdateManaRegen().

◆ GetTotalStatValue()

float Unit::GetTotalStatValue ( Stats  stat,
float  additionalValue = 0.0f 
) const
12190{
12191 UnitMods unitMod = UnitMods(static_cast<uint16>(UNIT_MOD_STAT_START) + stat);
12192
12193 if (GetPctModifierValue(unitMod, TOTAL_PCT) <= 0.0f)
12194 return 0.0f;
12195
12196 // value = ((base_value * base_pct) + total_value) * total_pct
12197 float value = GetFlatModifierValue(unitMod, BASE_VALUE) + GetCreateStat(stat);
12198 value *= GetPctModifierValue(unitMod, BASE_PCT);
12199 value += GetFlatModifierValue(unitMod, TOTAL_VALUE) + additionalValue;
12200 value *= GetPctModifierValue(unitMod, TOTAL_PCT);
12201
12202 return value;
12203}
UnitMods
Definition Unit.h:148
@ UNIT_MOD_STAT_START
Definition Unit.h:176
float GetCreateStat(Stats stat) const
Definition Unit.h:1063

References BASE_PCT, BASE_VALUE, GetCreateStat(), GetFlatModifierValue(), GetPctModifierValue(), TOTAL_PCT, TOTAL_VALUE, and UNIT_MOD_STAT_START.

Referenced by Player::UpdateAllStats(), Guardian::UpdateStats(), and Player::UpdateStats().

◆ getTransForm()

◆ GetTransGUID()

◆ GetUnitBlockChance()

float Unit::GetUnitBlockChance ( ) const
3879{
3880 if (Player const* player = ToPlayer())
3881 {
3882 if (player->CanBlock())
3883 {
3884 Item* tmpitem = player->GetUseableItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND);
3885 if (tmpitem && !tmpitem->IsBroken() && tmpitem->GetTemplate()->Block)
3887 }
3888 // is player but has no block ability or no not broken shield equipped
3889 return 0.0f;
3890 }
3891 else
3892 {
3893 if (ToCreature()->IsTotem())
3894 return 0.0f;
3895 else
3896 {
3897 float block = 5.0f;
3899 return block > 0.0f ? block : 0.0f;
3900 }
3901 }
3902}
@ EQUIPMENT_SLOT_OFFHAND
Definition Player.h:677
#define INVENTORY_SLOT_BAG_0
Definition Player.h:656
@ SPELL_AURA_MOD_BLOCK_PERCENT
Definition SpellAuraDefines.h:114
@ PLAYER_BLOCK_PERCENTAGE
Definition UpdateFields.h:346
bool IsBroken() const
Definition Item.h:257
uint32 Block
Definition ItemTemplate.h:674

References ItemTemplate::Block, EQUIPMENT_SLOT_OFFHAND, Object::GetFloatValue(), Item::GetTemplate(), GetTotalAuraModifier(), INVENTORY_SLOT_BAG_0, Item::IsBroken(), IsTotem(), PLAYER_BLOCK_PERCENTAGE, SPELL_AURA_MOD_BLOCK_PERCENT, Object::ToCreature(), and Object::ToPlayer().

Referenced by isSpellBlocked(), MeleeSpellHitResult(), and RollMeleeOutcomeAgainst().

◆ GetUnitCriticalChance()

float Unit::GetUnitCriticalChance ( WeaponAttackType  attackType,
Unit const *  victim 
) const
3905{
3906 float crit;
3907
3908 if (IsPlayer())
3909 {
3910 switch (attackType)
3911 {
3912 case BASE_ATTACK:
3914 break;
3915 case OFF_ATTACK:
3917 break;
3918 case RANGED_ATTACK:
3920 break;
3921 // Just for good manner
3922 default:
3923 crit = 0.0f;
3924 break;
3925 }
3926 }
3927 else
3928 {
3929 crit = 5.0f;
3932 }
3933
3934 // flat aura mods
3935 if (attackType == RANGED_ATTACK)
3936 crit += victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_CHANCE);
3937 else
3938 crit += victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_CHANCE);
3939
3940 crit += victim->GetTotalAuraModifier(SPELL_AURA_MOD_CRIT_CHANCE_FOR_CASTER, [this](AuraEffect const* aurEff)
3941 {
3942 return GetGUID() == aurEff->GetCasterGUID();
3943 });
3944
3945 // reduce crit chance from Rating for players
3946 if (attackType != RANGED_ATTACK)
3947 Unit::ApplyResilience(victim, &crit, nullptr, false, CR_CRIT_TAKEN_MELEE);
3948 else
3949 Unit::ApplyResilience(victim, &crit, nullptr, false, CR_CRIT_TAKEN_RANGED);
3950
3951 // Apply crit chance from defence skill
3952 crit += (int32(GetMaxSkillValueForLevel(victim)) - int32(victim->GetDefenseSkillValue(this))) * 0.04f;
3953
3954 // xinef: SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE should be calculated at the end
3955 crit += victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE);
3956
3957 if (crit < 0.0f)
3958 crit = 0.0f;
3959 return crit;
3960}
@ SPELL_AURA_MOD_CRIT_CHANCE_FOR_CASTER
Definition SpellAuraDefines.h:371
@ SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_CHANCE
Definition SpellAuraDefines.h:251
@ SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE
Definition SpellAuraDefines.h:260
@ SPELL_AURA_MOD_CRIT_PCT
Definition SpellAuraDefines.h:353
@ SPELL_AURA_MOD_WEAPON_CRIT_PERCENT
Definition SpellAuraDefines.h:115
@ PLAYER_RANGED_CRIT_PERCENTAGE
Definition UpdateFields.h:352
@ PLAYER_CRIT_PERCENTAGE
Definition UpdateFields.h:351
@ PLAYER_OFFHAND_CRIT_PERCENTAGE
Definition UpdateFields.h:353
uint16 GetMaxSkillValueForLevel(Unit const *target=nullptr) const
Definition Unit.h:1204

References ApplyResilience(), BASE_ATTACK, CR_CRIT_TAKEN_MELEE, CR_CRIT_TAKEN_RANGED, AuraEffect::GetCasterGUID(), GetDefenseSkillValue(), Object::GetFloatValue(), Object::GetGUID(), GetMaxSkillValueForLevel(), GetTotalAuraModifier(), Object::IsPlayer(), OFF_ATTACK, PLAYER_CRIT_PERCENTAGE, PLAYER_OFFHAND_CRIT_PERCENTAGE, PLAYER_RANGED_CRIT_PERCENTAGE, RANGED_ATTACK, SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_CHANCE, SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_CHANCE, SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE, SPELL_AURA_MOD_CRIT_CHANCE_FOR_CASTER, SPELL_AURA_MOD_CRIT_PCT, and SPELL_AURA_MOD_WEAPON_CRIT_PERCENT.

Referenced by spell_dk_wandering_plague_aura::CheckProc(), and RollMeleeOutcomeAgainst().

◆ GetUnitDodgeChance()

float Unit::GetUnitDodgeChance ( ) const
3817{
3818 if (IsPlayer())
3819 return ToPlayer()->GetRealDodge(); //GetFloatValue(PLAYER_DODGE_PERCENTAGE);
3820 else
3821 {
3822 if (ToCreature()->IsTotem())
3823 return 0.0f;
3824 else
3825 {
3826 float dodge = ToCreature()->isWorldBoss() ? 5.85f : 5.0f; // Xinef: bosses should have 6.5% dodge (5.9 + 0.6 from defense skill difference)
3828 return dodge > 0.0f ? dodge : 0.0f;
3829 }
3830 }
3831}
@ SPELL_AURA_MOD_DODGE_PERCENT
Definition SpellAuraDefines.h:112
float GetRealDodge() const
Definition Player.h:2643

References Player::GetRealDodge(), GetTotalAuraModifier(), Object::IsPlayer(), IsTotem(), Creature::isWorldBoss(), SPELL_AURA_MOD_DODGE_PERCENT, Object::ToCreature(), and Object::ToPlayer().

Referenced by MeleeSpellHitResult(), and RollMeleeOutcomeAgainst().

◆ GetUnitFlags()

◆ GetUnitFlags2()

UnitFlags2 Unit::GetUnitFlags2 ( ) const
inline

Remove all UnitFlags and set new ones. UnitFlags available in UnitDefines.h.

UnitFlags2
Definition UnitDefines.h:294
@ UNIT_FIELD_FLAGS_2
Definition UpdateFields.h:118

References Object::GetUInt32Value(), and UNIT_FIELD_FLAGS_2.

Referenced by npc_commandscript::HandleNpcInfoCommandShowCreature().

◆ GetUnitMeleeSkill()

uint32 Unit::GetUnitMeleeSkill ( Unit const *  target = nullptr) const
inline
1190{ return (target ? getLevelForTarget(target) : GetLevel()) * 5; }

References GetLevel(), and getLevelForTarget().

Referenced by DealMeleeDamage(), GetDefenseSkillValue(), and GetWeaponSkillValue().

◆ GetUnitMissChance()

float Unit::GetUnitMissChance ( WeaponAttackType  attType) const
3864{
3865 float miss_chance = 5.00f;
3866
3867 if (Player const* player = ToPlayer())
3868 miss_chance += player->GetMissPercentageFromDefence();
3869
3870 if (attType == RANGED_ATTACK)
3872 else
3874
3875 return miss_chance;
3876}
@ SPELL_AURA_MOD_ATTACKER_MELEE_HIT_CHANCE
Definition SpellAuraDefines.h:247
@ SPELL_AURA_MOD_ATTACKER_RANGED_HIT_CHANCE
Definition SpellAuraDefines.h:248

References GetTotalAuraModifier(), RANGED_ATTACK, SPELL_AURA_MOD_ATTACKER_MELEE_HIT_CHANCE, SPELL_AURA_MOD_ATTACKER_RANGED_HIT_CHANCE, and Object::ToPlayer().

Referenced by MeleeSpellMissChance().

◆ GetUnitMovementFlags()

◆ GetUnitParryChance()

float Unit::GetUnitParryChance ( ) const
3834{
3835 float chance = 0.0f;
3836
3837 if (Player const* player = ToPlayer())
3838 {
3839 if (player->CanParry())
3840 {
3841 Item* tmpitem = player->GetWeaponForAttack(BASE_ATTACK, true);
3842 if (!tmpitem)
3843 tmpitem = player->GetWeaponForAttack(OFF_ATTACK, true);
3844
3845 if (tmpitem)
3846 chance = player->GetRealParry(); //GetFloatValue(PLAYER_PARRY_PERCENTAGE);
3847 }
3848 }
3849 else if (IsCreature())
3850 {
3851 if (ToCreature()->isWorldBoss())
3852 chance = 13.4f; // + 0.6 by skill diff
3854 chance = 5.0f;
3855
3856 // Xinef: if aura is present, type should not matter
3858 }
3859
3860 return chance > 0.0f ? chance : 0.0f;
3861}
@ SPELL_AURA_MOD_PARRY_PERCENT
Definition SpellAuraDefines.h:110

References BASE_ATTACK, CREATURE_TYPE_HUMANOID, GetCreatureType(), GetTotalAuraModifier(), Object::IsCreature(), OFF_ATTACK, SPELL_AURA_MOD_PARRY_PERCENT, Object::ToCreature(), and Object::ToPlayer().

Referenced by spell_dk_spell_deflection::Absorb(), MeleeSpellHitResult(), and RollMeleeOutcomeAgainst().

◆ GetUnitState()

uint32 Unit::GetUnitState ( ) const
inline

◆ GetUnitTypeMask()

uint32 Unit::GetUnitTypeMask ( ) const
inline
743{ return m_unitTypeMask; }

References m_unitTypeMask.

◆ GetVehicle()

Vehicle * Unit::GetVehicle ( ) const
inline
1927{ return m_vehicle; }

References m_vehicle.

Referenced by KillRewarder::_InitXP(), Vehicle::AddPassenger(), WorldSession::BuildPartyMemberStatsChangedPacket(), boss_the_lich_king::boss_the_lich_kingAI::CanAIAttack(), npc_shambling_horror_icc::npc_shambling_horror_iccAI::CanAIAttack(), npc_raging_spirit::npc_raging_spiritAI::CanAIAttack(), npc_icc_lk_checktarget::npc_icc_lk_checktargetAI::CanAIAttack(), boss_flame_leviathan_defense_turret::CanAIAttack(), instance_eye_of_eternity::CheckAchievementCriteriaMeet(), Spell::CheckCast(), Spell::EffectJumpDest(), Spell::EffectKnockBack(), CreatureAI::EnterEvadeMode(), GetDirectTransport(), SmartScript::GetTargets(), GetTransGUID(), WorldSession::HandleAttackSwingOpcode(), WorldSession::HandleChangeSeatsOnControlledVehicle(), spell_switch_infragreen_bomber_station::HandleDummy(), spell_fight_fire_bomber::HandleDummy(), WorldSession::HandleMoverRelocation(), WorldSession::HandlePlayerLoginToCharInWorld(), WorldSession::HandleRequestPartyMemberStatsOpcode(), ArenaSpectator::HandleSpectatorSpectateCommand(), Player::IsPetNeedBeTemporaryUnsummoned(), npc_nexus_lord::JustDied(), npc_scion_of_eternity::JustDied(), boss_flame_leviathan_defense_turret::JustDied(), npc_mageguard_dalaran::npc_mageguard_dalaranAI::MoveInLineOfSight(), npc_scion_of_eternity::npc_scion_of_eternity(), achievement_flame_leviathan_garage::OnCheck(), achievement_wg_didnt_stand_a_chance::OnCheck(), npc_announcer_toc5::OnGossipHello(), BattlefieldWG::OnPlayerLeaveWar(), boss_flame_leviathan_overload_device::OnSpellClick(), VehicleCheck::operator()(), OutDebugInfo(), boss_flame_leviathan_seat::PassengerBoarded(), Player::ProcessDelayedOperations(), Player::ProcessTerrainStatusUpdate(), Vehicle::RemovePassenger(), Creature::SelectVictim(), SetControlled(), Player::SetViewpoint(), lfg::LFGMgr::TeleportPlayer(), npc_pilgrims_bounty_chair::UpdateAI(), npc_snobold_vassal::npc_snobold_vassalAI::UpdateAI(), boss_gormok::boss_gormokAI::UpdateAI(), npc_impaling_spear::npc_impaling_spearAI::UpdateAI(), boss_flame_leviathan_seat::UpdateAI(), boss_flame_leviathan_safety_container::UpdateAI(), npc_gunship::npc_gunshipAI::UpdateAI(), npc_ulduar_mimiron_rocket::UpdateAI(), npc_brunnhildar_prisoner::npc_brunnhildar_prisonerAI::UpdateAI(), Player::UpdateAreaDependentAuras(), UpdatePosition(), UpdateSpeed(), GameObject::Use(), Acore::MessageDistDeliverer::Visit(), and Acore::MessageDistDelivererToHostile::Visit().

◆ GetVehicleBase()

◆ GetVehicleCreatureBase()

◆ GetVehicleKit()

Vehicle * Unit::GetVehicleKit ( ) const
inline
1926{ return m_vehicleKit; }

References m_vehicleKit.

Referenced by _EnterVehicle(), Creature::AddToWorld(), Creature::AIM_Initialize(), Creature::AtEngage(), boss_xt002::AttachHeart(), npc_salvaged_siege_engine::BeforeSpellClick(), boss_deathbringer_saurfang::boss_deathbringer_saurfangAI::boss_deathbringer_saurfangAI(), Object::BuildMovementUpdate(), spell_igb_cannon_blast::CalculatePower(), Aura::CanStackWith(), spell_demolisher_ride_vehicle::CheckCast(), SmartAI::CheckConditions(), VehicleAI::CheckConditions(), Map::CreatureRelocation(), MotionTransport::DelayedTeleportTransport(), Dismount(), npc_orb_carrier::npc_orb_carrierAI::DoAction(), npc_ulduar_vx001::DoAction(), npc_hover_disk::DoAction(), Spell::EffectTeleportUnits(), CreatureAI::EnterEvadeMode(), boss_ick::boss_ickAI::GetKrick(), npc_ulduar_leviathan_mkii::GetS3(), SmartScript::GetTargets(), AuraEffect::HandleAuraControlVehicle(), AuraEffect::HandleAuraSetVehicle(), WorldSession::HandleCastSpellOpcode(), spell_q13280_13283_plant_battle_standard::HandleDummy(), WorldSession::HandleEjectPassenger(), spell_auto_repair::HandleScript(), spell_q12919_gymers_throw::HandleScript(), HandleSpellClick(), IsOnVehicle(), go_wg_vehicle_teleporter::go_wg_vehicle_teleporterAI::IsValidVehicle(), boss_gormok::boss_gormokAI::JustEngagedWith(), Mount(), npc_hover_disk::MovementInform(), npc_enslaved_proto_drake::MovementInform(), npc_vehicle_d16_propelled_delivery::npc_vehicle_d16_propelled_deliveryAI::MovementInform(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::npc_high_overlord_saurfangAI(), npc_orb_carrier::npc_orb_carrierAI::npc_orb_carrierAI(), spell_systems_shutdown_aura::OnApply(), VehicleAI::OnCharmed(), spell_blood_queen_frenzied_bloodthirst_aura::OnRemove(), FlameLeviathanPursuedTargetSelector::operator()(), OutDebugInfo(), npc_wintergarde_gryphon::PassengerBoarded(), boss_flame_leviathan_seat::PassengerBoarded(), Map::PlayerRelocation(), SmartScript::ProcessAction(), Spell::SelectImplicitCasterObjectTargets(), spell_malygos_surge_of_power_warning_selector_25::SendThreeTargets(), SetCharmedBy(), SmartAI::SmartAI(), npc_wintergarde_gryphon::SpellHit(), npc_brunnhildar_prisoner::npc_brunnhildar_prisonerAI::SpellHit(), boss_flame_leviathan::SpellHitTarget(), npc_infra_green_bomber_generic::npc_infra_green_bomber_genericAI::SpreadFire(), boss_gormok::boss_gormokAI::UpdateAI(), npc_oculus_drake::npc_oculus_drakeAI::UpdateAI(), npc_ulduar_vx001::UpdateAI(), boss_xt002::UpdateAI(), npc_q24545_lich_king::npc_q24545_lich_kingAI::UpdateAI(), npc_infra_green_bomber_generic::npc_infra_green_bomber_genericAI::UpdateAI(), npc_freed_protodrake::npc_freed_protodrakeAI::UpdateAI(), npc_hyldsmeet_protodrake::UpdateAI(), npc_wg_siege_machine::npc_wg_siege_machineAI::UpdateAI(), UpdateHeight(), and UpdateOrientation().

◆ GetVictim()

Unit * Unit::GetVictim ( ) const
inline
903{ return m_attacking; }

References m_attacking.

Referenced by boss_marli::_chargePlayer(), PetAI::_needToStop(), npc_escortAI::AssistPlayerInCombatAgainst(), FollowerAI::AssistPlayerInCombatAgainst(), SmartAI::AssistPlayerInCombatAgainst(), Attack(), PetAI::AttackedBy(), npc_tapoke_slim_jahn::npc_tapoke_slim_jahnAI::AttackedBy(), boss_malygos::AttackStart(), npc_dark_nucleus::npc_dark_nucleusAI::AttackStart(), Object::BuildMovementUpdate(), Creature::CallAssistance(), TurretAI::CanAIAttack(), PetAI::CanAttack(), boss_attumen::CanMeleeHit(), boss_midnight::CanMeleeHit(), boss_swamplord_muselek::CanShootVictim(), Spell::CheckCast(), boss_mandokir::boss_mandokirAI::DamageDealt(), boss_isalien::DamageTaken(), boss_garfrost::boss_garfrostAI::DamageTaken(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::DamageTaken(), npc_crok_scourgebane::npc_crok_scourgebaneAI::DamageTaken(), npc_ulduar_arachnopod_destroyer::DamageTaken(), boss_ysondre::boss_ysondreAI::DamageTaken(), npc_dark_nucleus::npc_dark_nucleusAI::DamageTaken(), boss_thorim::DamageTaken(), boss_leotheras_the_blind::DemonTime(), SmartAI::DistanceYourself(), boss_sacrolash::DoAction(), boss_alythess::DoAction(), UnitAI::DoAddAuraToAllHostilePlayers(), UnitAI::DoCast(), UnitAI::DoCastToAllHostilePlayers(), UnitAI::DoCastVictim(), ConfusedMovementGenerator< T >::DoFinalize(), Creature::DoFleeToGetAssistance(), UnitAI::DoMeleeAttackIfReady(), boss_mandokir::boss_mandokirAI::DoMeleeAttackIfReady(), boss_ambassador_hellmaw::DoMeleeAttackIfReady(), UnitAI::DoSpellAttackIfReady(), ScriptedAI::DoStopAttack(), ChaseMovementGenerator< T >::DoUpdate(), Spell::EffectTaunt(), boss_ouro::Emerge(), boss_faction_championsAI::EnemiesInRange(), RestoreAttack::Execute(), StartMovementEvent::Execute(), boss_sartharion_tenebron::ExecuteEvent(), boss_sartharion_shadron::ExecuteEvent(), boss_sartharion_vesperon::ExecuteEvent(), emerald_dragonAI::ExecuteEvent(), spell_shazzrah_gate_dummy::FilterTargets(), spell_malchezaar_enfeeble::FilterTargets(), spell_chain_burn::FilterTargets(), spell_morogrim_tidewalker_watery_grave::FilterTargets(), TimedFleeingMovementGenerator::Finalize(), boss_supremus::FindHatefulStrikeTarget(), ThreatManager::GetAnyTarget(), getAttackerForHelper(), Player::GetInitialVisiblePackets(), CreatureGroup::GetNewTargetForMember(), SmartScript::GetTargets(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::GoToMinchar(), cast_commandscript::HandleCastTargetCommad(), debug_commandscript::HandleDebugThreatListCommand(), spell_aggro_drones::HandleDummy(), spell_gen_threshalisk_charge::HandleDummy(), spell_rog_prey_on_the_weak::HandleEffectPeriodic(), spell_lurker_below_spout::HandleEffectRemove(), spell_mirkblood_blood_mirror_target_picker::HandleHit(), AuraEffect::HandleModPossessPet(), AuraEffect::HandlePeriodicDummyAuraTick(), AuraEffect::HandlePeriodicTriggerSpellAuraTick(), WorldSession::HandlePetActionHelper(), spell_gen_overlords_brand::HandleProc(), spell_gen_overlords_brand_dot::HandleProc(), spell_kaelthas_nether_beam::HandleScriptEffect(), WorldSession::HandleSetRaidDifficultyOpcode(), ChaseMovementGenerator< T >::HasLostTarget(), Spell::InitExplicitTargets(), RotateMovementGenerator::Initialize(), boss_thaddius::boss_thaddiusAI::IsAnyPlayerInMeleeRange(), IsMutualChase(), boss_ouro::IsPlayerWithinMeleeRange(), boss_attumen::IsSummonedBy(), npc_pet_dk_ghoul::IsSummonedBy(), boss_ragnaros::IsVictimWithinMeleeRange(), npc_malchezaar_axe::JustEngagedWith(), boss_shade_of_aran::JustEngagedWith(), boss_akilzon::JustEngagedWith(), boss_zuljin::JustEngagedWith(), npc_zealot_zath::JustEngagedWith(), npc_nexus_lord::JustEngagedWith(), npc_overlord_drakuru_betrayal::JustEngagedWith(), npc_yor::JustEngagedWith(), boss_blackheart_the_inciter::JustEngagedWith(), npc_flame_of_azzinoth::JustEngagedWith(), boss_essence_of_anger::boss_essence_of_angerAI::JustEngagedWith(), boss_swamplord_muselek::JustEngagedWith(), boss_nethermancer_sepethrea::JustEngagedWith(), boss_kagani_nightstrike::JustEngagedWith(), boss_sacrolash::JustEngagedWith(), boss_alythess::JustEngagedWith(), boss_nalorakk::JustEngagedWith(), boss_vem::JustEngagedWith(), boss_veklor::JustEngagedWith(), boss_high_astromancer_solarian::JustEngagedWith(), boss_midnight::JustSummoned(), boss_nightbane::JustSummoned(), boss_halazzi::JustSummoned(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::JustSummoned(), boss_fathomlord_karathress::JustSummoned(), boss_fathomguard_tidalvess::JustSummoned(), boss_the_black_stalker::JustSummoned(), boss_nethermancer_sepethrea::JustSummoned(), npc_nelson::npc_nelsonAI::JustSummoned(), npc_emily::npc_emilyAI::JustSummoned(), PetAI::KilledUnit(), boss_ick::boss_ickAI::KilledUnit(), boss_flame_leviathan::KilledUnit(), spell_svalna_revive_champion::Land(), CreatureGroup::LeaderStartedMoving(), CreatureGroup::MemberEngagingTarget(), CreatureAI::MoveBackwardsChecks(), CreatureAI::MoveCircleChecks(), FollowerAI::MoveInLineOfSight(), npc_escortAI::MoveInLineOfSight(), SmartAI::MoveInLineOfSight(), npc_kerlonian::npc_kerlonianAI::MoveInLineOfSight(), npc_tooga::npc_toogaAI::MoveInLineOfSight(), npc_ringo::npc_ringoAI::MoveInLineOfSight(), boss_gluth::boss_gluthAI::MoveInLineOfSight(), npc_future_you::npc_future_youAI::MoveInLineOfSight(), npc_captain_saeed::npc_captain_saeedAI::MoveInLineOfSight(), npc_air_force_bots::npc_air_force_botsAI::MoveInLineOfSight(), boss_nightbane::MovementInform(), boss_bug_trio::MovementInform(), boss_garfrost::boss_garfrostAI::MovementInform(), boss_lady_vashj::MovementInform(), boss_nazan::MovementInform(), boss_felmyst::MovementInform(), boss_kaelthas::MovementInform(), boss_jedoga_shadowseeker::MovementInform(), boss_kagani_nightstrike::MovementInform(), boss_twin_valkyrAI::myDoMeleeAttackIfReady(), npc_pet_dk_ebon_gargoyle::MySelectNextTarget(), npc_pet_mage_mirror_image::MySelectNextTarget(), CreatureAI::OnOwnerCombatInteraction(), NecroticPlagueTargetCheck::operator()(), NonTankTargetSelector::operator()(), VampiricBiteTargetSelector::operator()(), BoneStormMoveTargetSelector::operator()(), LastPhaseIceTombTargetSelector::operator()(), NonTankLKTargetSelector::operator()(), WebTargetSelector::operator()(), UnboundPlagueTargetSelector::operator()(), PetAI::OwnerAttacked(), npc_pet_gen_valkyr_guardian::OwnerAttacked(), PetAI::OwnerAttackedBy(), boss_nefarian::PathEndReached(), SmartScript::ProcessEvent(), SmartScript::ProcessEventsFor(), SmartScript::ProcessTimedAction(), boss_priestess_lackey_commonAI::RecalculateThreat(), boss_faction_championsAI::RecalculateThreat(), boss_leotheras_the_blind::Reset(), boss_magtheridon::Reset(), Creature::ResumeChasingVictim(), boss_high_botanist_freywinn::ResumeEncounter(), Resurrect(), boss_kiljaeden::ScheduleBasicAbilities(), npc_sunblade_scout::ScheduleCombat(), npc_amanishi_scout::ScheduleCombat(), boss_taldaram::ScheduleCombatEvents(), boss_magtheridon::ScheduleCombatEvents(), npc_thaladred::ScheduleEvents(), boss_nightbane::ScheduleFly(), boss_the_lurker_below::SchedulerPhaseOne(), npc_giant_claw_tentacle::ScheduleTasks(), boss_dred::boss_dredAI::ScheduleTasks(), boss_faction_championsAI::SelectEnemyCaster(), SelectNearbyNoTotemTarget(), SelectNearbyTarget(), PetAI::SelectNextTarget(), npc_scholomance_occultist::npc_scholomance_occultistAI::SelectUnitCasting(), SmartAI::SetCombatMovement(), SetConfused(), SmartAI::SetCurrentRangeMode(), SetFeared(), SetStunned(), boss_murmur::ShouldCastResonance(), boss_razorscale::SpellHit(), boss_quartermaster_zigris::SpellHitTarget(), boss_volkhan::SpellHitTarget(), npc_frostwing_vrykul::npc_frostwing_vrykulAI::SpellHitTarget(), boss_darkmaster_gandling::boss_darkmaster_gandlingAI::SpellHitTarget(), npc_escortAI::Start(), FollowerAI::StartFollow(), StopAttackFaction(), NPCStaveQuestAI::StorePlayerGUID(), SummonCroneIfReady(), boss_akilzon::SummonEagles(), boss_drakkari_colossus::boss_drakkari_colossusAI::SummonedCreatureDespawn(), boss_dorothee::SummonTito(), npc_daphne_stilwell::npc_daphne_stilwellAI::Update(), Pet::Update(), Creature::Update(), Player::Update(), CasterAI::UpdateAI(), ArcherAI::UpdateAI(), SimpleCharmedAI::UpdateAI(), npc_escortAI::UpdateAI(), boss_general_angerforge::UpdateAI(), boss_gorosh_the_dervish::UpdateAI(), boss_grizzle::UpdateAI(), boss_hedrum::UpdateAI(), boss_okthor::UpdateAI(), boss_drakkisath::UpdateAI(), boss_quartermaster_zigris::UpdateAI(), npc_rookery_hatcher::UpdateAI(), boss_broodlord::UpdateAI(), boss_firemaw::UpdateAI(), boss_flamegor::UpdateAI(), boss_nefarian::UpdateAI(), boss_vaelastrasz::UpdateAI(), boss_ragnaros::UpdateAI(), boss_mr_smite::boss_mr_smiteAI::UpdateAI(), npc_a_special_surprise::npc_a_special_surpriseAI::UpdateAI(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::UpdateAI(), npc_scholomance_occultist::npc_scholomance_occultistAI::UpdateAI(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::UpdateAI(), npc_lady_sylvanas_windrunner::npc_lady_sylvanas_windrunnerAI::UpdateAI(), npc_varian_wrynn::npc_varian_wrynnAI::UpdateAI(), npc_jaina_proudmoore_bfu::npc_jaina_proudmoore_bfuAI::UpdateAI(), npc_thrall_bfu::npc_thrall_bfuAI::UpdateAI(), npc_lady_sylvanas_windrunner_bfu::npc_lady_sylvanas_windrunner_bfuAI::UpdateAI(), boss_arlokk::boss_arlokkAI::UpdateAI(), boss_hazzarah::UpdateAI(), boss_mandokir::boss_mandokirAI::UpdateAI(), boss_renataki::boss_renatakiAI::UpdateAI(), boss_headless_horseman::UpdateAI(), boss_epoch::boss_epochAI::UpdateAI(), boss_infinite_corruptor::boss_infinite_corruptorAI::UpdateAI(), boss_mal_ganis::boss_mal_ganisAI::UpdateAI(), boss_salramm::boss_salrammAI::UpdateAI(), npc_arthas::npc_arthasAI::UpdateAI(), boss_onyxia::UpdateAI(), boss_skeram::UpdateAI(), npc_muglash::npc_muglashAI::UpdateAI(), npc_murkdeep::npc_murkdeepAI::UpdateAI(), npc_aquementas::npc_aquementasAI::UpdateAI(), npc_plucky::npc_pluckyAI::UpdateAI(), npc_weegli_blastfuse::npc_weegli_blastfuseAI::UpdateAI(), npc_shadowpriest_sezziz::npc_shadowpriest_sezzizAI::UpdateAI(), npc_twilight_summon::UpdateAI(), boss_baltharus_the_warborn::boss_baltharus_the_warbornAI::UpdateAI(), npc_baltharus_the_warborn_clone::npc_baltharus_the_warborn_cloneAI::UpdateAI(), boss_general_zarithrian::boss_general_zarithrianAI::UpdateAI(), boss_halion::boss_halionAI::UpdateAI(), boss_twilight_halion::boss_twilight_halionAI::UpdateAI(), boss_saviana_ragefire::boss_saviana_ragefireAI::UpdateAI(), npc_argent_soldier::npc_argent_soldierAI::UpdateAI(), boss_black_knight::boss_black_knightAI::UpdateAI(), npc_black_knight_ghoul::npc_black_knight_ghoulAI::UpdateAI(), npc_toc5_grand_champion_minion::npc_toc5_grand_champion_minionAI::UpdateAI(), boss_grand_champion::boss_grand_championAI::UpdateAI(), boss_anubarak_trial::boss_anubarak_trialAI::UpdateAI(), npc_nerubian_burrower::npc_nerubian_burrowerAI::UpdateAI(), npc_toc_shaman::npc_toc_shamanAI::UpdateAI(), npc_toc_shadow_priest::npc_toc_shadow_priestAI::UpdateAI(), npc_toc_warlock::npc_toc_warlockAI::UpdateAI(), npc_toc_mage::npc_toc_mageAI::UpdateAI(), npc_toc_hunter::npc_toc_hunterAI::UpdateAI(), npc_toc_boomkin::npc_toc_boomkinAI::UpdateAI(), npc_toc_warrior::npc_toc_warriorAI::UpdateAI(), npc_toc_dk::npc_toc_dkAI::UpdateAI(), npc_toc_rogue::npc_toc_rogueAI::UpdateAI(), npc_toc_pet_warlock::npc_toc_pet_warlockAI::UpdateAI(), npc_toc_pet_hunter::npc_toc_pet_hunterAI::UpdateAI(), boss_jaraxxus::boss_jaraxxusAI::UpdateAI(), npc_mistress_of_pain::npc_mistress_of_painAI::UpdateAI(), boss_gormok::boss_gormokAI::UpdateAI(), boss_jormungarAI::UpdateAI(), boss_icehowl::boss_icehowlAI::UpdateAI(), boss_twin_valkyrAI::UpdateAI(), boss_tharon_ja::boss_tharon_jaAI::UpdateAI(), boss_trollgore::boss_trollgoreAI::UpdateAI(), boss_bronjahm::UpdateAI(), boss_marwyn::UpdateAI(), npc_hor_lumbering_abomination::UpdateAI(), boss_garfrost::boss_garfrostAI::UpdateAI(), boss_ick::boss_ickAI::UpdateAI(), boss_krick::boss_krickAI::UpdateAI(), boss_tyrannus::boss_tyrannusAI::UpdateAI(), npc_pos_deathwhisper_necrolyte::npc_pos_deathwhisper_necrolyteAI::UpdateAI(), boss_drakkari_colossus::boss_drakkari_colossusAI::UpdateAI(), npc_living_mojo::npc_living_mojoAI::UpdateAI(), boss_moorabi::boss_moorabiAI::UpdateAI(), boss_prince_taldaram_icc::boss_prince_taldaramAI::UpdateAI(), npc_dark_nucleus::npc_dark_nucleusAI::UpdateAI(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::UpdateAI(), boss_festergut::boss_festergutAI::UpdateAI(), npc_stinky_icc::npc_stinky_iccAI::UpdateAI(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::UpdateAI(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::UpdateAI(), npc_gunship_boarding_leader::npc_gunship_boarding_leaderAI::UpdateAI(), npc_gunship_boarding_add::npc_gunship_boarding_add_realAI::UpdateAI(), npc_gunship_gunner::npc_gunship_gunnerAI::UpdateAI(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::UpdateAI(), npc_cult_fanatic::npc_cult_fanaticAI::UpdateAI(), npc_cult_adherent::npc_cult_adherentAI::UpdateAI(), npc_vengeful_shade::npc_vengeful_shadeAI::UpdateAI(), npc_darnavan::npc_darnavanAI::UpdateAI(), boss_lord_marrowgar::UpdateAI(), boss_professor_putricide::boss_professor_putricideAI::UpdateAI(), npc_putricide_oozeAI::UpdateAI(), npc_little_ooze::npc_little_oozeAI::UpdateAI(), npc_big_ooze::npc_big_oozeAI::UpdateAI(), npc_precious_icc::npc_precious_iccAI::UpdateAI(), boss_sindragosa::boss_sindragosaAI::UpdateAI(), npc_spinestalker::npc_spinestalkerAI::UpdateAI(), npc_rimefang::npc_rimefangAI::UpdateAI(), npc_sindragosa_trash::npc_sindragosa_trashAI::UpdateAI(), boss_the_lich_king::boss_the_lich_kingAI::UpdateAI(), npc_shambling_horror_icc::npc_shambling_horror_iccAI::UpdateAI(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::UpdateAI(), npc_raging_spirit::npc_raging_spiritAI::UpdateAI(), npc_spirit_warden::npc_spirit_wardenAI::UpdateAI(), npc_blazing_skeleton::npc_blazing_skeletonAI::UpdateAI(), npc_frostwing_vrykul::npc_frostwing_vrykulAI::UpdateAI(), npc_icc_skybreaker_hierophant::npc_icc_skybreaker_hierophantAI::UpdateAI(), npc_icc_skybreaker_marksman::npc_icc_skybreaker_marksmanAI::UpdateAI(), npc_icc_skybreaker_vicar::npc_icc_skybreaker_vicarAI::UpdateAI(), npc_icc_skybreaker_luminary::npc_icc_skybreaker_luminaryAI::UpdateAI(), npc_icc_severed_essence::npc_icc_severed_essenceAI::UpdateAI(), npc_icc_vengeful_fleshreaper::npc_icc_vengeful_fleshreaperAI::UpdateAI(), npc_icc_nerubar_broodkeeper::npc_icc_nerubar_broodkeeperAI::UpdateAI(), boss_four_horsemen::boss_four_horsemenAI::UpdateAI(), boss_gluth::boss_gluthAI::UpdateAI(), boss_gothik::boss_gothikAI::UpdateAI(), npc_boss_gothik_minion::npc_boss_gothik_minionAI::UpdateAI(), boss_grobbulus::boss_grobbulusAI::UpdateAI(), boss_kelthuzad::boss_kelthuzadAI::UpdateAI(), boss_kelthuzad_minion::boss_kelthuzad_minionAI::UpdateAI(), boss_maexxna::boss_maexxnaAI::UpdateAI(), boss_patchwerk::boss_patchwerkAI::UpdateAI(), boss_sapphiron::boss_sapphironAI::UpdateAI(), boss_thaddius_summon::boss_thaddius_summonAI::UpdateAI(), boss_malygos::UpdateAI(), npc_nexus_lord::UpdateAI(), boss_anomalus::UpdateAI(), boss_keristrasza::UpdateAI(), boss_eregos::boss_eregosAI::UpdateAI(), boss_urom::boss_uromAI::UpdateAI(), npc_stormforged_lieutenant::UpdateAI(), boss_krystallus::boss_krystallusAI::UpdateAI(), boss_maiden_of_grief::boss_maiden_of_griefAI::UpdateAI(), boss_algalon_the_observer::UpdateAI(), boss_steelbreaker::UpdateAI(), boss_stormcaller_brundir::UpdateAI(), npc_auriaya_sanctum_sentry::UpdateAI(), boss_flame_leviathan::UpdateAI(), boss_freya_elder_ironbranch::UpdateAI(), boss_freya_summons::UpdateAI(), boss_vezax::UpdateAI(), npc_ulduar_hodir_priest::UpdateAI(), npc_ulduar_hodir_druid::UpdateAI(), npc_ulduar_hodir_shaman::UpdateAI(), npc_ulduar_hodir_mage::UpdateAI(), boss_ignis::UpdateAI(), boss_kologarn::UpdateAI(), npc_ulduar_leviathan_mkii::UpdateAI(), boss_razorscale::UpdateAI(), npc_ulduar_dark_rune_guardian::UpdateAI(), npc_ulduar_dark_rune_watcher::UpdateAI(), npc_ulduar_dark_rune_sentinel::UpdateAI(), boss_thorim::UpdateAI(), boss_thorim_start_npcs::UpdateAI(), boss_thorim_gauntlet_npcs::UpdateAI(), boss_thorim_runic_colossus::UpdateAI(), boss_thorim_ancient_rune_giant::UpdateAI(), boss_thorim_arena_npcs::UpdateAI(), npc_xt002_pummeller::UpdateAI(), npc_ulduar_storm_tempered_keeper::UpdateAI(), npc_ulduar_arachnopod_destroyer::UpdateAI(), boss_ingvar_the_plunderer::UpdateAI(), npc_vrykul_skeleton::UpdateAI(), boss_skarvald_the_constructor::UpdateAI(), boss_palehoof::boss_palehoofAI::UpdateAI(), npc_ferocious_rhino::npc_ferocious_rhinoAI::UpdateAI(), npc_ravenous_furbolg::npc_ravenous_furbolgAI::UpdateAI(), npc_frenzied_worgen::npc_frenzied_worgenAI::UpdateAI(), boss_svala::boss_svalaAI::UpdateAI(), boss_ymiron::boss_ymironAI::UpdateAI(), boss_archavon::boss_archavonAI::UpdateAI(), npc_azure_invader::UpdateAI(), npc_azure_raider::UpdateAI(), npc_azure_captain::UpdateAI(), npc_q24545_vegard::npc_q24545_vegardAI::UpdateAI(), npc_wounded_skirmisher::UpdateAI(), npc_boneguard_footman::npc_boneguard_footmanAI::UpdateAI(), boss_gathios_the_shatterer::UpdateAI(), boss_lady_malande::UpdateAI(), boss_lady_vashj::UpdateAI(), boss_the_lurker_below::UpdateAI(), boss_omor_the_unscarred::UpdateAI(), npc_millhouse_manastorm::npc_millhouse_manastormAI::UpdateAI(), npc_nether_drake::npc_nether_drakeAI::UpdateAI(), npc_dragonmaw_peon::npc_dragonmaw_peonAI::UpdateAI(), npc_pet_dk_ebon_gargoyle::UpdateAI(), npc_pet_gen_valkyr_guardian::UpdateAI(), npc_pet_hunter_snake_trap::UpdateAI(), npc_pet_mage_mirror_image::UpdateAI(), npc_pet_shaman_fire_elemental::UpdateAI(), guard_shattrath_scryer::guard_shattrath_scryerAI::UpdateAI(), guard_shattrath_aldor::guard_shattrath_aldorAI::UpdateAI(), npc_artorius::npc_artoriusAI::UpdateAI(), npc_simone::npc_simoneAI::UpdateAI(), npc_nelson::npc_nelsonAI::UpdateAI(), npc_franklin::npc_franklinAI::UpdateAI(), PossessedAI::UpdateAI(), PetAI::UpdateAI(), FollowerAI::UpdateAI(), npc_dark_fiend::UpdateAI(), npc_zuljin_vortex::UpdateAI(), npc_suppresser::npc_suppresserAI::UpdateAI(), npc_xt002_life_spark::UpdateAI(), boss_yoggsaron_crusher_tentacle::UpdateAI(), npc_pet_gen_gnomish_flame_turret::UpdateAI(), Player::UpdateCharmedAI(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UpdateEscortAI(), npc_isla_starmane::npc_isla_starmaneAI::UpdateEscortAI(), Player::UpdateFFAPvPFlag(), Player::UpdateFFAPvPState(), SmartAI::UpdatePath(), boss_netherspite::UpdatePortals(), CreatureAI::UpdateVictim(), CreatureAI::UpdateVictimWithGaze(), and boss_hexlord_malacrass::UseAbility().

◆ GetVirtualItemId()

uint32 Unit::GetVirtualItemId ( uint32  slot) const
17213{
17214 if (slot >= MAX_EQUIPMENT_ITEMS)
17215 return 0;
17216
17218}
#define MAX_EQUIPMENT_ITEMS
Definition CreatureData.h:36
@ UNIT_VIRTUAL_ITEM_SLOT_ID
Definition UpdateFields.h:116

References Object::GetUInt32Value(), MAX_EQUIPMENT_ITEMS, and UNIT_VIRTUAL_ITEM_SLOT_ID.

◆ GetVisibleAura()

AuraApplication * Unit::GetVisibleAura ( uint8  slot)
inline
1541 {
1542 VisibleAuraMap::iterator itr = m_visibleAuras.find(slot);
1543 if (itr != m_visibleAuras.end())
1544 return itr->second;
1545 return nullptr;
1546 }

References m_visibleAuras.

Referenced by WorldSession::BuildPartyMemberStatsChangedPacket(), AuraApplication::BuildUpdatePacket(), and WorldSession::HandleRequestPartyMemberStatsOpcode().

◆ GetVisibleAuras()

◆ GetWeaponDamageRange()

float Unit::GetWeaponDamageRange ( WeaponAttackType  attType,
WeaponDamageRange  type,
uint8  damageIndex = 0 
) const
12331{
12332 if (attType == OFF_ATTACK && !HasOffhandWeaponForAttack())
12333 return 0.0f;
12334
12335 return m_weaponDamage[attType][type][damageIndex];
12336}

References HasOffhandWeaponForAttack(), m_weaponDamage, and OFF_ATTACK.

Referenced by Player::_ApplyWeaponDamage(), Creature::CalculateMinMaxDamage(), Player::CalculateMinMaxDamage(), and Guardian::UpdateDamagePhysical().

◆ GetWeaponProcChance()

float Unit::GetWeaponProcChance ( ) const
10496{
10497 // normalized proc chance for weapon attack speed
10498 // (odd formula...)
10500 return (GetAttackTime(BASE_ATTACK) * 1.8f / 1000.0f);
10502 return (GetAttackTime(OFF_ATTACK) * 1.6f / 1000.0f);
10503 return 0;
10504}

References BASE_ATTACK, GetAttackTime(), HasOffhandWeaponForAttack(), isAttackReady(), and OFF_ATTACK.

Referenced by Player::CastItemCombatSpell().

◆ GetWeaponSkillValue()

uint32 Unit::GetWeaponSkillValue ( WeaponAttackType  attType,
Unit const *  target = nullptr 
) const
3963{
3964 uint32 value = 0;
3965 if (Player const* player = ToPlayer())
3966 {
3967 Item* item = player->GetWeaponForAttack(attType, true);
3968
3969 // feral or unarmed skill only for base attack
3970 if (attType != BASE_ATTACK && !item)
3971 return 0;
3972
3973 if (IsInFeralForm())
3974 return GetMaxSkillValueForLevel(); // always maximized SKILL_FERAL_COMBAT in fact
3975
3976 // weapon skill or (unarmed for base attack)
3977 uint32 skill = SKILL_UNARMED;
3978 if (item)
3979 skill = item->GetSkill();
3980
3981 // in PvP use full skill instead current skill value
3982 value = (target && target->IsControlledByPlayer())
3983 ? player->GetMaxSkillValue(skill)
3984 : player->GetSkillValue(skill);
3985 // Modify value from ratings
3986 value += uint32(player->GetRatingBonusValue(CR_WEAPON_SKILL));
3987 switch (attType)
3988 {
3989 case BASE_ATTACK:
3990 value += uint32(player->GetRatingBonusValue(CR_WEAPON_SKILL_MAINHAND));
3991 break;
3992 case OFF_ATTACK:
3993 value += uint32(player->GetRatingBonusValue(CR_WEAPON_SKILL_OFFHAND));
3994 break;
3995 case RANGED_ATTACK:
3996 value += uint32(player->GetRatingBonusValue(CR_WEAPON_SKILL_RANGED));
3997 break;
3998 default:
3999 break;
4000 }
4001 }
4002 else
4003 value = GetUnitMeleeSkill(target);
4004 return value;
4005}
@ SKILL_UNARMED
Definition SharedDefines.h:3140
@ CR_WEAPON_SKILL_RANGED
Definition Unit.h:245
@ CR_WEAPON_SKILL
Definition Unit.h:223
@ CR_WEAPON_SKILL_OFFHAND
Definition Unit.h:244
@ CR_WEAPON_SKILL_MAINHAND
Definition Unit.h:243
uint32 GetSkill()
Definition Item.cpp:555
bool IsInFeralForm() const
Definition Unit.h:1961

References BASE_ATTACK, CR_WEAPON_SKILL, CR_WEAPON_SKILL_MAINHAND, CR_WEAPON_SKILL_OFFHAND, CR_WEAPON_SKILL_RANGED, GetMaxSkillValueForLevel(), Item::GetSkill(), GetUnitMeleeSkill(), IsControlledByPlayer(), IsInFeralForm(), OFF_ATTACK, RANGED_ATTACK, SKILL_UNARMED, and Object::ToPlayer().

Referenced by isSpellBlocked(), MeleeSpellHitResult(), RollMeleeOutcomeAgainst(), RollMeleeOutcomeAgainst(), and Player::UpdateCritPercentage().

◆ HandleAuraRaidProcFromCharge()

bool Unit::HandleAuraRaidProcFromCharge ( AuraEffect triggeredByAura)
private
13929{
13930 // aura can be deleted at casts
13931 SpellInfo const* spellProto = triggeredByAura->GetSpellInfo();
13932
13933 uint32 damageSpellId;
13934 switch (spellProto->Id)
13935 {
13936 case 57949: // shiver
13937 damageSpellId = 57952;
13938 //animationSpellId = 57951; dummy effects for jump spell have unknown use (see also 41637)
13939 break;
13940 case 59978: // shiver
13941 damageSpellId = 59979;
13942 break;
13943 case 43593: // Cold Stare
13944 damageSpellId = 43594;
13945 break;
13946 default:
13947 LOG_ERROR("entities.unit", "Unit::HandleAuraRaidProcFromCharge, received unhandled spell: {}", spellProto->Id);
13948 return false;
13949 }
13950
13951 ObjectGuid caster_guid = triggeredByAura->GetCasterGUID();
13952
13953 // jumps
13954 int32 jumps = triggeredByAura->GetBase()->GetCharges() - 1;
13955
13956 // current aura expire
13957 triggeredByAura->GetBase()->SetCharges(1); // will removed at next charges decrease
13958
13959 // next target selection
13960 if (jumps > 0)
13961 {
13962 if (Unit* caster = triggeredByAura->GetCaster())
13963 {
13964 float radius = triggeredByAura->GetSpellInfo()->Effects[triggeredByAura->GetEffIndex()].CalcRadius(caster);
13965 if (Unit* target = GetNextRandomRaidMemberOrPet(radius))
13966 {
13967 CastSpell(target, spellProto, true, nullptr, triggeredByAura, caster_guid);
13968 if (Aura* aura = target->GetAura(spellProto->Id, caster->GetGUID()))
13969 aura->SetCharges(jumps);
13970 }
13971 }
13972 }
13973
13974 CastSpell(this, damageSpellId, true, nullptr, triggeredByAura, caster_guid);
13975
13976 return true;
13977}
void SetCharges(uint8 charges)
Definition SpellAuras.cpp:894
Unit * GetNextRandomRaidMemberOrPet(float radius)
Definition Unit.cpp:8237

References CastSpell(), SpellInfo::Effects, AuraEffect::GetBase(), AuraEffect::GetCaster(), AuraEffect::GetCasterGUID(), Aura::GetCharges(), AuraEffect::GetEffIndex(), GetNextRandomRaidMemberOrPet(), AuraEffect::GetSpellInfo(), SpellInfo::Id, LOG_ERROR, and Aura::SetCharges().

◆ HandleAuraRaidProcFromChargeWithValue()

bool Unit::HandleAuraRaidProcFromChargeWithValue ( AuraEffect triggeredByAura)
private
13840{
13841 // aura can be deleted at casts
13842 SpellInfo const* spellProto = triggeredByAura->GetSpellInfo();
13843 int32 heal = triggeredByAura->GetAmount();
13844 ObjectGuid caster_guid = triggeredByAura->GetCasterGUID();
13845
13846 // Currently only Prayer of Mending
13847 if (!(spellProto->SpellFamilyName == SPELLFAMILY_PRIEST && spellProto->SpellFamilyFlags[1] & 0x20))
13848 {
13849 LOG_DEBUG("spells.aura", "Unit::HandleAuraRaidProcFromChargeWithValue, received not handled spell: {}", spellProto->Id);
13850 return false;
13851 }
13852
13853 // jumps
13854 int32 jumps = triggeredByAura->GetBase()->GetCharges() - 1;
13855
13856 // current aura expire
13857 triggeredByAura->GetBase()->SetCharges(1); // will removed at next charges decrease
13858
13859 // next target selection
13860 if (jumps > 0)
13861 {
13862 if (Unit* caster = triggeredByAura->GetCaster())
13863 {
13864 // smart healing
13865 float radius = triggeredByAura->GetSpellInfo()->Effects[triggeredByAura->GetEffIndex()].CalcRadius(caster);
13866 std::list<Unit*> nearMembers;
13867
13868 Player* player = nullptr;
13869 if (IsPlayer())
13870 player = ToPlayer();
13871 else if (GetOwner())
13872 player = GetOwner()->ToPlayer();
13873
13874 if (player)
13875 {
13876 Group* group = player->GetGroup();
13877 if (!group)
13878 {
13879 if (player != this)
13880 {
13881 if (IsWithinDistInMap(player, radius))
13882 nearMembers.push_back(player);
13883 }
13884 else if (Unit* pet = GetGuardianPet())
13885 {
13886 if (IsWithinDistInMap(pet, radius))
13887 nearMembers.push_back(pet);
13888 }
13889 }
13890 else
13891 {
13892 for (GroupReference* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next())
13893 if (Player* Target = itr->GetSource())
13894 {
13895 if (Target != this && !IsWithinDistInMap(Target, radius))
13896 continue;
13897
13898 // IsHostileTo check duel and controlled by enemy
13899 if (Target != this && Target->IsAlive() && !IsHostileTo(Target))
13900 nearMembers.push_back(Target);
13901
13902 // Push player's pet to vector
13903 if (Unit* pet = Target->GetGuardianPet())
13904 if (pet != this && pet->IsAlive() && IsWithinDistInMap(pet, radius) && !IsHostileTo(pet))
13905 nearMembers.push_back(pet);
13906 }
13907 }
13908
13909 if (!nearMembers.empty())
13910 {
13911 nearMembers.sort(Acore::HealthPctOrderPred());
13912 if (Unit* target = nearMembers.front())
13913 {
13914 CastSpell(target, 41637 /*Dummy visual effect triggered by main spell cast*/, true);
13915 CastCustomSpell(target, spellProto->Id, &heal, nullptr, nullptr, true, nullptr, triggeredByAura, caster_guid);
13916 if (Aura* aura = target->GetAura(spellProto->Id, caster->GetGUID()))
13917 aura->SetCharges(jumps);
13918 }
13919 }
13920 }
13921 }
13922 }
13923
13924 // heal
13925 CastCustomSpell(this, 33110, &heal, nullptr, nullptr, true, nullptr, nullptr, caster_guid);
13926 return true;
13927}
@ SPELLFAMILY_PRIEST
Definition SharedDefines.h:3790
Definition Unit.h:2290

References CastCustomSpell(), CastSpell(), SpellInfo::Effects, AuraEffect::GetAmount(), AuraEffect::GetBase(), AuraEffect::GetCaster(), AuraEffect::GetCasterGUID(), Aura::GetCharges(), AuraEffect::GetEffIndex(), Group::GetFirstMember(), Player::GetGroup(), GetGuardianPet(), GetOwner(), AuraEffect::GetSpellInfo(), SpellInfo::Id, IsHostileTo(), Object::IsPlayer(), WorldObject::IsWithinDistInMap(), LOG_DEBUG, Aura::SetCharges(), SPELLFAMILY_PRIEST, SpellInfo::SpellFamilyFlags, SpellInfo::SpellFamilyName, and Object::ToPlayer().

◆ HandleEmoteCommand()

void Unit::HandleEmoteCommand ( uint32  emoteId)
2198{
2200 packet.EmoteID = emoteId;
2201 packet.Guid = GetGUID();
2202 SendMessageToSet(packet.Write(), true);
2203}
Definition ChatPackets.h:29
WorldPacket const * Write() override
Definition ChatPackets.cpp:20
uint32 EmoteID
Definition ChatPackets.h:35
ObjectGuid Guid
Definition ChatPackets.h:36

References WorldPackets::Chat::Emote::EmoteID, Object::GetGUID(), WorldPackets::Chat::Emote::Guid, WorldObject::SendMessageToSet(), and WorldPackets::Chat::Emote::Write().

Referenced by npc_ulduar_vx001::DamageTaken(), boss_viscidus::DamageTaken(), DealMeleeDamage(), npc_dkc1_gothik::npc_dkc1_gothikAI::DoAction(), boss_twinemperorsAI::DoAction(), npc_thrall_warchief::npc_thrall_warchiefAI::DoAction(), boss_razuvious_minion::boss_razuvious_minionAI::DoAction(), boss_felblood_kaelthas::DoAction(), boss_kalecgos::DoAction(), boss_yoggsaron::DoAction(), boss_illidan_stormrage::DoAction(), npc_akama_illidan::DoAction(), npc_taskmaster_fizzule::npc_taskmaster_fizzuleAI::DoFriend(), StandUpEvent::Execute(), PartyTimeEmoteEvent::Execute(), npc_anachronos_the_ancient::npc_anachronos_the_ancientAI::HandleAnimation(), npc_torloth_the_magnificent::npc_torloth_the_magnificentAI::HandleAnimation(), boss_ragnaros::HandleEmerge(), WorldSession::HandleEmoteOpcode(), spell_chapter5_return_to_capital::HandleHit(), npc_commandscript::HandleNpcSayCommand(), npc_commandscript::HandleNpcYellCommand(), WorldSession::HandleTextEmoteOpcode(), npc_maiev_illidan::IsSummonedBy(), npc_akama_illidan::JustReachedHome(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::JustSummoned(), boss_the_lich_king::boss_the_lich_kingAI::JustSummoned(), npc_sentinel_leader::MovementInform(), npc_sentinel_infiltrator::MovementInform(), npc_fos_leader_second::npc_fos_leader_secondAI::MovementInform(), boss_illidan_stormrage::MovementInform(), npc_akama_illidan::MovementInform(), npc_mature_netherwing_drake::npc_mature_netherwing_drakeAI::MovementInform(), boss_felmyst::MovementInform(), npc_dragonmaw_peon::npc_dragonmaw_peonAI::MovementInform(), boss_nightbane::PathEndReached(), boss_nefarian::PathEndReached(), spell_gen_spectator_cheer_trigger::PrepareSpellScript(), npc_dancing_flames::npc_dancing_flamesAI::ReceiveEmote(), PetAI::ReceiveEmote(), npc_plucky::npc_pluckyAI::ReceiveEmote(), boss_ragnaros::Reset(), boss_thekal::Reset(), npc_zealot_lorkhan::Reset(), npc_zealot_zath::Reset(), boss_razuvious_minion::boss_razuvious_minionAI::ScheduleAttackDummy(), boss_felmyst::ScheduleGroundAbilities(), boss_razuvious::boss_razuviousAI::ScheduleInteractWithDeathKnight(), CreatureTextMgr::SendEmote(), boss_grand_warlock_nethekurse::SetData(), npc_harrison_jones::SpellHit(), npc_rabid_thistle_bear::npc_rabid_thistle_bearAI::SpellHit(), npc_wounded_skirmisher::SpellHit(), boss_felmyst::StartIntro(), boss_ahune::Submerge(), boss_nightbane::TriggerHealthTakeOff(), instance_stratholme::instance_stratholme_InstanceMapScript::Update(), boss_rend_blackhand::UpdateAI(), boss_vaelastrasz::UpdateAI(), npc_valkyr_battle_maiden::npc_valkyr_battle_maidenAI::UpdateAI(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::UpdateAI(), npc_madrigosa::UpdateAI(), npc_partygoer_pather::UpdateAI(), npc_partygoer::UpdateAI(), npc_sentinel_leader::UpdateAI(), npc_sentinel_infiltrator::UpdateAI(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::UpdateAI(), npc_lady_sylvanas_windrunner::npc_lady_sylvanas_windrunnerAI::UpdateAI(), npc_thrall_bfu::npc_thrall_bfuAI::UpdateAI(), npc_forest_frog::UpdateAI(), npc_winterfin_playmate::UpdateAI(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UpdateAI(), npc_shenthul::npc_shenthulAI::UpdateAI(), npc_twiggy_flathead::npc_twiggy_flatheadAI::UpdateAI(), boss_icehowl::boss_icehowlAI::UpdateAI(), npc_hor_leader::npc_hor_leaderAI::UpdateAI(), npc_tirion_fordring_tft::npc_tirion_fordringAI::UpdateAI(), npc_highlord_tirion_fordring_lh::npc_highlord_tirion_fordringAI::UpdateAI(), boss_sapphiron::boss_sapphironAI::UpdateAI(), boss_malygos::UpdateAI(), boss_mimiron::UpdateAI(), npc_valiance_keep_cannoneer::npc_valiance_keep_cannoneerAI::UpdateAI(), npc_minigob_manabonk::UpdateAI(), npc_dragonmaw_peon::npc_dragonmaw_peonAI::UpdateAI(), npc_artorius::npc_artoriusAI::UpdateAI(), npc_simone::npc_simoneAI::UpdateAI(), npc_nelson::npc_nelsonAI::UpdateAI(), npc_franklin::npc_franklinAI::UpdateAI(), npc_dancing_flames::npc_dancing_flamesAI::UpdateAI(), npc_maxx_a_million_escort::npc_maxx_a_million_escortAI::UpdateAI(), npc_rocknot::WaypointReached(), npc_daphne_stilwell::npc_daphne_stilwellAI::WaypointReached(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::WaypointReached(), npc_taretha::npc_tarethaAI::WaypointReached(), npc_general_andorov::WaypointReached(), npc_mootoo_the_younger::npc_mootoo_the_youngerAI::WaypointReached(), npc_engineer_helice::npc_engineer_heliceAI::WaypointReached(), npc_maxx_a_million_escort::npc_maxx_a_million_escortAI::WaypointReached(), and npc_isla_starmane::npc_isla_starmaneAI::WaypointReached().

◆ HandleProcExtraAttackFor()

void Unit::HandleProcExtraAttackFor ( Unit victim,
uint32  count 
)
2943{
2944 while (count)
2945 {
2946 --count;
2947 AttackerStateUpdate(victim, BASE_ATTACK, true);
2948 }
2949}
void AttackerStateUpdate(Unit *victim, WeaponAttackType attType=BASE_ATTACK, bool extra=false, bool ignoreCasting=false)
Definition Unit.cpp:2756

References AttackerStateUpdate(), and BASE_ATTACK.

Referenced by Update().

◆ HandleSafeUnitPointersOnDelete()

void Unit::HandleSafeUnitPointersOnDelete ( Unit thisUnit)
static
4537{
4538 if (thisUnit->SafeUnitPointerSet.empty())
4539 return;
4540 for (std::set<SafeUnitPointer*>::iterator itr = thisUnit->SafeUnitPointerSet.begin(); itr != thisUnit->SafeUnitPointerSet.end(); ++itr)
4541 (*itr)->UnitDeleted();
4542
4543 thisUnit->SafeUnitPointerSet.clear();
4544}

References SafeUnitPointerSet.

Referenced by ~Unit().

◆ HandleSpellClick()

bool Unit::HandleSpellClick ( Unit clicker,
int8  seatId = -1 
)

First check simple relations from clicker to clickee

Check database conditions

15538{
15539 Creature* creature = ToCreature();
15540 if (creature && creature->IsAIEnabled)
15541 {
15542 if (!creature->AI()->BeforeSpellClick(clicker))
15543 {
15544 return false;
15545 }
15546 }
15547
15548 bool result = false;
15549 uint32 spellClickEntry = GetVehicleKit() ? GetVehicleKit()->GetCreatureEntry() : GetEntry();
15550 SpellClickInfoMapBounds clickPair = sObjectMgr->GetSpellClickInfoMapBounds(spellClickEntry);
15551 for (SpellClickInfoContainer::const_iterator itr = clickPair.first; itr != clickPair.second; ++itr)
15552 {
15554 if (!itr->second.IsFitToRequirements(clicker, this))
15555 continue;
15556
15558 ConditionList conds = sConditionMgr->GetConditionsForSpellClickEvent(spellClickEntry, itr->second.spellId);
15559 ConditionSourceInfo info = ConditionSourceInfo(clicker, this);
15560 if (!sConditionMgr->IsObjectMeetToConditions(info, conds))
15561 continue;
15562
15563 Unit* caster = (itr->second.castFlags & NPC_CLICK_CAST_CASTER_CLICKER) ? clicker : this;
15564 Unit* target = (itr->second.castFlags & NPC_CLICK_CAST_TARGET_CLICKER) ? clicker : this;
15565 ObjectGuid origCasterGUID = (itr->second.castFlags & NPC_CLICK_CAST_ORIG_CASTER_OWNER) ? GetOwnerGUID() : clicker->GetGUID();
15566
15567 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itr->second.spellId);
15568
15569 // xinef: dont allow players to enter vehicles on arena
15570 if (spellInfo->HasAura(SPELL_AURA_CONTROL_VEHICLE) && caster->IsPlayer() && caster->FindMap() && caster->FindMap()->IsBattleArena())
15571 continue;
15572
15573 if (seatId > -1)
15574 {
15575 uint8 i = 0;
15576 bool valid = false;
15577 while (i < MAX_SPELL_EFFECTS)
15578 {
15579 if (spellInfo->Effects[i].ApplyAuraName == SPELL_AURA_CONTROL_VEHICLE)
15580 {
15581 valid = true;
15582 break;
15583 }
15584 ++i;
15585 }
15586
15587 if (!valid)
15588 {
15589 LOG_ERROR("sql.sql", "Spell {} specified in npc_spellclick_spells is not a valid vehicle enter aura!", itr->second.spellId);
15590 continue;
15591 }
15592
15593 if (IsInMap(caster))
15594 caster->CastCustomSpell(itr->second.spellId, SpellValueMod(SPELLVALUE_BASE_POINT0 + i), seatId + 1, target, GetVehicleKit() ? TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE : TRIGGERED_NONE, nullptr, nullptr, origCasterGUID);
15595 else // This can happen during Player::_LoadAuras
15596 {
15598 for (uint32 j = 0; j < MAX_SPELL_EFFECTS; ++j)
15599 bp0[j] = spellInfo->Effects[j].BasePoints;
15600
15601 bp0[i] = seatId;
15602 Aura::TryRefreshStackOrCreate(spellInfo, MAX_EFFECT_MASK, this, clicker, bp0, nullptr, origCasterGUID);
15603 }
15604 }
15605 else
15606 {
15607 if (IsInMap(caster))
15608 caster->CastSpell(target, spellInfo, GetVehicleKit() ? TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE : TRIGGERED_NONE, nullptr, nullptr, origCasterGUID);
15609 else
15610 Aura::TryRefreshStackOrCreate(spellInfo, MAX_EFFECT_MASK, this, clicker, nullptr, nullptr, origCasterGUID);
15611 }
15612
15613 result = true;
15614 }
15615
15616 if (creature && creature->IsAIEnabled)
15617 creature->AI()->OnSpellClick(clicker, result);
15618
15619 return result;
15620}
#define sConditionMgr
Definition ConditionMgr.h:295
std::list< Condition * > ConditionList
Definition ConditionMgr.h:239
std::pair< SpellClickInfoContainer::const_iterator, SpellClickInfoContainer::const_iterator > SpellClickInfoMapBounds
Definition ObjectMgr.h:409
@ NPC_CLICK_CAST_TARGET_CLICKER
Definition SharedDefines.h:679
@ NPC_CLICK_CAST_ORIG_CASTER_OWNER
Definition SharedDefines.h:680
@ NPC_CLICK_CAST_CASTER_CLICKER
Definition SharedDefines.h:678
SpellValueMod
Definition SpellDefines.h:112
virtual void OnSpellClick(Unit *, bool &)
Definition CreatureAI.h:243
virtual bool BeforeSpellClick(Unit *)
Definition CreatureAI.h:241
bool IsBattleArena() const
Definition Map.h:304
bool HasAura(AuraType aura) const
Definition SpellInfo.cpp:902
uint32 GetCreatureEntry() const
Definition Vehicle.h:39
Map * FindMap() const
Definition Object.h:626
Definition ConditionMgr.h:184

References Creature::AI(), CreatureAI::BeforeSpellClick(), CastCustomSpell(), CastSpell(), SpellInfo::Effects, WorldObject::FindMap(), Vehicle::GetCreatureEntry(), Object::GetEntry(), Object::GetGUID(), GetOwnerGUID(), GetVehicleKit(), SpellInfo::HasAura(), IsAIEnabled, Map::IsBattleArena(), WorldObject::IsInMap(), Object::IsPlayer(), LOG_ERROR, MAX_EFFECT_MASK, MAX_SPELL_EFFECTS, NPC_CLICK_CAST_CASTER_CLICKER, NPC_CLICK_CAST_ORIG_CASTER_OWNER, NPC_CLICK_CAST_TARGET_CLICKER, CreatureAI::OnSpellClick(), sConditionMgr, sObjectMgr, SPELL_AURA_CONTROL_VEHICLE, SPELLVALUE_BASE_POINT0, sSpellMgr, Object::ToCreature(), TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE, TRIGGERED_NONE, and Aura::TryRefreshStackOrCreate().

Referenced by boss_xt002::AttachHeart(), boss_kologarn::AttachLeftArm(), boss_kologarn::AttachRightArm(), WorldSession::HandleSpellClick(), Vehicle::InstallAccessory(), and npc_ulduar_vx001::UpdateAI().

◆ HandleStatFlatModifier()

bool Unit::HandleStatFlatModifier ( UnitMods  unitMod,
UnitModifierFlatType  modifierType,
float  amount,
bool  apply 
)
11957{
11958 if (unitMod >= UNIT_MOD_END || modifierType >= MODIFIER_TYPE_FLAT_END)
11959 {
11960 LOG_ERROR("entities.unit", "ERROR in HandleStatModifier(): non-existing UnitMods or wrong UnitModifierType!");
11961 return false;
11962 }
11963
11964 if (!amount)
11965 return false;
11966
11967 switch (modifierType)
11968 {
11969 case BASE_VALUE:
11970 case TOTAL_VALUE:
11971 m_auraFlatModifiersGroup[unitMod][modifierType] += apply ? amount : -amount;
11972 break;
11973 default:
11974 break;
11975 }
11976
11977 UpdateUnitMod(unitMod);
11978 return true;
11979}
void apply(T *val)
Definition ByteConverter.h:40

References BASE_VALUE, LOG_ERROR, m_auraFlatModifiersGroup, MODIFIER_TYPE_FLAT_END, TOTAL_VALUE, UNIT_MOD_END, and UpdateUnitMod().

Referenced by Player::_ApplyItemBonuses(), Player::ApplyEnchantment(), AuraEffect::HandleAuraModAttackPower(), AuraEffect::HandleAuraModIncreaseEnergy(), AuraEffect::HandleAuraModIncreaseHealth(), AuraEffect::HandleAuraModIncreaseMaxHealth(), AuraEffect::HandleAuraModRangedAttackPower(), AuraEffect::HandleAuraModResistance(), AuraEffect::HandleAuraModResistanceExclusive(), AuraEffect::HandleAuraModStat(), AuraEffect::HandleModBaseResistance(), and Player::UpdateDamageDoneMods().

◆ HasActivePowerType()

◆ HasAllAuras()

template<typename... Auras>
bool Unit::HasAllAuras ( Auras...  spellIds) const
inline

Checks if the unit has ALL specified auras.

Template Parameters
AurasCan be any type convertible to uint32.
Parameters
spellIdsList of spell id's to check for on the unit.
Returns
Returns true if the unit has ALL of the specified auras. Otherwise false.
1488 {
1489 std::vector<uint32> spellList = { static_cast<uint32>(spellIds)... };
1490 return HasAuras(SearchMethod::MatchAll, spellList);
1491 }
bool HasAuras(SearchMethod sm, std::vector< uint32 > &spellIds) const
Check if unit has ANY or ALL specified auras.
Definition Unit.cpp:5987

References HasAuras(), and MatchAll.

Referenced by achievement_staying_buffed_all_winter_10::OnCheck(), achievement_staying_buffed_all_winter_25::OnCheck(), npc_alchemist_adrianna::OnGossipHello(), and npc_nelson::npc_nelsonAI::SpellHit().

◆ HasAllowOnlyAbilityAura()

bool Unit::HasAllowOnlyAbilityAura ( ) const
inline
@ SPELL_AURA_ALLOW_ONLY_ABILITY
Definition SpellAuraDefines.h:326
bool HasAuraType(AuraType auraType) const
Definition Unit.cpp:6017

References HasAuraType(), and SPELL_AURA_ALLOW_ONLY_ABILITY.

Referenced by AuraEffect::HandleAuraAllowOnlyAbility().

◆ HasAnyAuras()

template<typename... Auras>
bool Unit::HasAnyAuras ( Auras...  spellIds) const
inline

◆ HasAOECharmAura()

bool Unit::HasAOECharmAura ( ) const
inline
@ SPELL_AURA_AOE_CHARM
Definition SpellAuraDefines.h:240

References HasAuraType(), and SPELL_AURA_AOE_CHARM.

◆ HasAttackerSpellCritChanceAura()

bool Unit::HasAttackerSpellCritChanceAura ( ) const
inline
@ SPELL_AURA_MOD_ATTACKER_SPELL_CRIT_CHANCE
Definition SpellAuraDefines.h:242

References HasAuraType(), and SPELL_AURA_MOD_ATTACKER_SPELL_CRIT_CHANCE.

Referenced by SpellTakenCritChance().

◆ HasAura()

bool Unit::HasAura ( uint32  spellId,
ObjectGuid  casterGUID = ObjectGuid::Empty,
ObjectGuid  itemCasterGUID = ObjectGuid::Empty,
uint8  reqEffMask = 0 
) const
6011{
6012 if (GetAuraApplication(spellId, casterGUID, itemCasterGUID, reqEffMask))
6013 return true;
6014 return false;
6015}

References GetAuraApplication().

Referenced by at_hol_hall_of_watchers::_OnTrigger(), boss_grand_champion::boss_grand_championAI::AddCreatureAddonAuras(), Pet::AddToWorld(), spell_warl_health_funnel::ApplyEffect(), Player::ApplyItemDependentAuras(), Player::ApplyItemObtainSpells(), boss_archavon::boss_archavonAI::AttackStart(), boss_emalon::boss_emalonAI::AttackStart(), boss_koralon::boss_koralonAI::AttackStart(), boss_toravon::boss_toravonAI::AttackStart(), boss_leotheras_the_blind::AttackStart(), npc_toc5_player_vehicle::npc_toc5_player_vehicleAI::BeforeSpellClick(), boss_hodir::CanAIAttack(), boss_hazzarah::CanAIAttack(), boss_renataki::boss_renatakiAI::CanAIAttack(), boss_chromaggus::CanAIAttack(), npc_parasitic_shadowfiend::CanAIAttack(), npc_wg_siege_machine::npc_wg_siege_machineAI::CanControlVehicle(), Player::CanJoinToBattleground(), Player::CanResummonPet(), Player::CanUseAmmo(), Player::CanUseBattlegroundObject(), Player::CastItemCombatSpell(), spell_pal_aura_mastery_immune::CheckAreaTarget(), spell_q12237_rescue_villager::CheckCast(), spell_hun_pet_heart_of_the_phoenix::CheckCast(), spell_pal_immunities::CheckCast(), Spell::CheckCast(), Spell::CheckCasterAuras(), Spell::CheckItems(), spell_rog_honor_among_thieves::CheckProc(), spell_dru_eclipse::CheckProc(), spell_hun_lock_and_load::CheckProc(), spell_mage_gen_extra_effects::CheckProc(), spell_pal_hand_of_sacrifice::CheckTarget(), SpellInfo::CheckTarget(), npc_jenny::DamageTaken(), npc_mc_core_hound::DamageTaken(), boss_sartharion::DamageTaken(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::DamageTaken(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::DamageTaken(), boss_thekal::DamageTaken(), boss_tenris_mirkblood::DamageTaken(), boss_anub_arak::DamageTaken(), boss_razorscale::DamageTaken(), boss_thorim::DamageTaken(), npc_kinetic_bomb::npc_kinetic_bombAI::DoAction(), boss_kalecgos::DoAction(), boss_illidan_stormrage::DoAction(), npc_midsummer_ribbon_pole_target::DoCleanupChecks(), Spell::DoCreateItem(), Spell::EffectDummy(), Spell::EffectHeal(), Spell::EffectInstaKill(), Spell::EffectSchoolDMG(), Spell::EffectScriptEffect(), Spell::EffectSummonPlayer(), Spell::EffectTriggerSpell(), Spell::EffectWeaponDmg(), NPCStaveQuestAI::EvadeOnFeignDeath(), IceTombSummonEvent::Execute(), PartyTimeEmoteEvent::Execute(), spell_class_call_polymorph::FilterTargets(), spell_dru_wild_growth::FilterTargets(), spell_pri_circle_of_healing::FilterTargets(), lfg::LFGMgr::FinishDungeon(), GetDispellableAuraList(), Player::GetResurrectionSpellId(), go_wind_stone::go_wind_stoneAI::GossipHello(), go_soulwell::go_soulwellAI::GossipHello(), go_orb_of_domination::GossipHello(), spell_braziers_hit::HandleAfterEffectApply(), spell_dk_scourge_strike::HandleAfterHit(), spell_dru_enrage::HandleApply(), BattlegroundDS::HandleAreaTrigger(), OutdoorPvPSI::HandleAreaTrigger(), AuraEffect::HandleAuraMounted(), Aura::HandleAuraSpecificMods(), WorldSession::HandleBattleFieldPortOpcode(), spell_thaddius_pos_neg_charge::HandleDamage(), spell_capacitus_polarity_charge::HandleDamage(), spell_mage_summon_water_elemental::HandleDummy(), spell_rog_preparation::HandleDummy(), spell_warr_charge::HandleDummy(), spell_q12851_going_bearback::HandleEffectApply(), spell_dk_improved_blood_presence::HandleEffectApply(), spell_dk_improved_frost_presence::HandleEffectApply(), spell_dk_improved_unholy_presence::HandleEffectApply(), spell_oculus_soar_aura::HandleEffectPeriodic(), spell_rog_prey_on_the_weak::HandleEffectPeriodic(), spell_dk_improved_blood_presence::HandleEffectRemove(), spell_dk_improved_frost_presence::HandleEffectRemove(), spell_dk_improved_unholy_presence::HandleEffectRemove(), Player::HandleFall(), gm_commandscript::HandleGMVisibleCommand(), spell_dk_presence::HandleImprovedBloodPresence(), spell_dk_presence::HandleImprovedFrostPresence(), spell_dk_presence::HandleImprovedUnholyPresence(), spell_sindragosa_frost_breath::HandleInfusion(), BattlefieldWG::HandleKill(), lookup_commandscript::HandleLookupSpellCommand(), lookup_commandscript::HandleLookupSpellIdCommand(), WorldSession::HandleMessagechatOpcode(), spell_oculus_soar_aura::HandleOnEffectApply(), spell_mark_of_frost_freeze::HandleOnHit(), OPvPCapturePointZM_Graveyard::HandleOpenGo(), spell_hadronox_summon_periodic_aura::HandlePeriodic(), spell_serpentshrine_cavern_coilfang_water::HandlePeriodic(), spell_garr_separation_anxiety_aura::HandlePeriodic(), spell_majordomo_separation_anxiety_aura::HandlePeriodic(), spell_dru_omen_of_clarity::HandleProc(), spell_dk_blood_caked_blade::HandleProc(), spell_dru_glyph_of_shred::HandleProc(), spell_pal_infusion_of_light::HandleProc(), spell_pal_light_s_beacon::HandleProc(), spell_mage_gen_extra_effects::HandleProc(), spell_warr_vigilance::HandleRemove(), spell_najentus_hurl_spine::HandleSchoolDamage(), spell_pal_lay_on_hands::HandleScript(), spell_hun_pet_heart_of_the_phoenix::HandleScript(), spell_q12641_death_comes_from_on_high_recall_eye::HandleScriptEffect(), spell_q12611_deathbolt::HandleScriptEffect(), spell_dru_glyph_of_starfire::HandleScriptEffect(), misc_commandscript::HandleUnFreezeCommand(), HasAuras(), boss_yoggsaron_sara::InformCloud(), boss_taldaram::InitializeAI(), npc_pet_hunter_snake_trap::InitializeAI(), Player::IsDeserter(), SpellArea::IsFitToRequirements(), boss_krik_thir::boss_krik_thirAI::IsInFrenzy(), npc_anzu_spirit::IsSummonedBy(), go_wg_vehicle_teleporter::go_wg_vehicle_teleporterAI::IsValidVehicle(), lfg::LFGMgr::JoinLfg(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::JustDied(), boss_professor_putricide::boss_professor_putricideAI::JustDied(), boss_sindragosa::boss_sindragosaAI::JustDied(), boss_hydross_the_unstable::JustDied(), boss_alar::JustDied(), npc_sunblade_scout::JustEngagedWith(), boss_zuljin::JustEngagedWith(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::JustEngagedWith(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::JustEngagedWith(), boss_bjarngrim::JustEngagedWith(), boss_freya_elder_stonebark::JustEngagedWith(), boss_freya_elder_brightleaf::JustEngagedWith(), boss_freya_elder_ironbranch::JustEngagedWith(), boss_nalorakk::JustEngagedWith(), npc_hivezara_stinger::JustEngagedWith(), boss_vem::JustEngagedWith(), npc_vekniss_stinger::JustEngagedWith(), boss_novos::JustEngagedWith(), boss_faerlina::boss_faerlinaAI::JustEngagedWith(), boss_gurtogg_bloodboil::JustEngagedWith(), boss_hydross_the_unstable::JustEngagedWith(), npc_akama_illidan::JustReachedHome(), boss_hydross_the_unstable::JustReachedHome(), Kill(), boss_hydross_the_unstable::KilledUnit(), boss_hadronox::KilledUnit(), Creature::LoadCreaturesAddon(), ModSpellCastTime(), npc_love_in_air_supply_sentry::MoveInLineOfSight(), npc_aged_dying_ancient_kodo::MoveInLineOfSight(), npc_custodian_of_time::npc_custodian_of_timeAI::MoveInLineOfSight(), boss_doomwalker::MoveInLineOfSight(), npc_daranelle::npc_daranelleAI::MoveInLineOfSight(), boss_lady_vashj::MovementInform(), boss_felmyst::MovementInform(), boss_kagani_nightstrike::MovementInform(), achievement_fa_la_la_la_ogrila::OnCheck(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnCreatureCreate(), npc_pet_gen_argent_pony_bridle::OnGossipHello(), npc_wg_demolisher_engineer::OnGossipHello(), npc_innkeeper::OnGossipHello(), npc_pet_gen_argent_pony_bridle::OnGossipSelect(), npc_innkeeper::OnGossipSelect(), spell_love_is_in_the_air_romantic_picnic::OnPeriodic(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnPlayerEnter(), MidsummerPlayerScript::OnPlayerUpdateZone(), spell_azjol_nerub_web_wrap_aura::OnRemove(), spell_icc_web_wrap_aura::OnRemove(), spell_gen_damage_reduction_aura::OnRemove(), spell_mage_missile_barrage_proc::OnRemove(), spell_mage_arcane_missiles::OnRemove(), at_karazhan_atiesh_aran::OnTrigger(), at_hor_battered_hilt_start::OnTrigger(), at_hor_battered_hilt_throw::OnTrigger(), AreaTrigger_at_nats_landing::OnTrigger(), at_bring_your_orphan_to::OnTrigger(), at_commander_dawnforge::OnTrigger(), Acore::FriendlyMissingBuffInRange::operator()(), NotInStomachSelector::operator()(), SindragosaIceTombCheck::operator()(), DefaultTargetSelector::operator()(), VampiricBiteTargetSelector::operator()(), LastPhaseIceTombTargetSelector::operator()(), NonTankLKTargetSelector::operator()(), WebTargetSelector::operator()(), ShadowOfDeathSelector::operator()(), Acore::UnitAuraCheck::operator()(), SpectralBlastCheck::operator()(), SmartScript::ProcessAction(), npc_lake_frog::npc_lake_frogAI::ReceiveEmote(), npc_dancing_flames::npc_dancing_flamesAI::ReceiveEmote(), Player::ReportedAfkBy(), npc_corrupted_totem::Reset(), boss_janalai::Reset(), npc_belnistrasz::npc_belnistraszAI::Reset(), boss_magus_telestra::Reset(), boss_illidan_stormrage::Reset(), boss_fathomlord_karathress::Reset(), Player::RewardHonor(), RewardRage(), npc_finklestein::npc_finklesteinAI::RightClickCauldron(), boss_jormungarAI::ScheduleEvents(), boss_supremus::SchedulePhase(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::SelectNewTarget(), Player::SendInitialPacketsAfterAddToMap(), Player::SendQuestUpdate(), npc_corrupted_totem::SetAura(), npc_ulduar_harpoonfirestate::SetData(), boss_anomalus::SetData(), npc_chesspiece::sGossipHello(), npc_aged_dying_ancient_kodo::sGossipHello(), npc_omen::npc_omenAI::SpellHit(), npc_nelson::npc_nelsonAI::SpellHit(), npc_necropolis::SpellHit(), npc_pool_of_tar::SpellHit(), boss_sister_svalna::boss_sister_svalnaAI::SpellHit(), boss_razorscale::SpellHit(), npc_tournament_training_dummy::npc_tournament_training_dummyAI::SpellHit(), npc_necrotic_shard::SpellHit(), boss_magus_telestra::SpellHit(), npc_mature_netherwing_drake::npc_mature_netherwing_drakeAI::SpellHit(), SpellPctDamageModsDone(), SpellTakenCritChance(), boss_moam::SummonedCreatureDies(), boss_apothecary_hummel::boss_apothecary_hummelAI::SummonedCreatureDies(), npc_blackhand_incarcerator::UpdateAI(), boss_vaelastrasz::UpdateAI(), npc_mc_core_hound::UpdateAI(), npc_cyclone::UpdateAI(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::UpdateAI(), npc_lady_sylvanas_windrunner::npc_lady_sylvanas_windrunnerAI::UpdateAI(), boss_hakkar::boss_hakkarAI::UpdateAI(), npc_onyxian_lair_guard::UpdateAI(), boss_moam::UpdateAI(), boss_ossirian::UpdateAI(), boss_elder_nadox::UpdateAI(), boss_grand_champion::boss_grand_championAI::UpdateAI(), boss_anubarak_trial::boss_anubarak_trialAI::UpdateAI(), npc_nerubian_burrower::npc_nerubian_burrowerAI::UpdateAI(), npc_anubarak_spike::npc_anubarak_spikeAI::UpdateAI(), npc_hor_lich_king::UpdateAI(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::UpdateAI(), npc_gunship_boarding_leader::npc_gunship_boarding_leaderAI::UpdateAI(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::UpdateAI(), boss_lord_marrowgar::UpdateAI(), npc_putricide_oozeAI::UpdateAI(), npc_ice_tomb::npc_ice_tombAI::UpdateAI(), npc_icc_vengeful_fleshreaper::npc_icc_vengeful_fleshreaperAI::UpdateAI(), boss_kelthuzad::boss_kelthuzadAI::UpdateAI(), boss_anomalus::UpdateAI(), boss_magus_telestra::UpdateAI(), boss_freya_elder_stonebark::UpdateAI(), boss_vezax::UpdateAI(), npc_ulduar_hodir_priest::UpdateAI(), npc_ulduar_hodir_druid::UpdateAI(), npc_ulduar_hodir_shaman::UpdateAI(), npc_ulduar_hodir_mage::UpdateAI(), npc_ulduar_aerial_command_unit::UpdateAI(), boss_thorim_start_npcs::UpdateAI(), boss_thorim_gauntlet_npcs::UpdateAI(), npc_ulduar_storm_tempered_keeper::UpdateAI(), boss_ichoron::UpdateAI(), npc_imprisoned_beryl_sorcerer::npc_imprisoned_beryl_sorcererAI::UpdateAI(), npc_lake_frog::npc_lake_frogAI::UpdateAI(), npc_tournament_training_dummy::npc_tournament_training_dummyAI::UpdateAI(), npc_artorius::npc_artoriusAI::UpdateAI(), npc_dark_fiend::UpdateAI(), Player::UpdateAreaDependentAuras(), boss_yoggsaron_cloud::UpdateEscortAI(), boss_netherspite::UpdatePortals(), Player::UpdateZoneDependentAuras(), and Spell::WriteAmmoToPacket().

◆ HasAuraEffect()

bool Unit::HasAuraEffect ( uint32  spellId,
uint8  effIndex,
ObjectGuid  caster = ObjectGuid::Empty 
) const
5958{
5959 AuraApplicationMapBounds range = m_appliedAuras.equal_range(spellId);
5960 for (AuraApplicationMap::const_iterator itr = range.first; itr != range.second; ++itr)
5961 {
5962 if (itr->second->HasEffect(effIndex)
5963 && (!caster || itr->second->GetBase()->GetCasterGUID() == caster))
5964 {
5965 return true;
5966 }
5967 }
5968 return false;
5969}

References m_appliedAuras.

Referenced by AuraEffect::HandleAuraModIncreaseFlightSpeed(), spell_q12683_take_sputum_sample::HandleDummy(), AchievementCriteriaData::Meets(), and boss_headless_horseman::UpdateAI().

◆ HasAuras()

bool Unit::HasAuras ( SearchMethod  sm,
std::vector< uint32 > &  spellIds 
) const

Check if unit has ANY or ALL specified auras.

Parameters
smThe search method to use
spellIdsList of spell id's to check for on the unit.
Returns
Returns true if the search method condition is met. Otherwise false.
5988{
5989 if (sm == SearchMethod::MatchAll)
5990 {
5991 for (auto const& spellId : spellIds)
5992 if (!HasAura(spellId))
5993 return false;
5994 return true;
5995 }
5996 else if (sm == SearchMethod::MatchAny)
5997 {
5998 for (auto const& spellId : spellIds)
5999 if (HasAura(spellId))
6000 return true;
6001 return false;
6002 }
6003 else
6004 {
6005 LOG_ERROR("entities.unit", "Unit::HasAuras using non-supported SearchMethod {}", sm);
6006 return false;
6007 }
6008}

References HasAura(), LOG_ERROR, MatchAll, and MatchAny.

Referenced by HasAllAuras(), and HasAnyAuras().

◆ HasAuraState()

bool Unit::HasAuraState ( AuraStateType  flag,
SpellInfo const *  spellProto = nullptr,
Unit const *  Caster = nullptr 
) const
7658{
7659 if (Caster)
7660 {
7661 if (spellProto)
7662 {
7663 AuraEffectList const& stateAuras = Caster->GetAuraEffectsByType(SPELL_AURA_ABILITY_IGNORE_AURASTATE);
7664 for (AuraEffectList::const_iterator j = stateAuras.begin(); j != stateAuras.end(); ++j)
7665 if ((*j)->IsAffectedOnSpell(spellProto))
7666 return true;
7667 }
7668 // Check per caster aura state
7669 // If aura with aurastate by caster not found return false
7670 if ((1 << (flag - 1)) & PER_CASTER_AURA_STATE_MASK)
7671 {
7672 AuraStateAurasMapBounds range = m_auraStateAuras.equal_range(flag);
7673 for (AuraStateAurasMap::const_iterator itr = range.first; itr != range.second; ++itr)
7674 if (itr->second->GetBase()->GetCasterGUID() == Caster->GetGUID())
7675 return true;
7676 return false;
7677 }
7678 }
7679
7680 return HasFlag(UNIT_FIELD_AURASTATE, 1 << (flag - 1));
7681}
@ SPELL_AURA_ABILITY_IGNORE_AURASTATE
Definition SpellAuraDefines.h:325
std::pair< AuraStateAurasMap::const_iterator, AuraStateAurasMap::const_iterator > AuraStateAurasMapBounds
Definition Unit.h:678

References GetAuraEffectsByType(), Object::GetGUID(), Object::HasFlag(), m_auraStateAuras, PER_CASTER_AURA_STATE_MASK, SPELL_AURA_ABILITY_IGNORE_AURASTATE, and UNIT_FIELD_AURASTATE.

Referenced by Player::_addSpell(), Pet::addSpell(), Spell::CheckCast(), spell_sha_earthliving_weapon::CheckProc(), spell_warl_decimation::CheckProc(), SpellInfo::CheckTarget(), ClearAllReactives(), Spell::EffectHeal(), Spell::EffectSchoolDMG(), Spell::EffectWeaponDmg(), spell_warr_sweeping_strikes::HandleProc(), isFrozen(), Player::LoadFromDB(), SpellPctDamageModsDone(), SpellTakenCritChance(), and UpdateReactives().

◆ HasAuraType()

bool Unit::HasAuraType ( AuraType  auraType) const
6018{
6019 return (!m_modAuras[auraType].empty());
6020}

References m_modAuras.

Referenced by Player::CanTameExoticPets(), AuraEffect::HandleArenaPreparation(), AuraEffect::HandleAuraAllowFlight(), AuraEffect::HandleAuraEmpathy(), AuraEffect::HandleAuraFeatherFall(), AuraEffect::HandleAuraHover(), AuraEffect::HandleAuraModDisarm(), AuraEffect::HandleAuraModStalked(), AuraEffect::HandleAuraTrackStealthed(), AuraEffect::HandleAuraUntrackable(), AuraEffect::HandleAuraWaterWalk(), AuraEffect::HandleComprehendLanguage(), AuraEffect::HandleForceMoveForward(), HasAllowOnlyAbilityAura(), HasAOECharmAura(), HasAttackerSpellCritChanceAura(), HasAuraTypeWithFamilyFlags(), HasCloneCasterAura(), HasConfuseAura(), HasControlVehicleAura(), HasDecreaseSpeedAura(), HasDetectAmoreAura(), HasDetectSpellsAura(), HasFearAura(), HasFeatherFallAura(), HasFlyAura(), HasGhostAura(), HasHealthRegenInCombatAura(), HasHoverAura(), HasIgnoreHitDirectionAura(), HasIgnoreTargetResistAura(), HasIncreaseMountedFlightSpeedAura(), HasIncreaseMountedSpeedAura(), HasInterruptRegenAura(), HasInvisibilityAura(), HasInvisibilityDetectAura(), HasMountedAura(), HasNoPVPCreditAura(), HasOpenStableAura(), HasPacifyAura(), HasPacifySilenceAura(), HasPeriodicDummyAura(), HasPreventDurabilityLossAura(), HasPreventResurectionAura(), HasPreventsFleeingAura(), HasReflectSpellsAura(), HasRegenDuringCombatAura(), HasRootAura(), HasShapeshiftAura(), HasSilenceAura(), HasSpellMagnetAura(), HasSpiritOfRedemptionAura(), HasStealthAura(), HasStealthDetectAura(), HasStunAura(), HasTauntAura(), HasTransformAura(), HasUnattackableAura(), HasWaterBreathingAura(), HasWaterWalkAura(), Player::IsFreeFlying(), Player::SendInitialPacketsAfterAddToMap(), and ThreatReference::ShouldBeSuppressed().

◆ HasAuraTypeWithAffectMask()

bool Unit::HasAuraTypeWithAffectMask ( AuraType  auratype,
SpellInfo const *  affectedSpell 
) const
6051{
6052 AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auratype);
6053 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
6054 if ((*i)->IsAffectedOnSpell(affectedSpell))
6055 return true;
6056 return false;
6057}

References GetAuraEffectsByType().

Referenced by AuraEffect::CalculatePeriodic(), Spell::DoSpellHitOnUnit(), Spell::handle_immediate(), Aura::RefreshDuration(), and Aura::RefreshTimersWithMods().

◆ HasAuraTypeWithCaster()

bool Unit::HasAuraTypeWithCaster ( AuraType  auratype,
ObjectGuid  caster 
) const
6023{
6024 AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auratype);
6025 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
6026 if (caster == (*i)->GetCasterGUID())
6027 return true;
6028 return false;
6029}

References GetAuraEffectsByType().

Referenced by BuildValuesUpdate(), IsAlwaysDetectableFor(), and PatchValuesUpdate().

◆ HasAuraTypeWithFamilyFlags()

bool Unit::HasAuraTypeWithFamilyFlags ( AuraType  auraType,
uint32  familyName,
uint32  familyFlags 
) const
898{
899 if (!HasAuraType(auraType))
900 return false;
901 AuraEffectList const& auras = GetAuraEffectsByType(auraType);
902 for (AuraEffectList::const_iterator itr = auras.begin(); itr != auras.end(); ++itr)
903 if (SpellInfo const* iterSpellProto = (*itr)->GetSpellInfo())
904 if (iterSpellProto->SpellFamilyName == familyName && iterSpellProto->SpellFamilyFlags[0] & familyFlags)
905 return true;
906 return false;
907}

References GetAuraEffectsByType(), and HasAuraType().

◆ HasAuraTypeWithMiscvalue()

bool Unit::HasAuraTypeWithMiscvalue ( AuraType  auratype,
int32  miscvalue 
) const
6042{
6043 AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auratype);
6044 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
6045 if (miscvalue == (*i)->GetMiscValue())
6046 return true;
6047 return false;
6048}

References GetAuraEffectsByType().

Referenced by Player::Regenerate(), Player::UpdateManaRegen(), and Player::UpdateStats().

◆ HasAuraTypeWithTriggerSpell()

bool Unit::HasAuraTypeWithTriggerSpell ( AuraType  auratype,
uint32  triggerSpell 
) const
6069{
6070 for (AuraEffect const* aura : GetAuraEffectsByType(auratype))
6071 {
6072 if (aura->GetSpellInfo()->Effects[aura->GetEffIndex()].TriggerSpell == triggerSpell)
6073 {
6074 return true;
6075 }
6076 }
6077
6078 return false;
6079}

References GetAuraEffectsByType().

Referenced by WorldSession::HandlePetActionHelper().

◆ HasAuraTypeWithValue()

bool Unit::HasAuraTypeWithValue ( AuraType  auratype,
int32  value 
) const
6060{
6061 AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auratype);
6062 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
6063 if (value == (*i)->GetAmount())
6064 return true;
6065 return false;
6066}

References GetAuraEffectsByType().

◆ HasAuraWithMechanic()

bool Unit::HasAuraWithMechanic ( uint64  mechanicMask) const
6105{
6106 for (AuraApplicationMap::const_iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end(); ++iter)
6107 {
6108 SpellInfo const* spellInfo = iter->second->GetBase()->GetSpellInfo();
6109 if (spellInfo->Mechanic && (mechanicMask & (1ULL << spellInfo->Mechanic)))
6110 return true;
6111
6112 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
6113 if (iter->second->HasEffect(i) && spellInfo->Effects[i].Effect && spellInfo->Effects[i].Mechanic)
6114 if (mechanicMask & (1ULL << spellInfo->Effects[i].Mechanic))
6115 return true;
6116 }
6117
6118 return false;
6119}

References SpellInfo::Effects, m_appliedAuras, MAX_SPELL_EFFECTS, and SpellInfo::Mechanic.

Referenced by EarthenPowerTargetSelector::operator()(), SpellPctDamageModsDone(), and SpellTakenCritChance().

◆ HasBreakableByDamageAuraType()

bool Unit::HasBreakableByDamageAuraType ( AuraType  type,
uint32  excludeAura = 0 
) const
975{
976 AuraEffectList const& auras = GetAuraEffectsByType(type);
977 for (AuraEffectList::const_iterator itr = auras.begin(); itr != auras.end(); ++itr)
978 if ((!excludeAura || excludeAura != (*itr)->GetSpellInfo()->Id) && //Avoid self interrupt of channeled Crowd Control spells like Seduction
979 ((*itr)->GetSpellInfo()->AuraInterruptFlags & AURA_INTERRUPT_FLAG_TAKE_DAMAGE))
980 return true;
981 return false;
982}

References AURA_INTERRUPT_FLAG_TAKE_DAMAGE, and GetAuraEffectsByType().

Referenced by HasBreakableByDamageCrowdControlAura(), and ThreatReference::ShouldBeSuppressed().

◆ HasBreakableByDamageCrowdControlAura()

bool Unit::HasBreakableByDamageCrowdControlAura ( Unit excludeCasterChannel = nullptr) const
985{
986 uint32 excludeAura = 0;
987 if (Spell* currentChanneledSpell = excludeCasterChannel ? excludeCasterChannel->GetCurrentSpell(CURRENT_CHANNELED_SPELL) : nullptr)
988 excludeAura = currentChanneledSpell->GetSpellInfo()->Id; //Avoid self interrupt of channeled Crowd Control spells like Seduction
989
995}
@ SPELL_AURA_MOD_FEAR
Definition SpellAuraDefines.h:70
@ SPELL_AURA_MOD_ROOT
Definition SpellAuraDefines.h:89
@ SPELL_AURA_TRANSFORM
Definition SpellAuraDefines.h:119
@ SPELL_AURA_MOD_CONFUSE
Definition SpellAuraDefines.h:68
@ SPELL_AURA_MOD_STUN
Definition SpellAuraDefines.h:75
bool HasBreakableByDamageAuraType(AuraType type, uint32 excludeAura=0) const
Definition Unit.cpp:974
Spell * GetCurrentSpell(CurrentSpellTypes spellType) const
Definition Unit.h:1576

References CURRENT_CHANNELED_SPELL, GetCurrentSpell(), HasBreakableByDamageAuraType(), SPELL_AURA_MOD_CONFUSE, SPELL_AURA_MOD_FEAR, SPELL_AURA_MOD_ROOT, SPELL_AURA_MOD_STUN, and SPELL_AURA_TRANSFORM.

Referenced by PetAI::CanAttack(), npc_pet_gen_valkyr_guardian::OwnerAttacked(), CasterAI::UpdateAI(), npc_pet_gen_valkyr_guardian::UpdateAI(), npc_pet_hunter_snake_trap::UpdateAI(), npc_pet_mage_mirror_image::UpdateAI(), and PetAI::UpdateAI().

◆ HasCloneCasterAura()

bool Unit::HasCloneCasterAura ( ) const
inline
@ SPELL_AURA_CLONE_CASTER
Definition SpellAuraDefines.h:310

References HasAuraType(), and SPELL_AURA_CLONE_CASTER.

Referenced by WorldSession::HandleMirrorImageDataRequest().

◆ HasConfuseAura()

bool Unit::HasConfuseAura ( ) const
inline

◆ HasControlVehicleAura()

bool Unit::HasControlVehicleAura ( ) const
inline

◆ HasDecreaseSpeedAura()

bool Unit::HasDecreaseSpeedAura ( ) const
inline
@ SPELL_AURA_MOD_DECREASE_SPEED
Definition SpellAuraDefines.h:96

References HasAuraType(), and SPELL_AURA_MOD_DECREASE_SPEED.

Referenced by Spell::EffectWeaponDmg().

◆ HasDetectAmoreAura()

bool Unit::HasDetectAmoreAura ( ) const
inline
@ SPELL_AURA_DETECT_AMORE
Definition SpellAuraDefines.h:233

References HasAuraType(), and SPELL_AURA_DETECT_AMORE.

Referenced by AuraEffect::HandleDetectAmore().

◆ HasDetectSpellsAura()

bool Unit::HasDetectSpellsAura ( ) const
inline
@ SPELL_AURA_DEFLECT_SPELLS
Definition SpellAuraDefines.h:350

References HasAuraType(), and SPELL_AURA_DEFLECT_SPELLS.

◆ HasExtraUnitMovementFlag()

uint16 Unit::HasExtraUnitMovementFlag ( uint16  f) const
inline

◆ HasFearAura()

◆ HasFeatherFallAura()

bool Unit::HasFeatherFallAura ( ) const
inline
@ SPELL_AURA_FEATHER_FALL
Definition SpellAuraDefines.h:168

References HasAuraType(), and SPELL_AURA_FEATHER_FALL.

Referenced by Player::HandleFall().

◆ HasFlyAura()

◆ HasGhostAura()

bool Unit::HasGhostAura ( ) const
inline

◆ HasHealthRegenInCombatAura()

bool Unit::HasHealthRegenInCombatAura ( ) const
inline
@ SPELL_AURA_MOD_HEALTH_REGEN_IN_COMBAT
Definition SpellAuraDefines.h:224

References HasAuraType(), and SPELL_AURA_MOD_HEALTH_REGEN_IN_COMBAT.

Referenced by Player::RegenerateAll().

◆ HasHoverAura()

bool Unit::HasHoverAura ( ) const
inline
1803{ return HasAuraType(SPELL_AURA_HOVER); };
@ SPELL_AURA_HOVER
Definition SpellAuraDefines.h:169

References HasAuraType(), and SPELL_AURA_HOVER.

Referenced by Player::HandleFall(), and Creature::UpdateMovementFlags().

◆ HasIgnoreHitDirectionAura()

bool Unit::HasIgnoreHitDirectionAura ( ) const
inline

◆ HasIgnoreTargetResistAura()

bool Unit::HasIgnoreTargetResistAura ( ) const
inline

◆ HasIncreaseMountedFlightSpeedAura()

◆ HasIncreaseMountedSpeedAura()

bool Unit::HasIncreaseMountedSpeedAura ( ) const
inline
@ SPELL_AURA_MOD_INCREASE_MOUNTED_SPEED
Definition SpellAuraDefines.h:95

References HasAuraType(), and SPELL_AURA_MOD_INCREASE_MOUNTED_SPEED.

◆ HasInterruptRegenAura()

bool Unit::HasInterruptRegenAura ( ) const
inline
@ SPELL_AURA_INTERRUPT_REGEN
Definition SpellAuraDefines.h:157

References HasAuraType(), and SPELL_AURA_INTERRUPT_REGEN.

Referenced by Player::Regenerate().

◆ HasInvisibilityAura()

bool Unit::HasInvisibilityAura ( ) const
inline

◆ HasInvisibilityDetectAura()

bool Unit::HasInvisibilityDetectAura ( ) const
inline
@ SPELL_AURA_MOD_INVISIBILITY_DETECT
Definition SpellAuraDefines.h:82

References HasAuraType(), and SPELL_AURA_MOD_INVISIBILITY_DETECT.

Referenced by AuraEffect::HandleModInvisibilityDetect().

◆ HasLeewayMovement()

bool Unit::HasLeewayMovement ( ) const
inline
1731 {
1733 && !IsWalking();
1734 }
@ MOVEMENTFLAG_STRAFE_LEFT
Definition UnitDefines.h:374
@ MOVEMENTFLAG_STRAFE_RIGHT
Definition UnitDefines.h:375
bool IsWalking() const
Definition Unit.h:1708
bool HasMovementFlag(uint32 flag) const
Definition Object.h:346

References MovementInfo::HasMovementFlag(), IsWalking(), WorldObject::m_movementInfo, MOVEMENTFLAG_FALLING, MOVEMENTFLAG_FORWARD, MOVEMENTFLAG_STRAFE_LEFT, and MOVEMENTFLAG_STRAFE_RIGHT.

Referenced by Spell::CheckRange(), and IsWithinMeleeRange().

◆ HasMainhandWeapon()

bool Unit::HasMainhandWeapon ( ) const
inline
983{ return HasWeapon(BASE_ATTACK); }
virtual bool HasWeapon(WeaponAttackType type) const =0

References BASE_ATTACK, and HasWeapon().

◆ hasMainhandWeaponForAttack()

bool Unit::hasMainhandWeaponForAttack ( ) const
inline
virtual bool HasWeaponForAttack(WeaponAttackType type) const
Definition Unit.h:988

References BASE_ATTACK, and HasWeaponForAttack().

◆ HasMainhandWeaponForAttack()

bool Unit::HasMainhandWeaponForAttack ( ) const
inline

◆ HasMountedAura()

◆ HasNegativeAuraWithAttribute()

bool Unit::HasNegativeAuraWithAttribute ( uint32  flag,
ObjectGuid  guid = ObjectGuid::Empty 
)
6094{
6095 for (AuraApplicationMap::const_iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end(); ++iter)
6096 {
6097 Aura const* aura = iter->second->GetBase();
6098 if (!iter->second->IsPositive() && aura->GetSpellInfo()->Attributes & flag && (!guid || aura->GetCasterGUID() == guid))
6099 return true;
6100 }
6101 return false;
6102}
uint32 Attributes
Definition SpellInfo.h:348

References SpellInfo::Attributes, Aura::GetCasterGUID(), Aura::GetSpellInfo(), and m_appliedAuras.

◆ HasNegativeAuraWithInterruptFlag()

bool Unit::HasNegativeAuraWithInterruptFlag ( uint32  flag,
ObjectGuid  guid = ObjectGuid::Empty 
)
6082{
6083 if (!(m_interruptMask & flag))
6084 return false;
6085 for (AuraApplicationList::iterator iter = m_interruptableAuras.begin(); iter != m_interruptableAuras.end(); ++iter)
6086 {
6087 if (!(*iter)->IsPositive() && (*iter)->GetBase()->GetSpellInfo()->AuraInterruptFlags & flag && (!guid || (*iter)->GetBase()->GetCasterGUID() == guid))
6088 return true;
6089 }
6090 return false;
6091}

References m_interruptableAuras, and m_interruptMask.

◆ HasNoPVPCreditAura()

bool Unit::HasNoPVPCreditAura ( ) const
inline
@ SPELL_AURA_NO_PVP_CREDIT
Definition SpellAuraDefines.h:222

References HasAuraType(), and SPELL_AURA_NO_PVP_CREDIT.

Referenced by Player::RewardHonor().

◆ HasNpcFlag()

bool Unit::HasNpcFlag ( NPCFlags  flags) const
inline

◆ HasOffhandWeapon()

bool Unit::HasOffhandWeapon ( ) const
inline
984{ return HasWeapon(OFF_ATTACK); }

References HasWeapon(), and OFF_ATTACK.

◆ HasOffhandWeaponForAttack()

◆ HasOpenStableAura()

bool Unit::HasOpenStableAura ( ) const
inline
@ SPELL_AURA_OPEN_STABLE
Definition SpellAuraDefines.h:355

References HasAuraType(), and SPELL_AURA_OPEN_STABLE.

◆ HasPacifyAura()

bool Unit::HasPacifyAura ( ) const
inline
@ SPELL_AURA_MOD_PACIFY
Definition SpellAuraDefines.h:88

References HasAuraType(), and SPELL_AURA_MOD_PACIFY.

Referenced by AuraEffect::HandleAuraModPacify(), and WorldSession::HandlePetActionHelper().

◆ HasPacifySilenceAura()

bool Unit::HasPacifySilenceAura ( ) const
inline

◆ HasPeriodicDummyAura()

bool Unit::HasPeriodicDummyAura ( ) const
inline
@ SPELL_AURA_PERIODIC_DUMMY
Definition SpellAuraDefines.h:289

References HasAuraType(), and SPELL_AURA_PERIODIC_DUMMY.

◆ HasPreventDurabilityLossAura()

bool Unit::HasPreventDurabilityLossAura ( ) const
inline
@ SPELL_AURA_PREVENT_DURABILITY_LOSS
Definition SpellAuraDefines.h:352

References HasAuraType(), and SPELL_AURA_PREVENT_DURABILITY_LOSS.

Referenced by Player::DurabilityPointsLoss().

◆ HasPreventResurectionAura()

bool Unit::HasPreventResurectionAura ( ) const
inline

◆ HasPreventsFleeingAura()

bool Unit::HasPreventsFleeingAura ( ) const
inline
@ SPELL_AURA_PREVENTS_FLEEING
Definition SpellAuraDefines.h:155

References HasAuraType(), and SPELL_AURA_PREVENTS_FLEEING.

Referenced by Creature::DoFleeToGetAssistance().

◆ HasRangedWeapon()

bool Unit::HasRangedWeapon ( ) const
inline
985{ return HasWeapon(RANGED_ATTACK); }

References HasWeapon(), and RANGED_ATTACK.

◆ HasRangedWeaponForAttack()

bool Unit::HasRangedWeaponForAttack ( ) const
inline

◆ HasReflectSpellsAura()

bool Unit::HasReflectSpellsAura ( ) const
inline
@ SPELL_AURA_REFLECT_SPELLS
Definition SpellAuraDefines.h:91

References HasAuraType(), and SPELL_AURA_REFLECT_SPELLS.

Referenced by Spell::DoSpellHitOnUnit().

◆ HasRegenDuringCombatAura()

bool Unit::HasRegenDuringCombatAura ( ) const
inline
@ SPELL_AURA_MOD_REGEN_DURING_COMBAT
Definition SpellAuraDefines.h:179

References HasAuraType(), and SPELL_AURA_MOD_REGEN_DURING_COMBAT.

Referenced by Player::RegenerateAll(), and Player::RegenerateHealth().

◆ HasRootAura()

bool Unit::HasRootAura ( ) const
inline

References HasAuraType(), and SPELL_AURA_MOD_ROOT.

Referenced by SetControlled().

◆ HasShapeshiftAura()

bool Unit::HasShapeshiftAura ( ) const
inline

◆ HasSharedVision()

◆ HasSilenceAura()

bool Unit::HasSilenceAura ( ) const
inline

◆ HasSpell()

◆ HasSpellCooldown()

virtual bool Unit::HasSpellCooldown ( uint32  ) const
inlinevirtual

◆ HasSpellItemCooldown()

virtual bool Unit::HasSpellItemCooldown ( uint32  ,
uint32   
) const
inlinevirtual

Reimplemented in Player.

1336{ return false; }

Referenced by Spell::CheckCast().

◆ HasSpellMagnetAura()

bool Unit::HasSpellMagnetAura ( ) const
inline

◆ HasSpiritOfRedemptionAura()

◆ HasStealthAura()

◆ HasStealthDetectAura()

bool Unit::HasStealthDetectAura ( ) const
inline
@ SPELL_AURA_MOD_STEALTH_DETECT
Definition SpellAuraDefines.h:80

References HasAuraType(), and SPELL_AURA_MOD_STEALTH_DETECT.

Referenced by AuraEffect::HandleModStealthDetect().

◆ HasStunAura()

bool Unit::HasStunAura ( ) const
inline

◆ HasTauntAura()

bool Unit::HasTauntAura ( ) const
inline
@ SPELL_AURA_MOD_TAUNT
Definition SpellAuraDefines.h:74

References HasAuraType(), and SPELL_AURA_MOD_TAUNT.

Referenced by Creature::CanCreatureAttack(), and PetAI::SelectNextTarget().

◆ HasTransformAura()

bool Unit::HasTransformAura ( ) const
inline

◆ HasUnattackableAura()

bool Unit::HasUnattackableAura ( ) const
inline

◆ HasUnitFlag()

bool Unit::HasUnitFlag ( UnitFlags  flags) const
inline
747{ return HasFlag(UNIT_FIELD_FLAGS, flags); }

References Object::HasFlag(), and UNIT_FIELD_FLAGS.

Referenced by _IsValidAssistTarget(), _IsValidAttackTarget(), Player::ActivateTaxiPathTo(), Vehicle::AddPassenger(), AttackerStateUpdate(), boss_malygos::AttackStart(), SmartAI::AttackStart(), npc_ghostly_priest::AttackStart(), npc_phantom_mage::AttackStart(), npc_shadowy_mercenary::AttackStart(), npc_spectral_footman::AttackStart(), npc_tortured_rifleman::AttackStart(), violet_hold_trashAI::AttackStart(), npc_q24545_wretched_ghoul::npc_q24545_wretched_ghoulAI::AttackStart(), npc_ravenous_worg::npc_ravenous_worgAI::AttackStart(), npc_swarm_scarab::npc_swarm_scarabAI::CanAIAttack(), npc_q24545_wretched_ghoul::npc_q24545_wretched_ghoulAI::CanAIAttack(), Creature::CanAssistTo(), PetAI::CanAttack(), Player::CanNoReagentCast(), CanSwim(), CanUseAttackType(), Spell::CheckEffectTarget(), boss_muru::DamageTaken(), boss_black_knight::boss_black_knightAI::DamageTaken(), npc_frost_sphere::npc_frost_sphereAI::DamageTaken(), boss_bronjahm::DamageTaken(), npc_terenas_menethil::npc_terenas_menethilAI::DamageTaken(), npc_power_spark::DamageTaken(), boss_hodir::DamageTaken(), npc_ulduar_leviathan_mkii::DamageTaken(), npc_ulduar_vx001::DamageTaken(), npc_ulduar_aerial_command_unit::DamageTaken(), npc_overlord_drakuru_betrayal::DamageTaken(), boss_essence_of_suffering::boss_essence_of_sufferingAI::DamageTaken(), boss_essence_of_desire::boss_essence_of_desireAI::DamageTaken(), npc_terenas_menethil::npc_terenas_menethilAI::DoAction(), instance_karazhan::instance_karazhan_InstanceMapScript::DoAction(), boss_jormungarAI::DoAction(), Spell::DoSpellHitOnUnit(), RandomMovementGenerator< T >::DoUpdate(), boss_dorothee::EnterEvadeMode(), boss_roar::EnterEvadeMode(), boss_strawman::EnterEvadeMode(), boss_tinhead::EnterEvadeMode(), boss_julianne::EnterEvadeMode(), SmartAI::EnterEvadeMode(), ThreatReference::FlagsAllowFighting(), GetReactionTo(), GetVelocity(), spell_gen_model_visible::HandleEffectApply(), boss_sartharion_dragonAI::HandleExtraEvent(), spell_gen_mounted_charge::HandleScriptEffect(), CombatManager::InheritCombatStatesFrom(), IsImmuneToNPC(), IsImmuneToPC(), IsInCombat(), IsMounted(), IsPetInCombat(), isTargetableForAttack(), violet_hold_trashAI::JustEngagedWith(), boss_hodir::JustExitedCombat(), boss_novos::JustSummoned(), CreatureGroup::LeaderStartedMoving(), Condition::Meets(), MotionMaster::MoveCharge(), MotionMaster::MoveChase(), MotionMaster::MoveConfused(), MotionMaster::MoveDistract(), MotionMaster::MoveFall(), MotionMaster::MoveFleeing(), MotionMaster::MoveFollow(), MotionMaster::MoveFormation(), boss_sartharion_dragonAI::MoveInLineOfSight(), boss_professor_putricide::boss_professor_putricideAI::MoveInLineOfSight(), boss_palehoof::boss_palehoofAI::MoveInLineOfSight(), npc_massive_jormungar::npc_massive_jormungarAI::MoveInLineOfSight(), npc_ferocious_rhino::npc_ferocious_rhinoAI::MoveInLineOfSight(), npc_ravenous_furbolg::npc_ravenous_furbolgAI::MoveInLineOfSight(), npc_frenzied_worgen::npc_frenzied_worgenAI::MoveInLineOfSight(), npc_shattered_hand_scout::MoveInLineOfSight(), npc_nether_drake::npc_nether_drakeAI::MoveInLineOfSight(), MotionMaster::MoveLand(), npc_koltira_deathweaver::npc_koltira_deathweaverAI::MovementInform(), MotionMaster::MovePoint(), MotionMaster::MoveRandom(), MotionMaster::MoveSeekAssistance(), MotionMaster::MoveSeekAssistanceDistract(), MotionMaster::MoveSplinePath(), MotionMaster::MoveTakeoff(), MotionMaster::MoveTargetedHome(), MotionMaster::MoveWaypoint(), npc_toc_druid::npc_toc_druidAI::myCanCast(), npc_toc_shaman::npc_toc_shamanAI::myCanCast(), npc_toc_paladin::npc_toc_paladinAI::myCanCast(), npc_toc_priest::npc_toc_priestAI::myCanCast(), npc_toc_shadow_priest::npc_toc_shadow_priestAI::myCanCast(), npc_toc_warlock::npc_toc_warlockAI::myCanCast(), npc_toc_mage::npc_toc_mageAI::myCanCast(), npc_toc_boomkin::npc_toc_boomkinAI::myCanCast(), npc_toc_pet_warlock::npc_toc_pet_warlockAI::myCanCast(), Acore::AnyAttackableUnitExceptForOriginalCasterInObjectRangeCheck::operator()(), WorldSession::ProcessMovementInfo(), Creature::reachWithSpellAttack(), Creature::reachWithSpellCure(), Creature::RefreshSwimmingFlag(), ScriptedAI::SelectSpell(), SetCharm(), Player::SetClientControl(), CombatManager::SetEvadeState(), SetSpeed(), boss_the_lurker_below::SummonedCreatureDies(), boss_anub_arak::SummonedCreatureDies(), Player::Update(), npc_onyxian_lair_guard::UpdateAI(), boss_anub_arak::UpdateAI(), boss_anubarak_trial::boss_anubarak_trialAI::UpdateAI(), npc_toc_warrior::npc_toc_warriorAI::UpdateAI(), npc_toc_dk::npc_toc_dkAI::UpdateAI(), npc_toc_rogue::npc_toc_rogueAI::UpdateAI(), npc_toc_enh_shaman::npc_toc_enh_shamanAI::UpdateAI(), npc_toc_retro_paladin::npc_toc_retro_paladinAI::UpdateAI(), boss_gormok::boss_gormokAI::UpdateAI(), boss_jormungarAI::UpdateAI(), boss_novos::UpdateAI(), boss_bronjahm::UpdateAI(), boss_drakkari_colossus::boss_drakkari_colossusAI::UpdateAI(), npc_frostwing_vrykul::npc_frostwing_vrykulAI::UpdateAI(), boss_kelthuzad::boss_kelthuzadAI::UpdateAI(), npc_power_spark::UpdateAI(), npc_ulduar_aerial_command_unit::UpdateAI(), boss_thorim_arena_npcs::UpdateAI(), npc_xt002_heart::UpdateAI(), boss_ingvar_the_plunderer::UpdateAI(), npc_vrykul_skeleton::UpdateAI(), npc_ravenous_worg::npc_ravenous_worgAI::UpdateAI(), and WorldSession::VerifyMovementInfo().

◆ HasUnitFlag2()

◆ HasUnitMovementFlag()

◆ HasUnitState()

bool Unit::HasUnitState ( const uint32  f) const
inline
736{ return (m_state & f); }

References m_state.

Referenced by Spell::_cast(), BossAI::_CheckHealthAfterCast(), Creature::_IsTargetAcceptable(), _IsValidAssistTarget(), _IsValidAttackTarget(), Player::ActivateTaxiPathTo(), AddThreat(), AtEngage(), Attack(), AttackerStateUpdate(), FollowerAI::AttackStart(), SmartAI::AttackStart(), npc_raging_spirit::npc_raging_spiritAI::AttackStart(), boss_bigbadwolf::boss_bigbadwolf(), boss_blindeye_the_seer::boss_blindeye_the_seer(), boss_dorothee::boss_dorothee(), boss_fathomguard_caribdis::boss_fathomguard_caribdis(), boss_fathomguard_tidalvess::boss_fathomguard_tidalvess(), boss_jarien::boss_jarien(), boss_kiggler_the_crazed::boss_kiggler_the_crazed(), boss_krosh_firehand::boss_krosh_firehand(), boss_mor_grayhoof::boss_mor_grayhoof(), boss_nazan::boss_nazan(), boss_olm_the_summoner::boss_olm_the_summoner(), boss_roar::boss_roar(), boss_sothos::boss_sothos(), boss_strawman::boss_strawman(), boss_tinhead::boss_tinhead(), boss_vazruden::boss_vazruden(), PathGenerator::CalculatePath(), npc_q24545_wretched_ghoul::npc_q24545_wretched_ghoulAI::CanAIAttack(), boss_gurtogg_bloodboil::CanAIAttack(), PetAI::CanAttack(), CombatManager::CanBeginCombat(), Player::CanEquipItem(), CanFreeMove(), Creature::CanPeriodicallyCallForAssistance(), spell_dk_death_grip::CheckCast(), Spell::CheckCast(), Spell::CheckPetCast(), spell_warr_retaliation::CheckProc(), SpellInfo::CheckTarget(), CreatureUnitRelocationWorker(), boss_garfrost::boss_garfrostAI::DamageTaken(), BossAI::DamageTaken(), boss_viscidus::DamageTaken(), boss_the_lich_king::boss_the_lich_kingAI::DamageTaken(), DisableRotate(), UnitAI::DoCast(), UnitAI::DoCastAOE(), FormationMovementGenerator::DoInitialize(), UnitAI::DoMeleeAttackIfReady(), boss_mandokir::boss_mandokirAI::DoMeleeAttackIfReady(), boss_ambassador_hellmaw::DoMeleeAttackIfReady(), UnitAI::DoSpellAttackIfReady(), UnitAI::DoSpellAttackToRandomTargetIfReady(), Spell::DoSpellHitOnUnit(), FormationMovementGenerator::DoUpdate(), RandomMovementGenerator< T >::DoUpdate(), Spell::EffectDistract(), Spell::EffectEnergizePct(), Spell::EffectKnockBack(), CritterAI::EnterEvadeMode(), SmartAI::EnterEvadeMode(), npc_pet_mage_mirror_image::EnterEvadeMode(), Spell::finish(), ThreatManager::ForwardThreatForAssistingMe(), Player::GetInitialVisiblePackets(), WorldSession::HandleAuctionListItems(), spell_dru_starfall_dummy::HandleDummy(), WorldSession::HandleEmoteOpcode(), WorldSession::HandleInitiateTradeOpcode(), WorldSession::HandleMoveTeleportAck(), WorldSession::HandlePetCastSpellOpcode(), WorldSession::HandlePlayerLoginFromDB(), WorldSession::HandlePlayerLoginToCharInWorld(), ArenaSpectator::HandleSpectatorSpectateCommand(), WaypointMovementGenerator< Creature >::IsAllowedToMove(), isAttackingPlayer(), boss_faction_championsAI::IsCCed(), IsImmobilizedState(), Creature::IsInEvadeMode(), IsInFlight(), IsMovementPreventedByCasting(), Creature::IsMovementPreventedByCasting(), isPossessed(), isPossessedByPlayer(), isSpellBlocked(), IsStopped(), isTargetableForAttack(), Creature::IsUpdateNeeded(), CritterAI::JustEngagedWith(), boss_priestess_delrissa::JustEngagedWith(), npc_coren_direbrew_sisters::JustEngagedWith(), boss_yoggsaron_keeper::JustEngagedWith(), boss_essence_of_desire::boss_essence_of_desireAI::JustEngagedWith(), boss_priestess_lackey_commonAI::JustEngagedWith(), boss_kagani_nightstrike::JustEngagedWith(), boss_novos::JustEngagedWith(), PetAI::KilledUnit(), CreatureGroup::LeaderStartedMoving(), GridObjectLoader::LoadCreatures(), MagicSpellHitResult(), MeleeSpellHitResult(), FollowerAI::MoveInLineOfSight(), npc_escortAI::MoveInLineOfSight(), SmartAI::MoveInLineOfSight(), boss_kaelthas::MovementInform(), npc_toc_druid::npc_toc_druidAI::myCanCast(), npc_toc_shaman::npc_toc_shamanAI::myCanCast(), npc_toc_paladin::npc_toc_paladinAI::myCanCast(), npc_toc_priest::npc_toc_priestAI::myCanCast(), npc_toc_shadow_priest::npc_toc_shadow_priestAI::myCanCast(), npc_toc_warlock::npc_toc_warlockAI::myCanCast(), npc_toc_mage::npc_toc_mageAI::myCanCast(), npc_toc_hunter::npc_toc_hunterAI::myCanCast(), npc_toc_boomkin::npc_toc_boomkinAI::myCanCast(), npc_toc_warrior::npc_toc_warriorAI::myCanCast(), npc_toc_dk::npc_toc_dkAI::myCanCast(), npc_toc_rogue::npc_toc_rogueAI::myCanCast(), npc_toc_enh_shaman::npc_toc_enh_shamanAI::myCanCast(), npc_toc_retro_paladin::npc_toc_retro_paladinAI::myCanCast(), boss_twin_valkyrAI::myDoMeleeAttackIfReady(), npc_apothecary_baxter::npc_apothecary_baxter(), npc_batrider::npc_batrider(), npc_icc_spire_frostwyrm::npc_icc_spire_frostwyrm(), Acore::FriendlyCCedInRange::operator()(), MysticBuffetTargetFilter::operator()(), SmartScript::ProcessAction(), RemoveCharmedBy(), boss_kormok::Reset(), boss_baroness_anastari::boss_baroness_anastariAI::Reset(), npc_ohgan::npc_ohganAI::Reset(), npc_zealot_lorkhan::Reset(), npc_zealot_zath::Reset(), boss_isalien::Reset(), npc_anubisath_guardian::Reset(), npc_ashtongue_channeler::Reset(), RollMeleeOutcomeAgainst(), Player::SetClientControl(), SetContestedPvP(), SetControlled(), FollowerAI::SetFollowComplete(), FollowerAI::SetFollowPaused(), SetInFront(), SetStunned(), lfg::LFGMgr::TeleportPlayer(), CreatureAI::TriggerAlert(), Creature::Update(), Player::Update(), Update(), TimedFleeingMovementGenerator::Update(), boss_sartharion_dragonAI::UpdateAI(), CombatAI::UpdateAI(), CasterAI::UpdateAI(), BossAI::UpdateAI(), WorldBossAI::UpdateAI(), npc_av_marshal_or_warmaster::npc_av_marshal_or_warmasterAI::UpdateAI(), brd_ironhand_guardian::UpdateAI(), boss_anubshiah::UpdateAI(), boss_emperor_dagran_thaurissan::UpdateAI(), boss_eviscerator::UpdateAI(), boss_gorosh_the_dervish::UpdateAI(), boss_grizzle::UpdateAI(), boss_hedrum::UpdateAI(), boss_moira_bronzebeard::UpdateAI(), boss_high_priestess_thaurissan::UpdateAI(), boss_okthor::UpdateAI(), boss_drakkisath::UpdateAI(), boss_halycon::UpdateAI(), boss_highlord_omokk::UpdateAI(), boss_lord_valthalak::UpdateAI(), boss_overlord_wyrmthalak::UpdateAI(), boss_quartermaster_zigris::UpdateAI(), boss_rend_blackhand::UpdateAI(), npc_rookery_hatcher::UpdateAI(), boss_solakar_flamewreath::UpdateAI(), boss_the_beast::UpdateAI(), boss_urok_doomhowl::UpdateAI(), npc_vaelastrasz_the_red::UpdateAI(), boss_chromaggus::UpdateAI(), boss_ebonroc::UpdateAI(), boss_firemaw::UpdateAI(), boss_flamegor::UpdateAI(), boss_victor_nefarius::UpdateAI(), boss_nefarian::UpdateAI(), boss_razorgore::UpdateAI(), boss_vaelastrasz::UpdateAI(), boss_garr::UpdateAI(), boss_golemagg::UpdateAI(), npc_core_rager::UpdateAI(), boss_majordomo::UpdateAI(), boss_ragnaros::UpdateAI(), npc_flamewaker_priest::UpdateAI(), npc_mc_core_hound::UpdateAI(), boss_netherspite::UpdateAI(), boss_servant_quarters::UpdateAI(), npc_kilrek::UpdateAI(), boss_priestess_lackey_commonAI::UpdateAI(), boss_darkmaster_gandling::boss_darkmaster_gandlingAI::UpdateAI(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::UpdateAI(), npc_scholomance_occultist::npc_scholomance_occultistAI::UpdateAI(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::UpdateAI(), npc_lady_sylvanas_windrunner::npc_lady_sylvanas_windrunnerAI::UpdateAI(), npc_varian_wrynn::npc_varian_wrynnAI::UpdateAI(), npc_jaina_proudmoore_bfu::npc_jaina_proudmoore_bfuAI::UpdateAI(), boss_blight_worm::boss_blight_wormAI::UpdateAI(), npc_thrall_bfu::npc_thrall_bfuAI::UpdateAI(), npc_lady_sylvanas_windrunner_bfu::npc_lady_sylvanas_windrunner_bfuAI::UpdateAI(), boss_arlokk::boss_arlokkAI::UpdateAI(), boss_grilek::boss_grilekAI::UpdateAI(), boss_hakkar::boss_hakkarAI::UpdateAI(), boss_hazzarah::UpdateAI(), boss_jindo::UpdateAI(), boss_mandokir::boss_mandokirAI::UpdateAI(), boss_renataki::boss_renatakiAI::UpdateAI(), boss_wushoolay::boss_wushoolayAI::UpdateAI(), npc_coren_direbrew::UpdateAI(), npc_hallows_end_soh::UpdateAI(), boss_headless_horseman::UpdateAI(), boss_epoch::boss_epochAI::UpdateAI(), boss_infinite_corruptor::boss_infinite_corruptorAI::UpdateAI(), boss_mal_ganis::boss_mal_ganisAI::UpdateAI(), boss_meathook::boss_meathookAI::UpdateAI(), boss_salramm::boss_salrammAI::UpdateAI(), npc_arthas::npc_arthasAI::UpdateAI(), boss_lieutenant_drake::UpdateAI(), boss_onyxia::UpdateAI(), npc_onyxian_lair_guard::UpdateAI(), npc_belnistrasz::npc_belnistraszAI::UpdateAI(), npc_shadowpriest_sezziz::npc_shadowpriest_sezzizAI::UpdateAI(), boss_elder_nadox::UpdateAI(), boss_jedoga_shadowseeker::UpdateAI(), boss_anub_arak::UpdateAI(), boss_hadronox::UpdateAI(), boss_sartharion::UpdateAI(), boss_baltharus_the_warborn::boss_baltharus_the_warbornAI::UpdateAI(), npc_baltharus_the_warborn_clone::npc_baltharus_the_warborn_cloneAI::UpdateAI(), boss_general_zarithrian::boss_general_zarithrianAI::UpdateAI(), boss_halion::boss_halionAI::UpdateAI(), boss_twilight_halion::boss_twilight_halionAI::UpdateAI(), boss_saviana_ragefire::boss_saviana_ragefireAI::UpdateAI(), boss_eadric::boss_eadricAI::UpdateAI(), boss_paletress::boss_paletressAI::UpdateAI(), npc_memory::npc_memoryAI::UpdateAI(), npc_argent_soldier::npc_argent_soldierAI::UpdateAI(), boss_black_knight::boss_black_knightAI::UpdateAI(), npc_black_knight_ghoul::npc_black_knight_ghoulAI::UpdateAI(), npc_toc5_grand_champion_minion::npc_toc5_grand_champion_minionAI::UpdateAI(), boss_grand_champion::boss_grand_championAI::UpdateAI(), boss_anubarak_trial::boss_anubarak_trialAI::UpdateAI(), npc_nerubian_burrower::npc_nerubian_burrowerAI::UpdateAI(), npc_anubarak_spike::npc_anubarak_spikeAI::UpdateAI(), npc_toc_hunter::npc_toc_hunterAI::UpdateAI(), boss_jaraxxus::boss_jaraxxusAI::UpdateAI(), npc_fel_infernal::npc_fel_infernalAI::UpdateAI(), npc_mistress_of_pain::npc_mistress_of_painAI::UpdateAI(), npc_snobold_vassal::npc_snobold_vassalAI::UpdateAI(), boss_gormok::boss_gormokAI::UpdateAI(), boss_jormungarAI::UpdateAI(), boss_icehowl::boss_icehowlAI::UpdateAI(), boss_twin_valkyrAI::UpdateAI(), boss_tharon_ja::boss_tharon_jaAI::UpdateAI(), boss_trollgore::boss_trollgoreAI::UpdateAI(), boss_bronjahm::UpdateAI(), npc_fos_corrupted_soul_fragment::UpdateAI(), boss_devourer_of_souls::UpdateAI(), boss_falric::UpdateAI(), boss_marwyn::UpdateAI(), npc_ghostly_priest::UpdateAI(), npc_phantom_mage::UpdateAI(), npc_shadowy_mercenary::UpdateAI(), npc_spectral_footman::UpdateAI(), npc_tortured_rifleman::UpdateAI(), boss_frostsworn_general::UpdateAI(), npc_hor_spiritual_reflection::UpdateAI(), npc_hor_risen_witch_doctor::UpdateAI(), npc_hor_lumbering_abomination::UpdateAI(), boss_garfrost::boss_garfrostAI::UpdateAI(), boss_ick::boss_ickAI::UpdateAI(), boss_tyrannus::boss_tyrannusAI::UpdateAI(), npc_pos_deathwhisper_necrolyte::npc_pos_deathwhisper_necrolyteAI::UpdateAI(), boss_drakkari_elemental::boss_drakkari_elementalAI::UpdateAI(), npc_living_mojo::npc_living_mojoAI::UpdateAI(), boss_moorabi::boss_moorabiAI::UpdateAI(), boss_prince_keleseth_icc::boss_prince_kelesethAI::UpdateAI(), boss_prince_taldaram_icc::boss_prince_taldaramAI::UpdateAI(), boss_prince_valanar_icc::boss_prince_valanarAI::UpdateAI(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::UpdateAI(), boss_deathbringer_saurfang::boss_deathbringer_saurfangAI::UpdateAI(), boss_festergut::boss_festergutAI::UpdateAI(), npc_stinky_icc::npc_stinky_iccAI::UpdateAI(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::UpdateAI(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::UpdateAI(), npc_gunship_boarding_leader::npc_gunship_boarding_leaderAI::UpdateAI(), npc_gunship_boarding_add::npc_gunship_boarding_add_realAI::UpdateAI(), npc_gunship_gunner::npc_gunship_gunnerAI::UpdateAI(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::UpdateAI(), npc_cult_fanatic::npc_cult_fanaticAI::UpdateAI(), npc_cult_adherent::npc_cult_adherentAI::UpdateAI(), npc_darnavan::npc_darnavanAI::UpdateAI(), boss_lord_marrowgar::UpdateAI(), boss_professor_putricide::boss_professor_putricideAI::UpdateAI(), npc_putricide_oozeAI::UpdateAI(), boss_rotface::boss_rotfaceAI::UpdateAI(), npc_precious_icc::npc_precious_iccAI::UpdateAI(), boss_sindragosa::boss_sindragosaAI::UpdateAI(), npc_spinestalker::npc_spinestalkerAI::UpdateAI(), npc_rimefang::npc_rimefangAI::UpdateAI(), npc_sindragosa_trash::npc_sindragosa_trashAI::UpdateAI(), boss_the_lich_king::boss_the_lich_kingAI::UpdateAI(), npc_tirion_fordring_tft::npc_tirion_fordringAI::UpdateAI(), npc_shambling_horror_icc::npc_shambling_horror_iccAI::UpdateAI(), npc_raging_spirit::npc_raging_spiritAI::UpdateAI(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::UpdateAI(), boss_valithria_dreamwalker::boss_valithria_dreamwalkerAI::UpdateAI(), npc_the_lich_king_controller::npc_the_lich_king_controllerAI::UpdateAI(), npc_risen_archmage::npc_risen_archmageAI::UpdateAI(), npc_blazing_skeleton::npc_blazing_skeletonAI::UpdateAI(), npc_gluttonous_abomination::npc_gluttonous_abominationAI::UpdateAI(), npc_rotting_frost_giant::npc_rotting_frost_giantAI::UpdateAI(), npc_crok_scourgebane::npc_crok_scourgebaneAI::UpdateAI(), boss_sister_svalna::boss_sister_svalnaAI::UpdateAI(), npc_captain_arnath::npc_captain_arnathAI::UpdateAI(), npc_captain_brandon::npc_captain_brandonAI::UpdateAI(), npc_captain_grondel::npc_captain_grondelAI::UpdateAI(), npc_captain_rupert::npc_captain_rupertAI::UpdateAI(), npc_frostwing_vrykul::npc_frostwing_vrykulAI::UpdateAI(), npc_icc_skybreaker_hierophant::npc_icc_skybreaker_hierophantAI::UpdateAI(), npc_icc_skybreaker_marksman::npc_icc_skybreaker_marksmanAI::UpdateAI(), npc_icc_skybreaker_vicar::npc_icc_skybreaker_vicarAI::UpdateAI(), npc_icc_skybreaker_luminary::npc_icc_skybreaker_luminaryAI::UpdateAI(), npc_icc_valkyr_herald::npc_icc_valkyr_heraldAI::UpdateAI(), npc_icc_severed_essence::npc_icc_severed_essenceAI::UpdateAI(), npc_icc_vengeful_fleshreaper::npc_icc_vengeful_fleshreaperAI::UpdateAI(), npc_icc_nerubar_broodkeeper::npc_icc_nerubar_broodkeeperAI::UpdateAI(), boss_isle_of_conquest::boss_isle_of_conquestAI::UpdateAI(), boss_four_horsemen::boss_four_horsemenAI::UpdateAI(), boss_gluth::boss_gluthAI::UpdateAI(), boss_gothik::boss_gothikAI::UpdateAI(), boss_grobbulus::boss_grobbulusAI::UpdateAI(), boss_kelthuzad::boss_kelthuzadAI::UpdateAI(), boss_kelthuzad_minion::boss_kelthuzad_minionAI::UpdateAI(), boss_loatheb::boss_loathebAI::UpdateAI(), boss_maexxna::boss_maexxnaAI::UpdateAI(), boss_noth::boss_nothAI::UpdateAI(), boss_patchwerk::boss_patchwerkAI::UpdateAI(), boss_razuvious_minion::boss_razuvious_minionAI::UpdateAI(), boss_sapphiron::boss_sapphironAI::UpdateAI(), boss_thaddius::boss_thaddiusAI::UpdateAI(), boss_thaddius_summon::boss_thaddius_summonAI::UpdateAI(), boss_malygos::UpdateAI(), npc_nexus_lord::UpdateAI(), npc_scion_of_eternity::UpdateAI(), boss_anomalus::UpdateAI(), boss_keristrasza::UpdateAI(), boss_magus_telestra::UpdateAI(), boss_ormorok::UpdateAI(), boss_drakos::boss_drakosAI::UpdateAI(), boss_eregos::boss_eregosAI::UpdateAI(), boss_urom::boss_uromAI::UpdateAI(), boss_varos::boss_varosAI::UpdateAI(), npc_stormforged_lieutenant::UpdateAI(), boss_ionar::UpdateAI(), boss_volkhan::UpdateAI(), npc_molten_golem::UpdateAI(), boss_krystallus::boss_krystallusAI::UpdateAI(), boss_maiden_of_grief::boss_maiden_of_griefAI::UpdateAI(), boss_sjonnir_iron_sludge::boss_sjonnir_iron_sludgeAI::UpdateAI(), boss_algalon_the_observer::UpdateAI(), boss_steelbreaker::UpdateAI(), boss_runemaster_molgeim::UpdateAI(), boss_stormcaller_brundir::UpdateAI(), npc_auriaya_sanctum_sentry::UpdateAI(), npc_auriaya_feral_defender::UpdateAI(), boss_flame_leviathan::UpdateAI(), boss_freya::UpdateAI(), boss_freya_elder_stonebark::UpdateAI(), boss_freya_elder_brightleaf::UpdateAI(), boss_freya_elder_ironbranch::UpdateAI(), boss_freya_summons::UpdateAI(), boss_vezax::UpdateAI(), boss_hodir::UpdateAI(), npc_ulduar_hodir_priest::UpdateAI(), npc_ulduar_hodir_druid::UpdateAI(), npc_ulduar_hodir_shaman::UpdateAI(), npc_ulduar_hodir_mage::UpdateAI(), boss_ignis::UpdateAI(), boss_kologarn::UpdateAI(), npc_ulduar_leviathan_mkii::UpdateAI(), npc_ulduar_vx001::UpdateAI(), npc_ulduar_aerial_command_unit::UpdateAI(), boss_razorscale::UpdateAI(), boss_thorim::UpdateAI(), boss_thorim_sif::UpdateAI(), boss_thorim_start_npcs::UpdateAI(), boss_thorim_gauntlet_npcs::UpdateAI(), boss_thorim_runic_colossus::UpdateAI(), boss_thorim_ancient_rune_giant::UpdateAI(), boss_thorim_arena_npcs::UpdateAI(), boss_xt002::UpdateAI(), boss_yoggsaron_sara::UpdateAI(), boss_yoggsaron::UpdateAI(), boss_yoggsaron_constrictor_tentacle::UpdateAI(), boss_yoggsaron_immortal_guardian::UpdateAI(), npc_ulduar_storm_tempered_keeper::UpdateAI(), npc_ulduar_arachnopod_destroyer::UpdateAI(), boss_ingvar_the_plunderer::UpdateAI(), npc_vrykul_skeleton::UpdateAI(), boss_skarvald_the_constructor::UpdateAI(), boss_dalronn_the_controller::UpdateAI(), npc_enslaved_proto_drake::UpdateAI(), npc_massive_jormungar::npc_massive_jormungarAI::UpdateAI(), npc_ferocious_rhino::npc_ferocious_rhinoAI::UpdateAI(), npc_ravenous_furbolg::npc_ravenous_furbolgAI::UpdateAI(), npc_frenzied_worgen::npc_frenzied_worgenAI::UpdateAI(), boss_skadi::boss_skadiAI::UpdateAI(), boss_svala::boss_svalaAI::UpdateAI(), boss_ymiron::boss_ymironAI::UpdateAI(), boss_archavon::boss_archavonAI::UpdateAI(), boss_emalon::boss_emalonAI::UpdateAI(), boss_koralon::boss_koralonAI::UpdateAI(), boss_toravon::boss_toravonAI::UpdateAI(), npc_erekem_guard::UpdateAI(), npc_dalaran_mage::npc_dalaran_mageAI::UpdateAI(), npc_q24545_vegard::npc_q24545_vegardAI::UpdateAI(), npc_tournament_training_dummy::npc_tournament_training_dummyAI::UpdateAI(), npc_overlord_drakuru_betrayal::UpdateAI(), boss_exarch_maladaar::UpdateAI(), boss_nexusprince_shaffar::UpdateAI(), npc_yor::UpdateAI(), boss_anzu::UpdateAI(), npc_maiev_illidan::UpdateAI(), boss_gathios_the_shatterer::UpdateAI(), boss_high_nethermancer_zerevor::UpdateAI(), boss_lady_malande::UpdateAI(), boss_veras_darkshadow::UpdateAI(), boss_essence_of_suffering::boss_essence_of_sufferingAI::UpdateAI(), boss_essence_of_desire::boss_essence_of_desireAI::UpdateAI(), boss_essence_of_anger::boss_essence_of_angerAI::UpdateAI(), boss_doomlord_kazzak::boss_doomlordkazzakAI::UpdateAI(), boss_doomwalker::UpdateAI(), boss_leotheras_the_blind::UpdateAI(), boss_gruul::UpdateAI(), boss_omor_the_unscarred::UpdateAI(), boss_watchkeeper_gargolmar::UpdateAI(), boss_grand_warlock_nethekurse::UpdateAI(), npc_millhouse_manastorm::npc_millhouse_manastormAI::UpdateAI(), boss_alar::UpdateAI(), advisor_baseAI::UpdateAI(), npc_maghar_captive::npc_maghar_captiveAI::UpdateAI(), npc_enslaved_netherwing_drake::UpdateAI(), npc_dragonmaw_peon::npc_dragonmaw_peonAI::UpdateAI(), npc_pet_dk_ebon_gargoyle::UpdateAI(), npc_pet_dk_ghoul::UpdateAI(), npc_pet_gen_target_following_bomb::UpdateAI(), npc_pet_mage_mirror_image::UpdateAI(), emerald_dragonAI::UpdateAI(), npc_artorius::npc_artoriusAI::UpdateAI(), npc_simone::npc_simoneAI::UpdateAI(), npc_nelson::npc_nelsonAI::UpdateAI(), npc_franklin::npc_franklinAI::UpdateAI(), npc_target_dummy::UpdateAI(), PetAI::UpdateAI(), npc_orb_carrier::npc_orb_carrierAI::UpdateAI(), npc_hor_raging_ghoul::UpdateAI(), npc_gunship_rocketeer::npc_gunship_rocketeerAI::UpdateAI(), npc_suppresser::npc_suppresserAI::UpdateAI(), boss_yoggsaron_crusher_tentacle::UpdateAI(), boss_yoggsaron_corruptor_tentacle::UpdateAI(), npc_wg_spirit_guide::npc_wg_spirit_guideAI::UpdateAI(), Player::UpdateCharmedAI(), npc_general_andorov::UpdateEscortAI(), npc_onyx_flamecaller::npc_onyx_flamecallerAI::UpdateEscortAI(), boss_bjarngrim::UpdateEscortAI(), npc_kurenai_captive::npc_kurenai_captiveAI::UpdateEscortAI(), npc_isla_starmane::npc_isla_starmaneAI::UpdateEscortAI(), SmartAI::UpdatePath(), and SmartScript::UpdateTimer().

◆ HasUnitTypeMask()

◆ HasVisibleAuraType()

bool Unit::HasVisibleAuraType ( AuraType  auraType) const
6032{
6033 AuraEffectList const& mAuraList = GetAuraEffectsByType(auraType);
6034 for (AuraEffectList::const_iterator i = mAuraList.begin(); i != mAuraList.end(); ++i)
6035 if ((*i)->GetBase()->CanBeSentToClient())
6036 return true;
6037
6038 return false;
6039}

References GetAuraEffectsByType().

◆ HasWaterBreathingAura()

bool Unit::HasWaterBreathingAura ( ) const
inline
@ SPELL_AURA_WATER_BREATHING
Definition SpellAuraDefines.h:145

References HasAuraType(), and SPELL_AURA_WATER_BREATHING.

Referenced by Player::getMaxTimer().

◆ HasWaterWalkAura()

bool Unit::HasWaterWalkAura ( ) const
inline
@ SPELL_AURA_WATER_WALK
Definition SpellAuraDefines.h:167

References HasAuraType(), and SPELL_AURA_WATER_WALK.

◆ HasWeapon()

virtual bool Unit::HasWeapon ( WeaponAttackType  type) const
pure virtual

Implemented in Creature, and Player.

Referenced by HasMainhandWeapon(), HasOffhandWeapon(), and HasRangedWeapon().

◆ HasWeaponForAttack()

virtual bool Unit::HasWeaponForAttack ( WeaponAttackType  type) const
inlinevirtual

Reimplemented in Creature, and Player.

988{ return CanUseAttackType(type); }
bool CanUseAttackType(WeaponAttackType attacktype) const
Definition Unit.h:992

References CanUseAttackType().

Referenced by hasMainhandWeaponForAttack(), HasMainhandWeaponForAttack(), HasOffhandWeaponForAttack(), HasRangedWeaponForAttack(), Creature::HasWeaponForAttack(), and Player::HasWeaponForAttack().

◆ haveOffhandWeapon()

bool Unit::haveOffhandWeapon ( ) const
642{
643 if (Player const* player = ToPlayer())
644 return player->GetWeaponForAttack(OFF_ATTACK, true);
645
646 return CanDualWield();
647}
bool CanDualWield() const
Definition Unit.h:978

References CanDualWield(), OFF_ATTACK, and Object::ToPlayer().

Referenced by boss_mandokir::boss_mandokirAI::DoMeleeAttackIfReady(), boss_ambassador_hellmaw::DoMeleeAttackIfReady(), spell_dk_threat_of_thassarian::HandleProc(), and boss_twin_valkyrAI::myDoMeleeAttackIfReady().

◆ HealBySpell()

int32 Unit::HealBySpell ( HealInfo healInfo,
bool  critical = false 
)
8365{
8366 uint32 heal = healInfo.GetHeal();
8367 sScriptMgr->ModifyHealReceived(this, healInfo.GetTarget(), heal, healInfo.GetSpellInfo());
8368 healInfo.SetHeal(heal);
8369
8370 // calculate heal absorb and reduce healing
8371 CalcHealAbsorb(healInfo);
8372
8373 int32 gain = Unit::DealHeal(healInfo.GetHealer(), healInfo.GetTarget(), healInfo.GetHeal());
8374 healInfo.SetEffectiveHeal(gain);
8375
8376 SendHealSpellLog(healInfo, critical);
8377 return gain;
8378}
Unit * GetHealer() const
Definition Unit.h:427
void SetHeal(uint32 amount)
Definition Unit.h:412
void SetEffectiveHeal(uint32 amount)
Definition Unit.h:422
static void CalcHealAbsorb(HealInfo &healInfo)
Definition Unit.cpp:2693
static int32 DealHeal(Unit *healer, Unit *victim, uint32 addhealth)
Definition Unit.cpp:8067
void SendHealSpellLog(HealInfo const &healInfo, bool critical=false)
Definition Unit.cpp:8347

References CalcHealAbsorb(), DealHeal(), HealInfo::GetHeal(), HealInfo::GetHealer(), HealInfo::GetSpellInfo(), HealInfo::GetTarget(), SendHealSpellLog(), HealInfo::SetEffectiveHeal(), HealInfo::SetHeal(), and sScriptMgr.

Referenced by Spell::DoAllEffectOnTarget(), AuraEffect::HandlePeriodicHealthFunnelAuraTick(), AuraEffect::HandlePeriodicHealthLeechAuraTick(), and AuraEffect::HandlePeriodicTriggerSpellAuraTick().

◆ HealthAbovePct()

◆ HealthAbovePctHealed()

bool Unit::HealthAbovePctHealed ( int32  pct,
uint32  heal 
) const
inline

◆ HealthBelowPct()

bool Unit::HealthBelowPct ( int32  pct) const
inline
1116{ return GetHealth() < CountPctFromMaxHealth(pct); }

References CountPctFromMaxHealth(), and GetHealth().

Referenced by boss_moira_bronzebeard::CastOnEmperorIfPossible(), spell_dru_glyph_of_rejuvenation::CheckProc(), spell_warr_t3_prot_8p_bonus::CheckProc(), boss_mor_grayhoof::DamageTaken(), boss_isalien::DamageTaken(), boss_viscidus::DamageTaken(), boss_thorim_start_npcs::DamageTaken(), npc_infra_green_bomber_generic::npc_infra_green_bomber_genericAI::DamageTaken(), boss_hadronox::DamageTaken(), AuraEffect::HandlePeriodicDamageAurasTick(), AuraEffect::HandlePeriodicDummyAuraTick(), ScriptedAI::HealthBelowPct(), boss_kalec::JustEngagedWith(), boss_sathrovarr::JustEngagedWith(), npc_akama_illidan::JustEngagedWith(), npc_maiev_illidan::JustEngagedWith(), boss_olm_the_summoner::JustEngagedWith(), boss_priestess_lackey_commonAI::JustEngagedWith(), boss_yazzai::JustEngagedWith(), boss_grand_warlock_nethekurse::JustEngagedWith(), Player::LoadFromDB(), npc_wild_wyrm::PassengerBoarded(), SetHealth(), SpellPctHealingModsDone(), Update(), boss_mr_smite::boss_mr_smiteAI::UpdateAI(), npc_scholomance_occultist::npc_scholomance_occultistAI::UpdateAI(), npc_sentinel_leader::UpdateAI(), npc_sentinel_infiltrator::UpdateAI(), boss_baltharus_the_warborn::boss_baltharus_the_warbornAI::UpdateAI(), boss_halion::boss_halionAI::UpdateAI(), boss_twilight_halion::boss_twilight_halionAI::UpdateAI(), npc_hor_lich_king::UpdateAI(), boss_drakkari_elemental::boss_drakkari_elementalAI::UpdateAI(), boss_gothik::boss_gothikAI::UpdateAI(), boss_kelthuzad::boss_kelthuzadAI::UpdateAI(), boss_kelthuzad_minion::boss_kelthuzad_minionAI::UpdateAI(), boss_sapphiron::boss_sapphironAI::UpdateAI(), boss_anomalus::UpdateAI(), boss_keristrasza::UpdateAI(), boss_magus_telestra::UpdateAI(), boss_ormorok::UpdateAI(), boss_xt002::UpdateAI(), boss_yoggsaron_immortal_guardian::UpdateAI(), npc_iron_watcher::npc_iron_watcherAI::UpdateAI(), boss_grand_warlock_nethekurse::UpdateAI(), and npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UpdateEscortAI().

◆ HealthBelowPctDamaged()

bool Unit::HealthBelowPctDamaged ( int32  pct,
uint32  damage 
) const
inline
1117{ return int64(GetHealth()) - int64(damage) < int64(CountPctFromMaxHealth(pct)); }
std::int64_t int64
Definition Define.h:102

References CountPctFromMaxHealth(), and GetHealth().

Referenced by boss_mandokir::boss_mandokirAI::DamageDealt(), boss_lord_valthalak::DamageTaken(), npc_blackhand_incarcerator::DamageTaken(), boss_quartermaster_zigris::DamageTaken(), boss_warmaster_voone::DamageTaken(), boss_baron_geddon::DamageTaken(), boss_golemagg::DamageTaken(), npc_core_rager::DamageTaken(), boss_attumen::DamageTaken(), boss_midnight::DamageTaken(), boss_kormok::DamageTaken(), npc_batrider::DamageTaken(), npc_coren_direbrew::DamageTaken(), boss_headless_horseman_head::DamageTaken(), boss_onyxia::DamageTaken(), npc_anubisath_guardian::DamageTaken(), boss_ouro::DamageTaken(), npc_anubisath_sentinel::aqsentinelAI::DamageTaken(), npc_anubisath_defender::DamageTaken(), boss_elder_nadox::DamageTaken(), boss_jedoga_shadowseeker::DamageTaken(), npc_anub_ar_crusher::DamageTaken(), boss_sartharion::DamageTaken(), boss_bronjahm::DamageTaken(), npc_gunship::npc_gunshipAI::DamageTaken(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::DamageTaken(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::DamageTaken(), npc_gunship_boarding_addAI::DamageTaken(), npc_shambling_horror_icc::npc_shambling_horror_iccAI::DamageTaken(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::DamageTaken(), boss_valithria_dreamwalker::boss_valithria_dreamwalkerAI::DamageTaken(), boss_algalon_the_observer::DamageTaken(), npc_xt002_boombot::DamageTaken(), npc_ulduar_arachnopod_destroyer::DamageTaken(), npc_akama_shade::DamageTaken(), boss_vazruden::DamageTaken(), npc_millhouse_manastorm::npc_millhouse_manastormAI::DamageTaken(), npc_magister_aledis::DamageTaken(), BossAI::DamageTaken(), boss_halazzi::DamageTaken(), boss_malygos::DamageTaken(), boss_buru::DamageTaken(), npc_unkor_the_ruthless::npc_unkor_the_ruthlessAI::DamageTaken(), boss_bug_trio::DamageTaken(), boss_hadronox::DamageTaken(), boss_yoggsaron_brain::DamageTaken(), and spell_warl_seed_of_corruption_dummy::HandleProc().

◆ IgnoresSchoolImmunityFromFriendlyCaster()

bool Unit::IgnoresSchoolImmunityFromFriendlyCaster ( Unit const *  caster,
uint32  immunityAuraId,
SpellInfo const *  immunitySpellInfo 
) const
9839{
9840 if (!caster || !caster->IsFriendlyTo(this))
9841 return false;
9842
9843 if (immunitySpellInfo)
9844 return !immunitySpellInfo->HasAttribute(SPELL_ATTR1_IMMUNITY_TO_HOSTILE_AND_FRIENDLY_EFFECTS);
9845
9846 // Creature template immunities are loaded with a placeholder spell id.
9847 return immunityAuraId == std::numeric_limits<uint32>::max();
9848}
@ SPELL_ATTR1_IMMUNITY_TO_HOSTILE_AND_FRIENDLY_EFFECTS
Definition SharedDefines.h:423

References SpellInfo::HasAttribute(), IsFriendlyTo(), and SPELL_ATTR1_IMMUNITY_TO_HOSTILE_AND_FRIENDLY_EFFECTS.

Referenced by IsImmunedToAuraPeriodicTick(), IsImmunedToDamage(), IsImmunedToSchool(), IsImmunedToSpell(), and IsImmunedToSpell().

◆ IncrDiminishing()

void Unit::IncrDiminishing ( DiminishingGroup  group)
11782{
11783 // Checking for existing in the table
11784 for (Diminishing::iterator i = m_Diminishing.begin(); i != m_Diminishing.end(); ++i)
11785 {
11786 if (i->DRGroup != group)
11787 continue;
11788 if (int32(i->hitCount) < GetDiminishingReturnsMaxLevel(group))
11789 i->hitCount += 1;
11790 return;
11791 }
11793}
DiminishingLevels GetDiminishingReturnsMaxLevel(DiminishingGroup group)
Definition SpellMgr.cpp:311
Definition Unit.h:278

References DIMINISHING_LEVEL_2, GetDiminishingReturnsMaxLevel(), GameTime::GetGameTimeMS(), and m_Diminishing.

Referenced by Spell::DoSpellHitOnUnit().

◆ InitCharmInfo()

CharmInfo * Unit::InitCharmInfo ( )
12676{
12677 if (!m_charmInfo)
12678 m_charmInfo = new CharmInfo(this);
12679
12680 return m_charmInfo;
12681}
Definition CharmInfo.h:127

References m_charmInfo.

Referenced by Guardian::Guardian(), Pet::Pet(), and SetCharmedBy().

◆ InitStatBuffMods()

void Unit::InitStatBuffMods ( )
inline
1070 {
1071 for (uint8 i = STAT_STRENGTH; i < MAX_STATS; ++i) SetFloatValue(static_cast<uint16>(UNIT_FIELD_POSSTAT0) + i, 0);
1072 for (uint8 i = STAT_STRENGTH; i < MAX_STATS; ++i) SetFloatValue(static_cast<uint16>(UNIT_FIELD_NEGSTAT0) + i, 0);
1073 }

References STAT_STRENGTH, UNIT_FIELD_NEGSTAT0, and UNIT_FIELD_POSSTAT0.

Referenced by Player::InitStatsForLevel().

◆ InitTamedPet()

bool Unit::InitTamedPet ( Pet pet,
uint8  level,
uint32  spell_id 
)
13812{
13813 Player* player = ToPlayer();
13814 PetStable& petStable = player->GetOrInitPetStable();
13815 if (petStable.CurrentPet || petStable.GetUnslottedHunterPet())
13816 return false;
13817
13818 pet->SetCreatorGUID(GetGUID());
13819 pet->SetFaction(GetFaction());
13820 pet->SetUInt32Value(UNIT_CREATED_BY_SPELL, spell_id);
13821
13822 if (IsPlayer())
13824
13825 if (!pet->InitStatsForLevel(level))
13826 {
13827 LOG_ERROR("entities.unit", "Pet::InitStatsForLevel() failed for creature (Entry: {})!", pet->GetEntry());
13828 return false;
13829 }
13830
13831 pet->GetCharmInfo()->SetPetNumber(sObjectMgr->GeneratePetNumber(), true);
13832 // this enables pet details window (Shift+P)
13833 pet->InitPetCreateSpells();
13834 pet->SetFullHealth();
13835 pet->FillPetInfo(&petStable.CurrentPet.emplace());
13836 return true;
13837}
@ UNIT_CREATED_BY_SPELL
Definition UpdateFields.h:138
bool InitStatsForLevel(uint8 level)
Definition Pet.cpp:1018
Definition PetDefines.h:212
PetInfo const * GetUnslottedHunterPet() const
Definition PetDefines.h:240
Optional< PetInfo > CurrentPet
Definition PetDefines.h:235
void FillPetInfo(PetStable::PetInfo *petInfo) const
Definition Pet.cpp:2460
void InitPetCreateSpells()
Definition Pet.cpp:2034
PetStable & GetOrInitPetStable()
Definition Player.cpp:15709
void SetFullHealth()
Definition Unit.h:1126
void SetFaction(uint32 faction)
Definition Unit.cpp:7084
void ReplaceAllUnitFlags(UnitFlags flags)
Remove the Unit flag specify only.
Definition Unit.h:750
CharmInfo * GetCharmInfo()
Definition Unit.h:1281
void SetCreatorGUID(ObjectGuid creator)
Definition Unit.h:716
void SetPetNumber(uint32 petnumber, bool statwindow)
Definition CharmInfo.cpp:240

References PetStable::CurrentPet, Pet::FillPetInfo(), GetCharmInfo(), Object::GetEntry(), GetFaction(), Object::GetGUID(), Player::GetOrInitPetStable(), PetStable::GetUnslottedHunterPet(), Pet::InitPetCreateSpells(), Guardian::InitStatsForLevel(), Object::IsPlayer(), LOG_ERROR, ReplaceAllUnitFlags(), SetCreatorGUID(), SetFaction(), SetFullHealth(), CharmInfo::SetPetNumber(), SetUInt32Value(), sObjectMgr, Object::ToPlayer(), UNIT_CREATED_BY_SPELL, and UNIT_FLAG_PLAYER_CONTROLLED.

Referenced by CreateTamedPetFrom(), and CreateTamedPetFrom().

◆ InterruptNonMeleeSpells()

void Unit::InterruptNonMeleeSpells ( bool  withDelayed,
uint32  spellid = 0,
bool  withInstant = true,
bool  bySelf = false 
)
4328{
4329 // generic spells are interrupted if they are not finished or delayed
4330 if (m_currentSpells[CURRENT_GENERIC_SPELL] && (!spell_id || m_currentSpells[CURRENT_GENERIC_SPELL]->m_spellInfo->Id == spell_id))
4331 InterruptSpell(CURRENT_GENERIC_SPELL, withDelayed, withInstant, bySelf);
4332
4333 // autorepeat spells are interrupted if they are not finished or delayed
4334 if (m_currentSpells[CURRENT_AUTOREPEAT_SPELL] && (!spell_id || m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_spellInfo->Id == spell_id))
4335 InterruptSpell(CURRENT_AUTOREPEAT_SPELL, withDelayed, withInstant, bySelf);
4336
4337 // channeled spells are interrupted if they are not finished, even if they are delayed
4338 if (m_currentSpells[CURRENT_CHANNELED_SPELL] && (!spell_id || m_currentSpells[CURRENT_CHANNELED_SPELL]->m_spellInfo->Id == spell_id))
4339 InterruptSpell(CURRENT_CHANNELED_SPELL, true, true, bySelf);
4340}

References CURRENT_AUTOREPEAT_SPELL, CURRENT_CHANNELED_SPELL, CURRENT_GENERIC_SPELL, InterruptSpell(), and m_currentSpells.

Referenced by _EnterVehicle(), PetAI::_stopAttack(), Player::ActivateSpec(), npc_dark_nucleus::npc_dark_nucleusAI::AttackStart(), CleanupBeforeRemoveFromMap(), CombatStop(), boss_julianne::DamageTaken(), boss_onyxia::DamageTaken(), boss_jedoga_shadowseeker::DamageTaken(), boss_algalon_the_observer::DamageTaken(), boss_hodir::DamageTaken(), npc_ulduar_leviathan_mkii::DamageTaken(), npc_ulduar_vx001::DamageTaken(), npc_ulduar_aerial_command_unit::DamageTaken(), npc_ulduar_arachnopod_destroyer::DamageTaken(), boss_ingvar_the_plunderer::DamageTaken(), npc_vrykul_skeleton::DamageTaken(), boss_taerar::boss_taerarAI::DamageTaken(), npc_molten_golem::DamageTaken(), boss_the_lich_king::boss_the_lich_kingAI::DamageTaken(), npc_warden_mellichar::npc_warden_mellicharAI::DamageTaken(), boss_yoggsaron_crusher_tentacle::DamageTaken(), DealDamage(), boss_leotheras_the_blind::DemonTime(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::DoAction(), boss_algalon_the_observer::DoAction(), boss_akilzon::DoAction(), npc_medivh_bm::DoAction(), boss_thorim_sif::DoAction(), boss_nazan::DoAction(), npc_ranshalla::npc_ranshallaAI::DoContinueEscort(), Spell::EffectKnockBack(), boss_leotheras_the_blind::ElfTime(), boss_felblood_kaelthas::GravityLapseSequence(), spell_dk_death_grip::HandleBaseDummy(), WorldSession::HandleCancelCastOpcode(), spell_magtheridon_shadow_grasp::HandleDummyRemove(), spell_novos_crystal_handler_death_aura::HandleEffectApply(), spell_hydross_cleansing_field_command::HandleEffectRemove(), AuraEffect::HandleFeignDeath(), WorldSession::HandleLootOpcode(), WorldSession::HandlePetActionHelper(), spell_the_lich_king_jump::HandleScript(), boss_shade_of_aran::JustEngagedWith(), npc_kilrek::JustEngagedWith(), boss_archimonde::JustEngagedWith(), boss_infinite_corruptor::boss_infinite_corruptorAI::JustEngagedWith(), boss_taldaram::JustEngagedWith(), npc_frostwing_vrykul::npc_frostwing_vrykulAI::JustEngagedWith(), boss_urom::boss_uromAI::JustEngagedWith(), boss_thorim_runic_colossus::JustEngagedWith(), boss_kelidan_the_breaker::JustEngagedWith(), boss_curator::JustEngagedWith(), boss_baltharus_the_warborn::boss_baltharus_the_warbornAI::JustEngagedWith(), boss_novos::JustEngagedWith(), boss_gal_darah::JustEngagedWith(), boss_runemaster_molgeim::JustEngagedWith(), boss_stormcaller_brundir::JustEngagedWith(), violet_hold_trashAI::JustEngagedWith(), npc_risen_archmage::npc_risen_archmageAI::JustEnteredCombat(), PetAI::KilledUnit(), npc_hor_leader_second::npc_hor_leader_secondAI::MoveToNextStopPoint(), boss_shade_of_aran::OnPowerUpdate(), boss_jeklik::PathEndReached(), npc_akama_illidan::PathEndReached(), PretendToDie(), boss_alar::PretendToDie(), SmartScript::ProcessAction(), RemoveAurasWithInterruptFlags(), boss_curator::Reset(), boss_malchezaar::Reset(), boss_varos::boss_varosAI::Reset(), npc_q24545_lich_king::npc_q24545_lich_kingAI::Reset(), boss_talon_king_ikiss::Reset(), boss_high_astromancer_solarian::Reset(), boss_high_botanist_freywinn::ResumeEncounter(), boss_illidan_stormrage::ScheduleAbilities(), boss_the_lurker_below::SchedulerPhaseOne(), npc_putricide_oozeAI::SelectNewTarget(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::SelectNewTarget(), boss_anomalus::SetData(), setDeathState(), npc_cult_fanatic::npc_cult_fanaticAI::SpellHit(), npc_cult_adherent::npc_cult_adherentAI::SpellHit(), boss_razorscale::SpellHit(), boss_flame_leviathan::SpellHit(), StopAttackFaction(), Player::TeleportTo(), CasterAI::UpdateAI(), TotemAI::UpdateAI(), boss_ragnaros::UpdateAI(), npc_scholomance_occultist::npc_scholomance_occultistAI::UpdateAI(), boss_paletress::boss_paletressAI::UpdateAI(), npc_hor_lich_king::UpdateAI(), boss_ick::boss_ickAI::UpdateAI(), npc_dark_nucleus::npc_dark_nucleusAI::UpdateAI(), boss_the_lich_king::boss_the_lich_kingAI::UpdateAI(), boss_malygos::UpdateAI(), boss_stormcaller_brundir::UpdateAI(), boss_mimiron::UpdateAI(), boss_ymiron::boss_ymironAI::UpdateAI(), boss_ichoron::UpdateAI(), npc_lord_arete::npc_lord_areteAI::UpdateAI(), npc_warden_mellichar::npc_warden_mellicharAI::UpdateAI(), npc_pet_hunter_snake_trap::UpdateAI(), npc_pet_mage_mirror_image::UpdateAI(), and PetAI::UpdateAI().

◆ InterruptSpell()

void Unit::InterruptSpell ( CurrentSpellTypes  spellType,
bool  withDelayed = true,
bool  withInstant = true,
bool  bySelf = false 
)
4256{
4257 //LOG_DEBUG("entities.unit", "Interrupt spell for unit {}.", GetEntry());
4258 Spell* spell = m_currentSpells[spellType];
4259 if (spell
4260 && (withDelayed || spell->getState() != SPELL_STATE_DELAYED)
4261 && (withInstant || spell->GetCastTime() > 0 || spell->getState() == SPELL_STATE_CASTING)) // xinef: or spell is in casting state (channeled spells only)
4262 {
4263 // for example, do not let self-stun aura interrupt itself
4264 if (!spell->IsInterruptable())
4265 return;
4266
4267 // send autorepeat cancel message for autorepeat spells
4268 if (spellType == CURRENT_AUTOREPEAT_SPELL)
4269 if (IsPlayer())
4271
4272 if (spell->getState() != SPELL_STATE_FINISHED)
4273 spell->cancel(bySelf);
4274 else
4275 {
4276 m_currentSpells[spellType] = nullptr;
4277 spell->SetReferencedFromCurrent(false);
4278 }
4279
4280 if (IsCreature() && IsAIEnabled)
4281 ToCreature()->AI()->OnSpellFailed(spell->GetSpellInfo());
4282 }
4283}
@ SPELL_STATE_DELAYED
Definition Spell.h:241
virtual void OnSpellFailed(SpellInfo const *)
Definition CreatureAI.h:174
void SendAutoRepeatCancel(Unit *target)
Definition PlayerMisc.cpp:153
SpellInfo const * GetSpellInfo() const
Definition Spell.h:593
bool IsInterruptable() const
Definition Spell.h:577
int32 GetCastTime() const
Definition Spell.h:562
uint32 getState() const
Definition Spell.h:496
void cancel(bool bySelf=false)
Definition Spell.cpp:3654

References Creature::AI(), Spell::cancel(), CURRENT_AUTOREPEAT_SPELL, Spell::GetCastTime(), Spell::GetSpellInfo(), Spell::getState(), IsAIEnabled, Object::IsCreature(), Spell::IsInterruptable(), Object::IsPlayer(), m_currentSpells, CreatureAI::OnSpellFailed(), Player::SendAutoRepeatCancel(), Spell::SetReferencedFromCurrent(), SPELL_STATE_CASTING, SPELL_STATE_DELAYED, SPELL_STATE_FINISHED, Object::ToCreature(), and Object::ToPlayer().

Referenced by _UpdateAutoRepeatSpell(), Player::ActivateTaxiPathTo(), Attack(), AttackStop(), CastStop(), Spell::EffectInterruptCast(), Spell::EffectSanctuary(), AuraEffect::HandleAuraModSilence(), WorldSession::HandleCancelAuraOpcode(), WorldSession::HandleCancelAutoRepeatSpellOpcode(), WorldSession::HandleCancelCastOpcode(), WorldSession::HandleCancelChanneling(), spell_hun_scatter_shot::HandleDummy(), AuraEffect::HandleFeignDeath(), InterruptNonMeleeSpells(), SmartAI::JustEngagedWith(), Player::RemoveItemDependentAurasAndCasts(), SetCurrentCastedSpell(), npc_blackhand_incarcerator::SetData(), boss_nightbane::TriggerHealthTakeOff(), and npc_belnistrasz::npc_belnistraszAI::UpdateAI().

◆ InvalidateValuesUpdateCache()

void Unit::InvalidateValuesUpdateCache ( )
inlineprivate
2223{ _valuesUpdateCache.clear(); }

References _valuesUpdateCache.

Referenced by SetUInt32Value(), and Update().

◆ IsAlive()

bool Unit::IsAlive ( ) const
inline
1794{ return (m_deathState == DeathState::Alive); };

References Alive, and m_deathState.

Referenced by _CreateAuraApplication(), CreatureAI::_EnterEvadeMode(), _EnterVehicle(), _IsValidAssistTarget(), _IsValidAttackTarget(), Player::_LoadItem(), BossAI::_Reset(), WorldBossAI::_Reset(), KillRewarder::_RewardHonor(), KillRewarder::_RewardKillCredit(), KillRewarder::_RewardXP(), PetAI::_stopAttack(), AddAura(), Battleground::AddPlayer(), Map::AddPlayerToMap(), Spell::AddUnitTarget(), Creature::AtDisengage(), Attack(), PetAI::AttackedBy(), AttackerStateUpdate(), boss_freya::boss_freya(), boss_hodir::boss_hodir(), boss_mimiron::boss_mimiron(), boss_thorim::boss_thorim(), WorldSession::BuildPartyMemberStatsChangedPacket(), Player::BuyItemFromVendorSlot(), CalcAbsorbResist(), CalculateMeleeDamage(), CalculateSpellDamageTaken(), Creature::CallForHelp(), instance_ruins_of_ahnqiraj::instance_ruins_of_ahnqiraj_InstanceMapScript::CallNextRajaxxLeader(), Creature::CanAssistTo(), PetAI::CanAttack(), CombatManager::CanBeginCombat(), Player::CanCaptureTowerPoint(), CanHaveThreatList(), Player::CanInteractWithQuestGiver(), CreatureGroup::CanLeaderStartMoving(), Player::CanUseAmmo(), Player::CanUseBattlegroundObject(), Player::CanUseItem(), Player::CastItemCombatSpell(), Player::CheckAreaExploreAndOutdoor(), spell_q12237_rescue_villager::CheckCast(), spell_dk_raise_ally::CheckCast(), spell_hun_check_pet_los::CheckCast(), spell_hun_pet_heart_of_the_phoenix::CheckCast(), spell_hun_bestial_wrath::CheckCast(), Spell::CheckCast(), boss_gothik::boss_gothikAI::CheckGroupSplitted(), BattlegroundRV::CheckPositionForUnit(), spell_mage_focus_magic::CheckProc(), spell_dk_blood_caked_blade::CheckProc(), spell_dk_dancing_rune_weapon::CheckProc(), spell_item_necrotic_touch::CheckProc(), spell_pal_seal_of_righteousness::CheckProc(), spell_warl_siphon_life::CheckProc(), spell_putricide_mutation_init::CheckRequirementInternal(), boss_heigan::CheckSafetyDance(), SpellInfo::CheckTarget(), instance_blackrock_depths::CheckTombReset(), CreatureUnitRelocationWorker(), DealDamage(), DealDamageMods(), DealMeleeDamage(), DealSpellDamage(), npc_weegli_blastfuse::npc_weegli_blastfuseAI::DestroyDoor(), Creature::DisappearAndDie(), npc_thrall_warchief::npc_thrall_warchiefAI::DoAction(), npc_xerestrasza::npc_xerestraszaAI::DoAction(), npc_crok_scourgebane::npc_crok_scourgebaneAI::DoAction(), boss_sister_svalna::boss_sister_svalnaAI::DoAction(), boss_high_king_maulgar::DoAction(), npc_pos_martin_or_gorkun_second::npc_pos_martin_or_gorkun_secondAI::DoAction(), boss_infinite_corruptor::boss_infinite_corruptorAI::DoAction(), boss_tharon_ja::boss_tharon_jaAI::DoAction(), boss_thaddius_summon::boss_thaddius_summonAI::DoAction(), boss_xt002::DoAction(), boss_ichoron::DoAction(), Spell::DoAllEffectOnTarget(), spell_hun_masters_call::DoCheckCast(), RandomMovementGenerator< T >::DoInitialize(), WorldSession::DoLootRelease(), WaypointMovementGenerator< Creature >::DoUpdate(), instance_blackrock_spire::Dragonspireroomcheck(), Spell::EffectAddExtraAttacks(), Spell::EffectEnergize(), Spell::EffectEnergizePct(), Spell::EffectEnvironmentalDMG(), Spell::EffectFeedPet(), Spell::EffectHeal(), Spell::EffectHealMaxHealth(), Spell::EffectHealMechanical(), Spell::EffectHealPct(), Spell::EffectHealthLeech(), Spell::EffectInstaKill(), Spell::EffectInterruptCast(), Spell::EffectPowerBurn(), Spell::EffectPowerDrain(), Spell::EffectResurrect(), Spell::EffectResurrectNew(), Spell::EffectResurrectPet(), Spell::EffectSchoolDMG(), Spell::EffectScriptEffect(), Spell::EffectSelfResurrect(), Spell::EffectSkinPlayerCorpse(), Spell::EffectStuck(), Spell::EffectThreat(), Spell::EffectWeaponDmg(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::EnterEvadeMode(), npc_tirion_fordring_tft::npc_tirion_fordringAI::EnterEvadeMode(), GuardAI::EnterEvadeMode(), boss_doomrel::EnterEvadeMode(), npc_pos_freed_slave::npc_pos_freed_slaveAI::EnterEvadeMode(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::EnterEvadeMode(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::EnterEvadeMode(), gunship_npc_AI::EnterEvadeMode(), npc_gunship_boarding_addAI::EnterEvadeMode(), npc_terenas_menethil::npc_terenas_menethilAI::EnterEvadeMode(), npc_pet_mage_mirror_image::EnterEvadeMode(), Player::EnvironmentalDamage(), Player::EquipItem(), BattleExperienceEvent::Execute(), DelayedMovementEvent::Execute(), IceTombSummonEvent::Execute(), SACActivateEvent::Execute(), boss_sartharion_tenebron::ExecuteEvent(), boss_erekem::ExecuteEvent(), TimedFleeingMovementGenerator::Finalize(), AssistanceMovementGenerator::Finalize(), Creature::ForcedDespawn(), CreatureGroup::FormationReset(), boss_krik_thir::boss_krik_thirAI::GetData(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::GetData(), GetDebugInfo(), Player::GetInitialVisiblePackets(), FollowerAI::GetLeaderForFollower(), Player::getMaxTimer(), CreatureGroup::GetNewTargetForMember(), Player::GetNPCIfCanInteractWith(), GetPartyMembers(), npc_air_force_bots::npc_air_force_botsAI::GetSummonedGuard(), Pet::GivePetXP(), Player::GiveXP(), go_wind_stone::go_wind_stoneAI::GossipSelect(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::GoToMinchar(), BattlegroundEY::HandleAreaTrigger(), BattlegroundWS::HandleAreaTrigger(), WorldSession::HandleAreaTriggerOpcode(), AuraEffect::HandleAuraDummy(), AuraEffect::HandleAuraModIncreaseHealthPercent(), AuraEffect::HandleAuraModTotalThreat(), WorldSession::HandleAutostoreLootItemOpcode(), WorldSession::HandleBattleFieldPortOpcode(), misc_commandscript::HandleDamageCommand(), debug_commandscript::HandleDebugThreatListCommand(), misc_commandscript::HandleDieCommand(), Player::HandleDrowning(), spell_dred_raptor_call::HandleDummy(), spell_herald_volzaj_insanity::HandleDummyEffect(), spell_rog_prey_on_the_weak::HandleEffectPeriodic(), WorldSession::HandleEmoteOpcode(), Player::HandleFall(), misc_commandscript::HandleFreezeCommand(), spell_chapter5_return_to_capital::HandleHit(), WorldSession::HandleInitiateTradeOpcode(), WorldSession::HandleLootMoneyOpcode(), WorldSession::HandleMessagechatOpcode(), AuraEffect::HandleModDetaunt(), AuraEffect::HandleModTaunt(), AuraEffect::HandleModTotalPercentStat(), npc_commandscript::HandleNpcMoveCommand(), npc_commandscript::HandleNpcSetMoveTypeCommand(), npc_commandscript::HandleNpcSetWanderDistanceCommand(), AuraEffect::HandleObsModPowerAuraTick(), WorldSession::HandleOpenItemOpcode(), AuraEffect::HandlePeriodicDamageAurasTick(), AuraEffect::HandlePeriodicEnergizeAuraTick(), AuraEffect::HandlePeriodicHealAurasTick(), AuraEffect::HandlePeriodicHealthFunnelAuraTick(), AuraEffect::HandlePeriodicHealthLeechAuraTick(), AuraEffect::HandlePeriodicManaLeechAuraTick(), AuraEffect::HandlePeriodicPowerBurnAuraTick(), WorldSession::HandlePetAction(), WorldSession::HandlePetCancelAuraOpcode(), WorldSession::HandlePetStopAttack(), misc_commandscript::HandlePInfoCommand(), spell_item_mana_drain::HandleProc(), spell_pal_seal_of_command_aura::HandleProc(), spell_gen_black_bow_of_the_betrayer::HandleProc(), WorldSession::HandleReclaimCorpseOpcode(), WorldSession::HandleRepopRequestOpcode(), WorldSession::HandleRequestPartyMemberStatsOpcode(), ArenaSpectator::HandleResetCommand(), WorldSession::HandleSetAmmoOpcode(), WorldSession::HandleSetRaidDifficultyOpcode(), misc_commandscript::HandleSkirmishCommand(), ArenaSpectator::HandleSpectatorSpectateCommand(), ArenaSpectator::HandleSpectatorWatchCommand(), AuraEffect::HandleSpiritOfRedemption(), WorldSession::HandleStablePet(), WorldSession::HandleStableSwapPet(), WorldSession::HandleSummonResponseOpcode(), WorldSession::HandleUnstablePet(), boss_prince_keleseth_icc::boss_prince_kelesethAI::InitializeAI(), boss_prince_taldaram_icc::boss_prince_taldaramAI::InitializeAI(), boss_prince_valanar_icc::boss_prince_valanarAI::InitializeAI(), boss_moroes::InitializeGuests(), Player::IsAtGroupRewardDistance(), Player::IsAtRecruitAFriendDistance(), Creature::IsInvisibleDueToDespawn(), Player::IsOutdoorPvPActive(), Player::IsPetNeedBeTemporaryUnsummoned(), isTargetableForAttack(), IsValidCombatTarget(), Spell::IsValidDeadOrAliveTarget(), npc_kilrek::JustDied(), boss_rajaxx::JustDied(), boss_twilight_halion::boss_twilight_halionAI::JustDied(), boss_sartharion::JustEngagedWith(), boss_freya::JustEngagedWith(), npc_underbat::JustEngagedWith(), CreatureAI::JustExitedCombat(), npc_green_dragon_combat_trigger::npc_green_dragon_combat_triggerAI::JustExitedCombat(), boss_fathomlord_karathress::JustReachedHome(), npc_kiljaeden_controller::JustSummoned(), boss_rotface::boss_rotfaceAI::JustSummoned(), Kill(), boss_anetheron::KilledUnit(), boss_azgalor::KilledUnit(), boss_kazrogal::KilledUnit(), boss_rage_winterchill::KilledUnit(), boss_hadronox::KilledUnit(), boss_gluth::boss_gluthAI::KilledUnit(), CreatureGroup::LeaderStartedMoving(), Player::LoadCorpse(), GridObjectLoader::LoadCreatures(), Player::LoadFromDB(), MagicSpellHitResult(), AchievementCriteriaData::Meets(), CreatureGroup::MemberEngagingTarget(), CreatureGroup::MemberEvaded(), npc_twiggy_flathead::npc_twiggy_flatheadAI::MoveInLineOfSight(), boss_lord_marrowgar::MoveInLineOfSight(), npc_icc_valkyr_herald::npc_icc_valkyr_heraldAI::MoveInLineOfSight(), boss_kelthuzad::boss_kelthuzadAI::MoveInLineOfSight(), npc_scion_of_eternity::npc_scion_of_eternity(), instance_blackrock_depths::OnCreatureCreate(), instance_karazhan::instance_karazhan_InstanceMapScript::OnCreatureCreate(), instance_sunken_temple::instance_sunken_temple_InstanceMapScript::OnCreatureCreate(), instance_uldaman::instance_uldaman_InstanceMapScript::OnCreatureCreate(), instance_temple_of_ahnqiraj::instance_temple_of_ahnqiraj_InstanceMapScript::OnCreatureCreate(), instance_halls_of_reflection::OnCreatureCreate(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnCreatureCreate(), instance_shadow_labyrinth::instance_shadow_labyrinth_InstanceMapScript::OnCreatureCreate(), go_palehoof_sphere::OnGossipHello(), go_jotunheim_cage::OnGossipHello(), go_dragonflayer_cage::OnGossipHello(), CreatureAI::OnOwnerCombatInteraction(), spell_yogg_saron_brain_link_aura::OnPeriodic(), instance_eye_of_eternity::OnPlayerEnter(), instance_violet_hold::instance_violet_hold_InstanceMapScript::OnPlayerEnter(), spell_malygos_vortex_visual::OnRemove(), at_orb_of_command::OnTrigger(), at_ancient_leaf::OnTrigger(), at_naxxramas_hub_portal::OnTrigger(), AreaTrigger_at_celestial_planetarium_enterance::OnTrigger(), AreaTrigger_at_legion_teleporter::OnTrigger(), AreaTrigger_at_nats_landing::OnTrigger(), AreaTrigger_at_sentry_point::OnTrigger(), SmartTrigger::OnTrigger(), AreaTrigger_at_area_52_entrance::OnTrigger(), at_dragonspire_hall::OnTrigger(), at_blackrock_stadium::OnTrigger(), near_scarshield_infiltrator::OnTrigger(), at_scarshield_infiltrator::OnTrigger(), at_commander_dawnforge::OnTrigger(), RisenArchmageCheck::operator()(), WretchedGhoulCleaner::operator()(), ValithriaDespawner::operator()(), Acore::AnyDeadUnitObjectInRangeCheck::operator()(), Acore::NearestCreatureEntryWithLiveStateInObjectRangeCheck::operator()(), Acore::PlayerAtMinimumRangeAway::operator()(), Acore::AnyDeadUnitObjectInRangeCheck::operator()(), Acore::AnyPlayerInObjectRangeCheck::operator()(), Acore::NearestPlayerInObjectRangeCheck::operator()(), Acore::MostHPMissingInRange::operator()(), Acore::MostHPPercentMissingInRange::operator()(), Acore::FriendlyCCedInRange::operator()(), Acore::FriendlyMissingBuffInRange::operator()(), Acore::AnyUnfriendlyUnitInObjectRangeCheck::operator()(), Acore::AnyUnfriendlyNoTotemUnitInObjectRangeCheck::operator()(), Acore::NearestAttackableNoTotemUnitInObjectRangeCheck::operator()(), Acore::AnyFriendlyUnitInObjectRangeCheck::operator()(), Acore::AnyFriendlyNotSelfUnitInObjectRangeCheck::operator()(), Acore::AnyGroupedUnitInObjectRangeCheck::operator()(), Acore::AnyUnitInObjectRangeCheck::operator()(), Acore::AnyAttackableUnitExceptForOriginalCasterInObjectRangeCheck::operator()(), Acore::AnyDeadUnitCheck::operator()(), Acore::AllFriendlyCreaturesInGrid::operator()(), Acore::MostHPMissingGroupInRange::operator()(), FrostwingVrykulSearcher::operator()(), Acore::AllDeadCreaturesInRange::operator()(), ShadowTrapLKTargetSelector::operator()(), NonTankLKTargetSelector::operator()(), DefileTargetSelector::operator()(), Acore::AnyUnfriendlyAttackableVisibleUnitInObjectRangeCheck::operator()(), PetAI::OwnerAttacked(), npc_pet_dk_army_of_the_dead::OwnerAttacked(), npc_pet_gen_valkyr_guardian::OwnerAttacked(), PetAI::OwnerAttackedBy(), npc_pet_dk_army_of_the_dead::OwnerAttackedBy(), npc_eoe_wyrmrest_skytalon::PassengerBoarded(), boss_kologarn::PassengerBoarded(), MapMgr::PlayerCannotEnter(), SmartScript::ProcessAction(), ProcSkillsAndAuras(), RemoveCharmedBy(), Group::RemoveMember(), Battleground::RemovePlayerAtLeave(), Player::RepopAtGraveyard(), boss_kiljaeden::Reset(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::Reset(), boss_fathomlord_karathress::Reset(), instance_blood_furnace::instance_blood_furnace_InstanceMapScript::ResetPrisoner(), Creature::Respawn(), Player::RewardPlayerAndGroupAtEvent(), BossAI::ScheduleEnrageTimer(), boss_gluth::boss_gluthAI::SelectPlayerInRoom(), Player::SendLoot(), npc_corrupted_totem::SetAura(), instance_naxxramas::SetBossState(), SetConfused(), boss_emperor_dagran_thaurissan::SetData(), instance_scarlet_monastery::instance_scarlet_monastery_InstanceMapScript::SetData(), instance_halls_of_reflection::SetData(), npc_enslaved_proto_drake::SetData(), npc_pos_tyrannus_events::npc_pos_tyrannus_eventsAI::SetData(), boss_teron_gorefiend::SetData(), Player::setDeathState(), SetFeared(), SetHover(), SetStunned(), Battlefield::ShowNpc(), npc_dark_iron_guzzler::SpellHit(), npc_injured_patient::npc_injured_patientAI::SpellHit(), npc_hor_lich_king::SpellHitTarget(), npc_oculus_drake::npc_oculus_drakeAI::SpellHitTarget(), WaypointMovementGenerator< Creature >::StartMove(), PassengerController::SummonCreatures(), boss_rend_blackhand::SummonedCreatureDespawn(), boss_priestess_delrissa::SummonedCreatureDies(), Player::SwapItem(), lfg::LFGMgr::TeleportPlayer(), BattlegroundRV::TeleportUnitToNewZ(), Pet::Update(), instance_stratholme::instance_stratholme_InstanceMapScript::Update(), instance_halls_of_reflection::Update(), Creature::Update(), TempSummon::Update(), Puppet::Update(), Player::Update(), Totem::Update(), Update(), TimedFleeingMovementGenerator::Update(), TotemAI::UpdateAI(), SmartAI::UpdateAI(), go_blood_drenched_door::go_blood_drenched_doorAI::UpdateAI(), npc_a_special_surprise::npc_a_special_surpriseAI::UpdateAI(), npc_dark_iron_guzzler::UpdateAI(), npc_twiggy_flathead::npc_twiggy_flatheadAI::UpdateAI(), boss_gormok::boss_gormokAI::UpdateAI(), npc_pos_leader::npc_pos_leaderAI::UpdateAI(), npc_bone_spike::npc_bone_spikeAI::UpdateAI(), npc_ice_tomb::npc_ice_tombAI::UpdateAI(), npc_risen_archmage::npc_risen_archmageAI::UpdateAI(), boss_gothik::boss_gothikAI::UpdateAI(), boss_malygos::UpdateAI(), boss_sjonnir_malformed_ooze::boss_sjonnir_malformed_oozeAI::UpdateAI(), boss_runemaster_molgeim::UpdateAI(), boss_vezax::UpdateAI(), boss_ignis::UpdateAI(), npc_ulduar_arachnopod_destroyer::UpdateAI(), npc_vrykul_skeleton::UpdateAI(), npc_pet_mage_mirror_image::UpdateAI(), npc_injured_patient::npc_injured_patientAI::UpdateAI(), PetAI::UpdateAI(), npc_gunship::npc_gunshipAI::UpdateAI(), npc_tooga::npc_toogaAI::UpdateFollowerAI(), npc_ringo::npc_ringoAI::UpdateFollowerAI(), InstanceScript::UpdateMinionState(), Creature::UpdateMovementFlags(), boss_netherspite::UpdatePortals(), boss_twin_valkyrAI::UpdateSharedHealth(), UpdateSplineMovement(), CreatureAI::UpdateVictim(), Player::UpdateZone(), instance_eye_of_eternity::VortexHandling(), and npc_ancestral_wolf::npc_ancestral_wolfAI::WaypointReached().

◆ IsAlwaysDetectableFor()

bool Unit::IsAlwaysDetectableFor ( WorldObject const *  seer) const
overrideprotectedvirtual

Reimplemented from WorldObject.

11096{
11098 return true;
11099
11100 if (HasAuraTypeWithCaster(SPELL_AURA_MOD_STALKED, seer->GetGUID()))
11101 return true;
11102
11103 if (Player* ownerPlayer = GetSpellModOwner())
11104 if (Player const* seerPlayer = seer->ToPlayer())
11105 {
11106 if (ownerPlayer->IsGroupVisibleFor(seerPlayer))
11107 return true;
11108 }
11109
11110 return false;
11111}
@ SPELL_AURA_MOD_STALKED
Definition SpellAuraDefines.h:131
virtual bool IsAlwaysDetectableFor(WorldObject const *) const
Definition Object.h:765

References Object::GetGUID(), GetSpellModOwner(), HasAuraTypeWithCaster(), WorldObject::IsAlwaysDetectableFor(), SPELL_AURA_MOD_STALKED, and Object::ToPlayer().

Referenced by Creature::IsAlwaysDetectableFor(), and Player::IsAlwaysDetectableFor().

◆ IsAlwaysVisibleFor()

bool Unit::IsAlwaysVisibleFor ( WorldObject const *  seer) const
overrideprotectedvirtual

: Check if unit is eligible for sparring damages. Work only if attacker and victim are creatures.

Reimplemented from WorldObject.

11077{
11079 return true;
11080
11081 // Always seen by owner
11082 if (ObjectGuid guid = GetCharmerOrOwnerGUID())
11083 if (seer->GetGUID() == guid)
11084 return true;
11085
11086 if (Player const* seerPlayer = seer->ToPlayer())
11087 if (Unit* owner = GetOwner())
11088 if (Player* ownerPlayer = owner->ToPlayer())
11089 if (ownerPlayer->IsGroupVisibleFor(seerPlayer))
11090 return true;
11091
11092 return false;
11093}
virtual bool IsAlwaysVisibleFor(WorldObject const *) const
Definition Object.h:762

References GetCharmerOrOwnerGUID(), Object::GetGUID(), GetOwner(), WorldObject::IsAlwaysVisibleFor(), and Object::ToPlayer().

◆ IsArmorer()

bool Unit::IsArmorer ( ) const
inline
@ UNIT_NPC_FLAG_REPAIR
Definition UnitDefines.h:334
bool HasNpcFlag(NPCFlags flags) const
Definition Unit.h:763

References HasNpcFlag(), and UNIT_NPC_FLAG_REPAIR.

◆ isAttackingPlayer()

bool Unit::isAttackingPlayer ( ) const
7541{
7543 return true;
7544
7545 if (!m_Controlled.empty())
7546 for (ControlSet::const_iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr)
7547 if ((*itr)->isAttackingPlayer())
7548 return true;
7549
7550 for (uint8 i = 0; i < MAX_SUMMON_SLOT; ++i)
7551 if (m_SummonSlot[i])
7552 if (Creature* summon = GetMap()->GetCreature(m_SummonSlot[i]))
7553 if (summon->isAttackingPlayer())
7554 return true;
7555
7556 return false;
7557}
Creature * GetCreature(ObjectGuid const &guid)
Definition Map.cpp:2350

References Map::GetCreature(), WorldObject::GetMap(), HasUnitState(), m_Controlled, m_SummonSlot, MAX_SUMMON_SLOT, and UNIT_STATE_ATTACK_PLAYER.

◆ isAttackReady()

◆ IsAttackSpeedOverridenShapeShift()

bool Unit::IsAttackSpeedOverridenShapeShift ( ) const
15498{
15499 // Mirroring clientside gameplay logic
15500 if (ShapeshiftForm form = GetShapeshiftForm())
15501 if (SpellShapeshiftFormEntry const* entry = sSpellShapeshiftFormStore.LookupEntry(form))
15502 return entry->attackSpeed > 0;
15503
15504 return false;
15505}

References GetShapeshiftForm(), and sSpellShapeshiftFormStore.

Referenced by Player::CalculateMinMaxDamage().

◆ IsAuctioner()

bool Unit::IsAuctioner ( ) const
inline
@ UNIT_NPC_FLAG_AUCTIONEER
Definition UnitDefines.h:343

References HasNpcFlag(), and UNIT_NPC_FLAG_AUCTIONEER.

◆ IsBanker()

bool Unit::IsBanker ( ) const
inline
@ UNIT_NPC_FLAG_BANKER
Definition UnitDefines.h:339

References HasNpcFlag(), and UNIT_NPC_FLAG_BANKER.

◆ IsBattleMaster()

bool Unit::IsBattleMaster ( ) const
inline

◆ isBeingLoaded()

virtual bool Unit::isBeingLoaded ( ) const
inlinevirtual

Reimplemented in Pet, and Player.

702{ return false;}

Referenced by Player::SetMover().

◆ isBlockCritical()

bool Unit::isBlockCritical ( )
3311{
3313 return true;
3314 return false;
3315}
@ SPELL_AURA_MOD_BLOCK_CRIT_CHANCE
Definition SpellAuraDefines.h:316

References GetTotalAuraModifier(), roll_chance_i(), and SPELL_AURA_MOD_BLOCK_CRIT_CHANCE.

Referenced by CalculateMeleeDamage(), and CalculateSpellDamageTaken().

◆ IsCharmed()

◆ IsCharmedOwnedByPlayerOrPlayer()

◆ IsClass()

◆ IsClientControlled()

bool Unit::IsClientControlled ( Player const *  exactClient = nullptr) const
17393{
17394 // Severvide method to check if unit is client controlled (optionally check for specific client in control)
17395
17396 // Applies only to player controlled units
17398 return false;
17399
17400 // These flags are meant to be used when server controls this unit, client control is taken away
17402 return false;
17403
17404 // If unit is possessed, it has lost original control...
17405 if (ObjectGuid const& guid = GetCharmerGUID())
17406 {
17407 // ... but if it is a possessing charm, then we have to check if some other player controls it
17408 if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_POSSESSED) && guid.IsPlayer())
17409 return (exactClient ? (exactClient->GetGUID() == guid) : true);
17410 return false;
17411 }
17412
17413 // By default: players have client control over themselves
17414 if (IsPlayer())
17415 return (exactClient ? (exactClient == this) : true);
17416 return false;
17417}
@ UNIT_FLAG_CONFUSED
Definition UnitDefines.h:279
@ UNIT_FLAG_DISABLE_MOVE
Definition UnitDefines.h:259
@ UNIT_FLAG_FLEEING
Definition UnitDefines.h:280

References GetCharmerGUID(), Object::GetGUID(), Object::HasFlag(), Object::IsPlayer(), UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED, UNIT_FLAG_DISABLE_MOVE, UNIT_FLAG_FLEEING, UNIT_FLAG_PLAYER_CONTROLLED, and UNIT_FLAG_POSSESSED.

Referenced by GetClientControlling(), SetCanFly(), SetDisableGravity(), SetFeatherFall(), SetHover(), SetSpeed(), and SetWaterWalking().

◆ IsCombatDisallowed()

bool Unit::IsCombatDisallowed ( ) const
inline
968{ return _isCombatDisallowed; }

References _isCombatDisallowed.

Referenced by CombatManager::CanBeginCombat().

◆ IsContestedGuard()

bool Unit::IsContestedGuard ( ) const
inline
1030 {
1031 if (FactionTemplateEntry const* entry = GetFactionTemplateEntry())
1032 return entry->IsContestedGuardFaction();
1033
1034 return false;
1035 }

References GetFactionTemplateEntry().

Referenced by Acore::NearestVisibleDetectableContestedGuardUnitCheck::operator()().

◆ IsControllableGuardian()

bool Unit::IsControllableGuardian ( ) const
inline
@ UNIT_MASK_CONTROLLABLE_GUARDIAN
Definition UnitDefines.h:167

References m_unitTypeMask, and UNIT_MASK_CONTROLLABLE_GUARDIAN.

Referenced by Acore::WorldObjectSpellTargetCheck::operator()().

◆ IsControlledByPlayer()

◆ IsCreatedByPlayer()

bool Unit::IsCreatedByPlayer ( ) const
inline
1308{ return m_CreatedByPlayer; }

References m_CreatedByPlayer.

Referenced by DealDamage().

◆ IsCritter()

◆ IsCrowdControlled()

◆ IsDamageReducedByArmor()

bool Unit::IsDamageReducedByArmor ( SpellSchoolMask  damageSchoolMask,
SpellInfo const *  spellInfo = nullptr,
uint8  effIndex = MAX_SPELL_EFFECTS 
)
static
2206{
2207 // only physical spells damage gets reduced by armor
2208 if ((schoolMask & SPELL_SCHOOL_MASK_NORMAL) == 0)
2209 return false;
2210 if (spellInfo)
2211 {
2212 // there are spells with no specific attribute but they have "ignores armor" in tooltip
2213 if (spellInfo->HasAttribute(SPELL_ATTR0_CU_IGNORE_ARMOR))
2214 return false;
2215
2216 // bleeding effects are not reduced by armor
2217 if (effIndex != MAX_SPELL_EFFECTS)
2218 {
2219 if (spellInfo->Effects[effIndex].ApplyAuraName == SPELL_AURA_PERIODIC_DAMAGE ||
2220 spellInfo->Effects[effIndex].Effect == SPELL_EFFECT_SCHOOL_DAMAGE)
2221 if (spellInfo->GetEffectMechanicMask(effIndex) & (1ULL << MECHANIC_BLEED))
2222 return false;
2223 }
2224 }
2225 return true;
2226}
@ MECHANIC_BLEED
Definition SharedDefines.h:1328
@ SPELL_ATTR0_CU_IGNORE_ARMOR
Definition SpellInfo.h:192

References SpellInfo::Effects, SpellInfo::GetEffectMechanicMask(), SpellInfo::HasAttribute(), MAX_SPELL_EFFECTS, MECHANIC_BLEED, SPELL_ATTR0_CU_IGNORE_ARMOR, SPELL_AURA_PERIODIC_DAMAGE, SPELL_EFFECT_SCHOOL_DAMAGE, and SPELL_SCHOOL_MASK_NORMAL.

Referenced by CalculateMeleeDamage(), CalculateSpellDamageTaken(), AuraEffect::HandlePeriodicDamageAurasTick(), and AuraEffect::HandlePeriodicHealthLeechAuraTick().

◆ isDead()

bool Unit::isDead ( ) const
inline

References Corpse, Dead, and m_deathState.

Referenced by npc_lord_illidan_stormrage::npc_lord_illidan_stormrageAI::CheckEventFail(), boss_sindragosa::boss_sindragosaAI::DoAction(), npc_spinestalker::npc_spinestalkerAI::DoAction(), npc_rimefang::npc_rimefangAI::DoAction(), Spell::EffectSummonPet(), Player::GiveLevel(), AuraEffect::HandleAuraDummy(), Player::HandleFall(), boss_malygos::HandleIntroSpeech(), misc_commandscript::HandleRespawnCommand(), spell_prince_taldaram_conjure_flame_sphere::HandleScript(), Creature::HasSpellFocus(), UnitAI::InitializeAI(), SmartAI::InitializeAI(), npc_troll_volunteer::npc_troll_volunteerAI::InitializeAI(), npc_spinestalker::npc_spinestalkerAI::InitializeAI(), npc_rimefang::npc_rimefangAI::InitializeAI(), npc_sindragosa_trash::npc_sindragosa_trashAI::InitializeAI(), boss_sister_svalna::boss_sister_svalnaAI::InitializeAI(), npc_ulduar_mimiron_rocket::InitializeAI(), npc_bushwhacker::npc_bushwhackerAI::InitializeAI(), Player::isAllowedToLoot(), npc_anubisath_sentinel::aqsentinelAI::JustDied(), Player::OnGossipSelect(), AreaTrigger_at_stormwright_shelf::OnTrigger(), AreaTrigger_at_scent_larkorwi::OnTrigger(), at_bring_your_orphan_to::OnTrigger(), Player::PrepareGossipMenu(), SmartScript::ProcessAction(), Player::RepopAtGraveyard(), npc_anubisath_sentinel::aqsentinelAI::Reset(), WorldSession::SendAttackStop(), SendMeleeAttackStop(), instance_molten_core::SetBossState(), and npc_snobold_vassal::npc_snobold_vassalAI::UpdateAI().

◆ IsDuringRemoveFromWorld()

◆ isDying()

bool Unit::isDying ( ) const
inline
1795{ return (m_deathState == DeathState::JustDied); };

References JustDied, and m_deathState.

Referenced by Creature::IsInvisibleDueToDespawn().

◆ IsEngaged()

◆ IsEngagedBy()

bool Unit::IsEngagedBy ( Unit const *  who) const
inline
932{ return CanHaveThreatList() ? IsThreatenedBy(who) : IsInCombatWith(who); }
bool IsThreatenedBy(Unit const *who) const
Definition Unit.h:958

References CanHaveThreatList(), IsInCombatWith(), and IsThreatenedBy().

Referenced by Creature::_IsTargetAcceptable(), Creature::CanCreatureAttack(), and UnitAI::EvadeTimerExpired().

◆ IsFalling()

◆ IsFFAPvP()

bool Unit::IsFFAPvP ( ) const
inline

◆ IsFlying()

◆ IsFriendlyTo()

bool Unit::IsFriendlyTo ( Unit const *  unit) const
7270{
7271 return GetReactionTo(unit) >= REP_FRIENDLY;
7272}

References GetReactionTo(), and REP_FRIENDLY.

Referenced by AuraApplication::_InitFlags(), Creature::_IsTargetAcceptable(), SpellInfo::ApplyAllSpellImmunitiesTo(), FollowerAI::AssistPlayerInCombatAgainst(), npc_tapoke_slim_jahn::npc_tapoke_slim_jahnAI::AttackedBy(), Creature::CanAssistTo(), CombatManager::CanBeginCombat(), spell_dk_death_coil::CheckCast(), spell_pal_holy_shock::CheckCast(), spell_pri_penance::CheckCast(), Spell::CheckCast(), spell_pri_glyph_of_dispel_magic::CheckProc(), Spell::DoAllEffectOnTarget(), Spell::DoSpellHitOnUnit(), Spell::EffectDispel(), Spell::EffectDispelMechanic(), Spell::EffectStealBeneficialBuff(), Spell::EffectThreat(), Aura::HandleAuraSpecificMods(), WorldSession::HandleCastSpellOpcode(), spell_dk_death_coil::HandleDummy(), spell_pal_holy_shock::HandleDummy(), spell_pri_penance::HandleDummy(), BattlefieldWG::HandleKill(), Spell::HandleLaunchPhase(), spell_winter_veil_shoot_air_rifle::HandleScriptEffect(), WorldSession::HandleSetSelectionOpcode(), IgnoresSchoolImmunityFromFriendlyCaster(), GameObject::IsAlwaysVisibleFor(), SpellClickInfo::IsFitToRequirements(), IsImmunedToSpellEffect(), npc_draenei_survivor::npc_draenei_survivorAI::MoveInLineOfSight(), Acore::AnyUnfriendlyUnitInObjectRangeCheck::operator()(), Acore::AnyUnfriendlyNoTotemUnitInObjectRangeCheck::operator()(), Acore::AnyFriendlyUnitInObjectRangeCheck::operator()(), Acore::AnyFriendlyNotSelfUnitInObjectRangeCheck::operator()(), Acore::AllFriendlyCreaturesInGrid::operator()(), Acore::AnyUnfriendlyAttackableVisibleUnitInObjectRangeCheck::operator()(), Acore::WorldObjectSpellTargetCheck::operator()(), PetSpellFail(), SmartScript::ProcessEvent(), RemoveCharmedBy(), Spell::SelectExplicitTargets(), Player::SendLoot(), Acore::MessageDistDelivererToHostile::SendPacket(), and TotemAI::UpdateAI().

◆ isFrozen()

◆ IsFullHealth()

bool Unit::IsFullHealth ( ) const
inline

◆ IsGossip()

bool Unit::IsGossip ( ) const
inline
@ UNIT_NPC_FLAG_GOSSIP
Definition UnitDefines.h:322

References HasNpcFlag(), and UNIT_NPC_FLAG_GOSSIP.

◆ IsGuardian()

◆ IsGuildMaster()

bool Unit::IsGuildMaster ( ) const
inline
@ UNIT_NPC_FLAG_PETITIONER
Definition UnitDefines.h:340

References HasNpcFlag(), and UNIT_NPC_FLAG_PETITIONER.

◆ IsHighestExclusiveAura()

bool Unit::IsHighestExclusiveAura ( Aura const *  aura,
bool  removeOtherAuraApplications = false 
)
4586{
4587 for (uint32 i = 0 ; i < MAX_SPELL_EFFECTS; ++i)
4588 if (AuraEffect const* aurEff = aura->GetEffect(i))
4589 if (!IsHighestExclusiveAuraEffect(aura->GetSpellInfo(), aurEff->GetAuraType(), aurEff->GetAmount(), aura->GetEffectMask(), removeOtherAuraApplications))
4590 return false;
4591
4592 return true;
4593}
bool IsHighestExclusiveAuraEffect(SpellInfo const *spellInfo, AuraType auraType, int32 effectAmount, uint8 auraEffectMask, bool removeOtherAuraApplications=false)
Definition Unit.cpp:4595

References Aura::GetEffect(), Aura::GetEffectMask(), Aura::GetSpellInfo(), IsHighestExclusiveAuraEffect(), and MAX_SPELL_EFFECTS.

Referenced by _RemoveNoStackAurasDueToAura().

◆ IsHighestExclusiveAuraEffect()

bool Unit::IsHighestExclusiveAuraEffect ( SpellInfo const *  spellInfo,
AuraType  auraType,
int32  effectAmount,
uint8  auraEffectMask,
bool  removeOtherAuraApplications = false 
)
4596{
4597 AuraEffectList const& auras = GetAuraEffectsByType(auraType);
4598 for (Unit::AuraEffectList::const_iterator itr = auras.begin(); itr != auras.end();)
4599 {
4600 AuraEffect const* existingAurEff = (*itr);
4601 ++itr;
4602
4603 if (sSpellMgr->CheckSpellGroupStackRules(spellInfo, existingAurEff->GetSpellInfo()) == SPELL_GROUP_STACK_RULE_EXCLUSIVE_HIGHEST)
4604 {
4605 int32 diff = abs(effectAmount) - abs(existingAurEff->GetAmount());
4606 if (!diff)
4607 for (int32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
4608 diff += int32((auraEffectMask & (1 << i)) >> i) - int32((existingAurEff->GetBase()->GetEffectMask() & (1 << i)) >> i);
4609
4610 if (diff > 0)
4611 {
4612 Aura const* base = existingAurEff->GetBase();
4613 // no removing of area auras from the original owner, as that completely cancels them
4614 if (removeOtherAuraApplications && (!base->IsArea() || base->GetOwner() != this))
4615 {
4616 if (AuraApplication* aurApp = existingAurEff->GetBase()->GetApplicationOfTarget(GetGUID()))
4617 {
4618 bool hasMoreThanOneEffect = base->HasMoreThanOneEffectForType(auraType);
4619 uint32 removedAuras = m_removedAurasCount;
4620 RemoveAura(aurApp);
4621 if (hasMoreThanOneEffect || m_removedAurasCount > removedAuras)
4622 itr = auras.begin();
4623 }
4624 }
4625 }
4626 else if (diff < 0)
4627 return false;
4628 }
4629 }
4630
4631 return true;
4632}
@ SPELL_GROUP_STACK_RULE_EXCLUSIVE_HIGHEST
Definition SpellMgr.h:366
bool HasMoreThanOneEffectForType(AuraType auraType) const
Definition SpellAuras.cpp:1008
bool IsArea() const
Definition SpellAuras.cpp:1018

References AuraEffect::GetAmount(), Aura::GetApplicationOfTarget(), GetAuraEffectsByType(), AuraEffect::GetBase(), Aura::GetEffectMask(), Object::GetGUID(), Aura::GetOwner(), AuraEffect::GetSpellInfo(), Aura::HasMoreThanOneEffectForType(), Aura::IsArea(), m_removedAurasCount, MAX_SPELL_EFFECTS, RemoveAura(), SPELL_GROUP_STACK_RULE_EXCLUSIVE_HIGHEST, and sSpellMgr.

Referenced by IsHighestExclusiveAura().

◆ IsHostileTo()

◆ IsHostileToPlayers()

bool Unit::IsHostileToPlayers ( ) const
7275{
7276 FactionTemplateEntry const* my_faction = GetFactionTemplateEntry();
7277 if (!my_faction || !my_faction->faction)
7278 return false;
7279
7280 FactionEntry const* raw_faction = sFactionStore.LookupEntry(my_faction->faction);
7281 if (raw_faction && raw_faction->reputationListID >= 0)
7282 return false;
7283
7284 return my_faction->IsHostileToPlayers();
7285}
int32 reputationListID
Definition DBCStructure.h:909
uint32 faction
Definition DBCStructure.h:941
bool IsHostileToPlayers() const
Definition DBCStructure.h:981

References FactionTemplateEntry::faction, GetFactionTemplateEntry(), FactionTemplateEntry::IsHostileToPlayers(), FactionEntry::reputationListID, and sFactionStore.

◆ IsHovering()

bool Unit::IsHovering ( ) const
inline

◆ IsHunterPet()

◆ IsImmobilizedState()

◆ IsImmunedToAuraPeriodicTick()

bool Unit::IsImmunedToAuraPeriodicTick ( Unit const *  caster,
SpellInfo const *  spellInfo 
) const
9992{
9993 if (!spellInfo)
9994 return false;
9995
9996 if (spellInfo->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES) || spellInfo->HasAttribute(SPELL_ATTR2_NO_SCHOOL_IMMUNITIES))
9997 return false;
9998
9999 SpellSchoolMask schoolMask = SpellSchoolMask(spellInfo->GetSchoolMask());
10000 if (schoolMask == SPELL_SCHOOL_MASK_NONE)
10001 return false;
10002
10003 auto hasImmunity = [&](SpellImmuneContainer const& container)
10004 {
10005 uint32 schoolImmunityMask = 0;
10006 for (auto const& [immunitySchoolMask, immunityAuraId] : container)
10007 {
10008 SpellInfo const* immuneAuraInfo = sSpellMgr->GetSpellInfo(immunityAuraId);
10009 if (IgnoresSchoolImmunityFromFriendlyCaster(caster, immunityAuraId, immuneAuraInfo))
10010 continue;
10011
10012 schoolImmunityMask |= immunitySchoolMask;
10013 }
10014
10015 // We need to be immune to all types
10016 return (schoolImmunityMask & schoolMask) == schoolMask;
10017 };
10018
10019 // If m_immuneToSchool type contain this school type, IMMUNE periodic tick.
10020 if (hasImmunity(m_spellImmune[IMMUNITY_SCHOOL]))
10021 return true;
10022
10023 return false;
10024}
@ SPELL_ATTR2_NO_SCHOOL_IMMUNITIES
Definition SharedDefines.h:470
@ IMMUNITY_SCHOOL
Definition SharedDefines.h:1400
@ SPELL_SCHOOL_MASK_NONE
Definition SharedDefines.h:284
bool IgnoresSchoolImmunityFromFriendlyCaster(Unit const *caster, uint32 immunityAuraId, SpellInfo const *immunitySpellInfo) const
Definition Unit.cpp:9838

References SpellInfo::GetSchoolMask(), SpellInfo::HasAttribute(), IgnoresSchoolImmunityFromFriendlyCaster(), IMMUNITY_SCHOOL, m_spellImmune, SPELL_ATTR0_NO_IMMUNITIES, SPELL_ATTR2_NO_SCHOOL_IMMUNITIES, SPELL_SCHOOL_MASK_NONE, and sSpellMgr.

Referenced by Spell::EffectEnergize(), Spell::EffectHealMaxHealth(), AuraEffect::HandleObsModPowerAuraTick(), AuraEffect::HandlePeriodicEnergizeAuraTick(), AuraEffect::HandlePeriodicHealAurasTick(), AuraEffect::HandlePeriodicHealthFunnelAuraTick(), and AuraEffect::HandlePeriodicManaLeechAuraTick().

◆ IsImmunedToDamage() [1/2]

bool Unit::IsImmunedToDamage ( SpellSchoolMask  schoolMask) const
9851{
9852 if (schoolMask == SPELL_SCHOOL_MASK_NONE)
9853 return false;
9854
9855 // If m_immuneToSchool type contains all requested schools, IMMUNE damage.
9857 for (auto const& itr : schoolList)
9858 if (IsImmuneMaskFully(SpellSchoolMask(itr.first), schoolMask))
9859 return true;
9860
9861 // If m_immuneToDamage type contains all requested schools, IMMUNE damage.
9863 return std::ranges::any_of(damageList, [schoolMask](auto const& immune)
9864 {
9865 return Unit::IsImmuneMaskFully(SpellSchoolMask(immune.first), schoolMask);
9866 });
9867}
static bool IsImmuneMaskFully(SpellSchoolMask immuneMask, SpellSchoolMask schoolMask)
Definition Unit.h:1646

References IMMUNITY_DAMAGE, IMMUNITY_SCHOOL, IsImmuneMaskFully(), m_spellImmune, and SPELL_SCHOOL_MASK_NONE.

Referenced by boss_gurtogg_bloodboil::CanAIAttack(), DealDamageShieldDamage(), Spell::DoAllEffectOnTarget(), Spell::DoSpellHitOnUnit(), AuraEffect::HandlePeriodicDamageAurasTick(), AuraEffect::HandlePeriodicHealthLeechAuraTick(), AuraEffect::HandlePeriodicPowerBurnAuraTick(), AuraEffect::HandleProcTriggerDamageAuraProc(), IsImmunedToDamageOrSchool(), ThreatReference::ShouldBeSuppressed(), and SpellHitResult().

◆ IsImmunedToDamage() [2/2]

bool Unit::IsImmunedToDamage ( Unit const *  caster,
SpellInfo const *  spellInfo 
) const
9870{
9871 if (!spellInfo)
9872 return false;
9873
9874 if (spellInfo->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES) || spellInfo->HasAttribute(SPELL_ATTR2_NO_SCHOOL_IMMUNITIES))
9875 return false;
9876
9877 SpellSchoolMask schoolMask = SpellSchoolMask(spellInfo->GetSchoolMask());
9878 if (schoolMask == SPELL_SCHOOL_MASK_NONE)
9879 return false;
9880
9881 auto hasImmunity = [&](SpellImmuneContainer const& container)
9882 {
9883 uint32 schoolImmunityMask = 0;
9884 for (auto const& [immunitySchoolMask, immunityAuraId] : container)
9885 {
9886 SpellInfo const* immuneAuraInfo = sSpellMgr->GetSpellInfo(immunityAuraId);
9887 if (IgnoresSchoolImmunityFromFriendlyCaster(caster, immunityAuraId, immuneAuraInfo))
9888 continue;
9889
9890 if (immuneAuraInfo && spellInfo->CanPierceImmuneAura(immuneAuraInfo))
9891 continue;
9892
9893 schoolImmunityMask |= immunitySchoolMask;
9894 }
9895
9896 // We need to be immune to all types
9897 return (schoolImmunityMask & schoolMask) == schoolMask;
9898 };
9899
9900 // If m_immuneToSchool type contain this school type, IMMUNE damage.
9901 if (hasImmunity(m_spellImmune[IMMUNITY_SCHOOL]))
9902 return true;
9903
9904 // If m_immuneToDamage type contain magic, IMMUNE damage.
9905 if (hasImmunity(m_spellImmune[IMMUNITY_DAMAGE]))
9906 return true;
9907
9908 return false;
9909}

References SpellInfo::CanPierceImmuneAura(), SpellInfo::GetSchoolMask(), SpellInfo::HasAttribute(), IgnoresSchoolImmunityFromFriendlyCaster(), IMMUNITY_DAMAGE, IMMUNITY_SCHOOL, m_spellImmune, SPELL_ATTR0_NO_IMMUNITIES, SPELL_ATTR2_NO_SCHOOL_IMMUNITIES, SPELL_SCHOOL_MASK_NONE, and sSpellMgr.

◆ IsImmunedToDamageOrSchool()

bool Unit::IsImmunedToDamageOrSchool ( SpellSchoolMask  schoolMask) const
9982{
9983 if (schoolMask == SPELL_SCHOOL_MASK_NONE)
9984 {
9985 return false;
9986 }
9987
9988 return IsImmunedToDamage(schoolMask) || IsImmunedToSchool(schoolMask);
9989}
bool IsImmunedToSchool(SpellSchoolMask schoolMask) const
Definition Unit.cpp:9911

References IsImmunedToDamage(), IsImmunedToSchool(), and SPELL_SCHOOL_MASK_NONE.

Referenced by CalcAbsorbResist(), CalculateMeleeDamage(), DealDamage(), Player::HandleFall(), SindragosaIceTombCheck::operator()(), LastPhaseIceTombTargetSelector::operator()(), and npc_darnavan::npc_darnavanAI::UpdateAI().

◆ IsImmunedToSchool() [1/3]

bool Unit::IsImmunedToSchool ( Spell const *  spell) const
9949{
9950 SpellInfo const* spellInfo = spell->GetSpellInfo();
9952 {
9953 return false;
9954 }
9955
9956 uint32 schoolMask = spell->GetSpellSchoolMask();
9957 if (schoolMask == SPELL_SCHOOL_MASK_NONE)
9958 {
9959 return false;
9960 }
9961
9962 if (spellInfo->Id != 42292 && spellInfo->Id != 59752 && spellInfo->Id != 19574 && spellInfo->Id != 34471)
9963 {
9964 // Check IMMUNITY_SCHOOL: returns true if ALL schools in the mask are covered and spell can't pierce
9966 for (auto itr = schoolList.begin(); itr != schoolList.end(); ++itr)
9967 {
9968 SpellInfo const* immuneSpellInfo = sSpellMgr->GetSpellInfo(itr->second);
9969 if ((itr->first & schoolMask) == schoolMask
9970 && !IgnoresSchoolImmunityFromFriendlyCaster(spell->GetCaster(), itr->second, immuneSpellInfo)
9971 && !spellInfo->CanPierceImmuneAura(immuneSpellInfo))
9972 {
9973 return true;
9974 }
9975 }
9976 }
9977
9978 return false;
9979}
bool CanPierceImmuneAura(SpellInfo const *auraSpellInfo) const
Definition SpellInfo.cpp:1362

References SpellInfo::CanPierceImmuneAura(), Spell::GetCaster(), Spell::GetSpellInfo(), Spell::GetSpellSchoolMask(), SpellInfo::HasAttribute(), HasSpiritOfRedemptionAura(), SpellInfo::Id, IgnoresSchoolImmunityFromFriendlyCaster(), IMMUNITY_SCHOOL, m_spellImmune, SPELL_ATTR0_NO_IMMUNITIES, SPELL_SCHOOL_MASK_NONE, and sSpellMgr.

◆ IsImmunedToSchool() [2/3]

bool Unit::IsImmunedToSchool ( SpellInfo const *  spellInfo) const
9926{
9927 if (spellInfo->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES) && !HasSpiritOfRedemptionAura())
9928 return false;
9929
9930 uint32 schoolMask = spellInfo->GetSchoolMask();
9931 if (schoolMask == SPELL_SCHOOL_MASK_NONE)
9932 {
9933 return false;
9934 }
9935
9936 if (spellInfo->Id != 42292 && spellInfo->Id != 59752 && spellInfo->Id != 19574 && spellInfo->Id != 34471)
9937 {
9938 // Check IMMUNITY_SCHOOL: returns true if ALL schools in the mask are covered and spell can't pierce
9940 for (auto itr = schoolList.begin(); itr != schoolList.end(); ++itr)
9941 if ((itr->first & schoolMask) == schoolMask && !spellInfo->CanPierceImmuneAura(sSpellMgr->GetSpellInfo(itr->second)))
9942 return true;
9943 }
9944
9945 return false;
9946}

References SpellInfo::CanPierceImmuneAura(), SpellInfo::GetSchoolMask(), SpellInfo::HasAttribute(), HasSpiritOfRedemptionAura(), SpellInfo::Id, IMMUNITY_SCHOOL, m_spellImmune, SPELL_ATTR0_NO_IMMUNITIES, SPELL_SCHOOL_MASK_NONE, and sSpellMgr.

◆ IsImmunedToSchool() [3/3]

bool Unit::IsImmunedToSchool ( SpellSchoolMask  schoolMask) const
9912{
9913 if (schoolMask == SPELL_SCHOOL_MASK_NONE)
9914 return false;
9915
9916 // Check IMMUNITY_SCHOOL: returns true if ALL schools in the mask are covered by at least one immunity
9917 // (e.g., Anti-Magic Shell provides school immunity to all magic schools)
9919 return std::ranges::any_of(schoolList, [schoolMask](auto const& immune)
9920 {
9921 return (immune.first & schoolMask) == schoolMask;
9922 });
9923}

References IMMUNITY_SCHOOL, m_spellImmune, and SPELL_SCHOOL_MASK_NONE.

Referenced by Spell::DoSpellHitOnUnit(), and IsImmunedToDamageOrSchool().

◆ IsImmunedToSpell() [1/2]

bool Unit::IsImmunedToSpell ( SpellInfo const *  spellInfo,
Spell const *  spell = nullptr 
)
virtual

Reimplemented in Creature.

10027{
10028 if (!spellInfo)
10029 return false;
10030
10031 // Single spell immunity.
10033 if (idList.count(spellInfo->Id) > 0)
10034 return true;
10035
10036 // xinef: my special immunity, if spellid is not on this list it means npc is immune
10038 if (!allowIdList.empty())
10039 {
10040 if (allowIdList.count(spellInfo->Id) == 0)
10041 return true;
10042 return false;
10043 }
10044
10045 if (spellInfo->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES) && !HasSpiritOfRedemptionAura())
10046 return false;
10047
10048 if (uint32 dispel = spellInfo->Dispel)
10049 {
10051 if (dispelList.count(dispel) > 0)
10052 return true;
10053 }
10054
10055 // Spells that don't have effectMechanics.
10056 if (uint32 mechanic = spellInfo->Mechanic)
10057 {
10059 if (mechanicList.count(mechanic) > 0)
10060 return true;
10061 }
10062
10063 bool immuneToAllEffects = true;
10064 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
10065 {
10066 // State/effect immunities applied by aura expect full spell immunity
10067 // Ignore effects with mechanic, they are supposed to be checked separately
10068 if (!spellInfo->Effects[i].IsEffect())
10069 continue;
10070
10071 // Xinef: if target is immune to one effect, and the spell has transform aura - it is immune to whole spell
10072 if (IsImmunedToSpellEffect(spellInfo, i))
10073 {
10074 if (spellInfo->HasAura(SPELL_AURA_TRANSFORM))
10075 return true;
10076 continue;
10077 }
10078
10079 immuneToAllEffects = false;
10080 break;
10081 }
10082 if (immuneToAllEffects) //Return immune only if the target is immune to all spell effects.
10083 return true;
10084
10085 if (!spellInfo->HasAttribute(SPELL_ATTR2_NO_SCHOOL_IMMUNITIES))
10086 {
10087 SpellSchoolMask spellSchoolMask = spellInfo->GetSchoolMask();
10088 Unit const* spellCaster = spell ? spell->GetCaster() : nullptr;
10089 if (spell)
10090 {
10091 spellSchoolMask = spell->GetSpellSchoolMask();
10092 }
10093
10094 if (spellSchoolMask != SPELL_SCHOOL_MASK_NONE)
10095 {
10097 for (auto itr = schoolList.begin(); itr != schoolList.end(); ++itr)
10098 {
10099 SpellInfo const* immuneSpellInfo = sSpellMgr->GetSpellInfo(itr->second);
10100 if (!(itr->first & spellSchoolMask))
10101 continue;
10102
10103 if (IgnoresSchoolImmunityFromFriendlyCaster(spellCaster, itr->second, immuneSpellInfo))
10104 continue;
10105
10106 if (spellInfo->CanPierceImmuneAura(immuneSpellInfo))
10107 continue;
10108
10109 return true;
10110 }
10111 }
10112 }
10113
10114 return false;
10115}
@ IMMUNITY_ALLOW_ID
Definition SharedDefines.h:1405
@ IMMUNITY_ID
Definition SharedDefines.h:1404
@ IMMUNITY_MECHANIC
Definition SharedDefines.h:1403
@ IMMUNITY_DISPEL
Definition SharedDefines.h:1402

References SpellInfo::CanPierceImmuneAura(), SpellInfo::Dispel, SpellInfo::Effects, Spell::GetCaster(), SpellInfo::GetSchoolMask(), Spell::GetSpellSchoolMask(), SpellInfo::HasAttribute(), SpellInfo::HasAura(), HasSpiritOfRedemptionAura(), SpellInfo::Id, IgnoresSchoolImmunityFromFriendlyCaster(), IMMUNITY_ALLOW_ID, IMMUNITY_DISPEL, IMMUNITY_ID, IMMUNITY_MECHANIC, IMMUNITY_SCHOOL, IsImmunedToSpellEffect(), m_spellImmune, MAX_SPELL_EFFECTS, SpellInfo::Mechanic, SPELL_ATTR0_NO_IMMUNITIES, SPELL_ATTR2_NO_SCHOOL_IMMUNITIES, SPELL_AURA_TRANSFORM, SPELL_SCHOOL_MASK_NONE, and sSpellMgr.

Referenced by AddAura(), Spell::DoSpellHitOnUnit(), Creature::IsImmunedToSpell(), boss_talon_king_ikiss::JustEngagedWith(), npc_pet_dk_ebon_gargoyle::MySelectNextTarget(), SpellHitResult(), and SpellHitResult().

◆ IsImmunedToSpell() [2/2]

bool Unit::IsImmunedToSpell ( SpellInfo const *  spellInfo,
uint32  effectMask,
Unit const *  caster = nullptr 
)
910{
911 if (!spellInfo)
912 return false;
913
914 if (spellInfo->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES) && !HasSpiritOfRedemptionAura())
915 return false;
916
917 bool immuneToAllEffects = true;
918 bool hasCheckedEffect = false;
919
920 for (uint8 i = EFFECT_0; i < MAX_SPELL_EFFECTS; ++i)
921 {
922 if (!(effectMask & (1u << i)))
923 continue;
924
925 if (!spellInfo->Effects[i].IsEffect())
926 continue;
927
928 hasCheckedEffect = true;
929
930 if (IsImmunedToSpellEffect(spellInfo, i, caster))
931 {
932 if (spellInfo->HasAttribute(SPELL_ATTR4_NO_PARTIAL_IMMUNITY))
933 return true;
934
935 continue;
936 }
937
938 immuneToAllEffects = false;
939 break;
940 }
941
942 if (hasCheckedEffect && immuneToAllEffects)
943 return true;
944
945 if (!spellInfo->HasAttribute(SPELL_ATTR2_NO_SCHOOL_IMMUNITIES))
946 {
947 if (spellInfo->Id == 42292 || spellInfo->Id == 59752 || spellInfo->Id == 19574 || spellInfo->Id == 34471)
948 return false;
949
950 SpellSchoolMask schoolMask = spellInfo->GetSchoolMask();
951 if (schoolMask != SPELL_SCHOOL_MASK_NONE)
952 {
954 for (auto const& [immunitySchoolMask, immunityAuraId] : schoolList)
955 {
956 SpellInfo const* immuneSpellInfo = sSpellMgr->GetSpellInfo(immunityAuraId);
957 if ((immunitySchoolMask & schoolMask) != schoolMask)
958 continue;
959
960 if (IgnoresSchoolImmunityFromFriendlyCaster(caster, immunityAuraId, immuneSpellInfo))
961 continue;
962
963 if (spellInfo->CanPierceImmuneAura(immuneSpellInfo))
964 continue;
965
966 return true;
967 }
968 }
969 }
970
971 return false;
972}
@ SPELL_ATTR4_NO_PARTIAL_IMMUNITY
Definition SharedDefines.h:529

References SpellInfo::CanPierceImmuneAura(), EFFECT_0, SpellInfo::Effects, SpellInfo::GetSchoolMask(), SpellInfo::HasAttribute(), HasSpiritOfRedemptionAura(), SpellInfo::Id, IgnoresSchoolImmunityFromFriendlyCaster(), IMMUNITY_SCHOOL, IsImmunedToSpellEffect(), m_spellImmune, MAX_SPELL_EFFECTS, SPELL_ATTR0_NO_IMMUNITIES, SPELL_ATTR2_NO_SCHOOL_IMMUNITIES, SPELL_ATTR4_NO_PARTIAL_IMMUNITY, SPELL_SCHOOL_MASK_NONE, and sSpellMgr.

◆ IsImmunedToSpellEffect()

bool Unit::IsImmunedToSpellEffect ( SpellInfo const *  spellInfo,
uint32  index,
Unit const *  caster = nullptr 
) const
virtual

Reimplemented in Creature, and Totem.

10118{
10119 if (!spellInfo || !spellInfo->Effects[index].IsEffect())
10120 return false;
10121
10122 // xinef: pet scaling auras
10123 if (spellInfo->HasAttribute(SPELL_ATTR4_OWNER_POWER_SCALING))
10124 return false;
10125
10126 if (spellInfo->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES) && !HasSpiritOfRedemptionAura())
10127 return false;
10128
10129 // Special-case handling for Vezax's Aura of Despair.
10130 static constexpr uint32 SPELL_AURA_OF_DESPAIR_1 = 62692;
10131 static constexpr uint32 SPELL_AURA_OF_DESPAIR_2 = 64848;
10132
10133 //If m_immuneToEffect type contain this effect type, IMMUNE effect.
10134 uint32 effect = spellInfo->Effects[index].Effect;
10136 for (SpellImmuneContainer::const_iterator itr = effectList.begin(); itr != effectList.end(); ++itr)
10137 {
10138 if (itr->first == effect && (itr->second != SPELL_AURA_OF_DESPAIR_1 || (spellInfo->Effects[index].MiscValue == POWER_MANA && !CanRestoreMana(spellInfo))))
10139 {
10140 return true;
10141 }
10142 }
10143
10144 if (uint32 mechanic = spellInfo->Effects[index].Mechanic)
10145 {
10146 auto const& mechanicList = m_spellImmune[IMMUNITY_MECHANIC];
10147 if (mechanicList.count(mechanic) > 0)
10148 return true;
10149 }
10150
10151 if (!spellInfo->HasAttribute(SPELL_ATTR3_ALWAYS_HIT))
10152 {
10153 if (uint32 aura = spellInfo->Effects[index].ApplyAuraName)
10154 {
10156 for (SpellImmuneContainer::const_iterator itr = list.begin(); itr != list.end(); ++itr)
10157 {
10158 if (itr->first == aura && (itr->second != SPELL_AURA_OF_DESPAIR_2 || (spellInfo->Effects[index].MiscValue == POWER_MANA && !CanRestoreMana(spellInfo))))
10159 return true;
10160 }
10161
10162 if (!spellInfo->HasAttribute(SPELL_ATTR2_NO_SCHOOL_IMMUNITIES))
10163 {
10164 // Check for immune to application of harmful magical effects
10166 {
10167 if (!(immuneAuraApply->GetMiscValue() & spellInfo->GetSchoolMask())) // Check school
10168 continue;
10169
10170 if (spellInfo->HasAttribute(SPELL_ATTR1_IMMUNITY_TO_HOSTILE_AND_FRIENDLY_EFFECTS) || (caster && !IsFriendlyTo(caster))) // Harmful
10171 return true;
10172 }
10173 }
10174 }
10175 }
10176
10177 return false;
10178}
@ SPELL_ATTR3_ALWAYS_HIT
Definition SharedDefines.h:499
@ IMMUNITY_STATE
Definition SharedDefines.h:1399
@ IMMUNITY_EFFECT
Definition SharedDefines.h:1398
@ SPELL_ATTR4_OWNER_POWER_SCALING
Definition SharedDefines.h:543
@ SPELL_AURA_MOD_IMMUNE_AURA_APPLY_SCHOOL
Definition SpellAuraDefines.h:330
@ SPELL_AURA_OF_DESPAIR_2
Definition boss_general_vezax.cpp:45
@ SPELL_AURA_OF_DESPAIR_1
Definition boss_general_vezax.cpp:44
bool CanRestoreMana(SpellInfo const *spellInfo) const
Definition Unit.cpp:17277
bool IsFriendlyTo(Unit const *unit) const
Definition Unit.cpp:7269

References CanRestoreMana(), SpellInfo::Effects, GetAuraEffectsByType(), SpellInfo::GetSchoolMask(), SpellInfo::HasAttribute(), HasSpiritOfRedemptionAura(), IMMUNITY_EFFECT, IMMUNITY_MECHANIC, IMMUNITY_STATE, IsFriendlyTo(), m_spellImmune, POWER_MANA, SPELL_ATTR0_NO_IMMUNITIES, SPELL_ATTR1_IMMUNITY_TO_HOSTILE_AND_FRIENDLY_EFFECTS, SPELL_ATTR2_NO_SCHOOL_IMMUNITIES, SPELL_ATTR3_ALWAYS_HIT, SPELL_ATTR4_OWNER_POWER_SCALING, SPELL_AURA_MOD_IMMUNE_AURA_APPLY_SCHOOL, SPELL_AURA_OF_DESPAIR_1, and SPELL_AURA_OF_DESPAIR_2.

Referenced by AddAura(), Spell::AddUnitTarget(), Spell::DoSpellHitOnUnit(), spell_dk_death_grip::HandleBaseDummy(), IsImmunedToSpell(), IsImmunedToSpell(), and Creature::IsImmunedToSpellEffect().

◆ IsImmuneMaskFully()

static bool Unit::IsImmuneMaskFully ( SpellSchoolMask  immuneMask,
SpellSchoolMask  schoolMask 
)
inlinestatic
1646{ return (immuneMask & schoolMask) == schoolMask; }

Referenced by IsImmunedToDamage(), TEST(), TEST(), and TEST().

◆ IsImmuneToAll()

bool Unit::IsImmuneToAll ( ) const
inline
925{ return IsImmuneToPC() && IsImmuneToNPC(); }

References IsImmuneToNPC(), and IsImmuneToPC().

◆ IsImmuneToNPC()

◆ IsImmuneToPC()

◆ isInAccessiblePlaceFor()

bool Unit::isInAccessiblePlaceFor ( Creature const *  c) const
4401{
4402 if (c->GetMapId() == MAP_THE_RING_OF_VALOR)
4403 {
4404 // skip transport check, check for being below floor level
4405 if (this->GetPositionZ() < 28.0f)
4406 return false;
4407 if (BattlegroundMap* bgMap = c->GetMap()->ToBattlegroundMap())
4408 if (Battleground* bg = bgMap->GetBG())
4409 if (bg->GetStartTime() < 80133) // 60000ms preparation time + 20133ms elevator rise time
4410 return false;
4411 }
4412 else if (c->GetMapId() == MAP_ICECROWN_CITADEL)
4413 {
4414 // if static transport doesn't match - return false
4415 if (c->GetTransport() != this->GetTransport() && ((c->GetTransport() && c->GetTransport()->IsStaticTransport()) || (this->GetTransport() && this->GetTransport()->IsStaticTransport())))
4416 return false;
4417
4418 // special handling for ICC (map 631), for non-flying pets in Gunship Battle, for trash npcs this is done via CanAIAttack
4419 if (c->GetOwnerGUID().IsPlayer() && !c->CanFly())
4420 {
4421 if (c->GetTransport() != this->GetTransport())
4422 return false;
4423 if (this->GetTransport())
4424 {
4425 if (c->GetPositionY() < 2033.0f)
4426 {
4427 if (this->GetPositionY() > 2033.0f)
4428 return false;
4429 }
4430 else if (c->GetPositionY() < 2438.0f)
4431 {
4432 if (this->GetPositionY() < 2033.0f || this->GetPositionY() > 2438.0f)
4433 return false;
4434 }
4435 else if (this->GetPositionY() < 2438.0f)
4436 return false;
4437 }
4438 }
4439 }
4440 else
4441 {
4442 // pussywizard: prevent any bugs by passengers exiting transports or normal creatures flying away
4443 if (c->GetTransport() != this->GetTransport())
4444 return false;
4445 }
4446
4447 LiquidStatus liquidStatus = GetLiquidData().Status;
4448 bool isInWater = (liquidStatus & MAP_LIQUID_STATUS_IN_CONTACT) != 0;
4449
4450 // In water or jumping in water
4451 if (isInWater || (liquidStatus == LIQUID_MAP_ABOVE_WATER && (IsFalling() || (ToPlayer() && ToPlayer()->IsFalling()))))
4452 {
4453 return c->CanEnterWater();
4454 }
4455 else
4456 {
4457 return c->CanWalk() || c->CanFly();
4458 }
4459}
@ MAP_THE_RING_OF_VALOR
Definition AreaDefines.h:262
@ MAP_ICECROWN_CITADEL
Definition AreaDefines.h:266
#define MAP_LIQUID_STATUS_IN_CONTACT
Definition GridTerrainData.h:32
LiquidStatus
Definition GridTerrainData.h:190
@ LIQUID_MAP_ABOVE_WATER
Definition GridTerrainData.h:192
Definition Map.h:742
BattlegroundMap * ToBattlegroundMap()
Definition Map.h:384
bool IsFalling() const
Definition Unit.cpp:15938
LiquidData const & GetLiquidData() const
Definition Object.cpp:3144
LiquidStatus Status
Definition GridTerrainData.h:206

References Creature::CanEnterWater(), Creature::CanFly(), Creature::CanWalk(), WorldObject::GetLiquidData(), WorldObject::GetMap(), WorldLocation::GetMapId(), GetOwnerGUID(), Position::GetPositionY(), Position::GetPositionZ(), WorldObject::GetTransport(), IsFalling(), ObjectGuid::IsPlayer(), GameObject::IsStaticTransport(), LIQUID_MAP_ABOVE_WATER, MAP_ICECROWN_CITADEL, MAP_LIQUID_STATUS_IN_CONTACT, MAP_THE_RING_OF_VALOR, LiquidData::Status, Map::ToBattlegroundMap(), and Object::ToPlayer().

Referenced by npc_escortAI::AssistPlayerInCombatAgainst(), Creature::CanCreatureAttack(), ChaseMovementGenerator< T >::DoUpdate(), FollowerAI::MoveInLineOfSight(), and npc_escortAI::MoveInLineOfSight().

◆ isInBackInMap()

bool Unit::isInBackInMap ( Unit const *  target,
float  distance,
float  arc = M_PI 
) const

◆ IsInCombat()

bool Unit::IsInCombat ( ) const
inline

References HasUnitFlag(), and UNIT_FLAG_IN_COMBAT.

Referenced by BossAI::_CheckHealthAfterCast(), _IsValidAttackTarget(), Player::ActivateTaxiPathTo(), npc_anubisath_sentinel::aqsentinelAI::CallBuddiesToAttack(), npc_argent_captainAI::CanAIAttack(), Player::CanEquipItem(), Creature::CanPeriodicallyCallForAssistance(), Player::CanUnequipItem(), boss_high_nethermancer_zerevor::CastDampenMagicIfPossible(), spell_hun_disengage::CheckCast(), Spell::CheckCast(), spell_ulduar_teleporter::CheckRequirement(), SpellInfo::CheckTarget(), instance_blackrock_depths::CheckTombReset(), ClearInCombat(), npc_centrifuge_construct::npc_centrifuge_constructAI::DamageTaken(), boss_prince_valanar_icc::boss_prince_valanarAI::DoAction(), npc_ball_of_flame::npc_ball_of_flameAI::DoAction(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::DoAction(), boss_the_lich_king::boss_the_lich_kingAI::DoAction(), boss_algalon_the_observer::DoAction(), boss_felblood_kaelthas::DoAction(), boss_kelthuzad_minion::boss_kelthuzad_minionAI::DoAction(), UnitAI::DoAddAuraToAllHostilePlayers(), Spell::DoAllEffectOnTarget(), UnitAI::DoCastToAllHostilePlayers(), Spell::DoSpellHitOnUnit(), Spell::EffectActivateRune(), npc_clintar_spirit::npc_clintar_spiritAI::EnterEvadeMode(), boss_professor_putricide::boss_professor_putricideAI::EnterEvadeMode(), gunship_npc_AI::EnterEvadeMode(), npc_gunship_boarding_addAI::EnterEvadeMode(), Player::EquipItem(), CastRunesEvent::Execute(), GetVelocity(), spell_apothecary_lingering_fumes::HandleAfterCast(), WorldSession::HandleBattlefieldLeaveOpcode(), WorldSession::HandleBattleFieldPortOpcode(), debug_commandscript::HandleDebugCombatListCommand(), debug_commandscript::HandleDebugHostileRefListCommand(), spell_dred_raptor_call::HandleDummy(), spell_mc_play_dead_aura::HandleEffectRemove(), WorldSession::HandleEquipmentSetUse(), boss_sartharion_dragonAI::HandleExtraEvent(), spell_chapter5_return_to_capital::HandleHit(), boss_malygos::HandleIntroSpeech(), WorldSession::HandleLogoutRequestOpcode(), WorldSession::HandleMessagechatOpcode(), WorldSession::HandlePetCastSpellOpcode(), WorldSession::HandleSetRaidDifficultyOpcode(), ArenaSpectator::HandleSpectatorSpectateCommand(), spell_putricide_mutated_transformation::HandleSummon(), WorldSession::HandleSummonResponseOpcode(), tele_commandscript::HandleTeleCommand(), misc_commandscript::HandleUnstuckCommand(), WorldSession::HandleUseItemOpcode(), npc_pet_mage_mirror_image::InitializeAI(), IsEngaged(), Creature::IsUpdateNeeded(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::JustSummoned(), boss_anubrekhan::JustSummoned(), boss_kelthuzad::boss_kelthuzadAI::JustSummoned(), npc_kiljaeden_controller::JustSummoned(), boss_professor_putricide::boss_professor_putricideAI::JustSummoned(), boss_rotface::boss_rotfaceAI::JustSummoned(), boss_nexusprince_shaffar::JustSummoned(), npc_nelson::npc_nelsonAI::JustSummoned(), Pet::LoseHappiness(), CreatureGroup::MemberEvaded(), CreatureAI::MoveInLineOfSight(), boss_muru::MoveInLineOfSight(), boss_eye_of_cthun::MoveInLineOfSight(), boss_anubarak_trial::boss_anubarak_trialAI::MoveInLineOfSight(), npc_icc_valkyr_herald::npc_icc_valkyr_heraldAI::MoveInLineOfSight(), npc_icc_vengeful_fleshreaper::npc_icc_vengeful_fleshreaperAI::MoveInLineOfSight(), boss_kelthuzad::boss_kelthuzadAI::MoveInLineOfSight(), boss_razorscale::MovementInform(), boss_alar::MovementInform(), npc_pet_mage_mirror_image::MySelectNextTarget(), CreatureAI::OnCharmed(), SmartAI::OnCharmed(), npc_ulduar_expedition_commander::OnGossipHello(), go_ulduar_working_harpoon::OnGossipHello(), npc_ulduar_expedition_commander::OnGossipSelect(), icecrown_citadel_teleport::OnGossipSelect(), at_frozen_throne_teleport::OnTrigger(), at_naxxramas_hub_portal::OnTrigger(), AreaTrigger_at_legion_teleporter::OnTrigger(), RisenArchmageCheck::operator()(), Acore::MostHPMissingInRange::operator()(), Acore::MostHPPercentMissingInRange::operator()(), Acore::FriendlyCCedInRange::operator()(), Acore::FriendlyMissingBuffInRange::operator()(), Acore::AnyAttackableUnitExceptForOriginalCasterInObjectRangeCheck::operator()(), npc_scarlet_ghoul::npc_scarlet_ghoulAI::OwnerAttackedBy(), boss_kologarn::PassengerBoarded(), SmartScript::ProcessEvent(), Creature::Regenerate(), Player::Regenerate(), Player::RegenerateAll(), Player::RegenerateHealth(), boss_kiljaeden::Reset(), spell_item_crazy_alchemists_potion::SecondaryEffect(), boss_gluth::boss_gluthAI::SelectPlayerInRoom(), instance_naxxramas::SetBossState(), boss_grand_warlock_nethekurse::SetData(), SetSpeed(), boss_prince_keleseth_icc::boss_prince_kelesethAI::SpellHit(), boss_prince_taldaram_icc::boss_prince_taldaramAI::SpellHit(), boss_prince_valanar_icc::boss_prince_valanarAI::SpellHit(), boss_the_lich_king::boss_the_lich_kingAI::SpellHit(), Spell::SummonGuardian(), lfg::LFGMgr::TeleportPlayer(), instance_stratholme::instance_stratholme_InstanceMapScript::Update(), Creature::Update(), TempSummon::Update(), Update(), DistractMovementGenerator::Update(), TotemAI::UpdateAI(), SimpleCharmedAI::UpdateAI(), npc_scarlet_ghoul::npc_scarlet_ghoulAI::UpdateAI(), npc_scarlet_courier::npc_scarlet_courierAI::UpdateAI(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::UpdateAI(), boss_thekal::UpdateAI(), npc_zealot_lorkhan::UpdateAI(), npc_zealot_zath::UpdateAI(), npc_arthas::npc_arthasAI::UpdateAI(), npc_clintar_spirit::npc_clintar_spiritAI::UpdateAI(), boss_faction_championsAI::UpdateAI(), npc_pos_leader::npc_pos_leaderAI::UpdateAI(), boss_moorabi::boss_moorabiAI::UpdateAI(), boss_prince_valanar_icc::boss_prince_valanarAI::UpdateAI(), npc_risen_archmage::npc_risen_archmageAI::UpdateAI(), npc_frost_freeze_trap::npc_frost_freeze_trapAI::UpdateAI(), npc_frostwing_vrykul::npc_frostwing_vrykulAI::UpdateAI(), boss_grobbulus::boss_grobbulusAI::UpdateAI(), boss_thaddius_summon::boss_thaddius_summonAI::UpdateAI(), boss_urom::boss_uromAI::UpdateAI(), boss_stormcaller_brundir::UpdateAI(), boss_hodir::UpdateAI(), boss_mimiron::UpdateAI(), npc_ulduar_expedition_engineer::UpdateAI(), npc_llod_generic::npc_llod_genericAI::UpdateAI(), npc_boneguard_footman::npc_boneguard_footmanAI::UpdateAI(), npc_millhouse_manastorm::npc_millhouse_manastormAI::UpdateAI(), npc_pet_mage_mirror_image::UpdateAI(), npc_pet_shaman_earth_elemental::UpdateAI(), npc_pet_shaman_fire_elemental::UpdateAI(), boss_taerar::boss_taerarAI::UpdateAI(), npc_simone::npc_simoneAI::UpdateAI(), PassiveAI::UpdateAI(), PetAI::UpdateAI(), Player::UpdateContestedPvP(), Creature::UpdateEntry(), boss_bjarngrim::UpdateEscortAI(), InstanceScript::UpdateMinionState(), CombatManager::UpdateOwnerCombatState(), SmartAI::UpdatePath(), Player::UpdatePotionCooldown(), CreatureAI::UpdateVictim(), and npc_ancestral_wolf::npc_ancestral_wolfAI::WaypointReached().

◆ IsInCombatWith()

bool Unit::IsInCombatWith ( Unit const *  who) const
17090{
17091 if (!who)
17092 return false;
17093 return GetCombatManager().IsInCombatWith(who);
17094}
bool IsInCombatWith(ObjectGuid const &who) const
Definition CombatManager.cpp:259

References GetCombatManager(), and CombatManager::IsInCombatWith().

Referenced by _IsValidAttackTarget(), npc_pet_dk_army_of_the_dead::CanAIAttack(), TemporaryThreatModifierEvent::Execute(), IsEngagedBy(), and Acore::NearestAttackableUnitInObjectRangeCheck::operator()().

◆ IsInDisallowedMountForm()

bool Unit::IsInDisallowedMountForm ( ) const
17313{
17314 if (SpellInfo const* transformSpellInfo = sSpellMgr->GetSpellInfo(getTransForm()))
17315 {
17316 if (transformSpellInfo->HasAttribute(SPELL_ATTR0_ALLOW_WHILE_MOUNTED))
17317 {
17318 return false;
17319 }
17320 }
17321
17322 if (ShapeshiftForm form = GetShapeshiftForm())
17323 {
17324 SpellShapeshiftFormEntry const* shapeshift = sSpellShapeshiftFormStore.LookupEntry(form);
17325 if (!shapeshift)
17326 {
17327 return true;
17328 }
17329
17330 if (!(shapeshift->flags1 & SHAPESHIFT_FLAG_STANCE))
17331 {
17332 return true;
17333 }
17334 }
17335
17337 {
17338 return false;
17339 }
17340
17341 CreatureDisplayInfoEntry const* display = sCreatureDisplayInfoStore.LookupEntry(GetDisplayId());
17342 if (!display)
17343 {
17344 return true;
17345 }
17346
17348 if (!displayExtra)
17349 {
17350 return true;
17351 }
17352
17353 CreatureModelDataEntry const* model = sCreatureModelDataStore.LookupEntry(display->ModelId);
17354 ChrRacesEntry const* race = sChrRacesStore.LookupEntry(displayExtra->DisplayRaceID);
17355
17356 if (model && !(model->HasFlag(CREATURE_MODEL_DATA_FLAGS_CAN_MOUNT)))
17357 {
17358 if (race && !(race->HasFlag(CHRRACES_FLAGS_CAN_MOUNT)))
17359 {
17360 return true;
17361 }
17362 }
17363
17364 return false;
17365}
@ CHRRACES_FLAGS_CAN_MOUNT
Definition DBCStructure.h:675
@ CREATURE_MODEL_DATA_FLAGS_CAN_MOUNT
Definition DBCStructure.h:771
@ SPELL_ATTR0_ALLOW_WHILE_MOUNTED
Definition SharedDefines.h:394
@ SHAPESHIFT_FLAG_STANCE
Definition UnitDefines.h:107
uint32 getTransForm() const
Definition Unit.h:1969
bool HasFlag(ChrRacesFlags flag) const
Definition DBCStructure.h:700
uint32 ExtendedDisplayInfoID
Definition DBCStructure.h:725
uint32 DisplayRaceID
Definition DBCStructure.h:741
bool HasFlag(CreatureModelDataFlags flag) const
Definition DBCStructure.h:804
uint32 flags1
Definition DBCStructure.h:1822

References CHRRACES_FLAGS_CAN_MOUNT, CREATURE_MODEL_DATA_FLAGS_CAN_MOUNT, CreatureDisplayInfoExtraEntry::DisplayRaceID, CreatureDisplayInfoEntry::ExtendedDisplayInfoID, SpellShapeshiftFormEntry::flags1, GetDisplayId(), GetNativeDisplayId(), GetShapeshiftForm(), getTransForm(), ChrRacesEntry::HasFlag(), CreatureModelDataEntry::HasFlag(), CreatureDisplayInfoEntry::ModelId, sChrRacesStore, sCreatureDisplayInfoExtraStore, sCreatureDisplayInfoStore, sCreatureModelDataStore, SHAPESHIFT_FLAG_STANCE, SPELL_ATTR0_ALLOW_WHILE_MOUNTED, sSpellMgr, and sSpellShapeshiftFormStore.

Referenced by Player::ActivateTaxiPathTo(), npc_toc5_player_vehicle::npc_toc5_player_vehicleAI::BeforeSpellClick(), Spell::CheckCast(), Player::ContinueTaxiFlight(), spell_oculus_rider_aura::HandleOnEffectApply(), and Player::ProcessDelayedOperations().

◆ IsInFeralForm()

bool Unit::IsInFeralForm ( ) const
inline
1962 {
1964 return form == FORM_CAT || form == FORM_BEAR || form == FORM_DIREBEAR || form == FORM_GHOSTWOLF; // Xinef: added shamans Ghost Wolf, should behave exactly like druid forms
1965 }
@ FORM_DIREBEAR
Definition UnitDefines.h:80
@ FORM_CAT
Definition UnitDefines.h:73
@ FORM_GHOSTWOLF
Definition UnitDefines.h:88
@ FORM_BEAR
Definition UnitDefines.h:77

References FORM_BEAR, FORM_CAT, FORM_DIREBEAR, FORM_GHOSTWOLF, and GetShapeshiftForm().

Referenced by Player::_ApplyWeaponDamage(), Player::CalculateMinMaxDamage(), spell_dru_survival_instincts::CheckCast(), Aura::GetProcEffectMask(), Player::GetWeaponForAttack(), GetWeaponSkillValue(), AuraEffect::HandleAuraModDisarm(), Player::UpdateAttackPowerAndDamage(), and Player::UpdateWeaponSkill().

◆ IsInFlight()

bool Unit::IsInFlight ( ) const
inline

References HasUnitState(), and UNIT_STATE_IN_FLIGHT.

Referenced by Player::CheckAreaExploreAndOutdoor(), Spell::CheckCast(), SpellInfo::CheckTarget(), CreatureUnitRelocationWorker(), DealDamageMods(), DealMeleeDamage(), DealSpellDamage(), go_commandscript::DoTeleport(), go_commandscript::DoTeleportToTransport(), Spell::EffectJump(), Spell::EffectJumpDest(), Spell::EffectLeap(), Spell::EffectStuck(), Spell::EffectTeleportUnits(), Spell::EffectTeleUnitsFaceCaster(), Player::GetNPCIfCanInteractWith(), misc_commandscript::HandleAppearCommand(), WorldSession::HandleAreaTriggerOpcode(), WorldSession::HandleCancelMountAuraOpcode(), misc_commandscript::HandleDismountCommand(), go_commandscript::HandleGoGraveyardCommand(), go_commandscript::HandleGoGridCommand(), go_commandscript::HandleGoTicketCommand(), go_commandscript::HandleGoZoneXYCommand(), misc_commandscript::HandleGroupSummonCommand(), WorldSession::HandleHearthAndResurrect(), WorldSession::HandleInitiateTradeOpcode(), WorldSession::HandleLogoutRequestOpcode(), Battlefield::HandlePlayerEnterZone(), misc_commandscript::HandleSkirmishCommand(), ArenaSpectator::HandleSpectatorSpectateCommand(), tele_commandscript::HandleTeleCommand(), tele_commandscript::HandleTeleGroupCommand(), misc_commandscript::HandleUnstuckCommand(), Battlefield::InvitePlayerToWar(), Player::IsFalling(), Player::IsOutdoorPvPActive(), IsValidCombatTarget(), item_only_for_flight::OnUse(), WorldSession::ProcessMovementInfo(), Player::ProcessTerrainStatusUpdate(), SetStunned(), Player::TeleportTo(), and Player::UpdatePvPState().

◆ isInFrontInMap()

bool Unit::isInFrontInMap ( Unit const *  target,
float  distance,
float  arc = M_PI 
) const
4391{
4392 return IsWithinDistInMap(target, distance) && HasInArc(arc, target);
4393}

References Position::HasInArc(), and WorldObject::IsWithinDistInMap().

◆ IsInnkeeper()

bool Unit::IsInnkeeper ( ) const
inline
@ UNIT_NPC_FLAG_INNKEEPER
Definition UnitDefines.h:338

References HasNpcFlag(), and UNIT_NPC_FLAG_INNKEEPER.

Referenced by npc_innkeeper::OnGossipHello().

◆ IsInPartyWith()

bool Unit::IsInPartyWith ( Unit const *  unit) const
15044{
15045 if (this == unit)
15046 return true;
15047
15048 Unit const* u1 = GetCharmerOrOwnerOrSelf();
15049 Unit const* u2 = unit->GetCharmerOrOwnerOrSelf();
15050 if (u1 == u2)
15051 return true;
15052
15053 if (u1->IsPlayer() && u2->IsPlayer())
15054 return u1->ToPlayer()->IsInSameGroupWith(u2->ToPlayer());
15055 // Xinef: we assume that npcs with the same faction are in party
15056 else if (u1->IsCreature() && u2->IsCreature() && !u1->IsControlledByPlayer() && !u2->IsControlledByPlayer())
15057 return u1->GetFaction() == u2->GetFaction();
15058 // Xinef: creature type_flag should work for party check only if player group is not a raid
15061 return true;
15062 else
15063 return false;
15064}
bool isRaidGroup() const
Definition Group.cpp:2284
bool IsInSameGroupWith(Player const *p) const
Definition Player.cpp:2287

References CREATURE_TYPE_FLAG_TREAT_AS_RAID_UNIT, GetCharmerOrOwnerOrSelf(), Creature::GetCreatureTemplate(), GetFaction(), Player::GetGroup(), IsControlledByPlayer(), Object::IsCreature(), Player::IsInSameGroupWith(), Object::IsPlayer(), Group::isRaidGroup(), Object::ToCreature(), Object::ToPlayer(), and CreatureTemplate::type_flags.

Referenced by SpellInfo::CheckExplicitTarget(), SpellClickInfo::IsFitToRequirements(), Condition::Meets(), Acore::AnyGroupedUnitInObjectRangeCheck::operator()(), and Acore::WorldObjectSpellTargetCheck::operator()().

◆ IsInRaidWith()

bool Unit::IsInRaidWith ( Unit const *  unit) const
15067{
15068 if (this == unit)
15069 return true;
15070
15071 Unit const* u1 = GetCharmerOrOwnerOrSelf();
15072 Unit const* u2 = unit->GetCharmerOrOwnerOrSelf();
15073 if (u1 == u2)
15074 return true;
15075
15076 if (u1->IsPlayer() && u2->IsPlayer())
15077 return u1->ToPlayer()->IsInSameRaidWith(u2->ToPlayer());
15078 // Xinef: we assume that npcs with the same faction are in party
15079 else if (u1->IsCreature() && u2->IsCreature() && !u1->IsControlledByPlayer() && !u2->IsControlledByPlayer())
15080 return u1->GetFaction() == u2->GetFaction();
15083 return true;
15084 else
15085 return false;
15086}

References CREATURE_TYPE_FLAG_TREAT_AS_RAID_UNIT, GetCharmerOrOwnerOrSelf(), Creature::GetCreatureTemplate(), GetFaction(), IsControlledByPlayer(), Object::IsCreature(), Player::IsInSameRaidWith(), Object::IsPlayer(), Object::ToCreature(), Object::ToPlayer(), and CreatureTemplate::type_flags.

Referenced by Corpse::BuildValuesUpdate(), SpellInfo::CheckExplicitTarget(), spell_dru_t10_restoration_4p_bonus::FilterTargets(), GetReactionTo(), WorldSession::HandleLootMasterGiveOpcode(), SpellClickInfo::IsFitToRequirements(), Condition::Meets(), Acore::AnyGroupedUnitInObjectRangeCheck::operator()(), Acore::WorldObjectSpellTargetCheck::operator()(), and PatchValuesUpdate().

◆ IsInSanctuary()

bool Unit::IsInSanctuary ( ) const
inline

◆ IsInWater()

◆ IsLevitating()

◆ IsMounted()

◆ IsMovementPreventedByCasting()

bool Unit::IsMovementPreventedByCasting ( ) const
virtual

Reimplemented in Creature.

4367{
4368 // can always move when not casting
4370 {
4371 return false;
4372 }
4373
4374 // channeled spells during channel stage (after the initial cast timer) allow movement with a specific spell attribute
4376 {
4377 if (spell->getState() != SPELL_STATE_FINISHED && spell->IsChannelActive())
4378 {
4379 if (spell->GetSpellInfo()->IsActionAllowedChannel())
4380 {
4381 return false;
4382 }
4383 }
4384 }
4385
4386 // prohibit movement for all other spell casts
4387 return true;
4388}
@ UNIT_STATE_CASTING
Definition UnitDefines.h:188

References CURRENT_CHANNELED_SPELL, HasUnitState(), m_currentSpells, SPELL_STATE_FINISHED, and UNIT_STATE_CASTING.

Referenced by TimedFleeingMovementGenerator::Update().

◆ isMoving()

◆ IsNeutralToAll()

bool Unit::IsNeutralToAll ( ) const
7288{
7289 FactionTemplateEntry const* my_faction = GetFactionTemplateEntry();
7290 if (!my_faction || !my_faction->faction)
7291 return true;
7292
7293 FactionEntry const* raw_faction = sFactionStore.LookupEntry(my_faction->faction);
7294 if (raw_faction && raw_faction->reputationListID >= 0)
7295 return false;
7296
7297 return my_faction->IsNeutralToAll();
7298}
bool IsNeutralToAll() const
Definition DBCStructure.h:984

References FactionTemplateEntry::faction, GetFactionTemplateEntry(), FactionTemplateEntry::IsNeutralToAll(), FactionEntry::reputationListID, and sFactionStore.

Referenced by Creature::_IsTargetAcceptable(), Creature::CanStartAttack(), AggressorAI::Permissible(), and ReactorAI::Permissible().

◆ IsNonMeleeSpellCast()

bool Unit::IsNonMeleeSpellCast ( bool  withDelayed,
bool  skipChanneled = false,
bool  skipAutorepeat = false,
bool  isAutoshoot = false,
bool  skipInstant = true 
) const
4298{
4299 // We don't do loop here to explicitly show that melee spell is excluded.
4300 // Maybe later some special spells will be excluded too.
4301
4302 // generic spells are cast when they are not finished and not delayed
4305 (withDelayed || m_currentSpells[CURRENT_GENERIC_SPELL]->getState() != SPELL_STATE_DELAYED))
4306 {
4307 if (!skipInstant || m_currentSpells[CURRENT_GENERIC_SPELL]->GetCastTime())
4308 {
4309 if (!isAutoshoot || !m_currentSpells[CURRENT_GENERIC_SPELL]->m_spellInfo->HasAttribute(SPELL_ATTR2_DO_NOT_RESET_COMBAT_TIMERS))
4310 return true;
4311 }
4312 }
4313 // channeled spells may be delayed, but they are still considered cast
4314 if (!skipChanneled && m_currentSpells[CURRENT_CHANNELED_SPELL] &&
4316 {
4317 if (!isAutoshoot || !m_currentSpells[CURRENT_CHANNELED_SPELL]->m_spellInfo->HasAttribute(SPELL_ATTR2_DO_NOT_RESET_COMBAT_TIMERS))
4318 return true;
4319 }
4320 // autorepeat spells may be finished or delayed, but they are still considered cast
4321 if (!skipAutorepeat && m_currentSpells[CURRENT_AUTOREPEAT_SPELL])
4322 return true;
4323
4324 return false;
4325}
@ SPELL_ATTR2_DO_NOT_RESET_COMBAT_TIMERS
Definition SharedDefines.h:461

References CURRENT_AUTOREPEAT_SPELL, CURRENT_CHANNELED_SPELL, CURRENT_GENERIC_SPELL, m_currentSpells, SPELL_ATTR2_DO_NOT_RESET_COMBAT_TIMERS, SPELL_STATE_DELAYED, and SPELL_STATE_FINISHED.

Referenced by Spell::_cast(), _UpdateAutoRepeatSpell(), Player::ActivateSpec(), Player::ActivateTaxiPathTo(), Player::CanEquipItem(), Player::CanExecutePendingSpellCastRequest(), CombatStop(), npc_molten_golem::DamageTaken(), ScriptedAI::DoCastSpell(), Spell::EffectKnockBack(), Spell::finish(), WorldSession::HandleCancelCastOpcode(), WorldSession::HandleSetRaidDifficultyOpcode(), isSpellBlocked(), boss_shade_of_aran::JustEngagedWith(), boss_pandemonius::JustEngagedWith(), MeleeSpellHitResult(), Spell::prepare(), SmartScript::ProcessEvent(), RollMeleeOutcomeAgainst(), setDeathState(), StopAttackFaction(), boss_netherspite::SwitchToPortalPhase(), Player::TeleportTo(), TotemAI::UpdateAI(), npc_chesspiece::UpdateAI(), npc_hor_lich_king::UpdateAI(), npc_putricide_oozeAI::UpdateAI(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::UpdateAI(), npc_vh_teleportation_portal::UpdateAI(), npc_warmage_violetstand::UpdateAI(), and npc_deaths_fel_cannon::npc_deaths_fel_cannonAI::UpdateAI().

◆ IsOnVehicle()

◆ IsPet()

bool Unit::IsPet ( ) const
inline
797{ return m_unitTypeMask & UNIT_MASK_PET; }
@ UNIT_MASK_PET
Definition UnitDefines.h:163

References m_unitTypeMask, and UNIT_MASK_PET.

Referenced by Spell::AddUnitTarget(), Creature::AllLootRemovedFromCorpse(), Creature::AtDisengage(), Creature::AtEngage(), BeforeVisibilityDestroy< Creature >(), Creature::CallAssistance(), Creature::CallForHelp(), boss_renataki::boss_renatakiAI::CanAlwaysBeDetectable(), ThreatManager::CanHaveThreatList(), boss_renataki::boss_renatakiAI::CanSeeAlways(), Creature::CanSwim(), spell_warl_demonic_pact::CheckProc(), ClearInCombat(), Creature::CreateFromProto(), Player::CreatePet(), DealDamage(), MotionTransport::DelayedTeleportTransport(), ChaseMovementGenerator< T >::DispatchSplineToPosition(), PetAI::DoAttack(), ChaseMovementGenerator< T >::DoUpdate(), Spell::EffectDismissPet(), Spell::EffectForceDeselect(), Spell::EffectRenamePet(), Spell::EffectSanctuary(), Spell::EffectSchoolDMG(), Spell::EffectSummonType(), Spell::EffectTameCreature(), Acore::XP::Gain(), Creature::GetAggroRange(), GetCastingTimeForBonus(), GetCombatRatingReduction(), GetCreatePowers(), GetNextRandomRaidMemberOrPet(), GetRandomContactPoint(), GetVelocity(), AuraEffect::HandleAuraModResistance(), AuraEffect::HandleAuraModResistanceExclusive(), AuraEffect::HandleAuraModStat(), AuraEffect::HandleFeignDeath(), modify_commandscript::HandleModifyTalentCommand(), AuraEffect::HandleModPossessPet(), AuraEffect::HandleModResistancePercent(), AuraEffect::HandleModTotalPercentStat(), npc_commandscript::HandleNpcDeleteCommand(), npc_commandscript::HandleNpcSetLevelCommand(), npc_commandscript::HandleNpcSetModelCommand(), npc_commandscript::HandleNpcSetMoveTypeCommand(), npc_commandscript::HandleNpcSetPhaseCommand(), npc_commandscript::HandleNpcTameCommand(), WorldSession::HandlePetAbandon(), WorldSession::HandlePetActionHelper(), WorldSession::HandlePetCastSpellOpcode(), pet_commandscript::HandlePetCreateCommand(), WorldSession::HandlePetRename(), WorldSession::HandlePetSetAction(), misc_commandscript::HandleRespawnCommand(), Creature::InitEntry(), TempSummon::InitStats(), Guardian::InitStatsForLevel(), DisableMgr::IsDisabledFor(), Creature::isElite(), Minion::IsGuardianPet(), Player::isHonorOrXPTarget(), Creature::isWorldBoss(), npc_webbed_creature::npc_webbed_creatureAI::JustDied(), npc_underbat::JustEngagedWith(), npc_vekniss_stinger::JustEngagedWith(), boss_murmur::JustEngagedWith(), Kill(), spell_hun_target_self_and_pet::Load(), ModSpellCastTime(), CreatureAI::MoveBackwardsChecks(), CreatureAI::MoveCircleChecks(), npc_cos_stratholme_citizien::npc_cos_stratholme_citizienAI::MoveInLineOfSight(), boss_kelthuzad_minion::boss_kelthuzad_minionAI::MoveInLineOfSight(), Acore::MostHPMissingGroupInRange::operator()(), PetAI::ReceiveEmote(), RollMeleeOutcomeAgainst(), FactorySelector::SelectAI(), Creature::SelectLevel(), WorldSession::SendPetNameQuery(), Spell::SendSpellGo(), Spell::SendSpellStart(), SetCharm(), Creature::SetDisplayId(), SetHealth(), SetMinion(), Creature::SetObjectScale(), setPowerType(), SpellDamageBonusDone(), SpellPctDamageModsDone(), Spell::SummonGuardian(), ToPet(), TempSummon::UnSummon(), Update(), boss_vaelastrasz::UpdateAI(), boss_hazzarah::UpdateAI(), PetAI::UpdateAI(), Player::UpdateAreaDependentAuras(), UpdateAuraForGroup(), Creature::UpdateEntry(), Creature::UpdateMoveInLineOfSightState(), UpdatePetCombatState(), UpdateSpeed(), and UpdateSplinePosition().

◆ IsPetAura()

bool Unit::IsPetAura ( Aura const *  aura)
13753{
13754 Unit* owner = GetOwner();
13755
13756 if (!owner || !owner->IsPlayer())
13757 return false;
13758
13759 // if the owner has that pet aura, return true
13760 for (PetAura const* petAura : owner->m_petAuras)
13761 if (petAura->GetAura(GetEntry()) == aura->GetId())
13762 return true;
13763
13764 return false;
13765}
Definition SpellMgr.h:460
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition Unit.cpp:5870
uint32 GetId(std::string const &username)
Definition AccountMgr.cpp:236

References Object::GetEntry(), Aura::GetId(), GetOwner(), Object::IsPlayer(), and m_petAuras.

Referenced by Pet::_SaveAuras(), and Spell::EffectSummonPet().

◆ IsPetInCombat()

bool Unit::IsPetInCombat ( ) const
inline

◆ IsPolymorphed()

bool Unit::IsPolymorphed ( ) const
13146{
13147 uint32 transformId = getTransForm();
13148 if (!transformId)
13149 return false;
13150
13151 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(transformId);
13152 if (!spellInfo)
13153 return false;
13154
13155 return spellInfo->GetSpellSpecific() == SPELL_SPECIFIC_MAGE_POLYMORPH;
13156}
@ SPELL_SPECIFIC_MAGE_POLYMORPH
Definition SpellInfo.h:161
SpellSpecificType GetSpellSpecific() const
Definition SpellInfo.cpp:2049

References SpellInfo::GetSpellSpecific(), getTransForm(), SPELL_SPECIFIC_MAGE_POLYMORPH, and sSpellMgr.

Referenced by Attack(), AuraEffect::HandleAuraModShapeshift(), AuraEffect::HandleAuraTransform(), Player::RegenerateAll(), Creature::RegenerateHealth(), Player::RegenerateHealth(), and Creature::Update().

◆ isPossessed()

◆ isPossessedByPlayer()

bool Unit::isPossessedByPlayer ( ) const
inline

◆ isPossessing() [1/2]

bool Unit::isPossessing ( ) const
inline
1314 {
1315 if (Unit* u = GetCharm())
1316 return u->isPossessed();
1317 else
1318 return false;
1319 }

References GetCharm().

Referenced by WorldSession::HandleCastSpellOpcode(), and misc_commandscript::HandleUnbindSightCommand().

◆ isPossessing() [2/2]

bool Unit::isPossessing ( Unit u) const
inline
1320{ return u->isPossessed() && GetCharmGUID() == u->GetGUID(); }
bool isPossessed() const
Definition Unit.h:1311

References GetCharmGUID(), Object::GetGUID(), and isPossessed().

◆ IsPvP()

◆ IsQuestGiver()

◆ IsRooted()

◆ IsScriptOverriden()

AuraEffect * Unit::IsScriptOverriden ( SpellInfo const *  spell,
int32  script 
) const
6122{
6124 for (AuraEffectList::const_iterator i = auras.begin(); i != auras.end(); ++i)
6125 {
6126 if ((*i)->GetMiscValue() == script)
6127 if ((*i)->IsAffectedOnSpell(spell))
6128 return (*i);
6129 }
6130 return nullptr;
6131}
@ SPELL_AURA_OVERRIDE_CLASS_SCRIPTS
Definition SpellAuraDefines.h:175

References GetAuraEffectsByType(), and SPELL_AURA_OVERRIDE_CLASS_SCRIPTS.

Referenced by Spell::CheckCast(), Spell::EffectWeaponDmg(), and AuraEffect::HandleAuraModShapeshift().

◆ IsServiceProvider()

bool Unit::IsServiceProvider ( ) const
inline

◆ IsSitState()

bool Unit::IsSitState ( ) const
13107{
13108 uint8 s = getStandState();
13109 return
13113}
@ UNIT_STAND_STATE_SIT_HIGH_CHAIR
Definition UnitDefines.h:41
@ UNIT_STAND_STATE_SIT_MEDIUM_CHAIR
Definition UnitDefines.h:40
@ UNIT_STAND_STATE_SIT_LOW_CHAIR
Definition UnitDefines.h:39
@ UNIT_STAND_STATE_SIT_CHAIR
Definition UnitDefines.h:37

References getStandState(), UNIT_STAND_STATE_SIT, UNIT_STAND_STATE_SIT_CHAIR, UNIT_STAND_STATE_SIT_HIGH_CHAIR, UNIT_STAND_STATE_SIT_LOW_CHAIR, and UNIT_STAND_STATE_SIT_MEDIUM_CHAIR.

Referenced by _ApplyAura(), AttackerStateUpdate(), IsStandState(), Spell::prepare(), and SpellTakenCritChance().

◆ isSpellBlocked()

bool Unit::isSpellBlocked ( Unit victim,
SpellInfo const *  spellProto,
WeaponAttackType  attackType = BASE_ATTACK 
)
3285{
3286 // These spells can't be blocked
3287 if (spellProto && (spellProto->HasAttribute(SPELL_ATTR0_NO_ACTIVE_DEFENSE) || spellProto->HasAttribute(SPELL_ATTR3_ALWAYS_HIT)))
3288 return false;
3289
3290 if (victim->HasIgnoreHitDirectionAura() || victim->HasInArc(M_PI, this))
3291 {
3292 // Check creatures flags_extra for disable block
3293 if (victim->IsCreature() &&
3295 return false;
3296
3297 float blockChance = victim->GetUnitBlockChance();
3298 blockChance += (int32(GetWeaponSkillValue(attackType)) - int32(victim->GetMaxSkillValueForLevel())) * 0.04f;
3299
3300 // xinef: cant block while casting or while stunned
3301 if (blockChance < 0.0f || victim->IsNonMeleeSpellCast(false, false, true) || victim->HasUnitState(UNIT_STATE_CONTROLLED))
3302 blockChance = 0.0f;
3303
3304 if (roll_chance_f(blockChance))
3305 return true;
3306 }
3307 return false;
3308}
@ CREATURE_FLAG_EXTRA_NO_BLOCK
Definition CreatureData.h:50
@ SPELL_ATTR0_NO_ACTIVE_DEFENSE
Definition SharedDefines.h:391
@ UNIT_STATE_CONTROLLED
Definition UnitDefines.h:218
bool HasIgnoreHitDirectionAura() const
Definition Unit.h:1813
uint32 GetWeaponSkillValue(WeaponAttackType attType, Unit const *target=nullptr) const
Definition Unit.cpp:3962
float GetUnitBlockChance() const
Definition Unit.cpp:3878

References CREATURE_FLAG_EXTRA_NO_BLOCK, GetMaxSkillValueForLevel(), GetUnitBlockChance(), GetWeaponSkillValue(), SpellInfo::HasAttribute(), Creature::HasFlagsExtra(), HasIgnoreHitDirectionAura(), Position::HasInArc(), HasUnitState(), Object::IsCreature(), IsNonMeleeSpellCast(), roll_chance_f(), SPELL_ATTR0_NO_ACTIVE_DEFENSE, SPELL_ATTR3_ALWAYS_HIT, Object::ToCreature(), and UNIT_STATE_CONTROLLED.

Referenced by CalculateSpellDamageTaken().

◆ IsSpiritGuide()

bool Unit::IsSpiritGuide ( ) const
inline

◆ IsSpiritHealer()

bool Unit::IsSpiritHealer ( ) const
inline

◆ IsSpiritService()

◆ IsStandState()

◆ IsStandUpOnMovementState()

◆ IsStopped()

bool Unit::IsStopped ( ) const
inline

◆ IsSummon()

bool Unit::IsSummon ( ) const
inline
@ UNIT_MASK_SUMMON
Definition UnitDefines.h:159

References m_unitTypeMask, and UNIT_MASK_SUMMON.

Referenced by Creature::CanPeriodicallyCallForAssistance(), spell_item_unsated_craving::CheckProc(), npc_tiger_matriarch::npc_tiger_matriarchAI::DamageTaken(), Spell::EffectScriptEffect(), boss_skeram::EnterEvadeMode(), npc_phantom_hallucination::EnterEvadeMode(), npc_marzon_silent_blade::npc_marzon_silent_bladeAI::EnterEvadeMode(), SuckBackEvent::Execute(), Spell::finish(), GetAllMinionsByEntry(), SmartScript::GetTargets(), WorldSession::HandleDismissCritter(), spell_pri_lightwell::HandleScriptEffect(), TempSummon::InitStats(), SpellClickInfo::IsFitToRequirements(), boss_skeram::JustDied(), boss_tyrannus::boss_tyrannusAI::JustDied(), boss_freya_iron_root::JustDied(), boss_yoggsaron_influence_tentacle::JustDied(), boss_essence_of_anger::boss_essence_of_angerAI::JustDied(), npc_pet_dk_ghoul::JustDied(), boss_skeram::JustEngagedWith(), npc_marzon_silent_blade::npc_marzon_silent_bladeAI::JustEngagedWith(), npc_tiger_matriarch::npc_tiger_matriarchAI::KilledUnit(), npc_marzon_silent_blade::npc_marzon_silent_bladeAI::MovementInform(), npc_attracted_reef_bull::npc_attracted_reef_bullAI::MovementInform(), npc_attracted_reef_bull::npc_attracted_reef_bullAI::npc_attracted_reef_bullAI(), npc_batrider::npc_batrider(), BattlefieldWG::OnCreatureCreate(), InstanceScript::OnCreatureCreate(), instance_blackfathom_deeps::instance_blackfathom_deeps_InstanceMapScript::OnCreatureCreate(), instance_hyjal::instance_mount_hyjal_InstanceMapScript::OnCreatureCreate(), npc_wormhole::OnGossipHello(), instance_blackfathom_deeps::instance_blackfathom_deeps_InstanceMapScript::OnUnitDeath(), RemoveAllControlled(), RemoveAllMinionsByEntry(), npc_stormforged_lieutenant::Reset(), npc_plaguehound_tracker::npc_plaguehound_trackerAI::Reset(), Creature::SaveRespawnTime(), Creature::SearchFormation(), Spell::SelectImplicitCasterObjectTargets(), Creature::SelectVictim(), npc_ulduar_flames_spread::SpellHit(), ToTempSummon(), ToTempSummon(), npc_valkyr_battle_maiden::npc_valkyr_battle_maidenAI::UpdateAI(), boss_skeram::UpdateAI(), npc_oculus_drake::npc_oculus_drakeAI::UpdateAI(), npc_ulduar_flash_freeze::UpdateAI(), npc_vh_void_sentry::UpdateAI(), npc_pet_hunter_snake_trap::UpdateAI(), and Player::VehicleSpellInitialize().

◆ isSwimming()

◆ IsTabardDesigner()

bool Unit::IsTabardDesigner ( ) const
inline

◆ isTargetableForAttack()

◆ IsTaxi()

bool Unit::IsTaxi ( ) const
inline

◆ IsThreatened()

bool Unit::IsThreatened ( ) const
17097{
17099}
bool IsThreatListEmpty(bool includeOffline=false) const
Definition ThreatManager.cpp:267

References ThreatManager::IsThreatListEmpty(), and m_threatManager.

◆ IsThreatenedBy()

bool Unit::IsThreatenedBy ( Unit const *  who) const
inline
958{ return who && m_threatManager.IsThreatenedBy(who, true); }
bool IsThreatenedBy(ObjectGuid const &who, bool includeOffline=false) const
Definition ThreatManager.cpp:277

References ThreatManager::IsThreatenedBy(), and m_threatManager.

Referenced by IsEngagedBy().

◆ IsTotem()

◆ IsTrainer()

◆ isTurning()

bool Unit::isTurning ( ) const
inline

◆ IsUnderLastManaUseEffect()

bool Unit::IsUnderLastManaUseEffect ( ) const

◆ IsUnderWater()

bool Unit::IsUnderWater ( ) const
virtual
4552{
4554}
@ LIQUID_MAP_UNDER_WATER
Definition GridTerrainData.h:195

References WorldObject::GetLiquidData(), LIQUID_MAP_UNDER_WATER, and LiquidData::Status.

Referenced by Creature::setDeathState().

◆ IsValidAssistTarget()

bool Unit::IsValidAssistTarget ( Unit const *  target) const
10885{
10886 return _IsValidAssistTarget(target, nullptr);
10887}
bool _IsValidAssistTarget(Unit const *target, SpellInfo const *bySpell) const
Definition Unit.cpp:10890

References _IsValidAssistTarget().

Referenced by SmartAI::AssistPlayerInCombatAgainst().

◆ IsValidAttackTarget()

bool Unit::IsValidAttackTarget ( Unit const *  target,
SpellInfo const *  bySpell = nullptr 
) const
10747{
10748 return _IsValidAttackTarget(target, bySpell);
10749}

References _IsValidAttackTarget().

Referenced by npc_escortAI::AssistPlayerInCombatAgainst(), Creature::CanCreatureAttack(), spell_pal_holy_shock::CheckCast(), spell_pri_penance::CheckCast(), CreatureGroup::GetNewTargetForMember(), WorldSession::HandleAttackSwingOpcode(), spell_teron_gorefiend_shadowy_construct::HandleEffectApply(), CreatureGroup::MemberEngagingTarget(), npc_icc_vengeful_fleshreaper::npc_icc_vengeful_fleshreaperAI::MoveInLineOfSight(), boss_doomwalker::MoveInLineOfSight(), boss_kaelthas::MoveInLineOfSight(), npc_air_force_bots::npc_air_force_botsAI::MoveInLineOfSight(), npc_pet_dk_ebon_gargoyle::MySelectNextTarget(), Acore::NearestAttackableNoTotemUnitInObjectRangeCheck::operator()(), Acore::NearestHostileUnitCheck::operator()(), MalleableGooSelector::operator()(), Acore::AnyUnfriendlyAttackableVisibleUnitInObjectRangeCheck::operator()(), npc_pet_dk_army_of_the_dead::OwnerAttacked(), npc_pet_dk_army_of_the_dead::OwnerAttackedBy(), SelectNearbyNoTotemTarget(), SelectNearbyTarget(), CreatureAI::SetGazeOn(), StopAttackingInvalidTarget(), SimpleCharmedAI::UpdateAI(), npc_anubarak_spike::npc_anubarak_spikeAI::UpdateAI(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::UpdateAI(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::UpdateAI(), npc_gunship_boarding_addAI::UpdateAI(), npc_gunship_gunner::npc_gunship_gunnerAI::UpdateAI(), npc_putricide_oozeAI::UpdateAI(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::UpdateAI(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::UpdateAI(), boss_four_horsemen::boss_four_horsemenAI::UpdateAI(), boss_gothik::boss_gothikAI::UpdateAI(), npc_pet_dk_ghoul::UpdateAI(), PossessedAI::UpdateAI(), Player::UpdateCharmedAI(), Player::UpdateFFAPvPFlag(), and Player::UpdateFFAPvPState().

◆ IsVehicle()

bool Unit::IsVehicle ( ) const
inline

References m_unitTypeMask, and UNIT_MASK_VEHICLE.

Referenced by Battleground::AddCreature(), Creature::AddToWorld(), ApplyResilience(), CanHaveThreatList(), spell_wintergrasp_water::CheckCast(), Spell::CheckEffectTarget(), SpellInfo::CheckTarget(), Map::CreatureRelocation(), DealDamage(), DealMeleeDamage(), MotionTransport::DelayedTeleportTransport(), Spell::EffectDummy(), Spell::EffectKnockBack(), Spell::EffectSummonType(), CreatureAI::EnterEvadeMode(), SmartScript::GetTargets(), GetVelocity(), AuraEffect::HandleAuraControlVehicle(), debug_commandscript::HandleDebugEnterVehicleCommand(), debug_commandscript::HandleDebugSetVehicleIdCommand(), spell_q13280_13283_plant_battle_standard::HandleDummy(), BattlefieldWG::HandleKill(), BattlegroundIC::HandleKillUnit(), WorldSession::HandlePetActionHelper(), spell_q12919_gymers_throw::HandleScript(), spell_putricide_mutated_transformation::HandleSummon(), TempSummon::InitStats(), KillRewarder::KillRewarder(), spell_igb_overheat_aura::Load(), MagicSpellHitResult(), SmartAI::OnCharmed(), BattlefieldWG::OnUnitDeath(), Acore::AnyGroupedUnitInObjectRangeCheck::operator()(), OutDebugInfo(), VehicleAI::Permissible(), Map::PlayerRelocation(), SmartScript::ProcessAction(), RemoveCharmedBy(), RemoveFromWorld(), Spell::SelectImplicitCasterObjectTargets(), SetCharmedBy(), SetOwnerGUID(), SetSpeed(), Player::StopCastingCharm(), Map::SummonCreature(), UpdateCharmAI(), Creature::UpdateEntry(), UpdateHeight(), UpdateOrientation(), and UpdateSpeed().

◆ IsVendor()

◆ IsVisible()

bool Unit::IsVisible ( ) const
inline
@ SEC_PLAYER
Definition Common.h:57
@ SERVERSIDE_VISIBILITY_GM
Definition SharedDefines.h:1261
T_VALUES GetValue(FLAG_TYPE flag) const
Definition Object.h:397

References FlaggedValuesArray32< T_VALUES, T_FLAGS, FLAG_TYPE, ARRAY_SIZE >::GetValue(), WorldObject::m_serverSideVisibility, SEC_PLAYER, and SERVERSIDE_VISIBILITY_GM.

Referenced by npc_ghostly_priest::AttackStart(), npc_phantom_mage::AttackStart(), npc_shadowy_mercenary::AttackStart(), npc_spectral_footman::AttackStart(), npc_tortured_rifleman::AttackStart(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::CanAIAttack(), boss_professor_putricide::boss_professor_putricideAI::CanAIAttack(), boss_sindragosa::boss_sindragosaAI::CanAIAttack(), boss_the_lich_king::boss_the_lich_kingAI::CanAIAttack(), SpellInfo::CheckTarget(), AuraEffect::HandlePhase(), Player::IsVisibleGloballyFor(), boss_the_lich_king::boss_the_lich_kingAI::JustEngagedWith(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::JustEngagedWith(), boss_professor_putricide::boss_professor_putricideAI::JustEngagedWith(), boss_sindragosa::boss_sindragosaAI::JustEngagedWith(), Acore::AllFriendlyCreaturesInGrid::operator()(), boss_sapphiron::boss_sapphironAI::Reset(), npc_pos_leader::npc_pos_leaderAI::SetData(), npc_ravenclaw_apparition::npc_ravenclaw_apparitionAI::UpdateAI(), npc_murkdeep::npc_murkdeepAI::UpdateAI(), npc_big_ooze::npc_big_oozeAI::UpdateAI(), and boss_vazruden_the_herald::UpdateAI().

◆ IsWalking()

◆ IsWithinBoundaryRadius()

bool Unit::IsWithinBoundaryRadius ( const Unit obj) const
823{
824 if (!obj || !IsInMap(obj) || !InSamePhase(obj))
825 return false;
826
827 float objBoundaryRadius = std::max(obj->GetBoundaryRadius(), MIN_MELEE_REACH);
828
829 return IsInDist(obj, objBoundaryRadius);
830}
float GetBoundaryRadius() const
Definition Unit.h:876
bool IsInDist(float x, float y, float z, float dist) const
Definition Position.h:221

References GetBoundaryRadius(), WorldObject::InSamePhase(), Position::IsInDist(), WorldObject::IsInMap(), and MIN_MELEE_REACH.

Referenced by Spell::CheckRange(), Acore::WorldObjectSpellConeTargetCheck::operator()(), and Player::Update().

◆ IsWithinCombatRange()

bool Unit::IsWithinCombatRange ( Unit const *  obj,
float  dist2compare 
) const
768{
769 if (!obj || !IsInMap(obj) || !InSamePhase(obj))
770 return false;
771
772 float dx = GetPositionX() - obj->GetPositionX();
773 float dy = GetPositionY() - obj->GetPositionY();
774 float dz = GetPositionZ() - obj->GetPositionZ();
775 float distsq = dx * dx + dy * dy + dz * dz;
776
777 float sizefactor = GetCombatReach() + obj->GetCombatReach();
778 float maxdist = dist2compare + sizefactor;
779
780 return distsq < maxdist * maxdist;
781}

References GetCombatReach(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), WorldObject::InSamePhase(), and WorldObject::IsInMap().

Referenced by ArcherAI::AttackStart(), TurretAI::CanAIAttack(), Spell::CheckRange(), UnitAI::DoSpellAttackIfReady(), UnitAI::DoSpellAttackToRandomTargetIfReady(), spell_nightbane_fireball_barrage::FilterTargets(), SmartScript::GetTargets(), npc_underbat::JustEngagedWith(), DefaultTargetSelector::operator()(), SpellTargetSelector::operator()(), PowerUsersSelector::operator()(), MalleableGooSelector::operator()(), ArcherAI::UpdateAI(), and boss_flame_leviathan::UpdateAI().

◆ IsWithinMeleeRange()

bool Unit::IsWithinMeleeRange ( Unit const *  obj,
float  dist = 0.f 
) const
784{
785 if (!obj || !IsInMap(obj) || !InSamePhase(obj))
786 return false;
787
788 float dx = GetPositionX() - obj->GetPositionX();
789 float dy = GetPositionY() - obj->GetPositionY();
790 float dz = GetPositionZ() - obj->GetPositionZ();
791 float distsq = dx * dx + dy * dy + dz * dz;
792
793 float maxdist = dist + GetMeleeRange(obj);
794
795 if ((IsPlayer() || obj->IsPlayer()) && HasLeewayMovement() && obj->HasLeewayMovement())
796 maxdist += LEEWAY_BONUS_RANGE;
797
798 return distsq < maxdist * maxdist;
799}
#define LEEWAY_BONUS_RANGE
Definition ObjectDefines.h:51
bool HasLeewayMovement() const
Definition Unit.h:1730

References GetMeleeRange(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), HasLeewayMovement(), WorldObject::InSamePhase(), WorldObject::IsInMap(), Object::IsPlayer(), and LEEWAY_BONUS_RANGE.

Referenced by boss_marli::_chargePlayer(), boss_swamplord_muselek::AttackStart(), SmartAI::AttackStart(), boss_ouro::CanAIAttack(), boss_alar::CanAIAttack(), PetAI::CanAttack(), Spell::CheckRange(), SmartAI::DistanceYourself(), UnitAI::DoMeleeAttackIfReady(), boss_mandokir::boss_mandokirAI::DoMeleeAttackIfReady(), boss_ambassador_hellmaw::DoMeleeAttackIfReady(), ChaseMovementGenerator< T >::DoUpdate(), spell_shazzrah_gate_dummy::FilterTargets(), boss_supremus::FindHatefulStrikeTarget(), boss_thaddius::boss_thaddiusAI::IsAnyPlayerInMeleeRange(), boss_ouro::IsPlayerWithinMeleeRange(), boss_ragnaros::IsVictimWithinMeleeRange(), npc_overlord_drakuru_betrayal::JustEngagedWith(), boss_swamplord_muselek::JustEngagedWith(), boss_vem::JustEngagedWith(), CreatureAI::MoveCircleChecks(), boss_twin_valkyrAI::myDoMeleeAttackIfReady(), SpellTargetSelector::operator()(), MysticBuffetTargetFilter::operator()(), SmartScript::ProcessEvent(), ThreatManager::ReselectVictim(), boss_murmur::ShouldCastResonance(), boss_quartermaster_zigris::SpellHitTarget(), Player::Update(), boss_quartermaster_zigris::UpdateAI(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::UpdateAI(), boss_mandokir::boss_mandokirAI::UpdateAI(), boss_skeram::UpdateAI(), npc_weegli_blastfuse::npc_weegli_blastfuseAI::UpdateAI(), npc_snobold_vassal::npc_snobold_vassalAI::UpdateAI(), boss_bronjahm::UpdateAI(), boss_marwyn::UpdateAI(), npc_hor_lumbering_abomination::UpdateAI(), boss_tyrannus::boss_tyrannusAI::UpdateAI(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::UpdateAI(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::UpdateAI(), npc_darnavan::npc_darnavanAI::UpdateAI(), boss_lord_marrowgar::UpdateAI(), boss_sindragosa::boss_sindragosaAI::UpdateAI(), boss_the_lich_king::boss_the_lich_kingAI::UpdateAI(), npc_blazing_skeleton::npc_blazing_skeletonAI::UpdateAI(), boss_gluth::boss_gluthAI::UpdateAI(), boss_patchwerk::boss_patchwerkAI::UpdateAI(), boss_kologarn::UpdateAI(), boss_razorscale::UpdateAI(), npc_ulduar_dark_rune_guardian::UpdateAI(), npc_ulduar_dark_rune_sentinel::UpdateAI(), boss_skarvald_the_constructor::UpdateAI(), boss_lady_vashj::UpdateAI(), boss_the_lurker_below::UpdateAI(), boss_omor_the_unscarred::UpdateAI(), PetAI::UpdateAI(), npc_dark_fiend::UpdateAI(), npc_zuljin_vortex::UpdateAI(), npc_suppresser::npc_suppresserAI::UpdateAI(), and boss_yoggsaron_crusher_tentacle::UpdateAI().

◆ IsWithinRange()

bool Unit::IsWithinRange ( Unit const *  obj,
float  dist 
) const
808{
809 if (!obj || !IsInMap(obj) || !InSamePhase(obj))
810 {
811 return false;
812 }
813
814 auto dx = GetPositionX() - obj->GetPositionX();
815 auto dy = GetPositionY() - obj->GetPositionY();
816 auto dz = GetPositionZ() - obj->GetPositionZ();
817 auto distsq = dx * dx + dy * dy + dz * dz;
818
819 return distsq <= dist * dist;
820}

References Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), WorldObject::InSamePhase(), and WorldObject::IsInMap().

Referenced by boss_swamplord_muselek::CanShootVictim(), Spell::CheckRange(), npc_sunblade_scout::JustEngagedWith(), and npc_amanishi_scout::JustEngagedWith().

◆ JumpTo() [1/2]

void Unit::JumpTo ( float  speedXY,
float  speedZ,
bool  forward = true 
)
15508{
15509 float angle = forward ? 0 : M_PI;
15510 if (IsCreature())
15511 GetMotionMaster()->MoveJumpTo(angle, speedXY, speedZ);
15512 else
15513 {
15514 float vcos = cos(angle + GetOrientation());
15515 float vsin = std::sin(angle + GetOrientation());
15516
15517 WorldPacket data(SMSG_MOVE_KNOCK_BACK, (8 + 4 + 4 + 4 + 4 + 4));
15518 data << GetPackGUID();
15519 data << uint32(0); // Sequence
15520 data << float(vcos); // x direction
15521 data << float(vsin); // y direction
15522 data << float(speedXY); // Horizontal speed
15523 data << float(-speedZ); // Z Movement speed (vertical)
15524
15525 ToPlayer()->SendDirectMessage(&data);
15526 }
15527}
void MoveJumpTo(float angle, float speedXY, float speedZ)
The unit will jump in a specific direction.
Definition MotionMaster.cpp:648
void SendDirectMessage(WorldPacket const *data) const
Definition Player.cpp:5680
@ SMSG_MOVE_KNOCK_BACK
Definition Opcodes.h:269

References GetMotionMaster(), Position::GetOrientation(), Object::GetPackGUID(), Object::IsCreature(), MotionMaster::MoveJumpTo(), Player::SendDirectMessage(), SMSG_MOVE_KNOCK_BACK, and Object::ToPlayer().

Referenced by Spell::EffectLeapBack().

◆ JumpTo() [2/2]

void Unit::JumpTo ( WorldObject obj,
float  speedZ 
)
15530{
15531 float x, y, z;
15532 obj->GetContactPoint(this, x, y, z);
15533 float speedXY = GetExactDist2d(x, y) * 10.0f / speedZ;
15534 GetMotionMaster()->MoveJump(x, y, z, speedXY, speedZ);
15535}
void MoveJump(Position const &pos, float speedXY, float speedZ, uint32 id=0)
Definition MotionMaster.h:256
void GetContactPoint(WorldObject const *obj, float &x, float &y, float &z, float distance2d=CONTACT_DISTANCE) const
Definition Object.cpp:2808

References WorldObject::GetContactPoint(), Position::GetExactDist2d(), GetMotionMaster(), and MotionMaster::MoveJump().

◆ Kill()

void Unit::Kill ( Unit killer,
Unit victim,
bool  durabilityLoss = true,
WeaponAttackType  attackType = BASE_ATTACK,
SpellInfo const *  spellProto = nullptr,
Spell const *  spell = nullptr 
)
static
Todo:
: do instance binding anyway if the charmer/owner is offline
13980{
13981 // Prevent killing unit twice (and giving reward from kill twice)
13982 if (!victim->GetHealth())
13983 return;
13984
13985 if (killer && !killer->IsInMap(victim))
13986 killer = nullptr;
13987
13988 // find player: owner of controlled `this` or `this` itself maybe
13989 Player* player = killer ? killer->GetCharmerOrOwnerPlayerOrPlayerItself() : nullptr;
13990 Creature* creature = victim->ToCreature();
13991
13992 bool isRewardAllowed = true;
13993 if (creature)
13994 {
13995 isRewardAllowed = (creature->IsDamageEnoughForLootingAndReward() && !creature->IsLootRewardDisabled());
13996 if (!isRewardAllowed)
13997 creature->SetLootRecipient(nullptr);
13998 }
13999
14000 // pussywizard: remade this if section (player is on the same map
14001 if (isRewardAllowed && creature)
14002 {
14003 Player* lr = creature->GetLootRecipient();
14004 if (lr && lr->IsInMap(creature))
14005 player = creature->GetLootRecipient();
14006 else if (Group* lrg = creature->GetLootRecipientGroup())
14007 for (GroupReference* itr = lrg->GetFirstMember(); itr != nullptr; itr = itr->next())
14008 if (Player* member = itr->GetSource())
14009 if (member->IsAtLootRewardDistance(creature))
14010 {
14011 player = member;
14012 break;
14013 }
14014 }
14015
14016 // Exploit fix
14017 if (creature && creature->IsPet() && creature->GetOwnerGUID().IsPlayer())
14018 isRewardAllowed = false;
14019
14020 // Reward player, his pets, and group/raid members
14021 // call kill spell proc event (before real die and combat stop to triggering auras removed at death/combat stop)
14022 if (isRewardAllowed && player && player != victim)
14023 {
14024 WorldPacket data(SMSG_PARTYKILLLOG, (8 + 8)); // send event PARTY_KILL
14025 data << player->GetGUID(); // player with killing blow
14026 data << victim->GetGUID(); // victim
14027
14028 Player* looter = player;
14029 Group* group = player->GetGroup();
14030 bool hasLooterGuid = false;
14031
14032 if (group)
14033 {
14034 group->BroadcastPacket(&data, group->GetMemberGroup(player->GetGUID()));
14035
14036 if (creature)
14037 {
14038 group->UpdateLooterGuid(creature, true);
14039 if (group->GetLooterGuid() && group->GetLootMethod() != FREE_FOR_ALL)
14040 {
14041 looter = ObjectAccessor::FindPlayer(group->GetLooterGuid());
14042 if (looter)
14043 {
14044 hasLooterGuid = true;
14045 creature->SetLootRecipient(looter); // update creature loot recipient to the allowed looter.
14046 }
14047 }
14048 }
14049 }
14050 else
14051 {
14052 player->SendDirectMessage(&data);
14053
14054 if (creature)
14055 {
14056 WorldPacket data2(SMSG_LOOT_LIST, 8 + 1 + 1);
14057 data2 << creature->GetGUID();
14058 data2 << uint8(0); // unk1
14059 data2 << uint8(0); // no group looter
14060 player->SendMessageToSet(&data2, true);
14061 }
14062 }
14063
14064 // Generate loot before updating looter
14065 if (creature)
14066 {
14067 Loot* loot = &creature->loot;
14068 loot->clear();
14069
14070 if (uint32 lootid = creature->GetCreatureTemplate()->lootid)
14071 loot->FillLoot(lootid, LootTemplates_Creature, looter, false, false, creature->GetLootMode(), creature);
14072
14073 if (creature->GetLootMode())
14075
14076 if (group)
14077 {
14078 if (hasLooterGuid)
14079 group->SendLooter(creature, looter);
14080 else
14081 group->SendLooter(creature, nullptr);
14082
14083 // Update round robin looter only if the creature had loot
14084 if (!creature->loot.empty())
14085 group->UpdateLooterGuid(creature);
14086 }
14087 }
14088
14089 player->RewardPlayerAndGroupAtKill(victim, false);
14090 }
14091
14092 // Do KILL and KILLED procs. KILL proc is called only for the unit who landed the killing blow (and its owner - for pets and totems) regardless of who tapped the victim
14093 // Spell context is not passed to avoid the killing spell's triggered status from suppressing nested proc events
14094 if (killer && (killer->IsPet() || killer->IsTotem()))
14095 if (Unit* owner = killer->GetOwner())
14096 {
14097 Unit::ProcSkillsAndAuras(owner, victim, PROC_FLAG_KILL, PROC_FLAG_NONE, PROC_EX_NONE, 0, attackType, nullptr, nullptr, -1, nullptr);
14098 sScriptMgr->OnPlayerCreatureKilledByPet( killer->GetCharmerOrOwnerPlayerOrPlayerItself(), victim->ToCreature());
14099 }
14100
14101 if (killer != victim)
14102 {
14103 Unit::ProcSkillsAndAuras(killer, victim, killer ? PROC_FLAG_KILL : 0, PROC_FLAG_KILLED, PROC_EX_NONE, 0, attackType, nullptr, nullptr, -1, nullptr);
14104 }
14105
14106 // Proc auras on death - must be before aura/combat remove
14107 Unit::ProcSkillsAndAuras(victim, nullptr, PROC_FLAG_DEATH, PROC_FLAG_NONE, PROC_EX_NONE, 0, attackType, nullptr, nullptr, -1, nullptr);
14108
14109 // update get killing blow achievements, must be done before setDeathState to be able to require auras on target
14110 // and before Spirit of Redemption as it also removes auras
14111 if (killer)
14112 if (Player* killerPlayer = killer->GetCharmerOrOwnerPlayerOrPlayerItself())
14113 killerPlayer->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS, 1, 0, victim);
14114
14115 // Spirit of Redemption
14116 // if talent known but not triggered (check priest class for speedup check)
14117 bool spiritOfRedemption = false;
14119 {
14120 if (AuraEffect* aurEff = victim->GetAuraEffectDummy(20711))
14121 {
14122 // Xinef: aura_spirit_of_redemption is triggered by 27827 shapeshift
14123 if (victim->HasSpiritOfRedemptionAura() || victim->HasAura(27827))
14124 {
14125 /*LOG_INFO("misc", "Player ({}) died with spirit of redemption. Killer (Entry: {}, Name: {}), Map: {}, x: {}, y: {}, z: {}",
14126 victim->GetGUID().ToString(), killer ? killer->GetEntry() : 1, killer ? killer->GetName() : "", victim->GetMapId(), victim->GetPositionX(),
14127 victim->GetPositionY(), victim->GetPositionZ());
14128
14129 ACE_Stack_Trace trace(0, 50);
14130 LOG_INFO("misc", "TRACE: {}\n\n", trace);*/
14131 }
14132 else
14133 {
14134 // save value before aura remove
14135 uint32 ressSpellId = victim->GetUInt32Value(PLAYER_SELF_RES_SPELL);
14136 if (!ressSpellId)
14137 ressSpellId = victim->ToPlayer()->GetResurrectionSpellId();
14138
14139 //Remove all expected to remove at death auras (most important negative case like DoT or periodic triggers)
14140 victim->RemoveAllAurasOnDeath();
14141
14142 // Stop attacks
14143 victim->CombatStop();
14144
14145 // restore for use at real death
14146 victim->SetUInt32Value(PLAYER_SELF_RES_SPELL, ressSpellId);
14147
14148 // FORM_SPIRITOFREDEMPTION and related auras
14149 victim->CastSpell(victim, 27827, true, nullptr, aurEff);
14150 spiritOfRedemption = true;
14151 }
14152 }
14153 }
14154
14155 if (!spiritOfRedemption)
14156 {
14157 LOG_DEBUG("entities.unit", "SET DeathState::JustDied");
14159 }
14160
14161 // Inform pets (if any) when player kills target)
14162 // MUST come after victim->setDeathState(DeathState::JustDied); or pet next target
14163 // selection will get stuck on same target and break pet react state
14164 if (player)
14165 {
14166 Pet* pet = player->GetPet();
14167 if (pet && pet->IsAlive() && pet->isControlled())
14168 pet->AI()->KilledUnit(victim);
14169 }
14170
14171 // 10% durability loss on death
14172 // clean InHateListOf
14173 if (Player* plrVictim = victim->ToPlayer())
14174 {
14175 // remember victim PvP death for corpse type and corpse reclaim delay
14176 // at original death (not at SpiritOfRedemtionTalent timeout)
14177 plrVictim->SetPvPDeath(player != nullptr);
14178
14179 // only if not player and not controlled by player pet. And not at BG
14180 if ((durabilityLoss && !player && !plrVictim->InBattleground()) || (player && sWorld->getBoolConfig(CONFIG_DURABILITY_LOSS_IN_PVP)))
14181 {
14182 LOG_DEBUG("entities.unit", "We are dead, losing {} percent durability", sWorld->getRate(RATE_DURABILITY_LOSS_ON_DEATH) / 100.0f);
14183 plrVictim->DurabilityLossAll(sWorld->getRate(RATE_DURABILITY_LOSS_ON_DEATH) / 100.0f, false);
14184 // durability lost message
14185 plrVictim->SendDurabilityLoss();
14186 }
14187 // Call KilledUnit for creatures
14188 if (killer && killer->IsCreature() && killer->IsAIEnabled)
14189 killer->ToCreature()->AI()->KilledUnit(victim);
14190
14191 // last damage from non duel opponent or opponent controlled creature
14192 if (plrVictim->duel)
14193 {
14194 plrVictim->duel->Opponent->CombatStopWithPets(true);
14195 plrVictim->CombatStopWithPets(true);
14196 plrVictim->DuelComplete(DUEL_INTERRUPTED);
14197 }
14198 }
14199 else // creature died
14200 {
14201 LOG_DEBUG("entities.unit", "DealDamageNotPlayer");
14202
14203 if (!creature->IsPet() && creature->GetLootMode() > 0)
14204 {
14205 // must be after setDeathState which resets dynamic flags
14206 if (!creature->loot.isLooted())
14207 {
14209 }
14210 else
14211 {
14212 creature->AllLootRemovedFromCorpse();
14213 }
14214 }
14215
14216 // Call KilledUnit for creatures, this needs to be called after the lootable flag is set
14217 if (killer && killer->IsCreature() && killer->IsAIEnabled)
14218 killer->ToCreature()->AI()->KilledUnit(victim);
14219
14220 // Call creature just died function
14221 if (CreatureAI* ai = creature->AI())
14222 {
14223 ai->JustDied(killer);
14224 }
14225
14226 if (TempSummon* summon = creature->ToTempSummon())
14227 {
14228 if (WorldObject* summoner = summon->GetSummoner())
14229 {
14230 if (summoner->ToCreature() && summoner->ToCreature()->IsAIEnabled)
14231 {
14232 summoner->ToCreature()->AI()->SummonedCreatureDies(creature, killer);
14233 }
14234 else if (summoner->ToGameObject() && summoner->ToGameObject()->AI())
14235 {
14236 summoner->ToGameObject()->AI()->SummonedCreatureDies(creature, killer);
14237 }
14238 }
14239 }
14240
14241 // Dungeon specific stuff, only applies to players killing creatures
14242 if (creature->GetInstanceId())
14243 {
14244 Map* instanceMap = creature->GetMap();
14245 //Player* creditedPlayer = GetCharmerOrOwnerPlayerOrPlayerItself();
14247
14248 if (instanceMap->IsDungeon() && player)
14249 if (instanceMap->IsRaidOrHeroicDungeon())
14251 instanceMap->ToInstanceMap()->PermBindAllPlayers();
14252 }
14253 }
14254
14255 // outdoor pvp things, do these after setting the death state, else the player activity notify won't work... doh...
14256 // handle player kill only if not suicide (spirit of redemption for example)
14257 if (player && killer != victim)
14258 {
14259 if (OutdoorPvP* pvp = player->GetOutdoorPvP())
14260 pvp->HandleKill(player, victim);
14261
14262 if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(player->GetZoneId()))
14263 bf->HandleKill(player, victim);
14264 }
14265
14266 //if (victim->IsPlayer())
14267 // if (OutdoorPvP* pvp = victim->ToPlayer()->GetOutdoorPvP())
14268 // pvp->HandlePlayerActivityChangedpVictim->ToPlayer();
14269
14270 // battleground things (do this at the end, so the death state flag will be properly set to handle in the bg->handlekill)
14271 if (player)
14272 if (Battleground* bg = player->GetBattleground())
14273 {
14274 if (victim->IsPlayer())
14275 bg->HandleKillPlayer(victim->ToPlayer(), player);
14276 else
14277 bg->HandleKillUnit(victim->ToCreature(), player);
14278 }
14279
14280 // achievement stuff
14281 if (killer && victim->IsPlayer())
14282 {
14283 if (killer->IsCreature())
14285 else if (victim != killer && killer->IsPlayer())
14287 }
14288
14289 // Hook for OnPVPKill Event
14290 if (killer)
14291 {
14292 if (Player* killerPlr = killer->ToPlayer())
14293 {
14294 if (Player* killedPlr = victim->ToPlayer())
14295 sScriptMgr->OnPlayerPVPKill(killerPlr, killedPlr);
14296 else if (Creature* killedCre = victim->ToCreature())
14297 sScriptMgr->OnPlayerCreatureKill(killerPlr, killedCre);
14298 }
14299 else if (Creature* killerCre = killer->ToCreature())
14300 {
14301 if (Player* killed = victim->ToPlayer())
14302 sScriptMgr->OnPlayerKilledByCreature(killerCre, killed);
14303 }
14304 }
14305
14306 sScriptMgr->OnUnitDeath(victim, killer);
14307}
#define sBattlefieldMgr
Definition BattlefieldMgr.h:76
@ CREATURE_FLAG_EXTRA_INSTANCE_BIND
Definition CreatureData.h:46
@ ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_PLAYER
Definition DBCEnums.h:138
@ ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE
Definition DBCEnums.h:137
@ ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS
Definition DBCEnums.h:170
LootStore LootTemplates_Creature("creature_loot_template", "creature entry", true)
@ FREE_FOR_ALL
Definition LootMgr.h:58
@ PLAYER_FLAGS_IS_OUT_OF_BOUNDS
Definition Player.h:473
@ UNIT_DYNFLAG_LOOTABLE
Definition SharedDefines.h:3354
@ DUEL_INTERRUPTED
Definition SharedDefines.h:3868
@ CLASS_PRIEST
Definition SharedDefines.h:130
@ PROC_EX_NONE
Definition SpellMgr.h:198
@ PROC_FLAG_KILLED
Definition SpellMgr.h:110
@ PROC_FLAG_DEATH
Definition SpellMgr.h:146
@ PROC_FLAG_KILL
Definition SpellMgr.h:111
@ PLAYER_SELF_RES_SPELL
Definition UpdateFields.h:370
@ RATE_DURABILITY_LOSS_ON_DEATH
Definition WorldConfig.h:487
@ CONFIG_DURABILITY_LOSS_IN_PVP
Definition WorldConfig.h:25
Definition Battlefield.h:208
virtual void KilledUnit(Unit *)
Definition CreatureAI.h:149
Loot loot
Definition Creature.h:231
uint16 GetLootMode() const
Definition Creature.h:245
void AllLootRemovedFromCorpse()
Definition Creature.cpp:3109
bool IsLootRewardDisabled() const
Definition Creature.h:381
Player * GetLootRecipient() const
Definition Creature.cpp:1291
bool IsDamageEnoughForLootingAndReward() const
Definition Creature.cpp:3829
Group * GetLootRecipientGroup() const
Definition Creature.cpp:1298
GroupReference * next()
Definition GroupReference.h:36
void BroadcastPacket(WorldPacket const *packet, bool ignorePlayersInBGRaid, int group=-1, ObjectGuid ignore=ObjectGuid::Empty)
Definition Group.cpp:1760
uint8 GetMemberGroup(ObjectGuid guid) const
Definition Group.cpp:2397
ObjectGuid GetLooterGuid() const
Definition Group.cpp:2334
LootMethod GetLootMethod() const
Definition Group.cpp:2329
void UpdateLooterGuid(WorldObject *pLootedObject, bool ifneed=false)
Definition Group.cpp:1871
void SendLooter(Creature *creature, Player *pLooter)
Definition Group.cpp:939
void PermBindAllPlayers()
Definition Map.cpp:2188
Definition Map.h:166
bool IsRaidOrHeroicDungeon() const
Definition Map.h:300
InstanceMap * ToInstanceMap()
Definition Map.h:381
virtual void SetDynamicFlag(uint32 flag)
Definition Object.h:125
Definition OutdoorPvP.h:188
TeamId GetTeamId(bool original=false) const
Definition Player.h:2127
Pet * GetPet() const
Definition Player.cpp:8946
Battleground * GetBattleground(bool create=false) const
Definition Player.cpp:12168
uint32 GetResurrectionSpellId()
Definition Player.cpp:12629
OutdoorPvP * GetOutdoorPvP() const
Definition Player.cpp:12499
void RewardPlayerAndGroupAtKill(Unit *victim, bool isBattleGround)
Definition Player.cpp:12743
void RemoveAllAurasOnDeath()
Definition Unit.cpp:5635
AuraEffect * GetAuraEffectDummy(uint32 spellid) const
Definition Unit.cpp:5839
uint32 GetInstanceId() const
Definition Object.h:513
uint32 GetZoneId() const
Definition Object.cpp:3111
@ SMSG_PARTYKILLLOG
Definition Opcodes.h:531
@ SMSG_LOOT_LIST
Definition Opcodes.h:1047
Player * FindPlayer(ObjectGuid const guid)
Definition ObjectAccessor.cpp:245
uint32 mingold
Definition CreatureData.h:227
uint32 maxgold
Definition CreatureData.h:228
uint32 lootid
Definition CreatureData.h:220
Definition LootMgr.h:313
bool empty() const
Definition LootMgr.h:367
bool isLooted() const
Definition LootMgr.h:368
void clear()
Definition LootMgr.h:343
void generateMoneyLoot(uint32 minAmount, uint32 maxAmount)
Definition LootMgr.cpp:808
bool FillLoot(uint32 lootId, LootStore const &store, Player *lootOwner, bool personal, bool noEmptyError=false, uint16 lootMode=LOOT_MODE_DEFAULT, WorldObject *lootSource=nullptr)
Definition LootMgr.cpp:540

References ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS, ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE, ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_PLAYER, Creature::AI(), Creature::AllLootRemovedFromCorpse(), Group::BroadcastPacket(), CastSpell(), CLASS_CONTEXT_ABILITY, CLASS_PRIEST, Loot::clear(), CombatStop(), CONFIG_DURABILITY_LOSS_IN_PVP, CREATURE_FLAG_EXTRA_INSTANCE_BIND, DUEL_INTERRUPTED, Loot::empty(), Loot::FillLoot(), ObjectAccessor::FindPlayer(), FREE_FOR_ALL, Loot::generateMoneyLoot(), GetAuraEffectDummy(), Player::GetBattleground(), GetCharmerOrOwnerPlayerOrPlayerItself(), Creature::GetCreatureTemplate(), Object::GetEntry(), Player::GetGroup(), Object::GetGUID(), GetHealth(), WorldObject::GetInstanceId(), Group::GetLooterGuid(), Group::GetLootMethod(), Creature::GetLootMode(), Creature::GetLootRecipient(), Creature::GetLootRecipientGroup(), WorldObject::GetMap(), Group::GetMemberGroup(), Player::GetOutdoorPvP(), GetOwner(), GetOwnerGUID(), Player::GetPet(), Player::GetResurrectionSpellId(), Player::GetTeamId(), Object::GetUInt32Value(), WorldObject::GetZoneId(), HasAura(), Creature::HasFlagsExtra(), Player::HasPlayerFlag(), HasSpiritOfRedemptionAura(), Player::InBattleground(), IsAIEnabled, IsAlive(), IsClass(), Pet::isControlled(), Object::IsCreature(), Creature::IsDamageEnoughForLootingAndReward(), Map::IsDungeon(), WorldObject::IsInMap(), Loot::isLooted(), Creature::IsLootRewardDisabled(), IsPet(), Object::IsPlayer(), ObjectGuid::IsPlayer(), Map::IsRaidOrHeroicDungeon(), IsTotem(), JustDied, CreatureAI::KilledUnit(), LOG_DEBUG, Creature::loot, CreatureTemplate::lootid, LootTemplates_Creature, CreatureTemplate::maxgold, CreatureTemplate::mingold, GroupReference::next(), InstanceMap::PermBindAllPlayers(), PLAYER_FLAGS_IS_OUT_OF_BOUNDS, PLAYER_SELF_RES_SPELL, PROC_EX_NONE, PROC_FLAG_DEATH, PROC_FLAG_KILL, PROC_FLAG_KILLED, PROC_FLAG_NONE, ProcSkillsAndAuras(), RATE_DURABILITY_LOSS_ON_DEATH, RemoveAllAurasOnDeath(), Player::RewardPlayerAndGroupAtKill(), sBattlefieldMgr, Player::SendDirectMessage(), Group::SendLooter(), Player::SendMessageToSet(), setDeathState(), Object::SetDynamicFlag(), Creature::SetLootRecipient(), SetUInt32Value(), SMSG_LOOT_LIST, SMSG_PARTYKILLLOG, sScriptMgr, sWorld, Object::ToCreature(), Map::ToInstanceMap(), Object::ToPlayer(), ToTempSummon(), UNIT_DYNFLAG_LOOTABLE, Player::UpdateAchievementCriteria(), and Group::UpdateLooterGuid().

Referenced by boss_headless_horseman_head::DamageTaken(), boss_viscidus::DamageTaken(), npc_ulduar_iron_construct::DamageTaken(), boss_yoggsaron_brain::DamageTaken(), DealDamage(), boss_jedoga_shadowseeker::DoAction(), npc_pos_martin_or_gorkun_second::npc_pos_martin_or_gorkun_secondAI::DoAction(), boss_illidan_stormrage::DoAction(), boss_illidari_council::DoAction(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::EnterEvadeMode(), LichKingDeathEvent::Execute(), DeathEvent::Execute(), BattlegroundIC::HandleCapturedNodes(), misc_commandscript::HandleDieCommand(), spell_ooze_zap_channel_end::HandleDummy(), spell_pos_rimefang_frost_nova::HandleDummy(), spell_q12589_shoot_rjr::HandleDummy(), spell_item_chicken_cover::HandleDummy(), spell_yogg_saron_titanic_storm::HandleDummyEffect(), spell_item_rocket_chicken::HandleDummyTick(), spell_ulduar_arachnopod_damaged_aura::HandleEffectPeriodic(), spell_mc_play_dead_aura::HandleEffectRemove(), spell_teron_gorefiend_spiritual_vengeance::HandleEffectRemove(), spell_chapter2_persuasive_strike::HandleHit(), spell_voa_overcharge_aura::HandlePeriodicDummy(), AuraEffect::HandlePeriodicTriggerSpellAuraTick(), spell_felmyst_fog_of_corruption_charm_aura::HandleRemove(), spell_leotheras_clear_consuming_madness::HandleScriptEffect(), boss_twin_valkyrAI::JustDied(), boss_prince_keleseth_icc::boss_prince_kelesethAI::JustDied(), boss_prince_taldaram_icc::boss_prince_taldaramAI::JustDied(), boss_prince_valanar_icc::boss_prince_valanarAI::JustDied(), boss_sister_svalna::boss_sister_svalnaAI::JustDied(), boss_ignis::JustDied(), boss_essence_of_anger::boss_essence_of_angerAI::JustDied(), boss_ahune::JustDied(), npc_frozen_core::JustDied(), boss_twinemperorsAI::JustDied(), boss_halion::boss_halionAI::JustDied(), boss_twilight_halion::boss_twilight_halionAI::JustDied(), instance_nexus::instance_nexus_InstanceMapScript::KillAllFrayers(), KillSelf(), boss_buru::ManipulateEggs(), npc_burning_spirit::MovementInform(), spell_q12779_an_end_to_all_things_devour_aura::OnRemove(), spell_yogg_saron_insane_aura::OnRemove(), WretchedGhoulCleaner::operator()(), npc_ulduar_leviathan_mkii::PassengerBoarded(), SmartScript::ProcessAction(), instance_halls_of_reflection::RandomizeCompositionsAndShow(), boss_valithria_dreamwalker::boss_valithria_dreamwalkerAI::SpellHit(), npc_cos_stratholme_citizien::npc_cos_stratholme_citizienAI::SpellHit(), boss_sister_svalna::boss_sister_svalnaAI::SpellHitTarget(), npc_oculus_drake::npc_oculus_drakeAI::SpellHitTarget(), instance_stratholme::instance_stratholme_InstanceMapScript::Update(), instance_trial_of_the_champion::instance_trial_of_the_champion_InstanceMapScript::Update(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::Update(), instance_shattered_halls::instance_shattered_halls_InstanceMapScript::Update(), SimpleCharmedAI::UpdateAI(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::UpdateAI(), npc_hor_lich_king::UpdateAI(), npc_pos_leader::npc_pos_leaderAI::UpdateAI(), boss_the_lich_king::boss_the_lich_kingAI::UpdateAI(), npc_tirion_fordring_tft::npc_tirion_fordringAI::UpdateAI(), boss_sjonnir_malformed_ooze::boss_sjonnir_malformed_oozeAI::UpdateAI(), npc_ulduar_arachnopod_destroyer::UpdateAI(), npc_vh_teleportation_portal::UpdateAI(), npc_sinkhole_kill_credit::npc_sinkhole_kill_creditAI::UpdateAI(), npc_boneguard_footman::npc_boneguard_footmanAI::UpdateAI(), npc_gunship::npc_gunshipAI::UpdateAI(), and npc_emily::npc_emilyAI::WaypointReached().

◆ KillSelf()

void Unit::KillSelf ( bool  durabilityLoss = true,
WeaponAttackType  attackType = BASE_ATTACK,
SpellInfo const *  spellProto = nullptr,
Spell const *  spell = nullptr 
)
inline
1234{ Kill(this, this, durabilityLoss, attackType, spellProto, spell); };

References Kill().

Referenced by boss_felblood_kaelthas::DamageTaken(), npc_q24545_wretched_ghoul::npc_q24545_wretched_ghoulAI::DoAction(), instance_karazhan::instance_karazhan_InstanceMapScript::DoAction(), boss_kalecgos::DoAction(), boss_yoggsaron_sara::DoAction(), boss_illidari_council::DoAction(), npc_xt002_boombot::Explode(), npc_raging_flames::FixateRandomTarget(), spell_chapter2_persuasive_strike::HandleHit(), npc_rancid_mushroom::InitializeAI(), boss_warlord_kalithresh::JustDied(), npc_koltira_deathweaver::npc_koltira_deathweaverAI::MovementInform(), npc_wild_wyrm::MovementInform(), npc_pet_gen_plump_turkey::MovementInform(), npc_announcer_toc5::npc_announcer_toc5AI::MovementInform(), boss_glob_of_viscidus::MovementInform(), SmartScript::ProcessAction(), npc_singularity::Reset(), boss_archimonde::Reset(), boss_kologarn_pit_kill_bunny::Reset(), npc_necropolis_health::SpellHit(), npc_dark_iron_guzzler::SpellHit(), boss_faerlina::boss_faerlinaAI::SpellHit(), npc_necrotic_shard::SpellHit(), boss_victor_nefarius::SummonedCreatureDies(), boss_drakkari_colossus::boss_drakkari_colossusAI::SummonedCreatureDies(), npc_icc_gauntlet_controller::npc_icc_gauntlet_controllerAI::SummonedCreatureDies(), boss_vazruden_the_herald::SummonedCreatureDies(), npc_warden_mellichar::npc_warden_mellicharAI::SummonedCreatureDies(), npc_brewfest_super_brew_trigger::UpdateAI(), boss_krick::boss_krickAI::UpdateAI(), boss_thaddius::boss_thaddiusAI::UpdateAI(), boss_sjonnir_malformed_ooze::boss_sjonnir_malformed_oozeAI::UpdateAI(), npc_vrykul_skeleton::UpdateAI(), npc_vh_void_sentry::UpdateAI(), npc_target_dummy::UpdateAI(), and npc_frost_tomb::UpdateAI().

◆ KnockbackFrom()

void Unit::KnockbackFrom ( float  x,
float  y,
float  speedXY,
float  speedZ 
)
15401{
15402 Player* player = ToPlayer();
15403 if (!player)
15404 {
15405 if (Unit* charmer = GetCharmer())
15406 {
15407 player = charmer->ToPlayer();
15408 if (player && player->m_mover != this)
15409 player = nullptr;
15410 }
15411 }
15412
15413 if (!player)
15414 {
15415 GetMotionMaster()->MoveKnockbackFrom(x, y, speedXY, speedZ);
15416 }
15417 else
15418 {
15419 float vcos, vsin;
15420 GetSinCos(x, y, vsin, vcos);
15421
15422 WorldPacket data(SMSG_MOVE_KNOCK_BACK, (8 + 4 + 4 + 4 + 4 + 4));
15423 data << GetPackGUID();
15424 data << player->GetSession()->GetOrderCounter(); // movement counter
15425 data << float(vcos); // x direction
15426 data << float(vsin); // y direction
15427 data << float(speedXY); // Horizontal speed
15428 data << float(-speedZ); // Z Movement speed (vertical)
15429
15430 player->SendDirectMessage(&data);
15431 player->GetSession()->IncrementOrderCounter();
15432
15433 player->SetCanKnockback(true);
15434 }
15435}
void MoveKnockbackFrom(float srcX, float srcY, float speedXY, float speedZ)
Definition MotionMaster.cpp:619
SafeUnitPointer m_mover
Definition Player.h:2368
void SetCanKnockback(bool value)
Definition Player.h:2536
WorldSession * GetSession() const
Definition Player.h:2019
uint32 GetOrderCounter() const
Definition WorldSession.h:619
void IncrementOrderCounter()
Definition WorldSession.h:620
void GetSinCos(float x, float y, float &vsin, float &vcos) const
Definition Position.cpp:99

References GetCharmer(), GetMotionMaster(), WorldSession::GetOrderCounter(), Object::GetPackGUID(), Player::GetSession(), Position::GetSinCos(), WorldSession::IncrementOrderCounter(), Player::m_mover, MotionMaster::MoveKnockbackFrom(), Player::SendDirectMessage(), Player::SetCanKnockback(), SMSG_MOVE_KNOCK_BACK, and Object::ToPlayer().

Referenced by _ExitVehicle(), boss_maexxna::boss_maexxnaAI::DoCastWebWrap(), Spell::EffectKnockBack(), spell_warhead_detonate::HandleDummy(), npc_vekjik::OnGossipSelect(), and npc_hor_leader_second::npc_hor_leader_secondAI::UpdateAI().

◆ MagicSpellHitResult()

SpellMissInfo Unit::MagicSpellHitResult ( Unit victim,
SpellInfo const *  spell 
)
3512{
3513 // Can`t miss on dead target (on skinning for example)
3514 if (!victim->IsAlive() && !victim->IsPlayer())
3515 return SPELL_MISS_NONE;
3516
3517 // vehicles cant miss
3518 if (IsVehicle())
3519 return SPELL_MISS_NONE;
3520
3521 // Spells with SPELL_ATTR3_ALWAYS_HIT will additionally fully ignore
3522 // resist and deflect chances
3523 // xinef: skip all calculations, proof: Toxic Tolerance quest
3524 if (spellInfo->HasAttribute(SPELL_ATTR3_ALWAYS_HIT))
3525 return SPELL_MISS_NONE;
3526
3527 if (spellInfo->HasAttribute(SPELL_ATTR7_NO_ATTACK_MISS))
3528 {
3529 return SPELL_MISS_NONE;
3530 }
3531
3532 SpellSchoolMask schoolMask = spellInfo->GetSchoolMask();
3533 int32 thisLevel = getLevelForTarget(victim);
3534 if (IsCreature() && ToCreature()->IsTrigger())
3535 thisLevel = std::max<int32>(thisLevel, spellInfo->SpellLevel);
3536 int32 levelDiff = int32(victim->getLevelForTarget(this)) - thisLevel;
3537
3538 int32 MISS_CHANCE_MULTIPLIER;
3539 if (sWorld->getBoolConfig(CONFIG_MISS_CHANCE_MULTIPLIER_ONLY_FOR_PLAYERS) && !IsPlayer()) // keep it as it was originally (7 and 11)
3540 {
3541 MISS_CHANCE_MULTIPLIER = victim->IsPlayer() ? 7 : 11;
3542 }
3543 else
3544 {
3545 MISS_CHANCE_MULTIPLIER = sWorld->getRate(
3546 victim->IsPlayer()
3549 }
3550
3551 // Base hit chance from attacker and victim levels
3552 int32 modHitChance = levelDiff < 3
3553 ? 96 - levelDiff
3554 : 94 - (levelDiff - 2) * MISS_CHANCE_MULTIPLIER;
3555
3556 // Spellmod from SPELLMOD_RESIST_MISS_CHANCE
3557 if (Player* modOwner = GetSpellModOwner())
3558 modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_RESIST_MISS_CHANCE, modHitChance);
3559
3560 // Increase from attacker SPELL_AURA_MOD_INCREASES_SPELL_PCT_TO_HIT auras
3562
3563 // Spells with SPELL_ATTR3_ALWAYS_HIT will ignore target's avoidance effects
3564 // xinef: imo it should completly ignore all calculations, eg: 14792. Hits 80 level players on blizz without any problems
3565 //if (!spell->HasAttribute(SPELL_ATTR3_ALWAYS_HIT))
3566 {
3567 // Chance hit from victim SPELL_AURA_MOD_ATTACKER_SPELL_HIT_CHANCE auras
3569 // Reduce spell hit chance for Area of effect spells from victim SPELL_AURA_MOD_AOE_AVOIDANCE aura
3570 if (spellInfo->IsAffectingArea())
3571 modHitChance -= victim->GetTotalAuraModifier(SPELL_AURA_MOD_AOE_AVOIDANCE);
3572
3573 // Decrease hit chance from victim rating bonus
3574 if (victim->IsPlayer())
3575 modHitChance -= int32(victim->ToPlayer()->GetRatingBonusValue(CR_HIT_TAKEN_SPELL));
3576 }
3577
3578 int32 HitChance = modHitChance * 100;
3579 // Increase hit chance from attacker SPELL_AURA_MOD_SPELL_HIT_CHANCE and attacker ratings
3580 // Xinef: Totems should inherit casters ratings?
3581 if (IsTotem())
3582 {
3583 if (Unit* owner = GetOwner())
3584 HitChance += int32(owner->m_modSpellHitChance * 100.0f);
3585 }
3586 else
3587 HitChance += int32(m_modSpellHitChance * 100.0f);
3588
3589 if (HitChance < 100)
3590 HitChance = 100;
3591 else if (HitChance > 10000)
3592 HitChance = 10000;
3593
3594 int32 tmp = 10000 - HitChance;
3595
3596 int32 rand = irand(1, 10000); // Needs to be 1 to 10000 to avoid the 1/10000 chance to miss on 100% hit rating
3597
3598 if (rand < tmp)
3599 return SPELL_MISS_MISS;
3600
3601 // Chance resist mechanic (select max value from every mechanic spell effect)
3602 int32 resist_chance = victim->GetMechanicResistChance(spellInfo) * 100;
3603 tmp += resist_chance;
3604
3605 // Chance resist debuff
3606 if (!spellInfo->IsPositive() && !spellInfo->HasAttribute(SPELL_ATTR4_NO_CAST_LOG))
3607 {
3608 bool bNegativeAura = true;
3609 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
3610 {
3611 // Xinef: Check if effect exists!
3612 if (spellInfo->Effects[i].IsEffect() && spellInfo->Effects[i].ApplyAuraName == 0)
3613 {
3614 bNegativeAura = false;
3615 break;
3616 }
3617 }
3618
3619 if (bNegativeAura)
3620 {
3621 tmp += victim->GetMaxPositiveAuraModifierByMiscValue(SPELL_AURA_MOD_DEBUFF_RESISTANCE, int32(spellInfo->Dispel)) * 100;
3622 tmp += victim->GetMaxNegativeAuraModifierByMiscValue(SPELL_AURA_MOD_DEBUFF_RESISTANCE, int32(spellInfo->Dispel)) * 100;
3623 }
3624
3625 if (spellInfo->HasAttribute(SPELL_ATTR0_CU_BINARY_SPELL) && (spellInfo->GetSchoolMask() & (SPELL_SCHOOL_MASK_NORMAL | SPELL_SCHOOL_MASK_HOLY)) == 0)
3626 tmp += int32(Unit::GetEffectiveResistChance(this, spellInfo->GetSchoolMask(), victim, spellInfo) * 10000.0f);
3627 }
3628
3629 // Roll chance
3630 if (rand < tmp)
3631 return SPELL_MISS_RESIST;
3632
3633 // cast by caster in front of victim
3634 if (!victim->HasUnitState(UNIT_STATE_STUNNED) && (victim->HasInArc(M_PI, this) || victim->HasIgnoreHitDirectionAura()))
3635 {
3636 int32 deflect_chance = victim->GetTotalAuraModifier(SPELL_AURA_DEFLECT_SPELLS) * 100;
3637 tmp += deflect_chance;
3638 if (rand < tmp)
3639 return SPELL_MISS_DEFLECT;
3640 }
3641
3642 return SPELL_MISS_NONE;
3643}
int32 irand(int32 min, int32 max)
Definition Random.cpp:37
@ SPELL_ATTR7_NO_ATTACK_MISS
Definition SharedDefines.h:654
@ SPELL_MISS_NONE
Definition SharedDefines.h:1523
@ SPELL_MISS_RESIST
Definition SharedDefines.h:1525
@ SPELL_MISS_MISS
Definition SharedDefines.h:1524
@ SPELL_MISS_DEFLECT
Definition SharedDefines.h:1532
@ SPELL_AURA_MOD_DEBUFF_RESISTANCE
Definition SpellAuraDefines.h:241
@ SPELL_AURA_MOD_INCREASES_SPELL_PCT_TO_HIT
Definition SpellAuraDefines.h:262
@ SPELL_AURA_MOD_ATTACKER_SPELL_HIT_CHANCE
Definition SpellAuraDefines.h:249
@ SPELL_AURA_MOD_AOE_AVOIDANCE
Definition SpellAuraDefines.h:223
@ SPELLMOD_RESIST_MISS_CHANCE
Definition SpellDefines.h:92
@ CR_HIT_TAKEN_SPELL
Definition Unit.h:236
@ CONFIG_MISS_CHANCE_MULTIPLIER_ONLY_FOR_PLAYERS
Definition WorldConfig.h:136
@ RATE_MISS_CHANCE_MULTIPLIER_TARGET_PLAYER
Definition WorldConfig.h:495
@ RATE_MISS_CHANCE_MULTIPLIER_TARGET_CREATURE
Definition WorldConfig.h:494
float GetRatingBonusValue(CombatRating cr) const
Definition Player.cpp:5183
int32 GetMaxNegativeAuraModifierByMiscValue(AuraType auratype, int32 misc_value) const
Definition Unit.cpp:6386
int32 GetMaxPositiveAuraModifierByMiscValue(AuraType auratype, int32 misc_value) const
Definition Unit.cpp:6376
int32 GetMechanicResistChance(SpellInfo const *spell)
Definition Unit.cpp:3317

References CONFIG_MISS_CHANCE_MULTIPLIER_ONLY_FOR_PLAYERS, CR_HIT_TAKEN_SPELL, SpellInfo::Dispel, SpellInfo::Effects, GetEffectiveResistChance(), getLevelForTarget(), GetMaxNegativeAuraModifierByMiscValue(), GetMaxPositiveAuraModifierByMiscValue(), GetMechanicResistChance(), GetOwner(), Player::GetRatingBonusValue(), SpellInfo::GetSchoolMask(), GetSpellModOwner(), GetTotalAuraModifier(), GetTotalAuraModifierByMiscMask(), SpellInfo::HasAttribute(), HasIgnoreHitDirectionAura(), Position::HasInArc(), HasUnitState(), SpellInfo::Id, irand(), SpellInfo::IsAffectingArea(), IsAlive(), Object::IsCreature(), Object::IsPlayer(), SpellInfo::IsPositive(), IsTotem(), IsVehicle(), m_modSpellHitChance, MAX_SPELL_EFFECTS, RATE_MISS_CHANCE_MULTIPLIER_TARGET_CREATURE, RATE_MISS_CHANCE_MULTIPLIER_TARGET_PLAYER, SPELL_ATTR0_CU_BINARY_SPELL, SPELL_ATTR3_ALWAYS_HIT, SPELL_ATTR4_NO_CAST_LOG, SPELL_ATTR7_NO_ATTACK_MISS, SPELL_AURA_DEFLECT_SPELLS, SPELL_AURA_MOD_AOE_AVOIDANCE, SPELL_AURA_MOD_ATTACKER_SPELL_HIT_CHANCE, SPELL_AURA_MOD_DEBUFF_RESISTANCE, SPELL_AURA_MOD_INCREASES_SPELL_PCT_TO_HIT, SPELL_MISS_DEFLECT, SPELL_MISS_MISS, SPELL_MISS_NONE, SPELL_MISS_RESIST, SPELL_SCHOOL_MASK_HOLY, SPELL_SCHOOL_MASK_NORMAL, SpellInfo::SpellLevel, SPELLMOD_RESIST_MISS_CHANCE, sWorld, Object::ToCreature(), Object::ToPlayer(), and UNIT_STATE_STUNNED.

Referenced by SpellHitResult(), and SpellHitResult().

◆ MeleeDamageBonusDone()

uint32 Unit::MeleeDamageBonusDone ( Unit pVictim,
uint32  damage,
WeaponAttackType  attType,
SpellInfo const *  spellProto = nullptr,
SpellSchoolMask  damageSchoolMask = SPELL_SCHOOL_MASK_NORMAL 
)
10181{
10182 if (!victim || pdamage == 0)
10183 return 0;
10184
10185 if (IsCreature())
10186 {
10187 // Dancing Rune Weapon...
10188 if (GetEntry() == 27893)
10189 {
10190 if (Unit* owner = GetOwner())
10191 return owner->MeleeDamageBonusDone(victim, pdamage, attType, spellProto, damageSchoolMask) / 2;
10192 }
10193 }
10194
10195 uint32 creatureTypeMask = victim->GetCreatureTypeMask();
10196
10197 // Done fixed damage bonus auras
10198 int32 DoneFlatBenefit = 0;
10199
10200 // ..done
10201 DoneFlatBenefit += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_DAMAGE_DONE_CREATURE, creatureTypeMask);
10202
10203 // ..done
10204 // SPELL_AURA_MOD_DAMAGE_DONE included in weapon damage
10205
10206 // ..done (base at attack power for marked target and base at attack power for creature type)
10207 int32 APbonus = 0;
10208
10209 if (attType == RANGED_ATTACK)
10210 {
10211 APbonus += victim->GetTotalAuraModifier(SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS);
10212
10213 // ..done (base at attack power and creature type)
10215 }
10216 else
10217 {
10218 APbonus += victim->GetTotalAuraModifier(SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS);
10219
10220 // ..done (base at attack power and creature type)
10222 }
10223
10224 if (APbonus != 0) // Can be negative
10225 {
10226 bool normalized = false;
10227 if (spellProto)
10228 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
10229 if (spellProto->Effects[i].Effect == SPELL_EFFECT_NORMALIZED_WEAPON_DMG)
10230 {
10231 normalized = true;
10232 break;
10233 }
10234 DoneFlatBenefit += int32(APbonus / 14.0f * GetAPMultiplier(attType, normalized));
10235 }
10236
10237 // Done total percent damage auras
10238 float DoneTotalMod = 1.0f;
10239
10240 // mods for SPELL_SCHOOL_MASK_NORMAL are already factored in base melee damage calculation
10241 if (!(damageSchoolMask & SPELL_SCHOOL_MASK_NORMAL))
10242 {
10243 // Some spells don't benefit from pct done mods
10244 DoneTotalMod *= GetTotalAuraMultiplier(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, [spellProto, this, damageSchoolMask](AuraEffect const* aurEff)
10245 {
10246 if (!spellProto || (spellProto->ValidateAttribute6SpellDamageMods(this, aurEff, false)))
10247 {
10248 if ((aurEff->GetMiscValue() & damageSchoolMask))
10249 {
10250 if (aurEff->GetSpellInfo()->EquippedItemClass == -1)
10251 return true;
10252 else if (!aurEff->GetSpellInfo()->HasAttribute(SPELL_ATTR5_AURA_AFFECTS_NOT_JUST_REQ_EQUIPPED_ITEM) && (aurEff->GetSpellInfo()->EquippedItemSubClassMask == 0))
10253 return true;
10254 else if (ToPlayer() && ToPlayer()->HasItemFitToSpellRequirements(aurEff->GetSpellInfo()))
10255 return true;
10256 }
10257 }
10258 return false;
10259 });
10260 }
10261
10262 DoneTotalMod *= GetTotalAuraMultiplier(SPELL_AURA_MOD_DAMAGE_DONE_VERSUS, [creatureTypeMask, spellProto, this](AuraEffect const* aurEff)
10263 {
10264 return (creatureTypeMask & aurEff->GetMiscValue() && (!spellProto || spellProto->ValidateAttribute6SpellDamageMods(this, aurEff, false)));
10265 });
10266
10267 // bonus against aurastate
10268 DoneTotalMod *= GetTotalAuraMultiplier(SPELL_AURA_MOD_DAMAGE_DONE_VERSUS_AURASTATE, [victim, spellProto, this](AuraEffect const* aurEff)
10269 {
10270 return (victim->HasAuraState(AuraStateType(aurEff->GetMiscValue())) && (!spellProto || spellProto->ValidateAttribute6SpellDamageMods(this, aurEff, false)));
10271 });
10272
10273 // done scripted mod (take it from owner)
10274 Unit* owner = GetOwner() ? GetOwner() : this;
10275 AuraEffectList const& mOverrideClassScript = owner->GetAuraEffectsByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS);
10276 for (AuraEffectList::const_iterator i = mOverrideClassScript.begin(); i != mOverrideClassScript.end(); ++i)
10277 {
10278 if (spellProto && !spellProto->ValidateAttribute6SpellDamageMods(this, *i, false))
10279 continue;
10280
10281 if (!(*i)->IsAffectedOnSpell(spellProto))
10282 continue;
10283
10284 switch ((*i)->GetMiscValue())
10285 {
10286 // Tundra Stalker
10287 // Merciless Combat
10288 case 7277:
10289 {
10290 // Merciless Combat
10291 if ((*i)->GetSpellInfo()->SpellIconID == 2656)
10292 {
10293 if (!victim->HealthAbovePct(35))
10294 AddPct(DoneTotalMod, (*i)->GetAmount());
10295 }
10296 // Tundra Stalker
10297 else
10298 {
10299 // Frost Fever (target debuff)
10300 if (victim->HasAura(55095))
10301 AddPct(DoneTotalMod, (*i)->GetAmount());
10302 }
10303 break;
10304 }
10305 // Rage of Rivendare
10306 case 7293:
10307 {
10308 if (victim->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_DEATHKNIGHT, 0, 0x02000000, 0))
10309 AddPct(DoneTotalMod, (*i)->GetSpellInfo()->GetRank() * 2.0f);
10310 break;
10311 }
10312 // Marked for Death
10313 case 7598:
10314 case 7599:
10315 case 7600:
10316 case 7601:
10317 case 7602:
10318 {
10319 if (victim->GetAuraEffect(SPELL_AURA_MOD_STALKED, SPELLFAMILY_HUNTER, 0x400, 0, 0))
10320 AddPct(DoneTotalMod, (*i)->GetAmount());
10321 break;
10322 }
10323 // Dirty Deeds
10324 case 6427:
10325 case 6428:
10326 {
10327 if (victim->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, spellProto, this))
10328 {
10329 // effect 0 has expected value but in negative state
10330 int32 bonus = -(*i)->GetBase()->GetEffect(0)->GetAmount();
10331 AddPct(DoneTotalMod, bonus);
10332 }
10333 break;
10334 }
10335 }
10336 }
10337
10338 // Custom scripted damage
10339 if (spellProto)
10340 switch (spellProto->SpellFamilyName)
10341 {
10343 // Glacier Rot
10344 if (spellProto->SpellFamilyFlags[0] & 0x2 || spellProto->SpellFamilyFlags[1] & 0x6)
10346 if (victim->GetDiseasesByCaster(owner->GetGUID()) > 0)
10347 AddPct(DoneTotalMod, aurEff->GetAmount());
10348 break;
10349 }
10350
10351 // Some spells don't benefit from done mods
10352 if (spellProto)
10353 if (spellProto->HasAttribute(SPELL_ATTR3_IGNORE_CASTER_MODIFIERS))
10354 {
10355 DoneFlatBenefit = 0;
10356 DoneTotalMod = 1.0f;
10357 }
10358
10359 float tmpDamage = float(int32(pdamage) + DoneFlatBenefit) * DoneTotalMod;
10360
10361 // apply spellmod to Done damage
10362 if (spellProto)
10363 if (Player* modOwner = GetSpellModOwner())
10364 modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_DAMAGE, tmpDamage);
10365
10366 // bonus result can be negative
10367 return uint32(std::max(tmpDamage, 0.0f));
10368}
@ SPELL_EFFECT_NORMALIZED_WEAPON_DMG
Definition SharedDefines.h:887
@ SPELL_ATTR3_IGNORE_CASTER_MODIFIERS
Definition SharedDefines.h:510
@ SPELLFAMILY_HUNTER
Definition SharedDefines.h:3793
@ SPELLFAMILY_DEATHKNIGHT
Definition SharedDefines.h:3799
@ AURA_STATE_HEALTHLESS_35_PERCENT
Definition SharedDefines.h:1293
@ SPELL_AURA_MOD_MELEE_ATTACK_POWER_VERSUS
Definition SpellAuraDefines.h:165
@ SPELL_AURA_MOD_DAMAGE_DONE_VERSUS
Definition SpellAuraDefines.h:231
@ SPELL_AURA_MOD_RANGED_ATTACK_POWER_VERSUS
Definition SpellAuraDefines.h:194
@ SPELL_AURA_MOD_DAMAGE_PERCENT_DONE
Definition SpellAuraDefines.h:142
@ SPELL_AURA_MOD_DAMAGE_DONE_VERSUS_AURASTATE
Definition SpellAuraDefines.h:366
@ SPELL_AURA_MOD_DAMAGE_DONE_CREATURE
Definition SpellAuraDefines.h:122
@ SPELLMOD_DAMAGE
Definition SpellDefines.h:76
float GetAPMultiplier(WeaponAttackType attType, bool normalized)
Definition Unit.cpp:13634
AuraEffect * GetDummyAuraEffect(SpellFamilyNames name, uint32 iconId, uint8 effIndex) const
Definition Unit.h:1437

References SpellInfo::Effects, GetAPMultiplier(), GetCreatureTypeMask(), Object::GetEntry(), GetOwner(), GetTotalAuraModifier(), GetTotalAuraModifierByMiscMask(), GetTotalAuraMultiplier(), Object::IsCreature(), MAX_SPELL_EFFECTS, RANGED_ATTACK, SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS, SPELL_AURA_MOD_DAMAGE_DONE_CREATURE, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, SPELL_AURA_MOD_MELEE_ATTACK_POWER_VERSUS, SPELL_AURA_MOD_RANGED_ATTACK_POWER_VERSUS, SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS, SPELL_EFFECT_NORMALIZED_WEAPON_DMG, SPELL_SCHOOL_MASK_NORMAL, and SpellInfo::ValidateAttribute6SpellDamageMods().

Referenced by CalculateMeleeDamage(), and Spell::EffectWeaponDmg().

◆ MeleeDamageBonusTaken()

uint32 Unit::MeleeDamageBonusTaken ( Unit attacker,
uint32  pdamage,
WeaponAttackType  attType,
SpellInfo const *  spellProto = nullptr,
SpellSchoolMask  damageSchoolMask = SPELL_SCHOOL_MASK_NORMAL 
)
10371{
10372 if (pdamage == 0)
10373 return 0;
10374
10375 int32 TakenFlatBenefit = 0;
10376
10377 // ..taken
10378 TakenFlatBenefit += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_DAMAGE_TAKEN, damageSchoolMask);
10379
10380 if (attType != RANGED_ATTACK)
10382 else
10384
10385 // Taken total percent damage auras
10386 float TakenTotalMod = 1.0f;
10387
10389
10390 // .. taken pct (special attacks)
10391 if (spellProto)
10392 {
10393 // From caster spells
10394 TakenTotalMod *= GetTotalAuraMultiplier(SPELL_AURA_MOD_DAMAGE_FROM_CASTER, [attacker, spellProto](AuraEffect const* aurEff)
10395 {
10396 return attacker->GetGUID() == aurEff->GetCasterGUID() && aurEff->IsAffectedOnSpell(spellProto);
10397 });
10398
10399 // Mod damage from spell mechanic
10400 uint64 mechanicMask = spellProto->GetAllEffectsMechanicMask();
10401
10402 // Shred, Maul - "Effects which increase Bleed damage also increase Shred damage"
10403 if (spellProto->SpellFamilyName == SPELLFAMILY_DRUID && spellProto->SpellFamilyFlags[0] & 0x00008800)
10404 mechanicMask |= (1ULL << MECHANIC_BLEED);
10405
10406 if (mechanicMask)
10407 {
10408 TakenTotalMod *= GetTotalAuraMultiplier(SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT, [mechanicMask](AuraEffect const* aurEff) -> bool
10409 {
10410 if (mechanicMask & (1ULL << (aurEff->GetMiscValue())))
10411 return true;
10412 return false;
10413 });
10414 }
10415 }
10416
10417 TakenTotalMod = processDummyAuras(TakenTotalMod);
10418
10419 // .. taken pct: class scripts
10420 /*AuraEffectList const& mclassScritAuras = GetAuraEffectsByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS);
10421 for (AuraEffectList::const_iterator i = mclassScritAuras.begin(); i != mclassScritAuras.end(); ++i)
10422 {
10423 switch ((*i)->GetMiscValue())
10424 {
10425 }
10426 }*/
10427
10428 if (attType != RANGED_ATTACK)
10429 {
10431 }
10432 else
10433 {
10435 }
10436
10437 // No positive taken bonus, custom attr
10438 if (spellProto)
10439 if (spellProto->HasAttribute(SPELL_ATTR0_CU_NO_POSITIVE_TAKEN_BONUS) && TakenTotalMod > 1.0f)
10440 {
10441 TakenFlatBenefit = 0;
10442 TakenTotalMod = 1.0f;
10443 }
10444
10445 // xinef: sanctified wrath talent
10446 if (TakenTotalMod < 1.0f && attacker->HasIgnoreTargetResistAura())
10447 {
10448 float ignoreModifier = 1.0f - TakenTotalMod;
10449 bool addModifier = false;
10451 for (AuraEffectList::const_iterator j = ResIgnoreAuras.begin(); j != ResIgnoreAuras.end(); ++j)
10452 if ((*j)->GetMiscValue() & damageSchoolMask)
10453 {
10454 ApplyPct(ignoreModifier, (*j)->GetAmount());
10455 addModifier = true;
10456 }
10457
10458 if (addModifier)
10459 TakenTotalMod += ignoreModifier;
10460 }
10461
10462 float tmpDamage = (float(pdamage) + TakenFlatBenefit) * TakenTotalMod;
10463
10464 // bonus result can be negative
10465 return uint32(std::max(tmpDamage, 0.0f));
10466}
@ SPELLFAMILY_DRUID
Definition SharedDefines.h:3791
@ SPELL_AURA_MOD_RANGED_DAMAGE_TAKEN
Definition SpellAuraDefines.h:176
@ SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN
Definition SpellAuraDefines.h:150
@ SPELL_AURA_MOD_MELEE_DAMAGE_TAKEN
Definition SpellAuraDefines.h:188
@ SPELL_AURA_MOD_MELEE_DAMAGE_TAKEN_PCT
Definition SpellAuraDefines.h:189
@ SPELL_AURA_MOD_DAMAGE_TAKEN
Definition SpellAuraDefines.h:77
@ SPELL_AURA_MOD_DAMAGE_FROM_CASTER
Definition SpellAuraDefines.h:334
@ SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT
Definition SpellAuraDefines.h:318
@ SPELL_AURA_MOD_RANGED_DAMAGE_TAKEN_PCT
Definition SpellAuraDefines.h:177
@ SPELL_ATTR0_CU_NO_POSITIVE_TAKEN_BONUS
Definition SpellInfo.h:198
T ApplyPct(T &base, U pct)
Definition Util.h:64
float processDummyAuras(float TakenTotalMod) const
Definition Unit.cpp:9005
bool HasIgnoreTargetResistAura() const
Definition Unit.h:1829

References ApplyPct(), SpellInfo::GetAllEffectsMechanicMask(), GetAuraEffectsByType(), AuraEffect::GetCasterGUID(), Object::GetGUID(), AuraEffect::GetMiscValue(), GetTotalAuraModifier(), GetTotalAuraModifierByMiscMask(), GetTotalAuraMultiplier(), GetTotalAuraMultiplierByMiscMask(), SpellInfo::HasAttribute(), HasIgnoreTargetResistAura(), AuraEffect::IsAffectedOnSpell(), MECHANIC_BLEED, processDummyAuras(), RANGED_ATTACK, SPELL_ATTR0_CU_NO_POSITIVE_TAKEN_BONUS, SPELL_AURA_MOD_DAMAGE_FROM_CASTER, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, SPELL_AURA_MOD_DAMAGE_TAKEN, SPELL_AURA_MOD_IGNORE_TARGET_RESIST, SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT, SPELL_AURA_MOD_MELEE_DAMAGE_TAKEN, SPELL_AURA_MOD_MELEE_DAMAGE_TAKEN_PCT, SPELL_AURA_MOD_RANGED_DAMAGE_TAKEN, SPELL_AURA_MOD_RANGED_DAMAGE_TAKEN_PCT, SPELLFAMILY_DRUID, SpellInfo::SpellFamilyFlags, and SpellInfo::SpellFamilyName.

Referenced by CalculateMeleeDamage(), and Spell::EffectWeaponDmg().

◆ MeleeSpellHitResult()

SpellMissInfo Unit::MeleeSpellHitResult ( Unit victim,
SpellInfo const *  spell 
)
3339{
3340 // Spells with SPELL_ATTR3_ALWAYS_HIT will additionally fully ignore
3341 // resist and deflect chances
3342 if (spellInfo->HasAttribute(SPELL_ATTR3_ALWAYS_HIT))
3343 return SPELL_MISS_NONE;
3344
3345 WeaponAttackType attType = BASE_ATTACK;
3346
3347 // Check damage class instead of attack type to correctly handle judgements
3348 // - they are meele, but can't be dodged/parried/deflected because of ranged dmg class
3349 if (spellInfo->DmgClass == SPELL_DAMAGE_CLASS_RANGED)
3350 attType = RANGED_ATTACK;
3351
3352 int32 attackerWeaponSkill;
3353 // skill value for these spells (for example judgements) is 5* level
3354 if (spellInfo->DmgClass == SPELL_DAMAGE_CLASS_RANGED && !spellInfo->IsRangedWeaponSpell())
3355 attackerWeaponSkill = GetLevel() * 5;
3356 // bonus from skills is 0.04% per skill Diff
3357 else
3358 attackerWeaponSkill = int32(GetWeaponSkillValue(attType, victim));
3359
3360 int32 skillDiff = attackerWeaponSkill - int32(victim->GetMaxSkillValueForLevel(this));
3361
3362 uint32 roll = urand (0, 10000);
3363
3364 uint32 missChance = uint32(MeleeSpellMissChance(victim, attType, skillDiff, spellInfo->Id) * 100.0f);
3365 // Roll miss
3366 uint32 tmp = missChance;
3367 if (roll < tmp)
3368 return SPELL_MISS_MISS;
3369
3370 bool canDodge = !spellInfo->HasAttribute(SPELL_ATTR7_NO_ATTACK_DODGE);
3371 bool canParry = !spellInfo->HasAttribute(SPELL_ATTR7_NO_ATTACK_PARRY);
3372 bool canBlock = spellInfo->HasAttribute(SPELL_ATTR3_COMPLETELY_BLOCKED) && !spellInfo->HasAttribute(SPELL_ATTR0_CU_DIRECT_DAMAGE);
3373
3374 // Same spells cannot be parry/dodge
3375 if (spellInfo->HasAttribute(SPELL_ATTR0_NO_ACTIVE_DEFENSE))
3376 return SPELL_MISS_NONE;
3377
3378 // Chance resist mechanic
3379 int32 resist_chance = victim->GetMechanicResistChance(spellInfo) * 100;
3380 tmp += resist_chance;
3381 if (roll < tmp)
3382 return SPELL_MISS_RESIST;
3383
3384 // Ranged attacks can only miss, resist and deflect
3385 if (attType == RANGED_ATTACK)
3386 {
3387 // only if in front
3388 if (!victim->HasUnitState(UNIT_STATE_STUNNED) && (victim->HasInArc(M_PI, this) || victim->HasIgnoreHitDirectionAura()))
3389 {
3390 int32 deflect_chance = victim->GetTotalAuraModifier(SPELL_AURA_DEFLECT_SPELLS) * 100;
3391 tmp += deflect_chance;
3392 if (roll < tmp)
3393 return SPELL_MISS_DEFLECT;
3394 }
3395
3396 canDodge = false;
3397 canParry = false;
3398 }
3399
3400 // Check for attack from behind
3401 // xinef: if from behind or spell requires cast from behind
3402 if (!victim->HasInArc(M_PI, this))
3403 {
3404 if (!victim->HasIgnoreHitDirectionAura() || spellInfo->HasAttribute(SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET))
3405 {
3406 // Can`t dodge from behind in PvP (but its possible in PvE)
3407 if (victim->IsPlayer())
3408 {
3409 canDodge = false;
3410 }
3411
3412 // Can`t parry or block
3413 canParry = false;
3414 canBlock = false;
3415 }
3416 }
3417
3418 // Check creatures flags_extra for disable parry
3419 if (victim->IsCreature())
3420 {
3421 uint32 flagEx = victim->ToCreature()->GetCreatureTemplate()->flags_extra;
3422 // Xinef: no dodge flag
3423 if (flagEx & CREATURE_FLAG_EXTRA_NO_DODGE)
3424 canDodge = false;
3425 if (flagEx & CREATURE_FLAG_EXTRA_NO_PARRY)
3426 canParry = false;
3427 // Check creatures flags_extra for disable block
3428 if (flagEx & CREATURE_FLAG_EXTRA_NO_BLOCK)
3429 canBlock = false;
3430 }
3431 // Ignore combat result aura
3433 for (AuraEffectList::const_iterator i = ignore.begin(); i != ignore.end(); ++i)
3434 {
3435 if (!(*i)->IsAffectedOnSpell(spellInfo))
3436 continue;
3437 switch ((*i)->GetMiscValue())
3438 {
3439 case MELEE_HIT_DODGE:
3440 canDodge = false;
3441 break;
3442 case MELEE_HIT_BLOCK:
3443 canBlock = false;
3444 break;
3445 case MELEE_HIT_PARRY:
3446 canParry = false;
3447 break;
3448 default:
3449 LOG_DEBUG("entities.unit", "Spell {} SPELL_AURA_IGNORE_COMBAT_RESULT has unhandled state {}", (*i)->GetId(), (*i)->GetMiscValue());
3450 break;
3451 }
3452 }
3453
3454 if (canDodge)
3455 {
3456 // Roll dodge
3457 int32 dodgeChance = int32(victim->GetUnitDodgeChance() * 100.0f) - skillDiff * 4;
3458 // Reduce enemy dodge chance by SPELL_AURA_MOD_COMBAT_RESULT_CHANCE
3460 dodgeChance = int32(float(dodgeChance) * GetTotalAuraMultiplier(SPELL_AURA_MOD_ENEMY_DODGE));
3461 // Reduce dodge chance by attacker expertise rating
3462 if (IsPlayer())
3463 dodgeChance -= int32(ToPlayer()->GetExpertiseDodgeOrParryReduction(attType) * 100.0f);
3464 else
3466
3467 // xinef: cant dodge while casting or while stunned
3468 if (dodgeChance < 0 || victim->IsNonMeleeSpellCast(false, false, true) || victim->HasUnitState(UNIT_STATE_CONTROLLED))
3469 dodgeChance = 0;
3470
3471 tmp += dodgeChance;
3472 if (roll < tmp)
3473 return SPELL_MISS_DODGE;
3474 }
3475
3476 if (canParry)
3477 {
3478 // Roll parry
3479 int32 parryChance = int32(victim->GetUnitParryChance() * 100.0f) - skillDiff * 4;
3480 // Reduce parry chance by attacker expertise rating
3481 if (IsPlayer())
3482 parryChance -= int32(ToPlayer()->GetExpertiseDodgeOrParryReduction(attType) * 100.0f);
3483 else
3485
3486 // xinef: cant parry while casting or while stunned
3487 if (parryChance < 0 || victim->IsNonMeleeSpellCast(false, false, true) || victim->HasUnitState(UNIT_STATE_CONTROLLED))
3488 parryChance = 0;
3489
3490 tmp += parryChance;
3491 if (roll < tmp)
3492 return SPELL_MISS_PARRY;
3493 }
3494
3495 if (canBlock)
3496 {
3497 int32 blockChance = int32(victim->GetUnitBlockChance() * 100.0f) - skillDiff * 4;
3498
3499 // xinef: cant block while casting or while stunned
3500 if (blockChance < 0 || victim->IsNonMeleeSpellCast(false, false, true) || victim->HasUnitState(UNIT_STATE_CONTROLLED))
3501 blockChance = 0;
3502
3503 tmp += blockChance;
3504 if (roll < tmp)
3505 return SPELL_MISS_BLOCK;
3506 }
3507
3508 return SPELL_MISS_NONE;
3509}
@ CREATURE_FLAG_EXTRA_NO_PARRY
Definition CreatureData.h:48
@ CREATURE_FLAG_EXTRA_NO_DODGE
Definition CreatureData.h:69
@ SPELL_ATTR7_NO_ATTACK_PARRY
Definition SharedDefines.h:653
@ SPELL_ATTR7_NO_ATTACK_DODGE
Definition SharedDefines.h:652
@ SPELL_ATTR3_COMPLETELY_BLOCKED
Definition SharedDefines.h:484
@ SPELL_MISS_PARRY
Definition SharedDefines.h:1527
@ SPELL_MISS_DODGE
Definition SharedDefines.h:1526
@ SPELL_MISS_BLOCK
Definition SharedDefines.h:1528
@ SPELL_AURA_MOD_EXPERTISE
Definition SpellAuraDefines.h:303
@ SPELL_AURA_IGNORE_COMBAT_RESULT
Definition SpellAuraDefines.h:265
@ SPELL_AURA_MOD_ENEMY_DODGE
Definition SpellAuraDefines.h:314
@ SPELL_AURA_MOD_COMBAT_RESULT_CHANCE
Definition SpellAuraDefines.h:311
@ SPELL_ATTR0_CU_DIRECT_DAMAGE
Definition SpellInfo.h:185
@ SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET
Definition SpellInfo.h:194
WeaponAttackType
Definition Unit.h:214
float GetUnitDodgeChance() const
Definition Unit.cpp:3816
float GetUnitParryChance() const
Definition Unit.cpp:3833
float MeleeSpellMissChance(Unit const *victim, WeaponAttackType attType, int32 skillDiff, uint32 spellId) const
Definition Unit.cpp:15257
uint32 flags_extra
Definition CreatureData.h:241

References BASE_ATTACK, CREATURE_FLAG_EXTRA_NO_BLOCK, CREATURE_FLAG_EXTRA_NO_DODGE, CREATURE_FLAG_EXTRA_NO_PARRY, SpellInfo::DmgClass, CreatureTemplate::flags_extra, GetAuraEffectsByType(), Creature::GetCreatureTemplate(), GetLevel(), GetMaxSkillValueForLevel(), GetMechanicResistChance(), GetTotalAuraModifier(), GetTotalAuraModifierByMiscValue(), GetTotalAuraMultiplier(), GetUnitBlockChance(), GetUnitDodgeChance(), GetUnitParryChance(), GetWeaponSkillValue(), SpellInfo::HasAttribute(), HasIgnoreHitDirectionAura(), Position::HasInArc(), HasUnitState(), SpellInfo::Id, Object::IsCreature(), IsNonMeleeSpellCast(), Object::IsPlayer(), SpellInfo::IsRangedWeaponSpell(), LOG_DEBUG, MELEE_HIT_BLOCK, MELEE_HIT_DODGE, MELEE_HIT_PARRY, MeleeSpellMissChance(), RANGED_ATTACK, SPELL_ATTR0_CU_DIRECT_DAMAGE, SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET, SPELL_ATTR0_NO_ACTIVE_DEFENSE, SPELL_ATTR3_ALWAYS_HIT, SPELL_ATTR3_COMPLETELY_BLOCKED, SPELL_ATTR7_NO_ATTACK_DODGE, SPELL_ATTR7_NO_ATTACK_PARRY, SPELL_AURA_DEFLECT_SPELLS, SPELL_AURA_IGNORE_COMBAT_RESULT, SPELL_AURA_MOD_COMBAT_RESULT_CHANCE, SPELL_AURA_MOD_ENEMY_DODGE, SPELL_AURA_MOD_EXPERTISE, SPELL_DAMAGE_CLASS_RANGED, SPELL_MISS_BLOCK, SPELL_MISS_DEFLECT, SPELL_MISS_DODGE, SPELL_MISS_MISS, SPELL_MISS_NONE, SPELL_MISS_PARRY, SPELL_MISS_RESIST, Object::ToCreature(), Object::ToPlayer(), UNIT_STATE_CONTROLLED, UNIT_STATE_STUNNED, urand(), and VICTIMSTATE_DODGE.

Referenced by SpellHitResult(), and SpellHitResult().

◆ MeleeSpellMissChance()

float Unit::MeleeSpellMissChance ( Unit const *  victim,
WeaponAttackType  attType,
int32  skillDiff,
uint32  spellId 
) const
15258{
15259 SpellInfo const* spellInfo = spellId ? sSpellMgr->GetSpellInfo(spellId) : nullptr;
15260 if (spellInfo && spellInfo->HasAttribute(SPELL_ATTR7_NO_ATTACK_MISS))
15261 {
15262 return 0.0f;
15263 }
15264
15265 //calculate miss chance
15266 float missChance = victim->GetUnitMissChance(attType);
15267
15268 // Check if dual wielding, add additional miss penalty - when mainhand has on next swing spell, offhand doesnt suffer penalty
15269 if (!spellId && (attType != RANGED_ATTACK) && HasOffhandWeaponForAttack() && (!m_currentSpells[CURRENT_MELEE_SPELL] || !m_currentSpells[CURRENT_MELEE_SPELL]->IsNextMeleeSwingSpell()))
15270 {
15271 missChance += 19;
15272 }
15273
15274 // bonus from skills is 0.04%
15275 //miss_chance -= skillDiff * 0.04f;
15276 int32 diff = -skillDiff;
15277 if (victim->IsPlayer())
15278 missChance += diff > 0 ? diff * 0.04f : diff * 0.02f;
15279 else
15280 missChance += diff > 10 ? 1 + (diff - 10) * 0.4f : diff * 0.1f;
15281
15282 // Calculate hit chance
15283 float hitChance = 100.0f;
15284
15285 // Spellmod from SPELLMOD_RESIST_MISS_CHANCE
15286 if (spellId)
15287 {
15288 if (Player* modOwner = GetSpellModOwner())
15289 modOwner->ApplySpellMod(spellId, SPELLMOD_RESIST_MISS_CHANCE, hitChance);
15290 }
15291
15292 missChance -= hitChance - 100.0f;
15293
15294 if (attType == RANGED_ATTACK)
15295 missChance -= m_modRangedHitChance;
15296 else
15297 missChance -= m_modMeleeHitChance;
15298
15299 // Limit miss chance from 0 to 60%
15300 if (missChance < 0.0f)
15301 return 0.0f;
15302 if (missChance > 60.0f)
15303 return 60.0f;
15304 return missChance;
15305}

References CURRENT_MELEE_SPELL, GetSpellModOwner(), GetUnitMissChance(), SpellInfo::HasAttribute(), HasOffhandWeaponForAttack(), Object::IsPlayer(), m_currentSpells, m_modMeleeHitChance, m_modRangedHitChance, RANGED_ATTACK, SPELL_ATTR7_NO_ATTACK_MISS, SPELLMOD_RESIST_MISS_CHANCE, and sSpellMgr.

Referenced by MeleeSpellHitResult(), and RollMeleeOutcomeAgainst().

◆ ModifyAuraState()

void Unit::ModifyAuraState ( AuraStateType  flag,
bool  apply 
)
7608{
7609 if (apply)
7610 {
7611 if (!HasFlag(UNIT_FIELD_AURASTATE, 1 << (flag - 1)))
7612 {
7613 SetFlag(UNIT_FIELD_AURASTATE, 1 << (flag - 1));
7614 Unit::AuraMap& tAuras = GetOwnedAuras();
7615 for (Unit::AuraMap::iterator itr = tAuras.begin(); itr != tAuras.end(); ++itr)
7616 {
7617 if ((*itr).second->IsRemoved())
7618 continue;
7619
7620 if ((*itr).second->GetSpellInfo()->CasterAuraState == flag )
7621 if (AuraApplication* aurApp = (*itr).second->GetApplicationOfTarget(GetGUID()))
7622 (*itr).second->HandleAllEffects(aurApp, AURA_EFFECT_HANDLE_REAL, true);
7623 }
7624 }
7625 }
7626 else
7627 {
7628 if (HasFlag(UNIT_FIELD_AURASTATE, 1 << (flag - 1)))
7629 {
7630 RemoveFlag(UNIT_FIELD_AURASTATE, 1 << (flag - 1));
7631
7632 if (flag != AURA_STATE_ENRAGE) // enrage aura state triggering continues auras
7633 {
7634 Unit::AuraMap& tAuras = GetOwnedAuras();
7635 for (Unit::AuraMap::iterator itr = tAuras.begin(); itr != tAuras.end(); ++itr)
7636 {
7637 if ((*itr).second->GetSpellInfo()->CasterAuraState == flag )
7638 if (AuraApplication* aurApp = (*itr).second->GetApplicationOfTarget(GetGUID()))
7639 (*itr).second->HandleAllEffects(aurApp, AURA_EFFECT_HANDLE_REAL, false);
7640 }
7641 }
7642 }
7643 }
7644}
@ AURA_STATE_ENRAGE
Definition SharedDefines.h:1297
@ AURA_EFFECT_HANDLE_REAL
Definition SpellAuraDefines.h:42
void SetFlag(uint16 index, uint32 newFlag)
Definition Object.cpp:827
void RemoveFlag(uint16 index, uint32 oldFlag)
Definition Object.cpp:842
std::multimap< uint32, Aura * > AuraMap
Definition Unit.h:669
AuraMap & GetOwnedAuras()
Definition Unit.h:1373

References AURA_EFFECT_HANDLE_REAL, AURA_STATE_ENRAGE, Object::GetGUID(), GetOwnedAuras(), Object::HasFlag(), Object::RemoveFlag(), Object::SetFlag(), and UNIT_FIELD_AURASTATE.

Referenced by _ApplyAura(), _UnapplyAura(), ClearAllReactives(), Spell::finish(), debug_commandscript::HandleDebugSetAuraStateCommand(), boss_professor_putricide::boss_professor_putricideAI::JustSummoned(), ProcSkillsAndReactives(), Update(), and UpdateReactives().

◆ ModifyHealth()

int32 Unit::ModifyHealth ( int32  val)
10982{
10983 int32 gain = 0;
10984
10985 if (dVal == 0)
10986 return 0;
10987
10988 int32 curHealth = (int32)GetHealth();
10989
10990 int32 val = dVal + curHealth;
10991 if (val <= 0)
10992 {
10993 SetHealth(0);
10994 return -curHealth;
10995 }
10996
10997 int32 maxHealth = (int32)GetMaxHealth();
10998
10999 if (val < maxHealth)
11000 {
11001 SetHealth(val);
11002 gain = val - curHealth;
11003 }
11004 else if (curHealth != maxHealth)
11005 {
11006 SetHealth(maxHealth);
11007 gain = maxHealth - curHealth;
11008 }
11009
11010 return gain;
11011}

References GetHealth(), GetMaxHealth(), and SetHealth().

Referenced by DealDamage(), DealHeal(), boss_xt002::DoAction(), boss_ichoron::DoAction(), AuraEffect::HandleAuraModIncreaseHealth(), AuraEffect::HandlePeriodicHealthFunnelAuraTick(), boss_hadronox::KilledUnit(), boss_gluth::boss_gluthAI::KilledUnit(), Creature::RegenerateHealth(), Player::RegenerateHealth(), npc_injured_patient::npc_injured_patientAI::Reset(), Spell::TakePower(), Aura::Update(), and npc_infra_green_bomber_generic::npc_infra_green_bomber_genericAI::UpdateAI().

◆ ModifyPower()

int32 Unit::ModifyPower ( Powers  power,
int32  val,
bool  withPowerUpdate = true 
)
11040{
11041 if (dVal == 0)
11042 return 0;
11043
11044 int32 gain = 0;
11045
11046 int32 curPower = (int32)GetPower(power);
11047
11048 int32 val = dVal + curPower;
11049 if (val <= 0)
11050 {
11051 SetPower(power, 0, withPowerUpdate);
11052 return -curPower;
11053 }
11054
11055 int32 maxPower = (int32)GetMaxPower(power);
11056
11057 if (val < maxPower)
11058 {
11059 SetPower(power, val, withPowerUpdate);
11060 gain = val - curPower;
11061 }
11062 else if (curPower != maxPower)
11063 {
11064 SetPower(power, maxPower, withPowerUpdate);
11065 gain = maxPower - curPower;
11066 }
11067
11068 if (GetAI())
11069 {
11070 GetAI()->OnPowerUpdate(power, gain, dVal, curPower);
11071 }
11072
11073 return gain;
11074}
virtual void OnPowerUpdate(Powers, int32, int32, uint32)
Called when the creature power updates.
Definition UnitAI.h:377
void SetPower(Powers power, uint32 val, bool withPowerUpdate=true, bool fromRegenerate=false)
Definition Unit.cpp:12444

References GetAI(), GetMaxPower(), GetPower(), UnitAI::OnPowerUpdate(), and SetPower().

Referenced by CalcAbsorbResist(), spell_igb_cannon_blast::CalculatePower(), Spell::EffectPowerBurn(), Spell::EffectPowerDrain(), Spell::EffectSchoolDMG(), EnergizeBySpell(), AuraEffect::HandleObsModPowerAuraTick(), AuraEffect::HandlePeriodicEnergizeAuraTick(), AuraEffect::HandlePeriodicManaLeechAuraTick(), AuraEffect::HandlePeriodicPowerBurnAuraTick(), AuraEffect::HandlePeriodicTriggerSpellAuraTick(), spell_kelthuzad_detonate_mana_aura::HandleScript(), boss_pathaleon_the_calculator::JustEngagedWith(), boss_curator::JustEngagedWith(), Pet::LoseHappiness(), Creature::Regenerate(), RewardRage(), Pet::setDeathState(), Spell::TakePower(), Spell::TakeRunePower(), Aura::Update(), and boss_faction_championsAI::UpdateAI().

◆ ModSpellCastTime()

void Unit::ModSpellCastTime ( SpellInfo const *  spellProto,
int32 castTime,
Spell spell = nullptr 
)
Todo:
:(MadAgos) Eventually check and delete the bool argument
11722{
11723 if (!spellInfo || castTime < 0)
11724 return;
11725
11726 if (spellInfo->IsChanneled() && spellInfo->HasAura(SPELL_AURA_MOUNTED))
11727 return;
11728
11729 // called from caster
11730 if (Player* modOwner = GetSpellModOwner())
11732 modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_CASTING_TIME, castTime, spell, bool(modOwner != this && !IsPet()));
11733
11734 switch (spellInfo->DmgClass)
11735 {
11737 if (spellInfo->AttributesEx5 & SPELL_ATTR5_SPELL_HASTE_AFFECTS_PERIODIC) // required double check
11738 castTime = int32(float(castTime) * GetFloatValue(UNIT_MOD_CAST_SPEED));
11739 else if (spellInfo->SpellVisual[0] == 3881 && HasAura(67556)) // cooking with Chef Hat.
11740 castTime = 500;
11741 break;
11743 break; // no known cases
11745 castTime = CanInstantCast() ? 0 : int32(float(castTime) * GetFloatValue(UNIT_MOD_CAST_SPEED));
11746 break;
11748 castTime = int32(float(castTime) * m_modAttackSpeedPct[RANGED_ATTACK]);
11749 break;
11750 default:
11751 break;
11752 }
11753}
@ SPELL_ATTR5_SPELL_HASTE_AFFECTS_PERIODIC
Definition SharedDefines.h:568
@ SPELLMOD_CASTING_TIME
Definition SpellDefines.h:86
bool CanInstantCast() const
Definition Unit.h:1587

References SpellInfo::AttributesEx5, CanInstantCast(), SpellInfo::DmgClass, Object::GetFloatValue(), GetSpellModOwner(), SpellInfo::HasAura(), HasAura(), SpellInfo::Id, SpellInfo::IsChanneled(), IsPet(), m_modAttackSpeedPct, RANGED_ATTACK, SPELL_ATTR5_SPELL_HASTE_AFFECTS_PERIODIC, SPELL_AURA_MOUNTED, SPELL_DAMAGE_CLASS_MAGIC, SPELL_DAMAGE_CLASS_MELEE, SPELL_DAMAGE_CLASS_NONE, SPELL_DAMAGE_CLASS_RANGED, SPELLMOD_CASTING_TIME, SpellInfo::SpellVisual, and UNIT_MOD_CAST_SPEED.

Referenced by SpellInfo::CalcCastTime().

◆ ModSpellDuration()

int32 Unit::ModSpellDuration ( SpellInfo const *  spellProto,
Unit const *  target,
int32  duration,
bool  positive,
uint32  effectMask 
)
11622{
11623 // don't mod permanent auras duration
11624 if (duration < 0)
11625 return duration;
11626
11627 // some auras are not affected by duration modifiers
11628 if (spellProto->HasAttribute(SPELL_ATTR7_NO_TARGET_DURATION_MOD))
11629 return duration;
11630
11631 // cut duration only of negative effects
11632 // xinef: also calculate self casts, spell can be reflected for example
11633 if (!positive)
11634 {
11635 uint64 mechanic = spellProto->GetSpellMechanicMaskByEffectMask(effectMask);
11636
11637 int32 durationMod;
11638 int32 durationMod_always = 0;
11639 int32 durationMod_not_stack = 0;
11640
11641 for (uint8 i = 1; i <= MECHANIC_ENRAGED; ++i)
11642 {
11643 if (!(mechanic & (1ULL << i)))
11644 continue;
11645
11646 // Xinef: spells affecting movement imparing effects should not reduce duration if disoriented mechanic is present
11647 if (i == MECHANIC_SNARE && (mechanic & (1ULL << MECHANIC_DISORIENTED)))
11648 continue;
11649
11650 // Find total mod value (negative bonus)
11651 int32 new_durationMod_always = target->GetTotalAuraModifierByMiscValue(SPELL_AURA_MECHANIC_DURATION_MOD, i);
11652 // Find max mod (negative bonus)
11653 int32 new_durationMod_not_stack = target->GetMaxNegativeAuraModifierByMiscValue(SPELL_AURA_MECHANIC_DURATION_MOD_NOT_STACK, i);
11654 // Check if mods applied before were weaker
11655 if (new_durationMod_always < durationMod_always)
11656 durationMod_always = new_durationMod_always;
11657 if (new_durationMod_not_stack < durationMod_not_stack)
11658 durationMod_not_stack = new_durationMod_not_stack;
11659 }
11660
11661 // Select strongest negative mod
11662 if (durationMod_always > durationMod_not_stack)
11663 durationMod = durationMod_not_stack;
11664 else
11665 durationMod = durationMod_always;
11666
11667 if (durationMod != 0)
11668 AddPct(duration, durationMod);
11669
11670 // there are only negative mods currently
11671 durationMod_always = target->GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_AURA_DURATION_BY_DISPEL, spellProto->Dispel);
11672 durationMod_not_stack = target->GetMaxNegativeAuraModifierByMiscValue(SPELL_AURA_MOD_AURA_DURATION_BY_DISPEL_NOT_STACK, spellProto->Dispel);
11673
11674 durationMod = 0;
11675 if (durationMod_always > durationMod_not_stack)
11676 durationMod += durationMod_not_stack;
11677 else
11678 durationMod += durationMod_always;
11679
11680 if (durationMod != 0)
11681 AddPct(duration, durationMod);
11682 }
11683 else
11684 {
11685 // else positive mods here, there are no currently
11686 // when there will be, change GetTotalAuraModifierByMiscValue to GetTotalPositiveAuraModifierByMiscValue
11687 }
11688
11689 // Glyphs which increase duration of selfcasted buffs
11690 if (target == this)
11691 {
11692 switch (spellProto->SpellFamilyName)
11693 {
11694 case SPELLFAMILY_DRUID:
11695 if (spellProto->SpellFamilyFlags[0] & 0x100)
11696 {
11697 // Glyph of Thorns
11698 if (AuraEffect* aurEff = GetAuraEffect(57862, 0))
11699 duration += aurEff->GetAmount() * MINUTE * IN_MILLISECONDS;
11700 }
11701 break;
11703 if ((spellProto->SpellFamilyFlags[0] & 0x00000002) && spellProto->SpellIconID == 298)
11704 {
11705 // Glyph of Blessing of Might
11706 if (AuraEffect* aurEff = GetAuraEffect(57958, 0))
11707 duration += aurEff->GetAmount() * MINUTE * IN_MILLISECONDS;
11708 }
11709 else if ((spellProto->SpellFamilyFlags[0] & 0x00010000) && spellProto->SpellIconID == 306)
11710 {
11711 // Glyph of Blessing of Wisdom
11712 if (AuraEffect* aurEff = GetAuraEffect(57979, 0))
11713 duration += aurEff->GetAmount() * MINUTE * IN_MILLISECONDS;
11714 }
11715 break;
11716 }
11717 }
11718 return std::max(duration, 0);
11719}
constexpr auto IN_MILLISECONDS
Definition Common.h:53
constexpr auto MINUTE
Definition Common.h:47
@ SPELL_ATTR7_NO_TARGET_DURATION_MOD
Definition SharedDefines.h:630
@ MECHANIC_ENRAGED
Definition SharedDefines.h:1344
@ MECHANIC_DISORIENTED
Definition SharedDefines.h:1315
@ MECHANIC_SNARE
Definition SharedDefines.h:1324
@ SPELLFAMILY_PALADIN
Definition SharedDefines.h:3794
@ SPELL_AURA_MOD_AURA_DURATION_BY_DISPEL_NOT_STACK
Definition SpellAuraDefines.h:309
@ SPELL_AURA_MECHANIC_DURATION_MOD_NOT_STACK
Definition SpellAuraDefines.h:297
@ SPELL_AURA_MOD_AURA_DURATION_BY_DISPEL
Definition SpellAuraDefines.h:308
@ SPELL_AURA_MECHANIC_DURATION_MOD
Definition SpellAuraDefines.h:295

References AddPct(), SpellInfo::Dispel, AuraEffect::GetAmount(), GetAuraEffect(), GetMaxNegativeAuraModifierByMiscValue(), SpellInfo::GetSpellMechanicMaskByEffectMask(), GetTotalAuraModifierByMiscValue(), SpellInfo::HasAttribute(), IN_MILLISECONDS, MECHANIC_DISORIENTED, MECHANIC_ENRAGED, MECHANIC_SNARE, MINUTE, SPELL_ATTR7_NO_TARGET_DURATION_MOD, SPELL_AURA_MECHANIC_DURATION_MOD, SPELL_AURA_MECHANIC_DURATION_MOD_NOT_STACK, SPELL_AURA_MOD_AURA_DURATION_BY_DISPEL, SPELL_AURA_MOD_AURA_DURATION_BY_DISPEL_NOT_STACK, SPELLFAMILY_DRUID, SPELLFAMILY_PALADIN, SpellInfo::SpellFamilyFlags, SpellInfo::SpellFamilyName, and SpellInfo::SpellIconID.

Referenced by Spell::DoSpellHitOnUnit(), and Spell::EffectInterruptCast().

◆ MonsterMoveWithSpeed()

void Unit::MonsterMoveWithSpeed ( float  x,
float  y,
float  z,
float  speed 
)
650{
651 Movement::MoveSplineInit init(this);
652 init.MoveTo(x, y, z);
653 init.SetVelocity(speed);
654 init.Launch();
655}

References Movement::MoveSplineInit::Launch(), Movement::MoveSplineInit::MoveTo(), and Movement::MoveSplineInit::SetVelocity().

◆ Mount()

void Unit::Mount ( uint32  mount,
uint32  vehicleId = 0,
uint32  creatureEntry = 0 
)
10521{
10522 if (mount)
10524
10526
10527 if (Player* player = ToPlayer())
10528 {
10529 sScriptMgr->AnticheatSetUnderACKmount(player);
10530
10531 // mount as a vehicle
10532 if (VehicleId)
10533 {
10534 if (CreateVehicleKit(VehicleId, creatureEntry))
10535 {
10536 GetVehicleKit()->Reset();
10537
10538 // Send others that we now have a vehicle
10540 data << GetPackGUID();
10541 data << uint32(VehicleId);
10542 SendMessageToSet(&data, true);
10543
10545 player->SendDirectMessage(&data);
10546
10547 // mounts can also have accessories
10549 }
10550 }
10551
10552 // unsummon pet
10553 Pet* pet = player->GetPet();
10554 if (pet)
10555 {
10557 // don't unsummon pet in arena but SetFlag UNIT_FLAG_STUNNED to disable pet's interface
10558 if (bg && bg->isArena())
10560 else
10561 player->UnsummonPetTemporaryIfAny();
10562 }
10563
10564 // xinef: if we have charmed npc, stun him also
10565 if (Unit* charm = player->GetCharm())
10566 if (charm->IsCreature())
10567 charm->SetUnitFlag(UNIT_FLAG_STUNNED);
10568
10569 WorldPacket data(SMSG_MOVE_SET_COLLISION_HGT, GetPackGUID().size() + 4 + 4);
10570 data << GetPackGUID();
10571 data << player->GetSession()->GetOrderCounter(); // movement counter
10572 data << player->GetCollisionHeight();
10573 player->SendDirectMessage(&data);
10574 player->GetSession()->IncrementOrderCounter();
10575 }
10576
10578}
@ AURA_INTERRUPT_FLAG_MOUNT
Definition SpellDefines.h:60
bool isArena() const
Definition Battleground.h:404
bool CreateVehicleKit(uint32 id, uint32 creatureEntry)
Returns the transport this unit is on directly (if on vehicle and transport, return vehicle)
Definition Unit.cpp:14984
void Reset(bool evading=false)
Definition Vehicle.cpp:121
void InstallAllAccessories(bool evading)
Definition Vehicle.cpp:88

References AURA_INTERRUPT_FLAG_MOUNT, CreateVehicleKit(), Player::GetBattleground(), GetCharm(), Object::GetPackGUID(), GetVehicleKit(), WorldPacket::Initialize(), Vehicle::InstallAllAccessories(), Battleground::isArena(), RemoveAurasWithInterruptFlags(), Vehicle::Reset(), WorldObject::SendMessageToSet(), SetUInt32Value(), SetUnitFlag(), SMSG_MOVE_SET_COLLISION_HGT, SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, SMSG_PLAYER_VEHICLE_DATA, sScriptMgr, Object::ToPlayer(), UNIT_FIELD_MOUNTDISPLAYID, UNIT_FLAG_MOUNT, and UNIT_FLAG_STUNNED.

Referenced by AuraEffect::HandleAuraMounted(), spell_mount_check_aura::HandleEffectPeriodic(), modify_commandscript::HandleModifyMountCommand(), npc_lady_sylvanas_windrunner_bfu::npc_lady_sylvanas_windrunner_bfuAI::InitializeAI(), boss_captain_skarloc::InitializeAI(), npc_lady_sylvanas_windrunner_bfu::npc_lady_sylvanas_windrunner_bfuAI::JustRespawned(), Creature::LoadCreaturesAddon(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::MountSelf(), npc_koltira_deathweaver::npc_koltira_deathweaverAI::MovementInform(), npc_scarlet_courier::npc_scarlet_courierAI::Reset(), npc_thrall_bfu::npc_thrall_bfuAI::Reset(), boss_mandokir::boss_mandokirAI::Reset(), and WorldSession::SendDoFlight().

◆ NearTeleportTo() [1/2]

void Unit::NearTeleportTo ( float  x,
float  y,
float  z,
float  orientation,
bool  casting = false,
bool  vehicleTeleport = false,
bool  withPet = false,
bool  removeTransport = false 
)
15971{
15972 DisableSpline();
15973 if (IsPlayer())
15974 ToPlayer()->TeleportTo(GetMapId(), x, y, z, orientation, TELE_TO_NOT_LEAVE_COMBAT | (removeTransport ? 0 : TELE_TO_NOT_LEAVE_TRANSPORT) | TELE_TO_NOT_UNSUMMON_PET | (casting ? TELE_TO_SPELL : 0) | (vehicleTeleport ? TELE_TO_NOT_LEAVE_VEHICLE : 0) | (withPet ? TELE_TO_WITH_PET : 0));
15975 else
15976 {
15977 Position pos = {x, y, z, orientation};
15978 SendTeleportPacket(pos);
15979 UpdatePosition(x, y, z, orientation, true);
15982 }
15983}
@ TELE_TO_WITH_PET
Definition Player.h:820
@ TELE_TO_NOT_LEAVE_VEHICLE
Definition Player.h:819
@ TELE_TO_SPELL
Definition Player.h:818
@ TELE_TO_NOT_LEAVE_COMBAT
Definition Player.h:816
@ TELE_TO_NOT_UNSUMMON_PET
Definition Player.h:817
@ TELE_TO_NOT_LEAVE_TRANSPORT
Definition Player.h:815
void ReinitializeMovement()
Definition MotionMaster.cpp:952
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options=0, Unit *target=nullptr, bool newInstance=false)
Definition Player.cpp:1352
void SendTeleportPacket(Position &pos)
Definition Unit.cpp:15992
void UpdateObjectVisibility(bool forced=true, bool fromUpdate=false) override
Definition Unit.cpp:15387
virtual bool UpdatePosition(float x, float y, float z, float ang, bool teleport=false)
Definition Unit.cpp:16011

References DisableSpline(), WorldLocation::GetMapId(), GetMotionMaster(), Object::IsPlayer(), MotionMaster::ReinitializeMovement(), SendTeleportPacket(), TELE_TO_NOT_LEAVE_COMBAT, TELE_TO_NOT_LEAVE_TRANSPORT, TELE_TO_NOT_LEAVE_VEHICLE, TELE_TO_NOT_UNSUMMON_PET, TELE_TO_SPELL, TELE_TO_WITH_PET, Player::TeleportTo(), Object::ToPlayer(), UpdateObjectVisibility(), and UpdatePosition().

◆ NearTeleportTo() [2/2]

void Unit::NearTeleportTo ( Position pos,
bool  casting = false,
bool  vehicleTeleport = false,
bool  withPet = false,
bool  removeTransport = false 
)
15966{
15967 NearTeleportTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), casting, vehicleTeleport, withPet, removeTransport);
15968}
void NearTeleportTo(Position &pos, bool casting=false, bool vehicleTeleport=false, bool withPet=false, bool removeTransport=false)
Definition Unit.cpp:15965

References Position::GetOrientation(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), and NearTeleportTo().

Referenced by boss_viscidus::DamageTaken(), npc_madrigosa::DoAction(), npc_akama_illidan::DoAction(), Spell::EffectLeap(), Spell::EffectResurrectPet(), Spell::EffectStuck(), Spell::EffectSummonPet(), Spell::EffectTeleportUnits(), Spell::EffectTeleUnitsFaceCaster(), npc_giant_claw_tentacle::Emerge(), boss_yoggsaron_sara::EnterEvadeMode(), UtherBatteredHiltEvent::Execute(), BattlegroundBE::HandleAreaTrigger(), BattlegroundDS::HandleAreaTrigger(), BattlegroundNA::HandleAreaTrigger(), BattlegroundRL::HandleAreaTrigger(), BattlegroundRV::HandleAreaTrigger(), spell_moroes_vanish::HandleDummy(), spell_class_call_handler::HandleOnHitRogue(), npc_echo_of_medivh::HandlePieceJustDied(), BattlegroundBE::HandlePlayerUnderMap(), BattlegroundDS::HandlePlayerUnderMap(), BattlegroundNA::HandlePlayerUnderMap(), BattlegroundRL::HandlePlayerUnderMap(), BattlegroundRV::HandlePlayerUnderMap(), npc_pet_mage_mirror_image::InitializeAI(), boss_urom::boss_uromAI::JustDied(), boss_stormcaller_brundir::JustDied(), boss_noth::boss_nothAI::JustDied(), boss_grandmaster_vorpil::JustEngagedWith(), NearTeleportTo(), npc_ball_of_flame::npc_ball_of_flameAI::npc_ball_of_flameAI(), npc_chesspiece::OnCharmed(), npc_vh_sinclari::OnGossipSelect(), npc_cos_chromie_start::OnGossipSelect(), npc_chesspiece::Reset(), boss_gothik::boss_gothikAI::Reset(), Map::ScriptsProcess(), npc_simon_bunny::npc_simon_bunnyAI::SetUpPreGame(), boss_urom::boss_uromAI::SpellHit(), boss_majordomo::SpellHit(), npc_frostwing_vrykul::npc_frostwing_vrykulAI::SpellHitTarget(), npc_nerubian_burrower::npc_nerubian_burrowerAI::SpellHitTarget(), npc_pos_leader_second::npc_pos_leader_secondAI::SpellHitTarget(), boss_cyanigosa::SpellHitTarget(), BossAI::TeleportCheaters(), BattlegroundRV::TeleportUnitToNewZ(), Vehicle::TeleportVehicle(), npc_doomfire_spirit::TryTeleportInDirection(), boss_rend_blackhand::UpdateAI(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::UpdateAI(), boss_renataki::boss_renatakiAI::UpdateAI(), npc_coldflame::npc_coldflameAI::UpdateAI(), boss_magus_telestra::UpdateAI(), boss_urom::boss_uromAI::UpdateAI(), boss_thorim_sif::UpdateAI(), boss_yoggsaron_sara::UpdateAI(), boss_svala::boss_svalaAI::UpdateAI(), and npc_minigob_manabonk::UpdateAI().

◆ OutDebugInfo()

void Unit::OutDebugInfo ( ) const
16169{
16170 LOG_ERROR("entities.unit", "Unit::OutDebugInfo");
16171 LOG_INFO("entities.unit", "GUID {}, name {}", GetGUID().ToString(), GetName());
16172 LOG_INFO("entities.unit", "OwnerGUID {}, MinionGUID {}, CharmerGUID {}, CharmedGUID {}",
16174 LOG_INFO("entities.unit", "In world {}, unit type mask {}", (uint32)(IsInWorld() ? 1 : 0), m_unitTypeMask);
16175 if (IsInWorld())
16176 LOG_INFO("entities.unit", "Mapid {}", GetMapId());
16177
16178 LOG_INFO("entities.unit", "Summon Slot: ");
16179 for (uint32 i = 0; i < MAX_SUMMON_SLOT; ++i)
16180 LOG_INFO("entities.unit", "{}, ", m_SummonSlot[i].ToString());
16181 LOG_INFO("server.loading", " ");
16182
16183 LOG_INFO("entities.unit", "Controlled List: ");
16184 for (ControlSet::const_iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr)
16185 LOG_INFO("entities.unit", "{}, ", (*itr)->GetGUID().ToString());
16186 LOG_INFO("server.loading", " ");
16187
16188 LOG_INFO("entities.unit", "Aura List: ");
16189 for (AuraApplicationMap::const_iterator itr = m_appliedAuras.begin(); itr != m_appliedAuras.end(); ++itr)
16190 LOG_INFO("entities.unit", "{}, ", itr->first);
16191 LOG_INFO("server.loading", " ");
16192
16193 if (IsVehicle())
16194 {
16195 LOG_INFO("entities.unit", "Passenger List: ");
16196 for (SeatMap::iterator itr = GetVehicleKit()->Seats.begin(); itr != GetVehicleKit()->Seats.end(); ++itr)
16197 if (Unit* passenger = ObjectAccessor::GetUnit(*GetVehicleBase(), itr->second.Passenger.Guid))
16198 LOG_INFO("entities.unit", "{}, ", passenger->GetGUID().ToString());
16199 LOG_INFO("server.loading", " ");
16200 }
16201
16202 if (GetVehicle())
16203 LOG_INFO("entities.unit", "On vehicle {}.", GetVehicleBase()->GetEntry());
16204}
Seats
Definition boss_flame_leviathan.cpp:160
SeatMap Seats
Definition Vehicle.h:57

References GetCharmerGUID(), GetCharmGUID(), Object::GetEntry(), Object::GetGUID(), WorldLocation::GetMapId(), GetMinionGUID(), WorldObject::GetName(), GetOwnerGUID(), ObjectAccessor::GetUnit(), GetVehicle(), GetVehicleBase(), GetVehicleKit(), Object::IsInWorld(), IsVehicle(), LOG_ERROR, LOG_INFO, m_appliedAuras, m_Controlled, m_SummonSlot, m_unitTypeMask, MAX_SUMMON_SLOT, Vehicle::Seats, and Position::ToString().

Referenced by SetMinion().

◆ PatchValuesUpdate()

void Unit::PatchValuesUpdate ( ByteBuffer valuesUpdateBuf,
BuildValuesCachePosPointers posPointers,
Player target 
)
private
16895{
16896 Creature const* creature = ToCreature();
16897
16898 // UNIT_NPC_FLAGS
16899 if (creature && posPointers.UnitNPCFlagsPos >= 0)
16900 {
16901 uint32 appendValue = m_uint32Values[UNIT_NPC_FLAGS];
16902
16903 if (sWorld->getIntConfig(CONFIG_INSTANT_TAXI) == 2 && appendValue & UNIT_NPC_FLAG_FLIGHTMASTER)
16904 appendValue |= UNIT_NPC_FLAG_GOSSIP; // flight masters need NPC gossip flag to show instant flight toggle option
16905
16906 if (!target->CanSeeSpellClickOn(creature))
16907 appendValue &= ~UNIT_NPC_FLAG_SPELLCLICK;
16908
16909 if (!target->CanSeeVendor(creature))
16910 {
16911 appendValue &= ~UNIT_NPC_FLAG_REPAIR;
16912 appendValue &= ~UNIT_NPC_FLAG_VENDOR_MASK;
16913 }
16914
16915 if (!target->CanSeeTrainer(creature))
16916 appendValue &= ~UNIT_NPC_FLAG_TRAINER;
16917
16918 valuesUpdateBuf.put(posPointers.UnitNPCFlagsPos, appendValue);
16919 }
16920
16921 // UNIT_FIELD_AURASTATE
16922 if (posPointers.UnitFieldAuraStatePos >= 0)
16923 valuesUpdateBuf.put(posPointers.UnitFieldAuraStatePos, uint32(BuildAuraStateUpdateForTarget(target)));
16924
16925 // UNIT_FIELD_FLAGS
16926 if (posPointers.UnitFieldFlagsPos >= 0)
16927 {
16928 uint32 appendValue = m_uint32Values[UNIT_FIELD_FLAGS];
16929 if (target->IsGameMaster() && target->GetSession()->IsGMAccount())
16930 appendValue &= ~UNIT_FLAG_NOT_SELECTABLE;
16931
16932 valuesUpdateBuf.put(posPointers.UnitFieldFlagsPos, appendValue);
16933 }
16934
16935 // UNIT_FIELD_DISPLAYID
16936 // Use modelid_a if not gm, _h if gm for CREATURE_FLAG_EXTRA_TRIGGER creatures.
16937 if (posPointers.UnitFieldDisplayPos >= 0)
16938 {
16940 if (creature)
16941 {
16942 CreatureTemplate const* cinfo = creature->GetCreatureTemplate();
16943
16944 // this also applies for transform auras
16945 if (SpellInfo const* transform = sSpellMgr->GetSpellInfo(getTransForm()))
16946 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
16947 if (transform->Effects[i].IsAura(SPELL_AURA_TRANSFORM))
16948 if (CreatureTemplate const* transformInfo = sObjectMgr->GetCreatureTemplate(transform->Effects[i].MiscValue))
16949 {
16950 cinfo = transformInfo;
16951 break;
16952 }
16953
16955 {
16956 if (target->IsGameMaster() && target->GetSession()->IsGMAccount())
16957 displayId = cinfo->GetFirstVisibleModel()->CreatureDisplayID;
16958 else
16959 displayId = cinfo->GetFirstInvisibleModel()->CreatureDisplayID;
16960 }
16961 }
16962
16963 valuesUpdateBuf.put(posPointers.UnitFieldDisplayPos, uint32(displayId));
16964 }
16965
16966 // UNIT_DYNAMIC_FLAGS
16967 // Hide lootable animation for unallowed players.
16968 if (posPointers.UnitDynamicFlagsPos >= 0)
16969 {
16971
16972 if (creature)
16973 {
16974 if (creature->hasLootRecipient())
16975 {
16976 dynamicFlags |= UNIT_DYNFLAG_TAPPED;
16977 if (creature->isTappedBy(target))
16978 dynamicFlags |= UNIT_DYNFLAG_TAPPED_BY_PLAYER;
16979 }
16980
16981 if (!target->isAllowedToLoot(creature))
16982 dynamicFlags &= ~UNIT_DYNFLAG_LOOTABLE;
16983 }
16984
16985 // unit UNIT_DYNFLAG_TRACK_UNIT should only be sent to caster of SPELL_AURA_MOD_STALKED auras
16986 if (dynamicFlags & UNIT_DYNFLAG_TRACK_UNIT)
16988 dynamicFlags &= ~UNIT_DYNFLAG_TRACK_UNIT;
16989
16990 valuesUpdateBuf.put(posPointers.UnitDynamicFlagsPos, dynamicFlags);
16991 }
16992
16993 // UNIT_FIELD_BYTES_2
16994 if (posPointers.UnitFieldBytes2Pos >= 0)
16995 {
16996 if (IsControlledByPlayer() && target != this && sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && IsInRaidWith(target))
16997 {
16999 FactionTemplateEntry const* ft2 = target->GetFactionTemplateEntry();
17000 if (ft1 && ft2 && !ft1->IsFriendlyTo(*ft2))
17001 // Allow targetting opposite faction in party when enabled in config
17002 valuesUpdateBuf.put(posPointers.UnitFieldBytes2Pos, (m_uint32Values[UNIT_FIELD_BYTES_2] & ((UNIT_BYTE2_FLAG_SANCTUARY /*| UNIT_BYTE2_FLAG_AURAS | UNIT_BYTE2_FLAG_UNK5*/) << 8))); // this flag is at uint8 offset 1 !!
17003 }// pussywizard / Callmephil
17004 else if (target->IsSpectator() && target->FindMap() && target->FindMap()->IsBattleArena() &&
17005 (this->IsPlayer() || this->IsCreature() || this->IsDynamicObject()))
17006 {
17007 valuesUpdateBuf.put(posPointers.UnitFieldBytes2Pos, (m_uint32Values[UNIT_FIELD_BYTES_2] & 0xFFFFF2FF)); // clear UNIT_BYTE2_FLAG_PVP, UNIT_BYTE2_FLAG_FFA_PVP, UNIT_BYTE2_FLAG_SANCTUARY
17008 }
17009 }
17010
17011 // UNIT_FIELD_FACTIONTEMPLATE
17012 if (posPointers.UnitFieldFactionTemplatePos >= 0)
17013 {
17014 if (IsControlledByPlayer() && target != this && sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && IsInRaidWith(target))
17015 {
17017 FactionTemplateEntry const* ft2 = target->GetFactionTemplateEntry();
17018 if (ft1 && ft2 && !ft1->IsFriendlyTo(*ft2))
17019 // pretend that all other HOSTILE players have own faction, to allow follow, heal, rezz (trade wont work)
17020 valuesUpdateBuf.put(posPointers.UnitFieldFactionTemplatePos, uint32(target->GetFaction()));
17021 }// pussywizard / Callmephil
17022 else if (target->IsSpectator() && target->FindMap() && target->FindMap()->IsBattleArena() &&
17023 (this->IsPlayer() || this->IsCreature() || this->IsDynamicObject()))
17024 {
17025 valuesUpdateBuf.put(posPointers.UnitFieldFactionTemplatePos, uint32(target->GetFaction()));
17026 }
17027 else if (target->IsGMSpectator() && IsControlledByPlayer())
17028 {
17029 valuesUpdateBuf.put(posPointers.UnitFieldFactionTemplatePos, uint32(target->GetFaction()));
17030 }
17031 }
17032
17033 sScriptMgr->OnPatchValuesUpdate(this, valuesUpdateBuf, posPointers, target);
17034}
@ CREATURE_FLAG_EXTRA_TRIGGER
Definition CreatureData.h:53
@ UNIT_DYNFLAG_TRACK_UNIT
Definition SharedDefines.h:3355
@ CONFIG_INSTANT_TAXI
Definition WorldConfig.h:345
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP
Definition WorldConfig.h:34
void put(std::size_t pos, T value)
Definition ByteBuffer.h:137
bool isTappedBy(Player const *player) const
Definition Creature.cpp:1366
bool isAllowedToLoot(Creature const *creature)
Definition PlayerStorage.cpp:5682
bool CanSeeTrainer(Creature const *creature) const
Definition Player.cpp:14431
bool CanSeeVendor(Creature const *creature) const
Definition Player.cpp:14415
bool IsGMSpectator() const
Definition Player.h:1178
bool IsSpectator() const
Definition Player.h:2611
bool CanSeeSpellClickOn(Creature const *creature) const
Definition Player.cpp:14318
uint32 BuildAuraStateUpdateForTarget(Unit *target) const
Definition Unit.cpp:7646
bool IsGMAccount() const
Definition WorldSession.cpp:206
int32 UnitFieldFlagsPos
Definition UnitUtils.h:99
int32 UnitFieldDisplayPos
Definition UnitUtils.h:100
int32 UnitDynamicFlagsPos
Definition UnitUtils.h:101
int32 UnitFieldAuraStatePos
Definition UnitUtils.h:98
int32 UnitFieldFactionTemplatePos
Definition UnitUtils.h:103
int32 UnitFieldBytes2Pos
Definition UnitUtils.h:102
int32 UnitNPCFlagsPos
Definition UnitUtils.h:97
uint32 CreatureDisplayID
Definition CreatureData.h:180
CreatureModel const * GetFirstInvisibleModel() const
Definition Creature.cpp:155
CreatureModel const * GetFirstVisibleModel() const
Definition Creature.cpp:165

References BuildAuraStateUpdateForTarget(), Player::CanSeeSpellClickOn(), Player::CanSeeTrainer(), Player::CanSeeVendor(), CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP, CONFIG_INSTANT_TAXI, CREATURE_FLAG_EXTRA_TRIGGER, CreatureModel::CreatureDisplayID, WorldObject::FindMap(), Creature::GetCreatureTemplate(), GetFaction(), GetFactionTemplateEntry(), CreatureTemplate::GetFirstInvisibleModel(), CreatureTemplate::GetFirstVisibleModel(), Object::GetGUID(), Player::GetSession(), getTransForm(), HasAuraTypeWithCaster(), CreatureTemplate::HasFlagsExtra(), Creature::hasLootRecipient(), Player::isAllowedToLoot(), Map::IsBattleArena(), IsControlledByPlayer(), FactionTemplateEntry::IsFriendlyTo(), Player::IsGameMaster(), WorldSession::IsGMAccount(), Player::IsGMSpectator(), IsInRaidWith(), Player::IsSpectator(), Creature::isTappedBy(), Object::m_uint32Values, MAX_SPELL_EFFECTS, ByteBuffer::put(), sObjectMgr, SPELL_AURA_MOD_STALKED, SPELL_AURA_TRANSFORM, sScriptMgr, sSpellMgr, sWorld, Object::ToCreature(), UNIT_BYTE2_FLAG_SANCTUARY, UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE, UNIT_DYNFLAG_TAPPED, UNIT_DYNFLAG_TAPPED_BY_PLAYER, UNIT_DYNFLAG_TRACK_UNIT, UNIT_FIELD_BYTES_2, UNIT_FIELD_DISPLAYID, UNIT_FIELD_FLAGS, UNIT_NPC_FLAG_FLIGHTMASTER, UNIT_NPC_FLAG_GOSSIP, UNIT_NPC_FLAGS, BuildValuesCachePosPointers::UnitDynamicFlagsPos, BuildValuesCachePosPointers::UnitFieldAuraStatePos, BuildValuesCachePosPointers::UnitFieldBytes2Pos, BuildValuesCachePosPointers::UnitFieldDisplayPos, BuildValuesCachePosPointers::UnitFieldFactionTemplatePos, BuildValuesCachePosPointers::UnitFieldFlagsPos, and BuildValuesCachePosPointers::UnitNPCFlagsPos.

Referenced by BuildValuesUpdate().

◆ PauseMovement()

void Unit::PauseMovement ( uint32  timer = 0,
uint8  slot = 0 
)
virtual

Disable the unit movement by clearing UNIT_STATE_MOVING and stopping the spline.

13058{
13059 if (slot >= MAX_MOTION_SLOT)
13060 return;
13061
13062 if (MovementGenerator* movementGenerator = GetMotionMaster()->GetMotionSlot(slot))
13063 movementGenerator->Pause(timer);
13064
13065 StopMoving();
13066}
@ MAX_MOTION_SLOT
Definition MotionMaster.h:67
Definition MovementGenerator.h:28
void StopMoving()
Definition Unit.cpp:13038

References GetMotionMaster(), MAX_MOTION_SLOT, and StopMoving().

Referenced by spell_chapter5_return_to_capital::HandleHit(), Creature::PauseMovementForInteraction(), boss_shade_of_aran::SetGUID(), npc_acherus_necromancer::npc_acherus_necromancerAI::UpdateAI(), and npc_gothik_the_harvester::npc_gothik_the_harvesterAI::UpdateAI().

◆ PetSpellFail()

void Unit::PetSpellFail ( SpellInfo const *  spellInfo,
Unit target,
uint32  result 
)
16279{
16280 CharmInfo* charmInfo = GetCharmInfo();
16281 if (!charmInfo || !IsCreature())
16282 return;
16283
16284 if ((sDisableMgr->IsPathfindingEnabled(GetMap()) || result != SPELL_FAILED_LINE_OF_SIGHT) && target)
16285 {
16286 if ((result == SPELL_FAILED_LINE_OF_SIGHT || result == SPELL_FAILED_OUT_OF_RANGE) || !ToCreature()->HasReactState(REACT_PASSIVE))
16287 if (Unit* owner = GetOwner())
16288 {
16289 if (spellInfo->IsPositive() && IsFriendlyTo(target))
16290 {
16291 AttackStop();
16292 charmInfo->SetIsAtStay(false);
16293 charmInfo->SetIsCommandAttack(true);
16294 charmInfo->SetIsReturning(false);
16295 charmInfo->SetIsFollowing(false);
16296
16297 GetMotionMaster()->MoveFollow(target, PET_FOLLOW_DIST, rand_norm() * 2 * M_PI);
16298 }
16299 else if (owner->IsValidAttackTarget(target))
16300 {
16301 AttackStop();
16302 charmInfo->SetIsAtStay(false);
16303 charmInfo->SetIsCommandAttack(true);
16304 charmInfo->SetIsReturning(false);
16305 charmInfo->SetIsFollowing(false);
16306
16307 if (!ToCreature()->HasReactState(REACT_PASSIVE))
16308 ToCreature()->AI()->AttackStart(target);
16309 else
16310 GetMotionMaster()->MoveChase(target);
16311 }
16312 }
16313
16314 // can be extended in future
16315 if (result == SPELL_FAILED_LINE_OF_SIGHT || result == SPELL_FAILED_OUT_OF_RANGE)
16316 {
16317 charmInfo->SetForcedSpell(spellInfo->IsPositive() ? -int32(spellInfo->Id) : spellInfo->Id);
16318 charmInfo->SetForcedTargetGUID(target->GetGUID());
16319 }
16320 else
16321 {
16322 charmInfo->SetForcedSpell(0);
16324 }
16325 }
16326}
#define sDisableMgr
Definition DisableMgr.h:88
constexpr float PET_FOLLOW_DIST
Definition PetDefines.h:206
@ SPELL_FAILED_OUT_OF_RANGE
Definition SharedDefines.h:1034
@ SPELL_FAILED_LINE_OF_SIGHT
Definition SharedDefines.h:984
@ REACT_PASSIVE
Definition Unit.h:566
void MoveChase(Unit *target, std::optional< ChaseRange > dist={}, std::optional< ChaseAngle > angle={})
Force the unit to chase this target. Doesn't work with UNIT_FLAG_DISABLE_MOVE.
Definition MotionMaster.cpp:315
void MoveFollow(Unit *target, float dist, float angle, MovementSlot slot=MOTION_SLOT_ACTIVE, bool inheritWalkState=true, bool inheritSpeed=true)
The unit will follow this target. Doesn't work with UNIT_FLAG_DISABLE_MOVE.
Definition MotionMaster.cpp:447
virtual void AttackStart(Unit *)
Definition UnitAI.cpp:28
void SetIsAtStay(bool val)
Definition CharmInfo.cpp:365
void SetIsFollowing(bool val)
Definition CharmInfo.cpp:375
void SetIsReturning(bool val)
Definition CharmInfo.cpp:385
void SetForcedSpell(uint32 id)
Definition CharmInfo.h:177
void SetForcedTargetGUID(ObjectGuid guid=ObjectGuid::Empty)
Definition CharmInfo.h:179
void SetIsCommandAttack(bool val)
Definition CharmInfo.cpp:303

References Creature::AI(), UnitAI::AttackStart(), AttackStop(), ObjectGuid::Empty, GetCharmInfo(), Object::GetGUID(), WorldObject::GetMap(), GetMotionMaster(), GetOwner(), SpellInfo::Id, Object::IsCreature(), IsFriendlyTo(), SpellInfo::IsPositive(), MotionMaster::MoveChase(), MotionMaster::MoveFollow(), PET_FOLLOW_DIST, rand_norm(), REACT_PASSIVE, sDisableMgr, CharmInfo::SetForcedSpell(), CharmInfo::SetForcedTargetGUID(), CharmInfo::SetIsAtStay(), CharmInfo::SetIsCommandAttack(), CharmInfo::SetIsFollowing(), CharmInfo::SetIsReturning(), SPELL_FAILED_LINE_OF_SIGHT, SPELL_FAILED_OUT_OF_RANGE, and Object::ToCreature().

Referenced by WorldSession::HandlePetActionHelper(), and WorldSession::HandlePetCastSpellOpcode().

◆ processDummyAuras()

float Unit::processDummyAuras ( float  TakenTotalMod) const
private
9006{
9007 // note: old code coming from TC, just extracted here to remove the code duplication + solve potential crash
9008 // see: https://github.com/TrinityCore/TrinityCore/commit/c85710e148d75450baedf6632b9ca6fd40b4148e
9009
9010 // .. taken pct: dummy auras
9011 auto const& mDummyAuras = GetAuraEffectsByType(SPELL_AURA_DUMMY);
9012 for (auto i = mDummyAuras.begin(); i != mDummyAuras.end(); ++i)
9013 {
9014 if (!(*i) || !(*i)->GetSpellInfo())
9015 {
9016 continue;
9017 }
9018
9019 if (auto spellIconId = (*i)->GetSpellInfo()->SpellIconID)
9020 {
9021 switch (spellIconId)
9022 {
9023 // Cheat Death
9024 case 2109:
9025 if ((*i)->GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL)
9026 {
9027 // Patch 2.4.3: The resilience required to reach the 90% damage reduction cap
9028 // is 22.5% critical strike damage reduction, or 444 resilience.
9029 // To calculate for 90%, we multiply the 100% by 4 (22.5% * 4 = 90%)
9030 float mod = -1.0f * GetMeleeCritDamageReduction(400);
9031 AddPct(TakenTotalMod, std::max(mod, float((*i)->GetAmount())));
9032 }
9033 break;
9034 }
9035 }
9036 }
9037 return TakenTotalMod;
9038}

References AddPct(), GetAuraEffectsByType(), GetMeleeCritDamageReduction(), SPELL_AURA_DUMMY, and SPELL_SCHOOL_MASK_NORMAL.

Referenced by MeleeDamageBonusTaken(), and SpellDamageBonusTaken().

◆ ProcessPositionDataChanged()

void Unit::ProcessPositionDataChanged ( PositionFullTerrainStatus const &  data)
overridevirtual

Reimplemented from WorldObject.

4462{
4465}
virtual void ProcessTerrainStatusUpdate()
Definition Unit.cpp:4467
virtual void ProcessPositionDataChanged(PositionFullTerrainStatus const &data)
Definition Object.cpp:1188

References WorldObject::ProcessPositionDataChanged(), and ProcessTerrainStatusUpdate().

Referenced by Creature::Create().

◆ ProcessTerrainStatusUpdate()

void Unit::ProcessTerrainStatusUpdate ( )
virtual

Reimplemented in Player.

4468{
4469 if (IsCreature())
4471
4472 if (IsFlying() || (!IsControlledByPlayer()))
4473 return;
4474
4475 LiquidData const& liquidData = GetLiquidData();
4476
4477 // remove appropriate auras if we are swimming/not swimming respectively - exact mirror of client logic
4478 if (liquidData.Status & MAP_LIQUID_STATUS_SWIMMING && (liquidData.Level - GetPositionZ()) > GetCollisionHeight() * 0.75f) // Shallow water at ~75% of collision height)
4480 else
4482
4483 // liquid aura handling
4484 LiquidTypeEntry const* curLiquid = nullptr;
4485 if ((liquidData.Status & MAP_LIQUID_STATUS_SWIMMING))
4486 curLiquid = sLiquidTypeStore.LookupEntry(liquidData.Entry);
4487
4488 if (curLiquid != _lastLiquid)
4489 {
4492
4493 // Set _lastLiquid before casting liquid spell to avoid infinite loops
4494 _lastLiquid = curLiquid;
4495
4497 if (curLiquid && curLiquid->SpellId && (!player || !player->IsGameMaster()))
4498 CastSpell(this, curLiquid->SpellId, true);
4499 }
4500}
DBCStorage< LiquidTypeEntry > sLiquidTypeStore(LiquidTypefmt)
@ AURA_INTERRUPT_FLAG_NOT_ABOVEWATER
Definition SpellDefines.h:50
@ AURA_INTERRUPT_FLAG_NOT_UNDERWATER
Definition SpellDefines.h:51
void UpdateMovementFlags()
Definition Creature.cpp:3424
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:5182
bool IsFlying() const
Definition Unit.h:1714
Definition GridTerrainData.h:199
float Level
Definition GridTerrainData.h:204
uint32 Entry
Definition GridTerrainData.h:202
Definition DBCStructure.h:1283
uint32 SpellId
Definition DBCStructure.h:1289

References _lastLiquid, AURA_INTERRUPT_FLAG_NOT_ABOVEWATER, AURA_INTERRUPT_FLAG_NOT_UNDERWATER, CastSpell(), LiquidData::Entry, GetCharmerOrOwnerPlayerOrPlayerItself(), GetCollisionHeight(), WorldObject::GetLiquidData(), Position::GetPositionZ(), IsControlledByPlayer(), Object::IsCreature(), IsFlying(), Player::IsGameMaster(), LiquidData::Level, MAP_LIQUID_STATUS_SWIMMING, RemoveAurasDueToSpell(), RemoveAurasWithInterruptFlags(), sLiquidTypeStore, LiquidTypeEntry::SpellId, LiquidData::Status, Object::ToCreature(), and Creature::UpdateMovementFlags().

Referenced by ProcessPositionDataChanged(), and Player::ProcessTerrainStatusUpdate().

◆ ProcSkillsAndAuras()

void Unit::ProcSkillsAndAuras ( Unit actor,
Unit victim,
uint32  procAttacker,
uint32  procVictim,
uint32  procEx,
uint32  amount,
WeaponAttackType  attType = BASE_ATTACK,
SpellInfo const *  procSpellInfo = nullptr,
SpellInfo const *  procAura = nullptr,
int8  procAuraEffectIndex = -1,
Spell const *  procSpell = nullptr,
DamageInfo damageInfo = nullptr,
HealInfo healInfo = nullptr,
uint32  procPhase = 2 
)
static
6775{
6776 // Handle skills and reactives for actor
6777 if (procAttacker && actor)
6778 actor->ProcSkillsAndReactives(false, victim, procAttacker, procExtra, attType, procSpellInfo, amount, procAura, procAuraEffectIndex, procSpell, damageInfo, healInfo, procPhase);
6779
6780 // Handle skills and reactives for victim
6781 if (victim && victim->IsAlive() && procVictim)
6782 victim->ProcSkillsAndReactives(true, actor, procVictim, procExtra, attType, procSpellInfo, amount, procAura, procAuraEffectIndex, procSpell, damageInfo, healInfo, procPhase);
6783
6784 // Handle aura procs via new proc system (TriggerAurasProcOnEvent)
6785 if (actor)
6786 {
6787 // Calculate spellTypeMask based on phase and actual damage/heal info
6789 if (procPhase == PROC_SPELL_PHASE_CAST || procPhase == PROC_SPELL_PHASE_FINISH)
6790 {
6791 // At CAST phase, no damage/heal has occurred yet - use MASK_ALL to allow
6792 // procs that check for damage/heal type based on spell info (like Backlash)
6793 // At FINISH phase, damageInfo may be null but spell did do damage - use MASK_ALL
6794 // to match TrinityCore behavior (see TC Spell.cpp PROC_SPELL_PHASE_FINISH call)
6796 }
6797 else if (healInfo && healInfo->GetHeal())
6799 else if (damageInfo && (damageInfo->GetDamage() || damageInfo->GetAbsorb()))
6801 else if (procSpellInfo)
6803
6804 actor->TriggerAurasProcOnEvent(nullptr, nullptr, victim, procAttacker, procVictim, spellTypeMask, procPhase, procExtra, const_cast<Spell*>(procSpell), damageInfo, healInfo);
6805 }
6806}
static uint32 spellTypeMask[TOTAL_AURAS]
Definition SpellMgr.cpp:1819
@ PROC_SPELL_TYPE_HEAL
Definition SpellMgr.h:240
@ PROC_SPELL_TYPE_MASK_ALL
Definition SpellMgr.h:242
@ PROC_SPELL_TYPE_DAMAGE
Definition SpellMgr.h:239
@ PROC_SPELL_TYPE_NO_DMG_HEAL
Definition SpellMgr.h:241
@ PROC_SPELL_PHASE_FINISH
Definition SpellMgr.h:250
@ PROC_SPELL_PHASE_CAST
Definition SpellMgr.h:248
uint32 GetAbsorb() const
Definition Unit.h:373
void TriggerAurasProcOnEvent(CalcDamageInfo &damageInfo)
Definition Unit.cpp:12898

References DamageInfo::GetAbsorb(), DamageInfo::GetDamage(), HealInfo::GetHeal(), IsAlive(), PROC_SPELL_PHASE_CAST, PROC_SPELL_PHASE_FINISH, PROC_SPELL_TYPE_DAMAGE, PROC_SPELL_TYPE_HEAL, PROC_SPELL_TYPE_MASK_ALL, PROC_SPELL_TYPE_NO_DMG_HEAL, ProcSkillsAndReactives(), spellTypeMask, and TriggerAurasProcOnEvent().

Referenced by Spell::_cast(), Spell::_handle_finish_phase(), AttackerStateUpdate(), Spell::DoAllEffectOnTarget(), ReflectEvent::Execute(), AuraEffect::HandlePeriodicDamageAurasTick(), AuraEffect::HandlePeriodicHealAurasTick(), AuraEffect::HandlePeriodicHealthLeechAuraTick(), AuraEffect::HandlePeriodicPowerBurnAuraTick(), and Kill().

◆ ProcSkillsAndReactives()

void Unit::ProcSkillsAndReactives ( bool  isVictim,
Unit target,
uint32  procFlag,
uint32  procExtra,
WeaponAttackType  attType,
SpellInfo const *  procSpellInfo,
uint32  damage,
SpellInfo const *  procAura = nullptr,
int8  procAuraEffectIndex = -1,
Spell const *  procSpell = nullptr,
DamageInfo damageInfo = nullptr,
HealInfo healInfo = nullptr,
uint32  procPhase = 2 
)
12773{
12774 // Player is loaded now - do not allow passive spell casts to proc
12775 if (IsPlayer() && ToPlayer()->GetSession()->PlayerLoading())
12776 return;
12777 // For melee/ranged based attack need update skills and set some Aura states if victim present
12778 if (procFlag & MELEE_BASED_TRIGGER_MASK && target && procPhase == PROC_SPELL_PHASE_HIT)
12779 {
12780 // Xinef: Shaman in ghost wolf form cant proc anything melee based
12781 if (!isVictim && GetShapeshiftForm() == FORM_GHOSTWOLF)
12782 return;
12783
12784 // Update skills here for players
12785 // only when you are not fighting other players or their pets/totems (pvp)
12786 if (IsPlayer() && !target->IsCharmedOwnedByPlayerOrPlayer())
12787 {
12788 // On melee based hit/miss/resist/parry/dodge need to update skill (for victim and attacker)
12790 {
12791 ToPlayer()->UpdateCombatSkills(target, attType, isVictim, procSpell ? procSpell->m_weaponItem : nullptr);
12792 }
12793 // Update defence if player is victim and we block - TODO: confirm that blocked attacks only have a chance to increase defence skill
12794 else if (isVictim && procExtra & (PROC_EX_BLOCK))
12795 {
12796 ToPlayer()->UpdateCombatSkills(target, attType, true);
12797 }
12798 }
12799 // If exist crit/parry/dodge/block need update aura state (for victim and attacker)
12801 {
12802 // for victim
12803 if (isVictim)
12804 {
12805 // if victim and dodge attack
12806 if (procExtra & PROC_EX_DODGE)
12807 {
12808 // Update AURA_STATE on dodge
12809 if (!IsClass(CLASS_ROGUE, CLASS_CONTEXT_ABILITY_REACTIVE)) // skip Rogue Riposte
12810 {
12813 }
12814 }
12815 // if victim and parry attack
12816 if (procExtra & PROC_EX_PARRY)
12817 {
12818 // For Hunters only Counterattack (skip Mongoose bite)
12820 {
12823 }
12824 else
12825 {
12828 }
12829 }
12830 // if and victim block attack
12831 if (procExtra & PROC_EX_BLOCK)
12832 {
12835 }
12836 }
12837 else // For attacker
12838 {
12839 // Overpower on victim dodge
12840 if (procExtra & PROC_EX_DODGE)
12841 {
12843 {
12844 AddComboPoints(target, 1);
12846 }
12847 }
12848
12849 // Wolverine Bite
12850 if ((procExtra & PROC_HIT_CRITICAL) && IsHunterPet())
12851 {
12852 AddComboPoints(target, 1);
12854 }
12855 }
12856 }
12857 }
12858 // Aura procs are now handled by TriggerAurasProcOnEvent called from ProcSkillsAndAuras
12859}
@ CLASS_ROGUE
Definition SharedDefines.h:129
@ PROC_HIT_CRITICAL
Definition SpellMgr.h:258
#define MELEE_BASED_TRIGGER_MASK
Definition SpellMgr.h:187
@ PROC_EX_DODGE
Definition SpellMgr.h:203
@ PROC_EX_BLOCK
Definition SpellMgr.h:205
@ PROC_EX_CRITICAL_HIT
Definition SpellMgr.h:200
@ PROC_EX_NORMAL_HIT
Definition SpellMgr.h:199
@ PROC_EX_MISS
Definition SpellMgr.h:201
@ PROC_EX_RESIST
Definition SpellMgr.h:202
@ PROC_EX_PARRY
Definition SpellMgr.h:204
@ PROC_SPELL_PHASE_HIT
Definition SpellMgr.h:249
@ REACTIVE_OVERPOWER
Definition Unit.h:621
@ REACTIVE_DEFENSE
Definition Unit.h:619
@ REACTIVE_HUNTER_PARRY
Definition Unit.h:620
@ REACTIVE_WOLVERINE_BITE
Definition Unit.h:622
void UpdateCombatSkills(Unit *victim, WeaponAttackType attType, bool defence, Item *item=nullptr)
Definition PlayerUpdates.cpp:1023
bool IsHunterPet() const
Definition Unit.h:798
void StartReactiveTimer(ReactiveType reactive)
Definition Unit.h:1855

References AddComboPoints(), AURA_STATE_DEFENSE, AURA_STATE_HUNTER_PARRY, CLASS_CONTEXT_ABILITY_REACTIVE, CLASS_HUNTER, CLASS_ROGUE, CLASS_WARRIOR, FORM_GHOSTWOLF, GetShapeshiftForm(), IsCharmedOwnedByPlayerOrPlayer(), IsClass(), IsHunterPet(), Object::IsPlayer(), Spell::m_weaponItem, MELEE_BASED_TRIGGER_MASK, ModifyAuraState(), PROC_EX_BLOCK, PROC_EX_CRITICAL_HIT, PROC_EX_DODGE, PROC_EX_MISS, PROC_EX_NORMAL_HIT, PROC_EX_PARRY, PROC_EX_RESIST, PROC_HIT_CRITICAL, PROC_SPELL_PHASE_HIT, REACTIVE_DEFENSE, REACTIVE_HUNTER_PARRY, REACTIVE_OVERPOWER, REACTIVE_WOLVERINE_BITE, StartReactiveTimer(), Object::ToPlayer(), and Player::UpdateCombatSkills().

Referenced by CalcAbsorbResist(), and ProcSkillsAndAuras().

◆ ProhibitSpellSchool()

virtual void Unit::ProhibitSpellSchool ( SpellSchoolMask  ,
uint32   
)
inlinevirtual

Reimplemented in Creature, and Player.

1584{ }

Referenced by Spell::EffectInterruptCast().

◆ propagateSpeedChange()

void Unit::propagateSpeedChange ( )
inline
void propagateSpeedChange()
Definition MotionMaster.cpp:938

References GetMotionMaster(), and MotionMaster::propagateSpeedChange().

Referenced by SetSpeed(), and SetWalk().

◆ RecalculateObjectScale()

void Unit::RecalculateObjectScale ( )
virtual
13159{
13161 float scale = GetNativeObjectScale() + CalculatePct(1.0f, scaleAuras);
13162 float scaleMin = IsPlayer() ? 0.1f : 0.01f;
13163 SetObjectScale(std::max(scale, scaleMin));
13164}
@ SPELL_AURA_MOD_SCALE_2
Definition SpellAuraDefines.h:302
@ SPELL_AURA_MOD_SCALE
Definition SpellAuraDefines.h:124
virtual void SetObjectScale(float scale)
Definition Object.h:121
virtual float GetNativeObjectScale() const
Definition Unit.h:1973

References CalculatePct(), GetNativeObjectScale(), GetTotalAuraModifier(), Object::IsPlayer(), Object::SetObjectScale(), SPELL_AURA_MOD_SCALE, and SPELL_AURA_MOD_SCALE_2.

Referenced by AuraEffect::HandleAuraModScale().

◆ RemoveAllAttackers()

void Unit::RemoveAllAttackers ( )

Remove all units in m_attackers list and send them AttackStop()

7595{
7596 while (!m_attackers.empty())
7597 {
7598 AttackerSet::iterator iter = m_attackers.begin();
7599 if (!(*iter)->AttackStop())
7600 {
7601 LOG_ERROR("entities.unit", "WORLD: Unit has an attacker that isn't attacking it!");
7602 m_attackers.erase(iter);
7603 }
7604 }
7605}

References LOG_ERROR, and m_attackers.

Referenced by CombatStop(), boss_kaelthas::ExecuteMiddleEvent(), boss_kelthuzad::boss_kelthuzadAI::JustEngagedWith(), spell_halion_twilight_phasing_aura::OnApply(), spell_halion_twilight_phasing_aura::OnRemove(), boss_attumen::SpellHit(), and npc_qiraj_war_spawn::npc_qiraj_war_spawnAI::UpdateAI().

◆ RemoveAllAuras()

void Unit::RemoveAllAuras ( )
5606{
5607 // this may be a dead loop if some events on aura remove will continiously apply aura on remove
5608 // we want to have all auras removed, so use your brain when linking events
5609 while (!m_appliedAuras.empty() || !m_ownedAuras.empty())
5610 {
5611 AuraApplicationMap::iterator aurAppIter;
5612 for (aurAppIter = m_appliedAuras.begin(); aurAppIter != m_appliedAuras.end();)
5614
5615 AuraMap::iterator aurIter;
5616 for (aurIter = m_ownedAuras.begin(); aurIter != m_ownedAuras.end();)
5617 RemoveOwnedAura(aurIter);
5618 }
5619}

References _UnapplyAura(), AURA_REMOVE_BY_DEFAULT, m_appliedAuras, m_ownedAuras, and RemoveOwnedAura().

Referenced by CleanupBeforeRemoveFromMap(), boss_muru::DamageTaken(), boss_headless_horseman_head::DamageTaken(), boss_black_knight::boss_black_knightAI::DamageTaken(), boss_grand_champion::boss_grand_championAI::DamageTaken(), boss_freya::DamageTaken(), boss_hodir::DamageTaken(), boss_ingvar_the_plunderer::DamageTaken(), npc_vrykul_skeleton::DamageTaken(), npc_overlord_drakuru_betrayal::DamageTaken(), npc_magister_aledis::DamageTaken(), npc_tapoke_slim_jahn::npc_tapoke_slim_jahnAI::DamageTaken(), npc_molten_golem::DamageTaken(), boss_thorim::DamageTaken(), spell_rotface_unstable_ooze_explosion_suicide_aura::DespawnSelf(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::DoAction(), boss_taldaram::DoAction(), npc_strangulate_vehicle::npc_strangulate_vehicleAI::DoAction(), boss_leotheras_the_blind::DoAction(), boss_kalecgos::DoAction(), boss_grand_champion::boss_grand_championAI::DoAction(), npc_anubarak_spike::npc_anubarak_spikeAI::DoAction(), boss_tyrannus::boss_tyrannusAI::DoAction(), boss_kelthuzad_minion::boss_kelthuzad_minionAI::DoAction(), npc_spark_of_ionar::DoAction(), boss_yoggsaron_sara::DoAction(), boss_yoggsaron_cloud::DoAction(), npc_taretha::npc_tarethaAI::DoAction(), boss_razorgore::DoChangePhase(), npc_taskmaster_fizzule::npc_taskmaster_fizzuleAI::DoFriend(), npc_unkor_the_ruthless::npc_unkor_the_ruthlessAI::DoNice(), boss_mimiron::EnterEvadeMode(), npc_ulduar_leviathan_mkii::EnterEvadeMode(), npc_ulduar_vx001::EnterEvadeMode(), npc_ulduar_aerial_command_unit::EnterEvadeMode(), GuardAI::EnterEvadeMode(), boss_doomrel::EnterEvadeMode(), FollowerAI::EnterEvadeMode(), npc_crystalline_frayer::EnterSeedPod(), LichKingDeathEvent::Execute(), spell_herald_volzaj_insanity::HandleDummyEffect(), misc_commandscript::HandleUnAuraCommand(), boss_ick::boss_ickAI::JustDied(), boss_venoxis::JustDied(), boss_taldaram::JustEngagedWith(), boss_mimiron::JustEngagedWith(), boss_high_botanist_freywinn::JustEngagedWith(), boss_novos::JustEngagedWith(), boss_professor_putricide::boss_professor_putricideAI::JustEngagedWith(), boss_commander_stoutbeard::JustEngagedWith(), boss_high_astromancer_solarian::JustEngagedWith(), boss_steelbreaker::JustReachedHome(), boss_runemaster_molgeim::JustReachedHome(), boss_stormcaller_brundir::JustReachedHome(), boss_urom::boss_uromAI::LeaveCombat(), boss_taldaram::MovementInform(), npc_hallows_end_soh::MovementInform(), npc_injured_7th_legion_soldier::npc_injured_7th_legion_soldierAI::MovementInform(), spell_kaelthas_flame_strike::OnRemove(), PretendToDie(), boss_alar::PretendToDie(), Creature::RemoveCorpse(), boss_venoxis::Reset(), npc_the_lich_king_controller::npc_the_lich_king_controllerAI::Reset(), boss_thaddius::boss_thaddiusAI::Reset(), npc_crystalline_frayer::Reset(), boss_bjarngrim::Reset(), boss_loken::Reset(), boss_hodir::Reset(), boss_xt002::Reset(), npc_q24545_lich_king::npc_q24545_lich_kingAI::Reset(), Pet::SavePetToDB(), npc_anubarak_spike::npc_anubarak_spikeAI::SelectNewTarget(), npc_harrison_jones::SpellHit(), npc_frost_sphere::npc_frost_sphereAI::SpellHit(), npc_tirion_fordring_tft::npc_tirion_fordringAI::SpellHit(), npc_ulduar_flames_spread::SpellHit(), npc_soh_fire_trigger::SpellHit(), npc_hallows_end_train_fire::SpellHit(), boss_headless_horseman_head::SpellHit(), npc_vaelastrasz_the_red::UpdateAI(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::UpdateAI(), npc_madrigosa::UpdateAI(), npc_snobold_vassal::npc_snobold_vassalAI::UpdateAI(), boss_krick::boss_krickAI::UpdateAI(), npc_kinetic_bomb::npc_kinetic_bombAI::UpdateAI(), npc_tirion_fordring_tft::npc_tirion_fordringAI::UpdateAI(), npc_lk_spirit_bomb::npc_lk_spirit_bombAI::UpdateAI(), npc_icc_putricades_trap::npc_icc_putricades_trapAI::UpdateAI(), boss_gothik::boss_gothikAI::UpdateAI(), boss_thaddius::boss_thaddiusAI::UpdateAI(), boss_malygos::UpdateAI(), boss_magus_telestra::UpdateAI(), boss_algalon_the_observer::UpdateAI(), boss_svala::boss_svalaAI::UpdateAI(), npc_q24545_lich_king::npc_q24545_lich_kingAI::UpdateAI(), npc_iron_watcher::npc_iron_watcherAI::UpdateAI(), and npc_aeranas::npc_aeranasAI::UpdateAI().

◆ RemoveAllAurasExceptType()

void Unit::RemoveAllAurasExceptType ( AuraType  type)
5680{
5681 for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end();)
5682 {
5683 Aura const* aura = iter->second->GetBase();
5684 if (aura->GetSpellInfo()->HasAura(type))
5685 ++iter;
5686 else
5688 }
5689
5690 for (AuraMap::iterator iter = m_ownedAuras.begin(); iter != m_ownedAuras.end();)
5691 {
5692 Aura* aura = iter->second;
5693 if (aura->GetSpellInfo()->HasAura(type))
5694 ++iter;
5695 else
5697 }
5698}

References _UnapplyAura(), AURA_REMOVE_BY_DEFAULT, Aura::GetSpellInfo(), SpellInfo::HasAura(), m_appliedAuras, m_ownedAuras, and RemoveOwnedAura().

Referenced by npc_ulduar_leviathan_mkii::DamageTaken(), npc_ulduar_vx001::DamageTaken(), npc_ulduar_aerial_command_unit::DamageTaken(), spell_q11919_q11940_drake_hunt_aura::HandleEffectRemove(), and npc_iron_watcher::npc_iron_watcherAI::SpellHit().

◆ RemoveAllAurasOnDeath()

void Unit::RemoveAllAurasOnDeath ( )
5636{
5637 // used just after dieing to remove all visible auras
5638 // and disable the mods for the passive ones
5639 for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end();)
5640 {
5641 Aura const* aura = iter->second->GetBase();
5644 else
5645 ++iter;
5646 }
5647
5648 for (AuraMap::iterator iter = m_ownedAuras.begin(); iter != m_ownedAuras.end();)
5649 {
5650 Aura* aura = iter->second;
5653 else
5654 ++iter;
5655 }
5656}
@ SPELL_ATTR7_DISABLE_AURA_WHILE_DEAD
Definition SharedDefines.h:631
@ AURA_REMOVE_BY_DEATH
Definition SpellAuraDefines.h:396
bool IsDeathPersistent() const
Definition SpellAuras.cpp:1033

References _UnapplyAura(), AURA_REMOVE_BY_DEATH, Aura::GetSpellInfo(), SpellInfo::HasAttribute(), Aura::IsDeathPersistent(), Aura::IsPassive(), m_appliedAuras, m_ownedAuras, RemoveOwnedAura(), and SPELL_ATTR7_DISABLE_AURA_WHILE_DEAD.

Referenced by spell_dk_death_pact::FilterTargets(), Kill(), Player::LoadFromDB(), and setDeathState().

◆ RemoveAllAurasRequiringDeadTarget()

void Unit::RemoveAllAurasRequiringDeadTarget ( )
5659{
5660 for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end();)
5661 {
5662 Aura const* aura = iter->second->GetBase();
5663 if (!aura->IsPassive() && aura->GetSpellInfo()->IsRequiringDeadTarget())
5665 else
5666 ++iter;
5667 }
5668
5669 for (AuraMap::iterator iter = m_ownedAuras.begin(); iter != m_ownedAuras.end();)
5670 {
5671 Aura* aura = iter->second;
5672 if (!aura->IsPassive() && aura->GetSpellInfo()->IsRequiringDeadTarget())
5674 else
5675 ++iter;
5676 }
5677}
bool IsRequiringDeadTarget() const
Definition SpellInfo.cpp:1254

References _UnapplyAura(), AURA_REMOVE_BY_DEFAULT, Aura::GetSpellInfo(), Aura::IsPassive(), SpellInfo::IsRequiringDeadTarget(), m_appliedAuras, m_ownedAuras, and RemoveOwnedAura().

Referenced by Player::LoadFromDB().

◆ RemoveAllControlled()

void Unit::RemoveAllControlled ( bool  onDeath = false)
8203{
8204 // possessed pet and vehicle
8205 if (IsPlayer())
8207
8208 for (auto it = m_Controlled.begin(); it != m_Controlled.end();)
8209 {
8210 Unit* target = *it;
8211 ++it;
8212
8213 if (target->GetCharmerGUID() == GetGUID())
8214 {
8215 m_Controlled.erase(target);
8216 target->RemoveCharmAuras();
8217 }
8218 else if (target->GetOwnerGUID() == GetGUID() && target->IsSummon())
8219 {
8220 // Keep Lightwell alive on owner death
8221 if (onDeath)
8222 if (TempSummon* ts = target->ToTempSummon())
8223 if (ts->m_Properties && ts->m_Properties->Type == SUMMON_TYPE_LIGHTWELL)
8224 continue;
8225
8226 if (!(onDeath && !IsPlayer() && target->IsGuardian()))
8227 target->ToTempSummon()->UnSummon();
8228 }
8229 else
8230 {
8231 LOG_ERROR("entities.unit", "Unit {} is trying to release unit {} which is neither charmed nor owned by it", GetEntry(), target->GetEntry());
8232 m_Controlled.erase(target);
8233 }
8234 }
8235}
@ SUMMON_TYPE_LIGHTWELL
Definition SharedDefines.h:3538
void StopCastingCharm(Aura *except=nullptr)
Definition Player.cpp:9326
bool IsGuardian() const
Definition Unit.h:795
void RemoveCharmAuras()
Definition Unit.cpp:8317

References GetCharmerGUID(), Object::GetEntry(), Object::GetGUID(), GetOwnerGUID(), IsGuardian(), Object::IsPlayer(), IsSummon(), LOG_ERROR, m_Controlled, RemoveCharmAuras(), Player::StopCastingCharm(), SUMMON_TYPE_LIGHTWELL, Object::ToPlayer(), ToTempSummon(), and TempSummon::UnSummon().

Referenced by Player::ActivateSpec(), RemoveFromWorld(), and setDeathState().

◆ RemoveAllDynObjects()

void Unit::RemoveAllDynObjects ( )
6561{
6562 while (!m_dynObj.empty())
6563 m_dynObj.front()->Remove();
6564}

References m_dynObj.

Referenced by RemoveFromWorld(), Player::TeleportTo(), and npc_icc_putricades_trap::npc_icc_putricades_trapAI::UpdateAI().

◆ RemoveAllFollowers()

void Unit::RemoveAllFollowers ( )
5600{
5601 while (!m_followingMe.empty())
5602 (*m_followingMe.begin())->SetTarget(nullptr);
5603}

References m_followingMe, and SetTarget().

Referenced by RemoveFromWorld().

◆ RemoveAllGameObjects()

void Unit::RemoveAllGameObjects ( )
6661{
6662 while(!m_gameObj.empty())
6663 {
6664 GameObject* go = ObjectAccessor::GetGameObject(*this, *m_gameObj.begin());
6665 if (go)
6666 {
6668 go->SetRespawnTime(0);
6669 go->Delete();
6670 }
6671 m_gameObj.erase(m_gameObj.begin());
6672 }
6673}
void Delete()
Definition GameObject.cpp:973
void SetRespawnTime(int32 respawn)
Definition GameObject.cpp:1284

References GameObject::Delete(), ObjectGuid::Empty, ObjectAccessor::GetGameObject(), m_gameObj, GameObject::SetOwnerGUID(), and GameObject::SetRespawnTime().

Referenced by CleanupBeforeRemoveFromMap(), npc_ice_tomb::npc_ice_tombAI::JustDied(), RemoveFromWorld(), npc_brewfest_super_brew_trigger::UpdateAI(), and boss_sapphiron::boss_sapphironAI::UpdateAI().

◆ RemoveAllMinionsByEntry()

void Unit::RemoveAllMinionsByEntry ( uint32  entry)
7974{
7975 for (Unit::ControlSet::iterator itr = m_Controlled.begin(); itr != m_Controlled.end();)
7976 {
7977 Unit* unit = *itr;
7978 ++itr;
7979 if (unit->GetEntry() == entry && unit->IsCreature()
7980 && unit->ToCreature()->IsSummon()) // minion, actually
7981 unit->ToTempSummon()->UnSummon();
7982 // i think this is safe because i have never heard that a despawned minion will trigger a same minion
7983 }
7984}

References Object::GetEntry(), Object::IsCreature(), IsSummon(), m_Controlled, Object::ToCreature(), ToTempSummon(), and TempSummon::UnSummon().

Referenced by Spell::EffectSummonType(), npc_nelson::npc_nelsonAI::Reset(), SetMinion(), and npc_nelson::npc_nelsonAI::UpdateAI().

◆ RemoveAppliedAuras() [1/2]

void Unit::RemoveAppliedAuras ( std::function< bool(AuraApplication const *)> const &  check)
5144{
5145 for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end();)
5146 {
5147 if (check(iter->second))
5148 {
5149 RemoveAura(iter);
5150 continue;
5151 }
5152 ++iter;
5153 }
5154}

References m_appliedAuras, and RemoveAura().

Referenced by _RemoveNoStackAurasDueToAura(), SpellInfo::ApplyAllSpellImmunitiesTo(), and RemoveArenaAuras().

◆ RemoveAppliedAuras() [2/2]

void Unit::RemoveAppliedAuras ( uint32  spellId,
std::function< bool(AuraApplication const *)> const &  check 
)
5170{
5171 for (AuraApplicationMap::iterator iter = m_appliedAuras.lower_bound(spellId); iter != m_appliedAuras.upper_bound(spellId);)
5172 {
5173 if (check(iter->second))
5174 {
5175 RemoveAura(iter);
5176 continue;
5177 }
5178 ++iter;
5179 }
5180}

References m_appliedAuras, and RemoveAura().

◆ RemoveAreaAurasDueToLeaveWorld()

void Unit::RemoveAreaAurasDueToLeaveWorld ( )
5567{
5568 // make sure that all area auras not applied on self are removed - prevent access to deleted pointer later
5569 for (AuraMap::iterator iter = m_ownedAuras.begin(); iter != m_ownedAuras.end();)
5570 {
5571 Aura* aura = iter->second;
5572 ++iter;
5573 Aura::ApplicationMap const& appMap = aura->GetApplicationMap();
5574 for (Aura::ApplicationMap::const_iterator itr = appMap.begin(); itr != appMap.end();)
5575 {
5576 AuraApplication* aurApp = itr->second;
5577 ++itr;
5578 Unit* target = aurApp->GetTarget();
5579 if (target == this)
5580 continue;
5581 target->RemoveAura(aurApp);
5582 // things linked on aura remove may apply new area aura - so start from the beginning
5583 iter = m_ownedAuras.begin();
5584 }
5585 }
5586
5587 // remove area auras owned by others
5588 for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end();)
5589 {
5590 if (iter->second->GetBase()->GetOwner() != this)
5591 {
5592 RemoveAura(iter);
5593 }
5594 else
5595 ++iter;
5596 }
5597}
ApplicationMap const & GetApplicationMap()
Definition SpellAuras.h:182
std::map< ObjectGuid, AuraApplication * > ApplicationMap
Definition SpellAuras.h:90

References Aura::GetApplicationMap(), AuraApplication::GetTarget(), m_appliedAuras, m_ownedAuras, and RemoveAura().

Referenced by RemoveFromWorld().

◆ RemoveArenaAuras()

void Unit::RemoveArenaAuras ( )
5622{
5623 // in join, remove positive buffs, on end, remove negative
5624 // used to remove positive visible auras in arenas
5625 RemoveAppliedAuras([](AuraApplication const* aurApp)
5626 {
5627 Aura const* aura = aurApp->GetBase();
5628 return (!aura->GetSpellInfo()->HasAttribute(SPELL_ATTR4_ALLOW_ENETRING_ARENA) // don't remove stances, shadowform, pally/hunter auras
5629 && !aura->IsPassive() // don't remove passive auras
5630 && (aurApp->IsPositive() || !aura->GetSpellInfo()->HasAttribute(SPELL_ATTR3_ALLOW_AURA_WHILE_DEAD))) || // not negative death persistent auras
5631 aura->GetSpellInfo()->HasAttribute(SPELL_ATTR5_REMOVE_ENTERING_ARENA); // special marker, always remove
5632 });
5633}
@ SPELL_ATTR5_REMOVE_ENTERING_ARENA
Definition SharedDefines.h:557
@ SPELL_ATTR3_ALLOW_AURA_WHILE_DEAD
Definition SharedDefines.h:501
@ SPELL_ATTR4_ALLOW_ENETRING_ARENA
Definition SharedDefines.h:539
bool IsPositive() const
Definition SpellAuras.h:68

References AuraApplication::GetBase(), Aura::GetSpellInfo(), SpellInfo::HasAttribute(), Aura::IsPassive(), AuraApplication::IsPositive(), RemoveAppliedAuras(), SPELL_ATTR3_ALLOW_AURA_WHILE_DEAD, SPELL_ATTR4_ALLOW_ENETRING_ARENA, and SPELL_ATTR5_REMOVE_ENTERING_ARENA.

Referenced by Battleground::AddPlayer().

◆ RemoveAura() [1/4]

void Unit::RemoveAura ( Aura aur,
AuraRemoveMode  mode = AURA_REMOVE_BY_DEFAULT 
)
5123{
5124 if (aura->IsRemoved())
5125 return;
5126 if (AuraApplication* aurApp = aura->GetApplicationOfTarget(GetGUID()))
5127 RemoveAura(aurApp, mode);
5128}

References Aura::GetApplicationOfTarget(), Object::GetGUID(), Aura::IsRemoved(), and RemoveAura().

◆ RemoveAura() [2/4]

void Unit::RemoveAura ( AuraApplication aurApp,
AuraRemoveMode  mode = AURA_REMOVE_BY_DEFAULT 
)
5080{
5081 // we've special situation here, RemoveAura called while during aura removal
5082 // this kind of call is needed only when aura effect removal handler
5083 // or event triggered by it expects to remove
5084 // not yet removed effects of an aura
5085 if (aurApp->GetRemoveMode())
5086 {
5087 // remove remaining effects of an aura
5088 for (uint8 itr = 0; itr < MAX_SPELL_EFFECTS; ++itr)
5089 {
5090 if (aurApp->HasEffect(itr))
5091 aurApp->_HandleEffect(itr, false);
5092 }
5093 return;
5094 }
5095 // no need to remove
5096 if (aurApp->GetBase()->GetApplicationOfTarget(GetGUID()) != aurApp || aurApp->GetBase()->IsRemoved())
5097 return;
5098
5099 uint32 spellId = aurApp->GetBase()->GetId();
5100 AuraApplicationMapBoundsNonConst range = m_appliedAuras.equal_range(spellId);
5101
5102 for (AuraApplicationMap::iterator iter = range.first; iter != range.second;)
5103 {
5104 if (aurApp == iter->second)
5105 {
5106 // Prevent Arena Preparation aura from being removed by player actions
5107 // It's an invisibility spell so any interaction/spell cast etc. removes it.
5108 // Should only be removed by the arena script, once the match starts.
5110 {
5111 return;
5112 }
5113
5114 RemoveAura(iter, mode);
5115 return;
5116 }
5117 else
5118 ++iter;
5119 }
5120}
@ SPELL_AURA_ARENA_PREPARATION
Definition SpellAuraDefines.h:278

References AuraApplication::_HandleEffect(), Aura::GetApplicationOfTarget(), AuraApplication::GetBase(), Object::GetGUID(), Aura::GetId(), AuraApplication::GetRemoveMode(), AuraApplication::HasEffect(), Aura::HasEffectType(), Aura::IsRemoved(), m_appliedAuras, MAX_SPELL_EFFECTS, RemoveAura(), and SPELL_AURA_ARENA_PREPARATION.

◆ RemoveAura() [3/4]

void Unit::RemoveAura ( AuraApplicationMap::iterator &  i,
AuraRemoveMode  mode = AURA_REMOVE_BY_DEFAULT 
)
5050{
5051 AuraApplication* aurApp = i->second;
5052 // Do not remove aura which is already being removed
5053 if (aurApp->GetRemoveMode())
5054 return;
5055 Aura* aura = aurApp->GetBase();
5056 _UnapplyAura(i, mode);
5057 // Remove aura - for Area and Target auras
5058 if (aura->GetOwner() == this)
5059 aura->Remove(mode);
5060}

References _UnapplyAura(), AuraApplication::GetBase(), Aura::GetOwner(), AuraApplication::GetRemoveMode(), and Aura::Remove().

Referenced by boss_marli::_schedulePhaseTroll(), Player::CheckAreaExploreAndOutdoor(), boss_headless_horseman::DamageTaken(), npc_power_spark::DamageTaken(), boss_viscidus::DamageTaken(), boss_thorim::DamageTaken(), boss_victor_nefarius::DoAction(), npc_harrison_jones::DoAction(), brann_bronzebeard::brann_bronzebeardAI::DoAction(), npc_pilgrims_bounty_chair::DoAction(), boss_paletress::boss_paletressAI::DoAction(), boss_vezax::DoAction(), boss_yoggsaron::DoAction(), boss_yoggsaron_crusher_tentacle::DoAction(), boss_yoggsaron_corruptor_tentacle::DoAction(), boss_yoggsaron_constrictor_tentacle::DoAction(), boss_ichoron::DoExplodeCompleted(), Player::DuelComplete(), Spell::EffectDispelMechanic(), Spell::EffectForceCast(), Spell::EffectHeal(), Spell::EffectSummonPet(), Spell::EffectTriggerSpell(), npc_thrall_bfu::npc_thrall_bfuAI::EnterEvadeMode(), GetDiseasesByCaster(), AuraEffect::HandleAuraLinked(), AuraEffect::HandleAuraModSchoolImmunity(), Aura::HandleAuraSpecificMods(), AuraEffect::HandleBreakableCCAuraProc(), deserter_commandscript::HandleDeserterRemove(), deserter_commandscript::HandleDeserterRemoveAll(), spell_valanar_kinetic_bomb_aura::HandleDummyTick(), spell_warl_demonic_circle_summon::HandleDummyTick(), spell_bloodspore_haze::HandleEffectHit(), spell_midsummer_ribbon_pole::HandleEffectPeriodic(), spell_dk_improved_blood_presence::HandleEffectRemove(), spell_dk_improved_frost_presence::HandleEffectRemove(), spell_dk_improved_unholy_presence::HandleEffectRemove(), spell_dk_presence::HandleEffectRemove(), spell_pal_blessing_of_sanctuary::HandleEffectRemove(), spell_sha_chain_heal::HandleHeal(), spell_sindragosa_frost_breath::HandleInfusion(), spell_warl_demonic_circle_summon::HandleRemove(), spell_putricide_eat_ooze::HandleScript(), spell_handover_reins::HandleScriptEffect(), AuraEffect::HandleShapeshiftBoosts(), IsHighestExclusiveAuraEffect(), npc_zulian_prowler::npc_zulian_prowlerAI::JustEngagedWith(), boss_jaraxxus::boss_jaraxxusAI::JustEngagedWith(), npc_pos_deathwhisper_necrolyte::npc_pos_deathwhisper_necrolyteAI::JustEngagedWith(), npc_ulduar_snow_mound::MoveInLineOfSight(), boss_loken::OnAuraRemove(), spell_blood_queen_vampiric_bite::OnCast(), npc_toc5_player_vehicle::npc_toc5_player_vehicleAI::OnCharmed(), npc_essence_of_twin::OnGossipHello(), spell_love_is_in_the_air_romantic_picnic::OnPeriodic(), spell_yogg_saron_empowered_aura::OnPeriodic(), npc_thrall_bfu::OnQuestReward(), spell_malygos_vortex_visual::OnRemove(), npc_toc5_player_vehicle::npc_toc5_player_vehicleAI::PassengerBoarded(), npc_eastvale_peasent::PathEndReached(), BattlefieldWG::PromotePlayer(), RemoveAppliedAuras(), RemoveAppliedAuras(), RemoveAreaAurasDueToLeaveWorld(), RemoveAura(), RemoveAura(), RemoveAura(), RemoveAurasByShapeShift(), RemoveAurasByType(), RemoveAurasDueToItemSpell(), RemoveAurasDueToSpell(), RemoveAurasWithAttribute(), RemoveAurasWithFamily(), RemoveAurasWithInterruptFlags(), RemoveAurasWithMechanic(), RemoveMovementImpairingAuras(), BattlegroundIC::RemovePlayer(), BattlegroundMap::RemovePlayerFromMap(), boss_bjarngrim::RemoveStanceAura(), boss_gyth::Reset(), boss_pyroguard_emberseer::Reset(), boss_victor_nefarius::Reset(), boss_marli::Reset(), boss_garfrost::boss_garfrostAI::Reset(), boss_varos::boss_varosAI::Reset(), NPCStaveQuestAI::ResetState(), boss_sartharion::SendLavaWaves(), boss_anomalus::SetData(), boss_hodir::SmallIcicles(), boss_malygos::SpellHit(), npc_ulduar_iron_construct::SpellHit(), npc_nelson::npc_nelsonAI::SpellHit(), boss_headless_horseman::SpellHit(), boss_viscidus::SpellHit(), spell_pal_hand_of_sacrifice_aura::Split(), boss_sartharion_shadron::SummonedCreatureDies(), boss_pyroguard_emberseer::UpdateAI(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::UpdateAI(), boss_arlokk::boss_arlokkAI::UpdateAI(), boss_headless_horseman::UpdateAI(), npc_onyxian_lair_guard::UpdateAI(), boss_viscidus::UpdateAI(), boss_anubarak_trial::boss_anubarak_trialAI::UpdateAI(), npc_nerubian_burrower::npc_nerubian_burrowerAI::UpdateAI(), npc_snobold_vassal::npc_snobold_vassalAI::UpdateAI(), npc_hor_leader_second::npc_hor_leader_secondAI::UpdateAI(), npc_pos_leader::npc_pos_leaderAI::UpdateAI(), boss_kelthuzad::boss_kelthuzadAI::UpdateAI(), boss_stormcaller_brundir::UpdateAI(), npc_thorims_hammer::UpdateAI(), boss_freya::UpdateAI(), boss_freya_elder_brightleaf::UpdateAI(), npc_ulduar_iron_construct::UpdateAI(), boss_razorscale::UpdateAI(), boss_yoggsaron_sara::UpdateAI(), boss_ingvar_the_plunderer::UpdateAI(), Spell::UpdateChanneledTargetList(), npc_hor_lich_king::WallCompleted(), and boss_bjarngrim::WaypointReached().

◆ RemoveAura() [4/4]

void Unit::RemoveAura ( uint32  spellId,
ObjectGuid  casterGUID = ObjectGuid::Empty,
uint8  reqEffMask = 0,
AuraRemoveMode  removeMode = AURA_REMOVE_BY_DEFAULT 
)
5063{
5064 AuraApplicationMapBoundsNonConst range = m_appliedAuras.equal_range(spellId);
5065 for (AuraApplicationMap::iterator iter = range.first; iter != range.second;)
5066 {
5067 Aura const* aura = iter->second->GetBase();
5068 if (((aura->GetEffectMask() & reqEffMask) == reqEffMask)
5069 && (!caster || aura->GetCasterGUID() == caster))
5070 {
5071 RemoveAura(iter, removeMode);
5072 return;
5073 }
5074 else
5075 ++iter;
5076 }
5077}

References Aura::GetCasterGUID(), Aura::GetEffectMask(), m_appliedAuras, and RemoveAura().

◆ RemoveAuraFromStack()

void Unit::RemoveAuraFromStack ( uint32  spellId,
ObjectGuid  casterGUID = ObjectGuid::Empty,
AuraRemoveMode  removeMode = AURA_REMOVE_BY_DEFAULT 
)
5199{
5200 AuraMapBoundsNonConst range = m_ownedAuras.equal_range(spellId);
5201 for (AuraMap::iterator iter = range.first; iter != range.second;)
5202 {
5203 Aura* aura = iter->second;
5204 if ((aura->GetType() == UNIT_AURA_TYPE)
5205 && (!casterGUID || aura->GetCasterGUID() == casterGUID))
5206 {
5207 aura->ModStackAmount(-1, removeMode);
5208 return;
5209 }
5210 else
5211 ++iter;
5212 }
5213}
@ UNIT_AURA_TYPE
Definition SpellAuraDefines.h:385
bool ModStackAmount(int32 num, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT, bool periodicReset=false)
Definition SpellAuras.cpp:963
AuraObjectType GetType() const
Definition SpellAuras.cpp:420

References Aura::GetCasterGUID(), Aura::GetType(), m_ownedAuras, Aura::ModStackAmount(), and UNIT_AURA_TYPE.

Referenced by Spell::EffectSchoolDMG(), spell_putricide_gaseous_bloat_aura::HandleExtraEffect(), spell_oculus_evasive_maneuvers_aura::HandleProc(), spell_sha_tidal_force_dummy::HandleProc(), spell_dk_scent_of_blood::HandleProc(), spell_item_restless_strength::HandleProc(), spell_item_unstable_power::HandleProc(), spell_item_brittle_armor::HandleScript(), spell_item_mercurial_shield::HandleScript(), spell_item_deadly_precision::HandleStackDrop(), boss_selin_fireheart::JustEngagedWith(), boss_viscidus::SpellHit(), and Battlefield::TeamCastSpell().

◆ RemoveAurasByShapeShift()

void Unit::RemoveAurasByShapeShift ( )
5551{
5552 uint64 mechanic_mask = (1ULL << MECHANIC_SNARE) | (1ULL << MECHANIC_ROOT);
5553 for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end();)
5554 {
5555 Aura const* aura = iter->second->GetBase();
5556 if ((aura->GetSpellInfo()->GetAllEffectsMechanicMask() & mechanic_mask) &&
5558 {
5559 RemoveAura(iter);
5560 continue;
5561 }
5562 ++iter;
5563 }
5564}
@ MECHANIC_ROOT
Definition SharedDefines.h:1320
@ SPELLFAMILY_WARRIOR
Definition SharedDefines.h:3788
@ SPELL_ATTR0_CU_AURA_CC
Definition SpellInfo.h:182
uint64 GetAllEffectsMechanicMask() const
Definition SpellInfo.cpp:1899

References SpellInfo::GetAllEffectsMechanicMask(), Aura::GetSpellInfo(), SpellInfo::HasAttribute(), m_appliedAuras, MECHANIC_ROOT, MECHANIC_SNARE, RemoveAura(), SPELL_ATTR0_CU_AURA_CC, SPELLFAMILY_WARRIOR, SpellInfo::SpellFamilyFlags, and SpellInfo::SpellFamilyName.

Referenced by AuraEffect::HandleAuraModShapeshift().

◆ RemoveAurasByType()

void Unit::RemoveAurasByType ( AuraType  auraType,
ObjectGuid  casterGUID = ObjectGuid::Empty,
Aura except = nullptr,
bool  negative = true,
bool  positive = true 
)
5391{
5392 // simple check if list is empty
5393 if (m_modAuras[auraType].empty())
5394 return;
5395
5396 for (AuraEffectList::iterator iter = m_modAuras[auraType].begin(); iter != m_modAuras[auraType].end();)
5397 {
5398 Aura* aura = (*iter)->GetBase();
5400
5401 ++iter;
5402 if (aura != except && (!casterGUID || aura->GetCasterGUID() == casterGUID)
5403 && ((negative && !aurApp->IsPositive()) || (positive && aurApp->IsPositive())))
5404 {
5405 uint32 removedAuras = m_removedAurasCount;
5406 RemoveAura(aurApp);
5407 if (m_removedAurasCount > removedAuras)
5408 iter = m_modAuras[auraType].begin();
5409 }
5410 }
5411}

References Aura::GetApplicationOfTarget(), Aura::GetCasterGUID(), Object::GetGUID(), AuraApplication::IsPositive(), m_modAuras, m_removedAurasCount, and RemoveAura().

Referenced by _EnterVehicle(), Spell::_handle_finish_phase(), Player::ActivateTaxiPathTo(), Attack(), npc_toc5_player_vehicle::npc_toc5_player_vehicleAI::BeforeSpellClick(), spell_gen_summon_tournament_mount::CheckIfLanceEquipped(), ClearComboPoints(), Player::ContinueTaxiFlight(), boss_kologarn_arms::DamageTaken(), Spell::DoSpellHitOnUnit(), Spell::EffectPowerBurn(), Spell::EffectTriggerSpell(), BattlegroundWS::EventPlayerClickedOnFlag(), ExitVehicle(), WorldSession::HandleAuctionHelloOpcode(), WorldSession::HandleAuctionListBidderItems(), WorldSession::HandleAuctionListItems(), WorldSession::HandleAuctionListOwnerItems(), WorldSession::HandleAuctionPlaceBid(), WorldSession::HandleAuctionRemoveItem(), WorldSession::HandleAuctionSellItem(), spell_warl_seduction::HandleAuraApply(), AuraEffect::HandleAuraModShapeshift(), AuraEffect::HandleAuraModStateImmunity(), AuraEffect::HandleAuraMounted(), AuraEffect::HandleAuraTransform(), WorldSession::HandleBankerActivateOpcode(), WorldSession::HandleBinderActivateOpcode(), WorldSession::HandleBuybackItem(), WorldSession::HandleBuyStableSlot(), WorldSession::HandleCancelMountAuraOpcode(), misc_commandscript::HandleDismountCommand(), spell_item_reindeer_transformation::HandleDummy(), spell_item_brewfest_mount_transformation::HandleDummy(), spell_rog_vanish::HandleEffect(), spell_hydross_mark_of_hydross::HandleEffectApply(), WorldSession::HandleGossipSelectOptionOpcode(), WorldSession::HandleListStabledPetsOpcode(), WorldSession::HandleMoveWorldportAck(), spell_oculus_rider_aura::HandleOnEffectApply(), spell_algalon_remove_phase_aura::HandlePeriodic(), WorldSession::HandlePetitionBuyOpcode(), spell_mage_glyph_of_icy_veins::HandleProc(), spell_mage_glyph_of_polymorph::HandleProc(), WorldSession::HandleQuestgiverHelloOpcode(), WorldSession::HandleRepairItemOpcode(), WorldSession::HandleSaveGuildEmblemOpcode(), spell_gen_mine_sweeper::HandleSchoolDMG(), WorldSession::HandleSellItemOpcode(), WorldSession::HandleSpiritHealerActivateOpcode(), WorldSession::HandleStablePet(), WorldSession::HandleStableSwapPet(), WorldSession::HandleTabardVendorActivateOpcode(), WorldSession::HandleTalentWipeConfirmOpcode(), WorldSession::HandleTaxiQueryAvailableNodes(), WorldSession::HandleTrainerBuySpellOpcode(), WorldSession::HandleUnstablePet(), boss_gurtogg_bloodboil::JustEngagedWith(), Player::LeaveBattleground(), Player::LoadFromDB(), WorldSession::LogoutPlayer(), spell_gen_aura_service_uniform::OnApply(), Player::ProcessDelayedOperations(), npc_dancing_flames::npc_dancing_flamesAI::ReceiveEmote(), Vehicle::RemoveAllPassengers(), RemoveBindSightAuras(), RemoveCharmAuras(), Battleground::RemovePlayerAtLeave(), WorldSession::SendDoFlight(), WorldSession::SendListInventory(), Player::SendLoot(), WorldSession::SendTrainerList(), SetCharmedBy(), Player::StopCastingCharm(), Player::TeleportTo(), npc_ulduar_vx001::UpdateAI(), GameObject::Use(), and npc_tapoke_slim_jahn::npc_tapoke_slim_jahnAI::WaypointReached().

◆ RemoveAurasDueToItemSpell()

void Unit::RemoveAurasDueToItemSpell ( uint32  spellId,
ObjectGuid  castItemGuid 
)
5366{
5367 for (AuraApplicationMap::iterator iter = m_appliedAuras.lower_bound(spellId); iter != m_appliedAuras.upper_bound(spellId);)
5368 {
5369 if (iter->second->GetBase()->GetCastItemGUID() == castItemGuid)
5370 {
5371 RemoveAura(iter);
5372 iter = m_appliedAuras.lower_bound(spellId);
5373 }
5374 else
5375 ++iter;
5376 }
5377
5378 for (AuraMap::iterator iter = m_ownedAuras.lower_bound(spellId); iter != m_ownedAuras.upper_bound(spellId);)
5379 {
5380 if (iter->second->GetCastItemGUID() == castItemGuid)
5381 {
5383 iter = m_ownedAuras.lower_bound(spellId);
5384 }
5385 else
5386 ++iter;
5387 }
5388}

References AURA_REMOVE_BY_DEFAULT, m_appliedAuras, m_ownedAuras, RemoveAura(), and RemoveOwnedAura().

Referenced by Player::ApplyEnchantment(), and Player::ApplyEquipSpell().

◆ RemoveAurasDueToSpell()

void Unit::RemoveAurasDueToSpell ( uint32  spellId,
ObjectGuid  casterGUID = ObjectGuid::Empty,
uint8  reqEffMask = 0,
AuraRemoveMode  removeMode = AURA_REMOVE_BY_DEFAULT 
)
5183{
5184 for (AuraApplicationMap::iterator iter = m_appliedAuras.lower_bound(spellId); iter != m_appliedAuras.upper_bound(spellId);)
5185 {
5186 Aura const* aura = iter->second->GetBase();
5187 if (((aura->GetEffectMask() & reqEffMask) == reqEffMask)
5188 && (!casterGUID || aura->GetCasterGUID() == casterGUID))
5189 {
5190 RemoveAura(iter, removeMode);
5191 iter = m_appliedAuras.lower_bound(spellId);
5192 }
5193 else
5194 ++iter;
5195 }
5196}

References Aura::GetCasterGUID(), Aura::GetEffectMask(), m_appliedAuras, and RemoveAura().

Referenced by Spell::_cast(), Player::_removeTalentAurasAndSpells(), Player::ActivateSpec(), Vehicle::AddPassenger(), spell_commander_sarannis_arcane_devastation::AfterApply(), spell_dru_feral_swiftness::AfterRemove(), spell_dru_savage_roar_aura::AfterRemove(), spell_dru_survival_instincts_aura::AfterRemove(), spell_item_thrallmar_and_honor_hold_favor::AfterRemove(), Player::ApplyEquipSpell(), boss_hakkar::boss_hakkarAI::ApplyHakkarPowerStacks(), Player::ApplyItemObtainSpells(), boss_buru::ChaseNewVictim(), spell_eredar_twins_handle_touch::CheckCast(), boss_volazj::CheckPhaseMinions(), spell_botanica_shift_form_aura::CheckProc(), spell_mage_burning_determination::CheckProc(), boss_isle_of_conquest::boss_isle_of_conquestAI::CheckRageBuff(), Player::CleanupAfterTaxiFlight(), AuraEffect::CleanupTriggeredSpells(), npc_kerlonian::npc_kerlonianAI::ClearSleeping(), spell_ruby_sanctum_rallying_shout::CountAllies(), boss_baron_geddon::DamageTaken(), boss_apothecary_hummel::boss_apothecary_hummelAI::DamageTaken(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::DamageTaken(), npc_wild_wyrm::DamageTaken(), boss_essence_of_suffering::boss_essence_of_sufferingAI::DamageTaken(), boss_buru::DamageTaken(), boss_shade_of_aran::DamageTaken(), boss_leotheras_the_blind::DemonTime(), WorldState::DispelAdalsSongOfBattle(), WorldState::DispelMagtheridonTeam(), npc_drakonid_spawner::DoAction(), npc_twilight_volunteer::DoAction(), boss_prince_keleseth_icc::boss_prince_kelesethAI::DoAction(), boss_prince_taldaram_icc::boss_prince_taldaramAI::DoAction(), boss_prince_valanar_icc::boss_prince_valanarAI::DoAction(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::DoAction(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::DoAction(), npc_frozen_core::DoAction(), npc_massive_jormungar::npc_massive_jormungarAI::DoAction(), npc_ferocious_rhino::npc_ferocious_rhinoAI::DoAction(), npc_ravenous_furbolg::npc_ravenous_furbolgAI::DoAction(), npc_frenzied_worgen::npc_frenzied_worgenAI::DoAction(), boss_ambassador_hellmaw::DoAction(), boss_illidan_stormrage::DoAction(), npc_maiev_illidan::DoAction(), npc_pet_gen_argent_pony_bridle::DoAction(), boss_alar::DoDiveBomb(), InstanceScript::DoRemoveAurasDueToSpellOnPlayers(), Spell::DoTriggersOnSpellHit(), Spell::EffectApplyGlyph(), Spell::EffectHeal(), Spell::EffectRemoveAura(), Spell::EffectSchoolDMG(), npc_giant_claw_tentacle::Emerge(), boss_ahune::Emerge(), boss_zuljin::EnterPhase(), BattlegroundWS::EventPlayerCapturedFlag(), BattlegroundEY::EventPlayerCapturedFlag(), BattlegroundEY::EventPlayerDroppedFlag(), BattlegroundWS::EventPlayerDroppedFlag(), npc_unworthy_initiate::npc_unworthy_initiateAI::EventStart(), BattleExperienceEvent::Execute(), SendEncounterUnit::Execute(), FrostBombExplosion::Execute(), AuraRemoveEvent::Execute(), boss_kaelthas::ExecuteMiddleEvent(), spell_sindragosa_ice_tomb_trap_aura::ExtraRemoveEffect(), spell_mother_shahraz_fatal_attraction_dummy::FilterTargets(), spell_warr_improved_spell_reflection_trigger::FilterTargets(), lfg::LFGMgr::FinishDungeon(), spell_dru_berserk::HandleAfterCast(), spell_capacitus_polarity_charge_aura::HandleAfterRemove(), spell_amanitar_remove_mushroom_power::HandleApply(), BattlegroundDS::HandleAreaTrigger(), OutdoorPvPSI::HandleAreaTrigger(), AuraEffect::HandleAuraControlVehicle(), AuraEffect::HandleAuraDummy(), AuraEffect::HandleAuraModShapeshift(), Aura::HandleAuraSpecificMods(), spell_moroes_vanish::HandleDummy(), spell_fight_fire_bomber::HandleDummy(), spell_q13007_iron_colossus::HandleDummy(), spell_pilgrims_bounty_feast_on_generic::HandleDummy(), spell_ahn_kahet_swarmer_aura::HandleDummy(), spell_halion_twilight_division::HandleDummy(), spell_putricide_ooze_eruption_searcher::HandleDummy(), spell_warhead_detonate::HandleDummy(), spell_dru_starfall_dummy::HandleDummy(), spell_q12683_take_sputum_sample::HandleDummy(), spell_magtheridon_shadow_grasp_visual::HandleDummyRemove(), spell_shadowfang_keep_forsaken_skills_aura::HandleDummyTick(), spell_oculus_soar_aura::HandleEffectPeriodic(), spell_q12730_quenching_mist::HandleEffectPeriodic(), spell_rog_prey_on_the_weak::HandleEffectPeriodic(), spell_brewfest_main_ram_buff::HandleEffectPeriodic(), spell_mc_play_dead_aura::HandleEffectRemove(), spell_reliquary_of_souls_aura_of_suffering_aura::HandleEffectRemove(), spell_serpentshrine_cavern_coilfang_water::HandleEffectRemove(), spell_q10769_dissension_amongst_the_ranks_aura::HandleEffectRemove(), boss_ragnaros::HandleEmerge(), spell_midsummer_fling_torch::HandleFinish(), gm_commandscript::HandleGMVisibleCommand(), group_commandscript::HandleGroupReviveCommand(), spell_oculus_drake_flag_aura::HandleOnEffectApply(), spell_oculus_rider_aura::HandleOnEffectRemove(), spell_transitus_shield_beam_aura::HandleOnEffectRemove(), OPvPCapturePointZM_Graveyard::HandleOpenGo(), spell_hadronox_summon_periodic_aura::HandlePeriodic(), spell_algalon_phase_punch_aura::HandlePeriodic(), spell_algalon_remove_phase_aura::HandlePeriodic(), spell_serpentshrine_cavern_coilfang_water::HandlePeriodic(), AuraEffect::HandlePeriodicDamageAurasTick(), AuraEffect::HandlePeriodicTriggerSpellAuraTick(), WorldState::HandlePlayerLeaveZone(), OutdoorPvPEP::HandlePlayerLeaveZone(), OutdoorPvPHP::HandlePlayerLeaveZone(), OutdoorPvPNA::HandlePlayerLeaveZone(), OutdoorPvPSI::HandlePlayerLeaveZone(), OutdoorPvPTF::HandlePlayerLeaveZone(), OutdoorPvPZM::HandlePlayerLeaveZone(), spell_gen_consume::HandleProc(), spell_pri_t4_4p_bonus::HandleProc(), spell_item_blood_draining_enchant::HandleProc(), spell_warr_extra_proc::HandleProc(), spell_item_trinket_stack< StackSpell, TriggerSpell >::HandleProc(), spell_item_tiny_abomination_in_a_jar::HandleProc(), spell_item_tiny_abomination_in_a_jar_hero::HandleProc(), spell_icc_harvest_blight_specimen::HandleQuestComplete(), spell_felmyst_fog_of_corruption_charm_aura::HandleRemove(), spell_kiljaeden_vengeance_of_the_blue_flight_aura::HandleRemove(), spell_dru_enrage::HandleRemove(), spell_pal_divine_intervention::HandleRemove(), spell_pal_avenging_wrath::HandleRemove(), spell_rog_killing_spree_aura::HandleRemove(), spell_warr_vigilance::HandleRemove(), WorldSession::HandleRemoveGlyph(), spell_najentus_hurl_spine::HandleSchoolDamage(), spell_putricide_clear_aura_effect_value::HandleScript(), spell_the_lich_king_jump::HandleScript(), spell_the_lich_king_jump_remove_aura::HandleScript(), spell_icc_harvest_blight_specimen::HandleScript(), spell_festergut_pungent_blight::HandleScript(), spell_festergut_gastric_bloat::HandleScript(), spell_putricide_unbound_plague::HandleScript(), spell_putricide_eat_ooze::HandleScript(), spell_rotface_little_ooze_combine::HandleScript(), spell_rotface_large_ooze_combine::HandleScript(), spell_rotface_large_ooze_buff_combine::HandleScript(), spell_eject_passenger_wild_wyrm::HandleScript(), spell_q10651_q10692_book_of_fel_names::HandleScript(), spell_q12641_death_comes_from_on_high_recall_eye::HandleScriptEffect(), spell_halion_clear_debuffs::HandleScriptEffect(), spell_q12823_remove_collapsing_cave_aura::HandleScriptEffect(), spell_illidari_council_judgement::HandleScriptEffect(), AuraEffect::HandleShapeshiftBoosts(), ArenaSpectator::HandleSpectatorWatchCommand(), AuraEffect::HandleSpiritOfRedemption(), spell_capacitus_polarity_charge::HandleTargets(), misc_commandscript::HandleUnAuraCommand(), misc_commandscript::HandleUnFreezeCommand(), boss_valithria_dreamwalker::boss_valithria_dreamwalkerAI::HealReceived(), npc_underbog_mushroom::InitializeAI(), npc_demon_chain::JustDied(), boss_azuregos::boss_azuregosAI::JustDied(), npc_q24545_wretched_ghoul::npc_q24545_wretched_ghoulAI::JustDied(), boss_zuljin::JustEngagedWith(), boss_doomwalker::JustEngagedWith(), boss_gruul::JustEngagedWith(), boss_pathaleon_the_calculator::JustEngagedWith(), npc_pet_shaman_fire_elemental::JustEngagedWith(), boss_the_lich_king::boss_the_lich_kingAI::JustEngagedWith(), boss_jeklik::JustEngagedWith(), boss_buru::JustEngagedWith(), boss_bronjahm::JustEngagedWith(), boss_gal_darah::JustEngagedWith(), boss_prince_keleseth_icc::boss_prince_kelesethAI::JustEngagedWith(), boss_prince_taldaram_icc::boss_prince_taldaramAI::JustEngagedWith(), boss_prince_valanar_icc::boss_prince_valanarAI::JustEngagedWith(), boss_deathbringer_saurfang::boss_deathbringer_saurfangAI::JustEngagedWith(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::JustEngagedWith(), boss_gurtogg_bloodboil::JustEngagedWith(), boss_hydross_the_unstable::JustReachedHome(), boss_tenris_mirkblood::KilledUnit(), boss_felblood_kaelthas::LapseAction(), npc_crystalline_frayer::LeaveSeedPod(), boss_garfrost::boss_garfrostAI::MovementInform(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::MovementInform(), boss_felmyst::MovementInform(), boss_shade_of_akama::MovementInform(), boss_kaelthas::MovementInform(), boss_jedoga_shadowseeker::MovementInform(), npc_ball_of_flame::npc_ball_of_flameAI::MovementInform(), npc_image_of_medivh::npc_image_of_medivhAI::NextStep(), spell_halion_twilight_realm_aura::OnApply(), spell_halion_leave_twilight_realm_aura::OnApply(), spell_systems_shutdown_aura::OnApply(), npc_chesspiece::OnCharmed(), spell_claw_rage_aura::OnPeriodic(), spell_yogg_saron_empowered_aura::OnPeriodic(), spell_gen_curse_of_pain::OnPeriodic(), spell_illidan_demon_transform2_aura::OnPeriodic(), BattlefieldWG::OnPlayerLeaveZone(), lfg::LFGPlayerScript::OnPlayerMapChanged(), MidsummerPlayerScript::OnPlayerUpdateZone(), boss_shade_of_aran::OnPowerUpdate(), spell_halion_combustion_consumption_aura::OnRemove(), spell_halion_leave_twilight_realm_aura::OnRemove(), spell_algalon_phase_punch_aura::OnRemove(), spell_load_into_catapult_aura::OnRemove(), spell_dru_barkskin::OnRemove(), spell_gen_damage_reduction_aura::OnRemove(), spell_hun_ascpect_of_the_viper::OnRemove(), spell_hun_viper_attack_speed::OnRemove(), spell_item_with_mount_speed::OnRemove(), spell_item_desperate_defense::OnRemove(), spell_item_shadowmourne::OnRemove(), spell_item_shadowmourne_soul_fragment::OnRemove(), spell_item_trinket_stack< StackSpell, TriggerSpell >::OnRemove(), spell_item_power_circle::OnRemove(), spell_item_tiny_abomination_in_a_jar::OnRemove(), spell_item_tiny_abomination_in_a_jar_hero::OnRemove(), spell_mage_combustion_proc::OnRemove(), spell_mage_fingers_of_frost::OnRemove(), spell_item_shadowmourne_soul_fragment::OnStackChange(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::PassengerBoarded(), npc_strangulate_vehicle::npc_strangulate_vehicleAI::PassengerBoarded(), npc_wild_wyrm::PassengerBoarded(), npc_preparations_for_war_vehicle::PassengerBoarded(), boss_jeklik::PathEndReached(), spell_quest_test_flight_charging::PerformKick(), spell_rog_stealth_buff_tracker< RemoveSpellId >::PeriodicTick(), SmartScript::ProcessAction(), ProcessTerrainStatusUpdate(), spell_gen_defend::RefreshVisualShields(), RemoveAurasDueToSpellByDispel(), BattlefieldWG::RemoveAurasFromPlayer(), boss_festergut::boss_festergutAI::RemoveBlight(), spell_warl_health_funnel::RemoveEffect(), RemoveGameObject(), spell_mage_frostfire_bolt::RemovePermafrost(), BattlegroundAV::RemovePlayer(), Battleground::RemovePlayerFromResurrectQueue(), boss_keristrasza::RemovePrison(), Pet::removeSpell(), Player::removeSpell(), spell_gen_eject_all_passengers::RemoveVehicleAuras(), spell_gen_defend::RemoveVisualShields(), boss_malchezaar::Reset(), boss_baroness_anastari::boss_baroness_anastariAI::Reset(), boss_kiljaeden::Reset(), boss_twilight_corrupter::Reset(), boss_nalorakk::Reset(), boss_mandokir::boss_mandokirAI::Reset(), boss_thekal::Reset(), boss_cthun::Reset(), boss_viscidus::Reset(), boss_halion::boss_halionAI::Reset(), boss_deathbringer_saurfang::boss_deathbringer_saurfangAI::Reset(), boss_leotheras_the_blind::Reset(), boss_lethon::boss_lethonAI::Reset(), boss_taerar::boss_taerarAI::Reset(), boss_high_botanist_freywinn::ResumeEncounter(), Player::ResurrectPlayer(), npc_finklestein::npc_finklesteinAI::RightClickCauldron(), boss_magtheridon::ScheduleCombatEvents(), boss_supremus::SchedulePhase(), boss_laj::ScheduleTasks(), Player::SendQuestUpdate(), npc_corrupted_totem::SetAura(), OPvPCapturePointZM_Graveyard::SetBeaconState(), boss_hydross_the_unstable::SetForm(), Player::SetGMVisible(), boss_mandokir::boss_mandokirAI::SetGUID(), Player::SetIsSpectator(), SetModelVisible(), Player::SetSkill(), npc_aged_dying_ancient_kodo::sGossipHello(), npc_akama_shade::sGossipSelect(), boss_viscidus::SoftReset(), boss_ossirian::SpellHit(), npc_omen::npc_omenAI::SpellHit(), npc_troll_volunteer::npc_troll_volunteerAI::SpellHit(), boss_sister_svalna::boss_sister_svalnaAI::SpellHit(), boss_faerlina::boss_faerlinaAI::SpellHit(), advisor_baseAI::SpellHit(), boss_anub_arak::SpellHitTarget(), boss_moorabi::boss_moorabiAI::SpellHitTarget(), boss_ahune::Submerge(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::SummonedCreatureDespawn(), boss_drakkari_colossus::boss_drakkari_colossusAI::SummonedCreatureDespawn(), boss_cthun::SummonedCreatureDies(), npc_kiljaeden_controller::SummonedCreatureDies(), boss_anub_arak::SummonedCreatureDies(), boss_anzu::SummonedCreatureDies(), boss_viscidus::SummonedCreatureDies(), boss_terestian_illhoof::SummonKilrek(), Player::SummonPet(), boss_netherspite::SwitchToBanishPhase(), boss_netherspite::SwitchToPortalPhase(), Totem::UnSummon(), spell_black_temple_spell_absorption_aura::Update(), boss_ragnaros::UpdateAI(), boss_renataki::boss_renatakiAI::UpdateAI(), boss_moam::UpdateAI(), npc_draenei_survivor::npc_draenei_survivorAI::UpdateAI(), boss_volazj::UpdateAI(), boss_anub_arak::UpdateAI(), npc_frost_sphere::npc_frost_sphereAI::UpdateAI(), boss_jormungarAI::UpdateAI(), npc_hor_leader::npc_hor_leaderAI::UpdateAI(), boss_drakkari_colossus::boss_drakkari_colossusAI::UpdateAI(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::UpdateAI(), npc_cult_fanatic::npc_cult_fanaticAI::UpdateAI(), npc_cult_adherent::npc_cult_adherentAI::UpdateAI(), boss_professor_putricide::boss_professor_putricideAI::UpdateAI(), npc_tirion_fordring_tft::npc_tirion_fordringAI::UpdateAI(), npc_crok_scourgebane::npc_crok_scourgebaneAI::UpdateAI(), boss_thaddius_summon::boss_thaddius_summonAI::UpdateAI(), boss_algalon_the_observer::UpdateAI(), boss_freya_lifebinder::UpdateAI(), boss_freya_healthy_spore::UpdateAI(), boss_mimiron::UpdateAI(), boss_palehoof::boss_palehoofAI::UpdateAI(), boss_skadi_grauf::boss_skadi_graufAI::UpdateAI(), boss_anzu::UpdateAI(), npc_pet_gen_soul_trader_beacon::UpdateAI(), npc_pet_gen_argent_pony_bridle::UpdateAI(), npc_pet_darting_hatchling::UpdateAI(), boss_taerar::boss_taerarAI::UpdateAI(), and Player::UpdateTitansGrip().

◆ RemoveAurasDueToSpellByDispel()

void Unit::RemoveAurasDueToSpellByDispel ( uint32  spellId,
uint32  dispellerSpellId,
ObjectGuid  casterGUID,
Unit dispeller,
uint8  chargesRemoved = 1 
)
5216{
5217 AuraMapBoundsNonConst range = m_ownedAuras.equal_range(spellId);
5218 for (AuraMap::iterator iter = range.first; iter != range.second;)
5219 {
5220 Aura* aura = iter->second;
5221 if (aura->GetCasterGUID() == casterGUID)
5222 {
5223 DispelInfo dispelInfo(dispeller, dispellerSpellId, chargesRemoved);
5224
5225 // Call OnDispel hook on AuraScript
5226 aura->CallScriptDispel(&dispelInfo);
5227
5229 aura->ModCharges(-dispelInfo.GetRemovedCharges(), AURA_REMOVE_BY_ENEMY_SPELL);
5230 else
5231 aura->ModStackAmount(-dispelInfo.GetRemovedCharges(), AURA_REMOVE_BY_ENEMY_SPELL);
5232
5233 // Call AfterDispel hook on AuraScript
5234 aura->CallScriptAfterDispel(&dispelInfo);
5235
5236 switch (aura->GetSpellInfo()->SpellFamilyName)
5237 {
5238 case SPELLFAMILY_HUNTER:
5239 {
5240 // Noxious Stings
5241 if (aura->GetSpellInfo()->SpellFamilyFlags[1] & 0x1000)
5242 {
5243 if (Unit* caster = aura->GetCaster())
5244 {
5245 if (AuraEffect* aureff = caster->GetAuraEffect(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS, SPELLFAMILY_HUNTER, 3521, 1))
5246 {
5247 if (Aura* noxious = Aura::TryCreate(aura->GetSpellInfo(), aura->GetEffectMask(), dispeller, caster))
5248 {
5249 noxious->SetDuration(aura->GetDuration() * aureff->GetAmount() / 100);
5250 if (aura->GetUnitOwner())
5251 if (const std::vector<int32>* spell_triggered = sSpellMgr->GetSpellLinked(-int32(aura->GetId())))
5252 for (std::vector<int32>::const_iterator itr = spell_triggered->begin(); itr != spell_triggered->end(); ++itr)
5253 aura->GetUnitOwner()->RemoveAurasDueToSpell(*itr);
5254 }
5255 }
5256 }
5257 }
5258 break;
5259 }
5261 {
5262 // Icy Clutch, remove with Frost Fever
5263 if (aura->GetSpellInfo()->SpellFamilyFlags[1] & 0x4000000)
5264 {
5265 if (AuraEffect* aureff = GetAuraEffect(SPELL_AURA_MOD_DECREASE_SPEED, SPELLFAMILY_DEATHKNIGHT, 0, 0x40000, 0, casterGUID))
5266 RemoveAurasDueToSpell(aureff->GetId());
5267 }
5268 }
5269 default:
5270 break;
5271 }
5272 return;
5273 }
5274 else
5275 ++iter;
5276 }
5277}
void CallScriptDispel(DispelInfo *dispelInfo)
Definition SpellAuras.cpp:2382
Unit * GetUnitOwner() const
Definition SpellAuras.h:108
static Aura * TryCreate(SpellInfo const *spellproto, uint8 effMask, WorldObject *owner, Unit *caster, int32 *baseAmount=nullptr, Item *castItem=nullptr, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemGUID=ObjectGuid::Empty)
Definition SpellAuras.cpp:291
bool ModCharges(int32 num, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition SpellAuras.cpp:915
void CallScriptAfterDispel(DispelInfo *dispelInfo)
Definition SpellAuras.cpp:2395
Definition Unit.h:302

References AURA_REMOVE_BY_ENEMY_SPELL, Aura::CallScriptAfterDispel(), Aura::CallScriptDispel(), GetAuraEffect(), Aura::GetCaster(), Aura::GetCasterGUID(), Aura::GetDuration(), Aura::GetEffectMask(), Aura::GetId(), DispelInfo::GetRemovedCharges(), Aura::GetSpellInfo(), Aura::GetUnitOwner(), SpellInfo::HasAttribute(), m_ownedAuras, Aura::ModCharges(), Aura::ModStackAmount(), RemoveAurasDueToSpell(), SPELL_ATTR7_DISPEL_REMOVES_CHARGES, SPELL_AURA_MOD_DECREASE_SPEED, SPELL_AURA_OVERRIDE_CLASS_SCRIPTS, SPELLFAMILY_DEATHKNIGHT, SPELLFAMILY_HUNTER, SpellInfo::SpellFamilyFlags, SpellInfo::SpellFamilyName, sSpellMgr, and Aura::TryCreate().

Referenced by Spell::EffectDispel().

◆ RemoveAurasDueToSpellBySteal()

void Unit::RemoveAurasDueToSpellBySteal ( uint32  spellId,
ObjectGuid  casterGUID,
Unit stealer 
)
5280{
5281 AuraMapBoundsNonConst range = m_ownedAuras.equal_range(spellId);
5282 for (AuraMap::iterator iter = range.first; iter != range.second;)
5283 {
5284 Aura* aura = iter->second;
5285 if (aura->GetCasterGUID() == casterGUID)
5286 {
5287 int32 damage[MAX_SPELL_EFFECTS];
5288 int32 baseDamage[MAX_SPELL_EFFECTS];
5289 uint8 effMask = 0;
5290 uint8 recalculateMask = 0;
5291 Unit* caster = aura->GetCaster();
5292 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
5293 {
5294 if (aura->GetEffect(i))
5295 {
5296 baseDamage[i] = aura->GetEffect(i)->GetBaseAmount();
5297 damage[i] = aura->GetEffect(i)->GetAmount();
5298 effMask |= (1 << i);
5299 if (aura->GetEffect(i)->CanBeRecalculated())
5300 recalculateMask |= (1 << i);
5301 }
5302 else
5303 {
5304 baseDamage[i] = 0;
5305 damage[i] = 0;
5306 }
5307 }
5308
5310 // Cast duration to unsigned to prevent permanent aura's such as Righteous Fury being permanently added to caster
5311 uint32 dur = std::min(2u * MINUTE * IN_MILLISECONDS, uint32(aura->GetDuration()));
5312
5313 if (Aura* oldAura = stealer->GetAura(aura->GetId(), aura->GetCasterGUID()))
5314 {
5315 if (stealCharge)
5316 oldAura->ModCharges(1);
5317 else
5318 oldAura->ModStackAmount(1);
5319 oldAura->SetDuration(int32(dur));
5320 }
5321 else
5322 {
5323 // single target state must be removed before aura creation to preserve existing single target aura
5324 if (aura->IsSingleTarget())
5325 aura->UnregisterSingleTarget();
5326
5327 // Xinef: if stealer has same aura
5328 Aura* curAura = stealer->GetAura(aura->GetId());
5329 if (!curAura || (!curAura->IsPermanent() && curAura->GetDuration() < (int32)dur))
5330 if (Aura* newAura = Aura::TryRefreshStackOrCreate(aura->GetSpellInfo(), effMask, stealer, nullptr, &baseDamage[0], nullptr, stealer->GetGUID()))
5331 {
5332 // created aura must not be single target aura,, so stealer won't loose it on recast
5333 if (newAura->IsSingleTarget())
5334 {
5335 newAura->UnregisterSingleTarget();
5336 // bring back single target aura status to the old aura
5337 aura->SetIsSingleTarget(true);
5338 caster->GetSingleCastAuras().push_back(aura);
5339 }
5340 // FIXME: using aura->GetMaxDuration() maybe not blizzlike but it fixes stealing of spells like Innervate
5341 newAura->SetLoadedState(aura->GetMaxDuration(), int32(dur), stealCharge ? 1 : aura->GetCharges(), 1, recalculateMask, &damage[0]);
5342
5343 // Reset periodic timers so stolen HoTs tick properly
5344 // For stolen auras we need fresh tick counters since no ticks have occurred yet
5345 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
5346 if (AuraEffect* aurEff = newAura->GetEffect(i))
5347 aurEff->ResetPeriodic(true);
5348
5349 newAura->ApplyForTargets();
5350 }
5351 }
5352
5353 if (stealCharge)
5355 else
5357
5358 return;
5359 }
5360 else
5361 ++iter;
5362 }
5363}
bool CanBeRecalculated() const
Definition SpellAuraEffects.h:78
int32 GetBaseAmount() const
Definition SpellAuraEffects.h:57
void UnregisterSingleTarget()
Definition SpellAuras.cpp:1113
AuraEffect * GetEffect(uint8 effIndex) const
Definition SpellAuras.h:176
bool IsPermanent() const
Definition SpellAuras.h:139

References AURA_REMOVE_BY_ENEMY_SPELL, AuraEffect::CanBeRecalculated(), AuraEffect::GetAmount(), GetAura(), AuraEffect::GetBaseAmount(), Aura::GetCaster(), Aura::GetCasterGUID(), Aura::GetCharges(), Aura::GetDuration(), Aura::GetEffect(), Object::GetGUID(), Aura::GetId(), Aura::GetMaxDuration(), GetSingleCastAuras(), Aura::GetSpellInfo(), SpellInfo::HasAttribute(), IN_MILLISECONDS, Aura::IsPermanent(), Aura::IsSingleTarget(), m_ownedAuras, MAX_SPELL_EFFECTS, MINUTE, Aura::ModCharges(), Aura::ModStackAmount(), Aura::SetIsSingleTarget(), SPELL_ATTR7_DISPEL_REMOVES_CHARGES, Aura::TryRefreshStackOrCreate(), and Aura::UnregisterSingleTarget().

Referenced by Spell::EffectStealBeneficialBuff().

◆ RemoveAurasWithAttribute()

void Unit::RemoveAurasWithAttribute ( uint32  flags)
5414{
5415 for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end();)
5416 {
5417 SpellInfo const* spell = iter->second->GetBase()->GetSpellInfo();
5418 if (spell->Attributes & flags)
5419 RemoveAura(iter);
5420 else
5421 ++iter;
5422 }
5423}

References SpellInfo::Attributes, m_appliedAuras, and RemoveAura().

◆ RemoveAurasWithFamily()

void Unit::RemoveAurasWithFamily ( SpellFamilyNames  family,
uint32  familyFlag1,
uint32  familyFlag2,
uint32  familyFlag3,
ObjectGuid  casterGUID 
)
5497{
5498 for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end();)
5499 {
5500 Aura const* aura = iter->second->GetBase();
5501 if (!casterGUID || aura->GetCasterGUID() == casterGUID)
5502 {
5503 SpellInfo const* spell = aura->GetSpellInfo();
5504 if (spell->SpellFamilyName == uint32(family) && spell->SpellFamilyFlags.HasFlag(familyFlag1, familyFlag2, familyFlag3))
5505 {
5506 RemoveAura(iter);
5507 continue;
5508 }
5509 }
5510 ++iter;
5511 }
5512}

References Aura::GetCasterGUID(), Aura::GetSpellInfo(), flag96::HasFlag(), m_appliedAuras, RemoveAura(), SpellInfo::SpellFamilyFlags, and SpellInfo::SpellFamilyName.

Referenced by spell_warl_demonic_aegis::HandleAuraApply(), and Aura::HandleAuraSpecificMods().

◆ RemoveAurasWithInterruptFlags()

void Unit::RemoveAurasWithInterruptFlags ( uint32  flag,
uint32  except = 0,
bool  isAutoshot = false 
)
5462{
5463 if (!(m_interruptMask & flag))
5464 return;
5465
5466 // interrupt auras
5467 for (AuraApplicationList::iterator iter = m_interruptableAuras.begin(); iter != m_interruptableAuras.end();)
5468 {
5469 Aura* aura = (*iter)->GetBase();
5470 ++iter;
5471 if ((aura->GetSpellInfo()->AuraInterruptFlags & flag) && (!except || aura->GetId() != except))
5472 {
5473 uint32 removedAuras = m_removedAurasCount;
5474 RemoveAura(aura);
5475 if (m_removedAurasCount > removedAuras + 1)
5476 iter = m_interruptableAuras.begin();
5477 }
5478 }
5479
5480 // interrupt channeled spell
5482 {
5483 if (spell->getState() == SPELL_STATE_CASTING && (spell->m_spellInfo->ChannelInterruptFlags & flag) && spell->m_spellInfo->Id != except)
5484 {
5485 // Do not interrupt if auto shot
5486 if (!(isAutoshot && spell->m_spellInfo->HasAttribute(SPELL_ATTR2_DO_NOT_RESET_COMBAT_TIMERS)))
5487 {
5488 InterruptNonMeleeSpells(false, spell->m_spellInfo->Id);
5489 }
5490 }
5491 }
5492
5494}

References SpellInfo::AuraInterruptFlags, CURRENT_CHANNELED_SPELL, Aura::GetId(), Aura::GetSpellInfo(), InterruptNonMeleeSpells(), m_currentSpells, m_interruptableAuras, m_interruptMask, m_removedAurasCount, RemoveAura(), SPELL_ATTR2_DO_NOT_RESET_COMBAT_TIMERS, SPELL_STATE_CASTING, and UpdateInterruptMask().

Referenced by _EnterVehicle(), AtExitCombat(), AttackerStateUpdate(), AtTargetAttacked(), ClearInPetCombat(), DealDamage(), Dismount(), Spell::DoAllEffectOnTarget(), Spell::DoSpellHitOnUnit(), BattlegroundWS::EventPlayerCapturedFlag(), BattlegroundEY::EventPlayerCapturedFlag(), BattlegroundEY::EventPlayerClickedOnFlag(), BattlegroundWS::EventPlayerClickedOnFlag(), BattlegroundAB::EventPlayerClickedOnFlag(), spell_rog_killing_spree::FilterTargets(), AuraEffect::HandleAuraModSchoolImmunity(), AuraEffect::HandleFeignDeath(), WorldSession::HandleGossipHelloOpcode(), AuraEffect::HandleModInvisibility(), AuraEffect::HandleModStealth(), AuraEffect::HandleModUnattackable(), WorldSession::HandleMoverRelocation(), AuraEffect::HandlePeriodicManaLeechAuraTick(), AuraEffect::HandlePhase(), Player::LoadFromDB(), WorldSession::LogoutPlayer(), Mount(), Spell::prepare(), WorldSession::ProcessMovementInfo(), ProcessTerrainStatusUpdate(), Player::SetInWater(), SetStandState(), Player::TeleportTo(), and UpdatePosition().

◆ RemoveAurasWithMechanic()

void Unit::RemoveAurasWithMechanic ( uint64  mechanic_mask,
AuraRemoveMode  removemode = AURA_REMOVE_BY_DEFAULT,
uint32  except = 0 
)
5534{
5535 for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end();)
5536 {
5537 Aura const* aura = iter->second->GetBase();
5538 if (!except || aura->GetId() != except)
5539 {
5540 if (aura->GetSpellInfo()->GetAllEffectsMechanicMask() & mechanic_mask)
5541 {
5542 RemoveAura(iter, removemode);
5543 continue;
5544 }
5545 }
5546 ++iter;
5547 }
5548}

References SpellInfo::GetAllEffectsMechanicMask(), Aura::GetId(), Aura::GetSpellInfo(), m_appliedAuras, and RemoveAura().

Referenced by SpellInfo::ApplyAllSpellImmunitiesTo(), spell_rog_vanish_purge::HandleRootRemove(), spell_rog_vanish_purge::HandleSnareRemove(), and RemoveMovementImpairingAuras().

◆ RemoveBindSightAuras()

void Unit::RemoveBindSightAuras ( )
8313{
8315}
@ SPELL_AURA_BIND_SIGHT
Definition SpellAuraDefines.h:64

References RemoveAurasByType(), and SPELL_AURA_BIND_SIGHT.

Referenced by RemoveFromWorld().

◆ RemoveCharmAuras()

void Unit::RemoveCharmAuras ( )

◆ RemoveCharmedBy()

void Unit::RemoveCharmedBy ( Unit charmer)
14815{
14816 if (!IsCharmed())
14817 return;
14818
14819 if (!charmer)
14820 charmer = GetCharmer();
14821 if (charmer != GetCharmer()) // one aura overrides another?
14822 {
14823 // LOG_FATAL("entities.unit", "Unit::RemoveCharmedBy: this: {} true charmer: {} false charmer: {}",
14824 // GetGUID().ToString(), GetCharmerGUID().ToString(), charmer->GetGUID().ToString());
14825 // ABORT();
14826 return;
14827 }
14828
14829 CharmType type;
14831 type = CHARM_TYPE_POSSESS;
14832 else if (charmer && charmer->IsOnVehicle(this))
14833 type = CHARM_TYPE_VEHICLE;
14834 else
14835 type = CHARM_TYPE_CHARM;
14836
14837 if (_oldFactionId)
14838 {
14840 _oldFactionId = 0;
14841 }
14842 else
14844
14845 CastStop();
14846 AttackStop();
14847
14848 // xinef: update speed after charming
14849 UpdateSpeed(MOVE_RUN, false);
14850
14851 // xinef: do not break any controlled motion slot
14852 if (GetMotionMaster()->GetMotionSlotType(MOTION_SLOT_CONTROLLED) == NULL_MOTION_TYPE)
14853 {
14854 StopMoving();
14856 }
14857 // xinef: if we have any controlled movement, clear active and idle only
14858 else
14860
14862
14863 // xinef: remove stunned flag if owner was mounted
14866
14867 // If charmer still exists
14868 if (!charmer)
14869 return;
14870
14871 ASSERT(type != CHARM_TYPE_POSSESS || charmer->IsPlayer());
14872 ASSERT(type != CHARM_TYPE_VEHICLE || (IsCreature() && IsVehicle()));
14873
14874 // Vehicle should not attack its passenger after he exits the seat
14875 if (type != CHARM_TYPE_VEHICLE)
14876 LastCharmerGUID = charmer->GetGUID();
14877
14878 charmer->SetCharm(this, false);
14879
14881
14882 // End stale combat refs between now-friendly units after faction restore
14884
14885 Player* playerCharmer = charmer->ToPlayer();
14886 if (playerCharmer)
14887 {
14888 switch (type)
14889 {
14890 case CHARM_TYPE_VEHICLE:
14891 playerCharmer->SetClientControl(this, false);
14892 playerCharmer->SetClientControl(charmer, true); // verified
14895 break;
14896 case CHARM_TYPE_POSSESS:
14897 playerCharmer->SetClientControl(this, false);
14898 playerCharmer->SetClientControl(charmer, true); // verified
14903 break;
14904 case CHARM_TYPE_CHARM:
14906 {
14908 if (cinfo && cinfo->type == CREATURE_TYPE_DEMON)
14909 {
14911 if (GetCharmInfo())
14912 GetCharmInfo()->SetPetNumber(0, true);
14913 else
14914 LOG_ERROR("entities.unit", "Aura::HandleModCharm: target={} has a charm aura but no charm info!", GetGUID().ToString());
14915 }
14916 }
14917 break;
14918 default:
14919 break;
14920 }
14921 }
14922
14923 if (Player* player = ToPlayer())
14924 {
14925 sScriptMgr->AnticheatSetUnderACKmount(player);
14926 }
14927
14928 // xinef: restore threat
14929 for (CharmThreatMap::const_iterator itr = _charmThreatInfo.begin(); itr != _charmThreatInfo.end(); ++itr)
14930 {
14931 if (Unit* target = ObjectAccessor::GetUnit(*this, itr->first))
14932 if (!IsFriendlyTo(target))
14933 AddThreat(target, itr->second);
14934 }
14935
14936 _charmThreatInfo.clear();
14937
14938 if (Creature* creature = ToCreature())
14939 {
14940 // Vehicle should not attack its passenger after he exists the seat
14941 if (type != CHARM_TYPE_VEHICLE && charmer->IsAlive() && !charmer->IsFriendlyTo(creature))
14942 if (Attack(charmer, true))
14943 GetMotionMaster()->MoveChase(charmer);
14944
14945 // Creature will restore its old AI on next update
14946 if (creature->AI())
14947 creature->AI()->OnCharmed(false);
14948
14949 // Xinef: Remove movement flag flying
14951 }
14952 else
14953 ToPlayer()->SetClientControl(this, true); // verified
14954
14955 // a guardian should always have charminfo
14956 if (playerCharmer && this != charmer->GetFirstControlled())
14957 playerCharmer->SendRemoveControlBar();
14958
14959 // xinef: Always delete charm info (restores react state)
14960 if (IsPlayer() || (IsCreature() && !ToCreature()->IsGuardian()))
14962}
CharmType
Definition CharmInfo.h:44
@ CHARM_TYPE_CHARM
Definition CharmInfo.h:45
@ CHARM_TYPE_POSSESS
Definition CharmInfo.h:46
@ CHARM_TYPE_VEHICLE
Definition CharmInfo.h:47
@ MOTION_SLOT_ACTIVE
Definition MotionMaster.h:65
@ NULL_MOTION_TYPE
Definition MotionMaster.h:59
@ CREATURE_TYPE_DEMON
Definition SharedDefines.h:2624
@ CLASS_WARLOCK
Definition SharedDefines.h:134
@ CLASS_CONTEXT_PET_CHARM
Definition UnitDefines.h:244
@ UNIT_STATE_NO_ENVIRONMENT_UPD
Definition UnitDefines.h:201
@ MOVE_RUN
Definition UnitDefines.h:357
void RevalidateCombat()
Definition CombatManager.cpp:343
void InitDefault()
Definition MotionMaster.cpp:89
void MovementExpired(bool reset=true)
Definition MotionMaster.h:206
void SetByteValue(uint16 index, uint8 offset, uint8 value)
Definition Object.cpp:739
void SendRemoveControlBar()
Definition Player.cpp:9727
void SetClientControl(Unit *target, bool allowMove, bool packetOnly=false)
Definition Player.cpp:12869
void DeleteCharmInfo()
Definition Unit.cpp:12683
void RestoreFaction()
Definition Unit.cpp:14964
void SetCharm(Unit *target, bool apply)
Definition Unit.cpp:7986
void StopAttackingInvalidTarget()
Definition Unit.cpp:16137
void CastStop(uint32 except_spellid=0, bool withInstant=true)
Interrupt the unit cast for all the current spells.
Definition Unit.cpp:1368
bool Attack(Unit *victim, bool meleeAttack)
Definition Unit.cpp:7300
CharmThreatMap _charmThreatInfo
Definition Unit.h:2198
Unit * GetFirstControlled() const
Definition Unit.cpp:8191
void RemoveUnitMovementFlag(uint32 f)
Definition Unit.h:773
void UpdateSpeed(UnitMoveType mtype, bool forced)
Definition Unit.cpp:11131
ObjectGuid LastCharmerGUID
Definition Unit.h:2097
uint32 unit_class
Definition CreatureData.h:213

References _charmThreatInfo, _oldFactionId, AddThreat(), ASSERT, Attack(), AttackStop(), CastStop(), CHARM_TYPE_CHARM, CHARM_TYPE_POSSESS, CHARM_TYPE_VEHICLE, CLASS_CONTEXT_PET_CHARM, CLASS_WARLOCK, ClearUnitState(), CREATURE_TYPE_DEMON, DeleteCharmInfo(), GetCharmer(), GetCharmInfo(), GetCombatManager(), Creature::GetCreatureTemplate(), GetFirstControlled(), Object::GetGUID(), Object::GetGUID(), GetMotionMaster(), ObjectAccessor::GetUnit(), HasUnitState(), MotionMaster::InitDefault(), IsAlive(), IsCharmed(), IsClass(), Object::IsCreature(), IsFriendlyTo(), IsGuardian(), IsOnVehicle(), Object::IsPlayer(), IsVehicle(), LastCharmerGUID, LOG_ERROR, MOTION_SLOT_ACTIVE, MOTION_SLOT_CONTROLLED, MOVE_RUN, MotionMaster::MoveChase(), MotionMaster::MovementExpired(), MotionMaster::MovementExpiredOnSlot(), MOVEMENTFLAG_FLYING, NULL_MOTION_TYPE, RemoveUnitFlag(), RemoveUnitMovementFlag(), RestoreFaction(), CombatManager::RevalidateCombat(), Player::SendRemoveControlBar(), Object::SetByteValue(), SetCharm(), Player::SetClientControl(), SetFaction(), CharmInfo::SetPetNumber(), sScriptMgr, StopAttackingInvalidTarget(), StopMoving(), Object::ToCreature(), Object::ToPlayer(), Position::ToString(), CreatureTemplate::type, CreatureTemplate::unit_class, UNIT_FIELD_BYTES_0, UNIT_FLAG_DISABLE_MOVE, UNIT_FLAG_POSSESSED, UNIT_FLAG_STUNNED, UNIT_STATE_NO_ENVIRONMENT_UPD, UNIT_STATE_POSSESSED, UNIT_STATE_STUNNED, and UpdateSpeed().

Referenced by AuraEffect::HandleCharmConvert(), AuraEffect::HandleModCharm(), AuraEffect::HandleModPossess(), AuraEffect::HandleModPossessPet(), npc_chesspiece::JustDied(), Puppet::RemoveFromWorld(), Vehicle::RemovePassenger(), and npc_chesspiece::sGossipSelect().

◆ RemoveComboPointHolder()

void Unit::RemoveComboPointHolder ( Unit unit)
inline
1024{ m_ComboPointHolders.erase(unit); }

References m_ComboPointHolders.

Referenced by AddComboPoints(), and ClearComboPoints().

◆ RemoveDynObject()

bool Unit::RemoveDynObject ( uint32  spellId)
6539{
6540 if (m_dynObj.empty())
6541 return false;
6542
6543 bool result = false;
6544 for (DynObjectList::iterator i = m_dynObj.begin(); i != m_dynObj.end();)
6545 {
6546 DynamicObject* dynObj = *i;
6547 if (dynObj->GetSpellId() == spellId)
6548 {
6549 dynObj->Remove();
6550 i = m_dynObj.begin();
6551 result = true;
6552 }
6553 else
6554 ++i;
6555 }
6556
6557 return result;
6558}
void Remove()
Definition DynamicObject.cpp:180

References DynamicObject::GetSpellId(), m_dynObj, and DynamicObject::Remove().

Referenced by Spell::cancel(), Spell::EffectAddFarsight(), and spell_item_shifting_naaru_silver::OnBaseRemove().

◆ RemoveEvadeAuras()

void Unit::RemoveEvadeAuras ( )
5724{
5726 return;
5727
5728 for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end();)
5729 {
5730 Aura const* aura = iter->second->GetBase();
5731 SpellInfo const* spellInfo = aura->GetSpellInfo();
5733 || spellInfo->HasAura(SPELL_AURA_CLONE_CASTER) || (aura->IsPassive() && GetOwnerGUID().IsPlayer()))
5734 ++iter;
5735 else
5737 }
5738
5739 for (AuraMap::iterator iter = m_ownedAuras.begin(); iter != m_ownedAuras.end();)
5740 {
5741 Aura* aura = iter->second;
5742 SpellInfo const* spellInfo = aura->GetSpellInfo();
5744 || spellInfo->HasAura(SPELL_AURA_CLONE_CASTER) || (aura->IsPassive() && GetOwnerGUID().IsPlayer()))
5745 ++iter;
5746 else
5748 }
5749}
@ SPELL_ATTR1_AURA_STAYS_AFTER_COMBAT
Definition SharedDefines.h:432
@ SPELL_ATTR0_CU_IGNORE_EVADE
Definition SpellInfo.h:188

References _UnapplyAura(), AURA_REMOVE_BY_DEFAULT, GetOwnerGUID(), Aura::GetSpellInfo(), SpellInfo::HasAttribute(), SpellInfo::HasAura(), IsCharmedOwnedByPlayerOrPlayer(), Aura::IsPassive(), ObjectGuid::IsPlayer(), m_appliedAuras, m_ownedAuras, RemoveOwnedAura(), SPELL_ATTR0_CU_IGNORE_EVADE, SPELL_ATTR1_AURA_STAYS_AFTER_COMBAT, SPELL_AURA_CLONE_CASTER, and SPELL_AURA_CONTROL_VEHICLE.

Referenced by CreatureAI::_EnterEvadeMode(), and npc_pos_freed_slave::npc_pos_freed_slaveAI::EnterEvadeMode().

◆ RemoveExtraUnitMovementFlag()

void Unit::RemoveExtraUnitMovementFlag ( uint16  f)
inline

◆ RemoveFromWorld()

void Unit::RemoveFromWorld ( )
overridevirtual

Reimplemented from Object.

12561{
12562 // cleanup
12563 ASSERT(GetGUID());
12564
12565 if (IsInWorld())
12566 {
12568 if (IsVehicle())
12570
12574
12577
12578 ExitVehicle(); // Remove applied auras with SPELL_AURA_CONTROL_VEHICLE
12581
12583
12585
12586 if (GetCharmerGUID())
12587 {
12588 LOG_FATAL("entities.unit", "Unit {} has charmer guid when removed from world", GetEntry());
12589 ABORT();
12590 }
12591
12592 if (Unit* owner = GetOwner())
12593 {
12594 if (owner->m_Controlled.find(this) != owner->m_Controlled.end())
12595 {
12597 owner->SetMinion((Minion*)this, false);
12598 LOG_INFO("entities.unit", "Unit {} is in controlled list of {} when removed from world", GetEntry(), owner->GetEntry());
12599 //ABORT();
12600 }
12601 }
12602
12605 }
12606}
void RemoveNotOwnSingleTargetAuras()
Definition Unit.cpp:5425
void RemoveAllFollowers()
Definition Unit.cpp:5599
void UnsummonAllTotems(bool onDeath=false)
Definition Unit.cpp:8325
void RemoveAllDynObjects()
Definition Unit.cpp:6560
void RemoveAreaAurasDueToLeaveWorld()
Definition Unit.cpp:5566
void RemoveBindSightAuras()
Definition Unit.cpp:8312
void RemoveAllControlled(bool onDeath=false)
Definition Unit.cpp:8202
void RemoveFromWorld() override
Definition Object.cpp:1224

References ABORT, ASSERT, ExitVehicle(), GetCharmerGUID(), Object::GetEntry(), Object::GetGUID(), GetOwner(), HasUnitTypeMask(), Object::IsInWorld(), IsVehicle(), LOG_FATAL, LOG_INFO, m_duringRemoveFromWorld, RemoveAllControlled(), RemoveAllDynObjects(), RemoveAllFollowers(), RemoveAllGameObjects(), RemoveAreaAurasDueToLeaveWorld(), RemoveBindSightAuras(), RemoveCharmAuras(), WorldObject::RemoveFromWorld(), RemoveNotOwnSingleTargetAuras(), RemoveVehicleKit(), UNIT_MASK_GUARDIAN, UNIT_MASK_MINION, and UnsummonAllTotems().

Referenced by CleanupBeforeRemoveFromMap(), Creature::RemoveFromWorld(), Pet::RemoveFromWorld(), and Player::RemoveFromWorld().

◆ RemoveGameObject() [1/2]

void Unit::RemoveGameObject ( GameObject gameObj,
bool  del 
)
6595{
6596 if (!gameObj || gameObj->GetOwnerGUID() != GetGUID())
6597 return;
6598
6600
6601 for (uint8 i = 0; i < MAX_GAMEOBJECT_SLOT; ++i)
6602 {
6603 if (m_ObjectSlot[i] == gameObj->GetGUID())
6604 {
6605 m_ObjectSlot[i].Clear();
6606 break;
6607 }
6608 }
6609
6610 // GO created by some spell
6611 if (uint32 spellid = gameObj->GetSpellId())
6612 {
6613 RemoveAurasDueToSpell(spellid);
6614
6615 if (IsPlayer())
6616 {
6617 SpellInfo const* createBySpell = sSpellMgr->GetSpellInfo(spellid);
6618 // Need activate spell use for owner
6619 if (createBySpell && createBySpell->IsCooldownStartedOnEvent())
6620 // note: item based cooldowns and cooldown spell mods with charges ignored (unknown existing cases)
6621 ToPlayer()->SendCooldownEvent(createBySpell);
6622 }
6623 }
6624
6625 m_gameObj.remove(gameObj->GetGUID());
6626
6627 if (del)
6628 {
6629 gameObj->SetRespawnTime(0);
6630 gameObj->Delete();
6631 }
6632}
void Clear()
Definition ObjectGuid.h:138
void SendCooldownEvent(SpellInfo const *spellInfo, uint32 itemId=0, Spell *spell=nullptr, bool setCooldown=true)
Definition Player.cpp:11041

References ObjectGuid::Clear(), GameObject::Delete(), ObjectGuid::Empty, Object::GetGUID(), Object::GetGUID(), GameObject::GetOwnerGUID(), GameObject::GetSpellId(), SpellInfo::IsCooldownStartedOnEvent(), Object::IsPlayer(), m_gameObj, m_ObjectSlot, MAX_GAMEOBJECT_SLOT, RemoveAurasDueToSpell(), Player::SendCooldownEvent(), GameObject::SetOwnerGUID(), GameObject::SetRespawnTime(), sSpellMgr, and Object::ToPlayer().

Referenced by Spell::cancel(), Spell::EffectSummonObject(), gobject_commandscript::HandleGameObjectDeleteCommand(), spell_warl_demonic_circle_summon::HandleRemove(), boss_kologarn::JustDied(), npc_ulduar_harpoonfirestate::SetData(), and GameObject::Update().

◆ RemoveGameObject() [2/2]

void Unit::RemoveGameObject ( uint32  spellid,
bool  del 
)
6635{
6636 if (m_gameObj.empty())
6637 return;
6638
6639 for (GameObjectList::iterator itr = m_gameObj.begin(); itr != m_gameObj.end();)
6640 {
6641 if (GameObject* go = ObjectAccessor::GetGameObject(*this, *itr))
6642 {
6643 if (spellid > 0 && go->GetSpellId() != spellid)
6644 {
6645 ++itr;
6646 continue;
6647 }
6648
6649 go->SetOwnerGUID(ObjectGuid::Empty);
6650 if (del)
6651 {
6652 go->SetRespawnTime(0);
6653 go->Delete();
6654 }
6655 }
6656 m_gameObj.erase(itr++);
6657 }
6658}

References ObjectGuid::Empty, ObjectAccessor::GetGameObject(), and m_gameObj.

◆ RemoveMovementImpairingAuras()

void Unit::RemoveMovementImpairingAuras ( bool  withRoot)
5515{
5516 if (withRoot)
5518
5519 // Snares
5520 for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end();)
5521 {
5522 Aura const* aura = iter->second->GetBase();
5524 {
5525 RemoveAura(iter);
5526 continue;
5527 }
5528
5529 ++iter;
5530 }
5531}
bool HasEffectMechanic(Mechanics mechanic) const
Definition SpellInfo.cpp:893
void RemoveAurasWithMechanic(uint64 mechanic_mask, AuraRemoveMode removemode=AURA_REMOVE_BY_DEFAULT, uint32 except=0)
Definition Unit.cpp:5533

References Aura::GetSpellInfo(), SpellInfo::HasEffectMechanic(), m_appliedAuras, SpellInfo::Mechanic, MECHANIC_ROOT, MECHANIC_SNARE, RemoveAura(), and RemoveAurasWithMechanic().

Referenced by Spell::CheckCast(), Spell::EffectTriggerSpell(), spell_pri_improved_shadowform::HandleProc(), spell_pri_imp_shadowform::HandleProc(), and spell_gen_remove_impairing_auras::HandleScriptEffect().

◆ RemoveNotOwnSingleTargetAuras()

void Unit::RemoveNotOwnSingleTargetAuras ( )
5426{
5427 // single target auras from other casters
5428 // Iterate m_ownedAuras - aura is marked as single target in Unit::AddAura (and pushed to m_ownedAuras).
5429 // m_appliedAuras will NOT contain the aura before first Unit::Update after adding it to m_ownedAuras.
5430 // Quickly removing such an aura will lead to it not being unregistered from caster's single cast auras container
5431 // leading to assertion failures if the aura was cast on a player that can
5432 // (and is changing map at the point where this function is called).
5433 // Such situation occurs when player is logging in inside an instance and fails the entry check for any reason.
5434 // The aura that was loaded from db (indirectly, via linked casts) gets removed before it has a chance
5435 // to register in m_appliedAuras
5436 for (AuraMap::iterator iter = m_ownedAuras.begin(); iter != m_ownedAuras.end();)
5437 {
5438 Aura const* aura = iter->second;
5439
5440 if (aura->GetCasterGUID() != GetGUID() && aura->IsSingleTarget())
5441 RemoveOwnedAura(iter);
5442 else
5443 ++iter;
5444 }
5445
5446 // single target auras at other targets
5447 AuraList& scAuras = GetSingleCastAuras();
5448 for (AuraList::iterator iter = scAuras.begin(); iter != scAuras.end();)
5449 {
5450 Aura* aura = *iter;
5451 if (aura->GetUnitOwner() != this)
5452 {
5453 aura->Remove();
5454 iter = scAuras.begin();
5455 }
5456 else
5457 ++iter;
5458 }
5459}

References Aura::GetCasterGUID(), Object::GetGUID(), GetSingleCastAuras(), Aura::GetUnitOwner(), Aura::IsSingleTarget(), m_ownedAuras, Aura::Remove(), and RemoveOwnedAura().

Referenced by RemoveFromWorld().

◆ RemoveNpcFlag()

void Unit::RemoveNpcFlag ( NPCFlags  flags)
inline
765{ RemoveFlag(UNIT_NPC_FLAGS, flags); }

References Object::RemoveFlag(), and UNIT_NPC_FLAGS.

Referenced by Vehicle::AddPassenger(), boss_vaelastrasz::BeginSpeech(), npc_riggle_bassbait::npc_riggle_bassbaitAI::CheckTournamentState(), npc_fos_leader::npc_fos_leaderAI::DoAction(), npc_thrall_warchief::npc_thrall_warchiefAI::DoAction(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::DoAction(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::DoAction(), npc_akama_illidan::DoAction(), npc_battle_at_valhalas::npc_battle_at_valhalasAI::EndBattle(), spell_q12096_q12092_dummy::HandleDummy(), npc_hyjal_jaina::hyjalJainaAI::IsSummonedBy(), npc_precious::npc_preciousAI::JustEngagedWith(), npc_artorius::npc_artoriusAI::JustEngagedWith(), npc_simone::npc_simoneAI::JustEngagedWith(), npc_nelson::npc_nelsonAI::JustEngagedWith(), npc_franklin::npc_franklinAI::JustEngagedWith(), npc_akama_illidan::JustReachedHome(), npc_fos_leader_second::npc_fos_leader_secondAI::npc_fos_leader_secondAI(), npc_pos_leader_second::npc_pos_leader_secondAI::npc_pos_leader_secondAI(), npc_chesspiece::OnCharmed(), instance_halls_of_reflection::OnCreatureCreate(), instance_serpent_shrine::instance_serpentshrine_cavern_InstanceMapScript::OnCreatureCreate(), npc_announcer_toc10::OnGossipHello(), npc_hyjal_jaina::OnGossipSelect(), npc_hyjal_thrall::OnGossipSelect(), npc_zulaman_hostage::OnGossipSelect(), npc_arthas::OnGossipSelect(), npc_ulduar_keeper::OnGossipSelect(), npc_announcer_toc5::OnGossipSelect(), npc_announcer_toc10::OnGossipSelect(), npc_hor_leader::OnGossipSelect(), npc_ulduar_expedition_commander::OnGossipSelect(), npc_thrall_old_hillsbrad::OnGossipSelect(), npc_hor_leader_second::OnGossipSelect(), npc_battle_at_valhalas::OnQuestAccept(), npc_riggle_bassbait::OnQuestReward(), boss_flame_leviathan_overload_device::OnSpellClick(), NPCStaveQuestAI::PrepareForEncounter(), RemoveVehicleKit(), boss_majordomo::Reset(), npc_arthas::npc_arthasAI::Reset(), npc_plucky::npc_pluckyAI::Reset(), npc_xerestrasza::npc_xerestraszaAI::Reset(), npc_tirion_fordring_tft::npc_tirion_fordringAI::Reset(), npc_lake_frog::npc_lake_frogAI::Reset(), npc_akama_illidan::Reset(), npc_akama_shade::Reset(), npc_aeranas::npc_aeranasAI::Reset(), npc_magister_aledis::Reset(), npc_chicken_cluck::npc_chicken_cluckAI::Reset(), instance_violet_hold::instance_violet_hold_InstanceMapScript::SetData(), npc_tirion_fordring_tft::npc_tirion_fordringAI::sGossipSelect(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::sGossipSelect(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::sGossipSelect(), boss_doomrel::sGossipSelect(), boss_apothecary_hummel::boss_apothecary_hummelAI::sGossipSelect(), boss_majordomo::sGossipSelect(), boss_victor_nefarius::sGossipSelect(), npc_harrison_jones::sGossipSelect(), npc_general_andorov::sGossipSelect(), npc_akama_shade::sGossipSelect(), npc_isle_of_conquest_turret::npc_isle_of_conquest_turretAI::SpellHit(), npc_chesspiece::SpellHitTarget(), npc_belnistrasz::npc_belnistraszAI::sQuestAccept(), npc_deathstalker_fearleia::sQuestAccept(), npc_battle_at_valhalas::npc_battle_at_valhalasAI::StartBattle(), npc_koltira_deathweaver::npc_koltira_deathweaverAI::StartEvent(), npc_magister_aledis::StartFight(), npc_cork_gizelton::npc_cork_gizeltonAI::SummonHelpers(), npc_plucky::npc_pluckyAI::UpdateAI(), npc_lake_frog::npc_lake_frogAI::UpdateAI(), npc_crusade_recruit::npc_crusade_recruitAI::UpdateAI(), and Vehicle::Vehicle().

◆ RemoveOwnedAura() [1/3]

void Unit::RemoveOwnedAura ( Aura aura,
AuraRemoveMode  removeMode = AURA_REMOVE_BY_DEFAULT 
)
5012{
5013 if (aura->IsRemoved())
5014 return;
5015
5016 ASSERT(aura->GetOwner() == this);
5017
5018 uint32 spellId = aura->GetId();
5019 AuraMapBoundsNonConst range = m_ownedAuras.equal_range(spellId);
5020
5021 for (AuraMap::iterator itr = range.first; itr != range.second; ++itr)
5022 {
5023 if (itr->second == aura)
5024 {
5025 RemoveOwnedAura(itr, removeMode);
5026 return;
5027 }
5028 }
5029
5030 ABORT();
5031}

References ABORT, ASSERT, Aura::GetId(), Aura::GetOwner(), Aura::IsRemoved(), m_ownedAuras, and RemoveOwnedAura().

◆ RemoveOwnedAura() [2/3]

void Unit::RemoveOwnedAura ( AuraMap::iterator &  i,
AuraRemoveMode  removeMode = AURA_REMOVE_BY_DEFAULT 
)
4979{
4980 Aura* aura = i->second;
4981 ASSERT(!aura->IsRemoved());
4982
4983 // if unit currently update aura list then make safe update iterator shift to next
4986
4987 m_ownedAuras.erase(i);
4988 m_removedAuras.push_back(aura);
4989
4990 // Unregister single target aura
4991 if (aura->IsSingleTarget())
4992 aura->UnregisterSingleTarget();
4993
4994 aura->_Remove(removeMode);
4995
4996 i = m_ownedAuras.begin();
4997}
void _Remove(AuraRemoveMode removeMode)
Definition SpellAuras.cpp:513

References Aura::_Remove(), ASSERT, Aura::IsRemoved(), Aura::IsSingleTarget(), m_auraUpdateIterator, m_ownedAuras, m_removedAuras, and Aura::UnregisterSingleTarget().

Referenced by Player::_removeTalentAurasAndSpells(), _UpdateSpells(), Player::ActivateSpec(), Spell::EffectApplyGlyph(), WorldSession::HandleCancelAuraOpcode(), spell_pal_improved_aura::HandleEffectApply(), spell_pal_aura_mastery::HandleEffectRemove(), spell_pal_improved_aura::HandleEffectRemove(), WorldSession::HandlePetCancelAuraOpcode(), WorldSession::HandleRemoveGlyph(), AuraEffect::HandleShapeshiftBoosts(), boss_zuljin::JustEngagedWith(), spell_gen_animal_blood::OnApply(), spell_contagion_of_rot::OnApply(), UnitAura::Remove(), RemoveAllAuras(), RemoveAllAurasExceptType(), RemoveAllAurasOnDeath(), RemoveAllAurasRequiringDeadTarget(), RemoveAurasDueToItemSpell(), RemoveEvadeAuras(), Player::RemoveItemDependentAurasAndCasts(), RemoveNotOwnSingleTargetAuras(), RemoveOwnedAura(), RemoveOwnedAura(), RemoveOwnedAuras(), RemoveOwnedAuras(), Player::removeSpell(), boss_falric::UpdateAI(), and Player::UpdateAreaDependentAuras().

◆ RemoveOwnedAura() [3/3]

void Unit::RemoveOwnedAura ( uint32  spellId,
ObjectGuid  casterGUID = ObjectGuid::Empty,
uint8  reqEffMask = 0,
AuraRemoveMode  removeMode = AURA_REMOVE_BY_DEFAULT 
)
5000{
5001 for (AuraMap::iterator itr = m_ownedAuras.lower_bound(spellId); itr != m_ownedAuras.upper_bound(spellId);)
5002 if (((itr->second->GetEffectMask() & reqEffMask) == reqEffMask) && (!casterGUID || itr->second->GetCasterGUID() == casterGUID))
5003 {
5004 RemoveOwnedAura(itr, removeMode);
5005 itr = m_ownedAuras.lower_bound(spellId);
5006 }
5007 else
5008 ++itr;
5009}

References m_ownedAuras, and RemoveOwnedAura().

◆ RemoveOwnedAuras() [1/2]

void Unit::RemoveOwnedAuras ( std::function< bool(Aura const *)> const &  check)
5131{
5132 for (AuraMap::iterator iter = m_ownedAuras.begin(); iter != m_ownedAuras.end();)
5133 {
5134 if (check(iter->second))
5135 {
5136 RemoveOwnedAura(iter);
5137 continue;
5138 }
5139 ++iter;
5140 }
5141}

References m_ownedAuras, and RemoveOwnedAura().

Referenced by _RemoveNoStackAurasDueToAura().

◆ RemoveOwnedAuras() [2/2]

void Unit::RemoveOwnedAuras ( uint32  spellId,
std::function< bool(Aura const *)> const &  check 
)
5157{
5158 for (AuraMap::iterator iter = m_ownedAuras.lower_bound(spellId); iter != m_ownedAuras.upper_bound(spellId);)
5159 {
5160 if (check(iter->second))
5161 {
5162 RemoveOwnedAura(iter);
5163 continue;
5164 }
5165 ++iter;
5166 }
5167}

References m_ownedAuras, and RemoveOwnedAura().

◆ RemovePetAura()

void Unit::RemovePetAura ( PetAura const *  petSpell)
13726{
13727 if (!IsPlayer())
13728 return;
13729
13730 m_petAuras.erase(petSpell);
13731 if (Pet* pet = ToPlayer()->GetPet())
13732 pet->RemoveAurasDueToSpell(petSpell->GetAura(pet->GetEntry()));
13733 if (Unit* charm = GetCharm())
13734 charm->RemoveAurasDueToSpell(petSpell->GetAura(charm->GetEntry()));
13735}

References PetAura::GetAura(), GetCharm(), Object::IsPlayer(), m_petAuras, and Object::ToPlayer().

Referenced by Player::_removeTalentAurasAndSpells(), Pet::CastPetAuras(), AuraEffect::HandleAuraDummy(), and Player::removeSpell().

◆ RemovePlayerFromVision()

void Unit::RemovePlayerFromVision ( Player player)
Todo:
: This isn't right, if a previously active object was set to active with e.g. Mind Vision this will make them no longer active
8303{
8304 m_sharedVision.remove(player);
8305 player->m_isInSharedVisionOf.erase(this);
8306
8308 if (m_sharedVision.empty())
8309 setActive(false);
8310}

References Player::m_isInSharedVisionOf, m_sharedVision, and WorldObject::setActive().

Referenced by Player::SetViewpoint(), and Player::~Player().

◆ RemovePointedBy()

void Unit::RemovePointedBy ( SafeUnitPointer sup)
inline

◆ RemoveStandFlags()

void Unit::RemoveStandFlags ( uint8  flags)
inline
@ UNIT_BYTES_1_OFFSET_VIS_FLAG
Definition UnitDefines.h:28
void RemoveByteFlag(uint16 index, uint8 offset, uint8 newFlag)
Definition Object.cpp:912

References Object::RemoveByteFlag(), UNIT_BYTES_1_OFFSET_VIS_FLAG, and UNIT_FIELD_BYTES_1.

Referenced by AuraEffect::HandleModStealth(), Player::InitStatsForLevel(), and npc_varian_wrynn::npc_varian_wrynnAI::UpdateAI().

◆ RemoveUnitFlag()

void Unit::RemoveUnitFlag ( UnitFlags  flags)
inline

UnitFlags available in UnitDefines.h.

749{ RemoveFlag(UNIT_FIELD_FLAGS, flags); }

References Object::RemoveFlag(), and UNIT_FIELD_FLAGS.

Referenced by at_hol_hall_of_watchers::_OnTrigger(), spell_the_lich_king_trigger_vile_spirit::ActivateSpirit(), Player::BuildPlayerRepop(), boss_thekal::CheckPhaseTransition(), Player::CleanupAfterTaxiFlight(), ClearInCombat(), ClearInPetCombat(), boss_alar::DamageTaken(), DisableRotate(), boss_thorim::DisableThorim(), Dismount(), boss_dorothee::DoAction(), boss_roar::DoAction(), boss_strawman::DoAction(), boss_tinhead::DoAction(), boss_thekal::DoAction(), npc_twilight_volunteer::DoAction(), boss_taldaram::DoAction(), boss_prince_keleseth_icc::boss_prince_kelesethAI::DoAction(), boss_prince_taldaram_icc::boss_prince_taldaramAI::DoAction(), boss_prince_valanar_icc::boss_prince_valanarAI::DoAction(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::DoAction(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::DoAction(), npc_living_constellation::DoAction(), boss_the_lurker_below::DoAction(), npc_frozen_core::DoAction(), boss_broggok::DoAction(), instance_karazhan::instance_karazhan_InstanceMapScript::DoAction(), boss_cthun::DoAction(), boss_grand_champion::boss_grand_championAI::DoAction(), boss_tyrannus::boss_tyrannusAI::DoAction(), npc_xt002_heart::DoAction(), npc_massive_jormungar::npc_massive_jormungarAI::DoAction(), npc_ferocious_rhino::npc_ferocious_rhinoAI::DoAction(), npc_ravenous_furbolg::npc_ravenous_furbolgAI::DoAction(), npc_frenzied_worgen::npc_frenzied_worgenAI::DoAction(), boss_skadi::boss_skadiAI::DoAction(), boss_illidan_stormrage::DoAction(), boss_essence_of_suffering::boss_essence_of_sufferingAI::DoAction(), boss_essence_of_desire::boss_essence_of_desireAI::DoAction(), boss_essence_of_anger::boss_essence_of_angerAI::DoAction(), boss_kelidan_the_breaker::DoAction(), boss_ichoron::DoExplodeCompleted(), HomeMovementGenerator< Creature >::DoFinalize(), ConfusedMovementGenerator< T >::DoFinalize(), FlightPathMovementGenerator::DoFinalize(), FleeingMovementGenerator< T >::DoFinalize(), ConfusedMovementGenerator< T >::DoFinalize(), WorldSession::DoLootRelease(), Spell::EffectResurrectPet(), Spell::EffectSkinning(), npc_giant_claw_tentacle::Emerge(), boss_ahune::Emerge(), boss_yoggsaron_sara::EnableSara(), boss_bronjahm::EnterEvadeMode(), npc_ghostly_priest::EnterEvadeMode(), npc_phantom_mage::EnterEvadeMode(), npc_shadowy_mercenary::EnterEvadeMode(), npc_spectral_footman::EnterEvadeMode(), npc_tortured_rifleman::EnterEvadeMode(), boss_kelthuzad::boss_kelthuzadAI::EnterEvadeMode(), boss_malygos::EnterEvadeMode(), boss_ymiron::boss_ymironAI::EnterEvadeMode(), npc_overlord_drakuru_betrayal::EnterEvadeMode(), SmartAI::EnterEvadeMode(), npc_future_you::npc_future_youAI::EnterEvadeMode(), SACActivateEvent::Execute(), boss_ingvar_the_plunderer::FeignDeath(), TimedFleeingMovementGenerator::Finalize(), npc_torloth_the_magnificent::npc_torloth_the_magnificentAI::HandleAnimation(), AuraEffect::HandleArenaPreparation(), AuraEffect::HandleAuraModFaction(), AuraEffect::HandleAuraModPacify(), AuraEffect::HandleAuraModSilence(), spell_q13007_iron_colossus::HandleDummy(), spell_gen_model_visible::HandleEffectRemove(), spell_gen_feign_death_all_flags::HandleEffectRemove(), spell_gen_feign_death_no_dyn_flag::HandleEffectRemove(), spell_gen_feign_death_no_prevent_emotes::HandleEffectRemove(), boss_ragnaros::HandleEmerge(), AuraEffect::HandleFeignDeath(), WorldSession::HandleLogoutCancelOpcode(), spell_oculus_drake_flag_aura::HandleOnEffectApply(), spell_oculus_rider_aura::HandleOnEffectRemove(), WorldSession::HandlePlayerLoginToCharInWorld(), spell_boss_magus_telestra_summon_telestra_clones_aura::HandleRemove(), boss_vaelastrasz::Initialize(), boss_kiljaeden::InitializeAI(), boss_jarien::IsSummonedBy(), boss_sothos::IsSummonedBy(), boss_apothecary_hummel::boss_apothecary_hummelAI::JustDied(), boss_volazj::JustDied(), boss_taerar::boss_taerarAI::JustDied(), boss_noth::boss_nothAI::JustDied(), boss_ichoron::JustDied(), boss_ymiron::boss_ymironAI::JustEngagedWith(), boss_novos::JustEngagedWith(), boss_hazzarah::JustSummoned(), npc_crystalline_frayer::LeaveSeedPod(), boss_anubarak_trial::boss_anubarak_trialAI::MoveInLineOfSight(), boss_taldaram::MovementInform(), boss_grand_champion::boss_grand_championAI::MovementInform(), boss_illidan_stormrage::MovementInform(), boss_sindragosa::boss_sindragosaAI::MovementInform(), boss_shade_of_akama::MovementInform(), boss_kaelthas::MovementInform(), boss_sartharion_dragonAI::MovementInform(), boss_jedoga_shadowseeker::MovementInform(), npc_toc5_player_vehicle::npc_toc5_player_vehicleAI::OnCharmed(), instance_dire_maul::instance_dire_maul_InstanceMapScript::OnCreatureCreate(), npc_bessy::OnQuestAccept(), spell_halion_twilight_phasing_aura::OnRemove(), boss_nightbane::PathEndReached(), boss_nefarian::PathEndReached(), RemoveCharmedBy(), Vehicle::RemovePassenger(), boss_keristrasza::RemovePrison(), boss_lord_valthalak::Reset(), boss_rend_blackhand::Reset(), boss_victor_nefarius::Reset(), boss_ragnaros::Reset(), boss_mr_smite::boss_mr_smiteAI::Reset(), boss_crone::Reset(), boss_julianne::Reset(), boss_apothecary_hummel::boss_apothecary_hummelAI::Reset(), boss_kalecgos::Reset(), boss_kiljaeden::Reset(), boss_muru::Reset(), npc_harrison_jones::Reset(), npc_amanishi_lookout::Reset(), boss_eye_of_cthun::Reset(), boss_volazj::Reset(), boss_anub_arak::Reset(), boss_sartharion_dragonAI::Reset(), boss_general_zarithrian::boss_general_zarithrianAI::Reset(), boss_grand_champion::boss_grand_championAI::Reset(), boss_novos::Reset(), boss_bronjahm::Reset(), boss_drakkari_colossus::boss_drakkari_colossusAI::Reset(), boss_professor_putricide::boss_professor_putricideAI::Reset(), boss_gothik::boss_gothikAI::Reset(), boss_kelthuzad::boss_kelthuzadAI::Reset(), boss_malygos::Reset(), npc_crystalline_frayer::Reset(), boss_eregos::boss_eregosAI::Reset(), boss_urom::boss_uromAI::Reset(), boss_varos::boss_varosAI::Reset(), boss_flame_leviathan::Reset(), boss_mimiron::Reset(), npc_ulduar_leviathan_mkii::Reset(), boss_xt002::Reset(), boss_ingvar_the_plunderer::Reset(), boss_skadi::boss_skadiAI::Reset(), boss_svala::boss_svalaAI::Reset(), boss_ymiron::boss_ymironAI::Reset(), boss_ichoron::Reset(), npc_wounded_skirmisher::Reset(), npc_venture_co_straggler::npc_venture_co_stragglerAI::Reset(), npc_overlord_drakuru_betrayal::Reset(), boss_leotheras_the_blind::Reset(), npc_shattered_hand_scout::Reset(), boss_kaelthas::Reset(), advisor_baseAI::Reset(), emerald_dragonAI::Reset(), npc_doctor::npc_doctorAI::Reset(), npc_injured_patient::npc_injured_patientAI::Reset(), Resurrect(), boss_magtheridon::ScheduleCombatEvents(), boss_the_lurker_below::SchedulerPhaseTwo(), Player::SetBeastMaster(), SetCharm(), npc_ulduar_leviathan_mkii::SetData(), npc_ulduar_vx001::SetData(), npc_ulduar_aerial_command_unit::SetData(), Pet::setDeathState(), SetImmuneToNPC(), SetImmuneToPC(), Player::SetIsSpectator(), SetStunned(), SetSwim(), Battlefield::ShowNpc(), npc_black_knight_ghoul::npc_black_knight_ghoulAI::SpellHit(), npc_ulduar_iron_construct::SpellHit(), npc_ulduar_leviathan_mkii::SpellHit(), npc_ulduar_vx001::SpellHit(), npc_ulduar_aerial_command_unit::SpellHit(), npc_infernal_attacker::npc_infernal_attackerAI::SpellHit(), npc_draenei_survivor::npc_draenei_survivorAI::SpellHit(), advisor_baseAI::SpellHit(), npc_nether_drake::npc_nether_drakeAI::SpellHit(), npc_injured_patient::npc_injured_patientAI::SpellHit(), boss_headless_horseman_head::SpellHit(), boss_black_knight::boss_black_knightAI::SpellHitTarget(), instance_violet_hold::instance_violet_hold_InstanceMapScript::StartBossEncounter(), boss_lord_valthalak::StartFighting(), boss_noth::boss_nothAI::StartGroundPhase(), boss_drakkari_colossus::boss_drakkari_colossusAI::SummonedCreatureDespawn(), boss_pyroguard_emberseer::UpdateAI(), boss_vaelastrasz::UpdateAI(), boss_ragnaros::UpdateAI(), boss_mr_smite::boss_mr_smiteAI::UpdateAI(), npc_scarlet_ghoul::npc_scarlet_ghoulAI::UpdateAI(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::UpdateAI(), boss_arlokk::boss_arlokkAI::UpdateAI(), npc_twiggy_flathead::npc_twiggy_flatheadAI::UpdateAI(), boss_volazj::UpdateAI(), boss_anub_arak::UpdateAI(), npc_memory::npc_memoryAI::UpdateAI(), boss_anubarak_trial::boss_anubarak_trialAI::UpdateAI(), npc_nerubian_burrower::npc_nerubian_burrowerAI::UpdateAI(), boss_jormungarAI::UpdateAI(), boss_drakkari_colossus::boss_drakkari_colossusAI::UpdateAI(), npc_cult_fanatic::npc_cult_fanaticAI::UpdateAI(), npc_cult_adherent::npc_cult_adherentAI::UpdateAI(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::UpdateAI(), npc_crok_scourgebane::npc_crok_scourgebaneAI::UpdateAI(), boss_gothik::boss_gothikAI::UpdateAI(), boss_kelthuzad::boss_kelthuzadAI::UpdateAI(), boss_sapphiron::boss_sapphironAI::UpdateAI(), boss_thaddius::boss_thaddiusAI::UpdateAI(), boss_malygos::UpdateAI(), boss_urom::boss_uromAI::UpdateAI(), boss_algalon_the_observer::UpdateAI(), boss_flame_leviathan::UpdateAI(), boss_mimiron::UpdateAI(), boss_xt002::UpdateAI(), boss_ingvar_the_plunderer::UpdateAI(), npc_vrykul_skeleton::UpdateAI(), boss_palehoof::boss_palehoofAI::UpdateAI(), boss_svala::boss_svalaAI::UpdateAI(), boss_ymiron::boss_ymironAI::UpdateAI(), npc_q24545_vegard::npc_q24545_vegardAI::UpdateAI(), boss_taerar::boss_taerarAI::UpdateAI(), npc_artorius::npc_artoriusAI::UpdateAI(), npc_simone::npc_simoneAI::UpdateAI(), npc_nelson::npc_nelsonAI::UpdateAI(), npc_franklin::npc_franklinAI::UpdateAI(), npc_injured_patient::npc_injured_patientAI::UpdateAI(), CombatManager::UpdateOwnerCombatState(), UpdatePetCombatState(), and npc_general_andorov::WaypointReached().

◆ RemoveUnitFlag2()

◆ RemoveUnitMovementFlag()

◆ RemoveVehicleKit()

void Unit::RemoveVehicleKit ( )
14997{
14998 if (!m_vehicleKit)
14999 return;
15000
15002 delete m_vehicleKit;
15003
15004 m_vehicleKit = nullptr;
15005
15006 m_updateFlag &= ~UPDATEFLAG_VEHICLE;
15007 m_unitTypeMask &= ~UNIT_MASK_VEHICLE;
15009}
@ UNIT_NPC_FLAG_SPELLCLICK
Definition UnitDefines.h:346
@ UNIT_NPC_FLAG_PLAYER_VEHICLE
Definition UnitDefines.h:347
void RemoveNpcFlag(NPCFlags flags)
Definition Unit.h:765

References m_unitTypeMask, Object::m_updateFlag, m_vehicleKit, RemoveNpcFlag(), Vehicle::Uninstall(), UNIT_NPC_FLAG_PLAYER_VEHICLE, and UNIT_NPC_FLAG_SPELLCLICK.

Referenced by Dismount(), AuraEffect::HandleAuraSetVehicle(), npc_gunship::npc_gunshipAI::JustDied(), npc_isle_of_conquest_turret::npc_isle_of_conquest_turretAI::JustDied(), spell_blood_queen_frenzied_bloodthirst_aura::OnRemove(), and RemoveFromWorld().

◆ RemoveVisibleAura()

void Unit::RemoveVisibleAura ( uint8  slot)
inline
1548{ m_visibleAuras.erase(slot); UpdateAuraForGroup(slot);}
void UpdateAuraForGroup(uint8 slot)
Definition Unit.cpp:13585

References m_visibleAuras, and UpdateAuraForGroup().

Referenced by AuraApplication::_Remove().

◆ ReplaceAllDynamicFlags()

◆ ReplaceAllNpcFlags()

void Unit::ReplaceAllNpcFlags ( NPCFlags  flags)
inline

References SetUInt32Value(), and UNIT_NPC_FLAGS.

Referenced by Pet::CreateBaseAtTamed(), npc_wild_wyrm::DamageTaken(), brann_bronzebeard::brann_bronzebeardAI::DoAction(), Spell::EffectSummonType(), SmartAI::EndPath(), modify_commandscript::HandleModifyFactionCommand(), npc_commandscript::HandleNpcSetFlagCommand(), npc_lord_arete::npc_lord_areteAI::InitializeAI(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::JustRespawned(), npc_akama_illidan::JustSummoned(), Pet::LoadPetFromDB(), npc_pet_gen_argent_pony_bridle::OnGossipSelect(), npc_shandy_dalaran::OnGossipSelect(), go_crystalline_tear::OnQuestAccept(), boss_yoggsaron_descend_portal::OnSpellClick(), npc_hidden_cultist::npc_hidden_cultistAI::PreScript(), boss_doomrel::Reset(), npc_eris_hevenfire::npc_eris_hevenfireAI::Reset(), npc_taretha::npc_tarethaAI::Reset(), brann_bronzebeard::brann_bronzebeardAI::Reset(), npc_hidden_cultist::npc_hidden_cultistAI::Reset(), npc_pet_gen_argent_pony_bridle::Reset(), Creature::setDeathState(), npc_eris_hevenfire::npc_eris_hevenfireAI::SetGUID(), npc_captain_saeed::npc_captain_saeedAI::SetGUID(), npc_akama_illidan::sGossipSelect(), npc_escortAI::Start(), FollowerAI::StartFollow(), SmartAI::StartPath(), Player::SummonPet(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::UpdateAI(), npc_lord_arete::npc_lord_areteAI::UpdateAI(), npc_pet_gen_argent_pony_bridle::UpdateAI(), Creature::UpdateEntry(), brann_bronzebeard::brann_bronzebeardAI::UpdateEscortAI(), GameEventMgr::UpdateEventNPCFlags(), and npc_captain_saeed::npc_captain_saeedAI::WaypointReached().

◆ ReplaceAllUnitFlags()

◆ ReplaceAllUnitFlags2()

void Unit::ReplaceAllUnitFlags2 ( UnitFlags2  flags)
inline

◆ resetAttackTimer()

◆ RespondsToCallForHelp()

bool Unit::RespondsToCallForHelp ( ) const
inline
1037 {
1038 if (FactionTemplateEntry const* entry = GetFactionTemplateEntry())
1039 return entry->FactionRespondsToCallForHelp();
1040
1041 return false;
1042 }

References GetFactionTemplateEntry().

Referenced by Creature::CanAssistTo().

◆ RestoreDisplayId()

void Unit::RestoreDisplayId ( )
13180{
13181 AuraEffect* handledAura = nullptr;
13182 AuraEffect* handledAuraForced = nullptr;
13183 // try to receive model from transform auras
13185 if (!transforms.empty())
13186 {
13187 // iterate over already applied transform auras - from newest to oldest
13188 for (auto i = transforms.rbegin(); i != transforms.rend(); ++i)
13189 {
13190 if (AuraApplication const* aurApp = (*i)->GetBase()->GetApplicationOfTarget(GetGUID()))
13191 {
13192 if (!handledAura)
13193 handledAura = (*i);
13194 // xinef: prefer negative/forced auras
13195 if ((*i)->GetSpellInfo()->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES) || !aurApp->IsPositive())
13196 {
13197 handledAuraForced = (*i);
13198 break;
13199 }
13200 }
13201 }
13202 }
13203
13204 // Xinef: include clone auras (eg mirror images)
13205 if (!handledAuraForced && !handledAura)
13206 {
13208 if (!cloneAuras.empty())
13209 for (Unit::AuraEffectList::const_iterator i = cloneAuras.begin(); i != cloneAuras.end(); ++i)
13210 handledAura = *i;
13211 }
13212
13214
13215 // xinef: order of execution is important!
13216 // first forced transform auras, then shapeshifts, then normal transform
13217 // transform aura was found
13218 if (handledAuraForced)
13219 {
13220 handledAuraForced->HandleEffect(this, AURA_EFFECT_HANDLE_SEND_FOR_CLIENT, true);
13221 return;
13222 }
13223 else if (!shapeshiftAura.empty()) // we've found shapeshift
13224 {
13225 // only one such aura possible at a time
13226 if (uint32 modelId = GetModelForForm(GetShapeshiftForm(), shapeshiftAura.front()->GetId()))
13227 {
13228 SetDisplayId(modelId);
13229 return;
13230 }
13231 }
13232 else if (handledAura)
13233 {
13234 handledAura->HandleEffect(this, AURA_EFFECT_HANDLE_SEND_FOR_CLIENT, true);
13235 return;
13236 }
13237
13238 // no auras found - set modelid to default
13240}
@ AURA_EFFECT_HANDLE_SEND_FOR_CLIENT
Definition SpellAuraDefines.h:43
void HandleEffect(AuraApplication *aurApp, uint8 mode, bool apply)
Definition SpellAuraEffects.cpp:755
uint32 GetModelForForm(ShapeshiftForm form, uint32 spellId)
Definition Unit.cpp:15455

References AURA_EFFECT_HANDLE_SEND_FOR_CLIENT, Aura::GetApplicationOfTarget(), GetAuraEffectsByType(), AuraApplication::GetBase(), Object::GetGUID(), GetModelForForm(), GetNativeDisplayId(), GetShapeshiftForm(), AuraEffect::HandleEffect(), SetDisplayId(), SPELL_ATTR0_NO_IMMUNITIES, SPELL_AURA_CLONE_CASTER, SPELL_AURA_MOD_SHAPESHIFT, and SPELL_AURA_TRANSFORM.

Referenced by AuraEffect::HandleAuraModShapeshift(), AuraEffect::HandleAuraTransform(), spell_gen_aura_service_uniform::OnRemove(), and Player::SetIsSpectator().

◆ RestoreFaction()

◆ ResumeMovement()

void Unit::ResumeMovement ( uint32  timer = 0,
uint8  slot = 0 
)
13069{
13070 if (slot >= MAX_MOTION_SLOT)
13071 return;
13072
13073 if (MovementGenerator* movementGenerator = GetMotionMaster()->GetMotionSlot(slot))
13074 movementGenerator->Resume(timer);
13075}

References GetMotionMaster(), and MAX_MOTION_SLOT.

Referenced by boss_razuvious::boss_razuviousAI::ScheduleInteractWithDeathKnight(), npc_acherus_necromancer::npc_acherus_necromancerAI::UpdateAI(), and npc_gothik_the_harvester::npc_gothik_the_harvesterAI::UpdateAI().

◆ RewardRage()

void Unit::RewardRage ( uint32  damage,
uint32  weaponSpeedHitFactor,
bool  attacker 
)
16065{
16066 // Rage formulae https://wowwiki-archive.fandom.com/wiki/Rage#Formulae
16067 float addRage;
16068
16069 float rageconversion = ((0.0091107836f * GetLevel() * GetLevel()) + 3.225598133f * GetLevel()) + 4.2652911f;
16070
16071 // Unknown if correct, but lineary adjust rage conversion above level 70
16072 if (GetLevel() > 70)
16073 rageconversion += 13.27f * (GetLevel() - 70);
16074
16075 if (attacker)
16076 {
16077 // see Bornak's bluepost explanation (05/29/2009)
16078 float rageFromDamageDealt = damage / rageconversion * 7.5f;
16079 addRage = (rageFromDamageDealt + weaponSpeedHitFactor) / 2.0f;
16080 addRage = std::min(addRage, rageFromDamageDealt * 2.0f);
16082 }
16083 else
16084 {
16085 addRage = damage / rageconversion * 2.5f;
16086
16087 // Berserker Rage effect
16088 if (HasAura(18499))
16089 addRage *= 3.0f;
16090 }
16091
16092 addRage *= sWorld->getRate(RATE_POWER_RAGE_INCOME);
16093
16094 ModifyPower(POWER_RAGE, uint32(addRage * 10));
16095}
@ SPELL_AURA_MOD_RAGE_FROM_DAMAGE_DEALT
Definition SpellAuraDefines.h:276
@ RATE_POWER_RAGE_INCOME
Definition WorldConfig.h:398

References AddPct(), GetLevel(), GetTotalAuraModifier(), HasAura(), ModifyPower(), POWER_RAGE, RATE_POWER_RAGE_INCOME, SPELL_AURA_MOD_RAGE_FROM_DAMAGE_DEALT, and sWorld.

Referenced by DealDamage(), and DealMeleeDamage().

◆ RollMeleeOutcomeAgainst() [1/2]

MeleeHitOutcome Unit::RollMeleeOutcomeAgainst ( Unit const *  victim,
WeaponAttackType  attType 
) const
2968{
2969 // This is only wrapper
2970
2971 // Miss chance based on melee
2972 //float miss_chance = MeleeMissChanceCalc(victim, attType);
2973 float miss_chance = MeleeSpellMissChance(victim, attType, int32(GetWeaponSkillValue(attType, victim)) - int32(victim->GetMaxSkillValueForLevel(this)), 0);
2974
2975 // Critical hit chance
2976 float crit_chance = GetUnitCriticalChance(attType, victim);
2977 if (crit_chance < 0)
2978 crit_chance = 0;
2979
2980 float dodge_chance = victim->GetUnitDodgeChance();
2981 float block_chance = victim->GetUnitBlockChance();
2982 float parry_chance = victim->GetUnitParryChance();
2983
2984 // Useful if want to specify crit & miss chances for melee, else it could be removed
2985 //LOG_DEBUG("entities.unit", "MELEE OUTCOME: miss {} crit {} dodge {} parry {} block {}", miss_chance, crit_chance, dodge_chance, parry_chance, block_chance);
2986
2987 return RollMeleeOutcomeAgainst(victim, attType, int32(crit_chance * 100), int32(miss_chance * 100), int32(dodge_chance * 100), int32(parry_chance * 100), int32(block_chance * 100));
2988}
float GetUnitCriticalChance(WeaponAttackType attackType, Unit const *victim) const
Definition Unit.cpp:3904

References GetMaxSkillValueForLevel(), GetUnitBlockChance(), GetUnitCriticalChance(), GetUnitDodgeChance(), GetUnitParryChance(), GetWeaponSkillValue(), MeleeSpellMissChance(), and RollMeleeOutcomeAgainst().

Referenced by CalculateMeleeDamage(), and RollMeleeOutcomeAgainst().

◆ RollMeleeOutcomeAgainst() [2/2]

MeleeHitOutcome Unit::RollMeleeOutcomeAgainst ( Unit const *  victim,
WeaponAttackType  attType,
int32  crit_chance,
int32  miss_chance,
int32  dodge_chance,
int32  parry_chance,
int32  block_chance 
) const
2991{
2992 if (victim->IsCreature() && victim->ToCreature()->IsEvadingAttacks())
2993 {
2994 return MELEE_HIT_EVADE;
2995 }
2996
2997 int32 attackerMaxSkillValueForLevel = GetMaxSkillValueForLevel(victim);
2998 int32 victimMaxSkillValueForLevel = victim->GetMaxSkillValueForLevel(this);
2999
3000 int32 attackerWeaponSkill = GetWeaponSkillValue(attType, victim);
3001 int32 victimDefenseSkill = victim->GetDefenseSkillValue(this);
3002
3003 sScriptMgr->OnBeforeRollMeleeOutcomeAgainst(this, victim, attType, attackerMaxSkillValueForLevel, victimMaxSkillValueForLevel, attackerWeaponSkill, victimDefenseSkill, crit_chance, miss_chance, dodge_chance, parry_chance, block_chance);
3004
3005 // bonus from skills is 0.04%
3006 int32 skillBonus = 4 * (attackerWeaponSkill - victimMaxSkillValueForLevel);
3007 int32 sum = 0, tmp = 0;
3008 int32 roll = urand (0, 10000);
3009
3010 LOG_DEBUG("entities.unit", "RollMeleeOutcomeAgainst: skill bonus of {} for attacker", skillBonus);
3011 //LOG_DEBUG("entities.unit", "RollMeleeOutcomeAgainst: rolled {}, miss {}, dodge {}, parry {}, block {}, crit {}",
3012 // roll, miss_chance, dodge_chance, parry_chance, block_chance, crit_chance);
3013
3014 tmp = miss_chance;
3015
3016 if (tmp > 0 && roll < (sum += tmp))
3017 {
3018 LOG_DEBUG("entities.unit", "RollMeleeOutcomeAgainst: MISS");
3019 return MELEE_HIT_MISS;
3020 }
3021
3022 // Dodge chance
3023
3024 // only players can't dodge if attacker is behind
3025 if (victim->IsPlayer() && !victim->HasInArc(M_PI, this) && !victim->HasIgnoreHitDirectionAura())
3026 {
3027 //LOG_DEBUG("entities.unit", "RollMeleeOutcomeAgainst: attack came from behind and victim was a player.");
3028 }
3029 // Xinef: do not allow to dodge with CREATURE_FLAG_EXTRA_NO_DODGE flag
3030 else if (victim->IsPlayer() || !(victim->ToCreature()->HasFlagsExtra(CREATURE_FLAG_EXTRA_NO_DODGE)))
3031 {
3032 // Reduce dodge chance by attacker expertise rating
3033 if (IsPlayer())
3034 dodge_chance -= int32(ToPlayer()->GetExpertiseDodgeOrParryReduction(attType) * 100);
3035 else
3036 dodge_chance -= GetTotalAuraModifier(SPELL_AURA_MOD_EXPERTISE) * 25;
3037
3038 // Modify dodge chance by attacker SPELL_AURA_MOD_COMBAT_RESULT_CHANCE
3040 dodge_chance = int32 (float (dodge_chance) * GetTotalAuraMultiplier(SPELL_AURA_MOD_ENEMY_DODGE));
3041
3042 tmp = dodge_chance;
3043
3044 // xinef: if casting or stunned - cant dodge
3045 if (victim->IsNonMeleeSpellCast(false, false, true) || victim->HasUnitState(UNIT_STATE_CONTROLLED))
3046 tmp = 0;
3047
3048 if ((tmp > 0) // check if unit _can_ dodge
3049 && ((tmp -= skillBonus) > 0)
3050 && roll < (sum += tmp))
3051 {
3052 LOG_DEBUG("entities.unit", "RollMeleeOutcomeAgainst: DODGE <{}, {})", sum - tmp, sum);
3053 return MELEE_HIT_DODGE;
3054 }
3055 }
3056
3057 // parry & block chances
3058
3059 // check if attack comes from behind, nobody can parry or block if attacker is behind
3060 if (!victim->HasInArc(M_PI, this) && !victim->HasIgnoreHitDirectionAura())
3061 {
3062 LOG_DEBUG("entities.unit", "RollMeleeOutcomeAgainst: attack came from behind.");
3063 }
3064 else
3065 {
3066 // Reduce parry chance by attacker expertise rating
3067 if (IsPlayer())
3068 parry_chance -= int32(ToPlayer()->GetExpertiseDodgeOrParryReduction(attType) * 100);
3069 else
3070 parry_chance -= GetTotalAuraModifier(SPELL_AURA_MOD_EXPERTISE) * 25;
3071
3072 if (victim->IsPlayer() || !(victim->ToCreature()->HasFlagsExtra(CREATURE_FLAG_EXTRA_NO_PARRY)))
3073 {
3074 tmp = parry_chance;
3075
3076 // xinef: cant parry while casting or while stunned
3077 if (victim->IsNonMeleeSpellCast(false, false, true) || victim->HasUnitState(UNIT_STATE_CONTROLLED))
3078 tmp = 0;
3079
3080 if (tmp > 0 // check if unit _can_ parry
3081 && (tmp -= skillBonus) > 0
3082 && roll < (sum += tmp))
3083 {
3084 LOG_DEBUG("entities.unit", "RollMeleeOutcomeAgainst: PARRY <{}, {})", sum - tmp, sum);
3085 return MELEE_HIT_PARRY;
3086 }
3087 }
3088
3089 if (victim->IsPlayer() || !(victim->ToCreature()->HasFlagsExtra(CREATURE_FLAG_EXTRA_NO_BLOCK)))
3090 {
3091 tmp = block_chance;
3092
3093 // xinef: cant block while casting or while stunned
3094 if (victim->IsNonMeleeSpellCast(false, false, true) || victim->HasUnitState(UNIT_STATE_CONTROLLED))
3095 tmp = 0;
3096
3097 if (tmp > 0 // check if unit _can_ block
3098 && (tmp -= skillBonus) > 0
3099 && roll < (sum += tmp))
3100 {
3101 LOG_DEBUG("entities.unit", "RollMeleeOutcomeAgainst: BLOCK <{}, {})", sum - tmp, sum);
3102 return MELEE_HIT_BLOCK;
3103 }
3104 }
3105 }
3106
3107 // Max 40% chance to score a glancing blow against mobs that are higher level (can do only players and pets and not with ranged weapon)
3108 if (attType != RANGED_ATTACK &&
3109 (IsPlayer() || IsPet()) &&
3110 !victim->IsPlayer() && !victim->IsPet() &&
3111 GetLevel() < victim->getLevelForTarget(this))
3112 {
3113 // cap possible value (with bonuses > max skill)
3114 int32 skill = attackerWeaponSkill;
3115 int32 maxskill = attackerMaxSkillValueForLevel;
3116 skill = (skill > maxskill) ? maxskill : skill;
3117
3118 tmp = (10 + (victimDefenseSkill - skill)) * 100;
3119 tmp = tmp > 4000 ? 4000 : tmp;
3120 if (roll < (sum += tmp))
3121 {
3122 LOG_DEBUG("entities.unit", "RollMeleeOutcomeAgainst: GLANCING <{}, {})", sum - 4000, sum);
3123 return MELEE_HIT_GLANCING;
3124 }
3125 }
3126
3127 // mobs can score crushing blows if they're 4 or more levels above victim
3128 if (getLevelForTarget(victim) >= victim->getLevelForTarget(this) + 4 &&
3129 // can be from by creature (if can) or from controlled player that considered as creature
3132 {
3133 // when their weapon skill is 15 or more above victim's defense skill
3134 tmp = victimDefenseSkill;
3135 int32 tmpmax = victimMaxSkillValueForLevel;
3136 // having defense above your maximum (from items, talents etc.) has no effect
3137 tmp = tmp > tmpmax ? tmpmax : tmp;
3138 // tmp = mob's level * 5 - player's current defense skill
3139 tmp = attackerMaxSkillValueForLevel - tmp;
3140 if (tmp >= 15)
3141 {
3142 // add 2% chance per lacking skill point, min. is 15%
3143 tmp = tmp * 200 - 1500;
3144 if (roll < (sum += tmp))
3145 {
3146 LOG_DEBUG("entities.unit", "RollMeleeOutcomeAgainst: CRUSHING <{}, {})", sum - tmp, sum);
3147 return MELEE_HIT_CRUSHING;
3148 }
3149 }
3150 }
3151
3152 // Critical chance
3153 tmp = crit_chance;
3154
3155 if (tmp > 0 && roll < (sum += tmp))
3156 {
3157 LOG_DEBUG("entities.unit", "RollMeleeOutcomeAgainst: CRIT <{}, {})", sum - tmp, sum);
3158 if (IsCreature() && (ToCreature()->HasFlagsExtra(CREATURE_FLAG_EXTRA_NO_CRIT)))
3159 LOG_DEBUG("entities.unit", "RollMeleeOutcomeAgainst: CRIT DISABLED)");
3160 else
3161 return MELEE_HIT_CRIT;
3162 }
3163
3164 LOG_DEBUG("entities.unit", "RollMeleeOutcomeAgainst: NORMAL");
3165 return MELEE_HIT_NORMAL;
3166}
@ CREATURE_FLAG_EXTRA_NO_CRUSHING_BLOWS
Definition CreatureData.h:51
@ CREATURE_FLAG_EXTRA_NO_CRIT
Definition CreatureData.h:63

References CREATURE_FLAG_EXTRA_NO_BLOCK, CREATURE_FLAG_EXTRA_NO_CRIT, CREATURE_FLAG_EXTRA_NO_CRUSHING_BLOWS, CREATURE_FLAG_EXTRA_NO_DODGE, CREATURE_FLAG_EXTRA_NO_PARRY, GetDefenseSkillValue(), GetLevel(), getLevelForTarget(), GetMaxSkillValueForLevel(), GetTotalAuraModifier(), GetTotalAuraModifierByMiscValue(), GetTotalAuraMultiplier(), GetWeaponSkillValue(), Creature::HasFlagsExtra(), HasIgnoreHitDirectionAura(), Position::HasInArc(), HasUnitState(), IsControlledByPlayer(), Object::IsCreature(), Creature::IsEvadingAttacks(), IsNonMeleeSpellCast(), IsPet(), Object::IsPlayer(), LOG_DEBUG, MELEE_HIT_BLOCK, MELEE_HIT_CRIT, MELEE_HIT_CRUSHING, MELEE_HIT_DODGE, MELEE_HIT_EVADE, MELEE_HIT_GLANCING, MELEE_HIT_MISS, MELEE_HIT_NORMAL, MELEE_HIT_PARRY, RANGED_ATTACK, SPELL_AURA_MOD_COMBAT_RESULT_CHANCE, SPELL_AURA_MOD_ENEMY_DODGE, SPELL_AURA_MOD_EXPERTISE, sScriptMgr, Object::ToCreature(), Object::ToPlayer(), UNIT_STATE_CONTROLLED, urand(), and VICTIMSTATE_DODGE.

◆ Say() [1/2]

◆ Say() [2/2]

void Unit::Say ( uint32  textId,
WorldObject const *  target = nullptr 
)
virtual

Reimplemented in Player.

17243{
17244 Talk(textId, CHAT_MSG_MONSTER_SAY, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), target);
17245}

References CHAT_MSG_MONSTER_SAY, CONFIG_LISTEN_RANGE_SAY, and sWorld.

◆ SelectNearbyNoTotemTarget()

Unit * Unit::SelectNearbyNoTotemTarget ( Unit exclude = nullptr,
float  dist = NOMINAL_MELEE_RANGE 
) const
13424{
13425 std::list<Unit*> targets;
13426 Acore::AnyUnfriendlyNoTotemUnitInObjectRangeCheck u_check(this, this, dist);
13428 Cell::VisitObjects(this, searcher, dist);
13429
13430 // remove current target
13431 if (GetVictim())
13432 targets.remove(GetVictim());
13433
13434 if (exclude)
13435 targets.remove(exclude);
13436
13437 // remove not LoS targets
13438 for (std::list<Unit*>::iterator tIter = targets.begin(); tIter != targets.end();)
13439 {
13440 if (!IsWithinLOSInMap(*tIter) || !IsValidAttackTarget(*tIter))
13441 {
13442 std::list<Unit*>::iterator tIter2 = tIter;
13443 ++tIter;
13444 targets.erase(tIter2);
13445 }
13446 else
13447 ++tIter;
13448 }
13449
13450 // no appropriate targets
13451 if (targets.empty())
13452 return nullptr;
13453
13454 // select random
13456}
bool IsValidAttackTarget(Unit const *target, SpellInfo const *bySpell=nullptr) const
Definition Unit.cpp:10746
auto SelectRandomContainerElement(C const &container) -> typename std::add_const< decltype(*std::begin(container))>::type &
Definition Containers.h:133
Definition GridNotifiers.h:414

References GetVictim(), IsValidAttackTarget(), WorldObject::IsWithinLOSInMap(), Acore::Containers::SelectRandomContainerElement(), and Cell::VisitObjects().

Referenced by spell_rog_blade_flurry::CheckProc(), and spell_warr_sweeping_strikes::CheckProc().

◆ SelectNearbyTarget()

Unit * Unit::SelectNearbyTarget ( Unit exclude = nullptr,
float  dist = NOMINAL_MELEE_RANGE 
) const
13389{
13390 std::list<Unit*> targets;
13391 Acore::AnyUnfriendlyUnitInObjectRangeCheck u_check(this, this, dist);
13393 Cell::VisitObjects(this, searcher, dist);
13394
13395 // remove current target
13396 if (GetVictim())
13397 targets.remove(GetVictim());
13398
13399 if (exclude)
13400 targets.remove(exclude);
13401
13402 // remove not LoS targets
13403 for (std::list<Unit*>::iterator tIter = targets.begin(); tIter != targets.end();)
13404 {
13405 if (!IsWithinLOSInMap(*tIter) || !IsValidAttackTarget(*tIter))
13406 {
13407 std::list<Unit*>::iterator tIter2 = tIter;
13408 ++tIter;
13409 targets.erase(tIter2);
13410 }
13411 else
13412 ++tIter;
13413 }
13414
13415 // no appropriate targets
13416 if (targets.empty())
13417 return nullptr;
13418
13419 // select random
13421}
Definition GridNotifiers.h:852

References GetVictim(), IsValidAttackTarget(), WorldObject::IsWithinLOSInMap(), Acore::Containers::SelectRandomContainerElement(), and Cell::VisitObjects().

Referenced by boss_yazzai::JustEngagedWith(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::JustSummoned(), boss_curator::JustSummoned(), npc_hodirs_fury::UpdateAI(), npc_storm_beacon_spawn::UpdateAI(), boss_kologarn::UpdateAI(), boss_thorim_trap::UpdateAI(), npc_llod_generic::npc_llod_genericAI::UpdateAI(), npc_millhouse_manastorm::npc_millhouse_manastormAI::UpdateAI(), Player::UpdateCharmedAI(), and boss_yoggsaron_cloud::UpdateEscortAI().

◆ SendAttackStateUpdate() [1/2]

void Unit::SendAttackStateUpdate ( CalcDamageInfo damageInfo)

Probably used for debugging purposes, as it is not known to appear on retail servers

6899{
6900 LOG_DEBUG("entities.unit", "WORLD: Sending SMSG_ATTACKERSTATEUPDATE");
6901
6902 uint32 tmpDamage[MAX_ITEM_PROTO_DAMAGES] = { };
6903 uint32 tmpAbsorb[MAX_ITEM_PROTO_DAMAGES] = { };
6904 for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
6905 {
6906 //IF we are in cheat mode we swap absorb with damage and set damage to 0, this way we can still debug damage but our hp bar will not drop
6907 tmpDamage[i] = damageInfo->damages[i].damage;
6908 tmpAbsorb[i] = damageInfo->damages[i].absorb;
6909 if (damageInfo->target->IsPlayer() && damageInfo->target->ToPlayer()->GetCommandStatus(CHEAT_GOD))
6910 {
6911 tmpAbsorb[i] = tmpDamage[i];
6912 tmpDamage[i] = 0;
6913 }
6914 }
6915
6916 uint32 count = 1;
6917 if (tmpDamage[1] || tmpAbsorb[1] || damageInfo->damages[1].resist)
6918 {
6919 ++count;
6920 }
6921
6922 std::size_t const maxsize = 4 + 5 + 5 + 4 + 4 + 1 + count * (4 + 4 + 4 + 4 + 4) + 1 + 4 + 4 + 4 + 4 + 4 * 12;
6923 WorldPacket data(SMSG_ATTACKERSTATEUPDATE, maxsize); // we guess size
6924 data << uint32(damageInfo->HitInfo);
6925 data << damageInfo->attacker->GetPackGUID();
6926 data << damageInfo->target->GetPackGUID();
6927 data << uint32(tmpDamage[0] + tmpDamage[1]); // Full damage
6928 int32 overkill = tmpDamage[0] + tmpDamage[1] - damageInfo->target->GetHealth();
6929 data << uint32(overkill < 0 ? 0 : overkill); // Overkill
6930 data << uint8(count); // Sub damage count
6931
6932 for (uint32 i = 0; i < count; ++i)
6933 {
6934 data << uint32(damageInfo->damages[i].damageSchoolMask); // School of sub damage
6935 data << float(tmpDamage[i]); // sub damage
6936 data << uint32(tmpDamage[i]); // Sub Damage
6937 }
6938
6940 {
6941 for (uint32 i = 0; i < count; ++i)
6942 {
6943 data << uint32(tmpAbsorb[i]); // Absorb
6944 }
6945 }
6946
6948 {
6949 for (uint32 i = 0; i < count; ++i)
6950 {
6951 data << uint32(damageInfo->damages[i].resist); // Resist
6952 }
6953 }
6954
6955 data << uint8(damageInfo->TargetState);
6956 data << uint32(0); // Unknown attackerstate
6957 data << uint32(0); // Melee spellid
6958
6959 if (damageInfo->HitInfo & HITINFO_BLOCK)
6960 data << uint32(damageInfo->blocked_amount);
6961
6962 if (damageInfo->HitInfo & HITINFO_RAGE_GAIN)
6963 data << uint32(0);
6964
6966 if (damageInfo->HitInfo & HITINFO_UNK1)
6967 {
6968 data << uint32(0);
6969 data << float(0);
6970 data << float(0);
6971 data << float(0);
6972 data << float(0);
6973 data << float(0);
6974 data << float(0);
6975 data << float(0);
6976 data << float(0);
6977 data << float(0); // Found in a loop with 1 iteration
6978 data << float(0); // ditto ^
6979 data << uint32(0);
6980 }
6981
6982 SendMessageToSet(&data, true);
6983}
@ HITINFO_RAGE_GAIN
Definition Unit.h:121
@ HITINFO_UNK1
Definition Unit.h:98
@ SMSG_ATTACKERSTATEUPDATE
Definition Opcodes.h:360

References CalcDamageInfo::absorb, CalcDamageInfo::attacker, CalcDamageInfo::blocked_amount, CHEAT_GOD, CalcDamageInfo::damage, CalcDamageInfo::damages, CalcDamageInfo::damageSchoolMask, Player::GetCommandStatus(), GetHealth(), Object::GetPackGUID(), CalcDamageInfo::HitInfo, HITINFO_BLOCK, HITINFO_FULL_ABSORB, HITINFO_FULL_RESIST, HITINFO_PARTIAL_ABSORB, HITINFO_PARTIAL_RESIST, HITINFO_RAGE_GAIN, HITINFO_UNK1, Object::IsPlayer(), LOG_DEBUG, MAX_ITEM_PROTO_DAMAGES, CalcDamageInfo::resist, WorldObject::SendMessageToSet(), SMSG_ATTACKERSTATEUPDATE, CalcDamageInfo::target, CalcDamageInfo::TargetState, and Object::ToPlayer().

Referenced by AttackerStateUpdate(), misc_commandscript::HandleDamageCommand(), spell_dk_dancing_rune_weapon::HandleProc(), and SendAttackStateUpdate().

◆ SendAttackStateUpdate() [2/2]

void Unit::SendAttackStateUpdate ( uint32  HitInfo,
Unit target,
uint8  SwingType,
SpellSchoolMask  damageSchoolMask,
uint32  Damage,
uint32  AbsorbDamage,
uint32  Resist,
VictimState  TargetState,
uint32  BlockedAmount 
)
6986{
6987 CalcDamageInfo dmgInfo;
6988 dmgInfo.HitInfo = HitInfo;
6989 dmgInfo.attacker = this;
6990 dmgInfo.target = target;
6991
6992 dmgInfo.damages[0].damage = Damage - AbsorbDamage - Resist - BlockedAmount;
6993 dmgInfo.damages[0].damageSchoolMask = damageSchoolMask;
6994 dmgInfo.damages[0].absorb = AbsorbDamage;
6995 dmgInfo.damages[0].resist = Resist;
6996
6997 dmgInfo.damages[1].damage = 0;
6998 dmgInfo.damages[1].damageSchoolMask = 0;
6999 dmgInfo.damages[1].absorb = 0;
7000 dmgInfo.damages[1].resist = 0;
7001
7002 dmgInfo.TargetState = TargetState;
7003 dmgInfo.blocked_amount = BlockedAmount;
7004 SendAttackStateUpdate(&dmgInfo);
7005}
HitInfo
Definition Unit.h:96

References CalcDamageInfo::absorb, CalcDamageInfo::attacker, CalcDamageInfo::blocked_amount, CalcDamageInfo::damage, CalcDamageInfo::damages, CalcDamageInfo::damageSchoolMask, CalcDamageInfo::HitInfo, CalcDamageInfo::resist, SendAttackStateUpdate(), CalcDamageInfo::target, and CalcDamageInfo::TargetState.

◆ SendClearTarget()

void Unit::SendClearTarget ( )
16261{
16263 data << GetPackGUID();
16264 SendMessageToSet(&data, false);
16265}
@ SMSG_BREAK_TARGET
Definition Opcodes.h:368

References Object::GetPackGUID(), WorldObject::SendMessageToSet(), and SMSG_BREAK_TARGET.

Referenced by Vehicle::AddPassenger(), and Spell::EffectForceDeselect().

◆ SendComboPoints()

void Unit::SendComboPoints ( )
13286{
13287 if (m_cleanupDone)
13288 {
13289 return;
13290 }
13291
13293 if (Player* playerMe = ToPlayer())
13294 {
13295 WorldPacket data(SMSG_UPDATE_COMBO_POINTS, packGUID.size() + 1);
13296 data << packGUID;
13297 data << uint8(m_comboPoints);
13298 playerMe->SendDirectMessage(&data);
13299 }
13300
13301 ObjectGuid ownerGuid = GetCharmerOrOwnerGUID();
13302 Player* owner = nullptr;
13303 if (ownerGuid.IsPlayer())
13304 {
13305 owner = ObjectAccessor::GetPlayer(*this, ownerGuid);
13306 }
13307
13308 if (m_movedByPlayer || owner)
13309 {
13310 WorldPacket data(SMSG_PET_UPDATE_COMBO_POINTS, GetPackGUID().size() + packGUID.size() + 1);
13311 data << GetPackGUID();
13312 data << packGUID;
13313 data << uint8(m_comboPoints);
13314
13315 if (m_movedByPlayer)
13317
13318 if (owner && owner != m_movedByPlayer)
13319 owner->SendDirectMessage(&data);
13320 }
13321}
Definition ObjectGuid.h:263
std::size_t size() const
Definition ObjectGuid.h:274
@ SMSG_PET_UPDATE_COMBO_POINTS
Definition Opcodes.h:1200
@ SMSG_UPDATE_COMBO_POINTS
Definition Opcodes.h:955

References GetCharmerOrOwnerGUID(), Object::GetPackGUID(), ObjectAccessor::GetPlayer(), ObjectGuid::IsPlayer(), m_cleanupDone, m_comboPoints, m_comboTarget, m_movedByPlayer, Player::SendDirectMessage(), PackedGuid::size(), SMSG_PET_UPDATE_COMBO_POINTS, SMSG_UPDATE_COMBO_POINTS, and Object::ToPlayer().

Referenced by AddComboPoints(), and ClearComboPoints().

◆ SendEnergizeSpellLog()

void Unit::SendEnergizeSpellLog ( Unit victim,
uint32  SpellID,
uint32  Damage,
Powers  powertype 
)
8381{
8382 WorldPacket data(SMSG_SPELLENERGIZELOG, (8 + 8 + 4 + 4 + 4 + 1));
8383 data << victim->GetPackGUID();
8384 data << GetPackGUID();
8385 data << uint32(spellID);
8386 data << uint32(powerType);
8387 data << uint32(damage);
8388 SendMessageToSet(&data, true);
8389}
@ SMSG_SPELLENERGIZELOG
Definition Opcodes.h:367

References Object::GetPackGUID(), WorldObject::SendMessageToSet(), and SMSG_SPELLENERGIZELOG.

Referenced by EnergizeBySpell(), and AuraEffect::HandlePeriodicTriggerSpellAuraTick().

◆ SendHealSpellLog()

void Unit::SendHealSpellLog ( HealInfo const &  healInfo,
bool  critical = false 
)
8348{
8349 uint32 overheal = healInfo.GetHeal() - healInfo.GetEffectiveHeal();
8350
8351 // we guess size
8352 WorldPacket data(SMSG_SPELLHEALLOG, (8 + 8 + 4 + 4 + 4 + 4 + 1 + 1));
8353 data << healInfo.GetTarget()->GetPackGUID();
8354 data << GetPackGUID();
8355 data << uint32(healInfo.GetSpellInfo()->Id);
8356 data << uint32(healInfo.GetHeal());
8357 data << uint32(overheal);
8358 data << uint32(healInfo.GetAbsorb()); // Absorb amount
8359 data << uint8(critical ? 1 : 0);
8360 data << uint8(0); // unused
8361 SendMessageToSet(&data, true);
8362}
@ SMSG_SPELLHEALLOG
Definition Opcodes.h:366

References HealInfo::GetAbsorb(), HealInfo::GetEffectiveHeal(), HealInfo::GetHeal(), Object::GetPackGUID(), HealInfo::GetSpellInfo(), HealInfo::GetTarget(), SpellInfo::Id, WorldObject::SendMessageToSet(), and SMSG_SPELLHEALLOG.

Referenced by HealBySpell().

◆ SendMeleeAttackStart()

void Unit::SendMeleeAttackStart ( Unit victim,
Player sendTo = nullptr 
)
3246{
3247 WorldPacket data(SMSG_ATTACKSTART, 8 + 8);
3248 data << GetGUID();
3249 data << victim->GetGUID();
3250 if (sendTo)
3251 sendTo->SendDirectMessage(&data);
3252 else
3253 SendMessageToSet(&data, true);
3254 LOG_DEBUG("entities.unit", "WORLD: Sent SMSG_ATTACKSTART");
3255}
@ SMSG_ATTACKSTART
Definition Opcodes.h:353

References Object::GetGUID(), Object::GetGUID(), LOG_DEBUG, Player::SendDirectMessage(), WorldObject::SendMessageToSet(), and SMSG_ATTACKSTART.

Referenced by Attack(), Player::GetInitialVisiblePackets(), and boss_leotheras_the_blind::Reset().

◆ SendMeleeAttackStop()

void Unit::SendMeleeAttackStop ( Unit victim = nullptr)

Send to the client SMSG_ATTACKSTOP but doesn't clear UNIT_STATE_MELEE_ATTACKING on server side or interrupt spells. Unless you know exactly what you're doing, use AttackStop() or RemoveAllAttackers() instead.

3262{
3263 // pussywizard: calling SendMeleeAttackStop without clearing UNIT_STATE_MELEE_ATTACKING and then AttackStart the same player may spoil npc rotating!
3264 // pussywizard: this happens in some boss scripts, just add clearing here
3265 // ClearUnitState(UNIT_STATE_MELEE_ATTACKING); // commented out for now
3266
3267 WorldPacket data(SMSG_ATTACKSTOP, (8 + 8 + 4));
3268 data << GetPackGUID();
3269
3270 if (victim)
3271 {
3272 data << victim->GetPackGUID();
3273 data << (uint32)victim->isDead();
3274 }
3275 SendMessageToSet(&data, true);
3276 LOG_DEBUG("entities.unit", "WORLD: Sent SMSG_ATTACKSTOP");
3277
3278 if (victim)
3279 LOG_DEBUG("entities.unit", "{} {} stopped attacking {} {}", (IsPlayer() ? "Player" : "Creature"), GetGUID().ToString(), (victim->IsPlayer() ? "player" : "creature"), victim->GetGUID().ToString());
3280 else
3281 LOG_DEBUG("entities.unit", "{} {} stopped attacking", (IsPlayer() ? "Player" : "Creature"), GetGUID().ToString());
3282}
bool isDead() const
Definition Unit.h:1796
@ SMSG_ATTACKSTOP
Definition Opcodes.h:354

References Object::GetGUID(), Object::GetGUID(), Object::GetPackGUID(), isDead(), Object::IsPlayer(), LOG_DEBUG, WorldObject::SendMessageToSet(), SMSG_ATTACKSTOP, and ObjectGuid::ToString().

Referenced by Attack(), AttackStop(), boss_garfrost::boss_garfrostAI::DamageTaken(), npc_ulduar_vx001::DamageTaken(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::GoToMinchar(), spell_svalna_revive_champion::Land(), boss_leotheras_the_blind::Reset(), SetControlled(), boss_razorscale::SpellHit(), boss_mr_smite::boss_mr_smiteAI::UpdateAI(), boss_onyxia::UpdateAI(), boss_krick::boss_krickAI::UpdateAI(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::UpdateAI(), boss_sindragosa::boss_sindragosaAI::UpdateAI(), npc_rimefang::npc_rimefangAI::UpdateAI(), boss_sapphiron::boss_sapphironAI::UpdateAI(), boss_malygos::UpdateAI(), boss_mimiron::UpdateAI(), and boss_razorscale::UpdateAI().

◆ SendMonsterMove()

void Unit::SendMonsterMove ( float  NewPosX,
float  NewPosY,
float  NewPosZ,
uint32  TransitTime,
SplineFlags  sf = SPLINEFLAG_WALK_MODE 
)
658{
659 WorldPacket data(SMSG_MONSTER_MOVE, 1 + 12 + 4 + 1 + 4 + 4 + 4 + 12 + GetPackGUID().size());
660 data << GetPackGUID();
661
662 data << uint8(0); // new in 3.1
663 data << GetPositionX() << GetPositionY() << GetPositionZ();
664 data << GameTime::GetGameTimeMS().count();
665 data << uint8(0);
666 data << uint32(sf);
667 data << TransitTime; // Time in between points
668 data << uint32(1); // 1 single waypoint
669 data << NewPosX << NewPosY << NewPosZ; // the single waypoint Point B
670
671 SendMessageToSet(&data, true);
672}
@ SMSG_MONSTER_MOVE
Definition Opcodes.h:251

References GameTime::GetGameTimeMS(), Object::GetPackGUID(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), WorldObject::SendMessageToSet(), and SMSG_MONSTER_MOVE.

◆ SendMovementFeatherFall()

void Unit::SendMovementFeatherFall ( Player sendTo)
16741{
16742 if (!movespline->Initialized())
16743 return;
16745 data << GetPackGUID();
16746 sendTo->SendDirectMessage(&data);
16747}
@ SMSG_SPLINE_MOVE_FEATHER_FALL
Definition Opcodes.h:803

References Object::GetPackGUID(), Movement::MoveSpline::Initialized(), movespline, Player::SendDirectMessage(), and SMSG_SPLINE_MOVE_FEATHER_FALL.

◆ SendMovementFlagUpdate()

void Unit::SendMovementFlagUpdate ( bool  self = false)
13093{
13094 if (IsRooted())
13095 {
13096 // each case where this occurs has to be examined and reported and dealt with.
13097 LOG_ERROR("Unit", "Attempted sending heartbeat with root flag for guid {}", GetGUID().ToString());
13098 return;
13099 }
13100
13101 WorldPacket data;
13102 BuildHeartBeatMsg(&data);
13103 SendMessageToSet(&data, self);
13104}
bool IsRooted() const
Definition Unit.h:1716
void BuildHeartBeatMsg(WorldPacket *data) const
Definition Object.cpp:2105

References BuildHeartBeatMsg(), Object::GetGUID(), IsRooted(), LOG_ERROR, WorldObject::SendMessageToSet(), and Position::ToString().

Referenced by boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::DoAction(), npc_ball_of_flame::npc_ball_of_flameAI::DoAction(), brann_bronzebeard::brann_bronzebeardAI::DoAction(), npc_madrigosa::DoAction(), boss_nightbane::EnterEvadeMode(), boss_kaelthas::ExecuteMiddleEvent(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::GoToMinchar(), debug_commandscript::HandleDebugMoveflagsCommand(), boss_felmyst::InitializeAI(), npc_strangulate_vehicle::npc_strangulate_vehicleAI::IsSummonedBy(), boss_harbinger_skyriss::JustSummoned(), MotionMaster::MoveFall(), npc_twilight_volunteer::MovementInform(), boss_volkhan::MovementInform(), boss_felmyst::MovementInform(), npc_eoe_wyrmrest_skytalon::PassengerBoarded(), npc_dancing_flames::npc_dancing_flamesAI::Reset(), boss_felmyst::ScheduleGroundAbilities(), SetCharm(), boss_devourer_of_souls::SpellHitTarget(), boss_felmyst::StartIntro(), boss_nightbane::TriggerHealthTakeOff(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::UpdateAI(), boss_onyxia::UpdateAI(), boss_anub_arak::UpdateAI(), boss_krick::boss_krickAI::UpdateAI(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::UpdateAI(), boss_sindragosa::boss_sindragosaAI::UpdateAI(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::UpdateAI(), boss_ignis::UpdateAI(), boss_ingvar_the_plunderer::UpdateAI(), boss_koralon::boss_koralonAI::UpdateAI(), and brann_bronzebeard::brann_bronzebeardAI::UpdateEscortAI().

◆ SendMovementHover()

void Unit::SendMovementHover ( Player sendTo)
16750{
16751 if (!movespline->Initialized())
16752 return;
16754 data << GetPackGUID();
16755 sendTo->SendDirectMessage(&data);
16756}
@ SMSG_SPLINE_MOVE_SET_HOVER
Definition Opcodes.h:805

References Object::GetPackGUID(), Movement::MoveSpline::Initialized(), movespline, Player::SendDirectMessage(), and SMSG_SPLINE_MOVE_SET_HOVER.

◆ SendMovementWaterWalking()

void Unit::SendMovementWaterWalking ( Player sendTo)
16732{
16733 if (!movespline->Initialized())
16734 return;
16736 data << GetPackGUID();
16737 sendTo->SendDirectMessage(&data);
16738}
@ SMSG_SPLINE_MOVE_WATER_WALK
Definition Opcodes.h:807

References Object::GetPackGUID(), Movement::MoveSpline::Initialized(), movespline, Player::SendDirectMessage(), and SMSG_SPLINE_MOVE_WATER_WALK.

◆ SendMoveRoot()

void Unit::SendMoveRoot ( bool  state)
protected
14498{
14499 const Player* client = GetClientControlling();
14500
14501 // Apply flags in-place when unit currently is not controlled by a player
14502 if (!client)
14503 {
14504 if (apply)
14505 {
14508 if (!client)
14509 StopMoving();
14510 }
14511 else
14513 }
14514
14515 if (!IsInWorld())
14516 return;
14517
14518 const PackedGuid& guid = GetPackGUID();
14519 // Wrath+ spline root: when unit is currently not controlled by a player
14520 if (!client)
14521 {
14522 WorldPacket data(apply ? SMSG_SPLINE_MOVE_ROOT : SMSG_SPLINE_MOVE_UNROOT, guid.size());
14523 data << guid;
14524 SendMessageToSet(&data, true);
14525 }
14526 // Wrath+ force root: when unit is controlled by a player
14527 else
14528 {
14529 uint32 const counter = client->GetSession()->GetOrderCounter();
14530
14531 WorldPacket data(apply ? SMSG_FORCE_MOVE_ROOT : SMSG_FORCE_MOVE_UNROOT, guid.size() + 4);
14532 data << guid;
14533 data << counter;
14534 client->GetSession()->SendPacket(&data);
14535 client->GetSession()->IncrementOrderCounter();
14536 }
14537}
@ MOVEMENTFLAG_MASK_MOVING_FLY
Definition UnitDefines.h:413
Player const * GetClientControlling() const
Definition Unit.cpp:17419
void SendPacket(WorldPacket const *packet)
Send a packet to the client.
Definition WorldSession.cpp:283
@ SMSG_FORCE_MOVE_UNROOT
Definition Opcodes.h:264
@ SMSG_FORCE_MOVE_ROOT
Definition Opcodes.h:262
@ SMSG_SPLINE_MOVE_UNROOT
Definition Opcodes.h:802
@ SMSG_SPLINE_MOVE_ROOT
Definition Opcodes.h:824
void AddMovementFlag(uint32 flag)
Definition Object.h:344

References MovementInfo::AddMovementFlag(), GetClientControlling(), WorldSession::GetOrderCounter(), Object::GetPackGUID(), Player::GetSession(), WorldSession::IncrementOrderCounter(), Object::IsInWorld(), WorldObject::m_movementInfo, MOVEMENTFLAG_MASK_MOVING_FLY, MOVEMENTFLAG_ROOT, MovementInfo::RemoveMovementFlag(), WorldObject::SendMessageToSet(), WorldSession::SendPacket(), PackedGuid::size(), SMSG_FORCE_MOVE_ROOT, SMSG_FORCE_MOVE_UNROOT, SMSG_SPLINE_MOVE_ROOT, SMSG_SPLINE_MOVE_UNROOT, and StopMoving().

Referenced by Player::BuildPlayerRepop(), Player::KillPlayer(), Player::ResurrectPlayer(), and SetRooted().

◆ SendPeriodicAuraLog()

void Unit::SendPeriodicAuraLog ( SpellPeriodicAuraLogInfo pInfo)
6809{
6810 AuraEffect const* aura = pInfo->auraEff;
6812 data << GetPackGUID();
6813 data << aura->GetCasterGUID().WriteAsPacked();
6814 data << uint32(aura->GetId()); // spellId
6815 data << uint32(1); // count
6816 data << uint32(aura->GetAuraType()); // auraId
6817 switch (aura->GetAuraType())
6818 {
6821 {
6822 //IF we are in cheat mode we swap absorb with damage and set damage to 0, this way we can still debug damage but our hp bar will not drop
6823 uint32 damage = pInfo->damage;
6824 uint32 absorb = pInfo->absorb;
6825 if (IsPlayer() && ToPlayer()->GetCommandStatus(CHEAT_GOD))
6826 {
6827 absorb = damage;
6828 damage = 0;
6829 }
6830
6831 data << uint32(damage); // damage
6832 data << uint32(pInfo->overDamage); // overkill?
6833 data << uint32(aura->GetSpellInfo()->GetSchoolMask());
6834 data << uint32(absorb); // absorb
6835 data << uint32(pInfo->resist); // resist
6836 data << uint8(pInfo->critical); // new 3.1.2 critical tick
6837 }
6838 break;
6841 data << uint32(pInfo->damage); // damage
6842 data << uint32(pInfo->overDamage); // overheal
6843 data << uint32(pInfo->absorb); // absorb
6844 data << uint8(pInfo->critical); // new 3.1.2 critical tick
6845 break;
6848 data << uint32(aura->GetMiscValue()); // power type
6849 data << uint32(pInfo->damage); // damage
6850 break;
6852 data << uint32(aura->GetMiscValue()); // power type
6853 data << uint32(pInfo->damage); // amount
6854 data << float(pInfo->multiplier); // gain multiplier
6855 break;
6856 default:
6857 LOG_ERROR("entities.unit", "Unit::SendPeriodicAuraLog: unknown aura {}", uint32(aura->GetAuraType()));
6858 return;
6859 }
6860
6861 SendMessageToSet(&data, true);
6862}
@ SPELL_AURA_OBS_MOD_HEALTH
Definition SpellAuraDefines.h:83
@ SPELL_AURA_PERIODIC_MANA_LEECH
Definition SpellAuraDefines.h:127
@ SPELL_AURA_OBS_MOD_POWER
Definition SpellAuraDefines.h:84
@ SPELL_AURA_PERIODIC_ENERGIZE
Definition SpellAuraDefines.h:87
PackedGuid WriteAsPacked() const
Definition ObjectGuid.h:316
@ SMSG_PERIODICAURALOG
Definition Opcodes.h:620
float multiplier
Definition Unit.h:540
bool critical
Definition Unit.h:541
uint32 overDamage
Definition Unit.h:537
uint32 resist
Definition Unit.h:539
uint32 damage
Definition Unit.h:536
AuraEffect const * auraEff
Definition Unit.h:535
uint32 absorb
Definition Unit.h:538

References SpellPeriodicAuraLogInfo::absorb, SpellPeriodicAuraLogInfo::auraEff, CHEAT_GOD, SpellPeriodicAuraLogInfo::critical, SpellPeriodicAuraLogInfo::damage, AuraEffect::GetAuraType(), AuraEffect::GetCasterGUID(), AuraEffect::GetId(), AuraEffect::GetMiscValue(), Object::GetPackGUID(), SpellInfo::GetSchoolMask(), AuraEffect::GetSpellInfo(), Object::IsPlayer(), LOG_ERROR, SpellPeriodicAuraLogInfo::multiplier, SpellPeriodicAuraLogInfo::overDamage, SpellPeriodicAuraLogInfo::resist, WorldObject::SendMessageToSet(), SMSG_PERIODICAURALOG, SPELL_AURA_OBS_MOD_HEALTH, SPELL_AURA_OBS_MOD_POWER, SPELL_AURA_PERIODIC_DAMAGE, SPELL_AURA_PERIODIC_DAMAGE_PERCENT, SPELL_AURA_PERIODIC_ENERGIZE, SPELL_AURA_PERIODIC_HEAL, SPELL_AURA_PERIODIC_MANA_LEECH, Object::ToPlayer(), and ObjectGuid::WriteAsPacked().

Referenced by AuraEffect::HandleObsModPowerAuraTick(), AuraEffect::HandlePeriodicDamageAurasTick(), AuraEffect::HandlePeriodicEnergizeAuraTick(), AuraEffect::HandlePeriodicHealAurasTick(), and AuraEffect::HandlePeriodicManaLeechAuraTick().

◆ SendPetActionFeedback()

void Unit::SendPetActionFeedback ( uint8  msg) const

-------—Pet responses methods--------------—

12998{
12999 Unit* owner = GetOwner();
13000 if (!owner || !owner->IsPlayer())
13001 return;
13002
13004 data << uint8(msg);
13005 owner->ToPlayer()->SendDirectMessage(&data);
13006}
@ SMSG_PET_ACTION_FEEDBACK
Definition Opcodes.h:740

References GetOwner(), Object::IsPlayer(), Player::SendDirectMessage(), SMSG_PET_ACTION_FEEDBACK, and Object::ToPlayer().

Referenced by WorldSession::HandlePetCancelAuraOpcode().

◆ SendPetActionSound()

void Unit::SendPetActionSound ( PetAction  action) const
13009{
13010 SendMessageToSet(WorldPackets::Pet::PetActionSound(GetGUID(), static_cast<int32>(action)).Write(), false);
13011}
Definition PetPackets.h:100

References Object::GetGUID(), and WorldObject::SendMessageToSet().

Referenced by WorldSession::HandlePetActionHelper().

◆ SendPetAIReaction()

void Unit::SendPetAIReaction ( ObjectGuid  guid) const
13020{
13021 Unit* owner = GetOwner();
13022 if (!owner || !owner->IsPlayer())
13023 return;
13024
13025 WorldPacket data(SMSG_AI_REACTION, 8 + 4);
13026 data << guid;
13027 data << uint32(AI_REACTION_HOSTILE);
13028 owner->ToPlayer()->SendDirectMessage(&data);
13029}
@ SMSG_AI_REACTION
Definition Opcodes.h:346

References AI_REACTION_HOSTILE, GetOwner(), Object::IsPlayer(), Player::SendDirectMessage(), SMSG_AI_REACTION, and Object::ToPlayer().

Referenced by PetAI::DoAttack(), and WorldSession::HandlePetActionHelper().

◆ SendPetDismissSound()

void Unit::SendPetDismissSound ( ) const
13014{
13015 if (CreatureDisplayInfoEntry const* displayInfo = sCreatureDisplayInfoStore.LookupEntry(GetNativeDisplayId()))
13016 SendMessageToSet(WorldPackets::Pet::PetDismissSound(static_cast<int32>(displayInfo->ModelId), GetPosition()).Write(), false);
13017}
Definition PetPackets.h:112
Position GetPosition() const
Definition Position.h:147

References GetNativeDisplayId(), Position::GetPosition(), sCreatureDisplayInfoStore, and WorldObject::SendMessageToSet().

Referenced by WorldSession::HandlePetActionHelper().

◆ SendPlaySpellImpact()

void Unit::SendPlaySpellImpact ( ObjectGuid  guid,
uint32  id 
)
15189{
15191 data << guid; // target
15192 data << uint32(id); // SpellVisualKit.dbc index
15193 SendMessageToSet(&data, true);
15194}
@ SMSG_PLAY_SPELL_IMPACT
Definition Opcodes.h:533

References WorldObject::SendMessageToSet(), and SMSG_PLAY_SPELL_IMPACT.

Referenced by debug_commandscript::HandleDebugVisualCommand().

◆ SendPlaySpellVisual()

void Unit::SendPlaySpellVisual ( uint32  id)

◆ SendSpellDamageImmune()

void Unit::SendSpellDamageImmune ( Unit target,
uint32  spellId 
)
6889{
6890 WorldPacket data(SMSG_SPELLORDAMAGE_IMMUNE, 8 + 8 + 4 + 1);
6891 data << GetGUID();
6892 data << target->GetGUID();
6893 data << uint32(spellId);
6894 data << uint8(0); // bool - log format: 0-default, 1-debug
6895 SendMessageToSet(&data, true);
6896}
@ SMSG_SPELLORDAMAGE_IMMUNE
Definition Opcodes.h:641

References Object::GetGUID(), Object::GetGUID(), WorldObject::SendMessageToSet(), and SMSG_SPELLORDAMAGE_IMMUNE.

Referenced by DealDamageShieldDamage(), Spell::EffectEnergize(), Spell::EffectEnergizePct(), Spell::EffectHealMaxHealth(), and AuraEffect::SendTickImmune().

◆ SendSpellDamageResist()

void Unit::SendSpellDamageResist ( Unit target,
uint32  spellId 
)
6879{
6880 WorldPacket data(SMSG_PROCRESIST, 8 + 8 + 4 + 1);
6881 data << GetGUID();
6882 data << target->GetGUID();
6883 data << uint32(spellId);
6884 data << uint8(0); // bool - log format: 0-default, 1-debug
6885 SendMessageToSet(&data, true);
6886}
@ SMSG_PROCRESIST
Definition Opcodes.h:638

References Object::GetGUID(), Object::GetGUID(), WorldObject::SendMessageToSet(), and SMSG_PROCRESIST.

◆ SendSpellMiss()

void Unit::SendSpellMiss ( Unit target,
uint32  spellID,
SpellMissInfo  missInfo 
)
6865{
6866 WorldPacket data(SMSG_SPELLLOGMISS, (4 + 8 + 1 + 4 + 8 + 1));
6867 data << uint32(spellID);
6868 data << GetGUID();
6869 data << uint8(0); // can be 0 or 1
6870 data << uint32(1); // target count
6871 // for (i = 0; i < target count; ++i)
6872 data << target->GetGUID(); // target GUID
6873 data << uint8(missInfo);
6874 // end loop
6875 SendMessageToSet(&data, true);
6876}
@ SMSG_SPELLLOGMISS
Definition Opcodes.h:617

References Object::GetGUID(), Object::GetGUID(), WorldObject::SendMessageToSet(), and SMSG_SPELLLOGMISS.

Referenced by DealDamageShieldDamage(), and Spell::DoAllEffectOnTarget().

◆ SendSpellNonMeleeDamageLog() [1/2]

void Unit::SendSpellNonMeleeDamageLog ( SpellNonMeleeDamage log)
6708{
6709 WorldPacket data(SMSG_SPELLNONMELEEDAMAGELOG, (16 + 4 + 4 + 4 + 1 + 4 + 4 + 1 + 1 + 4 + 4 + 1)); // we guess size
6710 //IF we are in cheat mode we swap absorb with damage and set damage to 0, this way we can still debug damage but our hp bar will not drop
6711 uint32 damage = log->damage;
6712 uint32 absorb = log->absorb;
6713 if (log->target->IsPlayer() && log->target->ToPlayer()->GetCommandStatus(CHEAT_GOD))
6714 {
6715 absorb = damage;
6716 damage = 0;
6717 }
6718 data << log->target->GetPackGUID();
6719 data << log->attacker->GetPackGUID();
6720 data << uint32(log->spellInfo->Id);
6721 data << uint32(damage); // damage amount
6722 int32 overkill = damage - log->target->GetHealth();
6723 data << uint32(overkill > 0 ? overkill : 0); // overkill
6724 data << uint8 (log->schoolMask); // damage school
6725 data << uint32(absorb); // AbsorbedDamage
6726 data << uint32(log->resist); // resist
6727 data << uint8 (log->physicalLog); // if 1, then client show spell name (example: %s's ranged shot hit %s for %u school or %s suffers %u school damage from %s's spell_name
6728 data << uint8 (log->unused); // unused
6729 data << uint32(log->blocked); // blocked
6730 data << uint32(log->HitInfo);
6732 //if (log->HitInfo & SPELL_HIT_TYPE_CRIT_DEBUG)
6733 //{
6734 // data << float(log->CritRoll);
6735 // data << float(log->CritNeeded);
6736 //}
6737 //if (log->HitInfo & SPELL_HIT_TYPE_HIT_DEBUG)
6738 //{
6739 // data << float(log->HitRoll);
6740 // data << float(log->HitNeeded);
6741 //}
6742 //if (log->HitInfo & SPELL_HIT_TYPE_ATTACK_TABLE_DEBUG)
6743 //{
6744 // data << float(log->MissChance);
6745 // data << float(log->DodgeChance);
6746 // data << float(log->ParryChance);
6747 // data << float(log->BlockChance);
6748 // data << float(log->GlanceChance);
6749 // data << float(log->CrushChance);
6750 //}
6751 SendMessageToSet(&data, true);
6752}
@ SPELL_HIT_TYPE_HIT_DEBUG
Definition SharedDefines.h:1541
@ SPELL_HIT_TYPE_ATTACK_TABLE_DEBUG
Definition SharedDefines.h:1544
@ SPELL_HIT_TYPE_CRIT_DEBUG
Definition SharedDefines.h:1539
@ SMSG_SPELLNONMELEEDAMAGELOG
Definition Opcodes.h:622
bool physicalLog
Definition Unit.h:522
bool unused
Definition Unit.h:523

References SpellNonMeleeDamage::absorb, SpellNonMeleeDamage::attacker, SpellNonMeleeDamage::blocked, CHEAT_GOD, SpellNonMeleeDamage::damage, Player::GetCommandStatus(), GetHealth(), Object::GetPackGUID(), SpellNonMeleeDamage::HitInfo, SpellInfo::Id, Object::IsPlayer(), SpellNonMeleeDamage::physicalLog, SpellNonMeleeDamage::resist, SpellNonMeleeDamage::schoolMask, WorldObject::SendMessageToSet(), SMSG_SPELLNONMELEEDAMAGELOG, SPELL_HIT_TYPE_ATTACK_TABLE_DEBUG, SPELL_HIT_TYPE_CRIT_DEBUG, SPELL_HIT_TYPE_HIT_DEBUG, SpellNonMeleeDamage::spellInfo, SpellNonMeleeDamage::target, Object::ToPlayer(), and SpellNonMeleeDamage::unused.

Referenced by CalcAbsorbResist(), DealDamage(), Spell::DoAllEffectOnTarget(), Spell::EffectEnvironmentalDMG(), spell_sindragosa_s_fury::HandleDummy(), AuraEffect::HandlePeriodicHealthLeechAuraTick(), AuraEffect::HandlePeriodicPowerBurnAuraTick(), AuraEffect::HandleProcTriggerDamageAuraProc(), and SendSpellNonMeleeDamageLog().

◆ SendSpellNonMeleeDamageLog() [2/2]

void Unit::SendSpellNonMeleeDamageLog ( Unit target,
SpellInfo const *  spellInfo,
uint32  Damage,
SpellSchoolMask  damageSchoolMask,
uint32  AbsorbedDamage,
uint32  Resist,
bool  PhysicalDamage,
uint32  Blocked,
bool  CriticalHit = false,
bool  Split = false 
)
6755{
6756 SpellNonMeleeDamage log(this, target, spellInfo, damageSchoolMask);
6757 log.damage = Damage;
6758 log.absorb = AbsorbedDamage;
6759 log.resist = Resist;
6760 log.physicalLog = PhysicalDamage;
6761 log.blocked = Blocked;
6762 log.HitInfo = 0;
6763 if (CriticalHit)
6764 {
6765 log.HitInfo |= SPELL_HIT_TYPE_CRIT;
6766 }
6767 if (Split)
6768 {
6769 log.HitInfo |= SPELL_HIT_TYPE_SPLIT;
6770 }
6772}
@ SPELL_HIT_TYPE_SPLIT
Definition SharedDefines.h:1542
Definition Unit.h:508

References SpellNonMeleeDamage::absorb, SpellNonMeleeDamage::blocked, SpellNonMeleeDamage::damage, SpellNonMeleeDamage::HitInfo, SpellNonMeleeDamage::physicalLog, SpellNonMeleeDamage::resist, SendSpellNonMeleeDamageLog(), SPELL_HIT_TYPE_CRIT, and SPELL_HIT_TYPE_SPLIT.

◆ SendSpellNonMeleeReflectLog()

void Unit::SendSpellNonMeleeReflectLog ( SpellNonMeleeDamage log,
Unit attacker 
)
6676{
6677 // Xinef: function for players only, placed in unit because of cosmetics
6678 if (!IsPlayer())
6679 return;
6680
6681 WorldPacket data(SMSG_SPELLNONMELEEDAMAGELOG, (16 + 4 + 4 + 4 + 1 + 4 + 4 + 1 + 1 + 4 + 4 + 1)); // we guess size
6682 // If we are in cheat mode we swap absorb with damage and set damage to 0, this way we can still debug damage but our HP bar will not drop
6683 uint32 damage = log->damage;
6684 uint32 absorb = log->absorb;
6685 if (log->target->IsPlayer() && log->target->ToPlayer()->GetCommandStatus(CHEAT_GOD))
6686 {
6687 absorb = damage;
6688 damage = 0;
6689 }
6690 data << log->target->GetPackGUID();
6691 data << attacker->GetPackGUID();
6692 data << uint32(log->spellInfo->Id);
6693 data << uint32(damage); // damage amount
6694 int32 overkill = damage - log->target->GetHealth();
6695 data << uint32(overkill > 0 ? overkill : 0); // overkill
6696 data << uint8 (log->schoolMask); // damage school
6697 data << uint32(absorb); // AbsorbedDamage
6698 data << uint32(log->resist); // resist
6699 data << uint8 (log->physicalLog); // if 1, then client show spell name (example: %s's ranged shot hit %s for %u school or %s suffers %u school damage from %s's spell_name
6700 data << uint8 (log->unused); // unused
6701 data << uint32(log->blocked); // blocked
6702 data << uint32(log->HitInfo);
6703 data << uint8 (0); // flag to use extend data
6704 ToPlayer()->SendDirectMessage(&data);
6705}

References SpellNonMeleeDamage::absorb, SpellNonMeleeDamage::blocked, CHEAT_GOD, SpellNonMeleeDamage::damage, Player::GetCommandStatus(), GetHealth(), Object::GetPackGUID(), SpellNonMeleeDamage::HitInfo, SpellInfo::Id, Object::IsPlayer(), SpellNonMeleeDamage::physicalLog, SpellNonMeleeDamage::resist, SpellNonMeleeDamage::schoolMask, Player::SendDirectMessage(), SMSG_SPELLNONMELEEDAMAGELOG, SpellNonMeleeDamage::spellInfo, SpellNonMeleeDamage::target, Object::ToPlayer(), and SpellNonMeleeDamage::unused.

Referenced by Spell::DoAllEffectOnTarget().

◆ SendTameFailure()

void Unit::SendTameFailure ( uint8  result)
15986{
15988 data << uint8(result);
15989 ToPlayer()->SendDirectMessage(&data);
15990}
@ SMSG_PET_TAME_FAILURE
Definition Opcodes.h:401

References Player::SendDirectMessage(), SMSG_PET_TAME_FAILURE, and Object::ToPlayer().

Referenced by spell_hun_tame_beast::CheckCast(), and Spell::CheckCast().

◆ SendTeleportPacket()

void Unit::SendTeleportPacket ( Position pos)
15993{
15995 if (IsCreature())
15996 Relocate(&pos);
15997 if (IsPlayer())
15998 {
15999 ToPlayer()->SetCanTeleport(true);
16000 }
16001 WorldPacket data2(MSG_MOVE_TELEPORT, 38);
16002 data2 << GetPackGUID();
16003 BuildMovementPacket(&data2);
16004 if (IsCreature())
16005 Relocate(&oldPos);
16006 if (IsPlayer())
16007 Relocate(&pos);
16008 SendMessageToSet(&data2, false);
16009}
@ MSG_MOVE_TELEPORT
Definition Opcodes.h:227

References BuildMovementPacket(), Position::GetOrientation(), Object::GetPackGUID(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), Object::IsCreature(), Object::IsPlayer(), MSG_MOVE_TELEPORT, Position::Relocate(), WorldObject::SendMessageToSet(), Player::SetCanTeleport(), and Object::ToPlayer().

Referenced by NearTeleportTo(), and Player::TeleportTo().

◆ SetAI()

void Unit::SetAI ( UnitAI newAI)
inline
694{ i_AI = newAI; }

References i_AI.

◆ SetAnimTier()

◆ SetArmor()

void Unit::SetArmor ( int32  val)
inline

◆ SetAttackTime()

◆ setAttackTimer()

◆ SetAuraStack()

void Unit::SetAuraStack ( uint32  spellId,
Unit target,
uint32  stack 
)
15172{
15173 Aura* aura = target->GetAura(spellId, GetGUID());
15174 if (!aura)
15175 aura = AddAura(spellId, target);
15176 if (aura && stack)
15177 aura->SetStackAmount(stack);
15178}
void SetStackAmount(uint8 num)
Definition SpellAuras.cpp:937

References AddAura(), GetAura(), Object::GetGUID(), and Aura::SetStackAmount().

Referenced by boss_viscidus::DamageTaken(), spell_capacitus_polarity_charge::HandleTargets(), spell_thaddius_pos_neg_charge::HandleTargets(), and BattlefieldWG::OnPlayerJoinWar().

◆ SetBaseWeaponDamage()

void Unit::SetBaseWeaponDamage ( WeaponAttackType  attType,
WeaponDamageRange  damageRange,
float  value,
uint8  damageIndex = 0 
)
inline
1211{ m_weaponDamage[attType][damageRange][damageIndex] = value; }

References m_weaponDamage.

Referenced by Player::_ApplyWeaponDamage(), Guardian::InitStatsForLevel(), and Creature::SelectLevel().

◆ SetCanDualWield()

virtual void Unit::SetCanDualWield ( bool  value)
inlinevirtual

◆ SetCanFly()

void Unit::SetCanFly ( bool  enable)

Add the movement flag: MOVEMENTFLAGCAN_FLY. Generaly only use by players, allowing them to fly by pressing space for example. For creatures, please look for DisableGravity().

Doesn't inform the client.

16567{
16568 bool isClientControlled = IsClientControlled();
16569
16570 if (!isClientControlled)
16571 {
16572 if (enable)
16574 else
16576 }
16577
16578 if (!IsInWorld()) // is sent on add to map
16579 return;
16580
16581 if (isClientControlled)
16582 {
16583 if (Player const* player = GetClientControlling())
16584 {
16585 uint32 const counter = player->GetSession()->GetOrderCounter();
16586 const_cast<Player*>(player)->SetPendingFlightChange(counter);
16587
16589 data << GetPackGUID();
16590 data << counter;
16591 player->SendDirectMessage(&data);
16592 player->GetSession()->IncrementOrderCounter();
16593 return;
16594 }
16595 }
16596
16598 data << GetPackGUID();
16599 SendMessageToSet(&data, true);
16600}
@ MOVEMENTFLAG_CAN_FLY
Definition UnitDefines.h:396
@ SMSG_SPLINE_MOVE_SET_FLYING
Definition Opcodes.h:1088
@ SMSG_MOVE_SET_CAN_FLY
Definition Opcodes.h:865
@ SMSG_SPLINE_MOVE_UNSET_FLYING
Definition Opcodes.h:1089
@ SMSG_MOVE_UNSET_CAN_FLY
Definition Opcodes.h:866

References MovementInfo::AddMovementFlag(), GetClientControlling(), Object::GetPackGUID(), IsClientControlled(), Object::IsInWorld(), WorldObject::m_movementInfo, MOVEMENTFLAG_CAN_FLY, MovementInfo::RemoveMovementFlag(), WorldObject::SendMessageToSet(), PackedGuid::size(), SMSG_MOVE_SET_CAN_FLY, SMSG_MOVE_UNSET_CAN_FLY, SMSG_SPLINE_MOVE_SET_FLYING, and SMSG_SPLINE_MOVE_UNSET_FLYING.

Referenced by boss_twin_valkyrAI::boss_twin_valkyrAI(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::DoAction(), npc_ball_of_flame::npc_ball_of_flameAI::DoAction(), npc_kalecgos_kj::DoAction(), boss_skadi_grauf::boss_skadi_graufAI::DoAction(), boss_nightbane::EnterEvadeMode(), boss_urom::boss_uromAI::EnterEvadeMode(), npc_pet_dk_ebon_gargoyle::FlyAway(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::GoToMinchar(), AuraEffect::HandleAuraAllowFlight(), AuraEffect::HandleAuraModIncreaseFlightSpeed(), debug_commandscript::HandleDebugMoveflagsCommand(), gm_commandscript::HandleGMFlyCommand(), WorldSession::HandleMoveKnockBackAck(), boss_felmyst::InitializeAI(), npc_pet_dk_ebon_gargoyle::InitializeAI(), npc_infra_green_bomber_generic::npc_infra_green_bomber_genericAI::IsSummonedBy(), boss_urom::boss_uromAI::JustDied(), boss_ayamiss::JustEngagedWith(), npc_icc_spire_frostwyrm::JustReachedHome(), brann_bronzebeard::brann_bronzebeardAI::JustSummoned(), boss_ingvar_the_plunderer::JustSummoned(), boss_kiljaeden::JustSummoned(), boss_onyxia::MovementInform(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::MovementInform(), npc_icc_spire_frostwyrm::MovementInform(), boss_nazan::MovementInform(), boss_felmyst::MovementInform(), npc_hallows_end_soh::MovementInform(), npc_pet_dk_ebon_gargoyle::MovementInform(), npc_alexstrasza::npc_alexstrasza(), npc_batrider::npc_batrider(), npc_concentrated_ball::npc_concentrated_ballAI::npc_concentrated_ballAI(), npc_pet_gen_moth::npc_pet_gen_moth(), spell_chapter5_light_of_dawn_aura::OnApply(), spell_chapter5_light_of_dawn_aura::OnRemove(), npc_vehicle_d16_propelled_delivery::npc_vehicle_d16_propelled_deliveryAI::PassengerBoarded(), npc_hover_disk::PassengerBoarded(), boss_nightbane::PathEndReached(), boss_nefarian::PathEndReached(), boss_nefarian::Reset(), boss_nightbane::Reset(), npc_image_of_medivh::npc_image_of_medivhAI::Reset(), npc_valkyr_battle_maiden::npc_valkyr_battle_maidenAI::Reset(), npc_hallows_end_soh::Reset(), boss_onyxia::Reset(), boss_ayamiss::Reset(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::Reset(), npc_icc_spire_frostwyrm::Reset(), npc_ulduar_mimiron_rocket::Reset(), boss_nazan::Reset(), boss_felmyst::ScheduleGroundAbilities(), instance_halls_of_reflection::SetData(), SmartAI::SetFly(), npc_simon_bunny::npc_simon_bunnyAI::SetGUID(), boss_urom::boss_uromAI::SpellHit(), boss_felmyst::StartIntro(), boss_nightbane::TriggerHealthTakeOff(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::UpdateAI(), boss_onyxia::UpdateAI(), npc_frost_sphere::npc_frost_sphereAI::UpdateAI(), boss_krick::boss_krickAI::UpdateAI(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::UpdateAI(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::UpdateAI(), boss_urom::boss_uromAI::UpdateAI(), boss_stormcaller_brundir::UpdateAI(), npc_conversing_with_the_depths_trigger::npc_conversing_with_the_depths_triggerAI::UpdateAI(), npc_pet_gen_wind_rider_cub::UpdateAI(), npc_batrider::UpdateAI(), and Creature::UpdateMovementFlags().

◆ SetCanModifyStats()

◆ SetCantProc()

void Unit::SetCantProc ( bool  apply)
13703{
13704 if (apply)
13705 ++m_procDeep;
13706 else
13707 {
13709 --m_procDeep;
13710 }
13711}

References ASSERT, and m_procDeep.

Referenced by TriggerAurasProcOnEvent().

◆ SetCharm()

void Unit::SetCharm ( Unit target,
bool  apply 
)
Todo:
: maybe we can use this flag to check if controlled by player
7987{
7988 if (apply)
7989 {
7990 if (IsPlayer())
7991 {
7992 if (!AddGuidValue(UNIT_FIELD_CHARM, charm->GetGUID()))
7993 LOG_FATAL("entities.unit", "Player {} is trying to charm unit {}, but it already has a charmed unit {}", GetName(), charm->GetEntry(), GetCharmGUID().ToString());
7994
7995 charm->m_ControlledByPlayer = true;
7997 charm->SetUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED);
7998 }
7999 else
8000 {
8001 charm->m_ControlledByPlayer = false;
8003 charm->RemoveUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED);
8004 }
8005
8006 // PvP, FFAPvP
8007 charm->SetByteValue(UNIT_FIELD_BYTES_2, 1, GetByteValue(UNIT_FIELD_BYTES_2, 1));
8008
8009 if (!charm->AddGuidValue(UNIT_FIELD_CHARMEDBY, GetGUID()))
8010 LOG_FATAL("entities.unit", "Unit {} is being charmed, but it already has a charmer {}", charm->GetEntry(), charm->GetCharmerGUID().ToString());
8011
8012 _isWalkingBeforeCharm = charm->IsWalking();
8014 {
8015 charm->SetWalk(false);
8016 charm->SendMovementFlagUpdate();
8017 }
8018
8019 m_Controlled.insert(charm);
8020 }
8021 else
8022 {
8023 charm->ClearUnitState(UNIT_STATE_CHARMED);
8024
8025 if (IsPlayer())
8026 {
8027 if (!RemoveGuidValue(UNIT_FIELD_CHARM, charm->GetGUID()))
8028 LOG_FATAL("entities.unit", "Player {} is trying to uncharm unit {}, but it has another charmed unit {}", GetName(), charm->GetEntry(), GetCharmGUID().ToString());
8029 }
8030
8031 if (!charm->RemoveGuidValue(UNIT_FIELD_CHARMEDBY, GetGUID()))
8032 LOG_FATAL("entities.unit", "Unit {} is being uncharmed, but it has another charmer {}", charm->GetEntry(), charm->GetCharmerGUID().ToString());
8033
8034 if (charm->IsPlayer())
8035 {
8036 charm->m_ControlledByPlayer = true;
8037 charm->SetUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED);
8038 charm->ToPlayer()->UpdatePvPState();
8039 }
8040 else if (Player* player = charm->GetCharmerOrOwnerPlayerOrPlayerItself())
8041 {
8042 charm->m_ControlledByPlayer = true;
8043 charm->SetUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED);
8044 charm->SetByteValue(UNIT_FIELD_BYTES_2, 1, player->GetByteValue(UNIT_FIELD_BYTES_2, 1));
8045
8046 // Xinef: skip controlled erase if charmed unit is owned by charmer
8047 if (charm->IsInWorld() && !charm->IsDuringRemoveFromWorld() && player->GetGUID() == this->GetGUID() && (charm->IsPet() || charm->HasUnitTypeMask(UNIT_MASK_MINION)))
8048 return;
8049 }
8050 else
8051 {
8052 charm->m_ControlledByPlayer = false;
8053 charm->RemoveUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED);
8054 charm->SetByteValue(UNIT_FIELD_BYTES_2, 1, 0);
8055 }
8056
8057 if (charm->IsWalking() != _isWalkingBeforeCharm)
8058 {
8059 charm->SetWalk(_isWalkingBeforeCharm);
8060 charm->SendMovementFlagUpdate(true); // send packet to self, to update movement state on player.
8061 }
8062
8063 m_Controlled.erase(charm);
8064 }
8065}
@ UNIT_STATE_CHARMED
Definition UnitDefines.h:175
bool AddGuidValue(uint16 index, ObjectGuid value)
Definition Object.cpp:675
bool RemoveGuidValue(uint16 index, ObjectGuid value)
Definition Object.cpp:693

References _isWalkingBeforeCharm, Object::AddGuidValue(), ClearUnitState(), Object::GetByteValue(), GetCharmerGUID(), GetCharmerOrOwnerPlayerOrPlayerItself(), GetCharmGUID(), Object::GetEntry(), Object::GetGUID(), Object::GetGUID(), WorldObject::GetName(), HasUnitFlag(), HasUnitTypeMask(), IsDuringRemoveFromWorld(), Object::IsInWorld(), IsPet(), Object::IsPlayer(), IsWalking(), LOG_FATAL, m_Controlled, m_ControlledByPlayer, Object::RemoveGuidValue(), RemoveUnitFlag(), SendMovementFlagUpdate(), Object::SetByteValue(), SetUnitFlag(), SetWalk(), Object::ToPlayer(), ObjectGuid::ToString(), Position::ToString(), UNIT_FIELD_BYTES_2, UNIT_FIELD_CHARM, UNIT_FIELD_CHARMEDBY, UNIT_FLAG_PLAYER_CONTROLLED, UNIT_MASK_MINION, UNIT_STATE_CHARMED, and Player::UpdatePvPState().

Referenced by RemoveCharmedBy(), SetCharmedBy(), and Player::StopCastingCharm().

◆ SetCharmedBy()

bool Unit::SetCharmedBy ( Unit charmer,
CharmType  type,
AuraApplication const *  aurApp = nullptr 
)
14615{
14616 if (!charmer)
14617 return false;
14618
14619 if (!charmer->IsInWorld() || charmer->IsDuringRemoveFromWorld())
14620 {
14621 return false;
14622 }
14623
14624 // dismount players when charmed
14625 if (IsPlayer() && type != CHARM_TYPE_POSSESS)
14627
14628 if (charmer->IsPlayer())
14630
14631 ASSERT(type != CHARM_TYPE_POSSESS || charmer->IsPlayer());
14632 if (type == CHARM_TYPE_VEHICLE && !IsVehicle()) // pussywizard
14633 throw 1;
14634 ASSERT((type == CHARM_TYPE_VEHICLE) == (GetVehicleKit() && GetVehicleKit()->IsControllableVehicle()));
14635
14636 LOG_DEBUG("entities.unit", "SetCharmedBy: charmer {} ({}), charmed {} ({}), type {}.",
14637 charmer->GetEntry(), charmer->GetGUID().ToString(), GetEntry(), GetGUID().ToString(), uint32(type));
14638
14639 if (this == charmer)
14640 {
14641 LOG_FATAL("entities.unit", "Unit::SetCharmedBy: Unit {} ({}) is trying to charm itself!", GetEntry(), GetGUID().ToString());
14642 return false;
14643 }
14644
14645 //if (HasUnitState(UNIT_STATE_UNATTACKABLE))
14646 // return false;
14647
14648 if (IsPlayer() && ToPlayer()->GetTransport())
14649 {
14650 LOG_FATAL("entities.unit", "Unit::SetCharmedBy: Player on transport is trying to charm {} ({})", GetEntry(), GetGUID().ToString());
14651 return false;
14652 }
14653
14654 // Already charmed
14655 if (GetCharmerGUID())
14656 {
14657 LOG_FATAL("entities.unit", "Unit::SetCharmedBy: {} ({}) has already been charmed but {} ({}) is trying to charm it!",
14658 GetEntry(), GetGUID().ToString(), charmer->GetEntry(), charmer->GetGUID().ToString());
14659 return false;
14660 }
14661
14662 CastStop();
14663 AttackStop();
14664
14665 Player* playerCharmer = charmer->ToPlayer();
14666
14667 // Charmer stop charming
14668 if (playerCharmer)
14669 {
14670 playerCharmer->StopCastingCharm(aurApp ? aurApp->GetBase() : nullptr);
14671 playerCharmer->StopCastingBindSight(aurApp ? aurApp->GetBase() : nullptr);
14672 }
14673
14674 // Charmed stop charming
14675 if (IsPlayer())
14676 {
14677 ToPlayer()->StopCastingCharm(aurApp ? aurApp->GetBase() : nullptr);
14678 ToPlayer()->StopCastingBindSight(aurApp ? aurApp->GetBase() : nullptr);
14679 }
14680
14681 // StopCastingCharm may remove a possessed pet?
14682 if (!IsInWorld())
14683 {
14684 LOG_FATAL("entities.unit", "Unit::SetCharmedBy: {} ({}) is not in world but {} ({}) is trying to charm it!",
14685 GetEntry(), GetGUID().ToString(), charmer->GetEntry(), charmer->GetGUID().ToString());
14686 return false;
14687 }
14688
14689 // charm is set by aura, and aura effect remove handler was called during apply handler execution
14690 // prevent undefined behaviour
14691 if (aurApp && aurApp->GetRemoveMode())
14692 return false;
14693
14695 SetFaction(charmer->GetFaction());
14696
14697 // Set charmed
14698 charmer->SetCharm(this, true);
14699
14701
14702 if (IsCreature())
14703 {
14704 GetMotionMaster()->Clear(false);
14706 StopMoving();
14707
14708 if (charmer->IsPlayer() && charmer->IsClass(CLASS_WARLOCK, CLASS_CONTEXT_PET_CHARM) && ToCreature()->GetCreatureTemplate()->type == CREATURE_TYPE_DEMON)
14709 {
14710 // Disable CreatureAI/SmartAI and switch to CharmAI when charmed by warlock
14711 Creature* charmed = ToCreature();
14712 charmed->NeedChangeAI = true;
14713 charmed->IsAIEnabled = false;
14714 }
14715 else
14716 {
14717 ToCreature()->AI()->OnCharmed(true);
14718 }
14719
14720 // Xinef: If creature can fly, add normal player flying flag (fixes speed)
14721 if (charmer->IsPlayer() && ToCreature()->CanFly())
14723 }
14724 else
14725 {
14726 Player* player = ToPlayer();
14727 if (player->isAFK())
14728 player->ToggleAFK();
14729
14730 player->SetClientControl(this, false); // verified
14731 }
14732
14733 // charm is set by aura, and aura effect remove handler was called during apply handler execution
14734 // prevent undefined behaviour
14735 if (aurApp && aurApp->GetRemoveMode())
14736 return false;
14737
14738 // Pets already have a properly initialized CharmInfo, don't overwrite it.
14739 // Xinef: I need charmInfo for vehicle
14740 if (/*type != CHARM_TYPE_VEHICLE &&*/ !GetCharmInfo())
14741 {
14742 InitCharmInfo();
14743 if (type == CHARM_TYPE_POSSESS)
14745 else if (type != CHARM_TYPE_VEHICLE)
14746 {
14748
14749 // Xinef: convert charm npcs dont have pet bar so initialize them as defensive helpers
14750 if (type == CHARM_TYPE_CONVERT && IsCreature())
14752 }
14753 }
14754
14755 if (playerCharmer)
14756 {
14757 switch (type)
14758 {
14759 case CHARM_TYPE_VEHICLE:
14762 playerCharmer->SetClientControl(this, true); // verified
14763 playerCharmer->VehicleSpellInitialize();
14764 break;
14765 case CHARM_TYPE_POSSESS:
14770 playerCharmer->SetClientControl(this, true); // verified
14771 playerCharmer->PossessSpellInitialize();
14772 break;
14773 case CHARM_TYPE_CHARM:
14775 {
14777 if (cinfo && cinfo->type == CREATURE_TYPE_DEMON)
14778 {
14779 // to prevent client crash
14781
14782 // just to enable stat window
14783 if (GetCharmInfo())
14784 GetCharmInfo()->SetPetNumber(sObjectMgr->GeneratePetNumber(), true);
14785
14786 // if charmed two demons the same session, the 2nd gets the 1st one's name
14787 SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, uint32(GameTime::GetGameTime().count())); // cast can't be helped
14788 }
14789 }
14790 if (playerCharmer->m_seer != this)
14791 {
14793 playerCharmer->CharmSpellInitialize();
14794 }
14795 break;
14796 default:
14797 break;
14798 }
14799 }
14800 else if (IsPlayer())
14802
14804
14805 if (Creature* creature = ToCreature())
14806 creature->RefreshSwimmingFlag();
14807
14808 if (IsPlayer())
14809 sScriptMgr->OnPlayerBeingCharmed(ToPlayer(), charmer, _oldFactionId, charmer->GetFaction());
14810
14811 return true;
14812}
@ CHARM_TYPE_CONVERT
Definition CharmInfo.h:48
@ CLASS_MAGE
Definition SharedDefines.h:133
@ REACT_DEFENSIVE
Definition Unit.h:567
@ UNIT_FIELD_PET_NAME_TIMESTAMP
Definition UpdateFields.h:133
void OnCharmed(bool apply) override
Called when unit is charmed.
Definition CreatureAI.cpp:36
void SetReactState(ReactStates state)
A creature can have 3 ReactStates : Agressive, Passive, Neutral.
Definition Creature.h:100
void MoveIdle()
Definition MotionMaster.cpp:234
void CharmSpellInitialize()
Definition Player.cpp:9673
WorldObject * m_seer
Definition Player.h:2369
void ToggleAFK()
Definition Player.cpp:1310
void PossessSpellInitialize()
Definition Player.cpp:9570
bool isAFK() const
Definition Player.h:1149
void VehicleSpellInitialize()
Definition Player.cpp:9598
void StopCastingBindSight(Aura *except=nullptr)
Definition Player.cpp:13182
void AddUnitMovementFlag(uint32 f)
Definition Unit.h:772
virtual float GetFollowAngle() const
Definition Unit.h:1896
CharmInfo * InitCharmInfo()
Definition Unit.cpp:12675
void InitPossessCreateSpells()
Definition CharmInfo.cpp:77
void InitCharmCreateSpells()
Definition CharmInfo.cpp:98

References _oldFactionId, AddUnitMovementFlag(), AddUnitState(), Creature::AI(), ASSERT, AttackStop(), CanFly(), CastStop(), CHARM_TYPE_CHARM, CHARM_TYPE_CONVERT, CHARM_TYPE_POSSESS, CHARM_TYPE_VEHICLE, Player::CharmSpellInitialize(), CLASS_CONTEXT_PET_CHARM, CLASS_MAGE, CLASS_WARLOCK, MotionMaster::Clear(), CREATURE_TYPE_DEMON, AuraApplication::GetBase(), GetCharmerGUID(), GetCharmInfo(), Creature::GetCreatureTemplate(), Object::GetEntry(), GetFaction(), GetFollowAngle(), GameTime::GetGameTime(), Object::GetGUID(), Object::GetGUID(), GetMotionMaster(), AuraApplication::GetRemoveMode(), WorldObject::GetTransport(), GetVehicleKit(), CharmInfo::InitCharmCreateSpells(), InitCharmInfo(), CharmInfo::InitPossessCreateSpells(), Player::isAFK(), IsAIEnabled, IsClass(), Object::IsCreature(), IsDuringRemoveFromWorld(), Object::IsInWorld(), Object::IsPlayer(), IsVehicle(), LOG_DEBUG, LOG_FATAL, Player::m_seer, MotionMaster::MoveFollow(), MotionMaster::MoveIdle(), MOVEMENTFLAG_FLYING, NeedChangeAI, CreatureAI::OnCharmed(), PET_FOLLOW_DIST, Player::PossessSpellInitialize(), REACT_DEFENSIVE, RemoveAurasByType(), Object::SetByteValue(), SetCharm(), Player::SetClientControl(), SetFaction(), CharmInfo::SetPetNumber(), Creature::SetReactState(), SetUInt32Value(), SetUnitFlag(), sObjectMgr, SPELL_AURA_MOD_SHAPESHIFT, SPELL_AURA_MOUNTED, sScriptMgr, StopAttackingInvalidTarget(), Player::StopCastingBindSight(), Player::StopCastingCharm(), StopMoving(), Object::ToCreature(), Player::ToggleAFK(), Object::ToPlayer(), ObjectGuid::ToString(), Position::ToString(), CreatureTemplate::type, UNIT_FIELD_BYTES_0, UNIT_FIELD_PET_NAME_TIMESTAMP, UNIT_FLAG_DISABLE_MOVE, UNIT_FLAG_POSSESSED, UNIT_STATE_CHARMED, UNIT_STATE_NO_ENVIRONMENT_UPD, UNIT_STATE_POSSESSED, and Player::VehicleSpellInitialize().

Referenced by Vehicle::AddPassenger(), AuraEffect::HandleCharmConvert(), AuraEffect::HandleModCharm(), AuraEffect::HandleModPossess(), AuraEffect::HandleModPossessPet(), and Puppet::InitSummon().

◆ SetCharmerGUID()

void Unit::SetCharmerGUID ( ObjectGuid  owner)
inline

◆ SetCombatTimer()

void Unit::SetCombatTimer ( uint32  timer)
inline
943{ m_CombatTimer = timer; }

References m_CombatTimer.

◆ SetConfused()

void Unit::SetConfused ( bool  apply)
protected
14583{
14584 if (apply)
14585 {
14586 SetTarget();
14588 }
14589 else
14590 {
14591 if (IsAlive())
14592 {
14593 if (GetMotionMaster()->GetMotionSlotType(MOTION_SLOT_CONTROLLED) == CONFUSED_MOTION_TYPE)
14594 {
14596 StopMoving();
14597 }
14598
14599 if (GetVictim())
14601 }
14602 }
14603
14604 // xinef: block / allow control to real mover (eg. charmer)
14605 if (IsPlayer())
14606 {
14607 if (m_movedByPlayer)
14608 m_movedByPlayer->ToPlayer()->SetClientControl(this, !apply); // verified
14609 //else
14610 // ToPlayer()->SetClientControl(this, !apply);
14611 }
14612}
@ CONFUSED_MOTION_TYPE
Definition MotionMaster.h:44
void MoveConfused()
Enable the confusion movement. Doesn't work with UNIT_FLAG_DISABLE_MOVE.
Definition MotionMaster.cpp:294

References CONFUSED_MOTION_TYPE, Object::GetGUID(), GetMotionMaster(), GetVictim(), IsAlive(), Object::IsPlayer(), m_movedByPlayer, MOTION_SLOT_CONTROLLED, MotionMaster::MoveConfused(), MotionMaster::MovementExpired(), Player::SetClientControl(), SetTarget(), StopMoving(), and Object::ToPlayer().

Referenced by SetControlled().

◆ SetContestedPvP()

void Unit::SetContestedPvP ( Player attackedPlayer = nullptr,
bool  lookForNearContestedGuards = true 
)
13665{
13667
13668 if (!player || ((attackedPlayer && (attackedPlayer == player || (player->duel && player->duel->Opponent == attackedPlayer))) || player->InBattleground()))
13669 return;
13670
13671 // check if there any guards that should care about the contested flag on player
13672 if (lookForNearContestedGuards)
13673 {
13674 std::list<Unit*> targets;
13677 Cell::VisitObjects(this, searcher, MAX_AGGRO_RADIUS);
13678
13679 // return if there are no contested guards found
13680 if (!targets.size())
13681 {
13682 return;
13683 }
13684 }
13685
13686 player->SetContestedPvPTimer(30000);
13688 {
13691 // call MoveInLineOfSight for nearby contested guards
13693 }
13695 {
13697 // call MoveInLineOfSight for nearby contested guards
13699 }
13700}
#define MAX_AGGRO_RADIUS
Definition Unit.h:43
void SetPlayerFlag(PlayerFlags flags)
Definition Player.h:1124
bool InBattleground() const
Definition Player.h:2287
void SetContestedPvPTimer(uint32 newTime)
Definition Player.h:1885

References WorldObject::AddToNotify(), AddUnitState(), Player::duel, GetCharmerOrOwnerPlayerOrPlayerItself(), HasUnitState(), Player::InBattleground(), MAX_AGGRO_RADIUS, NOTIFY_AI_RELOCATION, PLAYER_FLAGS_CONTESTED_PVP, Player::SetContestedPvPTimer(), Player::SetPlayerFlag(), UNIT_STATE_ATTACK_PLAYER, and Cell::VisitObjects().

Referenced by AtTargetAttacked(), Spell::DoSpellHitOnUnit(), and WorldSession::HandlePlayerLoginFromDB().

◆ SetControlled()

void Unit::SetControlled ( bool  apply,
UnitState  state,
Unit source = nullptr,
bool  isFear = false 
)
14310{
14311 if (apply)
14312 {
14313 if (HasUnitState(state))
14314 return;
14315
14316 AddUnitState(state);
14317 switch (state)
14318 {
14319 case UNIT_STATE_STUNNED:
14320 SetStunned(true);
14321 break;
14322 case UNIT_STATE_ROOT:
14324 SetRooted(true);
14325 break;
14328 {
14331 // SendAutoRepeatCancel ?
14332 SetConfused(true);
14333 CastStop(0, false);
14334 }
14335 break;
14336 case UNIT_STATE_FLEEING:
14338 {
14341 // SendAutoRepeatCancel ?
14342 SetFeared(true, source, isFear);
14343 CastStop(0, false);
14344 }
14345 break;
14346 default:
14347 break;
14348 }
14349
14350 if (IsPlayer())
14351 {
14352 sScriptMgr->AnticheatSetRootACKUpd(ToPlayer());
14353 }
14354 }
14355 else
14356 {
14357 // xinef: moved from below, checked all SetX functions, no calls to currently modified state
14358 // xinef: added to each case because of return
14359 //ClearUnitState(state);
14360
14361 switch (state)
14362 {
14363 case UNIT_STATE_STUNNED:
14364 if (HasStunAura())
14365 return;
14366 ClearUnitState(state);
14367 SetStunned(false);
14368 break;
14369 case UNIT_STATE_ROOT:
14370 // Prevent creature_template_movement rooted flag from being removed on aura expiration.
14371 if (IsCreature())
14372 {
14373 if (ToCreature()->GetCreatureTemplate()->Movement.Rooted)
14374 {
14375 return;
14376 }
14377 }
14378
14379 if (HasRootAura() || GetVehicle())
14380 return;
14381 ClearUnitState(state);
14382 SetRooted(false);
14383 break;
14385 if (HasConfuseAura())
14386 return;
14387 ClearUnitState(state);
14388 SetConfused(false);
14389 break;
14390 case UNIT_STATE_FLEEING:
14391 if (HasFearAura())
14392 return;
14393 ClearUnitState(state);
14394 SetFeared(false);
14395 break;
14396 default:
14397 return;
14398 }
14399
14400 //ClearUnitState(state);
14401
14403 SetStunned(true);
14404 else
14405 {
14407 SetRooted(true);
14408
14410 SetConfused(true);
14412 {
14413 bool isFear = false;
14414 if (HasFearAura())
14415 {
14416 isFear = true;
14417 source = ObjectAccessor::GetUnit(*this, GetAuraEffectsByType(SPELL_AURA_MOD_FEAR).front()->GetCasterGUID());
14418 }
14419
14420 if (!source)
14421 {
14422 source = getAttackerForHelper();
14423 }
14424
14425 SetFeared(true, source, isFear);
14426 }
14427 }
14428 }
14429}
void SetFeared(bool apply, Unit *fearedBy=nullptr, bool isFear=false)
Definition Unit.cpp:14550
bool HasStunAura() const
Definition Unit.h:1840
void SetConfused(bool apply)
Definition Unit.cpp:14582
void SetStunned(bool apply)
Definition Unit.cpp:14431
Unit * getAttackerForHelper() const
Definition Unit.cpp:872
bool HasConfuseAura() const
Definition Unit.h:1838
void SetRooted(bool apply, bool stun=false, bool logout=false)
Definition Unit.cpp:14477
bool HasRootAura() const
Definition Unit.h:1839
bool HasFearAura() const
Definition Unit.h:1837
Definition Unit.h:263

References AddUnitState(), CastStop(), ClearUnitState(), getAttackerForHelper(), GetAuraEffectsByType(), ObjectAccessor::GetUnit(), GetVehicle(), HasConfuseAura(), HasFearAura(), HasRootAura(), HasStunAura(), HasUnitState(), Object::IsCreature(), Object::IsPlayer(), SendMeleeAttackStop(), SetConfused(), SetFeared(), SetRooted(), SetStunned(), SPELL_AURA_MOD_FEAR, sScriptMgr, Object::ToCreature(), Object::ToPlayer(), UNIT_STATE_CONFUSED, UNIT_STATE_FLEEING, UNIT_STATE_MELEE_ATTACKING, UNIT_STATE_ROOT, and UNIT_STATE_STUNNED.

Referenced by _ExitVehicle(), Vehicle::AddPassenger(), boss_ahune::boss_ahune(), boss_ouro::boss_ouro(), boss_black_knight::boss_black_knightAI::DamageTaken(), boss_ingvar_the_plunderer::DamageTaken(), npc_vrykul_skeleton::DamageTaken(), npc_blistering_zombie::npc_blistering_zombieAI::DamageTaken(), npc_molten_golem::DamageTaken(), boss_twinemperorsAI::DoAction(), npc_twilight_volunteer::DoAction(), npc_terenas_menethil::npc_terenas_menethilAI::DoAction(), npc_black_knight_skeletal_gryphon::npc_black_knight_skeletal_gryphonAI::DoAction(), boss_thaddius_summon::boss_thaddius_summonAI::DoAction(), boss_yoggsaron::DoAction(), boss_palehoof::boss_palehoofAI::DoAction(), boss_illidan_stormrage::DoAction(), npc_akama_illidan::DoAction(), Creature::DoFleeToGetAssistance(), boss_skeram::DoTeleport(), CritterAI::EnterEvadeMode(), boss_devourer_of_souls::EnterEvadeMode(), boss_falric::EnterEvadeMode(), boss_garfrost::boss_garfrostAI::EnterEvadeMode(), boss_rotface::boss_rotfaceAI::EnterEvadeMode(), boss_noth::boss_nothAI::EnterEvadeMode(), boss_thaddius_summon::boss_thaddius_summonAI::EnterEvadeMode(), boss_urom::boss_uromAI::EnterEvadeMode(), boss_varos::boss_varosAI::EnterEvadeMode(), boss_ignis::EnterEvadeMode(), boss_razorscale::EnterEvadeMode(), boss_ingvar_the_plunderer::EnterEvadeMode(), boss_svala::boss_svalaAI::EnterEvadeMode(), boss_cyanigosa::EnterEvadeMode(), boss_shirrak_the_dead_watcher::EnterEvadeMode(), boss_cyanigosa::ExecuteEvent(), spell_boss_magus_telestra_summon_telestra_clones_aura::HandleApply(), AuraEffect::HandleAuraModRoot(), AuraEffect::HandleAuraModStun(), debug_commandscript::HandleDebugMoveflagsCommand(), spell_q13007_iron_colossus::HandleDummy(), spell_herald_volzaj_insanity::HandleDummyEffect(), spell_mc_play_dead_aura::HandleEffectApply(), spell_gen_visual_dummy_stun::HandleEffectApply(), spell_q11396_11399_force_shield_arcane_purple_x3::HandleEffectApply(), spell_mc_play_dead_aura::HandleEffectRemove(), spell_gen_visual_dummy_stun::HandleEffectRemove(), AuraEffect::HandleModConfuse(), AuraEffect::HandleModFear(), AuraEffect::HandlePreventFleeing(), spell_boss_magus_telestra_summon_telestra_clones_aura::HandleRemove(), boss_volazj::JustDied(), CritterAI::JustEngagedWith(), boss_shirrak_the_dead_watcher::JustEngagedWith(), boss_skeram::JustSummoned(), npc_twilight_volunteer::MovementInform(), boss_garfrost::boss_garfrostAI::MovementInform(), boss_volkhan::MovementInform(), boss_razorscale::MovementInform(), boss_illidan_stormrage::MovementInform(), npc_gunship_mage::npc_gunship_mageAI::MovementInform(), npc_gunship_gunner::npc_gunship_gunnerAI::MovementInform(), npc_gunship_rocketeer::npc_gunship_rocketeerAI::MovementInform(), npc_ball_of_flame::npc_ball_of_flameAI::MovementInform(), npc_hodirs_fury::MovementInform(), npc_iron_watcher::npc_iron_watcherAI::MovementInform(), npc_buru_egg::npc_buru_egg(), npc_icc_blood_beast::npc_icc_blood_beastAI::npc_icc_blood_beastAI(), npc_overlord_drakuru_betrayal::npc_overlord_drakuru_betrayal(), npc_raging_spirit::npc_raging_spiritAI::npc_raging_spiritAI(), npc_vengeful_shade::npc_vengeful_shadeAI::npc_vengeful_shadeAI(), spell_systems_shutdown_aura::OnApply(), spell_systems_shutdown_aura::OnRemove(), npc_akama_illidan::PathEndReached(), boss_ragnaros::Reset(), boss_skeram::Reset(), boss_volazj::Reset(), npc_twilight_summon::Reset(), boss_devourer_of_souls::Reset(), boss_falric::Reset(), boss_garfrost::boss_garfrostAI::Reset(), boss_noth::boss_nothAI::Reset(), boss_thaddius::boss_thaddiusAI::Reset(), boss_thaddius_summon::boss_thaddius_summonAI::Reset(), boss_varos::boss_varosAI::Reset(), boss_ignis::Reset(), boss_thorim_pillar::Reset(), boss_xt002::Reset(), boss_yoggsaron_immortal_guardian::Reset(), boss_ingvar_the_plunderer::Reset(), boss_palehoof::boss_palehoofAI::Reset(), npc_tournament_training_dummy::npc_tournament_training_dummyAI::Reset(), npc_iron_watcher::npc_iron_watcherAI::Reset(), boss_shirrak_the_dead_watcher::Reset(), boss_illidan_stormrage::Reset(), npc_akama_illidan::Reset(), npc_target_dummy::Reset(), boss_illidan_stormrage::ScheduleAbilities(), Player::SetClientControl(), boss_urom::boss_uromAI::SpellHit(), boss_black_knight::boss_black_knightAI::SpellHitTarget(), npc_vengeful_shade::npc_vengeful_shadeAI::SpellHitTarget(), boss_volkhan::SpellHitTarget(), boss_devourer_of_souls::SpellHitTarget(), boss_ionar::Split(), boss_noth::boss_nothAI::StartBalconyPhase(), boss_noth::boss_nothAI::StartGroundPhase(), boss_skeram::UpdateAI(), boss_volazj::UpdateAI(), boss_falric::UpdateAI(), npc_icc_blood_beast::npc_icc_blood_beastAI::UpdateAI(), npc_vengeful_shade::npc_vengeful_shadeAI::UpdateAI(), boss_rotface::boss_rotfaceAI::UpdateAI(), boss_sindragosa::boss_sindragosaAI::UpdateAI(), npc_raging_spirit::npc_raging_spiritAI::UpdateAI(), npc_terenas_menethil::npc_terenas_menethilAI::UpdateAI(), boss_thaddius::boss_thaddiusAI::UpdateAI(), boss_thaddius_summon::boss_thaddius_summonAI::UpdateAI(), boss_urom::boss_uromAI::UpdateAI(), boss_varos::boss_varosAI::UpdateAI(), boss_ionar::UpdateAI(), npc_hodirs_fury::UpdateAI(), boss_ignis::UpdateAI(), boss_razorscale::UpdateAI(), boss_xt002::UpdateAI(), boss_yoggsaron_immortal_guardian::UpdateAI(), boss_ingvar_the_plunderer::UpdateAI(), npc_vrykul_skeleton::UpdateAI(), boss_palehoof::boss_palehoofAI::UpdateAI(), boss_svala::boss_svalaAI::UpdateAI(), npc_tournament_training_dummy::npc_tournament_training_dummyAI::UpdateAI(), npc_target_dummy::UpdateAI(), Creature::UpdateEntry(), and npc_black_knight_skeletal_gryphon::npc_black_knight_skeletal_gryphonAI::WaypointReached().

◆ SetCreateHealth()

◆ SetCreateMana()

◆ SetCreateStat()

void Unit::SetCreateStat ( Stats  stat,
float  val 
)
inline

◆ SetCreatorGUID()

◆ SetCritterGUID()

void Unit::SetCritterGUID ( ObjectGuid  guid)
inline

◆ SetCurrentCastedSpell()

void Unit::SetCurrentCastedSpell ( Spell pSpell)
4153{
4154 ASSERT(pSpell); // nullptr may be never passed here, use InterruptSpell or InterruptNonMeleeSpells
4155
4156 CurrentSpellTypes CSpellType = pSpell->GetCurrentContainer();
4157
4158 if (pSpell == m_currentSpells[CSpellType]) // avoid breaking self
4159 return;
4160
4161 bool bySelf = m_currentSpells[CSpellType] && m_currentSpells[CSpellType]->m_spellInfo->Id == pSpell->m_spellInfo->Id;
4162
4163 // break same type spell if it is not delayed
4164 InterruptSpell(CSpellType, false, true, bySelf);
4165
4166 // special breakage effects:
4167 switch (CSpellType)
4168 {
4170 {
4171 // generic spells always break channeled not delayed spells
4173 {
4174 if (!s->GetSpellInfo()->IsActionAllowedChannel())
4175 {
4177 }
4178 }
4179
4180 // autorepeat breaking
4182 {
4183 // break autorepeat if not Auto Shot
4184 if (m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_spellInfo->Id != 75)
4186 m_AutoRepeatFirstCast = true;
4187 }
4188
4189 // melee spells breaking
4191 {
4192 // break melee spells if cast time
4193 if (pSpell->GetCastTime() > 0)
4194 {
4196 }
4197 }
4198 if (pSpell->GetCastTime() > 0)
4200
4201 break;
4202 }
4204 {
4205 // channel spells always break generic non-delayed and any channeled spells
4207 InterruptSpell(CURRENT_CHANNELED_SPELL, true, true, bySelf);
4208
4209 // it also does break autorepeat if not Auto Shot
4211 m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_spellInfo->Id != 75)
4214
4215 break;
4216 }
4218 {
4219 // only Auto Shoot does not break anything
4220 if (pSpell->m_spellInfo->Id != 75)
4221 {
4222 // generic autorepeats break generic non-delayed and channeled non-delayed spells
4224 {
4225 if (!s->GetSpellInfo()->IsActionAllowedChannel())
4226 {
4228 }
4229 }
4230
4232 }
4233 // special action: set first cast flag
4234 m_AutoRepeatFirstCast = true;
4235
4236 break;
4237 }
4238
4239 default:
4240 // other spell types don't break anything now
4241 break;
4242 }
4243
4244 // current spell (if it is still here) may be safely deleted now
4245 if (m_currentSpells[CSpellType])
4246 m_currentSpells[CSpellType]->SetReferencedFromCurrent(false);
4247
4248 // set new current spell
4249 m_currentSpells[CSpellType] = pSpell;
4250 pSpell->SetReferencedFromCurrent(true);
4251
4252 pSpell->m_selfContainer = &(m_currentSpells[pSpell->GetCurrentContainer()]);
4253}
CurrentSpellTypes GetCurrentContainer() const
Definition Spell.cpp:7930
Spell ** m_selfContainer
Definition Spell.h:631

References AddUnitState(), ASSERT, CURRENT_AUTOREPEAT_SPELL, CURRENT_CHANNELED_SPELL, CURRENT_GENERIC_SPELL, CURRENT_MELEE_SPELL, Spell::GetCastTime(), Spell::GetCurrentContainer(), GetCurrentSpell(), SpellInfo::Id, InterruptSpell(), m_AutoRepeatFirstCast, m_currentSpells, Spell::m_selfContainer, Spell::m_spellInfo, Spell::SetReferencedFromCurrent(), and UNIT_STATE_CASTING.

Referenced by Spell::prepare().

◆ setDeathState()

void Unit::setDeathState ( DeathState  s,
bool  despawn = false 
)
virtual

Reimplemented in Creature, Minion, Pet, and Player.

11377{
11378 // death state needs to be updated before RemoveAllAurasOnDeath() calls HandleChannelDeathItem(..) so that
11379 // it can be used to check creation of death items (such as soul shards).
11380 m_deathState = s;
11381
11383 {
11384 CombatStop();
11385 ClearComboPointHolders(); // any combo points pointed to unit lost at it death
11386
11387 if (IsNonMeleeSpellCast(false))
11389
11390 UnsummonAllTotems(true);
11391 RemoveAllControlled(true);
11393 }
11394
11395 if (s == DeathState::JustDied)
11396 {
11397 // remove aurastates allowing special moves
11400
11401 GetMotionMaster()->Clear(false);
11403
11404 // Xinef: Remove Hover so the corpse can fall to the ground
11405 SetHover(false);
11406
11407 if (despawn)
11408 DisableSpline();
11409 else
11410 StopMoving();
11411
11412 // without this when removing IncreaseMaxHealth aura player may stuck with 1 hp
11413 // do not why since in IncreaseMaxHealth currenthealth is checked
11414 SetHealth(0);
11415 SetPower(getPowerType(), 0);
11416
11417 // Stop emote on death
11419
11420 // players in instance don't have ZoneScript, but they have InstanceScript
11422 zoneScript->OnUnitDeath(this);
11423 }
11424 else if (s == DeathState::JustRespawned)
11425 {
11426 RemoveFlag (UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); // clear skinnable for creature and player (at battleground)
11427 }
11428}
@ UNIT_FLAG_SKINNABLE
Definition UnitDefines.h:283
void SetHover(bool enable)
Definition Unit.cpp:16643
void ClearAllReactives()
Definition Unit.cpp:13331
void ClearDiminishings()
Definition Unit.h:1863
InstanceScript * GetInstanceScript() const
Definition Object.cpp:1238
ZoneScript * GetZoneScript() const
Definition Object.h:631
Definition ZoneScript.h:26

References Alive, MotionMaster::Clear(), ClearAllReactives(), ClearComboPointHolders(), ClearDiminishings(), CombatStop(), DisableSpline(), WorldObject::GetInstanceScript(), GetMotionMaster(), getPowerType(), WorldObject::GetZoneScript(), InterruptNonMeleeSpells(), IsNonMeleeSpellCast(), JustDied, JustRespawned, m_deathState, MotionMaster::MoveIdle(), RemoveAllAurasOnDeath(), RemoveAllControlled(), Object::RemoveFlag(), SetHealth(), SetHover(), SetPower(), SetUInt32Value(), StopMoving(), UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE, UNIT_NPC_EMOTESTATE, and UnsummonAllTotems().

Referenced by _ExitVehicle(), KillMagnetEvent::Execute(), Spell::finish(), WorldSession::HandlePetActionHelper(), AuraEffect::HandleSpiritOfRedemption(), Kill(), Creature::setDeathState(), and Player::setDeathState().

◆ SetDisableGravity()

void Unit::SetDisableGravity ( bool  disable)
16507{
16508 bool isClientControlled = IsClientControlled();
16509
16510 if (!isClientControlled)
16511 {
16512 if (enable)
16514 else
16516 }
16517
16518 if (!IsInWorld()) // is sent on add to map
16519 return;
16520
16521 if (isClientControlled)
16522 {
16523 if (Player const* player = GetClientControlling())
16524 {
16525 uint32 const counter = player->GetSession()->GetOrderCounter();
16526
16528 data << GetPackGUID();
16529 data << counter;
16530 player->GetSession()->SendPacket(&data);
16531 player->GetSession()->IncrementOrderCounter();
16532 return;
16533 }
16534 }
16535
16537 data << GetPackGUID();
16538 SendMessageToSet(&data, true);
16539}
@ SMSG_SPLINE_MOVE_GRAVITY_DISABLE
Definition Opcodes.h:1265
@ SMSG_MOVE_GRAVITY_DISABLE
Definition Opcodes.h:1260
@ SMSG_MOVE_GRAVITY_ENABLE
Definition Opcodes.h:1262
@ SMSG_SPLINE_MOVE_GRAVITY_ENABLE
Definition Opcodes.h:1266

References MovementInfo::AddMovementFlag(), GetClientControlling(), Object::GetPackGUID(), IsClientControlled(), Object::IsInWorld(), WorldObject::m_movementInfo, MOVEMENTFLAG_DISABLE_GRAVITY, MovementInfo::RemoveMovementFlag(), WorldObject::SendMessageToSet(), PackedGuid::size(), SMSG_MOVE_GRAVITY_DISABLE, SMSG_MOVE_GRAVITY_ENABLE, SMSG_SPLINE_MOVE_GRAVITY_DISABLE, and SMSG_SPLINE_MOVE_GRAVITY_ENABLE.

Referenced by boss_twin_valkyrAI::boss_twin_valkyrAI(), boss_yoggsaron_brain::boss_yoggsaron_brain(), boss_the_lurker_below::DamageTaken(), boss_the_lich_king::boss_the_lich_kingAI::DamageTaken(), boss_nightbane::DoAction(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::DoAction(), boss_taldaram::DoAction(), npc_ball_of_flame::npc_ball_of_flameAI::DoAction(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::DoAction(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::DoAction(), boss_sindragosa::boss_sindragosaAI::DoAction(), boss_algalon_the_observer::DoAction(), npc_madrigosa::DoAction(), boss_kalecgos::DoAction(), npc_kalecgos_kj::DoAction(), npc_ulduar_aerial_command_unit::DoAction(), boss_skadi_grauf::boss_skadi_graufAI::DoAction(), boss_illidan_stormrage::DoAction(), boss_nightbane::EnterEvadeMode(), boss_malygos::EnterEvadeMode(), boss_urom::boss_uromAI::EnterEvadeMode(), boss_razorscale::EnterEvadeMode(), boss_kaelthas::ExecuteMiddleEvent(), npc_pet_dk_ebon_gargoyle::FlyAway(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::GoToMinchar(), npc_anachronos_the_ancient::npc_anachronos_the_ancientAI::HandleAnimation(), debug_commandscript::HandleDebugMoveflagsCommand(), spell_gen_gryphon_wyvern_mount_check::HandleEffectPeriodic(), boss_sartharion_dragonAI::HandleExtraEvent(), spell_the_lich_king_valkyr_target_search::HandleScript(), boss_felmyst::InitializeAI(), boss_taldaram::InitializeAI(), npc_icc_nerubar_broodkeeper::npc_icc_nerubar_broodkeeperAI::InitializeAI(), boss_razorscale::InitializeAI(), npc_pet_dk_ebon_gargoyle::InitializeAI(), boss_urom::boss_uromAI::JustDied(), boss_kologarn::JustDied(), boss_ayamiss::JustEngagedWith(), boss_jeklik::JustEngagedWith(), boss_saviana_ragefire::boss_saviana_ragefireAI::JustReachedHome(), npc_spinestalker::npc_spinestalkerAI::JustReachedHome(), npc_rimefang::npc_rimefangAI::JustReachedHome(), boss_sister_svalna::boss_sister_svalnaAI::JustReachedHome(), npc_icc_spire_frostwyrm::JustReachedHome(), boss_ingvar_the_plunderer::JustSummoned(), boss_kiljaeden::JustSummoned(), npc_icc_gauntlet_controller::npc_icc_gauntlet_controllerAI::JustSummoned(), npc_lady_sylvanas_windrunner::npc_lady_sylvanas_windrunnerAI::JustSummoned(), boss_algalon_the_observer::MovementInform(), npc_enslaved_netherwing_drake::MovementInform(), boss_onyxia::MovementInform(), boss_ayamiss::MovementInform(), boss_taldaram::MovementInform(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::MovementInform(), boss_sister_svalna::boss_sister_svalnaAI::MovementInform(), npc_icc_spire_frostwyrm::MovementInform(), npc_icc_nerubar_broodkeeper::npc_icc_nerubar_broodkeeperAI::MovementInform(), boss_malygos::MovementInform(), npc_oculus_drake::npc_oculus_drakeAI::MovementInform(), boss_razorscale::MovementInform(), boss_illidan_stormrage::MovementInform(), boss_nazan::MovementInform(), boss_felmyst::MovementInform(), npc_hallows_end_soh::MovementInform(), boss_headless_horseman::MovementInform(), boss_saviana_ragefire::boss_saviana_ragefireAI::MovementInform(), boss_sindragosa::boss_sindragosaAI::MovementInform(), npc_spinestalker::npc_spinestalkerAI::MovementInform(), npc_rimefang::npc_rimefangAI::MovementInform(), boss_kaelthas::MovementInform(), npc_pet_dk_ebon_gargoyle::MovementInform(), boss_sartharion_dragonAI::MovementInform(), boss_jedoga_shadowseeker::MovementInform(), npc_alexstrasza::npc_alexstrasza(), npc_attracted_reef_bull::npc_attracted_reef_bullAI::npc_attracted_reef_bullAI(), npc_concentrated_ball::npc_concentrated_ballAI::npc_concentrated_ballAI(), npc_gothik_trigger::npc_gothik_triggerAI::npc_gothik_triggerAI(), npc_icc_nerubar_broodkeeper::npc_icc_nerubar_broodkeeperAI::npc_icc_nerubar_broodkeeperAI(), npc_korkron_or_wildhammer::npc_korkron_or_wildhammer(), npc_nightbane_helper_target::npc_nightbane_helper_target(), npc_pet_gen_moth::npc_pet_gen_moth(), npc_pet_gen_valkyr_guardian::npc_pet_gen_valkyr_guardian(), npc_ulduar_aerial_command_unit::npc_ulduar_aerial_command_unit(), spell_chapter5_light_of_dawn_aura::OnApply(), instance_ulduar::instance_ulduar_InstanceMapScript::OnCreatureCreate(), spell_q12779_an_end_to_all_things_devour_aura::OnRemove(), spell_chapter5_light_of_dawn_aura::OnRemove(), npc_vehicle_d16_propelled_delivery::npc_vehicle_d16_propelled_deliveryAI::PassengerBoarded(), npc_eoe_wyrmrest_skytalon::PassengerBoarded(), npc_oculus_drake::npc_oculus_drakeAI::PassengerBoarded(), npc_hover_disk::PassengerBoarded(), boss_nightbane::PathEndReached(), boss_jeklik::PathEndReached(), boss_nefarian::PathEndReached(), SmartScript::ProcessAction(), boss_nefarian::Reset(), boss_kalecgos::Reset(), npc_akilzon_eagle::Reset(), boss_jeklik::Reset(), npc_soh_fire_trigger::Reset(), npc_hallows_end_soh::Reset(), boss_headless_horseman::Reset(), boss_onyxia::Reset(), boss_ayamiss::Reset(), boss_jedoga_shadowseeker::Reset(), boss_sartharion_dragonAI::Reset(), npc_blood_queen_lana_thel::npc_blood_queen_lana_thelAI::Reset(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::Reset(), npc_spinestalker::npc_spinestalkerAI::Reset(), npc_rimefang::npc_rimefangAI::Reset(), npc_icc_spire_frostwyrm::Reset(), boss_malygos::Reset(), boss_stormcaller_brundir::Reset(), boss_kologarn::Reset(), boss_thorim_pillar::Reset(), boss_yoggsaron_sara::Reset(), boss_illidan_stormrage::Reset(), boss_nazan::Reset(), boss_kaelthas::Reset(), npc_enslaved_netherwing_drake::Reset(), npc_dancing_flames::npc_dancing_flamesAI::Reset(), boss_felmyst::ScheduleGroundAbilities(), instance_halls_of_reflection::SetData(), Creature::setDeathState(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::SpellHit(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::SpellHit(), npc_saurfang_event::npc_saurfang_eventAI::SpellHit(), boss_urom::boss_uromAI::SpellHit(), npc_enslaved_netherwing_drake::SpellHit(), boss_felmyst::StartIntro(), boss_nightbane::TriggerHealthTakeOff(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::UpdateAI(), npc_madrigosa::UpdateAI(), npc_highborne_lamenter::npc_highborne_lamenterAI::UpdateAI(), boss_headless_horseman::UpdateAI(), boss_onyxia::UpdateAI(), boss_jedoga_shadowseeker::UpdateAI(), boss_saviana_ragefire::boss_saviana_ragefireAI::UpdateAI(), boss_krick::boss_krickAI::UpdateAI(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::UpdateAI(), boss_sindragosa::boss_sindragosaAI::UpdateAI(), npc_rimefang::npc_rimefangAI::UpdateAI(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::UpdateAI(), boss_sapphiron::boss_sapphironAI::UpdateAI(), boss_malygos::UpdateAI(), boss_urom::boss_uromAI::UpdateAI(), npc_oculus_drake::npc_oculus_drakeAI::UpdateAI(), boss_stormcaller_brundir::UpdateAI(), boss_mimiron::UpdateAI(), boss_razorscale::UpdateAI(), npc_wintergarde_gryphon::UpdateAI(), npc_pet_gen_wind_rider_cub::UpdateAI(), and Creature::UpdateMovementFlags().

◆ SetDisplayId()

◆ SetDualWieldMode()

virtual void Unit::SetDualWieldMode ( DualWieldMode  mode)
inlinevirtual
980{ _dualWieldMode = mode; }

References _dualWieldMode.

Referenced by Creature::InitEntry(), and Creature::UpdateEntry().

◆ SetEmoteState()

void Unit::SetEmoteState ( Emote  emoteState)
inline

◆ SetExtraUnitMovementFlags()

void Unit::SetExtraUnitMovementFlags ( uint16  f)
inline

◆ SetFacingTo()

void Unit::SetFacingTo ( float  ori)
16456{
16457 Movement::MoveSplineInit init(this);
16458 init.MoveTo(GetPositionX(), GetPositionY(), GetPositionZ(), false);
16460 init.DisableTransportPathTransformations(); // It makes no sense to target global orientation
16461 init.SetFacing(ori);
16462 init.Launch();
16463}
bool HasUnitMovementFlag(uint32 f) const
Definition Unit.h:774
ObjectGuid GetTransGUID() const override
Definition Unit.cpp:15025

References Movement::MoveSplineInit::DisableTransportPathTransformations(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), GetTransGUID(), HasUnitMovementFlag(), Movement::MoveSplineInit::Launch(), MOVEMENTFLAG_ONTRANSPORT, Movement::MoveSplineInit::MoveTo(), and Movement::MoveSplineInit::SetFacing().

Referenced by boss_twinemperorsAI::DoAction(), npc_arthas::npc_arthasAI::DoAction(), WaypointMovementGenerator< Creature >::DoUpdate(), FormationMovementGenerator::DoUpdate(), Spell::EffectDistract(), UtherBatteredHiltEvent::Execute(), boss_kaelthas::ExecuteMiddleEvent(), DistractMovementGenerator::Finalize(), Creature::FocusTarget(), spell_item_unusual_compass::HandleDummy(), spell_drakkari_colossus_face_me::HandleScriptEffect(), boss_grand_warlock_nethekurse::IntroRP(), npc_hyjal_jaina::hyjalJainaAI::IsSummonedBy(), boss_ragnaros::JustDied(), boss_ingvar_the_plunderer::JustSummoned(), boss_nalorakk::MoveInLineOfSight(), boss_algalon_the_observer::MovementInform(), npc_brann_bronzebeard_algalon::MovementInform(), boss_zuljin::MovementInform(), npc_harrison_jones::MovementInform(), boss_onyxia::MovementInform(), npc_twilight_volunteer::MovementInform(), boss_eadric::boss_eadricAI::MovementInform(), boss_paletress::boss_paletressAI::MovementInform(), boss_grand_champion::boss_grand_championAI::MovementInform(), npc_pos_deathwhisper_necrolyte::npc_pos_deathwhisper_necrolyteAI::MovementInform(), boss_professor_putricide::boss_professor_putricideAI::MovementInform(), boss_razorscale::MovementInform(), npc_enslaved_proto_drake::MovementInform(), npc_commander_eligor_dawnbringer::npc_commander_eligor_dawnbringerAI::MovementInform(), boss_illidan_stormrage::MovementInform(), boss_essence_of_suffering::boss_essence_of_sufferingAI::MovementInform(), boss_essence_of_desire::boss_essence_of_desireAI::MovementInform(), boss_lady_vashj::MovementInform(), boss_mr_smite::boss_mr_smiteAI::MovementInform(), boss_saviana_ragefire::boss_saviana_ragefireAI::MovementInform(), boss_sindragosa::boss_sindragosaAI::MovementInform(), npc_spinestalker::npc_spinestalkerAI::MovementInform(), npc_rimefang::npc_rimefangAI::MovementInform(), boss_jedoga_shadowseeker::MovementInform(), gunship_npc_AI::MovementInform(), npc_gunship_boarding_addAI::MovementInform(), npc_gunship_mage::npc_gunship_mageAI::MovementInform(), boss_the_lich_king::boss_the_lich_kingAI::MovementInform(), boss_skadi_grauf::boss_skadi_graufAI::MovementInform(), spell_lurker_below_spout::OnPeriodic(), SmartAI::PausePath(), SmartScript::ProcessAction(), instance_culling_of_stratholme::instance_culling_of_stratholme_InstanceMapScript::Reposition(), instance_old_hillsbrad::instance_old_hillsbrad_InstanceMapScript::Reposition(), boss_illidan_stormrage::ScheduleAbilities(), boss_nightbane::ScheduleFly(), Player::SetClientControl(), boss_grand_warlock_nethekurse::SetData(), npc_tirion_fordring_tft::npc_tirion_fordringAI::SpellHit(), npc_chesspiece::SpellHitTarget(), boss_heigan::StartFightPhase(), CreatureAI::TriggerAlert(), RotateMovementGenerator::Update(), boss_rend_blackhand::UpdateAI(), boss_victor_nefarius::UpdateAI(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::UpdateAI(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::UpdateAI(), npc_partygoer::UpdateAI(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::UpdateAI(), npc_arthas::npc_arthasAI::UpdateAI(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UpdateAI(), npc_medivh_bm::UpdateAI(), boss_onyxia::UpdateAI(), npc_hadronox_crusherPackAI::UpdateAI(), npc_frost_sphere::npc_frost_sphereAI::UpdateAI(), npc_hor_leader_second::npc_hor_leader_secondAI::UpdateAI(), boss_krick::boss_krickAI::UpdateAI(), npc_pos_tyrannus_events::npc_pos_tyrannus_eventsAI::UpdateAI(), npc_pos_martin_or_gorkun_second::npc_pos_martin_or_gorkun_secondAI::UpdateAI(), boss_the_lich_king::boss_the_lich_kingAI::UpdateAI(), boss_malygos::UpdateAI(), boss_varos::boss_varosAI::UpdateAI(), npc_ulduar_vx001::UpdateAI(), boss_svala::boss_svalaAI::UpdateAI(), npc_bloodmage_laurith::npc_bloodmage_laurithAI::UpdateAI(), npc_millhouse_manastorm::npc_millhouse_manastormAI::UpdateAI(), npc_warden_mellichar::npc_warden_mellicharAI::UpdateAI(), npc_pet_gen_plump_turkey::UpdateAI(), npc_general_andorov::UpdateEscortAI(), npc_tirions_gambit_tirion::npc_tirions_gambit_tirionAI::UpdateEscortAI(), npc_black_knight_skeletal_gryphon::npc_black_knight_skeletal_gryphonAI::WaypointReached(), npc_argent_soldier::npc_argent_soldierAI::WaypointReached(), npc_ranger_lilatha::WaypointReached(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::WaypointReached(), and npc_ancestral_wolf::npc_ancestral_wolfAI::WaypointReached().

◆ SetFacingToObject()

void Unit::SetFacingToObject ( WorldObject object,
Milliseconds  timed = 0ms 
)
Todo:
figure out under what conditions creature will move towards object instead of facing it where it currently is.
16466{
16467 // never face when already moving
16468 if (!IsStopped())
16469 return;
16470
16472 Movement::MoveSplineInit init(this);
16473 init.MoveTo(GetPositionX(), GetPositionY(), GetPositionZ());
16474 init.SetFacing(GetAngle(object)); // when on transport, GetAngle will still return global coordinates (and angle) that needs transforming
16475 init.Launch();
16476
16477 if (timed > 0ms)
16478 {
16479 if (Creature* c = ToCreature())
16480 {
16481 c->m_Events.AddEventAtOffset([c]()
16482 {
16483 if (c->IsInWorld() && c->FindMap() && c->IsAlive() && !c->IsInCombat())
16484 c->SetFacingTo(c->GetHomePosition().GetOrientation());
16485 }, timed);
16486 }
16487 else
16488 LOG_ERROR("entities.unit", "Unit::SetFacingToObject called on non-creature unit {}. This should never happen.", GetEntry());
16489 }
16490}
bool IsStopped() const
Definition Unit.h:1763

References Position::GetAngle(), Object::GetEntry(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), IsStopped(), Movement::MoveSplineInit::Launch(), LOG_ERROR, Movement::MoveSplineInit::MoveTo(), Movement::MoveSplineInit::SetFacing(), and Object::ToCreature().

Referenced by boss_razuvious_minion::boss_razuvious_minionAI::DoAction(), npc_ranshalla::npc_ranshallaAI::DoChannelTorchSpell(), npc_forest_frog::DoSpawnRandom(), Spell::EffectSummonType(), spell_chapter5_return_to_capital::HandleHit(), spell_yogg_saron_target_selectors::HandleScript(), npc_vaelastrasz_the_red::IsSummonedBy(), npc_oculus_drake::npc_oculus_drakeAI::IsSummonedBy(), npc_wintergarde_gryphon::IsSummonedBy(), npc_maiev_illidan::IsSummonedBy(), npc_ranshalla::npc_ranshallaAI::JustDidDialogueStep(), npc_ravenclaw_apparition::npc_ravenclaw_apparitionAI::JustSummoned(), npc_overlord_drakuru_betrayal::JustSummoned(), boss_illidan_stormrage::JustSummoned(), npc_acherus_necromancer::npc_acherus_necromancerAI::MovementInform(), npc_gothik_the_harvester::npc_gothik_the_harvesterAI::MovementInform(), boss_zuljin::MovementInform(), npc_harrison_jones::MovementInform(), npc_akama_illidan::MovementInform(), npc_hor_lich_king::MovementInform(), npc_dragonmaw_peon::npc_dragonmaw_peonAI::MovementInform(), npc_hidden_cultist::npc_hidden_cultistAI::PreScript(), npc_jungle_punch_target::npc_jungle_punch_targetAI::proceedCwEvent(), SmartScript::ProcessAction(), npc_lake_frog::npc_lake_frogAI::ReceiveEmote(), npc_dancing_flames::npc_dancing_flamesAI::ReceiveEmote(), npc_image_of_medivh::npc_image_of_medivhAI::Reset(), boss_razuvious_minion::boss_razuvious_minionAI::ScheduleAttackDummy(), boss_nightbane::ScheduleFly(), boss_razuvious::boss_razuviousAI::ScheduleInteractWithDeathKnight(), boss_the_lurker_below::SchedulerPhaseOne(), boss_shade_of_aran::SetGUID(), npc_bloodmage_laurith::npc_bloodmage_laurithAI::SetGUID(), npc_harrison_jones::sGossipSelect(), npc_crusade_recruit::npc_crusade_recruitAI::sGossipSelect(), npc_wounded_skirmisher::SpellHit(), boss_devourer_of_souls::SpellHitTarget(), npc_magister_aledis::StartFight(), boss_hydross_the_unstable::SummonMovementInform(), npc_commander_dawnforge::npc_commander_dawnforgeAI::Turn_to_eachother(), npc_commander_dawnforge::npc_commander_dawnforgeAI::Turn_to_Pathaleons_Image(), npc_rookery_hatcher::UpdateAI(), boss_victor_nefarius::UpdateAI(), boss_majordomo::UpdateAI(), npc_acherus_necromancer::npc_acherus_necromancerAI::UpdateAI(), npc_gothik_the_harvester::npc_gothik_the_harvesterAI::UpdateAI(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::UpdateAI(), npc_eastvale_peasent::UpdateAI(), npc_partygoer::UpdateAI(), npc_thrall_bfu::npc_thrall_bfuAI::UpdateAI(), npc_winterfin_playmate::UpdateAI(), npc_snowfall_glade_playmate::UpdateAI(), npc_the_biggest_tree::UpdateAI(), npc_high_oracle_soo_roo::UpdateAI(), npc_the_etymidian::UpdateAI(), npc_alexstraza_the_lifebinder::UpdateAI(), npc_pilgrims_bounty_chair::UpdateAI(), npc_arthas::npc_arthasAI::UpdateAI(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UpdateAI(), boss_onyxia::UpdateAI(), boss_icehowl::boss_icehowlAI::UpdateAI(), boss_bronjahm::UpdateAI(), npc_hor_leader_second::npc_hor_leader_secondAI::UpdateAI(), boss_professor_putricide::boss_professor_putricideAI::UpdateAI(), boss_rotface::boss_rotfaceAI::UpdateAI(), npc_rimefang::npc_rimefangAI::UpdateAI(), npc_tirion_fordring_tft::npc_tirion_fordringAI::UpdateAI(), boss_malygos::UpdateAI(), npc_ulduar_vx001::UpdateAI(), npc_ulduar_expedition_engineer::UpdateAI(), npc_hidden_cultist::npc_hidden_cultistAI::UpdateAI(), npc_deaths_fel_cannon::npc_deaths_fel_cannonAI::UpdateAI(), npc_ranshalla::npc_ranshallaAI::WaypointReached(), npc_arthas::npc_arthasAI::WaypointReached(), and npc_kaya_flathoof::npc_kaya_flathoofAI::WaypointReached().

◆ SetFaction()

void Unit::SetFaction ( uint32  faction)
7085{
7087 if (IsCreature())
7089}
void UpdateMoveInLineOfSightState()
Definition Creature.cpp:2616

References Object::IsCreature(), SetUInt32Value(), Object::ToCreature(), UNIT_FIELD_FACTIONTEMPLATE, and Creature::UpdateMoveInLineOfSightState().

Referenced by npc_hidden_cultist::npc_hidden_cultistAI::AttackPlayer(), GameObject::CastSpell(), boss_eadric::boss_eadricAI::DamageTaken(), boss_paletress::boss_paletressAI::DamageTaken(), boss_algalon_the_observer::DamageTaken(), boss_freya::DamageTaken(), boss_hodir::DamageTaken(), npc_ulduar_arachnopod_destroyer::DamageTaken(), npc_overlord_drakuru_betrayal::DamageTaken(), boss_thorim::DamageTaken(), npc_weegli_blastfuse::npc_weegli_blastfuseAI::DestroyDoor(), boss_apothecary_hummel::boss_apothecary_hummelAI::DoAction(), npc_apothecary_genericAI::DoAction(), npc_coren_direbrew::DoAction(), npc_direbrew_antagonist::DoAction(), boss_algalon_the_observer::DoAction(), boss_kalecgos::DoAction(), npc_taskmaster_fizzule::npc_taskmaster_fizzuleAI::DoFriend(), npc_unkor_the_ruthless::npc_unkor_the_ruthlessAI::DoNice(), Spell::EffectSummonType(), npc_overlord_drakuru_betrayal::EnterEvadeMode(), BattlegroundEY::EventTeamCapturedPoint(), AuraEffect::HandleAuraModFaction(), BattlegroundIC::HandleCapturedNodes(), spell_q12096_q12092_dummy::HandleDummy(), spell_q11919_q11940_drake_hunt_aura::HandleEffectRemove(), modify_commandscript::HandleModifyFactionCommand(), npc_commandscript::HandleNpcSetFactionIdCommand(), npc_commandscript::HandleNpcSetFactionTempIdCommand(), spell_mutate_explode_bug::HandleOnHit(), spell_q10612_10613_the_fel_and_the_furious::HandleScriptEffect(), spell_item_draenic_pale_ale::HandleSummon(), npc_cork_gizelton::npc_cork_gizeltonAI::ImmuneFlagSet(), boss_vaelastrasz::Initialize(), boss_majordomo::InitializeAI(), npc_general_andorov::InitializeAI(), npc_sergeant_bly::npc_sergeant_blyAI::InitializeAI(), Minion::InitStats(), TempSummon::InitStats(), InitTamedPet(), npc_infra_green_bomber_generic::npc_infra_green_bomber_genericAI::IsSummonedBy(), npc_enraged_spirit::npc_enraged_spiritAI::JustDied(), FollowerAI::JustRespawned(), npc_eris_hevenfire::npc_eris_hevenfireAI::JustSummoned(), boss_volkhan::JustSummoned(), boss_balinda::JustSummoned(), npc_thrall_bfu::npc_thrall_bfuAI::JustSummoned(), boss_archimonde::JustSummoned(), boss_broggok::JustSummoned(), Pet::LoadPetFromDB(), boss_twilight_corrupter::MoveInLineOfSight(), npc_akama_shade::MovementInform(), BattlegroundAB::NodeOccupied(), spell_brewfest_reveler_transform::OnApply(), npc_chesspiece::OnCharmed(), BattlefieldWG::OnCreatureCreate(), instance_blackrock_depths::OnCreatureCreate(), instance_eye_of_eternity::OnCreatureCreate(), instance_nexus::instance_nexus_InstanceMapScript::OnCreatureCreate(), instance_oculus::instance_oculus_InstanceMapScript::OnCreatureCreate(), instance_black_temple::instance_black_temple_InstanceMapScript::OnCreatureCreate(), boss_azuregos::OnGossipSelect(), InstanceScript::OnPlayerEnter(), npc_prospector_remtravel::OnQuestAccept(), npc_gilthares::OnQuestAccept(), npc_lakota_windsong::OnQuestAccept(), npc_paoka_swiftmountain::OnQuestAccept(), npc_engineer_helice::OnQuestAccept(), npc_maghar_captive::OnQuestAccept(), npc_maxx_a_million_escort::OnQuestAccept(), npc_kaya_flathoof::OnQuestAccept(), npc_wizzlecrank_shredder::OnQuestAccept(), npc_ame::OnQuestAccept(), npc_ranshalla::OnQuestAccept(), npc_lurgglbr::OnQuestAccept(), npc_mootoo_the_younger::OnQuestAccept(), npc_apothecary_hanes::OnQuestAccept(), npc_bessy::OnQuestAccept(), npc_isla_starmane::OnQuestAccept(), go_crystalline_tear::OnQuestAccept(), npc_ulduar_arachnopod_destroyer::PassengerBoarded(), npc_frosthound::PassengerBoarded(), BattlegroundAV::PopulateNode(), npc_chicken_cluck::npc_chicken_cluckAI::ReceiveEmote(), npc_plucky::npc_pluckyAI::ReceiveEmote(), RemoveCharmedBy(), boss_doomrel::Reset(), boss_victor_nefarius::Reset(), npc_unworthy_initiate::npc_unworthy_initiateAI::Reset(), boss_darkmaster_gandling::boss_darkmaster_gandlingAI::Reset(), boss_apothecary_hummel::boss_apothecary_hummelAI::Reset(), npc_coren_direbrew::Reset(), npc_direbrew_minion::Reset(), npc_aquementas::npc_aquementasAI::Reset(), npc_taskmaster_fizzule::npc_taskmaster_fizzuleAI::Reset(), npc_plucky::npc_pluckyAI::Reset(), boss_grobbulus_poison_cloud::boss_grobbulus_poison_cloudAI::Reset(), boss_algalon_the_observer::Reset(), npc_future_you::npc_future_youAI::Reset(), npc_overlord_drakuru_betrayal::Reset(), npc_akama_shade::Reset(), npc_aeranas::npc_aeranasAI::Reset(), npc_unkor_the_ruthless::npc_unkor_the_ruthlessAI::Reset(), npc_chicken_cluck::npc_chicken_cluckAI::Reset(), RestoreFaction(), SetCharmedBy(), Player::SetFactionForRace(), Player::SetGameMaster(), npc_captain_saeed::npc_captain_saeedAI::SetGUID(), BattlegroundIC::SetupBattleground(), boss_victor_nefarius::sGossipSelect(), Battlefield::SpawnCreature(), npc_rabid_thistle_bear::npc_rabid_thistle_bearAI::SpellHit(), npc_isle_of_conquest_turret::npc_isle_of_conquest_turretAI::SpellHit(), npc_enslaved_netherwing_drake::SpellHit(), npc_belnistrasz::npc_belnistraszAI::sQuestAccept(), npc_professor_phizzlethorpe::npc_professor_phizzlethorpeAI::sQuestAccept(), npc_ranger_lilatha::sQuestAccept(), npc_corporal_keeshan::npc_corporal_keeshanAI::sQuestAccept(), npc_muglash::npc_muglashAI::sQuestAccept(), npc_wounded_blood_elf::npc_wounded_blood_elfAI::sQuestAccept(), FollowerAI::StartFollow(), npc_deathstalker_fearleia::SummonCreatureWithRandomTarget(), boss_majordomo::SummonedCreatureDies(), Spell::SummonGuardian(), Player::SummonPet(), WorldObject::SummonTrigger(), npc_vaelastrasz_the_red::UpdateAI(), boss_vaelastrasz::UpdateAI(), npc_unworthy_initiate::npc_unworthy_initiateAI::UpdateAI(), npc_madrigosa::UpdateAI(), npc_aquementas::npc_aquementasAI::UpdateAI(), npc_twiggy_flathead::npc_twiggy_flatheadAI::UpdateAI(), npc_sergeant_bly::npc_sergeant_blyAI::UpdateAI(), boss_algalon_the_observer::UpdateAI(), boss_mimiron::UpdateAI(), npc_aeranas::npc_aeranasAI::UpdateAI(), npc_magister_aledis::UpdateAI(), npc_lord_gregor_lescovar::npc_lord_gregor_lescovarAI::UpdateAI(), Creature::UpdateEntry(), npc_magwin::npc_magwinAI::UpdateEscortAI(), and npc_tapoke_slim_jahn::npc_tapoke_slim_jahnAI::WaypointReached().

◆ SetFeared()

void Unit::SetFeared ( bool  apply,
Unit fearedBy = nullptr,
bool  isFear = false 
)
protected
14551{
14552 if (apply)
14553 {
14554 SetTarget();
14555 GetMotionMaster()->MoveFleeing(fearedBy, isFear ? 0 : sWorld->getIntConfig(CONFIG_CREATURE_FAMILY_FLEE_DELAY));
14556 }
14557 else
14558 {
14559 if (IsAlive())
14560 {
14561 if (GetMotionMaster()->GetMotionSlotType(MOTION_SLOT_CONTROLLED) == FLEEING_MOTION_TYPE)
14562 {
14564 StopMoving();
14565 }
14566
14567 if (GetVictim())
14569 }
14570 }
14571
14572 // xinef: block / allow control to real mover (eg. charmer)
14573 if (IsPlayer())
14574 {
14575 if (m_movedByPlayer)
14576 m_movedByPlayer->ToPlayer()->SetClientControl(this, !apply); // verified
14577 //else
14578 // ToPlayer()->SetClientControl(this, !apply);
14579 }
14580}
@ FLEEING_MOTION_TYPE
Definition MotionMaster.h:49
@ CONFIG_CREATURE_FAMILY_FLEE_DELAY
Definition WorldConfig.h:242
void MoveFleeing(Unit *enemy, uint32 time=0)
Enable the target's fleeing movement. Doesn't work with UNIT_FLAG_DISABLE_MOVE.
Definition MotionMaster.cpp:807

References CONFIG_CREATURE_FAMILY_FLEE_DELAY, FLEEING_MOTION_TYPE, Object::GetGUID(), GetMotionMaster(), MotionMaster::GetMotionSlotType(), GetVictim(), IsAlive(), Object::IsPlayer(), m_movedByPlayer, MOTION_SLOT_CONTROLLED, MotionMaster::MoveFleeing(), MotionMaster::MovementExpired(), Player::SetClientControl(), SetTarget(), StopMoving(), sWorld, and Object::ToPlayer().

Referenced by SetControlled().

◆ SetFeatherFall()

void Unit::SetFeatherFall ( bool  enable)
16603{
16604 bool isClientControlled = IsClientControlled();
16605
16606 if (!isClientControlled)
16607 {
16608 if (enable)
16610 else
16612 }
16613
16614 if (!IsInWorld()) // is sent on add to map
16615 return;
16616
16617 if (isClientControlled)
16618 {
16619 if (Player const* player = GetClientControlling())
16620 {
16621 uint32 const counter = player->GetSession()->GetOrderCounter();
16622
16624
16625 data << GetPackGUID();
16626 data << counter;
16627 player->SendDirectMessage(&data);
16628 player->GetSession()->IncrementOrderCounter();
16629
16630 // start fall from current height
16631 if (!enable)
16632 const_cast<Player*>(player)->SetFallInformation(0, GetPositionZ());
16633
16634 return;
16635 }
16636 }
16637
16639 data << GetPackGUID();
16640 SendMessageToSet(&data, true);
16641}
@ MOVEMENTFLAG_FALLING_SLOW
Definition UnitDefines.h:401
@ SMSG_MOVE_FEATHER_FALL
Definition Opcodes.h:272
@ SMSG_MOVE_NORMAL_FALL
Definition Opcodes.h:273
@ SMSG_SPLINE_MOVE_NORMAL_FALL
Definition Opcodes.h:804

References MovementInfo::AddMovementFlag(), GetClientControlling(), Object::GetPackGUID(), Position::GetPositionZ(), IsClientControlled(), Object::IsInWorld(), WorldObject::m_movementInfo, MOVEMENTFLAG_FALLING_SLOW, MovementInfo::RemoveMovementFlag(), WorldObject::SendMessageToSet(), PackedGuid::size(), SMSG_MOVE_FEATHER_FALL, SMSG_MOVE_NORMAL_FALL, SMSG_SPLINE_MOVE_FEATHER_FALL, and SMSG_SPLINE_MOVE_NORMAL_FALL.

Referenced by AuraEffect::HandleAuraFeatherFall(), and debug_commandscript::HandleDebugMoveflagsCommand().

◆ SetFullHealth()

◆ SetHealth()

void Unit::SetHealth ( uint32  val)
12357{
12359 val = 0;
12360 else if (IsPlayer() && getDeathState() == DeathState::Dead)
12361 val = 1;
12362 else
12363 {
12364 uint32 maxHealth = GetMaxHealth();
12365 if (maxHealth < val)
12366 val = maxHealth;
12367 }
12368
12369 float prevHealthPct = GetHealthPct();
12370
12372
12373 // mobs that are now or were below 30% need to update their speed
12374 if (IsCreature() && !(IsPet() && ToPet()->isControlled() && IsControlledByPlayer()) && (prevHealthPct < 30.0 || HealthBelowPct(30)))
12375 {
12376 UpdateSpeed(MOVE_RUN, false);
12377 }
12378
12379 // group update
12380 if (IsPlayer())
12381 {
12382 Player* player = ToPlayer();
12383 if (player->NeedSendSpectatorData())
12385
12386 if (player->GetGroup())
12388 }
12389 else if (Pet* pet = ToCreature()->ToPet())
12390 {
12391 if (pet->isControlled())
12392 {
12393 if (Unit* owner = GetOwner())
12394 if (Player* player = owner->ToPlayer())
12395 {
12396 if (player->NeedSendSpectatorData() && pet->GetCreatureTemplate()->family)
12397 ArenaSpectator::SendCommand_UInt32Value(player->FindMap(), player->GetGUID(), "PHP", (uint32)pet->GetHealthPct());
12398
12399 if (player->GetGroup())
12401 }
12402 }
12403 }
12404}
@ GROUP_UPDATE_FLAG_CUR_HP
Definition Group.h:101
@ GROUP_UPDATE_FLAG_PET_CUR_HP
Definition Group.h:113
bool NeedSendSpectatorData() const
Definition Player.cpp:15527
void SetGroupUpdateFlag(uint32 flag)
Definition Player.h:2510
float GetHealthPct() const
Definition Unit.h:1110
bool HealthBelowPct(int32 pct) const
Definition Unit.h:1116
void SendCommand_UInt32Value(T *o, ObjectGuid targetGUID, const char *prefix, uint32 t)
Definition ArenaSpectator.h:62

References Dead, WorldObject::FindMap(), getDeathState(), Player::GetGroup(), Object::GetGUID(), GetHealthPct(), GetMaxHealth(), GetOwner(), GROUP_UPDATE_FLAG_CUR_HP, GROUP_UPDATE_FLAG_PET_CUR_HP, HealthBelowPct(), IsControlledByPlayer(), Object::IsCreature(), IsPet(), Object::IsPlayer(), JustDied, MOVE_RUN, Player::NeedSendSpectatorData(), ArenaSpectator::SendCommand_UInt32Value(), Player::SetGroupUpdateFlag(), SetUInt32Value(), Object::ToCreature(), ToPet(), Object::ToPlayer(), UNIT_FIELD_HEALTH, and UpdateSpeed().

Referenced by Battleground::AddPlayer(), boss_twilight_halion::boss_twilight_halionAI::boss_twilight_halionAI(), Player::BuildPlayerRepop(), boss_black_knight::boss_black_knightAI::DamageTaken(), boss_alar::DamageTaken(), npc_molten_golem::DamageTaken(), boss_viscidus::DamageTaken(), boss_thorim_start_npcs::DamageTaken(), boss_thorim::DamageTaken(), boss_yoggsaron_sara::DamageTaken(), DealDamage(), boss_prince_keleseth_icc::boss_prince_kelesethAI::DoAction(), boss_prince_taldaram_icc::boss_prince_taldaramAI::DoAction(), boss_prince_valanar_icc::boss_prince_valanarAI::DoAction(), npc_terenas_menethil::npc_terenas_menethilAI::DoAction(), boss_grand_champion::boss_grand_championAI::DoAction(), boss_thaddius_summon::boss_thaddius_summonAI::DoAction(), boss_xt002::DoAction(), npc_xt002_heart::DoAction(), boss_yoggsaron::DoAction(), Spell::EffectResurrectPet(), Spell::EffectSelfResurrect(), Spell::EffectSummonPet(), Spell::EffectSummonType(), boss_prince_keleseth_icc::boss_prince_kelesethAI::EnterEvadeMode(), boss_prince_taldaram_icc::boss_prince_taldaramAI::EnterEvadeMode(), boss_prince_valanar_icc::boss_prince_valanarAI::EnterEvadeMode(), AuraEffect::HandleAuraModIncreaseHealth(), AuraEffect::HandleAuraModIncreaseHealthPercent(), AuraEffect::HandleAuraModIncreaseMaxHealth(), spell_oculus_soar_aura::HandleEffectPeriodic(), modify_commandscript::HandleModifyHPCommand(), AuraEffect::HandleModTotalPercentStat(), npc_commandscript::HandleNpcSetLevelCommand(), spell_dk_pet_scaling::HandlePeriodic(), spell_hun_generic_scaling::HandlePeriodic(), spell_mage_pet_scaling::HandlePeriodic(), spell_sha_feral_spirit_scaling::HandlePeriodic(), spell_warl_generic_scaling::HandlePeriodic(), npc_echo_of_medivh::HandlePieceJustDied(), spell_stinky_precious_decimate::HandleScript(), spell_ahune_synch_health::HandleScript(), AuraEffect::HandleSpiritOfRedemption(), npc_pet_pri_lightwell::InitializeAI(), boss_prince_keleseth_icc::boss_prince_kelesethAI::JustReachedHome(), boss_prince_taldaram_icc::boss_prince_taldaramAI::JustReachedHome(), boss_prince_valanar_icc::boss_prince_valanarAI::JustReachedHome(), npc_dirt_mound::JustSummoned(), boss_skeram::JustSummoned(), boss_attumen::JustSummoned(), boss_baltharus_the_warborn::boss_baltharus_the_warbornAI::JustSummoned(), boss_drakkari_colossus::boss_drakkari_colossusAI::JustSummoned(), boss_harbinger_skyriss::JustSummoned(), Creature::LoadCreatureFromDB(), Player::LoadFromDB(), Pet::LoadPetFromDB(), ModifyHealth(), boss_grand_champion::boss_grand_championAI::MovementInform(), npc_nether_drake::npc_nether_drakeAI::MovementInform(), npc_corrupted_totem::npc_corrupted_totem(), npc_xt002_life_spark::npc_xt002_life_spark(), instance_karazhan::instance_karazhan_InstanceMapScript::OnCreatureCreate(), instance_halls_of_reflection::OnCreatureCreate(), Player::ProcessDelayedOperations(), boss_vaelastrasz::Reset(), npc_draenei_survivor::npc_draenei_survivorAI::Reset(), npc_injured_draenei::npc_injured_draeneiAI::Reset(), boss_prince_keleseth_icc::boss_prince_kelesethAI::Reset(), boss_prince_taldaram_icc::boss_prince_taldaramAI::Reset(), boss_prince_valanar_icc::boss_prince_valanarAI::Reset(), boss_valithria_dreamwalker::boss_valithria_dreamwalkerAI::Reset(), boss_murmur::Reset(), npc_injured_patient::npc_injured_patientAI::Reset(), Player::ResetAllPowers(), Player::RestoreHealthAfterDuel(), Player::ResurectUsingRequestData(), Player::ResurrectPlayer(), Creature::SelectLevel(), setDeathState(), SetFullHealth(), SetMaxHealth(), boss_headless_horseman::SpellHit(), boss_black_knight::boss_black_knightAI::SpellHitTarget(), boss_malchezaar::SpellHitTarget(), npc_giant_claw_tentacle::Submerge(), boss_drakkari_colossus::boss_drakkari_colossusAI::SummonedCreatureDespawn(), npc_a_special_surprise::npc_a_special_surpriseAI::UpdateAI(), npc_nerubian_burrower::npc_nerubian_burrowerAI::UpdateAI(), npc_snobold_vassal::npc_snobold_vassalAI::UpdateAI(), npc_hor_lich_king::UpdateAI(), boss_garfrost::boss_garfrostAI::UpdateAI(), boss_ick::boss_ickAI::UpdateAI(), boss_tyrannus::boss_tyrannusAI::UpdateAI(), boss_prince_valanar_icc::boss_prince_valanarAI::UpdateAI(), boss_flame_leviathan_defense_turret::UpdateAI(), Creature::UpdateEntry(), and boss_twin_valkyrAI::UpdateSharedHealth().

◆ SetHover()

void Unit::SetHover ( bool  enable)
16644{
16645 bool isClientControlled = IsClientControlled();
16646
16647 if (!isClientControlled)
16648 {
16649 if (enable)
16651 else
16653 }
16654
16655 float hoverHeight = GetHoverHeight();
16656
16657 if (enable)
16658 {
16659 if (hoverHeight && GetPositionZ() - GetMap()->GetHeight(GetPhaseMask(), GetPositionX(), GetPositionY(), GetPositionZ()) < hoverHeight)
16660 Relocate(GetPositionX(), GetPositionY(), GetPositionZ() + hoverHeight);
16661 }
16662 else
16663 {
16664 if (IsAlive() || !IsUnit())
16665 {
16666 float newZ = std::max<float>(GetMap()->GetHeight(GetPhaseMask(), GetPositionX(), GetPositionY(), GetPositionZ()), GetPositionZ() - hoverHeight);
16669 }
16670 }
16671
16672 if (!IsInWorld()) // is sent on add to map
16673 return;
16674
16675 if (isClientControlled)
16676 {
16677 if (Player const* player = GetClientControlling())
16678 {
16680
16681 uint32 const counter = player->GetSession()->GetOrderCounter();
16682
16683 data << GetPackGUID();
16684 data << counter;
16685 player->SendDirectMessage(&data);
16686 player->GetSession()->IncrementOrderCounter();
16687 return;
16688 }
16689 }
16690
16692 data << GetPackGUID();
16693 SendMessageToSet(&data, true);
16694}
bool IsUnit() const
Definition Object.h:209
float GetHoverHeight() const
Definition Unit.h:1718
void UpdateAllowedPositionZ(float x, float y, float &z, float *groundZ=nullptr) const
Definition Object.cpp:1610
@ SMSG_MOVE_SET_HOVER
Definition Opcodes.h:274
@ SMSG_SPLINE_MOVE_UNSET_HOVER
Definition Opcodes.h:806
@ SMSG_MOVE_UNSET_HOVER
Definition Opcodes.h:275

References MovementInfo::AddMovementFlag(), GetClientControlling(), GetHoverHeight(), WorldObject::GetMap(), Object::GetPackGUID(), WorldObject::GetPhaseMask(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), IsAlive(), IsClientControlled(), Object::IsInWorld(), Object::IsUnit(), WorldObject::m_movementInfo, MOVEMENTFLAG_HOVER, Position::Relocate(), MovementInfo::RemoveMovementFlag(), WorldObject::SendMessageToSet(), PackedGuid::size(), SMSG_MOVE_SET_HOVER, SMSG_MOVE_UNSET_HOVER, SMSG_SPLINE_MOVE_SET_HOVER, SMSG_SPLINE_MOVE_UNSET_HOVER, and WorldObject::UpdateAllowedPositionZ().

Referenced by boss_taldaram::DoAction(), npc_ball_of_flame::npc_ball_of_flameAI::DoAction(), boss_illidan_stormrage::DoAction(), AuraEffect::HandleAuraHover(), debug_commandscript::HandleDebugMoveflagsCommand(), boss_sartharion_dragonAI::HandleExtraEvent(), boss_taldaram::InitializeAI(), npc_frostwing_vrykul::npc_frostwing_vrykulAI::JustEngagedWith(), boss_saviana_ragefire::boss_saviana_ragefireAI::JustReachedHome(), boss_taldaram::MovementInform(), boss_illidan_stormrage::MovementInform(), boss_sartharion_dragonAI::MovementInform(), boss_jedoga_shadowseeker::MovementInform(), npc_korkron_or_wildhammer::npc_korkron_or_wildhammer(), boss_jedoga_shadowseeker::Reset(), boss_sartharion_dragonAI::Reset(), npc_dark_nucleus::npc_dark_nucleusAI::Reset(), npc_frostwing_vrykul::npc_frostwing_vrykulAI::Reset(), boss_svala::boss_svalaAI::Reset(), boss_illidan_stormrage::Reset(), setDeathState(), Creature::setDeathState(), boss_jedoga_shadowseeker::UpdateAI(), boss_stormcaller_brundir::UpdateAI(), boss_svala::boss_svalaAI::UpdateAI(), npc_wintergarde_gryphon::UpdateAI(), and Creature::UpdateMovementFlags().

◆ SetImmuneToAll()

void Unit::SetImmuneToAll ( bool  apply,
bool  keepCombat = false 
)
inline
924{ SetImmuneToPC(apply, keepCombat); SetImmuneToNPC(apply, keepCombat); }
void SetImmuneToNPC(bool apply, bool keepCombat=false)
Definition Unit.cpp:10659

References SetImmuneToNPC(), and SetImmuneToPC().

Referenced by spell_the_lich_king_trigger_vile_spirit::ActivateSpirit(), boss_chromaggus::boss_chromaggus(), boss_nalorakk::boss_nalorakk(), boss_eadric::boss_eadricAI::DamageTaken(), boss_paletress::boss_paletressAI::DamageTaken(), boss_grand_champion::boss_grand_championAI::DamageTaken(), boss_felblood_kaelthas::DamageTaken(), npc_warden_mellichar::npc_warden_mellicharAI::DamageTaken(), boss_mal_ganis::boss_mal_ganisAI::DamageTaken(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::DoAction(), boss_apothecary_hummel::boss_apothecary_hummelAI::DoAction(), npc_apothecary_genericAI::DoAction(), npc_twilight_volunteer::DoAction(), boss_taldaram::DoAction(), boss_prince_keleseth_icc::boss_prince_kelesethAI::DoAction(), boss_prince_taldaram_icc::boss_prince_taldaramAI::DoAction(), boss_prince_valanar_icc::boss_prince_valanarAI::DoAction(), npc_crok_scourgebane::npc_crok_scourgebaneAI::DoAction(), boss_sister_svalna::boss_sister_svalnaAI::DoAction(), brann_bronzebeard::brann_bronzebeardAI::DoAction(), npc_living_constellation::DoAction(), boss_broggok::DoAction(), boss_grand_warlock_nethekurse::DoAction(), boss_felblood_kaelthas::DoAction(), boss_grand_champion::boss_grand_championAI::DoAction(), boss_ambassador_hellmaw::DoAction(), boss_skeram::DoTeleport(), Spell::EffectSummonType(), npc_ghostly_priest::EnterEvadeMode(), npc_phantom_mage::EnterEvadeMode(), npc_shadowy_mercenary::EnterEvadeMode(), npc_spectral_footman::EnterEvadeMode(), npc_tortured_rifleman::EnterEvadeMode(), UtherBatteredHiltEvent::Execute(), spell_uldaman_stoned_aura::HandleEffectApply(), spell_uldaman_stoned_aura::HandleEffectRemove(), spell_q11919_q11940_drake_hunt_aura::HandleEffectRemove(), spell_item_draenic_pale_ale::HandleSummon(), boss_majordomo::InitializeAI(), boss_captain_skarloc::InitializeAI(), boss_taldaram::InitializeAI(), boss_prince_keleseth_icc::boss_prince_kelesethAI::InitializeAI(), boss_prince_taldaram_icc::boss_prince_taldaramAI::InitializeAI(), boss_prince_valanar_icc::boss_prince_valanarAI::InitializeAI(), npc_icc_nerubar_broodkeeper::npc_icc_nerubar_broodkeeperAI::InitializeAI(), npc_lord_arete::npc_lord_areteAI::InitializeAI(), npc_time_lost_proto_drake::npc_time_lost_proto_drakeAI::InitializeAI(), boss_ambassador_hellmaw::InitializeAI(), npc_millhouse_manastorm::npc_millhouse_manastormAI::InitializeAI(), Player::InitStatsForLevel(), boss_moroes::JustEngagedWith(), boss_falric::JustEngagedWith(), boss_marwyn::JustEngagedWith(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::JustRespawned(), npc_rinji::npc_rinjiAI::JustRespawned(), npc_isla_starmane::npc_isla_starmaneAI::JustRespawned(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::JustSummoned(), boss_skeram::JustSummoned(), boss_majordomo::JustSummoned(), boss_captain_skarloc::JustSummoned(), npc_tirions_gambit_tirion::npc_tirions_gambit_tirionAI::JustSummoned(), npc_dkc1_gothik::npc_dkc1_gothikAI::MoveInLineOfSight(), boss_nalorakk::MoveInLineOfSight(), boss_captain_skarloc::MovementInform(), boss_taldaram::MovementInform(), boss_grand_champion::boss_grand_championAI::MovementInform(), boss_sister_svalna::boss_sister_svalnaAI::MovementInform(), npc_icc_nerubar_broodkeeper::npc_icc_nerubar_broodkeeperAI::MovementInform(), boss_jedoga_shadowseeker::MovementInform(), npc_memory::npc_memoryAI::npc_memoryAI(), npc_rinji::npc_rinjiAI::npc_rinjiAI(), instance_zulaman::instance_zulaman_InstanceMapScript::OnCreatureCreate(), npc_blackhand_incarcerator::Reset(), boss_rend_blackhand::Reset(), boss_ragnaros::Reset(), boss_mandokir::boss_mandokirAI::Reset(), boss_skeram::Reset(), boss_jedoga_shadowseeker::Reset(), boss_black_knight::boss_black_knightAI::Reset(), npc_black_knight_skeletal_gryphon::npc_black_knight_skeletal_gryphonAI::Reset(), boss_grand_champion::boss_grand_championAI::Reset(), boss_falric::Reset(), boss_marwyn::Reset(), boss_deathbringer_saurfang::boss_deathbringer_saurfangAI::Reset(), boss_svala::boss_svalaAI::Reset(), boss_ambassador_hellmaw::Reset(), boss_broggok::Reset(), boss_grand_warlock_nethekurse::Reset(), npc_warden_mellichar::npc_warden_mellicharAI::Reset(), instance_blood_furnace::instance_blood_furnace_InstanceMapScript::ResetPrisoner(), boss_svala::boss_svalaAI::SetData(), npc_blackhand_incarcerator::SetData(), boss_chromaggus::SetGUID(), boss_black_knight::boss_black_knightAI::SpellHitTarget(), npc_rinji::npc_rinjiAI::sQuestAccept(), boss_majordomo::SummonedCreatureDies(), boss_jedoga_shadowseeker::SummonedCreatureDies(), boss_ragnaros::UpdateAI(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::UpdateAI(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::UpdateAI(), npc_varian_wrynn::npc_varian_wrynnAI::UpdateAI(), npc_thrall_bfu::npc_thrall_bfuAI::UpdateAI(), boss_mandokir::boss_mandokirAI::UpdateAI(), npc_arthas::npc_arthasAI::UpdateAI(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UpdateAI(), boss_skeram::UpdateAI(), npc_memory::npc_memoryAI::UpdateAI(), boss_grand_champion::boss_grand_championAI::UpdateAI(), boss_krick::boss_krickAI::UpdateAI(), npc_crok_scourgebane::npc_crok_scourgebaneAI::UpdateAI(), boss_svala::boss_svalaAI::UpdateAI(), boss_anzu::UpdateAI(), npc_millhouse_manastorm::npc_millhouse_manastormAI::UpdateAI(), npc_artorius::npc_artoriusAI::UpdateAI(), npc_simone::npc_simoneAI::UpdateAI(), npc_nelson::npc_nelsonAI::UpdateAI(), and npc_franklin::npc_franklinAI::UpdateAI().

◆ SetImmuneToNPC()

void Unit::SetImmuneToNPC ( bool  apply,
bool  keepCombat = false 
)
10660{
10661 if (apply)
10662 {
10664 if (!keepCombat)
10665 {
10666 std::vector<CombatReference*> toEnd;
10667 for (auto const& pair : m_combatManager.GetPvECombatRefs())
10668 if (!pair.second->GetOther(this)->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED))
10669 toEnd.push_back(pair.second);
10670 for (CombatReference* ref : toEnd)
10671 ref->EndCombat();
10672 }
10673 }
10674 else
10676}
Definition CombatManager.h:60

References CombatManager::GetPvECombatRefs(), m_combatManager, RemoveUnitFlag(), SetUnitFlag(), UNIT_FLAG_IMMUNE_TO_NPC, and UNIT_FLAG_PLAYER_CONTROLLED.

Referenced by boss_jarien::boss_jarien(), boss_sothos::boss_sothos(), GameObject::CastSpell(), violet_hold_trashAI::CreatureStartAttackDoor(), violet_hold_trashAI::EnterEvadeMode(), npc_escortAI::EnterEvadeMode(), npc_cork_gizelton::npc_cork_gizeltonAI::ImmuneFlagSet(), npc_general_andorov::InitializeAI(), boss_jarien::IsSummonedBy(), boss_sothos::IsSummonedBy(), boss_sartharion::JustEngagedWith(), boss_algalon_the_observer::JustEngagedWith(), violet_hold_trashAI::JustEngagedWith(), boss_sartharion_dragonAI::MovementInform(), npc_corporal_keeshan::npc_corporal_keeshanAI::Reset(), npc_medivh_bm::Reset(), boss_sartharion_dragonAI::Reset(), SetImmuneToAll(), npc_corporal_keeshan::npc_corporal_keeshanAI::sQuestAccept(), npc_escortAI::Start(), instance_violet_hold::instance_violet_hold_InstanceMapScript::StartBossEncounter(), npc_vaelastrasz_the_red::UpdateAI(), npc_varian_wrynn::npc_varian_wrynnAI::UpdateAI(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UpdateAI(), boss_algalon_the_observer::UpdateAI(), and npc_general_andorov::WaypointReached().

◆ SetImmuneToPC()

void Unit::SetImmuneToPC ( bool  apply,
bool  keepCombat = false 
)
10639{
10640 if (apply)
10641 {
10643 if (!keepCombat)
10644 {
10645 std::vector<CombatReference*> toEnd;
10646 for (auto const& pair : m_combatManager.GetPvECombatRefs())
10647 if (pair.second->GetOther(this)->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED))
10648 toEnd.push_back(pair.second);
10649 for (auto const& pair : m_combatManager.GetPvPCombatRefs())
10650 toEnd.push_back(pair.second);
10651 for (CombatReference* ref : toEnd)
10652 ref->EndCombat();
10653 }
10654 }
10655 else
10657}

References CombatManager::GetPvECombatRefs(), CombatManager::GetPvPCombatRefs(), m_combatManager, RemoveUnitFlag(), SetUnitFlag(), UNIT_FLAG_IMMUNE_TO_PC, and UNIT_FLAG_PLAYER_CONTROLLED.

Referenced by boss_victor_nefarius::BeginEvent(), boss_the_lich_king::boss_the_lich_kingAI::boss_the_lich_kingAI(), ClearInCombat(), npc_overlord_drakuru_betrayal::DamageTaken(), npc_magister_aledis::DamageTaken(), boss_dorothee::DoAction(), boss_roar::DoAction(), boss_strawman::DoAction(), boss_tinhead::DoAction(), boss_apothecary_hummel::boss_apothecary_hummelAI::DoAction(), npc_apothecary_genericAI::DoAction(), npc_coren_direbrew::DoAction(), npc_direbrew_antagonist::DoAction(), boss_falric::DoAction(), boss_marwyn::DoAction(), npc_spinestalker::npc_spinestalkerAI::DoAction(), npc_rimefang::npc_rimefangAI::DoAction(), boss_algalon_the_observer::DoAction(), npc_frozen_core::DoAction(), boss_tyrannus::boss_tyrannusAI::DoAction(), boss_palehoof::boss_palehoofAI::DoAction(), npc_massive_jormungar::npc_massive_jormungarAI::DoAction(), npc_ferocious_rhino::npc_ferocious_rhinoAI::DoAction(), npc_ravenous_furbolg::npc_ravenous_furbolgAI::DoAction(), npc_frenzied_worgen::npc_frenzied_worgenAI::DoAction(), boss_skadi::boss_skadiAI::DoAction(), boss_tenris_mirkblood::EnterEvadeMode(), spell_q11396_11399_force_shield_arcane_purple_x3::HandleEffectApply(), spell_q11396_11399_force_shield_arcane_purple_x3::HandleEffectRemove(), spell_chapter2_persuasive_strike::HandleHit(), boss_felmyst::InitializeAI(), boss_blackheart_the_inciter::JustEngagedWith(), boss_razorscale::JustEngagedWith(), npc_spinestalker::npc_spinestalkerAI::MovementInform(), npc_rimefang::npc_rimefangAI::MovementInform(), npc_omen::npc_omenAI::MovementInform(), npc_omen::npc_omenAI::npc_omenAI(), instance_ulduar::instance_ulduar_InstanceMapScript::OnPlayerEnter(), npc_kaya_flathoof::OnQuestAccept(), boss_doomrel::Reset(), boss_pyroguard_emberseer::Reset(), boss_tenris_mirkblood::Reset(), boss_julianne::Reset(), npc_unworthy_initiate::npc_unworthy_initiateAI::Reset(), npc_a_special_surprise::npc_a_special_surpriseAI::Reset(), npc_coren_direbrew::Reset(), boss_general_zarithrian::boss_general_zarithrianAI::Reset(), boss_the_lich_king::boss_the_lich_kingAI::Reset(), boss_gothik::boss_gothikAI::Reset(), boss_algalon_the_observer::Reset(), boss_skadi::boss_skadiAI::Reset(), npc_venture_co_straggler::npc_venture_co_stragglerAI::Reset(), npc_wild_wyrm::Reset(), npc_overlord_drakuru_betrayal::Reset(), boss_blackheart_the_inciter::Reset(), boss_magtheridon::Reset(), npc_magister_aledis::Reset(), boss_magtheridon::ScheduleCombatEvents(), SetImmuneToAll(), boss_victor_nefarius::sGossipSelect(), npc_infernal_attacker::npc_infernal_attackerAI::SpellHit(), npc_overlord_drakuru_betrayal::SpellHit(), npc_venture_co_straggler::npc_venture_co_stragglerAI::SpellHit(), npc_wild_wyrm::SpellHit(), boss_felmyst::StartIntro(), boss_pyroguard_emberseer::UpdateAI(), go_blood_drenched_door::go_blood_drenched_doorAI::UpdateAI(), npc_unworthy_initiate::npc_unworthy_initiateAI::UpdateAI(), npc_a_special_surprise::npc_a_special_surpriseAI::UpdateAI(), boss_gothik::boss_gothikAI::UpdateAI(), boss_algalon_the_observer::UpdateAI(), npc_overlord_drakuru_betrayal::UpdateAI(), and npc_magister_aledis::UpdateAI().

◆ SetInCombatWith()

◆ SetInFront()

◆ SetInstantCast()

void Unit::SetInstantCast ( bool  set)
inline
1586{ _instantCast = set; }

References _instantCast.

Referenced by AuraEffect::HandleModCastingSpeed().

◆ SetIsCombatDisallowed()

◆ SetLastDamagedTargetGuid()

void Unit::SetLastDamagedTargetGuid ( ObjectGuid const &  guid)
inline

◆ SetLastExtraAttackSpell()

void Unit::SetLastExtraAttackSpell ( uint32  spellId)
inline
1009{ _lastExtraAttackSpell = spellId; }

References _lastExtraAttackSpell.

Referenced by Spell::_handle_finish_phase().

◆ SetLastManaUse()

void Unit::SetLastManaUse ( uint32  spellCastTime)
inline
1151{ m_lastManaUse = spellCastTime; }

References m_lastManaUse.

Referenced by Spell::TakePower().

◆ SetLevel()

void Unit::SetLevel ( uint8  lvl,
bool  showLevelChange = true 
)

◆ SetMaxHealth()

void Unit::SetMaxHealth ( uint32  val)
12407{
12408 if (!val)
12409 val = 1;
12410
12411 uint32 health = GetHealth();
12413
12414 // group update
12415 if (IsPlayer())
12416 {
12417 Player* player = ToPlayer();
12418 if (player->NeedSendSpectatorData())
12420
12421 if (player->GetGroup())
12423 }
12424 else if (Pet* pet = ToCreature()->ToPet())
12425 {
12426 if (pet->isControlled())
12427 {
12428 if (Unit* owner = GetOwner())
12429 if (Player* player = owner->ToPlayer())
12430 {
12431 if (player->NeedSendSpectatorData() && pet->GetCreatureTemplate()->family)
12432 ArenaSpectator::SendCommand_UInt32Value(player->FindMap(), player->GetGUID(), "PHP", (uint32)pet->GetHealthPct());
12433
12434 if (player->GetGroup())
12436 }
12437 }
12438 }
12439
12440 if (val < health)
12441 SetHealth(val);
12442}
@ GROUP_UPDATE_FLAG_MAX_HP
Definition Group.h:102
@ GROUP_UPDATE_FLAG_PET_MAX_HP
Definition Group.h:114

References WorldObject::FindMap(), Player::GetGroup(), Object::GetGUID(), GetHealth(), GetOwner(), GROUP_UPDATE_FLAG_MAX_HP, GROUP_UPDATE_FLAG_PET_MAX_HP, Object::IsPlayer(), Player::NeedSendSpectatorData(), ArenaSpectator::SendCommand_UInt32Value(), Player::SetGroupUpdateFlag(), SetHealth(), SetUInt32Value(), Object::ToCreature(), ToPet(), Object::ToPlayer(), and UNIT_FIELD_MAXHEALTH.

Referenced by boss_xt002::DoAction(), Spell::EffectSummonType(), modify_commandscript::HandleModifyHPCommand(), npc_commandscript::HandleNpcSetLevelCommand(), npc_pet_hunter_snake_trap::InitializeAI(), npc_pet_pri_lightwell::InitializeAI(), Player::InitStatsForLevel(), boss_skeram::JustSummoned(), npc_corrupted_totem::npc_corrupted_totem(), npc_xt002_life_spark::npc_xt002_life_spark(), Creature::SelectLevel(), Creature::UpdateMaxHealth(), Guardian::UpdateMaxHealth(), and Player::UpdateMaxHealth().

◆ SetMaxPower()

void Unit::SetMaxPower ( Powers  power,
uint32  val 
)
12496{
12497 uint32 cur_power = GetPower(power);
12498 SetStatInt32Value(static_cast<uint16>(UNIT_FIELD_MAXPOWER1) + power, val);
12499
12500 // group update
12501 if (IsPlayer())
12502 {
12503 Player* player = ToPlayer();
12504 if (getPowerType() == power && player->NeedSendSpectatorData())
12505 ArenaSpectator::SendCommand_UInt32Value(FindMap(), GetGUID(), "MPW", power == POWER_RAGE || power == POWER_RUNIC_POWER ? val / 10 : val);
12506
12507 if (player->GetGroup())
12509 }
12510 else if (Pet* pet = ToCreature()->ToPet())
12511 {
12512 if (pet->isControlled())
12513 {
12514 Unit* owner = GetOwner();
12515 if (owner && (owner->IsPlayer()) && owner->ToPlayer()->GetGroup())
12517 }
12518 }
12519
12520 if (val < cur_power)
12521 SetPower(power, val);
12522}
@ GROUP_UPDATE_FLAG_PET_MAX_POWER
Definition Group.h:117
@ GROUP_UPDATE_FLAG_MAX_POWER
Definition Group.h:105
void SetStatInt32Value(uint16 index, int32 value)
Definition Object.cpp:787

References WorldObject::FindMap(), Player::GetGroup(), Object::GetGUID(), GetOwner(), GetPower(), getPowerType(), GROUP_UPDATE_FLAG_MAX_POWER, GROUP_UPDATE_FLAG_PET_MAX_POWER, Object::IsPlayer(), Player::NeedSendSpectatorData(), POWER_RAGE, POWER_RUNIC_POWER, ArenaSpectator::SendCommand_UInt32Value(), Player::SetGroupUpdateFlag(), SetPower(), Object::SetStatInt32Value(), Object::ToCreature(), ToPet(), Object::ToPlayer(), and UNIT_FIELD_MAXPOWER1.

Referenced by Player::Create(), Pet::CreateBaseAtTamed(), modify_commandscript::HandleModifyEnergyCommand(), modify_commandscript::HandleModifyManaCommand(), modify_commandscript::HandleModifyRageCommand(), modify_commandscript::HandleModifyRunicPowerCommand(), spell_putricide_mutated_transformation::HandleSummon(), Player::InitStatsForLevel(), Pet::LoadPetFromDB(), Creature::SelectLevel(), setPowerType(), Creature::UpdateMaxPower(), Guardian::UpdateMaxPower(), and Player::UpdateMaxPower().

◆ SetMinion()

void Unit::SetMinion ( Minion minion,
bool  apply 
)
7796{
7797 LOG_DEBUG("entities.unit", "SetMinion {} for {}, apply {}", minion->GetEntry(), GetEntry(), apply);
7798
7799 if (apply)
7800 {
7801 if (minion->GetOwnerGUID())
7802 {
7803 LOG_FATAL("entities.unit", "SetMinion: Minion {} is not the minion of owner {}", minion->GetEntry(), GetEntry());
7804 return;
7805 }
7806
7807 minion->SetOwnerGUID(GetGUID());
7808
7809 m_Controlled.insert(minion);
7810
7811 if (IsPlayer())
7812 {
7813 minion->m_ControlledByPlayer = true;
7815 }
7816
7817 // Can only have one pet. If a new one is summoned, dismiss the old one.
7818 if (minion->IsGuardianPet())
7819 {
7820 if (Guardian* oldPet = GetGuardianPet())
7821 {
7822 if (oldPet != minion && (oldPet->IsPet() || minion->IsPet() || oldPet->GetEntry() != minion->GetEntry()))
7823 {
7824 // remove existing minion pet
7825 if (Pet* oldPetAsPet = oldPet->ToPet())
7826 {
7827 oldPetAsPet->Remove(PET_SAVE_NOT_IN_SLOT);
7828 }
7829 else
7830 {
7831 oldPet->UnSummon();
7832 }
7833
7834 SetPetGUID(minion->GetGUID());
7836 }
7837 }
7838 else
7839 {
7840 SetPetGUID(minion->GetGUID());
7842 }
7843 }
7844
7846 {
7848 }
7849
7850 if (minion->m_Properties && minion->m_Properties->Type == SUMMON_TYPE_MINIPET)
7851 {
7852 SetCritterGUID(minion->GetGUID());
7853 }
7854
7855 // PvP, FFAPvP
7857
7858 // Ghoul pets have energy instead of mana (is anywhere better place for this code?)
7859 if (minion->IsPetGhoul() || minion->GetEntry() == 24207 /*ENTRY_ARMY_OF_THE_DEAD*/)
7860 minion->setPowerType(POWER_ENERGY);
7861
7862 if (IsPlayer())
7863 {
7864 // Send infinity cooldown - client does that automatically but after relog cooldown needs to be set again
7865 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(minion->GetUInt32Value(UNIT_CREATED_BY_SPELL));
7866
7867 if (spellInfo && spellInfo->IsCooldownStartedOnEvent())
7868 ToPlayer()->AddSpellAndCategoryCooldowns(spellInfo, 0, nullptr, true);
7869 }
7870 }
7871 else
7872 {
7873 if (minion->GetOwnerGUID() != GetGUID())
7874 {
7875 LOG_FATAL("entities.unit", "SetMinion: Minion {} is not the minion of owner {}", minion->GetEntry(), GetEntry());
7876 return;
7877 }
7878
7879 m_Controlled.erase(minion);
7880
7881 if (minion->m_Properties && minion->m_Properties->Type == SUMMON_TYPE_MINIPET)
7882 {
7883 if (GetCritterGUID() == minion->GetGUID())
7885 }
7886
7887 if (minion->IsGuardianPet())
7888 {
7889 if (GetPetGUID() == minion->GetGUID())
7891 }
7892 else if (minion->IsTotem())
7893 {
7894 // All summoned by totem minions must disappear when it is removed.
7895 if (SpellInfo const* spInfo = sSpellMgr->GetSpellInfo(minion->ToTotem()->GetSpell()))
7896 {
7897 for (int i = 0; i < MAX_SPELL_EFFECTS; ++i)
7898 {
7899 if (spInfo->Effects[i].Effect != SPELL_EFFECT_SUMMON)
7900 continue;
7901
7902 RemoveAllMinionsByEntry(spInfo->Effects[i].MiscValue);
7903 }
7904 }
7905 }
7906
7907 if (IsPlayer())
7908 {
7909 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(minion->GetUInt32Value(UNIT_CREATED_BY_SPELL));
7910 // Remove infinity cooldown
7911 if (spellInfo && spellInfo->IsCooldownStartedOnEvent())
7912 ToPlayer()->SendCooldownEvent(spellInfo);
7913
7914 // xinef: clear spell book
7915 if (m_Controlled.empty())
7917 }
7918
7919 //if (minion->HasUnitTypeMask(UNIT_MASK_GUARDIAN))
7920 {
7922 {
7923 // Check if there is another minion
7924 for (ControlSet::iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr)
7925 {
7926 // do not use this check, creature do not have charm guid
7927 //if (GetCharmGUID() == (*itr)->GetGUID())
7928 if (GetGUID() == (*itr)->GetCharmerGUID())
7929 continue;
7930
7931 //ASSERT((*itr)->GetOwnerGUID() == GetGUID());
7932 if ((*itr)->GetOwnerGUID() != GetGUID())
7933 {
7934 OutDebugInfo();
7935 (*itr)->OutDebugInfo();
7936 ABORT();
7937 }
7938 ASSERT((*itr)->IsCreature());
7939
7940 if (!(*itr)->HasUnitTypeMask(UNIT_MASK_CONTROLLABLE_GUARDIAN))
7941 continue;
7942
7943 if (AddGuidValue(UNIT_FIELD_SUMMON, (*itr)->GetGUID()))
7944 {
7945 // show another pet bar if there is no charm bar
7946 if (IsPlayer() && !GetCharmGUID())
7947 {
7948 if ((*itr)->IsPet())
7950 else
7952 }
7953 }
7954 break;
7955 }
7956 }
7957 }
7958 }
7959}
@ PET_SAVE_NOT_IN_SLOT
Definition PetDefines.h:46
@ SPELL_EFFECT_SUMMON
Definition SharedDefines.h:794
@ SUMMON_TYPE_MINIPET
Definition SharedDefines.h:3532
bool IsGuardianPet() const
Definition TemporarySummon.cpp:395
bool IsPetGhoul() const
Definition TemporarySummon.h:95
void PetSpellInitialize()
Definition Player.cpp:9498
const SummonPropertiesEntry *const m_Properties
Definition TemporarySummon.h:74
uint32 GetSpell(uint8 slot=0) const
Definition Totem.h:59
void OutDebugInfo() const
Definition Unit.cpp:16168
ObjectGuid GetCritterGUID() const
Definition Unit.h:725
void SetOwnerGUID(ObjectGuid owner)
Definition Unit.cpp:7683
void SetCritterGUID(ObjectGuid guid)
Definition Unit.h:724
void setPowerType(Powers power)
Definition Unit.cpp:7007
void RemoveAllMinionsByEntry(uint32 entry)
Definition Unit.cpp:7973
uint32 Type
Definition DBCStructure.h:1913

References ABORT, Object::AddGuidValue(), Player::AddSpellAndCategoryCooldowns(), ASSERT, Player::CharmSpellInitialize(), ObjectGuid::Empty, Object::GetByteValue(), GetCharmGUID(), GetCritterGUID(), Object::GetEntry(), GetGuardianPet(), Object::GetGUID(), Object::GetGUID(), GetOwnerGUID(), GetPetGUID(), Totem::GetSpell(), Object::GetUInt32Value(), HasUnitTypeMask(), SpellInfo::IsCooldownStartedOnEvent(), Minion::IsGuardianPet(), IsPet(), Minion::IsPetGhoul(), Object::IsPlayer(), IsTotem(), LOG_DEBUG, LOG_FATAL, m_Controlled, m_ControlledByPlayer, TempSummon::m_Properties, MAX_SPELL_EFFECTS, OutDebugInfo(), PET_SAVE_NOT_IN_SLOT, Player::PetSpellInitialize(), POWER_ENERGY, RemoveAllMinionsByEntry(), Object::RemoveGuidValue(), Player::SendCooldownEvent(), Player::SendRemoveControlBar(), Object::SetByteValue(), SetCritterGUID(), SetMinionGUID(), SetOwnerGUID(), SetPetGUID(), setPowerType(), SetUnitFlag(), SPELL_EFFECT_SUMMON, sSpellMgr, SUMMON_TYPE_MINIPET, ToPet(), Object::ToPlayer(), ToTotem(), SummonPropertiesEntry::Type, UNIT_CREATED_BY_SPELL, UNIT_FIELD_BYTES_2, UNIT_FIELD_SUMMON, UNIT_FLAG_PLAYER_CONTROLLED, and UNIT_MASK_CONTROLLABLE_GUARDIAN.

Referenced by Player::CreatePet(), Player::CreatePet(), Spell::EffectCreateTamedPet(), Spell::EffectTameCreature(), Pet::LoadPetFromDB(), Player::RemovePet(), and Player::SummonPet().

◆ SetMinionGUID()

void Unit::SetMinionGUID ( ObjectGuid  guid)
inline

◆ SetModelVisible()

◆ SetNativeDisplayId()

◆ SetNpcFlag()

void Unit::SetNpcFlag ( NPCFlags  flags)
inline
764{ SetFlag(UNIT_NPC_FLAGS, flags); }

References Object::SetFlag(), and UNIT_NPC_FLAGS.

Referenced by Vehicle::AddPassenger(), npc_riggle_bassbait::npc_riggle_bassbaitAI::CheckTournamentState(), npc_ulduar_arachnopod_destroyer::DamageTaken(), npc_magister_aledis::DamageTaken(), npc_thrall_warchief::npc_thrall_warchiefAI::DoAction(), boss_vaelastrasz::Initialize(), boss_majordomo::InitializeAI(), npc_sergeant_bly::npc_sergeant_blyAI::InitializeAI(), npc_weegli_blastfuse::npc_weegli_blastfuseAI::InitializeAI(), npc_isle_of_conquest_turret::npc_isle_of_conquest_turretAI::JustDied(), npc_weegli_blastfuse::npc_weegli_blastfuseAI::JustReachedHome(), npc_tirion_fordring_tft::npc_tirion_fordringAI::JustReachedHome(), npc_battle_at_valhalas::npc_battle_at_valhalasAI::JustReachedHome(), npc_aeranas::npc_aeranasAI::JustReachedHome(), npc_chesspiece::MovementInform(), npc_fos_leader_second::npc_fos_leader_secondAI::MovementInform(), npc_pos_leader_second::npc_pos_leader_secondAI::MovementInform(), npc_weegli_blastfuse::npc_weegli_blastfuseAI::MovementInform(), npc_oculus_drakegiver::npc_oculus_drakegiverAI::MovementInform(), npc_chesspiece::OnCharmed(), instance_halls_of_reflection::OnCreatureCreate(), npc_akama_illidan::PathEndReached(), npc_chicken_cluck::npc_chicken_cluckAI::ReceiveEmote(), npc_plucky::npc_pluckyAI::ReceiveEmote(), Vehicle::RemovePassenger(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::ReorderInstance(), boss_victor_nefarius::Reset(), boss_apothecary_hummel::boss_apothecary_hummelAI::Reset(), npc_deathstalker_fearleia::Reset(), npc_varian_wrynn::npc_varian_wrynnAI::Reset(), npc_thrall_bfu::npc_thrall_bfuAI::Reset(), boss_azuregos::boss_azuregosAI::Reset(), npc_hyjal_jaina::hyjalJainaAI::Reset(), npc_hyjal_thrall::hyjalThrallAI::Reset(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::Reset(), npc_belnistrasz::npc_belnistraszAI::Reset(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::Reset(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::Reset(), npc_crusade_recruit::npc_crusade_recruitAI::Reset(), npc_akama_illidan::Reset(), npc_akama_shade::Reset(), npc_magister_aledis::Reset(), Vehicle::Reset(), npc_battle_at_valhalas::npc_battle_at_valhalasAI::ResetData(), NPCStaveQuestAI::ResetState(), boss_majordomo::SpellHit(), npc_aged_dying_ancient_kodo::SpellHit(), npc_thrall_bfu::npc_thrall_bfuAI::UpdateAI(), npc_arthas::npc_arthasAI::UpdateAI(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UpdateAI(), npc_xerestrasza::npc_xerestraszaAI::UpdateAI(), npc_hor_leader::npc_hor_leaderAI::UpdateAI(), npc_hor_leader_second::npc_hor_leader_secondAI::UpdateAI(), npc_isle_of_conquest_turret::npc_isle_of_conquest_turretAI::UpdateAI(), npc_oculus_drakegiver::npc_oculus_drakegiverAI::UpdateAI(), npc_shandy_dalaran::npc_shandy_dalaranAI::UpdateAI(), npc_lake_frog::npc_lake_frogAI::UpdateAI(), Vehicle::Vehicle(), npc_arthas::npc_arthasAI::WaypointReached(), npc_daphne_stilwell::npc_daphne_stilwellAI::WaypointReached(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::WaypointReached(), npc_general_andorov::WaypointReached(), and npc_cork_gizelton::npc_cork_gizeltonAI::WaypointReached().

◆ SetOwnerGUID()

void Unit::SetOwnerGUID ( ObjectGuid  owner)
7684{
7685 if (GetOwnerGUID() == owner)
7686 return;
7687
7689 if (!owner)
7690 return;
7691
7692 m_applyResilience = !IsVehicle() && owner.IsPlayer();
7693
7694 // Update owner dependent fields
7695 Player* player = ObjectAccessor::GetPlayer(*this, owner);
7696 if (!player || !player->HaveAtClient(this)) // if player cannot see this unit yet, he will receive needed data with create object
7697 return;
7698
7700
7701 UpdateData udata;
7702 WorldPacket packet;
7703 BuildValuesUpdateBlockForPlayer(&udata, player);
7704 udata.BuildPacket(packet);
7705 player->SendDirectMessage(&packet);
7706
7708}
void BuildValuesUpdateBlockForPlayer(UpdateData *data, Player *target)
Definition Object.cpp:246
void RemoveFieldNotifyFlag(uint16 flag)
Definition Object.h:196
void SetFieldNotifyFlag(uint16 flag)
Definition Object.h:195
bool HaveAtClient(WorldObject const *u) const
Definition Player.cpp:11345
Definition UpdateData.h:52
bool BuildPacket(WorldPacket &packet)
Definition UpdateData.cpp:48

References UpdateData::BuildPacket(), Object::BuildValuesUpdateBlockForPlayer(), GetOwnerGUID(), ObjectAccessor::GetPlayer(), Player::HaveAtClient(), ObjectGuid::IsPlayer(), IsVehicle(), m_applyResilience, Object::RemoveFieldNotifyFlag(), Player::SendDirectMessage(), Object::SetFieldNotifyFlag(), Object::SetGuidValue(), UF_FLAG_OWNER, and UNIT_FIELD_SUMMONEDBY.

Referenced by GameObject::CastSpell(), Spell::EffectSummonType(), boss_illidari_council_memberAI::EnterEvadeMode(), spell_item_draenic_pale_ale::HandleSummon(), npc_pet_gen_fetch_ball::IsSummonedBy(), boss_razorgore::JustSummoned(), Player::LoadFromDB(), SetMinion(), and npc_grimstone::UpdateEscortAI().

◆ SetPetGUID()

◆ SetPhaseMask()

void Unit::SetPhaseMask ( uint32  newPhaseMask,
bool  update 
)
overridevirtual

Reimplemented from WorldObject.

15319{
15320 if (newPhaseMask == GetPhaseMask())
15321 return;
15322
15323 if (IsInWorld())
15324 {
15325 // xinef: to comment, bellow line should be removed
15326 // pussywizard: goign to other phase (valithria, algalon) should not remove such auras
15327 //RemoveNotOwnSingleTargetAuras(newPhaseMask, true); // we can lost access to caster or target
15328
15329 if (!sScriptMgr->CanSetPhaseMask(this, newPhaseMask, update))
15330 return;
15331
15332 // Phase-related threat updates are done AFTER the phase change below
15333 }
15334
15335 WorldObject::SetPhaseMask(newPhaseMask, false);
15336
15337 // Now update threat online states with the new phase mask applied
15338 if (IsCreature() || (IsPlayer() && !ToPlayer()->IsGameMaster() && !ToPlayer()->GetSession()->PlayerLogout()))
15339 {
15340 // Update online state for units that have me on their threat list
15341 for (auto const& pair : GetThreatMgr().GetThreatenedByMeList())
15342 {
15343 if (ThreatReference* ref = pair.second)
15344 ref->UpdateOffline();
15345 }
15346
15347 // Update online state for units on my threat list
15348 if (!IsPlayer())
15349 {
15350 for (ThreatReference* ref : GetThreatMgr().GetModifiableThreatList())
15351 ref->UpdateOffline();
15352 }
15353 }
15354
15355 if (!IsInWorld())
15356 {
15357 return;
15358 }
15359
15360 for (ControlSet::const_iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); )
15361 {
15362 Unit* controlled = *itr;
15363 ++itr;
15364 if (controlled->IsCreature())
15365 {
15366 controlled->SetPhaseMask(newPhaseMask, true);
15367 }
15368 }
15369
15370 for (uint8 i = 0; i < MAX_SUMMON_SLOT; ++i)
15371 {
15372 if (m_SummonSlot[i])
15373 {
15374 if (Creature* summon = GetMap()->GetCreature(m_SummonSlot[i]))
15375 {
15376 summon->SetPhaseMask(newPhaseMask, true);
15377 }
15378 }
15379 }
15380
15381 if (update)
15382 {
15384 }
15385}
Definition ThreatManager.h:267
void SetPhaseMask(uint32 newPhaseMask, bool update) override
Definition Unit.cpp:15318
virtual void SetPhaseMask(uint32 newPhaseMask, bool update)
Definition Object.cpp:2939

References Map::GetCreature(), WorldObject::GetMap(), ThreatManager::GetModifiableThreatList(), WorldObject::GetPhaseMask(), ThreatManager::GetThreatenedByMeList(), GetThreatMgr(), Object::IsCreature(), Object::IsInWorld(), Object::IsPlayer(), m_Controlled, m_SummonSlot, MAX_SUMMON_SLOT, WorldObject::SetPhaseMask(), SetPhaseMask(), sScriptMgr, Object::ToPlayer(), and UpdateObjectVisibility().

Referenced by Pet::Create(), Creature::Create(), misc_commandscript::HandleAppearCommand(), modify_commandscript::HandleModifyPhaseCommand(), npc_commandscript::HandleNpcSetPhaseCommand(), spell_wintergrasp_hide_small_elementals_aura::HandlePeriodicDummy(), AuraEffect::HandlePhase(), Battlefield::HideNpc(), npc_the_lich_king_controller::npc_the_lich_king_controllerAI::JustSummoned(), boss_zuramat::JustSummoned(), boss_victor_nefarius::Reset(), boss_volazj::Reset(), boss_twilight_halion::boss_twilight_halionAI::Reset(), Creature::setDeathState(), Player::SetGameMaster(), TestCreature::SetPhase(), SetPhaseMask(), Battlefield::ShowNpc(), WorldObject::SummonTrigger(), and npc_mootoo_the_younger::npc_mootoo_the_youngerAI::WaypointReached().

◆ SetPower()

void Unit::SetPower ( Powers  power,
uint32  val,
bool  withPowerUpdate = true,
bool  fromRegenerate = false 
)
12445{
12446 if (!fromRegenerate && GetPower(power) == val)
12447 return;
12448
12449 uint32 maxPower = GetMaxPower(power);
12450 if (maxPower < val)
12451 val = maxPower;
12452
12453 if (fromRegenerate)
12454 {
12457 }
12458 else
12460
12461 if (withPowerUpdate)
12462 {
12463 WorldPacket data(SMSG_POWER_UPDATE, 8 + 1 + 4);
12464 data << GetPackGUID();
12465 data << uint8(power);
12466 data << uint32(val);
12467 SendMessageToSet(&data, IsPlayer());
12468 }
12469
12470 // group update
12471 if (IsPlayer())
12472 {
12473 Player* player = ToPlayer();
12474 if (getPowerType() == power && player->NeedSendSpectatorData())
12475 ArenaSpectator::SendCommand_UInt32Value(FindMap(), GetGUID(), "CPW", power == POWER_RAGE || power == POWER_RUNIC_POWER ? val / 10 : val);
12476
12477 if (player->GetGroup())
12479 }
12480 else if (Pet* pet = ToCreature()->ToPet())
12481 {
12482 if (pet->isControlled())
12483 {
12484 Unit* owner = GetOwner();
12485 if (owner && (owner->IsPlayer()) && owner->ToPlayer()->GetGroup())
12487 }
12488
12489 // Update the pet's character sheet with happiness damage bonus
12490 if (pet->getPetType() == HUNTER_PET && power == POWER_HAPPINESS)
12491 pet->UpdateDamagePhysical(BASE_ATTACK);
12492 }
12493}
@ GROUP_UPDATE_FLAG_PET_CUR_POWER
Definition Group.h:116
@ GROUP_UPDATE_FLAG_CUR_POWER
Definition Group.h:104
void UpdateUInt32Value(uint16 index, uint32 value)
Definition Object.cpp:652
void AddToObjectUpdateIfNeeded()
Definition Object.cpp:513
@ SMSG_POWER_UPDATE
Definition Opcodes.h:1182

References Object::AddToObjectUpdateIfNeeded(), AsUnderlyingType(), BASE_ATTACK, WorldObject::FindMap(), Player::GetGroup(), Object::GetGUID(), GetMaxPower(), GetOwner(), Object::GetPackGUID(), GetPower(), getPowerType(), GROUP_UPDATE_FLAG_CUR_POWER, GROUP_UPDATE_FLAG_PET_CUR_POWER, HUNTER_PET, Object::IsPlayer(), Player::NeedSendSpectatorData(), POWER_HAPPINESS, POWER_RAGE, POWER_RUNIC_POWER, ArenaSpectator::SendCommand_UInt32Value(), WorldObject::SendMessageToSet(), Player::SetGroupUpdateFlag(), Object::SetStatInt32Value(), SMSG_POWER_UPDATE, Object::ToCreature(), ToPet(), Object::ToPlayer(), UNIT_FIELD_POWER1, and Object::UpdateUInt32Value().

Referenced by Player::ActivateSpec(), Player::Create(), Pet::CreateBaseAtTamed(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::DamageTaken(), boss_shade_of_aran::DamageTaken(), boss_deathbringer_saurfang::boss_deathbringer_saurfangAI::DoAction(), Spell::EffectSelfResurrect(), Spell::EffectSummonPet(), Player::GiveLevel(), AuraEffect::HandleAuraModShapeshift(), spell_warr_execute::HandleEffect(), modify_commandscript::HandleModifyEnergyCommand(), modify_commandscript::HandleModifyManaCommand(), modify_commandscript::HandleModifyRageCommand(), modify_commandscript::HandleModifyRunicPowerCommand(), spell_dk_pet_scaling::HandlePeriodic(), spell_dru_frenzied_regeneration::HandlePeriodic(), spell_hun_generic_scaling::HandlePeriodic(), spell_mage_pet_scaling::HandlePeriodic(), spell_sha_feral_spirit_scaling::HandlePeriodic(), spell_warl_generic_scaling::HandlePeriodic(), WorldSession::HandlePetAbandon(), spell_putricide_mutated_transformation::HandleSummon(), Player::InitStatsForLevel(), Guardian::InitStatsForLevel(), Creature::LoadCreatureFromDB(), Player::LoadFromDB(), Pet::LoadPetFromDB(), ModifyPower(), boss_shade_of_aran::OnPowerUpdate(), Player::ProcessDelayedOperations(), Player::Regenerate(), spell_igb_incinerating_blast::RemoveEnergy(), spell_igb_below_zero::RemovePassengers(), boss_curator::Reset(), boss_shade_of_aran::Reset(), boss_selin_fireheart::Reset(), boss_moam::Reset(), npc_obsidian_destroyer::Reset(), npc_obsidian_eradicator::Reset(), npc_obsidian_nullifier::Reset(), boss_deathbringer_saurfang::boss_deathbringer_saurfangAI::Reset(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::Reset(), Player::ResetAllPowers(), Player::RestoreManaAfterDuel(), Player::ResurectUsingRequestData(), Player::ResurrectPlayer(), Creature::SelectLevel(), setDeathState(), SetMaxPower(), setPowerType(), Player::SummonPet(), and npc_dalaran_mage::npc_dalaran_mageAI::UpdateAI().

◆ setPowerType()

void Unit::setPowerType ( Powers  power)
7008{
7009 SetByteValue(UNIT_FIELD_BYTES_0, 3, new_powertype);
7010
7011 if (IsPlayer())
7012 {
7013 if (ToPlayer()->GetGroup())
7015 }
7016 else if (Pet* pet = ToCreature()->ToPet())
7017 {
7018 if (pet->isControlled())
7019 {
7020 Unit* owner = GetOwner();
7021 if (owner && (owner->IsPlayer()) && owner->ToPlayer()->GetGroup())
7023 }
7024 }
7025
7026 float powerMultiplier = 1.0f;
7027 if (!IsPet())
7028 if (Creature* creature = ToCreature())
7029 powerMultiplier = creature->GetCreatureTemplate()->ModMana;
7030
7031 switch (new_powertype)
7032 {
7033 default:
7034 case POWER_MANA:
7035 break;
7036 case POWER_RAGE:
7037 SetMaxPower(POWER_RAGE, uint32(std::ceil(GetCreatePowers(POWER_RAGE) * powerMultiplier)));
7038 SetPower(POWER_RAGE, 0);
7039 break;
7040 case POWER_FOCUS:
7041 SetMaxPower(POWER_FOCUS, uint32(std::ceil(GetCreatePowers(POWER_FOCUS) * powerMultiplier)));
7042 SetPower(POWER_FOCUS, uint32(std::ceil(GetCreatePowers(POWER_FOCUS) * powerMultiplier)));
7043 break;
7044 case POWER_ENERGY:
7045 SetMaxPower(POWER_ENERGY, uint32(std::ceil(GetCreatePowers(POWER_ENERGY) * powerMultiplier)));
7046 break;
7047 case POWER_HAPPINESS:
7048 SetMaxPower(POWER_HAPPINESS, uint32(std::ceil(GetCreatePowers(POWER_HAPPINESS) * powerMultiplier)));
7049 SetPower(POWER_HAPPINESS, uint32(std::ceil(GetCreatePowers(POWER_HAPPINESS) * powerMultiplier)));
7050 break;
7051 }
7052
7053 if (Player const* player = ToPlayer())
7054 if (player->NeedSendSpectatorData())
7055 {
7056 ArenaSpectator::SendCommand_UInt32Value(FindMap(), GetGUID(), "PWT", new_powertype);
7057 ArenaSpectator::SendCommand_UInt32Value(FindMap(), GetGUID(), "MPW", new_powertype == POWER_RAGE || new_powertype == POWER_RUNIC_POWER ? GetMaxPower(new_powertype) / 10 : GetMaxPower(new_powertype));
7058 ArenaSpectator::SendCommand_UInt32Value(FindMap(), GetGUID(), "CPW", new_powertype == POWER_RAGE || new_powertype == POWER_RUNIC_POWER ? GetPower(new_powertype) / 10 : GetPower(new_powertype));
7059 }
7060}
@ GROUP_UPDATE_FLAG_POWER_TYPE
Definition Group.h:103
@ GROUP_UPDATE_FLAG_PET_POWER_TYPE
Definition Group.h:115
uint32 GetCreatePowers(Powers power) const
Definition Unit.cpp:12524
void SetMaxPower(Powers power, uint32 val)
Definition Unit.cpp:12495

References WorldObject::FindMap(), GetCreatePowers(), Player::GetGroup(), Object::GetGUID(), GetMaxPower(), GetOwner(), GetPower(), GROUP_UPDATE_FLAG_PET_POWER_TYPE, GROUP_UPDATE_FLAG_POWER_TYPE, IsPet(), Object::IsPlayer(), POWER_ENERGY, POWER_FOCUS, POWER_HAPPINESS, POWER_MANA, POWER_RAGE, POWER_RUNIC_POWER, ArenaSpectator::SendCommand_UInt32Value(), Object::SetByteValue(), Player::SetGroupUpdateFlag(), SetMaxPower(), SetPower(), Object::ToCreature(), ToPet(), Object::ToPlayer(), and UNIT_FIELD_BYTES_0.

Referenced by Pet::CreateBaseAtTamed(), AuraEffect::HandleAuraModShapeshift(), spell_putricide_mutated_transformation::HandleSummon(), Player::InitDataForForm(), Vehicle::Install(), Pet::LoadPetFromDB(), npc_toc_rogue::npc_toc_rogueAI::npc_toc_rogueAI(), SetMinion(), and Player::SummonPet().

◆ SetPvP()

◆ setRace()

void Unit::setRace ( uint8  race)
17071{
17072 if (IsPlayer())
17073 m_race = race;
17074}

References Object::IsPlayer(), and m_race.

◆ SetResistance()

◆ SetRooted()

void Unit::SetRooted ( bool  apply,
bool  stun = false,
bool  logout = false 
)
protected
14478{
14479 const uint32 state = (stun ? (logout ? UNIT_STATE_LOGOUT_TIMER : UNIT_STATE_STUNNED) : UNIT_STATE_ROOT);
14480
14481 if (apply)
14482 {
14483 AddUnitState(state);
14484
14485 SendMoveRoot(true);
14486 }
14487 else
14488 {
14489 ClearUnitState(state);
14490
14491 // Prevent giving ability to move if more immobilizers are active
14492 if (!IsImmobilizedState())
14493 SendMoveRoot(false);
14494 }
14495}
@ UNIT_STATE_LOGOUT_TIMER
Definition UnitDefines.h:205
bool IsImmobilizedState() const
Definition Unit.h:785
void SendMoveRoot(bool state)
Definition Unit.cpp:14497

References AddUnitState(), ClearUnitState(), IsImmobilizedState(), SendMoveRoot(), UNIT_STATE_LOGOUT_TIMER, UNIT_STATE_ROOT, and UNIT_STATE_STUNNED.

Referenced by WorldSession::HandleLogoutCancelOpcode(), WorldSession::HandleLogoutRequestOpcode(), WorldSession::HandlePlayerLoginToCharInWorld(), SetControlled(), and SetStunned().

◆ SetShapeshiftForm()

void Unit::SetShapeshiftForm ( ShapeshiftForm  form)
17307{
17309 sScriptMgr->OnUnitSetShapeshiftForm((Unit*)this, form);
17310}

References Object::SetByteValue(), sScriptMgr, and UNIT_FIELD_BYTES_2.

Referenced by AuraEffect::HandleAuraModShapeshift(), and reset_commandscript::HandleResetStatsOrLevelHelper().

◆ SetSheath()

◆ SetSpeed()

void Unit::SetSpeed ( UnitMoveType  mtype,
float  rate,
bool  forced = false 
)
11312{
11313 if (rate < 0)
11314 rate = 0.0f;
11315
11316 // Update speed only on change
11317 if (m_speed_rate[mtype] == rate)
11318 return;
11319
11320 m_speed_rate[mtype] = rate;
11321
11323
11324 SpeedOpcodePair const& speedOpcodes = SetSpeed2Opc_table[mtype];
11325
11326 if (forced && IsClientControlled())
11327 {
11328 Player* player = const_cast<Player*>(GetClientControlling());
11329 uint32 const counter = player->GetSession()->GetOrderCounter();
11330
11331 // register forced speed changes for WorldSession::HandleForceSpeedChangeAck
11332 // and do it only for real sent packets and use run for run/mounted as client expected
11333 ++player->m_forced_speed_changes[mtype];
11334
11335 WorldPacket data(speedOpcodes[static_cast<size_t>(SpeedOpcodeIndex::PC)], 18);
11336 data << GetPackGUID();
11337 data << counter;
11338 if (mtype == MOVE_RUN)
11339 data << uint8(0); // new 2.1.0
11340
11341 data << GetSpeed(mtype);
11342 player->GetSession()->SendPacket(&data);
11343 player->GetSession()->IncrementOrderCounter();
11344 }
11345 else if (forced)
11346 {
11347 WorldPacket data(speedOpcodes[static_cast<size_t>(SpeedOpcodeIndex::NPC)], 12);
11348 data << GetPackGUID();
11349 data << float(GetSpeed(mtype));
11350 SendMessageToSet(&data, true);
11351 }
11352
11353 if (IsPlayer())
11354 {
11355 // Xinef: update speed of pet also
11356 if (!IsInCombat())
11357 {
11358 Unit* pet = ToPlayer()->GetPet();
11359 if (!pet)
11360 pet = GetCharm();
11361
11362 // xinef: do not affect vehicles and possesed pets
11363 if (pet && (pet->HasUnitFlag(UNIT_FLAG_POSSESSED) || pet->IsVehicle()))
11364 pet = nullptr;
11365
11366 if (pet && pet->IsCreature() && !pet->IsInCombat() && pet->GetMotionMaster()->GetCurrentMovementGeneratorType() == FOLLOW_MOTION_TYPE)
11367 pet->UpdateSpeed(mtype, forced);
11368
11369 if (Unit* critter = ObjectAccessor::GetUnit(*this, GetCritterGUID()))
11370 critter->UpdateSpeed(mtype, forced);
11371 }
11372 ToPlayer()->SetCanTeleport(true);
11373 }
11374}
@ FOLLOW_MOTION_TYPE
Definition MotionMaster.h:54
const Opcodes SpeedOpcodePair[static_cast< size_t >(SpeedOpcodeIndex::MAX)]
Definition Unit.h:649
SpeedOpcodePair SetSpeed2Opc_table[MAX_MOVE_TYPE]
Definition Unit.h:650
MovementGeneratorType GetCurrentMovementGeneratorType() const
Definition MotionMaster.cpp:961
uint8 m_forced_speed_changes[MAX_MOVE_TYPE]
Definition Player.h:2436
float GetSpeed(UnitMoveType mtype) const
Definition Unit.cpp:11306
void propagateSpeedChange()
Definition Unit.h:1746

References FOLLOW_MOTION_TYPE, GetCharm(), GetClientControlling(), GetCritterGUID(), MotionMaster::GetCurrentMovementGeneratorType(), GetMotionMaster(), WorldSession::GetOrderCounter(), Object::GetPackGUID(), Player::GetPet(), Player::GetSession(), GetSpeed(), ObjectAccessor::GetUnit(), HasUnitFlag(), WorldSession::IncrementOrderCounter(), IsClientControlled(), Object::IsCreature(), IsInCombat(), Object::IsPlayer(), IsVehicle(), Player::m_forced_speed_changes, m_speed_rate, MOVE_RUN, NPC, PC, propagateSpeedChange(), WorldObject::SendMessageToSet(), WorldSession::SendPacket(), Player::SetCanTeleport(), SetSpeed2Opc_table, Object::ToPlayer(), UNIT_FLAG_POSSESSED, and UpdateSpeed().

Referenced by Battleground::AddCreature(), boss_bug_trio::DoAction(), boss_sindragosa::boss_sindragosaAI::DoAction(), brann_bronzebeard::brann_bronzebeardAI::DoAction(), boss_grand_champion::boss_grand_championAI::DoAction(), npc_spark_of_ionar::DoAction(), npc_pet_dk_ebon_gargoyle::FlyAway(), boss_volkhan::GoToAnvil(), misc_commandscript::HandleDismountCommand(), spell_mount_check_aura::HandleEffectPeriodic(), boss_sartharion_dragonAI::HandleExtraEvent(), WorldSession::HandleForceSpeedChangeAck(), modify_commandscript::HandleModifyASpeedCommand(), modify_commandscript::HandleModifyMountCommand(), Creature::InitEntry(), boss_glob_of_viscidus::InitializeAI(), Guardian::InitStatsForLevel(), npc_infra_green_bomber_generic::npc_infra_green_bomber_genericAI::IsSummonedBy(), boss_sartharion_dragonAI::JustEngagedWith(), boss_four_horsemen::boss_four_horsemenAI::JustEngagedWith(), boss_sartharion::JustSummoned(), boss_ichoron::JustSummoned(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::MountSelf(), boss_onyxia::MovementInform(), boss_bug_trio::MovementInform(), boss_volkhan::MovementInform(), boss_sindragosa::boss_sindragosaAI::MovementInform(), npc_akilzon_eagle::MovementInform(), npc_hor_leader_second::npc_hor_leader_secondAI::MoveToNextStopPoint(), npc_ancestral_wolf::npc_ancestral_wolfAI::npc_ancestral_wolfAI(), npc_batrider::npc_batrider(), npc_hallows_end_soh::npc_hallows_end_soh(), npc_toc5_player_vehicle::npc_toc5_player_vehicleAI::OnCharmed(), instance_halls_of_reflection::OnCreatureCreate(), npc_vehicle_d16_propelled_delivery::npc_vehicle_d16_propelled_deliveryAI::PassengerBoarded(), npc_hover_disk::PassengerBoarded(), npc_eastvale_peasent::PathEndReached(), SmartScript::ProcessAction(), boss_nightbane::Reset(), npc_zuljin_vortex::Reset(), boss_headless_horseman::Reset(), boss_onyxia::Reset(), boss_bug_trio::Reset(), boss_sartharion_dragonAI::Reset(), boss_sindragosa::boss_sindragosaAI::Reset(), npc_oculus_unstable_sphere::npc_oculus_unstable_sphereAI::Reset(), boss_volkhan::Reset(), boss_thorim_sif_blizzard::Reset(), npc_freed_protodrake::npc_freed_protodrakeAI::Reset(), npc_dream_fog::npc_dream_fogAI::ScheduleEvents(), npc_eastvale_peasent::SetData(), Battlefield::SpawnCreature(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UnMountSelf(), npc_akilzon_eagle::UpdateAI(), boss_onyxia::UpdateAI(), npc_hor_leader::npc_hor_leaderAI::UpdateAI(), npc_hor_lich_king::UpdateAI(), npc_hor_leader_second::npc_hor_leader_secondAI::UpdateAI(), boss_sindragosa::boss_sindragosaAI::UpdateAI(), boss_yoggsaron_death_orb::UpdateAI(), npc_infra_green_bomber_generic::npc_infra_green_bomber_genericAI::UpdateAI(), npc_ulduar_mimiron_rocket::UpdateAI(), UpdateSpeed(), and npc_ancestral_wolf::npc_ancestral_wolfAI::WaypointReached().

◆ SetSpeedRate()

◆ SetStandFlags()

◆ SetStandState()

void Unit::SetStandState ( uint8  state)
13131{
13133
13134 if (IsStandState())
13136
13137 if (IsPlayer())
13138 {
13140 data << (uint8)state;
13141 ToPlayer()->SendDirectMessage(&data);
13142 }
13143}
@ UNIT_BYTES_1_OFFSET_STAND_STATE
Definition UnitDefines.h:26
bool IsStandState() const
Definition Unit.cpp:13115
@ SMSG_STANDSTATE_UPDATE
Definition Opcodes.h:699

References AURA_INTERRUPT_FLAG_NOT_SEATED, Object::IsPlayer(), IsStandState(), RemoveAurasWithInterruptFlags(), Player::SendDirectMessage(), Object::SetByteValue(), SMSG_STANDSTATE_UPDATE, Object::ToPlayer(), UNIT_BYTES_1_OFFSET_STAND_STATE, and UNIT_FIELD_BYTES_1.

Referenced by _ApplyAura(), spell_the_cleansing_cleansing_soul::AfterApply(), spell_the_cleansing_cleansing_soul::AfterRemove(), Creature::AtEngage(), boss_kologarn::boss_kologarn(), boss_twinemperorsAI::boss_twinemperorsAI(), boss_thekal::CheckPhaseTransition(), npc_ringo::npc_ringoAI::ClearFaint(), npc_kerlonian::npc_kerlonianAI::ClearSleeping(), npc_vrykul_skeleton::DamageTaken(), boss_alar::DamageTaken(), boss_thekal::DamageTaken(), boss_shade_of_aran::DamageTaken(), boss_nightbane::DoAction(), boss_twinemperorsAI::DoAction(), npc_twilight_volunteer::DoAction(), boss_the_lurker_below::DoAction(), boss_leotheras_the_blind::DoAction(), npc_madrigosa::DoAction(), boss_illidan_stormrage::DoAction(), boss_reliquary_of_souls::boss_reliquary_of_soulsAI::DoAction(), npc_taretha::npc_tarethaAI::DoAction(), Spell::DoAllEffectOnTarget(), npc_unkor_the_ruthless::npc_unkor_the_ruthlessAI::DoNice(), boss_ahune::Emerge(), UtherBatteredHiltEvent::Execute(), SuckBackEvent::Execute(), boss_ahune::ExecuteEvent(), boss_ingvar_the_plunderer::FeignDeath(), WorldSession::HandleAlterAppearance(), WorldSession::HandleLogoutCancelOpcode(), WorldSession::HandleLogoutRequestOpcode(), WorldSession::HandlePlayerLoginFromDB(), AuraEffect::HandleSpiritOfRedemption(), WorldSession::HandleStandStateChangeOpcode(), DistractMovementGenerator::Initialize(), boss_felmyst::InitializeAI(), npc_ranshalla::npc_ranshallaAI::JustDidDialogueStep(), boss_kalecgos::JustEngagedWith(), boss_palehoof::boss_palehoofAI::JustReachedHome(), npc_massive_jormungar::npc_massive_jormungarAI::JustReachedHome(), npc_ferocious_rhino::npc_ferocious_rhinoAI::JustReachedHome(), npc_ravenous_furbolg::npc_ravenous_furbolgAI::JustReachedHome(), npc_frenzied_worgen::npc_frenzied_worgenAI::JustReachedHome(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::JustRespawned(), boss_yoggsaron_brain::JustSummoned(), npc_wizzlecrank_shredder::npc_wizzlecrank_shredderAI::JustSummoned(), boss_anubarak_trial::boss_anubarak_trialAI::MoveInLineOfSight(), boss_kologarn::MoveInLineOfSight(), boss_reliquary_of_souls::boss_reliquary_of_soulsAI::MoveInLineOfSight(), npc_koltira_deathweaver::npc_koltira_deathweaverAI::MovementInform(), npc_twilight_volunteer::MovementInform(), boss_mr_smite::boss_mr_smiteAI::MovementInform(), npc_madrigosa::npc_madrigosa(), spell_love_is_in_the_air_romantic_picnic::OnApply(), boss_shade_of_aran::OnPowerUpdate(), npc_kernobee::OnQuestAccept(), npc_kerlonian::OnQuestAccept(), npc_gilthares::OnQuestAccept(), npc_ringo::OnQuestAccept(), npc_maghar_captive::OnQuestAccept(), npc_mootoo_the_younger::OnQuestAccept(), npc_bonker_togglevolt::OnQuestAccept(), spell_q12937_relief_for_the_fallen::OnRemove(), boss_reliquary_of_souls::boss_reliquary_of_soulsAI::PhaseTransitionSpawns(), Spell::prepare(), PretendToDie(), boss_alar::PretendToDie(), WorldSession::ProcessMovementInfo(), boss_victor_nefarius::Reset(), boss_vaelastrasz::Reset(), boss_mr_smite::boss_mr_smiteAI::Reset(), boss_kalecgos::Reset(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::Reset(), npc_thrall_bfu::npc_thrall_bfuAI::Reset(), boss_thekal::Reset(), npc_draenei_survivor::npc_draenei_survivorAI::Reset(), npc_injured_draenei::npc_injured_draeneiAI::Reset(), npc_rabid_thistle_bear::npc_rabid_thistle_bearAI::Reset(), npc_wizzlecrank_shredder::npc_wizzlecrank_shredderAI::Reset(), boss_anubarak_trial::boss_anubarak_trialAI::Reset(), boss_professor_putricide::boss_professor_putricideAI::Reset(), boss_the_lich_king::boss_the_lich_kingAI::Reset(), npc_imprisoned_beryl_sorcerer::npc_imprisoned_beryl_sorcererAI::Reset(), npc_tirions_gambit_tirion::npc_tirions_gambit_tirionAI::Reset(), boss_illidan_stormrage::Reset(), boss_reliquary_of_souls::boss_reliquary_of_soulsAI::Reset(), boss_leotheras_the_blind::Reset(), boss_the_lurker_below::Reset(), npc_unkor_the_ruthless::npc_unkor_the_ruthlessAI::Reset(), Resurrect(), boss_the_lurker_below::SchedulerPhaseOne(), boss_the_lurker_below::SchedulerPhaseTwo(), npc_ringo::npc_ringoAI::SetFaint(), npc_kurenai_captive::npc_kurenai_captiveAI::SetGUID(), npc_kerlonian::npc_kerlonianAI::SetSleeping(), SetStunned(), boss_victor_nefarius::sGossipSelect(), npc_harrison_jones::SpellHit(), npc_draenei_survivor::npc_draenei_survivorAI::SpellHit(), npc_wounded_skirmisher::SpellHit(), advisor_baseAI::SpellHit(), npc_koltira_deathweaver::npc_koltira_deathweaverAI::StartEvent(), boss_felmyst::StartIntro(), boss_ahune::Submerge(), npc_commander_dawnforge::npc_commander_dawnforgeAI::Turn_to_eachother(), npc_commander_dawnforge::npc_commander_dawnforgeAI::Turn_to_Pathaleons_Image(), boss_vaelastrasz::UpdateAI(), boss_mr_smite::boss_mr_smiteAI::UpdateAI(), npc_a_special_surprise::npc_a_special_surpriseAI::UpdateAI(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::UpdateAI(), npc_madrigosa::UpdateAI(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::UpdateAI(), npc_corporal_keeshan::npc_corporal_keeshanAI::UpdateAI(), npc_varian_wrynn::npc_varian_wrynnAI::UpdateAI(), npc_thrall_bfu::npc_thrall_bfuAI::UpdateAI(), npc_forest_frog::UpdateAI(), npc_alexstraza_the_lifebinder::UpdateAI(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UpdateAI(), boss_professor_putricide::boss_professor_putricideAI::UpdateAI(), boss_algalon_the_observer::UpdateAI(), npc_vrykul_skeleton::UpdateAI(), npc_tirions_gambit_tirion::npc_tirions_gambit_tirionAI::UpdateEscortAI(), GameObject::Use(), and npc_ancestral_wolf::npc_ancestral_wolfAI::WaypointReached().

◆ SetStat()

void Unit::SetStat ( Stats  stat,
int32  val 
)
inline

◆ SetStatFlatModifier()

void Unit::SetStatFlatModifier ( UnitMods  unitMod,
UnitModifierFlatType  modifierType,
float  val 
)

◆ SetStatPctModifier()

◆ SetStunned()

void Unit::SetStunned ( bool  apply)
protected
14432{
14433 if (IsInFlight())
14434 return;
14435
14436 if (apply)
14437 {
14438 SetTarget();
14440
14441 if (IsPlayer())
14442 {
14444 }
14445
14446 SetRooted(true, true);
14447
14448 CastStop();
14449 }
14450 else
14451 {
14452 if (IsAlive() && GetVictim())
14454
14455 if (IsCreature())
14456 {
14457 // don't remove UNIT_FLAG_STUNNED for pet when owner is mounted (disabled pet's interface)
14458 Unit* owner = GetOwner();
14459 if (!owner || !owner->IsPlayer() || !owner->ToPlayer()->IsMounted())
14461
14462 // Xinef: same for charmed npcs
14463 owner = GetCharmer();
14464 if (!owner || !owner->IsPlayer() || !owner->ToPlayer()->IsMounted())
14466 }
14467 else
14469
14470 if (!HasUnitState(UNIT_STATE_ROOT)) // prevent moving if it also has root effect
14471 {
14472 SetRooted(false, true);
14473 }
14474 }
14475}
@ UNIT_STAND_STATE_STAND
Definition UnitDefines.h:35

References CastStop(), GetCharmer(), Object::GetGUID(), GetOwner(), GetVictim(), HasUnitState(), IsAlive(), Object::IsCreature(), IsInFlight(), IsMounted(), Object::IsPlayer(), RemoveUnitFlag(), SetRooted(), SetStandState(), SetTarget(), SetUnitFlag(), Object::ToPlayer(), UNIT_FLAG_STUNNED, UNIT_STAND_STATE_STAND, and UNIT_STATE_ROOT.

Referenced by SetControlled().

◆ SetSwim()

bool Unit::SetSwim ( bool  enable)
virtual

◆ SetTarget()

virtual void Unit::SetTarget ( ObjectGuid  = ObjectGuid::Empty)
pure virtual

◆ setTransForm()

void Unit::setTransForm ( uint32  spellid)
inline
1968{ m_transform = spellid;}

References m_transform.

Referenced by AuraEffect::HandleAuraTransform().

◆ SetUInt32Value()

void Unit::SetUInt32Value ( uint16  index,
uint32  value 
)
17368{
17369 Object::SetUInt32Value(index, value);
17370
17371 switch (index)
17372 {
17373 // Invalidating the cache on health change should fix an issue where the client sees dead NPCs when they are not.
17374 // We might also need to invalidate the cache for some other fields as well.
17375 case UNIT_FIELD_HEALTH:
17377 break;
17378 }
17379}
void SetUInt32Value(uint16 index, uint32 value)
Definition Object.cpp:639
void InvalidateValuesUpdateCache()
Definition Unit.h:2223

References InvalidateValuesUpdateCache(), Object::SetUInt32Value(), and UNIT_FIELD_HEALTH.

Referenced by Player::_LoadDailyQuestStatus(), Player::_LoadSkills(), Player::AddItemToBuyBackSlot(), Attack(), Player::CheckAreaExploreAndOutdoor(), Spell::CheckItems(), Player::Create(), Pet::CreateBaseAtTamed(), Player::CreatePet(), Player::CreatePet(), boss_grand_champion::boss_grand_championAI::DamageTaken(), npc_ulduar_vx001::DamageTaken(), Dismount(), npc_harrison_jones::DoAction(), boss_thekal::DoAction(), boss_razuvious_minion::boss_razuvious_minionAI::DoAction(), brann_bronzebeard::brann_bronzebeardAI::DoAction(), boss_pathaleon_the_calculator::DoAction(), npc_pos_martin_or_gorkun_second::npc_pos_martin_or_gorkun_secondAI::DoAction(), npc_black_knight_skeletal_gryphon::npc_black_knight_skeletal_gryphonAI::DoAction(), boss_illidan_stormrage::DoAction(), Player::DuelComplete(), Spell::EffectSummonPet(), Spell::EffectTameCreature(), boss_jindo::EnterEvadeMode(), boss_zuljin::EnterPhase(), npc_unworthy_initiate::npc_unworthy_initiateAI::EventStart(), Player::GiveLevel(), Pet::GivePetLevel(), Pet::GivePetXP(), Player::GiveXP(), npc_torloth_the_magnificent::npc_torloth_the_magnificentAI::HandleAnimation(), AuraEffect::HandleAuraDummy(), AuraEffect::HandleAuraModIncreaseFlightSpeed(), AuraEffect::HandleAuraTransform(), character_commandscript::HandleCharacterLevel(), debug_commandscript::HandleDebugMod32ValueCommand(), debug_commandscript::HandleDebugUpdateCommand(), spell_dk_dancing_rune_weapon_visual::HandleEffectApply(), spell_gen_model_visible::HandleEffectApply(), spell_gen_model_visible::HandleEffectRemove(), spell_gen_baby_murloc::HandleEffectRemove(), boss_ragnaros::HandleEmerge(), misc_commandscript::HandleHideAreaCommand(), modify_commandscript::HandleModifyStandStateCommand(), modify_commandscript::HandleMorphMountCommand(), AuraEffect::HandleNoReagentUseAura(), npc_commandscript::HandleNpcPlayEmoteCommand(), WorldSession::HandlePetRename(), reset_commandscript::HandleResetHonorCommand(), reset_commandscript::HandleResetLevelCommand(), reset_commandscript::HandleResetStatsOrLevelHelper(), WorldSession::HandleSelfResOpcode(), WorldSession::HandleSetTitleOpcode(), WorldSession::HandleSetWatchedFactionOpcode(), misc_commandscript::HandleShowAreaCommand(), WorldSession::HandleTextEmoteOpcode(), titles_commandscript::HandleTitlesCurrentCommand(), titles_commandscript::HandleTitlesRemoveCommand(), titles_commandscript::HandleTitlesSetMaskCommand(), Player::InitGlyphsForLevel(), npc_rabid_thistle_bear::npc_rabid_thistle_bearAI::Initialize(), npc_icc_nerubar_broodkeeper::npc_icc_nerubar_broodkeeperAI::InitializeAI(), Player::InitStatsForLevel(), Guardian::InitStatsForLevel(), InitTamedPet(), npc_toc5_grand_champion_minion::npc_toc5_grand_champion_minionAI::JustDied(), boss_xt002::JustEngagedWith(), npc_dragonflayer_forge_master::JustEngagedWith(), boss_jindo::JustEngagedWith(), npc_tirion_fordring_tft::npc_tirion_fordringAI::JustReachedHome(), npc_akama_illidan::JustReachedHome(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::JustSummoned(), npc_tirions_gambit_tirion::npc_tirions_gambit_tirionAI::JustSummoned(), npc_thrall_bfu::npc_thrall_bfuAI::JustSummoned(), Kill(), Creature::LoadCreaturesAddon(), Creature::LoadEquipment(), Player::LoadFromDB(), Pet::LoadPetFromDB(), WorldSession::LogoutPlayer(), Player::ModifySkillBonus(), Mount(), npc_icc_nerubar_broodkeeper::npc_icc_nerubar_broodkeeperAI::MoveInLineOfSight(), npc_harrison_jones::MovementInform(), boss_grand_champion::boss_grand_championAI::MovementInform(), boss_professor_putricide::boss_professor_putricideAI::MovementInform(), npc_tirion_fordring_tft::npc_tirion_fordringAI::MovementInform(), npc_akama_illidan::MovementInform(), npc_apothecary_genericAI::MovementInform(), npc_pos_martin_or_gorkun_second::npc_pos_martin_or_gorkun_secondAI::npc_pos_martin_or_gorkun_secondAI(), spell_gen_clone_weapon_aura::OnApply(), instance_trial_of_the_champion::instance_trial_of_the_champion_InstanceMapScript::OnCreatureCreate(), instance_halls_of_reflection::OnCreatureCreate(), npc_ame::OnQuestAccept(), go_crystalline_tear::OnQuestAccept(), spell_gen_clone_weapon_aura::OnRemove(), npc_eastvale_peasent::PathEndReached(), npc_hidden_cultist::npc_hidden_cultistAI::PreScript(), WorldSession::ProcessMovementInfo(), Player::RemoveAmmo(), Player::RemoveItemFromBuyBackSlot(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::ReorderInstance(), ReplaceAllDynamicFlags(), ReplaceAllNpcFlags(), Player::ReplaceAllPlayerFlags(), ReplaceAllUnitFlags(), ReplaceAllUnitFlags2(), boss_ragnaros::Reset(), npc_unworthy_initiate::npc_unworthy_initiateAI::Reset(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::Reset(), boss_zuljin::Reset(), boss_arlokk::boss_arlokkAI::Reset(), boss_grand_champion::boss_grand_championAI::Reset(), npc_hor_leader::npc_hor_leaderAI::Reset(), boss_malygos::Reset(), npc_ulduar_leviathan_mkii::Reset(), npc_hidden_cultist::npc_hidden_cultistAI::Reset(), npc_crusade_recruit::npc_crusade_recruitAI::Reset(), npc_injured_patient::npc_injured_patientAI::Reset(), Player::ResetDailyQuestStatus(), boss_razuvious_minion::boss_razuvious_minionAI::ScheduleAttackDummy(), Spell::SendChannelStart(), Spell::SendChannelUpdate(), Player::SetAmmo(), Player::SetArenaPoints(), Player::SetArenaTeamInfoField(), SetCharmedBy(), SetCreateHealth(), SetCreateMana(), Player::SetCurrentTitle(), Player::SetDailyQuestStatus(), npc_ulduar_vx001::SetData(), npc_ulduar_expedition_engineer::SetData(), instance_halls_of_reflection::SetData(), npc_eastvale_peasent::SetData(), setDeathState(), Player::setDeathState(), SetDisplayId(), SetEmoteState(), SetFaction(), TestCreature::SetFaction(), Player::SetFreePrimaryProfessions(), Player::SetFreeTalentPoints(), Player::SetGlyph(), Player::SetGlyphSlot(), SetHealth(), Player::SetHonorPoints(), Player::SetInGuild(), SetLevel(), SetMaxHealth(), Player::SetMoney(), SetNativeDisplayId(), CharmInfo::SetPetNumber(), Player::SetQuestSlot(), Player::SetQuestSlotTimer(), Player::SetRank(), Player::SetRestBonus(), Player::SetSkill(), SetVirtualItem(), Player::SetVisibleItemSlot(), npc_injured_patient::npc_injured_patientAI::SpellHit(), npc_icc_valkyr_herald::npc_icc_valkyr_heraldAI::SpellHitTarget(), Map::SummonCreature(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::SummonedCreatureDespawn(), Player::SummonPet(), Player::SwapQuestSlot(), boss_ragnaros::UpdateAI(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::UpdateAI(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::UpdateAI(), npc_madrigosa::UpdateAI(), npc_partygoer_pather::UpdateAI(), npc_partygoer::UpdateAI(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::UpdateAI(), boss_arlokk::boss_arlokkAI::UpdateAI(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UpdateAI(), npc_clintar_spirit::npc_clintar_spiritAI::UpdateAI(), npc_hor_leader::npc_hor_leaderAI::UpdateAI(), npc_hor_leader_second::npc_hor_leader_secondAI::UpdateAI(), npc_pos_leader::npc_pos_leaderAI::UpdateAI(), npc_tirion_fordring_tft::npc_tirion_fordringAI::UpdateAI(), boss_malygos::UpdateAI(), boss_mimiron::UpdateAI(), npc_ulduar_expedition_engineer::UpdateAI(), npc_crusade_recruit::npc_crusade_recruitAI::UpdateAI(), npc_dragonmaw_peon::npc_dragonmaw_peonAI::UpdateAI(), Player::UpdateArmorPenetration(), Player::UpdateDuelFlag(), brann_bronzebeard::brann_bronzebeardAI::UpdateEscortAI(), Player::UpdateExpertise(), Player::UpdateHonorFields(), Player::UpdateRating(), Player::UpdateShieldBlockValue(), Player::UpdateSkill(), Player::UpdateSkillPro(), Player::UpdateSkillsForLevel(), Player::UpdateSkillsToMaxSkillsForLevel(), npc_black_knight_skeletal_gryphon::npc_black_knight_skeletal_gryphonAI::WaypointReached(), and npc_ranger_lilatha::WaypointReached().

◆ SetUnitFlag()

void Unit::SetUnitFlag ( UnitFlags  flags)
inline

UnitFlags available in UnitDefines.h.

748{ SetFlag(UNIT_FIELD_FLAGS, flags); }

References Object::SetFlag(), and UNIT_FIELD_FLAGS.

Referenced by BattlegroundAV::AddAVCreature(), Vehicle::AddPassenger(), boss_yoggsaron_sara::AddPortals(), Creature::AllLootRemovedFromCorpse(), npc_doctor::npc_doctorAI::BeginEvent(), boss_jarien::boss_jarien(), boss_sothos::boss_sothos(), GameObject::CastSpell(), Player::Create(), boss_apothecary_hummel::boss_apothecary_hummelAI::DamageTaken(), boss_muru::DamageTaken(), boss_jedoga_shadowseeker::DamageTaken(), boss_eadric::boss_eadricAI::DamageTaken(), boss_paletress::boss_paletressAI::DamageTaken(), boss_black_knight::boss_black_knightAI::DamageTaken(), boss_grand_champion::boss_grand_championAI::DamageTaken(), npc_frost_sphere::npc_frost_sphereAI::DamageTaken(), boss_bronjahm::DamageTaken(), npc_terenas_menethil::npc_terenas_menethilAI::DamageTaken(), boss_algalon_the_observer::DamageTaken(), boss_freya::DamageTaken(), boss_hodir::DamageTaken(), npc_ulduar_leviathan_mkii::DamageTaken(), npc_ulduar_vx001::DamageTaken(), npc_ulduar_aerial_command_unit::DamageTaken(), boss_ingvar_the_plunderer::DamageTaken(), npc_vrykul_skeleton::DamageTaken(), npc_overlord_drakuru_betrayal::DamageTaken(), boss_essence_of_suffering::boss_essence_of_sufferingAI::DamageTaken(), boss_essence_of_desire::boss_essence_of_desireAI::DamageTaken(), advisor_baseAI::DamageTaken(), boss_taerar::boss_taerarAI::DamageTaken(), npc_molten_golem::DamageTaken(), boss_felblood_kaelthas::DamageTaken(), npc_tiger_matriarch::npc_tiger_matriarchAI::DamageTaken(), boss_mal_ganis::boss_mal_ganisAI::DamageTaken(), boss_thorim::DamageTaken(), npc_q24545_wretched_ghoul::npc_q24545_wretched_ghoulAI::Deactivate(), DisableRotate(), boss_thorim::DisableThorim(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::DoAction(), npc_amanishi_lookout::DoAction(), boss_sindragosa::boss_sindragosaAI::DoAction(), npc_crok_scourgebane::npc_crok_scourgebaneAI::DoAction(), boss_algalon_the_observer::DoAction(), npc_frozen_core::DoAction(), boss_kalecgos::DoAction(), boss_grand_champion::boss_grand_championAI::DoAction(), boss_kelthuzad_minion::boss_kelthuzad_minionAI::DoAction(), npc_xt002_heart::DoAction(), boss_yoggsaron::DoAction(), boss_skadi::boss_skadiAI::DoAction(), boss_illidan_stormrage::DoAction(), PetAI::DoAttack(), FlightPathMovementGenerator::DoReset(), boss_yoggsaron_sara::EnableSara(), boss_cyanigosa::EnterEvadeMode(), boss_erekem::EnterEvadeMode(), boss_ichoron::EnterEvadeMode(), boss_lavanthor::EnterEvadeMode(), boss_moragg::EnterEvadeMode(), boss_xevozz::EnterEvadeMode(), boss_zuramat::EnterEvadeMode(), boss_anubarak_trial::boss_anubarak_trialAI::EnterEvadeMode(), boss_jaraxxus::boss_jaraxxusAI::EnterEvadeMode(), boss_gormok::boss_gormokAI::EnterEvadeMode(), boss_jormungarAI::EnterEvadeMode(), boss_icehowl::boss_icehowlAI::EnterEvadeMode(), npc_crystalline_frayer::EnterSeedPod(), SACDeactivateEvent::Execute(), boss_kaelthas::ExecuteMiddleEvent(), boss_ingvar_the_plunderer::FeignDeath(), spell_boss_magus_telestra_summon_telestra_clones_aura::HandleApply(), AuraEffect::HandleArenaPreparation(), AuraEffect::HandleAuraModFaction(), AuraEffect::HandleAuraModPacify(), AuraEffect::HandleAuraModSilence(), spell_q13007_iron_colossus::HandleDummy(), spell_herald_volzaj_insanity::HandleDummyEffect(), spell_gen_model_visible::HandleEffectApply(), spell_gen_feign_death_all_flags::HandleEffectApply(), spell_gen_feign_death_no_dyn_flag::HandleEffectApply(), spell_gen_feign_death_no_prevent_emotes::HandleEffectApply(), boss_sartharion_dragonAI::HandleExtraEvent(), AuraEffect::HandleFeignDeath(), spell_chapter2_persuasive_strike::HandleHit(), BattlefieldWG::HandleKill(), Battleground::HandleKillPlayer(), WorldSession::HandleLogoutRequestOpcode(), spell_oculus_rider_aura::HandleOnEffectApply(), npc_echo_of_medivh::HandlePieceJustDied(), Battlefield::HideNpc(), npc_malchezaar_axe::Initialize(), npc_scarlet_ghoul::npc_scarlet_ghoulAI::InitializeAI(), boss_kiljaeden::InitializeAI(), npc_general_andorov::InitializeAI(), boss_sapphiron::boss_sapphironAI::InitializeAI(), Player::InitStatsForLevel(), boss_kologarn::JustDied(), boss_algalon_the_observer::JustEngagedWith(), boss_mimiron::JustEngagedWith(), boss_novos::JustEngagedWith(), boss_gothik::boss_gothikAI::JustEngagedWith(), boss_kelthuzad::boss_kelthuzadAI::JustEngagedWith(), npc_eris_hevenfire::npc_eris_hevenfireAI::JustSummoned(), boss_majordomo::JustSummoned(), npc_ravenclaw_apparition::npc_ravenclaw_apparitionAI::JustSummoned(), boss_hazzarah::JustSummoned(), boss_vaelastrasz::JustSummoned(), npc_thrall_bfu::npc_thrall_bfuAI::JustSummoned(), boss_archimonde::JustSummoned(), boss_broggok::JustSummoned(), npc_varian_wrynn::npc_varian_wrynnAI::JustSummoned(), Mount(), npc_shattered_hand_scout::MoveInLineOfSight(), boss_kaelthas::MoveInLineOfSight(), npc_batrider::npc_batrider(), npc_blade_of_azzinoth::npc_blade_of_azzinoth(), npc_chess_move_trigger::npc_chess_move_trigger(), npc_mageguard_dalaran::npc_mageguard_dalaranAI::npc_mageguard_dalaranAI(), npc_pos_freed_slave::npc_pos_freed_slaveAI::npc_pos_freed_slaveAI(), npc_q24545_vegard::npc_q24545_vegardAI::npc_q24545_vegardAI(), npc_xt002_heart::npc_xt002_heart(), spell_halion_twilight_phasing_aura::OnApply(), npc_toc5_player_vehicle::npc_toc5_player_vehicleAI::OnCharmed(), instance_sunken_temple::instance_sunken_temple_InstanceMapScript::OnCreatureCreate(), instance_dire_maul::instance_dire_maul_InstanceMapScript::OnCreatureCreate(), boss_flame_leviathan_overload_device::OnSpellClick(), NPCStaveQuestAI::PrepareForEncounter(), PretendToDie(), boss_alar::PretendToDie(), Creature::RefreshSwimmingFlag(), boss_keristrasza::RemovePrison(), npc_grimstone::Reset(), boss_pyroguard_emberseer::Reset(), boss_rend_blackhand::Reset(), boss_nefarian::Reset(), boss_nightbane::Reset(), npc_koltira_deathweaver::npc_koltira_deathweaverAI::Reset(), npc_valkyr_battle_maiden::npc_valkyr_battle_maidenAI::Reset(), boss_kiljaeden::Reset(), npc_zuljin_vortex::Reset(), npc_hallows_end_soh::Reset(), npc_ancient_wisp::Reset(), boss_cthun::Reset(), npc_draenei_survivor::npc_draenei_survivorAI::Reset(), npc_injured_draenei::npc_injured_draeneiAI::Reset(), npc_death_ravager::npc_death_ravagerAI::Reset(), npc_giant_spotlight::npc_giant_spotlightAI::Reset(), npc_anachronos_the_ancient::npc_anachronos_the_ancientAI::Reset(), boss_jedoga_shadowseeker::Reset(), boss_black_knight::boss_black_knightAI::Reset(), npc_announcer_toc5::npc_announcer_toc5AI::Reset(), boss_anubarak_trial::boss_anubarak_trialAI::Reset(), boss_novos::Reset(), boss_tyrannus::boss_tyrannusAI::Reset(), boss_drakkari_colossus::boss_drakkari_colossusAI::Reset(), boss_thaddius::boss_thaddiusAI::Reset(), boss_malygos::Reset(), boss_eregos::boss_eregosAI::Reset(), boss_urom::boss_uromAI::Reset(), boss_varos::boss_varosAI::Reset(), boss_flame_leviathan::Reset(), npc_ulduar_iron_construct::Reset(), npc_ulduar_leviathan_mkii::Reset(), boss_palehoof::boss_palehoofAI::Reset(), npc_massive_jormungar::npc_massive_jormungarAI::Reset(), npc_ferocious_rhino::npc_ferocious_rhinoAI::Reset(), npc_ravenous_furbolg::npc_ravenous_furbolgAI::Reset(), npc_frenzied_worgen::npc_frenzied_worgenAI::Reset(), boss_ymiron::boss_ymironAI::Reset(), boss_shade_of_akama::Reset(), boss_leotheras_the_blind::Reset(), boss_the_lurker_below::Reset(), boss_warlord_kalithresh::Reset(), boss_broggok::Reset(), boss_kelidan_the_breaker::Reset(), boss_magtheridon::Reset(), boss_kaelthas::Reset(), npc_deaths_fel_cannon::npc_deaths_fel_cannonAI::Reset(), npc_torloth_the_magnificent::npc_torloth_the_magnificentAI::Reset(), npc_injured_patient::npc_injured_patientAI::Reset(), instance_blood_furnace::instance_blood_furnace_InstanceMapScript::ResetPrisoner(), boss_the_lurker_below::SchedulerPhaseOne(), boss_drakkari_colossus::boss_drakkari_colossusAI::ScheduleTasks(), Player::SendLoot(), Player::SetBeastMaster(), SetCharm(), SetCharmedBy(), SetImmuneToNPC(), SetImmuneToPC(), Player::SetIsSpectator(), SetMinion(), SetStunned(), SetSwim(), boss_victor_nefarius::sGossipSelect(), Battlefield::ShowNpc(), npc_netherspite_infernal::SpellHit(), npc_harrison_jones::SpellHit(), boss_valithria_dreamwalker::boss_valithria_dreamwalkerAI::SpellHit(), boss_urom::boss_uromAI::SpellHit(), npc_wounded_skirmisher::SpellHit(), npc_venture_co_straggler::npc_venture_co_stragglerAI::SpellHit(), npc_nether_drake::npc_nether_drakeAI::SpellHit(), npc_injured_patient::npc_injured_patientAI::SpellHit(), boss_anub_arak::SpellHitTarget(), boss_noth::boss_nothAI::StartBalconyPhase(), boss_lord_valthalak::StartTalking(), npc_giant_claw_tentacle::Submerge(), boss_ouro::Submerge(), boss_ahune::Submerge(), boss_jedoga_shadowseeker::SummonedCreatureDies(), boss_vaelastrasz::UpdateAI(), boss_ragnaros::UpdateAI(), boss_mr_smite::boss_mr_smiteAI::UpdateAI(), npc_madrigosa::UpdateAI(), boss_arlokk::boss_arlokkAI::UpdateAI(), npc_twiggy_flathead::npc_twiggy_flatheadAI::UpdateAI(), boss_grand_champion::boss_grand_championAI::UpdateAI(), boss_anubarak_trial::boss_anubarak_trialAI::UpdateAI(), npc_nerubian_burrower::npc_nerubian_burrowerAI::UpdateAI(), boss_jormungarAI::UpdateAI(), boss_krick::boss_krickAI::UpdateAI(), npc_kinetic_bomb::npc_kinetic_bombAI::UpdateAI(), npc_cult_fanatic::npc_cult_fanaticAI::UpdateAI(), npc_cult_adherent::npc_cult_adherentAI::UpdateAI(), npc_terenas_menethil::npc_terenas_menethilAI::UpdateAI(), npc_blistering_zombie::npc_blistering_zombieAI::UpdateAI(), boss_malygos::UpdateAI(), boss_algalon_the_observer::UpdateAI(), boss_stormcaller_brundir::UpdateAI(), boss_xt002::UpdateAI(), boss_ymiron::boss_ymironAI::UpdateAI(), boss_ichoron::UpdateAI(), npc_azure_saboteur::UpdateAI(), npc_nether_drake::npc_nether_drakeAI::UpdateAI(), npc_artorius::npc_artoriusAI::UpdateAI(), npc_simone::npc_simoneAI::UpdateAI(), npc_nelson::npc_nelsonAI::UpdateAI(), npc_franklin::npc_franklinAI::UpdateAI(), npc_injured_patient::npc_injured_patientAI::UpdateAI(), Creature::UpdateEntry(), CombatManager::UpdateOwnerCombatState(), and UpdatePetCombatState().

◆ SetUnitFlag2()

◆ SetUnitMovementFlags()

◆ SetVirtualItem()

void Unit::SetVirtualItem ( uint32  slot,
uint32  itemId 
)
17221{
17222 if (slot >= MAX_EQUIPMENT_ITEMS)
17223 return;
17224
17226}

References MAX_EQUIPMENT_ITEMS, SetUInt32Value(), and UNIT_VIRTUAL_ITEM_SLOT_ID.

Referenced by ScriptedAI::SetEquipmentSlots().

◆ SetVisible()

void Unit::SetVisible ( bool  x)
11114{
11115 if (!x)
11117 else
11119
11121}
@ SEC_GAMEMASTER
Definition Common.h:59

References WorldObject::m_serverSideVisibility, SEC_GAMEMASTER, SEC_PLAYER, SERVERSIDE_VISIBILITY_GM, FlaggedValuesArray32< T_VALUES, T_FLAGS, FLAG_TYPE, ARRAY_SIZE >::SetValue(), and UpdateObjectVisibility().

Referenced by Creature::Create(), boss_muru::DamageTaken(), boss_alar::DamageTaken(), spell_rotface_unstable_ooze_explosion_suicide_aura::DespawnSelf(), boss_victor_nefarius::DoAction(), boss_archimonde::DoAction(), boss_kalecgos::DoAction(), boss_yoggsaron_sara::DoAction(), boss_yoggsaron::DoAction(), npc_hor_spiritual_reflection::EnterEvadeMode(), HideNpcEvent::Execute(), UtherBatteredHiltEvent::Execute(), npc_anachronos_the_ancient::npc_anachronos_the_ancientAI::HandleAnimation(), BattlegroundSA::HandleKillUnit(), Battlefield::HideNpc(), boss_kiljaeden::InitializeAI(), boss_sapphiron::boss_sapphironAI::InitializeAI(), npc_time_lost_proto_drake::npc_time_lost_proto_drakeAI::InitializeAI(), npc_xt002_heart::JustDied(), SmartAI::JustRespawned(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::JustRespawned(), boss_hazzarah::JustSummoned(), npc_overlord_drakuru_betrayal::MoveInLineOfSight(), npc_enslaved_netherwing_drake::MovementInform(), npc_blood_queen_lana_thel::npc_blood_queen_lana_thelAI::MovementInform(), boss_vazruden_the_herald::MovementInform(), npc_shattered_hand_scout::MovementInform(), npc_madrigosa::npc_madrigosa(), instance_culling_of_stratholme::instance_culling_of_stratholme_InstanceMapScript::OnCreatureCreate(), instance_old_hillsbrad::instance_old_hillsbrad_InstanceMapScript::OnCreatureCreate(), instance_forge_of_souls::instance_forge_of_souls_InstanceScript::OnCreatureCreate(), instance_halls_of_reflection::OnCreatureCreate(), instance_pit_of_saron::instance_pit_of_saron_InstanceScript::OnCreatureCreate(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnCreatureCreate(), boss_victor_nefarius::Reset(), boss_midnight::Reset(), npc_valkyr_battle_maiden::npc_valkyr_battle_maidenAI::Reset(), boss_darkmaster_gandling::boss_darkmaster_gandlingAI::Reset(), boss_muru::Reset(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::Reset(), boss_archimonde::Reset(), boss_eye_of_cthun::Reset(), npc_murkdeep::npc_murkdeepAI::Reset(), npc_anachronos_quest_trigger::npc_anachronos_quest_triggerAI::Reset(), boss_halion::boss_halionAI::Reset(), npc_pos_leader::npc_pos_leaderAI::Reset(), npc_blood_queen_lana_thel::npc_blood_queen_lana_thelAI::Reset(), boss_ionar::Reset(), boss_yoggsaron_sara::Reset(), npc_minigob_manabonk::Reset(), npc_q24545_lich_king::npc_q24545_lich_kingAI::Reset(), npc_overlord_drakuru_betrayal::Reset(), boss_vazruden_the_herald::Reset(), npc_enslaved_netherwing_drake::Reset(), npc_lord_illidan_stormrage::npc_lord_illidan_stormrageAI::Reset(), instance_halls_of_reflection::SetData(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::SetData(), Battlefield::ShowNpc(), boss_ionar::Split(), boss_warchief_kargath_bladefist::SummonedCreatureDies(), instance_old_hillsbrad::instance_old_hillsbrad_InstanceMapScript::Update(), npc_valkyr_battle_maiden::npc_valkyr_battle_maidenAI::UpdateAI(), npc_madrigosa::UpdateAI(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::UpdateAI(), npc_ravenclaw_apparition::npc_ravenclaw_apparitionAI::UpdateAI(), npc_arthas::npc_arthasAI::UpdateAI(), npc_murkdeep::npc_murkdeepAI::UpdateAI(), boss_halion::boss_halionAI::UpdateAI(), npc_hor_leader::npc_hor_leaderAI::UpdateAI(), npc_pos_leader::npc_pos_leaderAI::UpdateAI(), boss_sapphiron::boss_sapphironAI::UpdateAI(), boss_ionar::UpdateAI(), npc_vh_teleportation_portal::UpdateAI(), npc_minigob_manabonk::UpdateAI(), npc_q24545_lich_king::npc_q24545_lich_kingAI::UpdateAI(), npc_overlord_drakuru_betrayal::UpdateAI(), npc_commander_dawnforge::npc_commander_dawnforgeAI::UpdateAI(), SmartAI::UpdateDespawn(), npc_grimstone::UpdateEscortAI(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::WaypointReached(), and npc_taretha::npc_tarethaAI::WaypointReached().

◆ SetVisibleAura()

void Unit::SetVisibleAura ( uint8  slot,
AuraApplication aur 
)
inline

◆ SetWalk()

bool Unit::SetWalk ( bool  enable)
virtual

Reimplemented in Creature.

16493{
16494 if (enable == IsWalking())
16495 return false;
16496
16497 if (enable)
16499 else
16501
16503 return true;
16504}

References AddUnitMovementFlag(), IsWalking(), MOVEMENTFLAG_WALKING, propagateSpeedChange(), and RemoveUnitMovementFlag().

Referenced by debug_commandscript::HandleDebugMoveflagsCommand(), SetCharm(), and Creature::SetWalk().

◆ SetWaterWalking()

void Unit::SetWaterWalking ( bool  enable)
16697{
16698 bool isClientControlled = IsClientControlled();
16699
16700 if (!isClientControlled)
16701 {
16702 if (enable)
16704 else
16706 }
16707
16708 if (!IsInWorld()) // is sent on add to map
16709 return;
16710
16711 if (isClientControlled)
16712 {
16713 if (Player const* player = GetClientControlling())
16714 {
16715 uint32 const counter = player->GetSession()->GetOrderCounter();
16716
16717 WorldPacket data(enable ? SMSG_MOVE_WATER_WALK : SMSG_MOVE_LAND_WALK, GetPackGUID().size() + 4);
16718 data << GetPackGUID();
16719 data << counter;
16720 player->SendDirectMessage(&data);
16721 player->GetSession()->IncrementOrderCounter();
16722 return;
16723 }
16724 }
16725
16727 data << GetPackGUID();
16728 SendMessageToSet(&data, true);
16729}
@ MOVEMENTFLAG_WATERWALKING
Definition UnitDefines.h:400
@ SMSG_MOVE_LAND_WALK
Definition Opcodes.h:253
@ SMSG_SPLINE_MOVE_LAND_WALK
Definition Opcodes.h:808
@ SMSG_MOVE_WATER_WALK
Definition Opcodes.h:252

References MovementInfo::AddMovementFlag(), GetClientControlling(), Object::GetPackGUID(), IsClientControlled(), Object::IsInWorld(), WorldObject::m_movementInfo, MOVEMENTFLAG_WATERWALKING, MovementInfo::RemoveMovementFlag(), WorldObject::SendMessageToSet(), PackedGuid::size(), SMSG_MOVE_LAND_WALK, SMSG_MOVE_WATER_WALK, SMSG_SPLINE_MOVE_LAND_WALK, and SMSG_SPLINE_MOVE_WATER_WALK.

Referenced by Player::BuildPlayerRepop(), AuraEffect::HandleAuraWaterWalk(), debug_commandscript::HandleDebugMoveflagsCommand(), cheat_commandscript::HandleWaterWalkCheatCommand(), and Player::ResurrectPlayer().

◆ SpellBaseDamageBonusDone()

int32 Unit::SpellBaseDamageBonusDone ( SpellSchoolMask  schoolMask)
9041{
9042 int32 DoneAdvertisedBenefit = GetTotalAuraModifier(SPELL_AURA_MOD_DAMAGE_DONE, [schoolMask](AuraEffect const* aurEff)
9043 {
9044 return aurEff->GetMiscValue() & schoolMask &&
9045 // -1 == any item class (not wand then)
9046 aurEff->GetSpellInfo()->EquippedItemClass == -1 &&
9047 // 0 == any inventory type (not wand then)
9049 });
9050
9051 if (IsPlayer())
9052 {
9053 // Base value
9054 DoneAdvertisedBenefit += ToPlayer()->GetBaseSpellPowerBonus();
9055 DoneAdvertisedBenefit += ToPlayer()->GetBaseSpellDamageBonus();
9056
9057 // Damage bonus from stats
9059 for (AuraEffectList::const_iterator i = mDamageDoneOfStatPercent.begin(); i != mDamageDoneOfStatPercent.end(); ++i)
9060 {
9061 if ((*i)->GetMiscValue() & schoolMask)
9062 {
9063 // stat used stored in miscValueB for this aura
9064 Stats usedStat = Stats((*i)->GetMiscValueB());
9065 DoneAdvertisedBenefit += int32(CalculatePct(GetStat(usedStat), (*i)->GetAmount()));
9066 }
9067 }
9068 // ... and attack power
9070 }
9071 return DoneAdvertisedBenefit;
9072}
@ SPELL_AURA_MOD_SPELL_DAMAGE_OF_ATTACK_POWER
Definition SpellAuraDefines.h:300
@ SPELL_AURA_MOD_SPELL_DAMAGE_OF_STAT_PERCENT
Definition SpellAuraDefines.h:237
@ SPELL_AURA_MOD_DAMAGE_DONE
Definition SpellAuraDefines.h:76
uint32 GetBaseSpellPowerBonus()
Definition Player.h:1989
uint32 GetBaseSpellDamageBonus()
Definition Player.h:1990
int32 EquippedItemInventoryTypeMask
Definition SpellInfo.h:401
float GetTotalAttackPowerValue(WeaponAttackType attType, Unit *pVictim=nullptr) const
Definition Unit.cpp:12306
float GetStat(Stats stat) const
Definition Unit.h:1058

References BASE_ATTACK, CalculatePct(), SpellInfo::EquippedItemClass, SpellInfo::EquippedItemInventoryTypeMask, GetAuraEffectsByType(), Player::GetBaseSpellDamageBonus(), Player::GetBaseSpellPowerBonus(), AuraEffect::GetMiscValue(), AuraEffect::GetSpellInfo(), GetStat(), GetTotalAttackPowerValue(), GetTotalAuraModifier(), GetTotalAuraModifierByMiscMask(), Object::IsPlayer(), SPELL_AURA_MOD_DAMAGE_DONE, SPELL_AURA_MOD_SPELL_DAMAGE_OF_ATTACK_POWER, SPELL_AURA_MOD_SPELL_DAMAGE_OF_STAT_PERCENT, and Object::ToPlayer().

Referenced by spell_item_wraith_scythe_drain_life::CalculateDamage(), spell_mage_ice_barrier_aura::CalculateSpellAmount(), spell_mage_ice_barrier::CalculateSpellAmount(), Spell::EffectWeaponDmg(), spell_warl_life_tap::HandleDummy(), spell_pal_seal_of_righteousness::HandleProc(), spell_sha_flametongue_weapon::HandleProc(), SpellDamageBonusDone(), lfg::LFGMgr::UpdateRaidBrowser(), and Player::UpdateSpellDamageAndHealingBonus().

◆ SpellBaseDamageBonusTaken()

int32 Unit::SpellBaseDamageBonusTaken ( SpellSchoolMask  schoolMask,
bool  isDoT = false 
)
9075{
9076 return GetTotalAuraModifier(SPELL_AURA_MOD_DAMAGE_TAKEN, [schoolMask, isDoT](AuraEffect const* aurEff)
9077 {
9078 return (aurEff->GetMiscValue() & schoolMask) != 0
9079 // Xinef: if we have DoT damage type and aura has charges, check if it affects DoTs
9080 // Xinef: required for hemorrhage & rupture / garrote
9081 && !(isDoT && aurEff->GetBase()->IsUsingCharges() && aurEff->GetSpellInfo()->ProcFlags & PROC_FLAG_TAKEN_PERIODIC);
9082 });
9083}
@ PROC_FLAG_TAKEN_PERIODIC
Definition SpellMgr.h:138
bool IsUsingCharges() const
Definition SpellAuras.h:200
uint32 ProcFlags
Definition SpellInfo.h:379

References AuraEffect::GetBase(), AuraEffect::GetMiscValue(), AuraEffect::GetSpellInfo(), GetTotalAuraModifier(), Aura::IsUsingCharges(), PROC_FLAG_TAKEN_PERIODIC, SpellInfo::ProcFlags, and SPELL_AURA_MOD_DAMAGE_TAKEN.

Referenced by spell_pal_seal_of_righteousness::HandleProc(), and SpellDamageBonusTaken().

◆ SpellBaseHealingBonusDone()

int32 Unit::SpellBaseHealingBonusDone ( SpellSchoolMask  schoolMask)
9799{
9800 int32 AdvertisedBenefit = 0;
9801
9802 AdvertisedBenefit += GetTotalAuraModifier(SPELL_AURA_MOD_HEALING_DONE, [schoolMask](AuraEffect const* aurEff)
9803 {
9804 return !aurEff->GetMiscValue() || (aurEff->GetMiscValue() & schoolMask) != 0;
9805 });
9806
9807 // Healing bonus of spirit, intellect and strength
9808 if (IsPlayer())
9809 {
9810 // Base value
9811 AdvertisedBenefit += ToPlayer()->GetBaseSpellPowerBonus();
9812 AdvertisedBenefit += ToPlayer()->GetBaseSpellHealingBonus();
9813
9814 // Healing bonus from stats
9816 for (AuraEffectList::const_iterator i = mHealingDoneOfStatPercent.begin(); i != mHealingDoneOfStatPercent.end(); ++i)
9817 {
9818 // stat used dependent from misc value (stat index)
9819 Stats usedStat = Stats((*i)->GetSpellInfo()->Effects[(*i)->GetEffIndex()].MiscValue);
9820 AdvertisedBenefit += int32(CalculatePct(GetStat(usedStat), (*i)->GetAmount()));
9821 }
9822
9823 // ... and attack power
9825 }
9826 return AdvertisedBenefit;
9827}
@ SPELL_AURA_MOD_HEALING_DONE
Definition SpellAuraDefines.h:198
@ SPELL_AURA_MOD_SPELL_HEALING_OF_STAT_PERCENT
Definition SpellAuraDefines.h:238
@ SPELL_AURA_MOD_SPELL_HEALING_OF_ATTACK_POWER
Definition SpellAuraDefines.h:301
uint32 GetBaseSpellHealingBonus()
Definition Player.h:1991

References BASE_ATTACK, CalculatePct(), GetAuraEffectsByType(), Player::GetBaseSpellHealingBonus(), Player::GetBaseSpellPowerBonus(), AuraEffect::GetMiscValue(), GetStat(), GetTotalAttackPowerValue(), GetTotalAuraModifier(), GetTotalAuraModifierByMiscMask(), Object::IsPlayer(), SPELL_AURA_MOD_HEALING_DONE, SPELL_AURA_MOD_SPELL_HEALING_OF_ATTACK_POWER, SPELL_AURA_MOD_SPELL_HEALING_OF_STAT_PERCENT, and Object::ToPlayer().

Referenced by CalculateSpellAmount(), SpellHealingBonusDone(), lfg::LFGMgr::UpdateRaidBrowser(), and Player::UpdateSpellDamageAndHealingBonus().

◆ SpellCriticalDamageBonus()

uint32 Unit::SpellCriticalDamageBonus ( Unit const *  caster,
SpellInfo const *  spellProto,
uint32  damage,
Unit const *  victim 
)
static
Todo:
: write here full calculation for melee/ranged spells
9384{
9385 // Calculate critical bonus
9386 int32 crit_bonus = damage;
9387 float crit_mod = 0.0f;
9388
9389 switch (spellProto->DmgClass)
9390 {
9391 case SPELL_DAMAGE_CLASS_MELEE: // for melee based spells is 100%
9394 crit_bonus += damage;
9395 break;
9396 default:
9397 crit_bonus += damage / 2; // for spells is 50%
9398 break;
9399 }
9400
9401 if (caster)
9402 {
9403 crit_mod += caster->GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_CRIT_DAMAGE_BONUS, spellProto->GetSchoolMask());
9404
9405 if (victim)
9406 crit_mod += caster->GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_CRIT_PERCENT_VERSUS, victim->GetCreatureTypeMask());
9407
9408 if (crit_bonus != 0 && crit_mod != 0.0f)
9409 AddPct(crit_bonus, crit_mod);
9410
9411 crit_bonus -= damage;
9412
9413 // adds additional damage to critBonus (from talents)
9414 if (Player* modOwner = caster->GetSpellModOwner())
9415 modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_CRIT_DAMAGE_BONUS, crit_bonus);
9416
9417 crit_bonus += damage;
9418 }
9419
9420 return crit_bonus;
9421}

References AddPct(), SpellInfo::DmgClass, GetCreatureTypeMask(), SpellInfo::GetSchoolMask(), GetSpellModOwner(), GetTotalAuraModifierByMiscMask(), SpellInfo::Id, SPELL_AURA_MOD_CRIT_DAMAGE_BONUS, SPELL_AURA_MOD_CRIT_PERCENT_VERSUS, SPELL_DAMAGE_CLASS_MELEE, SPELL_DAMAGE_CLASS_RANGED, and SPELLMOD_CRIT_DAMAGE_BONUS.

Referenced by CalculateSpellDamageTaken(), AuraEffect::HandlePeriodicDamageAurasTick(), and AuraEffect::HandlePeriodicHealthLeechAuraTick().

◆ SpellCriticalHealingBonus()

uint32 Unit::SpellCriticalHealingBonus ( Unit const *  caster,
SpellInfo const *  spellProto,
uint32  damage,
Unit const *  victim 
)
static
Todo:
: write here full calculation for melee/ranged spells
9424{
9425 // Calculate critical bonus
9426 int32 crit_bonus;
9427 switch (spellProto->DmgClass)
9428 {
9429 case SPELL_DAMAGE_CLASS_MELEE: // for melee based spells is 100%
9432 crit_bonus = damage;
9433 break;
9434 default:
9435 crit_bonus = damage / 2; // for spells is 50%
9436 break;
9437 }
9438
9439 if (caster)
9440 {
9441 if (victim)
9442 {
9443 uint32 creatureTypeMask = victim->GetCreatureTypeMask();
9444 crit_bonus = int32(crit_bonus * caster->GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_CRIT_PERCENT_VERSUS, creatureTypeMask));
9445 }
9446
9447 // adds additional damage to critBonus (from talents)
9448 // xinef: used for death knight death coil
9449 if (Player* modOwner = caster->GetSpellModOwner())
9450 modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_CRIT_DAMAGE_BONUS, crit_bonus);
9451 }
9452
9453 if (crit_bonus > 0)
9454 damage += crit_bonus;
9455
9456 if (caster)
9457 damage = int32(float(damage) * caster->GetTotalAuraMultiplier(SPELL_AURA_MOD_CRITICAL_HEALING_AMOUNT));
9458
9459 return damage;
9460}
@ SPELL_AURA_MOD_CRITICAL_HEALING_AMOUNT
Definition SpellAuraDefines.h:113

References SpellInfo::DmgClass, GetCreatureTypeMask(), GetSpellModOwner(), GetTotalAuraMultiplier(), GetTotalAuraMultiplierByMiscMask(), SpellInfo::Id, SPELL_AURA_MOD_CRIT_PERCENT_VERSUS, SPELL_AURA_MOD_CRITICAL_HEALING_AMOUNT, SPELL_DAMAGE_CLASS_MELEE, SPELL_DAMAGE_CLASS_RANGED, and SPELLMOD_CRIT_DAMAGE_BONUS.

Referenced by Spell::DoAllEffectOnTarget(), and AuraEffect::HandlePeriodicHealAurasTick().

◆ SpellDamageBonusDone()

uint32 Unit::SpellDamageBonusDone ( Unit victim,
SpellInfo const *  spellProto,
uint32  pdamage,
DamageEffectType  damagetype,
uint8  effIndex,
float  TotalMod = 0.0f,
uint32  stack = 1 
)
8730{
8731 if (!spellProto || !victim || damagetype == DIRECT_DAMAGE)
8732 return pdamage;
8733
8734 // Some spells don't benefit from done mods
8735 if (spellProto->HasAttribute(SPELL_ATTR3_IGNORE_CASTER_MODIFIERS))
8736 return pdamage;
8737
8738 // For totems get damage bonus from owner
8739 if (IsCreature())
8740 {
8741 if (IsTotem())
8742 {
8743 if (Unit* owner = GetOwner())
8744 return owner->SpellDamageBonusDone(victim, spellProto, pdamage, damagetype, effIndex, TotalMod, stack);
8745 }
8746 // Dancing Rune Weapon...
8747 else if (GetEntry() == 27893)
8748 {
8749 if (Unit* owner = GetOwner())
8750 return owner->SpellDamageBonusDone(victim, spellProto, pdamage, damagetype, TotalMod, stack) / 2;
8751 }
8752 }
8753
8754 // Done total percent damage auras
8755 float ApCoeffMod = 1.0f;
8756 int32 DoneTotal = 0;
8757 float DoneTotalMod = TotalMod ? TotalMod : SpellPctDamageModsDone(victim, spellProto, damagetype);
8758
8759 // Config : RATE_CREATURE_X_SPELLDAMAGE & Do Not Modify Pet/Guardian/Mind Controlled Damage
8761 DoneTotalMod *= ToCreature()->GetSpellDamageMod(ToCreature()->GetCreatureTemplate()->rank);
8762
8763 // Some spells don't benefit from pct done mods
8764 if (!spellProto->HasAttribute(SPELL_ATTR6_IGNORE_CASTER_DAMAGE_MODIFIERS))
8765 {
8766 uint32 creatureTypeMask = victim->GetCreatureTypeMask();
8767 // Add flat bonus from spell damage versus
8769 }
8770
8771 // done scripted mod (take it from owner)
8772 Unit* owner = GetOwner() ? GetOwner() : this;
8773 int32 DoneAdvertisedBenefit = 0;
8774 DoneAdvertisedBenefit += owner->GetTotalAuraModifier(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS, [spellProto](AuraEffect const* aurEff)
8775 {
8776 if (!aurEff->IsAffectedOnSpell(spellProto))
8777 return false;
8778
8779 switch (aurEff->GetMiscValue())
8780 {
8781 case 4418: // Increased Shock Damage
8782 case 4554: // Increased Lightning Damage
8783 case 4555: // Improved Moonfire
8784 case 5142: // Increased Lightning Damage
8785 case 5147: // Improved Consecration / Libram of Resurgence
8786 case 5148: // Idol of the Shooting Star
8787 case 6008: // Increased Lightning Damage
8788 case 8627: // Totem of Hex
8789 return true;
8790 break;
8791 default:
8792 break;
8793 }
8794
8795 return false;
8796 });
8797
8798 // Custom scripted damage
8799 switch (spellProto->SpellFamilyName)
8800 {
8801 case SPELLFAMILY_DRUID:
8802 {
8803 // Nourish vs Idol of the Flourishing Life
8804 if (spellProto->SpellFamilyFlags[1] & 0x02000000)
8805 {
8806 if (AuraEffect const* relicAurEff = GetAuraEffect(64949, EFFECT_0))
8807 {
8808 DoneAdvertisedBenefit += relicAurEff->GetAmount();
8809 }
8810 }
8811 break;
8812 }
8814 {
8815 // Sigil of the Vengeful Heart
8816 if (spellProto->SpellFamilyFlags[0] & 0x2000)
8817 {
8818 if (AuraEffect* aurEff = GetAuraEffect(64962, EFFECT_1))
8819 {
8820 AddPct(DoneTotal, aurEff->GetAmount());
8821 }
8822 }
8823
8824 // Impurity
8826 {
8827 AddPct(ApCoeffMod, aurEff->GetAmount());
8828 }
8829
8830 // Blood Boil - bonus for diseased targets
8831 if ((spellProto->SpellFamilyFlags[0] & 0x00040000) && victim->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_DEATHKNIGHT, 0, 0, 0x00000002, GetGUID()))
8832 {
8833 DoneTotal += 95;
8834 ApCoeffMod = 1.5835f;
8835 }
8836 break;
8837 }
8838 default:
8839 break;
8840 }
8841
8842 // Done fixed damage bonus auras
8843 DoneAdvertisedBenefit += SpellBaseDamageBonusDone(spellProto->GetSchoolMask());
8844
8845 // Check for table values
8846 float coeff = spellProto->Effects[effIndex].BonusMultiplier;
8847 SpellBonusEntry const* bonus = sSpellMgr->GetSpellBonusData(spellProto->Id);
8848 if (bonus)
8849 {
8850 if (damagetype == DOT)
8851 {
8852 coeff = bonus->dot_damage;
8853 if (bonus->ap_dot_bonus > 0)
8854 {
8855 WeaponAttackType attType = (spellProto->IsRangedWeaponSpell() && spellProto->DmgClass != SPELL_DAMAGE_CLASS_MELEE) ? RANGED_ATTACK : BASE_ATTACK;
8857 APbonus += GetTotalAttackPowerValue(attType);
8858 DoneTotal += int32(bonus->ap_dot_bonus * stack * ApCoeffMod * APbonus);
8859 }
8860 }
8861 else
8862 {
8863 coeff = bonus->direct_damage;
8864 if (bonus->ap_bonus > 0)
8865 {
8866 WeaponAttackType attType = (spellProto->IsRangedWeaponSpell() && spellProto->DmgClass != SPELL_DAMAGE_CLASS_MELEE) ? RANGED_ATTACK : BASE_ATTACK;
8868 APbonus += GetTotalAttackPowerValue(attType);
8869 DoneTotal += int32(bonus->ap_bonus * stack * ApCoeffMod * APbonus);
8870 }
8871 }
8872 }
8873
8874 // Default calculation
8875 if (coeff && DoneAdvertisedBenefit)
8876 {
8877 float factorMod = CalculateLevelPenalty(spellProto) * stack;
8878
8879 if (Player* modOwner = GetSpellModOwner())
8880 {
8881 coeff *= 100.0f;
8882 modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_BONUS_MULTIPLIER, coeff);
8883 coeff /= 100.0f;
8884 }
8885
8886 DoneTotal += int32(DoneAdvertisedBenefit * coeff * factorMod);
8887 }
8888
8889 float tmpDamage = (float(pdamage) + DoneTotal) * DoneTotalMod;
8890 // apply spellmod to Done damage (flat and pct)
8891 if (Player* modOwner = GetSpellModOwner())
8892 modOwner->ApplySpellMod(spellProto->Id, damagetype == DOT ? SPELLMOD_DOT : SPELLMOD_DAMAGE, tmpDamage);
8893
8894 return uint32(std::max(tmpDamage, 0.0f));
8895}
@ EFFECT_1
Definition SharedDefines.h:32
@ SPELL_ATTR6_IGNORE_CASTER_DAMAGE_MODIFIERS
Definition SharedDefines.h:621
@ SPELL_AURA_MOD_FLAT_SPELL_DAMAGE_VERSUS
Definition SpellAuraDefines.h:243
@ SPELLMOD_DOT
Definition SpellDefines.h:98
@ SPELLMOD_BONUS_MULTIPLIER
Definition SpellDefines.h:100
float GetSpellDamageMod(int32 Rank)
Definition Creature.cpp:1596
float SpellPctDamageModsDone(Unit *victim, SpellInfo const *spellProto, DamageEffectType damagetype)
Definition Unit.cpp:8401
int32 SpellBaseDamageBonusDone(SpellSchoolMask schoolMask)
Definition Unit.cpp:9040
float CalculateLevelPenalty(SpellInfo const *spellProto) const
Definition Unit.cpp:3224
Definition SpellMgr.h:321
float ap_dot_bonus
Definition SpellMgr.h:325
float dot_damage
Definition SpellMgr.h:323
float ap_bonus
Definition SpellMgr.h:324
float direct_damage
Definition SpellMgr.h:322

References AddPct(), SpellBonusEntry::ap_bonus, SpellBonusEntry::ap_dot_bonus, BASE_ATTACK, CalculateLevelPenalty(), DIRECT_DAMAGE, SpellBonusEntry::direct_damage, SpellInfo::DmgClass, DOT, SpellBonusEntry::dot_damage, EFFECT_0, EFFECT_1, SpellInfo::Effects, AuraEffect::GetAmount(), GetAuraEffect(), GetCreatureTypeMask(), GetDummyAuraEffect(), Object::GetEntry(), Object::GetGUID(), AuraEffect::GetMiscValue(), GetOwner(), SpellInfo::GetSchoolMask(), Creature::GetSpellDamageMod(), GetSpellModOwner(), GetTotalAttackPowerValue(), GetTotalAuraModifier(), GetTotalAuraModifierByMiscMask(), SpellInfo::HasAttribute(), SpellInfo::Id, AuraEffect::IsAffectedOnSpell(), IsControlledByPlayer(), Object::IsCreature(), IsGuardian(), IsPet(), SpellInfo::IsRangedWeaponSpell(), IsTotem(), RANGED_ATTACK, SPELL_ATTR3_IGNORE_CASTER_MODIFIERS, SPELL_ATTR6_IGNORE_CASTER_DAMAGE_MODIFIERS, SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS, SPELL_AURA_MOD_FLAT_SPELL_DAMAGE_VERSUS, SPELL_AURA_OVERRIDE_CLASS_SCRIPTS, SPELL_AURA_PERIODIC_DAMAGE, SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS, SPELL_DAMAGE_CLASS_MELEE, SpellBaseDamageBonusDone(), SPELLFAMILY_DEATHKNIGHT, SPELLFAMILY_DRUID, SpellInfo::SpellFamilyFlags, SpellInfo::SpellFamilyName, SPELLMOD_BONUS_MULTIPLIER, SPELLMOD_DAMAGE, SPELLMOD_DOT, SpellPctDamageModsDone(), sSpellMgr, and Object::ToCreature().

Referenced by AuraEffect::CalculateAmount(), spell_warl_seed_of_corruption_dummy::CalculateBuffer(), Spell::EffectHealthLeech(), Spell::EffectPowerDrain(), Spell::EffectSchoolDMG(), spell_warr_bloodthirst::HandleDamage(), AuraEffect::HandlePeriodicDamageAurasTick(), AuraEffect::HandlePeriodicHealthLeechAuraTick(), and AuraEffect::HandleProcTriggerDamageAuraProc().

◆ SpellDamageBonusTaken()

uint32 Unit::SpellDamageBonusTaken ( Unit caster,
SpellInfo const *  spellProto,
uint32  pdamage,
DamageEffectType  damagetype,
uint32  stack = 1 
)
8898{
8899 if (!spellProto || damagetype == DIRECT_DAMAGE)
8900 return pdamage;
8901
8902 int32 TakenTotal = 0;
8903 float TakenTotalMod = 1.0f;
8904
8905 // from positive and negative SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN
8906 // multiplicative bonus, for example Dispersion + Shadowform (0.10*0.85=0.085)
8907 TakenTotalMod *= GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, spellProto->GetSchoolMask());
8908
8909 TakenTotalMod = processDummyAuras(TakenTotalMod);
8910
8911 // From caster spells
8912 if (caster)
8913 {
8914 TakenTotalMod *= GetTotalAuraMultiplier(SPELL_AURA_MOD_DAMAGE_FROM_CASTER, [caster, spellProto](AuraEffect const* aurEff) -> bool
8915 {
8916 if (aurEff->GetCasterGUID() == caster->GetGUID() && aurEff->IsAffectedOnSpell(spellProto))
8917 return true;
8918 return false;
8919 });
8920 }
8921
8922 if (uint64 mechanicMask = spellProto->GetAllEffectsMechanicMask())
8923 {
8924 int32 modifierMax = 0;
8925 int32 modifierMin = 0;
8927 for (AuraEffectList::const_iterator i = auraEffectList.begin(); i != auraEffectList.end(); ++i)
8928 {
8929 if (!spellProto->ValidateAttribute6SpellDamageMods(caster, *i, damagetype == DOT))
8930 continue;
8931
8932 // Only death knight spell with this aura
8933 if ((*i)->GetSpellInfo()->SpellFamilyName == SPELLFAMILY_DEATHKNIGHT)
8934 if (!caster || caster->GetGUID() != (*i)->GetCasterGUID())
8935 continue;
8936
8937 if (mechanicMask & (1ULL << (*i)->GetMiscValue()))
8938 {
8939 if ((*i)->GetAmount() > 0)
8940 {
8941 if ((*i)->GetAmount() > modifierMax)
8942 modifierMax = (*i)->GetAmount();
8943 }
8944 else if ((*i)->GetAmount() < modifierMin)
8945 modifierMin = (*i)->GetAmount();
8946 }
8947 }
8948
8949 AddPct(TakenTotalMod, modifierMax);
8950 AddPct(TakenTotalMod, modifierMin);
8951 }
8952
8953 int32 TakenAdvertisedBenefit = SpellBaseDamageBonusTaken(spellProto->GetSchoolMask(), damagetype == DOT);
8954
8955 // Check for table values
8956 float coeff = 0;
8957 SpellBonusEntry const* bonus = sSpellMgr->GetSpellBonusData(spellProto->Id);
8958 if (bonus)
8959 coeff = (damagetype == DOT) ? bonus->dot_damage : bonus->direct_damage;
8960
8961 // Default calculation
8962 if (TakenAdvertisedBenefit)
8963 {
8964 if (coeff <= 0.0f)
8965 {
8966 if (caster)
8967 coeff = caster->CalculateDefaultCoefficient(spellProto, damagetype) * int32(stack);
8968 else
8969 coeff = CalculateDefaultCoefficient(spellProto, damagetype) * int32(stack);
8970 }
8971
8972 float factorMod = CalculateLevelPenalty(spellProto) * stack;
8973 TakenTotal += int32(TakenAdvertisedBenefit * coeff * factorMod);
8974 }
8975
8976 // No positive taken bonus, custom attr
8977 if (spellProto->HasAttribute(SPELL_ATTR0_CU_NO_POSITIVE_TAKEN_BONUS) && TakenTotalMod > 1.0f)
8978 {
8979 TakenTotal = 0;
8980 TakenTotalMod = 1.0f;
8981 }
8982
8983 // xinef: sanctified wrath talent
8984 if (caster && TakenTotalMod < 1.0f && caster->HasIgnoreTargetResistAura())
8985 {
8986 float ignoreModifier = 1.0f - TakenTotalMod;
8987 bool addModifier = false;
8989 for (AuraEffectList::const_iterator j = ResIgnoreAuras.begin(); j != ResIgnoreAuras.end(); ++j)
8990 if ((*j)->GetMiscValue() & spellProto->SchoolMask)
8991 {
8992 ApplyPct(ignoreModifier, (*j)->GetAmount());
8993 addModifier = true;
8994 }
8995
8996 if (addModifier)
8997 TakenTotalMod += ignoreModifier;
8998 }
8999
9000 float tmpDamage = (float(pdamage) + TakenTotal) * TakenTotalMod;
9001
9002 return uint32(std::max(tmpDamage, 0.0f));
9003}
float CalculateDefaultCoefficient(SpellInfo const *spellInfo, DamageEffectType damagetype) const
Definition Unit.cpp:13612
int32 SpellBaseDamageBonusTaken(SpellSchoolMask schoolMask, bool isDoT=false)
Definition Unit.cpp:9074

References AddPct(), ApplyPct(), CalculateDefaultCoefficient(), CalculateLevelPenalty(), DIRECT_DAMAGE, SpellBonusEntry::direct_damage, DOT, SpellBonusEntry::dot_damage, SpellInfo::GetAllEffectsMechanicMask(), GetAuraEffectsByType(), AuraEffect::GetCasterGUID(), Object::GetGUID(), SpellInfo::GetSchoolMask(), GetTotalAuraMultiplier(), GetTotalAuraMultiplierByMiscMask(), SpellInfo::HasAttribute(), HasIgnoreTargetResistAura(), SpellInfo::Id, AuraEffect::IsAffectedOnSpell(), processDummyAuras(), SpellInfo::SchoolMask, SPELL_ATTR0_CU_NO_POSITIVE_TAKEN_BONUS, SPELL_AURA_MOD_DAMAGE_FROM_CASTER, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, SPELL_AURA_MOD_IGNORE_TARGET_RESIST, SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT, SpellBaseDamageBonusTaken(), SPELLFAMILY_DEATHKNIGHT, sSpellMgr, and SpellInfo::ValidateAttribute6SpellDamageMods().

Referenced by DealDamageShieldDamage(), Spell::EffectHealthLeech(), Spell::EffectPowerDrain(), Spell::EffectSchoolDMG(), Aura::HandleAuraSpecificMods(), AuraEffect::HandlePeriodicDamageAurasTick(), AuraEffect::HandlePeriodicHealthLeechAuraTick(), AuraEffect::HandleProcTriggerDamageAuraProc(), and spell_black_temple_l5_arcane_charge::PrepareSpellScript().

◆ SpellDoneCritChance()

float Unit::SpellDoneCritChance ( Unit const *  ,
SpellInfo const *  spellProto,
SpellSchoolMask  schoolMask,
WeaponAttackType  attackType,
bool  skipEffectCheck 
) const
9086{
9087 // Mobs can't crit with spells.
9088 if (IsCreature() && !GetSpellModOwner())
9089 return -100.0f;
9090
9091 // not critting spell
9092 if (spellProto->HasAttribute(SPELL_ATTR2_CANT_CRIT))
9093 return 0.0f;
9094
9095 // Xinef: check if spell is capable of critting, auras requires special aura to crit so they can be skipped
9096 if (!skipEffectCheck && !spellProto->IsCritCapable())
9097 return 0.0f;
9098
9099 float crit_chance = 0.0f;
9100 switch (spellProto->DmgClass)
9101 {
9103 {
9104 if (schoolMask & SPELL_SCHOOL_MASK_NORMAL)
9105 crit_chance = 0.0f;
9106 // For other schools
9107 else if (IsPlayer())
9108 {
9109 crit_chance = GetFloatValue(static_cast<uint16>(PLAYER_SPELL_CRIT_PERCENTAGE1) + GetFirstSchoolInMask(schoolMask));
9110
9111 // register aura mod, this is needed for Arcane Potency
9112 if (Spell* spell = ToPlayer()->m_spellModTakingSpell)
9113 {
9115 for (AuraEffect const* aurEff : critAuras)
9116 spell->m_appliedMods.insert(aurEff->GetBase());
9117
9119 for (AuraEffect const* aurEff : critSchoolAuras)
9120 if (aurEff->GetMiscValue() & schoolMask)
9121 spell->m_appliedMods.insert(aurEff->GetBase());
9122 }
9123 }
9124 else
9125 {
9126 crit_chance = (float)m_baseSpellCritChance;
9128 }
9129 break;
9130 }
9133 {
9134 if (IsPlayer())
9135 {
9136 switch (attackType)
9137 {
9138 case BASE_ATTACK:
9140 break;
9141 case OFF_ATTACK:
9143 break;
9144 case RANGED_ATTACK:
9146 break;
9147 default:
9148 break;
9149 }
9150 }
9151 else
9152 {
9153 crit_chance = 5.0f;
9156 }
9158 break;
9159 }
9160 // values overridden in spellmgr for lifebloom and earth shield
9162 default:
9163 return 0.0f;
9164 }
9165
9166 // percent done
9167 // only players use intelligence for critical chance computations
9168 if (Player* modOwner = GetSpellModOwner())
9169 modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_CRITICAL_CHANCE, crit_chance);
9170
9171 // xinef: can be negative!
9172 return crit_chance;
9173}
@ SPELL_ATTR2_CANT_CRIT
Definition SharedDefines.h:473
SpellSchools GetFirstSchoolInMask(SpellSchoolMask mask)
Definition SharedDefines.h:306
@ SPELL_AURA_MOD_SPELL_CRIT_CHANCE_SCHOOL
Definition SpellAuraDefines.h:134
@ SPELL_AURA_MOD_SPELL_CRIT_CHANCE
Definition SpellAuraDefines.h:120
@ SPELLMOD_CRITICAL_CHANCE
Definition SpellDefines.h:83
@ PLAYER_SPELL_CRIT_PERCENTAGE1
Definition UpdateFields.h:354

References BASE_ATTACK, SpellInfo::DmgClass, GetAuraEffectsByType(), GetFirstSchoolInMask(), Object::GetFloatValue(), GetSpellModOwner(), GetTotalAuraModifier(), GetTotalAuraModifierByMiscMask(), SpellInfo::HasAttribute(), SpellInfo::Id, Object::IsCreature(), SpellInfo::IsCritCapable(), Object::IsPlayer(), m_baseSpellCritChance, OFF_ATTACK, PLAYER_CRIT_PERCENTAGE, PLAYER_OFFHAND_CRIT_PERCENTAGE, PLAYER_RANGED_CRIT_PERCENTAGE, PLAYER_SPELL_CRIT_PERCENTAGE1, RANGED_ATTACK, SPELL_ATTR2_CANT_CRIT, SPELL_AURA_MOD_CRIT_PCT, SPELL_AURA_MOD_SPELL_CRIT_CHANCE, SPELL_AURA_MOD_SPELL_CRIT_CHANCE_SCHOOL, SPELL_AURA_MOD_WEAPON_CRIT_PERCENT, SPELL_DAMAGE_CLASS_MAGIC, SPELL_DAMAGE_CLASS_MELEE, SPELL_DAMAGE_CLASS_NONE, SPELL_DAMAGE_CLASS_RANGED, SPELL_SCHOOL_MASK_NORMAL, SPELLMOD_CRITICAL_CHANCE, and Object::ToPlayer().

Referenced by Spell::DoAllEffectOnLaunchTarget().

◆ SpellHealingBonusDone()

uint32 Unit::SpellHealingBonusDone ( Unit victim,
SpellInfo const *  spellProto,
uint32  healamount,
DamageEffectType  damagetype,
uint8  effIndex,
float  TotalMod = 0.0f,
uint32  stack = 1 
)
9549{
9550 // For totems get healing bonus from owner (statue isn't totem in fact)
9551 if (IsCreature() && IsTotem())
9552 if (Unit* owner = GetOwner())
9553 return owner->SpellHealingBonusDone(victim, spellProto, healamount, damagetype, effIndex, TotalMod, stack);
9554
9555 // No bonus healing for potion spells
9556 if (spellProto->SpellFamilyName == SPELLFAMILY_POTION)
9557 return healamount;
9558
9559 float ApCoeffMod = 1.0f;
9560 float DoneTotalMod = TotalMod ? TotalMod : SpellPctHealingModsDone(victim, spellProto, damagetype);
9561 int32 DoneTotal = 0;
9562
9563 // done scripted mod (take it from owner)
9564 Unit* owner = GetOwner() ? GetOwner() : this;
9565 int32 DoneAdvertisedBenefit = 0;
9566 AuraEffectList const& mOverrideClassScript = owner->GetAuraEffectsByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS);
9567 for (AuraEffectList::const_iterator i = mOverrideClassScript.begin(); i != mOverrideClassScript.end(); ++i)
9568 {
9569 if (!(*i)->IsAffectedOnSpell(spellProto))
9570 continue;
9571
9572 switch ((*i)->GetMiscValue())
9573 {
9574 case 4415: // Increased Rejuvenation Healing
9575 case 4953:
9576 DoneAdvertisedBenefit += (*i)->GetAmount();
9577 break;
9578 case 3736: // Hateful Totem of the Third Wind / Increased Lesser Healing Wave / LK Arena (4/5/6) Totem of the Third Wind / Savage Totem of the Third Wind
9579 DoneAdvertisedBenefit += (*i)->GetAmount();
9580 break;
9581 }
9582 }
9583
9584 switch (spellProto->SpellFamilyName)
9585 {
9587 {
9588 // Impurity
9590 {
9591 AddPct(ApCoeffMod, aurEff->GetAmount());
9592 }
9593 break;
9594 }
9595 default:
9596 break;
9597 }
9598
9599 // Done fixed damage bonus auras
9600 DoneAdvertisedBenefit += SpellBaseHealingBonusDone(spellProto->GetSchoolMask());
9601 float coeff = spellProto->Effects[effIndex].BonusMultiplier;
9602
9603 // Check for table values
9604 SpellBonusEntry const* bonus = sSpellMgr->GetSpellBonusData(spellProto->Id);
9605 if (bonus)
9606 {
9607 if (damagetype == DOT)
9608 {
9609 coeff = bonus->dot_damage;
9610 if (bonus->ap_dot_bonus > 0)
9611 DoneTotal += int32(bonus->ap_dot_bonus * ApCoeffMod * stack * GetTotalAttackPowerValue(
9612 (spellProto->IsRangedWeaponSpell() && spellProto->DmgClass != SPELL_DAMAGE_CLASS_MELEE) ? RANGED_ATTACK : BASE_ATTACK));
9613 }
9614 else
9615 {
9616 coeff = bonus->direct_damage;
9617 if (bonus->ap_bonus > 0)
9618 DoneTotal += int32(bonus->ap_bonus * ApCoeffMod * stack * GetTotalAttackPowerValue(
9619 (spellProto->IsRangedWeaponSpell() && spellProto->DmgClass != SPELL_DAMAGE_CLASS_MELEE) ? RANGED_ATTACK : BASE_ATTACK));
9620 }
9621 }
9622 else
9623 {
9624 // No bonus healing for SPELL_DAMAGE_CLASS_NONE class spells by default
9625 if (spellProto->DmgClass == SPELL_DAMAGE_CLASS_NONE)
9626 return healamount;
9627 }
9628
9629 // Default calculation
9630 if (DoneAdvertisedBenefit)
9631 {
9632 float factorMod = CalculateLevelPenalty(spellProto) * stack;
9633 if (Player* modOwner = GetSpellModOwner())
9634 {
9635 coeff *= 100.0f;
9636 modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_BONUS_MULTIPLIER, coeff);
9637 coeff /= 100.0f;
9638 }
9639 DoneTotal += int32(DoneAdvertisedBenefit * coeff * factorMod);
9640 }
9641
9642 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
9643 {
9644 switch (spellProto->Effects[i].ApplyAuraName)
9645 {
9646 // Bonus healing does not apply to these spells
9649 DoneTotal = 0;
9650 break;
9651 default:
9652 break;
9653 }
9654 if (spellProto->Effects[i].Effect == SPELL_EFFECT_HEALTH_LEECH)
9655 DoneTotal = 0;
9656 }
9657
9658 // use float as more appropriate for negative values and percent applying
9659 float heal = float(int32(healamount) + DoneTotal) * DoneTotalMod;
9660 // apply spellmod to Done amount
9661
9662 if (Player* modOwner = GetSpellModOwner())
9663 modOwner->ApplySpellMod(spellProto->Id, damagetype == DOT ? SPELLMOD_DOT : SPELLMOD_DAMAGE, heal);
9664
9665 return uint32(std::max(heal, 0.0f));
9666}
@ SPELLFAMILY_POTION
Definition SharedDefines.h:3797
@ SPELL_AURA_PERIODIC_HEALTH_FUNNEL
Definition SpellAuraDefines.h:125
int32 SpellBaseHealingBonusDone(SpellSchoolMask schoolMask)
Definition Unit.cpp:9798
float SpellPctHealingModsDone(Unit *victim, SpellInfo const *spellProto, DamageEffectType damagetype, bool includeHealingDonePct=true)
Definition Unit.cpp:9462

References AddPct(), SpellBonusEntry::ap_bonus, SpellBonusEntry::ap_dot_bonus, BASE_ATTACK, CalculateLevelPenalty(), SpellBonusEntry::direct_damage, SpellInfo::DmgClass, DOT, SpellBonusEntry::dot_damage, SpellInfo::Effects, GetAuraEffectsByType(), GetDummyAuraEffect(), GetOwner(), SpellInfo::GetSchoolMask(), GetSpellModOwner(), GetTotalAttackPowerValue(), SpellInfo::Id, Object::IsCreature(), SpellInfo::IsRangedWeaponSpell(), IsTotem(), MAX_SPELL_EFFECTS, RANGED_ATTACK, SPELL_AURA_OVERRIDE_CLASS_SCRIPTS, SPELL_AURA_PERIODIC_HEALTH_FUNNEL, SPELL_AURA_PERIODIC_LEECH, SPELL_DAMAGE_CLASS_MELEE, SPELL_DAMAGE_CLASS_NONE, SPELL_EFFECT_HEALTH_LEECH, SpellBaseHealingBonusDone(), SPELLFAMILY_DEATHKNIGHT, SPELLFAMILY_POTION, SpellInfo::SpellFamilyName, SPELLMOD_BONUS_MULTIPLIER, SPELLMOD_DAMAGE, SPELLMOD_DOT, SpellPctHealingModsDone(), and sSpellMgr.

Referenced by AuraEffect::CalculateAmount(), Spell::DoAllEffectOnTarget(), Spell::EffectHeal(), Spell::EffectHealMechanical(), Spell::EffectHealPct(), spell_dru_lifebloom::HandleDispel(), AuraEffect::HandlePeriodicHealAurasTick(), and AuraEffect::HandlePeriodicHealthLeechAuraTick().

◆ SpellHealingBonusTaken()

uint32 Unit::SpellHealingBonusTaken ( Unit caster,
SpellInfo const *  spellProto,
uint32  healamount,
DamageEffectType  damagetype,
uint32  stack = 1 
)
9669{
9670 float TakenTotalMod = 1.0f;
9671 float minval = 0.0f;
9672
9673 // Healing taken percent
9674 if (!sScriptMgr->OnSpellHealingBonusTakenNegativeModifiers(this, caster, spellProto, minval))
9675 {
9677 }
9678
9679 if (minval)
9680 AddPct(TakenTotalMod, minval);
9681
9683 if (maxval)
9684 AddPct(TakenTotalMod, maxval);
9685
9686 // Tenacity increase healing % taken
9687 if (AuraEffect const* Tenacity = GetAuraEffect(58549, 0))
9688 AddPct(TakenTotalMod, Tenacity->GetAmount());
9689
9690 // Healing Done
9691 int32 TakenTotal = 0;
9692
9693 // Taken fixed damage bonus auras
9694 int32 TakenAdvertisedBenefit = GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_HEALING, spellProto->GetSchoolMask());
9695
9696 // Nourish cast - 20% bonus if target has Rejuvenation, Regrowth, Lifebloom, or Wild Growth from caster
9697 // Glyph of Nourish is handled by spell_dru_nourish script
9698 if (spellProto->SpellFamilyName == SPELLFAMILY_DRUID && spellProto->SpellFamilyFlags[1] & 0x2000000 && caster)
9699 {
9701 for (AuraEffectList::const_iterator i = auras.begin(); i != auras.end(); ++i)
9702 {
9703 if ((*i)->GetCasterGUID() == caster->GetGUID())
9704 {
9705 SpellInfo const* spell = (*i)->GetSpellInfo();
9706 // Rejuvenation, Regrowth, Lifebloom, or Wild Growth
9707 if (spell->SpellFamilyFlags.HasFlag(0x50, 0x4000010, 0))
9708 {
9709 TakenTotalMod *= 1.2f;
9710 break;
9711 }
9712 }
9713 }
9714 }
9715
9716 if (damagetype == DOT)
9717 {
9718 // Healing over time taken percent
9719 float minval_hot = float(GetMaxNegativeAuraModifier(SPELL_AURA_MOD_HOT_PCT));
9720 if (minval_hot)
9721 AddPct(TakenTotalMod, minval_hot);
9722
9723 float maxval_hot = float(GetMaxPositiveAuraModifier(SPELL_AURA_MOD_HOT_PCT));
9724 if (maxval_hot)
9725 AddPct(TakenTotalMod, maxval_hot);
9726 }
9727
9728 // Check for table values
9729 SpellBonusEntry const* bonus = sSpellMgr->GetSpellBonusData(spellProto->Id);
9730 float coeff = 0;
9731 float factorMod = 1.0f;
9732 if (bonus)
9733 coeff = (damagetype == DOT) ? bonus->dot_damage : bonus->direct_damage;
9734 else
9735 {
9736 // No bonus healing for SPELL_DAMAGE_CLASS_NONE class spells by default
9737 if (spellProto->DmgClass == SPELL_DAMAGE_CLASS_NONE)
9738 {
9739 healamount = uint32(std::max((float(healamount) * TakenTotalMod), 0.0f));
9740 return healamount;
9741 }
9742 }
9743
9744 // Default calculation
9745 if (TakenAdvertisedBenefit)
9746 {
9747 float TakenCoeff = 0.0f;
9748 if (coeff <= 0)
9749 coeff = CalculateDefaultCoefficient(spellProto, damagetype) * int32(stack) * 1.88f; // As wowwiki says: C = (Cast Time / 3.5) * 1.88 (for healing spells)
9750
9751 factorMod *= CalculateLevelPenalty(spellProto) * int32(stack);
9752 if (Player* modOwner = GetSpellModOwner())
9753 {
9754 coeff *= 100.0f;
9755 modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_BONUS_MULTIPLIER, coeff);
9756 coeff /= 100.0f;
9757 }
9758
9759 TakenTotal += int32(TakenAdvertisedBenefit * (coeff > 0 ? coeff : TakenCoeff) * factorMod);
9760 }
9761
9762 if (caster)
9763 {
9764 TakenTotalMod *= GetTotalAuraMultiplier(SPELL_AURA_MOD_HEALING_RECEIVED, [caster, spellProto](AuraEffect const* aurEff)
9765 {
9766 return caster->GetGUID() == aurEff->GetCasterGUID() && aurEff->IsAffectedOnSpell(spellProto);
9767 });
9768 }
9769
9770 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
9771 {
9772 switch (spellProto->Effects[i].ApplyAuraName)
9773 {
9774 // Bonus healing does not apply to these spells
9777 TakenTotal = 0;
9778 break;
9779 default:
9780 break;
9781 }
9782 if (spellProto->Effects[i].Effect == SPELL_EFFECT_HEALTH_LEECH)
9783 TakenTotal = 0;
9784 }
9785
9786 // No positive taken bonus, custom attr
9787 if ((spellProto->HasAttribute(SPELL_ATTR6_IGNORE_HEALTH_MODIFIERS) || spellProto->HasAttribute(SPELL_ATTR0_CU_NO_POSITIVE_TAKEN_BONUS)) && TakenTotalMod > 1.0f)
9788 {
9789 TakenTotal = 0;
9790 TakenTotalMod = 1.0f;
9791 }
9792
9793 float heal = float(int32(healamount) + TakenTotal) * TakenTotalMod;
9794
9795 return uint32(std::max(heal, 0.0f));
9796}
@ SPELL_ATTR6_IGNORE_HEALTH_MODIFIERS
Definition SharedDefines.h:619
@ SPELL_AURA_MOD_HEALING_RECEIVED
Definition SpellAuraDefines.h:346
@ SPELL_AURA_MOD_HEALING_PCT
Definition SpellAuraDefines.h:181
@ SPELL_AURA_MOD_HOT_PCT
Definition SpellAuraDefines.h:322
@ SPELL_AURA_MOD_HEALING
Definition SpellAuraDefines.h:178

References AddPct(), CalculateDefaultCoefficient(), CalculateLevelPenalty(), SpellBonusEntry::direct_damage, SpellInfo::DmgClass, DOT, SpellBonusEntry::dot_damage, SpellInfo::Effects, GetAuraEffect(), GetAuraEffectsByType(), AuraEffect::GetCasterGUID(), Object::GetGUID(), GetMaxNegativeAuraModifier(), GetMaxPositiveAuraModifier(), SpellInfo::GetSchoolMask(), GetSpellModOwner(), GetTotalAuraModifierByMiscMask(), GetTotalAuraMultiplier(), SpellInfo::HasAttribute(), flag96::HasFlag(), SpellInfo::Id, AuraEffect::IsAffectedOnSpell(), MAX_SPELL_EFFECTS, SPELL_ATTR0_CU_NO_POSITIVE_TAKEN_BONUS, SPELL_ATTR6_IGNORE_HEALTH_MODIFIERS, SPELL_AURA_MOD_HEALING, SPELL_AURA_MOD_HEALING_PCT, SPELL_AURA_MOD_HEALING_RECEIVED, SPELL_AURA_MOD_HOT_PCT, SPELL_AURA_PERIODIC_HEAL, SPELL_AURA_PERIODIC_HEALTH_FUNNEL, SPELL_AURA_PERIODIC_LEECH, SPELL_DAMAGE_CLASS_NONE, SPELL_EFFECT_HEALTH_LEECH, SPELLFAMILY_DRUID, SpellInfo::SpellFamilyFlags, SpellInfo::SpellFamilyName, SPELLMOD_BONUS_MULTIPLIER, sScriptMgr, and sSpellMgr.

Referenced by spell_dru_lifebloom::AfterRemove(), Spell::DoAllEffectOnTarget(), Spell::EffectHeal(), Spell::EffectHealMechanical(), Spell::EffectHealPct(), spell_pri_renew::HandleApplyEffect(), Aura::HandleAuraSpecificMods(), spell_pal_lay_on_hands::HandleMaxHealthHeal(), AuraEffect::HandlePeriodicHealAurasTick(), and AuraEffect::HandlePeriodicHealthLeechAuraTick().

◆ SpellHitResult() [1/2]

SpellMissInfo Unit::SpellHitResult ( Unit victim,
Spell const *  spell,
bool  canReflect = false 
)
Todo:
: client not show miss log for this spells - so need find info for this in dbc and use it!
3715{
3716 SpellInfo const* spellInfo = spell->GetSpellInfo();
3717
3718 // Check for immune
3719 if (victim->IsImmunedToSpell(spellInfo, spell))
3720 {
3721 return SPELL_MISS_IMMUNE;
3722 }
3723
3724 // All positive spells can`t miss
3726 if ((spellInfo->IsPositive() || spellInfo->HasEffect(SPELL_EFFECT_DISPEL))
3727 && (!IsHostileTo(victim))) // prevent from affecting enemy by "positive" spell
3728 {
3729 return SPELL_MISS_NONE;
3730 }
3731
3732 // Check for immune to spell effects (includes school, mechanics, state, dispel immunities)
3733 if (victim->IsImmunedToSpell(spellInfo, MAX_EFFECT_MASK, this))
3734 {
3735 return SPELL_MISS_IMMUNE;
3736 }
3737
3738 // Damage immunity is only checked if the spell has damage effects, this immunity must not prevent aura apply
3739 // returns SPELL_MISS_IMMUNE in that case, for other spells, the SMSG_SPELL_GO must show hit
3740 if (spellInfo->HasOnlyDamageEffects() && victim->IsImmunedToDamage(this, spellInfo))
3741 return SPELL_MISS_IMMUNE;
3742
3743 if (this == victim)
3744 {
3745 return SPELL_MISS_NONE;
3746 }
3747
3748 // Return evade for units in evade mode
3749 if (victim->IsCreature() && victim->ToCreature()->IsEvadingAttacks() && !spellInfo->HasAura(SPELL_AURA_CONTROL_VEHICLE) &&
3751 {
3752 return SPELL_MISS_EVADE;
3753 }
3754
3755 // Try victim reflect spell
3756 if (CanReflect)
3757 {
3758 int32 reflectchance = victim->GetTotalAuraModifier(SPELL_AURA_REFLECT_SPELLS);
3760
3761 if (reflectchance > 0 && roll_chance_i(reflectchance))
3762 {
3763 // Start triggers for remove charges if need (trigger only for victim, and mark as active spell)
3764 //ProcSkillsAndAuras(victim, PROC_FLAG_NONE, PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG, PROC_EX_REFLECT, 1, BASE_ATTACK, spell);
3765 return SPELL_MISS_REFLECT;
3766 }
3767 }
3768
3769 switch (spellInfo->DmgClass)
3770 {
3773 return MeleeSpellHitResult(victim, spellInfo);
3775 {
3776 if (spellInfo->SpellFamilyName)
3777 {
3778 return SPELL_MISS_NONE;
3779 }
3780
3781 // Xinef: apply DAMAGE_CLASS_MAGIC conditions to damaging DAMAGE_CLASS_NONE spells
3782 for (uint8 i = EFFECT_0; i < MAX_SPELL_EFFECTS; ++i)
3783 {
3784 if (spellInfo->Effects[i].Effect && spellInfo->Effects[i].Effect != SPELL_EFFECT_SCHOOL_DAMAGE)
3785 {
3786 if (spellInfo->Effects[i].ApplyAuraName != SPELL_AURA_PERIODIC_DAMAGE)
3787 {
3788 return SPELL_MISS_NONE;
3789 }
3790 }
3791 }
3792 [[fallthrough]];
3793 }
3795 return MagicSpellHitResult(victim, spellInfo);
3796 }
3797
3798 return SPELL_MISS_NONE;
3799}
@ SPELL_EFFECT_DISPEL
Definition SharedDefines.h:804
@ SPELL_MISS_IMMUNE
Definition SharedDefines.h:1530
@ SPELL_MISS_EVADE
Definition SharedDefines.h:1529
@ SPELL_MISS_REFLECT
Definition SharedDefines.h:1534
@ SPELL_AURA_REFLECT_SPELLS_SCHOOL
Definition SpellAuraDefines.h:137
bool HasOnlyDamageEffects() const
Definition SpellInfo.cpp:926
bool HasEffect(SpellEffects effect) const
Definition SpellInfo.cpp:885
bool IsPositive() const
Definition SpellInfo.cpp:1269
uint32 DmgClass
Definition SpellInfo.h:413
SpellMissInfo MagicSpellHitResult(Unit *victim, SpellInfo const *spell)
Definition Unit.cpp:3511
SpellMissInfo MeleeSpellHitResult(Unit *victim, SpellInfo const *spell)
Definition Unit.cpp:3338

References SpellInfo::DmgClass, EFFECT_0, SpellInfo::Effects, SpellInfo::GetSchoolMask(), Spell::GetSpellInfo(), GetTotalAuraModifier(), GetTotalAuraModifierByMiscMask(), SpellInfo::HasAttribute(), SpellInfo::HasAura(), SpellInfo::HasEffect(), SpellInfo::HasOnlyDamageEffects(), Object::IsCreature(), Creature::IsEvadingAttacks(), IsHostileTo(), IsImmunedToDamage(), IsImmunedToSpell(), SpellInfo::IsPositive(), MagicSpellHitResult(), MAX_EFFECT_MASK, MAX_SPELL_EFFECTS, MeleeSpellHitResult(), roll_chance_i(), SPELL_ATTR0_CU_IGNORE_EVADE, SPELL_ATTR1_AURA_STAYS_AFTER_COMBAT, SPELL_AURA_CONTROL_VEHICLE, SPELL_AURA_PERIODIC_DAMAGE, SPELL_AURA_REFLECT_SPELLS, SPELL_AURA_REFLECT_SPELLS_SCHOOL, SPELL_DAMAGE_CLASS_MAGIC, SPELL_DAMAGE_CLASS_MELEE, SPELL_DAMAGE_CLASS_NONE, SPELL_DAMAGE_CLASS_RANGED, SPELL_EFFECT_DISPEL, SPELL_EFFECT_SCHOOL_DAMAGE, SPELL_MISS_EVADE, SPELL_MISS_IMMUNE, SPELL_MISS_NONE, SPELL_MISS_REFLECT, SpellInfo::SpellFamilyName, and Object::ToCreature().

◆ SpellHitResult() [2/2]

SpellMissInfo Unit::SpellHitResult ( Unit victim,
SpellInfo const *  spell,
bool  canReflect = false 
)
Todo:
: client not show miss log for this spells - so need find info for this in dbc and use it!
3654{
3655 if (spell->HasAttribute(SPELL_ATTR3_ALWAYS_HIT))
3656 return SPELL_MISS_NONE;
3657
3658 // Check for immune
3659 if (victim->IsImmunedToSpell(spell))
3660 return SPELL_MISS_IMMUNE;
3661
3662 // All positive spells can`t miss
3664 if ((spell->IsPositive() || spell->HasEffect(SPELL_EFFECT_DISPEL))
3665 && (!IsHostileTo(victim))) // prevent from affecting enemy by "positive" spell
3666 return SPELL_MISS_NONE;
3667
3668 if (this == victim)
3669 return SPELL_MISS_NONE;
3670
3671 // Return evade for units in evade mode
3672 if (victim->IsCreature() && victim->ToCreature()->IsEvadingAttacks() && !spell->HasAura(SPELL_AURA_CONTROL_VEHICLE)
3673 && !spell->HasAttribute(SPELL_ATTR0_CU_IGNORE_EVADE) && !spell->HasAttribute(SPELL_ATTR1_AURA_STAYS_AFTER_COMBAT))
3674 return SPELL_MISS_EVADE;
3675
3676 // Try victim reflect spell
3677 if (CanReflect)
3678 {
3679 int32 reflectchance = victim->GetTotalAuraModifier(SPELL_AURA_REFLECT_SPELLS);
3680 reflectchance += victim->GetTotalAuraModifierByMiscMask(SPELL_AURA_REFLECT_SPELLS_SCHOOL, spell->GetSchoolMask());
3681
3682 if (reflectchance > 0 && roll_chance_i(reflectchance))
3683 {
3684 // Start triggers for remove charges if need (trigger only for victim, and mark as active spell)
3685 //ProcSkillsAndAuras(victim, PROC_FLAG_NONE, PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG, PROC_EX_REFLECT, 1, BASE_ATTACK, spell);
3686 return SPELL_MISS_REFLECT;
3687 }
3688 }
3689
3690 switch (spell->DmgClass)
3691 {
3694 return MeleeSpellHitResult(victim, spell);
3696 {
3697 if (spell->SpellFamilyName)
3698 {
3699 return SPELL_MISS_NONE;
3700 }
3701 // Xinef: apply DAMAGE_CLASS_MAGIC conditions to damaging DAMAGE_CLASS_NONE spells
3702 for (uint8 i = EFFECT_0; i < MAX_SPELL_EFFECTS; ++i)
3703 if (spell->Effects[i].Effect && spell->Effects[i].Effect != SPELL_EFFECT_SCHOOL_DAMAGE)
3704 if (spell->Effects[i].ApplyAuraName != SPELL_AURA_PERIODIC_DAMAGE)
3705 return SPELL_MISS_NONE;
3706 [[fallthrough]];
3707 }
3709 return MagicSpellHitResult(victim, spell);
3710 }
3711 return SPELL_MISS_NONE;
3712}

References SpellInfo::DmgClass, EFFECT_0, SpellInfo::Effects, SpellInfo::GetSchoolMask(), GetTotalAuraModifier(), GetTotalAuraModifierByMiscMask(), SpellInfo::HasAttribute(), SpellInfo::HasAura(), SpellInfo::HasEffect(), Object::IsCreature(), Creature::IsEvadingAttacks(), IsHostileTo(), IsImmunedToSpell(), SpellInfo::IsPositive(), MagicSpellHitResult(), MAX_SPELL_EFFECTS, MeleeSpellHitResult(), roll_chance_i(), SPELL_ATTR0_CU_IGNORE_EVADE, SPELL_ATTR1_AURA_STAYS_AFTER_COMBAT, SPELL_ATTR3_ALWAYS_HIT, SPELL_AURA_CONTROL_VEHICLE, SPELL_AURA_PERIODIC_DAMAGE, SPELL_AURA_REFLECT_SPELLS, SPELL_AURA_REFLECT_SPELLS_SCHOOL, SPELL_DAMAGE_CLASS_MAGIC, SPELL_DAMAGE_CLASS_MELEE, SPELL_DAMAGE_CLASS_NONE, SPELL_DAMAGE_CLASS_RANGED, SPELL_EFFECT_DISPEL, SPELL_EFFECT_SCHOOL_DAMAGE, SPELL_MISS_EVADE, SPELL_MISS_IMMUNE, SPELL_MISS_NONE, SPELL_MISS_REFLECT, SpellInfo::SpellFamilyName, and Object::ToCreature().

Referenced by Spell::AddUnitTarget(), DealDamageShieldDamage(), AuraEffect::HandlePeriodicDamageAurasTick(), AuraEffect::HandlePeriodicHealthLeechAuraTick(), and AuraEffect::HandlePeriodicManaLeechAuraTick().

◆ SpellPctDamageModsDone()

float Unit::SpellPctDamageModsDone ( Unit victim,
SpellInfo const *  spellProto,
DamageEffectType  damagetype 
)
8402{
8403 if (!spellProto || !victim || damagetype == DIRECT_DAMAGE)
8404 return 1.0f;
8405
8406 // Some spells don't benefit from done mods
8407 if (spellProto->HasAttribute(SPELL_ATTR3_IGNORE_CASTER_MODIFIERS))
8408 return 1.0f;
8409
8410 // For totems get damage bonus from owner
8411 if (IsCreature())
8412 {
8413 if (IsTotem())
8414 {
8415 if (Unit* owner = GetOwner())
8416 return owner->SpellPctDamageModsDone(victim, spellProto, damagetype);
8417 }
8418 // Dancing Rune Weapon...
8419 else if (GetEntry() == 27893)
8420 {
8421 if (Unit* owner = GetOwner())
8422 return owner->SpellPctDamageModsDone(victim, spellProto, damagetype);
8423 }
8424 }
8425
8426 // Done total percent damage auras
8427 float DoneTotalMod = 1.0f;
8428
8429 DoneTotalMod *= GetTotalAuraMultiplier(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, [spellProto, this, damagetype](AuraEffect const* aurEff)
8430 {
8431 // prevent apply mods from weapon specific case to non weapon specific spells (Example: thunder clap and two-handed weapon specialization)
8432 if (spellProto->EquippedItemClass == -1 && aurEff->GetSpellInfo()->EquippedItemClass != -1 &&
8434 {
8435 return false;
8436 }
8437
8438 if (!spellProto->ValidateAttribute6SpellDamageMods(this, aurEff, damagetype == DOT))
8439 return false;
8440
8441 if (aurEff->GetMiscValue() & spellProto->GetSchoolMask())
8442 {
8443 if (aurEff->GetSpellInfo()->EquippedItemClass == -1)
8444 return true;
8446 return true;
8447 else if (ToPlayer() && ToPlayer()->HasItemFitToSpellRequirements(aurEff->GetSpellInfo()))
8448 return true;
8449 }
8450 return false;
8451 });
8452
8453 uint32 creatureTypeMask = victim->GetCreatureTypeMask();
8454 DoneTotalMod *= GetTotalAuraMultiplier(SPELL_AURA_MOD_DAMAGE_DONE_VERSUS, [creatureTypeMask, spellProto, damagetype, this](AuraEffect const* aurEff)
8455 {
8456 return creatureTypeMask & aurEff->GetMiscValue() && spellProto->ValidateAttribute6SpellDamageMods(this, aurEff, damagetype == DOT);
8457 });
8458
8459 // bonus against aurastate
8460 DoneTotalMod *= GetTotalAuraMultiplier(SPELL_AURA_MOD_DAMAGE_DONE_VERSUS_AURASTATE, [victim, spellProto, damagetype, this](AuraEffect const* aurEff)
8461 {
8462 return victim->HasAuraState(AuraStateType(aurEff->GetMiscValue())) && spellProto->ValidateAttribute6SpellDamageMods(this, aurEff, damagetype == DOT);
8463 });
8464
8465 // done scripted mod (take it from owner)
8466 Unit* owner = GetOwner() ? GetOwner() : this;
8467 AuraEffectList const& mOverrideClassScript = owner->GetAuraEffectsByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS);
8468 for (AuraEffectList::const_iterator i = mOverrideClassScript.begin(); i != mOverrideClassScript.end(); ++i)
8469 {
8470 // Xinef: self cast is ommited (because of Rage of Rivendare)
8471 if (!spellProto->ValidateAttribute6SpellDamageMods(this, *i, damagetype == DOT))
8472 continue;
8473
8474 // xinef: Molten Fury should work on all spells
8475 switch ((*i)->GetMiscValue())
8476 {
8477 case 4920: // Molten Fury
8478 case 4919:
8479 if (victim->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, spellProto, this))
8480 AddPct(DoneTotalMod, (*i)->GetAmount());
8481 break;
8482 }
8483
8484 if (!(*i)->IsAffectedOnSpell(spellProto))
8485 continue;
8486
8487 switch ((*i)->GetMiscValue())
8488 {
8489 case 6917: // Death's Embrace
8490 case 6926:
8491 case 6928:
8492 {
8493 if (victim->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, spellProto, this))
8494 AddPct(DoneTotalMod, (*i)->GetAmount());
8495 break;
8496 }
8497 // Soul Siphon
8498 case 4992:
8499 case 4993:
8500 {
8501 // effect 1 m_amount
8502 int32 maxPercent = (*i)->GetAmount();
8503 // effect 0 m_amount
8504 int32 stepPercent = CalculateSpellDamage(this, (*i)->GetSpellInfo(), 0);
8505 // count affliction effects and calc additional damage in percentage
8506 int32 modPercent = 0;
8507 AuraApplicationMap const& victimAuras = victim->GetAppliedAuras();
8508 for (AuraApplicationMap::const_iterator itr = victimAuras.begin(); itr != victimAuras.end(); ++itr)
8509 {
8510 Aura const* aura = itr->second->GetBase();
8511 SpellInfo const* m_spell = aura->GetSpellInfo();
8512 if (m_spell->SpellFamilyName != SPELLFAMILY_WARLOCK || !(m_spell->SpellFamilyFlags[1] & 0x0004071B || m_spell->SpellFamilyFlags[0] & 0x8044C402))
8513 continue;
8514 modPercent += stepPercent * aura->GetStackAmount();
8515 if (modPercent >= maxPercent)
8516 {
8517 modPercent = maxPercent;
8518 break;
8519 }
8520 }
8521 AddPct(DoneTotalMod, modPercent);
8522 break;
8523 }
8524 case 6916: // Death's Embrace
8525 case 6925:
8526 case 6927:
8527 if (HasAuraState(AURA_STATE_HEALTHLESS_20_PERCENT, spellProto, this))
8528 AddPct(DoneTotalMod, (*i)->GetAmount());
8529 break;
8530 case 5481: // Starfire Bonus
8531 {
8532 if (victim->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_DRUID, 0x200002, 0, 0))
8533 AddPct(DoneTotalMod, (*i)->GetAmount());
8534 break;
8535 }
8536 // Tundra Stalker
8537 // Merciless Combat
8538 case 7277:
8539 {
8540 // Merciless Combat
8541 if ((*i)->GetSpellInfo()->SpellIconID == 2656)
8542 {
8543 if ((spellProto && spellProto->SpellFamilyFlags[0] & 0x2) || spellProto->SpellFamilyFlags[1] & 0x2 )
8544 if (!victim->HealthAbovePct(35))
8545 AddPct(DoneTotalMod, (*i)->GetAmount());
8546 }
8547 // Tundra Stalker
8548 else
8549 {
8550 // Frost Fever (target debuff)
8551 if (victim->HasAura(55095))
8552 AddPct(DoneTotalMod, (*i)->GetAmount());
8553 break;
8554 }
8555 break;
8556 }
8557 // Rage of Rivendare
8558 case 7293:
8559 {
8561 AddPct(DoneTotalMod, (*i)->GetSpellInfo()->GetRank() * 2.0f);
8562 break;
8563 }
8564 // Twisted Faith
8565 case 7377:
8566 {
8568 AddPct(DoneTotalMod, (*i)->GetAmount());
8569 break;
8570 }
8571 // Marked for Death
8572 case 7598:
8573 case 7599:
8574 case 7600:
8575 case 7601:
8576 case 7602:
8577 {
8578 if (victim->GetAuraEffect(SPELL_AURA_MOD_STALKED, SPELLFAMILY_HUNTER, 0x400, 0, 0))
8579 AddPct(DoneTotalMod, (*i)->GetAmount());
8580 break;
8581 }
8582 // Dirty Deeds
8583 case 6427:
8584 case 6428:
8585 case 6579:
8586 case 6580:
8587 {
8588 if (victim->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, spellProto, this))
8589 {
8590 // effect 0 has expected value but in negative state
8591 int32 bonus = -(*i)->GetBase()->GetEffect(0)->GetAmount();
8592 AddPct(DoneTotalMod, bonus);
8593 }
8594 break;
8595 }
8596 }
8597 }
8598
8599 // Custom scripted damage
8600 switch (spellProto->SpellFamilyName)
8601 {
8602 case SPELLFAMILY_MAGE:
8603 // Ice Lance
8604 if (spellProto->SpellIconID == 186)
8605 {
8606 if (victim->HasAuraState(AURA_STATE_FROZEN, spellProto, this))
8607 {
8608 // Glyph of Ice Lance
8609 if (owner->HasAura(56377) && victim->GetLevel() > owner->GetLevel())
8610 DoneTotalMod *= 4.0f;
8611 else
8612 DoneTotalMod *= 3.0f;
8613 }
8614 }
8615
8616 // Torment the weak
8617 if (spellProto->SpellFamilyFlags[0] & 0x20600021 || spellProto->SpellFamilyFlags[1] & 0x9000)
8618 if (victim->HasAuraWithMechanic((1ULL << MECHANIC_SNARE) | (1ULL << MECHANIC_SLOW_ATTACK)))
8620 AddPct(DoneTotalMod, aurEff->GetAmount());
8621 break;
8622 case SPELLFAMILY_PRIEST:
8623 // Mind Flay
8624 if (spellProto->SpellFamilyFlags[0] & 0x800000)
8625 {
8626 // Glyph of Shadow Word: Pain
8627 if (AuraEffect* aurEff = GetAuraEffect(55687, 0))
8628 // Increase Mind Flay damage if Shadow Word: Pain present on target
8630 AddPct(DoneTotalMod, aurEff->GetAmount());
8631
8632 // Twisted Faith - Mind Flay part
8634 // Increase Mind Flay damage if Shadow Word: Pain present on target
8636 AddPct(DoneTotalMod, aurEff->GetAmount());
8637 }
8638 // Smite
8639 else if (spellProto->SpellFamilyFlags[0] & 0x80)
8640 {
8641 // Glyph of Smite
8642 if (AuraEffect* aurEff = GetAuraEffect(55692, 0))
8643 if (victim->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_PRIEST, 0x100000, 0, 0, GetGUID()))
8644 AddPct(DoneTotalMod, aurEff->GetAmount());
8645 }
8646 // Shadow Word: Death
8647 else if (spellProto->SpellFamilyFlags[1] & 0x2)
8648 {
8649 // Glyph of Shadow Word: Death
8650 if (AuraEffect* aurEff = GetAuraEffect(55682, 1))
8652 AddPct(DoneTotalMod, aurEff->GetAmount());
8653 }
8654
8655 break;
8657 // Judgement of Vengeance/Judgement of Corruption
8658 if ((spellProto->SpellFamilyFlags[1] & 0x400000) && spellProto->SpellIconID == 2292)
8659 {
8660 // Get stack of Holy Vengeance/Blood Corruption on the target added by caster
8661 uint32 stacks = 0;
8663 for (Unit::AuraEffectList::const_iterator itr = auras.begin(); itr != auras.end(); ++itr)
8664 if (((*itr)->GetId() == 31803 || (*itr)->GetId() == 53742) && (*itr)->GetCasterGUID() == GetGUID())
8665 {
8666 stacks = (*itr)->GetBase()->GetStackAmount();
8667 break;
8668 }
8669 // + 10% for each application of Holy Vengeance/Blood Corruption on the target
8670 if (stacks)
8671 AddPct(DoneTotalMod, 10 * stacks);
8672 }
8673 break;
8674 case SPELLFAMILY_DRUID:
8675 // Thorns
8676 if (spellProto->SpellFamilyFlags[0] & 0x100)
8677 {
8678 // Brambles
8679 if (AuraEffect* aurEff = GetAuraEffectOfRankedSpell(16836, 0))
8680 AddPct(DoneTotalMod, aurEff->GetAmount());
8681 }
8682 break;
8684 // Fire and Brimstone
8685 if (spellProto->SpellFamilyFlags[1] & 0x00020040)
8687 {
8689 for (AuraEffectList::const_iterator i = mDumyAuras.begin(); i != mDumyAuras.end(); ++i)
8690 if ((*i)->GetSpellInfo()->SpellIconID == 3173)
8691 {
8692 AddPct(DoneTotalMod, (*i)->GetAmount());
8693 break;
8694 }
8695 }
8696 // Drain Soul - increased damage for targets under 25 % HP
8697 if (spellProto->SpellFamilyFlags[0] & 0x00004000)
8698 if (!victim->HealthAbovePct(25))
8699 DoneTotalMod *= 4;
8700 // Shadow Bite (15% increase from each dot)
8701 if (spellProto->SpellFamilyFlags[1] & 0x00400000 && IsPet())
8702 if (uint8 count = victim->GetDoTsByCaster(GetOwnerGUID()))
8703 AddPct(DoneTotalMod, 15 * count);
8704 break;
8705 case SPELLFAMILY_HUNTER:
8706 // Steady Shot
8707 if (spellProto->SpellFamilyFlags[1] & 0x1)
8708 if (AuraEffect* aurEff = GetAuraEffect(56826, 0)) // Glyph of Steady Shot
8709 if (victim->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_HUNTER, 0x00004000, 0, 0, GetGUID()))
8710 AddPct(DoneTotalMod, aurEff->GetAmount());
8711 break;
8713 // Improved Icy Touch
8714 if (spellProto->SpellFamilyFlags[0] & 0x2)
8716 AddPct(DoneTotalMod, aurEff->GetAmount());
8717
8718 // Glacier Rot
8719 if (spellProto->SpellFamilyFlags[0] & 0x2 || spellProto->SpellFamilyFlags[1] & 0x6)
8721 if (victim->GetDiseasesByCaster(owner->GetGUID()) > 0)
8722 AddPct(DoneTotalMod, aurEff->GetAmount());
8723 break;
8724 }
8725
8726 return DoneTotalMod;
8727}
@ SPELL_ATTR5_AURA_AFFECTS_NOT_JUST_REQ_EQUIPPED_ITEM
Definition SharedDefines.h:571
@ MECHANIC_SLOW_ATTACK
Definition SharedDefines.h:1321
@ SPELLFAMILY_WARLOCK
Definition SharedDefines.h:3789
@ SPELLFAMILY_MAGE
Definition SharedDefines.h:3787
@ SPELLFAMILY_GENERIC
Definition SharedDefines.h:3784
@ AURA_STATE_HEALTHLESS_20_PERCENT
Definition SharedDefines.h:1281
@ AURA_STATE_CONFLAGRATE
Definition SharedDefines.h:1294
int32 EquippedItemSubClassMask
Definition SpellInfo.h:400
bool HealthAbovePct(int32 pct) const
Definition Unit.h:1118
int32 CalculateSpellDamage(Unit const *target, SpellInfo const *spellProto, uint8 effect_index, int32 const *basePoints=nullptr) const
Definition Unit.cpp:11599
std::multimap< uint32, AuraApplication * > AuraApplicationMap
Definition Unit.h:673
uint32 GetDiseasesByCaster(ObjectGuid casterGUID, uint8 mode=0)
Definition Unit.cpp:6133
uint32 GetDoTsByCaster(ObjectGuid casterGUID) const
Definition Unit.cpp:6187
bool HasAuraWithMechanic(uint64 mechanicMask) const
Definition Unit.cpp:6104

References AddPct(), AURA_STATE_CONFLAGRATE, AURA_STATE_FROZEN, AURA_STATE_HEALTHLESS_20_PERCENT, AURA_STATE_HEALTHLESS_35_PERCENT, CalculateSpellDamage(), DIRECT_DAMAGE, DOT, EFFECT_0, SpellInfo::EquippedItemClass, SpellInfo::EquippedItemSubClassMask, AuraEffect::GetAmount(), GetAppliedAuras(), GetAuraEffect(), GetAuraEffectOfRankedSpell(), GetAuraEffectsByType(), GetCreatureTypeMask(), GetDiseasesByCaster(), GetDoTsByCaster(), GetDummyAuraEffect(), Object::GetEntry(), Object::GetGUID(), GetLevel(), AuraEffect::GetMiscValue(), GetOwner(), GetOwnerGUID(), SpellInfo::GetSchoolMask(), AuraEffect::GetSpellInfo(), Aura::GetSpellInfo(), Aura::GetStackAmount(), GetTotalAuraMultiplier(), SpellInfo::HasAttribute(), HasAura(), HasAuraState(), HasAuraWithMechanic(), HealthAbovePct(), Object::IsCreature(), IsPet(), IsTotem(), MECHANIC_SLOW_ATTACK, MECHANIC_SNARE, SPELL_ATTR3_IGNORE_CASTER_MODIFIERS, SPELL_ATTR5_AURA_AFFECTS_NOT_JUST_REQ_EQUIPPED_ITEM, SPELL_AURA_DUMMY, SPELL_AURA_MOD_DAMAGE_DONE_VERSUS, SPELL_AURA_MOD_DAMAGE_DONE_VERSUS_AURASTATE, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, SPELL_AURA_MOD_STALKED, SPELL_AURA_OVERRIDE_CLASS_SCRIPTS, SPELL_AURA_PERIODIC_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, SPELLFAMILY_DEATHKNIGHT, SPELLFAMILY_DRUID, SPELLFAMILY_GENERIC, SPELLFAMILY_HUNTER, SPELLFAMILY_MAGE, SPELLFAMILY_PALADIN, SPELLFAMILY_PRIEST, SPELLFAMILY_WARLOCK, SpellInfo::SpellFamilyFlags, SpellInfo::SpellFamilyName, SpellInfo::SpellIconID, Object::ToPlayer(), and SpellInfo::ValidateAttribute6SpellDamageMods().

Referenced by AuraEffect::CalculatePeriodicData(), and SpellDamageBonusDone().

◆ SpellPctHealingModsDone()

float Unit::SpellPctHealingModsDone ( Unit victim,
SpellInfo const *  spellProto,
DamageEffectType  damagetype,
bool  includeHealingDonePct = true 
)
9463{
9464 // For totems get healing bonus from owner (statue isn't totem in fact)
9465 if (IsCreature() && IsTotem())
9466 if (Unit* owner = GetOwner())
9467 return owner->SpellPctHealingModsDone(victim, spellProto, damagetype, includeHealingDonePct);
9468
9469 // Some spells don't benefit from done mods
9470 if (spellProto->HasAttribute(SPELL_ATTR3_IGNORE_CASTER_MODIFIERS))
9471 return 1.0f;
9472
9473 // xinef: Some spells don't benefit from done mods
9474 if (spellProto->HasAttribute(SPELL_ATTR6_IGNORE_HEALTH_MODIFIERS))
9475 return 1.0f;
9476
9477 // No bonus healing for potion spells
9478 if (spellProto->SpellFamilyName == SPELLFAMILY_POTION)
9479 return 1.0f;
9480
9481 float DoneTotalMod = 1.0f;
9482
9483 // Healing done percent
9484 if (includeHealingDonePct)
9486
9487 // done scripted mod (take it from owner)
9488 Unit* owner = GetOwner() ? GetOwner() : this;
9489 AuraEffectList const& mOverrideClassScript = owner->GetAuraEffectsByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS);
9490 for (AuraEffectList::const_iterator i = mOverrideClassScript.begin(); i != mOverrideClassScript.end(); ++i)
9491 {
9492 if (!(*i)->IsAffectedOnSpell(spellProto))
9493 continue;
9494
9495 switch ((*i)->GetMiscValue())
9496 {
9497 case 21: // Test of Faith
9498 case 6935:
9499 case 6918:
9500 if (victim->HealthBelowPct(50))
9501 AddPct(DoneTotalMod, (*i)->GetAmount());
9502 break;
9503 case 7798: // Glyph of Regrowth
9504 {
9506 AddPct(DoneTotalMod, (*i)->GetAmount());
9507 break;
9508 }
9509
9510 case 7871: // Glyph of Lesser Healing Wave
9511 {
9512 // xinef: affected by any earth shield
9513 if (victim->GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_SHAMAN, 0, 0x00000400, 0))
9514 AddPct(DoneTotalMod, (*i)->GetAmount());
9515 break;
9516 }
9517 default:
9518 break;
9519 }
9520 }
9521
9522 switch (spellProto->SpellFamilyName)
9523 {
9525 // Talents and glyphs for healing stream totem
9526 if (spellProto->Id == 52042)
9527 {
9528 // Glyph of Healing Stream Totem
9529 if (AuraEffect* dummy = owner->GetAuraEffect(55456, EFFECT_0))
9530 AddPct(DoneTotalMod, dummy->GetAmount());
9531
9532 // Healing Stream totem - Restorative Totems
9533 if (AuraEffect* aurEff = GetDummyAuraEffect(SPELLFAMILY_SHAMAN, 338, 1))
9534 AddPct(DoneTotalMod, aurEff->GetAmount());
9535 }
9536 break;
9537 case SPELLFAMILY_PRIEST:
9538 // T9 HEALING 4P, empowered renew instant heal
9539 if (spellProto->Id == 63544)
9540 if (AuraEffect* aurEff = GetAuraEffect(67202, EFFECT_0))
9541 AddPct(DoneTotalMod, aurEff->GetAmount());
9542 break;
9543 }
9544
9545 return DoneTotalMod;
9546}
@ SPELLFAMILY_SHAMAN
Definition SharedDefines.h:3795
@ SPELL_AURA_MOD_HEALING_DONE_PERCENT
Definition SpellAuraDefines.h:199

References AddPct(), EFFECT_0, GetAuraEffect(), GetAuraEffectsByType(), GetDummyAuraEffect(), GetOwner(), GetTotalAuraMultiplier(), SpellInfo::HasAttribute(), HealthBelowPct(), SpellInfo::Id, Object::IsCreature(), IsTotem(), SPELL_ATTR3_IGNORE_CASTER_MODIFIERS, SPELL_ATTR6_IGNORE_HEALTH_MODIFIERS, SPELL_AURA_DUMMY, SPELL_AURA_MOD_HEALING_DONE_PERCENT, SPELL_AURA_OVERRIDE_CLASS_SCRIPTS, SPELL_AURA_PERIODIC_HEAL, SPELLFAMILY_DRUID, SPELLFAMILY_GENERIC, SPELLFAMILY_POTION, SPELLFAMILY_PRIEST, SPELLFAMILY_SHAMAN, and SpellInfo::SpellFamilyName.

Referenced by AuraEffect::CalculatePeriodicData(), and SpellHealingBonusDone().

◆ SpellTakenCritChance()

float Unit::SpellTakenCritChance ( Unit const *  caster,
SpellInfo const *  spellProto,
SpellSchoolMask  schoolMask,
float  doneChance,
WeaponAttackType  attackType,
bool  skipEffectCheck 
) const
Todo:
: Not sure whether the fallthrough was a mistake (forgetting a break) or intended. This should be double-checked.
9176{
9177 // not critting spell
9178 if (spellProto->HasAttribute(SPELL_ATTR2_CANT_CRIT))
9179 return 0.0f;
9180
9181 // Xinef: check if spell is capable of critting, auras requires special aura to crit so they can be skipped
9182 if (!skipEffectCheck && !spellProto->IsCritCapable())
9183 return 0.0f;
9184
9185 float crit_chance = doneChance;
9186 switch (spellProto->DmgClass)
9187 {
9189 {
9190 if (!spellProto->IsPositive())
9191 {
9192 // Modify critical chance by victim SPELL_AURA_MOD_ATTACKER_SPELL_CRIT_CHANCE
9193 // xinef: apply max and min only
9195 {
9198 }
9199
9200 Unit::ApplyResilience(this, &crit_chance, nullptr, false, CR_CRIT_TAKEN_SPELL);
9201 }
9202 // scripted (increase crit chance ... against ... target by x%
9203 if (caster)
9204 {
9205 AuraEffectList const& mOverrideClassScript = caster->GetAuraEffectsByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS);
9206 for (AuraEffectList::const_iterator i = mOverrideClassScript.begin(); i != mOverrideClassScript.end(); ++i)
9207 {
9208 if (!((*i)->IsAffectedOnSpell(spellProto)))
9209 continue;
9210 int32 modChance = 0;
9211 switch ((*i)->GetMiscValue())
9212 {
9213 // Shatter
9214 case 911:
9215 modChance += 16;
9216 [[fallthrough]];
9217 case 910:
9218 modChance += 17;
9219 [[fallthrough]];
9220 case 849:
9221 modChance += 17;
9222 if (!HasAuraState(AURA_STATE_FROZEN, spellProto, caster))
9223 break;
9224 crit_chance += modChance;
9225 break;
9226 case 7917: // Glyph of Shadowburn
9227 if (HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, spellProto, caster))
9228 crit_chance += (*i)->GetAmount();
9229 break;
9230 case 7997: // Renewed Hope
9231 case 7998:
9232 if (HasAura(6788))
9233 crit_chance += (*i)->GetAmount();
9234 break;
9235 default:
9236 break;
9237 }
9238 }
9239 // Custom crit by class
9240 switch (spellProto->SpellFamilyName)
9241 {
9242 case SPELLFAMILY_MAGE:
9243 // Glyph of Fire Blast
9244 if (spellProto->SpellFamilyFlags[0] == 0x2 && spellProto->SpellIconID == 12)
9245 if (HasAuraWithMechanic((1ULL << MECHANIC_STUN) | (1ULL << MECHANIC_KNOCKOUT)))
9246 if (AuraEffect const* aurEff = caster->GetAuraEffect(56369, EFFECT_0))
9247 crit_chance += aurEff->GetAmount();
9248 break;
9249 case SPELLFAMILY_DRUID:
9250 // Improved Faerie Fire
9252 if (AuraEffect const* aurEff = caster->GetDummyAuraEffect(SPELLFAMILY_DRUID, 109, 0))
9253 crit_chance += aurEff->GetAmount();
9254
9255 // cumulative effect - don't break
9256
9257 // Starfire
9258 if (spellProto->SpellFamilyFlags[0] & 0x4 && spellProto->SpellIconID == 1485)
9259 {
9260 // Improved Insect Swarm
9261 if (AuraEffect const* aurEff = caster->GetDummyAuraEffect(SPELLFAMILY_DRUID, 1771, 0))
9263 crit_chance += aurEff->GetAmount();
9264 break;
9265 }
9266 break;
9267 case SPELLFAMILY_ROGUE:
9268 // Shiv-applied poisons can't crit
9269 if (caster->FindCurrentSpellBySpellId(5938))
9270 crit_chance = 0.0f;
9271 break;
9273 // Flash of light
9274 if (spellProto->SpellFamilyFlags[0] & 0x40000000)
9275 {
9276 // Sacred Shield
9277 if (AuraEffect const* aura = GetAuraEffect(58597, 1, GetGUID()))
9278 crit_chance += aura->GetAmount();
9279 break;
9280 }
9281 // Exorcism
9282 else if (spellProto->GetCategory() == 19)
9283 {
9285 return 100.0f;
9286 break;
9287 }
9288 break;
9289 case SPELLFAMILY_SHAMAN:
9290 // Lava Burst
9291 if (spellProto->SpellFamilyFlags[1] & 0x00001000)
9292 {
9293 if (GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_SHAMAN, 0x10000000, 0, 0, caster->GetGUID()))
9295 return 100.0f;
9296 break;
9297 }
9298 break;
9299 }
9300 }
9301 break;
9302 }
9304 // Custom crit by class
9305 if (caster)
9306 {
9307 switch (spellProto->SpellFamilyName)
9308 {
9309 case SPELLFAMILY_DRUID:
9310 // Rend and Tear - bonus crit chance for Ferocious Bite on bleeding targets
9311 if (spellProto->SpellFamilyFlags[0] & 0x00800000 && spellProto->SpellIconID == 1680 && HasAuraState(AURA_STATE_BLEEDING))
9312 {
9313 if (AuraEffect const* rendAndTear = caster->GetDummyAuraEffect(SPELLFAMILY_DRUID, 2859, 1))
9314 crit_chance += rendAndTear->GetAmount();
9315 break;
9316 }
9317 break;
9319 // Victory Rush
9320 if (spellProto->SpellFamilyFlags[1] & 0x100)
9321 {
9322 // Glyph of Victory Rush
9323 if (AuraEffect const* aurEff = caster->GetAuraEffect(58382, 0))
9324 crit_chance += aurEff->GetAmount();
9325 break;
9326 }
9327 break;
9328 }
9329 }
9330
9331 // 100% critical chance against sitting target
9333 {
9334 return 100.0f;
9335 }
9336 [[fallthrough]];
9338 {
9339 // flat aura mods
9340 if (attackType == RANGED_ATTACK)
9342 else
9344
9345 // reduce crit chance from Rating for players
9346 if (attackType != RANGED_ATTACK)
9347 {
9348 // xinef: little hack, crit chance dont require caster to calculate, pass victim
9349 Unit::ApplyResilience(this, &crit_chance, nullptr, false, CR_CRIT_TAKEN_MELEE);
9350 }
9351 else
9352 Unit::ApplyResilience(this, &crit_chance, nullptr, false, CR_CRIT_TAKEN_RANGED);
9353
9354 // Apply crit chance from defence skill
9355 if (caster)
9356 crit_chance += (int32(caster->GetMaxSkillValueForLevel(this)) - int32(GetDefenseSkillValue(caster))) * 0.04f;
9357
9358 break;
9359 }
9360 // values overridden in spellmgr for lifebloom and earth shield
9362 default:
9363 return 0.0f;
9364 }
9365
9366 if (caster)
9367 {
9368 crit_chance += GetTotalAuraModifier(SPELL_AURA_MOD_CRIT_CHANCE_FOR_CASTER, [caster](AuraEffect const* aurEff)
9369 {
9370 return caster->GetGUID() == aurEff->GetCasterGUID();
9371 });
9372 }
9373
9374 // Modify critical chance by victim SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE
9375 // xinef: should be calculated at the end
9376 if (!spellProto->IsPositive())
9378
9379 // xinef: can be negative!
9380 return crit_chance;
9381}
uint32 const CREATURE_TYPEMASK_DEMON_OR_UNDEAD
Definition SharedDefines.h:2637
@ MECHANIC_KNOCKOUT
Definition SharedDefines.h:1327
@ MECHANIC_STUN
Definition SharedDefines.h:1325
@ SPELLFAMILY_ROGUE
Definition SharedDefines.h:3792
@ AURA_STATE_BLEEDING
Definition SharedDefines.h:1298
@ AURA_STATE_FAERIE_FIRE
Definition SharedDefines.h:1292
bool HasAttackerSpellCritChanceAura() const
Definition Unit.h:1833
int32 GetMaxNegativeAuraModifierByMiscMask(AuraType auratype, uint32 misc_mask) const
Definition Unit.cpp:6346

References ApplyResilience(), AURA_STATE_BLEEDING, AURA_STATE_FAERIE_FIRE, AURA_STATE_FROZEN, AURA_STATE_HEALTHLESS_35_PERCENT, CR_CRIT_TAKEN_MELEE, CR_CRIT_TAKEN_RANGED, CR_CRIT_TAKEN_SPELL, CREATURE_TYPEMASK_DEMON_OR_UNDEAD, SpellInfo::DmgClass, EFFECT_0, FindCurrentSpellBySpellId(), GetAuraEffect(), GetAuraEffectsByType(), AuraEffect::GetCasterGUID(), SpellInfo::GetCategory(), GetCreatureTypeMask(), GetDefenseSkillValue(), GetDummyAuraEffect(), Object::GetGUID(), Object::GetGUID(), GetMaxNegativeAuraModifierByMiscMask(), GetMaxPositiveAuraModifierByMiscMask(), GetMaxSkillValueForLevel(), getStandState(), GetTotalAuraModifier(), HasAttackerSpellCritChanceAura(), SpellInfo::HasAttribute(), HasAura(), HasAuraState(), HasAuraWithMechanic(), SpellInfo::IsCritCapable(), Object::IsPlayer(), SpellInfo::IsPositive(), IsSitState(), MECHANIC_KNOCKOUT, MECHANIC_STUN, RANGED_ATTACK, SPELL_ATTR2_CANT_CRIT, SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_CHANCE, SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_CHANCE, SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE, SPELL_AURA_MOD_ATTACKER_SPELL_CRIT_CHANCE, SPELL_AURA_MOD_CRIT_CHANCE_FOR_CASTER, SPELL_AURA_OVERRIDE_CLASS_SCRIPTS, SPELL_AURA_PERIODIC_DAMAGE, SPELL_DAMAGE_CLASS_MAGIC, SPELL_DAMAGE_CLASS_MELEE, SPELL_DAMAGE_CLASS_NONE, SPELL_DAMAGE_CLASS_RANGED, SPELLFAMILY_DRUID, SPELLFAMILY_MAGE, SPELLFAMILY_PALADIN, SPELLFAMILY_ROGUE, SPELLFAMILY_SHAMAN, SPELLFAMILY_WARRIOR, SpellInfo::SpellFamilyFlags, SpellInfo::SpellFamilyName, SpellInfo::SpellIconID, and UNIT_STAND_STATE_SLEEP.

Referenced by AuraEffect::CalcPeriodicCritChance(), and Spell::DoAllEffectOnLaunchTarget().

◆ StartReactiveTimer()

void Unit::StartReactiveTimer ( ReactiveType  reactive)
inline
#define REACTIVE_TIMER_START
Definition Unit.h:615

References m_reactiveTimer, and REACTIVE_TIMER_START.

Referenced by ProcSkillsAndReactives().

◆ StopAttackFaction()

void Unit::StopAttackFaction ( uint32  faction_id)
16098{
16099 if (Unit* victim = GetVictim())
16100 {
16101 if (victim->GetFactionTemplateEntry()->faction == faction_id)
16102 {
16103 AttackStop();
16104 if (IsNonMeleeSpellCast(false))
16106
16107 // melee and ranged forced attack cancel
16108 if (IsPlayer())
16110 }
16111 }
16112
16113 AttackerSet const& attackers = getAttackers();
16114 for (AttackerSet::const_iterator itr = attackers.begin(); itr != attackers.end();)
16115 {
16116 if ((*itr)->GetFactionTemplateEntry()->faction == faction_id)
16117 {
16118 (*itr)->AttackStop();
16119 itr = attackers.begin();
16120 }
16121 else
16122 ++itr;
16123 }
16124
16125 // End combat and threat references with creatures in this faction
16126 std::vector<CombatReference*> refsToEnd;
16127 for (auto const& pair : m_combatManager.GetPvECombatRefs())
16128 if (pair.second->GetOther(this)->GetFactionTemplateEntry()->faction == faction_id)
16129 refsToEnd.push_back(pair.second);
16130 for (CombatReference* ref : refsToEnd)
16131 ref->EndCombat();
16132
16133 for (ControlSet::const_iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr)
16134 (*itr)->StopAttackFaction(faction_id);
16135}

References AttackStop(), getAttackers(), CombatManager::GetPvECombatRefs(), GetVictim(), InterruptNonMeleeSpells(), IsNonMeleeSpellCast(), Object::IsPlayer(), m_combatManager, m_Controlled, Player::SendAttackSwingCancelAttack(), and Object::ToPlayer().

Referenced by AuraEffect::HandleForceReaction().

◆ StopAttackingInvalidTarget()

void Unit::StopAttackingInvalidTarget ( )
16138{
16139 AttackerSet const& attackers = getAttackers();
16140 for (AttackerSet::const_iterator itr = attackers.begin(); itr != attackers.end();)
16141 {
16142 Unit* attacker = (*itr);
16143 if (!attacker->IsValidAttackTarget(this))
16144 {
16145 attacker->AttackStop();
16146 if (attacker->IsPlayer())
16147 {
16149 }
16150
16151 for (Unit* controlled : attacker->m_Controlled)
16152 {
16153 if (controlled->GetVictim() == this && !controlled->IsValidAttackTarget(this))
16154 {
16155 controlled->AttackStop();
16156 }
16157 }
16158
16159 itr = attackers.begin();
16160 }
16161 else
16162 {
16163 ++itr;
16164 }
16165 }
16166}

References AttackStop(), getAttackers(), Object::IsPlayer(), IsValidAttackTarget(), m_Controlled, Player::SendAttackSwingCancelAttack(), and Object::ToPlayer().

Referenced by RemoveCharmedBy(), and SetCharmedBy().

◆ StopMoving()

void Unit::StopMoving ( )
13039{
13041
13042 // not need send any packets if not in world or not moving
13043 if (!IsInWorld())
13044 return;
13045
13046 if (movespline->Finalized())
13047 return;
13048
13049 // Update position now since Stop does not start a new movement that can be updated later
13050 if (movespline->HasStarted())
13052
13053 Movement::MoveSplineInit init(this);
13054 init.Stop();
13055}
bool HasStarted() const
Definition MoveSpline.h:132
void UpdateSplinePosition()
Definition Unit.cpp:727

References ClearUnitState(), Movement::MoveSpline::Finalized(), Movement::MoveSpline::HasStarted(), Object::IsInWorld(), movespline, Movement::MoveSplineInit::Stop(), UNIT_STATE_MOVING, and UpdateSplinePosition().

Referenced by npc_escortAI::AttackStart(), SmartAI::AttackStart(), boss_alar::ConstructWaypointsAndMove(), boss_baron_geddon::DamageTaken(), boss_grand_champion::boss_grand_championAI::DamageTaken(), npc_ulduar_aerial_command_unit::DamageTaken(), boss_ingvar_the_plunderer::DamageTaken(), npc_vrykul_skeleton::DamageTaken(), npc_blistering_zombie::npc_blistering_zombieAI::DamageTaken(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::DoAction(), npc_kinetic_bomb::npc_kinetic_bombAI::DoAction(), npc_spinestalker::npc_spinestalkerAI::DoAction(), npc_rimefang::npc_rimefangAI::DoAction(), ScriptedAI::DoCastSpell(), FlightPathMovementGenerator::DoFinalize(), FleeingMovementGenerator< T >::DoFinalize(), ConfusedMovementGenerator< T >::DoFinalize(), npc_taskmaster_fizzule::npc_taskmaster_fizzuleAI::DoFriend(), FormationMovementGenerator::DoInitialize(), ChaseMovementGenerator< T >::DoInitialize(), WaypointMovementGenerator< Creature >::DoReset(), WaypointMovementGenerator< Creature >::DoUpdate(), FormationMovementGenerator::DoUpdate(), RandomMovementGenerator< T >::DoUpdate(), ChaseMovementGenerator< T >::DoUpdate(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::GoToMinchar(), debug_commandscript::HandleDebugMoveflagsCommand(), WorldSession::HandlePetActionHelper(), RotateMovementGenerator::Initialize(), npc_strangulate_vehicle::npc_strangulate_vehicleAI::IsSummonedBy(), boss_kologarn::JustDied(), boss_swamplord_muselek::JustEngagedWith(), boss_janalai::JustEngagedWith(), Player::LeaveBattleground(), boss_headless_horseman::MovementInform(), boss_kaelthas::MovementInform(), boss_jedoga_shadowseeker::MovementInform(), boss_ghazan::MovementInform(), npc_ball_of_flame::npc_ball_of_flameAI::MovementInform(), npc_toc5_player_vehicle::npc_toc5_player_vehicleAI::OnCharmed(), npc_hover_disk::PassengerBoarded(), PauseMovement(), SmartAI::PausePath(), npc_hidden_cultist::npc_hidden_cultistAI::PreScript(), RemoveCharmedBy(), Creature::RemoveCorpse(), boss_felblood_kaelthas::Reset(), npc_xt002_scrapbot::Reset(), npc_xt002_boombot::Reset(), boss_leotheras_the_blind::Reset(), IdleMovementGenerator::Reset(), npc_putricide_oozeAI::SelectNewTarget(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::SelectNewTarget(), SendMoveRoot(), SetCharmedBy(), SmartAI::SetCombatMovement(), SetConfused(), boss_victor_nefarius::SetData(), setDeathState(), SetFeared(), FollowerAI::SetFollowComplete(), FollowerAI::SetFollowPaused(), npc_magister_aledis::sGossipSelect(), npc_harrison_jones::SpellHit(), npc_cult_fanatic::npc_cult_fanaticAI::SpellHit(), npc_cult_adherent::npc_cult_adherentAI::SpellHit(), npc_tirion_fordring_tft::npc_tirion_fordringAI::SpellHit(), boss_urom::boss_uromAI::SpellHit(), npc_vengeful_shade::npc_vengeful_shadeAI::SpellHitTarget(), boss_heigan::StartFightPhase(), SmartAI::StopFollow(), SmartAI::StopPath(), CreatureAI::TriggerAlert(), Pet::Update(), TimedFleeingMovementGenerator::Update(), boss_onyxia::UpdateAI(), boss_grand_champion::boss_grand_championAI::UpdateAI(), boss_jormungarAI::UpdateAI(), boss_icehowl::boss_icehowlAI::UpdateAI(), npc_hor_lich_king::UpdateAI(), npc_kinetic_bomb::npc_kinetic_bombAI::UpdateAI(), boss_lord_marrowgar::UpdateAI(), boss_sindragosa::boss_sindragosaAI::UpdateAI(), npc_rimefang::npc_rimefangAI::UpdateAI(), npc_valithria_cloud::npc_valithria_cloudAI::UpdateAI(), boss_malygos::UpdateAI(), boss_stormcaller_brundir::UpdateAI(), boss_mimiron::UpdateAI(), boss_razorscale::UpdateAI(), boss_thorim_sif::UpdateAI(), npc_mature_netherwing_drake::npc_mature_netherwing_drakeAI::UpdateAI(), npc_pet_gen_plump_turkey::UpdateAI(), and PetAI::UpdateAI().

◆ StopMovingOnCurrentPos()

void Unit::StopMovingOnCurrentPos ( )
13078{
13080
13081 // not need send any packets if not in world
13082 if (!IsInWorld())
13083 return;
13084
13085 DisableSpline(); // pussywizard: required so Launch() won't recalculate position from previous spline
13086 Movement::MoveSplineInit init(this);
13087 init.MoveTo(GetPositionX(), GetPositionY(), GetPositionZ());
13088 init.SetFacing(GetOrientation());
13089 init.Launch();
13090}

References ClearUnitState(), DisableSpline(), Position::GetOrientation(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), Object::IsInWorld(), Movement::MoveSplineInit::Launch(), Movement::MoveSplineInit::MoveTo(), Movement::MoveSplineInit::SetFacing(), and UNIT_STATE_MOVING.

Referenced by npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::DoAction(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::DoAction(), brann_bronzebeard::brann_bronzebeardAI::DoAction(), boss_illidan_stormrage::DoAction(), npc_maiev_illidan::DoAction(), boss_alar::DoDiveBomb(), UtherBatteredHiltEvent::Execute(), WorldSession::HandlePetActionHelper(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::HandleSpeedChangeIfNeeded(), boss_flame_leviathan::InitializeAI(), boss_prince_keleseth_icc::boss_prince_kelesethAI::JustDied(), boss_prince_taldaram_icc::boss_prince_taldaramAI::JustDied(), boss_prince_valanar_icc::boss_prince_valanarAI::JustDied(), boss_cyanigosa::JustDied(), boss_the_lich_king::boss_the_lich_kingAI::JustSummoned(), boss_algalon_the_observer::JustSummoned(), boss_icehowl::boss_icehowlAI::MovementInform(), npc_escortAI::MovementInform(), SmartAI::MovepointReached(), instance_halls_of_reflection::OnCreatureCreate(), instance_ulduar::instance_ulduar_InstanceMapScript::OnCreatureCreate(), boss_janalai::Reset(), npc_q24545_lich_king::npc_q24545_lich_kingAI::Reset(), boss_devourer_of_souls::SpellHitTarget(), Creature::Update(), npc_rookery_hatcher::UpdateAI(), npc_vaelastrasz_the_red::UpdateAI(), boss_jormungarAI::UpdateAI(), and npc_strangulate_vehicle::npc_strangulate_vehicleAI::UpdateAI().

◆ Talk() [1/2]

void Unit::Talk ( std::string_view  text,
ChatMsg  msgType,
Language  language,
float  textRange,
WorldObject const *  target 
)
virtual
17177{
17178 Acore::CustomChatTextBuilder builder(this, msgType, text, language, target);
17181 Cell::VisitObjects(this, worker, textRange);
17182}
Definition ChatTextBuilder.h:49
Definition GridNotifiers.h:1737
Definition GridNotifiers.h:583

References Cell::VisitObjects().

Referenced by spell_inoculate_nestlewood_owlkin::HandleEffectRemove(), and spell_the_flag_of_ownership::HandleScript().

◆ Talk() [2/2]

void Unit::Talk ( uint32  textId,
ChatMsg  msgType,
float  textRange,
WorldObject const *  target 
)
virtual
17229{
17230 if (!sObjectMgr->GetBroadcastText(textId))
17231 {
17232 LOG_ERROR("entities.unit", "Unit::Talk: `broadcast_text` (ID: {}) was not found", textId);
17233 return;
17234 }
17235
17236 Acore::BroadcastTextBuilder builder(this, msgType, textId, getGender(), target);
17239 Cell::VisitObjects(this, worker, textRange);
17240}
Definition ChatTextBuilder.h:31
uint8 getGender() const
Definition Unit.h:848

References getGender(), LOG_ERROR, sObjectMgr, and Cell::VisitObjects().

◆ TextEmote() [1/2]

void Unit::TextEmote ( std::string_view  text,
WorldObject const *  target = nullptr,
bool  isBossEmote = false 
)
virtual

◆ TextEmote() [2/2]

void Unit::TextEmote ( uint32  textId,
WorldObject const *  target = nullptr,
bool  isBossEmote = false 
)
virtual

Reimplemented in Player.

17253{
17254 Talk(textId, isBossEmote ? CHAT_MSG_RAID_BOSS_EMOTE : CHAT_MSG_MONSTER_EMOTE, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE), target);
17255}

References CHAT_MSG_MONSTER_EMOTE, CHAT_MSG_RAID_BOSS_EMOTE, CONFIG_LISTEN_RANGE_TEXTEMOTE, and sWorld.

◆ ToPet()

◆ ToTempSummon() [1/2]

TempSummon * Unit::ToTempSummon ( )
inline
731{ if (IsSummon()) return reinterpret_cast<TempSummon*>(this); else return nullptr; }

References IsSummon().

Referenced by CreatureAI::_EnterEvadeMode(), _ExitVehicle(), npc_living_mojo::npc_living_mojoAI::AttackStart(), ThreatManager::CanHaveThreatList(), WorldObject::CanSeeOrDetect(), Spell::CheckCast(), Spell::CheckEffectTarget(), npc_tiger_matriarch::npc_tiger_matriarchAI::DamageTaken(), Creature::DespawnOnEvade(), Creature::DespawnOrUnsummon(), npc_bone_spike::npc_bone_spikeAI::DoAction(), boss_sindragosa::boss_sindragosaAI::DoAction(), npc_strangulate_vehicle::npc_strangulate_vehicleAI::DoAction(), Spell::EffectScriptEffect(), npc_phantom_hallucination::EnterEvadeMode(), npc_marzon_silent_blade::npc_marzon_silent_bladeAI::EnterEvadeMode(), SuckBackEvent::Execute(), npc_raging_flames::FixateRandomTarget(), boss_headless_horseman_head::GetOwner(), GetSpellModOwner(), npc_infra_green_bomber_generic::npc_infra_green_bomber_genericAI::GetSummoner(), CreatureAI::GetSummoner(), Creature::GetSummonerGUID(), SmartScript::GetTargets(), WorldSession::HandleDismissCritter(), spell_pilgrims_bounty_pass_generic::HandleDummy(), WorldSession::HandlePetActionHelper(), spell_the_cleansing_on_death_cast_on_master::HandleScript(), spell_gen_whisper_to_controller::HandleScript(), spell_pri_lightwell::HandleScriptEffect(), spell_q11026_a11051_banish_the_demons::HandleScriptEffect(), npc_hourglass_of_eternity::npc_hourglass_of_eternityAI::InitializeAI(), npc_bushwhacker::npc_bushwhackerAI::InitializeAI(), npc_pet_gen_imp_in_a_bottle::InitializeAI(), npc_pet_pri_lightwell::InitializeAI(), TempSummon::InitStats(), SpellClickInfo::IsFitToRequirements(), Creature::IsUpdateNeeded(), npc_balance_of_light_and_shadow::npc_balance_of_light_and_shadowAI::JustDied(), boss_black_knight::boss_black_knightAI::JustDied(), boss_tyrannus::boss_tyrannusAI::JustDied(), npc_raging_spirit::npc_raging_spiritAI::JustDied(), boss_freya_iron_root::JustDied(), boss_yoggsaron_influence_tentacle::JustDied(), boss_essence_of_anger::boss_essence_of_angerAI::JustDied(), npc_pet_dk_ghoul::JustDied(), npc_marzon_silent_blade::npc_marzon_silent_bladeAI::JustEngagedWith(), npc_living_mojo::npc_living_mojoAI::JustEngagedWith(), boss_yoggsaron_cloud::JustSummoned(), npc_frosthound::JustSummoned(), boss_halion::boss_halionAI::JustSummoned(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::JustSummoned(), npc_collapsing_star::JustSummoned(), npc_algalon_worm_hole::JustSummoned(), boss_supremus::JustSummoned(), Kill(), npc_tiger_matriarch::npc_tiger_matriarchAI::KilledUnit(), npc_netherspite_infernal::KilledUnit(), npc_living_mojo::npc_living_mojoAI::MoveInLineOfSight(), npc_jenny::MoveInLineOfSight(), npc_frostbrood_skytalon::npc_frostbrood_skytalonAI::MovementInform(), npc_injured_7th_legion_soldier::npc_injured_7th_legion_soldierAI::MovementInform(), npc_balance_of_light_and_shadow::npc_balance_of_light_and_shadowAI::MovementInform(), npc_marzon_silent_blade::npc_marzon_silent_bladeAI::MovementInform(), npc_attracted_reef_bull::npc_attracted_reef_bullAI::MovementInform(), npc_attracted_reef_bull::npc_attracted_reef_bullAI::npc_attracted_reef_bullAI(), npc_batrider::npc_batrider(), npc_claw_tentacle::npc_claw_tentacle(), npc_eye_tentacle::npc_eye_tentacle(), npc_giant_claw_tentacle::npc_giant_claw_tentacle(), npc_giant_eye_tentacle::npc_giant_eye_tentacle(), npc_midsummer_bonfire::npc_midsummer_bonfire(), npc_midsummer_ribbon_pole_target::npc_midsummer_ribbon_pole_target(), npc_pet_gen_soul_trader_beacon::npc_pet_gen_soul_trader_beacon(), BattlefieldWG::OnCreatureCreate(), instance_blackwing_lair::OnCreatureCreate(), npc_wormhole::OnGossipHello(), WaypointMovementGenerator< Creature >::ProcessWaypointArrival(), RemoveAllControlled(), RemoveAllMinionsByEntry(), spell_gen_defend::RemoveDummyFromDriver(), npc_raging_spirit::npc_raging_spiritAI::Reset(), npc_stormforged_lieutenant::Reset(), npc_future_you::npc_future_youAI::Reset(), npc_plaguehound_tracker::npc_plaguehound_trackerAI::Reset(), npc_voidtraveler::Reset(), npc_pet_gen_argent_pony_bridle::Reset(), Spell::SelectImplicitCasterObjectTargets(), Creature::SelectVictim(), Spell::SendSpellGo(), Spell::SendSpellStart(), npc_ulduar_flames_spread::SpellHit(), npc_pilgrims_bounty_plate::SpellHit(), boss_the_lich_king::boss_the_lich_kingAI::SummonedCreatureDies(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::Update(), npc_valkyr_battle_maiden::npc_valkyr_battle_maidenAI::UpdateAI(), npc_love_in_air_snivel_real::UpdateAI(), npc_tiger_matriarch_credit::npc_tiger_matriarch_creditAI::UpdateAI(), npc_tiger_matriarch::npc_tiger_matriarchAI::UpdateAI(), npc_living_mojo::npc_living_mojoAI::UpdateAI(), npc_bone_spike::npc_bone_spikeAI::UpdateAI(), npc_little_ooze::npc_little_oozeAI::UpdateAI(), npc_raging_spirit::npc_raging_spiritAI::UpdateAI(), npc_strangulate_vehicle::npc_strangulate_vehicleAI::UpdateAI(), npc_freya_ward::UpdateAI(), npc_ulduar_flash_freeze::UpdateAI(), npc_vh_void_sentry::UpdateAI(), npc_pet_hunter_snake_trap::UpdateAI(), npc_jenny::UpdateFollowerAI(), Player::VehicleSpellInitialize(), and npc_frosthound::WaypointReached().

◆ ToTempSummon() [2/2]

const TempSummon * Unit::ToTempSummon ( ) const
inline
732{ if (IsSummon()) return reinterpret_cast<const TempSummon*>(this); else return nullptr; }

References IsSummon().

◆ ToTotem()

Totem * Unit::ToTotem ( )
inline
730{ if (IsTotem()) return reinterpret_cast<Totem*>(this); else return nullptr; }
Definition Totem.h:51

References IsTotem().

Referenced by _UnapplyAura(), Spell::EffectDestroyAllTotems(), WorldSession::HandleTotemDestroyed(), SetMinion(), Spell::SummonGuardian(), and TotemAI::UpdateAI().

◆ TriggerAurasProcOnEvent() [1/3]

void Unit::TriggerAurasProcOnEvent ( CalcDamageInfo damageInfo)
12899{
12900 DamageInfo dmgInfo = DamageInfo(damageInfo);
12901 TriggerAurasProcOnEvent(nullptr, nullptr, damageInfo.target, damageInfo.procAttacker, damageInfo.procVictim, 0, 0, dmgInfo.GetHitMask(), nullptr, &dmgInfo, nullptr);
12902}
uint32 GetHitMask() const
Definition Unit.cpp:283

References DamageInfo::GetHitMask(), CalcDamageInfo::procAttacker, CalcDamageInfo::procVictim, CalcDamageInfo::target, and TriggerAurasProcOnEvent().

Referenced by ProcSkillsAndAuras(), TriggerAurasProcOnEvent(), and TriggerAurasProcOnEvent().

◆ TriggerAurasProcOnEvent() [2/3]

void Unit::TriggerAurasProcOnEvent ( ProcEventInfo eventInfo,
AuraApplicationProcContainer procAuras 
)
12941{
12942 Spell const* triggeringSpell = eventInfo.GetProcSpell();
12943 bool const disableProcs = triggeringSpell && triggeringSpell->IsProcDisabled();
12944 if (disableProcs)
12945 SetCantProc(true);
12946
12947 for (auto const& [procEffectMask, aurApp] : aurasTriggeringProc)
12948 {
12949 if (aurApp->GetRemoveMode())
12950 continue;
12951
12952 SpellInfo const* spellInfo = aurApp->GetBase()->GetSpellInfo();
12954 SetCantProc(true);
12955
12956 aurApp->GetBase()->TriggerProcOnEvent(procEffectMask, aurApp, eventInfo);
12957
12959 SetCantProc(false);
12960 }
12961
12962 if (disableProcs)
12963 SetCantProc(false);
12964}
@ SPELL_ATTR3_INSTANT_TARGET_PROCS
Definition SharedDefines.h:500
Spell const * GetProcSpell() const
Definition Unit.h:468
bool IsProcDisabled() const
Definition Spell.h:570
void SetCantProc(bool apply)
Definition Unit.cpp:13702

References ProcEventInfo::GetProcSpell(), SpellInfo::HasAttribute(), Spell::IsProcDisabled(), SetCantProc(), and SPELL_ATTR3_INSTANT_TARGET_PROCS.

◆ TriggerAurasProcOnEvent() [3/3]

void Unit::TriggerAurasProcOnEvent ( std::list< AuraApplication * > *  myProcAuras,
std::list< AuraApplication * > *  targetProcAuras,
Unit actionTarget,
uint32  typeMaskActor,
uint32  typeMaskActionTarget,
uint32  spellTypeMask,
uint32  spellPhaseMask,
uint32  hitMask,
Spell spell,
DamageInfo damageInfo,
HealInfo healInfo 
)
12905{
12906 // prepare data for self trigger
12907 ProcEventInfo myProcEventInfo = ProcEventInfo(this, actionTarget, actionTarget, typeMaskActor, spellTypeMask, spellPhaseMask, hitMask, spell, damageInfo, healInfo);
12908 AuraApplicationProcContainer myAurasTriggeringProc;
12909 GetProcAurasTriggeredOnEvent(myAurasTriggeringProc, myProcAuras, myProcEventInfo);
12910
12911 // needed for example for Cobra Strikes, pet does the attack, but aura is on owner
12912 if (Player* modOwner = GetSpellModOwner())
12913 {
12914 if (modOwner != this && spell)
12915 {
12916 std::list<AuraApplication*> modAuras;
12917 for (auto itr = modOwner->GetAppliedAuras().begin(); itr != modOwner->GetAppliedAuras().end(); ++itr)
12918 {
12919 if (spell->m_appliedMods.count(itr->second->GetBase()) != 0)
12920 modAuras.push_back(itr->second);
12921 }
12922
12923 if (!modAuras.empty())
12924 modOwner->GetProcAurasTriggeredOnEvent(myAurasTriggeringProc, &modAuras, myProcEventInfo);
12925 }
12926 }
12927
12928 // prepare data for target trigger
12929 ProcEventInfo targetProcEventInfo = ProcEventInfo(this, actionTarget, this, typeMaskActionTarget, spellTypeMask, spellPhaseMask, hitMask, spell, damageInfo, healInfo);
12930 AuraApplicationProcContainer targetAurasTriggeringProc;
12931 if (typeMaskActionTarget && actionTarget)
12932 actionTarget->GetProcAurasTriggeredOnEvent(targetAurasTriggeringProc, targetProcAuras, targetProcEventInfo);
12933
12934 TriggerAurasProcOnEvent(myProcEventInfo, myAurasTriggeringProc);
12935
12936 if (typeMaskActionTarget && actionTarget)
12937 actionTarget->TriggerAurasProcOnEvent(targetProcEventInfo, targetAurasTriggeringProc);
12938}
Definition Unit.h:440
UsedSpellMods m_appliedMods
Definition Spell.h:560
void GetProcAurasTriggeredOnEvent(AuraApplicationProcContainer &aurasTriggeringProc, std::list< AuraApplication * > *procAuras, ProcEventInfo eventInfo)
Definition Unit.cpp:12861
std::vector< std::pair< uint8, AuraApplication * > > AuraApplicationProcContainer
Definition Unit.h:683

References GetProcAurasTriggeredOnEvent(), GetSpellModOwner(), Spell::m_appliedMods, spellTypeMask, and TriggerAurasProcOnEvent().

◆ UnsummonAllTotems()

void Unit::UnsummonAllTotems ( bool  onDeath = false)
8326{
8327 for (uint8 i = 0; i < MAX_SUMMON_SLOT; ++i)
8328 {
8329 if (!m_SummonSlot[i])
8330 {
8331 continue;
8332 }
8333
8334 if (Creature* OldTotem = GetMap()->GetCreature(m_SummonSlot[i]))
8335 {
8336 if (OldTotem->IsSummon())
8337 {
8338 if (!(onDeath && !IsPlayer() && OldTotem->IsGuardian()))
8339 {
8340 OldTotem->ToTempSummon()->UnSummon();
8341 }
8342 }
8343 }
8344 }
8345}

References WorldObject::GetMap(), Object::IsPlayer(), m_SummonSlot, and MAX_SUMMON_SLOT.

Referenced by Player::ActivateSpec(), RemoveFromWorld(), and setDeathState().

◆ Update()

void Unit::Update ( uint32  time)
overridevirtual

Reimplemented from WorldObject.

504{
505 sScriptMgr->OnUnitUpdate(this, p_time);
506
507 // WARNING! Order of execution here is important, do not change.
508 // Spells must be processed with event system BEFORE they go to _UpdateSpells.
509 // Or else we may have some SPELL_STATE_FINISHED spells stalled in pointers, that is bad.
510 WorldObject::Update(p_time);
511
512 if (!IsInWorld())
513 return;
514
515 // pussywizard:
516 if (!IsPlayer() || (!ToPlayer()->IsBeingTeleported() && !bRequestForcedVisibilityUpdate))
517 {
519 {
521 {
523 //ExecuteDelayedUnitRelocationEvent();
525 }
526 else
528 }
530 {
531 if (m_delayed_unit_ai_notify_timer <= p_time)
532 {
535 }
536 else
538 }
539 }
540
541 _UpdateSpells( p_time );
542
543 // update combat timer only for players and pets (only pets with PetAI)
545 {
546 // Check UNIT_STATE_MELEE_ATTACKING or UNIT_STATE_CHASE (without UNIT_STATE_FOLLOW in this case) so pets can reach far away
547 // targets without stopping half way there and running off.
548 // These flags are reset after target dies or another command is given.
549 if (!GetCombatManager().HasCombat())
550 {
551 // m_CombatTimer set at aura start and it will be freeze until aura removing
552 if (m_CombatTimer <= p_time)
554 else
555 m_CombatTimer -= p_time;
556 }
557 }
558
559 m_combatManager.Update(p_time);
560
563 {
564 while (!extraAttacksTargets.empty())
565 {
566 auto itr = extraAttacksTargets.begin();
567 ObjectGuid targetGuid = itr->first;
568 uint32 count = itr->second;
569 extraAttacksTargets.erase(itr);
570 if (Unit* victim = ObjectAccessor::GetUnit(*this, targetGuid))
571 {
573 || victim->IsWithinMeleeRange(this))
574 {
575 HandleProcExtraAttackFor(victim, count);
576 }
577 }
578 }
580 }
581
582 // not implemented before 3.0.2
583 // xinef: if attack time > 0, reduce by diff
584 // if on next update, attack time < 0 assume player didnt attack - set to 0
585 bool suspendAttackTimer = false;
586 bool suspendRangedAttackTimer = false;
588 {
589 for (Spell* spell : m_currentSpells)
590 {
591 if (spell)
592 {
593 if (spell->GetSpellInfo()->HasAttribute(SPELL_ATTR2_DO_NOT_RESET_COMBAT_TIMERS))
594 {
595 if (spell->IsChannelActive())
596 {
597 suspendRangedAttackTimer = true;
598 }
599
600 suspendAttackTimer = true;
601 break;
602 }
603 }
604 }
605 }
606
607 if (!suspendAttackTimer)
608 {
609 if (int32 base_attack = getAttackTimer(BASE_ATTACK))
610 {
611 setAttackTimer(BASE_ATTACK, base_attack > 0 ? base_attack - (int32) p_time : 0);
612 }
613
614 if (int32 off_attack = getAttackTimer(OFF_ATTACK))
615 {
616 setAttackTimer(OFF_ATTACK, off_attack > 0 ? off_attack - (int32) p_time : 0);
617 }
618 }
619
620 if (!suspendRangedAttackTimer)
621 {
622 if (int32 ranged_attack = getAttackTimer(RANGED_ATTACK))
623 {
624 setAttackTimer(RANGED_ATTACK, ranged_attack > 0 ? ranged_attack - (int32)p_time : 0);
625 }
626 }
627
628 // update abilities available only for fraction of time
629 UpdateReactives(p_time);
630
634
635 UpdateSplineMovement(p_time);
636 GetMotionMaster()->UpdateMotion(p_time);
637
639}
@ AURA_STATE_HEALTH_ABOVE_75_PERCENT
Definition SharedDefines.h:1303
@ SPELL_HACK_AND_SLASH
Definition Unit.h:298
@ SPELL_SWORD_SPECIALIZATION
Definition Unit.h:297
void Update(uint32 tdiff)
Definition CombatManager.cpp:147
std::unordered_set< Unit * > i_objectsForDelayedVisibility
Definition Map.h:237
void UpdateMotion(uint32 diff)
Definition MotionMaster.cpp:106
void _UpdateSpells(uint32 time)
Definition Unit.cpp:4016
void UpdateSplineMovement(uint32 t_diff)
Definition Unit.cpp:695
void UpdateReactives(uint32 p_time)
Definition Unit.cpp:13344
void ExecuteDelayedUnitAINotifyEvent()
Definition Unit.cpp:16438
void HandleProcExtraAttackFor(Unit *victim, uint32 count)
Definition Unit.cpp:2942
virtual void Update(uint32 diff)
Definition Object.cpp:1068

References _lastDamagedTargetGuid, _lastExtraAttackSpell, _UpdateSpells(), AURA_STATE_HEALTH_ABOVE_75_PERCENT, AURA_STATE_HEALTHLESS_20_PERCENT, AURA_STATE_HEALTHLESS_35_PERCENT, BASE_ATTACK, bRequestForcedVisibilityUpdate, ClearInCombat(), ObjectGuid::Empty, ExecuteDelayedUnitAINotifyEvent(), extraAttacksTargets, WorldObject::FindMap(), getAttackTimer(), GetCombatManager(), GetMotionMaster(), ObjectAccessor::GetUnit(), HandleProcExtraAttackFor(), HasUnitState(), HasUnitTypeMask(), HealthAbovePct(), HealthBelowPct(), Map::i_objectsForDelayedVisibility, InvalidateValuesUpdateCache(), IsAlive(), IsControlledByPlayer(), IsInCombat(), Object::IsInWorld(), IsPet(), Object::IsPlayer(), m_combatManager, m_CombatTimer, m_currentSpells, m_delayed_unit_ai_notify_timer, m_delayed_unit_relocation_timer, ModifyAuraState(), OFF_ATTACK, RANGED_ATTACK, setAttackTimer(), SPELL_ATTR2_DO_NOT_RESET_COMBAT_TIMERS, SPELL_HACK_AND_SLASH, SPELL_SWORD_SPECIALIZATION, sScriptMgr, Object::ToPlayer(), UNIT_MASK_CONTROLLABLE_GUARDIAN, UNIT_STATE_CASTING, WorldObject::Update(), CombatManager::Update(), MotionMaster::UpdateMotion(), UpdateReactives(), and UpdateSplineMovement().

Referenced by Creature::Update(), and Player::Update().

◆ UpdateAllDamageDoneMods()

void Unit::UpdateAllDamageDoneMods ( )
12140{
12141 for (uint8 i = BASE_ATTACK; i < MAX_ATTACK; ++i)
12143}
virtual void UpdateDamageDoneMods(WeaponAttackType attackType, int32 skipEnchantSlot=-1)
Definition Unit.cpp:12109

References BASE_ATTACK, MAX_ATTACK, and UpdateDamageDoneMods().

Referenced by AuraEffect::HandleModDamageDone().

◆ UpdateAllDamagePctDoneMods()

void Unit::UpdateAllDamagePctDoneMods ( )
12184{
12185 for (uint8 i = BASE_ATTACK; i < MAX_ATTACK; ++i)
12187}
void UpdateDamagePctDoneMods(WeaponAttackType attackType)
Definition Unit.cpp:12145

References BASE_ATTACK, MAX_ATTACK, and UpdateDamagePctDoneMods().

Referenced by AuraEffect::HandleModDamagePercentDone().

◆ UpdateAllResistances()

void Unit::UpdateAllResistances ( )
virtual

◆ UpdateAllStats()

virtual bool Unit::UpdateAllStats ( )
pure virtual

Implemented in Creature, Guardian, Player, and Totem.

◆ UpdateArmor()

virtual void Unit::UpdateArmor ( )
pure virtual

◆ UpdateAttackPowerAndDamage()

virtual void Unit::UpdateAttackPowerAndDamage ( bool  ranged = false)
pure virtual

Implemented in Creature, Guardian, Player, and Totem.

Referenced by UpdateUnitMod().

◆ UpdateAuraForGroup()

void Unit::UpdateAuraForGroup ( uint8  slot)
13586{
13587 if (slot >= MAX_AURAS) // slot not found, return
13588 return;
13589 if (Player* player = ToPlayer())
13590 {
13591 if (player->GetGroup())
13592 {
13593 player->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_AURAS);
13594 player->SetAuraUpdateMaskForRaid(slot);
13595 }
13596 }
13597 else if (IsCreature() && IsPet())
13598 {
13599 Pet* pet = ((Pet*)this);
13600 if (pet->isControlled())
13601 {
13602 Unit* owner = GetOwner();
13603 if (owner && (owner->IsPlayer()) && owner->ToPlayer()->GetGroup())
13604 {
13606 pet->SetAuraUpdateMaskForRaid(slot);
13607 }
13608 }
13609 }
13610}
@ GROUP_UPDATE_FLAG_PET_AURAS
Definition Group.h:118
@ GROUP_UPDATE_FLAG_AURAS
Definition Group.h:109
#define MAX_AURAS
Definition SpellAuraDefines.h:21
void SetAuraUpdateMaskForRaid(uint8 slot)
Definition Pet.h:137

References Player::GetGroup(), GetOwner(), GROUP_UPDATE_FLAG_AURAS, GROUP_UPDATE_FLAG_PET_AURAS, Pet::isControlled(), Object::IsCreature(), IsPet(), Object::IsPlayer(), MAX_AURAS, Pet::SetAuraUpdateMaskForRaid(), Player::SetGroupUpdateFlag(), and Object::ToPlayer().

Referenced by RemoveVisibleAura(), and SetVisibleAura().

◆ UpdateCharmAI()

void Unit::UpdateCharmAI ( )
12649{
12650 if (IsPlayer())
12651 return;
12652
12653 if (i_disabledAI) // disabled AI must be primary AI
12654 {
12655 if (!IsCharmed())
12656 {
12657 delete i_AI;
12659 i_disabledAI = nullptr;
12660 }
12661 }
12662 else
12663 {
12664 if (IsCharmed())
12665 {
12667 if (isPossessed() || IsVehicle())
12668 i_AI = new PossessedAI(ToCreature());
12669 else
12670 i_AI = new PetAI(ToCreature());
12671 }
12672 }
12673}
Definition PetAI.h:47
Definition PassiveAI.h:37

References i_AI, i_disabledAI, IsCharmed(), Object::IsPlayer(), isPossessed(), IsVehicle(), and Object::ToCreature().

Referenced by Creature::Update().

◆ UpdateDamageDoneMods()

void Unit::UpdateDamageDoneMods ( WeaponAttackType  attackType,
int32  skipEnchantSlot = -1 
)
virtual

Reimplemented in Player.

12110{
12111 UnitMods unitMod;
12112 switch (attackType)
12113 {
12114 case BASE_ATTACK:
12115 unitMod = UNIT_MOD_DAMAGE_MAINHAND;
12116 break;
12117 case OFF_ATTACK:
12118 unitMod = UNIT_MOD_DAMAGE_OFFHAND;
12119 break;
12120 case RANGED_ATTACK:
12121 unitMod = UNIT_MOD_DAMAGE_RANGED;
12122 break;
12123 default:
12124 ABORT();
12125 break;
12126 }
12127
12128 float amount = GetTotalAuraModifier(SPELL_AURA_MOD_DAMAGE_DONE, [&](AuraEffect const* aurEff) -> bool
12129 {
12130 if (!(aurEff->GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL))
12131 return false;
12132
12133 return CheckAttackFitToAuraRequirement(attackType, aurEff);
12134 });
12135
12136 SetStatFlatModifier(unitMod, TOTAL_VALUE, amount);
12137}
@ UNIT_MOD_DAMAGE_RANGED
Definition Unit.h:173
@ UNIT_MOD_DAMAGE_MAINHAND
Definition Unit.h:171
virtual bool CheckAttackFitToAuraRequirement(WeaponAttackType, AuraEffect const *) const
Definition Unit.h:1087
void SetStatFlatModifier(UnitMods unitMod, UnitModifierFlatType modifierType, float val)
Definition Unit.cpp:12006

References ABORT, BASE_ATTACK, CheckAttackFitToAuraRequirement(), AuraEffect::GetMiscValue(), GetTotalAuraModifier(), OFF_ATTACK, RANGED_ATTACK, SetStatFlatModifier(), SPELL_AURA_MOD_DAMAGE_DONE, SPELL_SCHOOL_MASK_NORMAL, TOTAL_VALUE, UNIT_MOD_DAMAGE_MAINHAND, UNIT_MOD_DAMAGE_OFFHAND, and UNIT_MOD_DAMAGE_RANGED.

Referenced by UpdateAllDamageDoneMods(), and Player::UpdateDamageDoneMods().

◆ UpdateDamagePctDoneMods()

void Unit::UpdateDamagePctDoneMods ( WeaponAttackType  attackType)
12146{
12147 float factor;
12148 UnitMods unitMod;
12149 switch (attackType)
12150 {
12151 case BASE_ATTACK:
12152 factor = 1.0f;
12153 unitMod = UNIT_MOD_DAMAGE_MAINHAND;
12154 break;
12155 case OFF_ATTACK:
12156 // off hand has 50% penalty
12157 factor = 0.5f;
12158 unitMod = UNIT_MOD_DAMAGE_OFFHAND;
12159 break;
12160 case RANGED_ATTACK:
12161 factor = 1.0f;
12162 unitMod = UNIT_MOD_DAMAGE_RANGED;
12163 break;
12164 default:
12165 ABORT();
12166 break;
12167 }
12168
12169 factor *= GetTotalAuraMultiplier(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, [attackType, this](AuraEffect const* aurEff) -> bool
12170 {
12171 if (!(aurEff->GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL))
12172 return false;
12173
12174 return CheckAttackFitToAuraRequirement(attackType, aurEff);
12175 });
12176
12177 if (attackType == OFF_ATTACK)
12178 factor *= GetTotalAuraMultiplier(SPELL_AURA_MOD_OFFHAND_DAMAGE_PCT, std::bind(&Unit::CheckAttackFitToAuraRequirement, this, attackType, std::placeholders::_1));
12179
12180 SetStatPctModifier(unitMod, TOTAL_PCT, factor);
12181}
@ SPELL_AURA_MOD_OFFHAND_DAMAGE_PCT
Definition SpellAuraDefines.h:185
void SetStatPctModifier(UnitMods unitMod, UnitModifierPctType modifierType, float val)
Definition Unit.cpp:12015

References ABORT, BASE_ATTACK, CheckAttackFitToAuraRequirement(), AuraEffect::GetMiscValue(), GetTotalAuraMultiplier(), OFF_ATTACK, RANGED_ATTACK, SetStatPctModifier(), SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, SPELL_AURA_MOD_OFFHAND_DAMAGE_PCT, SPELL_SCHOOL_MASK_NORMAL, TOTAL_PCT, UNIT_MOD_DAMAGE_MAINHAND, UNIT_MOD_DAMAGE_OFFHAND, and UNIT_MOD_DAMAGE_RANGED.

Referenced by AuraEffect::HandleModOffhandDamagePercent(), UpdateAllDamagePctDoneMods(), and Player::UpdateWeaponDependentAuras().

◆ UpdateDamagePhysical()

void Unit::UpdateDamagePhysical ( WeaponAttackType  attType)
virtual

Reimplemented in Guardian, and Totem.

61{
62 float totalMin = 0.f;
63 float totalMax = 0.f;
64
65 float tmpMin, tmpMax;
66 for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
67 {
68 CalculateMinMaxDamage(attType, false, true, tmpMin, tmpMax, i);
69 totalMin += tmpMin;
70 totalMax += tmpMax;
71 }
72
73 switch (attType)
74 {
75 case BASE_ATTACK:
76 default:
79 break;
80 case OFF_ATTACK:
83 break;
84 case RANGED_ATTACK:
87 break;
88 }
89}
void SetStatFloatValue(uint16 index, float value)
Definition Object.cpp:779

References BASE_ATTACK, CalculateMinMaxDamage(), MAX_ITEM_PROTO_DAMAGES, OFF_ATTACK, RANGED_ATTACK, Object::SetStatFloatValue(), UNIT_FIELD_MAXDAMAGE, UNIT_FIELD_MAXOFFHANDDAMAGE, UNIT_FIELD_MAXRANGEDDAMAGE, UNIT_FIELD_MINDAMAGE, UNIT_FIELD_MINOFFHANDDAMAGE, and UNIT_FIELD_MINRANGEDDAMAGE.

Referenced by Player::_ApplyAmmoBonuses(), Player::_ApplyWeaponDamage(), boss_twin_valkyrAI::boss_twin_valkyrAI(), AuraEffect::HandleAuraModDisarm(), AuraEffect::HandleModAttackSpeed(), npc_toc_enh_shaman::npc_toc_enh_shamanAI::npc_toc_enh_shamanAI(), Player::RemoveAmmo(), Creature::SetCanDualWield(), ScriptedAI::SetEquipmentSlots(), Creature::UpdateAttackPowerAndDamage(), Player::UpdateAttackPowerAndDamage(), and UpdateUnitMod().

◆ UpdateHeight()

void Unit::UpdateHeight ( float  newZ)

Only server-side height update, does not broadcast to client.

16058{
16060 if (IsVehicle())
16062}
void RelocatePassengers()
Definition Vehicle.cpp:521

References Position::GetPositionX(), Position::GetPositionY(), GetVehicleKit(), IsVehicle(), Position::Relocate(), and Vehicle::RelocatePassengers().

Referenced by npc_dancing_flames::npc_dancing_flamesAI::Reset().

◆ UpdateInterruptMask()

void Unit::UpdateInterruptMask ( )
887{
888 m_interruptMask = 0;
889 for (AuraApplicationList::const_iterator i = m_interruptableAuras.begin(); i != m_interruptableAuras.end(); ++i)
890 m_interruptMask |= (*i)->GetBase()->GetSpellInfo()->AuraInterruptFlags;
891
893 if (spell->getState() == SPELL_STATE_CASTING)
894 m_interruptMask |= spell->m_spellInfo->ChannelInterruptFlags;
895}

References CURRENT_CHANNELED_SPELL, m_currentSpells, m_interruptableAuras, m_interruptMask, and SPELL_STATE_CASTING.

Referenced by _UnapplyAura(), Spell::finish(), and RemoveAurasWithInterruptFlags().

◆ UpdateMaxHealth()

virtual void Unit::UpdateMaxHealth ( )
pure virtual

Implemented in Creature, Guardian, Player, and Totem.

Referenced by UpdateUnitMod().

◆ UpdateMaxPower()

virtual void Unit::UpdateMaxPower ( Powers  power)
pure virtual

Implemented in Creature, Guardian, Player, and Totem.

Referenced by UpdateUnitMod().

◆ UpdateObjectVisibility()

◆ UpdateOrientation()

void Unit::UpdateOrientation ( float  orientation)

Only server-side orientation update, does not broadcast to client.

16050{
16051 SetOrientation(orientation);
16052 if (IsVehicle())
16054}

References GetVehicleKit(), IsVehicle(), Vehicle::RelocatePassengers(), and Position::SetOrientation().

Referenced by Spell::UpdateChanneledTargetList(), and UpdatePosition().

◆ UpdatePetCombatState()

void Unit::UpdatePetCombatState ( )
7560{
7561 ASSERT(!IsPet()); // player pets do not use UNIT_FLAG_PET_IN_COMBAT for this purpose
7562
7563 bool state = false;
7564 for (Unit* minion : m_Controlled)
7565 if (minion->IsInCombat())
7566 {
7567 state = true;
7568 break;
7569 }
7570
7571 if (state)
7573 else
7575}

References ASSERT, IsPet(), m_Controlled, RemoveUnitFlag(), SetUnitFlag(), and UNIT_FLAG_PET_IN_COMBAT.

◆ UpdatePosition() [1/2]

bool Unit::UpdatePosition ( const Position pos,
bool  teleport = false 
)
inline

◆ UpdatePosition() [2/2]

bool Unit::UpdatePosition ( float  x,
float  y,
float  z,
float  ang,
bool  teleport = false 
)
virtual

Reimplemented in Player.

16012{
16013 if (!Acore::IsValidMapCoord(x, y, z, orientation))
16014 return false;
16015
16016 float old_orientation = GetOrientation();
16017 float current_z = GetPositionZ();
16018 bool turn = (old_orientation != orientation);
16019 bool relocated = (teleport || GetPositionX() != x || GetPositionY() != y || current_z != z);
16020
16021 if (!GetVehicle())
16022 {
16023 uint32 mask = 0;
16024 if (turn) mask |= AURA_INTERRUPT_FLAG_TURNING;
16025 if (relocated) mask |= AURA_INTERRUPT_FLAG_MOVE;
16026 if (mask)
16028 }
16029
16030 if (relocated)
16031 {
16032 if (IsPlayer())
16033 GetMap()->PlayerRelocation(ToPlayer(), x, y, z, orientation);
16034 else
16035 GetMap()->CreatureRelocation(ToCreature(), x, y, z, orientation);
16036 }
16037 else if (turn)
16038 {
16039 UpdateOrientation(orientation);
16040
16041 if (IsPlayer() && ToPlayer()->GetFarSightDistance())
16043 }
16044
16045 return (relocated || turn);
16046}
void PlayerRelocation(Player *, float x, float y, float z, float o)
Definition Map.cpp:795
void CreatureRelocation(Creature *creature, float x, float y, float z, float o)
Definition Map.cpp:817
void UpdateOrientation(float orientation)
Only server-side orientation update, does not broadcast to client.
Definition Unit.cpp:16049
bool IsValidMapCoord(float c)
Definition GridDefines.h:210

References AURA_INTERRUPT_FLAG_MOVE, AURA_INTERRUPT_FLAG_TURNING, Map::CreatureRelocation(), WorldObject::GetMap(), Position::GetOrientation(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), GetVehicle(), Object::IsPlayer(), Acore::IsValidMapCoord(), Map::PlayerRelocation(), RemoveAurasWithInterruptFlags(), Object::ToCreature(), Object::ToPlayer(), UpdateObjectVisibility(), and UpdateOrientation().

Referenced by boss_taldaram::DoAction(), npc_hor_spiritual_reflection::EnterEvadeMode(), UtherBatteredHiltEvent::Execute(), WorldSession::HandleMoverRelocation(), boss_flame_leviathan::InitializeAI(), boss_prince_keleseth_icc::boss_prince_kelesethAI::JustDied(), boss_prince_taldaram_icc::boss_prince_taldaramAI::JustDied(), boss_prince_valanar_icc::boss_prince_valanarAI::JustDied(), boss_cyanigosa::JustDied(), boss_the_lich_king::boss_the_lich_kingAI::JustSummoned(), boss_algalon_the_observer::JustSummoned(), boss_harbinger_skyriss::JustSummoned(), boss_icehowl::boss_icehowlAI::MovementInform(), NearTeleportTo(), instance_halls_of_reflection::OnCreatureCreate(), instance_culling_of_stratholme::instance_culling_of_stratholme_InstanceMapScript::Reposition(), instance_old_hillsbrad::instance_old_hillsbrad_InstanceMapScript::Reposition(), npc_imprisoned_beryl_sorcerer::npc_imprisoned_beryl_sorcererAI::Reset(), npc_q24545_lich_king::npc_q24545_lich_kingAI::Reset(), npc_escortAI::SetNextWaypoint(), npc_escortAI::SetNextWaypoint(), npc_frost_sphere::npc_frost_sphereAI::UpdateAI(), boss_jormungarAI::UpdateAI(), npc_strangulate_vehicle::npc_strangulate_vehicleAI::UpdateAI(), Player::UpdatePosition(), and UpdateSplinePosition().

◆ UpdateReactives()

void Unit::UpdateReactives ( uint32  p_time)
13345{
13346 for (uint8 i = 0; i < MAX_REACTIVE; ++i)
13347 {
13348 ReactiveType reactive = ReactiveType(i);
13349
13350 if (!m_reactiveTimer[reactive])
13351 continue;
13352
13353 if (m_reactiveTimer[reactive] <= p_time)
13354 {
13355 m_reactiveTimer[reactive] = 0;
13356
13357 switch (reactive)
13358 {
13359 case REACTIVE_DEFENSE:
13362 break;
13366 break;
13367 case REACTIVE_OVERPOWER:
13369 {
13371 }
13372 break;
13374 if (IsHunterPet())
13376 break;
13377 default:
13378 break;
13379 }
13380 }
13381 else
13382 {
13383 m_reactiveTimer[reactive] -= p_time;
13384 }
13385 }
13386}
ReactiveType
Definition Unit.h:618

References AURA_STATE_DEFENSE, AURA_STATE_HUNTER_PARRY, CLASS_CONTEXT_ABILITY_REACTIVE, CLASS_HUNTER, CLASS_WARRIOR, ClearComboPoints(), HasAuraState(), IsClass(), IsHunterPet(), m_reactiveTimer, MAX_REACTIVE, ModifyAuraState(), REACTIVE_DEFENSE, REACTIVE_HUNTER_PARRY, REACTIVE_OVERPOWER, and REACTIVE_WOLVERINE_BITE.

Referenced by Update().

◆ UpdateResistanceBuffModsMod()

void Unit::UpdateResistanceBuffModsMod ( SpellSchools  school)
6437{
6438 float modPos = 0.0f;
6439 float modNeg = 0.0f;
6440
6441 // these auras are always positive
6443 modPos += GetTotalAuraModifier(SPELL_AURA_MOD_RESISTANCE, [school](AuraEffect const* aurEff) -> bool
6444 {
6445 if ((aurEff->GetMiscValue() & (1 << school)) && aurEff->GetAmount() > 0)
6446 return true;
6447 return false;
6448 });
6449
6450 modNeg = GetTotalAuraModifier(SPELL_AURA_MOD_RESISTANCE, [school](AuraEffect const* aurEff) -> bool
6451 {
6452 if ((aurEff->GetMiscValue() & (1 << school)) && aurEff->GetAmount() < 0)
6453 return true;
6454 return false;
6455 });
6456
6458 modPos *= factor;
6459 modNeg *= factor;
6460
6463}
@ SPELL_AURA_MOD_RESISTANCE
Definition SpellAuraDefines.h:85
@ SPELL_AURA_MOD_RESISTANCE_EXCLUSIVE
Definition SpellAuraDefines.h:206
@ SPELL_AURA_MOD_RESISTANCE_PCT
Definition SpellAuraDefines.h:164

References AsUnderlyingType(), AuraEffect::GetAmount(), GetMaxPositiveAuraModifierByMiscMask(), AuraEffect::GetMiscValue(), GetTotalAuraModifier(), GetTotalAuraMultiplierByMiscMask(), Object::SetFloatValue(), SPELL_AURA_MOD_RESISTANCE, SPELL_AURA_MOD_RESISTANCE_EXCLUSIVE, SPELL_AURA_MOD_RESISTANCE_PCT, UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE, and UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE.

Referenced by AuraEffect::HandleAuraModResistance(), AuraEffect::HandleAuraModResistanceExclusive(), and AuraEffect::HandleModResistancePercent().

◆ UpdateResistances()

virtual void Unit::UpdateResistances ( uint32  school)
pure virtual

Implemented in Creature, Player, and Totem.

Referenced by UpdateAllResistances(), and UpdateUnitMod().

◆ UpdateSpeed()

void Unit::UpdateSpeed ( UnitMoveType  mtype,
bool  forced 
)
Todo:
possible affect only on MOVE_RUN
11132{
11133 int32 main_speed_mod = 0;
11134 float stack_bonus = 1.0f;
11135 float non_stack_bonus = 1.0f;
11136
11137 switch (mtype)
11138 {
11139 // Only apply debuffs
11140 case MOVE_FLIGHT_BACK:
11141 case MOVE_RUN_BACK:
11142 case MOVE_SWIM_BACK:
11143 case MOVE_WALK:
11144 break;
11145 case MOVE_RUN:
11146 {
11147 if (IsMounted()) // Use on mount auras
11148 {
11152 }
11153 else
11154 {
11158 }
11159 break;
11160 }
11161 case MOVE_SWIM:
11162 {
11163 // xinef: check for forced_speed_mod of sea turtle
11165 for (Unit::AuraEffectList::const_iterator itr = swimAuras.begin(); itr != swimAuras.end(); ++itr)
11166 {
11167 // xinef: sea turtle only, it is not affected by any increasing / decreasing effects
11168 if ((*itr)->GetId() == 64731 /*SPELL_SEA_TURTLE*/)
11169 {
11170 SetSpeed(mtype, AddPct(non_stack_bonus, (*itr)->GetAmount()), forced);
11171 return;
11172 }
11173 else if (
11174 // case: increase speed
11175 ((*itr)->GetAmount() > 0 && (*itr)->GetAmount() > main_speed_mod) ||
11176 // case: decrease speed
11177 ((*itr)->GetAmount() < 0 && (*itr)->GetAmount() < main_speed_mod)
11178 )
11179 {
11180 main_speed_mod = (*itr)->GetAmount();
11181 }
11182 }
11183 break;
11184 }
11185 case MOVE_FLIGHT:
11186 {
11187 if (IsCreature() && IsControlledByPlayer()) // not sure if good for pet
11188 {
11191
11192 // for some spells this mod is applied on vehicle owner
11193 int32 owner_speed_mod = 0;
11194
11195 if (Unit* owner = GetCharmer())
11196 owner_speed_mod = owner->GetMaxPositiveAuraModifier(SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED);
11197
11198 main_speed_mod = std::max(main_speed_mod, owner_speed_mod);
11199 }
11200 else if (IsMounted())
11201 {
11205 }
11206 else // Use not mount (shapeshift for example) auras (should stack)
11207 {
11211 }
11212
11213 // Update speed for vehicle if available
11214 if (IsPlayer() && GetVehicle())
11216 break;
11217 }
11218 default:
11219 LOG_ERROR("entities.unit", "Unit::UpdateSpeed: Unsupported move type ({})", mtype);
11220 return;
11221 }
11222
11223 // now we ready for speed calculation
11224 float speed = std::max(non_stack_bonus, stack_bonus);
11225 if (main_speed_mod)
11226 AddPct(speed, main_speed_mod);
11227
11228 switch (mtype)
11229 {
11230 case MOVE_RUN:
11231 case MOVE_SWIM:
11232 case MOVE_FLIGHT:
11233 {
11234 // Set creature speed rate
11235 if (IsCreature())
11236 {
11237 if (IsPet() && ToPet()->isControlled() && IsControlledByPlayer())
11238 {
11239 // contant value for player pets
11240 speed *= 1.15f;
11241 }
11242 else
11243 {
11244 speed *= ToCreature()->GetCreatureTemplate()->speed_run; // at this point, MOVE_WALK is never reached
11245 }
11246 }
11247
11248 // Normalize speed by 191 aura SPELL_AURA_USE_NORMAL_MOVEMENT_SPEED if need
11251 {
11252 if (Creature* creature = ToCreature())
11253 {
11254 // use creature helper which now consults creature_immunities table
11255 if (creature->HasMechanicTemplateImmunity(1ULL << MECHANIC_SNARE) ||
11256 creature->HasMechanicTemplateImmunity(1ULL << MECHANIC_DAZE))
11257 break;
11258 }
11259
11260 // Use speed from aura
11261 float max_speed = normalization / (IsControlledByPlayer() ? playerBaseMoveSpeed[mtype] : baseMoveSpeed[mtype]);
11262 if (speed > max_speed)
11263 speed = max_speed;
11264 }
11265 break;
11266 }
11267 default:
11268 break;
11269 }
11270
11271 int32 slowFromHealth = 0;
11272 Creature* creature = ToCreature();
11273 // ignore pets, player owned vehicles, and mobs immune to snare
11274 if (creature
11275 && !IsPet()
11276 && !(IsControlledByPlayer() && IsVehicle())
11277 && !(creature->HasMechanicTemplateImmunity(1ULL << MECHANIC_SNARE))
11278 && !(creature->IsDungeonBoss()))
11279 {
11280 // 1.6% for each % under 30.
11281 // use min(0, health-30) so that we don't boost mobs above 30.
11282 slowFromHealth = (int32) std::min(0.0f, (1.66f * (GetHealthPct() - 30.0f)));
11283 }
11284
11285 if (slowFromHealth)
11286 {
11287 AddPct(speed, slowFromHealth);
11288 }
11289
11290 // Apply strongest slow aura mod to speed
11292 if (slow)
11293 AddPct(speed, slow);
11294
11295 if (float minSpeedMod = (float)GetMaxPositiveAuraModifier(SPELL_AURA_MOD_MINIMUM_SPEED))
11296 {
11297 float base_speed = (IsCreature() ? ToCreature()->GetCreatureTemplate()->speed_run : 1.0f);
11298 float min_speed = base_speed * (minSpeedMod / 100.0f);
11299 if (speed < min_speed)
11300 speed = min_speed;
11301 }
11302
11303 SetSpeed(mtype, speed, forced);
11304}
@ MECHANIC_DAZE
Definition SharedDefines.h:1340
@ SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED
Definition SpellAuraDefines.h:269
@ SPELL_AURA_MOD_MOUNTED_FLIGHT_SPEED_ALWAYS
Definition SpellAuraDefines.h:272
@ SPELL_AURA_MOD_INCREASE_SPEED
Definition SpellAuraDefines.h:94
@ SPELL_AURA_MOD_FLIGHT_SPEED_ALWAYS
Definition SpellAuraDefines.h:271
@ SPELL_AURA_MOD_MOUNTED_SPEED_NOT_STACK
Definition SpellAuraDefines.h:235
@ SPELL_AURA_MOD_SPEED_NOT_STACK
Definition SpellAuraDefines.h:234
@ SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACKING
Definition SpellAuraDefines.h:273
@ SPELL_AURA_MOD_INCREASE_SWIM_SPEED
Definition SpellAuraDefines.h:121
@ SPELL_AURA_MOD_MINIMUM_SPEED
Definition SpellAuraDefines.h:368
@ SPELL_AURA_MOD_SPEED_ALWAYS
Definition SpellAuraDefines.h:192
@ SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED_NOT_STACKING
Definition SpellAuraDefines.h:274
@ SPELL_AURA_MOD_MOUNTED_SPEED_ALWAYS
Definition SpellAuraDefines.h:193
@ SPELL_AURA_USE_NORMAL_MOVEMENT_SPEED
Definition SpellAuraDefines.h:254
@ MOVE_FLIGHT
Definition UnitDefines.h:362
@ MOVE_SWIM
Definition UnitDefines.h:359
@ MOVE_FLIGHT_BACK
Definition UnitDefines.h:363
@ MOVE_SWIM_BACK
Definition UnitDefines.h:360
@ MOVE_RUN_BACK
Definition UnitDefines.h:358
@ MOVE_WALK
Definition UnitDefines.h:356
bool HasMechanicTemplateImmunity(uint64 mask) const
Definition Creature.cpp:2220
void SetSpeed(UnitMoveType mtype, float rate, bool forced=false)
Definition Unit.cpp:11311
float speed_run
Definition CreatureData.h:202

References AddPct(), baseMoveSpeed, GetAuraEffectsByType(), GetCharmer(), Creature::GetCreatureTemplate(), GetHealthPct(), GetMaxNegativeAuraModifier(), GetMaxPositiveAuraModifier(), GetTotalAuraModifier(), GetTotalAuraMultiplier(), GetVehicle(), GetVehicleBase(), Creature::HasMechanicTemplateImmunity(), IsControlledByPlayer(), Object::IsCreature(), Creature::IsDungeonBoss(), IsMounted(), IsPet(), Object::IsPlayer(), IsVehicle(), LOG_ERROR, MECHANIC_DAZE, MECHANIC_SNARE, MOVE_FLIGHT, MOVE_FLIGHT_BACK, MOVE_RUN, MOVE_RUN_BACK, MOVE_SWIM, MOVE_SWIM_BACK, MOVE_WALK, playerBaseMoveSpeed, SetSpeed(), CreatureTemplate::speed_run, SPELL_AURA_MOD_DECREASE_SPEED, SPELL_AURA_MOD_FLIGHT_SPEED_ALWAYS, SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED_NOT_STACKING, SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACKING, SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED, SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED, SPELL_AURA_MOD_INCREASE_MOUNTED_SPEED, SPELL_AURA_MOD_INCREASE_SPEED, SPELL_AURA_MOD_INCREASE_SWIM_SPEED, SPELL_AURA_MOD_MINIMUM_SPEED, SPELL_AURA_MOD_MOUNTED_FLIGHT_SPEED_ALWAYS, SPELL_AURA_MOD_MOUNTED_SPEED_ALWAYS, SPELL_AURA_MOD_MOUNTED_SPEED_NOT_STACK, SPELL_AURA_MOD_SPEED_ALWAYS, SPELL_AURA_MOD_SPEED_NOT_STACK, SPELL_AURA_USE_NORMAL_MOVEMENT_SPEED, Object::ToCreature(), ToPet(), and UpdateSpeed().

Referenced by Creature::AtDisengage(), Creature::AtEngage(), Creature::DoFleeToGetAssistance(), AuraEffect::HandleAuraModDecreaseSpeed(), AuraEffect::HandleAuraModIncreaseFlightSpeed(), AuraEffect::HandleAuraModIncreaseSpeed(), AuraEffect::HandleAuraModIncreaseSwimSpeed(), AuraEffect::HandleAuraModUseNormalSpeed(), spell_brewfest_main_ram_buff::HandleEffectPeriodic(), RemoveCharmedBy(), SetHealth(), SetSpeed(), and UpdateSpeed().

◆ UpdateSplineMovement()

void Unit::UpdateSplineMovement ( uint32  t_diff)
private
696{
697 if (movespline->Finalized())
698 return;
699
700 // xinef: process movementinform
701 // this code cant be placed inside EscortMovementGenerator, because we cant delete active MoveGen while it is updated
702 SplineHandler handler(this);
703 movespline->updateState(t_diff, handler);
704 // Xinef: Spline was cleared by StopMoving, return
705 if (!movespline->Initialized())
706 {
708 return;
709 }
710
711 bool arrived = movespline->Finalized();
712
713 if (arrived)
714 {
716
717 if (movespline->HasAnimation() && IsCreature() && IsAlive())
719 }
720
721 // pussywizard: update always! not every 400ms, because movement generators need the actual position
722 //m_movesplineTimer.Update(t_diff);
723 //if (m_movesplineTimer.Passed() || arrived)
725}
AnimTier
Definition MotionMaster.h:100
uint8 GetAnimationType() const
Definition MoveSpline.h:128
void updateState(int32 difftime, UpdateHandler &handler)
Definition MoveSpline.h:100
bool HasAnimation() const
Definition MoveSpline.h:127
Definition Unit.cpp:675
void SetAnimTier(AnimTier animTier)
Definition Unit.cpp:11930

References DisableSpline(), Movement::MoveSpline::Finalized(), Movement::MoveSpline::GetAnimationType(), Movement::MoveSpline::HasAnimation(), Movement::MoveSpline::Initialized(), IsAlive(), Object::IsCreature(), movespline, SetAnimTier(), UpdateSplinePosition(), and Movement::MoveSpline::updateState().

Referenced by Update().

◆ UpdateSplinePosition()

void Unit::UpdateSplinePosition ( )
private
728{
729 //static uint32 const positionUpdateDelay = 400;
730
731 //m_movesplineTimer.Reset(positionUpdateDelay);
733
735 {
737 pos.m_positionX = loc.x;
738 pos.m_positionY = loc.y;
739 pos.m_positionZ = loc.z;
741
742 if (TransportBase* transport = GetDirectTransport())
743 transport->CalculatePassengerPosition(loc.x, loc.y, loc.z, &loc.orientation);
744 }
745
746 // Xinef: if we had spline running update orientation along with position
747 //if (HasUnitState(UNIT_STATE_CANNOT_TURN))
748 // loc.orientation = GetOrientation();
749
750 if (IsPlayer() || IsPet())
751 UpdatePosition(loc.x, loc.y, loc.z, loc.orientation);
752 else
753 ToCreature()->SetPosition(loc.x, loc.y, loc.z, loc.orientation);
754}
void SetPosition(float x, float y, float z, float o)
Definition Creature.cpp:3270
Location ComputePosition() const
Definition MoveSpline.cpp:26
bool onTransport
Definition MoveSpline.h:130
Definition VehicleDefines.h:130
TransportBase * GetDirectTransport() const
Definition Unit.cpp:15036
Position pos
Definition Object.h:309
Definition MoveSpline.h:27
float orientation
Definition MoveSpline.h:33
float m_positionZ
Definition Position.h:57
float m_positionX
Definition Position.h:55
float m_positionY
Definition Position.h:56

References Movement::MoveSpline::ComputePosition(), GetDirectTransport(), IsPet(), Object::IsPlayer(), WorldObject::m_movementInfo, Position::m_positionX, Position::m_positionY, Position::m_positionZ, movespline, Movement::MoveSpline::onTransport, Movement::Location::orientation, MovementInfo::TransportInfo::pos, Position::SetOrientation(), Creature::SetPosition(), Object::ToCreature(), MovementInfo::transport, and UpdatePosition().

Referenced by StopMoving(), and UpdateSplineMovement().

◆ UpdateStatBuffMod()

void Unit::UpdateStatBuffMod ( Stats  stat)
6466{
6467 float modPos = 0.0f;
6468 float modNeg = 0.0f;
6469 float factor = 0.0f;
6470
6471 UnitMods const unitMod = static_cast<UnitMods>(UNIT_MOD_STAT_START + AsUnderlyingType(stat));
6472
6473 // includes value from items and enchantments
6474 float modValue = GetFlatModifierValue(unitMod, BASE_VALUE);
6475 if (modValue > 0.f)
6476 modPos += modValue;
6477 else
6478 modNeg += modValue;
6479
6480 modPos += GetTotalAuraModifier(SPELL_AURA_MOD_STAT, [stat](AuraEffect const* aurEff) -> bool
6481 {
6482 if ((aurEff->GetMiscValue() < 0 || aurEff->GetMiscValue() == stat) && aurEff->GetAmount() > 0)
6483 return true;
6484 return false;
6485 });
6486
6487 modNeg += GetTotalAuraModifier(SPELL_AURA_MOD_STAT, [stat](AuraEffect const* aurEff) -> bool
6488 {
6489 if ((aurEff->GetMiscValue() < 0 || aurEff->GetMiscValue() == stat) && aurEff->GetAmount() < 0)
6490 return true;
6491 return false;
6492 });
6493
6494 factor = GetTotalAuraMultiplier(SPELL_AURA_MOD_PERCENT_STAT, [stat](AuraEffect const* aurEff) -> bool
6495 {
6496 if (aurEff->GetMiscValue() == -1 || aurEff->GetMiscValue() == stat)
6497 return true;
6498 return false;
6499 });
6500
6501 factor *= GetTotalAuraMultiplier(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE, [stat](AuraEffect const* aurEff) -> bool
6502 {
6503 if (aurEff->GetMiscValue() == -1 || aurEff->GetMiscValue() == stat)
6504 return true;
6505 return false;
6506 });
6507
6508 modPos *= factor;
6509 modNeg *= factor;
6510
6513}
@ SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE
Definition SpellAuraDefines.h:200
@ SPELL_AURA_MOD_STAT
Definition SpellAuraDefines.h:92
@ SPELL_AURA_MOD_PERCENT_STAT
Definition SpellAuraDefines.h:143

References AsUnderlyingType(), BASE_VALUE, AuraEffect::GetAmount(), GetFlatModifierValue(), AuraEffect::GetMiscValue(), GetTotalAuraModifier(), GetTotalAuraMultiplier(), Object::SetFloatValue(), SPELL_AURA_MOD_PERCENT_STAT, SPELL_AURA_MOD_STAT, SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE, UNIT_FIELD_NEGSTAT0, UNIT_FIELD_POSSTAT0, and UNIT_MOD_STAT_START.

Referenced by Player::_ApplyItemBonuses(), Player::ApplyEnchantment(), AuraEffect::HandleAuraModStat(), and AuraEffect::HandleModTotalPercentStat().

◆ UpdateStats()

virtual bool Unit::UpdateStats ( Stats  stat)
pure virtual

Implemented in Creature, Guardian, Player, and Totem.

Referenced by UpdateUnitMod().

◆ UpdateUnitMod()

void Unit::UpdateUnitMod ( UnitMods  unitMod)
12047{
12048 if (!CanModifyStats())
12049 return;
12050
12051 switch (unitMod)
12052 {
12059 break;
12060
12061 case UNIT_MOD_ARMOR:
12062 UpdateArmor();
12063 break;
12064 case UNIT_MOD_HEALTH:
12066 break;
12067
12068 case UNIT_MOD_MANA:
12069 case UNIT_MOD_RAGE:
12070 case UNIT_MOD_FOCUS:
12071 case UNIT_MOD_ENERGY:
12072 case UNIT_MOD_HAPPINESS:
12073 case UNIT_MOD_RUNE:
12076 break;
12077
12085 break;
12086
12089 break;
12092 break;
12093
12096 break;
12099 break;
12102 break;
12103
12104 default:
12105 break;
12106 }
12107}
@ UNIT_MOD_ARMOR
Definition Unit.h:162
@ UNIT_MOD_ATTACK_POWER
Definition Unit.h:169
@ UNIT_MOD_HEALTH
Definition Unit.h:154
@ UNIT_MOD_ATTACK_POWER_RANGED
Definition Unit.h:170
SpellSchools GetSpellSchoolByAuraGroup(UnitMods unitMod) const
Definition Unit.cpp:12223
Stats GetStatByAuraGroup(UnitMods unitMod) const
Definition Unit.cpp:12255
virtual void UpdateAttackPowerAndDamage(bool ranged=false)=0
Powers GetPowerTypeByAuraGroup(UnitMods unitMod) const
Definition Unit.cpp:12284
virtual void UpdateDamagePhysical(WeaponAttackType attType)
Definition StatSystem.cpp:60
virtual void UpdateArmor()=0
virtual void UpdateMaxPower(Powers power)=0
virtual bool UpdateStats(Stats stat)=0
bool CanModifyStats() const
Definition Unit.h:1098
virtual void UpdateMaxHealth()=0

References BASE_ATTACK, CanModifyStats(), GetPowerTypeByAuraGroup(), GetSpellSchoolByAuraGroup(), GetStatByAuraGroup(), OFF_ATTACK, RANGED_ATTACK, UNIT_MOD_ARMOR, UNIT_MOD_ATTACK_POWER, UNIT_MOD_ATTACK_POWER_RANGED, UNIT_MOD_DAMAGE_MAINHAND, UNIT_MOD_DAMAGE_OFFHAND, UNIT_MOD_DAMAGE_RANGED, UNIT_MOD_ENERGY, UNIT_MOD_FOCUS, UNIT_MOD_HAPPINESS, UNIT_MOD_HEALTH, UNIT_MOD_MANA, UNIT_MOD_RAGE, UNIT_MOD_RESISTANCE_ARCANE, UNIT_MOD_RESISTANCE_FIRE, UNIT_MOD_RESISTANCE_FROST, UNIT_MOD_RESISTANCE_HOLY, UNIT_MOD_RESISTANCE_NATURE, UNIT_MOD_RESISTANCE_SHADOW, UNIT_MOD_RUNE, UNIT_MOD_RUNIC_POWER, UNIT_MOD_STAT_AGILITY, UNIT_MOD_STAT_INTELLECT, UNIT_MOD_STAT_SPIRIT, UNIT_MOD_STAT_STAMINA, UNIT_MOD_STAT_STRENGTH, UpdateArmor(), UpdateAttackPowerAndDamage(), UpdateDamagePhysical(), UpdateMaxHealth(), UpdateMaxPower(), UpdateResistances(), and UpdateStats().

Referenced by ApplyStatPctModifier(), HandleStatFlatModifier(), SetStatFlatModifier(), and SetStatPctModifier().

◆ Whisper() [1/2]

void Unit::Whisper ( std::string_view  text,
Language  language,
Player target,
bool  isBossWhisper = false 
)
virtual

Reimplemented in Player.

17200{
17201 if (!target)
17202 {
17203 return;
17204 }
17205
17207 WorldPacket data;
17208 ChatHandler::BuildChatPacket(data, isBossWhisper ? CHAT_MSG_RAID_BOSS_WHISPER : CHAT_MSG_MONSTER_WHISPER, language, this, target, text, 0, "", locale);
17209 target->SendDirectMessage(&data);
17210}
LocaleConstant
Definition Common.h:117
@ CHAT_MSG_MONSTER_WHISPER
Definition SharedDefines.h:3400
@ CHAT_MSG_RAID_BOSS_WHISPER
Definition SharedDefines.h:3427
static std::size_t BuildChatPacket(WorldPacket &data, ChatMsg chatType, Language language, ObjectGuid senderGUID, ObjectGuid receiverGUID, std::string_view message, uint8 chatTag, std::string const &senderName="", std::string const &receiverName="", uint32 achievementId=0, bool gmMessage=false, std::string const &channelName="")
Definition Chat.cpp:265
LocaleConstant GetSessionDbLocaleIndex() const
Definition WorldSession.h:579

References ChatHandler::BuildChatPacket(), CHAT_MSG_MONSTER_WHISPER, CHAT_MSG_RAID_BOSS_WHISPER, Player::GetSession(), WorldSession::GetSessionDbLocaleIndex(), and Player::SendDirectMessage().

Referenced by boss_zuramat::ExecuteEvent(), npc_commandscript::HandleNpcWhisperCommand(), spell_lich_king_whisper::HandleScript(), and Map::ScriptsProcess().

◆ Whisper() [2/2]

void Unit::Whisper ( uint32  textId,
Player target,
bool  isBossWhisper = false 
)
virtual

Reimplemented in Player.

17258{
17259 if (!target)
17260 {
17261 return;
17262 }
17263
17264 BroadcastText const* bct = sObjectMgr->GetBroadcastText(textId);
17265 if (!bct)
17266 {
17267 LOG_ERROR("entities.unit", "Unit::Whisper: `broadcast_text` was not {} found", textId);
17268 return;
17269 }
17270
17272 WorldPacket data;
17273 ChatHandler::BuildChatPacket(data, isBossWhisper ? CHAT_MSG_RAID_BOSS_WHISPER : CHAT_MSG_MONSTER_WHISPER, LANG_UNIVERSAL, this, target, bct->GetText(locale, getGender()), 0, "", locale);
17274 target->SendDirectMessage(&data);
17275}
Definition ObjectMgr.h:435

References ChatHandler::BuildChatPacket(), CHAT_MSG_MONSTER_WHISPER, CHAT_MSG_RAID_BOSS_WHISPER, getGender(), Player::GetSession(), WorldSession::GetSessionDbLocaleIndex(), BroadcastText::GetText(), LANG_UNIVERSAL, LOG_ERROR, Player::SendDirectMessage(), and sObjectMgr.

◆ Yell() [1/2]

void Unit::Yell ( std::string_view  text,
Language  language,
WorldObject const *  target = nullptr 
)
virtual

◆ Yell() [2/2]

void Unit::Yell ( uint32  textId,
WorldObject const *  target = nullptr 
)
virtual

Reimplemented in Player.

17248{
17249 Talk(textId, CHAT_MSG_MONSTER_YELL, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_YELL), target);
17250}

References CHAT_MSG_MONSTER_YELL, CONFIG_LISTEN_RANGE_YELL, and sWorld.

Member Data Documentation

◆ _charmThreatInfo

CharmThreatMap Unit::_charmThreatInfo
protected

Referenced by RemoveCharmedBy().

◆ _dualWieldMode

◆ _instantCast

bool Unit::_instantCast
protected

◆ _isCombatDisallowed

bool Unit::_isCombatDisallowed
private

◆ _isWalkingBeforeCharm

bool Unit::_isWalkingBeforeCharm
private

Are we walking before we were charmed?

Referenced by SetCharm(), and Unit().

◆ _lastDamagedTargetGuid

◆ _lastExtraAttackSpell

uint32 Unit::_lastExtraAttackSpell
private

◆ _lastLiquid

LiquidTypeEntry const* Unit::_lastLiquid
protected

◆ _oldFactionId

uint32 Unit::_oldFactionId
private

faction before charm

Referenced by GetOldFactionId(), RemoveCharmedBy(), SetCharmedBy(), and Unit().

◆ _valuesUpdateCache

ValuesUpdateCache Unit::_valuesUpdateCache
private

◆ bRequestForcedVisibilityUpdate

◆ extraAttacksTargets

std::unordered_map<ObjectGuid , uint32 > Unit::extraAttacksTargets
private

Referenced by AddExtraAttacks(), and Update().

◆ i_AI

◆ i_disabledAI

UnitAI* Unit::i_disabledAI
protected

Referenced by UpdateCharmAI().

◆ i_motionMaster

MotionMaster* Unit::i_motionMaster
protected

◆ IsAIEnabled

◆ LastCharmerGUID

ObjectGuid Unit::LastCharmerGUID

◆ m_appliedAuras

◆ m_applyResilience

bool Unit::m_applyResilience
protected

◆ m_attackers

◆ m_attacking

Unit* Unit::m_attacking
protected

◆ m_attackTimer

◆ m_auraFlatModifiersGroup

float Unit::m_auraFlatModifiersGroup[UNIT_MOD_END][MODIFIER_TYPE_FLAT_END]
protected

◆ m_auraPctModifiersGroup

float Unit::m_auraPctModifiersGroup[UNIT_MOD_END][MODIFIER_TYPE_PCT_END]
protected

◆ m_auraStateAuras

◆ m_auraUpdateIterator

AuraMap::iterator Unit::m_auraUpdateIterator
protected

◆ m_AutoRepeatFirstCast

bool Unit::m_AutoRepeatFirstCast
protected

◆ m_baseSpellCritChance

◆ m_canModifyStats

bool Unit::m_canModifyStats
protected

◆ m_charmInfo

◆ m_cleanupDone

bool Unit::m_cleanupDone
private

◆ m_combatManager

◆ m_CombatTimer

uint32 Unit::m_CombatTimer
private

◆ m_ComboPointHolders

std::unordered_set<Unit*> Unit::m_ComboPointHolders
private

◆ m_comboPoints

int8 Unit::m_comboPoints
private

◆ m_comboTarget

◆ m_Controlled

◆ m_ControlledByPlayer

bool Unit::m_ControlledByPlayer

◆ m_CreatedByPlayer

bool Unit::m_CreatedByPlayer

◆ m_createStats

float Unit::m_createStats[MAX_STATS]
protected

◆ m_currentSpells

◆ m_deathState

◆ m_delayed_unit_ai_notify_timer

uint16 Unit::m_delayed_unit_ai_notify_timer

Referenced by Unit(), and Update().

◆ m_delayed_unit_relocation_timer

uint16 Unit::m_delayed_unit_relocation_timer

Referenced by Unit(), Player::Update(), and Update().

◆ m_Diminishing

◆ m_duringRemoveFromWorld

bool Unit::m_duringRemoveFromWorld
private

◆ m_dynObj

◆ m_extraAttacks

uint32 Unit::m_extraAttacks

◆ m_followingMe

std::unordered_set<AbstractFollower*> Unit::m_followingMe
private

◆ m_gameObj

◆ m_interruptableAuras

◆ m_interruptMask

◆ m_last_notify_mstime

uint32 Unit::m_last_notify_mstime

Referenced by Unit().

◆ m_last_notify_position

◆ m_lastManaUse

uint32 Unit::m_lastManaUse
private

◆ m_lastSanctuaryTime

uint32 Unit::m_lastSanctuaryTime

◆ m_modAttackSpeedPct

◆ m_modAuras

◆ m_modMeleeHitChance

◆ m_modRangedHitChance

◆ m_modSpellHitChance

◆ m_movedByPlayer

◆ m_ObjectSlot

◆ m_ownedAuras

◆ m_petAuras

PetAuraSet Unit::m_petAuras

◆ m_procDeep

int32 Unit::m_procDeep
protected

Referenced by CanProc(), and SetCantProc().

◆ m_race

uint8 Unit::m_race
protected

◆ m_reactiveTimer

uint32 Unit::m_reactiveTimer[MAX_REACTIVE]
protected

◆ m_realRace

uint8 Unit::m_realRace
protected

◆ m_regenTimer

◆ m_removedAuras

AuraList Unit::m_removedAuras
protected

◆ m_removedAurasCount

◆ m_scAuras

AuraList Unit::m_scAuras
protected

◆ m_sharedVision

◆ m_speed_rate

float Unit::m_speed_rate[MAX_MOVE_TYPE]
protected

◆ m_spellImmune

◆ m_state

uint32 Unit::m_state
private

◆ m_SummonSlot

◆ m_threatManager

◆ m_transform

uint32 Unit::m_transform
protected

Referenced by getTransForm(), setTransForm(), and Unit().

◆ m_unitTypeMask

◆ m_vehicle

◆ m_vehicleKit

Vehicle* Unit::m_vehicleKit
protected

◆ m_visibleAuras

◆ m_weaponDamage

◆ movespline

◆ NeedChangeAI

bool Unit::NeedChangeAI

◆ SafeUnitPointerSet

std::set<SafeUnitPointer*> Unit::SafeUnitPointerSet

The documentation for this class was generated from the following files: