diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Player.cpp | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp index addabe73eeb..0078ed535d3 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -17637,7 +17637,7 @@ bool Player::canSeeOrDetect(Unit const* u, bool detect, bool inVisibleList, bool return false; } - if(u->GetVisibility() == VISIBILITY_OFF || u->m_invisibilityMask ) + if(u->GetVisibility() == VISIBILITY_OFF) { // GMs see any players, not higher GMs and all units if(isGameMaster()) @@ -17650,13 +17650,25 @@ bool Player::canSeeOrDetect(Unit const* u, bool detect, bool inVisibleList, bool return false; } - // player see other player with stealth/invisibility only if he in same group or raid or same team (raid/team case dependent from conf setting) - if((m_invisibilityMask || u->m_invisibilityMask) && !canDetectInvisibilityOf(u)) - if(!(u->GetTypeId()==TYPEID_PLAYER && !IsHostileTo(u) && IsGroupVisibleFor(((Player*)u)))) - return false; + // GM's can see everyone with invisibilitymask with less or equal security level + if(m_invisibilityMask || u->m_invisibilityMask) + { + if(isGameMaster()) + { + if(u->GetTypeId() == TYPEID_PLAYER) + return ((Player*)u)->GetSession()->GetSecurity() <= GetSession()->GetSecurity(); + else + return true; + } + + // player see other player with stealth/invisibility only if he in same group or raid or same team (raid/team case dependent from conf setting) + if(!canDetectInvisibilityOf(u)) + if(!(u->GetTypeId()==TYPEID_PLAYER && !IsHostileTo(u) && IsGroupVisibleFor(((Player*)u)))) + return false; + } // GM invisibility checks early, invisibility if any detectable, so if not stealth then visible - if(u->GetVisibility() == VISIBILITY_GROUP_STEALTH) + if(u->GetVisibility() == VISIBILITY_GROUP_STEALTH && !isGameMaster()) { // if player is dead then he can't detect anyone in any cases //do not know what is the use of this detect |