Merge branch 'master' into careminster-presence-refactor

This commit is contained in:
Melanie
2010-05-21 03:51:58 +01:00
245 changed files with 6014 additions and 4908 deletions

View File

@@ -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)
{

View File

@@ -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();

View File

@@ -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);