osSetParcelDetails: place hard restrictions on change owner,claimdate (both estate owner or manager) and group (same plus parcel owner that also needes to be a member of the new group); add PARCEL_DETAILS_SEE_AVATARS, PARCEL_DETAILS_ANY_AVATAR_SOUNDS and PARCEL_DETAILS_GROUP_SOUNDS
parent
f5324833ee
commit
c8a9b0321f
|
@ -1606,13 +1606,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
if (!World.Permissions.CanEditParcelProperties(m_host.OwnerID, startLandObject, GroupPowers.LandOptions, false))
|
if (!World.Permissions.CanEditParcelProperties(m_host.OwnerID, startLandObject, GroupPowers.LandOptions, false))
|
||||||
{
|
{
|
||||||
OSSLShoutError("You do not have permission to modify the parcel");
|
OSSLShoutError("script owner does not have permission to modify the parcel");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a new land data object we can modify
|
// Create a new land data object we can modify
|
||||||
LandData newLand = startLandObject.LandData.Copy();
|
LandData newLand = startLandObject.LandData.Copy();
|
||||||
UUID uuid;
|
UUID uuid;
|
||||||
|
EstateSettings es = World.RegionInfo.EstateSettings;
|
||||||
|
|
||||||
|
bool changed = false;
|
||||||
|
|
||||||
// Process the rules, not sure what the impact would be of changing owner or group
|
// Process the rules, not sure what the impact would be of changing owner or group
|
||||||
for (int idx = 0; idx < rules.Length;)
|
for (int idx = 0; idx < rules.Length;)
|
||||||
|
@ -1622,35 +1625,115 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
switch (code)
|
switch (code)
|
||||||
{
|
{
|
||||||
case ScriptBaseClass.PARCEL_DETAILS_NAME:
|
case ScriptBaseClass.PARCEL_DETAILS_NAME:
|
||||||
newLand.Name = arg;
|
if(newLand.Name != arg)
|
||||||
|
{
|
||||||
|
newLand.Name = arg;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ScriptBaseClass.PARCEL_DETAILS_DESC:
|
case ScriptBaseClass.PARCEL_DETAILS_DESC:
|
||||||
newLand.Description = arg;
|
if(newLand.Description != arg)
|
||||||
|
{
|
||||||
|
newLand.Description = arg;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ScriptBaseClass.PARCEL_DETAILS_OWNER:
|
case ScriptBaseClass.PARCEL_DETAILS_OWNER:
|
||||||
CheckThreatLevel(ThreatLevel.VeryHigh, functionName);
|
if(es != null && !es.IsEstateManagerOrOwner(m_host.OwnerID))
|
||||||
if (UUID.TryParse(arg, out uuid))
|
{
|
||||||
newLand.OwnerID = uuid;
|
OSSLError("script owner does not have permission to modify the parcel owner");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (UUID.TryParse(arg, out uuid))
|
||||||
|
{
|
||||||
|
if(newLand.OwnerID != uuid)
|
||||||
|
{
|
||||||
|
changed = true;
|
||||||
|
newLand.OwnerID = uuid;
|
||||||
|
newLand.GroupID = UUID.Zero;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ScriptBaseClass.PARCEL_DETAILS_GROUP:
|
case ScriptBaseClass.PARCEL_DETAILS_GROUP:
|
||||||
CheckThreatLevel(ThreatLevel.VeryHigh, functionName);
|
if(m_host.OwnerID == newLand.OwnerID || es == null || es.IsEstateManagerOrOwner(m_host.OwnerID))
|
||||||
if (UUID.TryParse(arg, out uuid))
|
{
|
||||||
newLand.GroupID = uuid;
|
if (UUID.TryParse(arg, out uuid))
|
||||||
|
{
|
||||||
|
if(newLand.GroupID != uuid)
|
||||||
|
{
|
||||||
|
IGroupsModule groupsModule = m_ScriptEngine.World.RequestModuleInterface<IGroupsModule>();
|
||||||
|
GroupMembershipData member = null;
|
||||||
|
if (groupsModule != null)
|
||||||
|
member = groupsModule.GetMembershipData(uuid, newLand.OwnerID);
|
||||||
|
if (member == null)
|
||||||
|
OSSLError(string.Format("land owner is not member of the new group for parcel"));
|
||||||
|
else
|
||||||
|
{
|
||||||
|
changed = true;
|
||||||
|
newLand.GroupID = uuid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
OSSLError("script owner does not have permission to modify the parcel group");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ScriptBaseClass.PARCEL_DETAILS_CLAIMDATE:
|
case ScriptBaseClass.PARCEL_DETAILS_CLAIMDATE:
|
||||||
CheckThreatLevel(ThreatLevel.VeryHigh, functionName);
|
if(es != null && !es.IsEstateManagerOrOwner(m_host.OwnerID))
|
||||||
newLand.ClaimDate = Convert.ToInt32(arg);
|
{
|
||||||
if (newLand.ClaimDate == 0)
|
OSSLError("script owner does not have permission to modify the parcel CLAIM DATE");
|
||||||
newLand.ClaimDate = Util.UnixTimeSinceEpoch();
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int date = Convert.ToInt32(arg);
|
||||||
|
if (date == 0)
|
||||||
|
date = Util.UnixTimeSinceEpoch();
|
||||||
|
if(newLand.ClaimDate != date)
|
||||||
|
{
|
||||||
|
changed = true;
|
||||||
|
newLand.ClaimDate = date;
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
World.LandChannel.UpdateLandObject(newLand.LocalID,newLand);
|
case ScriptBaseClass.PARCEL_DETAILS_SEE_AVATARS:
|
||||||
|
bool newavs = (Convert.ToInt32(arg) != 0);
|
||||||
|
if(newLand.SeeAVs != newavs)
|
||||||
|
{
|
||||||
|
changed = true;
|
||||||
|
newLand.SeeAVs = newavs;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ScriptBaseClass.PARCEL_DETAILS_ANY_AVATAR_SOUNDS:
|
||||||
|
bool newavsounds = (Convert.ToInt32(arg) != 0);
|
||||||
|
if(newLand.AnyAVSounds != newavsounds)
|
||||||
|
{
|
||||||
|
changed = true;
|
||||||
|
newLand.AnyAVSounds = newavsounds;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ScriptBaseClass.PARCEL_DETAILS_GROUP_SOUNDS:
|
||||||
|
bool newgrpsounds = (Convert.ToInt32(arg) != 0);
|
||||||
|
if(newLand.GroupAVSounds != newgrpsounds)
|
||||||
|
{
|
||||||
|
changed = true;
|
||||||
|
newLand.GroupAVSounds = newgrpsounds;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(changed)
|
||||||
|
World.LandChannel.UpdateLandObject(newLand.LocalID,newLand);
|
||||||
}
|
}
|
||||||
|
|
||||||
public double osList2Double(LSL_Types.list src, int index)
|
public double osList2Double(LSL_Types.list src, int index)
|
||||||
|
|
|
@ -697,7 +697,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
public const int PARCEL_DETAILS_GROUP = 3;
|
public const int PARCEL_DETAILS_GROUP = 3;
|
||||||
public const int PARCEL_DETAILS_AREA = 4;
|
public const int PARCEL_DETAILS_AREA = 4;
|
||||||
public const int PARCEL_DETAILS_ID = 5;
|
public const int PARCEL_DETAILS_ID = 5;
|
||||||
public const int PARCEL_DETAILS_SEE_AVATARS = 6; // not implemented
|
public const int PARCEL_DETAILS_SEE_AVATARS = 6;
|
||||||
|
public const int PARCEL_DETAILS_ANY_AVATAR_SOUNDS = 7;
|
||||||
|
public const int PARCEL_DETAILS_GROUP_SOUNDS = 8;
|
||||||
|
|
||||||
//osSetParcelDetails
|
//osSetParcelDetails
|
||||||
public const int PARCEL_DETAILS_CLAIMDATE = 10;
|
public const int PARCEL_DETAILS_CLAIMDATE = 10;
|
||||||
|
|
|
@ -39,7 +39,6 @@ using OMV_Quaternion = OpenMetaverse.Quaternion;
|
||||||
|
|
||||||
namespace OpenSim.Region.ScriptEngine.Shared
|
namespace OpenSim.Region.ScriptEngine.Shared
|
||||||
{
|
{
|
||||||
[Serializable]
|
|
||||||
public partial class LSL_Types
|
public partial class LSL_Types
|
||||||
{
|
{
|
||||||
// Types are kept is separate .dll to avoid having to add whatever .dll it is in it to script AppDomain
|
// Types are kept is separate .dll to avoid having to add whatever .dll it is in it to script AppDomain
|
||||||
|
@ -526,7 +525,7 @@ namespace OpenSim.Region.ScriptEngine.Shared
|
||||||
}
|
}
|
||||||
|
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class list
|
public class list: MarshalByRefObject
|
||||||
{
|
{
|
||||||
private object[] m_data;
|
private object[] m_data;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue