aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorille <ille@ille>2012-01-08 18:22:46 +0100
committerille <ille@ille>2012-01-08 18:22:46 +0100
commitbaa2252bd31718e93ccc3e97aa81afeecb5ec9c3 (patch)
tree3117fb09caedd90caccee68f9c149a527ba25f61
parentb5a53a72d1e52a25ab5aac429e9d9f793c4df5ba (diff)
implement objectdetection
-rwxr-xr-xsrc/server/game/Entities/GameObject/GameObject.cpp18
-rwxr-xr-xsrc/server/game/Entities/Object/Object.cpp6
2 files changed, 21 insertions, 3 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index df7aa90982e..d2a3bfc884c 100755
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -228,13 +228,13 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map* map, uint32 phaseMa
if (GetGOInfo()->trap.stealthed)
{
m_stealth.AddFlag(STEALTH_TRAP);
- m_stealth.AddValue(STEALTH_TRAP, 300);
+ m_stealth.AddValue(STEALTH_TRAP, 70);
}
if (GetGOInfo()->trap.invisible)
{
m_invisibility.AddFlag(INVISIBILITY_TRAP);
- m_invisibility.AddValue(INVISIBILITY_TRAP, 70);
+ m_invisibility.AddValue(INVISIBILITY_TRAP, 300);
}
break;
@@ -850,6 +850,20 @@ bool GameObject::IsAlwaysVisibleFor(WorldObject const* seer) const
if (IsTransport())
return true;
+ if (!seer)
+ return false;
+
+ // Always seen by owner and friendly units
+ if (uint64 guid = GetOwnerGUID())
+ {
+ if (seer->GetGUID() == guid)
+ return true;
+
+ Unit* owner = GetOwner();
+ if (owner && seer->isType(TYPEMASK_UNIT) && owner->IsFriendlyTo(((Unit*)seer)))
+ return true;
+ }
+
return false;
}
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 2fc4d8493f4..68057d7148a 100755
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -1796,11 +1796,15 @@ bool WorldObject::CanDetectStealthOf(WorldObject const* obj) const
// Level difference: 5 point / level, starting from level 1.
// There may be spells for this and the starting points too, but
- // not in the DBCs of the client.
+ // not in the DBCs of the client.
detectionValue += int32(getLevelForTarget(obj) - 1) * 5;
// Apply modifiers
detectionValue += m_stealthDetect.GetValue(StealthType(i));
+ if (obj->isType(TYPEMASK_GAMEOBJECT))
+ if (Unit* owner = ((GameObject*)obj)->GetOwner())
+ detectionValue -= int32(owner->getLevelForTarget(this) - 1) * 5;
+
detectionValue -= obj->m_stealth.GetValue(StealthType(i));
// Calculate max distance