Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
commit
2db6a8ce8f
|
@ -70,4 +70,20 @@ TAGS
|
|||
Makefile.local
|
||||
bin/.version
|
||||
compile.bat
|
||||
|
||||
addon-modules
|
||||
OpenSim/Data/Tests/test-results/
|
||||
OpenSim/Framework/Serialization/Tests/test-results/
|
||||
OpenSim/Framework/Servers/Tests/test-results/
|
||||
OpenSim/Framework/Tests/test-results/
|
||||
OpenSim/Region/ClientStack/Linden/Caps/test-results/
|
||||
OpenSim/Region/ClientStack/Linden/UDP/Tests/test-results/
|
||||
OpenSim/Region/CoreModules/test-results/
|
||||
OpenSim/Region/Framework/test-results/
|
||||
OpenSim/Region/OptionalModules/test-results/
|
||||
OpenSim/Region/Physics/BulletDotNETPlugin/
|
||||
OpenSim/Region/Physics/Manager/test-results/
|
||||
OpenSim/Region/Physics/OdePlugin/Tests/test-results/
|
||||
OpenSim/Region/ScriptEngine/test-results/
|
||||
OpenSim/Tests/Common/test-results/
|
||||
OpenSim/Tests/test-results/
|
||||
test-results/
|
||||
|
|
|
@ -3325,12 +3325,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public void llTargetOmega(LSL_Vector axis, double spinrate, double gain)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
m_host.AngularVelocity = new Vector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate));
|
||||
m_host.ScheduleTerseUpdate();
|
||||
m_host.SendTerseUpdateToAllClients();
|
||||
m_host.ParentGroup.HasGroupChanged = true;
|
||||
TargetOmega(m_host, axis, spinrate, gain);
|
||||
}
|
||||
|
||||
protected void TargetOmega(SceneObjectPart part, LSL_Vector axis, double spinrate, double gain)
|
||||
{
|
||||
part.AngularVelocity = new Vector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate));
|
||||
part.ScheduleTerseUpdate();
|
||||
part.SendTerseUpdateToAllClients();
|
||||
part.ParentGroup.HasGroupChanged = true;
|
||||
}
|
||||
|
||||
public LSL_Integer llGetStartParameter()
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
|
@ -7014,10 +7019,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
|
||||
List<SceneObjectPart> parts = GetLinkParts(linknumber);
|
||||
|
||||
foreach (SceneObjectPart part in parts)
|
||||
SetPrimParams(part, rules);
|
||||
setLinkPrimParams(linknumber, rules);
|
||||
|
||||
ScriptSleep(200);
|
||||
}
|
||||
|
@ -7026,6 +7028,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
|
||||
setLinkPrimParams(linknumber, rules);
|
||||
}
|
||||
|
||||
protected void setLinkPrimParams(int linknumber, LSL_List rules)
|
||||
{
|
||||
List<SceneObjectPart> parts = GetLinkParts(linknumber);
|
||||
|
||||
foreach (SceneObjectPart part in parts)
|
||||
|
@ -7395,6 +7402,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
LSL_Rotation lr = rules.GetQuaternionItem(idx++);
|
||||
SetRot(part, Rot2Quaternion(lr));
|
||||
break;
|
||||
case (int)ScriptBaseClass.PRIM_OMEGA:
|
||||
if (remain < 3)
|
||||
return;
|
||||
LSL_Vector axis = rules.GetVector3Item(idx++);
|
||||
LSL_Float spinrate = rules.GetLSLFloatItem(idx++);
|
||||
LSL_Float gain = rules.GetLSLFloatItem(idx++);
|
||||
TargetOmega(part, axis, (double)spinrate, (double)gain);
|
||||
break;
|
||||
case (int)ScriptBaseClass.PRIM_LINK_TARGET:
|
||||
if (remain < 3) // setting to 3 on the basis that parsing any usage of PRIM_LINK_TARGET that has nothing following it is pointless.
|
||||
return;
|
||||
LSL_Integer new_linknumber = rules.GetLSLIntegerItem(idx++);
|
||||
LSL_List new_rules = rules.GetSublist(idx, -1);
|
||||
setLinkPrimParams((int)new_linknumber, new_rules);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -113,11 +113,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
public List<UUID> AllowedCreators;
|
||||
public List<UUID> AllowedOwners;
|
||||
public List<string> AllowedOwnerClasses;
|
||||
|
||||
public FunctionPerms()
|
||||
{
|
||||
AllowedCreators = new List<UUID>();
|
||||
AllowedOwners = new List<UUID>();
|
||||
AllowedOwnerClasses = new List<string>();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -245,6 +247,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
// Default behavior
|
||||
perms.AllowedOwners = null;
|
||||
perms.AllowedCreators = null;
|
||||
perms.AllowedOwnerClasses = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -265,12 +268,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
foreach (string id in ids)
|
||||
{
|
||||
string current = id.Trim();
|
||||
UUID uuid;
|
||||
|
||||
if (UUID.TryParse(current, out uuid))
|
||||
if (current.ToUpper() == "PARCEL_GROUP_MEMBER" || current.ToUpper() == "PARCEL_OWNER" || current.ToUpper() == "ESTATE_MANAGER" || current.ToUpper() == "ESTATE_OWNER")
|
||||
{
|
||||
if (uuid != UUID.Zero)
|
||||
perms.AllowedOwners.Add(uuid);
|
||||
if (!perms.AllowedOwnerClasses.Contains(current))
|
||||
perms.AllowedOwnerClasses.Add(current.ToUpper());
|
||||
}
|
||||
else
|
||||
{
|
||||
UUID uuid;
|
||||
|
||||
if (UUID.TryParse(current, out uuid))
|
||||
{
|
||||
if (uuid != UUID.Zero)
|
||||
perms.AllowedOwners.Add(uuid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -326,11 +337,55 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
String.Format("{0} permission error. Can't find script in prim inventory.",
|
||||
function));
|
||||
}
|
||||
|
||||
UUID ownerID = ti.OwnerID;
|
||||
|
||||
//OSSL only may be used if objet is in the same group as the parcel
|
||||
if (m_FunctionPerms[function].AllowedOwnerClasses.Contains("PARCEL_GROUP_MEMBER"))
|
||||
{
|
||||
ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y);
|
||||
|
||||
if (land.LandData.GroupID == ti.GroupID && land.LandData.GroupID != UUID.Zero)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//Only Parcelowners may use the function
|
||||
if (m_FunctionPerms[function].AllowedOwnerClasses.Contains("PARCEL_OWNER"))
|
||||
{
|
||||
ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y);
|
||||
|
||||
if (land.LandData.OwnerID == ownerID)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//Only Estate Managers may use the function
|
||||
if (m_FunctionPerms[function].AllowedOwnerClasses.Contains("ESTATE_MANAGER"))
|
||||
{
|
||||
//Only Estate Managers may use the function
|
||||
if (World.RegionInfo.EstateSettings.IsEstateManager(ownerID) && World.RegionInfo.EstateSettings.EstateOwner != ownerID)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//Only regionowners may use the function
|
||||
if (m_FunctionPerms[function].AllowedOwnerClasses.Contains("ESTATE_OWNER"))
|
||||
{
|
||||
if (World.RegionInfo.EstateSettings.EstateOwner == ownerID)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!m_FunctionPerms[function].AllowedCreators.Contains(ti.CreatorID))
|
||||
OSSLError(
|
||||
String.Format("{0} permission denied. Script creator is not in the list of users allowed to execute this function and prim owner also has no permission.",
|
||||
function));
|
||||
if (ti.CreatorID != ti.OwnerID)
|
||||
if (ti.CreatorID != ownerID)
|
||||
{
|
||||
if ((ti.CurrentPermissions & (uint)PermissionMask.Modify) != 0)
|
||||
OSSLError(
|
||||
|
|
|
@ -321,6 +321,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
|||
public const int PRIM_NAME = 27;
|
||||
public const int PRIM_DESC = 28;
|
||||
public const int PRIM_ROT_LOCAL = 29;
|
||||
public const int PRIM_OMEGA = 32;
|
||||
public const int PRIM_LINK_TARGET = 34;
|
||||
public const int PRIM_TEXGEN_DEFAULT = 0;
|
||||
public const int PRIM_TEXGEN_PLANAR = 1;
|
||||
|
||||
|
|
|
@ -617,6 +617,13 @@
|
|||
|
||||
; Comma separated list of UUIDS allows the function for that list of UUIDS
|
||||
; Allow_osSetRegionWaterHeight = 888760cb-a3cf-43ac-8ea4-8732fd3ee2bb
|
||||
|
||||
; Comma separated list of owner classes that allow the function for a particular class of owners. Choices are
|
||||
; - PARCEL_GROUP_MEMBER: allow if objectgroup is the same group as the parcel
|
||||
; - PARCEL_OWNER: allow if the objectowner is parcelowner
|
||||
; - ESTATE_MANAGER: allow if the object owner is a estate manager
|
||||
; - ESTATE_OWNER: allow if objectowner is estateowner
|
||||
; Allow_osSetRegionWaterHeight = 888760cb-a3cf-43ac-8ea4-8732fd3ee2bb, PARCEL_OWNER, ESTATE_OWNER>, ...
|
||||
|
||||
; You can also use script creators as the uuid
|
||||
; Creators_osSetRegionWaterHeight = <uuid>, ...
|
||||
|
|
|
@ -1196,6 +1196,13 @@
|
|||
|
||||
; Comma separated list of UUIDS allows the function for that list of UUIDS
|
||||
; Allow_osSetRegionWaterHeight = 888760cb-a3cf-43ac-8ea4-8732fd3ee2bb
|
||||
|
||||
; Comma separated list of owner classes that allow the function for a particular class of owners. Choices are
|
||||
; - PARCEL_GROUP_MEMBER: allow if objectgroup is the same group as the parcel
|
||||
; - PARCEL_OWNER: allow if the objectowner is parcelowner
|
||||
; - ESTATE_MANAGER: allow if the object owner is a estate manager
|
||||
; - ESTATE_OWNER: allow if objectowner is estateowner
|
||||
; Allow_osSetRegionWaterHeight = 888760cb-a3cf-43ac-8ea4-8732fd3ee2bb, PARCEL_OWNER, ESTATE_OWNER>, ...
|
||||
|
||||
; You can also use script creators as the uuid
|
||||
; Creators_osSetRegionWaterHeight = <uuid>, ...
|
||||
|
|
Loading…
Reference in New Issue