From df9c30b6099d54253f79a4d54ac9970c399fd7ef Mon Sep 17 00:00:00 2001 From: Christopher Date: Fri, 10 Jul 2020 20:21:16 +0200 Subject: [PATCH] remove and add to outfit folder --- src/Appearance2Avatar.cs | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/Appearance2Avatar.cs b/src/Appearance2Avatar.cs index e1f6032..78ac984 100644 --- a/src/Appearance2Avatar.cs +++ b/src/Appearance2Avatar.cs @@ -102,16 +102,46 @@ namespace OpenSim.Modules.Appearance2Avatar foreach (SceneObjectGroup _attachment in _allAttachments) m_scene.AttachmentsModule.DetachSingleAttachmentToInv(sp, _attachment); + //Remove current outfit from inventory + InventoryFolderBase _outfitFolder = m_scene.InventoryService.GetFolderForType(sp.UUID, FolderType.CurrentOutfit); + + if(_outfitFolder != null) + { + InventoryCollection _outfitFolderContend = m_scene.InventoryService.GetFolderContent(sp.UUID, _outfitFolder.ID); + + List _itemIDs = new List(); + foreach (InventoryItemBase item in _outfitFolderContend.Items.ToArray()) + _itemIDs.Add(item.ID); + + m_scene.InventoryService.DeleteItems(sp.UUID, _itemIDs); + } //Load Appearance - m_log.Info(noteCardContend); - m_log.Info("[" + Name + "] Info: Deserialize notecard."); OSDMap appearanceOsd = (OSDMap)OSDParser.DeserializeLLSDXml(noteCardContend); AvatarAppearance _appearance = new AvatarAppearance(appearanceOsd); + //Add Attachments m_scene.AvatarFactory.SetAppearance(sp, _appearance, WearableCacheItem.FromOSD(appearanceOsd, m_assetCache)); m_scene.AvatarService.SetAppearance(sp.UUID, _appearance); + //Add items to current outfit inventory + if (_outfitFolder != null) + { + List _attachments = _appearance.GetAttachments(); + + foreach(AvatarAttachment attachment in _attachments) + { + InventoryItemBase _item = new InventoryItemBase(); + _item.AssetID = attachment.AssetID; + _item.AssetType = (int)AssetType.Object; + _item.Name = "Unknown Attachment"; + _item.Owner = sp.UUID; + _item.Folder = _outfitFolder.ID; + + m_scene.InventoryService.AddItem(_item); + } + } + //Send Update m_log.Info("[" + Name + "] Info: Send update to all clients"); foreach (ScenePresence presens in m_scene.GetScenePresences())