public void SaveLLSD(BotClient Client, string pathStem, SimObject exportPrim, OutputDelegate Failure, ImportSettings settings) { if (exportPrim != null) { string exportFile = pathStem + ".llsd"; if (Incremental || showsMissingOnly) { lock (fileWriterLock) if (File.Exists(exportFile)) { return; } } needFiles++; if (showsMissingOnly) { Failure("NEED LLSD for " + named(exportPrim)); AddMoveTo(exportPrim.SimPosition); return; } try { List <string> skipTag = new List <string>() { "Tag" }; Primitive prim = exportPrim.Prim; Vector3 pp = prim.Position; Quaternion pr = prim.Rotation; //prim = prim.Clone(); OSDMap primOSD = (OSDMap)prim.GetOSD(); if (prim.ParentID != 0) { var parent = WorldSystem.GetLibOMVHostedPrim(prim.ParentID, settings.CurSim, false); if (parent == null) { pp += new Vector3(128, 128, Client.Self.SimPosition.Z + 20); Failure("YET FAILED: Cant GET parent of " + prim); return; } else { pp = prim.Position * Matrix4.CreateFromQuaternion(parent.Rotation) + parent.Position; pr = parent.Rotation * pr; primOSD["ParentUUID"] = parent.ID; } } primOSD["RegionPosition"] = pp; primOSD["RegionRotation"] = pr; if (exportPrim.PathFinding.MadeNonPhysical) { primOSD["physical"] = true; primOSD["use_physics"] = true; } if (exportPrim.PathFinding.MadeNonTemp) { primOSD["temporary"] = true; } AddExportUser(primOSD["CreatorID"]); AddExportGroup(primOSD["GroupID"]); AddExportUser(primOSD["OwnerID"]); AddExportUser(primOSD["LastOwnerID"]); string output = OSDParser.SerializeLLSDXmlString(primOSD); { lock (fileWriterLock) File.WriteAllText(exportFile, output); } var ptc = Importing.APrimToCreate(prim); ptc.Rezed = exportPrim; if (forced && !verbosely) { return; } return; Primitive prim2 = FromFile(exportFile, ExportCommand.UseBinarySerialization) as Primitive; string memberwiseCompare = MemberwiseCompare(prim, prim2, skipTag); if (!string.IsNullOrEmpty(memberwiseCompare)) { string failre = "Error in LLSD: " + memberwiseCompare; Failure(failre); if (!forced) { File.Delete(exportFile); return; Error(failre); } } } catch (Exception e) { File.Delete(exportFile); Failure("Writing file " + exportFile + " caused " + e); } } }
internal bool SaveTaskInv(ImportSettings arglist, BotClient Client, string pathStem, SimObject exportPrim, OutputDelegate Failure) { string exportFile = pathStem + ".task"; if (Incremental || showsMissingOnly) { lock (fileWriterLock) if (File.Exists(exportFile)) { return(true); } } needFiles++; exportPrim.StartGetTaskInventory(); bool mightHaveTaskInv = exportPrim.TaskInventoryLikely; var ib = exportPrim.TaskInventory; if (ib == null || ib == SimObjectImpl.ERROR_TASK_INV) { bool canSee = checkPerms(Client, exportPrim, SilientFailure, false); bool canScript = checkPerms(Client, exportPrim, SilientFailure, true); if (!canSee) { if (!mightHaveTaskInv) { LogError(exportPrim, "!canSee TaskInv"); lock (fileWriterLock) File.WriteAllText(exportFile, "!canSee"); return(true); } Failure("Cant get/check TaskInv of " + named(exportPrim)); } Failure("NULL TaskInv for " + named(exportPrim)); if (!canScript) { LogError(exportPrim, "!canScript to get TaskInv"); lock (fileWriterLock) File.WriteAllText(exportFile, "!canScript"); return(true); } if (ib == SimObjectImpl.ERROR_TASK_INV) { LogError(exportPrim, "TaskInv Null once"); lock (fileWriterLock) File.WriteAllText(exportFile, "!error"); } return(true); } if (ib.Count == 0) { if (!exportPrim.InventoryEmpty) { if (verbosely) { Failure("ZEROITEM TaskInv for " + named(exportPrim)); } //return; } lock (fileWriterLock) File.WriteAllText(exportFile, ""); return(true); } if (ib.Count == 1) { if (ib[0].Name == "Contents" && ib[0] is InventoryFolder) { lock (fileWriterLock) File.WriteAllText(exportFile, ""); return(true); } } SaveTaskOSD(exportPrim.ID, ib); return(true); OSDArray contents = new OSDArray(); string TaskInvFailures = ""; bool hasObjects = false; foreach (InventoryBase b in ib) { if (b is InventoryObject) { hasObjects = true; break; } } bool wasShouldBeMoving = shouldBeMoving; shouldBeMoving = false; if (hasObjects && taskobj) { MoveCloseTo(exportPrim); } foreach (InventoryBase b in ib) { bool missing; OSDMap was = SaveEachTaskItem(arglist, Client, exportPrim, b, Failure, out missing); if (was != null) { contents.Add(was); } if (missing) { if (forced && false) { Failure("Missing but forced: " + was); } else { TaskInvFailures += was; } } } shouldBeMoving = wasShouldBeMoving; // TaskInvFailures = GetTaskInvFailures(Failure, exportPrim, Client, folderObject, contents, TaskInvFailures); if (showsMissingOnly) { Failure("NEED TASK for " + named(exportPrim)); return(false); } if (string.IsNullOrEmpty(TaskInvFailures)) { lock (fileWriterLock) File.WriteAllText(exportFile, OSDParser.SerializeLLSDXmlString(contents)); } else { Failure(string.Format("Skipping writting contents unil Items/Objects can be resolved: for {0}\n{1}", named(exportPrim), TaskInvFailures)); } var ptc = Importing.APrimToCreate(exportPrim.ID); return(ptc.EnsureTaskInv(false)); }
private void CountReady(ImportSettings settings) { Exporting.GiveStatus(); int readyObjects = 0; int readyObjectsForDelete = 0; int unreadyObjs = 0; int unreadyObjsMustReRez = 0; int requestedShort = 0; foreach (var file in Directory.GetFiles(ExportCommand.dumpDir, "*.*.rti")) { if (!file.EndsWith("rti")) { //rti_status continue; } string rtiData = File.ReadAllText(file); var contents = rtiData.Split(','); if (contents.Length < 2) { requestedShort++; continue; } UUID objID, holderID; if (!UUID.TryParse(contents[0], out objID) || !UUID.TryParse(contents[1], out holderID)) { Failure("SHORT: " + file + " " + rtiData); requestedShort++; continue; } // var uuidstr = Path.GetFileName(file).Split('.'); // var objNum = int.Parse(uuidstr[1]); string completeStr = ExportCommand.IsComplete(objID, false, true, settings); Vector3 where; bool inWorld = Exporting.IsExisting(objID, out where); if (string.IsNullOrEmpty(completeStr)) { readyObjects++; if (inWorld) { Exporting.AttemptMoveTo(where); Thread.Sleep(3000); Exporting.KillInWorld(objID); Importing.APrimToCreate(holderID); readyObjectsForDelete++; } else { Importing.APrimToCreate(holderID); Importing.APrimToCreate(objID); } } else { unreadyObjs++; if (!inWorld) { unreadyObjsMustReRez++; Failure("REREZ: " + completeStr + " " + rtiData); Importing.APrimToCreate(holderID).MustUseAgentCopy = true; File.Delete(ExportCommand.dumpDir + holderID + ".rti_status"); File.Delete(file); } else { MustExport.Add(objID); MustExport.Add(holderID); Importing.APrimToCreate(holderID); Failure("RTIDATA: " + completeStr + " " + rtiData); Exporting.AddMoveTo(where); } } } Success("readyObjects = " + readyObjects); Success("readyObjectsForDelete = " + readyObjectsForDelete); Success("unreadyObjs = " + unreadyObjs); Success("unreadyObjsMustReRez = " + unreadyObjsMustReRez); Success("requestedShort = " + requestedShort); }