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 "BaseEntity.h"
22#include "Common.h"
23#include "Duration.h"
24#include "Errors.h"
25#include "EventProcessor.h"
26#include "MapDefines.h"
27#include "ModelIgnoreFlags.h"
28#include "MovementInfo.h"
29#include "ObjectDefines.h"
30#include "Optional.h"
31#include "PhaseShift.h"
32#include "Position.h"
33#include "SharedDefines.h"
34#include "SpellDefines.h"
35#include "UniqueTrackablePtr.h"
36#include <list>
37
38class AreaTrigger;
39class Conversation;
40class Corpse;
41class Creature;
42class CreatureAI;
43class DynamicObject;
44class GameObject;
45class InstanceScript;
46class Item;
47class Map;
48class Object;
49class Player;
50class Scenario;
51class SceneObject;
52class SmoothPhasing;
53class Spell;
55class SpellEffectInfo;
56class SpellInfo;
57class TempSummon;
58class TransportBase;
59class Unit;
60class UpdateData;
61class WorldObject;
62class WorldPacket;
63class ZoneScript;
65struct Loot;
66struct QuaternionData;
68struct SpellPowerCost;
69
70namespace WorldPackets
71{
72 namespace CombatLog
73 {
75 }
76}
77
78float const DEFAULT_COLLISION_HEIGHT = 2.03128f; // Most common value in dbc
79static constexpr Milliseconds const HEARTBEAT_INTERVAL = 5s + 200ms;
80
82{
83 public:
84 virtual ~Object();
85
86 void AddToWorld() override;
87 void RemoveFromWorld() override;
88
89 uint32 GetEntry() const { return m_objectData->EntryID; }
90 void SetEntry(uint32 entry) { SetUpdateFieldValue(m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::EntryID), entry); }
91
92 float GetObjectScale() const { return m_objectData->Scale; }
93 virtual void SetObjectScale(float scale) { SetUpdateFieldValue(m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::Scale), scale); }
94
95 uint32 GetDynamicFlags() const { return m_objectData->DynamicFlags; }
96 bool HasDynamicFlag(uint32 flag) const { return (*m_objectData->DynamicFlags & flag) != 0; }
97 void SetDynamicFlag(uint32 flag) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::DynamicFlags), flag); }
100
101 void BuildValuesUpdateBlockForPlayerWithFlag(UpdateData* data, UF::UpdateFieldFlag flags, Player const* target) const;
102
103 virtual bool hasQuest(uint32 /* quest_id */) const { return false; }
104 virtual bool hasInvolvedQuest(uint32 /* quest_id */) const { return false; }
105
106 WorldObject* ToWorldObject() { return IsWorldObject() ? reinterpret_cast<WorldObject*>(this) : nullptr; }
107 WorldObject const* ToWorldObject() const { return IsWorldObject() ? reinterpret_cast<WorldObject const*>(this) : nullptr; }
108 static WorldObject* ToWorldObject(Object* o) { return o && o->IsWorldObject() ? reinterpret_cast<WorldObject*>(o) : nullptr; }
109 static WorldObject const* ToWorldObject(Object const* o) { return o && o->IsWorldObject() ? reinterpret_cast<WorldObject const*>(o) : nullptr; }
110
111 Item* ToItem() { return IsItem() ? reinterpret_cast<Item*>(this) : nullptr; }
112 Item const* ToItem() const { return IsItem() ? reinterpret_cast<Item const*>(this) : nullptr; }
113 static Item* ToItem(Object* o) { return o && o->IsItem() ? reinterpret_cast<Item*>(o) : nullptr; }
114 static Item const* ToItem(Object const* o) { return o && o->IsItem() ? reinterpret_cast<Item const*>(o) : nullptr; }
115
116 Unit* ToUnit() { return IsUnit() ? reinterpret_cast<Unit*>(this) : nullptr; }
117 Unit const* ToUnit() const { return IsUnit() ? reinterpret_cast<Unit const*>(this) : nullptr; }
118 static Unit* ToUnit(Object* o) { return o && o->IsUnit() ? reinterpret_cast<Unit*>(o) : nullptr; }
119 static Unit const* ToUnit(Object const* o) { return o && o->IsUnit() ? reinterpret_cast<Unit const*>(o) : nullptr; }
120
121 Creature* ToCreature() { return IsCreature() ? reinterpret_cast<Creature*>(this) : nullptr; }
122 Creature const* ToCreature() const { return IsCreature() ? reinterpret_cast<Creature const*>(this) : nullptr; }
123 static Creature* ToCreature(Object* o) { return o && o->IsCreature() ? reinterpret_cast<Creature*>(o) : nullptr; }
124 static Creature const* ToCreature(Object const* o) { return o && o->IsCreature() ? reinterpret_cast<Creature const*>(o) : nullptr; }
125
126 Player* ToPlayer() { return IsPlayer() ? reinterpret_cast<Player*>(this) : nullptr; }
127 Player const* ToPlayer() const { return IsPlayer() ? reinterpret_cast<Player const*>(this) : nullptr; }
128 static Player* ToPlayer(Object* o) { return o && o->IsPlayer() ? reinterpret_cast<Player*>(o) : nullptr; }
129 static Player const* ToPlayer(Object const* o) { return o && o->IsPlayer() ? reinterpret_cast<Player const*>(o) : nullptr; }
130
131 GameObject* ToGameObject() { return IsGameObject() ? reinterpret_cast<GameObject*>(this) : nullptr; }
132 GameObject const* ToGameObject() const { return IsGameObject() ? reinterpret_cast<GameObject const*>(this) : nullptr; }
133 static GameObject* ToGameObject(Object* o) { return o && o->IsGameObject() ? reinterpret_cast<GameObject*>(o) : nullptr; }
134 static GameObject const* ToGameObject(Object const* o) { return o && o->IsGameObject() ? reinterpret_cast<GameObject const*>(o) : nullptr; }
135
136 Corpse* ToCorpse() { return IsCorpse() ? reinterpret_cast<Corpse*>(this) : nullptr; }
137 Corpse const* ToCorpse() const { return IsCorpse() ? reinterpret_cast<Corpse const*>(this) : nullptr; }
138 static Corpse* ToCorpse(Object* o) { return o && o->IsCorpse() ? reinterpret_cast<Corpse*>(o) : nullptr; }
139 static Corpse const* ToCorpse(Object const* o) { return o && o->IsCorpse() ? reinterpret_cast<Corpse const*>(o) : nullptr; }
140
141 DynamicObject* ToDynObject() { return IsDynObject() ? reinterpret_cast<DynamicObject*>(this) : nullptr; }
142 DynamicObject const* ToDynObject() const { return IsDynObject() ? reinterpret_cast<DynamicObject const*>(this) : nullptr; }
143 static DynamicObject* ToDynObject(Object* o) { return o && o->IsDynObject() ? reinterpret_cast<DynamicObject*>(o) : nullptr; }
144 static DynamicObject const* ToDynObject(Object const* o) { return o && o->IsDynObject() ? reinterpret_cast<DynamicObject const*>(o) : nullptr; }
145
146 AreaTrigger* ToAreaTrigger() { return IsAreaTrigger() ? reinterpret_cast<AreaTrigger*>(this) : nullptr; }
147 AreaTrigger const* ToAreaTrigger() const { return IsAreaTrigger() ? reinterpret_cast<AreaTrigger const*>(this) : nullptr; }
148 static AreaTrigger* ToAreaTrigger(Object* o) { return o && o->IsAreaTrigger() ? reinterpret_cast<AreaTrigger*>(o) : nullptr; }
149 static AreaTrigger const* ToAreaTrigger(Object const* o) { return o && o->IsAreaTrigger() ? reinterpret_cast<AreaTrigger const*>(o) : nullptr; }
150
151 SceneObject* ToSceneObject() { return IsSceneObject() ? reinterpret_cast<SceneObject*>(this) : nullptr; }
152 SceneObject const* ToSceneObject() const { return IsSceneObject() ? reinterpret_cast<SceneObject const*>(this) : nullptr; }
153 static SceneObject* ToSceneObject(Object* o) { return o && o->IsSceneObject() ? reinterpret_cast<SceneObject*>(o) : nullptr; }
154 static SceneObject const* ToSceneObject(Object const* o) { return o && o->IsSceneObject() ? reinterpret_cast<SceneObject const*>(o) : nullptr; }
155
156 Conversation* ToConversation() { return IsConversation() ? reinterpret_cast<Conversation*>(this) : nullptr; }
157 Conversation const* ToConversation() const { return IsConversation() ? reinterpret_cast<Conversation const*>(this) : nullptr; }
158 static Conversation* ToConversation(Object* o) { return o && o->IsConversation() ? reinterpret_cast<Conversation*>(o) : nullptr; }
159 static Conversation const* ToConversation(Object const* o) { return o && o->IsConversation() ? reinterpret_cast<Conversation const*>(o) : nullptr; }
160
162
163 std::string GetDebugInfo() const override;
164
165 Trinity::unique_weak_ptr<Object> GetWeakPtr() const { return m_scriptRef; }
166
167 virtual Loot* GetLootForPlayer([[maybe_unused]] Player const* player) const { return nullptr; }
168
169 virtual SpawnTrackingStateData const* GetSpawnTrackingStateDataForPlayer([[maybe_unused]] Player const* player) const { return nullptr; }
170
171 protected:
172 Object();
173
174 virtual void BuildValuesCreate(UF::UpdateFieldFlag flags, ByteBuffer& data, Player const* target) const = 0;
175 virtual void BuildValuesUpdate(UF::UpdateFieldFlag flags, ByteBuffer& data, Player const* target) const = 0;
176 void BuildEntityFragmentsForValuesUpdateForPlayerWithMask(ByteBuffer& data, EnumFlag<UF::UpdateFieldFlag> flags) const;
177 virtual void ClearValuesChangesMask();
178
179 public:
180 virtual void BuildValuesUpdateWithFlag(UF::UpdateFieldFlag flags, ByteBuffer& data, Player const* target) const;
181
182 private:
185 static void BuildObjectFragmentCreate(void const* rawFragmentData, UF::UpdateFieldFlag flags, ByteBuffer& data, Player const* target, BaseEntity const* entity);
186 static void BuildObjectFragmentUpdate(void const* rawFragmentData, UF::UpdateFieldFlag flags, ByteBuffer& data, Player const* target, BaseEntity const* entity);
187 static bool IsObjectFragmentChanged(void const* rawFragmentData);
188 static void ClearObjectFragmentChanged(void const* rawFragmentData);
189
190 struct NoopObjectDeleter { void operator()(Object*) const { /*noop - not managed*/ } };
192};
193
194template <class T_VALUES, class T_FLAGS, class FLAG_TYPE, size_t ARRAY_SIZE>
196{
197 public:
198 static_assert(sizeof(T_FLAGS) * 8 > ARRAY_SIZE, "Fix T_FLAGS");
199
201 {
202 for (uint32 i = 0; i < ARRAY_SIZE; ++i)
203 m_values[i] = T_VALUES(0);
204 m_flags = T_FLAGS(0);
205 }
206
207 T_FLAGS GetFlags() const { return m_flags; }
208 bool HasFlag(FLAG_TYPE flag) const { return m_flags & (T_FLAGS(1) << flag); }
209 void AddFlag(FLAG_TYPE flag) { m_flags |= (T_FLAGS(1) << flag); }
210 void DelFlag(FLAG_TYPE flag) { m_flags &= ~(T_FLAGS(1) << flag); }
211
212 T_VALUES GetValue(FLAG_TYPE flag) const { return m_values[flag]; }
213 void SetValue(FLAG_TYPE flag, T_VALUES value) { m_values[flag] = value; }
214 void AddValue(FLAG_TYPE flag, T_VALUES value) { m_values[flag] += value; }
215
216 private:
217 T_VALUES m_values[ARRAY_SIZE];
218 T_FLAGS m_flags;
219};
220
222{
223 Alive = 0, // includes feign death
224 Dead = 1, // excludes feign death
225 EffectivelyAlive = 2, // excludes feign death
226 EffectivelyDead = 3, // includes feign death
227
228 Max
229};
230
251
268
270{
271 bool ImplicitDetection = false;
272 bool IgnorePhaseShift = false;
275
276 bool DistanceCheck = false;
277 bool AlertCheck = false;
278};
279
281{
282 protected:
283 explicit WorldObject(bool isWorldObject); //note: here it means if it is in grid object list or world object list
284 public:
285 virtual ~WorldObject();
286
287 virtual void Update(uint32 diff);
288
289 void AddToWorld() override;
290 void RemoveFromWorld() override;
291
292 void GetNearPoint2D(WorldObject const* searcher, float& x, float& y, float distance, float absAngle) const;
293 void GetNearPoint(WorldObject const* searcher, float& x, float& y, float& z, float distance2d, float absAngle) const;
294 void GetClosePoint(float& x, float& y, float& z, float size, float distance2d = 0, float relAngle = 0) const;
295 void MovePosition(Position &pos, float dist, float angle, float maxHeightChange = 6.0f) const;
296 Position GetNearPosition(float dist, float angle);
297 void MovePositionToFirstCollision(Position &pos, float dist, float angle) const;
298 Position GetFirstCollisionPosition(float dist, float angle);
299 Position GetRandomNearPosition(float radius);
300 void GetContactPoint(WorldObject const* obj, float& x, float& y, float& z, float distance2d = CONTACT_DISTANCE) const;
301
302 virtual float GetCombatReach() const { return 0.0f; } // overridden (only) in Unit
303 void UpdateGroundPositionZ(float x, float y, float &z) const;
304 void UpdateAllowedPositionZ(float x, float y, float &z, float* groundZ = nullptr) const;
305
306 Position GetRandomPoint(Position const& srcPos, float distance, float minDistance = 0.0f) const;
307
308 uint32 GetInstanceId() const { return m_InstanceId; }
309
310 PhaseShift& GetPhaseShift() { return _phaseShift; }
311 PhaseShift const& GetPhaseShift() const { return _phaseShift; }
312 PhaseShift& GetSuppressedPhaseShift() { return _suppressedPhaseShift; }
313 PhaseShift const& GetSuppressedPhaseShift() const { return _suppressedPhaseShift; }
314 bool InSamePhase(PhaseShift const& phaseShift) const
315 {
316 return GetPhaseShift().CanSee(phaseShift);
317 }
318 bool InSamePhase(WorldObject const* obj) const
319 {
320 return GetPhaseShift().CanSee(obj->GetPhaseShift());
321 }
322 static bool InSamePhase(WorldObject const* a, WorldObject const* b)
323 {
324 return a && b && a->InSamePhase(b);
325 }
326
327 int32 GetDBPhase() const { return _dbPhase; }
328
329 // if negative it is used as PhaseGroupId
330 void SetDBPhase(int32 p) { _dbPhase = p; }
331
332 uint32 GetZoneId() const { return m_zoneId; }
333 uint32 GetAreaId() const { return m_areaId; }
334 void GetZoneAndAreaId(uint32& zoneid, uint32& areaid) const { zoneid = m_zoneId, areaid = m_areaId; }
335 bool IsInWorldPvpZone() const;
336 bool IsOutdoors() const { return m_outdoors; }
337 ZLiquidStatus GetLiquidStatus() const { return m_liquidStatus; }
338 WmoLocation const* GetCurrentWmo() const { return m_currentWmo ? &*m_currentWmo : nullptr; }
339
340 InstanceScript* GetInstanceScript() const;
341
342 std::string const& GetName() const { return m_name; }
343 void SetName(std::string newname) { m_name = std::move(newname); }
344
345 std::string GetNameForLocaleIdx(LocaleConstant /*locale*/) const override { return m_name; }
346
347 float GetDistance(WorldObject const* obj) const;
348 float GetDistance(Position const& pos) const;
349 float GetDistance(float x, float y, float z) const;
350 float GetDistance2d(WorldObject const* obj) const;
351 float GetDistance2d(float x, float y) const;
352 float GetDistanceZ(WorldObject const* obj) const;
353
354 bool IsSelfOrInSameMap(WorldObject const* obj) const;
355 bool IsInMap(WorldObject const* obj) const;
356 bool IsWithinDist3d(float x, float y, float z, float dist) const;
357 bool IsWithinDist3d(Position const* pos, float dist) const;
358 bool IsWithinDist2d(float x, float y, float dist) const;
359 bool IsWithinDist2d(Position const* pos, float dist) const;
360 // use only if you will sure about placing both object at same map
361 bool IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D = true, bool incOwnRadius = true, bool incTargetRadius = true) const;
362 bool IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D = true, bool incOwnRadius = true, bool incTargetRadius = true) const;
363 bool IsWithinLOS(float x, float y, float z, LineOfSightChecks checks = LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags ignoreFlags = VMAP::ModelIgnoreFlags::Nothing) const;
364 bool IsWithinLOSInMap(WorldObject const* obj, LineOfSightChecks checks = LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags ignoreFlags = VMAP::ModelIgnoreFlags::Nothing) const;
365 Position GetHitSpherePointFor(Position const& dest) const;
366 void GetHitSpherePointFor(Position const& dest, float& x, float& y, float& z) const;
367 bool GetDistanceOrder(WorldObject const* obj1, WorldObject const* obj2, bool is3D = true) const;
368 bool IsInRange(WorldObject const* obj, float minRange, float maxRange, bool is3D = true) const;
369 bool IsInRange2d(Position const* pos, float minRange, float maxRange) const;
370 bool IsInRange3d(Position const* pos, float minRange, float maxRange) const;
371 bool isInFront(WorldObject const* target, float arc = float(M_PI)) const;
372 bool isInBack(WorldObject const* target, float arc = float(M_PI)) const;
373
374 bool IsInBetween(Position const& pos1, Position const& pos2, float size = 0) const;
375 bool IsInBetween(WorldObject const* obj1, WorldObject const* obj2, float size = 0) const { return obj1 && obj2 && IsInBetween(obj1->GetPosition(), obj2->GetPosition(), size); }
376
377 virtual void CleanupsBeforeDelete(bool finalCleanup = true); // used in destructor or explicitly before mass creature delete to remove cross-references to already deleted units
378
379 virtual void SendMessageToSet(WorldPacket const* data, bool self) const;
380 virtual void SendMessageToSetInRange(WorldPacket const* data, float dist, bool self) const;
381 virtual void SendMessageToSet(WorldPacket const* data, Player const* skipped_rcvr) const;
382
383 void SendCombatLogMessage(WorldPackets::CombatLog::CombatLogServerPacket* combatLog) const;
384
385 virtual uint8 GetLevelForTarget(WorldObject const* /*target*/) const { return 1; }
386
387 void PlayDistanceSound(uint32 soundId, Player const* target = nullptr) const;
388 void StopDistanceSound(Player const* target = nullptr) const;
389 void PlayDirectSound(uint32 soundId, Player const* target = nullptr, uint32 broadcastTextId = 0) const;
390 void PlayDirectMusic(uint32 musicId, Player const* target = nullptr) const;
391 void PlayObjectSound(int32 soundKitId, ObjectGuid targetObject, Player const* target = nullptr, int32 broadcastTextId = 0) const;
392
393 void AddObjectToRemoveList();
394
395 float GetGridActivationRange() const;
396 float GetVisibilityRange() const;
397 float GetSightRange(WorldObject const* target = nullptr) const;
398 bool CanSeeOrDetect(WorldObject const* obj, CanSeeOrDetectExtraArgs const& args = { }) const;
399
402
405
408
409 virtual void SetMap(Map* map);
410 virtual void ResetMap();
411 Map* GetMap() const { ASSERT(m_currMap); return m_currMap; }
412 Map* FindMap() const { return m_currMap; }
413 //used to check all object's GetMap() calls when object is not in world!
414
415 void SetZoneScript();
416 ZoneScript* FindZoneScript() const;
417 ZoneScript* GetZoneScript() const { return m_zoneScript; }
418
419 Scenario* GetScenario() const;
420
421 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);
422 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);
423 TempSummon* SummonPersonalClone(Position const& pos, TempSummonType despawnType = TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime = 0s, uint32 vehId = 0, uint32 spellId = 0, Player* privateObjectOwner = nullptr);
424 GameObject* SummonGameObject(uint32 entry, Position const& pos, QuaternionData const& rot, Seconds respawnTime, GOSummonType summonType = GO_SUMMON_TIMED_OR_CORPSE_DESPAWN);
425 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);
426 Creature* SummonTrigger(float x, float y, float z, float ang, Milliseconds despawnTime, CreatureAI* (*GetAI)(Creature*) = nullptr);
427 void SummonCreatureGroup(uint8 group, std::list<TempSummon*>* list = nullptr);
428
429 Creature* FindNearestCreature(uint32 entry, float range, bool alive = true) const;
430 Creature* FindNearestCreatureWithOptions(float range, FindCreatureOptions const& options) const;
431 GameObject* FindNearestGameObject(uint32 entry, float range, bool spawnedOnly = true) const;
432 GameObject* FindNearestGameObjectWithOptions(float range, FindGameObjectOptions const& options) const;
433 GameObject* FindNearestUnspawnedGameObject(uint32 entry, float range) const;
434 GameObject* FindNearestGameObjectOfType(GameobjectTypes type, float range) const;
435 Player* SelectNearestPlayer(float range) const;
436
437 virtual ObjectGuid GetCreatorGUID() const = 0;
438 virtual ObjectGuid GetOwnerGUID() const = 0;
439 virtual ObjectGuid GetCharmerOrOwnerGUID() const { return GetOwnerGUID(); }
440 ObjectGuid GetCharmerOrOwnerOrOwnGUID() const;
441
442 Unit* GetOwner() const;
443 Unit* GetCharmerOrOwner() const;
444 Unit* GetCharmerOrOwnerOrSelf() const;
445 Player* GetCharmerOrOwnerPlayerOrPlayerItself() const;
446 Player* GetAffectingPlayer() const;
447
448 Player* GetSpellModOwner() const;
449
450 // target dependent range checks
451 SpellRange GetSpellMinMaxRangeForTarget(Unit const* target, SpellInfo const* spellInfo) const;
452
453 SpellEffectValue ApplyEffectModifiers(SpellInfo const* spellInfo, uint8 effIndex, SpellEffectValue value) const;
454 int32 CalcSpellDuration(SpellInfo const* spellInfo, std::vector<SpellPowerCost> const* powerCosts) const;
455 int32 ModSpellDuration(SpellInfo const* spellInfo, WorldObject const* target, int32 duration, bool positive, uint32 effectMask) const;
456 void ModSpellCastTime(SpellInfo const* spellInfo, int32& castTime, Spell* spell = nullptr) const;
457 void ModSpellDurationTime(SpellInfo const* spellInfo, int32& durationTime, Spell* spell = nullptr) const;
458
459 virtual float MeleeSpellMissChance(Unit const* victim, WeaponAttackType attType, SpellInfo const* spellInfo) const;
460 virtual SpellMissInfo MeleeSpellHitResult(Unit* victim, SpellInfo const* spellInfo) const;
461 SpellMissInfo MagicSpellHitResult(Unit* victim, SpellInfo const* spellInfo) const;
462 SpellMissInfo SpellHitResult(Unit* victim, SpellInfo const* spellInfo, bool canReflect, bool canImmune) const;
463 void SendSpellMiss(Unit* target, uint32 spellID, SpellMissInfo missInfo);
464
465 virtual uint32 GetFaction() const = 0;
466 virtual void SetFaction(uint32 /*faction*/) { }
467 FactionTemplateEntry const* GetFactionTemplateEntry() const;
468
469 ReputationRank GetReactionTo(WorldObject const* target) const;
470 static ReputationRank GetFactionReactionTo(FactionTemplateEntry const* factionTemplateEntry, WorldObject const* target);
471
472 bool IsHostileTo(WorldObject const* target) const;
473 bool IsHostileToPlayers() const;
474 bool IsFriendlyTo(WorldObject const* target) const;
475 bool IsNeutralToAll() const;
476
477 // CastSpell's third arg can be a variety of things - check out CastSpellExtraArgs' constructors!
478 SpellCastResult CastSpell(CastSpellTargetArg const& targets, uint32 spellId, CastSpellExtraArgs const& args = { });
479
480 void SendPlayOrphanSpellVisual(Position const& sourceLocation, ObjectGuid const& target, uint32 spellVisualId, float travelSpeed, bool speedAsTime = false, bool withSourceOrientation = false);
481 void SendPlayOrphanSpellVisual(Position const& sourceLocation, Position const& targetLocation, uint32 spellVisualId, float travelSpeed, bool speedAsTime = false, bool withSourceOrientation = false);
482 void SendPlayOrphanSpellVisual(ObjectGuid const& target, uint32 spellVisualId, float travelSpeed, bool speedAsTime = false, bool withSourceOrientation = false);
483 void SendPlayOrphanSpellVisual(Position const& targetLocation, uint32 spellVisualId, float travelSpeed, bool speedAsTime = false, bool withSourceOrientation = false);
484 void SendCancelOrphanSpellVisual(uint32 id);
485
486 bool IsValidAttackTarget(WorldObject const* target, SpellInfo const* bySpell = nullptr) const;
487 bool IsValidAssistTarget(WorldObject const* target, SpellInfo const* bySpell = nullptr) const;
488
489 Unit* GetMagicHitRedirectTarget(Unit* victim, SpellInfo const* spellInfo);
490
491 virtual uint32 GetCastSpellXSpellVisualId(SpellInfo const* spellInfo) const;
492
493 template <typename Container>
494 void GetGameObjectListWithEntryInGrid(Container& gameObjectContainer, uint32 entry, float maxSearchRange = 250.0f) const;
495
496 template <typename Container>
497 void GetGameObjectListWithOptionsInGrid(Container& gameObjectContainer, float maxSearchRange, FindGameObjectOptions const& options) const;
498
499 template <typename Container>
500 void GetCreatureListWithEntryInGrid(Container& creatureContainer, uint32 entry, float maxSearchRange = 250.0f) const;
501
502 template <typename Container>
503 void GetCreatureListWithOptionsInGrid(Container& creatureContainer, float maxSearchRange, FindCreatureOptions const& options) const;
504
505 template <typename Container>
506 void GetPlayerListInGrid(Container& playerContainer, float maxSearchRange, bool alive = true) const;
507
508 void DestroyForNearbyPlayers();
509 virtual void UpdateObjectVisibility(bool forced = true);
510 virtual void UpdateObjectVisibilityOnCreate() { UpdateObjectVisibility(true); }
511 virtual void UpdateObjectVisibilityOnDestroy() { DestroyForNearbyPlayers(); }
512 void UpdatePositionData();
513
514 void BuildUpdate(UpdateDataMapType&) override;
515 bool AddToObjectUpdate() override;
516 void RemoveFromObjectUpdate() override;
517
518 //relocation and visibility system functions
519 void AddToNotify(uint16 f) { m_notifyflags |= f;}
520 bool isNeedNotify(uint16 f) const { return (m_notifyflags & f) != 0; }
521 uint16 GetNotifyFlags() const { return m_notifyflags; }
522 void ResetAllNotifies() { m_notifyflags = 0; }
523
524 bool isActiveObject() const { return m_isActive; }
525 void setActive(bool isActiveObject);
526 bool IsFarVisible() const { return m_isFarVisible; }
527 void SetFarVisible(bool on);
528 bool IsVisibilityOverridden() const { return m_visibilityDistanceOverride.has_value(); }
529 void SetVisibilityDistanceOverride(VisibilityDistanceType type);
530 void SetIsStoredInWorldObjectGridContainer(bool apply);
531 bool IsAlwaysStoredInWorldObjectGridContainer() const { return m_isStoredInWorldObjectGridContainer; }
532 bool IsStoredInWorldObjectGridContainer() const;
533
535
536 // Transports
537 TransportBase* GetTransport() const { return m_transport; }
538 float GetTransOffsetX() const { return m_movementInfo.transport.pos.GetPositionX(); }
539 float GetTransOffsetY() const { return m_movementInfo.transport.pos.GetPositionY(); }
540 float GetTransOffsetZ() const { return m_movementInfo.transport.pos.GetPositionZ(); }
541 float GetTransOffsetO() const { return m_movementInfo.transport.pos.GetOrientation(); }
542 Position const& GetTransOffset() const { return m_movementInfo.transport.pos; }
543 uint32 GetTransTime() const { return m_movementInfo.transport.time; }
544 int8 GetTransSeat() const { return m_movementInfo.transport.seat; }
545 virtual ObjectGuid GetTransGUID() const;
546 void SetTransport(TransportBase* t);
547
549
550 virtual Position const& GetStationaryPosition() const { return *this; }
551
552 float GetFloorZ() const;
553 virtual float GetCollisionHeight() const { return 0.0f; }
554
555 float GetMapWaterOrGroundLevel(float x, float y, float z, float* ground = nullptr) const;
556 float GetMapHeight(float x, float y, float z, bool vmap = true, float distanceToSearch = 50.0f) const; // DEFAULT_HEIGHT_SEARCH in map.h
557
558 std::string GetDebugInfo() const override;
559
560 // Event handler
562
563 virtual uint16 GetAIAnimKitId() const { return 0; }
564 virtual uint16 GetMovementAnimKitId() const { return 0; }
565 virtual uint16 GetMeleeAnimKitId() const { return 0; }
566
567 // Watcher
568 bool IsPrivateObject() const { return !_privateObjectOwner.IsEmpty(); }
569 ObjectGuid GetPrivateObjectOwner() const { return _privateObjectOwner; }
570 void SetPrivateObjectOwner(ObjectGuid const& owner) { _privateObjectOwner = owner; }
571 bool CheckPrivateObjectOwnerVisibility(WorldObject const* seer) const;
572
573 // Smooth Phasing
574 SmoothPhasing* GetOrCreateSmoothPhasing();
575 SmoothPhasing* GetSmoothPhasing() { return _smoothPhasing.get(); }
576 SmoothPhasing const* GetSmoothPhasing() const { return _smoothPhasing.get(); }
577
578 protected:
579 std::string m_name;
585
586 // transports (gameobjects only)
588
589 virtual void ProcessPositionDataChanged(PositionFullTerrainStatus const& data);
596
597 //these functions are used mostly for Relocate() and Corpse/Player specific stuff...
598 //use them ONLY in LoadFromDB()/Create() funcs and nowhere else!
599 //mapId/instanceId should be set in SetMap() function!
600 void SetLocationMapId(uint32 _mapId) { m_mapId = _mapId; }
601 void SetLocationInstanceId(uint32 _instanceId) { m_InstanceId = _instanceId; }
602
603 virtual bool CanNeverSee(WorldObject const* obj, bool ignorePhaseShift = false) const;
604 virtual bool CanAlwaysSee([[maybe_unused]] WorldObject const* /*obj*/) const { return false; }
605 virtual bool IsNeverVisibleFor([[maybe_unused]] WorldObject const* seer, [[maybe_unused]] bool allowServersideObjects = false) const { return !IsInWorld() || IsDestroyedObject(); }
606 virtual bool IsAlwaysVisibleFor([[maybe_unused]] WorldObject const* seer) const { return false; }
607 virtual bool IsInvisibleDueToDespawn([[maybe_unused]] WorldObject const* seer) const { return false; }
608 //difference from IsAlwaysVisibleFor: 1. after distance check; 2. use owner or charmer as seer
609 virtual bool IsAlwaysDetectableFor([[maybe_unused]] WorldObject const* seer) const { return false; }
610
611 virtual void Heartbeat() { }
612 private:
613 Map* m_currMap; // current object's Map location
614
615 uint32 m_InstanceId; // in map copy with instance id
617 PhaseShift _suppressedPhaseShift; // contains phases for current area but not applied due to conditions
619
621
623
624 std::unique_ptr<SmoothPhasing> _smoothPhasing;
625
627
628 virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool incOwnRadius = true, bool incTargetRadius = true) const;
629
630 bool CanDetect(WorldObject const* obj, bool ignoreStealth, bool checkAlert = false) const;
631 bool CanDetectInvisibilityOf(WorldObject const* obj) const;
632 bool CanDetectStealthOf(WorldObject const* obj, bool checkAlert = false) const;
633};
634
635namespace Trinity
636{
637 // Binary predicate to sort WorldObjects based on the distance to a reference WorldObject
639 {
640 public:
641 ObjectDistanceOrderPred(WorldObject const* refObj, bool ascending = true) : _refObj(refObj), _ascending(ascending) { }
642
643 bool operator()(WorldObject const* left, WorldObject const* right) const
644 {
645 return _refObj->GetDistanceOrder(left, right) == _ascending;
646 }
647
648 private:
651 };
652}
653
654#endif
std::unordered_map< Player *, UpdateData > UpdateDataMapType
Definition BaseEntity.h:32
LocaleConstant
Definition Common.h:51
#define M_PI
Definition Common.h:118
#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
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 ASSERT
Definition Errors.h:80
ZLiquidStatus
Definition MapDefines.h:133
TempSummonType
@ TEMPSUMMON_MANUAL_DESPAWN
GOSummonType
@ GO_SUMMON_TIMED_OR_CORPSE_DESPAWN
#define CONTACT_DISTANCE
VisibilityDistanceType
@ TYPEID_OBJECT
Definition ObjectGuid.h:38
static void SummonCreatureGroup(uint32 summonerId, SummonerType summonerType, uint8 group, std::list< TempSummon * > *summoned, SummonCreature summonCreature)
Definition Object.cpp:1319
static constexpr Milliseconds const HEARTBEAT_INTERVAL
Definition Object.h:79
float const DEFAULT_COLLISION_HEIGHT
Definition Object.h:78
FindCreatureAliveState
Definition Object.h:222
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
SpellMissInfo
WeaponAttackType
ReputationRank
LineOfSightChecks
@ LINEOFSIGHT_ALL_CHECKS
SpellCastResult
double SpellEffectValue
This is a double instead of float to be able to store full range of int32.
bool IsUnit() const
Definition BaseEntity.h:171
void SetUpdateFieldValue(UF::UpdateFieldPrivateSetter< T > setter, typename UF::UpdateFieldPrivateSetter< T >::value_type value)
Definition BaseEntity.h:221
virtual std::string GetDebugInfo() const
bool IsAreaTrigger() const
Definition BaseEntity.h:177
bool IsWorldObject() const
Definition BaseEntity.h:169
virtual bool AddToObjectUpdate()=0
bool IsInWorld() const
Definition BaseEntity.h:158
virtual void RemoveFromWorld()
void SetUpdateFieldFlagValue(UF::UpdateFieldPrivateSetter< T > setter, typename UF::UpdateFieldPrivateSetter< T >::value_type flag)
Definition BaseEntity.h:228
bool IsSceneObject() const
Definition BaseEntity.h:178
bool IsDynObject() const
Definition BaseEntity.h:175
bool IsCorpse() const
Definition BaseEntity.h:176
virtual void AddToWorld()
virtual void RemoveFromObjectUpdate()=0
void RemoveUpdateFieldFlagValue(UF::UpdateFieldPrivateSetter< T > setter, typename UF::UpdateFieldPrivateSetter< T >::value_type flag)
Definition BaseEntity.h:235
bool IsCreature() const
Definition BaseEntity.h:172
bool IsGameObject() const
Definition BaseEntity.h:174
bool IsPlayer() const
Definition BaseEntity.h:173
bool IsConversation() const
Definition BaseEntity.h:179
bool IsItem() const
Definition BaseEntity.h:170
bool IsDestroyedObject() const
Definition BaseEntity.h:198
virtual void BuildUpdate(UpdateDataMapType &data_map)
Definition BaseEntity.h:200
bool HasFlag(FLAG_TYPE flag) const
Definition Object.h:208
void AddFlag(FLAG_TYPE flag)
Definition Object.h:209
T_FLAGS GetFlags() const
Definition Object.h:207
void DelFlag(FLAG_TYPE flag)
Definition Object.h:210
T_VALUES GetValue(FLAG_TYPE flag) const
Definition Object.h:212
T_VALUES m_values[ARRAY_SIZE]
Definition Object.h:217
void AddValue(FLAG_TYPE flag, T_VALUES value)
Definition Object.h:214
void SetValue(FLAG_TYPE flag, T_VALUES value)
Definition Object.h:213
Definition Item.h:179
Definition Map.h:225
static ObjectGuid const Empty
Definition ObjectGuid.h:314
Trinity::unique_weak_ptr< Object > GetWeakPtr() const
Definition Object.h:165
void SetDynamicFlag(uint32 flag)
Definition Object.h:97
Corpse * ToCorpse()
Definition Object.h:136
static Creature * ToCreature(Object *o)
Definition Object.h:123
static Player const * ToPlayer(Object const *o)
Definition Object.h:129
Player const * ToPlayer() const
Definition Object.h:127
static Item const * ToItem(Object const *o)
Definition Object.h:114
float GetObjectScale() const
Definition Object.h:92
static SceneObject const * ToSceneObject(Object const *o)
Definition Object.h:154
Trinity::unique_trackable_ptr< Object > m_scriptRef
Definition Object.h:191
DynamicObject * ToDynObject()
Definition Object.h:141
static Unit * ToUnit(Object *o)
Definition Object.h:118
Player * ToPlayer()
Definition Object.h:126
static GameObject * ToGameObject(Object *o)
Definition Object.h:133
static Corpse const * ToCorpse(Object const *o)
Definition Object.h:139
static Conversation * ToConversation(Object *o)
Definition Object.h:158
SceneObject const * ToSceneObject() const
Definition Object.h:152
WorldObject const * ToWorldObject() const
Definition Object.h:107
bool HasDynamicFlag(uint32 flag) const
Definition Object.h:96
Conversation * ToConversation()
Definition Object.h:156
virtual bool hasQuest(uint32) const
Definition Object.h:103
SceneObject * ToSceneObject()
Definition Object.h:151
static Conversation const * ToConversation(Object const *o)
Definition Object.h:159
virtual void BuildValuesCreate(UF::UpdateFieldFlag flags, ByteBuffer &data, Player const *target) const =0
WorldObject * ToWorldObject()
Definition Object.h:106
virtual void BuildValuesUpdate(UF::UpdateFieldFlag flags, ByteBuffer &data, Player const *target) const =0
static WorldObject const * ToWorldObject(Object const *o)
Definition Object.h:109
Item const * ToItem() const
Definition Object.h:112
Conversation const * ToConversation() const
Definition Object.h:157
AreaTrigger * ToAreaTrigger()
Definition Object.h:146
static WorldObject * ToWorldObject(Object *o)
Definition Object.h:108
GameObject * ToGameObject()
Definition Object.h:131
static AreaTrigger const * ToAreaTrigger(Object const *o)
Definition Object.h:149
GameObject const * ToGameObject() const
Definition Object.h:132
Corpse const * ToCorpse() const
Definition Object.h:137
Unit const * ToUnit() const
Definition Object.h:117
void ReplaceAllDynamicFlags(uint32 flag)
Definition Object.h:99
static DynamicObject const * ToDynObject(Object const *o)
Definition Object.h:144
static GameObject const * ToGameObject(Object const *o)
Definition Object.h:134
static Item * ToItem(Object *o)
Definition Object.h:113
uint32 GetEntry() const
Definition Object.h:89
virtual Loot * GetLootForPlayer(Player const *player) const
Definition Object.h:167
uint32 GetDynamicFlags() const
Definition Object.h:95
Creature * ToCreature()
Definition Object.h:121
Item * ToItem()
Definition Object.h:111
void RemoveDynamicFlag(uint32 flag)
Definition Object.h:98
static Unit const * ToUnit(Object const *o)
Definition Object.h:119
static AreaTrigger * ToAreaTrigger(Object *o)
Definition Object.h:148
static Creature const * ToCreature(Object const *o)
Definition Object.h:124
static Corpse * ToCorpse(Object *o)
Definition Object.h:138
friend ObjectFragmentInfoInitializer
Definition Object.h:184
Creature const * ToCreature() const
Definition Object.h:122
AreaTrigger const * ToAreaTrigger() const
Definition Object.h:147
void SetEntry(uint32 entry)
Definition Object.h:90
static SceneObject * ToSceneObject(Object *o)
Definition Object.h:153
virtual void SetObjectScale(float scale)
Definition Object.h:93
UF::UpdateField< UF::ObjectData, int32(WowCS::EntityFragment::CGObject), TYPEID_OBJECT > m_objectData
Definition Object.h:161
virtual bool hasInvolvedQuest(uint32) const
Definition Object.h:104
virtual ~Object()
virtual SpawnTrackingStateData const * GetSpawnTrackingStateDataForPlayer(Player const *player) const
Definition Object.h:169
DynamicObject const * ToDynObject() const
Definition Object.h:142
static DynamicObject * ToDynObject(Object *o)
Definition Object.h:143
static Player * ToPlayer(Object *o)
Definition Object.h:128
Unit * ToUnit()
Definition Object.h:116
Definition Spell.h:277
WorldObject const * _refObj
Definition Object.h:649
ObjectDistanceOrderPred(WorldObject const *refObj, bool ascending=true)
Definition Object.h:641
bool operator()(WorldObject const *left, WorldObject const *right) const
Definition Object.h:643
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:635
int8 GetTransSeat() const
Definition Object.h:544
bool InSamePhase(PhaseShift const &phaseShift) const
Definition Object.h:314
float m_staticFloorZ
Definition Object.h:592
virtual uint16 GetMeleeAnimKitId() const
Definition Object.h:565
ZLiquidStatus m_liquidStatus
Definition Object.h:594
PhaseShift const & GetSuppressedPhaseShift() const
Definition Object.h:313
virtual uint16 GetMovementAnimKitId() const
Definition Object.h:564
virtual bool IsInvisibleDueToDespawn(WorldObject const *seer) const
Definition Object.h:607
Map * GetMap() const
Definition Object.h:411
ZLiquidStatus GetLiquidStatus() const
Definition Object.h:337
SmoothPhasing const * GetSmoothPhasing() const
Definition Object.h:576
std::string m_name
Definition Object.h:579
virtual ObjectGuid GetCreatorGUID() const =0
virtual float GetCollisionHeight() const
Definition Object.h:553
virtual bool IsAlwaysVisibleFor(WorldObject const *seer) const
Definition Object.h:606
Map * FindMap() const
Definition Object.h:412
bool isNeedNotify(uint16 f) const
Definition Object.h:520
uint16 m_notifyflags
Definition Object.h:620
virtual uint8 GetLevelForTarget(WorldObject const *) const
Definition Object.h:385
virtual void UpdateObjectVisibilityOnDestroy()
Definition Object.h:511
void ResetAllNotifies()
Definition Object.h:522
void SetLocationInstanceId(uint32 _instanceId)
Definition Object.h:601
uint32 m_InstanceId
Definition Object.h:615
ObjectGuid GetPrivateObjectOwner() const
Definition Object.h:569
uint32 m_areaId
Definition Object.h:591
virtual Position const & GetStationaryPosition() const
Definition Object.h:550
Position const & GetTransOffset() const
Definition Object.h:542
virtual bool IsAlwaysDetectableFor(WorldObject const *seer) const
Definition Object.h:609
bool IsVisibilityOverridden() const
Definition Object.h:528
virtual ObjectGuid GetCharmerOrOwnerGUID() const
Definition Object.h:439
float GetTransOffsetX() const
Definition Object.h:538
uint32 LastUsedScriptID
Definition Object.h:534
PhaseShift & GetPhaseShift()
Definition Object.h:310
FlaggedValuesArray32< int32, uint64, InvisibilityType, TOTAL_INVISIBILITY_TYPES > m_invisibility
Definition Object.h:403
void SetLocationMapId(uint32 _mapId)
Definition Object.h:600
ZoneScript * GetZoneScript() const
Definition Object.h:417
virtual void UpdateObjectVisibilityOnCreate()
Definition Object.h:510
bool isActiveObject() const
Definition Object.h:524
PhaseShift _phaseShift
Definition Object.h:616
TransportBase * GetTransport() const
Definition Object.h:537
PhaseShift const & GetPhaseShift() const
Definition Object.h:311
WmoLocation const * GetCurrentWmo() const
Definition Object.h:338
bool GetDistanceOrder(WorldObject const *obj1, WorldObject const *obj2, bool is3D=true) const
Definition Object.cpp:569
bool IsPrivateObject() const
Definition Object.h:568
uint32 GetInstanceId() const
Definition Object.h:308
FlaggedValuesArray32< int32, uint64, InvisibilityType, TOTAL_INVISIBILITY_TYPES > m_invisibilityDetect
Definition Object.h:404
uint16 GetNotifyFlags() const
Definition Object.h:521
bool IsOutdoors() const
Definition Object.h:336
void SetPrivateObjectOwner(ObjectGuid const &owner)
Definition Object.h:570
ZoneScript * m_zoneScript
Definition Object.h:584
SmoothPhasing * GetSmoothPhasing()
Definition Object.h:575
std::string GetNameForLocaleIdx(LocaleConstant) const override
Definition Object.h:345
float GetTransOffsetY() const
Definition Object.h:539
PhaseShift _suppressedPhaseShift
Definition Object.h:617
virtual uint16 GetAIAnimKitId() const
Definition Object.h:563
std::string const & GetName() const
Definition Object.h:342
bool IsFarVisible() const
Definition Object.h:526
virtual void Heartbeat()
Definition Object.h:611
float GetTransOffsetZ() const
Definition Object.h:540
int32 _dbPhase
Definition Object.h:618
bool InSamePhase(WorldObject const *obj) const
Definition Object.h:318
uint32 GetTransTime() const
Definition Object.h:543
bool const m_isStoredInWorldObjectGridContainer
Definition Object.h:583
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPES > m_stealthDetect
Definition Object.h:401
bool m_isActive
Definition Object.h:580
PhaseShift & GetSuppressedPhaseShift()
Definition Object.h:312
void SetName(std::string newname)
Definition Object.h:343
void AddToNotify(uint16 f)
Definition Object.h:519
bool m_outdoors
Definition Object.h:593
std::unique_ptr< SmoothPhasing > _smoothPhasing
Definition Object.h:624
EventProcessor m_Events
Definition Object.h:561
TransportBase * m_transport
Definition Object.h:587
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPES > m_stealth
Definition Object.h:400
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPES > m_serverSideVisibilityDetect
Definition Object.h:407
virtual uint32 GetFaction() const =0
static bool InSamePhase(WorldObject const *a, WorldObject const *b)
Definition Object.h:322
Optional< float > m_visibilityDistanceOverride
Definition Object.h:582
ObjectGuid _privateObjectOwner
Definition Object.h:622
bool IsInBetween(WorldObject const *obj1, WorldObject const *obj2, float size=0) const
Definition Object.h:375
uint32 GetAreaId() const
Definition Object.h:333
float GetTransOffsetO() const
Definition Object.h:541
virtual ObjectGuid GetOwnerGUID() const =0
uint32 GetZoneId() const
Definition Object.h:332
Milliseconds _heartbeatTimer
Definition Object.h:626
MovementInfo m_movementInfo
Definition Object.h:548
Optional< WmoLocation > m_currentWmo
Definition Object.h:595
uint32 m_zoneId
Definition Object.h:590
bool IsAlwaysStoredInWorldObjectGridContainer() const
Definition Object.h:531
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPES > m_serverSideVisibility
Definition Object.h:406
bool m_isFarVisible
Definition Object.h:581
void GetZoneAndAreaId(uint32 &zoneid, uint32 &areaid) const
Definition Object.h:334
virtual bool IsNeverVisibleFor(WorldObject const *seer, bool allowServersideObjects=false) const
Definition Object.h:605
virtual void SetFaction(uint32)
Definition Object.h:466
virtual float GetCombatReach() const
Definition Object.h:302
void SetDBPhase(int32 p)
Definition Object.h:330
Map * m_currMap
Definition Object.h:613
virtual bool CanAlwaysSee(WorldObject const *) const
Definition Object.h:604
int32 GetDBPhase() const
Definition Object.h:327
UpdateFieldFlag
Definition UpdateField.h:37
bool IncludeHiddenBySpawnTracking
Definition Object.h:273
Optional< FindCreatureAliveState > IsAlive
Definition Object.h:236
Optional< std::string_view > StringId
Definition Object.h:234
Optional< ObjectGuid > CreatorGuid
Definition Object.h:247
Optional< bool > IsSummon
Definition Object.h:238
bool IgnoreNotOwnedPrivateObjects
Definition Object.h:241
bool IgnorePrivateObjects
Definition Object.h:242
Optional< uint32 > AuraSpellId
Definition Object.h:244
Optional< ObjectGuid > PrivateObjectOwnerGuid
Definition Object.h:249
Optional< uint32 > CreatureId
Definition Object.h:233
Optional< ObjectGuid > DemonCreatorGuid
Definition Object.h:248
Optional< bool > IsInCombat
Definition Object.h:237
Optional< ObjectGuid > OwnerGuid
Definition Object.h:245
Optional< ObjectGuid > CharmerGuid
Definition Object.h:246
bool IgnoreNotOwnedPrivateObjects
Definition Object.h:261
Optional< ObjectGuid > OwnerGuid
Definition Object.h:264
Optional< std::string_view > StringId
Definition Object.h:255
Optional< GameobjectTypes > GameObjectType
Definition Object.h:266
Optional< uint32 > GameObjectId
Definition Object.h:254
Optional< ObjectGuid > PrivateObjectOwnerGuid
Definition Object.h:265
Optional< bool > IsSummon
Definition Object.h:257
Optional< bool > IsSpawned
Definition Object.h:258
Definition Loot.h:286
void operator()(Object *) const
Definition Object.h:190
constexpr void GetPosition(float &x, float &y) const
Definition Position.h:92
UpdateField< uint32, 0, 2 > DynamicFlags
UpdateField< int32, 0, 1 > EntryID
UpdateField< float, 0, 3 > Scale