aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-03-28 16:38:04 +0200
committerShauren <shauren.trinity@gmail.com>2021-03-28 20:22:05 +0200
commitf21270b987211041b95d6befa7192d313692920d (patch)
treea8fc30c2a472ca48d9499e41e1ba03d325a994f9 /src/server/game/Entities
parent1082a6645e96c611b3145b5d6208fc4db6e4b2d3 (diff)
Core/Objects: Refactor private object checks into separate function
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Object/Object.cpp22
-rw-r--r--src/server/game/Entities/Object/Object.h1
2 files changed, 20 insertions, 3 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 009afbbf6b3..55d670b27f2 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -1411,20 +1411,36 @@ float WorldObject::GetSightRange(WorldObject const* target) const
return 0.0f;
}
+bool WorldObject::CheckPrivateObjectOwnerVisibility(WorldObject const* seer) const
+{
+ if (!IsPrivateObject())
+ return true;
+
+ // Owner of this private object
+ if (_privateObjectOwner == seer->GetGUID())
+ return true;
+
+ // Another private object of the same owner
+ if (_privateObjectOwner == seer->GetPrivateObjectOwner())
+ return true;
+
+ return false;
+}
+
bool WorldObject::CanSeeOrDetect(WorldObject const* obj, bool ignoreStealth, bool distanceCheck, bool checkAlert) const
{
if (this == obj)
return true;
- if (!obj->GetPrivateObjectOwner().IsEmpty())
- return GetGUID() == obj->GetPrivateObjectOwner() || GetPrivateObjectOwner() == obj->GetPrivateObjectOwner();
-
if (obj->IsNeverVisibleFor(this) || CanNeverSee(obj))
return false;
if (obj->IsAlwaysVisibleFor(this) || CanAlwaysSee(obj))
return true;
+ if (!obj->CheckPrivateObjectOwnerVisibility(this))
+ return false;
+
bool corpseVisibility = false;
if (distanceCheck)
{
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index 3bd550d992e..f2402bfa6f3 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -599,6 +599,7 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation
bool IsPrivateObject() const { return !_privateObjectOwner.IsEmpty(); }
ObjectGuid GetPrivateObjectOwner() const { return _privateObjectOwner; }
void SetPrivateObjectOwner(ObjectGuid const& owner) { _privateObjectOwner = owner; }
+ bool CheckPrivateObjectOwnerVisibility(WorldObject const* seer) const;
protected:
std::string m_name;