mirror of
https://github.com/opensim/opensim.git
synced 2024-02-19 18:22:47 +00:00
Compare commits
4 Commits
00e9e3c77a
...
4b99381a0d
Author | SHA1 | Date | |
---|---|---|---|
|
4b99381a0d | ||
|
e31ad4869c | ||
|
fbdb6c420f | ||
|
2e26b8a8bb |
494
OpenSim/Region/Framework/Scenes/LinksetData.cs
Normal file
494
OpenSim/Region/Framework/Scenes/LinksetData.cs
Normal file
|
@ -0,0 +1,494 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) Contributors, http://opensimulator.org/
|
||||||
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of the OpenSimulator Project nor the
|
||||||
|
* names of its contributors may be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
//using log4net;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
namespace OpenSim.Region.Framework.Scenes
|
||||||
|
{
|
||||||
|
public class LinksetData
|
||||||
|
{
|
||||||
|
public int m_MemoryLimit;
|
||||||
|
public int m_MemoryUsed;
|
||||||
|
private readonly object linksetDataLock = new();
|
||||||
|
public Dictionary<string, LinksetDataEntry> Data;
|
||||||
|
|
||||||
|
public LinksetData(int limit)
|
||||||
|
{
|
||||||
|
Data = new Dictionary<string, LinksetDataEntry>();
|
||||||
|
|
||||||
|
m_MemoryLimit = limit;
|
||||||
|
m_MemoryUsed = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LinksetData(int limit, int used)
|
||||||
|
{
|
||||||
|
Data = new Dictionary<string, LinksetDataEntry>();
|
||||||
|
|
||||||
|
m_MemoryLimit = limit;
|
||||||
|
m_MemoryUsed = used;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LinksetData Copy()
|
||||||
|
{
|
||||||
|
lock (linksetDataLock)
|
||||||
|
{
|
||||||
|
var copy = new LinksetData(m_MemoryLimit, m_MemoryUsed);
|
||||||
|
foreach (var entry in Data)
|
||||||
|
{
|
||||||
|
LinksetDataEntry val = entry.Value.Copy();
|
||||||
|
copy.Data[entry.Key] = val;
|
||||||
|
}
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds or updates a entry to linkset data with optional password
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>
|
||||||
|
/// return values must match values expected by LSL
|
||||||
|
/// </returns>
|
||||||
|
public int AddOrUpdate(string key, string value, string pass)
|
||||||
|
{
|
||||||
|
int deltaMem;
|
||||||
|
lock (linksetDataLock)
|
||||||
|
{
|
||||||
|
if (Data.TryGetValue(key, out LinksetDataEntry entry))
|
||||||
|
{
|
||||||
|
if (!entry.CheckPassword(pass))
|
||||||
|
return 3;
|
||||||
|
|
||||||
|
if (entry.Value == value)
|
||||||
|
return 5;
|
||||||
|
|
||||||
|
deltaMem = value.Length - entry.Value.Length;
|
||||||
|
if ((m_MemoryUsed + deltaMem) > m_MemoryLimit)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
m_MemoryUsed += deltaMem;
|
||||||
|
if(m_MemoryUsed < 0)
|
||||||
|
m_MemoryUsed = 0;
|
||||||
|
|
||||||
|
entry.Value = value;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
deltaMem = value.Length + key.Length;
|
||||||
|
if (!string.IsNullOrEmpty(pass))
|
||||||
|
deltaMem += pass.Length;
|
||||||
|
|
||||||
|
if ((m_MemoryUsed + deltaMem) > m_MemoryLimit)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
m_MemoryUsed += deltaMem;
|
||||||
|
Data[key] = new LinksetDataEntry()
|
||||||
|
{
|
||||||
|
Value = value,
|
||||||
|
Password = pass
|
||||||
|
};
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int AddOrUpdate(string key, string value)
|
||||||
|
{
|
||||||
|
int deltaMem;
|
||||||
|
lock (linksetDataLock)
|
||||||
|
{
|
||||||
|
if (Data.TryGetValue(key, out LinksetDataEntry entry))
|
||||||
|
{
|
||||||
|
if (entry.IsProtected)
|
||||||
|
return 3;
|
||||||
|
|
||||||
|
if (entry.Value == value)
|
||||||
|
return 5;
|
||||||
|
|
||||||
|
deltaMem = value.Length - entry.Value.Length;
|
||||||
|
if ((m_MemoryUsed + deltaMem) > m_MemoryLimit)
|
||||||
|
return 1;
|
||||||
|
entry.Value = value;
|
||||||
|
m_MemoryUsed += deltaMem;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
deltaMem = value.Length + key.Length;
|
||||||
|
if ((m_MemoryUsed + deltaMem) > m_MemoryLimit)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
m_MemoryUsed += deltaMem;
|
||||||
|
Data[key] = new LinksetDataEntry()
|
||||||
|
{
|
||||||
|
Value = value,
|
||||||
|
Password = null
|
||||||
|
};
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deletes a named key from the key value store
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="key">The key value we're removing</param>
|
||||||
|
/// <param name="pass">The password for a protected field (or string.Empty if not protected)</param>
|
||||||
|
/// <returns>
|
||||||
|
/// return values must match values expected by LSL
|
||||||
|
/// </returns>
|
||||||
|
public int Remove(string key, string pass)
|
||||||
|
{
|
||||||
|
lock (linksetDataLock)
|
||||||
|
{
|
||||||
|
if (Data.Count <= 0)
|
||||||
|
return 4;
|
||||||
|
|
||||||
|
if (!Data.TryGetValue(key, out LinksetDataEntry entry))
|
||||||
|
return 4;
|
||||||
|
|
||||||
|
if (!entry.CheckPassword(pass))
|
||||||
|
return 3;
|
||||||
|
|
||||||
|
Data.Remove(key);
|
||||||
|
|
||||||
|
m_MemoryUsed -= key.Length + entry.Value.Length;
|
||||||
|
if (!string.IsNullOrEmpty(entry.Password))
|
||||||
|
m_MemoryUsed -= entry.Password.Length;
|
||||||
|
if (m_MemoryUsed < 0)
|
||||||
|
m_MemoryUsed = 0;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public int Remove(string key)
|
||||||
|
{
|
||||||
|
lock (linksetDataLock)
|
||||||
|
{
|
||||||
|
if (Data.Count <= 0)
|
||||||
|
return 4;
|
||||||
|
|
||||||
|
if(string.IsNullOrEmpty(key))
|
||||||
|
return 4;
|
||||||
|
|
||||||
|
if (!Data.TryGetValue(key, out LinksetDataEntry entry))
|
||||||
|
return 4;
|
||||||
|
|
||||||
|
if (entry.IsProtected)
|
||||||
|
return 3;
|
||||||
|
|
||||||
|
Data.Remove(key);
|
||||||
|
|
||||||
|
m_MemoryUsed -= key.Length + entry.Value.Length;
|
||||||
|
if (m_MemoryUsed < 0)
|
||||||
|
m_MemoryUsed = 0;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Get(string key, string pass)
|
||||||
|
{
|
||||||
|
lock (linksetDataLock)
|
||||||
|
{
|
||||||
|
return (Data.TryGetValue(key, out LinksetDataEntry entry) && entry.CheckPassword(pass)) ? entry.Value : string.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Get(string key)
|
||||||
|
{
|
||||||
|
lock (linksetDataLock)
|
||||||
|
{
|
||||||
|
return (Data.TryGetValue(key, out LinksetDataEntry entry) && entry.IsNotProtected) ? entry.Value : string.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public bool HasData()
|
||||||
|
{
|
||||||
|
return Data.Count > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public int Count()
|
||||||
|
{
|
||||||
|
return Data.Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public int Free()
|
||||||
|
{
|
||||||
|
int free = m_MemoryLimit - m_MemoryUsed;
|
||||||
|
return free > 0 ? free : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public int Used()
|
||||||
|
{
|
||||||
|
return m_MemoryUsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string[] RemoveByPattern(string pattern, string pass, out int notDeleted)
|
||||||
|
{
|
||||||
|
notDeleted = 0;
|
||||||
|
List<string> ret;
|
||||||
|
|
||||||
|
lock (linksetDataLock)
|
||||||
|
{
|
||||||
|
if (Data.Count <= 0)
|
||||||
|
return Array.Empty<string>();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ret = new List<string>();
|
||||||
|
Regex reg = new(pattern, RegexOptions.CultureInvariant, TimeSpan.FromMilliseconds(1));
|
||||||
|
|
||||||
|
foreach (var kvp in Data)
|
||||||
|
{
|
||||||
|
if (reg.IsMatch(kvp.Key))
|
||||||
|
{
|
||||||
|
if (kvp.Value.CheckPassword(pass))
|
||||||
|
{
|
||||||
|
int mem = kvp.Value.Value.Length + kvp.Key.Length;
|
||||||
|
if(kvp.Value.IsProtected)
|
||||||
|
mem += kvp.Value.Password.Length;
|
||||||
|
m_MemoryUsed -= mem;
|
||||||
|
ret.Add(kvp.Key);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
notDeleted++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
notDeleted = 0;
|
||||||
|
return Array.Empty<string>();
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (string k in ret)
|
||||||
|
Data.Remove(k);
|
||||||
|
|
||||||
|
if (m_MemoryUsed < 0)
|
||||||
|
m_MemoryUsed = 0;
|
||||||
|
return ret.ToArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public int CountByPattern(string pattern)
|
||||||
|
{
|
||||||
|
lock (linksetDataLock)
|
||||||
|
{
|
||||||
|
if (Data.Count <= 0)
|
||||||
|
return 0;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Regex reg = new(pattern, RegexOptions.CultureInvariant, TimeSpan.FromMilliseconds(1));
|
||||||
|
|
||||||
|
int ret = 0;
|
||||||
|
foreach (string k in Data.Keys)
|
||||||
|
{
|
||||||
|
if (reg.IsMatch(k))
|
||||||
|
ret++;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string[] ListKeysByPatttern(string pattern, int start, int count)
|
||||||
|
{
|
||||||
|
List<string> lkeys;
|
||||||
|
lock (linksetDataLock)
|
||||||
|
{
|
||||||
|
if (Data.Count <= 0 || start >= Data.Count)
|
||||||
|
return Array.Empty<string>();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Regex reg = new(pattern, RegexOptions.CultureInvariant, TimeSpan.FromMilliseconds(1));
|
||||||
|
lkeys = new(Data.Count);
|
||||||
|
foreach (string k in Data.Keys)
|
||||||
|
{
|
||||||
|
if (reg.IsMatch(k))
|
||||||
|
lkeys.Add(k);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return Array.Empty<string>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (lkeys.Count == 0)
|
||||||
|
return Array.Empty<string>();
|
||||||
|
|
||||||
|
lkeys.Sort();
|
||||||
|
|
||||||
|
if (start < 0)
|
||||||
|
start = 0;
|
||||||
|
if (count < 1 || start + count > lkeys.Count)
|
||||||
|
count = lkeys.Count - start;
|
||||||
|
List<string> result = lkeys.GetRange(start, count);
|
||||||
|
return result.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string[] ListKeys(int start, int count)
|
||||||
|
{
|
||||||
|
string[] keys;
|
||||||
|
lock (linksetDataLock)
|
||||||
|
{
|
||||||
|
if (Data.Count <= 0 || start >= Data.Count)
|
||||||
|
return Array.Empty<string>();
|
||||||
|
|
||||||
|
keys = new string[Data.Count];
|
||||||
|
Data.Keys.CopyTo(keys, 0);
|
||||||
|
}
|
||||||
|
Array.Sort(keys);
|
||||||
|
if (start < 0)
|
||||||
|
start = 0;
|
||||||
|
if (count < 1)
|
||||||
|
return keys[start..];
|
||||||
|
int end = start + count;
|
||||||
|
if (end >= keys.Length)
|
||||||
|
return keys[start..];
|
||||||
|
return keys[start..end];
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Merge the linksetData present in another Linkset into this one.
|
||||||
|
/// If a key is present in our linksetData it wins, dont overide it.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="otherLinkset"></param>
|
||||||
|
public void MergeOther(LinksetData otherLinksetData)
|
||||||
|
{
|
||||||
|
if (otherLinksetData is null || otherLinksetData.Data is null || otherLinksetData.Count() == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
lock (linksetDataLock)
|
||||||
|
{
|
||||||
|
if(m_MemoryUsed + otherLinksetData.Used() < m_MemoryLimit)
|
||||||
|
{
|
||||||
|
foreach (var kvp in otherLinksetData.Data)
|
||||||
|
{
|
||||||
|
if (Data.TryAdd(kvp.Key, kvp.Value))
|
||||||
|
{
|
||||||
|
m_MemoryUsed += kvp.Key.Length + kvp.Value.Value.Length;
|
||||||
|
if (!string.IsNullOrEmpty(kvp.Value.Password))
|
||||||
|
m_MemoryUsed += kvp.Value.Password.Length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SortedList<string,LinksetDataEntry> otherOrdered = new(otherLinksetData.Data);
|
||||||
|
foreach (var kvp in otherOrdered)
|
||||||
|
{
|
||||||
|
int mem = kvp.Key.Length + kvp.Value.Value.Length;
|
||||||
|
if (!string.IsNullOrEmpty(kvp.Value.Password))
|
||||||
|
mem += kvp.Value.Password.Length;
|
||||||
|
if (m_MemoryUsed + mem >= m_MemoryLimit)
|
||||||
|
return;
|
||||||
|
if (Data.TryAdd(kvp.Key, kvp.Value))
|
||||||
|
{
|
||||||
|
m_MemoryUsed += mem;
|
||||||
|
if (!string.IsNullOrEmpty(kvp.Value.Password))
|
||||||
|
m_MemoryUsed += kvp.Value.Password.Length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
otherLinksetData.Data = null;
|
||||||
|
otherLinksetData.m_MemoryUsed = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ResetLinksetData - clear the list and update the accounting.
|
||||||
|
/// </summary>
|
||||||
|
public void ResetLinksetData()
|
||||||
|
{
|
||||||
|
lock (linksetDataLock)
|
||||||
|
{
|
||||||
|
if (Data.Count <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Data.Clear();
|
||||||
|
m_MemoryUsed = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string SerializeLinksetData()
|
||||||
|
{
|
||||||
|
lock (linksetDataLock)
|
||||||
|
{
|
||||||
|
return JsonSerializer.Serialize<Dictionary<string, LinksetDataEntry>>(Data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class LinksetDataEntry
|
||||||
|
{
|
||||||
|
public string Password;
|
||||||
|
public string Value;
|
||||||
|
|
||||||
|
public LinksetDataEntry() { }
|
||||||
|
public LinksetDataEntry(string value, string password)
|
||||||
|
{
|
||||||
|
Value = value;
|
||||||
|
Password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public bool CheckPassword(string pass)
|
||||||
|
{
|
||||||
|
// A undocumented caveat for LinksetData appears to be that even for unprotected values,
|
||||||
|
// if a pass is provided, it is still treated as protected
|
||||||
|
return string.IsNullOrEmpty(Password) || (Password == pass);
|
||||||
|
}
|
||||||
|
|
||||||
|
public LinksetDataEntry Copy()
|
||||||
|
{
|
||||||
|
return new LinksetDataEntry
|
||||||
|
{
|
||||||
|
Password = Password,
|
||||||
|
Value = Value
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsProtected
|
||||||
|
{
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
get { return !string.IsNullOrEmpty(Password); }
|
||||||
|
}
|
||||||
|
public bool IsNotProtected
|
||||||
|
{
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
get { return string.IsNullOrEmpty(Password); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -237,6 +237,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
///
|
///
|
||||||
public int m_linksetPhysCapacity = 0;
|
public int m_linksetPhysCapacity = 0;
|
||||||
|
|
||||||
|
public int m_LinkSetDataLimit = 32 * 1024;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// When placed outside the region's border, do we transfer the objects or
|
/// When placed outside the region's border, do we transfer the objects or
|
||||||
/// do we keep simulating them here?
|
/// do we keep simulating them here?
|
||||||
|
@ -984,7 +986,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_persistAfter = startupConfig.GetLong("MaximumTimeBeforePersistenceConsidered", DEFAULT_MAX_TIME_FOR_PERSISTENCE);
|
m_persistAfter = startupConfig.GetLong("MaximumTimeBeforePersistenceConsidered", DEFAULT_MAX_TIME_FOR_PERSISTENCE);
|
||||||
m_persistAfter *= 10000000;
|
m_persistAfter *= 10000000;
|
||||||
|
|
||||||
m_defaultScriptEngine = startupConfig.GetString("DefaultScriptEngine", "XEngine");
|
m_defaultScriptEngine = startupConfig.GetString("DefaultScriptEngine", "YEngine");
|
||||||
m_log.InfoFormat("[SCENE]: Default script engine {0}", m_defaultScriptEngine);
|
m_log.InfoFormat("[SCENE]: Default script engine {0}", m_defaultScriptEngine);
|
||||||
|
|
||||||
m_strictAccessControl = startupConfig.GetBoolean("StrictAccessControl", m_strictAccessControl);
|
m_strictAccessControl = startupConfig.GetBoolean("StrictAccessControl", m_strictAccessControl);
|
||||||
|
@ -1064,6 +1066,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_update_terrain = startupConfig.GetInt("UpdateTerrainEveryNFrames", m_update_terrain);
|
m_update_terrain = startupConfig.GetInt("UpdateTerrainEveryNFrames", m_update_terrain);
|
||||||
m_update_temp_cleaning = startupConfig.GetInt("UpdateTempCleaningEveryNSeconds", m_update_temp_cleaning);
|
m_update_temp_cleaning = startupConfig.GetInt("UpdateTempCleaningEveryNSeconds", m_update_temp_cleaning);
|
||||||
|
|
||||||
|
string[] possibleScriptConfigSections = new string[] { "YEngine", "Xengine", "Scripts" };
|
||||||
|
m_LinkSetDataLimit = Util.GetConfigVarFromSections<int>(config, "LinksetDataLimit", possibleScriptConfigSections, m_LinkSetDataLimit);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Region Config
|
#endregion Region Config
|
||||||
|
|
|
@ -618,6 +618,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public uint ParentID;
|
public uint ParentID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LinksetData LinksetData;
|
||||||
|
|
||||||
public bool inTransit = false;
|
public bool inTransit = false;
|
||||||
private delegate SceneObjectGroup SOGCrossDelegate(SceneObjectGroup sog,Vector3 pos, TeleportObjectData tpData);
|
private delegate SceneObjectGroup SOGCrossDelegate(SceneObjectGroup sog,Vector3 pos, TeleportObjectData tpData);
|
||||||
|
@ -2526,6 +2527,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// new group as no sitting avatars
|
// new group as no sitting avatars
|
||||||
dupe.m_sittingAvatars = new List<ScenePresence>();
|
dupe.m_sittingAvatars = new List<ScenePresence>();
|
||||||
|
|
||||||
|
if(LinksetData is not null)
|
||||||
|
dupe.LinksetData = LinksetData.Copy();
|
||||||
|
|
||||||
dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed);
|
dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed);
|
||||||
dupe.m_rootPart.LinkNum = m_rootPart.LinkNum;
|
dupe.m_rootPart.LinkNum = m_rootPart.LinkNum;
|
||||||
|
|
||||||
|
@ -3195,6 +3199,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(objectGroup.LinksetData is not null)
|
||||||
|
{
|
||||||
|
LinksetData ??= new LinksetData(m_scene.m_LinkSetDataLimit);
|
||||||
|
LinksetData.MergeOther(objectGroup.LinksetData);
|
||||||
|
objectGroup.LinksetData = null;
|
||||||
|
}
|
||||||
|
|
||||||
// 'linkPart' == the root of the group being linked into this group
|
// 'linkPart' == the root of the group being linked into this group
|
||||||
SceneObjectPart linkPart = objectGroup.m_rootPart;
|
SceneObjectPart linkPart = objectGroup.m_rootPart;
|
||||||
|
|
||||||
|
|
|
@ -213,10 +213,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
output.PackBitsFromByte((byte)header.QuantWBits);
|
output.PackBitsFromByte((byte)header.QuantWBits);
|
||||||
output.PackFloat(header.DCOffset);
|
output.PackFloat(header.DCOffset);
|
||||||
output.PackBits(header.Range, 16);
|
output.PackBits(header.Range, 16);
|
||||||
if (largeRegion)
|
output.PackBits(header.PatchIDs, largeRegion ? 32 : 10);
|
||||||
output.PackBits(header.PatchIDs, 32);
|
|
||||||
else
|
|
||||||
output.PackBits(header.PatchIDs, 10);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private unsafe static void EncodePatch(BitPack output, int* patch, int postquant, int wbits)
|
private unsafe static void EncodePatch(BitPack output, int* patch, int postquant, int wbits)
|
||||||
|
@ -266,24 +263,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
i = j;
|
i = j;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
else if (temp < 0)
|
||||||
if (temp < 0)
|
|
||||||
{
|
{
|
||||||
temp *= -1;
|
temp *= -1;
|
||||||
if (temp > maxwbitssize)
|
|
||||||
temp = maxwbitssize;
|
|
||||||
|
|
||||||
output.PackBits(NEGATIVE_VALUE, 3);
|
output.PackBits(NEGATIVE_VALUE, 3);
|
||||||
output.PackBits(temp, wbits);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (temp > maxwbitssize)
|
|
||||||
temp = maxwbitssize;
|
|
||||||
|
|
||||||
output.PackBits(POSITIVE_VALUE, 3);
|
output.PackBits(POSITIVE_VALUE, 3);
|
||||||
output.PackBits(temp, wbits);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
output.PackBits(temp > maxwbitssize ? maxwbitssize : temp, wbits);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,6 +64,7 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
|
||||||
/// Post event to an entire prim
|
/// Post event to an entire prim
|
||||||
/// </summary>
|
/// </summary>
|
||||||
bool PostObjectEvent(uint localID, EventParams parms);
|
bool PostObjectEvent(uint localID, EventParams parms);
|
||||||
|
bool PostObjectLinksetDataEvent(uint localID, int action, ReadOnlySpan<char> name, ReadOnlySpan<char> value);
|
||||||
|
|
||||||
DetectParams GetDetectParams(UUID item, int number);
|
DetectParams GetDetectParams(UUID item, int number);
|
||||||
void SetMinEventDelay(UUID itemID, double delay);
|
void SetMinEventDelay(UUID itemID, double delay);
|
||||||
|
|
|
@ -263,6 +263,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
private string m_lsl_shard = "OpenSim";
|
private string m_lsl_shard = "OpenSim";
|
||||||
private string m_lsl_user_agent = string.Empty;
|
private string m_lsl_user_agent = string.Empty;
|
||||||
|
|
||||||
|
private int m_linksetDataLimit = 32 * 1024;
|
||||||
|
|
||||||
private static readonly Dictionary<string, string> MovementAnimationsForLSL = new(StringComparer.InvariantCultureIgnoreCase)
|
private static readonly Dictionary<string, string> MovementAnimationsForLSL = new(StringComparer.InvariantCultureIgnoreCase)
|
||||||
{
|
{
|
||||||
{"CROUCH", "Crouching"},
|
{"CROUCH", "Crouching"},
|
||||||
|
@ -420,7 +422,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
IConfig seConfig = m_ScriptEngine.Config;
|
IConfig seConfig = m_ScriptEngine.Config;
|
||||||
|
|
||||||
if (seConfig != null)
|
if (seConfig is not null)
|
||||||
{
|
{
|
||||||
float scriptDistanceFactor = seConfig.GetFloat("ScriptDistanceLimitFactor", 1.0f);
|
float scriptDistanceFactor = seConfig.GetFloat("ScriptDistanceLimitFactor", 1.0f);
|
||||||
m_Script10mDistance = 10.0f * scriptDistanceFactor;
|
m_Script10mDistance = 10.0f * scriptDistanceFactor;
|
||||||
|
@ -438,6 +440,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
m_AllowGodFunctions = seConfig.GetBoolean("AllowGodFunctions", false);
|
m_AllowGodFunctions = seConfig.GetBoolean("AllowGodFunctions", false);
|
||||||
|
|
||||||
m_disable_underground_movement = seConfig.GetBoolean("DisableUndergroundMovement", true);
|
m_disable_underground_movement = seConfig.GetBoolean("DisableUndergroundMovement", true);
|
||||||
|
|
||||||
|
m_linksetDataLimit = seConfig.GetInt("LinksetDataLimit", m_linksetDataLimit);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_notecardLineReadCharsMax > 65535)
|
if (m_notecardLineReadCharsMax > 65535)
|
||||||
|
@ -18559,6 +18563,184 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
return new LSL_Vector(Util.sRGBtoLinear((float)src.x), Util.sRGBtoLinear((float)src.y), Util.sRGBtoLinear((float)src.z));
|
return new LSL_Vector(Util.sRGBtoLinear((float)src.x), Util.sRGBtoLinear((float)src.y), Util.sRGBtoLinear((float)src.z));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LSL_Integer llLinksetDataAvailable()
|
||||||
|
{
|
||||||
|
if (m_host.ParentGroup.LinksetData is null)
|
||||||
|
return m_linksetDataLimit;
|
||||||
|
|
||||||
|
return new LSL_Integer(m_host.ParentGroup.LinksetData.Free());
|
||||||
|
}
|
||||||
|
|
||||||
|
public LSL_Integer llLinksetDataCountKeys()
|
||||||
|
{
|
||||||
|
if (m_host.ParentGroup.LinksetData is null)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return new LSL_Integer(m_host.ParentGroup.LinksetData.Count());
|
||||||
|
}
|
||||||
|
|
||||||
|
public LSL_String llLinksetDataRead(LSL_String name)
|
||||||
|
{
|
||||||
|
if (m_host.ParentGroup.LinksetData is null || string.IsNullOrEmpty(name.m_string))
|
||||||
|
return new LSL_String(string.Empty);
|
||||||
|
|
||||||
|
return new LSL_String(m_host.ParentGroup.LinksetData.Get(name.m_string));
|
||||||
|
}
|
||||||
|
|
||||||
|
public LSL_String llLinksetDataReadProtected(LSL_String name, LSL_String pass)
|
||||||
|
{
|
||||||
|
if (m_host.ParentGroup.LinksetData is null || string.IsNullOrEmpty(name.m_string))
|
||||||
|
return new LSL_String(string.Empty);
|
||||||
|
|
||||||
|
return new LSL_String(m_host.ParentGroup.LinksetData.Get(name.m_string, pass.m_string));
|
||||||
|
}
|
||||||
|
|
||||||
|
public LSL_Integer llLinksetDataDelete(LSL_String name)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(name.m_string))
|
||||||
|
return ScriptBaseClass.LINKSETDATA_ENOKEY;
|
||||||
|
if (m_host.ParentGroup.LinksetData is null)
|
||||||
|
return ScriptBaseClass.LINKSETDATA_NOTFOUND;
|
||||||
|
|
||||||
|
int ret = m_host.ParentGroup.LinksetData.Remove(name.m_string);
|
||||||
|
if (ret == 0)
|
||||||
|
{
|
||||||
|
m_ScriptEngine.PostObjectLinksetDataEvent(m_host.LocalId, ScriptBaseClass.LINKSETDATA_DELETE, name.m_string, string.Empty);
|
||||||
|
m_host.ParentGroup.HasGroupChanged = true;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LSL_Integer llLinksetDataDeleteProtected(LSL_String name, LSL_String pass)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(name.m_string))
|
||||||
|
return ScriptBaseClass.LINKSETDATA_ENOKEY;
|
||||||
|
if (m_host.ParentGroup.LinksetData is null)
|
||||||
|
return ScriptBaseClass.LINKSETDATA_NOTFOUND;
|
||||||
|
|
||||||
|
int ret = m_host.ParentGroup.LinksetData.Remove(name.m_string, pass.m_string);
|
||||||
|
if (ret == 0)
|
||||||
|
{
|
||||||
|
m_ScriptEngine.PostObjectLinksetDataEvent(m_host.LocalId, ScriptBaseClass.LINKSETDATA_DELETE, name.m_string, string.Empty);
|
||||||
|
m_host.ParentGroup.HasGroupChanged = true;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void llLinksetDataReset()
|
||||||
|
{
|
||||||
|
if (m_host.ParentGroup.LinksetData is null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
bool changed = m_host.ParentGroup.LinksetData.Count() > 0;
|
||||||
|
m_host.ParentGroup.LinksetData = null;
|
||||||
|
|
||||||
|
if(changed)
|
||||||
|
{
|
||||||
|
m_ScriptEngine.PostObjectLinksetDataEvent(m_host.LocalId, ScriptBaseClass.LINKSETDATA_RESET, string.Empty, string.Empty);
|
||||||
|
m_host.ParentGroup.HasGroupChanged = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public LSL_Integer llLinksetDataWrite(LSL_String name, LSL_String value)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(name.m_string))
|
||||||
|
return ScriptBaseClass.LINKSETDATA_ENOKEY;
|
||||||
|
|
||||||
|
int ret;
|
||||||
|
if (string.IsNullOrEmpty(value.m_string))
|
||||||
|
{
|
||||||
|
if (m_host.ParentGroup.LinksetData is null)
|
||||||
|
return ScriptBaseClass.LINKSETDATA_NOTFOUND;
|
||||||
|
|
||||||
|
ret = m_host.ParentGroup.LinksetData.Remove(name.m_string);
|
||||||
|
if (ret == 0)
|
||||||
|
{
|
||||||
|
m_ScriptEngine.PostObjectLinksetDataEvent(m_host.LocalId, ScriptBaseClass.LINKSETDATA_DELETE, name.m_string, string.Empty);
|
||||||
|
m_host.ParentGroup.HasGroupChanged = true;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_host.ParentGroup.LinksetData ??= new(m_linksetDataLimit);
|
||||||
|
ret = m_host.ParentGroup.LinksetData.AddOrUpdate(name.m_string, value.m_string);
|
||||||
|
if (ret == 0)
|
||||||
|
{
|
||||||
|
m_ScriptEngine.PostObjectLinksetDataEvent(m_host.LocalId, ScriptBaseClass.LINKSETDATA_UPDATE, name.m_string, value.m_string);
|
||||||
|
m_host.ParentGroup.HasGroupChanged = true;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LSL_Integer llLinksetDataWriteProtected(LSL_String name, LSL_String value, LSL_String pass)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(name.m_string))
|
||||||
|
return ScriptBaseClass.LINKSETDATA_ENOKEY;
|
||||||
|
|
||||||
|
int ret;
|
||||||
|
if (string.IsNullOrEmpty(value.m_string))
|
||||||
|
{
|
||||||
|
if (m_host.ParentGroup.LinksetData is null)
|
||||||
|
return ScriptBaseClass.LINKSETDATA_NOTFOUND;
|
||||||
|
|
||||||
|
ret = m_host.ParentGroup.LinksetData.Remove(name.m_string, pass.m_string);
|
||||||
|
if (ret == 0)
|
||||||
|
{
|
||||||
|
m_ScriptEngine.PostObjectLinksetDataEvent(m_host.LocalId, ScriptBaseClass.LINKSETDATA_DELETE, name.m_string, string.Empty);
|
||||||
|
m_host.ParentGroup.HasGroupChanged = true;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_host.ParentGroup.LinksetData ??= new(m_linksetDataLimit);
|
||||||
|
ret = m_host.ParentGroup.LinksetData.AddOrUpdate(name.m_string, value.m_string, pass.m_string);
|
||||||
|
if (ret == 0)
|
||||||
|
{
|
||||||
|
m_ScriptEngine.PostObjectLinksetDataEvent(m_host.LocalId, ScriptBaseClass.LINKSETDATA_UPDATE, name.m_string, string.Empty);
|
||||||
|
m_host.ParentGroup.HasGroupChanged = true;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LSL_List llLinksetDataDeleteFound(LSL_String pattern, LSL_String pass)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(pattern.m_string) || m_host.ParentGroup.LinksetData is null)
|
||||||
|
return new LSL_List(new object[] { new LSL_Integer(0), new LSL_Integer(0)});
|
||||||
|
|
||||||
|
string[] deleted = m_host.ParentGroup.LinksetData.RemoveByPattern(pattern.m_string, pass.m_string, out int notDeleted);
|
||||||
|
int deletedCount = deleted.Length;
|
||||||
|
if(deleted.Length > 0)
|
||||||
|
{
|
||||||
|
string deletedList = string.Join(",", deleted);
|
||||||
|
m_ScriptEngine.PostObjectLinksetDataEvent(m_host.LocalId, ScriptBaseClass.LINKSETDATA_MULTIDELETE, deletedList, string.Empty);
|
||||||
|
m_host.ParentGroup.HasGroupChanged = true;
|
||||||
|
}
|
||||||
|
return new LSL_List(new object[] { new LSL_Integer(deleted.Length), new LSL_Integer(notDeleted) });
|
||||||
|
}
|
||||||
|
|
||||||
|
public LSL_Integer llLinksetDataCountFound(LSL_String pattern)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(pattern.m_string) || m_host.ParentGroup.LinksetData is null)
|
||||||
|
return new LSL_Integer(0);
|
||||||
|
|
||||||
|
return m_host.ParentGroup.LinksetData.CountByPattern(pattern.m_string);
|
||||||
|
}
|
||||||
|
|
||||||
|
public LSL_List llLinksetDataListKeys(LSL_Integer start, LSL_Integer count)
|
||||||
|
{
|
||||||
|
if (m_host.ParentGroup.LinksetData is null)
|
||||||
|
return new LSL_List();
|
||||||
|
|
||||||
|
return new LSL_List(m_host.ParentGroup.LinksetData.ListKeys(start, count));
|
||||||
|
}
|
||||||
|
|
||||||
|
public LSL_List llLinksetDataFindKeys(LSL_String pattern, LSL_Integer start, LSL_Integer count)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(pattern.m_string) || m_host.ParentGroup.LinksetData is null)
|
||||||
|
return new LSL_List();
|
||||||
|
|
||||||
|
return new LSL_List(m_host.ParentGroup.LinksetData.ListKeysByPatttern(pattern.m_string, start, count));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class NotecardCache
|
public class NotecardCache
|
||||||
|
|
|
@ -500,5 +500,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
|
||||||
|
|
||||||
LSL_Vector llLinear2sRGB(LSL_Vector src);
|
LSL_Vector llLinear2sRGB(LSL_Vector src);
|
||||||
LSL_Vector llsRGB2Linear(LSL_Vector src);
|
LSL_Vector llsRGB2Linear(LSL_Vector src);
|
||||||
|
LSL_Integer llLinksetDataAvailable();
|
||||||
|
LSL_Integer llLinksetDataCountFound(LSL_String pattern);
|
||||||
|
LSL_Integer llLinksetDataCountKeys();
|
||||||
|
LSL_Integer llLinksetDataDelete(LSL_String name);
|
||||||
|
LSL_List llLinksetDataDeleteFound(LSL_String pattern, LSL_String pass);
|
||||||
|
LSL_Integer llLinksetDataDeleteProtected(LSL_String name, LSL_String pass);
|
||||||
|
LSL_List llLinksetDataFindKeys(LSL_String pattern, LSL_Integer start, LSL_Integer count);
|
||||||
|
LSL_List llLinksetDataListKeys(LSL_Integer start, LSL_Integer count);
|
||||||
|
LSL_String llLinksetDataRead(LSL_String name);
|
||||||
|
LSL_String llLinksetDataReadProtected(LSL_String name, LSL_String pass);
|
||||||
|
void llLinksetDataReset();
|
||||||
|
LSL_Integer llLinksetDataWrite(LSL_String name, LSL_String value);
|
||||||
|
LSL_Integer llLinksetDataWriteProtected(LSL_String name, LSL_String value, LSL_String pass);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -537,8 +537,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
public const int PRIM_PHYSICS_SHAPE_CONVEX = 2;
|
public const int PRIM_PHYSICS_SHAPE_CONVEX = 2;
|
||||||
|
|
||||||
// PRIM_REFLECTION_PROBE flags
|
// PRIM_REFLECTION_PROBE flags
|
||||||
public const int PRIM_REFLECTION_PROBE_BOX = 1 << 0; // 1
|
public const int PRIM_REFLECTION_PROBE_BOX = 1; // 1
|
||||||
public const int PRIM_REFLECTION_PROBE_DYNAMIC = 1 << 1; // 2
|
public const int PRIM_REFLECTION_PROBE_DYNAMIC = 2; // 2
|
||||||
|
|
||||||
public const int PROFILE_NONE = 0;
|
public const int PROFILE_NONE = 0;
|
||||||
public const int PROFILE_SCRIPT_MEMORY = 1;
|
public const int PROFILE_SCRIPT_MEMORY = 1;
|
||||||
|
@ -1030,6 +1030,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
public const int LINKSETDATA_RESET = 0;
|
public const int LINKSETDATA_RESET = 0;
|
||||||
public const int LINKSETDATA_UPDATE = 1;
|
public const int LINKSETDATA_UPDATE = 1;
|
||||||
public const int LINKSETDATA_DELETE = 2;
|
public const int LINKSETDATA_DELETE = 2;
|
||||||
|
public const int LINKSETDATA_MULTIDELETE = 3;
|
||||||
|
|
||||||
public const int LINKSETDATA_OK = 0;
|
public const int LINKSETDATA_OK = 0;
|
||||||
public const int LINKSETDATA_EMEMORY = 1;
|
public const int LINKSETDATA_EMEMORY = 1;
|
||||||
|
|
|
@ -2706,5 +2706,83 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
{
|
{
|
||||||
return m_LSL_Functions.llsRGB2Linear(src);
|
return m_LSL_Functions.llsRGB2Linear(src);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public LSL_Integer llLinksetDataAvailable()
|
||||||
|
{
|
||||||
|
return m_LSL_Functions.llLinksetDataAvailable();
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public LSL_Integer llLinksetDataCountKeys()
|
||||||
|
{
|
||||||
|
return m_LSL_Functions.llLinksetDataCountKeys();
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public LSL_String llLinksetDataRead(LSL_String name)
|
||||||
|
{
|
||||||
|
return m_LSL_Functions.llLinksetDataRead(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public LSL_String llLinksetDataReadProtected(LSL_String name, LSL_String pass)
|
||||||
|
{
|
||||||
|
return m_LSL_Functions.llLinksetDataReadProtected(name, pass);
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public LSL_Integer llLinksetDataDelete(LSL_String name)
|
||||||
|
{
|
||||||
|
return m_LSL_Functions.llLinksetDataDelete(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public LSL_Integer llLinksetDataDeleteProtected(LSL_String name, LSL_String pass)
|
||||||
|
{
|
||||||
|
return m_LSL_Functions.llLinksetDataDeleteProtected(name, pass);
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public void llLinksetDataReset()
|
||||||
|
{
|
||||||
|
m_LSL_Functions.llLinksetDataReset();
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public LSL_Integer llLinksetDataWrite(LSL_String name, LSL_String value)
|
||||||
|
{
|
||||||
|
return m_LSL_Functions.llLinksetDataWrite(name, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public LSL_Integer llLinksetDataWriteProtected(LSL_String name, LSL_String value, LSL_String pass)
|
||||||
|
{
|
||||||
|
return m_LSL_Functions.llLinksetDataWriteProtected(name, value, pass);
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public LSL_List llLinksetDataDeleteFound(LSL_String pattern, LSL_String pass)
|
||||||
|
{
|
||||||
|
return m_LSL_Functions.llLinksetDataDeleteFound(pattern, pass);
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public LSL_Integer llLinksetDataCountFound(LSL_String pattern)
|
||||||
|
{
|
||||||
|
return m_LSL_Functions.llLinksetDataCountFound(pattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public LSL_List llLinksetDataListKeys(LSL_Integer start, LSL_Integer count)
|
||||||
|
{
|
||||||
|
return m_LSL_Functions.llLinksetDataListKeys(start, count);
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public LSL_List llLinksetDataFindKeys(LSL_String pattern, LSL_Integer start, LSL_Integer count)
|
||||||
|
{
|
||||||
|
return m_LSL_Functions.llLinksetDataFindKeys(pattern, start, count);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -361,7 +361,8 @@ namespace OpenSim.Region.ScriptEngine.Yengine
|
||||||
{
|
{
|
||||||
Name = "XMRInstanceSuperAssembly"
|
Name = "XMRInstanceSuperAssembly"
|
||||||
};
|
};
|
||||||
AssemblyBuilder assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
|
//AssemblyBuilder assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
|
||||||
|
AssemblyBuilder assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndCollect);
|
||||||
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("XMRInstanceSuperModule");
|
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("XMRInstanceSuperModule");
|
||||||
TypeBuilder typeBuilder = moduleBuilder.DefineType("XMRInstanceSuperType", TypeAttributes.Public | TypeAttributes.Class);
|
TypeBuilder typeBuilder = moduleBuilder.DefineType("XMRInstanceSuperType", TypeAttributes.Public | TypeAttributes.Class);
|
||||||
typeBuilder.SetParent(typeof(XMRInstance));
|
typeBuilder.SetParent(typeof(XMRInstance));
|
||||||
|
@ -904,8 +905,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
|
||||||
|
|
||||||
TraceCalls("[YEngine]: YEngine.PostScriptEvent({0},{1})", itemID.ToString(), parms.EventName);
|
TraceCalls("[YEngine]: YEngine.PostScriptEvent({0},{1})", itemID.ToString(), parms.EventName);
|
||||||
|
|
||||||
instance.PostEvent(parms);
|
return instance.PostEvent(parms);
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CancelScriptEvent(UUID itemID, string eventName)
|
public void CancelScriptEvent(UUID itemID, string eventName)
|
||||||
|
@ -952,6 +952,32 @@ namespace OpenSim.Region.ScriptEngine.Yengine
|
||||||
return PostPrimEvent(part, parms);
|
return PostPrimEvent(part, parms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool PostObjectLinksetDataEvent(uint localID, int action, ReadOnlySpan<char> name, ReadOnlySpan<char> value)
|
||||||
|
{
|
||||||
|
if (m_Exiting)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (m_HeapSize < name.Length + value.Length)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
SceneObjectPart part = m_Scene.GetSceneObjectPart(localID);
|
||||||
|
if (part is null || part.ParentGroup is null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
EventParams parms = new("linkset_data", new object[] {
|
||||||
|
new LSL_Integer(action),
|
||||||
|
new LSL_String(name.ToString()),
|
||||||
|
value.Length == 0 ? LSL_String.Empty : new LSL_String(value.ToString())
|
||||||
|
},
|
||||||
|
Array.Empty<DetectParams>());;
|
||||||
|
|
||||||
|
bool posted = false;
|
||||||
|
foreach (SceneObjectPart primpart in part.ParentGroup.Parts)
|
||||||
|
posted |= PostPrimEvent(primpart, parms);
|
||||||
|
|
||||||
|
return posted;
|
||||||
|
}
|
||||||
|
|
||||||
private bool PostPrimEvent(SceneObjectPart part, EventParams parms)
|
private bool PostPrimEvent(SceneObjectPart part, EventParams parms)
|
||||||
{
|
{
|
||||||
UUID partUUID = part.UUID;
|
UUID partUUID = part.UUID;
|
||||||
|
@ -974,10 +1000,11 @@ namespace OpenSim.Region.ScriptEngine.Yengine
|
||||||
if(objInstArray.Length <= 0)
|
if(objInstArray.Length <= 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
bool posted = false;
|
||||||
foreach (XMRInstance inst in objInstArray)
|
foreach (XMRInstance inst in objInstArray)
|
||||||
inst.PostEvent(parms);
|
posted |= inst.PostEvent(parms);
|
||||||
|
|
||||||
return true;
|
return posted;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DetectParams GetDetectParams(UUID itemID, int number)
|
public DetectParams GetDetectParams(UUID itemID, int number)
|
||||||
|
|
|
@ -26,16 +26,11 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Reflection;
|
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Region.Framework.Scenes;
|
using OpenSim.Region.Framework.Scenes;
|
||||||
using OpenSim.Region.Framework.Interfaces;
|
|
||||||
using OpenSim.Region.ScriptEngine.Shared;
|
using OpenSim.Region.ScriptEngine.Shared;
|
||||||
using OpenSim.Region.ScriptEngine.Interfaces;
|
//using log4net;
|
||||||
using log4net;
|
|
||||||
|
|
||||||
using LSL_Float = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLFloat;
|
using LSL_Float = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLFloat;
|
||||||
using LSL_Integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
|
using LSL_Integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
|
||||||
|
|
|
@ -52,13 +52,13 @@ namespace OpenSim.Region.ScriptEngine.Yengine
|
||||||
* @brief This can be called in any thread (including the script thread itself)
|
* @brief This can be called in any thread (including the script thread itself)
|
||||||
* to queue event to script for processing.
|
* to queue event to script for processing.
|
||||||
*/
|
*/
|
||||||
public void PostEvent(EventParams evt)
|
public bool PostEvent(EventParams evt)
|
||||||
{
|
{
|
||||||
if (!m_eventCodeMap.TryGetValue(evt.EventName, out ScriptEventCode evc))
|
if (!m_eventCodeMap.TryGetValue(evt.EventName, out ScriptEventCode evc))
|
||||||
return;
|
return false;
|
||||||
|
|
||||||
if (!m_HaveEventHandlers[(int)evc]) // don't bother if we don't have such a handler in any state
|
if (!m_HaveEventHandlers[(int)evc]) // don't bother if we don't have such a handler in any state
|
||||||
return;
|
return false;
|
||||||
|
|
||||||
// Put event on end of event queue.
|
// Put event on end of event queue.
|
||||||
bool startIt = false;
|
bool startIt = false;
|
||||||
|
@ -80,7 +80,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
|
||||||
m_EventQueue.AddFirst(llns);
|
m_EventQueue.AddFirst(llns);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
|
||||||
{
|
{
|
||||||
double now = Util.GetTimeStamp();
|
double now = Util.GetTimeStamp();
|
||||||
if (now < m_nextEventTime)
|
if (now < m_nextEventTime)
|
||||||
return;
|
return false;
|
||||||
m_nextEventTime = now + m_minEventDelay;
|
m_nextEventTime = now + m_minEventDelay;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -110,12 +110,12 @@ namespace OpenSim.Region.ScriptEngine.Yengine
|
||||||
const int canignore = ~(CHANGED_SCALE | CHANGED_POSITION);
|
const int canignore = ~(CHANGED_SCALE | CHANGED_POSITION);
|
||||||
int change = (int)evt.Params[0];
|
int change = (int)evt.Params[0];
|
||||||
if(change == 0) // what?
|
if(change == 0) // what?
|
||||||
return;
|
return false;
|
||||||
if((change & canignore) == 0)
|
if((change & canignore) == 0)
|
||||||
{
|
{
|
||||||
double now = Util.GetTimeStamp();
|
double now = Util.GetTimeStamp();
|
||||||
if (now < m_nextEventTime)
|
if (now < m_nextEventTime)
|
||||||
return;
|
return false;
|
||||||
m_nextEventTime = now + m_minEventDelay;
|
m_nextEventTime = now + m_minEventDelay;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -128,14 +128,14 @@ namespace OpenSim.Region.ScriptEngine.Yengine
|
||||||
if(evc == ScriptEventCode.timer)
|
if(evc == ScriptEventCode.timer)
|
||||||
{
|
{
|
||||||
if (m_EventCounts[(int)evc] >= 1)
|
if (m_EventCounts[(int)evc] >= 1)
|
||||||
return;
|
return false;
|
||||||
m_EventCounts[(int)evc]++;
|
m_EventCounts[(int)evc]++;
|
||||||
m_EventQueue.AddLast(new LinkedListNode<EventParams>(evt));
|
m_EventQueue.AddLast(new LinkedListNode<EventParams>(evt));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (m_EventCounts[(int)evc] >= MAXEVENTQUEUE)
|
if (m_EventCounts[(int)evc] >= MAXEVENTQUEUE)
|
||||||
return;
|
return false;
|
||||||
|
|
||||||
m_EventCounts[(int)evc]++;
|
m_EventCounts[(int)evc]++;
|
||||||
|
|
||||||
|
@ -221,6 +221,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
|
||||||
m_SleepUntil = DateTime.MinValue;
|
m_SleepUntil = DateTime.MinValue;
|
||||||
m_Engine.WakeFromSleep(this);
|
m_Engine.WakeFromSleep(this);
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CancelEvent(string eventName)
|
public void CancelEvent(string eventName)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
08743d8a-ea46-11ed-ac8d-406c8fbbb495
|
14b37185-d3a8-cd00-2a99-1e161b07e054
|
||||||
<llsd><map><key>llsd-lsl-syntax-version</key><integer>2</integer>
|
<llsd><map><key>llsd-lsl-syntax-version</key><integer>2</integer>
|
||||||
<key>controls</key>
|
<key>controls</key>
|
||||||
<map>
|
<map>
|
||||||
|
@ -199,6 +199,15 @@
|
||||||
</array>
|
</array>
|
||||||
<key>tooltip</key><string>Triggered when object receives a link message via llMessageLinked function call</string>
|
<key>tooltip</key><string>Triggered when object receives a link message via llMessageLinked function call</string>
|
||||||
</map>
|
</map>
|
||||||
|
<key>linkset_data</key><map>
|
||||||
|
<key>arguments</key><array>
|
||||||
|
<map><key>action</key><map><key>type</key><string>integer</string></map></map>
|
||||||
|
<map><key>name</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
<map><key>value</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
<map><key>ID</key><map><key>type</key><string>key</string></map></map>
|
||||||
|
</array>
|
||||||
|
<key>tooltip</key><string>Triggered when the linksetdata store is modified</string>
|
||||||
|
</map>
|
||||||
<key>listen</key><map>
|
<key>listen</key><map>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>Channel</key><map><key>type</key><string>integer</string></map></map>
|
<map><key>Channel</key><map><key>type</key><string>integer</string></map></map>
|
||||||
|
@ -803,6 +812,10 @@
|
||||||
<key>type</key><string>integer</string>
|
<key>type</key><string>integer</string>
|
||||||
<key>value</key><string>2</string>
|
<key>value</key><string>2</string>
|
||||||
</map>
|
</map>
|
||||||
|
<key>CLICK_ACTION_DISABLED</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>8</string>
|
||||||
|
</map>
|
||||||
<key>CLICK_ACTION_NONE</key><map>
|
<key>CLICK_ACTION_NONE</key><map>
|
||||||
<key>type</key><string>integer</string>
|
<key>type</key><string>integer</string>
|
||||||
<key>value</key><string>0</string>
|
<key>value</key><string>0</string>
|
||||||
|
@ -1267,6 +1280,46 @@
|
||||||
<key>type</key><string>integer</string>
|
<key>type</key><string>integer</string>
|
||||||
<key>value</key><string>-4</string>
|
<key>value</key><string>-4</string>
|
||||||
</map>
|
</map>
|
||||||
|
<key>LINKSETDATA_DELETE</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>2</string>
|
||||||
|
</map>
|
||||||
|
<key>LINKSETDATA_EMEMORY</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>1</string>
|
||||||
|
</map>
|
||||||
|
<key>LINKSETDATA_ENOKEY</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>2</string>
|
||||||
|
</map>
|
||||||
|
<key>LINKSETDATA_EPROTECTED</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>3</string>
|
||||||
|
</map>
|
||||||
|
<key>LINKSETDATA_MULTIDELETE</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>3</string>
|
||||||
|
</map>
|
||||||
|
<key>LINKSETDATA_NOTFOUND</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>4</string>
|
||||||
|
</map>
|
||||||
|
<key>LINKSETDATA_NOUPDATE</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>5</string>
|
||||||
|
</map>
|
||||||
|
<key>LINKSETDATA_OK</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>0</string>
|
||||||
|
</map>
|
||||||
|
<key>LINKSETDATA_RESET</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>0</string>
|
||||||
|
</map>
|
||||||
|
<key>LINKSETDATA_UPDATE</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>1</string>
|
||||||
|
</map>
|
||||||
<key>LIST_STAT_GEOMETRIC_MEAN</key><map>
|
<key>LIST_STAT_GEOMETRIC_MEAN</key><map>
|
||||||
<key>type</key><string>integer</string>
|
<key>type</key><string>integer</string>
|
||||||
<key>value</key><string>9</string>
|
<key>value</key><string>9</string>
|
||||||
|
@ -2223,6 +2276,22 @@
|
||||||
<key>type</key><string>integer</string>
|
<key>type</key><string>integer</string>
|
||||||
<key>value</key><string>25</string>
|
<key>value</key><string>25</string>
|
||||||
</map>
|
</map>
|
||||||
|
<key>PRIM_GLTF_BASE_COLOR</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>48</string>
|
||||||
|
</map>
|
||||||
|
<key>PRIM_GLTF_EMISSIVE</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>46</string>
|
||||||
|
</map>
|
||||||
|
<key>PRIM_GLTF_METALLIC_ROUGHNESS</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>47</string>
|
||||||
|
</map>
|
||||||
|
<key>PRIM_GLTF_NORMAL</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>45</string>
|
||||||
|
</map>
|
||||||
<key>PRIM_HOLE_CIRCLE</key><map>
|
<key>PRIM_HOLE_CIRCLE</key><map>
|
||||||
<key>type</key><string>integer</string>
|
<key>type</key><string>integer</string>
|
||||||
<key>value</key><string>16</string>
|
<key>value</key><string>16</string>
|
||||||
|
@ -2419,6 +2488,22 @@
|
||||||
<key>type</key><string>integer</string>
|
<key>type</key><string>integer</string>
|
||||||
<key>value</key><string>42</string>
|
<key>value</key><string>42</string>
|
||||||
</map>
|
</map>
|
||||||
|
<key>PRIM_REFLECTION_PROBE</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>44</string>
|
||||||
|
</map>
|
||||||
|
<key>PRIM_REFLECTION_PROBE_BOX</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>1</string>
|
||||||
|
</map>
|
||||||
|
<key>PRIM_REFLECTION_PROBE_DYNAMIC</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>2</string>
|
||||||
|
</map>
|
||||||
|
<key>PRIM_RENDER_MATERIAL</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>49</string>
|
||||||
|
</map>
|
||||||
<key>PRIM_ROT_LOCAL</key><map>
|
<key>PRIM_ROT_LOCAL</key><map>
|
||||||
<key>type</key><string>integer</string>
|
<key>type</key><string>integer</string>
|
||||||
<key>value</key><string>29</string>
|
<key>value</key><string>29</string>
|
||||||
|
@ -2432,6 +2517,10 @@
|
||||||
<key>value</key><string>40</string>
|
<key>value</key><string>40</string>
|
||||||
<key>tooltip</key><string>not supported</string>
|
<key>tooltip</key><string>not supported</string>
|
||||||
</map>
|
</map>
|
||||||
|
<key>PRIM_SCULPT_FLAG_ANIMESH</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>0x20</string>
|
||||||
|
</map>
|
||||||
<key>PRIM_SCULPT_FLAG_INVERT</key><map>
|
<key>PRIM_SCULPT_FLAG_INVERT</key><map>
|
||||||
<key>type</key><string>integer</string>
|
<key>type</key><string>integer</string>
|
||||||
<key>value</key><string>0x40</string>
|
<key>value</key><string>0x40</string>
|
||||||
|
@ -2449,6 +2538,10 @@
|
||||||
<key>value</key><string>0x07</string>
|
<key>value</key><string>0x07</string>
|
||||||
<key>tooltip</key><string>Auxiliar to clear flags keeping scultp type</string>
|
<key>tooltip</key><string>Auxiliar to clear flags keeping scultp type</string>
|
||||||
</map>
|
</map>
|
||||||
|
<key>PRIM_SCULPT_TYPE_MESH</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>5</string>
|
||||||
|
</map>
|
||||||
<key>PRIM_SCULPT_TYPE_PLANE</key><map>
|
<key>PRIM_SCULPT_TYPE_PLANE</key><map>
|
||||||
<key>type</key><string>integer</string>
|
<key>type</key><string>integer</string>
|
||||||
<key>value</key><string>3</string>
|
<key>value</key><string>3</string>
|
||||||
|
@ -2905,6 +2998,22 @@
|
||||||
<key>type</key><string>integer</string>
|
<key>type</key><string>integer</string>
|
||||||
<key>value</key><string>16</string>
|
<key>value</key><string>16</string>
|
||||||
</map>
|
</map>
|
||||||
|
<key>SOUND_LOOP</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>1</string>
|
||||||
|
</map>
|
||||||
|
<key>SOUND_PLAY</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>0</string>
|
||||||
|
</map>
|
||||||
|
<key>SOUND_SYNC</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>4</string>
|
||||||
|
</map>
|
||||||
|
<key>SOUND_TRIGGER</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>2</string>
|
||||||
|
</map>
|
||||||
<key>SQRT2</key><map>
|
<key>SQRT2</key><map>
|
||||||
<key>type</key><string>float</string>
|
<key>type</key><string>float</string>
|
||||||
<key>value</key><string>1.414213538</string>
|
<key>value</key><string>1.414213538</string>
|
||||||
|
@ -4893,6 +5002,108 @@
|
||||||
<map><key>linknumber</key><map><key>type</key><string>integer</string></map></map>
|
<map><key>linknumber</key><map><key>type</key><string>integer</string></map></map>
|
||||||
<map><key>sound</key><map><key>type</key><string>string</string></map></map>
|
<map><key>sound</key><map><key>type</key><string>string</string></map></map>
|
||||||
<map><key>volume</key><map><key>type</key><string>float</string></map></map>
|
<map><key>volume</key><map><key>type</key><string>float</string></map></map>
|
||||||
|
<map><key>flags</key><map><key>type</key><string>integer</string></map></map>
|
||||||
|
</array>
|
||||||
|
</map>
|
||||||
|
<key>llLinkPlaySound</key>
|
||||||
|
<map>
|
||||||
|
<key>arguments</key><array>
|
||||||
|
<map><key>linknumber</key><map><key>type</key><string>integer</string></map></map>
|
||||||
|
<map><key>sound</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
<map><key>volume</key><map><key>type</key><string>float</string></map></map>
|
||||||
|
</array>
|
||||||
|
</map>
|
||||||
|
<key>llLinksetDataAvailable</key>
|
||||||
|
<map>
|
||||||
|
<key>return</key><string>integer</string>
|
||||||
|
<key>arguments</key><undef/>
|
||||||
|
</map>
|
||||||
|
<key>llLinksetDataCountFound</key>
|
||||||
|
<map>
|
||||||
|
<key>return</key><string>integer</string>
|
||||||
|
<key>arguments</key><array>
|
||||||
|
<map><key>pattern</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
</array>
|
||||||
|
</map>
|
||||||
|
<key>llLinksetDataCountKeys</key>
|
||||||
|
<map>
|
||||||
|
<key>return</key><string>integer</string>
|
||||||
|
<key>arguments</key><undef/>
|
||||||
|
</map>
|
||||||
|
<key>llLinksetDataDelete</key>
|
||||||
|
<map>
|
||||||
|
<key>return</key><string>integer</string>
|
||||||
|
<key>arguments</key><array>
|
||||||
|
<map><key>name</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
</array>
|
||||||
|
</map>
|
||||||
|
<key>llLinksetDataDeleteFound</key>
|
||||||
|
<map>
|
||||||
|
<key>return</key><string>list</string>
|
||||||
|
<key>arguments</key><array>
|
||||||
|
<map><key>pattern</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
<map><key>pass</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
</array>
|
||||||
|
</map>
|
||||||
|
<key>llLinksetDataDeleteProtected</key>
|
||||||
|
<map>
|
||||||
|
<key>return</key><string>integer</string>
|
||||||
|
<key>arguments</key><array>
|
||||||
|
<map><key>name</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
<map><key>pass</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
</array>
|
||||||
|
</map>
|
||||||
|
<key>llLinksetDataFindKeys</key>
|
||||||
|
<map>
|
||||||
|
<key>return</key><string>list</string>
|
||||||
|
<key>arguments</key><array>
|
||||||
|
<map><key>pattern</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
<map><key>start</key><map><key>type</key><string>integer</string></map></map>
|
||||||
|
<map><key>count</key><map><key>type</key><string>integer</string></map></map>
|
||||||
|
</array>
|
||||||
|
</map>
|
||||||
|
<key>llLinksetDataListKeys</key>
|
||||||
|
<map>
|
||||||
|
<key>return</key><string>list</string>
|
||||||
|
<key>arguments</key><array>
|
||||||
|
<map><key>start</key><map><key>type</key><string>integer</string></map></map>
|
||||||
|
<map><key>count</key><map><key>type</key><string>integer</string></map></map>
|
||||||
|
</array>
|
||||||
|
</map>
|
||||||
|
<key>llLinksetDataRead</key>
|
||||||
|
<map>
|
||||||
|
<key>return</key><string>string</string>
|
||||||
|
<key>arguments</key><array>
|
||||||
|
<map><key>name</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
</array>
|
||||||
|
</map>
|
||||||
|
<key>llLinksetDataReadProtected</key>
|
||||||
|
<map>
|
||||||
|
<key>return</key><string>string</string>
|
||||||
|
<key>arguments</key><array>
|
||||||
|
<map><key>name</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
<map><key>pass</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
</array>
|
||||||
|
</map>
|
||||||
|
<key>llLinksetDataReset</key>
|
||||||
|
<map>
|
||||||
|
<key>arguments</key><undef/>
|
||||||
|
</map>
|
||||||
|
<key>llLinksetDataWrite</key>
|
||||||
|
<map>
|
||||||
|
<key>return</key><string>integer</string>
|
||||||
|
<key>arguments</key><array>
|
||||||
|
<map><key>name</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
<map><key>value</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
</array>
|
||||||
|
</map>
|
||||||
|
<key>llLinksetDataWriteProtected</key>
|
||||||
|
<map>
|
||||||
|
<key>return</key><string>integer</string>
|
||||||
|
<key>arguments</key><array>
|
||||||
|
<map><key>name</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
<map><key>value</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
<map><key>pass</key><map><key>type</key><string>string</string></map></map>
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>llLinkSetSoundQueueing</key>
|
<key>llLinkSetSoundQueueing</key>
|
||||||
|
@ -6594,17 +6805,8 @@
|
||||||
<map>
|
<map>
|
||||||
<key>return</key><string>integer</string>
|
<key>return</key><string>integer</string>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>va</key><map><key>type</key><string>vector</string></map></map>
|
<map><key>a</key><map><key>type</key><string>float</string></map></map>
|
||||||
<map><key>vb</key><map><key>type</key><string>vector</string></map></map>
|
<map><key>b</key><map><key>type</key><string>float</string></map></map>
|
||||||
</array>
|
|
||||||
</map>
|
|
||||||
<key>osApproxEquals</key>
|
|
||||||
<map>
|
|
||||||
<key>return</key><string>integer</string>
|
|
||||||
<key>arguments</key><array>
|
|
||||||
<map><key>va</key><map><key>type</key><string>vector</string></map></map>
|
|
||||||
<map><key>vb</key><map><key>type</key><string>vector</string></map></map>
|
|
||||||
<map><key>margin</key><map><key>type</key><string>float</string></map></map>
|
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osApproxEquals</key>
|
<key>osApproxEquals</key>
|
||||||
|
@ -6620,8 +6822,17 @@
|
||||||
<map>
|
<map>
|
||||||
<key>return</key><string>integer</string>
|
<key>return</key><string>integer</string>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>a</key><map><key>type</key><string>float</string></map></map>
|
<map><key>ra</key><map><key>type</key><string>rotation</string></map></map>
|
||||||
<map><key>b</key><map><key>type</key><string>float</string></map></map>
|
<map><key>rb</key><map><key>type</key><string>rotation</string></map></map>
|
||||||
|
</array>
|
||||||
|
</map>
|
||||||
|
<key>osApproxEquals</key>
|
||||||
|
<map>
|
||||||
|
<key>return</key><string>integer</string>
|
||||||
|
<key>arguments</key><array>
|
||||||
|
<map><key>va</key><map><key>type</key><string>vector</string></map></map>
|
||||||
|
<map><key>vb</key><map><key>type</key><string>vector</string></map></map>
|
||||||
|
<map><key>margin</key><map><key>type</key><string>float</string></map></map>
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osApproxEquals</key>
|
<key>osApproxEquals</key>
|
||||||
|
@ -6637,8 +6848,8 @@
|
||||||
<map>
|
<map>
|
||||||
<key>return</key><string>integer</string>
|
<key>return</key><string>integer</string>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>ra</key><map><key>type</key><string>rotation</string></map></map>
|
<map><key>va</key><map><key>type</key><string>vector</string></map></map>
|
||||||
<map><key>rb</key><map><key>type</key><string>rotation</string></map></map>
|
<map><key>vb</key><map><key>type</key><string>vector</string></map></map>
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osAvatarName2Key</key>
|
<key>osAvatarName2Key</key>
|
||||||
|
@ -6667,15 +6878,15 @@
|
||||||
<map>
|
<map>
|
||||||
<key>return</key><string>integer</string>
|
<key>return</key><string>integer</string>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>avkey</key><map><key>type</key><string>key</string></map></map>
|
<map><key>sFirstName</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
<map><key>sLastName</key><map><key>type</key><string>string</string></map></map>
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osAvatarType</key>
|
<key>osAvatarType</key>
|
||||||
<map>
|
<map>
|
||||||
<key>return</key><string>integer</string>
|
<key>return</key><string>integer</string>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>sFirstName</key><map><key>type</key><string>string</string></map></map>
|
<map><key>avkey</key><map><key>type</key><string>key</string></map></map>
|
||||||
<map><key>sLastName</key><map><key>type</key><string>string</string></map></map>
|
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osCauseDamage</key>
|
<key>osCauseDamage</key>
|
||||||
|
@ -6933,13 +7144,13 @@
|
||||||
<map>
|
<map>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>avatar</key><map><key>type</key><string>string</string></map></map>
|
<map><key>avatar</key><map><key>type</key><string>string</string></map></map>
|
||||||
<map><key>target</key><map><key>type</key><string>string</string></map></map>
|
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osForceOtherSit</key>
|
<key>osForceOtherSit</key>
|
||||||
<map>
|
<map>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>avatar</key><map><key>type</key><string>string</string></map></map>
|
<map><key>avatar</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
<map><key>target</key><map><key>type</key><string>string</string></map></map>
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osFormatString</key>
|
<key>osFormatString</key>
|
||||||
|
@ -7215,6 +7426,18 @@
|
||||||
<key>return</key><string>string</string>
|
<key>return</key><string>string</string>
|
||||||
<key>arguments</key><undef/>
|
<key>arguments</key><undef/>
|
||||||
</map>
|
</map>
|
||||||
|
<key>osGetPrimCount</key>
|
||||||
|
<map>
|
||||||
|
<key>return</key><string>integer</string>
|
||||||
|
<key>arguments</key><array>
|
||||||
|
<map><key>object_id</key><map><key>type</key><string>key</string></map></map>
|
||||||
|
</array>
|
||||||
|
</map>
|
||||||
|
<key>osGetPrimCount</key>
|
||||||
|
<map>
|
||||||
|
<key>return</key><string>integer</string>
|
||||||
|
<key>arguments</key><undef/>
|
||||||
|
</map>
|
||||||
<key>osGetPrimitiveParams</key>
|
<key>osGetPrimitiveParams</key>
|
||||||
<map>
|
<map>
|
||||||
<key>return</key><string>list</string>
|
<key>return</key><string>list</string>
|
||||||
|
@ -7275,6 +7498,18 @@
|
||||||
<key>return</key><string>float</string>
|
<key>return</key><string>float</string>
|
||||||
<key>arguments</key><undef/>
|
<key>arguments</key><undef/>
|
||||||
</map>
|
</map>
|
||||||
|
<key>osGetSittingAvatarsCount</key>
|
||||||
|
<map>
|
||||||
|
<key>return</key><string>integer</string>
|
||||||
|
<key>arguments</key><undef/>
|
||||||
|
</map>
|
||||||
|
<key>osGetSittingAvatarsCount</key>
|
||||||
|
<map>
|
||||||
|
<key>return</key><string>integer</string>
|
||||||
|
<key>arguments</key><array>
|
||||||
|
<map><key>object_id</key><map><key>type</key><string>key</string></map></map>
|
||||||
|
</array>
|
||||||
|
</map>
|
||||||
<key>osGetStandTarget</key>
|
<key>osGetStandTarget</key>
|
||||||
<map>
|
<map>
|
||||||
<key>return</key><string>vector</string>
|
<key>return</key><string>vector</string>
|
||||||
|
@ -7430,14 +7665,14 @@
|
||||||
<map>
|
<map>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>notecardName</key><map><key>type</key><string>string</string></map></map>
|
<map><key>notecardName</key><map><key>type</key><string>string</string></map></map>
|
||||||
<map><key>contents</key><map><key>type</key><string>string</string></map></map>
|
<map><key>contents</key><map><key>type</key><string>list</string></map></map>
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osMakeNotecard</key>
|
<key>osMakeNotecard</key>
|
||||||
<map>
|
<map>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>notecardName</key><map><key>type</key><string>string</string></map></map>
|
<map><key>notecardName</key><map><key>type</key><string>string</string></map></map>
|
||||||
<map><key>contents</key><map><key>type</key><string>list</string></map></map>
|
<map><key>contents</key><map><key>type</key><string>string</string></map></map>
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osMatchString</key>
|
<key>osMatchString</key>
|
||||||
|
@ -7498,6 +7733,7 @@
|
||||||
<map><key>name</key><map><key>type</key><string>string</string></map></map>
|
<map><key>name</key><map><key>type</key><string>string</string></map></map>
|
||||||
<map><key>position</key><map><key>type</key><string>vector</string></map></map>
|
<map><key>position</key><map><key>type</key><string>vector</string></map></map>
|
||||||
<map><key>notecard</key><map><key>type</key><string>string</string></map></map>
|
<map><key>notecard</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
<map><key>options</key><map><key>type</key><string>integer</string></map></map>
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osNpcCreate</key>
|
<key>osNpcCreate</key>
|
||||||
|
@ -7508,7 +7744,6 @@
|
||||||
<map><key>name</key><map><key>type</key><string>string</string></map></map>
|
<map><key>name</key><map><key>type</key><string>string</string></map></map>
|
||||||
<map><key>position</key><map><key>type</key><string>vector</string></map></map>
|
<map><key>position</key><map><key>type</key><string>vector</string></map></map>
|
||||||
<map><key>notecard</key><map><key>type</key><string>string</string></map></map>
|
<map><key>notecard</key><map><key>type</key><string>string</string></map></map>
|
||||||
<map><key>options</key><map><key>type</key><string>integer</string></map></map>
|
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osNpcGetOwner</key>
|
<key>osNpcGetOwner</key>
|
||||||
|
@ -7583,7 +7818,6 @@
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>npc</key><map><key>type</key><string>key</string></map></map>
|
<map><key>npc</key><map><key>type</key><string>key</string></map></map>
|
||||||
<map><key>notecard</key><map><key>type</key><string>string</string></map></map>
|
<map><key>notecard</key><map><key>type</key><string>string</string></map></map>
|
||||||
<map><key>includeHuds</key><map><key>type</key><string>integer</string></map></map>
|
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osNpcSaveAppearance</key>
|
<key>osNpcSaveAppearance</key>
|
||||||
|
@ -7592,13 +7826,7 @@
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>npc</key><map><key>type</key><string>key</string></map></map>
|
<map><key>npc</key><map><key>type</key><string>key</string></map></map>
|
||||||
<map><key>notecard</key><map><key>type</key><string>string</string></map></map>
|
<map><key>notecard</key><map><key>type</key><string>string</string></map></map>
|
||||||
</array>
|
<map><key>includeHuds</key><map><key>type</key><string>integer</string></map></map>
|
||||||
</map>
|
|
||||||
<key>osNpcSay</key>
|
|
||||||
<map>
|
|
||||||
<key>arguments</key><array>
|
|
||||||
<map><key>npc</key><map><key>type</key><string>key</string></map></map>
|
|
||||||
<map><key>message</key><map><key>type</key><string>string</string></map></map>
|
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osNpcSay</key>
|
<key>osNpcSay</key>
|
||||||
|
@ -7609,6 +7837,13 @@
|
||||||
<map><key>message</key><map><key>type</key><string>string</string></map></map>
|
<map><key>message</key><map><key>type</key><string>string</string></map></map>
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
|
<key>osNpcSay</key>
|
||||||
|
<map>
|
||||||
|
<key>arguments</key><array>
|
||||||
|
<map><key>npc</key><map><key>type</key><string>key</string></map></map>
|
||||||
|
<map><key>message</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
</array>
|
||||||
|
</map>
|
||||||
<key>osNpcSayTo</key>
|
<key>osNpcSayTo</key>
|
||||||
<map>
|
<map>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
|
@ -7791,6 +8026,7 @@
|
||||||
<key>return</key><string>integer</string>
|
<key>return</key><string>integer</string>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>seconds</key><map><key>type</key><string>float</string></map></map>
|
<map><key>seconds</key><map><key>type</key><string>float</string></map></map>
|
||||||
|
<map><key>msg</key><map><key>type</key><string>string</string></map></map>
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osRegionRestart</key>
|
<key>osRegionRestart</key>
|
||||||
|
@ -7798,7 +8034,6 @@
|
||||||
<key>return</key><string>integer</string>
|
<key>return</key><string>integer</string>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>seconds</key><map><key>type</key><string>float</string></map></map>
|
<map><key>seconds</key><map><key>type</key><string>float</string></map></map>
|
||||||
<map><key>msg</key><map><key>type</key><string>string</string></map></map>
|
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osReplaceAgentEnvironment</key>
|
<key>osReplaceAgentEnvironment</key>
|
||||||
|
@ -8038,15 +8273,16 @@
|
||||||
<key>return</key><string>string</string>
|
<key>return</key><string>string</string>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>drawList</key><map><key>type</key><string>string</string></map></map>
|
<map><key>drawList</key><map><key>type</key><string>string</string></map></map>
|
||||||
<map><key>color</key><map><key>type</key><string>string</string></map></map>
|
<map><key>color</key><map><key>type</key><string>vector</string></map></map>
|
||||||
|
<map><key>alpha</key><map><key>type</key><string>float</string></map></map>
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osSetPenColor</key>
|
<key>osSetPenColor</key>
|
||||||
<map>
|
<map>
|
||||||
<key>return</key><string>string</string>
|
<key>return</key><string>string</string>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>drawList</key><map><key>type</key><string>string</string></map></map>
|
<map><key>drawList</key><map><key>type</key><string>string</string></map></map>
|
||||||
<map><key>color</key><map><key>type</key><string>vector</string></map></map>
|
<map><key>color</key><map><key>type</key><string>string</string></map></map>
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osSetPenColor</key>
|
<key>osSetPenColor</key>
|
||||||
|
@ -8055,7 +8291,6 @@
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>drawList</key><map><key>type</key><string>string</string></map></map>
|
<map><key>drawList</key><map><key>type</key><string>string</string></map></map>
|
||||||
<map><key>color</key><map><key>type</key><string>vector</string></map></map>
|
<map><key>color</key><map><key>type</key><string>vector</string></map></map>
|
||||||
<map><key>alpha</key><map><key>type</key><string>float</string></map></map>
|
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osSetPenColour</key>
|
<key>osSetPenColour</key>
|
||||||
|
@ -8088,6 +8323,17 @@
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osSetProjectionParams</key>
|
<key>osSetProjectionParams</key>
|
||||||
|
<map>
|
||||||
|
<key>arguments</key><array>
|
||||||
|
<map><key>linknumber</key><map><key>type</key><string>integer</string></map></map>
|
||||||
|
<map><key>projection</key><map><key>type</key><string>integer</string></map></map>
|
||||||
|
<map><key>texture</key><map><key>type</key><string>key</string></map></map>
|
||||||
|
<map><key>fov</key><map><key>type</key><string>float</string></map></map>
|
||||||
|
<map><key>focus</key><map><key>type</key><string>float</string></map></map>
|
||||||
|
<map><key>amb</key><map><key>type</key><string>float</string></map></map>
|
||||||
|
</array>
|
||||||
|
</map>
|
||||||
|
<key>osSetProjectionParams</key>
|
||||||
<map>
|
<map>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>projection</key><map><key>type</key><string>integer</string></map></map>
|
<map><key>projection</key><map><key>type</key><string>integer</string></map></map>
|
||||||
|
@ -8108,17 +8354,6 @@
|
||||||
<map><key>amb</key><map><key>type</key><string>float</string></map></map>
|
<map><key>amb</key><map><key>type</key><string>float</string></map></map>
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osSetProjectionParams</key>
|
|
||||||
<map>
|
|
||||||
<key>arguments</key><array>
|
|
||||||
<map><key>linknumber</key><map><key>type</key><string>integer</string></map></map>
|
|
||||||
<map><key>projection</key><map><key>type</key><string>integer</string></map></map>
|
|
||||||
<map><key>texture</key><map><key>type</key><string>key</string></map></map>
|
|
||||||
<map><key>fov</key><map><key>type</key><string>float</string></map></map>
|
|
||||||
<map><key>focus</key><map><key>type</key><string>float</string></map></map>
|
|
||||||
<map><key>amb</key><map><key>type</key><string>float</string></map></map>
|
|
||||||
</array>
|
|
||||||
</map>
|
|
||||||
<key>osSetRegionSunSettings</key>
|
<key>osSetRegionSunSettings</key>
|
||||||
<map>
|
<map>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
|
@ -8311,7 +8546,6 @@
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>src</key><map><key>type</key><string>string</string></map></map>
|
<map><key>src</key><map><key>type</key><string>string</string></map></map>
|
||||||
<map><key>start</key><map><key>type</key><string>integer</string></map></map>
|
<map><key>start</key><map><key>type</key><string>integer</string></map></map>
|
||||||
<map><key>length</key><map><key>type</key><string>integer</string></map></map>
|
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osStringSubString</key>
|
<key>osStringSubString</key>
|
||||||
|
@ -8320,6 +8554,7 @@
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>src</key><map><key>type</key><string>string</string></map></map>
|
<map><key>src</key><map><key>type</key><string>string</string></map></map>
|
||||||
<map><key>start</key><map><key>type</key><string>integer</string></map></map>
|
<map><key>start</key><map><key>type</key><string>integer</string></map></map>
|
||||||
|
<map><key>length</key><map><key>type</key><string>integer</string></map></map>
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osSunGetParam</key>
|
<key>osSunGetParam</key>
|
||||||
|
@ -8340,7 +8575,6 @@
|
||||||
<map>
|
<map>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>agent</key><map><key>type</key><string>string</string></map></map>
|
<map><key>agent</key><map><key>type</key><string>string</string></map></map>
|
||||||
<map><key>regionName</key><map><key>type</key><string>string</string></map></map>
|
|
||||||
<map><key>position</key><map><key>type</key><string>vector</string></map></map>
|
<map><key>position</key><map><key>type</key><string>vector</string></map></map>
|
||||||
<map><key>lookat</key><map><key>type</key><string>vector</string></map></map>
|
<map><key>lookat</key><map><key>type</key><string>vector</string></map></map>
|
||||||
</array>
|
</array>
|
||||||
|
@ -8359,6 +8593,7 @@
|
||||||
<map>
|
<map>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>agent</key><map><key>type</key><string>string</string></map></map>
|
<map><key>agent</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
<map><key>regionName</key><map><key>type</key><string>string</string></map></map>
|
||||||
<map><key>position</key><map><key>type</key><string>vector</string></map></map>
|
<map><key>position</key><map><key>type</key><string>vector</string></map></map>
|
||||||
<map><key>lookat</key><map><key>type</key><string>vector</string></map></map>
|
<map><key>lookat</key><map><key>type</key><string>vector</string></map></map>
|
||||||
</array>
|
</array>
|
||||||
|
@ -8374,6 +8609,14 @@
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osTeleportOwner</key>
|
<key>osTeleportOwner</key>
|
||||||
|
<map>
|
||||||
|
<key>arguments</key><array>
|
||||||
|
<map><key>regionName</key><map><key>type</key><string>string</string></map></map>
|
||||||
|
<map><key>position</key><map><key>type</key><string>vector</string></map></map>
|
||||||
|
<map><key>lookat</key><map><key>type</key><string>vector</string></map></map>
|
||||||
|
</array>
|
||||||
|
</map>
|
||||||
|
<key>osTeleportOwner</key>
|
||||||
<map>
|
<map>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>position</key><map><key>type</key><string>vector</string></map></map>
|
<map><key>position</key><map><key>type</key><string>vector</string></map></map>
|
||||||
|
@ -8389,14 +8632,6 @@
|
||||||
<map><key>lookat</key><map><key>type</key><string>vector</string></map></map>
|
<map><key>lookat</key><map><key>type</key><string>vector</string></map></map>
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osTeleportOwner</key>
|
|
||||||
<map>
|
|
||||||
<key>arguments</key><array>
|
|
||||||
<map><key>regionName</key><map><key>type</key><string>string</string></map></map>
|
|
||||||
<map><key>position</key><map><key>type</key><string>vector</string></map></map>
|
|
||||||
<map><key>lookat</key><map><key>type</key><string>vector</string></map></map>
|
|
||||||
</array>
|
|
||||||
</map>
|
|
||||||
<key>osTerrainFlush</key>
|
<key>osTerrainFlush</key>
|
||||||
<map>
|
<map>
|
||||||
<key>arguments</key><undef/>
|
<key>arguments</key><undef/>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user