aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormegamage <none@none.none>2011-10-13 14:02:07 -0400
committermegamage <none@none.none>2011-10-13 14:02:07 -0400
commitbcc55489f8ba8e27150eec8f1385a2594c50282f (patch)
treeaee65e04c6776af895ae858fd069ce058ef59d9a /src
parent5912e2444de0b73b511ec073aa0cbd38b901295c (diff)
More cleanup of CanSeeOrDetect
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Entities/Creature/Creature.cpp5
-rwxr-xr-xsrc/server/game/Entities/Creature/Creature.h2
-rwxr-xr-xsrc/server/game/Entities/GameObject/GameObject.cpp4
-rwxr-xr-xsrc/server/game/Entities/GameObject/GameObject.h2
-rwxr-xr-xsrc/server/game/Entities/Object/Object.cpp27
-rwxr-xr-xsrc/server/game/Entities/Object/Object.h22
-rwxr-xr-xsrc/server/game/Entities/Player/Player.cpp9
-rwxr-xr-xsrc/server/game/Entities/Player/Player.h4
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp8
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.h4
10 files changed, 37 insertions, 50 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 89f52c066a9..bc43cc58e61 100755
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -1394,11 +1394,8 @@ bool Creature::IsInvisibleDueToDespawn() const
return true;
}
-bool Creature::canSeeAlways(WorldObject const* obj) const
+bool Creature::_CanAlwaysSee(WorldObject const* obj) const
{
- if (Unit::canSeeAlways(obj))
- return true;
-
if (IsAIEnabled && AI()->CanSeeAlways(obj))
return true;
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index a56b91da13a..fa0f866400b 100755
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -753,7 +753,7 @@ class Creature : public Unit, public GridObject<Creature>, public MapCreature
uint32 guid_transport;
bool IsInvisibleDueToDespawn() const;
- bool canSeeAlways(WorldObject const* obj) const;
+ bool _CanAlwaysSee(WorldObject const* obj) const;
private:
//WaypointMovementGenerator vars
uint32 m_waypointID;
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index a0f35bf2ab4..2f353285806 100755
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -843,9 +843,9 @@ void GameObject::SaveRespawnTime()
sObjectMgr->SaveGORespawnTime(m_DBTableGuid, GetInstanceId(), m_respawnTime);
}
-bool GameObject::isAlwaysVisibleFor(WorldObject const* seer) const
+bool GameObject::IsAlwaysVisibleFor(WorldObject const* seer) const
{
- if (WorldObject::isAlwaysVisibleFor(seer))
+ if (WorldObject::IsAlwaysVisibleFor(seer))
return true;
if (IsTransport())
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h
index 459c526ee4d..13b410d7373 100755
--- a/src/server/game/Entities/GameObject/GameObject.h
+++ b/src/server/game/Entities/GameObject/GameObject.h
@@ -752,7 +752,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>
void TriggeringLinkedGameObject(uint32 trapEntry, Unit* target);
- bool isAlwaysVisibleFor(WorldObject const* seer) const;
+ bool IsAlwaysVisibleFor(WorldObject const* seer) const;
bool IsInvisibleDueToDespawn() const;
uint8 getLevelForTarget(WorldObject const* target) const
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 47be25854ba..8de9e6d000c 100755
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -1630,19 +1630,10 @@ bool WorldObject::canSeeOrDetect(WorldObject const* obj, bool ignoreStealth, boo
if (this == obj)
return true;
- if (obj->IsNeverVisible())
+ if (obj->IsNeverVisible() || _CanNeverSee(obj))
return false;
- if (GetMap() != obj->GetMap())
- return false;
-
- if (!InSamePhase(obj))
- return false;
-
- if (obj->isAlwaysVisibleFor(this))
- return true;
-
- if (canSeeAlways(obj))
+ if (obj->IsAlwaysVisibleFor(this) || _CanAlwaysSee(obj))
return true;
bool corpseCheck = false;
@@ -1699,13 +1690,13 @@ bool WorldObject::canSeeOrDetect(WorldObject const* obj, bool ignoreStealth, boo
if (obj->IsInvisibleDueToDespawn())
return false;
- if (!canDetect(obj, ignoreStealth))
+ if (!_CanDetect(obj, ignoreStealth))
return false;
return true;
}
-bool WorldObject::canDetect(WorldObject const* obj, bool ignoreStealth) const
+bool WorldObject::_CanDetect(WorldObject const* obj, bool ignoreStealth) const
{
const WorldObject* seer = this;
@@ -1714,19 +1705,19 @@ bool WorldObject::canDetect(WorldObject const* obj, bool ignoreStealth) const
if (Unit* controller = thisUnit->GetCharmerOrOwner())
seer = controller;
- if (obj->isAlwaysDetectableFor(seer))
+ if (obj->IsAlwaysDetectableFor(seer))
return true;
- if (!seer->canDetectInvisibilityOf(obj))
+ if (!seer->_CanDetectInvisibilityOf(obj))
return false;
- if (!ignoreStealth && !seer->canDetectStealthOf(obj))
+ if (!ignoreStealth && !seer->_CanDetectStealthOf(obj))
return false;
return true;
}
-bool WorldObject::canDetectInvisibilityOf(WorldObject const* obj) const
+bool WorldObject::_CanDetectInvisibilityOf(WorldObject const* obj) const
{
uint32 mask = obj->m_invisibility.GetFlags() & m_invisibilityDetect.GetFlags();
@@ -1757,7 +1748,7 @@ bool WorldObject::canDetectInvisibilityOf(WorldObject const* obj) const
return true;
}
-bool WorldObject::canDetectStealthOf(WorldObject const* obj) const
+bool WorldObject::_CanDetectStealthOf(WorldObject const* obj) const
{
// Combat reach is the minimal distance (both in front and behind),
// and it is also used in the range calculation.
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index faee921a1bb..1570210020c 100755
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -682,7 +682,6 @@ class WorldObject : public Object, public WorldLocation
{ return IsInDist2d(x, y, dist + GetObjectSize()); }
bool IsWithinDist2d(const Position* pos, float dist) const
{ return IsInDist2d(pos, dist + GetObjectSize()); }
- virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D) 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
{
@@ -730,16 +729,10 @@ class WorldObject : public Object, public WorldLocation
virtual void SaveRespawnTime() {}
void AddObjectToRemoveList();
- virtual bool IsNeverVisible() const { return !IsInWorld(); }
- virtual bool isAlwaysVisibleFor(WorldObject const* /*seer*/) const { return false; }
+ virtual bool IsAlwaysVisibleFor(WorldObject const* /*seer*/) const { return false; }
virtual bool IsInvisibleDueToDespawn() const { return false; }
- virtual bool canSeeAlways(WorldObject const* /*obj*/) const { return false; }
- bool canDetect(WorldObject const* obj, bool ignoreStealth) const;
-
- bool canDetectInvisibilityOf(WorldObject const* obj) const;
- bool canDetectStealthOf(WorldObject const* obj) const;
-
- virtual bool isAlwaysDetectableFor(WorldObject const* /*seer*/) const { return false; }
+ //difference from IsAlwaysVisibleFor: 1. after distance check; 2. use owner or charmer as seer
+ virtual bool IsAlwaysDetectableFor(WorldObject const* /*seer*/) const { return false; }
float GetGridActivationRange() const;
float GetVisibilityRange() const;
@@ -846,6 +839,7 @@ class WorldObject : public Object, public WorldLocation
void SetLocationMapId(uint32 _mapId) { m_mapId = _mapId; }
void SetLocationInstanceId(uint32 _instanceId) { m_InstanceId = _instanceId; }
+ virtual bool IsNeverVisible() const { return !IsInWorld(); }
private:
Map* m_currMap; //current object's Map location
@@ -855,6 +849,14 @@ class WorldObject : public Object, public WorldLocation
uint16 m_notifyflags;
uint16 m_executed_notifies;
+
+ virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D) const;
+
+ bool _CanNeverSee(WorldObject const* obj) const { return GetMap() != obj->GetMap() || !InSamePhase(obj); }
+ virtual bool _CanAlwaysSee(WorldObject const* /*obj*/) const { return false; }
+ bool _CanDetect(WorldObject const* obj, bool ignoreStealth) const;
+ bool _CanDetectInvisibilityOf(WorldObject const* obj) const;
+ bool _CanDetectStealthOf(WorldObject const* obj) const;
};
namespace Trinity
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index a5adf1d9371..b491eae96ae 100755
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -21088,11 +21088,8 @@ bool Player::IsNeverVisible() const
return false;
}
-bool Player::canSeeAlways(WorldObject const* obj) const
+bool Player::_CanAlwaysSee(WorldObject const* obj) const
{
- if (Unit::canSeeAlways(obj))
- return true;
-
// Always can see self
if (m_mover == obj)
return true;
@@ -21104,9 +21101,9 @@ bool Player::canSeeAlways(WorldObject const* obj) const
return false;
}
-bool Player::isAlwaysDetectableFor(WorldObject const* seer) const
+bool Player::IsAlwaysDetectableFor(WorldObject const* seer) const
{
- if (Unit::isAlwaysDetectableFor(seer))
+ if (Unit::IsAlwaysDetectableFor(seer))
return true;
if (const Player* seerPlayer = seer->ToPlayer())
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 0910e6ba36d..4e60fcf1bd5 100755
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -2734,9 +2734,9 @@ class Player : public Unit, public GridObject<Player>
Runes *m_runes;
EquipmentSets m_EquipmentSets;
- bool canSeeAlways(WorldObject const* obj) const;
+ bool _CanAlwaysSee(WorldObject const* obj) const;
- bool isAlwaysDetectableFor(WorldObject const* seer) const;
+ bool IsAlwaysDetectableFor(WorldObject const* seer) const;
uint8 m_grantableLevels;
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 6e70469df73..631ea9b7c90 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -12393,9 +12393,9 @@ int32 Unit::ModifyPowerPct(Powers power, float pct, bool apply)
return ModifyPower(power, (int32)amount - (int32)GetMaxPower(power));
}
-bool Unit::isAlwaysVisibleFor(WorldObject const* seer) const
+bool Unit::IsAlwaysVisibleFor(WorldObject const* seer) const
{
- if (WorldObject::isAlwaysVisibleFor(seer))
+ if (WorldObject::IsAlwaysVisibleFor(seer))
return true;
// Always seen by owner
@@ -12406,9 +12406,9 @@ bool Unit::isAlwaysVisibleFor(WorldObject const* seer) const
return false;
}
-bool Unit::isAlwaysDetectableFor(WorldObject const* seer) const
+bool Unit::IsAlwaysDetectableFor(WorldObject const* seer) const
{
- if (WorldObject::isAlwaysDetectableFor(seer))
+ if (WorldObject::IsAlwaysDetectableFor(seer))
return true;
if (HasAuraTypeWithCaster(SPELL_AURA_MOD_STALKED, seer->GetGUID()))
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 41fe6337737..d35298b9963 100755
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -2283,8 +2283,8 @@ class Unit : public WorldObject
uint32 m_unitTypeMask;
- bool isAlwaysVisibleFor(WorldObject const* seer) const;
- bool isAlwaysDetectableFor(WorldObject const* seer) const;
+ bool IsAlwaysVisibleFor(WorldObject const* seer) const;
+ bool IsAlwaysDetectableFor(WorldObject const* seer) const;
private:
bool IsTriggeredAtSpellProcEvent(Unit* pVictim, Aura* aura, SpellInfo const* procSpell, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, bool isVictim, bool active, SpellProcEventEntry const* & spellProcEvent);
bool HandleDummyAuraProc(Unit* pVictim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown);