public bool Save( string configFileName ) {
XDocument file = new XDocument();
XElement config = new XElement( ConfigRootName );
config.Add( new XAttribute( "version", ConfigVersion ) );
foreach( KeyValuePair<string, string> pair in settings ) {
config.Add( new XElement( pair.Key, pair.Value ) );
}
XElement consoleOptions = new XElement( "ConsoleOptions" );
for( int i = 0; i < logger.consoleOptions.Length; i++ ) {
if( logger.consoleOptions[i] ) {
consoleOptions.Add( new XElement( ((LogType)i).ToString() ) );
}
}
config.Add( consoleOptions );
XElement logFileOptions = new XElement( "LogFileOptions" );
for( int i = 0; i < logger.logFileOptions.Length; i++ ) {
if( logger.logFileOptions[i] ) {
logFileOptions.Add( new XElement( ((LogType)i).ToString() ) );
}
}
config.Add( logFileOptions );
XElement classesTag = new XElement( "Classes" );
foreach( PlayerClass playerClass in classes.classes.Values ) {
XElement classTag = new XElement( "PlayerClass" );
classTag.Add( new XAttribute( "name", playerClass.name ) );
classTag.Add( new XAttribute( "rank", playerClass.rank ) );
classTag.Add( new XAttribute( "color", Color.GetName( playerClass.color ) ) );
if( playerClass.prefix.Length > 0 ) classTag.Add( new XAttribute( "prefix", playerClass.prefix ) );
if( playerClass.spamKickThreshold > 0 ) classTag.Add( new XAttribute( "spamKickAt", playerClass.spamKickThreshold ) );
if( playerClass.spamBanThreshold > 0 ) classTag.Add( new XAttribute( "spamBanAt", playerClass.spamBanThreshold ) );
if( playerClass.idleKickTimer > 0 ) classTag.Add( new XAttribute( "idleKickAfter", playerClass.idleKickTimer ) );
if( playerClass.reservedSlot ) classTag.Add( new XAttribute( "reserveSlot", playerClass.reservedSlot ) );
XElement temp;
for( int i = 0; i < Enum.GetValues(typeof(Permissions)).Length; i++ ) {
if( playerClass.permissions[i] ) {
temp = new XElement( ((Permissions)i).ToString() );
if( i == (int)Permissions.Ban && playerClass.maxBan!=null ) {
temp.Add( new XAttribute( "max", playerClass.maxBan.name ) );
} else if( i == (int)Permissions.Kick && playerClass.maxKick != null ) {
temp.Add( new XAttribute( "max", playerClass.maxKick.name ) );
} else if( i == (int)Permissions.Promote && playerClass.maxPromote != null ) {
temp.Add( new XAttribute( "max", playerClass.maxPromote.name ) );
} else if( i == (int)Permissions.Demote && playerClass.maxDemote != null ) {
temp.Add( new XAttribute( "max", playerClass.maxDemote.name ) );
}
classTag.Add( temp );
}
}
classesTag.Add( classTag );
}
config.Add( classesTag );
file.Add( config );
// save the settings
try {
file.Save( configFileName );
return true;
} catch( Exception ex ) {
Log( "Config.Load: Fatal error while saving config file {0}: {1}", LogType.FatalError, configFileName, ex.Message );
return false;
}
}