コード例 #1
0
        public static void WriteTaskInventory(Primitive sop, XmlTextWriter writer, ICollection <InventoryBase> tinv, ImportSettings options)
        {
            if (tinv == null)
            {
                return;
            }
            int ObjectNum = -1;

            if (tinv.Count > 0) // otherwise skip this
            {
                writer.WriteStartElement("TaskInventory");

                foreach (InventoryBase item2c in tinv)
                {
                    InventoryItem item = item2c as InventoryItem;
                    if (item == null)
                    {
                        continue;
                    }
                    string itemName      = item.Name;
                    bool   obj           = (item.AssetType == AssetType.Object);
                    UUID   itemAssetUUID = obj ? item.RezzID : item.AssetUUID;
                    if (obj)
                    {
                        ObjectNum++;
                        if (CogbotHelpers.IsNullOrZero(itemAssetUUID))
                        {
                            string rtiStatus = ExportCommand.dumpDir + sop.ID + "." + ObjectNum + ".rti";
                            lock (ExportCommand.fileWriterLock)
                            {
                                if (File.Exists(rtiStatus))
                                {
                                    string[] conts = File.ReadAllText(rtiStatus).Split(',');
                                    if (conts.Length > 2)
                                    {
                                        itemAssetUUID = UUID.Parse(conts[0]);
                                    }
                                }
                            }
                        }
                        if (CogbotHelpers.IsNullOrZero(itemAssetUUID))
                        {
                            ExportCommand.LogError(sop.ID, "AssetZERO: " + item);
                            if (!options.ContainsKey("keepmissing"))
                            {
                                continue;
                            }
                            if (options.ContainsKey("use404"))
                            {
                                itemAssetUUID = ImportCommand.GetMissingFiller(item.AssetType);
                            }
                            if (options.ContainsKey("error404") && !itemName.Contains("ERROR404"))
                            {
                                itemName += "ERROR404";
                            }
                            ImportCommand.Importing.Failure("Zero AssetID " + item.Name);
                        }
                    }
                    else
                    {
                        if (CogbotHelpers.IsNullOrZero(itemAssetUUID))
                        {
                            itemAssetUUID = item.RezzID;
                        }
                        if (CogbotHelpers.IsNullOrZero(itemAssetUUID))
                        {
                            ExportCommand.LogError(sop.ID, "AssetZERO: " + item);
                            if (!options.ContainsKey("keepmissing"))
                            {
                                continue;
                            }
                            if (options.ContainsKey("use404"))
                            {
                                itemAssetUUID = ImportCommand.GetMissingFiller(item.AssetType);
                            }
                            if (options.ContainsKey("error404") && !itemName.Contains("ERROR404"))
                            {
                                itemName += "ERROR404";
                            }
                            ImportCommand.Importing.Failure("Zero AssetID " + item.Name);
                        }
                    }
                    writer.WriteStartElement("TaskInventoryItem");
                    Permissions perms = item.Permissions;
                    if (!options.Contains("sameperm"))
                    {
                        perms = Permissions.FullPermissions;
                    }

                    if (CogbotHelpers.IsNullOrZero(itemAssetUUID))
                    {
                        continue;
                    }
                    WriteUUID(writer, "AssetID", itemAssetUUID, options);
                    WriteEnum(writer, "BasePermissions", perms.BaseMask);
                    WriteDate(writer, "CreationDate", item.CreationDate);

                    WriteUUID(writer, "CreatorID", item.CreatorID, options);

                    /*
                     * //todo if (item.CreatorData != null && item.CreatorData != string.Empty)
                     *  WES(writer,"CreatorData", item.CreatorData);
                     * else if (options.ContainsKey("home"))
                     * {
                     *  if (m_UserManagement == null)
                     *      m_UserManagement = scene.RequestModuleInterface<IUserManagement>();
                     *  string name = m_UserManagement.GetUserName(item.CreatorID);
                     *  WES(writer,"CreatorData", (string)options["home"] + ";" + name);
                     * }
                     */
                    WriteValue(writer, "Description", item.Description);
                    WriteEnum(writer, "EveryonePermissions", Reperm(perms.EveryoneMask, options));
                    WriteUInt(writer, "Flags", item.Flags);
                    WriteUUID(writer, "GroupID", item.GroupID, options);
                    WriteEnum(writer, "GroupPermissions", Reperm(perms.GroupMask, options));
                    WriteEnum(writer, "InvType", item.InventoryType);
                    WriteUUID(writer, "ItemID", item.UUID, options);
                    //todo WriteUUID(writer, "OldItemID", item.OldItemID, options);

                    UUID lastOwnerID = options.ContainsKey("wipe-owners") ? UUID.Zero : item.LastOwnerID;
                    WriteUserUUID(writer, "LastOwnerID", lastOwnerID, options);

                    WriteValue(writer, "Name", itemName);
                    WriteEnum(writer, "NextPermissions", Reperm(perms.NextOwnerMask, options));

                    UUID ownerID = options.ContainsKey("wipe-owners") ? UUID.Zero : item.OwnerID;
                    WriteUUID(writer, "OwnerID", ownerID, options);

                    WriteEnum(writer, "CurrentPermissions", Reperm(perms.OwnerMask, options));
                    WriteUUID(writer, "ParentID", item.ParentUUID, options);

                    /*todo
                     * WriteUUID(writer, "ParentPartID", item.ParentPartID, options);
                     * WriteUUID(writer, "PermsGranter", item.PermsGranter, options);
                     */
                    // todo what is this?
                    WriteEnum(writer, "PermsMask", PermissionMask.All);//  perms.BaseMask);//item.PermsMask);

                    WriteEnum(writer, "Type", item.AssetType);
                    //todo WES(writer,"OwnerChanged", item.OwnerChanged.ToString().ToLower());

                    writer.WriteEndElement(); // TaskInventoryItem
                }

                writer.WriteEndElement(); // TaskInventory
            }
        }