TrinityCore
Loading...
Searching...
No Matches
Object.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 _OBJECT_H
19#define _OBJECT_H
20
21#include "Common.h"
22#include "Duration.h"
23#include "EventProcessor.h"
24#include "MapDefines.h"
25#include "ModelIgnoreFlags.h"
26#include "MovementInfo.h"
27#include "ObjectDefines.h"
28#include "ObjectGuid.h"
29#include "Optional.h"
30#include "Position.h"
31#include "SharedDefines.h"
32#include "SpellDefines.h"
33#include "UniqueTrackablePtr.h"
34#include "UpdateFields.h"
35#include "UpdateMask.h"
36#include <list>
37#include <set>
38#include <unordered_map>
39
40class Corpse;
41class Creature;
42class CreatureAI;
43class DynamicObject;
44class GameObject;
45class InstanceScript;
46class Item;
47class Map;
48class Player;
49class Spell;
51class SpellEffectInfo;
52class SpellInfo;
53class TempSummon;
54class Transport;
55class Unit;
56class UpdateData;
57class WorldObject;
58class WorldPacket;
59class ZoneScript;
61struct QuaternionData;
62
63typedef std::unordered_map<Player*, UpdateData> UpdateDataMapType;
64
65float const DEFAULT_COLLISION_HEIGHT = 2.03128f; // Most common value in dbc
66static constexpr Milliseconds const HEARTBEAT_INTERVAL = 5s + 200ms;
67
69{
70 public:
71 virtual ~Object();
72
73 bool IsInWorld() const { return m_inWorld; }
74
75 virtual void AddToWorld();
76 virtual void RemoveFromWorld();
77
78 static ObjectGuid GetGUID(Object const* o) { return o ? o->GetGUID() : ObjectGuid::Empty; }
79 ObjectGuid GetGUID() const { return GetGuidValue(OBJECT_FIELD_GUID); }
80 PackedGuid const& GetPackGUID() const { return m_PackGUID; }
81 uint32 GetEntry() const { return GetUInt32Value(OBJECT_FIELD_ENTRY); }
82 void SetEntry(uint32 entry) { SetUInt32Value(OBJECT_FIELD_ENTRY, entry); }
83
84 float GetObjectScale() const { return GetFloatValue(OBJECT_FIELD_SCALE_X); }
85 virtual void SetObjectScale(float scale) { SetFloatValue(OBJECT_FIELD_SCALE_X, scale); }
86
87 virtual uint32 GetDynamicFlags() const { return 0; }
88 bool HasDynamicFlag(uint32 flag) const { return (GetDynamicFlags() & flag) != 0; }
89 virtual void SetDynamicFlag(uint32 flag) { ReplaceAllDynamicFlags(GetDynamicFlags() | flag); }
90 virtual void RemoveDynamicFlag(uint32 flag) { ReplaceAllDynamicFlags(GetDynamicFlags() & ~flag); }
91 virtual void ReplaceAllDynamicFlags([[maybe_unused]] uint32 flag) { }
92
93 TypeID GetTypeId() const { return m_objectTypeId; }
94 bool isType(uint16 mask) const { return (mask & m_objectType) != 0; }
95
96 virtual void BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const;
97 void SendUpdateToPlayer(Player* player);
98
99 void BuildValuesUpdateBlockForPlayer(UpdateData* data, Player const* target) const;
100 void BuildOutOfRangeUpdateBlock(UpdateData* data) const;
101 void BuildMovementUpdateBlock(UpdateData* data, uint32 flags = 0) const;
102
103 virtual void DestroyForPlayer(Player* target, bool onDeath = false) const;
104
105 int32 GetInt32Value(uint16 index) const;
106 uint32 GetUInt32Value(uint16 index) const;
107 uint64 GetUInt64Value(uint16 index) const;
108 float GetFloatValue(uint16 index) const;
109 uint8 GetByteValue(uint16 index, uint8 offset) const;
110 uint16 GetUInt16Value(uint16 index, uint8 offset) const;
111 ObjectGuid GetGuidValue(uint16 index) const;
112
113 void SetInt32Value(uint16 index, int32 value);
114 void SetUInt32Value(uint16 index, uint32 value);
115 void UpdateUInt32Value(uint16 index, uint32 value);
116 void SetUInt64Value(uint16 index, uint64 value);
117 void SetFloatValue(uint16 index, float value);
118 void SetByteValue(uint16 index, uint8 offset, uint8 value);
119 void SetUInt16Value(uint16 index, uint8 offset, uint16 value);
120 void SetInt16Value(uint16 index, uint8 offset, int16 value) { SetUInt16Value(index, offset, uint16(value)); }
121 void SetGuidValue(uint16 index, ObjectGuid value);
122 void SetStatFloatValue(uint16 index, float value);
123 void SetStatInt32Value(uint16 index, int32 value);
124
125 bool AddGuidValue(uint16 index, ObjectGuid value);
126 bool RemoveGuidValue(uint16 index, ObjectGuid value);
127
128 void ApplyModUInt32Value(uint16 index, int32 val, bool apply);
129 void ApplyModInt32Value(uint16 index, int32 val, bool apply);
130 void ApplyModUInt16Value(uint16 index, uint8 offset, int16 val, bool apply);
131 void ApplyModPositiveFloatValue(uint16 index, float val, bool apply);
132 void ApplyModSignedFloatValue(uint16 index, float val, bool apply);
133
134 void SetFlag(uint16 index, uint32 newFlag);
135 void RemoveFlag(uint16 index, uint32 oldFlag);
136 void ToggleFlag(uint16 index, uint32 flag);
137 bool HasFlag(uint16 index, uint32 flag) const;
138 void ApplyModFlag(uint16 index, uint32 flag, bool apply);
139
140 void SetByteFlag(uint16 index, uint8 offset, uint8 newFlag);
141 void RemoveByteFlag(uint16 index, uint8 offset, uint8 newFlag);
142 void ToggleByteFlag(uint16 index, uint8 offset, uint8 flag);
143 bool HasByteFlag(uint16 index, uint8 offset, uint8 flag) const;
144 void ApplyModByteFlag(uint16 index, uint8 offset, uint8 flag, bool apply);
145
146 void SetFlag64(uint16 index, uint64 newFlag);
147 void RemoveFlag64(uint16 index, uint64 oldFlag);
148 void ToggleFlag64(uint16 index, uint64 flag);
149 bool HasFlag64(uint16 index, uint64 flag) const;
150 void ApplyModFlag64(uint16 index, uint64 flag, bool apply);
151
152 void ClearUpdateMask(bool remove);
153
154 uint16 GetValuesCount() const { return m_valuesCount; }
155
156 virtual std::string const& GetNameForLocaleIdx(LocaleConstant /*locale*/) const = 0;
157
158 virtual bool hasQuest(uint32 /* quest_id */) const { return false; }
159 virtual bool hasInvolvedQuest(uint32 /* quest_id */) const { return false; }
160 void SetIsNewObject(bool enable) { m_isNewObject = enable; }
162 void BuildFieldsUpdate(Player*, UpdateDataMapType &) const;
163
164 void SetFieldNotifyFlag(uint16 flag) { _fieldNotifyFlags |= flag; }
165 void RemoveFieldNotifyFlag(uint16 flag) { _fieldNotifyFlags &= uint16(~flag); }
166
167 // FG: some hacky helpers
168 void ForceValuesUpdateAtIndex(uint32);
169
170 inline bool IsWorldObject() const { return isType(TYPEMASK_WORLDOBJECT); }
171 static WorldObject* ToWorldObject(Object* o) { return o ? o->ToWorldObject() : nullptr; }
172 static WorldObject const* ToWorldObject(Object const* o) { return o ? o->ToWorldObject() : nullptr; }
173 WorldObject* ToWorldObject() { if (IsWorldObject()) return reinterpret_cast<WorldObject*>(this); else return nullptr; }
174 WorldObject const* ToWorldObject() const { if (IsWorldObject()) return reinterpret_cast<WorldObject const*>(this); else return nullptr; }
175
176 inline bool IsItem() const { return isType(TYPEMASK_ITEM); }
177 static Item* ToItem(Object* o) { return o ? o->ToItem() : nullptr; }
178 static Item const* ToItem(Object const* o) { return o ? o->ToItem() : nullptr; }
179 Item* ToItem() { if (IsItem()) return reinterpret_cast<Item*>(this); else return nullptr; }
180 Item const* ToItem() const { if (IsItem()) return reinterpret_cast<Item const*>(this); else return nullptr; }
181
182 inline bool IsPlayer() const { return GetTypeId() == TYPEID_PLAYER; }
183 static Player* ToPlayer(Object* o) { return o ? o->ToPlayer() : nullptr; }
184 static Player const* ToPlayer(Object const* o) { return o ? o->ToPlayer() : nullptr; }
185 Player* ToPlayer() { if (IsPlayer()) return reinterpret_cast<Player*>(this); else return nullptr; }
186 Player const* ToPlayer() const { if (IsPlayer()) return reinterpret_cast<Player const*>(this); else return nullptr; }
187
188 inline bool IsCreature() const { return GetTypeId() == TYPEID_UNIT; }
189 static Creature* ToCreature(Object* o) { return o ? o->ToCreature() : nullptr; }
190 static Creature const* ToCreature(Object const* o) { return o ? o->ToCreature() : nullptr; }
191 Creature* ToCreature() { if (IsCreature()) return reinterpret_cast<Creature*>(this); else return nullptr; }
192 Creature const* ToCreature() const { if (IsCreature()) return reinterpret_cast<Creature const*>(this); else return nullptr; }
193
194 inline bool IsUnit() const { return isType(TYPEMASK_UNIT); }
195 static Unit* ToUnit(Object* o) { return o ? o->ToUnit() : nullptr; }
196 static Unit const* ToUnit(Object const* o) { return o ? o->ToUnit() : nullptr; }
197 Unit* ToUnit() { if (IsUnit()) return reinterpret_cast<Unit*>(this); else return nullptr; }
198 Unit const* ToUnit() const { if (IsUnit()) return reinterpret_cast<Unit const*>(this); else return nullptr; }
199
200 inline bool IsGameObject() const { return GetTypeId() == TYPEID_GAMEOBJECT; }
201 static GameObject* ToGameObject(Object* o) { return o ? o->ToGameObject() : nullptr; }
202 static GameObject const* ToGameObject(Object const* o) { return o ? o->ToGameObject() : nullptr; }
203 GameObject* ToGameObject() { if (IsGameObject()) return reinterpret_cast<GameObject*>(this); else return nullptr; }
204 GameObject const* ToGameObject() const { if (IsGameObject()) return reinterpret_cast<GameObject const*>(this); else return nullptr; }
205
206 inline bool IsCorpse() const { return GetTypeId() == TYPEID_CORPSE; }
207 static Corpse* ToCorpse(Object* o) { return o ? o->ToCorpse() : nullptr; }
208 static Corpse const* ToCorpse(Object const* o) { return o ? o->ToCorpse() : nullptr; }
209 Corpse* ToCorpse() { if (IsCorpse()) return reinterpret_cast<Corpse*>(this); else return nullptr; }
210 Corpse const* ToCorpse() const { if (IsCorpse()) return reinterpret_cast<Corpse const*>(this); else return nullptr; }
211
212 inline bool IsDynObject() const { return GetTypeId() == TYPEID_DYNAMICOBJECT; }
213 static DynamicObject* ToDynObject(Object* o) { return o ? o->ToDynObject() : nullptr; }
214 static DynamicObject const* ToDynObject(Object const* o) { return o ? o->ToDynObject() : nullptr; }
215 DynamicObject* ToDynObject() { if (IsDynObject()) return reinterpret_cast<DynamicObject*>(this); else return nullptr; }
216 DynamicObject const* ToDynObject() const { if (IsDynObject()) return reinterpret_cast<DynamicObject const*>(this); else return nullptr; }
217
218 virtual std::string GetDebugInfo() const;
219
220 Trinity::unique_weak_ptr<Object> GetWeakPtr() const { return m_scriptRef; }
221
222 protected:
223 Object();
224
225 void _InitValues();
226 void _Create(ObjectGuid const& guid);
227 [[nodiscard]] bool _LoadIntoDataField(std::string const& data, uint32 startOffset, uint32 count);
228
229 uint32 GetUpdateFieldData(Player const* target, uint32*& flags) const;
230
231 void BuildMovementUpdate(ByteBuffer* data, uint16 flags) const;
232 virtual void BuildValuesUpdate(uint8 updatetype, ByteBuffer* data, Player const* target) const;
233
235
238
239 union
240 {
244 };
245
247
249
251
252 virtual bool AddToObjectUpdate() = 0;
253 virtual void RemoveFromObjectUpdate() = 0;
254 void AddToObjectUpdateIfNeeded();
255
257
258 private:
261
263
264 struct NoopObjectDeleter { void operator()(Object*) const { /*noop - not managed*/ } };
266
267 // for output helpfull error messages from asserts
268 bool PrintIndexError(uint32 index, bool set) const;
269
270 Object(Object const& right) = delete;
271 Object(Object&& right) = delete;
272 Object& operator=(Object const& right) = delete;
273 Object& operator=(Object&& right) = delete;
274};
275
276template <class T_VALUES, class T_FLAGS, class FLAG_TYPE, size_t ARRAY_SIZE>
278{
279 public:
281 {
282 for (uint32 i = 0; i < ARRAY_SIZE; ++i)
283 m_values[i] = T_VALUES(0);
284 m_flags = 0;
285 }
286
287 T_FLAGS GetFlags() const { return m_flags; }
288 bool HasFlag(FLAG_TYPE flag) const { return m_flags & (1 << flag); }
289 void AddFlag(FLAG_TYPE flag) { m_flags |= (1 << flag); }
290 void DelFlag(FLAG_TYPE flag) { m_flags &= ~(1 << flag); }
291
292 T_VALUES GetValue(FLAG_TYPE flag) const { return m_values[flag]; }
293 void SetValue(FLAG_TYPE flag, T_VALUES value) { m_values[flag] = value; }
294 void AddValue(FLAG_TYPE flag, T_VALUES value) { m_values[flag] += value; }
295
296 private:
297 T_VALUES m_values[ARRAY_SIZE];
298 T_FLAGS m_flags;
299};
300
320
337
339{
340 protected:
341 explicit WorldObject(bool isWorldObject); //note: here it means if it is in grid object list or world object list
342 public:
343 virtual ~WorldObject();
344
345 virtual void Update(uint32 diff);
346
347 void AddToWorld() override;
348 void RemoveFromWorld() override;
349
350 void GetNearPoint2D(WorldObject const* searcher, float& x, float& y, float distance, float absAngle) const;
351 void GetNearPoint(WorldObject const* searcher, float& x, float& y, float& z, float distance2d, float absAngle) const;
352 void GetClosePoint(float& x, float& y, float& z, float size, float distance2d = 0, float relAngle = 0) const;
353 void MovePosition(Position &pos, float dist, float angle);
354 Position GetNearPosition(float dist, float angle);
355 void MovePositionToFirstCollision(Position &pos, float dist, float angle);
356 Position GetFirstCollisionPosition(float dist, float angle);
357 Position GetRandomNearPosition(float radius);
358 void GetContactPoint(WorldObject const* obj, float& x, float& y, float& z, float distance2d = CONTACT_DISTANCE) const;
359
360 virtual float GetCombatReach() const { return 0.0f; } // overridden (only) in Unit
361 void UpdateGroundPositionZ(float x, float y, float &z) const;
362 void UpdateAllowedPositionZ(float x, float y, float &z, float* groundZ = nullptr) const;
363
364 void GetRandomPoint(Position const& srcPos, float distance, float& rand_x, float& rand_y, float& rand_z) const;
365 Position GetRandomPoint(Position const& srcPos, float distance) const;
366
367 uint32 GetInstanceId() const { return m_InstanceId; }
368
369 virtual void SetPhaseMask(uint32 newPhaseMask, bool update);
370 uint32 GetPhaseMask() const { return m_phaseMask; }
371 bool InSamePhase(uint32 phasemask) const { return (GetPhaseMask() & phasemask) != 0; }
372 bool InSamePhase(WorldObject const* obj) const { return obj && InSamePhase(obj->GetPhaseMask()); }
373 static bool InSamePhase(WorldObject const* a, WorldObject const* b) { return a && a->InSamePhase(b); }
374
375 uint32 GetZoneId() const { return m_zoneId; }
376 uint32 GetAreaId() const { return m_areaId; }
377 void GetZoneAndAreaId(uint32& zoneid, uint32& areaid) const { zoneid = m_zoneId, areaid = m_areaId; }
378 bool IsInWorldPvpZone() const;
379 bool IsOutdoors() const { return m_outdoors; }
380 ZLiquidStatus GetLiquidStatus() const { return m_liquidStatus; }
381
382 InstanceScript* GetInstanceScript() const;
383
384 std::string const& GetName() const { return m_name; }
385 void SetName(std::string newname) { m_name = std::move(newname); }
386
387 std::string const& GetNameForLocaleIdx(LocaleConstant /*locale*/) const override { return m_name; }
388
389 float GetDistance(WorldObject const* obj) const;
390 float GetDistance(Position const& pos) const;
391 float GetDistance(float x, float y, float z) const;
392 float GetDistance2d(WorldObject const* obj) const;
393 float GetDistance2d(float x, float y) const;
394 float GetDistanceZ(WorldObject const* obj) const;
395
396 bool IsSelfOrInSameMap(WorldObject const* obj) const;
397 bool IsInMap(WorldObject const* obj) const;
398 bool IsWithinDist3d(float x, float y, float z, float dist) const;
399 bool IsWithinDist3d(Position const* pos, float dist) const;
400 bool IsWithinDist2d(float x, float y, float dist) const;
401 bool IsWithinDist2d(Position const* pos, float dist) const;
402 // use only if you will sure about placing both object at same map
403 bool IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D = true) const;
404 bool IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D = true, bool incOwnRadius = true, bool incTargetRadius = true) const;
405 bool IsWithinLOS(float x, float y, float z, LineOfSightChecks checks = LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags ignoreFlags = VMAP::ModelIgnoreFlags::Nothing) const;
406 bool IsWithinLOSInMap(WorldObject const* obj, LineOfSightChecks checks = LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags ignoreFlags = VMAP::ModelIgnoreFlags::Nothing) const;
407 Position GetHitSpherePointFor(Position const& dest) const;
408 void GetHitSpherePointFor(Position const& dest, float& x, float& y, float& z) const;
409 bool GetDistanceOrder(WorldObject const* obj1, WorldObject const* obj2, bool is3D = true) const;
410 bool IsInRange(WorldObject const* obj, float minRange, float maxRange, bool is3D = true) const;
411 bool IsInRange2d(float x, float y, float minRange, float maxRange) const;
412 bool IsInRange3d(float x, float y, float z, float minRange, float maxRange) const;
413 bool isInFront(WorldObject const* target, float arc = float(M_PI)) const;
414 bool isInBack(WorldObject const* target, float arc = float(M_PI)) const;
415
416 bool IsInBetween(Position const& pos1, Position const& pos2, float size = 0) const;
417 bool IsInBetween(WorldObject const* obj1, WorldObject const* obj2, float size = 0) const { return obj1 && obj2 && IsInBetween(obj1->GetPosition(), obj2->GetPosition(), size); }
418
419 virtual void CleanupsBeforeDelete(bool finalCleanup = true); // used in destructor or explicitly before mass creature delete to remove cross-references to already deleted units
420
421 virtual void SendMessageToSet(WorldPacket const* data, bool self) const;
422 virtual void SendMessageToSetInRange(WorldPacket const* data, float dist, bool self) const;
423 virtual void SendMessageToSet(WorldPacket const* data, Player const* skipped_rcvr) const;
424
425 virtual uint8 GetLevelForTarget(WorldObject const* /*target*/) const { return 1; }
426
427 void PlayDistanceSound(uint32 soundId, Player* target = nullptr);
428 void PlayDirectSound(uint32 soundId, Player* target = nullptr);
429 void PlayDirectMusic(uint32 musicId, Player* target = nullptr);
430
431 void SendObjectDeSpawnAnim(ObjectGuid guid);
432
433 void AddObjectToRemoveList();
434
435 float GetGridActivationRange() const;
436 float GetVisibilityRange() const;
437 float GetSightRange(WorldObject const* target = nullptr) const;
438 bool CanSeeOrDetect(WorldObject const* obj, bool implicitDetect = false, bool distanceCheck = false, bool checkAlert = false) const;
439
442
445
448
449 virtual void SetMap(Map* map);
450 virtual void ResetMap();
451 Map* GetMap() const { ASSERT(m_currMap); return m_currMap; }
452 Map* FindMap() const { return m_currMap; }
453 //used to check all object's GetMap() calls when object is not in world!
454
455 void SetZoneScript();
456 void ClearZoneScript();
457 ZoneScript* GetZoneScript() const { return m_zoneScript; }
458
459 TempSummon* SummonCreature(uint32 entry, Position const& pos, TempSummonType despawnType = TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime = 0s, uint32 vehId = 0, uint32 spellId = 0, ObjectGuid privateObjectOwner = ObjectGuid::Empty);
460 TempSummon* SummonCreature(uint32 entry, float x, float y, float z, float o = 0, TempSummonType despawnType = TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime = 0s, ObjectGuid privateObjectOwner = ObjectGuid::Empty);
461 GameObject* SummonGameObject(uint32 entry, Position const& pos, QuaternionData const& rot, Seconds respawnTime, GOSummonType summonType = GO_SUMMON_TIMED_OR_CORPSE_DESPAWN);
462 GameObject* SummonGameObject(uint32 entry, float x, float y, float z, float ang, QuaternionData const& rot, Seconds respawnTime, GOSummonType summonType = GO_SUMMON_TIMED_OR_CORPSE_DESPAWN);
463 Creature* SummonTrigger(float x, float y, float z, float ang, Milliseconds despawnTime, CreatureAI* (*GetAI)(Creature*) = nullptr);
464 void SummonCreatureGroup(uint8 group, std::list<TempSummon*>* list = nullptr);
465
466 Creature* FindNearestCreature(uint32 entry, float range, bool alive = true) const;
467 Creature* FindNearestCreatureWithOptions(float range, FindCreatureOptions const& options) const;
468 GameObject* FindNearestGameObject(uint32 entry, float range, bool spawnedOnly = true) const;
469 GameObject* FindNearestGameObjectWithOptions(float range, FindGameObjectOptions const& options) const;
470 GameObject* FindNearestUnspawnedGameObject(uint32 entry, float range) const;
471 GameObject* FindNearestGameObjectOfType(GameobjectTypes type, float range) const;
472 Player* SelectNearestPlayer(float distance) const;
473
474 virtual ObjectGuid GetOwnerGUID() const = 0;
475 virtual ObjectGuid GetCharmerOrOwnerGUID() const { return GetOwnerGUID(); }
476 ObjectGuid GetCharmerOrOwnerOrOwnGUID() const;
477
478 Unit* GetOwner() const;
479 Unit* GetCharmerOrOwner() const;
480 Unit* GetCharmerOrOwnerOrSelf() const;
481 Player* GetCharmerOrOwnerPlayerOrPlayerItself() const;
482 Player* GetAffectingPlayer() const;
483
484 Player* GetSpellModOwner() const;
485 int32 CalculateSpellDamage(SpellEffectInfo const& spellEffectInfo, int32 const* basePoints = nullptr) const;
486
487 // target dependent range checks
488 float GetSpellMaxRangeForTarget(Unit const* target, SpellInfo const* spellInfo) const;
489 float GetSpellMinRangeForTarget(Unit const* target, SpellInfo const* spellInfo) const;
490
491 float ApplyEffectModifiers(SpellInfo const* spellInfo, uint8 effIndex, float value) const;
492 int32 CalcSpellDuration(SpellInfo const* spellInfo) const;
493 int32 ModSpellDuration(SpellInfo const* spellInfo, WorldObject const* target, int32 duration, bool positive, uint32 effectMask) const;
494 void ModSpellCastTime(SpellInfo const* spellInfo, int32& castTime, Spell* spell = nullptr) const;
495 void ModSpellDurationTime(SpellInfo const* spellInfo, int32& durationTime, Spell* spell = nullptr) const;
496
497 virtual float MeleeSpellMissChance(Unit const* victim, WeaponAttackType attType, int32 skillDiff, uint32 spellId) const;
498 virtual SpellMissInfo MeleeSpellHitResult(Unit* victim, SpellInfo const* spellInfo) const;
499 SpellMissInfo MagicSpellHitResult(Unit* victim, SpellInfo const* spellInfo) const;
500 SpellMissInfo SpellHitResult(Unit* victim, SpellInfo const* spellInfo, bool canReflect = false) const;
501 void SendSpellMiss(Unit* target, uint32 spellID, SpellMissInfo missInfo);
502
503 virtual uint32 GetFaction() const = 0;
504 virtual void SetFaction(uint32 /*faction*/) { }
505 FactionTemplateEntry const* GetFactionTemplateEntry() const;
506
507 ReputationRank GetReactionTo(WorldObject const* target) const;
508 static ReputationRank GetFactionReactionTo(FactionTemplateEntry const* factionTemplateEntry, WorldObject const* target);
509
510 bool IsHostileTo(WorldObject const* target) const;
511 bool IsHostileToPlayers() const;
512 bool IsFriendlyTo(WorldObject const* target) const;
513 bool IsNeutralToAll() const;
514
515 // CastSpell's third arg can be a variety of things - check out CastSpellExtraArgs' constructors!
516 SpellCastResult CastSpell(CastSpellTargetArg const& targets, uint32 spellId, CastSpellExtraArgs const& args = { });
517
518 bool IsValidAttackTarget(WorldObject const* target, SpellInfo const* bySpell = nullptr) const;
519 bool IsValidAssistTarget(WorldObject const* target, SpellInfo const* bySpell = nullptr) const;
520
521 Unit* GetMagicHitRedirectTarget(Unit* victim, SpellInfo const* spellInfo);
522
523 template <typename Container>
524 void GetGameObjectListWithEntryInGrid(Container& gameObjectContainer, uint32 entry, float maxSearchRange = 250.0f) const;
525
526 template <typename Container>
527 void GetGameObjectListWithOptionsInGrid(Container& gameObjectContainer, float maxSearchRange, FindGameObjectOptions const& options) const;
528
529 template <typename Container>
530 void GetCreatureListWithEntryInGrid(Container& creatureContainer, uint32 entry, float maxSearchRange = 250.0f) const;
531
532 template <typename Container>
533 void GetCreatureListWithOptionsInGrid(Container& creatureContainer, float maxSearchRange, FindCreatureOptions const& options) const;
534
535 template <typename Container>
536 void GetPlayerListInGrid(Container& playerContainer, float maxSearchRange, bool alive = true) const;
537
538 void DestroyForNearbyPlayers();
539 virtual void UpdateObjectVisibility(bool forced = true);
540 virtual void UpdateObjectVisibilityOnCreate() { UpdateObjectVisibility(true); }
541 void UpdatePositionData();
542
543 void BuildUpdate(UpdateDataMapType&) override;
544 bool AddToObjectUpdate() override;
545 void RemoveFromObjectUpdate() override;
546
547 //relocation and visibility system functions
548 void AddToNotify(uint16 f) { m_notifyflags |= f;}
549 bool isNeedNotify(uint16 f) const { return (m_notifyflags & f) != 0; }
550 uint16 GetNotifyFlags() const { return m_notifyflags; }
551 void ResetAllNotifies() { m_notifyflags = 0; }
552
553 bool isActiveObject() const { return m_isActive; }
554 void setActive(bool isActiveObject);
555 bool IsFarVisible() const { return m_isFarVisible; }
556 void SetFarVisible(bool on);
557 bool IsVisibilityOverridden() const { return m_visibilityDistanceOverride.has_value(); }
558 void SetVisibilityDistanceOverride(VisibilityDistanceType type);
559 void SetIsStoredInWorldObjectGridContainer(bool apply);
560 bool IsAlwaysStoredInWorldObjectGridContainer() const { return m_isStoredInWorldObjectGridContainer; }
561 bool IsStoredInWorldObjectGridContainer() const;
562
564
565 // Transports
566 Transport* GetTransport() const { return m_transport; }
567 float GetTransOffsetX() const { return m_movementInfo.transport.pos.GetPositionX(); }
568 float GetTransOffsetY() const { return m_movementInfo.transport.pos.GetPositionY(); }
569 float GetTransOffsetZ() const { return m_movementInfo.transport.pos.GetPositionZ(); }
570 float GetTransOffsetO() const { return m_movementInfo.transport.pos.GetOrientation(); }
571 Position const& GetTransOffset() const { return m_movementInfo.transport.pos; }
572 uint32 GetTransTime() const { return m_movementInfo.transport.time; }
573 int8 GetTransSeat() const { return m_movementInfo.transport.seat; }
574 virtual ObjectGuid GetTransGUID() const;
575 void SetTransport(Transport* t) { m_transport = t; }
576
578
579 virtual float GetStationaryX() const { return GetPositionX(); }
580 virtual float GetStationaryY() const { return GetPositionY(); }
581 virtual float GetStationaryZ() const { return GetPositionZ(); }
582 virtual float GetStationaryO() const { return GetOrientation(); }
583
584 float GetFloorZ() const;
585 virtual float GetCollisionHeight() const { return 0.0f; }
586
587 float GetMapWaterOrGroundLevel(float x, float y, float z, float* ground = nullptr) const;
588 float GetMapHeight(float x, float y, float z, bool vmap = true, float distanceToSearch = 50.0f) const; // DEFAULT_HEIGHT_SEARCH in map.h
589
590 std::string GetDebugInfo() const override;
591
592 // Event handler
594
595 // Watcher
596 bool IsPrivateObject() const { return !_privateObjectOwner.IsEmpty(); }
597 ObjectGuid GetPrivateObjectOwner() const { return _privateObjectOwner; }
598 void SetPrivateObjectOwner(ObjectGuid const& owner) { _privateObjectOwner = owner; }
599 bool CheckPrivateObjectOwnerVisibility(WorldObject const* seer) const;
600
601 protected:
602 std::string m_name;
608
609 // transports
611
612 virtual void ProcessPositionDataChanged(PositionFullTerrainStatus const& data);
618
619 //these functions are used mostly for Relocate() and Corpse/Player specific stuff...
620 //use them ONLY in LoadFromDB()/Create() funcs and nowhere else!
621 //mapId/instanceId should be set in SetMap() function!
622 void SetLocationMapId(uint32 _mapId) { m_mapId = _mapId; }
623 void SetLocationInstanceId(uint32 _instanceId) { m_InstanceId = _instanceId; }
624
625 virtual bool IsNeverVisible([[maybe_unused]] bool allowServersideObjects) const { return !IsInWorld(); }
626 virtual bool IsAlwaysVisibleFor(WorldObject const* /*seer*/) const { return false; }
627 virtual bool IsInvisibleDueToDespawn() const { return false; }
628 //difference from IsAlwaysVisibleFor: 1. after distance check; 2. use owner or charmer as seer
629 virtual bool IsAlwaysDetectableFor(WorldObject const* /*seer*/) const { return false; }
630
631 virtual void Heartbeat() { }
632 private:
633 Map* m_currMap; // current object's Map location
634
635 uint32 m_InstanceId; // in map copy with instance id
636 uint32 m_phaseMask; // in area phase state
637
639
641
643
644 virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool incOwnRadius = true, bool incTargetRadius = true) const;
645
646 bool CanNeverSee(WorldObject const* obj) const;
647 virtual bool CanAlwaysSee(WorldObject const* /*obj*/) const { return false; }
648 bool CanDetect(WorldObject const* obj, bool ignoreStealth, bool checkAlert = false) const;
649 bool CanDetectInvisibilityOf(WorldObject const* obj) const;
650 bool CanDetectStealthOf(WorldObject const* obj, bool checkAlert = false) const;
651};
652
653namespace Trinity
654{
655 // Binary predicate to sort WorldObjects based on the distance to a reference WorldObject
657 {
658 public:
659 ObjectDistanceOrderPred(WorldObject const* refObj, bool ascending = true) : _refObj(refObj), _ascending(ascending) { }
660
661 bool operator()(WorldObject const* left, WorldObject const* right) const
662 {
663 return _refObj->GetDistanceOrder(left, right) == _ascending;
664 }
665
666 private:
669 };
670}
671
672#endif
LocaleConstant
Definition Common.h:48
#define M_PI
Definition Common.h:71
#define TC_GAME_API
Definition Define.h:114
uint8_t uint8
Definition Define.h:135
int16_t int16
Definition Define.h:130
int8_t int8
Definition Define.h:131
int32_t int32
Definition Define.h:129
uint64_t uint64
Definition Define.h:132
uint16_t uint16
Definition Define.h:134
uint32_t uint32
Definition Define.h:133
uint16 flags
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition Duration.h:27
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition Duration.h:24
std::string GetDebugInfo()
Definition Errors.cpp:155
#define ASSERT
Definition Errors.h:68
ZLiquidStatus
Definition MapDefines.h:74
TempSummonType
@ TEMPSUMMON_MANUAL_DESPAWN
GOSummonType
@ GO_SUMMON_TIMED_OR_CORPSE_DESPAWN
#define CONTACT_DISTANCE
VisibilityDistanceType
TypeID
Definition ObjectGuid.h:34
@ TYPEID_DYNAMICOBJECT
Definition ObjectGuid.h:41
@ TYPEID_GAMEOBJECT
Definition ObjectGuid.h:40
@ TYPEID_UNIT
Definition ObjectGuid.h:38
@ TYPEID_CORPSE
Definition ObjectGuid.h:42
@ TYPEID_PLAYER
Definition ObjectGuid.h:39
@ TYPEMASK_ITEM
Definition ObjectGuid.h:50
@ TYPEMASK_UNIT
Definition ObjectGuid.h:52
@ TYPEMASK_WORLDOBJECT
Definition ObjectGuid.h:59
static constexpr Milliseconds const HEARTBEAT_INTERVAL
Definition Object.h:66
float const DEFAULT_COLLISION_HEIGHT
Definition Object.h:65
std::unordered_map< Player *, UpdateData > UpdateDataMapType
Definition Object.h:63
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition Optional.h:25
void GetCreatureListWithEntryInGrid(Container &container, WorldObject *source, uint32 entry, float maxSearchRange)
void GetCreatureListWithOptionsInGrid(Container &container, WorldObject *source, float maxSearchRange, FindCreatureOptions const &options)
void GetPlayerListInGrid(Container &container, WorldObject *source, float maxSearchRange, bool alive=true)
void GetGameObjectListWithEntryInGrid(Container &container, WorldObject *source, uint32 entry, float maxSearchRange)
GameobjectTypes
WeaponAttackType
ReputationRank
LineOfSightChecks
@ LINEOFSIGHT_ALL_CHECKS
SpellMissInfo
SpellCastResult
@ OBJECT_FIELD_SCALE_X
@ OBJECT_FIELD_ENTRY
@ OBJECT_FIELD_GUID
bool HasFlag(FLAG_TYPE flag) const
Definition Object.h:288
void AddFlag(FLAG_TYPE flag)
Definition Object.h:289
T_FLAGS GetFlags() const
Definition Object.h:287
void DelFlag(FLAG_TYPE flag)
Definition Object.h:290
T_VALUES GetValue(FLAG_TYPE flag) const
Definition Object.h:292
T_VALUES m_values[ARRAY_SIZE]
Definition Object.h:297
void AddValue(FLAG_TYPE flag, T_VALUES value)
Definition Object.h:294
void SetValue(FLAG_TYPE flag, T_VALUES value)
Definition Object.h:293
Definition Item.h:62
Definition Map.h:302
static ObjectGuid const Empty
Definition ObjectGuid.h:140
Trinity::unique_weak_ptr< Object > GetWeakPtr() const
Definition Object.h:220
Corpse * ToCorpse()
Definition Object.h:209
virtual void RemoveDynamicFlag(uint32 flag)
Definition Object.h:90
int32 * m_int32Values
Definition Object.h:241
Object(Object &&right)=delete
uint16 m_objectType
Definition Object.h:234
static Creature * ToCreature(Object *o)
Definition Object.h:189
static Player const * ToPlayer(Object const *o)
Definition Object.h:184
Player const * ToPlayer() const
Definition Object.h:186
static Item const * ToItem(Object const *o)
Definition Object.h:178
bool IsPlayer() const
Definition Object.h:182
float GetObjectScale() const
Definition Object.h:84
void SetInt16Value(uint16 index, uint8 offset, int16 value)
Definition Object.h:120
bool m_isNewObject
Definition Object.h:260
Trinity::unique_trackable_ptr< Object > m_scriptRef
Definition Object.h:265
PackedGuid const & GetPackGUID() const
Definition Object.h:80
DynamicObject * ToDynObject()
Definition Object.h:215
static Unit * ToUnit(Object *o)
Definition Object.h:195
Player * ToPlayer()
Definition Object.h:185
static GameObject * ToGameObject(Object *o)
Definition Object.h:201
static Corpse const * ToCorpse(Object const *o)
Definition Object.h:208
bool IsInWorld() const
Definition Object.h:73
WorldObject const * ToWorldObject() const
Definition Object.h:174
uint16 _fieldNotifyFlags
Definition Object.h:250
virtual std::string const & GetNameForLocaleIdx(LocaleConstant) const =0
bool HasDynamicFlag(uint32 flag) const
Definition Object.h:88
bool IsCorpse() const
Definition Object.h:206
void RemoveFieldNotifyFlag(uint16 flag)
Definition Object.h:165
UpdateMask _changesMask
Definition Object.h:246
virtual bool hasQuest(uint32) const
Definition Object.h:158
bool IsUnit() const
Definition Object.h:194
TypeID GetTypeId() const
Definition Object.h:93
uint32 * m_uint32Values
Definition Object.h:242
WorldObject * ToWorldObject()
Definition Object.h:173
virtual bool AddToObjectUpdate()=0
bool IsItem() const
Definition Object.h:176
bool isType(uint16 mask) const
Definition Object.h:94
uint16 m_valuesCount
Definition Object.h:248
Object & operator=(Object &&right)=delete
static WorldObject const * ToWorldObject(Object const *o)
Definition Object.h:172
Object & operator=(Object const &right)=delete
bool IsGameObject() const
Definition Object.h:200
Item const * ToItem() const
Definition Object.h:180
virtual void SetDynamicFlag(uint32 flag)
Definition Object.h:89
static WorldObject * ToWorldObject(Object *o)
Definition Object.h:171
GameObject * ToGameObject()
Definition Object.h:203
virtual void ReplaceAllDynamicFlags(uint32 flag)
Definition Object.h:91
GameObject const * ToGameObject() const
Definition Object.h:204
Corpse const * ToCorpse() const
Definition Object.h:210
Unit const * ToUnit() const
Definition Object.h:198
static DynamicObject const * ToDynObject(Object const *o)
Definition Object.h:214
virtual uint32 GetDynamicFlags() const
Definition Object.h:87
static GameObject const * ToGameObject(Object const *o)
Definition Object.h:202
static Item * ToItem(Object *o)
Definition Object.h:177
uint32 GetEntry() const
Definition Object.h:81
bool IsCreature() const
Definition Object.h:188
Creature * ToCreature()
Definition Object.h:191
PackedGuid m_PackGUID
Definition Object.h:262
Item * ToItem()
Definition Object.h:179
void SetIsNewObject(bool enable)
Definition Object.h:160
virtual void BuildUpdate(UpdateDataMapType &)
Definition Object.h:161
bool IsWorldObject() const
Definition Object.h:170
static Unit const * ToUnit(Object const *o)
Definition Object.h:196
static Creature const * ToCreature(Object const *o)
Definition Object.h:190
virtual void RemoveFromObjectUpdate()=0
static Corpse * ToCorpse(Object *o)
Definition Object.h:207
bool IsDynObject() const
Definition Object.h:212
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:78
bool m_inWorld
Definition Object.h:259
Creature const * ToCreature() const
Definition Object.h:192
float * m_floatValues
Definition Object.h:243
void SetEntry(uint32 entry)
Definition Object.h:82
virtual void SetObjectScale(float scale)
Definition Object.h:85
virtual bool hasInvolvedQuest(uint32) const
Definition Object.h:159
void SetFieldNotifyFlag(uint16 flag)
Definition Object.h:164
uint16 m_updateFlag
Definition Object.h:237
uint16 GetValuesCount() const
Definition Object.h:154
ObjectGuid GetGUID() const
Definition Object.h:79
Object(Object const &right)=delete
TypeID m_objectTypeId
Definition Object.h:236
DynamicObject const * ToDynObject() const
Definition Object.h:216
static DynamicObject * ToDynObject(Object *o)
Definition Object.h:213
bool m_objectUpdated
Definition Object.h:256
static Player * ToPlayer(Object *o)
Definition Object.h:183
Unit * ToUnit()
Definition Object.h:197
Definition Spell.h:152
WorldObject const * _refObj
Definition Object.h:667
ObjectDistanceOrderPred(WorldObject const *refObj, bool ascending=true)
Definition Object.h:659
bool operator()(WorldObject const *left, WorldObject const *right) const
Definition Object.h:661
Specialized variant of std::shared_ptr that enforces unique ownership and/or std::unique_ptr with std...
Trinity::unique_trackable_ptr companion class, replicating what std::weak_ptr is to std::shared_ptr.
Definition Unit.h:783
int8 GetTransSeat() const
Definition Object.h:573
float m_staticFloorZ
Definition Object.h:615
ZLiquidStatus m_liquidStatus
Definition Object.h:617
uint32 GetPhaseMask() const
Definition Object.h:370
Map * GetMap() const
Definition Object.h:451
std::string const & GetNameForLocaleIdx(LocaleConstant) const override
Definition Object.h:387
ZLiquidStatus GetLiquidStatus() const
Definition Object.h:380
std::string m_name
Definition Object.h:602
virtual float GetCollisionHeight() const
Definition Object.h:585
Map * FindMap() const
Definition Object.h:452
virtual float GetStationaryO() const
Definition Object.h:582
bool isNeedNotify(uint16 f) const
Definition Object.h:549
uint16 m_notifyflags
Definition Object.h:638
virtual uint8 GetLevelForTarget(WorldObject const *) const
Definition Object.h:425
void ResetAllNotifies()
Definition Object.h:551
void SetLocationInstanceId(uint32 _instanceId)
Definition Object.h:623
uint32 m_InstanceId
Definition Object.h:635
ObjectGuid GetPrivateObjectOwner() const
Definition Object.h:597
virtual bool IsInvisibleDueToDespawn() const
Definition Object.h:627
uint32 m_areaId
Definition Object.h:614
virtual bool IsAlwaysDetectableFor(WorldObject const *) const
Definition Object.h:629
FlaggedValuesArray32< int32, uint32, InvisibilityType, TOTAL_INVISIBILITY_TYPES > m_invisibility
Definition Object.h:443
Position const & GetTransOffset() const
Definition Object.h:571
void SetTransport(Transport *t)
Definition Object.h:575
bool IsVisibilityOverridden() const
Definition Object.h:557
virtual ObjectGuid GetCharmerOrOwnerGUID() const
Definition Object.h:475
float GetTransOffsetX() const
Definition Object.h:567
uint32 LastUsedScriptID
Definition Object.h:563
FlaggedValuesArray32< int32, uint32, InvisibilityType, TOTAL_INVISIBILITY_TYPES > m_invisibilityDetect
Definition Object.h:444
void SetLocationMapId(uint32 _mapId)
Definition Object.h:622
ZoneScript * GetZoneScript() const
Definition Object.h:457
virtual void UpdateObjectVisibilityOnCreate()
Definition Object.h:540
bool isActiveObject() const
Definition Object.h:553
bool GetDistanceOrder(WorldObject const *obj1, WorldObject const *obj2, bool is3D=true) const
Definition Object.cpp:1261
bool IsPrivateObject() const
Definition Object.h:596
uint32 GetInstanceId() const
Definition Object.h:367
uint16 GetNotifyFlags() const
Definition Object.h:550
bool IsOutdoors() const
Definition Object.h:379
void SetPrivateObjectOwner(ObjectGuid const &owner)
Definition Object.h:598
ZoneScript * m_zoneScript
Definition Object.h:607
float GetTransOffsetY() const
Definition Object.h:568
bool InSamePhase(uint32 phasemask) const
Definition Object.h:371
std::string const & GetName() const
Definition Object.h:384
bool IsFarVisible() const
Definition Object.h:555
virtual void Heartbeat()
Definition Object.h:631
virtual float GetStationaryX() const
Definition Object.h:579
float GetTransOffsetZ() const
Definition Object.h:569
virtual bool IsAlwaysVisibleFor(WorldObject const *) const
Definition Object.h:626
virtual bool IsNeverVisible(bool allowServersideObjects) const
Definition Object.h:625
bool InSamePhase(WorldObject const *obj) const
Definition Object.h:372
uint32 GetTransTime() const
Definition Object.h:572
bool const m_isStoredInWorldObjectGridContainer
Definition Object.h:606
uint32 m_phaseMask
Definition Object.h:636
Transport * GetTransport() const
Definition Object.h:566
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPES > m_stealthDetect
Definition Object.h:441
bool m_isActive
Definition Object.h:603
void SetName(std::string newname)
Definition Object.h:385
void AddToNotify(uint16 f)
Definition Object.h:548
bool m_outdoors
Definition Object.h:616
EventProcessor m_Events
Definition Object.h:593
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPES > m_stealth
Definition Object.h:440
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPES > m_serverSideVisibilityDetect
Definition Object.h:447
virtual uint32 GetFaction() const =0
static bool InSamePhase(WorldObject const *a, WorldObject const *b)
Definition Object.h:373
Optional< float > m_visibilityDistanceOverride
Definition Object.h:605
ObjectGuid _privateObjectOwner
Definition Object.h:640
bool IsInBetween(WorldObject const *obj1, WorldObject const *obj2, float size=0) const
Definition Object.h:417
uint32 GetAreaId() const
Definition Object.h:376
float GetTransOffsetO() const
Definition Object.h:570
virtual ObjectGuid GetOwnerGUID() const =0
uint32 GetZoneId() const
Definition Object.h:375
Milliseconds _heartbeatTimer
Definition Object.h:642
MovementInfo m_movementInfo
Definition Object.h:577
uint32 m_zoneId
Definition Object.h:613
bool IsAlwaysStoredInWorldObjectGridContainer() const
Definition Object.h:560
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPES > m_serverSideVisibility
Definition Object.h:446
bool m_isFarVisible
Definition Object.h:604
void GetZoneAndAreaId(uint32 &zoneid, uint32 &areaid) const
Definition Object.h:377
virtual float GetStationaryY() const
Definition Object.h:580
virtual void SetFaction(uint32)
Definition Object.h:504
virtual float GetCombatReach() const
Definition Object.h:360
virtual float GetStationaryZ() const
Definition Object.h:581
Map * m_currMap
Definition Object.h:633
virtual bool CanAlwaysSee(WorldObject const *) const
Definition Object.h:647
Transport * m_transport
Definition Object.h:610
Optional< std::string_view > StringId
Definition Object.h:304
Optional< ObjectGuid > CreatorGuid
Definition Object.h:317
Optional< bool > IsSummon
Definition Object.h:308
bool IgnoreNotOwnedPrivateObjects
Definition Object.h:311
bool IgnorePrivateObjects
Definition Object.h:312
Optional< uint32 > AuraSpellId
Definition Object.h:314
Optional< ObjectGuid > PrivateObjectOwnerGuid
Definition Object.h:318
Optional< uint32 > CreatureId
Definition Object.h:303
Optional< bool > IsAlive
Definition Object.h:306
Optional< bool > IsInCombat
Definition Object.h:307
Optional< ObjectGuid > OwnerGuid
Definition Object.h:315
Optional< ObjectGuid > CharmerGuid
Definition Object.h:316
bool IgnoreNotOwnedPrivateObjects
Definition Object.h:330
Optional< ObjectGuid > OwnerGuid
Definition Object.h:333
Optional< std::string_view > StringId
Definition Object.h:324
Optional< GameobjectTypes > GameObjectType
Definition Object.h:335
Optional< uint32 > GameObjectId
Definition Object.h:323
Optional< ObjectGuid > PrivateObjectOwnerGuid
Definition Object.h:334
Optional< bool > IsSummon
Definition Object.h:326
Optional< bool > IsSpawned
Definition Object.h:327
void operator()(Object *) const
Definition Object.h:264
void GetPosition(float &x, float &y) const
Definition Position.h:84