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 "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
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
63{
64 Generic = 0x01,
65 Ammo = 0x02,
66 Food = 0x04,
67 Poison = 0x08,
68 Reagent = 0x10,
69 Petition = 0x20,
70};
71
73
75static constexpr size_t CREATURE_TAPPERS_SOFT_CAP = 5;
76
77//used for handling non-repeatable random texts
78typedef std::vector<uint8> CreatureTextRepeatIds;
79typedef std::unordered_map<uint8, CreatureTextRepeatIds> CreatureTextRepeatGroup;
80
81class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public MapObject
82{
83 public:
84 explicit Creature(bool isWorldObject = false);
86
87 void AddToWorld() override;
88 void RemoveFromWorld() override;
89
90 float GetNativeObjectScale() const override;
91 void SetObjectScale(float scale) override;
92 void SetDisplayId(uint32 displayId, bool setNative = false) override;
93 void SetDisplayFromModel(uint32 modelIdx);
94
95 void DisappearAndDie() { ForcedDespawn(0); }
96
97 bool Create(ObjectGuid::LowType guidlow, Map* map, uint32 entry, Position const& pos, CreatureData const* data, uint32 vehId, bool dynamic = false);
98
99 static Creature* CreateCreature(uint32 entry, Map* map, Position const& pos, uint32 vehId = 0);
100 static Creature* CreateCreatureFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap = true, bool allowDuplicate = false);
101
102 bool LoadCreaturesAddon();
103 void LoadCreaturesSparringHealth(bool force = false);
104 void SelectLevel();
105 void UpdateLevelDependantStats();
106 void SelectWildBattlePetLevel();
107 void LoadEquipment(int8 id = 1, bool force = false);
108 void SetSpawnHealth();
109
110 ObjectGuid::LowType GetSpawnId() const { return m_spawnId; }
111
112 void Update(uint32 time) override; // overwrited Unit::Update
113 void Heartbeat() override;
114
115 Position GetRespawnPosition(float* dist = nullptr) const;
116 bool IsSpawnedOnTransport() const { return m_creatureData && m_creatureData->mapId != GetMapId(); }
117
118 void SetCorpseDelay(uint32 delay, bool ignoreCorpseDecayRatio = false)
119 {
120 m_corpseDelay = delay;
121 if (ignoreCorpseDecayRatio)
122 m_ignoreCorpseDecayRatio = true;
123 }
124 uint32 GetCorpseDelay() const { return m_corpseDelay; }
125 bool IsRacialLeader() const { return GetCreatureTemplate()->RacialLeader; }
126 bool IsCivilian() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_CIVILIAN) != 0; }
127 bool IsTrigger() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER) != 0; }
128 bool IsGuard() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_GUARD) != 0; }
129
130 void InitializeMovementCapabilities();
131 void UpdateMovementCapabilities();
132
133 CreatureMovementData const& GetMovementTemplate() const;
134
135 // Returns true if CREATURE_STATIC_FLAG_AQUATIC is set which strictly binds the creature to liquids
136 bool IsAquatic() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_AQUATIC); }
137
138 // 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
139 bool IsAmphibious() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_AMPHIBIOUS); }
140
141 // Returns true if CREATURE_STATIC_FLAG_FLOATING is set which is disabling the gravity of the creature on spawn and reset
142 bool IsFloating() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_FLOATING); }
143 void SetFloating(bool floating);
144
145 // Enables or disables gravity and starts playing hover animations depending on wether CREATURE_STATIC_FLAG_FLOATING is set or not
146 void UpdateFloatingMovementFlags();
147
148 // Returns true if CREATURE_STATIC_FLAG_SESSILE is set which permanently roots the creature in place
149 bool IsSessile() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_SESSILE); }
150 void SetSessile(bool sessile);
151
152 // Enables or disables gravity and root movement flags depending on wether CREATURE_STATIC_FLAG_SESSILE is set or not
153 void UpdateSessileMovementFlags();
154
155 // Returns true if CREATURE_STATIC_FLAG_3_CANNOT_PENETRATE_WATER is set which does not allow the creature to go below liquid surfaces
156 bool CannotPenetrateWater() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_3_CANNOT_PENETRATE_WATER); }
157 void SetCannotPenetrateWater(bool cannotPenetrateWater) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_3_CANNOT_PENETRATE_WATER, cannotPenetrateWater); }
158
159 // Returns true if CREATURE_STATIC_FLAG_3_CANT_SWIM is set which prevents 'Amphibious' creatures from swimming when engaged
160 bool IsSwimDisabled() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_3_CANT_SWIM); }
161
162 // Returns true if CREATURE_STATIC_FLAG_4_AI_WILL_ONLY_SWIM_IF_TARGET_SWIMS is set which prevents 'Amphibious' creatures from swimming when engaged until the victim is no longer on the ocean floor
164
165 bool CanSwim() const override;
166 bool CanEnterWater() const override { return (CanSwim() || IsAmphibious()); }
167 bool CanFly() const override { return (IsFlying() || HasUnitMovementFlag(MOVEMENTFLAG_CAN_FLY)); }
168
170 void SetDefaultMovementType(MovementGeneratorType mgt) { m_defaultMovementType = mgt; }
171
172 CreatureClassifications GetCreatureClassification() const { return GetCreatureTemplate()->Classification; }
173 bool HasClassification(CreatureClassifications classification) const { return GetCreatureTemplate()->Classification == classification; }
174
175 bool IsDungeonBoss() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_DUNGEON_BOSS) != 0; }
176 bool IsAffectedByDiminishingReturns() const override { return Unit::IsAffectedByDiminishingReturns() || (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_ALL_DIMINISH) != 0; }
177
178 Unit* SelectVictim();
179
180 void SetReactState(ReactStates st) { m_reactState = st; }
181 ReactStates GetReactState() const { return m_reactState; }
182 bool HasReactState(ReactStates state) const { return (m_reactState == state); }
183 void InitializeReactState();
184
187 void SetImmuneToAll(bool apply) override { Unit::SetImmuneToAll(apply, HasReactState(REACT_PASSIVE)); }
188 using Unit::IsImmuneToPC;
190 void SetImmuneToPC(bool apply) override { Unit::SetImmuneToPC(apply, HasReactState(REACT_PASSIVE)); }
193 void SetImmuneToNPC(bool apply) override { Unit::SetImmuneToNPC(apply, HasReactState(REACT_PASSIVE)); }
194
195 void SetUnkillable(bool unkillable) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_UNKILLABLE, unkillable); }
196
198 bool isCanInteractWithBattleMaster(Player* player, bool msg) const;
199 bool CanResetTalents(Player* player) const;
200 bool CanCreatureAttack(Unit const* victim, bool force = true) const;
201 void LoadTemplateImmunities(int32 creatureImmunitiesId);
202 bool IsImmunedToSpellEffect(SpellInfo const* spellInfo, SpellEffectInfo const& spellEffectInfo, WorldObject const* caster, bool requireImmunityPurgesEffectAttribute = false) const override;
203 bool IsElite() const;
204 bool isWorldBoss() const;
205
206 void SetInteractionAllowedWhileHostile(bool interactionAllowed) override;
207 void SetInteractionAllowedInCombat(bool interactionAllowed) override;
208 void UpdateNearbyPlayersInteractions() override;
209
210 bool HasScalableLevels() const;
211 void ApplyLevelScaling();
212 void ApplyLevelScaling(int32 contentTuningId, int32 scalingLevelDelta);
213 uint8 GetLevelForTarget(WorldObject const* target) const override;
214
215 uint64 GetMaxHealthByLevel(uint8 level) const;
216 float GetHealthMultiplierForTarget(WorldObject const* target) const override;
217
218 float GetBaseDamageForLevel(uint8 level) const;
219 float GetDamageMultiplierForTarget(WorldObject const* target) const override;
220
221 float GetBaseArmorForLevel(uint8 level) const;
222 float GetArmorMultiplierForTarget(WorldObject const* target) const override;
223
225 bool IsEvadingAttacks() const { return IsInEvadeMode() || CanNotReachTarget(); }
226
228 void SetRestoreStateOnEvade(bool restoreOnEvade) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_5_NO_LEAVE_COMBAT_STATE_RESTORE, !restoreOnEvade); }
229
230 bool AIM_Destroy();
231 bool AIM_Create(CreatureAI* ai = nullptr);
232 bool AIM_Initialize(CreatureAI* ai = nullptr);
233 void Motion_Initialize();
234
235 CreatureAI* AI() const { return reinterpret_cast<CreatureAI*>(GetAI()); }
236
237 SpellSchoolMask GetMeleeDamageSchoolMask(WeaponAttackType /*attackType*/ = BASE_ATTACK) const override { return m_meleeDamageSchoolMask; }
238 void SetMeleeDamageSchool(SpellSchools school) { m_meleeDamageSchoolMask = SpellSchoolMask(1 << school); }
239 bool CanMelee() const { return !_staticFlags.HasFlag(CREATURE_STATIC_FLAG_NO_MELEE_FLEE) && !_staticFlags.HasFlag(CREATURE_STATIC_FLAG_4_NO_MELEE_APPROACH); }
240 void SetCanMelee(bool canMelee, bool fleeFromMelee = false);
243 void SetTreatAsRaidUnit(bool treatAsRaidUnit) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_4_TREAT_AS_RAID_UNIT_FOR_HELPFUL_SPELLS, treatAsRaidUnit); }
244 void StartDefaultCombatMovement(Unit* victim, Optional<float> range = {}, Optional<float> angle = {});
245
246 bool HasSpell(uint32 spellID) const override;
247
248 bool UpdateEntry(uint32 entry, CreatureData const* data = nullptr, bool updateLevel = true);
249
250 int32 GetCreatePowerValue(Powers power) const override;
251 bool UpdateStats(Stats stat) override;
252 bool UpdateAllStats() override;
253 void UpdateArmor() override;
254 void UpdateMaxHealth() override;
255 void UpdateMaxPower(Powers power) override;
256 uint32 GetPowerIndex(Powers power) const override;
257 ClassPowerTypes GetPowerTypes() const override;
258 void UpdateAttackPowerAndDamage(bool ranged = false) override;
259 void CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bool addTotalPct, float& minDamage, float& maxDamage) const override;
260
261 void SetCanDualWield(bool value) override;
262 int8 GetOriginalEquipmentId() const { return m_originalEquipmentId; }
263 uint8 GetCurrentEquipmentId() const { return m_equipmentId; }
264 void SetCurrentEquipmentId(uint8 id) { m_equipmentId = id; }
265
266 float GetSpellDamageMod(CreatureClassifications classification) const;
267
268 VendorItemData const* GetVendorItems() const;
269 uint32 GetVendorItemCurrentCount(VendorItem const* vItem);
270 uint32 UpdateVendorItemCurrentCount(VendorItem const* vItem, uint32 used_count);
271 void SetVendor(NPCFlags flags, bool apply);
272 void SetPetitioner(bool apply);
273
274 CreatureTemplate const* GetCreatureTemplate() const { return m_creatureInfo; }
275 CreatureData const* GetCreatureData() const { return m_creatureData; }
276 CreatureDifficulty const* GetCreatureDifficulty() const { return m_creatureDifficulty; }
277 CreatureAddon const* GetCreatureAddon() const;
278
279 std::string const& GetAIName() const;
280 std::string GetScriptName() const;
281 uint32 GetScriptId() const;
282 void InheritStringIds(Creature const* parent);
283 bool HasStringId(std::string_view id) const;
284 void SetScriptStringId(std::string id);
285 std::string_view GetStringId(StringIdType type) const { return m_stringIds[size_t(type)] ? std::string_view(*m_stringIds[size_t(type)]) : std::string_view(); }
286
287 SpawnTrackingStateData const* GetSpawnTrackingStateDataForPlayer(Player const* player) const override;
288
289 // override WorldObject function for proper name localization
290 std::string GetNameForLocaleIdx(LocaleConstant locale) const override;
291
292 bool HasLabel(int32 cretureLabel) const;
293 std::span<int32 const> GetLabels() const;
294
295 void setDeathState(DeathState s) override; // override virtual Unit::setDeathState
296
297 bool LoadFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap, bool allowDuplicate);
298 void SaveToDB();
299 // overriden in Pet
300 virtual void SaveToDB(uint32 mapid, std::vector<Difficulty> const& spawnDifficulties);
301 static bool DeleteFromDB(ObjectGuid::LowType spawnId);
302
303 bool CanHaveLoot() const { return !_staticFlags.HasFlag(CREATURE_STATIC_FLAG_NO_LOOT); }
304 void SetCanHaveLoot(bool canHaveLoot) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_NO_LOOT, !canHaveLoot); }
305 uint32 GetLootId() const;
306 void SetLootId(Optional<uint32> lootId);
307 std::unique_ptr<Loot> m_loot;
308 std::unordered_map<ObjectGuid, std::unique_ptr<Loot>> m_personalLoot;
309 void StartPickPocketRefillTimer();
310 void ResetPickPocketRefillTimer() { _pickpocketLootRestore = 0; }
311 bool CanGeneratePickPocketLoot() const;
312 GuidUnorderedSet const& GetTapList() const { return m_tapList; }
313 void SetTapList(GuidUnorderedSet tapList) { m_tapList = std::move(tapList); }
314 bool hasLootRecipient() const { return !m_tapList.empty(); }
315 bool IsTapListNotClearedOnEvade() const { return m_dontClearTapListOnEvade; }
316 void SetDontClearTapListOnEvade(bool dontClear);
317 bool isTappedBy(Player const* player) const; // return true if the creature is tapped by the player or a member of his party.
318 Loot* GetLootForPlayer(Player const* player) const override;
319 bool IsFullyLooted() const;
320 bool IsSkinnedBy(Player const* player) const;
321
322 void SetTappedBy(Unit const* unit, bool withGroup = true);
323 void AllLootRemovedFromCorpse();
324
325 uint16 GetLootMode() const { return m_LootMode; }
326 bool HasLootMode(uint16 lootMode) const { return (m_LootMode & lootMode) != 0; }
327 void SetLootMode(uint16 lootMode) { m_LootMode = lootMode; }
328 void AddLootMode(uint16 lootMode) { m_LootMode |= lootMode; }
329 void RemoveLootMode(uint16 lootMode) { m_LootMode &= ~lootMode; }
330 void ResetLootMode() { m_LootMode = LOOT_MODE_DEFAULT; }
331
333
334 bool CanStartAttack(Unit const* u, bool force) const;
335 float GetAttackDistance(Unit const* player) const;
336 float GetAggroRange(Unit const* target) const;
337
338 void SendAIReaction(AiReaction reactionType);
339
340 Unit* SelectNearestTarget(float dist = 0, bool playerOnly = false) const;
341 Unit* SelectNearestTargetInAttackDistance(float dist = 0) const;
342 Unit* SelectNearestHostileUnitInAggroRange(bool useLOS = false, bool ignoreCivilians = false) const;
343
344 void DoFleeToGetAssistance();
345 void CallForHelp(float fRadius);
346 void CallAssistance();
347 void SetNoCallAssistance(bool val) { m_AlreadyCallAssistance = val; }
348 void SetNoSearchAssistance(bool val) { m_AlreadySearchedAssistance = val; }
349 bool HasSearchedAssistance() const { return m_AlreadySearchedAssistance; }
350 bool CanAssistTo(Unit const* u, Unit const* enemy, bool checkfaction = true) const;
351 bool _IsTargetAcceptable(Unit const* target) const;
352 bool IsIgnoringFeignDeath() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_2_IGNORE_FEIGN_DEATH); }
353 void SetIgnoreFeignDeath(bool ignoreFeignDeath) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_2_IGNORE_FEIGN_DEATH, ignoreFeignDeath); }
354 bool IsIgnoringSanctuarySpellEffect() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_2_IGNORE_SANCTUARY); }
355 void SetIgnoreSanctuarySpellEffect(bool ignoreSanctuary) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_2_IGNORE_SANCTUARY, ignoreSanctuary); }
356
357 void RemoveCorpse(bool setSpawnTime = true, bool destroyForNearbyPlayers = true);
358
359 void DespawnOrUnsummon(Milliseconds timeToDespawn = 0s, Seconds forceRespawnTime = 0s);
360
361 time_t const& GetRespawnTime() const { return m_respawnTime; }
362 time_t GetRespawnTimeEx() const;
363 void SetRespawnTime(uint32 respawn);
364 void Respawn(bool force = false);
365 void SaveRespawnTime(uint32 forceDelay = 0);
366
367 uint32 GetRespawnDelay() const { return m_respawnDelay; }
368 void SetRespawnDelay(uint32 delay) { m_respawnDelay = delay; }
369
370 float GetWanderDistance() const { return m_wanderDistance; }
371 void SetWanderDistance(float dist) { m_wanderDistance = dist; }
372
373 void DoImmediateBoundaryCheck() { m_boundaryCheckTime = 0; }
374
375 void SendZoneUnderAttackMessage(Player* attacker);
376
377 bool hasQuest(uint32 quest_id) const override;
378 bool hasInvolvedQuest(uint32 quest_id) const override;
379
380 bool CanRegenerateHealth() const { return !_staticFlags.HasFlag(CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN) && _regenerateHealth; }
381 void SetRegenerateHealth(bool value) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN, !value); }
382 virtual uint8 GetPetAutoSpellSize() const;
383 virtual uint32 GetPetAutoSpellOnPos(uint8 pos) const;
384 float GetPetChaseDistance() const;
385
386 bool IsIgnoringChaseRange() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_6_ALWAYS_STAND_ON_TARGET); }
387 void SetIgnoreChaseRange(bool ignoreChaseRange) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_6_ALWAYS_STAND_ON_TARGET, ignoreChaseRange); }
388
389 void SetCannotReachTarget(bool cannotReach);
390 bool CanNotReachTarget() const { return m_cannotReachTarget; }
391
392 void SetDefaultMount(Optional<uint32> mountCreatureDisplayId);
393
394 void SetHomePosition(float x, float y, float z, float o) { m_homePosition.Relocate(x, y, z, o); }
395 void SetHomePosition(Position const& pos) { m_homePosition.Relocate(pos); }
396 void GetHomePosition(float& x, float& y, float& z, float& ori) const { m_homePosition.GetPosition(x, y, z, ori); }
397 Position const& GetHomePosition() const { return m_homePosition; }
398
399 void SetTransportHomePosition(float x, float y, float z, float o) { m_transportHomePosition.Relocate(x, y, z, o); }
400 void SetTransportHomePosition(Position const& pos) { m_transportHomePosition.Relocate(pos); }
401 void GetTransportHomePosition(float& x, float& y, float& z, float& ori) const { m_transportHomePosition.GetPosition(x, y, z, ori); }
402 Position const& GetTransportHomePosition() const { return m_transportHomePosition; }
403
404 uint32 GetWaypointPathId() const { return _waypointPathId; }
405 void LoadPath(uint32 pathid) { _waypointPathId = pathid; }
406
407 // nodeId, pathId
408 std::pair<uint32, uint32> GetCurrentWaypointInfo() const { return _currentWaypointNodeInfo; }
409 void UpdateCurrentWaypointInfo(uint32 nodeId, uint32 pathId) { _currentWaypointNodeInfo = { nodeId, pathId }; }
410
411 bool IsReturningHome() const;
412
413 void SearchFormation();
414 CreatureGroup* GetFormation() { return m_formation; }
415 void SetFormation(CreatureGroup* formation) { m_formation = formation; }
416 bool IsFormationLeader() const;
417 void SignalFormationMovement();
418 bool IsFormationLeaderMoveAllowed() const;
419
420 void SetDisableReputationGain(bool disable) { DisableReputationGain = disable; }
421 bool IsReputationGainDisabled() const { return DisableReputationGain; }
422 void LowerPlayerDamageReq(uint64 unDamage);
423 void ResetPlayerDamageReq() { m_PlayerDamageReq = GetHealth() / 2; }
425
426 uint32 GetOriginalEntry() const { return m_originalEntry; }
427 void SetOriginalEntry(uint32 entry) { m_originalEntry = entry; }
428
429 // There's many places not ready for dynamic spawns. This allows them to live on for now.
430 void SetRespawnCompatibilityMode(bool mode = true) { m_respawnCompatibilityMode = mode; }
431 bool GetRespawnCompatibilityMode() const { return m_respawnCompatibilityMode; }
432
433 static float GetDamageMod(CreatureClassifications classification);
434
435 float m_SightDistance, m_CombatDistance;
436
437 bool m_isTempWorldObject; //true when possessed
438
439 // Handling caster facing during spellcast
440 void SetTarget(ObjectGuid const& guid) override;
441 void DoNotReacquireSpellFocusTarget();
442 void SetSpellFocus(Spell const* focusSpell, WorldObject const* target);
443 bool HasSpellFocus(Spell const* focusSpell = nullptr) const override;
444 void ReleaseSpellFocus(Spell const* focusSpell = nullptr, bool withDelay = true);
445
446 bool IsMovementPreventedByCasting() const override;
447
448 // Part of Evade mechanics
449 time_t GetLastDamagedTime() const { return _lastDamagedTime; }
450 void SetLastDamagedTime(time_t val) { _lastDamagedTime = val; }
451
452 CreatureTextRepeatIds GetTextRepeatGroup(uint8 textGroup);
453 void SetTextRepeatId(uint8 textGroup, uint8 id);
454 void ClearTextRepeatGroup(uint8 textGroup);
455 bool IsEscorted() const;
456
457 bool CanGiveExperience() const;
458 void SetCanGiveExperience(bool xpEnabled) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_NO_XP, !xpEnabled); }
459
460 bool IsEngaged() const override;
461 void AtEngage(Unit* target) override;
462 void AtDisengage() override;
463
464 bool IsThreatFeedbackDisabled() const { return _staticFlags.HasFlag(CREATURE_STATIC_FLAG_3_NO_THREAT_FEEDBACK); }
465 void SetNoThreatFeedback(bool noThreatFeedback) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_3_NO_THREAT_FEEDBACK, noThreatFeedback); }
466 void ForcePartyMembersIntoCombat();
467
468 bool IsAggroGracePeriodExpired() { return _aggroGracePeriodExpired; }
469
470 void OverrideSparringHealthPct(float healthPct) { _sparringHealthPct = healthPct; }
471 void OverrideSparringHealthPct(std::vector<float> const& healthPct);
472 float GetSparringHealthPct() const { return _sparringHealthPct; }
473 uint32 CalculateDamageForSparring(Unit* attacker, uint32 damage);
474 bool ShouldFakeDamageFrom(Unit* attacker);
475
476 std::string GetDebugInfo() const override;
477
478 void ExitVehicle(Position const* exitPosition = nullptr) override;
479
480 bool HasFlag(CreatureStaticFlags flag) const { return _staticFlags.HasFlag(flag); }
481 bool HasFlag(CreatureStaticFlags2 flag) const { return _staticFlags.HasFlag(flag); }
482 bool HasFlag(CreatureStaticFlags3 flag) const { return _staticFlags.HasFlag(flag); }
483 bool HasFlag(CreatureStaticFlags4 flag) const { return _staticFlags.HasFlag(flag); }
484 bool HasFlag(CreatureStaticFlags5 flag) const { return _staticFlags.HasFlag(flag); }
485 bool HasFlag(CreatureStaticFlags6 flag) const { return _staticFlags.HasFlag(flag); }
486 bool HasFlag(CreatureStaticFlags7 flag) const { return _staticFlags.HasFlag(flag); }
487 bool HasFlag(CreatureStaticFlags8 flag) const { return _staticFlags.HasFlag(flag); }
488
489 uint32 GetGossipMenuId() const;
490 void SetGossipMenuId(uint32 gossipMenuId);
491
492 uint32 GetTrainerId() const;
493 void SetTrainerId(Optional<uint32> trainerId);
494
495 void SummonGraveyardTeleporter();
496
497 void InitializeInteractSpellId();
498 void SetInteractSpellId(int32 interactSpellId) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::InteractSpellID), interactSpellId); }
499
501
502 protected:
503 void BuildValuesCreate(UF::UpdateFieldFlag flags, ByteBuffer& data, Player const* target) const override;
504 void BuildValuesUpdate(UF::UpdateFieldFlag flags, ByteBuffer& data, Player const* target) const override;
505
506 public:
507 void BuildValuesUpdateWithFlag(UF::UpdateFieldFlag flags, ByteBuffer& data, Player const* target) const override;
508 void BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask,
509 UF::UnitData::Mask const& requestedUnitMask, Player const* target, bool ignoreNestedChangesMask) const;
510
511 struct ValuesUpdateForPlayerWithMaskSender // sender compatible with MessageDistDeliverer
512 {
513 explicit ValuesUpdateForPlayerWithMaskSender(Creature const* owner) : Owner(owner), IgnoreNestedChangesMask(false) { }
514
519
520 void operator()(Player const* player) const;
521 };
522
523 protected:
524 bool CreateFromProto(ObjectGuid::LowType guidlow, uint32 entry, CreatureData const* data = nullptr, uint32 vehId = 0);
525 bool InitEntry(uint32 entry, CreatureData const* data = nullptr);
526
527 // vendor items
529
530 static float GetHealthMod(CreatureClassifications classification);
531
534
537 time_t m_corpseRemoveTime; // (msecs)timer for death or corpse disappearance
538 time_t m_respawnTime; // (secs) time of next respawn
539 uint32 m_respawnDelay; // (secs) delay between corpse disappearance and respawning
540 uint32 m_corpseDelay; // (secs) delay between death and corpse disappearance
543 uint32 m_boundaryCheckTime; // (msecs) remaining time for next evade boundary check
544
545 ReactStates m_reactState; // for AI, not charmInfo
546 void RegenerateHealth();
547 void Regenerate(Powers power);
552
557
562
565
567
571 std::array<std::string const*, 3> m_stringIds;
573
575 uint16 m_LootMode; // Bitmask (default: LOOT_MODE_DEFAULT) that determines what loot will be lootable
576
578
579 bool IsInvisibleDueToDespawn(WorldObject const* seer) const override;
580 bool CanAlwaysSee(WorldObject const* obj) const override;
581
582 private:
583 void ForcedDespawn(uint32 timeMSToDespawn = 0, Seconds forceRespawnTimer = 0s);
584 bool CheckNoGrayAggroConfig(uint32 playerLevel, uint32 creatureLevel) const; // No aggro from gray creatures
585
586 // Waypoint path
588 std::pair<uint32/*nodeId*/, uint32/*pathId*/> _currentWaypointNodeInfo;
589
590 // Formation var
594
596
597 /* Spell focus system */
598 void ReacquireSpellFocusTarget();
599 struct
600 {
601 ::Spell const* Spell = nullptr;
602 uint32 Delay = 0; // ms until the creature's target should snap back (0 = no snapback scheduled)
603 ObjectGuid Target; // the creature's "real" target while casting
604 float Orientation = 0.0f; // the creature's "real" orientation while casting
605 } _spellFocusInfo;
606
607 time_t _lastDamagedTime; // Part of Evade mechanics
609
610 // Draws data from m_creatureDifficulty and spawn/difficulty based override data and returns a CreatureStaticFlagsHolder value which contains the data of both
611 CreatureStaticFlagsHolder GenerateStaticFlags(CreatureDifficulty const* creatureDifficulty, ObjectGuid::LowType spawnId, Difficulty difficultyId) const;
612 void ApplyAllStaticFlags(CreatureStaticFlagsHolder const& flags);
613
614 // Regenerate health
615 bool _regenerateHealth; // Set on creation
616
622};
623
625{
626 public:
627 AssistDelayEvent(ObjectGuid victim, Unit& owner) : BasicEvent(), m_victim(victim), m_owner(owner) { }
628
629 bool Execute(uint64 e_time, uint32 p_time) override;
630 void AddAssistant(ObjectGuid guid) { m_assistants.push_back(guid); }
631 private:
633
637};
638
640{
641 public:
642 ForcedDespawnDelayEvent(Creature& owner, Seconds respawnTimer) : BasicEvent(), m_owner(owner), m_respawnTimer(respawnTimer) { }
643 bool Execute(uint64 e_time, uint32 p_time) override;
644
645 private:
648};
649
650#endif
LocaleConstant
Definition Common.h:51
@ CREATURE_FLAG_EXTRA_DUNGEON_BOSS
@ CREATURE_FLAG_EXTRA_TRIGGER
@ CREATURE_FLAG_EXTRA_CIVILIAN
@ CREATURE_FLAG_EXTRA_GUARD
@ CREATURE_FLAG_EXTRA_ALL_DIMINISH
CreatureStaticFlags7
CreatureStaticFlags6
@ CREATURE_STATIC_FLAG_6_ALWAYS_STAND_ON_TARGET
CreatureStaticFlags8
CreatureStaticFlags5
@ CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN
@ CREATURE_STATIC_FLAG_5_NO_LEAVE_COMBAT_STATE_RESTORE
CreatureStaticFlags
@ CREATURE_STATIC_FLAG_AQUATIC
@ CREATURE_STATIC_FLAG_NO_XP
@ CREATURE_STATIC_FLAG_NO_MELEE_FLEE
@ CREATURE_STATIC_FLAG_UNKILLABLE
@ CREATURE_STATIC_FLAG_SESSILE
@ CREATURE_STATIC_FLAG_NO_LOOT
@ CREATURE_STATIC_FLAG_FLOATING
@ CREATURE_STATIC_FLAG_AMPHIBIOUS
CreatureStaticFlags3
@ CREATURE_STATIC_FLAG_3_CANT_SWIM
@ CREATURE_STATIC_FLAG_3_CANNOT_PENETRATE_WATER
@ CREATURE_STATIC_FLAG_3_NO_THREAT_FEEDBACK
CreatureStaticFlags4
@ CREATURE_STATIC_FLAG_4_AI_WILL_ONLY_SWIM_IF_TARGET_SWIMS
@ CREATURE_STATIC_FLAG_4_NO_MELEE_APPROACH
@ CREATURE_STATIC_FLAG_4_IGNORE_LOS_WHEN_CASTING_ON_ME
@ CREATURE_STATIC_FLAG_4_TREAT_AS_RAID_UNIT_FOR_HELPFUL_SPELLS
CreatureStaticFlags2
@ CREATURE_STATIC_FLAG_2_IGNORE_FEIGN_DEATH
@ CREATURE_STATIC_FLAG_2_IGNORE_SANCTUARY
const uint32 MAX_CREATURE_SPELLS
VendorInventoryReason
Definition Creature.h:57
VendorDataTypeFlags
Definition Creature.h:63
std::vector< uint8 > CreatureTextRepeatIds
Definition Creature.h:78
std::list< VendorItemCount > VendorItemCounts
Definition Creature.h:49
std::unordered_map< uint8, CreatureTextRepeatIds > CreatureTextRepeatGroup
Definition Creature.h:79
static constexpr uint8 WILD_BATTLE_PET_DEFAULT_LEVEL
Definition Creature.h:74
static constexpr size_t CREATURE_TAPPERS_SOFT_CAP
Definition Creature.h:75
Difficulty
Definition DBCEnums.h:935
#define TC_GAME_API
Definition Define.h:129
uint8_t uint8
Definition Define.h:156
int8_t int8
Definition Define.h:152
int32_t int32
Definition Define.h:150
uint64_t uint64
Definition Define.h:153
uint16_t uint16
Definition Define.h:155
uint32_t uint32
Definition Define.h:154
uint16 flags
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition Duration.h:24
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition Duration.h:28
#define DEFINE_ENUM_FLAG(enumType)
Definition EnumFlag.h:26
MovementGeneratorType
@ MOVEMENTFLAG_CAN_FLY
std::list< ObjectGuid > GuidList
Definition ObjectGuid.h:433
std::unordered_set< ObjectGuid > GuidUnorderedSet
Definition ObjectGuid.h:435
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition Optional.h:25
static void SaveToDB(QuestPool const &pool, CharacterDatabaseTransaction trans)
SpellSchoolMask
StringIdType
AiReaction
WeaponAttackType
@ BASE_ATTACK
Powers
@ LOOT_MODE_DEFAULT
Stats
CreatureClassifications
SpellSchools
ReactStates
@ REACT_PASSIVE
NPCFlags
Non Player Character flags.
DeathState
Definition Unit.h:265
@ UNIT_STATE_EVADE
Definition Unit.h:297
ObjectGuid m_victim
Definition Creature.h:634
AssistDelayEvent(ObjectGuid victim, Unit &owner)
Definition Creature.h:627
void AddAssistant(ObjectGuid guid)
Definition Creature.h:630
GuidList m_assistants
Definition Creature.h:635
void SetUpdateFieldValue(UF::UpdateFieldPrivateSetter< T > setter, typename UF::UpdateFieldPrivateSetter< T >::value_type value)
Definition BaseEntity.h:221
bool IsTreatedAsRaidUnit() const
Definition Creature.h:242
bool HasClassification(CreatureClassifications classification) const
Definition Creature.h:173
time_t _pickpocketLootRestore
Timers.
Definition Creature.h:536
bool CanMelee() const
Definition Creature.h:239
VendorItemCounts m_vendorItemCounts
Definition Creature.h:528
time_t const & GetRespawnTime() const
Definition Creature.h:361
void SetHomePosition(float x, float y, float z, float o)
Definition Creature.h:394
bool IsTapListNotClearedOnEvade() const
Definition Creature.h:315
float m_wanderDistance
Definition Creature.h:542
void SetNoSearchAssistance(bool val)
Definition Creature.h:348
void RemoveLootMode(uint16 lootMode)
Definition Creature.h:329
void SetUnkillable(bool unkillable)
Definition Creature.h:195
void SetIgnoreSanctuarySpellEffect(bool ignoreSanctuary)
Definition Creature.h:355
CreatureDifficulty const * m_creatureDifficulty
Definition Creature.h:570
bool HasLootMode(uint16 lootMode) const
Definition Creature.h:326
int8 GetOriginalEquipmentId() const
Definition Creature.h:262
bool IsTrigger() const
Definition Creature.h:127
std::array< std::string const *, 3 > m_stringIds
Definition Creature.h:571
void SetHomePosition(Position const &pos)
Definition Creature.h:395
void ResetLootMode()
Definition Creature.h:330
void DoImmediateBoundaryCheck()
Definition Creature.h:373
CreatureTextRepeatGroup m_textRepeat
Definition Creature.h:608
float _sparringHealthPct
Definition Creature.h:621
bool _regenerateHealth
Definition Creature.h:615
CreatureStaticFlagsHolder _staticFlags
Definition Creature.h:577
bool IsDungeonBoss() const
Definition Creature.h:175
SpellSchoolMask m_meleeDamageSchoolMask
Definition Creature.h:558
bool IsAggroGracePeriodExpired()
Definition Creature.h:468
Optional< uint32 > m_lootId
Definition Creature.h:574
int8 m_originalEquipmentId
Definition Creature.h:551
bool GetRespawnCompatibilityMode() const
Definition Creature.h:431
bool IsIgnoringChaseRange() const
Definition Creature.h:386
void SetDisableReputationGain(bool disable)
Definition Creature.h:420
ObjectGuid::LowType m_spawnId
For new or temporary creatures is 0 for saved it is lowguid.
Definition Creature.h:549
std::unique_ptr< Loot > m_loot
Definition Creature.h:307
CreatureDifficulty const * GetCreatureDifficulty() const
Definition Creature.h:276
Position m_transportHomePosition
Definition Creature.h:564
CreatureClassifications GetCreatureClassification() const
Definition Creature.h:172
Optional< uint32 > _defaultMountDisplayIdOverride
Definition Creature.h:617
bool IsSessile() const
Definition Creature.h:149
uint16 GetLootMode() const
Definition Creature.h:325
bool IsIgnoringFeignDeath() const
Definition Creature.h:352
bool IsCivilian() const
Definition Creature.h:126
void SetImmuneToPC(bool apply) override
Definition Creature.h:190
bool IsReputationGainDisabled() const
Definition Creature.h:421
float GetSparringHealthPct() const
Definition Creature.h:472
bool CanIgnoreLineOfSightWhenCastingOnMe() const
Definition Creature.h:241
Optional< std::string > m_scriptStringId
Definition Creature.h:572
bool m_cannotReachTarget
Definition Creature.h:555
bool m_respawnCompatibilityMode
Definition Creature.h:593
bool IsSwimDisabled() const
Definition Creature.h:160
bool IsFloating() const
Definition Creature.h:142
std::unordered_map< ObjectGuid, std::unique_ptr< Loot > > m_personalLoot
Definition Creature.h:308
CreatureTemplate const * m_creatureInfo
Definition Creature.h:568
bool IsSpawnedOnTransport() const
Definition Creature.h:116
bool CanFly() const override
Definition Creature.h:167
void GetHomePosition(float &x, float &y, float &z, float &ori) const
Definition Creature.h:396
Position const & GetHomePosition() const
Definition Creature.h:397
void SetLastDamagedTime(time_t val)
Definition Creature.h:450
bool IsEvadingAttacks() const
Definition Creature.h:225
bool HasReactState(ReactStates state) const
Definition Creature.h:182
bool m_triggerJustAppeared
Definition Creature.h:592
bool _aggroGracePeriodExpired
Definition Creature.h:595
void SetCanGiveExperience(bool xpEnabled)
Definition Creature.h:458
void GetTransportHomePosition(float &x, float &y, float &z, float &ori) const
Definition Creature.h:401
uint32 GetOriginalEntry() const
Definition Creature.h:426
uint32 m_baseAttackPower
Definition Creature.h:559
bool IsThreatFeedbackDisabled() const
Definition Creature.h:464
MovementGeneratorType m_defaultMovementType
Definition Creature.h:548
bool CanHaveLoot() const
Definition Creature.h:303
void SetReactState(ReactStates st)
Definition Creature.h:180
UF::OptionalUpdateField< UF::VendorData, int32(WowCS::EntityFragment::FVendor_C), 0 > m_vendorData
Definition Creature.h:500
GuidUnorderedSet const & GetTapList() const
Definition Creature.h:312
uint32 _waypointPathId
Definition Creature.h:587
void ResetPlayerDamageReq()
Definition Creature.h:423
int32 _creatureImmunitiesId
Definition Creature.h:618
std::pair< uint32, uint32 > _currentWaypointNodeInfo
Definition Creature.h:588
void SetCannotPenetrateWater(bool cannotPenetrateWater)
Definition Creature.h:157
bool hasLootRecipient() const
Definition Creature.h:314
void SetRespawnCompatibilityMode(bool mode=true)
Definition Creature.h:430
void SetCurrentEquipmentId(uint8 id)
Definition Creature.h:264
void SetRespawnDelay(uint32 delay)
Definition Creature.h:368
bool HasFlag(CreatureStaticFlags7 flag) const
Definition Creature.h:486
uint32 m_cannotReachTimer
Definition Creature.h:556
uint32 m_respawnDelay
Definition Creature.h:539
time_t m_corpseRemoveTime
Definition Creature.h:537
void UpdateCurrentWaypointInfo(uint32 nodeId, uint32 pathId)
Definition Creature.h:409
void SetRestoreStateOnEvade(bool restoreOnEvade)
Definition Creature.h:228
time_t m_respawnTime
Definition Creature.h:538
uint32 _gossipMenuId
Definition Creature.h:619
void SetRegenerateHealth(bool value)
Definition Creature.h:381
bool HasFlag(CreatureStaticFlags3 flag) const
Definition Creature.h:482
CreatureData const * m_creatureData
Definition Creature.h:569
float m_CombatDistance
Definition Creature.h:435
SpellSchoolMask GetMeleeDamageSchoolMask(WeaponAttackType=BASE_ATTACK) const override
Definition Creature.h:237
bool HasFlag(CreatureStaticFlags2 flag) const
Definition Creature.h:481
uint16 m_LootMode
Definition Creature.h:575
uint32 m_boundaryCheckTime
Definition Creature.h:543
Position m_homePosition
Definition Creature.h:563
uint32 GetWaypointPathId() const
Definition Creature.h:404
CreatureData const * GetCreatureData() const
Definition Creature.h:275
std::pair< uint32, uint32 > GetCurrentWaypointInfo() const
Definition Creature.h:408
ObjectGuid::LowType GetSpawnId() const
Definition Creature.h:110
bool CanNotReachTarget() const
Definition Creature.h:390
bool m_AlreadyCallAssistance
Definition Creature.h:553
CreatureTemplate const * GetCreatureTemplate() const
Definition Creature.h:274
uint32 GetRespawnDelay() const
Definition Creature.h:367
Position const & GetTransportHomePosition() const
Definition Creature.h:402
bool CanRegenerateHealth() const
Definition Creature.h:380
bool DisableReputationGain
Definition Creature.h:566
CreatureGroup * m_formation
Definition Creature.h:591
void SetInteractSpellId(int32 interactSpellId)
Definition Creature.h:498
bool HasSearchedAssistance() const
Definition Creature.h:349
void SetTransportHomePosition(Position const &pos)
Definition Creature.h:400
bool IsStateRestoredOnEvade() const
Definition Creature.h:227
uint32 m_corpseDelay
Definition Creature.h:540
bool HasFlag(CreatureStaticFlags4 flag) const
Definition Creature.h:483
bool HasFlag(CreatureStaticFlags6 flag) const
Definition Creature.h:485
void SetCanHaveLoot(bool canHaveLoot)
Definition Creature.h:304
void SetNoThreatFeedback(bool noThreatFeedback)
Definition Creature.h:465
void SetImmuneToNPC(bool apply) override
Definition Creature.h:193
uint8 m_equipmentId
Definition Creature.h:550
CreatureGroup * GetFormation()
Definition Creature.h:414
bool m_AlreadySearchedAssistance
Definition Creature.h:554
uint32 GetCorpseDelay() const
Definition Creature.h:124
GuidUnorderedSet m_tapList
Definition Creature.h:532
bool m_dontClearTapListOnEvade
Definition Creature.h:533
bool CannotPenetrateWater() const
Definition Creature.h:156
void OverrideSparringHealthPct(float healthPct)
Definition Creature.h:470
std::string_view GetStringId(StringIdType type) const
Definition Creature.h:285
bool CanEnterWater() const override
Definition Creature.h:166
uint32 m_originalEntry
Definition Creature.h:561
void SetImmuneToAll(bool apply) override
Definition Creature.h:187
bool IsIgnoringSanctuarySpellEffect() const
Definition Creature.h:354
bool HasFlag(CreatureStaticFlags8 flag) const
Definition Creature.h:487
bool m_isTempWorldObject
Definition Creature.h:437
void AddLootMode(uint16 lootMode)
Definition Creature.h:328
ObjectGuid Target
Definition Creature.h:603
ReactStates m_reactState
Definition Creature.h:545
time_t _lastDamagedTime
Definition Creature.h:607
ReactStates GetReactState() const
Definition Creature.h:181
void SetTransportHomePosition(float x, float y, float z, float o)
Definition Creature.h:399
void SetWanderDistance(float dist)
Definition Creature.h:371
time_t GetLastDamagedTime() const
Definition Creature.h:449
Optional< uint32 > _trainerId
Definition Creature.h:620
bool HasFlag(CreatureStaticFlags flag) const
Definition Creature.h:480
uint8 GetCurrentEquipmentId() const
Definition Creature.h:263
void SetFormation(CreatureGroup *formation)
Definition Creature.h:415
void SetCorpseDelay(uint32 delay, bool ignoreCorpseDecayRatio=false)
Definition Creature.h:118
void SetMeleeDamageSchool(SpellSchools school)
Definition Creature.h:238
float GetWanderDistance() const
Definition Creature.h:370
bool IsAmphibious() const
Definition Creature.h:139
void ResetPickPocketRefillTimer()
Definition Creature.h:310
void SetNoCallAssistance(bool val)
Definition Creature.h:347
void SetTreatAsRaidUnit(bool treatAsRaidUnit)
Definition Creature.h:243
bool IsAffectedByDiminishingReturns() const override
Definition Creature.h:176
bool IsRacialLeader() const
Definition Creature.h:125
bool m_ignoreCorpseDecayRatio
Definition Creature.h:541
bool CanOnlySwimIfTargetSwims() const
Definition Creature.h:163
bool IsAquatic() const
Definition Creature.h:136
bool HasFlag(CreatureStaticFlags5 flag) const
Definition Creature.h:484
void SetIgnoreChaseRange(bool ignoreChaseRange)
Definition Creature.h:387
bool IsInEvadeMode() const
Definition Creature.h:224
bool IsGuard() const
Definition Creature.h:128
CreatureAI * AI() const
Definition Creature.h:235
uint32 m_baseRangedAttackPower
Definition Creature.h:560
void SetLootMode(uint16 lootMode)
Definition Creature.h:327
void SetDefaultMovementType(MovementGeneratorType mgt)
Definition Creature.h:170
void LoadPath(uint32 pathid)
Definition Creature.h:405
void SetTapList(GuidUnorderedSet tapList)
Definition Creature.h:313
void SetOriginalEntry(uint32 entry)
Definition Creature.h:427
void DisappearAndDie()
Definition Creature.h:95
void SetIgnoreFeignDeath(bool ignoreFeignDeath)
Definition Creature.h:353
uint64 m_PlayerDamageReq
Definition Creature.h:424
Seconds const m_respawnTimer
Definition Creature.h:647
ForcedDespawnDelayEvent(Creature &owner, Seconds respawnTimer)
Definition Creature.h:642
Definition Map.h:227
uint64 LowType
Definition ObjectGuid.h:321
virtual void BuildValuesUpdateWithFlag(UF::UpdateFieldFlag flags, ByteBuffer &data, Player const *target) const
Definition Object.cpp:135
virtual bool hasQuest(uint32) const
Definition Object.h:103
virtual void BuildValuesCreate(UF::UpdateFieldFlag flags, ByteBuffer &data, Player const *target) const =0
virtual void BuildValuesUpdate(UF::UpdateFieldFlag flags, ByteBuffer &data, Player const *target) const =0
virtual Loot * GetLootForPlayer(Player const *player) const
Definition Object.h:167
virtual void SetObjectScale(float scale)
Definition Object.h:93
virtual bool hasInvolvedQuest(uint32) const
Definition Object.h:104
virtual SpawnTrackingStateData const * GetSpawnTrackingStateDataForPlayer(Player const *player) const
Definition Object.h:169
Definition Spell.h:277
Definition Unit.h:647
void SetImmuneToAll(bool apply, bool keepCombat)
Definition Unit.cpp:8524
void SetImmuneToPC(bool apply, bool keepCombat)
Definition Unit.cpp:8537
virtual bool IsMovementPreventedByCasting() const
Definition Unit.cpp:3283
virtual MovementGeneratorType GetDefaultMovementType() const
Definition Unit.cpp:10748
void Heartbeat() override
Definition Unit.cpp:507
virtual int32 GetCreatePowerValue(Powers power) const
void AddToWorld() override
Definition Unit.cpp:10301
virtual float GetArmorMultiplierForTarget(WorldObject const *) const
Definition Unit.h:821
virtual ClassPowerTypes GetPowerTypes() const =0
virtual void SetCanDualWield(bool value)
Definition Unit.h:716
virtual bool UpdateAllStats()=0
virtual void UpdateAttackPowerAndDamage(bool ranged=false)=0
virtual void AtDisengage()
Definition Unit.h:1998
std::string GetDebugInfo() const override
Definition Unit.cpp:14738
void SetImmuneToNPC(bool apply, bool keepCombat)
Definition Unit.cpp:8560
UnitAI * GetAI() const
Definition Unit.h:680
virtual void SetInteractionAllowedWhileHostile(bool interactionAllowed)
Definition Unit.cpp:9319
virtual bool HasSpell(uint32) const
Definition Unit.h:1099
virtual bool IsAffectedByDiminishingReturns() const
Definition Unit.h:698
bool IsImmuneToNPC() const
Definition Unit.h:1063
virtual void SetInteractionAllowedInCombat(bool interactionAllowed)
Definition Unit.cpp:9329
virtual bool IsImmunedToSpellEffect(SpellInfo const *spellInfo, SpellEffectInfo const &spellEffectInfo, WorldObject const *caster, bool requireImmunityPurgesEffectAttribute=false) const
Definition Unit.cpp:7936
bool IsImmuneToAll() const
Definition Unit.h:1057
virtual void UpdateNearbyPlayersInteractions()
Definition Unit.cpp:9340
virtual void UpdateArmor()=0
virtual float GetDamageMultiplierForTarget(WorldObject const *) const
Definition Unit.h:820
virtual void UpdateMaxPower(Powers power)=0
uint64 GetHealth() const
Definition Unit.h:800
virtual bool UpdateStats(Stats stat)=0
uint8 GetLevelForTarget(WorldObject const *) const override
Definition Unit.h:771
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
UF::UpdateField< UF::UnitData, int32(WowCS::EntityFragment::CGObject), TYPEID_UNIT > m_unitData
Definition Unit.h:1897
virtual float GetHealthMultiplierForTarget(WorldObject const *) const
Definition Unit.h:819
bool HasUnitState(const uint32 f) const
Definition Unit.h:755
virtual void Update(uint32 time) override
Definition Unit.cpp:428
virtual bool CanSwim() const
Definition Unit.cpp:13040
virtual float GetNativeObjectScale() const
Definition Unit.h:1635
void RemoveFromWorld() override
Definition Unit.cpp:10309
bool HasUnitMovementFlag(MovementFlags f) const
Definition Unit.h:1761
virtual void UpdateMaxHealth()=0
virtual bool HasSpellFocus(Spell const *=nullptr) const
Definition Unit.h:1513
virtual void setDeathState(DeathState s)
Definition Unit.cpp:9180
virtual void AtEngage(Unit *target)
Definition Unit.cpp:9277
bool IsFlying() const
Definition Unit.h:1823
virtual bool IsEngaged() const
Definition Unit.h:1049
bool IsImmuneToPC() const
Definition Unit.h:1060
virtual void SetDisplayId(uint32 displayId, bool setNative=false)
Definition Unit.cpp:10852
virtual void ExitVehicle(Position const *exitPosition=nullptr)
Definition Unit.cpp:12931
constexpr uint32 GetMapId() const
Definition Position.h:216
virtual bool IsInvisibleDueToDespawn(WorldObject const *seer) const
Definition Object.h:607
std::string GetNameForLocaleIdx(LocaleConstant) const override
Definition Object.h:345
virtual bool CanAlwaysSee(WorldObject const *) const
Definition Object.h:604
Player session in the World.
UpdateFieldFlag
Definition UpdateField.h:37
ValuesUpdateForPlayerWithMaskSender(Creature const *owner)
Definition Creature.h:513
Definition Loot.h:286
UpdateField< int32, 96, 119 > InteractSpellID
time_t lastIncrementTime
Definition Creature.h:46
uint32 itemId
Definition Creature.h:44