From 90ccc248e81dcfa31c133a6b35f358dded602fa2 Mon Sep 17 00:00:00 2001 From: alondria Date: Sat, 12 Jan 2008 04:30:47 +0000 Subject: Implements llModifyLand() - Still needs some tweaking to match LL's effect on how much to effect the land. --- .../Compiler/Server_API/LSL_BuiltIn_Commands.cs | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) (limited to 'OpenSim/Region/ScriptEngine') diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs index b7fe241..1d9ca96 100644 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs +++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs @@ -1382,6 +1382,65 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler public void llModifyLand(int action, int brush) { + double dsize; + if (World.PermissionsMngr.CanTerraform(m_host.OwnerID, new LLVector3(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, 0))) + { + switch (brush) + { + case 1: + dsize = 2; + break; + case 2: + dsize = 4; + break; + case 3: + dsize = 8; + break; + default: + if (brush < 0) + { + dsize = (double)(-1 * brush); + } + else + { + LSLError("Invalid brush size"); + dsize = 0; // Should cease execution, but get unassigned local variable dsize on compile. + } + break; + } + switch (action) + { + case 0: + if (World.Terrain.GetHeight((int)m_host.AbsolutePosition.X, (int)m_host.AbsolutePosition.Y) < m_host.AbsolutePosition.Z) + { + World.Terrain.FlattenTerrain(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, dsize, 1); + } + break; + case 1: + if (World.Terrain.GetHeight((int)m_host.AbsolutePosition.X, (int)m_host.AbsolutePosition.Y) < (double)m_host.AbsolutePosition.Z) + { + World.Terrain.RaiseTerrain(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, dsize, 0.1); + } + break; + case 2: + if (World.Terrain.GetHeight((int)m_host.AbsolutePosition.X, (int)m_host.AbsolutePosition.Y) > 0) + { + World.Terrain.LowerTerrain(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, dsize, 1); + } + break; + case 3: + World.Terrain.SmoothTerrain(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, dsize, 1); + break; + case 4: + World.Terrain.NoiseTerrain(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, dsize, 1); + break; + case 5: + World.Terrain.RevertTerrain(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, dsize, 1); + break; + default: + break; + } + } } public void llCollisionSound(string impact_sound, double impact_volume) -- cgit v1.1