aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Object/Object.cpp255
-rw-r--r--src/server/game/Entities/Object/Object.h265
2 files changed, 296 insertions, 224 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index cd8ae5056ba..0a0c533b499 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -319,6 +319,44 @@ void Object::DestroyForPlayer(Player* target, bool onDeath) const
target->GetSession()->SendPacket(&data);
}
+int32 Object::GetInt32Value(uint16 index) const
+{
+ ASSERT(index < m_valuesCount || PrintIndexError(index, false));
+ return m_int32Values[index];
+}
+
+uint32 Object::GetUInt32Value(uint16 index) const
+{
+ ASSERT(index < m_valuesCount || PrintIndexError(index, false));
+ return m_uint32Values[index];
+}
+
+uint64 Object::GetUInt64Value(uint16 index) const
+{
+ ASSERT(index + 1 < m_valuesCount || PrintIndexError(index, false));
+ return *((uint64*)&(m_uint32Values[index]));
+}
+
+float Object::GetFloatValue(uint16 index) const
+{
+ ASSERT(index < m_valuesCount || PrintIndexError(index, false));
+ return m_floatValues[index];
+}
+
+uint8 Object::GetByteValue(uint16 index, uint8 offset) const
+{
+ ASSERT(index < m_valuesCount || PrintIndexError(index, false));
+ ASSERT(offset < 4);
+ return *(((uint8*)&m_uint32Values[index])+offset);
+}
+
+uint16 Object::GetUInt16Value(uint16 index, uint8 offset) const
+{
+ ASSERT(index < m_valuesCount || PrintIndexError(index, false));
+ ASSERT(offset < 2);
+ return *(((uint16*)&m_uint32Values[index])+offset);
+}
+
void Object::_BuildMovementUpdate(ByteBuffer* data, uint16 flags) const
{
*data << uint16(flags); // update flags
@@ -1076,6 +1114,13 @@ void Object::ApplyModSignedFloatValue(uint16 index, float val, bool apply)
SetFloatValue(index, cur);
}
+void Object::ApplyPercentModFloatValue(uint16 index, float val, bool apply)
+{
+ float value = GetFloatValue(index);
+ ApplyPercentModFloatVar(value, val, apply);
+ SetFloatValue(index, value);
+}
+
void Object::ApplyModPositiveFloatValue(uint16 index, float val, bool apply)
{
float cur = GetFloatValue(index);
@@ -1125,6 +1170,27 @@ void Object::RemoveFlag(uint16 index, uint32 oldFlag)
}
}
+void Object::ToggleFlag(uint16 index, uint32 flag)
+{
+ if (HasFlag(index, flag))
+ RemoveFlag(index, flag);
+ else
+ SetFlag(index, flag);
+}
+
+bool Object::HasFlag(uint16 index, uint32 flag) const
+{
+ if (index >= m_valuesCount && !PrintIndexError(index, false))
+ return false;
+
+ return (m_uint32Values[index] & flag) != 0;
+}
+
+void Object::ApplyModFlag(uint16 index, uint32 flag, bool apply)
+{
+ if (apply) SetFlag(index, flag); else RemoveFlag(index, flag);
+}
+
void Object::SetByteFlag(uint16 index, uint8 offset, uint8 newFlag)
{
ASSERT(index < m_valuesCount || PrintIndexError(index, true));
@@ -1171,6 +1237,54 @@ void Object::RemoveByteFlag(uint16 index, uint8 offset, uint8 oldFlag)
}
}
+void Object::ToggleByteFlag(uint16 index, uint8 offset, uint8 flag)
+{
+ if (HasByteFlag(index, offset, flag))
+ RemoveByteFlag(index, offset, flag);
+ else
+ SetByteFlag(index, offset, flag);
+}
+
+bool Object::HasByteFlag(uint16 index, uint8 offset, uint8 flag) const
+{
+ ASSERT(index < m_valuesCount || PrintIndexError(index, false));
+ ASSERT(offset < 4);
+ return (((uint8*)&m_uint32Values[index])[offset] & flag) != 0;
+}
+
+void Object::SetFlag64(uint16 index, uint64 newFlag)
+{
+ uint64 oldval = GetUInt64Value(index);
+ uint64 newval = oldval | newFlag;
+ SetUInt64Value(index, newval);
+}
+
+void Object::RemoveFlag64(uint16 index, uint64 oldFlag)
+{
+ uint64 oldval = GetUInt64Value(index);
+ uint64 newval = oldval & ~oldFlag;
+ SetUInt64Value(index, newval);
+}
+
+void Object::ToggleFlag64(uint16 index, uint64 flag)
+{
+ if (HasFlag64(index, flag))
+ RemoveFlag64(index, flag);
+ else
+ SetFlag64(index, flag);
+}
+
+bool Object::HasFlag64(uint16 index, uint64 flag) const
+{
+ ASSERT(index < m_valuesCount || PrintIndexError(index, false));
+ return (GetUInt64Value(index) & flag) != 0;
+}
+
+void Object::ApplyModFlag64(uint16 index, uint64 flag, bool apply)
+{
+ if (apply) SetFlag64(index, flag); else RemoveFlag64(index, flag);
+}
+
bool Object::PrintIndexError(uint32 index, bool set) const
{
sLog->outError(LOG_FILTER_GENERAL, "Attempt %s non-existed value field: %u (count: %u) for object typeid: %u type mask: %u", (set ? "set value to" : "get value from"), index, m_valuesCount, GetTypeId(), m_objectType);
@@ -1329,6 +1443,16 @@ void WorldObject::_Create(uint32 guidlow, HighGuid guidhigh, uint32 phaseMask)
m_phaseMask = phaseMask;
}
+virtual void WorldObject::RemoveFromWorld()
+{
+ if (!IsInWorld())
+ return;
+
+ DestroyForNearbyPlayers();
+
+ Object::RemoveFromWorld();
+}
+
uint32 WorldObject::GetZoneId() const
{
return GetBaseMap()->GetZoneId(m_positionX, m_positionY, m_positionZ);
@@ -1398,6 +1522,80 @@ bool WorldObject::IsWithinLOSInMap(const WorldObject* obj) const
return IsWithinLOS(ox, oy, oz);
}
+float WorldObject::GetDistance(const WorldObject* obj) const
+{
+ float d = GetExactDist(obj) - GetObjectSize() - obj->GetObjectSize();
+ return d > 0.0f ? d : 0.0f;
+}
+
+float WorldObject::GetDistance(const Position &pos) const
+{
+ float d = GetExactDist(&pos) - GetObjectSize();
+ return d > 0.0f ? d : 0.0f;
+}
+
+float WorldObject::GetDistance(float x, float y, float z) const
+{
+ float d = GetExactDist(x, y, z) - GetObjectSize();
+ return d > 0.0f ? d : 0.0f;
+}
+
+float WorldObject::GetDistance2d(const WorldObject* obj) const
+{
+ float d = GetExactDist2d(obj) - GetObjectSize() - obj->GetObjectSize();
+ return d > 0.0f ? d : 0.0f;
+}
+
+float WorldObject::GetDistance2d(float x, float y) const
+{
+ float d = GetExactDist2d(x, y) - GetObjectSize();
+ return d > 0.0f ? d : 0.0f;
+}
+
+bool WorldObject::IsSelfOrInSameMap(const WorldObject* obj) const
+{
+ if (this == obj)
+ return true;
+ return IsInMap(obj);
+}
+
+bool WorldObject::IsInMap(const WorldObject* obj) const
+{
+ if (obj)
+ return IsInWorld() && obj->IsInWorld() && (GetMap() == obj->GetMap());
+ return false;
+}
+
+bool WorldObject::IsWithinDist3d(float x, float y, float z, float dist) const
+{
+ return IsInDist(x, y, z, dist + GetObjectSize());
+}
+
+bool WorldObject::IsWithinDist3d(const Position* pos, float dist) const
+{
+ return IsInDist(pos, dist + GetObjectSize());
+}
+
+bool WorldObject::IsWithinDist2d(float x, float y, float dist) const
+{
+ return IsInDist2d(x, y, dist + GetObjectSize());
+}
+
+bool WorldObject::IsWithinDist2d(const Position* pos, float dist) const
+{
+ return IsInDist2d(pos, dist + GetObjectSize());
+}
+
+bool WorldObject::IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D = true) const
+{
+ return obj && _IsWithinDist(obj, dist2compare, is3D);
+}
+
+bool WorldObject::IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D = true) const
+{
+ return obj && IsInMap(obj) && InSamePhase(obj) && _IsWithinDist(obj, dist2compare, is3D);
+}
+
bool WorldObject::IsWithinLOS(float ox, float oy, float oz) const
{
/*float x, y, z;
@@ -1821,6 +2019,11 @@ bool WorldObject::canSeeOrDetect(WorldObject const* obj, bool ignoreStealth, boo
return true;
}
+bool WorldObject::CanNeverSee(WorldObject const* obj) const
+{
+ return GetMap() != obj->GetMap() || !InSamePhase(obj);
+}
+
bool WorldObject::CanDetect(WorldObject const* obj, bool ignoreStealth) const
{
const WorldObject* seer = this;
@@ -2364,6 +2567,18 @@ TempSummon* WorldObject::SummonCreature(uint32 entry, const Position &pos, TempS
return NULL;
}
+TempSummon* WorldObject::SummonCreature(uint32 id, float x, float y, float z, float ang = 0, TempSummonType spwtype = TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime = 0) const
+{
+ if (!x && !y && !z)
+ {
+ GetClosePoint(x, y, z, GetObjectSize());
+ ang = GetOrientation();
+ }
+ Position pos;
+ pos.Relocate(x, y, z, ang);
+ return SummonCreature(id, pos, spwtype, despwtime, 0);
+}
+
GameObject* WorldObject::SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime)
{
if (!IsInWorld())
@@ -2695,6 +2910,41 @@ void WorldObject::GetNearPoint(WorldObject const* /*searcher*/, float &x, float
*/
}
+void WorldObject::GetClosePoint(float &x, float &y, float &z, float size, float distance2d = 0, float angle = 0) const
+{
+ // angle calculated from current orientation
+ GetNearPoint(NULL, x, y, z, size, distance2d, GetOrientation() + angle);
+}
+
+void WorldObject::GetNearPosition(Position &pos, float dist, float angle)
+{
+ GetPosition(&pos);
+ MovePosition(pos, dist, angle);
+}
+
+void WorldObject::GetFirstCollisionPosition(Position &pos, float dist, float angle)
+{
+ GetPosition(&pos);
+ MovePositionToFirstCollision(pos, dist, angle);
+}
+
+void WorldObject::GetRandomNearPosition(Position &pos, float radius)
+{
+ GetPosition(&pos);
+ MovePosition(pos, radius * (float)rand_norm(), (float)rand_norm() * static_cast<float>(2 * M_PI));
+}
+
+void WorldObject::GetContactPoint(const WorldObject* obj, float &x, float &y, float &z, float distance2d = CONTACT_DISTANCE) const
+{
+ // angle to face `obj` to `this` using distance includes size of `obj`
+ GetNearPoint(obj, x, y, z, obj->GetObjectSize(), distance2d, GetAngle(obj));
+}
+
+float WorldObject::GetObjectSize() const
+{
+ return (m_valuesCount > UNIT_FIELD_COMBATREACH) ? m_floatValues[UNIT_FIELD_COMBATREACH] : DEFAULT_WORLD_OBJECT_SIZE;
+}
+
void WorldObject::MovePosition(Position &pos, float dist, float angle)
{
angle += m_orientation;
@@ -2816,6 +3066,11 @@ void WorldObject::SetPhaseMask(uint32 newPhaseMask, bool update)
UpdateObjectVisibility();
}
+bool WorldObject::InSamePhase(WorldObject const* obj) const
+{
+ return InSamePhase(obj->GetPhaseMask());
+}
+
void WorldObject::PlayDistanceSound(uint32 sound_id, Player* target /*= NULL*/)
{
WorldPacket data(SMSG_PLAY_OBJECT_SOUND, 4+8);
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index dfd2ff73ae9..7dc61c01d02 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -150,43 +150,12 @@ class Object
virtual void DestroyForPlayer(Player* target, bool onDeath = false) const;
- int32 GetInt32Value(uint16 index) const
- {
- ASSERT(index < m_valuesCount || PrintIndexError(index, false));
- return m_int32Values[index];
- }
-
- uint32 GetUInt32Value(uint16 index) const
- {
- ASSERT(index < m_valuesCount || PrintIndexError(index, false));
- return m_uint32Values[index];
- }
-
- uint64 GetUInt64Value(uint16 index) const
- {
- ASSERT(index + 1 < m_valuesCount || PrintIndexError(index, false));
- return *((uint64*)&(m_uint32Values[index]));
- }
-
- float GetFloatValue(uint16 index) const
- {
- ASSERT(index < m_valuesCount || PrintIndexError(index, false));
- return m_floatValues[index];
- }
-
- uint8 GetByteValue(uint16 index, uint8 offset) const
- {
- ASSERT(index < m_valuesCount || PrintIndexError(index, false));
- ASSERT(offset < 4);
- return *(((uint8*)&m_uint32Values[index])+offset);
- }
-
- uint16 GetUInt16Value(uint16 index, uint8 offset) const
- {
- ASSERT(index < m_valuesCount || PrintIndexError(index, false));
- ASSERT(offset < 2);
- return *(((uint16*)&m_uint32Values[index])+offset);
- }
+ int32 GetInt32Value(uint16 index) const;
+ uint32 GetUInt32Value(uint16 index) const;
+ uint64 GetUInt64Value(uint16 index) const;
+ float GetFloatValue(uint16 index) const;
+ uint8 GetByteValue(uint16 index, uint8 offset) const;
+ uint16 GetUInt16Value(uint16 index, uint8 offset) const;
void SetInt32Value(uint16 index, int32 value);
void SetUInt32Value(uint16 index, uint32 value);
@@ -207,88 +176,24 @@ class Object
void ApplyModUInt64Value(uint16 index, int32 val, bool apply);
void ApplyModPositiveFloatValue(uint16 index, float val, bool apply);
void ApplyModSignedFloatValue(uint16 index, float val, bool apply);
-
- void ApplyPercentModFloatValue(uint16 index, float val, bool apply)
- {
- float value = GetFloatValue(index);
- ApplyPercentModFloatVar(value, val, apply);
- SetFloatValue(index, value);
- }
+ void ApplyPercentModFloatValue(uint16 index, float val, bool apply);
void SetFlag(uint16 index, uint32 newFlag);
void RemoveFlag(uint16 index, uint32 oldFlag);
-
- void ToggleFlag(uint16 index, uint32 flag)
- {
- if (HasFlag(index, flag))
- RemoveFlag(index, flag);
- else
- SetFlag(index, flag);
- }
-
- bool HasFlag(uint16 index, uint32 flag) const
- {
- if (index >= m_valuesCount && !PrintIndexError(index, false))
- return false;
-
- return (m_uint32Values[index] & flag) != 0;
- }
+ void ToggleFlag(uint16 index, uint32 flag);
+ bool HasFlag(uint16 index, uint32 flag) const;
+ void ApplyModFlag(uint16 index, uint32 flag, bool apply);
void SetByteFlag(uint16 index, uint8 offset, uint8 newFlag);
void RemoveByteFlag(uint16 index, uint8 offset, uint8 newFlag);
+ void ToggleByteFlag(uint16 index, uint8 offset, uint8 flag);
+ bool HasByteFlag(uint16 index, uint8 offset, uint8 flag) const;
- void ToggleFlag(uint16 index, uint8 offset, uint8 flag)
- {
- if (HasByteFlag(index, offset, flag))
- RemoveByteFlag(index, offset, flag);
- else
- SetByteFlag(index, offset, flag);
- }
-
- bool HasByteFlag(uint16 index, uint8 offset, uint8 flag) const
- {
- ASSERT(index < m_valuesCount || PrintIndexError(index, false));
- ASSERT(offset < 4);
- return (((uint8*)&m_uint32Values[index])[offset] & flag) != 0;
- }
-
- void ApplyModFlag(uint16 index, uint32 flag, bool apply)
- {
- if (apply) SetFlag(index, flag); else RemoveFlag(index, flag);
- }
-
- void SetFlag64(uint16 index, uint64 newFlag)
- {
- uint64 oldval = GetUInt64Value(index);
- uint64 newval = oldval | newFlag;
- SetUInt64Value(index, newval);
- }
-
- void RemoveFlag64(uint16 index, uint64 oldFlag)
- {
- uint64 oldval = GetUInt64Value(index);
- uint64 newval = oldval & ~oldFlag;
- SetUInt64Value(index, newval);
- }
-
- void ToggleFlag64(uint16 index, uint64 flag)
- {
- if (HasFlag64(index, flag))
- RemoveFlag64(index, flag);
- else
- SetFlag64(index, flag);
- }
-
- bool HasFlag64(uint16 index, uint64 flag) const
- {
- ASSERT(index < m_valuesCount || PrintIndexError(index, false));
- return (GetUInt64Value(index) & flag) != 0;
- }
-
- void ApplyModFlag64(uint16 index, uint64 flag, bool apply)
- {
- if (apply) SetFlag64(index, flag); else RemoveFlag64(index, flag);
- }
+ void SetFlag64(uint16 index, uint64 newFlag);
+ void RemoveFlag64(uint16 index, uint64 oldFlag);
+ void ToggleFlag64(uint16 index, uint64 flag);
+ bool HasFlag64(uint16 index, uint64 flag) const;
+ void ApplyModFlag64(uint16 index, uint64 flag, bool apply);
void ClearUpdateMask(bool remove);
@@ -581,68 +486,30 @@ class WorldObject : public Object, public WorldLocation
virtual void Update (uint32 /*time_diff*/) { }
void _Create(uint32 guidlow, HighGuid guidhigh, uint32 phaseMask);
-
- virtual void RemoveFromWorld()
- {
- if (!IsInWorld())
- return;
-
- DestroyForNearbyPlayers();
-
- Object::RemoveFromWorld();
- }
+ virtual void RemoveFromWorld();
void GetNearPoint2D(float &x, float &y, float distance, float absAngle) const;
void GetNearPoint(WorldObject const* searcher, float &x, float &y, float &z, float searcher_size, float distance2d, float absAngle) const;
- void GetClosePoint(float &x, float &y, float &z, float size, float distance2d = 0, float angle = 0) const
- {
- // angle calculated from current orientation
- GetNearPoint(NULL, x, y, z, size, distance2d, GetOrientation() + angle);
- }
+ void GetClosePoint(float &x, float &y, float &z, float size, float distance2d = 0, float angle = 0) const;
void MovePosition(Position &pos, float dist, float angle);
- void GetNearPosition(Position &pos, float dist, float angle)
- {
- GetPosition(&pos);
- MovePosition(pos, dist, angle);
- }
+ void GetNearPosition(Position &pos, float dist, float angle);
void MovePositionToFirstCollision(Position &pos, float dist, float angle);
- void GetFirstCollisionPosition(Position &pos, float dist, float angle)
- {
- GetPosition(&pos);
- MovePositionToFirstCollision(pos, dist, angle);
- }
- void GetRandomNearPosition(Position &pos, float radius)
- {
- GetPosition(&pos);
- MovePosition(pos, radius * (float)rand_norm(), (float)rand_norm() * static_cast<float>(2 * M_PI));
- }
+ void GetFirstCollisionPosition(Position &pos, float dist, float angle);
+ void GetRandomNearPosition(Position &pos, float radius);
+ void GetContactPoint(const WorldObject* obj, float &x, float &y, float &z, float distance2d = CONTACT_DISTANCE) const;
- void GetContactPoint(const WorldObject* obj, float &x, float &y, float &z, float distance2d = CONTACT_DISTANCE) const
- {
- // angle to face `obj` to `this` using distance includes size of `obj`
- GetNearPoint(obj, x, y, z, obj->GetObjectSize(), distance2d, GetAngle(obj));
- }
-
- float GetObjectSize() const
- {
- return (m_valuesCount > UNIT_FIELD_COMBATREACH) ? m_floatValues[UNIT_FIELD_COMBATREACH] : DEFAULT_WORLD_OBJECT_SIZE;
- }
+ float GetObjectSize() const;
void UpdateGroundPositionZ(float x, float y, float &z) const;
void UpdateAllowedPositionZ(float x, float y, float &z) const;
void GetRandomPoint(const Position &srcPos, float distance, float &rand_x, float &rand_y, float &rand_z) const;
- void GetRandomPoint(const Position &srcPos, float distance, Position &pos) const
- {
- float x, y, z;
- GetRandomPoint(srcPos, distance, x, y, z);
- pos.Relocate(x, y, z, GetOrientation());
- }
+ void GetRandomPoint(const Position &srcPos, float distance, Position &pos) const;
uint32 GetInstanceId() const { return m_InstanceId; }
virtual void SetPhaseMask(uint32 newPhaseMask, bool update);
uint32 GetPhaseMask() const { return m_phaseMask; }
- bool InSamePhase(WorldObject const* obj) const { return InSamePhase(obj->GetPhaseMask()); }
+ bool InSamePhase(WorldObject const* obj) const;
bool InSamePhase(uint32 phasemask) const { return (GetPhaseMask() & phasemask); }
uint32 GetZoneId() const;
@@ -656,62 +523,22 @@ class WorldObject : public Object, public WorldLocation
virtual std::string const& GetNameForLocaleIdx(LocaleConstant /*locale_idx*/) const { return m_name; }
- float GetDistance(const WorldObject* obj) const
- {
- float d = GetExactDist(obj) - GetObjectSize() - obj->GetObjectSize();
- return d > 0.0f ? d : 0.0f;
- }
- float GetDistance(const Position &pos) const
- {
- float d = GetExactDist(&pos) - GetObjectSize();
- return d > 0.0f ? d : 0.0f;
- }
- float GetDistance(float x, float y, float z) const
- {
- float d = GetExactDist(x, y, z) - GetObjectSize();
- return d > 0.0f ? d : 0.0f;
- }
- float GetDistance2d(const WorldObject* obj) const
- {
- float d = GetExactDist2d(obj) - GetObjectSize() - obj->GetObjectSize();
- return d > 0.0f ? d : 0.0f;
- }
- float GetDistance2d(float x, float y) const
- {
- float d = GetExactDist2d(x, y) - GetObjectSize();
- return d > 0.0f ? d : 0.0f;
- }
+ float GetDistance(const WorldObject* obj) const;
+ float GetDistance(const Position &pos) const;
+ float GetDistance(float x, float y, float z) const;
+ float GetDistance2d(const WorldObject* obj) const;
+ float GetDistance2d(float x, float y) const;
float GetDistanceZ(const WorldObject* obj) const;
- bool IsSelfOrInSameMap(const WorldObject* obj) const
- {
- if (this == obj)
- return true;
- return IsInMap(obj);
- }
- bool IsInMap(const WorldObject* obj) const
- {
- if (obj)
- return IsInWorld() && obj->IsInWorld() && (GetMap() == obj->GetMap());
- return false;
- }
- bool IsWithinDist3d(float x, float y, float z, float dist) const
- { return IsInDist(x, y, z, dist + GetObjectSize()); }
- bool IsWithinDist3d(const Position* pos, float dist) const
- { return IsInDist(pos, dist + GetObjectSize()); }
- bool IsWithinDist2d(float x, float y, float dist) const
- { return IsInDist2d(x, y, dist + GetObjectSize()); }
- bool IsWithinDist2d(const Position* pos, float dist) const
- { return IsInDist2d(pos, dist + GetObjectSize()); }
+ bool IsSelfOrInSameMap(const WorldObject* obj) const;
+ bool IsInMap(const WorldObject* obj) const;
+ bool IsWithinDist3d(float x, float y, float z, float dist) const;
+ bool IsWithinDist3d(const Position* pos, float dist) const;
+ bool IsWithinDist2d(float x, float y, float dist) const;
+ bool IsWithinDist2d(const Position* pos, float dist) const;
// use only if you will sure about placing both object at same map
- bool IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D = true) const
- {
- return obj && _IsWithinDist(obj, dist2compare, is3D);
- }
- bool IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D = true) const
- {
- return obj && IsInMap(obj) && InSamePhase(obj) && _IsWithinDist(obj, dist2compare, is3D);
- }
+ bool IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D = true) const;
+ bool IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D = true) const;
bool IsWithinLOS(float x, float y, float z) const;
bool IsWithinLOSInMap(const WorldObject* obj) const;
bool GetDistanceOrder(WorldObject const* obj1, WorldObject const* obj2, bool is3D = true) const;
@@ -780,17 +607,7 @@ class WorldObject : public Object, public WorldLocation
ZoneScript* GetZoneScript() const { return m_zoneScript; }
TempSummon* SummonCreature(uint32 id, const Position &pos, TempSummonType spwtype = TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime = 0, uint32 vehId = 0) const;
- TempSummon* SummonCreature(uint32 id, float x, float y, float z, float ang = 0, TempSummonType spwtype = TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime = 0)
- {
- if (!x && !y && !z)
- {
- GetClosePoint(x, y, z, GetObjectSize());
- ang = GetOrientation();
- }
- Position pos;
- pos.Relocate(x, y, z, ang);
- return SummonCreature(id, pos, spwtype, despwtime, 0);
- }
+ TempSummon* SummonCreature(uint32 id, float x, float y, float z, float ang = 0, TempSummonType spwtype = TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime = 0) const;
GameObject* SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime);
Creature* SummonTrigger(float x, float y, float z, float ang, uint32 dur, CreatureAI* (*GetAI)(Creature*) = NULL);
void SummonCreatureGroup(uint8 group, std::list<TempSummon*>* list = NULL);
@@ -878,7 +695,7 @@ class WorldObject : public Object, public WorldLocation
virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D) const;
- bool CanNeverSee(WorldObject const* obj) const { return GetMap() != obj->GetMap() || !InSamePhase(obj); }
+ bool CanNeverSee(WorldObject const* obj) const;
virtual bool CanAlwaysSee(WorldObject const* /*obj*/) const { return false; }
bool CanDetect(WorldObject const* obj, bool ignoreStealth) const;
bool CanDetectInvisibilityOf(WorldObject const* obj) const;