Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
Object.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef SF_OBJECT_H
7#define SF_OBJECT_H
8
9#include "Common.h"
10#include "GridReference.h"
11#include "Map.h"
13#include "ObjectDefines.h"
14#include "UpdateMask.h"
15
16#include <set>
17#include <sstream>
18#include <string>
19
20#define CONTACT_DISTANCE 0.5f
21#define INTERACTION_DISTANCE 5.0f
22#define ATTACK_DISTANCE 5.0f
23#define MAX_VISIBILITY_DISTANCE SIZE_OF_GRIDS // max distance for visible objects
24#define SIGHT_RANGE_UNIT 50.0f
25#define DEFAULT_VISIBILITY_DISTANCE 90.0f // default visible distance, 90 yards on continents
26#define DEFAULT_VISIBILITY_INSTANCE 170.0f // default visible distance in instances, 170 yards
27#define DEFAULT_VISIBILITY_BGARENAS 533.0f // default visible distance in BG/Arenas, roughly 533 yards
28
29#define DEFAULT_WORLD_OBJECT_SIZE 0.388999998569489f // player size, also currently used (correctly?) for any non Unit world objects
30#define DEFAULT_COMBAT_REACH 1.5f
31#define MIN_MELEE_REACH 2.0f
32#define NOMINAL_MELEE_RANGE 5.0f
33#define MELEE_RANGE (NOMINAL_MELEE_RANGE - MIN_MELEE_REACH * 2) //center to center for players
34
48
63
65
67{
68 TEMPSUMMON_TIMED_OR_DEAD_DESPAWN = 1, // despawns after a specified time OR when the creature disappears
69 TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN = 2, // despawns after a specified time OR when the creature dies
70 TEMPSUMMON_TIMED_DESPAWN = 3, // despawns after a specified time
71 TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT = 4, // despawns after a specified time after the creature is out of combat
72 TEMPSUMMON_CORPSE_DESPAWN = 5, // despawns instantly after death
73 TEMPSUMMON_CORPSE_TIMED_DESPAWN = 6, // despawns after a specified time after death
74 TEMPSUMMON_DEAD_DESPAWN = 7, // despawns when the creature disappears
75 TEMPSUMMON_MANUAL_DESPAWN = 8 // despawns when UnSummon() is called
76};
77
79{
80 PHASEMASK_NORMAL = 0x00000001,
81 PHASEMASK_ANYWHERE = 0xFFFFFFFF
82};
83
91
92class Corpse;
93class Creature;
94class CreatureAI;
95class DynamicObject;
96class GameObject;
97class InstanceScript;
98class Player;
99class TempSummon;
100class Transport;
101class Unit;
102class UpdateData;
103class WorldObject;
104class WorldPacket;
105class ZoneScript;
106
108
110{
111public:
112 virtual ~Object();
113
114 bool IsInWorld() const { return m_inWorld; }
115
116 virtual void AddToWorld();
117 virtual void RemoveFromWorld();
118
119 uint64 GetGUID() const { return GetUInt64Value(0); }
123 ObjectGuid GetObjectGUID() const { return static_cast<ObjectGuid>(GetGUID()); }
124 const ByteBuffer& GetPackGUID() const { return m_PackGUID; }
127
129 virtual void SetObjectScale(float scale) { SetFloatValue(OBJECT_FIELD_SCALE, scale); }
130
131 TypeID GetTypeId() const { return m_objectTypeId; }
132 bool isType(uint16 mask) const { return (mask & m_objectType); }
133
134 virtual void BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const;
135 void SendUpdateToPlayer(Player* player);
136
137 void BuildValuesUpdateBlockForPlayer(UpdateData* data, Player* target) const;
138 void BuildOutOfRangeUpdateBlock(UpdateData* data) const;
139
140 virtual void DestroyForPlayer(Player* target, bool onDeath = false) const;
141 void SendDestroyObject(Player* target, ObjectGuid Guid, bool onDeath = false) const;
142
143 int32 GetInt32Value(uint16 index) const;
144 uint32 GetUInt32Value(uint16 index) const;
145 uint64 GetUInt64Value(uint16 index) const;
146 float GetFloatValue(uint16 index) const;
147 uint8 GetByteValue(uint16 index, uint8 offset) const;
148 uint16 GetUInt16Value(uint16 index, uint8 offset) const;
149 uint32 GetDynamicUInt32Value(uint32 tab, uint16 index) const;
150
151 void SetInt32Value(uint16 index, int32 value);
152 void SetUInt32Value(uint16 index, uint32 value);
153 void UpdateUInt32Value(uint16 index, uint32 value);
154 void SetUInt64Value(uint16 index, uint64 value);
155 void SetFloatValue(uint16 index, float value);
156 void SetByteValue(uint16 index, uint8 offset, uint8 value);
157 void SetUInt16Value(uint16 index, uint8 offset, uint16 value);
158 void SetInt16Value(uint16 index, uint8 offset, int16 value) { SetUInt16Value(index, offset, (uint16)value); }
159 void SetStatFloatValue(uint16 index, float value);
160 void SetStatInt32Value(uint16 index, int32 value);
161 void SetDynamicUInt32Value(uint32 tab, uint16 index, uint32 value);
162
163 bool AddUInt64Value(uint16 index, uint64 value);
164 bool RemoveUInt64Value(uint16 index, uint64 value);
165
166 void ApplyModUInt32Value(uint16 index, int32 val, bool apply);
167 void ApplyModInt32Value(uint16 index, int32 val, bool apply);
168 void ApplyModPositiveFloatValue(uint16 index, float val, bool apply);
169 void ApplyModSignedFloatValue(uint16 index, float val, bool apply);
170 void ApplyPercentModFloatValue(uint16 index, float val, bool apply);
171
172 void SetFlag(uint16 index, uint32 newFlag);
173 void RemoveFlag(uint16 index, uint32 oldFlag);
174 void ToggleFlag(uint16 index, uint32 flag);
175 bool HasFlag(uint16 index, uint32 flag) const;
176 void ApplyModFlag(uint16 index, uint32 flag, bool apply);
177
178 void SetByteFlag(uint16 index, uint8 offset, uint8 newFlag);
179 void RemoveByteFlag(uint16 index, uint8 offset, uint8 newFlag);
180 void ToggleByteFlag(uint16 index, uint8 offset, uint8 flag);
181 bool HasByteFlag(uint16 index, uint8 offset, uint8 flag) const;
182
183 void SetFlag64(uint16 index, uint64 newFlag);
184 void RemoveFlag64(uint16 index, uint64 oldFlag);
185 void ToggleFlag64(uint16 index, uint64 flag);
186 bool HasFlag64(uint16 index, uint64 flag) const;
187 void ApplyModFlag64(uint16 index, uint64 flag, bool apply);
188
189 void ClearUpdateMask(bool remove);
190
192
193 virtual bool hasQuest(uint32 /* quest_id */) const { return false; }
194 virtual bool hasInvolvedQuest(uint32 /* quest_id */) const { return false; }
197
200
201 // FG: some hacky helpers
203
204 Player* ToPlayer() { if (GetTypeId() == TypeID::TYPEID_PLAYER) return reinterpret_cast<Player*>(this); else return NULL; }
205 Player const* ToPlayer() const { if (GetTypeId() == TypeID::TYPEID_PLAYER) return reinterpret_cast<Player const*>(this); else return NULL; }
206
207 Creature* ToCreature() { if (GetTypeId() == TypeID::TYPEID_UNIT) return reinterpret_cast<Creature*>(this); else return NULL; }
208 Creature const* ToCreature() const { if (GetTypeId() == TypeID::TYPEID_UNIT) return reinterpret_cast<Creature const*>(this); else return NULL; }
209
210 Unit* ToUnit() { if (isType(TYPEMASK_UNIT)) return reinterpret_cast<Unit*>(this); else return NULL; }
211 Unit const* ToUnit() const { if (isType(TYPEMASK_UNIT)) return reinterpret_cast<Unit const*>(this); else return NULL; }
212
213 GameObject* ToGameObject() { if (GetTypeId() == TypeID::TYPEID_GAMEOBJECT) return reinterpret_cast<GameObject*>(this); else return NULL; }
214 GameObject const* ToGameObject() const { if (GetTypeId() == TypeID::TYPEID_GAMEOBJECT) return reinterpret_cast<GameObject const*>(this); else return NULL; }
215
216 Corpse* ToCorpse() { if (GetTypeId() == TypeID::TYPEID_CORPSE) return reinterpret_cast<Corpse*>(this); else return NULL; }
217 Corpse const* ToCorpse() const { if (GetTypeId() == TypeID::TYPEID_CORPSE) return reinterpret_cast<Corpse const*>(this); else return NULL; }
218
219 DynamicObject* ToDynObject() { if (GetTypeId() == TypeID::TYPEID_DYNAMICOBJECT) return reinterpret_cast<DynamicObject*>(this); else return NULL; }
220 DynamicObject const* ToDynObject() const { if (GetTypeId() == TypeID::TYPEID_DYNAMICOBJECT) return reinterpret_cast<DynamicObject const*>(this); else return NULL; }
221
222 AreaTrigger* ToAreaTrigger() { if (GetTypeId() == TypeID::TYPEID_AREATRIGGER) return reinterpret_cast<AreaTrigger*>(this); else return NULL; }
223 AreaTrigger const* ToAreaTrigger() const { if (GetTypeId() == TypeID::TYPEID_AREATRIGGER) return reinterpret_cast<AreaTrigger const*>(this); else return NULL; }
224
225protected:
226 Object();
227
228 void _InitValues();
229 void _Create(uint32 guidlow, uint32 entry, HighGuid guidhigh);
230 std::string _ConcatFields(uint16 startIndex, uint16 size) const;
231 void _LoadIntoDataField(std::string const& data, uint32 startOffset, uint32 count);
232
233 uint32 GetUpdateFieldData(Player const* target, uint32*& flags) const;
234
235 void BuildMovementUpdate(ByteBuffer* data, uint16 flags) const;
236 void BuildDynamicValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) const;
237 virtual void BuildValuesUpdate(uint8 updatetype, ByteBuffer* data, Player* target) const;
238
239 std::vector<uint32*> m_dynamicTab;
240 std::vector<bool*> m_dynamicChange;
241
243
246
247 union
248 {
252 };
253
255
257
259
261
262private:
264
266
267 // for output helpfull error messages from asserts
268 bool PrintIndexError(uint32 index, bool set) const;
269 Object(Object const& right) = delete;
270 Object& operator=(Object const& right) = delete;
271};
272
274{
276 {
277 explicit PositionXYZStreamer(Position& pos) : m_pos(&pos) { }
279 };
280
282 {
283 explicit PositionXYZOStreamer(Position& pos) : m_pos(&pos) { }
285 };
286
290 // Better to limit access to m_orientation field, but this will be hard to achieve with many scripts using array initialization for this structure
291 //private:
293 //public:
294
295 bool operator==(Position const& a);
296
297 inline bool operator!=(Position const& a)
298 {
299 return !(operator==(a));
300 }
301
302 void Relocate(float x, float y)
303 {
304 m_positionX = x; m_positionY = y;
305 }
306 void Relocate(float x, float y, float z)
307 {
308 m_positionX = x; m_positionY = y; m_positionZ = z;
309 }
310 void Relocate(float x, float y, float z, float orientation)
311 {
312 m_positionX = x; m_positionY = y; m_positionZ = z; SetOrientation(orientation);
313 }
322 void RelocateOffset(Position const& offset);
323 void SetOrientation(float orientation)
324 {
325 m_orientation = NormalizeOrientation(orientation);
326 }
327
328 float GetPositionX() const { return m_positionX; }
329 float GetPositionY() const { return m_positionY; }
330 float GetPositionZ() const { return m_positionZ; }
331 float GetOrientation() const { return m_orientation; }
332
333 void GetPosition(float& x, float& y) const
334 {
335 x = m_positionX; y = m_positionY;
336 }
337 void GetPosition(float& x, float& y, float& z) const
338 {
339 x = m_positionX; y = m_positionY; z = m_positionZ;
340 }
341 void GetPosition(float& x, float& y, float& z, float& o) const
342 {
344 }
345 void GetPosition(Position* pos) const
346 {
347 if (pos)
349 }
350
359
360 bool IsPositionValid() const;
361
362 float GetExactDist2dSq(float x, float y) const
363 {
364 float dx = m_positionX - x; float dy = m_positionY - y; return dx * dx + dy * dy;
365 }
366 float GetExactDist2d(const float x, const float y) const
367 {
368 return sqrt(GetExactDist2dSq(x, y));
369 }
370 float GetExactDist2dSq(Position const* pos) const
371 {
372 float dx = m_positionX - pos->m_positionX; float dy = m_positionY - pos->m_positionY; return dx * dx + dy * dy;
373 }
374 float GetExactDist2d(Position const* pos) const
375 {
376 return sqrt(GetExactDist2dSq(pos));
377 }
378 float GetExactDistSq(float x, float y, float z) const
379 {
380 float dz = m_positionZ - z; return GetExactDist2dSq(x, y) + dz * dz;
381 }
382 float GetExactDist(float x, float y, float z) const
383 {
384 return sqrt(GetExactDistSq(x, y, z));
385 }
386 float GetExactDistSq(Position const* pos) const
387 {
388 float dx = m_positionX - pos->m_positionX; float dy = m_positionY - pos->m_positionY; float dz = m_positionZ - pos->m_positionZ; return dx * dx + dy * dy + dz * dz;
389 }
390 float GetExactDist(Position const* pos) const
391 {
392 return sqrt(GetExactDistSq(pos));
393 }
394
395 void GetPositionOffsetTo(Position const& endPos, Position& retOffset) const;
396
397 float GetAngle(Position const* pos) const;
398 float GetAngle(float x, float y) const;
399 float GetRelativeAngle(Position const* pos) const
400 {
401 return GetAngle(pos) - m_orientation;
402 }
403 float GetRelativeAngle(float x, float y) const { return GetAngle(x, y) - m_orientation; }
404 void GetSinCos(float x, float y, float& vsin, float& vcos) const;
405
406 bool IsInDist2d(float x, float y, float dist) const
407 {
408 return GetExactDist2dSq(x, y) < dist * dist;
409 }
410 bool IsInDist2d(Position const* pos, float dist) const
411 {
412 return GetExactDist2dSq(pos) < dist * dist;
413 }
414 bool IsInDist(float x, float y, float z, float dist) const
415 {
416 return GetExactDistSq(x, y, z) < dist * dist;
417 }
418 bool IsInDist(Position const* pos, float dist) const
419 {
420 return GetExactDistSq(pos) < dist * dist;
421 }
422 bool HasInArc(float arcangle, Position const* pos, float border = 2.0f) const;
423 bool HasInLine(WorldObject const* target, float width) const;
424 std::string ToString() const;
425
426 // modulos a radian orientation to the range of 0..2PI
427 static float NormalizeOrientation(float o)
428 {
429 // fmod only supports positive numbers. Thus we have
430 // to emulate negative numbers
431 if (o < 0)
432 {
433 float mod = o * -1;
434 mod = fmod(mod, 2.0f * static_cast<float>(M_PI));
435 mod = -mod + 2.0f * static_cast<float>(M_PI);
436 return mod;
437 }
438 return fmod(o, 2.0f * static_cast<float>(M_PI));
439 }
440};
445
447{
448 // common
454
455 // transport
457 {
458 void Reset()
459 {
460 guid = 0;
461 pos.Relocate(0.0f, 0.0f, 0.0f, 0.0f);
462 seat = -1;
463 time = 0;
464 time2 = 0;
465 time3 = 0;
466 }
467
475
476 // swimming/flying
477 float pitch;
478
479 // jumping
480 struct JumpInfo
481 {
482 void Reset()
483 {
484 fallTime = 0;
485 zspeed = sinAngle = cosAngle = xyspeed = 0.0f;
486 }
487
489
492
493 // spline
495
497 guid(0), flags(0), flags2(0), time(0), pitch(0.0f), splineElevation(0.0f)
498 {
499 pos.Relocate(0.0f, 0.0f, 0.0f, 0.0f);
500 transport.Reset();
501 jump.Reset();
502 }
503
504 uint32 GetMovementFlags() const { return flags; }
505 void SetMovementFlags(uint32 flag) { flags = flag; }
506 void AddMovementFlag(uint32 flag) { flags |= flag; }
507 void RemoveMovementFlag(uint32 flag) { flags &= ~flag; }
508 bool HasMovementFlag(uint32 flag) const { return flags & flag; }
509
511 void SetExtraMovementFlags(uint16 flag) { flags2 = flag; }
512 void AddExtraMovementFlag(uint16 flag) { flags2 |= flag; }
513 void RemoveExtraMovementFlag(uint16 flag) { flags2 &= ~flag; }
514 bool HasExtraMovementFlag(uint16 flag) const { return flags2 & flag; }
515
516 void SetFallTime(uint32 time) { jump.fallTime = time; }
517
519 {
520 transport.Reset();
521 }
522
524 {
525 jump.Reset();
526 }
527
528 void OutDebug();
529};
530
531#define MAPID_INVALID 0xFFFFFFFF
532
534{
535public:
536 explicit WorldLocation(uint32 _mapid = MAPID_INVALID, float _x = 0, float _y = 0, float _z = 0, float _o = 0)
537 : m_mapId(_mapid) {
538 Relocate(_x, _y, _z, _o);
539 }
541
543 {
544 m_mapId = loc.GetMapId(); Relocate(loc);
545 }
546 uint32 GetMapId() const { return m_mapId; }
547
549};
550
551template<class T>
553{
554public:
555 virtual ~GridObject() { }
556 bool IsInGrid() const { return _gridRef.isValid(); }
557 void AddToGrid(GridRefManager<T>& m) { ASSERT(!IsInGrid()); _gridRef.link(&m, (T*)this); }
558 void RemoveFromGrid() { ASSERT(IsInGrid()); _gridRef.unlink(); }
559private:
561};
562
563template <class T_VALUES, class T_FLAGS, class FLAG_TYPE, uint8 ARRAY_SIZE>
565{
566public:
568 {
569 memset(&m_values, 0x00, sizeof(T_VALUES) * ARRAY_SIZE);
570 m_flags = 0;
571 }
572
573 T_FLAGS GetFlags() const { return m_flags; }
574 bool HasFlag(FLAG_TYPE flag) const { return m_flags & (1 << flag); }
575 void AddFlag(FLAG_TYPE flag) { m_flags |= (1 << flag); }
576 void DelFlag(FLAG_TYPE flag) { m_flags &= ~(1 << flag); }
577
578 T_VALUES GetValue(FLAG_TYPE flag) const { return m_values[flag]; }
579 void SetValue(FLAG_TYPE flag, T_VALUES value) { m_values[flag] = value; }
580 void AddValue(FLAG_TYPE flag, T_VALUES value) { m_values[flag] += value; }
581
582private:
583 T_VALUES m_values[ARRAY_SIZE];
584 T_FLAGS m_flags;
585};
586
588{
589 friend class Map; //map for moving creatures
590 friend class ObjectGridLoader; //grid loader for loading creatures
591
592protected:
594
595private:
597 Cell const& GetCurrentCell() const { return _currentCell; }
598 void SetCurrentCell(Cell const& cell) { _currentCell = cell; }
599
602 void SetNewCellPosition(float x, float y, float z, float o)
603 {
605 _newPosition.Relocate(x, y, z, o);
606 }
607};
608
609class WorldObject : public Object, public WorldLocation
610{
611protected:
612 explicit WorldObject(bool isWorldObject); //note: here it means if it is in grid object list or world object list
613public:
614 virtual ~WorldObject();
615
616 virtual void Update(uint32 /*time_diff*/) { }
617
618 void _Create(uint32 guidlow, HighGuid guidhigh, uint32 phaseMask);
619 virtual void RemoveFromWorld();
620
621 void GetNearPoint2D(float& x, float& y, float distance, float absAngle) const;
622 void GetNearPoint(WorldObject const* searcher, float& x, float& y, float& z, float searcher_size, float distance2d, float absAngle) const;
623 void GetClosePoint(float& x, float& y, float& z, float size, float distance2d = 0, float angle = 0) const;
624 void MovePosition(Position& pos, float dist, float angle);
625 void GetNearPosition(Position& pos, float dist, float angle);
626 void MovePositionToFirstCollision(Position& pos, float dist, float angle);
627 void GetFirstCollisionPosition(Position& pos, float dist, float angle);
628 void GetRandomNearPosition(Position& pos, float radius);
629 void GetContactPoint(WorldObject const* obj, float& x, float& y, float& z, float distance2d = CONTACT_DISTANCE) const;
630
631 float GetObjectSize() const;
632 void UpdateGroundPositionZ(float x, float y, float& z) const;
633 void UpdateAllowedPositionZ(float x, float y, float& z) const;
634
635 void GetRandomPoint(Position const& srcPos, float distance, float& rand_x, float& rand_y, float& rand_z) const;
636 void GetRandomPoint(Position const& srcPos, float distance, Position& pos) const;
637
639
640 virtual void SetPhaseMask(uint32 newPhaseMask, bool update);
641 virtual bool SetPhased(uint32 id, bool update, bool apply);
642 bool HasPhaseList(uint32 phase);
643 uint32 GetPhaseMask() const { return m_phaseMask; }
644 void ClearPhases(bool update = false);
645 bool IsPhased(WorldObject const* obj) const;
646 bool IsPhased(uint32 phase) const { return _phases.find(phase) != _phases.end(); }
647 std::set<uint32> const& GetPhases() const { return _phases; }
648 bool IsTerrainSwaped(uint32 terrainSwap) const { return _terrainSwaps.find(terrainSwap) != _terrainSwaps.end(); }
649 std::set<uint32> const& GetTerrainSwaps() const { return _terrainSwaps; }
650 std::set<uint32> const& GetWorldMapSwaps() const { return _worldMapSwaps; }
651 void RebuildTerrainSwaps();
653 void UpdateAreaPhase();
654
655 bool InSamePhase(WorldObject const* obj) const;
656 bool InSamePhase(uint32 phasemask) const { return (GetPhaseMask() & phasemask); }
657
658 uint32 GetZoneId() const;
659 uint32 GetAreaId() const;
660 void GetZoneAndAreaId(uint32& zoneid, uint32& areaid) const;
661
663
664 std::string const& GetName() const { return m_name; }
665 void SetName(std::string const& newname) { m_name = newname; }
666
667 virtual std::string const& GetNameForLocaleIdx(LocaleConstant /*locale_idx*/) const { return m_name; }
668
669 float GetDistance(WorldObject const* obj) const;
670 float GetDistance(Position const& pos) const;
671 float GetDistance(float x, float y, float z) const;
672 float GetDistance2d(WorldObject const* obj) const;
673 float GetDistance2d(float x, float y) const;
674 float GetDistanceZ(WorldObject const* obj) const;
675
676 bool IsSelfOrInSameMap(WorldObject const* obj) const;
677 bool IsInMap(WorldObject const* obj) const;
678 bool IsWithinDist3d(float x, float y, float z, float dist) const;
679 bool IsWithinDist3d(Position const* pos, float dist) const;
680 bool IsWithinDist2d(float x, float y, float dist) const;
681 bool IsWithinDist2d(Position const* pos, float dist) const;
682 // use only if you will sure about placing both object at same map
683 bool IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D = true) const;
684 bool IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D = true) const;
685 bool IsWithinLOS(float x, float y, float z) const;
686 bool IsWithinLOSInMap(WorldObject const* obj) const;
687 bool GetDistanceOrder(WorldObject const* obj1, WorldObject const* obj2, bool is3D = true) const;
688 bool IsInRange(WorldObject const* obj, float minRange, float maxRange, bool is3D = true) const;
689 bool IsInRange2d(float x, float y, float minRange, float maxRange) const;
690 bool IsInRange3d(float x, float y, float z, float minRange, float maxRange) const;
691 bool isInFront(WorldObject const* target, float arc = M_PI) const;
692 bool isInBack(WorldObject const* target, float arc = M_PI) const;
693
694 bool IsInBetween(WorldObject const* obj1, WorldObject const* obj2, float size = 0) const;
695
696 virtual void CleanupsBeforeDelete(bool finalCleanup = true); // used in destructor or explicitly before mass creature delete to remove cross-references to already deleted units
697
698 virtual void SendMessageToSet(WorldPacket* data, bool self);
699 virtual void SendMessageToSetInRange(WorldPacket* data, float dist, bool self);
700 virtual void SendMessageToSet(WorldPacket* data, Player const* skipped_rcvr);
701
702 virtual uint8 getLevelForTarget(WorldObject const* /*target*/) const { return 1; }
703
704 void MonsterSay(const char* text, Language language, WorldObject const* target);
705 void MonsterYell(const char* text, Language language, WorldObject const* target);
706 void MonsterTextEmote(const char* text, WorldObject const* target, bool IsBossEmote = false);
707 void MonsterWhisper(const char* text, Player const* target, bool IsBossWhisper = false);
708 void MonsterSay(int32 textId, Language language, WorldObject const* target);
709 void MonsterYell(int32 textId, Language language, WorldObject const* target);
710 void MonsterTextEmote(int32 textId, WorldObject const* target, bool IsBossEmote = false);
711 void MonsterWhisper(int32 textId, Player const* target, bool IsBossWhisper = false);
712
713 void PlayDistanceSound(uint32 sound_id, Player* target);
714 void PlayDirectSound(uint32 sound_id, Player* target = NULL);
715
716 void SendObjectDeSpawnAnim(uint64 guid);
717
718 virtual void SaveRespawnTime() { }
720
721 float GetGridActivationRange() const;
722 float GetVisibilityRange() const;
723 float GetSightRange(WorldObject const* target = NULL) const;
724 bool CanSeeOrDetect(WorldObject const* obj, bool ignoreStealth = false, bool distanceCheck = false) const;
725
728
731
734
735 // Low Level Packets
736 void SendPlaySound(uint32 Sound, bool OnlySelf);
737
738 virtual void SetMap(Map* map);
739 virtual void ResetMap();
740 Map* GetMap() const { ASSERT(m_currMap); return m_currMap; }
741 Map* FindMap() const { return m_currMap; }
742 //used to check all object's GetMap() calls when object is not in world!
743
744 //this function should be removed in nearest time...
745 Map const* GetBaseMap() const;
746
747 void SetZoneScript();
749
750 TempSummon* SummonCreature(uint32 id, Position const& pos, TempSummonType spwtype = TempSummonType::TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime = 0, uint32 vehId = 0) const;
751 TempSummon* SummonCreature(uint32 id, float x, float y, float z, float ang = 0, TempSummonType spwtype = TempSummonType::TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime = 0) const;
752 GameObject* SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime);
753 Creature* SummonTrigger(float x, float y, float z, float ang, uint32 dur, CreatureAI* (*GetAI)(Creature*) = NULL);
754 void SummonCreatureGroup(uint8 group, std::list<TempSummon*>* list = NULL);
755
756 Creature* FindNearestCreature(uint32 entry, float range, bool alive = true) const;
757 GameObject* FindNearestGameObject(uint32 entry, float range) const;
759
760 void GetGameObjectListWithEntryInGrid(std::list<GameObject*>& lList, uint32 uiEntry, float fMaxSearchRange) const;
761 void GetCreatureListWithEntryInGrid(std::list<Creature*>& lList, uint32 uiEntry, float fMaxSearchRange) const;
762 void GetPlayerListInGrid(std::list<Player*>& lList, float fMaxSearchRange) const;
763
765 virtual void UpdateObjectVisibility(bool forced = true);
767
768 //relocation and visibility system functions
770 bool isNeedNotify(uint16 f) const { return m_notifyflags & f; }
772 bool NotifyExecuted(uint16 f) const { return m_executed_notifies & f; }
775
776 bool isActiveObject() const { return m_isActive; }
777 void setActive(bool isActiveObject);
778 void SetWorldObject(bool apply);
780 bool IsWorldObject() const;
781
782 template<class NOTIFIER> void VisitNearbyObject(float const& radius, NOTIFIER& notifier) const { if (IsInWorld()) GetMap()->VisitAll(GetPositionX(), GetPositionY(), radius, notifier); }
783 template<class NOTIFIER> void VisitNearbyGridObject(float const& radius, NOTIFIER& notifier) const { if (IsInWorld()) GetMap()->VisitGrid(GetPositionX(), GetPositionY(), radius, notifier); }
784 template<class NOTIFIER> void VisitNearbyWorldObject(float const& radius, NOTIFIER& notifier) const { if (IsInWorld()) GetMap()->VisitWorld(GetPositionX(), GetPositionY(), radius, notifier); }
785
786#ifdef MAP_BASED_RAND_GEN
787 int32 irand(int32 min, int32 max) const { return int32(GetMap()->mtRand.randInt(max - min)) + min; }
788 uint32 urand(uint32 min, uint32 max) const { return GetMap()->mtRand.randInt(max - min) + min; }
789 int32 rand32() const { return GetMap()->mtRand.randInt(); }
790 double rand_norm() const { return GetMap()->mtRand.randExc(); }
791 double rand_chance() const { return GetMap()->mtRand.randExc(100.0); }
792#endif
793
795
796 // Transports
797 Transport* GetTransport() const { return m_transport; }
798 float GetTransOffsetX() const { return m_movementInfo.transport.pos.GetPositionX(); }
799 float GetTransOffsetY() const { return m_movementInfo.transport.pos.GetPositionY(); }
800 float GetTransOffsetZ() const { return m_movementInfo.transport.pos.GetPositionZ(); }
801 float GetTransOffsetO() const { return m_movementInfo.transport.pos.GetOrientation(); }
802 uint32 GetTransTime() const { return m_movementInfo.transport.time; }
803 int8 GetTransSeat() const { return m_movementInfo.transport.seat; }
804 virtual uint64 GetTransGUID() const;
806
808
809 virtual float GetStationaryX() const { return GetPositionX(); }
810 virtual float GetStationaryY() const { return GetPositionY(); }
811 virtual float GetStationaryZ() const { return GetPositionZ(); }
812 virtual float GetStationaryO() const { return GetOrientation(); }
813
814protected:
815 std::string m_name;
817 const bool m_isWorldObject;
819
820 // transports
822
823 //these functions are used mostly for Relocate() and Corpse/Player specific stuff...
824 //use them ONLY in LoadFromDB()/Create() funcs and nowhere else!
825 //mapId/instanceId should be set in SetMap() function!
826 void SetLocationMapId(uint32 _mapId) { m_mapId = _mapId; }
827 void SetLocationInstanceId(uint32 _instanceId) { m_InstanceId = _instanceId; }
828
829 virtual bool IsNeverVisible() const { return !IsInWorld(); }
830 virtual bool IsAlwaysVisibleFor(WorldObject const* /*seer*/) const { return false; }
831 virtual bool IsInvisibleDueToDespawn() const { return false; }
832 //difference from IsAlwaysVisibleFor: 1. after distance check; 2. use owner or charmer as seer
833 virtual bool IsAlwaysDetectableFor(WorldObject const* /*seer*/) const { return false; }
834private:
835 Map* m_currMap; //current object's Map location
836
837 //uint32 m_mapId; // object at map with map_id
838 uint32 m_InstanceId; // in map copy with instance id
839 uint32 m_phaseMask; // in area phase state
840 std::set<uint32> _phases;
841 std::set<uint32> _terrainSwaps;
842 std::set<uint32> _worldMapSwaps;
843
846 virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D) const;
847
848 bool CanNeverSee(WorldObject const* obj) const;
849 virtual bool CanAlwaysSee(WorldObject const* /*obj*/) const { return false; }
850 bool CanDetect(WorldObject const* obj, bool ignoreStealth) const;
851 bool CanDetectInvisibilityOf(WorldObject const* obj) const;
852 bool CanDetectStealthOf(WorldObject const* obj) const;
853};
854
855namespace Skyfire
856{
857 // Binary predicate to sort WorldObjects based on the distance to a reference WorldObject
859 {
860 public:
861 ObjectDistanceOrderPred(WorldObject const* pRefObj, bool ascending = true) : m_refObj(pRefObj), m_ascending(ascending) { }
862 bool operator()(WorldObject const* pLeft, WorldObject const* pRight) const
863 {
864 return m_ascending ? m_refObj->GetDistanceOrder(pLeft, pRight) : !m_refObj->GetDistanceOrder(pLeft, pRight);
865 }
866 private:
868 const bool m_ascending;
869 };
870}
871
872#endif
LocaleConstant
Definition Common.h:138
#define M_PI
Definition Common.h:192
std::int32_t int32
Definition Define.h:73
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
std::int8_t int8
Definition Define.h:75
std::uint64_t uint64
Definition Define.h:76
std::uint16_t uint16
Definition Define.h:78
std::int16_t int16
Definition Define.h:74
static constexpr TempSummonType TEMPSUMMON_DEAD_DESPAWN
static constexpr TempSummonType TEMPSUMMON_MANUAL_DESPAWN
static constexpr TempSummonType TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN
static constexpr TempSummonType TEMPSUMMON_TIMED_DESPAWN
static constexpr TypeID TYPEID_PLAYER
static constexpr TypeID TYPEID_OBJECT
static constexpr TypeID TYPEID_CORPSE
static constexpr TempSummonType TEMPSUMMON_TIMED_OR_DEAD_DESPAWN
static constexpr TempSummonType TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT
static constexpr TypeID TYPEID_ITEM
static constexpr TypeID TYPEID_UNIT
static constexpr TypeID TYPEID_CONTAINER
static constexpr TempSummonType TEMPSUMMON_CORPSE_TIMED_DESPAWN
static constexpr TypeID TYPEID_DYNAMICOBJECT
static constexpr TypeID TYPEID_GAMEOBJECT
static constexpr TempSummonType TEMPSUMMON_CORPSE_DESPAWN
#define ASSERT
Definition Errors.h:29
MapObjectCellMoveState
PhaseMasks
Definition Object.h:79
@ PHASEMASK_ANYWHERE
Definition Object.h:81
@ PHASEMASK_NORMAL
Definition Object.h:80
TypeID
Definition Object.h:50
@ TYPEID_PLAYER
Definition Object.h:55
@ TYPEID_GAMEOBJECT
Definition Object.h:56
@ TYPEID_DYNAMICOBJECT
Definition Object.h:57
@ TYPEID_UNIT
Definition Object.h:54
@ TYPEID_SCENEOBJECT
Definition Object.h:60
@ TYPEID_CORPSE
Definition Object.h:58
@ NUM_CLIENT_OBJECT_TYPES
Definition Object.h:61
@ TYPEID_AREATRIGGER
Definition Object.h:59
UNORDERED_MAP< Player *, UpdateData > UpdateDataMapType
Definition Object.h:107
TempSummonType
Definition Object.h:67
@ TEMPSUMMON_MANUAL_DESPAWN
Definition Object.h:75
TypeID GuidHigh2TypeId(uint32 guid_hi)
Definition Object.cpp:44
ByteBuffer & operator>>(ByteBuffer &buf, Position::PositionXYZOStreamer const &streamer)
Definition Object.cpp:1448
#define CONTACT_DISTANCE
Definition Object.h:20
ByteBuffer & operator<<(ByteBuffer &buf, Position::PositionXYZStreamer const &streamer)
Definition Object.cpp:1455
TypeMask
Definition Object.h:36
@ TYPEMASK_OBJECT
Definition Object.h:37
@ TYPEMASK_ITEM
Definition Object.h:38
@ TYPEMASK_DYNAMICOBJECT
Definition Object.h:43
@ TYPEMASK_SEER
Definition Object.h:46
@ TYPEMASK_UNIT
Definition Object.h:40
@ TYPEMASK_CONTAINER
Definition Object.h:39
@ TYPEMASK_CORPSE
Definition Object.h:44
@ TYPEMASK_GAMEOBJECT
Definition Object.h:42
@ TYPEMASK_PLAYER
Definition Object.h:41
@ TYPEMASK_AREATRIGGER
Definition Object.h:45
NotifyFlags
Definition Object.h:85
@ NOTIFY_ALL
Definition Object.h:89
@ NOTIFY_NONE
Definition Object.h:86
@ NOTIFY_AI_RELOCATION
Definition Object.h:87
@ NOTIFY_VISIBILITY_CHANGED
Definition Object.h:88
#define MAPID_INVALID
Definition Object.h:531
uint32 GUID_LOPART(uint64 x)
uint32 GUID_ENPART(uint64 x)
HighGuid
uint32 GUID_HIPART(uint64 guid)
GameobjectTypes
Language
#define UNORDERED_MAP
@ OBJECT_FIELD_ENTRY_ID
@ OBJECT_FIELD_SCALE
int32 rand32()
Definition Util.cpp:45
double rand_norm(void)
Definition Util.cpp:50
double rand_chance(void)
Definition Util.cpp:55
bool HasFlag(FLAG_TYPE flag) const
Definition Object.h:574
void AddFlag(FLAG_TYPE flag)
Definition Object.h:575
T_FLAGS GetFlags() const
Definition Object.h:573
void DelFlag(FLAG_TYPE flag)
Definition Object.h:576
T_VALUES GetValue(FLAG_TYPE flag) const
Definition Object.h:578
T_VALUES m_values[ARRAY_SIZE]
Definition Object.h:583
void AddValue(FLAG_TYPE flag, T_VALUES value)
Definition Object.h:580
void SetValue(FLAG_TYPE flag, T_VALUES value)
Definition Object.h:579
void RemoveFromGrid()
Definition Object.h:558
bool IsInGrid() const
Definition Object.h:556
GridReference< T > _gridRef
Definition Object.h:560
virtual ~GridObject()
Definition Object.h:555
void AddToGrid(GridRefManager< T > &m)
Definition Object.h:557
Definition Map.h:238
void VisitGrid(const float &x, const float &y, float radius, NOTIFIER &notifier)
Definition Map.h:742
void VisitAll(const float &x, const float &y, float radius, NOTIFIER &notifier)
Definition Map.h:701
void VisitWorld(const float &x, const float &y, float radius, NOTIFIER &notifier)
Definition Map.h:731
Cell _currentCell
Definition Object.h:596
void SetCurrentCell(Cell const &cell)
Definition Object.h:598
MapObjectCellMoveState _moveState
Definition Object.h:600
MapObject()
Definition Object.h:593
Position _newPosition
Definition Object.h:601
void SetNewCellPosition(float x, float y, float z, float o)
Definition Object.h:602
friend class ObjectGridLoader
Definition Object.h:590
Cell const & GetCurrentCell() const
Definition Object.h:597
friend class Map
Definition Object.h:589
void ApplyModSignedFloatValue(uint16 index, float val, bool apply)
Definition Object.cpp:1238
void UpdateUInt32Value(uint16 index, uint32 value)
Definition Object.cpp:1071
void ToggleFlag64(uint16 index, uint64 flag)
Definition Object.cpp:1397
Corpse * ToCorpse()
Definition Object.h:216
uint8 GetByteValue(uint16 index, uint8 offset) const
Definition Object.cpp:343
void SetByteValue(uint16 index, uint8 offset, uint8 value)
Definition Object.cpp:1158
int32 * m_int32Values
Definition Object.h:249
void BuildFieldsUpdate(Player *, UpdateDataMapType &) const
Definition Object.cpp:932
uint16 m_objectType
Definition Object.h:242
Player const * ToPlayer() const
Definition Object.h:205
ObjectGuid GetObjectGUID() const
Definition Object.h:123
int32 GetInt32Value(uint16 index) const
Definition Object.cpp:319
float GetObjectScale() const
Definition Object.h:128
void ApplyModFlag64(uint16 index, uint64 flag, bool apply)
Definition Object.cpp:1411
void SetInt32Value(uint16 index, int32 value)
Definition Object.cpp:1021
void SetInt16Value(uint16 index, uint8 offset, int16 value)
Definition Object.h:158
uint64 GetGUID() const
Definition Object.h:119
DynamicObject * ToDynObject()
Definition Object.h:219
void SetUInt16Value(uint16 index, uint8 offset, uint16 value)
Definition Object.cpp:1182
uint32 GetUInt32Value(uint16 index) const
Definition Object.cpp:325
Player * ToPlayer()
Definition Object.h:204
bool IsInWorld() const
Definition Object.h:114
Object()
Definition Object.cpp:64
void _LoadIntoDataField(std::string const &data, uint32 startOffset, uint32 count)
Definition Object.cpp:1004
uint16 GetUInt16Value(uint16 index, uint8 offset) const
Definition Object.cpp:350
virtual void DestroyForPlayer(Player *target, bool onDeath=false) const
Definition Object.cpp:287
uint32 GetGUIDLow() const
Definition Object.h:120
virtual void BuildValuesUpdate(uint8 updatetype, ByteBuffer *data, Player *target) const
Definition Object.cpp:804
void ApplyModInt32Value(uint16 index, int32 val, bool apply)
Definition Object.cpp:1231
uint32 GetUpdateFieldData(Player const *target, uint32 *&flags) const
Definition Object.cpp:946
uint32 GetGUIDMid() const
Definition Object.h:121
std::vector< uint32 * > m_dynamicTab
Definition Object.h:239
void ApplyModPositiveFloatValue(uint16 index, float val, bool apply)
Definition Object.cpp:1252
void RemoveFieldNotifyFlag(uint16 flag)
Definition Object.h:199
UpdateMask _changesMask
Definition Object.h:254
virtual bool hasQuest(uint32) const
Definition Object.h:193
void SendDestroyObject(Player *target, ObjectGuid Guid, bool onDeath=false) const
Definition Object.cpp:306
TypeID GetTypeId() const
Definition Object.h:131
uint32 * m_uint32Values
Definition Object.h:250
virtual void BuildCreateUpdateBlockForPlayer(UpdateData *data, Player *target) const
Definition Object.cpp:172
void _Create(uint32 guidlow, uint32 entry, HighGuid guidhigh)
Definition Object.cpp:129
bool RemoveUInt64Value(uint16 index, uint64 value)
Definition Object.cpp:1119
bool isType(uint16 mask) const
Definition Object.h:132
uint16 m_valuesCount
Definition Object.h:256
void _InitValues()
Definition Object.cpp:113
void BuildMovementUpdate(ByteBuffer *data, uint16 flags) const
Definition Object.cpp:363
void SetFlag(uint16 index, uint32 newFlag)
Definition Object.cpp:1261
void RemoveFlag(uint16 index, uint32 oldFlag)
Definition Object.cpp:1280
void ApplyModUInt32Value(uint16 index, int32 val, bool apply)
Definition Object.cpp:1222
Object & operator=(Object const &right)=delete
AreaTrigger * ToAreaTrigger()
Definition Object.h:222
float GetFloatValue(uint16 index) const
Definition Object.cpp:337
void ApplyModFlag(uint16 index, uint32 flag, bool apply)
Definition Object.cpp:1317
void ClearUpdateMask(bool remove)
Definition Object.cpp:917
uint32 GetDynamicUInt32Value(uint32 tab, uint16 index) const
Definition Object.cpp:357
void BuildDynamicValuesUpdate(uint8 updateType, ByteBuffer *data, Player *target) const
Definition Object.cpp:832
uint16 m_fieldNotifyFlags
Definition Object.h:258
GameObject * ToGameObject()
Definition Object.h:213
GameObject const * ToGameObject() const
Definition Object.h:214
void SetFlag64(uint16 index, uint64 newFlag)
Definition Object.cpp:1383
Corpse const * ToCorpse() const
Definition Object.h:217
const ByteBuffer & GetPackGUID() const
Definition Object.h:124
Unit const * ToUnit() const
Definition Object.h:211
uint32 GetEntry() const
Definition Object.h:125
uint64 GetUInt64Value(uint16 index) const
Definition Object.cpp:331
bool PrintIndexError(uint32 index, bool set) const
Definition Object.cpp:1416
void BuildValuesUpdateBlockForPlayer(UpdateData *data, Player *target) const
Definition Object.cpp:270
Creature * ToCreature()
Definition Object.h:207
void RemoveFlag64(uint16 index, uint64 oldFlag)
Definition Object.cpp:1390
void SetFloatValue(uint16 index, float value)
Definition Object.cpp:1141
virtual void BuildUpdate(UpdateDataMapType &)
Definition Object.h:195
void SetDynamicUInt32Value(uint32 tab, uint16 index, uint32 value)
Definition Object.cpp:1055
void SetStatFloatValue(uint16 index, float value)
Definition Object.cpp:1206
std::vector< bool * > m_dynamicChange
Definition Object.h:240
virtual void AddToWorld()
Definition Object.cpp:148
void RemoveByteFlag(uint16 index, uint8 offset, uint8 newFlag)
Definition Object.cpp:1345
bool HasFlag(uint16 index, uint32 flag) const
Definition Object.cpp:1309
std::string _ConcatFields(uint16 startIndex, uint16 size) const
Definition Object.cpp:140
virtual void RemoveFromWorld()
Definition Object.cpp:161
bool m_inWorld
Definition Object.h:263
Creature const * ToCreature() const
Definition Object.h:208
AreaTrigger const * ToAreaTrigger() const
Definition Object.h:223
uint32 GetGUIDHigh() const
Definition Object.h:122
float * m_floatValues
Definition Object.h:251
void BuildOutOfRangeUpdateBlock(UpdateData *data) const
Definition Object.cpp:282
void SetEntry(uint32 entry)
Definition Object.h:126
bool HasByteFlag(uint16 index, uint8 offset, uint8 flag) const
Definition Object.cpp:1376
virtual void SetObjectScale(float scale)
Definition Object.h:129
virtual bool hasInvolvedQuest(uint32) const
Definition Object.h:194
void SetFieldNotifyFlag(uint16 flag)
Definition Object.h:198
void SendUpdateToPlayer(Player *player)
Definition Object.cpp:259
void SetUInt32Value(uint16 index, uint32 value)
Definition Object.cpp:1038
ByteBuffer m_PackGUID
Definition Object.h:265
uint16 m_updateFlag
Definition Object.h:245
uint16 GetValuesCount() const
Definition Object.h:191
void ToggleFlag(uint16 index, uint32 flag)
Definition Object.cpp:1301
virtual ~Object()
Definition Object.cpp:85
Object(Object const &right)=delete
bool HasFlag64(uint16 index, uint64 flag) const
Definition Object.cpp:1405
TypeID m_objectTypeId
Definition Object.h:244
void ApplyPercentModFloatValue(uint16 index, float val, bool apply)
Definition Object.cpp:1245
void SetStatInt32Value(uint16 index, int32 value)
Definition Object.cpp:1214
DynamicObject const * ToDynObject() const
Definition Object.h:220
bool m_objectUpdated
Definition Object.h:260
void SetUInt64Value(uint16 index, uint64 value)
Definition Object.cpp:1079
void ToggleByteFlag(uint16 index, uint8 offset, uint8 flag)
Definition Object.cpp:1368
Unit * ToUnit()
Definition Object.h:210
void ForceValuesUpdateAtIndex(uint32)
Definition Object.cpp:2328
bool AddUInt64Value(uint16 index, uint64 value)
Definition Object.cpp:1097
void SetByteFlag(uint16 index, uint8 offset, uint8 newFlag)
Definition Object.cpp:1322
WorldObject const * m_refObj
Definition Object.h:867
ObjectDistanceOrderPred(WorldObject const *pRefObj, bool ascending=true)
Definition Object.h:861
bool operator()(WorldObject const *pLeft, WorldObject const *pRight) const
Definition Object.h:862
Definition Unit.h:1367
WorldLocation(uint32 _mapid=MAPID_INVALID, float _x=0, float _y=0, float _z=0, float _o=0)
Definition Object.h:536
uint32 GetMapId() const
Definition Object.h:546
void WorldRelocate(const WorldLocation &loc)
Definition Object.h:542
uint32 m_mapId
Definition Object.h:548
WorldLocation(const WorldLocation &loc)
Definition Object.h:540
bool isInFront(WorldObject const *target, float arc=M_PI) const
Definition Object.cpp:1940
bool NotifyExecuted(uint16 f) const
Definition Object.h:772
int8 GetTransSeat() const
Definition Object.h:803
bool IsPhased(WorldObject const *obj) const
Definition Object.cpp:3393
virtual void SendMessageToSetInRange(WorldPacket *data, float dist, bool self)
Definition Object.cpp:2491
virtual void SetPhaseMask(uint32 newPhaseMask, bool update)
Definition Object.cpp:3219
void _Create(uint32 guidlow, HighGuid guidhigh, uint32 phaseMask)
Definition Object.cpp:1581
uint32 GetPhaseMask() const
Definition Object.h:643
bool IsInRange3d(float x, float y, float z, float minRange, float maxRange) const
Definition Object.cpp:1820
bool IsWithinDist2d(float x, float y, float dist) const
Definition Object.cpp:1720
bool IsWithinDist3d(float x, float y, float z, float dist) const
Definition Object.cpp:1710
Map * GetMap() const
Definition Object.h:740
virtual void ResetMap()
Definition Object.cpp:2532
bool CanDetectStealthOf(WorldObject const *obj) const
Definition Object.cpp:2240
std::string m_name
Definition Object.h:815
InstanceScript * GetInstanceScript()
Definition Object.cpp:1612
virtual void RemoveFromWorld()
Definition Object.cpp:1587
std::set< uint32 > const & GetTerrainSwaps() const
Definition Object.h:649
Map * FindMap() const
Definition Object.h:741
bool IsWorldObject() const
Definition Object.cpp:1531
std::set< uint32 > _worldMapSwaps
Definition Object.h:842
void UpdateAreaPhase()
Definition Object.cpp:3287
virtual float GetStationaryO() const
Definition Object.h:812
uint16 m_executed_notifies
Definition Object.h:845
bool isNeedNotify(uint16 f) const
Definition Object.h:770
uint16 m_notifyflags
Definition Object.h:844
virtual ~WorldObject()
Definition Object.cpp:70
void ResetAllNotifies()
Definition Object.h:774
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true) const
Definition Object.cpp:1735
void SetLocationInstanceId(uint32 _instanceId)
Definition Object.h:827
bool IsWithinLOSInMap(WorldObject const *obj) const
Definition Object.cpp:1656
bool IsInRange2d(float x, float y, float minRange, float maxRange) const
Definition Object.cpp:1800
Creature * SummonTrigger(float x, float y, float z, float ang, uint32 dur, CreatureAI *(*GetAI)(Creature *)=NULL)
Definition Object.cpp:2762
uint32 m_InstanceId
Definition Object.h:838
virtual bool IsNeverVisible() const
Definition Object.h:829
virtual bool IsInvisibleDueToDespawn() const
Definition Object.h:831
void GetGameObjectListWithEntryInGrid(std::list< GameObject * > &lList, uint32 uiEntry, float fMaxSearchRange) const
Definition Object.cpp:2828
virtual bool IsAlwaysDetectableFor(WorldObject const *) const
Definition Object.h:833
bool HasPhaseList(uint32 phase)
Definition Object.cpp:3349
float GetGridActivationRange() const
Definition Object.cpp:2054
GameObject * FindNearestGameObjectOfType(GameobjectTypes type, float range) const
Definition Object.cpp:2819
std::set< uint32 > const & GetPhases() const
Definition Object.h:647
FlaggedValuesArray32< int32, uint32, InvisibilityType, TOTAL_INVISIBILITY_TYPES > m_invisibility
Definition Object.h:729
GameObject * FindNearestGameObject(uint32 entry, float range) const
Definition Object.cpp:2810
void SetWorldObject(bool apply)
Definition Object.cpp:1523
void RebuildWorldMapAreaSwaps()
Definition Object.cpp:3262
void SendObjectDeSpawnAnim(uint64 guid)
Definition Object.cpp:2503
void SetTransport(Transport *t)
Definition Object.h:805
void RebuildTerrainSwaps()
Definition Object.cpp:3227
virtual bool SetPhased(uint32 id, bool update, bool apply)
Definition Object.cpp:3353
float GetTransOffsetX() const
Definition Object.h:798
void MovePositionToFirstCollision(Position &pos, float dist, float angle)
Definition Object.cpp:3151
uint32 LastUsedScriptID
Definition Object.h:794
FlaggedValuesArray32< int32, uint32, InvisibilityType, TOTAL_INVISIBILITY_TYPES > m_invisibilityDetect
Definition Object.h:730
void SetLocationMapId(uint32 _mapId)
Definition Object.h:826
void GetNearPoint2D(float &x, float &y, float distance, float absAngle) const
Definition Object.cpp:2936
ZoneScript * GetZoneScript() const
Definition Object.h:748
bool IsPermanentWorldObject() const
Definition Object.h:779
void SetNotified(uint16 f)
Definition Object.h:773
void SetName(std::string const &newname)
Definition Object.h:665
bool isActiveObject() const
Definition Object.h:776
bool IsSelfOrInSameMap(WorldObject const *obj) const
Definition Object.cpp:1696
void SetZoneScript()
Definition Object.cpp:2687
bool GetDistanceOrder(WorldObject const *obj1, WorldObject const *obj2, bool is3D=true) const
Definition Object.cpp:1752
uint32 GetInstanceId() const
Definition Object.h:638
void GetRandomNearPosition(Position &pos, float radius)
Definition Object.cpp:3088
uint16 GetNotifyFlags() const
Definition Object.h:771
void setActive(bool isActiveObject)
Definition Object.cpp:1542
float GetDistance2d(WorldObject const *obj) const
Definition Object.cpp:1684
ZoneScript * m_zoneScript
Definition Object.h:818
float GetTransOffsetY() const
Definition Object.h:799
bool InSamePhase(uint32 phasemask) const
Definition Object.h:656
void GetPlayerListInGrid(std::list< Player * > &lList, float fMaxSearchRange) const
Definition Object.cpp:2854
std::string const & GetName() const
Definition Object.h:664
virtual void SetMap(Map *map)
Definition Object.cpp:2514
void SendPlaySound(uint32 Sound, bool OnlySelf)
Definition Object.cpp:2300
virtual float GetStationaryX() const
Definition Object.h:809
float GetTransOffsetZ() const
Definition Object.h:800
virtual bool IsAlwaysVisibleFor(WorldObject const *) const
Definition Object.h:830
void BuildUpdate(UpdateDataMapType &)
Definition Object.cpp:3557
void GetFirstCollisionPosition(Position &pos, float dist, float angle)
Definition Object.cpp:3082
void VisitNearbyObject(float const &radius, NOTIFIER &notifier) const
Definition Object.h:782
void AddObjectToRemoveList()
Definition Object.cpp:2550
virtual std::string const & GetNameForLocaleIdx(LocaleConstant) const
Definition Object.h:667
std::set< uint32 > const & GetWorldMapSwaps() const
Definition Object.h:650
std::set< uint32 > _terrainSwaps
Definition Object.h:841
void VisitNearbyGridObject(float const &radius, NOTIFIER &notifier) const
Definition Object.h:783
void GetNearPoint(WorldObject const *searcher, float &x, float &y, float &z, float searcher_size, float distance2d, float absAngle) const
Definition Object.cpp:2945
bool InSamePhase(WorldObject const *obj) const
Definition Object.cpp:3412
WorldObject(bool isWorldObject)
Definition Object.cpp:1514
float GetSightRange(WorldObject const *target=NULL) const
Definition Object.cpp:2078
void GetContactPoint(WorldObject const *obj, float &x, float &y, float &z, float distance2d=CONTACT_DISTANCE) const
Definition Object.cpp:3094
bool CanDetectInvisibilityOf(WorldObject const *obj) const
Definition Object.cpp:2216
uint32 GetTransTime() const
Definition Object.h:802
bool IsWithinLOS(float x, float y, float z) const
Definition Object.cpp:1740
uint32 m_phaseMask
Definition Object.h:839
void DestroyForNearbyPlayers()
Definition Object.cpp:3453
Transport * GetTransport() const
Definition Object.h:797
void UpdateAllowedPositionZ(float x, float y, float &z) const
Definition Object.cpp:1985
void GetCreatureListWithEntryInGrid(std::list< Creature * > &lList, uint32 uiEntry, float fMaxSearchRange) const
Definition Object.cpp:2841
void MonsterWhisper(const char *text, Player const *target, bool IsBossWhisper=false)
Definition Object.cpp:2461
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPES > m_stealthDetect
Definition Object.h:727
virtual bool _IsWithinDist(WorldObject const *obj, float dist2compare, bool is3D) const
Definition Object.cpp:1626
void MonsterSay(const char *text, Language language, WorldObject const *target)
Definition Object.cpp:2383
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition Object.cpp:2801
bool m_isActive
Definition Object.h:816
void UpdateGroundPositionZ(float x, float y, float &z) const
Definition Object.cpp:1978
void MonsterTextEmote(const char *text, WorldObject const *target, bool IsBossEmote=false)
Definition Object.cpp:2440
void ClearPhases(bool update=false)
Definition Object.cpp:3383
const bool m_isWorldObject
Definition Object.h:817
bool isInBack(WorldObject const *target, float arc=M_PI) const
Definition Object.cpp:1945
void VisitNearbyWorldObject(float const &radius, NOTIFIER &notifier) const
Definition Object.h:784
void AddToNotify(uint16 f)
Definition Object.h:769
Map const * GetBaseMap() const
Definition Object.cpp:2544
GameObject * SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime)
Definition Object.cpp:2729
bool IsInRange(WorldObject const *obj, float minRange, float maxRange, bool is3D=true) const
Definition Object.cpp:1775
void GetClosePoint(float &x, float &y, float &z, float size, float distance2d=0, float angle=0) const
Definition Object.cpp:3070
void PlayDistanceSound(uint32 sound_id, Player *target)
Definition Object.cpp:3417
float GetVisibilityRange() const
Definition Object.cpp:2070
void MonsterYell(const char *text, Language language, WorldObject const *target)
Definition Object.cpp:2411
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPES > m_stealth
Definition Object.h:726
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPES > m_serverSideVisibilityDetect
Definition Object.h:733
bool IsPhased(uint32 phase) const
Definition Object.h:646
float GetDistance(WorldObject const *obj) const
Definition Object.cpp:1666
bool IsInBetween(WorldObject const *obj1, WorldObject const *obj2, float size=0) const
Definition Object.cpp:1920
uint32 GetAreaId() const
Definition Object.cpp:1602
bool IsTerrainSwaped(uint32 terrainSwap) const
Definition Object.h:648
float GetTransOffsetO() const
Definition Object.h:801
void GetNearPosition(Position &pos, float dist, float angle)
Definition Object.cpp:3076
bool CanNeverSee(WorldObject const *obj) const
Definition Object.cpp:2190
void SummonCreatureGroup(uint8 group, std::list< TempSummon * > *list=NULL)
Definition Object.cpp:2787
bool IsWithinDist(WorldObject const *obj, float dist2compare, bool is3D=true) const
Definition Object.cpp:1730
uint32 GetZoneId() const
Definition Object.cpp:1597
MovementInfo m_movementInfo
Definition Object.h:807
virtual void SendMessageToSet(WorldPacket *data, bool self)
Definition Object.cpp:2485
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPES > m_serverSideVisibility
Definition Object.h:732
float GetDistanceZ(WorldObject const *obj) const
Definition Object.cpp:1618
void GetZoneAndAreaId(uint32 &zoneid, uint32 &areaid) const
Definition Object.cpp:1607
float GetObjectSize() const
Definition Object.cpp:3100
virtual void Update(uint32)
Definition Object.h:616
virtual float GetStationaryY() const
Definition Object.h:810
void PlayDirectSound(uint32 sound_id, Player *target=NULL)
Definition Object.cpp:3442
TempSummon * SummonCreature(uint32 id, Position const &pos, TempSummonType spwtype=TempSummonType::TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0) const
Definition Object.cpp:2703
bool CanDetect(WorldObject const *obj, bool ignoreStealth) const
Definition Object.cpp:2195
std::set< uint32 > _phases
Definition Object.h:840
bool CanSeeOrDetect(WorldObject const *obj, bool ignoreStealth=false, bool distanceCheck=false) const
Definition Object.cpp:2105
virtual float GetStationaryZ() const
Definition Object.h:811
Map * m_currMap
Definition Object.h:835
virtual bool CanAlwaysSee(WorldObject const *) const
Definition Object.h:849
bool IsInMap(WorldObject const *obj) const
Definition Object.cpp:1703
virtual uint64 GetTransGUID() const
Definition Object.cpp:3571
Transport * m_transport
Definition Object.h:821
virtual uint8 getLevelForTarget(WorldObject const *) const
Definition Object.h:702
void GetRandomPoint(Position const &srcPos, float distance, float &rand_x, float &rand_y, float &rand_z) const
Definition Object.cpp:1950
virtual void SaveRespawnTime()
Definition Object.h:718
virtual void UpdateObjectVisibility(bool forced=true)
Definition Object.cpp:3480
virtual void CleanupsBeforeDelete(bool finalCleanup=true)
Definition Object.cpp:1575
Definition Cell.h:37
void ResetTransport()
Definition Object.h:518
void SetExtraMovementFlags(uint16 flag)
Definition Object.h:511
uint64 guid
Definition Object.h:449
void ResetJump()
Definition Object.h:523
uint16 GetExtraMovementFlags() const
Definition Object.h:510
uint32 time
Definition Object.h:453
struct MovementInfo::JumpInfo jump
uint16 flags2
Definition Object.h:451
void RemoveMovementFlag(uint32 flag)
Definition Object.h:507
uint32 flags
Definition Object.h:450
struct MovementInfo::TransportInfo transport
float splineElevation
Definition Object.h:494
void SetMovementFlags(uint32 flag)
Definition Object.h:505
bool HasMovementFlag(uint32 flag) const
Definition Object.h:508
void RemoveExtraMovementFlag(uint16 flag)
Definition Object.h:513
uint32 GetMovementFlags() const
Definition Object.h:504
void AddMovementFlag(uint32 flag)
Definition Object.h:506
void SetFallTime(uint32 time)
Definition Object.h:516
float pitch
Definition Object.h:477
void OutDebug()
Definition Object.cpp:1479
bool HasExtraMovementFlag(uint16 flag) const
Definition Object.h:514
Position pos
Definition Object.h:452
void AddExtraMovementFlag(uint16 flag)
Definition Object.h:512
PositionXYZOStreamer(Position &pos)
Definition Object.h:283
PositionXYZStreamer(Position &pos)
Definition Object.h:277
void GetPosition(Position *pos) const
Definition Object.h:345
float GetAngle(Position const *pos) const
Definition Object.cpp:1860
float m_positionZ
Definition Object.h:289
void Relocate(Position const *pos)
Definition Object.h:318
float GetExactDist2dSq(float x, float y) const
Definition Object.h:362
float GetExactDist2d(const float x, const float y) const
Definition Object.h:366
float GetRelativeAngle(float x, float y) const
Definition Object.h:403
std::string ToString() const
Definition Object.cpp:1441
float GetExactDist(float x, float y, float z) const
Definition Object.h:382
void Relocate(float x, float y, float z)
Definition Object.h:306
static float NormalizeOrientation(float o)
Definition Object.h:427
float m_positionX
Definition Object.h:287
float GetPositionZ() const
Definition Object.h:330
float m_positionY
Definition Object.h:288
void Relocate(float x, float y, float z, float orientation)
Definition Object.h:310
bool operator==(Position const &a)
Definition Object.cpp:1424
bool IsInDist(Position const *pos, float dist) const
Definition Object.h:418
bool IsInDist2d(float x, float y, float dist) const
Definition Object.h:406
float GetOrientation() const
Definition Object.h:331
float GetExactDist(Position const *pos) const
Definition Object.h:390
bool IsInDist(float x, float y, float z, float dist) const
Definition Object.h:414
bool HasInArc(float arcangle, Position const *pos, float border=2.0f) const
Definition Object.cpp:1898
void GetPosition(float &x, float &y, float &z) const
Definition Object.h:337
float GetExactDist2dSq(Position const *pos) const
Definition Object.h:370
Position::PositionXYZStreamer PositionXYZStream()
Definition Object.h:351
bool IsPositionValid() const
Definition Object.cpp:2049
void GetPosition(float &x, float &y, float &z, float &o) const
Definition Object.h:341
void GetSinCos(float x, float y, float &vsin, float &vcos) const
Definition Object.cpp:1879
bool operator!=(Position const &a)
Definition Object.h:297
void SetOrientation(float orientation)
Definition Object.h:323
float GetRelativeAngle(Position const *pos) const
Definition Object.h:399
float GetExactDistSq(Position const *pos) const
Definition Object.h:386
float GetExactDist2d(Position const *pos) const
Definition Object.h:374
bool HasInLine(WorldObject const *target, float width) const
Definition Object.cpp:1432
void Relocate(Position const &pos)
Definition Object.h:314
Position::PositionXYZOStreamer PositionXYZOStream()
Definition Object.h:355
float m_orientation
Definition Object.h:292
bool IsInDist2d(Position const *pos, float dist) const
Definition Object.h:410
float GetPositionX() const
Definition Object.h:328
void GetPosition(float &x, float &y) const
Definition Object.h:333
void GetPositionOffsetTo(Position const &endPos, Position &retOffset) const
Definition Object.cpp:1849
float GetPositionY() const
Definition Object.h:329
float GetExactDistSq(float x, float y, float z) const
Definition Object.h:378
void RelocateOffset(Position const &offset)
Definition Object.cpp:1841
void Relocate(float x, float y)
Definition Object.h:302
Position const MovePosition