TrinityCore
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 "Errors.h"
24#include "EventProcessor.h"
25#include "MapDefines.h"
26#include "ModelIgnoreFlags.h"
27#include "MovementInfo.h"
28#include "ObjectDefines.h"
29#include "ObjectGuid.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 "UpdateFields.h"
37#include <list>
38#include <unordered_map>
39
40class AreaTrigger;
41class Conversation;
42class Corpse;
43class Creature;
44class CreatureAI;
45class DynamicObject;
46class GameObject;
47class InstanceScript;
48class Item;
49class Map;
50class Object;
51class Player;
52class Scenario;
53class SceneObject;
54class SmoothPhasing;
55class Spell;
57class SpellEffectInfo;
58class SpellInfo;
59class TempSummon;
60class TransportBase;
61class Unit;
62class UpdateData;
63class WorldObject;
64class WorldPacket;
65class ZoneScript;
67struct Loot;
68struct QuaternionData;
69struct SpellPowerCost;
70
71namespace WorldPackets
72{
73 namespace CombatLog
74 {
76 }
77}
78
79typedef std::unordered_map<Player*, UpdateData> UpdateDataMapType;
80
82{
83 bool NoBirthAnim : 1;
84 bool EnablePortals : 1;
85 bool PlayHoverAnim : 1;
88 bool Stationary : 1;
89 bool CombatVictim : 1;
90 bool ServerTime : 1;
91 bool Vehicle : 1;
92 bool AnimKit : 1;
93 bool Rotation : 1;
94 bool AreaTrigger : 1;
95 bool GameObject : 1;
96 bool SmoothPhasing : 1;
97 bool ThisIsYou : 1;
98 bool SceneObject : 1;
99 bool ActivePlayer : 1;
100 bool Conversation : 1;
101
102 void Clear()
103 {
104 memset(this, 0, sizeof(CreateObjectBits));
105 }
106};
107
108namespace UF
109{
110 template<typename T>
112 {
113 return setter.SetValue(std::move(value));
114 }
115
116 template<typename T>
118 {
119 return setter.AddValue();
120 }
121
122 template<typename T>
124 {
125 return setter.InsertValue(index);
126 }
127
128 template<typename T>
130 {
131 setter.RemoveValue(index);
132 }
133
134 template<typename T>
136 {
137 setter.Clear();
138 }
139
140 template<typename T>
142 {
143 setter.RemoveValue();
144 }
145}
146
147float const DEFAULT_COLLISION_HEIGHT = 2.03128f; // Most common value in dbc
148
150{
151 public:
152 virtual ~Object();
153
154 bool IsInWorld() const { return m_inWorld; }
155
156 virtual void AddToWorld();
157 virtual void RemoveFromWorld();
158
159 static ObjectGuid GetGUID(Object const* o) { return o ? o->GetGUID() : ObjectGuid::Empty; }
160 ObjectGuid const& GetGUID() const { return m_guid; }
161 uint32 GetEntry() const { return m_objectData->EntryID; }
162 void SetEntry(uint32 entry) { SetUpdateFieldValue(m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::EntryID), entry); }
163
164 float GetObjectScale() const { return m_objectData->Scale; }
165 virtual void SetObjectScale(float scale) { SetUpdateFieldValue(m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::Scale), scale); }
166
167 uint32 GetDynamicFlags() const { return m_objectData->DynamicFlags; }
168 bool HasDynamicFlag(uint32 flag) const { return (*m_objectData->DynamicFlags & flag) != 0; }
169 void SetDynamicFlag(uint32 flag) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::DynamicFlags), flag); }
170 void RemoveDynamicFlag(uint32 flag) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::DynamicFlags), flag); }
172
173 TypeID GetTypeId() const { return m_objectTypeId; }
174 bool isType(uint16 mask) const { return (mask & m_objectType) != 0; }
175
176 virtual void BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const;
177 void SendUpdateToPlayer(Player* player);
178
179 void BuildValuesUpdateBlockForPlayer(UpdateData* data, Player const* target) const;
180 void BuildValuesUpdateBlockForPlayerWithFlag(UpdateData* data, UF::UpdateFieldFlag flags, Player const* target) const;
181 void BuildDestroyUpdateBlock(UpdateData* data) const;
182 void BuildOutOfRangeUpdateBlock(UpdateData* data) const;
183 ByteBuffer& PrepareValuesUpdateBuffer(UpdateData* data) const;
184
185 virtual void DestroyForPlayer(Player* target) const;
186 void SendOutOfRangeForPlayer(Player* target) const;
187
188 virtual void ClearUpdateMask(bool remove);
189
190 virtual std::string GetNameForLocaleIdx(LocaleConstant locale) const = 0;
191
192 virtual bool hasQuest(uint32 /* quest_id */) const { return false; }
193 virtual bool hasInvolvedQuest(uint32 /* quest_id */) const { return false; }
194 void SetIsNewObject(bool enable) { m_isNewObject = enable; }
195 bool IsDestroyedObject() const { return m_isDestroyedObject; }
196 void SetDestroyedObject(bool destroyed) { m_isDestroyedObject = destroyed; }
198 void BuildFieldsUpdate(Player*, UpdateDataMapType &) const;
199
200 inline bool IsWorldObject() const { return isType(TYPEMASK_WORLDOBJECT); }
201 static WorldObject* ToWorldObject(Object* o) { return o ? o->ToWorldObject() : nullptr; }
202 static WorldObject const* ToWorldObject(Object const* o) { return o ? o->ToWorldObject() : nullptr; }
203 WorldObject* ToWorldObject() { if (IsWorldObject()) return reinterpret_cast<WorldObject*>(this); else return nullptr; }
204 WorldObject const* ToWorldObject() const { if (IsWorldObject()) return reinterpret_cast<WorldObject const*>(this); else return nullptr; }
205
206 inline bool IsItem() const { return isType(TYPEMASK_ITEM); }
207 static Item* ToItem(Object* o) { return o ? o->ToItem() : nullptr; }
208 static Item const* ToItem(Object const* o) { return o ? o->ToItem() : nullptr; }
209 Item* ToItem() { if (IsItem()) return reinterpret_cast<Item*>(this); else return nullptr; }
210 Item const* ToItem() const { if (IsItem()) return reinterpret_cast<Item const*>(this); else return nullptr; }
211
212 inline bool IsPlayer() const { return GetTypeId() == TYPEID_PLAYER; }
213 static Player* ToPlayer(Object* o) { return o ? o->ToPlayer() : nullptr; }
214 static Player const* ToPlayer(Object const* o) { return o ? o->ToPlayer() : nullptr; }
215 Player* ToPlayer() { if (IsPlayer()) return reinterpret_cast<Player*>(this); else return nullptr; }
216 Player const* ToPlayer() const { if (IsPlayer()) return reinterpret_cast<Player const*>(this); else return nullptr; }
217
218 inline bool IsCreature() const { return GetTypeId() == TYPEID_UNIT; }
219 static Creature* ToCreature(Object* o) { return o ? o->ToCreature() : nullptr; }
220 static Creature const* ToCreature(Object const* o) { return o ? o->ToCreature() : nullptr; }
221 Creature* ToCreature() { if (IsCreature()) return reinterpret_cast<Creature*>(this); else return nullptr; }
222 Creature const* ToCreature() const { if (IsCreature()) return reinterpret_cast<Creature const*>(this); else return nullptr; }
223
224 inline bool IsUnit() const { return isType(TYPEMASK_UNIT); }
225 static Unit* ToUnit(Object* o) { return o ? o->ToUnit() : nullptr; }
226 static Unit const* ToUnit(Object const* o) { return o ? o->ToUnit() : nullptr; }
227 Unit* ToUnit() { if (IsUnit()) return reinterpret_cast<Unit*>(this); else return nullptr; }
228 Unit const* ToUnit() const { if (IsUnit()) return reinterpret_cast<Unit const*>(this); else return nullptr; }
229
230 inline bool IsGameObject() const { return GetTypeId() == TYPEID_GAMEOBJECT; }
231 static GameObject* ToGameObject(Object* o) { return o ? o->ToGameObject() : nullptr; }
232 static GameObject const* ToGameObject(Object const* o) { return o ? o->ToGameObject() : nullptr; }
233 GameObject* ToGameObject() { if (IsGameObject()) return reinterpret_cast<GameObject*>(this); else return nullptr; }
234 GameObject const* ToGameObject() const { if (IsGameObject()) return reinterpret_cast<GameObject const*>(this); else return nullptr; }
235
236 inline bool IsCorpse() const { return GetTypeId() == TYPEID_CORPSE; }
237 static Corpse* ToCorpse(Object* o) { return o ? o->ToCorpse() : nullptr; }
238 static Corpse const* ToCorpse(Object const* o) { return o ? o->ToCorpse() : nullptr; }
239 Corpse* ToCorpse() { if (IsCorpse()) return reinterpret_cast<Corpse*>(this); else return nullptr; }
240 Corpse const* ToCorpse() const { if (IsCorpse()) return reinterpret_cast<Corpse const*>(this); else return nullptr; }
241
242 inline bool IsDynObject() const { return GetTypeId() == TYPEID_DYNAMICOBJECT; }
243 static DynamicObject* ToDynObject(Object* o) { return o ? o->ToDynObject() : nullptr; }
244 static DynamicObject const* ToDynObject(Object const* o) { return o ? o->ToDynObject() : nullptr; }
245 DynamicObject* ToDynObject() { if (IsDynObject()) return reinterpret_cast<DynamicObject*>(this); else return nullptr; }
246 DynamicObject const* ToDynObject() const { if (IsDynObject()) return reinterpret_cast<DynamicObject const*>(this); else return nullptr; }
247
248 inline bool IsAreaTrigger() const { return GetTypeId() == TYPEID_AREATRIGGER; }
249 static AreaTrigger* ToAreaTrigger(Object* o) { return o ? o->ToAreaTrigger() : nullptr; }
250 static AreaTrigger const* ToAreaTrigger(Object const* o) { return o ? o->ToAreaTrigger() : nullptr; }
251 AreaTrigger* ToAreaTrigger() { if (IsAreaTrigger()) return reinterpret_cast<AreaTrigger*>(this); else return nullptr; }
252 AreaTrigger const* ToAreaTrigger() const { if (IsAreaTrigger()) return reinterpret_cast<AreaTrigger const*>(this); else return nullptr; }
253
254 inline bool IsSceneObject() const { return GetTypeId() == TYPEID_SCENEOBJECT; }
255 static SceneObject* ToSceneObject(Object* o) { return o ? o->ToSceneObject() : nullptr; }
256 static SceneObject const* ToSceneObject(Object const* o) { return o ? o->ToSceneObject() : nullptr; }
257 SceneObject* ToSceneObject() { if (IsSceneObject()) return reinterpret_cast<SceneObject*>(this); else return nullptr; }
258 SceneObject const* ToSceneObject() const { if (IsSceneObject()) return reinterpret_cast<SceneObject const*>(this); else return nullptr; }
259
260 inline bool IsConversation() const { return GetTypeId() == TYPEID_CONVERSATION; }
261 static Conversation* ToConversation(Object* o) { return o ? o->ToConversation() : nullptr; }
262 static Conversation const* ToConversation(Object const* o) { return o ? o->ToConversation() : nullptr; }
263 Conversation* ToConversation() { if (IsConversation()) return reinterpret_cast<Conversation*>(this); else return nullptr; }
264 Conversation const* ToConversation() const { if (IsConversation()) return reinterpret_cast<Conversation const*>(this); else return nullptr; }
265
268
269 template<typename T>
271 {
272 AddToObjectUpdateIfNeeded();
273 }
274
275 virtual std::string GetDebugInfo() const;
276
277 Trinity::unique_weak_ptr<Object> GetWeakPtr() const { return m_scriptRef; }
278
279 virtual Loot* GetLootForPlayer([[maybe_unused]] Player const* player) const { return nullptr; }
280
281 protected:
282 Object();
283
284 void _Create(ObjectGuid const& guid);
285
286 template<typename T>
288 {
289 if (UF::SetUpdateFieldValue(setter, std::move(value)))
290 AddToObjectUpdateIfNeeded();
291 }
292
293 template<typename T>
295 {
296 static_assert(std::is_integral<T>::value, "SetUpdateFieldFlagValue must be used with integral types");
297 SetUpdateFieldValue(setter, setter.GetValue() | flag);
298 }
299
300 template<typename T>
302 {
303 static_assert(std::is_integral<T>::value, "RemoveUpdateFieldFlagValue must be used with integral types");
304 SetUpdateFieldValue(setter, setter.GetValue() & ~flag);
305 }
306
307 template<typename T>
309 {
310 AddToObjectUpdateIfNeeded();
311 return UF::AddDynamicUpdateFieldValue(setter);
312 }
313
314 template<typename T>
316 {
317 AddToObjectUpdateIfNeeded();
318 return UF::InsertDynamicUpdateFieldValue(setter, index);
319 }
320
321 template<typename T>
323 {
324 AddToObjectUpdateIfNeeded();
326 }
327
328 template<typename T>
330 {
331 AddToObjectUpdateIfNeeded();
333 }
334
335 template<typename T>
337 {
338 AddToObjectUpdateIfNeeded();
340 }
341
342 // stat system helpers
343 template<typename T>
345 {
346 static_assert(std::is_arithmetic<T>::value, "SetUpdateFieldStatValue must be used with arithmetic types");
347 SetUpdateFieldValue(setter, std::max(value, T(0)));
348 }
349
350 template<typename T>
352 {
353 static_assert(std::is_arithmetic<T>::value, "SetUpdateFieldStatValue must be used with arithmetic types");
354
355 T value = setter.GetValue();
356 if (apply)
357 value += mod;
358 else
359 value -= mod;
360
361 SetUpdateFieldValue(setter, value);
362 }
363
364 template<typename T>
366 {
367 static_assert(std::is_arithmetic<T>::value, "SetUpdateFieldStatValue must be used with arithmetic types");
368
369 T value = setter.GetValue();
370
371 // don't want to include Util.h here
372 //ApplyPercentModFloatVar(value, percent, apply);
373 if (percent == -100.0f)
374 percent = -99.99f;
375 value *= (apply ? (100.0f + percent) / 100.0f : 100.0f / (100.0f + percent));
376
377 SetUpdateFieldValue(setter, value);
378 }
379
380 template<typename Action>
382 {
383 bool wasUpdatedBeforeAction = m_objectUpdated;
384 action();
385 if (m_objectUpdated && !wasUpdatedBeforeAction)
386 {
387 RemoveFromObjectUpdate();
388 m_objectUpdated = false;
389 }
390 }
391
392 void BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Player* target) const;
393 virtual UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const* target) const;
394 virtual void BuildValuesCreate(ByteBuffer* data, Player const* target) const = 0;
395 virtual void BuildValuesUpdate(ByteBuffer* data, Player const* target) const = 0;
396
397 public:
398 virtual void BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const;
399
400 protected:
402
405
406 virtual bool AddToObjectUpdate() = 0;
407 virtual void RemoveFromObjectUpdate() = 0;
408 void AddToObjectUpdateIfNeeded();
409
411
412 private:
417
418 struct NoopObjectDeleter { void operator()(Object*) const { /*noop - not managed*/ } };
420
421 Object(Object const& right) = delete;
422 Object(Object&& right) = delete;
423 Object& operator=(Object const& right) = delete;
424 Object& operator=(Object&& right) = delete;
425};
426
427template <class T_VALUES, class T_FLAGS, class FLAG_TYPE, size_t ARRAY_SIZE>
429{
430 public:
431 static_assert(sizeof(T_FLAGS) * 8 > ARRAY_SIZE, "Fix T_FLAGS");
432
434 {
435 for (uint32 i = 0; i < ARRAY_SIZE; ++i)
436 m_values[i] = T_VALUES(0);
437 m_flags = T_FLAGS(0);
438 }
439
440 T_FLAGS GetFlags() const { return m_flags; }
441 bool HasFlag(FLAG_TYPE flag) const { return m_flags & (T_FLAGS(1) << flag); }
442 void AddFlag(FLAG_TYPE flag) { m_flags |= (T_FLAGS(1) << flag); }
443 void DelFlag(FLAG_TYPE flag) { m_flags &= ~(T_FLAGS(1) << flag); }
444
445 T_VALUES GetValue(FLAG_TYPE flag) const { return m_values[flag]; }
446 void SetValue(FLAG_TYPE flag, T_VALUES value) { m_values[flag] = value; }
447 void AddValue(FLAG_TYPE flag, T_VALUES value) { m_values[flag] += value; }
448
449 private:
450 T_VALUES m_values[ARRAY_SIZE];
451 T_FLAGS m_flags;
452};
453
455{
458
462
463 bool IgnorePhases = false;
466
473};
474
476{
479
481 Optional<bool> IsSpawned = true; // most searches should be for spawned objects only, to search for "any" just clear this field at call site
482
483 bool IgnorePhases = false;
486
490};
491
493{
494 protected:
495 explicit WorldObject(bool isWorldObject); //note: here it means if it is in grid object list or world object list
496 public:
497 virtual ~WorldObject();
498
499 virtual void Update(uint32 diff);
500
501 void AddToWorld() override;
502 void RemoveFromWorld() override;
503
504 void GetNearPoint2D(WorldObject const* searcher, float& x, float& y, float distance, float absAngle) const;
505 void GetNearPoint(WorldObject const* searcher, float& x, float& y, float& z, float distance2d, float absAngle) const;
506 void GetClosePoint(float& x, float& y, float& z, float size, float distance2d = 0, float relAngle = 0) const;
507 void MovePosition(Position &pos, float dist, float angle);
508 Position GetNearPosition(float dist, float angle);
509 void MovePositionToFirstCollision(Position &pos, float dist, float angle);
510 Position GetFirstCollisionPosition(float dist, float angle);
511 Position GetRandomNearPosition(float radius);
512 void GetContactPoint(WorldObject const* obj, float& x, float& y, float& z, float distance2d = CONTACT_DISTANCE) const;
513
514 virtual float GetCombatReach() const { return 0.0f; } // overridden (only) in Unit
515 void UpdateGroundPositionZ(float x, float y, float &z) const;
516 void UpdateAllowedPositionZ(float x, float y, float &z, float* groundZ = nullptr) const;
517
518 void GetRandomPoint(Position const& srcPos, float distance, float& rand_x, float& rand_y, float& rand_z) const;
519 Position GetRandomPoint(Position const& srcPos, float distance) const;
520
521 uint32 GetInstanceId() const { return m_InstanceId; }
522
523 PhaseShift& GetPhaseShift() { return _phaseShift; }
524 PhaseShift const& GetPhaseShift() const { return _phaseShift; }
525 PhaseShift& GetSuppressedPhaseShift() { return _suppressedPhaseShift; }
526 PhaseShift const& GetSuppressedPhaseShift() const { return _suppressedPhaseShift; }
527 bool InSamePhase(PhaseShift const& phaseShift) const
528 {
529 return GetPhaseShift().CanSee(phaseShift);
530 }
531 bool InSamePhase(WorldObject const* obj) const
532 {
533 return GetPhaseShift().CanSee(obj->GetPhaseShift());
534 }
535 static bool InSamePhase(WorldObject const* a, WorldObject const* b)
536 {
537 return a && b && a->InSamePhase(b);
538 }
539
540 int32 GetDBPhase() const { return _dbPhase; }
541
542 // if negative it is used as PhaseGroupId
543 void SetDBPhase(int32 p) { _dbPhase = p; }
544
545 uint32 GetZoneId() const { return m_zoneId; }
546 uint32 GetAreaId() const { return m_areaId; }
547 void GetZoneAndAreaId(uint32& zoneid, uint32& areaid) const { zoneid = m_zoneId, areaid = m_areaId; }
548 bool IsInWorldPvpZone() const;
549 bool IsOutdoors() const { return m_outdoors; }
550 ZLiquidStatus GetLiquidStatus() const { return m_liquidStatus; }
551 WmoLocation const* GetCurrentWmo() const { return m_currentWmo ? &*m_currentWmo : nullptr; }
552
553 InstanceScript* GetInstanceScript() const;
554
555 std::string const& GetName() const { return m_name; }
556 void SetName(std::string newname) { m_name = std::move(newname); }
557
558 std::string GetNameForLocaleIdx(LocaleConstant /*locale*/) const override { return m_name; }
559
560 float GetDistance(WorldObject const* obj) const;
561 float GetDistance(Position const& pos) const;
562 float GetDistance(float x, float y, float z) const;
563 float GetDistance2d(WorldObject const* obj) const;
564 float GetDistance2d(float x, float y) const;
565 float GetDistanceZ(WorldObject const* obj) const;
566
567 bool IsSelfOrInSameMap(WorldObject const* obj) const;
568 bool IsInMap(WorldObject const* obj) const;
569 bool IsWithinDist3d(float x, float y, float z, float dist) const;
570 bool IsWithinDist3d(Position const* pos, float dist) const;
571 bool IsWithinDist2d(float x, float y, float dist) const;
572 bool IsWithinDist2d(Position const* pos, float dist) const;
573 // use only if you will sure about placing both object at same map
574 bool IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D = true, bool incOwnRadius = true, bool incTargetRadius = true) const;
575 bool IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D = true, bool incOwnRadius = true, bool incTargetRadius = true) const;
576 bool IsWithinLOS(float x, float y, float z, LineOfSightChecks checks = LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags ignoreFlags = VMAP::ModelIgnoreFlags::Nothing) const;
577 bool IsWithinLOSInMap(WorldObject const* obj, LineOfSightChecks checks = LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags ignoreFlags = VMAP::ModelIgnoreFlags::Nothing) const;
578 Position GetHitSpherePointFor(Position const& dest) const;
579 void GetHitSpherePointFor(Position const& dest, float& x, float& y, float& z) const;
580 bool GetDistanceOrder(WorldObject const* obj1, WorldObject const* obj2, bool is3D = true) const;
581 bool IsInRange(WorldObject const* obj, float minRange, float maxRange, bool is3D = true) const;
582 bool IsInRange2d(float x, float y, float minRange, float maxRange) const;
583 bool IsInRange3d(float x, float y, float z, float minRange, float maxRange) const;
584 bool isInFront(WorldObject const* target, float arc = float(M_PI)) const;
585 bool isInBack(WorldObject const* target, float arc = float(M_PI)) const;
586
587 bool IsInBetween(Position const& pos1, Position const& pos2, float size = 0) const;
588 bool IsInBetween(WorldObject const* obj1, WorldObject const* obj2, float size = 0) const { return obj1 && obj2 && IsInBetween(obj1->GetPosition(), obj2->GetPosition(), size); }
589
590 virtual void CleanupsBeforeDelete(bool finalCleanup = true); // used in destructor or explicitly before mass creature delete to remove cross-references to already deleted units
591
592 virtual void SendMessageToSet(WorldPacket const* data, bool self) const;
593 virtual void SendMessageToSetInRange(WorldPacket const* data, float dist, bool self) const;
594 virtual void SendMessageToSet(WorldPacket const* data, Player const* skipped_rcvr) const;
595
596 void SendCombatLogMessage(WorldPackets::CombatLog::CombatLogServerPacket* combatLog) const;
597
598 virtual uint8 GetLevelForTarget(WorldObject const* /*target*/) const { return 1; }
599
600 void PlayDistanceSound(uint32 soundId, Player const* target = nullptr) const;
601 void StopDistanceSound(Player const* target = nullptr) const;
602 void PlayDirectSound(uint32 soundId, Player const* target = nullptr, uint32 broadcastTextId = 0) const;
603 void PlayDirectMusic(uint32 musicId, Player const* target = nullptr) const;
604 void PlayObjectSound(int32 soundKitId, ObjectGuid targetObject, Player const* target = nullptr, int32 broadcastTextId = 0) const;
605
606 void AddObjectToRemoveList();
607
608 float GetGridActivationRange() const;
609 float GetVisibilityRange() const;
610 float GetSightRange(WorldObject const* target = nullptr) const;
611 bool CanSeeOrDetect(WorldObject const* obj, bool implicitDetect = false, bool distanceCheck = false, bool checkAlert = false) const;
612
615
618
621
622 virtual void SetMap(Map* map);
623 virtual void ResetMap();
624 Map* GetMap() const { ASSERT(m_currMap); return m_currMap; }
625 Map* FindMap() const { return m_currMap; }
626 //used to check all object's GetMap() calls when object is not in world!
627
628 void SetZoneScript();
629 ZoneScript* FindZoneScript() const;
630 ZoneScript* GetZoneScript() const { return m_zoneScript; }
631
632 Scenario* GetScenario() const;
633
634 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);
635 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);
636 TempSummon* SummonPersonalClone(Position const& pos, TempSummonType despawnType = TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime = 0s, uint32 vehId = 0, uint32 spellId = 0, Player* privateObjectOwner = nullptr);
637 GameObject* SummonGameObject(uint32 entry, Position const& pos, QuaternionData const& rot, Seconds respawnTime, GOSummonType summonType = GO_SUMMON_TIMED_OR_CORPSE_DESPAWN);
638 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);
639 Creature* SummonTrigger(float x, float y, float z, float ang, Milliseconds despawnTime, CreatureAI* (*GetAI)(Creature*) = nullptr);
640 void SummonCreatureGroup(uint8 group, std::list<TempSummon*>* list = nullptr);
641
642 Creature* FindNearestCreature(uint32 entry, float range, bool alive = true) const;
643 Creature* FindNearestCreatureWithOptions(float range, FindCreatureOptions const& options) const;
644 GameObject* FindNearestGameObject(uint32 entry, float range, bool spawnedOnly = true) const;
645 GameObject* FindNearestGameObjectWithOptions(float range, FindGameObjectOptions const& options) const;
646 GameObject* FindNearestUnspawnedGameObject(uint32 entry, float range) const;
647 GameObject* FindNearestGameObjectOfType(GameobjectTypes type, float range) const;
648 Player* SelectNearestPlayer(float range) const;
649
650 virtual ObjectGuid GetCreatorGUID() const = 0;
651 virtual ObjectGuid GetOwnerGUID() const = 0;
652 virtual ObjectGuid GetCharmerOrOwnerGUID() const { return GetOwnerGUID(); }
653 ObjectGuid GetCharmerOrOwnerOrOwnGUID() const;
654
655 Unit* GetOwner() const;
656 Unit* GetCharmerOrOwner() const;
657 Unit* GetCharmerOrOwnerOrSelf() const;
658 Player* GetCharmerOrOwnerPlayerOrPlayerItself() const;
659 Player* GetAffectingPlayer() const;
660
661 Player* GetSpellModOwner() const;
662 int32 CalculateSpellDamage(Unit const* target, SpellEffectInfo const& spellEffectInfo, int32 const* basePoints = nullptr, float* variance = nullptr, uint32 castItemId = 0, int32 itemLevel = -1) const;
663
664 // target dependent range checks
665 float GetSpellMaxRangeForTarget(Unit const* target, SpellInfo const* spellInfo) const;
666 float GetSpellMinRangeForTarget(Unit const* target, SpellInfo const* spellInfo) const;
667
668 double ApplyEffectModifiers(SpellInfo const* spellInfo, uint8 effIndex, double value) const;
669 int32 CalcSpellDuration(SpellInfo const* spellInfo, std::vector<SpellPowerCost> const* powerCosts) const;
670 int32 ModSpellDuration(SpellInfo const* spellInfo, WorldObject const* target, int32 duration, bool positive, uint32 effectMask) const;
671 void ModSpellCastTime(SpellInfo const* spellInfo, int32& castTime, Spell* spell = nullptr) const;
672 void ModSpellDurationTime(SpellInfo const* spellInfo, int32& durationTime, Spell* spell = nullptr) const;
673
674 virtual float MeleeSpellMissChance(Unit const* victim, WeaponAttackType attType, SpellInfo const* spellInfo) const;
675 virtual SpellMissInfo MeleeSpellHitResult(Unit* victim, SpellInfo const* spellInfo) const;
676 SpellMissInfo MagicSpellHitResult(Unit* victim, SpellInfo const* spellInfo) const;
677 SpellMissInfo SpellHitResult(Unit* victim, SpellInfo const* spellInfo, bool canReflect = false) const;
678 void SendSpellMiss(Unit* target, uint32 spellID, SpellMissInfo missInfo);
679
680 virtual uint32 GetFaction() const = 0;
681 virtual void SetFaction(uint32 /*faction*/) { }
682 FactionTemplateEntry const* GetFactionTemplateEntry() const;
683
684 ReputationRank GetReactionTo(WorldObject const* target) const;
685 static ReputationRank GetFactionReactionTo(FactionTemplateEntry const* factionTemplateEntry, WorldObject const* target);
686
687 bool IsHostileTo(WorldObject const* target) const;
688 bool IsHostileToPlayers() const;
689 bool IsFriendlyTo(WorldObject const* target) const;
690 bool IsNeutralToAll() const;
691
692 // CastSpell's third arg can be a variety of things - check out CastSpellExtraArgs' constructors!
693 SpellCastResult CastSpell(CastSpellTargetArg const& targets, uint32 spellId, CastSpellExtraArgs const& args = { });
694
695 void SendPlayOrphanSpellVisual(ObjectGuid const& target, uint32 spellVisualId, float travelSpeed, bool speedAsTime = false, bool withSourceOrientation = false);
696 void SendPlayOrphanSpellVisual(Position const& targetLocation, uint32 spellVisualId, float travelSpeed, bool speedAsTime = false, bool withSourceOrientation = false);
697 void SendCancelOrphanSpellVisual(uint32 id);
698
699 bool IsValidAttackTarget(WorldObject const* target, SpellInfo const* bySpell = nullptr) const;
700 bool IsValidAssistTarget(WorldObject const* target, SpellInfo const* bySpell = nullptr) const;
701
702 Unit* GetMagicHitRedirectTarget(Unit* victim, SpellInfo const* spellInfo);
703
704 virtual uint32 GetCastSpellXSpellVisualId(SpellInfo const* spellInfo) const;
705
706 template <typename Container>
707 void GetGameObjectListWithEntryInGrid(Container& gameObjectContainer, uint32 entry, float maxSearchRange = 250.0f) const;
708
709 template <typename Container>
710 void GetGameObjectListWithOptionsInGrid(Container& gameObjectContainer, float maxSearchRange, FindGameObjectOptions const& options) const;
711
712 template <typename Container>
713 void GetCreatureListWithEntryInGrid(Container& creatureContainer, uint32 entry, float maxSearchRange = 250.0f) const;
714
715 template <typename Container>
716 void GetCreatureListWithOptionsInGrid(Container& creatureContainer, float maxSearchRange, FindCreatureOptions const& options) const;
717
718 template <typename Container>
719 void GetPlayerListInGrid(Container& playerContainer, float maxSearchRange, bool alive = true) const;
720
721 void DestroyForNearbyPlayers();
722 virtual void UpdateObjectVisibility(bool forced = true);
723 virtual void UpdateObjectVisibilityOnCreate() { UpdateObjectVisibility(true); }
724 virtual void UpdateObjectVisibilityOnDestroy() { DestroyForNearbyPlayers(); }
725 void UpdatePositionData();
726
727 void BuildUpdate(UpdateDataMapType&) override;
728 bool AddToObjectUpdate() override;
729 void RemoveFromObjectUpdate() override;
730
731 //relocation and visibility system functions
732 void AddToNotify(uint16 f) { m_notifyflags |= f;}
733 bool isNeedNotify(uint16 f) const { return (m_notifyflags & f) != 0; }
734 uint16 GetNotifyFlags() const { return m_notifyflags; }
735 void ResetAllNotifies() { m_notifyflags = 0; }
736
737 bool isActiveObject() const { return m_isActive; }
738 void setActive(bool isActiveObject);
739 bool IsFarVisible() const { return m_isFarVisible; }
740 void SetFarVisible(bool on);
741 bool IsVisibilityOverridden() const { return m_visibilityDistanceOverride.has_value(); }
742 void SetVisibilityDistanceOverride(VisibilityDistanceType type);
743 void SetIsStoredInWorldObjectGridContainer(bool apply);
744 bool IsAlwaysStoredInWorldObjectGridContainer() const { return m_isStoredInWorldObjectGridContainer; }
745 bool IsStoredInWorldObjectGridContainer() const;
746
748
749 // Transports
750 TransportBase* GetTransport() const { return m_transport; }
751 float GetTransOffsetX() const { return m_movementInfo.transport.pos.GetPositionX(); }
752 float GetTransOffsetY() const { return m_movementInfo.transport.pos.GetPositionY(); }
753 float GetTransOffsetZ() const { return m_movementInfo.transport.pos.GetPositionZ(); }
754 float GetTransOffsetO() const { return m_movementInfo.transport.pos.GetOrientation(); }
755 Position const& GetTransOffset() const { return m_movementInfo.transport.pos; }
756 uint32 GetTransTime() const { return m_movementInfo.transport.time; }
757 int8 GetTransSeat() const { return m_movementInfo.transport.seat; }
758 virtual ObjectGuid GetTransGUID() const;
759 void SetTransport(TransportBase* t) { m_transport = t; }
760
762
763 virtual float GetStationaryX() const { return GetPositionX(); }
764 virtual float GetStationaryY() const { return GetPositionY(); }
765 virtual float GetStationaryZ() const { return GetPositionZ(); }
766 virtual float GetStationaryO() const { return GetOrientation(); }
767
768 float GetFloorZ() const;
769 virtual float GetCollisionHeight() const { return 0.0f; }
770
771 float GetMapWaterOrGroundLevel(float x, float y, float z, float* ground = nullptr) const;
772 float GetMapHeight(float x, float y, float z, bool vmap = true, float distanceToSearch = 50.0f) const; // DEFAULT_HEIGHT_SEARCH in map.h
773
774 std::string GetDebugInfo() const override;
775
776 // Event handler
778
779 virtual uint16 GetAIAnimKitId() const { return 0; }
780 virtual uint16 GetMovementAnimKitId() const { return 0; }
781 virtual uint16 GetMeleeAnimKitId() const { return 0; }
782
783 // Watcher
784 bool IsPrivateObject() const { return !_privateObjectOwner.IsEmpty(); }
785 ObjectGuid GetPrivateObjectOwner() const { return _privateObjectOwner; }
786 void SetPrivateObjectOwner(ObjectGuid const& owner) { _privateObjectOwner = owner; }
787 bool CheckPrivateObjectOwnerVisibility(WorldObject const* seer) const;
788
789 // Smooth Phasing
790 SmoothPhasing* GetOrCreateSmoothPhasing();
791 SmoothPhasing* GetSmoothPhasing() { return _smoothPhasing.get(); }
792 SmoothPhasing const* GetSmoothPhasing() const { return _smoothPhasing.get(); }
793
794 protected:
795 std::string m_name;
801
802 // transports (gameobjects only)
804
805 virtual void ProcessPositionDataChanged(PositionFullTerrainStatus const& data);
812
813 //these functions are used mostly for Relocate() and Corpse/Player specific stuff...
814 //use them ONLY in LoadFromDB()/Create() funcs and nowhere else!
815 //mapId/instanceId should be set in SetMap() function!
816 void SetLocationMapId(uint32 _mapId) { m_mapId = _mapId; }
817 void SetLocationInstanceId(uint32 _instanceId) { m_InstanceId = _instanceId; }
818
819 virtual bool CanNeverSee(WorldObject const* obj) const;
820 virtual bool CanAlwaysSee([[maybe_unused]] WorldObject const* /*obj*/) const { return false; }
821 virtual bool IsNeverVisibleFor([[maybe_unused]] WorldObject const* seer, [[maybe_unused]] bool allowServersideObjects = false) const { return !IsInWorld() || IsDestroyedObject(); }
822 virtual bool IsAlwaysVisibleFor([[maybe_unused]] WorldObject const* seer) const { return false; }
823 virtual bool IsInvisibleDueToDespawn([[maybe_unused]] WorldObject const* seer) const { return false; }
824 //difference from IsAlwaysVisibleFor: 1. after distance check; 2. use owner or charmer as seer
825 virtual bool IsAlwaysDetectableFor([[maybe_unused]] WorldObject const* seer) const { return false; }
826 private:
827 Map* m_currMap; // current object's Map location
828
829 uint32 m_InstanceId; // in map copy with instance id
831 PhaseShift _suppressedPhaseShift; // contains phases for current area but not applied due to conditions
833
835
837
838 std::unique_ptr<SmoothPhasing> _smoothPhasing;
839
840 virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool incOwnRadius = true, bool incTargetRadius = true) const;
841
842 bool CanDetect(WorldObject const* obj, bool ignoreStealth, bool checkAlert = false) const;
843 bool CanDetectInvisibilityOf(WorldObject const* obj) const;
844 bool CanDetectStealthOf(WorldObject const* obj, bool checkAlert = false) const;
845};
846
847namespace Trinity
848{
849 // Binary predicate to sort WorldObjects based on the distance to a reference WorldObject
851 {
852 public:
853 ObjectDistanceOrderPred(WorldObject const* refObj, bool ascending = true) : _refObj(refObj), _ascending(ascending) { }
854
855 bool operator()(WorldObject const* left, WorldObject const* right) const
856 {
857 return _refObj->GetDistanceOrder(left, right) == _ascending;
858 }
859
860 private:
863 };
864}
865
866#endif
LocaleConstant
Definition: Common.h:48
#define M_PI
Definition: Common.h:115
#define TC_GAME_API
Definition: Define.h:123
uint8_t uint8
Definition: Define.h:144
int8_t int8
Definition: Define.h:140
int32_t int32
Definition: Define.h:138
uint16_t uint16
Definition: Define.h:143
uint32_t uint32
Definition: Define.h:142
uint16 flags
Definition: DisableMgr.cpp:49
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition: Duration.h:32
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition: Duration.h:29
std::string GetDebugInfo()
Definition: Errors.cpp:157
#define ASSERT
Definition: Errors.h:68
ZLiquidStatus
Definition: MapDefines.h:125
TempSummonType
Definition: ObjectDefines.h:62
@ TEMPSUMMON_MANUAL_DESPAWN
Definition: ObjectDefines.h:70
GOSummonType
Definition: ObjectDefines.h:82
@ GO_SUMMON_TIMED_OR_CORPSE_DESPAWN
Definition: ObjectDefines.h:83
#define CONTACT_DISTANCE
Definition: ObjectDefines.h:23
VisibilityDistanceType
Definition: ObjectDefines.h:50
TypeID
Definition: ObjectGuid.h:34
@ TYPEID_AREATRIGGER
Definition: ObjectGuid.h:46
@ TYPEID_DYNAMICOBJECT
Definition: ObjectGuid.h:44
@ TYPEID_GAMEOBJECT
Definition: ObjectGuid.h:43
@ TYPEID_UNIT
Definition: ObjectGuid.h:40
@ TYPEID_CORPSE
Definition: ObjectGuid.h:45
@ TYPEID_SCENEOBJECT
Definition: ObjectGuid.h:47
@ TYPEID_CONVERSATION
Definition: ObjectGuid.h:48
@ TYPEID_PLAYER
Definition: ObjectGuid.h:41
@ TYPEMASK_ITEM
Definition: ObjectGuid.h:56
@ TYPEMASK_UNIT
Definition: ObjectGuid.h:60
@ TYPEMASK_WORLDOBJECT
Definition: ObjectGuid.h:71
float const DEFAULT_COLLISION_HEIGHT
Definition: Object.h:147
std::unordered_map< Player *, UpdateData > UpdateDataMapType
Definition: Object.h:79
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
Action
Definition: Corpse.h:53
bool HasFlag(FLAG_TYPE flag) const
Definition: Object.h:441
void AddFlag(FLAG_TYPE flag)
Definition: Object.h:442
T_FLAGS GetFlags() const
Definition: Object.h:440
void DelFlag(FLAG_TYPE flag)
Definition: Object.h:443
T_VALUES GetValue(FLAG_TYPE flag) const
Definition: Object.h:445
T_VALUES m_values[ARRAY_SIZE]
Definition: Object.h:450
void AddValue(FLAG_TYPE flag, T_VALUES value)
Definition: Object.h:447
void SetValue(FLAG_TYPE flag, T_VALUES value)
Definition: Object.h:446
Definition: Item.h:170
Definition: Map.h:189
static ObjectGuid const Empty
Definition: ObjectGuid.h:274
Definition: Object.h:150
Trinity::unique_weak_ptr< Object > GetWeakPtr() const
Definition: Object.h:277
void SetDynamicFlag(uint32 flag)
Definition: Object.h:169
Corpse * ToCorpse()
Definition: Object.h:239
Object(Object &&right)=delete
uint16 m_objectType
Definition: Object.h:401
static Creature * ToCreature(Object *o)
Definition: Object.h:219
static Player const * ToPlayer(Object const *o)
Definition: Object.h:214
Player const * ToPlayer() const
Definition: Object.h:216
static Item const * ToItem(Object const *o)
Definition: Object.h:208
bool IsPlayer() const
Definition: Object.h:212
float GetObjectScale() const
Definition: Object.h:164
static SceneObject const * ToSceneObject(Object const *o)
Definition: Object.h:256
void ClearDynamicUpdateFieldValues(UF::DynamicUpdateFieldSetter< T > setter)
Definition: Object.h:329
bool m_isNewObject
Definition: Object.h:415
Trinity::unique_trackable_ptr< Object > m_scriptRef
Definition: Object.h:419
DynamicObject * ToDynObject()
Definition: Object.h:245
static Unit * ToUnit(Object *o)
Definition: Object.h:225
Player * ToPlayer()
Definition: Object.h:215
bool IsDestroyedObject() const
Definition: Object.h:195
ObjectGuid m_guid
Definition: Object.h:413
UF::DynamicUpdateFieldSetter< T >::insert_result InsertDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter< T > setter, uint32 index)
Definition: Object.h:315
static GameObject * ToGameObject(Object *o)
Definition: Object.h:231
ObjectGuid const & GetGUID() const
Definition: Object.h:160
static Corpse const * ToCorpse(Object const *o)
Definition: Object.h:238
bool IsInWorld() const
Definition: Object.h:154
static Conversation * ToConversation(Object *o)
Definition: Object.h:261
UF::UpdateField< UF::ObjectData, 0, TYPEID_OBJECT > m_objectData
Definition: Object.h:267
SceneObject const * ToSceneObject() const
Definition: Object.h:258
WorldObject const * ToWorldObject() const
Definition: Object.h:204
virtual std::string GetNameForLocaleIdx(LocaleConstant locale) const =0
bool HasDynamicFlag(uint32 flag) const
Definition: Object.h:168
bool IsCorpse() const
Definition: Object.h:236
void RemoveUpdateFieldFlagValue(UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type flag)
Definition: Object.h:301
Conversation * ToConversation()
Definition: Object.h:263
virtual bool hasQuest(uint32) const
Definition: Object.h:192
bool IsUnit() const
Definition: Object.h:224
TypeID GetTypeId() const
Definition: Object.h:173
SceneObject * ToSceneObject()
Definition: Object.h:257
bool m_isDestroyedObject
Definition: Object.h:416
static Conversation const * ToConversation(Object const *o)
Definition: Object.h:262
WorldObject * ToWorldObject()
Definition: Object.h:203
virtual bool AddToObjectUpdate()=0
UF::DynamicUpdateFieldSetter< T >::insert_result AddDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter< T > setter)
Definition: Object.h:308
bool IsItem() const
Definition: Object.h:206
CreateObjectBits m_updateFlag
Definition: Object.h:404
bool isType(uint16 mask) const
Definition: Object.h:174
Object & operator=(Object &&right)=delete
void SetUpdateFieldFlagValue(UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type flag)
Definition: Object.h:294
virtual void BuildValuesCreate(ByteBuffer *data, Player const *target) const =0
static WorldObject const * ToWorldObject(Object const *o)
Definition: Object.h:202
Object & operator=(Object const &right)=delete
bool IsGameObject() const
Definition: Object.h:230
Item const * ToItem() const
Definition: Object.h:210
Conversation const * ToConversation() const
Definition: Object.h:264
AreaTrigger * ToAreaTrigger()
Definition: Object.h:251
static WorldObject * ToWorldObject(Object *o)
Definition: Object.h:201
void SetUpdateFieldValue(UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type value)
Definition: Object.h:287
GameObject * ToGameObject()
Definition: Object.h:233
static AreaTrigger const * ToAreaTrigger(Object const *o)
Definition: Object.h:250
GameObject const * ToGameObject() const
Definition: Object.h:234
Corpse const * ToCorpse() const
Definition: Object.h:240
Unit const * ToUnit() const
Definition: Object.h:228
void ReplaceAllDynamicFlags(uint32 flag)
Definition: Object.h:171
static DynamicObject const * ToDynObject(Object const *o)
Definition: Object.h:244
static GameObject const * ToGameObject(Object const *o)
Definition: Object.h:232
static Item * ToItem(Object *o)
Definition: Object.h:207
uint32 GetEntry() const
Definition: Object.h:161
virtual Loot * GetLootForPlayer(Player const *player) const
Definition: Object.h:279
uint32 GetDynamicFlags() const
Definition: Object.h:167
bool IsCreature() const
Definition: Object.h:218
bool IsConversation() const
Definition: Object.h:260
UF::UpdateFieldHolder m_values
Definition: Object.h:266
Creature * ToCreature()
Definition: Object.h:221
bool IsSceneObject() const
Definition: Object.h:254
void SetUpdateFieldStatValue(UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type value)
Definition: Object.h:344
Item * ToItem()
Definition: Object.h:209
void RemoveDynamicFlag(uint32 flag)
Definition: Object.h:170
virtual void BuildValuesUpdate(ByteBuffer *data, Player const *target) const =0
void SetIsNewObject(bool enable)
Definition: Object.h:194
virtual void BuildUpdate(UpdateDataMapType &)
Definition: Object.h:197
void RemoveOptionalUpdateFieldValue(UF::OptionalUpdateFieldSetter< T > setter)
Definition: Object.h:336
bool IsWorldObject() const
Definition: Object.h:200
static Unit const * ToUnit(Object const *o)
Definition: Object.h:226
static AreaTrigger * ToAreaTrigger(Object *o)
Definition: Object.h:249
void RemoveDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter< T > setter, uint32 index)
Definition: Object.h:322
static Creature const * ToCreature(Object const *o)
Definition: Object.h:220
virtual void RemoveFromObjectUpdate()=0
void DoWithSuppressingObjectUpdates(Action &&action)
Definition: Object.h:381
static Corpse * ToCorpse(Object *o)
Definition: Object.h:237
bool IsDynObject() const
Definition: Object.h:242
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:159
bool m_inWorld
Definition: Object.h:414
Creature const * ToCreature() const
Definition: Object.h:222
AreaTrigger const * ToAreaTrigger() const
Definition: Object.h:252
void SetEntry(uint32 entry)
Definition: Object.h:162
static SceneObject * ToSceneObject(Object *o)
Definition: Object.h:255
virtual void SetObjectScale(float scale)
Definition: Object.h:165
virtual bool hasInvolvedQuest(uint32) const
Definition: Object.h:193
void SetDestroyedObject(bool destroyed)
Definition: Object.h:196
void ForceUpdateFieldChange(UF::UpdateFieldSetter< T > const &)
Definition: Object.h:270
bool IsAreaTrigger() const
Definition: Object.h:248
Object(Object const &right)=delete
TypeID m_objectTypeId
Definition: Object.h:403
DynamicObject const * ToDynObject() const
Definition: Object.h:246
static DynamicObject * ToDynObject(Object *o)
Definition: Object.h:243
bool m_objectUpdated
Definition: Object.h:410
void ApplyModUpdateFieldValue(UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type mod, bool apply)
Definition: Object.h:351
static Player * ToPlayer(Object *o)
Definition: Object.h:213
void ApplyPercentModUpdateFieldValue(UF::UpdateFieldSetter< T > setter, float percent, bool apply)
Definition: Object.h:365
Unit * ToUnit()
Definition: Object.h:227
Definition: Spell.h:255
WorldObject const * _refObj
Definition: Object.h:861
ObjectDistanceOrderPred(WorldObject const *refObj, bool ascending=true)
Definition: Object.h:853
bool operator()(WorldObject const *left, WorldObject const *right) const
Definition: Object.h:855
Trinity::unique_trackable_ptr companion class, replicating what std::weak_ptr is to std::shared_ptr.
Definition: Unit.h:627
int8 GetTransSeat() const
Definition: Object.h:757
bool InSamePhase(PhaseShift const &phaseShift) const
Definition: Object.h:527
float m_staticFloorZ
Definition: Object.h:808
virtual uint16 GetMeleeAnimKitId() const
Definition: Object.h:781
ZLiquidStatus m_liquidStatus
Definition: Object.h:810
PhaseShift const & GetSuppressedPhaseShift() const
Definition: Object.h:526
virtual uint16 GetMovementAnimKitId() const
Definition: Object.h:780
virtual bool IsInvisibleDueToDespawn(WorldObject const *seer) const
Definition: Object.h:823
Map * GetMap() const
Definition: Object.h:624
ZLiquidStatus GetLiquidStatus() const
Definition: Object.h:550
SmoothPhasing const * GetSmoothPhasing() const
Definition: Object.h:792
std::string m_name
Definition: Object.h:795
virtual ObjectGuid GetCreatorGUID() const =0
virtual float GetCollisionHeight() const
Definition: Object.h:769
virtual bool IsAlwaysVisibleFor(WorldObject const *seer) const
Definition: Object.h:822
Map * FindMap() const
Definition: Object.h:625
virtual float GetStationaryO() const
Definition: Object.h:766
bool isNeedNotify(uint16 f) const
Definition: Object.h:733
uint16 m_notifyflags
Definition: Object.h:834
virtual uint8 GetLevelForTarget(WorldObject const *) const
Definition: Object.h:598
virtual void UpdateObjectVisibilityOnDestroy()
Definition: Object.h:724
void ResetAllNotifies()
Definition: Object.h:735
void SetLocationInstanceId(uint32 _instanceId)
Definition: Object.h:817
uint32 m_InstanceId
Definition: Object.h:829
ObjectGuid GetPrivateObjectOwner() const
Definition: Object.h:785
uint32 m_areaId
Definition: Object.h:807
Position const & GetTransOffset() const
Definition: Object.h:755
virtual bool IsAlwaysDetectableFor(WorldObject const *seer) const
Definition: Object.h:825
bool IsVisibilityOverridden() const
Definition: Object.h:741
virtual ObjectGuid GetCharmerOrOwnerGUID() const
Definition: Object.h:652
float GetTransOffsetX() const
Definition: Object.h:751
uint32 LastUsedScriptID
Definition: Object.h:747
PhaseShift & GetPhaseShift()
Definition: Object.h:523
FlaggedValuesArray32< int32, uint64, InvisibilityType, TOTAL_INVISIBILITY_TYPES > m_invisibility
Definition: Object.h:616
void SetLocationMapId(uint32 _mapId)
Definition: Object.h:816
ZoneScript * GetZoneScript() const
Definition: Object.h:630
virtual void UpdateObjectVisibilityOnCreate()
Definition: Object.h:723
bool isActiveObject() const
Definition: Object.h:737
PhaseShift _phaseShift
Definition: Object.h:830
TransportBase * GetTransport() const
Definition: Object.h:750
PhaseShift const & GetPhaseShift() const
Definition: Object.h:524
WmoLocation const * GetCurrentWmo() const
Definition: Object.h:551
bool GetDistanceOrder(WorldObject const *obj1, WorldObject const *obj2, bool is3D=true) const
Definition: Object.cpp:1215
bool IsPrivateObject() const
Definition: Object.h:784
uint32 GetInstanceId() const
Definition: Object.h:521
FlaggedValuesArray32< int32, uint64, InvisibilityType, TOTAL_INVISIBILITY_TYPES > m_invisibilityDetect
Definition: Object.h:617
uint16 GetNotifyFlags() const
Definition: Object.h:734
bool IsOutdoors() const
Definition: Object.h:549
void SetPrivateObjectOwner(ObjectGuid const &owner)
Definition: Object.h:786
ZoneScript * m_zoneScript
Definition: Object.h:800
SmoothPhasing * GetSmoothPhasing()
Definition: Object.h:791
std::string GetNameForLocaleIdx(LocaleConstant) const override
Definition: Object.h:558
float GetTransOffsetY() const
Definition: Object.h:752
PhaseShift _suppressedPhaseShift
Definition: Object.h:831
virtual uint16 GetAIAnimKitId() const
Definition: Object.h:779
std::string const & GetName() const
Definition: Object.h:555
bool IsFarVisible() const
Definition: Object.h:739
virtual float GetStationaryX() const
Definition: Object.h:763
float GetTransOffsetZ() const
Definition: Object.h:753
int32 _dbPhase
Definition: Object.h:832
bool InSamePhase(WorldObject const *obj) const
Definition: Object.h:531
uint32 GetTransTime() const
Definition: Object.h:756
bool const m_isStoredInWorldObjectGridContainer
Definition: Object.h:799
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPES > m_stealthDetect
Definition: Object.h:614
bool m_isActive
Definition: Object.h:796
PhaseShift & GetSuppressedPhaseShift()
Definition: Object.h:525
void SetName(std::string newname)
Definition: Object.h:556
void AddToNotify(uint16 f)
Definition: Object.h:732
bool m_outdoors
Definition: Object.h:809
std::unique_ptr< SmoothPhasing > _smoothPhasing
Definition: Object.h:838
EventProcessor m_Events
Definition: Object.h:777
TransportBase * m_transport
Definition: Object.h:803
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPES > m_stealth
Definition: Object.h:613
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPES > m_serverSideVisibilityDetect
Definition: Object.h:620
virtual uint32 GetFaction() const =0
static bool InSamePhase(WorldObject const *a, WorldObject const *b)
Definition: Object.h:535
Optional< float > m_visibilityDistanceOverride
Definition: Object.h:798
ObjectGuid _privateObjectOwner
Definition: Object.h:836
bool IsInBetween(WorldObject const *obj1, WorldObject const *obj2, float size=0) const
Definition: Object.h:588
uint32 GetAreaId() const
Definition: Object.h:546
float GetTransOffsetO() const
Definition: Object.h:754
virtual ObjectGuid GetOwnerGUID() const =0
uint32 GetZoneId() const
Definition: Object.h:545
MovementInfo m_movementInfo
Definition: Object.h:761
Optional< WmoLocation > m_currentWmo
Definition: Object.h:811
uint32 m_zoneId
Definition: Object.h:806
bool IsAlwaysStoredInWorldObjectGridContainer() const
Definition: Object.h:744
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPES > m_serverSideVisibility
Definition: Object.h:619
bool m_isFarVisible
Definition: Object.h:797
void GetZoneAndAreaId(uint32 &zoneid, uint32 &areaid) const
Definition: Object.h:547
virtual bool IsNeverVisibleFor(WorldObject const *seer, bool allowServersideObjects=false) const
Definition: Object.h:821
virtual float GetStationaryY() const
Definition: Object.h:764
virtual void SetFaction(uint32)
Definition: Object.h:681
virtual float GetCombatReach() const
Definition: Object.h:514
virtual float GetStationaryZ() const
Definition: Object.h:765
void SetDBPhase(int32 p)
Definition: Object.h:543
Map * m_currMap
Definition: Object.h:827
virtual bool CanAlwaysSee(WorldObject const *) const
Definition: Object.h:820
int32 GetDBPhase() const
Definition: Object.h:540
void SetTransport(TransportBase *t)
Definition: Object.h:759
void apply(T *val)
Definition: ByteConverter.h:41
Definition: Object.h:109
constexpr std::size_t size()
Definition: UpdateField.h:796
DynamicUpdateFieldSetter< T >::insert_result AddDynamicUpdateFieldValue(DynamicUpdateFieldSetter< T > &setter)
Definition: Object.h:117
UpdateFieldFlag
Definition: UpdateField.h:34
void RemoveDynamicUpdateFieldValue(DynamicUpdateFieldSetter< T > &setter, uint32 index)
Definition: Object.h:129
void ClearDynamicUpdateFieldValues(DynamicUpdateFieldSetter< T > &setter)
Definition: Object.h:135
void RemoveOptionalUpdateFieldValue(OptionalUpdateFieldSetter< T > &setter)
Definition: Object.h:141
bool SetUpdateFieldValue(UpdateFieldSetter< T > &setter, typename UpdateFieldSetter< T >::value_type &&value)
Definition: Object.h:111
DynamicUpdateFieldSetter< T >::insert_result InsertDynamicUpdateFieldValue(DynamicUpdateFieldSetter< T > &setter, uint32 index)
Definition: Object.h:123
void Update(VignetteData &vignette, WorldObject const *owner)
Definition: Vignette.cpp:90
bool Rotation
Definition: Object.h:93
bool Stationary
Definition: Object.h:88
void Clear()
Definition: Object.h:102
bool MovementUpdate
Definition: Object.h:86
bool AnimKit
Definition: Object.h:92
bool Vehicle
Definition: Object.h:91
bool SceneObject
Definition: Object.h:98
bool PlayHoverAnim
Definition: Object.h:85
bool NoBirthAnim
Definition: Object.h:83
bool ThisIsYou
Definition: Object.h:97
bool ActivePlayer
Definition: Object.h:99
bool GameObject
Definition: Object.h:95
bool ServerTime
Definition: Object.h:90
bool CombatVictim
Definition: Object.h:89
bool AreaTrigger
Definition: Object.h:94
bool EnablePortals
Definition: Object.h:84
bool Conversation
Definition: Object.h:100
bool SmoothPhasing
Definition: Object.h:96
bool MovementTransport
Definition: Object.h:87
Optional< std::string_view > StringId
Definition: Object.h:457
Optional< ObjectGuid > CreatorGuid
Definition: Object.h:470
Optional< bool > IsSummon
Definition: Object.h:461
bool IgnoreNotOwnedPrivateObjects
Definition: Object.h:464
bool IgnorePrivateObjects
Definition: Object.h:465
Optional< uint32 > AuraSpellId
Definition: Object.h:467
Optional< ObjectGuid > PrivateObjectOwnerGuid
Definition: Object.h:472
Optional< uint32 > CreatureId
Definition: Object.h:456
Optional< ObjectGuid > DemonCreatorGuid
Definition: Object.h:471
Optional< bool > IsAlive
Definition: Object.h:459
Optional< bool > IsInCombat
Definition: Object.h:460
Optional< ObjectGuid > OwnerGuid
Definition: Object.h:468
Optional< ObjectGuid > CharmerGuid
Definition: Object.h:469
bool IgnoreNotOwnedPrivateObjects
Definition: Object.h:484
Optional< ObjectGuid > OwnerGuid
Definition: Object.h:487
Optional< std::string_view > StringId
Definition: Object.h:478
Optional< GameobjectTypes > GameObjectType
Definition: Object.h:489
Optional< uint32 > GameObjectId
Definition: Object.h:477
Optional< ObjectGuid > PrivateObjectOwnerGuid
Definition: Object.h:488
bool IgnorePrivateObjects
Definition: Object.h:485
Optional< bool > IsSummon
Definition: Object.h:480
Optional< bool > IsSpawned
Definition: Object.h:481
Definition: Loot.h:281
void operator()(Object *) const
Definition: Object.h:418
constexpr void GetPosition(float &x, float &y) const
Definition: Position.h:81
std::conditional_t< std::is_base_of_v< HasChangesMaskTag, T >, MutableFieldReference< T, true >, T & > insert_result
Definition: UpdateField.h:146
void RemoveValue(std::size_t index)
Definition: UpdateField.h:186
insert_result InsertValue(std::size_t index)
Definition: UpdateField.h:174
UpdateField< uint32, 0, 2 > DynamicFlags
Definition: UpdateFields.h:53
UpdateField< int32, 0, 1 > EntryID
Definition: UpdateFields.h:51
UpdateField< float, 0, 3 > Scale
Definition: UpdateFields.h:55
bool SetValue(T value)
Definition: UpdateField.h:105