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