Merge remote-tracking branch 'remotes/origin/avination' into teravuswork
commit
6007eae00f
|
@ -897,32 +897,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
msg.MessageBlock.Message = Util.StringToBytes1024(im.message);
|
||||
msg.MessageBlock.BinaryBucket = im.binaryBucket;
|
||||
|
||||
if (im.message.StartsWith("[grouptest]"))
|
||||
{ // this block is test code for implementing group IM - delete when group IM is finished
|
||||
IEventQueue eq = Scene.RequestModuleInterface<IEventQueue>();
|
||||
if (eq != null)
|
||||
{
|
||||
im.dialog = 17;
|
||||
|
||||
//eq.ChatterboxInvitation(
|
||||
// new UUID("00000000-68f9-1111-024e-222222111123"),
|
||||
// "OpenSimulator Testing", im.fromAgentID, im.message, im.toAgentID, im.fromAgentName, im.dialog, 0,
|
||||
// false, 0, new Vector3(), 1, im.imSessionID, im.fromGroup, im.binaryBucket);
|
||||
|
||||
eq.ChatterboxInvitation(
|
||||
new UUID("00000000-68f9-1111-024e-222222111123"),
|
||||
"OpenSimulator Testing", new UUID(im.fromAgentID), im.message, new UUID(im.toAgentID), im.fromAgentName, im.dialog, 0,
|
||||
false, 0, new Vector3(), 1, new UUID(im.imSessionID), im.fromGroup, Util.StringToBytes256("OpenSimulator Testing"));
|
||||
|
||||
eq.ChatterBoxSessionAgentListUpdates(
|
||||
new UUID("00000000-68f9-1111-024e-222222111123"),
|
||||
new UUID(im.fromAgentID), new UUID(im.toAgentID), false, false, false);
|
||||
}
|
||||
|
||||
Console.WriteLine("SendInstantMessage: " + msg);
|
||||
}
|
||||
else
|
||||
OutPacket(msg, ThrottleOutPacketType.Task);
|
||||
OutPacket(msg, ThrottleOutPacketType.Task);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,257 +0,0 @@
|
|||
/*
|
||||
* 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.Reflection;
|
||||
using log4net;
|
||||
using Nini.Config;
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
|
||||
using Mono.Addins;
|
||||
|
||||
namespace OpenSim.Region.CoreModules.Avatar.Groups
|
||||
{
|
||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "GroupsModule")]
|
||||
public class GroupsModule : ISharedRegionModule
|
||||
{
|
||||
private static readonly ILog m_log =
|
||||
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
private Dictionary<UUID, GroupMembershipData> m_GroupMap =
|
||||
new Dictionary<UUID, GroupMembershipData>();
|
||||
|
||||
private Dictionary<UUID, IClientAPI> m_ClientMap =
|
||||
new Dictionary<UUID, IClientAPI>();
|
||||
|
||||
private UUID opensimulatorGroupID =
|
||||
new UUID("00000000-68f9-1111-024e-222222111123");
|
||||
|
||||
private List<Scene> m_SceneList = new List<Scene>();
|
||||
|
||||
private static GroupMembershipData osGroup =
|
||||
new GroupMembershipData();
|
||||
|
||||
private bool m_Enabled = false;
|
||||
|
||||
#region ISharedRegionModule Members
|
||||
|
||||
public void Initialise(IConfigSource config)
|
||||
{
|
||||
IConfig groupsConfig = config.Configs["Groups"];
|
||||
|
||||
if (groupsConfig == null)
|
||||
{
|
||||
m_log.Info("[GROUPS]: No configuration found. Using defaults");
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Enabled = groupsConfig.GetBoolean("Enabled", false);
|
||||
if (!m_Enabled)
|
||||
{
|
||||
m_log.Info("[GROUPS]: Groups disabled in configuration");
|
||||
return;
|
||||
}
|
||||
|
||||
if (groupsConfig.GetString("Module", "Default") != "Default")
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
if (!m_Enabled)
|
||||
return;
|
||||
|
||||
lock (m_SceneList)
|
||||
{
|
||||
if (!m_SceneList.Contains(scene))
|
||||
{
|
||||
if (m_SceneList.Count == 0)
|
||||
{
|
||||
osGroup.GroupID = opensimulatorGroupID;
|
||||
osGroup.GroupName = "OpenSimulator Testing";
|
||||
osGroup.GroupPowers =
|
||||
(uint)(GroupPowers.AllowLandmark |
|
||||
GroupPowers.AllowSetHome);
|
||||
m_GroupMap[opensimulatorGroupID] = osGroup;
|
||||
}
|
||||
m_SceneList.Add(scene);
|
||||
}
|
||||
}
|
||||
|
||||
scene.EventManager.OnNewClient += OnNewClient;
|
||||
scene.EventManager.OnClientClosed += OnClientClosed;
|
||||
// scene.EventManager.OnIncomingInstantMessage += OnGridInstantMessage;
|
||||
}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
if (!m_Enabled)
|
||||
return;
|
||||
|
||||
lock (m_SceneList)
|
||||
{
|
||||
if (m_SceneList.Contains(scene))
|
||||
m_SceneList.Remove(scene);
|
||||
}
|
||||
|
||||
scene.EventManager.OnNewClient -= OnNewClient;
|
||||
scene.EventManager.OnClientClosed -= OnClientClosed;
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
{
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
if (!m_Enabled)
|
||||
return;
|
||||
|
||||
// m_log.Debug("[GROUPS]: Shutting down group module.");
|
||||
|
||||
lock (m_ClientMap)
|
||||
{
|
||||
m_ClientMap.Clear();
|
||||
}
|
||||
|
||||
lock (m_GroupMap)
|
||||
{
|
||||
m_GroupMap.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return "GroupsModule"; }
|
||||
}
|
||||
|
||||
public Type ReplaceableInterface
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private void OnNewClient(IClientAPI client)
|
||||
{
|
||||
// Subscribe to instant messages
|
||||
// client.OnInstantMessage += OnInstantMessage;
|
||||
client.OnAgentDataUpdateRequest += OnAgentDataUpdateRequest;
|
||||
client.OnUUIDGroupNameRequest += HandleUUIDGroupNameRequest;
|
||||
lock (m_ClientMap)
|
||||
{
|
||||
if (!m_ClientMap.ContainsKey(client.AgentId))
|
||||
{
|
||||
m_ClientMap.Add(client.AgentId, client);
|
||||
}
|
||||
}
|
||||
|
||||
GroupMembershipData[] updateGroups = new GroupMembershipData[1];
|
||||
updateGroups[0] = osGroup;
|
||||
|
||||
client.SendGroupMembership(updateGroups);
|
||||
}
|
||||
|
||||
private void OnAgentDataUpdateRequest(IClientAPI remoteClient,
|
||||
UUID AgentID, UUID SessionID)
|
||||
{
|
||||
UUID ActiveGroupID;
|
||||
string ActiveGroupName;
|
||||
ulong ActiveGroupPowers;
|
||||
|
||||
string firstname = remoteClient.FirstName;
|
||||
string lastname = remoteClient.LastName;
|
||||
|
||||
string ActiveGroupTitle = "I IZ N0T";
|
||||
|
||||
ActiveGroupID = osGroup.GroupID;
|
||||
ActiveGroupName = osGroup.GroupName;
|
||||
ActiveGroupPowers = osGroup.GroupPowers;
|
||||
|
||||
remoteClient.SendAgentDataUpdate(AgentID, ActiveGroupID, firstname,
|
||||
lastname, ActiveGroupPowers, ActiveGroupName,
|
||||
ActiveGroupTitle);
|
||||
}
|
||||
|
||||
// private void OnInstantMessage(IClientAPI client, GridInstantMessage im)
|
||||
// {
|
||||
// }
|
||||
|
||||
// private void OnGridInstantMessage(GridInstantMessage msg)
|
||||
// {
|
||||
// // Trigger the above event handler
|
||||
// OnInstantMessage(null, msg);
|
||||
// }
|
||||
|
||||
private void HandleUUIDGroupNameRequest(UUID id,IClientAPI remote_client)
|
||||
{
|
||||
string groupnamereply = "Unknown";
|
||||
UUID groupUUID = UUID.Zero;
|
||||
|
||||
lock (m_GroupMap)
|
||||
{
|
||||
if (m_GroupMap.ContainsKey(id))
|
||||
{
|
||||
GroupMembershipData grp = m_GroupMap[id];
|
||||
groupnamereply = grp.GroupName;
|
||||
groupUUID = grp.GroupID;
|
||||
}
|
||||
}
|
||||
remote_client.SendGroupNameReply(groupUUID, groupnamereply);
|
||||
}
|
||||
|
||||
private void OnClientClosed(UUID agentID, Scene scene)
|
||||
{
|
||||
lock (m_ClientMap)
|
||||
{
|
||||
if (m_ClientMap.ContainsKey(agentID))
|
||||
{
|
||||
// IClientAPI cli = m_ClientMap[agentID];
|
||||
// if (cli != null)
|
||||
// {
|
||||
// //m_log.Info("[GROUPS]: Removing all reference to groups for " + cli.Name);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// //m_log.Info("[GROUPS]: Removing all reference to groups for " + agentID.ToString());
|
||||
// }
|
||||
m_ClientMap.Remove(agentID);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -150,6 +150,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
{
|
||||
client.OnTeleportHomeRequest += TriggerTeleportHome;
|
||||
client.OnTeleportLandmarkRequest += RequestTeleportLandmark;
|
||||
client.OnTeleportCancel += TeleportCancel;
|
||||
}
|
||||
|
||||
public virtual void Close() {}
|
||||
|
@ -993,6 +994,11 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
return neighbourRegion;
|
||||
}
|
||||
|
||||
private void TeleportCancel(IClientAPI remoteClient)
|
||||
{
|
||||
m_entityTransferStateMachine.ResetFromTransit(remoteClient.AgentId);
|
||||
}
|
||||
|
||||
public bool Cross(ScenePresence agent, bool isFlying)
|
||||
{
|
||||
uint x;
|
||||
|
|
|
@ -42,6 +42,7 @@ using OpenSim.Framework.Servers.HttpServer;
|
|||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
using Mono.Addins;
|
||||
using Amib.Threading;
|
||||
|
||||
/*****************************************************
|
||||
*
|
||||
|
@ -102,6 +103,7 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
|||
private Dictionary<UUID, HttpRequestClass> m_pendingRequests;
|
||||
private Scene m_scene;
|
||||
// private Queue<HttpRequestClass> rpcQueue = new Queue<HttpRequestClass>();
|
||||
public static SmartThreadPool ThreadPool = null;
|
||||
|
||||
public HttpRequestModule()
|
||||
{
|
||||
|
@ -279,7 +281,30 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
|||
m_proxyurl = config.Configs["Startup"].GetString("HttpProxy");
|
||||
m_proxyexcepts = config.Configs["Startup"].GetString("HttpProxyExceptions");
|
||||
|
||||
int maxThreads = 50;
|
||||
|
||||
IConfig httpConfig = config.Configs["HttpRequestModule"];
|
||||
if (httpConfig != null)
|
||||
{
|
||||
maxThreads = httpConfig.GetInt("MaxPoolThreads", maxThreads);
|
||||
}
|
||||
|
||||
m_pendingRequests = new Dictionary<UUID, HttpRequestClass>();
|
||||
|
||||
// First instance sets this up for all sims
|
||||
if (ThreadPool == null)
|
||||
{
|
||||
STPStartInfo startInfo = new STPStartInfo();
|
||||
startInfo.IdleTimeout = 20000;
|
||||
startInfo.MaxWorkerThreads = maxThreads;
|
||||
startInfo.MinWorkerThreads = 5;
|
||||
startInfo.ThreadPriority = ThreadPriority.BelowNormal;
|
||||
startInfo.StartSuspended = true;
|
||||
|
||||
ThreadPool = new SmartThreadPool(startInfo);
|
||||
|
||||
ThreadPool.Start();
|
||||
}
|
||||
}
|
||||
|
||||
public void AddRegion(Scene scene)
|
||||
|
@ -340,7 +365,7 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
|||
public string HttpMIMEType = "text/plain;charset=utf-8";
|
||||
public int HttpTimeout;
|
||||
public bool HttpVerifyCert = true;
|
||||
private Thread httpThread;
|
||||
public IWorkItemResult WorkItem = null;
|
||||
|
||||
// Request info
|
||||
private UUID _itemID;
|
||||
|
@ -374,12 +399,16 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
|||
|
||||
public void Process()
|
||||
{
|
||||
httpThread = new Thread(SendRequest);
|
||||
httpThread.Name = "HttpRequestThread";
|
||||
httpThread.Priority = ThreadPriority.BelowNormal;
|
||||
httpThread.IsBackground = true;
|
||||
_finished = false;
|
||||
httpThread.Start();
|
||||
|
||||
lock (HttpRequestModule.ThreadPool)
|
||||
WorkItem = HttpRequestModule.ThreadPool.QueueWorkItem(new WorkItemCallback(StpSendWrapper), null);
|
||||
}
|
||||
|
||||
private object StpSendWrapper(object o)
|
||||
{
|
||||
SendRequest();
|
||||
return null;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -409,13 +438,8 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
|||
{
|
||||
// We could hijack Connection Group Name to identify
|
||||
// a desired security exception. But at the moment we'll use a dummy header instead.
|
||||
// Request.ConnectionGroupName = "NoVerify";
|
||||
Request.Headers.Add("NoVerifyCert", "true");
|
||||
}
|
||||
// else
|
||||
// {
|
||||
// Request.ConnectionGroupName="Verify";
|
||||
// }
|
||||
if (proxyurl != null && proxyurl.Length > 0)
|
||||
{
|
||||
if (proxyexcepts != null && proxyexcepts.Length > 0)
|
||||
|
@ -485,9 +509,9 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
|||
|
||||
ResponseBody = sb.ToString().Replace("\r", "");
|
||||
}
|
||||
catch (Exception e)
|
||||
catch (WebException e)
|
||||
{
|
||||
if (e is WebException && ((WebException)e).Status == WebExceptionStatus.ProtocolError)
|
||||
if (e.Status == WebExceptionStatus.ProtocolError)
|
||||
{
|
||||
HttpWebResponse webRsp = (HttpWebResponse)((WebException)e).Response;
|
||||
Status = (int)webRsp.StatusCode;
|
||||
|
@ -512,6 +536,10 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
|||
_finished = true;
|
||||
return;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// Don't crash on anything else
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (response != null)
|
||||
|
@ -525,7 +553,10 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
|||
{
|
||||
try
|
||||
{
|
||||
httpThread.Abort();
|
||||
if (!WorkItem.Cancel())
|
||||
{
|
||||
WorkItem.Abort();
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
|
|
@ -282,7 +282,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
private readonly Timer m_restartTimer = new Timer(15000); // Wait before firing
|
||||
private volatile bool m_backingup;
|
||||
private Dictionary<UUID, ReturnInfo> m_returns = new Dictionary<UUID, ReturnInfo>();
|
||||
private Dictionary<UUID, SceneObjectGroup> m_groupsWithTargets = new Dictionary<UUID, SceneObjectGroup>();
|
||||
private Dictionary<UUID, int> m_groupsWithTargets = new Dictionary<UUID, int>();
|
||||
|
||||
private bool m_physics_enabled = true;
|
||||
private bool m_scripts_enabled = true;
|
||||
|
@ -1736,7 +1736,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
public void AddGroupTarget(SceneObjectGroup grp)
|
||||
{
|
||||
lock (m_groupsWithTargets)
|
||||
m_groupsWithTargets[grp.UUID] = grp;
|
||||
m_groupsWithTargets[grp.UUID] = 0;
|
||||
}
|
||||
|
||||
public void RemoveGroupTarget(SceneObjectGroup grp)
|
||||
|
@ -1747,18 +1747,24 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
private void CheckAtTargets()
|
||||
{
|
||||
List<SceneObjectGroup> objs = null;
|
||||
List<UUID> objs = null;
|
||||
|
||||
lock (m_groupsWithTargets)
|
||||
{
|
||||
if (m_groupsWithTargets.Count != 0)
|
||||
objs = new List<SceneObjectGroup>(m_groupsWithTargets.Values);
|
||||
objs = new List<UUID>(m_groupsWithTargets.Keys);
|
||||
}
|
||||
|
||||
if (objs != null)
|
||||
{
|
||||
foreach (SceneObjectGroup entry in objs)
|
||||
entry.checkAtTargets();
|
||||
foreach (UUID entry in objs)
|
||||
{
|
||||
SceneObjectGroup grp = GetSceneObjectGroup(entry);
|
||||
if (grp == null)
|
||||
m_groupsWithTargets.Remove(entry);
|
||||
else
|
||||
grp.checkAtTargets();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -79,14 +79,14 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
object_rez = 4194304
|
||||
}
|
||||
|
||||
struct scriptPosTarget
|
||||
public struct scriptPosTarget
|
||||
{
|
||||
public Vector3 targetPos;
|
||||
public float tolerance;
|
||||
public uint handle;
|
||||
}
|
||||
|
||||
struct scriptRotTarget
|
||||
public struct scriptRotTarget
|
||||
{
|
||||
public Quaternion targetRot;
|
||||
public float tolerance;
|
||||
|
@ -320,8 +320,18 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
protected SceneObjectPart m_rootPart;
|
||||
// private Dictionary<UUID, scriptEvents> m_scriptEvents = new Dictionary<UUID, scriptEvents>();
|
||||
|
||||
private Dictionary<uint, scriptPosTarget> m_targets = new Dictionary<uint, scriptPosTarget>();
|
||||
private Dictionary<uint, scriptRotTarget> m_rotTargets = new Dictionary<uint, scriptRotTarget>();
|
||||
private SortedDictionary<uint, scriptPosTarget> m_targets = new SortedDictionary<uint, scriptPosTarget>();
|
||||
private SortedDictionary<uint, scriptRotTarget> m_rotTargets = new SortedDictionary<uint, scriptRotTarget>();
|
||||
|
||||
public SortedDictionary<uint, scriptPosTarget> AtTargets
|
||||
{
|
||||
get { return m_targets; }
|
||||
}
|
||||
|
||||
public SortedDictionary<uint, scriptRotTarget> RotTargets
|
||||
{
|
||||
get { return m_rotTargets; }
|
||||
}
|
||||
|
||||
private bool m_scriptListens_atTarget;
|
||||
private bool m_scriptListens_notAtTarget;
|
||||
|
@ -4112,6 +4122,8 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
waypoint.handle = handle;
|
||||
lock (m_rotTargets)
|
||||
{
|
||||
if (m_rotTargets.Count >= 8)
|
||||
m_rotTargets.Remove(m_rotTargets.ElementAt(0).Key);
|
||||
m_rotTargets.Add(handle, waypoint);
|
||||
}
|
||||
m_scene.AddGroupTarget(this);
|
||||
|
@ -4137,6 +4149,8 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
waypoint.handle = handle;
|
||||
lock (m_targets)
|
||||
{
|
||||
if (m_targets.Count >= 8)
|
||||
m_targets.Remove(m_targets.ElementAt(0).Key);
|
||||
m_targets.Add(handle, waypoint);
|
||||
}
|
||||
m_scene.AddGroupTarget(this);
|
||||
|
|
|
@ -7782,8 +7782,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
m_host.AddScriptLPS(1);
|
||||
|
||||
setLinkPrimParams(linknumber, rules, "llSetLinkPrimitiveParamsFast");
|
||||
|
||||
ScriptSleep(200);
|
||||
}
|
||||
|
||||
private void setLinkPrimParams(int linknumber, LSL_List rules, string originFunc)
|
||||
|
|
|
@ -1680,6 +1680,7 @@
|
|||
|
||||
<!-- To allow regions to have mono addins -->
|
||||
<Reference name="Mono.Addins" path="../../../bin/"/>
|
||||
<Reference name="SmartThreadPool"/>
|
||||
|
||||
<Files>
|
||||
<Match buildAction="EmbeddedResource" path="Resources" pattern="*.addin.xml" recurse="true"/>
|
||||
|
|
Loading…
Reference in New Issue