diff --git a/OpenSim/Framework/Communications/Cache/AssetCache.cs b/OpenSim/Framework/Communications/Cache/AssetCache.cs index 32ba830651..0c6d971f4e 100644 --- a/OpenSim/Framework/Communications/Cache/AssetCache.cs +++ b/OpenSim/Framework/Communications/Cache/AssetCache.cs @@ -350,7 +350,6 @@ namespace OpenSim.Framework.Communications.Caches Transfer.TransferInfo.TargetType = 0; if (req.AssetRequestSource == 2) { - //Transfer.TransferInfo.Params = req.Params; Transfer.TransferInfo.Params = new byte[20]; Array.Copy(req.RequestAssetID.GetBytes(), 0, Transfer.TransferInfo.Params, 0, 16); int assType = (int)req.AssetInf.Type; @@ -389,19 +388,19 @@ namespace OpenSim.Framework.Communications.Caches { chunk = new byte[req.AssetInf.Data.Length]; Array.Copy(req.AssetInf.Data, chunk, req.AssetInf.Data.Length); + TransferPacket.TransferData.Data = chunk; + TransferPacket.TransferData.Status = 1; + req.RequestUser.OutPacket(TransferPacket); } else { chunk = new byte[1000]; Array.Copy(req.AssetInf.Data, chunk, 1000); - } - TransferPacket.TransferData.Data = chunk; - TransferPacket.TransferData.Status = 0; - req.RequestUser.OutPacket(TransferPacket); + TransferPacket.TransferData.Data = chunk; + TransferPacket.TransferData.Status = 0; + req.RequestUser.OutPacket(TransferPacket); - if (req.AssetInf.Data.Length > 1000) - { TransferPacket = new TransferPacketPacket(); TransferPacket.TransferData.Packet = 1; TransferPacket.TransferData.ChannelType = 2; @@ -411,7 +410,7 @@ namespace OpenSim.Framework.Communications.Caches TransferPacket.TransferData.Data = chunk1; TransferPacket.TransferData.Status = 1; req.RequestUser.OutPacket(TransferPacket); - } + } } } diff --git a/OpenSim/Framework/Communications/Cache/LibraryRootFolder.cs b/OpenSim/Framework/Communications/Cache/LibraryRootFolder.cs index f807b2ba27..7813adc7dd 100644 --- a/OpenSim/Framework/Communications/Cache/LibraryRootFolder.cs +++ b/OpenSim/Framework/Communications/Cache/LibraryRootFolder.cs @@ -43,7 +43,7 @@ namespace OpenSim.Framework.Communications.Caches item.assetID = new LLUUID("00000000-0000-0000-9999-000000000002"); item.inventoryDescription = "Plywood texture"; item.inventoryName = "Plywood"; - item.type = 0; + item.assetType = 0; item.parentFolderID = m_textureFolder.folderID; item.inventoryBasePermissions = 0x7FFFFFFF; item.inventoryEveryOnePermissions = 0x7FFFFFFF; @@ -58,7 +58,7 @@ namespace OpenSim.Framework.Communications.Caches item.assetID = new LLUUID("00000000-0000-0000-9999-000000000003"); item.inventoryDescription = "Rocks texture"; item.inventoryName = "Rocks"; - item.type = 0; + item.assetType = 0; item.parentFolderID = m_textureFolder.folderID; item.inventoryBasePermissions = 0x7FFFFFFF; item.inventoryEveryOnePermissions = 0x7FFFFFFF; @@ -73,7 +73,7 @@ namespace OpenSim.Framework.Communications.Caches item.assetID = new LLUUID("00000000-0000-0000-9999-000000000001"); item.inventoryDescription = "Bricks texture"; item.inventoryName = "Bricks"; - item.type = 0; + item.assetType = 0; item.parentFolderID = m_textureFolder.folderID; item.inventoryBasePermissions = 0x7FFFFFFF; item.inventoryEveryOnePermissions = 0x7FFFFFFF; @@ -88,7 +88,7 @@ namespace OpenSim.Framework.Communications.Caches item.assetID = new LLUUID("00000000-0000-0000-9999-000000000004"); item.inventoryDescription = "Granite texture"; item.inventoryName = "Granite"; - item.type = 0; + item.assetType = 0; item.parentFolderID = m_textureFolder.folderID; item.inventoryBasePermissions = 0x7FFFFFFF; item.inventoryEveryOnePermissions = 0x7FFFFFFF; @@ -103,7 +103,7 @@ namespace OpenSim.Framework.Communications.Caches item.assetID = new LLUUID("00000000-0000-0000-9999-000000000005"); item.inventoryDescription = "Hardwood texture"; item.inventoryName = "Hardwood"; - item.type = 0; + item.assetType = 0; item.parentFolderID = m_textureFolder.folderID; item.inventoryBasePermissions = 0x7FFFFFFF; item.inventoryEveryOnePermissions = 0x7FFFFFFF; @@ -118,7 +118,8 @@ namespace OpenSim.Framework.Communications.Caches item.assetID = new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73"); item.inventoryDescription = "Default Shape"; item.inventoryName = "Default Shape"; - item.type = 13; + item.assetType = 13; + item.invType = 18; item.parentFolderID = this.folderID; item.inventoryCurrentPermissions = 0; item.inventoryNextPermissions = 0; @@ -131,12 +132,41 @@ namespace OpenSim.Framework.Communications.Caches item.assetID = new LLUUID("77c41e39-38f9-f75a-024e-585989bbabbb"); item.inventoryDescription = "Default Skin"; item.inventoryName = "Default Skin"; - item.type = 13; + item.assetType = 13; + item.invType = 18; item.parentFolderID = this.folderID; item.inventoryCurrentPermissions = 0; item.inventoryNextPermissions = 0; this.Items.Add(item.inventoryID, item); - + + item = new InventoryItemBase(); + item.avatarID = libOwner; + item.creatorsID = libOwner; + item.inventoryID = new LLUUID("77c41e39-38f9-f75a-0000-585989bf0000"); + item.assetID = new LLUUID("00000000-38f9-1111-024e-222222111110"); + item.inventoryDescription = "Default Shirt"; + item.inventoryName = "Default Shirt"; + item.assetType = 5; + item.invType = 18; + item.parentFolderID = this.folderID; + item.inventoryCurrentPermissions = 0; + item.inventoryNextPermissions = 0; + this.Items.Add(item.inventoryID, item); + + item = new InventoryItemBase(); + item.avatarID = libOwner; + item.creatorsID = libOwner; + item.inventoryID = new LLUUID("77c41e39-38f9-f75a-0000-5859892f1111"); + item.assetID = new LLUUID("00000000-38f9-1111-024e-222222111120"); + item.inventoryDescription = "Default Pants"; + item.inventoryName = "Default Pants"; + item.assetType = 5; + item.invType = 18; + item.parentFolderID = this.folderID; + item.inventoryCurrentPermissions = 0; + item.inventoryNextPermissions = 0; + this.Items.Add(item.inventoryID, item); + item = new InventoryItemBase(); item.avatarID = libOwner; item.creatorsID = libOwner; @@ -144,7 +174,8 @@ namespace OpenSim.Framework.Communications.Caches item.assetID = new LLUUID("00000000-0000-2222-3333-000000000001"); item.inventoryDescription = "Welcome"; item.inventoryName = "Welcome"; - item.type = 7; + item.assetType = 7; + item.invType = 7; item.parentFolderID = this.folderID; item.inventoryCurrentPermissions = (1 << 15); item.inventoryNextPermissions = (1 << 15); diff --git a/OpenSim/Framework/Communications/Capabilities/Caps.cs b/OpenSim/Framework/Communications/Capabilities/Caps.cs index 5df66f467a..a55297a67c 100644 --- a/OpenSim/Framework/Communications/Capabilities/Caps.cs +++ b/OpenSim/Framework/Communications/Capabilities/Caps.cs @@ -299,7 +299,7 @@ namespace OpenSim.Region.Capabilities private LLUUID newAssetID; private LLUUID inventoryItemID; private BaseHttpServer httpListener; - private bool SaveImages = true; + private bool SaveImages = false; private string m_assetName = ""; /// diff --git a/OpenSim/Framework/Data.MySQL/MySQLManager.cs b/OpenSim/Framework/Data.MySQL/MySQLManager.cs index affb8f3598..3624c7d401 100644 --- a/OpenSim/Framework/Data.MySQL/MySQLManager.cs +++ b/OpenSim/Framework/Data.MySQL/MySQLManager.cs @@ -405,7 +405,7 @@ namespace OpenSim.Framework.Data.MySQL item.inventoryName = (string)reader["inventoryName"]; item.inventoryNextPermissions = Convert.ToUInt32(reader["inventoryNextPermissions"].ToString()); item.parentFolderID = new LLUUID((string)reader["parentFolderID"]); - item.type = Convert.ToInt32(reader["type"].ToString()); + item.assetType = Convert.ToInt32(reader["type"].ToString()); rows.Add(item); } @@ -474,7 +474,7 @@ namespace OpenSim.Framework.Data.MySQL Dictionary parameters = new Dictionary(); parameters["?inventoryID"] = item.inventoryID.ToStringHyphenated(); parameters["?assetID"] = item.assetID.ToStringHyphenated(); - parameters["?type"] = item.type.ToString(); + parameters["?type"] = item.assetType.ToString(); parameters["?parentFolderID"] = item.parentFolderID.ToStringHyphenated(); parameters["?avatarID"] = item.avatarID.ToStringHyphenated(); parameters["?inventoryName"] = item.inventoryName; diff --git a/OpenSim/Framework/Data/InventoryData.cs b/OpenSim/Framework/Data/InventoryData.cs index c43ff1a1b6..a12b87b0e4 100644 --- a/OpenSim/Framework/Data/InventoryData.cs +++ b/OpenSim/Framework/Data/InventoryData.cs @@ -46,7 +46,11 @@ namespace OpenSim.Framework.Data /// /// This is an enumerated value determining the type of asset (eg Notecard, Sound, Object, etc) /// - public int type; + public int assetType; + /// + /// The type of inventory item. (Can be slightly different to the asset type + /// + public int invType; /// /// The folder this item is contained in /// diff --git a/OpenSim/Framework/General/Types/AgentWearable.cs b/OpenSim/Framework/General/Types/AgentWearable.cs index 8c704ceb47..1b287a9901 100644 --- a/OpenSim/Framework/General/Types/AgentWearable.cs +++ b/OpenSim/Framework/General/Types/AgentWearable.cs @@ -51,8 +51,14 @@ namespace OpenSim.Framework.Types defaultWearables[0].AssetID = new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73"); defaultWearables[0].ItemID = new LLUUID("66c41e39-38f9-f75a-024e-585989bfaba9"); - //defaultWearables[1].ItemID = new LLUUID("77c41e39-38f9-f75a-024e-585989bfabc9"); - //defaultWearables[1].AssetID = new LLUUID("77c41e39-38f9-f75a-024e-585989bbabbb"); + defaultWearables[1].ItemID = new LLUUID("77c41e39-38f9-f75a-024e-585989bfabc9"); + defaultWearables[1].AssetID = new LLUUID("77c41e39-38f9-f75a-024e-585989bbabbb"); + + defaultWearables[4].ItemID = new LLUUID("77c41e39-38f9-f75a-0000-585989bf0000"); + defaultWearables[4].AssetID = new LLUUID("00000000-38f9-1111-024e-222222111110"); + + defaultWearables[5].ItemID = new LLUUID("77c41e39-38f9-f75a-0000-5859892f1111"); + defaultWearables[5].AssetID = new LLUUID("00000000-38f9-1111-024e-222222111120"); return defaultWearables; } } diff --git a/OpenSim/Region/ClientStack/ClientView.API.cs b/OpenSim/Region/ClientStack/ClientView.API.cs index 9a296f1355..2733f0a409 100644 --- a/OpenSim/Region/ClientStack/ClientView.API.cs +++ b/OpenSim/Region/ClientStack/ClientView.API.cs @@ -541,14 +541,14 @@ namespace OpenSim.Region.ClientStack descend.ItemData[i].FolderID = item.parentFolderID; descend.ItemData[i].GroupID = new LLUUID("00000000-0000-0000-0000-000000000000"); descend.ItemData[i].GroupMask = 0; - descend.ItemData[i].InvType = (sbyte)item.type; + descend.ItemData[i].InvType = (sbyte)item.invType; descend.ItemData[i].Name = enc.GetBytes(item.inventoryName+ "\0"); descend.ItemData[i].NextOwnerMask = item.inventoryNextPermissions; descend.ItemData[i].OwnerID = item.avatarID; descend.ItemData[i].OwnerMask = item.inventoryCurrentPermissions; descend.ItemData[i].SalePrice = 0; descend.ItemData[i].SaleType = 0; - descend.ItemData[i].Type = (sbyte)item.type; + descend.ItemData[i].Type = (sbyte)item.assetType; descend.ItemData[i].CRC = Helpers.InventoryCRC(1000, 0, descend.ItemData[i].InvType, descend.ItemData[i].Type, descend.ItemData[i].AssetID, descend.ItemData[i].GroupID, 100,descend.ItemData[i].OwnerID, descend.ItemData[i].CreatorID, descend.ItemData[i].ItemID, descend.ItemData[i].FolderID, FULL_MASK_PERMISSIONS, 1, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS); i++; @@ -577,14 +577,14 @@ namespace OpenSim.Region.ClientStack inventoryReply.InventoryData[0].FolderID = item.parentFolderID; inventoryReply.InventoryData[0].GroupID = new LLUUID("00000000-0000-0000-0000-000000000000"); inventoryReply.InventoryData[0].GroupMask = 0; - inventoryReply.InventoryData[0].InvType = (sbyte)item.type; + inventoryReply.InventoryData[0].InvType = (sbyte)item.invType; inventoryReply.InventoryData[0].Name = enc.GetBytes(item.inventoryName + "\0"); inventoryReply.InventoryData[0].NextOwnerMask = item.inventoryNextPermissions; inventoryReply.InventoryData[0].OwnerID = item.avatarID; inventoryReply.InventoryData[0].OwnerMask = item.inventoryCurrentPermissions; inventoryReply.InventoryData[0].SalePrice = 0; inventoryReply.InventoryData[0].SaleType = 0; - inventoryReply.InventoryData[0].Type = (sbyte)item.type; + inventoryReply.InventoryData[0].Type = (sbyte)item.assetType; inventoryReply.InventoryData[0].CRC = Helpers.InventoryCRC(1000, 0, inventoryReply.InventoryData[0].InvType, inventoryReply.InventoryData[0].Type, inventoryReply.InventoryData[0].AssetID, inventoryReply.InventoryData[0].GroupID, 100, inventoryReply.InventoryData[0].OwnerID, inventoryReply.InventoryData[0].CreatorID, inventoryReply.InventoryData[0].ItemID, inventoryReply.InventoryData[0].FolderID, FULL_MASK_PERMISSIONS, 1, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS); this.OutPacket(inventoryReply); @@ -610,14 +610,14 @@ namespace OpenSim.Region.ClientStack InventoryReply.InventoryData[0].FolderID = Item.parentFolderID; InventoryReply.InventoryData[0].GroupID = new LLUUID("00000000-0000-0000-0000-000000000000"); InventoryReply.InventoryData[0].GroupMask = 0; - InventoryReply.InventoryData[0].InvType =(sbyte) Item.type; + InventoryReply.InventoryData[0].InvType =(sbyte) Item.invType; InventoryReply.InventoryData[0].Name = enc.GetBytes(Item.inventoryName + "\0"); InventoryReply.InventoryData[0].NextOwnerMask = Item.inventoryNextPermissions; InventoryReply.InventoryData[0].OwnerID = Item.avatarID; InventoryReply.InventoryData[0].OwnerMask = Item.inventoryCurrentPermissions; InventoryReply.InventoryData[0].SalePrice = 100; InventoryReply.InventoryData[0].SaleType = 0; - InventoryReply.InventoryData[0].Type =(sbyte) Item.type; + InventoryReply.InventoryData[0].Type =(sbyte) Item.assetType; InventoryReply.InventoryData[0].CRC = Helpers.InventoryCRC(1000, 0, InventoryReply.InventoryData[0].InvType, InventoryReply.InventoryData[0].Type, InventoryReply.InventoryData[0].AssetID, InventoryReply.InventoryData[0].GroupID, 100, InventoryReply.InventoryData[0].OwnerID, InventoryReply.InventoryData[0].CreatorID, InventoryReply.InventoryData[0].ItemID, InventoryReply.InventoryData[0].FolderID, FULL_MASK_PERMISSIONS, 1, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS); OutPacket(InventoryReply); diff --git a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs index 11c20305db..70bd0034ab 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs @@ -688,7 +688,7 @@ namespace OpenSim.Region.Environment.Scenes item.assetID = asset.FullID; item.inventoryDescription = description; item.inventoryName = name; - item.type = invType; + item.assetType = invType; item.parentFolderID = folderID; item.inventoryCurrentPermissions = 2147483647; item.inventoryNextPermissions = nextOwnerMask; diff --git a/OpenSim/Region/GridInterfaces/Local/LocalAssetServer.cs b/OpenSim/Region/GridInterfaces/Local/LocalAssetServer.cs index 919ad6c18e..38bf9bff99 100644 --- a/OpenSim/Region/GridInterfaces/Local/LocalAssetServer.cs +++ b/OpenSim/Region/GridInterfaces/Local/LocalAssetServer.cs @@ -246,6 +246,40 @@ namespace OpenSim.Region.GridInterfaces.Local db.Set(store); db.Commit(); + Image = new AssetBase(); + Image.FullID = new LLUUID("00000000-0000-1111-9999-000000000010"); + Image.Name = "Female Body Texture"; + this.LoadAsset(Image, true, "femalebody.jp2"); + store = new AssetStorage(); + store.Data = Image.Data; + store.Name = Image.Name; + store.UUID = Image.FullID; + db.Set(store); + db.Commit(); + + Image = new AssetBase(); + Image.FullID = new LLUUID("00000000-0000-1111-9999-000000000011"); + Image.Name = "Female Bottom Texture"; + this.LoadAsset(Image, true, "femalebottom.jp2"); + store = new AssetStorage(); + store.Data = Image.Data; + store.Name = Image.Name; + store.UUID = Image.FullID; + db.Set(store); + db.Commit(); + + Image = new AssetBase(); + Image.FullID = new LLUUID("00000000-0000-1111-9999-000000000012"); + Image.Name = "Female Face Texture"; + this.LoadAsset(Image, true, "femaleface.jp2"); + store = new AssetStorage(); + store.Data = Image.Data; + store.Name = Image.Name; + store.UUID = Image.FullID; + db.Set(store); + db.Commit(); + + /* Image = new AssetBase(); Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000008"); @@ -285,6 +319,32 @@ namespace OpenSim.Region.GridInterfaces.Local db.Set(store); db.Commit(); + Image = new AssetBase(); + Image.FullID = new LLUUID("00000000-38f9-1111-024e-222222111110"); + Image.Name = "Shirt"; + Image.Type = 5; + Image.InvType = 18; + this.LoadAsset(Image, false, "newshirt.dat"); + store = new AssetStorage(); + store.Data = Image.Data; + store.Name = Image.Name; + store.UUID = Image.FullID; + db.Set(store); + db.Commit(); + + Image = new AssetBase(); + Image.FullID = new LLUUID("00000000-38f9-1111-024e-222222111120"); + Image.Name = "Shirt"; + Image.Type = 5; + Image.InvType = 18; + this.LoadAsset(Image, false, "newpants.dat"); + store = new AssetStorage(); + store.Data = Image.Data; + store.Name = Image.Name; + store.UUID = Image.FullID; + db.Set(store); + db.Commit(); + Image = new AssetBase(); Image.FullID = new LLUUID("00000000-0000-2222-3333-000000000001"); Image.Name = "WelcomeNote"; diff --git a/bin/assets/base_skin.dat b/bin/assets/base_skin.dat index 2ebaed9be6..c51aeb8db8 100644 --- a/bin/assets/base_skin.dat +++ b/bin/assets/base_skin.dat @@ -47,6 +47,6 @@ parameters 26 715 0 775 0 textures 3 -0 00000000-0000-0000-9999-000000000003 -5 00000000-0000-0000-9999-000000000004 -6 00000000-0000-0000-9999-000000000005 +0 00000000-0000-1111-9999-000000000012 +5 00000000-0000-1111-9999-000000000010 +6 00000000-0000-1111-9999-000000000011 diff --git a/bin/assets/femalebody.jp2 b/bin/assets/femalebody.jp2 new file mode 100644 index 0000000000..a50498fb4b Binary files /dev/null and b/bin/assets/femalebody.jp2 differ diff --git a/bin/assets/femalebottom.jp2 b/bin/assets/femalebottom.jp2 new file mode 100644 index 0000000000..88908c6b6b Binary files /dev/null and b/bin/assets/femalebottom.jp2 differ diff --git a/bin/assets/femaleface.jp2 b/bin/assets/femaleface.jp2 new file mode 100644 index 0000000000..7bd0cb0651 Binary files /dev/null and b/bin/assets/femaleface.jp2 differ diff --git a/bin/assets/newhair.dat b/bin/assets/newhair.dat new file mode 100644 index 0000000000..3c5a8c9e10 --- /dev/null +++ b/bin/assets/newhair.dat @@ -0,0 +1,63 @@ +LLWearable version 22 +New Hair + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id a52db6d0-e96c-4454-85e5-3523722daa25 + owner_id a52db6d0-e96c-4454-85e5-3523722daa25 + last_owner_id 00000000-0000-0000-0000-000000000000 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 2 +parameters 39 +16 0 +31 .5 +112 0 +113 0 +114 .5 +115 0 +119 .5 +130 .45 +131 .5 +132 .39 +133 .25 +134 .5 +135 .55 +136 .5 +137 .5 +140 0 +141 0 +142 0 +143 .13 +166 0 +167 0 +168 0 +169 0 +177 0 +181 .14 +182 .7 +183 .05 +184 0 +192 0 +674 -.3 +750 .7 +752 .5 +754 0 +755 .05 +757 -1 +762 0 +763 .55 +785 0 +789 0 +textures 1 +4 7ca39b4c-bd19-4699-aff7-f93fd03d3e7b diff --git a/bin/assets/newpants.dat b/bin/assets/newpants.dat new file mode 100644 index 0000000000..96be61466a --- /dev/null +++ b/bin/assets/newpants.dat @@ -0,0 +1,33 @@ +LLWearable version 22 +New Pants + + permissions 0 + { + base_mask 00000000 + owner_mask 00000000 + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00000000 + creator_id 11111111-1111-0000-0000-000100bba000 + owner_id 11111111-1111-0000-0000-000100bba000 + last_owner_id 00000000-0000-0000-0000-000000000000 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 5 +parameters 9 +625 0 +638 0 +806 .8 +807 .2 +808 .2 +814 1 +815 .8 +816 0 +869 0 +textures 1 +2 5748decc-f629-461c-9a36-a35a221fe21f diff --git a/bin/assets/newshirt.dat b/bin/assets/newshirt.dat new file mode 100644 index 0000000000..bce62bcf37 --- /dev/null +++ b/bin/assets/newshirt.dat @@ -0,0 +1,34 @@ +LLWearable version 22 +New Shirt + + permissions 0 + { + base_mask 00000000 + owner_mask 00000000 + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00000000 + creator_id 11111111-1111-0000-0000-000100bba000 + owner_id 11111111-1111-0000-0000-000100bba000 + last_owner_id 00000000-0000-0000-0000-000000000000 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 4 +parameters 10 +781 .78 +800 .65 +801 .82 +802 .78 +803 .5 +804 .5 +805 .6 +828 0 +840 0 +868 0 +textures 1 +1 5748decc-f629-461c-9a36-a35a221fe21f