Пример #1
0
        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);
        }
Пример #2
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]);
        }
Пример #3
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]);
        }
Пример #4
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;
        }
Пример #5
0
        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;
        }
Пример #6
0
 public bool TryGetItem(string name, out LLInventoryTaskItem item)
 {
     DoubleDictionarySlim<UUID, string, LLInventoryTaskItem> items = Items;
     return items.TryGetValue(name, out item);
 }
Пример #7
0
        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);
        }
Пример #8
0
        public bool TryGetItem(string name, out LLInventoryTaskItem item)
        {
            DoubleDictionarySlim <UUID, string, LLInventoryTaskItem> items = Items;

            return(items.TryGetValue(name, out item));
        }