Beispiel #1
0
        public override bool Execute(GameClient session, string[] pms)
        {
            PetTypeManager.Load();
            PetCommandHandler.Init(Yupi.GetDatabaseManager().GetQueryReactor());

            return(true);
        }
Beispiel #2
0
        /// <summary>
        ///     Main Void, Initializes the Emulator.
        /// </summary>
        internal static void Initialize()
        {
            Console.Title = "Yupi Emulator | Starting [...]";

            ServerStarted      = DateTime.Now;
            _defaultEncoding   = Encoding.Default;
            MutedUsersByFilter = new Dictionary <uint, uint>();

            ChatEmotions.Initialize();

            CultureInfo = CultureInfo.CreateSpecificCulture("en-GB");

            YupiRootDirectory = Directory.GetParent(Directory.GetParent(Environment.CurrentDirectory).FullName).FullName;

            YupiVariablesDirectory = Path.Combine(YupiRootDirectory, "Variables");

            try
            {
                ServerConfigurationSettings.Load(Path.Combine(YupiVariablesDirectory, "Settings/main.ini"));
                ServerConfigurationSettings.Load(Path.Combine(YupiVariablesDirectory, "Settings/Welcome/settings.ini"),
                                                 true);

                MySqlConnectionStringBuilder mySqlConnectionStringBuilder = new MySqlConnectionStringBuilder
                {
                    Server                = ServerConfigurationSettings.Data["db.hostname"],
                    Port                  = uint.Parse(ServerConfigurationSettings.Data["db.port"]),
                    UserID                = ServerConfigurationSettings.Data["db.username"],
                    Password              = ServerConfigurationSettings.Data["db.password"],
                    Database              = ServerConfigurationSettings.Data["db.name"],
                    MinimumPoolSize       = uint.Parse(ServerConfigurationSettings.Data["db.pool.minsize"]),
                    MaximumPoolSize       = uint.Parse(ServerConfigurationSettings.Data["db.pool.maxsize"]),
                    Pooling               = true,
                    AllowZeroDateTime     = true,
                    ConvertZeroDateTime   = true,
                    DefaultCommandTimeout = 300u,
                    ConnectionTimeout     = 10u
                };

                Manager = new DatabaseManager(mySqlConnectionStringBuilder.ToString());

                using (IQueryAdapter commitableQueryReactor = GetDatabaseManager().GetQueryReactor())
                {
                    ConfigData = new ServerDatabaseSettings(commitableQueryReactor);
                    PetCommandHandler.Init(commitableQueryReactor);
                    PetLocale.Init(commitableQueryReactor);
                    OfflineMessages = new Dictionary <uint, List <OfflineMessage> >();
                    OfflineMessage.InitOfflineMessages(commitableQueryReactor);
                }

                ConsoleTimer       = int.Parse(ServerConfigurationSettings.Data["console.clear.time"]);
                ConsoleTimerOn     = bool.Parse(ServerConfigurationSettings.Data["console.clear.enabled"]);
                FriendRequestLimit = (uint)int.Parse(ServerConfigurationSettings.Data["client.maxrequests"]);

                LibraryParser.Incoming = new Dictionary <int, LibraryParser.StaticRequestHandler>();
                LibraryParser.Library  = new Dictionary <string, string>();
                LibraryParser.Outgoing = new Dictionary <string, int>();
                LibraryParser.Config   = new Dictionary <string, string>();

                if (ServerConfigurationSettings.Data.ContainsKey("client.build"))
                {
                    LibraryParser.ReleaseName = ServerConfigurationSettings.Data["client.build"];
                }
                else
                {
                    throw new Exception("Unable to Continue if No Release is configured to the Emulator Handle.");
                }

                LibraryParser.RegisterLibrary();
                LibraryParser.RegisterOutgoing();
                LibraryParser.RegisterIncoming();
                LibraryParser.RegisterConfig();

                Plugins = new Dictionary <string, IPlugin>();

                ICollection <IPlugin> plugins = LoadPlugins();

                if (plugins != null)
                {
                    foreach (IPlugin item in plugins.Where(item => item != null))
                    {
                        Plugins.Add(item.PluginName, item);

                        Writer.WriteLine("Loaded Plugin: " + item.PluginName + " Version: " + item.PluginVersion,
                                         "Yupi.Plugins", ConsoleColor.DarkBlue);
                    }
                }

                ServerExtraSettings.RunExtraSettings();
                FurnitureDataManager.SetCache();
                CrossDomainSettings.Set();

                _game = new Game.Game(int.Parse(ServerConfigurationSettings.Data["game.tcp.conlimit"]));

                _game.GetNavigator().LoadNewPublicRooms();
                _game.ContinueLoading();

                FurnitureDataManager.Clear();

                if (ServerConfigurationSettings.Data.ContainsKey("server.lang"))
                {
                    ServerLanguage = Convert.ToString(ServerConfigurationSettings.Data["server.lang"]);
                }

                _languages = new ServerLanguageSettings(ServerLanguage);

                Writer.WriteLine("Loaded " + _languages.Count() + " Languages Vars", "Yupi.Interpreters");

                if (plugins != null)
                {
                    foreach (IPlugin itemTwo in plugins)
                    {
                        itemTwo?.message_void();
                    }
                }

                if (ConsoleTimerOn)
                {
                    Writer.WriteLine("Console Clear Timer is Enabled, with " + ConsoleTimer + " Seconds.", "Yupi.Boot");
                }

                ClientMessageFactory.Init();

                Writer.WriteLine(
                    "Game server started at port " + int.Parse(ServerConfigurationSettings.Data["game.tcp.port"]),
                    "Server.Game");

                _connectionManager = new ConnectionHandler(int.Parse(ServerConfigurationSettings.Data["game.tcp.port"]),
                                                           int.Parse(ServerConfigurationSettings.Data["game.tcp.conlimit"]),
                                                           int.Parse(ServerConfigurationSettings.Data["game.tcp.conperip"]),
                                                           ServerConfigurationSettings.Data["game.tcp.antiddos"].ToLower() == "true",
                                                           ServerConfigurationSettings.Data["game.tcp.enablenagles"].ToLower() == "true");

                if (LibraryParser.Config["Crypto.Enabled"] == "true")
                {
                    Handler.Initialize(LibraryParser.Config["Crypto.RSA.N"], LibraryParser.Config["Crypto.RSA.D"],
                                       LibraryParser.Config["Crypto.RSA.E"]);

                    Writer.WriteLine("Started RSA crypto service", "Yupi.Crypto");
                }
                else
                {
                    Writer.WriteLine("The encryption system is disabled.", "Yupi.Crypto", ConsoleColor.DarkYellow);
                }

                LibraryParser.Initialize();

                if (ConsoleTimerOn)
                {
                    Timer = new Timer {
                        Interval = ConsoleTimer
                    };
                    Timer.Elapsed += TimerElapsed;
                    Timer.Start();
                }

                if (ServerConfigurationSettings.Data.ContainsKey("StaffAlert.MinLevel"))
                {
                    StaffAlertMinRank = uint.Parse(ServerConfigurationSettings.Data["StaffAlert.MinLevel"]);
                }

                if (ServerConfigurationSettings.Data.ContainsKey("game.multithread.enabled"))
                {
                    SeparatedTasksInMainLoops = ServerConfigurationSettings.Data["game.multithread.enabled"] == "true";
                }

                if (ServerConfigurationSettings.Data.ContainsKey("client.multithread.enabled"))
                {
                    SeparatedTasksInGameClientManager =
                        ServerConfigurationSettings.Data["client.multithread.enabled"] == "true";
                }

                if (ServerConfigurationSettings.Data.ContainsKey("debug.packet"))
                {
                    if (ServerConfigurationSettings.Data["debug.packet"] == "true")
                    {
                        PacketDebugMode = true;
                    }
                }

                Writer.WriteLine("Yupi Emulator ready. Status: idle", "Yupi.Boot");

                IsLive = true;
            }
            catch (Exception e)
            {
                Writer.WriteLine("Error When Starting Yupi Environment!" + Environment.NewLine + e.Message, "Yupi.Boot",
                                 ConsoleColor.Red);
                Writer.WriteLine("Please press Y to get more details or press other Key to Exit", "Yupi.Boot",
                                 ConsoleColor.Red);
                ConsoleKeyInfo key = Console.ReadKey();

                if (key.Key == ConsoleKey.Y)
                {
                    Console.WriteLine();
                    Writer.WriteLine(
                        Environment.NewLine + "[Message] Error Details: " + Environment.NewLine + e.StackTrace +
                        Environment.NewLine + e.InnerException + Environment.NewLine + e.TargetSite +
                        Environment.NewLine + "[Message] Press Any Key To Exit", "Yupi.Boot", ConsoleColor.Red);
                    Console.ReadKey();
                    Environment.Exit(1);
                }
                else
                {
                    Environment.Exit(1);
                }
            }
        }
 public PetController(PetCommandHandler handler)
 {
     _handler = handler;
 }
Beispiel #4
0
        /// <summary>
        ///     Called when [user say].
        /// </summary>
        /// <param name="user">The user.</param>
        /// <param name="msg">The MSG.</param>
        internal override void OnUserSay(RoomUser user, string msg)
        {
            RoomUser roomUser = GetRoomUser();

            if (roomUser.PetData.OwnerId != user.GetClient().GetHabbo().Id)
            {
                return;
            }

            if (string.IsNullOrEmpty(msg))
            {
                msg = " ";
            }

            PetCommand command = PetCommandHandler.GetPetCommandByInput(msg.Substring(1).ToLower());

            if (!command.PetTypes.Contains(roomUser.PetData.Type))
            {
                return;
            }

            if (roomUser.PetData.Level < command.MinLevel)
            {
                return;
            }

            RemovePetStatus();

            _actionTimer = 25;
            _energyTimer = 10;

            if (roomUser.PetData.Energy < command.LostEnergy && roomUser.PetData.Nutrition < 25 ||
                roomUser.PetData.Energy < command.LostEnergy)
            {
                roomUser.UpdateNeeded = true;

                string[] valueLazy   = PetLocale.GetValue("pet.lazy");
                string   messageLazy = valueLazy[new Random().Next(0, valueLazy.Length - 1)];

                roomUser.Chat(null, messageLazy, false, 0);

                return;
            }

            roomUser.UpdateNeeded = true;

            roomUser.PetData.AddExperience(command.GainedExperience);

            roomUser.Statusses.Add(command.PetStatus, string.Empty);
            roomUser.Statusses.Add("gst", command.PetGesture);

            roomUser.FollowingOwner = null;

            SubtractAttributes(command.LostEnergy);

            Random random = new Random();

            string[] value   = PetLocale.GetValue(command.PetSpeech);
            string   message = value[random.Next(0, value.Length - 1)];

            roomUser.Statusses.Clear();
            roomUser.Chat(null, message, false, 0);

            /* other gestures that isnt listed */

            // roomUser.Statusses.Add("jmp", "");
            //roomUser.Statusses.Add("gst", "joy");

            //roomUser.AddStatus("lay", "");
            //roomUser.AddStatus("gst", "eyb");

            //roomUser.Statusses.Add("beg", "");
            //roomUser.Statusses.Add("gst", "sml");

            switch (command.CommandAction)
            {
            case "follow":
                roomUser.FollowingOwner = roomUser;

                RemovePetStatus();

                switch (roomUser.RotBody)
                {
                case 0:
                    roomUser.MoveTo(roomUser.X + 2, roomUser.Y);
                    break;

                case 1:
                    roomUser.MoveTo(roomUser.X - 2, roomUser.Y - 2);
                    break;

                case 2:
                    roomUser.MoveTo(roomUser.X, roomUser.Y + 2);
                    break;

                case 3:
                    roomUser.MoveTo(roomUser.X + 2, roomUser.Y - 2);
                    break;

                case 4:
                    roomUser.MoveTo(roomUser.X - 2, roomUser.Y);
                    break;

                case 5:
                    roomUser.MoveTo(roomUser.X + 2, roomUser.Y + 2);
                    break;

                case 6:
                    roomUser.MoveTo(roomUser.X, roomUser.Y - 2);
                    break;

                case 7:
                    roomUser.MoveTo(roomUser.X - 2, roomUser.Y + 2);
                    break;
                }

                break;

            case "breed":
                Point coord = new Point();

                switch (roomUser.PetData.Type)
                {
                case "pet_terrier":
                    coord = GetRoom().GetRoomItemHandler().GetRandomBreedingTerrier(roomUser.PetData);
                    break;

                case "pet_bear":
                    coord = GetRoom().GetRoomItemHandler().GetRandomBreedingBear(roomUser.PetData);
                    break;
                }

                if (coord == new Point())
                {
                    ServerMessage alert = new ServerMessage(LibraryParser.OutgoingRequest("PetBreedErrorMessageComposer"));

                    alert.AppendInteger(0);

                    user.GetClient().SendMessage(alert);
                }

                roomUser.MoveTo(coord, true);

                break;

            case "sleep":
                string[] valueSleep   = PetLocale.GetValue("tired");
                string   messageSleep = valueSleep[new Random().Next(0, valueSleep.Length - 1)];

                roomUser.Chat(null, messageSleep, false, 0);
                break;

            case "unknown":
                string[] valueUnknown   = PetLocale.GetValue("pet.unknowncommand");
                string   messageUnknown = valueUnknown[new Random().Next(0, valueUnknown.Length - 1)];

                roomUser.Chat(null, messageUnknown, false, 0);
                break;

            case "lazy":
                string[] valueLazy   = PetLocale.GetValue("pet.lazy");
                string   messageLazy = valueLazy[new Random().Next(0, valueLazy.Length - 1)];

                roomUser.Chat(null, messageLazy, false, 0);
                break;

            case "nest":
                RemovePetStatus();

                IEnumerable <RoomItem> petNest =
                    GetRoom()
                    .GetRoomItemHandler()
                    .FloorItems.Values.Where(x => x.GetBaseItem().InteractionType == Interaction.PetNest);

                IEnumerable <RoomItem> enumerable = petNest as RoomItem[] ?? petNest.ToArray();

                // @todo rewrite this to redo actionsss
                if (!enumerable.Any())
                {
                    command.CommandAction = "lazy";
                }

                RoomItem roomItems = enumerable.FirstOrDefault();

                if (roomItems != null)
                {
                    roomUser.MoveTo(roomItems.X, roomItems.Y);
                }

                roomUser.PetData.AddExperience(40);

                break;

            case "default":
                break;
            }
        }
Beispiel #5
0
        /// <summary>
        /// Called when [user say].
        /// </summary>
        /// <param name="user">The user.</param>
        /// <param name="msg">The MSG.</param>
        internal override void OnUserSay(RoomUser user, string msg)
        {
            RoomUser roomUser = GetRoomUser();

            if (roomUser.PetData.OwnerId != user.GetClient().GetHabbo().Id)
            {
                return;
            }
            if (string.IsNullOrEmpty(msg))
            {
                msg = " ";
            }
            string strPetName    = roomUser.PetData.Name;
            int    intLngPetName = strPetName.Length;
            string strCommand    = msg;

            if (!strCommand.Substring(0, intLngPetName).Equals(strPetName))
            {
                return;
            }

            msg = msg.Substring(intLngPetName);
            msg = msg.Trim();
            bool lazy     = false;
            bool unknown  = false;
            bool sleeping = false;

            try
            {
                int command = PetCommandHandler.TryInvoke(msg);
                switch (command)
                {
                case 7:
                    RemovePetStatus();
                    GameClient OwnerSession = HabboHotel.Roleplay.Misc.RoleplayManager.GenerateSession(GetRoomUser().PetData.OwnerName);
                    if (OwnerSession == null)
                    {
                        return;
                    }
                    RoomUser MyOwner;
                    MyOwner = OwnerSession.GetHabbo().GetRoomUser();
                    roomUser.FollowingOwner = MyOwner;
                    break;

                default:
                    RemovePetStatus();
                    roomUser.FollowingOwner = null;
                    break;
                }
            }
            catch (Exception)
            {
                lazy = true;
                SubtractAttributes();
            }

            if (sleeping)
            {
                // string[] value = PetLocale.GetValue("tired");
                // string message = value[new Random().Next(0, (value.Length - 1))];

                // roomUser.Chat(null, message, false, 0, 0);
            }
            else if (unknown)
            {
                //string[] value = PetLocale.GetValue("pet.unknowncommand");
                //string message = value[new Random().Next(0, (value.Length - 1))];

                // roomUser.Chat(null, message, false, 0, 0);
            }
            else if (lazy)
            {
                //string[] value = PetLocale.GetValue("pet.lazy");
                //string message = value[new Random().Next(0, (value.Length - 1))];

                //roomUser.Chat(null, message, false, 0, 0);
            }
            else
            {
                roomUser.Chat(null, "Okay!", false, 0, 0);
            }
        }
Beispiel #6
0
        /// <summary>
        ///     Main Void, Initializes the Emulator.
        /// </summary>
        internal static void Initialize()
        {
            Console.Title = "Yupi Emulator | Starting [...]";

            YupiServerStartDateTime = DateTime.Now;
            YupiServerTextEncoding  = Encoding.Default;
            MutedUsersByFilter      = new Dictionary <uint, uint>();

            ChatEmotions.Initialize();

            CultureInfo = CultureInfo.CreateSpecificCulture("en-GB");

            YupiRootDirectory = Directory.GetParent(Directory.GetParent(Environment.CurrentDirectory).FullName).FullName;

            YupiVariablesDirectory = Path.Combine(YupiRootDirectory, "Variables");

            try
            {
                ServerConfigurationSettings.Load(Path.Combine(YupiVariablesDirectory, "Settings/main.ini"));
                ServerConfigurationSettings.Load(Path.Combine(YupiVariablesDirectory, "Settings/Welcome/settings.ini"), true);

                if (uint.Parse(ServerConfigurationSettings.Data["db.pool.maxsize"]) > MaxRecommendedMySqlConnections)
                {
                    YupiWriterManager.WriteLine("MySQL Max Conn is High!, Recommended Value: " + MaxRecommendedMySqlConnections, "Yupi.Data", ConsoleColor.DarkYellow);
                }

                MySqlConnectionStringBuilder mySqlConnectionStringBuilder = new MySqlConnectionStringBuilder
                {
                    Server                = ServerConfigurationSettings.Data["db.hostname"],
                    Port                  = uint.Parse(ServerConfigurationSettings.Data["db.port"]),
                    UserID                = ServerConfigurationSettings.Data["db.username"],
                    Password              = ServerConfigurationSettings.Data["db.password"],
                    Database              = ServerConfigurationSettings.Data["db.name"],
                    MinimumPoolSize       = uint.Parse(ServerConfigurationSettings.Data["db.pool.minsize"]),
                    MaximumPoolSize       = uint.Parse(ServerConfigurationSettings.Data["db.pool.maxsize"]),
                    Pooling               = true,
                    AllowZeroDateTime     = true,
                    ConvertZeroDateTime   = true,
                    DefaultCommandTimeout = 300,
                    ConnectionTimeout     = 10
                };

                YupiDatabaseManager = new BasicDatabaseManager(mySqlConnectionStringBuilder);

                using (IQueryAdapter queryReactor = GetDatabaseManager().GetQueryReactor())
                {
                    DatabaseSettings = new ServerDatabaseSettings(queryReactor);
                    PetCommandHandler.Init(queryReactor);
                    PetLocale.Init(queryReactor);
                    OfflineMessages = new Dictionary <uint, List <OfflineMessage> >();
                    OfflineMessage.InitOfflineMessages(queryReactor);
                }

                YupiLogManager.Init(MethodBase.GetCurrentMethod().DeclaringType);

                ConsoleCleanTimeInterval = int.Parse(ServerConfigurationSettings.Data["console.clear.time"]);
                ConsoleTimerOn           = bool.Parse(ServerConfigurationSettings.Data["console.clear.enabled"]);
                FriendRequestLimit       = (uint)int.Parse(ServerConfigurationSettings.Data["client.maxrequests"]);

                LibraryParser.Incoming = new Dictionary <int, LibraryParser.StaticRequestHandler>();
                LibraryParser.Library  = new Dictionary <string, string>();
                LibraryParser.Outgoing = new Dictionary <string, int>();
                LibraryParser.Config   = new Dictionary <string, string>();

                LibraryParser.ReleaseName = ServerConfigurationSettings.Data["client.build"];

                LibraryParser.RegisterLibrary();
                LibraryParser.RegisterOutgoing();
                LibraryParser.RegisterIncoming();
                LibraryParser.RegisterConfig();

                Plugins = new Dictionary <string, IPlugin>();

                ICollection <IPlugin> plugins = LoadPlugins();

                if (plugins != null)
                {
                    foreach (IPlugin item in plugins.Where(item => item != null))
                    {
                        Plugins.Add(item.PluginName, item);

                        YupiWriterManager.WriteLine("Loaded Plugin: " + item.PluginName + " ServerVersion: " + item.PluginVersion, "Yupi.Plugins", ConsoleColor.DarkBlue);
                    }
                }

                ServerExtraSettings.RunExtraSettings();
                FurnitureDataManager.SetCache();
                CrossDomainSettings.Set();

                GameServer = new HabboHotel(int.Parse(ServerConfigurationSettings.Data["game.tcp.conlimit"]));

                GameServer.ContinueLoading();

                FurnitureDataManager.Clear();

                if (ServerConfigurationSettings.Data.ContainsKey("server.lang"))
                {
                    ServerLanguage = ServerConfigurationSettings.Data["server.lang"];
                }

                ServerLanguageVariables = new ServerLanguageSettings(ServerLanguage);

                YupiWriterManager.WriteLine("Loaded " + ServerLanguageVariables.Count() + " Languages Vars", "Yupi.Boot");

                if (plugins != null)
                {
                    foreach (IPlugin plugin in plugins)
                    {
                        plugin?.message_void();
                    }
                }

                if (ConsoleTimerOn)
                {
                    YupiWriterManager.WriteLine("Console Clear ConsoleRefreshTimer is Enabled, with " + ConsoleCleanTimeInterval + " Seconds.", "Yupi.Boot");
                }

                ClientMessageFactory.Init();

                YupiUserConnectionManager = new ConnectionHandler(int.Parse(ServerConfigurationSettings.Data["game.tcp.port"]),
                                                                  int.Parse(ServerConfigurationSettings.Data["game.tcp.conlimit"]),
                                                                  int.Parse(ServerConfigurationSettings.Data["game.tcp.conperip"]),
                                                                  ServerConfigurationSettings.Data["game.tcp.antiddos"].ToLower() == "true",
                                                                  ServerConfigurationSettings.Data["game.tcp.enablenagles"].ToLower() == "true");

                YupiWriterManager.WriteLine("Server Started at Port "
                                            + ServerConfigurationSettings.Data["game.tcp.port"] + " and Address "
                                            + ServerConfigurationSettings.Data["game.tcp.bindip"], "Yupi.Boot");

                if (LibraryParser.Config["Crypto.Enabled"] == "true")
                {
                    Handler.Initialize(LibraryParser.Config["Crypto.RSA.N"], LibraryParser.Config["Crypto.RSA.D"], LibraryParser.Config["Crypto.RSA.E"]);

                    YupiWriterManager.WriteLine("Started RSA crypto service", "Yupi.Crypto");
                }
                else
                {
                    YupiWriterManager.WriteLine("The encryption system is disabled.", "Yupi.Crypto", ConsoleColor.DarkYellow);
                }

                LibraryParser.Initialize();

                if (ConsoleTimerOn)
                {
                    ConsoleRefreshTimer = new Timer {
                        Interval = ConsoleCleanTimeInterval
                    };
                    ConsoleRefreshTimer.Elapsed += ConsoleRefreshTimerElapsed;
                    ConsoleRefreshTimer.Start();
                }

                if (ServerConfigurationSettings.Data.ContainsKey("game.multithread.enabled"))
                {
                    SeparatedTasksInMainLoops = ServerConfigurationSettings.Data["game.multithread.enabled"] == "true";
                }

                if (ServerConfigurationSettings.Data.ContainsKey("client.multithread.enabled"))
                {
                    SeparatedTasksInGameClientManager = ServerConfigurationSettings.Data["client.multithread.enabled"] == "true";
                }

                if (ServerConfigurationSettings.Data.ContainsKey("debug.packet"))
                {
                    PacketDebugMode = ServerConfigurationSettings.Data["debug.packet"] == "true";
                }

                YupiWriterManager.WriteLine("Yupi Emulator ready.", "Yupi.Boot");

                IsLive = true;
            }
            catch (Exception e)
            {
                YupiWriterManager.WriteLine("Error When Starting Yupi Environment!" + Environment.NewLine + e.Message, "Yupi.Boot", ConsoleColor.Red);
                YupiWriterManager.WriteLine("Please press Y to get more details or press other Key to Exit", "Yupi.Boot", ConsoleColor.Red);

                ConsoleKeyInfo key = Console.ReadKey();

                if (key.Key == ConsoleKey.Y)
                {
                    Console.WriteLine();

                    YupiWriterManager.WriteLine(
                        Environment.NewLine + "[Message] Error Details: " + Environment.NewLine + e.StackTrace +
                        Environment.NewLine + e.InnerException + Environment.NewLine + e.TargetSite +
                        Environment.NewLine + "[Message] Press Any Key To Exit", "Yupi.Boot", ConsoleColor.Red);

                    Console.ReadKey();
                }

                Environment.Exit(1);
            }
        }
Beispiel #7
0
        /// <summary>
        /// Main Void, Initializes the Emulator.
        /// </summary>
        internal static void Initialize()
        {
            #region Precheck

            Console.Title    = "CityRP está iniciando..";
            ServerStarted    = DateTime.Now;
            _defaultEncoding = Encoding.Default;

            #endregion Precheck

            #region Database Connection

            CultureInfo = CultureInfo.CreateSpecificCulture("en-GB");
            try
            {
                ConfigurationData.Load(Path.Combine(Application.StartupPath, "Settings/main.ini"), false);
                RoleplayData.Load(Path.Combine(Application.StartupPath, "Settings/Roleplay/settings.ini"), true);

                DatabaseConnectionType = ConfigurationData.Data["db.type"];
                var mySqlConnectionStringBuilder = new MySqlConnectionStringBuilder
                {
                    Server                = (ConfigurationData.Data["db.hostname"]),
                    Port                  = (uint.Parse(ConfigurationData.Data["db.port"])),
                    UserID                = (ConfigurationData.Data["db.username"]),
                    Password              = (ConfigurationData.Data["db.password"]),
                    Database              = (ConfigurationData.Data["db.name"]),
                    MinimumPoolSize       = (uint.Parse(ConfigurationData.Data["db.pool.minsize"])),
                    MaximumPoolSize       = (uint.Parse(ConfigurationData.Data["db.pool.maxsize"])),
                    Pooling               = (true),
                    AllowZeroDateTime     = (true),
                    ConvertZeroDateTime   = (true),
                    DefaultCommandTimeout = (300),
                    ConnectionTimeout     = (10)
                };
                var mySqlConnectionStringBuilder2 = mySqlConnectionStringBuilder;
                Manager = new DatabaseManager(mySqlConnectionStringBuilder2.ToString(), DatabaseConnectionType);
                using (var queryReactor = GetDatabaseManager().GetQueryReactor())
                {
                    ConfigData = new ConfigData(queryReactor);
                    PetCommandHandler.Init(queryReactor);
                    PetLocale.Init(queryReactor);
                    OfflineMessages = new Dictionary <uint, List <OfflineMessage> >();
                    OfflineMessage.InitOfflineMessages(queryReactor);
                }

                #endregion Database Connection

                #region Packets Registering

                ConsoleTimer       = (int.Parse(ConfigurationData.Data["console.clear.time"]));
                ConsoleTimerOn     = (bool.Parse(ConfigurationData.Data["console.clear.enabled"]));
                FriendRequestLimit = ((uint)int.Parse(ConfigurationData.Data["client.maxrequests"]));


                LibraryParser.Incoming = new Dictionary <int, LibraryParser.StaticRequestHandler>();
                LibraryParser.Library  = new Dictionary <string, string>();
                LibraryParser.Outgoing = new Dictionary <string, int>();
                LibraryParser.Config   = new Dictionary <string, string>();

                LibraryParser.RegisterLibrary();
                LibraryParser.RegisterOutgoing();
                LibraryParser.RegisterIncoming();
                LibraryParser.RegisterConfig();

                #endregion Packets Registering

                #region Game Initalizer

                ExtraSettings.RunExtraSettings();
                CrossDomainPolicy.Set();
                _game = new Game(int.Parse(ConfigurationData.Data["game.tcp.conlimit"]));
                _game.GetNavigator().LoadNewPublicRooms();
                _game.ContinueLoading();

                #endregion Game Initalizer

                #region Languages Parser

                ServerLanguage = (Convert.ToString(ConfigurationData.Data["system.lang"]));
                _languages     = new Languages(ServerLanguage);

                #endregion Languages Parser

                #region Environment SetUp

                if (ConsoleTimerOn)
                {
                    Out.WriteLine("Console Clear Timer is enable with " + ConsoleTimer + " seconds.");
                }

                _connectionManager = new ConnectionHandling(int.Parse(ConfigurationData.Data["game.tcp.port"]),
                                                            int.Parse(ConfigurationData.Data["game.tcp.conlimit"]),
                                                            int.Parse(ConfigurationData.Data["game.tcp.conperip"]),
                                                            ConfigurationData.Data["game.tcp.enablenagles"].ToLower() == "true");

                if (LibraryParser.Config["Crypto.Enabled"] == "true")
                {
                    Handler.Initialize(LibraryParser.Config["Crypto.RSA.N"], LibraryParser.Config["Crypto.RSA.D"], LibraryParser.Config["Crypto.RSA.E"]);
                }

                _connectionManager.init();

                LibraryParser.Initialize();

                #endregion Environment SetUp

                #region Tasks and MusSystem

                if (ConsoleTimerOn)
                {
                    Timer = new Timer {
                        Interval = ConsoleTimer
                    };
                    Timer.Elapsed += TimerElapsed;
                    Timer.Start();
                }

                if (ConfigurationData.Data.ContainsKey("StaffAlert.MinRank"))
                {
                    StaffAlertMinRank = uint.Parse(ConfigurationData.Data["StaffAlert.MinRank"]);
                }

                if (ConfigurationData.Data.ContainsKey("SeparatedTasksInMainLoops.enabled") &&
                    ConfigurationData.Data["SeparatedTasksInMainLoops.enabled"] == "true")
                {
                    SeparatedTasksInMainLoops = true;
                }
                if (ConfigurationData.Data.ContainsKey("SeparatedTasksInGameClientManager.enabled") &&
                    ConfigurationData.Data["SeparatedTasksInGameClientManager.enabled"] == "true")
                {
                    SeparatedTasksInGameClientManager = true;
                }
                if (ConfigurationData.Data.ContainsKey("Debug"))
                {
                    if (ConfigurationData.Data["Debug"] == "true")
                    {
                        DebugMode = true;
                    }
                }

                TimeSpan TimeUsed = DateTime.Now - ServerStarted;

                Out.WriteLine("CityRP >> Started (" + TimeUsed.Seconds + "s, " + TimeUsed.Milliseconds + "ms)", "", ConsoleColor.Green);
                IsLive = true;

                using (var queryReactor = GetDatabaseManager().GetQueryReactor())
                {
                    queryReactor.RunFastQuery("UPDATE server_settings SET value = '1' WHERE variable = 'status'");
                }
            }
            catch (Exception e)
            {
                Out.WriteLine("Error in main.ini: Configuration file is invalid" + Environment.NewLine + e.Message, "", ConsoleColor.Red);
                Out.WriteLine("Please press Y to get more details or press other Key to Exit", "", ConsoleColor.Red);

                var key = Console.ReadKey();
                if (key.Key == ConsoleKey.Y)
                {
                    Console.WriteLine();
                    Out.WriteLine(
                        Environment.NewLine + "[Message] Error Details: " + Environment.NewLine + e.StackTrace +
                        Environment.NewLine + e.InnerException + Environment.NewLine + e.TargetSite +
                        Environment.NewLine + "[Message ]Press Any Key To Exit", "", ConsoleColor.Red);
                    Console.ReadKey();
                    Environment.Exit(1);
                }
                else
                {
                    Environment.Exit(1);
                }
            }

            #endregion Tasks and MusSystem
        }