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 );
}
}