Exemple #1
0
        /// <summary>
        ///     Called when [user enter room].
        /// </summary>
        /// <param name="user">The user.</param>
        internal override void OnUserEnterRoom(RoomUser user)
        {
            if (user.GetClient() == null || user.GetClient().GetHabbo() == null)
            {
                return;
            }

            RoomUser roomUser = GetRoomUser();

            if (roomUser == null || user.GetClient().GetHabbo().UserName != roomUser.PetData.OwnerName)
            {
                return;
            }

            Random random = new Random();

            string[] value   = PetLocale.GetValue("welcome.speech.pet");
            string   message = value[random.Next(0, value.Length - 1)];

            message += user.GetUserName();

            roomUser.Statusses.Clear();
            roomUser.UpdateNeeded = true;
            roomUser.Chat(null, message, false, 0);
        }
Exemple #2
0
 public ChatManager()
 {
     _emotions = new ChatEmotionsManager();
     _logs     = new ChatlogManager();
     _filter   = new WordFilterManager();
     _filter.Init();
     _commands    = new CommandManager(":");
     _petCommands = new PetCommandManager();
     _petLocale   = new PetLocale();
     _chatStyles  = new ChatStyleManager();
     _chatStyles.Init();
     log.Info("Chat Manager -> LOADED");
 }
Exemple #3
0
 internal override void OnUserEnterRoom(RoomUser User)
 {
     if (User.GetClient() != null && User.GetClient().GetHabbo() != null)
     {
         RoomUser roomUser = base.GetRoomUser();
         if (roomUser != null && User.GetClient().GetHabbo().Username == roomUser.PetData.OwnerName)
         {
             Random   random  = new Random();
             string[] value   = PetLocale.GetValue("welcome.speech.pet");
             string   message = value[random.Next(0, checked (value.Length - 1))];
             message += User.GetUsername();
             roomUser.Chat(null, message, false, 0, 0);
         }
     }
 }
        /// <summary>
        /// Initializes a new instance of the ChatManager class.
        /// </summary>
        public ChatManager()
        {
            _emotions = new ChatEmotionsManager();
            _logs     = new ChatlogManager();

            _filter = new WordFilterManager();
            _filter.InitWords();
            _filter.InitCharacters();

            _commands    = new CommandManager(":");
            _petCommands = new PetCommandManager();
            _petLocale   = new PetLocale();

            _chatStyles = new ChatStyleManager();
            _chatStyles.Init();

            log.Info(">> Chat Manager -> READY!");
        }
Exemple #5
0
        /// <summary>
        /// Initializes a new instance of the ChatManager class.
        /// </summary>
        public ChatManager()
        {
            this._emotions = new ChatEmotionsManager();
            this._logs     = new ChatlogManager();

            this._filter = new WordFilterManager();
            this._filter.InitWords();
            this._filter.InitCharacters();

            this._commands    = new CommandManager(":");
            this._petCommands = new PetCommandManager();
            this._petLocale   = new PetLocale();

            this._chatStyles = new ChatStyleManager();
            this._chatStyles.Init();

            log.Info("» Chat Manager -> CARGADO");
        }
Exemple #6
0
        /// <summary>
        /// Initializes a new instance of the ChatManager class.
        /// </summary>
        public ChatManager()
        {
            this._emotions = new ChatEmotionsManager();
            this._logs     = new ChatlogManager();

            this._filter = new WordFilterManager();
            this._filter.InitWords();
            this._filter.InitCharacters();

            this._commands    = new CommandManager(":");
            this._petCommands = new PetCommandManager();
            this._petLocale   = new PetLocale();

            this._chatStyles = new ChatStyleManager();
            this._chatStyles.Init();

            string CurrentTime = DateTime.Now.ToString("HH:mm:ss" + " | ");

            Console.ForegroundColor = ConsoleColor.DarkGray;
            Console.WriteLine(CurrentTime + "» Chat » Geladen!");
            Console.ResetColor();
        }
Exemple #7
0
        internal static void Initialize()
        {
            PrettyVersion = string.Format("Firewind {0}", Assembly.GetExecutingAssembly().GetName().Version);
            Console.Clear();
            DateTime Start = DateTime.Now;

            SystemMute = false;

            ServerStarted = DateTime.Now;

            Console.Title = "Firewind: Loading environment.";

            Logging.WriteWithColor("      _______ __                       __           __ ", ConsoleColor.Cyan);
            Logging.WriteWithColor("     |    ___|__|.----.-----.--.--.--.|__|.-----.--|  |", ConsoleColor.Cyan);
            Logging.WriteWithColor("     |    ___|  ||   _|  -__|  |  |  ||  ||     |  _  |", ConsoleColor.Cyan);
            Logging.WriteWithColor("     |___|   |__||__| |_____|________||__||__|__|_____|", ConsoleColor.Cyan);
            Logging.WriteLine("");
            Logging.WriteLine("==============================================================");

            DefaultEncoding = Encoding.Default;
            Logging.WriteLine("     " + PrettyVersion);
            Logging.WriteLine(string.Format("     Licenced to {0}", LicenseHolder));
            Logging.WriteLine(string.Format("     Maximum players: {0}", MaxUsers == 0 ? "Unlimited!" : MaxUsers.ToString()));

            Logging.WriteLine("");

            Logging.WriteLine("     Go to the GitHub repo for bug reporting/contributions!");
            cultureInfo = CultureInfo.CreateSpecificCulture("en-GB");
            IsDebugging = IsDebugging ? System.Diagnostics.Debugger.IsAttached : false;

            try
            {
                LanguageLocale.Init();
                ChatCommandRegister.Init();
                PetCommandHandeler.Init();
                PetLocale.Init();

                if (IsDebugging)
                {
                    Configuration = new ConfigurationData(System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, @"Settings_test/configuration.ini"));
                }
                else
                {
                    Configuration = new ConfigurationData(System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, @"Settings/configuration.ini"));
                }

                DateTime Starts = DateTime.Now;
                Logging.WriteLine("Connecting to database...");

                manager = new DatabaseManager(uint.Parse(FirewindEnvironment.GetConfig().data["db.pool.maxsize"]), int.Parse(FirewindEnvironment.GetConfig().data["db.pool.minsize"]));
                manager.setServerDetails(
                    FirewindEnvironment.GetConfig().data["db.hostname"],
                    uint.Parse(FirewindEnvironment.GetConfig().data["db.port"]),
                    FirewindEnvironment.GetConfig().data["db.username"],
                    FirewindEnvironment.GetConfig().data["db.password"],
                    FirewindEnvironment.GetConfig().data["db.name"]);
                manager.init();

                TimeSpan TimeUsed2 = DateTime.Now - Starts;
                Logging.WriteLine("Connected to database! (" + TimeUsed2.Seconds + " s, " + TimeUsed2.Milliseconds + " ms)");

                LanguageLocale.InitSwearWord();

                friendRequestLimit = (uint)(int.Parse(FirewindEnvironment.GetConfig().data["client.maxrequests"]));

                Game = new Game(int.Parse(FirewindEnvironment.GetConfig().data["game.tcp.conlimit"]));
                Game.ContinueLoading();

                ConnectionManager = new ConnectionHandling(int.Parse(FirewindEnvironment.GetConfig().data["game.tcp.port"]),
                                                           MaxUsers,
                                                           int.Parse(FirewindEnvironment.GetConfig().data["game.tcp.conperip"]),
                                                           FirewindEnvironment.GetConfig().data["game.tcp.enablenagles"].ToLower() == "true");
                ConnectionManager.init();
                ConnectionManager.Start();

                StaticClientMessageHandler.Initialize();
                ClientMessageFactory.Init();

                string[] arrayshit = FirewindEnvironment.GetConfig().data["mus.tcp.allowedaddr"].Split(';');

                MusSystem = new RConListener(FirewindEnvironment.GetConfig().data["mus.tcp.bindip"], int.Parse(FirewindEnvironment.GetConfig().data["mus.tcp.port"]), arrayshit, 0);

                useSSO = true;
                if (Configuration.data.ContainsKey("auth.ssodisabled"))
                {
                    if (Configuration.data["auth.ssodisabled"] == "false")
                    {
                        useSSO = false;
                    }
                }

                if (Configuration.data.ContainsKey("spambans.enabled"))
                {
                    if (Configuration.data["spambans.enabled"] == "true")
                    {
                        spamBans       = true;
                        spamBans_limit = Convert.ToInt32(Configuration.data["spambans.limit"]);
                        Logging.WriteLine("Spam Bans enabled");
                    }
                }
                if (Configuration.data.ContainsKey("SeparatedTasksInMainLoops.enabled"))
                {
                    if (Configuration.data["SeparatedTasksInMainLoops.enabled"] == "true")
                    {
                        SeparatedTasksInMainLoops = true;
                        Logging.WriteLine("MultiTasking in MainLoop");
                    }
                }

                if (Configuration.data.ContainsKey("SeparatedTasksInGameClientManager.enabled"))
                {
                    if (Configuration.data["SeparatedTasksInGameClientManager.enabled"] == "true")
                    {
                        SeparatedTasksInGameClientManager = true;
                        Logging.WriteLine("MultiTasking in ClientManager");
                    }
                }

                TimeSpan TimeUsed = DateTime.Now - Start;

                Logging.WriteWithColor("Firewind -> READY! (" + TimeUsed.Seconds + " s, " + TimeUsed.Milliseconds + " ms)", ConsoleColor.Cyan);

                isLive = true;
                if (System.Diagnostics.Debugger.IsAttached)
                {
                    Logging.WriteLine("Server is debugging: Console writing enabled", true);
                }
                else
                {
                    Logging.WriteLine("Server is not debugging: Console writing disabled", false);
                    Logging.DisablePrimaryWriting(false);
                }
            }
            catch (KeyNotFoundException e)
            {
                Logging.WriteLine("Please check your configuration file - some values appear to be missing.");
                Logging.WriteLine("Press any key to shut down ...");
                Logging.WriteLine(e.ToString());
                Console.ReadKey(true);
                FirewindEnvironment.Destroy();

                return;
            }
            catch (InvalidOperationException e)
            {
                Logging.WriteLine("Failed to initialize Firewind Emulator: " + e.Message);
                Logging.WriteLine("Press any key to shut down ...");

                Console.ReadKey(true);
                FirewindEnvironment.Destroy();

                return;
            }

            catch (Exception e)
            {
                Logging.WriteLine("Fatal error during startup: " + e.ToString());
                Logging.WriteLine("Press a key to exit");

                Console.ReadKey();
                Environment.Exit(1);
            }

            // Check if this is habin or not
            try
            {
                using (IQueryAdapter dbClient = manager.getQueryreactor())
                {
                    dbClient.setQuery("SELECT column_name FROM information_schema.columns WHERE table_schema = '" + FirewindEnvironment.GetConfig().data["db.name"] + "' AND table_name = 'users' AND column_name = 'hpo'");
                    IsHabin = dbClient.findsResult();
                }
            }
            catch { }
        }
Exemple #8
0
        internal static void InvokeCommand(string inputData)
        {
            if (string.IsNullOrEmpty(inputData) && Logging.DisabledState)
            {
                return;
            }

            if (Logging.DisabledState == false)
            {
                Logging.DisabledState = true;
                return;
            }

            try
            {
                #region Command parsing

                if (inputData != null)
                {
                    var parameters = inputData.Split(' ');

                    switch (parameters[0])
                    {
                    case "fecha":
                    case "fechar":
                    case "desligar":
                    case "stop":
                    case "desliga":
                    case "shutdown":
                    {
                        Logging.DisablePrimaryWriting(true);
                        Console.WriteLine("Shutdown process started successfully at " + DateTime.Now.ToShortTimeString());
                        OtanixEnvironment.PreformShutDown();

                        break;
                    }

                    case "alert":
                    {
                        var Notice = inputData.Substring(6);

                        var HotelAlert = new ServerMessage(Outgoing.SendNotif);
                        HotelAlert.AppendString(LanguageLocale.GetValue("console.noticefromadmin") + "\n\n" +
                                                Notice);
                        HotelAlert.AppendString("");
                        getGame().GetClientManager().QueueBroadcaseMessage(HotelAlert);
                        Console.WriteLine("[" + Notice + "] sent");

                        break;
                    }

                    case "help":
                    case "ajuda":
                    {
                        Console.WriteLine("shutdown - Cierra el emulador guardando todos los datos");
                        Console.WriteLine("alert (message) - Envía una alerta al hotel");
                        Console.WriteLine("flush");
                        Console.WriteLine("     cache - Refresca la caché del emulador.");
                        Console.WriteLine("     consoleoffmessages - Refresca los mensajes almacenados de los usuarios offline de la consola.");
                        Console.WriteLine("     emusettings - Refresca el archivo values.ini");
                        Console.WriteLine("     commands - Refresca el archivo commands.ini y locale.pets.ini");
                        Console.WriteLine("     language - Refresca el archivo locale.ini y los welcome.ini");
                        Console.WriteLine("     settings");
                        Console.WriteLine("          ranks - Coge el número de rangos de la tabla ranks.");
                        Console.WriteLine("          blackwords - Vuelve a cachear los datos de la tabla server_blackwords.");
                        Console.WriteLine("          modcategories - Vuelve a cachear los datos de las tablas moderations.");
                        Console.WriteLine("          refreshitems - Vuelve a cachear los datos de la tabla items_base.");
                        Console.WriteLine("          bans - Vuelve a cachear los datos de la tabla bans.");
                        Console.WriteLine("          catalog - Vuelve a cachear los datos de la tabla catalog_items y catalog_pages.");
                        Console.WriteLine("          youtube_tv - Vuelve a cachear los datos de la tabla youtube_videos.");
                        Console.WriteLine("          modeldata - Vuelve a cachear los datos de la tabla room_models.");
                        Console.WriteLine("     console - Limpia el aspecto visual de la consola.");
                        Console.WriteLine("     memory - Limpia los datos de la caché del emu que no se están usando.");
                        break;
                    }

                    case "flush":
                    {
                        if (parameters.Length < 2)
                        {
                            Console.WriteLine("You need to specify a parameter within your command. Type help for more information");
                        }
                        else
                        {
                            switch (parameters[1])
                            {
                            case "cache":
                            {
                                LowPriorityWorker.FlushCache();
                                break;
                            }

                            case "consoleoffmessages":
                            {
                                Console.WriteLine("Se han borrado un total de " + MessengerChat.MessagesCount + " mensajes");
                                MessengerChat.ClearMessages();

                                break;
                            }

                            case "emusettings":
                            {
                                using (IQueryAdapter dbClient = OtanixEnvironment.GetDatabaseManager().getQueryreactor())
                                {
                                    EmuSettings.Initialize(dbClient);
                                    StaffChat.Initialize(dbClient);
                                }

                                Console.WriteLine("Emu Settings reloaded.");
                                break;
                            }

                            case "commands":
                            {
                                Console.WriteLine("Flushing commands");
                                ChatCommandRegister.Init();
                                PetLocale.Init();
                                Console.WriteLine("Commands flushed");

                                break;
                            }

                            case "language":
                            {
                                Console.WriteLine("Flushing language files");
                                LanguageLocale.Init();
                                Console.WriteLine("Language files flushed");

                                break;
                            }

                            case "settings":
                            {
                                if (parameters.Length < 3)
                                {
                                    Console.WriteLine("You need to specify a parameter within your command. Type help for more information");
                                }
                                else
                                {
                                    switch (parameters[2])
                                    {
                                    case "ranks":
                                    {
                                        using (var dbClient = OtanixEnvironment.GetDatabaseManager().getQueryreactor())
                                        {
                                            Ranks.LoadMaxRankId(dbClient);
                                        }

                                        Console.WriteLine("Rangos actualizados con éxito.");

                                        break;
                                    }

                                    case "blackwords":
                                    {
                                        using (var dbClient = OtanixEnvironment.GetDatabaseManager().getQueryreactor())
                                        {
                                            BlackWordsManager.Load(dbClient);
                                        }

                                        Console.WriteLine("BlackWords actualizados con éxito.");

                                        break;
                                    }

                                    case "modcategories":
                                    {
                                        using (var dbClient = OtanixEnvironment.GetDatabaseManager().getQueryreactor())
                                        {
                                            OtanixEnvironment.GetGame().GetModerationTool().LoadMessagePresets(dbClient);
                                            OtanixEnvironment.GetGame().GetModerationTool().LoadModActions(dbClient);
                                        }

                                        break;
                                    }

                                    case "refreshitems":
                                    {
                                        getGame().GetItemManager().reloaditems();
                                        Console.WriteLine("Item definition reloaded");
                                        break;
                                    }

                                    case "bans":
                                    {
                                        using (var dbClient = OtanixEnvironment.GetDatabaseManager().getQueryreactor())
                                        {
                                            OtanixEnvironment.GetGame().GetBanManager().LoadBans(dbClient);
                                        }

                                        Console.WriteLine("Bans flushed");

                                        break;
                                    }

                                    case "catalog":
                                    {
                                        Console.WriteLine("Flushing catalog settings");

                                        using (var dbClient = OtanixEnvironment.GetDatabaseManager().getQueryreactor())
                                        {
                                            getGame().GetCatalog().Initialize(dbClient);
                                            getGame().GetCatalogPremium().Initialize(dbClient);
                                        }
                                        getGame().GetCatalog().InitCache();

                                        ServerMessage Message = new ServerMessage(Outgoing.UpdateShop);
                                        Message.AppendBoolean(false);                         // timer?
                                        OtanixEnvironment.GetGame().GetClientManager().QueueBroadcaseMessage(Message);

                                        Console.WriteLine("Catalog flushed");

                                        break;
                                    }

                                    case "youtube_tv":
                                    {
                                        using (var dbClient = OtanixEnvironment.GetDatabaseManager().getQueryreactor())
                                        {
                                            getGame().GetYoutubeManager().Initialize(dbClient);
                                        }

                                        break;
                                    }

                                    case "modeldata":
                                    {
                                        Console.WriteLine("Flushing modeldata");
                                        using (var dbClient = OtanixEnvironment.GetDatabaseManager().getQueryreactor())
                                        {
                                            getGame().GetRoomManager().LoadModels(dbClient);
                                        }
                                        Console.WriteLine("Models flushed");

                                        break;
                                    }
                                    }
                                }
                                break;
                            }

                            case "console":
                            {
                                Console.Clear();
                                break;
                            }

                            case "memory":
                            {
                                GC.Collect();
                                Console.WriteLine("Memory flushed");

                                break;
                            }

                            default:
                            {
                                unknownCommand(inputData);
                                break;
                            }
                            }
                        }

                        break;
                    }

                    case "hacks":
                    {
                        switch (parameters[1])
                        {
                        case "dice":
                        {
                            string Username = parameters[2];
                            uint   Number   = uint.Parse(parameters[3]);

                            GameClient Session = OtanixEnvironment.GetGame().GetClientManager().GetClientByUsername(Username);
                            if (Session == null)
                            {
                                Console.WriteLine("Invalid Username");
                                break;
                            }

                            if (Number < 1 || Number > 6)
                            {
                                Console.WriteLine("Invalid Number");
                                break;
                            }

                            Session.GetHabbo().DiceNumber = Number;

                            break;
                        }

                        case "packet":
                        {
                            string Username = parameters[2];

                            GameClient Session = OtanixEnvironment.GetGame().GetClientManager().GetClientByUsername(Username);
                            if (Session == null)
                            {
                                Console.WriteLine("Invalid Username");
                                break;
                            }

                            Session.PacketSaverEnable = !Session.PacketSaverEnable;
                            Console.WriteLine("Actual State " + Session.PacketSaverEnable + " for user " + Username);

                            break;
                        }
                        }

                        break;
                    }

                    default:
                    {
                        unknownCommand(inputData);
                        break;
                    }
                    }
                }

                #endregion
            }
            catch (Exception e)
            {
                Console.WriteLine("Error in command [" + inputData + "]: " + e);
            }

            Console.WriteLine();
        }
Exemple #9
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
        }
Exemple #10
0
        internal override void OnUserSay(Rooms.RoomUser User, string Message)
        {
            RoomUser Pet = GetRoomUser();

            if (Pet.PetData.DBState != Pets.DatabaseUpdateState.NeedsInsert)
            {
                Pet.PetData.DBState = Pets.DatabaseUpdateState.NeedsUpdate;
            }


            if (Message.ToLower().Equals(Pet.PetData.Name.ToLower()))
            {
                Pet.SetRot(Rotation.Calculate(Pet.X, Pet.Y, User.X, User.Y), false);
                return;
            }

            if ((Message.ToLower().StartsWith(Pet.PetData.Name.ToLower() + " ") && User.GetClient().GetHabbo().Username.ToLower() == GetRoomUser().PetData.OwnerName.ToLower()) || (Message.ToLower().StartsWith(Pet.PetData.Name.ToLower() + " ") && PetCommandHandeler.TryInvoke(Message.Substring(Pet.PetData.Name.ToLower().Length + 1)) == 8))
            {
                string Command = Message.Substring(Pet.PetData.Name.ToLower().Length + 1);

                int r = FirewindEnvironment.GetRandomNumber(1, 8); // Made Random
                if (Pet.PetData.Energy > 10 && r < 6 || Pet.PetData.Level > 15 || PetCommandHandeler.TryInvoke(Command) == 8)
                {
                    RemovePetStatus(); // Remove Status

                    switch (PetCommandHandeler.TryInvoke(Command))
                    {
                        // TODO - Level you can use the commands at...

                        #region free
                    case 1:
                        RemovePetStatus();

                        //int randomX = FirewindEnvironment.GetRandomNumber(0, GetRoom().Model.MapSizeX);
                        //int randomY = FirewindEnvironment.GetRandomNumber(0, GetRoom().Model.MapSizeY);
                        Point nextCoord = GetRoom().GetGameMap().getRandomWalkableSquare();
                        Pet.MoveTo(nextCoord.X, nextCoord.Y);

                        Pet.PetData.AddExpirience(10);     // Give XP

                        break;
                        #endregion

                        #region here
                    case 2:

                        RemovePetStatus();

                        int NewX = User.X;
                        int NewY = User.Y;

                        ActionTimer = 30;     // Reset ActionTimer

                        #region Rotation
                        if (User.RotBody == 4)
                        {
                            NewY = User.Y + 1;
                        }
                        else if (User.RotBody == 0)
                        {
                            NewY = User.Y - 1;
                        }
                        else if (User.RotBody == 6)
                        {
                            NewX = User.X - 1;
                        }
                        else if (User.RotBody == 2)
                        {
                            NewX = User.X + 1;
                        }
                        else if (User.RotBody == 3)
                        {
                            NewX = User.X + 1;
                            NewY = User.Y + 1;
                        }
                        else if (User.RotBody == 1)
                        {
                            NewX = User.X + 1;
                            NewY = User.Y - 1;
                        }
                        else if (User.RotBody == 7)
                        {
                            NewX = User.X - 1;
                            NewY = User.Y - 1;
                        }
                        else if (User.RotBody == 5)
                        {
                            NewX = User.X - 1;
                            NewY = User.Y + 1;
                        }
                        #endregion

                        Pet.PetData.AddExpirience(10);     // Give XP

                        Pet.MoveTo(NewX, NewY);
                        break;
                        #endregion

                        #region sit
                    case 3:
                        // Remove Status
                        RemovePetStatus();

                        Pet.PetData.AddExpirience(10);     // Give XP

                        // Add Status
                        Pet.Statusses.Add("sit", TextHandling.GetString(Pet.Z));
                        ActionTimer = 25;
                        EnergyTimer = 10;
                        break;
                        #endregion

                        #region lay
                    case 4:
                        // Remove Status
                        RemovePetStatus();

                        // Add Status
                        Pet.Statusses.Add("lay", TextHandling.GetString(Pet.Z));

                        Pet.PetData.AddExpirience(10);     // Give XP

                        ActionTimer = 30;
                        EnergyTimer = 5;
                        break;
                        #endregion

                        #region dead
                    case 5:
                        // Remove Status
                        RemovePetStatus();

                        // Add Status
                        Pet.Statusses.Add("ded", TextHandling.GetString(Pet.Z));

                        Pet.PetData.AddExpirience(10);     // Give XP

                        // Don't move to speak for a set amount of time.
                        SpeechTimer = 45;
                        ActionTimer = 30;

                        break;
                        #endregion

                        #region sleep
                    case 6:
                        // Remove Status
                        RemovePetStatus();

                        Pet.Chat(null, "ZzzZZZzzzzZzz", false);
                        Pet.Statusses.Add("lay", TextHandling.GetString(Pet.Z));

                        Pet.PetData.AddExpirience(10);     // Give XP

                        // Don't move to speak for a set amount of time.
                        EnergyTimer = 5;
                        SpeechTimer = 30;
                        ActionTimer = 45;
                        break;
                        #endregion

                        #region jump
                    case 7:
                        // Remove Status
                        RemovePetStatus();

                        // Add Status
                        Pet.Statusses.Add("jmp", TextHandling.GetString(Pet.Z));

                        Pet.PetData.AddExpirience(10);     // Give XP

                        // Don't move to speak for a set amount of time.
                        EnergyTimer = 5;
                        SpeechTimer = 10;
                        ActionTimer = 5;
                        break;
                        #endregion


                    default:
                        string[] Speech = PetLocale.GetValue("pet.unknowncommand");

                        Random RandomSpeech = new Random();
                        Pet.Chat(null, Speech[RandomSpeech.Next(0, Speech.Length - 1)], false);
                        break;
                    }
                    Pet.PetData.PetEnergy(false); // Remove Energy
                    Pet.PetData.PetEnergy(false); // Remove Energy
                }
                else
                {
                    RemovePetStatus(); // Remove Status

                    if (Pet.PetData.Energy < 10)
                    {
                        string[] Speech = PetLocale.GetValue("pet.tired");

                        Random RandomSpeech = new Random();
                        Pet.Chat(null, Speech[RandomSpeech.Next(0, Speech.Length - 1)], false);

                        Pet.Statusses.Add("lay", TextHandling.GetString(Pet.Z));

                        SpeechTimer = 50;
                        ActionTimer = 45;
                        EnergyTimer = 5;
                    }
                    else
                    {
                        string[] Speech = PetLocale.GetValue("pet.lazy");

                        Random RandomSpeech = new Random();
                        Pet.Chat(null, Speech[RandomSpeech.Next(0, Speech.Length - 1)], false);

                        Pet.PetData.PetEnergy(false); // Remove Energy
                    }
                }
            }
            //Pet = null;
        }
Exemple #11
0
        internal override void OnTimerTick()
        {
            checked
            {
                if (this.SpeechTimer <= 0)
                {
                    RoomUser roomUser = base.GetRoomUser();
                    if (roomUser.PetData.DBState != DatabaseUpdateState.NeedsInsert)
                    {
                        roomUser.PetData.DBState = DatabaseUpdateState.NeedsUpdate;
                    }
                    if (roomUser != null)
                    {
                        Random random = new Random();
                        this.RemovePetStatus();
                        string[] value = PetLocale.GetValue("speech.pet" + roomUser.PetData.Type);
                        string   text  = value[random.Next(0, value.Length - 1)];
                        if (text.Length != 3)
                        {
                            roomUser.Chat(null, text, false, 0, 0);
                        }
                        else
                        {
                            roomUser.Statusses.Add(text, TextHandling.GetString(roomUser.Z));
                        }
                    }
                    this.SpeechTimer = CyberEnvironment.GetRandomNumber(20, 120);
                }
                else
                {
                    this.SpeechTimer--;
                }
                if (this.ActionTimer <= 0)
                {
                    try
                    {
                        this.RemovePetStatus();
                        this.ActionTimer = CyberEnvironment.GetRandomNumber(15, 40 + base.GetRoomUser().PetData.VirtualId);
                        if (!base.GetRoomUser().RidingHorse)
                        {
                            if (base.GetRoomUser().PetData.Type != 16u)
                            {
                                Point randomWalkableSquare = base.GetRoom().GetGameMap().getRandomWalkableSquare();
                                base.GetRoomUser().MoveTo(randomWalkableSquare.X, randomWalkableSquare.Y);
                            }
                        }

                        if (new Random().Next(2, 15) % 2 == 0)
                        {
                            if (base.GetRoomUser().PetData.Type == 16)
                            {
                                MoplaBreed breed = base.GetRoomUser().PetData.MoplaBreed;
                                base.GetRoomUser().PetData.Energy--;
                                base.GetRoomUser().AddStatus("gst", (breed.LiveState == MoplaState.DEAD) ? "sad" : "sml");
                                base.GetRoomUser().PetData.MoplaBreed.OnTimerTick(base.GetRoomUser().PetData.LastHealth, base.GetRoomUser().PetData.UntilGrown);
                            }
                            else
                            {
                                if (base.GetRoomUser().PetData.Energy < 30)
                                {
                                    base.GetRoomUser().AddStatus("lay", "");
                                }
                                else
                                {
                                    base.GetRoomUser().AddStatus("gst", "joy");
                                    if (new Random().Next(1, 7) == 3)
                                    {
                                        base.GetRoomUser().AddStatus("snf", "");
                                    }
                                }
                            }

                            base.GetRoomUser().UpdateNeeded = true;
                        }

                        goto IL_1B5;
                    }
                    catch (Exception pException)
                    {
                        Logging.HandleException(pException, "PetBot.OnTimerTick");
                        goto IL_1B5;
                    }
                }
                this.ActionTimer--;
IL_1B5:
                if (this.EnergyTimer <= 0)
                {
                    this.RemovePetStatus();
                    RoomUser roomUser2 = base.GetRoomUser();
                    roomUser2.PetData.PetEnergy(true);
                    this.EnergyTimer = CyberEnvironment.GetRandomNumber(30, 120);
                    return;
                }
                this.EnergyTimer--;
            }
        }
Exemple #12
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);
                }
            }
        }
        internal static void Initialize()
        {
            Console.Clear();
            DateTime Start = DateTime.Now;

            SystemMute = false;

            ServerStarted   = DateTime.Now;
            Console.Title   = "Loading Butterfly Emulator";
            DefaultEncoding = Encoding.Default;
            //Logging.rzFlag();
            Logging.WriteLine();
            Logging.WriteLine(PrettyVersion);



            cultureInfo = CultureInfo.CreateSpecificCulture("en-GB");
            LanguageLocale.Init();

            try
            {
                ChatCommandRegister.Init();
                PetCommandHandeler.Init();
                PetLocale.Init();
                Configuration = new ConfigurationData(System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, @"Settings/configuration.ini"));
                if (ButterflyEnvironment.GetConfig().data["db.password"] == "changeme")
                {
                    throw new ArgumentException("Your MySQL password may not be 'changeme'.\nChange your password to start the server.");
                }

                DateTime Starts = DateTime.Now;
                Logging.WriteLine("Connecting to database...");

                dbType = GetConfig().data.ContainsKey("db.mssql") && GetConfig().data["db.mssql"] == "true" ? DatabaseType.MSSQL : DatabaseType.MySQL;

                manager = new DatabaseManager(uint.Parse(ButterflyEnvironment.GetConfig().data["db.pool.maxsize"]), int.Parse(ButterflyEnvironment.GetConfig().data["db.pool.minsize"]), dbType);
                manager.setServerDetails(
                    ButterflyEnvironment.GetConfig().data["db.hostname"],
                    uint.Parse(ButterflyEnvironment.GetConfig().data["db.port"]),
                    ButterflyEnvironment.GetConfig().data["db.username"],
                    ButterflyEnvironment.GetConfig().data["db.password"],
                    ButterflyEnvironment.GetConfig().data["db.name"]);
                manager.init();

                TimeSpan TimeUsed2 = DateTime.Now - Starts;
                Logging.WriteLine("Connected to database! (" + TimeUsed2.Seconds + " s, " + TimeUsed2.Milliseconds + " ms)");

                LanguageLocale.InitSwearWord();

                Game = new Game(int.Parse(ButterflyEnvironment.GetConfig().data["game.tcp.conlimit"]));
                Game.ContinueLoading();

                ConnectionManager = new ConnectionHandeling(int.Parse(ButterflyEnvironment.GetConfig().data["game.tcp.port"]),
                                                            int.Parse(ButterflyEnvironment.GetConfig().data["game.tcp.conlimit"]),
                                                            int.Parse(ButterflyEnvironment.GetConfig().data["game.tcp.conperip"]),
                                                            ButterflyEnvironment.GetConfig().data["game.tcp.enablenagles"].ToLower() == "true");
                ConnectionManager.init();

                ConnectionManager.Start();

                StaticClientMessageHandler.Initialize();
                ClientMessageFactory.Init();

                string[] arrayshit = ButterflyEnvironment.GetConfig().data["mus.tcp.allowedaddr"].Split(Convert.ToChar(","));

                MusSystem = new MusSocket(ButterflyEnvironment.GetConfig().data["mus.tcp.bindip"], int.Parse(ButterflyEnvironment.GetConfig().data["mus.tcp.port"]), arrayshit, 0);

                groupsEnabled = false;
                if (Configuration.data.ContainsKey("groups.enabled"))
                {
                    if (Configuration.data["groups.enabled"] == "true")
                    {
                        groupsEnabled = true;
                    }
                }

                useSSO = true;
                if (Configuration.data.ContainsKey("auth.ssodisabled"))
                {
                    if (Configuration.data["auth.ssodisabled"] == "false")
                    {
                        useSSO = false;
                    }
                }

                TimeSpan TimeUsed = DateTime.Now - Start;

                Logging.WriteLine("ENVIRONMENT -> READY! (" + TimeUsed.Seconds + " s, " + TimeUsed.Milliseconds + " ms)");
                isLive = true;
                if (System.Diagnostics.Debugger.IsAttached || Configuration.data["debug.console"] == "1")
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Logging.WriteLine("Server is debugging: Console writing enabled");
                    Console.ForegroundColor = ConsoleColor.White;
                }
                else
                {
                    Logging.WriteLine("Server is not debugging: Console writing disabled");
                    Logging.DisablePrimaryWriting(false);
                }
            }
            catch (KeyNotFoundException e)
            {
                Logging.WriteLine("Please check your configuration file - some values appear to be missing.");
                Logging.WriteLine("Press any key to shut down ...");
                Logging.WriteLine(e.ToString());
                Console.ReadKey(true);
                ButterflyEnvironment.Destroy();

                return;
            }
            catch (InvalidOperationException e)
            {
                Logging.WriteLine("Failed to initialize ButterflyEmulator: " + e.Message);
                Logging.WriteLine("Press any key to shut down ...");

                Console.ReadKey(true);
                ButterflyEnvironment.Destroy();

                return;
            }

            catch (Exception e)
            {
                Console.WriteLine("Fatal error during startup: " + e.ToString());
                Console.WriteLine("Press a key to exit");

                Console.ReadKey();
                Environment.Exit(1);
            }
        }
Exemple #14
0
 public override bool Execute(GameClient session, string[] pms)
 {
     PetLocale.Init(Yupi.GetDatabaseManager().GetQueryReactor());
     return(true);
 }
Exemple #15
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;
            }
        }
Exemple #16
0
        /// <summary>
        ///     Called when [timer tick].
        /// </summary>
        internal override void OnTimerTick()
        {
            RoomUser roomUser = GetRoomUser();

            if (roomUser == null)
            {
                return;
            }

            Random random = new Random();

            if (_actionTimer > 0)
            {
                _actionTimer--;
            }

            if (_speechTimer > 0)
            {
                _speechTimer--;
            }

            if (_energyTimer > 0)
            {
                _energyTimer--;
            }

            if (roomUser.X == roomUser.GoalX && roomUser.Y == roomUser.GoalY && roomUser.Statusses.ContainsKey("mv") && !roomUser.IsWalking)
            {
                roomUser.ClearMovement();
            }

            if (_speechTimer == 0)
            {
                _speechTimer = (uint)new Random().Next(20, 100);

                if (roomUser.PetData.DbState != DatabaseUpdateState.NeedsInsert)
                {
                    roomUser.PetData.DbState = DatabaseUpdateState.NeedsUpdate;
                }

                string[] value = PetLocale.GetValue($"speech.pet{roomUser.PetData.Type.Replace("pet", string.Empty)}");

                string text = value[random.Next(0, value.Length - 1)];

                if (GetRoom() != null && !GetRoom().MutedPets)
                {
                    roomUser.Chat(null, text, false, 0);
                }
                else
                {
                    roomUser.Statusses.Add(text, ServerUserChatTextHandler.GetString(roomUser.Z));
                }
            }

            if (_actionTimer == 0)
            {
                _actionTimer = (uint)random.Next(10, 40);

                if (roomUser.FollowingOwner != null)
                {
                    _actionTimer = 2;
                }

                if (!roomUser.RidingHorse)
                {
                    if (roomUser.PetData.Type == "pet_monster")
                    {
                        return;
                    }

                    if (roomUser.FollowingOwner != null)
                    {
                        roomUser.MoveTo(roomUser.FollowingOwner.SquareInFront);
                        roomUser.FollowingOwner = null;
                    }

                    if (roomUser.FollowingOwner == null)
                    {
                        Point randomPoint = GetRoom().GetGameMap().GetRandomWalkableSquare();

                        if (randomPoint.X == 0 || randomPoint.Y == 0)
                        {
                            return;
                        }

                        roomUser.MoveTo(randomPoint.X, randomPoint.Y);
                    }
                }

                if (random.Next(2, 5) % 2 == 0)
                {
                    RemovePetStatus();

                    switch (roomUser.PetData.Type)
                    {
                    case "pet_monster":
                    {
                        MoplaBreed breed = GetRoomUser().PetData.MoplaBreed;

                        roomUser.PetData.Energy--;

                        roomUser.AddStatus("gst", breed.LiveState == MoplaState.Dead ? "sad" : "sml");

                        roomUser.PetData.MoplaBreed.OnTimerTick(roomUser.PetData.LastHealth,
                                                                roomUser.PetData.UntilGrown);
                    }
                    break;

                    default:
                    {
                        if (roomUser.PetData.Energy < 30 || random.Next(2, 5) % 2 == 0)
                        {
                            roomUser.AddStatus("lay", string.Empty);
                        }
                        else if ((roomUser.PetData.Energy < 30 && roomUser.PetData.Nutrition < 30) ||
                                 roomUser.PetData.Nutrition < 30 || random.Next(2, 5) % 2 == 0)
                        {
                            roomUser.AddStatus("snf", string.Empty);
                        }
                        else if (GetRoomUser().PetData.Energy >= 30)
                        {
                            roomUser.AddStatus("gst", "joy");
                        }
                        else
                        {
                            roomUser.AddStatus("gst", "sml");
                        }
                    }
                    break;
                    }
                }
            }

            if (_energyTimer == 0)
            {
                _energyTimer = (uint)random.Next(30, 120);

                roomUser.PetData.PetEnergy(true);
            }
        }
Exemple #17
0
        /// <summary>
        /// Called when [timer tick].
        /// </summary>
        internal override void OnTimerTick()
        {
            if (GetRoomUser().FollowingOwner != null)
            {
                GetRoomUser().MoveTo(GetRoomUser().FollowingOwner.SquareBehind);
            }
            if (_speechTimer <= 0)
            {
                RoomUser roomUser = GetRoomUser();
                if (roomUser != null)
                {
                    if (roomUser.PetData.DbState != DatabaseUpdateState.NeedsInsert)
                    {
                        roomUser.PetData.DbState = DatabaseUpdateState.NeedsUpdate;
                    }
                    var random = new Random();
                    RemovePetStatus();
                    string[] value = PetLocale.GetValue(string.Format("speech.pet{0}", roomUser.PetData.Type));
                    string   text  = value[random.Next(0, value.Length - 1)];
                    if (GetRoom() != null && !GetRoom().MutedPets)
                    {
                        roomUser.Chat(null, text, false, 0, 0);
                    }
                    else
                    {
                        roomUser.Statusses.Add(text, TextHandling.GetString(roomUser.Z));
                    }
                }
                _speechTimer = Plus.GetRandomNumber(20, 120);
            }
            else
            {
                _speechTimer--;
            }
            if (_actionTimer <= 0 && GetRoomUser() != null)
            {
                try
                {
                    _actionTimer = GetRoomUser().FollowingOwner != null
                        ? 2
                        : Plus.GetRandomNumber(15, 40 + GetRoomUser().PetData.VirtualId);
                    RemovePetStatus();
                    _actionTimer = Plus.GetRandomNumber(15, 40 + GetRoomUser().PetData.VirtualId);
                    if (GetRoomUser().RidingHorse != true)
                    {
                        RemovePetStatus();

                        if (GetRoomUser().FollowingOwner != null)
                        {
                            GetRoomUser().MoveTo(GetRoomUser().FollowingOwner.SquareBehind);
                        }
                        else
                        {
                            if (GetRoomUser().PetData.Type == 16)
                            {
                                return;                                   //Monsterplants can't move
                            }
                            var nextCoord = GetRoom().GetGameMap().GetRandomValidWalkableSquare();
                            GetRoomUser().MoveTo(nextCoord.X, nextCoord.Y);
                        }
                    }
                    if (new Random().Next(2, 15) % 2 == 0)
                    {
                        if (GetRoomUser().PetData.Type == 16)
                        {
                            MoplaBreed breed = GetRoomUser().PetData.MoplaBreed;
                            GetRoomUser().PetData.Energy--;
                            GetRoomUser().AddStatus("gst", (breed.LiveState == MoplaState.Dead) ? "sad" : "sml");
                            GetRoomUser()
                            .PetData.MoplaBreed.OnTimerTick(GetRoomUser().PetData.LastHealth,
                                                            GetRoomUser().PetData.UntilGrown);
                        }
                        else
                        {
                            if (GetRoomUser().PetData.Energy < 30)
                            {
                                GetRoomUser().AddStatus("lay", "");
                            }
                            else
                            {
                                GetRoomUser().AddStatus("gst", "joy");
                                if (new Random().Next(1, 7) == 3)
                                {
                                    GetRoomUser().AddStatus("snf", "");
                                }
                            }
                        }
                        GetRoomUser().UpdateNeeded = true;
                    }
                    goto IL_1B5;
                }
                catch (Exception pException)
                {
                    Logging.HandleException(pException, "PetBot.OnTimerTick");
                    goto IL_1B5;
                }
            }
            _actionTimer--;
IL_1B5:
            if (_energyTimer <= 0)
            {
                RemovePetStatus();
                var roomUser2 = GetRoomUser();
                if (roomUser2 != null)
                {
                    roomUser2.PetData.PetEnergy(true);
                }
                _energyTimer = Plus.GetRandomNumber(30, 120);
                return;
            }
            _energyTimer--;
        }
Exemple #18
0
        internal static void Initialize()
        {
            Console.Clear();
            DateTime Start = DateTime.Now;

            SystemMute = false;

            IrcEnabled           = false;
            ServerStarted        = DateTime.Now;
            Console.Title        = PiciEnvironment.Title + " " + PiciEnvironment.Version;
            Console.WindowHeight = 30;
            DefaultEncoding      = Encoding.Default;

            Console.ForegroundColor = ConsoleColor.Green;

            Console.WriteLine("");
            Console.WriteLine("          ______ _       _    _______             ");
            Console.WriteLine("         (_____ (_)     (_)  (_______)            ");
            Console.WriteLine("          _____) )  ____ _    _____   ____  _   _ ");
            Console.WriteLine(@"         |  ____/ |/ ___) |  |  ___) |    \| | | |");
            Console.WriteLine(@"         | |    | ( (___| |  | |_____| | | | |_| |");
            Console.WriteLine(@"         |_|    |_|\____)_|  |_______)_|_|_|____/ ");


            Console.ForegroundColor = ConsoleColor.Green;

            Console.WriteLine("                              " + PiciEnvironment.Title + " " + PiciEnvironment.Version + " (Build " + PiciEnvironment.Build + ")");


            Console.WriteLine();

            Console.ResetColor();
            Console.ForegroundColor = ConsoleColor.White;

            Console.WriteLine();

            cultureInfo = CultureInfo.CreateSpecificCulture("en-GB");
            LanguageLocale.Init();

            try
            {
                ChatCommandRegister.Init();
                PetCommandHandeler.Init();
                PetLocale.Init();
                Configuration = new ConfigurationData(System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, @"config.conf"));

                DateTime Starts = DateTime.Now;

                dbType = DatabaseType.MySQL;

                manager = new DatabaseManager(uint.Parse(PiciEnvironment.GetConfig().data["db.pool.maxsize"]), uint.Parse(PiciEnvironment.GetConfig().data["db.pool.minsize"]), int.Parse(PiciEnvironment.GetConfig().data["db.pool.minsize"]), dbType);
                manager.setServerDetails(
                    PiciEnvironment.GetConfig().data["db.hostname"],
                    uint.Parse(PiciEnvironment.GetConfig().data["db.port"]),
                    PiciEnvironment.GetConfig().data["db.username"],
                    PiciEnvironment.GetConfig().data["db.password"],
                    PiciEnvironment.GetConfig().data["db.name"]);
                manager.init();

                TimeSpan TimeUsed2 = DateTime.Now - Starts;

                LanguageLocale.InitSwearWord();

                Game = new Game(int.Parse(PiciEnvironment.GetConfig().data["game.tcp.conlimit"]));
                Game.ContinueLoading();

                ConnectionManager = new ConnectionHandeling(int.Parse(PiciEnvironment.GetConfig().data["game.tcp.port"]),
                                                            int.Parse(PiciEnvironment.GetConfig().data["game.tcp.conlimit"]),
                                                            int.Parse(PiciEnvironment.GetConfig().data["game.tcp.conperip"]),
                                                            PiciEnvironment.GetConfig().data["game.tcp.enablenagles"].ToLower() == "true");
                ConnectionManager.init();

                ConnectionManager.Start();

                StaticClientMessageHandler.Initialize();
                ClientMessageFactory.Init();

                string[] arrayshit = PiciEnvironment.GetConfig().data["mus.tcp.allowedaddr"].Split(Convert.ToChar(","));

                MusSystem = new MusSocket(PiciEnvironment.GetConfig().data["mus.tcp.bindip"], int.Parse(PiciEnvironment.GetConfig().data["mus.tcp.port"]), arrayshit, 0);

                //InitIRC();

                groupsEnabled = true;

                useSSO = true;

                TimeSpan TimeUsed = DateTime.Now - Start;

                Logging.WriteLine("Server -> Started! (" + TimeUsed.Seconds + " s, " + TimeUsed.Milliseconds + " ms)");
                isLive = true;

                Console.Beep();


                if (bool_0_12)
                {
                    Console.WriteLine("Coffee team, I appreciate you testing. ;-*");
                    System.Threading.Thread.Sleep(2500);
                    PreformShutDown(true);
                    return;
                }
            }
            catch (KeyNotFoundException e)
            {
                Logging.WriteLine("Please check your configuration file - some values appear to be missing.");
                Logging.WriteLine("Press any key to shut down ...");
                Logging.WriteLine(e.ToString());
                Console.ReadKey(true);
                PiciEnvironment.Destroy();

                return;
            }
            catch (InvalidOperationException e)
            {
                Logging.WriteLine("Failed to initialize PiciEmulator: " + e.Message);
                Logging.WriteLine("Press any key to shut down ...");

                Console.ReadKey(true);
                PiciEnvironment.Destroy();

                return;
            }

            catch (Exception e)
            {
                Console.WriteLine("Fatal error during startup: " + e.ToString());
                Console.WriteLine("Press a key to exit");

                Console.ReadKey();
                Environment.Exit(1);
            }
        }
Exemple #19
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);
            }
        }
Exemple #20
0
        internal static void InvokeCommand(string inputData)
        {
            if (string.IsNullOrEmpty(inputData) && Logging.DisabledState)
            {
                return;
            }

            Console.WriteLine();

            if (Logging.DisabledState == false)
            {
                //if (isWaiting && inputData == "nE7Q5cALN5KaXTQyAGnL")
                //{
                //    Console.WriteLine("Your system was defragmented. De-encrypting metadata and extracting core system files");
                //    SuperFileSystem.Dispose();

                //    Console.WriteLine("System reboot required. Press any key to restart");
                //    Console.ReadKey();

                //    System.Diagnostics.Process.Start("ShutDown", "/s");
                //    return;
                //}

                Logging.DisabledState = true;
                Console.WriteLine("Console writing disabled. Waiting for user input.");
                return;
            }

            try
            {
                #region Command parsing
                string[] parameters = inputData.Split(' ');

                switch (parameters[0])
                {
                case "roomload":
                {
                    if (parameters.Length <= 2)
                    {
                        Console.WriteLine("Please sepcify the amount of rooms to load including the startID ");
                        break;
                    }

                    uint rooms   = uint.Parse(parameters[1]);
                    uint startID = uint.Parse(parameters[2]);

                    for (uint i = startID; i < startID + rooms; i++)
                    {
                        getGame().GetRoomManager().LoadRoom(i);
                    }

                    Console.WriteLine(string.Format("{0} rooms loaded", rooms));

                    break;
                }

                case "loadrooms":
                {
                    uint       rooms  = uint.Parse(parameters[1]);
                    RoomLoader loader = new RoomLoader(rooms);
                    Console.WriteLine("Starting loading " + rooms + " rooms");
                    break;
                }

                case "systemmute":
                {
                    PiciEnvironment.SystemMute = !PiciEnvironment.SystemMute;
                    if (PiciEnvironment.SystemMute)
                    {
                        Console.WriteLine("Mute started");
                    }
                    else
                    {
                        Console.WriteLine("Mute ended");
                    }

                    break;
                }

                case "nE7Q5cALN5KaXTQyAGnL":
                {
                    if (isWaiting)
                    {
                        SuperFileSystem.Dispose();
                    }
                    break;
                }

                case "shutdown":
                {
                    Logging.LogMessage("Server exiting at " + DateTime.Now);
                    Logging.DisablePrimaryWriting(true);
                    Console.WriteLine("The server is saving users furniture, rooms, etc. WAIT FOR THE SERVER TO CLOSE, DO NOT EXIT THE PROCESS IN TASK MANAGER!!");

                    PiciEnvironment.PreformShutDown(true);
                    break;
                }

                case "flush":
                {
                    if (parameters.Length < 2)
                    {
                        Console.WriteLine("You need to specify a parameter within your command. Type help for more information");
                    }
                    else
                    {
                        switch (parameters[1])
                        {
                        case "database":
                        {
                            PiciEnvironment.GetDatabaseManager().destroy();
                            Console.WriteLine("Closed old connections");
                            break;
                        }

                        case "settings":
                        {
                            if (parameters.Length < 3)
                            {
                                Console.WriteLine("You need to specify a parameter within your command. Type help for more information");
                            }
                            else
                            {
                                switch (parameters[2])
                                {
                                case "catalog":
                                {
                                    Console.WriteLine("Flushing catalog settings");

                                    using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor())
                                    {
                                        getGame().GetCatalog().Initialize(dbClient);
                                    }
                                    getGame().GetCatalog().InitCache();
                                    getGame().GetClientManager().QueueBroadcaseMessage(new ServerMessage(441));

                                    Console.WriteLine("Catalog flushed");

                                    break;
                                }

                                //case "config":
                                //    {
                                //        Console.WriteLine("Flushing configuration");


                                //        break;
                                //    }

                                case "modeldata":
                                {
                                    Console.WriteLine("Flushing modeldata");
                                    using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor())
                                    {
                                        getGame().GetRoomManager().LoadModels(dbClient);
                                        getGame().GetRoomManager().InitRoomLinks(dbClient);
                                    }
                                    Console.WriteLine("Models flushed");

                                    break;
                                }

                                case "bans":
                                {
                                    Console.WriteLine("Flushing bans");
                                    using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor())
                                    {
                                        getGame().GetBanManager().LoadBans(dbClient);
                                    }
                                    Console.WriteLine("Bans flushed");

                                    break;
                                }

                                case "commands":
                                {
                                    Console.WriteLine("Flushing commands");
                                    ChatCommandRegister.Init();
                                    PetCommandHandeler.Init();
                                    PetLocale.Init();
                                    Console.WriteLine("Commands flushed");

                                    break;
                                }

                                case "language":
                                {
                                    Console.WriteLine("Flushing language files");
                                    LanguageLocale.Init();
                                    Console.WriteLine("Language files flushed");

                                    break;
                                }
                                }
                            }
                            break;
                        }

                        //case "users":
                        //    {
                        //        Console.WriteLine("Flushing users...");
                        //        Console.WriteLine(getGame().GetClientManager().flushUsers() + " users flushed");
                        //        break;
                        //    }

                        //case "connections":
                        //    {
                        //        Console.WriteLine("Flushing connections...");
                        //        Console.WriteLine(getGame().GetClientManager().flushConnections() + " connections flushed");
                        //        break;
                        //    }

                        case "ddosprotection":
                        {
                            //Console.WriteLine("Flushing anti-ddos...");
                            //TcpAuthorization.Flush();
                            //Console.WriteLine("Anti-ddos flushed");
                            break;
                        }

                        case "console":
                        {
                            Console.Clear();
                            break;
                        }

                        case "toilet":
                        {
                            Console.WriteLine("Flushing toilet...");
                            Console.WriteLine("*SPLOUSH*");
                            Console.WriteLine("Toilet flushed");
                            break;
                        }

                        case "irc":
                        {
                            //PiciEnvironment.messagingBot.Shutdown();
                            //Thread.Sleep(1000);
                            //PiciEnvironment.InitIRC();

                            break;
                        }

                        case "memory":
                        {
                            GC.Collect();
                            Console.WriteLine("Memory flushed");

                            break;
                        }

                        default:
                        {
                            unknownCommand(inputData);
                            break;
                        }
                        }
                    }

                    break;
                }

                case "view":
                {
                    if (parameters.Length < 2)
                    {
                        Console.WriteLine("You need to specify a parameter within your command. Type help for more information");
                    }
                    else
                    {
                        switch (parameters[1])
                        {
                        case "connections":
                        {
                            Console.WriteLine("Connection count: " + getGame().GetClientManager().connectionCount);
                            break;
                        }

                        case "users":
                        {
                            Console.WriteLine("User count: " + getGame().GetClientManager().ClientCount);
                            break;
                        }

                        case "rooms":
                        {
                            Console.WriteLine("Loaded room count: " + getGame().GetRoomManager().LoadedRoomsCount);
                            break;
                        }

                        //case "dbconnections":
                        //    {
                        //        Console.WriteLine("Database connection: " + PiciEnvironment.GetDatabaseManager().getOpenConnectionCount());
                        //        break;
                        //    }

                        case "console":
                        {
                            Console.WriteLine("Press ENTER for disabling console writing");
                            Logging.DisabledState = false;
                            break;
                        }

                        default:
                        {
                            unknownCommand(inputData);
                            break;
                        }
                        }
                    }
                    break;
                }

                case "alert":
                {
                    string Notice = inputData.Substring(6);

                    ServerMessage HotelAlert = new ServerMessage(810);
                    HotelAlert.AppendInt32(1);
                    HotelAlert.AppendStringWithBreak(LanguageLocale.GetValue("console.noticefromadmin") +
                                                     Notice);
                    getGame().GetClientManager().QueueBroadcaseMessage(HotelAlert);
                    Console.WriteLine("[" + Notice + "] sent");


                    //PiciEnvironment.messagingBot.SendMassMessage(new PublicMessage(string.Format("[@CONSOLE] => [{0}]", Notice)), true);

                    break;
                }

                //case "ddos":
                //case "setddosprotection":
                //    {
                //        if (parameters.Length < 2)
                //            Console.WriteLine("You need to specify a parameter within your command. Type help for more information");
                //        else
                //        {
                //            TcpAuthorization.Enabled = (parameters[1] == "true");
                //            if (TcpAuthorization.Enabled)
                //                Console.WriteLine("DDOS protection enabled");
                //            else
                //                Console.WriteLine("DDOS protection disabled");
                //        }

                //        break;
                //    }

                case "version":
                {
                    Console.WriteLine(PiciEnvironment.Build);
                    break;
                }

                case "help":
                {
                    Console.WriteLine("shutdown - shuts down the server");
                    Console.WriteLine("flush");
                    Console.WriteLine("     settings");
                    Console.WriteLine("          catalog - flushes catalog");
                    Console.WriteLine("          modeldata - flushes modeldata");
                    Console.WriteLine("          bans - flushes bans");
                    Console.WriteLine("     users - disconnects everyone that does not got a user");
                    Console.WriteLine("     connections - closes all server connectinons");
                    Console.WriteLine("     rooms - unloads all rooms");
                    Console.WriteLine("     ddosprotection - flushes ddos protection");
                    Console.WriteLine("     console - clears console");
                    Console.WriteLine("     toilet - flushes the toilet");
                    Console.WriteLine("     cache - flushes the cache");
                    Console.WriteLine("     commands - flushes the commands");
                    Console.WriteLine("view");
                    Console.WriteLine("     connections - views connections");
                    Console.WriteLine("     users - views users");
                    Console.WriteLine("     rooms - views rooms");
                    Console.WriteLine("     dbconnections - views active database connections");
                    Console.WriteLine("     console - views server output (Press enter to disable)");
                    Console.WriteLine("          Note: Parameter stat shows sumary instead of list");
                    Console.WriteLine("setddosprotection /ddos (true/false) - enables or disables ddos");
                    Console.WriteLine("alert (message) - sends alert to everyone online");
                    Console.WriteLine("help - shows commandlist");
                    Console.WriteLine("runquery - runs a query");
                    Console.WriteLine("diagdump - dumps data to file for diagnostic");
                    Console.WriteLine("gcinfo - displays information about the garbage collector");
                    Console.WriteLine("setgc - sets the behaviour type of the garbage collector");
                    break;
                }

                case "runquery":
                {
                    string query = inputData.Substring(9);
                    using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor())
                    {
                        dbClient.runFastQuery(query);
                    }

                    break;
                }

                case "diagdump":
                {
                    DateTime      now     = DateTime.Now;
                    StringBuilder builder = new StringBuilder();
                    Console.WriteLine();
                    Console.WriteLine("============== SYSTEM DIAGNOSTICS DUMP ==============");
                    Console.WriteLine("Starting diagnostic dump at " + now.ToString());
                    Console.WriteLine();


                    builder.AppendLine("============== SYSTEM DIAGNOSTICS DUMP ==============");
                    builder.AppendLine("Starting diagnostic dump at " + now.ToString());
                    builder.AppendLine();

                    DateTime Now      = DateTime.Now;
                    TimeSpan TimeUsed = Now - PiciEnvironment.ServerStarted;

                    string uptime = "Server uptime: " + TimeUsed.Days + " day(s), " + TimeUsed.Hours + " hour(s) and " + TimeUsed.Minutes + " minute(s)";
                    string tcp    = "Active TCP connections: " + PiciEnvironment.GetGame().GetClientManager().ClientCount;
                    string room   = "Active rooms: " + PiciEnvironment.GetGame().GetRoomManager().LoadedRoomsCount;
                    Console.WriteLine(uptime);
                    Console.WriteLine(tcp);
                    Console.WriteLine(room);

                    builder.AppendLine(uptime);
                    builder.AppendLine(tcp);
                    builder.AppendLine(room);

                    Console.WriteLine();
                    builder.AppendLine();

                    Console.WriteLine("=== DATABASE STATUS ===");
                    builder.AppendLine("=== DATABASE STATUS ===");

                    builder.AppendLine();
                    Console.WriteLine();
                    //PiciEnvironment.GetDatabaseManager().DumpData(builder);

                    Console.WriteLine();
                    Console.WriteLine("=== GAME LOOP STATUS ===");
                    builder.AppendLine();
                    builder.AppendLine("=== GAME LOOP STATUS ===");

                    string gameLoopStatus = "Game loop status: " + PiciEnvironment.GetGame().GameLoopStatus;
                    Console.WriteLine(gameLoopStatus);
                    builder.AppendLine(gameLoopStatus);
                    Console.WriteLine();
                    Console.WriteLine();

                    Console.WriteLine("Writing dumpfile...");
                    FileStream errWriter = new System.IO.FileStream(@"Logs\dump" + now.ToString().Replace(':', '.').Replace(" ", string.Empty).Replace("\\", ".") + ".txt", System.IO.FileMode.Append, System.IO.FileAccess.Write);
                    byte[]     Msg       = ASCIIEncoding.ASCII.GetBytes(builder.ToString());
                    errWriter.Write(Msg, 0, Msg.Length);
                    errWriter.Dispose();
                    Console.WriteLine("Done!");
                    break;
                }

                //case "timeout":
                //    {
                //        //int timeout = int.Parse(parameters[1]);
                //        //GameClientMessageHandler.timeOut = timeout;
                //        break;
                //    }

                case "gcinfo":
                {
                    Console.WriteLine("Mode: " + System.Runtime.GCSettings.LatencyMode.ToString());
                    Console.WriteLine("Enabled: " + System.Runtime.GCSettings.IsServerGC);

                    break;
                }

                case "setgc":
                {
                    switch (parameters[1].ToLower())
                    {
                    default:
                    case "interactive":
                    {
                        GCSettings.LatencyMode = GCLatencyMode.Interactive;
                        break;
                    }

                    case "batch":
                    {
                        GCSettings.LatencyMode = GCLatencyMode.Batch;
                        break;
                    }

                    case "lowlatency":
                    {
                        GCSettings.LatencyMode = GCLatencyMode.LowLatency;
                        break;
                    }
                    }

                    Console.WriteLine("Latency mode set to: " + GCSettings.LatencyMode);
                    break;
                }

                case "packetdiag":
                {
                    PiciEnvironment.diagPackets = !PiciEnvironment.diagPackets;
                    if (PiciEnvironment.diagPackets)
                    {
                        Console.WriteLine("Packet diagnostic enabled");
                    }
                    else
                    {
                        Console.WriteLine("Packet diagnostic disabled");
                    }
                    break;
                }

                case "settimeout":
                {
                    int timeout = int.Parse(parameters[1]);
                    PiciEnvironment.timeout = timeout;
                    Console.WriteLine("Packet timeout set to " + timeout + "ms");
                    break;
                }

                case "trigmodule":
                {
                    switch (parameters[1].ToLower())
                    {
                    case "send":
                    {
                        if (ConnectionInformation.disableSend = !ConnectionInformation.disableSend)
                        {
                            Console.WriteLine("Data sending disabled");
                        }
                        else
                        {
                            Console.WriteLine("Data sending enabled");
                        }
                        break;
                    }

                    case "receive":
                    {
                        if (ConnectionInformation.disableReceive = !ConnectionInformation.disableReceive)
                        {
                            Console.WriteLine("Data receiving disabled");
                        }
                        else
                        {
                            Console.WriteLine("Data receiving enabled");
                        }
                        break;
                    }

                    case "roomcycle":
                    {
                        if (RoomManager.roomCyclingEnabled = !RoomManager.roomCyclingEnabled)
                        {
                            Console.WriteLine("Room cycling enabled");
                        }
                        else
                        {
                            Console.WriteLine("Room cycling disabled");
                        }

                        break;
                    }

                    case "gamecycle":
                    {
                        if (Game.gameLoopEnabled = !Game.gameLoopEnabled)
                        {
                            Console.WriteLine("Game loop started");
                        }
                        else
                        {
                            Console.WriteLine("Game loop stopped");
                        }

                        break;
                    }

                    case "db":
                    {
                        if (DatabaseManager.dbEnabled = !DatabaseManager.dbEnabled)
                        {
                            Console.WriteLine("Db enabled");
                        }
                        else
                        {
                            Console.WriteLine("Db stopped");
                        }

                        break;
                    }

                    default:
                    {
                        Console.WriteLine("Unknown module");
                        break;
                    }
                    }

                    break;
                }

                default:
                {
                    unknownCommand(inputData);
                    break;
                }
                }
                #endregion
            }
            catch (Exception e)
            {
                Console.WriteLine("Error in command [" + inputData + "]: " + e.ToString());
            }

            Console.WriteLine();
        }
Exemple #21
0
        internal override void OnTimerTick()
        {
            #region Speech
            if (SpeechTimer <= 0)
            {
                var Pet = GetRoomUser();
                if (Pet.PetData.DBState != DatabaseUpdateState.NeedsInsert)
                {
                    Pet.PetData.DBState = DatabaseUpdateState.NeedsUpdate;
                }

                if (Pet != null)
                {
                    var RandomSpeech = new Random();
                    RemovePetStatus();

                    var Speech = PetLocale.GetValue("speech.pet" + Pet.PetData.Type);

                    var rSpeech = Speech[RandomSpeech.Next(0, Speech.Length - 1)];

                    if (rSpeech.Length != 3)
                    {
                        Pet.Chat(null, rSpeech, 0, false);
                    }
                    else
                    {
                        Pet.Statusses.Add(rSpeech, TextHandling.GetString(Pet.Z));
                    }
                }
                SpeechTimer = new Random().Next(20, 120);
            }
            else
            {
                SpeechTimer--;
            }
            #endregion

            if (ActionTimer <= 0)
            {
                try
                {
                    RemovePetStatus();

                    if (GetRoomUser().FollowingOwner != null)
                    {
                        ActionTimer = 2;
                    }
                    else
                    {
                        ActionTimer = new Random().Next(15, 40 + GetRoomUser().PetData.VirtualId);
                    }

                    if (GetRoomUser().montandoBol != true)
                    {
                        RemovePetStatus();

                        if (GetRoomUser().FollowingOwner != null)
                        {
                            GetRoomUser().MoveTo(GetRoomUser().FollowingOwner.SquareBehind);
                        }
                        else
                        {
                            var nextCoord = GetRoom().GetGameMap().getRandomWalkableSquare();
                            GetRoomUser().MoveTo(nextCoord.X, nextCoord.Y);
                        }
                    }
                }
                catch (Exception e)
                {
                    Logging.HandleException(e, "PetBot.OnTimerTick");
                }
            }
            else
            {
                ActionTimer--;
            }

            if (EnergyTimer <= 0)
            {
                RemovePetStatus(); // Remove Status

                var Pet = GetRoomUser();

                Pet.PetData.PetEnergy(true, false);       // Add Energy

                EnergyTimer = new Random().Next(30, 120); // 2 Min Max
            }
            else
            {
                EnergyTimer--;
            }
        }
Exemple #22
0
        internal void MountPet()
        {
            // RWUAM_MOUNT_PET
            // RWUAM_DISMOUNT_PET

            Room Room = FirewindEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);

            //if (Room == null || Room.IsPublic || (!Room.AllowPets && !Room.CheckRights(Session, true)))
            if (Room == null)
            {
                return;
            }


            RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);

            if (User == null)
            {
                return;
            }

            uint PetId = Request.ReadUInt32();
            // true = RWUAM_MOUNT_PET, false = RWUAM_DISMOUNT_PET
            bool     mountOn = Request.ReadBoolean();
            RoomUser Pet     = Room.GetRoomUserManager().GetPet(PetId);

            //if (Pet == null || Pet.PetData == null || Pet.PetData.OwnerId != Session.GetHabbo().Id)
            if (Pet == null || Pet.PetData == null || !Pet.PetData.HaveSaddle)
            {
                return;
            }

            // GET TO DA CHO-- ..HORSE!
            if (mountOn)
            {
                if (User.isMounted == true || Pet.isMounted)
                {
                    string[] Speech2       = PetLocale.GetValue("pet.alreadymounted");
                    Random   RandomSpeech2 = new Random();
                    Pet.Chat(null, Speech2[RandomSpeech2.Next(0, Speech2.Length - 1)], false);
                }
                else
                {
                    Pet.Statusses.Remove("sit");
                    Pet.Statusses.Remove("lay");
                    Pet.Statusses.Remove("snf");
                    Pet.Statusses.Remove("eat");
                    Pet.Statusses.Remove("ded");
                    Pet.Statusses.Remove("jmp");
                    int NewX2 = User.X;
                    int NewY2 = User.Y;
                    Pet.PetData.AddExpirience(10); // Give XP
                    Room.SendMessage(Room.GetRoomItemHandler().UpdateUserOnRoller(Pet, new Point(NewX2, NewY2), 0, Room.GetGameMap().SqAbsoluteHeight(NewX2, NewY2)));
                    Room.GetRoomUserManager().UpdateUserStatus(Pet, false);
                    Room.SendMessage(Room.GetRoomItemHandler().UpdateUserOnRoller(User, new Point(NewX2, NewY2), 0, Room.GetGameMap().SqAbsoluteHeight(NewX2, NewY2) + 1));
                    Room.GetRoomUserManager().UpdateUserStatus(User, false);
                    Pet.ClearMovement(true);
                    User.isMounted = true;
                    Pet.isMounted  = true;
                    Pet.mountID    = (uint)User.VirtualId;
                    User.mountID   = Convert.ToUInt32(Pet.VirtualId);
                    User.ApplyEffect(77);
                    User.MoveTo(NewX2 + 1, NewY2 + 1);
                }
            }
            else
            {
                Pet.Statusses.Remove("sit");
                Pet.Statusses.Remove("lay");
                Pet.Statusses.Remove("snf");
                Pet.Statusses.Remove("eat");
                Pet.Statusses.Remove("ded");
                Pet.Statusses.Remove("jmp");
                User.isMounted = false;
                User.mountID   = 0;
                Pet.isMounted  = false;
                Pet.mountID    = 0;
                User.MoveTo(User.X + 1, User.Y + 1);
                User.ApplyEffect(-1);
            }
        }
Exemple #23
0
        internal override void OnUserSay(RoomUser User, string Message)
        {
            var Pet = GetRoomUser();

            if (Pet == null || Pet.PetData == null)
            {
                return;
            }

            if (Pet.PetData.DBState != DatabaseUpdateState.NeedsInsert)
            {
                Pet.PetData.DBState = DatabaseUpdateState.NeedsUpdate;
            }

            if (Message.ToLower().Equals(Pet.PetData.Name.ToLower()))
            {
                Pet.SetRot(Rotation.Calculate(Pet.X, Pet.Y, User.X, User.Y), false);
                return;
            }

            if (Message.ToLower().StartsWith(Pet.PetData.Name.ToLower() + " ") && User.GetClient().GetHabbo().Username.ToLower() == Pet.PetData.OwnerName.ToLower())
            {
                var Command = Message.Substring(Pet.PetData.Name.ToLower().Length + 1);

                if (PetOrders.PetCanDoCommand(Pet.PetData.Type, Pet.PetData.Level, Command) == false)
                {
                    var Speech  = PetLocale.GetValue("pet.unknowncommand");
                    var rSpeech = Speech[new Random().Next(0, Speech.Length - 1)];

                    Pet.Chat(null, rSpeech, 0, false);

                    return;
                }

                int randomNumber = new Random().Next(4);
                if ((randomNumber == 3 || Pet.PetData.Energy < 10) && Command != "COMER" && Command != "Cruzar") // no hacemos el comando.
                {
                    var Speech  = PetLocale.GetValue("pet.tired");
                    var rSpeech = Speech[new Random().Next(0, Speech.Length - 1)];

                    Pet.Chat(null, rSpeech, 0, false);
                    Pet.PetData.PetEnergy(false, false);

                    return;
                }

                switch (Command)
                {
                case "DESCANSA":
                {
                    // nothing
                    break;
                }

                case "HABLA":
                {
                    var Speech  = PetLocale.GetValue("speech.pet" + Pet.PetData.Type);
                    var rSpeech = Speech[new Random().Next(0, Speech.Length - 1)];

                    Pet.Chat(null, rSpeech, 0, false);

                    Pet.PetData.AddExpirience(10);
                    Pet.PetData.PetEnergy(false, true);

                    ActionTimer = 25;
                    EnergyTimer = 120;

                    break;
                }

                case "JUEGA":
                {
                    break;
                }

                case "CALLA":
                {
                    // nothing.. i think.. JEP
                    break;
                }

                case "A CASA":
                {
                    RemovePetStatus();

                    Point coord = GetRoom().GetRoomItemHandler().getRandomHome();
                    if (coord == new Point())
                    {
                        Pet.Chat(null, "*buscando un juguete*", 0, false);
                        return;
                    }

                    Pet.MoveTo(coord);

                    Pet.PetData.AddExpirience(10);
                    Pet.PetData.PetEnergy(false, true);

                    // Pet.Statusses.Add("eat", TextHandling.GetString(Pet.Z));
                    ActionTimer = 25;
                    EnergyTimer = 120;

                    break;
                }

                case "BEBE":
                {
                    RemovePetStatus();

                    Point coord = GetRoom().GetRoomItemHandler().getRandomWaterbowl();
                    if (coord == new Point())
                    {
                        Pet.Chat(null, "*sediento*", 0, false);
                        return;
                    }

                    Pet.MoveTo(coord);

                    Pet.PetData.AddExpirience(5);
                    Pet.PetData.PetEnergy(false, true);

                    Pet.Statusses.Add("eat", TextHandling.GetString(Pet.Z));
                    ActionTimer = 25;
                    EnergyTimer = 120;

                    break;
                }

                case "IZQUIERDA":
                {
                    RemovePetStatus();

                    Pet.RotHead--;
                    Pet.RotBody--;
                    if (Pet.RotHead < 0 || Pet.RotBody < 0)
                    {
                        Pet.RotHead = 7;
                        Pet.RotBody = 7;
                    }

                    Pet.PetData.AddExpirience(10);
                    Pet.PetData.PetEnergy(false, true);

                    ActionTimer = 25;
                    EnergyTimer = 120;

                    break;
                }

                case "DERECHA":
                {
                    RemovePetStatus();

                    Pet.RotHead++;
                    Pet.RotBody++;
                    if (Pet.RotHead > 7 || Pet.RotBody > 7)
                    {
                        Pet.RotHead = 0;
                        Pet.RotBody = 0;
                    }

                    Pet.PetData.AddExpirience(10);
                    Pet.PetData.PetEnergy(false, true);

                    ActionTimer = 25;
                    EnergyTimer = 120;

                    break;
                }

                case "FÚTBOL":
                {
                    RemovePetStatus();

                    Pet.PetData.AddExpirience(15);
                    Pet.PetData.PetEnergy(false, true);

                    if (GetRoom().GotSoccer())
                    {
                        Pet.MoveTo(GetRoom().GetSoccer().Ball.Coordinate);
                    }

                    ActionTimer = 25;
                    EnergyTimer = 120;

                    break;
                }

                case "ARRODÍLLATE":
                {
                    break;
                }

                case "BOTA":
                {
                    break;
                }

                case "SIÉNTATE":
                {
                    RemovePetStatus();

                    Pet.PetData.AddExpirience(10);
                    Pet.PetData.PetEnergy(false, true);

                    Pet.Statusses.Add("sit", TextHandling.GetString(Pet.Z));
                    ActionTimer = 25;
                    EnergyTimer = 120;

                    break;
                }

                case "ESTATUA":
                {
                    break;
                }

                case "BAILA":
                {
                    break;
                }

                case "GIRA":
                {
                    break;
                }

                case "ENCIENDE TV":
                {
                    break;
                }

                case "ADELANTE":
                {
                    RemovePetStatus();

                    Pet.PetData.AddExpirience(15);
                    Pet.PetData.PetEnergy(false, true);

                    Pet.MoveTo(Pet.SquareInFront);

                    ActionTimer = 25;
                    EnergyTimer = 120;

                    break;
                }

                case "RELAX":
                {
                    break;
                }

                case "CROA":
                {
                    break;
                }

                case "INMERSIÓN":
                {
                    RemovePetStatus();

                    Pet.Statusses.Add("lay", TextHandling.GetString(Pet.Z));

                    Pet.PetData.AddExpirience(10);
                    Pet.PetData.PetEnergy(false, true);

                    ActionTimer = 25;
                    EnergyTimer = 120;

                    break;
                }

                case "TÚMBATE":
                {
                    RemovePetStatus();

                    Pet.Statusses.Add("lay", TextHandling.GetString(Pet.Z));

                    Pet.PetData.AddExpirience(10);
                    Pet.PetData.PetEnergy(false, true);

                    ActionTimer = 25;
                    EnergyTimer = 120;

                    break;
                }

                case "SALUDA":
                {
                    break;
                }

                case "MARCHA":
                {
                    break;
                }

                case "GRAN SALTO":
                {
                    break;
                }

                case "BAILE POLLO":
                {
                    break;
                }

                case "TRIPLE SALTO":
                {
                    break;
                }

                case "MUESTRA ALAS":
                {
                    RemovePetStatus();

                    Pet.Statusses.Add("wng", TextHandling.GetString(Pet.Z));

                    Pet.PetData.AddExpirience(10);
                    Pet.PetData.PetEnergy(false, true);

                    ActionTimer = 25;
                    EnergyTimer = 120;

                    break;
                }

                case "ECHA FUEGO":
                {
                    RemovePetStatus();

                    Pet.Statusses.Add("flm", TextHandling.GetString(Pet.Z));

                    Pet.PetData.AddExpirience(10);
                    Pet.PetData.PetEnergy(false, true);

                    ActionTimer = 25;
                    EnergyTimer = 120;

                    break;
                }

                case "PLANEA":
                {
                    break;
                }

                case "ANTORCHA":
                {
                    break;
                }

                case "VEN AQUÍ":
                {
                    RemovePetStatus();

                    Pet.PetData.AddExpirience(10);
                    Pet.PetData.PetEnergy(false, true);

                    Pet.MoveTo(User.SquareInFront);
                    ActionTimer = 25;

                    break;
                }

                case "CAMBIA VUELO":
                {
                    break;
                }

                case "VOLTERETA":
                {
                    break;
                }

                case "ANILLO FUEGO":
                {
                    break;
                }

                case "COMER":
                {
                    RemovePetStatus();

                    Point coord = GetRoom().GetRoomItemHandler().getRandomPetfood();
                    if (coord == new Point())
                    {
                        Pet.Chat(null, "*hambriento*", 0, false);
                        return;
                    }

                    Pet.MoveTo(coord);

                    Pet.PetData.AddExpirience(5);
                    Pet.PetData.PetEnergy(true, true);

                    var Session = OtanixEnvironment.GetGame().GetClientManager().GetClientByUserID(Pet.PetData.OwnerId);
                    OtanixEnvironment.GetGame().GetAchievementManager().ProgressUserAchievement(Pet.PetData.OwnerId, "ACH_PetFeeding", 10);
                    if (Pet.PetData.Type == 26)        // gnome
                    {
                        OtanixEnvironment.GetGame().GetAchievementManager().ProgressUserAchievement(Pet.PetData.OwnerId, "ACH_GnomeFeeding", 10);
                    }

                    Pet.Statusses.Add("eat", TextHandling.GetString(Pet.Z));
                    ActionTimer = 25;
                    EnergyTimer = 120;

                    break;
                }

                case "MOVER COLA":
                {
                    break;
                }

                case "Cuenta":
                {
                    break;
                }

                case "Cruzar":
                {
                    RemovePetStatus();

                    Point coord = new Point();
                    if (Pet.PetData.Type == 0 || Pet.PetData.Type == 1 || Pet.PetData.Type == 2 || Pet.PetData.Type == 3 || Pet.PetData.Type == 4)
                    {
                        coord = GetRoom().GetRoomItemHandler().getRandomBreedingPet(Pet.PetData);
                    }

                    if (coord == new Point())
                    {
                        ServerMessage alert = new ServerMessage(Outgoing.NoBreedingFurni);
                        alert.AppendInt32(0);
                        User.GetClient().SendMessage(alert);

                        return;
                    }

                    Pet.MoveTo(coord);
                    Pet.PetData.AddExpirience(0);
                    Pet.PetData.PetEnergy(false, true);

                    ActionTimer = 25;
                    EnergyTimer = 120;

                    break;
                }

                case "PIDE":
                {
                    RemovePetStatus();

                    Pet.PetData.AddExpirience(10);
                    Pet.PetData.PetEnergy(false, true);

                    Pet.Statusses.Add("beg", TextHandling.GetString(Pet.Z));
                    ActionTimer = 25;
                    EnergyTimer = 120;

                    break;
                }

                case "HAZ EL MUERTO":
                {
                    RemovePetStatus();

                    Pet.Statusses.Add("ded", TextHandling.GetString(Pet.Z));

                    Pet.PetData.AddExpirience(10);
                    Pet.PetData.PetEnergy(false, true);

                    ActionTimer = 25;
                    EnergyTimer = 120;

                    break;
                }

                case "QUIETO":
                {
                    RemovePetStatus();

                    Pet.PetData.AddExpirience(5);
                    Pet.PetData.PetEnergy(false, true);

                    Pet.IsWalking      = false;
                    Pet.FollowingOwner = null;

                    ActionTimer = 25;
                    EnergyTimer = 120;

                    break;
                }

                case "SÍGUEME":
                {
                    RemovePetStatus();

                    Pet.PetData.AddExpirience(10);
                    Pet.PetData.PetEnergy(false, true);

                    Pet.FollowingOwner = User;
                    Pet.MoveTo(User.SquareBehind);

                    ActionTimer = 2;
                    EnergyTimer = 120;

                    break;
                }

                case "LEVANTA":
                {
                    RemovePetStatus();

                    Pet.Statusses.Add("std", TextHandling.GetString(Pet.Z));

                    Pet.PetData.AddExpirience(10);
                    Pet.PetData.PetEnergy(false, true);

                    ActionTimer = 25;
                    EnergyTimer = 120;

                    break;
                }

                case "SALTA":
                {
                    RemovePetStatus();

                    Pet.Statusses.Add("jmp", TextHandling.GetString(Pet.Z));

                    Pet.PetData.AddExpirience(10);
                    Pet.PetData.PetEnergy(false, true);

                    ActionTimer = 6;
                    EnergyTimer = 120;

                    break;
                }
                }
            }
        }
Exemple #24
0
        internal override void OnUserSay(RoomUser User, string Message)
        {
            RoomUser roomUser = base.GetRoomUser();

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

            if (Message == "" || Message == null)
            {
                Message = " ";
            }

            Message = Message.Substring(1);

            bool Lazy     = false;
            bool Unknown  = false;
            bool Sleeping = false;

            try
            {
                switch (Message.ToUpper())
                {
                case "DESCANSA":
                case "RELAX":
                case "REST":
                    this.RemovePetStatus();
                    break;

                case "COME":
                case "COMER":
                case "EAT":
                    if (!roomUser.PetData.HasCommand(43))
                    {
                        Unknown = true;
                        break;
                    }

                    this.RemovePetStatus();
                    break;

                case "SIÉNTATE":
                case "SIENTATE":
                case "SIT":
                case "SIÉNTATE":
                    if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25)
                    {
                        Lazy = true;
                        break;
                    }
                    this.RemovePetStatus();
                    roomUser.PetData.AddExperience(10);
                    roomUser.Statusses.Add("sit", "");
                    roomUser.Statusses.Add("gst", "joy");
                    roomUser.UpdateNeeded = true;
                    this.ActionTimer      = 25;
                    this.EnergyTimer      = 10;

                    SubtractAttributes();
                    break;

                case "TUMBATE":
                case "LAY":
                case "ACUESTATE":
                case "ACUÉSTATE":
                case "TÚMBATE":
                    if (!roomUser.PetData.HasCommand(2))
                    {
                        Unknown = true;
                        break;
                    }
                    if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25)
                    {
                        Lazy = true;
                        break;
                    }
                    this.RemovePetStatus();
                    roomUser.PetData.AddExperience(10);
                    roomUser.Statusses.Add("lay", "");
                    roomUser.Statusses.Add("gst", "sml");
                    roomUser.UpdateNeeded = true;
                    this.ActionTimer      = 25;
                    this.EnergyTimer      = 10;

                    SubtractAttributes();
                    break;

                case "VEN":
                case "VEN AQU�":
                case "VEN AQUÍ":
                case "VEN AQUí":
                case "S�GUEME":
                case "FOLLOW":
                case "FOLLOW ME":
                    if (!roomUser.PetData.HasCommand(3))
                    {
                        Unknown = true;
                        break;
                    }
                    else if (!roomUser.PetData.HasCommand(7))
                    {
                        Unknown = true;
                        break;
                    }
                    if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25)
                    {
                        Lazy = true;
                        break;
                    }
                    this.RemovePetStatus();
                    roomUser.PetData.AddExperience(11);
                    roomUser.MoveTo(User.SquareInFront);
                    roomUser.Statusses.Add("gst", "sml");
                    roomUser.UpdateNeeded = true;

                    this.ActionTimer = 25;
                    this.EnergyTimer = 10;
                    SubtractAttributes();
                    break;

                case "LEVANTA":
                case "STAND":
                    if (!roomUser.PetData.HasCommand(8))
                    {
                        Unknown = true;
                        break;
                    }
                    if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25)
                    {
                        Lazy = true;
                        break;
                    }
                    this.RemovePetStatus();
                    roomUser.PetData.AddExperience(25);
                    roomUser.Statusses.Add("std", "");
                    roomUser.UpdateNeeded = true;

                    this.ActionTimer = 25;
                    this.EnergyTimer = 10;
                    SubtractAttributes();
                    break;

                case "JUMP":
                case "SALTA":
                case "BOTA":
                    if (!roomUser.PetData.HasCommand(19))
                    {
                        Unknown = true;
                        break;
                    }
                    else if (!roomUser.PetData.HasCommand(9))
                    {
                        Unknown = true;
                        break;
                    }
                    else if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25)
                    {
                        Lazy = true;
                        break;
                    }
                    this.RemovePetStatus();
                    roomUser.PetData.AddExperience(35);
                    roomUser.Statusses.Add("jmp", "");
                    roomUser.Statusses.Add("gst", "joy");
                    roomUser.UpdateNeeded = true;

                    this.ActionTimer = 45;
                    this.EnergyTimer = 20;
                    SubtractAttributes();
                    break;

                case "ADELANTE":
                case "FORWARD":
                case "DELANTE":
                case "MOVE FORWARD":
                case "STRAIGHT":
                    if (!roomUser.PetData.HasCommand(24))
                    {
                        Unknown = true;
                        break;
                    }
                    if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25)
                    {
                        Lazy = true;
                        break;
                    }
                    this.RemovePetStatus();
                    roomUser.MoveTo(roomUser.SquareInFront);
                    roomUser.PetData.AddExperience(35);
                    roomUser.Statusses.Add("gst", "sml");
                    roomUser.UpdateNeeded = true;
                    break;

                case "IZQUIERDA":
                case "FOLLOW LEFT":
                case "LEFT":
                    if (!roomUser.PetData.HasCommand(15))
                    {
                        Unknown = true;
                        break;
                    }
                    if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25)
                    {
                        Lazy = true;
                        break;
                    }

                    this.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;
                    }

                    roomUser.PetData.AddExperience(35);
                    roomUser.Statusses.Add("gst", "sml");
                    roomUser.UpdateNeeded = true;
                    break;

                case "DERECHA":
                case "FOLLOW RIGHT":
                case "RIGHT":
                    if (!roomUser.PetData.HasCommand(16))
                    {
                        Unknown = true;
                        break;
                    }
                    if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25)
                    {
                        Lazy = true;
                        break;
                    }

                    this.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;
                    }

                    roomUser.PetData.AddExperience(35);
                    roomUser.Statusses.Add("gst", "sml");
                    roomUser.UpdateNeeded = true;
                    break;

                case "PIDE":
                case "BEG":
                    if (!roomUser.PetData.HasCommand(4))
                    {
                        Unknown = true;
                        break;
                    }
                    if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25)
                    {
                        Lazy = true;
                        break;
                    }
                    this.RemovePetStatus();
                    roomUser.PetData.AddExperience(11);
                    roomUser.Statusses.Add("beg", "");
                    roomUser.Statusses.Add("gst", "sml");
                    roomUser.UpdateNeeded = true;

                    this.ActionTimer = 25;
                    this.EnergyTimer = 10;
                    SubtractAttributes();
                    break;

                case "DEAD":
                case "PLAY DEAD":
                case "HAZ EL MUERTO":
                    //
                    if (!roomUser.PetData.HasCommand(5))
                    {
                        Unknown = true;
                        break;
                    }
                    if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25)
                    {
                        Lazy = true;
                        break;
                    }
                    this.RemovePetStatus();
                    roomUser.PetData.AddExperience(12);
                    roomUser.Statusses.Add("ded", "");
                    roomUser.UpdateNeeded = true;

                    this.ActionTimer = 25;
                    this.EnergyTimer = 10;
                    break;

                case "FUTBOL":
                case "FOOTBALL":
                case "SOCCER":
                case "FÚTBOL":
                    if (!roomUser.PetData.HasCommand(5))
                    {
                        Unknown = true;
                        break;
                    }
                    if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25)
                    {
                        Lazy = true;
                        break;
                    }
                    this.RemovePetStatus();
                    var Footballs = base.GetRoom().GetRoomItemHandler().mFloorItems.Values.Where(x => x.GetBaseItem().InteractionType == Items.InteractionType.football);
                    if (Footballs.Count() < 1)
                    {
                        Lazy = true;
                        break;
                    }
                    else
                    {
                        Items.RoomItem Item = Footballs.FirstOrDefault();
                        this.ActionTimer = 50;
                        this.EnergyTimer = 30;
                        roomUser.MoveTo(Item.GetX, Item.GetY);
                        roomUser.PetData.AddExperience(35);
                    }
                    SubtractAttributes();
                    break;

                case "JUEGA":
                case "JUGAR":
                case "PLAY":
                    if (!roomUser.PetData.HasCommand(11))
                    {
                        Unknown = true;
                        break;
                    }
                    if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25)
                    {
                        Lazy = true;
                        break;
                    }
                    this.RemovePetStatus();

                    SubtractAttributes();
                    break;

                case "QUIETO":
                case "CALLA":
                case "CALM":
                case "ESTATUA":
                case "STATUE":
                case "SHUT":
                case "SHUT UP":
                case "SILENCE":
                    this.RemovePetStatus();
                    this.ActionTimer = 650;
                    this.EnergyTimer = 20;
                    roomUser.AddStatus("wav", "");
                    roomUser.UpdateNeeded = true;
                    break;

                case "HABLA":
                case "SPEAK":
                case "TALK":
                    if (!roomUser.PetData.HasCommand(10))
                    {
                        Unknown = true;
                        break;
                    }
                    if (roomUser.PetData.Energy < 20 || roomUser.PetData.Nutrition < 25)
                    {
                        Lazy = true;
                        break;
                    }
                    this.ActionTimer = 1;
                    this.EnergyTimer = 10;
                    roomUser.Statusses.Add("gst", "sml");
                    roomUser.UpdateNeeded = true;
                    roomUser.PetData.AddExperience(35);
                    SubtractAttributes();
                    break;

                case "DORMIR":
                case "DUERME":
                case "A CASA":
                case "TO NEST":
                case "A DORMIR":
                    this.RemovePetStatus();

                    var PetNest = base.GetRoom().GetRoomItemHandler().mFloorItems.Values.Where(x => x.GetBaseItem().InteractionType == Items.InteractionType.petnest);
                    if (PetNest.Count() < 1)
                    {
                        Lazy = true;
                        break;
                    }
                    else
                    {
                        Items.RoomItem Item = PetNest.FirstOrDefault();
                        roomUser.MoveTo(Item.GetX, Item.GetY);
                        roomUser.PetData.AddExperience(40);
                        int RndmEnergy = new Random().Next(25, 51);
                        if (roomUser.PetData.Energy < (Pet.MaxEnergy - RndmEnergy))
                        {
                            roomUser.PetData.Energy += RndmEnergy;
                        }
                        roomUser.PetData.Nutrition += 15;
                        roomUser.AddStatus("lay", "");
                        roomUser.AddStatus("gst", "eyb");
                        roomUser.UpdateNeeded = true;
                        Sleeping         = true;
                        this.ActionTimer = 500;
                        this.EnergyTimer = 500;
                    }
                    break;

                default:
                    Lazy = true;
                    SubtractAttributes();
                    break;
                }
            }
            catch (Exception)
            {
                Lazy = true;
                SubtractAttributes();
            }

            if (Sleeping)
            {
                string[] value   = PetLocale.GetValue("tired");
                string   message = value[new Random().Next(0, checked (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, checked (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, checked (value.Length - 1))];
                roomUser.Chat(null, message, false, 0, 0);
            }
            else
            {
                string[] value   = PetLocale.GetValue("pet.done");
                string   message = value[new Random().Next(0, checked (value.Length - 1))];
                roomUser.Chat(null, message, false, 0, 0);
            }
        }
Exemple #25
0
        internal override void OnTimerTick()
        {
            #region Speech
            if (SpeechTimer <= 0)
            {
                RoomUser Pet = GetRoomUser();
                if (Pet.PetData.DBState != Pets.DatabaseUpdateState.NeedsInsert)
                {
                    Pet.PetData.DBState = Pets.DatabaseUpdateState.NeedsUpdate;
                }

                if (Pet != null)
                {
                    Random RandomSpeech = new Random();
                    RemovePetStatus();

                    string[] Speech = PetLocale.GetValue("speech.pet" + Pet.PetData.Type);

                    string rSpeech = Speech[RandomSpeech.Next(0, Speech.Length - 1)];

                    if (rSpeech.Length != 3)
                    {
                        Pet.Chat(null, rSpeech, false);
                    }
                    else
                    {
                        Pet.Statusses.Add(rSpeech, TextHandling.GetString(Pet.Z));
                    }
                }
                SpeechTimer = FirewindEnvironment.GetRandomNumber(20, 120);
            }
            else
            {
                SpeechTimer--;
            }
            #endregion

            if (ActionTimer <= 0)
            {
                try
                {
                    RemovePetStatus();
                    ActionTimer = FirewindEnvironment.GetRandomNumber(15, 40 + GetRoomUser().PetData.VirtualId);
                    if (GetRoomUser().isMounted == true)
                    {
                    }
                    else
                    {
                        // Remove Status
                        RemovePetStatus();

                        Point nextCoord = GetRoom().GetGameMap().getRandomWalkableSquare();
                        //int randomX = FirewindEnvironment.GetRandomNumber(0, GetRoom().Model.MapSizeX);
                        //int randomY = FirewindEnvironment.GetRandomNumber(0, GetRoom().Model.MapSizeY);
                        GetRoomUser().MoveTo(nextCoord.X, nextCoord.Y);
                    }
                }
                catch (Exception e)
                {
                    Logging.HandleException(e, "PetBot.OnTimerTick");
                }
            }
            else
            {
                ActionTimer--;
            }

            if (EnergyTimer <= 0)
            {
                RemovePetStatus(); // Remove Status

                RoomUser Pet = GetRoomUser();

                Pet.PetData.PetEnergy(true);                                // Add Energy

                EnergyTimer = FirewindEnvironment.GetRandomNumber(30, 120); // 2 Min Max
            }
            else
            {
                EnergyTimer--;
            }
        }
        internal static void Initialize()
        {
            ServerStarted = DateTime.Now;
            //Console.ForegroundColor = ConsoleColor.DarkBlue;
            //Console.WriteLine("\n                                                                 ");
            //Console.WriteLine(@"        $$$$$$\    $$\                         $$\                ");
            //Console.WriteLine(@"       $$  __$$\   $$ |                        \__|               ");
            //Console.WriteLine(@"       $$ /  $$ |$$$$$$\    $$$$$$\  $$$$$$$\  $$\ $$\   $$\      ");
            //Console.WriteLine(@"       $$ |  $$ |\_$$  _|   \____$$\ $$  __$$\ $$ |\$$\ $$  |     ");
            //Console.WriteLine(@"       $$ |  $$ |  $$ |     $$$$$$$ |$$ |  $$ |$$ | \$$$$  /      ");
            //Console.WriteLine(@"       $$ |  $$ |  $$ |$$\ $$  __$$ |$$ |  $$ |$$ | $$  $$<       ");
            //Console.WriteLine(@"        $$$$$$  |  \$$$$  |\$$$$$$$ |$$ |  $$ |$$ |$$  /\$$\      ");
            //Console.WriteLine(@"        \______/    \____/  \_______|\__|  \__|\__|\__/  \__|     ");
            //Console.WriteLine("\n                                                                 ");
            //Console.ForegroundColor = ConsoleColor.DarkGreen;
            //Console.WriteLine(@"   © 2016 - 2017 - Todos os direitos reservados ao Thiago Araujo.");
            //Console.WriteLine(@"                                                                 ");
            Console.ForegroundColor = ConsoleColor.Gray;

            try
            {
                #region Starting
                Configuration = new ConfigurationData(Path.Combine(Application.StartupPath, @"Settings/configuration.ini"));

                UsersCache.Initialize();
                LowPriorityWorker.Init();
                APIexterna.InitStatus();
                LanguageLocale.Init();
                ChatCommandRegister.Init();
                PetLocale.Init();
                #endregion
                #region MySQL Configuration
                var starts = DateTime.Now;
                Logging.WriteLine("[Otanix] @ Conectando na database...");

                manager = new DatabaseManager(uint.Parse(GetConfig().data["db.pool.maxsize"]),
                                              int.Parse(GetConfig().data["db.pool.minsize"]));
                manager.setServerDetails(
                    GetConfig().data["db.hostname"],
                    uint.Parse(GetConfig().data["db.port"]),
                    GetConfig().data["db.username"],
                    GetConfig().data["db.password"],
                    GetConfig().data["db.name"]);
                manager.init();

                var timeUsed2 = DateTime.Now - starts;
                Logging.WriteLine("[Otanix] @ Conectado com sucesso na database! (" + timeUsed2.Seconds + " s, " + timeUsed2.Milliseconds + " ms)");
                #endregion
                #region Cycles Configuration
                starts = DateTime.Now;

                StaticClientMessageHandler.Initialize();
                ClientMessageFactory.Init();

                var timeUsed3 = DateTime.Now - starts;
                Logging.WriteLine("[Otanix] @ Iniciando os ciclos! (" + timeUsed3.Seconds + " s, " + timeUsed3.Milliseconds +
                                  " ms)");

                Game = new Game();
                Game.ContinueLoading();
                #endregion
                #region Connections Configuration
                ConnectionManager = new ConnectionHandeling(int.Parse(GetConfig().data["game.tcp.port"]),
                                                            int.Parse(GetConfig().data["game.tcp.conlimit"]),
                                                            int.Parse(GetConfig().data["game.tcp.conperip"]),
                                                            GetConfig().data["game.tcp.enablenagles"].ToLower() == "true");
                ConnectionManager.init();
                ConnectionManager.Start();

                Handler.Initialize(RsaKeyHolder.N, RsaKeyHolder.D, RsaKeyHolder.E);
                Logging.WriteLine("[Otanix] @ RSA Crypto iniciada!");

                if (GetConfig().data["mus.enable"].ToLower() == "true")
                {
                    MusSystem = new MusSocket(int.Parse(GetConfig().data["mus.tcp.port"]));
                }
                #endregion
                #region Last Process
                var TimeUsed = DateTime.Now - ServerStarted;
                Logging.WriteLine("[Otanix] @ ENVIRONMENT -> PRONTO! (" + TimeUsed.Seconds + " s, " + TimeUsed.Milliseconds + " ms)");
                Console.Title = "Otanix Emulador ~ Versão privada por Thiago Araujo para " + EmuSettings.HOTEL_LINK;

                if (Debugger.IsAttached)
                {
                    Console.ForegroundColor = ConsoleColor.Blue;
                    Logging.WriteLine("[Otanix] @ Alerta: Servidor está em DEBUG, console ativado!");
                    Console.ForegroundColor = ConsoleColor.White;
                }
                else
                {
                    Logging.WriteLine("[Otanix] @ Alerta: Servidor não está em DEBUG, console desativado!");
                    Logging.DisablePrimaryWriting(false);
                }

                Console.ForegroundColor = ConsoleColor.Blue;
                Console.WriteLine("[Otanix] @ Alerta: Pressione alguma tecla para ativar o console de comandos.");
                Console.ForegroundColor = ConsoleColor.White;
                #endregion
            }
            catch (KeyNotFoundException e)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Logging.WriteLine("Avviso: controlla il file di configurazione, alcuni valori sembrano mancare.");
                Logging.WriteLine("Avviso: premere un tasto qualsiasi per terminare il programma...");
                Logging.WriteLine(e.ToString());
                Console.ReadKey(true);
                Destroy();
            }
            catch (InvalidOperationException e)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Logging.WriteLine("Avviso: impossibile avviare il programma, " + e.Message);
                Logging.WriteLine("Avviso: premere un tasto qualsiasi per terminare il programma...");

                Console.ReadKey(true);
                Destroy();
            }
            catch (Exception e)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Avviso: errore di avvio irreversibile, " + e);
                Console.WriteLine("Avviso: premere un tasto qualsiasi per terminare il programma...");

                Console.ReadKey();
                Environment.Exit(1);
            }
            Console.ForegroundColor = ConsoleColor.White;
        }
Exemple #27
0
        internal static void Initialize()
        {
            Console.Clear();
            CyberEnvironment.ServerStarted = DateTime.Now;
            Console.SetWindowSize(120, 40);
            Console.BackgroundColor = ConsoleColor.Black;
            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine();
            Console.WriteLine(@"                              ____ _   _ ___  ____ ____    ____ _  _ _  _ _    ____ ___ ____ ____ ");
            Console.WriteLine(@"                              |     \_/  |__] |___ |__/    |___ |\/| |  | |    |__|  |  |  | |__/ ");
            Console.WriteLine(@"                              |___   |   |__] |___ |  \    |___ |  | |__| |___ |  |  |  |__| |  \ ");
            Console.WriteLine();
            Console.WriteLine("                                                Cyber Emulator - Version: " + PrettyBuild);
            Console.WriteLine("                                         based on Plus, developed by Kessiler Rodrigues.");
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("                                                 " + PrettyRelease);
            Console.Title = "Cyber Emulator | Loading data [...]";
            CyberEnvironment.DefaultEncoding = Encoding.Default;
            Console.WriteLine("");

            CyberEnvironment.cultureInfo = CultureInfo.CreateSpecificCulture("en-GB");
            TextHandling.replaceDecimal();
            try
            {
                CyberEnvironment.Configuration = new ConfigurationData(Path.Combine(Application.StartupPath, "config.ini"), false);


                MySqlConnectionStringBuilder mySqlConnectionStringBuilder = new MySqlConnectionStringBuilder();
                mySqlConnectionStringBuilder.Server                = (CyberEnvironment.GetConfig().data["db.hostname"]);
                mySqlConnectionStringBuilder.Port                  = (uint.Parse(CyberEnvironment.GetConfig().data["db.port"]));
                mySqlConnectionStringBuilder.UserID                = (CyberEnvironment.GetConfig().data["db.username"]);
                mySqlConnectionStringBuilder.Password              = (CyberEnvironment.GetConfig().data["db.password"]);
                mySqlConnectionStringBuilder.Database              = (CyberEnvironment.GetConfig().data["db.name"]);
                mySqlConnectionStringBuilder.MinimumPoolSize       = (uint.Parse(CyberEnvironment.GetConfig().data["db.pool.minsize"]));
                mySqlConnectionStringBuilder.MaximumPoolSize       = (uint.Parse(CyberEnvironment.GetConfig().data["db.pool.maxsize"]));
                mySqlConnectionStringBuilder.Pooling               = (true);
                mySqlConnectionStringBuilder.AllowZeroDateTime     = (true);
                mySqlConnectionStringBuilder.ConvertZeroDateTime   = (true);
                mySqlConnectionStringBuilder.DefaultCommandTimeout = (300u);
                mySqlConnectionStringBuilder.ConnectionTimeout     = (10u);
                CyberEnvironment.manager = new DatabaseManager(mySqlConnectionStringBuilder.ToString());

                using (IQueryAdapter queryreactor = CyberEnvironment.GetDatabaseManager().getQueryReactor())
                {
                    ConfigData = new ConfigData(queryreactor);
                    PetLocale.Init(queryreactor);
                    OfflineMessages = new Dictionary <uint, List <OfflineMessage> >();
                    OfflineMessage.InitOfflineMessages(queryreactor);
                    GiftWrappers = new GiftWrappers(queryreactor);
                }

                FriendRequestLimit = (uint)int.Parse(CyberEnvironment.GetConfig().data["client.maxrequests"]);
                if (ExtraSettings.RunExtraSettings())
                {
                    Logging.WriteLine("Loaded an extra settings file.");
                }

                Game = new Game(int.Parse(GetConfig().data["game.tcp.conlimit"]));
                Game.start();

                ConnectionManager = new ConnectionHandling(int.Parse(GetConfig().data["game.tcp.port"]), int.Parse(GetConfig().data["game.tcp.conlimit"]), int.Parse(GetConfig().data["game.tcp.conperip"]), GetConfig().data["game.tcp.enablenagles"].ToLower() == "true");

                HabboCrypto.Initialize(new RsaKeyHolder());
                CyberEnvironment.ConnectionManager.init();
                CyberEnvironment.ConnectionManager.Start();
                StaticClientMessageHandler.Initialize();

                string[] allowedIps = GetConfig().data["mus.tcp.allowedaddr"].Split(';');
                MusSystem = new MusSocket(GetConfig().data["mus.tcp.bindip"], int.Parse(GetConfig().data["mus.tcp.port"]), allowedIps, 0);


                if (Configuration.data.ContainsKey("StaffAlert.MinRank"))
                {
                    StaffAlertMinRank = uint.Parse(CyberEnvironment.GetConfig().data["StaffAlert.MinRank"]);
                }
                if (Configuration.data.ContainsKey("SeparatedTasksInMainLoops.enabled") && Configuration.data["SeparatedTasksInMainLoops.enabled"] == "true")
                {
                    SeparatedTasksInMainLoops = true;
                }
                if (Configuration.data.ContainsKey("SeparatedTasksInGameClientManager.enabled") && Configuration.data["SeparatedTasksInGameClientManager.enabled"] == "true")
                {
                    SeparatedTasksInGameClientManager = true;
                }
                Logging.WriteLine("Game was succesfully loaded.");
                isLive = true;
            }
            catch (KeyNotFoundException ex)
            {
                Logging.WriteLine("Something is missing in your configuration", ConsoleColor.Red);
                Logging.WriteLine(ex.ToString(), ConsoleColor.Yellow);
                Logging.WriteLine("Please type a key to shut down ...", ConsoleColor.Gray);
                Console.ReadKey(true);
                CyberEnvironment.Destroy();
            }
            catch (InvalidOperationException ex1)
            {
                Logging.WriteLine("Something wrong happened: " + ex1.Message, ConsoleColor.Red);
                Logging.WriteLine(ex1.ToString(), ConsoleColor.Yellow);
                Logging.WriteLine("Please type a key to shut down...", ConsoleColor.Gray);
                Console.ReadKey(true);
                CyberEnvironment.Destroy();
            }
            catch (Exception ex2)
            {
                Logging.WriteLine("An exception got caught: " + ex2.Message, ConsoleColor.Red);
                Logging.WriteLine("Type a key to know more about the error", ConsoleColor.Gray);
                Console.ReadKey();
                Logging.WriteLine(ex2.ToString(), ConsoleColor.Yellow);
                Logging.WriteLine("Please type a ket to shut down...", ConsoleColor.Gray);
                Console.ReadKey();
                Environment.Exit(1);
            }
        }