AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
Creature Class Reference

#include "Creature.h"

Inheritance diagram for Creature:
Unit GridObject< Creature > MovableMapObject UpdatableMapObject WorldObject Object WorldLocation Position TempSummon Minion Guardian Puppet Totem Pet

Public Member Functions

 Creature (bool isWorldObject=false)
 
 ~Creature () override
 
void AddToWorld () override
 
void RemoveFromWorld () override
 
float GetNativeObjectScale () const override
 
void SetObjectScale (float scale) override
 
void SetDisplayId (uint32 displayId, float displayScale=1.f) override
 
void SetDisplayFromModel (uint32 modelIdx)
 
void DisappearAndDie ()
 
bool isVendorWithIconSpeak () const
 
bool Create (ObjectGuid::LowType guidlow, Map *map, uint32 phaseMask, uint32 Entry, uint32 vehId, float x, float y, float z, float ang, const CreatureData *data=nullptr)
 
bool LoadCreaturesAddon (bool reload=false)
 
void SelectLevel (bool changelevel=true)
 
void LoadEquipment (int8 id=1, bool force=false)
 
ObjectGuid::LowType GetSpawnId () const
 
void Update (uint32 time) override
 
void GetRespawnPosition (float &x, float &y, float &z, float *ori=nullptr, float *dist=nullptr) const
 
void SetCorpseDelay (uint32 delay)
 
void SetCorpseRemoveTime (uint32 delay)
 
uint32 GetCorpseDelay () const
 
bool HasFlagsExtra (uint32 flag) const
 
bool IsRacialLeader () const
 
bool IsCivilian () const
 
bool IsTrigger () const
 
bool IsGuard () const
 
CreatureMovementData const & GetMovementTemplate () const
 
bool CanWalk () const
 
bool CanSwim () const override
 This method check the current flag/status of a creature and its inhabit type.
 
bool CanEnterWater () const override
 
bool CanFly () const override
 
bool CanHover () const
 
bool IsRooted () const
 
MovementGeneratorType GetDefaultMovementType () const override
 -------—End of Pet responses methods-------—
 
void SetDefaultMovementType (MovementGeneratorType mgt)
 
void SetReactState (ReactStates state)
 A creature can have 3 ReactStates : Agressive, Passive, Neutral.
 
ReactStates GetReactState () const
 
bool HasReactState (ReactStates state) const
 
void InitializeReactState ()
 Check if the creature has the specified ReactState.
 
bool isCanInteractWithBattleMaster (Player *player, bool msg) const
 
bool isCanTrainingAndResetTalentsOf (Player *player) const
 
bool IsValidTrainerForPlayer (Player *player, uint32 *npcFlags=nullptr) const
 
bool CanCreatureAttack (Unit const *victim, bool skipDistCheck=false) const
 
void LoadSpellTemplateImmunity ()
 
bool IsImmunedToSpell (SpellInfo const *spellInfo, Spell const *spell=nullptr) override
 
bool HasMechanicTemplateImmunity (uint32 mask) const
 
bool IsImmunedToSpellEffect (SpellInfo const *spellInfo, uint32 index) const override
 
bool isElite () const
 
bool isWorldBoss () const
 
bool IsDungeonBoss () const
 
bool IsImmuneToKnockback () const
 
bool IsAvoidingAOE () const
 
uint8 getLevelForTarget (WorldObject const *target) const override
 
bool IsInEvadeMode () const
 
bool IsEvadingAttacks () const
 
bool AIM_Initialize (CreatureAI *ai=nullptr)
 
void Motion_Initialize ()
 
CreatureAIAI () const
 
bool SetWalk (bool enable) override
 Enable or disable the creature's walk mode by removing: MOVEMENTFLAG_WALKING. Infom also the client.
 
bool SetDisableGravity (bool disable, bool packetOnly=false, bool updateAnimationTier=true) override
 Enable or disable the creature's fly mode by adding or removing: MOVEMENTFLAG_FLYING. Infom also the client.
 
bool SetSwim (bool enable) override
 
bool SetCanFly (bool enable, bool packetOnly=false) override
 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().
 
bool SetWaterWalking (bool enable, bool packetOnly=false) override
 Allow to walk on water. Doesn't inform the client. Need to use SendMovementWaterWalking() if it's for players.
 
bool SetFeatherFall (bool enable, bool packetOnly=false) override
 
bool SetHover (bool enable, bool packetOnly=false, bool updateAnimationTier=true) override
 
bool HasSpellFocus (Spell const *focusSpell=nullptr) const
 
uint32 GetShieldBlockValue () const override
 
SpellSchoolMask GetMeleeDamageSchoolMask (WeaponAttackType=BASE_ATTACK, uint8=0) const override
 
void SetMeleeDamageSchool (SpellSchools school)
 
void _AddCreatureSpellCooldown (uint32 spell_id, uint16 categoryId, uint32 end_time)
 
void AddSpellCooldown (uint32 spell_id, uint32, uint32 end_time, bool needSendToClient=false, bool forceSendToSpectator=false) override
 
bool HasSpellCooldown (uint32 spell_id) const override
 
uint32 GetSpellCooldown (uint32 spell_id) const
 
void ProhibitSpellSchool (SpellSchoolMask idSchoolMask, uint32 unTimeMs) override
 
bool IsSpellProhibited (SpellSchoolMask idSchoolMask) const
 
void ClearProhibitedSpellTimers ()
 
bool HasSpell (uint32 spellID) const override
 
void UpdateMovementFlags ()
 
uint32 GetRandomId (uint32 id1, uint32 id2, uint32 id3)
 
bool UpdateEntry (uint32 entry, const CreatureData *data=nullptr, bool changelevel=true, bool updateAI=false)
 
bool UpdateEntry (uint32 entry, bool updateAI)
 
bool UpdateStats (Stats stat) override
 
bool UpdateAllStats () override
 
void UpdateResistances (uint32 school) override
 
void UpdateArmor () override
 
void UpdateMaxHealth () override
 
void UpdateMaxPower (Powers power) override
 
void UpdateAttackPowerAndDamage (bool ranged=false) override
 
void CalculateMinMaxDamage (WeaponAttackType attType, bool normalized, bool addTotalPct, float &minDamage, float &maxDamage, uint8 damageIndex) override
 
void LoadSparringPct ()
 
float GetSparringPct () const
 
bool HasWeapon (WeaponAttackType type) const override
 
bool HasWeaponForAttack (WeaponAttackType type) const override
 
void SetCanDualWield (bool value) override
 
int8 GetOriginalEquipmentId () const
 
uint8 GetCurrentEquipmentId ()
 
void SetCurrentEquipmentId (uint8 id)
 
float GetSpellDamageMod (int32 Rank)
 
VendorItemData const * GetVendorItems () const
 
uint32 GetVendorItemCurrentCount (VendorItem const *vItem)
 
uint32 UpdateVendorItemCurrentCount (VendorItem const *vItem, uint32 used_count)
 
TrainerSpellData const * GetTrainerSpells () const
 
CreatureTemplate const * GetCreatureTemplate () const
 
CreatureData const * GetCreatureData () const
 
void SetDetectionDistance (float dist)
 
CreatureAddon const * GetCreatureAddon () const
 
std::string const & GetAIName () const
 
std::string GetScriptName () const
 
uint32 GetScriptId () const
 
std::string const & GetNameForLocaleIdx (LocaleConstant locale_idx) const override
 
void setDeathState (DeathState s, bool despawn=false) override
 A creature can be in 4 different states: Alive, JustDied, Corpse, and JustRespawned. The cycle follows the next order:
 
bool LoadFromDB (ObjectGuid::LowType guid, Map *map, bool allowDuplicate=false)
 
bool LoadCreatureFromDB (ObjectGuid::LowType guid, Map *map, bool addToMap=true, bool allowDuplicate=false)
 
void SaveToDB ()
 
virtual void SaveToDB (uint32 mapid, uint8 spawnMask, uint32 phaseMask)
 
virtual void DeleteFromDB ()
 
ObjectGuid GetLootRecipientGUID () const
 
PlayerGetLootRecipient () const
 
ObjectGuid::LowType GetLootRecipientGroupGUID () const
 
GroupGetLootRecipientGroup () const
 
bool hasLootRecipient () const
 
bool isTappedBy (Player const *player) const
 
bool CanGeneratePickPocketLoot () const
 
void SetPickPocketLootTime ()
 
void ResetPickPocketLootTime ()
 
void SetLootRecipient (Unit *unit, bool withGroup=true)
 
void AllLootRemovedFromCorpse ()
 
uint16 GetLootMode () const
 
bool HasLootMode (uint16 lootMode) const
 
void SetLootMode (uint16 lootMode)
 
void AddLootMode (uint16 lootMode)
 
void RemoveLootMode (uint16 lootMode)
 
void ResetLootMode ()
 
SpellInfo const * reachWithSpellAttack (Unit *victim)
 
SpellInfo const * reachWithSpellCure (Unit *victim)
 
bool CanStartAttack (Unit const *u) const
 
float GetAggroRange (Unit const *target) const
 
float GetAttackDistance (Unit const *player) const
 
float GetDetectionRange () const
 
void SendAIReaction (AiReaction reactionType)
 
UnitSelectNearestTarget (float dist=0, bool playerOnly=false) const
 Select nearest hostile unit within the given distance (regardless of threat list).
 
UnitSelectNearestTargetInAttackDistance (float dist) const
 Select nearest hostile unit within the given attack distance (i.e. distance is ignored if > than ATTACK_DISTANCE), regardless of threat list.
 
void DoFleeToGetAssistance ()
 
void CallForHelp (float fRadius, Unit *target=nullptr)
 
void CallAssistance (Unit *target=nullptr)
 
void SetNoCallAssistance (bool val)
 
void SetNoSearchAssistance (bool val)
 
bool HasSearchedAssistance ()
 
bool CanAssistTo (Unit const *u, Unit const *enemy, bool checkfaction=true) const
 
bool _IsTargetAcceptable (Unit const *target) const
 
bool CanIgnoreFeignDeath () const
 
void UpdateMoveInLineOfSightState ()
 
bool IsMoveInLineOfSightDisabled ()
 
bool IsMoveInLineOfSightStrictlyDisabled ()
 
void RemoveCorpse (bool setSpawnTime=true, bool skipVisibility=false)
 
void DespawnOrUnsummon (Milliseconds msTimeToDespawn, Seconds forcedRespawnTimer)
 
void DespawnOrUnsummon (uint32 msTimeToDespawn=0)
 
void DespawnOnEvade (Seconds respawnDelay=20s)
 
time_t const & GetRespawnTime () const
 
time_t GetRespawnTimeEx () const
 
void SetRespawnTime (uint32 respawn)
 
void Respawn (bool force=false)
 
void SaveRespawnTime () override
 
uint32 GetRespawnDelay () const
 
void SetRespawnDelay (uint32 delay)
 
uint32 GetCombatPulseDelay () const
 
void SetCombatPulseDelay (uint32 delay)
 
float GetWanderDistance () const
 
void SetWanderDistance (float dist)
 
void DoImmediateBoundaryCheck ()
 
void SendZoneUnderAttackMessage (Player *attacker)
 Send a message to LocalDefense channel for players opposition team in the zone.
 
void SetInCombatWithZone ()
 Set in combat all units in the dungeon/raid. Affect only units with IsAIEnabled.
 
bool hasQuest (uint32 quest_id) const override
 
bool hasInvolvedQuest (uint32 quest_id) const override
 
bool isRegeneratingHealth ()
 
void SetRegeneratingHealth (bool enable)
 
void SetRegeneratingPower (bool enable)
 
virtual uint8 GetPetAutoSpellSize () const
 
virtual uint32 GetPetAutoSpellOnPos (uint8 pos) const
 
void SetCannotReachTarget (ObjectGuid const &target=ObjectGuid::Empty)
 
bool CanNotReachTarget () const
 
bool IsNotReachableAndNeedRegen () const
 
void SetPosition (float x, float y, float z, float o)
 
void SetPosition (const Position &pos)
 
void SetHomePosition (float x, float y, float z, float o)
 
void SetHomePosition (const Position &pos)
 
void GetHomePosition (float &x, float &y, float &z, float &ori) const
 
Position const & GetHomePosition () const
 
void SetTransportHomePosition (float x, float y, float z, float o)
 
void SetTransportHomePosition (const Position &pos)
 
void GetTransportHomePosition (float &x, float &y, float &z, float &ori) const
 
Position const & GetTransportHomePosition () const
 
uint32 GetWaypointPath () const
 
void LoadPath (uint32 pathid)
 
uint32 GetCurrentWaypointID () const
 
void UpdateWaypointID (uint32 wpID)
 
void SearchFormation ()
 
CreatureGroup const * GetFormation () const
 
CreatureGroupGetFormation ()
 
void SetFormation (CreatureGroup *formation)
 
UnitSelectVictim ()
 
void SetReputationRewardDisabled (bool disable)
 
bool IsReputationRewardDisabled () const
 
void SetLootRewardDisabled (bool disable)
 
bool IsLootRewardDisabled () const
 
bool IsDamageEnoughForLootingAndReward () const
 
void LowerPlayerDamageReq (uint32 unDamage, bool damagedByPlayer=true)
 
void ResetPlayerDamageReq ()
 
uint32 GetPlayerDamageReq () const
 
uint32 GetOriginalEntry () const
 
void SetOriginalEntry (uint32 entry)
 
void SetTarget (ObjectGuid guid=ObjectGuid::Empty) override
 
void ClearTarget ()
 
void FocusTarget (Spell const *focusSpell, WorldObject const *target)
 
void ReleaseFocus (Spell const *focusSpell)
 
bool IsMovementPreventedByCasting () const override
 
std::shared_ptr< time_t > const & GetLastLeashExtensionTimePtr () const
 
void SetLastLeashExtensionTimePtr (std::shared_ptr< time_t > const &timer)
 
void ClearLastLeashExtensionTimePtr ()
 
time_t GetLastLeashExtensionTime () const
 
void UpdateLeashExtensionTime ()
 
uint8 GetLeashTimer () const
 
bool IsFreeToMove ()
 
bool HasSwimmingFlagOutOfCombat () const
 
void RefreshSwimmingFlag (bool recheck=false)
 
void SetAssistanceTimer (uint32 value)
 
void ModifyThreatPercentTemp (Unit *victim, int32 percent, Milliseconds duration)
 
void ResumeChasingVictim ()
 Helper to resume chasing current victim.
 
bool CanCastSpell (uint32 spellID) const
 Returns true if the creature is able to cast the spell.
 
ObjectGuid GetSummonerGUID () const
 Helper to get the creature's summoner GUID, if it is a summon.
 
void SetCombatMovement (bool allowMovement)
 
bool IsCombatMovementAllowed () const
 
std::string GetDebugInfo () const override
 
bool IsUpdateNeeded () override
 
- Public Member Functions inherited from Unit
 ~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 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
 
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
 
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
 
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)
 
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
 
bool IsEngaged () const
 
bool IsEngagedBy (Unit const *who) const
 
bool IsInCombat () const
 
bool IsInCombatWith (Unit const *who) const
 
bool IsPetInCombat () const
 
void CombatStart (Unit *target, bool initialAggro=true)
 
void CombatStartOnCast (Unit *target, bool initialAggro=true, uint32 duration=0)
 
void SetInCombatState (bool PvP, Unit *enemy=nullptr, uint32 duration=0)
 
void SetInCombatWith (Unit *enemy, uint32 duration=0)
 
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)
 
float ApplyTotalThreatModifier (float fThreat, SpellSchoolMask schoolMask=SPELL_SCHOOL_MASK_NORMAL)
 
void TauntApply (Unit *victim)
 
void TauntFadeOut (Unit *taunter)
 
ThreatMgrGetThreatMgr ()
 
ThreatMgr const & GetThreatMgr () const
 
void addHatedBy (HostileReference *pHostileReference)
 
void removeHatedBy (HostileReference *)
 
HostileRefMgrgetHostileRefMgr ()
 
void SetRedirectThreat (ObjectGuid guid, uint32 pct)
 
void ResetRedirectThreat ()
 
void ModifyRedirectThreat (int32 amount)
 
uint32 GetRedirectThreatPercent ()
 
UnitGetRedirectThreatTarget () const
 
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
 
bool HasMainhandWeapon () const
 
bool HasOffhandWeapon () const
 
bool HasRangedWeapon () const
 
bool hasMainhandWeaponForAttack () const
 
bool HasMainhandWeaponForAttack () const
 
bool HasOffhandWeaponForAttack () const
 
bool HasRangedWeaponForAttack () const
 
bool CanUseAttackType (uint8 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 HandleStatModifier (UnitMods unitMod, UnitModifierType modifierType, float amount, bool apply)
 
void SetModifierValue (UnitMods unitMod, UnitModifierType modifierType, float value)
 
float GetModifierValue (UnitMods unitMod, UnitModifierType modifierType) const
 
float GetTotalStatValue (Stats stat, float additionalValue=0.0f) const
 
void SetCanModifyStats (bool modifyStats)
 
bool CanModifyStats () const
 
void ApplyStatBuffMod (Stats stat, float val, bool apply)
 
void ApplyStatPercentBuffMod (Stats stat, float val, bool apply)
 
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)
 
int32 ModifyPowerPct (Powers power, float pct, bool apply=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
 
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
 
float GetResistanceBuffMods (SpellSchools school, bool positive) const
 
void SetResistance (SpellSchools school, int32 val)
 
void SetResistanceBuffMods (SpellSchools school, bool positive, float val)
 
void ApplyResistanceBuffModsMod (SpellSchools school, bool positive, float val, bool apply)
 
void ApplyResistanceBuffModsPercentMod (SpellSchools school, bool positive, float val, bool apply)
 
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 void UpdateAllResistances ()
 
virtual void UpdateDamagePhysical (WeaponAttackType attType)
 
void DealMeleeDamage (CalcDamageInfo *damageInfo, bool durabilityLoss)
 
void DealSpellDamage (SpellNonMeleeDamage *damageInfo, bool durabilityLoss, Spell const *spell=nullptr)
 
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)
 
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 HasSpellItemCooldown (uint32, uint32) const
 
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)
 
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 _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 (uint32 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 (uint32 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 GetTotalAuraModifierAreaExclusive (AuraType auratype) const
 
int32 GetTotalAuraModifier (AuraType auratype) const
 
float GetTotalAuraMultiplier (AuraType auratype) const
 
int32 GetMaxPositiveAuraModifier (AuraType auratype)
 
int32 GetMaxNegativeAuraModifier (AuraType auratype) 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 ProcDamageAndSpellFor (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 (std::list< AuraApplication * > &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, std::list< AuraApplication * > &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
 
void SetCurrentCastedSpell (Spell *pSpell)
 
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)
 
int32 SpellBaseHealingBonusTaken (SpellSchoolMask schoolMask)
 
float SpellPctHealingModsDone (Unit *victim, SpellInfo const *spellProto, DamageEffectType damagetype)
 
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)
 
void ApplySpellDispelImmunity (SpellInfo const *spellProto, DispelType type, bool apply)
 
bool IsImmunedToDamage (SpellSchoolMask meleeSchoolMask) const
 
bool IsImmunedToDamage (SpellInfo const *spellInfo) const
 
bool IsImmunedToDamage (Spell const *spell) const
 
bool IsImmunedToSchool (SpellSchoolMask meleeSchoolMask) const
 
bool IsImmunedToSchool (SpellInfo const *spellInfo) const
 
bool IsImmunedToSchool (Spell const *spell) const
 
bool IsImmunedToDamageOrSchool (SpellSchoolMask meleeSchoolMask) const
 
bool IsImmunedToDamageOrSchool (SpellInfo const *spellInfo) 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)
 
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
 
bool IsFlying () const
 
bool IsFalling () const
 
float GetHoverHeight () const
 
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)
 
MotionMasterGetMotionMaster ()
 
const MotionMasterGetMotionMaster () const
 
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
 
void SetStandState (uint8 state)
 
void SetStandFlags (uint8 flags)
 
void RemoveStandFlags (uint8 flags)
 
DeathState getDeathState ()
 
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 HasThreatAura () 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 addFollower (FollowerReference *pRef)
 
void removeFollower (FollowerReference *)
 
virtual float GetFollowAngle () const
 
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 void RecalculateObjectScale ()
 
uint32 GetDisplayId () const
 
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)
 
void SetTimedFacingToObject (WorldObject *object, uint32 time)
 
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)
 -------—Pet responses methods--------------—
 
void SendPetTalk (uint32 pettalk)
 
void SendPetAIReaction (ObjectGuid guid)
 
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 SendChangeCurrentVictimOpcode (HostileReference *pHostileReference)
 
void SendClearThreatListOpcode ()
 
void SendRemoveFromThreatListOpcode (HostileReference *pHostileReference)
 
void SendThreatListUpdate ()
 
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)
 
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
 
bool IsWithinDist (WorldObject const *obj, float dist2compare, bool is3D=true, bool useBoundingRadius=true) const
 
bool IsWithinDistInMap (WorldObject const *obj, float dist2compare, bool is3D=true, bool useBoundingRadius=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)
 
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)
 
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)
 
bool IsFarVisible () const
 
bool IsVisibilityOverridden () const
 
void SetVisibilityDistanceOverride (VisibilityDistanceType type)
 
bool IsWorldObject () const
 
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)
 
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
 
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 ApplyPercentModFloatValue (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
 
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
 
std::string ToString () const
 
- Public Member Functions inherited from GridObject< Creature >
bool IsInGrid () const
 
void AddToGrid (GridRefMgr< Creature > &m)
 
void RemoveFromGrid ()
 

Static Public Member Functions

static float _GetDamageMod (int32 Rank)
 
- Static Public Member Functions inherited from Unit
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)
 
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 ProcDamageAndSpell (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 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

struct { 
 
   ::Spell const *   Spell = nullptr 
 
   uint32   Delay = 0 
 
   ObjectGuid   Target 
 
   float   Orientation = 0.0f 
 
_spellFocusInfo 
 
Loot loot
 
uint32 m_spells [MAX_CREATURE_SPELLS]
 
CreatureSpellCooldowns m_CreatureSpellCooldowns
 
uint32 m_ProhibitSchoolTime [7]
 
uint32 m_groupLootTimer
 
uint32 lootingGroupLowGUID
 
float m_SightDistance
 
float m_CombatDistance
 
uint32 m_moveCircleMovementTime = MOVE_CIRCLE_CHECK_INTERVAL
 
uint32 m_moveBackwardsMovementTime = MOVE_BACKWARDS_CHECK_INTERVAL
 
uint32 m_extendLeashTime = EXTEND_LEASH_CHECK_INTERVAL
 
- Public Attributes inherited from Unit
uint32 m_extraAttacks
 
bool m_canDualWield
 
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_threatModifier [MAX_SPELL_SCHOOL]
 
float m_modAttackSpeedPct [3]
 
SpellImmuneList m_spellImmune [MAX_SPELL_IMMUNITY]
 
uint32 m_lastSanctuaryTime
 
PetAuraSet m_petAuras
 
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
 
ElunaEventProcessor * elunaEvents
 
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
 

Static Public Attributes

static constexpr uint32 MOVE_CIRCLE_CHECK_INTERVAL = 3000
 
static constexpr uint32 MOVE_BACKWARDS_CHECK_INTERVAL = 2000
 
static constexpr uint32 EXTEND_LEASH_CHECK_INTERVAL = 3000
 

Protected Member Functions

bool CreateFromProto (ObjectGuid::LowType guidlow, uint32 Entry, uint32 vehId, const CreatureData *data=nullptr)
 
bool InitEntry (uint32 entry, const CreatureData *data=nullptr)
 
void RegenerateHealth ()
 
void Regenerate (Powers power)
 
bool IsInvisibleDueToDespawn () const override
 
bool CanAlwaysSee (WorldObject const *obj) const override
 
bool IsAlwaysDetectableFor (WorldObject const *seer) const override
 
- Protected Member Functions inherited from Unit
 Unit (bool isWorldObject)
 
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 isStun=false)
 
- Protected Member Functions inherited from WorldObject
 WorldObject (bool isWorldObject)
 
void SetLocationMapId (uint32 _mapId)
 
void SetLocationInstanceId (uint32 _instanceId)
 
virtual bool IsNeverVisible () 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 Member Functions inherited from MovableMapObject
 MovableMapObject ()=default
 
Cell const & GetCurrentCell () const
 
- Protected Member Functions inherited from UpdatableMapObject
 UpdatableMapObject ()
 

Static Protected Member Functions

static float _GetHealthMod (int32 Rank)
 

Protected Attributes

VendorItemCounts m_vendorItemCounts
 
ObjectGuid m_lootRecipient
 
ObjectGuid::LowType m_lootRecipientGroup
 
time_t m_corpseRemoveTime
 Timers.
 
time_t m_respawnTime
 
time_t m_respawnedTime
 
uint32 m_respawnDelay
 
uint32 m_corpseDelay
 
float m_wanderDistance
 
uint32 m_boundaryCheckTime
 
uint16 m_transportCheckTimer
 
uint32 lootPickPocketRestoreTime
 
uint32 m_combatPulseTime
 
uint32 m_combatPulseDelay
 
ReactStates m_reactState
 
MovementGeneratorType m_defaultMovementType
 
ObjectGuid::LowType m_spawnId
 For new or temporary creatures is 0 for saved it is lowguid.
 
uint8 m_equipmentId
 
int8 m_originalEquipmentId
 
bool m_AlreadyCallAssistance
 
bool m_AlreadySearchedAssistance
 
bool m_regenHealth
 
bool m_regenPower
 
bool m_AI_locked
 
SpellSchoolMask m_meleeDamageSchoolMask
 
uint32 m_originalEntry
 
bool m_moveInLineOfSightDisabled
 
bool m_moveInLineOfSightStrictlyDisabled
 
Position m_homePosition
 
Position m_transportHomePosition
 
bool DisableReputationReward
 
bool DisableLootReward
 
CreatureTemplate const * m_creatureInfo
 
CreatureData const * m_creatureData
 
float m_detectionDistance
 
uint16 m_LootMode
 
float _sparringPct
 
- Protected Attributes inherited from Unit
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_auraModifiersGroup [UNIT_MOD_END][MODIFIER_TYPE_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
 
ThreatMgr m_ThreatMgr
 
CharmThreatMap _charmThreatInfo
 
Vehiclem_vehicle
 
Vehiclem_vehicleKit
 
uint32 m_unitTypeMask
 
LiquidTypeEntry const * _lastLiquid
 
bool m_applyResilience
 
bool _instantCast
 
uint32 m_rootTimes
 
- Protected Attributes inherited from WorldObject
std::string m_name
 
bool m_isActive
 
bool m_isFarVisible
 
Optional< float > m_visibilityDistanceOverride
 
const bool m_isWorldObject
 
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 Member Functions

void ForcedDespawn (uint32 timeMSToDespawn=0, Seconds forcedRespawnTimer=0s)
 
bool CanPeriodicallyCallForAssistance () const
 

Private Attributes

uint32 m_waypointID
 
uint32 m_path_id
 
CreatureGroupm_formation
 
bool TriggerJustRespawned
 
std::shared_ptr< time_t > m_lastLeashExtensionTime
 
ObjectGuid m_cannotReachTarget
 
uint32 m_cannotReachTimer
 
Spell const * _focusSpell
 
bool _isMissingSwimmingFlagOutOfCombat
 

‍Locks the target during spell cast for proper facing


 
uint32 m_assistanceTimer
 
uint32 _playerDamageReq
 
bool _damagedByPlayer
 
bool _isCombatMovementAllowed
 

Additional Inherited Members

- Public Types inherited from Unit
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::list< DiminishingReturnDiminishing
 
typedef GuidUnorderedSet ComboPointHolderSet
 
typedef std::map< uint8, AuraApplication * > VisibleAuraMap
 
typedef std::set< PetAura const * > PetAuraSet
 
- Public Types inherited from UpdatableMapObject
enum  UpdateState : uint8 {
  NotUpdating ,
  PendingAdd ,
  Updating
}
 
- Protected Types inherited from Unit
typedef std::list< DynamicObject * > DynObjectList
 
typedef GuidList GameObjectList
 
typedef std::map< ObjectGuid, float > CharmThreatMap
 

Detailed Description

Constructor & Destructor Documentation

◆ Creature()

Creature::Creature ( bool  isWorldObject = false)
explicit
279{
282
283 for (uint8 i = 0; i < MAX_CREATURE_SPELLS; ++i)
284 m_spells[i] = 0;
285
286 for (uint8 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i)
288
290
292 DisableLootReward = false;
293
295 m_CombatDistance = 0.0f;
296
297 ResetLootMode(); // restore default loot mode
298 TriggerJustRespawned = false;
299 _focusSpell = nullptr;
300
301 m_respawnedTime = time_t(0);
302}
#define CREATURE_REGEN_INTERVAL
Definition CreatureData.h:31
std::uint8_t uint8
Definition Define.h:109
@ IDLE_MOTION_TYPE
Definition MotionMaster.h:39
@ SPELL_SCHOOL_NORMAL
Definition SharedDefines.h:283
constexpr auto MAX_SPELL_SCHOOL
Definition SharedDefines.h:292
@ SPELL_SCHOOL_MASK_NORMAL
Definition SharedDefines.h:297
@ REACT_AGGRESSIVE
Definition Unit.h:551
static constexpr uint32 MAX_CREATURE_SPELLS
Definition Unit.h:46
@ UNIT_END
Definition UpdateFields.h:175
@ CONFIG_SIGHT_MONSTER
Definition WorldConfig.h:146
bool m_regenPower
Definition Creature.h:475
float m_wanderDistance
Definition Creature.h:457
void ResetLootMode()
Definition Creature.h:249
std::shared_ptr< time_t > m_lastLeashExtensionTime
Definition Creature.h:517
SpellSchoolMask m_meleeDamageSchoolMask
Definition Creature.h:478
uint16 m_transportCheckTimer
Definition Creature.h:459
bool m_AI_locked
Definition Creature.h:476
uint32 m_assistanceTimer
Definition Creature.h:526
int8 m_originalEquipmentId
Definition Creature.h:470
ObjectGuid::LowType m_spawnId
For new or temporary creatures is 0 for saved it is lowguid.
Definition Creature.h:468
Position m_transportHomePosition
Definition Creature.h:485
ObjectGuid::LowType m_lootRecipientGroup
Definition Creature.h:449
uint32 m_spells[MAX_CREATURE_SPELLS]
Definition Creature.h:254
CreatureTemplate const * m_creatureInfo
Definition Creature.h:490
bool _isMissingSwimmingFlagOutOfCombat
‍Locks the target during spell cast for proper facing
Definition Creature.h:524
uint32 m_waypointID
Definition Creature.h:508
MovementGeneratorType m_defaultMovementType
Definition Creature.h:467
float m_detectionDistance
Definition Creature.h:493
CreatureSpellCooldowns m_CreatureSpellCooldowns
Definition Creature.h:255
float m_SightDistance
Definition Creature.h:377
float _sparringPct
Definition Creature.h:496
uint32 m_cannotReachTimer
Definition Creature.h:520
uint32 m_respawnDelay
Definition Creature.h:455
time_t m_corpseRemoveTime
Timers.
Definition Creature.h:452
uint32 m_combatPulseDelay
Definition Creature.h:462
time_t m_respawnTime
Definition Creature.h:453
CreatureData const * m_creatureData
Definition Creature.h:491
float m_CombatDistance
Definition Creature.h:377
time_t m_respawnedTime
Definition Creature.h:454
uint32 m_boundaryCheckTime
Definition Creature.h:458
Position m_homePosition
Definition Creature.h:484
bool TriggerJustRespawned
Definition Creature.h:513
bool m_AlreadyCallAssistance
Definition Creature.h:472
CreatureGroup * m_formation
Definition Creature.h:512
uint32 m_corpseDelay
Definition Creature.h:456
uint8 m_equipmentId
Definition Creature.h:469
bool m_AlreadySearchedAssistance
Definition Creature.h:473
uint32 m_originalEntry
Definition Creature.h:479
ReactStates m_reactState
Definition Creature.h:464
bool DisableReputationReward
Definition Creature.h:487
Spell const * _focusSpell
Definition Creature.h:522
uint32 lootPickPocketRestoreTime
Definition Creature.h:460
bool m_moveInLineOfSightStrictlyDisabled
Definition Creature.h:482
uint32 lootingGroupLowGUID
Definition Creature.h:312
bool _isCombatMovementAllowed
Definition Creature.h:530
bool DisableLootReward
Definition Creature.h:488
bool m_regenHealth
Definition Creature.h:474
uint32 _playerDamageReq
Definition Creature.h:528
bool _damagedByPlayer
Definition Creature.h:529
uint32 m_path_id
Definition Creature.h:509
bool m_moveInLineOfSightDisabled
Definition Creature.h:481
uint32 m_groupLootTimer
Definition Creature.h:311
uint32 m_combatPulseTime
Definition Creature.h:461
uint32 m_ProhibitSchoolTime[7]
Definition Creature.h:256
MovableMapObject()=default
uint16 m_valuesCount
Definition Object.h:266
Definition Unit.h:620
int32 m_regenTimer
Definition Unit.h:2105
#define sWorld
Definition World.h:320

References _focusSpell, CONFIG_SIGHT_MONSTER, CREATURE_REGEN_INTERVAL, DisableLootReward, DisableReputationReward, m_CombatDistance, m_CreatureSpellCooldowns, m_ProhibitSchoolTime, Unit::m_regenTimer, m_respawnedTime, m_SightDistance, m_spells, Object::m_valuesCount, MAX_CREATURE_SPELLS, MAX_SPELL_SCHOOL, ResetLootMode(), SPELL_SCHOOL_NORMAL, sWorld, TriggerJustRespawned, and UNIT_END.

◆ ~Creature()

Creature::~Creature ( )
override
305{
306 m_vendorItemCounts.clear();
307
308 delete i_AI;
309 i_AI = nullptr;
310}
VendorItemCounts m_vendorItemCounts
Definition Creature.h:444
UnitAI * i_AI
Definition Unit.h:2052

References Unit::i_AI, and m_vendorItemCounts.

Member Function Documentation

◆ _AddCreatureSpellCooldown()

void Creature::_AddCreatureSpellCooldown ( uint32  spell_id,
uint16  categoryId,
uint32  end_time 
)
2868{
2869 CreatureSpellCooldown spellCooldown;
2870 spellCooldown.category = categoryId;
2871 spellCooldown.end = GameTime::GetGameTimeMS().count() + end_time;
2872 m_CreatureSpellCooldowns[spell_id] = std::move(spellCooldown);
2873}
Milliseconds GetGameTimeMS()
Definition GameTime.cpp:43
Definition CreatureData.h:540
uint16 category
Definition CreatureData.h:544
uint32 end
Definition CreatureData.h:545

References CreatureSpellCooldown::category, CreatureSpellCooldown::end, GameTime::GetGameTimeMS(), and m_CreatureSpellCooldowns.

Referenced by Pet::_LoadSpellCooldowns(), AddSpellCooldown(), TriggerBurningPitch(), boss_ingvar_the_plunderer::UpdateAI(), and npc_gunship_rocketeer::npc_gunship_rocketeerAI::UpdateAI().

◆ _GetDamageMod()

float Creature::_GetDamageMod ( int32  Rank)
static
1604{
1605 switch (Rank) // define rates for each elite rank
1606 {
1608 return sWorld->getRate(RATE_CREATURE_NORMAL_DAMAGE);
1616 return sWorld->getRate(RATE_CREATURE_ELITE_RARE_DAMAGE);
1617 default:
1619 }
1620}
@ CREATURE_ELITE_NORMAL
Definition SharedDefines.h:2970
@ CREATURE_ELITE_WORLDBOSS
Definition SharedDefines.h:2973
@ CREATURE_ELITE_RARE
Definition SharedDefines.h:2974
@ CREATURE_ELITE_RAREELITE
Definition SharedDefines.h:2972
@ CREATURE_ELITE_ELITE
Definition SharedDefines.h:2971
@ RATE_CREATURE_NORMAL_DAMAGE
Definition WorldConfig.h:442
@ RATE_CREATURE_ELITE_RARE_DAMAGE
Definition WorldConfig.h:446
@ RATE_CREATURE_ELITE_WORLDBOSS_DAMAGE
Definition WorldConfig.h:445
@ RATE_CREATURE_ELITE_RAREELITE_DAMAGE
Definition WorldConfig.h:444
@ RATE_CREATURE_ELITE_ELITE_DAMAGE
Definition WorldConfig.h:443

References CREATURE_ELITE_ELITE, CREATURE_ELITE_NORMAL, CREATURE_ELITE_RARE, CREATURE_ELITE_RAREELITE, CREATURE_ELITE_WORLDBOSS, RATE_CREATURE_ELITE_ELITE_DAMAGE, RATE_CREATURE_ELITE_RARE_DAMAGE, RATE_CREATURE_ELITE_RAREELITE_DAMAGE, RATE_CREATURE_ELITE_WORLDBOSS_DAMAGE, RATE_CREATURE_NORMAL_DAMAGE, and sWorld.

Referenced by ObjectMgr::CheckCreatureTemplate().

◆ _GetHealthMod()

float Creature::_GetHealthMod ( int32  Rank)
staticprotected
1585{
1586 switch (Rank) // define rates for each elite rank
1587 {
1589 return sWorld->getRate(RATE_CREATURE_NORMAL_HP);
1591 return sWorld->getRate(RATE_CREATURE_ELITE_ELITE_HP);
1597 return sWorld->getRate(RATE_CREATURE_ELITE_RARE_HP);
1598 default:
1599 return sWorld->getRate(RATE_CREATURE_ELITE_ELITE_HP);
1600 }
1601}
@ RATE_CREATURE_NORMAL_HP
Definition WorldConfig.h:437
@ RATE_CREATURE_ELITE_WORLDBOSS_HP
Definition WorldConfig.h:440
@ RATE_CREATURE_ELITE_ELITE_HP
Definition WorldConfig.h:438
@ RATE_CREATURE_ELITE_RARE_HP
Definition WorldConfig.h:441
@ RATE_CREATURE_ELITE_RAREELITE_HP
Definition WorldConfig.h:439

References CREATURE_ELITE_ELITE, CREATURE_ELITE_NORMAL, CREATURE_ELITE_RARE, CREATURE_ELITE_RAREELITE, CREATURE_ELITE_WORLDBOSS, RATE_CREATURE_ELITE_ELITE_HP, RATE_CREATURE_ELITE_RARE_HP, RATE_CREATURE_ELITE_RAREELITE_HP, RATE_CREATURE_ELITE_WORLDBOSS_HP, RATE_CREATURE_NORMAL_HP, and sWorld.

Referenced by Guardian::InitStatsForLevel(), LoadCreatureFromDB(), and SelectLevel().

◆ _IsTargetAcceptable()

bool Creature::_IsTargetAcceptable ( Unit const *  target) const
2565{
2566 ASSERT(target);
2567
2568 // if the target cannot be attacked, the target is not acceptable
2569 if (IsFriendlyTo(target) || !target->isTargetableForAttack(false, this) || (m_vehicle && (IsOnVehicle(target) || m_vehicle->GetBase()->IsOnVehicle(target))))
2570 return false;
2571
2572 if (target->HasUnitState(UNIT_STATE_DIED))
2573 {
2574 // some creatures can detect fake death
2575 if (CanIgnoreFeignDeath() && target->HasUnitFlag2(UNIT_FLAG2_FEIGN_DEATH))
2576 return true;
2577 else
2578 return false;
2579 }
2580
2581 Unit const* targetVictim = target->getAttackerForHelper();
2582
2583 // if I'm already fighting target, or I'm hostile towards the target, the target is acceptable
2584 if (IsEngagedBy(target) || IsHostileTo(target))
2585 return true;
2586
2587 // if the target's victim is friendly, and the target is neutral, the target is acceptable
2588 if (targetVictim && !IsNeutralToAll() && IsFriendlyTo(targetVictim))
2589 return true;
2590
2591 // if the target's victim is not friendly, or the target is friendly, the target is not acceptable
2592 return false;
2593}
#define ASSERT
Definition Errors.h:68
@ UNIT_FLAG2_FEIGN_DEATH
Definition UnitDefines.h:289
@ UNIT_STATE_DIED
Definition UnitDefines.h:170
bool CanIgnoreFeignDeath() const
Definition Creature.h:276
Vehicle * m_vehicle
Definition Unit.h:2111
Unit * getAttackerForHelper() const
Definition Unit.cpp:754
bool IsNeutralToAll() const
Definition Unit.cpp:10320
bool IsOnVehicle(Unit const *vehicle) const
Definition Unit.h:1840
bool IsEngagedBy(Unit const *who) const
Definition Unit.h:877
bool IsFriendlyTo(Unit const *unit) const
Definition Unit.cpp:10302
bool IsHostileTo(Unit const *unit) const
Definition Unit.cpp:10297
Unit * GetBase() const
May be called from scripts.
Definition Vehicle.h:37

References ASSERT, CanIgnoreFeignDeath(), Unit::getAttackerForHelper(), Vehicle::GetBase(), Unit::HasUnitFlag2(), Unit::HasUnitState(), Unit::IsEngagedBy(), Unit::IsFriendlyTo(), Unit::IsHostileTo(), Unit::IsNeutralToAll(), Unit::IsOnVehicle(), Unit::isTargetableForAttack(), Unit::m_vehicle, UNIT_FLAG2_FEIGN_DEATH, and UNIT_STATE_DIED.

Referenced by CanStartAttack(), and CreatureAI::TriggerAlert().

◆ AddLootMode()

◆ AddSpellCooldown()

void Creature::AddSpellCooldown ( uint32  spell_id,
uint32  ,
uint32  end_time,
bool  needSendToClient = false,
bool  forceSendToSpectator = false 
)
overridevirtual

Reimplemented from Unit.

2876{
2877 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell_id);
2878 if (!spellInfo)
2879 return;
2880
2881 // used in proc system, otherwise normal creature cooldown
2882 if (end_time)
2883 {
2884 _AddCreatureSpellCooldown(spellInfo->Id, 0, end_time);
2885 return;
2886 }
2887
2888 uint32 spellcooldown = spellInfo->RecoveryTime;
2889 uint32 categoryId = spellInfo->GetCategory();
2890 uint32 categorycooldown = categoryId ? spellInfo->CategoryRecoveryTime : 0;
2891 if (Player* modOwner = GetSpellModOwner())
2892 {
2893 modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_COOLDOWN, spellcooldown);
2894 modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_COOLDOWN, categorycooldown);
2895 }
2896
2897 SpellCategoryStore::const_iterator i_scstore = sSpellsByCategoryStore.find(categoryId);
2898 if (categorycooldown && i_scstore != sSpellsByCategoryStore.end())
2899 {
2900 for (SpellCategorySet::const_iterator i_scset = i_scstore->second.begin(); i_scset != i_scstore->second.end(); ++i_scset)
2901 {
2902 _AddCreatureSpellCooldown(i_scset->second, categoryId, categorycooldown);
2903 }
2904 }
2905 else if (spellcooldown)
2906 {
2907 _AddCreatureSpellCooldown(spellInfo->Id, 0, spellcooldown);
2908 }
2909
2910 if (sSpellMgr->HasSpellCooldownOverride(spellInfo->Id))
2911 {
2912 if (IsCharmed() && GetCharmer()->IsPlayer())
2913 {
2914 WorldPacket data;
2915 BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, spellInfo->Id, spellcooldown);
2917 }
2918 }
2919}
SpellCategoryStore sSpellsByCategoryStore
Definition DBCStores.cpp:152
std::uint32_t uint32
Definition Define.h:107
@ SPELLMOD_COOLDOWN
Definition SpellDefines.h:87
#define sSpellMgr
Definition SpellMgr.h:825
@ SPELL_COOLDOWN_FLAG_NONE
Definition Unit.h:606
void _AddCreatureSpellCooldown(uint32 spell_id, uint16 categoryId, uint32 end_time)
Definition Creature.cpp:2867
bool IsPlayer() const
Definition Object.h:201
Player * ToPlayer()
Definition Object.h:202
Definition Player.h:1083
void SendDirectMessage(WorldPacket const *data) const
Definition Player.cpp:5725
Definition SpellInfo.h:316
uint32 GetCategory() const
Definition SpellInfo.cpp:871
uint32 RecoveryTime
Definition SpellInfo.h:348
uint32 Id
Definition SpellInfo.h:320
uint32 CategoryRecoveryTime
Definition SpellInfo.h:349
bool IsCharmed() const
Definition Unit.h:1237
Player * GetSpellModOwner() const
Definition Unit.cpp:16651
Unit * GetCharmer() const
Definition Unit.cpp:10694
void BuildCooldownPacket(WorldPacket &data, uint8 flags, uint32 spellId, uint32 cooldown)
Definition Unit.cpp:20844
Definition WorldPacket.h:26

References _AddCreatureSpellCooldown(), Unit::BuildCooldownPacket(), SpellInfo::CategoryRecoveryTime, SpellInfo::GetCategory(), Unit::GetCharmer(), Unit::GetSpellModOwner(), SpellInfo::Id, Unit::IsCharmed(), Object::IsPlayer(), SpellInfo::RecoveryTime, Player::SendDirectMessage(), SPELL_COOLDOWN_FLAG_NONE, SPELLMOD_COOLDOWN, sSpellMgr, sSpellsByCategoryStore, and Object::ToPlayer().

Referenced by Aura::_ApplyForTarget(), Aura::_UnapplyForTarget(), spell_chapter5_return_to_capital::HandleHit(), WorldSession::HandlePetActionHelper(), boss_faction_championsAI::IsCCed(), boss_zuljin::JustEngagedWith(), Pet::Update(), and PetAI::UpdateAI().

◆ AddToWorld()

void Creature::AddToWorld ( )
overridevirtual
  • Register the creature for guid lookup

Reimplemented from Object.

Reimplemented in Pet.

313{
315 if (!IsInWorld())
316 {
317 // pussywizard: motion master needs to be initialized before OnCreatureCreate, which may set death state to JUST_DIED, to prevent crash
318 // it's also initialized in AIM_Initialize(), few lines below, but it's not a problem
320
322 if (m_spawnId)
323 {
324 GetMap()->GetCreatureBySpawnIdStore().insert(std::make_pair(m_spawnId, this));
325 }
327
329
331
332 if (IsVehicle())
333 {
335 }
336
337 if (GetZoneScript())
338 {
340 }
341
343
344 sScriptMgr->OnCreatureAddWorld(this);
345 }
346}
#define sScriptMgr
Definition ScriptMgr.h:727
Definition Creature.h:43
Loot loot
Definition Creature.h:230
bool AIM_Initialize(CreatureAI *ai=nullptr)
Definition Creature.cpp:1096
void Motion_Initialize()
Definition Creature.cpp:1121
void SearchFormation()
Definition Creature.cpp:382
MapStoredObjectTypesContainer & GetObjectsStore()
Definition Map.h:354
CreatureBySpawnIdContainer & GetCreatureBySpawnIdStore()
Definition Map.h:357
bool IsInWorld() const
Definition Object.h:108
ObjectGuid GetGUID() const
Definition Object.h:114
bool Insert(KEY_TYPE const &handle, SPECIFIC_TYPE *obj)
Definition TypeContainer.h:132
bool IsVehicle() const
Definition Unit.h:750
void AddToWorld() override
Definition Unit.cpp:15766
Vehicle * GetVehicleKit() const
Definition Unit.h:1838
void Install()
Definition Vehicle.cpp:72
Map * GetMap() const
Definition Object.h:610
ZoneScript * GetZoneScript() const
Definition Object.h:616
virtual void OnCreatureCreate(Creature *)
Definition ZoneScript.h:34
ObjectGuid sourceWorldObjectGUID
Definition LootMgr.h:330

References Unit::AddToWorld(), AIM_Initialize(), Map::GetCreatureBySpawnIdStore(), Object::GetGUID(), WorldObject::GetMap(), Map::GetObjectsStore(), Unit::GetVehicleKit(), WorldObject::GetZoneScript(), TypeUnorderedMapContainer< OBJECT_TYPES, KEY_TYPE >::Insert(), Vehicle::Install(), Object::IsInWorld(), Unit::IsVehicle(), loot, m_spawnId, Motion_Initialize(), ZoneScript::OnCreatureCreate(), SearchFormation(), Loot::sourceWorldObjectGUID, and sScriptMgr.

◆ AI()

CreatureAI * Creature::AI ( ) const
inline
141{ return (CreatureAI*)i_AI; }
Definition CreatureAI.h:70

References Unit::i_AI.

Referenced by Unit::_UnapplyAura(), Vehicle::AddPassenger(), Player::AddQuestAndCheckCompletion(), npc_anubisath_sentinel::aqsentinelAI::CallBuddiesToAttack(), boss_algalon_the_observer::boss_algalon_the_observerAI::CallConstellations(), instance_ruins_of_ahnqiraj::instance_ruins_of_ahnqiraj_InstanceMapScript::CallNextRajaxxLeader(), CanAlwaysSee(), CanCreatureAttack(), BattlegroundAV::ChangeMineOwner(), instance_obsidian_sanctum::instance_obsidian_sanctum_InstanceMapScript::CheckAchievementCriteriaMeet(), npc_still_at_it_trigger::npc_still_at_it_triggerAI::CheckAction(), spell_putricide_mutation_init::CheckRequirementInternal(), spell_the_lich_king_ice_burst_target_search::CheckTargetCount(), npc_riggle_bassbait::npc_riggle_bassbaitAI::CheckTournamentState(), Unit::CombatStart(), CreatureUnitRelocationWorker(), Unit::DealDamage(), DespawnOnEvade(), instance_karazhan::instance_karazhan_InstanceMapScript::DoAction(), SummonList::DoAction(), Spell::DoAllEffectOnTarget(), HomeMovementGenerator< Creature >::DoFinalize(), instance_stratholme::instance_stratholme_InstanceMapScript::DoSpawnPlaguedCritters(), SummonList::DoZoneInCombat(), AssistDelayEvent::Execute(), RestoreAttack::Execute(), DelayedTalk::Execute(), UtherBatteredHiltEvent::Execute(), StartMovementEvent::Execute(), ValithriaDespawner::Execute(), CaptainSurviveTalk::Execute(), ChargeRifts::Execute(), spell_kiljaeden_sinister_reflection_clone::FilterTargets(), spell_sapphiron_frost_explosion::FilterTargets(), RotateMovementGenerator::Finalize(), EffectMovementGenerator::Finalize(), boss_janalai::FireWall(), npc_anubisath_sentinel::aqsentinelAI::GetOtherSentinels(), SmartScript::GetTargets(), go_ossirian_crystal::go_ossirian_crystalAI::GossipHello(), spell_herald_volzaj_insanity::HandleAfterCast(), spell_illidari_council_empyreal_balance::HandleAfterCast(), npc_anachronos_the_ancient::npc_anachronos_the_ancientAI::HandleAnimation(), debug_commandscript::HandleDebugBoundaryCommand(), spell_item_lil_xt::HandleDummy(), spell_shadowblink::HandleDummy(), spell_halion_twilight_division::HandleDummy(), spell_q12096_q12092_dummy::HandleDummy(), spell_q12096_q12092_bark::HandleDummy(), spell_q12589_shoot_rjr::HandleDummy(), spell_algalon_trigger_3_adds::HandleDummyEffect(), spell_herald_volzaj_insanity::HandleDummyEffect(), spell_hodir_flash_freeze_aura::HandleEffectPeriodic(), spell_mc_play_dead_aura::HandleEffectRemove(), WorldSession::HandleGossipHelloOpcode(), WorldSession::HandleGossipSelectOptionOpcode(), spell_chapter2_persuasive_strike::HandleHit(), spell_chapter5_return_to_capital::HandleHit(), npc_commandscript::HandleNpcSetDataCommand(), WorldSession::HandlePetActionHelper(), WorldSession::HandleQuestgiverChooseRewardOpcode(), WorldSession::HandleQuestgiverHelloOpcode(), spell_kiljaeden_darkness_aura::HandleRemove(), spell_taldaram_summon_flame_ball::HandleScript(), spell_putricide_unstable_experiment::HandleScript(), spell_the_lich_king_vile_spirit_move_target_search::HandleScript(), spell_ayamiss_swarmer_swarm::HandleScript(), spell_festergut_pungent_blight::HandleScript(), spell_rotface_large_ooze_combine::HandleScript(), spell_rotface_large_ooze_buff_combine::HandleScript(), spell_q13011_bear_flank_master::HandleScript(), spell_volazj_whisper::HandleScriptEffect(), Unit::HandleSpellClick(), spell_putricide_mutated_transformation::HandleSummon(), boss_yoggsaron_sara::boss_yoggsaron_saraAI::InformCloud(), TempSummon::InitSummon(), IsAlwaysDetectableFor(), SmartScript::IsSmart(), npc_mr_bigglesworth::JustDied(), npc_toc_warlock::npc_toc_warlockAI::JustSummoned(), npc_toc_hunter::npc_toc_hunterAI::JustSummoned(), npc_toc_boomkin::npc_toc_boomkinAI::JustSummoned(), boss_anubrekhan::boss_anubrekhanAI::JustSummoned(), boss_maexxna::boss_maexxnaAI::JustSummoned(), npc_frosthound::npc_frosthoundAI::JustSummoned(), npc_eris_hevenfire::npc_eris_hevenfireAI::JustSummoned(), npc_daphne_stilwell::npc_daphne_stilwellAI::JustSummoned(), npc_battle_at_valhalas::npc_battle_at_valhalasAI::JustSummoned(), boss_urom::boss_uromAI::JustSummoned(), npc_hor_lich_king::npc_hor_lich_kingAI::JustSummoned(), WorldBossAI::JustSummoned(), npc_grimstone::npc_grimstoneAI::JustSummoned(), boss_gyth::boss_gythAI::JustSummoned(), boss_rend_blackhand::boss_rend_blackhandAI::JustSummoned(), boss_curator::JustSummoned(), boss_attumen::JustSummoned(), boss_midnight::JustSummoned(), boss_nightbane::JustSummoned(), boss_sacrolash::JustSummoned(), npc_demonic_vapor_trail::JustSummoned(), boss_anetheron::JustSummoned(), boss_onyxia::JustSummoned(), boss_taldaram::JustSummoned(), boss_black_knight::boss_black_knightAI::JustSummoned(), boss_devourer_of_souls::boss_devourer_of_soulsAI::JustSummoned(), boss_drakkari_colossus::boss_drakkari_colossusAI::JustSummoned(), boss_prince_taldaram_icc::boss_prince_taldaramAI::JustSummoned(), boss_deathbringer_saurfang::boss_deathbringer_saurfangAI::JustSummoned(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::JustSummoned(), npc_precious_icc::npc_precious_iccAI::JustSummoned(), npc_the_lich_king_controller::npc_the_lich_king_controllerAI::JustSummoned(), npc_gluttonous_abomination::npc_gluttonous_abominationAI::JustSummoned(), boss_gluth::boss_gluthAI::JustSummoned(), boss_gothik::boss_gothikAI::JustSummoned(), boss_volkhan::boss_volkhanAI::JustSummoned(), boss_nexusprince_shaffar::JustSummoned(), boss_grandmaster_vorpil::JustSummoned(), npc_akama_illidan::JustSummoned(), npc_flame_of_azzinoth::JustSummoned(), npc_creature_generator_akama::JustSummoned(), boss_the_black_stalker::JustSummoned(), boss_nethermancer_sepethrea::JustSummoned(), emerald_dragonAI::JustSummoned(), npc_nelson::npc_nelsonAI::JustSummoned(), boss_balinda::JustSummoned(), npc_professor_phizzlethorpe::npc_professor_phizzlethorpeAI::JustSummoned(), npc_thrall_bfu::npc_thrall_bfuAI::JustSummoned(), npc_tapoke_slim_jahn::npc_tapoke_slim_jahnAI::JustSummoned(), boss_archimonde::JustSummoned(), npc_muglash::npc_muglashAI::JustSummoned(), npc_kaya_flathoof::npc_kaya_flathoofAI::JustSummoned(), npc_wizzlecrank_shredder::npc_wizzlecrank_shredderAI::JustSummoned(), npc_ame::npc_ameAI::JustSummoned(), npc_emily::npc_emilyAI::JustSummoned(), npc_deaths_door_fell_cannon_target_bunny::npc_deaths_door_fell_cannon_target_bunnyAI::JustSummoned(), npc_wounded_blood_elf::npc_wounded_blood_elfAI::JustSummoned(), npc_maghar_captive::npc_maghar_captiveAI::JustSummoned(), npc_kurenai_captive::npc_kurenai_captiveAI::JustSummoned(), npc_bessy::npc_bessyAI::JustSummoned(), npc_buru_egg::JustSummoned(), Unit::Kill(), CreatureGroup::MemberEngagingTarget(), CreatureGroup::MemberEvaded(), npc_brew_bubble::MoveInLineOfSight(), npc_dkc1_gothik::npc_dkc1_gothikAI::MoveInLineOfSight(), npc_love_in_air_supply_sentry::MoveInLineOfSight(), npc_air_force_bots::npc_air_force_botsAI::MoveInLineOfSight(), WaypointMovementGenerator< Creature >::MovementInform(), 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(), spell_pilgrims_bounty_serve_generic::OnAuraRemove(), achievement_flu_shot_shortage::OnCheck(), achievement_smell_saronite::OnCheck(), achievement_shadowdodger::OnCheck(), achievement_cheese_the_freeze::OnCheck(), achievement_getting_cold_in_here::OnCheck(), achievement_i_could_say_that_this_cache_was_rare::OnCheck(), achievement_i_have_the_coolest_friends::OnCheck(), achievement_ignis_shattered::OnCheck(), achievement_mimiron_firefighter::OnCheck(), achievement_mimiron_set_up_us_the_bomb_11::OnCheck(), achievement_mimiron_set_up_us_the_bomb_12::OnCheck(), achievement_mimiron_set_up_us_the_bomb_13::OnCheck(), achievement_quick_shave::OnCheck(), instance_blackrock_spire::instance_blackrock_spireMapScript::OnCreatureCreate(), instance_hyjal::instance_mount_hyjal_InstanceMapScript::OnCreatureCreate(), go_palehoof_sphere::OnGossipHello(), go_main_chambers_access_panel::OnGossipHello(), npc_pet_gen_argent_pony_bridle::OnGossipHello(), npc_death_knight_initiate::OnGossipHello(), npc_highlord_darion_mograine::OnGossipHello(), npc_finklestein::OnGossipHello(), npc_captain_saeed::OnGossipHello(), npc_elder_clearwater::OnGossipHello(), npc_wormhole::OnGossipHello(), go_the_pearl_of_the_depths::OnGossipHello(), go_pressure_valve::OnGossipHello(), go_brazier::OnGossipHello(), go_finklestein_cauldron::OnGossipHello(), npc_hyjal_jaina::OnGossipSelect(), npc_hyjal_thrall::OnGossipSelect(), npc_pet_gen_argent_pony_bridle::OnGossipSelect(), boss_doomrel::OnGossipSelect(), boss_majordomo::OnGossipSelect(), npc_barnes::OnGossipSelect(), npc_death_knight_initiate::OnGossipSelect(), npc_highlord_darion_mograine::OnGossipSelect(), npc_varian_wrynn::OnGossipSelect(), npc_thrall_bfu::OnGossipSelect(), npc_arthas::OnGossipSelect(), npc_high_overlord_saurfang_icc::OnGossipSelect(), npc_muradin_bronzebeard_icc::OnGossipSelect(), brann_bronzebeard::OnGossipSelect(), npc_ulduar_keeper::OnGossipSelect(), npc_shandy_dalaran::OnGossipSelect(), npc_vekjik::OnGossipSelect(), npc_adventurous_dwarf::OnGossipSelect(), npc_fos_leader::OnGossipSelect(), npc_hor_leader::OnGossipSelect(), npc_ulduar_expedition_commander::OnGossipSelect(), npc_mcmanus::OnGossipSelect(), npc_finklestein::OnGossipSelect(), npc_captain_saeed::OnGossipSelect(), boss_azuregos::OnGossipSelect(), npc_hyjal_tyrande::OnGossipSelect(), npc_thrall_old_hillsbrad::OnGossipSelect(), npc_hor_leader_second::OnGossipSelect(), npc_tirions_gambit_tirion::OnGossipSelect(), npc_artorius::OnGossipSelect(), npc_simone::OnGossipSelect(), npc_nelson::OnGossipSelect(), npc_franklin::OnGossipSelect(), instance_ulduar::instance_ulduar_InstanceMapScript::OnPlayerEnter(), npc_chicken_cluck::OnQuestAccept(), npc_kernobee::OnQuestAccept(), npc_daphne_stilwell::OnQuestAccept(), npc_mikhail::OnQuestAccept(), npc_kerlonian::OnQuestAccept(), npc_prospector_remtravel::OnQuestAccept(), npc_tooga::OnQuestAccept(), npc_gilthares::OnQuestAccept(), npc_lakota_windsong::OnQuestAccept(), npc_paoka_swiftmountain::OnQuestAccept(), npc_ringo::OnQuestAccept(), npc_engineer_helice::OnQuestAccept(), npc_maghar_captive::OnQuestAccept(), npc_kurenai_captive::OnQuestAccept(), npc_maxx_a_million_escort::OnQuestAccept(), npc_eris_hevenfire::OnQuestAccept(), npc_deathstalker_erland::OnQuestAccept(), npc_cork_gizelton::OnQuestAccept(), npc_shenthul::OnQuestAccept(), npc_kaya_flathoof::OnQuestAccept(), npc_wizzlecrank_shredder::OnQuestAccept(), npc_ame::OnQuestAccept(), npc_ranshalla::OnQuestAccept(), npc_lurgglbr::OnQuestAccept(), npc_mootoo_the_younger::OnQuestAccept(), npc_bonker_togglevolt::OnQuestAccept(), npc_emily::OnQuestAccept(), npc_apothecary_hanes::OnQuestAccept(), npc_battle_at_valhalas::OnQuestAccept(), npc_finklestein::OnQuestAccept(), npc_bessy::OnQuestAccept(), npc_isla_starmane::OnQuestAccept(), npc_doctor::OnQuestAccept(), go_crystal_prison::OnQuestAccept(), go_crystalline_tear::OnQuestAccept(), npc_chicken_cluck::OnQuestComplete(), boss_apothecary_hummel::OnQuestReward(), npc_rocknot::OnQuestReward(), npc_lady_sylvanas_windrunner::OnQuestReward(), npc_tharnarian::OnQuestReward(), npc_thrall_warchief::OnQuestReward(), npc_elder_clearwater::OnQuestReward(), npc_riggle_bassbait::OnQuestReward(), spell_electrial_storm::OnRemove(), at_blackrock_stadium::OnTrigger(), at_commander_dawnforge::OnTrigger(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnUnitDeath(), OrderWhelpTargetSelector::operator()(), FrostwingGauntletRespawner::operator()(), ValithriaDespawner::operator()(), Acore::CallOfHelpCreatureInRangeDo::operator()(), SplineHandler::operator()(), Unit::PetSpellFail(), PretendToDie(), npc_jungle_punch_target::npc_jungle_punch_targetAI::proceedCwEvent(), SmartScript::ProcessAction(), instance_stratholme::instance_stratholme_InstanceMapScript::ProcessSlaughterEvent(), RemoveCorpse(), Vehicle::RemovePassenger(), Respawn(), Resurrect(), boss_yoggsaron_lich_king::boss_yoggsaron_lich_kingAI::Say(), boss_yoggsaron_llane::boss_yoggsaron_llaneAI::Say(), boss_yoggsaron_neltharion::boss_yoggsaron_neltharionAI::Say(), boss_fathomguard_tidalvess::ScheduleRemoval(), spell_the_lich_king_valkyr_target_search::SelectTarget(), SelectVictim(), instance_naxxramas::SetBossState(), Unit::SetCharmedBy(), SetInCombatWithZone(), npc_thrall_bfu::npc_thrall_bfuAI::SpawnWave(), npc_pilgrims_bounty_chair::SpellHitTarget(), npc_still_at_it_trigger::npc_still_at_it_triggerAI::Start(), spell_putricide_ooze_channel::StartAttack(), WaypointMovementGenerator< Creature >::StartMove(), brann_bronzebeard::brann_bronzebeardAI::SummonCreatures(), boss_zuramat::boss_zuramatAI::SummonedCreatureDespawn(), boss_sindragosa::boss_sindragosaAI::SummonedCreatureDespawn(), boss_valithria_dreamwalker::boss_valithria_dreamwalkerAI::SummonedCreatureDespawn(), boss_anubrekhan::boss_anubrekhanAI::SummonedCreatureDies(), npc_lord_illidan_stormrage::npc_lord_illidan_stormrageAI::SummonNextWave(), npc_love_in_air_snivel_real::Talk(), Unit::TauntApply(), Unit::TauntFadeOut(), spell_igb_check_for_players::TriggerWipe(), Pet::Update(), instance_stratholme::instance_stratholme_InstanceMapScript::Update(), Update(), npc_vaelastrasz_the_red::npc_vaelastrasz_the_redAI::UpdateAI(), npc_kalecgos_kj::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(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UpdateAI(), npc_twiggy_flathead::npc_twiggy_flatheadAI::UpdateAI(), boss_prince_valanar_icc::boss_prince_valanarAI::UpdateAI(), npc_freya_ward::npc_freya_wardAI::UpdateAI(), boss_mimiron::boss_mimironAI::UpdateAI(), npc_ulduar_aerial_command_unit::npc_ulduar_aerial_command_unitAI::UpdateAI(), boss_razorscale::boss_razorscaleAI::UpdateAI(), npc_hourglass_of_eternity::npc_hourglass_of_eternityAI::UpdateAI(), npc_still_at_it_trigger::npc_still_at_it_triggerAI::UpdateAI(), npc_commander_dawnforge::npc_commander_dawnforgeAI::UpdateAI(), brann_bronzebeard::brann_bronzebeardAI::UpdateEscortAI(), npc_tooga::npc_toogaAI::UpdateFollowerAI(), npc_ringo::npc_ringoAI::UpdateFollowerAI(), InstanceScript::UpdateMinionState(), npc_ranger_lilatha::WaypointReached(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::WaypointReached(), npc_cork_gizelton::npc_cork_gizeltonAI::WaypointReached(), npc_ancestral_wolf::npc_ancestral_wolfAI::WaypointReached(), and npc_bessy::npc_bessyAI::WaypointReached().

◆ AIM_Initialize()

bool Creature::AIM_Initialize ( CreatureAI ai = nullptr)
1097{
1098 // make sure nothing can change the AI during AI update
1099 if (m_AI_locked)
1100 {
1101 LOG_DEBUG("scripts.ai", "AIM_Initialize: failed to init, locked.");
1102 return false;
1103 }
1104
1105 UnitAI* oldAI = i_AI;
1106
1107 // Xinef: called in add to world
1108 //Motion_Initialize();
1109
1110 i_AI = ai ? ai : FactorySelector::SelectAI(this);
1111 delete oldAI;
1112 IsAIEnabled = true;
1113 i_AI->InitializeAI();
1114
1115 // Xinef: Initialize vehicle if it is not summoned!
1116 if (GetVehicleKit() && m_spawnId)
1117 GetVehicleKit()->Reset();
1118 return true;
1119}
#define LOG_DEBUG(filterType__,...)
Definition Log.h:170
Definition UnitAI.h:198
virtual void InitializeAI()
Definition UnitAI.h:209
bool IsAIEnabled
Definition Unit.h:2012
void Reset(bool evading=false)
Definition Vehicle.cpp:120
CreatureAI * SelectAI(Creature *creature)
Definition CreatureAISelector.cpp:78

References Unit::GetVehicleKit(), Unit::i_AI, UnitAI::InitializeAI(), Unit::IsAIEnabled, LOG_DEBUG, m_AI_locked, m_spawnId, Vehicle::Reset(), and FactorySelector::SelectAI().

Referenced by AddToWorld(), Pet::AddToWorld(), Respawn(), WorldObject::SummonTrigger(), and UpdateEntry().

◆ AllLootRemovedFromCorpse()

void Creature::AllLootRemovedFromCorpse ( )
3004{
3005 if (loot.loot_type != LOOT_SKINNING && !IsPet() && GetCreatureTemplate()->SkinLootId && hasLootRecipient())
3006 {
3008 {
3010 }
3011 }
3012
3013 time_t now = GameTime::GetGameTime().count();
3014 if (m_corpseRemoveTime <= now)
3015 {
3016 return;
3017 }
3018
3019 float decayRate = sWorld->getRate(RATE_CORPSE_DECAY_LOOTED);
3020 uint32 diff = uint32((m_corpseRemoveTime - now) * decayRate);
3021
3022 m_respawnTime -= diff;
3023
3024 // corpse skinnable, but without skinning flag, and then skinned, corpse will despawn next update
3026 {
3028 }
3029 else
3030 {
3031 m_corpseRemoveTime -= diff;
3032 }
3033}
LootStore LootTemplates_Skinning("skinning_loot_template", "creature skinning id", true)
@ LOOT_SKINNING
Definition LootMgr.h:85
@ UNIT_FLAG_SKINNABLE
Definition UnitDefines.h:276
@ RATE_CORPSE_DECAY_LOOTED
Definition WorldConfig.h:465
bool hasLootRecipient() const
Definition Creature.h:235
CreatureTemplate const * GetCreatureTemplate() const
Definition Creature.h:209
bool HaveLootFor(uint32 loot_id) const
Definition LootMgr.h:224
bool IsPet() const
Definition Unit.h:747
void SetUnitFlag(UnitFlags flags)
UnitFlags available in UnitDefines.h.
Definition Unit.h:703
Seconds GetGameTime()
Definition GameTime.cpp:38
LootType loot_type
Definition LootMgr.h:326

References GetCreatureTemplate(), GameTime::GetGameTime(), hasLootRecipient(), LootStore::HaveLootFor(), Unit::IsPet(), loot, LOOT_SKINNING, Loot::loot_type, LootTemplates_Skinning, m_corpseRemoveTime, m_respawnTime, RATE_CORPSE_DECAY_LOOTED, Unit::SetUnitFlag(), sWorld, and UNIT_FLAG_SKINNABLE.

Referenced by WorldSession::DoLootRelease(), and Unit::Kill().

◆ CalculateMinMaxDamage()

void Creature::CalculateMinMaxDamage ( WeaponAttackType  attType,
bool  normalized,
bool  addTotalPct,
float &  minDamage,
float &  maxDamage,
uint8  damageIndex 
)
overridevirtual

Implements Unit.

1122{
1123 // creatures only have one damage
1124 if (damageIndex != 0)
1125 {
1126 minDamage = 0.f;
1127 maxDamage = 0.f;
1128 return;
1129 }
1130
1131 UnitMods unitMod;
1132 float variance = 1.0f;
1133 switch (attType)
1134 {
1135 case BASE_ATTACK:
1136 default:
1137 variance = GetCreatureTemplate()->BaseVariance;
1138 unitMod = UNIT_MOD_DAMAGE_MAINHAND;
1139 break;
1140 case OFF_ATTACK:
1141 variance = GetCreatureTemplate()->BaseVariance;
1142 unitMod = UNIT_MOD_DAMAGE_OFFHAND;
1143 break;
1144 case RANGED_ATTACK:
1145 variance = GetCreatureTemplate()->RangeVariance;
1146 unitMod = UNIT_MOD_DAMAGE_RANGED;
1147 break;
1148 }
1149
1150 if (attType == OFF_ATTACK && !HasOffhandWeaponForAttack())
1151 {
1152 minDamage = 0.0f;
1153 maxDamage = 0.0f;
1154 return;
1155 }
1156
1157 float weaponMinDamage = GetWeaponDamageRange(attType, MINDAMAGE);
1158 float weaponMaxDamage = GetWeaponDamageRange(attType, MAXDAMAGE);
1159
1160 // Disarm for creatures
1161 if (HasWeapon(attType) && !HasWeaponForAttack(attType))
1162 {
1163 minDamage *= 0.5f;
1164 maxDamage *= 0.5f;
1165 }
1166
1167 float attackPower = GetTotalAttackPowerValue(attType);
1168 float attackSpeedMulti = GetAPMultiplier(attType, normalized);
1169 float baseValue = GetModifierValue(unitMod, BASE_VALUE) + (attackPower / 14.0f) * variance;
1170 float basePct = GetModifierValue(unitMod, BASE_PCT) * attackSpeedMulti;
1171 float totalValue = GetModifierValue(unitMod, TOTAL_VALUE);
1172 float totalPct = addTotalPct ? GetModifierValue(unitMod, TOTAL_PCT) : 1.0f;
1173 float dmgMultiplier = GetCreatureTemplate()->DamageModifier; // = DamageModifier * _GetDamageMod(rank);
1174
1175 minDamage = ((weaponMinDamage + baseValue) * dmgMultiplier * basePct + totalValue) * totalPct;
1176 maxDamage = ((weaponMaxDamage + baseValue) * dmgMultiplier * basePct + totalValue) * totalPct;
1177
1178 // pussywizard: crashfix (casting negative to uint => min > max => assertion in urand)
1179 if (minDamage < 0.0f || minDamage > 1000000000.0f)
1180 minDamage = 0.0f;
1181 if (maxDamage < 0.0f || maxDamage > 1000000000.0f)
1182 maxDamage = 0.0f;
1183 if (minDamage > maxDamage)
1184 minDamage = maxDamage;
1185}
@ MINDAMAGE
Definition Unit.h:136
@ MAXDAMAGE
Definition Unit.h:137
UnitMods
Definition Unit.h:143
@ UNIT_MOD_DAMAGE_OFFHAND
Definition Unit.h:167
@ UNIT_MOD_DAMAGE_RANGED
Definition Unit.h:168
@ UNIT_MOD_DAMAGE_MAINHAND
Definition Unit.h:166
@ OFF_ATTACK
Definition Unit.h:211
@ BASE_ATTACK
Definition Unit.h:210
@ RANGED_ATTACK
Definition Unit.h:212
@ BASE_VALUE
Definition Unit.h:127
@ TOTAL_VALUE
Definition Unit.h:129
@ TOTAL_PCT
Definition Unit.h:130
@ BASE_PCT
Definition Unit.h:128
bool HasWeaponForAttack(WeaponAttackType type) const override
Definition Creature.h:195
bool HasWeapon(WeaponAttackType type) const override
Definition Creature.cpp:3195
bool HasOffhandWeaponForAttack() const
Definition Unit.h:929
float GetTotalAttackPowerValue(WeaponAttackType attType, Unit *pVictim=nullptr) const
Definition Unit.cpp:15520
float GetWeaponDamageRange(WeaponAttackType attType, WeaponDamageRange type, uint8 damageIndex=0) const
Definition Unit.cpp:15544
float GetModifierValue(UnitMods unitMod, UnitModifierType modifierType) const
Definition Unit.cpp:15380
float GetAPMultiplier(WeaponAttackType attType, bool normalized)
Definition Unit.cpp:17292
float BaseVariance
Definition CreatureData.h:211
float RangeVariance
Definition CreatureData.h:212
float DamageModifier
Definition CreatureData.h:208

References BASE_ATTACK, BASE_PCT, BASE_VALUE, CreatureTemplate::BaseVariance, CreatureTemplate::DamageModifier, Unit::GetAPMultiplier(), GetCreatureTemplate(), Unit::GetModifierValue(), Unit::GetTotalAttackPowerValue(), Unit::GetWeaponDamageRange(), Unit::HasOffhandWeaponForAttack(), HasWeapon(), HasWeaponForAttack(), MAXDAMAGE, MINDAMAGE, OFF_ATTACK, RANGED_ATTACK, CreatureTemplate::RangeVariance, TOTAL_PCT, TOTAL_VALUE, UNIT_MOD_DAMAGE_MAINHAND, UNIT_MOD_DAMAGE_OFFHAND, and UNIT_MOD_DAMAGE_RANGED.

◆ CallAssistance()

void Creature::CallAssistance ( Unit target = nullptr)
2438{
2439 if (!target)
2440 {
2441 target = GetVictim();
2442 }
2443
2444 if (!m_AlreadyCallAssistance && target && !IsPet() && !IsCharmed())
2445 {
2446 SetNoCallAssistance(true);
2447
2448 float radius = sWorld->getFloatConfig(CONFIG_CREATURE_FAMILY_ASSISTANCE_RADIUS);
2449
2450 if (radius > 0)
2451 {
2452 std::list<Creature*> assistList;
2453
2454 Acore::AnyAssistCreatureInRangeCheck u_check(this, target, radius);
2456 Cell::VisitGridObjects(this, searcher, radius);
2457
2458 if (!assistList.empty())
2459 {
2460 AssistDelayEvent* e = new AssistDelayEvent(target->GetGUID(), this);
2461 while (!assistList.empty())
2462 {
2463 // Pushing guids because in delay can happen some creature gets despawned => invalid pointer
2464 e->AddAssistant((*assistList.begin())->GetGUID());
2465 assistList.pop_front();
2466 }
2468 }
2469 }
2470 }
2471}
@ CONFIG_CREATURE_FAMILY_ASSISTANCE_RADIUS
Definition WorldConfig.h:152
@ CONFIG_CREATURE_FAMILY_ASSISTANCE_DELAY
Definition WorldConfig.h:232
Definition GridNotifiers.h:1256
Definition Creature.h:534
void AddAssistant(ObjectGuid guid)
Definition Creature.h:539
void SetNoCallAssistance(bool val)
Definition Creature.h:271
void AddEvent(BasicEvent *Event, uint64 e_time, bool set_addtime=true)
Definition EventProcessor.h:103
uint64 CalculateTime(uint64 t_offset) const
Definition EventProcessor.cpp:159
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:113
Unit * GetVictim() const
Definition Unit.h:848
EventProcessor m_Events
Definition Object.h:718
Definition GridNotifiers.h:463
static void VisitGridObjects(WorldObject const *obj, T &visitor, float radius)
Definition CellImpl.h:165

References AssistDelayEvent::AddAssistant(), EventProcessor::AddEvent(), EventProcessor::CalculateTime(), CONFIG_CREATURE_FAMILY_ASSISTANCE_DELAY, CONFIG_CREATURE_FAMILY_ASSISTANCE_RADIUS, Object::GetGUID(), Unit::GetVictim(), Unit::IsCharmed(), Unit::IsPet(), m_AlreadyCallAssistance, WorldObject::m_Events, SetNoCallAssistance(), sWorld, and Cell::VisitGridObjects().

Referenced by Unit::Attack(), AssistanceMovementGenerator::Finalize(), and Update().

◆ CallForHelp()

void Creature::CallForHelp ( float  fRadius,
Unit target = nullptr 
)
2474{
2475 if (radius <= 0.0f || IsPet() || IsCharmed())
2476 {
2477 return;
2478 }
2479
2480 if (!target)
2481 {
2482 target = GetVictim();
2483 }
2484
2485 if (!target)
2486 {
2487 return;
2488 }
2489
2490 Acore::CallOfHelpCreatureInRangeDo u_do(this, target, radius);
2492 Cell::VisitGridObjects(this, worker, radius);
2493}
Definition GridNotifiers.h:1137
Definition GridNotifiers.h:479

References Unit::GetVictim(), Unit::IsCharmed(), Unit::IsPet(), and Cell::VisitGridObjects().

Referenced by BossAI::_JustEngagedWith(), boss_thorim_start_npcs::boss_thorim_start_npcsAI::DamageTaken(), boss_emperor_dagran_thaurissan::boss_draganthaurissanAI::JustEngagedWith(), npc_sunblade_scout::JustEngagedWith(), boss_grand_champion::boss_grand_championAI::JustEngagedWith(), npc_frostwing_vrykul::npc_frostwing_vrykulAI::JustEngagedWith(), npc_icc_nerubar_broodkeeper::npc_icc_nerubar_broodkeeperAI::JustEngagedWith(), boss_thorim_start_npcs::boss_thorim_start_npcsAI::JustEngagedWith(), boss_thorim_gauntlet_npcs::boss_thorim_gauntlet_npcsAI::JustEngagedWith(), boss_xt002::boss_xt002AI::JustEngagedWith(), boss_blackheart_the_inciter::JustEngagedWith(), boss_sartharion::boss_sartharionAI::JustEngagedWith(), boss_moroes::JustEngagedWith(), npc_sindragosa_trash::npc_sindragosa_trashAI::JustEngagedWith(), boss_anubrekhan::boss_anubrekhanAI::JustEngagedWith(), boss_faerlina::boss_faerlinaAI::JustEngagedWith(), boss_gothik::boss_gothikAI::JustSummoned(), npc_sentinel_leader::UpdateAI(), and npc_cork_gizelton::npc_cork_gizeltonAI::WaypointReached().

◆ CanAlwaysSee()

bool Creature::CanAlwaysSee ( WorldObject const *  obj) const
overrideprotectedvirtual

Reimplemented from WorldObject.

1897{
1898 if (IsAIEnabled && AI()->CanSeeAlways(obj))
1899 return true;
1900
1901 return false;
1902}
CreatureAI * AI() const
Definition Creature.h:141

References AI(), and Unit::IsAIEnabled.

◆ CanAssistTo()

bool Creature::CanAssistTo ( Unit const *  u,
Unit const *  enemy,
bool  checkfaction = true 
) const
Todo:
: Implement aggro range, detection range and assistance range templates
2496{
2497 // is it true?
2499 return false;
2500
2501 // we don't need help from zombies :)
2502 if (!IsAlive())
2503 return false;
2504
2505 // Xinef: we cannot assist in evade mode
2506 if (IsInEvadeMode())
2507 return false;
2508
2509 // pussywizard: or if enemy is in evade mode
2510 if (enemy && enemy->IsCreature() && enemy->ToCreature()->IsInEvadeMode())
2511 return false;
2512
2513 // we don't need help from non-combatant ;)
2514 if (IsCivilian())
2515 return false;
2516
2518 return false;
2519
2520 // skip fighting creature
2521 if (IsEngaged())
2522 return false;
2523
2524 // only free creature
2526 return false;
2527
2530 {
2531 return false;
2532 }
2533
2534 // only from same creature faction
2535 if (checkfaction)
2536 {
2537 if (GetFaction() != u->GetFaction())
2538 return false;
2539
2540 if (!RespondsToCallForHelp())
2541 return false;
2542 }
2543 else
2544 {
2545 if (!IsFriendlyTo(u))
2546 return false;
2547 }
2548
2549 // skip non hostile to caster enemy creatures
2550 if (!IsHostileTo(enemy))
2551 return false;
2552
2553 // Check if can see the enemy
2554 if (!CanSeeOrDetect(enemy))
2555 {
2556 return false;
2557 }
2558
2559 return true;
2560}
@ CREATURE_FLAG_EXTRA_IGNORE_ALL_ASSISTANCE_CALLS
Definition CreatureData.h:71
@ UNIT_FLAG_NON_ATTACKABLE
Definition UnitDefines.h:251
@ UNIT_FLAG_NOT_SELECTABLE
Definition UnitDefines.h:275
bool IsCivilian() const
Definition Creature.h:75
bool HasReactState(ReactStates state) const
Definition Creature.h:97
bool IsInEvadeMode() const
Definition Creature.h:135
bool RespondsToCallForHelp() const
Definition Unit.h:975
bool HasUnitFlag(UnitFlags flags) const
Definition Unit.h:702
bool IsAlive() const
Definition Unit.h:1707
uint32 GetFaction() const
Definition Unit.h:801
bool IsEngaged() const
Definition Unit.h:876
bool IsImmuneToNPC() const
Definition Unit.h:874
ObjectGuid GetCharmerOrOwnerGUID() const
Definition Unit.h:1222
bool CanSeeOrDetect(WorldObject const *obj, bool ignoreStealth=false, bool distanceCheck=false, bool checkAlert=false) const
Definition Object.cpp:1722
bool HasFlagsExtra(uint32 flag) const
Definition CreatureData.h:283

References WorldObject::CanSeeOrDetect(), CREATURE_FLAG_EXTRA_IGNORE_ALL_ASSISTANCE_CALLS, Unit::GetCharmerOrOwnerGUID(), Unit::GetFaction(), CreatureTemplate::HasFlagsExtra(), HasReactState(), Unit::HasUnitFlag(), Unit::IsAlive(), IsCivilian(), Object::IsCreature(), Unit::IsEngaged(), Unit::IsFriendlyTo(), Unit::IsHostileTo(), Unit::IsImmuneToNPC(), IsInEvadeMode(), m_creatureInfo, REACT_AGGRESSIVE, Unit::RespondsToCallForHelp(), Object::ToCreature(), UNIT_FLAG_NON_ATTACKABLE, and UNIT_FLAG_NOT_SELECTABLE.

Referenced by AssistDelayEvent::Execute(), Acore::CallOfHelpCreatureInRangeDo::operator()(), Acore::AnyAssistCreatureInRangeCheck::operator()(), and Acore::NearestAssistCreatureInCreatureRangeCheck::operator()().

◆ CanCastSpell()

bool Creature::CanCastSpell ( uint32  spellID) const

Returns true if the creature is able to cast the spell.

3854{
3855 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellID);
3856 int32 currentPower = GetPower(getPowerType());
3857
3859 {
3860 return false;
3861 }
3862
3863 if (spellInfo && (currentPower < spellInfo->CalcPowerCost(this, spellInfo->GetSchoolMask())))
3864 {
3865 return false;
3866 }
3867
3868 return true;
3869}
std::int32_t int32
Definition Define.h:103
@ UNIT_FLAG_SILENCED
Definition UnitDefines.h:263
@ UNIT_FIELD_FLAGS
Definition UpdateFields.h:117
bool IsSpellProhibited(SpellSchoolMask idSchoolMask) const
Definition Creature.cpp:2843
bool HasFlag(uint16 index, uint32 flag) const
Definition Object.cpp:889
SpellSchoolMask GetSchoolMask() const
Definition SpellInfo.cpp:1998
Powers getPowerType() const
Definition Unit.h:1054
uint32 GetPower(Powers power) const
Definition Unit.h:1058

References Unit::GetPower(), Unit::getPowerType(), SpellInfo::GetSchoolMask(), Object::HasFlag(), IsSpellProhibited(), sSpellMgr, UNIT_FIELD_FLAGS, and UNIT_FLAG_SILENCED.

Referenced by boss_shade_of_aran::JustEngagedWith(), and npc_capernian::ScheduleEvents().

◆ CanCreatureAttack()

bool Creature::CanCreatureAttack ( Unit const *  victim,
bool  skipDistCheck = false 
) const
2633{
2634 if (!victim->IsInMap(this))
2635 return false;
2636
2637 if (!IsValidAttackTarget(victim))
2638 return false;
2639
2640 if (!victim->isInAccessiblePlaceFor(this))
2641 return false;
2642
2643 if (IsAIEnabled && !AI()->CanAIAttack(victim))
2644 return false;
2645
2646 // pussywizard: we cannot attack in evade mode
2647 if (IsInEvadeMode())
2648 return false;
2649
2650 // pussywizard: or if enemy is in evade mode
2651 if (victim->IsCreature() && victim->ToCreature()->IsInEvadeMode())
2652 return false;
2653
2654 // cannot attack if is during 5 second grace period, unless being attacked
2655 if (m_respawnedTime && (GameTime::GetGameTime().count() - m_respawnedTime) < 5 && !IsEngagedBy(victim))
2656 {
2657 return false;
2658 }
2659
2660 // if victim is in FD and we can't see that
2661 if (victim->HasUnitFlag2(UNIT_FLAG2_FEIGN_DEATH) && !CanIgnoreFeignDeath())
2662 {
2663 return false;
2664 }
2665
2667 {
2668 if (GetMap()->IsDungeon())
2669 return true;
2670
2671 float visibility = std::max<float>(GetVisibilityRange(), victim->GetVisibilityRange());
2672
2673 // if outside visibility
2674 if (!IsWithinDist(victim, visibility))
2675 return false;
2676
2677 // pussywizard: don't check distance to home position if recently damaged (allow kiting away from spawnpoint!)
2678 // xinef: this should include taunt auras
2680 return true;
2681 }
2682
2683 if (skipDistCheck)
2684 return true;
2685
2686 if (Unit* unit = GetCharmerOrOwner())
2687 {
2688 float visibilityDist = std::min<float>(GetMap()->GetVisibilityRange() + GetObjectSize() * 2, DEFAULT_VISIBILITY_DISTANCE);
2689 return victim->IsWithinDist(unit, visibilityDist);
2690 }
2691
2692 float dist = sWorld->getFloatConfig(CONFIG_CREATURE_LEASH_RADIUS);
2693 if (!dist)
2694 return true;
2695
2696 float x, y, z;
2697 x = y = z = 0.0f;
2698 if (GetMotionMaster()->GetMotionSlot(MOTION_SLOT_IDLE)->GetResetPosition(x, y, z))
2699 return IsInDist2d(x, y, dist);
2700 else
2701 return IsInDist2d(&m_homePosition, dist);
2702}
@ MOTION_SLOT_IDLE
Definition MotionMaster.h:63
#define DEFAULT_VISIBILITY_DISTANCE
Definition ObjectDefines.h:40
@ CONFIG_CREATURE_LEASH_RADIUS
Definition WorldConfig.h:150
bool isWorldBoss() const
Definition Creature.h:121
time_t GetLastLeashExtensionTime() const
Definition Creature.cpp:3723
uint8 GetLeashTimer() const
Definition Creature.cpp:3733
MotionMaster * GetMotionMaster()
Definition Unit.h:1673
Unit * GetCharmerOrOwner() const
Definition Unit.h:1213
bool IsValidAttackTarget(Unit const *target, SpellInfo const *bySpell=nullptr) const
Definition Unit.cpp:13963
bool HasTauntAura() const
Definition Unit.h:1754
bool IsWithinDist(WorldObject const *obj, float dist2compare, bool is3D=true, bool useBoundingRadius=true) const
Definition Object.cpp:1312
float GetVisibilityRange() const
Definition Object.cpp:1641
float GetObjectSize() const
Definition Object.cpp:2783
bool IsInDist2d(float x, float y, float dist) const
Definition Position.h:211

References AI(), CanIgnoreFeignDeath(), CONFIG_CREATURE_LEASH_RADIUS, DEFAULT_VISIBILITY_DISTANCE, Unit::GetCharmerOrOwner(), Unit::GetCharmerOrOwnerGUID(), GameTime::GetGameTime(), GetLastLeashExtensionTime(), GetLeashTimer(), WorldObject::GetMap(), Unit::GetMotionMaster(), WorldObject::GetObjectSize(), WorldObject::GetVisibilityRange(), Unit::HasTauntAura(), Unit::HasUnitFlag2(), Unit::IsAIEnabled, Object::IsCreature(), Unit::IsEngagedBy(), Unit::isInAccessiblePlaceFor(), Position::IsInDist2d(), IsInEvadeMode(), WorldObject::IsInMap(), Object::IsPlayer(), Unit::IsValidAttackTarget(), WorldObject::IsWithinDist(), isWorldBoss(), m_homePosition, m_respawnedTime, MOTION_SLOT_IDLE, sWorld, Object::ToCreature(), and UNIT_FLAG2_FEIGN_DEATH.

Referenced by PetAI::_needToStop(), boss_hadronox::boss_hadronoxAI::AnyPlayerValid(), CanStartAttack(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::JustSummoned(), PetAI::SelectNextTarget(), ThreatContainer::SelectNextVictim(), SelectVictim(), npc_pet_shaman_earth_elemental::UpdateAI(), and npc_pet_shaman_fire_elemental::UpdateAI().

◆ CanEnterWater()

bool Creature::CanEnterWater ( ) const
overridevirtual

Implements Unit.

3287{
3288 if (CanSwim())
3289 return true;
3290
3292}
bool CanSwim() const override
This method check the current flag/status of a creature and its inhabit type.
Definition Creature.cpp:3275
CreatureMovementData const & GetMovementTemplate() const
Definition Creature.cpp:2995
bool IsSwimAllowed() const
Definition CreatureData.h:135

References CanSwim(), GetMovementTemplate(), and CreatureMovementData::IsSwimAllowed().

Referenced by ConfusedMovementGenerator< T >::_InitSpecific(), RandomMovementGenerator< T >::_setRandomLocation(), Map::CanReachPositionAndGetValidCoords(), PathGenerator::CreateFilter(), Unit::isInAccessiblePlaceFor(), and RefreshSwimmingFlag().

◆ CanFly()

bool Creature::CanFly ( ) const
inlineoverridevirtual

◆ CanGeneratePickPocketLoot()

bool Creature::CanGeneratePickPocketLoot ( ) const

◆ CanHover()

bool Creature::CanHover ( ) const
inline
bool IsHovering() const
Definition Unit.h:1624
CreatureGroundMovementType Ground
Definition CreatureData.h:122

References GetMovementTemplate(), CreatureMovementData::Ground, Hover, and Unit::IsHovering().

Referenced by LoadCreaturesAddon(), and UpdateMovementFlags().

◆ CanIgnoreFeignDeath()

bool Creature::CanIgnoreFeignDeath ( ) const
inline
@ CREATURE_FLAG_EXTRA_IGNORE_FEIGN_DEATH
Definition CreatureData.h:61
bool HasFlagsExtra(uint32 flag) const
Definition Creature.h:73

References CREATURE_FLAG_EXTRA_IGNORE_FEIGN_DEATH, and HasFlagsExtra().

Referenced by _IsTargetAcceptable(), and CanCreatureAttack().

◆ CanNotReachTarget()

bool Creature::CanNotReachTarget ( ) const
3692{
3693 return m_cannotReachTarget;
3694}
ObjectGuid m_cannotReachTarget
Definition Creature.h:519

References m_cannotReachTarget.

Referenced by IsEvadingAttacks(), IsNotReachableAndNeedRegen(), and Update().

◆ CanPeriodicallyCallForAssistance()

bool Creature::CanPeriodicallyCallForAssistance ( ) const
private
3744{
3745 if (!IsInCombat())
3746 return false;
3747
3749 return false;
3750
3751 if (!CanHaveThreatList())
3752 return false;
3753
3754 if (IsSummon() && GetMap()->Instanceable())
3755 return false;
3756
3757 return true;
3758}
@ UNIT_STATE_POSSESSED
Definition UnitDefines.h:186
bool IsSummon() const
Definition Unit.h:744
bool HasUnitState(const uint32 f) const
Definition Unit.h:691
bool CanHaveThreatList(bool skipAliveCheck=false) const
Definition Unit.cpp:14706
bool IsInCombat() const
Definition Unit.h:879

References Unit::CanHaveThreatList(), WorldObject::GetMap(), Unit::HasUnitState(), Unit::IsInCombat(), Unit::IsSummon(), UNIT_STATE_DIED, and UNIT_STATE_POSSESSED.

Referenced by Update().

◆ CanStartAttack()

bool Creature::CanStartAttack ( Unit const *  u) const
1920{
1921 if (IsCivilian())
1922 return false;
1923
1924 // This set of checks is should be done only for creatures
1925 if ((IsImmuneToNPC() && !who->IsPlayer()) || // flag is valid only for non player characters
1926 (IsImmuneToPC() && who->IsPlayer())) // immune to PC and target is a player, return false
1927 {
1928 return false;
1929 }
1930
1931 if (Unit* owner = who->GetOwner())
1932 if (owner->IsPlayer() && IsImmuneToPC()) // immune to PC and target has player owner
1933 return false;
1934
1935 // Do not attack non-combat pets
1936 if (who->IsCreature() && who->GetCreatureType() == CREATURE_TYPE_NON_COMBAT_PET)
1937 return false;
1938
1939 if (!CanFly() && (GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE + m_CombatDistance)) // too much Z difference, skip very costy vmap calculations here
1940 return false;
1941
1942 if (!_IsTargetAcceptable(who))
1943 return false;
1944
1945 if (IsNeutralToAll() || !IsWithinDistInMap(who, GetAggroRange(who) + m_CombatDistance, true, false)) // pussywizard: +m_combatDistance for turrets and similar
1946 return false;
1947
1948 if (!CanCreatureAttack(who))
1949 return false;
1950
1952 return false;
1953
1954 if (!IsHostileTo(who))
1955 return false;
1956
1957 return IsWithinLOSInMap(who);
1958}
#define CREATURE_Z_ATTACK_RANGE
Definition Creature.h:38
@ CREATURE_TYPE_NON_COMBAT_PET
Definition SharedDefines.h:2639
@ UNIT_STATE_STUNNED
Definition UnitDefines.h:173
bool _IsTargetAcceptable(Unit const *target) const
Definition Creature.cpp:2564
bool CanFly() const override
Definition Creature.h:82
bool CanCreatureAttack(Unit const *victim, bool skipDistCheck=false) const
Definition Creature.cpp:2632
float GetAggroRange(Unit const *target) const
Definition Creature.cpp:3406
Unit * GetOwner() const
Definition Unit.cpp:10686
bool IsImmuneToPC() const
Definition Unit.h:872
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:1343
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool useBoundingRadius=true) const
Definition Object.cpp:1317
float GetDistanceZ(WorldObject const *obj) const
Definition Object.cpp:1194

References _IsTargetAcceptable(), CanCreatureAttack(), CanFly(), CREATURE_TYPE_NON_COMBAT_PET, CREATURE_Z_ATTACK_RANGE, GetAggroRange(), Unit::GetCreatureType(), WorldObject::GetDistanceZ(), Unit::GetOwner(), Unit::HasUnitState(), IsCivilian(), Object::IsCreature(), Unit::IsHostileTo(), Unit::IsImmuneToNPC(), Unit::IsImmuneToPC(), Unit::IsNeutralToAll(), Object::IsPlayer(), WorldObject::IsWithinDistInMap(), WorldObject::IsWithinLOSInMap(), m_CombatDistance, and UNIT_STATE_STUNNED.

Referenced by npc_shadow_of_doom::IsSummonedBy(), CreatureAI::MoveInLineOfSight(), FollowerAI::MoveInLineOfSight(), npc_escortAI::MoveInLineOfSight(), SmartAI::MoveInLineOfSight(), and Acore::NearestHostileUnitInAttackDistanceCheck::operator()().

◆ CanSwim()

bool Creature::CanSwim ( ) const
overridevirtual

This method check the current flag/status of a creature and its inhabit type.

Pets should swim by default to properly follow the player NOTE: You can set the UNIT_FLAG_CANNOT_SWIM temporary to deny a creature to swim

Reimplemented from Unit.

3276{
3277 if (Unit::CanSwim() || (!Unit::CanSwim() && !CanFly()))
3278 return true;
3279
3280 if (IsPet())
3281 return true;
3282
3283 return false;
3284}
virtual bool CanSwim() const
this method checks the current flag of a unit
Definition Unit.cpp:19786

References CanFly(), Unit::CanSwim(), and Unit::IsPet().

Referenced by PathGenerator::BuildPolyPath(), CanEnterWater(), PathGenerator::IsSwimmableSegment(), WorldObject::UpdateAllowedPositionZ(), and UpdateMovementFlags().

◆ CanWalk()

◆ ClearLastLeashExtensionTimePtr()

◆ ClearProhibitedSpellTimers()

void Creature::ClearProhibitedSpellTimers ( )
2860{
2861 for (uint8 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i)
2862 {
2863 m_ProhibitSchoolTime[i] = 0;
2864 }
2865}

References m_ProhibitSchoolTime, MAX_SPELL_SCHOOL, and SPELL_SCHOOL_NORMAL.

Referenced by boss_shade_of_aran::JustEngagedWith().

◆ ClearTarget()

void Creature::ClearTarget ( )
inline
381{ SetTarget(); };
void SetTarget(ObjectGuid guid=ObjectGuid::Empty) override
Definition Creature.cpp:3560

References SetTarget().

Referenced by boss_julianne::DamageTaken(), npc_sunblade_scout::JustEngagedWith(), npc_amanishi_scout::JustEngagedWith(), and boss_leotheras_the_blind::Reset().

◆ Create()

bool Creature::Create ( ObjectGuid::LowType  guidlow,
Map map,
uint32  phaseMask,
uint32  Entry,
uint32  vehId,
float  x,
float  y,
float  z,
float  ang,
const CreatureData data = nullptr 
)

Relocate before CreateFromProto, to initialize coords and allow returning correct zone id for selecting OutdoorPvP/Battlefield script

Need to be called after LoadCreaturesAddon - MOVEMENTFLAG_HOVER is set there

1137{
1138 ASSERT(map);
1139 SetMap(map);
1140 SetPhaseMask(phaseMask, false);
1141
1142 CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(Entry);
1143 if (!cinfo)
1144 {
1145 LOG_ERROR("sql.sql", "Creature::Create(): creature template (guidlow: {}, entry: {}) does not exist.", guidlow, Entry);
1146 return false;
1147 }
1148
1151 Relocate(x, y, z, ang);
1152
1153 if (!IsPositionValid())
1154 {
1155 LOG_ERROR("entities.unit", "Creature::Create(): given coordinates for creature (guidlow {}, entry {}) are not valid (X: {}, Y: {}, Z: {}, O: {})", guidlow, Entry, x, y, z, ang);
1156 return false;
1157 }
1158
1159 // area/zone id is needed immediately for ZoneScript::GetCreatureEntry hook before it is known which creature template to load (no model/scale available yet)
1160 PositionFullTerrainStatus terrainData;
1162 ProcessPositionDataChanged(terrainData);
1163
1164 //oX = x; oY = y; dX = x; dY = y; m_moveTime = 0; m_startMove = 0;
1165 if (!CreateFromProto(guidlow, Entry, vehId, data))
1166 return false;
1167
1169
1170 switch (GetCreatureTemplate()->rank)
1171 {
1174 break;
1177 break;
1180 break;
1182 // Xinef: Reduce corpse delay for bossess outside of instance
1183 if (!GetInstanceId())
1184 m_corpseDelay = sWorld->getIntConfig(CONFIG_CORPSE_DECAY_ELITE) * 2;
1185 else
1187 break;
1188 default:
1190 break;
1191 }
1192
1194 CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelRandomGender(&display, cinfo);
1195 if (minfo && !IsTotem()) // Cancel load if no model defined or if totem
1196 {
1197 SetDisplayId(display.CreatureDisplayID, display.DisplayScale);
1198 SetNativeDisplayId(display.CreatureDisplayID);
1199 }
1200
1203
1206
1208
1210 {
1213 }
1214 else if (cinfo->type_flags & CREATURE_TYPE_FLAG_VISIBLE_TO_GHOSTS) // Xinef: Add ghost visibility for ghost units
1215 {
1218 }
1219 if (Entry == VISUAL_WAYPOINT)
1220 SetVisible(false);
1221
1224
1225 return true;
1226}
@ CREATURE_FLAG_EXTRA_IGNORE_PATHFINDING
Definition CreatureData.h:74
@ CREATURE_FLAG_EXTRA_GHOST_VISIBILITY
Definition CreatureData.h:55
#define LOG_ERROR(filterType__,...)
Definition Log.h:158
#define VISUAL_WAYPOINT
Definition MotionMaster.h:34
#define DEFAULT_COLLISION_HEIGHT
Definition ObjectDefines.h:50
#define sObjectMgr
Definition ObjectMgr.h:1650
@ SERVERSIDE_VISIBILITY_GHOST
Definition SharedDefines.h:1274
@ GHOST_VISIBILITY_ALIVE
Definition SharedDefines.h:1281
@ GHOST_VISIBILITY_GHOST
Definition SharedDefines.h:1282
@ CREATURE_TYPE_FLAG_VISIBLE_TO_GHOSTS
Definition SharedDefines.h:2696
@ UNIT_STATE_IGNORE_PATHFINDING
Definition UnitDefines.h:197
@ CONFIG_CORPSE_DECAY_ELITE
Definition WorldConfig.h:251
@ CONFIG_CORPSE_DECAY_NORMAL
Definition WorldConfig.h:249
@ CONFIG_CORPSE_DECAY_WORLDBOSS
Definition WorldConfig.h:253
@ CONFIG_CORPSE_DECAY_RARE
Definition WorldConfig.h:250
@ CONFIG_CORPSE_DECAY_RAREELITE
Definition WorldConfig.h:252
bool LoadCreaturesAddon(bool reload=false)
Definition Creature.cpp:2717
void SetDisplayId(uint32 displayId, float displayScale=1.f) override
Definition Creature.cpp:3533
bool CreateFromProto(ObjectGuid::LowType guidlow, uint32 Entry, uint32 vehId, const CreatureData *data=nullptr)
Definition Creature.cpp:1641
uint32 GetScriptId() const
Definition Creature.cpp:3058
void UpdateMovementFlags()
Definition Creature.cpp:3451
float GetNativeObjectScale() const override
Definition Creature.cpp:3509
void LoadSparringPct()
Definition Creature.cpp:2803
void SetValue(FLAG_TYPE flag, T_VALUES value)
Definition Object.h:384
void GetFullTerrainStatusForPosition(uint32 phaseMask, float x, float y, float z, float collisionHeight, PositionFullTerrainStatus &data, uint8 reqLiquidType=MAP_ALL_LIQUIDS)
Definition Map.cpp:1360
void SetVisible(bool x)
Definition Unit.cpp:14324
void SetNativeDisplayId(uint32 displayId)
Definition Unit.h:1891
void AddUnitState(uint32 f)
Definition Unit.h:690
float GetHoverHeight() const
Definition Unit.h:1630
uint32 GetNativeDisplayId() const
Definition Unit.h:1889
void SetPhaseMask(uint32 newPhaseMask, bool update) override
Definition Unit.cpp:19137
void ProcessPositionDataChanged(PositionFullTerrainStatus const &data) override
Definition Unit.cpp:4310
bool IsSpiritHealer() const
Definition Unit.h:762
bool IsTotem() const
Definition Unit.h:749
bool IsSpiritGuide() const
Definition Unit.h:763
uint32 GetPhaseMask() const
Definition Object.h:502
uint32 LastUsedScriptID
Definition Object.h:667
uint32 GetInstanceId() const
Definition Object.h:499
virtual void SetMap(Map *map)
Definition Object.cpp:2101
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPES > m_serverSideVisibilityDetect
Definition Object.h:603
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPES > m_serverSideVisibility
Definition Object.h:602
uint32 const Entry[3]
Definition instance_blackwing_lair.cpp:73
Definition CreatureData.h:398
Definition CreatureData.h:169
Definition CreatureData.h:186
uint32 type_flags
Definition CreatureData.h:223
Definition Map.h:92
float m_positionZ
Definition Position.h:57
float GetPositionZ() const
Definition Position.h:123
bool IsPositionValid() const
Definition Position.cpp:176
float GetPositionX() const
Definition Position.h:121
float GetPositionY() const
Definition Position.h:122
void Relocate(float x, float y)
Definition Position.h:77

References Unit::AddUnitState(), ASSERT, CONFIG_CORPSE_DECAY_ELITE, CONFIG_CORPSE_DECAY_NORMAL, CONFIG_CORPSE_DECAY_RARE, CONFIG_CORPSE_DECAY_RAREELITE, CONFIG_CORPSE_DECAY_WORLDBOSS, CreateFromProto(), CREATURE_ELITE_ELITE, CREATURE_ELITE_RARE, CREATURE_ELITE_RAREELITE, CREATURE_ELITE_WORLDBOSS, CREATURE_FLAG_EXTRA_GHOST_VISIBILITY, CREATURE_FLAG_EXTRA_IGNORE_PATHFINDING, CREATURE_TYPE_FLAG_VISIBLE_TO_GHOSTS, CreatureModel::CreatureDisplayID, DEFAULT_COLLISION_HEIGHT, CreatureModel::DisplayScale, Entry, GetCreatureTemplate(), Map::GetFullTerrainStatusForPosition(), Unit::GetHoverHeight(), WorldObject::GetInstanceId(), WorldObject::GetMap(), Unit::GetNativeDisplayId(), GetNativeObjectScale(), WorldObject::GetPhaseMask(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), GetScriptId(), GHOST_VISIBILITY_ALIVE, GHOST_VISIBILITY_GHOST, HasFlagsExtra(), Position::IsPositionValid(), Unit::IsSpiritGuide(), Unit::IsSpiritHealer(), Unit::IsTotem(), WorldObject::LastUsedScriptID, LoadCreaturesAddon(), LoadSparringPct(), LOG_ERROR, m_corpseDelay, Position::m_positionZ, WorldObject::m_serverSideVisibility, WorldObject::m_serverSideVisibilityDetect, Unit::ProcessPositionDataChanged(), Position::Relocate(), SERVERSIDE_VISIBILITY_GHOST, SetDisplayId(), WorldObject::SetMap(), Unit::SetNativeDisplayId(), Unit::SetPhaseMask(), FlaggedValuesArray32< T_VALUES, T_FLAGS, FLAG_TYPE, ARRAY_SIZE >::SetValue(), Unit::SetVisible(), sObjectMgr, sWorld, CreatureTemplate::type_flags, UNIT_STATE_IGNORE_PATHFINDING, UpdateMovementFlags(), and VISUAL_WAYPOINT.

Referenced by Battleground::AddCreature(), debug_commandscript::HandleDebugSpawnVehicleCommand(), npc_commandscript::HandleNpcAddCommand(), wp_commandscript::HandleWpModifyCommand(), wp_commandscript::HandleWpShowCommand(), LoadCreatureFromDB(), Battlefield::SpawnCreature(), and Map::SummonCreature().

◆ CreateFromProto()

bool Creature::CreateFromProto ( ObjectGuid::LowType  guidlow,
uint32  Entry,
uint32  vehId,
const CreatureData data = nullptr 
)
protected
1642{
1643 SetZoneScript();
1644 if (GetZoneScript() && data)
1645 {
1646 uint32 FirstEntry = GetZoneScript()->GetCreatureEntry(guidlow, data);
1647 if (!FirstEntry)
1648 return false;
1649 }
1650
1651 CreatureTemplate const* normalInfo = sObjectMgr->GetCreatureTemplate(Entry);
1652 if (!normalInfo)
1653 {
1654 LOG_ERROR("sql.sql", "Creature::CreateFromProto(): creature template (guidlow: {}, entry: {}) does not exist.", guidlow, Entry);
1655 return false;
1656 }
1657
1659
1660 Object::_Create(guidlow, Entry, (vehId || normalInfo->VehicleId) ? HighGuid::Vehicle : HighGuid::Unit);
1661
1662 // Xinef: select proper vehicle id
1663 if (!vehId)
1664 {
1665 CreatureTemplate const* cinfo = normalInfo;
1666 for (uint8 diff = uint8(GetMap()->GetSpawnMode()); diff > 0 && !IsPet();)
1667 {
1668 // we already have valid Map pointer for current creature!
1669 if (cinfo->DifficultyEntry[diff - 1])
1670 {
1671 cinfo = sObjectMgr->GetCreatureTemplate(normalInfo->DifficultyEntry[diff - 1]);
1672 if (cinfo && cinfo->VehicleId)
1673 break; // template found
1674
1675 // check and reported at startup, so just ignore (restore normalInfo)
1676 cinfo = normalInfo;
1677 }
1678
1679 // for instances heroic to normal, other cases attempt to retrieve previous difficulty
1680 if (diff >= RAID_DIFFICULTY_10MAN_HEROIC && GetMap()->IsRaid())
1681 diff -= 2; // to normal raid difficulty cases
1682 else
1683 --diff;
1684 }
1685
1686 if (cinfo->VehicleId)
1687 CreateVehicleKit(cinfo->VehicleId, (cinfo->VehicleId != normalInfo->VehicleId ? cinfo->Entry : normalInfo->Entry));
1688 }
1689 else
1690 CreateVehicleKit(vehId, Entry);
1691
1692 if (!UpdateEntry(Entry, data))
1693 return false;
1694
1695 return true;
1696}
@ RAID_DIFFICULTY_10MAN_HEROIC
Definition DBCEnums.h:275
HighGuid
Definition ObjectGuid.h:58
bool UpdateEntry(uint32 entry, const CreatureData *data=nullptr, bool changelevel=true, bool updateAI=false)
Definition Creature.cpp:541
void SetOriginalEntry(uint32 entry)
Definition Creature.h:373
bool IsRaid() const
Definition Map.h:292
void _Create(ObjectGuid::LowType guidlow, uint32 entry, HighGuid guidhigh)
Definition Object.cpp:134
bool CreateVehicleKit(uint32 id, uint32 creatureEntry)
Returns the transport this unit is on directly (if on vehicle and transport, return vehicle)
Definition Unit.cpp:18803
void SetZoneScript()
Definition Object.cpp:2331
virtual uint32 GetCreatureEntry(ObjectGuid::LowType, CreatureData const *data)
Definition ZoneScript.h:31
uint32 Entry
Definition CreatureData.h:187
uint32 VehicleId
Definition CreatureData.h:230
uint32 DifficultyEntry[MAX_DIFFICULTY - 1]
Definition CreatureData.h:188

References Object::_Create(), Unit::CreateVehicleKit(), CreatureTemplate::DifficultyEntry, CreatureTemplate::Entry, Entry, ZoneScript::GetCreatureEntry(), WorldObject::GetMap(), WorldObject::GetZoneScript(), Unit::IsPet(), Map::IsRaid(), LOG_ERROR, RAID_DIFFICULTY_10MAN_HEROIC, SetOriginalEntry(), WorldObject::SetZoneScript(), sObjectMgr, Unit, UpdateEntry(), Vehicle, and CreatureTemplate::VehicleId.

Referenced by Create().

◆ DeleteFromDB()

void Creature::DeleteFromDB ( )
virtual

Reimplemented in Pet.

1854{
1855 if (!m_spawnId)
1856 {
1857 LOG_ERROR("entities.unit", "Trying to delete not saved creature: {}", GetGUID().ToString());
1858 return;
1859 }
1860
1862 sObjectMgr->DeleteCreatureData(m_spawnId);
1863
1864 WorldDatabaseTransaction trans = WorldDatabase.BeginTransaction();
1865
1867 stmt->SetData(0, m_spawnId);
1868 trans->Append(stmt);
1869
1870 stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE_ADDON);
1871 stmt->SetData(0, m_spawnId);
1872 trans->Append(stmt);
1873
1874 stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_GAME_EVENT_CREATURE);
1875 stmt->SetData(0, m_spawnId);
1876 trans->Append(stmt);
1877
1878 stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_GAME_EVENT_MODEL_EQUIP);
1879 stmt->SetData(0, m_spawnId);
1880 trans->Append(stmt);
1881
1882 WorldDatabase.CommitTransaction(trans);
1883}
SQLTransaction< WorldDatabaseConnection > WorldDatabaseTransaction
Definition DatabaseEnvFwd.h:71
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
Definition DatabaseEnv.cpp:20
@ WORLD_DEL_GAME_EVENT_MODEL_EQUIP
Definition WorldDatabase.h:109
@ WORLD_DEL_CREATURE_ADDON
Definition WorldDatabase.h:73
@ WORLD_DEL_GAME_EVENT_CREATURE
Definition WorldDatabase.h:108
@ WORLD_DEL_CREATURE
Definition WorldDatabase.h:83
void RemoveCreatureRespawnTime(ObjectGuid::LowType dbGuid)
Definition Map.cpp:2443
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition PreparedStatement.h:77
Definition PreparedStatement.h:157
std::string ToString() const
Definition Position.cpp:52

References Object::GetGUID(), WorldObject::GetMap(), LOG_ERROR, m_spawnId, Map::RemoveCreatureRespawnTime(), PreparedStatementBase::SetData(), sObjectMgr, Position::ToString(), WORLD_DEL_CREATURE, WORLD_DEL_CREATURE_ADDON, WORLD_DEL_GAME_EVENT_CREATURE, WORLD_DEL_GAME_EVENT_MODEL_EQUIP, and WorldDatabase.

Referenced by npc_commandscript::HandleNpcDeleteCommand().

◆ DespawnOnEvade()

void Creature::DespawnOnEvade ( Seconds  respawnDelay = 20s)
2191{
2193
2194 if (respawnDelay < 2s)
2195 {
2196 LOG_WARN("entities.unit", "DespawnOnEvade called with delay of {} seconds, defaulting to 2.", respawnDelay.count());
2197 respawnDelay = 2s;
2198 }
2199
2200 if (TempSummon* whoSummon = ToTempSummon())
2201 {
2203 whoSummon->UnSummon();
2204 return;
2205 }
2206
2207 DespawnOrUnsummon(Milliseconds(0), respawnDelay);
2208}
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition Duration.h:27
#define LOG_WARN(filterType__,...)
Definition Log.h:162
virtual void SummonedCreatureDespawnAll()
Definition CreatureAI.h:139
Position const & GetHomePosition() const
Definition Creature.h:343
void DespawnOrUnsummon(Milliseconds msTimeToDespawn, Seconds forcedRespawnTimer)
Definition Creature.cpp:2182
void ScheduleCreatureRespawn(ObjectGuid, Milliseconds, Position pos=Position())
Definition Map.cpp:2780
Definition TemporarySummon.h:40
TempSummon * ToTempSummon()
Definition Unit.h:686

References AI(), DespawnOrUnsummon(), Object::GetGUID(), GetHomePosition(), WorldObject::GetMap(), LOG_WARN, Map::ScheduleCreatureRespawn(), CreatureAI::SummonedCreatureDespawnAll(), and Unit::ToTempSummon().

Referenced by npc_akama_illidan::DoAction(), npc_maiev_illidan::DoAction(), boss_jeklik::EnterEvadeMode(), boss_illidan_stormrage::EnterEvadeMode(), CreatureAI::EnterEvadeMode(), boss_midnight::EnterEvadeMode(), boss_zuljin::EnterEvadeMode(), boss_nightbane::JustReachedHome(), npc_vengeful_spirit::OnCharmed(), and instance_scarlet_monastery::instance_scarlet_monastery_InstanceMapScript::SetData().

◆ DespawnOrUnsummon() [1/2]

void Creature::DespawnOrUnsummon ( Milliseconds  msTimeToDespawn,
Seconds  forcedRespawnTimer 
)
2183{
2184 if (TempSummon* summon = this->ToTempSummon())
2185 summon->UnSummon(msTimeToDespawn.count());
2186 else
2187 ForcedDespawn(msTimeToDespawn.count(), forcedRespawnTimer);
2188}
void ForcedDespawn(uint32 timeMSToDespawn=0, Seconds forcedRespawnTimer=0s)
Definition Creature.cpp:2162

References ForcedDespawn(), and Unit::ToTempSummon().

Referenced by spell_the_lich_king_shadow_trap_periodic::CheckTargetCount(), npc_simone::npc_simoneAI::CorpseRemoved(), Player::CreatePet(), npc_jenny::DamageTaken(), boss_headless_horseman_head::DamageTaken(), npc_terenas_menethil::npc_terenas_menethilAI::DamageTaken(), npc_power_spark::npc_power_sparkAI::DamageTaken(), npc_akama_shade::DamageTaken(), npc_death_knight_initiate::npc_death_knight_initiateAI::DamageTaken(), npc_tiger_matriarch::npc_tiger_matriarchAI::DamageTaken(), MotionTransport::DelayedTeleportTransport(), SummonList::DespawnAll(), SummonList::DespawnEntry(), brann_bronzebeard::brann_bronzebeardAI::DespawnHeads(), DespawnOnEvade(), spell_rotface_unstable_ooze_explosion_suicide_aura::DespawnSelf(), Vehicle::Dismiss(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::DoAction(), npc_ulduar_toasty_fire::npc_ulduar_toasty_fireAI::DoAction(), npc_ball_of_flame::npc_ball_of_flameAI::DoAction(), npc_saurfang_event::npc_saurfang_eventAI::DoAction(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::DoAction(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::DoAction(), npc_bone_spike::npc_bone_spikeAI::DoAction(), npc_strangulate_vehicle::npc_strangulate_vehicleAI::DoAction(), npc_terenas_menethil::npc_terenas_menethilAI::DoAction(), boss_algalon_the_observer::boss_algalon_the_observerAI::DoAction(), boss_fathomlord_karathress::DoAction(), boss_infinite_corruptor::boss_infinite_corruptorAI::DoAction(), npc_twilight_summon::npc_twilight_summonAI::DoAction(), npc_snobold_vassal::npc_snobold_vassalAI::DoAction(), npc_living_mojo::npc_living_mojoAI::DoAction(), boss_kelthuzad_minion::boss_kelthuzad_minionAI::DoAction(), npc_spark_of_ionar::npc_spark_of_ionarAI::DoAction(), npc_molten_golem::npc_molten_golemAI::DoAction(), npc_auriaya_feral_defender::npc_auriaya_feral_defenderAI::DoAction(), boss_thorim_sif::boss_thorim_sifAI::DoAction(), npc_blade_of_azzinoth::DoAction(), Spell::EffectScriptEffect(), Spell::EffectTameCreature(), boss_julianne::EnterEvadeMode(), boss_rend_blackhand::boss_rend_blackhandAI::EnterEvadeMode(), boss_attumen::EnterEvadeMode(), boss_entropius::EnterEvadeMode(), boss_black_knight::boss_black_knightAI::EnterEvadeMode(), npc_phantom_hallucination::npc_phantom_hallucinationAI::EnterEvadeMode(), boss_the_lurker_below::EnterEvadeMode(), boss_harbinger_skyriss::EnterEvadeMode(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::EnterEvadeMode(), npc_hallows_end_soh::EnterEvadeMode(), boss_ouro::EnterEvadeMode(), npc_dirt_mound::EnterEvadeMode(), npc_toc_pet_warlock::npc_toc_pet_warlockAI::EnterEvadeMode(), npc_toc_pet_hunter::npc_toc_pet_hunterAI::EnterEvadeMode(), npc_fel_infernal::npc_fel_infernalAI::EnterEvadeMode(), npc_mistress_of_pain::npc_mistress_of_painAI::EnterEvadeMode(), boss_tyrannus::boss_tyrannusAI::EnterEvadeMode(), npc_parasitic_shadowfiend::EnterEvadeMode(), boss_ahune::EnterEvadeMode(), boss_nazan::EnterEvadeMode(), boss_vazruden::EnterEvadeMode(), ForcedDespawnDelayEvent::Execute(), VehicleDespawnEvent::Execute(), DelayedCastEvent::Execute(), EoEDrakeEnterVehicleEvent::Execute(), SuckBackEvent::Execute(), npc_hallows_end_soh::FinishEvent(), spell_gen_despawn_self::HandleDummy(), spell_item_lil_xt::HandleDummy(), spell_q12096_q12092_dummy::HandleDummy(), spell_q12096_q12092_bark::HandleDummy(), spell_item_complete_raptor_capture::HandleDummy(), spell_item_rocket_chicken::HandleDummyTick(), spell_mc_play_dead_aura::HandleEffectRemove(), spell_dtk_raise_dead_aura::HandleEffectRemove(), spell_q11919_q11940_drake_hunt_aura::HandleEffectRemove(), AuraEffect::HandlePeriodicTriggerSpellAuraTick(), 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_shredder_delivery::HandleScript(), spell_ahune_minion_despawner::HandleScript(), spell_q12690_burst_at_the_seams::HandleScript(), spell_illidan_cage_trap::HandleScriptEffect(), spell_winter_veil_racer_slam_hit::HandleScriptEffect(), spell_q11065_wrangle_some_aether_rays_aura::if(), boss_twilight_corrupter::InitializeAI(), npc_preparations_for_war_vehicle::InitializeAI(), npc_ahune_ice_spear_bunny::InitializeAI(), npc_underbog_mushroom::InitializeAI(), Guardian::InitStatsForLevel(), npc_taldaram_flamesphere::IsSummonedBy(), npc_putricide_oozeAI::IsSummonedBy(), npc_ranshalla::npc_ranshallaAI::JustDidDialogueStep(), boss_majordomo::boss_majordomoAI::JustDied(), npc_kilrek::JustDied(), boss_dorothee::JustDied(), boss_roar::JustDied(), boss_strawman::JustDied(), boss_tinhead::JustDied(), npc_zulian_prowler::npc_zulian_prowlerAI::JustDied(), npc_chained_spirit::JustDied(), npc_belnistrasz::npc_belnistraszAI::JustDied(), npc_living_inferno::npc_living_infernoAI::JustDied(), npc_memory::npc_memoryAI::JustDied(), npc_argent_soldier::npc_argent_soldierAI::JustDied(), npc_toc5_grand_champion_minion::npc_toc5_grand_champion_minionAI::JustDied(), npc_fel_infernal::npc_fel_infernalAI::JustDied(), npc_mistress_of_pain::npc_mistress_of_painAI::JustDied(), npc_dark_nucleus::npc_dark_nucleusAI::JustDied(), npc_gunship::npc_gunshipAI::JustDied(), npc_little_ooze::npc_little_oozeAI::JustDied(), npc_big_ooze::npc_big_oozeAI::JustDied(), npc_ice_tomb::npc_ice_tombAI::JustDied(), npc_eoe_wyrmrest_skytalon::npc_eoe_wyrmrest_skytalonAI::JustDied(), npc_ulduar_saronite_animus::npc_ulduar_saronite_animusAI::JustDied(), npc_ichor_globule::npc_ichor_globuleAI::JustDied(), npc_vh_void_sentry::npc_vh_void_sentryAI::JustDied(), npc_thassarian2::npc_thassarian2AI::JustDied(), npc_wintergarde_gryphon::JustDied(), npc_q24545_vegard::npc_q24545_vegardAI::JustDied(), npc_blessed_banner::npc_blessed_bannerAI::JustDied(), boss_fathomguard_sharkkis::JustDied(), boss_fathomguard_tidalvess::JustDied(), boss_fathomguard_caribdis::JustDied(), boss_hydromancer_thespia::JustDied(), npc_necrotic_shard::JustDied(), npc_buru_egg::JustDied(), boss_bug_trio::JustDied(), npc_frost_tomb::JustDied(), npc_lava_spawn::JustEngagedWith(), npc_dirt_mound::JustEngagedWith(), boss_dorothee::JustReachedHome(), boss_roar::JustReachedHome(), boss_strawman::JustReachedHome(), boss_tinhead::JustReachedHome(), boss_crone::JustReachedHome(), boss_bigbadwolf::JustReachedHome(), boss_julianne::JustReachedHome(), boss_romulo::JustReachedHome(), boss_arlokk::boss_arlokkAI::JustReachedHome(), boss_headless_horseman::JustReachedHome(), boss_kelthuzad_minion::boss_kelthuzad_minionAI::JustReachedHome(), npc_precious::npc_preciousAI::JustReachedHome(), npc_ouro_spawner::JustSummoned(), boss_rend_blackhand::boss_rend_blackhandAI::JustSummoned(), boss_kiljaeden::JustSummoned(), npc_medivh_bm::JustSummoned(), boss_gal_darah::boss_gal_darahAI::JustSummoned(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::JustSummoned(), boss_professor_putricide::boss_professor_putricideAI::JustSummoned(), boss_rotface::boss_rotfaceAI::JustSummoned(), boss_the_lich_king::boss_the_lich_kingAI::JustSummoned(), npc_risen_archmage::npc_risen_archmageAI::JustSummoned(), npc_gluttonous_abomination::npc_gluttonous_abominationAI::JustSummoned(), boss_malygos::boss_malygosAI::JustSummoned(), npc_tiger_matriarch::npc_tiger_matriarchAI::KilledUnit(), npc_brew_bubble::MoveInLineOfSight(), npc_khunok_the_behemoth::npc_khunok_the_behemothAI::MoveInLineOfSight(), npc_captured_beryl_sorcerer::npc_captured_beryl_sorcererAI::MoveInLineOfSight(), FollowerAI::MovementInform(), npc_brann_bronzebeard_algalon::npc_brann_bronzebeard_algalonAI::MovementInform(), npc_spirit_shade::npc_spirit_shadeAI::MovementInform(), npc_forest_frog::MovementInform(), npc_enslaved_netherwing_drake::MovementInform(), npc_koltira_deathweaver::npc_koltira_deathweaverAI::MovementInform(), npc_amanishi_lookout::MovementInform(), npc_rizzle_sprysprocket::npc_rizzle_sprysprocketAI::MovementInform(), npc_troll_volunteer::npc_troll_volunteerAI::MovementInform(), boss_grand_champion::boss_grand_championAI::MovementInform(), npc_concentrated_ball::npc_concentrated_ballAI::MovementInform(), npc_darnavan::npc_darnavanAI::MovementInform(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::MovementInform(), npc_vehicle_d16_propelled_delivery::npc_vehicle_d16_propelled_deliveryAI::MovementInform(), npc_scarlet_ghoul::npc_scarlet_ghoulAI::MovementInform(), npc_injured_7th_legion_soldier::npc_injured_7th_legion_soldierAI::MovementInform(), npc_shattered_hand_scout::MovementInform(), npc_chained_spirit::MovementInform(), npc_balance_of_light_and_shadow::npc_balance_of_light_and_shadowAI::MovementInform(), npc_ball_of_flame::npc_ball_of_flameAI::MovementInform(), npc_assembly_lightning::npc_assembly_lightningAI::MovementInform(), npc_xt002_scrapbot::npc_xt002_scrapbotAI::MovementInform(), npc_released_offspring_harkoa::npc_released_offspring_harkoaAI::MovementInform(), npc_attracted_reef_bull::npc_attracted_reef_bullAI::MovementInform(), npc_image_of_medivh::npc_image_of_medivhAI::NextStep(), npc_lk_spirit_bomb::npc_lk_spirit_bombAI::npc_lk_spirit_bombAI(), npc_midsummer_bonfire::npc_midsummer_bonfire(), npc_midsummer_bonfire_despawner::npc_midsummer_bonfire_despawner(), npc_midsummer_ribbon_pole_target::npc_midsummer_ribbon_pole_target(), BattlefieldWG::OnCreatureCreate(), instance_gnomeregan::instance_gnomeregan_InstanceMapScript::OnCreatureCreate(), instance_dire_maul::instance_dire_maul_InstanceMapScript::OnCreatureCreate(), instance_trial_of_the_champion::instance_trial_of_the_champion_InstanceMapScript::OnCreatureCreate(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnCreatureCreate(), instance_ulduar::instance_ulduar_InstanceMapScript::OnCreatureCreate(), go_scourge_enclosure::OnGossipHello(), go_jotunheim_cage::OnGossipHello(), npc_pet_gen_argent_pony_bridle::OnGossipSelect(), npc_grandmother::OnGossipSelect(), npc_adventurous_dwarf::OnGossipSelect(), spell_item_eye_of_grillok_aura::OnPeriodic(), spell_kaelthas_flame_strike::OnRemove(), npc_valithria_portal::npc_valithria_portalAI::OnSpellClick(), boss_yoggsaron_descend_portal::boss_yoggsaron_descend_portalAI::OnSpellClick(), instance_zulaman::instance_zulaman_InstanceMapScript::OnUnitDeath(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnUnitDeath(), FrostwingGauntletRespawner::operator()(), ValithriaDespawner::operator()(), npc_ulduar_leviathan_mkii::npc_ulduar_leviathan_mkiiAI::PassengerBoarded(), npc_ulduar_vx001::npc_ulduar_vx001AI::PassengerBoarded(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::PassengerBoarded(), npc_eoe_wyrmrest_skytalon::npc_eoe_wyrmrest_skytalonAI::PassengerBoarded(), npc_oculus_drake::npc_oculus_drakeAI::PassengerBoarded(), npc_ulduar_flames_initial::npc_ulduar_flames_initialAI::RemoveAll(), boss_gyth::boss_gythAI::Reset(), boss_nefarian::Reset(), npc_image_of_medivh::npc_image_of_medivhAI::Reset(), npc_demonic_vapor_trail::Reset(), npc_singularity::Reset(), boss_infinite_corruptor::boss_infinite_corruptorAI::Reset(), boss_mal_ganis::boss_mal_ganisAI::Reset(), npc_eye_tentacle::Reset(), npc_claw_tentacle::Reset(), npc_xerestrasza::npc_xerestraszaAI::Reset(), npc_raging_spirit::npc_raging_spiritAI::Reset(), npc_assembly_lightning::npc_assembly_lightningAI::Reset(), npc_xt002_pummeller::npc_xt002_pummellerAI::Reset(), npc_xt002_life_spark::npc_xt002_life_sparkAI::Reset(), npc_violet_hold_defense_system::Reset(), npc_target_trigger::Reset(), npc_oscillating_frequency_scanner_master_bunny::npc_oscillating_frequency_scanner_master_bunnyAI::Reset(), npc_simon_bunny::npc_simon_bunnyAI::ResetNode(), NPCStaveQuestAI::RevealForm(), npc_necrotic_shard::ScheduleTasks(), spell_putricide_ooze_channel::SelectTarget(), instance_scarlet_monastery::instance_scarlet_monastery_InstanceMapScript::SetData(), npc_harrison_jones::SpellHit(), npc_frost_sphere::npc_frost_sphereAI::SpellHit(), boss_valithria_dreamwalker::boss_valithria_dreamwalkerAI::SpellHit(), npc_ulduar_flames_spread::npc_ulduar_flames_spreadAI::SpellHit(), npc_vics_flying_machine::npc_vics_flying_machineAI::SpellHit(), npc_captured_rageclaw::npc_captured_rageclawAI::SpellHit(), npc_shadow_of_doom::SpellHit(), boss_headless_horseman_pumpkin::SpellHit(), npc_rabid_thistle_bear::npc_rabid_thistle_bearAI::SpellHit(), boss_freya::boss_freyaAI::SpellHit(), boss_hodir::boss_hodirAI::SpellHit(), boss_mimiron::boss_mimironAI::SpellHit(), npc_ulduar_keeper::npc_ulduar_keeperAI::SpellHit(), npc_aged_dying_ancient_kodo::npc_aged_dying_ancient_kodoAI::SpellHit(), npc_living_constellation::npc_living_constellationAI::SpellHit(), npc_drakuru_shackles::npc_drakuru_shacklesAI::SpellHit(), npc_enslaved_netherwing_drake::SpellHit(), boss_magus_telestra::SpellHit(), boss_thorim::boss_thorimAI::SpellHit(), npc_iron_watcher::npc_iron_watcherAI::SpellHit(), npc_vengeful_shade::npc_vengeful_shadeAI::SpellHitTarget(), npc_necropolis_relay::SpellHitTarget(), boss_headless_horseman_head::SpellHitTarget(), npc_necropolis_proxy::SpellHitTarget(), npc_necrotic_shard::SpellHitTarget(), npc_q24545_lich_king::npc_q24545_lich_kingAI::SpellHitTarget(), npc_necropolis_health::SpellHitTarget(), boss_ouro::Submerge(), npc_time_rift::SummonedCreatureDies(), boss_hazzarah::SummonedCreatureDies(), npc_creature_generator_akama::SummonedCreatureDies(), boss_vexallus::SummonedCreatureDies(), boss_hydross_the_unstable::SummonMovementInform(), boss_razorgore::boss_razorgoreAI::SummonMovementInform(), npc_drakuru_shackles::npc_drakuru_shacklesAI::UnlockRageclaw(), VehicleAI::UpdateAI(), npc_escortAI::UpdateAI(), npc_vaelastrasz_the_red::npc_vaelastrasz_the_redAI::UpdateAI(), boss_victor_nefarius::boss_victor_nefariusAI::UpdateAI(), npc_kernobee::npc_kernobeeAI::UpdateAI(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::UpdateAI(), npc_madrigosa::UpdateAI(), npc_varian_wrynn::npc_varian_wrynnAI::UpdateAI(), npc_thrall_bfu::npc_thrall_bfuAI::UpdateAI(), npc_dark_iron_attack_mole_machine::UpdateAI(), npc_brew_bubble::UpdateAI(), npc_love_in_air_snivel_real::UpdateAI(), npc_belnistrasz::npc_belnistraszAI::UpdateAI(), npc_rizzle_sprysprocket::npc_rizzle_sprysprocketAI::UpdateAI(), npc_depth_charge::npc_depth_chargeAI::UpdateAI(), npc_draenei_survivor::npc_draenei_survivorAI::UpdateAI(), npc_stillpine_capitive::npc_stillpine_capitiveAI::UpdateAI(), npc_rabid_thistle_bear::npc_rabid_thistle_bearAI::UpdateAI(), npc_giant_spotlight::npc_giant_spotlightAI::UpdateAI(), npc_sergeant_bly::npc_sergeant_blyAI::UpdateAI(), npc_weegli_blastfuse::npc_weegli_blastfuseAI::UpdateAI(), npc_fos_corrupted_soul_fragment::npc_fos_corrupted_soul_fragmentAI::UpdateAI(), boss_drakkari_elemental::boss_drakkari_elementalAI::UpdateAI(), npc_kinetic_bomb::npc_kinetic_bombAI::UpdateAI(), npc_vengeful_shade::npc_vengeful_shadeAI::UpdateAI(), npc_bone_spike::npc_bone_spikeAI::UpdateAI(), npc_ice_tomb::npc_ice_tombAI::UpdateAI(), npc_strangulate_vehicle::npc_strangulate_vehicleAI::UpdateAI(), npc_lk_spirit_bomb::npc_lk_spirit_bombAI::UpdateAI(), npc_valithria_cloud::npc_valithria_cloudAI::UpdateAI(), npc_blistering_zombie::npc_blistering_zombieAI::UpdateAI(), npc_impaling_spear::npc_impaling_spearAI::UpdateAI(), npc_vortex_ride::npc_vortex_rideAI::UpdateAI(), npc_power_spark::npc_power_sparkAI::UpdateAI(), npc_oculus_drake::npc_oculus_drakeAI::UpdateAI(), boss_algalon_the_observer::boss_algalon_the_observerAI::UpdateAI(), boss_freya_lifebinder::boss_freya_lifebinderAI::UpdateAI(), boss_freya_healthy_spore::boss_freya_healthy_sporeAI::UpdateAI(), boss_freya_summons::boss_freya_summonsAI::UpdateAI(), boss_freya_nature_bomb::boss_freya_nature_bombAI::UpdateAI(), npc_ulduar_flash_freeze::npc_ulduar_flash_freezeAI::UpdateAI(), boss_mimiron::boss_mimironAI::UpdateAI(), npc_ulduar_magnetic_core::npc_ulduar_magnetic_coreAI::UpdateAI(), npc_ulduar_bot_summon_trigger::npc_ulduar_bot_summon_triggerAI::UpdateAI(), npc_ulduar_flames_initial::npc_ulduar_flames_initialAI::UpdateAI(), boss_thorim_sif::boss_thorim_sifAI::UpdateAI(), boss_skadi_grauf::boss_skadi_graufAI::UpdateAI(), npc_vh_teleportation_portal::npc_vh_teleportation_portalAI::UpdateAI(), npc_azure_saboteur::npc_azure_saboteurAI::UpdateAI(), npc_lurgglbr::npc_lurgglbrAI::UpdateAI(), npc_thassarian2::npc_thassarian2AI::UpdateAI(), npc_preparations_for_war_vehicle::UpdateAI(), npc_minigob_manabonk::UpdateAI(), npc_hourglass_of_eternity::npc_hourglass_of_eternityAI::UpdateAI(), npc_wintergarde_gryphon::UpdateAI(), npc_wounded_skirmisher::UpdateAI(), npc_lake_frog::npc_lake_frogAI::UpdateAI(), npc_lord_arete::npc_lord_areteAI::UpdateAI(), npc_infra_green_bomber_generic::npc_infra_green_bomber_genericAI::UpdateAI(), npc_blessed_banner::npc_blessed_bannerAI::UpdateAI(), npc_crusade_recruit::npc_crusade_recruitAI::UpdateAI(), npc_fel_guard_hound::npc_fel_guard_houndAI::UpdateAI(), npc_pet_dk_ebon_gargoyle::UpdateAI(), npc_pet_gen_target_following_bomb::UpdateAI(), npc_pet_gen_imp_in_a_bottle::UpdateAI(), npc_pet_gen_fetch_ball::UpdateAI(), npc_artorius::npc_artoriusAI::UpdateAI(), npc_simone::npc_simoneAI::UpdateAI(), npc_nelson::npc_nelsonAI::UpdateAI(), npc_franklin::npc_franklinAI::UpdateAI(), npc_elder_clearwater::npc_elder_clearwaterAI::UpdateAI(), npc_ichor_globule::npc_ichor_globuleAI::UpdateAI(), FollowerAI::UpdateAI(), npc_dark_fiend::UpdateAI(), npc_brunnhildar_prisoner::npc_brunnhildar_prisonerAI::UpdateAI(), SmartAI::UpdateDespawn(), npc_rinji::npc_rinjiAI::UpdateEscortAI(), npc_tirions_gambit_tirion::npc_tirions_gambit_tirionAI::UpdateEscortAI(), npc_jenny::UpdateFollowerAI(), SmartAI::UpdatePath(), npc_daphne_stilwell::npc_daphne_stilwellAI::WaypointReached(), npc_apothecary_hanes::npc_Apothecary_HanesAI::WaypointReached(), and npc_plaguehound_tracker::npc_plaguehound_trackerAI::WaypointReached().

◆ DespawnOrUnsummon() [2/2]

void Creature::DespawnOrUnsummon ( uint32  msTimeToDespawn = 0)
inline
286{ DespawnOrUnsummon(Milliseconds(msTimeToDespawn), 0s); };

References DespawnOrUnsummon().

Referenced by DespawnOrUnsummon().

◆ DisappearAndDie()

void Creature::DisappearAndDie ( )

◆ DoFleeToGetAssistance()

void Creature::DoFleeToGetAssistance ( )
1067{
1068 if (!GetVictim())
1069 return;
1070
1072 return;
1073
1074 float radius = sWorld->getFloatConfig(CONFIG_CREATURE_FAMILY_FLEE_ASSISTANCE_RADIUS);
1075 if (radius > 0)
1076 {
1077 Creature* creature = nullptr;
1078
1081
1082 Cell::VisitGridObjects(this, searcher, radius);
1083
1085 UpdateSpeed(MOVE_RUN, false);
1086
1087 if (!creature)
1088 //SetFeared(true, GetVictim()->GetGUID(), 0, sWorld->getIntConfig(CONFIG_CREATURE_FAMILY_FLEE_DELAY));
1089 //TODO: use 31365
1091 else
1092 GetMotionMaster()->MoveSeekAssistance(creature->GetPositionX(), creature->GetPositionY(), creature->GetPositionZ());
1093 }
1094}
@ UNIT_STATE_FLEEING
Definition UnitDefines.h:177
@ MOVE_RUN
Definition UnitDefines.h:350
@ CONFIG_CREATURE_FAMILY_FLEE_ASSISTANCE_RADIUS
Definition WorldConfig.h:151
void SetNoSearchAssistance(bool val)
Definition Creature.h:272
void MoveSeekAssistance(float x, float y, float z)
Definition MotionMaster.cpp:706
bool HasPreventsFleeingAura() const
Definition Unit.h:1719
void SetControlled(bool apply, UnitState state, Unit *source=nullptr, bool isFear=false)
Definition Unit.cpp:18122
void UpdateSpeed(UnitMoveType mtype, bool forced)
Definition Unit.cpp:14342
Definition GridNotifiers.h:448

References CONFIG_CREATURE_FAMILY_FLEE_ASSISTANCE_RADIUS, Unit::GetMotionMaster(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), Unit::GetVictim(), Unit::HasPreventsFleeingAura(), MOVE_RUN, MotionMaster::MoveSeekAssistance(), Unit::SetControlled(), SetNoSearchAssistance(), sWorld, UNIT_STATE_FLEEING, Unit::UpdateSpeed(), and Cell::VisitGridObjects().

Referenced by npc_blackhand_incarcerator::npc_blackhand_incarceratorAI::DamageTaken(), SmartScript::ProcessAction(), and npc_sentinel_infiltrator::UpdateAI().

◆ DoImmediateBoundaryCheck()

void Creature::DoImmediateBoundaryCheck ( )
inline
309{ m_boundaryCheckTime = 0; }

References m_boundaryCheckTime.

Referenced by CreatureAI::SetBoundary().

◆ FocusTarget()

void Creature::FocusTarget ( Spell const *  focusSpell,
WorldObject const *  target 
)
3567{
3568 // already focused
3569 if (_focusSpell)
3570 return;
3571
3572 _focusSpell = focusSpell;
3573
3574 SetGuidValue(UNIT_FIELD_TARGET, this == target ? ObjectGuid::Empty : target->GetGUID());
3575 if (focusSpell->GetSpellInfo()->HasAttribute(SPELL_ATTR5_AI_DOESNT_FACE_TARGET))
3577
3578 // Set serverside orientation if needed (needs to be after attribute check)
3579 if (this == target && (movespline->Finalized() || GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE))
3581 else
3582 SetInFront(target);
3583}
@ CHASE_MOTION_TYPE
Definition MotionMaster.h:45
@ SPELL_ATTR5_AI_DOESNT_FACE_TARGET
Definition SharedDefines.h:586
@ UNIT_STATE_ROTATING
Definition UnitDefines.h:190
@ UNIT_FIELD_TARGET
Definition UpdateFields.h:92
bool Finalized() const
Definition MoveSpline.h:116
static ObjectGuid const Empty
Definition ObjectGuid.h:120
void SetGuidValue(uint16 index, ObjectGuid value)
Definition Object.cpp:723
void SetFacingTo(float ori)
Definition Unit.cpp:20368
Movement::MoveSpline * movespline
Definition Unit.h:2029
void SetInFront(WorldObject const *target)
Definition Unit.cpp:20362
float GetOrientation() const
Definition Position.h:124

References _focusSpell, Unit::AddUnitState(), CHASE_MOTION_TYPE, ObjectGuid::Empty, Movement::MoveSpline::Finalized(), Object::GetGUID(), Unit::GetMotionMaster(), Position::GetOrientation(), Spell::GetSpellInfo(), SpellInfo::HasAttribute(), Unit::movespline, Unit::SetFacingTo(), Object::SetGuidValue(), Unit::SetInFront(), SPELL_ATTR5_AI_DOESNT_FACE_TARGET, UNIT_FIELD_TARGET, and UNIT_STATE_ROTATING.

Referenced by Spell::prepare().

◆ ForcedDespawn()

void Creature::ForcedDespawn ( uint32  timeMSToDespawn = 0,
Seconds  forcedRespawnTimer = 0s 
)
private
2163{
2164 if (timeMSToDespawn)
2165 {
2166 ForcedDespawnDelayEvent* pEvent = new ForcedDespawnDelayEvent(*this, forceRespawnTimer);
2167 m_Events.AddEvent(pEvent, m_Events.CalculateTime(timeMSToDespawn));
2168 return;
2169 }
2170
2171 if (IsAlive())
2173
2174 // Xinef: Set new respawn time, ignore corpse decay time...
2175 RemoveCorpse(true);
2176
2177 if (forceRespawnTimer > Seconds::zero())
2178 if (GetMap())
2179 GetMap()->ScheduleCreatureRespawn(GetGUID(), forceRespawnTimer);
2180}
Definition Creature.h:550

References EventProcessor::AddEvent(), EventProcessor::CalculateTime(), Object::GetGUID(), WorldObject::GetMap(), Unit::IsAlive(), JustDied, WorldObject::m_Events, RemoveCorpse(), Map::ScheduleCreatureRespawn(), and setDeathState().

Referenced by DespawnOrUnsummon().

◆ GetAggroRange()

float Creature::GetAggroRange ( Unit const *  target) const
3407{
3408 // Determines the aggro range for creatures
3409 // Based on data from wowwiki due to lack of 3.3.5a data
3410
3411 float aggroRate = sWorld->getRate(RATE_CREATURE_AGGRO);
3412 if (aggroRate == 0)
3413 return 0.0f;
3414
3415 auto creatureLevel = target->getLevelForTarget(this);
3416 auto playerLevel = getLevelForTarget(target);
3417 int32 levelDiff = int32(creatureLevel) - int32(playerLevel);
3418
3419 // The maximum Aggro Radius is capped at 45 yards (25 level difference)
3420 if (levelDiff < -25)
3421 levelDiff = -25;
3422
3423 // The base aggro radius for mob of same level
3424 auto aggroRadius = GetDetectionRange();
3425 if (aggroRadius < 1)
3426 {
3427 return 0.0f;
3428 }
3429 // Aggro Radius varies with level difference at a rate of roughly 1 yard/level
3430 aggroRadius -= (float)levelDiff;
3431
3432 // detect range auras
3434
3435 // detected range auras
3436 aggroRadius += target->GetTotalAuraModifier(SPELL_AURA_MOD_DETECTED_RANGE);
3437
3438 // Just in case, we don't want pets running all over the map
3439 if (aggroRadius > MAX_AGGRO_RADIUS)
3440 aggroRadius = MAX_AGGRO_RADIUS;
3441
3442 // Minimum Aggro Radius for a mob seems to be combat range (5 yards)
3443 // hunter pets seem to ignore minimum aggro radius so we'll default it a little higher
3444 float minRange = IsPet() ? 10.0f : 5.0f;
3445 if (aggroRadius < minRange)
3446 aggroRadius = minRange;
3447
3448 return (aggroRadius * aggroRate);
3449}
@ SPELL_AURA_MOD_DETECTED_RANGE
Definition SpellAuraDefines.h:215
@ SPELL_AURA_MOD_DETECT_RANGE
Definition SpellAuraDefines.h:154
#define MAX_AGGRO_RADIUS
Definition Unit.h:44
@ RATE_CREATURE_AGGRO
Definition WorldConfig.h:452
float GetDetectionRange() const
Definition Creature.h:261
uint8 getLevelForTarget(WorldObject const *target) const override
Definition Creature.cpp:3035
int32 GetTotalAuraModifier(AuraType auratype) const
Definition Unit.cpp:5997

References GetDetectionRange(), Unit::getLevelForTarget(), getLevelForTarget(), Unit::GetTotalAuraModifier(), Unit::IsPet(), MAX_AGGRO_RADIUS, RATE_CREATURE_AGGRO, SPELL_AURA_MOD_DETECT_RANGE, SPELL_AURA_MOD_DETECTED_RANGE, and sWorld.

Referenced by CanStartAttack(), npc_amanishi_lookout::MoveInLineOfSight(), and npc_eagle_trash_aggro_trigger::MoveInLineOfSight().

◆ GetAIName()

std::string const & Creature::GetAIName ( ) const
3049{
3050 return sObjectMgr->GetCreatureTemplate(GetEntry())->AIName;
3051}
uint32 GetEntry() const
Definition Object.h:116

References Object::GetEntry(), and sObjectMgr.

Referenced by GetDebugInfo(), npc_commandscript::HandleNpcInfoCommand(), npc_commandscript::HandleNpcSetDataCommand(), InitializeReactState(), and UpdateMoveInLineOfSightState().

◆ GetAttackDistance()

float Creature::GetAttackDistance ( Unit const *  player) const
3612{
3613 float aggroRate = sWorld->getRate(RATE_CREATURE_AGGRO);
3614
3615 if (aggroRate == 0)
3616 return 0.0f;
3617
3618 if (!player)
3619 return 0.0f;
3620
3621 uint32 playerLevel = player->getLevelForTarget(this);
3622 uint32 creatureLevel = getLevelForTarget(player);
3623
3624 int32 levelDiff = static_cast<int32>(playerLevel) - static_cast<int32>(creatureLevel);
3625
3626 // "The maximum Aggro Radius has a cap of 25 levels under. Example: A level 30 char has the same Aggro Radius of a level 5 char on a level 60 mob."
3627 if (levelDiff < -25)
3628 levelDiff = -25;
3629
3630 // "The aggro radius of a mob having the same level as the player is roughly 20 yards"
3631 float retDistance = 20.0f;
3632
3633 // "Aggro Radius varies with level difference at a rate of roughly 1 yard/level"
3634 // radius grow if playlevel < creaturelevel
3635 retDistance -= static_cast<float>(levelDiff);
3636
3637 if (creatureLevel + 5 <= sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
3638 {
3639 // detect range auras
3640 retDistance += static_cast<float>( GetTotalAuraModifier(SPELL_AURA_MOD_DETECT_RANGE));
3641
3642 // detected range auras
3643 retDistance += static_cast<float>( player->GetTotalAuraModifier(SPELL_AURA_MOD_DETECTED_RANGE));
3644 }
3645
3646 // "Minimum Aggro Radius for a mob seems to be combat range (5 yards)"
3647 if (retDistance < 5.0f)
3648 retDistance = 5.0f;
3649
3650 return (retDistance * aggroRate);
3651}
@ CONFIG_MAX_PLAYER_LEVEL
Definition WorldConfig.h:186

References CONFIG_MAX_PLAYER_LEVEL, Unit::getLevelForTarget(), getLevelForTarget(), Unit::GetTotalAuraModifier(), RATE_CREATURE_AGGRO, SPELL_AURA_MOD_DETECT_RANGE, SPELL_AURA_MOD_DETECTED_RANGE, and sWorld.

Referenced by WorldObject::CanDetectStealthOf().

◆ GetCombatPulseDelay()

uint32 Creature::GetCombatPulseDelay ( ) const
inline
298{ return m_combatPulseDelay; }

References m_combatPulseDelay.

◆ GetCorpseDelay()

uint32 Creature::GetCorpseDelay ( ) const
inline

◆ GetCreatureAddon()

CreatureAddon const * Creature::GetCreatureAddon ( ) const
2705{
2706 if (m_spawnId)
2707 {
2708 if (CreatureAddon const* addon = sObjectMgr->GetCreatureAddon(m_spawnId))
2709 return addon;
2710 }
2711
2712 // dependent from difficulty mode entry
2713 return sObjectMgr->GetCreatureTemplateAddon(GetCreatureTemplate()->Entry);
2714}
Definition CreatureData.h:440

References Entry, GetCreatureTemplate(), m_spawnId, and sObjectMgr.

Referenced by boss_grand_champion::boss_grand_championAI::AddCreatureAddonAuras(), wp_commandscript::HandleWpUnLoadCommand(), LoadCreaturesAddon(), instance_trial_of_the_champion::instance_trial_of_the_champion_InstanceMapScript::OnCreatureCreate(), and UpdateEntry().

◆ GetCreatureData()

◆ GetCreatureTemplate()

CreatureTemplate const * Creature::GetCreatureTemplate ( ) const
inline
209{ return m_creatureInfo; }

References m_creatureInfo.

Referenced by KillRewarder::_InitXP(), Unit::_IsValidAttackTarget(), AllLootRemovedFromCorpse(), Vehicle::ApplyAllImmunities(), npc_escortAI::AssistPlayerInCombatAgainst(), FollowerAI::AssistPlayerInCombatAgainst(), SmartAI::AssistPlayerInCombatAgainst(), Player::BuildPetTalentsInfoData(), CalculateMinMaxDamage(), SpellEffectInfo::CalcValue(), Spell::CheckCast(), SpellInfo::CheckTarget(), Create(), Pet::CreateBaseAtCreature(), Unit::DealMeleeDamage(), boss_high_king_maulgar::DoAction(), Spell::DoSpellHitOnUnit(), Spell::EffectForceDeselect(), Spell::EffectSanctuary(), Spell::EffectSkinning(), Spell::EffectSummonType(), Acore::XP::Gain(), GetCreatureAddon(), Unit::GetCreatureType(), Player::GetDefaultGossipMenuForSource(), GetLeashTimer(), GetMovementTemplate(), GetNativeObjectScale(), Pet::GetNativeObjectScale(), Player::GetNPCIfCanInteractWith(), SmartScript::GetScript(), AuraEffect::HandleFeignDeath(), WorldSession::HandleGossipHelloOpcode(), learn_commandscript::HandleLearnAllMyPetTalentsCommand(), npc_commandscript::HandleNpcInfoCommand(), npc_commandscript::HandleNpcSetFactionIdCommand(), npc_commandscript::HandleNpcTameCommand(), AuraEffect::HandlePeriodicTriggerSpellAuraTick(), WorldSession::HandleQuestgiverHelloOpcode(), HasFlagsExtra(), HasMechanicTemplateImmunity(), Pet::HaveInDiet(), InitEntry(), Pet::InitLevelupSpellsForLevel(), Guardian::InitStatsForLevel(), isCanTrainingAndResetTalentsOf(), isElite(), IsImmunedToSpellEffect(), Unit::IsInPartyWith(), Unit::IsInRaidWith(), Pet::IsPermanentPetFor(), IsRacialLeader(), isWorldBoss(), npc_escortAI::JustRespawned(), FollowerAI::JustRespawned(), SmartAI::JustRespawned(), Unit::Kill(), Pet::LearnPetPassives(), Player::LearnPetTalent(), LoadCreatureFromDB(), Pet::LoadPetFromDB(), LoadSpellTemplateImmunity(), Unit::MeleeSpellHitResult(), boss_onyxia::MovementInform(), boss_sindragosa::boss_sindragosaAI::MovementInform(), npc_hor_leader_second::npc_hor_leader_secondAI::MoveToNextStopPoint(), npc_thrall_old_hillsbrad::OnGossipHello(), npc_artorius::OnGossipHello(), npc_simone::OnGossipHello(), npc_nelson::OnGossipHello(), npc_franklin::OnGossipHello(), npc_taxi::OnGossipHello(), Unit::PatchValuesUpdate(), Player::PetSpellInitialize(), Player::PrepareGossipMenu(), Unit::RemoveCharmedBy(), Player::RemovePet(), boss_onyxia::Reset(), boss_sindragosa::boss_sindragosaAI::Reset(), Pet::resetTalents(), Respawn(), Player::RewardReputation(), SaveToDB(), SelectLevel(), Player::SendLoot(), WorldSession::SendPetNameQuery(), WorldSession::SendTrainerList(), Unit::SetCharmedBy(), setDeathState(), SetDisplayFromModel(), npc_tirion_fordring_tft::npc_tirion_fordringAI::sGossipSelect(), npc_harrison_jones::sGossipSelect(), npc_captured_rageclaw::npc_captured_rageclawAI::SpellHit(), boss_priestess_delrissa::SummonedCreatureDies(), Player::SummonPet(), npc_hor_lich_king::npc_hor_lich_kingAI::UpdateAI(), npc_hor_leader_second::npc_hor_leader_secondAI::UpdateAI(), npc_sinkhole_kill_credit::npc_sinkhole_kill_creditAI::UpdateAI(), npc_pet_gen_valkyr_guardian::UpdateAI(), UpdateEntry(), GameEventMgr::UpdateEventNPCFlags(), UpdateMovementFlags(), and Unit::UpdateSpeed().

◆ GetCurrentEquipmentId()

◆ GetCurrentWaypointID()

uint32 Creature::GetCurrentWaypointID ( ) const
inline
353{ return m_waypointID; }

References m_waypointID.

Referenced by npc_akama_illidan::MovementInform().

◆ GetDebugInfo()

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

Reimplemented from Object.

Reimplemented in TempSummon, Minion, Guardian, and Pet.

3886{
3887 std::stringstream sstr;
3888 sstr << Unit::GetDebugInfo() << "\n"
3889 << "AIName: " << GetAIName() << " ScriptName: " << GetScriptName()
3890 << " WaypointPath: " << GetWaypointPath() << " SpawnId: " << GetSpawnId();
3891 return sstr.str();
3892}
uint32 GetWaypointPath() const
Definition Creature.h:350
ObjectGuid::LowType GetSpawnId() const
Definition Creature.h:65
std::string GetScriptName() const
Definition Creature.cpp:3053
std::string const & GetAIName() const
Definition Creature.cpp:3048
std::string GetDebugInfo() const override
Definition Unit.cpp:21195

References GetAIName(), Unit::GetDebugInfo(), GetScriptName(), GetSpawnId(), and GetWaypointPath().

Referenced by TempSummon::GetDebugInfo(), SetCannotReachTarget(), and Update().

◆ GetDefaultMovementType()

MovementGeneratorType Creature::GetDefaultMovementType ( ) const
inlineoverridevirtual

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

Reimplemented from Unit.

86{ return m_defaultMovementType; }

References m_defaultMovementType.

Referenced by GridObjectLoader::LoadCreatures(), and SaveToDB().

◆ GetDetectionRange()

float Creature::GetDetectionRange ( ) const
inline
261{ return m_detectionDistance; }

References m_detectionDistance.

Referenced by GetAggroRange().

◆ GetFormation() [1/2]

CreatureGroup * Creature::GetFormation ( )
inline
358{ return m_formation; }

References m_formation.

◆ GetFormation() [2/2]

◆ GetHomePosition() [1/2]

Position const & Creature::GetHomePosition ( ) const
inline
343{ return m_homePosition; }

References m_homePosition.

Referenced by DespawnOnEvade(), and GetRespawnPosition().

◆ GetHomePosition() [2/2]

void Creature::GetHomePosition ( float &  x,
float &  y,
float &  z,
float &  ori 
) const
inline
342{ m_homePosition.GetPosition(x, y, z, ori); }
void GetPosition(float &x, float &y) const
Definition Position.h:126

References Position::GetPosition(), and m_homePosition.

Referenced by HomeMovementGenerator< Creature >::_setTargetLocation(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::AttackStart(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::AttackStart(), boss_ayamiss::boss_ayamiss(), npc_icc_spire_frostwyrm::CanAIAttack(), npc_q24545_wretched_ghoul::npc_q24545_wretched_ghoulAI::CanAIAttack(), boss_halion::boss_halionAI::CanAIAttack(), boss_attumen::CanMeleeHit(), boss_midnight::CanMeleeHit(), boss_trollgore::boss_trollgoreAI::CheckEvadeIfOutOfCombatArea(), boss_anomalus::CheckEvadeIfOutOfCombatArea(), boss_gurtogg_bloodboil::CheckEvadeIfOutOfCombatArea(), boss_lady_vashj::CheckEvadeIfOutOfCombatArea(), boss_priestess_delrissa::CheckInRoom(), boss_sacrolash::CheckInRoom(), boss_kalecgos::CheckInRoom(), boss_onyxia::CheckInRoom(), boss_isle_of_conquest::boss_isle_of_conquestAI::CheckRageBuff(), boss_essence_of_suffering::boss_essence_of_sufferingAI::DamageTaken(), boss_essence_of_desire::boss_essence_of_desireAI::DamageTaken(), boss_taldaram::DoAction(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::DoAction(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::DoAction(), boss_kelthuzad_minion::boss_kelthuzad_minionAI::DoAction(), npc_hor_spiritual_reflection::npc_hor_spiritual_reflectionAI::EnterEvadeMode(), boss_professor_putricide::boss_professor_putricideAI::EnterEvadeMode(), boss_yoggsaron_sara::boss_yoggsaron_saraAI::EnterEvadeMode(), ResetToHomeOrientation::Execute(), UtherBatteredHiltEvent::Execute(), boss_kaelthas::ExecuteMiddleEvent(), DistractMovementGenerator::Finalize(), npc_arthas_teleport_visual::GetAI(), 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_sindragosa_trash::npc_sindragosa_trashAI::InitializeAI(), boss_halion::boss_halionAI::IsAnyPlayerValid(), boss_loatheb::boss_loathebAI::IsInRoom(), boss_algalon_the_observer::boss_algalon_the_observerAI::IsInRoom(), 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_balinda::JustEngagedWith(), boss_the_black_stalker::JustEngagedWith(), boss_professor_putricide::boss_professor_putricideAI::JustEngagedWith(), boss_rotface::boss_rotfaceAI::JustEngagedWith(), npc_daphne_stilwell::npc_daphne_stilwellAI::JustSummoned(), npc_mageguard_dalaran::npc_mageguard_dalaranAI::MoveInLineOfSight(), boss_zuljin::MovementInform(), boss_lady_vashj::MovementInform(), npc_dragonflayer_forge_master::npc_dragonflayer_forge_master(), npc_icc_vengeful_fleshreaper::npc_icc_vengeful_fleshreaperAI::npc_icc_vengeful_fleshreaperAI(), instance_ulduar::instance_ulduar_InstanceMapScript::OnCreatureCreate(), instance_the_black_morass::instance_the_black_morass_InstanceMapScript::OnCreatureRemove(), spell_halion_twilight_phasing::Phase(), SmartScript::ProcessAction(), boss_four_horsemen::boss_four_horsemenAI::Reset(), boss_thaddius::boss_thaddiusAI::Reset(), npc_q24545_lich_king::npc_q24545_lich_kingAI::Reset(), boss_lady_vashj::Reset(), SmartAI::ReturnToLastOOCPos(), npc_escortAI::ReturnToLastPoint(), Player::SetClientControl(), npc_alexstraza_the_lifebinder::SetData(), npc_pet_gen_fetch_ball::SpellHitTarget(), npc_av_marshal_or_warmaster::npc_av_marshal_or_warmasterAI::UpdateAI(), boss_drekthar::boss_drektharAI::UpdateAI(), boss_galvangar::boss_galvangarAI::UpdateAI(), boss_vanndar::boss_vanndarAI::UpdateAI(), npc_blackhand_incarcerator::npc_blackhand_incarceratorAI::UpdateAI(), boss_broodlord::boss_broodlordAI::UpdateAI(), npc_scarlet_cannon::npc_scarlet_cannonAI::UpdateAI(), npc_alexstraza_the_lifebinder::UpdateAI(), boss_elder_nadox::UpdateAI(), boss_frostsworn_general::boss_frostsworn_generalAI::UpdateAI(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::UpdateAI(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::UpdateAI(), boss_sapphiron::boss_sapphironAI::UpdateAI(), boss_thaddius_summon::boss_thaddius_summonAI::UpdateAI(), boss_mimiron::boss_mimironAI::UpdateAI(), npc_bloodmage_laurith::npc_bloodmage_laurithAI::UpdateAI(), and CreatureAI::VisualizeBoundary().

◆ GetLastLeashExtensionTime()

time_t Creature::GetLastLeashExtensionTime ( ) const
3724{
3726}
std::shared_ptr< time_t > const & GetLastLeashExtensionTimePtr() const
Definition Creature.cpp:3706

References GetLastLeashExtensionTimePtr().

Referenced by CanCreatureAttack().

◆ GetLastLeashExtensionTimePtr()

std::shared_ptr< time_t > const & Creature::GetLastLeashExtensionTimePtr ( ) const

◆ GetLeashTimer()

uint8 Creature::GetLeashTimer ( ) const
3734{ // Based on testing on Classic, seems to range from ~11s for low level mobs (1-5) to ~16s for high level mobs (70+)
3735 uint8 timerOffset = 11;
3736
3737 uint8 timerModifier = uint8(GetCreatureTemplate()->minlevel / 10) - 2;
3738
3739 // Formula is likely not quite correct, but better than flat timer
3740 return std::max<uint8>(timerOffset, timerOffset + timerModifier);
3741}

References GetCreatureTemplate().

Referenced by CanCreatureAttack().

◆ getLevelForTarget()

uint8 Creature::getLevelForTarget ( WorldObject const *  target) const
overridevirtual

Reimplemented from WorldObject.

3036{
3037 if (!isWorldBoss() || !target->ToUnit())
3038 return Unit::getLevelForTarget(target);
3039
3040 uint16 level = target->ToUnit()->GetLevel() + sWorld->getIntConfig(CONFIG_WORLD_BOSS_LEVEL_DIFF);
3041 if (level < 1)
3042 return 1;
3043 if (level > 255)
3044 return 255;
3045 return uint8(level);
3046}
std::uint16_t uint16
Definition Define.h:108
@ CONFIG_WORLD_BOSS_LEVEL_DIFF
Definition WorldConfig.h:235
uint8 getLevelForTarget(WorldObject const *) const override
Definition Unit.h:1027

References CONFIG_WORLD_BOSS_LEVEL_DIFF, Unit::GetLevel(), Unit::getLevelForTarget(), isWorldBoss(), sWorld, and Object::ToUnit().

Referenced by GetAggroRange(), and GetAttackDistance().

◆ GetLootMode()

uint16 Creature::GetLootMode ( ) const
inline

◆ GetLootRecipient()

◆ GetLootRecipientGroup()

Group * Creature::GetLootRecipientGroup ( ) const
1325{
1327 return nullptr;
1328 return sGroupMgr->GetGroupByGUID(m_lootRecipientGroup);
1329}
#define sGroupMgr
Definition GroupMgr.h:51

References m_lootRecipientGroup, and sGroupMgr.

Referenced by SmartScript::GetTargets(), Player::isAllowedToLoot(), isTappedBy(), Unit::Kill(), and Player::SendLoot().

◆ GetLootRecipientGroupGUID()

ObjectGuid::LowType Creature::GetLootRecipientGroupGUID ( ) const
inline

◆ GetLootRecipientGUID()

ObjectGuid Creature::GetLootRecipientGUID ( ) const
inline

◆ GetMeleeDamageSchoolMask()

SpellSchoolMask Creature::GetMeleeDamageSchoolMask ( WeaponAttackType  = BASE_ATTACK,
uint8  = 0 
) const
inlineoverridevirtual

Implements Unit.

165{ return m_meleeDamageSchoolMask; }

References m_meleeDamageSchoolMask.

Referenced by ThreatContainer::SelectNextVictim().

◆ GetMovementTemplate()

◆ GetNameForLocaleIdx()

std::string const & Creature::GetNameForLocaleIdx ( LocaleConstant  locale_idx) const
overridevirtual

Reimplemented from WorldObject.

3154{
3155 if (loc_idx != DEFAULT_LOCALE)
3156 {
3157 uint8 uloc_idx = uint8(loc_idx);
3158 CreatureLocale const* cl = sObjectMgr->GetCreatureLocale(GetEntry());
3159 if (cl)
3160 {
3161 if (cl->Name.size() > uloc_idx && !cl->Name[uloc_idx].empty())
3162 return cl->Name[uloc_idx];
3163 }
3164 }
3165
3166 return GetName();
3167}
#define DEFAULT_LOCALE
Definition Common.h:131
std::string const & GetName() const
Definition Object.h:514
Definition CreatureData.h:343
std::vector< std::string > Name
Definition CreatureData.h:344

References DEFAULT_LOCALE, Object::GetEntry(), WorldObject::GetName(), CreatureLocale::Name, and sObjectMgr.

Referenced by Pet::CreateBaseAtCreature(), and WorldSession::SendPetNameQuery().

◆ GetNativeObjectScale()

float Creature::GetNativeObjectScale ( ) const
overridevirtual

Reimplemented from Unit.

Reimplemented in Pet.

3510{
3512}
static CreatureModel const * ChooseDisplayId(CreatureTemplate const *cinfo, CreatureData const *data=nullptr)
Definition ObjectMgr.cpp:1647
float DisplayScale
Definition CreatureData.h:180

References ObjectMgr::ChooseDisplayId(), CreatureModel::DisplayScale, and GetCreatureTemplate().

Referenced by Create(), Pet::GetNativeObjectScale(), InitEntry(), Guardian::InitStatsForLevel(), and Respawn().

◆ GetOriginalEntry()

uint32 Creature::GetOriginalEntry ( ) const
inline

◆ GetOriginalEquipmentId()

◆ GetPetAutoSpellOnPos()

virtual uint32 Creature::GetPetAutoSpellOnPos ( uint8  pos) const
inlinevirtual

Reimplemented in Pet.

326 {
328 return 0;
329 else
330 return m_charmInfo->GetCharmSpell(pos)->GetAction();
331 }
#define MAX_SPELL_CHARM
Definition CharmInfo.h:24
@ ACT_ENABLED
Definition CharmInfo.h:63
CharmInfo * m_charmInfo
Definition Unit.h:2099
CharmSpellInfo * GetCharmSpell(uint8 index)
Definition CharmInfo.h:158
ActiveStates GetType() const
Definition CharmInfo.h:101
uint32 GetAction() const
Definition CharmInfo.h:102

References ACT_ENABLED, UnitActionBarEntry::GetAction(), CharmInfo::GetCharmSpell(), UnitActionBarEntry::GetType(), Unit::m_charmInfo, and MAX_SPELL_CHARM.

Referenced by PetAI::_canMeleeAttack(), and PetAI::UpdateAI().

◆ GetPetAutoSpellSize()

virtual uint8 Creature::GetPetAutoSpellSize ( ) const
inlinevirtual

Reimplemented in Pet.

324{ return MAX_SPELL_CHARM; }

References MAX_SPELL_CHARM.

Referenced by PetAI::_canMeleeAttack(), and PetAI::UpdateAI().

◆ GetPlayerDamageReq()

uint32 Creature::GetPlayerDamageReq ( ) const
3849{
3850 return _playerDamageReq;
3851}

References _playerDamageReq.

Referenced by Acore::XP::Gain().

◆ GetRandomId()

uint32 Creature::GetRandomId ( uint32  id1,
uint32  id2,
uint32  id3 
)
3761{
3762 uint32 id = id1;
3763 uint8 ids = 0;
3764
3765 if (id2)
3766 {
3767 ++ids;
3768 if (id3) ++ids;
3769 }
3770
3771 if (ids)
3772 {
3773 uint8 idNumber = urand(0, ids);
3774 switch (idNumber)
3775 {
3776 case 0:
3777 id = id1;
3778 break;
3779 case 1:
3780 id = id2;
3781 break;
3782 case 2:
3783 id = id3;
3784 break;
3785 }
3786 }
3787 return id;
3788}
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:44

References urand().

Referenced by LoadCreatureFromDB(), and Respawn().

◆ GetReactState()

ReactStates Creature::GetReactState ( ) const
inline
96{ return m_reactState; }

References m_reactState.

Referenced by boss_shade_of_aran::AttackStart(), boss_alythess::AttackStart(), boss_icehowl::boss_icehowlAI::AttackStart(), boss_the_lurker_below::AttackStart(), npc_capernian::AttackStart(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::CanAIAttack(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::CanAIAttack(), npc_lk_wicked_spirit::npc_lk_wicked_spiritAI::CanAIAttack(), SmartAI::CanAIAttack(), boss_renataki::boss_renatakiAI::CanAlwaysBeDetectable(), boss_renataki::boss_renatakiAI::CanBeSeen(), boss_renataki::boss_renatakiAI::CanSeeAlways(), CharmInfo::CharmInfo(), Player::CharmSpellInitialize(), npc_ulduar_leviathan_mkii::npc_ulduar_leviathan_mkiiAI::DamageTaken(), npc_ulduar_vx001::npc_ulduar_vx001AI::DamageTaken(), npc_ulduar_aerial_command_unit::npc_ulduar_aerial_command_unitAI::DamageTaken(), boss_shade_of_aran::DamageTaken(), Pet::FillPetInfo(), boss_ick::boss_ickAI::KilledUnit(), npc_chesspiece::OnCharmed(), npc_scarlet_ghoul::npc_scarlet_ghoulAI::OwnerAttackedBy(), Player::PetSpellInitialize(), npc_imprisoned_beryl_sorcerer::npc_imprisoned_beryl_sorcererAI::Reset(), Pet::SavePetToDB(), boss_renataki::boss_renatakiAI::UpdateAI(), boss_viscidus::UpdateAI(), boss_icehowl::boss_icehowlAI::UpdateAI(), npc_gunship_boarding_leader::npc_gunship_boarding_leaderAI::UpdateAI(), npc_gunship_boarding_add::npc_gunship_boarding_add_realAI::UpdateAI(), npc_gunship_mage::npc_gunship_mageAI::UpdateAI(), npc_gunship_gunner::npc_gunship_gunnerAI::UpdateAI(), boss_stormcaller_brundir::boss_stormcaller_brundirAI::UpdateAI(), boss_lady_vashj::UpdateAI(), boss_leotheras_the_blind::UpdateAI(), boss_the_lurker_below::UpdateAI(), npc_gunship_rocketeer::npc_gunship_rocketeerAI::UpdateAI(), InstanceScript::UpdateMinionState(), and Player::VehicleSpellInitialize().

◆ GetRespawnDelay()

◆ GetRespawnPosition()

void Creature::GetRespawnPosition ( float &  x,
float &  y,
float &  z,
float *  ori = nullptr,
float *  dist = nullptr 
) const
2956{
2957 if (m_spawnId)
2958 {
2959 if (CreatureData const* data = sObjectMgr->GetCreatureData(m_spawnId))
2960 {
2961 x = data->posX;
2962 y = data->posY;
2963 z = data->posZ;
2964 if (ori)
2965 *ori = data->orientation;
2966 if (dist)
2967 *dist = data->wander_distance;
2968
2969 return;
2970 }
2971 }
2972
2973 // xinef: changed this from current position to home position, fixes world summons with infinite duration
2974 if (GetTransport())
2975 {
2976 x = GetPositionX();
2977 y = GetPositionY();
2978 z = GetPositionZ();
2979 if (ori)
2980 *ori = GetOrientation();
2981 }
2982 else
2983 {
2985 x = homePos.GetPositionX();
2986 y = homePos.GetPositionY();
2987 z = homePos.GetPositionZ();
2988 if (ori)
2989 *ori = homePos.GetOrientation();
2990 }
2991 if (dist)
2992 *dist = 0;
2993}
Position const homePos
Definition boss_chromaggus.cpp:71
Transport * GetTransport() const
Definition Object.h:670
Definition CreatureData.h:370
Definition Position.h:27

References GetHomePosition(), Position::GetOrientation(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), WorldObject::GetTransport(), homePos, m_spawnId, and sObjectMgr.

Referenced by SmartScript::ProcessAction(), RemoveCorpse(), and npc_escortAI::UpdateAI().

◆ GetRespawnTime()

time_t const & Creature::GetRespawnTime ( ) const
inline

◆ GetRespawnTimeEx()

time_t Creature::GetRespawnTimeEx ( ) const
2946{
2947 time_t now = GameTime::GetGameTime().count();
2948
2949 if (m_respawnTime > now)
2950 return m_respawnTime;
2951 else
2952 return now;
2953}

References GameTime::GetGameTime(), and m_respawnTime.

Referenced by npc_commandscript::HandleNpcInfoCommand().

◆ GetScriptId()

◆ GetScriptName()

std::string Creature::GetScriptName ( ) const

◆ GetShieldBlockValue()

uint32 Creature::GetShieldBlockValue ( ) const
inlineoverridevirtual

Implements Unit.

161 {
162 return (GetLevel() / 2 + uint32(GetStat(STAT_STRENGTH) / 20));
163 }
@ STAT_STRENGTH
Definition SharedDefines.h:258
float GetStat(Stats stat) const
Definition Unit.h:997
uint8 GetLevel() const
Definition Unit.h:1026

References Unit::GetLevel(), Unit::GetStat(), and STAT_STRENGTH.

◆ GetSparringPct()

float Creature::GetSparringPct ( ) const
inline
192{ return _sparringPct; }

References _sparringPct.

Referenced by Unit::DealDamage().

◆ GetSpawnId()

ObjectGuid::LowType Creature::GetSpawnId ( ) const
inline
65{ return m_spawnId; }

References m_spawnId.

Referenced by BattlegroundAV::AddAVCreature(), CreatureGroup::AddMember(), Vehicle::ApplyAllImmunities(), OPvPCapturePointZM_Graveyard::CanTalkTo(), boss_ghazan::DoAction(), RandomMovementGenerator< T >::DoInitialize(), GetDebugInfo(), CreatureGroup::GetNewTargetForMember(), GameEventMgr::GetNPCFlag(), SmartScript::GetScript(), WorldSession::HandleAuctionSellItem(), debug_commandscript::HandleDebugGetLootRecipientCommand(), OPvPCapturePointZM_Graveyard::HandleGossipOption(), npc_commandscript::HandleNpcAddCommand(), npc_commandscript::HandleNpcAddFormationCommand(), npc_commandscript::HandleNpcGuidCommand(), npc_commandscript::HandleNpcInfoCommand(), npc_commandscript::HandleNpcMoveCommand(), npc_commandscript::HandleNpcSetLinkCommand(), npc_commandscript::HandleNpcSetMoveTypeCommand(), npc_commandscript::HandleNpcSetSpawnTimeCommand(), npc_commandscript::HandleNpcSetWanderDistanceCommand(), wp_commandscript::HandleWpLoadCommand(), wp_commandscript::HandleWpModifyCommand(), wp_commandscript::HandleWpShowCommand(), wp_commandscript::HandleWpUnLoadCommand(), npc_eastvale_peasent::Initialize(), npc_spinestalker::npc_spinestalkerAI::InitializeAI(), npc_rimefang::npc_rimefangAI::InitializeAI(), npc_sindragosa_trash::npc_sindragosa_trashAI::InitializeAI(), npc_risen_archmage::npc_risen_archmageAI::JustEngagedWith(), npc_spinestalker::npc_spinestalkerAI::JustRespawned(), npc_rimefang::npc_rimefangAI::JustRespawned(), npc_sindragosa_trash::npc_sindragosa_trashAI::JustRespawned(), LoadSparringPct(), CreatureGroup::MemberEngagingTarget(), CreatureGroup::MemberEvaded(), instance_sunken_temple::instance_sunken_temple_InstanceMapScript::OnCreatureCreate(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnUnitDeath(), RisenArchmageCheck::operator()(), ValithriaDespawner::operator()(), DoorsGuidCheck::operator()(), FormationMgr::RemoveCreatureFromGroup(), npc_ahnqiraji_critter::Reset(), Respawn(), SearchFormation(), npc_risen_archmage::npc_risen_archmageAI::UpdateAI(), and outdoorpvp_na_halaa_creatures::UpdateAI().

◆ GetSpellCooldown()

uint32 Creature::GetSpellCooldown ( uint32  spell_id) const
2922{
2923 CreatureSpellCooldowns::const_iterator itr = m_CreatureSpellCooldowns.find(spell_id);
2924 if (itr == m_CreatureSpellCooldowns.end())
2925 return 0;
2926
2927 return itr->second.end > GameTime::GetGameTimeMS().count() ? itr->second.end - GameTime::GetGameTimeMS().count() : 0;
2928}

References GameTime::GetGameTimeMS(), and m_CreatureSpellCooldowns.

◆ GetSpellDamageMod()

float Creature::GetSpellDamageMod ( int32  Rank)
1623{
1624 switch (Rank) // define rates for each elite rank
1625 {
1636 default:
1638 }
1639}
@ RATE_CREATURE_NORMAL_SPELLDAMAGE
Definition WorldConfig.h:447
@ RATE_CREATURE_ELITE_ELITE_SPELLDAMAGE
Definition WorldConfig.h:448
@ RATE_CREATURE_ELITE_RAREELITE_SPELLDAMAGE
Definition WorldConfig.h:449
@ RATE_CREATURE_ELITE_WORLDBOSS_SPELLDAMAGE
Definition WorldConfig.h:450
@ RATE_CREATURE_ELITE_RARE_SPELLDAMAGE
Definition WorldConfig.h:451

References CREATURE_ELITE_ELITE, CREATURE_ELITE_NORMAL, CREATURE_ELITE_RARE, CREATURE_ELITE_RAREELITE, CREATURE_ELITE_WORLDBOSS, RATE_CREATURE_ELITE_ELITE_SPELLDAMAGE, RATE_CREATURE_ELITE_RARE_SPELLDAMAGE, RATE_CREATURE_ELITE_RAREELITE_SPELLDAMAGE, RATE_CREATURE_ELITE_WORLDBOSS_SPELLDAMAGE, RATE_CREATURE_NORMAL_SPELLDAMAGE, and sWorld.

Referenced by Unit::SpellDamageBonusDone().

◆ GetSummonerGUID()

ObjectGuid Creature::GetSummonerGUID ( ) const

Helper to get the creature's summoner GUID, if it is a summon.

3877{
3878 if (TempSummon const* temp = ToTempSummon())
3879 return temp->GetSummonerGUID();
3880
3881 LOG_DEBUG("entities.unit", "Creature::GetSummonerGUID() called by creature that is not a summon. Creature: {} ({})", GetEntry(), GetName());
3882 return ObjectGuid::Empty;
3883}

References ObjectGuid::Empty, Object::GetEntry(), WorldObject::GetName(), LOG_DEBUG, and Unit::ToTempSummon().

Referenced by npc_inner_demon::CanAIAttack(), npc_inner_demon::CanBeSeen(), npc_inner_demon::CanReceiveDamage(), npc_inner_demon::JustDied(), npc_collapsing_star::npc_collapsing_starAI::JustSummoned(), and npc_algalon_worm_hole::npc_algalon_worm_holeAI::JustSummoned().

◆ GetTrainerSpells()

TrainerSpellData const * Creature::GetTrainerSpells ( ) const
3148{
3149 return sObjectMgr->GetNpcTrainerSpells(GetEntry());
3150}

References Object::GetEntry(), and sObjectMgr.

Referenced by WorldSession::HandleTrainerBuySpellOpcode(), and WorldSession::SendTrainerList().

◆ GetTransportHomePosition() [1/2]

Position const & Creature::GetTransportHomePosition ( ) const
inline

◆ GetTransportHomePosition() [2/2]

void Creature::GetTransportHomePosition ( float &  x,
float &  y,
float &  z,
float &  ori 
) const
inline

◆ GetVendorItemCurrentCount()

uint32 Creature::GetVendorItemCurrentCount ( VendorItem const *  vItem)
3076{
3077 if (!vItem->maxcount)
3078 return vItem->maxcount;
3079
3080 VendorItemCounts::iterator itr = m_vendorItemCounts.begin();
3081 for (; itr != m_vendorItemCounts.end(); ++itr)
3082 if (itr->itemId == vItem->item)
3083 break;
3084
3085 if (itr == m_vendorItemCounts.end())
3086 return vItem->maxcount;
3087
3088 VendorItemCount* vCount = &*itr;
3089
3090 time_t ptime = GameTime::GetGameTime().count();
3091
3092 if (time_t(vCount->lastIncrementTime + vItem->incrtime) <= ptime)
3093 {
3094 ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(vItem->item);
3095
3096 uint32 diff = uint32((ptime - vCount->lastIncrementTime) / vItem->incrtime);
3097 if ((vCount->count + diff * pProto->BuyCount) >= vItem->maxcount)
3098 {
3099 m_vendorItemCounts.erase(itr);
3100 return vItem->maxcount;
3101 }
3102
3103 vCount->count += diff * pProto->BuyCount;
3104 vCount->lastIncrementTime = ptime;
3105 }
3106
3107 return vCount->count;
3108}
Definition ItemTemplate.h:619
uint32 BuyCount
Definition ItemTemplate.h:629
Definition CreatureData.h:496
time_t lastIncrementTime
Definition CreatureData.h:501
uint32 count
Definition CreatureData.h:500

References ItemTemplate::BuyCount, VendorItemCount::count, GameTime::GetGameTime(), VendorItem::incrtime, VendorItem::item, VendorItemCount::lastIncrementTime, m_vendorItemCounts, VendorItem::maxcount, and sObjectMgr.

Referenced by Player::BuyItemFromVendorSlot(), and WorldSession::SendListInventory().

◆ GetVendorItems()

VendorItemData const * Creature::GetVendorItems ( ) const
3071{
3072 return sObjectMgr->GetNpcVendorItemList(GetEntry());
3073}

References Object::GetEntry(), and sObjectMgr.

Referenced by Player::BuyItemFromVendorSlot(), and WorldSession::SendListInventory().

◆ GetWanderDistance()

float Creature::GetWanderDistance ( ) const
inline

◆ GetWaypointPath()

◆ HasFlagsExtra()

◆ hasInvolvedQuest()

bool Creature::hasInvolvedQuest ( uint32  quest_id) const
overridevirtual

Reimplemented from Object.

1843{
1844 QuestRelationBounds qir = sObjectMgr->GetCreatureQuestInvolvedRelationBounds(GetEntry());
1845 for (QuestRelations::const_iterator itr = qir.first; itr != qir.second; ++itr)
1846 {
1847 if (itr->second == quest_id)
1848 return true;
1849 }
1850 return false;
1851}
std::pair< QuestRelations::const_iterator, QuestRelations::const_iterator > QuestRelationBounds
Definition ObjectMgr.h:525

References Object::GetEntry(), and sObjectMgr.

◆ HasLootMode()

bool Creature::HasLootMode ( uint16  lootMode) const
inline
245{ return m_LootMode & lootMode; }

References m_LootMode.

◆ hasLootRecipient()

◆ HasMechanicTemplateImmunity()

bool Creature::HasMechanicTemplateImmunity ( uint32  mask) const
2219{
2221}
bool IsPlayer() const
Definition ObjectGuid.h:168
ObjectGuid GetOwnerGUID() const
Definition Unit.h:668
uint32 MechanicImmuneMask
Definition CreatureData.h:244

References GetCreatureTemplate(), Unit::GetOwnerGUID(), ObjectGuid::IsPlayer(), and CreatureTemplate::MechanicImmuneMask.

Referenced by Unit::HandleProcTriggerSpell(), IsImmunedToSpell(), IsImmunedToSpellEffect(), and Unit::UpdateSpeed().

◆ hasQuest()

bool Creature::hasQuest ( uint32  quest_id) const
overridevirtual

Reimplemented from Object.

1832{
1833 QuestRelationBounds qr = sObjectMgr->GetCreatureQuestRelationBounds(GetEntry());
1834 for (QuestRelations::const_iterator itr = qr.first; itr != qr.second; ++itr)
1835 {
1836 if (itr->second == quest_id)
1837 return true;
1838 }
1839 return false;
1840}

References Object::GetEntry(), and sObjectMgr.

◆ HasReactState()

◆ HasSearchedAssistance()

bool Creature::HasSearchedAssistance ( )
inline

References m_AlreadySearchedAssistance.

Referenced by setDeathState().

◆ HasSpell()

bool Creature::HasSpell ( uint32  spellID) const
overridevirtual

Reimplemented from Unit.

Reimplemented in Pet.

2937{
2938 uint8 i;
2939 for (i = 0; i < MAX_CREATURE_SPELLS; ++i)
2940 if (spellID == m_spells[i])
2941 break;
2942 return i < MAX_CREATURE_SPELLS; //broke before end of iteration of known spells
2943}

References m_spells, and MAX_CREATURE_SPELLS.

Referenced by WorldSession::HandleCastSpellOpcode().

◆ HasSpellCooldown()

bool Creature::HasSpellCooldown ( uint32  spell_id) const
overridevirtual

◆ HasSpellFocus()

bool Creature::HasSpellFocus ( Spell const *  focusSpell = nullptr) const
3586{
3587 if (isDead()) // dead creatures cannot focus
3588 {
3589 return false;
3590 }
3591
3592 return focusSpell ? (focusSpell == _spellFocusInfo.Spell) : (_spellFocusInfo.Spell || _spellFocusInfo.Delay);
3593}
uint32 Delay
Definition Creature.h:155
struct Creature::@226 _spellFocusInfo
Definition Spell.h:287
bool isDead() const
Definition Unit.h:1709

References _spellFocusInfo, Unit::isDead(), and Spell::Spell().

Referenced by IsMovementPreventedByCasting().

◆ HasSwimmingFlagOutOfCombat()

bool Creature::HasSwimmingFlagOutOfCombat ( ) const
inline

◆ HasWeapon()

bool Creature::HasWeapon ( WeaponAttackType  type) const
overridevirtual

Implements Unit.

3196{
3197 const uint8 slot = uint8(type);
3198 ItemEntry const* item = sItemStore.LookupEntry(GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + slot));
3199
3200 return ((item && item->ClassID == ITEM_CLASS_WEAPON) || (type == OFF_ATTACK && CanDualWield()));
3201}
DBCStorage< ItemEntry > sItemStore(Itemfmt)
@ ITEM_CLASS_WEAPON
Definition ItemTemplate.h:293
@ UNIT_VIRTUAL_ITEM_SLOT_ID
Definition UpdateFields.h:116
uint32 GetUInt32Value(uint16 index) const
Definition Object.cpp:305
bool CanDualWield() const
Definition Unit.h:918
Definition DBCStructure.h:1141
uint32 ClassID
Definition DBCStructure.h:1143

References Unit::CanDualWield(), ItemEntry::ClassID, Object::GetUInt32Value(), ITEM_CLASS_WEAPON, OFF_ATTACK, sItemStore, and UNIT_VIRTUAL_ITEM_SLOT_ID.

Referenced by CalculateMinMaxDamage(), HasWeaponForAttack(), and ScriptedAI::SetEquipmentSlots().

◆ HasWeaponForAttack()

bool Creature::HasWeaponForAttack ( WeaponAttackType  type) const
inlineoverridevirtual

Reimplemented from Unit.

195{ return (Unit::HasWeaponForAttack(type) && HasWeapon(type)); }
virtual bool HasWeaponForAttack(WeaponAttackType type) const
Definition Unit.h:927

References HasWeapon(), and Unit::HasWeaponForAttack().

Referenced by CalculateMinMaxDamage().

◆ InitEntry()

bool Creature::InitEntry ( uint32  Entry,
const CreatureData data = nullptr 
)
protected

change the entry of creature until respawn

441{
442 CreatureTemplate const* normalInfo = sObjectMgr->GetCreatureTemplate(Entry);
443 if (!normalInfo)
444 {
445 LOG_ERROR("sql.sql", "Creature::InitEntry creature entry {} does not exist.", Entry);
446 return false;
447 }
448
449 // get difficulty 1 mode entry
450 // Xinef: Skip for pets!
451 CreatureTemplate const* cinfo = normalInfo;
452 for (uint8 diff = uint8(GetMap()->GetSpawnMode()); diff > 0 && !IsPet();)
453 {
454 // we already have valid Map pointer for current creature!
455 if (normalInfo->DifficultyEntry[diff - 1])
456 {
457 cinfo = sObjectMgr->GetCreatureTemplate(normalInfo->DifficultyEntry[diff - 1]);
458 if (cinfo)
459 break; // template found
460
461 // check and reported at startup, so just ignore (restore normalInfo)
462 cinfo = normalInfo;
463 }
464
465 // for instances heroic to normal, other cases attempt to retrieve previous difficulty
466 if (diff >= RAID_DIFFICULTY_10MAN_HEROIC && GetMap()->IsRaid())
467 diff -= 2; // to normal raid difficulty cases
468 else
469 --diff;
470 }
471
472 SetEntry(Entry); // normal entry always
473 m_creatureInfo = cinfo; // map mode related always
474
475 // equal to player Race field, but creature does not have race
477
478 // known valid are: CLASS_WARRIOR, CLASS_PALADIN, CLASS_ROGUE, CLASS_MAGE
480
481 // Cancel load if no model defined
482 if (!(cinfo->GetFirstValidModel()))
483 {
484 LOG_ERROR("sql.sql", "Creature (Entry: {}) has no model defined in table `creature_template_model`, can't load. ", Entry);
485 return false;
486 }
487
488 CreatureModel model = *ObjectMgr::ChooseDisplayId(cinfo, data);
489 CreatureModelInfo const* mInfo = sObjectMgr->GetCreatureModelRandomGender(&model, cinfo);
490 if (!mInfo) // Cancel load if no model defined
491 {
492 LOG_ERROR("sql.sql", "Creature (Entry: {}) has no model {} defined in table `creature_template_model`, can't load. ", Entry, model.CreatureDisplayID);
493 return false;
494 }
495
498
499 // Load creature equipment
500 if (!data)
501 {
502 LoadEquipment(); // use default from the template
503 }
504 else if (data->equipmentId == 0)
505 {
506 LoadEquipment(0); // 0 means no equipment for creature table
507 }
508 else
509 {
512 }
513
514 SetName(normalInfo->Name); // at normal entry always
515
517
519 SetSpeed(MOVE_RUN, cinfo->speed_run);
522
523 // Will set UNIT_FIELD_BOUNDINGRADIUS and UNIT_FIELD_COMBATREACH
525
527
529
530 // checked at loading
534
535 for (uint8 i = 0; i < MAX_CREATURE_SPELLS; ++i)
537
538 return true;
539}
@ CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK
Definition CreatureData.h:56
MovementGeneratorType
Definition MotionMaster.h:38
@ RANDOM_MOTION_TYPE
Definition MotionMaster.h:40
@ MOVE_FLIGHT
Definition UnitDefines.h:355
@ MOVE_SWIM
Definition UnitDefines.h:352
@ MOVE_WALK
Definition UnitDefines.h:349
@ UNIT_FIELD_BYTES_0
Definition UpdateFields.h:95
@ UNIT_MOD_CAST_SPEED
Definition UpdateFields.h:137
@ UNIT_FIELD_HOVERHEIGHT
Definition UpdateFields.h:173
void SetObjectScale(float scale) override
Definition Creature.cpp:3514
void LoadEquipment(int8 id=1, bool force=false)
Definition Creature.cpp:1809
void SetCanDualWield(bool value) override
Definition Creature.cpp:1803
void SetByteValue(uint16 index, uint8 offset, uint8 value)
Definition Object.cpp:750
void SetFloatValue(uint16 index, float value)
Definition Object.cpp:737
void SetEntry(uint32 entry)
Definition Object.h:117
void SetSpeed(UnitMoveType mtype, float rate, bool forced=false)
Definition Unit.cpp:14521
void SetName(std::string const &newname)
Definition Object.h:515
int8 equipmentId
Definition CreatureData.h:378
uint32 CreatureDisplayID
Definition CreatureData.h:179
float speed_run
Definition CreatureData.h:201
std::string Name
Definition CreatureData.h:191
uint32 spells[MAX_CREATURE_SPELLS]
Definition CreatureData.h:228
CreatureModel const * GetFirstValidModel() const
Definition Creature.cpp:144
float speed_swim
Definition CreatureData.h:202
uint32 MovementType
Definition CreatureData.h:234
uint32 unit_class
Definition CreatureData.h:213
float speed_walk
Definition CreatureData.h:200
float HoverHeight
Definition CreatureData.h:236
float speed_flight
Definition CreatureData.h:203

References ObjectMgr::ChooseDisplayId(), CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK, CreatureModel::CreatureDisplayID, CreatureTemplate::DifficultyEntry, CreatureModel::DisplayScale, Entry, CreatureData::equipmentId, GetCreatureTemplate(), CreatureTemplate::GetFirstValidModel(), WorldObject::GetMap(), GetNativeObjectScale(), CreatureTemplate::HasFlagsExtra(), CreatureTemplate::HoverHeight, IDLE_MOTION_TYPE, Unit::IsPet(), Map::IsRaid(), LoadEquipment(), LOG_ERROR, m_creatureInfo, m_defaultMovementType, m_originalEquipmentId, m_spells, m_wanderDistance, MAX_CREATURE_SPELLS, MOVE_FLIGHT, MOVE_RUN, MOVE_SWIM, MOVE_WALK, CreatureTemplate::MovementType, CreatureTemplate::Name, RAID_DIFFICULTY_10MAN_HEROIC, RANDOM_MOTION_TYPE, Object::SetByteValue(), SetCanDualWield(), SetDisplayId(), Object::SetEntry(), Object::SetFloatValue(), WorldObject::SetName(), Unit::SetNativeDisplayId(), SetObjectScale(), Unit::SetSpeed(), sObjectMgr, CreatureTemplate::speed_flight, CreatureTemplate::speed_run, CreatureTemplate::speed_swim, CreatureTemplate::speed_walk, CreatureTemplate::spells, CreatureTemplate::unit_class, UNIT_FIELD_BYTES_0, UNIT_FIELD_HOVERHEIGHT, and UNIT_MOD_CAST_SPEED.

Referenced by Pet::Create(), and UpdateEntry().

◆ InitializeReactState()

void Creature::InitializeReactState ( )

Check if the creature has the specified ReactState.

2211{
2212 if ((IsTotem() || IsTrigger() || IsCritter() || IsSpiritService()) && GetAIName() != "SmartAI" && !GetScriptId())
2214 else
2216}
@ REACT_PASSIVE
Definition Unit.h:549
bool IsTrigger() const
Definition Creature.h:76
void SetReactState(ReactStates state)
A creature can have 3 ReactStates : Agressive, Passive, Neutral.
Definition Creature.h:95
bool IsCritter() const
Definition Unit.h:783
bool IsSpiritService() const
Definition Unit.h:774

References GetAIName(), GetScriptId(), Unit::IsCritter(), Unit::IsSpiritService(), Unit::IsTotem(), IsTrigger(), REACT_AGGRESSIVE, REACT_PASSIVE, and SetReactState().

Referenced by spell_gen_feign_death_all_flags::HandleEffectRemove(), spell_gen_feign_death_no_dyn_flag::HandleEffectRemove(), spell_gen_feign_death_no_prevent_emotes::HandleEffectRemove(), Respawn(), and UpdateEntry().

◆ IsAlwaysDetectableFor()

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

Reimplemented from WorldObject.

1905{
1907 {
1908 return true;
1909 }
1910
1911 if (IsAIEnabled && AI()->CanAlwaysBeDetectable(seer))
1912 {
1913 return true;
1914 }
1915
1916 return false;
1917}
bool IsAlwaysDetectableFor(WorldObject const *seer) const override
Definition Unit.cpp:14306

References AI(), Unit::IsAIEnabled, and Unit::IsAlwaysDetectableFor().

◆ IsAvoidingAOE()

◆ isCanInteractWithBattleMaster()

bool Creature::isCanInteractWithBattleMaster ( Player player,
bool  msg 
) const
1229{
1230 if (!IsBattleMaster())
1231 return false;
1232
1233 BattlegroundTypeId bgTypeId = sBattlegroundMgr->GetBattleMasterBG(GetEntry());
1234 if (!msg)
1235 return player->GetBGAccessByLevel(bgTypeId);
1236
1237 if (!player->GetBGAccessByLevel(bgTypeId))
1238 {
1239 ClearGossipMenuFor(player);
1240 switch (bgTypeId)
1241 {
1242 case BATTLEGROUND_AV:
1243 SendGossipMenuFor(player, 7616, this);
1244 break;
1245 case BATTLEGROUND_WS:
1246 SendGossipMenuFor(player, 7599, this);
1247 break;
1248 case BATTLEGROUND_AB:
1249 SendGossipMenuFor(player, 7642, this);
1250 break;
1251 case BATTLEGROUND_EY:
1252 case BATTLEGROUND_NA:
1253 case BATTLEGROUND_BE:
1254 case BATTLEGROUND_AA:
1255 case BATTLEGROUND_RL:
1256 case BATTLEGROUND_SA:
1257 case BATTLEGROUND_DS:
1258 case BATTLEGROUND_RV:
1259 SendGossipMenuFor(player, 10024, this);
1260 break;
1261 default:
1262 break;
1263 }
1264 return false;
1265 }
1266 return true;
1267}
#define sBattlegroundMgr
Definition BattlegroundMgr.h:187
void SendGossipMenuFor(Player *player, uint32 npcTextID, ObjectGuid const guid)
Definition ScriptedGossip.cpp:45
void ClearGossipMenuFor(Player *player)
Definition ScriptedGossip.cpp:22
BattlegroundTypeId
Definition SharedDefines.h:3734
@ BATTLEGROUND_AA
Definition SharedDefines.h:3741
@ BATTLEGROUND_WS
Definition SharedDefines.h:3737
@ BATTLEGROUND_EY
Definition SharedDefines.h:3742
@ BATTLEGROUND_AV
Definition SharedDefines.h:3736
@ BATTLEGROUND_BE
Definition SharedDefines.h:3740
@ BATTLEGROUND_RV
Definition SharedDefines.h:3746
@ BATTLEGROUND_NA
Definition SharedDefines.h:3739
@ BATTLEGROUND_DS
Definition SharedDefines.h:3745
@ BATTLEGROUND_SA
Definition SharedDefines.h:3744
@ BATTLEGROUND_AB
Definition SharedDefines.h:3738
@ BATTLEGROUND_RL
Definition SharedDefines.h:3743
bool GetBGAccessByLevel(BattlegroundTypeId bgTypeId) const
Definition Player.cpp:12287
bool IsBattleMaster() const
Definition Unit.h:759

References BATTLEGROUND_AA, BATTLEGROUND_AB, BATTLEGROUND_AV, BATTLEGROUND_BE, BATTLEGROUND_DS, BATTLEGROUND_EY, BATTLEGROUND_NA, BATTLEGROUND_RL, BATTLEGROUND_RV, BATTLEGROUND_SA, BATTLEGROUND_WS, ClearGossipMenuFor(), Player::GetBGAccessByLevel(), Object::GetEntry(), Unit::IsBattleMaster(), sBattlegroundMgr, and SendGossipMenuFor().

◆ isCanTrainingAndResetTalentsOf()

bool Creature::isCanTrainingAndResetTalentsOf ( Player player) const
1270{
1271 return player->GetLevel() >= 10
1273 && player->IsClass((Classes)GetCreatureTemplate()->trainer_class, CLASS_CONTEXT_CLASS_TRAINER);
1274}
Classes
Definition SharedDefines.h:139
@ TRAINER_TYPE_CLASS
Definition SharedDefines.h:2617
@ CLASS_CONTEXT_CLASS_TRAINER
Definition UnitDefines.h:243
bool IsClass(Classes playerClass, ClassContext context=CLASS_CONTEXT_NONE) const override
Definition Player.cpp:1295
uint32 trainer_type
Definition CreatureData.h:218

References CLASS_CONTEXT_CLASS_TRAINER, GetCreatureTemplate(), Unit::GetLevel(), Player::IsClass(), CreatureTemplate::trainer_type, and TRAINER_TYPE_CLASS.

Referenced by WorldSession::HandleTalentWipeConfirmOpcode().

◆ IsCivilian()

◆ IsCombatMovementAllowed()

◆ IsDamageEnoughForLootingAndReward()

◆ IsDungeonBoss()

◆ isElite()

bool Creature::isElite ( ) const
inline
113 {
114 if (IsPet())
115 return false;
116
118 return rank != CREATURE_ELITE_NORMAL && rank != CREATURE_ELITE_RARE;
119 }
uint32 rank
Definition CreatureData.h:206

References CREATURE_ELITE_NORMAL, CREATURE_ELITE_RARE, GetCreatureTemplate(), Unit::IsPet(), and CreatureTemplate::rank.

Referenced by Spell::EffectSkinning(), and Acore::XP::Gain().

◆ IsEvadingAttacks()

bool Creature::IsEvadingAttacks ( ) const
inline

◆ IsFreeToMove()

bool Creature::IsFreeToMove ( )
946{
948 // Do not reposition ourself when we are not allowed to move
950 (GetMotionMaster()->GetCurrentMovementGeneratorType() != CHASE_MOTION_TYPE ||
951 moveFlags & MOVEMENTFLAG_SPLINE_ENABLED))
952 {
953 return false;
954 }
955
956 return true;
957}
@ MOVEMENTFLAG_SPLINE_ENABLED
Definition UnitDefines.h:392
bool IsCombatMovementAllowed() const
Definition Creature.h:433
bool IsMovementPreventedByCasting() const override
Definition Creature.cpp:3653
bool CanFreeMove() const
Definition Unit.h:1636
bool isMoving() const
Definition Unit.h:1622
MovementInfo m_movementInfo
Definition Object.h:680
uint32 GetMovementFlags() const
Definition Object.h:342

References Unit::CanFreeMove(), CHASE_MOTION_TYPE, Unit::GetMotionMaster(), MovementInfo::GetMovementFlags(), IsCombatMovementAllowed(), IsMovementPreventedByCasting(), Unit::isMoving(), WorldObject::m_movementInfo, and MOVEMENTFLAG_SPLINE_ENABLED.

Referenced by CreatureAI::MoveBackwardsChecks(), and CreatureAI::MoveCircleChecks().

◆ IsGuard()

bool Creature::IsGuard ( ) const
inline
@ CREATURE_FLAG_EXTRA_GUARD
Definition CreatureData.h:60

References CREATURE_FLAG_EXTRA_GUARD, and HasFlagsExtra().

Referenced by GuardAI::Permissible().

◆ IsImmunedToSpell()

bool Creature::IsImmunedToSpell ( SpellInfo const *  spellInfo,
Spell const *  spell = nullptr 
)
overridevirtual

Reimplemented from Unit.

2254{
2255 if (!spellInfo)
2256 return false;
2257
2258 if (spellInfo->HasAttribute(SPELL_ATTR0_CU_BYPASS_MECHANIC_IMMUNITY))
2259 {
2260 return false;
2261 }
2262
2263 // Xinef: this should exclude self casts...
2264 // Spells that don't have effectMechanics.
2265 if (spellInfo->Mechanic > MECHANIC_NONE && HasMechanicTemplateImmunity(1 << (spellInfo->Mechanic - 1)))
2266 return true;
2267
2268 // This check must be done instead of 'if (GetCreatureTemplate()->MechanicImmuneMask & (1 << (spellInfo->Mechanic - 1)))' for not break
2269 // the check of mechanic immunity on DB (tested) because GetCreatureTemplate()->MechanicImmuneMask and m_spellImmune[IMMUNITY_MECHANIC] don't have same data.
2270 bool immunedToAllEffects = true;
2271 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2272 if (spellInfo->Effects[i].IsEffect() && !IsImmunedToSpellEffect(spellInfo, i))
2273 {
2274 immunedToAllEffects = false;
2275 break;
2276 }
2277 if (immunedToAllEffects)
2278 return true;
2279
2280 return Unit::IsImmunedToSpell(spellInfo, spell);
2281}
#define MAX_SPELL_EFFECTS
Definition DBCStructure.h:1638
@ MECHANIC_NONE
Definition SharedDefines.h:1325
@ SPELL_ATTR0_CU_BYPASS_MECHANIC_IMMUNITY
Definition SpellInfo.h:208
bool HasMechanicTemplateImmunity(uint32 mask) const
Definition Creature.cpp:2218
bool IsImmunedToSpellEffect(SpellInfo const *spellInfo, uint32 index) const override
Definition Creature.cpp:2283
virtual bool IsImmunedToSpell(SpellInfo const *spellInfo, Spell const *spell=nullptr)
Definition Unit.cpp:13001

References SpellInfo::Effects, SpellInfo::HasAttribute(), HasMechanicTemplateImmunity(), Unit::IsImmunedToSpell(), IsImmunedToSpellEffect(), MAX_SPELL_EFFECTS, SpellInfo::Mechanic, MECHANIC_NONE, and SPELL_ATTR0_CU_BYPASS_MECHANIC_IMMUNITY.

◆ IsImmunedToSpellEffect()

bool Creature::IsImmunedToSpellEffect ( SpellInfo const *  spellInfo,
uint32  index 
) const
overridevirtual

Reimplemented from Unit.

Reimplemented in Totem.

2284{
2285 // Xinef: this should exclude self casts...
2286 if (spellInfo->Effects[index].Mechanic > MECHANIC_NONE && HasMechanicTemplateImmunity(1 << (spellInfo->Effects[index].Mechanic - 1)))
2287 return true;
2288
2289 if (GetCreatureTemplate()->type == CREATURE_TYPE_MECHANICAL && spellInfo->Effects[index].Effect == SPELL_EFFECT_HEAL)
2290 return true;
2291
2292 return Unit::IsImmunedToSpellEffect(spellInfo, index);
2293}
@ SPELL_EFFECT_HEAL
Definition SharedDefines.h:788
@ CREATURE_TYPE_MECHANICAL
Definition SharedDefines.h:2636
virtual bool IsImmunedToSpellEffect(SpellInfo const *spellInfo, uint32 index) const
Definition Unit.cpp:13091

References CREATURE_TYPE_MECHANICAL, SpellInfo::Effects, GetCreatureTemplate(), HasMechanicTemplateImmunity(), Unit::IsImmunedToSpellEffect(), MECHANIC_NONE, and SPELL_EFFECT_HEAL.

Referenced by IsImmunedToSpell(), and Totem::IsImmunedToSpellEffect().

◆ IsImmuneToKnockback()

bool Creature::IsImmuneToKnockback ( ) const
3187{
3188 if (GetOwnerGUID().IsPlayer())
3189 return false;
3190
3191 CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(GetEntry());
3193}
@ CREATURE_FLAG_EXTRA_IMMUNITY_KNOCKBACK
Definition CreatureData.h:75

References CREATURE_FLAG_EXTRA_IMMUNITY_KNOCKBACK, Object::GetEntry(), Unit::GetOwnerGUID(), CreatureTemplate::HasFlagsExtra(), Object::IsPlayer(), and sObjectMgr.

◆ IsInEvadeMode()

bool Creature::IsInEvadeMode ( ) const
inline

◆ IsInvisibleDueToDespawn()

bool Creature::IsInvisibleDueToDespawn ( ) const
overrideprotectedvirtual

Reimplemented from WorldObject.

1886{
1888 return true;
1889
1890 if (IsAlive() || isDying() || m_corpseRemoveTime > GameTime::GetGameTime().count())
1891 return false;
1892
1893 return true;
1894}
bool isDying() const
Definition Unit.h:1708
virtual bool IsInvisibleDueToDespawn() const
Definition Object.h:747

References GameTime::GetGameTime(), Unit::IsAlive(), Unit::isDying(), WorldObject::IsInvisibleDueToDespawn(), and m_corpseRemoveTime.

◆ IsLootRewardDisabled()

bool Creature::IsLootRewardDisabled ( ) const
inline
366{ return DisableLootReward; }

References DisableLootReward.

Referenced by Player::isAllowedToLoot(), and Unit::Kill().

◆ IsMoveInLineOfSightDisabled()

bool Creature::IsMoveInLineOfSightDisabled ( )
inline

◆ IsMoveInLineOfSightStrictlyDisabled()

bool Creature::IsMoveInLineOfSightStrictlyDisabled ( )
inline

◆ IsMovementPreventedByCasting()

bool Creature::IsMovementPreventedByCasting ( ) const
overridevirtual

Reimplemented from Unit.

3654{
3656 // first check if currently a movement allowed channel is active and we're not casting
3657 if (spell && spell->getState() != SPELL_STATE_FINISHED && spell->IsChannelActive() && spell->GetSpellInfo()->IsActionAllowedChannel())
3658 {
3659 return false;
3660 }
3661
3662 if (HasSpellFocus())
3663 {
3664 return true;
3665 }
3666
3668 {
3669 return true;
3670 }
3671
3672 return false;
3673}
@ SPELL_STATE_FINISHED
Definition Spell.h:229
@ UNIT_STATE_CASTING
Definition UnitDefines.h:185
@ CURRENT_CHANNELED_SPELL
Definition Unit.h:540
bool HasSpellFocus(Spell const *focusSpell=nullptr) const
Definition Creature.cpp:3585
bool IsActionAllowedChannel() const
Definition SpellInfo.cpp:1261
SpellInfo const * GetSpellInfo() const
Definition Spell.h:579
uint32 getState() const
Definition Spell.h:485
bool IsChannelActive() const
Definition Spell.h:558
Spell * m_currentSpells[CURRENT_MAX_SPELL]
Definition Unit.h:2078

References CURRENT_CHANNELED_SPELL, Spell::GetSpellInfo(), Spell::getState(), HasSpellFocus(), Unit::HasUnitState(), SpellInfo::IsActionAllowedChannel(), Spell::IsChannelActive(), Unit::m_currentSpells, SPELL_STATE_FINISHED, and UNIT_STATE_CASTING.

Referenced by WaypointMovementGenerator< Creature >::DoUpdate(), RandomMovementGenerator< T >::DoUpdate(), ChaseMovementGenerator< T >::DoUpdate(), FollowMovementGenerator< T >::DoUpdate(), IsFreeToMove(), and WaypointMovementGenerator< Creature >::StartMove().

◆ IsNotReachableAndNeedRegen()

bool Creature::IsNotReachableAndNeedRegen ( ) const
3697{
3698 if (CanNotReachTarget())
3699 {
3701 }
3702
3703 return false;
3704}
constexpr auto IN_MILLISECONDS
Definition Common.h:53
@ CONFIG_NPC_REGEN_TIME_IF_NOT_REACHABLE_IN_RAID
Definition WorldConfig.h:369

References CanNotReachTarget(), CONFIG_NPC_REGEN_TIME_IF_NOT_REACHABLE_IN_RAID, IN_MILLISECONDS, m_cannotReachTimer, and sWorld.

Referenced by Update().

◆ IsRacialLeader()

bool Creature::IsRacialLeader ( ) const
inline
bool RacialLeader
Definition CreatureData.h:241

References GetCreatureTemplate(), and CreatureTemplate::RacialLeader.

Referenced by Player::RewardHonor().

◆ isRegeneratingHealth()

bool Creature::isRegeneratingHealth ( )
inline

◆ IsReputationRewardDisabled()

bool Creature::IsReputationRewardDisabled ( ) const
inline

◆ IsRooted()

bool Creature::IsRooted ( ) const
inline

◆ IsSpellProhibited()

bool Creature::IsSpellProhibited ( SpellSchoolMask  idSchoolMask) const
2844{
2845 for (uint8 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i)
2846 {
2847 if (idSchoolMask & (1 << i))
2848 {
2850 {
2851 return true;
2852 }
2853 }
2854 }
2855
2856 return false;
2857}

References GameTime::GetGameTimeMS(), m_ProhibitSchoolTime, MAX_SPELL_SCHOOL, and SPELL_SCHOOL_NORMAL.

Referenced by CanCastSpell(), Spell::CheckCast(), and npc_pet_dk_ebon_gargoyle::UpdateAI().

◆ isTappedBy()

bool Creature::isTappedBy ( Player const *  player) const
1393{
1394 if (player->GetGUID() == m_lootRecipient)
1395 return true;
1396
1397 Group const* playerGroup = player->GetGroup();
1398 if (!playerGroup || playerGroup != GetLootRecipientGroup()) // if we dont have a group we arent the recipient
1399 return false; // if creature doesnt have group bound it means it was solo killed by someone else
1400
1401 return true;
1402}
Group * GetLootRecipientGroup() const
Definition Creature.cpp:1324
Definition Group.h:169

References Player::GetGroup(), Object::GetGUID(), GetLootRecipientGroup(), and m_lootRecipient.

Referenced by Unit::PatchValuesUpdate().

◆ IsTrigger()

◆ IsUpdateNeeded()

bool Creature::IsUpdateNeeded ( )
overridevirtual

Reimplemented from WorldObject.

3896{
3898 return true;
3899
3900 if (GetMap()->isCellMarked(GetCurrentCell().GetCellCoord().GetId()))
3901 return true;
3902
3903 if (IsInCombat())
3904 return true;
3905
3907 return true;
3908
3909 if (ToTempSummon())
3910 return true;
3911
3912 if (GetMotionMaster()->HasMovementGeneratorType(WAYPOINT_MOTION_TYPE))
3913 return true;
3914
3916 return true;
3917
3918 return false;
3919}
@ WAYPOINT_MOTION_TYPE
Definition MotionMaster.h:41
Cell const & GetCurrentCell() const
Definition Object.h:408
bool IsVisibilityOverridden() const
Definition Object.h:658
virtual bool IsUpdateNeeded()
Definition Object.cpp:3133
uint32 GetId(std::string const &username)
Definition AccountMgr.cpp:236

References MovableMapObject::GetCurrentCell(), WorldObject::GetMap(), Unit::GetMotionMaster(), Unit::HasUnitState(), Unit::IsInCombat(), WorldObject::IsUpdateNeeded(), WorldObject::IsVisibilityOverridden(), Unit::ToTempSummon(), UNIT_STATE_EVADE, and WAYPOINT_MOTION_TYPE.

◆ IsValidTrainerForPlayer()

bool Creature::IsValidTrainerForPlayer ( Player player,
uint32 npcFlags = nullptr 
) const
1277{
1278 if (!IsTrainer())
1279 {
1280 return false;
1281 }
1282
1284 {
1285 case TRAINER_TYPE_CLASS:
1286 case TRAINER_TYPE_PETS:
1288 {
1289 if (npcFlags)
1290 *npcFlags &= ~UNIT_NPC_FLAG_TRAINER_CLASS;
1291
1292 return false;
1293 }
1294 break;
1297 {
1298 return false;
1299 }
1300 break;
1303 {
1304 if (npcFlags)
1305 *npcFlags &= ~UNIT_NPC_FLAG_TRAINER_PROFESSION;
1306
1307 return false;
1308 }
1309 break;
1310 default:
1311 break;
1312 }
1313
1314 return true;
1315}
@ TRAINER_TYPE_TRADESKILLS
Definition SharedDefines.h:2619
@ TRAINER_TYPE_PETS
Definition SharedDefines.h:2620
@ TRAINER_TYPE_MOUNTS
Definition SharedDefines.h:2618
bool HasSpell(uint32 spell) const override
Definition Player.cpp:3904
bool IsTrainer() const
Definition Unit.h:754
uint8 getRace(bool original=false) const
Definition Unit.cpp:20865
uint32 trainer_spell
Definition CreatureData.h:219
uint32 trainer_class
Definition CreatureData.h:220
uint32 trainer_race
Definition CreatureData.h:221

References CLASS_CONTEXT_CLASS_TRAINER, Unit::getRace(), Player::HasSpell(), Player::IsClass(), Unit::IsTrainer(), m_creatureInfo, CreatureTemplate::trainer_class, CreatureTemplate::trainer_race, CreatureTemplate::trainer_spell, CreatureTemplate::trainer_type, TRAINER_TYPE_CLASS, TRAINER_TYPE_MOUNTS, TRAINER_TYPE_PETS, and TRAINER_TYPE_TRADESKILLS.

Referenced by Unit::PatchValuesUpdate().

◆ isVendorWithIconSpeak()

bool Creature::isVendorWithIconSpeak ( ) const
1699{
1701}
@ UNIT_NPC_FLAG_VENDOR
Definition UnitDefines.h:322
uint32 npcflag
Definition CreatureData.h:390
std::string IconName
Definition CreatureData.h:193

References CreatureTemplate::IconName, m_creatureData, m_creatureInfo, CreatureData::npcflag, and UNIT_NPC_FLAG_VENDOR.

◆ isWorldBoss()

◆ LoadCreatureFromDB()

bool Creature::LoadCreatureFromDB ( ObjectGuid::LowType  guid,
Map map,
bool  addToMap = true,
bool  allowDuplicate = false 
)
1704{
1705 if (!allowDuplicate)
1706 {
1707 // If an alive instance of this spawnId is already found, skip creation
1708 // If only dead instance(s) exist, despawn them and spawn a new (maybe also dead) version
1709 const auto creatureBounds = map->GetCreatureBySpawnIdStore().equal_range(spawnId);
1710 std::vector <Creature*> despawnList;
1711
1712 if (creatureBounds.first != creatureBounds.second)
1713 {
1714 for (auto itr = creatureBounds.first; itr != creatureBounds.second; ++itr)
1715 {
1716 if (itr->second->IsAlive())
1717 {
1718 LOG_DEBUG("maps", "Would have spawned {} but {} already exists", spawnId, creatureBounds.first->second->GetGUID().ToString());
1719 return false;
1720 }
1721 else
1722 {
1723 despawnList.push_back(itr->second);
1724 LOG_DEBUG("maps", "Despawned dead instance of spawn {} ({})", spawnId, itr->second->GetGUID().ToString());
1725 }
1726 }
1727
1728 for (Creature* despawnCreature : despawnList)
1729 {
1730 despawnCreature->AddObjectToRemoveList();
1731 }
1732 }
1733 }
1734
1735 CreatureData const* data = sObjectMgr->GetCreatureData(spawnId);
1736 if (!data)
1737 {
1738 LOG_ERROR("sql.sql", "Creature (SpawnId: {}) not found in table `creature`, can't load. ", spawnId);
1739 return false;
1740 }
1741
1742 // xinef: this has to be assigned before Create function, properly loads equipment id from DB
1743 m_creatureData = data;
1744 m_spawnId = spawnId;
1745
1746 // Add to world
1747 uint32 entry = GetRandomId(data->id1, data->id2, data->id3);
1748
1749 if (!Create(map->GenerateLowGuid<HighGuid::Unit>(), map, data->phaseMask, entry, 0, data->posX, data->posY, data->posZ, data->orientation, data))
1750 return false;
1751
1752 //We should set first home position, because then AI calls home movement
1753 SetHomePosition(data->posX, data->posY, data->posZ, data->orientation);
1754
1756
1759
1761 if (m_respawnTime) // respawn on Update
1762 {
1764 if (CanFly())
1765 {
1766 float tz = map->GetHeight(GetPhaseMask(), data->posX, data->posY, data->posZ, true, MAX_FALL_DISTANCE);
1767 if (data->posZ - tz > 0.1f && Acore::IsValidMapCoord(tz))
1768 {
1769 Relocate(data->posX, data->posY, tz);
1770 }
1771 }
1772 }
1773
1774 uint32 curhealth;
1775
1776 if (!m_regenHealth)
1777 {
1778 curhealth = data->curhealth;
1779 if (curhealth)
1780 {
1781 curhealth = uint32(curhealth * _GetHealthMod(GetCreatureTemplate()->rank));
1782 if (curhealth < 1)
1783 curhealth = 1;
1784 }
1785 SetPower(POWER_MANA, data->curmana);
1786 }
1787 else
1788 {
1789 curhealth = GetMaxHealth();
1791 }
1792
1793 SetHealth(m_deathState == DeathState::Alive ? curhealth : 0);
1794
1795 // checked at creature_template loading
1797
1798 if (addToMap && !GetMap()->AddToMap(this))
1799 return false;
1800 return true;
1801}
#define MAX_FALL_DISTANCE
Definition GridTerrainData.h:28
@ POWER_MANA
Definition SharedDefines.h:269
void SetHomePosition(float x, float y, float z, float o)
Definition Creature.h:340
static float _GetHealthMod(int32 Rank)
Definition Creature.cpp:1584
bool Create(ObjectGuid::LowType guidlow, Map *map, uint32 phaseMask, uint32 Entry, uint32 vehId, float x, float y, float z, float ang, const CreatureData *data=nullptr)
Definition Creature.cpp:1136
uint32 GetRandomId(uint32 id1, uint32 id2, uint32 id3)
Definition Creature.cpp:3760
float GetHeight(float x, float y, float z, bool checkVMap=true, float maxSearchDist=DEFAULT_HEIGHT_SEARCH) const
Definition Map.cpp:1113
time_t GetCreatureRespawnTime(ObjectGuid::LowType dbGuid) const
Definition Map.h:410
ObjectGuid::LowType GenerateLowGuid()
Definition Map.h:477
void SetPower(Powers power, uint32 val, bool withPowerUpdate=true, bool fromRegenerate=false)
Definition Unit.cpp:15658
uint32 GetMaxHealth() const
Definition Unit.h:1032
DeathState m_deathState
Definition Unit.h:2067
void SetHealth(uint32 val)
Definition Unit.cpp:15570
uint32 GetMaxPower(Powers power) const
Definition Unit.h:1059
bool IsValidMapCoord(float c)
Definition GridDefines.h:206
float wander_distance
Definition CreatureData.h:384
uint32 phaseMask
Definition CreatureData.h:376
uint32 spawntimesecs
Definition CreatureData.h:383
uint8 movementType
Definition CreatureData.h:388
uint32 id2
Definition CreatureData.h:373
uint32 curhealth
Definition CreatureData.h:386
float orientation
Definition CreatureData.h:382
uint32 curmana
Definition CreatureData.h:387
uint32 id3
Definition CreatureData.h:374
float posY
Definition CreatureData.h:380
float posX
Definition CreatureData.h:379
float posZ
Definition CreatureData.h:381
uint32 id1
Definition CreatureData.h:372

References _GetHealthMod(), Alive, CanFly(), Create(), CreatureData::curhealth, CreatureData::curmana, Dead, Map::GenerateLowGuid(), Map::GetCreatureBySpawnIdStore(), Map::GetCreatureRespawnTime(), GetCreatureTemplate(), Map::GetHeight(), WorldObject::GetMap(), Unit::GetMaxHealth(), Unit::GetMaxPower(), WorldObject::GetPhaseMask(), GetRandomId(), CreatureData::id1, CreatureData::id2, CreatureData::id3, Acore::IsValidMapCoord(), LOG_DEBUG, LOG_ERROR, m_creatureData, Unit::m_deathState, m_defaultMovementType, m_regenHealth, m_respawnDelay, m_respawnTime, m_spawnId, m_wanderDistance, MAX_FALL_DISTANCE, CreatureData::movementType, CreatureData::orientation, CreatureData::phaseMask, CreatureData::posX, CreatureData::posY, CreatureData::posZ, POWER_MANA, Position::Relocate(), Unit::SetHealth(), SetHomePosition(), Unit::SetPower(), sObjectMgr, CreatureData::spawntimesecs, Unit, and CreatureData::wander_distance.

Referenced by ObjectMgr::AddCreData(), MotionTransport::CreateNPCPassenger(), GameEventMgr::GameEventSpawn(), npc_commandscript::HandleNpcAddCommand(), wp_commandscript::HandleWpModifyCommand(), wp_commandscript::HandleWpShowCommand(), LoadFromDB(), and UpdateCreatureHalaa().

◆ LoadCreaturesAddon()

bool Creature::LoadCreaturesAddon ( bool  reload = false)

Suspected correlation between UNIT_FIELD_BYTES_1, offset 3, value 0x2: If no inhabittype_fly (if no MovementFlag_DisableGravity or MovementFlag_CanFly flag found in sniffs) Check using InhabitType as movement flags are assigned dynamically basing on whether the creature is in air or not Set MovementFlag_Hover. Otherwise do nothing.

2718{
2719 CreatureAddon const* cainfo = GetCreatureAddon();
2720 if (!cainfo)
2721 return false;
2722
2723 if (cainfo->mount != 0)
2724 Mount(cainfo->mount);
2725
2726 if (cainfo->bytes1 != 0)
2727 {
2728 // 0 StandState
2729 // 1 FreeTalentPoints Pet only, so always 0 for default creature
2730 // 2 StandFlags
2731 // 3 StandMiscFlags
2732
2734 //SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_PET_TALENTS, uint8((cainfo->bytes1 >> 8) & 0xFF));
2738
2744 if (CanHover())
2746 }
2747
2748 if (cainfo->bytes2 != 0)
2749 {
2750 // 0 SheathState
2751 // 1 Bytes2Flags
2752 // 2 UnitRename Pet only, so always 0 for default creature
2753 // 3 ShapeshiftForm Must be determined/set by shapeshift spell/aura
2754
2755 SetByteValue(UNIT_FIELD_BYTES_2, 0, uint8(cainfo->bytes2 & 0xFF));
2756 //SetByteValue(UNIT_FIELD_BYTES_2, 1, uint8((cainfo->bytes2 >> 8) & 0xFF));
2757 //SetByteValue(UNIT_FIELD_BYTES_2, 2, uint8((cainfo->bytes2 >> 16) & 0xFF));
2759 //SetByteValue(UNIT_FIELD_BYTES_2, 3, uint8((cainfo->bytes2 >> 24) & 0xFF));
2761 }
2762
2764
2765 // Check if visibility distance different
2767 {
2769 }
2770
2771 //Load Path
2772 if (cainfo->path_id != 0)
2773 m_path_id = cainfo->path_id;
2774
2775 if (!cainfo->auras.empty())
2776 {
2777 for (std::vector<uint32>::const_iterator itr = cainfo->auras.begin(); itr != cainfo->auras.end(); ++itr)
2778 {
2779 SpellInfo const* AdditionalSpellInfo = sSpellMgr->GetSpellInfo(*itr);
2780 if (!AdditionalSpellInfo)
2781 {
2782 LOG_ERROR("sql.sql", "Creature ({}) has wrong spell {} defined in `auras` field.", GetGUID().ToString(), *itr);
2783 continue;
2784 }
2785
2786 // skip already applied aura
2787 if (HasAura(*itr))
2788 {
2789 if (!reload)
2790 LOG_ERROR("sql.sql", "Creature ({}) has duplicate aura (spell {}) in `auras` field.", GetGUID().ToString(), *itr);
2791
2792 continue;
2793 }
2794
2795 AddAura(*itr, this);
2796 LOG_DEBUG("entities.unit", "Spell: {} added to creature ({})", *itr, GetGUID().ToString());
2797 }
2798 }
2799
2800 return true;
2801}
@ MOVEMENTFLAG_HOVER
Definition UnitDefines.h:395
@ UNIT_BYTES_1_OFFSET_ANIM_TIER
Definition UnitDefines.h:26
@ UNIT_BYTES_1_OFFSET_PET_TALENTS
Definition UnitDefines.h:24
@ UNIT_BYTES_1_OFFSET_STAND_STATE
Definition UnitDefines.h:23
@ UNIT_BYTES_1_OFFSET_VIS_FLAG
Definition UnitDefines.h:25
@ UNIT_NPC_EMOTESTATE
Definition UpdateFields.h:140
@ UNIT_FIELD_BYTES_1
Definition UpdateFields.h:131
@ UNIT_FIELD_BYTES_2
Definition UpdateFields.h:161
bool CanHover() const
Definition Creature.h:83
CreatureAddon const * GetCreatureAddon() const
Definition Creature.cpp:2704
Aura * AddAura(uint32 spellId, Unit *target)
Definition Unit.cpp:18951
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition Unit.cpp:5777
void Mount(uint32 mount, uint32 vehicleId=0, uint32 creatureEntry=0)
Definition Unit.cpp:13550
void AddUnitMovementFlag(uint32 f)
Definition Unit.h:727
void SetUInt32Value(uint16 index, uint32 value)
Definition Unit.cpp:21181
void SetVisibilityDistanceOverride(VisibilityDistanceType type)
Definition Object.cpp:1113
std::vector< uint32 > auras
Definition CreatureData.h:446
uint32 mount
Definition CreatureData.h:442
uint32 emote
Definition CreatureData.h:445
uint32 path_id
Definition CreatureData.h:441
VisibilityDistanceType visibilityDistanceType
Definition CreatureData.h:447
uint32 bytes1
Definition CreatureData.h:443
uint32 bytes2
Definition CreatureData.h:444

References Unit::AddAura(), Unit::AddUnitMovementFlag(), CreatureAddon::auras, CreatureAddon::bytes1, CreatureAddon::bytes2, CanHover(), CreatureAddon::emote, GetCreatureAddon(), Object::GetGUID(), Unit::HasAura(), LOG_DEBUG, LOG_ERROR, m_path_id, CreatureAddon::mount, Unit::Mount(), MOVEMENTFLAG_HOVER, Normal, CreatureAddon::path_id, Object::SetByteValue(), Unit::SetUInt32Value(), WorldObject::SetVisibilityDistanceOverride(), sSpellMgr, Position::ToString(), UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTES_1_OFFSET_PET_TALENTS, UNIT_BYTES_1_OFFSET_STAND_STATE, UNIT_BYTES_1_OFFSET_VIS_FLAG, UNIT_FIELD_BYTES_1, UNIT_FIELD_BYTES_2, UNIT_NPC_EMOTESTATE, and CreatureAddon::visibilityDistanceType.

Referenced by CreatureAI::_EnterEvadeMode(), Create(), HomeMovementGenerator< Creature >::DoFinalize(), boss_doomrel::boss_doomrelAI::EnterEvadeMode(), npc_pos_freed_slave::npc_pos_freed_slaveAI::EnterEvadeMode(), npc_pet_hunter_snake_trap::EnterEvadeMode(), boss_urom::boss_uromAI::LeaveCombat(), boss_valithria_dreamwalker::boss_valithria_dreamwalkerAI::Reset(), npc_valithria_cloud::npc_valithria_cloudAI::Reset(), and setDeathState().

◆ LoadEquipment()

void Creature::LoadEquipment ( int8  id = 1,
bool  force = false 
)
1810{
1811 if (id == 0)
1812 {
1813 if (force)
1814 {
1815 for (uint8 i = 0; i < MAX_EQUIPMENT_ITEMS; ++i)
1817 m_equipmentId = 0;
1818 }
1819 return;
1820 }
1821
1822 EquipmentInfo const* einfo = sObjectMgr->GetEquipmentInfo(GetEntry(), id);
1823 if (!einfo)
1824 return;
1825
1826 m_equipmentId = id;
1827 for (uint8 i = 0; i < 3; ++i)
1829}
#define MAX_EQUIPMENT_ITEMS
Definition CreatureData.h:35
Definition CreatureData.h:360
uint32 ItemEntry[MAX_EQUIPMENT_ITEMS]
Definition CreatureData.h:361

References Object::GetEntry(), EquipmentInfo::ItemEntry, m_equipmentId, MAX_EQUIPMENT_ITEMS, Unit::SetUInt32Value(), sObjectMgr, and UNIT_VIRTUAL_ITEM_SLOT_ID.

Referenced by boss_thekal::CheckPhaseTransition(), boss_leotheras_the_blind::DemonTime(), boss_twinemperorsAI::DoAction(), boss_leotheras_the_blind::DoAction(), boss_illidan_stormrage::DoAction(), spell_marli_transform::HandleApply(), spell_boss_magus_telestra_summon_telestra_clones_aura::HandleApply(), spell_marli_transform::HandleRemove(), spell_boss_magus_telestra_summon_telestra_clones_aura::HandleRemove(), spell_death_knight_initiate_visual::HandleScriptEffect(), InitEntry(), boss_swamplord_muselek::JustEngagedWith(), boss_pathaleon_the_calculator::JustEngagedWith(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::JustRespawned(), npc_unworthy_initiate::npc_unworthy_initiateAI::MovementInform(), npc_koltira_deathweaver::npc_koltira_deathweaverAI::MovementInform(), boss_illidan_stormrage::MovementInform(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnCreatureCreate(), spell_illidan_demon_transform1_aura::OnPeriodic(), spell_illidan_demon_transform2_aura::OnPeriodic(), boss_mr_smite::boss_mr_smiteAI::Reset(), npc_unworthy_initiate::npc_unworthy_initiateAI::Reset(), boss_thekal::Reset(), boss_ingvar_the_plunderer::Reset(), boss_illidan_stormrage::Reset(), boss_pathaleon_the_calculator::Reset(), Respawn(), ScriptedAI::SetEquipmentSlots(), boss_mr_smite::boss_mr_smiteAI::UpdateAI(), npc_partygoer_pather::UpdateAI(), npc_partygoer::UpdateAI(), npc_forest_frog::UpdateAI(), boss_svala::boss_svalaAI::UpdateAI(), and npc_tirions_gambit_tirion::npc_tirions_gambit_tirionAI::UpdateEscortAI().

◆ LoadFromDB()

bool Creature::LoadFromDB ( ObjectGuid::LowType  guid,
Map map,
bool  allowDuplicate = false 
)
inline
223{ return LoadCreatureFromDB(guid, map, false, allowDuplicate); }
bool LoadCreatureFromDB(ObjectGuid::LowType guid, Map *map, bool addToMap=true, bool allowDuplicate=false)
Definition Creature.cpp:1703

References LoadCreatureFromDB().

Referenced by GridObjectLoader::LoadCreatures().

◆ LoadPath()

◆ LoadSparringPct()

void Creature::LoadSparringPct ( )
2804{
2805 ObjectGuid::LowType spawnId = GetSpawnId();
2806 auto const& sparringData = sObjectMgr->GetSparringData();
2807
2808 auto itr = sparringData.find(spawnId);
2809 if (itr != sparringData.end() && !itr->second.empty())
2810 {
2811 _sparringPct = itr->second[0];
2812 }
2813}
uint32 LowType
Definition ObjectGuid.h:122

References _sparringPct, GetSpawnId(), and sObjectMgr.

Referenced by Create(), setDeathState(), and UpdateEntry().

◆ LoadSpellTemplateImmunity()

void Creature::LoadSpellTemplateImmunity ( )
2224{
2225 // uint32 max used for "spell id", the immunity system will not perform SpellInfo checks against invalid spells
2226 // used so we know which immunities were loaded from template
2227 static uint32 const placeholderSpellId = std::numeric_limits<uint32>::max();
2228
2229 // unapply template immunities (in case we're updating entry)
2230 for (uint8 i = SPELL_SCHOOL_NORMAL; i <= SPELL_SCHOOL_ARCANE; ++i)
2231 {
2232 ApplySpellImmune(placeholderSpellId, IMMUNITY_SCHOOL, i, false);
2233 }
2234
2235 // don't inherit immunities for hunter pets
2236 if (GetOwnerGUID().IsPlayer() && IsHunterPet())
2237 {
2238 return;
2239 }
2240
2241 if (uint8 mask = GetCreatureTemplate()->SpellSchoolImmuneMask)
2242 {
2243 for (uint8 i = SPELL_SCHOOL_NORMAL; i <= SPELL_SCHOOL_ARCANE; ++i)
2244 {
2245 if (mask & (1 << i))
2246 {
2247 ApplySpellImmune(placeholderSpellId, IMMUNITY_SCHOOL, 1 << i, true);
2248 }
2249 }
2250 }
2251}
@ SPELL_SCHOOL_ARCANE
Definition SharedDefines.h:289
@ IMMUNITY_SCHOOL
Definition SharedDefines.h:1396
bool IsHunterPet() const
Definition Unit.h:748
void ApplySpellImmune(uint32 spellId, uint32 op, uint32 type, bool apply, SpellImmuneBlockType blockType=SPELL_BLOCK_TYPE_ALL)
Definition Unit.cpp:13474

References Unit::ApplySpellImmune(), GetCreatureTemplate(), Unit::GetOwnerGUID(), IMMUNITY_SCHOOL, Unit::IsHunterPet(), Object::IsPlayer(), SPELL_SCHOOL_ARCANE, and SPELL_SCHOOL_NORMAL.

Referenced by UpdateEntry().

◆ LowerPlayerDamageReq()

void Creature::LowerPlayerDamageReq ( uint32  unDamage,
bool  damagedByPlayer = true 
)
3832{
3833 if (_playerDamageReq)
3834 _playerDamageReq > unDamage ? _playerDamageReq -= unDamage : _playerDamageReq = 0;
3835
3836 if (!_damagedByPlayer)
3837 {
3838 _damagedByPlayer = damagedByPlayer;
3839 }
3840}

References _damagedByPlayer, and _playerDamageReq.

Referenced by boss_viscidus::boss_viscidus(), boss_viscidus::DamageTaken(), boss_buru::DamageTaken(), boss_twinemperorsAI::DamageTaken(), npc_artorius::npc_artoriusAI::DamageTaken(), npc_franklin::npc_franklinAI::DamageTaken(), npc_heated_battle::npc_heated_battleAI::DamageTaken(), boss_kologarn::boss_kologarnAI::DamageTaken(), Unit::DealDamage(), boss_xt002::boss_xt002AI::DoAction(), boss_yoggsaron::boss_yoggsaronAI::DoAction(), boss_ichoron::boss_ichoronAI::DoAction(), Spell::DoAllEffectOnTarget(), misc_commandscript::HandleDamageCommand(), misc_commandscript::HandleDieCommand(), boss_valithria_dreamwalker::boss_valithria_dreamwalkerAI::HealReceived(), 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(), npc_dirt_mound::JustSummoned(), boss_drakkari_colossus::boss_drakkari_colossusAI::JustSummoned(), boss_viscidus::SummonedCreatureDies(), npc_boneguard_footman::npc_boneguard_footmanAI::UpdateAI(), and npc_target_dummy::npc_target_dummyAI::UpdateAI().

◆ ModifyThreatPercentTemp()

void Creature::ModifyThreatPercentTemp ( Unit victim,
int32  percent,
Milliseconds  duration 
)
3811{
3812 if (victim)
3813 {
3814 float currentThreat = GetThreatMgr().GetThreat(victim);
3815
3816 if (percent != 0.0f)
3817 {
3818 GetThreatMgr().ModifyThreatByPercent(victim, percent);
3819 }
3820
3821 TemporaryThreatModifierEvent* pEvent = new TemporaryThreatModifierEvent(*this, victim->GetGUID(), currentThreat);
3822 m_Events.AddEvent(pEvent, m_Events.CalculateTime(duration.count()));
3823 }
3824}
Definition Creature.h:561
float GetThreat(Unit *victim, bool alsoSearchOfflineList=false)
Definition ThreatMgr.cpp:525
void ModifyThreatByPercent(Unit *victim, int32 percent)
Definition ThreatMgr.cpp:508
ThreatMgr & GetThreatMgr()
Definition Unit.h:898

References EventProcessor::AddEvent(), EventProcessor::CalculateTime(), Object::GetGUID(), ThreatMgr::GetThreat(), Unit::GetThreatMgr(), WorldObject::m_Events, and ThreatMgr::ModifyThreatByPercent().

◆ Motion_Initialize()

void Creature::Motion_Initialize ( )
1122{
1123 if (!m_formation)
1125 else if (m_formation->GetLeader() == this)
1126 {
1127 m_formation->FormationReset(false, true);
1129 }
1130 else if (m_formation->IsFormed())
1131 GetMotionMaster()->MoveIdle(); //wait the order of leader
1132 else
1134}
Creature * GetLeader() const
Definition CreatureGroups.h:99
void FormationReset(bool dismiss, bool initMotionMaster)
Definition CreatureGroups.cpp:323
bool IsFormed() const
Definition CreatureGroups.h:103
void Initialize()
Definition MotionMaster.cpp:73
void MoveIdle()
Definition MotionMaster.cpp:232

References CreatureGroup::FormationReset(), CreatureGroup::GetLeader(), Unit::GetMotionMaster(), MotionMaster::Initialize(), CreatureGroup::IsFormed(), m_formation, and MotionMaster::MoveIdle().

Referenced by AddToWorld(), Pet::AddToWorld(), and setDeathState().

◆ ProhibitSpellSchool()

void Creature::ProhibitSpellSchool ( SpellSchoolMask  idSchoolMask,
uint32  unTimeMs 
)
overridevirtual

Reimplemented from Unit.

2833{
2834 for (uint8 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i)
2835 {
2836 if (idSchoolMask & (1 << i))
2837 {
2838 m_ProhibitSchoolTime[i] = GameTime::GetGameTimeMS().count() + unTimeMs;
2839 }
2840 }
2841}

References GameTime::GetGameTimeMS(), m_ProhibitSchoolTime, MAX_SPELL_SCHOOL, and SPELL_SCHOOL_NORMAL.

◆ reachWithSpellAttack()

SpellInfo const * Creature::reachWithSpellAttack ( Unit victim)
2296{
2297 if (!victim)
2298 return nullptr;
2299
2300 for (uint32 i = 0; i < MAX_CREATURE_SPELLS; ++i)
2301 {
2302 if (!m_spells[i])
2303 continue;
2304 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(m_spells[i]);
2305 if (!spellInfo)
2306 {
2307 LOG_ERROR("entities.unit", "WORLD: unknown spell id {}", m_spells[i]);
2308 continue;
2309 }
2310
2311 bool bcontinue = true;
2312 for (uint32 j = 0; j < MAX_SPELL_EFFECTS; j++)
2313 {
2314 if ((spellInfo->Effects[j].Effect == SPELL_EFFECT_SCHOOL_DAMAGE) ||
2315 (spellInfo->Effects[j].Effect == SPELL_EFFECT_INSTAKILL) ||
2316 (spellInfo->Effects[j].Effect == SPELL_EFFECT_ENVIRONMENTAL_DAMAGE) ||
2317 (spellInfo->Effects[j].Effect == SPELL_EFFECT_HEALTH_LEECH)
2318 )
2319 {
2320 bcontinue = false;
2321 break;
2322 }
2323 }
2324 if (bcontinue)
2325 continue;
2326
2327 if (spellInfo->ManaCost > GetPower(POWER_MANA))
2328 continue;
2329 float range = spellInfo->GetMaxRange(false);
2330 float minrange = spellInfo->GetMinRange(false);
2331 float dist = GetDistance(victim);
2332 if (dist > range || dist < minrange)
2333 continue;
2335 continue;
2337 continue;
2338 return spellInfo;
2339 }
2340 return nullptr;
2341}
@ SPELL_EFFECT_HEALTH_LEECH
Definition SharedDefines.h:787
@ SPELL_EFFECT_ENVIRONMENTAL_DAMAGE
Definition SharedDefines.h:785
@ SPELL_EFFECT_SCHOOL_DAMAGE
Definition SharedDefines.h:780
@ SPELL_EFFECT_INSTAKILL
Definition SharedDefines.h:779
@ SPELL_PREVENTION_TYPE_SILENCE
Definition SharedDefines.h:1554
@ SPELL_PREVENTION_TYPE_PACIFY
Definition SharedDefines.h:1555
@ UNIT_FLAG_PACIFIED
Definition UnitDefines.h:267
uint32 PreventionType
Definition SpellInfo.h:390
float GetMinRange(bool positive=false) const
Definition SpellInfo.cpp:2326
std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > Effects
Definition SpellInfo.h:393
float GetMaxRange(bool positive=false, Unit *caster=nullptr, Spell *spell=nullptr) const
Definition SpellInfo.cpp:2335
uint32 ManaCost
Definition SpellInfo.h:363
float GetDistance(WorldObject const *obj) const
Definition Object.cpp:1241

References SpellInfo::Effects, WorldObject::GetDistance(), SpellInfo::GetMaxRange(), SpellInfo::GetMinRange(), Unit::GetPower(), Unit::HasUnitFlag(), LOG_ERROR, m_spells, SpellInfo::ManaCost, MAX_CREATURE_SPELLS, MAX_SPELL_EFFECTS, POWER_MANA, SpellInfo::PreventionType, SPELL_EFFECT_ENVIRONMENTAL_DAMAGE, SPELL_EFFECT_HEALTH_LEECH, SPELL_EFFECT_INSTAKILL, SPELL_EFFECT_SCHOOL_DAMAGE, SPELL_PREVENTION_TYPE_PACIFY, SPELL_PREVENTION_TYPE_SILENCE, sSpellMgr, UNIT_FLAG_PACIFIED, and UNIT_FLAG_SILENCED.

◆ reachWithSpellCure()

SpellInfo const * Creature::reachWithSpellCure ( Unit victim)
2344{
2345 if (!victim)
2346 return nullptr;
2347
2348 for (uint32 i = 0; i < MAX_CREATURE_SPELLS; ++i)
2349 {
2350 if (!m_spells[i])
2351 continue;
2352 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(m_spells[i]);
2353 if (!spellInfo)
2354 {
2355 LOG_ERROR("entities.unit", "WORLD: unknown spell id {}", m_spells[i]);
2356 continue;
2357 }
2358
2359 bool bcontinue = true;
2360 for (uint32 j = 0; j < MAX_SPELL_EFFECTS; j++)
2361 {
2362 if ((spellInfo->Effects[j].Effect == SPELL_EFFECT_HEAL))
2363 {
2364 bcontinue = false;
2365 break;
2366 }
2367 }
2368 if (bcontinue)
2369 continue;
2370
2371 if (spellInfo->ManaCost > GetPower(POWER_MANA))
2372 continue;
2373
2374 float range = spellInfo->GetMaxRange(true);
2375 float minrange = spellInfo->GetMinRange(true);
2376 float dist = GetDistance(victim);
2377
2378 if (dist > range || dist < minrange)
2379 continue;
2381 continue;
2383 continue;
2384 return spellInfo;
2385 }
2386 return nullptr;
2387}

References SpellInfo::Effects, WorldObject::GetDistance(), SpellInfo::GetMaxRange(), SpellInfo::GetMinRange(), Unit::GetPower(), Unit::HasUnitFlag(), LOG_ERROR, m_spells, SpellInfo::ManaCost, MAX_CREATURE_SPELLS, MAX_SPELL_EFFECTS, POWER_MANA, SpellInfo::PreventionType, SPELL_EFFECT_HEAL, SPELL_PREVENTION_TYPE_PACIFY, SPELL_PREVENTION_TYPE_SILENCE, sSpellMgr, UNIT_FLAG_PACIFIED, and UNIT_FLAG_SILENCED.

◆ RefreshSwimmingFlag()

void Creature::RefreshSwimmingFlag ( bool  recheck = false)
3295{
3296 if (!_isMissingSwimmingFlagOutOfCombat || recheck)
3298
3299 // Check if the creature has UNIT_FLAG_SWIMMING and add it if it's missing
3300 // Creatures must be able to chase a target in water if they can enter water
3303}
@ UNIT_FLAG_SWIMMING
Definition UnitDefines.h:265
bool CanEnterWater() const override
Definition Creature.cpp:3286

References _isMissingSwimmingFlagOutOfCombat, CanEnterWater(), Unit::HasUnitFlag(), Unit::SetUnitFlag(), and UNIT_FLAG_SWIMMING.

◆ Regenerate()

void Creature::Regenerate ( Powers  power)
protected
960{
961 uint32 curValue = GetPower(power);
962 uint32 maxValue = GetMaxPower(power);
963
964 // Xinef: implement power regeneration flag
966 return;
967
968 if (!m_regenPower)
969 {
970 return;
971 }
972
973 if (curValue >= maxValue)
974 return;
975
976 float addvalue = 0.0f;
977
978 switch (power)
979 {
980 case POWER_FOCUS:
981 {
982 // For hunter pets.
983 addvalue = 24 * sWorld->getRate(RATE_POWER_FOCUS);
984 break;
985 }
986 case POWER_ENERGY:
987 {
988 // For deathknight's ghoul.
989 addvalue = 20;
990 break;
991 }
992 case POWER_MANA:
993 {
994 // Combat and any controlled creature
996 {
998 {
999 addvalue = uint32((GetStat(STAT_SPIRIT) / (IsUnderLastManaUseEffect() ? 8.0f : 5.0f) + 17.0f));
1000 }
1001 else if (!IsUnderLastManaUseEffect())
1002 {
1003 float ManaIncreaseRate = sWorld->getRate(RATE_POWER_MANA);
1004 float Spirit = GetStat(STAT_SPIRIT);
1005
1006 addvalue = uint32((Spirit / 5.0f + 17.0f) * ManaIncreaseRate);
1007 }
1008 }
1009 else
1010 addvalue = maxValue / 3;
1011 break;
1012 }
1013 default:
1014 return;
1015 }
1016
1017 // Apply modifiers (if any).
1019 for (AuraEffectList::const_iterator i = ModPowerRegenPCTAuras.begin(); i != ModPowerRegenPCTAuras.end(); ++i)
1020 if (Powers((*i)->GetMiscValue()) == power)
1021 AddPct(addvalue, (*i)->GetAmount());
1022
1024
1025 ModifyPower(power, int32(addvalue));
1026}
constexpr Milliseconds PET_FOCUS_REGEN_INTERVAL
Definition CreatureData.h:37
@ NPC_WATER_ELEMENTAL_TEMP
Definition PetDefines.h:104
@ NPC_IMP
Definition PetDefines.h:95
@ NPC_WATER_ELEMENTAL_PERM
Definition PetDefines.h:106
Powers
Definition SharedDefines.h:268
@ POWER_ENERGY
Definition SharedDefines.h:272
@ POWER_FOCUS
Definition SharedDefines.h:271
@ STAT_SPIRIT
Definition SharedDefines.h:262
@ SPELL_AURA_MOD_POWER_REGEN
Definition SpellAuraDefines.h:148
@ SPELL_AURA_MOD_POWER_REGEN_PERCENT
Definition SpellAuraDefines.h:173
@ UNIT_FLAG2_REGENERATE_POWER
Definition UnitDefines.h:299
T AddPct(T &base, U pct)
Definition Util.h:67
@ RATE_POWER_MANA
Definition WorldConfig.h:383
@ RATE_POWER_FOCUS
Definition WorldConfig.h:388
int32 ModifyPower(Powers power, int32 val, bool withPowerUpdate=true)
Definition Unit.cpp:14241
bool IsUnderLastManaUseEffect() const
Definition Unit.cpp:17317
AuraEffectList const & GetAuraEffectsByType(AuraType type) const
Definition Unit.h:1351
std::vector< AuraEffect * > AuraEffectList
Definition Unit.h:636
bool HasUnitFlag2(UnitFlags2 flags) const
Definition Unit.h:708
int32 GetTotalAuraModifierByMiscValue(AuraType auratype, int32 misc_value) const
Definition Unit.cpp:6101

References AddPct(), CREATURE_REGEN_INTERVAL, Unit::GetAuraEffectsByType(), Unit::GetCharmerOrOwnerGUID(), Object::GetEntry(), Unit::GetMaxPower(), Unit::GetOwnerGUID(), Unit::GetPower(), Unit::GetStat(), Unit::GetTotalAuraModifierByMiscValue(), Unit::HasUnitFlag2(), IN_MILLISECONDS, Unit::IsInCombat(), Object::IsPlayer(), Unit::IsUnderLastManaUseEffect(), m_regenPower, Unit::ModifyPower(), NPC_IMP, NPC_WATER_ELEMENTAL_PERM, NPC_WATER_ELEMENTAL_TEMP, PET_FOCUS_REGEN_INTERVAL, POWER_ENERGY, POWER_FOCUS, POWER_MANA, RATE_POWER_FOCUS, RATE_POWER_MANA, SPELL_AURA_MOD_POWER_REGEN, SPELL_AURA_MOD_POWER_REGEN_PERCENT, STAT_SPIRIT, sWorld, and UNIT_FLAG2_REGENERATE_POWER.

Referenced by Pet::Update(), and Update().

◆ RegenerateHealth()

void Creature::RegenerateHealth ( )
protected
1029{
1030 if (!isRegeneratingHealth())
1031 return;
1032
1033 uint32 curValue = GetHealth();
1034 uint32 maxValue = GetMaxHealth();
1035
1036 if (curValue >= maxValue)
1037 return;
1038
1039 uint32 addvalue = 0;
1040
1041 // Not only pet, but any controlled creature
1042 // Xinef: fix polymorph rapid regen
1044 addvalue = maxValue / 3;
1045 else //if (GetCharmerOrOwnerGUID())
1046 {
1047 float HealthIncreaseRate = sWorld->getRate(RATE_HEALTH);
1048 float Spirit = GetStat(STAT_SPIRIT);
1049
1050 if (GetPower(POWER_MANA) > 0)
1051 addvalue = uint32(Spirit * 0.25 * HealthIncreaseRate);
1052 else
1053 addvalue = uint32(Spirit * 0.80 * HealthIncreaseRate);
1054 }
1055
1056 // Apply modifiers (if any).
1058 for (AuraEffectList::const_iterator i = ModPowerRegenPCTAuras.begin(); i != ModPowerRegenPCTAuras.end(); ++i)
1059 AddPct(addvalue, (*i)->GetAmount());
1060
1062
1063 ModifyHealth(addvalue);
1064}
@ SPELL_AURA_MOD_HEALTH_REGEN_PERCENT
Definition SpellAuraDefines.h:151
@ SPELL_AURA_MOD_REGEN
Definition SpellAuraDefines.h:147
@ RATE_HEALTH
Definition WorldConfig.h:382
bool isRegeneratingHealth()
Definition Creature.h:321
int32 ModifyHealth(int32 val)
Definition Unit.cpp:14183
bool IsPolymorphed() const
Definition Unit.cpp:16815
uint32 GetHealth() const
Definition Unit.h:1031

References AddPct(), CREATURE_REGEN_INTERVAL, Unit::GetAuraEffectsByType(), Unit::GetCharmerOrOwnerGUID(), Unit::GetHealth(), Unit::GetMaxHealth(), Unit::GetPower(), Unit::GetStat(), Unit::GetTotalAuraModifier(), IN_MILLISECONDS, Unit::IsPolymorphed(), isRegeneratingHealth(), Unit::ModifyHealth(), POWER_MANA, RATE_HEALTH, SPELL_AURA_MOD_HEALTH_REGEN_PERCENT, SPELL_AURA_MOD_REGEN, STAT_SPIRIT, and sWorld.

Referenced by Update().

◆ ReleaseFocus()

void Creature::ReleaseFocus ( Spell const *  focusSpell)
3596{
3597 // focused to something else
3598 if (focusSpell != _focusSpell)
3599 return;
3600
3601 _focusSpell = nullptr;
3602 if (Unit* victim = GetVictim())
3603 SetGuidValue(UNIT_FIELD_TARGET, victim->GetGUID());
3604 else
3606
3607 if (focusSpell->GetSpellInfo()->HasAttribute(SPELL_ATTR5_AI_DOESNT_FACE_TARGET))
3609}
void ClearUnitState(uint32 f)
Definition Unit.h:692

References _focusSpell, Unit::ClearUnitState(), ObjectGuid::Empty, Spell::GetSpellInfo(), Unit::GetVictim(), SpellInfo::HasAttribute(), Object::SetGuidValue(), SPELL_ATTR5_AI_DOESNT_FACE_TARGET, UNIT_FIELD_TARGET, and UNIT_STATE_ROTATING.

◆ RemoveCorpse()

void Creature::RemoveCorpse ( bool  setSpawnTime = true,
bool  skipVisibility = false 
)
403{
405 return;
406
410 if (!skipVisibility) // pussywizard
411 DestroyForVisiblePlayers(); // pussywizard: previous UpdateObjectVisibility()
412 loot.clear();
413 uint32 respawnDelay = m_respawnDelay;
414 if (IsAIEnabled)
415 AI()->CorpseRemoved(respawnDelay);
416
417 // Should get removed later, just keep "compatibility" with scripts
418 if (setSpawnTime)
419 {
420 m_respawnTime = GameTime::GetGameTime().count() + respawnDelay;
421 //SaveRespawnTime();
422 }
423
424 float x, y, z, o;
425 GetRespawnPosition(x, y, z, &o);
426 SetHomePosition(x, y, z, o);
427 SetPosition(x, y, z, o);
428
429 // xinef: relocate notifier
430 m_last_notify_position.Relocate(-5000.0f, -5000.0f, -5000.0f, 0.0f);
431
432 // pussywizard: if corpse was removed during falling then the falling will continue after respawn, so stop falling is such case
433 if (IsFalling())
434 StopMoving();
435}
virtual void CorpseRemoved(uint32 &)
== Triggered Actions Requested ==================
Definition CreatureAI.h:193
void GetRespawnPosition(float &x, float &y, float &z, float *ori=nullptr, float *dist=nullptr) const
Definition Creature.cpp:2955
void SetPosition(float x, float y, float z, float o)
Definition Creature.cpp:3169
DeathState getDeathState()
Definition Unit.h:1704
void StopMoving()
Definition Unit.cpp:16724
Position m_last_notify_position
Definition Unit.h:2022
void RemoveAllAuras()
Definition Unit.cpp:5375
bool IsFalling() const
Definition Unit.cpp:19773
void clear()
Definition LootMgr.h:343

References AI(), Loot::clear(), Corpse, CreatureAI::CorpseRemoved(), Dead, WorldObject::DestroyForVisiblePlayers(), Unit::getDeathState(), GameTime::GetGameTime(), GetRespawnPosition(), Unit::IsAIEnabled, Unit::IsFalling(), loot, m_corpseRemoveTime, Unit::m_last_notify_position, m_respawnDelay, m_respawnTime, Position::Relocate(), Unit::RemoveAllAuras(), setDeathState(), SetHomePosition(), SetPosition(), and Unit::StopMoving().

Referenced by OPvPCapturePoint::DelCreature(), DisappearAndDie(), RespawnEvent::Execute(), ForcedDespawn(), boss_skeram::JustDied(), npc_qiraj_war_spawn::npc_qiraj_war_spawnAI::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(), npc_illidari_spawn::npc_illidari_spawnAI::JustDied(), npc_nether_drake::npc_nether_drakeAI::MovementInform(), ValithriaDespawner::operator()(), Respawn(), npc_simone::npc_simoneAI::RespawnPet(), and Update().

◆ RemoveFromWorld()

void Creature::RemoveFromWorld ( )
overridevirtual

Reimplemented from Object.

Reimplemented in TempSummon, Minion, Puppet, and Pet.

349{
350 if (IsInWorld())
351 {
352 sScriptMgr->OnCreatureRemoveWorld(this);
353
354 if (GetZoneScript())
356
357 if (m_formation)
358 sFormationMgr->RemoveCreatureFromGroup(m_formation, this);
359
360 if (Transport* transport = GetTransport())
361 transport->RemovePassenger(this, true);
362
364
365 if (m_spawnId)
366 Acore::Containers::MultimapErasePair(GetMap()->GetCreatureBySpawnIdStore(), m_spawnId, this);
367
369 }
370}
#define sFormationMgr
Definition CreatureGroups.h:127
Definition Transport.h:30
bool Remove(KEY_TYPE const &handle)
Definition TypeContainer.h:138
void RemoveFromWorld() override
Definition Unit.cpp:15774
virtual void OnCreatureRemove(Creature *)
Definition ZoneScript.h:35
void MultimapErasePair(M< K, V, Rest... > &multimap, K const &key, V const &value)
Definition Containers.h:236

References Object::GetGUID(), WorldObject::GetMap(), Map::GetObjectsStore(), WorldObject::GetTransport(), WorldObject::GetZoneScript(), Object::IsInWorld(), m_formation, m_spawnId, Acore::Containers::MultimapErasePair(), ZoneScript::OnCreatureRemove(), TypeUnorderedMapContainer< OBJECT_TYPES, KEY_TYPE >::Remove(), Unit::RemoveFromWorld(), sFormationMgr, and sScriptMgr.

Referenced by TempSummon::RemoveFromWorld().

◆ RemoveLootMode()

void Creature::RemoveLootMode ( uint16  lootMode)
inline
248{ m_LootMode &= ~lootMode; }

References m_LootMode.

Referenced by boss_yoggsaron::boss_yoggsaronAI::boss_yoggsaronAI().

◆ ResetLootMode()

◆ ResetPickPocketLootTime()

void Creature::ResetPickPocketLootTime ( )
inline

References lootPickPocketRestoreTime.

Referenced by Respawn().

◆ ResetPlayerDamageReq()

◆ Respawn()

void Creature::Respawn ( bool  force = false)
Parameters
forceForce the respawn by killing the creature.
2044{
2045 if (force)
2046 {
2047 if (IsAlive())
2048 {
2050 }
2051 else if (getDeathState() != DeathState::Corpse)
2052 {
2054 }
2055 }
2056
2057 ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_CREATURE_RESPAWN, GetEntry());
2058
2059 if (!sConditionMgr->IsObjectMeetToConditions(this, conditions) && !force)
2060 {
2061 // Creature should not respawn, reset respawn timer. Conditions will be checked again the next time it tries to respawn.
2063 return;
2064 }
2065
2066 bool allowed = !IsAIEnabled || AI()->CanRespawn(); // First check if there are any scripts that prevent us respawning
2067 if (!allowed && !force) // Will be rechecked on next Update call
2068 return;
2069
2070 ObjectGuid dbtableHighGuid = ObjectGuid::Create<HighGuid::Unit>(m_creatureData ? m_creatureData->id1 : GetEntry(), m_spawnId);
2071 time_t linkedRespawntime = GetMap()->GetLinkedRespawnTime(dbtableHighGuid);
2072
2073 CreatureTemplate const* cInfo = sObjectMgr->GetCreatureTemplate(GetEntry());
2074
2075 if (!linkedRespawntime || (cInfo && cInfo->HasFlagsExtra(CREATURE_FLAG_EXTRA_HARD_RESET)) || force) // Should respawn
2076 {
2077 RemoveCorpse(false, false);
2078
2080 {
2081 if (m_spawnId)
2082 {
2084 CreatureData const* data = sObjectMgr->GetCreatureData(m_spawnId);
2085 // Respawn check if spawn has 2 entries
2086 if (data->id2)
2087 {
2088 uint32 entry = GetRandomId(data->id1, data->id2, data->id3);
2089 UpdateEntry(entry, data, true); // Select Random Entry
2090 m_defaultMovementType = MovementGeneratorType(data->movementType); // Reload Movement Type
2091 LoadEquipment(data->equipmentId); // Reload Equipment
2092 AIM_Initialize(); // Reload AI
2093 }
2094 else
2095 {
2096 if (m_originalEntry != GetEntry())
2098 }
2099 }
2100
2101 LOG_DEBUG("entities.unit", "Respawning creature {} (SpawnId: {}, {})", GetName(), GetSpawnId(), GetGUID().ToString());
2102 m_respawnTime = 0;
2104 loot.clear();
2105 SelectLevel();
2106
2109
2110 // MDic - Acidmanifesto: Do not override transform auras
2112 {
2114 CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelRandomGender(&display, GetCreatureTemplate());
2115 if (minfo) // Cancel load if no model defined
2116 {
2117 SetDisplayId(display.CreatureDisplayID, display.DisplayScale);
2118 SetNativeDisplayId(display.CreatureDisplayID);
2119 }
2120 }
2121
2123
2124 //Call AI respawn virtual function
2125 if (IsAIEnabled)
2126 {
2127 //reset the AI to be sure no dirty or uninitialized values will be used till next tick
2128 AI()->Reset();
2129 TriggerJustRespawned = true; //delay event to next tick so all creatures are created on the map before processing
2130 }
2131
2132 uint32 poolid = m_spawnId ? sPoolMgr->IsPartOfAPool<Creature>(m_spawnId) : 0;
2133 if (poolid)
2134 sPoolMgr->UpdatePool<Creature>(poolid, m_spawnId);
2135
2136 //Re-initialize reactstate that could be altered by movementgenerators
2138
2139 }
2141 // xinef: relocate notifier, fixes npc appearing in corpse position after forced respawn (instead of spawn)
2142 m_last_notify_position.Relocate(-5000.0f, -5000.0f, -5000.0f, 0.0f);
2144
2145 }
2146 else // the master is dead
2147 {
2148 ObjectGuid targetGuid = sObjectMgr->GetLinkedRespawnGuid(dbtableHighGuid);
2149 if (targetGuid == dbtableHighGuid) // if linking self, never respawn (check delayed to next day)
2150 {
2152 }
2153 else
2154 {
2155 time_t now = GameTime::GetGameTime().count();
2156 m_respawnTime = (now > linkedRespawntime ? now : linkedRespawntime) + urand(5, MINUTE); // else copy time from master and add a little
2157 }
2158 SaveRespawnTime(); // also save to DB immediately
2159 }
2160}
constexpr auto DAY
Definition Common.h:49
constexpr auto MINUTE
Definition Common.h:47
#define sConditionMgr
Definition ConditionMgr.h:290
@ CONDITION_SOURCE_TYPE_CREATURE_RESPAWN
Definition ConditionMgr.h:152
std::list< Condition * > ConditionList
Definition ConditionMgr.h:237
@ CREATURE_FLAG_EXTRA_HARD_RESET
Definition CreatureData.h:76
#define sPoolMgr
Definition PoolMgr.h:163
@ SPELL_AURA_TRANSFORM
Definition SpellAuraDefines.h:119
virtual bool CanRespawn()
Definition CreatureAI.h:117
void SaveRespawnTime() override
Definition Creature.cpp:2624
void SetRespawnTime(uint32 respawn)
Definition Creature.cpp:3800
void SelectLevel(bool changelevel=true)
Definition Creature.cpp:1521
void InitializeReactState()
Check if the creature has the specified ReactState.
Definition Creature.cpp:2210
void ResetPickPocketLootTime()
Definition Creature.h:239
time_t GetLinkedRespawnTime(ObjectGuid guid) const
Definition Map.cpp:2652
void InitDefault()
Definition MotionMaster.cpp:87
Definition ObjectGuid.h:118
virtual void Reset()
Definition UnitAI.h:211
void UpdateObjectVisibility(bool forced=true, bool fromUpdate=false) override
Definition Unit.cpp:19218

References AI(), AIM_Initialize(), CreatureAI::CanRespawn(), Loot::clear(), CONDITION_SOURCE_TYPE_CREATURE_RESPAWN, Corpse, CREATURE_FLAG_EXTRA_HARD_RESET, CreatureModel::CreatureDisplayID, DAY, Dead, CreatureModel::DisplayScale, CreatureData::equipmentId, Unit::GetAuraEffectsByType(), GetCreatureTemplate(), Unit::getDeathState(), Object::GetEntry(), GameTime::GetGameTime(), Object::GetGUID(), Map::GetLinkedRespawnTime(), WorldObject::GetMap(), Unit::GetMotionMaster(), WorldObject::GetName(), Unit::GetNativeDisplayId(), GetNativeObjectScale(), GetRandomId(), GetSpawnId(), CreatureTemplate::HasFlagsExtra(), CreatureData::id1, CreatureData::id2, CreatureData::id3, MotionMaster::InitDefault(), InitializeReactState(), Unit::IsAIEnabled, Unit::IsAlive(), JustDied, JustRespawned, LoadEquipment(), LOG_DEBUG, loot, m_creatureData, m_defaultMovementType, Unit::m_last_notify_position, m_originalEntry, m_respawnDelay, m_respawnedTime, m_respawnTime, m_spawnId, MINUTE, CreatureData::movementType, Position::Relocate(), RemoveCorpse(), Map::RemoveCreatureRespawnTime(), UnitAI::Reset(), ResetPickPocketLootTime(), SaveRespawnTime(), sConditionMgr, SelectLevel(), setDeathState(), SetDisplayId(), Unit::SetNativeDisplayId(), SetRespawnTime(), sObjectMgr, SPELL_AURA_TRANSFORM, sPoolMgr, Position::ToString(), TriggerJustRespawned, UpdateEntry(), Unit::UpdateObjectVisibility(), and urand().

Referenced by BattlegroundAV::AddAVCreature(), boss_thaddius_summon::boss_thaddius_summonAI::DoAction(), RespawnEvent::Execute(), npc_commandscript::HandleNpcMoveCommand(), npc_commandscript::HandleNpcSetMoveTypeCommand(), npc_commandscript::HandleNpcSetWanderDistanceCommand(), misc_commandscript::HandleRespawnCommand(), npc_isle_of_conquest_turret::npc_isle_of_conquest_turretAI::JustDied(), npc_simone::npc_simoneAI::JustRespawned(), CreatureGroup::MemberEvaded(), instance_karazhan::instance_karazhan_InstanceMapScript::OnCreatureCreate(), instance_uldaman::instance_uldaman_InstanceMapScript::OnCreatureCreate(), instance_temple_of_ahnqiraj::instance_temple_of_ahnqiraj_InstanceMapScript::OnCreatureCreate(), instance_halls_of_reflection::instance_halls_of_reflection_InstanceMapScript::OnCreatureCreate(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnCreatureCreate(), at_blackrock_stadium::OnTrigger(), Acore::RespawnDo::operator()(), instance_blood_furnace::instance_blood_furnace_InstanceMapScript::ResetPrisoner(), instance_molten_core::instance_molten_core_InstanceMapScript::SetBossState(), Battlefield::ShowNpc(), boss_warchief_kargath_bladefist::SummonedCreatureDies(), Update(), npc_escortAI::UpdateAI(), and InstanceScript::UpdateMinionState().

◆ ResumeChasingVictim()

◆ SaveRespawnTime()

◆ SaveToDB() [1/2]

void Creature::SaveToDB ( )
1405{
1406 // this should only be used when the creature has already been loaded
1407 // preferably after adding to map, because mapid may not be valid otherwise
1408 CreatureData const* data = sObjectMgr->GetCreatureData(m_spawnId);
1409 if (!data)
1410 {
1411 LOG_ERROR("entities.unit", "Creature::SaveToDB failed, cannot get creature data!");
1412 return;
1413 }
1414
1416 SaveToDB(mapId, data->spawnMask, GetPhaseMask());
1417}
void SaveToDB()
Definition Creature.cpp:1404
GameObjectTemplate const * GetGOInfo() const
Definition GameObject.h:136
MotionTransport * ToMotionTransport()
Definition GameObject.h:326
uint32 GetMapId() const
Definition Position.h:280
uint8 spawnMask
Definition CreatureData.h:389
uint32 mapID
Definition GameObjectData.h:222
struct GameObjectTemplate::@231::@246 moTransport

References GameObject::GetGOInfo(), WorldLocation::GetMapId(), WorldObject::GetPhaseMask(), WorldObject::GetTransport(), LOG_ERROR, m_spawnId, GameObjectTemplate::mapID, GameObjectTemplate::moTransport, SaveToDB(), sObjectMgr, CreatureData::spawnMask, and GameObject::ToMotionTransport().

Referenced by npc_commandscript::HandleNpcAddCommand(), npc_commandscript::HandleNpcSetLevelCommand(), npc_commandscript::HandleNpcSetModelCommand(), npc_commandscript::HandleNpcSetMoveTypeCommand(), npc_commandscript::HandleNpcSetPhaseCommand(), wp_commandscript::HandleWpModifyCommand(), wp_commandscript::HandleWpShowCommand(), and SaveToDB().

◆ SaveToDB() [2/2]

void Creature::SaveToDB ( uint32  mapid,
uint8  spawnMask,
uint32  phaseMask 
)
virtual

Reimplemented in TempSummon, and Pet.

1420{
1421 // update in loaded data
1422 if (!m_spawnId)
1423 m_spawnId = sObjectMgr->GenerateCreatureSpawnId();
1424
1425 CreatureData& data = sObjectMgr->NewOrExistCreatureData(m_spawnId);
1426
1427 uint32 displayId = GetNativeDisplayId();
1428 uint32 npcflag = GetNpcFlags();
1429 uint32 unit_flags = GetUnitFlags();
1430 uint32 dynamicflags = GetDynamicFlags();
1431
1432 // check if it's a custom model and if not, use 0 for displayId
1433 CreatureTemplate const* cinfo = GetCreatureTemplate();
1434 if (cinfo)
1435 {
1436 for (CreatureModel model : cinfo->Models)
1437 if (displayId && displayId == model.CreatureDisplayID)
1438 displayId = 0;
1439
1440 if (npcflag == cinfo->npcflag)
1441 npcflag = 0;
1442
1443 if (unit_flags == cinfo->unit_flags)
1444 unit_flags = 0;
1445
1446 if (dynamicflags == cinfo->dynamicflags)
1447 dynamicflags = 0;
1448 }
1449
1450 data.id1 = GetEntry();
1451 data.mapid = mapid;
1452 data.phaseMask = phaseMask;
1453 data.displayid = displayId;
1455 if (!GetTransport())
1456 {
1457 data.posX = GetPositionX();
1458 data.posY = GetPositionY();
1459 data.posZ = GetPositionZ();
1460 data.orientation = GetOrientation();
1461 }
1462 else
1463 {
1464 data.posX = GetTransOffsetX();
1465 data.posY = GetTransOffsetY();
1466 data.posZ = GetTransOffsetZ();
1468 }
1469
1471 // prevent add data integrity problems
1473 data.currentwaypoint = 0;
1474 data.curhealth = GetHealth();
1475 data.curmana = GetPower(POWER_MANA);
1476 // prevent add data integrity problems
1479 data.spawnMask = spawnMask;
1480 data.npcflag = npcflag;
1481 data.unit_flags = unit_flags;
1482 data.dynamicflags = dynamicflags;
1483
1484 // update in DB
1485 WorldDatabaseTransaction trans = WorldDatabase.BeginTransaction();
1486
1488 stmt->SetData(0, m_spawnId);
1489 trans->Append(stmt);
1490
1491 uint8 index = 0;
1492
1493 stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_CREATURE);
1494 stmt->SetData(index++, m_spawnId);
1495 stmt->SetData(index++, GetEntry());
1496 stmt->SetData(index++, 0);
1497 stmt->SetData(index++, 0);
1498 stmt->SetData(index++, uint16(mapid));
1499 stmt->SetData(index++, spawnMask);
1500 stmt->SetData(index++, GetPhaseMask());
1501 stmt->SetData(index++, int32(GetCurrentEquipmentId()));
1502 stmt->SetData(index++, GetPositionX());
1503 stmt->SetData(index++, GetPositionY());
1504 stmt->SetData(index++, GetPositionZ());
1505 stmt->SetData(index++, GetOrientation());
1506 stmt->SetData(index++, m_respawnDelay);
1507 stmt->SetData(index++, m_wanderDistance);
1508 stmt->SetData(index++, 0);
1509 stmt->SetData(index++, GetHealth());
1510 stmt->SetData(index++, GetPower(POWER_MANA));
1511 stmt->SetData(index++, uint8(GetDefaultMovementType()));
1512 stmt->SetData(index++, npcflag);
1513 stmt->SetData(index++, unit_flags);
1514 stmt->SetData(index++, dynamicflags);
1515 trans->Append(stmt);
1516
1517 WorldDatabase.CommitTransaction(trans);
1518 sScriptMgr->OnCreatureSaveToDB(this);
1519}
@ WORLD_INS_CREATURE
Definition WorldDatabase.h:92
Models
Definition boss_black_knight.cpp:95
uint8 GetCurrentEquipmentId()
Definition Creature.h:198
MovementGeneratorType GetDefaultMovementType() const override
-------—End of Pet responses methods-------—
Definition Creature.h:86
NPCFlags GetNpcFlags() const
Clears emote state (looping emote)
Definition Unit.h:717
UnitFlags GetUnitFlags() const
Definition Unit.h:701
uint32 GetDynamicFlags() const override
Definition Unit.h:723
float GetTransOffsetX() const
Definition Object.h:671
float GetTransOffsetY() const
Definition Object.h:672
float GetTransOffsetZ() const
Definition Object.h:673
float GetTransOffsetO() const
Definition Object.h:674
uint32 dynamicflags
Definition CreatureData.h:392
uint32 displayid
Definition CreatureData.h:377
uint32 unit_flags
Definition CreatureData.h:391
uint32 currentwaypoint
Definition CreatureData.h:385
uint16 mapid
Definition CreatureData.h:375
uint32 unit_flags
Definition CreatureData.h:214
uint32 npcflag
Definition CreatureData.h:199
uint32 dynamicflags
Definition CreatureData.h:216

References CreatureData::curhealth, CreatureData::curmana, CreatureData::currentwaypoint, CreatureData::displayid, CreatureTemplate::dynamicflags, CreatureData::dynamicflags, CreatureData::equipmentId, GetCreatureTemplate(), GetCurrentEquipmentId(), GetDefaultMovementType(), Unit::GetDynamicFlags(), Object::GetEntry(), Unit::GetHealth(), Unit::GetNativeDisplayId(), Unit::GetNpcFlags(), Position::GetOrientation(), WorldObject::GetPhaseMask(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), Unit::GetPower(), WorldObject::GetTransOffsetO(), WorldObject::GetTransOffsetX(), WorldObject::GetTransOffsetY(), WorldObject::GetTransOffsetZ(), WorldObject::GetTransport(), Unit::GetUnitFlags(), CreatureData::id1, IDLE_MOTION_TYPE, m_respawnDelay, m_spawnId, m_wanderDistance, CreatureData::mapid, CreatureTemplate::Models, CreatureData::movementType, CreatureTemplate::npcflag, CreatureData::npcflag, CreatureData::orientation, CreatureData::phaseMask, CreatureData::posX, CreatureData::posY, CreatureData::posZ, POWER_MANA, RANDOM_MOTION_TYPE, PreparedStatementBase::SetData(), sObjectMgr, CreatureData::spawnMask, CreatureData::spawntimesecs, sScriptMgr, CreatureTemplate::unit_flags, CreatureData::unit_flags, CreatureData::wander_distance, WORLD_DEL_CREATURE, WORLD_INS_CREATURE, and WorldDatabase.

◆ SearchFormation()

void Creature::SearchFormation ( )
383{
384 if (IsSummon())
385 {
386 return;
387 }
388
390 if (!spawnId)
391 {
392 return;
393 }
394
395 CreatureGroupInfoType::const_iterator frmdata = sFormationMgr->CreatureGroupMap.find(spawnId);
396 if (frmdata != sFormationMgr->CreatureGroupMap.end())
397 {
398 sFormationMgr->AddCreatureToGroup(frmdata->second.leaderGUID, this);
399 }
400}

References GetSpawnId(), Unit::IsSummon(), and sFormationMgr.

Referenced by AddToWorld(), and npc_commandscript::HandleNpcAddFormationCommand().

◆ SelectLevel()

void Creature::SelectLevel ( bool  changelevel = true)
Todo:
: set UNIT_FIELD_POWER*, for some creature class case (energy, etc)
1522{
1523 CreatureTemplate const* cInfo = GetCreatureTemplate();
1524
1525 uint32 rank = IsPet() ? 0 : cInfo->rank;
1526
1527 // level
1528 uint8 minlevel = std::min(cInfo->maxlevel, cInfo->minlevel);
1529 uint8 maxlevel = std::max(cInfo->maxlevel, cInfo->minlevel);
1530 uint8 level = minlevel == maxlevel ? minlevel : urand(minlevel, maxlevel);
1531
1532 sScriptMgr->OnBeforeCreatureSelectLevel(cInfo, this, level);
1533
1534 if (changelevel)
1535 SetLevel(level);
1536
1537 CreatureBaseStats const* stats = sObjectMgr->GetCreatureBaseStats(level, cInfo->unit_class);
1538
1539 // health
1540 float healthmod = _GetHealthMod(rank);
1541
1542 uint32 basehp = std::max<uint32>(1, stats->GenerateHealth(cInfo));
1543 uint32 health = uint32(basehp * healthmod);
1544
1545 SetCreateHealth(health);
1546 SetMaxHealth(health);
1547 SetHealth(health);
1549
1550 // mana
1551 uint32 mana = stats->GenerateMana(cInfo);
1552
1553 SetCreateMana(mana);
1554 SetMaxPower(POWER_MANA, mana); //MAX Mana
1555 SetPower(POWER_MANA, mana);
1556
1558
1561
1562 // damage
1563
1564 float basedamage = stats->GenerateBaseDamage(cInfo);
1565
1566 float weaponBaseMinDamage = basedamage;
1567 float weaponBaseMaxDamage = basedamage * 1.5;
1568
1569 SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, weaponBaseMinDamage);
1570 SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, weaponBaseMaxDamage);
1571
1572 SetBaseWeaponDamage(OFF_ATTACK, MINDAMAGE, weaponBaseMinDamage);
1573 SetBaseWeaponDamage(OFF_ATTACK, MAXDAMAGE, weaponBaseMaxDamage);
1574
1575 SetBaseWeaponDamage(RANGED_ATTACK, MINDAMAGE, weaponBaseMinDamage);
1576 SetBaseWeaponDamage(RANGED_ATTACK, MAXDAMAGE, weaponBaseMaxDamage);
1577
1580
1581 sScriptMgr->Creature_SelectLevel(cInfo, this);
1582}
@ UNIT_MOD_ATTACK_POWER
Definition Unit.h:164
@ UNIT_MOD_HEALTH
Definition Unit.h:149
@ UNIT_MOD_MANA
Definition Unit.h:150
@ UNIT_MOD_ATTACK_POWER_RANGED
Definition Unit.h:165
void ResetPlayerDamageReq()
Definition Creature.cpp:3842
void SetCreateHealth(uint32 val)
Definition Unit.h:1051
void SetBaseWeaponDamage(WeaponAttackType attType, WeaponDamageRange damageRange, float value, uint8 damageIndex=0)
Definition Unit.h:1139
void SetMaxPower(Powers power, uint32 val)
Definition Unit.cpp:15709
void SetCreateMana(uint32 val)
Definition Unit.h:1073
void SetLevel(uint8 lvl, bool showLevelChange=true)
Definition Unit.cpp:15552
void SetModifierValue(UnitMods unitMod, UnitModifierType modifierType, float value)
Definition Unit.h:1015
void SetMaxHealth(uint32 val)
Definition Unit.cpp:15620
Definition CreatureData.h:303
uint32 RangedAttackPower
Definition CreatureData.h:308
uint32 AttackPower
Definition CreatureData.h:307
float GenerateBaseDamage(CreatureTemplate const *info) const
Definition CreatureData.h:332
uint32 GenerateMana(CreatureTemplate const *info) const
Definition CreatureData.h:318
uint32 GenerateHealth(CreatureTemplate const *info) const
Definition CreatureData.h:313
uint8 minlevel
Definition CreatureData.h:195
uint8 maxlevel
Definition CreatureData.h:196

References _GetHealthMod(), CreatureBaseStats::AttackPower, BASE_ATTACK, BASE_VALUE, CreatureBaseStats::GenerateBaseDamage(), CreatureBaseStats::GenerateHealth(), CreatureBaseStats::GenerateMana(), GetCreatureTemplate(), Unit::IsPet(), MAXDAMAGE, CreatureTemplate::maxlevel, MINDAMAGE, CreatureTemplate::minlevel, OFF_ATTACK, POWER_MANA, RANGED_ATTACK, CreatureBaseStats::RangedAttackPower, CreatureTemplate::rank, ResetPlayerDamageReq(), Unit::SetBaseWeaponDamage(), Unit::SetCreateHealth(), Unit::SetCreateMana(), Unit::SetHealth(), Unit::SetLevel(), Unit::SetMaxHealth(), Unit::SetMaxPower(), Unit::SetModifierValue(), Unit::SetPower(), sObjectMgr, sScriptMgr, CreatureTemplate::unit_class, UNIT_MOD_ATTACK_POWER, UNIT_MOD_ATTACK_POWER_RANGED, UNIT_MOD_HEALTH, UNIT_MOD_MANA, and urand().

Referenced by Spell::EffectSummonType(), npc_target_dummy::npc_target_dummyAI::Reset(), Respawn(), and UpdateEntry().

◆ SelectNearestTarget()

Unit * Creature::SelectNearestTarget ( float  dist = 0,
bool  playerOnly = false 
) const

Select nearest hostile unit within the given distance (regardless of threat list).

2393{
2394 if (dist == 0.0f)
2395 {
2397 }
2398
2399 Unit* target = nullptr;
2400
2401 Acore::NearestHostileUnitCheck u_check(this, dist, playerOnly);
2402 Acore::UnitLastSearcher<Acore::NearestHostileUnitCheck> searcher(this, target, u_check);
2403 Cell::VisitAllObjects(this, searcher, dist);
2404 return target;
2405}
#define MAX_VISIBILITY_DISTANCE
Definition ObjectDefines.h:31
Definition GridNotifiers.h:1182
Definition GridNotifiers.h:396
static void VisitAllObjects(WorldObject const *obj, T &visitor, float radius)
Definition CellImpl.h:185

References MAX_VISIBILITY_DISTANCE, and Cell::VisitAllObjects().

Referenced by boss_twinemperorsAI::DoAction(), SmartScript::GetTargets(), npc_toc_warlock::npc_toc_warlockAI::JustSummoned(), npc_toc_hunter::npc_toc_hunterAI::JustSummoned(), npc_toc_boomkin::npc_toc_boomkinAI::JustSummoned(), boss_onyxia::JustSummoned(), boss_black_knight::boss_black_knightAI::JustSummoned(), boss_grand_champion::boss_grand_championAI::MovementInform(), npc_swarm_scarab::npc_swarm_scarabAI::Reset(), npc_nerubian_burrower::npc_nerubian_burrowerAI::Reset(), npc_fel_infernal::npc_fel_infernalAI::Reset(), npc_mistress_of_pain::npc_mistress_of_painAI::Reset(), boss_skarvald_the_constructor::Reset(), boss_dalronn_the_controller::Reset(), npc_heated_battle::npc_heated_battleAI::Reset(), npc_pet_hunter_snake_trap::Reset(), boss_alar::ScheduleMainSpellAttack(), npc_memory::npc_memoryAI::UpdateAI(), boss_malygos::boss_malygosAI::UpdateAI(), npc_freya_ward::npc_freya_wardAI::UpdateAI(), npc_q24545_vegard::npc_q24545_vegardAI::UpdateAI(), npc_pet_gen_target_following_bomb::UpdateAI(), and npc_living_poison::UpdateAI().

◆ SelectNearestTargetInAttackDistance()

Unit * Creature::SelectNearestTargetInAttackDistance ( float  dist) const

Select nearest hostile unit within the given attack distance (i.e. distance is ignored if > than ATTACK_DISTANCE), regardless of threat list.

2411{
2412 if (dist < ATTACK_DISTANCE)
2413 dist = ATTACK_DISTANCE;
2414 if (dist > MAX_SEARCHER_DISTANCE)
2415 dist = MAX_SEARCHER_DISTANCE;
2416
2417 Unit* target = nullptr;
2420 Cell::VisitAllObjects(this, searcher, std::max(dist, ATTACK_DISTANCE));
2421
2422 return target;
2423}
#define ATTACK_DISTANCE
Definition ObjectDefines.h:25
#define MAX_SEARCHER_DISTANCE
Definition ObjectDefines.h:33
Definition GridNotifiers.h:1211

References ATTACK_DISTANCE, MAX_SEARCHER_DISTANCE, and Cell::VisitAllObjects().

Referenced by PetAI::SelectNextTarget(), and SimpleCharmedAI::UpdateAI().

◆ SelectVictim()

Unit * Creature::SelectVictim ( )
14826{
14827 // function provides main threat functionality
14828 // next-victim-selection algorithm and evade mode are called
14829 // threat list sorting etc.
14830
14831 Unit* target = nullptr;
14832
14833 // First checking if we have some taunt on us
14835 if (!tauntAuras.empty())
14836 for (Unit::AuraEffectList::const_reverse_iterator itr = tauntAuras.rbegin(); itr != tauntAuras.rend(); ++itr)
14837 if (Unit* caster = (*itr)->GetCaster())
14838 if (CanCreatureAttack(caster) && !caster->HasAuraTypeWithCaster(SPELL_AURA_IGNORED, GetGUID()))
14839 {
14840 target = caster;
14841 break;
14842 }
14843
14844 if (CanHaveThreatList())
14845 {
14846 if (!target && !m_ThreatMgr.isThreatListEmpty())
14847 target = m_ThreatMgr.getHostileTarget();
14848 }
14849 else if (!HasReactState(REACT_PASSIVE))
14850 {
14851 // we have player pet probably
14852 target = getAttackerForHelper();
14853 if (!target && IsSummon())
14854 if (Unit* owner = ToTempSummon()->GetOwner())
14855 {
14856 if (owner->IsInCombat())
14857 target = owner->getAttackerForHelper();
14858 if (!target)
14859 for (ControlSet::const_iterator itr = owner->m_Controlled.begin(); itr != owner->m_Controlled.end(); ++itr)
14860 if ((*itr)->IsInCombat())
14861 {
14862 target = (*itr)->getAttackerForHelper();
14863 if (target)
14864 break;
14865 }
14866 }
14867 }
14868 else
14869 return nullptr;
14870
14871 if (target && CanCreatureAttack(target))
14872 {
14873 SetInFront(target);
14874 return target;
14875 }
14876
14877 // last case when creature must not go to evade mode:
14878 // it in combat but attacker not make any damage and not enter to aggro radius to have record in threat list
14879 // Note: creature does not have targeted movement generator but has attacker in this case
14880 for (AttackerSet::const_iterator itr = m_attackers.begin(); itr != m_attackers.end(); ++itr)
14881 if ((*itr) && CanCreatureAttack(*itr) && !(*itr)->IsPlayer() && !(*itr)->ToCreature()->HasUnitTypeMask(UNIT_MASK_CONTROLLABLE_GUARDIAN))
14882 return nullptr;
14883
14884 if (GetVehicle())
14885 return nullptr;
14886
14887 // pussywizard: not sure why it's here
14888 // pussywizard: can't evade when having invisibility aura with duration? o_O
14890 if (!iAuras.empty())
14891 {
14892 for (Unit::AuraEffectList::const_iterator itr = iAuras.begin(); itr != iAuras.end(); ++itr)
14893 if ((*itr)->GetBase()->IsPermanent())
14894 {
14896 break;
14897 }
14898 return nullptr;
14899 }
14900
14901 // Last chance: creature group
14902 if (CreatureGroup* group = GetFormation())
14903 {
14904 if (Unit* groupTarget = group->GetNewTargetForMember(this))
14905 {
14906 SetInFront(groupTarget);
14907 return groupTarget;
14908 }
14909 }
14910
14911 // enter in evade mode in other case
14912 AI()->EnterEvadeMode();
14913
14914 return nullptr;
14915}
@ SPELL_AURA_MOD_INVISIBILITY
Definition SpellAuraDefines.h:81
@ SPELL_AURA_MOD_TAUNT
Definition SpellAuraDefines.h:74
@ SPELL_AURA_IGNORED
Definition SpellAuraDefines.h:284
@ UNIT_MASK_CONTROLLABLE_GUARDIAN
Definition UnitDefines.h:164
@ EVADE_REASON_NO_HOSTILES
Definition CreatureAI.h:89
virtual void EnterEvadeMode(EvadeReason why=EVADE_REASON_OTHER)
Definition CreatureAI.cpp:210
Definition CreatureGroups.h:90
CreatureGroup const * GetFormation() const
Definition Creature.h:357
Unit * getHostileTarget()
Definition ThreatMgr.cpp:515
bool isThreatListEmpty() const
Definition ThreatMgr.h:224
Vehicle * GetVehicle() const
Definition Unit.h:1839
ThreatMgr m_ThreatMgr
Definition Unit.h:2107
AttackerSet m_attackers
Definition Unit.h:2064

References AI(), CanCreatureAttack(), Unit::CanHaveThreatList(), CreatureAI::EnterEvadeMode(), CreatureAI::EVADE_REASON_NO_HOSTILES, Unit::getAttackerForHelper(), Unit::GetAuraEffectsByType(), GetFormation(), Object::GetGUID(), ThreatMgr::getHostileTarget(), Unit::GetOwner(), Unit::GetVehicle(), HasReactState(), Unit::IsSummon(), ThreatMgr::isThreatListEmpty(), Unit::m_attackers, Unit::m_ThreatMgr, REACT_PASSIVE, Unit::SetInFront(), SPELL_AURA_IGNORED, SPELL_AURA_MOD_INVISIBILITY, SPELL_AURA_MOD_TAUNT, Unit::ToTempSummon(), and UNIT_MASK_CONTROLLABLE_GUARDIAN.

Referenced by StartMovementEvent::Execute(), boss_urom::boss_uromAI::JustSummoned(), boss_gyth::boss_gythAI::JustSummoned(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::MovementInform(), boss_sindragosa::boss_sindragosaAI::MovementInform(), npc_rimefang::npc_rimefangAI::MovementInform(), Unit::TauntFadeOut(), Update(), npc_raging_spirit::npc_raging_spiritAI::UpdateAI(), npc_pet_gen_gnomish_flame_turret::UpdateAI(), CreatureAI::UpdateVictim(), and CreatureAI::UpdateVictimWithGaze().

◆ SendAIReaction()

void Creature::SendAIReaction ( AiReaction  reactionType)
2426{
2427 WorldPacket data(SMSG_AI_REACTION, 12);
2428
2429 data << GetGUID();
2430 data << uint32(reactionType);
2431
2432 ((WorldObject*)this)->SendMessageToSet(&data, true);
2433
2434 LOG_DEBUG("network", "WORLD: Sent SMSG_AI_REACTION, type {}.", reactionType);
2435}
Definition Object.h:461
@ SMSG_AI_REACTION
Definition Opcodes.h:346

References Object::GetGUID(), LOG_DEBUG, and SMSG_AI_REACTION.

Referenced by Unit::Attack(), and CreatureAI::TriggerAlert().

◆ SendZoneUnderAttackMessage()

void Creature::SendZoneUnderAttackMessage ( Player attacker)

Send a message to LocalDefense channel for players opposition team in the zone.

2817{
2819 data << (uint32)GetAreaId();
2820 sWorldSessionMgr->SendGlobalMessage(&data, nullptr, (attacker->GetTeamId() == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE));
2821}
@ TEAM_ALLIANCE
Definition SharedDefines.h:760
@ TEAM_HORDE
Definition SharedDefines.h:761
#define sWorldSessionMgr
Definition WorldSessionMgr.h:110
TeamId GetTeamId(bool original=false) const
Definition Player.h:2126
uint32 GetAreaId() const
Definition Object.cpp:3065
@ SMSG_ZONE_UNDER_ATTACK
Definition Opcodes.h:626

References WorldObject::GetAreaId(), Player::GetTeamId(), SMSG_ZONE_UNDER_ATTACK, sWorldSessionMgr, TEAM_ALLIANCE, and TEAM_HORDE.

Referenced by GuardAI::JustDied(), and SmartScript::ProcessAction().

◆ SetAssistanceTimer()

void Creature::SetAssistanceTimer ( uint32  value)
inline
408{ m_assistanceTimer = value; }

References m_assistanceTimer.

Referenced by Unit::Attack().

◆ SetCanDualWield()

◆ SetCanFly()

bool Creature::SetCanFly ( bool  enable,
bool  packetOnly = false 
)
overridevirtual

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.

movement counter

Reimplemented from Unit.

3306{
3307 if (!Unit::SetCanFly(enable))
3308 return false;
3309
3310 if (m_movedByPlayer)
3311 {
3312 sScriptMgr->AnticheatSetCanFlybyServer(m_movedByPlayer->ToPlayer(), enable);
3313
3314 if (!enable)
3316
3318 data << GetPackGUID();
3319 data << uint32(0);
3321
3323 data << GetPackGUID();
3324 BuildMovementPacket(&data);
3325 m_movedByPlayer->ToPlayer()->SendMessageToSet(&data, false);
3326 return true;
3327 }
3328
3330 data << GetPackGUID();
3331 SendMessageToSet(&data, false);
3332 return true;
3333}
PackedGuid const & GetPackGUID() const
Definition Object.h:115
void SetFallInformation(uint32 time, float z)
Definition Player.h:2354
void SendMessageToSet(WorldPacket const *data, bool self) const override
Definition Player.cpp:5702
virtual bool SetCanFly(bool enable, bool packetOnly=false)
Add the movement flag: MOVEMENTFLAGCAN_FLY. Generaly only use by players, allowing them to fly by pre...
Definition Unit.cpp:20466
SafeUnitPointer m_movedByPlayer
Definition Unit.h:1992
void BuildMovementPacket(ByteBuffer *data) const
Definition Unit.cpp:19721
virtual void SendMessageToSet(WorldPacket const *data, bool self) const
Definition Object.cpp:2076
void Initialize(uint16 opcode, std::size_t newres=200)
Definition WorldPacket.h:68
@ MSG_MOVE_UPDATE_CAN_FLY
Definition Opcodes.h:971
@ 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 Unit::BuildMovementPacket(), GameTime::GetGameTime(), Object::GetPackGUID(), Position::GetPositionZ(), WorldPacket::Initialize(), Unit::m_movedByPlayer, MSG_MOVE_UPDATE_CAN_FLY, Player::SendDirectMessage(), WorldObject::SendMessageToSet(), Player::SendMessageToSet(), Unit::SetCanFly(), Player::SetFallInformation(), SMSG_MOVE_SET_CAN_FLY, SMSG_MOVE_UNSET_CAN_FLY, SMSG_SPLINE_MOVE_SET_FLYING, SMSG_SPLINE_MOVE_UNSET_FLYING, sScriptMgr, and Object::ToPlayer().

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_nightbane::EnterEvadeMode(), boss_urom::boss_uromAI::EnterEvadeMode(), npc_pet_dk_ebon_gargoyle::FlyAway(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::GoToMinchar(), boss_sartharion_tenebron::boss_sartharion_tenebronAI::HandleExtraEvent(), boss_sartharion_shadron::boss_sartharion_shadronAI::HandleExtraEvent(), boss_sartharion_vesperon::boss_sartharion_vesperonAI::HandleExtraEvent(), 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_sartharion_dragonAI::JustEngagedWith(), 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(), boss_sister_svalna::boss_sister_svalnaAI::MovementInform(), npc_icc_spire_frostwyrm::MovementInform(), npc_enslaved_proto_drake::MovementInform(), boss_nazan::MovementInform(), boss_felmyst::MovementInform(), npc_hallows_end_soh::MovementInform(), npc_pet_dk_ebon_gargoyle::MovementInform(), npc_alexstrasza::npc_alexstraszaAI::npc_alexstraszaAI(), npc_batrider::npc_batrider(), npc_concentrated_ball::npc_concentrated_ballAI::npc_concentrated_ballAI(), npc_pet_gen_moth::npc_pet_gen_moth(), npc_vehicle_d16_propelled_delivery::npc_vehicle_d16_propelled_deliveryAI::PassengerBoarded(), npc_hover_disk::npc_hover_diskAI::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_sartharion_dragonAI::Reset(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::Reset(), boss_sister_svalna::boss_sister_svalnaAI::Reset(), npc_icc_spire_frostwyrm::Reset(), npc_ulduar_mimiron_rocket::npc_ulduar_mimiron_rocketAI::Reset(), boss_nazan::Reset(), boss_felmyst::ScheduleGroundAbilities(), npc_enslaved_proto_drake::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::boss_stormcaller_brundirAI::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 UpdateMovementFlags().

◆ SetCannotReachTarget()

void Creature::SetCannotReachTarget ( ObjectGuid const &  target = ObjectGuid::Empty)
3676{
3677 if (cannotReach == m_cannotReachTarget)
3678 {
3679 return;
3680 }
3681
3682 m_cannotReachTarget = cannotReach;
3684
3685 if (cannotReach)
3686 {
3687 LOG_DEBUG("entities.unit", "Creature::SetCannotReachTarget() called with true. Details: {}", GetDebugInfo());
3688 }
3689}
std::string GetDebugInfo() const override
Definition Creature.cpp:3885

References GetDebugInfo(), LOG_DEBUG, m_cannotReachTarget, and m_cannotReachTimer.

Referenced by CreatureAI::_EnterEvadeMode(), ChaseMovementGenerator< T >::DoUpdate(), setDeathState(), and Update().

◆ SetCombatMovement()

void Creature::SetCombatMovement ( bool  allowMovement)
3872{
3873 _isCombatMovementAllowed = allowMovement;
3874}

References _isCombatMovementAllowed.

Referenced by boss_victor_nefarius::boss_victor_nefariusAI::BeginEvent(), boss_acidmaw::boss_acidmawAI::boss_acidmawAI(), boss_alar::boss_alar(), boss_blight_worm::boss_blight_wormAI::boss_blight_wormAI(), boss_cthun::boss_cthun(), boss_dorothee::boss_dorothee(), boss_eye_of_cthun::boss_eye_of_cthun(), boss_murmur::boss_murmur(), boss_omor_the_unscarred::boss_omor_the_unscarred(), boss_ouro::boss_ouro(), boss_yoggsaron_constrictor_tentacle::boss_yoggsaron_constrictor_tentacleAI::boss_yoggsaron_constrictor_tentacleAI(), boss_yoggsaron_corruptor_tentacle::boss_yoggsaron_corruptor_tentacleAI::boss_yoggsaron_corruptor_tentacleAI(), boss_yoggsaron_crusher_tentacle::boss_yoggsaron_crusher_tentacleAI::boss_yoggsaron_crusher_tentacleAI(), boss_jedoga_shadowseeker::DamageTaken(), boss_illidan_stormrage::DoAction(), npc_toxic_slime::InitializeAI(), npc_escortAI::JustRespawned(), FollowerAI::JustRespawned(), npc_flame_of_azzinoth::JustSummoned(), boss_zuljin::MovementInform(), boss_ayamiss::MovementInform(), boss_felmyst::MovementInform(), boss_jedoga_shadowseeker::MovementInform(), npc_andorhal_tower::npc_andorhal_towerAI::npc_andorhal_towerAI(), npc_blessed_banner::npc_blessed_bannerAI::npc_blessed_bannerAI(), npc_buru_egg::npc_buru_egg(), 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_guardian_pavilion::npc_guardian_pavilionAI::npc_guardian_pavilionAI(), npc_target_dummy::npc_target_dummyAI::npc_target_dummyAI(), npc_tiger_matriarch_credit::npc_tiger_matriarch_creditAI::npc_tiger_matriarch_creditAI(), npc_tournament_training_dummy::npc_tournament_training_dummyAI::npc_tournament_training_dummyAI(), npc_training_dummy::npc_training_dummyAI::npc_training_dummyAI(), npc_warmage_coldarra::npc_warmage_coldarraAI::npc_warmage_coldarraAI(), npc_warmage_violetstand::npc_warmage_violetstand(), boss_jeklik::PathEndReached(), boss_quartermaster_zigris::Reset(), boss_felmyst::Reset(), npc_sunblade_scout::Reset(), boss_zuljin::Reset(), npc_amanishi_scout::Reset(), boss_ayamiss::Reset(), boss_illidan_stormrage::Reset(), boss_felmyst::ScheduleGroundAbilities(), boss_quartermaster_zigris::UpdateAI(), and boss_jormungarAI::UpdateAI().

◆ SetCombatPulseDelay()

void Creature::SetCombatPulseDelay ( uint32  delay)
inline
300 {
301 m_combatPulseDelay = delay;
302 if (m_combatPulseTime == 0 || m_combatPulseTime > delay)
303 m_combatPulseTime = delay;
304 }

References m_combatPulseDelay, and m_combatPulseTime.

Referenced by BossAI::_JustEngagedWith(), and BossAI::_Reset().

◆ SetCorpseDelay()

void Creature::SetCorpseDelay ( uint32  delay)
inline
70{ m_corpseDelay = delay; }

References m_corpseDelay.

Referenced by boss_brutallus::boss_brutallus(), npc_raging_flames::InitializeAI(), npc_pallid_horror::InitializeAI(), npc_flame_of_azzinoth::IsSummonedBy(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::JustDied(), npc_hor_raging_ghoul::npc_hor_raging_ghoulAI::JustDied(), npc_hor_risen_witch_doctor::npc_hor_risen_witch_doctorAI::JustDied(), npc_hor_lumbering_abomination::npc_hor_lumbering_abominationAI::JustDied(), npc_mindless_ghoul::npc_mindless_ghoulAI::JustDied(), boss_hazzarah::JustSummoned(), npc_minion_spawner::JustSummoned(), npc_anubarak_spike::npc_anubarak_spikeAI::npc_anubarak_spikeAI(), npc_frost_sphere::npc_frost_sphereAI::npc_frost_sphereAI(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::npc_highlord_darion_mograineAI(), npc_mindless_ghoul::npc_mindless_ghoulAI::npc_mindless_ghoulAI(), instance_black_temple::instance_black_temple_InstanceMapScript::OnCreatureCreate(), ValithriaDespawner::operator()(), 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_swarm_scarab::npc_swarm_scarabAI::Reset(), npc_nerubian_burrower::npc_nerubian_burrowerAI::Reset(), npc_lk_wicked_spirit::npc_lk_wicked_spiritAI::Reset(), npc_valithria_cloud::npc_valithria_cloudAI::Reset(), npc_argent_captainAI::Reset(), npc_heated_battle::npc_heated_battleAI::Reset(), npc_q24545_wretched_ghoul::npc_q24545_wretched_ghoulAI::Reset(), npc_cultist_engineer::Reset(), and boss_svala::boss_svalaAI::UpdateAI().

◆ SetCorpseRemoveTime()

void Creature::SetCorpseRemoveTime ( uint32  delay)

◆ SetCurrentEquipmentId()

void Creature::SetCurrentEquipmentId ( uint8  id)
inline

◆ setDeathState()

void Creature::setDeathState ( DeathState  state,
bool  despawn = false 
)
overridevirtual

A creature can be in 4 different states: Alive, JustDied, Corpse, and JustRespawned. The cycle follows the next order:

  • Alive: The creature is alive and has spawned in the world
  • JustDied: The creature has just died. This is the state just before his body appeared
  • Corpse: The creature has been removed from the world, and this corpse has been spawned
  • JustRespawned: The creature has just respawned. Follow when the corpse disappears and the respawn timer is finished
Parameters
stateSpecify one of 4 states above
despawnDespawn the creature immediately, without waiting for any movement to finish

Reimplemented from Unit.

Reimplemented in Minion, and Pet.

1971{
1972 Unit::setDeathState(state, despawn);
1973
1974 if (state == DeathState::JustDied)
1975 {
1977 uint32 dynamicRespawnDelay = GetMap()->ApplyDynamicModeRespawnScaling(this, m_respawnDelay);
1978 m_respawnTime = GameTime::GetGameTime().count() + dynamicRespawnDelay + m_corpseDelay;
1979
1980 // always save boss respawn time at death to prevent crash cheating
1981 if (GetMap()->IsDungeon() || isWorldBoss() || GetCreatureTemplate()->rank >= CREATURE_ELITE_ELITE)
1983
1984 SetTarget(); // remove target selection in any cases (can be set at aura remove in Unit::setDeathState)
1986
1987 Dismount(); // if creature is mounted on a virtual mount, remove it at death
1988
1989 setActive(false);
1990
1992 {
1993 SetNoSearchAssistance(false);
1994 }
1995
1996 //Dismiss group if is leader
1997 if (m_formation && m_formation->GetLeader() == this)
1998 m_formation->FormationReset(true, false);
1999
2000 bool needsFalling = !despawn && (IsFlying() || IsHovering()) && !IsUnderWater();
2001 SetHover(false, false, false);
2002 SetDisableGravity(false, false, false);
2003
2004 if (needsFalling)
2005 GetMotionMaster()->MoveFall(0, true);
2006
2008 }
2009 else if (state == DeathState::JustRespawned)
2010 {
2011 SetFullHealth();
2012 SetLootRecipient(nullptr);
2015 CreatureTemplate const* cinfo = GetCreatureTemplate();
2016 // Xinef: npc run by default
2017 //SetWalk(true);
2018
2019 // pussywizard:
2022
2024
2028
2030
2032 LoadCreaturesAddon(true);
2034
2035 if (GetCreatureData() && GetPhaseMask() != GetCreatureData()->phaseMask)
2036 SetPhaseMask(GetCreatureData()->phaseMask, false);
2037 }
2038}
SpellSchools
Definition SharedDefines.h:282
@ MOVEMENTFLAG_FALLING
Definition UnitDefines.h:377
NPCFlags
Non Player Character flags.
Definition UnitDefines.h:313
@ UNIT_NPC_FLAG_NONE
Definition UnitDefines.h:314
@ UNIT_STATE_ALL_STATE
Definition UnitDefines.h:220
@ UNIT_STATE_NO_ENVIRONMENT_UPD
Definition UnitDefines.h:198
bool HasSearchedAssistance()
Definition Creature.h:273
void SetLootRecipient(Unit *unit, bool withGroup=true)
Definition Creature.cpp:1331
bool SetDisableGravity(bool disable, bool packetOnly=false, bool updateAnimationTier=true) override
Enable or disable the creature's fly mode by adding or removing: MOVEMENTFLAG_FLYING....
Definition Creature.cpp:3220
void SetCannotReachTarget(ObjectGuid const &target=ObjectGuid::Empty)
Definition Creature.cpp:3675
bool SetHover(bool enable, bool packetOnly=false, bool updateAnimationTier=true) override
Definition Creature.cpp:3385
void SetMeleeDamageSchool(SpellSchools school)
Definition Creature.h:166
uint32 ApplyDynamicModeRespawnScaling(WorldObject const *obj, uint32 respawnDelay) const
Definition Map.cpp:1705
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:627
virtual void setDeathState(DeathState s, bool despawn=false)
Definition Unit.cpp:14645
void SetFullHealth()
Definition Unit.h:1049
void Dismount()
Definition Unit.cpp:13609
bool HasUnitMovementFlag(uint32 f) const
Definition Unit.h:729
virtual bool IsUnderWater() const
Definition Unit.cpp:4400
void RemoveUnitMovementFlag(uint32 f)
Definition Unit.h:728
void ReplaceAllNpcFlags(NPCFlags flags)
Definition Unit.h:721
void setActive(bool isActiveObject)
Definition Object.cpp:1076
uint32 dmgschool
Definition CreatureData.h:207

References Alive, Map::ApplyDynamicModeRespawnScaling(), Unit::ClearUnitState(), Corpse, CREATURE_ELITE_ELITE, Unit::Dismount(), CreatureTemplate::dmgschool, CreatureGroup::FormationReset(), GetCreatureData(), GetCreatureTemplate(), GameTime::GetGameTime(), CreatureGroup::GetLeader(), WorldObject::GetMap(), Unit::GetMotionMaster(), WorldObject::GetPhaseMask(), HasSearchedAssistance(), Unit::HasUnitMovementFlag(), Unit::IsFlying(), Unit::IsHovering(), Unit::IsUnderWater(), isWorldBoss(), JustDied, JustRespawned, LoadCreaturesAddon(), LoadSparringPct(), m_corpseDelay, m_corpseRemoveTime, m_formation, m_respawnDelay, m_respawnTime, Motion_Initialize(), MotionMaster::MoveFall(), MOVEMENTFLAG_FALLING, CreatureTemplate::npcflag, Unit::RemoveUnitMovementFlag(), Unit::ReplaceAllNpcFlags(), ResetPlayerDamageReq(), SaveRespawnTime(), WorldObject::setActive(), SetCannotReachTarget(), Unit::setDeathState(), SetDisableGravity(), Unit::SetFullHealth(), SetHover(), SetLootRecipient(), SetMeleeDamageSchool(), SetNoSearchAssistance(), Unit::SetPhaseMask(), SetTarget(), UNIT_NPC_FLAG_NONE, UNIT_STATE_ALL_STATE, UNIT_STATE_IGNORE_PATHFINDING, UNIT_STATE_NO_ENVIRONMENT_UPD, and UpdateMovementFlags().

Referenced by BattlegroundAV::AddAVCreature(), DisappearAndDie(), npc_auriaya_feral_defender::npc_auriaya_feral_defenderAI::DoAction(), boss_freya_summons::boss_freya_summonsAI::DoAction(), ForcedDespawn(), npc_commandscript::HandleNpcMoveCommand(), npc_commandscript::HandleNpcSetMoveTypeCommand(), npc_commandscript::HandleNpcSetWanderDistanceCommand(), npc_echo_of_medivh::HandlePieceJustDied(), npc_nether_drake::npc_nether_drakeAI::MovementInform(), instance_ulduar::instance_ulduar_InstanceMapScript::OnCreatureCreate(), RemoveCorpse(), Respawn(), npc_simone::npc_simoneAI::RespawnPet(), Minion::setDeathState(), Pet::setDeathState(), npc_argent_captainAI::SpellHit(), npc_drakuru_shackles::npc_drakuru_shacklesAI::SpellHit(), npc_escortAI::UpdateAI(), npc_a_special_surprise::npc_a_special_surpriseAI::UpdateAI(), npc_clintar_spirit::npc_clintar_spiritAI::UpdateAI(), and npc_injured_patient::npc_injured_patientAI::UpdateAI().

◆ SetDefaultMovementType()

◆ SetDetectionDistance()

void Creature::SetDetectionDistance ( float  dist)
inline
211{ m_detectionDistance = dist; }

References m_detectionDistance.

Referenced by UpdateEntry().

◆ SetDisableGravity()

bool Creature::SetDisableGravity ( bool  disable,
bool  packetOnly = false,
bool  updateAnimationTier = true 
)
overridevirtual

Enable or disable the creature's fly mode by adding or removing: MOVEMENTFLAG_FLYING. Infom also the client.

It's possible only a packet is sent but moveflags are not updated Need more research on this

movement counter

Reimplemented from Unit.

3221{
3224 if (!packetOnly && !Unit::SetDisableGravity(disable))
3225 return false;
3226
3227 if (m_movedByPlayer)
3228 {
3230 data << GetPackGUID();
3231 data << uint32(0);
3233
3235 data << GetPackGUID();
3236 BuildMovementPacket(&data);
3237 m_movedByPlayer->ToPlayer()->SendMessageToSet(&data, false);
3238 return true;
3239 }
3240
3241 if (updateAnimationTier && IsAlive() && !HasUnitState(UNIT_STATE_ROOT) && !IsRooted())
3242 {
3243 if (IsLevitating())
3245 else if (IsHovering())
3247 else
3249 }
3250
3252 data << GetPackGUID();
3253 SendMessageToSet(&data, false);
3254 return true;
3255}
@ UNIT_BYTE1_FLAG_FLY
Definition UnitDefines.h:61
@ UNIT_BYTE1_FLAG_GROUND
Definition UnitDefines.h:58
@ UNIT_BYTE1_FLAG_HOVER
Definition UnitDefines.h:60
@ UNIT_STATE_ROOT
Definition UnitDefines.h:180
bool IsRooted() const
Definition Creature.h:84
bool IsLevitating() const
Definition Unit.h:1620
virtual bool SetDisableGravity(bool disable, bool packetOnly=false, bool updateAnimationTier=true)
Definition Unit.cpp:20423
@ 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
@ MSG_MOVE_GRAVITY_CHNG
Definition Opcodes.h:1264

References Unit::BuildMovementPacket(), Object::GetPackGUID(), Unit::HasUnitState(), WorldPacket::Initialize(), Unit::IsAlive(), Unit::IsHovering(), Unit::IsLevitating(), IsRooted(), Unit::m_movedByPlayer, MSG_MOVE_GRAVITY_CHNG, Player::SendDirectMessage(), WorldObject::SendMessageToSet(), Player::SendMessageToSet(), Object::SetByteValue(), Unit::SetDisableGravity(), SMSG_MOVE_GRAVITY_DISABLE, SMSG_MOVE_GRAVITY_ENABLE, SMSG_SPLINE_MOVE_GRAVITY_DISABLE, SMSG_SPLINE_MOVE_GRAVITY_ENABLE, Object::ToPlayer(), UNIT_BYTE1_FLAG_FLY, UNIT_BYTE1_FLAG_GROUND, UNIT_BYTE1_FLAG_HOVER, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_FIELD_BYTES_1, and UNIT_STATE_ROOT.

Referenced by boss_twin_valkyrAI::boss_twin_valkyrAI(), boss_yoggsaron_brain::boss_yoggsaron_brainAI::boss_yoggsaron_brainAI(), 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::boss_algalon_the_observerAI::DoAction(), npc_madrigosa::DoAction(), boss_kalecgos::DoAction(), npc_kalecgos_kj::DoAction(), boss_illidan_stormrage::DoAction(), boss_nightbane::EnterEvadeMode(), boss_malygos::boss_malygosAI::EnterEvadeMode(), boss_urom::boss_uromAI::EnterEvadeMode(), boss_razorscale::boss_razorscaleAI::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(), boss_felmyst::InitializeAI(), boss_taldaram::InitializeAI(), npc_icc_nerubar_broodkeeper::npc_icc_nerubar_broodkeeperAI::InitializeAI(), boss_malygos::boss_malygosAI::InitializeAI(), boss_razorscale::boss_razorscaleAI::InitializeAI(), npc_pet_dk_ebon_gargoyle::InitializeAI(), boss_urom::boss_uromAI::JustDied(), boss_kologarn::boss_kologarnAI::JustDied(), boss_ayamiss::JustEngagedWith(), boss_jeklik::JustEngagedWith(), boss_saviana_ragefire::boss_saviana_ragefireAI::JustReachedHome(), npc_spinestalker::npc_spinestalkerAI::JustReachedHome(), npc_rimefang::npc_rimefangAI::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::boss_algalon_the_observerAI::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::boss_malygosAI::MovementInform(), npc_oculus_drake::npc_oculus_drakeAI::MovementInform(), boss_razorscale::boss_razorscaleAI::MovementInform(), npc_enslaved_proto_drake::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_jedoga_shadowseeker::MovementInform(), npc_alexstrasza::npc_alexstraszaAI::npc_alexstraszaAI(), 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_unitAI::npc_ulduar_aerial_command_unitAI(), instance_ulduar::instance_ulduar_InstanceMapScript::OnCreatureCreate(), npc_vehicle_d16_propelled_delivery::npc_vehicle_d16_propelled_deliveryAI::PassengerBoarded(), npc_eoe_wyrmrest_skytalon::npc_eoe_wyrmrest_skytalonAI::PassengerBoarded(), npc_oculus_drake::npc_oculus_drakeAI::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(), 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(), boss_sister_svalna::boss_sister_svalnaAI::Reset(), npc_icc_spire_frostwyrm::Reset(), boss_stormcaller_brundir::boss_stormcaller_brundirAI::Reset(), boss_kologarn::boss_kologarnAI::Reset(), boss_thorim_pillar::boss_thorim_pillarAI::Reset(), boss_yoggsaron_sara::boss_yoggsaron_saraAI::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(), npc_enslaved_proto_drake::SetData(), 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::boss_malygosAI::UpdateAI(), boss_urom::boss_uromAI::UpdateAI(), npc_oculus_drake::npc_oculus_drakeAI::UpdateAI(), boss_stormcaller_brundir::boss_stormcaller_brundirAI::UpdateAI(), boss_mimiron::boss_mimironAI::UpdateAI(), boss_razorscale::boss_razorscaleAI::UpdateAI(), npc_wintergarde_gryphon::UpdateAI(), npc_pet_gen_wind_rider_cub::UpdateAI(), and UpdateMovementFlags().

◆ SetDisplayFromModel()

void Creature::SetDisplayFromModel ( uint32  modelIdx)
3555{
3556 if (CreatureModel const* model = GetCreatureTemplate()->GetModelByIdx(modelIdx))
3557 SetDisplayId(model->CreatureDisplayID, model->DisplayScale);
3558}

References GetCreatureTemplate(), and SetDisplayId().

Referenced by npc_scarlet_miner_cart::npc_scarlet_miner_cartAI::npc_scarlet_miner_cartAI().

◆ SetDisplayId()

void Creature::SetDisplayId ( uint32  displayId,
float  displayScale = 1.f 
)
overridevirtual

Reimplemented from Unit.

Reimplemented in Pet.

3534{
3535 Unit::SetDisplayId(modelId, displayScale);
3536
3537 float combatReach = DEFAULT_WORLD_OBJECT_SIZE;
3538
3539 if (CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelInfo(modelId))
3540 {
3541 SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, (IsPet() ? 1.0f : minfo->bounding_radius) * GetObjectScale());
3542 if (minfo->combat_reach > 0)
3543 combatReach = minfo->combat_reach;
3544 }
3545
3546 if (IsPet())
3547 combatReach = DEFAULT_COMBAT_REACH;
3548
3549 SetObjectScale(displayScale);
3550
3552}
#define DEFAULT_WORLD_OBJECT_SIZE
Definition ObjectDefines.h:45
#define DEFAULT_COMBAT_REACH
Definition ObjectDefines.h:46
@ UNIT_FIELD_COMBATREACH
Definition UpdateFields.h:123
@ UNIT_FIELD_BOUNDINGRADIUS
Definition UpdateFields.h:122
float GetObjectScale() const
Definition Object.h:119
virtual void SetDisplayId(uint32 modelId, float displayScale=1.f)
Definition Unit.cpp:16836

References DEFAULT_COMBAT_REACH, DEFAULT_WORLD_OBJECT_SIZE, Object::GetObjectScale(), Unit::IsPet(), Unit::SetDisplayId(), Object::SetFloatValue(), SetObjectScale(), sObjectMgr, UNIT_FIELD_BOUNDINGRADIUS, and UNIT_FIELD_COMBATREACH.

Referenced by npc_q24545_wretched_ghoul::npc_q24545_wretched_ghoulAI::Activate(), Create(), npc_terenas_menethil::npc_terenas_menethilAI::DamageTaken(), npc_q24545_wretched_ghoul::npc_q24545_wretched_ghoulAI::Deactivate(), npc_icc_severed_essence::npc_icc_severed_essenceAI::DoAction(), npc_shattrath_daily_quest::DoAction(), npc_blade_of_azzinoth::DoAction(), boss_ichoron::boss_ichoronAI::DoExplodeCompleted(), SACDeactivateEvent::Execute(), npc_anachronos_the_ancient::npc_anachronos_the_ancientAI::HandleAnimation(), npc_commandscript::HandleNpcSetModelCommand(), wp_commandscript::HandleWpShowCommand(), InitEntry(), npc_troll_volunteer::npc_troll_volunteerAI::InitializeAI(), Totem::InitStats(), Guardian::InitStatsForLevel(), npc_eoe_wyrmrest_skytalon::npc_eoe_wyrmrest_skytalonAI::JustDied(), boss_ichoron::boss_ichoronAI::JustDied(), boss_tharon_ja::boss_tharon_jaAI::JustDied(), npc_scholomance_occultist::npc_scholomance_occultistAI::JustReachedHome(), npc_cw_area_trigger::npc_cw_area_triggerAI::npc_cw_area_triggerAI(), npc_grizzlemaw_cw_trigger::npc_grizzlemaw_cw_triggerAI::npc_grizzlemaw_cw_triggerAI(), npc_the_biggest_tree::npc_the_biggest_tree(), npc_eoe_wyrmrest_skytalon::npc_eoe_wyrmrest_skytalonAI::PassengerBoarded(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::ReorderInstance(), boss_black_knight::boss_black_knightAI::Reset(), boss_tharon_ja::boss_tharon_jaAI::Reset(), boss_yoggsaron_sara::boss_yoggsaron_saraAI::Reset(), boss_ingvar_the_plunderer::Reset(), boss_ichoron::boss_ichoronAI::Reset(), boss_laj::Reset(), npc_infernal_attacker::npc_infernal_attackerAI::Reset(), Respawn(), boss_laj::ScheduleTasks(), SetDisplayFromModel(), Pet::SetDisplayId(), npc_netherspite_infernal::SpellHit(), boss_valithria_dreamwalker::boss_valithria_dreamwalkerAI::SpellHit(), npc_infernal_attacker::npc_infernal_attackerAI::SpellHit(), boss_black_knight::boss_black_knightAI::SpellHitTarget(), npc_lord_illidan_stormrage::npc_lord_illidan_stormrageAI::SummonNextWave(), npc_vaelastrasz_the_red::npc_vaelastrasz_the_redAI::UpdateAI(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UpdateAI(), npc_frost_sphere::npc_frost_sphereAI::UpdateAI(), boss_tharon_ja::boss_tharon_jaAI::UpdateAI(), npc_pos_collapsing_icicle::npc_pos_collapsing_icicleAI::UpdateAI(), npc_terenas_menethil::npc_terenas_menethilAI::UpdateAI(), npc_blistering_zombie::npc_blistering_zombieAI::UpdateAI(), npc_ulduar_icicle::npc_ulduar_icicleAI::UpdateAI(), boss_yoggsaron_sara::boss_yoggsaron_saraAI::UpdateAI(), npc_azure_saboteur::npc_azure_saboteurAI::UpdateAI(), and boss_ichoron::boss_ichoronAI::UpdateAI().

◆ SetFeatherFall()

bool Creature::SetFeatherFall ( bool  enable,
bool  packetOnly = false 
)
overridevirtual

movement counter

Reimplemented from Unit.

3361{
3362 if (!packetOnly && !Unit::SetFeatherFall(enable))
3363 return false;
3364
3365 if (m_movedByPlayer)
3366 {
3368 data << GetPackGUID();
3369 data << uint32(0);
3371
3373 data << GetPackGUID();
3374 BuildMovementPacket(&data);
3375 m_movedByPlayer->ToPlayer()->SendMessageToSet(&data, false);
3376 return true;
3377 }
3378
3380 data << GetPackGUID();
3381 SendMessageToSet(&data, true);
3382 return true;
3383}
virtual bool SetFeatherFall(bool enable, bool packetOnly=false)
Definition Unit.cpp:20510
@ SMSG_MOVE_FEATHER_FALL
Definition Opcodes.h:272
@ SMSG_MOVE_NORMAL_FALL
Definition Opcodes.h:273
@ MSG_MOVE_FEATHER_FALL
Definition Opcodes.h:718
@ SMSG_SPLINE_MOVE_NORMAL_FALL
Definition Opcodes.h:804
@ SMSG_SPLINE_MOVE_FEATHER_FALL
Definition Opcodes.h:803

References Unit::BuildMovementPacket(), Object::GetPackGUID(), WorldPacket::Initialize(), Unit::m_movedByPlayer, MSG_MOVE_FEATHER_FALL, Player::SendDirectMessage(), WorldObject::SendMessageToSet(), Player::SendMessageToSet(), Unit::SetFeatherFall(), SMSG_MOVE_FEATHER_FALL, SMSG_MOVE_NORMAL_FALL, SMSG_SPLINE_MOVE_FEATHER_FALL, SMSG_SPLINE_MOVE_NORMAL_FALL, and Object::ToPlayer().

◆ SetFormation()

void Creature::SetFormation ( CreatureGroup formation)
inline
359{ m_formation = formation; }

References m_formation.

Referenced by CreatureGroup::AddMember(), and CreatureGroup::RemoveMember().

◆ SetHomePosition() [1/2]

void Creature::SetHomePosition ( const Position pos)
inline

◆ SetHomePosition() [2/2]

void Creature::SetHomePosition ( float  x,
float  y,
float  z,
float  o 
)
inline
340{ m_homePosition.Relocate(x, y, z, o); }

References m_homePosition, and Position::Relocate().

Referenced by Battleground::AddCreature(), boss_loatheb::boss_loathebAI::boss_loathebAI(), MotionTransport::CreateNPCPassenger(), npc_weegli_blastfuse::npc_weegli_blastfuseAI::DestroyDoor(), boss_taldaram::DoAction(), npc_icc_spire_frostwyrm::DoAction(), boss_algalon_the_observer::boss_algalon_the_observerAI::DoAction(), boss_tyrannus::boss_tyrannusAI::DoAction(), boss_nightbane::EnterEvadeMode(), boss_ayamiss::EnterEvadeMode(), violet_hold_trashAI::EnterEvadeMode(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::GoSiphon(), WorldSession::HandleBattlemasterHelloOpcode(), WorldSession::HandleGossipHelloOpcode(), spell_item_toxic_wasteling::HandleJump(), WorldSession::HandleQuestgiverHelloOpcode(), boss_eck::boss_eckAI::InitializeAI(), boss_flame_leviathan::boss_flame_leviathanAI::InitializeAI(), boss_aeonus::IsSummonedBy(), npc_simone::npc_simoneAI::JustDied(), boss_mandokir::boss_mandokirAI::JustEngagedWith(), boss_urom::boss_uromAI::JustEngagedWith(), boss_flame_leviathan::boss_flame_leviathanAI::JustEngagedWith(), boss_kelthuzad::boss_kelthuzadAI::JustSummoned(), npc_daphne_stilwell::npc_daphne_stilwellAI::JustSummoned(), npc_hor_lich_king::npc_hor_lich_kingAI::JustSummoned(), boss_the_lich_king::boss_the_lich_kingAI::JustSummoned(), boss_algalon_the_observer::boss_algalon_the_observerAI::JustSummoned(), CreatureGroup::LeaderMoveTo(), LoadCreatureFromDB(), boss_nalorakk::MoveInLineOfSight(), npc_aged_dying_ancient_kodo::npc_aged_dying_ancient_kodoAI::MoveInLineOfSight(), npc_icc_nerubar_broodkeeper::npc_icc_nerubar_broodkeeperAI::MoveInLineOfSight(), boss_mandokir::boss_mandokirAI::MovementInform(), npc_enslaved_proto_drake::MovementInform(), npc_akama_illidan::MovementInform(), boss_sindragosa::boss_sindragosaAI::MovementInform(), npc_spinestalker::npc_spinestalkerAI::MovementInform(), npc_rimefang::npc_rimefangAI::MovementInform(), npc_akama_shade::MovementInform(), npc_omen::npc_omenAI::MovementInform(), npc_gunship_boarding_addAI::MovementInform(), boss_ghazan::MovementInform(), npc_escortAI::MovementInform(), SmartAI::MovepointReached(), SmartScript::ProcessAction(), RemoveCorpse(), instance_culling_of_stratholme::instance_culling_of_stratholme_InstanceMapScript::Reposition(), instance_old_hillsbrad::instance_old_hillsbrad_InstanceMapScript::Reposition(), boss_arlokk::boss_arlokkAI::Reset(), boss_jeklik::Reset(), npc_simone::npc_simoneAI::RespawnPet(), WorldSession::SendListInventory(), gunship_npc_AI::SetData(), NPCStaveQuestAI::SetHomePosition(), Battlefield::SpawnCreature(), boss_urom::boss_uromAI::SpellHit(), boss_majordomo::boss_majordomoAI::SpellHit(), boss_ionar::boss_ionarAI::Split(), WaypointMovementGenerator< Creature >::StartMove(), Map::SummonCreature(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::UpdateAI(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UpdateAI(), npc_twilight_volunteer::UpdateAI(), npc_pos_martin_or_gorkun_second::npc_pos_martin_or_gorkun_secondAI::UpdateAI(), npc_icc_vengeful_fleshreaper::npc_icc_vengeful_fleshreaperAI::UpdateAI(), violet_hold_trashAI::UpdateAI(), npc_azure_saboteur::npc_azure_saboteurAI::UpdateAI(), npc_thassarian2::npc_thassarian2AI::UpdateAI(), npc_millhouse_manastorm::npc_millhouse_manastormAI::UpdateAI(), and MotionTransport::UpdatePassengerPositions().

◆ SetHover()

bool Creature::SetHover ( bool  enable,
bool  packetOnly = false,
bool  updateAnimationTier = true 
)
overridevirtual

Reimplemented from Unit.

3386{
3387 if (!packetOnly && !Unit::SetHover(enable))
3388 return false;
3389
3390 if (updateAnimationTier && IsAlive() && !HasUnitState(UNIT_STATE_ROOT) && !IsRooted())
3391 {
3392 if (IsLevitating())
3394 else if (IsHovering())
3396 else
3398 }
3399
3401 data << GetPackGUID();
3402 SendMessageToSet(&data, false);
3403 return true;
3404}
virtual bool SetHover(bool enable, bool packetOnly=false, bool updateAnimationTier=true)
Definition Unit.cpp:20532
@ SMSG_SPLINE_MOVE_SET_HOVER
Definition Opcodes.h:805
@ SMSG_SPLINE_MOVE_UNSET_HOVER
Definition Opcodes.h:806

References Object::GetPackGUID(), Unit::HasUnitState(), Unit::IsAlive(), Unit::IsHovering(), Unit::IsLevitating(), IsRooted(), WorldObject::SendMessageToSet(), Object::SetByteValue(), Unit::SetHover(), SMSG_SPLINE_MOVE_SET_HOVER, SMSG_SPLINE_MOVE_UNSET_HOVER, UNIT_BYTE1_FLAG_FLY, UNIT_BYTE1_FLAG_GROUND, UNIT_BYTE1_FLAG_HOVER, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_FIELD_BYTES_1, and UNIT_STATE_ROOT.

Referenced by boss_taldaram::DoAction(), npc_ball_of_flame::npc_ball_of_flameAI::DoAction(), boss_illidan_stormrage::DoAction(), 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_jedoga_shadowseeker::MovementInform(), npc_korkron_or_wildhammer::npc_korkron_or_wildhammer(), npc_depth_charge::npc_depth_chargeAI::Reset(), boss_jedoga_shadowseeker::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(), npc_rizzle_sprysprocket::npc_rizzle_sprysprocketAI::UpdateAI(), boss_jedoga_shadowseeker::UpdateAI(), boss_stormcaller_brundir::boss_stormcaller_brundirAI::UpdateAI(), boss_svala::boss_svalaAI::UpdateAI(), npc_wintergarde_gryphon::UpdateAI(), and UpdateMovementFlags().

◆ SetInCombatWithZone()

void Creature::SetInCombatWithZone ( )

Set in combat all units in the dungeon/raid. Affect only units with IsAIEnabled.

2827{
2828 if (IsAIEnabled)
2829 AI()->DoZoneInCombat();
2830}
void DoZoneInCombat(Creature *creature=nullptr, float maxRangeToNearestTarget=250.0f)
Definition CreatureAI.cpp:108

References AI(), CreatureAI::DoZoneInCombat(), and Unit::IsAIEnabled.

Referenced by npc_ghostly_priest::npc_ghostly_priestAI::DoAction(), npc_phantom_mage::npc_phantom_mageAI::DoAction(), npc_shadowy_mercenary::npc_shadowy_mercenaryAI::DoAction(), npc_spectral_footman::npc_spectral_footmanAI::DoAction(), npc_tortured_rifleman::npc_tortured_riflemanAI::DoAction(), boss_dorothee::DoAction(), boss_roar::DoAction(), boss_strawman::DoAction(), boss_tinhead::DoAction(), npc_ball_of_flame::npc_ball_of_flameAI::DoAction(), npc_green_dragon_combat_trigger::npc_green_dragon_combat_triggerAI::DoAction(), npc_risen_archmage::npc_risen_archmageAI::DoAction(), npc_living_constellation::npc_living_constellationAI::DoAction(), boss_the_lurker_below::DoAction(), boss_broggok::DoAction(), boss_grand_warlock_nethekurse::DoAction(), boss_leotheras_the_blind::DoAction(), boss_drakkari_colossus::boss_drakkari_colossusAI::DoAction(), boss_thaddius_summon::boss_thaddius_summonAI::DoAction(), boss_yoggsaron::boss_yoggsaronAI::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_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_algalon_the_observer::boss_algalon_the_observerAI::EnterEvadeMode(), npc_little_ooze::npc_little_oozeAI::EnterEvadeMode(), npc_big_ooze::npc_big_oozeAI::EnterEvadeMode(), RestoreFight::Execute(), spell_teron_gorefiend_shadowy_construct::HandleEffectApply(), spell_mutate_explode_bug::HandleOnHit(), spell_the_lich_king_vile_spirit_move_target_search::HandleScript(), spell_putricide_mutated_transformation::HandleSummon(), boss_yoggsaron_sara::boss_yoggsaron_saraAI::InitFight(), boss_kiljaeden::InitializeAI(), boss_glob_of_viscidus::InitializeAI(), brann_bronzebeard::brann_bronzebeardAI::InitializeEvent(), npc_corrupted_totem::IsSummonedBy(), npc_living_inferno::npc_living_infernoAI::IsSummonedBy(), npc_parasitic_shadowfiend::IsSummonedBy(), npc_blade_of_azzinoth::IsSummonedBy(), npc_flame_of_azzinoth::IsSummonedBy(), npc_supremus_punch_invisible_stalker::IsSummonedBy(), npc_amanishi_scout::JustEngagedWith(), boss_headless_horseman::JustEngagedWith(), boss_volazj::JustEngagedWith(), boss_twilight_halion::boss_twilight_halionAI::JustEngagedWith(), boss_faction_championsAI::JustEngagedWith(), npc_risen_archmage::npc_risen_archmageAI::JustEngagedWith(), npc_icc_valkyr_herald::npc_icc_valkyr_heraldAI::JustEngagedWith(), boss_kelthuzad_minion::boss_kelthuzad_minionAI::JustEngagedWith(), boss_drakos::boss_drakosAI::JustEngagedWith(), boss_eregos::boss_eregosAI::JustEngagedWith(), boss_urom::boss_uromAI::JustEngagedWith(), boss_varos::boss_varosAI::JustEngagedWith(), boss_bjarngrim::boss_bjarngrimAI::JustEngagedWith(), boss_ionar::boss_ionarAI::JustEngagedWith(), boss_loken::boss_lokenAI::JustEngagedWith(), boss_volkhan::boss_volkhanAI::JustEngagedWith(), boss_algalon_the_observer::boss_algalon_the_observerAI::JustEngagedWith(), boss_flame_leviathan::boss_flame_leviathanAI::JustEngagedWith(), boss_freya::boss_freyaAI::JustEngagedWith(), boss_vezax::boss_vezaxAI::JustEngagedWith(), boss_razorscale::boss_razorscaleAI::JustEngagedWith(), boss_xt002::boss_xt002AI::JustEngagedWith(), boss_skadi::boss_skadiAI::JustEngagedWith(), boss_skadi_grauf::boss_skadi_graufAI::JustEngagedWith(), boss_svala::boss_svalaAI::JustEngagedWith(), npc_frozen_orb::npc_frozen_orbAI::JustEngagedWith(), boss_olm_the_summoner::JustEngagedWith(), boss_kiggler_the_crazed::JustEngagedWith(), boss_blindeye_the_seer::JustEngagedWith(), boss_krosh_firehand::JustEngagedWith(), boss_harbinger_skyriss::JustEngagedWith(), boss_thaddius_summon::boss_thaddius_summonAI::JustEngagedWith(), boss_the_lich_king::boss_the_lich_kingAI::JustEngagedWith(), npc_green_dragon_combat_trigger::npc_green_dragon_combat_triggerAI::JustEngagedWith(), boss_trollgore::boss_trollgoreAI::JustEngagedWith(), boss_sindragosa::boss_sindragosaAI::JustEngagedWith(), boss_gluth::boss_gluthAI::JustEngagedWith(), boss_gothik::boss_gothikAI::JustEngagedWith(), boss_grobbulus::boss_grobbulusAI::JustEngagedWith(), boss_heigan::boss_heiganAI::JustEngagedWith(), boss_loatheb::boss_loathebAI::JustEngagedWith(), boss_maexxna::boss_maexxnaAI::JustEngagedWith(), boss_patchwerk::boss_patchwerkAI::JustEngagedWith(), boss_thaddius::boss_thaddiusAI::JustEngagedWith(), boss_steelbreaker::boss_steelbreakerAI::JustEngagedWith(), boss_runemaster_molgeim::boss_runemaster_molgeimAI::JustEngagedWith(), boss_stormcaller_brundir::boss_stormcaller_brundirAI::JustEngagedWith(), boss_fathomlord_karathress::JustEngagedWith(), boss_magtheridon::JustEngagedWith(), boss_anubrekhan::boss_anubrekhanAI::JustSummoned(), boss_grobbulus::boss_grobbulusAI::JustSummoned(), boss_loatheb::boss_loathebAI::JustSummoned(), boss_maexxna::boss_maexxnaAI::JustSummoned(), boss_auriaya::boss_auriayaAI::JustSummoned(), boss_muru::JustSummoned(), npc_ouro_spawner::JustSummoned(), npc_dirt_mound::JustSummoned(), boss_dalronn_the_controller::JustSummoned(), boss_urom::boss_uromAI::JustSummoned(), npc_hor_lich_king::npc_hor_lich_kingAI::JustSummoned(), boss_curator::JustSummoned(), npc_demonic_vapor_trail::JustSummoned(), npc_kiljaeden_controller::JustSummoned(), npc_amanishi_tempest::JustSummoned(), boss_hazzarah::JustSummoned(), boss_anetheron::JustSummoned(), npc_hive_zara_larva::JustSummoned(), boss_anub_arak::boss_anub_arakAI::JustSummoned(), boss_novos::boss_novosAI::JustSummoned(), boss_slad_ran::boss_slad_ranAI::JustSummoned(), boss_professor_putricide::boss_professor_putricideAI::JustSummoned(), boss_gothik::boss_gothikAI::JustSummoned(), boss_noth::boss_nothAI::JustSummoned(), boss_magus_telestra::JustSummoned(), npc_creature_generator_akama::JustSummoned(), boss_fathomlord_karathress::JustSummoned(), boss_fathomguard_sharkkis::JustSummoned(), boss_fathomguard_tidalvess::JustSummoned(), boss_morogrim_tidewalker::JustSummoned(), boss_omor_the_unscarred::JustSummoned(), boss_vazruden_the_herald::JustSummoned(), boss_high_astromancer_solarian::JustSummoned(), boss_nethermancer_sepethrea::JustSummoned(), boss_muru::MoveInLineOfSight(), boss_reliquary_of_souls::boss_reliquary_of_soulsAI::MoveInLineOfSight(), boss_kaelthas::MoveInLineOfSight(), boss_captain_skarloc::MovementInform(), boss_four_horsemen::boss_four_horsemenAI::MovementInform(), boss_headless_horseman::MovementInform(), boss_sindragosa::boss_sindragosaAI::MovementInform(), boss_sartharion_dragonAI::MovementInform(), boss_jedoga_shadowseeker::MovementInform(), npc_gunship_mage::npc_gunship_mageAI::MovementInform(), npc_ulduar_saronite_animus::npc_ulduar_saronite_animusAI::npc_ulduar_saronite_animusAI(), instance_karazhan::instance_karazhan_InstanceMapScript::OnCreatureCreate(), boss_nightbane::PathEndReached(), boss_julianne::Reset(), boss_entropius::Reset(), boss_headless_horseman_head::Reset(), npc_twilight_summon::npc_twilight_summonAI::Reset(), boss_twilight_halion::boss_twilight_halionAI::Reset(), boss_yoggsaron_guardian_of_ys::boss_yoggsaron_guardian_of_ysAI::Reset(), boss_yoggsaron_crusher_tentacle::boss_yoggsaron_crusher_tentacleAI::Reset(), boss_yoggsaron_immortal_guardian::boss_yoggsaron_immortal_guardianAI::Reset(), boss_darkmaster_gandling::boss_darkmaster_gandlingAI::SetData(), npc_argent_captainAI::SpellHit(), advisor_baseAI::SpellHit(), spell_putricide_ooze_channel::StartAttack(), brann_bronzebeard::brann_bronzebeardAI::SummonCreatures(), Update(), boss_mandokir::boss_mandokirAI::UpdateAI(), boss_krik_thir::boss_krik_thirAI::UpdateAI(), boss_falric::boss_falricAI::UpdateAI(), boss_marwyn::boss_marwynAI::UpdateAI(), npc_phantom_hallucination::npc_phantom_hallucinationAI::UpdateAI(), npc_hor_lich_king::npc_hor_lich_kingAI::UpdateAI(), npc_vengeful_shade::npc_vengeful_shadeAI::UpdateAI(), npc_little_ooze::npc_little_oozeAI::UpdateAI(), npc_big_ooze::npc_big_oozeAI::UpdateAI(), npc_green_dragon_combat_trigger::npc_green_dragon_combat_triggerAI::UpdateAI(), boss_sapphiron::boss_sapphironAI::UpdateAI(), boss_algalon_the_observer::boss_algalon_the_observerAI::UpdateAI(), boss_flame_leviathan::boss_flame_leviathanAI::UpdateAI(), boss_mimiron::boss_mimironAI::UpdateAI(), boss_razorscale::boss_razorscaleAI::UpdateAI(), boss_anzu::UpdateAI(), and npc_onyx_flamecaller::npc_onyx_flamecallerAI::WaypointReached().

◆ SetLastLeashExtensionTimePtr()

void Creature::SetLastLeashExtensionTimePtr ( std::shared_ptr< time_t > const &  timer)
3714{
3716}

References m_lastLeashExtensionTime.

Referenced by Unit::Attack(), and AssistDelayEvent::Execute().

◆ SetLootMode()

◆ SetLootRecipient()

void Creature::SetLootRecipient ( Unit unit,
bool  withGroup = true 
)
1332{
1333 // set the player whose group should receive the right
1334 // to loot the creature after it dies
1335 // should be set to nullptr after the loot disappears
1336
1337 if (!unit)
1338 {
1343 return;
1344 }
1345
1347 if (!player) // normal creature, no player involved
1348 return;
1349
1350 m_lootRecipient = player->GetGUID();
1351
1352 Map* map = GetMap();
1353 if (map && map->IsDungeon() && (isWorldBoss() || IsDungeonBoss()))
1354 {
1356 }
1357
1358 if (withGroup)
1359 {
1360 if (Group* group = player->GetGroup())
1361 {
1362 m_lootRecipientGroup = group->GetGUID().GetCounter();
1363
1364 if (map && map->IsDungeon() && (isWorldBoss() || IsDungeonBoss()))
1365 {
1366 Map::PlayerList const& PlayerList = map->GetPlayers();
1367 for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
1368 {
1369 if (Player* groupMember = i->GetSource())
1370 {
1371 if (groupMember->IsGameMaster() || groupMember->IsSpectator())
1372 {
1373 continue;
1374 }
1375
1376 if (groupMember->GetGroup() == group)
1377 {
1378 AddAllowedLooter(groupMember->GetGUID());
1379 }
1380 }
1381 }
1382 }
1383 }
1384 }
1385 else
1387
1389}
@ UNIT_DYNFLAG_TAPPED
Definition SharedDefines.h:3362
@ UNIT_DYNFLAG_LOOTABLE
Definition SharedDefines.h:3360
bool IsDungeonBoss() const
Definition Creature.cpp:3177
Definition LinkedList.h:139
Definition MapRefMgr.h:26
iterator begin()
Definition MapRefMgr.h:36
iterator end()
Definition MapRefMgr.h:37
Definition Map.h:158
bool IsDungeon() const
Definition Map.h:290
PlayerList const & GetPlayers() const
Definition Map.h:324
void Clear()
Definition ObjectGuid.h:138
virtual void RemoveDynamicFlag(uint32 flag)
Definition Object.h:125
virtual void SetDynamicFlag(uint32 flag)
Definition Object.h:124
Group * GetGroup()
Definition Player.h:2485
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
Definition Unit.cpp:10702
void ResetAllowedLooters()
Definition Object.cpp:3108
void AddAllowedLooter(ObjectGuid guid)
Definition Object.cpp:3098

References WorldObject::AddAllowedLooter(), MapRefMgr::begin(), ObjectGuid::Clear(), MapRefMgr::end(), Unit::GetCharmerOrOwnerPlayerOrPlayerItself(), Player::GetGroup(), Object::GetGUID(), WorldObject::GetMap(), Map::GetPlayers(), Map::IsDungeon(), IsDungeonBoss(), isWorldBoss(), m_lootRecipient, m_lootRecipientGroup, Object::RemoveDynamicFlag(), WorldObject::ResetAllowedLooters(), Object::SetDynamicFlag(), UNIT_DYNFLAG_LOOTABLE, and UNIT_DYNFLAG_TAPPED.

Referenced by CreatureAI::_EnterEvadeMode(), npc_heated_battle::npc_heated_battleAI::DamageTaken(), Unit::DealDamage(), boss_doomrel::boss_doomrelAI::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_pet_hunter_snake_trap::EnterEvadeMode(), npc_escortAI::EnterEvadeMode(), FollowerAI::EnterEvadeMode(), boss_valithria_dreamwalker::boss_valithria_dreamwalkerAI::HealReceived(), boss_razorgore::boss_razorgoreAI::JustDied(), boss_prince_keleseth_icc::boss_prince_kelesethAI::JustEngagedWith(), boss_prince_taldaram_icc::boss_prince_taldaramAI::JustEngagedWith(), boss_prince_valanar_icc::boss_prince_valanarAI::JustEngagedWith(), Unit::Kill(), boss_urom::boss_uromAI::LeaveCombat(), npc_target_dummy::npc_target_dummyAI::Reset(), Player::SendLoot(), setDeathState(), boss_algalon_the_observer::boss_algalon_the_observerAI::UpdateAI(), and npc_target_dummy::npc_target_dummyAI::UpdateAI().

◆ SetLootRewardDisabled()

void Creature::SetLootRewardDisabled ( bool  disable)
inline
365{ DisableLootReward = disable; }

References DisableLootReward.

◆ SetMeleeDamageSchool()

void Creature::SetMeleeDamageSchool ( SpellSchools  school)
inline

◆ SetNoCallAssistance()

◆ SetNoSearchAssistance()

void Creature::SetNoSearchAssistance ( bool  val)
inline

◆ SetObjectScale()

void Creature::SetObjectScale ( float  scale)
overridevirtual

◆ SetOriginalEntry()

void Creature::SetOriginalEntry ( uint32  entry)
inline
373{ m_originalEntry = entry; }

References m_originalEntry.

Referenced by CreateFromProto().

◆ SetPickPocketLootTime()

void Creature::SetPickPocketLootTime ( )
3791{
3793}
time_t const & GetRespawnTime() const
Definition Creature.h:289
uint32 GetCorpseDelay() const
Definition Creature.h:72

References GetCorpseDelay(), GameTime::GetGameTime(), GetRespawnTime(), lootPickPocketRestoreTime, and MINUTE.

Referenced by Player::SendLoot().

◆ SetPosition() [1/2]

void Creature::SetPosition ( const Position pos)
inline

◆ SetPosition() [2/2]

void Creature::SetPosition ( float  x,
float  y,
float  z,
float  o 
)
3170{
3171 if (!Acore::IsValidMapCoord(x, y, z, o))
3172 return;
3173
3174 GetMap()->CreatureRelocation(this, x, y, z, o);
3175}
void CreatureRelocation(Creature *creature, float x, float y, float z, float o)
Definition Map.cpp:784

References Map::CreatureRelocation(), WorldObject::GetMap(), and Acore::IsValidMapCoord().

Referenced by npc_power_spark::npc_power_sparkAI::DamageTaken(), boss_alar::DamageTaken(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::DoAction(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::DoAction(), boss_kelthuzad_minion::boss_kelthuzad_minionAI::DoAction(), boss_alar::DoDiveBomb(), CastArmageddon::Execute(), npc_commandscript::HandleNpcMoveCommand(), boss_ingvar_the_plunderer::JustSummoned(), boss_kiljaeden::JustSummoned(), npc_escortAI::MovementInform(), SmartAI::MovepointReached(), npc_vortex_ride::npc_vortex_rideAI::npc_vortex_rideAI(), instance_pit_of_saron::instance_pit_of_saron_InstanceScript::OnCreatureCreate(), instance_ulduar::instance_ulduar_InstanceMapScript::OnCreatureCreate(), FrostwingGauntletRespawner::operator()(), ValithriaDespawner::operator()(), RemoveCorpse(), npc_valkyr_battle_maiden::npc_valkyr_battle_maidenAI::Reset(), boss_janalai::Reset(), boss_four_horsemen::boss_four_horsemenAI::Reset(), boss_thaddius::boss_thaddiusAI::Reset(), npc_simone::npc_simoneAI::RespawnPet(), npc_highborne_lamenter::npc_highborne_lamenterAI::UpdateAI(), npc_oculus_drakegiver::npc_oculus_drakegiverAI::UpdateAI(), boss_yoggsaron_sara::boss_yoggsaron_saraAI::UpdateAI(), npc_battle_at_valhalas::npc_battle_at_valhalasAI::UpdateAI(), and Unit::UpdateSplinePosition().

◆ SetReactState()

void Creature::SetReactState ( ReactStates  state)
inline

A creature can have 3 ReactStates : Agressive, Passive, Neutral.

  • Agressive : The creature will attack any non friend units in sight
  • Passive : The creature will not attack anyone
  • Neutral : The creature will attack only if attacked
95{ m_reactState = state; }

References m_reactState.

Referenced by boss_halion::boss_halionAI::AttackStart(), boss_faction_championsAI::boss_faction_championsAI(), boss_glob_of_viscidus::boss_glob_of_viscidus(), boss_gormok::boss_gormokAI::boss_gormokAI(), boss_grand_champion::boss_grand_championAI::boss_grand_championAI(), boss_icehowl::boss_icehowlAI::boss_icehowlAI(), boss_jaraxxus::boss_jaraxxusAI::boss_jaraxxusAI(), boss_jarien::boss_jarien(), boss_jormungarAI::boss_jormungarAI(), boss_kiljaeden::boss_kiljaeden(), boss_nalorakk::boss_nalorakk(), boss_sothos::boss_sothos(), boss_the_lich_king::boss_the_lich_kingAI::boss_the_lich_kingAI(), boss_twin_valkyrAI::boss_twin_valkyrAI(), boss_tyrannus::boss_tyrannusAI::boss_tyrannusAI(), boss_valithria_dreamwalker::boss_valithria_dreamwalkerAI::boss_valithria_dreamwalkerAI(), CharmInfo::CharmInfo(), boss_thekal::CheckPhaseTransition(), boss_garfrost::boss_garfrostAI::DamageTaken(), boss_professor_putricide::boss_professor_putricideAI::DamageTaken(), boss_jedoga_shadowseeker::DamageTaken(), boss_grand_champion::boss_grand_championAI::DamageTaken(), npc_terenas_menethil::npc_terenas_menethilAI::DamageTaken(), npc_crystalline_frayer::DamageTaken(), boss_algalon_the_observer::boss_algalon_the_observerAI::DamageTaken(), boss_freya::boss_freyaAI::DamageTaken(), boss_hodir::boss_hodirAI::DamageTaken(), npc_ulduar_leviathan_mkii::npc_ulduar_leviathan_mkiiAI::DamageTaken(), npc_ulduar_vx001::npc_ulduar_vx001AI::DamageTaken(), npc_ulduar_aerial_command_unit::npc_ulduar_aerial_command_unitAI::DamageTaken(), npc_ulduar_arachnopod_destroyer::npc_ulduar_arachnopod_destroyerAI::DamageTaken(), boss_essence_of_suffering::boss_essence_of_sufferingAI::DamageTaken(), boss_essence_of_desire::boss_essence_of_desireAI::DamageTaken(), boss_alar::DamageTaken(), boss_taerar::boss_taerarAI::DamageTaken(), boss_thekal::DamageTaken(), boss_felblood_kaelthas::DamageTaken(), boss_taldaram::DamageTaken(), boss_viscidus::DamageTaken(), boss_the_lich_king::boss_the_lich_kingAI::DamageTaken(), boss_shade_of_aran::DamageTaken(), boss_mal_ganis::boss_mal_ganisAI::DamageTaken(), boss_bug_trio::DamageTaken(), npc_q24545_wretched_ghoul::npc_q24545_wretched_ghoulAI::Deactivate(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::DoAction(), boss_thekal::DoAction(), boss_archimonde::DoAction(), boss_bug_trio::DoAction(), boss_twinemperorsAI::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(), brann_bronzebeard::brann_bronzebeardAI::DoAction(), boss_algalon_the_observer::boss_algalon_the_observerAI::DoAction(), npc_living_constellation::npc_living_constellationAI::DoAction(), boss_the_lurker_below::DoAction(), boss_broggok::DoAction(), boss_felblood_kaelthas::DoAction(), boss_leotheras_the_blind::DoAction(), boss_kalecgos::DoAction(), npc_living_mojo::npc_living_mojoAI::DoAction(), boss_illidan_stormrage::DoAction(), npc_akama_illidan::DoAction(), npc_maiev_illidan::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_nazan::DoAction(), boss_skeram::DoTeleport(), Spell::EffectSummonPet(), Spell::EffectSummonType(), boss_ouro::Emerge(), boss_the_lich_king::boss_the_lich_kingAI::EnterEvadeMode(), boss_zuljin::EnterPhase(), RestoreAttack::Execute(), OrcMoveEvent::Execute(), RestoreFight::Execute(), UtherBatteredHiltEvent::Execute(), StartMovementEvent::Execute(), VileSpiritActivateEvent::Execute(), SACActivateEvent::Execute(), SACDeactivateEvent::Execute(), AssistanceDistractMovementGenerator::Finalize(), npc_pet_dk_ebon_gargoyle::FlyAway(), boss_volkhan::boss_volkhanAI::GoToAnvil(), spell_mc_play_dead_aura::HandleEffectApply(), spell_uldaman_stoned_aura::HandleEffectApply(), spell_gen_feign_death_all_flags::HandleEffectApply(), spell_gen_feign_death_no_dyn_flag::HandleEffectApply(), spell_gen_feign_death_no_prevent_emotes::HandleEffectApply(), spell_mc_play_dead_aura::HandleEffectRemove(), spell_uldaman_stoned_aura::HandleEffectRemove(), boss_ragnaros::boss_ragnarosAI::HandleEmerge(), spell_chapter2_persuasive_strike::HandleHit(), spell_mutate_explode_bug::HandleOnHit(), WorldSession::HandlePetActionHelper(), spell_item_draenic_pale_ale::HandleSummon(), Battlefield::HideNpc(), npc_jenny::Initialize(), npc_wounded_skirmisher::Initialize(), npc_frozen_core::Initialize(), npc_scarlet_ghoul::npc_scarlet_ghoulAI::InitializeAI(), boss_felmyst::InitializeAI(), boss_kiljaeden::InitializeAI(), npc_general_andorov::InitializeAI(), boss_eck::boss_eckAI::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(), boss_sapphiron::boss_sapphironAI::InitializeAI(), npc_lord_arete::npc_lord_areteAI::InitializeAI(), npc_millhouse_manastorm::npc_millhouse_manastormAI::InitializeAI(), npc_pet_mage_mirror_image::InitializeAI(), InitializeReactState(), Minion::InitStats(), Guardian::InitStats(), Puppet::InitStats(), Guardian::InitStatsForLevel(), Totem::InitSummon(), boss_jarien::IsSummonedBy(), boss_sothos::IsSummonedBy(), boss_aeonus::IsSummonedBy(), npc_parasitic_shadowfiend::IsSummonedBy(), npc_blade_of_azzinoth::IsSummonedBy(), npc_flame_of_azzinoth::IsSummonedBy(), npc_supremus_punch_invisible_stalker::IsSummonedBy(), npc_maiev_illidan::IsSummonedBy(), npc_lk_wicked_spirit::npc_lk_wicked_spiritAI::JustDied(), npc_sunblade_scout::JustEngagedWith(), npc_amanishi_scout::JustEngagedWith(), boss_venoxis::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_four_horsemen::boss_four_horsemenAI::JustEngagedWith(), boss_kelthuzad::boss_kelthuzadAI::JustEngagedWith(), boss_warchief_kargath_bladefist::JustEngagedWith(), boss_high_astromancer_solarian::JustEngagedWith(), npc_akama_illidan::JustReachedHome(), npc_lk_wicked_spirit::npc_lk_wicked_spiritAI::JustRespawned(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::JustSummoned(), boss_skeram::JustSummoned(), boss_majordomo::boss_majordomoAI::JustSummoned(), boss_vexallus::JustSummoned(), boss_hazzarah::JustSummoned(), boss_jindo::JustSummoned(), boss_baltharus_the_warborn::boss_baltharus_the_warbornAI::JustSummoned(), boss_novos::boss_novosAI::JustSummoned(), boss_bronjahm::boss_bronjahmAI::JustSummoned(), boss_drakkari_colossus::boss_drakkari_colossusAI::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(), boss_gothik::boss_gothikAI::JustSummoned(), npc_flame_of_azzinoth::JustSummoned(), boss_reliquary_of_souls::boss_reliquary_of_soulsAI::JustSummoned(), boss_lady_vashj::JustSummoned(), boss_kaelthas::JustSummoned(), boss_terestian_illhoof::JustSummoned(), boss_ick::boss_ickAI::KilledUnit(), Pet::LoadPetFromDB(), boss_nalorakk::MoveInLineOfSight(), npc_shattered_hand_scout::MoveInLineOfSight(), boss_zuljin::MovementInform(), boss_ayamiss::MovementInform(), boss_bug_trio::MovementInform(), boss_grand_champion::boss_grand_championAI::MovementInform(), boss_eck::boss_eckAI::MovementInform(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::MovementInform(), boss_sister_svalna::boss_sister_svalnaAI::MovementInform(), boss_four_horsemen::boss_four_horsemenAI::MovementInform(), boss_volkhan::boss_volkhanAI::MovementInform(), boss_illidan_stormrage::MovementInform(), boss_lady_vashj::MovementInform(), boss_nazan::MovementInform(), boss_felmyst::MovementInform(), boss_sindragosa::boss_sindragosaAI::MovementInform(), npc_rimefang::npc_rimefangAI::MovementInform(), boss_kaelthas::MovementInform(), boss_jedoga_shadowseeker::MovementInform(), gunship_npc_AI::MovementInform(), npc_gunship_boarding_addAI::MovementInform(), npc_ball_of_flame::npc_ball_of_flameAI::MovementInform(), boss_warchief_kargath_bladefist::MovementInform(), boss_icehowl::boss_icehowlAI::MovementInform(), MotionMaster::MoveSeekAssistance(), npc_anubarak_spike::npc_anubarak_spikeAI::npc_anubarak_spikeAI(), npc_arcanite_dragonling::npc_arcanite_dragonling(), npc_argent_soldier::npc_argent_soldierAI::npc_argent_soldierAI(), npc_batrider::npc_batrider(), npc_buru_egg::npc_buru_egg(), npc_chess_move_trigger::npc_chess_move_trigger(), npc_concentrated_ball::npc_concentrated_ballAI::npc_concentrated_ballAI(), npc_dark_iron_guzzler::npc_dark_iron_guzzler(), npc_frost_freeze_trap::npc_frost_freeze_trapAI::npc_frost_freeze_trapAI(), npc_grand_magister_rommath::npc_grand_magister_rommathAI::npc_grand_magister_rommathAI(), npc_herald_of_the_lich_king::npc_herald_of_the_lich_king(), npc_hive_zara_larva::npc_hive_zara_larva(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::npc_icc_ice_sphereAI(), npc_ice_tomb::npc_ice_tombAI::npc_ice_tombAI(), npc_living_constellation::npc_living_constellationAI::npc_living_constellationAI(), npc_lk_spirit_bomb::npc_lk_spirit_bombAI::npc_lk_spirit_bombAI(), npc_memory::npc_memoryAI::npc_memoryAI(), npc_minion_spawner::npc_minion_spawner(), npc_necrotic_shard::npc_necrotic_shard(), npc_nexus_lord::npc_nexus_lordAI::npc_nexus_lordAI(), npc_pet_gen_valkyr_guardian::npc_pet_gen_valkyr_guardian(), npc_pilgrims_bounty_chair::npc_pilgrims_bounty_chair(), npc_putricide_oozeAI::npc_putricide_oozeAI(), npc_q24545_vegard::npc_q24545_vegardAI::npc_q24545_vegardAI(), npc_saurfang_event::npc_saurfang_eventAI::npc_saurfang_eventAI(), npc_scarlet_miner::npc_scarlet_minerAI::npc_scarlet_minerAI(), npc_scion_of_eternity::npc_scion_of_eternityAI::npc_scion_of_eternityAI(), npc_snobold_vassal::npc_snobold_vassalAI::npc_snobold_vassalAI(), npc_suppresser::npc_suppresserAI::npc_suppresserAI(), npc_taldaram_flamesphere::npc_taldaram_flamesphere(), npc_target_trigger::npc_target_trigger(), npc_the_lich_king_controller::npc_the_lich_king_controllerAI::npc_the_lich_king_controllerAI(), npc_toxic_slime::npc_toxic_slime(), npc_ulduar_expedition_commander::npc_ulduar_expedition_commanderAI::npc_ulduar_expedition_commanderAI(), npc_ulduar_hodir_druid::npc_ulduar_hodir_druidAI::npc_ulduar_hodir_druidAI(), npc_ulduar_hodir_mage::npc_ulduar_hodir_mageAI::npc_ulduar_hodir_mageAI(), npc_ulduar_hodir_priest::npc_ulduar_hodir_priestAI::npc_ulduar_hodir_priestAI(), npc_ulduar_hodir_shaman::npc_ulduar_hodir_shamanAI::npc_ulduar_hodir_shamanAI(), npc_unworthy_initiate::npc_unworthy_initiateAI::npc_unworthy_initiateAI(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::npc_valkyr_shadowguardAI(), npc_zafod_boombox::npc_zafod_boomboxAI::npc_zafod_boomboxAI(), NullCreatureAI::NullCreatureAI(), spell_halion_twilight_phasing_aura::OnApply(), instance_blackrock_depths::instance_blackrock_depths_InstanceMapScript::OnCreatureCreate(), instance_zulfarrak::instance_zulfarrak_InstanceMapScript::OnCreatureCreate(), instance_trial_of_the_champion::instance_trial_of_the_champion_InstanceMapScript::OnCreatureCreate(), instance_halls_of_reflection::instance_halls_of_reflection_InstanceMapScript::OnCreatureCreate(), boss_shade_of_aran::OnPowerUpdate(), spell_halion_twilight_phasing_aura::OnRemove(), npc_ulduar_arachnopod_destroyer::npc_ulduar_arachnopod_destroyerAI::PassengerBoarded(), PassiveAI::PassiveAI(), boss_nightbane::PathEndReached(), boss_jeklik::PathEndReached(), npc_akama_illidan::PathEndReached(), boss_nefarian::PathEndReached(), PossessedAI::PossessedAI(), npc_dark_iron_attack_generator::PrepareEvent(), PretendToDie(), boss_alar::PretendToDie(), SmartScript::ProcessAction(), boss_lord_valthalak::boss_lord_valthalakAI::Reset(), boss_nefarian::Reset(), boss_vaelastrasz::boss_vaelAI::Reset(), boss_ragnaros::boss_ragnarosAI::Reset(), boss_mr_smite::boss_mr_smiteAI::Reset(), npc_chesspiece::Reset(), boss_midnight::Reset(), boss_nightbane::Reset(), npc_a_special_surprise::npc_a_special_surpriseAI::Reset(), boss_kalecgos::Reset(), boss_muru::Reset(), boss_entropius::Reset(), npc_dark_fiend::Reset(), npc_sunblade_scout::Reset(), boss_nalorakk::Reset(), npc_amanishi_scout::Reset(), boss_jeklik::Reset(), boss_renataki::boss_renatakiAI::Reset(), boss_thekal::Reset(), boss_venoxis::Reset(), npc_brew_bubble::Reset(), npc_hallows_end_soh::Reset(), npc_love_in_air_snivel::Reset(), boss_archimonde::Reset(), boss_onyxia::Reset(), npc_belnistrasz::npc_belnistraszAI::Reset(), boss_ayamiss::Reset(), boss_sartura::Reset(), npc_sartura_royal_guard::Reset(), boss_skeram::Reset(), npc_death_ravager::npc_death_ravagerAI::Reset(), npc_murkdeep::npc_murkdeepAI::Reset(), npc_troll_volunteer::npc_troll_volunteerAI::Reset(), boss_jedoga_shadowseeker::Reset(), boss_taldaram::Reset(), boss_halion::boss_halionAI::Reset(), boss_twilight_halion::boss_twilight_halionAI::Reset(), boss_saviana_ragefire::boss_saviana_ragefireAI::Reset(), boss_eadric::boss_eadricAI::Reset(), boss_paletress::boss_paletressAI::Reset(), boss_black_knight::boss_black_knightAI::Reset(), npc_toc5_player_vehicle::npc_toc5_player_vehicleAI::Reset(), boss_grand_champion::boss_grand_championAI::Reset(), boss_devourer_of_souls::boss_devourer_of_soulsAI::Reset(), boss_garfrost::boss_garfrostAI::Reset(), boss_ick::boss_ickAI::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(), npc_dark_nucleus::npc_dark_nucleusAI::Reset(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::Reset(), boss_deathbringer_saurfang::boss_deathbringer_saurfangAI::Reset(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::Reset(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::Reset(), boss_lord_marrowgar::Reset(), boss_professor_putricide::boss_professor_putricideAI::Reset(), boss_sindragosa::boss_sindragosaAI::Reset(), npc_spinestalker::npc_spinestalkerAI::Reset(), npc_rimefang::npc_rimefangAI::Reset(), boss_the_lich_king::boss_the_lich_kingAI::Reset(), npc_tirion_fordring_tft::npc_tirion_fordringAI::Reset(), npc_lk_wicked_spirit::npc_lk_wicked_spiritAI::Reset(), npc_green_dragon_combat_trigger::npc_green_dragon_combat_triggerAI::Reset(), npc_crok_scourgebane::npc_crok_scourgebaneAI::Reset(), boss_sister_svalna::boss_sister_svalnaAI::Reset(), npc_impaling_spear::npc_impaling_spearAI::Reset(), boss_four_horsemen::boss_four_horsemenAI::Reset(), boss_gluth::boss_gluthAI::Reset(), boss_gothik::boss_gothikAI::Reset(), npc_boss_gothik_minion::npc_boss_gothik_minionAI::Reset(), boss_kelthuzad::boss_kelthuzadAI::Reset(), boss_noth::boss_nothAI::Reset(), boss_sapphiron::boss_sapphironAI::Reset(), npc_oculus_unstable_sphere::npc_oculus_unstable_sphereAI::Reset(), boss_volkhan::boss_volkhanAI::Reset(), brann_bronzebeard::brann_bronzebeardAI::Reset(), boss_algalon_the_observer::boss_algalon_the_observerAI::Reset(), boss_stormcaller_brundir::boss_stormcaller_brundirAI::Reset(), npc_ulduar_iron_construct::npc_ulduar_iron_constructAI::Reset(), npc_ulduar_leviathan_mkii::npc_ulduar_leviathan_mkiiAI::Reset(), boss_thorim_sif::boss_thorim_sifAI::Reset(), npc_beryl_sorcerer::npc_beryl_sorcererAI::Reset(), npc_imprisoned_beryl_sorcerer::npc_imprisoned_beryl_sorcererAI::Reset(), npc_venture_co_straggler::npc_venture_co_stragglerAI::Reset(), npc_voidtraveler::Reset(), npc_akama_illidan::Reset(), boss_shade_of_akama::Reset(), boss_lady_vashj::Reset(), boss_leotheras_the_blind::Reset(), boss_the_lurker_below::Reset(), boss_warlord_kalithresh::Reset(), boss_broggok::Reset(), boss_kelidan_the_breaker::Reset(), boss_vazruden_the_herald::Reset(), boss_magtheridon::Reset(), boss_alar::Reset(), boss_high_astromancer_solarian::Reset(), npc_ancestral_wolf::npc_ancestral_wolfAI::Reset(), npc_wounded_blood_elf::npc_wounded_blood_elfAI::Reset(), npc_bessy::npc_bessyAI::Reset(), npc_enslaved_netherwing_drake::Reset(), npc_pet_dk_ebon_gargoyle::Reset(), emerald_dragonAI::Reset(), npc_cultist_engineer::Reset(), Resurrect(), boss_warbringer_omrogg::ScheduleBurningPhase(), boss_magtheridon::ScheduleCombatEvents(), boss_felmyst::ScheduleGroundAbilities(), boss_warbringer_omrogg::ScheduleNonBurningPhase(), boss_the_lurker_below::SchedulerPhaseOne(), boss_laj::ScheduleTasks(), Unit::SetCharmedBy(), npc_ulduar_leviathan_mkii::npc_ulduar_leviathan_mkiiAI::SetData(), npc_ulduar_aerial_command_unit::npc_ulduar_aerial_command_unitAI::SetData(), gunship_npc_AI::SetData(), npc_gunship_boarding_addAI::SetData(), CreatureAI::SetGazeOn(), BfGraveyard::SetSpirit(), Battlefield::ShowNpc(), boss_viscidus::SoftReset(), npc_cult_fanatic::npc_cult_fanaticAI::SpellHit(), npc_cult_adherent::npc_cult_adherentAI::SpellHit(), npc_ulduar_iron_construct::npc_ulduar_iron_constructAI::SpellHit(), npc_ulduar_leviathan_mkii::npc_ulduar_leviathan_mkiiAI::SpellHit(), npc_ulduar_vx001::npc_ulduar_vx001AI::SpellHit(), npc_ulduar_aerial_command_unit::npc_ulduar_aerial_command_unitAI::SpellHit(), boss_attumen::SpellHit(), npc_venture_co_straggler::npc_venture_co_stragglerAI::SpellHit(), advisor_baseAI::SpellHit(), npc_enslaved_netherwing_drake::SpellHit(), boss_garfrost::boss_garfrostAI::SpellHitTarget(), boss_devourer_of_souls::boss_devourer_of_soulsAI::SpellHitTarget(), boss_ick::boss_ickAI::SpellHitTarget(), npc_wounded_blood_elf::npc_wounded_blood_elfAI::sQuestAccept(), boss_noth::boss_nothAI::StartBalconyPhase(), instance_violet_hold::instance_violet_hold_InstanceMapScript::StartBossEncounter(), boss_lord_valthalak::boss_lord_valthalakAI::StartFighting(), boss_heigan::boss_heiganAI::StartFightPhase(), boss_noth::boss_nothAI::StartGroundPhase(), boss_lord_valthalak::boss_lord_valthalakAI::StartTalking(), boss_ouro::Submerge(), boss_jedoga_shadowseeker::SummonedCreatureDies(), boss_vaelastrasz::boss_vaelAI::UpdateAI(), boss_ragnaros::boss_ragnarosAI::UpdateAI(), boss_mr_smite::boss_mr_smiteAI::UpdateAI(), npc_scarlet_ghoul::npc_scarlet_ghoulAI::UpdateAI(), npc_a_special_surprise::npc_a_special_surpriseAI::UpdateAI(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::UpdateAI(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::UpdateAI(), boss_arlokk::boss_arlokkAI::UpdateAI(), boss_grilek::boss_grilekAI::UpdateAI(), boss_renataki::boss_renatakiAI::UpdateAI(), npc_hallows_end_soh::UpdateAI(), npc_arthas::npc_arthasAI::UpdateAI(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UpdateAI(), boss_onyxia::UpdateAI(), npc_belnistrasz::npc_belnistraszAI::UpdateAI(), boss_sartura::UpdateAI(), npc_sartura_royal_guard::UpdateAI(), boss_skeram::UpdateAI(), npc_murkdeep::npc_murkdeepAI::UpdateAI(), boss_halion::boss_halionAI::UpdateAI(), boss_saviana_ragefire::boss_saviana_ragefireAI::UpdateAI(), npc_memory::npc_memoryAI::UpdateAI(), boss_icehowl::boss_icehowlAI::UpdateAI(), boss_ick::boss_ickAI::UpdateAI(), boss_krick::boss_krickAI::UpdateAI(), npc_pos_tyrannus_events::npc_pos_tyrannus_eventsAI::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_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_terenas_menethil::npc_terenas_menethilAI::UpdateAI(), boss_gothik::boss_gothikAI::UpdateAI(), boss_kelthuzad::boss_kelthuzadAI::UpdateAI(), boss_sapphiron::boss_sapphironAI::UpdateAI(), boss_thaddius::boss_thaddiusAI::UpdateAI(), npc_crystalline_frayer::UpdateAI(), boss_algalon_the_observer::boss_algalon_the_observerAI::UpdateAI(), boss_stormcaller_brundir::boss_stormcaller_brundirAI::UpdateAI(), boss_mimiron::boss_mimironAI::UpdateAI(), npc_lurgglbr::npc_lurgglbrAI::UpdateAI(), npc_q24545_vegard::npc_q24545_vegardAI::UpdateAI(), npc_millhouse_manastorm::npc_millhouse_manastormAI::UpdateAI(), boss_taerar::boss_taerarAI::UpdateAI(), CreatureAI::UpdateVictimWithGaze(), npc_arthas::npc_arthasAI::WaypointReached(), npc_general_andorov::WaypointReached(), and npc_apothecary_hanes::npc_Apothecary_HanesAI::WaypointReached().

◆ SetRegeneratingHealth()

void Creature::SetRegeneratingHealth ( bool  enable)
inline
322{ m_regenHealth = enable; }

References m_regenHealth.

Referenced by boss_yoggsaron_brain::boss_yoggsaron_brainAI::boss_yoggsaron_brainAI(), boss_eadric::boss_eadricAI::DamageTaken(), boss_paletress::boss_paletressAI::DamageTaken(), boss_grand_champion::boss_grand_championAI::DamageTaken(), npc_crystalline_frayer::DamageTaken(), npc_ulduar_arachnopod_destroyer::npc_ulduar_arachnopod_destroyerAI::DamageTaken(), boss_felblood_kaelthas::DamageTaken(), boss_mal_ganis::boss_mal_ganisAI::DamageTaken(), boss_yoggsaron_brain::boss_yoggsaron_brainAI::DamageTaken(), npc_twilight_volunteer::DoAction(), brann_bronzebeard::brann_bronzebeardAI::DoAction(), boss_kalecgos::DoAction(), boss_grand_champion::boss_grand_championAI::DoAction(), gunship_npc_AI::gunship_npc_AI(), npc_frozen_core::Initialize(), boss_drakkari_colossus::boss_drakkari_colossusAI::JustSummoned(), boss_grand_champion::boss_grand_championAI::MovementInform(), npc_wild_wyrm::npc_wild_wyrmAI::MovementInform(), npc_gunship_boarding_addAI::npc_gunship_boarding_addAI(), npc_gunship::npc_gunshipAI::npc_gunshipAI(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::npc_high_overlord_saurfang_igbAI(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::npc_muradin_bronzebeard_igbAI(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::Reset(), boss_stormcaller_brundir::boss_stormcaller_brundirAI::Reset(), npc_ulduar_vx001::npc_ulduar_vx001AI::Reset(), npc_blessed_banner::npc_blessed_bannerAI::Reset(), npc_wild_wyrm::npc_wild_wyrmAI::Reset(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::SetData(), npc_crystalline_frayer::UpdateAI(), and boss_stormcaller_brundir::boss_stormcaller_brundirAI::UpdateAI().

◆ SetRegeneratingPower()

void Creature::SetRegeneratingPower ( bool  enable)
inline
323{ m_regenPower = enable; }

References m_regenPower.

Referenced by boss_moam::Reset().

◆ SetReputationRewardDisabled()

void Creature::SetReputationRewardDisabled ( bool  disable)
inline

◆ SetRespawnDelay()

◆ SetRespawnTime()

◆ SetSwim()

bool Creature::SetSwim ( bool  enable)
overridevirtual

Reimplemented from Unit.

3258{
3259 if (!Unit::SetSwim(enable))
3260 return false;
3261
3263 data << GetPackGUID();
3264 SendMessageToSet(&data, true);
3265 return true;
3266}
virtual bool SetSwim(bool enable)
Definition Unit.cpp:20441
@ SMSG_SPLINE_MOVE_STOP_SWIM
Definition Opcodes.h:810
@ SMSG_SPLINE_MOVE_START_SWIM
Definition Opcodes.h:809

References Object::GetPackGUID(), WorldObject::SendMessageToSet(), Unit::SetSwim(), SMSG_SPLINE_MOVE_START_SWIM, and SMSG_SPLINE_MOVE_STOP_SWIM.

Referenced by npc_depth_charge::npc_depth_chargeAI::Reset(), SmartAI::SetSwim(), npc_rizzle_sprysprocket::npc_rizzle_sprysprocketAI::UpdateAI(), and UpdateMovementFlags().

◆ SetTarget()

void Creature::SetTarget ( ObjectGuid  guid = ObjectGuid::Empty)
overridevirtual

Implements Unit.

3561{
3562 if (!_focusSpell)
3564}

References _focusSpell, Object::SetGuidValue(), and UNIT_FIELD_TARGET.

Referenced by boss_malygos::boss_malygosAI::AttackStart(), ClearTarget(), boss_garfrost::boss_garfrostAI::DamageTaken(), ConfusedMovementGenerator< T >::DoFinalize(), boss_ouro::Emerge(), RestoreAttack::Execute(), boss_kaelthas::ExecuteMiddleEvent(), npc_anachronos_the_ancient::npc_anachronos_the_ancientAI::HandleAnimation(), npc_torloth_the_magnificent::npc_torloth_the_magnificentAI::HandleAnimation(), boss_kelthuzad::boss_kelthuzadAI::JustEngagedWith(), boss_illidan_stormrage::JustSummoned(), boss_bug_trio::MovementInform(), boss_essence_of_suffering::boss_essence_of_sufferingAI::MovementInform(), boss_essence_of_desire::boss_essence_of_desireAI::MovementInform(), boss_mr_smite::boss_mr_smiteAI::MovementInform(), boss_felmyst::MovementInform(), boss_kaelthas::MovementInform(), npc_arthas::OnGossipSelect(), boss_leotheras_the_blind::Reset(), npc_torloth_the_magnificent::npc_torloth_the_magnificentAI::Reset(), boss_kiljaeden::ScheduleBasicAbilities(), boss_magtheridon::ScheduleCombatEvents(), boss_felmyst::ScheduleGroundAbilities(), boss_the_lurker_below::SchedulerPhaseOne(), setDeathState(), boss_razorscale::boss_razorscaleAI::SpellHit(), boss_garfrost::boss_garfrostAI::SpellHitTarget(), boss_mr_smite::boss_mr_smiteAI::UpdateAI(), npc_valkyr_battle_maiden::npc_valkyr_battle_maidenAI::UpdateAI(), npc_madrigosa::UpdateAI(), npc_varian_wrynn::npc_varian_wrynnAI::UpdateAI(), npc_arthas::npc_arthasAI::UpdateAI(), boss_cthun::UpdateAI(), and boss_malygos::boss_malygosAI::UpdateAI().

◆ SetTransportHomePosition() [1/2]

void Creature::SetTransportHomePosition ( const Position pos)
inline

◆ SetTransportHomePosition() [2/2]

void Creature::SetTransportHomePosition ( float  x,
float  y,
float  z,
float  o 
)
inline

◆ SetWalk()

bool Creature::SetWalk ( bool  enable)
overridevirtual

Enable or disable the creature's walk mode by removing: MOVEMENTFLAG_WALKING. Infom also the client.

Reimplemented from Unit.

3207{
3208 if (!Unit::SetWalk(enable))
3209 return false;
3210
3212 data << GetPackGUID();
3213 SendMessageToSet(&data, false);
3214 return true;
3215}
virtual bool SetWalk(bool enable)
Definition Unit.cpp:20409
@ SMSG_SPLINE_MOVE_SET_RUN_MODE
Definition Opcodes.h:811
@ SMSG_SPLINE_MOVE_SET_WALK_MODE
Definition Opcodes.h:812

References Object::GetPackGUID(), WorldObject::SendMessageToSet(), Unit::SetWalk(), SMSG_SPLINE_MOVE_SET_RUN_MODE, and SMSG_SPLINE_MOVE_SET_WALK_MODE.

Referenced by boss_the_lich_king::boss_the_lich_kingAI::DamageTaken(), npc_weegli_blastfuse::npc_weegli_blastfuseAI::DestroyDoor(), 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(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::DoAction(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::DoAction(), brann_bronzebeard::brann_bronzebeardAI::DoAction(), npc_brann_bronzebeard_algalon::npc_brann_bronzebeard_algalonAI::DoAction(), npc_maiev_illidan::DoAction(), npc_akama_shade::DoAction(), npc_scarlet_miner_cart::npc_scarlet_miner_cartAI::DoAction(), WaypointMovementGenerator< Creature >::DoFinalize(), RandomMovementGenerator< T >::DoFinalize(), ChaseMovementGenerator< T >::DoInitialize(), UtherBatteredHiltEvent::Execute(), boss_kaelthas::ExecuteMiddleEvent(), npc_lord_arete::npc_lord_areteAI::InitializeAI(), npc_pallid_horror::InitializeAI(), npc_lk_spirit_bomb::npc_lk_spirit_bombAI::IsSummonedBy(), npc_strangulate_vehicle::npc_strangulate_vehicleAI::IsSummonedBy(), boss_shade_of_aran::JustEngagedWith(), npc_icc_vengeful_fleshreaper::npc_icc_vengeful_fleshreaperAI::JustReachedHome(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::JustRespawned(), npc_eris_hevenfire::npc_eris_hevenfireAI::JustSummoned(), npc_kalecgos_kj::JustSummoned(), npc_icc_gauntlet_controller::npc_icc_gauntlet_controllerAI::JustSummoned(), npc_tirions_gambit_tirion::npc_tirions_gambit_tirionAI::JustSummoned(), npc_akama_shade::JustSummoned(), boss_lady_vashj::JustSummoned(), npc_pallid_horror::JustSummoned(), npc_rinji::npc_rinjiAI::JustSummoned(), npc_maghar_captive::npc_maghar_captiveAI::JustSummoned(), npc_brann_bronzebeard_algalon::npc_brann_bronzebeard_algalonAI::MovementInform(), boss_mandokir::boss_mandokirAI::MovementInform(), boss_captain_skarloc::MovementInform(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::MovementInform(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::MovementInform(), npc_akama_illidan::MovementInform(), npc_thassarian2::npc_thassarian2AI::MovementInform(), boss_kaelthas::MovementInform(), npc_escortAI::MovementInform(), npc_cameron::MoveTheChildren(), npc_hor_leader_second::npc_hor_leader_secondAI::MoveToNextStopPoint(), npc_marzon_silent_blade::npc_marzon_silent_bladeAI::npc_marzon_silent_bladeAI(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::npc_valkyr_shadowguardAI(), SmartAI::OnCharmed(), npc_chesspiece::OnCharmed(), instance_halls_of_reflection::instance_halls_of_reflection_InstanceMapScript::OnCreatureCreate(), npc_chesspiece::Reset(), boss_arlokk::boss_arlokkAI::Reset(), npc_dark_iron_guzzler::Reset(), npc_kinetic_bomb::npc_kinetic_bombAI::Reset(), npc_icc_vengeful_fleshreaper::npc_icc_vengeful_fleshreaperAI::Reset(), npc_xt002_scrapbot::npc_xt002_scrapbotAI::Reset(), npc_injured_7th_legion_soldier::npc_injured_7th_legion_soldierAI::Reset(), npc_q24545_lich_king::npc_q24545_lich_kingAI::Reset(), npc_plaguehound_tracker::npc_plaguehound_trackerAI::Reset(), boss_shade_of_akama::Reset(), npc_akama_shade::Reset(), boss_kaelthas::Reset(), SmartAI::ReturnToLastOOCPos(), npc_escortAI::ReturnToLastPoint(), npc_dream_fog::npc_dream_fogAI::ScheduleEvents(), npc_escortAI::SetRun(), SmartAI::SetRun(), npc_tirion_fordring_tft::npc_tirion_fordringAI::sGossipSelect(), npc_injured_patient::npc_injured_patientAI::SpellHit(), npc_escortAI::Start(), boss_majordomo::boss_majordomoAI::UpdateAI(), npc_scarlet_courier::npc_scarlet_courierAI::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_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::UpdateAI(), npc_grand_magister_rommath::npc_grand_magister_rommathAI::UpdateAI(), boss_arlokk::boss_arlokkAI::UpdateAI(), npc_twilight_volunteer::UpdateAI(), npc_xerestrasza::npc_xerestraszaAI::UpdateAI(), npc_hor_leader_second::npc_hor_leader_secondAI::UpdateAI(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::UpdateAI(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::UpdateAI(), npc_tirion_fordring_tft::npc_tirion_fordringAI::UpdateAI(), npc_oculus_drakegiver::npc_oculus_drakegiverAI::UpdateAI(), boss_svala::boss_svalaAI::UpdateAI(), npc_thassarian2::npc_thassarian2AI::UpdateAI(), npc_shandy_dalaran::npc_shandy_dalaranAI::UpdateAI(), npc_commander_eligor_dawnbringer::npc_commander_eligor_dawnbringerAI::UpdateAI(), npc_crusade_recruit::npc_crusade_recruitAI::UpdateAI(), npc_dragonmaw_peon::npc_dragonmaw_peonAI::UpdateAI(), npc_jenny::UpdateFollowerAI(), npc_ranger_lilatha::WaypointReached(), npc_corporal_keeshan::npc_corporal_keeshanAI::WaypointReached(), npc_emily::npc_emilyAI::WaypointReached(), npc_ancestral_wolf::npc_ancestral_wolfAI::WaypointReached(), and npc_isla_starmane::npc_isla_starmaneAI::WaypointReached().

◆ SetWanderDistance()

void Creature::SetWanderDistance ( float  dist)
inline

◆ SetWaterWalking()

bool Creature::SetWaterWalking ( bool  enable,
bool  packetOnly = false 
)
overridevirtual

Allow to walk on water. Doesn't inform the client. Need to use SendMovementWaterWalking() if it's for players.

movement counter

Reimplemented from Unit.

3336{
3337 if (!packetOnly && !Unit::SetWaterWalking(enable))
3338 return false;
3339
3340 if (m_movedByPlayer)
3341 {
3343 data << GetPackGUID();
3344 data << uint32(0);
3346
3348 data << GetPackGUID();
3349 BuildMovementPacket(&data);
3350 m_movedByPlayer->ToPlayer()->SendMessageToSet(&data, false);
3351 return true;
3352 }
3353
3355 data << GetPackGUID();
3356 SendMessageToSet(&data, true);
3357 return true;
3358}
virtual bool SetWaterWalking(bool enable, bool packetOnly=false)
Allow to walk on water. Doesn't inform the client. Need to use SendMovementWaterWalking() if it's for...
Definition Unit.cpp:20488
@ 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
@ MSG_MOVE_WATER_WALK
Definition Opcodes.h:719
@ SMSG_SPLINE_MOVE_WATER_WALK
Definition Opcodes.h:807

References Unit::BuildMovementPacket(), Object::GetPackGUID(), WorldPacket::Initialize(), Unit::m_movedByPlayer, MSG_MOVE_WATER_WALK, Player::SendDirectMessage(), WorldObject::SendMessageToSet(), Player::SendMessageToSet(), Unit::SetWaterWalking(), SMSG_MOVE_LAND_WALK, SMSG_MOVE_WATER_WALK, SMSG_SPLINE_MOVE_LAND_WALK, SMSG_SPLINE_MOVE_WATER_WALK, and Object::ToPlayer().

◆ Update()

void Creature::Update ( uint32  time)
overridevirtual

Reimplemented from WorldObject.

Reimplemented in Pet, TempSummon, Puppet, and Totem.

664{
666 {
667 TriggerJustRespawned = false;
668 AI()->JustRespawned();
669 if (m_vehicleKit)
671 }
672
673 switch (m_deathState)
674 {
676 // Must not be called, see Creature::setDeathState JUST_RESPAWNED -> ALIVE promoting.
677 LOG_ERROR("entities.unit", "Creature ({}) in wrong state: DeathState::JustRespawned (4)", GetGUID().ToString());
678 break;
680 // Must not be called, see Creature::setDeathState JUST_DIED -> CORPSE promoting.
681 LOG_ERROR("entities.unit", "Creature ({}) in wrong state: DeathState::JustDead (1)", GetGUID().ToString());
682 break;
683 case DeathState::Dead:
684 {
685 time_t now = GameTime::GetGameTime().count();
686 if (m_respawnTime <= now)
687 {
688 Respawn();
689 }
690 break;
691 }
693 {
694 Unit::Update(diff);
695 // deathstate changed on spells update, prevent problems
697 break;
698
700 {
701 if (m_groupLootTimer <= diff)
702 {
703 Group* group = sGroupMgr->GetGroupByGUID(lootingGroupLowGUID);
704 if (group)
705 group->EndRoll(&loot, GetMap());
708 }
709 else
710 {
711 m_groupLootTimer -= diff;
712 }
713 }
714 else if (m_corpseRemoveTime <= GameTime::GetGameTime().count())
715 {
716 RemoveCorpse(false);
717 LOG_DEBUG("entities.unit", "Removing corpse... {} ", GetUInt32Value(OBJECT_FIELD_ENTRY));
718 }
719 break;
720 }
722 {
723 Unit::Update(diff);
724
725 // creature can be dead after Unit::Update call
726 // CORPSE/DEAD state will processed at next tick (in other case death timer will be updated unexpectedly)
727 if (!IsAlive())
728 break;
729
730 // if creature is charmed, switch to charmed AI
731 if (NeedChangeAI)
732 {
734 NeedChangeAI = false;
735 IsAIEnabled = true;
736
737 // xinef: update combat state, if npc is not in combat - return to spawn correctly by calling EnterEvadeMode
738 SelectVictim();
739 }
740
741 // if periodic combat pulse is enabled and we are both in combat and in a dungeon, do this now
742 if (m_combatPulseDelay > 0 && IsInCombat() && GetMap()->IsDungeon())
743 {
744 if (diff > m_combatPulseTime)
746 else
747 m_combatPulseTime -= diff;
748
749 if (m_combatPulseTime == 0)
750 {
751 if (AI())
752 AI()->DoZoneInCombat();
753 else
756 }
757 }
758
759 // periodic check to see if the creature has passed an evade boundary
760 if (IsAIEnabled && !IsInEvadeMode() && IsEngaged())
761 {
762 if (diff >= m_boundaryCheckTime)
763 {
764 AI()->CheckInRoom();
765 m_boundaryCheckTime = 2500;
766 }
767 else
768 m_boundaryCheckTime -= diff;
769 }
770
771 Unit* owner = GetCharmerOrOwner();
772 if (IsCharmed() && !IsWithinDistInMap(owner, GetMap()->GetVisibilityRange(), true, false))
773 {
775 }
776
777 if (Unit* victim = GetVictim())
778 {
779 // If we are closer than 50% of the combat reach we are going to reposition the victim
780 if (diff >= m_moveBackwardsMovementTime)
781 {
782 float MaxRange = GetCollisionRadius() + GetVictim()->GetCollisionRadius();
783
784 if (IsInDist(victim, MaxRange))
786
788 }
789 else
791
792 // Circling the target
793 if (diff >= m_moveCircleMovementTime)
794 {
795 AI()->MoveCircleChecks();
797 }
798 else
800
801 // Periodically check if able to move, if not, extend leash timer
802 if (diff >= m_extendLeashTime)
803 {
807 }
808 else
809 m_extendLeashTime -= diff;
810 }
811
812 // Call for assistance if not disabled
814 {
815 if (m_assistanceTimer <= diff)
816 {
818 {
819 SetNoCallAssistance(false);
821 }
823 }
824 else
825 {
826 m_assistanceTimer -= diff;
827 }
828 }
829
830 if (!IsInEvadeMode() && IsAIEnabled)
831 {
832 // do not allow the AI to be changed during update
833 m_AI_locked = true;
834 i_AI->UpdateAI(diff);
835 m_AI_locked = false;
836 }
837
838 // creature can be dead after UpdateAI call
839 // CORPSE/DEAD state will processed at next tick (in other case death timer will be updated unexpectedly)
840 if (!IsAlive())
841 break;
842
843 m_regenTimer -= diff;
844 if (m_regenTimer <= 0)
845 {
846 if (!IsInEvadeMode())
847 {
848 // regenerate health if not in combat or if polymorphed)
849 if (!IsInCombat() || IsPolymorphed())
852 {
853 // regenerate health if cannot reach the target and the setting is set to do so.
854 // this allows to disable the health regen of raid bosses if pathfinding has issues for whatever reason
855 if (sWorld->getBoolConfig(CONFIG_REGEN_HP_CANNOT_REACH_TARGET_IN_RAID) || !GetMap()->IsRaid())
856 {
858 LOG_DEBUG("entities.unit", "RegenerateHealth() enabled because Creature cannot reach the target. Detail: {}", GetDebugInfo());
859 }
860 else
861 LOG_DEBUG("entities.unit", "RegenerateHealth() disabled even if the Creature cannot reach the target. Detail: {}", GetDebugInfo());
862 }
863 }
864
865 if (getPowerType() == POWER_ENERGY)
867 else
869
871 }
872
874 {
875 m_cannotReachTimer += diff;
877 {
878 Player* cannotReachPlayer = ObjectAccessor::GetPlayer(*this, m_cannotReachTarget);
879 if (cannotReachPlayer && IsEngagedBy(cannotReachPlayer) && IsAIEnabled && AI()->OnTeleportUnreacheablePlayer(cannotReachPlayer))
880 {
882 }
883 else if (!GetMap()->IsRaid())
884 {
885 auto EnterEvade = [&]()
886 {
887 if (CreatureAI* ai = AI())
888 {
890 }
891 };
892
893 if (GetThreatMgr().GetThreatListSize() <= 1)
894 {
895 EnterEvade();
896 }
897 else
898 {
899 if (HostileReference* ref = GetThreatMgr().GetOnlineContainer().getReferenceByTarget(m_cannotReachTarget))
900 {
901 ref->removeReference();
903 }
904 else
905 {
906 EnterEvade();
907 }
908 }
909 }
910 }
911 }
912 break;
913 }
914 default:
915 break;
916 }
917
919 {
920 // pussywizard:
921 if (GetOwnerGUID().IsPlayer())
922 {
923 if (m_transportCheckTimer <= diff)
924 {
927 if (newTransport != GetTransport())
928 {
929 if (GetTransport())
930 GetTransport()->RemovePassenger(this, true);
931 if (newTransport)
932 newTransport->AddPassenger(this, true);
934 //SendMovementFlagUpdate();
935 }
936 }
937 else
938 m_transportCheckTimer -= diff;
939 }
940
941 sScriptMgr->OnCreatureUpdate(this, diff);
942 }
943}
@ UNIT_STATE_LOST_CONTROL
Definition UnitDefines.h:212
@ OBJECT_FIELD_ENTRY
Definition UpdateFields.h:27
@ CONFIG_NPC_EVADE_IF_NOT_REACHABLE
Definition WorldConfig.h:368
@ CONFIG_REGEN_HP_CANNOT_REACH_TARGET_IN_RAID
Definition WorldConfig.h:124
@ CONFIG_CREATURE_FAMILY_ASSISTANCE_PERIOD
Definition WorldConfig.h:233
void MoveCircleChecks()
Definition CreatureAI.cpp:356
@ EVADE_REASON_NO_PATH
Definition CreatureAI.h:92
virtual void JustRespawned()
Definition CreatureAI.h:154
virtual bool CheckInRoom()
Definition CreatureAI.cpp:517
void MoveBackwardsChecks()
Definition CreatureAI.cpp:373
void SetInCombatWithZone()
Set in combat all units in the dungeon/raid. Affect only units with IsAIEnabled.
Definition Creature.cpp:2826
void Respawn(bool force=false)
Definition Creature.cpp:2043
void RegenerateHealth()
Definition Creature.cpp:1028
void CallAssistance(Unit *target=nullptr)
Definition Creature.cpp:2437
static constexpr uint32 MOVE_BACKWARDS_CHECK_INTERVAL
Definition Creature.h:396
bool CanPeriodicallyCallForAssistance() const
Definition Creature.cpp:3743
uint32 m_moveCircleMovementTime
Definition Creature.h:398
uint32 m_moveBackwardsMovementTime
Definition Creature.h:399
static constexpr uint32 MOVE_CIRCLE_CHECK_INTERVAL
Definition Creature.h:395
Unit * SelectVictim()
Definition Unit.cpp:14825
void UpdateLeashExtensionTime()
Definition Creature.cpp:3728
bool IsNotReachableAndNeedRegen() const
Definition Creature.cpp:3696
void Regenerate(Powers power)
Definition Creature.cpp:959
uint32 m_extendLeashTime
Definition Creature.h:400
static constexpr uint32 EXTEND_LEASH_CHECK_INTERVAL
Definition Creature.h:397
void EndRoll(Loot *loot, Map *allowedMap)
Definition Group.cpp:1410
Definition ThreatMgr.h:48
Transport * GetTransportForPos(uint32 phase, float x, float y, float z, WorldObject *worldobject=nullptr)
Definition Map.cpp:1086
float GetThreatListSize() const
Definition ThreatMgr.h:221
virtual void RemovePassenger(WorldObject *passenger, bool withAll=false)=0
virtual void AddPassenger(WorldObject *passenger, bool withAll=false)=0
virtual void UpdateAI(uint32)=0
Use to start attacking a target. Called just before JustEngagedWith()
bool NeedChangeAI
Definition Unit.h:2013
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:20959
bool IsDuringRemoveFromWorld() const
Definition Unit.h:658
void UpdateCharmAI()
Definition Unit.cpp:15862
Vehicle * m_vehicleKit
Definition Unit.h:2112
void StopMovingOnCurrentPos()
Definition Unit.cpp:16763
void Update(uint32 time) override
Definition Unit.cpp:383
void RemoveCharmAuras()
Definition Unit.cpp:11280
Player * GetPlayer(Map const *, ObjectGuid const guid)
Definition ObjectAccessor.cpp:220
bool IsInDist(float x, float y, float z, float dist) const
Definition Position.h:221

References Transport::AddPassenger(), AI(), Alive, CallAssistance(), CanNotReachTarget(), CanPeriodicallyCallForAssistance(), CreatureAI::CheckInRoom(), CONFIG_CREATURE_FAMILY_ASSISTANCE_PERIOD, CONFIG_NPC_EVADE_IF_NOT_REACHABLE, CONFIG_REGEN_HP_CANNOT_REACH_TARGET_IN_RAID, Corpse, CREATURE_REGEN_INTERVAL, Dead, CreatureAI::DoZoneInCombat(), Group::EndRoll(), CreatureAI::EVADE_REASON_NO_PATH, EXTEND_LEASH_CHECK_INTERVAL, Unit::GetCharmerOrOwner(), Unit::GetCollisionRadius(), GetDebugInfo(), GameTime::GetGameTime(), Object::GetGUID(), WorldObject::GetMap(), Unit::GetOwnerGUID(), WorldObject::GetPhaseMask(), ObjectAccessor::GetPlayer(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), Unit::getPowerType(), ThreatMgr::GetThreatListSize(), Unit::GetThreatMgr(), WorldObject::GetTransport(), Map::GetTransportForPos(), Object::GetUInt32Value(), Unit::GetVictim(), WorldObject::GetVisibilityRange(), Unit::HasUnitState(), Unit::i_AI, IN_MILLISECONDS, Unit::IsAIEnabled, Unit::IsAlive(), Unit::IsCharmed(), Unit::IsDuringRemoveFromWorld(), Unit::IsEngaged(), Unit::IsEngagedBy(), Unit::IsInCombat(), Position::IsInDist(), IsInEvadeMode(), Object::IsInWorld(), IsNotReachableAndNeedRegen(), Object::IsPlayer(), Unit::IsPolymorphed(), WorldObject::IsWithinDistInMap(), JustDied, CreatureAI::JustRespawned(), JustRespawned, LOG_DEBUG, LOG_ERROR, loot, lootingGroupLowGUID, m_AI_locked, m_assistanceTimer, m_boundaryCheckTime, m_cannotReachTarget, m_cannotReachTimer, m_combatPulseDelay, m_combatPulseTime, m_corpseRemoveTime, Unit::m_deathState, m_extendLeashTime, m_groupLootTimer, m_moveBackwardsMovementTime, m_moveCircleMovementTime, Unit::m_regenTimer, m_respawnTime, m_transportCheckTimer, Unit::m_vehicleKit, MOVE_BACKWARDS_CHECK_INTERVAL, MOVE_CIRCLE_CHECK_INTERVAL, CreatureAI::MoveBackwardsChecks(), CreatureAI::MoveCircleChecks(), Unit::NeedChangeAI, OBJECT_FIELD_ENTRY, POWER_ENERGY, POWER_MANA, Regenerate(), RegenerateHealth(), Unit::RemoveCharmAuras(), RemoveCorpse(), Transport::RemovePassenger(), Vehicle::Reset(), Respawn(), SelectVictim(), SetCannotReachTarget(), SetInCombatWithZone(), SetNoCallAssistance(), sGroupMgr, sScriptMgr, Unit::StopMovingOnCurrentPos(), sWorld, Position::ToString(), TriggerJustRespawned, UNIT_STATE_LOST_CONTROL, Unit::Update(), UnitAI::UpdateAI(), Unit::UpdateCharmAI(), UpdateLeashExtensionTime(), and urand().

Referenced by Pet::Update(), TempSummon::Update(), Puppet::Update(), and Totem::Update().

◆ UpdateAllStats()

bool Creature::UpdateAllStats ( )
overridevirtual

Implements Unit.

Reimplemented in Guardian, and Totem.

1044{
1048
1049 for (uint8 i = POWER_MANA; i < MAX_POWERS; ++i)
1051
1053
1054 return true;
1055}
@ MAX_POWERS
Definition SharedDefines.h:276
void UpdateAttackPowerAndDamage(bool ranged=false) override
Definition StatSystem.cpp:1088
void UpdateMaxPower(Powers power) override
Definition StatSystem.cpp:1080
void UpdateMaxHealth() override
Definition StatSystem.cpp:1074
virtual void UpdateAllResistances()
Definition StatSystem.cpp:54

References MAX_POWERS, POWER_MANA, Unit::UpdateAllResistances(), UpdateAttackPowerAndDamage(), UpdateMaxHealth(), and UpdateMaxPower().

Referenced by UpdateEntry().

◆ UpdateArmor()

void Creature::UpdateArmor ( )
overridevirtual

Implements Unit.

Reimplemented in Guardian, and Totem.

1069{
1070 float value = GetTotalAuraModValue(UNIT_MOD_ARMOR);
1071 SetArmor(int32(value));
1072}
@ UNIT_MOD_ARMOR
Definition Unit.h:157
float GetTotalAuraModValue(UnitMods unitMod) const
Definition Unit.cpp:15410
void SetArmor(int32 val)
Definition Unit.h:1082

References Unit::GetTotalAuraModValue(), Unit::SetArmor(), and UNIT_MOD_ARMOR.

Referenced by UpdateResistances().

◆ UpdateAttackPowerAndDamage()

void Creature::UpdateAttackPowerAndDamage ( bool  ranged = false)
overridevirtual

Implements Unit.

Reimplemented in Guardian, and Totem.

1089{
1091
1095
1096 if (ranged)
1097 {
1101 }
1102
1103 float baseAttackPower = GetModifierValue(unitMod, BASE_VALUE) * GetModifierValue(unitMod, BASE_PCT);
1104 float attackPowerMod = GetModifierValue(unitMod, TOTAL_VALUE);
1105 float attackPowerMultiplier = GetModifierValue(unitMod, TOTAL_PCT) - 1.0f;
1106
1107 SetInt32Value(index, uint32(baseAttackPower)); // UNIT_FIELD_(RANGED)_ATTACK_POWER
1108 SetInt32Value(indexMod, uint32(attackPowerMod)); // UNIT_FIELD_(RANGED)_ATTACK_POWER_MODS
1109 SetFloatValue(indexMulti, attackPowerMultiplier); // UNIT_FIELD_(RANGED)_ATTACK_POWER_MULTIPLIER
1110
1111 // automatically update weapon damage after attack power modification
1112 if (ranged)
1114 else
1115 {
1118 }
1119}
@ 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
void SetInt32Value(uint16 index, int32 value)
Definition Object.cpp:637

References BASE_ATTACK, BASE_PCT, BASE_VALUE, Unit::GetModifierValue(), OFF_ATTACK, RANGED_ATTACK, Object::SetFloatValue(), Object::SetInt32Value(), TOTAL_PCT, TOTAL_VALUE, 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, UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER, UNIT_MOD_ATTACK_POWER, UNIT_MOD_ATTACK_POWER_RANGED, and Unit::UpdateDamagePhysical().

Referenced by UpdateAllStats().

◆ UpdateEntry() [1/2]

bool Creature::UpdateEntry ( uint32  entry,
bool  updateAI 
)
inline
181{ return UpdateEntry(entry, nullptr, true, updateAI); }

References UpdateEntry().

Referenced by UpdateEntry().

◆ UpdateEntry() [2/2]

bool Creature::UpdateEntry ( uint32  entry,
const CreatureData data = nullptr,
bool  changelevel = true,
bool  updateAI = false 
)
542{
543 if (!InitEntry(Entry, data))
544 return false;
545
546 CreatureTemplate const* cInfo = GetCreatureTemplate();
547
548 m_regenHealth = cInfo->RegenHealth;
549
550 // creatures always have melee weapon ready if any unless specified otherwise
551 if (!GetCreatureAddon())
553
554 SetFaction(cInfo->faction);
555
556 uint32 npcflag, unit_flags, dynamicflags;
557 ObjectMgr::ChooseCreatureFlags(cInfo, npcflag, unit_flags, dynamicflags, data);
558
560 ReplaceAllNpcFlags(NPCFlags(npcflag | sGameEventMgr->GetNPCFlag(this)));
561 else
563
564 // Xinef: NPC is in combat, keep this flag!
565 unit_flags &= ~UNIT_FLAG_IN_COMBAT;
566 if (IsInCombat())
567 unit_flags |= UNIT_FLAG_IN_COMBAT;
568
569 ReplaceAllUnitFlags(UnitFlags(unit_flags));
571
572 ReplaceAllDynamicFlags(dynamicflags);
573
575
579
580 uint32 previousHealth = GetHealth();
581 uint32 previousMaxHealth = GetMaxHealth();
582 uint32 previousPlayerDamageReq = _playerDamageReq;
583
584 SelectLevel(changelevel);
585 if (previousHealth > 0)
586 {
587 SetHealth(previousHealth);
588
589 if (previousMaxHealth && previousMaxHealth > GetMaxHealth())
590 {
591 _playerDamageReq = (uint32)(previousPlayerDamageReq * GetMaxHealth() / previousMaxHealth);
592 }
593 else
594 {
595 _playerDamageReq = previousPlayerDamageReq;
596 }
597 }
598
600 CreatureBaseStats const* stats = sObjectMgr->GetCreatureBaseStats(GetLevel(), cInfo->unit_class);
601 float armor = stats->GenerateArmor(cInfo);
609
610 SetCanModifyStats(true);
612
614
615 // checked and error show at loading templates
616 if (FactionTemplateEntry const* factionTemplate = sFactionTemplateStore.LookupEntry(cInfo->faction))
617 {
618 if (factionTemplate->factionFlags & FACTION_TEMPLATE_FLAG_ASSIST_PLAYERS)
619 SetPvP(true);
620 else
621 SetPvP(false);
622 }
623
624 // updates spell bars for vehicles and set player's faction - should be called here, to overwrite faction that is set from the new template
625 if (IsVehicle())
626 {
627 if (Player* owner = Creature::GetCharmerOrOwnerPlayerOrPlayerItself()) // this check comes in case we don't have a player
628 {
629 SetFaction(owner->GetFaction()); // vehicles should have same as owner faction
630 owner->VehicleSpellInitialize();
631 }
632 }
633
634 // trigger creature is always not selectable and can not be attacked
635 if (IsTrigger())
637
639
641 {
644 }
645
647
648 // Update movement
649 if (IsRooted())
652
654
655 if (updateAI)
656 {
658 }
659
660 return true;
661}
@ CREATURE_FLAG_EXTRA_NO_TAUNT
Definition CreatureData.h:53
@ CREATURE_FLAG_EXTRA_WORLDEVENT
Definition CreatureData.h:59
@ FACTION_TEMPLATE_FLAG_ASSIST_PLAYERS
Definition DBCEnums.h:330
DBCStorage< FactionTemplateEntry > sFactionTemplateStore(FactionTemplateEntryfmt)
#define sGameEventMgr
Definition GameEventMgr.h:201
@ SPELL_SCHOOL_SHADOW
Definition SharedDefines.h:288
@ SPELL_SCHOOL_NATURE
Definition SharedDefines.h:286
@ SPELL_SCHOOL_FROST
Definition SharedDefines.h:287
@ SPELL_SCHOOL_FIRE
Definition SharedDefines.h:285
@ SPELL_SCHOOL_HOLY
Definition SharedDefines.h:284
@ SPELL_EFFECT_ATTACK_ME
Definition SharedDefines.h:892
@ IMMUNITY_STATE
Definition SharedDefines.h:1395
@ IMMUNITY_EFFECT
Definition SharedDefines.h:1394
UnitFlags2
Definition UnitDefines.h:287
@ SHEATH_STATE_MELEE
Definition UnitDefines.h:127
UnitFlags
Definition UnitDefines.h:248
@ UNIT_FLAG_IN_COMBAT
Definition UnitDefines.h:269
@ UNIT_MOD_RESISTANCE_SHADOW
Definition Unit.h:162
@ UNIT_MOD_RESISTANCE_FROST
Definition Unit.h:161
@ UNIT_MOD_RESISTANCE_HOLY
Definition Unit.h:158
@ UNIT_MOD_RESISTANCE_ARCANE
Definition Unit.h:163
@ UNIT_MOD_RESISTANCE_FIRE
Definition Unit.h:159
@ UNIT_MOD_RESISTANCE_NATURE
Definition Unit.h:160
bool UpdateAllStats() override
Definition StatSystem.cpp:1043
bool InitEntry(uint32 entry, const CreatureData *data=nullptr)
Definition Creature.cpp:440
void SetDetectionDistance(float dist)
Definition Creature.h:211
void LoadSpellTemplateImmunity()
Definition Creature.cpp:2223
static void ChooseCreatureFlags(CreatureTemplate const *cinfo, uint32 &npcflag, uint32 &unit_flags, uint32 &dynamicflags, CreatureData const *data=nullptr)
Definition ObjectMgr.cpp:1662
void ReplaceAllDynamicFlags(uint32 flag) override
Definition Unit.h:724
void SetFaction(uint32 faction)
Definition Unit.cpp:10117
void SetPvP(bool state)
Definition Unit.h:985
void ReplaceAllUnitFlags(UnitFlags flags)
Remove the Unit flag specify only.
Definition Unit.h:705
virtual void SetSheath(SheathState sheathed)
Definition Unit.h:1692
void SetCanModifyStats(bool modifyStats)
Definition Unit.h:1019
void ReplaceAllUnitFlags2(UnitFlags2 flags)
Definition Unit.h:711
void SetAttackTime(WeaponAttackType att, uint32 val)
Definition Unit.h:865
float GenerateArmor(CreatureTemplate const *info) const
Definition CreatureData.h:327
uint32 RangeAttackTime
Definition CreatureData.h:210
uint32 BaseAttackTime
Definition CreatureData.h:209
float detection_range
Definition CreatureData.h:204
int32 resistance[MAX_SPELL_SCHOOL]
Definition CreatureData.h:227
bool RegenHealth
Definition CreatureData.h:243
uint32 faction
Definition CreatureData.h:198
uint32 unit_flags2
Definition CreatureData.h:215
Definition DBCStructure.h:939

References _playerDamageReq, AIM_Initialize(), Unit::ApplySpellImmune(), BASE_ATTACK, BASE_VALUE, CreatureTemplate::BaseAttackTime, ObjectMgr::ChooseCreatureFlags(), CREATURE_FLAG_EXTRA_NO_TAUNT, CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK, CREATURE_FLAG_EXTRA_WORLDEVENT, CreatureTemplate::detection_range, CreatureTemplate::dmgschool, Entry, CreatureTemplate::faction, FACTION_TEMPLATE_FLAG_ASSIST_PLAYERS, CreatureBaseStats::GenerateArmor(), Unit::GetCharmerOrOwnerPlayerOrPlayerItself(), GetCreatureAddon(), GetCreatureTemplate(), Unit::GetHealth(), Unit::GetLevel(), Unit::GetMaxHealth(), CreatureTemplate::HasFlagsExtra(), IMMUNITY_EFFECT, IMMUNITY_STATE, InitEntry(), InitializeReactState(), Unit::IsInCombat(), Unit::IsPet(), IsRooted(), IsTrigger(), Unit::IsVehicle(), LoadSparringPct(), LoadSpellTemplateImmunity(), m_regenHealth, OFF_ATTACK, CreatureTemplate::RangeAttackTime, RANGED_ATTACK, CreatureTemplate::RegenHealth, Unit::ReplaceAllDynamicFlags(), Unit::ReplaceAllNpcFlags(), Unit::ReplaceAllUnitFlags(), Unit::ReplaceAllUnitFlags2(), CreatureTemplate::resistance, SelectLevel(), Unit::SetAttackTime(), SetCanDualWield(), Unit::SetCanModifyStats(), Unit::SetControlled(), SetDetectionDistance(), Unit::SetFaction(), Unit::SetHealth(), SetMeleeDamageSchool(), Unit::SetModifierValue(), Unit::SetPvP(), Unit::SetSheath(), Unit::SetUnitFlag(), sFactionTemplateStore, sGameEventMgr, SHEATH_STATE_MELEE, sObjectMgr, SPELL_AURA_MOD_TAUNT, SPELL_EFFECT_ATTACK_ME, SPELL_SCHOOL_ARCANE, SPELL_SCHOOL_FIRE, SPELL_SCHOOL_FROST, SPELL_SCHOOL_HOLY, SPELL_SCHOOL_NATURE, SPELL_SCHOOL_SHADOW, CreatureTemplate::unit_class, UNIT_FLAG_IN_COMBAT, UNIT_FLAG_NOT_SELECTABLE, CreatureTemplate::unit_flags2, UNIT_MOD_ARMOR, 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_STATE_ROOT, UpdateAllStats(), and UpdateMovementFlags().

Referenced by CreateFromProto(), boss_yoggsaron_influence_tentacle::boss_yoggsaron_influence_tentacleAI::DamageTaken(), npc_molten_golem::npc_molten_golemAI::DamageTaken(), npc_forest_frog::DoSpawnRandom(), boss_halazzi::EnterPhase(), npc_commandscript::HandleNpcSetEntryCommand(), npc_isle_of_conquest_turret::npc_isle_of_conquest_turretAI::JustDied(), npc_scholomance_occultist::npc_scholomance_occultistAI::JustReachedHome(), npc_aged_dying_ancient_kodo::npc_aged_dying_ancient_kodoAI::JustRespawned(), boss_yoggsaron_brain::boss_yoggsaron_brainAI::JustSummoned(), instance_trial_of_the_champion::instance_trial_of_the_champion_InstanceMapScript::OnCreatureCreate(), instance_forge_of_souls::instance_forge_of_souls_InstanceScript::OnCreatureCreate(), instance_halls_of_reflection::instance_halls_of_reflection_InstanceMapScript::OnCreatureCreate(), instance_pit_of_saron::instance_pit_of_saron_InstanceScript::OnCreatureCreate(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnCreatureCreate(), instance_nexus::instance_nexus_InstanceMapScript::OnCreatureCreate(), instance_shattered_halls::instance_shattered_halls_InstanceMapScript::OnCreatureCreate(), boss_halazzi::Reset(), npc_announcer_toc5::npc_announcer_toc5AI::Reset(), Respawn(), NPCStaveQuestAI::RevealForm(), npc_time_lost_proto_drake::npc_time_lost_proto_drakeAI::RollPath(), boss_halazzi::SpellHit(), npc_cult_fanatic::npc_cult_fanaticAI::SpellHit(), npc_cult_adherent::npc_cult_adherentAI::SpellHit(), npc_argent_captainAI::SpellHit(), npc_isle_of_conquest_turret::npc_isle_of_conquest_turretAI::SpellHit(), npc_aged_dying_ancient_kodo::npc_aged_dying_ancient_kodoAI::SpellHit(), npc_nether_drake::npc_nether_drakeAI::SpellHit(), boss_hydross_the_unstable::SummonMovementInform(), npc_scholomance_occultist::npc_scholomance_occultistAI::UpdateAI(), npc_cult_fanatic::npc_cult_fanaticAI::UpdateAI(), npc_cult_adherent::npc_cult_adherentAI::UpdateAI(), boss_svala::boss_svalaAI::UpdateAI(), and npc_tyrion_spybot::npc_tyrion_spybotAI::UpdateAI().

◆ UpdateLeashExtensionTime()

◆ UpdateMaxHealth()

void Creature::UpdateMaxHealth ( )
overridevirtual

Implements Unit.

Reimplemented in Guardian, and Totem.

1075{
1077 SetMaxHealth(uint32(value));
1078}

References Unit::GetTotalAuraModValue(), Unit::SetMaxHealth(), and UNIT_MOD_HEALTH.

Referenced by UpdateAllStats().

◆ UpdateMaxPower()

void Creature::UpdateMaxPower ( Powers  power)
overridevirtual

Implements Unit.

Reimplemented in Guardian, and Totem.

1081{
1082 UnitMods unitMod = UnitMods(static_cast<uint16>(UNIT_MOD_POWER_START) + power);
1083
1084 float value = GetTotalAuraModValue(unitMod);
1085 SetMaxPower(power, uint32(value));
1086}
@ UNIT_MOD_POWER_START
Definition Unit.h:175

References Unit::GetTotalAuraModValue(), Unit::SetMaxPower(), and UNIT_MOD_POWER_START.

Referenced by UpdateAllStats().

◆ UpdateMoveInLineOfSightState()

void Creature::UpdateMoveInLineOfSightState ( )
2596{
2597 // xinef: pets, guardians and units with scripts / smartAI should be skipped
2599 GetScriptId() || GetAIName() == "SmartAI")
2600 {
2603 return;
2604 }
2605
2606 if (IsTrigger() || IsCivilian() || GetCreatureType() == CREATURE_TYPE_NON_COMBAT_PET || IsCritter() || GetAIName() == "NullCreatureAI")
2607 {
2610 return;
2611 }
2612
2613 bool nonHostile = true;
2614 if (FactionTemplateEntry const* factionTemplate = sFactionTemplateStore.LookupEntry(GetFaction()))
2615 if (factionTemplate->hostileMask || factionTemplate->enemyFaction[0] || factionTemplate->enemyFaction[1] || factionTemplate->enemyFaction[2] || factionTemplate->enemyFaction[3])
2616 nonHostile = false;
2617
2618 if (nonHostile)
2620 else
2622}
@ UNIT_MASK_SUMMON
Definition UnitDefines.h:156
@ UNIT_MASK_GUARDIAN
Definition UnitDefines.h:158
@ UNIT_MASK_MINION
Definition UnitDefines.h:157
uint32 GetCreatureType() const
Definition Unit.cpp:15274
uint32 HasUnitTypeMask(uint32 mask) const
Definition Unit.h:696

References CREATURE_TYPE_NON_COMBAT_PET, GetAIName(), Unit::GetCreatureType(), Unit::GetFaction(), GetScriptId(), Unit::HasUnitTypeMask(), IsCivilian(), Unit::IsCritter(), Unit::IsPet(), IsTrigger(), m_moveInLineOfSightDisabled, m_moveInLineOfSightStrictlyDisabled, sFactionTemplateStore, UNIT_MASK_CONTROLLABLE_GUARDIAN, UNIT_MASK_GUARDIAN, UNIT_MASK_MINION, and UNIT_MASK_SUMMON.

Referenced by Unit::SetFaction().

◆ UpdateMovementFlags()

void Creature::UpdateMovementFlags ( )
3452{
3453 // Do not update movement flags if creature is controlled by a player (charm/vehicle)
3454 if (m_movedByPlayer)
3455 return;
3456
3457 CreatureTemplate const* info = GetCreatureTemplate();
3458 if (!info)
3459 return;
3460
3461 // Creatures with CREATURE_FLAG_EXTRA_NO_MOVE_FLAGS_UPDATE should control MovementFlags in your own scripts
3463 return;
3464
3465 float ground = GetFloorZ();
3466
3467 bool canHover = CanHover();
3468 bool isInAir = (G3D::fuzzyGt(GetPositionZ(), ground + (canHover ? GetFloatValue(UNIT_FIELD_HOVERHEIGHT) : 0.0f) + GROUND_HEIGHT_TOLERANCE) || G3D::fuzzyLt(GetPositionZ(), ground - GROUND_HEIGHT_TOLERANCE)); // Can be underground too, prevent the falling
3469
3470 if (GetMovementTemplate().IsFlightAllowed() && isInAir && !IsFalling())
3471 {
3473 SetCanFly(true);
3474 else
3475 SetDisableGravity(true);
3476
3477 if (!HasHoverAura())
3478 SetHover(false);
3479 }
3480 else
3481 {
3482 SetCanFly(false);
3483 SetDisableGravity(false);
3484 if (IsAlive() && (CanHover() || HasHoverAura()))
3485 SetHover(true);
3486 }
3487
3488 if (!isInAir)
3490
3491 bool Swim = false;
3492 LiquidData const& liquidData = GetLiquidData();
3493 switch (liquidData.Status)
3494 {
3497 Swim = GetPositionZ() - liquidData.DepthLevel > GetCollisionHeight() * 0.75f; // Shallow water at ~75% of collision height
3498 break;
3500 Swim = true;
3501 break;
3502 default:
3503 break;
3504 }
3505
3506 SetSwim(CanSwim() && Swim);
3507}
@ CREATURE_FLAG_EXTRA_NO_MOVE_FLAGS_UPDATE
Definition CreatureData.h:54
@ LIQUID_MAP_UNDER_WATER
Definition GridTerrainData.h:195
@ LIQUID_MAP_IN_WATER
Definition GridTerrainData.h:194
@ LIQUID_MAP_WATER_WALK
Definition GridTerrainData.h:193
float const GROUND_HEIGHT_TOLERANCE
Definition SharedDefines.h:26
bool SetCanFly(bool enable, bool packetOnly=false) override
Add the movement flag: MOVEMENTFLAGCAN_FLY. Generaly only use by players, allowing them to fly by pre...
Definition Creature.cpp:3305
bool SetSwim(bool enable) override
Definition Creature.cpp:3257
float GetFloatValue(uint16 index) const
Definition Object.cpp:317
float GetCollisionHeight() const override
Return collision height sent to client.
Definition Unit.cpp:20965
bool HasHoverAura() const
Definition Unit.h:1716
LiquidData const & GetLiquidData() const
Definition Object.cpp:3090
float GetFloorZ() const
Definition Object.cpp:3046
Definition DynamicTree.h:24
Definition GridTerrainData.h:199
LiquidStatus Status
Definition GridTerrainData.h:206
float DepthLevel
Definition GridTerrainData.h:205

References CanFly, CanHover(), CanSwim(), CREATURE_FLAG_EXTRA_NO_MOVE_FLAGS_UPDATE, LiquidData::DepthLevel, CreatureMovementData::Flight, Unit::GetCollisionHeight(), GetCreatureTemplate(), Object::GetFloatValue(), WorldObject::GetFloorZ(), WorldObject::GetLiquidData(), GetMovementTemplate(), Position::GetPositionZ(), GROUND_HEIGHT_TOLERANCE, CreatureTemplate::HasFlagsExtra(), Unit::HasHoverAura(), Unit::IsAlive(), Unit::IsFalling(), CreatureMovementData::IsFlightAllowed(), LIQUID_MAP_IN_WATER, LIQUID_MAP_UNDER_WATER, LIQUID_MAP_WATER_WALK, Unit::m_movedByPlayer, MOVEMENTFLAG_FALLING, Unit::RemoveUnitMovementFlag(), SetCanFly(), SetDisableGravity(), SetHover(), SetSwim(), LiquidData::Status, and UNIT_FIELD_HOVERHEIGHT.

Referenced by Create(), Unit::ProcessTerrainStatusUpdate(), setDeathState(), and UpdateEntry().

◆ UpdateResistances()

void Creature::UpdateResistances ( uint32  school)
overridevirtual

Implements Unit.

Reimplemented in Totem.

1058{
1059 if (school > SPELL_SCHOOL_NORMAL)
1060 {
1062 SetResistance(SpellSchools(school), int32(value));
1063 }
1064 else
1065 UpdateArmor();
1066}
@ UNIT_MOD_RESISTANCE_START
Definition Unit.h:173
void UpdateArmor() override
Definition StatSystem.cpp:1068
void SetResistance(SpellSchools school, int32 val)
Definition Unit.h:1125

References Unit::GetTotalAuraModValue(), Unit::SetResistance(), SPELL_SCHOOL_NORMAL, UNIT_MOD_RESISTANCE_START, and UpdateArmor().

◆ UpdateStats()

bool Creature::UpdateStats ( Stats  stat)
overridevirtual

Implements Unit.

Reimplemented in Guardian, and Totem.

1039{
1040 return true;
1041}

◆ UpdateVendorItemCurrentCount()

uint32 Creature::UpdateVendorItemCurrentCount ( VendorItem const *  vItem,
uint32  used_count 
)
3111{
3112 if (!vItem->maxcount)
3113 return 0;
3114
3115 VendorItemCounts::iterator itr = m_vendorItemCounts.begin();
3116 for (; itr != m_vendorItemCounts.end(); ++itr)
3117 if (itr->itemId == vItem->item)
3118 break;
3119
3120 if (itr == m_vendorItemCounts.end())
3121 {
3122 uint32 new_count = vItem->maxcount > used_count ? vItem->maxcount - used_count : 0;
3123 m_vendorItemCounts.push_back(VendorItemCount(vItem->item, new_count));
3124 return new_count;
3125 }
3126
3127 VendorItemCount* vCount = &*itr;
3128
3129 time_t ptime = GameTime::GetGameTime().count();
3130
3131 if (time_t(vCount->lastIncrementTime + vItem->incrtime) <= ptime)
3132 {
3133 ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(vItem->item);
3134
3135 uint32 diff = uint32((ptime - vCount->lastIncrementTime) / vItem->incrtime);
3136 if ((vCount->count + diff * pProto->BuyCount) < vItem->maxcount)
3137 vCount->count += diff * pProto->BuyCount;
3138 else
3139 vCount->count = vItem->maxcount;
3140 }
3141
3142 vCount->count = vCount->count > used_count ? vCount->count - used_count : 0;
3143 vCount->lastIncrementTime = ptime;
3144 return vCount->count;
3145}

References ItemTemplate::BuyCount, VendorItemCount::count, GameTime::GetGameTime(), VendorItem::incrtime, VendorItem::item, VendorItemCount::lastIncrementTime, m_vendorItemCounts, VendorItem::maxcount, and sObjectMgr.

Referenced by Player::_StoreOrEquipNewItem().

◆ UpdateWaypointID()

void Creature::UpdateWaypointID ( uint32  wpID)
inline

Member Data Documentation

◆ _damagedByPlayer

bool Creature::_damagedByPlayer
private

◆ _focusSpell

Spell const* Creature::_focusSpell
private

◆ _isCombatMovementAllowed

bool Creature::_isCombatMovementAllowed
private

◆ _isMissingSwimmingFlagOutOfCombat

bool Creature::_isMissingSwimmingFlagOutOfCombat
private

‍Locks the target during spell cast for proper facing

Referenced by HasSwimmingFlagOutOfCombat(), and RefreshSwimmingFlag().

◆ _playerDamageReq

◆ _sparringPct

float Creature::_sparringPct
protected

Referenced by GetSparringPct(), and LoadSparringPct().

◆ [struct]

struct { ... } Creature::_spellFocusInfo

Referenced by HasSpellFocus().

◆ Delay

uint32 Creature::Delay = 0

◆ DisableLootReward

bool Creature::DisableLootReward
protected

◆ DisableReputationReward

bool Creature::DisableReputationReward
protected

◆ EXTEND_LEASH_CHECK_INTERVAL

constexpr uint32 Creature::EXTEND_LEASH_CHECK_INTERVAL = 3000
staticconstexpr

Referenced by Update().

◆ loot

◆ lootingGroupLowGUID

uint32 Creature::lootingGroupLowGUID

Referenced by Update().

◆ lootPickPocketRestoreTime

uint32 Creature::lootPickPocketRestoreTime
protected

◆ m_AI_locked

bool Creature::m_AI_locked
protected

Referenced by AIM_Initialize(), and Update().

◆ m_AlreadyCallAssistance

bool Creature::m_AlreadyCallAssistance
protected

◆ m_AlreadySearchedAssistance

bool Creature::m_AlreadySearchedAssistance
protected

◆ m_assistanceTimer

uint32 Creature::m_assistanceTimer
private

Referenced by SetAssistanceTimer(), and Update().

◆ m_boundaryCheckTime

uint32 Creature::m_boundaryCheckTime
protected

Referenced by DoImmediateBoundaryCheck(), and Update().

◆ m_cannotReachTarget

ObjectGuid Creature::m_cannotReachTarget
private

◆ m_cannotReachTimer

uint32 Creature::m_cannotReachTimer
private

◆ m_CombatDistance

◆ m_combatPulseDelay

uint32 Creature::m_combatPulseDelay
protected

◆ m_combatPulseTime

uint32 Creature::m_combatPulseTime
protected

Referenced by SetCombatPulseDelay(), and Update().

◆ m_corpseDelay

uint32 Creature::m_corpseDelay
protected

◆ m_corpseRemoveTime

time_t Creature::m_corpseRemoveTime
protected

◆ m_creatureData

CreatureData const* Creature::m_creatureData
protected

◆ m_creatureInfo

◆ m_CreatureSpellCooldowns

◆ m_defaultMovementType

◆ m_detectionDistance

float Creature::m_detectionDistance
protected

◆ m_equipmentId

uint8 Creature::m_equipmentId
protected

◆ m_extendLeashTime

uint32 Creature::m_extendLeashTime = EXTEND_LEASH_CHECK_INTERVAL

Referenced by Update().

◆ m_formation

◆ m_groupLootTimer

uint32 Creature::m_groupLootTimer

Referenced by Update().

◆ m_homePosition

Position Creature::m_homePosition
protected

◆ m_lastLeashExtensionTime

std::shared_ptr<time_t> Creature::m_lastLeashExtensionTime
mutableprivate

◆ m_LootMode

uint16 Creature::m_LootMode
protected

◆ m_lootRecipient

ObjectGuid Creature::m_lootRecipient
protected

◆ m_lootRecipientGroup

◆ m_meleeDamageSchoolMask

SpellSchoolMask Creature::m_meleeDamageSchoolMask
protected

◆ m_moveBackwardsMovementTime

uint32 Creature::m_moveBackwardsMovementTime = MOVE_BACKWARDS_CHECK_INTERVAL

Referenced by Update().

◆ m_moveCircleMovementTime

uint32 Creature::m_moveCircleMovementTime = MOVE_CIRCLE_CHECK_INTERVAL

Referenced by Update().

◆ m_moveInLineOfSightDisabled

bool Creature::m_moveInLineOfSightDisabled
protected

◆ m_moveInLineOfSightStrictlyDisabled

bool Creature::m_moveInLineOfSightStrictlyDisabled
protected

◆ m_originalEntry

uint32 Creature::m_originalEntry
protected

◆ m_originalEquipmentId

int8 Creature::m_originalEquipmentId
protected

◆ m_path_id

uint32 Creature::m_path_id
private

◆ m_ProhibitSchoolTime

uint32 Creature::m_ProhibitSchoolTime[7]

◆ m_reactState

ReactStates Creature::m_reactState
protected

◆ m_regenHealth

bool Creature::m_regenHealth
protected

◆ m_regenPower

bool Creature::m_regenPower
protected

Referenced by Regenerate(), and SetRegeneratingPower().

◆ m_respawnDelay

◆ m_respawnedTime

time_t Creature::m_respawnedTime
protected

◆ m_respawnTime

◆ m_SightDistance

◆ m_spawnId

◆ m_spells

◆ m_transportCheckTimer

uint16 Creature::m_transportCheckTimer
protected

Referenced by Update().

◆ m_transportHomePosition

◆ m_vendorItemCounts

VendorItemCounts Creature::m_vendorItemCounts
protected

◆ m_wanderDistance

float Creature::m_wanderDistance
protected

◆ m_waypointID

uint32 Creature::m_waypointID
private

◆ MOVE_BACKWARDS_CHECK_INTERVAL

constexpr uint32 Creature::MOVE_BACKWARDS_CHECK_INTERVAL = 2000
staticconstexpr

Referenced by Update().

◆ MOVE_CIRCLE_CHECK_INTERVAL

constexpr uint32 Creature::MOVE_CIRCLE_CHECK_INTERVAL = 3000
staticconstexpr

Referenced by Update().

◆ Orientation

float Creature::Orientation = 0.0f

◆ Spell

::Spell const* Creature::Spell = nullptr

◆ Target

ObjectGuid Creature::Target

◆ TriggerJustRespawned

bool Creature::TriggerJustRespawned
private

Referenced by Creature(), Respawn(), and Update().


The documentation for this class was generated from the following files: