TrinityCore
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 "GridObject.h"
27#include "MapObject.h"
28#include <list>
29
30class CreatureAI;
31class CreatureGroup;
32class Quest;
33class Player;
34class SpellInfo;
35class WorldSession;
36struct Loot;
37
39
41{
42 VendorItemCount(uint32 _item, uint32 _count);
43
47};
48
49typedef std::list<VendorItemCount> VendorItemCounts;
50
51// max different by z coordinate for creature aggro reaction
52#define CREATURE_Z_ATTACK_RANGE 3
53
54#define MAX_VENDOR_ITEMS 150 // Limitation in 4.x.x item count in SMSG_LIST_INVENTORY
55
57{
58 None = 0,
59 Empty = 1
60};
61
63static constexpr size_t CREATURE_TAPPERS_SOFT_CAP = 5;
64
65//used for handling non-repeatable random texts
66typedef std::vector<uint8> CreatureTextRepeatIds;
67typedef std::unordered_map<uint8, CreatureTextRepeatIds> CreatureTextRepeatGroup;
68
69class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public MapObject
70{
71 public:
72 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 displayId, bool setNative = false) override;
81 void SetDisplayFromModel(uint32 modelIdx);
82
83 void DisappearAndDie() { ForcedDespawn(0); }
84
85 bool Create(ObjectGuid::LowType guidlow, Map* map, uint32 entry, Position const& pos, CreatureData const* data, uint32 vehId, bool dynamic = false);
86
87 static Creature* CreateCreature(uint32 entry, Map* map, Position const& pos, uint32 vehId = 0);
88 static Creature* CreateCreatureFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap = true, bool allowDuplicate = false);
89
90 bool LoadCreaturesAddon();
91 void LoadCreaturesSparringHealth(bool force = false);
92 void SelectLevel();
93 void UpdateLevelDependantStats();
94 void SelectWildBattlePetLevel();
95 void LoadEquipment(int8 id = 1, bool force = false);
96 void SetSpawnHealth();
97
98 ObjectGuid::LowType GetSpawnId() const { return m_spawnId; }
99
100 void Update(uint32 time) override; // overwrited Unit::Update
101 void GetRespawnPosition(float &x, float &y, float &z, float* ori = nullptr, float* dist = nullptr) const;
102 bool IsSpawnedOnTransport() const { return m_creatureData && m_creatureData->mapId != GetMapId(); }
103
104 void SetCorpseDelay(uint32 delay, bool ignoreCorpseDecayRatio = false)
105 {
106 m_corpseDelay = delay;
107 if (ignoreCorpseDecayRatio)
108 m_ignoreCorpseDecayRatio = true;
109 }
110 uint32 GetCorpseDelay() const { return m_corpseDelay; }
111 bool IsRacialLeader() const { return GetCreatureTemplate()->RacialLeader; }
112 bool IsCivilian() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_CIVILIAN) != 0; }
113 bool IsTrigger() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER) != 0; }
114 bool IsGuard() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_GUARD) != 0; }
115
116 void InitializeMovementCapabilities();
117 void UpdateMovementCapabilities();
118
119 CreatureMovementData const& GetMovementTemplate() const;
120
121 // Returns true if CREATURE_STATIC_FLAG_AQUATIC is set which strictly binds the creature to liquids
122 bool IsAquatic() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_AQUATIC); }
123
124 // Returns true if CREATURE_STATIC_FLAG_AMPHIBIOUS is set which allows a creature to enter and leave liquids while sticking to the ocean floor. These creatures will become able to swim when engaged
125 bool IsAmphibious() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_AMPHIBIOUS); }
126
127 // Returns true if CREATURE_STATIC_FLAG_FLOATING is set which is disabling the gravity of the creature on spawn and reset
128 bool IsFloating() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_FLOATING); }
129 void SetFloating(bool floating) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_FLOATING, floating); SetDisableGravity(floating); }
130
131 // Returns true if CREATURE_STATIC_FLAG_SESSILE is set which permanently roots the creature in place
132 bool IsSessile() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_SESSILE); }
133 void SetSessile(bool sessile) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_SESSILE, sessile); SetControlled(sessile, UNIT_STATE_ROOT); }
134
135 // Returns true if CREATURE_STATIC_FLAG_3_CANNOT_PENETRATE_WATER is set which does not allow the creature to go below liquid surfaces
136 bool CannotPenetrateWater() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_3_CANNOT_PENETRATE_WATER); }
137 void SetCannotPenetrateWater(bool cannotPenetrateWater) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_3_CANNOT_PENETRATE_WATER, cannotPenetrateWater); }
138
139 // Returns true if CREATURE_STATIC_FLAG_3_CANNOT_SWIM is set which prevents 'Amphibious' creatures from swimming when engaged
140 bool IsSwimDisabled() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_3_CANNOT_SWIM); }
141
142 // Returns true if CREATURE_STATIC_FLAG_4_PREVENT_SWIM is set which prevents 'Amphibious' creatures from swimming when engaged until the victim is no longer on the ocean floor
143 bool IsSwimPrevented() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_4_PREVENT_SWIM); }
144
145 bool CanSwim() const override;
146 bool CanEnterWater() const override { return (CanSwim() || IsAmphibious()); };
147 bool CanFly() const override { return (IsFlying() || HasUnitMovementFlag(MOVEMENTFLAG_CAN_FLY)); }
148
149 MovementGeneratorType GetDefaultMovementType() const override { return m_defaultMovementType; }
150 void SetDefaultMovementType(MovementGeneratorType mgt) { m_defaultMovementType = mgt; }
151
152 CreatureClassifications GetCreatureClassification() const { return GetCreatureTemplate()->Classification; }
153 bool HasClassification(CreatureClassifications classification) const { return GetCreatureTemplate()->Classification == classification; }
154
155 bool IsDungeonBoss() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_DUNGEON_BOSS) != 0; }
156 bool IsAffectedByDiminishingReturns() const override { return Unit::IsAffectedByDiminishingReturns() || (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_ALL_DIMINISH) != 0; }
157
158 Unit* SelectVictim();
159
160 void SetReactState(ReactStates st) { m_reactState = st; }
161 ReactStates GetReactState() const { return m_reactState; }
162 bool HasReactState(ReactStates state) const { return (m_reactState == state); }
163 void InitializeReactState();
164
167 void SetImmuneToAll(bool apply) override { Unit::SetImmuneToAll(apply, HasReactState(REACT_PASSIVE)); }
168 using Unit::IsImmuneToPC;
170 void SetImmuneToPC(bool apply) override { Unit::SetImmuneToPC(apply, HasReactState(REACT_PASSIVE)); }
173 void SetImmuneToNPC(bool apply) override { Unit::SetImmuneToNPC(apply, HasReactState(REACT_PASSIVE)); }
174
175 void SetUnkillable(bool unkillable) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_UNKILLABLE, unkillable); }
176
178 bool isCanInteractWithBattleMaster(Player* player, bool msg) const;
179 bool CanResetTalents(Player* player) const;
180 bool CanCreatureAttack(Unit const* victim, bool force = true) const;
181 void LoadTemplateImmunities(int32 creatureImmunitiesId);
182 bool IsImmunedToSpellEffect(SpellInfo const* spellInfo, SpellEffectInfo const& spellEffectInfo, WorldObject const* caster, bool requireImmunityPurgesEffectAttribute = false) const override;
183 bool IsElite() const;
184 bool isWorldBoss() const;
185
186 void SetInteractionAllowedWhileHostile(bool interactionAllowed) override;
187 void SetInteractionAllowedInCombat(bool interactionAllowed) override;
188 void UpdateNearbyPlayersInteractions() override;
189
190 bool HasScalableLevels() const;
191 void ApplyLevelScaling();
192 uint8 GetLevelForTarget(WorldObject const* target) const override;
193
194 uint64 GetMaxHealthByLevel(uint8 level) const;
195 float GetHealthMultiplierForTarget(WorldObject const* target) const override;
196
197 float GetBaseDamageForLevel(uint8 level) const;
198 float GetDamageMultiplierForTarget(WorldObject const* target) const override;
199
200 float GetBaseArmorForLevel(uint8 level) const;
201 float GetArmorMultiplierForTarget(WorldObject const* target) const override;
202
204 bool IsEvadingAttacks() const { return IsInEvadeMode() || CanNotReachTarget(); }
205
207 void SetRestoreStateOnEvade(bool restoreOnEvade) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_5_NO_LEAVECOMBAT_STATE_RESTORE, !restoreOnEvade); }
208
209 bool AIM_Destroy();
210 bool AIM_Create(CreatureAI* ai = nullptr);
211 bool AIM_Initialize(CreatureAI* ai = nullptr);
212 void Motion_Initialize();
213
214 CreatureAI* AI() const { return reinterpret_cast<CreatureAI*>(GetAI()); }
215
216 SpellSchoolMask GetMeleeDamageSchoolMask(WeaponAttackType /*attackType*/ = BASE_ATTACK) const override { return m_meleeDamageSchoolMask; }
217 void SetMeleeDamageSchool(SpellSchools school) { m_meleeDamageSchoolMask = SpellSchoolMask(1 << school); }
218 bool CanMelee() const { return !_staticFlags.HasFlag(CREATURE_STATIC_FLAG_NO_MELEE_FLEE) && !_staticFlags.HasFlag(CREATURE_STATIC_FLAG_4_NO_MELEE_APPROACH); }
219 void SetCanMelee(bool canMelee, bool fleeFromMelee = false);
222 void SetTreatAsRaidUnit(bool treatAsRaidUnit) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_4_TREAT_AS_RAID_UNIT_FOR_HELPFUL_SPELLS, treatAsRaidUnit); }
223 void StartDefaultCombatMovement(Unit* victim, Optional<float> range = {}, Optional<float> angle = {});
224
225 bool HasSpell(uint32 spellID) const override;
226
227 bool UpdateEntry(uint32 entry, CreatureData const* data = nullptr, bool updateLevel = true);
228
229 int32 GetCreatePowerValue(Powers power) const override;
230 bool UpdateStats(Stats stat) override;
231 bool UpdateAllStats() override;
232 void UpdateArmor() override;
233 void UpdateMaxHealth() override;
234 void UpdateMaxPower(Powers power) override;
235 uint32 GetPowerIndex(Powers power) const override;
236 void UpdateAttackPowerAndDamage(bool ranged = false) override;
237 void CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bool addTotalPct, float& minDamage, float& maxDamage) const override;
238
239 void SetCanDualWield(bool value) override;
240 int8 GetOriginalEquipmentId() const { return m_originalEquipmentId; }
241 uint8 GetCurrentEquipmentId() const { return m_equipmentId; }
242 void SetCurrentEquipmentId(uint8 id) { m_equipmentId = id; }
243
244 float GetSpellDamageMod(CreatureClassifications classification) const;
245
246 VendorItemData const* GetVendorItems() const;
247 uint32 GetVendorItemCurrentCount(VendorItem const* vItem);
248 uint32 UpdateVendorItemCurrentCount(VendorItem const* vItem, uint32 used_count);
249
250 CreatureTemplate const* GetCreatureTemplate() const { return m_creatureInfo; }
251 CreatureData const* GetCreatureData() const { return m_creatureData; }
252 CreatureDifficulty const* GetCreatureDifficulty() const { return m_creatureDifficulty; }
253 CreatureAddon const* GetCreatureAddon() const;
254
255 std::string const& GetAIName() const;
256 std::string GetScriptName() const;
257 uint32 GetScriptId() const;
258 bool HasStringId(std::string_view id) const;
259 void SetScriptStringId(std::string id);
260 std::array<std::string_view, 3> const& GetStringIds() const { return m_stringIds; }
261
262 // override WorldObject function for proper name localization
263 std::string GetNameForLocaleIdx(LocaleConstant locale) const override;
264
265 void setDeathState(DeathState s) override; // override virtual Unit::setDeathState
266
267 bool LoadFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap, bool allowDuplicate);
268 void SaveToDB();
269 // overriden in Pet
270 virtual void SaveToDB(uint32 mapid, std::vector<Difficulty> const& spawnDifficulties);
271 static bool DeleteFromDB(ObjectGuid::LowType spawnId);
272
273 bool CanHaveLoot() const { return !_staticFlags.HasFlag(CREATURE_STATIC_FLAG_NO_LOOT); }
274 void SetCanHaveLoot(bool canHaveLoot) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_NO_LOOT, !canHaveLoot); }
275 uint32 GetLootId() const;
276 void SetLootId(Optional<uint32> lootId);
277 std::unique_ptr<Loot> m_loot;
278 std::unordered_map<ObjectGuid, std::unique_ptr<Loot>> m_personalLoot;
279 void StartPickPocketRefillTimer();
280 void ResetPickPocketRefillTimer() { _pickpocketLootRestore = 0; }
281 bool CanGeneratePickPocketLoot() const;
282 GuidUnorderedSet const& GetTapList() const { return m_tapList; }
283 void SetTapList(GuidUnorderedSet tapList) { m_tapList = std::move(tapList); }
284 bool hasLootRecipient() const { return !m_tapList.empty(); }
285 bool IsTapListNotClearedOnEvade() const { return m_dontClearTapListOnEvade; }
286 void SetDontClearTapListOnEvade(bool dontClear);
287 bool isTappedBy(Player const* player) const; // return true if the creature is tapped by the player or a member of his party.
288 Loot* GetLootForPlayer(Player const* player) const override;
289 bool IsFullyLooted() const;
290 bool IsSkinnedBy(Player const* player) const;
291
292 void SetTappedBy(Unit const* unit, bool withGroup = true);
293 void AllLootRemovedFromCorpse();
294
295 uint16 GetLootMode() const { return m_LootMode; }
296 bool HasLootMode(uint16 lootMode) const { return (m_LootMode & lootMode) != 0; }
297 void SetLootMode(uint16 lootMode) { m_LootMode = lootMode; }
298 void AddLootMode(uint16 lootMode) { m_LootMode |= lootMode; }
299 void RemoveLootMode(uint16 lootMode) { m_LootMode &= ~lootMode; }
300 void ResetLootMode() { m_LootMode = LOOT_MODE_DEFAULT; }
301
303
304 bool CanStartAttack(Unit const* u, bool force) const;
305 float GetAttackDistance(Unit const* player) const;
306 float GetAggroRange(Unit const* target) const;
307
308 void SendAIReaction(AiReaction reactionType);
309
310 Unit* SelectNearestTarget(float dist = 0, bool playerOnly = false) const;
311 Unit* SelectNearestTargetInAttackDistance(float dist = 0) const;
312 Unit* SelectNearestHostileUnitInAggroRange(bool useLOS = false, bool ignoreCivilians = false) const;
313
314 void DoFleeToGetAssistance();
315 void CallForHelp(float fRadius);
316 void CallAssistance();
317 void SetNoCallAssistance(bool val) { m_AlreadyCallAssistance = val; }
318 void SetNoSearchAssistance(bool val) { m_AlreadySearchedAssistance = val; }
319 bool HasSearchedAssistance() const { return m_AlreadySearchedAssistance; }
320 bool CanAssistTo(Unit const* u, Unit const* enemy, bool checkfaction = true) const;
321 bool _IsTargetAcceptable(Unit const* target) const;
322 bool IsIgnoringFeignDeath() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_2_IGNORE_FEIGN_DEATH); }
323 void SetIgnoreFeignDeath(bool ignoreFeignDeath) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_2_IGNORE_FEIGN_DEATH, ignoreFeignDeath); }
324 bool IsIgnoringSanctuarySpellEffect() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_2_IGNORE_SANCTUARY); }
325 void SetIgnoreSanctuarySpellEffect(bool ignoreSanctuary) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_2_IGNORE_SANCTUARY, ignoreSanctuary); }
326
327 void RemoveCorpse(bool setSpawnTime = true, bool destroyForNearbyPlayers = true);
328
329 void DespawnOrUnsummon(Milliseconds timeToDespawn = 0s, Seconds forceRespawnTime = 0s);
330
331 time_t const& GetRespawnTime() const { return m_respawnTime; }
332 time_t GetRespawnTimeEx() const;
333 void SetRespawnTime(uint32 respawn);
334 void Respawn(bool force = false);
335 void SaveRespawnTime(uint32 forceDelay = 0);
336
337 uint32 GetRespawnDelay() const { return m_respawnDelay; }
338 void SetRespawnDelay(uint32 delay) { m_respawnDelay = delay; }
339
340 float GetWanderDistance() const { return m_wanderDistance; }
341 void SetWanderDistance(float dist) { m_wanderDistance = dist; }
342
343 void DoImmediateBoundaryCheck() { m_boundaryCheckTime = 0; }
344 uint32 GetCombatPulseDelay() const { return m_combatPulseDelay; }
345 void SetCombatPulseDelay(uint32 delay) // (secs) interval at which the creature pulses the entire zone into combat (only works in dungeons)
346 {
347 m_combatPulseDelay = delay;
348 if (m_combatPulseTime == 0 || m_combatPulseTime > delay)
349 m_combatPulseTime = delay;
350 }
351
352 void SendZoneUnderAttackMessage(Player* attacker);
353
354 bool hasQuest(uint32 quest_id) const override;
355 bool hasInvolvedQuest(uint32 quest_id) const override;
356
357 bool CanRegenerateHealth() const { return !_staticFlags.HasFlag(CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN) && _regenerateHealth; }
358 void SetRegenerateHealth(bool value) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN, !value); }
359 virtual uint8 GetPetAutoSpellSize() const;
360 virtual uint32 GetPetAutoSpellOnPos(uint8 pos) const;
361 float GetPetChaseDistance() const;
362
364 void SetIgnoreChaseRange(bool ignoreChaseRange) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_6_ALWAYS_STAND_ON_TOP_OF_TARGET, ignoreChaseRange); }
365
366 void SetCannotReachTarget(bool cannotReach);
367 bool CanNotReachTarget() const { return m_cannotReachTarget; }
368
369 void SetDefaultMount(Optional<uint32> mountCreatureDisplayId);
370
371 void SetHomePosition(float x, float y, float z, float o) { m_homePosition.Relocate(x, y, z, o); }
372 void SetHomePosition(Position const& pos) { m_homePosition.Relocate(pos); }
373 void GetHomePosition(float& x, float& y, float& z, float& ori) const { m_homePosition.GetPosition(x, y, z, ori); }
374 Position const& GetHomePosition() const { return m_homePosition; }
375
376 void SetTransportHomePosition(float x, float y, float z, float o) { m_transportHomePosition.Relocate(x, y, z, o); }
377 void SetTransportHomePosition(Position const& pos) { m_transportHomePosition.Relocate(pos); }
378 void GetTransportHomePosition(float& x, float& y, float& z, float& ori) const { m_transportHomePosition.GetPosition(x, y, z, ori); }
379 Position const& GetTransportHomePosition() const { return m_transportHomePosition; }
380
381 uint32 GetWaypointPathId() const { return _waypointPathId; }
382 void LoadPath(uint32 pathid) { _waypointPathId = pathid; }
383
384 // nodeId, pathId
385 std::pair<uint32, uint32> GetCurrentWaypointInfo() const { return _currentWaypointNodeInfo; }
386 void UpdateCurrentWaypointInfo(uint32 nodeId, uint32 pathId) { _currentWaypointNodeInfo = { nodeId, pathId }; }
387
388 bool IsReturningHome() const;
389
390 void SearchFormation();
391 CreatureGroup* GetFormation() { return m_formation; }
392 void SetFormation(CreatureGroup* formation) { m_formation = formation; }
393 bool IsFormationLeader() const;
394 void SignalFormationMovement();
395 bool IsFormationLeaderMoveAllowed() const;
396
397 void SetDisableReputationGain(bool disable) { DisableReputationGain = disable; }
398 bool IsReputationGainDisabled() const { return DisableReputationGain; }
399 void LowerPlayerDamageReq(uint64 unDamage);
400 void ResetPlayerDamageReq() { m_PlayerDamageReq = GetHealth() / 2; }
402
403 uint32 GetOriginalEntry() const { return m_originalEntry; }
404 void SetOriginalEntry(uint32 entry) { m_originalEntry = entry; }
405
406 // There's many places not ready for dynamic spawns. This allows them to live on for now.
407 void SetRespawnCompatibilityMode(bool mode = true) { m_respawnCompatibilityMode = mode; }
408 bool GetRespawnCompatibilityMode() const { return m_respawnCompatibilityMode; }
409
410 static float GetDamageMod(CreatureClassifications classification);
411
412 float m_SightDistance, m_CombatDistance;
413
414 bool m_isTempWorldObject; //true when possessed
415
416 // Handling caster facing during spellcast
417 void SetTarget(ObjectGuid const& guid) override;
418 void DoNotReacquireSpellFocusTarget();
419 void SetSpellFocus(Spell const* focusSpell, WorldObject const* target);
420 bool HasSpellFocus(Spell const* focusSpell = nullptr) const override;
421 void ReleaseSpellFocus(Spell const* focusSpell = nullptr, bool withDelay = true);
422
423 bool IsMovementPreventedByCasting() const override;
424
425 // Part of Evade mechanics
426 time_t GetLastDamagedTime() const { return _lastDamagedTime; }
427 void SetLastDamagedTime(time_t val) { _lastDamagedTime = val; }
428
429 CreatureTextRepeatIds GetTextRepeatGroup(uint8 textGroup);
430 void SetTextRepeatId(uint8 textGroup, uint8 id);
431 void ClearTextRepeatGroup(uint8 textGroup);
432 bool IsEscorted() const;
433
434 bool CanGiveExperience() const;
435 void SetCanGiveExperience(bool xpEnabled) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_NO_XP, !xpEnabled); }
436
437 bool IsEngaged() const override;
438 void AtEngage(Unit* target) override;
439 void AtDisengage() override;
440
441 bool IsThreatFeedbackDisabled() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_3_NO_THREAT_FEEDBACK); }
442 void SetNoThreatFeedback(bool noThreatFeedback) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_3_NO_THREAT_FEEDBACK, noThreatFeedback); }
443
444 void OverrideSparringHealthPct(float healthPct) { _sparringHealthPct = healthPct; }
445 void OverrideSparringHealthPct(std::vector<float> const& healthPct);
446 float GetSparringHealthPct() const { return _sparringHealthPct; }
447 uint32 CalculateDamageForSparring(Unit* attacker, uint32 damage);
448 bool ShouldFakeDamageFrom(Unit* attacker);
449
450 std::string GetDebugInfo() const override;
451
452 void ExitVehicle(Position const* exitPosition = nullptr) override;
453
454 bool HasFlag(CreatureStaticFlags flag) const { return _staticFlags.HasFlag(flag); }
455 bool HasFlag(CreatureStaticFlags2 flag) const { return _staticFlags.HasFlag(flag); }
456 bool HasFlag(CreatureStaticFlags3 flag) const { return _staticFlags.HasFlag(flag); }
457 bool HasFlag(CreatureStaticFlags4 flag) const { return _staticFlags.HasFlag(flag); }
458 bool HasFlag(CreatureStaticFlags5 flag) const { return _staticFlags.HasFlag(flag); }
459 bool HasFlag(CreatureStaticFlags6 flag) const { return _staticFlags.HasFlag(flag); }
460 bool HasFlag(CreatureStaticFlags7 flag) const { return _staticFlags.HasFlag(flag); }
461 bool HasFlag(CreatureStaticFlags8 flag) const { return _staticFlags.HasFlag(flag); }
462
463 uint32 GetGossipMenuId() const;
464 void SetGossipMenuId(uint32 gossipMenuId);
465
466 uint32 GetTrainerId() const;
467 void SetTrainerId(Optional<uint32> trainerId);
468
469 void SummonGraveyardTeleporter();
470
471 void InitializeInteractSpellId();
472 void SetInteractSpellId(int32 interactSpellId) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::InteractSpellID), interactSpellId); }
473
474 protected:
475 bool CreateFromProto(ObjectGuid::LowType guidlow, uint32 entry, CreatureData const* data = nullptr, uint32 vehId = 0);
476 bool InitEntry(uint32 entry, CreatureData const* data = nullptr);
477
478 // vendor items
480
481 static float GetHealthMod(CreatureClassifications classification);
482
485
488 time_t m_corpseRemoveTime; // (msecs)timer for death or corpse disappearance
489 time_t m_respawnTime; // (secs) time of next respawn
490 uint32 m_respawnDelay; // (secs) delay between corpse disappearance and respawning
491 uint32 m_corpseDelay; // (secs) delay between death and corpse disappearance
494 uint32 m_boundaryCheckTime; // (msecs) remaining time for next evade boundary check
495 uint32 m_combatPulseTime; // (msecs) remaining time for next zone-in-combat pulse
496 uint32 m_combatPulseDelay; // (secs) how often the creature puts the entire zone in combat (only works in dungeons)
497
498 ReactStates m_reactState; // for AI, not charmInfo
499 void RegenerateHealth();
500 void Regenerate(Powers power);
505
510
513
516
518
522 std::array<std::string_view, 3> m_stringIds;
524
526 uint16 m_LootMode; // Bitmask (default: LOOT_MODE_DEFAULT) that determines what loot will be lootable
527
529
530 bool IsInvisibleDueToDespawn(WorldObject const* seer) const override;
531 bool CanAlwaysSee(WorldObject const* obj) const override;
532
533 private:
534 void ForcedDespawn(uint32 timeMSToDespawn = 0, Seconds forceRespawnTimer = 0s);
535 bool CheckNoGrayAggroConfig(uint32 playerLevel, uint32 creatureLevel) const; // No aggro from gray creatures
536
537 // Waypoint path
539 std::pair<uint32/*nodeId*/, uint32/*pathId*/> _currentWaypointNodeInfo;
540
541 // Formation var
545
546 /* Spell focus system */
547 void ReacquireSpellFocusTarget();
548 struct
549 {
550 ::Spell const* Spell = nullptr;
551 uint32 Delay = 0; // ms until the creature's target should snap back (0 = no snapback scheduled)
552 ObjectGuid Target; // the creature's "real" target while casting
553 float Orientation = 0.0f; // the creature's "real" orientation while casting
554 } _spellFocusInfo;
555
556 time_t _lastDamagedTime; // Part of Evade mechanics
558
559 void ApplyAllStaticFlags(CreatureStaticFlagsHolder const& flags);
560
561 // Regenerate health
562 bool _regenerateHealth; // Set on creation
563
569};
570
572{
573 public:
574 AssistDelayEvent(ObjectGuid victim, Unit& owner) : BasicEvent(), m_victim(victim), m_owner(owner) { }
575
576 bool Execute(uint64 e_time, uint32 p_time) override;
577 void AddAssistant(ObjectGuid guid) { m_assistants.push_back(guid); }
578 private:
580
584};
585
587{
588 public:
589 ForcedDespawnDelayEvent(Creature& owner, Seconds respawnTimer) : BasicEvent(), m_owner(owner), m_respawnTimer(respawnTimer) { }
590 bool Execute(uint64 e_time, uint32 p_time) override;
591
592 private:
595};
596
597#endif
LocaleConstant
Definition: Common.h:48
@ CREATURE_FLAG_EXTRA_DUNGEON_BOSS
Definition: CreatureData.h:362
@ CREATURE_FLAG_EXTRA_TRIGGER
Definition: CreatureData.h:341
@ CREATURE_FLAG_EXTRA_CIVILIAN
Definition: CreatureData.h:335
@ CREATURE_FLAG_EXTRA_GUARD
Definition: CreatureData.h:349
@ CREATURE_FLAG_EXTRA_ALL_DIMINISH
Definition: CreatureData.h:354
CreatureStaticFlags
Definition: CreatureData.h:37
@ CREATURE_STATIC_FLAG_AQUATIC
Definition: CreatureData.h:56
@ CREATURE_STATIC_FLAG_NO_XP
Definition: CreatureData.h:39
@ CREATURE_STATIC_FLAG_NO_MELEE_FLEE
Definition: CreatureData.h:58
@ CREATURE_STATIC_FLAG_UNKILLABLE
Definition: CreatureData.h:41
@ CREATURE_STATIC_FLAG_SESSILE
Definition: CreatureData.h:46
@ CREATURE_STATIC_FLAG_NO_LOOT
Definition: CreatureData.h:40
@ CREATURE_STATIC_FLAG_FLOATING
Definition: CreatureData.h:67
@ CREATURE_STATIC_FLAG_AMPHIBIOUS
Definition: CreatureData.h:57
CreatureStaticFlags4
Definition: CreatureData.h:151
@ CREATURE_STATIC_FLAG_4_PREVENT_SWIM
Definition: CreatureData.h:176
@ CREATURE_STATIC_FLAG_4_NO_MELEE_APPROACH
Definition: CreatureData.h:161
@ CREATURE_STATIC_FLAG_4_IGNORE_LOS_WHEN_CASTING_ON_ME
Definition: CreatureData.h:165
@ CREATURE_STATIC_FLAG_4_TREAT_AS_RAID_UNIT_FOR_HELPFUL_SPELLS
Definition: CreatureData.h:167
CreatureStaticFlags6
Definition: CreatureData.h:227
@ CREATURE_STATIC_FLAG_6_ALWAYS_STAND_ON_TOP_OF_TARGET
Definition: CreatureData.h:239
CreatureStaticFlags5
Definition: CreatureData.h:189
@ CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN
Definition: CreatureData.h:217
@ CREATURE_STATIC_FLAG_5_NO_LEAVECOMBAT_STATE_RESTORE
Definition: CreatureData.h:195
CreatureStaticFlags8
Definition: CreatureData.h:283
CreatureStaticFlags7
Definition: CreatureData.h:265
CreatureStaticFlags3
Definition: CreatureData.h:113
@ CREATURE_STATIC_FLAG_3_CANNOT_PENETRATE_WATER
Definition: CreatureData.h:126
@ CREATURE_STATIC_FLAG_3_CANNOT_SWIM
Definition: CreatureData.h:122
@ CREATURE_STATIC_FLAG_3_NO_THREAT_FEEDBACK
Definition: CreatureData.h:129
CreatureStaticFlags2
Definition: CreatureData.h:75
@ CREATURE_STATIC_FLAG_2_IGNORE_FEIGN_DEATH
Definition: CreatureData.h:84
@ CREATURE_STATIC_FLAG_2_IGNORE_SANCTUARY
Definition: CreatureData.h:85
const uint32 MAX_CREATURE_SPELLS
Definition: CreatureData.h:419
VendorInventoryReason
Definition: Creature.h:57
std::vector< uint8 > CreatureTextRepeatIds
Definition: Creature.h:66
std::list< VendorItemCount > VendorItemCounts
Definition: Creature.h:49
std::unordered_map< uint8, CreatureTextRepeatIds > CreatureTextRepeatGroup
Definition: Creature.h:67
static constexpr uint8 WILD_BATTLE_PET_DEFAULT_LEVEL
Definition: Creature.h:62
static constexpr size_t CREATURE_TAPPERS_SOFT_CAP
Definition: Creature.h:63
#define TC_GAME_API
Definition: Define.h:123
uint8_t uint8
Definition: Define.h:144
int8_t int8
Definition: Define.h:140
int32_t int32
Definition: Define.h:138
uint64_t uint64
Definition: Define.h:141
uint16_t uint16
Definition: Define.h:143
uint32_t uint32
Definition: Define.h:142
uint16 flags
Definition: DisableMgr.cpp:49
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition: Duration.h:32
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition: Duration.h:29
MovementGeneratorType
std::list< ObjectGuid > GuidList
Definition: ObjectGuid.h:394
std::unordered_set< ObjectGuid > GuidUnorderedSet
Definition: ObjectGuid.h:396
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition: Optional.h:25
static void SaveToDB(QuestPool const &pool, CharacterDatabaseTransaction trans)
Definition: QuestPools.cpp:50
SpellSchoolMask
AiReaction
WeaponAttackType
@ BASE_ATTACK
Powers
@ LOOT_MODE_DEFAULT
Definition: SharedDefines.h:77
Stats
CreatureClassifications
SpellSchools
ReactStates
Definition: UnitDefines.h:505
@ REACT_PASSIVE
Definition: UnitDefines.h:506
@ MOVEMENTFLAG_CAN_FLY
Definition: UnitDefines.h:381
DeathState
Definition: Unit.h:245
@ UNIT_STATE_EVADE
Definition: Unit.h:277
@ UNIT_STATE_ROOT
Definition: Unit.h:265
Unit & m_owner
Definition: Creature.h:583
ObjectGuid m_victim
Definition: Creature.h:581
AssistDelayEvent(ObjectGuid victim, Unit &owner)
Definition: Creature.h:574
void AddAssistant(ObjectGuid guid)
Definition: Creature.h:577
GuidList m_assistants
Definition: Creature.h:582
bool IsSwimPrevented() const
Definition: Creature.h:143
bool IsTreatedAsRaidUnit() const
Definition: Creature.h:221
bool HasClassification(CreatureClassifications classification) const
Definition: Creature.h:153
time_t _pickpocketLootRestore
Timers.
Definition: Creature.h:487
bool CanMelee() const
Definition: Creature.h:218
void SetCombatPulseDelay(uint32 delay)
Definition: Creature.h:345
VendorItemCounts m_vendorItemCounts
Definition: Creature.h:479
time_t const & GetRespawnTime() const
Definition: Creature.h:331
void SetHomePosition(float x, float y, float z, float o)
Definition: Creature.h:371
bool IsTapListNotClearedOnEvade() const
Definition: Creature.h:285
float m_wanderDistance
Definition: Creature.h:493
void SetNoSearchAssistance(bool val)
Definition: Creature.h:318
void RemoveLootMode(uint16 lootMode)
Definition: Creature.h:299
void SetUnkillable(bool unkillable)
Definition: Creature.h:175
void SetIgnoreSanctuarySpellEffect(bool ignoreSanctuary)
Definition: Creature.h:325
CreatureDifficulty const * m_creatureDifficulty
Definition: Creature.h:521
bool HasLootMode(uint16 lootMode) const
Definition: Creature.h:296
int8 GetOriginalEquipmentId() const
Definition: Creature.h:240
bool IsTrigger() const
Definition: Creature.h:113
void SetHomePosition(Position const &pos)
Definition: Creature.h:372
void ResetLootMode()
Definition: Creature.h:300
void DoImmediateBoundaryCheck()
Definition: Creature.h:343
CreatureTextRepeatGroup m_textRepeat
Definition: Creature.h:557
float _sparringHealthPct
Definition: Creature.h:568
bool _regenerateHealth
Definition: Creature.h:562
CreatureStaticFlagsHolder _staticFlags
Definition: Creature.h:528
bool IsDungeonBoss() const
Definition: Creature.h:155
SpellSchoolMask m_meleeDamageSchoolMask
Definition: Creature.h:511
Optional< uint32 > m_lootId
Definition: Creature.h:525
int8 m_originalEquipmentId
Definition: Creature.h:504
bool GetRespawnCompatibilityMode() const
Definition: Creature.h:408
bool IsIgnoringChaseRange() const
Definition: Creature.h:363
void SetDisableReputationGain(bool disable)
Definition: Creature.h:397
ObjectGuid::LowType m_spawnId
For new or temporary creatures is 0 for saved it is lowguid.
Definition: Creature.h:502
std::unique_ptr< Loot > m_loot
Definition: Creature.h:277
CreatureDifficulty const * GetCreatureDifficulty() const
Definition: Creature.h:252
Position m_transportHomePosition
Definition: Creature.h:515
CreatureClassifications GetCreatureClassification() const
Definition: Creature.h:152
Optional< uint32 > _defaultMountDisplayIdOverride
Definition: Creature.h:564
bool IsSessile() const
Definition: Creature.h:132
uint16 GetLootMode() const
Definition: Creature.h:295
bool IsIgnoringFeignDeath() const
Definition: Creature.h:322
bool IsCivilian() const
Definition: Creature.h:112
void SetImmuneToPC(bool apply) override
Definition: Creature.h:170
bool IsReputationGainDisabled() const
Definition: Creature.h:398
float GetSparringHealthPct() const
Definition: Creature.h:446
bool CanIgnoreLineOfSightWhenCastingOnMe() const
Definition: Creature.h:220
Optional< std::string > m_scriptStringId
Definition: Creature.h:523
bool m_cannotReachTarget
Definition: Creature.h:508
bool m_respawnCompatibilityMode
Definition: Creature.h:544
bool IsSwimDisabled() const
Definition: Creature.h:140
bool IsFloating() const
Definition: Creature.h:128
std::unordered_map< ObjectGuid, std::unique_ptr< Loot > > m_personalLoot
Definition: Creature.h:278
CreatureTemplate const * m_creatureInfo
Definition: Creature.h:519
bool IsSpawnedOnTransport() const
Definition: Creature.h:102
bool CanFly() const override
Definition: Creature.h:147
void GetHomePosition(float &x, float &y, float &z, float &ori) const
Definition: Creature.h:373
Position const & GetHomePosition() const
Definition: Creature.h:374
void SetLastDamagedTime(time_t val)
Definition: Creature.h:427
bool IsEvadingAttacks() const
Definition: Creature.h:204
bool HasReactState(ReactStates state) const
Definition: Creature.h:162
bool m_triggerJustAppeared
Definition: Creature.h:543
void SetCanGiveExperience(bool xpEnabled)
Definition: Creature.h:435
void GetTransportHomePosition(float &x, float &y, float &z, float &ori) const
Definition: Creature.h:378
uint32 GetOriginalEntry() const
Definition: Creature.h:403
bool IsThreatFeedbackDisabled() const
Definition: Creature.h:441
MovementGeneratorType m_defaultMovementType
Definition: Creature.h:501
bool CanHaveLoot() const
Definition: Creature.h:273
void SetReactState(ReactStates st)
Definition: Creature.h:160
GuidUnorderedSet const & GetTapList() const
Definition: Creature.h:282
uint32 _waypointPathId
Definition: Creature.h:538
void ResetPlayerDamageReq()
Definition: Creature.h:400
int32 _creatureImmunitiesId
Definition: Creature.h:565
std::pair< uint32, uint32 > _currentWaypointNodeInfo
Definition: Creature.h:539
void SetCannotPenetrateWater(bool cannotPenetrateWater)
Definition: Creature.h:137
bool hasLootRecipient() const
Definition: Creature.h:284
void SetRespawnCompatibilityMode(bool mode=true)
Definition: Creature.h:407
void SetCurrentEquipmentId(uint8 id)
Definition: Creature.h:242
void SetRespawnDelay(uint32 delay)
Definition: Creature.h:338
bool HasFlag(CreatureStaticFlags7 flag) const
Definition: Creature.h:460
uint32 m_cannotReachTimer
Definition: Creature.h:509
uint32 m_respawnDelay
Definition: Creature.h:490
time_t m_corpseRemoveTime
Definition: Creature.h:488
uint32 m_combatPulseDelay
Definition: Creature.h:496
void UpdateCurrentWaypointInfo(uint32 nodeId, uint32 pathId)
Definition: Creature.h:386
void SetRestoreStateOnEvade(bool restoreOnEvade)
Definition: Creature.h:207
time_t m_respawnTime
Definition: Creature.h:489
uint32 _gossipMenuId
Definition: Creature.h:566
void SetRegenerateHealth(bool value)
Definition: Creature.h:358
bool HasFlag(CreatureStaticFlags3 flag) const
Definition: Creature.h:456
CreatureData const * m_creatureData
Definition: Creature.h:520
float m_CombatDistance
Definition: Creature.h:412
SpellSchoolMask GetMeleeDamageSchoolMask(WeaponAttackType=BASE_ATTACK) const override
Definition: Creature.h:216
bool HasFlag(CreatureStaticFlags2 flag) const
Definition: Creature.h:455
uint16 m_LootMode
Definition: Creature.h:526
uint32 m_boundaryCheckTime
Definition: Creature.h:494
Position m_homePosition
Definition: Creature.h:514
uint32 GetWaypointPathId() const
Definition: Creature.h:381
CreatureData const * GetCreatureData() const
Definition: Creature.h:251
std::pair< uint32, uint32 > GetCurrentWaypointInfo() const
Definition: Creature.h:385
void SetFloating(bool floating)
Definition: Creature.h:129
ObjectGuid::LowType GetSpawnId() const
Definition: Creature.h:98
bool CanNotReachTarget() const
Definition: Creature.h:367
bool m_AlreadyCallAssistance
Definition: Creature.h:506
CreatureTemplate const * GetCreatureTemplate() const
Definition: Creature.h:250
uint32 GetRespawnDelay() const
Definition: Creature.h:337
Position const & GetTransportHomePosition() const
Definition: Creature.h:379
void SetSessile(bool sessile)
Definition: Creature.h:133
bool CanRegenerateHealth() const
Definition: Creature.h:357
bool DisableReputationGain
Definition: Creature.h:517
CreatureGroup * m_formation
Definition: Creature.h:542
void SetInteractSpellId(int32 interactSpellId)
Definition: Creature.h:472
bool HasSearchedAssistance() const
Definition: Creature.h:319
void SetTransportHomePosition(Position const &pos)
Definition: Creature.h:377
bool IsStateRestoredOnEvade() const
Definition: Creature.h:206
uint32 m_corpseDelay
Definition: Creature.h:491
bool HasFlag(CreatureStaticFlags4 flag) const
Definition: Creature.h:457
bool HasFlag(CreatureStaticFlags6 flag) const
Definition: Creature.h:459
std::array< std::string_view, 3 > m_stringIds
Definition: Creature.h:522
void SetCanHaveLoot(bool canHaveLoot)
Definition: Creature.h:274
void SetNoThreatFeedback(bool noThreatFeedback)
Definition: Creature.h:442
void SetImmuneToNPC(bool apply) override
Definition: Creature.h:173
uint8 m_equipmentId
Definition: Creature.h:503
std::array< std::string_view, 3 > const & GetStringIds() const
Definition: Creature.h:260
CreatureGroup * GetFormation()
Definition: Creature.h:391
bool m_AlreadySearchedAssistance
Definition: Creature.h:507
uint32 GetCorpseDelay() const
Definition: Creature.h:110
GuidUnorderedSet m_tapList
Definition: Creature.h:483
bool m_dontClearTapListOnEvade
Definition: Creature.h:484
bool CannotPenetrateWater() const
Definition: Creature.h:136
void OverrideSparringHealthPct(float healthPct)
Definition: Creature.h:444
bool CanEnterWater() const override
Definition: Creature.h:146
uint32 m_originalEntry
Definition: Creature.h:512
void SetImmuneToAll(bool apply) override
Definition: Creature.h:167
bool IsIgnoringSanctuarySpellEffect() const
Definition: Creature.h:324
bool HasFlag(CreatureStaticFlags8 flag) const
Definition: Creature.h:461
bool m_isTempWorldObject
Definition: Creature.h:414
void AddLootMode(uint16 lootMode)
Definition: Creature.h:298
ObjectGuid Target
Definition: Creature.h:552
ReactStates m_reactState
Definition: Creature.h:498
time_t _lastDamagedTime
Definition: Creature.h:556
ReactStates GetReactState() const
Definition: Creature.h:161
void SetTransportHomePosition(float x, float y, float z, float o)
Definition: Creature.h:376
void SetWanderDistance(float dist)
Definition: Creature.h:341
time_t GetLastDamagedTime() const
Definition: Creature.h:426
MovementGeneratorType GetDefaultMovementType() const override
Definition: Creature.h:149
Optional< uint32 > _trainerId
Definition: Creature.h:567
bool HasFlag(CreatureStaticFlags flag) const
Definition: Creature.h:454
uint8 GetCurrentEquipmentId() const
Definition: Creature.h:241
void SetFormation(CreatureGroup *formation)
Definition: Creature.h:392
void SetCorpseDelay(uint32 delay, bool ignoreCorpseDecayRatio=false)
Definition: Creature.h:104
uint32 GetCombatPulseDelay() const
Definition: Creature.h:344
void SetMeleeDamageSchool(SpellSchools school)
Definition: Creature.h:217
float GetWanderDistance() const
Definition: Creature.h:340
bool IsAmphibious() const
Definition: Creature.h:125
void ResetPickPocketRefillTimer()
Definition: Creature.h:280
void SetNoCallAssistance(bool val)
Definition: Creature.h:317
void SetTreatAsRaidUnit(bool treatAsRaidUnit)
Definition: Creature.h:222
bool IsAffectedByDiminishingReturns() const override
Definition: Creature.h:156
bool IsRacialLeader() const
Definition: Creature.h:111
bool m_ignoreCorpseDecayRatio
Definition: Creature.h:492
bool IsAquatic() const
Definition: Creature.h:122
bool HasFlag(CreatureStaticFlags5 flag) const
Definition: Creature.h:458
void SetIgnoreChaseRange(bool ignoreChaseRange)
Definition: Creature.h:364
bool IsInEvadeMode() const
Definition: Creature.h:203
bool IsGuard() const
Definition: Creature.h:114
CreatureAI * AI() const
Definition: Creature.h:214
void SetLootMode(uint16 lootMode)
Definition: Creature.h:297
void SetDefaultMovementType(MovementGeneratorType mgt)
Definition: Creature.h:150
void LoadPath(uint32 pathid)
Definition: Creature.h:382
void SetTapList(GuidUnorderedSet tapList)
Definition: Creature.h:283
void SetOriginalEntry(uint32 entry)
Definition: Creature.h:404
void DisappearAndDie()
Definition: Creature.h:83
void SetIgnoreFeignDeath(bool ignoreFeignDeath)
Definition: Creature.h:323
uint32 m_combatPulseTime
Definition: Creature.h:495
uint64 m_PlayerDamageReq
Definition: Creature.h:401
Seconds const m_respawnTimer
Definition: Creature.h:594
ForcedDespawnDelayEvent(Creature &owner, Seconds respawnTimer)
Definition: Creature.h:589
Definition: Map.h:189
uint64 LowType
Definition: ObjectGuid.h:278
virtual bool hasQuest(uint32) const
Definition: Object.h:192
void SetUpdateFieldValue(UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type value)
Definition: Object.h:287
virtual Loot * GetLootForPlayer(Player const *player) const
Definition: Object.h:279
virtual void SetObjectScale(float scale)
Definition: Object.h:165
virtual bool hasInvolvedQuest(uint32) const
Definition: Object.h:193
Definition: Spell.h:255
Definition: Unit.h:627
void SetImmuneToAll(bool apply, bool keepCombat)
Definition: Unit.cpp:8088
void SetImmuneToPC(bool apply, bool keepCombat)
Definition: Unit.cpp:8101
virtual bool IsMovementPreventedByCasting() const
Definition: Unit.cpp:3119
virtual int32 GetCreatePowerValue(Powers power) const
Definition: StatSystem.cpp:89
void AddToWorld() override
Definition: Unit.cpp:9603
virtual float GetArmorMultiplierForTarget(WorldObject const *) const
Definition: Unit.h:797
virtual void SetCanDualWield(bool value)
Definition: Unit.h:693
void SetControlled(bool apply, UnitState state)
Definition: Unit.cpp:10911
UF::UpdateField< UF::UnitData, 0, TYPEID_UNIT > m_unitData
Definition: Unit.h:1814
virtual bool UpdateAllStats()=0
virtual void AtEngage(Unit *)
Definition: Unit.h:1930
virtual void UpdateAttackPowerAndDamage(bool ranged=false)=0
virtual void AtDisengage()
Definition: Unit.h:1931
std::string GetDebugInfo() const override
Definition: Unit.cpp:13774
void SetImmuneToNPC(bool apply, bool keepCombat)
Definition: Unit.cpp:8124
UnitAI * GetAI() const
Definition: Unit.h:660
bool SetDisableGravity(bool disable, bool updateAnimTier=true)
Definition: Unit.cpp:12725
virtual void SetInteractionAllowedWhileHostile(bool interactionAllowed)
Definition: Unit.cpp:8722
virtual bool HasSpell(uint32) const
Definition: Unit.h:1069
virtual bool IsAffectedByDiminishingReturns() const
Definition: Unit.h:678
bool IsImmuneToNPC() const
Definition: Unit.h:1033
virtual void SetInteractionAllowedInCombat(bool interactionAllowed)
Definition: Unit.cpp:8732
virtual bool IsImmunedToSpellEffect(SpellInfo const *spellInfo, SpellEffectInfo const &spellEffectInfo, WorldObject const *caster, bool requireImmunityPurgesEffectAttribute=false) const
Definition: Unit.cpp:7561
bool IsImmuneToAll() const
Definition: Unit.h:1027
virtual void UpdateNearbyPlayersInteractions()
Definition: Unit.cpp:8743
virtual void UpdateArmor()=0
virtual float GetDamageMultiplierForTarget(WorldObject const *) const
Definition: Unit.h:796
bool HasUnitMovementFlag(uint32 f) const
Definition: Unit.h:1663
virtual void UpdateMaxPower(Powers power)=0
uint64 GetHealth() const
Definition: Unit.h:776
virtual bool UpdateStats(Stats stat)=0
uint8 GetLevelForTarget(WorldObject const *) const override
Definition: Unit.h:747
virtual void CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bool addTotalPct, float &minDamage, float &maxDamage) const =0
virtual void SetTarget(ObjectGuid const &)=0
virtual uint32 GetPowerIndex(Powers power) const =0
virtual float GetHealthMultiplierForTarget(WorldObject const *) const
Definition: Unit.h:795
bool HasUnitState(const uint32 f) const
Definition: Unit.h:732
virtual void Update(uint32 time) override
Definition: Unit.cpp:420
virtual bool CanSwim() const
Definition: Unit.cpp:12313
virtual float GetNativeObjectScale() const
Definition: Unit.h:1565
void RemoveFromWorld() override
Definition: Unit.cpp:9611
virtual void UpdateMaxHealth()=0
virtual bool HasSpellFocus(Spell const *=nullptr) const
Definition: Unit.h:1449
virtual void setDeathState(DeathState s)
Definition: Unit.cpp:8592
bool IsFlying() const
Definition: Unit.h:1735
virtual bool IsEngaged() const
Definition: Unit.h:1019
bool IsImmuneToPC() const
Definition: Unit.h:1030
virtual void SetDisplayId(uint32 displayId, bool setNative=false)
Definition: Unit.cpp:10148
virtual void ExitVehicle(Position const *exitPosition=nullptr)
Definition: Unit.cpp:12204
constexpr uint32 GetMapId() const
Definition: Position.h:201
virtual bool IsInvisibleDueToDespawn(WorldObject const *seer) const
Definition: Object.h:823
std::string GetNameForLocaleIdx(LocaleConstant) const override
Definition: Object.h:558
virtual bool CanAlwaysSee(WorldObject const *) const
Definition: Object.h:820
Player session in the World.
Definition: WorldSession.h:963
void apply(T *val)
Definition: ByteConverter.h:41
Definition: wmo.h:163
std::unique_ptr< VignetteData > Create(VignetteEntry const *vignetteData, WorldObject const *owner)
Definition: Vignette.cpp:72
Definition: Loot.h:281
UpdateField< int32, 96, 114 > InteractSpellID
Definition: UpdateFields.h:378
time_t lastIncrementTime
Definition: Creature.h:46
uint32 itemId
Definition: Creature.h:44
VendorItemCount(uint32 _item, uint32 _count)
Definition: Creature.cpp:76
uint32 count
Definition: Creature.h:45