using System; using System.Collections.Generic; using System.Net; using System.IO; using System.Text; namespace SnowLight.Config { public static class ConfigManager { private static string mConfigCustomization; private static string mConfigCommands; private static string mConfigPath; private static Dictionary mConfigData; public static string ConfigCustom { get { return mConfigCustomization; } } public static string ConfigCommands { get { return mConfigCommands; } } public static string ConfigPath { get { return mConfigPath; } } public static void Initialize(string ConfigPath) { mConfigPath = ConfigPath; mConfigData = new Dictionary(); // Rank al conectarte #region Rango Al Conectarte mConfigData.Add("rankconect.on", new ConfigElement("rankconect.on", ConfigElementType.Integer, 0)); #endregion // Rank al conectarte // Beeps #region Beeps mConfigData.Add("beep.on", new ConfigElement("beep.on", ConfigElementType.Integer, 1)); #endregion // MySQL # region MySql mConfigData.Add("mysql.pool.min", new ConfigElement("mysql.pool.min", ConfigElementType.Integer, 5)); mConfigData.Add("mysql.pool.max", new ConfigElement("mysql.pool.max", ConfigElementType.Integer, 20)); mConfigData.Add("mysql.pool.lifetime", new ConfigElement("mysql.pool.lifetime", ConfigElementType.Integer, 10)); mConfigData.Add("mysql.user", new ConfigElement("mysql.user", ConfigElementType.Text, "root")); mConfigData.Add("mysql.pass", new ConfigElement("mysql.pass", ConfigElementType.Text, "changeme")); mConfigData.Add("mysql.host", new ConfigElement("mysql.host", ConfigElementType.Text, "localhost")); mConfigData.Add("mysql.port", new ConfigElement("mysql.port", ConfigElementType.Integer, 3306)); mConfigData.Add("mysql.dbname", new ConfigElement("mysql.port", ConfigElementType.Text, "snowdb")); #endregion // Net #region Conexion mConfigData.Add("net.backlog", new ConfigElement("net.backlog", ConfigElementType.Integer, 50)); mConfigData.Add("net.bind.ip", new ConfigElement("net.bind.ip", ConfigElementType.IpAddress, IPAddress.Any)); mConfigData.Add("net.bind.port", new ConfigElement("net.bind.port", ConfigElementType.Integer, 38101)); #endregion // Navigator/room settings #region Opciones mConfigData.Add("navigator.maxroomsperuser", new ConfigElement("navigator.maxroomsperuser", ConfigElementType.Integer, 15)); mConfigData.Add("navigator.maxfavoritesperuser", new ConfigElement("navigator.maxfavoritesperuser", ConfigElementType.Integer, 30)); mConfigData.Add("rooms.staffpicked.category", new ConfigElement("rooms.staffpicked.category", ConfigElementType.Integer, 2)); mConfigData.Add("rooms.limit.furni", new ConfigElement("rooms.limit.furni", ConfigElementType.Integer, 1000)); mConfigData.Add("rooms.limit.stacking", new ConfigElement("rooms.limit.stacking", ConfigElementType.Integer, 12)); mConfigData.Add("rooms.limit.pets", new ConfigElement("rooms.limit.pets", ConfigElementType.Integer, 10)); #endregion // Pixels #region Píxeles mConfigData.Add("activitypoints.enabled", new ConfigElement("activitypoints.enabled", ConfigElementType.Boolean, true)); mConfigData.Add("activitypoints.interval", new ConfigElement("activitypoints.interval", ConfigElementType.Integer, 1800)); mConfigData.Add("activitypoints.amount", new ConfigElement("activitypoints.amount", ConfigElementType.Integer, 50)); #endregion // Credits #region Créditos mConfigData.Add("credits.enabled", new ConfigElement("credits.enabled", ConfigElementType.Integer, 0)); mConfigData.Add("credits.interval", new ConfigElement("credits.interval", ConfigElementType.Integer, 2400000)); mConfigData.Add("credits.amount", new ConfigElement("credits.amount", ConfigElementType.Integer, 50)); #endregion // Respect #region Respetos mConfigData.Add("respect.enabled", new ConfigElement("respect.enabled", ConfigElementType.Integer, 1)); mConfigData.Add("respect.interval", new ConfigElement("respect.interval", ConfigElementType.Integer, 2400000)); mConfigData.Add("respect.amount", new ConfigElement("respect.amount", ConfigElementType.Integer, 100)); #endregion // Packets #region Packets mConfigData.Add("packets.show", new ConfigElement("packets.show", ConfigElementType.Text, "No")); #endregion Packets // Resolución de Consola #region Resolución mConfigData.Add("consola.height", new ConfigElement("consola.height", ConfigElementType.Integer, 30)); mConfigData.Add("consola.width", new ConfigElement("consola.width", ConfigElementType.Integer, 90)); #endregion if (File.Exists(mConfigPath)) { RetrieveValuesFromFile(); foreach (ConfigElement Element in mConfigData.Values) { if (!Element.UserConfigured) { Output.WriteLine("El valor de configuración '" + Element.Key.ToLower() + "' no existe; Se usara su valor por defecto.", OutputLevel.Warning); FileStream errWriter = new System.IO.FileStream(@"Logs\Vars_Error.ini", System.IO.FileMode.Append, System.IO.FileAccess.Write); byte[] Msg = ASCIIEncoding.ASCII.GetBytes("Var Error:\r\n" + Output.FormatTimestamp() + "Var -> " + Element.Key.ToLower() + " ; En el archivo de configuracion Config.ini" + "\r\n\r\n"); errWriter.Write(Msg, 0, Msg.Length); errWriter.Dispose(); Output.WriteLine("Excepción guardada entre los Logs", OutputLevel.Warning); } } } else { Output.WriteLine("El archivo de Configuración no se encontró en " + mConfigPath + "; Se usaran los valores por defecto.", OutputLevel.Warning); FileStream errWriter = new System.IO.FileStream(@"Logs\Config_Error.ini", System.IO.FileMode.Append, System.IO.FileAccess.Write); byte[] Msg = ASCIIEncoding.ASCII.GetBytes("Config Error:\r\n" + Output.FormatTimestamp() + "Config -> Config.ini\r\n\r\n"); errWriter.Write(Msg, 0, Msg.Length); errWriter.Dispose(); Output.WriteLine("Excepción guardada entre los Logs", OutputLevel.Warning); } } public static void InitializeCommands(string ConfigCommands) { mConfigCommands = ConfigCommands; // Comandos (Usuarios Corrientes) #region Comandos usuarios corrientes mConfigData.Add("commands.on", new ConfigElement("commands.on", ConfigElementType.Integer, 1)); mConfigData.Add("online.on", new ConfigElement("online.on", ConfigElementType.Integer, 1)); mConfigData.Add("moonwalk.on", new ConfigElement("moonwalk.on", ConfigElementType.Integer, 1)); mConfigData.Add("about.on", new ConfigElement("about.on", ConfigElementType.Integer, 1)); mConfigData.Add("pickall.on", new ConfigElement("pickall.on", ConfigElementType.Integer, 1)); #endregion // Comandos (Administradores) #region Comandos Administradores mConfigData.Add("transport.on", new ConfigElement("transport.on", ConfigElementType.Integer, 1)); mConfigData.Add("masseffect.on", new ConfigElement("masseffect.on", ConfigElementType.Integer, 1)); mConfigData.Add("floorwater.on", new ConfigElement("floorwater.on", ConfigElementType.Integer, 1)); mConfigData.Add("userinfo.on", new ConfigElement("userinfo.on", ConfigElementType.Integer, 1)); mConfigData.Add("moveto.on", new ConfigElement("moveto.on", ConfigElementType.Integer, 1)); mConfigData.Add("teleport.on", new ConfigElement("teleport.on", ConfigElementType.Integer, 1)); mConfigData.Add("drink.on", new ConfigElement("drink.on", ConfigElementType.Integer, 1)); mConfigData.Add("offline.on", new ConfigElement("offline.on", ConfigElementType.Integer, 1)); mConfigData.Add("superkick.on", new ConfigElement("superkick.on", ConfigElementType.Integer, 1)); mConfigData.Add("kick.on", new ConfigElement("kick.on", ConfigElementType.Integer, 1)); mConfigData.Add("roomunmute.on", new ConfigElement("roomunmute.on", ConfigElementType.Integer, 1)); mConfigData.Add("roommute.on", new ConfigElement("roommute.on", ConfigElementType.Integer, 1)); mConfigData.Add("unmute.on", new ConfigElement("unmute.on", ConfigElementType.Integer, 1)); mConfigData.Add("mute.on", new ConfigElement("mute.on", ConfigElementType.Integer, 1)); mConfigData.Add("override.on", new ConfigElement("override.on", ConfigElementType.Integer, 1)); mConfigData.Add("clippling.on", new ConfigElement("clippling.on", ConfigElementType.Integer, 1)); mConfigData.Add("t.on", new ConfigElement("t.on", ConfigElementType.Integer, 1)); mConfigData.Add("emptyinv.on", new ConfigElement("emptyinv.on", ConfigElementType.Integer, 1)); mConfigData.Add("inforank.on", new ConfigElement("inforank.on", ConfigElementType.Integer, 1)); mConfigData.Add("update_catalog.on", new ConfigElement("update_catalog.on", ConfigElementType.Integer, 1)); mConfigData.Add("quitrank.on", new ConfigElement("quitrank.on", ConfigElementType.Integer, 1)); mConfigData.Add("rank.on", new ConfigElement("rank.on", ConfigElementType.Integer, 1)); mConfigData.Add("ha.on", new ConfigElement("ha.on", ConfigElementType.Integer, 1)); mConfigData.Add("halink.on", new ConfigElement("halink.on", ConfigElementType.Integer, 1)); mConfigData.Add("anonymateha.on", new ConfigElement("anonymateha.on", ConfigElementType.Integer, 1)); mConfigData.Add("globalpixels.on", new ConfigElement("globalpixels.on", ConfigElementType.Integer, 1)); mConfigData.Add("globalcredits.on", new ConfigElement("globalcredits.on", ConfigElementType.Integer, 1)); mConfigData.Add("pixels.on", new ConfigElement("pixels.on", ConfigElementType.Integer, 1)); mConfigData.Add("credits.on", new ConfigElement("credits.on", ConfigElementType.Integer, 1)); mConfigData.Add("lessglobalpixels.on", new ConfigElement("lessglobalpixels.on", ConfigElementType.Integer, 1)); mConfigData.Add("lessglobalcredits.on", new ConfigElement("lessglobalcredits.on", ConfigElementType.Integer, 1)); mConfigData.Add("lesspixels.on", new ConfigElement("lesspixels.on", ConfigElementType.Integer, 1)); mConfigData.Add("lesscredits.on", new ConfigElement("lesscredits.on", ConfigElementType.Integer, 1)); mConfigData.Add("directglobalpixels.on", new ConfigElement("directglobalpixels.on", ConfigElementType.Integer, 1)); mConfigData.Add("directglobalcredits.on", new ConfigElement("directglobalcredits.on", ConfigElementType.Integer, 1)); mConfigData.Add("directpixels.on", new ConfigElement("directpixels.on", ConfigElementType.Integer, 1)); mConfigData.Add("directcredits.on", new ConfigElement("directcredits.on", ConfigElementType.Integer, 1)); #endregion if (File.Exists(mConfigCommands)) { RetrieveValuesFromFile2(); foreach (ConfigElement Element in mConfigData.Values) { if (!Element.UserConfigured) { Output.WriteLine("El valor de configuración '" + Element.Key.ToLower() + "' no existe; Se usara su valor por defecto.", OutputLevel.Warning); FileStream errWriter = new System.IO.FileStream(@"Logs\Vars_Error.ini", System.IO.FileMode.Append, System.IO.FileAccess.Write); byte[] Msg = ASCIIEncoding.ASCII.GetBytes("Var Error:\r\n" + Output.FormatTimestamp() + "Var -> " + Element.Key.ToLower() + " ; En el archivo de configuracion Commands.ini" + "\r\n\r\n"); errWriter.Write(Msg, 0, Msg.Length); errWriter.Dispose(); Output.WriteLine("Excepción guardada entre los Logs", OutputLevel.Warning); } } } else { Output.WriteLine("El archivo de Configuración no se encontró en " + mConfigPath + "; Se usaran los valores por defecto.", OutputLevel.Warning); FileStream errWriter = new System.IO.FileStream(@"Logs\Config_Error.ini", System.IO.FileMode.Append, System.IO.FileAccess.Write); byte[] Msg = ASCIIEncoding.ASCII.GetBytes("Config Error:\r\n" + Output.FormatTimestamp() + Output.FormatTimestamp() + "Config -> Commands.ini\r\n\r\n"); errWriter.Write(Msg, 0, Msg.Length); errWriter.Dispose(); Output.WriteLine("Excepción guardada entre los Logs", OutputLevel.Warning); } } public static void InitializeCustomization(string ConfigCus) { mConfigCustomization = ConfigCus; // Premio al Entrar en una Sala Específica #region Premio al entrar en una sala mConfigData.Add("active.room", new ConfigElement("active.room", ConfigElementType.Integer, 0)); mConfigData.Add("room.id", new ConfigElement("room.id", ConfigElementType.Integer, 0)); mConfigData.Add("badge.prize.room", new ConfigElement("badge.prize.room", ConfigElementType.Integer, 0)); mConfigData.Add("pixel.prize.room", new ConfigElement("pixel.prize.room", ConfigElementType.Integer, 0)); mConfigData.Add("credit.prize.room", new ConfigElement("credit.prize.room", ConfigElementType.Integer, 0)); #endregion // Premio al Conectarte #region Premio al conectarte mConfigData.Add("active.conect", new ConfigElement("active.conect", ConfigElementType.Integer, 0)); mConfigData.Add("badge.prize.conect", new ConfigElement("badge.prize.conect", ConfigElementType.Integer, 0)); mConfigData.Add("pixel.prize.conect", new ConfigElement("pixel.prize.conect", ConfigElementType.Integer, 0)); mConfigData.Add("credit.prize.conect", new ConfigElement("credit.prize.conect", ConfigElementType.Integer, 0)); #endregion // Premio al decir una frase predeterminada #region Premio al decir una frase predeterminada mConfigData.Add("active.phrase", new ConfigElement("active.phrase", ConfigElementType.Integer, 0)); mConfigData.Add("phrase", new ConfigElement("phrase", ConfigElementType.Text, "Hello World")); mConfigData.Add("badge.prize.phrase", new ConfigElement("badge.prize.phrase", ConfigElementType.Integer, 0)); mConfigData.Add("pixel.prize.phrase", new ConfigElement("pixel.prize.phrase", ConfigElementType.Integer, 0)); mConfigData.Add("credit.prize.phrase", new ConfigElement("credit.prize.phrase", ConfigElementType.Integer, 0)); #endregion if (File.Exists(mConfigCustomization)) { RetrieveValuesFromFile3(); foreach (ConfigElement Element in mConfigData.Values) { if (!Element.UserConfigured) { Output.WriteLine("El valor de configuración '" + Element.Key.ToLower() + "' no existe; Se usara su valor por defecto.", OutputLevel.Warning); FileStream errWriter = new System.IO.FileStream(@"Logs\Vars_Error.ini", System.IO.FileMode.Append, System.IO.FileAccess.Write); byte[] Msg = ASCIIEncoding.ASCII.GetBytes("Var Error:\r\n" + Output.FormatTimestamp() + "Var -> " + Element.Key.ToLower() + " ; En el archivo de configuracion Customization!.ini" + "\r\n\r\n"); errWriter.Write(Msg, 0, Msg.Length); errWriter.Dispose(); Output.WriteLine("Excepción guardada entre los Logs", OutputLevel.Warning); } } } else { Output.WriteLine("El archivo de Configuración no se encontró en " + mConfigPath + "; Se usaran los valores por defecto.", OutputLevel.Warning); FileStream errWriter = new System.IO.FileStream(@"Logs\Config_Error.ini", System.IO.FileMode.Append, System.IO.FileAccess.Write); byte[] Msg = ASCIIEncoding.ASCII.GetBytes("Config Error:\r\n" + Output.FormatTimestamp() + "Config -> Customization!.ini\r\n\r\n"); errWriter.Write(Msg, 0, Msg.Length); errWriter.Dispose(); Output.WriteLine("Excepción guardada entre los Logs", OutputLevel.Warning); } } private static void RetrieveValuesFromFile() { string[] Lines = File.ReadAllLines(mConfigPath, Constants.DefaultEncoding); foreach (string Line in Lines) { if (Line.StartsWith("#") || !Line.Contains("=")) { continue; } string[] LineBits = Line.Split('='); string Key = LineBits[0].ToLower(); string Value = string.Empty; for (int i = 1; i < LineBits.Length; i++) { if (i > 1) { Value += '='; } Value += LineBits[i]; } if (mConfigData.ContainsKey(Key)) { mConfigData[Key].CurrentValue = Value; } } } private static void RetrieveValuesFromFile2() { string[] Lines = File.ReadAllLines(mConfigCommands, Constants.DefaultEncoding); foreach (string Line in Lines) { if (Line.StartsWith("#") || !Line.Contains("=")) { continue; } string[] LineBits = Line.Split('='); string Key = LineBits[0].ToLower(); string Value = string.Empty; for (int i = 1; i < LineBits.Length; i++) { if (i > 1) { Value += '='; } Value += LineBits[i]; } if (mConfigData.ContainsKey(Key)) { mConfigData[Key].CurrentValue = Value; } } } private static void RetrieveValuesFromFile3() { string[] Lines = File.ReadAllLines(mConfigCustomization, Constants.DefaultEncoding); foreach (string Line in Lines) { if (Line.StartsWith("#") || !Line.Contains("=")) { continue; } string[] LineBits = Line.Split('='); string Key = LineBits[0].ToLower(); string Value = string.Empty; for (int i = 1; i < LineBits.Length; i++) { if (i > 1) { Value += '='; } Value += LineBits[i]; } if (mConfigData.ContainsKey(Key)) { mConfigData[Key].CurrentValue = Value; } } } public static object GetValue(string Key) { try { if (mConfigData == null || !mConfigData.ContainsKey(Key)) { throw new KeyNotFoundException(); } } catch (Exception) { } return mConfigData[Key].CurrentValue; } } }