Ejemplo n.º 1
0
        /// <summary>
        /// Invokes the command.
        /// </summary>
        /// <param name="inputData">The input data.</param>
        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
            {
                string[] parameters = inputData.Split(' ');

                switch (parameters[0])
                {
                    #region Roleplay

                case "wualert":
                {
                    if (parameters[1] == null)
                    {
                        Console.WriteLine("Please enter the users username!");
                    }

                    string name   = parameters[1].ToString();
                    string Notice = HabboHotel.Misc.ChatCommandHandler.MergeParams(parameters, 2);

                    bool       dced = false;
                    GameClient User = null;
                    foreach (GameClient mClient in Plus.GetGame().GetClientManager().Clients.Values)
                    {
                        if (mClient == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo() == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo().CurrentRoom == null)
                        {
                            continue;
                        }
                        if (mClient.GetConnection() == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo().UserName.ToLower() == name.ToLower())
                        {
                            User = mClient;
                            dced = true;
                        }
                    }

                    if (dced)
                    {
                        User.SendWhisper("[Alert][Private]: " + Notice);
                        Console.WriteLine("Successfully alerted " + name.ToLower() + " :: '" + Notice + "'", ConsoleColor.Red);
                    }
                }
                break;

                case "walert":
                {
                    string Notice = HabboHotel.Misc.ChatCommandHandler.MergeParams(parameters, 1);

                    lock (Plus.GetGame().GetClientManager().Clients.Values)
                    {
                        foreach (GameClient mClient in Plus.GetGame().GetClientManager().Clients.Values)
                        {
                            if (mClient == null)
                            {
                                continue;
                            }
                            if (mClient.GetHabbo() == null)
                            {
                                continue;
                            }
                            if (mClient.GetHabbo().CurrentRoom == null)
                            {
                                continue;
                            }
                            if (mClient.GetConnection() == null)
                            {
                                continue;
                            }
                            mClient.SendWhisperBubble("[Alert][Global]: " + Notice, 33);
                        }
                    }

                    Console.WriteLine("Whisper Alerted: '" + Notice + "'", ConsoleColor.DarkGreen);
                }
                break;

                case "halert":
                {
                    string        Notice     = HabboHotel.Misc.ChatCommandHandler.MergeParams(parameters, 1);
                    ServerMessage HotelAlert = new ServerMessage(LibraryParser.OutgoingRequest("BroadcastNotifMessageComposer"));
                    HotelAlert.AppendString(Notice + "\r\n" + "- FluxRP");



                    Plus.GetGame().GetClientManager().QueueBroadcaseMessage(HotelAlert);

                    Console.WriteLine("Hotel Alerted: '" + Notice + "'", ConsoleColor.DarkGreen);
                }
                break;

                case "ban":
                {
                    if (parameters[1] == null)
                    {
                        Console.WriteLine("Please enter the users username!");
                    }

                    string     name = parameters[1].ToString();
                    bool       dced = false;
                    GameClient User = null;
                    foreach (GameClient mClient in Plus.GetGame().GetClientManager().Clients.Values)
                    {
                        if (mClient == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo() == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo().CurrentRoom == null)
                        {
                            continue;
                        }
                        if (mClient.GetConnection() == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo().UserName.ToLower() == name.ToLower())
                        {
                            User = mClient;
                            dced = true;
                        }
                    }

                    if (dced)
                    {
                        User.GetConnection().Dispose();

                        Console.WriteLine("Successfully banned " + name.ToLower(), ConsoleColor.Red);

                        using (IQueryAdapter dbClient = Plus.GetDatabaseManager().GetQueryReactor())
                        {
                            dbClient.RunFastQuery("INSERT INTO users_bans(bantype,value,reason) VALUES('user','" + User.GetHabbo().UserName + "','Automatic Ban via Console [Urgent]')");
                        }
                    }
                    else
                    {
                        using (IQueryAdapter dbClient = Plus.GetDatabaseManager().GetQueryReactor())
                        {
                            dbClient.RunFastQuery("INSERT INTO bans(bantype,value,reason) VALUES('user','" + name.ToLower() + "','Automatic Ban via Console [Urgent]')");
                        }

                        Console.WriteLine("Successfully banned " + name.ToLower(), ConsoleColor.Red);
                    }
                }
                break;

                case "derank":
                {
                    if (parameters[1] == null)
                    {
                        Console.WriteLine("Please enter the users username!");
                    }

                    string name = parameters[1].ToString();

                    bool       dced = false;
                    GameClient User = null;
                    foreach (GameClient mClient in Plus.GetGame().GetClientManager().Clients.Values)
                    {
                        if (mClient == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo() == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo().CurrentRoom == null)
                        {
                            continue;
                        }
                        if (mClient.GetConnection() == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo().UserName.ToLower() == name.ToLower())
                        {
                            User = mClient;
                            dced = true;
                        }
                    }

                    if (dced)
                    {
                        User.GetConnection().Dispose();

                        Console.WriteLine("Successfully deranked " + name.ToLower(), ConsoleColor.Red);


                        using (IQueryAdapter dbClient = Plus.GetDatabaseManager().GetQueryReactor())
                        {
                            dbClient.RunFastQuery("UPDATE users SET rank = '1' WHERE username = '******'");
                        }
                    }
                    else
                    {
                        using (IQueryAdapter dbClient = Plus.GetDatabaseManager().GetQueryReactor())
                        {
                            dbClient.RunFastQuery("UPDATE users SET rank = '1' WHERE username = '******'");
                        }

                        Console.WriteLine("Successfully deranked " + name.ToLower(), ConsoleColor.Red);
                    }
                }
                break;

                case "dc":
                {
                    if (parameters[1] == null)
                    {
                        Console.WriteLine("Please enter the users username!");
                    }

                    string     name = parameters[1].ToString();
                    bool       dced = false;
                    GameClient User = null;
                    foreach (GameClient mClient in Plus.GetGame().GetClientManager().Clients.Values)
                    {
                        if (mClient == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo() == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo().CurrentRoom == null)
                        {
                            continue;
                        }
                        if (mClient.GetConnection() == null)
                        {
                            continue;
                        }
                        if (mClient.GetHabbo().UserName.ToLower() == name.ToLower())
                        {
                            User = mClient;
                            dced = true;
                        }
                    }

                    if (dced)
                    {
                        User.GetConnection().Dispose();
                        Console.WriteLine("Successfully disconnected " + name.ToLower(), ConsoleColor.Red);
                    }
                }
                break;

                    #endregion

                case "shutdown":
                case "close":
                {
                    using (IQueryAdapter dbClient = Plus.GetDatabaseManager().GetQueryReactor())
                    {
                        dbClient.RunFastQuery("UPDATE server_settings SET value = '2' WHERE variable = 'status'");
                    }

                    Logging.DisablePrimaryWriting(true);
                    Out.WriteLine("Shutdown Initalized", "", ConsoleColor.DarkYellow);
                    Plus.PerformShutDown(false);
                    Console.WriteLine();
                    return;
                }

                case "restart":
                {
                    using (IQueryAdapter dbClient = Plus.GetDatabaseManager().GetQueryReactor())
                    {
                        dbClient.RunFastQuery("UPDATE server_status SET status = 2 where id = 1");
                    }

                    Logging.LogMessage(string.Format("Server Restarting at {0}", DateTime.Now));
                    Logging.DisablePrimaryWriting(true);
                    Out.WriteLine("Restart Initialized", "", ConsoleColor.DarkYellow);
                    Plus.PerformShutDown(true);
                    Console.WriteLine();
                    return;
                }

                case "fixrooms":
                {
                    List <Room> roomsToUnload = new List <Room>();
                    foreach (Room room30 in Plus.GetGame().GetRoomManager().LoadedRooms.Values)
                    {
                        if ((room30 != null))
                        {
                            roomsToUnload.Add(room30);
                            //Plus.GetGame().GetRoomManager().UnloadRoom(room30);
                        }
                    }
                    foreach (Room roomj in roomsToUnload)
                    {
                        Plus.GetGame().GetRoomManager().UnloadRoom(roomj, "fixrooms");
                    }
                    roomsToUnload = null;

                    var message = new ServerMessage(LibraryParser.OutgoingRequest("MOTDNotificationMessageComposer"));
                    message.AppendInteger(1);
                    message.AppendString("Hey Guys,\n\nAll rooms have been unloaded. This could be because:\n1. Room glitches\n2. Manual room changes\n3. Room migration\n\nPlease reload the client to prevent any errors. Thank you!");
                    GetGame().GetClientManager().QueueBroadcaseMessage(message);

                    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":
                        {
                            Plus.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 = Plus.GetDatabaseManager().GetQueryReactor())
                                    {
                                        GetGame().GetCatalog().Initialize(dbClient);
                                    }

                                    GetGame()
                                    .GetClientManager()
                                    .QueueBroadcaseMessage(
                                        new ServerMessage(LibraryParser.OutgoingRequest("PublishShopMessageComposer")));

                                    Console.WriteLine("Catalog flushed");

                                    break;
                                }

                                case "modeldata":
                                {
                                    Console.WriteLine("Flushing modeldata");
                                    using (IQueryAdapter dbClient = Plus.GetDatabaseManager().GetQueryReactor())
                                    {
                                        GetGame().GetRoomManager().LoadModels(dbClient);
                                    }
                                    Console.WriteLine("Models flushed");

                                    break;
                                }

                                case "bans":
                                {
                                    Console.WriteLine("Flushing bans");
                                    using (IQueryAdapter dbClient = Plus.GetDatabaseManager().GetQueryReactor())
                                    {
                                        GetGame().GetBanManager().Init();
                                    }
                                    Console.WriteLine("Bans flushed");

                                    break;
                                }
                                }
                            }
                            break;
                        }

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

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

                            break;
                        }

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

                    break;
                }

                case "view":
                {
                    switch (parameters[1])
                    {
                    case "console":
                    {
                        Console.WriteLine("Press ENTER for disabling console writing");
                        Logging.DisabledState = false;
                        break;
                    }
                    }
                    break;
                }

                case "alert":
                {
                    var str     = inputData.Substring(6);
                    var message = new ServerMessage(LibraryParser.OutgoingRequest("BroadcastNotifMessageComposer"));
                    message.AppendString(str);
                    message.AppendString(string.Empty);
                    GetGame().GetClientManager().QueueBroadcaseMessage(message);
                    Console.WriteLine("[{0}] was sent!", str);
                    return;
                }

                case "clear":
                    Console.Clear();
                    return;

                case "help":
                    Console.WriteLine("shutdown/close - for safe shutting down PlusEmulator");
                    Console.WriteLine("clear - Clear all text");
                    Console.WriteLine("alert (msg) - send alert to Every1!");
                    Console.WriteLine("flush/reload");
                    Console.WriteLine("   - catalog");
                    Console.WriteLine("   - modeldata");
                    Console.WriteLine("   - bans");
                    Console.WriteLine("   - packets (reload packets ids)");
                    Console.WriteLine("   - filter");
                    Console.WriteLine();
                    return;

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

            Console.WriteLine();
        }