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 TestCreature Minion Guardian Puppet Totem Pet

Public Member Functions

 Creature ()
 
 ~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 CanResetTalents (Player *player) const
 
bool CanCreatureAttack (Unit const *victim, bool skipDistCheck=false) const
 
bool IsImmunedToSpell (SpellInfo const *spellInfo, Spell const *spell=nullptr) override
 
bool HasMechanicTemplateImmunity (uint64 mask) const
 
bool IsImmunedToSpellEffect (SpellInfo const *spellInfo, uint32 index, Unit const *caster=nullptr) 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 SetSwim (bool enable) 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 LoadTemplateImmunities (int32 creatureImmunitiesId)
 
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)
 
CreatureTemplate const * GetCreatureTemplate () const
 
CreatureData const * GetCreatureData () const
 
uint32 GetGossipMenuId () const
 
void SetGossipMenuId (uint32 gossipMenuId)
 
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, bool force=false) 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 SetNoCallForHelp (bool val)
 
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=0ms, Seconds forcedRespawnTimer=0s)
 
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.
 
void AtEngage (Unit *target) override
 
void AtDisengage () override
 
bool IsEngaged () const override
 
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
 
ObjectGuid const & GetCannotReachTarget () 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)
 
std::pair< uint32, uint32GetCurrentWaypointInfo () const
 
void UpdateCurrentWaypointInfo (uint32 nodeId, uint32 pathId)
 
bool IsFormationLeader () const
 
void SignalFormationMovement ()
 
bool IsFormationLeaderMoveAllowed () const
 
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
 
CreatureTextRepeatIds const & GetTextRepeatGroup (uint8 textGroup)
 
void SetTextRepeatId (uint8 textGroup, uint8 id)
 
void ClearTextRepeatGroup (uint8 textGroup)
 
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 IsCrowdControlled () const
 
bool IsImmobilizedState () const
 
void SetAnimTier (AnimTier animTier)
 
bool IsSummon () const
 
bool IsGuardian () const
 
bool IsControllableGuardian () const
 
bool IsPet () const
 
bool IsHunterPet () const
 
bool IsTotem () const
 
bool IsVehicle () const
 
bool IsVendor () const
 
bool IsTrainer () const
 
bool IsQuestGiver () const
 
bool IsGossip () const
 
bool IsTaxi () const
 
bool IsGuildMaster () const
 
bool IsBattleMaster () const
 
bool IsBanker () const
 
bool IsInnkeeper () const
 
bool IsSpiritHealer () const
 
bool IsSpiritGuide () const
 
bool IsTabardDesigner () const
 
bool IsAuctioner () const
 
bool IsArmorer () const
 
bool IsServiceProvider () const
 
bool IsSpiritService () const
 
uint32 GetCreatureType () const
 
uint32 GetCreatureTypeMask () const
 
bool IsCritter () const
 
uint8 getRace (bool original=false) const
 
void setRace (uint8 race)
 
uint32 getRaceMask () const
 
DisplayRace GetDisplayRaceFromModelId (uint32 modelId) const
 
DisplayRace GetDisplayRace () const
 
uint8 getClass () const
 
virtual bool IsClass (Classes unitClass, ClassContext context=CLASS_CONTEXT_NONE) const
 
uint32 getClassMask () const
 
uint8 getGender () const
 
uint32 GetFaction () const
 
FactionTemplateEntry const * GetFactionTemplateEntry () const
 
void SetFaction (uint32 faction)
 
void RestoreFaction ()
 
uint32 GetOldFactionId () const
 
ObjectGuid GetTarget () const
 
bool isTargetableForAttack (bool checkFakeDeath=true, Unit const *byWho=nullptr) const
 
bool IsValidAttackTarget (Unit const *target, SpellInfo const *bySpell=nullptr) const
 
bool _IsValidAttackTarget (Unit const *target, SpellInfo const *bySpell, WorldObject const *obj=nullptr) const
 
bool IsValidAssistTarget (Unit const *target) const
 
bool _IsValidAssistTarget (Unit const *target, SpellInfo const *bySpell) const
 
bool IsClientControlled (Player const *exactClient=nullptr) const
 
Player const * GetClientControlling () const
 
float GetBoundaryRadius () const
 
float GetCombatReach () const override
 
float GetMeleeReach () const
 
bool IsWithinRange (Unit const *obj, float dist) const
 
bool IsWithinBoundaryRadius (const Unit *obj) const
 
bool IsWithinCombatRange (Unit const *obj, float dist2compare) const
 
bool IsWithinMeleeRange (Unit const *obj, float dist=0.f) const
 
float GetMeleeRange (Unit const *target) const
 
void setAttackTimer (WeaponAttackType type, int32 time)
 
void resetAttackTimer (WeaponAttackType type=BASE_ATTACK)
 
int32 getAttackTimer (WeaponAttackType type) const
 
bool isAttackReady (WeaponAttackType type=BASE_ATTACK) const
 
bool GetRandomContactPoint (Unit const *target, float &x, float &y, float &z, bool force=false) const
 
UnitgetAttackerForHelper () const
 
bool Attack (Unit *victim, bool meleeAttack)
 
void CastStop (uint32 except_spellid=0, bool withInstant=true)
 Interrupt the unit cast for all the current spells.
 
bool AttackStop ()
 Force the unit to stop attacking. This will clear UNIT_STATE_MELEE_ATTACKING, Interrupt current spell, AI assistance, and call SendMeleeAttackStop() to the client.
 
void RemoveAllAttackers ()
 Remove all units in m_attackers list and send them AttackStop()
 
AttackerSet const & getAttackers () const
 
bool GetMeleeAttackPoint (Unit *attacker, Position &pos)
 
bool isAttackingPlayer () const
 
UnitGetVictim () const
 
void CombatStop (bool includingCast=false, bool mutualPvP=true)
 
void CombatStopWithPets (bool includingCast=false)
 
void StopAttackFaction (uint32 faction_id)
 
void StopAttackingInvalidTarget ()
 
UnitSelectNearbyTarget (Unit *exclude=nullptr, float dist=NOMINAL_MELEE_RANGE) const
 
UnitSelectNearbyNoTotemTarget (Unit *exclude=nullptr, float dist=NOMINAL_MELEE_RANGE) const
 
void SendMeleeAttackStop (Unit *victim=nullptr)
 Send to the client SMSG_ATTACKSTOP but doesn't clear UNIT_STATE_MELEE_ATTACKING on server side or interrupt spells. Unless you know exactly what you're doing, use AttackStop() or RemoveAllAttackers() instead.
 
void SendMeleeAttackStart (Unit *victim, Player *sendTo=nullptr)
 
uint32 GetAttackTime (WeaponAttackType att) const
 
void SetAttackTime (WeaponAttackType att, uint32 val)
 
void ApplyAttackTimePercentMod (WeaponAttackType att, float val, bool apply)
 
void ApplyCastTimePercentMod (float val, bool apply)
 
void SetImmuneToAll (bool apply, bool keepCombat=false)
 
bool IsImmuneToAll () const
 
void SetImmuneToPC (bool apply, bool keepCombat=false)
 
bool IsImmuneToPC () const
 
void SetImmuneToNPC (bool apply, bool keepCombat=false)
 
bool IsImmuneToNPC () const
 
bool IsEngagedBy (Unit const *who) const
 
void EngageWithTarget (Unit *who)
 
bool IsInCombat () const
 
bool IsInCombatWith (Unit const *who) const
 
bool IsPetInCombat () const
 
void SetInCombatWith (Unit *enemy, bool addSecondUnitSuppressed=false)
 
void ClearInCombat ()
 
void ClearInPetCombat ()
 
uint32 GetCombatTimer () const
 
void SetCombatTimer (uint32 timer)
 
bool CanHaveThreatList (bool skipAliveCheck=false) const
 
void AddThreat (Unit *victim, float fThreat, SpellSchoolMask schoolMask=SPELL_SCHOOL_MASK_NORMAL, SpellInfo const *threatSpell=nullptr)
 
void AtTargetAttacked (Unit *target, bool canInitialAggro)
 
ThreatManagerGetThreatMgr ()
 
ThreatManager const & GetThreatMgr () const
 
CombatManagerGetCombatManager ()
 
CombatManager const & GetCombatManager () const
 
bool IsThreatened () const
 
bool IsThreatenedBy (Unit const *who) const
 
void UpdatePetCombatState ()
 
virtual void AtEnterCombat ()
 
virtual void AtExitCombat ()
 
bool IsCombatDisallowed () const
 
void SetIsCombatDisallowed (bool value)
 
void SetLastDamagedTargetGuid (ObjectGuid const &guid)
 
ObjectGuid const & GetLastDamagedTargetGuid () const
 
void AttackerStateUpdate (Unit *victim, WeaponAttackType attType=BASE_ATTACK, bool extra=false, bool ignoreCasting=false)
 
bool haveOffhandWeapon () const
 
bool CanDualWield () const
 
virtual void SetDualWieldMode (DualWieldMode mode)
 
bool HasMainhandWeapon () const
 
bool HasOffhandWeapon () const
 
bool HasRangedWeapon () const
 
bool hasMainhandWeaponForAttack () const
 
bool HasMainhandWeaponForAttack () const
 
bool HasOffhandWeaponForAttack () const
 
bool HasRangedWeaponForAttack () const
 
bool CanUseAttackType (WeaponAttackType attacktype) const
 
void HandleProcExtraAttackFor (Unit *victim, uint32 count)
 
void SetLastExtraAttackSpell (uint32 spellId)
 
uint32 GetLastExtraAttackSpell () const
 
void AddExtraAttacks (uint32 count)
 
uint8 GetComboPoints (Unit const *who=nullptr) const
 
uint8 GetComboPoints (ObjectGuid const &guid) const
 
UnitGetComboTarget () const
 
ObjectGuid const GetComboTargetGUID () const
 
void AddComboPoints (Unit *target, int8 count)
 
void AddComboPoints (int8 count)
 
void ClearComboPoints ()
 
void AddComboPointHolder (Unit *unit)
 
void RemoveComboPointHolder (Unit *unit)
 
void ClearComboPointHolders ()
 
void SetContestedPvP (Player *attackedPlayer=nullptr, bool lookForNearContestedGuards=true)
 
bool IsContestedGuard () const
 
bool RespondsToCallForHelp () const
 
bool IsInSanctuary () const
 
bool IsPvP () const
 
bool IsFFAPvP () const
 
void SetPvP (bool state)
 
float GetStat (Stats stat) const
 
void SetStat (Stats stat, int32 val)
 
Stats GetStatByAuraGroup (UnitMods unitMod) const
 
float GetCreateStat (Stats stat) const
 
void SetCreateStat (Stats stat, float val)
 
float GetPosStat (Stats stat) const
 
float GetNegStat (Stats stat) const
 
void InitStatBuffMods ()
 
bool HandleStatFlatModifier (UnitMods unitMod, UnitModifierFlatType modifierType, float amount, bool apply)
 
void ApplyStatPctModifier (UnitMods unitMod, UnitModifierPctType modifierType, float amount)
 
void SetStatFlatModifier (UnitMods unitMod, UnitModifierFlatType modifierType, float val)
 
void SetStatPctModifier (UnitMods unitMod, UnitModifierPctType modifierType, float val)
 
float GetFlatModifierValue (UnitMods unitMod, UnitModifierFlatType modifierType) const
 
float GetPctModifierValue (UnitMods unitMod, UnitModifierPctType modifierType) const
 
void UpdateUnitMod (UnitMods unitMod)
 
virtual bool CheckAttackFitToAuraRequirement (WeaponAttackType, AuraEffect const *) const
 
virtual void UpdateDamageDoneMods (WeaponAttackType attackType, int32 skipEnchantSlot=-1)
 
void UpdateAllDamageDoneMods ()
 
void UpdateDamagePctDoneMods (WeaponAttackType attackType)
 
void UpdateAllDamagePctDoneMods ()
 
float GetTotalStatValue (Stats stat, float additionalValue=0.0f) const
 
void SetCanModifyStats (bool modifyStats)
 
bool CanModifyStats () const
 
void UpdateStatBuffMod (Stats stat)
 
uint8 GetLevel () const
 
uint8 getLevelForTarget (WorldObject const *) const override
 
void SetLevel (uint8 lvl, bool showLevelChange=true)
 
uint32 GetHealth () const
 
uint32 GetMaxHealth () const
 
float GetHealthPct () const
 
int32 GetHealthGain (int32 dVal)
 
uint32 GetCreateHealth () const
 
bool IsFullHealth () const
 
bool HealthBelowPct (int32 pct) const
 
bool HealthBelowPctDamaged (int32 pct, uint32 damage) const
 
bool HealthAbovePct (int32 pct) const
 
bool HealthAbovePctHealed (int32 pct, uint32 heal) const
 
uint32 CountPctFromMaxHealth (int32 pct) const
 
uint32 CountPctFromCurHealth (int32 pct) const
 
void SetHealth (uint32 val)
 
void SetMaxHealth (uint32 val)
 
void SetFullHealth ()
 
int32 ModifyHealth (int32 val)
 
void SetCreateHealth (uint32 val)
 
Powers getPowerType () const
 
virtual bool HasActivePowerType (Powers power)
 
Powers GetPowerTypeByAuraGroup (UnitMods unitMod) const
 
uint32 GetPower (Powers power) const
 
uint32 GetMaxPower (Powers power) const
 
float GetPowerPct (Powers power) const
 
uint32 GetCreatePowers (Powers power) const
 
void setPowerType (Powers power)
 
void SetPower (Powers power, uint32 val, bool withPowerUpdate=true, bool fromRegenerate=false)
 
void SetMaxPower (Powers power, uint32 val)
 
int32 ModifyPower (Powers power, int32 val, bool withPowerUpdate=true)
 
void RewardRage (uint32 damage, uint32 weaponSpeedHitFactor, bool attacker)
 
uint32 GetCreateMana () const
 
void SetCreateMana (uint32 val)
 
bool CanRestoreMana (SpellInfo const *spellInfo) const
 
void SetLastManaUse (uint32 spellCastTime)
 
bool IsUnderLastManaUseEffect () const
 
float GetAPMultiplier (WeaponAttackType attType, bool normalized)
 
uint32 GetArmor () const
 
void SetArmor (int32 val)
 
float GetUnitDodgeChance () const
 
float GetUnitParryChance () const
 
float GetUnitBlockChance () const
 
float GetUnitMissChance (WeaponAttackType attType) const
 
float GetUnitCriticalChance (WeaponAttackType attackType, Unit const *victim) const
 
MeleeHitOutcome RollMeleeOutcomeAgainst (Unit const *victim, WeaponAttackType attType) const
 
MeleeHitOutcome RollMeleeOutcomeAgainst (Unit const *victim, WeaponAttackType attType, int32 crit_chance, int32 miss_chance, int32 dodge_chance, int32 parry_chance, int32 block_chance) const
 
bool CanApplyResilience () const
 
uint32 GetShieldBlockValue (uint32 soft_cap, uint32 hard_cap) const
 
uint32 GetUnitMeleeSkill (Unit const *target=nullptr) const
 
uint32 GetDefenseSkillValue (Unit const *target=nullptr) const
 
uint32 GetWeaponSkillValue (WeaponAttackType attType, Unit const *target=nullptr) const
 
int32 GetMechanicResistChance (SpellInfo const *spell)
 
uint32 GetResistance (SpellSchoolMask mask) const
 
uint32 GetResistance (SpellSchools school) const
 
void SetResistance (SpellSchools school, int32 val)
 
void UpdateResistanceBuffModsMod (SpellSchools school)
 
uint16 GetMaxSkillValueForLevel (Unit const *target=nullptr) const
 
float GetTotalAuraModValue (UnitMods unitMod) const
 
SpellSchools GetSpellSchoolByAuraGroup (UnitMods unitMod) const
 
float GetTotalAttackPowerValue (WeaponAttackType attType, Unit *pVictim=nullptr) const
 
float GetWeaponDamageRange (WeaponAttackType attType, WeaponDamageRange type, uint8 damageIndex=0) const
 
void SetBaseWeaponDamage (WeaponAttackType attType, WeaponDamageRange damageRange, float value, uint8 damageIndex=0)
 
virtual void UpdateAllResistances ()
 
virtual void UpdateDamagePhysical (WeaponAttackType attType)
 
void DealMeleeDamage (CalcDamageInfo *damageInfo, bool durabilityLoss)
 
void DealSpellDamage (SpellNonMeleeDamage *damageInfo, bool durabilityLoss, Spell const *spell=nullptr)
 
void DealDamageShieldDamage (Unit *victim)
 
void KillSelf (bool durabilityLoss=true, WeaponAttackType attackType=BASE_ATTACK, SpellInfo const *spellProto=nullptr, Spell const *spell=nullptr)
 
uint32 CalculateDamage (WeaponAttackType attType, bool normalized, bool addTotalPct, uint8 itemDamagesMask=0)
 
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)
 
int32 GetHighestExclusiveSameEffectSpellGroupValue (AuraEffect const *aurEff, AuraType auraType, bool checkMiscValue=false, int32 miscValue=0) const
 
bool IsHighestExclusiveAura (Aura const *aura, bool removeOtherAuraApplications=false)
 
bool IsHighestExclusiveAuraEffect (SpellInfo const *spellInfo, AuraType auraType, int32 effectAmount, uint8 auraEffectMask, bool removeOtherAuraApplications=false)
 
Aura_TryStackingOrRefreshingExistingAura (SpellInfo const *newAura, uint8 effMask, Unit *caster, int32 *baseAmount=nullptr, Item *castItem=nullptr, ObjectGuid casterGUID=ObjectGuid::Empty, bool periodicReset=false)
 
void _AddAura (UnitAura *aura, Unit *caster)
 
AuraApplication_CreateAuraApplication (Aura *aura, uint8 effMask)
 
void _ApplyAuraEffect (Aura *aura, uint8 effIndex)
 
void _ApplyAura (AuraApplication *aurApp, uint8 effMask)
 
void _UnapplyAura (AuraApplicationMap::iterator &i, AuraRemoveMode removeMode)
 
void _UnapplyAura (AuraApplication *aurApp, AuraRemoveMode removeMode)
 
void _RemoveNoStackAuraApplicationsDueToAura (Aura *aura)
 
void _RemoveNoStackAurasDueToAura (Aura *aura, bool owned)
 
bool _IsNoStackAuraDueToAura (Aura *appliedAura, Aura *existingAura) const
 
void _RegisterAuraEffect (AuraEffect *aurEff, bool apply)
 
AuraMapGetOwnedAuras ()
 
AuraMap const & GetOwnedAuras () const
 
void RemoveOwnedAura (AuraMap::iterator &i, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
 
void RemoveOwnedAura (uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
 
void RemoveOwnedAura (Aura *aura, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
 
AuraGetOwnedAura (uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, Aura *except=nullptr) const
 
AuraApplicationMapGetAppliedAuras ()
 
AuraApplicationMap const & GetAppliedAuras () const
 
void RemoveAura (AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
 
void RemoveAura (uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
 
void RemoveAura (AuraApplication *aurApp, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
 
void RemoveAura (Aura *aur, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
 
void RemoveBindSightAuras ()
 
void RemoveAppliedAuras (std::function< bool(AuraApplication const *)> const &check)
 
void RemoveOwnedAuras (std::function< bool(Aura const *)> const &check)
 
void RemoveAppliedAuras (uint32 spellId, std::function< bool(AuraApplication const *)> const &check)
 
void RemoveOwnedAuras (uint32 spellId, std::function< bool(Aura const *)> const &check)
 
void RemoveAurasDueToSpell (uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
 
void RemoveAuraFromStack (uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
 
void RemoveAurasDueToSpellByDispel (uint32 spellId, uint32 dispellerSpellId, ObjectGuid casterGUID, Unit *dispeller, uint8 chargesRemoved=1)
 
void RemoveAurasDueToSpellBySteal (uint32 spellId, ObjectGuid casterGUID, Unit *stealer)
 
void RemoveAurasDueToItemSpell (uint32 spellId, ObjectGuid castItemGuid)
 
void RemoveAurasByType (AuraType auraType, ObjectGuid casterGUID=ObjectGuid::Empty, Aura *except=nullptr, bool negative=true, bool positive=true)
 
void RemoveNotOwnSingleTargetAuras ()
 
void RemoveAurasWithInterruptFlags (uint32 flag, uint32 except=0, bool isAutoshot=false)
 
void RemoveAurasWithAttribute (uint32 flags)
 
void RemoveAurasWithFamily (SpellFamilyNames family, uint32 familyFlag1, uint32 familyFlag2, uint32 familyFlag3, ObjectGuid casterGUID)
 
void RemoveAurasWithMechanic (uint64 mechanic_mask, AuraRemoveMode removemode=AURA_REMOVE_BY_DEFAULT, uint32 except=0)
 
void RemoveMovementImpairingAuras (bool withRoot)
 
void RemoveAurasByShapeShift ()
 
void RemoveAreaAurasDueToLeaveWorld ()
 
void RemoveAllAuras ()
 
void RemoveArenaAuras ()
 
void RemoveAllAurasOnDeath ()
 
void RemoveAllAurasRequiringDeadTarget ()
 
void RemoveAllAurasExceptType (AuraType type)
 
void RemoveEvadeAuras ()
 
void DelayOwnedAuras (uint32 spellId, ObjectGuid caster, int32 delaytime)
 
void _RemoveAllAuraStatMods ()
 
void _ApplyAllAuraStatMods ()
 
AuraEffectList const & GetAuraEffectsByType (AuraType type) const
 
AuraListGetSingleCastAuras ()
 
AuraList const & GetSingleCastAuras () const
 
AuraEffectGetAuraEffect (uint32 spellId, uint8 effIndex, ObjectGuid casterGUID=ObjectGuid::Empty) const
 
AuraEffectGetAuraEffectOfRankedSpell (uint32 spellId, uint8 effIndex, ObjectGuid casterGUID=ObjectGuid::Empty) const
 
AuraEffectGetAuraEffect (AuraType type, SpellFamilyNames name, uint32 iconId, uint8 effIndex) const
 
AuraEffectGetAuraEffect (AuraType type, SpellFamilyNames family, uint32 familyFlag1, uint32 familyFlag2, uint32 familyFlag3, ObjectGuid casterGUID=ObjectGuid::Empty) const
 
AuraEffectGetAuraEffectDummy (uint32 spellid) const
 
AuraEffectGetDummyAuraEffect (SpellFamilyNames name, uint32 iconId, uint8 effIndex) const
 
AuraApplicationGetAuraApplication (uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraApplication *except=nullptr) const
 
AuraGetAura (uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
 
AuraApplicationGetAuraApplicationOfRankedSpell (uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraApplication *except=nullptr) const
 
AuraGetAuraOfRankedSpell (uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
 
void GetDispellableAuraList (Unit *caster, uint32 dispelMask, DispelChargesList &dispelList, SpellInfo const *dispelSpell)
 
bool HasAuraEffect (uint32 spellId, uint8 effIndex, ObjectGuid caster=ObjectGuid::Empty) const
 
uint32 GetAuraCount (uint32 spellId) const
 
bool HasAuras (SearchMethod sm, std::vector< uint32 > &spellIds) const
 Check if unit has ANY or ALL specified auras.
 
template<typename... Auras>
bool HasAnyAuras (Auras... spellIds) const
 Checks if the unit has ANY specified auras.
 
template<typename... Auras>
bool HasAllAuras (Auras... spellIds) const
 Checks if the unit has ALL specified auras.
 
bool HasAura (uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
 
bool HasAuraType (AuraType auraType) const
 
bool HasAuraTypeWithCaster (AuraType auratype, ObjectGuid caster) const
 
bool HasAuraTypeWithMiscvalue (AuraType auratype, int32 miscvalue) const
 
bool HasAuraTypeWithAffectMask (AuraType auratype, SpellInfo const *affectedSpell) const
 
bool HasAuraTypeWithValue (AuraType auratype, int32 value) const
 
bool HasAuraTypeWithTriggerSpell (AuraType auratype, uint32 triggerSpell) const
 
bool HasNegativeAuraWithInterruptFlag (uint32 flag, ObjectGuid guid=ObjectGuid::Empty)
 
bool HasVisibleAuraType (AuraType auraType) const
 
bool HasNegativeAuraWithAttribute (uint32 flag, ObjectGuid guid=ObjectGuid::Empty)
 
bool HasAuraWithMechanic (uint64 mechanicMask) const
 
bool HasAuraTypeWithFamilyFlags (AuraType auraType, uint32 familyName, uint32 familyFlags) const
 
bool HasBreakableByDamageAuraType (AuraType type, uint32 excludeAura=0) const
 
bool HasBreakableByDamageCrowdControlAura (Unit *excludeCasterChannel=nullptr) const
 
AuraEffectIsScriptOverriden (SpellInfo const *spell, int32 script) const
 
uint32 GetDiseasesByCaster (ObjectGuid casterGUID, uint8 mode=0)
 
uint32 GetDoTsByCaster (ObjectGuid casterGUID) const
 
int32 GetTotalAuraModifier (AuraType auratype) const
 
float GetTotalAuraMultiplier (AuraType auratype) const
 
int32 GetMaxPositiveAuraModifier (AuraType auratype) const
 
int32 GetMaxNegativeAuraModifier (AuraType auratype) const
 
int32 GetTotalAuraModifier (AuraType auratype, std::function< bool(AuraEffect const *)> const &predicate) const
 
float GetTotalAuraMultiplier (AuraType auraType, std::function< bool(AuraEffect const *)> const &predicate) const
 
int32 GetMaxPositiveAuraModifier (AuraType auraType, std::function< bool(AuraEffect const *)> const &predicate) const
 
int32 GetMaxNegativeAuraModifier (AuraType auraType, std::function< bool(AuraEffect const *)> const &predicate) const
 
int32 GetTotalAuraModifierByMiscMask (AuraType auratype, uint32 misc_mask) const
 
float GetTotalAuraMultiplierByMiscMask (AuraType auratype, uint32 misc_mask) const
 
int32 GetMaxPositiveAuraModifierByMiscMask (AuraType auratype, uint32 misc_mask, const AuraEffect *except=nullptr) const
 
int32 GetMaxNegativeAuraModifierByMiscMask (AuraType auratype, uint32 misc_mask) const
 
int32 GetTotalAuraModifierByMiscValue (AuraType auratype, int32 misc_value) const
 
float GetTotalAuraMultiplierByMiscValue (AuraType auratype, int32 misc_value) const
 
int32 GetMaxPositiveAuraModifierByMiscValue (AuraType auratype, int32 misc_value) const
 
int32 GetMaxNegativeAuraModifierByMiscValue (AuraType auratype, int32 misc_value) const
 
int32 GetTotalAuraModifierByAffectMask (AuraType auratype, SpellInfo const *affectedSpell) const
 
float GetTotalAuraMultiplierByAffectMask (AuraType auratype, SpellInfo const *affectedSpell) const
 
int32 GetMaxPositiveAuraModifierByAffectMask (AuraType auratype, SpellInfo const *affectedSpell) const
 
int32 GetMaxNegativeAuraModifierByAffectMask (AuraType auratype, SpellInfo const *affectedSpell) const
 
VisibleAuraMap const * GetVisibleAuras ()
 
AuraApplicationGetVisibleAura (uint8 slot)
 
void SetVisibleAura (uint8 slot, AuraApplication *aur)
 
void RemoveVisibleAura (uint8 slot)
 
void ModifyAuraState (AuraStateType flag, bool apply)
 
uint32 BuildAuraStateUpdateForTarget (Unit *target) const
 
bool HasAuraState (AuraStateType flag, SpellInfo const *spellProto=nullptr, Unit const *Caster=nullptr) const
 
bool CanProc ()
 
void SetCantProc (bool apply)
 
void ProcSkillsAndReactives (bool isVictim, Unit *target, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, SpellInfo const *procSpellInfo, uint32 damage, SpellInfo const *procAura=nullptr, int8 procAuraEffectIndex=-1, Spell const *procSpell=nullptr, DamageInfo *damageInfo=nullptr, HealInfo *healInfo=nullptr, uint32 procPhase=2)
 
void GetProcAurasTriggeredOnEvent (AuraApplicationProcContainer &aurasTriggeringProc, std::list< AuraApplication * > *procAuras, ProcEventInfo eventInfo)
 
void TriggerAurasProcOnEvent (CalcDamageInfo &damageInfo)
 
void TriggerAurasProcOnEvent (std::list< AuraApplication * > *myProcAuras, std::list< AuraApplication * > *targetProcAuras, Unit *actionTarget, uint32 typeMaskActor, uint32 typeMaskActionTarget, uint32 spellTypeMask, uint32 spellPhaseMask, uint32 hitMask, Spell *spell, DamageInfo *damageInfo, HealInfo *healInfo)
 
void TriggerAurasProcOnEvent (ProcEventInfo &eventInfo, AuraApplicationProcContainer &procAuras)
 
float GetWeaponProcChance () const
 
float GetPPMProcChance (uint32 WeaponSpeed, float PPM, SpellInfo const *spellProto) const
 
PlayerGetSpellModOwner () const
 
SpellGetCurrentSpell (CurrentSpellTypes spellType) const
 
SpellGetCurrentSpell (uint32 spellType) const
 
SpellGetFirstCurrentCastingSpell () const
 
SpellFindCurrentSpellBySpellId (uint32 spell_id) const
 
int32 GetCurrentSpellCastTime (uint32 spell_id) const
 
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)
 
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)
 
bool IsImmunedToSpell (SpellInfo const *spellInfo, uint32 effectMask, Unit const *caster=nullptr)
 
bool IsImmunedToDamage (SpellSchoolMask schoolMask) const
 
bool IsImmunedToDamage (Unit const *caster, SpellInfo const *spellInfo) const
 
bool IsImmunedToSchool (SpellSchoolMask schoolMask) const
 
uint32 GetSchoolImmunityMask () const
 
uint32 GetDamageImmunityMask () const
 
bool IsImmunedToSchool (SpellInfo const *spellInfo) const
 
bool IsImmunedToSchool (Spell const *spell) const
 
bool IsImmunedToDamageOrSchool (SpellSchoolMask schoolMask) const
 
bool IsImmunedToAuraPeriodicTick (Unit const *caster, SpellInfo const *spellInfo) const
 
bool isBlockCritical ()
 
float SpellDoneCritChance (Unit const *, SpellInfo const *spellProto, SpellSchoolMask schoolMask, WeaponAttackType attackType, bool skipEffectCheck) const
 
float SpellTakenCritChance (Unit const *caster, SpellInfo const *spellProto, SpellSchoolMask schoolMask, float doneChance, WeaponAttackType attackType, bool skipEffectCheck) const
 
float ApplyEffectModifiers (SpellInfo const *spellProto, uint8 effect_index, float value) const
 
int32 CalcSpellDuration (SpellInfo const *spellProto)
 
int32 ModSpellDuration (SpellInfo const *spellProto, Unit const *target, int32 duration, bool positive, uint32 effectMask)
 
void ModSpellCastTime (SpellInfo const *spellProto, int32 &castTime, Spell *spell=nullptr)
 
float CalculateLevelPenalty (SpellInfo const *spellProto) const
 
uint32 GetCastingTimeForBonus (SpellInfo const *spellProto, DamageEffectType damagetype, uint32 CastingTime) const
 
void CastDelayedSpellWithPeriodicAmount (Unit *caster, uint32 spellId, AuraType auraType, int32 addAmount, uint8 effectIndex=0)
 
SpellCastResult CastSpell (SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastSpell (Unit *victim, uint32 spellId, bool triggered, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastSpell (Unit *victim, uint32 spellId, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastSpell (Unit *victim, SpellInfo const *spellInfo, bool triggered, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastSpell (Unit *victim, SpellInfo const *spellInfo, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastSpell (float x, float y, float z, uint32 spellId, bool triggered, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastSpell (GameObject *go, uint32 spellId, bool triggered, Item *castItem=nullptr, AuraEffect *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastCustomSpell (Unit *victim, uint32 spellId, int32 const *bp0, int32 const *bp1, int32 const *bp2, bool triggered, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastCustomSpell (uint32 spellId, SpellValueMod mod, int32 value, Unit *victim, bool triggered, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastCustomSpell (uint32 spellId, SpellValueMod mod, int32 value, Unit *victim=nullptr, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastCustomSpell (uint32 spellId, CustomSpellValues const &value, Unit *victim=nullptr, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
SpellCastResult CastCustomSpell (SpellInfo const *spellInfo, CustomSpellValues const &value, Unit *victim=nullptr, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
 
void _RegisterDynObject (DynamicObject *dynObj)
 
void _UnregisterDynObject (DynamicObject *dynObj)
 
DynamicObjectGetDynObject (uint32 spellId)
 
bool RemoveDynObject (uint32 spellId)
 
void RemoveAllDynObjects ()
 
GameObjectGetGameObject (uint32 spellId) const
 
void AddGameObject (GameObject *gameObj)
 
void RemoveGameObject (GameObject *gameObj, bool del)
 
void RemoveGameObject (uint32 spellid, bool del)
 
void RemoveAllGameObjects ()
 
bool IsPolymorphed () const
 
bool isFrozen () const
 
bool IsInFlight () const
 
bool IsLevitating () const
 
bool IsWalking () const
 
bool isMoving () const
 
bool isTurning () const
 
bool IsHovering () const
 
bool isSwimming () const
 
bool IsFlying () const
 
bool IsFalling () const
 
bool IsRooted () 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)
 
void SetDisableGravity (bool disable)
 
void SetCanFly (bool enable)
 Add the movement flag: MOVEMENTFLAGCAN_FLY. Generaly only use by players, allowing them to fly by pressing space for example. For creatures, please look for DisableGravity().
 
void SetWaterWalking (bool enable)
 
void SetFeatherFall (bool enable)
 
void SetHover (bool enable)
 
MotionMasterGetMotionMaster ()
 
const MotionMasterGetMotionMaster () const
 
bool IsStopped () const
 
void StopMoving ()
 
void StopMovingOnCurrentPos ()
 
virtual void PauseMovement (uint32 timer=0, uint8 slot=0)
 Disable the unit movement by clearing UNIT_STATE_MOVING and stopping the spline.
 
void ResumeMovement (uint32 timer=0, uint8 slot=0)
 
void SetControlled (bool apply, UnitState state, Unit *source=nullptr, bool isFear=false)
 
void DisableRotate (bool apply)
 
void DisableSpline ()
 
SheathState GetSheath () const
 
virtual void SetSheath (SheathState sheathed)
 
uint8 getStandState () const
 
bool IsSitState () const
 
bool IsStandState () const
 
bool IsStandUpOnMovementState () const
 
void SetStandState (uint8 state)
 
void SetStandFlags (uint8 flags)
 
void RemoveStandFlags (uint8 flags)
 
DeathState getDeathState ()
 
bool IsAlive () const
 
bool isDying () const
 
bool isDead () const
 
bool HasGhostAura () const
 
bool HasMountedAura () const
 
bool HasWaterWalkAura () const
 
bool HasFeatherFallAura () const
 
bool HasHoverAura () const
 
bool HasFlyAura () const
 
bool HasSpiritOfRedemptionAura () const
 
bool HasPreventsFleeingAura () const
 
bool HasPreventDurabilityLossAura () const
 
bool HasPreventResurectionAura () const
 
bool HasTransformAura () const
 
bool HasInterruptRegenAura () const
 
bool HasNoPVPCreditAura () const
 
bool HasWaterBreathingAura () const
 
bool HasIgnoreHitDirectionAura () const
 
bool HasSpellMagnetAura () const
 
bool HasOpenStableAura () const
 
bool HasCloneCasterAura () const
 
bool HasReflectSpellsAura () const
 
bool HasDetectAmoreAura () const
 
bool HasAllowOnlyAbilityAura () const
 
bool HasPeriodicDummyAura () const
 
bool HasControlVehicleAura () const
 
bool HasAOECharmAura () const
 
bool HasDetectSpellsAura () const
 
bool HasPacifySilenceAura () const
 
bool HasSilenceAura () const
 
bool HasShapeshiftAura () const
 
bool HasDecreaseSpeedAura () const
 
bool HasPacifyAura () const
 
bool HasIgnoreTargetResistAura () const
 
bool HasIncreaseMountedSpeedAura () const
 
bool HasIncreaseMountedFlightSpeedAura () const
 
bool HasAttackerSpellCritChanceAura () const
 
bool HasUnattackableAura () const
 
bool HasHealthRegenInCombatAura () const
 
bool HasRegenDuringCombatAura () const
 
bool HasFearAura () const
 
bool HasConfuseAura () const
 
bool HasRootAura () const
 
bool HasStunAura () const
 
bool HasTauntAura () const
 
bool HasStealthAura () const
 
bool HasStealthDetectAura () const
 
bool HasInvisibilityAura () const
 
bool HasInvisibilityDetectAura () const
 
bool IsHostileTo (Unit const *unit) const
 
bool IsHostileToPlayers () const
 
bool IsFriendlyTo (Unit const *unit) const
 
bool IsNeutralToAll () const
 
void ClearAllReactives ()
 
void StartReactiveTimer (ReactiveType reactive)
 
void UpdateReactives (uint32 p_time)
 
DiminishingLevels GetDiminishing (DiminishingGroup group)
 
void IncrDiminishing (DiminishingGroup group)
 
float ApplyDiminishingToDuration (DiminishingGroup group, int32 &duration, Unit *caster, DiminishingLevels Level, int32 limitduration)
 
void ApplyDiminishingAura (DiminishingGroup group, bool apply)
 
void ClearDiminishings ()
 
bool IsInPartyWith (Unit const *unit) const
 
bool IsInRaidWith (Unit const *unit) const
 
void GetPartyMembers (std::list< Unit * > &units)
 
UnitGetNextRandomRaidMemberOrPet (float radius)
 
void UpdateAuraForGroup (uint8 slot)
 
ReputationRank GetReactionTo (Unit const *target, bool checkOriginalFaction=false) const
 
ReputationRank GetFactionReactionTo (FactionTemplateEntry const *factionTemplateEntry, Unit const *target) const
 
SharedVisionList const & GetSharedVisionList ()
 
void AddPlayerToVision (Player *player)
 
void RemovePlayerFromVision (Player *player)
 
bool HasSharedVision () const
 
uint32 GetVirtualItemId (uint32 slot) const
 
void SetVirtualItem (uint32 slot, uint32 itemId)
 
bool IsMounted () const
 
uint32 GetMountID () const
 
void Mount (uint32 mount, uint32 vehicleId=0, uint32 creatureEntry=0)
 
void Dismount ()
 
bool IsInDisallowedMountForm () const
 
void FollowerAdded (AbstractFollower *f)
 
void FollowerRemoved (AbstractFollower *f)
 
virtual float GetFollowAngle () const
 
void RemoveAllFollowers ()
 
GuardianGetGuardianPet () const
 
MinionGetFirstMinion () const
 
CreatureGetCompanionPet () const
 
PetCreateTamedPetFrom (Creature *creatureTarget, uint32 spell_id=0)
 
PetCreateTamedPetFrom (uint32 creatureEntry, uint32 spell_id=0)
 
bool InitTamedPet (Pet *pet, uint8 level, uint32 spell_id)
 
void SetMinion (Minion *minion, bool apply)
 
void GetAllMinionsByEntry (std::list< Creature * > &Minions, uint32 entry)
 
void RemoveAllMinionsByEntry (uint32 entry)
 
void AddPetAura (PetAura const *petSpell)
 
void RemovePetAura (PetAura const *petSpell)
 
void CastPetAura (PetAura const *aura)
 
bool IsPetAura (Aura const *aura)
 
void PetSpellFail (SpellInfo const *spellInfo, Unit *target, uint32 result)
 
void UnsummonAllTotems (bool onDeath=false)
 
TransportBaseGetDirectTransport () const
 
bool CreateVehicleKit (uint32 id, uint32 creatureEntry)
 Returns the transport this unit is on directly (if on vehicle and transport, return vehicle)
 
void RemoveVehicleKit ()
 
VehicleGetVehicleKit () const
 
VehicleGetVehicle () const
 
bool IsOnVehicle (Unit const *vehicle) const
 
UnitGetVehicleBase () const
 
CreatureGetVehicleCreatureBase () const
 
void EnterVehicle (Unit *base, int8 seatId=-1)
 
void EnterVehicleUnattackable (Unit *base, int8 seatId=-1)
 
void ExitVehicle (Position const *exitPosition=nullptr)
 
void ChangeSeat (int8 seatId, bool next=true)
 
bool HandleSpellClick (Unit *clicker, int8 seatId=-1)
 
void _ExitVehicle (Position const *exitPosition=nullptr)
 
void _EnterVehicle (Vehicle *vehicle, int8 seatId, AuraApplication const *aurApp=nullptr)
 
void HandleEmoteCommand (uint32 emoteId)
 
virtual void Talk (std::string_view text, ChatMsg msgType, Language language, float textRange, WorldObject const *target)
 
virtual void Say (std::string_view text, Language language, WorldObject const *target=nullptr)
 
virtual void Yell (std::string_view text, Language language, WorldObject const *target=nullptr)
 
virtual void TextEmote (std::string_view text, WorldObject const *target=nullptr, bool isBossEmote=false)
 
virtual void Whisper (std::string_view text, Language language, Player *target, bool isBossWhisper=false)
 
virtual void Talk (uint32 textId, ChatMsg msgType, float textRange, WorldObject const *target)
 
virtual void Say (uint32 textId, WorldObject const *target=nullptr)
 
virtual void Yell (uint32 textId, WorldObject const *target=nullptr)
 
virtual void TextEmote (uint32 textId, WorldObject const *target=nullptr, bool isBossEmote=false)
 
virtual void Whisper (uint32 textId, Player *target, bool isBossWhisper=false)
 
ShapeshiftForm GetShapeshiftForm () const
 
void SetShapeshiftForm (ShapeshiftForm form)
 
bool IsAttackSpeedOverridenShapeShift () const
 
bool IsInFeralForm () const
 
void setTransForm (uint32 spellid)
 
uint32 getTransForm () const
 
void DeMorph ()
 
virtual 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, Milliseconds timed=0ms)
 
bool isInAccessiblePlaceFor (Creature const *c) const
 
bool isInFrontInMap (Unit const *target, float distance, float arc=M_PI) const
 
bool isInBackInMap (Unit const *target, float distance, float arc=M_PI) const
 
float GetCollisionHeight () const override
 Return collision height sent to client.
 
float GetCollisionWidth () const override
 this method gets the diameter of a Unit by DB if any value is defined, otherwise it gets the value by the DBC
 
float GetCollisionRadius () const override
 this method gets the radius of a Unit by DB if any value is defined, otherwise it gets the value by the DBC
 
void UpdateOrientation (float orientation)
 Only server-side orientation update, does not broadcast to client.
 
void UpdateHeight (float newZ)
 Only server-side height update, does not broadcast to client.
 
virtual bool UpdatePosition (float x, float y, float z, float ang, bool teleport=false)
 
bool UpdatePosition (const Position &pos, bool teleport=false)
 
void ProcessPositionDataChanged (PositionFullTerrainStatus const &data) override
 
virtual void ProcessTerrainStatusUpdate ()
 
bool IsVisible () const
 
void SetVisible (bool x)
 
void SetModelVisible (bool on)
 
uint32 GetPhaseByAuras () const
 
void SetPhaseMask (uint32 newPhaseMask, bool update) override
 
void UpdateObjectVisibility (bool forced=true, bool fromUpdate=false) override
 
void AddPointedBy (SafeUnitPointer *sup)
 
void RemovePointedBy (SafeUnitPointer *sup)
 
void SendAttackStateUpdate (CalcDamageInfo *damageInfo)
 
void SendAttackStateUpdate (uint32 HitInfo, Unit *target, uint8 SwingType, SpellSchoolMask damageSchoolMask, uint32 Damage, uint32 AbsorbDamage, uint32 Resist, VictimState TargetState, uint32 BlockedAmount)
 
void SendComboPoints ()
 
void SendPlaySpellVisual (uint32 id)
 
void SendPlaySpellImpact (ObjectGuid guid, uint32 id)
 
void SendPetActionFeedback (uint8 msg) const
 -------—Pet responses methods--------------—
 
void SendPetActionSound (PetAction action) const
 
void SendPetDismissSound () const
 
void SendPetAIReaction (ObjectGuid guid) const
 
void SendPeriodicAuraLog (SpellPeriodicAuraLogInfo *pInfo)
 
void SendSpellNonMeleeDamageLog (SpellNonMeleeDamage *log)
 
void SendSpellNonMeleeReflectLog (SpellNonMeleeDamage *log, Unit *attacker)
 
void SendSpellNonMeleeDamageLog (Unit *target, SpellInfo const *spellInfo, uint32 Damage, SpellSchoolMask damageSchoolMask, uint32 AbsorbedDamage, uint32 Resist, bool PhysicalDamage, uint32 Blocked, bool CriticalHit=false, bool Split=false)
 
void SendSpellMiss (Unit *target, uint32 spellID, SpellMissInfo missInfo)
 
void SendSpellDamageResist (Unit *target, uint32 spellId)
 
void SendSpellDamageImmune (Unit *target, uint32 spellId)
 
void SendTameFailure (uint8 result)
 
void SendTeleportPacket (Position &pos)
 
void SendMovementFlagUpdate (bool self=false)
 
void SendMovementWaterWalking (Player *sendTo)
 
void SendMovementFeatherFall (Player *sendTo)
 
void SendMovementHover (Player *sendTo)
 
void SendClearTarget ()
 
void ExecuteDelayedUnitRelocationEvent ()
 
void ExecuteDelayedUnitAINotifyEvent ()
 
void BuildHeartBeatMsg (WorldPacket *data) const
 
void BuildMovementPacket (ByteBuffer *data) const
 
void OutDebugInfo () const
 
std::string GetDebugInfo () const override
 
- Public Member Functions inherited from WorldObject
 ~WorldObject () override
 
void _Create (ObjectGuid::LowType guidlow, HighGuid guidhigh, uint32 phaseMask)
 
void AddToWorld () override
 
void RemoveFromWorld () override
 
void GetNearPoint2D (WorldObject const *searcher, float &x, float &y, float distance, float absAngle, Position const *startPos=nullptr) const
 
void GetNearPoint2D (float &x, float &y, float distance, float absAngle, Position const *startPos=nullptr) const
 
void GetNearPoint (WorldObject const *searcher, float &x, float &y, float &z, float searcher_size, float distance2d, float absAngle, float controlZ=0, Position const *startPos=nullptr) const
 
void GetVoidClosePoint (float &x, float &y, float &z, float size, float distance2d=0, float relAngle=0, float controlZ=0) const
 
bool GetClosePoint (float &x, float &y, float &z, float size, float distance2d=0, float angle=0, WorldObject const *forWho=nullptr, bool force=false) const
 
void MovePosition (Position &pos, float dist, float angle)
 
Position GetNearPosition (float dist, float angle)
 
void MovePositionToFirstCollision (Position &pos, float dist, float angle)
 
Position GetFirstCollisionPosition (float startX, float startY, float startZ, float destX, float destY)
 
Position GetFirstCollisionPosition (float destX, float destY, float destZ)
 
Position GetFirstCollisionPosition (float dist, float angle)
 
Position GetRandomNearPosition (float radius)
 
void GetContactPoint (WorldObject const *obj, float &x, float &y, float &z, float distance2d=CONTACT_DISTANCE) const
 
void GetChargeContactPoint (WorldObject const *obj, float &x, float &y, float &z, float distance2d=CONTACT_DISTANCE) const
 
float GetObjectSize () const
 
void UpdateGroundPositionZ (float x, float y, float &z) const
 
void UpdateAllowedPositionZ (float x, float y, float &z, float *groundZ=nullptr) const
 
void GetRandomPoint (const Position &srcPos, float distance, float &rand_x, float &rand_y, float &rand_z) const
 
Position GetRandomPoint (const Position &srcPos, float distance) const
 
uint32 GetInstanceId () const
 
uint32 GetPhaseMask () const
 
bool InSamePhase (WorldObject const *obj) const
 
bool InSamePhase (uint32 phasemask) const
 
uint32 GetZoneId () const
 
uint32 GetAreaId () const
 
void GetZoneAndAreaId (uint32 &zoneid, uint32 &areaid) const
 
bool IsOutdoors () const
 
LiquidData const & GetLiquidData () const
 
InstanceScriptGetInstanceScript () const
 
std::string const & GetName () const
 
void SetName (std::string const &newname)
 
float GetDistance (WorldObject const *obj) const
 
float GetDistance (const Position &pos) const
 
float GetDistance (float x, float y, float z) const
 
float GetDistance2d (WorldObject const *obj) const
 
float GetDistance2d (float x, float y) const
 
float GetDistanceZ (WorldObject const *obj) const
 
bool IsSelfOrInSameMap (WorldObject const *obj) const
 
bool IsInMap (WorldObject const *obj) const
 
bool IsWithinDist3d (float x, float y, float z, float dist) const
 
bool IsWithinDist3d (const Position *pos, float dist) const
 
bool IsWithinDist2d (float x, float y, float dist) const
 
bool IsWithinDist2d (const Position *pos, float dist) const
 
virtual bool IsWithinSightRange (Position const &pos, float dist) const
 
bool IsWithinDist (WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
 
bool IsWithinDistInMap (WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
 
bool IsWithinLOS (float x, float y, float z, VMAP::ModelIgnoreFlags ignoreFlags=VMAP::ModelIgnoreFlags::Nothing, LineOfSightChecks checks=LINEOFSIGHT_ALL_CHECKS) const
 
bool IsWithinLOSInMap (WorldObject const *obj, VMAP::ModelIgnoreFlags ignoreFlags=VMAP::ModelIgnoreFlags::Nothing, LineOfSightChecks checks=LINEOFSIGHT_ALL_CHECKS, Optional< float > collisionHeight={ }, Optional< float > combatReach={ }) const
 
Position GetHitSpherePointFor (Position const &dest, Optional< float > collisionHeight={ }, Optional< float > combatReach={ }) const
 
void GetHitSpherePointFor (Position const &dest, float &x, float &y, float &z, Optional< float > collisionHeight={ }, Optional< float > combatReach={ }) const
 
bool GetDistanceOrder (WorldObject const *obj1, WorldObject const *obj2, bool is3D=true) const
 
bool IsInRange (WorldObject const *obj, float minRange, float maxRange, bool is3D=true) const
 
bool IsInRange2d (float x, float y, float minRange, float maxRange) const
 
bool IsInRange3d (float x, float y, float z, float minRange, float maxRange) const
 
bool isInFront (WorldObject const *target, float arc=M_PI) const
 
bool isInBack (WorldObject const *target, float arc=M_PI) const
 
bool IsInBetween (WorldObject const *obj1, WorldObject const *obj2, float size=0) const
 
virtual void SendMessageToSet (WorldPacket const *data, bool self) const
 
virtual void SendMessageToSetInRange (WorldPacket const *data, float dist, bool self) const
 
virtual void SendMessageToSet (WorldPacket const *data, Player const *skipped_rcvr) const
 
void PlayDistanceSound (uint32 sound_id, Player *target=nullptr)
 
void PlayDirectSound (uint32 sound_id, Player *target=nullptr)
 
void PlayRadiusSound (uint32 sound_id, float radius)
 
void PlayDirectMusic (uint32 music_id, Player *target=nullptr)
 
void PlayRadiusMusic (uint32 music_id, float radius)
 
template<typename Worker >
void DoForAllVisiblePlayers (Worker &&worker)
 
template<typename Worker >
void DoForAllVisibleWorldObjects (Worker &&worker)
 
void DestroyForVisiblePlayers ()
 
void SendObjectDeSpawnAnim (ObjectGuid guid)
 
void AddObjectToRemoveList ()
 
float GetGridActivationRange () const
 
float GetVisibilityRange () const
 
virtual float GetSightRange (WorldObject const *target=nullptr) const
 
bool CanSeeOrDetect (WorldObject const *obj, bool ignoreStealth=false, bool distanceCheck=false, bool checkAlert=false) const
 
void SendPlayMusic (uint32 Music, bool OnlySelf)
 
virtual void SetMap (Map *map)
 
virtual void ResetMap ()
 
MapGetMap () const
 
MapFindMap () const
 
void SetZoneScript ()
 
void ClearZoneScript ()
 
ZoneScriptGetZoneScript () const
 
TempSummonSummonCreature (uint32 id, const Position &pos, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false) const
 
TempSummonSummonCreature (uint32 id, float x, float y, float z, float ang=0, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false)
 
GameObjectSummonGameObject (uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime, bool checkTransport=true, GOSummonType summonType=GO_SUMMON_TIMED_OR_CORPSE_DESPAWN)
 
CreatureSummonTrigger (float x, float y, float z, float ang, uint32 dur, bool setLevel=false, CreatureAI *(*GetAI)(Creature *)=nullptr)
 
void SummonCreatureGroup (uint8 group, std::list< TempSummon * > *list=nullptr)
 
void SummonGameObjectGroup (uint8 group, std::list< GameObject * > *list=nullptr)
 
CreatureFindNearestCreature (uint32 entry, float range, bool alive=true) const
 
GameObjectFindNearestGameObject (uint32 entry, float range, bool onlySpawned=false) const
 
GameObjectFindNearestGameObjectOfType (GameobjectTypes type, float range) const
 
PlayerSelectNearestPlayer (float distance=0) const
 
void GetGameObjectListWithEntryInGrid (std::list< GameObject * > &lList, uint32 uiEntry, float fMaxSearchRange) const
 
void GetGameObjectListWithEntryInGrid (std::list< GameObject * > &gameobjectList, std::vector< uint32 > const &entries, float maxSearchRange) const
 
void GetCreatureListWithEntryInGrid (std::list< Creature * > &lList, uint32 uiEntry, float fMaxSearchRange) const
 
void GetCreatureListWithEntryInGrid (std::list< Creature * > &creatureList, std::vector< uint32 > const &entries, float maxSearchRange) const
 
void GetDeadCreatureListInGrid (std::list< Creature * > &lList, float maxSearchRange, bool alive=false) const
 
virtual void UpdateObjectVisibilityOnCreate ()
 
void BuildUpdate (UpdateDataMapType &data_map) override
 
void GetCreaturesWithEntryInRange (std::list< Creature * > &creatureList, float radius, uint32 entry)
 
void SetPositionDataUpdate ()
 
void UpdatePositionData ()
 
void AddToObjectUpdate () override
 
void RemoveFromObjectUpdate () override
 
void AddToNotify (uint16 f)
 
void RemoveFromNotify (uint16 f)
 
bool isNeedNotify (uint16 f) const
 
uint16 GetNotifyFlags () const
 
bool NotifyExecuted (uint16 f) const
 
void SetNotified (uint16 f)
 
void ResetAllNotifies ()
 
bool isActiveObject () const
 
void setActive (bool isActiveObject)
 
VisibilityDistanceType GetVisibilityOverrideType () const
 
bool IsVisibilityOverridden () const
 
bool IsZoneWideVisible () const
 
bool IsFarVisible () const
 
float GetVisibilityOverrideDistance () const
 
void SetVisibilityDistanceOverride (VisibilityDistanceType type)
 
bool IsInWintergrasp () const
 
TransportGetTransport () const
 
float GetTransOffsetX () const
 
float GetTransOffsetY () const
 
float GetTransOffsetZ () const
 
float GetTransOffsetO () const
 
uint32 GetTransTime () const
 
int8 GetTransSeat () const
 
void SetTransport (Transport *t)
 
virtual float GetStationaryX () const
 
virtual float GetStationaryY () const
 
virtual float GetStationaryZ () const
 
virtual float GetStationaryO () const
 
float GetMapWaterOrGroundLevel (Position pos, float *ground=nullptr) const
 
float GetMapWaterOrGroundLevel (float x, float y, float z, float *ground=nullptr) const
 
float GetMapHeight (float x, float y, float z, bool vmap=true, float distanceToSearch=50.0f) const
 
float GetFloorZ () const
 
float GetMinHeightInWater () const
 Get the minimum height of a object that should be in water to start floating/swim.
 
void AddAllowedLooter (ObjectGuid guid)
 
void ResetAllowedLooters ()
 
void SetAllowedLooters (GuidUnorderedSet const looters)
 
bool HasAllowedLooter (ObjectGuid guid) const
 
GuidUnorderedSet const & GetAllowedLooters () const
 
void RemoveAllowedLooter (ObjectGuid guid)
 
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 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
 
bool HasInLine (Position const *pos, float objSize, 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, SpellInfo const *spellInfo=nullptr)
 
static uint32 DealDamage (Unit *attacker, Unit *victim, uint32 damage, CleanDamage const *cleanDamage=nullptr, DamageEffectType damagetype=DIRECT_DAMAGE, SpellSchoolMask damageSchoolMask=SPELL_SCHOOL_MASK_NORMAL, SpellInfo const *spellProto=nullptr, bool durabilityLoss=true, bool allowGM=false, Spell const *spell=nullptr)
 
static void DealDamageMods (Unit const *victim, uint32 &damage, uint32 *absorb)
 
static void Kill (Unit *killer, Unit *victim, bool durabilityLoss=true, WeaponAttackType attackType=BASE_ATTACK, SpellInfo const *spellProto=nullptr, Spell const *spell=nullptr)
 
static bool IsDamageReducedByArmor (SpellSchoolMask damageSchoolMask, SpellInfo const *spellInfo=nullptr, uint8 effIndex=MAX_SPELL_EFFECTS)
 
static uint32 CalcArmorReducedDamage (Unit const *attacker, Unit const *victim, const uint32 damage, SpellInfo const *spellInfo, uint8 attackerLevel=0, WeaponAttackType attackType=MAX_ATTACK)
 
static uint32 SpellCriticalDamageBonus (Unit const *caster, SpellInfo const *spellProto, uint32 damage, Unit const *victim)
 
static void ProcSkillsAndAuras (Unit *actor, Unit *victim, uint32 procAttacker, uint32 procVictim, uint32 procEx, uint32 amount, WeaponAttackType attType=BASE_ATTACK, SpellInfo const *procSpellInfo=nullptr, SpellInfo const *procAura=nullptr, int8 procAuraEffectIndex=-1, Spell const *procSpell=nullptr, DamageInfo *damageInfo=nullptr, HealInfo *healInfo=nullptr, uint32 procPhase=2)
 
static int32 DealHeal (Unit *healer, Unit *victim, uint32 addhealth)
 
static uint32 SpellCriticalHealingBonus (Unit const *caster, SpellInfo const *spellProto, uint32 damage, Unit const *victim)
 
static void CalcAbsorbResist (DamageInfo &dmgInfo, bool Splited=false)
 
static void CalcHealAbsorb (HealInfo &healInfo)
 
static bool IsImmuneMaskFully (SpellSchoolMask immuneMask, SpellSchoolMask schoolMask)
 
static void HandleSafeUnitPointersOnDelete (Unit *thisUnit)
 
- Static Public Member Functions inherited from Object
static ObjectGuid GetGUID (Object const *o)
 
- Static Public Member Functions inherited from Position
static float NormalizeOrientation (float o)
 

Public Attributes

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

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 ()
 
void BuildValuesUpdate (uint8 updateType, ByteBuffer *data, Player *target) override
 
void _UpdateSpells (uint32 time)
 
void _DeleteRemovedAuras ()
 
void _UpdateAutoRepeatSpell ()
 
bool CanSparringWith (Unit const *attacker) const
 
bool IsAlwaysVisibleFor (WorldObject const *seer) const override
 : Check if unit is eligible for sparring damages. Work only if attacker and victim are creatures.
 
bool IsAlwaysDetectableFor (WorldObject const *seer) const override
 
void SetFeared (bool apply, Unit *fearedBy=nullptr, bool isFear=false)
 
void SetConfused (bool apply)
 
void SetStunned (bool apply)
 
void SetRooted (bool apply, bool stun=false, bool logout=false)
 
void SendMoveRoot (bool state)
 
- Protected Member Functions inherited from WorldObject
 WorldObject ()
 
void SetLocationMapId (uint32 _mapId)
 
void SetLocationInstanceId (uint32 _instanceId)
 
virtual bool IsNeverVisible () const
 
- 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_alreadyCallForHelp
 
bool m_AlreadyCallAssistance
 
bool m_AlreadySearchedAssistance
 
bool m_regenHealth
 
bool m_regenPower
 
bool m_AI_locked
 
SpellSchoolMask m_meleeDamageSchoolMask
 
uint32 m_originalEntry
 
int32 _creatureImmunitiesId
 
uint32 _gossipMenuId
 
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_auraFlatModifiersGroup [UNIT_MOD_END][MODIFIER_TYPE_FLAT_END]
 
float m_auraPctModifiersGroup [UNIT_MOD_END][MODIFIER_TYPE_PCT_END]
 
float m_weaponDamage [MAX_ATTACK][MAX_WEAPON_DAMAGE_RANGE][MAX_ITEM_PROTO_DAMAGES]
 
bool m_canModifyStats
 
VisibleAuraMap m_visibleAuras
 
float m_speed_rate [MAX_MOVE_TYPE]
 
CharmInfom_charmInfo
 
SharedVisionList m_sharedVision
 
MotionMasteri_motionMaster
 
uint32 m_reactiveTimer [MAX_REACTIVE]
 
int32 m_regenTimer
 
ThreatManager m_threatManager
 
CombatManager m_combatManager
 
CharmThreatMap _charmThreatInfo
 
Vehiclem_vehicle
 
Vehiclem_vehicleKit
 
uint32 m_unitTypeMask
 
LiquidTypeEntry const * _lastLiquid
 
bool m_applyResilience
 
bool _instantCast
 
- Protected Attributes inherited from WorldObject
std::string m_name
 
bool m_isActive
 
VisibilityDistanceType _visibilityDistanceOverrideType
 
ZoneScriptm_zoneScript
 
uint32 _zoneId
 
uint32 _areaId
 
float _floorZ
 
bool _outdoors
 
LiquidData _liquidData
 
bool _updatePositionData
 
Transportm_transport
 
- Protected Attributes inherited from Object
uint16 m_objectType
 
TypeID m_objectTypeId
 
uint16 m_updateFlag
 
union { 
 
   int32 *   m_int32Values 
 
   uint32 *   m_uint32Values 
 
   float *   m_floatValues 
 
};  
 
UpdateMask _changesMask
 
uint16 m_valuesCount
 
uint16 _fieldNotifyFlags
 
bool m_objectUpdated
 

Private Member Functions

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

Private Attributes

uint32 m_waypointID
 
uint32 m_path_id
 
std::pair< uint32, uint32_currentWaypointNodeInfo {0, 0}
 
CreatureGroupm_formation
 
bool TriggerJustRespawned
 
std::shared_ptr< time_t > m_lastLeashExtensionTime
 
ObjectGuid m_cannotReachTarget
 
Spell const * _focusSpell
 
ObjectGuid _spellFocusTarget
 

‍Locks the target during spell cast for proper facing


 
CreatureTextRepeatGroup m_textRepeat
 

‍Saved target during spell focus for restoration


 
bool _isMissingSwimmingFlagOutOfCombat
 
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::vector< std::pair< uint8, AuraApplication * > > AuraApplicationProcContainer
 
typedef std::list< DiminishingReturnDiminishing
 
typedef GuidUnorderedSet ComboPointHolderSet
 
typedef std::map< uint8, AuraApplication * > VisibleAuraMap
 
typedef std::unordered_multimap< uint32, uint32SpellImmuneContainer
 
typedef std::set< PetAura const * > PetAuraSet
 
- Public 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 ( )
explicit
268{
271
272 for (uint8 i = 0; i < MAX_CREATURE_SPELLS; ++i)
273 m_spells[i] = 0;
274
275 for (uint8 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i)
277
279
281 DisableLootReward = false;
282
284 m_CombatDistance = 0.0f;
285
286 ResetLootMode(); // restore default loot mode
287 TriggerJustRespawned = false;
288 _focusSpell = nullptr;
289
290 m_respawnedTime = time_t(0);
291}
#define CREATURE_REGEN_INTERVAL
Definition CreatureData.h:32
std::uint8_t uint8
Definition Define.h:109
@ IDLE_MOTION_TYPE
Definition MotionMaster.h:39
@ SPELL_SCHOOL_NORMAL
Definition SharedDefines.h:271
constexpr auto MAX_SPELL_SCHOOL
Definition SharedDefines.h:280
@ SPELL_SCHOOL_MASK_NORMAL
Definition SharedDefines.h:285
@ REACT_AGGRESSIVE
Definition Unit.h:568
static constexpr uint32 MAX_CREATURE_SPELLS
Definition Unit.h:45
@ UNIT_END
Definition UpdateFields.h:175
@ CONFIG_SIGHT_MONSTER
Definition WorldConfig.h:153
bool m_regenPower
Definition Creature.h:493
float m_wanderDistance
Definition Creature.h:474
void ResetLootMode()
Definition Creature.h:248
std::shared_ptr< time_t > m_lastLeashExtensionTime
Definition Creature.h:538
SpellSchoolMask m_meleeDamageSchoolMask
Definition Creature.h:496
uint16 m_transportCheckTimer
Definition Creature.h:476
bool m_AI_locked
Definition Creature.h:494
uint32 m_assistanceTimer
Definition Creature.h:549
int8 m_originalEquipmentId
Definition Creature.h:487
ObjectGuid::LowType m_spawnId
For new or temporary creatures is 0 for saved it is lowguid.
Definition Creature.h:485
Position m_transportHomePosition
Definition Creature.h:505
ObjectGuid::LowType m_lootRecipientGroup
Definition Creature.h:466
uint32 m_spells[MAX_CREATURE_SPELLS]
Definition Creature.h:253
CreatureTemplate const * m_creatureInfo
Definition Creature.h:510
bool _isMissingSwimmingFlagOutOfCombat
Definition Creature.h:547
uint32 m_waypointID
Definition Creature.h:528
MovementGeneratorType m_defaultMovementType
Definition Creature.h:484
float m_detectionDistance
Definition Creature.h:513
CreatureSpellCooldowns m_CreatureSpellCooldowns
Definition Creature.h:254
float m_SightDistance
Definition Creature.h:390
float _sparringPct
Definition Creature.h:516
uint32 m_respawnDelay
Definition Creature.h:472
bool m_alreadyCallForHelp
Definition Creature.h:489
time_t m_corpseRemoveTime
Timers.
Definition Creature.h:469
uint32 m_combatPulseDelay
Definition Creature.h:479
time_t m_respawnTime
Definition Creature.h:470
uint32 _gossipMenuId
Definition Creature.h:499
CreatureData const * m_creatureData
Definition Creature.h:511
float m_CombatDistance
Definition Creature.h:390
time_t m_respawnedTime
Definition Creature.h:471
uint32 m_boundaryCheckTime
Definition Creature.h:475
Position m_homePosition
Definition Creature.h:504
bool TriggerJustRespawned
Definition Creature.h:534
bool m_AlreadyCallAssistance
Definition Creature.h:490
CreatureGroup * m_formation
Definition Creature.h:533
uint32 m_corpseDelay
Definition Creature.h:473
uint8 m_equipmentId
Definition Creature.h:486
bool m_AlreadySearchedAssistance
Definition Creature.h:491
uint32 m_originalEntry
Definition Creature.h:497
ReactStates m_reactState
Definition Creature.h:481
bool DisableReputationReward
Definition Creature.h:507
Spell const * _focusSpell
Definition Creature.h:542
uint32 lootPickPocketRestoreTime
Definition Creature.h:477
bool m_moveInLineOfSightStrictlyDisabled
Definition Creature.h:502
uint32 lootingGroupLowGUID
Definition Creature.h:311
bool _isCombatMovementAllowed
Definition Creature.h:553
bool DisableLootReward
Definition Creature.h:508
bool m_regenHealth
Definition Creature.h:492
uint32 _playerDamageReq
Definition Creature.h:551
bool _damagedByPlayer
Definition Creature.h:552
uint32 m_path_id
Definition Creature.h:529
bool m_moveInLineOfSightDisabled
Definition Creature.h:501
uint32 m_groupLootTimer
Definition Creature.h:310
uint32 m_combatPulseTime
Definition Creature.h:478
uint32 m_ProhibitSchoolTime[7]
Definition Creature.h:255
MovableMapObject()=default
uint16 m_valuesCount
Definition Object.h:266
int32 m_regenTimer
Definition Unit.h:2192
Unit()
Definition Unit.cpp:332
#define sWorld
Definition World.h:316

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
294{
295 m_vendorItemCounts.clear();
296
297 delete i_AI;
298 i_AI = nullptr;
299}
VendorItemCounts m_vendorItemCounts
Definition Creature.h:461
UnitAI * i_AI
Definition Unit.h:2138

References Unit::i_AI, and m_vendorItemCounts.

Member Function Documentation

◆ _AddCreatureSpellCooldown()

void Creature::_AddCreatureSpellCooldown ( uint32  spell_id,
uint16  categoryId,
uint32  end_time 
)
2901{
2902 CreatureSpellCooldown spellCooldown;
2903 spellCooldown.category = categoryId;
2904 spellCooldown.end = GameTime::GetGameTimeMS().count() + end_time;
2905 m_CreatureSpellCooldowns[spell_id] = std::move(spellCooldown);
2906}
Milliseconds GetGameTimeMS()
Definition GameTime.cpp:43
Definition CreatureData.h:498
uint16 category
Definition CreatureData.h:502
uint32 end
Definition CreatureData.h:503

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

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

◆ _GetDamageMod()

float Creature::_GetDamageMod ( int32  Rank)
static
1555{
1556 switch (Rank) // define rates for each elite rank
1557 {
1559 return sWorld->getRate(RATE_CREATURE_NORMAL_DAMAGE);
1567 return sWorld->getRate(RATE_CREATURE_ELITE_RARE_DAMAGE);
1568 default:
1570 }
1571}
@ CREATURE_ELITE_NORMAL
Definition SharedDefines.h:2966
@ CREATURE_ELITE_WORLDBOSS
Definition SharedDefines.h:2969
@ CREATURE_ELITE_RARE
Definition SharedDefines.h:2970
@ CREATURE_ELITE_RAREELITE
Definition SharedDefines.h:2968
@ CREATURE_ELITE_ELITE
Definition SharedDefines.h:2967
@ RATE_CREATURE_NORMAL_DAMAGE
Definition WorldConfig.h:457
@ RATE_CREATURE_ELITE_RARE_DAMAGE
Definition WorldConfig.h:461
@ RATE_CREATURE_ELITE_WORLDBOSS_DAMAGE
Definition WorldConfig.h:460
@ RATE_CREATURE_ELITE_RAREELITE_DAMAGE
Definition WorldConfig.h:459
@ RATE_CREATURE_ELITE_ELITE_DAMAGE
Definition WorldConfig.h:458

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
1536{
1537 switch (Rank) // define rates for each elite rank
1538 {
1540 return sWorld->getRate(RATE_CREATURE_NORMAL_HP);
1542 return sWorld->getRate(RATE_CREATURE_ELITE_ELITE_HP);
1548 return sWorld->getRate(RATE_CREATURE_ELITE_RARE_HP);
1549 default:
1550 return sWorld->getRate(RATE_CREATURE_ELITE_ELITE_HP);
1551 }
1552}
@ RATE_CREATURE_NORMAL_HP
Definition WorldConfig.h:452
@ RATE_CREATURE_ELITE_WORLDBOSS_HP
Definition WorldConfig.h:455
@ RATE_CREATURE_ELITE_ELITE_HP
Definition WorldConfig.h:453
@ RATE_CREATURE_ELITE_RARE_HP
Definition WorldConfig.h:456
@ RATE_CREATURE_ELITE_RAREELITE_HP
Definition WorldConfig.h:454

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
2528{
2529 ASSERT(target);
2530
2531 // if the target cannot be attacked, the target is not acceptable
2532 if (IsFriendlyTo(target) || !target->isTargetableForAttack(false, this) || (m_vehicle && (IsOnVehicle(target) || m_vehicle->GetBase()->IsOnVehicle(target))))
2533 return false;
2534
2535 if (target->HasUnitState(UNIT_STATE_DIED))
2536 {
2537 // some creatures can detect fake death
2538 if (CanIgnoreFeignDeath() && target->HasUnitFlag2(UNIT_FLAG2_FEIGN_DEATH))
2539 return true;
2540 else
2541 return false;
2542 }
2543
2544 Unit const* targetVictim = target->getAttackerForHelper();
2545
2546 // if I'm already fighting target, or I'm hostile towards the target, the target is acceptable
2547 if (IsEngagedBy(target) || IsHostileTo(target))
2548 return true;
2549
2550 // if the target's victim is friendly, and the target is neutral, the target is acceptable
2551 if (targetVictim && !IsNeutralToAll() && IsFriendlyTo(targetVictim))
2552 return true;
2553
2554 // if the target's victim is not friendly, or the target is friendly, the target is not acceptable
2555 return false;
2556}
#define ASSERT
Definition Errors.h:68
@ UNIT_FLAG2_FEIGN_DEATH
Definition UnitDefines.h:296
@ UNIT_STATE_DIED
Definition UnitDefines.h:173
bool CanIgnoreFeignDeath() const
Definition Creature.h:276
Definition Unit.h:664
Vehicle * m_vehicle
Definition Unit.h:2199
Unit * getAttackerForHelper() const
Definition Unit.cpp:871
bool IsNeutralToAll() const
Definition Unit.cpp:7259
bool IsOnVehicle(Unit const *vehicle) const
Definition Unit.h:1927
bool IsEngagedBy(Unit const *who) const
Definition Unit.h:932
bool IsFriendlyTo(Unit const *unit) const
Definition Unit.cpp:7241
bool IsHostileTo(Unit const *unit) const
Definition Unit.cpp:7236
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(), SelectVictim(), ThreatReference::ShouldBeOffline(), 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.

2909{
2910 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell_id);
2911 if (!spellInfo)
2912 return;
2913
2914 // used in proc system, otherwise normal creature cooldown
2915 if (end_time)
2916 {
2917 _AddCreatureSpellCooldown(spellInfo->Id, 0, end_time);
2918 return;
2919 }
2920
2921 uint32 spellcooldown = spellInfo->RecoveryTime;
2922 uint32 categoryId = spellInfo->GetCategory();
2923 uint32 categorycooldown = categoryId ? spellInfo->CategoryRecoveryTime : 0;
2924 if (Player* modOwner = GetSpellModOwner())
2925 {
2926 modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_COOLDOWN, spellcooldown);
2927 modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_COOLDOWN, categorycooldown);
2928 }
2929
2930 SpellCategoryStore::const_iterator i_scstore = sSpellsByCategoryStore.find(categoryId);
2931 if (categorycooldown && i_scstore != sSpellsByCategoryStore.end())
2932 {
2933 for (SpellCategorySet::const_iterator i_scset = i_scstore->second.begin(); i_scset != i_scstore->second.end(); ++i_scset)
2934 {
2935 _AddCreatureSpellCooldown(i_scset->second, categoryId, categorycooldown);
2936 }
2937 }
2938 else if (spellcooldown)
2939 {
2940 _AddCreatureSpellCooldown(spellInfo->Id, 0, spellcooldown);
2941 }
2942
2943 if (sSpellMgr->HasSpellCooldownOverride(spellInfo->Id))
2944 {
2945 if (IsCharmed() && GetCharmer()->IsPlayer())
2946 {
2947 WorldPacket data;
2948 BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, spellInfo->Id, spellcooldown);
2950 }
2951 }
2952}
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:836
@ SPELL_COOLDOWN_FLAG_NONE
Definition Unit.h:630
void _AddCreatureSpellCooldown(uint32 spell_id, uint16 categoryId, uint32 end_time)
Definition Creature.cpp:2900
bool IsPlayer() const
Definition Object.h:201
Player * ToPlayer()
Definition Object.h:202
Definition Player.h:1084
void SendDirectMessage(WorldPacket const *data) const
Definition Player.cpp:5680
Definition SpellInfo.h:340
uint32 GetCategory() const
Definition SpellInfo.cpp:880
uint32 RecoveryTime
Definition SpellInfo.h:372
uint32 Id
Definition SpellInfo.h:344
uint32 CategoryRecoveryTime
Definition SpellInfo.h:373
bool IsCharmed() const
Definition Unit.h:1310
Player * GetSpellModOwner() const
Definition Unit.cpp:12925
Unit * GetCharmer() const
Definition Unit.cpp:7690
void BuildCooldownPacket(WorldPacket &data, uint8 flags, uint32 spellId, uint32 cooldown)
Definition Unit.cpp:16992
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, and TestCreature.

302{
304 if (!IsInWorld())
305 {
306 // pussywizard: motion master needs to be initialized before OnCreatureCreate, which may set death state to JUST_DIED, to prevent crash
307 // it's also initialized in AIM_Initialize(), few lines below, but it's not a problem
309
311 if (m_spawnId)
312 {
313 GetMap()->GetCreatureBySpawnIdStore().insert(std::make_pair(m_spawnId, this));
314 }
316
318
320
321 if (IsVehicle())
322 {
324 }
325
326 if (GetZoneScript())
327 {
329 }
330
332
333 sScriptMgr->OnCreatureAddWorld(this);
334 }
335}
#define sScriptMgr
Definition ScriptMgr.h:734
Definition Creature.h:47
Loot loot
Definition Creature.h:229
bool AIM_Initialize(CreatureAI *ai=nullptr)
Definition Creature.cpp:1075
void Motion_Initialize()
Definition Creature.cpp:1099
void SearchFormation()
Definition Creature.cpp:371
MapStoredObjectTypesContainer & GetObjectsStore()
Definition Map.h:349
CreatureBySpawnIdContainer & GetCreatureBySpawnIdStore()
Definition Map.h:352
bool IsInWorld() const
Definition Object.h:109
ObjectGuid GetGUID() const
Definition Object.h:115
bool Insert(KEY_TYPE const &handle, SPECIFIC_TYPE *obj)
Definition TypeContainer.h:177
bool IsVehicle() const
Definition Unit.h:800
void AddToWorld() override
Definition Unit.cpp:12511
Vehicle * GetVehicleKit() const
Definition Unit.h:1925
void Install()
Definition Vehicle.cpp:73
Map * GetMap() const
Definition Object.h:625
ZoneScript * GetZoneScript() const
Definition Object.h:631
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
143{ return (CreatureAI*)i_AI; }
Definition CreatureAI.h:69

References Unit::i_AI.

Referenced by at_hol_hall_of_watchers::_OnTrigger(), Unit::_UnapplyAura(), Vehicle::AddPassenger(), Player::AddQuestAndCheckCompletion(), AtEngage(), npc_anubisath_sentinel::aqsentinelAI::CallBuddiesToAttack(), boss_algalon_the_observer::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(), CreatureUnitRelocationWorker(), Unit::DealDamage(), DespawnOnEvade(), instance_karazhan::instance_karazhan_InstanceMapScript::DoAction(), SummonList::DoAction(), Spell::DoAllEffectOnTarget(), HomeMovementGenerator< Creature >::DoFinalize(), WaypointMovementGenerator< Creature >::DoInitialize(), instance_stratholme::instance_stratholme_InstanceMapScript::DoSpawnPlaguedCritters(), WaypointMovementGenerator< Creature >::DoUpdate(), SummonList::DoZoneInCombat(), UnitAI::EvadeTimerExpired(), 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(), spell_malygos_surge_of_power_25::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_dred_raptor_call::HandleDummy(), spell_q12096_q12092_dummy::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::HandleNpcDoActionCommand(), 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::InformCloud(), TempSummon::InitSummon(), Unit::InterruptSpell(), IsAlwaysDetectableFor(), IsEngaged(), 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::JustSummoned(), boss_maexxna::boss_maexxnaAI::JustSummoned(), npc_frosthound::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::JustSummoned(), WorldBossAI::JustSummoned(), npc_grimstone::JustSummoned(), boss_gyth::JustSummoned(), boss_rend_blackhand::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::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::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::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(), FormationMovementGenerator::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(), boss_razorgore::OnCharmed(), 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::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_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(), npc_barnes::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_lady_sylvanas_windrunner::OnQuestReward(), npc_tharnarian::OnQuestReward(), npc_thrall_warchief::OnQuestReward(), npc_elder_clearwater::OnQuestReward(), npc_riggle_bassbait::OnQuestReward(), spell_electrial_storm::OnRemove(), spell_q12937_relief_for_the_fallen::OnRemove(), at_blackrock_stadium::OnTrigger(), at_commander_dawnforge::OnTrigger(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnUnitDeath(), OrderWhelpTargetSelector::operator()(), FrostwingGauntletRespawner::operator()(), ValithriaDespawner::operator()(), SplineHandler::operator()(), Unit::PetSpellFail(), PretendToDie(), npc_jungle_punch_target::npc_jungle_punch_targetAI::proceedCwEvent(), SmartScript::ProcessAction(), instance_stratholme::instance_stratholme_InstanceMapScript::ProcessSlaughterEvent(), WaypointMovementGenerator< Creature >::ProcessWaypointArrival(), RemoveCorpse(), Vehicle::RemovePassenger(), Respawn(), Resurrect(), boss_yoggsaron_lich_king::Say(), boss_yoggsaron_llane::Say(), boss_yoggsaron_neltharion::Say(), boss_fathomguard_tidalvess::ScheduleRemoval(), spell_the_lich_king_valkyr_target_search::SelectTarget(), SelectVictim(), spell_malygos_surge_of_power_warning_selector_25::SendThreeTargets(), 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::SummonedCreatureDies(), npc_lord_illidan_stormrage::npc_lord_illidan_stormrageAI::SummonNextWave(), npc_love_in_air_snivel_real::Talk(), spell_igb_check_for_players::TriggerWipe(), Pet::Update(), instance_stratholme::instance_stratholme_InstanceMapScript::Update(), Update(), npc_vaelastrasz_the_red::UpdateAI(), go_blood_drenched_door::go_blood_drenched_doorAI::UpdateAI(), npc_kalecgos_kj::UpdateAI(), npc_thrall_bfu::npc_thrall_bfuAI::UpdateAI(), npc_winterfin_playmate::UpdateAI(), npc_snowfall_glade_playmate::UpdateAI(), npc_the_biggest_tree::UpdateAI(), npc_high_oracle_soo_roo::UpdateAI(), npc_elder_kekek::UpdateAI(), npc_the_etymidian::UpdateAI(), npc_alexstraza_the_lifebinder::UpdateAI(), npc_cos_stratholme_citizien::npc_cos_stratholme_citizienAI::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::UpdateAI(), boss_mimiron::UpdateAI(), boss_razorscale::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)
1076{
1077 // make sure nothing can change the AI during AI update
1078 if (m_AI_locked)
1079 {
1080 LOG_DEBUG("scripts.ai", "AIM_Initialize: failed to init, locked.");
1081 return false;
1082 }
1083
1084 UnitAI* oldAI = i_AI;
1085
1087
1088 i_AI = ai ? ai : FactorySelector::SelectAI(this);
1089 delete oldAI;
1090 IsAIEnabled = true;
1091 i_AI->InitializeAI();
1092
1093 // Xinef: Initialize vehicle if it is not summoned!
1094 if (GetVehicleKit() && m_spawnId)
1095 GetVehicleKit()->Reset();
1096 return true;
1097}
#define LOG_DEBUG(filterType__,...)
Definition Log.h:170
Definition UnitAI.h:198
virtual void InitializeAI()
Definition UnitAI.h:209
bool IsAIEnabled
Definition Unit.h:2097
void Reset(bool evading=false)
Definition Vehicle.cpp:121
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, Motion_Initialize(), Vehicle::Reset(), and FactorySelector::SelectAI().

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

◆ AllLootRemovedFromCorpse()

void Creature::AllLootRemovedFromCorpse ( )
3037{
3038 if (loot.loot_type != LOOT_SKINNING && !IsPet() && GetCreatureTemplate()->SkinLootId && hasLootRecipient())
3039 {
3041 {
3043 }
3044 }
3045
3046 time_t now = GameTime::GetGameTime().count();
3047 if (m_corpseRemoveTime <= now)
3048 {
3049 return;
3050 }
3051
3052 float decayRate = sWorld->getRate(RATE_CORPSE_DECAY_LOOTED);
3053 uint32 diff = uint32((m_corpseRemoveTime - now) * decayRate);
3054
3055 m_respawnTime -= diff;
3056
3057 // corpse skinnable, but without skinning flag, and then skinned, corpse will despawn next update
3059 {
3061 }
3062 else
3063 {
3064 m_corpseRemoveTime -= diff;
3065 }
3066}
LootStore LootTemplates_Skinning("skinning_loot_template", "creature skinning id", true)
@ LOOT_SKINNING
Definition LootMgr.h:85
@ UNIT_FLAG_SKINNABLE
Definition UnitDefines.h:283
@ RATE_CORPSE_DECAY_LOOTED
Definition WorldConfig.h:482
bool hasLootRecipient() const
Definition Creature.h:234
CreatureTemplate const * GetCreatureTemplate() const
Definition Creature.h:206
bool HaveLootFor(uint32 loot_id) const
Definition LootMgr.h:224
bool IsPet() const
Definition Unit.h:797
void SetUnitFlag(UnitFlags flags)
UnitFlags available in UnitDefines.h.
Definition Unit.h:748
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().

◆ AtDisengage()

void Creature::AtDisengage ( )
overridevirtual

Reimplemented from Unit.

2843{
2845
2849
2850 if (IsPet() || IsGuardian()) // update pets' speed for catchup OOC speed
2851 {
2852 UpdateSpeed(MOVE_RUN, true);
2853 UpdateSpeed(MOVE_SWIM, true);
2854 UpdateSpeed(MOVE_FLIGHT, true);
2855 }
2856}
@ UNIT_DYNFLAG_TAPPED
Definition SharedDefines.h:3358
@ UNIT_STATE_ATTACK_PLAYER
Definition UnitDefines.h:187
@ MOVE_FLIGHT
Definition UnitDefines.h:362
@ MOVE_SWIM
Definition UnitDefines.h:359
@ MOVE_RUN
Definition UnitDefines.h:357
bool HasDynamicFlag(uint32 flag) const
Definition Object.h:124
void ClearUnitState(uint32 f)
Definition Unit.h:737
void ReplaceAllDynamicFlags(uint32 flag) override
Definition Unit.h:769
virtual void AtDisengage()
Definition Unit.h:966
bool IsAlive() const
Definition Unit.h:1793
bool IsGuardian() const
Definition Unit.h:795
void UpdateSpeed(UnitMoveType mtype, bool forced)
Definition Unit.cpp:11090

References Unit::AtDisengage(), Unit::ClearUnitState(), GetCreatureTemplate(), Object::HasDynamicFlag(), Unit::IsAlive(), Unit::IsGuardian(), Unit::IsPet(), MOVE_FLIGHT, MOVE_RUN, MOVE_SWIM, Unit::ReplaceAllDynamicFlags(), UNIT_DYNFLAG_TAPPED, UNIT_STATE_ATTACK_PLAYER, and Unit::UpdateSpeed().

Referenced by CreatureAI::EngagementOver().

◆ AtEngage()

void Creature::AtEngage ( Unit target)
overridevirtual

Reimplemented from Unit.

2796{
2797 Unit::AtEngage(target);
2798
2799 if (!IsStandState())
2801
2803 Dismount();
2804
2806
2807 if (IsPet() || IsGuardian()) // update pets' speed for catchup OOC speed
2808 {
2809 UpdateSpeed(MOVE_RUN, true);
2810 UpdateSpeed(MOVE_SWIM, true);
2811 UpdateSpeed(MOVE_FLIGHT, true);
2812 }
2813
2815 if (movetype == WAYPOINT_MOTION_TYPE || movetype == ESCORT_MOTION_TYPE || (IsAIEnabled && AI()->IsEscorted()))
2816 {
2818
2819 // if its a vehicle, set the home position of every creature passenger at engage
2820 // so that they are in combat range if hostile
2821 if (Vehicle* vehicle = GetVehicleKit())
2822 {
2823 for (auto& seat : vehicle->Seats)
2824 if (Unit* passenger = ObjectAccessor::GetUnit(*this, seat.second.Passenger.Guid))
2825 if (Creature* creature = passenger->ToCreature())
2826 creature->SetHomePosition(GetPosition());
2827 }
2828 }
2829
2830 if (CreatureAI* ai = AI())
2831 {
2832 ai->JustEngagedWith(target);
2834
2835 if (CreatureGroup* formation = GetFormation())
2836 formation->MemberEngagingTarget(this, target);
2837
2838 sScriptMgr->OnUnitEnterCombat(this, target);
2839 }
2840}
MovementGeneratorType
Definition MotionMaster.h:38
@ ESCORT_MOTION_TYPE
Definition MotionMaster.h:57
@ WAYPOINT_MOTION_TYPE
Definition MotionMaster.h:41
@ CREATURE_TYPE_FLAG_ALLOW_MOUNTED_COMBAT
Definition SharedDefines.h:2702
@ UNIT_STAND_STATE_STAND
Definition UnitDefines.h:35
Seats
Definition boss_flame_leviathan.cpp:160
Definition CreatureGroups.h:90
void SetHomePosition(float x, float y, float z, float o)
Definition Creature.h:345
CreatureGroup const * GetFormation() const
Definition Creature.h:370
void RefreshSwimmingFlag(bool recheck=false)
Definition Creature.cpp:3295
void UpdateLeashExtensionTime()
Definition Creature.cpp:3631
CreatureAI * AI() const
Definition Creature.h:143
MovementGeneratorType GetCurrentMovementGeneratorType() const
Definition MotionMaster.cpp:961
Creature * ToCreature()
Definition Object.h:206
MotionMaster * GetMotionMaster()
Definition Unit.h:1758
void Dismount()
Definition Unit.cpp:10539
bool IsStandState() const
Definition Unit.cpp:13074
virtual void AtEngage(Unit *target)
Definition Unit.cpp:7554
void SetStandState(uint8 state)
Definition Unit.cpp:13089
Definition Vehicle.h:28
Definition ObjectAccessor.h:61
Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
Definition ObjectAccessor.cpp:199
Position GetPosition() const
Definition Position.h:147

References AI(), Unit::AtEngage(), CREATURE_TYPE_FLAG_ALLOW_MOUNTED_COMBAT, Unit::Dismount(), ESCORT_MOTION_TYPE, GetCreatureTemplate(), MotionMaster::GetCurrentMovementGeneratorType(), GetFormation(), Unit::GetMotionMaster(), Position::GetPosition(), ObjectAccessor::GetUnit(), Unit::GetVehicleKit(), Unit::IsAIEnabled, Unit::IsGuardian(), Unit::IsPet(), Unit::IsStandState(), MOVE_FLIGHT, MOVE_RUN, MOVE_SWIM, RefreshSwimmingFlag(), SetHomePosition(), Unit::SetStandState(), sScriptMgr, Object::ToCreature(), UNIT_STAND_STATE_STAND, UpdateLeashExtensionTime(), Unit::UpdateSpeed(), and WAYPOINT_MOTION_TYPE.

Referenced by CreatureAI::EngagementStart().

◆ CalculateMinMaxDamage()

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

Implements Unit.

1118{
1119 // creatures only have one damage
1120 if (damageIndex != 0)
1121 {
1122 minDamage = 0.f;
1123 maxDamage = 0.f;
1124 return;
1125 }
1126
1127 UnitMods unitMod;
1128 float variance = 1.0f;
1129 switch (attType)
1130 {
1131 case BASE_ATTACK:
1132 default:
1133 variance = GetCreatureTemplate()->BaseVariance;
1134 unitMod = UNIT_MOD_DAMAGE_MAINHAND;
1135 break;
1136 case OFF_ATTACK:
1137 variance = GetCreatureTemplate()->BaseVariance;
1138 unitMod = UNIT_MOD_DAMAGE_OFFHAND;
1139 break;
1140 case RANGED_ATTACK:
1141 variance = GetCreatureTemplate()->RangeVariance;
1142 unitMod = UNIT_MOD_DAMAGE_RANGED;
1143 break;
1144 }
1145
1146 if (attType == OFF_ATTACK && !HasOffhandWeaponForAttack())
1147 {
1148 minDamage = 0.0f;
1149 maxDamage = 0.0f;
1150 return;
1151 }
1152
1153 float weaponMinDamage = GetWeaponDamageRange(attType, MINDAMAGE);
1154 float weaponMaxDamage = GetWeaponDamageRange(attType, MAXDAMAGE);
1155
1156 // Disarm for creatures
1157 if (HasWeapon(attType) && !HasWeaponForAttack(attType))
1158 {
1159 minDamage *= 0.5f;
1160 maxDamage *= 0.5f;
1161 }
1162
1163 float attackPower = GetTotalAttackPowerValue(attType);
1164 float attackSpeedMulti = GetAPMultiplier(attType, normalized);
1165 float baseValue = GetFlatModifierValue(unitMod, BASE_VALUE) + (attackPower / 14.0f) * variance;
1166 float basePct = GetPctModifierValue(unitMod, BASE_PCT) * attackSpeedMulti;
1167 float totalValue = GetFlatModifierValue(unitMod, TOTAL_VALUE);
1168 float totalPct = addTotalPct ? GetPctModifierValue(unitMod, TOTAL_PCT) : 1.0f;
1169 float dmgMultiplier = GetCreatureTemplate()->DamageModifier; // = DamageModifier * _GetDamageMod(rank);
1170
1171 minDamage = ((weaponMinDamage + baseValue) * dmgMultiplier * basePct + totalValue) * totalPct;
1172 maxDamage = ((weaponMaxDamage + baseValue) * dmgMultiplier * basePct + totalValue) * totalPct;
1173
1174 // pussywizard: crashfix (casting negative to uint => min > max => assertion in urand)
1175 if (minDamage < 0.0f || minDamage > 1000000000.0f)
1176 minDamage = 0.0f;
1177 if (maxDamage < 0.0f || maxDamage > 1000000000.0f)
1178 maxDamage = 0.0f;
1179 if (minDamage > maxDamage)
1180 minDamage = maxDamage;
1181}
@ BASE_VALUE
Definition Unit.h:127
@ TOTAL_VALUE
Definition Unit.h:128
@ MINDAMAGE
Definition Unit.h:141
@ MAXDAMAGE
Definition Unit.h:142
UnitMods
Definition Unit.h:148
@ UNIT_MOD_DAMAGE_OFFHAND
Definition Unit.h:172
@ UNIT_MOD_DAMAGE_RANGED
Definition Unit.h:173
@ UNIT_MOD_DAMAGE_MAINHAND
Definition Unit.h:171
@ OFF_ATTACK
Definition Unit.h:216
@ BASE_ATTACK
Definition Unit.h:215
@ RANGED_ATTACK
Definition Unit.h:217
@ TOTAL_PCT
Definition Unit.h:135
@ BASE_PCT
Definition Unit.h:134
bool HasWeaponForAttack(WeaponAttackType type) const override
Definition Creature.h:194
bool HasWeapon(WeaponAttackType type) const override
Definition Creature.cpp:3223
bool HasOffhandWeaponForAttack() const
Definition Unit.h:990
float GetPctModifierValue(UnitMods unitMod, UnitModifierPctType modifierType) const
Definition Unit.cpp:11994
float GetTotalAttackPowerValue(WeaponAttackType attType, Unit *pVictim=nullptr) const
Definition Unit.cpp:12265
float GetWeaponDamageRange(WeaponAttackType attType, WeaponDamageRange type, uint8 damageIndex=0) const
Definition Unit.cpp:12289
float GetAPMultiplier(WeaponAttackType attType, bool normalized)
Definition Unit.cpp:13593
float GetFlatModifierValue(UnitMods unitMod, UnitModifierFlatType modifierType) const
Definition Unit.cpp:11983
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::GetFlatModifierValue(), Unit::GetPctModifierValue(), 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)
2400{
2401 if (!target)
2402 {
2403 target = GetVictim();
2404 }
2405
2406 if (!m_AlreadyCallAssistance && target && !IsPet() && !IsCharmed())
2407 {
2408 SetNoCallAssistance(true);
2409
2410 float radius = sWorld->getFloatConfig(CONFIG_CREATURE_FAMILY_ASSISTANCE_RADIUS);
2411
2412 if (radius > 0)
2413 {
2414 std::list<Creature*> assistList;
2415
2416 Acore::AnyAssistCreatureInRangeCheck u_check(this, target, radius);
2418 Cell::VisitObjects(this, searcher, radius);
2419
2420 if (!assistList.empty())
2421 {
2422 AssistDelayEvent* e = new AssistDelayEvent(target->GetGUID(), this);
2423 while (!assistList.empty())
2424 {
2425 // Pushing guids because in delay can happen some creature gets despawned => invalid pointer
2426 e->AddAssistant((*assistList.begin())->GetGUID());
2427 assistList.pop_front();
2428 }
2430 }
2431 }
2432 }
2433}
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition Duration.h:27
@ CONFIG_CREATURE_FAMILY_ASSISTANCE_RADIUS
Definition WorldConfig.h:159
@ CONFIG_CREATURE_FAMILY_ASSISTANCE_DELAY
Definition WorldConfig.h:239
Definition GridNotifiers.h:1260
Definition Creature.h:557
void AddAssistant(ObjectGuid guid)
Definition Creature.h:562
void SetNoCallAssistance(bool val)
Definition Creature.h:271
void AddEventAtOffset(BasicEvent *event, Milliseconds offset, uint8 eventGroup=0)
Definition EventProcessor.h:108
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:114
Unit * GetVictim() const
Definition Unit.h:903
EventProcessor m_Events
Definition Object.h:736
Definition GridNotifiers.h:464
static void VisitObjects(WorldObject const *obj, T &visitor, float radius)
Definition CellImpl.h:165

References AssistDelayEvent::AddAssistant(), EventProcessor::AddEventAtOffset(), 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::VisitObjects().

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

◆ CallForHelp()

void Creature::CallForHelp ( float  fRadius,
Unit target = nullptr 
)
2436{
2437 if (radius <= 0.0f || !IsEngaged() || !IsAlive() || IsPet() || IsCharmed())
2438 return;
2439
2440 if (!target)
2441 target = GetThreatMgr().GetCurrentVictim();
2442 if (!target)
2443 target = GetThreatMgr().GetAnyTarget();
2444 if (!target)
2445 target = GetCombatManager().GetAnyTarget();
2446
2447 if (!target)
2448 return;
2449
2450 if (m_alreadyCallForHelp) // avoid recursive call for help for any reason
2451 return;
2452
2453 Acore::CallOfHelpCreatureInRangeDo u_do(this, target, radius);
2455 Cell::VisitObjects(this, worker, radius);
2456}
Definition GridNotifiers.h:1140
Unit * GetAnyTarget() const
Definition CombatManager.cpp:202
bool IsEngaged() const override
Definition Creature.cpp:2858
Unit * GetCurrentVictim()
Definition ThreatManager.cpp:244
Unit * GetAnyTarget() const
Definition ThreatManager.cpp:259
ThreatManager & GetThreatMgr()
Definition Unit.h:951
CombatManager & GetCombatManager()
Definition Unit.h:953
Definition GridNotifiers.h:480

References CombatManager::GetAnyTarget(), ThreatManager::GetAnyTarget(), Unit::GetCombatManager(), ThreatManager::GetCurrentVictim(), Unit::GetThreatMgr(), Unit::IsAlive(), Unit::IsCharmed(), IsEngaged(), Unit::IsPet(), m_alreadyCallForHelp, and Cell::VisitObjects().

Referenced by BossAI::_JustEngagedWith(), boss_thorim_start_npcs::DamageTaken(), boss_emperor_dagran_thaurissan::JustEngagedWith(), npc_sunblade_scout::JustEngagedWith(), boss_sartharion::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::JustEngagedWith(), boss_thorim_gauntlet_npcs::JustEngagedWith(), boss_xt002::JustEngagedWith(), boss_blackheart_the_inciter::JustEngagedWith(), boss_moroes::JustEngagedWith(), npc_sindragosa_trash::npc_sindragosa_trashAI::JustEngagedWith(), boss_anubrekhan::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.

1848{
1849 if (IsAIEnabled && AI()->CanSeeAlways(obj))
1850 return true;
1851
1852 return false;
1853}

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
2459{
2460 // is it true?
2462 return false;
2463
2464 // we don't need help from zombies :)
2465 if (!IsAlive())
2466 return false;
2467
2468 // Xinef: we cannot assist in evade mode
2469 if (IsInEvadeMode())
2470 return false;
2471
2472 // pussywizard: or if enemy is in evade mode
2473 if (enemy && enemy->IsCreature() && enemy->ToCreature()->IsInEvadeMode())
2474 return false;
2475
2476 // we don't need help from non-combatant ;)
2477 if (IsCivilian())
2478 return false;
2479
2481 return false;
2482
2483 // skip fighting creature
2484 if (IsEngaged())
2485 return false;
2486
2487 // only free creature
2489 return false;
2490
2493 {
2494 return false;
2495 }
2496
2497 // only from same creature faction
2498 if (checkfaction)
2499 {
2500 if (GetFaction() != u->GetFaction())
2501 return false;
2502
2503 if (!RespondsToCallForHelp())
2504 return false;
2505 }
2506 else
2507 {
2508 if (!IsFriendlyTo(u))
2509 return false;
2510 }
2511
2512 // skip non hostile to caster enemy creatures
2513 if (!IsHostileTo(enemy))
2514 return false;
2515
2516 // Check if can see the enemy
2517 if (!CanSeeOrDetect(enemy))
2518 {
2519 return false;
2520 }
2521
2522 return true;
2523}
@ CREATURE_FLAG_EXTRA_IGNORE_ALL_ASSISTANCE_CALLS
Definition CreatureData.h:72
@ UNIT_FLAG_NON_ATTACKABLE
Definition UnitDefines.h:258
@ UNIT_FLAG_NOT_SELECTABLE
Definition UnitDefines.h:282
bool IsCivilian() const
Definition Creature.h:79
bool HasReactState(ReactStates state) const
Definition Creature.h:101
bool IsInEvadeMode() const
Definition Creature.h:137
bool RespondsToCallForHelp() const
Definition Unit.h:1036
bool HasUnitFlag(UnitFlags flags) const
Definition Unit.h:747
uint32 GetFaction() const
Definition Unit.h:851
bool IsImmuneToNPC() const
Definition Unit.h:929
ObjectGuid GetCharmerOrOwnerGUID() const
Definition Unit.h:1295
bool CanSeeOrDetect(WorldObject const *obj, bool ignoreStealth=false, bool distanceCheck=false, bool checkAlert=false) const
Definition Object.cpp:1756
bool HasFlagsExtra(uint32 flag) const
Definition CreatureData.h:278

References WorldObject::CanSeeOrDetect(), CREATURE_FLAG_EXTRA_IGNORE_ALL_ASSISTANCE_CALLS, Unit::GetCharmerOrOwnerGUID(), Unit::GetFaction(), CreatureTemplate::HasFlagsExtra(), HasReactState(), Unit::HasUnitFlag(), Unit::IsAlive(), IsCivilian(), Object::IsCreature(), 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.

3784{
3785 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellID);
3786 int32 currentPower = GetPower(getPowerType());
3787
3789 {
3790 return false;
3791 }
3792
3793 if (spellInfo && (currentPower < spellInfo->CalcPowerCost(this, spellInfo->GetSchoolMask())))
3794 {
3795 return false;
3796 }
3797
3798 return true;
3799}
std::int32_t int32
Definition Define.h:103
@ UNIT_FLAG_SILENCED
Definition UnitDefines.h:270
@ UNIT_FIELD_FLAGS
Definition UpdateFields.h:117
bool IsSpellProhibited(SpellSchoolMask idSchoolMask) const
Definition Creature.cpp:2876
bool HasFlag(uint16 index, uint32 flag) const
Definition Object.cpp:871
SpellSchoolMask GetSchoolMask() const
Definition SpellInfo.cpp:1894
Powers getPowerType() const
Definition Unit.h:1131
uint32 GetPower(Powers power) const
Definition Unit.h:1135

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
2596{
2597 if (!victim->IsInMap(this))
2598 return false;
2599
2600 if (!IsValidAttackTarget(victim))
2601 return false;
2602
2603 if (!victim->isInAccessiblePlaceFor(this))
2604 return false;
2605
2606 if (IsAIEnabled && !AI()->CanAIAttack(victim))
2607 return false;
2608
2609 // pussywizard: we cannot attack in evade mode
2610 if (IsInEvadeMode())
2611 return false;
2612
2613 // pussywizard: or if enemy is in evade mode
2614 if (victim->IsCreature() && victim->ToCreature()->IsInEvadeMode())
2615 return false;
2616
2617 // cannot attack if is during 5 second grace period, unless being attacked
2618 if (m_respawnedTime && (GameTime::GetGameTime().count() - m_respawnedTime) < 5 && !IsEngagedBy(victim))
2619 {
2620 return false;
2621 }
2622
2623 // if victim is in FD and we can't see that
2624 if (victim->HasUnitFlag2(UNIT_FLAG2_FEIGN_DEATH) && !CanIgnoreFeignDeath())
2625 {
2626 return false;
2627 }
2628
2630 {
2631 if (GetMap()->IsDungeon())
2632 return true;
2633
2634 float visibility = std::max<float>(GetVisibilityRange(), victim->GetVisibilityRange());
2635
2636 // if outside visibility
2637 if (!IsWithinDist(victim, visibility))
2638 return false;
2639
2640 // pussywizard: don't check distance to home position if recently damaged (allow kiting away from spawnpoint!)
2641 // xinef: this should include taunt auras
2643 return true;
2644 }
2645
2646 if (skipDistCheck)
2647 return true;
2648
2649 if (Unit* unit = GetCharmerOrOwner())
2650 {
2651 float visibilityDist = std::min<float>(GetMap()->GetVisibilityRange() + GetObjectSize() * 2, DEFAULT_VISIBILITY_DISTANCE);
2652 return victim->IsWithinDist(unit, visibilityDist);
2653 }
2654
2655 float dist = sWorld->getFloatConfig(CONFIG_CREATURE_LEASH_RADIUS);
2656 if (!dist)
2657 return true;
2658
2659 float x, y, z;
2660 x = y = z = 0.0f;
2661 if (GetMotionMaster()->GetMotionSlot(MOTION_SLOT_IDLE)->GetResetPosition(x, y, z))
2662 return IsInDist2d(x, y, dist);
2663 else
2664 return IsInDist2d(&m_homePosition, dist);
2665}
@ MOTION_SLOT_IDLE
Definition MotionMaster.h:64
#define DEFAULT_VISIBILITY_DISTANCE
Definition ObjectDefines.h:39
@ CONFIG_CREATURE_LEASH_RADIUS
Definition WorldConfig.h:157
bool isWorldBoss() const
Definition Creature.h:123
time_t GetLastLeashExtensionTime() const
Definition Creature.cpp:3626
uint8 GetLeashTimer() const
Definition Creature.cpp:3636
Unit * GetCharmerOrOwner() const
Definition Unit.h:1286
bool IsValidAttackTarget(Unit const *target, SpellInfo const *bySpell=nullptr) const
Definition Unit.cpp:10705
bool HasTauntAura() const
Definition Unit.h:1840
float GetVisibilityRange() const
Definition Object.cpp:1701
float GetObjectSize() const
Definition Object.cpp:2838
bool IsWithinDist(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
Definition Object.cpp:1372
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(), CanStartAttack(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::JustSummoned(), PetAI::SelectNextTarget(), SelectVictim(), ThreatReference::ShouldBeOffline(), npc_pet_hunter_snake_trap::UpdateAI(), npc_pet_shaman_earth_elemental::UpdateAI(), and npc_pet_shaman_fire_elemental::UpdateAI().

◆ CanEnterWater()

bool Creature::CanEnterWater ( ) const
overridevirtual

Implements Unit.

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

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

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

◆ CanFly()

◆ CanGeneratePickPocketLoot()

bool Creature::CanGeneratePickPocketLoot ( ) const

◆ CanHover()

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

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:62
bool HasFlagsExtra(uint32 flag) const
Definition Creature.h:77

References CREATURE_FLAG_EXTRA_IGNORE_FEIGN_DEATH, and HasFlagsExtra().

Referenced by _IsTargetAcceptable(), and CanCreatureAttack().

◆ CanNotReachTarget()

bool Creature::CanNotReachTarget ( ) const
3600{
3601 return m_cannotReachTarget;
3602}
ObjectGuid m_cannotReachTarget
Definition Creature.h:540

References m_cannotReachTarget.

Referenced by IsEvadingAttacks(), and IsNotReachableAndNeedRegen().

◆ CanPeriodicallyCallForAssistance()

bool Creature::CanPeriodicallyCallForAssistance ( ) const
private
3647{
3648 if (!IsInCombat())
3649 return false;
3650
3652 return false;
3653
3654 if (!CanHaveThreatList())
3655 return false;
3656
3657 if (IsSummon() && GetMap()->Instanceable())
3658 return false;
3659
3660 return true;
3661}
@ UNIT_STATE_POSSESSED
Definition UnitDefines.h:189
bool IsSummon() const
Definition Unit.h:794
bool HasUnitState(const uint32 f) const
Definition Unit.h:736
bool CanHaveThreatList(bool skipAliveCheck=false) const
Definition Unit.cpp:11394
bool IsInCombat() const
Definition Unit.h:935

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

Referenced by Update().

◆ CanResetTalents()

bool Creature::CanResetTalents ( Player player) const
1260{
1261 Trainer::Trainer const* trainer = sObjectMgr->GetTrainer(GetEntry());
1262 if (!trainer)
1263 return false;
1264
1265 return player->GetLevel() >= 10 && trainer->IsTrainerValidForPlayer(player);
1266}
#define sObjectMgr
Definition ObjectMgr.h:1712
uint32 GetEntry() const
Definition Object.h:117
Definition Trainer.h:66
bool IsTrainerValidForPlayer(Player const *player) const
Definition Trainer.cpp:209
uint8 GetLevel() const
Definition Unit.h:1103

References Object::GetEntry(), Unit::GetLevel(), Trainer::Trainer::IsTrainerValidForPlayer(), and sObjectMgr.

Referenced by WorldSession::HandleTalentWipeConfirmOpcode(), and Player::PrepareGossipMenu().

◆ CanStartAttack()

bool Creature::CanStartAttack ( Unit const *  u,
bool  force = false 
) const
1871{
1872 if (IsCivilian())
1873 return false;
1874
1875 // This set of checks is should be done only for creatures
1876 if ((IsImmuneToNPC() && !who->IsPlayer()) ||
1877 (IsImmuneToPC() && who->IsPlayer()))
1878 return false;
1879
1880 if (Unit* owner = who->GetOwner())
1881 if (owner->IsPlayer() && IsImmuneToPC())
1882 return false;
1883
1884 // Do not attack non-combat pets
1885 if (who->IsCreature() && who->GetCreatureType() == CREATURE_TYPE_NON_COMBAT_PET)
1886 return false;
1887
1889 return false;
1890
1891 if (!force)
1892 {
1893 if (!_IsTargetAcceptable(who))
1894 return false;
1895
1896 if (IsNeutralToAll() || !IsWithinDistInMap(who, GetAggroRange(who) + m_CombatDistance, true, false, false))
1897 return false;
1898 }
1899
1900 if (!CanCreatureAttack(who))
1901 return false;
1902
1903 return IsWithinLOSInMap(who);
1904}
#define CREATURE_Z_ATTACK_RANGE
Definition Creature.h:38
@ CREATURE_TYPE_NON_COMBAT_PET
Definition SharedDefines.h:2635
bool _IsTargetAcceptable(Unit const *target) const
Definition Creature.cpp:2527
bool CanFly() const override
Definition Creature.h:86
bool CanCreatureAttack(Unit const *victim, bool skipDistCheck=false) const
Definition Creature.cpp:2595
float GetAggroRange(Unit const *target) const
Definition Creature.cpp:3306
Unit * GetOwner() const
Definition Unit.cpp:7682
bool IsImmuneToPC() const
Definition Unit.h:927
bool IsWithinLOSInMap(WorldObject const *obj, VMAP::ModelIgnoreFlags ignoreFlags=VMAP::ModelIgnoreFlags::Nothing, LineOfSightChecks checks=LINEOFSIGHT_ALL_CHECKS, Optional< float > collisionHeight={ }, Optional< float > combatReach={ }) const
Definition Object.cpp:1403
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
Definition Object.cpp:1377
float GetDistanceZ(WorldObject const *obj) const
Definition Object.cpp:1244

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

Referenced by CreatureAI::MoveInLineOfSight(), FollowerAI::MoveInLineOfSight(), npc_escortAI::MoveInLineOfSight(), SmartAI::MoveInLineOfSight(), npc_hadronox_crusherPackAI::MoveInLineOfSight(), CreatureAI::OnOwnerCombatInteraction(), 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.

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

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

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

◆ CanWalk()

◆ ClearLastLeashExtensionTimePtr()

void Creature::ClearLastLeashExtensionTimePtr ( )

◆ ClearProhibitedSpellTimers()

void Creature::ClearProhibitedSpellTimers ( )
2893{
2894 for (uint8 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i)
2895 {
2896 m_ProhibitSchoolTime[i] = 0;
2897 }
2898}

References m_ProhibitSchoolTime, MAX_SPELL_SCHOOL, and SPELL_SCHOOL_NORMAL.

Referenced by boss_shade_of_aran::JustEngagedWith().

◆ ClearTarget()

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

References SetTarget().

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

◆ ClearTextRepeatGroup()

void Creature::ClearTextRepeatGroup ( uint8  textGroup)
3724{
3725 CreatureTextRepeatGroup::iterator groupItr = m_textRepeat.find(textGroup);
3726 if (groupItr != m_textRepeat.end())
3727 groupItr->second.clear();
3728}
CreatureTextRepeatGroup m_textRepeat
‍Saved target during spell focus for restoration
Definition Creature.h:545

References m_textRepeat.

Referenced by CreatureTextMgr::SendChat().

◆ 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

1127{
1128 ASSERT(map);
1129 SetMap(map);
1130 SetPhaseMask(phaseMask, false);
1131
1132 CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(Entry);
1133 if (!cinfo)
1134 {
1135 LOG_ERROR("sql.sql", "Creature::Create(): creature template (guidlow: {}, entry: {}) does not exist.", guidlow, Entry);
1136 return false;
1137 }
1138
1141 Relocate(x, y, z, ang);
1142
1143 if (!IsPositionValid())
1144 {
1145 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);
1146 return false;
1147 }
1148
1149 // area/zone id is needed immediately for ZoneScript::GetCreatureEntry hook before it is known which creature template to load (no model/scale available yet)
1150 PositionFullTerrainStatus terrainData;
1152 ProcessPositionDataChanged(terrainData);
1153
1154 //oX = x; oY = y; dX = x; dY = y; m_moveTime = 0; m_startMove = 0;
1155 if (!CreateFromProto(guidlow, Entry, vehId, data))
1156 return false;
1157
1159
1160 switch (GetCreatureTemplate()->rank)
1161 {
1164 break;
1167 break;
1170 break;
1172 // Xinef: Reduce corpse delay for bossess outside of instance
1173 if (!GetInstanceId())
1174 m_corpseDelay = sWorld->getIntConfig(CONFIG_CORPSE_DECAY_ELITE) * 2;
1175 else
1177 break;
1178 default:
1180 break;
1181 }
1182
1184 CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelRandomGender(&display, cinfo);
1185 if (minfo && !IsTotem()) // Cancel load if no model defined or if totem
1186 {
1187 SetDisplayId(display.CreatureDisplayID, display.DisplayScale);
1188 SetNativeDisplayId(display.CreatureDisplayID);
1189 }
1190
1193
1196
1198
1200 {
1203 }
1204 else if (cinfo->type_flags & CREATURE_TYPE_FLAG_VISIBLE_TO_GHOSTS) // Xinef: Add ghost visibility for ghost units
1205 {
1208 }
1209 if (Entry == VISUAL_WAYPOINT)
1210 SetVisible(false);
1211
1214
1215 return true;
1216}
@ CREATURE_FLAG_EXTRA_IGNORE_PATHFINDING
Definition CreatureData.h:75
@ CREATURE_FLAG_EXTRA_GHOST_VISIBILITY
Definition CreatureData.h:56
#define LOG_ERROR(filterType__,...)
Definition Log.h:158
#define VISUAL_WAYPOINT
Definition MotionMaster.h:34
#define DEFAULT_COLLISION_HEIGHT
Definition ObjectDefines.h:49
@ SERVERSIDE_VISIBILITY_GHOST
Definition SharedDefines.h:1262
@ GHOST_VISIBILITY_ALIVE
Definition SharedDefines.h:1269
@ GHOST_VISIBILITY_GHOST
Definition SharedDefines.h:1270
@ CREATURE_TYPE_FLAG_VISIBLE_TO_GHOSTS
Definition SharedDefines.h:2692
@ UNIT_STATE_IGNORE_PATHFINDING
Definition UnitDefines.h:200
@ CONFIG_CORPSE_DECAY_ELITE
Definition WorldConfig.h:258
@ CONFIG_CORPSE_DECAY_NORMAL
Definition WorldConfig.h:256
@ CONFIG_CORPSE_DECAY_WORLDBOSS
Definition WorldConfig.h:260
@ CONFIG_CORPSE_DECAY_RARE
Definition WorldConfig.h:257
@ CONFIG_CORPSE_DECAY_RAREELITE
Definition WorldConfig.h:259
bool LoadCreaturesAddon(bool reload=false)
Definition Creature.cpp:2680
void SetDisplayId(uint32 displayId, float displayScale=1.f) override
Definition Creature.cpp:3437
bool CreateFromProto(ObjectGuid::LowType guidlow, uint32 Entry, uint32 vehId, const CreatureData *data=nullptr)
Definition Creature.cpp:1592
uint32 GetScriptId() const
Definition Creature.cpp:3091
void UpdateMovementFlags()
Definition Creature.cpp:3351
float GetNativeObjectScale() const override
Definition Creature.cpp:3413
void LoadSparringPct()
Definition Creature.cpp:2766
void SetValue(FLAG_TYPE flag, T_VALUES value)
Definition Object.h:398
void GetFullTerrainStatusForPosition(uint32 phaseMask, float x, float y, float z, float collisionHeight, PositionFullTerrainStatus &data, Optional< uint8 > reqLiquidType={})
Definition Map.cpp:1375
void SetVisible(bool x)
Definition Unit.cpp:11072
void SetNativeDisplayId(uint32 displayId)
Definition Unit.h:1978
void AddUnitState(uint32 f)
Definition Unit.h:735
float GetHoverHeight() const
Definition Unit.h:1717
uint32 GetNativeDisplayId() const
Definition Unit.h:1976
void SetPhaseMask(uint32 newPhaseMask, bool update) override
Definition Unit.cpp:15274
void ProcessPositionDataChanged(PositionFullTerrainStatus const &data) override
Definition Unit.cpp:4436
bool IsSpiritHealer() const
Definition Unit.h:812
bool IsTotem() const
Definition Unit.h:799
bool IsSpiritGuide() const
Definition Unit.h:813
uint32 GetPhaseMask() const
Definition Object.h:516
uint32 LastUsedScriptID
Definition Object.h:685
uint32 GetInstanceId() const
Definition Object.h:513
virtual void SetMap(Map *map)
Definition Object.cpp:2138
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPES > m_serverSideVisibilityDetect
Definition Object.h:618
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPES > m_serverSideVisibility
Definition Object.h:617
uint32 const Entry[3]
Definition instance_blackwing_lair.cpp:73
Definition CreatureData.h:389
Definition CreatureData.h:170
Definition CreatureData.h:187
uint32 type_flags
Definition CreatureData.h:219
Definition Map.h:95
float m_positionZ
Definition Position.h:57
float GetPositionZ() const
Definition Position.h:123
bool IsPositionValid() const
Definition Position.cpp:183
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
1593{
1594 SetZoneScript();
1595 if (GetZoneScript() && data)
1596 {
1597 uint32 FirstEntry = GetZoneScript()->GetCreatureEntry(guidlow, data);
1598 if (!FirstEntry)
1599 return false;
1600 }
1601
1602 CreatureTemplate const* normalInfo = sObjectMgr->GetCreatureTemplate(Entry);
1603 if (!normalInfo)
1604 {
1605 LOG_ERROR("sql.sql", "Creature::CreateFromProto(): creature template (guidlow: {}, entry: {}) does not exist.", guidlow, Entry);
1606 return false;
1607 }
1608
1610
1611 Object::_Create(guidlow, Entry, (vehId || normalInfo->VehicleId) ? HighGuid::Vehicle : HighGuid::Unit);
1612
1613 // Xinef: select proper vehicle id
1614 if (!vehId)
1615 {
1616 CreatureTemplate const* cinfo = normalInfo;
1617 for (uint8 diff = uint8(GetMap()->GetSpawnMode()); diff > 0 && !IsPet();)
1618 {
1619 // we already have valid Map pointer for current creature!
1620 if (cinfo->DifficultyEntry[diff - 1])
1621 {
1622 cinfo = sObjectMgr->GetCreatureTemplate(normalInfo->DifficultyEntry[diff - 1]);
1623 if (cinfo && cinfo->VehicleId)
1624 break; // template found
1625
1626 // check and reported at startup, so just ignore (restore normalInfo)
1627 cinfo = normalInfo;
1628 }
1629
1630 // for instances heroic to normal, other cases attempt to retrieve previous difficulty
1631 if (diff >= RAID_DIFFICULTY_10MAN_HEROIC && GetMap()->IsRaid())
1632 diff -= 2; // to normal raid difficulty cases
1633 else
1634 --diff;
1635 }
1636
1637 if (cinfo->VehicleId)
1638 CreateVehicleKit(cinfo->VehicleId, (cinfo->VehicleId != normalInfo->VehicleId ? cinfo->Entry : normalInfo->Entry));
1639 }
1640 else
1641 CreateVehicleKit(vehId, Entry);
1642
1643 if (!UpdateEntry(Entry, data))
1644 return false;
1645
1646 return true;
1647}
@ 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:560
void SetOriginalEntry(uint32 entry)
Definition Creature.h:386
bool IsRaid() const
Definition Map.h:297
void _Create(ObjectGuid::LowType guidlow, uint32 entry, HighGuid guidhigh)
Definition Object.cpp:123
bool CreateVehicleKit(uint32 id, uint32 creatureEntry)
Returns the transport this unit is on directly (if on vehicle and transport, return vehicle)
Definition Unit.cpp:14940
void SetZoneScript()
Definition Object.cpp:2372
virtual uint32 GetCreatureEntry(ObjectGuid::LowType, CreatureData const *data)
Definition ZoneScript.h:31
uint32 Entry
Definition CreatureData.h:188
uint32 VehicleId
Definition CreatureData.h:226
uint32 DifficultyEntry[MAX_DIFFICULTY - 1]
Definition CreatureData.h:189

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.

1805{
1806 if (!m_spawnId)
1807 {
1808 LOG_ERROR("entities.unit", "Trying to delete not saved creature: {}", GetGUID().ToString());
1809 return;
1810 }
1811
1813 sObjectMgr->DeleteCreatureData(m_spawnId);
1814
1815 WorldDatabaseTransaction trans = WorldDatabase.BeginTransaction();
1816
1818 stmt->SetData(0, m_spawnId);
1819 trans->Append(stmt);
1820
1821 stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE_ADDON);
1822 stmt->SetData(0, m_spawnId);
1823 trans->Append(stmt);
1824
1825 stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_GAME_EVENT_CREATURE);
1826 stmt->SetData(0, m_spawnId);
1827 trans->Append(stmt);
1828
1829 stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_GAME_EVENT_MODEL_EQUIP);
1830 stmt->SetData(0, m_spawnId);
1831 trans->Append(stmt);
1832
1833 WorldDatabase.CommitTransaction(trans);
1834}
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:108
@ WORLD_DEL_CREATURE_ADDON
Definition WorldDatabase.h:73
@ WORLD_DEL_GAME_EVENT_CREATURE
Definition WorldDatabase.h:107
@ WORLD_DEL_CREATURE
Definition WorldDatabase.h:83
void RemoveCreatureRespawnTime(ObjectGuid::LowType dbGuid)
Definition Map.cpp:2394
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:59

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)
2135{
2137
2138 if (respawnDelay < 2s)
2139 {
2140 LOG_WARN("entities.unit", "DespawnOnEvade called with delay of {} seconds, defaulting to 2.", respawnDelay.count());
2141 respawnDelay = 2s;
2142 }
2143
2144 if (TempSummon* whoSummon = ToTempSummon())
2145 {
2147 whoSummon->UnSummon();
2148 return;
2149 }
2150
2151 DespawnOrUnsummon(0ms, respawnDelay);
2152}
#define LOG_WARN(filterType__,...)
Definition Log.h:162
virtual void SummonedCreatureDespawnAll()
Definition CreatureAI.h:154
Position const & GetHomePosition() const
Definition Creature.h:348
void DespawnOrUnsummon(Milliseconds msTimeToDespawn=0ms, Seconds forcedRespawnTimer=0s)
Definition Creature.cpp:2126
void ScheduleCreatureRespawn(ObjectGuid, Milliseconds, Position pos=Position())
Definition Map.cpp:2731
Definition TemporarySummon.h:50
TempSummon * ToTempSummon()
Definition Unit.h:731

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()

void Creature::DespawnOrUnsummon ( Milliseconds  msTimeToDespawn = 0ms,
Seconds  forcedRespawnTimer = 0s 
)
2127{
2128 if (TempSummon* summon = this->ToTempSummon())
2129 summon->UnSummon(msTimeToDespawn);
2130 else
2131 ForcedDespawn(msTimeToDespawn, forcedRespawnTimer);
2132}
void ForcedDespawn(Milliseconds timeMSToDespawn=0ms, Seconds forcedRespawnTimer=0s)
Definition Creature.cpp:2106

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::DamageTaken(), npc_akama_shade::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::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::DoAction(), boss_fathomlord_karathress::DoAction(), npc_herald_of_the_lich_king::DoAction(), boss_infinite_corruptor::boss_infinite_corruptorAI::DoAction(), npc_twilight_summon::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::DoAction(), npc_molten_golem::DoAction(), npc_auriaya_feral_defender::DoAction(), boss_thorim_sif::DoAction(), npc_blade_of_azzinoth::DoAction(), Spell::EffectScriptEffect(), Spell::EffectTameCreature(), boss_julianne::EnterEvadeMode(), boss_rend_blackhand::EnterEvadeMode(), boss_attumen::EnterEvadeMode(), boss_entropius::EnterEvadeMode(), boss_black_knight::boss_black_knightAI::EnterEvadeMode(), npc_phantom_hallucination::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(), SuckBackEvent::Execute(), npc_hallows_end_soh::FinishEvent(), spell_gen_despawn_self::HandleDummy(), spell_item_lil_xt::HandleDummy(), spell_q12096_q12092_dummy::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_q12805_lifeblood_dummy::HandleScript(), spell_q12690_burst_at_the_seams::HandleScript(), spell_illidan_cage_trap::HandleScriptEffect(), spell_winter_veil_racer_slam_hit::HandleScriptEffect(), spell_hawk_hunting::HandleScriptEffect(), spell_q11065_wrangle_some_aether_rays_aura::if(), boss_twilight_corrupter::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::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::JustDied(), npc_ulduar_saronite_animus::JustDied(), boss_skadi_grauf::boss_skadi_graufAI::JustDied(), npc_ichor_globule::npc_ichor_globuleAI::JustDied(), npc_vh_void_sentry::npc_vh_void_sentryAI::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::JustSummoned(), boss_kiljaeden::JustSummoned(), npc_medivh_bm::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::JustSummoned(), npc_tiger_matriarch::npc_tiger_matriarchAI::KilledUnit(), npc_brew_bubble::MoveInLineOfSight(), npc_khunok_the_behemoth::npc_khunok_the_behemothAI::MoveInLineOfSight(), FollowerAI::MovementInform(), npc_brann_bronzebeard_algalon::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_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::MovementInform(), npc_xt002_scrapbot::MovementInform(), npc_released_offspring_harkoa::npc_released_offspring_harkoaAI::MovementInform(), boss_flame_leviathan_safety_container::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(), instance_serpent_shrine::instance_serpentshrine_cavern_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_dragonblight_devour_ghoul_periodic::OnRemove(), spell_kaelthas_flame_strike::OnRemove(), spell_q12937_relief_for_the_fallen::OnRemove(), npc_valithria_portal::npc_valithria_portalAI::OnSpellClick(), boss_yoggsaron_descend_portal::OnSpellClick(), instance_zulaman::instance_zulaman_InstanceMapScript::OnUnitDeath(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnUnitDeath(), FrostwingGauntletRespawner::operator()(), ValithriaDespawner::operator()(), npc_ulduar_leviathan_mkii::PassengerBoarded(), npc_ulduar_vx001::PassengerBoarded(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::PassengerBoarded(), npc_eoe_wyrmrest_skytalon::PassengerBoarded(), npc_oculus_drake::npc_oculus_drakeAI::PassengerBoarded(), npc_ulduar_flames_initial::RemoveAll(), boss_gyth::Reset(), boss_nefarian::Reset(), npc_sanguine_spirit::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::Reset(), npc_xt002_pummeller::Reset(), npc_xt002_life_spark::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::SpellHit(), npc_preparations_for_war_vehicle::SpellHit(), boss_headless_horseman_pumpkin::SpellHit(), npc_rabid_thistle_bear::npc_rabid_thistle_bearAI::SpellHit(), boss_freya::SpellHit(), boss_hodir::SpellHit(), boss_mimiron::SpellHit(), npc_ulduar_keeper::npc_ulduar_keeperAI::SpellHit(), npc_aged_dying_ancient_kodo::SpellHit(), npc_living_constellation::SpellHit(), npc_enslaved_netherwing_drake::SpellHit(), boss_magus_telestra::SpellHit(), boss_thorim::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(), boss_novos::SummonedCreatureDies(), npc_creature_generator_akama::SummonedCreatureDies(), boss_vexallus::SummonedCreatureDies(), boss_hydross_the_unstable::SummonMovementInform(), boss_razorgore::SummonMovementInform(), VehicleAI::UpdateAI(), npc_escortAI::UpdateAI(), npc_vaelastrasz_the_red::UpdateAI(), boss_victor_nefarius::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_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::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_power_spark::UpdateAI(), npc_oculus_drake::npc_oculus_drakeAI::UpdateAI(), boss_algalon_the_observer::UpdateAI(), boss_flame_leviathan_seat::UpdateAI(), npc_thorims_hammer::UpdateAI(), boss_freya_lifebinder::UpdateAI(), boss_freya_healthy_spore::UpdateAI(), boss_freya_summons::UpdateAI(), boss_freya_nature_bomb::UpdateAI(), npc_ulduar_flash_freeze::UpdateAI(), boss_mimiron::UpdateAI(), npc_ulduar_bot_summon_trigger::UpdateAI(), npc_ulduar_flames_initial::UpdateAI(), boss_thorim_sif::UpdateAI(), npc_vh_teleportation_portal::npc_vh_teleportation_portalAI::UpdateAI(), npc_azure_saboteur::npc_azure_saboteurAI::UpdateAI(), npc_lurgglbr::npc_lurgglbrAI::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(), SmartAI::UpdateFollow(), 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().

◆ DisappearAndDie()

void Creature::DisappearAndDie ( )
362{
364 //SetVisibility(VISIBILITY_OFF);
365 //ObjectAccessor::UpdateObjectVisibility(this);
366 if (IsAlive())
368 RemoveCorpse(false, true);
369}
void setDeathState(DeathState s, bool despawn=false) override
A creature can be in 4 different states: Alive, JustDied, Corpse, and JustRespawned....
Definition Creature.cpp:1916
void RemoveCorpse(bool setSpawnTime=true, bool skipVisibility=false)
Definition Creature.cpp:418
void DestroyForVisiblePlayers()
Definition Object.cpp:2996

References WorldObject::DestroyForVisiblePlayers(), Unit::IsAlive(), JustDied, RemoveCorpse(), and setDeathState().

Referenced by npc_lord_gregor_lescovar::npc_lord_gregor_lescovarAI::EnterEvadeMode(), npc_marzon_silent_blade::npc_marzon_silent_bladeAI::EnterEvadeMode(), npc_dark_iron_guzzler::FindNextKeg(), Battlefield::HideNpc(), instance_blackrock_spire::OnCreatureCreate(), go_ulduar_tower::OnDestroyed(), go_dragonflayer_cage::OnGossipHello(), npc_valkyr_battle_maiden::npc_valkyr_battle_maidenAI::UpdateAI(), npc_swarm_scarab::npc_swarm_scarabAI::UpdateAI(), npc_venture_co_straggler::npc_venture_co_stragglerAI::UpdateAI(), npc_tyrion_spybot::npc_tyrion_spybotAI::UpdateAI(), and npc_emily::npc_emilyAI::WaypointReached().

◆ DoFleeToGetAssistance()

void Creature::DoFleeToGetAssistance ( )
1046{
1047 if (!GetVictim())
1048 return;
1049
1051 return;
1052
1053 float radius = sWorld->getFloatConfig(CONFIG_CREATURE_FAMILY_FLEE_ASSISTANCE_RADIUS);
1054 if (radius > 0)
1055 {
1056 Creature* creature = nullptr;
1057
1060
1061 Cell::VisitObjects(this, searcher, radius);
1062
1064 UpdateSpeed(MOVE_RUN, false);
1065
1066 if (!creature)
1067 //SetFeared(true, GetVictim()->GetGUID(), 0, sWorld->getIntConfig(CONFIG_CREATURE_FAMILY_FLEE_DELAY));
1068 //TODO: use 31365
1070 else
1071 GetMotionMaster()->MoveSeekAssistance(creature->GetPositionX(), creature->GetPositionY(), creature->GetPositionZ());
1072 }
1073}
@ UNIT_STATE_FLEEING
Definition UnitDefines.h:180
@ CONFIG_CREATURE_FAMILY_FLEE_ASSISTANCE_RADIUS
Definition WorldConfig.h:158
void SetNoSearchAssistance(bool val)
Definition Creature.h:272
void MoveSeekAssistance(float x, float y, float z)
Definition MotionMaster.cpp:767
bool HasPreventsFleeingAura() const
Definition Unit.h:1805
void SetControlled(bool apply, UnitState state, Unit *source=nullptr, bool isFear=false)
Definition Unit.cpp:14268
Definition GridNotifiers.h:449

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::VisitObjects().

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

◆ DoImmediateBoundaryCheck()

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

References m_boundaryCheckTime.

Referenced by CreatureAI::SetBoundary().

◆ FocusTarget()

void Creature::FocusTarget ( Spell const *  focusSpell,
WorldObject const *  target 
)
3473{
3474 // already focused
3475 if (_focusSpell)
3476 return;
3477
3478 _focusSpell = focusSpell;
3480
3481 SetGuidValue(UNIT_FIELD_TARGET, this == target ? ObjectGuid::Empty : target->GetGUID());
3482 if (focusSpell->GetSpellInfo()->HasAttribute(SPELL_ATTR5_AI_DOESNT_FACE_TARGET))
3484
3485 // Set serverside orientation if needed (needs to be after attribute check)
3486 if (this == target && (movespline->Finalized() || GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE))
3488 else
3489 SetInFront(target);
3490}
@ CHASE_MOTION_TYPE
Definition MotionMaster.h:45
@ SPELL_ATTR5_AI_DOESNT_FACE_TARGET
Definition SharedDefines.h:574
@ UNIT_STATE_ROTATING
Definition UnitDefines.h:193
@ UNIT_FIELD_TARGET
Definition UpdateFields.h:92
ObjectGuid _spellFocusTarget
‍Locks the target during spell cast for proper facing
Definition Creature.h:543
bool Finalized() const
Definition MoveSpline.h:118
static ObjectGuid const Empty
Definition ObjectGuid.h:120
void SetGuidValue(uint16 index, ObjectGuid value)
Definition Object.cpp:712
ObjectGuid GetGuidValue(uint16 index) const
Definition Object.cpp:326
void SetFacingTo(float ori)
Definition Unit.cpp:16411
Movement::MoveSpline * movespline
Definition Unit.h:2114
void SetInFront(WorldObject const *target)
Definition Unit.cpp:16405
float GetOrientation() const
Definition Position.h:124

References _focusSpell, _spellFocusTarget, Unit::AddUnitState(), CHASE_MOTION_TYPE, ObjectGuid::Empty, Movement::MoveSpline::Finalized(), Object::GetGUID(), Object::GetGuidValue(), 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 ( Milliseconds  timeMSToDespawn = 0ms,
Seconds  forcedRespawnTimer = 0s 
)
private
2107{
2108 if (timeMSToDespawn > 0ms)
2109 {
2110 ForcedDespawnDelayEvent* pEvent = new ForcedDespawnDelayEvent(*this, forceRespawnTimer);
2111 m_Events.AddEventAtOffset(pEvent, timeMSToDespawn);
2112 return;
2113 }
2114
2115 if (IsAlive())
2117
2118 // Xinef: Set new respawn time, ignore corpse decay time...
2119 RemoveCorpse(true);
2120
2121 if (forceRespawnTimer > 0s)
2122 if (GetMap())
2123 GetMap()->ScheduleCreatureRespawn(GetGUID(), forceRespawnTimer);
2124}
Definition Creature.h:573

References EventProcessor::AddEventAtOffset(), 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
3307{
3308 // Determines the aggro range for creatures
3309 // Based on data from wowwiki due to lack of 3.3.5a data
3310
3311 float aggroRate = sWorld->getRate(RATE_CREATURE_AGGRO);
3312 if (aggroRate == 0)
3313 return 0.0f;
3314
3315 auto creatureLevel = target->getLevelForTarget(this);
3316 auto playerLevel = getLevelForTarget(target);
3317 int32 levelDiff = int32(creatureLevel) - int32(playerLevel);
3318
3319 // The maximum Aggro Radius is capped at 45 yards (25 level difference)
3320 if (levelDiff < -25)
3321 levelDiff = -25;
3322
3323 // The base aggro radius for mob of same level
3324 auto aggroRadius = GetDetectionRange();
3325 if (aggroRadius < 1)
3326 {
3327 return 0.0f;
3328 }
3329 // Aggro Radius varies with level difference at a rate of roughly 1 yard/level
3330 aggroRadius -= (float)levelDiff;
3331
3332 // detect range auras
3334
3335 // detected range auras
3336 aggroRadius += target->GetTotalAuraModifier(SPELL_AURA_MOD_DETECTED_RANGE);
3337
3338 // Just in case, we don't want pets running all over the map
3339 if (aggroRadius > MAX_AGGRO_RADIUS)
3340 aggroRadius = MAX_AGGRO_RADIUS;
3341
3342 // Minimum Aggro Radius for a mob seems to be combat range (5 yards)
3343 // hunter pets seem to ignore minimum aggro radius so we'll default it a little higher
3344 float minRange = IsPet() ? 10.0f : 5.0f;
3345 if (aggroRadius < minRange)
3346 aggroRadius = minRange;
3347
3348 return (aggroRadius * aggroRate);
3349}
@ 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:43
@ RATE_CREATURE_AGGRO
Definition WorldConfig.h:467
float GetDetectionRange() const
Definition Creature.h:260
uint8 getLevelForTarget(WorldObject const *target) const override
Definition Creature.cpp:3068
int32 GetTotalAuraModifier(AuraType auratype) const
Definition Unit.cpp:6268

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

◆ GetAttackDistance()

float Creature::GetAttackDistance ( Unit const *  player) const
3517{
3518 float aggroRate = sWorld->getRate(RATE_CREATURE_AGGRO);
3519
3520 if (aggroRate == 0)
3521 return 0.0f;
3522
3523 if (!player)
3524 return 0.0f;
3525
3526 uint32 playerLevel = player->getLevelForTarget(this);
3527 uint32 creatureLevel = getLevelForTarget(player);
3528
3529 int32 levelDiff = static_cast<int32>(playerLevel) - static_cast<int32>(creatureLevel);
3530
3531 // "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."
3532 if (levelDiff < -25)
3533 levelDiff = -25;
3534
3535 // "The aggro radius of a mob having the same level as the player is roughly 20 yards"
3536 float retDistance = 20.0f;
3537
3538 // "Aggro Radius varies with level difference at a rate of roughly 1 yard/level"
3539 // radius grow if playlevel < creaturelevel
3540 retDistance -= static_cast<float>(levelDiff);
3541
3542 if (creatureLevel + 5 <= sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
3543 {
3544 // detect range auras
3545 retDistance += static_cast<float>( GetTotalAuraModifier(SPELL_AURA_MOD_DETECT_RANGE));
3546
3547 // detected range auras
3548 retDistance += static_cast<float>( player->GetTotalAuraModifier(SPELL_AURA_MOD_DETECTED_RANGE));
3549 }
3550
3551 // "Minimum Aggro Radius for a mob seems to be combat range (5 yards)"
3552 if (retDistance < 5.0f)
3553 retDistance = 5.0f;
3554
3555 return (retDistance * aggroRate);
3556}
@ CONFIG_MAX_PLAYER_LEVEL
Definition WorldConfig.h:193

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(), npc_hadronox_crusherPackAI::MoveInLineOfSight(), and npc_pet_hunter_snake_trap::UpdateAI().

◆ GetCannotReachTarget()

ObjectGuid const & Creature::GetCannotReachTarget ( ) const
inline
339{ return m_cannotReachTarget; }

References m_cannotReachTarget.

Referenced by UnitAI::EvadeTimerExpired().

◆ GetCombatPulseDelay()

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

References m_combatPulseDelay.

◆ GetCorpseDelay()

uint32 Creature::GetCorpseDelay ( ) const
inline

◆ GetCreatureAddon()

CreatureAddon const * Creature::GetCreatureAddon ( ) const
2668{
2669 if (m_spawnId)
2670 {
2671 if (CreatureAddon const* addon = sObjectMgr->GetCreatureAddon(m_spawnId))
2672 return addon;
2673 }
2674
2675 // dependent from difficulty mode entry
2676 return sObjectMgr->GetCreatureTemplateAddon(GetCreatureTemplate()->Entry);
2677}
Definition CreatureData.h:431

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
206{ return m_creatureInfo; }

References m_creatureInfo.

Referenced by KillRewarder::_InitXP(), Unit::_IsValidAttackTarget(), AllLootRemovedFromCorpse(), Vehicle::ApplyAllImmunities(), npc_escortAI::AssistPlayerInCombatAgainst(), FollowerAI::AssistPlayerInCombatAgainst(), SmartAI::AssistPlayerInCombatAgainst(), AtDisengage(), AtEngage(), Player::BuildPetTalentsInfoData(), CalculateMinMaxDamage(), SpellEffectInfo::CalcValue(), Spell::CheckCast(), SpellInfo::CheckTarget(), Create(), Pet::CreateBaseAtCreature(), Unit::DealMeleeDamage(), boss_high_king_maulgar::DoAction(), ScriptedAI::DoRewardPlayersInArea(), Spell::DoSpellHitOnUnit(), Spell::EffectForceDeselect(), Spell::EffectSanctuary(), Spell::EffectSkinning(), Spell::EffectSummonType(), Acore::XP::Gain(), GetCreatureAddon(), Unit::GetCreatureType(), GetGossipMenuId(), GetLeashTimer(), GetMovementTemplate(), GetNativeObjectScale(), Pet::GetNativeObjectScale(), Player::GetNPCIfCanInteractWith(), SmartScript::GetScript(), AuraEffect::HandleFeignDeath(), learn_commandscript::HandleLearnAllMyPetTalentsCommand(), npc_commandscript::HandleNpcInfoCommandShowCreature(), npc_commandscript::HandleNpcSetFactionIdCommand(), npc_commandscript::HandleNpcTameCommand(), AuraEffect::HandlePeriodicTriggerSpellAuraTick(), HasFlagsExtra(), Pet::HaveInDiet(), InitEntry(), Pet::InitLevelupSpellsForLevel(), Guardian::InitStatsForLevel(), 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(), 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(), Unit::RemoveCharmedBy(), Player::RemovePet(), boss_onyxia::Reset(), boss_sindragosa::boss_sindragosaAI::Reset(), Pet::resetTalents(), Respawn(), Player::RewardReputation(), SaveToDB(), SelectLevel(), Player::SendLoot(), WorldSession::SendPetNameQuery(), Unit::SetCharmedBy(), setDeathState(), SetDisplayFromModel(), npc_tirion_fordring_tft::npc_tirion_fordringAI::sGossipSelect(), npc_harrison_jones::sGossipSelect(), boss_priestess_delrissa::SummonedCreatureDies(), Player::SummonPet(), npc_hor_lich_king::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
358{ return m_waypointID; }

References m_waypointID.

Referenced by npc_akama_illidan::MovementInform().

◆ GetCurrentWaypointInfo()

std::pair< uint32, uint32 > Creature::GetCurrentWaypointInfo ( ) const
inline
362{ return _currentWaypointNodeInfo; }
std::pair< uint32, uint32 > _currentWaypointNodeInfo
Definition Creature.h:530

References _currentWaypointNodeInfo.

◆ GetDebugInfo()

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

Reimplemented from Object.

Reimplemented in TempSummon, Minion, Guardian, and Pet.

3816{
3817 std::stringstream sstr;
3818 sstr << Unit::GetDebugInfo() << "\n"
3819 << "AIName: " << GetAIName() << " ScriptName: " << GetScriptName()
3820 << " WaypointPath: " << GetWaypointPath() << " SpawnId: " << GetSpawnId();
3821 return sstr.str();
3822}
uint32 GetWaypointPath() const
Definition Creature.h:355
ObjectGuid::LowType GetSpawnId() const
Definition Creature.h:69
std::string GetScriptName() const
Definition Creature.cpp:3086
std::string const & GetAIName() const
Definition Creature.cpp:3081
std::string GetDebugInfo() const override
Definition Unit.cpp:17337

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

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

◆ GetDefaultMovementType()

MovementGeneratorType Creature::GetDefaultMovementType ( ) const
inlineoverridevirtual

◆ GetDetectionRange()

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

References m_detectionDistance.

Referenced by GetAggroRange().

◆ GetFormation() [1/2]

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

References m_formation.

◆ GetFormation() [2/2]

◆ GetGossipMenuId()

◆ GetHomePosition() [1/2]

Position const & Creature::GetHomePosition ( ) const
inline
348{ 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
347{ 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_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::EnterEvadeMode(), boss_professor_putricide::boss_professor_putricideAI::EnterEvadeMode(), boss_yoggsaron_sara::EnterEvadeMode(), 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::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::UpdateAI(), boss_broodlord::UpdateAI(), npc_alexstraza_the_lifebinder::UpdateAI(), boss_elder_nadox::UpdateAI(), boss_frostsworn_general::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::UpdateAI(), npc_bloodmage_laurith::npc_bloodmage_laurithAI::UpdateAI(), and CreatureAI::VisualizeBoundary().

◆ GetLastLeashExtensionTime()

time_t Creature::GetLastLeashExtensionTime ( ) const
3627{
3629}
std::shared_ptr< time_t > const & GetLastLeashExtensionTimePtr() const
Definition Creature.cpp:3609

References GetLastLeashExtensionTimePtr().

Referenced by CanCreatureAttack().

◆ GetLastLeashExtensionTimePtr()

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

◆ GetLeashTimer()

uint8 Creature::GetLeashTimer ( ) const
3637{ // Based on testing on Classic, seems to range from ~11s for low level mobs (1-5) to ~16s for high level mobs (70+)
3638 uint8 timerOffset = 11;
3639
3640 uint8 timerModifier = uint8(GetCreatureTemplate()->minlevel / 10) - 2;
3641
3642 // Formula is likely not quite correct, but better than flat timer
3643 return std::max<uint8>(timerOffset, timerOffset + timerModifier);
3644}

References GetCreatureTemplate().

Referenced by CanCreatureAttack().

◆ getLevelForTarget()

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

Reimplemented from WorldObject.

3069{
3070 if (!isWorldBoss() || !target->ToUnit())
3071 return Unit::getLevelForTarget(target);
3072
3073 uint16 level = target->ToUnit()->GetLevel() + sWorld->getIntConfig(CONFIG_WORLD_BOSS_LEVEL_DIFF);
3074 if (level < 1)
3075 return 1;
3076 if (level > 255)
3077 return 255;
3078 return uint8(level);
3079}
std::uint16_t uint16
Definition Define.h:108
@ CONFIG_WORLD_BOSS_LEVEL_DIFF
Definition WorldConfig.h:242
uint8 getLevelForTarget(WorldObject const *) const override
Definition Unit.h:1104

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
1276{
1278 return nullptr;
1279 return sGroupMgr->GetGroupByGUID(m_lootRecipientGroup);
1280}
#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.

162{ return m_meleeDamageSchoolMask; }

References m_meleeDamageSchoolMask.

Referenced by ThreatReference::ShouldBeSuppressed().

◆ GetMovementTemplate()

◆ GetNameForLocaleIdx()

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

Reimplemented from WorldObject.

3182{
3183 if (loc_idx != DEFAULT_LOCALE)
3184 {
3185 uint8 uloc_idx = uint8(loc_idx);
3186 CreatureLocale const* cl = sObjectMgr->GetCreatureLocale(GetEntry());
3187 if (cl)
3188 {
3189 if (cl->Name.size() > uloc_idx && !cl->Name[uloc_idx].empty())
3190 return cl->Name[uloc_idx];
3191 }
3192 }
3193
3194 return GetName();
3195}
#define DEFAULT_LOCALE
Definition Common.h:131
std::string const & GetName() const
Definition Object.h:528
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.

3414{
3416}
static CreatureModel const * ChooseDisplayId(CreatureTemplate const *cinfo, CreatureData const *data=nullptr)
Definition ObjectMgr.cpp:1643
float DisplayScale
Definition CreatureData.h:181

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.

330 {
332 return 0;
333 else
334 return m_charmInfo->GetCharmSpell(pos)->GetAction();
335 }
#define MAX_SPELL_CHARM
Definition CharmInfo.h:24
@ ACT_ENABLED
Definition CharmInfo.h:63
CharmInfo * m_charmInfo
Definition Unit.h:2186
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.

328{ return MAX_SPELL_CHARM; }

References MAX_SPELL_CHARM.

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

◆ GetPlayerDamageReq()

uint32 Creature::GetPlayerDamageReq ( ) const
3779{
3780 return _playerDamageReq;
3781}

References _playerDamageReq.

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

◆ GetRandomId()

uint32 Creature::GetRandomId ( uint32  id1,
uint32  id2,
uint32  id3 
)
3664{
3665 uint32 id = id1;
3666 uint8 ids = 0;
3667
3668 if (id2)
3669 {
3670 ++ids;
3671 if (id3) ++ids;
3672 }
3673
3674 if (ids)
3675 {
3676 uint8 idNumber = urand(0, ids);
3677 switch (idNumber)
3678 {
3679 case 0:
3680 id = id1;
3681 break;
3682 case 1:
3683 id = id2;
3684 break;
3685 case 2:
3686 id = id3;
3687 break;
3688 }
3689 }
3690 return id;
3691}
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:44

References urand().

Referenced by LoadCreatureFromDB(), and Respawn().

◆ GetReactState()

ReactStates Creature::GetReactState ( ) const
inline
100{ 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(), boss_renataki::boss_renatakiAI::CanAlwaysBeDetectable(), boss_renataki::boss_renatakiAI::CanBeSeen(), boss_renataki::boss_renatakiAI::CanSeeAlways(), CharmInfo::CharmInfo(), Player::CharmSpellInitialize(), npc_ulduar_leviathan_mkii::DamageTaken(), npc_ulduar_vx001::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::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
2989{
2990 if (m_spawnId)
2991 {
2992 if (CreatureData const* data = sObjectMgr->GetCreatureData(m_spawnId))
2993 {
2994 x = data->posX;
2995 y = data->posY;
2996 z = data->posZ;
2997 if (ori)
2998 *ori = data->orientation;
2999 if (dist)
3000 *dist = data->wander_distance;
3001
3002 return;
3003 }
3004 }
3005
3006 // xinef: changed this from current position to home position, fixes world summons with infinite duration
3007 if (GetTransport())
3008 {
3009 x = GetPositionX();
3010 y = GetPositionY();
3011 z = GetPositionZ();
3012 if (ori)
3013 *ori = GetOrientation();
3014 }
3015 else
3016 {
3018 x = homePos.GetPositionX();
3019 y = homePos.GetPositionY();
3020 z = homePos.GetPositionZ();
3021 if (ori)
3022 *ori = homePos.GetOrientation();
3023 }
3024 if (dist)
3025 *dist = 0;
3026}
Position const homePos
Definition boss_chromaggus.cpp:71
Transport * GetTransport() const
Definition Object.h:688
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
2979{
2980 time_t now = GameTime::GetGameTime().count();
2981
2982 if (m_respawnTime > now)
2983 return m_respawnTime;
2984 else
2985 return now;
2986}

References GameTime::GetGameTime(), and m_respawnTime.

Referenced by npc_commandscript::HandleNpcInfoCommandShowCreature().

◆ GetScriptId()

◆ GetScriptName()

std::string Creature::GetScriptName ( ) const

◆ GetShieldBlockValue()

uint32 Creature::GetShieldBlockValue ( ) const
inlineoverridevirtual

Implements Unit.

158 {
159 return (GetLevel() / 2 + uint32(GetStat(STAT_STRENGTH) / 20));
160 }
@ STAT_STRENGTH
Definition SharedDefines.h:246
float GetStat(Stats stat) const
Definition Unit.h:1058

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

◆ GetSparringPct()

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

References _sparringPct.

Referenced by Unit::DealDamage().

◆ GetSpawnId()

ObjectGuid::LowType Creature::GetSpawnId ( ) const
inline
69{ 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::HandleDebugCombatListCommand(), debug_commandscript::HandleDebugGetLootRecipientCommand(), debug_commandscript::HandleDebugThreatListCommand(), OPvPCapturePointZM_Graveyard::HandleGossipOption(), npc_commandscript::HandleNpcAddCommand(), npc_commandscript::HandleNpcAddFormationCommand(), npc_commandscript::HandleNpcGuidCommand(), npc_commandscript::HandleNpcInfoCommandShowCreature(), 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
2955{
2956 CreatureSpellCooldowns::const_iterator itr = m_CreatureSpellCooldowns.find(spell_id);
2957 if (itr == m_CreatureSpellCooldowns.end())
2958 return 0;
2959
2960 return itr->second.end > GameTime::GetGameTimeMS().count() ? itr->second.end - GameTime::GetGameTimeMS().count() : 0;
2961}

References GameTime::GetGameTimeMS(), and m_CreatureSpellCooldowns.

◆ GetSpellDamageMod()

float Creature::GetSpellDamageMod ( int32  Rank)
1574{
1575 switch (Rank) // define rates for each elite rank
1576 {
1587 default:
1589 }
1590}
@ RATE_CREATURE_NORMAL_SPELLDAMAGE
Definition WorldConfig.h:462
@ RATE_CREATURE_ELITE_ELITE_SPELLDAMAGE
Definition WorldConfig.h:463
@ RATE_CREATURE_ELITE_RAREELITE_SPELLDAMAGE
Definition WorldConfig.h:464
@ RATE_CREATURE_ELITE_WORLDBOSS_SPELLDAMAGE
Definition WorldConfig.h:465
@ RATE_CREATURE_ELITE_RARE_SPELLDAMAGE
Definition WorldConfig.h:466

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.

3807{
3808 if (TempSummon const* temp = ToTempSummon())
3809 return temp->GetSummonerGUID();
3810
3811 LOG_DEBUG("entities.unit", "Creature::GetSummonerGUID() called by creature that is not a summon. Creature: {} ({})", GetEntry(), GetName());
3812 return ObjectGuid::Empty;
3813}

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::JustSummoned(), and npc_algalon_worm_hole::JustSummoned().

◆ GetTextRepeatGroup()

CreatureTextRepeatIds const & Creature::GetTextRepeatGroup ( uint8  textGroup)
3713{
3714 static CreatureTextRepeatIds const emptyIds;
3715
3716 CreatureTextRepeatGroup::const_iterator groupItr = m_textRepeat.find(textGroup);
3717 if (groupItr != m_textRepeat.end())
3718 return groupItr->second;
3719
3720 return emptyIds;
3721}
std::vector< uint8 > CreatureTextRepeatIds
Definition Creature.h:43

References m_textRepeat.

Referenced by CreatureTextMgr::SendChat().

◆ 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)
3109{
3110 if (!vItem->maxcount)
3111 return vItem->maxcount;
3112
3113 VendorItemCounts::iterator itr = m_vendorItemCounts.begin();
3114 for (; itr != m_vendorItemCounts.end(); ++itr)
3115 if (itr->itemId == vItem->item)
3116 break;
3117
3118 if (itr == m_vendorItemCounts.end())
3119 return vItem->maxcount;
3120
3121 VendorItemCount* vCount = &*itr;
3122
3123 time_t ptime = GameTime::GetGameTime().count();
3124
3125 if (time_t(vCount->lastIncrementTime + vItem->incrtime) <= ptime)
3126 {
3127 ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(vItem->item);
3128
3129 uint32 diff = uint32((ptime - vCount->lastIncrementTime) / vItem->incrtime);
3130 if ((vCount->count + diff * pProto->BuyCount) >= vItem->maxcount)
3131 {
3132 m_vendorItemCounts.erase(itr);
3133 return vItem->maxcount;
3134 }
3135
3136 vCount->count += diff * pProto->BuyCount;
3137 vCount->lastIncrementTime = ptime;
3138 }
3139
3140 return vCount->count;
3141}
Definition ItemTemplate.h:619
uint32 BuyCount
Definition ItemTemplate.h:629
Definition CreatureData.h:487
time_t lastIncrementTime
Definition CreatureData.h:492
uint32 count
Definition CreatureData.h:491

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
3104{
3105 return sObjectMgr->GetNpcVendorItemList(GetEntry());
3106}

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.

1794{
1795 QuestRelationBounds qir = sObjectMgr->GetCreatureQuestInvolvedRelationBounds(GetEntry());
1796 for (QuestRelations::const_iterator itr = qir.first; itr != qir.second; ++itr)
1797 {
1798 if (itr->second == quest_id)
1799 return true;
1800 }
1801 return false;
1802}
std::pair< QuestRelations::const_iterator, QuestRelations::const_iterator > QuestRelationBounds
Definition ObjectMgr.h:528

References Object::GetEntry(), and sObjectMgr.

◆ HasLootMode()

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

References m_LootMode.

◆ hasLootRecipient()

◆ HasMechanicTemplateImmunity()

bool Creature::HasMechanicTemplateImmunity ( uint64  mask) const
2163{
2164 if (GetOwnerGUID().IsPlayer())
2165 return false;
2166
2167 if (CreatureImmunities const* immunities = sSpellMgr->GetCreatureImmunities(_creatureImmunitiesId))
2168 return (immunities->Mechanic.to_ullong() & mask) != 0;
2169
2170 // no custom immunity entry => no mechanic immunity
2171 return false;
2172}
int32 _creatureImmunitiesId
Definition Creature.h:498
ObjectGuid GetOwnerGUID() const
Definition Unit.h:713
Definition SpellMgr.h:564

References _creatureImmunitiesId, Unit::GetOwnerGUID(), Object::IsPlayer(), and sSpellMgr.

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

◆ hasQuest()

bool Creature::hasQuest ( uint32  quest_id) const
overridevirtual

Reimplemented from Object.

1783{
1784 QuestRelationBounds qr = sObjectMgr->GetCreatureQuestRelationBounds(GetEntry());
1785 for (QuestRelations::const_iterator itr = qr.first; itr != qr.second; ++itr)
1786 {
1787 if (itr->second == quest_id)
1788 return true;
1789 }
1790 return false;
1791}

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.

2970{
2971 uint8 i;
2972 for (i = 0; i < MAX_CREATURE_SPELLS; ++i)
2973 if (spellID == m_spells[i])
2974 break;
2975 return i < MAX_CREATURE_SPELLS; //broke before end of iteration of known spells
2976}

References m_spells, and MAX_CREATURE_SPELLS.

Referenced by WorldSession::HandleCastSpellOpcode().

◆ HasSpellCooldown()

◆ HasSpellFocus()

bool Creature::HasSpellFocus ( Spell const *  focusSpell = nullptr) const
3493{
3494 if (isDead()) // dead creatures cannot focus
3495 {
3496 return false;
3497 }
3498
3499 return focusSpell ? (focusSpell == _spellFocusInfo.Spell) : (_spellFocusInfo.Spell || _spellFocusInfo.Delay);
3500}
uint32 Delay
Definition Creature.h:152
struct Creature::@229 _spellFocusInfo
Definition Spell.h:298
bool isDead() const
Definition Unit.h:1795

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

Referenced by IsMovementPreventedByCasting(), and SelectVictim().

◆ HasSwimmingFlagOutOfCombat()

bool Creature::HasSwimmingFlagOutOfCombat ( ) const
inline

◆ HasWeapon()

bool Creature::HasWeapon ( WeaponAttackType  type) const
overridevirtual

Implements Unit.

3224{
3225 if (type == OFF_ATTACK)
3226 {
3227 switch (_dualWieldMode)
3228 {
3230 return true;
3232 return false;
3234 default:
3235 break;
3236 }
3237 }
3238
3239 const uint8 slot = uint8(type);
3240 ItemEntry const* item = sItemStore.LookupEntry(GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + slot));
3241 return (item && item->ClassID == ITEM_CLASS_WEAPON);
3242}
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:294
DualWieldMode _dualWieldMode
Definition Unit.h:2072
Definition DBCStructure.h:1143
uint32 ClassID
Definition DBCStructure.h:1145

References Unit::_dualWieldMode, AUTO, ItemEntry::ClassID, DISABLED, ENABLED, Object::GetUInt32Value(), ITEM_CLASS_WEAPON, OFF_ATTACK, sItemStore, and UNIT_VIRTUAL_ITEM_SLOT_ID.

Referenced by CalculateMinMaxDamage(), and HasWeaponForAttack().

◆ HasWeaponForAttack()

bool Creature::HasWeaponForAttack ( WeaponAttackType  type) const
inlineoverridevirtual

Reimplemented from Unit.

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

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

457{
458 CreatureTemplate const* normalInfo = sObjectMgr->GetCreatureTemplate(Entry);
459 if (!normalInfo)
460 {
461 LOG_ERROR("sql.sql", "Creature::InitEntry creature entry {} does not exist.", Entry);
462 return false;
463 }
464
465 // get difficulty 1 mode entry
466 // Xinef: Skip for pets!
467 CreatureTemplate const* cinfo = normalInfo;
468 for (uint8 diff = uint8(GetMap()->GetSpawnMode()); diff > 0 && !IsPet();)
469 {
470 // we already have valid Map pointer for current creature!
471 if (normalInfo->DifficultyEntry[diff - 1])
472 {
473 cinfo = sObjectMgr->GetCreatureTemplate(normalInfo->DifficultyEntry[diff - 1]);
474 if (cinfo)
475 break; // template found
476
477 // check and reported at startup, so just ignore (restore normalInfo)
478 cinfo = normalInfo;
479 }
480
481 // for instances heroic to normal, other cases attempt to retrieve previous difficulty
482 if (diff >= RAID_DIFFICULTY_10MAN_HEROIC && GetMap()->IsRaid())
483 diff -= 2; // to normal raid difficulty cases
484 else
485 --diff;
486 }
487
488 SetEntry(Entry); // normal entry always
489 m_creatureInfo = cinfo; // map mode related always
490
491 // equal to player Race field, but creature does not have race
493
494 // known valid are: CLASS_WARRIOR, CLASS_PALADIN, CLASS_ROGUE, CLASS_MAGE
496
497 // Cancel load if no model defined
498 if (!(cinfo->GetFirstValidModel()))
499 {
500 LOG_ERROR("sql.sql", "Creature (Entry: {}) has no model defined in table `creature_template_model`, can't load. ", Entry);
501 return false;
502 }
503
504 CreatureModel model = *ObjectMgr::ChooseDisplayId(cinfo, data);
505 CreatureModelInfo const* mInfo = sObjectMgr->GetCreatureModelRandomGender(&model, cinfo);
506 if (!mInfo) // Cancel load if no model defined
507 {
508 LOG_ERROR("sql.sql", "Creature (Entry: {}) has no model {} defined in table `creature_template_model`, can't load. ", Entry, model.CreatureDisplayID);
509 return false;
510 }
511
514
515 // Load creature equipment
516 if (!data)
517 {
518 LoadEquipment(); // use default from the template
519 }
520 else if (data->equipmentId == 0)
521 {
522 LoadEquipment(0); // 0 means no equipment for creature table
523 }
524 else
525 {
528 }
529
530 SetName(normalInfo->Name); // at normal entry always
531
533
535 SetSpeed(MOVE_RUN, cinfo->speed_run);
538
539 // Will set UNIT_FIELD_BOUNDINGRADIUS and UNIT_FIELD_COMBATREACH
541
543
546
547 // checked at loading
551
552 for (uint8 i = 0; i < MAX_CREATURE_SPELLS; ++i)
554
556
557 return true;
558}
@ CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK
Definition CreatureData.h:57
@ RANDOM_MOTION_TYPE
Definition MotionMaster.h:40
@ MOVE_WALK
Definition UnitDefines.h:356
@ 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:3418
void LoadEquipment(int8 id=1, bool force=false)
Definition Creature.cpp:1760
void SetByteValue(uint16 index, uint8 offset, uint8 value)
Definition Object.cpp:739
void SetFloatValue(uint16 index, float value)
Definition Object.cpp:726
void SetEntry(uint32 entry)
Definition Object.h:118
void Initialize()
Definition ThreatManager.cpp:226
void SetSpeed(UnitMoveType mtype, float rate, bool forced=false)
Definition Unit.cpp:11270
virtual void SetDualWieldMode(DualWieldMode mode)
Definition Unit.h:980
void SetName(std::string const &newname)
Definition Object.h:529
int8 equipmentId
Definition CreatureData.h:376
uint32 CreatureDisplayID
Definition CreatureData.h:180
float speed_run
Definition CreatureData.h:202
std::string Name
Definition CreatureData.h:192
uint32 spells[MAX_CREATURE_SPELLS]
Definition CreatureData.h:224
CreatureModel const * GetFirstValidModel() const
Definition Creature.cpp:137
float speed_swim
Definition CreatureData.h:203
uint32 MovementType
Definition CreatureData.h:230
uint32 unit_class
Definition CreatureData.h:213
float speed_walk
Definition CreatureData.h:201
float HoverHeight
Definition CreatureData.h:232
float speed_flight
Definition CreatureData.h:204

References ObjectMgr::ChooseDisplayId(), CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK, CreatureModel::CreatureDisplayID, CreatureTemplate::DifficultyEntry, CreatureModel::DisplayScale, ENABLED, Entry, CreatureData::equipmentId, GetCreatureTemplate(), CreatureTemplate::GetFirstValidModel(), WorldObject::GetMap(), GetNativeObjectScale(), Unit::GetThreatMgr(), CreatureTemplate::HasFlagsExtra(), CreatureTemplate::HoverHeight, IDLE_MOTION_TYPE, ThreatManager::Initialize(), 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(), SetDisplayId(), Unit::SetDualWieldMode(), 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.

2155{
2156 if ((IsTotem() || IsTrigger() || IsCritter() || IsSpiritService()) && GetAIName() != "SmartAI" && !GetScriptId())
2158 else
2160}
@ REACT_PASSIVE
Definition Unit.h:566
bool IsTrigger() const
Definition Creature.h:80
void SetReactState(ReactStates state)
A creature can have 3 ReactStates : Agressive, Passive, Neutral.
Definition Creature.h:99
bool IsCritter() const
Definition Unit.h:833
bool IsSpiritService() const
Definition Unit.h:824

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.

1856{
1858 {
1859 return true;
1860 }
1861
1862 if (IsAIEnabled && AI()->CanAlwaysBeDetectable(seer))
1863 {
1864 return true;
1865 }
1866
1867 return false;
1868}
bool IsAlwaysDetectableFor(WorldObject const *seer) const override
Definition Unit.cpp:11054

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

◆ IsAvoidingAOE()

bool Creature::IsAvoidingAOE ( ) const
inline

◆ isCanInteractWithBattleMaster()

bool Creature::isCanInteractWithBattleMaster ( Player player,
bool  msg 
) const
1219{
1220 if (!IsBattleMaster())
1221 return false;
1222
1223 BattlegroundTypeId bgTypeId = sBattlegroundMgr->GetBattleMasterBG(GetEntry());
1224 if (!msg)
1225 return player->GetBGAccessByLevel(bgTypeId);
1226
1227 if (!player->GetBGAccessByLevel(bgTypeId))
1228 {
1229 ClearGossipMenuFor(player);
1230 switch (bgTypeId)
1231 {
1232 case BATTLEGROUND_AV:
1233 SendGossipMenuFor(player, 7616, this);
1234 break;
1235 case BATTLEGROUND_WS:
1236 SendGossipMenuFor(player, 7599, this);
1237 break;
1238 case BATTLEGROUND_AB:
1239 SendGossipMenuFor(player, 7642, this);
1240 break;
1241 case BATTLEGROUND_EY:
1242 case BATTLEGROUND_NA:
1243 case BATTLEGROUND_BE:
1244 case BATTLEGROUND_AA:
1245 case BATTLEGROUND_RL:
1246 case BATTLEGROUND_SA:
1247 case BATTLEGROUND_DS:
1248 case BATTLEGROUND_RV:
1249 SendGossipMenuFor(player, 10024, this);
1250 break;
1251 default:
1252 break;
1253 }
1254 return false;
1255 }
1256 return true;
1257}
#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:3737
@ BATTLEGROUND_AA
Definition SharedDefines.h:3744
@ BATTLEGROUND_WS
Definition SharedDefines.h:3740
@ BATTLEGROUND_EY
Definition SharedDefines.h:3745
@ BATTLEGROUND_AV
Definition SharedDefines.h:3739
@ BATTLEGROUND_BE
Definition SharedDefines.h:3743
@ BATTLEGROUND_RV
Definition SharedDefines.h:3749
@ BATTLEGROUND_NA
Definition SharedDefines.h:3742
@ BATTLEGROUND_DS
Definition SharedDefines.h:3748
@ BATTLEGROUND_SA
Definition SharedDefines.h:3747
@ BATTLEGROUND_AB
Definition SharedDefines.h:3741
@ BATTLEGROUND_RL
Definition SharedDefines.h:3746
bool GetBGAccessByLevel(BattlegroundTypeId bgTypeId) const
Definition Player.cpp:12275
bool IsBattleMaster() const
Definition Unit.h:809

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().

◆ IsCivilian()

◆ IsCombatMovementAllowed()

◆ IsDamageEnoughForLootingAndReward()

◆ IsDungeonBoss()

◆ isElite()

bool Creature::isElite ( ) const
inline
115 {
116 if (IsPet())
117 return false;
118
120 return rank != CREATURE_ELITE_NORMAL && rank != CREATURE_ELITE_RARE;
121 }
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().

◆ IsEngaged()

◆ IsEvadingAttacks()

bool Creature::IsEvadingAttacks ( ) const
inline

◆ IsFormationLeader()

bool Creature::IsFormationLeader ( ) const
392{
393 if (!m_formation)
394 return false;
395
396 return m_formation->GetLeader() == this;
397}
Creature * GetLeader() const
Definition CreatureGroups.h:99

References CreatureGroup::GetLeader(), and m_formation.

Referenced by WaypointMovementGenerator< Creature >::StartMove().

◆ IsFormationLeaderMoveAllowed()

bool Creature::IsFormationLeaderMoveAllowed ( ) const
411{
412 if (!m_formation)
413 return true;
414
416}
bool CanLeaderStartMoving() const
Definition CreatureGroups.cpp:371

References CreatureGroup::CanLeaderStartMoving(), and m_formation.

Referenced by WaypointMovementGenerator< Creature >::StartMove().

◆ IsFreeToMove()

bool Creature::IsFreeToMove ( )
930{
932 // Do not reposition ourself when we are not allowed to move
934 (GetMotionMaster()->GetCurrentMovementGeneratorType() != CHASE_MOTION_TYPE ||
935 moveFlags & MOVEMENTFLAG_SPLINE_ENABLED))
936 {
937 return false;
938 }
939
940 return true;
941}
@ MOVEMENTFLAG_SPLINE_ENABLED
Definition UnitDefines.h:399
bool IsCombatMovementAllowed() const
Definition Creature.h:450
bool IsMovementPreventedByCasting() const override
Definition Creature.cpp:3558
bool CanFreeMove() const
Definition Unit.h:1723
bool isMoving() const
Definition Unit.h:1708
MovementInfo m_movementInfo
Definition Object.h:698
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:61

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.

2214{
2215 if (!spellInfo)
2216 return false;
2217
2218 if (spellInfo->HasAttribute(SPELL_ATTR0_CU_BYPASS_MECHANIC_IMMUNITY))
2219 {
2220 return false;
2221 }
2222
2223 // Xinef: this should exclude self casts...
2224 // Spells that don't have effectMechanics.
2225 if (spellInfo->Mechanic > MECHANIC_NONE && HasMechanicTemplateImmunity(UI64LIT(1) << spellInfo->Mechanic))
2226 return true;
2227
2228 // The above helper uses the creature_immunities table rather than a
2229 // simple mask on creature_template. We can't rely on the old mask field
2230 // (which has been removed) because it no longer exists and did not always
2231 // match the runtime immunity set stored in m_spellImmune.
2232 bool immunedToAllEffects = true;
2233 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2234 if (spellInfo->Effects[i].IsEffect() && !IsImmunedToSpellEffect(spellInfo, i))
2235 {
2236 immunedToAllEffects = false;
2237 break;
2238 }
2239 if (immunedToAllEffects)
2240 return true;
2241
2242 return Unit::IsImmunedToSpell(spellInfo, spell);
2243}
#define MAX_SPELL_EFFECTS
Definition DBCStructure.h:1637
#define UI64LIT(N)
Definition Define.h:97
@ MECHANIC_NONE
Definition SharedDefines.h:1313
@ SPELL_ATTR0_CU_BYPASS_MECHANIC_IMMUNITY
Definition SpellInfo.h:209
bool HasMechanicTemplateImmunity(uint64 mask) const
Definition Creature.cpp:2162
bool IsImmunedToSpellEffect(SpellInfo const *spellInfo, uint32 index, Unit const *caster=nullptr) const override
Definition Creature.cpp:2245
virtual bool IsImmunedToSpell(SpellInfo const *spellInfo, Spell const *spell=nullptr)
Definition Unit.cpp:9982

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

◆ IsImmunedToSpellEffect()

bool Creature::IsImmunedToSpellEffect ( SpellInfo const *  spellInfo,
uint32  index,
Unit const *  caster = nullptr 
) const
overridevirtual

Reimplemented from Unit.

Reimplemented in Totem.

2246{
2247 // Xinef: this should exclude self casts...
2248 if (spellInfo->Effects[index].Mechanic > MECHANIC_NONE && HasMechanicTemplateImmunity(UI64LIT(1) << spellInfo->Effects[index].Mechanic))
2249 return true;
2250
2251 if (GetCreatureTemplate()->type == CREATURE_TYPE_MECHANICAL && spellInfo->Effects[index].Effect == SPELL_EFFECT_HEAL)
2252 return true;
2253
2254 return Unit::IsImmunedToSpellEffect(spellInfo, index, caster);
2255}
@ SPELL_EFFECT_HEAL
Definition SharedDefines.h:776
@ CREATURE_TYPE_MECHANICAL
Definition SharedDefines.h:2632
virtual bool IsImmunedToSpellEffect(SpellInfo const *spellInfo, uint32 index, Unit const *caster=nullptr) const
Definition Unit.cpp:10076

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

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

◆ IsImmuneToKnockback()

bool Creature::IsImmuneToKnockback ( ) const
3215{
3216 if (GetOwnerGUID().IsPlayer())
3217 return false;
3218
3219 CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(GetEntry());
3221}
@ CREATURE_FLAG_EXTRA_IMMUNITY_KNOCKBACK
Definition CreatureData.h:76

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

◆ IsInEvadeMode()

bool Creature::IsInEvadeMode ( ) const
inline
@ UNIT_STATE_EVADE
Definition UnitDefines.h:194

References Unit::HasUnitState(), and UNIT_STATE_EVADE.

Referenced by CreatureAI::_EnterEvadeMode(), npc_escortAI::AssistPlayerInCombatAgainst(), Unit::Attack(), CanAssistTo(), CanCreatureAttack(), boss_sindragosa::boss_sindragosaAI::DamageTaken(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::DoAction(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::DoAction(), Spell::DoSpellHitOnUnit(), CreatureAI::DoZoneInCombat(), npc_pos_freed_slave::npc_pos_freed_slaveAI::EnterEvadeMode(), npc_pet_mage_mirror_image::EnterEvadeMode(), Vehicle::InstallAccessory(), IsEvadingAttacks(), CreatureAI::JustExitedCombat(), boss_professor_putricide::boss_professor_putricideAI::JustSummoned(), boss_rotface::boss_rotfaceAI::JustSummoned(), boss_the_lich_king::boss_the_lich_kingAI::KilledUnit(), CreatureGroup::MemberEvaded(), SmartAI::OnCharmed(), Spell::prepare(), boss_krik_thir::boss_krik_thirAI::Reset(), boss_drakkari_colossus::boss_drakkari_colossusAI::Reset(), SetCannotReachTarget(), instance_scarlet_monastery::instance_scarlet_monastery_InstanceMapScript::SetData(), npc_tirion_fordring_tft::npc_tirion_fordringAI::sGossipSelect(), boss_prince_keleseth_icc::boss_prince_kelesethAI::SpellHit(), boss_prince_taldaram_icc::boss_prince_taldaramAI::SpellHit(), boss_prince_valanar_icc::boss_prince_valanarAI::SpellHit(), Update(), SimpleCharmedAI::UpdateAI(), npc_millhouse_manastorm::npc_millhouse_manastormAI::UpdateAI(), npc_simone::npc_simoneAI::UpdateAI(), and Player::UpdateCharmedAI().

◆ IsInvisibleDueToDespawn()

bool Creature::IsInvisibleDueToDespawn ( ) const
overrideprotectedvirtual

Reimplemented from WorldObject.

1837{
1839 return true;
1840
1841 if (IsAlive() || isDying() || m_corpseRemoveTime > GameTime::GetGameTime().count())
1842 return false;
1843
1844 return true;
1845}
bool isDying() const
Definition Unit.h:1794
virtual bool IsInvisibleDueToDespawn() const
Definition Object.h:763

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

◆ IsLootRewardDisabled()

bool Creature::IsLootRewardDisabled ( ) const
inline
379{ 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.

3559{
3561 // first check if currently a movement allowed channel is active and we're not casting
3562 if (spell && spell->getState() != SPELL_STATE_FINISHED && spell->IsChannelActive() && spell->GetSpellInfo()->IsActionAllowedChannel())
3563 {
3564 return false;
3565 }
3566
3567 if (HasSpellFocus())
3568 {
3569 return true;
3570 }
3571
3573 {
3574 return true;
3575 }
3576
3577 return false;
3578}
@ SPELL_STATE_FINISHED
Definition Spell.h:239
@ UNIT_STATE_CASTING
Definition UnitDefines.h:188
@ CURRENT_CHANNELED_SPELL
Definition Unit.h:557
bool HasSpellFocus(Spell const *focusSpell=nullptr) const
Definition Creature.cpp:3492
bool IsActionAllowedChannel() const
Definition SpellInfo.cpp:1293
SpellInfo const * GetSpellInfo() const
Definition Spell.h:593
uint32 getState() const
Definition Spell.h:496
bool IsChannelActive() const
Definition Spell.h:571
Spell * m_currentSpells[CURRENT_MAX_SPELL]
Definition Unit.h:2164

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 FormationMovementGenerator::DoInitialize(), FormationMovementGenerator::DoUpdate(), RandomMovementGenerator< T >::DoUpdate(), ChaseMovementGenerator< T >::DoUpdate(), FollowMovementGenerator< T >::DoUpdate(), WaypointMovementGenerator< Creature >::IsAllowedToMove(), and IsFreeToMove().

◆ IsNotReachableAndNeedRegen()

bool Creature::IsNotReachableAndNeedRegen ( ) const
3605{
3607}
bool IsEvadeRegen() const
Definition CombatManager.h:122

References CanNotReachTarget(), Unit::GetCombatManager(), and CombatManager::IsEvadeRegen().

Referenced by Update().

◆ IsRacialLeader()

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

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
88{ return GetMovementTemplate().IsRooted(); }
bool IsRooted() const
Definition CreatureData.h:146

References GetMovementTemplate(), and CreatureMovementData::IsRooted().

Referenced by SmartScript::ProcessAction(), and UpdateEntry().

◆ IsSpellProhibited()

bool Creature::IsSpellProhibited ( SpellSchoolMask  idSchoolMask) const
2877{
2878 for (uint8 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i)
2879 {
2880 if (idSchoolMask & (1 << i))
2881 {
2883 {
2884 return true;
2885 }
2886 }
2887 }
2888
2889 return false;
2890}

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
1344{
1345 if (player->GetGUID() == m_lootRecipient)
1346 return true;
1347
1348 Group const* playerGroup = player->GetGroup();
1349 if (!playerGroup || playerGroup != GetLootRecipientGroup()) // if we dont have a group we arent the recipient
1350 return false; // if creature doesnt have group bound it means it was solo killed by someone else
1351
1352 return true;
1353}
Group * GetLootRecipientGroup() const
Definition Creature.cpp:1275
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.

3826{
3828 return true;
3829
3830 if (GetMap()->isCellMarked(GetCurrentCell().GetCellCoord().GetId()))
3831 return true;
3832
3833 if (IsInCombat())
3834 return true;
3835
3836 if (!GetObjectVisibilityContainer().GetVisiblePlayersMap().empty())
3837 return true;
3838
3839 if (ToTempSummon())
3840 return true;
3841
3842 if (GetMotionMaster()->HasMovementGeneratorType(WAYPOINT_MOTION_TYPE))
3843 return true;
3844
3846 return true;
3847
3848 if (m_formation && m_formation->GetLeader() != this)
3849 return true;
3850
3851 return false;
3852}
Cell const & GetCurrentCell() const
Definition Object.h:422
virtual bool IsUpdateNeeded()
Definition Object.cpp:3188
ObjectVisibilityContainer & GetObjectVisibilityContainer()
Definition Object.h:731
uint32 GetId(std::string const &username)
Definition AccountMgr.cpp:236

References MovableMapObject::GetCurrentCell(), CreatureGroup::GetLeader(), WorldObject::GetMap(), Unit::GetMotionMaster(), WorldObject::GetObjectVisibilityContainer(), Unit::HasUnitState(), Unit::IsInCombat(), WorldObject::IsUpdateNeeded(), m_formation, Unit::ToTempSummon(), UNIT_STATE_EVADE, and WAYPOINT_MOTION_TYPE.

◆ isVendorWithIconSpeak()

bool Creature::isVendorWithIconSpeak ( ) const
1650{
1652}
@ UNIT_NPC_FLAG_VENDOR
Definition UnitDefines.h:329
uint32 npcflag
Definition CreatureData.h:383
std::string IconName
Definition CreatureData.h:194

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 
)
1655{
1656 if (!allowDuplicate)
1657 {
1658 // If an alive instance of this spawnId is already found, skip creation
1659 // If only dead instance(s) exist, despawn them and spawn a new (maybe also dead) version
1660 const auto creatureBounds = map->GetCreatureBySpawnIdStore().equal_range(spawnId);
1661 std::vector <Creature*> despawnList;
1662
1663 if (creatureBounds.first != creatureBounds.second)
1664 {
1665 for (auto itr = creatureBounds.first; itr != creatureBounds.second; ++itr)
1666 {
1667 if (itr->second->IsAlive())
1668 {
1669 LOG_DEBUG("maps", "Would have spawned {} but {} already exists", spawnId, creatureBounds.first->second->GetGUID().ToString());
1670 return false;
1671 }
1672 else
1673 {
1674 despawnList.push_back(itr->second);
1675 LOG_DEBUG("maps", "Despawned dead instance of spawn {} ({})", spawnId, itr->second->GetGUID().ToString());
1676 }
1677 }
1678
1679 for (Creature* despawnCreature : despawnList)
1680 {
1681 despawnCreature->AddObjectToRemoveList();
1682 }
1683 }
1684 }
1685
1686 CreatureData const* data = sObjectMgr->GetCreatureData(spawnId);
1687 if (!data)
1688 {
1689 LOG_ERROR("sql.sql", "Creature (SpawnId: {}) not found in table `creature`, can't load. ", spawnId);
1690 return false;
1691 }
1692
1693 // xinef: this has to be assigned before Create function, properly loads equipment id from DB
1694 m_creatureData = data;
1695 m_spawnId = spawnId;
1696
1697 // Add to world
1698 uint32 entry = GetRandomId(data->id1, data->id2, data->id3);
1699
1700 if (!Create(map->GenerateLowGuid<HighGuid::Unit>(), map, data->phaseMask, entry, 0, data->posX, data->posY, data->posZ, data->orientation, data))
1701 return false;
1702
1703 //We should set first home position, because then AI calls home movement
1704 SetHomePosition(data->posX, data->posY, data->posZ, data->orientation);
1705
1707
1710
1712 if (m_respawnTime) // respawn on Update
1713 {
1715 if (CanFly())
1716 {
1717 float tz = map->GetHeight(GetPhaseMask(), data->posX, data->posY, data->posZ, true, MAX_FALL_DISTANCE);
1718 if (data->posZ - tz > 0.1f && Acore::IsValidMapCoord(tz))
1719 {
1720 Relocate(data->posX, data->posY, tz);
1721 }
1722 }
1723 }
1724
1725 uint32 curhealth;
1726
1727 if (!m_regenHealth)
1728 {
1729 curhealth = data->curhealth;
1730 if (curhealth)
1731 {
1732 curhealth = uint32(curhealth * _GetHealthMod(GetCreatureTemplate()->rank));
1733 if (curhealth < 1)
1734 curhealth = 1;
1735 }
1736 SetPower(POWER_MANA, data->curmana);
1737 }
1738 else
1739 {
1740 curhealth = GetMaxHealth();
1742 }
1743
1744 SetHealth(m_deathState == DeathState::Alive ? curhealth : 0);
1745
1746 // checked at creature_template loading
1748
1749 if (addToMap && !GetMap()->AddToMap(this))
1750 return false;
1751 return true;
1752}
#define MAX_FALL_DISTANCE
Definition GridTerrainData.h:28
@ POWER_MANA
Definition SharedDefines.h:257
static float _GetHealthMod(int32 Rank)
Definition Creature.cpp:1535
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:1126
uint32 GetRandomId(uint32 id1, uint32 id2, uint32 id3)
Definition Creature.cpp:3663
float GetHeight(float x, float y, float z, bool checkVMap=true, float maxSearchDist=DEFAULT_HEIGHT_SEARCH) const
Definition Map.cpp:1144
time_t GetCreatureRespawnTime(ObjectGuid::LowType dbGuid) const
Definition Map.h:404
ObjectGuid::LowType GenerateLowGuid()
Definition Map.h:480
void SetPower(Powers power, uint32 val, bool withPowerUpdate=true, bool fromRegenerate=false)
Definition Unit.cpp:12403
uint32 GetMaxHealth() const
Definition Unit.h:1109
DeathState m_deathState
Definition Unit.h:2153
void SetHealth(uint32 val)
Definition Unit.cpp:12315
uint32 GetMaxPower(Powers power) const
Definition Unit.h:1136
bool IsValidMapCoord(float c)
Definition GridDefines.h:210
float wander_distance
Definition CreatureData.h:378
uint32 spawntimesecs
Definition CreatureData.h:377
uint8 movementType
Definition CreatureData.h:382
uint32 id2
Definition CreatureData.h:373
uint32 curhealth
Definition CreatureData.h:380
uint32 curmana
Definition CreatureData.h:381
uint32 id3
Definition CreatureData.h:374
uint32 id1
Definition CreatureData.h:372
float posX
Definition SpawnData.h:66
float posY
Definition SpawnData.h:67
uint32 phaseMask
Definition SpawnData.h:65
float orientation
Definition SpawnData.h:69
float posZ
Definition SpawnData.h:68

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, SpawnData::orientation, SpawnData::phaseMask, SpawnData::posX, SpawnData::posY, SpawnData::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(), npc_commandscript::HandleNpcLoadCommand(), 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.

2681{
2682 CreatureAddon const* cainfo = GetCreatureAddon();
2683 if (!cainfo)
2684 return false;
2685
2686 if (cainfo->mount != 0)
2687 Mount(cainfo->mount);
2688
2689 if (cainfo->bytes1 != 0)
2690 {
2691 // 0 StandState
2692 // 1 FreeTalentPoints Pet only, so always 0 for default creature
2693 // 2 StandFlags
2694 // 3 StandMiscFlags
2695
2697 //SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_PET_TALENTS, uint8((cainfo->bytes1 >> 8) & 0xFF));
2701
2707 if (CanHover())
2709 }
2710
2711 if (cainfo->bytes2 != 0)
2712 {
2713 // 0 SheathState
2714 // 1 Bytes2Flags
2715 // 2 UnitRename Pet only, so always 0 for default creature
2716 // 3 ShapeshiftForm Must be determined/set by shapeshift spell/aura
2717
2718 SetByteValue(UNIT_FIELD_BYTES_2, 0, uint8(cainfo->bytes2 & 0xFF));
2719 //SetByteValue(UNIT_FIELD_BYTES_2, 1, uint8((cainfo->bytes2 >> 8) & 0xFF));
2720 //SetByteValue(UNIT_FIELD_BYTES_2, 2, uint8((cainfo->bytes2 >> 16) & 0xFF));
2722 //SetByteValue(UNIT_FIELD_BYTES_2, 3, uint8((cainfo->bytes2 >> 24) & 0xFF));
2724 }
2725
2727
2728 // Check if visibility distance different
2730 {
2732 }
2733
2734 //Load Path
2735 if (cainfo->path_id != 0)
2736 m_path_id = cainfo->path_id;
2737
2738 if (!cainfo->auras.empty())
2739 {
2740 for (std::vector<uint32>::const_iterator itr = cainfo->auras.begin(); itr != cainfo->auras.end(); ++itr)
2741 {
2742 SpellInfo const* AdditionalSpellInfo = sSpellMgr->GetSpellInfo(*itr);
2743 if (!AdditionalSpellInfo)
2744 {
2745 LOG_ERROR("sql.sql", "Creature ({}) has wrong spell {} defined in `auras` field.", GetGUID().ToString(), *itr);
2746 continue;
2747 }
2748
2749 // skip already applied aura
2750 if (HasAura(*itr))
2751 {
2752 if (!reload)
2753 LOG_ERROR("sql.sql", "Creature ({}) has duplicate aura (spell {}) in `auras` field.", GetGUID().ToString(), *itr);
2754
2755 continue;
2756 }
2757
2758 AddAura(*itr, this);
2759 LOG_DEBUG("entities.unit", "Spell: {} added to creature ({})", *itr, GetGUID().ToString());
2760 }
2761 }
2762
2763 return true;
2764}
@ MOVEMENTFLAG_HOVER
Definition UnitDefines.h:402
@ UNIT_BYTES_1_OFFSET_ANIM_TIER
Definition UnitDefines.h:29
@ UNIT_BYTES_1_OFFSET_PET_TALENTS
Definition UnitDefines.h:27
@ UNIT_BYTES_1_OFFSET_STAND_STATE
Definition UnitDefines.h:26
@ UNIT_BYTES_1_OFFSET_VIS_FLAG
Definition UnitDefines.h:28
@ 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:87
CreatureAddon const * GetCreatureAddon() const
Definition Creature.cpp:2667
Aura * AddAura(uint32 spellId, Unit *target)
Definition Unit.cpp:15088
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition Unit.cpp:5982
void Mount(uint32 mount, uint32 vehicleId=0, uint32 creatureEntry=0)
Definition Unit.cpp:10479
void AddUnitMovementFlag(uint32 f)
Definition Unit.h:772
void SetUInt32Value(uint16 index, uint32 value)
Definition Unit.cpp:17323
void SetVisibilityDistanceOverride(VisibilityDistanceType type)
Definition Object.cpp:1108
std::vector< uint32 > auras
Definition CreatureData.h:437
uint32 mount
Definition CreatureData.h:433
uint32 emote
Definition CreatureData.h:436
uint32 path_id
Definition CreatureData.h:432
VisibilityDistanceType visibilityDistanceType
Definition CreatureData.h:438
uint32 bytes1
Definition CreatureData.h:434
uint32 bytes2
Definition CreatureData.h:435

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::EnterEvadeMode(), npc_pos_freed_slave::npc_pos_freed_slaveAI::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 
)
1761{
1762 if (id == 0)
1763 {
1764 if (force)
1765 {
1766 for (uint8 i = 0; i < MAX_EQUIPMENT_ITEMS; ++i)
1768 m_equipmentId = 0;
1769 }
1770 return;
1771 }
1772
1773 EquipmentInfo const* einfo = sObjectMgr->GetEquipmentInfo(GetEntry(), id);
1774 if (!einfo)
1775 return;
1776
1777 m_equipmentId = id;
1778 for (uint8 i = 0; i < 3; ++i)
1780}
#define MAX_EQUIPMENT_ITEMS
Definition CreatureData.h:36
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
222{ return LoadCreatureFromDB(guid, map, false, allowDuplicate); }
bool LoadCreatureFromDB(ObjectGuid::LowType guid, Map *map, bool addToMap=true, bool allowDuplicate=false)
Definition Creature.cpp:1654

References LoadCreatureFromDB().

Referenced by GridObjectLoader::LoadCreatures().

◆ LoadPath()

◆ LoadSparringPct()

void Creature::LoadSparringPct ( )
2767{
2768 ObjectGuid::LowType spawnId = GetSpawnId();
2769 auto const& sparringData = sObjectMgr->GetSparringData();
2770
2771 auto itr = sparringData.find(spawnId);
2772 if (itr != sparringData.end() && !itr->second.empty())
2773 {
2774 _sparringPct = itr->second[0];
2775 }
2776}
uint32 LowType
Definition ObjectGuid.h:122

References _sparringPct, GetSpawnId(), and sObjectMgr.

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

◆ LoadTemplateImmunities()

void Creature::LoadTemplateImmunities ( int32  creatureImmunitiesId)
2175{
2176 // uint32 max used for "spell id", the immunity system will not perform SpellInfo checks against invalid spells
2177 // used so we know which immunities were loaded from template
2178 static uint32 constexpr placeholderSpellId = std::numeric_limits<uint32>::max();
2179
2180 auto applyCreatureImmunities = [this](CreatureImmunities const* immunities, bool apply)
2181 {
2182 if (!immunities)
2183 return;
2184 for (std::size_t i = 0; i < immunities->School.size(); ++i)
2185 if (immunities->School[i])
2186 ApplySpellImmune(placeholderSpellId, IMMUNITY_SCHOOL, 1 << i, apply);
2187 for (std::size_t i = 0; i < immunities->DispelType.size(); ++i)
2188 if (immunities->DispelType[i])
2189 ApplySpellImmune(placeholderSpellId, IMMUNITY_DISPEL, i, apply);
2190 for (std::size_t i = 0; i < immunities->Mechanic.size(); ++i)
2191 if (immunities->Mechanic[i])
2192 ApplySpellImmune(placeholderSpellId, IMMUNITY_MECHANIC, i, apply);
2193 for (SpellEffects effect : immunities->Effect)
2194 ApplySpellImmune(placeholderSpellId, IMMUNITY_EFFECT, effect, apply);
2195 for (AuraType aura : immunities->Aura)
2196 ApplySpellImmune(placeholderSpellId, IMMUNITY_STATE, aura, apply);
2197 };
2198
2199 // unapply old template if any
2200 if (CreatureImmunities const* oldImmunities = sSpellMgr->GetCreatureImmunities(_creatureImmunitiesId))
2201 applyCreatureImmunities(oldImmunities, false);
2202
2203 // apply requested immunities
2204 if (CreatureImmunities const* newImmunities = sSpellMgr->GetCreatureImmunities(creatureImmunitiesId))
2205 {
2206 _creatureImmunitiesId = creatureImmunitiesId;
2207 applyCreatureImmunities(newImmunities, true);
2208 }
2209 else
2211}
SpellEffects
Definition SharedDefines.h:766
@ IMMUNITY_STATE
Definition SharedDefines.h:1401
@ IMMUNITY_EFFECT
Definition SharedDefines.h:1400
@ IMMUNITY_MECHANIC
Definition SharedDefines.h:1405
@ IMMUNITY_SCHOOL
Definition SharedDefines.h:1402
@ IMMUNITY_DISPEL
Definition SharedDefines.h:1404
AuraType
Definition SpellAuraDefines.h:62
Definition SpellAuras.h:87
void ApplySpellImmune(uint32 spellId, uint32 op, uint32 type, bool apply, SpellImmuneBlockType blockType=SPELL_BLOCK_TYPE_ALL)
Definition Unit.cpp:10437
void apply(T *val)
Definition ByteConverter.h:40
std::bitset< MAX_MECHANIC > Mechanic
Definition SpellMgr.h:567
std::bitset< MAX_SPELL_SCHOOL > School
Definition SpellMgr.h:565
std::bitset< DISPEL_MAX > DispelType
Definition SpellMgr.h:566

References _creatureImmunitiesId, Unit::ApplySpellImmune(), CreatureImmunities::Aura, CreatureImmunities::DispelType, CreatureImmunities::Effect, IMMUNITY_DISPEL, IMMUNITY_EFFECT, IMMUNITY_MECHANIC, IMMUNITY_SCHOOL, IMMUNITY_STATE, CreatureImmunities::Mechanic, CreatureImmunities::School, and sSpellMgr.

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

◆ LowerPlayerDamageReq()

void Creature::LowerPlayerDamageReq ( uint32  unDamage,
bool  damagedByPlayer = true 
)

◆ ModifyThreatPercentTemp()

void Creature::ModifyThreatPercentTemp ( Unit victim,
int32  percent,
Milliseconds  duration 
)
3741{
3742 if (victim)
3743 {
3744 float currentThreat = GetThreatMgr().GetThreat(victim);
3745
3746 if (percent != 0.0f)
3747 {
3748 GetThreatMgr().ModifyThreatByPercent(victim, percent);
3749 }
3750
3751 TemporaryThreatModifierEvent* pEvent = new TemporaryThreatModifierEvent(*this, victim->GetGUID(), currentThreat);
3752 m_Events.AddEventAtOffset(pEvent, duration);
3753 }
3754}
Definition Creature.h:584
void ModifyThreatByPercent(Unit *target, int32 percent)
Definition ThreatManager.h:150
float GetThreat(Unit const *who, bool includeOffline=false) const
Definition ThreatManager.cpp:286

References EventProcessor::AddEventAtOffset(), Object::GetGUID(), ThreatManager::GetThreat(), Unit::GetThreatMgr(), WorldObject::m_Events, and ThreatManager::ModifyThreatByPercent().

◆ Motion_Initialize()

void Creature::Motion_Initialize ( )
1100{
1101 if (!m_formation)
1103 else if (m_formation->GetLeader() == this)
1104 {
1105 m_formation->FormationReset(false, true);
1107 }
1108 else if (m_formation->IsFormed())
1109 {
1110 // If the leader is already moving, start following immediately
1111 // instead of waiting for the next waypoint signal.
1112 if (Creature* leader = m_formation->GetLeader())
1113 {
1114 if (leader->IsAlive() && !leader->movespline->Finalized())
1115 {
1117 return;
1118 }
1119 }
1120 GetMotionMaster()->MoveIdle(); //wait the order of leader
1121 }
1122 else
1124}
void FormationReset(bool dismiss, bool initMotionMaster)
Definition CreatureGroups.cpp:324
bool IsFormed() const
Definition CreatureGroups.h:103
void LeaderStartedMoving()
Definition CreatureGroups.cpp:348
void Initialize()
Definition MotionMaster.cpp:75
void MoveIdle()
Definition MotionMaster.cpp:234

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

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

◆ ProhibitSpellSchool()

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

Reimplemented from Unit.

2866{
2867 for (uint8 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i)
2868 {
2869 if (idSchoolMask & (1 << i))
2870 {
2871 m_ProhibitSchoolTime[i] = GameTime::GetGameTimeMS().count() + unTimeMs;
2872 }
2873 }
2874}

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

◆ reachWithSpellAttack()

SpellInfo const * Creature::reachWithSpellAttack ( Unit victim)
2258{
2259 if (!victim)
2260 return nullptr;
2261
2262 for (uint32 i = 0; i < MAX_CREATURE_SPELLS; ++i)
2263 {
2264 if (!m_spells[i])
2265 continue;
2266 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(m_spells[i]);
2267 if (!spellInfo)
2268 {
2269 LOG_ERROR("entities.unit", "WORLD: unknown spell id {}", m_spells[i]);
2270 continue;
2271 }
2272
2273 bool bcontinue = true;
2274 for (uint32 j = 0; j < MAX_SPELL_EFFECTS; j++)
2275 {
2276 if ((spellInfo->Effects[j].Effect == SPELL_EFFECT_SCHOOL_DAMAGE) ||
2277 (spellInfo->Effects[j].Effect == SPELL_EFFECT_INSTAKILL) ||
2278 (spellInfo->Effects[j].Effect == SPELL_EFFECT_ENVIRONMENTAL_DAMAGE) ||
2279 (spellInfo->Effects[j].Effect == SPELL_EFFECT_HEALTH_LEECH)
2280 )
2281 {
2282 bcontinue = false;
2283 break;
2284 }
2285 }
2286 if (bcontinue)
2287 continue;
2288
2289 if (spellInfo->ManaCost > GetPower(POWER_MANA))
2290 continue;
2291 float range = spellInfo->GetMaxRange(false);
2292 float minrange = spellInfo->GetMinRange(false);
2293 float dist = GetDistance(victim);
2294 if (dist > range || dist < minrange)
2295 continue;
2297 continue;
2299 continue;
2300 return spellInfo;
2301 }
2302 return nullptr;
2303}
@ SPELL_EFFECT_HEALTH_LEECH
Definition SharedDefines.h:775
@ SPELL_EFFECT_ENVIRONMENTAL_DAMAGE
Definition SharedDefines.h:773
@ SPELL_EFFECT_SCHOOL_DAMAGE
Definition SharedDefines.h:768
@ SPELL_EFFECT_INSTAKILL
Definition SharedDefines.h:767
@ SPELL_PREVENTION_TYPE_SILENCE
Definition SharedDefines.h:1560
@ SPELL_PREVENTION_TYPE_PACIFY
Definition SharedDefines.h:1561
@ UNIT_FLAG_PACIFIED
Definition UnitDefines.h:274
uint32 PreventionType
Definition SpellInfo.h:414
float GetMinRange(bool positive=false) const
Definition SpellInfo.cpp:2714
std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > Effects
Definition SpellInfo.h:417
float GetMaxRange(bool positive=false, Unit *caster=nullptr, Spell *spell=nullptr) const
Definition SpellInfo.cpp:2723
uint32 ManaCost
Definition SpellInfo.h:387
float GetDistance(WorldObject const *obj) const
Definition Object.cpp:1295

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)
2306{
2307 if (!victim)
2308 return nullptr;
2309
2310 for (uint32 i = 0; i < MAX_CREATURE_SPELLS; ++i)
2311 {
2312 if (!m_spells[i])
2313 continue;
2314 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(m_spells[i]);
2315 if (!spellInfo)
2316 {
2317 LOG_ERROR("entities.unit", "WORLD: unknown spell id {}", m_spells[i]);
2318 continue;
2319 }
2320
2321 bool bcontinue = true;
2322 for (uint32 j = 0; j < MAX_SPELL_EFFECTS; j++)
2323 {
2324 if ((spellInfo->Effects[j].Effect == SPELL_EFFECT_HEAL))
2325 {
2326 bcontinue = false;
2327 break;
2328 }
2329 }
2330 if (bcontinue)
2331 continue;
2332
2333 if (spellInfo->ManaCost > GetPower(POWER_MANA))
2334 continue;
2335
2336 float range = spellInfo->GetMaxRange(true);
2337 float minrange = spellInfo->GetMinRange(true);
2338 float dist = GetDistance(victim);
2339
2340 if (dist > range || dist < minrange)
2341 continue;
2343 continue;
2345 continue;
2346 return spellInfo;
2347 }
2348 return nullptr;
2349}

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)
3296{
3297 if (!_isMissingSwimmingFlagOutOfCombat || recheck)
3299
3300 // Check if the creature has UNIT_FLAG_SWIMMING and add it if it's missing
3301 // Creatures must be able to chase a target in water if they can enter water
3304}
@ UNIT_FLAG_SWIMMING
Definition UnitDefines.h:272
bool CanEnterWater() const override
Definition Creature.cpp:3287

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

Referenced by AtEngage().

◆ Regenerate()

void Creature::Regenerate ( Powers  power)
protected
944{
945 uint32 curValue = GetPower(power);
946 uint32 maxValue = GetMaxPower(power);
947
948 // Xinef: implement power regeneration flag
950 return;
951
952 if (!m_regenPower)
953 {
954 return;
955 }
956
957 if (curValue >= maxValue)
958 return;
959
960 float addvalue = 0.0f;
961
962 switch (power)
963 {
964 case POWER_FOCUS:
965 {
966 // For hunter pets.
967 addvalue = 24 * sWorld->getRate(RATE_POWER_FOCUS);
968 break;
969 }
970 case POWER_ENERGY:
971 {
972 // For deathknight's ghoul.
973 addvalue = 20;
974 break;
975 }
976 case POWER_MANA:
977 {
978 // Combat and any controlled creature
980 {
982 {
983 addvalue = uint32((GetStat(STAT_SPIRIT) / (IsUnderLastManaUseEffect() ? 8.0f : 5.0f) + 17.0f));
984 }
985 else if (!IsUnderLastManaUseEffect())
986 {
987 float ManaIncreaseRate = sWorld->getRate(RATE_POWER_MANA);
988 float Spirit = GetStat(STAT_SPIRIT);
989
990 addvalue = uint32((Spirit / 5.0f + 17.0f) * ManaIncreaseRate);
991 }
992 }
993 else
994 addvalue = maxValue / 3;
995 break;
996 }
997 default:
998 return;
999 }
1000
1001 // Apply modifiers (if any).
1003
1005
1006 ModifyPower(power, int32(addvalue));
1007}
constexpr auto IN_MILLISECONDS
Definition Common.h:53
constexpr Milliseconds PET_FOCUS_REGEN_INTERVAL
Definition CreatureData.h:38
@ NPC_WATER_ELEMENTAL_TEMP
Definition PetDefines.h:105
@ NPC_IMP
Definition PetDefines.h:96
@ NPC_WATER_ELEMENTAL_PERM
Definition PetDefines.h:107
@ POWER_ENERGY
Definition SharedDefines.h:260
@ POWER_FOCUS
Definition SharedDefines.h:259
@ STAT_SPIRIT
Definition SharedDefines.h:250
@ 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:306
@ RATE_POWER_MANA
Definition WorldConfig.h:394
@ RATE_POWER_FOCUS
Definition WorldConfig.h:399
int32 ModifyPower(Powers power, int32 val, bool withPowerUpdate=true)
Definition Unit.cpp:10998
bool IsUnderLastManaUseEffect() const
Definition Unit.cpp:13618
float GetTotalAuraMultiplierByMiscValue(AuraType auratype, int32 misc_value) const
Definition Unit.cpp:6338
bool HasUnitFlag2(UnitFlags2 flags) const
Definition Unit.h:753
int32 GetTotalAuraModifierByMiscValue(AuraType auratype, int32 misc_value) const
Definition Unit.cpp:6328

References CREATURE_REGEN_INTERVAL, Unit::GetCharmerOrOwnerGUID(), Object::GetEntry(), Unit::GetMaxPower(), Unit::GetOwnerGUID(), Unit::GetPower(), Unit::GetStat(), Unit::GetTotalAuraModifierByMiscValue(), Unit::GetTotalAuraMultiplierByMiscValue(), 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
1010{
1011 if (!isRegeneratingHealth())
1012 return;
1013
1014 uint32 curValue = GetHealth();
1015 uint32 maxValue = GetMaxHealth();
1016
1017 if (curValue >= maxValue)
1018 return;
1019
1020 uint32 addvalue = 0;
1021
1022 // Not only pet, but any controlled creature
1023 // Xinef: fix polymorph rapid regen
1025 addvalue = maxValue / 3;
1026 else //if (GetCharmerOrOwnerGUID())
1027 {
1028 float HealthIncreaseRate = sWorld->getRate(RATE_HEALTH);
1029 float Spirit = GetStat(STAT_SPIRIT);
1030
1031 if (GetPower(POWER_MANA) > 0)
1032 addvalue = uint32(Spirit * 0.25 * HealthIncreaseRate);
1033 else
1034 addvalue = uint32(Spirit * 0.80 * HealthIncreaseRate);
1035 }
1036
1037 // Apply modifiers (if any).
1039
1041
1042 ModifyHealth(addvalue);
1043}
@ SPELL_AURA_MOD_HEALTH_REGEN_PERCENT
Definition SpellAuraDefines.h:151
@ SPELL_AURA_MOD_REGEN
Definition SpellAuraDefines.h:147
@ RATE_HEALTH
Definition WorldConfig.h:393
bool isRegeneratingHealth()
Definition Creature.h:325
int32 ModifyHealth(int32 val)
Definition Unit.cpp:10940
bool IsPolymorphed() const
Definition Unit.cpp:13104
uint32 GetHealth() const
Definition Unit.h:1108
float GetTotalAuraMultiplier(AuraType auratype) const
Definition Unit.cpp:6273

References CREATURE_REGEN_INTERVAL, Unit::GetCharmerOrOwnerGUID(), Unit::GetHealth(), Unit::GetMaxHealth(), Unit::GetPower(), Unit::GetStat(), Unit::GetTotalAuraModifier(), Unit::GetTotalAuraMultiplier(), 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)
3503{
3504 // focused to something else
3505 if (focusSpell != _focusSpell)
3506 return;
3507
3508 _focusSpell = nullptr;
3511
3512 if (focusSpell->GetSpellInfo()->HasAttribute(SPELL_ATTR5_AI_DOESNT_FACE_TARGET))
3514}
void Clear()
Definition ObjectGuid.h:138

References _focusSpell, _spellFocusTarget, ObjectGuid::Clear(), Unit::ClearUnitState(), Spell::GetSpellInfo(), 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 
)
419{
421 return;
422
426 if (!skipVisibility) // pussywizard
427 DestroyForVisiblePlayers(); // pussywizard: previous UpdateObjectVisibility()
428 loot.clear();
429 uint32 respawnDelay = m_respawnDelay;
430 if (IsAIEnabled)
431 AI()->CorpseRemoved(respawnDelay);
432
433 // Should get removed later, just keep "compatibility" with scripts
434 if (setSpawnTime)
435 {
436 m_respawnTime = GameTime::GetGameTime().count() + respawnDelay;
437 //SaveRespawnTime();
438 }
439
440 float x, y, z, o;
441 GetRespawnPosition(x, y, z, &o);
442 SetHomePosition(x, y, z, o);
443 SetPosition(x, y, z, o);
444
445 // xinef: relocate notifier
446 m_last_notify_position.Relocate(-5000.0f, -5000.0f, -5000.0f, 0.0f);
447
448 // pussywizard: if corpse was removed during falling then the falling will continue after respawn, so stop falling is such case
449 if (IsFalling())
450 StopMoving();
451}
virtual void CorpseRemoved(uint32 &)
== Triggered Actions Requested ==================
Definition CreatureAI.h:230
void GetRespawnPosition(float &x, float &y, float &z, float *ori=nullptr, float *dist=nullptr) const
Definition Creature.cpp:2988
void SetPosition(float x, float y, float z, float o)
Definition Creature.cpp:3197
DeathState getDeathState()
Definition Unit.h:1790
void StopMoving()
Definition Unit.cpp:12997
Position m_last_notify_position
Definition Unit.h:2107
void RemoveAllAuras()
Definition Unit.cpp:5580
bool IsFalling() const
Definition Unit.cpp:15894
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, Pet, and TestCreature.

338{
339 if (IsInWorld())
340 {
341 sScriptMgr->OnCreatureRemoveWorld(this);
342
343 if (GetZoneScript())
345
346 if (m_formation)
347 sFormationMgr->RemoveCreatureFromGroup(m_formation, this);
348
349 if (Transport* transport = GetTransport())
350 transport->RemovePassenger(this, true);
351
353
354 if (m_spawnId)
355 Acore::Containers::MultimapErasePair(GetMap()->GetCreatureBySpawnIdStore(), m_spawnId, this);
356
358 }
359}
#define sFormationMgr
Definition CreatureGroups.h:130
Definition Transport.h:30
bool Remove(KEY_TYPE const &handle)
Definition TypeContainer.h:183
void RemoveFromWorld() override
Definition Unit.cpp:12519
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
247{ m_LootMode &= ~lootMode; }

References m_LootMode.

Referenced by boss_yoggsaron::boss_yoggsaron().

◆ 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.
1988{
1989 if (force)
1990 {
1991 if (IsAlive())
1992 {
1994 }
1995 else if (getDeathState() != DeathState::Corpse)
1996 {
1998 }
1999 }
2000
2001 ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_CREATURE_RESPAWN, GetEntry());
2002
2003 if (!sConditionMgr->IsObjectMeetToConditions(this, conditions) && !force)
2004 {
2005 // Creature should not respawn, reset respawn timer. Conditions will be checked again the next time it tries to respawn.
2007 return;
2008 }
2009
2010 bool allowed = !IsAIEnabled || AI()->CanRespawn(); // First check if there are any scripts that prevent us respawning
2011 if (!allowed && !force) // Will be rechecked on next Update call
2012 return;
2013
2014 ObjectGuid dbtableHighGuid = ObjectGuid::Create<HighGuid::Unit>(m_creatureData ? m_creatureData->id1 : GetEntry(), m_spawnId);
2015 time_t linkedRespawntime = GetMap()->GetLinkedRespawnTime(dbtableHighGuid);
2016
2017 CreatureTemplate const* cInfo = sObjectMgr->GetCreatureTemplate(GetEntry());
2018
2019 if (!linkedRespawntime || (cInfo && cInfo->HasFlagsExtra(CREATURE_FLAG_EXTRA_HARD_RESET)) || force) // Should respawn
2020 {
2021 RemoveCorpse(false, false);
2022
2024 {
2025 if (m_spawnId)
2026 {
2028 CreatureData const* data = sObjectMgr->GetCreatureData(m_spawnId);
2029 // Respawn check if spawn has 2 entries
2030 if (data->id2)
2031 {
2032 uint32 entry = GetRandomId(data->id1, data->id2, data->id3);
2033 UpdateEntry(entry, data, true); // Select Random Entry
2034 m_defaultMovementType = MovementGeneratorType(data->movementType); // Reload Movement Type
2035 LoadEquipment(data->equipmentId); // Reload Equipment
2036 AIM_Initialize(); // Reload AI
2037 }
2038 else
2039 {
2040 if (m_originalEntry != GetEntry())
2042 }
2043 }
2044
2045 LOG_DEBUG("entities.unit", "Respawning creature {} (SpawnId: {}, {})", GetName(), GetSpawnId(), GetGUID().ToString());
2046 m_respawnTime = 0;
2048 loot.clear();
2049 SelectLevel();
2050
2053
2054 // MDic - Acidmanifesto: Do not override transform auras
2056 {
2058 CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelRandomGender(&display, GetCreatureTemplate());
2059 if (minfo) // Cancel load if no model defined
2060 {
2061 SetDisplayId(display.CreatureDisplayID, display.DisplayScale);
2062 SetNativeDisplayId(display.CreatureDisplayID);
2063 }
2064 }
2065
2067
2068 //Call AI respawn virtual function
2069 if (IsAIEnabled)
2070 {
2071 //reset the AI to be sure no dirty or uninitialized values will be used till next tick
2072 AI()->Reset();
2073 TriggerJustRespawned = true; //delay event to next tick so all creatures are created on the map before processing
2074 }
2075
2076 uint32 poolid = m_spawnId ? sPoolMgr->IsPartOfAPool<Creature>(m_spawnId) : 0;
2077 if (poolid)
2078 sPoolMgr->UpdatePool<Creature>(poolid, m_spawnId);
2079
2080 //Re-initialize reactstate that could be altered by movementgenerators
2082
2083 }
2085 // xinef: relocate notifier, fixes npc appearing in corpse position after forced respawn (instead of spawn)
2086 m_last_notify_position.Relocate(-5000.0f, -5000.0f, -5000.0f, 0.0f);
2088
2089 }
2090 else // the master is dead
2091 {
2092 ObjectGuid targetGuid = sObjectMgr->GetLinkedRespawnGuid(dbtableHighGuid);
2093 if (targetGuid == dbtableHighGuid) // if linking self, never respawn (check delayed to next day)
2094 {
2096 }
2097 else
2098 {
2099 time_t now = GameTime::GetGameTime().count();
2100 m_respawnTime = (now > linkedRespawntime ? now : linkedRespawntime) + urand(5, MINUTE); // else copy time from master and add a little
2101 }
2102 SaveRespawnTime(); // also save to DB immediately
2103 }
2104}
constexpr auto DAY
Definition Common.h:49
constexpr auto MINUTE
Definition Common.h:47
#define sConditionMgr
Definition ConditionMgr.h:292
@ CONDITION_SOURCE_TYPE_CREATURE_RESPAWN
Definition ConditionMgr.h:154
std::list< Condition * > ConditionList
Definition ConditionMgr.h:239
@ CREATURE_FLAG_EXTRA_HARD_RESET
Definition CreatureData.h:77
#define sPoolMgr
Definition PoolMgr.h:165
@ SPELL_AURA_TRANSFORM
Definition SpellAuraDefines.h:119
virtual bool CanRespawn()
Definition CreatureAI.h:119
void SaveRespawnTime() override
Definition Creature.cpp:2587
void SetRespawnTime(uint32 respawn)
Definition Creature.cpp:3730
void SelectLevel(bool changelevel=true)
Definition Creature.cpp:1472
void InitializeReactState()
Check if the creature has the specified ReactState.
Definition Creature.cpp:2154
void ResetPickPocketLootTime()
Definition Creature.h:238
time_t GetLinkedRespawnTime(ObjectGuid guid) const
Definition Map.cpp:2603
void InitDefault()
Definition MotionMaster.cpp:89
Definition ObjectGuid.h:118
virtual void Reset()
Definition UnitAI.h:211
AuraEffectList const & GetAuraEffectsByType(AuraType type) const
Definition Unit.h:1428
void UpdateObjectVisibility(bool forced=true, bool fromUpdate=false) override
Definition Unit.cpp:15343

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::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::SetBossState(), instance_halls_of_reflection::SetData(), Battlefield::ShowNpc(), boss_warchief_kargath_bladefist::SummonedCreatureDies(), Update(), npc_escortAI::UpdateAI(), and InstanceScript::UpdateMinionState().

◆ ResumeChasingVictim()

◆ SaveRespawnTime()

◆ SaveToDB() [1/2]

void Creature::SaveToDB ( )
1356{
1357 // this should only be used when the creature has already been loaded
1358 // preferably after adding to map, because mapid may not be valid otherwise
1359 CreatureData const* data = sObjectMgr->GetCreatureData(m_spawnId);
1360 if (!data)
1361 {
1362 LOG_ERROR("entities.unit", "Creature::SaveToDB failed, cannot get creature data!");
1363 return;
1364 }
1365
1367 SaveToDB(mapId, data->spawnMask, GetPhaseMask());
1368}
void SaveToDB()
Definition Creature.cpp:1355
GameObjectTemplate const * GetGOInfo() const
Definition GameObject.h:136
MotionTransport * ToMotionTransport()
Definition GameObject.h:327
uint32 GetMapId() const
Definition Position.h:281
struct GameObjectTemplate::@234::@249 moTransport
uint32 mapID
Definition GameObjectData.h:223
uint8 spawnMask
Definition SpawnData.h:70

References GameObject::GetGOInfo(), WorldLocation::GetMapId(), WorldObject::GetPhaseMask(), WorldObject::GetTransport(), LOG_ERROR, m_spawnId, GameObjectTemplate::mapID, GameObjectTemplate::moTransport, SaveToDB(), sObjectMgr, SpawnData::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.

1371{
1372 // update in loaded data
1373 if (!m_spawnId)
1374 m_spawnId = sObjectMgr->GenerateCreatureSpawnId();
1375
1376 CreatureData& data = sObjectMgr->NewOrExistCreatureData(m_spawnId);
1377
1378 uint32 displayId = GetNativeDisplayId();
1379 uint32 npcflag = GetNpcFlags();
1380 uint32 unit_flags = GetUnitFlags();
1381 uint32 dynamicflags = GetDynamicFlags();
1382
1383 // check if it's a custom model and if not, use 0 for displayId
1384 CreatureTemplate const* cinfo = GetCreatureTemplate();
1385 if (cinfo)
1386 {
1387 for (CreatureModel model : cinfo->Models)
1388 if (displayId && displayId == model.CreatureDisplayID)
1389 displayId = 0;
1390
1391 if (npcflag == cinfo->npcflag)
1392 npcflag = 0;
1393
1394 if (unit_flags == cinfo->unit_flags)
1395 unit_flags = 0;
1396
1397 if (dynamicflags == cinfo->dynamicflags)
1398 dynamicflags = 0;
1399 }
1400
1401 data.id1 = GetEntry();
1402 data.mapid = mapid;
1403 data.phaseMask = phaseMask;
1404 data.displayid = displayId;
1406 if (!GetTransport())
1407 {
1408 data.posX = GetPositionX();
1409 data.posY = GetPositionY();
1410 data.posZ = GetPositionZ();
1411 data.orientation = GetOrientation();
1412 }
1413 else
1414 {
1415 data.posX = GetTransOffsetX();
1416 data.posY = GetTransOffsetY();
1417 data.posZ = GetTransOffsetZ();
1419 }
1420
1422 // prevent add data integrity problems
1424 data.currentwaypoint = 0;
1425 data.curhealth = GetHealth();
1426 data.curmana = GetPower(POWER_MANA);
1427 // prevent add data integrity problems
1430 data.spawnMask = spawnMask;
1431 data.npcflag = npcflag;
1432 data.unit_flags = unit_flags;
1433 data.dynamicflags = dynamicflags;
1434
1435 // update in DB
1436 WorldDatabaseTransaction trans = WorldDatabase.BeginTransaction();
1437
1439 stmt->SetData(0, m_spawnId);
1440 trans->Append(stmt);
1441
1442 uint8 index = 0;
1443
1444 stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_CREATURE);
1445 stmt->SetData(index++, m_spawnId);
1446 stmt->SetData(index++, GetEntry());
1447 stmt->SetData(index++, 0);
1448 stmt->SetData(index++, 0);
1449 stmt->SetData(index++, uint16(mapid));
1450 stmt->SetData(index++, spawnMask);
1451 stmt->SetData(index++, GetPhaseMask());
1452 stmt->SetData(index++, int32(GetCurrentEquipmentId()));
1453 stmt->SetData(index++, GetPositionX());
1454 stmt->SetData(index++, GetPositionY());
1455 stmt->SetData(index++, GetPositionZ());
1456 stmt->SetData(index++, GetOrientation());
1457 stmt->SetData(index++, m_respawnDelay);
1458 stmt->SetData(index++, m_wanderDistance);
1459 stmt->SetData(index++, 0);
1460 stmt->SetData(index++, GetHealth());
1461 stmt->SetData(index++, GetPower(POWER_MANA));
1462 stmt->SetData(index++, uint8(GetDefaultMovementType()));
1463 stmt->SetData(index++, npcflag);
1464 stmt->SetData(index++, unit_flags);
1465 stmt->SetData(index++, dynamicflags);
1466 trans->Append(stmt);
1467
1468 WorldDatabase.CommitTransaction(trans);
1469 sScriptMgr->OnCreatureSaveToDB(this);
1470}
@ WORLD_INS_CREATURE
Definition WorldDatabase.h:92
Models
Definition boss_black_knight.cpp:79
uint8 GetCurrentEquipmentId()
Definition Creature.h:197
MovementGeneratorType GetDefaultMovementType() const override
-------—End of Pet responses methods-------—
Definition Creature.h:90
NPCFlags GetNpcFlags() const
Clears emote state (looping emote)
Definition Unit.h:762
UnitFlags GetUnitFlags() const
Definition Unit.h:746
uint32 GetDynamicFlags() const override
Definition Unit.h:768
float GetTransOffsetX() const
Definition Object.h:689
float GetTransOffsetY() const
Definition Object.h:690
float GetTransOffsetZ() const
Definition Object.h:691
float GetTransOffsetO() const
Definition Object.h:692
uint32 dynamicflags
Definition CreatureData.h:385
uint32 displayid
Definition CreatureData.h:375
uint32 unit_flags
Definition CreatureData.h:384
uint32 currentwaypoint
Definition CreatureData.h:379
uint32 unit_flags
Definition CreatureData.h:214
uint32 npcflag
Definition CreatureData.h:200
uint32 dynamicflags
Definition CreatureData.h:216
uint16 mapid
Definition SpawnData.h:64

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, SpawnData::mapid, CreatureTemplate::Models, CreatureData::movementType, CreatureTemplate::npcflag, CreatureData::npcflag, SpawnData::orientation, SpawnData::phaseMask, SpawnData::posX, SpawnData::posY, SpawnData::posZ, POWER_MANA, RANDOM_MOTION_TYPE, PreparedStatementBase::SetData(), sObjectMgr, SpawnData::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 ( )
372{
373 if (IsSummon())
374 {
375 return;
376 }
377
379 if (!spawnId)
380 {
381 return;
382 }
383
384 CreatureGroupInfoType::const_iterator frmdata = sFormationMgr->CreatureGroupMap.find(spawnId);
385 if (frmdata != sFormationMgr->CreatureGroupMap.end())
386 {
387 sFormationMgr->AddCreatureToGroup(frmdata->second.leaderGUID, this);
388 }
389}

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)
1473{
1474 CreatureTemplate const* cInfo = GetCreatureTemplate();
1475
1476 uint32 rank = IsPet() ? 0 : cInfo->rank;
1477
1478 // level
1479 uint8 minlevel = std::min(cInfo->maxlevel, cInfo->minlevel);
1480 uint8 maxlevel = std::max(cInfo->maxlevel, cInfo->minlevel);
1481 uint8 level = minlevel == maxlevel ? minlevel : urand(minlevel, maxlevel);
1482
1483 sScriptMgr->OnBeforeCreatureSelectLevel(cInfo, this, level);
1484
1485 if (changelevel)
1486 SetLevel(level);
1487
1488 CreatureBaseStats const* stats = sObjectMgr->GetCreatureBaseStats(level, cInfo->unit_class);
1489
1490 // health
1491 float healthmod = _GetHealthMod(rank);
1492
1493 uint32 basehp = std::max<uint32>(1, stats->GenerateHealth(cInfo));
1494 uint32 health = uint32(basehp * healthmod);
1495
1496 SetCreateHealth(health);
1497 SetMaxHealth(health);
1498 SetHealth(health);
1500
1501 // mana
1502 uint32 mana = stats->GenerateMana(cInfo);
1503
1504 SetCreateMana(mana);
1505 SetMaxPower(POWER_MANA, mana); //MAX Mana
1506 SetPower(POWER_MANA, mana);
1507
1509
1512
1513 // damage
1514
1515 float basedamage = stats->GenerateBaseDamage(cInfo);
1516
1517 float weaponBaseMinDamage = basedamage;
1518 float weaponBaseMaxDamage = basedamage * 1.5;
1519
1520 SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, weaponBaseMinDamage);
1521 SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, weaponBaseMaxDamage);
1522
1523 SetBaseWeaponDamage(OFF_ATTACK, MINDAMAGE, weaponBaseMinDamage);
1524 SetBaseWeaponDamage(OFF_ATTACK, MAXDAMAGE, weaponBaseMaxDamage);
1525
1526 SetBaseWeaponDamage(RANGED_ATTACK, MINDAMAGE, weaponBaseMinDamage);
1527 SetBaseWeaponDamage(RANGED_ATTACK, MAXDAMAGE, weaponBaseMaxDamage);
1528
1531
1532 sScriptMgr->OnCreatureSelectLevel(cInfo, this);
1533}
@ UNIT_MOD_ATTACK_POWER
Definition Unit.h:169
@ UNIT_MOD_HEALTH
Definition Unit.h:154
@ UNIT_MOD_MANA
Definition Unit.h:155
@ UNIT_MOD_ATTACK_POWER_RANGED
Definition Unit.h:170
void ResetPlayerDamageReq()
Definition Creature.cpp:3772
void SetCreateHealth(uint32 val)
Definition Unit.h:1128
void SetBaseWeaponDamage(WeaponAttackType attType, WeaponDamageRange damageRange, float value, uint8 damageIndex=0)
Definition Unit.h:1211
void SetMaxPower(Powers power, uint32 val)
Definition Unit.cpp:12454
void SetCreateMana(uint32 val)
Definition Unit.h:1149
void SetLevel(uint8 lvl, bool showLevelChange=true)
Definition Unit.cpp:12297
void SetMaxHealth(uint32 val)
Definition Unit.cpp:12365
void SetStatFlatModifier(UnitMods unitMod, UnitModifierFlatType modifierType, float val)
Definition Unit.cpp:11965
Definition CreatureData.h:298
uint32 RangedAttackPower
Definition CreatureData.h:303
uint32 AttackPower
Definition CreatureData.h:302
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:196
uint8 maxlevel
Definition CreatureData.h:197

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::SetPower(), Unit::SetStatFlatModifier(), 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::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).

2355{
2356 if (dist == 0.0f)
2357 {
2359 }
2360
2361 Unit* target = nullptr;
2362
2363 Acore::NearestHostileUnitCheck u_check(this, dist, playerOnly);
2364 Acore::UnitLastSearcher<Acore::NearestHostileUnitCheck> searcher(this, target, u_check);
2365 Cell::VisitObjects(this, searcher, dist);
2366 return target;
2367}
#define MAX_VISIBILITY_DISTANCE
Definition ObjectDefines.h:30
Definition GridNotifiers.h:1186
Definition GridNotifiers.h:397

References MAX_VISIBILITY_DISTANCE, and Cell::VisitObjects().

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(), boss_alar::ScheduleMainSpellAttack(), npc_memory::npc_memoryAI::UpdateAI(), boss_malygos::UpdateAI(), npc_freya_ward::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.

2373{
2374 if (dist < ATTACK_DISTANCE)
2375 dist = ATTACK_DISTANCE;
2376 if (dist > MAX_SEARCHER_DISTANCE)
2377 dist = MAX_SEARCHER_DISTANCE;
2378
2379 Unit* target = nullptr;
2382 Cell::VisitObjects(this, searcher, std::max(dist, ATTACK_DISTANCE));
2383
2384 return target;
2385}
#define ATTACK_DISTANCE
Definition ObjectDefines.h:25
#define MAX_SEARCHER_DISTANCE
Definition ObjectDefines.h:32
Definition GridNotifiers.h:1215

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

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

◆ SelectVictim()

Unit * Creature::SelectVictim ( )
11454{
11455 // function provides main threat functionality
11456 // next-victim-selection algorithm and evade mode are called
11457 // threat list sorting etc.
11458
11459 Unit* target = nullptr;
11460
11461 if (CanHaveThreatList())
11463 else if (!HasReactState(REACT_PASSIVE))
11464 {
11465 // we have player pet probably
11466 target = getAttackerForHelper();
11467 if (!target && IsSummon())
11468 if (Unit* owner = ToTempSummon()->GetOwner())
11469 {
11470 if (owner->IsInCombat())
11471 target = owner->getAttackerForHelper();
11472 if (!target)
11473 for (ControlSet::const_iterator itr = owner->m_Controlled.begin(); itr != owner->m_Controlled.end(); ++itr)
11474 if ((*itr)->IsInCombat())
11475 {
11476 target = (*itr)->getAttackerForHelper();
11477 if (target)
11478 break;
11479 }
11480 }
11481 }
11482 else
11483 return nullptr;
11484
11485 if (target && _IsTargetAcceptable(target) && CanCreatureAttack(target))
11486 {
11487 if (!HasSpellFocus())
11488 SetInFront(target);
11489 return target;
11490 }
11491
11492 // last case when creature must not go to evade mode:
11493 // it in combat but attacker not make any damage and not enter to aggro radius to have record in threat list
11494 // Note: creature does not have targeted movement generator but has attacker in this case
11495 for (AttackerSet::const_iterator itr = m_attackers.begin(); itr != m_attackers.end(); ++itr)
11496 if ((*itr) && CanCreatureAttack(*itr) && !(*itr)->IsPlayer() && !(*itr)->ToCreature()->HasUnitTypeMask(UNIT_MASK_CONTROLLABLE_GUARDIAN))
11497 return nullptr;
11498
11499 if (GetVehicle())
11500 return nullptr;
11501
11502 // pussywizard: not sure why it's here
11503 // pussywizard: can't evade when having invisibility aura with duration? o_O
11505 if (!iAuras.empty())
11506 {
11507 for (Unit::AuraEffectList::const_iterator itr = iAuras.begin(); itr != iAuras.end(); ++itr)
11508 if ((*itr)->GetBase()->IsPermanent())
11509 {
11511 break;
11512 }
11513 return nullptr;
11514 }
11515
11516 // Last chance: creature group
11517 if (CreatureGroup* group = GetFormation())
11518 {
11519 if (Unit* groupTarget = group->GetNewTargetForMember(this))
11520 {
11521 SetInFront(groupTarget);
11522 return groupTarget;
11523 }
11524 }
11525
11526 // enter in evade mode in other case
11527 AI()->EnterEvadeMode();
11528
11529 return nullptr;
11530}
@ SPELL_AURA_MOD_INVISIBILITY
Definition SpellAuraDefines.h:81
@ UNIT_MASK_CONTROLLABLE_GUARDIAN
Definition UnitDefines.h:167
@ EVADE_REASON_NO_HOSTILES
Definition CreatureAI.h:88
virtual void EnterEvadeMode(EvadeReason why=EVADE_REASON_OTHER)
Definition CreatureAI.cpp:235
Vehicle * GetVehicle() const
Definition Unit.h:1926
std::vector< AuraEffect * > AuraEffectList
Definition Unit.h:680
ThreatManager m_threatManager
Definition Unit.h:2194
AttackerSet m_attackers
Definition Unit.h:2150

References _IsTargetAcceptable(), AI(), CanCreatureAttack(), Unit::CanHaveThreatList(), CreatureAI::EnterEvadeMode(), CreatureAI::EVADE_REASON_NO_HOSTILES, Unit::getAttackerForHelper(), Unit::GetAuraEffectsByType(), ThreatManager::GetCurrentVictim(), GetFormation(), Unit::GetOwner(), Unit::GetVehicle(), HasReactState(), HasSpellFocus(), Unit::IsSummon(), Unit::m_attackers, Unit::m_threatManager, REACT_PASSIVE, Unit::SetInFront(), SPELL_AURA_MOD_INVISIBILITY, Unit::ToTempSummon(), and UNIT_MASK_CONTROLLABLE_GUARDIAN.

Referenced by StartMovementEvent::Execute(), boss_urom::boss_uromAI::JustSummoned(), boss_gyth::JustSummoned(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::MovementInform(), boss_sindragosa::boss_sindragosaAI::MovementInform(), npc_rimefang::npc_rimefangAI::MovementInform(), 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)
2388{
2389 WorldPacket data(SMSG_AI_REACTION, 12);
2390
2391 data << GetGUID();
2392 data << uint32(reactionType);
2393
2394 ((WorldObject*)this)->SendMessageToSet(&data, true);
2395
2396 LOG_DEBUG("network", "WORLD: Sent SMSG_AI_REACTION, type {}.", reactionType);
2397}
Definition Object.h:475
@ 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.

2780{
2782 data << (uint32)GetAreaId();
2783 sWorldSessionMgr->SendGlobalMessage(&data, nullptr, (attacker->GetTeamId() == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE));
2784}
@ TEAM_ALLIANCE
Definition SharedDefines.h:748
@ TEAM_HORDE
Definition SharedDefines.h:749
#define sWorldSessionMgr
Definition WorldSessionMgr.h:108
TeamId GetTeamId(bool original=false) const
Definition Player.h:2127
uint32 GetAreaId() const
Definition Object.cpp:3120
@ 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
425{ m_assistanceTimer = value; }

References m_assistanceTimer.

Referenced by Unit::Attack().

◆ SetCanDualWield()

◆ SetCannotReachTarget()

void Creature::SetCannotReachTarget ( ObjectGuid const &  target = ObjectGuid::Empty)
3581{
3582 if (cannotReach == m_cannotReachTarget)
3583 return;
3584
3585 m_cannotReachTarget = cannotReach;
3586
3587 if (cannotReach)
3588 {
3589 LOG_DEBUG("entities.unit", "Creature::SetCannotReachTarget() called with target {}. Details: {}", cannotReach.ToString(), GetDebugInfo());
3592 }
3593 else
3594 {
3596 }
3597}
void StopEvade()
Definition CombatManager.cpp:459
void StartEvadeTimer()
Definition CombatManager.h:123
std::string GetDebugInfo() const override
Definition Creature.cpp:3815

References Unit::GetCombatManager(), GetDebugInfo(), IsInEvadeMode(), LOG_DEBUG, m_cannotReachTarget, CombatManager::StartEvadeTimer(), CombatManager::StopEvade(), and ObjectGuid::ToString().

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

◆ SetCombatMovement()

void Creature::SetCombatMovement ( bool  allowMovement)
3802{
3803 _isCombatMovementAllowed = allowMovement;
3804}

References _isCombatMovementAllowed.

Referenced by boss_victor_nefarius::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_tentacle(), boss_yoggsaron_corruptor_tentacle::boss_yoggsaron_corruptor_tentacle(), boss_yoggsaron_crusher_tentacle::boss_yoggsaron_crusher_tentacle(), 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_tiger_matriarch_credit::npc_tiger_matriarch_creditAI::npc_tiger_matriarch_creditAI(), npc_tournament_training_dummy::npc_tournament_training_dummyAI::npc_tournament_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(), npc_ulduar_aerial_command_unit::Reset(), boss_illidan_stormrage::Reset(), boss_felmyst::ScheduleGroundAbilities(), boss_quartermaster_zigris::UpdateAI(), and boss_jormungarAI::UpdateAI().

◆ SetCombatPulseDelay()

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

References m_combatPulseDelay, and m_combatPulseTime.

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

◆ SetCorpseDelay()

void Creature::SetCorpseDelay ( uint32  delay)
inline
74{ 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::JustDied(), npc_hor_risen_witch_doctor::JustDied(), npc_hor_lumbering_abomination::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)
3736{
3737 m_corpseRemoveTime = GameTime::GetGameTime().count() + delay;
3738}

References GameTime::GetGameTime(), and m_corpseRemoveTime.

Referenced by boss_razorgore::JustDied().

◆ 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.

1917{
1918 Unit::setDeathState(state, despawn);
1919
1920 if (state == DeathState::JustDied)
1921 {
1923 uint32 dynamicRespawnDelay = GetMap()->ApplyDynamicModeRespawnScaling(this, m_respawnDelay);
1924 m_respawnTime = GameTime::GetGameTime().count() + dynamicRespawnDelay + m_corpseDelay;
1925
1926 // always save boss respawn time at death to prevent crash cheating
1927 if (GetMap()->IsDungeon() || isWorldBoss() || GetCreatureTemplate()->rank >= CREATURE_ELITE_ELITE)
1929
1930 SetTarget(); // remove target selection in any cases (can be set at aura remove in Unit::setDeathState)
1932
1933 Dismount(); // if creature is mounted on a virtual mount, remove it at death
1934
1936 {
1937 SetNoSearchAssistance(false);
1938 }
1939
1940 //Dismiss group if is leader
1941 if (m_formation && m_formation->GetLeader() == this)
1942 m_formation->FormationReset(true, false);
1943
1944 bool needsFalling = !despawn && (IsFlying() || IsHovering()) && !IsUnderWater();
1945 SetHover(false);
1946 SetDisableGravity(false);
1947
1948 if (needsFalling)
1949 GetMotionMaster()->MoveFall(0, true);
1950
1952 }
1953 else if (state == DeathState::JustRespawned)
1954 {
1955 SetFullHealth();
1956 SetLootRecipient(nullptr);
1959 CreatureTemplate const* cinfo = GetCreatureTemplate();
1960 // Xinef: npc run by default
1961 //SetWalk(true);
1962
1963 // pussywizard:
1966
1968
1972
1974
1976 LoadCreaturesAddon(true);
1978
1979 if (GetCreatureData() && GetPhaseMask() != GetCreatureData()->phaseMask)
1980 SetPhaseMask(GetCreatureData()->phaseMask, false);
1981 }
1982}
SpellSchools
Definition SharedDefines.h:270
@ MOVEMENTFLAG_FALLING
Definition UnitDefines.h:384
NPCFlags
Non Player Character flags.
Definition UnitDefines.h:320
@ UNIT_NPC_FLAG_NONE
Definition UnitDefines.h:321
@ UNIT_STATE_ALL_STATE
Definition UnitDefines.h:227
@ UNIT_STATE_NO_ENVIRONMENT_UPD
Definition UnitDefines.h:201
bool HasSearchedAssistance()
Definition Creature.h:273
void SetLootRecipient(Unit *unit, bool withGroup=true)
Definition Creature.cpp:1282
void SetCannotReachTarget(ObjectGuid const &target=ObjectGuid::Empty)
Definition Creature.cpp:3580
void SetMeleeDamageSchool(SpellSchools school)
Definition Creature.h:163
uint32 ApplyDynamicModeRespawnScaling(WorldObject const *obj, uint32 respawnDelay) const
Definition Map.cpp:1710
void MoveFall(uint32 id=0, bool addFlagForNPC=false)
The unit will fall. Used when in the air. Doesn't work with UNIT_FLAG_DISABLE_MOVE.
Definition MotionMaster.cpp:688
virtual void setDeathState(DeathState s, bool despawn=false)
Definition Unit.cpp:11335
void SetFullHealth()
Definition Unit.h:1126
void SetHover(bool enable)
Definition Unit.cpp:16599
bool HasUnitMovementFlag(uint32 f) const
Definition Unit.h:774
virtual bool IsUnderWater() const
Definition Unit.cpp:4526
void RemoveUnitMovementFlag(uint32 f)
Definition Unit.h:773
void SetDisableGravity(bool disable)
Definition Unit.cpp:16462
void ReplaceAllNpcFlags(NPCFlags flags)
Definition Unit.h:766
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(), SetCannotReachTarget(), Unit::setDeathState(), Unit::SetDisableGravity(), Unit::SetFullHealth(), Unit::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::DoAction(), boss_freya_summons::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_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
210{ m_detectionDistance = dist; }

References m_detectionDistance.

Referenced by UpdateEntry().

◆ SetDisplayFromModel()

void Creature::SetDisplayFromModel ( uint32  modelIdx)
3459{
3460 if (CreatureModel const* model = GetCreatureTemplate()->GetModelByIdx(modelIdx))
3461 SetDisplayId(model->CreatureDisplayID, model->DisplayScale);
3462}

References GetCreatureTemplate(), and SetDisplayId().

◆ SetDisplayId()

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

Reimplemented from Unit.

Reimplemented in Pet.

3438{
3439 Unit::SetDisplayId(modelId, displayScale);
3440
3441 float combatReach = DEFAULT_WORLD_OBJECT_SIZE;
3442
3443 if (CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelInfo(modelId))
3444 {
3445 SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, (IsPet() ? 1.0f : minfo->bounding_radius) * GetObjectScale());
3446 if (minfo->combat_reach > 0)
3447 combatReach = minfo->combat_reach;
3448 }
3449
3450 if (IsPet())
3451 combatReach = DEFAULT_COMBAT_REACH;
3452
3453 SetObjectScale(displayScale);
3454
3456}
#define DEFAULT_WORLD_OBJECT_SIZE
Definition ObjectDefines.h:44
#define DEFAULT_COMBAT_REACH
Definition ObjectDefines.h:45
@ UNIT_FIELD_COMBATREACH
Definition UpdateFields.h:123
@ UNIT_FIELD_BOUNDINGRADIUS
Definition UpdateFields.h:122
float GetObjectScale() const
Definition Object.h:120
virtual void SetDisplayId(uint32 modelId, float displayScale=1.f)
Definition Unit.cpp:13125

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::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::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::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::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::UpdateAI(), boss_yoggsaron_sara::UpdateAI(), npc_azure_saboteur::npc_azure_saboteurAI::UpdateAI(), and boss_ichoron::boss_ichoronAI::UpdateAI().

◆ SetFormation()

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

References m_formation.

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

◆ SetGossipMenuId()

void Creature::SetGossipMenuId ( uint32  gossipMenuId)
inline
209{ _gossipMenuId = gossipMenuId; }

References _gossipMenuId.

◆ 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
345{ m_homePosition.Relocate(x, y, z, o); }

References m_homePosition, and Position::Relocate().

Referenced by at_hol_hall_of_watchers::_OnTrigger(), Battleground::AddCreature(), AtEngage(), 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::DoAction(), boss_tyrannus::boss_tyrannusAI::DoAction(), WaypointMovementGenerator< Creature >::DoUpdate(), FormationMovementGenerator::DoUpdate(), 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::InitializeAI(), boss_flame_leviathan::InitializeAI(), boss_aeonus::IsSummonedBy(), npc_simone::npc_simoneAI::JustDied(), boss_mandokir::boss_mandokirAI::JustEngagedWith(), boss_urom::boss_uromAI::JustEngagedWith(), boss_flame_leviathan::JustEngagedWith(), boss_kelthuzad::boss_kelthuzadAI::JustSummoned(), npc_daphne_stilwell::npc_daphne_stilwellAI::JustSummoned(), npc_hor_lich_king::JustSummoned(), boss_the_lich_king::boss_the_lich_kingAI::JustSummoned(), boss_algalon_the_observer::JustSummoned(), npc_blessed_banner::npc_blessed_bannerAI::JustSummoned(), npc_thrall_bfu::npc_thrall_bfuAI::JustSummoned(), LoadCreatureFromDB(), boss_nalorakk::MoveInLineOfSight(), npc_aged_dying_ancient_kodo::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::SpellHit(), 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_millhouse_manastorm::npc_millhouse_manastormAI::UpdateAI(), UpdateHomePosition(), and MotionTransport::UpdatePassengerPositions().

◆ SetInCombatWithZone()

void Creature::SetInCombatWithZone ( )

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

2790{
2791 if (IsAIEnabled)
2792 AI()->DoZoneInCombat();
2793}
void DoZoneInCombat(Creature *creature=nullptr, float maxRangeToNearestTarget=250.0f)
Definition CreatureAI.cpp:117

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

Referenced by boss_dorothee::DoAction(), boss_roar::DoAction(), boss_strawman::DoAction(), boss_tinhead::DoAction(), boss_falric::DoAction(), boss_marwyn::DoAction(), npc_ghostly_priest::DoAction(), npc_phantom_mage::DoAction(), npc_shadowy_mercenary::DoAction(), npc_spectral_footman::DoAction(), npc_tortured_rifleman::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::DoAction(), boss_the_lurker_below::DoAction(), boss_broggok::DoAction(), boss_grand_warlock_nethekurse::DoAction(), boss_krik_thir::boss_krik_thirAI::DoAction(), boss_leotheras_the_blind::DoAction(), boss_drakkari_colossus::boss_drakkari_colossusAI::DoAction(), boss_thaddius_summon::boss_thaddius_summonAI::DoAction(), boss_yoggsaron::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_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::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::InitFight(), boss_kiljaeden::InitializeAI(), boss_glob_of_viscidus::InitializeAI(), 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_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::JustEngagedWith(), boss_volkhan::JustEngagedWith(), boss_algalon_the_observer::JustEngagedWith(), boss_flame_leviathan::JustEngagedWith(), boss_freya::JustEngagedWith(), boss_xt002::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::JustEngagedWith(), boss_loatheb::boss_loathebAI::JustEngagedWith(), boss_maexxna::boss_maexxnaAI::JustEngagedWith(), boss_patchwerk::boss_patchwerkAI::JustEngagedWith(), boss_thaddius::boss_thaddiusAI::JustEngagedWith(), boss_steelbreaker::JustEngagedWith(), boss_runemaster_molgeim::JustEngagedWith(), boss_stormcaller_brundir::JustEngagedWith(), boss_fathomlord_karathress::JustEngagedWith(), boss_magtheridon::JustEngagedWith(), boss_anubrekhan::JustSummoned(), boss_grobbulus::boss_grobbulusAI::JustSummoned(), boss_loatheb::boss_loathebAI::JustSummoned(), boss_maexxna::boss_maexxnaAI::JustSummoned(), boss_auriaya::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::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_novos::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_animus(), instance_karazhan::instance_karazhan_InstanceMapScript::OnCreatureCreate(), boss_nightbane::PathEndReached(), npc_sanguine_spirit::Reset(), boss_julianne::Reset(), boss_entropius::Reset(), boss_headless_horseman_head::Reset(), npc_twilight_summon::Reset(), boss_twilight_halion::boss_twilight_halionAI::Reset(), boss_yoggsaron_guardian_of_ys::Reset(), boss_yoggsaron_crusher_tentacle::Reset(), boss_yoggsaron_immortal_guardian::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(), npc_phantom_hallucination::UpdateAI(), npc_hor_lich_king::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::UpdateAI(), boss_flame_leviathan::UpdateAI(), boss_mimiron::UpdateAI(), boss_razorscale::UpdateAI(), boss_anzu::UpdateAI(), and npc_onyx_flamecaller::npc_onyx_flamecallerAI::WaypointReached().

◆ SetLastLeashExtensionTimePtr()

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

References m_lastLeashExtensionTime.

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

◆ SetLootMode()

◆ SetLootRecipient()

void Creature::SetLootRecipient ( Unit unit,
bool  withGroup = true 
)
1283{
1284 // set the player whose group should receive the right
1285 // to loot the creature after it dies
1286 // should be set to nullptr after the loot disappears
1287
1288 if (!unit)
1289 {
1294 return;
1295 }
1296
1298 if (!player) // normal creature, no player involved
1299 return;
1300
1301 m_lootRecipient = player->GetGUID();
1302
1303 Map* map = GetMap();
1304 if (map && map->IsDungeon() && (isWorldBoss() || IsDungeonBoss()))
1305 {
1307 }
1308
1309 if (withGroup)
1310 {
1311 if (Group* group = player->GetGroup())
1312 {
1313 m_lootRecipientGroup = group->GetGUID().GetCounter();
1314
1315 if (map && map->IsDungeon() && (isWorldBoss() || IsDungeonBoss()))
1316 {
1317 Map::PlayerList const& PlayerList = map->GetPlayers();
1318 for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
1319 {
1320 if (Player* groupMember = i->GetSource())
1321 {
1322 if (groupMember->IsGameMaster() || groupMember->IsSpectator())
1323 {
1324 continue;
1325 }
1326
1327 if (groupMember->GetGroup() == group)
1328 {
1329 AddAllowedLooter(groupMember->GetGUID());
1330 }
1331 }
1332 }
1333 }
1334 }
1335 }
1336 else
1338
1340}
@ UNIT_DYNFLAG_LOOTABLE
Definition SharedDefines.h:3356
bool IsDungeonBoss() const
Definition Creature.cpp:3205
Definition LinkedList.h:139
Definition MapRefMgr.h:26
iterator begin()
Definition MapRefMgr.h:36
iterator end()
Definition MapRefMgr.h:37
Definition Map.h:164
bool IsDungeon() const
Definition Map.h:295
PlayerList const & GetPlayers() const
Definition Map.h:326
virtual void RemoveDynamicFlag(uint32 flag)
Definition Object.h:126
virtual void SetDynamicFlag(uint32 flag)
Definition Object.h:125
Group * GetGroup()
Definition Player.h:2504
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
Definition Unit.cpp:7698
void ResetAllowedLooters()
Definition Object.cpp:3163
void AddAllowedLooter(ObjectGuid guid)
Definition Object.cpp:3153

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::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_escortAI::EnterEvadeMode(), FollowerAI::EnterEvadeMode(), boss_valithria_dreamwalker::boss_valithria_dreamwalkerAI::HealReceived(), boss_razorgore::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::Reset(), Player::SendLoot(), setDeathState(), boss_algalon_the_observer::UpdateAI(), and npc_target_dummy::UpdateAI().

◆ SetLootRewardDisabled()

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

References DisableLootReward.

◆ SetMeleeDamageSchool()

void Creature::SetMeleeDamageSchool ( SpellSchools  school)
inline

◆ SetNoCallAssistance()

◆ SetNoCallForHelp()

void Creature::SetNoCallForHelp ( bool  val)
inline

◆ SetNoSearchAssistance()

void Creature::SetNoSearchAssistance ( bool  val)
inline

◆ SetObjectScale()

void Creature::SetObjectScale ( float  scale)
overridevirtual

◆ SetOriginalEntry()

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

References m_originalEntry.

Referenced by CreateFromProto().

◆ SetPickPocketLootTime()

void Creature::SetPickPocketLootTime ( )
3694{
3696}
time_t const & GetRespawnTime() const
Definition Creature.h:288
uint32 GetCorpseDelay() const
Definition Creature.h:76

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 
)
3198{
3199 if (!Acore::IsValidMapCoord(x, y, z, o))
3200 return;
3201
3202 GetMap()->CreatureRelocation(this, x, y, z, o);
3203}
void CreatureRelocation(Creature *creature, float x, float y, float z, float o)
Definition Map.cpp:804

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

Referenced by 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(), 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_oculus_drakegiver::npc_oculus_drakegiverAI::UpdateAI(), boss_flame_leviathan_safety_container::UpdateAI(), boss_yoggsaron_sara::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
99{ m_reactState = state; }

References m_reactState.

Referenced by boss_halion::boss_halionAI::AttackStart(), boss_faction_championsAI::boss_faction_championsAI(), boss_flame_leviathan_seat::boss_flame_leviathan_seat(), 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(), boss_algalon_the_observer::DamageTaken(), boss_freya::DamageTaken(), boss_hodir::DamageTaken(), npc_ulduar_leviathan_mkii::DamageTaken(), npc_ulduar_vx001::DamageTaken(), npc_ulduar_aerial_command_unit::DamageTaken(), npc_ulduar_arachnopod_destroyer::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::DoAction(), npc_living_constellation::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(), npc_ulduar_aerial_command_unit::DoAction(), boss_skadi::boss_skadiAI::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(), npc_crystalline_frayer::EnterSeedPod(), 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::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::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::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_oathbound_warder::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::JustSummoned(), boss_vexallus::JustSummoned(), boss_hazzarah::JustSummoned(), boss_jindo::JustSummoned(), boss_baltharus_the_warborn::boss_baltharus_the_warbornAI::JustSummoned(), boss_novos::JustSummoned(), boss_bronjahm::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_blessed_banner::npc_blessed_bannerAI::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(), npc_crystalline_frayer::LeaveSeedPod(), Pet::LoadPetFromDB(), boss_nalorakk::MoveInLineOfSight(), npc_shattered_hand_scout::MoveInLineOfSight(), boss_hadronox::MovementInform(), boss_zuljin::MovementInform(), boss_ayamiss::MovementInform(), boss_bug_trio::MovementInform(), boss_grand_champion::boss_grand_championAI::MovementInform(), boss_garfrost::boss_garfrostAI::MovementInform(), boss_eck::MovementInform(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::MovementInform(), boss_sister_svalna::boss_sister_svalnaAI::MovementInform(), boss_four_horsemen::boss_four_horsemenAI::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_constellation(), npc_lk_spirit_bomb::npc_lk_spirit_bombAI::npc_lk_spirit_bombAI(), npc_memory::npc_memoryAI::npc_memoryAI(), npc_mimirons_inferno::npc_mimirons_inferno(), npc_minion_spawner::npc_minion_spawner(), npc_necrotic_shard::npc_necrotic_shard(), npc_nexus_lord::npc_nexus_lord(), 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_scion_of_eternity::npc_scion_of_eternity(), 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_druid(), npc_ulduar_hodir_mage::npc_ulduar_hodir_mage(), npc_ulduar_hodir_priest::npc_ulduar_hodir_priest(), npc_ulduar_hodir_shaman::npc_ulduar_hodir_shaman(), 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::OnCreatureCreate(), instance_zulfarrak::instance_zulfarrak_InstanceMapScript::OnCreatureCreate(), instance_trial_of_the_champion::instance_trial_of_the_champion_InstanceMapScript::OnCreatureCreate(), instance_halls_of_reflection::OnCreatureCreate(), boss_shade_of_aran::OnPowerUpdate(), spell_halion_twilight_phasing_aura::OnRemove(), npc_ulduar_arachnopod_destroyer::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::Reset(), boss_nefarian::Reset(), boss_vaelastrasz::Reset(), boss_ragnaros::Reset(), boss_mr_smite::boss_mr_smiteAI::Reset(), npc_chesspiece::Reset(), boss_midnight::Reset(), boss_nightbane::Reset(), npc_sanguine_spirit::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::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_crystalline_frayer::Reset(), npc_oculus_unstable_sphere::npc_oculus_unstable_sphereAI::Reset(), boss_volkhan::Reset(), brann_bronzebeard::brann_bronzebeardAI::Reset(), boss_algalon_the_observer::Reset(), boss_stormcaller_brundir::Reset(), npc_ulduar_iron_construct::Reset(), npc_ulduar_leviathan_mkii::Reset(), boss_thorim_sif::Reset(), boss_skadi::boss_skadiAI::Reset(), boss_skadi_grauf::boss_skadi_graufAI::Reset(), npc_imprisoned_beryl_sorcerer::npc_imprisoned_beryl_sorcererAI::Reset(), npc_venture_co_straggler::npc_venture_co_stragglerAI::Reset(), boss_talon_king_ikiss::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_hadronox_crusherPackAI::SetData(), npc_ulduar_leviathan_mkii::SetData(), npc_ulduar_aerial_command_unit::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::SpellHit(), npc_ulduar_leviathan_mkii::SpellHit(), npc_ulduar_vx001::SpellHit(), npc_ulduar_aerial_command_unit::SpellHit(), boss_attumen::SpellHit(), npc_venture_co_straggler::npc_venture_co_stragglerAI::SpellHit(), advisor_baseAI::SpellHit(), npc_enslaved_netherwing_drake::SpellHit(), boss_volkhan::SpellHitTarget(), boss_devourer_of_souls::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::StartFighting(), boss_heigan::StartFightPhase(), boss_noth::boss_nothAI::StartGroundPhase(), boss_lord_valthalak::StartTalking(), boss_ouro::Submerge(), boss_jedoga_shadowseeker::SummonedCreatureDies(), boss_vaelastrasz::UpdateAI(), boss_ragnaros::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_hadronox::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(), boss_malygos::UpdateAI(), boss_krystallus::boss_krystallusAI::UpdateAI(), boss_algalon_the_observer::UpdateAI(), boss_stormcaller_brundir::UpdateAI(), boss_mimiron::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
326{ m_regenHealth = enable; }

References m_regenHealth.

Referenced by boss_yoggsaron_brain::boss_yoggsaron_brain(), boss_eadric::boss_eadricAI::DamageTaken(), boss_paletress::boss_paletressAI::DamageTaken(), boss_grand_champion::boss_grand_championAI::DamageTaken(), npc_ulduar_arachnopod_destroyer::DamageTaken(), boss_felblood_kaelthas::DamageTaken(), boss_mal_ganis::boss_mal_ganisAI::DamageTaken(), boss_yoggsaron_brain::DamageTaken(), npc_twilight_volunteer::DoAction(), brann_bronzebeard::brann_bronzebeardAI::DoAction(), boss_kalecgos::DoAction(), boss_grand_champion::boss_grand_championAI::DoAction(), npc_crystalline_frayer::EnterSeedPod(), gunship_npc_AI::gunship_npc_AI(), npc_frozen_core::Initialize(), boss_drakkari_colossus::boss_drakkari_colossusAI::JustSummoned(), npc_crystalline_frayer::LeaveSeedPod(), boss_grand_champion::boss_grand_championAI::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(), npc_crystalline_frayer::Reset(), boss_stormcaller_brundir::Reset(), npc_ulduar_vx001::Reset(), npc_blessed_banner::npc_blessed_bannerAI::Reset(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::SetData(), and boss_stormcaller_brundir::UpdateAI().

◆ SetRegeneratingPower()

void Creature::SetRegeneratingPower ( bool  enable)
inline
327{ 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.

3259{
3260 if (!Unit::SetSwim(enable))
3261 return false;
3262
3264 data << GetPackGUID();
3265 SendMessageToSet(&data, true);
3266 return true;
3267}
PackedGuid const & GetPackGUID() const
Definition Object.h:116
virtual bool SetSwim(bool enable)
Definition Unit.cpp:16497
virtual void SendMessageToSet(WorldPacket const *data, bool self) const
Definition Object.cpp:2113
@ 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 SmartAI::SetSwim(), and UpdateMovementFlags().

◆ SetTarget()

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

Implements Unit.

3465{
3466 if (_focusSpell)
3467 _spellFocusTarget = guid;
3468 else
3470}

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

Referenced by boss_malygos::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_garfrost::boss_garfrostAI::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::SpellHit(), 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::UpdateAI().

◆ SetTextRepeatId()

void Creature::SetTextRepeatId ( uint8  textGroup,
uint8  id 
)
3704{
3705 CreatureTextRepeatIds& repeats = m_textRepeat[textGroup];
3706 if (std::find(repeats.begin(), repeats.end(), id) == repeats.end())
3707 repeats.push_back(id);
3708 else
3709 LOG_ERROR("sql.sql", "CreatureTextMgr: TextGroup {} for Creature({}) {}, id {} already added", uint32(textGroup), GetName(), GetGUID().ToString(), uint32(id));
3710}

References Object::GetGUID(), WorldObject::GetName(), LOG_ERROR, m_textRepeat, and Position::ToString().

Referenced by CreatureTextMgr::SendChat().

◆ 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.

3248{
3249 if (!Unit::SetWalk(enable))
3250 return false;
3251
3253 data << GetPackGUID();
3254 SendMessageToSet(&data, false);
3255 return true;
3256}
virtual bool SetWalk(bool enable)
Definition Unit.cpp:16448
@ 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_bjarngrim::boss_bjarngrim(), npc_tapoke_slim_jahn::npc_tapoke_slim_jahnAI::DamageTaken(), 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::DoAction(), npc_arthas::npc_arthasAI::DoAction(), npc_tirions_gambit_tirion::npc_tirions_gambit_tirionAI::DoAction(), npc_maiev_illidan::DoAction(), npc_akama_shade::DoAction(), npc_taretha::npc_tarethaAI::DoAction(), 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(), npc_kservant::npc_kservantAI::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_custodian_of_time::npc_custodian_of_timeAI::MoveInLineOfSight(), npc_brann_bronzebeard_algalon::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(), boss_kaelthas::MovementInform(), npc_cameron::MoveTheChildren(), npc_hor_leader_second::npc_hor_leader_secondAI::MoveToNextStopPoint(), npc_ancestral_wolf::npc_ancestral_wolfAI::npc_ancestral_wolfAI(), npc_marzon_silent_blade::npc_marzon_silent_bladeAI::npc_marzon_silent_bladeAI(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::npc_valkyr_shadowguardAI(), npc_chesspiece::OnCharmed(), instance_halls_of_reflection::OnCreatureCreate(), npc_thrall_bfu::OnGossipSelect(), npc_mikhail::OnQuestAccept(), npc_prospector_remtravel::OnQuestAccept(), npc_gilthares::OnQuestAccept(), npc_lakota_windsong::OnQuestAccept(), npc_paoka_swiftmountain::OnQuestAccept(), npc_engineer_helice::OnQuestAccept(), npc_maghar_captive::OnQuestAccept(), npc_maxx_a_million_escort::OnQuestAccept(), npc_deathstalker_erland::OnQuestAccept(), npc_kaya_flathoof::OnQuestAccept(), npc_wizzlecrank_shredder::OnQuestAccept(), npc_ame::OnQuestAccept(), npc_ranshalla::OnQuestAccept(), npc_lurgglbr::OnQuestAccept(), npc_mootoo_the_younger::OnQuestAccept(), npc_apothecary_hanes::OnQuestAccept(), npc_bessy::OnQuestAccept(), npc_isla_starmane::OnQuestAccept(), npc_icefang::npc_icefangAI::PassengerBoarded(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::ReorderInstance(), npc_chesspiece::Reset(), boss_arlokk::boss_arlokkAI::Reset(), npc_dark_iron_guzzler::Reset(), npc_onyx_flamecaller::npc_onyx_flamecallerAI::Reset(), npc_kinetic_bomb::npc_kinetic_bombAI::Reset(), npc_icc_vengeful_fleshreaper::npc_icc_vengeful_fleshreaperAI::Reset(), npc_hodirs_fury::Reset(), npc_mimirons_inferno::Reset(), npc_xt002_scrapbot::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(), npc_dream_fog::npc_dream_fogAI::ScheduleEvents(), npc_argent_soldier::npc_argent_soldierAI::SetData(), npc_kurenai_captive::npc_kurenai_captiveAI::SetGUID(), npc_tirion_fordring_tft::npc_tirion_fordringAI::sGossipSelect(), npc_injured_patient::npc_injured_patientAI::SpellHit(), npc_professor_phizzlethorpe::npc_professor_phizzlethorpeAI::sQuestAccept(), npc_ranger_lilatha::sQuestAccept(), npc_rinji::npc_rinjiAI::sQuestAccept(), npc_corporal_keeshan::npc_corporal_keeshanAI::sQuestAccept(), npc_muglash::npc_muglashAI::sQuestAccept(), npc_wounded_blood_elf::npc_wounded_blood_elfAI::sQuestAccept(), npc_rocknot::sQuestReward(), npc_barnes::npc_barnesAI::StartEvent(), npc_clintar_spirit::npc_clintar_spiritAI::StartEvent(), npc_thrall_bfu::npc_thrall_bfuAI::SummonedCreatureDies(), boss_majordomo::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(), npc_varian_wrynn::npc_varian_wrynnAI::UpdateAI(), npc_thrall_bfu::npc_thrall_bfuAI::UpdateAI(), boss_arlokk::boss_arlokkAI::UpdateAI(), npc_arthas::npc_arthasAI::UpdateAI(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::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_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_grimstone::UpdateEscortAI(), npc_magwin::npc_magwinAI::UpdateEscortAI(), npc_jenny::UpdateFollowerAI(), npc_arthas::npc_arthasAI::WaypointReached(), npc_professor_phizzlethorpe::npc_professor_phizzlethorpeAI::WaypointReached(), npc_ranger_lilatha::WaypointReached(), npc_rinji::npc_rinjiAI::WaypointReached(), npc_corporal_keeshan::npc_corporal_keeshanAI::WaypointReached(), npc_daphne_stilwell::npc_daphne_stilwellAI::WaypointReached(), npc_tapoke_slim_jahn::npc_tapoke_slim_jahnAI::WaypointReached(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::WaypointReached(), npc_taretha::npc_tarethaAI::WaypointReached(), npc_magwin::npc_magwinAI::WaypointReached(), npc_wizzlecrank_shredder::npc_wizzlecrank_shredderAI::WaypointReached(), npc_mootoo_the_younger::npc_mootoo_the_youngerAI::WaypointReached(), npc_emily::npc_emilyAI::WaypointReached(), npc_apothecary_hanes::npc_Apothecary_HanesAI::WaypointReached(), npc_ancestral_wolf::npc_ancestral_wolfAI::WaypointReached(), npc_maghar_captive::npc_maghar_captiveAI::WaypointReached(), npc_kurenai_captive::npc_kurenai_captiveAI::WaypointReached(), npc_isla_starmane::npc_isla_starmaneAI::WaypointReached(), and npc_wizzlecrank_shredder::npc_wizzlecrank_shredderAI::WaypointStart().

◆ SetWanderDistance()

void Creature::SetWanderDistance ( float  dist)
inline

◆ SignalFormationMovement()

void Creature::SignalFormationMovement ( )

◆ Update()

void Creature::Update ( uint32  time)
overridevirtual

Reimplemented from WorldObject.

Reimplemented in Pet, TempSummon, Puppet, and Totem.

684{
686 {
687 TriggerJustRespawned = false;
688 AI()->JustRespawned();
689 if (m_vehicleKit)
691 }
692
693 switch (m_deathState)
694 {
696 // Must not be called, see Creature::setDeathState JUST_RESPAWNED -> ALIVE promoting.
697 LOG_ERROR("entities.unit", "Creature ({}) in wrong state: DeathState::JustRespawned (4)", GetGUID().ToString());
698 break;
700 // Must not be called, see Creature::setDeathState JUST_DIED -> CORPSE promoting.
701 LOG_ERROR("entities.unit", "Creature ({}) in wrong state: DeathState::JustDead (1)", GetGUID().ToString());
702 break;
703 case DeathState::Dead:
704 {
705 time_t now = GameTime::GetGameTime().count();
706 if (m_respawnTime <= now)
707 {
708 Respawn();
709 }
710 break;
711 }
713 {
714 Unit::Update(diff);
715 // deathstate changed on spells update, prevent problems
717 break;
718
720 {
721 if (m_groupLootTimer <= diff)
722 {
723 Group* group = sGroupMgr->GetGroupByGUID(lootingGroupLowGUID);
724 if (group)
725 group->EndRoll(&loot, GetMap());
728 }
729 else
730 {
731 m_groupLootTimer -= diff;
732 }
733 }
734 else if (m_corpseRemoveTime <= GameTime::GetGameTime().count())
735 {
736 RemoveCorpse(false);
737 LOG_DEBUG("entities.unit", "Removing corpse... {} ", GetUInt32Value(OBJECT_FIELD_ENTRY));
738 }
739 break;
740 }
742 {
743 Unit::Update(diff);
744
745 // creature can be dead after Unit::Update call
746 // CORPSE/DEAD state will processed at next tick (in other case death timer will be updated unexpectedly)
747 if (!IsAlive())
748 break;
749
750 GetThreatMgr().Update(diff);
751
752 // if creature is charmed, switch to charmed AI
753 if (NeedChangeAI)
754 {
756 NeedChangeAI = false;
757 IsAIEnabled = true;
758
759 // xinef: update combat state, if npc is not in combat - return to spawn correctly by calling EnterEvadeMode
760 SelectVictim();
761 }
762
763 // if periodic combat pulse is enabled and we are both in combat and in a dungeon, do this now
764 if (m_combatPulseDelay > 0 && IsInCombat() && GetMap()->IsDungeon())
765 {
766 if (diff > m_combatPulseTime)
768 else
769 m_combatPulseTime -= diff;
770
771 if (m_combatPulseTime == 0)
772 {
773 if (AI())
774 AI()->DoZoneInCombat();
775 else
778 }
779 }
780
781 // periodic check to see if the creature has passed an evade boundary
782 if (IsAIEnabled && !IsInEvadeMode() && IsEngaged())
783 {
784 if (diff >= m_boundaryCheckTime)
785 {
786 AI()->CheckInRoom();
787 m_boundaryCheckTime = 2500;
788 }
789 else
790 m_boundaryCheckTime -= diff;
791 }
792
793 Unit* owner = GetCharmerOrOwner();
794 if (IsCharmed() && !IsWithinDistInMap(owner, GetMap()->GetVisibilityRange(), true, false, false))
795 {
797 }
798
799 if (Unit* victim = GetVictim())
800 {
801 // If we are closer than 50% of the combat reach we are going to reposition the victim
802 if (diff >= m_moveBackwardsMovementTime)
803 {
804 float MaxRange = GetCollisionRadius() + GetVictim()->GetCollisionRadius();
805
806 if (IsInDist(victim, MaxRange))
808
810 }
811 else
813
814 // Circling the target
815 if (diff >= m_moveCircleMovementTime)
816 {
817 AI()->MoveCircleChecks();
819 }
820 else
822
823 // Periodically check if able to move, if not, extend leash timer
824 if (diff >= m_extendLeashTime)
825 {
829 }
830 else
831 m_extendLeashTime -= diff;
832 }
833
834 // Call for assistance if not disabled
836 {
837 if (m_assistanceTimer <= diff)
838 {
840 {
841 SetNoCallAssistance(false);
843 }
845 }
846 else
847 {
848 m_assistanceTimer -= diff;
849 }
850 }
851
852 if (!IsInEvadeMode() && IsAIEnabled)
853 {
854 // do not allow the AI to be changed during update
855 m_AI_locked = true;
856 i_AI->UpdateAI(diff);
857 m_AI_locked = false;
858 }
859
860 // creature can be dead after UpdateAI call
861 // CORPSE/DEAD state will processed at next tick (in other case death timer will be updated unexpectedly)
862 if (!IsAlive())
863 break;
864
865 m_regenTimer -= diff;
866 if (m_regenTimer <= 0)
867 {
868 if (!IsInEvadeMode())
869 {
870 // regenerate health if not in combat or if polymorphed)
871 if (!IsInCombat() || IsPolymorphed())
874 {
875 // regenerate health if cannot reach the target and the setting is set to do so.
876 // this allows to disable the health regen of raid bosses if pathfinding has issues for whatever reason
877 if (sWorld->getBoolConfig(CONFIG_REGEN_HP_CANNOT_REACH_TARGET_IN_RAID) || !GetMap()->IsRaid())
878 {
880 LOG_DEBUG("entities.unit", "RegenerateHealth() enabled because Creature cannot reach the target. Detail: {}", GetDebugInfo());
881 }
882 else
883 LOG_DEBUG("entities.unit", "RegenerateHealth() disabled even if the Creature cannot reach the target. Detail: {}", GetDebugInfo());
884 }
885 }
886
887 if (getPowerType() == POWER_ENERGY)
889 else
891
893 }
894
895 // Evade timer is now handled by CombatManager::Update() which calls UnitAI::EvadeTimerExpired()
896 break;
897 }
898 default:
899 break;
900 }
901
903 {
904 // pussywizard:
905 if (GetOwnerGUID().IsPlayer())
906 {
907 if (m_transportCheckTimer <= diff)
908 {
911 if (newTransport != GetTransport())
912 {
913 if (GetTransport())
914 GetTransport()->RemovePassenger(this, true);
915 if (newTransport)
916 newTransport->AddPassenger(this, true);
918 //SendMovementFlagUpdate();
919 }
920 }
921 else
922 m_transportCheckTimer -= diff;
923 }
924
925 sScriptMgr->OnCreatureUpdate(this, diff);
926 }
927}
@ UNIT_STATE_LOST_CONTROL
Definition UnitDefines.h:219
@ OBJECT_FIELD_ENTRY
Definition UpdateFields.h:27
@ CONFIG_REGEN_HP_CANNOT_REACH_TARGET_IN_RAID
Definition WorldConfig.h:129
@ CONFIG_CREATURE_FAMILY_ASSISTANCE_PERIOD
Definition WorldConfig.h:240
void MoveCircleChecks()
Definition CreatureAI.cpp:438
virtual void JustRespawned()
Definition CreatureAI.h:181
virtual bool CheckInRoom()
Definition CreatureAI.cpp:609
void MoveBackwardsChecks()
Definition CreatureAI.cpp:460
void SetInCombatWithZone()
Set in combat all units in the dungeon/raid. Affect only units with IsAIEnabled.
Definition Creature.cpp:2789
void Respawn(bool force=false)
Definition Creature.cpp:1987
void RegenerateHealth()
Definition Creature.cpp:1009
void CallAssistance(Unit *target=nullptr)
Definition Creature.cpp:2399
static constexpr uint32 MOVE_BACKWARDS_CHECK_INTERVAL
Definition Creature.h:413
bool CanPeriodicallyCallForAssistance() const
Definition Creature.cpp:3646
uint32 m_moveCircleMovementTime
Definition Creature.h:415
uint32 m_moveBackwardsMovementTime
Definition Creature.h:416
static constexpr uint32 MOVE_CIRCLE_CHECK_INTERVAL
Definition Creature.h:412
Unit * SelectVictim()
Definition Unit.cpp:11453
bool IsNotReachableAndNeedRegen() const
Definition Creature.cpp:3604
void Regenerate(Powers power)
Definition Creature.cpp:943
uint32 m_extendLeashTime
Definition Creature.h:417
static constexpr uint32 EXTEND_LEASH_CHECK_INTERVAL
Definition Creature.h:414
void EndRoll(Loot *loot, Map *allowedMap)
Definition Group.cpp:1411
Transport * GetTransportForPos(uint32 phase, float x, float y, float z, WorldObject *worldobject=nullptr)
Definition Map.cpp:1117
void Update(uint32 tdiff)
Definition ThreatManager.cpp:231
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:2098
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:17101
bool IsDuringRemoveFromWorld() const
Definition Unit.h:703
void UpdateCharmAI()
Definition Unit.cpp:12607
Vehicle * m_vehicleKit
Definition Unit.h:2200
void StopMovingOnCurrentPos()
Definition Unit.cpp:13036
void Update(uint32 time) override
Definition Unit.cpp:502
void RemoveCharmAuras()
Definition Unit.cpp:8289
bool IsInDist(float x, float y, float z, float dist) const
Definition Position.h:221

References Transport::AddPassenger(), AI(), Alive, CallAssistance(), CanPeriodicallyCallForAssistance(), CreatureAI::CheckInRoom(), CONFIG_CREATURE_FAMILY_ASSISTANCE_PERIOD, CONFIG_REGEN_HP_CANNOT_REACH_TARGET_IN_RAID, Corpse, CREATURE_REGEN_INTERVAL, Dead, CreatureAI::DoZoneInCombat(), Group::EndRoll(), EXTEND_LEASH_CHECK_INTERVAL, Unit::GetCharmerOrOwner(), Unit::GetCollisionRadius(), GetDebugInfo(), GameTime::GetGameTime(), Object::GetGUID(), WorldObject::GetMap(), Unit::GetOwnerGUID(), WorldObject::GetPhaseMask(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), Unit::getPowerType(), 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(), IsEngaged(), 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_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(), SetInCombatWithZone(), SetNoCallAssistance(), sGroupMgr, sScriptMgr, Unit::StopMovingOnCurrentPos(), sWorld, Position::ToString(), TriggerJustRespawned, UNIT_STATE_LOST_CONTROL, ThreatManager::Update(), 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.

1040{
1044
1045 for (uint8 i = POWER_MANA; i < MAX_POWERS; ++i)
1047
1049
1050 return true;
1051}
Powers
Definition SharedDefines.h:256
@ MAX_POWERS
Definition SharedDefines.h:264
void UpdateAttackPowerAndDamage(bool ranged=false) override
Definition StatSystem.cpp:1084
void UpdateMaxPower(Powers power) override
Definition StatSystem.cpp:1076
void UpdateMaxHealth() override
Definition StatSystem.cpp:1070
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.

1065{
1066 float value = GetTotalAuraModValue(UNIT_MOD_ARMOR);
1067 SetArmor(int32(value));
1068}
@ UNIT_MOD_ARMOR
Definition Unit.h:162
float GetTotalAuraModValue(UnitMods unitMod) const
Definition Unit.cpp:12164
void SetArmor(int32 val)
Definition Unit.h:1158

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.

1085{
1087
1091
1092 if (ranged)
1093 {
1097 }
1098
1099 float baseAttackPower = GetFlatModifierValue(unitMod, BASE_VALUE) * GetPctModifierValue(unitMod, BASE_PCT);
1100 float attackPowerMod = GetFlatModifierValue(unitMod, TOTAL_VALUE);
1101 float attackPowerMultiplier = GetPctModifierValue(unitMod, TOTAL_PCT) - 1.0f;
1102
1103 SetInt32Value(index, uint32(baseAttackPower)); // UNIT_FIELD_(RANGED)_ATTACK_POWER
1104 SetInt32Value(indexMod, uint32(attackPowerMod)); // UNIT_FIELD_(RANGED)_ATTACK_POWER_MODS
1105 SetFloatValue(indexMulti, attackPowerMultiplier); // UNIT_FIELD_(RANGED)_ATTACK_POWER_MULTIPLIER
1106
1107 // automatically update weapon damage after attack power modification
1108 if (ranged)
1110 else
1111 {
1114 }
1115}
@ 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:626

References BASE_ATTACK, BASE_PCT, BASE_VALUE, Unit::GetFlatModifierValue(), Unit::GetPctModifierValue(), 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().

◆ UpdateCurrentWaypointInfo()

◆ UpdateEntry() [1/2]

bool Creature::UpdateEntry ( uint32  entry,
bool  updateAI 
)
inline
178{ 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 
)
561{
562 if (!InitEntry(Entry, data))
563 return false;
564
565 CreatureTemplate const* cInfo = GetCreatureTemplate();
566
567 m_regenHealth = cInfo->RegenHealth;
568
569 // creatures always have melee weapon ready if any unless specified otherwise
570 if (!GetCreatureAddon())
572
573 SetFaction(cInfo->faction);
574
575 uint32 npcflag, unit_flags, dynamicflags;
576 ObjectMgr::ChooseCreatureFlags(cInfo, npcflag, unit_flags, dynamicflags, data);
577
579 ReplaceAllNpcFlags(NPCFlags(npcflag | sGameEventMgr->GetNPCFlag(this)));
580 else
582
583 // Xinef: NPC is in combat, keep this flag!
584 unit_flags &= ~UNIT_FLAG_IN_COMBAT;
585 if (IsInCombat())
586 unit_flags |= UNIT_FLAG_IN_COMBAT;
587
588 ReplaceAllUnitFlags(UnitFlags(unit_flags));
590
591 ReplaceAllDynamicFlags(dynamicflags);
592
595
599
600 uint32 previousHealth = GetHealth();
601 uint32 previousMaxHealth = GetMaxHealth();
602 uint32 previousPlayerDamageReq = _playerDamageReq;
603
604 SelectLevel(changelevel);
605 if (previousHealth > 0)
606 {
607 SetHealth(previousHealth);
608
609 if (previousMaxHealth && previousMaxHealth > GetMaxHealth())
610 {
611 _playerDamageReq = (uint32)(previousPlayerDamageReq * GetMaxHealth() / previousMaxHealth);
612 }
613 else
614 {
615 _playerDamageReq = previousPlayerDamageReq;
616 }
617 }
618
620 CreatureBaseStats const* stats = sObjectMgr->GetCreatureBaseStats(GetLevel(), cInfo->unit_class);
621 float armor = stats->GenerateArmor(cInfo);
629
630 SetCanModifyStats(true);
632
634
635 // checked and error show at loading templates
636 if (FactionTemplateEntry const* factionTemplate = sFactionTemplateStore.LookupEntry(cInfo->faction))
637 {
638 if (factionTemplate->factionFlags & FACTION_TEMPLATE_FLAG_ASSIST_PLAYERS)
639 SetPvP(true);
640 else
641 SetPvP(false);
642 }
643
644 // updates spell bars for vehicles and set player's faction - should be called here, to overwrite faction that is set from the new template
645 if (IsVehicle())
646 {
647 if (Player* owner = Creature::GetCharmerOrOwnerPlayerOrPlayerItself()) // this check comes in case we don't have a player
648 {
649 SetFaction(owner->GetFaction()); // vehicles should have same as owner faction
650 owner->VehicleSpellInitialize();
651 }
652 }
653
654 // trigger creature is always not selectable and can not be attacked
655 if (IsTrigger())
657
659
661 {
664 }
665
667
668 // Update movement
669 if (IsRooted())
672
674
675 if (updateAI)
676 {
678 }
679
680 return true;
681}
@ CREATURE_FLAG_EXTRA_NO_TAUNT
Definition CreatureData.h:54
@ CREATURE_FLAG_EXTRA_WORLDEVENT
Definition CreatureData.h:60
@ 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:276
@ SPELL_SCHOOL_NATURE
Definition SharedDefines.h:274
@ SPELL_SCHOOL_FROST
Definition SharedDefines.h:275
@ SPELL_SCHOOL_ARCANE
Definition SharedDefines.h:277
@ SPELL_SCHOOL_FIRE
Definition SharedDefines.h:273
@ SPELL_SCHOOL_HOLY
Definition SharedDefines.h:272
@ SPELL_EFFECT_ATTACK_ME
Definition SharedDefines.h:880
@ SPELL_AURA_MOD_TAUNT
Definition SpellAuraDefines.h:74
UnitFlags2
Definition UnitDefines.h:294
@ SHEATH_STATE_MELEE
Definition UnitDefines.h:130
@ UNIT_STATE_ROOT
Definition UnitDefines.h:183
UnitFlags
Definition UnitDefines.h:255
@ UNIT_FLAG_IN_COMBAT
Definition UnitDefines.h:276
@ UNIT_MOD_RESISTANCE_SHADOW
Definition Unit.h:167
@ UNIT_MOD_RESISTANCE_FROST
Definition Unit.h:166
@ UNIT_MOD_RESISTANCE_HOLY
Definition Unit.h:163
@ UNIT_MOD_RESISTANCE_ARCANE
Definition Unit.h:168
@ UNIT_MOD_RESISTANCE_FIRE
Definition Unit.h:164
@ UNIT_MOD_RESISTANCE_NATURE
Definition Unit.h:165
bool UpdateAllStats() override
Definition StatSystem.cpp:1039
void LoadTemplateImmunities(int32 creatureImmunitiesId)
Definition Creature.cpp:2174
bool InitEntry(uint32 entry, const CreatureData *data=nullptr)
Definition Creature.cpp:456
bool IsRooted() const
Definition Creature.h:88
void SetDetectionDistance(float dist)
Definition Creature.h:210
static void ChooseCreatureFlags(CreatureTemplate const *cinfo, uint32 &npcflag, uint32 &unit_flags, uint32 &dynamicflags, CreatureData const *data=nullptr)
Definition ObjectMgr.cpp:1658
void SetFaction(uint32 faction)
Definition Unit.cpp:7056
void SetPvP(bool state)
Definition Unit.h:1046
void ReplaceAllUnitFlags(UnitFlags flags)
Remove the Unit flag specify only.
Definition Unit.h:750
virtual void SetSheath(SheathState sheathed)
Definition Unit.h:1777
void SetCanModifyStats(bool modifyStats)
Definition Unit.h:1097
void ReplaceAllUnitFlags2(UnitFlags2 flags)
Definition Unit.h:756
void SetAttackTime(WeaponAttackType att, uint32 val)
Definition Unit.h:920
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:205
int32 CreatureImmunitiesId
Definition CreatureData.h:240
int32 resistance[MAX_SPELL_SCHOOL]
Definition CreatureData.h:223
bool RegenHealth
Definition CreatureData.h:239
uint32 faction
Definition CreatureData.h:199
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::CreatureImmunitiesId, CreatureTemplate::detection_range, CreatureTemplate::dmgschool, ENABLED, 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(), LoadTemplateImmunities(), m_regenHealth, OFF_ATTACK, CreatureTemplate::RangeAttackTime, RANGED_ATTACK, CreatureTemplate::RegenHealth, Unit::ReplaceAllDynamicFlags(), Unit::ReplaceAllNpcFlags(), Unit::ReplaceAllUnitFlags(), Unit::ReplaceAllUnitFlags2(), CreatureTemplate::resistance, SelectLevel(), Unit::SetAttackTime(), Unit::SetCanModifyStats(), Unit::SetControlled(), SetDetectionDistance(), Unit::SetDualWieldMode(), Unit::SetFaction(), Unit::SetHealth(), SetMeleeDamageSchool(), Unit::SetPvP(), Unit::SetSheath(), Unit::SetStatFlatModifier(), 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::DamageTaken(), npc_molten_golem::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::JustRespawned(), boss_yoggsaron_brain::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::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(), 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::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()

void Creature::UpdateLeashExtensionTime ( )

◆ UpdateMaxHealth()

void Creature::UpdateMaxHealth ( )
overridevirtual

Implements Unit.

Reimplemented in Guardian, and Totem.

1071{
1073 SetMaxHealth(uint32(value));
1074}

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.

1077{
1078 UnitMods unitMod = UnitMods(static_cast<uint16>(UNIT_MOD_POWER_START) + power);
1079
1080 float value = GetTotalAuraModValue(unitMod);
1081 SetMaxPower(power, uint32(value));
1082}
@ UNIT_MOD_POWER_START
Definition Unit.h:180

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

Referenced by UpdateAllStats().

◆ UpdateMoveInLineOfSightState()

void Creature::UpdateMoveInLineOfSightState ( )
2559{
2560 // xinef: pets, guardians and units with scripts / smartAI should be skipped
2562 GetScriptId() || GetAIName() == "SmartAI")
2563 {
2566 return;
2567 }
2568
2569 if (IsTrigger() || IsCivilian() || GetCreatureType() == CREATURE_TYPE_NON_COMBAT_PET || IsCritter() || GetAIName() == "NullCreatureAI")
2570 {
2573 return;
2574 }
2575
2576 bool nonHostile = true;
2577 if (FactionTemplateEntry const* factionTemplate = sFactionTemplateStore.LookupEntry(GetFaction()))
2578 if (factionTemplate->hostileMask || factionTemplate->enemyFaction[0] || factionTemplate->enemyFaction[1] || factionTemplate->enemyFaction[2] || factionTemplate->enemyFaction[3])
2579 nonHostile = false;
2580
2581 if (nonHostile)
2583 else
2585}
@ UNIT_MASK_SUMMON
Definition UnitDefines.h:159
@ UNIT_MASK_GUARDIAN
Definition UnitDefines.h:161
@ UNIT_MASK_MINION
Definition UnitDefines.h:160
uint32 GetCreatureType() const
Definition Unit.cpp:11894
uint32 HasUnitTypeMask(uint32 mask) const
Definition Unit.h:741

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 ( )
3352{
3353 // Do not update movement flags if creature is controlled by a player (charm/vehicle)
3354 if (m_movedByPlayer)
3355 return;
3356
3357 CreatureTemplate const* info = GetCreatureTemplate();
3358 if (!info)
3359 return;
3360
3361 // Creatures with CREATURE_FLAG_EXTRA_NO_MOVE_FLAGS_UPDATE should control MovementFlags in your own scripts
3363 return;
3364
3365 float ground = GetFloorZ();
3366
3367 bool canHover = CanHover();
3368 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
3369
3370 if (GetMovementTemplate().IsFlightAllowed() && isInAir && !IsFalling())
3371 {
3373 SetCanFly(true);
3374 else if (!IsLevitating())
3375 SetDisableGravity(true);
3376
3377 if (!HasHoverAura() && IsHovering())
3378 SetHover(false);
3379 }
3380 else
3381 {
3383 SetCanFly(false);
3384
3385 if (IsLevitating())
3386 SetDisableGravity(false);
3387
3389 SetHover(true);
3390 }
3391
3392 if (!isInAir)
3394
3395 bool Swim = false;
3396 LiquidData const& liquidData = GetLiquidData();
3397 switch (liquidData.Status)
3398 {
3401 Swim = GetPositionZ() - liquidData.DepthLevel > GetCollisionHeight() * 0.75f; // Shallow water at ~75% of collision height
3402 break;
3404 Swim = true;
3405 break;
3406 default:
3407 break;
3408 }
3409
3410 SetSwim(CanSwim() && Swim);
3411}
@ CREATURE_FLAG_EXTRA_NO_MOVE_FLAGS_UPDATE
Definition CreatureData.h:55
@ 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
@ MOVEMENTFLAG_CAN_FLY
Definition UnitDefines.h:396
bool SetSwim(bool enable) override
Definition Creature.cpp:3258
float GetFloatValue(uint16 index) const
Definition Object.cpp:306
float GetCollisionHeight() const override
Return collision height sent to client.
Definition Unit.cpp:17107
bool IsLevitating() const
Definition Unit.h:1706
void SetCanFly(bool enable)
Add the movement flag: MOVEMENTFLAGCAN_FLY. Generaly only use by players, allowing them to fly by pre...
Definition Unit.cpp:16522
SafeUnitPointer m_movedByPlayer
Definition Unit.h:2076
bool HasHoverAura() const
Definition Unit.h:1802
LiquidData const & GetLiquidData() const
Definition Object.cpp:3145
float GetFloorZ() const
Definition Object.cpp:3101
Definition DynamicTree.h:25
Definition GridTerrainData.h:199
LiquidStatus Status
Definition GridTerrainData.h:206
float DepthLevel
Definition GridTerrainData.h:205
bool HasMovementFlag(uint32 flag) const
Definition Object.h:346

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(), CreatureMovementData::Ground, GROUND_HEIGHT_TOLERANCE, CreatureTemplate::HasFlagsExtra(), Unit::HasHoverAura(), MovementInfo::HasMovementFlag(), Hover, Unit::IsAlive(), Unit::IsFalling(), CreatureMovementData::IsFlightAllowed(), Unit::IsHovering(), Unit::IsLevitating(), LIQUID_MAP_IN_WATER, LIQUID_MAP_UNDER_WATER, LIQUID_MAP_WATER_WALK, Unit::m_movedByPlayer, WorldObject::m_movementInfo, MOVEMENTFLAG_CAN_FLY, MOVEMENTFLAG_FALLING, Unit::RemoveUnitMovementFlag(), Unit::SetCanFly(), Unit::SetDisableGravity(), Unit::SetHover(), SetSwim(), LiquidData::Status, Swim, and UNIT_FIELD_HOVERHEIGHT.

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

◆ UpdateResistances()

void Creature::UpdateResistances ( uint32  school)
overridevirtual

Implements Unit.

Reimplemented in Totem.

1054{
1055 if (school > SPELL_SCHOOL_NORMAL)
1056 {
1058 SetResistance(SpellSchools(school), int32(value));
1059 }
1060 else
1061 UpdateArmor();
1062}
@ UNIT_MOD_RESISTANCE_START
Definition Unit.h:178
void UpdateArmor() override
Definition StatSystem.cpp:1064
void SetResistance(SpellSchools school, int32 val)
Definition Unit.h:1200

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.

1035{
1036 return true;
1037}

◆ UpdateVendorItemCurrentCount()

uint32 Creature::UpdateVendorItemCurrentCount ( VendorItem const *  vItem,
uint32  used_count 
)
3144{
3145 if (!vItem->maxcount)
3146 return 0;
3147
3148 VendorItemCounts::iterator itr = m_vendorItemCounts.begin();
3149 for (; itr != m_vendorItemCounts.end(); ++itr)
3150 if (itr->itemId == vItem->item)
3151 break;
3152
3153 if (itr == m_vendorItemCounts.end())
3154 {
3155 uint32 new_count = vItem->maxcount > used_count ? vItem->maxcount - used_count : 0;
3156 m_vendorItemCounts.push_back(VendorItemCount(vItem->item, new_count));
3157 return new_count;
3158 }
3159
3160 VendorItemCount* vCount = &*itr;
3161
3162 time_t ptime = GameTime::GetGameTime().count();
3163
3164 if (time_t(vCount->lastIncrementTime + vItem->incrtime) <= ptime)
3165 {
3166 ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(vItem->item);
3167
3168 uint32 diff = uint32((ptime - vCount->lastIncrementTime) / vItem->incrtime);
3169 if ((vCount->count + diff * pProto->BuyCount) < vItem->maxcount)
3170 vCount->count += diff * pProto->BuyCount;
3171 else
3172 vCount->count = vItem->maxcount;
3173 }
3174
3175 vCount->count = vCount->count > used_count ? vCount->count - used_count : 0;
3176 vCount->lastIncrementTime = ptime;
3177 return vCount->count;
3178}

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

Referenced by Player::_StoreOrEquipNewItem().

◆ UpdateWaypointID()

Member Data Documentation

◆ _creatureImmunitiesId

int32 Creature::_creatureImmunitiesId
protected

◆ _currentWaypointNodeInfo

std::pair<uint32, uint32> Creature::_currentWaypointNodeInfo {0, 0}
private
530{0, 0};

Referenced by GetCurrentWaypointInfo(), and UpdateCurrentWaypointInfo().

◆ _damagedByPlayer

bool Creature::_damagedByPlayer
private

◆ _focusSpell

Spell const* Creature::_focusSpell
private

◆ _gossipMenuId

uint32 Creature::_gossipMenuId
protected

Referenced by GetGossipMenuId(), and SetGossipMenuId().

◆ _isCombatMovementAllowed

bool Creature::_isCombatMovementAllowed
private

◆ _isMissingSwimmingFlagOutOfCombat

bool Creature::_isMissingSwimmingFlagOutOfCombat
private

◆ _playerDamageReq

◆ _sparringPct

float Creature::_sparringPct
protected

Referenced by GetSparringPct(), and LoadSparringPct().

◆ [struct]

struct { ... } Creature::_spellFocusInfo

Referenced by HasSpellFocus().

◆ _spellFocusTarget

ObjectGuid Creature::_spellFocusTarget
private

‍Locks the target during spell cast for proper facing

Referenced by FocusTarget(), ReleaseFocus(), and SetTarget().

◆ 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_alreadyCallForHelp

bool Creature::m_alreadyCallForHelp
protected

Referenced by CallForHelp(), and SetNoCallForHelp().

◆ 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_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_textRepeat

CreatureTextRepeatGroup Creature::m_textRepeat
private

‍Saved target during spell focus for restoration

Referenced by ClearTextRepeatGroup(), GetTextRepeatGroup(), and SetTextRepeatId().

◆ 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: