public InventoryScriptConsole(SleekInstance instance, InventoryItem item) { InitializeComponent(); this.instance = instance; netcom = this.instance.Netcom; client = this.instance.Client; this.item = item; }
public InventoryItemConsole(SleekInstance instance, InventoryItem item) { InitializeComponent(); this.instance = instance; netcom = this.instance.Netcom; client = this.instance.Client; this.item = item; this.Disposed += new EventHandler(InventoryItemConsole_Disposed); AddClientEvents(); FillItemProperties(); }
public frmNotecardEditor(SleekInstance instance, InventoryItem item) { InitializeComponent(); this.instance = instance; netcom = this.instance.Netcom; client = this.instance.Client; this.item = item; AddNetcomEvents(); this.Text = item.Name + " (notecard) - SLeek"; client.Assets.OnAssetReceived += new AssetManager.AssetReceivedCallback(Assets_OnAssetReceived); transferID = client.Assets.RequestInventoryAsset(item.AssetUUID, item.UUID, LLUUID.Zero, item.OwnerID, item.AssetType, false); }
public InventoryImageConsole(SecondLife instance, SLNetCom netcoms, InventoryItem item, ImageCache imageCache) { InitializeComponent(); //SecondLife secondlife, SLNetCom netcoms, netcom = netcoms; client = instance; this.item = item; this.imagecache = imageCache; if (imageCache.ContainsImage(item.AssetUUID)) SetFinalImage(this.imagecache.GetImage(item.AssetUUID)); else { this.Disposed += new EventHandler(InventoryImageConsole_Disposed); client.Assets.OnImageReceived += new AssetManager.ImageReceivedCallback(Assets_OnImageReceived); client.Assets.RequestImage(item.AssetUUID, ImageType.Normal, 125000.0f, 0); } }
public InventoryImageConsole(SleekInstance instance, InventoryItem item) { InitializeComponent(); this.instance = instance; netcom = this.instance.Netcom; client = this.instance.Client; this.item = item; if (instance.ImageCache.ContainsImage(item.AssetUUID)) SetFinalImage(instance.ImageCache.GetImage(item.AssetUUID)); else { this.Disposed += new EventHandler(InventoryImageConsole_Disposed); client.Assets.OnImageReceived += new AssetManager.ImageReceivedCallback(Assets_OnImageReceived); client.Assets.RequestImage(item.AssetUUID, ImageType.Normal, 125000.0f, 0); } }
public frmNotecardEditor(InventoryItem item, SecondLife secondlife, SLNetCom netcoms, ImageList imageIconList) { InitializeComponent(); netcom = netcoms; client = secondlife; this.item = item; AddNetcomEvents(); //Let's display the associated icon with the AssetType if (item.AssetType == AssetType.Notecard) this.Icon = Utils.MIUtils.MakeIcon(imageIconList.Images["textdoc.ico"], 16, true); else if (item.AssetType == AssetType.LSLText) this.Icon = Utils.MIUtils.MakeIcon(imageIconList.Images["script.ico"], 16, true); this.Text = item.Name + " (" + item.AssetType.ToString() + ")"; client.Assets.OnAssetReceived += new AssetManager.AssetReceivedCallback(Assets_OnAssetReceived); transferID = client.Assets.RequestInventoryAsset(item.AssetUUID, item.UUID, LLUUID.Zero, item.OwnerID, item.AssetType, false); }
public ImageDownloader(SecondLife instance, SLNetCom netcoms, InventoryItem item, ImageCache imageCache, string savepath) { InitializeComponent(); //SecondLife secondlife, SLNetCom netcoms, netcom = netcoms; client = instance; this.item = item; this.imagecache = imageCache; this.FilePath = savepath; if (imageCache.ContainsImage(item.AssetUUID)) SetFinalImage(this.imagecache.GetImage(item.AssetUUID)); else { this.Disposed += new EventHandler(InventoryImageConsole_Disposed); client.Assets.OnImageReceived += new AssetManager.ImageReceivedCallback(Assets_OnImageReceived); SetStatusBoxText("Requesting: " + item.Name); client.Assets.RequestImage(item.AssetUUID, ImageType.Normal, 125000.0f, 0); this.Decoded = false; // Wait for the event to trigger queryEvent.WaitOne(8000, false); } }
public ImageViewerForm(InventoryItem item, SecondLife secondlife, SLNetCom netcoms, ImageList imageIconList, ImageCache imageCache) { InitializeComponent(); this.netcom = netcoms; this.client = secondlife; this.item = item; this.imagecache = imageCache; //Let's display the associated icon with the AssetType switch (item.AssetType) { case AssetType.Texture: case AssetType.TextureTGA: case AssetType.ImageJPEG: case AssetType.ImageTGA: this.Icon = Utils.MIUtils.MakeIcon(imageIconList.Images["snapshot.ico"], 16, true); break; default: this.Icon = Utils.MIUtils.MakeIcon(imageIconList.Images["texture.ico"], 16, true); break; } }
public static List<InventoryBase> ParseTaskInventory(string taskData) { List<InventoryBase> items = new List<InventoryBase>(); int lineNum = 0; string[] lines = taskData.Replace("\r\n", "\n").Split('\n'); while (lineNum < lines.Length) { string key, value; if (ParseLine(lines[lineNum++], out key, out value)) { if (key == "inv_object") { #region inv_object // In practice this appears to only be used for folders LLUUID itemID = LLUUID.Zero; LLUUID parentID = LLUUID.Zero; string name = String.Empty; AssetType assetType = AssetType.Unknown; while (lineNum < lines.Length) { if (ParseLine(lines[lineNum++], out key, out value)) { if (key == "{") { continue; } else if (key == "}") { break; } else if (key == "obj_id") { LLUUID.TryParse(value, out itemID); } else if (key == "parent_id") { LLUUID.TryParse(value, out parentID); } else if (key == "type") { assetType = StringToAssetType(value); } else if (key == "name") { name = value.Substring(0, value.IndexOf('|')); } } } if (assetType == AssetType.Folder) { InventoryFolder folder = new InventoryFolder(itemID); folder.Name = name; folder.ParentUUID = parentID; items.Add(folder); } else { InventoryItem item = new InventoryItem(itemID); item.Name = name; item.ParentUUID = parentID; item.AssetType = assetType; items.Add(item); } #endregion inv_object } else if (key == "inv_item") { #region inv_item // Any inventory item that links to an assetID, has permissions, etc LLUUID itemID = LLUUID.Zero; LLUUID assetID = LLUUID.Zero; LLUUID parentID = LLUUID.Zero; LLUUID creatorID = LLUUID.Zero; LLUUID ownerID = LLUUID.Zero; LLUUID lastOwnerID = LLUUID.Zero; LLUUID groupID = LLUUID.Zero; bool groupOwned = false; string name = String.Empty; string desc = String.Empty; AssetType assetType = AssetType.Unknown; InventoryType inventoryType = InventoryType.Unknown; DateTime creationDate = Helpers.Epoch; uint flags = 0; Permissions perms = Permissions.NoPermissions; SaleType saleType = SaleType.Not; int salePrice = 0; while (lineNum < lines.Length) { if (ParseLine(lines[lineNum++], out key, out value)) { if (key == "{") { continue; } else if (key == "}") { break; } else if (key == "item_id") { LLUUID.TryParse(value, out itemID); } else if (key == "parent_id") { LLUUID.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 (Helpers.TryParseHex(value, out val)) perms.BaseMask = (PermissionMask)val; } else if (key == "base_mask") { uint val; if (Helpers.TryParseHex(value, out val)) perms.BaseMask = (PermissionMask)val; } else if (key == "owner_mask") { uint val; if (Helpers.TryParseHex(value, out val)) perms.OwnerMask = (PermissionMask)val; } else if (key == "group_mask") { uint val; if (Helpers.TryParseHex(value, out val)) perms.GroupMask = (PermissionMask)val; } else if (key == "everyone_mask") { uint val; if (Helpers.TryParseHex(value, out val)) perms.EveryoneMask = (PermissionMask)val; } else if (key == "next_owner_mask") { uint val; if (Helpers.TryParseHex(value, out val)) perms.NextOwnerMask = (PermissionMask)val; } else if (key == "creator_id") { Helpers.TryParse(value, out creatorID); } else if (key == "owner_id") { Helpers.TryParse(value, out ownerID); } else if (key == "last_owner_id") { Helpers.TryParse(value, out lastOwnerID); } else if (key == "group_id") { Helpers.TryParse(value, out groupID); } else if (key == "group_owned") { uint val; if (Helpers.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 = StringToSaleType(value); } else if (key == "sale_price") { Helpers.TryParse(value, out salePrice); } } } #endregion sale_info } else if (key == "shadow_id") { //FIXME: } else if (key == "asset_id") { LLUUID.TryParse(value, out assetID); } else if (key == "type") { assetType = StringToAssetType(value); } else if (key == "inv_type") { inventoryType = StringToInventoryType(value); } else if (key == "flags") { Helpers.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 (Helpers.TryParse(value, out timestamp)) creationDate = Helpers.UnixTimeToDateTime(timestamp); else SecondLife.LogStatic("Failed to parse creation_date " + value, Helpers.LogLevel.Warning); } } } InventoryItem item = CreateInventoryItem(inventoryType, itemID); item.AssetUUID = assetID; item.AssetType = assetType; item.CreationDate = creationDate; item.CreatorID = creatorID; item.Description = desc; item.Flags = flags; item.GroupID = groupID; item.GroupOwned = groupOwned; item.Name = name; item.OwnerID = ownerID; item.ParentUUID = parentID; item.Permissions = perms; item.SalePrice = salePrice; item.SaleType = saleType; items.Add(item); #endregion inv_item } else { SecondLife.LogStatic("Unrecognized token " + key + " in: " + Helpers.NewLine + taskData, Helpers.LogLevel.Error); } } } return items; }
/// <summary> /// Executes AssetManager.RequestInventoryAsset and assigns transferID while writing to lbStatus.Text and txbStatusHis /// </summary> private void RequestInventoryItem(InventoryItem i) { Console.WriteLine("[SLMIV]: AssetReceivedCallback=requesting:" + i.Name + " ;" + i.UUID.ToStringHyphenated());//Debug client.Log("[SLMIV] Requesting: " + i.Name + " ;UUID: " + i.UUID.ToStringHyphenated(), Helpers.LogLevel.Info); lbStatus.Text = "Requesting: " + i.Name + " ;UUID: " + i.UUID.ToStringHyphenated(); AppendLineStatusBox(lbStatus.Text); lbStatus.Update(); transferID = client.Assets.RequestInventoryAsset(i.AssetUUID, i.UUID, LLUUID.Zero, i.OwnerID, i.AssetType, false); System.Threading.Thread.Sleep(2000);//Sleep needed to wait for call backs }
public static uint ItemCRC(InventoryItem iitem) { uint CRC = 0; // IDs CRC += iitem.AssetUUID.CRC(); // AssetID CRC += iitem.ParentUUID.CRC(); // FolderID CRC += iitem.UUID == null ? LLUUID.Zero.CRC() : iitem.UUID.CRC(); // ItemID // Permission stuff CRC += iitem.CreatorID.CRC(); // CreatorID CRC += iitem.OwnerID.CRC(); // OwnerID CRC += iitem.GroupID.CRC(); // GroupID // CRC += another 4 words which always seem to be zero -- unclear if this is a LLUUID or what CRC += (uint)iitem.Permissions.OwnerMask; //owner_mask; // Either owner_mask or next_owner_mask may need to be CRC += (uint)iitem.Permissions.NextOwnerMask; //next_owner_mask; // switched with base_mask -- 2 values go here and in my CRC += (uint)iitem.Permissions.EveryoneMask; //everyone_mask; // study item, the three were identical. CRC += (uint)iitem.Permissions.GroupMask; //group_mask; // The rest of the CRC fields CRC += iitem.Flags; // Flags CRC += (uint)iitem.InventoryType; // InvType CRC += (uint)iitem.AssetType; // Type CRC += (uint)Helpers.DateTimeToUnixTime(iitem.CreationDate); // CreationDate CRC += (uint)iitem.SalePrice; // SalePrice CRC += (uint)((uint)iitem.SaleType * 0x07073096); // SaleType return CRC; }
public bool Equals(InventoryItem o) { return base.Equals(o as InventoryBase) && o.AssetType == AssetType && o.AssetUUID == AssetUUID && o.CreationDate == CreationDate && o.Description == Description && o.Flags == Flags && o.GroupID == GroupID && o.GroupOwned == GroupOwned && o.InventoryType == InventoryType && o.Permissions.Equals(Permissions) && o.SalePrice == SalePrice && o.SaleType == SaleType; }
public void RequestUpdateItem(InventoryItem item) { List<InventoryItem> items = new List<InventoryItem>(1); items.Add(item); RequestUpdateItems(items, LLUUID.Random()); }
public LLUUID UpdateTaskInventory(uint objectLocalID, InventoryItem item) { LLUUID transactionID = LLUUID.Random(); UpdateTaskInventoryPacket update = new UpdateTaskInventoryPacket(); update.AgentData.AgentID = _Client.Self.AgentID; update.AgentData.SessionID = _Client.Self.SessionID; update.UpdateData.Key = 0; update.UpdateData.LocalID = objectLocalID; update.InventoryData.ItemID = item.UUID; update.InventoryData.FolderID = item.ParentUUID; update.InventoryData.CreatorID = item.CreatorID; update.InventoryData.OwnerID = item.OwnerID; update.InventoryData.GroupID = item.GroupID; update.InventoryData.BaseMask = (uint)item.Permissions.BaseMask; update.InventoryData.OwnerMask = (uint)item.Permissions.OwnerMask; update.InventoryData.GroupMask = (uint)item.Permissions.GroupMask; update.InventoryData.EveryoneMask = (uint)item.Permissions.EveryoneMask; update.InventoryData.NextOwnerMask = (uint)item.Permissions.NextOwnerMask; update.InventoryData.GroupOwned = item.GroupOwned; update.InventoryData.TransactionID = transactionID; update.InventoryData.Type = (sbyte)item.AssetType; update.InventoryData.InvType = (sbyte)item.InventoryType; update.InventoryData.Flags = item.Flags; update.InventoryData.SaleType = (byte)item.SaleType; update.InventoryData.SalePrice = item.SalePrice; update.InventoryData.Name = Helpers.StringToField(item.Name); update.InventoryData.Description = Helpers.StringToField(item.Description); update.InventoryData.CreationDate = (int)Helpers.DateTimeToUnixTime(item.CreationDate); update.InventoryData.CRC = ItemCRC(item); _Client.Network.SendPacket(update); return transactionID; }
public void Inventory_OnItemReceived(InventoryItem item) { Hashtable message = new Hashtable(); message.Add("MessageType", "ItemReceived"); message.Add("Name", item.Name); message.Add("FolderID", item.ParentUUID); message.Add("UUID", item.UUID); message.Add("AssetType", item.AssetType); message.Add("AssetUUID", item.AssetUUID); message.Add("CreatorID", item.CreatorID); message.Add("OwnerID", item.OwnerID); message.Add("CreationDate", item.CreationDate); message.Add("Description", item.Description); message.Add("Flags", item.Flags); message.Add("InventoryType", item.InventoryType); message.Add("Permissions", item.Permissions); enqueue(message); }
public LLUUID RequestInventoryAsset(InventoryItem item, bool priority) { return RequestInventoryAsset(item.AssetUUID, item.UUID, LLUUID.Zero, item.OwnerID, item.AssetType, priority); }
/// <summary> /// Detach an item from avatar using an <seealso cref="libsecondlife.InventoryItem"/> object /// </summary> /// <param name="item">An <seealso cref="libsecondlife.InventoryItem"/> object</param> public void Detach(InventoryItem item) { Detach(item.UUID); }
/// <summary> /// Attach an item to an avatar at a specific attach point /// </summary> /// <param name="item">A <seealso cref="libsecondlife.InventoryItem"/> to attach</param> /// <param name="attachPoint">the <seealso cref="libsecondlife.AttachmentPoint"/> on the avatar /// to attach the item to</param> public void Attach(InventoryItem item, AttachmentPoint attachPoint) { Attach(item.UUID, item.OwnerID, item.Name, item.Description, item.Permissions, item.Flags, attachPoint); }
//Seperate thread private void Inventory_OnItemReceived(InventoryItem item) { BeginInvoke( new InventoryManager.ItemReceivedCallback(ReceivedInventoryItem), new object[] { item }); }
//UI thread private void ReceivedInventoryItem(InventoryItem item) { ProcessIncomingObject(item); }
/// <summary> /// Occurs when user Right-Clicks an item and chooses Download /// Connects to SL to download a single InventoryItem /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void downloadToolStripMenuItem_Click(object sender, EventArgs e) { try { if (!String.IsNullOrEmpty((String)treeView1.SelectedNode.Tag)) { if ((((String)treeView1.SelectedNode.Tag) == "notecard") || (((String)treeView1.SelectedNode.Tag) == "lsl") || (((String)treeView1.SelectedNode.Tag) == "snapshot") || (((String)treeView1.SelectedNode.Tag) == "texture") || (((String)treeView1.SelectedNode.Tag) == "rootcategory")) { //Get the SLMIV object for this item Item SLMIVItem; InventoryNotecard notecard; string ObjectsKey = treeView1.SelectedNode.Name; int ivalue = 0; MIUtils.OD_treeindex.TryGetValue(ObjectsKey, out ivalue); MIUtils.INV_TYPE objtype = new MIUtils.INV_TYPE(); Object objectinfo = new Object(); if (ivalue != -1) { objectinfo = MIUtils.GetMyInventoryObject(ivalue, out objtype); if (objtype == MIUtils.INV_TYPE.ITEM) { SLMIVItem = ((Item)objectinfo); Console.WriteLine("[SLMIV]: Retreiving " + treeView1.SelectedNode.Text + ", " + treeView1.SelectedNode.Name); //Check to make sure currently online if (client.Network.Connected) { LLUUID uuid = new LLUUID(); uuid = LLUUID.Parse(treeView1.SelectedNode.Name); InventoryItem item = new InventoryItem(uuid); if (libsecItemDict.TryGetValue(uuid, out item)) { if ((item.AssetType == AssetType.Notecard) || (item.AssetType == AssetType.LSLText)) { frmNotecardEditor notecEdfrm = new frmNotecardEditor(item, this.client, this.netcom, imageListTreeView); notecEdfrm.ItemTreeNode = treeView1.SelectedNode;//Pass the TreeNode so it has its fullpath notecEdfrm.Show(); } else if (item.AssetType == AssetType.Texture) { //Show ImageViewerForm iviewer = new ImageViewerForm(item, client, netcom, imageListTreeView, imageCache); iviewer.ItemTreeNode = treeView1.SelectedNode;//Pass the TreeNode so it has its fullpath iviewer.Show(); } } } else { MessageBox.Show("Can not download because you are not currently connected to the online grid.", "Can Not Download", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } else { //Exception ?? Really? Please tell me why MessageBox.Show("ERROR: Can not download because the selected item in the inventory tree [" + treeView1.SelectedNode.Text + "] is not found in MIUtils.OD_treeindex.", "Can Not Download", MessageBoxButtons.OK, MessageBoxIcon.Error); } } else { MessageBox.Show("Can not download because the selected item in the inventory tree [" + treeView1.SelectedNode.Text + "] is not a Notecard or LSL script.", "Can Not Download", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } catch (Exception) { } }
/// <summary> /// Searches treeLookup for InventoryItem.UUID and returns its <LLUUID, TreeNode> object /// if it is not found, it adds <UUID string, item.Name> to incoming TreeNode node /// then node to treeLookup /// </summary> /// <param name="item">InventoryItem</param> /// <param name="node">TreeNode</param> /// <returns>TreeNode with added <UUID string, item.Name> item</returns> private TreeNode AddTreeItem(InventoryItem item, TreeNode node) { if (treeLookup.ContainsKey(item.UUID)) return treeLookup[item.UUID]; TreeNode itemNode = node.Nodes.Add(item.UUID.ToString(), item.Name); itemNode.Tag = item; switch (item.InventoryType) { case InventoryType.Wearable: itemNode.ImageKey = "Gear"; //TODO: use "clothing" key instead break; case InventoryType.Notecard: itemNode.ImageKey = "Notecard"; break; case InventoryType.LSL: itemNode.ImageKey = "Script"; break; case InventoryType.Texture: itemNode.ImageKey = "Gear"; //TODO: use "image" key instead break; default: itemNode.ImageKey = "Gear"; break; } treeLookup.Add(item.UUID, itemNode); return itemNode; }
public QueuedDownloadInfo(string file, InventoryItem iitem) { FileName = file; IItem = iitem; WhenRequested = DateTime.Now; IsRequested = false; }