mirror of
https://github.com/opensim/opensim.git
synced 2026-08-09 02:36:00 +08:00
* Store task inventory when an object is taken into agent inventory
* This means that you can take an object from a region and rez it somewhere else, with its inventory intact. * As for earlier, at this stage only scripts can be placed in inventory * This isn't an efficient implementation, a better one will probably need to come along soonish
This commit is contained in:
@@ -163,6 +163,8 @@ namespace OpenSim.Framework.Data.MySQL
|
||||
|
||||
public void RemoveObject(LLUUID obj, LLUUID regionUUID)
|
||||
{
|
||||
MainLog.Instance.Verbose("DATASTORE", "Removing obj: {0} from region: {1}", obj.UUID, regionUUID);
|
||||
|
||||
DataTable prims = m_primTable;
|
||||
DataTable shapes = m_shapeTable;
|
||||
DataTable items = m_itemsTable;
|
||||
@@ -187,9 +189,9 @@ namespace OpenSim.Framework.Data.MySQL
|
||||
String sql = String.Format("primID = '{0}'", uuid);
|
||||
DataRow[] itemRows = items.Select(sql);
|
||||
|
||||
foreach (DataRow itemsRow in itemRows)
|
||||
foreach (DataRow itemRow in itemRows)
|
||||
{
|
||||
shapeRow.Delete();
|
||||
itemRow.Delete();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -307,7 +309,7 @@ namespace OpenSim.Framework.Data.MySQL
|
||||
TaskInventoryItem item = buildItem(row);
|
||||
inventory.Add(item);
|
||||
|
||||
MainLog.Instance.Verbose("DATASTORE", "Restored item {0}, {1}", item.name, item.item_id);
|
||||
MainLog.Instance.Verbose("DATASTORE", "Restored item {0}, {1}", item.Name, item.ItemID);
|
||||
}
|
||||
|
||||
prim.AddInventoryItems(inventory);
|
||||
@@ -316,7 +318,7 @@ namespace OpenSim.Framework.Data.MySQL
|
||||
// every item). This data should really be stored in the prim table itself.
|
||||
if (dbItemRows.Length > 0)
|
||||
{
|
||||
prim.FolderID = inventory[0].parent_id;
|
||||
prim.FolderID = inventory[0].ParentID;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -853,27 +855,27 @@ namespace OpenSim.Framework.Data.MySQL
|
||||
{
|
||||
TaskInventoryItem taskItem = new TaskInventoryItem();
|
||||
|
||||
taskItem.item_id = new LLUUID((String)row["itemID"]);
|
||||
taskItem.ParentPartID = new LLUUID((String)row["primID"]);
|
||||
taskItem.asset_id = new LLUUID((String)row["assetID"]);
|
||||
taskItem.parent_id = new LLUUID((String)row["parentFolderID"]);
|
||||
taskItem.ItemID = new LLUUID((String)row["itemID"]);
|
||||
taskItem.ParentPartID = new LLUUID((String)row["primID"]);
|
||||
taskItem.AssetID = new LLUUID((String)row["assetID"]);
|
||||
taskItem.ParentID = new LLUUID((String)row["parentFolderID"]);
|
||||
|
||||
taskItem.inv_type = Convert.ToInt32(row["invType"]);
|
||||
taskItem.type = Convert.ToInt32(row["assetType"]);
|
||||
taskItem.InvType = Convert.ToInt32(row["invType"]);
|
||||
taskItem.Type = Convert.ToInt32(row["assetType"]);
|
||||
|
||||
taskItem.name = (String)row["name"];
|
||||
taskItem.desc = (String)row["description"];
|
||||
taskItem.creation_date = Convert.ToUInt32(row["creationDate"]);
|
||||
taskItem.creator_id = new LLUUID((String)row["creatorID"]);
|
||||
taskItem.owner_id = new LLUUID((String)row["ownerID"]);
|
||||
taskItem.last_owner_id = new LLUUID((String)row["lastOwnerID"]);
|
||||
taskItem.group_id = new LLUUID((String)row["groupID"]);
|
||||
taskItem.Name = (String)row["name"];
|
||||
taskItem.Description = (String)row["description"];
|
||||
taskItem.CreationDate = Convert.ToUInt32(row["creationDate"]);
|
||||
taskItem.CreatorID = new LLUUID((String)row["creatorID"]);
|
||||
taskItem.OwnerID = new LLUUID((String)row["ownerID"]);
|
||||
taskItem.LastOwnerID = new LLUUID((String)row["lastOwnerID"]);
|
||||
taskItem.GroupID = new LLUUID((String)row["groupID"]);
|
||||
|
||||
taskItem.next_owner_mask = Convert.ToUInt32(row["nextPermissions"]);
|
||||
taskItem.owner_mask = Convert.ToUInt32(row["currentPermissions"]);
|
||||
taskItem.base_mask = Convert.ToUInt32(row["basePermissions"]);
|
||||
taskItem.everyone_mask = Convert.ToUInt32(row["everyonePermissions"]);
|
||||
taskItem.group_mask = Convert.ToUInt32(row["groupPermissions"]);
|
||||
taskItem.NextOwnerMask = Convert.ToUInt32(row["nextPermissions"]);
|
||||
taskItem.OwnerMask = Convert.ToUInt32(row["currentPermissions"]);
|
||||
taskItem.BaseMask = Convert.ToUInt32(row["basePermissions"]);
|
||||
taskItem.EveryoneMask = Convert.ToUInt32(row["everyonePermissions"]);
|
||||
taskItem.GroupMask = Convert.ToUInt32(row["groupPermissions"]);
|
||||
|
||||
return taskItem;
|
||||
}
|
||||
@@ -1023,26 +1025,26 @@ namespace OpenSim.Framework.Data.MySQL
|
||||
|
||||
private void fillItemRow(DataRow row, TaskInventoryItem taskItem)
|
||||
{
|
||||
row["itemID"] = taskItem.item_id;
|
||||
row["itemID"] = taskItem.ItemID;
|
||||
row["primID"] = taskItem.ParentPartID;
|
||||
row["assetID"] = taskItem.asset_id;
|
||||
row["parentFolderID"] = taskItem.parent_id;
|
||||
row["assetID"] = taskItem.AssetID;
|
||||
row["parentFolderID"] = taskItem.ParentID;
|
||||
|
||||
row["invType"] = taskItem.inv_type;
|
||||
row["assetType"] = taskItem.type;
|
||||
row["invType"] = taskItem.InvType;
|
||||
row["assetType"] = taskItem.Type;
|
||||
|
||||
row["name"] = taskItem.name;
|
||||
row["description"] = taskItem.desc;
|
||||
row["creationDate"] = taskItem.creation_date;
|
||||
row["creatorID"] = taskItem.creator_id;
|
||||
row["ownerID"] = taskItem.owner_id;
|
||||
row["lastOwnerID"] = taskItem.last_owner_id;
|
||||
row["groupID"] = taskItem.group_id;
|
||||
row["nextPermissions"] = taskItem.next_owner_mask;
|
||||
row["currentPermissions"] = taskItem.owner_mask;
|
||||
row["basePermissions"] = taskItem.base_mask;
|
||||
row["everyonePermissions"] = taskItem.everyone_mask;
|
||||
row["groupPermissions"] = taskItem.group_mask;
|
||||
row["name"] = taskItem.Name;
|
||||
row["description"] = taskItem.Description;
|
||||
row["creationDate"] = taskItem.CreationDate;
|
||||
row["creatorID"] = taskItem.CreatorID;
|
||||
row["ownerID"] = taskItem.OwnerID;
|
||||
row["lastOwnerID"] = taskItem.LastOwnerID;
|
||||
row["groupID"] = taskItem.GroupID;
|
||||
row["nextPermissions"] = taskItem.NextOwnerMask;
|
||||
row["currentPermissions"] = taskItem.OwnerMask;
|
||||
row["basePermissions"] = taskItem.BaseMask;
|
||||
row["everyonePermissions"] = taskItem.EveryoneMask;
|
||||
row["groupPermissions"] = taskItem.GroupMask;
|
||||
}
|
||||
|
||||
private void fillLandRow(DataRow row, LandData land, LLUUID regionUUID)
|
||||
@@ -1216,11 +1218,15 @@ namespace OpenSim.Framework.Data.MySQL
|
||||
|
||||
// Build structures for manipulation purposes
|
||||
IDictionary<String, DataRow> dbItemsToRemove = new Dictionary<String, DataRow>();
|
||||
ICollection<TaskInventoryItem> itemsToAdd
|
||||
= new List<TaskInventoryItem>();
|
||||
ICollection<TaskInventoryItem> itemsToAdd = new List<TaskInventoryItem>();
|
||||
|
||||
foreach (DataRow row in dbItemRows)
|
||||
{
|
||||
MainLog.Instance.Verbose(
|
||||
"DATASTORE",
|
||||
"Found item {0}, {1} in prim id {2}",
|
||||
row["name"], row["itemID"], primID);
|
||||
|
||||
dbItemsToRemove.Add((String)row["itemID"], row);
|
||||
}
|
||||
|
||||
@@ -1232,6 +1238,11 @@ namespace OpenSim.Framework.Data.MySQL
|
||||
|
||||
if (dbItemsToRemove.ContainsKey(rawItemId))
|
||||
{
|
||||
MainLog.Instance.Verbose(
|
||||
"DATASTORE",
|
||||
"Discarding item {0}, {1} from remove candidates for prim id {2}",
|
||||
items[itemId].Name, rawItemId, primID);
|
||||
|
||||
dbItemsToRemove.Remove(rawItemId);
|
||||
}
|
||||
else
|
||||
@@ -1256,8 +1267,8 @@ namespace OpenSim.Framework.Data.MySQL
|
||||
{
|
||||
MainLog.Instance.Verbose(
|
||||
"DATASTORE",
|
||||
"Adding item {0}, {1} to prim ID {1}",
|
||||
newItem.name, newItem.item_id, newItem.ParentPartID);
|
||||
"Adding item {0}, {1} to prim ID {2}",
|
||||
newItem.Name, newItem.ItemID, newItem.ParentPartID);
|
||||
|
||||
DataRow newItemRow = dbItems.NewRow();
|
||||
fillItemRow(newItemRow, newItem);
|
||||
|
||||
@@ -205,6 +205,8 @@ namespace OpenSim.Framework.Data.SQLite
|
||||
|
||||
public void RemoveObject(LLUUID obj, LLUUID regionUUID)
|
||||
{
|
||||
MainLog.Instance.Verbose("DATASTORE", "Removing obj: {0} from region: {1}", obj.UUID, regionUUID);
|
||||
|
||||
DataTable prims = ds.Tables["prims"];
|
||||
DataTable shapes = ds.Tables["primshapes"];
|
||||
DataTable items = ds.Tables["primitems"];
|
||||
@@ -229,9 +231,9 @@ namespace OpenSim.Framework.Data.SQLite
|
||||
String sql = String.Format("primID = '{0}'", uuid);
|
||||
DataRow[] itemRows = items.Select(sql);
|
||||
|
||||
foreach (DataRow itemsRow in itemRows)
|
||||
foreach (DataRow itemRow in itemRows)
|
||||
{
|
||||
itemsRow.Delete();
|
||||
itemRow.Delete();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -351,7 +353,7 @@ namespace OpenSim.Framework.Data.SQLite
|
||||
TaskInventoryItem item = buildItem(row);
|
||||
inventory.Add(item);
|
||||
|
||||
MainLog.Instance.Verbose("DATASTORE", "Restored item {0}, {1}", item.name, item.item_id);
|
||||
MainLog.Instance.Verbose("DATASTORE", "Restored item {0}, {1}", item.Name, item.ItemID);
|
||||
}
|
||||
|
||||
prim.AddInventoryItems(inventory);
|
||||
@@ -360,7 +362,7 @@ namespace OpenSim.Framework.Data.SQLite
|
||||
// every item). This data should really be stored in the prim table itself.
|
||||
if (dbItemRows.Length > 0)
|
||||
{
|
||||
prim.FolderID = inventory[0].parent_id;
|
||||
prim.FolderID = inventory[0].ParentID;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -889,27 +891,27 @@ namespace OpenSim.Framework.Data.SQLite
|
||||
{
|
||||
TaskInventoryItem taskItem = new TaskInventoryItem();
|
||||
|
||||
taskItem.item_id = new LLUUID((String)row["itemID"]);
|
||||
taskItem.ParentPartID = new LLUUID((String)row["primID"]);
|
||||
taskItem.asset_id = new LLUUID((String)row["assetID"]);
|
||||
taskItem.parent_id = new LLUUID((String)row["parentFolderID"]);
|
||||
taskItem.ItemID = new LLUUID((String)row["itemID"]);
|
||||
taskItem.ParentPartID = new LLUUID((String)row["primID"]);
|
||||
taskItem.AssetID = new LLUUID((String)row["assetID"]);
|
||||
taskItem.ParentID = new LLUUID((String)row["parentFolderID"]);
|
||||
|
||||
taskItem.inv_type = Convert.ToInt32(row["invType"]);
|
||||
taskItem.type = Convert.ToInt32(row["assetType"]);
|
||||
taskItem.InvType = Convert.ToInt32(row["invType"]);
|
||||
taskItem.Type = Convert.ToInt32(row["assetType"]);
|
||||
|
||||
taskItem.name = (String)row["name"];
|
||||
taskItem.desc = (String)row["description"];
|
||||
taskItem.creation_date = Convert.ToUInt32(row["creationDate"]);
|
||||
taskItem.creator_id = new LLUUID((String)row["creatorID"]);
|
||||
taskItem.owner_id = new LLUUID((String)row["ownerID"]);
|
||||
taskItem.last_owner_id = new LLUUID((String)row["lastOwnerID"]);
|
||||
taskItem.group_id = new LLUUID((String)row["groupID"]);
|
||||
taskItem.Name = (String)row["name"];
|
||||
taskItem.Description = (String)row["description"];
|
||||
taskItem.CreationDate = Convert.ToUInt32(row["creationDate"]);
|
||||
taskItem.CreatorID = new LLUUID((String)row["creatorID"]);
|
||||
taskItem.OwnerID = new LLUUID((String)row["ownerID"]);
|
||||
taskItem.LastOwnerID = new LLUUID((String)row["lastOwnerID"]);
|
||||
taskItem.GroupID = new LLUUID((String)row["groupID"]);
|
||||
|
||||
taskItem.next_owner_mask = Convert.ToUInt32(row["nextPermissions"]);
|
||||
taskItem.owner_mask = Convert.ToUInt32(row["currentPermissions"]);
|
||||
taskItem.base_mask = Convert.ToUInt32(row["basePermissions"]);
|
||||
taskItem.everyone_mask = Convert.ToUInt32(row["everyonePermissions"]);
|
||||
taskItem.group_mask = Convert.ToUInt32(row["groupPermissions"]);
|
||||
taskItem.NextOwnerMask = Convert.ToUInt32(row["nextPermissions"]);
|
||||
taskItem.OwnerMask = Convert.ToUInt32(row["currentPermissions"]);
|
||||
taskItem.BaseMask = Convert.ToUInt32(row["basePermissions"]);
|
||||
taskItem.EveryoneMask = Convert.ToUInt32(row["everyonePermissions"]);
|
||||
taskItem.GroupMask = Convert.ToUInt32(row["groupPermissions"]);
|
||||
|
||||
return taskItem;
|
||||
}
|
||||
@@ -1059,26 +1061,26 @@ namespace OpenSim.Framework.Data.SQLite
|
||||
|
||||
private void fillItemRow(DataRow row, TaskInventoryItem taskItem)
|
||||
{
|
||||
row["itemID"] = taskItem.item_id;
|
||||
row["itemID"] = taskItem.ItemID;
|
||||
row["primID"] = taskItem.ParentPartID;
|
||||
row["assetID"] = taskItem.asset_id;
|
||||
row["parentFolderID"] = taskItem.parent_id;
|
||||
row["assetID"] = taskItem.AssetID;
|
||||
row["parentFolderID"] = taskItem.ParentID;
|
||||
|
||||
row["invType"] = taskItem.inv_type;
|
||||
row["assetType"] = taskItem.type;
|
||||
row["invType"] = taskItem.InvType;
|
||||
row["assetType"] = taskItem.Type;
|
||||
|
||||
row["name"] = taskItem.name;
|
||||
row["description"] = taskItem.desc;
|
||||
row["creationDate"] = taskItem.creation_date;
|
||||
row["creatorID"] = taskItem.creator_id;
|
||||
row["ownerID"] = taskItem.owner_id;
|
||||
row["lastOwnerID"] = taskItem.last_owner_id;
|
||||
row["groupID"] = taskItem.group_id;
|
||||
row["nextPermissions"] = taskItem.next_owner_mask;
|
||||
row["currentPermissions"] = taskItem.owner_mask;
|
||||
row["basePermissions"] = taskItem.base_mask;
|
||||
row["everyonePermissions"] = taskItem.everyone_mask;
|
||||
row["groupPermissions"] = taskItem.group_mask;
|
||||
row["name"] = taskItem.Name;
|
||||
row["description"] = taskItem.Description;
|
||||
row["creationDate"] = taskItem.CreationDate;
|
||||
row["creatorID"] = taskItem.CreatorID;
|
||||
row["ownerID"] = taskItem.OwnerID;
|
||||
row["lastOwnerID"] = taskItem.LastOwnerID;
|
||||
row["groupID"] = taskItem.GroupID;
|
||||
row["nextPermissions"] = taskItem.NextOwnerMask;
|
||||
row["currentPermissions"] = taskItem.OwnerMask;
|
||||
row["basePermissions"] = taskItem.BaseMask;
|
||||
row["everyonePermissions"] = taskItem.EveryoneMask;
|
||||
row["groupPermissions"] = taskItem.GroupMask;
|
||||
}
|
||||
|
||||
private void fillLandRow(DataRow row, LandData land, LLUUID regionUUID)
|
||||
@@ -1311,8 +1313,8 @@ namespace OpenSim.Framework.Data.SQLite
|
||||
{
|
||||
MainLog.Instance.Verbose(
|
||||
"DATASTORE",
|
||||
"Adding item {0}, {1} to prim ID {1}",
|
||||
newItem.name, newItem.item_id, newItem.ParentPartID);
|
||||
"Adding item {0}, {1} to prim ID {2}",
|
||||
newItem.Name, newItem.ItemID, newItem.ParentPartID);
|
||||
|
||||
DataRow newItemRow = dbItems.NewRow();
|
||||
fillItemRow(newItemRow, newItem);
|
||||
|
||||
@@ -26,11 +26,78 @@
|
||||
*
|
||||
*/
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Xml;
|
||||
using System.Xml.Schema;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
using libsecondlife;
|
||||
using System;
|
||||
|
||||
namespace OpenSim.Framework
|
||||
{
|
||||
{
|
||||
public class TaskInventoryDictionary : Dictionary<LLUUID, TaskInventoryItem>, IXmlSerializable
|
||||
{
|
||||
private static XmlSerializer tiiSerializer = new XmlSerializer(typeof(TaskInventoryItem));
|
||||
|
||||
// The alternative of simply serializing the list doesn't appear to work on mono, since
|
||||
// we get a
|
||||
//
|
||||
// System.TypeInitializationException: An exception was thrown by the type initializer for OpenSim.Framework.TaskInventoryDictionary ---> System.ArgumentOutOfRangeException: < 0
|
||||
// Parameter name: length
|
||||
// at System.String.Substring (Int32 startIndex, Int32 length) [0x00088] in /build/buildd/mono-1.2.4/mcs/class/corlib/System/String.cs:381
|
||||
// at System.Xml.Serialization.TypeTranslator.GetTypeData (System.Type runtimeType, System.String xmlDataType) [0x001f6] in /build/buildd/mono-1.2.4/mcs/class/System.XML/System.Xml.Serialization/TypeTranslator.cs:217
|
||||
// ...
|
||||
// private static XmlSerializer tiiSerializer
|
||||
// = new XmlSerializer(typeof(Dictionary<LLUUID, TaskInventoryItem>.ValueCollection));
|
||||
|
||||
// see IXmlSerializable
|
||||
public XmlSchema GetSchema()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
// see IXmlSerializable
|
||||
public void ReadXml(XmlReader reader)
|
||||
{
|
||||
reader.Read();
|
||||
while (tiiSerializer.CanDeserialize(reader))
|
||||
{
|
||||
TaskInventoryItem item = (TaskInventoryItem)tiiSerializer.Deserialize(reader);
|
||||
Add(item.ItemID, item);
|
||||
}
|
||||
|
||||
// reader.Read();
|
||||
// while (reader.Name.Equals("TaskInventoryItem"))
|
||||
// {
|
||||
// TaskInventoryItem item = (TaskInventoryItem)tiiSerializer.Deserialize(reader);
|
||||
// Add(item.ItemID, item);
|
||||
// }
|
||||
|
||||
// ICollection<TaskInventoryItem> items
|
||||
// = (ICollection<TaskInventoryItem>)tiiSerializer.Deserialize(reader);
|
||||
//
|
||||
// foreach (TaskInventoryItem item in items)
|
||||
// {
|
||||
// Add(item.ItemID, item);
|
||||
// }
|
||||
}
|
||||
|
||||
// see IXmlSerializable
|
||||
public void WriteXml(XmlWriter writer)
|
||||
{
|
||||
foreach (TaskInventoryItem item in Values)
|
||||
{
|
||||
tiiSerializer.Serialize(writer, item);
|
||||
}
|
||||
|
||||
//tiiSerializer.Serialize(writer, Values);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents an item in a task inventory
|
||||
/// </summary>
|
||||
public class TaskInventoryItem
|
||||
{
|
||||
/// <summary>
|
||||
@@ -75,27 +142,37 @@ namespace OpenSim.Framework
|
||||
"lsltext",
|
||||
String.Empty
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Reset the LLUUIDs for this item.
|
||||
/// </summary>
|
||||
/// <param name="partID">The new part ID to which this item belongs</param>
|
||||
public void ResetIDs(LLUUID partID)
|
||||
{
|
||||
ItemID = LLUUID.Random();
|
||||
ParentPartID = partID;
|
||||
}
|
||||
|
||||
public LLUUID item_id = LLUUID.Zero;
|
||||
public LLUUID parent_id = LLUUID.Zero; //parent folder id
|
||||
public LLUUID ItemID = LLUUID.Zero;
|
||||
public LLUUID ParentID = LLUUID.Zero; //parent folder id
|
||||
|
||||
public uint base_mask = FULL_MASK_PERMISSIONS_GENERAL;
|
||||
public uint owner_mask = FULL_MASK_PERMISSIONS_GENERAL;
|
||||
public uint group_mask = FULL_MASK_PERMISSIONS_GENERAL;
|
||||
public uint everyone_mask = FULL_MASK_PERMISSIONS_GENERAL;
|
||||
public uint next_owner_mask = FULL_MASK_PERMISSIONS_GENERAL;
|
||||
public LLUUID creator_id = LLUUID.Zero;
|
||||
public LLUUID owner_id = LLUUID.Zero;
|
||||
public LLUUID last_owner_id = LLUUID.Zero;
|
||||
public LLUUID group_id = LLUUID.Zero;
|
||||
public uint BaseMask = FULL_MASK_PERMISSIONS_GENERAL;
|
||||
public uint OwnerMask = FULL_MASK_PERMISSIONS_GENERAL;
|
||||
public uint GroupMask = FULL_MASK_PERMISSIONS_GENERAL;
|
||||
public uint EveryoneMask = FULL_MASK_PERMISSIONS_GENERAL;
|
||||
public uint NextOwnerMask = FULL_MASK_PERMISSIONS_GENERAL;
|
||||
public LLUUID CreatorID = LLUUID.Zero;
|
||||
public LLUUID OwnerID = LLUUID.Zero;
|
||||
public LLUUID LastOwnerID = LLUUID.Zero;
|
||||
public LLUUID GroupID = LLUUID.Zero;
|
||||
|
||||
public LLUUID asset_id = LLUUID.Zero;
|
||||
public int type = 0;
|
||||
public int inv_type = 0;
|
||||
public uint flags = 0;
|
||||
public string name = String.Empty;
|
||||
public string desc = String.Empty;
|
||||
public uint creation_date = 0;
|
||||
public LLUUID AssetID = LLUUID.Zero;
|
||||
public int Type = 0;
|
||||
public int InvType = 0;
|
||||
public uint Flags = 0;
|
||||
public string Name = String.Empty;
|
||||
public string Description = String.Empty;
|
||||
public uint CreationDate = 0;
|
||||
|
||||
public LLUUID ParentPartID = LLUUID.Zero;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user