Ejemplo n.º 1
0
        internal static void InvokeCommand(string inputData)
        {
            if (string.IsNullOrEmpty(inputData) && Logging.DisabledState)
            {
                return;
            }

            Console.WriteLine();

            if (Logging.DisabledState == false)
            {
                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":
                {
                    ButterflyEnvironment.SystemMute = !ButterflyEnvironment.SystemMute;
                    if (ButterflyEnvironment.SystemMute)
                    {
                        Console.WriteLine("Mute started");
                    }
                    else
                    {
                        Console.WriteLine("Mute ended");
                    }

                    break;
                }

                case "stop":
                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!!");

                    ButterflyEnvironment.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":
                        {
                            ButterflyEnvironment.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 = ButterflyEnvironment.GetDatabaseManager().getQueryreactor())
                                    {
                                        getGame().GetCatalog().Initialize(dbClient);
                                    }
                                    getGame().GetCatalog().InitCache();
                                    getGame().GetClientManager().QueueBroadcaseMessage(new ServerMessage(441));

                                    Console.WriteLine("Catalog flushed");

                                    break;
                                }


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

                                    break;
                                }

                                case "bans":
                                {
                                    Console.WriteLine("Flushing bans");
                                    using (IQueryAdapter dbClient = ButterflyEnvironment.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 "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: " + ButterflyEnvironment.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.AppendUInt(1);
                    HotelAlert.AppendStringWithBreak(LanguageLocale.GetValue("console.noticefromadmin") +
                                                     Notice);
                    getGame().GetClientManager().QueueBroadcaseMessage(HotelAlert);
                    Console.WriteLine("[" + Notice + "] sent");


                    //ButterflyEnvironment.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(ButterflyEnvironment.PrettyVersion);
                    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 = ButterflyEnvironment.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 - ButterflyEnvironment.ServerStarted;

                    string uptime = "Server uptime: " + TimeUsed.Days + " day(s), " + TimeUsed.Hours + " hour(s) and " + TimeUsed.Minutes + " minute(s)";
                    string tcp    = "Active TCP connections: " + ButterflyEnvironment.GetGame().GetClientManager().ClientCount;
                    string room   = "Active rooms: " + ButterflyEnvironment.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();

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

                    string gameLoopStatus = "Game loop status: " + ButterflyEnvironment.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 "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":
                {
                    ButterflyEnvironment.diagPackets = !ButterflyEnvironment.diagPackets;
                    if (ButterflyEnvironment.diagPackets)
                    {
                        Console.WriteLine("Packet diagnostic enabled");
                    }
                    else
                    {
                        Console.WriteLine("Packet diagnostic disabled");
                    }
                    break;
                }

                case "settimeout":
                {
                    int timeout = int.Parse(parameters[1]);
                    ButterflyEnvironment.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();
        }
Ejemplo n.º 2
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();
        }