diff --git a/Application/Application.csproj b/Application/Application.csproj index 4149e746a..c781f1657 100644 --- a/Application/Application.csproj +++ b/Application/Application.csproj @@ -49,18 +49,6 @@ Always - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - diff --git a/Application/ApplicationManager.cs b/Application/ApplicationManager.cs index 9e0690882..2ca819573 100644 --- a/Application/ApplicationManager.cs +++ b/Application/ApplicationManager.cs @@ -60,6 +60,7 @@ namespace IW4MAdmin.Application readonly Dictionary Loggers = new Dictionary(); readonly ITokenAuthentication _authenticator; private readonly MetaService _metaService; + private readonly TimeSpan _throttleTimeout = new TimeSpan(0, 1, 0); private ApplicationManager() { @@ -193,7 +194,11 @@ namespace IW4MAdmin.Application { try { - await server.ProcessUpdatesAsync(new CancellationToken()); + await server.ProcessUpdatesAsync(token); + if (server.Throttled) + { + await Task.Delay((int)_throttleTimeout.TotalMilliseconds); + } } catch (Exception e) diff --git a/Application/IW4MServer.cs b/Application/IW4MServer.cs index 839a8af49..b2524429e 100644 --- a/Application/IW4MServer.cs +++ b/Application/IW4MServer.cs @@ -27,6 +27,7 @@ namespace IW4MAdmin private static readonly Index loc = Utilities.CurrentLocalization.LocalizationIndex; private GameLogEventDetection LogEvent; private DateTime SessionStart; + public int Id { get; private set; } public IW4MServer(IManager mgr, ServerConfiguration cfg) : base(mgr, cfg) @@ -174,6 +175,24 @@ namespace IW4MAdmin /// override protected async Task ProcessEvent(GameEvent E) { + if (E.Type == GameEvent.EventType.ConnectionLost) + { + var exception = E.Extra as Exception; + Logger.WriteError(exception.Message); + if (exception.Data["internal_exception"] != null) + { + Logger.WriteDebug($"Internal Exception: {exception.Data["internal_exception"]}"); + } + Logger.WriteInfo("Connection lost to server, so we are throttling the poll rate"); + Throttled = true; + } + + if (E.Type == GameEvent.EventType.ConnectionRestored) + { + Logger.WriteInfo("Connection restored to server, so we are no longer throttling the poll rate"); + Throttled = false; + } + if (E.Type == GameEvent.EventType.ChangePermission) { var newPermission = (Permission)E.Extra; @@ -515,8 +534,6 @@ namespace IW4MAdmin #if DEBUG Logger.WriteInfo($"Polling players took {(DateTime.Now - now).TotalMilliseconds}ms"); #endif - Throttled = false; - var disconnectingClients = currentClients.Except(polledClients); var connectingClients = polledClients.Except(currentClients); var updatedClients = polledClients.Except(connectingClients).Except(disconnectingClients); @@ -632,7 +649,7 @@ namespace IW4MAdmin if (ConnectionErrors > 0) { - Logger.WriteVerbose(loc["MANAGER_CONNECTION_REST"].FormatExt($"{IP}:{Port}")); + Logger.WriteVerbose(loc["MANAGER_CONNECTION_REST"].FormatExt($"[{IP}:{Port}]")); var _event = new GameEvent() { @@ -643,8 +660,6 @@ namespace IW4MAdmin }; Manager.GetEventHandler().AddEvent(_event); - - Throttled = false; } ConnectionErrors = 0; @@ -656,9 +671,6 @@ namespace IW4MAdmin ConnectionErrors++; if (ConnectionErrors == 3) { - Logger.WriteError($"{e.Message} {IP}:{Port}, {loc["SERVER_ERROR_POLLING"]}"); - Logger.WriteDebug($"Internal Exception: {e.Data["internal_exception"]}"); - var _event = new GameEvent() { Type = GameEvent.EventType.ConnectionLost, @@ -670,8 +682,6 @@ namespace IW4MAdmin }; Manager.GetEventHandler().AddEvent(_event); - - Throttled = true; } return true; } @@ -713,9 +723,9 @@ namespace IW4MAdmin // this one is ok catch (ServerException e) { - if (e is NetworkException) + if (e is NetworkException && !Throttled) { - Logger.WriteError(loc["SERVER_ERROR_COMMUNICATION"].FormatExt($"[{IP}:{Port}]")); + Logger.WriteError(loc["SERVER_ERROR_COMMUNICATION"].FormatExt($"{IP}:{Port}")); Logger.WriteDebug(e.GetExceptionInfo()); } diff --git a/Application/Localization/IW4MAdmin.en-US.json b/Application/Localization/IW4MAdmin.en-US.json deleted file mode 100644 index cabf6d3c4..000000000 --- a/Application/Localization/IW4MAdmin.en-US.json +++ /dev/null @@ -1,269 +0,0 @@ -{ - "LocalizationName": "en-US", - "LocalizationIndex": { - "Set": { - "BROADCAST_OFFLINE": "^5IW4MAdmin ^7is going ^1OFFLINE", - "BROADCAST_ONLINE": "^5IW4MADMIN ^7is now ^2ONLINE", - "COMMAND_HELP_OPTIONAL": "optional", - "COMMAND_HELP_SYNTAX": "syntax:", - "COMMAND_MISSINGARGS": "Not enough arguments supplied", - "COMMAND_NOACCESS": "You do not have access to that command", - "COMMAND_NOTAUTHORIZED": "You are not authorized to execute that command", - "COMMAND_TARGET_MULTI": "Multiple players match that name", - "COMMAND_TARGET_NOTFOUND": "Unable to find specified player", - "COMMAND_UNKNOWN": "You entered an unknown command", - "COMMANDS_ADMINS_DESC": "list currently connected privileged clients", - "COMMANDS_ADMINS_NONE": "No visible administrators online", - "COMMANDS_ALIAS_ALIASES": "Aliases", - "COMMANDS_ALIAS_DESC": "get past aliases and ips of a client", - "COMMANDS_ALIAS_IPS": "IPs", - "COMMANDS_ARGS_CLEAR": "clear", - "COMMANDS_ARGS_CLIENTID": "client id", - "COMMANDS_ARGS_COMMANDS": "commands", - "COMMANDS_ARGS_DURATION": "duration (m|h|d|w|y)", - "COMMANDS_ARGS_INACTIVE": "inactive days", - "COMMANDS_ARGS_LEVEL": "level", - "COMMANDS_ARGS_MAP": "map", - "COMMANDS_ARGS_MESSAGE": "message", - "COMMANDS_ARGS_PASSWORD": "password", - "COMMANDS_ARGS_PLAYER": "player", - "COMMANDS_ARGS_REASON": "reason", - "COMMANDS_BAN_DESC": "permanently ban a client from the server", - "COMMANDS_BAN_FAIL": "You cannot ban", - "COMMANDS_BAN_SUCCESS": "has been permanently banned", - "COMMANDS_BANINFO_DESC": "get information about a ban for a client", - "COMMANDS_BANINFO_NONE": "No active ban was found for that player", - "COMMANDS_BANINO_SUCCESS": "was banned by ^5{0} ^7for:", - "COMMANDS_FASTRESTART_DESC": "fast restart current map", - "COMMANDS_FASTRESTART_MASKED": "The map has been fast restarted", - "COMMANDS_FASTRESTART_UNMASKED": "fast restarted the map", - "COMMANDS_FIND_DESC": "find client in database", - "COMMANDS_FIND_EMPTY": "No players found", - "COMMANDS_FIND_MIN": "Please enter at least 3 characters", - "COMMANDS_FLAG_DESC": "flag a suspicious client and announce to admins on join", - "COMMANDS_FLAG_FAIL": "You cannot flag", - "COMMANDS_FLAG_SUCCESS": "You have flagged", - "COMMANDS_FLAG_UNFLAG": "You have unflagged", - "COMMANDS_HELP_DESC": "list all available commands", - "COMMANDS_HELP_MOREINFO": "Type !help to get command usage syntax", - "COMMANDS_HELP_NOTFOUND": "Could not find that command", - "COMMANDS_IP_DESC": "view your external IP address", - "COMMANDS_IP_SUCCESS": "Your external IP is", - "COMMANDS_KICK_DESC": "kick a client by name", - "COMMANDS_KICK_FAIL": "You do not have the required privileges to kick", - "COMMANDS_KICK_SUCCESS": "has been kicked", - "COMMANDS_LIST_DESC": "list active clients", - "COMMANDS_MAP_DESC": "change to specified map", - "COMMANDS_MAP_SUCCESS": "Changing to map", - "COMMANDS_MAP_UKN": "Attempting to change to unknown map", - "COMMANDS_MAPROTATE": "Map rotating in ^55 ^7seconds", - "COMMANDS_MAPROTATE_DESC": "cycle to the next map in rotation", - "COMMANDS_MASK_DESC": "hide your presence as a privileged client", - "COMMANDS_MASK_OFF": "You are now unmasked", - "COMMANDS_MASK_ON": "You are now masked", - "COMMANDS_OWNER_DESC": "claim ownership of the server", - "COMMANDS_OWNER_FAIL": "This server already has an owner", - "COMMANDS_OWNER_SUCCESS": "Congratulations, you have claimed ownership of this server!", - "COMMANDS_PASSWORD_FAIL": "Your password must be at least 5 characters long", - "COMMANDS_PASSWORD_SUCCESS": "Your password has been set successfully", - "COMMANDS_PING_DESC": "get client's latency", - "COMMANDS_PING_SELF": "Your latency is", - "COMMANDS_PING_TARGET": "latency is", - "COMMANDS_PLUGINS_DESC": "view all loaded plugins", - "COMMANDS_PLUGINS_LOADED": "Loaded Plugins", - "COMMANDS_PM_DESC": "send message to other client", - "COMMANDS_PRUNE_DESC": "demote any privileged clients that have not connected recently (defaults to 30 days)", - "COMMANDS_PRUNE_FAIL": "Invalid number of inactive days", - "COMMANDS_PRUNE_SUCCESS": "inactive privileged users were pruned", - "COMMANDS_QUIT_DESC": "quit IW4MAdmin", - "COMMANDS_RCON_DESC": "send rcon command to server", - "COMMANDS_RCON_SUCCESS": "Successfully sent RCon command", - "COMMANDS_REPORT_DESC": "report a client for suspicious behavior", - "COMMANDS_REPORT_FAIL": "You cannot report", - "COMMANDS_REPORT_FAIL_CAMP": "You cannot report an player for camping", - "COMMANDS_REPORT_FAIL_DUPLICATE": "You have already reported this player", - "COMMANDS_REPORT_FAIL_SELF": "You cannot report yourself", - "COMMANDS_REPORT_SUCCESS": "Thank you for your report, an administrator has been notified", - "COMMANDS_REPORTS_CLEAR_SUCCESS": "Reports successfully cleared", - "COMMANDS_REPORTS_DESC": "get or clear recent reports", - "COMMANDS_REPORTS_NONE": "No players reported yet", - "COMMANDS_RULES_DESC": "list server rules", - "COMMANDS_RULES_NONE": "The server owner has not set any rules", - "COMMANDS_SAY_DESC": "broadcast message to all clients", - "COMMANDS_SETLEVEL_DESC": "set client to specified privilege level", - "COMMANDS_SETLEVEL_FAIL": "Invalid group specified", - "COMMANDS_SETLEVEL_LEVELTOOHIGH": "You can only promote ^5{0} ^7to ^5{1} ^7or lower privilege", - "COMMANDS_SETLEVEL_OWNER": "There can only be 1 owner. Modify your settings if multiple owners are required", - "COMMANDS_SETLEVEL_SELF": "You cannot change your own level", - "COMMANDS_SETLEVEL_STEPPEDDISABLED": "This server does not allow you to promote", - "COMMANDS_SETLEVEL_SUCCESS": "was successfully promoted", - "COMMANDS_SETLEVEL_SUCCESS_TARGET": "Congratulations! You have been promoted to", - "COMMANDS_SETPASSWORD_DESC": "set your authentication password", - "COMMANDS_TEMPBAN_DESC": "temporarily ban a client for specified time (defaults to 1 hour)", - "COMMANDS_TEMPBAN_FAIL": "You cannot temporarily ban", - "COMMANDS_TEMPBAN_SUCCESS": "has been temporarily banned for", - "COMMANDS_UNBAN_DESC": "unban client by client id", - "COMMANDS_UNBAN_FAIL": "is not banned", - "COMMANDS_UNBAN_SUCCESS": "Successfully unbanned", - "COMMANDS_UPTIME_DESC": "get current application running time", - "COMMANDS_UPTIME_TEXT": "has been online for", - "COMMANDS_USAGE_DESC": "get application memory usage", - "COMMANDS_USAGE_TEXT": "is using", - "COMMANDS_WARN_DESC": "warn client for infringing rules", - "COMMANDS_WARN_FAIL": "You do not have the required privileges to warn", - "COMMANDS_WARNCLEAR_DESC": "remove all warnings for a client", - "COMMANDS_WARNCLEAR_SUCCESS": "All warning cleared for", - "COMMANDS_WHO_DESC": "give information about yourself", - "GLOBAL_TIME_DAYS": "days", - "GLOBAL_ERROR": "Error", - "GLOBAL_TIME_HOURS": "hours", - "GLOBAL_INFO": "Info", - "GLOBAL_TIME_MINUTES": "minutes", - "GLOBAL_REPORT": "If you suspect someone of ^5CHEATING ^7use the ^5!report ^7command", - "GLOBAL_VERBOSE": "Verbose", - "GLOBAL_WARNING": "Warning", - "MANAGER_CONNECTION_REST": "Connection has been reestablished with", - "MANAGER_CONSOLE_NOSERV": "No servers are currently being monitored", - "MANAGER_EXIT": "Press any key to exit...", - "MANAGER_INIT_FAIL": "Fatal error during initialization", - "MANAGER_MONITORING_TEXT": "Now monitoring", - "MANAGER_SHUTDOWN_SUCCESS": "Shutdown complete", - "MANAGER_VERSION_CURRENT": "Your version is", - "MANAGER_VERSION_FAIL": "Could not get latest IW4MAdmin version", - "MANAGER_VERSION_SUCCESS": "IW4MAdmin is up to date", - "MANAGER_VERSION_UPDATE": "has an update. Latest version is", - "PLUGIN_IMPORTER_NOTFOUND": "No plugins found to load", - "PLUGIN_IMPORTER_REGISTERCMD": "Registered command", - "PLUGINS_LOGIN_COMMANDS_LOGIN_DESC": "login using password", - "PLUGINS_LOGIN_COMMANDS_LOGIN_FAIL": "Your password is incorrect", - "PLUGINS_LOGIN_COMMANDS_LOGIN_SUCCESS": "You are now logged in", - "PLUGINS_STATS_COMMANDS_RESET_DESC": "reset your stats to factory-new", - "PLUGINS_STATS_COMMANDS_RESET_FAIL": "You must be connected to a server to reset your stats", - "PLUGINS_STATS_COMMANDS_RESET_SUCCESS": "Your stats for this server have been reset", - "PLUGINS_STATS_COMMANDS_TOP_DESC": "view the top 5 players in this server", - "PLUGINS_STATS_COMMANDS_TOP_TEXT": "Top Players", - "PLUGINS_STATS_COMMANDS_VIEW_DESC": "view your stats", - "PLUGINS_STATS_COMMANDS_VIEW_FAIL": "Cannot find the player you specified", - "PLUGINS_STATS_COMMANDS_VIEW_FAIL_INGAME": "The specified player must be ingame", - "PLUGINS_STATS_COMMANDS_VIEW_FAIL_INGAME_SELF": "You must be ingame to view your stats", - "PLUGINS_STATS_COMMANDS_VIEW_SUCCESS": "Stats for", - "PLUGINS_STATS_TEXT_DEATHS": "DEATHS", - "PLUGINS_STATS_TEXT_KILLS": "KILLS", - "PLUGINS_STATS_TEXT_NOQUALIFY": "No players qualify for top stats yet", - "PLUGINS_STATS_TEXT_SKILL": "SKILL", - "SERVER_BAN_APPEAL": "appeal at", - "SERVER_BAN_PREV": "Previously banned for", - "SERVER_BAN_TEXT": "You're banned", - "SERVER_ERROR_ADDPLAYER": "Unable to add player", - "SERVER_ERROR_COMMAND_INGAME": "An internal error occured while processing your command", - "SERVER_ERROR_COMMAND_LOG": "command generated an error", - "SERVER_ERROR_COMMUNICATION": "Could not communicate with", - "SERVER_ERROR_DNE": "does not exist", - "SERVER_ERROR_DVAR": "Could not get the dvar value for", - "SERVER_ERROR_DVAR_HELP": "ensure the server has a map loaded", - "SERVER_ERROR_EXCEPTION": "Unexpected exception on", - "SERVER_ERROR_LOG": "Invalid game log file", - "SERVER_ERROR_PLUGIN": "An error occured loading plugin", - "SERVER_ERROR_POLLING": "reducing polling rate", - "SERVER_ERROR_UNFIXABLE": "Not monitoring server due to uncorrectable errors", - "SERVER_KICK_CONTROLCHARS": "Your name cannot contain control characters", - "SERVER_KICK_GENERICNAME": "Please change your name using /name", - "SERVER_KICK_MINNAME": "Your name must contain at least 3 characters", - "SERVER_KICK_NAME_INUSE": "Your name is being used by someone else", - "SERVER_KICK_TEXT": "You were kicked", - "SERVER_KICK_VPNS_NOTALLOWED": "VPNs are not allowed on this server", - "SERVER_PLUGIN_ERROR": "A plugin generated an error", - "SERVER_REPORT_COUNT": "There are ^5{0} ^7recent reports", - "SERVER_TB_REMAIN": "You are temporarily banned", - "SERVER_TB_TEXT": "You're temporarily banned", - "SERVER_WARNING": "WARNING", - "SERVER_WARNLIMT_REACHED": "Too many warnings", - "SERVER_WEBSITE_GENERIC": "this server's website", - "SETUP_DISPLAY_SOCIAL": "Display social media link on webfront (discord, website, VK, etc..)", - "SETUP_ENABLE_CUSTOMSAY": "Enable custom say name", - "SETUP_ENABLE_MULTIOWN": "Enable multiple owners", - "SETUP_ENABLE_STEPPEDPRIV": "Enable stepped privilege hierarchy", - "SETUP_ENABLE_VPNS": "Enable client VPNs", - "SETUP_ENABLE_WEBFRONT": "Enable webfront", - "SETUP_ENCODING_STRING": "Enter encoding string", - "SETUP_IPHUB_KEY": "Enter iphub.info api key", - "SETUP_SAY_NAME": "Enter custom say name", - "SETUP_SERVER_IP": "Enter server IP Address", - "SETUP_SERVER_MANUALLOG": "Enter manual log file path", - "SETUP_SERVER_PORT": "Enter server port", - "SETUP_SERVER_RCON": "Enter server RCon password", - "SETUP_SERVER_SAVE": "Configuration saved, add another", - "SETUP_SERVER_USEIW5M": "Use Pluto IW5 Parser", - "SETUP_SERVER_USET6M": "Use Pluto T6 parser", - "SETUP_SOCIAL_LINK": "Enter social media link", - "SETUP_SOCIAL_TITLE": "Enter social media name", - "SETUP_USE_CUSTOMENCODING": "Use custom encoding parser", - "WEBFRONT_ACTION_BAN_NAME": "Ban", - "WEBFRONT_ACTION_LABEL_ID": "Client ID", - "WEBFRONT_ACTION_LABEL_PASSWORD": "Password", - "WEBFRONT_ACTION_LABEL_REASON": "Reason", - "WEBFRONT_ACTION_LOGIN_NAME": "Login", - "WEBFRONT_ACTION_UNBAN_NAME": "Unban", - "WEBFRONT_CLIENT_META_FALSE": "Is not", - "WEBFRONT_CLIENT_META_JOINED": "Joined with alias", - "WEBFRONT_CLIENT_META_MASKED": "Masked", - "WEBFRONT_CLIENT_META_TRUE": "Is", - "WEBFRONT_CLIENT_PRIVILEGED_TITLE": "Privileged Clients", - "WEBFRONT_CLIENT_PROFILE_TITLE": "Profile", - "WEBFRONT_CLIENT_SEARCH_MATCHING": "Clients Matching", - "WEBFRONT_CONSOLE_EXECUTE": "Execute", - "WEBFRONT_CONSOLE_TITLE": "Web Console", - "WEBFRONT_ERROR_DESC": "IW4MAdmin encountered an error", - "WEBFRONT_ERROR_GENERIC_DESC": "An error occurred while processing your request", - "WEBFRONT_ERROR_GENERIC_TITLE": "Sorry!", - "WEBFRONT_ERROR_TITLE": "Error!", - "WEBFRONT_HOME_TITLE": "Server Overview", - "WEBFRONT_NAV_CONSOLE": "Console", - "WEBFRONT_NAV_DISCORD": "Discord", - "WEBFRONT_NAV_HOME": "Home", - "WEBFRONT_NAV_LOGOUT": "Logout", - "WEBFRONT_NAV_PENALTIES": "Penalties", - "WEBFRONT_NAV_PRIVILEGED": "Admins", - "WEBFRONT_NAV_PROFILE": "Client Profile", - "WEBFRONT_NAV_SEARCH": "Find Client", - "WEBFRONT_NAV_SOCIAL": "Social", - "WEBFRONT_PENALTY_TEMPLATE_ADMIN": "Admin", - "WEBFRONT_PENALTY_TEMPLATE_AGO": "ago", - "WEBFRONT_PENALTY_TEMPLATE_NAME": "Name", - "WEBFRONT_PENALTY_TEMPLATE_OFFENSE": "Offense", - "WEBFRONT_PENALTY_TEMPLATE_REMAINING": "left", - "WEBFRONT_PENALTY_TEMPLATE_SHOW": "Show", - "WEBFRONT_PENALTY_TEMPLATE_SHOWONLY": "Show only", - "WEBFRONT_PENALTY_TEMPLATE_TIME": "Time/Left", - "WEBFRONT_PENALTY_TEMPLATE_TYPE": "Type", - "WEBFRONT_PENALTY_TITLE": "Client Penalties", - "WEBFRONT_PROFILE_FSEEN": "First seen", - "WEBFRONT_PROFILE_LEVEL": "Level", - "WEBFRONT_PROFILE_LSEEN": "Last seen", - "WEBFRONT_PROFILE_PLAYER": "Played", - "PLUGIN_STATS_SETUP_ENABLEAC": "Enable server-side anti-cheat (IW4 only)", - "PLUGIN_STATS_ERROR_ADD": "Could not add server to server stats", - "PLUGIN_STATS_CHEAT_DETECTED": "You appear to be cheating", - "PLUGINS_STATS_TEXT_KDR": "KDR", - "PLUGINS_STATS_META_SPM": "Score per Minute", - "PLUGINS_WELCOME_USERANNOUNCE": "^5{{ClientName}} ^7hails from ^5{{ClientLocation}}", - "PLUGINS_WELCOME_USERWELCOME": "Welcome ^5{{ClientName}}^7, this is your ^5{{TimesConnected}} ^7time connecting!", - "PLUGINS_WELCOME_PRIVANNOUNCE": "{{ClientLevel}} {{ClientName}} has joined the server", - "PLUGINS_LOGIN_AUTH": "not logged in", - "PLUGINS_PROFANITY_SETUP_ENABLE": "Enable profanity deterring", - "PLUGINS_PROFANITY_WARNMSG": "Please do not use profanity on this server", - "PLUGINS_PROFANITY_KICKMSG": "Excessive use of profanity", - "GLOBAL_DEBUG": "Debug", - "COMMANDS_UNFLAG_DESC": "Remove flag for client", - "COMMANDS_UNFLAG_FAIL": "You cannot unflag", - "COMMANDS_UNFLAG_NOTFLAGGED": "Client is not flagged", - "COMMANDS_FLAG_ALREADYFLAGGED": "Client is already flagged", - "PLUGINS_STATS_COMMANDS_MOSTPLAYED_TEXT": "Most Played", - "PLUGINS_STATS_COMMANDS_MOSTPLAYED_DESC": "view the top 5 dedicated players on the server", - "WEBFRONT_PROFILE_MESSAGES": "Messages", - "WEBFRONT_CLIENT_META_CONNECTIONS": "Connections", - "PLUGINS_STATS_COMMANDS_TOPSTATS_RATING": "Rating", - "PLUGINS_STATS_COMMANDS_PERFORMANCE": "Performance" - } - } -} \ No newline at end of file diff --git a/Application/Localization/IW4MAdmin.es-EC.json b/Application/Localization/IW4MAdmin.es-EC.json deleted file mode 100644 index 441c54958..000000000 --- a/Application/Localization/IW4MAdmin.es-EC.json +++ /dev/null @@ -1,269 +0,0 @@ -{ - "LocalizationName": "es-EC", - "LocalizationIndex": { - "Set": { - "BROADCAST_OFFLINE": "^5IW4MAdmin ^7está ^1DESCONECTANDOSE", - "BROADCAST_ONLINE": "^5IW4MADMIN ^7está ahora ^2en línea", - "COMMAND_HELP_OPTIONAL": "opcional", - "COMMAND_HELP_SYNTAX": "sintaxis:", - "COMMAND_MISSINGARGS": "No se han proporcionado suficientes argumentos", - "COMMAND_NOACCESS": "Tú no tienes acceso a ese comando", - "COMMAND_NOTAUTHORIZED": "Tú no estás autorizado para ejecutar ese comando", - "COMMAND_TARGET_MULTI": "Múltiples jugadores coinciden con ese nombre", - "COMMAND_TARGET_NOTFOUND": "No se puede encontrar el jugador especificado", - "COMMAND_UNKNOWN": "Has ingresado un comando desconocido", - "COMMANDS_ADMINS_DESC": "enlistar clientes privilegiados actualmente conectados", - "COMMANDS_ADMINS_NONE": "No hay administradores visibles en línea", - "COMMANDS_ALIAS_ALIASES": "Aliases", - "COMMANDS_ALIAS_DESC": "obtener alias e ips anteriores de un cliente", - "COMMANDS_ALIAS_IPS": "IPs", - "COMMANDS_ARGS_CLEAR": "borrar", - "COMMANDS_ARGS_CLIENTID": "id del cliente", - "COMMANDS_ARGS_COMMANDS": "comandos", - "COMMANDS_ARGS_DURATION": "duración (m|h|d|w|y)", - "COMMANDS_ARGS_INACTIVE": "días inactivo", - "COMMANDS_ARGS_LEVEL": "nivel", - "COMMANDS_ARGS_MAP": "mapa", - "COMMANDS_ARGS_MESSAGE": "mensaje", - "COMMANDS_ARGS_PASSWORD": "contraseña", - "COMMANDS_ARGS_PLAYER": "jugador", - "COMMANDS_ARGS_REASON": "razón", - "COMMANDS_BAN_DESC": "banear permanentemente un cliente del servidor", - "COMMANDS_BAN_FAIL": "Tú no puedes banear", - "COMMANDS_BAN_SUCCESS": "ha sido baneado permanentemente", - "COMMANDS_BANINFO_DESC": "obtener información sobre el ban de un cliente", - "COMMANDS_BANINFO_NONE": "No se encontró ban activo para ese jugador", - "COMMANDS_BANINO_SUCCESS": "fue baneado por ^5{0} ^7debido a:", - "COMMANDS_FASTRESTART_DESC": "dar reinicio rápido al mapa actial", - "COMMANDS_FASTRESTART_MASKED": "Al mapa se le ha dado un reinicio rápido", - "COMMANDS_FASTRESTART_UNMASKED": "ha dado rápido reinicio al mapa", - "COMMANDS_FIND_DESC": "encontrar cliente en la base de datos", - "COMMANDS_FIND_EMPTY": "No se encontraron jugadores", - "COMMANDS_FIND_MIN": "Por Favor introduzca al menos 3 caracteres", - "COMMANDS_FLAG_DESC": "marcar un cliente sospechoso y anunciar a los administradores al unirse", - "COMMANDS_FLAG_FAIL": "Tú no puedes marcar", - "COMMANDS_FLAG_SUCCESS": "Has marcado a", - "COMMANDS_FLAG_UNFLAG": "Has desmarcado a", - "COMMANDS_HELP_DESC": "enlistar todos los comandos disponibles", - "COMMANDS_HELP_MOREINFO": "Escribe !help para obtener la sintaxis de uso del comando", - "COMMANDS_HELP_NOTFOUND": "No se ha podido encontrar ese comando", - "COMMANDS_IP_DESC": "ver tu dirección IP externa", - "COMMANDS_IP_SUCCESS": "Tu IP externa es", - "COMMANDS_KICK_DESC": "expulsar a un cliente por su nombre", - "COMMANDS_KICK_FAIL": "No tienes los privilegios necesarios para expulsar a", - "COMMANDS_KICK_SUCCESS": "ha sido expulsado", - "COMMANDS_LIST_DESC": "enlistar clientes activos", - "COMMANDS_MAP_DESC": "cambiar al mapa especificado", - "COMMANDS_MAP_SUCCESS": "Cambiando al mapa", - "COMMANDS_MAP_UKN": "Intentando cambiar a un mapa desconocido", - "COMMANDS_MAPROTATE": "Rotación de mapa en ^55 ^7segundos", - "COMMANDS_MAPROTATE_DESC": "pasar al siguiente mapa en rotación", - "COMMANDS_MASK_DESC": "esconde tu presencia como un cliente privilegiado", - "COMMANDS_MASK_OFF": "Ahora estás desenmascarado", - "COMMANDS_MASK_ON": "Ahora estás enmascarado", - "COMMANDS_OWNER_DESC": "reclamar la propiedad del servidor", - "COMMANDS_OWNER_FAIL": "Este servidor ya tiene un propietario", - "COMMANDS_OWNER_SUCCESS": "¡Felicidades, has reclamado la propiedad de este servidor!", - "COMMANDS_PASSWORD_FAIL": "Tu contraseña debe tener al menos 5 caracteres de largo", - "COMMANDS_PASSWORD_SUCCESS": "Su contraseña ha sido establecida con éxito", - "COMMANDS_PING_DESC": "obtener ping del cliente", - "COMMANDS_PING_SELF": "Tu ping es", - "COMMANDS_PING_TARGET": "ping es", - "COMMANDS_PLUGINS_DESC": "ver todos los complementos cargados", - "COMMANDS_PLUGINS_LOADED": "Complementos cargados", - "COMMANDS_PM_DESC": "enviar mensaje a otro cliente", - "COMMANDS_PRUNE_DESC": "degradar a los clientes con privilegios que no se hayan conectado recientemente (el valor predeterminado es 30 días)", - "COMMANDS_PRUNE_FAIL": "Número inválido de días inactivos", - "COMMANDS_PRUNE_SUCCESS": "los usuarios privilegiados inactivos fueron podados", - "COMMANDS_QUIT_DESC": "salir de IW4MAdmin", - "COMMANDS_RCON_DESC": "enviar el comando rcon al servidor", - "COMMANDS_RCON_SUCCESS": "Exitosamente enviado el comando RCon", - "COMMANDS_REPORT_DESC": "reportar un cliente por comportamiento sospechoso", - "COMMANDS_REPORT_FAIL": "Tú no puedes reportar", - "COMMANDS_REPORT_FAIL_CAMP": "No puedes reportar a un jugador por campear", - "COMMANDS_REPORT_FAIL_DUPLICATE": "Ya has reportado a este jugador", - "COMMANDS_REPORT_FAIL_SELF": "No puedes reportarte a ti mismo", - "COMMANDS_REPORT_SUCCESS": "Gracias por su reporte, un administrador ha sido notificado", - "COMMANDS_REPORTS_CLEAR_SUCCESS": "Reportes borrados con éxito", - "COMMANDS_REPORTS_DESC": "obtener o borrar informes recientes", - "COMMANDS_REPORTS_NONE": "No hay jugadores reportados aun", - "COMMANDS_RULES_DESC": "enlistar reglas del servidor", - "COMMANDS_RULES_NONE": "El propietario del servidor no ha establecido ninguna regla", - "COMMANDS_SAY_DESC": "transmitir el mensaje a todos los clientes", - "COMMANDS_SETLEVEL_DESC": "establecer el cliente al nivel de privilegio especificado", - "COMMANDS_SETLEVEL_FAIL": "Grupo inválido especificado", - "COMMANDS_SETLEVEL_LEVELTOOHIGH": "Tú solo puedes promover ^5{0} ^7a ^5{1} ^7o menor privilegio", - "COMMANDS_SETLEVEL_OWNER": "Solo puede haber un propietario. Modifica tu configuración si múltiples propietarios son requeridos", - "COMMANDS_SETLEVEL_SELF": "No puedes cambiar tu propio nivel", - "COMMANDS_SETLEVEL_STEPPEDDISABLED": "Este servidor no te permite promover", - "COMMANDS_SETLEVEL_SUCCESS": "fue promovido con éxito", - "COMMANDS_SETLEVEL_SUCCESS_TARGET": "¡Felicitaciones! has ha sido promovido a", - "COMMANDS_SETPASSWORD_DESC": "configura tu contraseña de autenticación", - "COMMANDS_TEMPBAN_DESC": "banear temporalmente a un cliente por el tiempo especificado (predeterminado en 1 hora)", - "COMMANDS_TEMPBAN_FAIL": "Tú no puedes banear temporalmente", - "COMMANDS_TEMPBAN_SUCCESS": "ha sido baneado temporalmente por", - "COMMANDS_UNBAN_DESC": "desbanear al cliente por ID", - "COMMANDS_UNBAN_FAIL": "no está baneado", - "COMMANDS_UNBAN_SUCCESS": "Exitosamente desbaneado", - "COMMANDS_UPTIME_DESC": "obtener el tiempo de ejecución de la aplicación actual", - "COMMANDS_UPTIME_TEXT": "ha estado en línea por", - "COMMANDS_USAGE_DESC": "obtener uso de la memoria de la aplicación", - "COMMANDS_USAGE_TEXT": "está usando", - "COMMANDS_WARN_DESC": "advertir al cliente por infringir las reglas", - "COMMANDS_WARN_FAIL": "No tiene los privilegios necesarios para advertir a", - "COMMANDS_WARNCLEAR_DESC": "eliminar todas las advertencias de un cliente", - "COMMANDS_WARNCLEAR_SUCCESS": "Todas las advertencias borradas para", - "COMMANDS_WHO_DESC": "da información sobre ti", - "GLOBAL_TIME_DAYS": "días", - "GLOBAL_ERROR": "Error", - "GLOBAL_TIME_HOURS": "horas", - "GLOBAL_INFO": "Información", - "GLOBAL_TIME_MINUTES": "minutos", - "GLOBAL_REPORT": "Si sospechas que alguien ^5usa cheats ^7usa el comando ^5!report", - "GLOBAL_VERBOSE": "Detallado", - "GLOBAL_WARNING": "Advertencia", - "MANAGER_CONNECTION_REST": "La conexión ha sido restablecida con", - "MANAGER_CONSOLE_NOSERV": "No hay servidores que estén siendo monitoreados en este momento", - "MANAGER_EXIT": "Presione cualquier tecla para salir...", - "MANAGER_INIT_FAIL": "Error fatal durante la inicialización", - "MANAGER_MONITORING_TEXT": "Ahora monitoreando", - "MANAGER_SHUTDOWN_SUCCESS": "Apagado completo", - "MANAGER_VERSION_CURRENT": "Tu versión es", - "MANAGER_VERSION_FAIL": "No se ha podido conseguir la última versión de IW4MAdmin", - "MANAGER_VERSION_SUCCESS": "IW4MAdmin está actualizado", - "MANAGER_VERSION_UPDATE": "tiene una actualización. La última versión es", - "PLUGIN_IMPORTER_NOTFOUND": "No se encontraron complementos para cargar", - "PLUGIN_IMPORTER_REGISTERCMD": "Comando registrado", - "PLUGINS_LOGIN_COMMANDS_LOGIN_DESC": "iniciar sesión usando la contraseña", - "PLUGINS_LOGIN_COMMANDS_LOGIN_FAIL": "tu contraseña es incorrecta", - "PLUGINS_LOGIN_COMMANDS_LOGIN_SUCCESS": "Ahora está conectado", - "PLUGINS_STATS_COMMANDS_RESET_DESC": "restablece tus estadísticas a las nuevas de fábrica", - "PLUGINS_STATS_COMMANDS_RESET_FAIL": "Debes estar conectado a un servidor para restablecer tus estadísticas", - "PLUGINS_STATS_COMMANDS_RESET_SUCCESS": "Tus estadísticas para este servidor se han restablecido", - "PLUGINS_STATS_COMMANDS_TOP_DESC": "ver los 5 mejores jugadores en este servidor", - "PLUGINS_STATS_COMMANDS_TOP_TEXT": "Mejores Jugadores", - "PLUGINS_STATS_COMMANDS_VIEW_DESC": "ver tus estadísticas", - "PLUGINS_STATS_COMMANDS_VIEW_FAIL": "No se puede encontrar el jugador que especificó", - "PLUGINS_STATS_COMMANDS_VIEW_FAIL_INGAME": "El jugador especificado debe estar dentro del juego", - "PLUGINS_STATS_COMMANDS_VIEW_FAIL_INGAME_SELF": "Debes estar dentro del juego para ver tus estadísticas", - "PLUGINS_STATS_COMMANDS_VIEW_SUCCESS": "Estadísticas para", - "PLUGINS_STATS_TEXT_DEATHS": "Muertes", - "PLUGINS_STATS_TEXT_KILLS": "Asesinatos", - "PLUGINS_STATS_TEXT_NOQUALIFY": "No hay jugadores que califiquen para los primeros lugares aun", - "PLUGINS_STATS_TEXT_SKILL": "Habilidad", - "SERVER_BAN_APPEAL": "apela en", - "SERVER_BAN_PREV": "Baneado anteriormente por", - "SERVER_BAN_TEXT": "Estás baneado", - "SERVER_ERROR_ADDPLAYER": "Incapaz de añadir al jugador", - "SERVER_ERROR_COMMAND_INGAME": "Un error interno ocurrió mientras se procesaba tu comando", - "SERVER_ERROR_COMMAND_LOG": "Comando generó error", - "SERVER_ERROR_COMMUNICATION": "No se ha podido comunicar con", - "SERVER_ERROR_DNE": "No existe", - "SERVER_ERROR_DVAR": "No se pudo obtener el valor dvar", - "SERVER_ERROR_DVAR_HELP": "asegúrate de que el servidor tenga un mapa cargado", - "SERVER_ERROR_EXCEPTION": "Excepción inesperada en", - "SERVER_ERROR_LOG": "Archivo de registro del juego invalido", - "SERVER_ERROR_PLUGIN": "Un error ocurrió mientras se cargaba el complemente", - "SERVER_ERROR_POLLING": "reduciendo la tasa de sondeo", - "SERVER_ERROR_UNFIXABLE": "No se está supervisando el servidor debido a errores incorregibles", - "SERVER_KICK_CONTROLCHARS": "Tu nombre no puede contener caracteres de control", - "SERVER_KICK_GENERICNAME": "Por favor cambia tu nombre usando /name", - "SERVER_KICK_MINNAME": "Tu nombre debe contener al menos 3 caracteres", - "SERVER_KICK_NAME_INUSE": "Tu nombre está siendo usado por alguien más", - "SERVER_KICK_TEXT": "Fuiste expulsado", - "SERVER_KICK_VPNS_NOTALLOWED": "Las VPNs no están permitidas en este servidor", - "SERVER_PLUGIN_ERROR": "Un complemento generó un error", - "SERVER_REPORT_COUNT": "Hay ^5{0} ^7reportes recientes", - "SERVER_TB_REMAIN": "Tú estás temporalmente baneado", - "SERVER_TB_TEXT": "Estás temporalmente baneado", - "SERVER_WARNING": "ADVERTENCIA", - "SERVER_WARNLIMT_REACHED": "Muchas advertencias", - "SERVER_WEBSITE_GENERIC": "el sitio web de este servidor", - "SETUP_DISPLAY_SOCIAL": "Mostrar el link del medio de comunicación en la parte frontal de la web. (discord, website, VK, etc..)", - "SETUP_ENABLE_CUSTOMSAY": "Habilitar nombre a decir personalizado", - "SETUP_ENABLE_MULTIOWN": "Habilitar múltiples propietarios", - "SETUP_ENABLE_STEPPEDPRIV": "Habilitar jerarquía de privilegios por escalones", - "SETUP_ENABLE_VPNS": "Habilitar VPNs clientes", - "SETUP_ENABLE_WEBFRONT": "Habilitar frente de la web", - "SETUP_ENCODING_STRING": "Ingresar cadena de codificación", - "SETUP_IPHUB_KEY": "Ingresar clave api de iphub.info", - "SETUP_SAY_NAME": "Ingresar nombre a decir personalizado", - "SETUP_SERVER_IP": "Ingresar Dirección IP del servidor", - "SETUP_SERVER_MANUALLOG": "Ingresar manualmente la ruta del archivo de registro", - "SETUP_SERVER_PORT": "Ingresar puerto del servidor", - "SETUP_SERVER_RCON": "Ingresar contraseña RCon del servidor", - "SETUP_SERVER_SAVE": "Configuración guardada, añadir otra", - "SETUP_SERVER_USEIW5M": "Usar analizador Pluto IW5", - "SETUP_SERVER_USET6M": "Usar analizador Pluto T6", - "SETUP_SOCIAL_LINK": "Ingresar link del medio de comunicación", - "SETUP_SOCIAL_TITLE": "Ingresa el nombre de la red de comunicación", - "SETUP_USE_CUSTOMENCODING": "Usar analizador de codificación personalizado", - "WEBFRONT_ACTION_BAN_NAME": "Ban", - "WEBFRONT_ACTION_LABEL_ID": "ID del Cliente", - "WEBFRONT_ACTION_LABEL_PASSWORD": "Contraseña", - "WEBFRONT_ACTION_LABEL_REASON": "Razón", - "WEBFRONT_ACTION_LOGIN_NAME": "Inicio de sesión", - "WEBFRONT_ACTION_UNBAN_NAME": "Desban", - "WEBFRONT_CLIENT_META_FALSE": "No está", - "WEBFRONT_CLIENT_META_JOINED": "Se unió con el alias", - "WEBFRONT_CLIENT_META_MASKED": "Enmascarado", - "WEBFRONT_CLIENT_META_TRUE": "Está", - "WEBFRONT_CLIENT_PRIVILEGED_TITLE": "Clientes privilegiados", - "WEBFRONT_CLIENT_PROFILE_TITLE": "Perfil", - "WEBFRONT_CLIENT_SEARCH_MATCHING": "Clientes que concuerdan", - "WEBFRONT_CONSOLE_EXECUTE": "Ejecutar", - "WEBFRONT_CONSOLE_TITLE": "Consola Web", - "WEBFRONT_ERROR_DESC": "IW4MAdmin encontró un error", - "WEBFRONT_ERROR_GENERIC_DESC": "Un error ha ocurrido mientras se procesaba tu solicitud", - "WEBFRONT_ERROR_GENERIC_TITLE": "¡Lo lamento!", - "WEBFRONT_ERROR_TITLE": "¡Error!", - "WEBFRONT_HOME_TITLE": "Vista general del servidor", - "WEBFRONT_NAV_CONSOLE": "Consola", - "WEBFRONT_NAV_DISCORD": "Discord", - "WEBFRONT_NAV_HOME": "Inicio", - "WEBFRONT_NAV_LOGOUT": "Cerrar sesión", - "WEBFRONT_NAV_PENALTIES": "Sanciones", - "WEBFRONT_NAV_PRIVILEGED": "Administradores", - "WEBFRONT_NAV_PROFILE": "Perfil del cliente", - "WEBFRONT_NAV_SEARCH": "Encontrar cliente", - "WEBFRONT_NAV_SOCIAL": "Social", - "WEBFRONT_PENALTY_TEMPLATE_ADMIN": "Administrador", - "WEBFRONT_PENALTY_TEMPLATE_AGO": "atrás", - "WEBFRONT_PENALTY_TEMPLATE_NAME": "Nombre", - "WEBFRONT_PENALTY_TEMPLATE_OFFENSE": "Ofensa", - "WEBFRONT_PENALTY_TEMPLATE_REMAINING": "restante", - "WEBFRONT_PENALTY_TEMPLATE_SHOW": "Mostrar", - "WEBFRONT_PENALTY_TEMPLATE_SHOWONLY": "Mostrar solamente", - "WEBFRONT_PENALTY_TEMPLATE_TIME": "Tiempo/Restante", - "WEBFRONT_PENALTY_TEMPLATE_TYPE": "Tipo", - "WEBFRONT_PENALTY_TITLE": "Faltas del cliente", - "WEBFRONT_PROFILE_FSEEN": "Primera vez visto hace", - "WEBFRONT_PROFILE_LEVEL": "Nivel", - "WEBFRONT_PROFILE_LSEEN": "Última vez visto hace", - "WEBFRONT_PROFILE_PLAYER": "Jugadas", - "PLUGIN_STATS_SETUP_ENABLEAC": "Habilitar anti-trampas junto al servidor (solo IW4)", - "PLUGIN_STATS_ERROR_ADD": "No se puedo añadir servidor a los estados del servidor", - "PLUGIN_STATS_CHEAT_DETECTED": "Pareces estar haciendo trampa", - "PLUGINS_STATS_TEXT_KDR": "KDR", - "PLUGINS_STATS_META_SPM": "Puntaje por minuto", - "PLUGINS_WELCOME_USERANNOUNCE": "^5{{ClientName}} ^7llega desde ^5{{ClientLocation}}", - "PLUGINS_WELCOME_USERWELCOME": "¡Bienvenido ^5{{ClientName}}^7, esta es tu visita numero ^5{{TimesConnected}} ^7 en el servidor!", - "PLUGINS_WELCOME_PRIVANNOUNCE": "{{ClientLevel}} {{ClientName}} Se ha unido al servidor", - "PLUGINS_LOGIN_AUTH": "No registrado", - "PLUGINS_PROFANITY_SETUP_ENABLE": "Habilitar la disuasión de blasfemias", - "PLUGINS_PROFANITY_WARNMSG": "Por favor no uses blasfemias en este servidor", - "PLUGINS_PROFANITY_KICKMSG": "Excesivo uso de blasfemias", - "GLOBAL_DEBUG": "Depurar", - "COMMANDS_UNFLAG_DESC": "Remover marca del cliente", - "COMMANDS_UNFLAG_FAIL": "Tu no puedes desmarcar", - "COMMANDS_UNFLAG_NOTFLAGGED": "El cliente no está marcado", - "COMMANDS_FLAG_ALREADYFLAGGED": "El cliente yá se encuentra marcado", - "PLUGINS_STATS_COMMANDS_MOSTPLAYED_TEXT": "Más jugado", - "PLUGINS_STATS_COMMANDS_MOSTPLAYED_DESC": "ver el Top 5 de jugadores dedicados en el servidor", - "WEBFRONT_PROFILE_MESSAGES": "Mensajes", - "WEBFRONT_CLIENT_META_CONNECTIONS": "Conexiones", - "PLUGINS_STATS_COMMANDS_TOPSTATS_RATING": "Clasificación", - "PLUGINS_STATS_COMMANDS_PERFORMANCE": "Desempeño" - } - } -} \ No newline at end of file diff --git a/Application/Localization/IW4MAdmin.pt-BR.json b/Application/Localization/IW4MAdmin.pt-BR.json deleted file mode 100644 index dbab9ce51..000000000 --- a/Application/Localization/IW4MAdmin.pt-BR.json +++ /dev/null @@ -1,269 +0,0 @@ -{ - "LocalizationName": "pt-BR", - "LocalizationIndex": { - "Set": { - "BROADCAST_OFFLINE": "IW4MAdmin ficou offline", - "BROADCAST_ONLINE": "^5IW4MADMIN ^7agora está ^2ONLINE", - "COMMAND_HELP_OPTIONAL": "opcional", - "COMMAND_HELP_SYNTAX": "sintaxe:", - "COMMAND_MISSINGARGS": "Não foram oferecidos argumentos suficientes", - "COMMAND_NOACCESS": "Você não tem acesso a este comando", - "COMMAND_NOTAUTHORIZED": "Você não está autorizado a executar este comando", - "COMMAND_TARGET_MULTI": "Vários jogadores correspondem a esse nome", - "COMMAND_TARGET_NOTFOUND": "Não é possível encontrar o jogador especificado", - "COMMAND_UNKNOWN": "Você digitou um comando desconhecido", - "COMMANDS_ADMINS_DESC": "lista os clientes privilegiados conectados no momento", - "COMMANDS_ADMINS_NONE": "Não há administradores visíveis online", - "COMMANDS_ALIAS_ALIASES": "Nomes registrados", - "COMMANDS_ALIAS_DESC": "obtém a lista de histórico de nomes que o jogador usou no servidor", - "COMMANDS_ALIAS_IPS": "IPs", - "COMMANDS_ARGS_CLEAR": "apagar", - "COMMANDS_ARGS_CLIENTID": "id do jogador", - "COMMANDS_ARGS_COMMANDS": "comandos", - "COMMANDS_ARGS_DURATION": "duração (m|h|d|w|y)", - "COMMANDS_ARGS_INACTIVE": "dias inativos", - "COMMANDS_ARGS_LEVEL": "nível", - "COMMANDS_ARGS_MAP": "mapa", - "COMMANDS_ARGS_MESSAGE": "mensagem", - "COMMANDS_ARGS_PASSWORD": "senha", - "COMMANDS_ARGS_PLAYER": "jogador", - "COMMANDS_ARGS_REASON": "razão", - "COMMANDS_BAN_DESC": "banir permanentemente um cliente do servidor", - "COMMANDS_BAN_FAIL": "Você não pode banir permanentemente", - "COMMANDS_BAN_SUCCESS": "foi banido permanentemente", - "COMMANDS_BANINFO_DESC": "obtém informações sobre um banimento para um jogador", - "COMMANDS_BANINFO_NONE": "Nenhum banimento ativo foi encontrado para esse jogador", - "COMMANDS_BANINO_SUCCESS": "foi banido por ^5{0} ^7por:", - "COMMANDS_FASTRESTART_DESC": "reinicializa rapidamente o mapa atual, não recomendável o uso várias vezes seguidas", - "COMMANDS_FASTRESTART_MASKED": "O mapa foi reiniciado rapidamente", - "COMMANDS_FASTRESTART_UNMASKED": "reiniciou rapidamente o mapa", - "COMMANDS_FIND_DESC": "acha o jogador na base de dados", - "COMMANDS_FIND_EMPTY": "Nenhum jogador foi encontrado", - "COMMANDS_FIND_MIN": "Por favor, insira pelo menos 3 caracteres", - "COMMANDS_FLAG_DESC": "sinaliza um cliente suspeito e anuncia aos administradores ao entrar no servidor", - "COMMANDS_FLAG_FAIL": "Você não pode sinalizar", - "COMMANDS_FLAG_SUCCESS": "Você sinalizou", - "COMMANDS_FLAG_UNFLAG": "Você tirou a sinalização de", - "COMMANDS_HELP_DESC": "lista todos os comandos disponíveis", - "COMMANDS_HELP_MOREINFO": "Digite !help para saber como usar o comando", - "COMMANDS_HELP_NOTFOUND": "Não foi possível encontrar esse comando", - "COMMANDS_IP_DESC": "mostrar o seu endereço IP externo", - "COMMANDS_IP_SUCCESS": "Seu endereço IP externo é", - "COMMANDS_KICK_DESC": "expulsa o jogador pelo nome", - "COMMANDS_KICK_FAIL": "Você não tem os privilégios necessários para expulsar", - "COMMANDS_KICK_SUCCESS": "foi expulso", - "COMMANDS_LIST_DESC": "lista os jogadores ativos na partida", - "COMMANDS_MAP_DESC": "muda para o mapa especificado", - "COMMANDS_MAP_SUCCESS": "Mudando o mapa para", - "COMMANDS_MAP_UKN": "Tentando mudar para o mapa desconhecido", - "COMMANDS_MAPROTATE": "Rotacionando o mapa em ^55 ^7segundos", - "COMMANDS_MAPROTATE_DESC": "avança para o próximo mapa da rotação", - "COMMANDS_MASK_DESC": "esconde a sua presença como um jogador privilegiado", - "COMMANDS_MASK_OFF": "Você foi desmascarado", - "COMMANDS_MASK_ON": "Você agora está mascarado", - "COMMANDS_OWNER_DESC": "reivindica a propriedade do servidor", - "COMMANDS_OWNER_FAIL": "Este servidor já tem um dono", - "COMMANDS_OWNER_SUCCESS": "Parabéns, você reivindicou a propriedade deste servidor!", - "COMMANDS_PASSWORD_FAIL": "Sua senha deve ter pelo menos 5 caracteres", - "COMMANDS_PASSWORD_SUCCESS": "Sua senha foi configurada com sucesso", - "COMMANDS_PING_DESC": "mostra o quanto de latência tem o jogador", - "COMMANDS_PING_SELF": "Sua latência é", - "COMMANDS_PING_TARGET": "latência é", - "COMMANDS_PLUGINS_DESC": "mostra todos os plugins que estão carregados", - "COMMANDS_PLUGINS_LOADED": "Plugins carregados", - "COMMANDS_PM_DESC": "envia a mensagem para o outro jogador de maneira privada, use /!pm para ter efeito, se possível", - "COMMANDS_PRUNE_DESC": "rebaixa qualquer jogador privilegiado que não tenha se conectado recentemente (o padrão é 30 dias)", - "COMMANDS_PRUNE_FAIL": "Número inválido de dias ativo", - "COMMANDS_PRUNE_SUCCESS": "usuários privilegiados inativos foram removidos", - "COMMANDS_QUIT_DESC": "sair do IW4MAdmin", - "COMMANDS_RCON_DESC": "envia o comando Rcon para o servidor", - "COMMANDS_RCON_SUCCESS": "O comando para o RCon foi enviado com sucesso!", - "COMMANDS_REPORT_DESC": "denuncia o jogador por comportamento suspeito", - "COMMANDS_REPORT_FAIL": "Você não pode reportar", - "COMMANDS_REPORT_FAIL_CAMP": "Você não pode denunciar o jogador por camperar", - "COMMANDS_REPORT_FAIL_DUPLICATE": "Você já denunciou o jogador", - "COMMANDS_REPORT_FAIL_SELF": "Você não pode reportar a si mesmo", - "COMMANDS_REPORT_SUCCESS": "Obrigado pela sua denúncia, um administrador foi notificado", - "COMMANDS_REPORTS_CLEAR_SUCCESS": "Lista de denúncias limpa com sucesso", - "COMMANDS_REPORTS_DESC": "obtém ou limpa as denúncias recentes", - "COMMANDS_REPORTS_NONE": "Ninguém foi denunciado ainda", - "COMMANDS_RULES_DESC": "lista as regras do servidor", - "COMMANDS_RULES_NONE": "O proprietário do servidor não definiu nenhuma regra, sinta-se livre", - "COMMANDS_SAY_DESC": "transmite mensagem para todos os jogadores", - "COMMANDS_SETLEVEL_DESC": "define o jogador para o nível de privilégio especificado", - "COMMANDS_SETLEVEL_FAIL": "grupo especificado inválido", - "COMMANDS_SETLEVEL_LEVELTOOHIGH": "Você só pode promover do ^5{0} ^7para ^5{1} ^7ou um nível menor", - "COMMANDS_SETLEVEL_OWNER": "Só pode haver 1 dono. Modifique suas configurações se vários proprietários forem necessários", - "COMMANDS_SETLEVEL_SELF": "Você não pode mudar seu próprio nível", - "COMMANDS_SETLEVEL_STEPPEDDISABLED": "Este servidor não permite que você promova", - "COMMANDS_SETLEVEL_SUCCESS": "foi promovido com sucesso", - "COMMANDS_SETLEVEL_SUCCESS_TARGET": "Parabéns! Você foi promovido para", - "COMMANDS_SETPASSWORD_DESC": "define sua senha de autenticação", - "COMMANDS_TEMPBAN_DESC": "bane temporariamente um jogador por tempo especificado (o padrão é 1 hora)", - "COMMANDS_TEMPBAN_FAIL": "Você não pode banir temporariamente", - "COMMANDS_TEMPBAN_SUCCESS": "foi banido temporariamente por", - "COMMANDS_UNBAN_DESC": "retira o banimento de um jogador pelo seu ID", - "COMMANDS_UNBAN_FAIL": "não está banido", - "COMMANDS_UNBAN_SUCCESS": "Foi retirado o banimento com sucesso", - "COMMANDS_UPTIME_DESC": "obtém o tempo de execução do aplicativo a quando aberto", - "COMMANDS_UPTIME_TEXT": "está online por", - "COMMANDS_USAGE_DESC": "vê quanto o aplicativo está usando de memória RAM do seu computador", - "COMMANDS_USAGE_TEXT": "está usando", - "COMMANDS_WARN_DESC": "adverte o cliente por infringir as regras", - "COMMANDS_WARN_FAIL": "Você não tem os privilégios necessários para advertir", - "COMMANDS_WARNCLEAR_DESC": "remove todos os avisos para um cliente", - "COMMANDS_WARNCLEAR_SUCCESS": "Todos as advertências foram apagados para", - "COMMANDS_WHO_DESC": "dá informações sobre você", - "GLOBAL_TIME_DAYS": "dias", - "GLOBAL_ERROR": "Erro", - "GLOBAL_TIME_HOURS": "horas", - "GLOBAL_INFO": "Informação", - "GLOBAL_TIME_MINUTES": "minutos", - "GLOBAL_REPORT": "Se você está suspeitando alguém de alguma ^5TRAPAÇA ^7use o comando ^5!report", - "GLOBAL_VERBOSE": "Detalhe", - "GLOBAL_WARNING": "AVISO", - "MANAGER_CONNECTION_REST": "A conexão foi reestabelecida com", - "MANAGER_CONSOLE_NOSERV": "Não há servidores sendo monitorados neste momento", - "MANAGER_EXIT": "Pressione qualquer tecla para sair...", - "MANAGER_INIT_FAIL": "Erro fatal durante a inicialização", - "MANAGER_MONITORING_TEXT": "Agora monitorando", - "MANAGER_SHUTDOWN_SUCCESS": "Desligamento concluído", - "MANAGER_VERSION_CURRENT": "Está é a sua versão", - "MANAGER_VERSION_FAIL": "Não foi possível obter a versão mais recente do IW4MAdmin", - "MANAGER_VERSION_SUCCESS": "O IW4MAdmin está atualizado", - "MANAGER_VERSION_UPDATE": "Há uma atualização disponível. A versão mais recente é", - "PLUGIN_IMPORTER_NOTFOUND": "Não foram encontrados plugins para carregar", - "PLUGIN_IMPORTER_REGISTERCMD": "Comando registrado", - "PLUGINS_LOGIN_COMMANDS_LOGIN_DESC": "Inicie a sua sessão usando a senha", - "PLUGINS_LOGIN_COMMANDS_LOGIN_FAIL": "Sua senha está errada", - "PLUGINS_LOGIN_COMMANDS_LOGIN_SUCCESS": "Você agora está conectado", - "PLUGINS_STATS_COMMANDS_RESET_DESC": "reinicia suas estatísticas para uma nova", - "PLUGINS_STATS_COMMANDS_RESET_FAIL": "Você deve estar conectado a um servidor para reiniciar as suas estatísticas", - "PLUGINS_STATS_COMMANDS_RESET_SUCCESS": "Suas estatísticas nesse servidor foram reiniciadas", - "PLUGINS_STATS_COMMANDS_TOP_DESC": "visualiza os 5 melhores jogadores do servidor", - "PLUGINS_STATS_COMMANDS_TOP_TEXT": "Top Jogadores", - "PLUGINS_STATS_COMMANDS_VIEW_DESC": "mostra suas estatísticas", - "PLUGINS_STATS_COMMANDS_VIEW_FAIL": "Não foi encontrado o jogador que você especificou", - "PLUGINS_STATS_COMMANDS_VIEW_FAIL_INGAME": "o jogador especificado deve estar dentro do jogo", - "PLUGINS_STATS_COMMANDS_VIEW_FAIL_INGAME_SELF": "Você deve estar no jogo para ver suas estatísticas", - "PLUGINS_STATS_COMMANDS_VIEW_SUCCESS": "Estatísticas para", - "PLUGINS_STATS_TEXT_DEATHS": "MORTES", - "PLUGINS_STATS_TEXT_KILLS": "BAIXAS", - "PLUGINS_STATS_TEXT_NOQUALIFY": "Não há ainda jogadores qualificados para os primeiros lugares", - "PLUGINS_STATS_TEXT_SKILL": "HABILIDADE", - "SERVER_BAN_APPEAL": "apele em", - "SERVER_BAN_PREV": "Banido preventivamente por", - "SERVER_BAN_TEXT": "Você está banido", - "SERVER_ERROR_ADDPLAYER": "Não foi possível adicionar o jogador", - "SERVER_ERROR_COMMAND_INGAME": "Ocorreu um erro interno ao processar seu comando", - "SERVER_ERROR_COMMAND_LOG": "o comando gerou um erro", - "SERVER_ERROR_COMMUNICATION": "Não foi possível fazer a comunicação com", - "SERVER_ERROR_DNE": "não existe", - "SERVER_ERROR_DVAR": "Não foi possível obter o valor de dvar para", - "SERVER_ERROR_DVAR_HELP": "garanta que o servidor tenha um mapa carregado", - "SERVER_ERROR_EXCEPTION": "Exceção inesperada em", - "SERVER_ERROR_LOG": "Log do jogo inválido", - "SERVER_ERROR_PLUGIN": "Ocorreu um erro ao carregar o plug-in", - "SERVER_ERROR_POLLING": "reduzir a taxa de sondagem do server", - "SERVER_ERROR_UNFIXABLE": "Não monitorando o servidor devido a erros incorrigíveis", - "SERVER_KICK_CONTROLCHARS": "Seu nome não pode conter caracteres de controle", - "SERVER_KICK_GENERICNAME": "Por favor, mude o seu nome usando o comando /name no console", - "SERVER_KICK_MINNAME": "Seu nome deve conter no mínimo três caracteres", - "SERVER_KICK_NAME_INUSE": "Seu nome já está sendo usado por outra pessoa", - "SERVER_KICK_TEXT": "Você foi expulso", - "SERVER_KICK_VPNS_NOTALLOWED": "VPNs não são permitidas neste servidor", - "SERVER_PLUGIN_ERROR": "Um plugin gerou erro", - "SERVER_REPORT_COUNT": "Você tem ^5{0} ^7denúncias recentes", - "SERVER_TB_REMAIN": "Você está banido temporariamente", - "SERVER_TB_TEXT": "Você está banido temporariamente", - "SERVER_WARNING": "AVISO", - "SERVER_WARNLIMT_REACHED": "Avisos demais! Leia o chat da próxima vez", - "SERVER_WEBSITE_GENERIC": "este é o site do servidor", - "SETUP_DISPLAY_SOCIAL": "Digitar link do convite do seu site no módulo da web (Discord, YouTube, etc.)", - "SETUP_ENABLE_CUSTOMSAY": "Habilitar a customização do nome do comando say", - "SETUP_ENABLE_MULTIOWN": "Habilitar vários proprietários", - "SETUP_ENABLE_STEPPEDPRIV": "Ativar hierarquia de privilégios escalonada", - "SETUP_ENABLE_VPNS": "Habilitar que os usuários usem VPN", - "SETUP_ENABLE_WEBFRONT": "Habilitar o módulo da web do IW4MAdmin", - "SETUP_ENCODING_STRING": "Digite sequência de codificação", - "SETUP_IPHUB_KEY": "Digite iphub.info api key", - "SETUP_SAY_NAME": "Habilitar a customização do nome do comando say", - "SETUP_SERVER_IP": "Digite o endereço IP do servidor", - "SETUP_SERVER_MANUALLOG": "Insira o caminho do arquivo de log manualmente", - "SETUP_SERVER_PORT": "Digite a porta do servidor", - "SETUP_SERVER_RCON": "Digite a senha do RCon do servidor", - "SETUP_SERVER_SAVE": "Configuração salva, adicionar outra", - "SETUP_SERVER_USEIW5M": "Usar analisador Pluto IW5 ", - "SETUP_SERVER_USET6M": "Usar analisador Pluto T6 ", - "SETUP_SOCIAL_LINK": "Digite o link da Rede Social", - "SETUP_SOCIAL_TITLE": "Digite o nome da rede social", - "SETUP_USE_CUSTOMENCODING": "Usar o analisador de codificação customizado", - "WEBFRONT_ACTION_BAN_NAME": "Banir", - "WEBFRONT_ACTION_LABEL_ID": "ID do cliente", - "WEBFRONT_ACTION_LABEL_PASSWORD": "Senha", - "WEBFRONT_ACTION_LABEL_REASON": "Razão", - "WEBFRONT_ACTION_LOGIN_NAME": "Iniciar a sessão", - "WEBFRONT_ACTION_UNBAN_NAME": "Retirar o banimento", - "WEBFRONT_CLIENT_META_FALSE": "Não está", - "WEBFRONT_CLIENT_META_JOINED": "Entrou com o nome", - "WEBFRONT_CLIENT_META_MASKED": "Mascarado", - "WEBFRONT_CLIENT_META_TRUE": "Está", - "WEBFRONT_CLIENT_PRIVILEGED_TITLE": "Jogadores Privilegiados", - "WEBFRONT_CLIENT_PROFILE_TITLE": "Pefil", - "WEBFRONT_CLIENT_SEARCH_MATCHING": "Jogadores correspondidos", - "WEBFRONT_CONSOLE_EXECUTE": "Executar", - "WEBFRONT_CONSOLE_TITLE": "Console da Web", - "WEBFRONT_ERROR_DESC": "O IW4MAdmin encontrou um erro", - "WEBFRONT_ERROR_GENERIC_DESC": "Ocorreu um erro ao processar seu pedido", - "WEBFRONT_ERROR_GENERIC_TITLE": "Desculpe!", - "WEBFRONT_ERROR_TITLE": "Erro!", - "WEBFRONT_HOME_TITLE": "Visão geral do servidor", - "WEBFRONT_NAV_CONSOLE": "Console", - "WEBFRONT_NAV_DISCORD": "Discord", - "WEBFRONT_NAV_HOME": "Início", - "WEBFRONT_NAV_LOGOUT": "Encerrar a sessão", - "WEBFRONT_NAV_PENALTIES": "Penalidades", - "WEBFRONT_NAV_PRIVILEGED": "Administradores", - "WEBFRONT_NAV_PROFILE": "Perfil do Jogador", - "WEBFRONT_NAV_SEARCH": "Achar jogador", - "WEBFRONT_NAV_SOCIAL": "Rede Social", - "WEBFRONT_PENALTY_TEMPLATE_ADMIN": "Administrador", - "WEBFRONT_PENALTY_TEMPLATE_AGO": "atrás", - "WEBFRONT_PENALTY_TEMPLATE_NAME": "Nome", - "WEBFRONT_PENALTY_TEMPLATE_OFFENSE": "Ofensa", - "WEBFRONT_PENALTY_TEMPLATE_REMAINING": "restantes", - "WEBFRONT_PENALTY_TEMPLATE_SHOW": "Mostrar", - "WEBFRONT_PENALTY_TEMPLATE_SHOWONLY": "Mostrar somente", - "WEBFRONT_PENALTY_TEMPLATE_TIME": "Tempo/Restante", - "WEBFRONT_PENALTY_TEMPLATE_TYPE": "Tipo", - "WEBFRONT_PENALTY_TITLE": "Penalidades dos jogadores", - "WEBFRONT_PROFILE_FSEEN": "Visto primeiro em", - "WEBFRONT_PROFILE_LEVEL": "Nível", - "WEBFRONT_PROFILE_LSEEN": "Visto por último em", - "WEBFRONT_PROFILE_PLAYER": "Jogou", - "PLUGIN_STATS_SETUP_ENABLEAC": "Habilitar a anti-trapaça no servidor (Somente IW4/MW2)", - "PLUGIN_STATS_ERROR_ADD": "Não foi possível adicionar o servidor para as estatísticas do servidor", - "PLUGIN_STATS_CHEAT_DETECTED": "Aparentemente você está trapaceando", - "PLUGINS_STATS_TEXT_KDR": "KDR", - "PLUGINS_STATS_META_SPM": "Pontuação por minuto", - "PLUGINS_WELCOME_USERANNOUNCE": "^5{{ClientName}} ^7 vem de ^5{{ClientLocation}}", - "PLUGINS_WELCOME_USERWELCOME": "Bem-vindo ^5{{ClientName}}^7, esta é a sua visita de número ^5{{TimesConnected}} ^7 no servidor!", - "PLUGINS_WELCOME_PRIVANNOUNCE": "{{ClientLevel}} {{ClientName}} entrou no servidor", - "PLUGINS_LOGIN_AUTH": "não está registrado", - "PLUGINS_PROFANITY_SETUP_ENABLE": "Habilitar o plugin de anti-palavrão", - "PLUGINS_PROFANITY_WARNMSG": "Por favor, não use palavras ofensivas neste servidor", - "PLUGINS_PROFANITY_KICKMSG": "Uso excessivo de palavrão, lave a boca da próxima vez", - "GLOBAL_DEBUG": "Depuração", - "COMMANDS_UNFLAG_DESC": "Remover a sinalização do jogador", - "COMMANDS_UNFLAG_FAIL": "Você não pode retirar a sinalização do jogador", - "COMMANDS_UNFLAG_NOTFLAGGED": "O jogador não está sinalizado", - "COMMANDS_FLAG_ALREADYFLAGGED": "O jogador já está sinalizado", - "PLUGINS_STATS_COMMANDS_MOSTPLAYED_TEXT": "Mais jogado", - "PLUGINS_STATS_COMMANDS_MOSTPLAYED_DESC": "ver o top 5 de jogadores mais dedicados no servidor", - "WEBFRONT_PROFILE_MESSAGES": "Mensagens", - "WEBFRONT_CLIENT_META_CONNECTIONS": "Conexões", - "PLUGINS_STATS_COMMANDS_TOPSTATS_RATING": "Classificação", - "PLUGINS_STATS_COMMANDS_PERFORMANCE": "Desempenho" - } - } -} \ No newline at end of file diff --git a/Application/Localization/IW4MAdmin.ru-RU.json b/Application/Localization/IW4MAdmin.ru-RU.json deleted file mode 100644 index a92b6d9e2..000000000 --- a/Application/Localization/IW4MAdmin.ru-RU.json +++ /dev/null @@ -1,269 +0,0 @@ -{ - "LocalizationName": "ru-RU", - "LocalizationIndex": { - "Set": { - "BROADCAST_OFFLINE": "^5IW4MAdmin ^1ВЫКЛЮЧАЕТСЯ", - "BROADCAST_ONLINE": "^5IW4MADMIN ^7сейчас В СЕТИ", - "COMMAND_HELP_OPTIONAL": "опционально", - "COMMAND_HELP_SYNTAX": "Проблема с выражением мысли ( пересмотри слова)", - "COMMAND_MISSINGARGS": "Приведено недостаточно аргументов", - "COMMAND_NOACCESS": "У вас нет доступа к этой команде", - "COMMAND_NOTAUTHORIZED": "Вы не авторизованы для исполнения этой команды", - "COMMAND_TARGET_MULTI": "Несколько игроков соответствуют этому имени", - "COMMAND_TARGET_NOTFOUND": "Невозможно найти указанного игрока", - "COMMAND_UNKNOWN": "Вы ввели неизвестную команду", - "COMMANDS_ADMINS_DESC": "перечислить присоединенных на данный момент игроков с правами", - "COMMANDS_ADMINS_NONE": "Нет видимых администраторов в сети", - "COMMANDS_ALIAS_ALIASES": "Имена", - "COMMANDS_ALIAS_DESC": "получить прошлые имена и IP игрока", - "COMMANDS_ALIAS_IPS": "IP", - "COMMANDS_ARGS_CLEAR": "очистить", - "COMMANDS_ARGS_CLIENTID": "ID игрока", - "COMMANDS_ARGS_COMMANDS": "команды", - "COMMANDS_ARGS_DURATION": "длительность (m|h|d|w|y)", - "COMMANDS_ARGS_INACTIVE": "дни бездействия", - "COMMANDS_ARGS_LEVEL": "уровень", - "COMMANDS_ARGS_MAP": "карта", - "COMMANDS_ARGS_MESSAGE": "сообщение", - "COMMANDS_ARGS_PASSWORD": "пароль", - "COMMANDS_ARGS_PLAYER": "игрок", - "COMMANDS_ARGS_REASON": "причина", - "COMMANDS_BAN_DESC": "навсегда забанить игрока на сервере", - "COMMANDS_BAN_FAIL": "Вы не можете выдавать бан", - "COMMANDS_BAN_SUCCESS": "был забанен навсегда", - "COMMANDS_BANINFO_DESC": "получить информацию о бане игрока", - "COMMANDS_BANINFO_NONE": "Не найдено действующего бана для этого игрока", - "COMMANDS_BANINO_SUCCESS": "был забанен игроком ^5{0} ^7на:", - "COMMANDS_FASTRESTART_DESC": "перезапустить нынешнюю карту", - "COMMANDS_FASTRESTART_MASKED": "Карта была перезапущена", - "COMMANDS_FASTRESTART_UNMASKED": "перезапустил карту", - "COMMANDS_FIND_DESC": "найти игрока в базе данных", - "COMMANDS_FIND_EMPTY": "Не найдено игроков", - "COMMANDS_FIND_MIN": "Пожалуйста, введите хотя бы 3 символа", - "COMMANDS_FLAG_DESC": "отметить подозрительного игрока и сообщить администраторам, чтобы присоединились", - "COMMANDS_FLAG_FAIL": "Вы не можете ставить отметки", - "COMMANDS_FLAG_SUCCESS": "Вы отметили", - "COMMANDS_FLAG_UNFLAG": "Вы сняли отметку", - "COMMANDS_HELP_DESC": "перечислить все доступные команды", - "COMMANDS_HELP_MOREINFO": "Введите !help <имя команды>, чтобы узнать синтаксис для использования команды", - "COMMANDS_HELP_NOTFOUND": "Не удалось найти эту команду", - "COMMANDS_IP_DESC": "просмотреть ваш внешний IP-адрес", - "COMMANDS_IP_SUCCESS": "Ваш внешний IP:", - "COMMANDS_KICK_DESC": "исключить игрока по имени", - "COMMANDS_KICK_FAIL": "У вас нет достаточных прав, чтобы исключать", - "COMMANDS_KICK_SUCCESS": "был исключен", - "COMMANDS_LIST_DESC": "перечислить действующих игроков", - "COMMANDS_MAP_DESC": "сменить на определенную карту", - "COMMANDS_MAP_SUCCESS": "Смена карты на", - "COMMANDS_MAP_UKN": "Попытка сменить на неизвестную карту", - "COMMANDS_MAPROTATE": "Смена карты через ^55 ^7секунд", - "COMMANDS_MAPROTATE_DESC": "переключиться на следующую карту в ротации", - "COMMANDS_MASK_DESC": "скрыть свое присутствие как игрока с правами", - "COMMANDS_MASK_OFF": "Вы теперь демаскированы", - "COMMANDS_MASK_ON": "Вы теперь замаскированы", - "COMMANDS_OWNER_DESC": "утверить владение сервером", - "COMMANDS_OWNER_FAIL": "Этот сервер уже имеет владельца", - "COMMANDS_OWNER_SUCCESS": "Поздравляю, вы утвердили владение этим сервером!", - "COMMANDS_PASSWORD_FAIL": "Ваш пароль должен быть хотя бы 5 символов в длину", - "COMMANDS_PASSWORD_SUCCESS": "Ваш пароль был успешно установлен", - "COMMANDS_PING_DESC": "получить пинг игрока", - "COMMANDS_PING_SELF": "Ваш пинг:", - "COMMANDS_PING_TARGET": "пинг:", - "COMMANDS_PLUGINS_DESC": "просмотреть все загруженные плагины", - "COMMANDS_PLUGINS_LOADED": "Загруженные плагины", - "COMMANDS_PM_DESC": "отправить сообщение другому игроку", - "COMMANDS_PRUNE_DESC": "понизить любых игроков с правами, которые не подключались за последнее время (по умолчанию: 30 дней)", - "COMMANDS_PRUNE_FAIL": "Неверное количество дней бездействия", - "COMMANDS_PRUNE_SUCCESS": "бездействующих пользователей с правами было сокращено", - "COMMANDS_QUIT_DESC": "покинуть IW4MAdmin", - "COMMANDS_RCON_DESC": "отправить RCon команду на сервер", - "COMMANDS_RCON_SUCCESS": "Успешно отправлена команда RCon", - "COMMANDS_REPORT_DESC": "пожаловаться на игрока за подозрительное поведение", - "COMMANDS_REPORT_FAIL": "Вы не можете пожаловаться", - "COMMANDS_REPORT_FAIL_CAMP": "Вы не можете пожаловаться на игрока за кемперство", - "COMMANDS_REPORT_FAIL_DUPLICATE": "Вы уже пожаловались на этого игрока", - "COMMANDS_REPORT_FAIL_SELF": "Вы не можете пожаловаться на самого себя", - "COMMANDS_REPORT_SUCCESS": "Спасибо за вашу жалобу, администратор оповещен", - "COMMANDS_REPORTS_CLEAR_SUCCESS": "Жалобы успешно очищены", - "COMMANDS_REPORTS_DESC": "получить или очистить последние жалобы", - "COMMANDS_REPORTS_NONE": "Пока нет жалоб на игроков", - "COMMANDS_RULES_DESC": "перечислить правила сервера", - "COMMANDS_RULES_NONE": "Владелец сервера не установил никаких правил", - "COMMANDS_SAY_DESC": "транслировать сообщения всем игрокам", - "COMMANDS_SETLEVEL_DESC": "установить особый уровень прав игроку", - "COMMANDS_SETLEVEL_FAIL": "Указана неверная группа", - "COMMANDS_SETLEVEL_LEVELTOOHIGH": "Вы только можете повысить ^5{0} ^7до ^5{1} ^7или понизить в правах", - "COMMANDS_SETLEVEL_OWNER": "Может быть только 1 владелец. Измените настройки, если требуется несколько владельцов", - "COMMANDS_SETLEVEL_SELF": "Вы не можете изменить свой уровень", - "COMMANDS_SETLEVEL_STEPPEDDISABLED": "Этот сервер не разрешает вам повыситься", - "COMMANDS_SETLEVEL_SUCCESS": "был успешно повышен", - "COMMANDS_SETLEVEL_SUCCESS_TARGET": "Поздравляю! Вы были повышены до", - "COMMANDS_SETPASSWORD_DESC": "установить свой пароль аутентификации", - "COMMANDS_TEMPBAN_DESC": "временно забанить игрока на определенное время (по умолчанию: 1 час)", - "COMMANDS_TEMPBAN_FAIL": "Вы не можете выдавать временный бан", - "COMMANDS_TEMPBAN_SUCCESS": "был временно забанен за", - "COMMANDS_UNBAN_DESC": "разбанить игрока по ID игрока", - "COMMANDS_UNBAN_FAIL": "не забанен", - "COMMANDS_UNBAN_SUCCESS": "Успешно разбанен", - "COMMANDS_UPTIME_DESC": "получить время с начала запуска текущего приложения", - "COMMANDS_UPTIME_TEXT": "был в сети", - "COMMANDS_USAGE_DESC": "узнать о потреблении памяти приложением", - "COMMANDS_USAGE_TEXT": "используется", - "COMMANDS_WARN_DESC": "предупредить игрока за нарушение правил", - "COMMANDS_WARN_FAIL": "У вас недостаточно прав, чтобы выносить предупреждения", - "COMMANDS_WARNCLEAR_DESC": "удалить все предупреждения у игрока", - "COMMANDS_WARNCLEAR_SUCCESS": "Все предупреждения очищены у", - "COMMANDS_WHO_DESC": "предоставить информацию о себе", - "GLOBAL_TIME_DAYS": "дней", - "GLOBAL_ERROR": "Ошибка", - "GLOBAL_TIME_HOURS": "часов", - "GLOBAL_INFO": "Информация", - "GLOBAL_TIME_MINUTES": "минут", - "GLOBAL_REPORT": "Если вы подозреваете кого-то в ^5ЧИТЕРСТВЕ^7, используйте команду ^5!report", - "GLOBAL_VERBOSE": "Подробно", - "GLOBAL_WARNING": "Предупреждение", - "MANAGER_CONNECTION_REST": "Соединение было восстановлено с помощью", - "MANAGER_CONSOLE_NOSERV": "На данный момент нет серверов под мониторингом", - "MANAGER_EXIT": "Нажмите любую клавишу, чтобы выйти...", - "MANAGER_INIT_FAIL": "Критическая ошибка во время инициализации", - "MANAGER_MONITORING_TEXT": "Идет мониторинг", - "MANAGER_SHUTDOWN_SUCCESS": "Выключение завершено", - "MANAGER_VERSION_CURRENT": "Ваша версия:", - "MANAGER_VERSION_FAIL": "Не удалось получить последнюю версию IW4MAdmin", - "MANAGER_VERSION_SUCCESS": "IW4MAdmin обновлен", - "MANAGER_VERSION_UPDATE": "- есть обновление. Последняя версия:", - "PLUGIN_IMPORTER_NOTFOUND": "Не найдено плагинов для загрузки", - "PLUGIN_IMPORTER_REGISTERCMD": "Зарегистрированная команда", - "PLUGINS_LOGIN_COMMANDS_LOGIN_DESC": "войти, используя пароль", - "PLUGINS_LOGIN_COMMANDS_LOGIN_FAIL": "Ваш пароль неверный", - "PLUGINS_LOGIN_COMMANDS_LOGIN_SUCCESS": "Вы теперь вошли", - "PLUGINS_STATS_COMMANDS_RESET_DESC": "сбросить вашу статистику под ноль", - "PLUGINS_STATS_COMMANDS_RESET_FAIL": "Вы должны быть подключены к серверу, чтобы сбросить свою статистику", - "PLUGINS_STATS_COMMANDS_RESET_SUCCESS": "Ваша статистика на этом сервере была сброшена", - "PLUGINS_STATS_COMMANDS_TOP_DESC": "показать топ-5 лучших игроков на этом сервере", - "PLUGINS_STATS_COMMANDS_TOP_TEXT": "Лучшие игроки", - "PLUGINS_STATS_COMMANDS_VIEW_DESC": "просмотреть свою статистику", - "PLUGINS_STATS_COMMANDS_VIEW_FAIL": "Не удается найти игрока, которого вы указали.", - "PLUGINS_STATS_COMMANDS_VIEW_FAIL_INGAME": "Указанный игрок должен быть в игре", - "PLUGINS_STATS_COMMANDS_VIEW_FAIL_INGAME_SELF": "Вы должны быть в игре, чтобы просмотреть свою статистику", - "PLUGINS_STATS_COMMANDS_VIEW_SUCCESS": "Статистика", - "PLUGINS_STATS_TEXT_DEATHS": "СМЕРТЕЙ", - "PLUGINS_STATS_TEXT_KILLS": "УБИЙСТВ", - "PLUGINS_STATS_TEXT_NOQUALIFY": "Ещё нет совернующихся игроков за лучшую статистику", - "PLUGINS_STATS_TEXT_SKILL": "МАСТЕРСТВО", - "SERVER_BAN_APPEAL": "оспорить:", - "SERVER_BAN_PREV": "Ранее забанены за", - "SERVER_BAN_TEXT": "Вы забанены", - "SERVER_ERROR_ADDPLAYER": "Не удалось добавить игрока", - "SERVER_ERROR_COMMAND_INGAME": "Произошла внутренняя ошибка при обработке вашей команды", - "SERVER_ERROR_COMMAND_LOG": "команда сгенерировала ошибку", - "SERVER_ERROR_COMMUNICATION": "Не удалось связаться с", - "SERVER_ERROR_DNE": "не существует", - "SERVER_ERROR_DVAR": "Не удалось получить значение dvar:", - "SERVER_ERROR_DVAR_HELP": "убедитесь, что на сервере загружена карта", - "SERVER_ERROR_EXCEPTION": "Неожиданное исключение на", - "SERVER_ERROR_LOG": "Неверный игровой лог-файл", - "SERVER_ERROR_PLUGIN": "Произошла ошибка загрузки плагина", - "SERVER_ERROR_POLLING": "снижение частоты обновления данных", - "SERVER_ERROR_UNFIXABLE": "Мониторинг сервера выключен из-за неисправимых ошибок", - "SERVER_KICK_CONTROLCHARS": "Ваше имя не должно содержать спецсимволы", - "SERVER_KICK_GENERICNAME": "Пожалуйста, смените ваше имя, используя /name", - "SERVER_KICK_MINNAME": "Ваше имя должно содержать хотя бы 3 символа", - "SERVER_KICK_NAME_INUSE": "Ваше имя используется кем-то другим", - "SERVER_KICK_TEXT": "Вы были исключены", - "SERVER_KICK_VPNS_NOTALLOWED": "Использование VPN не разрешено на этом сервере", - "SERVER_PLUGIN_ERROR": "Плагин образовал ошибку", - "SERVER_REPORT_COUNT": "Имеется ^5{0} ^7жалоб за последнее время", - "SERVER_TB_REMAIN": "Вы временно забанены", - "SERVER_TB_TEXT": "Вы временно забанены", - "SERVER_WARNING": "ПРЕДУПРЕЖДЕНИЕ", - "SERVER_WARNLIMT_REACHED": "Слишком много предупреждений", - "SERVER_WEBSITE_GENERIC": "веб-сайт этого сервера", - "SETUP_DISPLAY_SOCIAL": "Отображать ссылку на социальную сеть в веб-интерфейсе (Discord, веб-сайт, ВК, и т.д.)", - "SETUP_ENABLE_CUSTOMSAY": "Включить кастомное имя для чата", - "SETUP_ENABLE_MULTIOWN": "Включить поддержку нескольких владельцев", - "SETUP_ENABLE_STEPPEDPRIV": "Включить последовательную иерархию прав", - "SETUP_ENABLE_VPNS": "Включить поддержку VPN у игроков", - "SETUP_ENABLE_WEBFRONT": "Включить веб-интерфейс", - "SETUP_ENCODING_STRING": "Введите кодировку", - "SETUP_IPHUB_KEY": "Введите iphub.info api-ключ", - "SETUP_SAY_NAME": "Введите кастомное имя для чата", - "SETUP_SERVER_IP": "Введите IP-адрес сервера", - "SETUP_SERVER_MANUALLOG": "Введите путь для лог-файла", - "SETUP_SERVER_PORT": "Введите порт сервера", - "SETUP_SERVER_RCON": "Введите RCon пароль сервера", - "SETUP_SERVER_SAVE": "Настройки сохранены, добавить", - "SETUP_SERVER_USEIW5M": "Использовать парсер Pluto IW5", - "SETUP_SERVER_USET6M": "Использовать парсер Pluto T6", - "SETUP_SOCIAL_LINK": "Ввести ссылку на социальную сеть", - "SETUP_SOCIAL_TITLE": "Ввести имя социальной сети", - "SETUP_USE_CUSTOMENCODING": "Использовать кастомную кодировку парсера", - "WEBFRONT_ACTION_BAN_NAME": "Забанить", - "WEBFRONT_ACTION_LABEL_ID": "ID игрока", - "WEBFRONT_ACTION_LABEL_PASSWORD": "Пароль", - "WEBFRONT_ACTION_LABEL_REASON": "Причина", - "WEBFRONT_ACTION_LOGIN_NAME": "Войти", - "WEBFRONT_ACTION_UNBAN_NAME": "Разбанить", - "WEBFRONT_CLIENT_META_FALSE": "не", - "WEBFRONT_CLIENT_META_JOINED": "Присоединился с именем", - "WEBFRONT_CLIENT_META_MASKED": "Замаскирован", - "WEBFRONT_CLIENT_META_TRUE": "Это", - "WEBFRONT_CLIENT_PRIVILEGED_TITLE": "Игроки с правами", - "WEBFRONT_CLIENT_PROFILE_TITLE": "Профиль", - "WEBFRONT_CLIENT_SEARCH_MATCHING": "Подходящие игроки", - "WEBFRONT_CONSOLE_EXECUTE": "Выполнить", - "WEBFRONT_CONSOLE_TITLE": "Веб-консоль", - "WEBFRONT_ERROR_DESC": "IW4MAdmin столкнулся с ошибкой", - "WEBFRONT_ERROR_GENERIC_DESC": "Произошла ошибка во время обработки вашего запроса", - "WEBFRONT_ERROR_GENERIC_TITLE": "Извините!", - "WEBFRONT_ERROR_TITLE": "Ошибка!", - "WEBFRONT_HOME_TITLE": "Обзор сервера", - "WEBFRONT_NAV_CONSOLE": "Консоль", - "WEBFRONT_NAV_DISCORD": "Дискорд ", - "WEBFRONT_NAV_HOME": "Обзор Серверов ", - "WEBFRONT_NAV_LOGOUT": "Выйти", - "WEBFRONT_NAV_PENALTIES": "Наказания", - "WEBFRONT_NAV_PRIVILEGED": "Админы", - "WEBFRONT_NAV_PROFILE": "Профиль игрока", - "WEBFRONT_NAV_SEARCH": "Найти игрока", - "WEBFRONT_NAV_SOCIAL": "Соц. сети", - "WEBFRONT_PENALTY_TEMPLATE_ADMIN": "Админ", - "WEBFRONT_PENALTY_TEMPLATE_AGO": "назад", - "WEBFRONT_PENALTY_TEMPLATE_NAME": "Имя", - "WEBFRONT_PENALTY_TEMPLATE_OFFENSE": "Нарушение", - "WEBFRONT_PENALTY_TEMPLATE_REMAINING": "осталось", - "WEBFRONT_PENALTY_TEMPLATE_SHOW": "Показывать", - "WEBFRONT_PENALTY_TEMPLATE_SHOWONLY": "Показывать только", - "WEBFRONT_PENALTY_TEMPLATE_TIME": "Время/Осталось", - "WEBFRONT_PENALTY_TEMPLATE_TYPE": "Тип", - "WEBFRONT_PENALTY_TITLE": "Наказания игроков", - "WEBFRONT_PROFILE_FSEEN": "Впервые заходил", - "WEBFRONT_PROFILE_LEVEL": "Уровень", - "WEBFRONT_PROFILE_LSEEN": "Последний раз заходил", - "WEBFRONT_PROFILE_PLAYER": "Наиграл", - "PLUGIN_STATS_SETUP_ENABLEAC": "Включить серверный античит (только IW4)", - "PLUGIN_STATS_ERROR_ADD": "Не удалось добавить сервер в статистику серверов", - "PLUGIN_STATS_CHEAT_DETECTED": "Кажется, вы читерите", - "PLUGINS_STATS_TEXT_KDR": "Вот так ..", - "PLUGINS_STATS_META_SPM": "Счёт за минуту", - "PLUGINS_WELCOME_USERANNOUNCE": "^5{{ClientName}} ^7из ^5{{ClientLocation}}", - "PLUGINS_WELCOME_USERWELCOME": "Добро пожаловать, ^5{{ClientName}}^7. Это ваше ^5{{TimesConnected}} ^7подключение по счёту!", - "PLUGINS_WELCOME_PRIVANNOUNCE": "{{ClientLevel}} {{ClientName}} присоединился к серверу", - "PLUGINS_LOGIN_AUTH": "Сперва Подключись", - "PLUGINS_PROFANITY_SETUP_ENABLE": "Включить сдерживание ненормативной лексики", - "PLUGINS_PROFANITY_WARNMSG": "Пожалуйта, не ругайтесь на этом сервере", - "PLUGINS_PROFANITY_KICKMSG": "Чрезмерное употребление ненормативной лексики", - "GLOBAL_DEBUG": "Отлаживание ", - "COMMANDS_UNFLAG_DESC": "Снять все подозрение с игрока !", - "COMMANDS_UNFLAG_FAIL": "Вы не можете снять подозрения..", - "COMMANDS_UNFLAG_NOTFLAGGED": "Игрок без подозрения !", - "COMMANDS_FLAG_ALREADYFLAGGED": "Игрок помечен ! ", - "PLUGINS_STATS_COMMANDS_MOSTPLAYED_TEXT": "Самые популярные", - "PLUGINS_STATS_COMMANDS_MOSTPLAYED_DESC": "просмотр 5 лучших игроков на сервере", - "WEBFRONT_PROFILE_MESSAGES": "Сообщения", - "WEBFRONT_CLIENT_META_CONNECTIONS": "Подключения", - "PLUGINS_STATS_COMMANDS_TOPSTATS_RATING": "Рейтинг", - "PLUGINS_STATS_COMMANDS_PERFORMANCE": "Эффективность" - } - } -} \ No newline at end of file diff --git a/Plugins/ScriptPlugins/ParserRektT5M.js b/Plugins/ScriptPlugins/ParserRektT5M.js index 5a1213fd5..40774e767 100644 --- a/Plugins/ScriptPlugins/ParserRektT5M.js +++ b/Plugins/ScriptPlugins/ParserRektT5M.js @@ -17,7 +17,7 @@ var plugin = { eventParser.Configuration.GameDirectory = 'data'; rconParser.Configuration.CommandPrefixes.RConResponse = '\xff\xff\xff\xff\1print'; - rconParser.Configuration.CommandPrefixes.Tell = 'contell {0} {1}'; + rconParser.Configuration.CommandPrefixes.Tell = 'tell {0} {1}'; rconParser.Configuration.CommandPrefixes.RConGetInfo = undefined; rconParser.Version = 'Call of Duty Multiplayer - Ship COD_T5_S MP build 7.0.189 CL(1022875) CODPCAB-V64 CEG Wed Nov 02 18:02:23 2011 win-x86'; diff --git a/Plugins/Stats/Controllers/StatsController.cs b/Plugins/Stats/Controllers/StatsController.cs index 7e882964b..1874736ba 100644 --- a/Plugins/Stats/Controllers/StatsController.cs +++ b/Plugins/Stats/Controllers/StatsController.cs @@ -71,15 +71,32 @@ namespace IW4MAdmin.Plugins.Stats.Web.Controllers ClientId = message.ClientId, Message = message.Message, Name = message.Client.CurrentAlias.Name, - Time = message.TimeSent + Time = message.TimeSent, + ServerGame = message.Server.GameName ?? Server.Game.IW4 }; #if DEBUG == true var messagesSql = iqMessages.ToSql(); #endif - var messages = await iqMessages.ToListAsync(); + foreach (var message in messages) + { + if (message.Message.IsQuickMessage()) + { + try + { + var quickMessages = Manager.GetApplicationSettings().Configuration() + .QuickMessages + .First(_qm => _qm.Game == message.ServerGame); + message.Message = quickMessages.Messages[message.Message.Substring(1)]; + message.IsQuickMessage = true; + + } + catch { } + } + } + return View("_MessageContext", messages); } } diff --git a/Plugins/Stats/Helpers/StatManager.cs b/Plugins/Stats/Helpers/StatManager.cs index ab7eb1e3f..edc3a0d62 100644 --- a/Plugins/Stats/Helpers/StatManager.cs +++ b/Plugins/Stats/Helpers/StatManager.cs @@ -222,13 +222,22 @@ namespace IW4MAdmin.Plugins.Stats.Helpers { Port = sv.GetPort(), EndPoint = sv.ToString(), - ServerId = serverId + ServerId = serverId, + GameName = sv.GameName }; server = serverSet.Add(server).Entity; // this doesn't need to be async as it's during initialization ctx.SaveChanges(); } + + // we want to set the gamename up if it's never been set, or it changed + else if (!server.GameName.HasValue || server.GameName.HasValue && server.GameName.Value != sv.GameName) + { + server.GameName = sv.GameName; + ctx.Entry(server).Property(_prop => _prop.GameName).IsModified = true; + ctx.SaveChanges(); + } } // check to see if the stats have ever been initialized diff --git a/Plugins/Stats/Models/EFServer.cs b/Plugins/Stats/Models/EFServer.cs index 3aa5bc7fc..104254165 100644 --- a/Plugins/Stats/Models/EFServer.cs +++ b/Plugins/Stats/Models/EFServer.cs @@ -2,6 +2,7 @@ using SharedLibraryCore.Database.Models; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using static SharedLibraryCore.Server; namespace IW4MAdmin.Plugins.Stats.Models { @@ -13,5 +14,6 @@ namespace IW4MAdmin.Plugins.Stats.Models [Required] public int Port { get; set; } public string EndPoint { get; set; } + public Game? GameName { get; set; } } } diff --git a/Plugins/Stats/Plugin.cs b/Plugins/Stats/Plugin.cs index 354da570e..211b8ecbd 100644 --- a/Plugins/Stats/Plugin.cs +++ b/Plugins/Stats/Plugin.cs @@ -408,11 +408,36 @@ namespace IW4MAdmin.Plugins.Stats messageMeta = await messages.Select(m => new ProfileMeta() { Key = null, - Value = m.Message, + Value = new { m.Message, m.Server.GameName }, When = m.TimeSent, Extra = m.ServerId.ToString(), Type = ProfileMeta.MetaType.ChatMessage }).ToListAsync(); + + foreach (var message in messageMeta) + { + if ((message.Value.Message as string).IsQuickMessage()) + { + try + { + var quickMessages = ServerManager.GetApplicationSettings().Configuration() + .QuickMessages + .First(_qm => _qm.Game == message.Value.GameName); + message.Value = quickMessages.Messages[(message.Value.Message as string).Substring(1)]; + message.Type = ProfileMeta.MetaType.QuickMessage; + } + catch + { + message.Value = message.Value.Message; + } + } + + else + { + message.Value = message.Value.Message; + } + } + } return messageMeta; diff --git a/Plugins/Web/StatsWeb/Views/Stats/_MessageContext.cshtml b/Plugins/Web/StatsWeb/Views/Stats/_MessageContext.cshtml index 311d36b03..34ae40317 100644 --- a/Plugins/Web/StatsWeb/Views/Stats/_MessageContext.cshtml +++ b/Plugins/Web/StatsWeb/Views/Stats/_MessageContext.cshtml @@ -8,7 +8,7 @@
@foreach (var message in Model) { - @message.Name — @message.Message
+ @message.Name@message.Message
}
\ No newline at end of file diff --git a/SharedLibraryCore/Database/DatabaseContext.cs b/SharedLibraryCore/Database/DatabaseContext.cs index b55876779..b9d9b10ff 100644 --- a/SharedLibraryCore/Database/DatabaseContext.cs +++ b/SharedLibraryCore/Database/DatabaseContext.cs @@ -4,7 +4,6 @@ using SharedLibraryCore.Database.Models; using SharedLibraryCore.Interfaces; using System; using System.Collections.Generic; -using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; @@ -45,8 +44,9 @@ namespace SharedLibraryCore.Database public override void Dispose() { #if DEBUG == true - activeContextCount--; + Console.WriteLine($"Disposed DB Context #{activeContextCount}"); + activeContextCount--; #endif } diff --git a/SharedLibraryCore/Dtos/ChatInfo.cs b/SharedLibraryCore/Dtos/ChatInfo.cs index 6c2d089b5..c67687f12 100644 --- a/SharedLibraryCore/Dtos/ChatInfo.cs +++ b/SharedLibraryCore/Dtos/ChatInfo.cs @@ -1,4 +1,5 @@ using System; +using static SharedLibraryCore.Server; namespace SharedLibraryCore.Dtos { @@ -8,5 +9,7 @@ namespace SharedLibraryCore.Dtos public string Message { get; set; } public DateTime Time { get; set; } public string Name { get; set; } + public Game ServerGame { get; set; } + public bool IsQuickMessage { get; set; } } } \ No newline at end of file diff --git a/SharedLibraryCore/Dtos/ProfileMeta.cs b/SharedLibraryCore/Dtos/ProfileMeta.cs index 07b4abd3f..98af69d5f 100644 --- a/SharedLibraryCore/Dtos/ProfileMeta.cs +++ b/SharedLibraryCore/Dtos/ProfileMeta.cs @@ -16,6 +16,7 @@ namespace SharedLibraryCore.Dtos ChatMessage, Penalized, ReceivedPenalty, + QuickMessage } public DateTime When { get; set; } diff --git a/SharedLibraryCore/Migrations/20190423142128_AddGameNameToEFServer.Designer.cs b/SharedLibraryCore/Migrations/20190423142128_AddGameNameToEFServer.Designer.cs new file mode 100644 index 000000000..3c9e23081 --- /dev/null +++ b/SharedLibraryCore/Migrations/20190423142128_AddGameNameToEFServer.Designer.cs @@ -0,0 +1,699 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using SharedLibraryCore.Database; + +namespace SharedLibraryCore.Migrations +{ + [DbContext(typeof(DatabaseContext))] + [Migration("20190423142128_AddGameNameToEFServer")] + partial class AddGameNameToEFServer + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.2-servicing-10034"); + + modelBuilder.Entity("IW4MAdmin.Plugins.Stats.Models.EFACSnapshot", b => + { + b.Property("SnapshotId") + .ValueGeneratedOnAdd(); + + b.Property("Active"); + + b.Property("ClientId"); + + b.Property("CurrentSessionLength"); + + b.Property("CurrentStrain"); + + b.Property("CurrentViewAngleId"); + + b.Property("Deaths"); + + b.Property("Distance"); + + b.Property("EloRating"); + + b.Property("HitDestinationId"); + + b.Property("HitLocation"); + + b.Property("HitOriginId"); + + b.Property("HitType"); + + b.Property("Hits"); + + b.Property("Kills"); + + b.Property("LastStrainAngleId"); + + b.Property("SessionAngleOffset"); + + b.Property("SessionSPM"); + + b.Property("SessionScore"); + + b.Property("StrainAngleBetween"); + + b.Property("TimeSinceLastEvent"); + + b.Property("WeaponId"); + + b.Property("When"); + + b.HasKey("SnapshotId"); + + b.HasIndex("ClientId"); + + b.HasIndex("CurrentViewAngleId"); + + b.HasIndex("HitDestinationId"); + + b.HasIndex("HitOriginId"); + + b.HasIndex("LastStrainAngleId"); + + b.ToTable("EFACSnapshot"); + }); + + modelBuilder.Entity("IW4MAdmin.Plugins.Stats.Models.EFClientKill", b => + { + b.Property("KillId") + .ValueGeneratedOnAdd(); + + b.Property("Active"); + + b.Property("AttackerId"); + + b.Property("Damage"); + + b.Property("DeathOriginVector3Id"); + + b.Property("DeathType"); + + b.Property("Fraction"); + + b.Property("HitLoc"); + + b.Property("IsKill"); + + b.Property("KillOriginVector3Id"); + + b.Property("Map"); + + b.Property("ServerId"); + + b.Property("VictimId"); + + b.Property("ViewAnglesVector3Id"); + + b.Property("VisibilityPercentage"); + + b.Property("Weapon"); + + b.Property("When"); + + b.HasKey("KillId"); + + b.HasIndex("AttackerId"); + + b.HasIndex("DeathOriginVector3Id"); + + b.HasIndex("KillOriginVector3Id"); + + b.HasIndex("ServerId"); + + b.HasIndex("VictimId"); + + b.HasIndex("ViewAnglesVector3Id"); + + b.ToTable("EFClientKills"); + }); + + modelBuilder.Entity("IW4MAdmin.Plugins.Stats.Models.EFClientMessage", b => + { + b.Property("MessageId") + .ValueGeneratedOnAdd(); + + b.Property("Active"); + + b.Property("ClientId"); + + b.Property("Message"); + + b.Property("ServerId"); + + b.Property("TimeSent"); + + b.HasKey("MessageId"); + + b.HasIndex("ClientId"); + + b.HasIndex("ServerId"); + + b.HasIndex("TimeSent"); + + b.ToTable("EFClientMessages"); + }); + + modelBuilder.Entity("IW4MAdmin.Plugins.Stats.Models.EFClientRatingHistory", b => + { + b.Property("RatingHistoryId") + .ValueGeneratedOnAdd(); + + b.Property("Active"); + + b.Property("ClientId"); + + b.HasKey("RatingHistoryId"); + + b.HasIndex("ClientId"); + + b.ToTable("EFClientRatingHistory"); + }); + + modelBuilder.Entity("IW4MAdmin.Plugins.Stats.Models.EFClientStatistics", b => + { + b.Property("ClientId"); + + b.Property("ServerId"); + + b.Property("Active"); + + b.Property("Deaths"); + + b.Property("EloRating"); + + b.Property("Kills"); + + b.Property("MaxStrain"); + + b.Property("RollingWeightedKDR"); + + b.Property("SPM"); + + b.Property("Skill"); + + b.Property("TimePlayed"); + + b.Property("VisionAverage"); + + b.HasKey("ClientId", "ServerId"); + + b.HasIndex("ServerId"); + + b.ToTable("EFClientStatistics"); + }); + + modelBuilder.Entity("IW4MAdmin.Plugins.Stats.Models.EFHitLocationCount", b => + { + b.Property("HitLocationCountId") + .ValueGeneratedOnAdd(); + + b.Property("Active"); + + b.Property("ClientId") + .HasColumnName("EFClientStatistics_ClientId"); + + b.Property("HitCount"); + + b.Property("HitOffsetAverage"); + + b.Property("Location"); + + b.Property("MaxAngleDistance"); + + b.Property("ServerId") + .HasColumnName("EFClientStatistics_ServerId"); + + b.HasKey("HitLocationCountId"); + + b.HasIndex("ServerId"); + + b.HasIndex("ClientId", "ServerId"); + + b.ToTable("EFHitLocationCounts"); + }); + + modelBuilder.Entity("IW4MAdmin.Plugins.Stats.Models.EFRating", b => + { + b.Property("RatingId") + .ValueGeneratedOnAdd(); + + b.Property("Active"); + + b.Property("ActivityAmount"); + + b.Property("Newest"); + + b.Property("Performance"); + + b.Property("Ranking"); + + b.Property("RatingHistoryId"); + + b.Property("ServerId"); + + b.Property("When"); + + b.HasKey("RatingId"); + + b.HasIndex("Performance"); + + b.HasIndex("Ranking"); + + b.HasIndex("RatingHistoryId"); + + b.HasIndex("ServerId"); + + b.HasIndex("When"); + + b.ToTable("EFRating"); + }); + + modelBuilder.Entity("IW4MAdmin.Plugins.Stats.Models.EFServer", b => + { + b.Property("ServerId"); + + b.Property("Active"); + + b.Property("EndPoint"); + + b.Property("GameName"); + + b.Property("Port"); + + b.HasKey("ServerId"); + + b.ToTable("EFServers"); + }); + + modelBuilder.Entity("IW4MAdmin.Plugins.Stats.Models.EFServerStatistics", b => + { + b.Property("StatisticId") + .ValueGeneratedOnAdd(); + + b.Property("Active"); + + b.Property("ServerId"); + + b.Property("TotalKills"); + + b.Property("TotalPlayTime"); + + b.HasKey("StatisticId"); + + b.HasIndex("ServerId"); + + b.ToTable("EFServerStatistics"); + }); + + modelBuilder.Entity("SharedLibraryCore.Database.Models.EFAlias", b => + { + b.Property("AliasId") + .ValueGeneratedOnAdd(); + + b.Property("Active"); + + b.Property("DateAdded"); + + b.Property("IPAddress"); + + b.Property("LinkId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(24); + + b.HasKey("AliasId"); + + b.HasIndex("IPAddress"); + + b.HasIndex("LinkId"); + + b.HasIndex("Name"); + + b.ToTable("EFAlias"); + }); + + modelBuilder.Entity("SharedLibraryCore.Database.Models.EFAliasLink", b => + { + b.Property("AliasLinkId") + .ValueGeneratedOnAdd(); + + b.Property("Active"); + + b.HasKey("AliasLinkId"); + + b.ToTable("EFAliasLinks"); + }); + + modelBuilder.Entity("SharedLibraryCore.Database.Models.EFChangeHistory", b => + { + b.Property("ChangeHistoryId") + .ValueGeneratedOnAdd(); + + b.Property("Active"); + + b.Property("Comment") + .HasMaxLength(128); + + b.Property("CurrentValue"); + + b.Property("OriginEntityId"); + + b.Property("PreviousValue"); + + b.Property("TargetEntityId"); + + b.Property("TimeChanged"); + + b.Property("TypeOfChange"); + + b.HasKey("ChangeHistoryId"); + + b.ToTable("EFChangeHistory"); + }); + + modelBuilder.Entity("SharedLibraryCore.Database.Models.EFClient", b => + { + b.Property("ClientId") + .ValueGeneratedOnAdd(); + + b.Property("Active"); + + b.Property("AliasLinkId"); + + b.Property("Connections"); + + b.Property("CurrentAliasId"); + + b.Property("FirstConnection"); + + b.Property("LastConnection"); + + b.Property("Level"); + + b.Property("Masked"); + + b.Property("NetworkId"); + + b.Property("Password"); + + b.Property("PasswordSalt"); + + b.Property("TotalConnectionTime"); + + b.HasKey("ClientId"); + + b.HasIndex("AliasLinkId"); + + b.HasIndex("CurrentAliasId"); + + b.HasIndex("NetworkId") + .IsUnique(); + + b.ToTable("EFClients"); + }); + + modelBuilder.Entity("SharedLibraryCore.Database.Models.EFMeta", b => + { + b.Property("MetaId") + .ValueGeneratedOnAdd(); + + b.Property("Active"); + + b.Property("ClientId"); + + b.Property("Created"); + + b.Property("Extra"); + + b.Property("Key") + .IsRequired() + .HasMaxLength(32); + + b.Property("Updated"); + + b.Property("Value") + .IsRequired(); + + b.HasKey("MetaId"); + + b.HasIndex("ClientId"); + + b.HasIndex("Key"); + + b.ToTable("EFMeta"); + }); + + modelBuilder.Entity("SharedLibraryCore.Database.Models.EFPenalty", b => + { + b.Property("PenaltyId") + .ValueGeneratedOnAdd(); + + b.Property("Active"); + + b.Property("AutomatedOffense"); + + b.Property("Expires"); + + b.Property("IsEvadedOffense"); + + b.Property("LinkId"); + + b.Property("OffenderId"); + + b.Property("Offense") + .IsRequired(); + + b.Property("PunisherId"); + + b.Property("Type"); + + b.Property("When"); + + b.HasKey("PenaltyId"); + + b.HasIndex("LinkId"); + + b.HasIndex("OffenderId"); + + b.HasIndex("PunisherId"); + + b.ToTable("EFPenalties"); + }); + + modelBuilder.Entity("SharedLibraryCore.Helpers.Vector3", b => + { + b.Property("Vector3Id") + .ValueGeneratedOnAdd(); + + b.Property("EFACSnapshotSnapshotId"); + + b.Property("X"); + + b.Property("Y"); + + b.Property("Z"); + + b.HasKey("Vector3Id"); + + b.HasIndex("EFACSnapshotSnapshotId"); + + b.ToTable("Vector3"); + }); + + modelBuilder.Entity("IW4MAdmin.Plugins.Stats.Models.EFACSnapshot", b => + { + b.HasOne("SharedLibraryCore.Database.Models.EFClient", "Client") + .WithMany() + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("SharedLibraryCore.Helpers.Vector3", "CurrentViewAngle") + .WithMany() + .HasForeignKey("CurrentViewAngleId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("SharedLibraryCore.Helpers.Vector3", "HitDestination") + .WithMany() + .HasForeignKey("HitDestinationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("SharedLibraryCore.Helpers.Vector3", "HitOrigin") + .WithMany() + .HasForeignKey("HitOriginId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("SharedLibraryCore.Helpers.Vector3", "LastStrainAngle") + .WithMany() + .HasForeignKey("LastStrainAngleId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("IW4MAdmin.Plugins.Stats.Models.EFClientKill", b => + { + b.HasOne("SharedLibraryCore.Database.Models.EFClient", "Attacker") + .WithMany() + .HasForeignKey("AttackerId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("SharedLibraryCore.Helpers.Vector3", "DeathOrigin") + .WithMany() + .HasForeignKey("DeathOriginVector3Id"); + + b.HasOne("SharedLibraryCore.Helpers.Vector3", "KillOrigin") + .WithMany() + .HasForeignKey("KillOriginVector3Id"); + + b.HasOne("IW4MAdmin.Plugins.Stats.Models.EFServer", "Server") + .WithMany() + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("SharedLibraryCore.Database.Models.EFClient", "Victim") + .WithMany() + .HasForeignKey("VictimId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("SharedLibraryCore.Helpers.Vector3", "ViewAngles") + .WithMany() + .HasForeignKey("ViewAnglesVector3Id"); + }); + + modelBuilder.Entity("IW4MAdmin.Plugins.Stats.Models.EFClientMessage", b => + { + b.HasOne("SharedLibraryCore.Database.Models.EFClient", "Client") + .WithMany() + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("IW4MAdmin.Plugins.Stats.Models.EFServer", "Server") + .WithMany() + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("IW4MAdmin.Plugins.Stats.Models.EFClientRatingHistory", b => + { + b.HasOne("SharedLibraryCore.Database.Models.EFClient", "Client") + .WithMany() + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("IW4MAdmin.Plugins.Stats.Models.EFClientStatistics", b => + { + b.HasOne("SharedLibraryCore.Database.Models.EFClient", "Client") + .WithMany() + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("IW4MAdmin.Plugins.Stats.Models.EFServer", "Server") + .WithMany() + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("IW4MAdmin.Plugins.Stats.Models.EFHitLocationCount", b => + { + b.HasOne("SharedLibraryCore.Database.Models.EFClient", "Client") + .WithMany() + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("IW4MAdmin.Plugins.Stats.Models.EFServer", "Server") + .WithMany() + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("IW4MAdmin.Plugins.Stats.Models.EFClientStatistics") + .WithMany("HitLocations") + .HasForeignKey("ClientId", "ServerId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("IW4MAdmin.Plugins.Stats.Models.EFRating", b => + { + b.HasOne("IW4MAdmin.Plugins.Stats.Models.EFClientRatingHistory", "RatingHistory") + .WithMany("Ratings") + .HasForeignKey("RatingHistoryId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("IW4MAdmin.Plugins.Stats.Models.EFServer", "Server") + .WithMany() + .HasForeignKey("ServerId"); + }); + + modelBuilder.Entity("IW4MAdmin.Plugins.Stats.Models.EFServerStatistics", b => + { + b.HasOne("IW4MAdmin.Plugins.Stats.Models.EFServer", "Server") + .WithMany() + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SharedLibraryCore.Database.Models.EFAlias", b => + { + b.HasOne("SharedLibraryCore.Database.Models.EFAliasLink", "Link") + .WithMany("Children") + .HasForeignKey("LinkId") + .OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity("SharedLibraryCore.Database.Models.EFClient", b => + { + b.HasOne("SharedLibraryCore.Database.Models.EFAliasLink", "AliasLink") + .WithMany() + .HasForeignKey("AliasLinkId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("SharedLibraryCore.Database.Models.EFAlias", "CurrentAlias") + .WithMany() + .HasForeignKey("CurrentAliasId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SharedLibraryCore.Database.Models.EFMeta", b => + { + b.HasOne("SharedLibraryCore.Database.Models.EFClient", "Client") + .WithMany("Meta") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("SharedLibraryCore.Database.Models.EFPenalty", b => + { + b.HasOne("SharedLibraryCore.Database.Models.EFAliasLink", "Link") + .WithMany("ReceivedPenalties") + .HasForeignKey("LinkId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("SharedLibraryCore.Database.Models.EFClient", "Offender") + .WithMany("ReceivedPenalties") + .HasForeignKey("OffenderId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("SharedLibraryCore.Database.Models.EFClient", "Punisher") + .WithMany("AdministeredPenalties") + .HasForeignKey("PunisherId") + .OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity("SharedLibraryCore.Helpers.Vector3", b => + { + b.HasOne("IW4MAdmin.Plugins.Stats.Models.EFACSnapshot") + .WithMany("PredictedViewAngles") + .HasForeignKey("EFACSnapshotSnapshotId"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/SharedLibraryCore/Migrations/20190423142128_AddGameNameToEFServer.cs b/SharedLibraryCore/Migrations/20190423142128_AddGameNameToEFServer.cs new file mode 100644 index 000000000..28e7155c5 --- /dev/null +++ b/SharedLibraryCore/Migrations/20190423142128_AddGameNameToEFServer.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace SharedLibraryCore.Migrations +{ + public partial class AddGameNameToEFServer : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "GameName", + table: "EFServers", + nullable: true); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "GameName", + table: "EFServers"); + } + } +} diff --git a/SharedLibraryCore/Migrations/DatabaseContextModelSnapshot.cs b/SharedLibraryCore/Migrations/DatabaseContextModelSnapshot.cs index 2ecfd4260..9480f0c5f 100644 --- a/SharedLibraryCore/Migrations/DatabaseContextModelSnapshot.cs +++ b/SharedLibraryCore/Migrations/DatabaseContextModelSnapshot.cs @@ -283,6 +283,8 @@ namespace SharedLibraryCore.Migrations b.Property("EndPoint"); + b.Property("GameName"); + b.Property("Port"); b.HasKey("ServerId"); @@ -432,7 +434,8 @@ namespace SharedLibraryCore.Migrations b.Property("Extra"); b.Property("Key") - .IsRequired(); + .IsRequired() + .HasMaxLength(32); b.Property("Updated"); diff --git a/SharedLibraryCore/RCon/Connection.cs b/SharedLibraryCore/RCon/Connection.cs index b4fa6debe..13e255c74 100644 --- a/SharedLibraryCore/RCon/Connection.cs +++ b/SharedLibraryCore/RCon/Connection.cs @@ -120,7 +120,7 @@ namespace SharedLibraryCore.RCon retrySend: using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp) { - //DontFragment = true, + DontFragment = true, Ttl = 100, ExclusiveAddressUse = true, }) @@ -138,7 +138,7 @@ namespace SharedLibraryCore.RCon if (response.Length == 0 && waitForResponse) { - throw new Exception(); + throw new NetworkException("Expected response but got 0 bytes back"); } connectionState.OnComplete.Release(1); @@ -149,18 +149,16 @@ namespace SharedLibraryCore.RCon { if (connectionState.ConnectionAttempts < StaticHelpers.AllowedConnectionFails) { - // Log.WriteWarning($"{Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_COMMUNICATION"]} [{this.Endpoint}] ({connectionState.ConnectionAttempts}/{StaticHelpers.AllowedConnectionFails})"); await Task.Delay(StaticHelpers.FloodProtectionInterval); goto retrySend; } connectionState.OnComplete.Release(1); - //Log.WriteDebug(ex.GetExceptionInfo()); throw new NetworkException(Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_COMMUNICATION"].FormatExt(Endpoint)); } } - string responseString = Encoding.GetEncoding("windows-1252").GetString(response, 0, response.Length) + '\n'; + string responseString = defaultEncoding.GetString(response, 0, response.Length) + '\n'; if (responseString.Contains("Invalid password")) { @@ -229,6 +227,8 @@ namespace SharedLibraryCore.RCon } } + rconSocket.Close(); + byte[] response = connectionState.ReceiveBuffer .Take(connectionState.ReceiveEventArgs.BytesTransferred) .ToArray(); diff --git a/SharedLibraryCore/Utilities.cs b/SharedLibraryCore/Utilities.cs index fb8fbeb9c..18acdefac 100644 --- a/SharedLibraryCore/Utilities.cs +++ b/SharedLibraryCore/Utilities.cs @@ -782,6 +782,11 @@ namespace SharedLibraryCore } } + public static bool IsQuickMessage(this string message) + { + return Regex.IsMatch(message, @"^\u0014(?:[A-Z]|_)+$"); + } + #if DEBUG == true private static readonly TypeInfo QueryCompilerTypeInfo = typeof(QueryCompiler).GetTypeInfo(); diff --git a/WebfrontCore/Views/Shared/Components/ProfileMetaList/_List.cshtml b/WebfrontCore/Views/Shared/Components/ProfileMetaList/_List.cshtml index ae91e64c0..182a4d9fd 100644 --- a/WebfrontCore/Views/Shared/Components/ProfileMetaList/_List.cshtml +++ b/WebfrontCore/Views/Shared/Components/ProfileMetaList/_List.cshtml @@ -51,11 +51,13 @@ } @switch (meta.Type) - { - case SharedLibraryCore.Dtos.ProfileMeta.MetaType.ChatMessage: + { + + case SharedLibraryCore.Dtos.ProfileMeta.MetaType.ChatMessage: + case SharedLibraryCore.Dtos.ProfileMeta.MetaType.QuickMessage:
> - @meta.Value + @meta.Value
break; case SharedLibraryCore.Dtos.ProfileMeta.MetaType.ReceivedPenalty: