diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 255 | ||||
-rw-r--r-- | src/server/game/Entities/Object/Object.h | 265 |
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; |