From 78fd487a705c91720991a7572b860567f36366c4 Mon Sep 17 00:00:00 2001
From: Snoopy Pfeffer
Date: Tue, 10 Apr 2012 21:49:43 +0200
Subject: New OS scripting functions osSetTerrainTexture and osSetTerrainHeight
as originally proposed in SL Jira
(https://jira.secondlife.com/browse/SVC-244).
---
.../World/Estate/EstateManagementModule.cs | 15 +++++-
.../Region/Framework/Interfaces/IEstateModule.cs | 3 ++
.../Shared/Api/Implementation/OSSL_Api.cs | 55 ++++++++++++++++++++++
.../ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs | 3 ++
.../ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs | 10 ++++
5 files changed, 84 insertions(+), 2 deletions(-)
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
index fc217b0..124f01c 100644
--- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
@@ -157,12 +157,18 @@ namespace OpenSim.Region.CoreModules.World.Estate
sendRegionInfoPacketToAll();
}
- public void setEstateTerrainBaseTexture(IClientAPI remoteClient, int corner, UUID texture)
+ public void setEstateTerrainBaseTexture(int level, UUID texture)
+ {
+ setEstateTerrainBaseTexture(null, level, texture);
+ sendRegionHandshakeToAll();
+ }
+
+ public void setEstateTerrainBaseTexture(IClientAPI remoteClient, int level, UUID texture)
{
if (texture == UUID.Zero)
return;
- switch (corner)
+ switch (level)
{
case 0:
Scene.RegionInfo.RegionSettings.TerrainTexture1 = texture;
@@ -182,6 +188,11 @@ namespace OpenSim.Region.CoreModules.World.Estate
sendRegionInfoPacketToAll();
}
+ public void setEstateTerrainTextureHeights(int corner, float lowValue, float highValue)
+ {
+ setEstateTerrainTextureHeights(null, corner, lowValue, highValue);
+ }
+
public void setEstateTerrainTextureHeights(IClientAPI client, int corner, float lowValue, float highValue)
{
switch (corner)
diff --git a/OpenSim/Region/Framework/Interfaces/IEstateModule.cs b/OpenSim/Region/Framework/Interfaces/IEstateModule.cs
index 721f0ee..15cd238 100644
--- a/OpenSim/Region/Framework/Interfaces/IEstateModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IEstateModule.cs
@@ -45,5 +45,8 @@ namespace OpenSim.Region.Framework.Interfaces
/// Tell all clients about the current state of the region (terrain textures, water height, etc.).
///
void sendRegionHandshakeToAll();
+
+ void setEstateTerrainBaseTexture(int level, UUID texture);
+ void setEstateTerrainTextureHeights(int corner, float lowValue, float highValue);
}
}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index a5dcba4..339166b 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -3049,5 +3049,60 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return ScriptBaseClass.TRUE;
}
+
+ ///
+ /// Sets terrain estate texture
+ ///
+ ///
+ ///
+ ///
+ public void osSetTerrainTexture(int level, LSL_Key texture)
+ {
+ CheckThreatLevel(ThreatLevel.High, "osSetTerrainTexture");
+
+ m_host.AddScriptLPS(1);
+ //Check to make sure that the script's owner is the estate manager/master
+ //World.Permissions.GenericEstatePermission(
+ if (World.Permissions.IsGod(m_host.OwnerID))
+ {
+ if (level < 0 || level > 3)
+ return;
+
+ UUID textureID = new UUID();
+ if (!UUID.TryParse(texture, out textureID))
+ return;
+
+ // estate module is required
+ IEstateModule estate = World.RequestModuleInterface();
+ if (estate != null)
+ estate.setEstateTerrainBaseTexture(level, textureID);
+ }
+ }
+
+ ///
+ /// Sets terrain heights of estate
+ ///
+ ///
+ ///
+ ///
+ ///
+ public void osSetTerrainTextureHeight(int corner, double low, double high)
+ {
+ CheckThreatLevel(ThreatLevel.High, "osSetTerrainTextureHeight");
+
+ m_host.AddScriptLPS(1);
+ //Check to make sure that the script's owner is the estate manager/master
+ //World.Permissions.GenericEstatePermission(
+ if (World.Permissions.IsGod(m_host.OwnerID))
+ {
+ if (corner < 0 || corner > 3)
+ return;
+
+ // estate module is required
+ IEstateModule estate = World.RequestModuleInterface();
+ if (estate != null)
+ estate.setEstateTerrainTextureHeights(corner, (float)low, (float)high);
+ }
+ }
}
}
\ No newline at end of file
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
index 30bd3ef..545bbee 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
@@ -234,5 +234,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
LSL_Integer osInviteToGroup(LSL_Key agentId);
LSL_Integer osEjectFromGroup(LSL_Key agentId);
+
+ void osSetTerrainTexture(int level, LSL_Key texture);
+ void osSetTerrainTextureHeight(int corner, double low, double high);
}
}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
index 680cefb4..b94b9bf 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
@@ -878,5 +878,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
{
return m_OSSL_Functions.osEjectFromGroup(agentId);
}
+
+ public void osSetTerrainTexture(int level, LSL_Key texture)
+ {
+ m_OSSL_Functions.osSetTerrainTexture(level, texture);
+ }
+
+ public void osSetTerrainTextureHeight(int corner, double low, double high)
+ {
+ m_OSSL_Functions.osSetTerrainTextureHeight(corner, low, high);
+ }
}
}
--
cgit v1.1