Merge branch 'master' into bulletsim

bulletsim
Mic Bowman 2011-08-05 11:13:02 -07:00
commit c3f579046c
80 changed files with 2093 additions and 2018 deletions

View File

@ -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());
/* /*

View File

@ -168,8 +168,8 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory.Tests
float x = Convert.ToSingle(rdata.Parameters[PARM_MOVE_X]); float x = Convert.ToSingle(rdata.Parameters[PARM_MOVE_X]);
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)
{ {

View File

@ -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)
{ {

View File

@ -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++)

View File

@ -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");

View File

@ -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);

View File

@ -27,13 +27,15 @@
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
{ {
public class InventoryFolderImpl : InventoryFolderBase public class InventoryFolderImpl : InventoryFolderBase
{ {
//private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public static readonly string PATH_DELIMITER = "/"; public static readonly string PATH_DELIMITER = "/";
@ -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);
} }
} }

View File

@ -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);
} }

View File

@ -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

View File

@ -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;

View File

@ -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:

View File

@ -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);

View File

@ -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)

View File

@ -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;

View File

@ -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?

View File

@ -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);
} }

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -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)
{ {

View File

@ -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(

View File

@ -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;
} }

View File

@ -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;
} }
} }

View File

@ -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);
} }
} }
} }

View File

@ -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;
} }
} }
} }

View File

@ -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");

View File

@ -470,53 +470,48 @@ 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); SendLandUpdate(clientAvatar);
SendOutNearestBanLine(clientAvatar.ControllingClient);
if (clientAvatar != null) ILandObject parcel = GetLandObject(clientAvatar.AbsolutePosition.X, clientAvatar.AbsolutePosition.Y);
if (parcel != null)
{ {
SendLandUpdate(clientAvatar); if (clientAvatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT &&
SendOutNearestBanLine(remote_client); clientAvatar.sentMessageAboutRestrictedParcelFlyingDown)
ILandObject parcel = GetLandObject(clientAvatar.AbsolutePosition.X, clientAvatar.AbsolutePosition.Y);
if (parcel != null)
{ {
if (clientAvatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT && EventManagerOnAvatarEnteringNewParcel(clientAvatar, parcel.LandData.LocalID,
clientAvatar.sentMessageAboutRestrictedParcelFlyingDown) m_scene.RegionInfo.RegionID);
//They are going under the safety line!
if (!parcel.IsBannedFromLand(clientAvatar.UUID))
{ {
EventManagerOnAvatarEnteringNewParcel(clientAvatar, parcel.LandData.LocalID, clientAvatar.sentMessageAboutRestrictedParcelFlyingDown = false;
m_scene.RegionInfo.RegionID);
//They are going under the safety line!
if (!parcel.IsBannedFromLand(clientAvatar.UUID))
{
clientAvatar.sentMessageAboutRestrictedParcelFlyingDown = false;
}
} }
else if (clientAvatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT && }
parcel.IsBannedFromLand(clientAvatar.UUID)) else if (clientAvatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT &&
parcel.IsBannedFromLand(clientAvatar.UUID))
{
//once we've sent the message once, keep going toward the target until we are done
if (forcedPosition.ContainsKey(clientAvatar.ControllingClient.AgentId))
{ {
//once we've sent the message once, keep going toward the target until we are done SendYouAreBannedNotice(clientAvatar);
if (forcedPosition.ContainsKey(clientAvatar.ControllingClient.AgentId)) ForceAvatarToPosition(clientAvatar, m_scene.GetNearestAllowedPosition(clientAvatar));
{
SendYouAreBannedNotice(clientAvatar);
ForceAvatarToPosition(clientAvatar, m_scene.GetNearestAllowedPosition(clientAvatar));
}
} }
else if (parcel.IsRestrictedFromLand(clientAvatar.UUID)) }
else if (parcel.IsRestrictedFromLand(clientAvatar.UUID))
{
//once we've sent the message once, keep going toward the target until we are done
if (forcedPosition.ContainsKey(clientAvatar.ControllingClient.AgentId))
{ {
//once we've sent the message once, keep going toward the target until we are done SendYouAreRestrictedNotice(clientAvatar);
if (forcedPosition.ContainsKey(clientAvatar.ControllingClient.AgentId)) ForceAvatarToPosition(clientAvatar, m_scene.GetNearestAllowedPosition(clientAvatar));
{
SendYouAreRestrictedNotice(clientAvatar);
ForceAvatarToPosition(clientAvatar, m_scene.GetNearestAllowedPosition(clientAvatar));
}
}
else
{
//when we are finally in a safe place, lets release the forced position lock
forcedPosition.Remove(clientAvatar.ControllingClient.AgentId);
} }
} }
else
{
//when we are finally in a safe place, lets release the forced position lock
forcedPosition.Remove(clientAvatar.ControllingClient.AgentId);
}
} }
} }

View File

@ -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");

View File

@ -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);

View File

@ -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)
{ {
} }

View File

@ -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);
} }
} }

View File

@ -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);
} }

View File

@ -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)
{ {

View File

@ -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,

View File

@ -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>

View File

@ -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

View File

@ -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,95 +1751,110 @@ namespace OpenSim.Region.Framework.Scenes
return part; return part;
} }
/// <summary>
/// Do a physics property update for a NINJA joint.
/// </summary>
/// <param name="UsePhysics"></param>
/// <param name="isNew"></param>
protected void DoPhysicsPropertyUpdateForNinjaJoint(bool UsePhysics, bool isNew)
{
if (UsePhysics)
{
// by turning a joint proxy object physical, we cause creation of a joint in the ODE scene.
// note that, as a special case, joints have no bodies or geoms in the physics scene, even though they are physical.
PhysicsJointType jointType;
if (IsHingeJoint())
{
jointType = PhysicsJointType.Hinge;
}
else if (IsBallJoint())
{
jointType = PhysicsJointType.Ball;
}
else
{
jointType = PhysicsJointType.Ball;
}
List<string> bodyNames = new List<string>();
string RawParams = Description;
string[] jointParams = RawParams.Split(" ".ToCharArray(), System.StringSplitOptions.RemoveEmptyEntries);
string trackedBodyName = null;
if (jointParams.Length >= 2)
{
for (int iBodyName = 0; iBodyName < 2; iBodyName++)
{
string bodyName = jointParams[iBodyName];
bodyNames.Add(bodyName);
if (bodyName != "NULL")
{
if (trackedBodyName == null)
{
trackedBodyName = bodyName;
}
}
}
}
SceneObjectPart trackedBody = m_parentGroup.Scene.GetSceneObjectPart(trackedBodyName); // FIXME: causes a sequential lookup
Quaternion localRotation = Quaternion.Identity;
if (trackedBody != null)
{
localRotation = Quaternion.Inverse(trackedBody.RotationOffset) * this.RotationOffset;
}
else
{
// error, output it below
}
PhysicsJoint joint;
joint = m_parentGroup.Scene.PhysicsScene.RequestJointCreation(Name, jointType,
AbsolutePosition,
this.RotationOffset,
Description,
bodyNames,
trackedBodyName,
localRotation);
if (trackedBody == null)
{
ParentGroup.Scene.jointErrorMessage(joint, "warning: tracked body name not found! joint location will not be updated properly. joint: " + Name);
}
}
else
{
if (isNew)
{
// if the joint proxy is new, and it is not physical, do nothing. There is no joint in ODE to
// delete, and if we try to delete it, due to asynchronous processing, the deletion request
// will get processed later at an indeterminate time, which could cancel a later-arriving
// joint creation request.
}
else
{
// here we turn off the joint object, so remove the joint from the physics scene
m_parentGroup.Scene.PhysicsScene.RequestJointDeletion(Name); // FIXME: what if the name changed?
// make sure client isn't interpolating the joint proxy object
Velocity = Vector3.Zero;
AngularVelocity = Vector3.Zero;
Acceleration = Vector3.Zero;
}
}
}
/// <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) public void DoPhysicsPropertyUpdate(bool UsePhysics, bool isNew)
{ {
if (IsJoint()) if (IsJoint())
{ {
if (UsePhysics) DoPhysicsPropertyUpdateForNinjaJoint(UsePhysics, isNew);
{
// by turning a joint proxy object physical, we cause creation of a joint in the ODE scene.
// note that, as a special case, joints have no bodies or geoms in the physics scene, even though they are physical.
PhysicsJointType jointType;
if (IsHingeJoint())
{
jointType = PhysicsJointType.Hinge;
}
else if (IsBallJoint())
{
jointType = PhysicsJointType.Ball;
}
else
{
jointType = PhysicsJointType.Ball;
}
List<string> bodyNames = new List<string>();
string RawParams = Description;
string[] jointParams = RawParams.Split(" ".ToCharArray(), System.StringSplitOptions.RemoveEmptyEntries);
string trackedBodyName = null;
if (jointParams.Length >= 2)
{
for (int iBodyName = 0; iBodyName < 2; iBodyName++)
{
string bodyName = jointParams[iBodyName];
bodyNames.Add(bodyName);
if (bodyName != "NULL")
{
if (trackedBodyName == null)
{
trackedBodyName = bodyName;
}
}
}
}
SceneObjectPart trackedBody = m_parentGroup.Scene.GetSceneObjectPart(trackedBodyName); // FIXME: causes a sequential lookup
Quaternion localRotation = Quaternion.Identity;
if (trackedBody != null)
{
localRotation = Quaternion.Inverse(trackedBody.RotationOffset) * this.RotationOffset;
}
else
{
// error, output it below
}
PhysicsJoint joint;
joint = m_parentGroup.Scene.PhysicsScene.RequestJointCreation(Name, jointType,
AbsolutePosition,
this.RotationOffset,
Description,
bodyNames,
trackedBodyName,
localRotation);
if (trackedBody == null)
{
ParentGroup.Scene.jointErrorMessage(joint, "warning: tracked body name not found! joint location will not be updated properly. joint: " + Name);
}
}
else
{
if (isNew)
{
// if the joint proxy is new, and it is not physical, do nothing. There is no joint in ODE to
// delete, and if we try to delete it, due to asynchronous processing, the deletion request
// will get processed later at an indeterminate time, which could cancel a later-arriving
// joint creation request.
}
else
{
// here we turn off the joint object, so remove the joint from the physics scene
m_parentGroup.Scene.PhysicsScene.RequestJointDeletion(Name); // FIXME: what if the name changed?
// make sure client isn't interpolating the joint proxy object
Velocity = Vector3.Zero;
AngularVelocity = Vector3.Zero;
Acceleration = Vector3.Zero;
}
}
} }
else else
{ {
@ -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

View File

@ -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,97 +1479,22 @@ 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
if (Util.GetDistanceTo(AbsolutePosition, m_moveToPositionTarget) <= 0.5f)
{ {
// we are close enough to the target ResetMoveToTarget();
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))
{ update_movementflag = true;
// 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;
}
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
Animator.UpdateMovementAnimations(); && ((flags & AgentManager.ControlFlags.AGENT_CONTROL_SIT_ON_GROUND) == 0)
&& (m_parentID == 0)
&& !SitGround)
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
{
try
{
// move avatar in 3D 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 =
(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
{
m_movementflag += (byte)(uint)Dir_ControlFlags.DIR_CONTROL_FLAG_BACK;
AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_BACK;
updated = true;
}
else if (LocalVectorToTarget3D.X > 0) //Move Forward
{
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;
} }
public void DoMoveToPosition(Object sender, string method, List<String> args) /// <summary>
/// Move to the given target over time.
/// </summary>
/// <param name="pos"></param>
public void MoveToTarget(Vector3 pos)
{ {
try // m_log.DebugFormat(
{ // "[SCENE PRESENCE]: Avatar {0} received request to move to position {1} in {2}",
float locx = 0f; // Name, pos, m_scene.RegionInfo.RegionName);
float locy = 0f;
float locz = 0f; if (pos.X < 0 || pos.X >= Constants.RegionSize
uint regionX = 0; || pos.Y < 0 || pos.Y >= Constants.RegionSize
uint regionY = 0; || pos.Z < 0)
try return;
{
Utils.LongToUInts(Scene.RegionInfo.RegionHandle, out regionX, out regionY); // Vector3 heightAdjust = new Vector3(0, 0, Appearance.AvatarHeight / 2);
locx = Convert.ToSingle(args[0]) - (float)regionX; // pos += heightAdjust;
locy = Convert.ToSingle(args[1]) - (float)regionY; //
locz = Convert.ToSingle(args[2]); // // Anti duck-walking measure
} // if (Math.Abs(pos.Z - AbsolutePosition.Z) < 0.2f)
catch (InvalidCastException) // {
{ //// m_log.DebugFormat("[SCENE PRESENCE]: Adjusting MoveToPosition from {0} to {1}", pos, AbsolutePosition);
m_log.Error("[CLIENT]: Invalid autopilot request"); // pos.Z = AbsolutePosition.Z;
return; // }
}
m_moveToPositionInProgress = true; float terrainHeight = (float)m_scene.Heightmap[(int)pos.X, (int)pos.Y];
m_moveToPositionTarget = new Vector3(locx, locy, locz); pos.Z = Math.Max(terrainHeight, pos.Z);
}
catch (Exception ex) // 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.
//Why did I get this error? // FIXME: This constrains NOC movements as well, so should be somewhere else.
m_log.Error("[SCENEPRESENCE]: DoMoveToPosition" + ex); 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);
}
/// <summary>
/// Reset the move to target.
/// </summary>
public void ResetMoveToTarget()
{
m_log.DebugFormat("[SCENE PRESENCE]: Resetting move to target for {0}", Name);
MovingToTarget = false;
MoveToPositionTarget = Vector3.Zero;
} }
private void CheckAtSitTarget() private void CheckAtSitTarget()
@ -1832,7 +1890,7 @@ namespace OpenSim.Region.Framework.Scenes
bool forceMouselook = false; bool forceMouselook = false;
//SceneObjectPart part = m_scene.GetSceneObjectPart(targetID); //SceneObjectPart part = m_scene.GetSceneObjectPart(targetID);
SceneObjectPart part = FindNextAvailableSitTarget(targetID); SceneObjectPart part = FindNextAvailableSitTarget(targetID);
if (part != null) if (part != null)
{ {
// TODO: determine position to sit at based on scene geometry; don't trust offset from client // TODO: determine position to sit at based on scene geometry; don't trust offset from client
@ -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

View File

@ -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;

View File

@ -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)
{ {
} }

View File

@ -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"; } }

View File

@ -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)
{ {
} }

View File

@ -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, AvatarAppearance> m_appearanceCache = new Dictionary<UUID, AvatarAppearance>();
private Dictionary<UUID,NPCAvatar> m_avatars = new Dictionary<UUID, NPCAvatar>();
private Dictionary<UUID,AvatarAppearance> m_appearanceCache = new Dictionary<UUID, AvatarAppearance>();
public void Initialise(Scene scene, IConfigSource source) public void Initialise(Scene scene, IConfigSource source)
{ {
scene.RegisterModuleInterface<INPCModule>(this); IConfig config = source.Configs["NPC"];
if (config != null && config.GetBoolean("Enabled", false))
{
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,14 +120,21 @@ 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)
{
m_appearanceCache.Add(target, appearance);
return appearance;
}
return new AvatarAppearance(); if (originalPresence != null)
{
AvatarAppearance originalAppearance = originalPresence.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();
}
} }
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);
} }
} }
} }

View File

@ -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));
} }
} }
} }

View File

@ -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;
@ -135,7 +139,7 @@ namespace OpenSim.Region.Physics.BasicPhysicsPlugin
} }
else else
{ {
actorPosition.Z += actor.Velocity.Z*timeStep; actorPosition.Z += actor.Velocity.Z * timeStep;
actor.IsColliding = false; actor.IsColliding = false;
} }
} }

View File

@ -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,

View File

@ -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,312 +325,19 @@ namespace OpenSim.Region.Physics.Meshing
if (!useMeshiesPhysicsMesh) if (!useMeshiesPhysicsMesh)
return null; return null;
m_log.DebugFormat("[MESH]: experimental mesh proxy generation for {0}", primName); if (!GenerateCoordsAndFacesFromPrimMeshData(primName, primShape, size, out coords, out faces))
OSD meshOsd = null;
if (primShape.SculptData.Length <= 0)
{
m_log.Error("[MESH]: asset data is zero length");
return null; return null;
}
long start = 0;
using (MemoryStream data = new MemoryStream(primShape.SculptData))
{
try
{
OSD osd = OSDParser.DeserializeLLSDBinary(data);
if (osd is OSDMap)
meshOsd = (OSDMap)osd;
else
{
m_log.Warn("[Mesh}: unable to cast mesh asset to OSDMap");
return null;
}
}
catch (Exception e)
{
m_log.Error("[MESH]: Exception deserializing mesh asset header:" + e.ToString());
}
start = data.Position;
}
if (meshOsd is OSDMap)
{
OSDMap physicsParms = null;
OSDMap map = (OSDMap)meshOsd;
if (map.ContainsKey("physics_shape"))
physicsParms = (OSDMap)map["physics_shape"]; // old asset format
else if (map.ContainsKey("physics_mesh"))
physicsParms = (OSDMap)map["physics_mesh"]; // new asset format
if (physicsParms == null)
{
m_log.Warn("[MESH]: no recognized physics mesh found in mesh asset");
return null;
}
int physOffset = physicsParms["offset"].AsInteger() + (int)start;
int physSize = physicsParms["size"].AsInteger();
if (physOffset < 0 || physSize == 0)
return null; // no mesh data in asset
OSD decodedMeshOsd = new OSD();
byte[] meshBytes = new byte[physSize];
System.Buffer.BlockCopy(primShape.SculptData, physOffset, meshBytes, 0, physSize);
// byte[] decompressed = new byte[physSize * 5];
try
{
using (MemoryStream inMs = new MemoryStream(meshBytes))
{
using (MemoryStream outMs = new MemoryStream())
{
using (ZOutputStream zOut = new ZOutputStream(outMs))
{
byte[] readBuffer = new byte[2048];
int readLen = 0;
while ((readLen = inMs.Read(readBuffer, 0, readBuffer.Length)) > 0)
{
zOut.Write(readBuffer, 0, readLen);
}
zOut.Flush();
outMs.Seek(0, SeekOrigin.Begin);
byte[] decompressedBuf = outMs.GetBuffer();
decodedMeshOsd = OSDParser.DeserializeLLSDBinary(decompressedBuf);
}
}
}
}
catch (Exception e)
{
m_log.Error("[MESH]: exception decoding physical mesh: " + e.ToString());
return null;
}
OSDArray decodedMeshOsdArray = null;
// physics_shape is an array of OSDMaps, one for each submesh
if (decodedMeshOsd is OSDArray)
{
// Console.WriteLine("decodedMeshOsd for {0} - {1}", primName, Util.GetFormattedXml(decodedMeshOsd));
decodedMeshOsdArray = (OSDArray)decodedMeshOsd;
foreach (OSD subMeshOsd in decodedMeshOsdArray)
{
if (subMeshOsd is OSDMap)
AddSubMesh(subMeshOsd as OSDMap, size, coords, faces);
}
}
}
} }
else else
{ {
if (cacheSculptMaps && primShape.SculptTexture != UUID.Zero) if (!GenerateCoordsAndFacesFromPrimSculptData(primName, primShape, size, lod, out coords, out faces))
{ return null;
decodedSculptFileName = System.IO.Path.Combine(decodedSculptMapPath, "smap_" + primShape.SculptTexture.ToString());
try
{
if (File.Exists(decodedSculptFileName))
{
idata = Image.FromFile(decodedSculptFileName);
}
}
catch (Exception e)
{
m_log.Error("[SCULPT]: unable to load cached sculpt map " + decodedSculptFileName + " " + e.Message);
}
//if (idata != null)
// m_log.Debug("[SCULPT]: loaded cached map asset for map ID: " + primShape.SculptTexture.ToString());
}
if (idata == null)
{
if (primShape.SculptData == null || primShape.SculptData.Length == 0)
return null;
try
{
OpenMetaverse.Imaging.ManagedImage unusedData;
OpenMetaverse.Imaging.OpenJPEG.DecodeToImage(primShape.SculptData, out unusedData, out idata);
unusedData = null;
//idata = CSJ2K.J2kImage.FromBytes(primShape.SculptData);
if (cacheSculptMaps && idata != null)
{
try { idata.Save(decodedSculptFileName, ImageFormat.MemoryBmp); }
catch (Exception e) { m_log.Error("[SCULPT]: unable to cache sculpt map " + decodedSculptFileName + " " + e.Message); }
}
}
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!");
return null;
}
catch (IndexOutOfRangeException)
{
m_log.Error("[PHYSICS]: OpenJpeg was unable to decode this. Physics Proxy generation failed");
return null;
}
catch (Exception ex)
{
m_log.Error("[PHYSICS]: Unable to generate a Sculpty physics proxy. Sculpty texture decode failed: " + ex.Message);
return null;
}
}
PrimMesher.SculptMesh.SculptType sculptType;
switch ((OpenMetaverse.SculptType)primShape.SculptType)
{
case OpenMetaverse.SculptType.Cylinder:
sculptType = PrimMesher.SculptMesh.SculptType.cylinder;
break;
case OpenMetaverse.SculptType.Plane:
sculptType = PrimMesher.SculptMesh.SculptType.plane;
break;
case OpenMetaverse.SculptType.Torus:
sculptType = PrimMesher.SculptMesh.SculptType.torus;
break;
case OpenMetaverse.SculptType.Sphere:
sculptType = PrimMesher.SculptMesh.SculptType.sphere;
break;
default:
sculptType = PrimMesher.SculptMesh.SculptType.plane;
break;
}
bool mirror = ((primShape.SculptType & 128) != 0);
bool invert = ((primShape.SculptType & 64) != 0);
sculptMesh = new PrimMesher.SculptMesh((Bitmap)idata, sculptType, (int)lod, false, mirror, invert);
idata.Dispose();
sculptMesh.DumpRaw(baseDir, primName, "primMesh");
sculptMesh.Scale(size.X, size.Y, size.Z);
coords = sculptMesh.coords;
faces = sculptMesh.faces;
} }
} }
else else
{ {
float pathShearX = primShape.PathShearX < 128 ? (float)primShape.PathShearX * 0.01f : (float)(primShape.PathShearX - 256) * 0.01f; if (!GenerateCoordsAndFacesFromPrimShapeData(primName, primShape, size, out coords, out faces))
float pathShearY = primShape.PathShearY < 128 ? (float)primShape.PathShearY * 0.01f : (float)(primShape.PathShearY - 256) * 0.01f; return null;
float pathBegin = (float)primShape.PathBegin * 2.0e-5f;
float pathEnd = 1.0f - (float)primShape.PathEnd * 2.0e-5f;
float pathScaleX = (float)(primShape.PathScaleX - 100) * 0.01f;
float pathScaleY = (float)(primShape.PathScaleY - 100) * 0.01f;
float profileBegin = (float)primShape.ProfileBegin * 2.0e-5f;
float profileEnd = 1.0f - (float)primShape.ProfileEnd * 2.0e-5f;
float profileHollow = (float)primShape.ProfileHollow * 2.0e-5f;
if (profileHollow > 0.95f)
profileHollow = 0.95f;
int sides = 4;
if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.EquilateralTriangle)
sides = 3;
else if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.Circle)
sides = 24;
else if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.HalfCircle)
{ // half circle, prim is a sphere
sides = 24;
profileBegin = 0.5f * profileBegin + 0.5f;
profileEnd = 0.5f * profileEnd + 0.5f;
}
int hollowSides = sides;
if (primShape.HollowShape == HollowShape.Circle)
hollowSides = 24;
else if (primShape.HollowShape == HollowShape.Square)
hollowSides = 4;
else if (primShape.HollowShape == HollowShape.Triangle)
hollowSides = 3;
primMesh = new PrimMesh(sides, profileBegin, profileEnd, profileHollow, hollowSides);
if (primMesh.errorMessage != null)
if (primMesh.errorMessage.Length > 0)
m_log.Error("[ERROR] " + primMesh.errorMessage);
primMesh.topShearX = pathShearX;
primMesh.topShearY = pathShearY;
primMesh.pathCutBegin = pathBegin;
primMesh.pathCutEnd = pathEnd;
if (primShape.PathCurve == (byte)Extrusion.Straight || primShape.PathCurve == (byte) Extrusion.Flexible)
{
primMesh.twistBegin = primShape.PathTwistBegin * 18 / 10;
primMesh.twistEnd = primShape.PathTwist * 18 / 10;
primMesh.taperX = pathScaleX;
primMesh.taperY = pathScaleY;
if (profileBegin < 0.0f || profileBegin >= profileEnd || profileEnd > 1.0f)
{
ReportPrimError("*** CORRUPT PRIM!! ***", primName, primMesh);
if (profileBegin < 0.0f) profileBegin = 0.0f;
if (profileEnd > 1.0f) profileEnd = 1.0f;
}
#if SPAM
m_log.Debug("****** PrimMesh Parameters (Linear) ******\n" + primMesh.ParamsToDisplayString());
#endif
try
{
primMesh.ExtrudeLinear();
}
catch (Exception ex)
{
ReportPrimError("Extrusion failure: exception: " + ex.ToString(), primName, primMesh);
return null;
}
}
else
{
primMesh.holeSizeX = (200 - primShape.PathScaleX) * 0.01f;
primMesh.holeSizeY = (200 - primShape.PathScaleY) * 0.01f;
primMesh.radius = 0.01f * primShape.PathRadiusOffset;
primMesh.revolutions = 1.0f + 0.015f * primShape.PathRevolutions;
primMesh.skew = 0.01f * primShape.PathSkew;
primMesh.twistBegin = primShape.PathTwistBegin * 36 / 10;
primMesh.twistEnd = primShape.PathTwist * 36 / 10;
primMesh.taperX = primShape.PathTaperX * 0.01f;
primMesh.taperY = primShape.PathTaperY * 0.01f;
if (profileBegin < 0.0f || profileBegin >= profileEnd || profileEnd > 1.0f)
{
ReportPrimError("*** CORRUPT PRIM!! ***", primName, primMesh);
if (profileBegin < 0.0f) profileBegin = 0.0f;
if (profileEnd > 1.0f) profileEnd = 1.0f;
}
#if SPAM
m_log.Debug("****** PrimMesh Parameters (Circular) ******\n" + primMesh.ParamsToDisplayString());
#endif
try
{
primMesh.ExtrudeCircular();
}
catch (Exception ex)
{
ReportPrimError("Extrusion failure: exception: " + ex.ToString(), primName, primMesh);
return null;
}
}
primMesh.DumpRaw(baseDir, primName, "primMesh");
primMesh.Scale(size.X, size.Y, size.Z);
coords = primMesh.coords;
faces = primMesh.faces;
} }
// Remove the reference to any JPEG2000 sculpt data so it can be GCed // Remove the reference to any JPEG2000 sculpt data so it can be GCed
@ -656,6 +365,376 @@ namespace OpenSim.Region.Physics.Meshing
return mesh; 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);
coords = new List<Coord>();
faces = new List<Face>();
OSD meshOsd = null;
if (primShape.SculptData.Length <= 0)
{
m_log.Error("[MESH]: asset data is zero length");
return false;
}
long start = 0;
using (MemoryStream data = new MemoryStream(primShape.SculptData))
{
try
{
OSD osd = OSDParser.DeserializeLLSDBinary(data);
if (osd is OSDMap)
meshOsd = (OSDMap)osd;
else
{
m_log.Warn("[Mesh}: unable to cast mesh asset to OSDMap");
return false;
}
}
catch (Exception e)
{
m_log.Error("[MESH]: Exception deserializing mesh asset header:" + e.ToString());
}
start = data.Position;
}
if (meshOsd is OSDMap)
{
OSDMap physicsParms = null;
OSDMap map = (OSDMap)meshOsd;
if (map.ContainsKey("physics_shape"))
physicsParms = (OSDMap)map["physics_shape"]; // old asset format
else if (map.ContainsKey("physics_mesh"))
physicsParms = (OSDMap)map["physics_mesh"]; // new asset format
if (physicsParms == null)
{
m_log.Warn("[MESH]: no recognized physics mesh found in mesh asset");
return false;
}
int physOffset = physicsParms["offset"].AsInteger() + (int)start;
int physSize = physicsParms["size"].AsInteger();
if (physOffset < 0 || physSize == 0)
return false; // no mesh data in asset
OSD decodedMeshOsd = new OSD();
byte[] meshBytes = new byte[physSize];
System.Buffer.BlockCopy(primShape.SculptData, physOffset, meshBytes, 0, physSize);
// byte[] decompressed = new byte[physSize * 5];
try
{
using (MemoryStream inMs = new MemoryStream(meshBytes))
{
using (MemoryStream outMs = new MemoryStream())
{
using (ZOutputStream zOut = new ZOutputStream(outMs))
{
byte[] readBuffer = new byte[2048];
int readLen = 0;
while ((readLen = inMs.Read(readBuffer, 0, readBuffer.Length)) > 0)
{
zOut.Write(readBuffer, 0, readLen);
}
zOut.Flush();
outMs.Seek(0, SeekOrigin.Begin);
byte[] decompressedBuf = outMs.GetBuffer();
decodedMeshOsd = OSDParser.DeserializeLLSDBinary(decompressedBuf);
}
}
}
}
catch (Exception e)
{
m_log.Error("[MESH]: exception decoding physical mesh: " + e.ToString());
return false;
}
OSDArray decodedMeshOsdArray = null;
// physics_shape is an array of OSDMaps, one for each submesh
if (decodedMeshOsd is OSDArray)
{
// Console.WriteLine("decodedMeshOsd for {0} - {1}", primName, Util.GetFormattedXml(decodedMeshOsd));
decodedMeshOsdArray = (OSDArray)decodedMeshOsd;
foreach (OSD subMeshOsd in decodedMeshOsdArray)
{
if (subMeshOsd is OSDMap)
AddSubMesh(subMeshOsd as OSDMap, size, coords, faces);
}
}
}
return true;
}
/// <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)
{
decodedSculptFileName = System.IO.Path.Combine(decodedSculptMapPath, "smap_" + primShape.SculptTexture.ToString());
try
{
if (File.Exists(decodedSculptFileName))
{
idata = Image.FromFile(decodedSculptFileName);
}
}
catch (Exception e)
{
m_log.Error("[SCULPT]: unable to load cached sculpt map " + decodedSculptFileName + " " + e.Message);
}
//if (idata != null)
// m_log.Debug("[SCULPT]: loaded cached map asset for map ID: " + primShape.SculptTexture.ToString());
}
if (idata == null)
{
if (primShape.SculptData == null || primShape.SculptData.Length == 0)
return false;
try
{
OpenMetaverse.Imaging.ManagedImage unusedData;
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;
//idata = CSJ2K.J2kImage.FromBytes(primShape.SculptData);
if (cacheSculptMaps)
{
try { idata.Save(decodedSculptFileName, ImageFormat.MemoryBmp); }
catch (Exception e) { m_log.Error("[SCULPT]: unable to cache sculpt map " + decodedSculptFileName + " " + e.Message); }
}
}
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!");
return false;
}
catch (IndexOutOfRangeException)
{
m_log.Error("[PHYSICS]: OpenJpeg was unable to decode this. Physics Proxy generation failed");
return false;
}
catch (Exception ex)
{
m_log.Error("[PHYSICS]: Unable to generate a Sculpty physics proxy. Sculpty texture decode failed: " + ex.Message);
return false;
}
}
PrimMesher.SculptMesh.SculptType sculptType;
switch ((OpenMetaverse.SculptType)primShape.SculptType)
{
case OpenMetaverse.SculptType.Cylinder:
sculptType = PrimMesher.SculptMesh.SculptType.cylinder;
break;
case OpenMetaverse.SculptType.Plane:
sculptType = PrimMesher.SculptMesh.SculptType.plane;
break;
case OpenMetaverse.SculptType.Torus:
sculptType = PrimMesher.SculptMesh.SculptType.torus;
break;
case OpenMetaverse.SculptType.Sphere:
sculptType = PrimMesher.SculptMesh.SculptType.sphere;
break;
default:
sculptType = PrimMesher.SculptMesh.SculptType.plane;
break;
}
bool mirror = ((primShape.SculptType & 128) != 0);
bool invert = ((primShape.SculptType & 64) != 0);
sculptMesh = new PrimMesher.SculptMesh((Bitmap)idata, sculptType, (int)lod, false, mirror, invert);
idata.Dispose();
sculptMesh.DumpRaw(baseDir, primName, "primMesh");
sculptMesh.Scale(size.X, size.Y, size.Z);
coords = sculptMesh.coords;
faces = sculptMesh.faces;
return true;
}
/// <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 pathShearY = primShape.PathShearY < 128 ? (float)primShape.PathShearY * 0.01f : (float)(primShape.PathShearY - 256) * 0.01f;
float pathBegin = (float)primShape.PathBegin * 2.0e-5f;
float pathEnd = 1.0f - (float)primShape.PathEnd * 2.0e-5f;
float pathScaleX = (float)(primShape.PathScaleX - 100) * 0.01f;
float pathScaleY = (float)(primShape.PathScaleY - 100) * 0.01f;
float profileBegin = (float)primShape.ProfileBegin * 2.0e-5f;
float profileEnd = 1.0f - (float)primShape.ProfileEnd * 2.0e-5f;
float profileHollow = (float)primShape.ProfileHollow * 2.0e-5f;
if (profileHollow > 0.95f)
profileHollow = 0.95f;
int sides = 4;
if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.EquilateralTriangle)
sides = 3;
else if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.Circle)
sides = 24;
else if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.HalfCircle)
{ // half circle, prim is a sphere
sides = 24;
profileBegin = 0.5f * profileBegin + 0.5f;
profileEnd = 0.5f * profileEnd + 0.5f;
}
int hollowSides = sides;
if (primShape.HollowShape == HollowShape.Circle)
hollowSides = 24;
else if (primShape.HollowShape == HollowShape.Square)
hollowSides = 4;
else if (primShape.HollowShape == HollowShape.Triangle)
hollowSides = 3;
primMesh = new PrimMesh(sides, profileBegin, profileEnd, profileHollow, hollowSides);
if (primMesh.errorMessage != null)
if (primMesh.errorMessage.Length > 0)
m_log.Error("[ERROR] " + primMesh.errorMessage);
primMesh.topShearX = pathShearX;
primMesh.topShearY = pathShearY;
primMesh.pathCutBegin = pathBegin;
primMesh.pathCutEnd = pathEnd;
if (primShape.PathCurve == (byte)Extrusion.Straight || primShape.PathCurve == (byte) Extrusion.Flexible)
{
primMesh.twistBegin = primShape.PathTwistBegin * 18 / 10;
primMesh.twistEnd = primShape.PathTwist * 18 / 10;
primMesh.taperX = pathScaleX;
primMesh.taperY = pathScaleY;
if (profileBegin < 0.0f || profileBegin >= profileEnd || profileEnd > 1.0f)
{
ReportPrimError("*** CORRUPT PRIM!! ***", primName, primMesh);
if (profileBegin < 0.0f) profileBegin = 0.0f;
if (profileEnd > 1.0f) profileEnd = 1.0f;
}
#if SPAM
m_log.Debug("****** PrimMesh Parameters (Linear) ******\n" + primMesh.ParamsToDisplayString());
#endif
try
{
primMesh.ExtrudeLinear();
}
catch (Exception ex)
{
ReportPrimError("Extrusion failure: exception: " + ex.ToString(), primName, primMesh);
return false;
}
}
else
{
primMesh.holeSizeX = (200 - primShape.PathScaleX) * 0.01f;
primMesh.holeSizeY = (200 - primShape.PathScaleY) * 0.01f;
primMesh.radius = 0.01f * primShape.PathRadiusOffset;
primMesh.revolutions = 1.0f + 0.015f * primShape.PathRevolutions;
primMesh.skew = 0.01f * primShape.PathSkew;
primMesh.twistBegin = primShape.PathTwistBegin * 36 / 10;
primMesh.twistEnd = primShape.PathTwist * 36 / 10;
primMesh.taperX = primShape.PathTaperX * 0.01f;
primMesh.taperY = primShape.PathTaperY * 0.01f;
if (profileBegin < 0.0f || profileBegin >= profileEnd || profileEnd > 1.0f)
{
ReportPrimError("*** CORRUPT PRIM!! ***", primName, primMesh);
if (profileBegin < 0.0f) profileBegin = 0.0f;
if (profileEnd > 1.0f) profileEnd = 1.0f;
}
#if SPAM
m_log.Debug("****** PrimMesh Parameters (Circular) ******\n" + primMesh.ParamsToDisplayString());
#endif
try
{
primMesh.ExtrudeCircular();
}
catch (Exception ex)
{
ReportPrimError("Extrusion failure: exception: " + ex.ToString(), primName, primMesh);
return false;
}
}
primMesh.DumpRaw(baseDir, primName, "primMesh");
primMesh.Scale(size.X, size.Y, size.Z);
coords = primMesh.coords;
faces = primMesh.faces;
return true;
}
public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod) public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod)
{ {
return CreateMesh(primName, primShape, size, lod, false); return CreateMesh(primName, primShape, size, lod, false);

View File

@ -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)

View File

@ -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,15 +1479,14 @@ 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
{ mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical);
// Don't need to re-enable body.. it's done in SetMesh // createmesh returns null when it's a shape that isn't a cube.
_mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical); // m_log.Debug(m_localID);
// createmesh returns null when it's a shape that isn't a cube.
// m_log.Debug(m_localID);
}
} }
lock (_parent_scene.OdeLock) lock (_parent_scene.OdeLock)
@ -1426,7 +1494,7 @@ Console.WriteLine("CreateGeom:");
#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);
}
else
{
_mesh = null;
#if SPAM
Console.WriteLine("changesize 2");
#endif
CreateGeom(m_targetSpace, _mesh);
} }
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);
}
else
{
_mesh = null;
#if SPAM
Console.WriteLine("changeshape not need meshing");
#endif
CreateGeom(m_targetSpace, null);
} }
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.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);
} }

File diff suppressed because it is too large Load Diff

View File

@ -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);
} }
} }

View File

@ -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");

View File

@ -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;

View File

@ -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;
av.Data["Value"] = kvp.Value;
// 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;
}
if (!m_Database.Store(av)) if (!m_Database.Store(av))
{ {

View File

@ -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)

View File

@ -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();

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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>

View File

@ -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))

View File

@ -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();

View File

@ -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>

View File

@ -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)
{ {
} }

View File

@ -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>

View File

@ -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.

View File

@ -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

View File

@ -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>
--> -->

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>
--> -->

View File

@ -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>

View File

@ -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>
--> -->

View File

@ -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>
--> -->

View File

@ -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>
--> -->

View File

@ -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"/> -->
@ -288,213 +232,166 @@
<Section Name="Kan-Ed Test1"> <Section Name="Kan-Ed Test1">
<Key Name="inventoryID" Value="42b6ac70-d21f-11dd-ad8b-0800200c9a66" /> <Key Name="inventoryID" Value="42b6ac70-d21f-11dd-ad8b-0800200c9a66" />
<Key Name="assetID" Value="42b6ac70-d21f-11dd-ad8b-0800200c9a66" /> <Key Name="assetID" Value="42b6ac70-d21f-11dd-ad8b-0800200c9a66" />
<Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/> <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/>
<Key Name="description" Value="Kan-Ed Test1" /> <Key Name="description" Value="Kan-Ed Test1" />
<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" />
<Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/> <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/>
<Key Name="description" Value="Kan-Ed Test2" /> <Key Name="description" Value="Kan-Ed Test2" />
<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" />
<Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/> <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/>
<Key Name="description" Value="Kan-Ed Test3" /> <Key Name="description" Value="Kan-Ed Test3" />
<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" />
<Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/> <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/>
<Key Name="description" Value="Kan-Ed Test4" /> <Key Name="description" Value="Kan-Ed Test4" />
<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" />
<Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/> <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/>
<Key Name="description" Value="Kan-Ed Test5" /> <Key Name="description" Value="Kan-Ed Test5" />
<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" />
<Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/> <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/>
<Key Name="description" Value="Kan-Ed Test6" /> <Key Name="description" Value="Kan-Ed Test6" />
<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" />
<Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/> <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/>
<Key Name="description" Value="Kan-Ed Test7" /> <Key Name="description" Value="Kan-Ed Test7" />
<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" />
<Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/> <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/>
<Key Name="description" Value="Kan-Ed Test8" /> <Key Name="description" Value="Kan-Ed Test8" />
<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" />
<Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/> <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/>
<Key Name="description" Value="Kan-Ed Test9" /> <Key Name="description" Value="Kan-Ed Test9" />
<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" />
<Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/> <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/>
<Key Name="description" Value="Kan-Ed Test10" /> <Key Name="description" Value="Kan-Ed Test10" />
<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" />
<Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/> <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/>
<Key Name="description" Value="Kan-Ed Test11" /> <Key Name="description" Value="Kan-Ed Test11" />
<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" />
<Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/> <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/>
<Key Name="description" Value="Kan-Ed Test12" /> <Key Name="description" Value="Kan-Ed Test12" />
<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" />
<Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/> <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/>
<Key Name="description" Value="Kan-Ed Test13" /> <Key Name="description" Value="Kan-Ed Test13" />
<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" />
<Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/> <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/>
<Key Name="description" Value="Kan-Ed Test14" /> <Key Name="description" Value="Kan-Ed Test14" />
<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" />
<Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/> <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/>
<Key Name="description" Value="Kan-Ed Test15" /> <Key Name="description" Value="Kan-Ed Test15" />
<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" />
<Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/> <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba024"/>
<Key Name="description" Value="Kan-Ed Test16" /> <Key Name="description" Value="Kan-Ed Test16" />
<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>

View File

@ -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>
--> -->

View File

@ -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>