public bool Run() { var manifests = new List <string>(); foreach (string manifest in GetType().Assembly.GetManifestResourceNames()) { if (manifest.StartsWith("SilverSim.Tests.Resources.Objects.") && manifest.EndsWith(".xml")) { manifests.Add(manifest); } } foreach (string manifest in manifests) { m_Log.InfoFormat("Testing decoder with asset {0}", manifest); Stream resource = GetType().Assembly.GetManifestResourceStream(manifest); try { ObjectXML.FromXml(resource, UGUI.Unknown, XmlDeserializationOptions.ReadKeyframeMotion); } catch (Exception e) { m_Log.InfoFormat("Failed to parse asset {0}: {1}\n{2}", e.GetType().FullName, e.StackTrace, e.StackTrace.ToString()); return(false); } var reflist = new List <UUID>(); resource = GetType().Assembly.GetManifestResourceStream(manifest); ObjectReferenceDecoder.GetReferences(resource, "", reflist); m_Log.InfoFormat("Found {0} references", reflist.Count); } return(true); }
public override void AssetTransferComplete() { AssetData data; List <ObjectGroup> objgroups; try { data = m_Scene.AssetService[AssetID]; } catch (Exception e) { m_Log.Error(string.Format("Failed to rez object from asset {0}", AssetID), e); SendAlertMessage("ALERT: CantFindObject"); return; } try { objgroups = ObjectXML.FromAsset(data, m_RezzingAgent); } catch (Exception e) { m_Log.Error(string.Format("Unable to decode asset {0} to rez", data.ID), e); SendAlertMessage("ALERT: RezAttemptFailed"); return; } if (objgroups.Count == 1 && m_SourceItem != null) { objgroups[0].Name = m_SourceItem.Name; } try { foreach (ObjectGroup grp in objgroups) { if (m_Scene.CanRez(m_RezzingAgent.ID, m_RezzingAgent, grp.GlobalPosition)) { if (m_Scene.GroupsService?.Members.ContainsKey(m_RezzingAgent, m_RezzingGroup, m_RezzingAgent) ?? false) { grp.Group = m_RezzingGroup; } m_Scene.RezObject(grp, m_RezzingAgent, m_SourceItem); } } } catch (Exception e) { m_Log.Error(string.Format("Failed to rez object in scene {0} ({1})", m_Scene.Name, m_Scene.ID), e); SendAlertMessage("ALERT: RezAttemptFailed"); return; } }
public static void AddRow(ObjectXML objectXML) { if (objectXML.rowNum < MainWindow.MaxRow) { for (int i = 0; i < objectXML.colNum; i++) { Coords t = new Coords(objectXML.rowNum, i); objectXML.cells.Add(t.GetHashCode(), new TabCell()); } objectXML.rowNum++; MainWindow.objectXML = objectXML; } }
public override void AssetTransferComplete() { AssetData data; var objgroups = new List <ObjectGroup>(); foreach (UUID assetid in m_ItemAssetIDs) { try { data = m_Scene.AssetService[assetid]; } catch (Exception e) { m_Log.Error(string.Format("Failed to rez object from asset {0}", assetid), e); SendAlertMessage("ALERT: CantFindObject"); return; } try { objgroups.AddRange(ObjectXML.FromAsset(data, m_RezzingAgent)); } catch (Exception e) { m_Log.Error(string.Format("Unable to decode asset {0} to rez", data.ID), e); SendAlertMessage("ALERT: RezAttemptFailed"); return; } } if (objgroups.Count == 1 && m_RezParams.SourceItem != null) { objgroups[0].Name = m_RezParams.SourceItem.Name; } try { m_Scene.RezObjects(objgroups, m_RezParams); } catch (Exception e) { m_Log.Error(string.Format("Failed to rez object in scene {0} ({1})", m_Scene.Name, m_Scene.ID), e); SendAlertMessage("ALERT: RezAttemptFailed"); } }
public static void AddCol(ObjectXML objectXML) { if (objectXML.colNum < MainWindow.MaxCol) { Coords temp = new Coords(0, objectXML.colNum); objectXML.header.Add(temp.GetHashCode(), new HeaderCell()); for (int i = 1; i < objectXML.rowNum; i++) { objectXML.cells.Add(new Coords(i, objectXML.colNum).GetHashCode(), new TabCell()); } objectXML.colNum++; MainWindow.objectXML = objectXML; } }
public bool Run() { bool success = true; int count = 0; int successcnt = 0; foreach (KeyValuePair <UUID, string> file in Assets) { ++count; var tr = new TestRunner.TestResult { Name = "Asset " + file.Key + "(" + file.Value + ")", Result = false, Message = string.Empty }; int startTime = Environment.TickCount; m_Log.InfoFormat("Testing deserialization of {1} ({0})", file.Key, file.Value); try { using (Stream s = new HttpClient.Get(file.Value).ExecuteStreamRequest()) { ObjectXML.FromXml(s, UGUI.Unknown, XmlDeserializationOptions.ReadKeyframeMotion); } m_Log.InfoFormat("Deserialization of {1} ({0}) successful", file.Key, file.Value); ++successcnt; tr.Result = true; } catch (Exception e) { m_Log.ErrorFormat("Compilation of {1} ({0}) failed: {2}", file.Key, file.Value, e.Message); m_Log.WarnFormat("Stack Trace:\n{0}", e.StackTrace); tr.Message = e.Message + "\n" + e.StackTrace; success = false; } tr.RunTime = Environment.TickCount - startTime; m_Runner.TestResults.Add(tr); } m_Log.InfoFormat("{0} of {1} compilations successful", successcnt, count); return(success); }
public static bool CompareXml(ObjectXML a, ObjectXML b) { if (!Equals(a,b)) { MessageBoxResult result = MessageBox.Show("Save Changes?", "Save Changes?", MessageBoxButton.YesNoCancel, MessageBoxImage.Question); switch (result) { case MessageBoxResult.Yes: { try { WriteXml(a, MainWindow.PathXML); } catch { try { SaveAs(a); } catch { //????? } } return true; } case MessageBoxResult.No: return true; case MessageBoxResult.Cancel: return false; } } return true; }
public static void AddCol(ObjectXML objectXML, Coords LastActive) { if (objectXML.colNum < MainWindow.MaxCol) { Coords temp = new Coords(0, objectXML.colNum); objectXML.header.Add(temp.GetHashCode(), new HeaderCell()); for (int i = 1; i < objectXML.rowNum; i++) { temp = new Coords(i, objectXML.colNum); objectXML.cells.Add(temp.GetHashCode(), new TabCell()); } objectXML.colNum++; for (int col = objectXML.colNum - 1; col > LastActive.colCoord; col--) { objectXML.header[new Coords(0, col).GetHashCode()] = objectXML.header[new Coords(0, col - 1).GetHashCode()]; } objectXML.header[new Coords(0, LastActive.colCoord + 1).GetHashCode()] = new HeaderCell(); for (int row = 1; row < objectXML.rowNum; row++) { for (int col = objectXML.colNum - 1; col > LastActive.colCoord; col--) { objectXML.cells[new Coords(row, col).GetHashCode()] = objectXML.cells[new Coords(row, col - 1).GetHashCode()]; } } for (int row = 0; row < objectXML.rowNum; row++)//если поменять на -- то будет драть МНОГО памяти { objectXML.cells[new Coords(row, LastActive.colCoord + 1).GetHashCode()] = new TabCell(); } MainWindow.objectXML = objectXML; } }
public static bool WriteXml(ObjectXML objectXml, string filename) { if (filename == null || filename == "") return true; XDocument doc = new XDocument(); XElement Root = new XElement("DataSetTable"); doc.Add(Root); XElement Header = new XElement("TabColumns"); for (int col = 0; col < objectXml.header.Count; col++) { Coords coords = new Coords(0, col); Header.Add(new XElement("TabColumn", new XAttribute("Name", objectXml.header[coords.GetHashCode()].headerCellName), new XAttribute("Fontsize", objectXml.header[coords.GetHashCode()].headerCellFontSize), new XAttribute("Height", objectXml.header[coords.GetHashCode()].headerCellHeight), new XAttribute("Width", objectXml.header[coords.GetHashCode()].headerCellWidth), new XAttribute("Align", objectXml.header[coords.GetHashCode()].headerCellAlign), new XAttribute("Header", objectXml.header[coords.GetHashCode()].headerCellHeader))); } doc.Root.Add(Header); for (int row = 1; row < objectXml.rowNum; row++) { XElement tableRow; if (objectXml.cells[new Coords(row, 0).GetHashCode()].Name != " " && objectXml.cells[new Coords(row, 0).GetHashCode()].Name!=null) { tableRow = new XElement("TabRow", new XAttribute("Name", objectXml.cells[new Coords(row, 0).GetHashCode()].Name), new XAttribute("Number", objectXml.cells[new Coords(row, 0).GetHashCode()].Number)); } else { tableRow = new XElement("TabRow"); } for (int col = 0; col < objectXml.colNum; col++) { Coords coords = new Coords(row, col); tableRow.Add(new XElement("TabCell", new XAttribute("Align", objectXml.cells[coords.GetHashCode()].tabCellAlign), new XAttribute("Precision", objectXml.cells[coords.GetHashCode()].tabCellPrecision), new XAttribute("Parametr", objectXml.cells[coords.GetHashCode()].tabCellParametr))); } doc.Root.Add(tableRow); } filename = MainWindow.PathXML; if (filename == null || filename == "") return false; doc.Save(filename); return true; }
public static void SaveAs(ObjectXML objectXML) { SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.Filter = "XML files (*.xml)|*.xml|All files (*.*)|*.*"; saveFileDialog1.FilterIndex = 1; saveFileDialog1.RestoreDirectory = true; saveFileDialog1.AddExtension = true; saveFileDialog1.ShowDialog(); if (saveFileDialog1.FileName != null && saveFileDialog1.FileName != "") MainWindow.PathXML = saveFileDialog1.FileName; if (!WriteXml(objectXML, saveFileDialog1.FileName)) return; }
public static void DelRow(ObjectXML objectXML, Coords LastActive) { if (LastActive.rowCoord != 0 && objectXML.rowNum > 2) { if (LastActive.rowCoord < (objectXML.rowNum - 1)) { for (int row = LastActive.rowCoord; row < objectXML.rowNum - 2; row++) { for (int col = 0; col < objectXML.colNum; col++) { Coords temp = new Coords(row, col); objectXML.cells[temp.GetHashCode()] = objectXML.cells[new Coords(row + 1, col).GetHashCode()]; } } } for (int i = 0; i < objectXML.colNum; i++) { objectXML.cells.Remove(new Coords(objectXML.rowNum - 1, i).GetHashCode()); } objectXML.rowNum--; if (MainWindow.LastActiveCoords.rowCoord > objectXML.rowNum - 1) MainWindow.LastActiveCoords.rowCoord = objectXML.rowNum - 1; MainWindow.objectXML = objectXML; } else return; }
public static void DelCol(ObjectXML objectXML, Coords LastActive) { if (objectXML.colNum > 1) { for (int col = LastActive.colCoord; col < objectXML.colNum - 2; col++) { objectXML.header[new Coords(0, col).GetHashCode()] = objectXML.header[new Coords(0, col + 1).GetHashCode()]; } Coords temp = new Coords(0, objectXML.colNum - 1); objectXML.header.Remove(temp.GetHashCode()); for (int row = 1; row < objectXML.rowNum; row++) { for (int col = LastActive.colCoord; col < objectXML.colNum - 2; col++) { objectXML.cells[new Coords(row, col).GetHashCode()] = objectXML.cells[new Coords(row, col + 1).GetHashCode()]; } objectXML.cells.Remove(new Coords(row, objectXML.colNum - 1).GetHashCode()); } objectXML.colNum--; if (MainWindow.LastActiveCoords.colCoord > objectXML.colNum - 1) MainWindow.LastActiveCoords.colCoord = objectXML.colNum - 1; MainWindow.objectXML = objectXML; } }
public int CheckAssetFormat(ScriptInstance instance, LSLKey assetid) { lock (instance) { AssetServiceInterface assetService = instance.Part.ObjectGroup.AssetService; AssetData asset; if (!assetService.TryGetValue(assetid.AsUUID, out asset)) { return(0); } switch (asset.Type) { case AssetType.Bodypart: case AssetType.Clothing: try { new Wearable(asset); return(1); } catch { return(0); } case AssetType.Gesture: try { new Gesture(asset); return(1); } catch { return(0); } case AssetType.Landmark: try { new Landmark(asset); return(1); } catch { return(0); } case AssetType.Mesh: try { new LLMesh(asset); return(1); } catch { return(0); } case AssetType.Notecard: try { new Notecard(asset); return(1); } catch { return(0); } case AssetType.Object: try { ObjectXML.FromXml(asset.InputStream, instance.Part.Owner); return(1); } catch { return(0); } case AssetType.Texture: try { using (J2kImage.FromStream(asset.InputStream)) { } return(1); } catch { return(0); } default: m_Log.WarnFormat("Testing asset type {0} not supported", asset.Type.ToString()); return(0); } } }
internal static void DisplayXML(ListBox ListBox1, ObjectXML table) { ListBox1.Items.Clear(); StackPanel panel1 = new StackPanel(); panel1.Orientation = Orientation.Horizontal; for (int col = 0; col < table.colNum; col++) { Button button = new Button(); Coords coords= new Coords(0, col); button.Name = "field" + '_' + (col + 1).ToString() + '_' + 0.ToString(); button.Content = table.header[coords.GetHashCode()].headerCellHeader; button.Height = 30; button.Width = 150; button.Click += EditHeaderClick; getRes(button); button.Background=Brushes.LightGray; button.BorderBrush = Brushes.Black; panel1.Children.Add(button); } ListBox1.Items.Add(panel1); for (int row=1; row < table.rowNum; row++) { StackPanel panel = new StackPanel(); panel.Orientation = Orientation.Horizontal; for (int col = 0; col < table.colNum; col++) { Button button = new Button(); Coords coords = new Coords(row, col); button.Name = "field"+'_'+(col+1).ToString() + '_'+row.ToString(); button.Content = table.cells[coords.GetHashCode()].tabCellParametr; button.Height = 30; button.Width = 150; button.Click += EditCellClick; getRes(button); button.Background = Brushes.LightGray; button.BorderBrush = Brushes.Black; panel.Children.Add(button); } ListBox1.Items.Add(panel); } }
internal static ObjectXML ReadXml(string FileName) { ObjectXML table = new ObjectXML(); table.header = ReadXMLHeader(FileName); table.cells = ReadXMLCells(FileName); table.colNum = table.header.Count; table.rowNum = (table.cells.Count / table.header.Count) + 1; return table; }
public static void DelRow(ObjectXML objectXML) { if (objectXML.rowNum > 2) { for (int i = 0; i < objectXML.colNum; i++) { objectXML.cells.Remove(new Coords(objectXML.rowNum - 1, i).GetHashCode()); } objectXML.rowNum--; MainWindow.objectXML = objectXML; } }
public static void DelCol(ObjectXML objectXML) { if (objectXML.colNum>1){ Coords temp = new Coords(0, objectXML.colNum - 1); objectXML.header.Remove(temp.GetHashCode()); for (int i = 1; i < objectXML.rowNum; i++) { objectXML.cells.Remove(new Coords(i, objectXML.colNum - 1).GetHashCode()); } objectXML.colNum--; MainWindow.objectXML = objectXML; } }
public static void EditHeaderClick(object sender, RoutedEventArgs e) { Coords t = new Coords(); t = GetCoords((sender as Button).Name.ToString()); EditHeaderCell w = new EditHeaderCell(); ObjectXML xml = new ObjectXML(); xml = MainWindow.GetObjectXML(); HeaderCell cell = xml.header[t.GetHashCode()]; OpenEditHeaderCellWindow(w, cell,t); }
private void AttachFromInventory(AssetData data, UUID itemID) { List <ObjectGroup> objgroups; #if DEBUG m_Log.DebugFormat("Deserializing object asset {0} for agent {1} {2} ({3})", data.ID, NamedOwner.FirstName, NamedOwner.LastName, NamedOwner.ID); #endif try { objgroups = ObjectXML.FromAsset(data, Owner); } catch (Exception e) { m_Log.WarnFormat("Deserialization error for object asset {0} for agent {1} {2} ({3}): {4}: {5}", data.ID, NamedOwner.FirstName, NamedOwner.LastName, NamedOwner.ID, e.GetType().FullName, e.ToString()); return; } if (objgroups.Count != 1) { return; } ObjectGroup grp = objgroups[0]; foreach (ObjectPart part in grp.Values) { if (part.Shape.PCode == PrimitiveCode.Grass || part.Shape.PCode == PrimitiveCode.Tree || part.Shape.PCode == PrimitiveCode.NewTree) { return; } } AttachmentPoint attachAt = grp.AttachPoint; if (attachAt == AttachmentPoint.NotAttached) { grp.AttachPoint = AttachmentPoint.LeftHand; grp.AttachedPos = Vector3.Zero; grp.AttachedRot = Quaternion.Identity; } grp.FromItemID = itemID; grp.IsAttached = true; grp.Position = grp.AttachedPos; grp.Rotation = grp.AttachedRot; grp.IsChangedEnabled = true; #if DEBUG m_Log.DebugFormat("Adding attachment asset {0} at {4} for agent {1} {2} ({3})", data.ID, NamedOwner.FirstName, NamedOwner.LastName, NamedOwner.ID, grp.AttachPoint.ToString()); #endif SceneInterface scene = CurrentScene; try { scene.Add(grp); Attachments.Add(grp.AttachPoint, grp); } catch { return; } }
public override void AssetTransferComplete() { AssetData data; List <ObjectGroup> objgroups; try { data = m_Scene.AssetService[AssetID]; } catch (Exception e) { m_Log.Error(string.Format("Failed to rez attachment from asset {0}", AssetID), e); SendAlertMessage("ALERT: CantFindObject"); return; } #if DEBUG m_Log.DebugFormat("Deserializing object asset {0} for agent {1}", data.ID, m_RezzingAgent.ToString()); #endif try { objgroups = ObjectXML.FromAsset(data, m_RezzingAgent); } catch (Exception e) { m_Log.WarnFormat("Deserialization error for object asset {0} for agent {1}: {2}: {3}", data.ID, m_RezzingAgent.ToString(), e.GetType().FullName, e.ToString()); SendAlertMessage("ALERT: InvalidObjectParams"); return; } if (objgroups.Count != 1) { SendAlertMessage("ALERT: InvalidObjectParams"); return; } ObjectGroup grp = objgroups[0]; bool attachPointChanged = false; foreach (var part in grp.Values) { if (part.Shape.PCode == PrimitiveCode.Grass || part.Shape.PCode == PrimitiveCode.Tree || part.Shape.PCode == PrimitiveCode.NewTree) { SendAlertMessage("ALERT: WhyAreYouTryingToWearShrubbery"); return; } } var attachAt = m_AttachPoint & AttachmentPoint.PositionMask; if (attachAt != AttachmentPoint.Default && attachAt != grp.AttachPoint) { grp.AttachedPos = Vector3.Zero; grp.AttachedRot = Quaternion.Identity; attachPointChanged = true; } if (attachAt == AttachmentPoint.Default) { attachAt = grp.AttachPoint; if (attachAt == AttachmentPoint.NotAttached) { grp.AttachPoint = AttachmentPoint.LeftHand; grp.AttachedPos = Vector3.Zero; grp.AttachedRot = Quaternion.Identity; } } grp.Owner = m_RezzingAgent; grp.FromItemID = m_SourceItem.ID; grp.IsAttached = true; grp.Position = grp.AttachedPos; grp.Rotation = grp.AttachedRot; grp.IsChangedEnabled = true; if (attachPointChanged) { grp.AttachPoint = attachAt; } #if DEBUG m_Log.DebugFormat("Adding attachment asset {0} at {4} for agent {1}", data.ID, m_RezzingAgent.ToString()); #endif try { m_Scene.RezObject(grp, m_RezzingAgent, m_SourceItem); m_AttachmentsList.Add(grp.AttachPoint, grp); } catch { SendAlertMessage("ALERT: RezAttemptFailed"); return; } grp.PostEvent(new AttachEvent { ObjectID = grp.Owner.ID }); }
public static void SaveCell(EditTableCell w,ObjectXML objectXML) { TabCell t = new TabCell( w.AlignField.Text, w.PrecisionField.Text, w.ParametrField.Text); objectXML.cells[new Coords(int.Parse(w.row.Text), int.Parse(w.col.Text)).GetHashCode()] = t; MainWindow.objectXML = objectXML; save(); }
internal static void DisplayXML(ListBox ListBox1, ObjectXML table) { ListBox1.Items.Clear(); StackPanel panel1 = new StackPanel(); panel1.Orientation = Orientation.Horizontal; ListBox1.VerticalAlignment = VerticalAlignment.Center; ListBox1.HorizontalAlignment = HorizontalAlignment.Center; for (int col = 0; col < table.colNum; col++) { Button button = new Button(); Coords coords = new Coords(0, col); button.Name = "field" + '_' + (col + 1).ToString() + '_' + 0.ToString(); button.DataContext = MainWindow.objectXML.header[coords.GetHashCode()]; button.SetBinding(Button.ContentProperty, new Binding("headerCellHeader")); button.SetBinding(Button.HeightProperty, new Binding("headerCellHeight")); button.SetBinding(Button.WidthProperty, new Binding("headerCellWidth")); button.SetBinding(Button.FontSizeProperty, new Binding("headerCellFontSize")); button.Click += EditHeaderClick; button.Foreground = Brushes.Black; AlignChange(ref button, coords); getRes(button); button.Padding = new Thickness(5, 0, 5, 0); button.Background = Brushes.LightGray; button.BorderBrush = Brushes.Black; if (coords.Equals(MainWindow.LastActiveCoords)) button.Background = Brushes.LightSkyBlue; panel1.Children.Add(button); } ListBox1.Items.Add(panel1); for (int row = 1; row < table.rowNum; row++) { StackPanel panel = new StackPanel(); panel.Orientation = Orientation.Horizontal; for (int col = 0; col < table.colNum; col++) { Button button = new Button(); Coords coords = new Coords(row, col); Binding bindParam = new Binding(); bindParam.Source = MainWindow.objectXML.cells[coords.GetHashCode()]; bindParam.Path = new PropertyPath("tabCellParametr"); button.Name = "field" + '_' + (col + 1).ToString() + '_' + row.ToString(); button.SetBinding(Button.ContentProperty,bindParam); button.DataContext = MainWindow.objectXML.header[new Coords(0, col).GetHashCode()]; button.SetBinding(Button.HeightProperty, new Binding("headerCellHeight")); button.SetBinding(Button.WidthProperty, new Binding("headerCellWidth")); button.SetBinding(Button.FontSizeProperty, new Binding("headerCellFontSize")); button.Foreground = Brushes.Black; button.Padding = new Thickness(5, 0, 5, 0); button.Click += EditCellClick; getRes(button); AlignChange(ref button, coords); button.Background = Brushes.LightGray; button.BorderBrush = Brushes.Black; if (coords.Equals(MainWindow.LastActiveCoords)) button.Background = Brushes.LightSkyBlue; panel.Children.Add(button); } ListBox1.Items.Add(panel); } }
public static void Load( SceneList scenes, SceneInterface scene, LoadOptions options, Stream inputFile, TTY io = null) { var currentLoadState = CurrentOarLoadState.Unknown; using (var gzipStream = new GZipStream(inputFile, CompressionMode.Decompress)) { using (var reader = new TarArchiveReader(gzipStream)) { var baseLoc = new GridVector(0, 0); if (scene != null) { baseLoc = scene.GridPosition; } var regionSize = new GridVector(256, 256); var regionMapping = new Dictionary <string, ArchiveXmlLoader.RegionInfo>(); var regionInfos = new List <ArchiveXmlLoader.RegionInfo>(); bool parcelsCleared = false; var load_sogs = new List <ObjectGroup>(); for (; ;) { TarArchiveReader.Header header; try { header = reader.ReadHeader(); } catch (TarArchiveReader.EndOfTarException) { if ((options & LoadOptions.Merge) == 0 && scene != null) { scene.ClearObjects(); } AddObjects(scene, load_sogs, options); return; } if (header.FileType == TarFileType.File) { if (header.FileName == "archive.xml") { ArchiveXmlLoader.RegionInfo rinfo = ArchiveXmlLoader.LoadArchiveXml(new ObjectXmlStreamFilter(reader), regionInfos); regionSize = rinfo.RegionSize; foreach (ArchiveXmlLoader.RegionInfo reginfo in regionInfos) { regionMapping.Add(reginfo.Path, reginfo); } if (regionInfos.Count != 0 && scene != null) { throw new MultiRegionOARLoadingTriedOnRegionException(); } else if (regionInfos.Count == 0 && scene == null) { throw new OARLoadingTriedWithoutSelectedRegionException(); } } else if (header.FileName.StartsWith("assets/")) { if ((options & LoadOptions.NoAssets) == 0) { ShowOarLoadState(ref currentLoadState, CurrentOarLoadState.Assets, io); /* Load asset */ AssetData ad = reader.LoadAsset(header, scene.Owner); if (!scene.AssetService.Exists(ad.ID)) { scene.AssetService.Store(ad); } } } else { if (header.FileName.StartsWith("regions/")) { ShowOarLoadState(ref currentLoadState, CurrentOarLoadState.Region, io); if ((options & LoadOptions.Merge) == 0 && scene != null) { scene.ClearObjects(); } if (scene != null) { AddObjects(scene, load_sogs, options); } string[] pcomps = header.FileName.Split(new char[] { '/' }, 3); if (pcomps.Length < 3) { throw new OARFormatException(); } string regionname = pcomps[1]; header.FileName = pcomps[2]; regionSize = regionMapping[regionname].RegionSize; scene = scenes[regionMapping[regionname].ID]; parcelsCleared = false; } if (header.FileName.StartsWith("objects/")) { ShowOarLoadState(ref currentLoadState, CurrentOarLoadState.Objects, io); /* Load objects */ List <ObjectGroup> sogs; XmlDeserializationOptions xmloptions = XmlDeserializationOptions.ReadKeyframeMotion; if ((options & LoadOptions.PersistUuids) != 0) { xmloptions |= XmlDeserializationOptions.RestoreIDs; } try { sogs = ObjectXML.FromXml(reader, scene.Owner, xmloptions); } catch (Exception e) { throw new OARLoadingErrorException("Failed to load sog " + header.FileName, e); } foreach (ObjectGroup sog in sogs) { if (sog.Owner.ID == UUID.Zero) { sog.Owner = scene.Owner; } } load_sogs.AddRange(sogs); } else if (header.FileName.StartsWith("terrains/")) { ShowOarLoadState(ref currentLoadState, CurrentOarLoadState.Terrain, io); /* Load terrains */ if ((options & LoadOptions.Merge) == 0) { scene.Terrain.AllPatches = TerrainLoader.LoadStream(reader, (int)regionSize.X, (int)regionSize.Y); scene.StoreTerrainAsDefault(); } } else if (header.FileName.StartsWith("landdata/")) { ShowOarLoadState(ref currentLoadState, CurrentOarLoadState.Parcels, io); /* Load landdata */ if ((options & LoadOptions.Merge) == 0) { if (!parcelsCleared) { scene.ClearParcels(); parcelsCleared = true; } var whiteList = new List <ParcelAccessEntry>(); var blackList = new List <ParcelAccessEntry>(); ParcelInfo pinfo = ParcelLoader.GetParcelInfo(new ObjectXmlStreamFilter(reader), regionSize, whiteList, blackList); if (pinfo.Owner.ID == UUID.Zero) { pinfo.Owner = scene.Owner; } if ((options & LoadOptions.PersistUuids) == LoadOptions.PersistUuids) { ParcelInfo check; if (scene.Parcels.TryGetValue(pinfo.ID, out check)) { pinfo.ID = UUID.Random; } } else { pinfo.ID = UUID.Random; } scene.AddParcel(pinfo); scene.Parcels.WhiteList.Remove(scene.ID, pinfo.ID); scene.Parcels.BlackList.Remove(scene.ID, pinfo.ID); foreach (ParcelAccessEntry pae in whiteList) { scene.Parcels.WhiteList.Store(pae); } foreach (ParcelAccessEntry pae in blackList) { scene.Parcels.BlackList.Store(pae); } } } else if (header.FileName.StartsWith("settings/") && ((options & LoadOptions.Merge) == 0)) { ShowOarLoadState(ref currentLoadState, CurrentOarLoadState.Parcels, io); /* Load settings */ RegionSettingsLoader.LoadRegionSettings(new ObjectXmlStreamFilter(reader), scene); } } } } } } }
public static UUID GenerateNextOwnerAsset(this AssetServiceInterface assetService, UUID firstLevelAssetID) { var assetIDs = new List <UUID>(); var replaceAssets = new Dictionary <UUID, UUID>(); var objectAssetIDs = new List <UUID>(); assetIDs.Add(firstLevelAssetID); int pos = 0; while (pos < assetIDs.Count) { UUID assetid = assetIDs[pos++]; AssetMetadata objmeta; if (assetService.Metadata.TryGetValue(assetid, out objmeta)) { if (objmeta.Type == AssetType.Object) { if (!objectAssetIDs.Contains(assetid)) { objectAssetIDs.Add(assetid); } assetIDs.AddRange(ObjectReferenceDecoder.GetReferences(assetService[assetid])); if (!replaceAssets.ContainsKey(assetid)) { replaceAssets.Add(assetid, UUID.Random); } } else if (objmeta.Type == AssetType.Notecard) { if (!objectAssetIDs.Contains(assetid)) { objectAssetIDs.Add(assetid); } var nc = new Notecard(assetService[assetid]); foreach (NotecardInventoryItem item in nc.Inventory.Values) { if ((item.AssetType == AssetType.Object || item.AssetType == AssetType.Notecard) && !objectAssetIDs.Contains(item.AssetID)) { objectAssetIDs.Add(item.AssetID); } } assetIDs.InsertRange(0, nc.References); if (!replaceAssets.ContainsKey(assetid)) { replaceAssets.Add(assetid, UUID.Random); } } } } objectAssetIDs.Reverse(); foreach (UUID objectid in objectAssetIDs) { AssetData data; AssetData newAsset; if (assetService.TryGetValue(objectid, out data)) { switch (data.Type) { case AssetType.Object: List <ObjectGroup> grps = ObjectXML.FromAsset(data, UGUI.Unknown); foreach (ObjectGroup grp in grps) { foreach (ObjectPart part in grp.Values) { foreach (ObjectPartInventoryItem item in part.Inventory.Values) { if (item.NextOwnerAssetID == UUID.Zero) { UUID replaceAssetID; part.Inventory.SetNextOwnerAssetID( item.ID, replaceAssets.TryGetValue(item.AssetID, out replaceAssetID) ? replaceAssetID : item.AssetID); } } } } newAsset = (grps.Count == 1) ? grps[0].Asset(UGUI.Unknown, XmlSerializationOptions.AdjustForNextOwner | XmlSerializationOptions.WriteXml2) : grps.Asset(UGUI.Unknown, XmlSerializationOptions.AdjustForNextOwner | XmlSerializationOptions.WriteXml2); newAsset.ID = replaceAssets[objectid]; newAsset.CreateTime = data.CreateTime; assetService.Store(newAsset); break; case AssetType.Notecard: var nc = new Notecard(data); foreach (NotecardInventoryItem item in nc.Inventory.Values) { UUID replace; if (replaceAssets.TryGetValue(item.AssetID, out replace)) { item.AssetID = replace; } break; } break; default: break; } } } UUID finalAssetID; return(replaceAssets.TryGetValue(firstLevelAssetID, out finalAssetID) ? finalAssetID : firstLevelAssetID); }
public static void AddRow(ObjectXML objectXML, Coords LastActive) { if (objectXML.rowNum < MainWindow.MaxRow) { for (int i = 0; i < objectXML.colNum; i++) { Coords t = new Coords(objectXML.rowNum, i); objectXML.cells.Add(t.GetHashCode(), new TabCell()); } objectXML.rowNum++; for (int row = objectXML.rowNum - 1; row > LastActive.rowCoord; row--) { for (int col = 0; col < objectXML.colNum; col++) { if (row > 1) { objectXML.cells[new Coords(row, col).GetHashCode()] = objectXML.cells[new Coords(row - 1, col).GetHashCode()]; } } } for (int col = 0; col < objectXML.colNum; col++) { objectXML.cells[new Coords(LastActive.rowCoord + 1, col).GetHashCode()] = new TabCell(); } MainWindow.objectXML = objectXML; } }
public static void SaveHeader(EditHeaderCell w, ObjectXML objectXML) { HeaderCell t = new HeaderCell( Math.Abs(int.Parse(w.HeightField.Text)), Math.Abs(int.Parse(w.WidthField.Text)), Math.Abs(int.Parse(w.FontsizeField.Text)), w.NameField.Text, w.AlignField.Text, w.HeaderField.Text); objectXML.header[new Coords(int.Parse(w.row.Text), int.Parse(w.col.Text)).GetHashCode()] = t; MainWindow.objectXML = objectXML; save(); }