Merge branch 'master' into bulletsim
commit
c3f579046c
|
@ -488,11 +488,11 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
|
||||||
rdata.userAppearance.AvatarHeight = (float) Convert.ToDouble(xml.Value);
|
rdata.userAppearance.AvatarHeight = (float) Convert.ToDouble(xml.Value);
|
||||||
indata = true;
|
indata = true;
|
||||||
}
|
}
|
||||||
if (xml.MoveToAttribute("Owner"))
|
// if (xml.MoveToAttribute("Owner"))
|
||||||
{
|
// {
|
||||||
rdata.userAppearance.Owner = (UUID)xml.Value;
|
// rdata.userAppearance.Owner = (UUID)xml.Value;
|
||||||
indata = true;
|
// indata = true;
|
||||||
}
|
// }
|
||||||
if (xml.MoveToAttribute("Serial"))
|
if (xml.MoveToAttribute("Serial"))
|
||||||
{
|
{
|
||||||
rdata.userAppearance.Serial = Convert.ToInt32(xml.Value);
|
rdata.userAppearance.Serial = Convert.ToInt32(xml.Value);
|
||||||
|
@ -747,8 +747,8 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
|
||||||
rdata.writer.WriteStartElement("Appearance");
|
rdata.writer.WriteStartElement("Appearance");
|
||||||
|
|
||||||
rdata.writer.WriteAttributeString("Height", rdata.userAppearance.AvatarHeight.ToString());
|
rdata.writer.WriteAttributeString("Height", rdata.userAppearance.AvatarHeight.ToString());
|
||||||
if (rdata.userAppearance.Owner != UUID.Zero)
|
// if (rdata.userAppearance.Owner != UUID.Zero)
|
||||||
rdata.writer.WriteAttributeString("Owner", rdata.userAppearance.Owner.ToString());
|
// rdata.writer.WriteAttributeString("Owner", rdata.userAppearance.Owner.ToString());
|
||||||
rdata.writer.WriteAttributeString("Serial", rdata.userAppearance.Serial.ToString());
|
rdata.writer.WriteAttributeString("Serial", rdata.userAppearance.Serial.ToString());
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -169,7 +169,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory.Tests
|
||||||
float y = Convert.ToSingle(rdata.Parameters[PARM_MOVE_Y]);
|
float y = Convert.ToSingle(rdata.Parameters[PARM_MOVE_Y]);
|
||||||
float z = Convert.ToSingle(rdata.Parameters[PARM_MOVE_Z]);
|
float z = Convert.ToSingle(rdata.Parameters[PARM_MOVE_Z]);
|
||||||
Vector3 vector = new Vector3(x, y, z);
|
Vector3 vector = new Vector3(x, y, z);
|
||||||
presence.DoAutoPilot(0,vector,presence.ControllingClient);
|
presence.MoveToTarget(vector);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|
|
@ -296,11 +296,12 @@ namespace OpenSim.Framework
|
||||||
if (args["start_pos"] != null)
|
if (args["start_pos"] != null)
|
||||||
Vector3.TryParse(args["start_pos"].AsString(), out startpos);
|
Vector3.TryParse(args["start_pos"].AsString(), out startpos);
|
||||||
|
|
||||||
m_log.InfoFormat("[AGENTCIRCUITDATA] agentid={0}, child={1}, startpos={2}",AgentID,child,startpos.ToString());
|
m_log.InfoFormat("[AGENTCIRCUITDATA]: agentid={0}, child={1}, startpos={2}", AgentID, child, startpos);
|
||||||
|
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
// Unpack various appearance elements
|
// Unpack various appearance elements
|
||||||
Appearance = new AvatarAppearance(AgentID);
|
Appearance = new AvatarAppearance();
|
||||||
|
|
||||||
// Eventually this code should be deprecated, use full appearance
|
// Eventually this code should be deprecated, use full appearance
|
||||||
// packing in packed_appearance
|
// packing in packed_appearance
|
||||||
|
@ -313,7 +314,9 @@ namespace OpenSim.Framework
|
||||||
m_log.InfoFormat("[AGENTCIRCUITDATA] unpacked appearance");
|
m_log.InfoFormat("[AGENTCIRCUITDATA] unpacked appearance");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
m_log.Warn("[AGENTCIRCUITDATA] failed to find a valid packed_appearance");
|
{
|
||||||
|
m_log.Warn("[AGENTCIRCUITDATA]: failed to find a valid packed_appearance");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|
|
@ -47,7 +47,6 @@ namespace OpenSim.Framework
|
||||||
public readonly static int TEXTURE_COUNT = 21;
|
public readonly static int TEXTURE_COUNT = 21;
|
||||||
public readonly static byte[] BAKE_INDICES = new byte[] { 8, 9, 10, 11, 19, 20 };
|
public readonly static byte[] BAKE_INDICES = new byte[] { 8, 9, 10, 11, 19, 20 };
|
||||||
|
|
||||||
protected UUID m_owner;
|
|
||||||
protected int m_serial = 0;
|
protected int m_serial = 0;
|
||||||
protected byte[] m_visualparams;
|
protected byte[] m_visualparams;
|
||||||
protected Primitive.TextureEntry m_texture;
|
protected Primitive.TextureEntry m_texture;
|
||||||
|
@ -56,12 +55,6 @@ namespace OpenSim.Framework
|
||||||
protected float m_avatarHeight = 0;
|
protected float m_avatarHeight = 0;
|
||||||
protected float m_hipOffset = 0;
|
protected float m_hipOffset = 0;
|
||||||
|
|
||||||
public virtual UUID Owner
|
|
||||||
{
|
|
||||||
get { return m_owner; }
|
|
||||||
set { m_owner = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual int Serial
|
public virtual int Serial
|
||||||
{
|
{
|
||||||
get { return m_serial; }
|
get { return m_serial; }
|
||||||
|
@ -77,7 +70,11 @@ namespace OpenSim.Framework
|
||||||
public virtual Primitive.TextureEntry Texture
|
public virtual Primitive.TextureEntry Texture
|
||||||
{
|
{
|
||||||
get { return m_texture; }
|
get { return m_texture; }
|
||||||
set { m_texture = value; }
|
set
|
||||||
|
{
|
||||||
|
// m_log.DebugFormat("[AVATAR APPEARANCE]: Set TextureEntry to {0}", value);
|
||||||
|
m_texture = value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual AvatarWearable[] Wearables
|
public virtual AvatarWearable[] Wearables
|
||||||
|
@ -97,38 +94,31 @@ namespace OpenSim.Framework
|
||||||
get { return m_hipOffset; }
|
get { return m_hipOffset; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public AvatarAppearance() : this(UUID.Zero) {}
|
public AvatarAppearance()
|
||||||
|
|
||||||
public AvatarAppearance(UUID owner)
|
|
||||||
{
|
{
|
||||||
// m_log.WarnFormat("[AVATAR APPEARANCE]: create empty appearance for {0}",owner);
|
// m_log.WarnFormat("[AVATAR APPEARANCE]: create empty appearance");
|
||||||
|
|
||||||
m_serial = 0;
|
m_serial = 0;
|
||||||
m_owner = owner;
|
|
||||||
|
|
||||||
SetDefaultWearables();
|
SetDefaultWearables();
|
||||||
SetDefaultTexture();
|
SetDefaultTexture();
|
||||||
SetDefaultParams();
|
SetDefaultParams();
|
||||||
SetHeight();
|
SetHeight();
|
||||||
|
|
||||||
m_attachments = new Dictionary<int, List<AvatarAttachment>>();
|
m_attachments = new Dictionary<int, List<AvatarAttachment>>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public AvatarAppearance(UUID avatarID, OSDMap map)
|
public AvatarAppearance(OSDMap map)
|
||||||
{
|
{
|
||||||
// m_log.WarnFormat("[AVATAR APPEARANCE]: create appearance for {0} from OSDMap",avatarID);
|
// m_log.WarnFormat("[AVATAR APPEARANCE]: create appearance from OSDMap");
|
||||||
|
|
||||||
m_owner = avatarID;
|
|
||||||
Unpack(map);
|
Unpack(map);
|
||||||
SetHeight();
|
SetHeight();
|
||||||
}
|
}
|
||||||
|
|
||||||
public AvatarAppearance(UUID avatarID, AvatarWearable[] wearables, Primitive.TextureEntry textureEntry, byte[] visualParams)
|
public AvatarAppearance(AvatarWearable[] wearables, Primitive.TextureEntry textureEntry, byte[] visualParams)
|
||||||
{
|
{
|
||||||
// m_log.WarnFormat("[AVATAR APPEARANCE] create initialized appearance for {0}",avatarID);
|
// m_log.WarnFormat("[AVATAR APPEARANCE] create initialized appearance");
|
||||||
|
|
||||||
m_serial = 0;
|
m_serial = 0;
|
||||||
m_owner = avatarID;
|
|
||||||
|
|
||||||
if (wearables != null)
|
if (wearables != null)
|
||||||
m_wearables = wearables;
|
m_wearables = wearables;
|
||||||
|
@ -161,24 +151,21 @@ namespace OpenSim.Framework
|
||||||
if (appearance == null)
|
if (appearance == null)
|
||||||
{
|
{
|
||||||
m_serial = 0;
|
m_serial = 0;
|
||||||
m_owner = UUID.Zero;
|
|
||||||
|
|
||||||
SetDefaultWearables();
|
SetDefaultWearables();
|
||||||
SetDefaultTexture();
|
SetDefaultTexture();
|
||||||
SetDefaultParams();
|
SetDefaultParams();
|
||||||
SetHeight();
|
SetHeight();
|
||||||
|
|
||||||
m_attachments = new Dictionary<int, List<AvatarAttachment>>();
|
m_attachments = new Dictionary<int, List<AvatarAttachment>>();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_serial = appearance.Serial;
|
m_serial = appearance.Serial;
|
||||||
m_owner = appearance.Owner;
|
|
||||||
|
|
||||||
m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES];
|
m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES];
|
||||||
for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
|
for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
|
||||||
m_wearables[i] = new AvatarWearable();
|
m_wearables[i] = new AvatarWearable();
|
||||||
|
|
||||||
if (copyWearables && (appearance.Wearables != null))
|
if (copyWearables && (appearance.Wearables != null))
|
||||||
{
|
{
|
||||||
for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
|
for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
|
||||||
|
|
|
@ -593,7 +593,7 @@ namespace OpenSim.Framework
|
||||||
// AgentTextures[i++] = o.AsUUID();
|
// AgentTextures[i++] = o.AsUUID();
|
||||||
//}
|
//}
|
||||||
|
|
||||||
Appearance = new AvatarAppearance(AgentID);
|
Appearance = new AvatarAppearance();
|
||||||
|
|
||||||
// The code to unpack textures, visuals, wearables and attachments
|
// The code to unpack textures, visuals, wearables and attachments
|
||||||
// should be removed; packed appearance contains the full appearance
|
// should be removed; packed appearance contains the full appearance
|
||||||
|
@ -635,7 +635,7 @@ namespace OpenSim.Framework
|
||||||
// end of code to remove
|
// end of code to remove
|
||||||
|
|
||||||
if (args.ContainsKey("packed_appearance") && (args["packed_appearance"]).Type == OSDType.Map)
|
if (args.ContainsKey("packed_appearance") && (args["packed_appearance"]).Type == OSDType.Map)
|
||||||
Appearance = new AvatarAppearance(AgentID,(OSDMap)args["packed_appearance"]);
|
Appearance = new AvatarAppearance((OSDMap)args["packed_appearance"]);
|
||||||
else
|
else
|
||||||
m_log.WarnFormat("[CHILDAGENTDATAUPDATE] No packed appearance");
|
m_log.WarnFormat("[CHILDAGENTDATAUPDATE] No packed appearance");
|
||||||
|
|
||||||
|
|
|
@ -935,7 +935,7 @@ namespace OpenSim.Framework
|
||||||
event ScriptReset OnScriptReset;
|
event ScriptReset OnScriptReset;
|
||||||
event GetScriptRunning OnGetScriptRunning;
|
event GetScriptRunning OnGetScriptRunning;
|
||||||
event SetScriptRunning OnSetScriptRunning;
|
event SetScriptRunning OnSetScriptRunning;
|
||||||
event UpdateVector OnAutoPilotGo;
|
event Action<Vector3> OnAutoPilotGo;
|
||||||
|
|
||||||
event TerrainUnacked OnUnackedTerrain;
|
event TerrainUnacked OnUnackedTerrain;
|
||||||
event ActivateGesture OnActivateGesture;
|
event ActivateGesture OnActivateGesture;
|
||||||
|
@ -1395,7 +1395,7 @@ namespace OpenSim.Framework
|
||||||
void SendGroupTransactionsSummaryDetails(IClientAPI sender,UUID groupID, UUID transactionID, UUID sessionID,int amt);
|
void SendGroupTransactionsSummaryDetails(IClientAPI sender,UUID groupID, UUID transactionID, UUID sessionID,int amt);
|
||||||
|
|
||||||
void SendChangeUserRights(UUID agentID, UUID friendID, int rights);
|
void SendChangeUserRights(UUID agentID, UUID friendID, int rights);
|
||||||
void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId);
|
void SendTextBoxRequest(string message, int chatChannel, string objectname, UUID ownerID, string ownerFirstName, string ownerLastName, UUID objectId);
|
||||||
|
|
||||||
void StopFlying(ISceneEntity presence);
|
void StopFlying(ISceneEntity presence);
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Reflection;
|
||||||
|
using log4net;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
|
|
||||||
namespace OpenSim.Framework
|
namespace OpenSim.Framework
|
||||||
|
@ -402,6 +404,10 @@ namespace OpenSim.Framework
|
||||||
{
|
{
|
||||||
foreach (InventoryItemBase item in Items.Values)
|
foreach (InventoryItemBase item in Items.Values)
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[INVENTORY FOLDER IMPL]: Returning item {0} {1}, OwnerPermissions {2:X}",
|
||||||
|
// item.Name, item.ID, item.CurrentPermissions);
|
||||||
|
|
||||||
itemList.Add(item);
|
itemList.Add(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -144,6 +144,7 @@ namespace OpenSim.Framework
|
||||||
m_log.WarnFormat("[PACKETPOOL]: Failed to get packet of type {0}", type);
|
m_log.WarnFormat("[PACKETPOOL]: Failed to get packet of type {0}", type);
|
||||||
else
|
else
|
||||||
packet.FromBytes(bytes, ref i, ref packetEnd, zeroBuffer);
|
packet.FromBytes(bytes, ref i, ref packetEnd, zeroBuffer);
|
||||||
|
|
||||||
return packet;
|
return packet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,19 +161,18 @@ namespace OpenSim.Framework
|
||||||
case PacketType.ObjectUpdate:
|
case PacketType.ObjectUpdate:
|
||||||
ObjectUpdatePacket oup = (ObjectUpdatePacket)packet;
|
ObjectUpdatePacket oup = (ObjectUpdatePacket)packet;
|
||||||
|
|
||||||
foreach (ObjectUpdatePacket.ObjectDataBlock oupod in
|
foreach (ObjectUpdatePacket.ObjectDataBlock oupod in oup.ObjectData)
|
||||||
oup.ObjectData)
|
|
||||||
ReturnDataBlock<ObjectUpdatePacket.ObjectDataBlock>(oupod);
|
ReturnDataBlock<ObjectUpdatePacket.ObjectDataBlock>(oupod);
|
||||||
|
|
||||||
oup.ObjectData = null;
|
oup.ObjectData = null;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PacketType.ImprovedTerseObjectUpdate:
|
case PacketType.ImprovedTerseObjectUpdate:
|
||||||
ImprovedTerseObjectUpdatePacket itoup =
|
ImprovedTerseObjectUpdatePacket itoup = (ImprovedTerseObjectUpdatePacket)packet;
|
||||||
(ImprovedTerseObjectUpdatePacket)packet;
|
|
||||||
|
|
||||||
foreach (ImprovedTerseObjectUpdatePacket.ObjectDataBlock
|
foreach (ImprovedTerseObjectUpdatePacket.ObjectDataBlock itoupod in itoup.ObjectData)
|
||||||
itoupod in itoup.ObjectData)
|
|
||||||
ReturnDataBlock<ImprovedTerseObjectUpdatePacket.ObjectDataBlock>(itoupod);
|
ReturnDataBlock<ImprovedTerseObjectUpdatePacket.ObjectDataBlock>(itoupod);
|
||||||
|
|
||||||
itoup.ObjectData = null;
|
itoup.ObjectData = null;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -194,6 +194,7 @@ namespace OpenSim.Framework
|
||||||
{
|
{
|
||||||
pool[type] = new Stack<Packet>();
|
pool[type] = new Stack<Packet>();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((pool[type]).Count < 50)
|
if ((pool[type]).Count < 50)
|
||||||
{
|
{
|
||||||
(pool[type]).Push(packet);
|
(pool[type]).Push(packet);
|
||||||
|
@ -223,6 +224,7 @@ namespace OpenSim.Framework
|
||||||
{
|
{
|
||||||
DataBlocks[typeof(T)] = new Stack<Object>();
|
DataBlocks[typeof(T)] = new Stack<Object>();
|
||||||
}
|
}
|
||||||
|
|
||||||
return new T();
|
return new T();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -234,6 +236,9 @@ namespace OpenSim.Framework
|
||||||
|
|
||||||
lock (DataBlocks)
|
lock (DataBlocks)
|
||||||
{
|
{
|
||||||
|
if (!DataBlocks.ContainsKey(typeof(T)))
|
||||||
|
DataBlocks[typeof(T)] = new Stack<Object>();
|
||||||
|
|
||||||
if (DataBlocks[typeof(T)].Count < 50)
|
if (DataBlocks[typeof(T)].Count < 50)
|
||||||
DataBlocks[typeof(T)].Push(block);
|
DataBlocks[typeof(T)].Push(block);
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ namespace OpenSim.Framework.Tests
|
||||||
SecureSessionId = UUID.Random();
|
SecureSessionId = UUID.Random();
|
||||||
SessionId = UUID.Random();
|
SessionId = UUID.Random();
|
||||||
|
|
||||||
AvAppearance = new AvatarAppearance(AgentId);
|
AvAppearance = new AvatarAppearance();
|
||||||
VisualParams = new byte[218];
|
VisualParams = new byte[218];
|
||||||
|
|
||||||
//body
|
//body
|
||||||
|
|
|
@ -68,7 +68,7 @@ namespace OpenSim.Framework.Tests
|
||||||
|
|
||||||
m_agentCircuitData1 = new AgentCircuitData();
|
m_agentCircuitData1 = new AgentCircuitData();
|
||||||
m_agentCircuitData1.AgentID = AgentId1;
|
m_agentCircuitData1.AgentID = AgentId1;
|
||||||
m_agentCircuitData1.Appearance = new AvatarAppearance(AgentId1);
|
m_agentCircuitData1.Appearance = new AvatarAppearance();
|
||||||
m_agentCircuitData1.BaseFolder = BaseFolder;
|
m_agentCircuitData1.BaseFolder = BaseFolder;
|
||||||
m_agentCircuitData1.CapsPath = CapsPath;
|
m_agentCircuitData1.CapsPath = CapsPath;
|
||||||
m_agentCircuitData1.child = false;
|
m_agentCircuitData1.child = false;
|
||||||
|
@ -83,7 +83,7 @@ namespace OpenSim.Framework.Tests
|
||||||
|
|
||||||
m_agentCircuitData2 = new AgentCircuitData();
|
m_agentCircuitData2 = new AgentCircuitData();
|
||||||
m_agentCircuitData2.AgentID = AgentId2;
|
m_agentCircuitData2.AgentID = AgentId2;
|
||||||
m_agentCircuitData2.Appearance = new AvatarAppearance(AgentId2);
|
m_agentCircuitData2.Appearance = new AvatarAppearance();
|
||||||
m_agentCircuitData2.BaseFolder = BaseFolder;
|
m_agentCircuitData2.BaseFolder = BaseFolder;
|
||||||
m_agentCircuitData2.CapsPath = CapsPath;
|
m_agentCircuitData2.CapsPath = CapsPath;
|
||||||
m_agentCircuitData2.child = false;
|
m_agentCircuitData2.child = false;
|
||||||
|
|
|
@ -1499,25 +1499,30 @@ namespace OpenSim.Framework
|
||||||
|
|
||||||
public static void FireAndForget(System.Threading.WaitCallback callback, object obj)
|
public static void FireAndForget(System.Threading.WaitCallback callback, object obj)
|
||||||
{
|
{
|
||||||
|
// When OpenSim interacts with a database or sends data over the wire, it must send this in en_US culture
|
||||||
|
// so that we don't encounter problems where, for instance, data is saved with a culture that uses commas
|
||||||
|
// for decimals places but is read by a culture that treats commas as number seperators.
|
||||||
|
WaitCallback realCallback = delegate(object o) { Culture.SetCurrentCulture(); callback(o); };
|
||||||
|
|
||||||
switch (FireAndForgetMethod)
|
switch (FireAndForgetMethod)
|
||||||
{
|
{
|
||||||
case FireAndForgetMethod.UnsafeQueueUserWorkItem:
|
case FireAndForgetMethod.UnsafeQueueUserWorkItem:
|
||||||
ThreadPool.UnsafeQueueUserWorkItem(callback, obj);
|
ThreadPool.UnsafeQueueUserWorkItem(realCallback, obj);
|
||||||
break;
|
break;
|
||||||
case FireAndForgetMethod.QueueUserWorkItem:
|
case FireAndForgetMethod.QueueUserWorkItem:
|
||||||
ThreadPool.QueueUserWorkItem(callback, obj);
|
ThreadPool.QueueUserWorkItem(realCallback, obj);
|
||||||
break;
|
break;
|
||||||
case FireAndForgetMethod.BeginInvoke:
|
case FireAndForgetMethod.BeginInvoke:
|
||||||
FireAndForgetWrapper wrapper = FireAndForgetWrapper.Instance;
|
FireAndForgetWrapper wrapper = FireAndForgetWrapper.Instance;
|
||||||
wrapper.FireAndForget(callback, obj);
|
wrapper.FireAndForget(realCallback, obj);
|
||||||
break;
|
break;
|
||||||
case FireAndForgetMethod.SmartThreadPool:
|
case FireAndForgetMethod.SmartThreadPool:
|
||||||
if (m_ThreadPool == null)
|
if (m_ThreadPool == null)
|
||||||
m_ThreadPool = new SmartThreadPool(2000, 15, 2);
|
m_ThreadPool = new SmartThreadPool(2000, 15, 2);
|
||||||
m_ThreadPool.QueueWorkItem(SmartThreadPoolCallback, new object[] { callback, obj });
|
m_ThreadPool.QueueWorkItem(SmartThreadPoolCallback, new object[] { realCallback, obj });
|
||||||
break;
|
break;
|
||||||
case FireAndForgetMethod.Thread:
|
case FireAndForgetMethod.Thread:
|
||||||
Thread thread = new Thread(delegate(object o) { callback(o); });
|
Thread thread = new Thread(delegate(object o) { realCallback(o); });
|
||||||
thread.Start(obj);
|
thread.Start(obj);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -73,6 +73,7 @@ namespace OpenSim
|
||||||
AppDomain.CurrentDomain.UnhandledException +=
|
AppDomain.CurrentDomain.UnhandledException +=
|
||||||
new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
|
new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
|
||||||
|
|
||||||
|
|
||||||
// Add the arguments supplied when running the application to the configuration
|
// Add the arguments supplied when running the application to the configuration
|
||||||
ArgvConfigSource configSource = new ArgvConfigSource(args);
|
ArgvConfigSource configSource = new ArgvConfigSource(args);
|
||||||
|
|
||||||
|
@ -91,6 +92,9 @@ namespace OpenSim
|
||||||
m_log.Info("[OPENSIM MAIN]: configured log4net using default OpenSim.exe.config");
|
m_log.Info("[OPENSIM MAIN]: configured log4net using default OpenSim.exe.config");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_log.DebugFormat(
|
||||||
|
"[OPENSIM MAIN]: System Locale is {0}", System.Threading.Thread.CurrentThread.CurrentCulture);
|
||||||
|
|
||||||
// Increase the number of IOCP threads available. Mono defaults to a tragically low number
|
// Increase the number of IOCP threads available. Mono defaults to a tragically low number
|
||||||
int workerThreads, iocpThreads;
|
int workerThreads, iocpThreads;
|
||||||
System.Threading.ThreadPool.GetMaxThreads(out workerThreads, out iocpThreads);
|
System.Threading.ThreadPool.GetMaxThreads(out workerThreads, out iocpThreads);
|
||||||
|
|
|
@ -130,7 +130,9 @@ namespace OpenSim
|
||||||
//m_log.InfoFormat("[OPENSIM MAIN]: GC Latency Mode: {0}", GCSettings.LatencyMode.ToString());
|
//m_log.InfoFormat("[OPENSIM MAIN]: GC Latency Mode: {0}", GCSettings.LatencyMode.ToString());
|
||||||
|
|
||||||
if (m_gui) // Driven by external GUI
|
if (m_gui) // Driven by external GUI
|
||||||
|
{
|
||||||
m_console = new CommandConsole("Region");
|
m_console = new CommandConsole("Region");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch (m_consoleType)
|
switch (m_consoleType)
|
||||||
|
|
|
@ -48,8 +48,8 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
||||||
public class BunchOfCapsModule : INonSharedRegionModule
|
public class BunchOfCapsModule : INonSharedRegionModule
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log =
|
// private static readonly ILog m_log =
|
||||||
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private Scene m_Scene;
|
private Scene m_Scene;
|
||||||
|
|
||||||
|
|
|
@ -48,8 +48,8 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
||||||
public class MeshUploadFlagModule : INonSharedRegionModule
|
public class MeshUploadFlagModule : INonSharedRegionModule
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log =
|
// private static readonly ILog m_log =
|
||||||
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Is this module enabled?
|
/// Is this module enabled?
|
||||||
|
|
|
@ -231,7 +231,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
public event ScriptReset OnScriptReset;
|
public event ScriptReset OnScriptReset;
|
||||||
public event GetScriptRunning OnGetScriptRunning;
|
public event GetScriptRunning OnGetScriptRunning;
|
||||||
public event SetScriptRunning OnSetScriptRunning;
|
public event SetScriptRunning OnSetScriptRunning;
|
||||||
public event UpdateVector OnAutoPilotGo;
|
public event Action<Vector3> OnAutoPilotGo;
|
||||||
public event TerrainUnacked OnUnackedTerrain;
|
public event TerrainUnacked OnUnackedTerrain;
|
||||||
public event ActivateGesture OnActivateGesture;
|
public event ActivateGesture OnActivateGesture;
|
||||||
public event DeactivateGesture OnDeactivateGesture;
|
public event DeactivateGesture OnDeactivateGesture;
|
||||||
|
@ -5266,6 +5266,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
AddLocalPacketHandler(PacketType.GroupVoteHistoryRequest, HandleGroupVoteHistoryRequest);
|
AddLocalPacketHandler(PacketType.GroupVoteHistoryRequest, HandleGroupVoteHistoryRequest);
|
||||||
AddLocalPacketHandler(PacketType.SimWideDeletes, HandleSimWideDeletes);
|
AddLocalPacketHandler(PacketType.SimWideDeletes, HandleSimWideDeletes);
|
||||||
AddLocalPacketHandler(PacketType.SendPostcard, HandleSendPostcard);
|
AddLocalPacketHandler(PacketType.SendPostcard, HandleSendPostcard);
|
||||||
|
|
||||||
|
AddGenericPacketHandler("autopilot", HandleAutopilot);
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Packet Handlers
|
#region Packet Handlers
|
||||||
|
@ -5308,7 +5310,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
update = true;
|
update = true;
|
||||||
|
}
|
||||||
|
|
||||||
// These should be ordered from most-likely to
|
// These should be ordered from most-likely to
|
||||||
// least likely to change. I've made an initial
|
// least likely to change. I've made an initial
|
||||||
|
@ -5316,6 +5320,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
if (update)
|
if (update)
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat("[LLCLIENTVIEW]: Triggered AgentUpdate for {0}", sener.Name);
|
||||||
|
|
||||||
AgentUpdateArgs arg = new AgentUpdateArgs();
|
AgentUpdateArgs arg = new AgentUpdateArgs();
|
||||||
arg.AgentID = x.AgentID;
|
arg.AgentID = x.AgentID;
|
||||||
arg.BodyRotation = x.BodyRotation;
|
arg.BodyRotation = x.BodyRotation;
|
||||||
|
@ -11609,55 +11615,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
protected void HandleAutopilot(Object sender, string method, List<String> args)
|
||||||
/// Breaks down the genericMessagePacket into specific events
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="gmMethod"></param>
|
|
||||||
/// <param name="gmInvoice"></param>
|
|
||||||
/// <param name="gmParams"></param>
|
|
||||||
public void DecipherGenericMessage(string gmMethod, UUID gmInvoice, GenericMessagePacket.ParamListBlock[] gmParams)
|
|
||||||
{
|
{
|
||||||
switch (gmMethod)
|
float locx = 0;
|
||||||
{
|
float locy = 0;
|
||||||
case "autopilot":
|
float locz = 0;
|
||||||
float locx;
|
uint regionX = 0;
|
||||||
float locy;
|
uint regionY = 0;
|
||||||
float locz;
|
|
||||||
|
|
||||||
try
|
Utils.LongToUInts(m_scene.RegionInfo.RegionHandle, out regionX, out regionY);
|
||||||
{
|
locx = Convert.ToSingle(args[0]) - (float)regionX;
|
||||||
uint regionX;
|
locy = Convert.ToSingle(args[1]) - (float)regionY;
|
||||||
uint regionY;
|
locz = Convert.ToSingle(args[2]);
|
||||||
Utils.LongToUInts(Scene.RegionInfo.RegionHandle, out regionX, out regionY);
|
|
||||||
locx = Convert.ToSingle(Utils.BytesToString(gmParams[0].Parameter)) - regionX;
|
|
||||||
locy = Convert.ToSingle(Utils.BytesToString(gmParams[1].Parameter)) - regionY;
|
|
||||||
locz = Convert.ToSingle(Utils.BytesToString(gmParams[2].Parameter));
|
|
||||||
}
|
|
||||||
catch (InvalidCastException)
|
|
||||||
{
|
|
||||||
m_log.Error("[CLIENT]: Invalid autopilot request");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
UpdateVector handlerAutoPilotGo = OnAutoPilotGo;
|
Action<Vector3> handlerAutoPilotGo = OnAutoPilotGo;
|
||||||
if (handlerAutoPilotGo != null)
|
if (handlerAutoPilotGo != null)
|
||||||
{
|
handlerAutoPilotGo(new Vector3(locx, locy, locz));
|
||||||
handlerAutoPilotGo(0, new Vector3(locx, locy, locz), this);
|
|
||||||
}
|
|
||||||
m_log.InfoFormat("[CLIENT]: Client Requests autopilot to position <{0},{1},{2}>", locx, locy, locz);
|
|
||||||
|
|
||||||
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
m_log.Debug("[CLIENT]: Unknown Generic Message, Method: " + gmMethod + ". Invoice: " + gmInvoice + ". Dumping Params:");
|
|
||||||
for (int hi = 0; hi < gmParams.Length; hi++)
|
|
||||||
{
|
|
||||||
Console.WriteLine(gmParams[hi].ToString());
|
|
||||||
}
|
|
||||||
//gmpack.MethodData.
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -12083,7 +12056,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
OutPacket(packet, ThrottleOutPacketType.Task);
|
OutPacket(packet, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId)
|
public void SendTextBoxRequest(string message, int chatChannel, string objectname, UUID ownerID, string ownerFirstName, string ownerLastName, UUID objectId)
|
||||||
{
|
{
|
||||||
ScriptDialogPacket dialog = (ScriptDialogPacket)PacketPool.Instance.GetPacket(PacketType.ScriptDialog);
|
ScriptDialogPacket dialog = (ScriptDialogPacket)PacketPool.Instance.GetPacket(PacketType.ScriptDialog);
|
||||||
dialog.Data.ObjectID = objectId;
|
dialog.Data.ObjectID = objectId;
|
||||||
|
@ -12099,6 +12072,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
buttons[0] = new ScriptDialogPacket.ButtonsBlock();
|
buttons[0] = new ScriptDialogPacket.ButtonsBlock();
|
||||||
buttons[0].ButtonLabel = Util.StringToBytes256("!!llTextBox!!");
|
buttons[0].ButtonLabel = Util.StringToBytes256("!!llTextBox!!");
|
||||||
dialog.Buttons = buttons;
|
dialog.Buttons = buttons;
|
||||||
|
|
||||||
|
dialog.OwnerData = new ScriptDialogPacket.OwnerDataBlock[1];
|
||||||
|
dialog.OwnerData[0] = new ScriptDialogPacket.OwnerDataBlock();
|
||||||
|
dialog.OwnerData[0].OwnerID = ownerID;
|
||||||
|
|
||||||
OutPacket(dialog, ThrottleOutPacketType.Task);
|
OutPacket(dialog, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -160,6 +160,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
public Socket Server { get { return null; } }
|
public Socket Server { get { return null; } }
|
||||||
|
|
||||||
|
private int m_malformedCount = 0; // Guard against a spamming attack
|
||||||
|
|
||||||
public LLUDPServer(IPAddress listenIP, ref uint port, int proxyPortOffsetParm, bool allow_alternate_port, IConfigSource configSource, AgentCircuitManager circuitManager)
|
public LLUDPServer(IPAddress listenIP, ref uint port, int proxyPortOffsetParm, bool allow_alternate_port, IConfigSource configSource, AgentCircuitManager circuitManager)
|
||||||
: base(listenIP, (int)port)
|
: base(listenIP, (int)port)
|
||||||
{
|
{
|
||||||
|
@ -612,6 +614,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
#region Decoding
|
#region Decoding
|
||||||
|
|
||||||
|
if (buffer.DataLength < 7)
|
||||||
|
return; // Drop undersizd packet
|
||||||
|
|
||||||
|
int headerLen = 7;
|
||||||
|
if (buffer.Data[6] == 0xFF)
|
||||||
|
{
|
||||||
|
if (buffer.Data[7] == 0xFF)
|
||||||
|
headerLen = 10;
|
||||||
|
else
|
||||||
|
headerLen = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buffer.DataLength < headerLen)
|
||||||
|
return; // Malformed header
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
packet = Packet.BuildPacket(buffer.Data, ref packetEnd,
|
packet = Packet.BuildPacket(buffer.Data, ref packetEnd,
|
||||||
|
@ -621,6 +638,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
catch (MalformedDataException)
|
catch (MalformedDataException)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
catch (IndexOutOfRangeException)
|
||||||
|
{
|
||||||
|
return; // Drop short packet
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
if (m_malformedCount < 100)
|
||||||
|
m_log.DebugFormat("[LLUDPSERVER]: Dropped malformed packet: " + e.ToString());
|
||||||
|
m_malformedCount++;
|
||||||
|
if ((m_malformedCount % 100000) == 0)
|
||||||
|
m_log.DebugFormat("[LLUDPSERVER]: Received {0} malformed packets so far, probable network attack.", m_malformedCount);
|
||||||
|
}
|
||||||
|
|
||||||
// Fail-safe check
|
// Fail-safe check
|
||||||
if (packet == null)
|
if (packet == null)
|
||||||
|
|
|
@ -44,7 +44,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private static Int32 m_counter = 0;
|
private static Int32 m_counter = 0;
|
||||||
|
|
||||||
private Int32 m_identifier;
|
// private Int32 m_identifier;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Number of ticks (ms) per quantum, drip rate and max burst
|
/// Number of ticks (ms) per quantum, drip rate and max burst
|
||||||
|
@ -173,7 +173,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
/// second. If zero, the bucket always remains full</param>
|
/// second. If zero, the bucket always remains full</param>
|
||||||
public TokenBucket(TokenBucket parent, Int64 dripRate)
|
public TokenBucket(TokenBucket parent, Int64 dripRate)
|
||||||
{
|
{
|
||||||
m_identifier = m_counter++;
|
// m_identifier = m_counter++;
|
||||||
|
m_counter++;
|
||||||
|
|
||||||
Parent = parent;
|
Parent = parent;
|
||||||
RequestedDripRate = dripRate;
|
RequestedDripRate = dripRate;
|
||||||
|
@ -320,7 +321,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
public class AdaptiveTokenBucket : TokenBucket
|
public class AdaptiveTokenBucket : TokenBucket
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The minimum rate for flow control. Minimum drip rate is one
|
/// The minimum rate for flow control. Minimum drip rate is one
|
||||||
|
|
|
@ -301,7 +301,9 @@ namespace Flotsam.RegionModules.AssetCache
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
LogException(e);
|
m_log.ErrorFormat(
|
||||||
|
"[FLOTSAM ASSET CACHE]: Failed to update cache for asset {0}. Exception {1} {2}",
|
||||||
|
asset.ID, e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -361,7 +363,9 @@ namespace Flotsam.RegionModules.AssetCache
|
||||||
}
|
}
|
||||||
catch (System.Runtime.Serialization.SerializationException e)
|
catch (System.Runtime.Serialization.SerializationException e)
|
||||||
{
|
{
|
||||||
LogException(e);
|
m_log.ErrorFormat(
|
||||||
|
"[FLOTSAM ASSET CACHE]: Failed to get file {0} for asset {1}. Exception {2} {3}",
|
||||||
|
filename, id, e.Message, e.StackTrace);
|
||||||
|
|
||||||
// If there was a problem deserializing the asset, the asset may
|
// If there was a problem deserializing the asset, the asset may
|
||||||
// either be corrupted OR was serialized under an old format
|
// either be corrupted OR was serialized under an old format
|
||||||
|
@ -371,7 +375,9 @@ namespace Flotsam.RegionModules.AssetCache
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
LogException(e);
|
m_log.ErrorFormat(
|
||||||
|
"[FLOTSAM ASSET CACHE]: Failed to get file {0} for asset {1}. Exception {2} {3}",
|
||||||
|
filename, id, e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
@ -380,7 +386,6 @@ namespace Flotsam.RegionModules.AssetCache
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if WAIT_ON_INPROGRESS_REQUESTS
|
#if WAIT_ON_INPROGRESS_REQUESTS
|
||||||
// Check if we're already downloading this asset. If so, try to wait for it to
|
// Check if we're already downloading this asset. If so, try to wait for it to
|
||||||
// download.
|
// download.
|
||||||
|
@ -403,7 +408,6 @@ namespace Flotsam.RegionModules.AssetCache
|
||||||
m_RequestsForInprogress++;
|
m_RequestsForInprogress++;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return asset;
|
return asset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -415,7 +419,7 @@ namespace Flotsam.RegionModules.AssetCache
|
||||||
|
|
||||||
if (m_MemoryCacheEnabled)
|
if (m_MemoryCacheEnabled)
|
||||||
asset = GetFromMemoryCache(id);
|
asset = GetFromMemoryCache(id);
|
||||||
else if (m_FileCacheEnabled)
|
if (asset == null && m_FileCacheEnabled)
|
||||||
asset = GetFromFileCache(id);
|
asset = GetFromFileCache(id);
|
||||||
|
|
||||||
if (((m_LogLevel >= 1)) && (m_HitRateDisplay != 0) && (m_Requests % m_HitRateDisplay == 0))
|
if (((m_LogLevel >= 1)) && (m_HitRateDisplay != 0) && (m_Requests % m_HitRateDisplay == 0))
|
||||||
|
@ -432,7 +436,6 @@ namespace Flotsam.RegionModules.AssetCache
|
||||||
}
|
}
|
||||||
|
|
||||||
m_log.InfoFormat("[FLOTSAM ASSET CACHE]: {0} unnessesary requests due to requests for assets that are currently downloading.", m_RequestsForInprogress);
|
m_log.InfoFormat("[FLOTSAM ASSET CACHE]: {0} unnessesary requests due to requests for assets that are currently downloading.", m_RequestsForInprogress);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return asset;
|
return asset;
|
||||||
|
@ -446,7 +449,7 @@ namespace Flotsam.RegionModules.AssetCache
|
||||||
public void Expire(string id)
|
public void Expire(string id)
|
||||||
{
|
{
|
||||||
if (m_LogLevel >= 2)
|
if (m_LogLevel >= 2)
|
||||||
m_log.DebugFormat("[FLOTSAM ASSET CACHE]: Expiring Asset {0}.", id);
|
m_log.DebugFormat("[FLOTSAM ASSET CACHE]: Expiring Asset {0}", id);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -464,7 +467,9 @@ namespace Flotsam.RegionModules.AssetCache
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
LogException(e);
|
m_log.ErrorFormat(
|
||||||
|
"[FLOTSAM ASSET CACHE]: Failed to expire cached file {0}. Exception {1} {2}",
|
||||||
|
id, e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -602,7 +607,9 @@ namespace Flotsam.RegionModules.AssetCache
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
LogException(e);
|
m_log.ErrorFormat(
|
||||||
|
"[FLOTSAM ASSET CACHE]: Failed to write asset {0} to cache. Directory {1}, tempname {2}, filename {3}. Exception {4} {5}.",
|
||||||
|
asset.ID, directory, tempname, filename, e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
@ -632,15 +639,6 @@ namespace Flotsam.RegionModules.AssetCache
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void LogException(Exception e)
|
|
||||||
{
|
|
||||||
string[] text = e.ToString().Split(new char[] { '\n' });
|
|
||||||
foreach (string t in text)
|
|
||||||
{
|
|
||||||
m_log.ErrorFormat("[FLOTSAM ASSET CACHE]: {0} ", t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Scan through the file cache, and return number of assets currently cached.
|
/// Scan through the file cache, and return number of assets currently cached.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -693,8 +691,7 @@ namespace Flotsam.RegionModules.AssetCache
|
||||||
s.ForEachSOG(delegate(SceneObjectGroup e)
|
s.ForEachSOG(delegate(SceneObjectGroup e)
|
||||||
{
|
{
|
||||||
gatherer.GatherAssetUuids(e, assets);
|
gatherer.GatherAssetUuids(e, assets);
|
||||||
}
|
});
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (UUID assetID in assets.Keys)
|
foreach (UUID assetID in assets.Keys)
|
||||||
|
@ -727,7 +724,9 @@ namespace Flotsam.RegionModules.AssetCache
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
LogException(e);
|
m_log.ErrorFormat(
|
||||||
|
"[FLOTSAM ASSET CACHE]: Couldn't clear asset cache directory {0} from {1}. Exception {2} {3}",
|
||||||
|
dir, m_CacheDirectory, e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -739,7 +738,9 @@ namespace Flotsam.RegionModules.AssetCache
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
LogException(e);
|
m_log.ErrorFormat(
|
||||||
|
"[FLOTSAM ASSET CACHE]: Couldn't clear asset cache file {0} from {1}. Exception {1} {2}",
|
||||||
|
file, m_CacheDirectory, e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -765,7 +766,7 @@ namespace Flotsam.RegionModules.AssetCache
|
||||||
|
|
||||||
foreach (string s in Directory.GetFiles(m_CacheDirectory, "*.fac"))
|
foreach (string s in Directory.GetFiles(m_CacheDirectory, "*.fac"))
|
||||||
{
|
{
|
||||||
m_log.Info("[FLOTSAM ASSET CACHE]: Deep Scans were performed on the following regions:");
|
m_log.Info("[FLOTSAM ASSET CACHE]: Deep scans have previously been performed on the following regions:");
|
||||||
|
|
||||||
string RegionID = s.Remove(0,s.IndexOf("_")).Replace(".fac","");
|
string RegionID = s.Remove(0,s.IndexOf("_")).Replace(".fac","");
|
||||||
DateTime RegionDeepScanTMStamp = File.GetLastWriteTime(s);
|
DateTime RegionDeepScanTMStamp = File.GetLastWriteTime(s);
|
||||||
|
@ -836,7 +837,6 @@ namespace Flotsam.RegionModules.AssetCache
|
||||||
Util.FireAndForget(delegate {
|
Util.FireAndForget(delegate {
|
||||||
int assetsCached = CacheScenes();
|
int assetsCached = CacheScenes();
|
||||||
m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Completed Scene Caching, {0} assets found.", assetsCached);
|
m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Completed Scene Caching, {0} assets found.", assetsCached);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -891,7 +891,6 @@ namespace Flotsam.RegionModules.AssetCache
|
||||||
|
|
||||||
#region IAssetService Members
|
#region IAssetService Members
|
||||||
|
|
||||||
|
|
||||||
public AssetMetadata GetMetadata(string id)
|
public AssetMetadata GetMetadata(string id)
|
||||||
{
|
{
|
||||||
AssetBase asset = Get(id);
|
AssetBase asset = Get(id);
|
||||||
|
@ -921,7 +920,6 @@ namespace Flotsam.RegionModules.AssetCache
|
||||||
Cache(asset);
|
Cache(asset);
|
||||||
|
|
||||||
return asset.ID;
|
return asset.ID;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool UpdateContent(string id, byte[] data)
|
public bool UpdateContent(string id, byte[] data)
|
||||||
|
|
|
@ -151,6 +151,10 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||||
if (face == null)
|
if (face == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[AVFACTORY]: Looking for texture {0}, id {1} for {2} {3}",
|
||||||
|
// face.TextureID, idx, client.Name, client.AgentId);
|
||||||
|
|
||||||
// if the texture is one of the "defaults" then skip it
|
// if the texture is one of the "defaults" then skip it
|
||||||
// this should probably be more intelligent (skirt texture doesnt matter
|
// this should probably be more intelligent (skirt texture doesnt matter
|
||||||
// if the avatar isnt wearing a skirt) but if any of the main baked
|
// if the avatar isnt wearing a skirt) but if any of the main baked
|
||||||
|
@ -305,6 +309,11 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||||
|
|
||||||
private void HandleAppearanceSave(UUID agentid)
|
private void HandleAppearanceSave(UUID agentid)
|
||||||
{
|
{
|
||||||
|
// We must set appearance parameters in the en_US culture in order to avoid issues where values are saved
|
||||||
|
// in a culture where decimal points are commas and then reloaded in a culture which just treats them as
|
||||||
|
// number seperators.
|
||||||
|
Culture.SetCurrentCulture();
|
||||||
|
|
||||||
ScenePresence sp = m_scene.GetScenePresence(agentid);
|
ScenePresence sp = m_scene.GetScenePresence(agentid);
|
||||||
if (sp == null)
|
if (sp == null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -141,10 +141,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog
|
||||||
{
|
{
|
||||||
UserAccount account = m_scene.UserAccountService.GetUserAccount(m_scene.RegionInfo.ScopeID, ownerid);
|
UserAccount account = m_scene.UserAccountService.GetUserAccount(m_scene.RegionInfo.ScopeID, ownerid);
|
||||||
string ownerFirstName, ownerLastName;
|
string ownerFirstName, ownerLastName;
|
||||||
|
UUID ownerID = UUID.Zero;
|
||||||
if (account != null)
|
if (account != null)
|
||||||
{
|
{
|
||||||
ownerFirstName = account.FirstName;
|
ownerFirstName = account.FirstName;
|
||||||
ownerLastName = account.LastName;
|
ownerLastName = account.LastName;
|
||||||
|
ownerID = account.PrincipalID;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -155,7 +157,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog
|
||||||
ScenePresence sp = m_scene.GetScenePresence(avatarid);
|
ScenePresence sp = m_scene.GetScenePresence(avatarid);
|
||||||
|
|
||||||
if (sp != null)
|
if (sp != null)
|
||||||
sp.ControllingClient.SendTextBoxRequest(message, chatChannel, name, ownerFirstName, ownerLastName, objectid);
|
sp.ControllingClient.SendTextBoxRequest(message, chatChannel, name, ownerID, ownerFirstName, ownerLastName, objectid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendNotificationToUsersInRegion(
|
public void SendNotificationToUsersInRegion(
|
||||||
|
|
|
@ -984,11 +984,14 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
public virtual bool CanGetAgentInventoryItem(IClientAPI remoteClient, UUID itemID, UUID requestID)
|
public virtual bool CanGetAgentInventoryItem(IClientAPI remoteClient, UUID itemID, UUID requestID)
|
||||||
{
|
{
|
||||||
InventoryItemBase assetRequestItem = GetItem(remoteClient.AgentId, itemID);
|
InventoryItemBase assetRequestItem = GetItem(remoteClient.AgentId, itemID);
|
||||||
|
|
||||||
if (assetRequestItem == null)
|
if (assetRequestItem == null)
|
||||||
{
|
{
|
||||||
ILibraryService lib = m_Scene.RequestModuleInterface<ILibraryService>();
|
ILibraryService lib = m_Scene.RequestModuleInterface<ILibraryService>();
|
||||||
|
|
||||||
if (lib != null)
|
if (lib != null)
|
||||||
assetRequestItem = lib.LibraryRootFolder.FindItem(itemID);
|
assetRequestItem = lib.LibraryRootFolder.FindItem(itemID);
|
||||||
|
|
||||||
if (assetRequestItem == null)
|
if (assetRequestItem == null)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1019,6 +1022,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
m_log.WarnFormat(
|
m_log.WarnFormat(
|
||||||
"[CLIENT]: {0} requested asset {1} from item {2} but this does not match item's asset {3}",
|
"[CLIENT]: {0} requested asset {1} from item {2} but this does not match item's asset {3}",
|
||||||
Name, requestID, itemID, assetRequestItem.AssetID);
|
Name, requestID, itemID, assetRequestItem.AssetID);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -185,6 +185,7 @@ namespace OpenSim.Region.CoreModules.Framework.Library
|
||||||
archread = new InventoryArchiveReadRequest(m_MockScene, uinfo, "/", iarFileName, false);
|
archread = new InventoryArchiveReadRequest(m_MockScene, uinfo, "/", iarFileName, false);
|
||||||
archread.Execute();
|
archread.Execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (InventoryNodeBase node in nodes)
|
foreach (InventoryNodeBase node in nodes)
|
||||||
FixPerms(node);
|
FixPerms(node);
|
||||||
}
|
}
|
||||||
|
@ -197,18 +198,19 @@ namespace OpenSim.Region.CoreModules.Framework.Library
|
||||||
archread.Close();
|
archread.Close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FixPerms(InventoryNodeBase node)
|
private void FixPerms(InventoryNodeBase node)
|
||||||
{
|
{
|
||||||
|
m_log.DebugFormat("[LIBRARY MODULE]: Fixing perms for {0} {1}", node.Name, node.ID);
|
||||||
|
|
||||||
if (node is InventoryItemBase)
|
if (node is InventoryItemBase)
|
||||||
{
|
{
|
||||||
InventoryItemBase item = (InventoryItemBase)node;
|
InventoryItemBase item = (InventoryItemBase)node;
|
||||||
item.BasePermissions = 0x7FFFFFFF;
|
item.BasePermissions = (uint)PermissionMask.All;
|
||||||
item.EveryOnePermissions = 0x7FFFFFFF;
|
item.EveryOnePermissions = (uint)PermissionMask.All - (uint)PermissionMask.Modify;
|
||||||
item.CurrentPermissions = 0x7FFFFFFF;
|
item.CurrentPermissions = (uint)PermissionMask.All;
|
||||||
item.NextPermissions = 0x7FFFFFFF;
|
item.NextPermissions = (uint)PermissionMask.All;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,8 +39,7 @@ using OpenMetaverse;
|
||||||
|
|
||||||
namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization
|
namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization
|
||||||
{
|
{
|
||||||
public class LocalAuthorizationServicesConnector :
|
public class LocalAuthorizationServicesConnector : ISharedRegionModule, IAuthorizationService
|
||||||
ISharedRegionModule, IAuthorizationService
|
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log =
|
private static readonly ILog m_log =
|
||||||
LogManager.GetLogger(
|
LogManager.GetLogger(
|
||||||
|
@ -127,15 +126,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization
|
||||||
if (!m_Enabled)
|
if (!m_Enabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_log.InfoFormat("[AUTHORIZATION CONNECTOR]: Enabled local authorization for region {0}", scene.RegionInfo.RegionName);
|
m_log.InfoFormat(
|
||||||
|
"[AUTHORIZATION CONNECTOR]: Enabled local authorization for region {0}",
|
||||||
|
scene.RegionInfo.RegionName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsAuthorizedForRegion(string userID, string regionID, out string message)
|
public bool IsAuthorizedForRegion(
|
||||||
|
string userID, string firstName, string lastName, string regionID, out string message)
|
||||||
{
|
{
|
||||||
return m_AuthorizationService.IsAuthorizedForRegion(userID, regionID, out message);
|
return m_AuthorizationService.IsAuthorizedForRegion(userID, firstName, lastName, regionID, out message);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -117,12 +117,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsAuthorizedForRegion(string userID, string regionID, out string message)
|
public bool IsAuthorizedForRegion(
|
||||||
|
string userID, string firstName, string lastName, string regionID, out string message)
|
||||||
{
|
{
|
||||||
m_log.InfoFormat("[REMOTE AUTHORIZATION CONNECTOR]: IsAuthorizedForRegion checking {0} for region {1}", userID, regionID);
|
m_log.InfoFormat(
|
||||||
|
"[REMOTE AUTHORIZATION CONNECTOR]: IsAuthorizedForRegion checking {0} for region {1}", userID, regionID);
|
||||||
|
|
||||||
bool isAuthorized = true;
|
bool isAuthorized = true;
|
||||||
message = String.Empty;
|
message = String.Empty;
|
||||||
|
string mail = String.Empty;
|
||||||
|
|
||||||
// get the scene this call is being made for
|
// get the scene this call is being made for
|
||||||
Scene scene = null;
|
Scene scene = null;
|
||||||
|
@ -140,17 +143,22 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization
|
||||||
if (scene != null)
|
if (scene != null)
|
||||||
{
|
{
|
||||||
UserAccount account = scene.UserAccountService.GetUserAccount(UUID.Zero, new UUID(userID));
|
UserAccount account = scene.UserAccountService.GetUserAccount(UUID.Zero, new UUID(userID));
|
||||||
isAuthorized = IsAuthorizedForRegion(userID, account.FirstName, account.LastName,
|
|
||||||
account.Email, scene.RegionInfo.RegionName, regionID, out message);
|
if (account != null)
|
||||||
|
mail = account.Email;
|
||||||
|
|
||||||
|
isAuthorized
|
||||||
|
= IsAuthorizedForRegion(
|
||||||
|
userID, firstName, lastName, account.Email, scene.RegionInfo.RegionName, regionID, out message);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[REMOTE AUTHORIZATION CONNECTOR] IsAuthorizedForRegion, can't find scene to match region id of {0} ",regionID);
|
m_log.ErrorFormat(
|
||||||
|
"[REMOTE AUTHORIZATION CONNECTOR] IsAuthorizedForRegion, can't find scene to match region id of {0}",
|
||||||
|
regionID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return isAuthorized;
|
return isAuthorized;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -64,10 +64,10 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid.Tests
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Test saving a V0.2 OpenSim Region Archive.
|
/// Test region registration.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Test]
|
[Test]
|
||||||
public void TestRegisterRegionV0_2()
|
public void TestRegisterRegion()
|
||||||
{
|
{
|
||||||
SetUp();
|
SetUp();
|
||||||
|
|
||||||
|
@ -123,6 +123,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid.Tests
|
||||||
m_LocalConnector.RegisterRegion(UUID.Zero, r1);
|
m_LocalConnector.RegisterRegion(UUID.Zero, r1);
|
||||||
|
|
||||||
GridRegion result = m_LocalConnector.GetRegionByName(UUID.Zero, "Test");
|
GridRegion result = m_LocalConnector.GetRegionByName(UUID.Zero, "Test");
|
||||||
|
Assert.IsNull(result, "Retrieved GetRegionByName \"Test\" is not null");
|
||||||
|
|
||||||
|
result = m_LocalConnector.GetRegionByName(UUID.Zero, "Test Region 1");
|
||||||
Assert.IsNotNull(result, "Retrieved GetRegionByName is null");
|
Assert.IsNotNull(result, "Retrieved GetRegionByName is null");
|
||||||
Assert.That(result.RegionName, Is.EqualTo("Test Region 1"), "Retrieved region's name does not match");
|
Assert.That(result.RegionName, Is.EqualTo("Test Region 1"), "Retrieved region's name does not match");
|
||||||
|
|
||||||
|
|
|
@ -470,14 +470,10 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
SendLandUpdate(avatar, false);
|
SendLandUpdate(avatar, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void EventManagerOnSignificantClientMovement(IClientAPI remote_client)
|
public void EventManagerOnSignificantClientMovement(ScenePresence clientAvatar)
|
||||||
{
|
|
||||||
ScenePresence clientAvatar = m_scene.GetScenePresence(remote_client.AgentId);
|
|
||||||
|
|
||||||
if (clientAvatar != null)
|
|
||||||
{
|
{
|
||||||
SendLandUpdate(clientAvatar);
|
SendLandUpdate(clientAvatar);
|
||||||
SendOutNearestBanLine(remote_client);
|
SendOutNearestBanLine(clientAvatar.ControllingClient);
|
||||||
ILandObject parcel = GetLandObject(clientAvatar.AbsolutePosition.X, clientAvatar.AbsolutePosition.Y);
|
ILandObject parcel = GetLandObject(clientAvatar.AbsolutePosition.X, clientAvatar.AbsolutePosition.Y);
|
||||||
if (parcel != null)
|
if (parcel != null)
|
||||||
{
|
{
|
||||||
|
@ -518,7 +514,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Like handleEventManagerOnSignificantClientMovement, but called with an AgentUpdate regardless of distance.
|
/// Like handleEventManagerOnSignificantClientMovement, but called with an AgentUpdate regardless of distance.
|
||||||
|
|
|
@ -146,7 +146,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
||||||
= ParseUserSetConfigSetting(myConfig, "allowed_script_editors", m_allowedScriptEditors);
|
= ParseUserSetConfigSetting(myConfig, "allowed_script_editors", m_allowedScriptEditors);
|
||||||
|
|
||||||
if (m_bypassPermissions)
|
if (m_bypassPermissions)
|
||||||
m_log.Info("[PERMISSIONS]: serviceside_object_permissions = false in ini file so disabling all region service permission checks");
|
m_log.Info("[PERMISSIONS]: serverside_object_permissions = false in ini file so disabling all region service permission checks");
|
||||||
else
|
else
|
||||||
m_log.Debug("[PERMISSIONS]: Enabling all region service permission checks");
|
m_log.Debug("[PERMISSIONS]: Enabling all region service permission checks");
|
||||||
|
|
||||||
|
|
|
@ -96,16 +96,7 @@ m_log.DebugFormat("MAP NAME=({0})", mapName);
|
||||||
|
|
||||||
// try to fetch from GridServer
|
// try to fetch from GridServer
|
||||||
List<GridRegion> regionInfos = m_scene.GridService.GetRegionsByName(m_scene.RegionInfo.ScopeID, mapName, 20);
|
List<GridRegion> regionInfos = m_scene.GridService.GetRegionsByName(m_scene.RegionInfo.ScopeID, mapName, 20);
|
||||||
if (regionInfos == null)
|
if (regionInfos.Count == 0)
|
||||||
{
|
|
||||||
m_log.Warn("[MAPSEARCHMODULE]: RequestNamedRegions returned null. Old gridserver?");
|
|
||||||
// service wasn't available; maybe still an old GridServer. Try the old API, though it will return only one region
|
|
||||||
regionInfos = new List<GridRegion>();
|
|
||||||
GridRegion info = m_scene.GridService.GetRegionByName(m_scene.RegionInfo.ScopeID, mapName);
|
|
||||||
if (info != null)
|
|
||||||
regionInfos.Add(info);
|
|
||||||
}
|
|
||||||
else if (regionInfos.Count == 0)
|
|
||||||
remoteClient.SendAlertMessage("Hyperlink could not be established.");
|
remoteClient.SendAlertMessage("Hyperlink could not be established.");
|
||||||
|
|
||||||
m_log.DebugFormat("[MAPSEARCHMODULE]: search {0} returned {1} regions. Flags={2}", mapName, regionInfos.Count, flags);
|
m_log.DebugFormat("[MAPSEARCHMODULE]: search {0} returned {1} regions. Flags={2}", mapName, regionInfos.Count, flags);
|
||||||
|
|
|
@ -222,7 +222,7 @@ namespace OpenSim.Region.Examples.SimpleModule
|
||||||
public event ScriptReset OnScriptReset;
|
public event ScriptReset OnScriptReset;
|
||||||
public event GetScriptRunning OnGetScriptRunning;
|
public event GetScriptRunning OnGetScriptRunning;
|
||||||
public event SetScriptRunning OnSetScriptRunning;
|
public event SetScriptRunning OnSetScriptRunning;
|
||||||
public event UpdateVector OnAutoPilotGo;
|
public event Action<Vector3> OnAutoPilotGo;
|
||||||
|
|
||||||
public event TerrainUnacked OnUnackedTerrain;
|
public event TerrainUnacked OnUnackedTerrain;
|
||||||
|
|
||||||
|
@ -1152,7 +1152,7 @@ namespace OpenSim.Region.Examples.SimpleModule
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId)
|
public void SendTextBoxRequest(string message, int chatChannel, string objectname, UUID ownerID, string ownerFirstName, string ownerLastName, UUID objectId)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,9 +32,39 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
{
|
{
|
||||||
public interface INPCModule
|
public interface INPCModule
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Create an NPC
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="firstname"></param>
|
||||||
|
/// <param name="lastname"></param>
|
||||||
|
/// <param name="position"></param>
|
||||||
|
/// <param name="scene"></param>
|
||||||
|
/// <param name="cloneAppearanceFrom">The UUID of the avatar from which to clone the NPC's appearance from.</param>
|
||||||
|
/// <returns>The UUID of the ScenePresence created.</returns>
|
||||||
UUID CreateNPC(string firstname, string lastname, Vector3 position, Scene scene, UUID cloneAppearanceFrom);
|
UUID CreateNPC(string firstname, string lastname, Vector3 position, Scene scene, UUID cloneAppearanceFrom);
|
||||||
void Autopilot(UUID agentID, Scene scene, Vector3 pos);
|
|
||||||
|
/// <summary>
|
||||||
|
/// Move an NPC to a target over time.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="agentID">The UUID of the NPC</param>
|
||||||
|
/// <param name="scene"></param>
|
||||||
|
/// <param name="pos"></param>
|
||||||
|
void MoveToTarget(UUID agentID, Scene scene, Vector3 pos);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get the NPC to say something.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="agentID">The UUID of the NPC</param>
|
||||||
|
/// <param name="scene"></param>
|
||||||
|
/// <param name="text"></param>
|
||||||
void Say(UUID agentID, Scene scene, string text);
|
void Say(UUID agentID, Scene scene, string text);
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Delete an NPC.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="agentID">The UUID of the NPC</param>
|
||||||
|
/// <param name="scene"></param>
|
||||||
void DeleteNPC(UUID agentID, Scene scene);
|
void DeleteNPC(UUID agentID, Scene scene);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -27,6 +27,8 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Reflection;
|
||||||
|
using log4net;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Region.Framework.Interfaces;
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
|
@ -40,6 +42,8 @@ namespace OpenSim.Region.Framework.Scenes.Animation
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class ScenePresenceAnimator
|
public class ScenePresenceAnimator
|
||||||
{
|
{
|
||||||
|
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
public AnimationSet Animations
|
public AnimationSet Animations
|
||||||
{
|
{
|
||||||
get { return m_animations; }
|
get { return m_animations; }
|
||||||
|
@ -262,7 +266,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation
|
||||||
|
|
||||||
m_animTickFall = 0;
|
m_animTickFall = 0;
|
||||||
|
|
||||||
if (move.Z > 0f)
|
if (move.Z > 0.2f)
|
||||||
{
|
{
|
||||||
// Jumping
|
// Jumping
|
||||||
if (!jumping)
|
if (!jumping)
|
||||||
|
@ -295,7 +299,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation
|
||||||
if (move.X != 0f || move.Y != 0f)
|
if (move.X != 0f || move.Y != 0f)
|
||||||
{
|
{
|
||||||
// Walking / crouchwalking / running
|
// Walking / crouchwalking / running
|
||||||
if (move.Z < 0f)
|
if (move.Z < 0)
|
||||||
return "CROUCHWALK";
|
return "CROUCHWALK";
|
||||||
else if (m_scenePresence.SetAlwaysRun)
|
else if (m_scenePresence.SetAlwaysRun)
|
||||||
return "RUN";
|
return "RUN";
|
||||||
|
@ -305,7 +309,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Not walking
|
// Not walking
|
||||||
if (move.Z < 0f)
|
if (move.Z < 0)
|
||||||
return "CROUCH";
|
return "CROUCH";
|
||||||
else
|
else
|
||||||
return "STAND";
|
return "STAND";
|
||||||
|
@ -323,6 +327,8 @@ namespace OpenSim.Region.Framework.Scenes.Animation
|
||||||
public void UpdateMovementAnimations()
|
public void UpdateMovementAnimations()
|
||||||
{
|
{
|
||||||
m_movementAnimation = GetMovementAnimation();
|
m_movementAnimation = GetMovementAnimation();
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[SCENE PRESENCE ANIMATOR]: Got animation {0} for {1}", m_movementAnimation, m_scenePresence.Name);
|
||||||
TrySetMovementAnimation(m_movementAnimation);
|
TrySetMovementAnimation(m_movementAnimation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -165,8 +165,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public delegate void AvatarEnteringNewParcel(ScenePresence avatar, int localLandID, UUID regionID);
|
public delegate void AvatarEnteringNewParcel(ScenePresence avatar, int localLandID, UUID regionID);
|
||||||
public event AvatarEnteringNewParcel OnAvatarEnteringNewParcel;
|
public event AvatarEnteringNewParcel OnAvatarEnteringNewParcel;
|
||||||
|
|
||||||
public delegate void SignificantClientMovement(IClientAPI remote_client);
|
public event Action<ScenePresence> OnSignificantClientMovement;
|
||||||
public event SignificantClientMovement OnSignificantClientMovement;
|
|
||||||
|
|
||||||
public delegate void IncomingInstantMessage(GridInstantMessage message);
|
public delegate void IncomingInstantMessage(GridInstantMessage message);
|
||||||
public event IncomingInstantMessage OnIncomingInstantMessage;
|
public event IncomingInstantMessage OnIncomingInstantMessage;
|
||||||
|
@ -1592,16 +1591,16 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerSignificantClientMovement(IClientAPI client)
|
public void TriggerSignificantClientMovement(ScenePresence presence)
|
||||||
{
|
{
|
||||||
SignificantClientMovement handlerSignificantClientMovement = OnSignificantClientMovement;
|
Action<ScenePresence> handlerSignificantClientMovement = OnSignificantClientMovement;
|
||||||
if (handlerSignificantClientMovement != null)
|
if (handlerSignificantClientMovement != null)
|
||||||
{
|
{
|
||||||
foreach (SignificantClientMovement d in handlerSignificantClientMovement.GetInvocationList())
|
foreach (Action<ScenePresence> d in handlerSignificantClientMovement.GetInvocationList())
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
d(client);
|
d(presence);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|
|
@ -724,7 +724,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
newName = item.Name;
|
newName = item.Name;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (remoteClient.AgentId == oldAgentID || (LibraryService != null && LibraryService.LibraryRootFolder != null && oldAgentID == LibraryService.LibraryRootFolder.Owner))
|
if (remoteClient.AgentId == oldAgentID
|
||||||
|
|| (LibraryService != null
|
||||||
|
&& LibraryService.LibraryRootFolder != null
|
||||||
|
&& oldAgentID == LibraryService.LibraryRootFolder.Owner))
|
||||||
{
|
{
|
||||||
CreateNewInventoryItem(
|
CreateNewInventoryItem(
|
||||||
remoteClient, item.CreatorId, item.CreatorData, newFolderID, newName, item.Flags, callbackID, asset, (sbyte)item.InvType,
|
remoteClient, item.CreatorId, item.CreatorData, newFolderID, newName, item.Flags, callbackID, asset, (sbyte)item.InvType,
|
||||||
|
|
|
@ -3079,7 +3079,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (aCircuit == null)
|
if (aCircuit == null)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[APPEARANCE] Client did not supply a circuit. Non-Linden? Creating default appearance.");
|
m_log.DebugFormat("[APPEARANCE] Client did not supply a circuit. Non-Linden? Creating default appearance.");
|
||||||
appearance = new AvatarAppearance(client.AgentId);
|
appearance = new AvatarAppearance();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3087,7 +3087,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (appearance == null)
|
if (appearance == null)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[APPEARANCE]: Appearance not found in {0}, returning default", RegionInfo.RegionName);
|
m_log.DebugFormat("[APPEARANCE]: Appearance not found in {0}, returning default", RegionInfo.RegionName);
|
||||||
appearance = new AvatarAppearance(client.AgentId);
|
appearance = new AvatarAppearance();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3553,11 +3553,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if (AuthorizationService != null)
|
if (AuthorizationService != null)
|
||||||
{
|
{
|
||||||
if (!AuthorizationService.IsAuthorizedForRegion(agent.AgentID.ToString(), RegionInfo.RegionID.ToString(),out reason))
|
if (!AuthorizationService.IsAuthorizedForRegion(
|
||||||
|
agent.AgentID.ToString(), agent.firstname, agent.lastname, RegionInfo.RegionID.ToString(), out reason))
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[CONNECTION BEGIN]: Denied access to: {0} ({1} {2}) at {3} because the user does not have access to the region",
|
m_log.WarnFormat("[CONNECTION BEGIN]: Denied access to: {0} ({1} {2}) at {3} because the user does not have access to the region",
|
||||||
agent.AgentID, agent.firstname, agent.lastname, RegionInfo.RegionName);
|
agent.AgentID, agent.firstname, agent.lastname, RegionInfo.RegionName);
|
||||||
//reason = String.Format("You are not currently on the access list for {0}",RegionInfo.RegionName);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3880,8 +3881,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tries to teleport agent to other region.
|
/// Tries to teleport agent to another region.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// The region name must exactly match that given.
|
||||||
|
/// </remarks>
|
||||||
/// <param name="remoteClient"></param>
|
/// <param name="remoteClient"></param>
|
||||||
/// <param name="regionName"></param>
|
/// <param name="regionName"></param>
|
||||||
/// <param name="position"></param>
|
/// <param name="position"></param>
|
||||||
|
@ -3890,15 +3894,16 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public void RequestTeleportLocation(IClientAPI remoteClient, string regionName, Vector3 position,
|
public void RequestTeleportLocation(IClientAPI remoteClient, string regionName, Vector3 position,
|
||||||
Vector3 lookat, uint teleportFlags)
|
Vector3 lookat, uint teleportFlags)
|
||||||
{
|
{
|
||||||
List<GridRegion> regions = GridService.GetRegionsByName(RegionInfo.ScopeID, regionName, 1);
|
GridRegion region = GridService.GetRegionByName(RegionInfo.ScopeID, regionName);
|
||||||
if (regions == null || regions.Count == 0)
|
|
||||||
|
if (region == null)
|
||||||
{
|
{
|
||||||
// can't find the region: Tell viewer and abort
|
// can't find the region: Tell viewer and abort
|
||||||
remoteClient.SendTeleportFailed("The region '" + regionName + "' could not be found.");
|
remoteClient.SendTeleportFailed("The region '" + regionName + "' could not be found.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
RequestTeleportLocation(remoteClient, regions[0].RegionHandle, position, lookat, teleportFlags);
|
RequestTeleportLocation(remoteClient, region.RegionHandle, position, lookat, teleportFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -1650,16 +1650,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
ScenePresence avatar = m_scene.GetScenePresence(rootpart.AttachedAvatar);
|
ScenePresence avatar = m_scene.GetScenePresence(rootpart.AttachedAvatar);
|
||||||
if (avatar != null)
|
if (avatar != null)
|
||||||
{
|
{
|
||||||
List<string> coords = new List<string>();
|
avatar.MoveToTarget(target);
|
||||||
uint regionX = 0;
|
|
||||||
uint regionY = 0;
|
|
||||||
Utils.LongToUInts(Scene.RegionInfo.RegionHandle, out regionX, out regionY);
|
|
||||||
target.X += regionX;
|
|
||||||
target.Y += regionY;
|
|
||||||
coords.Add(target.X.ToString());
|
|
||||||
coords.Add(target.Y.ToString());
|
|
||||||
coords.Add(target.Z.ToString());
|
|
||||||
avatar.DoMoveToPosition(avatar, "", coords);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -1038,7 +1038,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
actor.Size = m_shape.Scale;
|
actor.Size = m_shape.Scale;
|
||||||
|
|
||||||
if (((OpenMetaverse.SculptType)Shape.SculptType) == SculptType.Mesh)
|
if (Shape.SculptEntry)
|
||||||
CheckSculptAndLoad();
|
CheckSculptAndLoad();
|
||||||
else
|
else
|
||||||
ParentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor);
|
ParentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor);
|
||||||
|
@ -1751,9 +1751,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return part;
|
return part;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DoPhysicsPropertyUpdate(bool UsePhysics, bool isNew)
|
/// <summary>
|
||||||
{
|
/// Do a physics property update for a NINJA joint.
|
||||||
if (IsJoint())
|
/// </summary>
|
||||||
|
/// <param name="UsePhysics"></param>
|
||||||
|
/// <param name="isNew"></param>
|
||||||
|
protected void DoPhysicsPropertyUpdateForNinjaJoint(bool UsePhysics, bool isNew)
|
||||||
{
|
{
|
||||||
if (UsePhysics)
|
if (UsePhysics)
|
||||||
{
|
{
|
||||||
|
@ -1841,6 +1844,18 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Do a physics propery update for this part.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="UsePhysics"></param>
|
||||||
|
/// <param name="isNew"></param>
|
||||||
|
public void DoPhysicsPropertyUpdate(bool UsePhysics, bool isNew)
|
||||||
|
{
|
||||||
|
if (IsJoint())
|
||||||
|
{
|
||||||
|
DoPhysicsPropertyUpdateForNinjaJoint(UsePhysics, isNew);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (PhysActor != null)
|
if (PhysActor != null)
|
||||||
|
@ -1906,7 +1921,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
// If this part is a sculpt then delay the physics update until we've asynchronously loaded the
|
// If this part is a sculpt then delay the physics update until we've asynchronously loaded the
|
||||||
// mesh data.
|
// mesh data.
|
||||||
if (((OpenMetaverse.SculptType)Shape.SculptType) == SculptType.Mesh)
|
if (Shape.SculptEntry)
|
||||||
CheckSculptAndLoad();
|
CheckSculptAndLoad();
|
||||||
else
|
else
|
||||||
m_parentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor);
|
m_parentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor);
|
||||||
|
@ -4821,7 +4836,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
PhysActor.OnCollisionUpdate += PhysicsCollision;
|
PhysActor.OnCollisionUpdate += PhysicsCollision;
|
||||||
PhysActor.SubscribeEvents(1000);
|
PhysActor.SubscribeEvents(1000);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -89,6 +89,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static readonly Vector3 SIT_TARGET_ADJUSTMENT = new Vector3(0.1f, 0.0f, 0.3f);
|
private static readonly Vector3 SIT_TARGET_ADJUSTMENT = new Vector3(0.1f, 0.0f, 0.3f);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Movement updates for agents in neighboring regions are sent directly to clients.
|
||||||
|
/// This value only affects how often agent positions are sent to neighbor regions
|
||||||
|
/// for things such as distance-based update prioritization
|
||||||
|
/// </summary>
|
||||||
|
public static readonly float SIGNIFICANT_MOVEMENT = 2.0f;
|
||||||
|
|
||||||
public UUID currentParcelUUID = UUID.Zero;
|
public UUID currentParcelUUID = UUID.Zero;
|
||||||
|
|
||||||
private ISceneViewer m_sceneViewer;
|
private ISceneViewer m_sceneViewer;
|
||||||
|
@ -116,7 +123,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
private ScriptControlled IgnoredControls = ScriptControlled.CONTROL_ZERO;
|
private ScriptControlled IgnoredControls = ScriptControlled.CONTROL_ZERO;
|
||||||
private ScriptControlled LastCommands = ScriptControlled.CONTROL_ZERO;
|
private ScriptControlled LastCommands = ScriptControlled.CONTROL_ZERO;
|
||||||
private bool MouseDown = false;
|
private bool MouseDown = false;
|
||||||
private SceneObjectGroup proxyObjectGroup;
|
// private SceneObjectGroup proxyObjectGroup;
|
||||||
//private SceneObjectPart proxyObjectPart = null;
|
//private SceneObjectPart proxyObjectPart = null;
|
||||||
public Vector3 lastKnownAllowedPosition;
|
public Vector3 lastKnownAllowedPosition;
|
||||||
public bool sentMessageAboutRestrictedParcelFlyingDown;
|
public bool sentMessageAboutRestrictedParcelFlyingDown;
|
||||||
|
@ -210,8 +217,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
private string m_nextSitAnimation = String.Empty;
|
private string m_nextSitAnimation = String.Empty;
|
||||||
|
|
||||||
//PauPaw:Proper PID Controler for autopilot************
|
//PauPaw:Proper PID Controler for autopilot************
|
||||||
private bool m_moveToPositionInProgress;
|
public bool MovingToTarget { get; private set; }
|
||||||
private Vector3 m_moveToPositionTarget;
|
public Vector3 MoveToPositionTarget { get; private set; }
|
||||||
|
|
||||||
private bool m_followCamAuto;
|
private bool m_followCamAuto;
|
||||||
|
|
||||||
|
@ -779,8 +786,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_controllingClient.OnStartAnim += HandleStartAnim;
|
m_controllingClient.OnStartAnim += HandleStartAnim;
|
||||||
m_controllingClient.OnStopAnim += HandleStopAnim;
|
m_controllingClient.OnStopAnim += HandleStopAnim;
|
||||||
m_controllingClient.OnForceReleaseControls += HandleForceReleaseControls;
|
m_controllingClient.OnForceReleaseControls += HandleForceReleaseControls;
|
||||||
m_controllingClient.OnAutoPilotGo += DoAutoPilot;
|
m_controllingClient.OnAutoPilotGo += MoveToTarget;
|
||||||
m_controllingClient.AddGenericPacketHandler("autopilot", DoMoveToPosition);
|
|
||||||
|
|
||||||
// ControllingClient.OnChildAgentStatus += new StatusChange(this.ChildStatusChange);
|
// ControllingClient.OnChildAgentStatus += new StatusChange(this.ChildStatusChange);
|
||||||
// ControllingClient.OnStopMovement += new GenericCall2(this.StopMovement);
|
// ControllingClient.OnStopMovement += new GenericCall2(this.StopMovement);
|
||||||
|
@ -916,7 +922,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[SCENE PRESENCE]: null appearance in MakeRoot in {0}", Scene.RegionInfo.RegionName);
|
m_log.ErrorFormat("[SCENE PRESENCE]: null appearance in MakeRoot in {0}", Scene.RegionInfo.RegionName);
|
||||||
// emergency; this really shouldn't happen
|
// emergency; this really shouldn't happen
|
||||||
m_appearance = new AvatarAppearance(UUID);
|
m_appearance = new AvatarAppearance();
|
||||||
}
|
}
|
||||||
|
|
||||||
AddToPhysicalScene(isFlying);
|
AddToPhysicalScene(isFlying);
|
||||||
|
@ -1076,13 +1082,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
SendTerseUpdateToAllClients();
|
SendTerseUpdateToAllClients();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public void StopMovement()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public void StopFlying()
|
public void StopFlying()
|
||||||
{
|
{
|
||||||
ControllingClient.StopFlying(this);
|
ControllingClient.StopFlying(this);
|
||||||
|
@ -1379,14 +1378,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool update_movementflag = false;
|
|
||||||
|
|
||||||
if (m_allowMovement && !SitGround)
|
if (m_allowMovement && !SitGround)
|
||||||
{
|
{
|
||||||
|
bool update_movementflag = false;
|
||||||
|
|
||||||
if (agentData.UseClientAgentPosition)
|
if (agentData.UseClientAgentPosition)
|
||||||
{
|
{
|
||||||
m_moveToPositionInProgress = (agentData.ClientAgentPosition - AbsolutePosition).Length() > 0.2f;
|
MovingToTarget = (agentData.ClientAgentPosition - AbsolutePosition).Length() > 0.2f;
|
||||||
m_moveToPositionTarget = agentData.ClientAgentPosition;
|
MoveToPositionTarget = agentData.ClientAgentPosition;
|
||||||
}
|
}
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
@ -1417,7 +1416,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (m_parentID == 0)
|
if (m_parentID == 0)
|
||||||
{
|
{
|
||||||
bool bAllowUpdateMoveToPosition = false;
|
bool bAllowUpdateMoveToPosition = false;
|
||||||
bool bResetMoveToPosition = false;
|
|
||||||
|
|
||||||
Vector3[] dirVectors;
|
Vector3[] dirVectors;
|
||||||
|
|
||||||
|
@ -1430,13 +1428,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
// The fact that m_movementflag is a byte needs to be fixed
|
// The fact that m_movementflag is a byte needs to be fixed
|
||||||
// it really should be a uint
|
// it really should be a uint
|
||||||
|
// A DIR_CONTROL_FLAG occurs when the user is trying to move in a particular direction.
|
||||||
uint nudgehack = 250;
|
uint nudgehack = 250;
|
||||||
foreach (Dir_ControlFlags DCF in DIR_CONTROL_FLAGS)
|
foreach (Dir_ControlFlags DCF in DIR_CONTROL_FLAGS)
|
||||||
{
|
{
|
||||||
if (((uint)flags & (uint)DCF) != 0)
|
if (((uint)flags & (uint)DCF) != 0)
|
||||||
{
|
{
|
||||||
bResetMoveToPosition = true;
|
|
||||||
DCFlagKeyPressed = true;
|
DCFlagKeyPressed = true;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
agent_control_v3 += dirVectors[i];
|
agent_control_v3 += dirVectors[i];
|
||||||
|
@ -1480,98 +1479,23 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
bAllowUpdateMoveToPosition = true;
|
bAllowUpdateMoveToPosition = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Paupaw:Do Proper PID for Autopilot here
|
if (MovingToTarget)
|
||||||
if (bResetMoveToPosition)
|
|
||||||
{
|
{
|
||||||
m_moveToPositionTarget = Vector3.Zero;
|
// If the user has pressed a key then we want to cancel any move to target.
|
||||||
m_moveToPositionInProgress = false;
|
if (DCFlagKeyPressed)
|
||||||
update_movementflag = true;
|
|
||||||
bAllowUpdateMoveToPosition = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bAllowUpdateMoveToPosition && (m_moveToPositionInProgress && !m_autopilotMoving))
|
|
||||||
{
|
{
|
||||||
//Check the error term of the current position in relation to the target position
|
ResetMoveToTarget();
|
||||||
if (Util.GetDistanceTo(AbsolutePosition, m_moveToPositionTarget) <= 0.5f)
|
|
||||||
{
|
|
||||||
// we are close enough to the target
|
|
||||||
m_moveToPositionTarget = Vector3.Zero;
|
|
||||||
m_moveToPositionInProgress = false;
|
|
||||||
update_movementflag = true;
|
update_movementflag = true;
|
||||||
}
|
}
|
||||||
else
|
else if (bAllowUpdateMoveToPosition)
|
||||||
{
|
{
|
||||||
try
|
if (HandleMoveToTargetUpdate(ref agent_control_v3, bodyRotation))
|
||||||
{
|
|
||||||
// move avatar in 2D at one meter/second towards target, in avatar coordinate frame.
|
|
||||||
// This movement vector gets added to the velocity through AddNewMovement().
|
|
||||||
// Theoretically we might need a more complex PID approach here if other
|
|
||||||
// unknown forces are acting on the avatar and we need to adaptively respond
|
|
||||||
// to such forces, but the following simple approach seems to works fine.
|
|
||||||
Vector3 LocalVectorToTarget3D =
|
|
||||||
(m_moveToPositionTarget - AbsolutePosition) // vector from cur. pos to target in global coords
|
|
||||||
* Matrix4.CreateFromQuaternion(Quaternion.Inverse(bodyRotation)); // change to avatar coords
|
|
||||||
// Ignore z component of vector
|
|
||||||
Vector3 LocalVectorToTarget2D = new Vector3((float)(LocalVectorToTarget3D.X), (float)(LocalVectorToTarget3D.Y), 0f);
|
|
||||||
LocalVectorToTarget2D.Normalize();
|
|
||||||
agent_control_v3 += LocalVectorToTarget2D;
|
|
||||||
|
|
||||||
// update avatar movement flags. the avatar coordinate system is as follows:
|
|
||||||
//
|
|
||||||
// +X (forward)
|
|
||||||
//
|
|
||||||
// ^
|
|
||||||
// |
|
|
||||||
// |
|
|
||||||
// |
|
|
||||||
// |
|
|
||||||
// (left) +Y <--------o--------> -Y
|
|
||||||
// avatar
|
|
||||||
// |
|
|
||||||
// |
|
|
||||||
// |
|
|
||||||
// |
|
|
||||||
// v
|
|
||||||
// -X
|
|
||||||
//
|
|
||||||
|
|
||||||
// based on the above avatar coordinate system, classify the movement into
|
|
||||||
// one of left/right/back/forward.
|
|
||||||
if (LocalVectorToTarget2D.Y > 0)//MoveLeft
|
|
||||||
{
|
|
||||||
m_movementflag += (byte)(uint)Dir_ControlFlags.DIR_CONTROL_FLAG_LEFT;
|
|
||||||
//AgentControlFlags
|
|
||||||
AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_LEFT;
|
|
||||||
update_movementflag = true;
|
update_movementflag = true;
|
||||||
}
|
}
|
||||||
else if (LocalVectorToTarget2D.Y < 0) //MoveRight
|
|
||||||
{
|
|
||||||
m_movementflag += (byte)(uint)Dir_ControlFlags.DIR_CONTROL_FLAG_RIGHT;
|
|
||||||
AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_RIGHT;
|
|
||||||
update_movementflag = true;
|
|
||||||
}
|
|
||||||
if (LocalVectorToTarget2D.X < 0) //MoveBack
|
|
||||||
{
|
|
||||||
m_movementflag += (byte)(uint)Dir_ControlFlags.DIR_CONTROL_FLAG_BACK;
|
|
||||||
AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_BACK;
|
|
||||||
update_movementflag = true;
|
|
||||||
}
|
|
||||||
else if (LocalVectorToTarget2D.X > 0) //Move Forward
|
|
||||||
{
|
|
||||||
m_movementflag += (byte)(uint)Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD;
|
|
||||||
AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD;
|
|
||||||
update_movementflag = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
//Avoid system crash, can be slower but...
|
|
||||||
m_log.DebugFormat("Crash! {0}", e.ToString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1608,74 +1532,208 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// "In {0} adding velocity to {1} of {2}", m_scene.RegionInfo.RegionName, Name, agent_control_v3);
|
// "In {0} adding velocity to {1} of {2}", m_scene.RegionInfo.RegionName, Name, agent_control_v3);
|
||||||
|
|
||||||
AddNewMovement(agent_control_v3, q);
|
AddNewMovement(agent_control_v3, q);
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (update_movementflag && ((flags & AgentManager.ControlFlags.AGENT_CONTROL_SIT_ON_GROUND) == 0) && (m_parentID == 0) && !SitGround)
|
if (update_movementflag
|
||||||
|
&& ((flags & AgentManager.ControlFlags.AGENT_CONTROL_SIT_ON_GROUND) == 0)
|
||||||
|
&& (m_parentID == 0)
|
||||||
|
&& !SitGround)
|
||||||
Animator.UpdateMovementAnimations();
|
Animator.UpdateMovementAnimations();
|
||||||
|
}
|
||||||
|
|
||||||
m_scene.EventManager.TriggerOnClientMovement(this);
|
m_scene.EventManager.TriggerOnClientMovement(this);
|
||||||
|
|
||||||
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
|
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DoAutoPilot(uint not_used, Vector3 Pos, IClientAPI remote_client)
|
/// <summary>
|
||||||
|
/// Calculate an update to move the presence to the set target.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// This doesn't actually perform the movement. Instead, it adds its vector to agent_control_v3.
|
||||||
|
/// </remarks>
|
||||||
|
/// <param value="agent_control_v3">Cumulative agent movement that this method will update.</param>
|
||||||
|
/// <param value="bodyRotation">New body rotation of the avatar.</param>
|
||||||
|
/// <returns>True if movement has been updated in some way. False otherwise.</returns>
|
||||||
|
public bool HandleMoveToTargetUpdate(ref Vector3 agent_control_v3, Quaternion bodyRotation)
|
||||||
{
|
{
|
||||||
m_autopilotMoving = true;
|
// m_log.DebugFormat("[SCENE PRESENCE]: Called HandleMoveToTargetUpdate() for {0}", Name);
|
||||||
m_autoPilotTarget = Pos;
|
|
||||||
m_sitAtAutoTarget = false;
|
|
||||||
PrimitiveBaseShape proxy = PrimitiveBaseShape.Default;
|
|
||||||
//proxy.PCode = (byte)PCode.ParticleSystem;
|
|
||||||
|
|
||||||
proxyObjectGroup = new SceneObjectGroup(UUID, Pos, Rotation, proxy);
|
bool updated = false;
|
||||||
proxyObjectGroup.AttachToScene(m_scene);
|
|
||||||
|
|
||||||
// Commented out this code since it could never have executed, but might still be informative.
|
// m_log.DebugFormat(
|
||||||
// if (proxyObjectGroup != null)
|
// "[SCENE PRESENCE]: bAllowUpdateMoveToPosition {0}, m_moveToPositionInProgress {1}, m_autopilotMoving {2}",
|
||||||
// {
|
// allowUpdate, m_moveToPositionInProgress, m_autopilotMoving);
|
||||||
proxyObjectGroup.SendGroupFullUpdate();
|
|
||||||
remote_client.SendSitResponse(proxyObjectGroup.UUID, Vector3.Zero, Quaternion.Identity, true, Vector3.Zero, Vector3.Zero, false);
|
if (!m_autopilotMoving)
|
||||||
m_scene.DeleteSceneObject(proxyObjectGroup, false);
|
{
|
||||||
// }
|
double distanceToTarget = Util.GetDistanceTo(AbsolutePosition, MoveToPositionTarget);
|
||||||
// else
|
// m_log.DebugFormat(
|
||||||
// {
|
// "[SCENE PRESENCE]: Abs pos of {0} is {1}, target {2}, distance {3}",
|
||||||
// m_autopilotMoving = false;
|
// Name, AbsolutePosition, MoveToPositionTarget, distanceToTarget);
|
||||||
// m_autoPilotTarget = Vector3.Zero;
|
|
||||||
// ControllingClient.SendAlertMessage("Autopilot cancelled");
|
// Check the error term of the current position in relation to the target position
|
||||||
// }
|
if (distanceToTarget <= 1)
|
||||||
|
{
|
||||||
|
// We are close enough to the target
|
||||||
|
AbsolutePosition = MoveToPositionTarget;
|
||||||
|
ResetMoveToTarget();
|
||||||
|
updated = true;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
public void DoMoveToPosition(Object sender, string method, List<String> args)
|
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
float locx = 0f;
|
// move avatar in 3D at one meter/second towards target, in avatar coordinate frame.
|
||||||
float locy = 0f;
|
// This movement vector gets added to the velocity through AddNewMovement().
|
||||||
float locz = 0f;
|
// Theoretically we might need a more complex PID approach here if other
|
||||||
uint regionX = 0;
|
// unknown forces are acting on the avatar and we need to adaptively respond
|
||||||
uint regionY = 0;
|
// to such forces, but the following simple approach seems to works fine.
|
||||||
try
|
Vector3 LocalVectorToTarget3D =
|
||||||
|
(MoveToPositionTarget - AbsolutePosition) // vector from cur. pos to target in global coords
|
||||||
|
* Matrix4.CreateFromQuaternion(Quaternion.Inverse(bodyRotation)); // change to avatar coords
|
||||||
|
// Ignore z component of vector
|
||||||
|
// Vector3 LocalVectorToTarget2D = new Vector3((float)(LocalVectorToTarget3D.X), (float)(LocalVectorToTarget3D.Y), 0f);
|
||||||
|
LocalVectorToTarget3D.Normalize();
|
||||||
|
|
||||||
|
// update avatar movement flags. the avatar coordinate system is as follows:
|
||||||
|
//
|
||||||
|
// +X (forward)
|
||||||
|
//
|
||||||
|
// ^
|
||||||
|
// |
|
||||||
|
// |
|
||||||
|
// |
|
||||||
|
// |
|
||||||
|
// (left) +Y <--------o--------> -Y
|
||||||
|
// avatar
|
||||||
|
// |
|
||||||
|
// |
|
||||||
|
// |
|
||||||
|
// |
|
||||||
|
// v
|
||||||
|
// -X
|
||||||
|
//
|
||||||
|
|
||||||
|
// based on the above avatar coordinate system, classify the movement into
|
||||||
|
// one of left/right/back/forward.
|
||||||
|
if (LocalVectorToTarget3D.X < 0) //MoveBack
|
||||||
{
|
{
|
||||||
Utils.LongToUInts(Scene.RegionInfo.RegionHandle, out regionX, out regionY);
|
m_movementflag += (byte)(uint)Dir_ControlFlags.DIR_CONTROL_FLAG_BACK;
|
||||||
locx = Convert.ToSingle(args[0]) - (float)regionX;
|
AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_BACK;
|
||||||
locy = Convert.ToSingle(args[1]) - (float)regionY;
|
updated = true;
|
||||||
locz = Convert.ToSingle(args[2]);
|
|
||||||
}
|
}
|
||||||
catch (InvalidCastException)
|
else if (LocalVectorToTarget3D.X > 0) //Move Forward
|
||||||
{
|
{
|
||||||
m_log.Error("[CLIENT]: Invalid autopilot request");
|
m_movementflag += (byte)(uint)Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD;
|
||||||
|
AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD;
|
||||||
|
updated = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (LocalVectorToTarget3D.Y > 0) //MoveLeft
|
||||||
|
{
|
||||||
|
m_movementflag += (byte)(uint)Dir_ControlFlags.DIR_CONTROL_FLAG_LEFT;
|
||||||
|
AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_LEFT;
|
||||||
|
updated = true;
|
||||||
|
}
|
||||||
|
else if (LocalVectorToTarget3D.Y < 0) //MoveRight
|
||||||
|
{
|
||||||
|
m_movementflag += (byte)(uint)Dir_ControlFlags.DIR_CONTROL_FLAG_RIGHT;
|
||||||
|
AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_RIGHT;
|
||||||
|
updated = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (LocalVectorToTarget3D.Z > 0) //Up
|
||||||
|
{
|
||||||
|
// Don't set these flags for up or down - doing so will make the avatar crouch or
|
||||||
|
// keep trying to jump even if walking along level ground
|
||||||
|
//m_movementflag += (byte)(uint)Dir_ControlFlags.DIR_CONTROL_FLAG_UP;
|
||||||
|
//AgentControlFlags
|
||||||
|
//AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_UP;
|
||||||
|
updated = true;
|
||||||
|
}
|
||||||
|
else if (LocalVectorToTarget3D.Z < 0) //Down
|
||||||
|
{
|
||||||
|
//m_movementflag += (byte)(uint)Dir_ControlFlags.DIR_CONTROL_FLAG_DOWN;
|
||||||
|
//AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_DOWN;
|
||||||
|
updated = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[SCENE PRESENCE]: HandleMoveToTargetUpdate adding {0} to move vector {1} for {2}",
|
||||||
|
// LocalVectorToTarget3D, agent_control_v3, Name);
|
||||||
|
|
||||||
|
agent_control_v3 += LocalVectorToTarget3D;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
//Avoid system crash, can be slower but...
|
||||||
|
m_log.DebugFormat("Crash! {0}", e.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return updated;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Move to the given target over time.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="pos"></param>
|
||||||
|
public void MoveToTarget(Vector3 pos)
|
||||||
|
{
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[SCENE PRESENCE]: Avatar {0} received request to move to position {1} in {2}",
|
||||||
|
// Name, pos, m_scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
|
if (pos.X < 0 || pos.X >= Constants.RegionSize
|
||||||
|
|| pos.Y < 0 || pos.Y >= Constants.RegionSize
|
||||||
|
|| pos.Z < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// Vector3 heightAdjust = new Vector3(0, 0, Appearance.AvatarHeight / 2);
|
||||||
|
// pos += heightAdjust;
|
||||||
|
//
|
||||||
|
// // Anti duck-walking measure
|
||||||
|
// if (Math.Abs(pos.Z - AbsolutePosition.Z) < 0.2f)
|
||||||
|
// {
|
||||||
|
//// m_log.DebugFormat("[SCENE PRESENCE]: Adjusting MoveToPosition from {0} to {1}", pos, AbsolutePosition);
|
||||||
|
// pos.Z = AbsolutePosition.Z;
|
||||||
|
// }
|
||||||
|
|
||||||
|
float terrainHeight = (float)m_scene.Heightmap[(int)pos.X, (int)pos.Y];
|
||||||
|
pos.Z = Math.Max(terrainHeight, pos.Z);
|
||||||
|
|
||||||
|
// Fudge factor. It appears that if one clicks "go here" on a piece of ground, the go here request is
|
||||||
|
// always slightly higher than the actual terrain height.
|
||||||
|
// FIXME: This constrains NOC movements as well, so should be somewhere else.
|
||||||
|
if (pos.Z - terrainHeight < 0.2)
|
||||||
|
pos.Z = terrainHeight;
|
||||||
|
|
||||||
|
m_log.DebugFormat(
|
||||||
|
"[SCENE PRESENCE]: Avatar {0} set move to target {1} (terrain height {2}) in {3}",
|
||||||
|
Name, pos, terrainHeight, m_scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
|
if (pos.Z > terrainHeight)
|
||||||
|
PhysicsActor.Flying = true;
|
||||||
|
|
||||||
|
MovingToTarget = true;
|
||||||
|
MoveToPositionTarget = pos;
|
||||||
|
|
||||||
|
Vector3 agent_control_v3 = new Vector3();
|
||||||
|
HandleMoveToTargetUpdate(ref agent_control_v3, Rotation);
|
||||||
|
AddNewMovement(agent_control_v3, Rotation);
|
||||||
}
|
}
|
||||||
m_moveToPositionInProgress = true;
|
|
||||||
m_moveToPositionTarget = new Vector3(locx, locy, locz);
|
/// <summary>
|
||||||
}
|
/// Reset the move to target.
|
||||||
catch (Exception ex)
|
/// </summary>
|
||||||
|
public void ResetMoveToTarget()
|
||||||
{
|
{
|
||||||
//Why did I get this error?
|
m_log.DebugFormat("[SCENE PRESENCE]: Resetting move to target for {0}", Name);
|
||||||
m_log.Error("[SCENEPRESENCE]: DoMoveToPosition" + ex);
|
|
||||||
}
|
MovingToTarget = false;
|
||||||
|
MoveToPositionTarget = Vector3.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CheckAtSitTarget()
|
private void CheckAtSitTarget()
|
||||||
|
@ -1908,13 +1966,22 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
HandleAgentSit(remoteClient, UUID);
|
HandleAgentSit(remoteClient, UUID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// public void HandleAgentRequestSit(IClientAPI remoteClient, UUID agentID, UUID targetID, Vector3 offset, string sitAnimation)
|
||||||
public void HandleAgentRequestSit(IClientAPI remoteClient, UUID agentID, UUID targetID, Vector3 offset)
|
public void HandleAgentRequestSit(IClientAPI remoteClient, UUID agentID, UUID targetID, Vector3 offset)
|
||||||
{
|
{
|
||||||
if (m_parentID != 0)
|
if (m_parentID != 0)
|
||||||
{
|
{
|
||||||
StandUp();
|
StandUp();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if (!String.IsNullOrEmpty(sitAnimation))
|
||||||
|
// {
|
||||||
|
// m_nextSitAnimation = sitAnimation;
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
m_nextSitAnimation = "SIT";
|
m_nextSitAnimation = "SIT";
|
||||||
|
// }
|
||||||
|
|
||||||
//SceneObjectPart part = m_scene.GetSceneObjectPart(targetID);
|
//SceneObjectPart part = m_scene.GetSceneObjectPart(targetID);
|
||||||
SceneObjectPart part = FindNextAvailableSitTarget(targetID);
|
SceneObjectPart part = FindNextAvailableSitTarget(targetID);
|
||||||
|
@ -1940,7 +2007,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
m_log.Warn("Sit requested on unknown object: " + targetID.ToString());
|
m_log.Warn("Sit requested on unknown object: " + targetID.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2138,44 +2204,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
SendSitResponse(ControllingClient, m_requestedSitTargetUUID, collisionPoint - m_requestedSitOffset, Quaternion.Identity);
|
SendSitResponse(ControllingClient, m_requestedSitTargetUUID, collisionPoint - m_requestedSitOffset, Quaternion.Identity);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
public void HandleAgentRequestSit(IClientAPI remoteClient, UUID agentID, UUID targetID, Vector3 offset, string sitAnimation)
|
|
||||||
{
|
|
||||||
if (m_parentID != 0)
|
|
||||||
{
|
|
||||||
StandUp();
|
|
||||||
}
|
|
||||||
if (!String.IsNullOrEmpty(sitAnimation))
|
|
||||||
{
|
|
||||||
m_nextSitAnimation = sitAnimation;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_nextSitAnimation = "SIT";
|
|
||||||
}
|
|
||||||
|
|
||||||
//SceneObjectPart part = m_scene.GetSceneObjectPart(targetID);
|
|
||||||
SceneObjectPart part = FindNextAvailableSitTarget(targetID);
|
|
||||||
if (part != null)
|
|
||||||
{
|
|
||||||
m_requestedSitTargetID = part.LocalId;
|
|
||||||
//m_requestedSitOffset = offset;
|
|
||||||
m_requestedSitTargetUUID = targetID;
|
|
||||||
|
|
||||||
m_log.DebugFormat("[SIT]: Client requested Sit Position: {0}", offset);
|
|
||||||
|
|
||||||
if (m_scene.PhysicsScene.SupportsRayCast())
|
|
||||||
{
|
|
||||||
//SitRayCastAvatarPosition(part);
|
|
||||||
//return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_log.Warn("Sit requested on unknown object: " + targetID);
|
|
||||||
}
|
|
||||||
|
|
||||||
SendSitResponse(remoteClient, targetID, offset, Quaternion.Identity);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void HandleAgentSit(IClientAPI remoteClient, UUID agentID)
|
public void HandleAgentSit(IClientAPI remoteClient, UUID agentID)
|
||||||
{
|
{
|
||||||
|
@ -2647,10 +2676,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="avatar"></param>
|
/// <param name="avatar"></param>
|
||||||
public void SendAppearanceToAgent(ScenePresence avatar)
|
public void SendAppearanceToAgent(ScenePresence avatar)
|
||||||
{
|
{
|
||||||
// m_log.WarnFormat("[SP] Send appearance from {0} to {1}",m_uuid,avatar.ControllingClient.AgentId);
|
// m_log.DebugFormat(
|
||||||
|
// "[SCENE PRESENCE] Send appearance from {0} {1} to {2} {3}", Name, m_uuid, avatar.Name, avatar.UUID);
|
||||||
|
|
||||||
avatar.ControllingClient.SendAppearance(
|
avatar.ControllingClient.SendAppearance(
|
||||||
m_appearance.Owner, m_appearance.VisualParams, m_appearance.Texture.GetBytes());
|
UUID, m_appearance.VisualParams, m_appearance.Texture.GetBytes());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Because appearance setting is in a module, we actually need
|
// Because appearance setting is in a module, we actually need
|
||||||
|
@ -2659,7 +2689,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public AvatarAppearance Appearance
|
public AvatarAppearance Appearance
|
||||||
{
|
{
|
||||||
get { return m_appearance; }
|
get { return m_appearance; }
|
||||||
set { m_appearance = value; }
|
set
|
||||||
|
{
|
||||||
|
m_appearance = value;
|
||||||
|
// m_log.DebugFormat("[SCENE PRESENCE]: Set appearance for {0} to {1}", Name, value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -2671,15 +2705,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected void CheckForSignificantMovement()
|
protected void CheckForSignificantMovement()
|
||||||
{
|
{
|
||||||
// Movement updates for agents in neighboring regions are sent directly to clients.
|
|
||||||
// This value only affects how often agent positions are sent to neighbor regions
|
|
||||||
// for things such as distance-based update prioritization
|
|
||||||
const float SIGNIFICANT_MOVEMENT = 2.0f;
|
|
||||||
|
|
||||||
if (Util.GetDistanceTo(AbsolutePosition, posLastSignificantMove) > SIGNIFICANT_MOVEMENT)
|
if (Util.GetDistanceTo(AbsolutePosition, posLastSignificantMove) > SIGNIFICANT_MOVEMENT)
|
||||||
{
|
{
|
||||||
posLastSignificantMove = AbsolutePosition;
|
posLastSignificantMove = AbsolutePosition;
|
||||||
m_scene.EventManager.TriggerSignificantClientMovement(m_controllingClient);
|
m_scene.EventManager.TriggerSignificantClientMovement(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Minimum Draw distance is 64 meters, the Radius of the draw distance sphere is 32m
|
// Minimum Draw distance is 64 meters, the Radius of the draw distance sphere is 32m
|
||||||
|
|
|
@ -35,7 +35,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
public class UndoState
|
public class UndoState
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
public Vector3 Position = Vector3.Zero;
|
public Vector3 Position = Vector3.Zero;
|
||||||
public Vector3 Scale = Vector3.Zero;
|
public Vector3 Scale = Vector3.Zero;
|
||||||
|
|
|
@ -806,7 +806,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
|
||||||
public event ScriptReset OnScriptReset;
|
public event ScriptReset OnScriptReset;
|
||||||
public event GetScriptRunning OnGetScriptRunning;
|
public event GetScriptRunning OnGetScriptRunning;
|
||||||
public event SetScriptRunning OnSetScriptRunning;
|
public event SetScriptRunning OnSetScriptRunning;
|
||||||
public event UpdateVector OnAutoPilotGo;
|
public event Action<Vector3> OnAutoPilotGo;
|
||||||
public event TerrainUnacked OnUnackedTerrain;
|
public event TerrainUnacked OnUnackedTerrain;
|
||||||
public event ActivateGesture OnActivateGesture;
|
public event ActivateGesture OnActivateGesture;
|
||||||
public event DeactivateGesture OnDeactivateGesture;
|
public event DeactivateGesture OnDeactivateGesture;
|
||||||
|
@ -1678,7 +1678,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId)
|
public void SendTextBoxRequest(string message, int chatChannel, string objectname, UUID ownerID, string ownerFirstName, string ownerLastName, UUID objectId)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ namespace OpenSim.Region.OptionalModules.Framework.Monitoring
|
||||||
{
|
{
|
||||||
protected Scene m_scene;
|
protected Scene m_scene;
|
||||||
|
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
public string Name { get { return "Services Health Monitoring Module"; } }
|
public string Name { get { return "Services Health Monitoring Module"; } }
|
||||||
|
|
||||||
|
|
|
@ -99,6 +99,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendSitResponse(UUID TargetID, Vector3 OffsetPos, Quaternion SitOrientation, bool autopilot,
|
public void SendSitResponse(UUID TargetID, Vector3 OffsetPos, Quaternion SitOrientation, bool autopilot,
|
||||||
Vector3 CameraAtOffset, Vector3 CameraEyeOffset, bool ForceMouseLook)
|
Vector3 CameraAtOffset, Vector3 CameraEyeOffset, bool ForceMouseLook)
|
||||||
{
|
{
|
||||||
|
@ -327,7 +328,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||||
public event ScriptReset OnScriptReset;
|
public event ScriptReset OnScriptReset;
|
||||||
public event GetScriptRunning OnGetScriptRunning;
|
public event GetScriptRunning OnGetScriptRunning;
|
||||||
public event SetScriptRunning OnSetScriptRunning;
|
public event SetScriptRunning OnSetScriptRunning;
|
||||||
public event UpdateVector OnAutoPilotGo;
|
public event Action<Vector3> OnAutoPilotGo;
|
||||||
|
|
||||||
public event TerrainUnacked OnUnackedTerrain;
|
public event TerrainUnacked OnUnackedTerrain;
|
||||||
|
|
||||||
|
@ -1157,7 +1158,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId)
|
public void SendTextBoxRequest(string message, int chatChannel, string objectname, UUID ownerID, string ownerFirstName, string ownerLastName, UUID objectId)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,14 +44,75 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
// private const bool m_enabled = false;
|
|
||||||
|
|
||||||
private Dictionary<UUID, NPCAvatar> m_avatars = new Dictionary<UUID, NPCAvatar>();
|
private Dictionary<UUID, NPCAvatar> m_avatars = new Dictionary<UUID, NPCAvatar>();
|
||||||
private Dictionary<UUID, AvatarAppearance> m_appearanceCache = new Dictionary<UUID, AvatarAppearance>();
|
private Dictionary<UUID, AvatarAppearance> m_appearanceCache = new Dictionary<UUID, AvatarAppearance>();
|
||||||
|
|
||||||
public void Initialise(Scene scene, IConfigSource source)
|
public void Initialise(Scene scene, IConfigSource source)
|
||||||
|
{
|
||||||
|
IConfig config = source.Configs["NPC"];
|
||||||
|
|
||||||
|
if (config != null && config.GetBoolean("Enabled", false))
|
||||||
{
|
{
|
||||||
scene.RegisterModuleInterface<INPCModule>(this);
|
scene.RegisterModuleInterface<INPCModule>(this);
|
||||||
|
scene.EventManager.OnSignificantClientMovement += HandleOnSignificantClientMovement;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void HandleOnSignificantClientMovement(ScenePresence presence)
|
||||||
|
{
|
||||||
|
lock (m_avatars)
|
||||||
|
{
|
||||||
|
if (m_avatars.ContainsKey(presence.UUID) && presence.MovingToTarget)
|
||||||
|
{
|
||||||
|
double distanceToTarget = Util.GetDistanceTo(presence.AbsolutePosition, presence.MoveToPositionTarget);
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[NPC MODULE]: Abs pos of {0} is {1}, target {2}, distance {3}",
|
||||||
|
// presence.Name, presence.AbsolutePosition, presence.MoveToPositionTarget, distanceToTarget);
|
||||||
|
|
||||||
|
// Check the error term of the current position in relation to the target position
|
||||||
|
if (distanceToTarget <= ScenePresence.SIGNIFICANT_MOVEMENT)
|
||||||
|
{
|
||||||
|
// We are close enough to the target
|
||||||
|
m_log.DebugFormat("[NPC MODULE]: Stopping movement of npc {0}", presence.Name);
|
||||||
|
|
||||||
|
if (presence.PhysicsActor.Flying)
|
||||||
|
{
|
||||||
|
Vector3 targetPos = presence.MoveToPositionTarget;
|
||||||
|
float terrainHeight = (float)presence.Scene.Heightmap[(int)targetPos.X, (int)targetPos.Y];
|
||||||
|
if (targetPos.Z - terrainHeight < 0.2)
|
||||||
|
{
|
||||||
|
presence.PhysicsActor.Flying = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
presence.Velocity = Vector3.Zero;
|
||||||
|
presence.AbsolutePosition = presence.MoveToPositionTarget;
|
||||||
|
presence.ResetMoveToTarget();
|
||||||
|
|
||||||
|
// FIXME: This doesn't work
|
||||||
|
if (presence.PhysicsActor.Flying)
|
||||||
|
presence.Animator.TrySetMovementAnimation("HOVER");
|
||||||
|
else
|
||||||
|
presence.Animator.TrySetMovementAnimation("STAND");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_log.DebugFormat(
|
||||||
|
"[NPC MODULE]: Updating npc {0} at {1} for next movement to {2}",
|
||||||
|
presence.Name, presence.AbsolutePosition, presence.MoveToPositionTarget);
|
||||||
|
|
||||||
|
Vector3 agent_control_v3 = new Vector3();
|
||||||
|
presence.HandleMoveToTargetUpdate(ref agent_control_v3, presence.Rotation);
|
||||||
|
presence.AddNewMovement(agent_control_v3, presence.Rotation);
|
||||||
|
}
|
||||||
|
//
|
||||||
|
//// presence.DoMoveToPositionUpdate((0, presence.MoveToPositionTarget, null);
|
||||||
|
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private AvatarAppearance GetAppearance(UUID target, Scene scene)
|
private AvatarAppearance GetAppearance(UUID target, Scene scene)
|
||||||
|
@ -59,15 +120,22 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||||
if (m_appearanceCache.ContainsKey(target))
|
if (m_appearanceCache.ContainsKey(target))
|
||||||
return m_appearanceCache[target];
|
return m_appearanceCache[target];
|
||||||
|
|
||||||
AvatarAppearance appearance = scene.AvatarService.GetAppearance(target);
|
ScenePresence originalPresence = scene.GetScenePresence(target);
|
||||||
if (appearance != null)
|
|
||||||
|
if (originalPresence != null)
|
||||||
{
|
{
|
||||||
m_appearanceCache.Add(target, appearance);
|
AvatarAppearance originalAppearance = originalPresence.Appearance;
|
||||||
return appearance;
|
m_appearanceCache.Add(target, originalAppearance);
|
||||||
|
return originalAppearance;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_log.DebugFormat(
|
||||||
|
"[NPC MODULE]: Avatar {0} is not in the scene for us to grab baked textures from them. Using defaults.", target);
|
||||||
|
|
||||||
return new AvatarAppearance();
|
return new AvatarAppearance();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public UUID CreateNPC(string firstname, string lastname, Vector3 position, Scene scene, UUID cloneAppearanceFrom)
|
public UUID CreateNPC(string firstname, string lastname, Vector3 position, Scene scene, UUID cloneAppearanceFrom)
|
||||||
{
|
{
|
||||||
|
@ -88,6 +156,13 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||||
AvatarAppearance npcAppearance = new AvatarAppearance(originalAppearance, true);
|
AvatarAppearance npcAppearance = new AvatarAppearance(originalAppearance, true);
|
||||||
acd.Appearance = npcAppearance;
|
acd.Appearance = npcAppearance;
|
||||||
|
|
||||||
|
// for (int i = 0; i < acd.Appearance.Texture.FaceTextures.Length; i++)
|
||||||
|
// {
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[NPC MODULE]: NPC avatar {0} has texture id {1} : {2}",
|
||||||
|
// acd.AgentID, i, acd.Appearance.Texture.FaceTextures[i]);
|
||||||
|
// }
|
||||||
|
|
||||||
scene.AuthenticateHandler.AddNewCircuit(npcAvatar.CircuitCode, acd);
|
scene.AuthenticateHandler.AddNewCircuit(npcAvatar.CircuitCode, acd);
|
||||||
scene.AddNewClient(npcAvatar);
|
scene.AddNewClient(npcAvatar);
|
||||||
|
|
||||||
|
@ -118,7 +193,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||||
return npcAvatar.AgentId;
|
return npcAvatar.AgentId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Autopilot(UUID agentID, Scene scene, Vector3 pos)
|
public void MoveToTarget(UUID agentID, Scene scene, Vector3 pos)
|
||||||
{
|
{
|
||||||
lock (m_avatars)
|
lock (m_avatars)
|
||||||
{
|
{
|
||||||
|
@ -126,7 +201,11 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||||
{
|
{
|
||||||
ScenePresence sp;
|
ScenePresence sp;
|
||||||
scene.TryGetScenePresence(agentID, out sp);
|
scene.TryGetScenePresence(agentID, out sp);
|
||||||
sp.DoAutoPilot(0, pos, m_avatars[agentID]);
|
|
||||||
|
m_log.DebugFormat(
|
||||||
|
"[NPC MODULE]: Moving {0} to {1} in {2}", sp.Name, pos, scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
|
sp.MoveToTarget(pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,11 +27,13 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using log4net;
|
||||||
using Nini.Config;
|
using Nini.Config;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Framework.Communications;
|
using OpenSim.Framework.Communications;
|
||||||
|
using OpenSim.Region.CoreModules.Avatar.AvatarFactory;
|
||||||
using OpenSim.Region.CoreModules.ServiceConnectorsOut.Avatar;
|
using OpenSim.Region.CoreModules.ServiceConnectorsOut.Avatar;
|
||||||
using OpenSim.Region.Framework.Interfaces;
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
using OpenSim.Region.Framework.Scenes;
|
using OpenSim.Region.Framework.Scenes;
|
||||||
|
@ -51,21 +53,104 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests
|
||||||
// log4net.Config.XmlConfigurator.Configure();
|
// log4net.Config.XmlConfigurator.Configure();
|
||||||
|
|
||||||
IConfigSource config = new IniConfigSource();
|
IConfigSource config = new IniConfigSource();
|
||||||
|
config.AddConfig("NPC");
|
||||||
|
config.Configs["NPC"].Set("Enabled", "true");
|
||||||
|
|
||||||
config.AddConfig("Modules");
|
AvatarFactoryModule afm = new AvatarFactoryModule();
|
||||||
config.Configs["Modules"].Set("AvatarServices", "LocalAvatarServicesConnector");
|
|
||||||
config.AddConfig("AvatarService");
|
|
||||||
config.Configs["AvatarService"].Set("LocalServiceModule", "OpenSim.Services.AvatarService.dll:AvatarService");
|
|
||||||
config.Configs["AvatarService"].Set("StorageProvider", "OpenSim.Data.Null.dll");
|
|
||||||
|
|
||||||
TestScene scene = SceneSetupHelpers.SetupScene();
|
TestScene scene = SceneSetupHelpers.SetupScene();
|
||||||
SceneSetupHelpers.SetupSceneModules(scene, config, new NPCModule(), new LocalAvatarServicesConnector());
|
SceneSetupHelpers.SetupSceneModules(scene, config, afm, new NPCModule());
|
||||||
|
TestClient originalClient = SceneSetupHelpers.AddClient(scene, TestHelper.ParseTail(0x1));
|
||||||
|
// ScenePresence originalAvatar = scene.GetScenePresence(originalClient.AgentId);
|
||||||
|
|
||||||
|
// 8 is the index of the first baked texture in AvatarAppearance
|
||||||
|
UUID originalFace8TextureId = TestHelper.ParseTail(0x10);
|
||||||
|
Primitive.TextureEntry originalTe = new Primitive.TextureEntry(UUID.Zero);
|
||||||
|
Primitive.TextureEntryFace originalTef = originalTe.CreateFace(8);
|
||||||
|
originalTef.TextureID = originalFace8TextureId;
|
||||||
|
|
||||||
|
// We also need to add the texture to the asset service, otherwise the AvatarFactoryModule will tell
|
||||||
|
// ScenePresence.SendInitialData() to reset our entire appearance.
|
||||||
|
scene.AssetService.Store(AssetHelpers.CreateAsset(originalFace8TextureId));
|
||||||
|
|
||||||
|
afm.SetAppearance(originalClient, originalTe, null);
|
||||||
|
|
||||||
INPCModule npcModule = scene.RequestModuleInterface<INPCModule>();
|
INPCModule npcModule = scene.RequestModuleInterface<INPCModule>();
|
||||||
UUID npcId = npcModule.CreateNPC("John", "Smith", new Vector3(128, 128, 30), scene, UUID.Zero);
|
UUID npcId = npcModule.CreateNPC("John", "Smith", new Vector3(128, 128, 30), scene, originalClient.AgentId);
|
||||||
|
|
||||||
ScenePresence npc = scene.GetScenePresence(npcId);
|
ScenePresence npc = scene.GetScenePresence(npcId);
|
||||||
|
|
||||||
Assert.That(npc, Is.Not.Null);
|
Assert.That(npc, Is.Not.Null);
|
||||||
|
Assert.That(npc.Appearance.Texture.FaceTextures[8].TextureID, Is.EqualTo(originalFace8TextureId));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestMove()
|
||||||
|
{
|
||||||
|
TestHelper.InMethod();
|
||||||
|
// log4net.Config.XmlConfigurator.Configure();
|
||||||
|
|
||||||
|
IConfigSource config = new IniConfigSource();
|
||||||
|
|
||||||
|
config.AddConfig("NPC");
|
||||||
|
config.Configs["NPC"].Set("Enabled", "true");
|
||||||
|
|
||||||
|
TestScene scene = SceneSetupHelpers.SetupScene();
|
||||||
|
SceneSetupHelpers.SetupSceneModules(scene, config, new NPCModule());
|
||||||
|
TestClient originalClient = SceneSetupHelpers.AddClient(scene, TestHelper.ParseTail(0x1));
|
||||||
|
// ScenePresence originalAvatar = scene.GetScenePresence(originalClient.AgentId);
|
||||||
|
|
||||||
|
Vector3 startPos = new Vector3(128, 128, 30);
|
||||||
|
INPCModule npcModule = scene.RequestModuleInterface<INPCModule>();
|
||||||
|
UUID npcId = npcModule.CreateNPC("John", "Smith", startPos, scene, originalClient.AgentId);
|
||||||
|
|
||||||
|
ScenePresence npc = scene.GetScenePresence(npcId);
|
||||||
|
Assert.That(npc.AbsolutePosition, Is.EqualTo(startPos));
|
||||||
|
|
||||||
|
// For now, we'll make the scene presence fly to simplify this test, but this needs to change.
|
||||||
|
npc.PhysicsActor.Flying = true;
|
||||||
|
|
||||||
|
scene.Update();
|
||||||
|
Assert.That(npc.AbsolutePosition, Is.EqualTo(startPos));
|
||||||
|
|
||||||
|
Vector3 targetPos = startPos + new Vector3(0, 0, 10);
|
||||||
|
npcModule.MoveToTarget(npc.UUID, scene, targetPos);
|
||||||
|
|
||||||
|
Assert.That(npc.AbsolutePosition, Is.EqualTo(startPos));
|
||||||
|
|
||||||
|
scene.Update();
|
||||||
|
|
||||||
|
// We should really check the exact figure.
|
||||||
|
Assert.That(npc.AbsolutePosition.X, Is.EqualTo(startPos.X));
|
||||||
|
Assert.That(npc.AbsolutePosition.Y, Is.EqualTo(startPos.Y));
|
||||||
|
Assert.That(npc.AbsolutePosition.Z, Is.GreaterThan(startPos.Z));
|
||||||
|
Assert.That(npc.AbsolutePosition.Z, Is.LessThan(targetPos.Z));
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++)
|
||||||
|
scene.Update();
|
||||||
|
|
||||||
|
double distanceToTarget = Util.GetDistanceTo(npc.AbsolutePosition, targetPos);
|
||||||
|
Assert.That(distanceToTarget, Is.LessThan(1), "NPC not within 1 unit of target position on first move");
|
||||||
|
Assert.That(npc.AbsolutePosition, Is.EqualTo(targetPos));
|
||||||
|
|
||||||
|
// Try a second movement
|
||||||
|
startPos = npc.AbsolutePosition;
|
||||||
|
targetPos = startPos + new Vector3(10, 0, 0);
|
||||||
|
npcModule.MoveToTarget(npc.UUID, scene, targetPos);
|
||||||
|
|
||||||
|
scene.Update();
|
||||||
|
|
||||||
|
// We should really check the exact figure.
|
||||||
|
Assert.That(npc.AbsolutePosition.X, Is.GreaterThan(startPos.X));
|
||||||
|
Assert.That(npc.AbsolutePosition.X, Is.LessThan(targetPos.X));
|
||||||
|
Assert.That(npc.AbsolutePosition.Y, Is.EqualTo(startPos.Y));
|
||||||
|
Assert.That(npc.AbsolutePosition.Z, Is.EqualTo(startPos.Z));
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++)
|
||||||
|
scene.Update();
|
||||||
|
|
||||||
|
distanceToTarget = Util.GetDistanceTo(npc.AbsolutePosition, targetPos);
|
||||||
|
Assert.That(distanceToTarget, Is.LessThan(1), "NPC not within 1 unit of target position on second move");
|
||||||
|
Assert.That(npc.AbsolutePosition, Is.EqualTo(targetPos));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -123,11 +123,15 @@ namespace OpenSim.Region.Physics.BasicPhysicsPlugin
|
||||||
actorPosition.X = ((int)Constants.RegionSize - 0.1f);
|
actorPosition.X = ((int)Constants.RegionSize - 0.1f);
|
||||||
}
|
}
|
||||||
|
|
||||||
float height = _heightMap[(int)actor.Position.Y * Constants.RegionSize + (int)actor.Position.X] + actor.Size.Z;
|
float terrainHeight = 0;
|
||||||
|
if (_heightMap != null)
|
||||||
|
terrainHeight = _heightMap[(int)actor.Position.Y * Constants.RegionSize + (int)actor.Position.X];
|
||||||
|
|
||||||
|
float height = terrainHeight + actor.Size.Z;
|
||||||
|
|
||||||
if (actor.Flying)
|
if (actor.Flying)
|
||||||
{
|
{
|
||||||
if (actor.Position.Z + (actor.Velocity.Z*timeStep) <
|
if (actor.Position.Z + (actor.Velocity.Z * timeStep) < terrainHeight + 2)
|
||||||
_heightMap[(int)actor.Position.Y * Constants.RegionSize + (int)actor.Position.X] + 2)
|
|
||||||
{
|
{
|
||||||
actorPosition.Z = height;
|
actorPosition.Z = height;
|
||||||
actorVelocity.Z = 0;
|
actorVelocity.Z = 0;
|
||||||
|
|
|
@ -86,6 +86,10 @@ namespace OpenSim.Region.Physics.Manager
|
||||||
|
|
||||||
public abstract void RemoveAvatar(PhysicsActor actor);
|
public abstract void RemoveAvatar(PhysicsActor actor);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Remove a prim from the physics scene.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="prim"></param>
|
||||||
public abstract void RemovePrim(PhysicsActor prim);
|
public abstract void RemovePrim(PhysicsActor prim);
|
||||||
|
|
||||||
public abstract PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position,
|
public abstract PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position,
|
||||||
|
|
|
@ -301,20 +301,22 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create a physics mesh from data that comes with the prim. The actual data used depends on the prim type.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="primName"></param>
|
||||||
|
/// <param name="primShape"></param>
|
||||||
|
/// <param name="size"></param>
|
||||||
|
/// <param name="lod"></param>
|
||||||
|
/// <returns></returns>
|
||||||
private Mesh CreateMeshFromPrimMesher(string primName, PrimitiveBaseShape primShape, Vector3 size, float lod)
|
private Mesh CreateMeshFromPrimMesher(string primName, PrimitiveBaseShape primShape, Vector3 size, float lod)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[MESH]: Creating physics proxy for {0}, shape {1}",
|
// "[MESH]: Creating physics proxy for {0}, shape {1}",
|
||||||
// primName, (OpenMetaverse.SculptType)primShape.SculptType);
|
// primName, (OpenMetaverse.SculptType)primShape.SculptType);
|
||||||
|
|
||||||
PrimMesh primMesh;
|
List<Coord> coords;
|
||||||
PrimMesher.SculptMesh sculptMesh;
|
List<Face> faces;
|
||||||
|
|
||||||
List<Coord> coords = new List<Coord>();
|
|
||||||
List<Face> faces = new List<Face>();
|
|
||||||
|
|
||||||
Image idata = null;
|
|
||||||
string decodedSculptFileName = "";
|
|
||||||
|
|
||||||
if (primShape.SculptEntry)
|
if (primShape.SculptEntry)
|
||||||
{
|
{
|
||||||
|
@ -323,14 +325,68 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
if (!useMeshiesPhysicsMesh)
|
if (!useMeshiesPhysicsMesh)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
if (!GenerateCoordsAndFacesFromPrimMeshData(primName, primShape, size, out coords, out faces))
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!GenerateCoordsAndFacesFromPrimSculptData(primName, primShape, size, lod, out coords, out faces))
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!GenerateCoordsAndFacesFromPrimShapeData(primName, primShape, size, out coords, out faces))
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove the reference to any JPEG2000 sculpt data so it can be GCed
|
||||||
|
primShape.SculptData = Utils.EmptyBytes;
|
||||||
|
|
||||||
|
int numCoords = coords.Count;
|
||||||
|
int numFaces = faces.Count;
|
||||||
|
|
||||||
|
// Create the list of vertices
|
||||||
|
List<Vertex> vertices = new List<Vertex>();
|
||||||
|
for (int i = 0; i < numCoords; i++)
|
||||||
|
{
|
||||||
|
Coord c = coords[i];
|
||||||
|
vertices.Add(new Vertex(c.X, c.Y, c.Z));
|
||||||
|
}
|
||||||
|
|
||||||
|
Mesh mesh = new Mesh();
|
||||||
|
// Add the corresponding triangles to the mesh
|
||||||
|
for (int i = 0; i < numFaces; i++)
|
||||||
|
{
|
||||||
|
Face f = faces[i];
|
||||||
|
mesh.Add(new Triangle(vertices[f.v1], vertices[f.v2], vertices[f.v3]));
|
||||||
|
}
|
||||||
|
|
||||||
|
return mesh;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Generate the co-ords and faces necessary to construct a mesh from the mesh data the accompanies a prim.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="primName"></param>
|
||||||
|
/// <param name="primShape"></param>
|
||||||
|
/// <param name="size"></param>
|
||||||
|
/// <param name="coords">Coords are added to this list by the method.</param>
|
||||||
|
/// <param name="faces">Faces are added to this list by the method.</param>
|
||||||
|
/// <returns>true if coords and faces were successfully generated, false if not</returns>
|
||||||
|
private bool GenerateCoordsAndFacesFromPrimMeshData(
|
||||||
|
string primName, PrimitiveBaseShape primShape, Vector3 size, out List<Coord> coords, out List<Face> faces)
|
||||||
|
{
|
||||||
m_log.DebugFormat("[MESH]: experimental mesh proxy generation for {0}", primName);
|
m_log.DebugFormat("[MESH]: experimental mesh proxy generation for {0}", primName);
|
||||||
|
|
||||||
|
coords = new List<Coord>();
|
||||||
|
faces = new List<Face>();
|
||||||
OSD meshOsd = null;
|
OSD meshOsd = null;
|
||||||
|
|
||||||
if (primShape.SculptData.Length <= 0)
|
if (primShape.SculptData.Length <= 0)
|
||||||
{
|
{
|
||||||
m_log.Error("[MESH]: asset data is zero length");
|
m_log.Error("[MESH]: asset data is zero length");
|
||||||
return null;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
long start = 0;
|
long start = 0;
|
||||||
|
@ -344,7 +400,7 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Warn("[Mesh}: unable to cast mesh asset to OSDMap");
|
m_log.Warn("[Mesh}: unable to cast mesh asset to OSDMap");
|
||||||
return null;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
@ -367,14 +423,14 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
if (physicsParms == null)
|
if (physicsParms == null)
|
||||||
{
|
{
|
||||||
m_log.Warn("[MESH]: no recognized physics mesh found in mesh asset");
|
m_log.Warn("[MESH]: no recognized physics mesh found in mesh asset");
|
||||||
return null;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int physOffset = physicsParms["offset"].AsInteger() + (int)start;
|
int physOffset = physicsParms["offset"].AsInteger() + (int)start;
|
||||||
int physSize = physicsParms["size"].AsInteger();
|
int physSize = physicsParms["size"].AsInteger();
|
||||||
|
|
||||||
if (physOffset < 0 || physSize == 0)
|
if (physOffset < 0 || physSize == 0)
|
||||||
return null; // no mesh data in asset
|
return false; // no mesh data in asset
|
||||||
|
|
||||||
OSD decodedMeshOsd = new OSD();
|
OSD decodedMeshOsd = new OSD();
|
||||||
byte[] meshBytes = new byte[physSize];
|
byte[] meshBytes = new byte[physSize];
|
||||||
|
@ -407,7 +463,7 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.Error("[MESH]: exception decoding physical mesh: " + e.ToString());
|
m_log.Error("[MESH]: exception decoding physical mesh: " + e.ToString());
|
||||||
return null;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
OSDArray decodedMeshOsdArray = null;
|
OSDArray decodedMeshOsdArray = null;
|
||||||
|
@ -425,9 +481,29 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
/// <summary>
|
||||||
|
/// Generate the co-ords and faces necessary to construct a mesh from the sculpt data the accompanies a prim.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="primName"></param>
|
||||||
|
/// <param name="primShape"></param>
|
||||||
|
/// <param name="size"></param>
|
||||||
|
/// <param name="lod"></param>
|
||||||
|
/// <param name="coords">Coords are added to this list by the method.</param>
|
||||||
|
/// <param name="faces">Faces are added to this list by the method.</param>
|
||||||
|
/// <returns>true if coords and faces were successfully generated, false if not</returns>
|
||||||
|
private bool GenerateCoordsAndFacesFromPrimSculptData(
|
||||||
|
string primName, PrimitiveBaseShape primShape, Vector3 size, float lod, out List<Coord> coords, out List<Face> faces)
|
||||||
{
|
{
|
||||||
|
coords = new List<Coord>();
|
||||||
|
faces = new List<Face>();
|
||||||
|
PrimMesher.SculptMesh sculptMesh;
|
||||||
|
Image idata = null;
|
||||||
|
string decodedSculptFileName = "";
|
||||||
|
|
||||||
if (cacheSculptMaps && primShape.SculptTexture != UUID.Zero)
|
if (cacheSculptMaps && primShape.SculptTexture != UUID.Zero)
|
||||||
{
|
{
|
||||||
decodedSculptFileName = System.IO.Path.Combine(decodedSculptMapPath, "smap_" + primShape.SculptTexture.ToString());
|
decodedSculptFileName = System.IO.Path.Combine(decodedSculptMapPath, "smap_" + primShape.SculptTexture.ToString());
|
||||||
|
@ -450,17 +526,27 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
if (idata == null)
|
if (idata == null)
|
||||||
{
|
{
|
||||||
if (primShape.SculptData == null || primShape.SculptData.Length == 0)
|
if (primShape.SculptData == null || primShape.SculptData.Length == 0)
|
||||||
return null;
|
return false;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
OpenMetaverse.Imaging.ManagedImage unusedData;
|
OpenMetaverse.Imaging.ManagedImage unusedData;
|
||||||
OpenMetaverse.Imaging.OpenJPEG.DecodeToImage(primShape.SculptData, out unusedData, out idata);
|
OpenMetaverse.Imaging.OpenJPEG.DecodeToImage(primShape.SculptData, out unusedData, out idata);
|
||||||
|
|
||||||
|
if (idata == null)
|
||||||
|
{
|
||||||
|
// In some cases it seems that the decode can return a null bitmap without throwing
|
||||||
|
// an exception
|
||||||
|
m_log.WarnFormat("[PHYSICS]: OpenJPEG decoded sculpt data for {0} to a null bitmap. Ignoring.", primName);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
unusedData = null;
|
unusedData = null;
|
||||||
|
|
||||||
//idata = CSJ2K.J2kImage.FromBytes(primShape.SculptData);
|
//idata = CSJ2K.J2kImage.FromBytes(primShape.SculptData);
|
||||||
|
|
||||||
if (cacheSculptMaps && idata != null)
|
if (cacheSculptMaps)
|
||||||
{
|
{
|
||||||
try { idata.Save(decodedSculptFileName, ImageFormat.MemoryBmp); }
|
try { idata.Save(decodedSculptFileName, ImageFormat.MemoryBmp); }
|
||||||
catch (Exception e) { m_log.Error("[SCULPT]: unable to cache sculpt map " + decodedSculptFileName + " " + e.Message); }
|
catch (Exception e) { m_log.Error("[SCULPT]: unable to cache sculpt map " + decodedSculptFileName + " " + e.Message); }
|
||||||
|
@ -469,17 +555,17 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
catch (DllNotFoundException)
|
catch (DllNotFoundException)
|
||||||
{
|
{
|
||||||
m_log.Error("[PHYSICS]: OpenJpeg is not installed correctly on this system. Physics Proxy generation failed. Often times this is because of an old version of GLIBC. You must have version 2.4 or above!");
|
m_log.Error("[PHYSICS]: OpenJpeg is not installed correctly on this system. Physics Proxy generation failed. Often times this is because of an old version of GLIBC. You must have version 2.4 or above!");
|
||||||
return null;
|
return false;
|
||||||
}
|
}
|
||||||
catch (IndexOutOfRangeException)
|
catch (IndexOutOfRangeException)
|
||||||
{
|
{
|
||||||
m_log.Error("[PHYSICS]: OpenJpeg was unable to decode this. Physics Proxy generation failed");
|
m_log.Error("[PHYSICS]: OpenJpeg was unable to decode this. Physics Proxy generation failed");
|
||||||
return null;
|
return false;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
m_log.Error("[PHYSICS]: Unable to generate a Sculpty physics proxy. Sculpty texture decode failed: " + ex.Message);
|
m_log.Error("[PHYSICS]: Unable to generate a Sculpty physics proxy. Sculpty texture decode failed: " + ex.Message);
|
||||||
return null;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -516,10 +602,26 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
|
|
||||||
coords = sculptMesh.coords;
|
coords = sculptMesh.coords;
|
||||||
faces = sculptMesh.faces;
|
faces = sculptMesh.faces;
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
/// <summary>
|
||||||
|
/// Generate the co-ords and faces necessary to construct a mesh from the shape data the accompanies a prim.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="primName"></param>
|
||||||
|
/// <param name="primShape"></param>
|
||||||
|
/// <param name="size"></param>
|
||||||
|
/// <param name="coords">Coords are added to this list by the method.</param>
|
||||||
|
/// <param name="faces">Faces are added to this list by the method.</param>
|
||||||
|
/// <returns>true if coords and faces were successfully generated, false if not</returns>
|
||||||
|
private bool GenerateCoordsAndFacesFromPrimShapeData(
|
||||||
|
string primName, PrimitiveBaseShape primShape, Vector3 size, out List<Coord> coords, out List<Face> faces)
|
||||||
{
|
{
|
||||||
|
PrimMesh primMesh;
|
||||||
|
coords = new List<Coord>();
|
||||||
|
faces = new List<Face>();
|
||||||
|
|
||||||
float pathShearX = primShape.PathShearX < 128 ? (float)primShape.PathShearX * 0.01f : (float)(primShape.PathShearX - 256) * 0.01f;
|
float pathShearX = primShape.PathShearX < 128 ? (float)primShape.PathShearX * 0.01f : (float)(primShape.PathShearX - 256) * 0.01f;
|
||||||
float pathShearY = primShape.PathShearY < 128 ? (float)primShape.PathShearY * 0.01f : (float)(primShape.PathShearY - 256) * 0.01f;
|
float pathShearY = primShape.PathShearY < 128 ? (float)primShape.PathShearY * 0.01f : (float)(primShape.PathShearY - 256) * 0.01f;
|
||||||
float pathBegin = (float)primShape.PathBegin * 2.0e-5f;
|
float pathBegin = (float)primShape.PathBegin * 2.0e-5f;
|
||||||
|
@ -588,7 +690,7 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
ReportPrimError("Extrusion failure: exception: " + ex.ToString(), primName, primMesh);
|
ReportPrimError("Extrusion failure: exception: " + ex.ToString(), primName, primMesh);
|
||||||
return null;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -619,7 +721,7 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
ReportPrimError("Extrusion failure: exception: " + ex.ToString(), primName, primMesh);
|
ReportPrimError("Extrusion failure: exception: " + ex.ToString(), primName, primMesh);
|
||||||
return null;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -629,31 +731,8 @@ namespace OpenSim.Region.Physics.Meshing
|
||||||
|
|
||||||
coords = primMesh.coords;
|
coords = primMesh.coords;
|
||||||
faces = primMesh.faces;
|
faces = primMesh.faces;
|
||||||
}
|
|
||||||
|
|
||||||
// Remove the reference to any JPEG2000 sculpt data so it can be GCed
|
return true;
|
||||||
primShape.SculptData = Utils.EmptyBytes;
|
|
||||||
|
|
||||||
int numCoords = coords.Count;
|
|
||||||
int numFaces = faces.Count;
|
|
||||||
|
|
||||||
// Create the list of vertices
|
|
||||||
List<Vertex> vertices = new List<Vertex>();
|
|
||||||
for (int i = 0; i < numCoords; i++)
|
|
||||||
{
|
|
||||||
Coord c = coords[i];
|
|
||||||
vertices.Add(new Vertex(c.X, c.Y, c.Z));
|
|
||||||
}
|
|
||||||
|
|
||||||
Mesh mesh = new Mesh();
|
|
||||||
// Add the corresponding triangles to the mesh
|
|
||||||
for (int i = 0; i < numFaces; i++)
|
|
||||||
{
|
|
||||||
Face f = faces[i];
|
|
||||||
mesh.Add(new Triangle(vertices[f.v1], vertices[f.v2], vertices[f.v3]));
|
|
||||||
}
|
|
||||||
|
|
||||||
return mesh;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod)
|
public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod)
|
||||||
|
|
|
@ -1220,18 +1220,23 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
{
|
{
|
||||||
m_requestedUpdateFrequency = ms;
|
m_requestedUpdateFrequency = ms;
|
||||||
m_eventsubscription = ms;
|
m_eventsubscription = ms;
|
||||||
_parent_scene.addCollisionEventReporting(this);
|
_parent_scene.AddCollisionEventReporting(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void UnSubscribeEvents()
|
public override void UnSubscribeEvents()
|
||||||
{
|
{
|
||||||
_parent_scene.remCollisionEventReporting(this);
|
_parent_scene.RemoveCollisionEventReporting(this);
|
||||||
m_requestedUpdateFrequency = 0;
|
m_requestedUpdateFrequency = 0;
|
||||||
m_eventsubscription = 0;
|
m_eventsubscription = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddCollisionEvent(uint CollidedWith, ContactPoint contact)
|
public void AddCollisionEvent(uint CollidedWith, ContactPoint contact)
|
||||||
{
|
{
|
||||||
if (m_eventsubscription > 0)
|
if (m_eventsubscription > 0)
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[PHYSICS]: Adding collision event for {0}, collidedWith {1}, contact {2}", "", CollidedWith, contact);
|
||||||
|
|
||||||
CollisionEventsThisFrame.addCollider(CollidedWith, contact);
|
CollisionEventsThisFrame.addCollider(CollidedWith, contact);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1248,6 +1253,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
m_eventsubscription = 0;
|
m_eventsubscription = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool SubscribedEvents()
|
public override bool SubscribedEvents()
|
||||||
{
|
{
|
||||||
if (m_eventsubscription > 0)
|
if (m_eventsubscription > 0)
|
||||||
|
|
|
@ -61,6 +61,22 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
|
private bool m_isphysical;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Is this prim subject to physics? Even if not, it's still solid for collision purposes.
|
||||||
|
/// </summary>
|
||||||
|
public override bool IsPhysical
|
||||||
|
{
|
||||||
|
get { return m_isphysical; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
m_isphysical = value;
|
||||||
|
if (!m_isphysical) // Zero the remembered last velocity
|
||||||
|
m_lastVelocity = Vector3.Zero;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private Vector3 _position;
|
private Vector3 _position;
|
||||||
private Vector3 _velocity;
|
private Vector3 _velocity;
|
||||||
private Vector3 _torque;
|
private Vector3 _torque;
|
||||||
|
@ -138,12 +154,15 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
private List<Vector3> m_forcelist = new List<Vector3>();
|
private List<Vector3> m_forcelist = new List<Vector3>();
|
||||||
private List<Vector3> m_angularforcelist = new List<Vector3>();
|
private List<Vector3> m_angularforcelist = new List<Vector3>();
|
||||||
|
|
||||||
private IMesh _mesh;
|
|
||||||
private PrimitiveBaseShape _pbs;
|
private PrimitiveBaseShape _pbs;
|
||||||
private OdeScene _parent_scene;
|
private OdeScene _parent_scene;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The physics space which contains prim geometries
|
||||||
|
/// </summary>
|
||||||
public IntPtr m_targetSpace = IntPtr.Zero;
|
public IntPtr m_targetSpace = IntPtr.Zero;
|
||||||
|
|
||||||
public IntPtr prim_geom;
|
public IntPtr prim_geom;
|
||||||
public IntPtr prev_geom;
|
|
||||||
public IntPtr _triMeshData;
|
public IntPtr _triMeshData;
|
||||||
|
|
||||||
private IntPtr _linkJointGroup = IntPtr.Zero;
|
private IntPtr _linkJointGroup = IntPtr.Zero;
|
||||||
|
@ -153,7 +172,6 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
private List<OdePrim> childrenPrim = new List<OdePrim>();
|
private List<OdePrim> childrenPrim = new List<OdePrim>();
|
||||||
|
|
||||||
private bool iscolliding;
|
private bool iscolliding;
|
||||||
private bool m_isphysical;
|
|
||||||
private bool m_isSelected;
|
private bool m_isSelected;
|
||||||
|
|
||||||
internal bool m_isVolumeDetect; // If true, this prim only detects collisions but doesn't collide actively
|
internal bool m_isVolumeDetect; // If true, this prim only detects collisions but doesn't collide actively
|
||||||
|
@ -188,7 +206,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
internal int m_material = (int)Material.Wood;
|
internal int m_material = (int)Material.Wood;
|
||||||
|
|
||||||
public OdePrim(String primName, OdeScene parent_scene, Vector3 pos, Vector3 size,
|
public OdePrim(String primName, OdeScene parent_scene, Vector3 pos, Vector3 size,
|
||||||
Quaternion rotation, IMesh mesh, PrimitiveBaseShape pbs, bool pisPhysical, CollisionLocker dode)
|
Quaternion rotation, PrimitiveBaseShape pbs, bool pisPhysical, CollisionLocker dode)
|
||||||
{
|
{
|
||||||
Name = primName;
|
Name = primName;
|
||||||
m_vehicle = new ODEDynamics();
|
m_vehicle = new ODEDynamics();
|
||||||
|
@ -208,9 +226,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
// m_tensor = parent_scene.bodyMotorJointMaxforceTensor;
|
// m_tensor = parent_scene.bodyMotorJointMaxforceTensor;
|
||||||
body_autodisable_frames = parent_scene.bodyFramesAutoDisable;
|
body_autodisable_frames = parent_scene.bodyFramesAutoDisable;
|
||||||
|
|
||||||
|
|
||||||
prim_geom = IntPtr.Zero;
|
prim_geom = IntPtr.Zero;
|
||||||
prev_geom = IntPtr.Zero;
|
|
||||||
|
|
||||||
if (!pos.IsFinite())
|
if (!pos.IsFinite())
|
||||||
{
|
{
|
||||||
|
@ -233,20 +249,21 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
_orientation = rotation;
|
_orientation = rotation;
|
||||||
m_taintrot = _orientation;
|
m_taintrot = _orientation;
|
||||||
_mesh = mesh;
|
|
||||||
_pbs = pbs;
|
_pbs = pbs;
|
||||||
|
|
||||||
_parent_scene = parent_scene;
|
_parent_scene = parent_scene;
|
||||||
m_targetSpace = (IntPtr)0;
|
m_targetSpace = (IntPtr)0;
|
||||||
|
|
||||||
if (pos.Z < 0)
|
if (pos.Z < 0)
|
||||||
m_isphysical = false;
|
{
|
||||||
|
IsPhysical = false;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_isphysical = pisPhysical;
|
IsPhysical = pisPhysical;
|
||||||
// If we're physical, we need to be in the master space for now.
|
// If we're physical, we need to be in the master space for now.
|
||||||
// linksets *should* be in a space together.. but are not currently
|
// linksets *should* be in a space together.. but are not currently
|
||||||
if (m_isphysical)
|
if (IsPhysical)
|
||||||
m_targetSpace = _parent_scene.space;
|
m_targetSpace = _parent_scene.space;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -289,7 +306,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
// through it while it's selected
|
// through it while it's selected
|
||||||
m_collisionscore = 0;
|
m_collisionscore = 0;
|
||||||
|
|
||||||
if ((m_isphysical && !_zeroFlag) || !value)
|
if ((IsPhysical && !_zeroFlag) || !value)
|
||||||
{
|
{
|
||||||
m_taintselected = value;
|
m_taintselected = value;
|
||||||
_parent_scene.AddPhysicsActorTaint(this);
|
_parent_scene.AddPhysicsActorTaint(this);
|
||||||
|
@ -305,15 +322,21 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Set a new geometry for this prim.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="geom"></param>
|
||||||
public void SetGeom(IntPtr geom)
|
public void SetGeom(IntPtr geom)
|
||||||
{
|
{
|
||||||
prev_geom = prim_geom;
|
|
||||||
prim_geom = geom;
|
prim_geom = geom;
|
||||||
//Console.WriteLine("SetGeom to " + prim_geom + " for " + Name);
|
//Console.WriteLine("SetGeom to " + prim_geom + " for " + Name);
|
||||||
if (prim_geom != IntPtr.Zero)
|
if (prim_geom != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
|
d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
|
||||||
d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
|
d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
|
||||||
|
|
||||||
|
_parent_scene.geom_name_map[prim_geom] = Name;
|
||||||
|
_parent_scene.actor_name_map[prim_geom] = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (childPrim)
|
if (childPrim)
|
||||||
|
@ -332,7 +355,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
{
|
{
|
||||||
if (!childPrim)
|
if (!childPrim)
|
||||||
{
|
{
|
||||||
if (m_isphysical && Body != IntPtr.Zero)
|
if (IsPhysical && Body != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
d.BodyEnable(Body);
|
d.BodyEnable(Body);
|
||||||
if (m_vehicle.Type != Vehicle.TYPE_NONE)
|
if (m_vehicle.Type != Vehicle.TYPE_NONE)
|
||||||
|
@ -347,12 +370,15 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
{
|
{
|
||||||
m_disabled = true;
|
m_disabled = true;
|
||||||
|
|
||||||
if (m_isphysical && Body != IntPtr.Zero)
|
if (IsPhysical && Body != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
d.BodyDisable(Body);
|
d.BodyDisable(Body);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Make a prim subject to physics.
|
||||||
|
/// </summary>
|
||||||
public void enableBody()
|
public void enableBody()
|
||||||
{
|
{
|
||||||
// Don't enable this body if we're a child prim
|
// Don't enable this body if we're a child prim
|
||||||
|
@ -728,6 +754,9 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Stop a prim from being subject to physics.
|
||||||
|
/// </summary>
|
||||||
public void disableBody()
|
public void disableBody()
|
||||||
{
|
{
|
||||||
//this kills the body so things like 'mesh' can re-create it.
|
//this kills the body so things like 'mesh' can re-create it.
|
||||||
|
@ -778,6 +807,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
Body = IntPtr.Zero;
|
Body = IntPtr.Zero;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_disabled = true;
|
m_disabled = true;
|
||||||
m_collisionscore = 0;
|
m_collisionscore = 0;
|
||||||
}
|
}
|
||||||
|
@ -886,7 +916,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_taintPhysics != m_isphysical && !(m_taintparent != _parent))
|
if (m_taintPhysics != IsPhysical && !(m_taintparent != _parent))
|
||||||
changePhysicsStatus(timestep);
|
changePhysicsStatus(timestep);
|
||||||
|
|
||||||
if (!_size.ApproxEquals(m_taintsize, 0f))
|
if (!_size.ApproxEquals(m_taintsize, 0f))
|
||||||
|
@ -968,7 +998,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
OdePrim obj = (OdePrim)m_taintparent;
|
OdePrim obj = (OdePrim)m_taintparent;
|
||||||
//obj.disableBody();
|
//obj.disableBody();
|
||||||
//Console.WriteLine("changelink calls ParentPrim");
|
//Console.WriteLine("changelink calls ParentPrim");
|
||||||
obj.ParentPrim(this);
|
obj.AddChildPrim(this);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if (obj.Body != (IntPtr)0 && Body != (IntPtr)0 && obj.Body != Body)
|
if (obj.Body != (IntPtr)0 && Body != (IntPtr)0 && obj.Body != Body)
|
||||||
|
@ -1005,14 +1035,16 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
_parent = m_taintparent;
|
_parent = m_taintparent;
|
||||||
m_taintPhysics = m_isphysical;
|
m_taintPhysics = IsPhysical;
|
||||||
}
|
}
|
||||||
|
|
||||||
// I'm the parent
|
/// <summary>
|
||||||
// prim is the child
|
/// Add a child prim to this parent prim.
|
||||||
public void ParentPrim(OdePrim prim)
|
/// </summary>
|
||||||
|
/// <param name="prim">Child prim</param>
|
||||||
|
public void AddChildPrim(OdePrim prim)
|
||||||
{
|
{
|
||||||
//Console.WriteLine("ParentPrim " + Name);
|
//Console.WriteLine("AddChildPrim " + Name);
|
||||||
if (this.m_localID != prim.m_localID)
|
if (this.m_localID != prim.m_localID)
|
||||||
{
|
{
|
||||||
if (Body == IntPtr.Zero)
|
if (Body == IntPtr.Zero)
|
||||||
|
@ -1035,7 +1067,6 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
d.MassSetZero(out m2);
|
d.MassSetZero(out m2);
|
||||||
d.MassSetBoxTotal(out m2, prim.CalculateMass(), prm._size.X, prm._size.Y, prm._size.Z);
|
d.MassSetBoxTotal(out m2, prim.CalculateMass(), prm._size.X, prm._size.Y, prm._size.Z);
|
||||||
|
|
||||||
|
|
||||||
d.Quaternion quat = new d.Quaternion();
|
d.Quaternion quat = new d.Quaternion();
|
||||||
quat.W = prm._orientation.W;
|
quat.W = prm._orientation.W;
|
||||||
quat.X = prm._orientation.X;
|
quat.X = prm._orientation.X;
|
||||||
|
@ -1105,6 +1136,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
prm.Body = Body;
|
prm.Body = Body;
|
||||||
_parent_scene.addActivePrim(prm);
|
_parent_scene.addActivePrim(prm);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_collisionCategories |= CollisionCategories.Body;
|
m_collisionCategories |= CollisionCategories.Body;
|
||||||
m_collisionFlags |= (CollisionCategories.Land | CollisionCategories.Wind);
|
m_collisionFlags |= (CollisionCategories.Land | CollisionCategories.Wind);
|
||||||
|
|
||||||
|
@ -1113,7 +1145,6 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
//Console.WriteLine(" Post GeomSetCategoryBits 2");
|
//Console.WriteLine(" Post GeomSetCategoryBits 2");
|
||||||
d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
|
d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
|
||||||
|
|
||||||
|
|
||||||
d.Quaternion quat2 = new d.Quaternion();
|
d.Quaternion quat2 = new d.Quaternion();
|
||||||
quat2.W = _orientation.W;
|
quat2.W = _orientation.W;
|
||||||
quat2.X = _orientation.X;
|
quat2.X = _orientation.X;
|
||||||
|
@ -1135,7 +1166,6 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
d.BodySetAutoDisableFlag(Body, true);
|
d.BodySetAutoDisableFlag(Body, true);
|
||||||
d.BodySetAutoDisableSteps(Body, body_autodisable_frames);
|
d.BodySetAutoDisableSteps(Body, body_autodisable_frames);
|
||||||
|
|
||||||
|
|
||||||
m_interpenetrationcount = 0;
|
m_interpenetrationcount = 0;
|
||||||
m_collisionscore = 0;
|
m_collisionscore = 0;
|
||||||
m_disabled = false;
|
m_disabled = false;
|
||||||
|
@ -1146,7 +1176,9 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
createAMotor(m_angularlock);
|
createAMotor(m_angularlock);
|
||||||
}
|
}
|
||||||
d.BodySetPosition(Body, Position.X, Position.Y, Position.Z);
|
d.BodySetPosition(Body, Position.X, Position.Y, Position.Z);
|
||||||
if (m_vehicle.Type != Vehicle.TYPE_NONE) m_vehicle.Enable(Body, _parent_scene);
|
if (m_vehicle.Type != Vehicle.TYPE_NONE)
|
||||||
|
m_vehicle.Enable(Body, _parent_scene);
|
||||||
|
|
||||||
_parent_scene.addActivePrim(this);
|
_parent_scene.addActivePrim(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1156,7 +1188,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
|
|
||||||
private void ChildSetGeom(OdePrim odePrim)
|
private void ChildSetGeom(OdePrim odePrim)
|
||||||
{
|
{
|
||||||
//if (m_isphysical && Body != IntPtr.Zero)
|
//if (IsPhysical && Body != IntPtr.Zero)
|
||||||
lock (childrenPrim)
|
lock (childrenPrim)
|
||||||
{
|
{
|
||||||
foreach (OdePrim prm in childrenPrim)
|
foreach (OdePrim prm in childrenPrim)
|
||||||
|
@ -1172,7 +1204,6 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
}
|
}
|
||||||
disableBody();
|
disableBody();
|
||||||
|
|
||||||
|
|
||||||
if (Body != IntPtr.Zero)
|
if (Body != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
_parent_scene.remActivePrim(this);
|
_parent_scene.remActivePrim(this);
|
||||||
|
@ -1183,10 +1214,9 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
foreach (OdePrim prm in childrenPrim)
|
foreach (OdePrim prm in childrenPrim)
|
||||||
{
|
{
|
||||||
//Console.WriteLine("ChildSetGeom calls ParentPrim");
|
//Console.WriteLine("ChildSetGeom calls ParentPrim");
|
||||||
ParentPrim(prm);
|
AddChildPrim(prm);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ChildDelink(OdePrim odePrim)
|
private void ChildDelink(OdePrim odePrim)
|
||||||
|
@ -1223,7 +1253,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
foreach (OdePrim prm in childrenPrim)
|
foreach (OdePrim prm in childrenPrim)
|
||||||
{
|
{
|
||||||
//Console.WriteLine("ChildDelink calls ParentPrim");
|
//Console.WriteLine("ChildDelink calls ParentPrim");
|
||||||
ParentPrim(prm);
|
AddChildPrim(prm);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1257,7 +1287,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
// first 50 again. then the last 50 are disabled. then the first 50, which were just woken
|
// first 50 again. then the last 50 are disabled. then the first 50, which were just woken
|
||||||
// up, start simulating again, which in turn wakes up the last 50.
|
// up, start simulating again, which in turn wakes up the last 50.
|
||||||
|
|
||||||
if (m_isphysical)
|
if (IsPhysical)
|
||||||
{
|
{
|
||||||
disableBodySoft();
|
disableBodySoft();
|
||||||
}
|
}
|
||||||
|
@ -1268,7 +1298,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
|
d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_isphysical)
|
if (IsPhysical)
|
||||||
{
|
{
|
||||||
disableBodySoft();
|
disableBodySoft();
|
||||||
}
|
}
|
||||||
|
@ -1277,7 +1307,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
{
|
{
|
||||||
m_collisionCategories = CollisionCategories.Geom;
|
m_collisionCategories = CollisionCategories.Geom;
|
||||||
|
|
||||||
if (m_isphysical)
|
if (IsPhysical)
|
||||||
m_collisionCategories |= CollisionCategories.Body;
|
m_collisionCategories |= CollisionCategories.Body;
|
||||||
|
|
||||||
m_collisionFlags = m_default_collisionFlags;
|
m_collisionFlags = m_default_collisionFlags;
|
||||||
|
@ -1292,7 +1322,8 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
|
d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
|
||||||
d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
|
d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
|
||||||
}
|
}
|
||||||
if (m_isphysical)
|
|
||||||
|
if (IsPhysical)
|
||||||
{
|
{
|
||||||
if (Body != IntPtr.Zero)
|
if (Body != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
|
@ -1311,7 +1342,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
{
|
{
|
||||||
m_taintposition = _position;
|
m_taintposition = _position;
|
||||||
m_taintrot = _orientation;
|
m_taintrot = _orientation;
|
||||||
m_taintPhysics = m_isphysical;
|
m_taintPhysics = IsPhysical;
|
||||||
m_taintselected = m_isSelected;
|
m_taintselected = m_isSelected;
|
||||||
m_taintsize = _size;
|
m_taintsize = _size;
|
||||||
m_taintshape = false;
|
m_taintshape = false;
|
||||||
|
@ -1320,14 +1351,19 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
m_taintVelocity = Vector3.Zero;
|
m_taintVelocity = Vector3.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CreateGeom(IntPtr m_targetSpace, IMesh _mesh)
|
/// <summary>
|
||||||
|
/// Create a geometry for the given mesh in the given target space.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="m_targetSpace"></param>
|
||||||
|
/// <param name="mesh">If null, then a mesh is used that is based on the profile shape data.</param>
|
||||||
|
public void CreateGeom(IntPtr m_targetSpace, IMesh mesh)
|
||||||
{
|
{
|
||||||
#if SPAM
|
#if SPAM
|
||||||
Console.WriteLine("CreateGeom:");
|
Console.WriteLine("CreateGeom:");
|
||||||
#endif
|
#endif
|
||||||
if (_mesh != null)
|
if (mesh != null)
|
||||||
{
|
{
|
||||||
setMesh(_parent_scene, _mesh);
|
setMesh(_parent_scene, mesh);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1400,6 +1436,39 @@ Console.WriteLine("CreateGeom:");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Remove the existing geom from this prim.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="m_targetSpace"></param>
|
||||||
|
/// <param name="mesh">If null, then a mesh is used that is based on the profile shape data.</param>
|
||||||
|
/// <returns>true if the geom was successfully removed, false if it was already gone or the remove failed.</returns>
|
||||||
|
public bool RemoveGeom()
|
||||||
|
{
|
||||||
|
if (prim_geom != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_parent_scene.geom_name_map.Remove(prim_geom);
|
||||||
|
_parent_scene.actor_name_map.Remove(prim_geom);
|
||||||
|
d.GeomDestroy(prim_geom);
|
||||||
|
prim_geom = IntPtr.Zero;
|
||||||
|
}
|
||||||
|
catch (System.AccessViolationException)
|
||||||
|
{
|
||||||
|
prim_geom = IntPtr.Zero;
|
||||||
|
m_log.ErrorFormat("[PHYSICS]: PrimGeom dead for {0}", Name);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void changeadd(float timestep)
|
public void changeadd(float timestep)
|
||||||
{
|
{
|
||||||
int[] iprimspaceArrItem = _parent_scene.calculateSpaceArrayItemFromPos(_position);
|
int[] iprimspaceArrItem = _parent_scene.calculateSpaceArrayItemFromPos(_position);
|
||||||
|
@ -1410,23 +1479,22 @@ Console.WriteLine("CreateGeom:");
|
||||||
|
|
||||||
m_targetSpace = targetspace;
|
m_targetSpace = targetspace;
|
||||||
|
|
||||||
if (_mesh == null)
|
IMesh mesh = null;
|
||||||
{
|
|
||||||
if (_parent_scene.needsMeshing(_pbs))
|
if (_parent_scene.needsMeshing(_pbs))
|
||||||
{
|
{
|
||||||
// Don't need to re-enable body.. it's done in SetMesh
|
// Don't need to re-enable body.. it's done in SetMesh
|
||||||
_mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical);
|
mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical);
|
||||||
// createmesh returns null when it's a shape that isn't a cube.
|
// createmesh returns null when it's a shape that isn't a cube.
|
||||||
// m_log.Debug(m_localID);
|
// m_log.Debug(m_localID);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
lock (_parent_scene.OdeLock)
|
lock (_parent_scene.OdeLock)
|
||||||
{
|
{
|
||||||
#if SPAM
|
#if SPAM
|
||||||
Console.WriteLine("changeadd 1");
|
Console.WriteLine("changeadd 1");
|
||||||
#endif
|
#endif
|
||||||
CreateGeom(m_targetSpace, _mesh);
|
CreateGeom(m_targetSpace, mesh);
|
||||||
|
|
||||||
if (prim_geom != IntPtr.Zero)
|
if (prim_geom != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
|
@ -1439,15 +1507,12 @@ Console.WriteLine("changeadd 1");
|
||||||
d.GeomSetQuaternion(prim_geom, ref myrot);
|
d.GeomSetQuaternion(prim_geom, ref myrot);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_isphysical && Body == IntPtr.Zero)
|
if (IsPhysical && Body == IntPtr.Zero)
|
||||||
{
|
{
|
||||||
enableBody();
|
enableBody();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_parent_scene.geom_name_map[prim_geom] = this.Name;
|
|
||||||
_parent_scene.actor_name_map[prim_geom] = (PhysicsActor)this;
|
|
||||||
|
|
||||||
changeSelectedStatus(timestep);
|
changeSelectedStatus(timestep);
|
||||||
|
|
||||||
m_taintadd = false;
|
m_taintadd = false;
|
||||||
|
@ -1455,9 +1520,8 @@ Console.WriteLine("changeadd 1");
|
||||||
|
|
||||||
public void changemove(float timestep)
|
public void changemove(float timestep)
|
||||||
{
|
{
|
||||||
if (m_isphysical)
|
if (IsPhysical)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!m_disabled && !m_taintremove && !childPrim)
|
if (!m_disabled && !m_taintremove && !childPrim)
|
||||||
{
|
{
|
||||||
if (Body == IntPtr.Zero)
|
if (Body == IntPtr.Zero)
|
||||||
|
@ -1789,7 +1853,7 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
{
|
{
|
||||||
// KF: If this is a root prim do BodySet
|
// KF: If this is a root prim do BodySet
|
||||||
d.BodySetQuaternion(Body, ref myrot);
|
d.BodySetQuaternion(Body, ref myrot);
|
||||||
if (m_isphysical)
|
if (IsPhysical)
|
||||||
{
|
{
|
||||||
if (!m_angularlock.ApproxEquals(Vector3.One, 0f))
|
if (!m_angularlock.ApproxEquals(Vector3.One, 0f))
|
||||||
createAMotor(m_angularlock);
|
createAMotor(m_angularlock);
|
||||||
|
@ -1826,7 +1890,7 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
|
|
||||||
public void changePhysicsStatus(float timestep)
|
public void changePhysicsStatus(float timestep)
|
||||||
{
|
{
|
||||||
if (m_isphysical == true)
|
if (IsPhysical)
|
||||||
{
|
{
|
||||||
if (Body == IntPtr.Zero)
|
if (Body == IntPtr.Zero)
|
||||||
{
|
{
|
||||||
|
@ -1846,25 +1910,12 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
{
|
{
|
||||||
if (_pbs.SculptEntry && _parent_scene.meshSculptedPrim)
|
if (_pbs.SculptEntry && _parent_scene.meshSculptedPrim)
|
||||||
{
|
{
|
||||||
|
RemoveGeom();
|
||||||
|
|
||||||
|
|
||||||
if (prim_geom != IntPtr.Zero)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
d.GeomDestroy(prim_geom);
|
|
||||||
prim_geom = IntPtr.Zero;
|
|
||||||
_mesh = null;
|
|
||||||
}
|
|
||||||
catch (System.AccessViolationException)
|
|
||||||
{
|
|
||||||
prim_geom = IntPtr.Zero;
|
|
||||||
m_log.ErrorFormat("[PHYSICS]: PrimGeom dead for {0}", Name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//Console.WriteLine("changePhysicsStatus for " + Name);
|
//Console.WriteLine("changePhysicsStatus for " + Name);
|
||||||
changeadd(2f);
|
changeadd(2f);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (childPrim)
|
if (childPrim)
|
||||||
{
|
{
|
||||||
if (_parent != null)
|
if (_parent != null)
|
||||||
|
@ -1883,7 +1934,7 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
changeSelectedStatus(timestep);
|
changeSelectedStatus(timestep);
|
||||||
|
|
||||||
resetCollisionAccounting();
|
resetCollisionAccounting();
|
||||||
m_taintPhysics = m_isphysical;
|
m_taintPhysics = IsPhysical;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changesize(float timestamp)
|
public void changesize(float timestamp)
|
||||||
|
@ -1892,18 +1943,10 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
m_log.DebugFormat("[ODE PRIM]: Called changesize");
|
m_log.DebugFormat("[ODE PRIM]: Called changesize");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
string oldname = _parent_scene.geom_name_map[prim_geom];
|
|
||||||
|
|
||||||
if (_size.X <= 0) _size.X = 0.01f;
|
if (_size.X <= 0) _size.X = 0.01f;
|
||||||
if (_size.Y <= 0) _size.Y = 0.01f;
|
if (_size.Y <= 0) _size.Y = 0.01f;
|
||||||
if (_size.Z <= 0) _size.Z = 0.01f;
|
if (_size.Z <= 0) _size.Z = 0.01f;
|
||||||
|
|
||||||
// Cleanup of old prim geometry
|
|
||||||
if (_mesh != null)
|
|
||||||
{
|
|
||||||
// TODO: Cleanup meshing here
|
|
||||||
}
|
|
||||||
|
|
||||||
//kill body to rebuild
|
//kill body to rebuild
|
||||||
if (IsPhysical && Body != IntPtr.Zero)
|
if (IsPhysical && Body != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
|
@ -1927,10 +1970,12 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
d.SpaceRemove(m_targetSpace, prim_geom);
|
d.SpaceRemove(m_targetSpace, prim_geom);
|
||||||
}
|
}
|
||||||
|
|
||||||
d.GeomDestroy(prim_geom);
|
RemoveGeom();
|
||||||
prim_geom = IntPtr.Zero;
|
|
||||||
// we don't need to do space calculation because the client sends a position update also.
|
// we don't need to do space calculation because the client sends a position update also.
|
||||||
|
|
||||||
|
IMesh mesh = null;
|
||||||
|
|
||||||
// Construction of new prim
|
// Construction of new prim
|
||||||
if (_parent_scene.needsMeshing(_pbs))
|
if (_parent_scene.needsMeshing(_pbs))
|
||||||
{
|
{
|
||||||
|
@ -1940,27 +1985,11 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
meshlod = _parent_scene.MeshSculptphysicalLOD;
|
meshlod = _parent_scene.MeshSculptphysicalLOD;
|
||||||
// Don't need to re-enable body.. it's done in SetMesh
|
// Don't need to re-enable body.. it's done in SetMesh
|
||||||
|
|
||||||
IMesh mesh = null;
|
|
||||||
|
|
||||||
if (_parent_scene.needsMeshing(_pbs))
|
if (_parent_scene.needsMeshing(_pbs))
|
||||||
mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical);
|
mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, meshlod, IsPhysical);
|
||||||
|
}
|
||||||
|
|
||||||
#if SPAM
|
|
||||||
Console.WriteLine("changesize 1");
|
|
||||||
#endif
|
|
||||||
CreateGeom(m_targetSpace, mesh);
|
CreateGeom(m_targetSpace, mesh);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_mesh = null;
|
|
||||||
|
|
||||||
#if SPAM
|
|
||||||
Console.WriteLine("changesize 2");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
CreateGeom(m_targetSpace, _mesh);
|
|
||||||
}
|
|
||||||
|
|
||||||
d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
|
d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
|
||||||
d.Quaternion myrot = new d.Quaternion();
|
d.Quaternion myrot = new d.Quaternion();
|
||||||
myrot.X = _orientation.X;
|
myrot.X = _orientation.X;
|
||||||
|
@ -1978,8 +2007,6 @@ Console.WriteLine("changesize 2");
|
||||||
d.BodyEnable(Body);
|
d.BodyEnable(Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
_parent_scene.geom_name_map[prim_geom] = oldname;
|
|
||||||
|
|
||||||
changeSelectedStatus(timestamp);
|
changeSelectedStatus(timestamp);
|
||||||
if (childPrim)
|
if (childPrim)
|
||||||
{
|
{
|
||||||
|
@ -2013,8 +2040,6 @@ Console.WriteLine("changesize 2");
|
||||||
|
|
||||||
public void changeshape(float timestamp)
|
public void changeshape(float timestamp)
|
||||||
{
|
{
|
||||||
string oldname = _parent_scene.geom_name_map[prim_geom];
|
|
||||||
|
|
||||||
// Cleanup of old prim geometry and Bodies
|
// Cleanup of old prim geometry and Bodies
|
||||||
if (IsPhysical && Body != IntPtr.Zero)
|
if (IsPhysical && Body != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
|
@ -2031,23 +2056,17 @@ Console.WriteLine("changesize 2");
|
||||||
disableBody();
|
disableBody();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
try
|
|
||||||
{
|
|
||||||
d.GeomDestroy(prim_geom);
|
|
||||||
}
|
|
||||||
catch (System.AccessViolationException)
|
|
||||||
{
|
|
||||||
prim_geom = IntPtr.Zero;
|
|
||||||
m_log.ErrorFormat("[PHYSICS]: PrimGeom dead for {0}", Name);
|
|
||||||
}
|
|
||||||
|
|
||||||
prim_geom = IntPtr.Zero;
|
RemoveGeom();
|
||||||
|
|
||||||
// we don't need to do space calculation because the client sends a position update also.
|
// we don't need to do space calculation because the client sends a position update also.
|
||||||
if (_size.X <= 0) _size.X = 0.01f;
|
if (_size.X <= 0) _size.X = 0.01f;
|
||||||
if (_size.Y <= 0) _size.Y = 0.01f;
|
if (_size.Y <= 0) _size.Y = 0.01f;
|
||||||
if (_size.Z <= 0) _size.Z = 0.01f;
|
if (_size.Z <= 0) _size.Z = 0.01f;
|
||||||
// Construction of new prim
|
// Construction of new prim
|
||||||
|
|
||||||
|
IMesh mesh = null;
|
||||||
|
|
||||||
if (_parent_scene.needsMeshing(_pbs))
|
if (_parent_scene.needsMeshing(_pbs))
|
||||||
{
|
{
|
||||||
// Don't need to re-enable body.. it's done in CreateMesh
|
// Don't need to re-enable body.. it's done in CreateMesh
|
||||||
|
@ -2057,22 +2076,10 @@ Console.WriteLine("changesize 2");
|
||||||
meshlod = _parent_scene.MeshSculptphysicalLOD;
|
meshlod = _parent_scene.MeshSculptphysicalLOD;
|
||||||
|
|
||||||
// createmesh returns null when it doesn't mesh.
|
// createmesh returns null when it doesn't mesh.
|
||||||
IMesh mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical);
|
mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, meshlod, IsPhysical);
|
||||||
#if SPAM
|
}
|
||||||
Console.WriteLine("changeshape needed meshing");
|
|
||||||
#endif
|
|
||||||
CreateGeom(m_targetSpace, mesh);
|
CreateGeom(m_targetSpace, mesh);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_mesh = null;
|
|
||||||
|
|
||||||
#if SPAM
|
|
||||||
Console.WriteLine("changeshape not need meshing");
|
|
||||||
#endif
|
|
||||||
CreateGeom(m_targetSpace, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
|
d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
|
||||||
d.Quaternion myrot = new d.Quaternion();
|
d.Quaternion myrot = new d.Quaternion();
|
||||||
//myrot.W = _orientation.w;
|
//myrot.W = _orientation.w;
|
||||||
|
@ -2093,7 +2100,6 @@ Console.WriteLine("changeshape not need meshing");
|
||||||
d.BodyEnable(Body);
|
d.BodyEnable(Body);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_parent_scene.geom_name_map[prim_geom] = oldname;
|
|
||||||
|
|
||||||
changeSelectedStatus(timestamp);
|
changeSelectedStatus(timestamp);
|
||||||
if (childPrim)
|
if (childPrim)
|
||||||
|
@ -2216,16 +2222,6 @@ Console.WriteLine("changeshape not need meshing");
|
||||||
m_taintVelocity = Vector3.Zero;
|
m_taintVelocity = Vector3.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool IsPhysical
|
|
||||||
{
|
|
||||||
get { return m_isphysical; }
|
|
||||||
set {
|
|
||||||
m_isphysical = value;
|
|
||||||
if (!m_isphysical) // Zero the remembered last velocity
|
|
||||||
m_lastVelocity = Vector3.Zero;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPrimForRemoval()
|
public void setPrimForRemoval()
|
||||||
{
|
{
|
||||||
m_taintremove = true;
|
m_taintremove = true;
|
||||||
|
@ -2404,7 +2400,7 @@ Console.WriteLine("changeshape not need meshing");
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (!m_isphysical || Body == IntPtr.Zero)
|
if (!IsPhysical || Body == IntPtr.Zero)
|
||||||
return Vector3.Zero;
|
return Vector3.Zero;
|
||||||
|
|
||||||
return _torque;
|
return _torque;
|
||||||
|
@ -2986,12 +2982,12 @@ Console.WriteLine("changeshape not need meshing");
|
||||||
public override void SubscribeEvents(int ms)
|
public override void SubscribeEvents(int ms)
|
||||||
{
|
{
|
||||||
m_eventsubscription = ms;
|
m_eventsubscription = ms;
|
||||||
_parent_scene.addCollisionEventReporting(this);
|
_parent_scene.AddCollisionEventReporting(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void UnSubscribeEvents()
|
public override void UnSubscribeEvents()
|
||||||
{
|
{
|
||||||
_parent_scene.remCollisionEventReporting(this);
|
_parent_scene.RemoveCollisionEventReporting(this);
|
||||||
m_eventsubscription = 0;
|
m_eventsubscription = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2999,6 +2995,7 @@ Console.WriteLine("changeshape not need meshing");
|
||||||
{
|
{
|
||||||
if (CollisionEventsThisFrame == null)
|
if (CollisionEventsThisFrame == null)
|
||||||
CollisionEventsThisFrame = new CollisionEventUpdate();
|
CollisionEventsThisFrame = new CollisionEventUpdate();
|
||||||
|
|
||||||
CollisionEventsThisFrame.addCollider(CollidedWith, contact);
|
CollisionEventsThisFrame.addCollider(CollidedWith, contact);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -100,7 +100,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
Rubber = 6
|
Rubber = 6
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class OdeScene : PhysicsScene
|
public class OdeScene : PhysicsScene
|
||||||
{
|
{
|
||||||
private readonly ILog m_log;
|
private readonly ILog m_log;
|
||||||
// private Dictionary<string, sCollisionData> m_storedCollisions = new Dictionary<string, sCollisionData>();
|
// private Dictionary<string, sCollisionData> m_storedCollisions = new Dictionary<string, sCollisionData>();
|
||||||
|
@ -198,7 +198,12 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
private readonly List<OdePrim> _taintedPrimL = new List<OdePrim>();
|
private readonly List<OdePrim> _taintedPrimL = new List<OdePrim>();
|
||||||
private readonly HashSet<OdeCharacter> _taintedActors = new HashSet<OdeCharacter>();
|
private readonly HashSet<OdeCharacter> _taintedActors = new HashSet<OdeCharacter>();
|
||||||
private readonly List<d.ContactGeom> _perloopContact = new List<d.ContactGeom>();
|
private readonly List<d.ContactGeom> _perloopContact = new List<d.ContactGeom>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A list of actors that should receive collision events.
|
||||||
|
/// </summary>
|
||||||
private readonly List<PhysicsActor> _collisionEventPrim = new List<PhysicsActor>();
|
private readonly List<PhysicsActor> _collisionEventPrim = new List<PhysicsActor>();
|
||||||
|
|
||||||
private readonly HashSet<OdeCharacter> _badCharacter = new HashSet<OdeCharacter>();
|
private readonly HashSet<OdeCharacter> _badCharacter = new HashSet<OdeCharacter>();
|
||||||
public Dictionary<IntPtr, String> geom_name_map = new Dictionary<IntPtr, String>();
|
public Dictionary<IntPtr, String> geom_name_map = new Dictionary<IntPtr, String>();
|
||||||
public Dictionary<IntPtr, PhysicsActor> actor_name_map = new Dictionary<IntPtr, PhysicsActor>();
|
public Dictionary<IntPtr, PhysicsActor> actor_name_map = new Dictionary<IntPtr, PhysicsActor>();
|
||||||
|
@ -300,7 +305,6 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
world = d.WorldCreate();
|
world = d.WorldCreate();
|
||||||
space = d.HashSpaceCreate(IntPtr.Zero);
|
space = d.HashSpaceCreate(IntPtr.Zero);
|
||||||
|
|
||||||
|
|
||||||
contactgroup = d.JointGroupCreate(0);
|
contactgroup = d.JointGroupCreate(0);
|
||||||
//contactgroup
|
//contactgroup
|
||||||
|
|
||||||
|
@ -953,7 +957,6 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (p1.PhysicsActorType == (int) ActorTypes.Agent)
|
if (p1.PhysicsActorType == (int) ActorTypes.Agent)
|
||||||
{
|
{
|
||||||
if (p1 is OdeCharacter)
|
if (p1 is OdeCharacter)
|
||||||
|
@ -1053,9 +1056,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
{
|
{
|
||||||
joint = d.JointCreateContact(world, contactgroup, ref m_materialContacts[material, movintYN]);
|
joint = d.JointCreateContact(world, contactgroup, ref m_materialContacts[material, movintYN]);
|
||||||
m_global_contactcount++;
|
m_global_contactcount++;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1078,7 +1079,6 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
{
|
{
|
||||||
joint = d.JointCreateContact(world, contactgroup, ref m_materialContacts[material, movintYN]);
|
joint = d.JointCreateContact(world, contactgroup, ref m_materialContacts[material, movintYN]);
|
||||||
m_global_contactcount++;
|
m_global_contactcount++;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1290,6 +1290,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
//returncollisions = true;
|
//returncollisions = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ActorTypes.Prim:
|
case ActorTypes.Prim:
|
||||||
if (p1 is OdePrim)
|
if (p1 is OdePrim)
|
||||||
{
|
{
|
||||||
|
@ -1317,6 +1318,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
cc2.AddCollisionEvent(obj2LocalID, contact);
|
cc2.AddCollisionEvent(obj2LocalID, contact);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ActorTypes.Prim:
|
case ActorTypes.Prim:
|
||||||
|
|
||||||
if (p2 is OdePrim)
|
if (p2 is OdePrim)
|
||||||
|
@ -1421,18 +1423,18 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
public int TriCallback(IntPtr trimesh, IntPtr refObject, int triangleIndex)
|
public int TriCallback(IntPtr trimesh, IntPtr refObject, int triangleIndex)
|
||||||
{
|
{
|
||||||
String name1 = null;
|
// String name1 = null;
|
||||||
String name2 = null;
|
// String name2 = null;
|
||||||
|
//
|
||||||
if (!geom_name_map.TryGetValue(trimesh, out name1))
|
// if (!geom_name_map.TryGetValue(trimesh, out name1))
|
||||||
{
|
// {
|
||||||
name1 = "null";
|
// name1 = "null";
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if (!geom_name_map.TryGetValue(refObject, out name2))
|
// if (!geom_name_map.TryGetValue(refObject, out name2))
|
||||||
{
|
// {
|
||||||
name2 = "null";
|
// name2 = "null";
|
||||||
}
|
// }
|
||||||
|
|
||||||
// m_log.InfoFormat("TriCallback: A collision was detected between {1} and {2}. Index was {3}", 0, name1, name2, triangleIndex);
|
// m_log.InfoFormat("TriCallback: A collision was detected between {1} and {2}. Index was {3}", 0, name1, name2, triangleIndex);
|
||||||
|
|
||||||
|
@ -1604,7 +1606,11 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
}
|
}
|
||||||
// End recovered. Kitto Flora
|
// End recovered. Kitto Flora
|
||||||
|
|
||||||
public void addCollisionEventReporting(PhysicsActor obj)
|
/// <summary>
|
||||||
|
/// Add actor to the list that should receive collision events in the simulate loop.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj"></param>
|
||||||
|
public void AddCollisionEventReporting(PhysicsActor obj)
|
||||||
{
|
{
|
||||||
lock (_collisionEventPrim)
|
lock (_collisionEventPrim)
|
||||||
{
|
{
|
||||||
|
@ -1613,7 +1619,11 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void remCollisionEventReporting(PhysicsActor obj)
|
/// <summary>
|
||||||
|
/// Remove actor from the list that should receive collision events in the simulate loop.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj"></param>
|
||||||
|
public void RemoveCollisionEventReporting(PhysicsActor obj)
|
||||||
{
|
{
|
||||||
lock (_collisionEventPrim)
|
lock (_collisionEventPrim)
|
||||||
{
|
{
|
||||||
|
@ -1677,7 +1687,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
}
|
}
|
||||||
|
|
||||||
private PhysicsActor AddPrim(String name, Vector3 position, Vector3 size, Quaternion rotation,
|
private PhysicsActor AddPrim(String name, Vector3 position, Vector3 size, Quaternion rotation,
|
||||||
IMesh mesh, PrimitiveBaseShape pbs, bool isphysical, uint localID)
|
PrimitiveBaseShape pbs, bool isphysical, uint localID)
|
||||||
{
|
{
|
||||||
Vector3 pos = position;
|
Vector3 pos = position;
|
||||||
Vector3 siz = size;
|
Vector3 siz = size;
|
||||||
|
@ -1686,7 +1696,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
OdePrim newPrim;
|
OdePrim newPrim;
|
||||||
lock (OdeLock)
|
lock (OdeLock)
|
||||||
{
|
{
|
||||||
newPrim = new OdePrim(name, this, pos, siz, rot, mesh, pbs, isphysical, ode);
|
newPrim = new OdePrim(name, this, pos, siz, rot, pbs, isphysical, ode);
|
||||||
|
|
||||||
lock (_prims)
|
lock (_prims)
|
||||||
_prims.Add(newPrim);
|
_prims.Add(newPrim);
|
||||||
|
@ -1714,28 +1724,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
m_log.DebugFormat("[PHYSICS]: Adding physics actor to {0}", primName);
|
m_log.DebugFormat("[PHYSICS]: Adding physics actor to {0}", primName);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
PhysicsActor result;
|
return AddPrim(primName, position, size, rotation, pbs, isPhysical, localid);
|
||||||
IMesh mesh = null;
|
|
||||||
|
|
||||||
// Don't create the mesh here - wait until the mesh data is loaded from the asset store.
|
|
||||||
// if (needsMeshing(pbs))
|
|
||||||
// {
|
|
||||||
// try
|
|
||||||
// {
|
|
||||||
// mesh = mesher.CreateMesh(primName, pbs, size, 32f, isPhysical);
|
|
||||||
// }
|
|
||||||
// catch(Exception e)
|
|
||||||
// {
|
|
||||||
// m_log.ErrorFormat("[PHYSICS]: Exception while meshing prim {0}.", primName);
|
|
||||||
// m_log.Debug(e.ToString());
|
|
||||||
// mesh = null;
|
|
||||||
// return null;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
result = AddPrim(primName, position, size, rotation, mesh, pbs, isPhysical, localid);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override float TimeDilation
|
public override float TimeDilation
|
||||||
|
@ -2105,6 +2094,8 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
public override void RemovePrim(PhysicsActor prim)
|
public override void RemovePrim(PhysicsActor prim)
|
||||||
{
|
{
|
||||||
|
// As with all ODE physics operations, we don't remove the prim immediately but signal that it should be
|
||||||
|
// removed in the next physics simulate pass.
|
||||||
if (prim is OdePrim)
|
if (prim is OdePrim)
|
||||||
{
|
{
|
||||||
lock (OdeLock)
|
lock (OdeLock)
|
||||||
|
@ -2121,6 +2112,9 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This is called from within simulate but outside the locked portion
|
/// This is called from within simulate but outside the locked portion
|
||||||
/// We need to do our own locking here
|
/// We need to do our own locking here
|
||||||
|
/// (Note: As of 20110801 this no longer appears to be true - this is being called within lock (odeLock) in
|
||||||
|
/// Simulate() -- justincc).
|
||||||
|
///
|
||||||
/// Essentially, we need to remove the prim from our space segment, whatever segment it's in.
|
/// Essentially, we need to remove the prim from our space segment, whatever segment it's in.
|
||||||
///
|
///
|
||||||
/// If there are no more prim in the segment, we need to empty (spacedestroy)the segment and reclaim memory
|
/// If there are no more prim in the segment, we need to empty (spacedestroy)the segment and reclaim memory
|
||||||
|
@ -2132,7 +2126,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
//Console.WriteLine("RemovePrimThreadLocked " + prim.m_primName);
|
//Console.WriteLine("RemovePrimThreadLocked " + prim.m_primName);
|
||||||
lock (prim)
|
lock (prim)
|
||||||
{
|
{
|
||||||
remCollisionEventReporting(prim);
|
RemoveCollisionEventReporting(prim);
|
||||||
lock (ode)
|
lock (ode)
|
||||||
{
|
{
|
||||||
if (prim.prim_geom != IntPtr.Zero)
|
if (prim.prim_geom != IntPtr.Zero)
|
||||||
|
@ -2177,22 +2171,10 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
//}
|
//}
|
||||||
//}
|
//}
|
||||||
//m_log.Warn(prim.prim_geom);
|
//m_log.Warn(prim.prim_geom);
|
||||||
try
|
|
||||||
{
|
if (!prim.RemoveGeom())
|
||||||
if (prim.prim_geom != IntPtr.Zero)
|
|
||||||
{
|
|
||||||
d.GeomDestroy(prim.prim_geom);
|
|
||||||
prim.prim_geom = IntPtr.Zero;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_log.Warn("[PHYSICS]: Unable to remove prim from physics scene");
|
m_log.Warn("[PHYSICS]: Unable to remove prim from physics scene");
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (AccessViolationException)
|
|
||||||
{
|
|
||||||
m_log.Info("[PHYSICS]: Couldn't remove prim from physics scene, it was already be removed.");
|
|
||||||
}
|
|
||||||
lock (_prims)
|
lock (_prims)
|
||||||
_prims.Remove(prim);
|
_prims.Remove(prim);
|
||||||
|
|
||||||
|
@ -2687,6 +2669,7 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
|
||||||
//if (!ode.lockquery())
|
//if (!ode.lockquery())
|
||||||
//{
|
//{
|
||||||
// ode.dlock(world);
|
// ode.dlock(world);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Insert, remove Characters
|
// Insert, remove Characters
|
||||||
|
@ -2718,14 +2701,15 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
|
||||||
{
|
{
|
||||||
if (prim.m_taintremove)
|
if (prim.m_taintremove)
|
||||||
{
|
{
|
||||||
//Console.WriteLine("Simulate calls RemovePrimThreadLocked");
|
// Console.WriteLine("Simulate calls RemovePrimThreadLocked for {0}", prim.Name);
|
||||||
RemovePrimThreadLocked(prim);
|
RemovePrimThreadLocked(prim);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//Console.WriteLine("Simulate calls ProcessTaints");
|
// Console.WriteLine("Simulate calls ProcessTaints for {0}", prim.Name);
|
||||||
prim.ProcessTaints(timeStep);
|
prim.ProcessTaints(timeStep);
|
||||||
}
|
}
|
||||||
|
|
||||||
processedtaints = true;
|
processedtaints = true;
|
||||||
prim.m_collisionscore = 0;
|
prim.m_collisionscore = 0;
|
||||||
|
|
||||||
|
@ -2737,6 +2721,199 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SupportsNINJAJoints)
|
if (SupportsNINJAJoints)
|
||||||
|
SimulatePendingNINJAJoints();
|
||||||
|
|
||||||
|
if (processedtaints)
|
||||||
|
{
|
||||||
|
//Console.WriteLine("Simulate calls Clear of _taintedPrim list");
|
||||||
|
_taintedPrimH.Clear();
|
||||||
|
_taintedPrimL.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Move characters
|
||||||
|
lock (_characters)
|
||||||
|
{
|
||||||
|
List<OdeCharacter> defects = new List<OdeCharacter>();
|
||||||
|
foreach (OdeCharacter actor in _characters)
|
||||||
|
{
|
||||||
|
if (actor != null)
|
||||||
|
actor.Move(timeStep, defects);
|
||||||
|
}
|
||||||
|
if (0 != defects.Count)
|
||||||
|
{
|
||||||
|
foreach (OdeCharacter defect in defects)
|
||||||
|
{
|
||||||
|
RemoveCharacter(defect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Move other active objects
|
||||||
|
lock (_activeprims)
|
||||||
|
{
|
||||||
|
foreach (OdePrim prim in _activeprims)
|
||||||
|
{
|
||||||
|
prim.m_collisionscore = 0;
|
||||||
|
prim.Move(timeStep);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//if ((framecount % m_randomizeWater) == 0)
|
||||||
|
// randomizeWater(waterlevel);
|
||||||
|
|
||||||
|
//int RayCastTimeMS = m_rayCastManager.ProcessQueuedRequests();
|
||||||
|
m_rayCastManager.ProcessQueuedRequests();
|
||||||
|
|
||||||
|
collision_optimized(timeStep);
|
||||||
|
|
||||||
|
lock (_collisionEventPrim)
|
||||||
|
{
|
||||||
|
foreach (PhysicsActor obj in _collisionEventPrim)
|
||||||
|
{
|
||||||
|
if (obj == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// m_log.DebugFormat("[PHYSICS]: Assessing {0} for collision events", obj.SOPName);
|
||||||
|
|
||||||
|
switch ((ActorTypes)obj.PhysicsActorType)
|
||||||
|
{
|
||||||
|
case ActorTypes.Agent:
|
||||||
|
OdeCharacter cobj = (OdeCharacter)obj;
|
||||||
|
cobj.AddCollisionFrameTime(100);
|
||||||
|
cobj.SendCollisions();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ActorTypes.Prim:
|
||||||
|
OdePrim pobj = (OdePrim)obj;
|
||||||
|
pobj.SendCollisions();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//if (m_global_contactcount > 5)
|
||||||
|
//{
|
||||||
|
// m_log.DebugFormat("[PHYSICS]: Contacts:{0}", m_global_contactcount);
|
||||||
|
//}
|
||||||
|
|
||||||
|
m_global_contactcount = 0;
|
||||||
|
|
||||||
|
d.WorldQuickStep(world, ODE_STEPSIZE);
|
||||||
|
d.JointGroupEmpty(contactgroup);
|
||||||
|
//ode.dunlock(world);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat("[PHYSICS]: {0}, {1}, {2}", e.Message, e.TargetSite, e);
|
||||||
|
ode.dunlock(world);
|
||||||
|
}
|
||||||
|
|
||||||
|
step_time -= ODE_STEPSIZE;
|
||||||
|
i++;
|
||||||
|
//}
|
||||||
|
//else
|
||||||
|
//{
|
||||||
|
//fps = 0;
|
||||||
|
//}
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
|
lock (_characters)
|
||||||
|
{
|
||||||
|
foreach (OdeCharacter actor in _characters)
|
||||||
|
{
|
||||||
|
if (actor != null)
|
||||||
|
{
|
||||||
|
if (actor.bad)
|
||||||
|
m_log.WarnFormat("[PHYSICS]: BAD Actor {0} in _characters list was not removed?", actor.m_uuid);
|
||||||
|
|
||||||
|
actor.UpdatePositionAndVelocity();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lock (_badCharacter)
|
||||||
|
{
|
||||||
|
if (_badCharacter.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (OdeCharacter chr in _badCharacter)
|
||||||
|
{
|
||||||
|
RemoveCharacter(chr);
|
||||||
|
}
|
||||||
|
|
||||||
|
_badCharacter.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lock (_activeprims)
|
||||||
|
{
|
||||||
|
//if (timeStep < 0.2f)
|
||||||
|
{
|
||||||
|
foreach (OdePrim actor in _activeprims)
|
||||||
|
{
|
||||||
|
if (actor.IsPhysical && (d.BodyIsEnabled(actor.Body) || !actor._zeroFlag))
|
||||||
|
{
|
||||||
|
actor.UpdatePositionAndVelocity();
|
||||||
|
|
||||||
|
if (SupportsNINJAJoints)
|
||||||
|
SimulateActorPendingJoints(actor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//DumpJointInfo();
|
||||||
|
|
||||||
|
// Finished with all sim stepping. If requested, dump world state to file for debugging.
|
||||||
|
// TODO: This call to the export function is already inside lock (OdeLock) - but is an extra lock needed?
|
||||||
|
// TODO: This overwrites all dump files in-place. Should this be a growing logfile, or separate snapshots?
|
||||||
|
if (physics_logging && (physics_logging_interval > 0) && (framecount % physics_logging_interval == 0))
|
||||||
|
{
|
||||||
|
string fname = "state-" + world.ToString() + ".DIF"; // give each physics world a separate filename
|
||||||
|
string prefix = "world" + world.ToString(); // prefix for variable names in exported .DIF file
|
||||||
|
|
||||||
|
if (physics_logging_append_existing_logfile)
|
||||||
|
{
|
||||||
|
string header = "-------------- START OF PHYSICS FRAME " + framecount.ToString() + " --------------";
|
||||||
|
TextWriter fwriter = File.AppendText(fname);
|
||||||
|
fwriter.WriteLine(header);
|
||||||
|
fwriter.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
d.WorldExportDIF(world, fname, physics_logging_append_existing_logfile, prefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
latertickcount = Util.EnvironmentTickCount() - tickCountFrameRun;
|
||||||
|
|
||||||
|
// OpenSimulator above does 10 fps. 10 fps = means that the main thread loop and physics
|
||||||
|
// has a max of 100 ms to run theoretically.
|
||||||
|
// If the main loop stalls, it calls Simulate later which makes the tick count ms larger.
|
||||||
|
// If Physics stalls, it takes longer which makes the tick count ms larger.
|
||||||
|
|
||||||
|
if (latertickcount < 100)
|
||||||
|
{
|
||||||
|
m_timeDilation = 1.0f;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_timeDilation = 100f / latertickcount;
|
||||||
|
//m_timeDilation = Math.Min((Math.Max(100 - (Util.EnvironmentTickCount() - tickCountFrameRun), 1) / 100f), 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
tickCountFrameRun = Util.EnvironmentTickCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
return fps;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Simulate pending NINJA joints.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Called by the main Simulate() loop if NINJA joints are active. Should not be called from anywhere else.
|
||||||
|
/// </remarks>
|
||||||
|
protected void SimulatePendingNINJAJoints()
|
||||||
{
|
{
|
||||||
// Create pending joints, if possible
|
// Create pending joints, if possible
|
||||||
|
|
||||||
|
@ -2799,6 +2976,7 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (allJointBodiesAreReady)
|
if (allJointBodiesAreReady)
|
||||||
{
|
{
|
||||||
//DoJointErrorMessage(joint, "allJointBodiesAreReady for " + joint.ObjectNameInScene + " with parms " + joint.RawParams);
|
//DoJointErrorMessage(joint, "allJointBodiesAreReady for " + joint.ObjectNameInScene + " with parms " + joint.RawParams);
|
||||||
|
@ -2906,6 +3084,7 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
|
||||||
DoJointErrorMessage(joint, "joint could not yet be created; still pending");
|
DoJointErrorMessage(joint, "joint could not yet be created; still pending");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (PhysicsJoint successfullyProcessedJoint in successfullyProcessedPendingJoints)
|
foreach (PhysicsJoint successfullyProcessedJoint in successfullyProcessedPendingJoints)
|
||||||
{
|
{
|
||||||
//DoJointErrorMessage(successfullyProcessedJoint, "finalizing succesfully procsssed joint " + successfullyProcessedJoint.ObjectNameInScene + " parms " + successfullyProcessedJoint.RawParams);
|
//DoJointErrorMessage(successfullyProcessedJoint, "finalizing succesfully procsssed joint " + successfullyProcessedJoint.ObjectNameInScene + " parms " + successfullyProcessedJoint.RawParams);
|
||||||
|
@ -2918,133 +3097,14 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (processedtaints)
|
/// <summary>
|
||||||
//Console.WriteLine("Simulate calls Clear of _taintedPrim list");
|
/// Simulate the joint proxies of a NINJA actor.
|
||||||
_taintedPrimH.Clear();
|
/// </summary>
|
||||||
_taintedPrimL.Clear();
|
/// <remarks>
|
||||||
}
|
/// Called as part of the Simulate() loop if NINJA physics is active. Must only be called from there.
|
||||||
|
/// </remarks>
|
||||||
// Move characters
|
/// <param name="actor"></param>
|
||||||
lock (_characters)
|
protected void SimulateActorPendingJoints(OdePrim actor)
|
||||||
{
|
|
||||||
List<OdeCharacter> defects = new List<OdeCharacter>();
|
|
||||||
foreach (OdeCharacter actor in _characters)
|
|
||||||
{
|
|
||||||
if (actor != null)
|
|
||||||
actor.Move(timeStep, defects);
|
|
||||||
}
|
|
||||||
if (0 != defects.Count)
|
|
||||||
{
|
|
||||||
foreach (OdeCharacter defect in defects)
|
|
||||||
{
|
|
||||||
RemoveCharacter(defect);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Move other active objects
|
|
||||||
lock (_activeprims)
|
|
||||||
{
|
|
||||||
foreach (OdePrim prim in _activeprims)
|
|
||||||
{
|
|
||||||
prim.m_collisionscore = 0;
|
|
||||||
prim.Move(timeStep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//if ((framecount % m_randomizeWater) == 0)
|
|
||||||
// randomizeWater(waterlevel);
|
|
||||||
|
|
||||||
//int RayCastTimeMS = m_rayCastManager.ProcessQueuedRequests();
|
|
||||||
m_rayCastManager.ProcessQueuedRequests();
|
|
||||||
|
|
||||||
collision_optimized(timeStep);
|
|
||||||
|
|
||||||
lock (_collisionEventPrim)
|
|
||||||
{
|
|
||||||
foreach (PhysicsActor obj in _collisionEventPrim)
|
|
||||||
{
|
|
||||||
if (obj == null)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
switch ((ActorTypes)obj.PhysicsActorType)
|
|
||||||
{
|
|
||||||
case ActorTypes.Agent:
|
|
||||||
OdeCharacter cobj = (OdeCharacter)obj;
|
|
||||||
cobj.AddCollisionFrameTime(100);
|
|
||||||
cobj.SendCollisions();
|
|
||||||
break;
|
|
||||||
case ActorTypes.Prim:
|
|
||||||
OdePrim pobj = (OdePrim)obj;
|
|
||||||
pobj.SendCollisions();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//if (m_global_contactcount > 5)
|
|
||||||
//{
|
|
||||||
// m_log.DebugFormat("[PHYSICS]: Contacts:{0}", m_global_contactcount);
|
|
||||||
//}
|
|
||||||
|
|
||||||
m_global_contactcount = 0;
|
|
||||||
|
|
||||||
d.WorldQuickStep(world, ODE_STEPSIZE);
|
|
||||||
d.JointGroupEmpty(contactgroup);
|
|
||||||
//ode.dunlock(world);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
m_log.ErrorFormat("[PHYSICS]: {0}, {1}, {2}", e.Message, e.TargetSite, e);
|
|
||||||
ode.dunlock(world);
|
|
||||||
}
|
|
||||||
|
|
||||||
step_time -= ODE_STEPSIZE;
|
|
||||||
i++;
|
|
||||||
//}
|
|
||||||
//else
|
|
||||||
//{
|
|
||||||
//fps = 0;
|
|
||||||
//}
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
|
|
||||||
lock (_characters)
|
|
||||||
{
|
|
||||||
foreach (OdeCharacter actor in _characters)
|
|
||||||
{
|
|
||||||
if (actor != null)
|
|
||||||
{
|
|
||||||
if (actor.bad)
|
|
||||||
m_log.WarnFormat("[PHYSICS]: BAD Actor {0} in _characters list was not removed?", actor.m_uuid);
|
|
||||||
actor.UpdatePositionAndVelocity();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
lock (_badCharacter)
|
|
||||||
{
|
|
||||||
if (_badCharacter.Count > 0)
|
|
||||||
{
|
|
||||||
foreach (OdeCharacter chr in _badCharacter)
|
|
||||||
{
|
|
||||||
RemoveCharacter(chr);
|
|
||||||
}
|
|
||||||
_badCharacter.Clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
lock (_activeprims)
|
|
||||||
{
|
|
||||||
//if (timeStep < 0.2f)
|
|
||||||
{
|
|
||||||
foreach (OdePrim actor in _activeprims)
|
|
||||||
{
|
|
||||||
if (actor.IsPhysical && (d.BodyIsEnabled(actor.Body) || !actor._zeroFlag))
|
|
||||||
{
|
|
||||||
actor.UpdatePositionAndVelocity();
|
|
||||||
|
|
||||||
if (SupportsNINJAJoints)
|
|
||||||
{
|
{
|
||||||
// If an actor moved, move its joint proxy objects as well.
|
// If an actor moved, move its joint proxy objects as well.
|
||||||
// There seems to be an event PhysicsActor.OnPositionUpdate that could be used
|
// There seems to be an event PhysicsActor.OnPositionUpdate that could be used
|
||||||
|
@ -3069,50 +3129,6 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//DumpJointInfo();
|
|
||||||
|
|
||||||
// Finished with all sim stepping. If requested, dump world state to file for debugging.
|
|
||||||
// TODO: This call to the export function is already inside lock (OdeLock) - but is an extra lock needed?
|
|
||||||
// TODO: This overwrites all dump files in-place. Should this be a growing logfile, or separate snapshots?
|
|
||||||
if (physics_logging && (physics_logging_interval>0) && (framecount % physics_logging_interval == 0))
|
|
||||||
{
|
|
||||||
string fname = "state-" + world.ToString() + ".DIF"; // give each physics world a separate filename
|
|
||||||
string prefix = "world" + world.ToString(); // prefix for variable names in exported .DIF file
|
|
||||||
|
|
||||||
if (physics_logging_append_existing_logfile)
|
|
||||||
{
|
|
||||||
string header = "-------------- START OF PHYSICS FRAME " + framecount.ToString() + " --------------";
|
|
||||||
TextWriter fwriter = File.AppendText(fname);
|
|
||||||
fwriter.WriteLine(header);
|
|
||||||
fwriter.Close();
|
|
||||||
}
|
|
||||||
d.WorldExportDIF(world, fname, physics_logging_append_existing_logfile, prefix);
|
|
||||||
}
|
|
||||||
latertickcount = Util.EnvironmentTickCount() - tickCountFrameRun;
|
|
||||||
|
|
||||||
// OpenSimulator above does 10 fps. 10 fps = means that the main thread loop and physics
|
|
||||||
// has a max of 100 ms to run theoretically.
|
|
||||||
// If the main loop stalls, it calls Simulate later which makes the tick count ms larger.
|
|
||||||
// If Physics stalls, it takes longer which makes the tick count ms larger.
|
|
||||||
|
|
||||||
if (latertickcount < 100)
|
|
||||||
m_timeDilation = 1.0f;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_timeDilation = 100f / latertickcount;
|
|
||||||
//m_timeDilation = Math.Min((Math.Max(100 - (Util.EnvironmentTickCount() - tickCountFrameRun), 1) / 100f), 1.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
tickCountFrameRun = Util.EnvironmentTickCount();
|
|
||||||
}
|
|
||||||
|
|
||||||
return fps;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void GetResults()
|
public override void GetResults()
|
||||||
{
|
{
|
||||||
|
@ -3475,9 +3491,6 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
lock (OdeLock)
|
lock (OdeLock)
|
||||||
{
|
{
|
||||||
IntPtr GroundGeom = IntPtr.Zero;
|
IntPtr GroundGeom = IntPtr.Zero;
|
||||||
|
@ -3531,7 +3544,6 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
|
||||||
}
|
}
|
||||||
RegionTerrain.Add(pOffset, GroundGeom, GroundGeom);
|
RegionTerrain.Add(pOffset, GroundGeom, GroundGeom);
|
||||||
TerrainHeightFieldHeights.Add(GroundGeom,_heightmap);
|
TerrainHeightFieldHeights.Add(GroundGeom,_heightmap);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3694,6 +3706,7 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
|
||||||
//d.CloseODE();
|
//d.CloseODE();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Dictionary<uint, float> GetTopColliders()
|
public override Dictionary<uint, float> GetTopColliders()
|
||||||
{
|
{
|
||||||
Dictionary<uint, float> returncolliders = new Dictionary<uint, float>();
|
Dictionary<uint, float> returncolliders = new Dictionary<uint, float>();
|
||||||
|
|
|
@ -2110,7 +2110,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
if (module != null)
|
if (module != null)
|
||||||
{
|
{
|
||||||
Vector3 pos = new Vector3((float) position.x, (float) position.y, (float) position.z);
|
Vector3 pos = new Vector3((float) position.x, (float) position.y, (float) position.z);
|
||||||
module.Autopilot(new UUID(npc.m_string), World, pos);
|
module.MoveToTarget(new UUID(npc.m_string), World, pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,7 @@ namespace OpenSim.Server.Handlers.Authorization
|
||||||
AuthorizationRequest Authorization = (AuthorizationRequest) xs.Deserialize(request);
|
AuthorizationRequest Authorization = (AuthorizationRequest) xs.Deserialize(request);
|
||||||
|
|
||||||
string message = String.Empty;
|
string message = String.Empty;
|
||||||
bool authorized = m_AuthorizationService.IsAuthorizedForRegion(Authorization.ID, Authorization.RegionID,out message);
|
bool authorized = m_AuthorizationService.IsAuthorizedForRegion(Authorization.ID, Authorization.FirstName, Authorization.SurName, Authorization.RegionID, out message);
|
||||||
|
|
||||||
AuthorizationResponse result = new AuthorizationResponse(authorized, Authorization.ID + " has been authorized");
|
AuthorizationResponse result = new AuthorizationResponse(authorized, Authorization.ID + " has been authorized");
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,8 @@ namespace OpenSim.Services.AuthorizationService
|
||||||
m_log.Info("[AUTHORIZATION CONNECTOR]: Local Authorization service enabled");
|
m_log.Info("[AUTHORIZATION CONNECTOR]: Local Authorization service enabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsAuthorizedForRegion(string userID, string regionID, out string message)
|
public bool IsAuthorizedForRegion(
|
||||||
|
string userID, string firstName, string lastName, string regionID, out string message)
|
||||||
{
|
{
|
||||||
message = "Authorized";
|
message = "Authorized";
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -54,7 +54,7 @@ namespace OpenSim.Services.AvatarService
|
||||||
public AvatarAppearance GetAppearance(UUID principalID)
|
public AvatarAppearance GetAppearance(UUID principalID)
|
||||||
{
|
{
|
||||||
AvatarData avatar = GetAvatar(principalID);
|
AvatarData avatar = GetAvatar(principalID);
|
||||||
return avatar.ToAvatarAppearance(principalID);
|
return avatar.ToAvatarAppearance();
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool SetAppearance(UUID principalID, AvatarAppearance appearance)
|
public bool SetAppearance(UUID principalID, AvatarAppearance appearance)
|
||||||
|
@ -109,7 +109,33 @@ namespace OpenSim.Services.AvatarService
|
||||||
foreach (KeyValuePair<string,string> kvp in avatar.Data)
|
foreach (KeyValuePair<string,string> kvp in avatar.Data)
|
||||||
{
|
{
|
||||||
av.Data["Name"] = kvp.Key;
|
av.Data["Name"] = kvp.Key;
|
||||||
|
|
||||||
|
// justincc 20110730. Yes, this is a hack to get around the fact that a bug in OpenSim is causing
|
||||||
|
// various simulators on osgrid to inject bad values. Since these simulators might be around for a
|
||||||
|
// long time, we are going to manually police the value.
|
||||||
|
//
|
||||||
|
// It should be possible to remove this in half a year if we don't want to police values server side.
|
||||||
|
if (kvp.Key == "AvatarHeight")
|
||||||
|
{
|
||||||
|
float height;
|
||||||
|
if (!float.TryParse(kvp.Value, out height) || height < 0 || height > 10)
|
||||||
|
{
|
||||||
|
string rawHeight = kvp.Value.Replace(",", ".");
|
||||||
|
|
||||||
|
if (!float.TryParse(rawHeight, out height) || height < 0 || height > 10)
|
||||||
|
height = 1.771488f;
|
||||||
|
|
||||||
|
m_log.DebugFormat(
|
||||||
|
"[AVATAR SERVICE]: Rectifying height of avatar {0} from {1} to {2}",
|
||||||
|
principalID, kvp.Value, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
av.Data["Value"] = height.ToString();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
av.Data["Value"] = kvp.Value;
|
av.Data["Value"] = kvp.Value;
|
||||||
|
}
|
||||||
|
|
||||||
if (!m_Database.Store(av))
|
if (!m_Database.Store(av))
|
||||||
{
|
{
|
||||||
|
|
|
@ -89,7 +89,7 @@ namespace OpenSim.Services.Connectors
|
||||||
public AvatarAppearance GetAppearance(UUID userID)
|
public AvatarAppearance GetAppearance(UUID userID)
|
||||||
{
|
{
|
||||||
AvatarData avatar = GetAvatar(userID);
|
AvatarData avatar = GetAvatar(userID);
|
||||||
return avatar.ToAvatarAppearance(userID);
|
return avatar.ToAvatarAppearance();
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool SetAppearance(UUID userID, AvatarAppearance appearance)
|
public bool SetAppearance(UUID userID, AvatarAppearance appearance)
|
||||||
|
|
|
@ -213,7 +213,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
||||||
wearables[11] = new AvatarWearable(map["UnderpantsItem"].AsUUID(), map["UnderpantsAsset"].AsUUID());
|
wearables[11] = new AvatarWearable(map["UnderpantsItem"].AsUUID(), map["UnderpantsAsset"].AsUUID());
|
||||||
wearables[12] = new AvatarWearable(map["SkirtItem"].AsUUID(), map["SkirtAsset"].AsUUID());
|
wearables[12] = new AvatarWearable(map["SkirtItem"].AsUUID(), map["SkirtAsset"].AsUUID());
|
||||||
|
|
||||||
AvatarAppearance appearance = new AvatarAppearance(userID);
|
AvatarAppearance appearance = new AvatarAppearance();
|
||||||
appearance.Wearables = wearables;
|
appearance.Wearables = wearables;
|
||||||
appearance.AvatarHeight = (float)map["Height"].AsReal();
|
appearance.AvatarHeight = (float)map["Height"].AsReal();
|
||||||
|
|
||||||
|
@ -257,7 +257,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
||||||
|
|
||||||
if (avatar.AvatarType == 1) // LLAvatar
|
if (avatar.AvatarType == 1) // LLAvatar
|
||||||
{
|
{
|
||||||
AvatarAppearance appearance = avatar.ToAvatarAppearance(userID);
|
AvatarAppearance appearance = avatar.ToAvatarAppearance();
|
||||||
|
|
||||||
OSDMap map = new OSDMap();
|
OSDMap map = new OSDMap();
|
||||||
|
|
||||||
|
|
|
@ -320,18 +320,25 @@ namespace OpenSim.Services.GridService
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public GridRegion GetRegionByName(UUID scopeID, string regionName)
|
public GridRegion GetRegionByName(UUID scopeID, string name)
|
||||||
{
|
{
|
||||||
List<RegionData> rdatas = m_Database.Get(regionName + "%", scopeID);
|
List<RegionData> rdatas = m_Database.Get(name, scopeID);
|
||||||
if ((rdatas != null) && (rdatas.Count > 0))
|
if ((rdatas != null) && (rdatas.Count > 0))
|
||||||
return RegionData2RegionInfo(rdatas[0]); // get the first
|
return RegionData2RegionInfo(rdatas[0]); // get the first
|
||||||
|
|
||||||
|
if (m_AllowHypergridMapSearch)
|
||||||
|
{
|
||||||
|
GridRegion r = GetHypergridRegionByName(scopeID, name);
|
||||||
|
if (r != null)
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<GridRegion> GetRegionsByName(UUID scopeID, string name, int maxNumber)
|
public List<GridRegion> GetRegionsByName(UUID scopeID, string name, int maxNumber)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[GRID SERVICE]: GetRegionsByName {0}", name);
|
// m_log.DebugFormat("[GRID SERVICE]: GetRegionsByName {0}", name);
|
||||||
|
|
||||||
List<RegionData> rdatas = m_Database.Get(name + "%", scopeID);
|
List<RegionData> rdatas = m_Database.Get(name + "%", scopeID);
|
||||||
|
|
||||||
|
@ -340,7 +347,7 @@ namespace OpenSim.Services.GridService
|
||||||
|
|
||||||
if (rdatas != null)
|
if (rdatas != null)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[GRID SERVICE]: Found {0} regions", rdatas.Count);
|
// m_log.DebugFormat("[GRID SERVICE]: Found {0} regions", rdatas.Count);
|
||||||
foreach (RegionData rdata in rdatas)
|
foreach (RegionData rdata in rdatas)
|
||||||
{
|
{
|
||||||
if (count++ < maxNumber)
|
if (count++ < maxNumber)
|
||||||
|
@ -348,9 +355,9 @@ namespace OpenSim.Services.GridService
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_AllowHypergridMapSearch && (rdatas == null || (rdatas != null && rdatas.Count == 0)) && name.Contains("."))
|
if (m_AllowHypergridMapSearch && (rdatas == null || (rdatas != null && rdatas.Count == 0)))
|
||||||
{
|
{
|
||||||
GridRegion r = m_HypergridLinker.LinkRegion(scopeID, name);
|
GridRegion r = GetHypergridRegionByName(scopeID, name);
|
||||||
if (r != null)
|
if (r != null)
|
||||||
rinfos.Add(r);
|
rinfos.Add(r);
|
||||||
}
|
}
|
||||||
|
@ -358,6 +365,20 @@ namespace OpenSim.Services.GridService
|
||||||
return rinfos;
|
return rinfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get a hypergrid region.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scopeID"></param>
|
||||||
|
/// <param name="name"></param>
|
||||||
|
/// <returns>null if no hypergrid region could be found.</returns>
|
||||||
|
protected GridRegion GetHypergridRegionByName(UUID scopeID, string name)
|
||||||
|
{
|
||||||
|
if (name.Contains("."))
|
||||||
|
return m_HypergridLinker.LinkRegion(scopeID, name);
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public List<GridRegion> GetRegionRange(UUID scopeID, int xmin, int xmax, int ymin, int ymax)
|
public List<GridRegion> GetRegionRange(UUID scopeID, int xmin, int xmax, int ymin, int ymax)
|
||||||
{
|
{
|
||||||
int xminSnap = (int)(xmin / Constants.RegionSize) * (int)Constants.RegionSize;
|
int xminSnap = (int)(xmin / Constants.RegionSize) * (int)Constants.RegionSize;
|
||||||
|
|
|
@ -34,14 +34,21 @@ namespace OpenSim.Services.Interfaces
|
||||||
|
|
||||||
public interface IAuthorizationService
|
public interface IAuthorizationService
|
||||||
{
|
{
|
||||||
//////////////////////////////////////////////////////
|
/// <summary>
|
||||||
// Authorized
|
/// Check whether the user should be given access to the region.
|
||||||
//
|
/// </summary>
|
||||||
// This method returns a simple true false indicating
|
/// <remarks>
|
||||||
// whether or not a user has access to the region
|
/// We also supply user first name and last name for situations where the user does not have an account
|
||||||
//
|
/// on the region (e.g. they're a visitor via Hypergrid).
|
||||||
bool IsAuthorizedForRegion(string userID, string regionID, out string message);
|
/// </remarks>
|
||||||
|
/// <param name="userID"></param>
|
||||||
|
/// <param name="firstName">/param>
|
||||||
|
/// <param name="lastName"></param>
|
||||||
|
/// <param name="regionID"></param>
|
||||||
|
/// <param name="message"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
bool IsAuthorizedForRegion(
|
||||||
|
string userID, string firstName, string lastName, string regionID, out string message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class AuthorizationRequest
|
public class AuthorizationRequest
|
||||||
|
@ -63,7 +70,8 @@ namespace OpenSim.Services.Interfaces
|
||||||
m_regionID = RegionID;
|
m_regionID = RegionID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AuthorizationRequest(string ID,string FirstName, string SurName, string Email, string RegionName, string RegionID)
|
public AuthorizationRequest(
|
||||||
|
string ID, string FirstName, string SurName, string Email, string RegionName, string RegionID)
|
||||||
{
|
{
|
||||||
m_userID = ID;
|
m_userID = ID;
|
||||||
m_firstname = FirstName;
|
m_firstname = FirstName;
|
||||||
|
@ -108,9 +116,6 @@ namespace OpenSim.Services.Interfaces
|
||||||
get { return m_regionID; }
|
get { return m_regionID; }
|
||||||
set { m_regionID = value; }
|
set { m_regionID = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class AuthorizationResponse
|
public class AuthorizationResponse
|
||||||
|
@ -126,7 +131,6 @@ namespace OpenSim.Services.Interfaces
|
||||||
{
|
{
|
||||||
m_isAuthorized = isAuthorized;
|
m_isAuthorized = isAuthorized;
|
||||||
m_message = message;
|
m_message = message;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsAuthorized
|
public bool IsAuthorized
|
||||||
|
|
|
@ -180,9 +180,9 @@ namespace OpenSim.Services.Interfaces
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public AvatarAppearance ToAvatarAppearance(UUID owner)
|
public AvatarAppearance ToAvatarAppearance()
|
||||||
{
|
{
|
||||||
AvatarAppearance appearance = new AvatarAppearance(owner);
|
AvatarAppearance appearance = new AvatarAppearance();
|
||||||
|
|
||||||
if (Data.Count == 0)
|
if (Data.Count == 0)
|
||||||
return appearance;
|
return appearance;
|
||||||
|
|
|
@ -71,6 +71,12 @@ namespace OpenSim.Services.Interfaces
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
GridRegion GetRegionByPosition(UUID scopeID, int x, int y);
|
GridRegion GetRegionByPosition(UUID scopeID, int x, int y);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get information about a region which exactly matches the name given.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scopeID"></param>
|
||||||
|
/// <param name="regionName"></param>
|
||||||
|
/// <returns>Returns the region information if the name matched. Null otherwise.</returns>
|
||||||
GridRegion GetRegionByName(UUID scopeID, string regionName);
|
GridRegion GetRegionByName(UUID scopeID, string regionName);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -193,10 +193,11 @@ namespace OpenSim.Services.InventoryService
|
||||||
item.Description = config.GetString("description", item.Name);
|
item.Description = config.GetString("description", item.Name);
|
||||||
item.InvType = config.GetInt("inventoryType", 0);
|
item.InvType = config.GetInt("inventoryType", 0);
|
||||||
item.AssetType = config.GetInt("assetType", item.InvType);
|
item.AssetType = config.GetInt("assetType", item.InvType);
|
||||||
item.CurrentPermissions = (uint)config.GetLong("currentPermissions", 0x7FFFFFFF);
|
item.CurrentPermissions = (uint)config.GetLong("currentPermissions", (uint)PermissionMask.All);
|
||||||
item.NextPermissions = (uint)config.GetLong("nextPermissions", 0x7FFFFFFF);
|
item.NextPermissions = (uint)config.GetLong("nextPermissions", (uint)PermissionMask.All);
|
||||||
item.EveryOnePermissions = (uint)config.GetLong("everyonePermissions", 0x7FFFFFFF);
|
item.EveryOnePermissions
|
||||||
item.BasePermissions = (uint)config.GetLong("basePermissions", 0x7FFFFFFF);
|
= (uint)config.GetLong("everyonePermissions", (uint)PermissionMask.All - (uint)PermissionMask.Modify);
|
||||||
|
item.BasePermissions = (uint)config.GetLong("basePermissions", (uint)PermissionMask.All);
|
||||||
item.Flags = (uint)config.GetInt("flags", 0);
|
item.Flags = (uint)config.GetInt("flags", 0);
|
||||||
|
|
||||||
if (libraryFolders.ContainsKey(item.Folder))
|
if (libraryFolders.ContainsKey(item.Folder))
|
||||||
|
|
|
@ -785,7 +785,7 @@ namespace OpenSim.Services.LLLoginService
|
||||||
if (avatar != null)
|
if (avatar != null)
|
||||||
aCircuit.Appearance = new AvatarAppearance(avatar);
|
aCircuit.Appearance = new AvatarAppearance(avatar);
|
||||||
else
|
else
|
||||||
aCircuit.Appearance = new AvatarAppearance(account.PrincipalID);
|
aCircuit.Appearance = new AvatarAppearance();
|
||||||
|
|
||||||
//aCircuit.BaseFolder = irrelevant
|
//aCircuit.BaseFolder = irrelevant
|
||||||
aCircuit.CapsPath = CapsUtil.GetRandomCapsObjectPath();
|
aCircuit.CapsPath = CapsUtil.GetRandomCapsObjectPath();
|
||||||
|
|
|
@ -42,7 +42,7 @@ namespace OpenSim.Tests.Common
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static AssetBase CreateAsset()
|
public static AssetBase CreateAsset()
|
||||||
{
|
{
|
||||||
return CreateAsset(UUID.Random(), AssetType.Notecard, "hello", UUID.Random());
|
return CreateAsset(UUID.Random());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -50,9 +50,9 @@ namespace OpenSim.Tests.Common
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="creatorId">/param>
|
/// <param name="creatorId">/param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static AssetBase CreateAsset(UUID creatorId)
|
public static AssetBase CreateAsset(UUID id)
|
||||||
{
|
{
|
||||||
return CreateAsset(UUID.Random(), AssetType.Notecard, "hello", creatorId);
|
return CreateAsset(id, AssetType.Notecard, "hello", UUID.Random());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -234,7 +234,7 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
public event ScriptReset OnScriptReset;
|
public event ScriptReset OnScriptReset;
|
||||||
public event GetScriptRunning OnGetScriptRunning;
|
public event GetScriptRunning OnGetScriptRunning;
|
||||||
public event SetScriptRunning OnSetScriptRunning;
|
public event SetScriptRunning OnSetScriptRunning;
|
||||||
public event UpdateVector OnAutoPilotGo;
|
public event Action<Vector3> OnAutoPilotGo;
|
||||||
|
|
||||||
public event TerrainUnacked OnUnackedTerrain;
|
public event TerrainUnacked OnUnackedTerrain;
|
||||||
|
|
||||||
|
@ -1214,7 +1214,7 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId)
|
public void SendTextBoxRequest(string message, int chatChannel, string objectname, UUID ownerID, string ownerFirstName, string ownerLastName, UUID objectId)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<configuration>
|
||||||
|
<configSections>
|
||||||
|
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
|
||||||
|
</configSections>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="nunit.framework" publicKeyToken="96d09a1eb7f44a77" culture="Neutral" />
|
||||||
|
<bindingRedirect oldVersion="2.0.6.0" newVersion="2.4.6.0" />
|
||||||
|
<bindingRedirect oldVersion="2.1.4.0" newVersion="2.4.6.0" />
|
||||||
|
<bindingRedirect oldVersion="2.2.8.0" newVersion="2.4.6.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
<log4net>
|
||||||
|
<!-- A1 is set to be a ConsoleAppender -->
|
||||||
|
<appender name="A1" type="log4net.Appender.ConsoleAppender">
|
||||||
|
|
||||||
|
<!-- A1 uses PatternLayout -->
|
||||||
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
|
<!-- Print the date in ISO 8601 format -->
|
||||||
|
<conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" />
|
||||||
|
</layout>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<!-- Set root logger level to DEBUG and its only appender to A1 -->
|
||||||
|
<root>
|
||||||
|
<level value="DEBUG" />
|
||||||
|
<appender-ref ref="A1" />
|
||||||
|
</root>
|
||||||
|
</log4net>
|
||||||
|
</configuration>
|
|
@ -39,6 +39,9 @@
|
||||||
;# {save_crashes} {} {Save crashes to disk?} {true false} false
|
;# {save_crashes} {} {Save crashes to disk?} {true false} false
|
||||||
;; Set this to true if you want to log crashes to disk
|
;; Set this to true if you want to log crashes to disk
|
||||||
;; this can be useful when submitting bug reports.
|
;; this can be useful when submitting bug reports.
|
||||||
|
;; However, this will only log crashes within OpenSimulator that cause the entire program to exit
|
||||||
|
;; It will not log crashes caused by virtual machine failures, which includes mono and ODE failures.
|
||||||
|
;; You will need to capture these native stack traces by recording the session log itself.
|
||||||
; save_crashes = false
|
; save_crashes = false
|
||||||
|
|
||||||
;# {crash_dir} {save_crashes:true} {Directory to save crashes to?} {} crashes
|
;# {crash_dir} {save_crashes:true} {Directory to save crashes to?} {} crashes
|
||||||
|
@ -80,9 +83,11 @@
|
||||||
;; This can be overriden in the region config file.
|
;; This can be overriden in the region config file.
|
||||||
; ClampPrimSize = false
|
; ClampPrimSize = false
|
||||||
|
|
||||||
;# {AllowScriptCrossing} {} {Allow scripts to cross into this region} {true false} false
|
;# {AllowScriptCrossing} {} {Allow scripts to cross into this region} {true false} true
|
||||||
;; Allow scripts to keep running when they cross region boundaries, rather than being restarted. Script code is recompiled on the destination region and the state reloaded.
|
;; Allow scripts to keep running when they cross region boundaries, rather than being restarted. State is reloaded on the destination region.
|
||||||
; AllowScriptCrossing = false
|
;; This only applies when crossing to a region running in a different simulator.
|
||||||
|
;; For crossings where the regions are on the same simulator the script is always kept running.
|
||||||
|
; AllowScriptCrossing = true
|
||||||
|
|
||||||
;# {TrustBinaries} {AllowScriptCrossing:true} {Accept compiled binary script code? (DANGEROUS!)} {true false} false
|
;# {TrustBinaries} {AllowScriptCrossing:true} {Accept compiled binary script code? (DANGEROUS!)} {true false} false
|
||||||
;; Allow compiled script binary code to cross region boundaries.
|
;; Allow compiled script binary code to cross region boundaries.
|
||||||
|
@ -711,6 +716,11 @@
|
||||||
; Enabled = true;
|
; Enabled = true;
|
||||||
|
|
||||||
|
|
||||||
|
[NPC]
|
||||||
|
;# {Enabled} {} {Enable Non Player Character (NPC) facilities} {true false} false
|
||||||
|
; Enabled = false
|
||||||
|
|
||||||
|
|
||||||
[PrimLimitsModule]
|
[PrimLimitsModule]
|
||||||
;# {EnforcePrimLimits} {} {Enforce parcel prim limits} {true false} false
|
;# {EnforcePrimLimits} {} {Enforce parcel prim limits} {true false} false
|
||||||
;; Enable parcel prim limits. Off by default to emulate pre-existing behavior.
|
;; Enable parcel prim limits. Off by default to emulate pre-existing behavior.
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
[Startup]
|
[Startup]
|
||||||
; Set this to true if you want to log crashes to disk
|
; Set this to true if you want to log crashes to disk
|
||||||
; this can be useful when submitting bug reports.
|
; this can be useful when submitting bug reports.
|
||||||
|
; However, this will only log crashes within OpenSimulator that cause the entire program to exit
|
||||||
|
; It will not log crashes caused by virtual machine failures, which includes mono and ODE failures.
|
||||||
|
; You will need to capture these native stack traces by recording the session log itself.
|
||||||
save_crashes = false
|
save_crashes = false
|
||||||
|
|
||||||
; Directory to save crashes to if above is enabled
|
; Directory to save crashes to if above is enabled
|
||||||
|
@ -77,8 +80,10 @@
|
||||||
; This can be overriden in the region config file.
|
; This can be overriden in the region config file.
|
||||||
ClampPrimSize = false
|
ClampPrimSize = false
|
||||||
|
|
||||||
; Allow scripts to keep running when they cross region boundaries, rather than being restarted. Script code is recompiled on the destination region and the state reloaded.
|
; Allow scripts to keep running when they cross region boundaries, rather than being restarted. State is reloaded on the destination region.
|
||||||
AllowScriptCrossing = false
|
; This only applies when crossing to a region running in a different simulator.
|
||||||
|
; For crossings where the regions are on the same simulator the script is always kept running.
|
||||||
|
AllowScriptCrossing = true
|
||||||
|
|
||||||
; Allow compiled script binary code to cross region boundaries.
|
; Allow compiled script binary code to cross region boundaries.
|
||||||
; If you set this to "true", any region that can teleport to you can
|
; If you set this to "true", any region that can teleport to you can
|
||||||
|
@ -170,8 +175,8 @@
|
||||||
; If set to false, then, in theory, the server never carries out permission checks (allowing anybody to copy
|
; If set to false, then, in theory, the server never carries out permission checks (allowing anybody to copy
|
||||||
; any item, etc. This may not yet be implemented uniformally.
|
; any item, etc. This may not yet be implemented uniformally.
|
||||||
; If set to true, then all permissions checks are carried out
|
; If set to true, then all permissions checks are carried out
|
||||||
; Default is false
|
; Default is true
|
||||||
serverside_object_permissions = false
|
serverside_object_permissions = true
|
||||||
|
|
||||||
allow_grid_gods = false
|
allow_grid_gods = false
|
||||||
|
|
||||||
|
@ -1403,6 +1408,10 @@
|
||||||
; Enable media on a prim facilities
|
; Enable media on a prim facilities
|
||||||
Enabled = true;
|
Enabled = true;
|
||||||
|
|
||||||
|
[NPC]
|
||||||
|
;; Enable Non Player Character (NPC) facilities
|
||||||
|
Enabled = false
|
||||||
|
|
||||||
;;
|
;;
|
||||||
;; If you are using a simian grid frontend you can enable
|
;; If you are using a simian grid frontend you can enable
|
||||||
;; this module to upload tile images for the mapping fn
|
;; this module to upload tile images for the mapping fn
|
||||||
|
|
|
@ -108,8 +108,6 @@
|
||||||
<Key Name="inventoryType" Value="19" />
|
<Key Name="inventoryType" Value="19" />
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
<Section Name="Example Library Item">
|
<Section Name="Example Library Item">
|
||||||
<Key Name="inventoryID" Value="30000000-0000-2222-4444-000000000001" />
|
<Key Name="inventoryID" Value="30000000-0000-2222-4444-000000000001" />
|
||||||
|
@ -119,10 +117,6 @@
|
||||||
<Key Name="name" Value="Example Library Item" />
|
<Key Name="name" Value="Example Library Item" />
|
||||||
<Key Name="assetType" Value="7" />
|
<Key Name="assetType" Value="7" />
|
||||||
<Key Name="inventoryType" Value="7" />
|
<Key Name="inventoryType" Value="7" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
|
|
@ -9,10 +9,6 @@
|
||||||
<Key Name="name" Value="Example Library Item" />
|
<Key Name="name" Value="Example Library Item" />
|
||||||
<Key Name="assetType" Value="7" />
|
<Key Name="assetType" Value="7" />
|
||||||
<Key Name="inventoryType" Value="7" />
|
<Key Name="inventoryType" Value="7" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
-->
|
-->
|
||||||
<!--
|
<!--
|
||||||
|
@ -24,10 +20,6 @@
|
||||||
<Key Name="name" Value="Hair" />
|
<Key Name="name" Value="Hair" />
|
||||||
<Key Name="assetType" Value="13" />
|
<Key Name="assetType" Value="13" />
|
||||||
<Key Name="inventoryType" Value="18" />
|
<Key Name="inventoryType" Value="18" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Skin">
|
<Section Name="Skin">
|
||||||
|
@ -38,10 +30,6 @@
|
||||||
<Key Name="name" Value="Skin" />
|
<Key Name="name" Value="Skin" />
|
||||||
<Key Name="assetType" Value="13" />
|
<Key Name="assetType" Value="13" />
|
||||||
<Key Name="inventoryType" Value="18" />
|
<Key Name="inventoryType" Value="18" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
-->
|
-->
|
||||||
<!--
|
<!--
|
||||||
|
@ -53,10 +41,6 @@
|
||||||
<Key Name="name" Value="Jim Skin" />
|
<Key Name="name" Value="Jim Skin" />
|
||||||
<Key Name="assetType" Value="13" />
|
<Key Name="assetType" Value="13" />
|
||||||
<Key Name="inventoryType" Value="13" />
|
<Key Name="inventoryType" Value="13" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Little Goblin Skin">
|
<Section Name="Little Goblin Skin">
|
||||||
|
@ -67,10 +51,6 @@
|
||||||
<Key Name="name" Value="Little Goblin Skin" />
|
<Key Name="name" Value="Little Goblin Skin" />
|
||||||
<Key Name="assetType" Value="13" />
|
<Key Name="assetType" Value="13" />
|
||||||
<Key Name="inventoryType" Value="13" />
|
<Key Name="inventoryType" Value="13" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
-->
|
-->
|
||||||
<!--
|
<!--
|
||||||
|
@ -82,10 +62,6 @@
|
||||||
<Key Name="name" Value="Shape" />
|
<Key Name="name" Value="Shape" />
|
||||||
<Key Name="assetType" Value="13" />
|
<Key Name="assetType" Value="13" />
|
||||||
<Key Name="inventoryType" Value="18" />
|
<Key Name="inventoryType" Value="18" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
-->
|
-->
|
||||||
<!--
|
<!--
|
||||||
|
@ -97,10 +73,6 @@
|
||||||
<Key Name="name" Value="Jim Shape" />
|
<Key Name="name" Value="Jim Shape" />
|
||||||
<Key Name="assetType" Value="13" />
|
<Key Name="assetType" Value="13" />
|
||||||
<Key Name="inventoryType" Value="13" />
|
<Key Name="inventoryType" Value="13" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Little Goblin Shape">
|
<Section Name="Little Goblin Shape">
|
||||||
|
@ -111,10 +83,7 @@
|
||||||
<Key Name="name" Value="Little Goblin Shape" />
|
<Key Name="name" Value="Little Goblin Shape" />
|
||||||
<Key Name="assetType" Value="13" />
|
<Key Name="assetType" Value="13" />
|
||||||
<Key Name="inventoryType" Value="13" />
|
<Key Name="inventoryType" Value="13" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
</Nini>
|
</Nini>
|
||||||
|
|
|
@ -9,10 +9,6 @@
|
||||||
<Key Name="name" Value="Example Library Item" />
|
<Key Name="name" Value="Example Library Item" />
|
||||||
<Key Name="assetType" Value="7" />
|
<Key Name="assetType" Value="7" />
|
||||||
<Key Name="inventoryType" Value="7" />
|
<Key Name="inventoryType" Value="7" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
-->
|
-->
|
||||||
<!--
|
<!--
|
||||||
|
@ -24,11 +20,8 @@
|
||||||
<Key Name="name" Value="Shirt" />
|
<Key Name="name" Value="Shirt" />
|
||||||
<Key Name="assetType" Value="5" />
|
<Key Name="assetType" Value="5" />
|
||||||
<Key Name="inventoryType" Value="18" />
|
<Key Name="inventoryType" Value="18" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Pants">
|
<Section Name="Pants">
|
||||||
<Key Name="inventoryID" Value="d5e46211-b9d1-11dc-95ff-0800200c9a66" />
|
<Key Name="inventoryID" Value="d5e46211-b9d1-11dc-95ff-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="00000000-38f9-1111-024e-222222111120" />
|
<Key Name="assetID" Value="00000000-38f9-1111-024e-222222111120" />
|
||||||
|
@ -37,10 +30,7 @@
|
||||||
<Key Name="name" Value="Pants" />
|
<Key Name="name" Value="Pants" />
|
||||||
<Key Name="assetType" Value="5" />
|
<Key Name="assetType" Value="5" />
|
||||||
<Key Name="inventoryType" Value="18" />
|
<Key Name="inventoryType" Value="18" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
</Nini>
|
</Nini>
|
||||||
|
|
|
@ -7,11 +7,8 @@
|
||||||
<Key Name="name" Value="can we move along?" />
|
<Key Name="name" Value="can we move along?" />
|
||||||
<Key Name="assetType" Value="21"/>
|
<Key Name="assetType" Value="21"/>
|
||||||
<Key Name="inventoryType" Value="20"/>
|
<Key Name="inventoryType" Value="20"/>
|
||||||
<Key Name="currentPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="nextPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647"/>
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="me!">
|
<Section Name="me!">
|
||||||
<Key Name="inventoryID" Value="4c141851-1bef-4c00-9058-8c4d97ab48fe"/>
|
<Key Name="inventoryID" Value="4c141851-1bef-4c00-9058-8c4d97ab48fe"/>
|
||||||
<Key Name="assetID" Value="652475bc-ffb7-4a18-b6bb-7731ddeb6a51"/>
|
<Key Name="assetID" Value="652475bc-ffb7-4a18-b6bb-7731ddeb6a51"/>
|
||||||
|
@ -20,11 +17,8 @@
|
||||||
<Key Name="name" Value="me!" />
|
<Key Name="name" Value="me!" />
|
||||||
<Key Name="assetType" Value="21"/>
|
<Key Name="assetType" Value="21"/>
|
||||||
<Key Name="inventoryType" Value="20"/>
|
<Key Name="inventoryType" Value="20"/>
|
||||||
<Key Name="currentPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="nextPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647"/>
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="clap">
|
<Section Name="clap">
|
||||||
<Key Name="inventoryID" Value="a5a30fdb-613f-44fa-8bc2-7806e4da67f6"/>
|
<Key Name="inventoryID" Value="a5a30fdb-613f-44fa-8bc2-7806e4da67f6"/>
|
||||||
<Key Name="assetID" Value="712e81fd-a215-498c-ab1a-caf1f5bf950d"/>
|
<Key Name="assetID" Value="712e81fd-a215-498c-ab1a-caf1f5bf950d"/>
|
||||||
|
@ -33,11 +27,8 @@
|
||||||
<Key Name="name" Value="clap" />
|
<Key Name="name" Value="clap" />
|
||||||
<Key Name="assetType" Value="21"/>
|
<Key Name="assetType" Value="21"/>
|
||||||
<Key Name="inventoryType" Value="20"/>
|
<Key Name="inventoryType" Value="20"/>
|
||||||
<Key Name="currentPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="nextPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647"/>
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="no">
|
<Section Name="no">
|
||||||
<Key Name="inventoryID" Value="514b3ca6-1571-4f58-a24e-f58eb5cb8460"/>
|
<Key Name="inventoryID" Value="514b3ca6-1571-4f58-a24e-f58eb5cb8460"/>
|
||||||
<Key Name="assetID" Value="6c123970-0f5a-448e-920a-07bae9aadf4c"/>
|
<Key Name="assetID" Value="6c123970-0f5a-448e-920a-07bae9aadf4c"/>
|
||||||
|
@ -46,11 +37,8 @@
|
||||||
<Key Name="name" Value="no" />
|
<Key Name="name" Value="no" />
|
||||||
<Key Name="assetType" Value="21"/>
|
<Key Name="assetType" Value="21"/>
|
||||||
<Key Name="inventoryType" Value="20"/>
|
<Key Name="inventoryType" Value="20"/>
|
||||||
<Key Name="currentPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="nextPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647"/>
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="suprised">
|
<Section Name="suprised">
|
||||||
<Key Name="inventoryID" Value="120fb1f3-112b-4bc4-a7d3-a784ecc360af"/>
|
<Key Name="inventoryID" Value="120fb1f3-112b-4bc4-a7d3-a784ecc360af"/>
|
||||||
<Key Name="assetID" Value="dbaf104b-cba8-4df7-b5d3-0cb57d0d63b2"/>
|
<Key Name="assetID" Value="dbaf104b-cba8-4df7-b5d3-0cb57d0d63b2"/>
|
||||||
|
@ -59,11 +47,8 @@
|
||||||
<Key Name="name" Value="suprised" />
|
<Key Name="name" Value="suprised" />
|
||||||
<Key Name="assetType" Value="21"/>
|
<Key Name="assetType" Value="21"/>
|
||||||
<Key Name="inventoryType" Value="20"/>
|
<Key Name="inventoryType" Value="20"/>
|
||||||
<Key Name="currentPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="nextPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647"/>
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="dance2">
|
<Section Name="dance2">
|
||||||
<Key Name="inventoryID" Value="1ca0e368-5a11-4da1-8503-925a55e7c45f"/>
|
<Key Name="inventoryID" Value="1ca0e368-5a11-4da1-8503-925a55e7c45f"/>
|
||||||
<Key Name="assetID" Value="3bd1792a-6756-4ee0-a54e-3ae6493c2036"/>
|
<Key Name="assetID" Value="3bd1792a-6756-4ee0-a54e-3ae6493c2036"/>
|
||||||
|
@ -72,11 +57,8 @@
|
||||||
<Key Name="name" Value="dance2" />
|
<Key Name="name" Value="dance2" />
|
||||||
<Key Name="assetType" Value="21"/>
|
<Key Name="assetType" Value="21"/>
|
||||||
<Key Name="inventoryType" Value="20"/>
|
<Key Name="inventoryType" Value="20"/>
|
||||||
<Key Name="currentPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="nextPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647"/>
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="definitely YES">
|
<Section Name="definitely YES">
|
||||||
<Key Name="inventoryID" Value="022fa770-abb1-4266-963a-4ece4747b748"/>
|
<Key Name="inventoryID" Value="022fa770-abb1-4266-963a-4ece4747b748"/>
|
||||||
<Key Name="assetID" Value="392c292f-3d27-45ff-9437-c79c06699237"/>
|
<Key Name="assetID" Value="392c292f-3d27-45ff-9437-c79c06699237"/>
|
||||||
|
@ -85,11 +67,8 @@
|
||||||
<Key Name="name" Value="definitely YES" />
|
<Key Name="name" Value="definitely YES" />
|
||||||
<Key Name="assetType" Value="21"/>
|
<Key Name="assetType" Value="21"/>
|
||||||
<Key Name="inventoryType" Value="20"/>
|
<Key Name="inventoryType" Value="20"/>
|
||||||
<Key Name="currentPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="nextPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647"/>
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Wave">
|
<Section Name="Wave">
|
||||||
<Key Name="inventoryID" Value="6406a7c6-a690-44be-a444-ba723e50c17d"/>
|
<Key Name="inventoryID" Value="6406a7c6-a690-44be-a444-ba723e50c17d"/>
|
||||||
<Key Name="assetID" Value="cce0e317-2c49-411e-8716-f9ce3007c715"/>
|
<Key Name="assetID" Value="cce0e317-2c49-411e-8716-f9ce3007c715"/>
|
||||||
|
@ -98,11 +77,8 @@
|
||||||
<Key Name="name" Value="Wave" />
|
<Key Name="name" Value="Wave" />
|
||||||
<Key Name="assetType" Value="21"/>
|
<Key Name="assetType" Value="21"/>
|
||||||
<Key Name="inventoryType" Value="20"/>
|
<Key Name="inventoryType" Value="20"/>
|
||||||
<Key Name="currentPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="nextPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647"/>
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="take it outside">
|
<Section Name="take it outside">
|
||||||
<Key Name="inventoryID" Value="1488b988-c300-4c2e-b48a-3b8eacb93659"/>
|
<Key Name="inventoryID" Value="1488b988-c300-4c2e-b48a-3b8eacb93659"/>
|
||||||
<Key Name="assetID" Value="d082bd28-f655-43b7-a0eb-cb80db03753e"/>
|
<Key Name="assetID" Value="d082bd28-f655-43b7-a0eb-cb80db03753e"/>
|
||||||
|
@ -111,11 +87,8 @@
|
||||||
<Key Name="name" Value="take it outside" />
|
<Key Name="name" Value="take it outside" />
|
||||||
<Key Name="assetType" Value="21"/>
|
<Key Name="assetType" Value="21"/>
|
||||||
<Key Name="inventoryType" Value="20"/>
|
<Key Name="inventoryType" Value="20"/>
|
||||||
<Key Name="currentPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="nextPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647"/>
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="whoohoo!">
|
<Section Name="whoohoo!">
|
||||||
<Key Name="inventoryID" Value="18c1a2fc-17f6-4af4-a519-827b272feaac"/>
|
<Key Name="inventoryID" Value="18c1a2fc-17f6-4af4-a519-827b272feaac"/>
|
||||||
<Key Name="assetID" Value="7f7384c0-848c-4bf0-8e83-50879981e1a4"/>
|
<Key Name="assetID" Value="7f7384c0-848c-4bf0-8e83-50879981e1a4"/>
|
||||||
|
@ -124,11 +97,8 @@
|
||||||
<Key Name="name" Value="whoohoo!" />
|
<Key Name="name" Value="whoohoo!" />
|
||||||
<Key Name="assetType" Value="21"/>
|
<Key Name="assetType" Value="21"/>
|
||||||
<Key Name="inventoryType" Value="20"/>
|
<Key Name="inventoryType" Value="20"/>
|
||||||
<Key Name="currentPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="nextPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647"/>
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="raise hand">
|
<Section Name="raise hand">
|
||||||
<Key Name="inventoryID" Value="5c0afacd-bbd0-4f66-a516-4ac4e380853c"/>
|
<Key Name="inventoryID" Value="5c0afacd-bbd0-4f66-a516-4ac4e380853c"/>
|
||||||
<Key Name="assetID" Value="2d0819cf-452b-4db8-b7ac-cda443bc89e7"/>
|
<Key Name="assetID" Value="2d0819cf-452b-4db8-b7ac-cda443bc89e7"/>
|
||||||
|
@ -137,11 +107,8 @@
|
||||||
<Key Name="name" Value="raise hand" />
|
<Key Name="name" Value="raise hand" />
|
||||||
<Key Name="assetType" Value="21"/>
|
<Key Name="assetType" Value="21"/>
|
||||||
<Key Name="inventoryType" Value="20"/>
|
<Key Name="inventoryType" Value="20"/>
|
||||||
<Key Name="currentPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="nextPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647"/>
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="LOL">
|
<Section Name="LOL">
|
||||||
<Key Name="inventoryID" Value="407f6a99-1a12-43c6-bec1-8fad974c8f42"/>
|
<Key Name="inventoryID" Value="407f6a99-1a12-43c6-bec1-8fad974c8f42"/>
|
||||||
<Key Name="assetID" Value="d545ac78-09cc-4811-8700-8df1a37d7f56"/>
|
<Key Name="assetID" Value="d545ac78-09cc-4811-8700-8df1a37d7f56"/>
|
||||||
|
@ -150,11 +117,8 @@
|
||||||
<Key Name="name" Value="LOL" />
|
<Key Name="name" Value="LOL" />
|
||||||
<Key Name="assetType" Value="21"/>
|
<Key Name="assetType" Value="21"/>
|
||||||
<Key Name="inventoryType" Value="20"/>
|
<Key Name="inventoryType" Value="20"/>
|
||||||
<Key Name="currentPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="nextPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647"/>
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="dance1">
|
<Section Name="dance1">
|
||||||
<Key Name="inventoryID" Value="59cce8ab-5c0c-49be-aa3b-036f05fbd7f4"/>
|
<Key Name="inventoryID" Value="59cce8ab-5c0c-49be-aa3b-036f05fbd7f4"/>
|
||||||
<Key Name="assetID" Value="9cc5bb24-bacf-44f9-a1d0-d409e6ccfa6c"/>
|
<Key Name="assetID" Value="9cc5bb24-bacf-44f9-a1d0-d409e6ccfa6c"/>
|
||||||
|
@ -163,11 +127,8 @@
|
||||||
<Key Name="name" Value="dance1" />
|
<Key Name="name" Value="dance1" />
|
||||||
<Key Name="assetType" Value="21"/>
|
<Key Name="assetType" Value="21"/>
|
||||||
<Key Name="inventoryType" Value="20"/>
|
<Key Name="inventoryType" Value="20"/>
|
||||||
<Key Name="currentPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="nextPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647"/>
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="wink!">
|
<Section Name="wink!">
|
||||||
<Key Name="inventoryID" Value="ba33e8ab-b816-4ead-9302-c8475deb1845"/>
|
<Key Name="inventoryID" Value="ba33e8ab-b816-4ead-9302-c8475deb1845"/>
|
||||||
<Key Name="assetID" Value="67d47cd0-9634-4c99-97db-ddce9bda467c"/>
|
<Key Name="assetID" Value="67d47cd0-9634-4c99-97db-ddce9bda467c"/>
|
||||||
|
@ -176,11 +137,8 @@
|
||||||
<Key Name="name" Value="wink!" />
|
<Key Name="name" Value="wink!" />
|
||||||
<Key Name="assetType" Value="21"/>
|
<Key Name="assetType" Value="21"/>
|
||||||
<Key Name="inventoryType" Value="20"/>
|
<Key Name="inventoryType" Value="20"/>
|
||||||
<Key Name="currentPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="nextPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647"/>
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="not sure">
|
<Section Name="not sure">
|
||||||
<Key Name="inventoryID" Value="02da80eb-cad0-4cd1-9ff7-d3d3dd150fbc"/>
|
<Key Name="inventoryID" Value="02da80eb-cad0-4cd1-9ff7-d3d3dd150fbc"/>
|
||||||
<Key Name="assetID" Value="9bc46cd2-95cb-456d-9070-a4439e42af9e"/>
|
<Key Name="assetID" Value="9bc46cd2-95cb-456d-9070-a4439e42af9e"/>
|
||||||
|
@ -189,11 +147,8 @@
|
||||||
<Key Name="name" Value="not sure" />
|
<Key Name="name" Value="not sure" />
|
||||||
<Key Name="assetType" Value="21"/>
|
<Key Name="assetType" Value="21"/>
|
||||||
<Key Name="inventoryType" Value="20"/>
|
<Key Name="inventoryType" Value="20"/>
|
||||||
<Key Name="currentPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="nextPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647"/>
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="dance3">
|
<Section Name="dance3">
|
||||||
<Key Name="inventoryID" Value="05e53736-dacb-4935-a1e9-d9897b35b962"/>
|
<Key Name="inventoryID" Value="05e53736-dacb-4935-a1e9-d9897b35b962"/>
|
||||||
<Key Name="assetID" Value="fd9ad83a-4921-4b6e-8b8e-558556d9f503"/>
|
<Key Name="assetID" Value="fd9ad83a-4921-4b6e-8b8e-558556d9f503"/>
|
||||||
|
@ -202,9 +157,6 @@
|
||||||
<Key Name="name" Value="dance3" />
|
<Key Name="name" Value="dance3" />
|
||||||
<Key Name="assetType" Value="21"/>
|
<Key Name="assetType" Value="21"/>
|
||||||
<Key Name="inventoryType" Value="20"/>
|
<Key Name="inventoryType" Value="20"/>
|
||||||
<Key Name="currentPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="nextPermissions" Value="2147483647"/>
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647"/>
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
</Nini>
|
</Nini>
|
||||||
|
|
|
@ -9,10 +9,6 @@
|
||||||
<Key Name="name" Value="Example Library Item" />
|
<Key Name="name" Value="Example Library Item" />
|
||||||
<Key Name="assetType" Value="7" />
|
<Key Name="assetType" Value="7" />
|
||||||
<Key Name="inventoryType" Value="7" />
|
<Key Name="inventoryType" Value="7" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
|
|
@ -9,10 +9,6 @@
|
||||||
<Key Name="name" Value="Example Library Item" />
|
<Key Name="name" Value="Example Library Item" />
|
||||||
<Key Name="assetType" Value="7" />
|
<Key Name="assetType" Value="7" />
|
||||||
<Key Name="inventoryType" Value="7" />
|
<Key Name="inventoryType" Value="7" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
@ -24,11 +20,8 @@
|
||||||
<Key Name="name" Value="Welcome" />
|
<Key Name="name" Value="Welcome" />
|
||||||
<Key Name="assetType" Value="7" />
|
<Key Name="assetType" Value="7" />
|
||||||
<Key Name="inventoryType" Value="7" />
|
<Key Name="inventoryType" Value="7" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Example notecard">
|
<Section Name="Example notecard">
|
||||||
<Key Name="inventoryID" Value="a170ffc0-b9c7-11dc-95ff-0800200c9a66" />
|
<Key Name="inventoryID" Value="a170ffc0-b9c7-11dc-95ff-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="8d1ada50-b9c7-11dc-95ff-0800200c9a66" />
|
<Key Name="assetID" Value="8d1ada50-b9c7-11dc-95ff-0800200c9a66" />
|
||||||
|
@ -37,9 +30,6 @@
|
||||||
<Key Name="name" Value="Example notecard" />
|
<Key Name="name" Value="Example notecard" />
|
||||||
<Key Name="assetType" Value="7" />
|
<Key Name="assetType" Value="7" />
|
||||||
<Key Name="inventoryType" Value="7" />
|
<Key Name="inventoryType" Value="7" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
</Nini>
|
</Nini>
|
||||||
|
|
|
@ -9,10 +9,6 @@
|
||||||
<Key Name="name" Value="Example Library Item" />
|
<Key Name="name" Value="Example Library Item" />
|
||||||
<Key Name="assetType" Value="7" />
|
<Key Name="assetType" Value="7" />
|
||||||
<Key Name="inventoryType" Value="7" />
|
<Key Name="inventoryType" Value="7" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
|
|
@ -10,10 +10,6 @@
|
||||||
<Key Name="name" Value="Example Library Item" />
|
<Key Name="name" Value="Example Library Item" />
|
||||||
<Key Name="assetType" Value="7" />
|
<Key Name="assetType" Value="7" />
|
||||||
<Key Name="inventoryType" Value="7" />
|
<Key Name="inventoryType" Value="7" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
|
|
@ -9,10 +9,6 @@
|
||||||
<Key Name="name" Value="Example Library Item" />
|
<Key Name="name" Value="Example Library Item" />
|
||||||
<Key Name="assetType" Value="7" />
|
<Key Name="assetType" Value="7" />
|
||||||
<Key Name="inventoryType" Value="7" />
|
<Key Name="inventoryType" Value="7" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
|
|
@ -25,11 +25,8 @@
|
||||||
<Key Name="name" Value="llAbs" />
|
<Key Name="name" Value="llAbs" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="llAcos">
|
<Section Name="llAcos">
|
||||||
<Key Name="inventoryID" Value="6519bf38-b19f-11dc-8314-0800200c9a66" />
|
<Key Name="inventoryID" Value="6519bf38-b19f-11dc-8314-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="6519bf39-b19f-11dc-8314-0800200c9a66" />
|
<Key Name="assetID" Value="6519bf39-b19f-11dc-8314-0800200c9a66" />
|
||||||
|
@ -38,11 +35,8 @@
|
||||||
<Key Name="name" Value="llAcos" />
|
<Key Name="name" Value="llAcos" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="llAddToLandBanList">
|
<Section Name="llAddToLandBanList">
|
||||||
<Key Name="inventoryID" Value="7ceba3f0-b1a0-11dc-8314-0800200c9a66" />
|
<Key Name="inventoryID" Value="7ceba3f0-b1a0-11dc-8314-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="7ceba3f1-b1a0-11dc-8314-0800200c9a66" />
|
<Key Name="assetID" Value="7ceba3f1-b1a0-11dc-8314-0800200c9a66" />
|
||||||
|
@ -51,11 +45,8 @@
|
||||||
<Key Name="name" Value="llAddToLandBanList" />
|
<Key Name="name" Value="llAddToLandBanList" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="llAddToLandPassList">
|
<Section Name="llAddToLandPassList">
|
||||||
<Key Name="inventoryID" Value="609047e6-b390-11dc-8314-0800200c9a66" />
|
<Key Name="inventoryID" Value="609047e6-b390-11dc-8314-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="609047e7-b390-11dc-8314-0800200c9a66" />
|
<Key Name="assetID" Value="609047e7-b390-11dc-8314-0800200c9a66" />
|
||||||
|
@ -64,11 +55,8 @@
|
||||||
<Key Name="name" Value="llAddToLandPassList" />
|
<Key Name="name" Value="llAddToLandPassList" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="llAdjustSoundVolume">
|
<Section Name="llAdjustSoundVolume">
|
||||||
<Key Name="inventoryID" Value="56df4bcc-b393-11dc-8314-0800200c9a66" />
|
<Key Name="inventoryID" Value="56df4bcc-b393-11dc-8314-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="56df4bcd-b393-11dc-8314-0800200c9a66" />
|
<Key Name="assetID" Value="56df4bcd-b393-11dc-8314-0800200c9a66" />
|
||||||
|
@ -77,11 +65,8 @@
|
||||||
<Key Name="name" Value="llAdjustSoundVolume" />
|
<Key Name="name" Value="llAdjustSoundVolume" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="llAllowInventoryDrop">
|
<Section Name="llAllowInventoryDrop">
|
||||||
<Key Name="inventoryID" Value="54d6962c-b394-11dc-8314-0800200c9a66" />
|
<Key Name="inventoryID" Value="54d6962c-b394-11dc-8314-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="54d6962d-b394-11dc-8314-0800200c9a66" />
|
<Key Name="assetID" Value="54d6962d-b394-11dc-8314-0800200c9a66" />
|
||||||
|
@ -90,11 +75,8 @@
|
||||||
<Key Name="name" Value="llAllowInventoryDrop" />
|
<Key Name="name" Value="llAllowInventoryDrop" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="llAngleBetween">
|
<Section Name="llAngleBetween">
|
||||||
<Key Name="inventoryID" Value="6b341608-b34e-11dc-8314-0800200c9a66" />
|
<Key Name="inventoryID" Value="6b341608-b34e-11dc-8314-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="6b341609-b34e-11dc-8314-0800200c9a66" />
|
<Key Name="assetID" Value="6b341609-b34e-11dc-8314-0800200c9a66" />
|
||||||
|
@ -103,11 +85,8 @@
|
||||||
<Key Name="name" Value="llAngleBetween" />
|
<Key Name="name" Value="llAngleBetween" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="llAsin">
|
<Section Name="llAsin">
|
||||||
<Key Name="inventoryID" Value="7e7422ec-b425-11dc-8314-0800200c9a66" />
|
<Key Name="inventoryID" Value="7e7422ec-b425-11dc-8314-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="7e7422ed-b425-11dc-8314-0800200c9a66" />
|
<Key Name="assetID" Value="7e7422ed-b425-11dc-8314-0800200c9a66" />
|
||||||
|
@ -116,11 +95,8 @@
|
||||||
<Key Name="name" Value="llAsin" />
|
<Key Name="name" Value="llAsin" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="llAtan2">
|
<Section Name="llAtan2">
|
||||||
<Key Name="inventoryID" Value="7e7422ee-b425-11dc-8314-0800200c9a66" />
|
<Key Name="inventoryID" Value="7e7422ee-b425-11dc-8314-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="7e7422ef-b425-11dc-8314-0800200c9a66" />
|
<Key Name="assetID" Value="7e7422ef-b425-11dc-8314-0800200c9a66" />
|
||||||
|
@ -129,11 +105,8 @@
|
||||||
<Key Name="name" Value="llAtan2" />
|
<Key Name="name" Value="llAtan2" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="llApplyImpulse">
|
<Section Name="llApplyImpulse">
|
||||||
<Key Name="inventoryID" Value="714ec678-b419-11dc-8314-0800200c9a66" />
|
<Key Name="inventoryID" Value="714ec678-b419-11dc-8314-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="714ec679-b419-11dc-8314-0800200c9a66" />
|
<Key Name="assetID" Value="714ec679-b419-11dc-8314-0800200c9a66" />
|
||||||
|
@ -142,11 +115,8 @@
|
||||||
<Key Name="name" Value="llApplyImpulse" />
|
<Key Name="name" Value="llApplyImpulse" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="llAvatarOnSitTarget">
|
<Section Name="llAvatarOnSitTarget">
|
||||||
<Key Name="inventoryID" Value="579fc820-b426-11dc-8314-0800200c9a66" />
|
<Key Name="inventoryID" Value="579fc820-b426-11dc-8314-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="579fc821-b426-11dc-8314-0800200c9a66" />
|
<Key Name="assetID" Value="579fc821-b426-11dc-8314-0800200c9a66" />
|
||||||
|
@ -155,11 +125,8 @@
|
||||||
<Key Name="name" Value="llAvatarOnSitTarget" />
|
<Key Name="name" Value="llAvatarOnSitTarget" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<!-- B == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba004"/> -->
|
<!-- B == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba004"/> -->
|
||||||
<Section Name="llBase64ToString">
|
<Section Name="llBase64ToString">
|
||||||
<Key Name="inventoryID" Value="1d4c71d8-b428-11dc-8314-0800200c9a66" />
|
<Key Name="inventoryID" Value="1d4c71d8-b428-11dc-8314-0800200c9a66" />
|
||||||
|
@ -169,11 +136,8 @@
|
||||||
<Key Name="name" Value="llBase64ToString" />
|
<Key Name="name" Value="llBase64ToString" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<!-- C == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba005"/> -->
|
<!-- C == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba005"/> -->
|
||||||
<!-- D == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba006"/> -->
|
<!-- D == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba006"/> -->
|
||||||
<!-- E == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba007"/> -->
|
<!-- E == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba007"/> -->
|
||||||
|
@ -187,6 +151,7 @@
|
||||||
<!-- O == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba015"/> -->
|
<!-- O == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba015"/> -->
|
||||||
<!-- P == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba016"/> -->
|
<!-- P == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba016"/> -->
|
||||||
<!-- R == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba017"/> -->
|
<!-- R == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba017"/> -->
|
||||||
|
|
||||||
<Section Name="llRemoveFromLandBanList">
|
<Section Name="llRemoveFromLandBanList">
|
||||||
<Key Name="inventoryID" Value="299b2100-b392-11dc-8314-0800200c9a66" />
|
<Key Name="inventoryID" Value="299b2100-b392-11dc-8314-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="299b2101-b392-11dc-8314-0800200c9a66" />
|
<Key Name="assetID" Value="299b2101-b392-11dc-8314-0800200c9a66" />
|
||||||
|
@ -195,11 +160,8 @@
|
||||||
<Key Name="name" Value="llRemoveFromLandBanList" />
|
<Key Name="name" Value="llRemoveFromLandBanList" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="llRemoveFromLandPassList">
|
<Section Name="llRemoveFromLandPassList">
|
||||||
<Key Name="inventoryID" Value="299b2102-b392-11dc-8314-0800200c9a66" />
|
<Key Name="inventoryID" Value="299b2102-b392-11dc-8314-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="299b2103-b392-11dc-8314-0800200c9a66" />
|
<Key Name="assetID" Value="299b2103-b392-11dc-8314-0800200c9a66" />
|
||||||
|
@ -208,11 +170,8 @@
|
||||||
<Key Name="name" Value="llRemoveFromLandPassList" />
|
<Key Name="name" Value="llRemoveFromLandPassList" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="llResetLandBanList">
|
<Section Name="llResetLandBanList">
|
||||||
<Key Name="inventoryID" Value="366ac8e6-b391-11dc-8314-0800200c9a66" />
|
<Key Name="inventoryID" Value="366ac8e6-b391-11dc-8314-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="366ac8e7-b391-11dc-8314-0800200c9a66" />
|
<Key Name="assetID" Value="366ac8e7-b391-11dc-8314-0800200c9a66" />
|
||||||
|
@ -221,11 +180,8 @@
|
||||||
<Key Name="name" Value="llResetLandBanList" />
|
<Key Name="name" Value="llResetLandBanList" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="llResetLandPassList">
|
<Section Name="llResetLandPassList">
|
||||||
<Key Name="inventoryID" Value="366ac8e8-b391-11dc-8314-0800200c9a66" />
|
<Key Name="inventoryID" Value="366ac8e8-b391-11dc-8314-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="366ac8e9-b391-11dc-8314-0800200c9a66" />
|
<Key Name="assetID" Value="366ac8e9-b391-11dc-8314-0800200c9a66" />
|
||||||
|
@ -234,11 +190,8 @@
|
||||||
<Key Name="name" Value="llResetLandPassList" />
|
<Key Name="name" Value="llResetLandPassList" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<!-- S == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba018"/> -->
|
<!-- S == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba018"/> -->
|
||||||
<Section Name="llSay">
|
<Section Name="llSay">
|
||||||
<Key Name="inventoryID" Value="3af51d20-b38f-11dc-8314-0800200c9a66" />
|
<Key Name="inventoryID" Value="3af51d20-b38f-11dc-8314-0800200c9a66" />
|
||||||
|
@ -248,11 +201,8 @@
|
||||||
<Key Name="name" Value="llSay" />
|
<Key Name="name" Value="llSay" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="llSetParcelMusicURL">
|
<Section Name="llSetParcelMusicURL">
|
||||||
<Key Name="inventoryID" Value="3603a4f9-b360-11dc-8314-0800200c9a66" />
|
<Key Name="inventoryID" Value="3603a4f9-b360-11dc-8314-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="3603a4f8-b360-11dc-8314-0800200c9a66" />
|
<Key Name="assetID" Value="3603a4f8-b360-11dc-8314-0800200c9a66" />
|
||||||
|
@ -261,11 +211,8 @@
|
||||||
<Key Name="name" Value="llSetParcelMusicURL" />
|
<Key Name="name" Value="llSetParcelMusicURL" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="llSetRot">
|
<Section Name="llSetRot">
|
||||||
<Key Name="inventoryID" Value="220baef8-b376-11dc-8314-0800200c9a66" />
|
<Key Name="inventoryID" Value="220baef8-b376-11dc-8314-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="220baef9-b376-11dc-8314-0800200c9a66" />
|
<Key Name="assetID" Value="220baef9-b376-11dc-8314-0800200c9a66" />
|
||||||
|
@ -274,11 +221,8 @@
|
||||||
<Key Name="name" Value="llSetRot" />
|
<Key Name="name" Value="llSetRot" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<!-- T == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba019"/> -->
|
<!-- T == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba019"/> -->
|
||||||
<!-- U == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba020"/> -->
|
<!-- U == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba020"/> -->
|
||||||
<!-- V == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba021"/> -->
|
<!-- V == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba021"/> -->
|
||||||
|
@ -293,11 +237,8 @@
|
||||||
<Key Name="name" Value="Kan-Ed Test1" />
|
<Key Name="name" Value="Kan-Ed Test1" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Kan-Ed Test2">
|
<Section Name="Kan-Ed Test2">
|
||||||
<Key Name="inventoryID" Value="42b6ac71-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="inventoryID" Value="42b6ac71-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="42b6ac71-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="assetID" Value="42b6ac71-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
|
@ -306,11 +247,8 @@
|
||||||
<Key Name="name" Value="Kan-Ed Test2" />
|
<Key Name="name" Value="Kan-Ed Test2" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Kan-Ed Test3">
|
<Section Name="Kan-Ed Test3">
|
||||||
<Key Name="inventoryID" Value="42b6ac72-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="inventoryID" Value="42b6ac72-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="42b6ac72-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="assetID" Value="42b6ac72-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
|
@ -319,11 +257,8 @@
|
||||||
<Key Name="name" Value="Kan-Ed Test3" />
|
<Key Name="name" Value="Kan-Ed Test3" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Kan-Ed Test4">
|
<Section Name="Kan-Ed Test4">
|
||||||
<Key Name="inventoryID" Value="42b6ac73-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="inventoryID" Value="42b6ac73-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="42b6ac73-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="assetID" Value="42b6ac73-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
|
@ -332,11 +267,8 @@
|
||||||
<Key Name="name" Value="Kan-Ed Test4" />
|
<Key Name="name" Value="Kan-Ed Test4" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Kan-Ed Test5">
|
<Section Name="Kan-Ed Test5">
|
||||||
<Key Name="inventoryID" Value="42b6ac74-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="inventoryID" Value="42b6ac74-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="42b6ac74-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="assetID" Value="42b6ac74-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
|
@ -345,11 +277,8 @@
|
||||||
<Key Name="name" Value="Kan-Ed Test5" />
|
<Key Name="name" Value="Kan-Ed Test5" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Kan-Ed Test6">
|
<Section Name="Kan-Ed Test6">
|
||||||
<Key Name="inventoryID" Value="42b6ac75-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="inventoryID" Value="42b6ac75-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="42b6ac75-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="assetID" Value="42b6ac75-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
|
@ -358,11 +287,8 @@
|
||||||
<Key Name="name" Value="Kan-Ed Test6" />
|
<Key Name="name" Value="Kan-Ed Test6" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Kan-Ed Test7">
|
<Section Name="Kan-Ed Test7">
|
||||||
<Key Name="inventoryID" Value="42b6ac76-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="inventoryID" Value="42b6ac76-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="42b6ac76-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="assetID" Value="42b6ac76-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
|
@ -371,11 +297,8 @@
|
||||||
<Key Name="name" Value="Kan-Ed Test7" />
|
<Key Name="name" Value="Kan-Ed Test7" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Kan-Ed Test8">
|
<Section Name="Kan-Ed Test8">
|
||||||
<Key Name="inventoryID" Value="42b6ac77-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="inventoryID" Value="42b6ac77-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="42b6ac77-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="assetID" Value="42b6ac77-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
|
@ -384,11 +307,8 @@
|
||||||
<Key Name="name" Value="Kan-Ed Test8" />
|
<Key Name="name" Value="Kan-Ed Test8" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Kan-Ed Test9">
|
<Section Name="Kan-Ed Test9">
|
||||||
<Key Name="inventoryID" Value="42b6ac78-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="inventoryID" Value="42b6ac78-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="42b6ac78-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="assetID" Value="42b6ac78-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
|
@ -397,11 +317,8 @@
|
||||||
<Key Name="name" Value="Kan-Ed Test9" />
|
<Key Name="name" Value="Kan-Ed Test9" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Kan-Ed Test10">
|
<Section Name="Kan-Ed Test10">
|
||||||
<Key Name="inventoryID" Value="42b6ac79-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="inventoryID" Value="42b6ac79-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="42b6ac79-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="assetID" Value="42b6ac79-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
|
@ -410,11 +327,8 @@
|
||||||
<Key Name="name" Value="Kan-Ed Test10" />
|
<Key Name="name" Value="Kan-Ed Test10" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Kan-Ed Test11">
|
<Section Name="Kan-Ed Test11">
|
||||||
<Key Name="inventoryID" Value="42b6ac7a-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="inventoryID" Value="42b6ac7a-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="42b6ac7a-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="assetID" Value="42b6ac7a-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
|
@ -423,11 +337,8 @@
|
||||||
<Key Name="name" Value="Kan-Ed Test11" />
|
<Key Name="name" Value="Kan-Ed Test11" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Kan-Ed Test12">
|
<Section Name="Kan-Ed Test12">
|
||||||
<Key Name="inventoryID" Value="42b6ac7b-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="inventoryID" Value="42b6ac7b-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="42b6ac7b-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="assetID" Value="42b6ac7b-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
|
@ -436,11 +347,8 @@
|
||||||
<Key Name="name" Value="Kan-Ed Test12" />
|
<Key Name="name" Value="Kan-Ed Test12" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Kan-Ed Test13">
|
<Section Name="Kan-Ed Test13">
|
||||||
<Key Name="inventoryID" Value="42b6ac7c-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="inventoryID" Value="42b6ac7c-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="42b6ac7c-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="assetID" Value="42b6ac7c-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
|
@ -449,11 +357,8 @@
|
||||||
<Key Name="name" Value="Kan-Ed Test13" />
|
<Key Name="name" Value="Kan-Ed Test13" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Kan-Ed Test14">
|
<Section Name="Kan-Ed Test14">
|
||||||
<Key Name="inventoryID" Value="42b6ac7d-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="inventoryID" Value="42b6ac7d-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="42b6ac7d-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="assetID" Value="42b6ac7d-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
|
@ -462,11 +367,8 @@
|
||||||
<Key Name="name" Value="Kan-Ed Test14" />
|
<Key Name="name" Value="Kan-Ed Test14" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Kan-Ed Test15">
|
<Section Name="Kan-Ed Test15">
|
||||||
<Key Name="inventoryID" Value="42b6ac7e-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="inventoryID" Value="42b6ac7e-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="42b6ac7e-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="assetID" Value="42b6ac7e-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
|
@ -475,11 +377,8 @@
|
||||||
<Key Name="name" Value="Kan-Ed Test15" />
|
<Key Name="name" Value="Kan-Ed Test15" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Kan-Ed Test16">
|
<Section Name="Kan-Ed Test16">
|
||||||
<Key Name="inventoryID" Value="42b6ac7f-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="inventoryID" Value="42b6ac7f-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
<Key Name="assetID" Value="42b6ac7f-d21f-11dd-ad8b-0800200c9a66" />
|
<Key Name="assetID" Value="42b6ac7f-d21f-11dd-ad8b-0800200c9a66" />
|
||||||
|
@ -488,13 +387,11 @@
|
||||||
<Key Name="name" Value="Kan-Ed Test16" />
|
<Key Name="name" Value="Kan-Ed Test16" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<!-- .Other testing scripts == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba025"/> -->
|
<!-- .Other testing scripts == <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba025"/> -->
|
||||||
<!-- OpenSim Specific Scripts == <Key Name="folderID" Value="284858c8-9391-6bf1-ddf5-b936f73de853"/> -->
|
<!-- OpenSim Specific Scripts == <Key Name="folderID" Value="284858c8-9391-6bf1-ddf5-b936f73de853"/> -->
|
||||||
|
|
||||||
<Section Name="osTextBoard">
|
<Section Name="osTextBoard">
|
||||||
<Key Name="inventoryID" Value="2ddcb059-20c5-d169-4c42-673f16d3284b" />
|
<Key Name="inventoryID" Value="2ddcb059-20c5-d169-4c42-673f16d3284b" />
|
||||||
<Key Name="assetID" Value="2ddcb059-20c5-d169-4c42-673f16d3284b" />
|
<Key Name="assetID" Value="2ddcb059-20c5-d169-4c42-673f16d3284b" />
|
||||||
|
@ -503,11 +400,8 @@
|
||||||
<Key Name="name" Value="osTextBoard" />
|
<Key Name="name" Value="osTextBoard" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="osWeatherMap">
|
<Section Name="osWeatherMap">
|
||||||
<Key Name="inventoryID" Value="d63ad3ec-b687-6c38-410d-31ba3e50ce4d" />
|
<Key Name="inventoryID" Value="d63ad3ec-b687-6c38-410d-31ba3e50ce4d" />
|
||||||
<Key Name="assetID" Value="d63ad3ec-b687-6c38-410d-31ba3e50ce4d" />
|
<Key Name="assetID" Value="d63ad3ec-b687-6c38-410d-31ba3e50ce4d" />
|
||||||
|
@ -516,11 +410,8 @@
|
||||||
<Key Name="name" Value="osWeatherMap" />
|
<Key Name="name" Value="osWeatherMap" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="GrafittiBoard">
|
<Section Name="GrafittiBoard">
|
||||||
<Key Name="inventoryID" Value="81305ee4-8caa-9e0a-69a4-76ed57df0c8f" />
|
<Key Name="inventoryID" Value="81305ee4-8caa-9e0a-69a4-76ed57df0c8f" />
|
||||||
<Key Name="assetID" Value="81305ee4-8caa-9e0a-69a4-76ed57df0c8f" />
|
<Key Name="assetID" Value="81305ee4-8caa-9e0a-69a4-76ed57df0c8f" />
|
||||||
|
@ -529,9 +420,5 @@
|
||||||
<Key Name="name" Value="GrafittiBoard" />
|
<Key Name="name" Value="GrafittiBoard" />
|
||||||
<Key Name="assetType" Value="10" />
|
<Key Name="assetType" Value="10" />
|
||||||
<Key Name="inventoryType" Value="10" />
|
<Key Name="inventoryType" Value="10" />
|
||||||
<Key Name="currentPermissions" Value="257487132" />
|
|
||||||
<Key Name="nextPermissions" Value="257487132" />
|
|
||||||
<Key Name="everyonePermissions" Value="257487132" />
|
|
||||||
<Key Name="basePermissions" Value="257487132" />
|
|
||||||
</Section>
|
</Section>
|
||||||
</Nini>
|
</Nini>
|
||||||
|
|
|
@ -9,10 +9,6 @@
|
||||||
<Key Name="name" Value="Example Library Item" />
|
<Key Name="name" Value="Example Library Item" />
|
||||||
<Key Name="assetType" Value="7" />
|
<Key Name="assetType" Value="7" />
|
||||||
<Key Name="inventoryType" Value="7" />
|
<Key Name="inventoryType" Value="7" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
|
|
@ -9,10 +9,6 @@
|
||||||
<Key Name="name" Value="Example Library Item" />
|
<Key Name="name" Value="Example Library Item" />
|
||||||
<Key Name="assetType" Value="7" />
|
<Key Name="assetType" Value="7" />
|
||||||
<Key Name="inventoryType" Value="7" />
|
<Key Name="inventoryType" Value="7" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
@ -24,11 +20,8 @@
|
||||||
<Key Name="name" Value="4-tile2" />
|
<Key Name="name" Value="4-tile2" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="4-tile3 Texture">
|
<Section Name="4-tile3 Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001001" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001001" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001001" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001001" />
|
||||||
|
@ -37,11 +30,8 @@
|
||||||
<Key Name="name" Value="4-tile3" />
|
<Key Name="name" Value="4-tile3" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="brick1_256 Texture">
|
<Section Name="brick1_256 Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001002" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001002" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001002" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001002" />
|
||||||
|
@ -50,11 +40,8 @@
|
||||||
<Key Name="name" Value="brick1_256" />
|
<Key Name="name" Value="brick1_256" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="brick2_256 Texture">
|
<Section Name="brick2_256 Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001003" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001003" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001003" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001003" />
|
||||||
|
@ -63,11 +50,8 @@
|
||||||
<Key Name="name" Value="brick2_256" />
|
<Key Name="name" Value="brick2_256" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="brick_mono Texture">
|
<Section Name="brick_mono Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001004" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001004" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001004" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001004" />
|
||||||
|
@ -76,11 +60,8 @@
|
||||||
<Key Name="name" Value="brick_mono" />
|
<Key Name="name" Value="brick_mono" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="cedar Texture">
|
<Section Name="cedar Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001005" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001005" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001005" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001005" />
|
||||||
|
@ -89,11 +70,8 @@
|
||||||
<Key Name="name" Value="cedar" />
|
<Key Name="name" Value="cedar" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="cement_block Texture">
|
<Section Name="cement_block Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001006" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001006" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001006" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001006" />
|
||||||
|
@ -102,11 +80,8 @@
|
||||||
<Key Name="name" Value="cement_block" />
|
<Key Name="name" Value="cement_block" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="clear Texture">
|
<Section Name="clear Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001007" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001007" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001007" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001007" />
|
||||||
|
@ -115,11 +90,8 @@
|
||||||
<Key Name="name" Value="clear" />
|
<Key Name="name" Value="clear" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="cobbles Texture">
|
<Section Name="cobbles Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001008" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001008" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001008" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001008" />
|
||||||
|
@ -128,11 +100,8 @@
|
||||||
<Key Name="name" Value="cobbles" />
|
<Key Name="name" Value="cobbles" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="creambrick Texture">
|
<Section Name="creambrick Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001009" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001009" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001009" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001009" />
|
||||||
|
@ -141,11 +110,8 @@
|
||||||
<Key Name="name" Value="creambrick" />
|
<Key Name="name" Value="creambrick" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="fgrass Texture">
|
<Section Name="fgrass Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001010" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001010" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001010" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001010" />
|
||||||
|
@ -154,11 +120,8 @@
|
||||||
<Key Name="name" Value="fgrass" />
|
<Key Name="name" Value="fgrass" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="glasstile2 Texture">
|
<Section Name="glasstile2 Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001011" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001011" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001011" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001011" />
|
||||||
|
@ -167,11 +130,8 @@
|
||||||
<Key Name="name" Value="glasstile2" />
|
<Key Name="name" Value="glasstile2" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="graniteblock Texture">
|
<Section Name="graniteblock Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001012" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001012" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001012" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001012" />
|
||||||
|
@ -180,11 +140,8 @@
|
||||||
<Key Name="name" Value="graniteblock" />
|
<Key Name="name" Value="graniteblock" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="grass Texture">
|
<Section Name="grass Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001013" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001013" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001013" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001013" />
|
||||||
|
@ -193,11 +150,8 @@
|
||||||
<Key Name="name" Value="grass" />
|
<Key Name="name" Value="grass" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="gravel Texture">
|
<Section Name="gravel Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001014" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001014" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001014" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001014" />
|
||||||
|
@ -206,11 +160,8 @@
|
||||||
<Key Name="name" Value="gravel" />
|
<Key Name="name" Value="gravel" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="greybrick Texture">
|
<Section Name="greybrick Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001015" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001015" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001015" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001015" />
|
||||||
|
@ -219,11 +170,8 @@
|
||||||
<Key Name="name" Value="greybrick" />
|
<Key Name="name" Value="greybrick" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="ivy Texture">
|
<Section Name="ivy Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001016" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001016" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001016" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001016" />
|
||||||
|
@ -232,11 +180,8 @@
|
||||||
<Key Name="name" Value="ivy" />
|
<Key Name="name" Value="ivy" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="mahogany Texture">
|
<Section Name="mahogany Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001017" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001017" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001017" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001017" />
|
||||||
|
@ -245,11 +190,8 @@
|
||||||
<Key Name="name" Value="mahogany" />
|
<Key Name="name" Value="mahogany" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="maple Texture">
|
<Section Name="maple Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001018" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001018" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001018" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001018" />
|
||||||
|
@ -258,11 +200,8 @@
|
||||||
<Key Name="name" Value="maple" />
|
<Key Name="name" Value="maple" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="mosaic02 Texture">
|
<Section Name="mosaic02 Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001019" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001019" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001019" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001019" />
|
||||||
|
@ -271,11 +210,8 @@
|
||||||
<Key Name="name" Value="mosaic02" />
|
<Key Name="name" Value="mosaic02" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="palm1 Texture">
|
<Section Name="palm1 Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001020" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001020" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001020" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001020" />
|
||||||
|
@ -284,11 +220,8 @@
|
||||||
<Key Name="name" Value="palm1" />
|
<Key Name="name" Value="palm1" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="papaya Texture">
|
<Section Name="papaya Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001021" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001021" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001021" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001021" />
|
||||||
|
@ -297,11 +230,8 @@
|
||||||
<Key Name="name" Value="papaya" />
|
<Key Name="name" Value="papaya" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="papaya_bark Texture">
|
<Section Name="papaya_bark Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001022" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001022" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001022" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001022" />
|
||||||
|
@ -310,11 +240,8 @@
|
||||||
<Key Name="name" Value="papaya_bark" />
|
<Key Name="name" Value="papaya_bark" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="pastelbrick Texture">
|
<Section Name="pastelbrick Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001023" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001023" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001023" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001023" />
|
||||||
|
@ -323,11 +250,8 @@
|
||||||
<Key Name="name" Value="pastelbrick" />
|
<Key Name="name" Value="pastelbrick" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="pine1_10m Texture">
|
<Section Name="pine1_10m Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001024" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001024" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001024" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001024" />
|
||||||
|
@ -336,11 +260,8 @@
|
||||||
<Key Name="name" Value="pine1_10m" />
|
<Key Name="name" Value="pine1_10m" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="poplar Texture">
|
<Section Name="poplar Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001025" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001025" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001025" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001025" />
|
||||||
|
@ -349,11 +270,8 @@
|
||||||
<Key Name="name" Value="poplar" />
|
<Key Name="name" Value="poplar" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="redtri_tile Texture">
|
<Section Name="redtri_tile Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001026" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001026" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001026" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001026" />
|
||||||
|
@ -362,11 +280,8 @@
|
||||||
<Key Name="name" Value="redtri_tile" />
|
<Key Name="name" Value="redtri_tile" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="rockbuilding Texture">
|
<Section Name="rockbuilding Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001027" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001027" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001027" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001027" />
|
||||||
|
@ -375,11 +290,8 @@
|
||||||
<Key Name="name" Value="rockbuilding" />
|
<Key Name="name" Value="rockbuilding" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="rockwallbig Texture">
|
<Section Name="rockwallbig Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001028" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001028" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001028" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001028" />
|
||||||
|
@ -388,11 +300,8 @@
|
||||||
<Key Name="name" Value="rockwallbig" />
|
<Key Name="name" Value="rockwallbig" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="roof01 Texture">
|
<Section Name="roof01 Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001029" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001029" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001029" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001029" />
|
||||||
|
@ -401,11 +310,8 @@
|
||||||
<Key Name="name" Value="roof01" />
|
<Key Name="name" Value="roof01" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="rooftiles1 Texture">
|
<Section Name="rooftiles1 Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001030" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001030" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001030" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001030" />
|
||||||
|
@ -414,11 +320,8 @@
|
||||||
<Key Name="name" Value="rooftiles1" />
|
<Key Name="name" Value="rooftiles1" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="rooftiles2_peach Texture">
|
<Section Name="rooftiles2_peach Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001031" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001031" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001031" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001031" />
|
||||||
|
@ -427,11 +330,8 @@
|
||||||
<Key Name="name" Value="rooftiles2_peach" />
|
<Key Name="name" Value="rooftiles2_peach" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="rooftiles2_roy Texture">
|
<Section Name="rooftiles2_roy Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001032" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001032" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001032" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001032" />
|
||||||
|
@ -440,11 +340,8 @@
|
||||||
<Key Name="name" Value="rooftiles2_roy" />
|
<Key Name="name" Value="rooftiles2_roy" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="saguaro_8m Texture">
|
<Section Name="saguaro_8m Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001033" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001033" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001033" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001033" />
|
||||||
|
@ -453,11 +350,8 @@
|
||||||
<Key Name="name" Value="saguaro_8m" />
|
<Key Name="name" Value="saguaro_8m" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="seawater Texture">
|
<Section Name="seawater Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001034" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001034" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001034" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001034" />
|
||||||
|
@ -466,11 +360,8 @@
|
||||||
<Key Name="name" Value="seawater" />
|
<Key Name="name" Value="seawater" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="snow1 Texture">
|
<Section Name="snow1 Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001035" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001035" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001035" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001035" />
|
||||||
|
@ -479,11 +370,8 @@
|
||||||
<Key Name="name" Value="snow1" />
|
<Key Name="name" Value="snow1" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="steel Texture">
|
<Section Name="steel Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001036" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001036" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001036" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001036" />
|
||||||
|
@ -492,11 +380,8 @@
|
||||||
<Key Name="name" Value="steel" />
|
<Key Name="name" Value="steel" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="stone1wall Texture">
|
<Section Name="stone1wall Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001037" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001037" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001037" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001037" />
|
||||||
|
@ -505,11 +390,8 @@
|
||||||
<Key Name="name" Value="stone1wall" />
|
<Key Name="name" Value="stone1wall" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="stonetile Texture">
|
<Section Name="stonetile Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001038" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001038" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001038" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001038" />
|
||||||
|
@ -518,11 +400,8 @@
|
||||||
<Key Name="name" Value="stonetile" />
|
<Key Name="name" Value="stonetile" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="street2 Texture">
|
<Section Name="street2 Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001039" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001039" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001039" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001039" />
|
||||||
|
@ -531,11 +410,8 @@
|
||||||
<Key Name="name" Value="street2" />
|
<Key Name="name" Value="street2" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="thatch Texture">
|
<Section Name="thatch Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001040" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001040" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001040" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001040" />
|
||||||
|
@ -544,11 +420,8 @@
|
||||||
<Key Name="name" Value="thatch" />
|
<Key Name="name" Value="thatch" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="water1 Texture">
|
<Section Name="water1 Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001041" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001041" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001041" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001041" />
|
||||||
|
@ -557,11 +430,8 @@
|
||||||
<Key Name="name" Value="water1" />
|
<Key Name="name" Value="water1" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="water3 Texture">
|
<Section Name="water3 Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001042" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001042" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001042" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001042" />
|
||||||
|
@ -570,11 +440,8 @@
|
||||||
<Key Name="name" Value="water3" />
|
<Key Name="name" Value="water3" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="wood1 Texture">
|
<Section Name="wood1 Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001043" />
|
<Key Name="inventoryID" Value="00000000-0000-2222-4444-100000001043" />
|
||||||
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001043" />
|
<Key Name="assetID" Value="00000000-0000-2222-3333-100000001043" />
|
||||||
|
@ -583,11 +450,8 @@
|
||||||
<Key Name="name" Value="wood1" />
|
<Key Name="name" Value="wood1" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="bricks Texture">
|
<Section Name="bricks Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-9999-000000000001"/>
|
<Key Name="inventoryID" Value="00000000-0000-2222-9999-000000000001"/>
|
||||||
<Key Name="assetID" Value="00000000-0000-1111-9999-000000000001"/>
|
<Key Name="assetID" Value="00000000-0000-1111-9999-000000000001"/>
|
||||||
|
@ -596,11 +460,8 @@
|
||||||
<Key Name="name" Value="bricks" />
|
<Key Name="name" Value="bricks" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="granite Texture">
|
<Section Name="granite Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-9999-000000000004"/>
|
<Key Name="inventoryID" Value="00000000-0000-2222-9999-000000000004"/>
|
||||||
<Key Name="assetID" Value="00000000-0000-1111-9999-000000000004"/>
|
<Key Name="assetID" Value="00000000-0000-1111-9999-000000000004"/>
|
||||||
|
@ -609,11 +470,8 @@
|
||||||
<Key Name="name" Value="granite" />
|
<Key Name="name" Value="granite" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="hardwood Texture">
|
<Section Name="hardwood Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-9999-000000000005"/>
|
<Key Name="inventoryID" Value="00000000-0000-2222-9999-000000000005"/>
|
||||||
<Key Name="assetID" Value="00000000-0000-1111-9999-000000000005"/>
|
<Key Name="assetID" Value="00000000-0000-1111-9999-000000000005"/>
|
||||||
|
@ -622,11 +480,8 @@
|
||||||
<Key Name="name" Value="hardwood" />
|
<Key Name="name" Value="hardwood" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="rocks Texture">
|
<Section Name="rocks Texture">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-9999-000000000003"/>
|
<Key Name="inventoryID" Value="00000000-0000-2222-9999-000000000003"/>
|
||||||
<Key Name="assetID" Value="00000000-0000-1111-9999-000000000003"/>
|
<Key Name="assetID" Value="00000000-0000-1111-9999-000000000003"/>
|
||||||
|
@ -635,10 +490,6 @@
|
||||||
<Key Name="name" Value="rocks" />
|
<Key Name="name" Value="rocks" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Terrain Dirt">
|
<Section Name="Terrain Dirt">
|
||||||
|
@ -649,11 +500,8 @@
|
||||||
<Key Name="name" Value="Terrain Dirt" />
|
<Key Name="name" Value="Terrain Dirt" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Terrain Grass">
|
<Section Name="Terrain Grass">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-9999-000000000007"/>
|
<Key Name="inventoryID" Value="00000000-0000-2222-9999-000000000007"/>
|
||||||
<Key Name="assetID" Value="abb783e6-3e93-26c0-248a-247666855da3"/>
|
<Key Name="assetID" Value="abb783e6-3e93-26c0-248a-247666855da3"/>
|
||||||
|
@ -662,11 +510,8 @@
|
||||||
<Key Name="name" Value="Terrain Grass" />
|
<Key Name="name" Value="Terrain Grass" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Terrain Mountain">
|
<Section Name="Terrain Mountain">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-9999-000000000008"/>
|
<Key Name="inventoryID" Value="00000000-0000-2222-9999-000000000008"/>
|
||||||
<Key Name="assetID" Value="179cdabd-398a-9b6b-1391-4dc333ba321f"/>
|
<Key Name="assetID" Value="179cdabd-398a-9b6b-1391-4dc333ba321f"/>
|
||||||
|
@ -675,11 +520,8 @@
|
||||||
<Key Name="name" Value="Terrain Mountain" />
|
<Key Name="name" Value="Terrain Mountain" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Terrain Rock">
|
<Section Name="Terrain Rock">
|
||||||
<Key Name="inventoryID" Value="00000000-0000-2222-9999-000000000009"/>
|
<Key Name="inventoryID" Value="00000000-0000-2222-9999-000000000009"/>
|
||||||
<Key Name="assetID" Value="beb169c7-11ea-fff2-efe5-0f24dc881df2"/>
|
<Key Name="assetID" Value="beb169c7-11ea-fff2-efe5-0f24dc881df2"/>
|
||||||
|
@ -688,10 +530,6 @@
|
||||||
<Key Name="name" Value="Terrain Rock" />
|
<Key Name="name" Value="Terrain Rock" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Blank Texture">
|
<Section Name="Blank Texture">
|
||||||
|
@ -702,10 +540,6 @@
|
||||||
<Key Name="name" Value="Blank Texture" />
|
<Key Name="name" Value="Blank Texture" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Default Media Texture">
|
<Section Name="Default Media Texture">
|
||||||
|
@ -716,10 +550,6 @@
|
||||||
<Key Name="name" Value="Default Media Texture" />
|
<Key Name="name" Value="Default Media Texture" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section Name="Default Transparent Texture">
|
<Section Name="Default Transparent Texture">
|
||||||
|
@ -730,9 +560,5 @@
|
||||||
<Key Name="name" Value="Default Transparent Texture" />
|
<Key Name="name" Value="Default Transparent Texture" />
|
||||||
<Key Name="assetType" Value="0" />
|
<Key Name="assetType" Value="0" />
|
||||||
<Key Name="inventoryType" Value="0" />
|
<Key Name="inventoryType" Value="0" />
|
||||||
<Key Name="currentPermissions" Value="2147483647" />
|
|
||||||
<Key Name="nextPermissions" Value="2147483647" />
|
|
||||||
<Key Name="everyonePermissions" Value="2147483647" />
|
|
||||||
<Key Name="basePermissions" Value="2147483647" />
|
|
||||||
</Section>
|
</Section>
|
||||||
</Nini>
|
</Nini>
|
||||||
|
|
Loading…
Reference in New Issue