SaveSettings() public static method

public static SaveSettings ( World world ) : System.Xml.Linq.XElement
world World
return System.Xml.Linq.XElement
Example #1
0
        /// <summary> Saves the current world list to worlds.xml. Thread-safe. </summary>
        public static void SaveWorldList()
        {
            const string worldListTempFileName = Paths.WorldListFileName + ".tmp";

            // Save world list
            lock ( SyncRoot ) {
                XDocument doc  = new XDocument();
                XElement  root = new XElement("fCraftWorldList");

                foreach (World world in Worlds)
                {
                    XElement temp = new XElement("World");
                    temp.Add(new XAttribute("name", world.Name));

                    if (world.AccessSecurity.HasRestrictions)
                    {
                        temp.Add(world.AccessSecurity.Serialize(AccessSecurityXmlTagName));
                    }
                    if (world.BuildSecurity.HasRestrictions)
                    {
                        temp.Add(world.BuildSecurity.Serialize(BuildSecurityXmlTagName));
                    }

                    if (world.BackupInterval != WorldManager.DefaultBackupInterval)
                    {
                        temp.Add(new XAttribute("backup", world.BackupInterval.ToTickString()));
                    }

                    if (world.NeverUnload)
                    {
                        temp.Add(new XAttribute("noUnload", true));
                    }
                    if (world.VisitCount > 0)
                    {
                        temp.Add(new XAttribute("visitCount", world.VisitCount));
                    }
                    if (world.IsHidden)
                    {
                        temp.Add(new XAttribute("hidden", true));
                    }
                    temp.Add(world.BlockDB.SaveSettings());

                    temp.Add(Physics.SaveSettings(world));
                    temp.Add(Physics.SaveOtherSettings(world));

                    temp.Add(world.SaveRealmState());
                    if (world.Greeting != null)
                    {
                        temp.Add(new XElement("Greeting", world.Greeting));
                    }
                    World world1 = world;
                    foreach (Rank mainedRank in RankManager.Ranks.Where(r => r.MainWorld == world1))
                    {
                        temp.Add(new XElement(RankMainXmlTagName, mainedRank.FullName));
                    }

                    if (!String.IsNullOrEmpty(world.LoadedBy))
                    {
                        temp.Add(new XElement("LoadedBy", world.LoadedBy));
                    }
                    if (world.LoadedOn != DateTime.MinValue)
                    {
                        temp.Add(new XElement("LoadedOn", world.LoadedOn.ToUnixTime()));
                    }
                    if (!String.IsNullOrEmpty(world.MapChangedBy))
                    {
                        temp.Add(new XElement("MapChangedBy", world.MapChangedBy));
                    }
                    if (world.MapChangedOn != DateTime.MinValue)
                    {
                        temp.Add(new XElement("MapChangedOn", world.MapChangedOn.ToUnixTime()));
                    }

                    XElement elEnv = new XElement(EnvironmentXmlTagName);
                    if (world.CloudColor > -1)
                    {
                        elEnv.Add(new XAttribute("cloud", world.CloudColor));
                    }
                    if (world.FogColor > -1)
                    {
                        elEnv.Add(new XAttribute("fog", world.FogColor));
                    }
                    if (world.SkyColor > -1)
                    {
                        elEnv.Add(new XAttribute("sky", world.SkyColor));
                    }
                    if (world.EdgeLevel > -1)
                    {
                        elEnv.Add(new XAttribute("level", world.EdgeLevel));
                    }
                    if (world.Terrain != null)
                    {
                        elEnv.Add(new XAttribute("terrain", world.Terrain));
                    }
                    if (world.EdgeBlock != Block.Water)
                    {
                        elEnv.Add(new XAttribute("edge", world.EdgeBlock));
                    }
                    if (elEnv.HasAttributes)
                    {
                        temp.Add(elEnv);
                    }
                    root.Add(temp);
                }
                root.Add(new XAttribute("main", MainWorld.Name));

                doc.Add(root);
                doc.Save(worldListTempFileName);
                Paths.MoveOrReplace(worldListTempFileName, Paths.WorldListFileName);
            }
        }