public static bool ReadRectangle3D(XmlElement xml, int defaultMinZ, int defaultMaxZ, ref MapRect value, bool mandatory) { int x1 = 0, y1 = 0, x2 = 0, y2 = 0; if (xml.HasAttribute("x")) { if (ReadInt32(xml, "x", ref x1, mandatory) & ReadInt32(xml, "y", ref y1, mandatory) & ReadInt32(xml, "width", ref x2, mandatory) & ReadInt32(xml, "height", ref y2, mandatory)) { x2 += x1; y2 += y1; } else { return(false); } } else { if (!ReadInt32(xml, "x1", ref x1, mandatory) | !ReadInt32(xml, "y1", ref y1, mandatory) | !ReadInt32(xml, "x2", ref x2, mandatory) | !ReadInt32(xml, "y2", ref y2, mandatory)) { return(false); } } int minZ = defaultMinZ; int maxZ = defaultMaxZ; ReadInt32(xml, "zmin", ref minZ, false); ReadInt32(xml, "zmax", ref maxZ, false); value = new MapRect(new Point2D(x1, y1), new Point2D(x2, y2), minZ, maxZ); return(true); }
public XmlElement GetXml(XmlDocument dom) { XmlElement x = dom.CreateElement("region"); if (m_Type != string.Empty) { x.SetAttribute("type", m_Type); } if (m_Priority != 50) { x.SetAttribute("priority", m_Priority.ToString()); } if (m_Name != string.Empty) { x.SetAttribute("name", m_Name); } if (m_MinZ != DefaultMinZ || m_MaxZ != DefaultMaxZ) { XmlElement xRange = dom.CreateElement("zrange"); if (m_MinZ != DefaultMinZ) { xRange.SetAttribute("min", m_MinZ.ToString()); } if (m_MaxZ != DefaultMaxZ) { xRange.SetAttribute("max", m_MaxZ.ToString()); } x.AppendChild(xRange); } foreach (MapRect rect in m_Area) { XmlElement xRect = dom.CreateElement("rect"); xRect.SetAttribute("x", rect.Start.X.ToString()); xRect.SetAttribute("y", rect.Start.Y.ToString()); xRect.SetAttribute("width", rect.Width.ToString()); xRect.SetAttribute("height", rect.Height.ToString()); if (rect.MinZ != m_MinZ) { xRect.SetAttribute("zmin", rect.MinZ.ToString()); } if (rect.MaxZ != m_MaxZ) { xRect.SetAttribute("zmax", rect.MaxZ.ToString()); } x.AppendChild(xRect); } if (m_Area != null && m_Area.Count > 0) { MapRect rect = m_Area[0] as MapRect; Point3D DefaultGoLocation = new Point3D(rect.Start.X + (rect.End.X - rect.Start.X) / 2, rect.Start.Y + (rect.End.Y - rect.Start.Y) / 2, 0); if (m_GoLocation != DefaultGoLocation && m_GoLocation.X != -1 && m_GoLocation.Y != -1) { XmlElement xGoLocation = dom.CreateElement("go"); xGoLocation.SetAttribute("x", m_GoLocation.X.ToString()); xGoLocation.SetAttribute("y", m_GoLocation.Y.ToString()); xGoLocation.SetAttribute("z", m_GoLocation.Z.ToString()); x.AppendChild(xGoLocation); } } if (m_Entrance.X != int.MinValue && m_Entrance.Y != int.MinValue) { XmlElement xEntrance = dom.CreateElement("entrance"); xEntrance.SetAttribute("x", m_Entrance.X.ToString()); xEntrance.SetAttribute("y", m_Entrance.Y.ToString()); if (m_Entrance.Z != int.MinValue) { xEntrance.SetAttribute("z", m_Entrance.Z.ToString()); } x.AppendChild(xEntrance); } if (m_Music != string.Empty) { XmlElement xMusic = dom.CreateElement("music"); xMusic.SetAttribute("name", m_Music); x.AppendChild(xMusic); } // Begin other data // <rune name="Haven City" /> if (m_Rune != null && m_Rune != string.Empty) { XmlElement xRune = dom.CreateElement("rune"); xRune.SetAttribute("name", m_Rune); x.AppendChild(xRune); } // <smartNoHousing active="true" /> if (m_SmartNoHousing != XmlBool.Unspecified) { XmlElement xHouse = dom.CreateElement("smartNoHousing"); xHouse.SetAttribute("active", m_SmartNoHousing.ToString().ToLower()); x.AppendChild(xHouse); } // <logoutDelay active="false" /> if (m_LogoutDelayActive != XmlBool.Unspecified) { XmlElement xLogout = dom.CreateElement("logoutDelay"); xLogout.SetAttribute("active", m_LogoutDelayActive.ToString().ToLower()); x.AppendChild(xLogout); } // <guards disabled="true" /> if (m_GuardsDisabled != XmlBool.Unspecified) { XmlElement xGuards = dom.CreateElement("guards"); xGuards.SetAttribute("disabled", m_GuardsDisabled.ToString().ToLower()); x.AppendChild(xGuards); } // spawning, for now just keep a record of the info so we can persist it. if (m_Spawning != null) { foreach (XmlElement spawning in m_Spawning) { XmlNode xSpawn = dom.ImportNode(spawning, true); x.AppendChild(xSpawn); } } // Subregions foreach (MapRegion sub in m_SubRegions) { XmlElement xSub = sub.GetXml(dom); x.AppendChild(xSub); } return(x); }
public static bool ReadRectangle3D(XmlElement xml, int defaultMinZ, int defaultMaxZ, ref MapRect value) { return(ReadRectangle3D(xml, defaultMinZ, defaultMaxZ, ref value, true)); }
public static MapRegion LoadRegion(XmlElement xml) { MapRegion r = new MapRegion(); XmlSupport.ReadString(xml, "name", ref r.m_Name); XmlSupport.ReadInt32(xml, "priority", ref r.m_Priority); XmlSupport.ReadString(xml, "type", ref r.m_Type); XmlElement zrange = xml["zrange"]; XmlSupport.ReadInt32(zrange, "min", ref r.m_MinZ, false); XmlSupport.ReadInt32(zrange, "max", ref r.m_MaxZ, false); foreach (XmlElement xmlRect in xml.SelectNodes("rect")) { MapRect rect = new MapRect(); if (XmlSupport.ReadRectangle3D(xmlRect, r.m_MinZ, r.m_MaxZ, ref rect)) { r.m_Area.Add(rect); } } if (!XmlSupport.ReadPoint3D(xml["go"], ref r.m_GoLocation, false) && r.m_Area.Count > 0) { Point2D start = ((MapRect)r.m_Area[0]).Start; Point2D end = ((MapRect)r.m_Area[0]).End; int x = start.X + (end.X - start.X) / 2; int y = start.Y + (end.Y - start.Y) / 2; r.m_GoLocation = new Point3D(x, y, 0); } int entranceX = int.MinValue; int entranceY = int.MinValue; int entranceZ = int.MinValue; XmlElement entrance = xml["entrance"]; if (entrance != null) { XmlSupport.ReadInt32(entrance, "x", ref entranceX); XmlSupport.ReadInt32(entrance, "y", ref entranceY); XmlSupport.ReadInt32(entrance, "z", ref entranceZ); } r.m_Entrance.X = entranceX; r.m_Entrance.Y = entranceY; r.m_Entrance.Z = entranceZ; XmlSupport.ReadString(xml["music"], "name", ref r.m_Music); // <rune name="Haven City" /> XmlSupport.ReadString(xml["rune"], "name", ref r.m_Rune); // <smartNoHousing active="true" /> XmlSupport.ReadXmlBool(xml["smartNoHousing"], "active", ref r.m_SmartNoHousing); // <logoutDelay active="false" /> XmlSupport.ReadXmlBool(xml["logoutDelay"], "active", ref r.m_LogoutDelayActive); // <guards disabled="true" /> XmlSupport.ReadXmlBool(xml["guards"], "disabled", ref r.m_GuardsDisabled); // spawning, for now just keep a record of the info so we can persist it. r.m_Spawning = xml.SelectNodes("spawning"); // Subregions foreach (XmlElement xRegion in xml.SelectNodes("region")) { MapRegion sub = MapRegion.LoadRegion(xRegion); if (sub != null) { r.m_SubRegions.Add(sub); } } return(r); }