private static PrimInventory FromPrimObjectInventory(LLPrimitive host, PrimObject.InventoryBlock objInv) { PrimInventory inv = new PrimInventory(host); if (objInv == null) { return(inv); } for (int i = 0; i < objInv.Items.Length; i++) { PrimObject.InventoryBlock.ItemBlock objItem = objInv.Items[i]; LLInventoryTaskItem item = new LLInventoryTaskItem(); item.AssetID = objItem.AssetID; item.ContentType = LLUtil.LLAssetTypeToContentType((int)objItem.Type); item.CreationDate = objItem.CreationDate; item.CreatorID = objItem.CreatorID; item.Description = objItem.Description; item.Flags = (uint)objItem.Flags; item.GroupID = objItem.GroupID; item.ID = objItem.ID; item.Name = objItem.Name; item.OwnerID = objItem.OwnerID; item.Permissions = new Permissions(objItem.PermsBase, objItem.PermsEveryone, objItem.PermsGroup, objItem.PermsNextOwner, objItem.PermsOwner); item.PermissionGranter = objItem.PermsGranterID; inv.AddOrUpdateItem(item, true); } inv.InventorySerial = (short)objInv.Serial; return(inv); }
public void AddOrUpdateItem(LLInventoryTaskItem item, bool replace) { item.ParentObjectID = m_hostObject.Prim.ID; DoubleDictionarySlim <UUID, string, LLInventoryTaskItem> items = Items; if (replace) { LLInventoryTaskItem oldItem; if (items.TryGetValue(item.Name, out oldItem)) { item.ID = oldItem.ID; items.Remove(item.ID, item.Name); } } else { item.Name = NextAvailableFilename(items, item.Name); } if (item.ID == UUID.Zero) { item.ID = UUID.Random(); } items.Add(item.ID, item.Name, item); // Update the inventory serial number ++InventorySerial; // Post a script event // FIXME: //Changed change = allowedDrop ? Changed.ALLOWED_DROP : Changed.INVENTORY; //m_hostObject.Scene.ScriptEngine.PostObjectEvent(m_hostObject.Prim.ID, "changed", // new object[] { new ScriptTypes.LSL_Integer((uint)change) }, new DetectParams[0]); }
public void AddOrUpdateItem(LLInventoryTaskItem item, bool replace) { item.ParentObjectID = m_hostObject.Prim.ID; DoubleDictionarySlim<UUID, string, LLInventoryTaskItem> items = Items; if (replace) { LLInventoryTaskItem oldItem; if (items.TryGetValue(item.Name, out oldItem)) { item.ID = oldItem.ID; items.Remove(item.ID, item.Name); } } else { item.Name = NextAvailableFilename(items, item.Name); } if (item.ID == UUID.Zero) item.ID = UUID.Random(); items.Add(item.ID, item.Name, item); // Update the inventory serial number ++InventorySerial; // Post a script event // FIXME: //Changed change = allowedDrop ? Changed.ALLOWED_DROP : Changed.INVENTORY; //m_hostObject.Scene.ScriptEngine.PostObjectEvent(m_hostObject.Prim.ID, "changed", // new object[] { new ScriptTypes.LSL_Integer((uint)change) }, new DetectParams[0]); }
public void FromTaskInventoryAsset(string asset) { if (String.IsNullOrEmpty(asset)) { if (m_items != null) { m_items.Clear(); } return; } DoubleDictionarySlim <UUID, string, LLInventoryTaskItem> items = new DoubleDictionarySlim <UUID, string, LLInventoryTaskItem>(); List <LLInventoryTaskItem> parsedItems = ParseTaskInventory(m_hostObject.ID, asset); for (int i = 0; i < parsedItems.Count; i++) { LLInventoryTaskItem item = parsedItems[i]; items.Add(item.ID, item.Name, item); } Items = items; }
private static List<LLInventoryTaskItem> ParseTaskInventory(UUID parentObjectID, string taskData) { List<LLInventoryTaskItem> items = new List<LLInventoryTaskItem>(); int lineNum = 0; string[] lines = taskData.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries); while (lineNum < lines.Length) { string key, value; if (ParseLine(lines[lineNum++], out key, out value)) { if (key == "inv_item") { #region Default Values UUID itemID = UUID.Zero; UUID assetID = UUID.Zero; UUID parentID = UUID.Zero; UUID creatorID = UUID.Zero; UUID ownerID = UUID.Zero; UUID lastOwnerID = UUID.Zero; UUID groupID = UUID.Zero; bool groupOwned = false; string name = String.Empty; string desc = String.Empty; AssetType assetType = AssetType.Unknown; InventoryType inventoryType = InventoryType.Unknown; DateTime creationDate = Utils.Epoch; uint flags = 0; Permissions perms = Permissions.NoPermissions; SaleType saleType = SaleType.Not; int salePrice = 0; #endregion Default Values while (lineNum < lines.Length) { if (ParseLine(lines[lineNum++], out key, out value)) { #region Line Parsing if (key == "{") { continue; } else if (key == "}") { break; } else if (key == "item_id") { UUID.TryParse(value, out itemID); } else if (key == "parent_id") { UUID.TryParse(value, out parentID); } else if (key == "permissions") { #region permissions while (lineNum < lines.Length) { if (ParseLine(lines[lineNum++], out key, out value)) { if (key == "{") { continue; } else if (key == "}") { break; } else if (key == "creator_mask") { // Deprecated uint val; if (Utils.TryParseHex(value, out val)) perms.BaseMask = (PermissionMask)val; } else if (key == "base_mask") { uint val; if (Utils.TryParseHex(value, out val)) perms.BaseMask = (PermissionMask)val; } else if (key == "owner_mask") { uint val; if (Utils.TryParseHex(value, out val)) perms.OwnerMask = (PermissionMask)val; } else if (key == "group_mask") { uint val; if (Utils.TryParseHex(value, out val)) perms.GroupMask = (PermissionMask)val; } else if (key == "everyone_mask") { uint val; if (Utils.TryParseHex(value, out val)) perms.EveryoneMask = (PermissionMask)val; } else if (key == "next_owner_mask") { uint val; if (Utils.TryParseHex(value, out val)) perms.NextOwnerMask = (PermissionMask)val; } else if (key == "creator_id") { UUID.TryParse(value, out creatorID); } else if (key == "owner_id") { UUID.TryParse(value, out ownerID); } else if (key == "last_owner_id") { UUID.TryParse(value, out lastOwnerID); } else if (key == "group_id") { UUID.TryParse(value, out groupID); } else if (key == "group_owned") { uint val; if (UInt32.TryParse(value, out val)) groupOwned = (val != 0); } } } #endregion permissions } else if (key == "sale_info") { #region sale_info while (lineNum < lines.Length) { if (ParseLine(lines[lineNum++], out key, out value)) { if (key == "{") { continue; } else if (key == "}") { break; } else if (key == "sale_type") { saleType = Utils.StringToSaleType(value); } else if (key == "sale_price") { Int32.TryParse(value, out salePrice); } } } #endregion sale_info } else if (key == "shadow_id") { UUID shadowID; if (UUID.TryParse(value, out shadowID)) assetID = DecryptShadowID(shadowID); } else if (key == "asset_id") { UUID.TryParse(value, out assetID); } else if (key == "type") { assetType = Utils.StringToAssetType(value); } else if (key == "inv_type") { inventoryType = Utils.StringToInventoryType(value); } else if (key == "flags") { UInt32.TryParse(value, out flags); } else if (key == "name") { name = value.Substring(0, value.IndexOf('|')); } else if (key == "desc") { desc = value.Substring(0, value.IndexOf('|')); } else if (key == "creation_date") { uint timestamp; if (UInt32.TryParse(value, out timestamp)) creationDate = Utils.UnixTimeToDateTime(timestamp); else Logger.Log("Failed to parse creation_date " + value, Helpers.LogLevel.Warning); } #endregion Line Parsing } } LLInventoryTaskItem item = new LLInventoryTaskItem(); item.AssetID = assetID; item.ContentType = LLUtil.LLAssetTypeToContentType((int)assetType); item.CreationDate = creationDate; item.CreatorID = creatorID; item.Description = desc; item.Flags = flags; item.GroupID = groupID; item.GroupOwned = groupOwned; item.ID = itemID; item.Name = name; item.OwnerID = ownerID; item.ParentID = parentID; item.ParentObjectID = parentObjectID; item.PermissionGranter = UUID.Zero; // TODO: We should be serializing this item.Permissions = perms; item.SalePrice = salePrice; item.SaleType = saleType; items.Add(item); } else { //m_log.Warn("Unrecognized token " + key + " in: " + Environment.NewLine + taskData); } } } return items; }
public bool TryGetItem(string name, out LLInventoryTaskItem item) { DoubleDictionarySlim<UUID, string, LLInventoryTaskItem> items = Items; return items.TryGetValue(name, out item); }
private static List <LLInventoryTaskItem> ParseTaskInventory(UUID parentObjectID, string taskData) { List <LLInventoryTaskItem> items = new List <LLInventoryTaskItem>(); int lineNum = 0; string[] lines = taskData.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries); while (lineNum < lines.Length) { string key, value; if (ParseLine(lines[lineNum++], out key, out value)) { if (key == "inv_item") { #region Default Values UUID itemID = UUID.Zero; UUID assetID = UUID.Zero; UUID parentID = UUID.Zero; UUID creatorID = UUID.Zero; UUID ownerID = UUID.Zero; UUID lastOwnerID = UUID.Zero; UUID groupID = UUID.Zero; bool groupOwned = false; string name = String.Empty; string desc = String.Empty; AssetType assetType = AssetType.Unknown; InventoryType inventoryType = InventoryType.Unknown; DateTime creationDate = Utils.Epoch; uint flags = 0; Permissions perms = Permissions.NoPermissions; SaleType saleType = SaleType.Not; int salePrice = 0; #endregion Default Values while (lineNum < lines.Length) { if (ParseLine(lines[lineNum++], out key, out value)) { #region Line Parsing if (key == "{") { continue; } else if (key == "}") { break; } else if (key == "item_id") { UUID.TryParse(value, out itemID); } else if (key == "parent_id") { UUID.TryParse(value, out parentID); } else if (key == "permissions") { #region permissions while (lineNum < lines.Length) { if (ParseLine(lines[lineNum++], out key, out value)) { if (key == "{") { continue; } else if (key == "}") { break; } else if (key == "creator_mask") { // Deprecated uint val; if (Utils.TryParseHex(value, out val)) { perms.BaseMask = (PermissionMask)val; } } else if (key == "base_mask") { uint val; if (Utils.TryParseHex(value, out val)) { perms.BaseMask = (PermissionMask)val; } } else if (key == "owner_mask") { uint val; if (Utils.TryParseHex(value, out val)) { perms.OwnerMask = (PermissionMask)val; } } else if (key == "group_mask") { uint val; if (Utils.TryParseHex(value, out val)) { perms.GroupMask = (PermissionMask)val; } } else if (key == "everyone_mask") { uint val; if (Utils.TryParseHex(value, out val)) { perms.EveryoneMask = (PermissionMask)val; } } else if (key == "next_owner_mask") { uint val; if (Utils.TryParseHex(value, out val)) { perms.NextOwnerMask = (PermissionMask)val; } } else if (key == "creator_id") { UUID.TryParse(value, out creatorID); } else if (key == "owner_id") { UUID.TryParse(value, out ownerID); } else if (key == "last_owner_id") { UUID.TryParse(value, out lastOwnerID); } else if (key == "group_id") { UUID.TryParse(value, out groupID); } else if (key == "group_owned") { uint val; if (UInt32.TryParse(value, out val)) { groupOwned = (val != 0); } } } } #endregion permissions } else if (key == "sale_info") { #region sale_info while (lineNum < lines.Length) { if (ParseLine(lines[lineNum++], out key, out value)) { if (key == "{") { continue; } else if (key == "}") { break; } else if (key == "sale_type") { saleType = Utils.StringToSaleType(value); } else if (key == "sale_price") { Int32.TryParse(value, out salePrice); } } } #endregion sale_info } else if (key == "shadow_id") { UUID shadowID; if (UUID.TryParse(value, out shadowID)) { assetID = DecryptShadowID(shadowID); } } else if (key == "asset_id") { UUID.TryParse(value, out assetID); } else if (key == "type") { assetType = Utils.StringToAssetType(value); } else if (key == "inv_type") { inventoryType = Utils.StringToInventoryType(value); } else if (key == "flags") { UInt32.TryParse(value, out flags); } else if (key == "name") { name = value.Substring(0, value.IndexOf('|')); } else if (key == "desc") { desc = value.Substring(0, value.IndexOf('|')); } else if (key == "creation_date") { uint timestamp; if (UInt32.TryParse(value, out timestamp)) { creationDate = Utils.UnixTimeToDateTime(timestamp); } else { Logger.Log("Failed to parse creation_date " + value, Helpers.LogLevel.Warning); } } #endregion Line Parsing } } LLInventoryTaskItem item = new LLInventoryTaskItem(); item.AssetID = assetID; item.ContentType = LLUtil.LLAssetTypeToContentType((int)assetType); item.CreationDate = creationDate; item.CreatorID = creatorID; item.Description = desc; item.Flags = flags; item.GroupID = groupID; item.GroupOwned = groupOwned; item.ID = itemID; item.Name = name; item.OwnerID = ownerID; item.ParentID = parentID; item.ParentObjectID = parentObjectID; item.PermissionGranter = UUID.Zero; // TODO: We should be serializing this item.Permissions = perms; item.SalePrice = salePrice; item.SaleType = saleType; items.Add(item); } else { //m_log.Warn("Unrecognized token " + key + " in: " + Environment.NewLine + taskData); } } } return(items); }
public bool TryGetItem(string name, out LLInventoryTaskItem item) { DoubleDictionarySlim <UUID, string, LLInventoryTaskItem> items = Items; return(items.TryGetValue(name, out item)); }