diff -Nur OpenSim.orig/Region/CoreModules/Scripting/DynamicTexture/DynamicTextureModule.cs OpenSim/Region/CoreModules/Scripting/DynamicTexture/DynamicTextureModule.cs --- OpenSim.orig/Region/CoreModules/Scripting/DynamicTexture/DynamicTextureModule.cs 2014-07-20 15:44:29.000000000 +0900 +++ OpenSim/Region/CoreModules/Scripting/DynamicTexture/DynamicTextureModule.cs 2014-07-20 15:44:29.000000000 +0900 @@ -46,6 +46,8 @@ { // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private UUID newTextureID = UUID.Zero; + private const int ALL_SIDES = -1; public const int DISP_EXPIRE = 1; @@ -125,7 +127,7 @@ if (RegisteredScenes.ContainsKey(updater.SimUUID)) { Scene scene = RegisteredScenes[updater.SimUUID]; - UUID newTextureID = updater.DataReceived(texture.Data, scene); + newTextureID = updater.DataReceived(texture.Data, scene); if (ReuseTextures && !updater.BlendWithOldTexture @@ -198,7 +200,7 @@ updater.Url = url; updater.UpdateTimer = updateTimer; updater.UpdaterID = UUID.Random(); - updater.Params = extraParams; + updater.Params = extraParams.Trim().ToLower(); updater.BlendWithOldTexture = SetBlending; updater.FrontAlpha = AlphaValue; updater.Face = face; @@ -212,8 +214,15 @@ } } + newTextureID = UUID.Zero; RenderPlugins[contentType].AsyncConvertUrl(updater.UpdaterID, url, extraParams); - return updater.UpdaterID; + + int lcount = 0; + while (newTextureID==UUID.Zero && lcount<20) { + System.Threading.Thread.Sleep(500); + lcount++; + } + return newTextureID; } return UUID.Zero; } @@ -260,7 +269,7 @@ updater.BodyData = data; updater.UpdateTimer = updateTimer; updater.UpdaterID = UUID.Random(); - updater.Params = extraParams; + updater.Params = extraParams.Trim().ToLower(); updater.BlendWithOldTexture = SetBlending; updater.FrontAlpha = AlphaValue; updater.Face = face; @@ -426,6 +435,10 @@ /// public UUID UpdatePart(SceneObjectPart part, UUID textureID) { + char[] paramDelimiter = {',', ' '}; + string[] prms = Params.Split(paramDelimiter); + if (Array.IndexOf(prms, "noupdatepart")>=0) return UUID.Zero; + UUID oldID; lock (part) diff -Nur OpenSim.orig/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs --- OpenSim.orig/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs 2014-07-20 15:44:29.000000000 +0900 +++ OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs 2014-07-20 15:44:29.000000000 +0900 @@ -495,6 +495,97 @@ if (terrainModule != null) terrainModule.TaintTerrain(); } + + // Fumi.Iseki + public void osTerrainSetByString(string str, double rate) + { + CheckThreatLevel(ThreatLevel.High, "osTerrainSetByString"); + + m_host.AddScriptLPS(1); + if (!World.Permissions.IsAdministrator(m_host.OwnerID)) return; + + int i, j; + + int lnno = (int)(World.Heightmap.Height*rate+1); + double[,] hgt = new double[World.Heightmap.Width, lnno]; + for (i=0; i=lnno) break; + i = 0; + string line = rec.Trim(' '); + foreach(string itm in System.Text.RegularExpressions.Regex.Split(line, " {1,}")) { + if (i>=World.Heightmap.Width) break; + hgt[i, j] = double.Parse(itm); + i++; + } + j++; + } + + for (j=0; j3) return new LSL_Key(UUID.Zero.ToString()); + + IDynamicTextureManager textureManager = World.RequestModuleInterface(); + if (textureManager==null) return new LSL_Key(UUID.Zero.ToString()); + UUID textureID = textureManager.AddDynamicTextureURL(World.RegionInfo.RegionID, m_host.UUID, "image", url, "noUpdatePart", 600); + + // + IEstateModule estate = World.RequestModuleInterface(); + if (estate==null) return new LSL_Key(UUID.Zero.ToString()); + estate.setEstateTerrainBaseTexture(level, textureID); + + return new LSL_Key(textureID.ToString()); + } + + + // Fumi.Iseki + public void osTerrainFill(double height) + { + CheckThreatLevel(ThreatLevel.High, "osTerrainFill"); + + m_host.AddScriptLPS(1); + if (!World.Permissions.IsAdministrator(m_host.OwnerID)) return; + // + for (int j=0; j