From e15ae448c31989f105554be3a770f4c7c9f2737f Mon Sep 17 00:00:00 2001 From: Anubisss Date: Mon, 13 Apr 2009 18:07:26 +0200 Subject: Better way for allow GMs(in gm mode on) to see invisible or stealthed players by Machiavelli. Thank you. --HG-- branch : trunk --- src/game/Player.cpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'src') 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 -- cgit v1.2.3