private static void CollisionFilterFromXml(ObjectPartInventoryItem item, XmlTextReader reader) { for (; ;) { if (!reader.Read()) { throw new InvalidObjectXmlException(); } switch (reader.NodeType) { case XmlNodeType.Element: if (reader.Name == "Name") { ObjectPartInventoryItem.CollisionFilterParam p = item.CollisionFilter; p.Name = reader.ReadElementValueAsString(); item.CollisionFilter = p; } else if (reader.Name == "ID") { ObjectPartInventoryItem.CollisionFilterParam p = item.CollisionFilter; string v = reader.ReadElementValueAsString(); if (!UUID.TryParse(v, out p.ID)) { p.ID = UUID.Zero; } item.CollisionFilter = p; } else if (reader.Name == "Type") { ObjectPartInventoryItem.CollisionFilterParam p = item.CollisionFilter; p.Type = (ObjectPartInventoryItem.CollisionFilterEnum)Enum.Parse(typeof(ObjectPartInventoryItem.CollisionFilterEnum), reader.ReadElementContentAsString()); item.CollisionFilter = p; } else { reader.ReadToEndElement(); } break; case XmlNodeType.EndElement: if (reader.Name != "CollisionFilter") { throw new InvalidObjectXmlException(); } return; } } throw new InvalidObjectXmlException(); }
public void ToXml(XmlTextWriter writer, UGUI nextOwner, XmlSerializationOptions options) { writer.WriteNamedValue("InventorySerial", InventorySerial); writer.WriteStartElement("TaskInventory"); { foreach (ObjectPartInventoryItem item in Values) { writer.WriteStartElement("TaskInventoryItem"); { writer.WriteUUID("AssetID", (options & XmlSerializationOptions.AdjustForNextOwner) != 0 ? item.NextOwnerAssetID : item.AssetID); writer.WriteNamedValue("BasePermissions", (uint)item.Permissions.Base); writer.WriteNamedValue("CreationDate", item.CreationDate.AsUInt); writer.WriteUUID("CreatorID", item.Creator.ID); if (!string.IsNullOrEmpty(item.Creator.CreatorData)) { writer.WriteNamedValue("CreatorData", item.Creator.CreatorData); } writer.WriteNamedValue("Description", item.Description); writer.WriteNamedValue("EveryonePermissions", (uint)item.Permissions.EveryOne); writer.WriteNamedValue("Flags", (uint)item.Flags); if ((options & XmlSerializationOptions.WriteOwnerInfo) != XmlSerializationOptions.None) { writer.WriteNamedValue("GroupID", item.Group.ID); } else { writer.WriteNamedValue("GroupID", UUID.Zero); } writer.WriteNamedValue("GroupPermissions", (uint)item.Permissions.Group); writer.WriteNamedValue("InvType", (uint)item.InventoryType); writer.WriteUUID("ItemID", item.ID); writer.WriteUUID("OldItemID", UUID.Zero); writer.WriteUUID("LastOwnerID", item.LastOwner.ID); writer.WriteNamedValue("Name", item.Name); writer.WriteNamedValue("NextPermissions", (uint)item.Permissions.NextOwner); if ((options & XmlSerializationOptions.WriteOwnerInfo) != XmlSerializationOptions.None) { writer.WriteUUID("OwnerID", item.Owner.ID); writer.WriteNamedValue("CurrentPermissions", (uint)item.Permissions.Current); } else if ((options & XmlSerializationOptions.AdjustForNextOwner) != XmlSerializationOptions.None) { writer.WriteUUID("OwnerID", nextOwner.ID); writer.WriteNamedValue("CurrentPermissions", (uint)item.Permissions.NextOwner); } else { writer.WriteUUID("OwnerID", UUID.Zero); writer.WriteNamedValue("CurrentPermissions", (uint)item.Permissions.Current); } writer.WriteUUID("ParentID", item.ParentFolderID); writer.WriteUUID("ParentPartID", item.ParentFolderID); var grantinfo = item.PermsGranter; writer.WriteUUID("PermsGranter", grantinfo.PermsGranter.ID); writer.WriteNamedValue("PermsMask", (uint)grantinfo.PermsMask); writer.WriteNamedValue("Type", (int)item.AssetType); writer.WriteNamedValue("OwnerChanged", (options & XmlSerializationOptions.AdjustForNextOwner) != XmlSerializationOptions.None); UEI experienceID = item.ExperienceID; if (experienceID != UEI.Unknown) { writer.WriteNamedValue("ExperienceID", experienceID.ToString()); } { ObjectPartInventoryItem.CollisionFilterParam p = item.CollisionFilter; if (p.ID != UUID.Zero || p.Name?.Length != 0) { writer.WriteStartElement("CollisionFilter"); writer.WriteNamedValue("Name", p.Name); writer.WriteNamedValue("ID", p.ID); writer.WriteNamedValue("Type", p.Type.ToString()); writer.WriteEndElement(); } } } writer.WriteEndElement(); } } writer.WriteEndElement(); }