mirror of
https://github.com/opensim/opensim.git
synced 2026-08-01 06:06:06 +08:00
Merge branch 'master' into careminster-presence-refactor
This commit is contained in:
@@ -1127,7 +1127,89 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
// Routines for creating and managing parcels programmatically
|
||||
public void osParcelJoin(LSL_Vector pos1, LSL_Vector pos2)
|
||||
{
|
||||
CheckThreatLevel(ThreatLevel.High, "osParcelJoin");
|
||||
m_host.AddScriptLPS(1);
|
||||
|
||||
int startx = (int)(pos1.x < pos2.x ? pos1.x : pos2.x);
|
||||
int starty = (int)(pos1.y < pos2.y ? pos1.y : pos2.y);
|
||||
int endx = (int)(pos1.x > pos2.x ? pos1.x : pos2.x);
|
||||
int endy = (int)(pos1.y > pos2.y ? pos1.y : pos2.y);
|
||||
|
||||
World.LandChannel.Join(startx,starty,endx,endy,m_host.OwnerID);
|
||||
}
|
||||
|
||||
public void osParcelSubdivide(LSL_Vector pos1, LSL_Vector pos2)
|
||||
{
|
||||
CheckThreatLevel(ThreatLevel.High, "osParcelSubdivide");
|
||||
m_host.AddScriptLPS(1);
|
||||
|
||||
int startx = (int)(pos1.x < pos2.x ? pos1.x : pos2.x);
|
||||
int starty = (int)(pos1.y < pos2.y ? pos1.y : pos2.y);
|
||||
int endx = (int)(pos1.x > pos2.x ? pos1.x : pos2.x);
|
||||
int endy = (int)(pos1.y > pos2.y ? pos1.y : pos2.y);
|
||||
|
||||
World.LandChannel.Subdivide(startx,starty,endx,endy,m_host.OwnerID);
|
||||
}
|
||||
|
||||
public void osParcelSetDetails(LSL_Vector pos, LSL_List rules)
|
||||
{
|
||||
CheckThreatLevel(ThreatLevel.High, "osParcelSetDetails");
|
||||
m_host.AddScriptLPS(1);
|
||||
|
||||
// Get a reference to the land data and make sure the owner of the script
|
||||
// can modify it
|
||||
|
||||
ILandObject startLandObject = World.LandChannel.GetLandObject((int)pos.x, (int)pos.y);
|
||||
if (startLandObject == null)
|
||||
{
|
||||
OSSLShoutError("There is no land at that location");
|
||||
return;
|
||||
}
|
||||
|
||||
if (! World.Permissions.CanEditParcel(m_host.OwnerID, startLandObject))
|
||||
{
|
||||
OSSLShoutError("You do not have permission to modify the parcel");
|
||||
return;
|
||||
}
|
||||
|
||||
// Create a new land data object we can modify
|
||||
LandData newLand = startLandObject.LandData.Copy();
|
||||
UUID uuid;
|
||||
|
||||
// Process the rules, not sure what the impact would be of changing owner or group
|
||||
for (int idx = 0; idx < rules.Length; )
|
||||
{
|
||||
int code = rules.GetLSLIntegerItem(idx++);
|
||||
string arg = rules.GetLSLStringItem(idx++);
|
||||
switch (code)
|
||||
{
|
||||
case 0:
|
||||
newLand.Name = arg;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
newLand.Description = arg;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
CheckThreatLevel(ThreatLevel.VeryHigh, "osParcelSetDetails");
|
||||
if (UUID.TryParse(arg , out uuid))
|
||||
newLand.OwnerID = uuid;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
CheckThreatLevel(ThreatLevel.VeryHigh, "osParcelSetDetails");
|
||||
if (UUID.TryParse(arg , out uuid))
|
||||
newLand.GroupID = uuid;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
World.LandChannel.UpdateLandObject(newLand.LocalID,newLand);
|
||||
}
|
||||
|
||||
public double osList2Double(LSL_Types.list src, int index)
|
||||
{
|
||||
|
||||
@@ -123,6 +123,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
|
||||
void osWindParamSet(string plugin, string param, float value);
|
||||
float osWindParamGet(string plugin, string param);
|
||||
|
||||
// Parcel commands
|
||||
void osParcelJoin(vector pos1, vector pos2);
|
||||
void osParcelSubdivide(vector pos1, vector pos2);
|
||||
void osParcelSetDetails(vector pos, LSL_List rules);
|
||||
|
||||
string osGetScriptEngineName();
|
||||
string osGetSimulatorVersion();
|
||||
|
||||
@@ -106,6 +106,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||
// return m_OSSL_Functions.osWindParamGet(plugin, param);
|
||||
// }
|
||||
|
||||
public void osParcelJoin(vector pos1, vector pos2)
|
||||
{
|
||||
m_OSSL_Functions.osParcelJoin(pos1,pos2);
|
||||
}
|
||||
|
||||
public void osParcelSubdivide(vector pos1, vector pos2)
|
||||
{
|
||||
m_OSSL_Functions.osParcelSubdivide(pos1, pos2);
|
||||
}
|
||||
|
||||
public void osParcelSetDetails(vector pos, LSL_List rules)
|
||||
{
|
||||
m_OSSL_Functions.osParcelSetDetails(pos,rules);
|
||||
}
|
||||
|
||||
public double osList2Double(LSL_Types.list src, int index)
|
||||
{
|
||||
return m_OSSL_Functions.osList2Double(src, index);
|
||||
|
||||
Reference in New Issue
Block a user