TrinityCore
Loading...
Searching...
No Matches
Creature.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef TRINITYCORE_CREATURE_H
19#define TRINITYCORE_CREATURE_H
20
21#include "Unit.h"
22#include "Common.h"
23#include "CreatureData.h"
24#include "DatabaseEnvFwd.h"
25#include "Duration.h"
26#include "Loot.h"
27#include "GridObject.h"
28#include "MapObject.h"
29#include <list>
30
31class CreatureAI;
32class CreatureGroup;
33class Group;
34class Quest;
35class Player;
36class SpellInfo;
37class WorldSession;
38
40
49
50typedef std::list<VendorItemCount> VendorItemCounts;
51
52// max different by z coordinate for creature aggro reaction
53#define CREATURE_Z_ATTACK_RANGE 3
54
55#define MAX_VENDOR_ITEMS 150 // Limitation in 3.x.x item count in SMSG_LIST_INVENTORY
56
58{
59 Empty = 0,
60 DontLikeYou = 1,
61 TooFar = 2,
62 Dead = 3,
63 YouAreDead = 4
64};
65
66//used for handling non-repeatable random texts
67typedef std::vector<uint8> CreatureTextRepeatIds;
68typedef std::unordered_map<uint8, CreatureTextRepeatIds> CreatureTextRepeatGroup;
69
70class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public MapObject
71{
72 public:
73 explicit Creature(bool isWorldObject = false);
74
75 void AddToWorld() override;
76 void RemoveFromWorld() override;
77
78 float GetNativeObjectScale() const override;
79 void SetObjectScale(float scale) override;
80 void SetDisplayId(uint32 modelId) override;
81
82 void DisappearAndDie() { ForcedDespawn(0); }
83
84 bool Create(ObjectGuid::LowType guidlow, Map* map, uint32 phaseMask, uint32 entry, Position const& pos, CreatureData const* data = nullptr, uint32 vehId = 0, bool dynamic = false);
85 bool LoadCreaturesAddon();
86 void SelectLevel();
87 void UpdateLevelDependantStats();
88 void LoadEquipment(int8 id = 1, bool force = false);
89 void SetSpawnHealth();
90 void LoadTemplateRoot();
91
92 ObjectGuid::LowType GetSpawnId() const { return m_spawnId; }
93
94 void Update(uint32 time) override; // overwrited Unit::Update
95 void GetRespawnPosition(float &x, float &y, float &z, float* ori = nullptr, float* dist = nullptr) const;
96 bool IsSpawnedOnTransport() const { return m_creatureData && m_creatureData->mapId != GetMapId(); }
97
98 void SetCorpseDelay(uint32 delay, bool ignoreCorpseDecayRatio = false)
99 {
100 m_corpseDelay = delay;
101 if (ignoreCorpseDecayRatio)
102 m_ignoreCorpseDecayRatio = true;
103 }
104 uint32 GetCorpseDelay() const { return m_corpseDelay; }
105 bool IsRacialLeader() const { return GetCreatureTemplate()->RacialLeader; }
106 bool IsCivilian() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_CIVILIAN) != 0; }
107 bool IsTrigger() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER) != 0; }
108 bool IsGuard() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_GUARD) != 0; }
109
110 void InitializeMovementFlags();
111 void UpdateMovementFlags();
112
113 CreatureMovementData const& GetMovementTemplate() const;
114 bool CanWalk() const { return GetMovementTemplate().IsGroundAllowed(); }
115 bool CanSwim() const override;
116 bool CanEnterWater() const override;
117 bool CanFly() const override { return GetMovementTemplate().IsFlightAllowed() || IsFlying(); }
118 bool CanHover() const { return GetMovementTemplate().Ground == CreatureGroundMovementType::Hover || IsHovering(); }
119
120 MovementGeneratorType GetDefaultMovementType() const override { return m_defaultMovementType; }
121 void SetDefaultMovementType(MovementGeneratorType mgt) { m_defaultMovementType = mgt; }
122
123 bool IsDungeonBoss() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_DUNGEON_BOSS) != 0; }
124 bool IsAffectedByDiminishingReturns() const override { return Unit::IsAffectedByDiminishingReturns() || (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_ALL_DIMINISH) != 0; }
125
126 Unit* SelectVictim();
127
128 void SetReactState(ReactStates st) { m_reactState = st; }
129 ReactStates GetReactState() const { return m_reactState; }
130 bool HasReactState(ReactStates state) const { return (m_reactState == state); }
131 void InitializeReactState();
132
135 void SetImmuneToAll(bool apply) override { Unit::SetImmuneToAll(apply, HasReactState(REACT_PASSIVE)); }
136 using Unit::IsImmuneToPC;
138 void SetImmuneToPC(bool apply) override { Unit::SetImmuneToPC(apply, HasReactState(REACT_PASSIVE)); }
141 void SetImmuneToNPC(bool apply) override { Unit::SetImmuneToNPC(apply, HasReactState(REACT_PASSIVE)); }
142
144 bool isCanInteractWithBattleMaster(Player* player, bool msg) const;
145 bool CanResetTalents(Player* player, bool pet) const;
146 bool CanCreatureAttack(Unit const* victim, bool force = true) const;
147 void LoadTemplateImmunities();
148 bool IsImmunedToSpell(SpellInfo const* spellInfo, WorldObject const* caster, bool requireImmunityPurgesEffectAttribute = false) const override;
149 bool IsImmunedToSpellEffect(SpellInfo const* spellInfo, SpellEffectInfo const& spellEffectInfo, WorldObject const* caster, bool requireImmunityPurgesEffectAttribute = false) const override;
150 bool isElite() const;
151 bool isWorldBoss() const;
152
153 uint8 GetLevelForTarget(WorldObject const* target) const override; // overwrite Unit::GetLevelForTarget for boss level support
154
156 bool IsEvadingAttacks() const { return IsInEvadeMode() || CanNotReachTarget(); }
157
158 bool AIM_Destroy();
159 bool AIM_Create(CreatureAI* ai = nullptr);
160 bool AIM_Initialize(CreatureAI* ai = nullptr);
161 void Motion_Initialize();
162
163 CreatureAI* AI() const { return reinterpret_cast<CreatureAI*>(GetAI()); }
164
165 uint32 GetShieldBlockValue() const override;
166
167 SpellSchoolMask GetMeleeDamageSchoolMask(WeaponAttackType /*attackType*/ = BASE_ATTACK, uint8 /*damageIndex*/ = 0) const override { return m_meleeDamageSchoolMask; }
168 void SetMeleeDamageSchool(SpellSchools school) { m_meleeDamageSchoolMask = SpellSchoolMask(1 << school); }
169
170 bool HasSpell(uint32 spellID) const override;
171
172 bool UpdateEntry(uint32 entry, CreatureData const* data = nullptr, bool updateLevel = true);
173 void SetPhaseMask(uint32 newPhaseMask, bool update) override;// overwrite Unit::SetPhaseMask
174
175 bool UpdateStats(Stats stat) override;
176 bool UpdateAllStats() override;
177 void UpdateResistances(uint32 school) override;
178 void UpdateArmor() override;
179 void UpdateMaxHealth() override;
180 void UpdateMaxPower(Powers power) override;
181 void UpdateAttackPowerAndDamage(bool ranged = false) override;
182 void CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bool addTotalPct, float& minDamage, float& maxDamage, uint8 damageIndex) const override;
183
184 void SetCanDualWield(bool value) override;
185 int8 GetOriginalEquipmentId() const { return m_originalEquipmentId; }
186 uint8 GetCurrentEquipmentId() const { return m_equipmentId; }
187 void SetCurrentEquipmentId(uint8 id) { m_equipmentId = id; }
188
189 float GetSpellDamageMod(int32 Rank) const;
190
191 VendorItemData const* GetVendorItems() const;
192 uint32 GetVendorItemCurrentCount(VendorItem const* vItem);
193 uint32 UpdateVendorItemCurrentCount(VendorItem const* vItem, uint32 used_count);
194
195 CreatureTemplate const* GetCreatureTemplate() const { return m_creatureInfo; }
196 CreatureData const* GetCreatureData() const { return m_creatureData; }
197 CreatureAddon const* GetCreatureAddon() const;
198
199 std::string const& GetAIName() const;
200 std::string GetScriptName() const;
201 uint32 GetScriptId() const;
202 void InheritStringIds(Creature const* parent);
203 bool HasStringId(std::string_view id) const;
204 void SetScriptStringId(std::string id);
205 std::string_view GetStringId(StringIdType type) const { return m_stringIds[size_t(type)] ? std::string_view(*m_stringIds[size_t(type)]) : std::string_view(); }
206
207 // override WorldObject function for proper name localization
208 std::string const& GetNameForLocaleIdx(LocaleConstant locale_idx) const override;
209
210 void setDeathState(DeathState s) override; // override virtual Unit::setDeathState
211
212 bool LoadFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap, bool allowDuplicate);
213 void SaveToDB();
214 // overriden in Pet
215 virtual void SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask);
216 static bool DeleteFromDB(ObjectGuid::LowType spawnId);
217
219 void StartPickPocketRefillTimer();
220 void ResetPickPocketRefillTimer() { _pickpocketLootRestore = 0; }
221 bool CanGeneratePickPocketLoot() const;
222 ObjectGuid GetLootRecipientGUID() const { return m_lootRecipient; }
223 Player* GetLootRecipient() const;
224 Group* GetLootRecipientGroup() const;
225 bool hasLootRecipient() const { return !m_lootRecipient.IsEmpty() || !m_lootRecipientGroup.IsEmpty(); }
226 bool isTappedBy(Player const* player) const; // return true if the creature is tapped by the player or a member of his party.
227
228 void SetLootRecipient (Unit* unit, bool withGroup = true);
229 void AllLootRemovedFromCorpse();
230
231 uint16 GetLootMode() const { return m_LootMode; }
232 bool HasLootMode(uint16 lootMode) { return (m_LootMode & lootMode) != 0; }
233 void SetLootMode(uint16 lootMode) { m_LootMode = lootMode; }
234 void AddLootMode(uint16 lootMode) { m_LootMode |= lootMode; }
235 void RemoveLootMode(uint16 lootMode) { m_LootMode &= ~lootMode; }
236 void ResetLootMode() { m_LootMode = LOOT_MODE_DEFAULT; }
237
239
240 bool CanStartAttack(Unit const* u, bool force) const;
241 float GetAttackDistance(Unit const* player) const;
242 float GetAggroRange(Unit const* target) const;
243
244 void SendAIReaction(AiReaction reactionType);
245
246 Unit* SelectNearestTarget(float dist = 0, bool playerOnly = false) const;
247 Unit* SelectNearestTargetInAttackDistance(float dist = 0) const;
248 Unit* SelectNearestHostileUnitInAggroRange(bool useLOS = false, bool ignoreCivilians = false) const;
249
250 void DoFleeToGetAssistance();
251 void CallForHelp(float fRadius);
252 void CallAssistance();
253 void SetNoCallAssistance(bool val) { m_AlreadyCallAssistance = val; }
254 void SetNoSearchAssistance(bool val) { m_AlreadySearchedAssistance = val; }
255 bool HasSearchedAssistance() const { return m_AlreadySearchedAssistance; }
256 bool CanAssistTo(Unit const* u, Unit const* enemy, bool checkfaction = true) const;
257 bool _IsTargetAcceptable(Unit const* target) const;
258 bool CanIgnoreFeignDeath() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_IGNORE_FEIGN_DEATH) != 0; }
259
260 void RemoveCorpse(bool setSpawnTime = true, bool destroyForNearbyPlayers = true);
261
262 void DespawnOrUnsummon(Milliseconds timeToDespawn = 0s, Seconds forceRespawnTime = 0s);
263
264 time_t const& GetRespawnTime() const { return m_respawnTime; }
265 time_t GetRespawnTimeEx() const;
266 void SetRespawnTime(uint32 respawn);
267 void Respawn(bool force = false);
268 void SaveRespawnTime(uint32 forceDelay = 0);
269
270 uint32 GetRespawnDelay() const { return m_respawnDelay; }
271 void SetRespawnDelay(uint32 delay) { m_respawnDelay = delay; }
272
273 float GetWanderDistance() const { return m_wanderDistance; }
274 void SetWanderDistance(float dist) { m_wanderDistance = dist; }
275
276 void DoImmediateBoundaryCheck() { m_boundaryCheckTime = 0; }
277 uint32 GetCombatPulseDelay() const { return m_combatPulseDelay; }
278 void SetCombatPulseDelay(uint32 delay) // (secs) interval at which the creature pulses the entire zone into combat (only works in dungeons)
279 {
280 m_combatPulseDelay = delay;
281 if (m_combatPulseTime == 0 || m_combatPulseTime > delay)
282 m_combatPulseTime = delay;
283 }
284
285 uint32 m_groupLootTimer; // (msecs)timer used for group loot
286 ObjectGuid lootingGroupLowGUID; // used to find group which is looting corpse
287
288 void SendZoneUnderAttackMessage(Player* attacker);
289
290 bool hasQuest(uint32 quest_id) const override;
291 bool hasInvolvedQuest(uint32 quest_id) const override;
292
293 bool CanRegenerateHealth() const { return !_regenerateHealthLock && _regenerateHealth; }
294 void SetRegenerateHealth(bool value) { _regenerateHealthLock = !value; }
295 virtual uint8 GetPetAutoSpellSize() const { return MAX_SPELL_CHARM; }
296 virtual uint32 GetPetAutoSpellOnPos(uint8 pos) const;
297 float GetPetChaseDistance() const;
298
299 void SetCannotReachTarget(bool cannotReach);
300 bool CanNotReachTarget() const { return m_cannotReachTarget; }
301
302 void SetHomePosition(float x, float y, float z, float o) { m_homePosition.Relocate(x, y, z, o); }
303 void SetHomePosition(Position const& pos) { m_homePosition.Relocate(pos); }
304 void GetHomePosition(float& x, float& y, float& z, float& ori) const { m_homePosition.GetPosition(x, y, z, ori); }
305 Position const& GetHomePosition() const { return m_homePosition; }
306
307 void SetTransportHomePosition(float x, float y, float z, float o) { m_transportHomePosition.Relocate(x, y, z, o); }
308 void SetTransportHomePosition(Position const& pos) { m_transportHomePosition.Relocate(pos); }
309 void GetTransportHomePosition(float& x, float& y, float& z, float& ori) const { m_transportHomePosition.GetPosition(x, y, z, ori); }
310 Position const& GetTransportHomePosition() const { return m_transportHomePosition; }
311
312 uint32 GetWaypointPath() const { return _waypointPathId; }
313 void LoadPath(uint32 pathid) { _waypointPathId = pathid; }
314
315 // nodeId, pathId
316 std::pair<uint32, uint32> GetCurrentWaypointInfo() const { return _currentWaypointNodeInfo; }
317 void UpdateCurrentWaypointInfo(uint32 nodeId, uint32 pathId) { _currentWaypointNodeInfo = { nodeId, pathId }; }
318
319 bool IsReturningHome() const;
320
321 void SearchFormation();
322 CreatureGroup* GetFormation() { return m_formation; }
323 void SetFormation(CreatureGroup* formation) { m_formation = formation; }
324 bool IsFormationLeader() const;
325 void SignalFormationMovement();
326 bool IsFormationLeaderMoveAllowed() const;
327
328 void SetDisableReputationGain(bool disable) { DisableReputationGain = disable; }
329 bool IsReputationGainDisabled() const { return DisableReputationGain; }
330 bool IsDamageEnoughForLootingAndReward() const { return (m_creatureInfo->flags_extra & CREATURE_FLAG_EXTRA_NO_PLAYER_DAMAGE_REQ) || (m_PlayerDamageReq == 0); }
331 void LowerPlayerDamageReq(uint32 unDamage);
332 void ResetPlayerDamageReq() { m_PlayerDamageReq = GetHealth() / 2; }
334
335 uint32 GetOriginalEntry() const { return m_originalEntry; }
336 void SetOriginalEntry(uint32 entry) { m_originalEntry = entry; }
337
338 // There's many places not ready for dynamic spawns. This allows them to live on for now.
339 void SetRespawnCompatibilityMode(bool mode = true) { m_respawnCompatibilityMode = mode; }
340 bool GetRespawnCompatibilityMode() { return m_respawnCompatibilityMode; }
341
342 static float _GetDamageMod(int32 Rank);
343
344 float m_SightDistance, m_CombatDistance;
345
346 bool m_isTempWorldObject; //true when possessed
347
348 // Handling caster facing during spellcast
349 void SetTarget(ObjectGuid const& guid) override;
350 void DoNotReacquireSpellFocusTarget();
351 void SetSpellFocus(Spell const* focusSpell, WorldObject const* target);
352 bool HasSpellFocus(Spell const* focusSpell = nullptr) const override;
353 void ReleaseSpellFocus(Spell const* focusSpell = nullptr, bool withDelay = true);
354
355 bool IsMovementPreventedByCasting() const override;
356
357 // Part of Evade mechanics
358 time_t GetLastDamagedTime() const { return _lastDamagedTime; }
359 void SetLastDamagedTime(time_t val) { _lastDamagedTime = val; }
360
361 CreatureTextRepeatIds GetTextRepeatGroup(uint8 textGroup);
362 void SetTextRepeatId(uint8 textGroup, uint8 id);
363 void ClearTextRepeatGroup(uint8 textGroup);
364 bool IsEscorted() const;
365
366 bool CanGiveExperience() const;
367
368 bool IsEngaged() const override;
369 void AtEngage(Unit* target) override;
370 void AtDisengage() override;
371
373 {
374 return !_isMissingCanSwimFlagOutOfCombat;
375 }
376 void RefreshCanSwimFlag(bool recheck = false);
377
378 std::string GetDebugInfo() const override;
379
380 void ExitVehicle(Position const* exitPosition = nullptr) override;
381
382 protected:
383 bool CreateFromProto(ObjectGuid::LowType guidlow, uint32 entry, CreatureData const* data = nullptr, uint32 vehId = 0);
384 bool InitEntry(uint32 entry, CreatureData const* data = nullptr);
385
386 // vendor items
388
389 static float _GetHealthMod(int32 Rank);
390
393
396 time_t m_corpseRemoveTime; // (msecs)timer for death or corpse disappearance
397 time_t m_respawnTime; // (secs) time of next respawn
398 uint32 m_respawnDelay; // (secs) delay between corpse disappearance and respawning
399 uint32 m_corpseDelay; // (secs) delay between death and corpse disappearance
402 uint32 m_boundaryCheckTime; // (msecs) remaining time for next evade boundary check
403 uint32 m_combatPulseTime; // (msecs) remaining time for next zone-in-combat pulse
404 uint32 m_combatPulseDelay; // (secs) how often the creature puts the entire zone in combat (only works in dungeons)
405
406 ReactStates m_reactState; // for AI, not charmInfo
407 void RegenerateHealth();
408 void Regenerate(Powers power);
413
418
423
426
428
429 CreatureTemplate const* m_creatureInfo; // Can differ from sObjectMgr->GetCreatureTemplate(GetEntry()) in difficulty mode > 0
431 std::array<std::string const*, 3> m_stringIds;
433
434 uint16 m_LootMode; // Bitmask (default: LOOT_MODE_DEFAULT) that determines what loot will be lootable
435
436 bool IsInvisibleDueToDespawn() const override;
437 bool CanAlwaysSee(WorldObject const* obj) const override;
438
439 private:
440 void ForcedDespawn(uint32 timeMSToDespawn = 0, Seconds forceRespawnTimer = 0s);
441 bool CheckNoGrayAggroConfig(uint32 playerLevel, uint32 creatureLevel) const; // No aggro from gray creatures
442
443 // Waypoint path
445 std::pair<uint32/*nodeId*/, uint32/*pathId*/> _currentWaypointNodeInfo;
446
447 // Formation var
451
452 /* Spell focus system */
453 void ReacquireSpellFocusTarget();
454 struct
455 {
456 ::Spell const* Spell = nullptr;
457 uint32 Delay = 0; // ms until the creature's target should snap back (0 = no snapback scheduled)
458 ObjectGuid Target; // the creature's "real" target while casting
459 float Orientation = 0.0f; // the creature's "real" orientation while casting
460 } _spellFocusInfo;
461
462 time_t _lastDamagedTime; // Part of Evade mechanics
464
465 // Regenerate health
466 bool _regenerateHealth; // Set on creation
467 bool _regenerateHealthLock; // Dynamically set
468
470};
471
473{
474 public:
475 AssistDelayEvent(ObjectGuid victim, Unit& owner) : BasicEvent(), m_victim(victim), m_owner(owner) { }
476
477 bool Execute(uint64 e_time, uint32 p_time) override;
478 void AddAssistant(ObjectGuid guid) { m_assistants.push_back(guid); }
479 private:
481
485};
486
488{
489 public:
490 ForcedDespawnDelayEvent(Creature& owner, Seconds respawnTimer) : BasicEvent(), m_owner(owner), m_respawnTimer(respawnTimer) { }
491 bool Execute(uint64 e_time, uint32 p_time) override;
492
493 private:
496};
497
498#endif
LocaleConstant
Definition Common.h:48
@ CREATURE_FLAG_EXTRA_DUNGEON_BOSS
@ CREATURE_FLAG_EXTRA_TRIGGER
@ CREATURE_FLAG_EXTRA_IGNORE_FEIGN_DEATH
@ CREATURE_FLAG_EXTRA_NO_PLAYER_DAMAGE_REQ
@ CREATURE_FLAG_EXTRA_CIVILIAN
@ CREATURE_FLAG_EXTRA_GUARD
@ CREATURE_FLAG_EXTRA_ALL_DIMINISH
static const uint32 MAX_CREATURE_SPELLS
VendorInventoryReason
Definition Creature.h:58
std::vector< uint8 > CreatureTextRepeatIds
Definition Creature.h:67
std::list< VendorItemCount > VendorItemCounts
Definition Creature.h:50
std::unordered_map< uint8, CreatureTextRepeatIds > CreatureTextRepeatGroup
Definition Creature.h:68
#define TC_GAME_API
Definition Define.h:114
uint8_t uint8
Definition Define.h:135
int8_t int8
Definition Define.h:131
int32_t int32
Definition Define.h:129
uint64_t uint64
Definition Define.h:132
uint16_t uint16
Definition Define.h:134
uint32_t uint32
Definition Define.h:133
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition Duration.h:27
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition Duration.h:24
MovementGeneratorType
std::list< ObjectGuid > GuidList
Definition ObjectGuid.h:261
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition Optional.h:25
static void SaveToDB(QuestPool const &pool, CharacterDatabaseTransaction trans)
SpellSchools
SpellSchoolMask
StringIdType
AiReaction
WeaponAttackType
@ BASE_ATTACK
Powers
@ LOOT_MODE_DEFAULT
Stats
ReactStates
@ REACT_PASSIVE
#define MAX_SPELL_CHARM
Definition Unit.h:36
DeathState
Definition Unit.h:224
@ UNIT_STATE_EVADE
Definition Unit.h:256
ObjectGuid m_victim
Definition Creature.h:482
AssistDelayEvent(ObjectGuid victim, Unit &owner)
Definition Creature.h:475
void AddAssistant(ObjectGuid guid)
Definition Creature.h:478
GuidList m_assistants
Definition Creature.h:483
time_t _pickpocketLootRestore
Timers.
Definition Creature.h:395
void SetCombatPulseDelay(uint32 delay)
Definition Creature.h:278
VendorItemCounts m_vendorItemCounts
Definition Creature.h:387
time_t const & GetRespawnTime() const
Definition Creature.h:264
virtual uint8 GetPetAutoSpellSize() const
Definition Creature.h:295
void SetHomePosition(float x, float y, float z, float o)
Definition Creature.h:302
float m_wanderDistance
Definition Creature.h:401
void SetNoSearchAssistance(bool val)
Definition Creature.h:254
Loot loot
Definition Creature.h:218
void RemoveLootMode(uint16 lootMode)
Definition Creature.h:235
ObjectGuid lootingGroupLowGUID
Definition Creature.h:286
int8 GetOriginalEquipmentId() const
Definition Creature.h:185
bool IsTrigger() const
Definition Creature.h:107
std::array< std::string const *, 3 > m_stringIds
Definition Creature.h:431
void SetHomePosition(Position const &pos)
Definition Creature.h:303
void ResetLootMode()
Definition Creature.h:236
void DoImmediateBoundaryCheck()
Definition Creature.h:276
CreatureTextRepeatGroup m_textRepeat
Definition Creature.h:463
bool _regenerateHealth
Definition Creature.h:466
bool IsDungeonBoss() const
Definition Creature.h:123
SpellSchoolMask m_meleeDamageSchoolMask
Definition Creature.h:419
int8 m_originalEquipmentId
Definition Creature.h:412
void SetDisableReputationGain(bool disable)
Definition Creature.h:328
ObjectGuid::LowType m_spawnId
For new or temporary creatures is 0 for saved it is lowguid.
Definition Creature.h:410
Position m_transportHomePosition
Definition Creature.h:425
uint16 GetLootMode() const
Definition Creature.h:231
bool IsCivilian() const
Definition Creature.h:106
void SetImmuneToPC(bool apply) override
Definition Creature.h:138
bool IsReputationGainDisabled() const
Definition Creature.h:329
bool HasCanSwimFlagOutOfCombat() const
Definition Creature.h:372
Optional< std::string > m_scriptStringId
Definition Creature.h:432
bool m_cannotReachTarget
Definition Creature.h:416
bool m_respawnCompatibilityMode
Definition Creature.h:450
bool CanWalk() const
Definition Creature.h:114
CreatureTemplate const * m_creatureInfo
Definition Creature.h:429
bool IsSpawnedOnTransport() const
Definition Creature.h:96
bool CanFly() const override
Definition Creature.h:117
void GetHomePosition(float &x, float &y, float &z, float &ori) const
Definition Creature.h:304
Position const & GetHomePosition() const
Definition Creature.h:305
uint32 GetWaypointPath() const
Definition Creature.h:312
void SetLastDamagedTime(time_t val)
Definition Creature.h:359
bool IsEvadingAttacks() const
Definition Creature.h:156
bool HasReactState(ReactStates state) const
Definition Creature.h:130
bool m_triggerJustAppeared
Definition Creature.h:449
void GetTransportHomePosition(float &x, float &y, float &z, float &ori) const
Definition Creature.h:309
uint32 GetOriginalEntry() const
Definition Creature.h:335
ObjectGuid GetLootRecipientGUID() const
Definition Creature.h:222
uint32 m_baseAttackPower
Definition Creature.h:420
MovementGeneratorType m_defaultMovementType
Definition Creature.h:409
void SetReactState(ReactStates st)
Definition Creature.h:128
bool GetRespawnCompatibilityMode()
Definition Creature.h:340
bool CanHover() const
Definition Creature.h:118
uint32 _waypointPathId
Definition Creature.h:444
void ResetPlayerDamageReq()
Definition Creature.h:332
std::pair< uint32, uint32 > _currentWaypointNodeInfo
Definition Creature.h:445
bool hasLootRecipient() const
Definition Creature.h:225
void SetRespawnCompatibilityMode(bool mode=true)
Definition Creature.h:339
void SetCurrentEquipmentId(uint8 id)
Definition Creature.h:187
void SetRespawnDelay(uint32 delay)
Definition Creature.h:271
uint32 m_cannotReachTimer
Definition Creature.h:417
uint32 m_respawnDelay
Definition Creature.h:398
time_t m_corpseRemoveTime
Definition Creature.h:396
uint32 m_combatPulseDelay
Definition Creature.h:404
void UpdateCurrentWaypointInfo(uint32 nodeId, uint32 pathId)
Definition Creature.h:317
time_t m_respawnTime
Definition Creature.h:397
void SetRegenerateHealth(bool value)
Definition Creature.h:294
CreatureData const * m_creatureData
Definition Creature.h:430
float m_CombatDistance
Definition Creature.h:344
uint16 m_LootMode
Definition Creature.h:434
uint32 m_boundaryCheckTime
Definition Creature.h:402
ObjectGuid m_lootRecipient
Definition Creature.h:391
Position m_homePosition
Definition Creature.h:424
CreatureData const * GetCreatureData() const
Definition Creature.h:196
uint32 m_PlayerDamageReq
Definition Creature.h:333
std::pair< uint32, uint32 > GetCurrentWaypointInfo() const
Definition Creature.h:316
bool CanIgnoreFeignDeath() const
Definition Creature.h:258
ObjectGuid::LowType GetSpawnId() const
Definition Creature.h:92
bool CanNotReachTarget() const
Definition Creature.h:300
bool m_AlreadyCallAssistance
Definition Creature.h:414
CreatureTemplate const * GetCreatureTemplate() const
Definition Creature.h:195
uint32 GetRespawnDelay() const
Definition Creature.h:270
Position const & GetTransportHomePosition() const
Definition Creature.h:310
bool CanRegenerateHealth() const
Definition Creature.h:293
bool DisableReputationGain
Definition Creature.h:427
CreatureGroup * m_formation
Definition Creature.h:448
bool HasSearchedAssistance() const
Definition Creature.h:255
void SetTransportHomePosition(Position const &pos)
Definition Creature.h:308
uint32 m_corpseDelay
Definition Creature.h:399
bool _regenerateHealthLock
Definition Creature.h:467
void SetImmuneToNPC(bool apply) override
Definition Creature.h:141
uint8 m_equipmentId
Definition Creature.h:411
bool IsDamageEnoughForLootingAndReward() const
Definition Creature.h:330
SpellSchoolMask GetMeleeDamageSchoolMask(WeaponAttackType=BASE_ATTACK, uint8=0) const override
Definition Creature.h:167
CreatureGroup * GetFormation()
Definition Creature.h:322
bool m_AlreadySearchedAssistance
Definition Creature.h:415
uint32 GetCorpseDelay() const
Definition Creature.h:104
std::string_view GetStringId(StringIdType type) const
Definition Creature.h:205
uint32 m_originalEntry
Definition Creature.h:422
void SetImmuneToAll(bool apply) override
Definition Creature.h:135
bool m_isTempWorldObject
Definition Creature.h:346
void AddLootMode(uint16 lootMode)
Definition Creature.h:234
ObjectGuid Target
Definition Creature.h:458
ReactStates m_reactState
Definition Creature.h:406
time_t _lastDamagedTime
Definition Creature.h:462
ReactStates GetReactState() const
Definition Creature.h:129
void SetTransportHomePosition(float x, float y, float z, float o)
Definition Creature.h:307
void SetWanderDistance(float dist)
Definition Creature.h:274
time_t GetLastDamagedTime() const
Definition Creature.h:358
ObjectGuid m_lootRecipientGroup
Definition Creature.h:392
MovementGeneratorType GetDefaultMovementType() const override
Definition Creature.h:120
uint8 GetCurrentEquipmentId() const
Definition Creature.h:186
void SetFormation(CreatureGroup *formation)
Definition Creature.h:323
void SetCorpseDelay(uint32 delay, bool ignoreCorpseDecayRatio=false)
Definition Creature.h:98
uint32 GetCombatPulseDelay() const
Definition Creature.h:277
void SetMeleeDamageSchool(SpellSchools school)
Definition Creature.h:168
float GetWanderDistance() const
Definition Creature.h:273
bool HasLootMode(uint16 lootMode)
Definition Creature.h:232
void ResetPickPocketRefillTimer()
Definition Creature.h:220
void SetNoCallAssistance(bool val)
Definition Creature.h:253
bool IsAffectedByDiminishingReturns() const override
Definition Creature.h:124
bool IsRacialLeader() const
Definition Creature.h:105
bool m_ignoreCorpseDecayRatio
Definition Creature.h:400
bool IsInEvadeMode() const
Definition Creature.h:155
bool IsGuard() const
Definition Creature.h:108
CreatureAI * AI() const
Definition Creature.h:163
uint32 m_baseRangedAttackPower
Definition Creature.h:421
void SetLootMode(uint16 lootMode)
Definition Creature.h:233
uint32 m_groupLootTimer
Definition Creature.h:285
void SetDefaultMovementType(MovementGeneratorType mgt)
Definition Creature.h:121
void LoadPath(uint32 pathid)
Definition Creature.h:313
void SetOriginalEntry(uint32 entry)
Definition Creature.h:336
bool _isMissingCanSwimFlagOutOfCombat
Definition Creature.h:469
void DisappearAndDie()
Definition Creature.h:82
uint32 m_combatPulseTime
Definition Creature.h:403
Seconds const m_respawnTimer
Definition Creature.h:495
ForcedDespawnDelayEvent(Creature &owner, Seconds respawnTimer)
Definition Creature.h:490
Definition Group.h:165
Definition Map.h:302
uint32 LowType
Definition ObjectGuid.h:142
virtual bool hasQuest(uint32) const
Definition Object.h:158
virtual void SetObjectScale(float scale)
Definition Object.h:85
virtual bool hasInvolvedQuest(uint32) const
Definition Object.h:159
Definition Spell.h:152
Definition Unit.h:783
void SetImmuneToAll(bool apply, bool keepCombat)
Definition Unit.cpp:8243
void SetImmuneToPC(bool apply, bool keepCombat)
Definition Unit.cpp:8256
virtual bool IsMovementPreventedByCasting() const
Definition Unit.cpp:3146
void AddToWorld() override
Definition Unit.cpp:9569
virtual void SetCanDualWield(bool value)
Definition Unit.h:852
virtual bool UpdateAllStats()=0
virtual void UpdateAttackPowerAndDamage(bool ranged=false)=0
virtual bool IsImmunedToSpell(SpellInfo const *spellInfo, WorldObject const *caster, bool requireImmunityPurgesEffectAttribute=false) const
Definition Unit.cpp:7631
virtual void AtDisengage()
Definition Unit.h:1935
virtual void UpdateResistances(uint32 school)=0
std::string GetDebugInfo() const override
Definition Unit.cpp:13921
void SetImmuneToNPC(bool apply, bool keepCombat)
Definition Unit.cpp:8279
UnitAI * GetAI() const
Definition Unit.h:814
virtual bool HasSpell(uint32) const
Definition Unit.h:1175
virtual bool IsAffectedByDiminishingReturns() const
Definition Unit.h:835
bool IsImmuneToNPC() const
Definition Unit.h:1154
virtual bool CanEnterWater() const =0
virtual bool IsImmunedToSpellEffect(SpellInfo const *spellInfo, SpellEffectInfo const &spellEffectInfo, WorldObject const *caster, bool requireImmunityPurgesEffectAttribute=false) const
Definition Unit.cpp:7751
bool IsImmuneToAll() const
Definition Unit.h:1148
virtual void UpdateArmor()=0
bool IsHovering() const
Definition Unit.h:1233
virtual void UpdateMaxPower(Powers power)=0
uint32 GetHealth() const
Definition Unit.h:927
virtual uint32 GetShieldBlockValue() const =0
virtual bool UpdateStats(Stats stat)=0
void SetPhaseMask(uint32 newPhaseMask, bool update) override
Definition Unit.cpp:12123
uint8 GetLevelForTarget(WorldObject const *) const override
Definition Unit.h:904
virtual void SetDisplayId(uint32 modelId)
Definition Unit.cpp:10383
virtual void SetTarget(ObjectGuid const &)=0
bool HasUnitState(const uint32 f) const
Definition Unit.h:890
virtual void Update(uint32 time) override
Definition Unit.cpp:440
virtual bool CanSwim() const
Definition Unit.cpp:12789
virtual float GetNativeObjectScale() const
Definition Unit.h:1596
void RemoveFromWorld() override
Definition Unit.cpp:9578
virtual void UpdateMaxHealth()=0
virtual void CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bool addTotalPct, float &minDamage, float &maxDamage, uint8 damageIndex) const =0
virtual bool HasSpellFocus(Spell const *=nullptr) const
Definition Unit.h:1494
virtual void setDeathState(DeathState s)
Definition Unit.cpp:8668
virtual void AtEngage(Unit *target)
Definition Unit.cpp:8725
bool IsFlying() const
Definition Unit.h:1778
virtual bool IsEngaged() const
Definition Unit.h:1140
bool IsImmuneToPC() const
Definition Unit.h:1151
virtual void ExitVehicle(Position const *exitPosition=nullptr)
Definition Unit.cpp:12632
uint32 GetMapId() const
Definition Position.h:193
std::string const & GetNameForLocaleIdx(LocaleConstant) const override
Definition Object.h:387
virtual bool IsInvisibleDueToDespawn() const
Definition Object.h:627
virtual bool CanAlwaysSee(WorldObject const *) const
Definition Object.h:647
Player session in the World.
Definition Loot.h:226
time_t lastIncrementTime
Definition Creature.h:47
uint32 itemId
Definition Creature.h:45