if a NPC is owned, allow access if ownerID matchs parcel owner or it is in the access list. option OS_NPC_OBJECT_GROUP it still needed if access is by group (this option should also work with not owned NPC) NEEDS TESTING, may prove to be a bad solution

LSLKeyTest
UbitUmarov 2016-06-28 23:30:04 +01:00
parent a08c354a07
commit 90b825cda8
3 changed files with 29 additions and 1 deletions

View File

@ -694,7 +694,30 @@ namespace OpenSim.Region.CoreModules.World.Land
if (HasGroupAccess(avatar)) if (HasGroupAccess(avatar))
return false; return false;
return !IsInLandAccessList(avatar); if(IsInLandAccessList(avatar))
return false;
// check for a NPC
ScenePresence sp;
if (!m_scene.TryGetScenePresence(avatar, out sp))
return true;
if(sp==null || !sp.isNPC)
return true;
INPC npccli = (INPC)sp.ControllingClient;
if(npccli== null)
return true;
UUID owner = npccli.Owner;
if(owner == UUID.Zero)
return true;
if (owner == LandData.OwnerID)
return false;
return !IsInLandAccessList(owner);
} }
public bool IsInLandAccessList(UUID avatar) public bool IsInLandAccessList(UUID avatar)

View File

@ -57,6 +57,7 @@ namespace OpenSim.Region.Framework.Interfaces
/// </summary> /// </summary>
bool SenseAsAgent { get; } bool SenseAsAgent { get; }
UUID ActiveGroupId { get; set; } UUID ActiveGroupId { get; set; }
UUID Owner { get; }
} }
public interface INPCModule public interface INPCModule

View File

@ -43,6 +43,10 @@ namespace OpenSim.Region.OptionalModules.World.NPC
public class NPCAvatar : IClientAPI, INPC public class NPCAvatar : IClientAPI, INPC
{ {
public bool SenseAsAgent { get; set; } public bool SenseAsAgent { get; set; }
public UUID Owner
{
get { return m_ownerID;}
}
public delegate void ChatToNPC( public delegate void ChatToNPC(
string message, byte type, Vector3 fromPos, string fromName, string message, byte type, Vector3 fromPos, string fromName,