本文整理汇总了C#中AvatarAppearance.DetachAttachment方法的典型用法代码示例。如果您正苦于以下问题:C# AvatarAppearance.DetachAttachment方法的具体用法?C# AvatarAppearance.DetachAttachment怎么用?C# AvatarAppearance.DetachAttachment使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AvatarAppearance
的用法示例。
在下文中一共展示了AvatarAppearance.DetachAttachment方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: WearFolder
public AvatarAppearance WearFolder(AvatarAppearance avappearance, UUID user, UUID folderOwnerID)
{
InventoryFolderBase Folder2Wear = m_InventoryService.GetFolderByOwnerAndName(folderOwnerID,
m_forceUserToWearFolderName);
if (Folder2Wear != null)
{
List<InventoryItemBase> itemsInFolder = m_InventoryService.GetFolderItems(UUID.Zero, Folder2Wear.ID);
InventoryFolderBase appearanceFolder = m_InventoryService.GetFolderForType(user, InventoryType.Wearable,
AssetType.Clothing);
InventoryFolderBase folderForAppearance = new InventoryFolderBase(UUID.Random(), "GridWear", user, -1,
appearanceFolder.ID, 1);
List<InventoryFolderBase> userFolders = m_InventoryService.GetFolderFolders(user, appearanceFolder.ID);
bool alreadyThere = false;
List<UUID> items2RemoveFromAppearence = new List<UUID>();
List<UUID> toDelete = new List<UUID>();
foreach (InventoryFolderBase folder in userFolders)
{
if (folder.Name == folderForAppearance.Name)
{
List<InventoryItemBase> itemsInCurrentFolder = m_InventoryService.GetFolderItems(UUID.Zero,
folder.ID);
foreach (InventoryItemBase itemBase in itemsInCurrentFolder)
{
items2RemoveFromAppearence.Add(itemBase.AssetID);
items2RemoveFromAppearence.Add(itemBase.ID);
toDelete.Add(itemBase.ID);
}
folderForAppearance = folder;
alreadyThere = true;
m_InventoryService.DeleteItems(user, toDelete);
break;
}
}
if (!alreadyThere)
m_InventoryService.AddFolder(folderForAppearance);
else
{
// we have to remove all the old items if they are currently wearing them
for (int i = 0; i < avappearance.Wearables.Length; i++)
{
AvatarWearable wearable = avappearance.Wearables[i];
for (int ii = 0; ii < wearable.Count; ii++)
{
if (items2RemoveFromAppearence.Contains(wearable[ii].ItemID))
{
avappearance.Wearables[i] = AvatarWearable.DefaultWearables[i];
break;
}
}
}
List<AvatarAttachment> attachments = avappearance.GetAttachments();
foreach (AvatarAttachment attachment in attachments)
{
if ((items2RemoveFromAppearence.Contains(attachment.AssetID)) ||
(items2RemoveFromAppearence.Contains(attachment.ItemID)))
{
avappearance.DetachAttachment(attachment.ItemID);
}
}
}
// ok, now we have a empty folder, lets add the items
foreach (InventoryItemBase itemBase in itemsInFolder)
{
InventoryItemBase newcopy = m_InventoryService.InnerGiveInventoryItem(user, folderOwnerID, itemBase,
folderForAppearance.ID,
true, true);
if (newcopy.InvType == (int) InventoryType.Object)
{
byte[] attobj = m_AssetService.GetData(newcopy.AssetID.ToString());
if (attobj != null)
{
string xmlData = Utils.BytesToString(attobj);
XmlDocument doc = new XmlDocument();
try
{
doc.LoadXml(xmlData);
}
catch
{
continue;
}
if (doc.FirstChild.OuterXml.StartsWith("<groups>") ||
(doc.FirstChild.NextSibling != null &&
doc.FirstChild.NextSibling.OuterXml.StartsWith("<groups>")))
continue;
string xml = "";
if ((doc.FirstChild.NodeType == XmlNodeType.XmlDeclaration) &&
(doc.FirstChild.NextSibling != null))
xml = doc.FirstChild.NextSibling.OuterXml;
else
xml = doc.FirstChild.OuterXml;
//.........这里部分代码省略.........
示例2: FixCurrentOutFitFolder
public void FixCurrentOutFitFolder(UUID user, ref AvatarAppearance avappearance)
{
InventoryFolderBase CurrentOutFitFolder = m_InventoryService.GetFolderForType(user, 0,
AssetType.CurrentOutfitFolder);
if (CurrentOutFitFolder == null) return;
List<InventoryItemBase> ic = m_InventoryService.GetFolderItems(user, CurrentOutFitFolder.ID);
List<UUID> brokenLinks = new List<UUID>();
List<UUID> OtherStuff = new List<UUID>();
foreach (var i in ic)
{
InventoryItemBase linkedItem = null;
if ((linkedItem = m_InventoryService.GetItem(user, i.AssetID)) == null)
brokenLinks.Add(i.ID);
else if (linkedItem.ID == AvatarWearable.DEFAULT_EYES_ITEM ||
linkedItem.ID == AvatarWearable.DEFAULT_BODY_ITEM ||
linkedItem.ID == AvatarWearable.DEFAULT_HAIR_ITEM ||
linkedItem.ID == AvatarWearable.DEFAULT_PANTS_ITEM ||
linkedItem.ID == AvatarWearable.DEFAULT_SHIRT_ITEM ||
linkedItem.ID == AvatarWearable.DEFAULT_SKIN_ITEM)
brokenLinks.Add(i.ID); //Default item link, needs removed
else if (!OtherStuff.Contains(i.AssetID))
OtherStuff.Add(i.AssetID);
}
for (int i = 0; i < avappearance.Wearables.Length; i++)
{
AvatarWearable wearable = avappearance.Wearables[i];
for (int ii = 0; ii < wearable.Count; ii++)
{
if (!OtherStuff.Contains(wearable[ii].ItemID))
{
InventoryItemBase linkedItem2 = null;
if ((linkedItem2 = m_InventoryService.GetItem(user, wearable[ii].ItemID)) != null)
{
InventoryItemBase linkedItem3 = (InventoryItemBase) linkedItem2.Clone();
linkedItem3.AssetID = linkedItem2.ID;
linkedItem3.AssetType = (int) AssetType.Link;
linkedItem3.ID = UUID.Random();
linkedItem3.CurrentPermissions = linkedItem2.NextPermissions;
linkedItem3.EveryOnePermissions = linkedItem2.NextPermissions;
linkedItem3.Folder = CurrentOutFitFolder.ID;
m_InventoryService.AddItem(linkedItem3);
}
else
{
avappearance.Wearables[i] = AvatarWearable.DefaultWearables[i];
}
}
}
}
List<UUID> items2UnAttach = new List<UUID>();
foreach (KeyValuePair<int, List<AvatarAttachment>> attachmentSpot in avappearance.Attachments)
{
foreach (AvatarAttachment attachment in attachmentSpot.Value)
{
if (!OtherStuff.Contains(attachment.ItemID))
{
InventoryItemBase linkedItem2 = null;
if ((linkedItem2 = m_InventoryService.GetItem(user, attachment.ItemID)) != null)
{
InventoryItemBase linkedItem3 = (InventoryItemBase) linkedItem2.Clone();
linkedItem3.AssetID = linkedItem2.ID;
linkedItem3.AssetType = (int) AssetType.Link;
linkedItem3.ID = UUID.Random();
linkedItem3.CurrentPermissions = linkedItem2.NextPermissions;
linkedItem3.EveryOnePermissions = linkedItem2.NextPermissions;
linkedItem3.Folder = CurrentOutFitFolder.ID;
m_InventoryService.AddItem(linkedItem3);
}
else
items2UnAttach.Add(attachment.ItemID);
}
}
}
foreach (UUID uuid in items2UnAttach)
{
avappearance.DetachAttachment(uuid);
}
if (brokenLinks.Count != 0)
m_InventoryService.DeleteItems(user, brokenLinks);
}