diff --git a/Application/API/EventAPI.cs b/Application/API/EventAPI.cs
index cc8f0a2d..ec664c0a 100644
--- a/Application/API/EventAPI.cs
+++ b/Application/API/EventAPI.cs
@@ -46,7 +46,7 @@ namespace IW4MAdmin.Application.API
FlaggedMessageCount = 0;
- E.Owner.Broadcast(Utilities.CurrentLocalization.LocalizationSet["GLOBAL_REPORT"]).Wait();
+ E.Owner.Broadcast(Utilities.CurrentLocalization.LocalizationIndex["GLOBAL_REPORT"]).Wait();
Events.Enqueue(new EventInfo(
EventInfo.EventType.ALERT,
EventInfo.EventVersion.IW4MAdmin,
diff --git a/Application/Application.csproj b/Application/Application.csproj
index 4b5d8380..370817d2 100644
--- a/Application/Application.csproj
+++ b/Application/Application.csproj
@@ -60,13 +60,13 @@
Always
-
+
PreserveNewest
-
+
PreserveNewest
-
+
PreserveNewest
diff --git a/Application/Localization/Configure.cs b/Application/Localization/Configure.cs
index ee54bb7b..58d9ba4b 100644
--- a/Application/Localization/Configure.cs
+++ b/Application/Localization/Configure.cs
@@ -9,33 +9,51 @@ namespace IW4MAdmin.Application.Localization
{
public class Configure
{
- public static void Initialize()
+ public static void Initialize(string customLocale)
{
- string currentLocale = Program.ServerManager.GetApplicationSettings().Configuration()?.CustomLocale ??
- CultureInfo.CurrentCulture?.Name?.Substring(0, 2);
+ string currentLocale = string.IsNullOrEmpty(customLocale) ? CultureInfo.CurrentCulture.Name : customLocale;
+ string[] localizationFiles = Directory.GetFiles("Localization", $"*.{currentLocale}.json");
+
+ // culture doesn't exist so we just want language
+ if (localizationFiles.Length == 0)
+ {
+ localizationFiles = Directory.GetFiles("Localization", $"*.{currentLocale.Substring(0, 2)}*.json");
+ }
+
+ // language doesn't exist either so defaulting to english
+ if (localizationFiles.Length == 0)
+ {
+ localizationFiles = Directory.GetFiles("Localization", "*.en-US.json");
+ }
+
+ // this should never happen unless the localization folder is empty
+ if (localizationFiles.Length == 0)
+ {
+ throw new Exception("No localization files were found");
+ }
+
+ var localizationDict = new Dictionary();
+
+ foreach (string filePath in localizationFiles)
+ {
+ var localizationContents = File.ReadAllText(filePath, Encoding.UTF8);
+ var eachLocalizationFile = Newtonsoft.Json.JsonConvert.DeserializeObject(localizationContents);
+
+ foreach (var item in eachLocalizationFile.LocalizationIndex.Set)
+ {
+ if (!localizationDict.TryAdd(item.Key, item.Value))
+ {
+ Program.ServerManager.GetLogger().WriteError($"Could not add locale string {item.Key} to localization");
+ }
+ }
+ }
- if (currentLocale == null)
- throw new Exception("Computer CurrentCulture does not exist");
-#if DEBUG
- // currentLocal = "ru-RU";
-#endif
string localizationFile = $"Localization{Path.DirectorySeparatorChar}IW4MAdmin.{currentLocale}-{currentLocale.ToUpper()}.json";
- string localizationContents;
- if (File.Exists(localizationFile))
+ Utilities.CurrentLocalization = new SharedLibraryCore.Localization.Layout(localizationDict)
{
- localizationContents = File.ReadAllText(localizationFile, Encoding.UTF8);
- }
-
- else
- {
- localizationFile = $"Localization{Path.DirectorySeparatorChar}IW4MAdmin.en-EN.json";
- localizationContents = File.ReadAllText(localizationFile, Encoding.UTF8);
- }
-
- if (localizationContents.Length < 1)
- throw new Exception($"Localization file {localizationFile} does not exist");
- Utilities.CurrentLocalization = Newtonsoft.Json.JsonConvert.DeserializeObject(localizationContents);
+ LocalizationName = currentLocale,
+ };
}
}
}
diff --git a/Application/Localization/IW4MAdmin.en-EN.json b/Application/Localization/IW4MAdmin.en-EN.json
deleted file mode 100644
index e9145bcd..00000000
--- a/Application/Localization/IW4MAdmin.en-EN.json
+++ /dev/null
@@ -1,200 +0,0 @@
-{
- "LocalizationName": "en-US",
- "LocalizationSet": {
- "MANAGER_VERSION_FAIL": "Could not get latest IW4MAdmin version",
- "MANAGER_VERSION_UPDATE": "has an update. Latest version is",
- "MANAGER_VERSION_CURRENT": "Your version is",
- "MANAGER_VERSION_SUCCESS": "IW4MAdmin is up to date",
- "MANAGER_INIT_FAIL": "Fatal error during initialization",
- "MANAGER_EXIT": "Press any key to exit...",
- "MANAGER_SHUTDOWN_SUCCESS": "Shutdown complete",
- "MANAGER_MONITORING_TEXT": "Now monitoring",
- "MANAGER_CONNECTION_REST": "Connection has been reestablished with",
- "SETUP_ENABLE_WEBFRONT": "Enable webfront",
- "SETUP_ENABLE_MULTIOWN": "Enable multiple owners",
- "SETUP_ENABLE_STEPPEDPRIV": "Enable stepped privilege hierarchy",
- "SETUP_ENABLE_CUSTOMSAY": "Enable custom say name",
- "SETUP_SAY_NAME": "Enter custom say name",
- "SETUP_USE_CUSTOMENCODING": "Use custom encoding parser",
- "SETUP_ENCODING_STRING": "Enter encoding string",
- "SETUP_ENABLE_VPNS": "Enable client VPNs",
- "SETUP_IPHUB_KEY": "Enter iphub.info api key",
- "SETUP_DISPLAY_DISCORD": "Display discord link on webfront",
- "SETUP_DISCORD_INVITE": "Enter discord invite link",
- "SETUP_SERVER_USET6M": "Use Pluto T6 parser",
- "SETUP_SERVER_USEIW5M": "Use Pluto IW5 Parser",
- "SETUP_SERVER_MANUALLOG": "Enter manual log file path",
- "SETUP_SERVER_IP": "Enter server IP Address",
- "SETUP_SERVER_PORT": "Enter server port",
- "SETUP_SERVER_RCON": "Enter server RCon password",
- "SETUP_SERVER_SAVE": "Configuration saved, add another",
- "SERVER_ERROR_DNE": "does not exist",
- "SERVER_ERROR_LOG": "Invalid game log file",
- "SERVER_ERROR_COMMAND_INGAME": "An internal error occured while processing your command",
- "SERVER_ERROR_COMMAND_LOG": "command generated an error",
- "SERVER_ERROR_UNFIXABLE": "Not monitoring server due to uncorrectable errors",
- "SERVER_ERROR_DVAR": "Could not get the dvar value for",
- "SERVER_ERROR_DVAR_HELP": "ensure the server has a map loaded",
- "SERVER_ERROR_PLUGIN": "An error occured loading plugin",
- "SERVER_ERROR_ADDPLAYER": "Unable to add player",
- "SERVER_ERROR_POLLING": "reducing polling rate",
- "SERVER_ERROR_COMMUNICATION": "Could not communicate with",
- "SERVER_ERROR_EXCEPTION": "Unexpected exception on",
- "SERVER_KICK_VPNS_NOTALLOWED": "VPNs are not allowed on this server",
- "SERVER_KICK_TEXT": "You were kicked",
- "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_GENERICNAME": "Please change your name using /name",
- "SERVER_KICK_CONTROLCHARS": "Your name cannot contain control characters",
- "SERVER_TB_TEXT": "You're temporarily banned",
- "SERVER_TB_REMAIN": "You are temporarily banned",
- "SERVER_BAN_TEXT": "You're banned",
- "SERVER_BAN_PREV": "Previously banned for",
- "SERVER_BAN_APPEAL": "appeal at",
- "SERVER_REPORT_COUNT": "There are ^5{0} ^7recent reports",
- "SERVER_WARNLIMT_REACHED": "Too many warnings",
- "SERVER_WARNING": "WARNING",
- "SERVER_WEBSITE_GENERIC": "this server's website",
- "BROADCAST_ONLINE": "^5IW4MADMIN ^7is now ^2ONLINE",
- "BROADCAST_OFFLINE": "IW4MAdmin is going offline",
- "COMMAND_HELP_SYNTAX": "syntax:",
- "COMMAND_HELP_OPTIONAL": "optional",
- "COMMAND_UNKNOWN": "You entered an unknown command",
- "COMMAND_NOACCESS": "You do not have access to that command",
- "COMMAND_NOTAUTHORIZED": "You are not authorized to execute that command",
- "COMMAND_MISSINGARGS": "Not enough arguments supplied",
- "COMMAND_TARGET_MULTI": "Multiple players match that name",
- "COMMAND_TARGET_NOTFOUND": "Unable to find specified player",
- "PLUGIN_IMPORTER_NOTFOUND": "No plugins found to load",
- "PLUGIN_IMPORTER_REGISTERCMD": "Registered command",
- "COMMANDS_OWNER_SUCCESS": "Congratulations, you have claimed ownership of this server!",
- "COMMANDS_OWNER_FAIL": "This server already has an owner",
- "COMMANDS_WARN_FAIL": "You do not have the required privileges to warn",
- "COMMANDS_WARNCLEAR_SUCCESS": "All warning cleared for",
- "COMMANDS_KICK_SUCCESS": "has been kicked",
- "COMMANDS_KICK_FAIL": "You do not have the required privileges to kick",
- "COMMANDS_TEMPBAN_SUCCESS": "has been temporarily banned for",
- "COMMANDS_TEMPBAN_FAIL": "You cannot temporarily ban",
- "COMMANDS_BAN_SUCCESS": "has been permanently banned",
- "COMMANDS_BAN_FAIL": "You cannot ban",
- "COMMANDS_UNBAN_SUCCESS": "Successfully unbanned",
- "COMMANDS_UNBAN_FAIL": "is not banned",
- "COMMANDS_HELP_NOTFOUND": "Could not find that command",
- "COMMANDS_HELP_MOREINFO": "Type !help to get command usage syntax",
- "COMMANDS_FASTRESTART_UNMASKED": "fast restarted the map",
- "COMMANDS_FASTRESTART_MASKED": "The map has been fast restarted",
- "COMMANDS_MAPROTATE": "Map rotating in ^55 ^7seconds",
- "COMMANDS_SETLEVEL_SELF": "You cannot change your own level",
- "COMMANDS_SETLEVEL_OWNER": "There can only be 1 owner. Modify your settings if multiple owners are required",
- "COMMANDS_SETLEVEL_STEPPEDDISABLED": "This server does not allow you to promote",
- "COMMANDS_SETLEVEL_LEVELTOOHIGH": "You can only promote ^5{0} ^7to ^5{1} ^7or lower privilege",
- "COMMANDS_SETLEVEL_SUCCESS_TARGET": "Congratulations! You have been promoted to",
- "COMMANDS_SETLEVEL_SUCCESS": "was successfully promoted",
- "COMMANDS_SETLEVEL_FAIL": "Invalid group specified",
- "COMMANDS_ADMINS_NONE": "No visible administrators online",
- "COMMANDS_MAP_SUCCESS": "Changing to map",
- "COMMANDS_MAP_UKN": "Attempting to change to unknown map",
- "COMMANDS_FIND_MIN": "Please enter at least 3 characters",
- "COMMANDS_FIND_EMPTY": "No players found",
- "COMMANDS_RULES_NONE": "The server owner has not set any rules",
- "COMMANDS_FLAG_SUCCESS": "You have flagged",
- "COMMANDS_FLAG_UNFLAG": "You have unflagged",
- "COMMANDS_FLAG_FAIL": "You cannot flag",
- "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_FAIL": "You cannot report",
- "COMMANDS_REPORT_SUCCESS": "Thank you for your report, an administrator has been notified",
- "COMMANDS_REPORTS_CLEAR_SUCCESS": "Reports successfully cleared",
- "COMMANDS_REPORTS_NONE": "No players reported yet",
- "COMMANDS_MASK_ON": "You are now masked",
- "COMMANDS_MASK_OFF": "You are now unmasked",
- "COMMANDS_BANINFO_NONE": "No active ban was found for that player",
- "COMMANDS_BANINO_SUCCESS": "was banned by ^5{0} ^7for:",
- "COMMANDS_ALIAS_ALIASES": "Aliases",
- "COMMANDS_ALIAS_IPS": "IPs",
- "COMMANDS_RCON_SUCCESS": "Successfully sent RCon command",
- "COMMANDS_PLUGINS_LOADED": "Loaded Plugins",
- "COMMANDS_IP_SUCCESS": "Your external IP is",
- "COMMANDS_PRUNE_FAIL": "Invalid number of inactive days",
- "COMMANDS_PRUNE_SUCCESS": "inactive privileged users were pruned",
- "COMMANDS_PASSWORD_FAIL": "Your password must be at least 5 characters long",
- "COMMANDS_PASSWORD_SUCCESS": "Your password has been set successfully",
- "COMMANDS_PING_TARGET": "ping is",
- "COMMANDS_PING_SELF": "Your ping is",
- "COMMANDS_QUIT_DESC": "quit IW4MAdmin",
- "COMMANDS_OWNER_DESC": "claim ownership of the server",
- "COMMANDS_WARN_DESC": "warn client for infringing rules",
- "COMMANDS_WARNCLEAR_DESC": "remove all warnings for a client",
- "COMMANDS_KICK_DESC": "kick a client by name",
- "COMMANDS_SAY_DESC": "broadcast message to all clients",
- "COMMANDS_TEMPBAN_DESC": "temporarily ban a client for specified time (defaults to 1 hour)",
- "COMMANDS_BAN_DESC": "permanently ban a client from the server",
- "COMMANDS_UNBAN_DESC": "unban client by client id",
- "COMMANDS_WHO_DESC": "give information about yourself",
- "COMMANDS_LIST_DESC": "list active clients",
- "COMMANDS_HELP_DESC": "list all available commands",
- "COMMANDS_FASTRESTART_DESC": "fast restart current map",
- "COMMANDS_MAPROTATE_DESC": "cycle to the next map in rotation",
- "COMMANDS_SETLEVEL_DESC": "set client to specified privilege level",
- "COMMANDS_USAGE_DESC": "get application memory usage",
- "COMMANDS_USAGE_TEXT": "is using",
- "COMMANDS_UPTIME_DESC": "get current application running time",
- "COMMANDS_UPTIME_TEXT": "has been online for",
- "COMMANDS_ADMINS_DESC": "list currently connected privileged clients",
- "COMMANDS_MAP_DESC": "change to specified map",
- "COMMANDS_FIND_DESC": "find client in database",
- "COMMANDS_RULES_DESC": "list server rules",
- "COMMANDS_PM_DESC": "send message to other client",
- "COMMANDS_FLAG_DESC": "flag a suspicious client and announce to admins on join",
- "COMMANDS_REPORT_DESC": "report a client for suspicious behavior",
- "COMMANDS_REPORTS_DESC": "get or clear recent reports",
- "COMMANDS_MASK_DESC": "hide your presence as a privileged client",
- "COMMANDS_BANINFO_DESC": "get information about a ban for a client",
- "COMMANDS_ALIAS_DESC": "get past aliases and ips of a client",
- "COMMANDS_RCON_DESC": "send rcon command to server",
- "COMMANDS_PLUGINS_DESC": "view all loaded plugins",
- "COMMANDS_IP_DESC": "view your external IP address",
- "COMMANDS_PRUNE_DESC": "demote any privileged clients that have not connected recently (defaults to 30 days)",
- "COMMANDS_SETPASSWORD_DESC": "set your authentication password",
- "COMMANDS_PING_DESC": "get client's ping",
- "COMMANDS_ARGS_PLAYER": "player",
- "COMMANDS_ARGS_REASON": "reason",
- "COMMANDS_ARGS_MESSAGE": "message",
- "COMMANDS_ARGS_DURATION": "duration (m|h|d|w|y)",
- "COMMANDS_ARGS_CLIENTID": "client id",
- "COMMANDS_ARGS_COMMANDS": "commands",
- "COMMANDS_ARGS_LEVEL": "level",
- "COMMANDS_ARGS_MAP": "map",
- "COMMANDS_ARGS_CLEAR": "clear",
- "COMMANDS_ARGS_INACTIVE": "inactive days",
- "COMMANDS_ARGS_PASSWORD": "password",
- "PLUGINS_LOGIN_COMMANDS_LOGIN_DESC": "login using password",
- "PLUGINS_LOGIN_COMMANDS_LOGIN_SUCCESS": "You are now logged in",
- "PLUGINS_LOGIN_COMMANDS_LOGIN_FAIL": "Your password is incorrect",
- "PLUGINS_STATS_COMMANDS_RESET_DESC": "reset your stats to factory-new",
- "PLUGINS_STATS_COMMANDS_RESET_SUCCESS": "Your stats for this server have been reset",
- "PLUGINS_STATS_COMMANDS_RESET_FAIL": "You must be connected to a server to reset your stats",
- "PLUGINS_STATS_COMMANDS_VIEW_DESC": "view your stats",
- "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_FAIL": "Cannot find the player you specified",
- "PLUGINS_STATS_COMMANDS_VIEW_SUCCESS": "Stats for",
- "PLUGINS_STATS_COMMANDS_TOP_DESC": "view the top 5 players in this server",
- "PLUGINS_STATS_COMMANDS_TOP_TEXT": "Top Players",
- "PLUGINS_STATS_TEXT_KILLS": "KILLS",
- "PLUGINS_STATS_TEXT_DEATHS": "DEATHS",
- "PLUGINS_STATS_TEXT_SKILL": "SKILL",
- "GLOBAL_DAYS": "days",
- "GLOBAL_HOURS": "hours",
- "GLOBAL_MINUTES": "minutes",
- "GLOBAL_REPORT": "If you suspect someone of ^5CHEATING ^7use the ^5!report ^7command",
- "GLOBAL_ERROR": "Error",
- "GLOBAL_WARNING": "Warning",
- "GLOBAL_INFO": "Info",
- "GLOBAL_VERBOSE": "Verbose",
-
- "MANAGER_CONSOLE_NOSERV": "No servers are currently being monitored",
- "SERVER_PLUGIN_ERROR": "A plugin generated an error"
- }
-}
\ No newline at end of file
diff --git a/Application/Localization/IW4MAdmin.en-US.json b/Application/Localization/IW4MAdmin.en-US.json
new file mode 100644
index 00000000..a1a39694
--- /dev/null
+++ b/Application/Localization/IW4MAdmin.en-US.json
@@ -0,0 +1,203 @@
+{
+ "LocalizationName": "en-US",
+ "LocalizationIndex": {
+ "Set": {
+ "MANAGER_VERSION_FAIL": "Could not get latest IW4MAdmin version",
+ "MANAGER_VERSION_UPDATE": "has an update. Latest version is",
+ "MANAGER_VERSION_CURRENT": "Your version is",
+ "MANAGER_VERSION_SUCCESS": "IW4MAdmin is up to date",
+ "MANAGER_INIT_FAIL": "Fatal error during initialization",
+ "MANAGER_EXIT": "Press any key to exit...",
+ "MANAGER_SHUTDOWN_SUCCESS": "Shutdown complete",
+ "MANAGER_MONITORING_TEXT": "Now monitoring",
+ "MANAGER_CONNECTION_REST": "Connection has been reestablished with",
+ "SETUP_ENABLE_WEBFRONT": "Enable webfront",
+ "SETUP_ENABLE_MULTIOWN": "Enable multiple owners",
+ "SETUP_ENABLE_STEPPEDPRIV": "Enable stepped privilege hierarchy",
+ "SETUP_ENABLE_CUSTOMSAY": "Enable custom say name",
+ "SETUP_SAY_NAME": "Enter custom say name",
+ "SETUP_USE_CUSTOMENCODING": "Use custom encoding parser",
+ "SETUP_ENCODING_STRING": "Enter encoding string",
+ "SETUP_ENABLE_VPNS": "Enable client VPNs",
+ "SETUP_IPHUB_KEY": "Enter iphub.info api key",
+ "SETUP_DISPLAY_DISCORD": "Display discord link on webfront",
+ "SETUP_DISCORD_INVITE": "Enter discord invite link",
+ "SETUP_SERVER_USET6M": "Use Pluto T6 parser",
+ "SETUP_SERVER_USEIW5M": "Use Pluto IW5 Parser",
+ "SETUP_SERVER_MANUALLOG": "Enter manual log file path",
+ "SETUP_SERVER_IP": "Enter server IP Address",
+ "SETUP_SERVER_PORT": "Enter server port",
+ "SETUP_SERVER_RCON": "Enter server RCon password",
+ "SETUP_SERVER_SAVE": "Configuration saved, add another",
+ "SERVER_ERROR_DNE": "does not exist",
+ "SERVER_ERROR_LOG": "Invalid game log file",
+ "SERVER_ERROR_COMMAND_INGAME": "An internal error occured while processing your command",
+ "SERVER_ERROR_COMMAND_LOG": "command generated an error",
+ "SERVER_ERROR_UNFIXABLE": "Not monitoring server due to uncorrectable errors",
+ "SERVER_ERROR_DVAR": "Could not get the dvar value for",
+ "SERVER_ERROR_DVAR_HELP": "ensure the server has a map loaded",
+ "SERVER_ERROR_PLUGIN": "An error occured loading plugin",
+ "SERVER_ERROR_ADDPLAYER": "Unable to add player",
+ "SERVER_ERROR_POLLING": "reducing polling rate",
+ "SERVER_ERROR_COMMUNICATION": "Could not communicate with",
+ "SERVER_ERROR_EXCEPTION": "Unexpected exception on",
+ "SERVER_KICK_VPNS_NOTALLOWED": "VPNs are not allowed on this server",
+ "SERVER_KICK_TEXT": "You were kicked",
+ "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_GENERICNAME": "Please change your name using /name",
+ "SERVER_KICK_CONTROLCHARS": "Your name cannot contain control characters",
+ "SERVER_TB_TEXT": "You're temporarily banned",
+ "SERVER_TB_REMAIN": "You are temporarily banned",
+ "SERVER_BAN_TEXT": "You're banned",
+ "SERVER_BAN_PREV": "Previously banned for",
+ "SERVER_BAN_APPEAL": "appeal at",
+ "SERVER_REPORT_COUNT": "There are ^5{0} ^7recent reports",
+ "SERVER_WARNLIMT_REACHED": "Too many warnings",
+ "SERVER_WARNING": "WARNING",
+ "SERVER_WEBSITE_GENERIC": "this server's website",
+ "BROADCAST_ONLINE": "^5IW4MADMIN ^7is now ^2ONLINE",
+ "BROADCAST_OFFLINE": "IW4MAdmin is going offline",
+ "COMMAND_HELP_SYNTAX": "syntax:",
+ "COMMAND_HELP_OPTIONAL": "optional",
+ "COMMAND_UNKNOWN": "You entered an unknown command",
+ "COMMAND_NOACCESS": "You do not have access to that command",
+ "COMMAND_NOTAUTHORIZED": "You are not authorized to execute that command",
+ "COMMAND_MISSINGARGS": "Not enough arguments supplied",
+ "COMMAND_TARGET_MULTI": "Multiple players match that name",
+ "COMMAND_TARGET_NOTFOUND": "Unable to find specified player",
+ "PLUGIN_IMPORTER_NOTFOUND": "No plugins found to load",
+ "PLUGIN_IMPORTER_REGISTERCMD": "Registered command",
+ "COMMANDS_OWNER_SUCCESS": "Congratulations, you have claimed ownership of this server!",
+ "COMMANDS_OWNER_FAIL": "This server already has an owner",
+ "COMMANDS_WARN_FAIL": "You do not have the required privileges to warn",
+ "COMMANDS_WARNCLEAR_SUCCESS": "All warning cleared for",
+ "COMMANDS_KICK_SUCCESS": "has been kicked",
+ "COMMANDS_KICK_FAIL": "You do not have the required privileges to kick",
+ "COMMANDS_TEMPBAN_SUCCESS": "has been temporarily banned for",
+ "COMMANDS_TEMPBAN_FAIL": "You cannot temporarily ban",
+ "COMMANDS_BAN_SUCCESS": "has been permanently banned",
+ "COMMANDS_BAN_FAIL": "You cannot ban",
+ "COMMANDS_UNBAN_SUCCESS": "Successfully unbanned",
+ "COMMANDS_UNBAN_FAIL": "is not banned",
+ "COMMANDS_HELP_NOTFOUND": "Could not find that command",
+ "COMMANDS_HELP_MOREINFO": "Type !help to get command usage syntax",
+ "COMMANDS_FASTRESTART_UNMASKED": "fast restarted the map",
+ "COMMANDS_FASTRESTART_MASKED": "The map has been fast restarted",
+ "COMMANDS_MAPROTATE": "Map rotating in ^55 ^7seconds",
+ "COMMANDS_SETLEVEL_SELF": "You cannot change your own level",
+ "COMMANDS_SETLEVEL_OWNER": "There can only be 1 owner. Modify your settings if multiple owners are required",
+ "COMMANDS_SETLEVEL_STEPPEDDISABLED": "This server does not allow you to promote",
+ "COMMANDS_SETLEVEL_LEVELTOOHIGH": "You can only promote ^5{0} ^7to ^5{1} ^7or lower privilege",
+ "COMMANDS_SETLEVEL_SUCCESS_TARGET": "Congratulations! You have been promoted to",
+ "COMMANDS_SETLEVEL_SUCCESS": "was successfully promoted",
+ "COMMANDS_SETLEVEL_FAIL": "Invalid group specified",
+ "COMMANDS_ADMINS_NONE": "No visible administrators online",
+ "COMMANDS_MAP_SUCCESS": "Changing to map",
+ "COMMANDS_MAP_UKN": "Attempting to change to unknown map",
+ "COMMANDS_FIND_MIN": "Please enter at least 3 characters",
+ "COMMANDS_FIND_EMPTY": "No players found",
+ "COMMANDS_RULES_NONE": "The server owner has not set any rules",
+ "COMMANDS_FLAG_SUCCESS": "You have flagged",
+ "COMMANDS_FLAG_UNFLAG": "You have unflagged",
+ "COMMANDS_FLAG_FAIL": "You cannot flag",
+ "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_FAIL": "You cannot report",
+ "COMMANDS_REPORT_SUCCESS": "Thank you for your report, an administrator has been notified",
+ "COMMANDS_REPORTS_CLEAR_SUCCESS": "Reports successfully cleared",
+ "COMMANDS_REPORTS_NONE": "No players reported yet",
+ "COMMANDS_MASK_ON": "You are now masked",
+ "COMMANDS_MASK_OFF": "You are now unmasked",
+ "COMMANDS_BANINFO_NONE": "No active ban was found for that player",
+ "COMMANDS_BANINO_SUCCESS": "was banned by ^5{0} ^7for:",
+ "COMMANDS_ALIAS_ALIASES": "Aliases",
+ "COMMANDS_ALIAS_IPS": "IPs",
+ "COMMANDS_RCON_SUCCESS": "Successfully sent RCon command",
+ "COMMANDS_PLUGINS_LOADED": "Loaded Plugins",
+ "COMMANDS_IP_SUCCESS": "Your external IP is",
+ "COMMANDS_PRUNE_FAIL": "Invalid number of inactive days",
+ "COMMANDS_PRUNE_SUCCESS": "inactive privileged users were pruned",
+ "COMMANDS_PASSWORD_FAIL": "Your password must be at least 5 characters long",
+ "COMMANDS_PASSWORD_SUCCESS": "Your password has been set successfully",
+ "COMMANDS_PING_TARGET": "ping is",
+ "COMMANDS_PING_SELF": "Your ping is",
+ "COMMANDS_QUIT_DESC": "quit IW4MAdmin",
+ "COMMANDS_OWNER_DESC": "claim ownership of the server",
+ "COMMANDS_WARN_DESC": "warn client for infringing rules",
+ "COMMANDS_WARNCLEAR_DESC": "remove all warnings for a client",
+ "COMMANDS_KICK_DESC": "kick a client by name",
+ "COMMANDS_SAY_DESC": "broadcast message to all clients",
+ "COMMANDS_TEMPBAN_DESC": "temporarily ban a client for specified time (defaults to 1 hour)",
+ "COMMANDS_BAN_DESC": "permanently ban a client from the server",
+ "COMMANDS_UNBAN_DESC": "unban client by client id",
+ "COMMANDS_WHO_DESC": "give information about yourself",
+ "COMMANDS_LIST_DESC": "list active clients",
+ "COMMANDS_HELP_DESC": "list all available commands",
+ "COMMANDS_FASTRESTART_DESC": "fast restart current map",
+ "COMMANDS_MAPROTATE_DESC": "cycle to the next map in rotation",
+ "COMMANDS_SETLEVEL_DESC": "set client to specified privilege level",
+ "COMMANDS_USAGE_DESC": "get application memory usage",
+ "COMMANDS_USAGE_TEXT": "is using",
+ "COMMANDS_UPTIME_DESC": "get current application running time",
+ "COMMANDS_UPTIME_TEXT": "has been online for",
+ "COMMANDS_ADMINS_DESC": "list currently connected privileged clients",
+ "COMMANDS_MAP_DESC": "change to specified map",
+ "COMMANDS_FIND_DESC": "find client in database",
+ "COMMANDS_RULES_DESC": "list server rules",
+ "COMMANDS_PM_DESC": "send message to other client",
+ "COMMANDS_FLAG_DESC": "flag a suspicious client and announce to admins on join",
+ "COMMANDS_REPORT_DESC": "report a client for suspicious behavior",
+ "COMMANDS_REPORTS_DESC": "get or clear recent reports",
+ "COMMANDS_MASK_DESC": "hide your presence as a privileged client",
+ "COMMANDS_BANINFO_DESC": "get information about a ban for a client",
+ "COMMANDS_ALIAS_DESC": "get past aliases and ips of a client",
+ "COMMANDS_RCON_DESC": "send rcon command to server",
+ "COMMANDS_PLUGINS_DESC": "view all loaded plugins",
+ "COMMANDS_IP_DESC": "view your external IP address",
+ "COMMANDS_PRUNE_DESC": "demote any privileged clients that have not connected recently (defaults to 30 days)",
+ "COMMANDS_SETPASSWORD_DESC": "set your authentication password",
+ "COMMANDS_PING_DESC": "get client's ping",
+ "COMMANDS_ARGS_PLAYER": "player",
+ "COMMANDS_ARGS_REASON": "reason",
+ "COMMANDS_ARGS_MESSAGE": "message",
+ "COMMANDS_ARGS_DURATION": "duration (m|h|d|w|y)",
+ "COMMANDS_ARGS_CLIENTID": "client id",
+ "COMMANDS_ARGS_COMMANDS": "commands",
+ "COMMANDS_ARGS_LEVEL": "level",
+ "COMMANDS_ARGS_MAP": "map",
+ "COMMANDS_ARGS_CLEAR": "clear",
+ "COMMANDS_ARGS_INACTIVE": "inactive days",
+ "COMMANDS_ARGS_PASSWORD": "password",
+ "PLUGINS_LOGIN_COMMANDS_LOGIN_DESC": "login using password",
+ "PLUGINS_LOGIN_COMMANDS_LOGIN_SUCCESS": "You are now logged in",
+ "PLUGINS_LOGIN_COMMANDS_LOGIN_FAIL": "Your password is incorrect",
+ "PLUGINS_STATS_COMMANDS_RESET_DESC": "reset your stats to factory-new",
+ "PLUGINS_STATS_COMMANDS_RESET_SUCCESS": "Your stats for this server have been reset",
+ "PLUGINS_STATS_COMMANDS_RESET_FAIL": "You must be connected to a server to reset your stats",
+ "PLUGINS_STATS_COMMANDS_VIEW_DESC": "view your stats",
+ "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_FAIL": "Cannot find the player you specified",
+ "PLUGINS_STATS_COMMANDS_VIEW_SUCCESS": "Stats for",
+ "PLUGINS_STATS_COMMANDS_TOP_DESC": "view the top 5 players in this server",
+ "PLUGINS_STATS_COMMANDS_TOP_TEXT": "Top Players",
+ "PLUGINS_STATS_TEXT_KILLS": "KILLS",
+ "PLUGINS_STATS_TEXT_DEATHS": "DEATHS",
+ "PLUGINS_STATS_TEXT_SKILL": "SKILL",
+ "GLOBAL_DAYS": "days",
+ "GLOBAL_HOURS": "hours",
+ "GLOBAL_MINUTES": "minutes",
+ "GLOBAL_REPORT": "If you suspect someone of ^5CHEATING ^7use the ^5!report ^7command",
+ "GLOBAL_ERROR": "Error",
+ "GLOBAL_WARNING": "Warning",
+ "GLOBAL_INFO": "Info",
+ "GLOBAL_VERBOSE": "Verbose",
+
+ "MANAGER_CONSOLE_NOSERV": "No servers are currently being monitored",
+ "SERVER_PLUGIN_ERROR": "A plugin generated an error",
+ "PLUGINS_STATS_TEXT_NOQUALIFY": "No players qualify for top stats yet"
+ }
+ }
+}
\ No newline at end of file
diff --git a/Application/Localization/IW4MAdmin.es-EC.json b/Application/Localization/IW4MAdmin.es-EC.json
new file mode 100644
index 00000000..448f7afd
--- /dev/null
+++ b/Application/Localization/IW4MAdmin.es-EC.json
@@ -0,0 +1,203 @@
+{
+ "LocalizationName": "es-ES",
+ "LocalizationIndex": {
+ "Set": {
+ "MANAGER_VERSION_FAIL": "No se ha podido conseguir la última versión de IW4MAdmin",
+ "MANAGER_VERSION_UPDATE": "tiene una actualización. La última versión es",
+ "MANAGER_VERSION_CURRENT": "Tu versión es",
+ "MANAGER_VERSION_SUCCESS": "IW4MAdmin está actualizado",
+ "MANAGER_INIT_FAIL": "Error fatal durante la inicialización",
+ "MANAGER_EXIT": "Presione cualquier tecla para salir...",
+ "MANAGER_SHUTDOWN_SUCCESS": "Apagado completo",
+ "MANAGER_MONITORING_TEXT": "Ahora monitoreando",
+ "MANAGER_CONNECTION_REST": "La conexión ha sido restablecida con",
+ "SETUP_ENABLE_WEBFRONT": "Habilitar frente de la web",
+ "SETUP_ENABLE_MULTIOWN": "Habilitar múltiples propietarios",
+ "SETUP_ENABLE_STEPPEDPRIV": "Habilitar jerarquía de privilegios por escalones",
+ "SETUP_ENABLE_CUSTOMSAY": "Habilitar nombre a decir personalizado",
+ "SETUP_SAY_NAME": "Ingresar nombre a decir personalizado",
+ "SETUP_USE_CUSTOMENCODING": "Usar analizador de codificación personalizado",
+ "SETUP_ENCODING_STRING": "Ingresar cadena de codificación",
+ "SETUP_ENABLE_VPNS": "Habilitar VPNs clientes",
+ "SETUP_IPHUB_KEY": "Ingresar clave api de iphub.info",
+ "SETUP_DISPLAY_DISCORD": "Mostrar link de Discord en frente de la web",
+ "SETUP_DISCORD_INVITE": "Ingresar link de invitación a discord",
+ "SETUP_SERVER_USET6M": "Usar analizador Pluto T6",
+ "SETUP_SERVER_USEIW5M": "Usar analizador Pluto IW5",
+ "SETUP_SERVER_MANUALLOG": "Ingresar manualmente la ruta del archivo de registro",
+ "SETUP_SERVER_IP": "Ingresar Dirección IP del servidor",
+ "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",
+ "SERVER_ERROR_DNE": "No existe",
+ "SERVER_ERROR_LOG": "Archivo de registro del juego invalido",
+ "SERVER_ERROR_COMMAND_INGAME": "Un error interno ocurrió mientras se procesaba tu comando",
+ "SERVER_ERROR_COMMAND_LOG": "Comando generó error",
+ "SERVER_ERROR_UNFIXABLE": "No se está supervisando el servidor debido a errores incorregibles",
+ "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_PLUGIN": "Un error ocurrió mientras se cargaba el complemente",
+ "SERVER_ERROR_ADDPLAYER": "Incapaz de añadir al jugador",
+ "SERVER_ERROR_POLLING": "reduciendo la tasa de sondeo",
+ "SERVER_ERROR_COMMUNICATION": "No se ha podido comunicar con",
+ "SERVER_ERROR_EXCEPTION": "Excepción inesperada en",
+ "SERVER_KICK_VPNS_NOTALLOWED": "Las VPNs no están permitidas en este servidor",
+ "SERVER_KICK_TEXT": "Fuiste expulsado",
+ "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_GENERICNAME": "Por favor cambia tu nombre usando /name",
+ "SERVER_KICK_CONTROLCHARS": "Tu nombre no puede contener caracteres de control",
+ "SERVER_TB_TEXT": "Estás temporalmente baneado",
+ "SERVER_TB_REMAIN": "Tú estás temporalmente baneado",
+ "SERVER_BAN_TEXT": "Estás baneado",
+ "SERVER_BAN_PREV": "Baneado anteriormente por",
+ "SERVER_BAN_APPEAL": "apela en",
+ "SERVER_REPORT_COUNT": "Hay ^5{0} ^7reportes recientes",
+ "SERVER_WARNLIMT_REACHED": "Muchas advertencias",
+ "SERVER_WARNING": "ADVERTENCIA",
+ "SERVER_WEBSITE_GENERIC": "el sitio web de este servidor",
+ "BROADCAST_ONLINE": "^5IW4MADMIN ^7está ahora ^2en línea",
+ "BROADCAST_OFFLINE": "IW4MAdmin está desconectado",
+ "COMMAND_HELP_SYNTAX": "sintaxis:",
+ "COMMAND_HELP_OPTIONAL": "opcional",
+ "COMMAND_UNKNOWN": "Has ingresado un comando desconocido",
+ "COMMAND_NOACCESS": "Tú no tienes acceso a ese comando",
+ "COMMAND_NOTAUTHORIZED": "Tú no estás autorizado para ejecutar ese comando",
+ "COMMAND_MISSINGARGS": "No se han proporcionado suficientes argumentos",
+ "COMMAND_TARGET_MULTI": "Múltiples jugadores coinciden con ese nombre",
+ "COMMAND_TARGET_NOTFOUND": "No se puede encontrar el jugador especificado",
+ "PLUGIN_IMPORTER_NOTFOUND": "No se encontraron complementos para cargar",
+ "PLUGIN_IMPORTER_REGISTERCMD": "Comando registrado",
+ "COMMANDS_OWNER_SUCCESS": "¡Felicidades, has reclamado la propiedad de este servidor!",
+ "COMMANDS_OWNER_FAIL": "Este servidor ya tiene un propietario",
+ "COMMANDS_WARN_FAIL": "No tiene los privilegios necesarios para advertir a",
+ "COMMANDS_WARNCLEAR_SUCCESS": "Todas las advertencias borradas para",
+ "COMMANDS_KICK_SUCCESS": "ha sido expulsado",
+ "COMMANDS_KICK_FAIL": "No tienes los privilegios necesarios para expulsar a",
+ "COMMANDS_TEMPBAN_SUCCESS": "ha sido baneado temporalmente por",
+ "COMMANDS_TEMPBAN_FAIL": "Tú no puedes banear temporalmente",
+ "COMMANDS_BAN_SUCCESS": "ha sido baneado permanentemente",
+ "COMMANDS_BAN_FAIL": "Tú no puedes banear",
+ "COMMANDS_UNBAN_SUCCESS": "Exitosamente desbaneado",
+ "COMMANDS_UNBAN_FAIL": "no está baneado",
+ "COMMANDS_HELP_NOTFOUND": "No se ha podido encontrar ese comando",
+ "COMMANDS_HELP_MOREINFO": "Escribe !help para obtener la sintaxis de uso del comando",
+ "COMMANDS_FASTRESTART_UNMASKED": "ha dado rápido reinicio al mapa",
+ "COMMANDS_FASTRESTART_MASKED": "Al mapa se le ha dado un reinicio rápido",
+ "COMMANDS_MAPROTATE": "Rotación de mapa en ^55 ^7segundos",
+ "COMMANDS_SETLEVEL_SELF": "No puedes cambiar tu propio nivel",
+ "COMMANDS_SETLEVEL_OWNER": "Solo puede haber un propietario. Modifica tu configuración si múltiples propietarios son requeridos",
+ "COMMANDS_SETLEVEL_STEPPEDDISABLED": "Este servidor no te permite promover",
+ "COMMANDS_SETLEVEL_LEVELTOOHIGH": "Tú solo puedes promover ^5{0} ^7a ^5{1} ^7o menor privilegio",
+ "COMMANDS_SETLEVEL_SUCCESS_TARGET": "¡Felicitaciones! has ha sido promovido a",
+ "COMMANDS_SETLEVEL_SUCCESS": "fue promovido con éxito",
+ "COMMANDS_SETLEVEL_FAIL": "Grupo inválido especificado",
+ "COMMANDS_ADMINS_NONE": "No hay administradores visibles en línea",
+ "COMMANDS_MAP_SUCCESS": "Cambiando al mapa",
+ "COMMANDS_MAP_UKN": "Intentando cambiar a un mapa desconocido",
+ "COMMANDS_FIND_MIN": "Por Favor introduzca al menos 3 caracteres",
+ "COMMANDS_FIND_EMPTY": "No se encontraron jugadores",
+ "COMMANDS_RULES_NONE": "El propietario del servidor no ha establecido ninguna regla",
+ "COMMANDS_FLAG_SUCCESS": "Has marcado a",
+ "COMMANDS_FLAG_UNFLAG": "Has desmarcado a",
+ "COMMANDS_FLAG_FAIL": "Tú no puedes marcar",
+ "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_FAIL": "Tú no puedes reportar",
+ "COMMANDS_REPORT_SUCCESS": "Gracias por su reporte, un administrador ha sido notificado",
+ "COMMANDS_REPORTS_CLEAR_SUCCESS": "Reportes borrados con éxito",
+ "COMMANDS_REPORTS_NONE": "No hay jugadores reportados aun",
+ "COMMANDS_MASK_ON": "Ahora estás enmascarado",
+ "COMMANDS_MASK_OFF": "Ahora estás desenmascarado",
+ "COMMANDS_BANINFO_NONE": "No se encontró ban activo para ese jugador",
+ "COMMANDS_BANINO_SUCCESS": "fue baneado por ^5{0} ^7debido a:",
+ "COMMANDS_ALIAS_ALIASES": "Aliases",
+ "COMMANDS_ALIAS_IPS": "IPs",
+ "COMMANDS_RCON_SUCCESS": "Exitosamente enviado el comando RCon",
+ "COMMANDS_PLUGINS_LOADED": "Complementos cargados",
+ "COMMANDS_IP_SUCCESS": "Tu IP externa es",
+ "COMMANDS_PRUNE_FAIL": "Número inválido de días inactivos",
+ "COMMANDS_PRUNE_SUCCESS": "los usuarios privilegiados inactivos fueron podados",
+ "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_TARGET": "ping es",
+ "COMMANDS_PING_SELF": "Tu ping es",
+ "COMMANDS_QUIT_DESC": "salir de IW4MAdmin",
+ "COMMANDS_OWNER_DESC": "reclamar la propiedad del servidor",
+ "COMMANDS_WARN_DESC": "advertir al cliente por infringir las reglas",
+ "COMMANDS_WARNCLEAR_DESC": "eliminar todas las advertencias de un cliente",
+ "COMMANDS_KICK_DESC": "expulsar a un cliente por su nombre",
+ "COMMANDS_SAY_DESC": "transmitir el mensaje a todos los clientes",
+ "COMMANDS_TEMPBAN_DESC": "banear temporalmente a un cliente por el tiempo especificado (predeterminado en 1 hora)",
+ "COMMANDS_BAN_DESC": "banear permanentemente un cliente del servidor",
+ "COMMANDS_UNBAN_DESC": "desbanear al cliente por ID",
+ "COMMANDS_WHO_DESC": "da información sobre ti",
+ "COMMANDS_LIST_DESC": "enlistar clientes activos",
+ "COMMANDS_HELP_DESC": "enlistar todos los comandos disponibles",
+ "COMMANDS_FASTRESTART_DESC": "dar reinicio rápido al mapa actial",
+ "COMMANDS_MAPROTATE_DESC": "pasar al siguiente mapa en rotación",
+ "COMMANDS_SETLEVEL_DESC": "establecer el cliente al nivel de privilegio especificado",
+ "COMMANDS_USAGE_DESC": "obtener uso de la memoria de la aplicación",
+ "COMMANDS_USAGE_TEXT": "está usando",
+ "COMMANDS_UPTIME_DESC": "obtener el tiempo de ejecución de la aplicación actual",
+ "COMMANDS_UPTIME_TEXT": "ha estado en línea por",
+ "COMMANDS_ADMINS_DESC": "enlistar clientes privilegiados actualmente conectados",
+ "COMMANDS_MAP_DESC": "cambiar al mapa especificado",
+ "COMMANDS_FIND_DESC": "encontrar cliente en la base de datos",
+ "COMMANDS_RULES_DESC": "enlistar reglas del servidor",
+ "COMMANDS_PM_DESC": "enviar mensaje a otro cliente",
+ "COMMANDS_FLAG_DESC": "marcar un cliente sospechoso y anunciar a los administradores al unirse",
+ "COMMANDS_REPORT_DESC": "reportar un cliente por comportamiento sospechoso",
+ "COMMANDS_REPORTS_DESC": "obtener o borrar informes recientes",
+ "COMMANDS_MASK_DESC": "esconde tu presencia como un cliente privilegiado",
+ "COMMANDS_BANINFO_DESC": "obtener información sobre el ban de un cliente",
+ "COMMANDS_ALIAS_DESC": "obtener alias e ips anteriores de un cliente",
+ "COMMANDS_RCON_DESC": "enviar el comando rcon al servidor",
+ "COMMANDS_PLUGINS_DESC": "ver todos los complementos cargados",
+ "COMMANDS_IP_DESC": "ver tu dirección IP externa",
+ "COMMANDS_PRUNE_DESC": "degradar a los clientes con privilegios que no se hayan conectado recientemente (el valor predeterminado es 30 días)",
+ "COMMANDS_SETPASSWORD_DESC": "configura tu contraseña de autenticación",
+ "COMMANDS_PING_DESC": "obtener ping del cliente",
+ "COMMANDS_ARGS_PLAYER": "jugador",
+ "COMMANDS_ARGS_REASON": "razón",
+ "COMMANDS_ARGS_MESSAGE": "mensaje",
+ "COMMANDS_ARGS_DURATION": "duración (m|h|d|w|y)",
+ "COMMANDS_ARGS_CLIENTID": "id del cliente",
+ "COMMANDS_ARGS_COMMANDS": "comandos",
+ "COMMANDS_ARGS_LEVEL": "nivel",
+ "COMMANDS_ARGS_MAP": "mapa",
+ "COMMANDS_ARGS_CLEAR": "borrar",
+ "COMMANDS_ARGS_INACTIVE": "días inactivo",
+ "COMMANDS_ARGS_PASSWORD": "contraseña",
+ "PLUGINS_LOGIN_COMMANDS_LOGIN_DESC": "iniciar sesión usando la contraseña",
+ "PLUGINS_LOGIN_COMMANDS_LOGIN_SUCCESS": "Ahora está conectado",
+ "PLUGINS_LOGIN_COMMANDS_LOGIN_FAIL": "tu contraseña es incorrecta",
+ "PLUGINS_STATS_COMMANDS_RESET_DESC": "restablece tus estadísticas a las nuevas de fábrica",
+ "PLUGINS_STATS_COMMANDS_RESET_SUCCESS": "Tus estadísticas para este servidor se han restablecido",
+ "PLUGINS_STATS_COMMANDS_RESET_FAIL": "Debes estar conectado a un servidor para restablecer tus estadísticas",
+ "PLUGINS_STATS_COMMANDS_VIEW_DESC": "ver tus estadísticas",
+ "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_FAIL": "No se puede encontrar el jugador que especificó",
+ "PLUGINS_STATS_COMMANDS_VIEW_SUCCESS": "Estadísticas para",
+ "PLUGINS_STATS_COMMANDS_TOP_DESC": "ver los 5 mejores jugadores en este servidor",
+ "PLUGINS_STATS_COMMANDS_TOP_TEXT": "Mejores Jugadores",
+ "PLUGINS_STATS_TEXT_KILLS": "Asesinatos",
+ "PLUGINS_STATS_TEXT_DEATHS": "Muertes",
+ "PLUGINS_STATS_TEXT_SKILL": "Habilidad",
+ "GLOBAL_DAYS": "días",
+ "GLOBAL_HOURS": "horas",
+ "GLOBAL_MINUTES": "minutos",
+ "GLOBAL_REPORT": "Si sospechas que alguien ^5usa cheats ^7usa el comando ^5!report",
+ "GLOBAL_ERROR": "Error",
+ "GLOBAL_WARNING": "Advertencia",
+ "GLOBAL_INFO": "Información",
+ "GLOBAL_VERBOSE": "Detallado",
+
+ "MANAGER_CONSOLE_NOSERV": "No hay servidores que estén siendo monitoreados en este momento",
+ "SERVER_PLUGIN_ERROR": "Un complemento generó un error",
+ "PLUGINS_STATS_TEXT_NOQUALIFY": "No hay jugadores que califiquen para los primeros lugares aun"
+ }
+ }
+}
\ No newline at end of file
diff --git a/Application/Localization/IW4MAdmin.es-ES.json b/Application/Localization/IW4MAdmin.es-ES.json
deleted file mode 100644
index 490a5058..00000000
--- a/Application/Localization/IW4MAdmin.es-ES.json
+++ /dev/null
@@ -1,197 +0,0 @@
-{
- "LocalizationName": "es-ES",
- "LocalizationSet": {
- "MANAGER_VERSION_FAIL": "No se ha podido conseguir la última versión de IW4MAdmin",
- "MANAGER_VERSION_UPDATE": "tiene una actualización. La última versión es",
- "MANAGER_VERSION_CURRENT": "Tu versión es",
- "MANAGER_VERSION_SUCCESS": "IW4MAdmin está actualizado",
- "MANAGER_INIT_FAIL": "Error fatal durante la inicialización",
- "MANAGER_EXIT": "Presione cualquier tecla para salir...",
- "MANAGER_SHUTDOWN_SUCCESS": "Apagado completo",
- "MANAGER_MONITORING_TEXT": "Ahora monitoreando",
- "MANAGER_CONNECTION_REST": "La conexión ha sido restablecida con",
- "SETUP_ENABLE_WEBFRONT": "Habilitar frente de la web",
- "SETUP_ENABLE_MULTIOWN": "Habilitar múltiples propietarios",
- "SETUP_ENABLE_STEPPEDPRIV": "Habilitar jerarquía de privilegios por escalones",
- "SETUP_ENABLE_CUSTOMSAY": "Habilitar nombre a decir personalizado",
- "SETUP_SAY_NAME": "Ingresar nombre a decir personalizado",
- "SETUP_USE_CUSTOMENCODING": "Usar analizador de codificación personalizado",
- "SETUP_ENCODING_STRING": "Ingresar cadena de codificación",
- "SETUP_ENABLE_VPNS": "Habilitar VPNs clientes",
- "SETUP_IPHUB_KEY": "Ingresar clave api de iphub.info",
- "SETUP_DISPLAY_DISCORD": "Mostrar link de Discord en frente de la web",
- "SETUP_DISCORD_INVITE": "Ingresar link de invitación a discord",
- "SETUP_SERVER_USET6M": "Usar analizador Pluto T6",
- "SETUP_SERVER_USEIW5M": "Usar analizador Pluto IW5",
- "SETUP_SERVER_MANUALLOG": "Ingresar manualmente la ruta del archivo de registro",
- "SETUP_SERVER_IP": "Ingresar Dirección IP del servidor",
- "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",
- "SERVER_ERROR_DNE": "No existe",
- "SERVER_ERROR_LOG": "Archivo de registro del juego invalido",
- "SERVER_ERROR_COMMAND_INGAME": "Un error interno ocurrió mientras se procesaba tu comando",
- "SERVER_ERROR_COMMAND_LOG": "Comando generó error",
- "SERVER_ERROR_UNFIXABLE": "No se está supervisando el servidor debido a errores incorregibles",
- "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_PLUGIN": "Un error ocurrió mientras se cargaba el complemente",
- "SERVER_ERROR_ADDPLAYER": "Incapaz de añadir al jugador",
- "SERVER_ERROR_POLLING": "reduciendo la tasa de sondeo",
- "SERVER_ERROR_COMMUNICATION": "No se ha podido comunicar con",
- "SERVER_ERROR_EXCEPTION": "Excepción inesperada en",
- "SERVER_KICK_VPNS_NOTALLOWED": "Las VPNs no están permitidas en este servidor",
- "SERVER_KICK_TEXT": "Fuiste expulsado",
- "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_GENERICNAME": "Por favor cambia tu nombre usando /name",
- "SERVER_KICK_CONTROLCHARS": "Tu nombre no puede contener caracteres de control",
- "SERVER_TB_TEXT": "Estás temporalmente baneado",
- "SERVER_TB_REMAIN": "Tú estás temporalmente baneado",
- "SERVER_BAN_TEXT": "Estás baneado",
- "SERVER_BAN_PREV": "Baneado anteriormente por",
- "SERVER_BAN_APPEAL": "apela en",
- "SERVER_REPORT_COUNT": "Hay ^5{0} ^7reportes recientes",
- "SERVER_WARNLIMT_REACHED": "Muchas advertencias",
- "SERVER_WARNING": "ADVERTENCIA",
- "SERVER_WEBSITE_GENERIC": "el sitio web de este servidor",
- "BROADCAST_ONLINE": "^5IW4MADMIN ^7está ahora ^2en línea",
- "BROADCAST_OFFLINE": "IW4MAdmin está desconectado",
- "COMMAND_HELP_SYNTAX": "sintaxis:",
- "COMMAND_HELP_OPTIONAL": "opcional",
- "COMMAND_UNKNOWN": "Has ingresado un comando desconocido",
- "COMMAND_NOACCESS": "Tú no tienes acceso a ese comando",
- "COMMAND_NOTAUTHORIZED": "Tú no estás autorizado para ejecutar ese comando",
- "COMMAND_MISSINGARGS": "No se han proporcionado suficientes argumentos",
- "COMMAND_TARGET_MULTI": "Múltiples jugadores coinciden con ese nombre",
- "COMMAND_TARGET_NOTFOUND": "No se puede encontrar el jugador especificado",
- "PLUGIN_IMPORTER_NOTFOUND": "No se encontraron complementos para cargar",
- "PLUGIN_IMPORTER_REGISTERCMD": "Comando registrado",
- "COMMANDS_OWNER_SUCCESS": "¡Felicidades, has reclamado la propiedad de este servidor!",
- "COMMANDS_OWNER_FAIL": "Este servidor ya tiene un propietario",
- "COMMANDS_WARN_FAIL": "No tiene los privilegios necesarios para advertir a",
- "COMMANDS_WARNCLEAR_SUCCESS": "Todas las advertencias borradas para",
- "COMMANDS_KICK_SUCCESS": "ha sido expulsado",
- "COMMANDS_KICK_FAIL": "No tienes los privilegios necesarios para expulsar a",
- "COMMANDS_TEMPBAN_SUCCESS": "ha sido baneado temporalmente por",
- "COMMANDS_TEMPBAN_FAIL": "Tú no puedes banear temporalmente",
- "COMMANDS_BAN_SUCCESS": "ha sido baneado permanentemente",
- "COMMANDS_BAN_FAIL": "Tú no puedes banear",
- "COMMANDS_UNBAN_SUCCESS": "Exitosamente desbaneado",
- "COMMANDS_UNBAN_FAIL": "no está baneado",
- "COMMANDS_HELP_NOTFOUND": "No se ha podido encontrar ese comando",
- "COMMANDS_HELP_MOREINFO": "Escribe !help para obtener la sintaxis de uso del comando",
- "COMMANDS_FASTRESTART_UNMASKED": "ha dado rápido reinicio al mapa",
- "COMMANDS_FASTRESTART_MASKED": "Al mapa se le ha dado un reinicio rápido",
- "COMMANDS_MAPROTATE": "Rotación de mapa en ^55 ^7segundos",
- "COMMANDS_SETLEVEL_SELF": "No puedes cambiar tu propio nivel",
- "COMMANDS_SETLEVEL_OWNER": "Solo puede haber un propietario. Modifica tu configuración si múltiples propietarios son requeridos",
- "COMMANDS_SETLEVEL_STEPPEDDISABLED": "Este servidor no te permite promover",
- "COMMANDS_SETLEVEL_LEVELTOOHIGH": "Tú solo puedes promover ^5{0} ^7a ^5{1} ^7o menor privilegio",
- "COMMANDS_SETLEVEL_SUCCESS_TARGET": "¡Felicitaciones! has ha sido promovido a",
- "COMMANDS_SETLEVEL_SUCCESS": "fue promovido con éxito",
- "COMMANDS_SETLEVEL_FAIL": "Grupo inválido especificado",
- "COMMANDS_ADMINS_NONE": "No hay administradores visibles en línea",
- "COMMANDS_MAP_SUCCESS": "Cambiando al mapa",
- "COMMANDS_MAP_UKN": "Intentando cambiar a un mapa desconocido",
- "COMMANDS_FIND_MIN": "Por Favor introduzca al menos 3 caracteres",
- "COMMANDS_FIND_EMPTY": "No se encontraron jugadores",
- "COMMANDS_RULES_NONE": "El propietario del servidor no ha establecido ninguna regla",
- "COMMANDS_FLAG_SUCCESS": "Has marcado a",
- "COMMANDS_FLAG_UNFLAG": "Has desmarcado a",
- "COMMANDS_FLAG_FAIL": "Tú no puedes marcar",
- "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_FAIL": "Tú no puedes reportar",
- "COMMANDS_REPORT_SUCCESS": "Gracias por su reporte, un administrador ha sido notificado",
- "COMMANDS_REPORTS_CLEAR_SUCCESS": "Reportes borrados con éxito",
- "COMMANDS_REPORTS_NONE": "No hay jugadores reportados aun",
- "COMMANDS_MASK_ON": "Ahora estás enmascarado",
- "COMMANDS_MASK_OFF": "Ahora estás desenmascarado",
- "COMMANDS_BANINFO_NONE": "No se encontró ban activo para ese jugador",
- "COMMANDS_BANINO_SUCCESS": "fue baneado por ^5{0} ^7debido a:",
- "COMMANDS_ALIAS_ALIASES": "Aliases",
- "COMMANDS_ALIAS_IPS": "IPs",
- "COMMANDS_RCON_SUCCESS": "Exitosamente enviado el comando RCon",
- "COMMANDS_PLUGINS_LOADED": "Complementos cargados",
- "COMMANDS_IP_SUCCESS": "Tu IP externa es",
- "COMMANDS_PRUNE_FAIL": "Número inválido de días inactivos",
- "COMMANDS_PRUNE_SUCCESS": "los usuarios privilegiados inactivos fueron podados",
- "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_TARGET": "ping es",
- "COMMANDS_PING_SELF": "Tu ping es",
- "COMMANDS_QUIT_DESC": "salir de IW4MAdmin",
- "COMMANDS_OWNER_DESC": "reclamar la propiedad del servidor",
- "COMMANDS_WARN_DESC": "advertir al cliente por infringir las reglas",
- "COMMANDS_WARNCLEAR_DESC": "eliminar todas las advertencias de un cliente",
- "COMMANDS_KICK_DESC": "expulsar a un cliente por su nombre",
- "COMMANDS_SAY_DESC": "transmitir el mensaje a todos los clientes",
- "COMMANDS_TEMPBAN_DESC": "banear temporalmente a un cliente por el tiempo especificado (predeterminado en 1 hora)",
- "COMMANDS_BAN_DESC": "banear permanentemente un cliente del servidor",
- "COMMANDS_UNBAN_DESC": "desbanear al cliente por ID",
- "COMMANDS_WHO_DESC": "da información sobre ti",
- "COMMANDS_LIST_DESC": "enlistar clientes activos",
- "COMMANDS_HELP_DESC": "enlistar todos los comandos disponibles",
- "COMMANDS_FASTRESTART_DESC": "dar reinicio rápido al mapa actial",
- "COMMANDS_MAPROTATE_DESC": "pasar al siguiente mapa en rotación",
- "COMMANDS_SETLEVEL_DESC": "establecer el cliente al nivel de privilegio especificado",
- "COMMANDS_USAGE_DESC": "obtener uso de la memoria de la aplicación",
- "COMMANDS_USAGE_TEXT": "está usando",
- "COMMANDS_UPTIME_DESC": "obtener el tiempo de ejecución de la aplicación actual",
- "COMMANDS_UPTIME_TEXT": "ha estado en línea por",
- "COMMANDS_ADMINS_DESC": "enlistar clientes privilegiados actualmente conectados",
- "COMMANDS_MAP_DESC": "cambiar al mapa especificado",
- "COMMANDS_FIND_DESC": "encontrar cliente en la base de datos",
- "COMMANDS_RULES_DESC": "enlistar reglas del servidor",
- "COMMANDS_PM_DESC": "enviar mensaje a otro cliente",
- "COMMANDS_FLAG_DESC": "marcar un cliente sospechoso y anunciar a los administradores al unirse",
- "COMMANDS_REPORT_DESC": "reportar un cliente por comportamiento sospechoso",
- "COMMANDS_REPORTS_DESC": "obtener o borrar informes recientes",
- "COMMANDS_MASK_DESC": "esconde tu presencia como un cliente privilegiado",
- "COMMANDS_BANINFO_DESC": "obtener información sobre el ban de un cliente",
- "COMMANDS_ALIAS_DESC": "obtener alias e ips anteriores de un cliente",
- "COMMANDS_RCON_DESC": "enviar el comando rcon al servidor",
- "COMMANDS_PLUGINS_DESC": "ver todos los complementos cargados",
- "COMMANDS_IP_DESC": "ver tu dirección IP externa",
- "COMMANDS_PRUNE_DESC": "degradar a los clientes con privilegios que no se hayan conectado recientemente (el valor predeterminado es 30 días)",
- "COMMANDS_SETPASSWORD_DESC": "configura tu contraseña de autenticación",
- "COMMANDS_PING_DESC": "obtener ping del cliente",
- "COMMANDS_ARGS_PLAYER": "jugador",
- "COMMANDS_ARGS_REASON": "razón",
- "COMMANDS_ARGS_MESSAGE": "mensaje",
- "COMMANDS_ARGS_DURATION": "duración (m|h|d|w|y)",
- "COMMANDS_ARGS_CLIENTID": "id del cliente",
- "COMMANDS_ARGS_COMMANDS": "comandos",
- "COMMANDS_ARGS_LEVEL": "nivel",
- "COMMANDS_ARGS_MAP": "mapa",
- "COMMANDS_ARGS_CLEAR": "borrar",
- "COMMANDS_ARGS_INACTIVE": "días inactivo",
- "COMMANDS_ARGS_PASSWORD": "contraseña",
- "PLUGINS_LOGIN_COMMANDS_LOGIN_DESC": "iniciar sesión usando la contraseña",
- "PLUGINS_LOGIN_COMMANDS_LOGIN_SUCCESS": "Ahora está conectado",
- "PLUGINS_LOGIN_COMMANDS_LOGIN_FAIL": "tu contraseña es incorrecta",
- "PLUGINS_STATS_COMMANDS_RESET_DESC": "restablece tus estadísticas a las nuevas de fábrica",
- "PLUGINS_STATS_COMMANDS_RESET_SUCCESS": "Tus estadísticas para este servidor se han restablecido",
- "PLUGINS_STATS_COMMANDS_RESET_FAIL": "Debes estar conectado a un servidor para restablecer tus estadísticas",
- "PLUGINS_STATS_COMMANDS_VIEW_DESC": "ver tus estadísticas",
- "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_FAIL": "No se puede encontrar el jugador que especificó",
- "PLUGINS_STATS_COMMANDS_VIEW_SUCCESS": "Estadísticas para",
- "PLUGINS_STATS_COMMANDS_TOP_DESC": "ver los 5 mejores jugadores en este servidor",
- "PLUGINS_STATS_COMMANDS_TOP_TEXT": "Mejores Jugadores",
- "PLUGINS_STATS_TEXT_KILLS": "Asesinatos",
- "PLUGINS_STATS_TEXT_DEATHS": "Muertes",
- "PLUGINS_STATS_TEXT_SKILL": "Habilidad",
- "GLOBAL_DAYS": "días",
- "GLOBAL_HOURS": "horas",
- "GLOBAL_MINUTES": "minutos",
- "GLOBAL_REPORT": "Si sospechas que alguien ^5usa cheats ^7usa el comando ^5!report",
- "GLOBAL_ERROR": "Error",
- "GLOBAL_WARNING": "Advertencia",
- "GLOBAL_INFO": "Información",
- "GLOBAL_VERBOSE": "Detallado"
- }
-}
\ No newline at end of file
diff --git a/Application/Localization/IW4MAdmin.pt-BR.json b/Application/Localization/IW4MAdmin.pt-BR.json
new file mode 100644
index 00000000..508893cf
--- /dev/null
+++ b/Application/Localization/IW4MAdmin.pt-BR.json
@@ -0,0 +1,203 @@
+{
+ "LocalizationName": "pt-BR",
+ "LocalizationIndex": {
+ "Set": {
+ "MANAGER_VERSION_FAIL": "Não foi possível obter a versão mais recente do IW4MAdmin",
+ "MANAGER_VERSION_UPDATE": "Há uma atualização disponível. A versão mais recente é",
+ "MANAGER_VERSION_CURRENT": "Está é a sua versão",
+ "MANAGER_VERSION_SUCCESS": "O IW4MAdmin está atualizado",
+ "MANAGER_INIT_FAIL": "Erro fatal durante a inicialização",
+ "MANAGER_EXIT": "Pressione qualquer tecla para sair...",
+ "MANAGER_SHUTDOWN_SUCCESS": "Desligamento concluído",
+ "MANAGER_MONITORING_TEXT": "Agora monitorando",
+ "MANAGER_CONNECTION_REST": "A conexão foi reestabelecida com",
+ "SETUP_ENABLE_WEBFRONT": "Habilitar o módulo da web do IW4MAdmin",
+ "SETUP_ENABLE_MULTIOWN": "Ativar vários proprietários",
+ "SETUP_ENABLE_STEPPEDPRIV": "Ativar hierarquia de privilégios escalonada",
+ "SETUP_ENABLE_CUSTOMSAY": "Habilitar a customização do nome do comando say",
+ "SETUP_SAY_NAME": "Digite o nome customizado do comando say",
+ "SETUP_USE_CUSTOMENCODING": "Usar o analisador de codificação customizado",
+ "SETUP_ENCODING_STRING": "Digite a string de codificação",
+ "SETUP_ENABLE_VPNS": "Habilitar que os usuários usem VPN",
+ "SETUP_IPHUB_KEY": "Digite iphub.info api key",
+ "SETUP_DISPLAY_DISCORD": "Exibir link do Discord no módulo de web",
+ "SETUP_DISCORD_INVITE": "Digitar link do convite do Discord",
+ "SETUP_SERVER_USET6M": "Usar Pluto T6 parser",
+ "SETUP_SERVER_USEIW5M": "Usar Pluto IW5 Parser",
+ "SETUP_SERVER_MANUALLOG": "Insira o caminho do arquivo de log manualmente",
+ "SETUP_SERVER_IP": "Digite o endereço IP do servidor",
+ "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",
+ "SERVER_ERROR_DNE": "não existe",
+ "SERVER_ERROR_LOG": "Log do jogo inválido",
+ "SERVER_ERROR_COMMAND_INGAME": "Ocorreu um erro interno ao processar seu comando",
+ "SERVER_ERROR_COMMAND_LOG": "o comando gerou um erro",
+ "SERVER_ERROR_UNFIXABLE": "Não monitorando o servidor devido a erros incorrigíveis",
+ "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_PLUGIN": "Ocorreu um erro ao carregar o plug-in",
+ "SERVER_ERROR_ADDPLAYER": "Não foi possível adicionar o jogador",
+ "SERVER_ERROR_POLLING": "reduzir a taxa de sondagem do server",
+ "SERVER_ERROR_COMMUNICATION": "Não foi possível fazer a comunicação com",
+ "SERVER_ERROR_EXCEPTION": "Exceção inesperada em",
+ "SERVER_KICK_VPNS_NOTALLOWED": "VPNs não são permitidas neste servidor",
+ "SERVER_KICK_TEXT": "Você foi expulso",
+ "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_GENERICNAME": "Por favor, mude o seu nome usando o comando /name no console",
+ "SERVER_KICK_CONTROLCHARS": "Seu nome não pode conter caracteres de controle",
+ "SERVER_TB_TEXT": "Você está banido temporariamente",
+ "SERVER_TB_REMAIN": "Você está banido temporariamente",
+ "SERVER_BAN_TEXT": "Você está banido",
+ "SERVER_BAN_PREV": "Banido preventivamente por",
+ "SERVER_BAN_APPEAL": "apele em",
+ "SERVER_REPORT_COUNT": "Você tem ^5{0} ^7denúncias recentes",
+ "SERVER_WARNLIMT_REACHED": "Avisos demais! Leia o chat da próxima vez",
+ "SERVER_WARNING": "AVISO",
+ "SERVER_WEBSITE_GENERIC": "este é o site do servidor",
+ "BROADCAST_ONLINE": "^5IW4MADMIN ^7agora está ^2ONLINE",
+ "BROADCAST_OFFLINE": "IW4MAdmin ficou offline",
+ "COMMAND_HELP_SYNTAX": "sintaxe:",
+ "COMMAND_HELP_OPTIONAL": "opcional",
+ "COMMAND_UNKNOWN": "Você digitou um comando desconhecido",
+ "COMMAND_NOACCESS": "Você não tem acesso a este comando",
+ "COMMAND_NOTAUTHORIZED": "Você não está autorizado a executar este comando",
+ "COMMAND_MISSINGARGS": "Não foram oferecidos argumentos suficientes",
+ "COMMAND_TARGET_MULTI": "Vários jogadores correspondem a esse nome",
+ "COMMAND_TARGET_NOTFOUND": "Não é possível encontrar o jogador especificado",
+ "PLUGIN_IMPORTER_NOTFOUND": "Não foram encontrados plugins para carregar",
+ "PLUGIN_IMPORTER_REGISTERCMD": "Comando registrado",
+ "COMMANDS_OWNER_SUCCESS": "Parabéns, você reivindicou a propriedade deste servidor!",
+ "COMMANDS_OWNER_FAIL": "Este servidor já tem um dono",
+ "COMMANDS_WARN_FAIL": "Você não tem os privilégios necessários para fazer o Aviso",
+ "COMMANDS_WARNCLEAR_SUCCESS": "Todos os avisos foram apagados para",
+ "COMMANDS_KICK_SUCCESS": "foi expulso",
+ "COMMANDS_KICK_FAIL": "Você não tem os privilégios necessários para expulsar",
+ "COMMANDS_TEMPBAN_SUCCESS": "foi banido temporariamente por",
+ "COMMANDS_TEMPBAN_FAIL": "Você não pode banir temporariamente",
+ "COMMANDS_BAN_SUCCESS": "foi banido permanentemente",
+ "COMMANDS_BAN_FAIL": "Você não pode banir de maneira permanente",
+ "COMMANDS_UNBAN_SUCCESS": "Foi retirado o banimento com sucesso",
+ "COMMANDS_UNBAN_FAIL": "não está banido",
+ "COMMANDS_HELP_NOTFOUND": "Não foi possível encontrar esse comando",
+ "COMMANDS_HELP_MOREINFO": "Digite !help para saber como usar o comando",
+ "COMMANDS_FASTRESTART_UNMASKED": "reiniciou rapidamente o mapa",
+ "COMMANDS_FASTRESTART_MASKED": "O mapa foi reiniciado rapidamente",
+ "COMMANDS_MAPROTATE": "Rotacionando o mapa em ^55 ^7segundos",
+ "COMMANDS_SETLEVEL_SELF": "Você não pode mudar seu próprio nível",
+ "COMMANDS_SETLEVEL_OWNER": "Só pode haver 1 dono. Modifique suas configurações se vários proprietários forem necessários",
+ "COMMANDS_SETLEVEL_STEPPEDDISABLED": "Este servidor não permite que você promova",
+ "COMMANDS_SETLEVEL_LEVELTOOHIGH": "Você só pode promover do ^5{0} ^7para ^5{1} ^7ou um nível menor",
+ "COMMANDS_SETLEVEL_SUCCESS_TARGET": "Parabéns! Você foi promovido para",
+ "COMMANDS_SETLEVEL_SUCCESS": "foi promovido com sucesso",
+ "COMMANDS_SETLEVEL_FAIL": "grupo especificado inválido",
+ "COMMANDS_ADMINS_NONE": "Sem administradores visíveis online",
+ "COMMANDS_MAP_SUCCESS": "Mudando o mapa para",
+ "COMMANDS_MAP_UKN": "Tentando mudar para o mapa desconhecido",
+ "COMMANDS_FIND_MIN": "Por favor, insira pelo menos 3 caracteres",
+ "COMMANDS_FIND_EMPTY": "Nenhum jogador foi encontrado",
+ "COMMANDS_RULES_NONE": "O proprietário do servidor não definiu nenhuma regra, sinta-se livre",
+ "COMMANDS_FLAG_SUCCESS": "Você sinalizou",
+ "COMMANDS_FLAG_UNFLAG": "Você tirou a sinalização de",
+ "COMMANDS_FLAG_FAIL": "Você não pode sinalizar",
+ "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 se reportar",
+ "COMMANDS_REPORT_FAIL": "Você não pode reportar",
+ "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_NONE": "Ninguém foi denunciado ainda",
+ "COMMANDS_MASK_ON": "Você foi mascarado",
+ "COMMANDS_MASK_OFF": "Você foi desmascarado",
+ "COMMANDS_BANINFO_NONE": "Nenhum banimento ativo foi encontrado para esse jogador",
+ "COMMANDS_BANINO_SUCCESS": "foi banido por ^5{0} ^7por:",
+ "COMMANDS_ALIAS_ALIASES": "Nomes registrados",
+ "COMMANDS_ALIAS_IPS": "IPs",
+ "COMMANDS_RCON_SUCCESS": "O comando para o RCon foi enviado com sucesso",
+ "COMMANDS_PLUGINS_LOADED": "Plugins carregados",
+ "COMMANDS_IP_SUCCESS": "Seu endereço IP externo é",
+ "COMMANDS_PRUNE_FAIL": "Número inválido de dias ativo",
+ "COMMANDS_PRUNE_SUCCESS": "usuários privilegiados inativos foram removidos",
+ "COMMANDS_PASSWORD_FAIL": "Sua senha deve ter pelo menos 5 caracteres",
+ "COMMANDS_PASSWORD_SUCCESS": "Sua senha foi configurada com sucesso",
+ "COMMANDS_PING_TARGET": "latência é",
+ "COMMANDS_PING_SELF": "Sua latência é",
+ "COMMANDS_QUIT_DESC": "sair do IW4MAdmin",
+ "COMMANDS_OWNER_DESC": "reivindicar a propriedade do servidor",
+ "COMMANDS_WARN_DESC": "avisa o cliente por infringir regras",
+ "COMMANDS_WARNCLEAR_DESC": "remove todos os avisos para um cliente",
+ "COMMANDS_KICK_DESC": "expulsa o cliente pelo nome",
+ "COMMANDS_SAY_DESC": "transmite mensagem para todos os clientes",
+ "COMMANDS_TEMPBAN_DESC": "bane temporariamente um cliente por tempo especificado (o padrão é 1 hora)",
+ "COMMANDS_BAN_DESC": "banir permanentemente um cliente do servidor",
+ "COMMANDS_UNBAN_DESC": "retira o ban de um jogador pelo seu ID",
+ "COMMANDS_WHO_DESC": "dá informações sobre você",
+ "COMMANDS_LIST_DESC": "lista os jogadores ativos na partida",
+ "COMMANDS_HELP_DESC": "lista todos os comandos disponíveis",
+ "COMMANDS_FASTRESTART_DESC": "reinicializa rapidamente o mapa, não recomendável o uso várias vezes seguidas",
+ "COMMANDS_MAPROTATE_DESC": "avança para o próximo mapa da rotação",
+ "COMMANDS_SETLEVEL_DESC": "define o jogador para o nível de privilégio especificado",
+ "COMMANDS_USAGE_DESC": "vê quanto o aplicativo está usando de memória ram do seu computador",
+ "COMMANDS_USAGE_TEXT": "está usando",
+ "COMMANDS_UPTIME_DESC": "obtém o tempo de execução do aplicativo a quando aberto",
+ "COMMANDS_UPTIME_TEXT": "está online por",
+ "COMMANDS_ADMINS_DESC": "lista os clientes privilegiados conectados no momento",
+ "COMMANDS_MAP_DESC": "muda para o mapa especificado",
+ "COMMANDS_FIND_DESC": "acha o jogador na base de dados",
+ "COMMANDS_RULES_DESC": "lista as regras do servidor",
+ "COMMANDS_PM_DESC": "envia a mensagem para o outro jogador de maneira privada, use /!pm para ter efeito, se possível",
+ "COMMANDS_FLAG_DESC": "sinaliza um cliente suspeito e anuncia aos administradores ao entrar no servidor",
+ "COMMANDS_REPORT_DESC": "denuncia o jogador por comportamento suspeito",
+ "COMMANDS_REPORTS_DESC": "obtém ou limpa as denúncias recentes",
+ "COMMANDS_MASK_DESC": "esconda sua presença como um cliente privilegiado",
+ "COMMANDS_BANINFO_DESC": "obtém informações sobre um banimento para um jogador",
+ "COMMANDS_ALIAS_DESC": "obtém a lista de histórico de nomes que o jogador usou no servidor",
+ "COMMANDS_RCON_DESC": "envia o comando Rcon para o servidor",
+ "COMMANDS_PLUGINS_DESC": "mostra todos os plugins que estão carregados",
+ "COMMANDS_IP_DESC": "mostra o seu endereço IP externo",
+ "COMMANDS_PRUNE_DESC": "rebaixa qualquer cliente privilegiado que não tenha se conectado recentemente (o padrão é 30 dias)",
+ "COMMANDS_SETPASSWORD_DESC": "define sua senha de autenticação",
+ "COMMANDS_PING_DESC": "mostra o quanto de latência tem o jogador",
+ "COMMANDS_ARGS_PLAYER": "jogador",
+ "COMMANDS_ARGS_REASON": "razão",
+ "COMMANDS_ARGS_MESSAGE": "mensagem",
+ "COMMANDS_ARGS_DURATION": "duração (minutos|horas|dias|semanas|anos)",
+ "COMMANDS_ARGS_CLIENTID": "id do jogador",
+ "COMMANDS_ARGS_COMMANDS": "comandos",
+ "COMMANDS_ARGS_LEVEL": "nível",
+ "COMMANDS_ARGS_MAP": "mapa",
+ "COMMANDS_ARGS_CLEAR": "limpar",
+ "COMMANDS_ARGS_INACTIVE": "dias inativos",
+ "COMMANDS_ARGS_PASSWORD": "senha",
+ "PLUGINS_LOGIN_COMMANDS_LOGIN_DESC": "Logar-se usando a senha",
+ "PLUGINS_LOGIN_COMMANDS_LOGIN_SUCCESS": "Você agora está logado",
+ "PLUGINS_LOGIN_COMMANDS_LOGIN_FAIL": "Sua senha está errada",
+ "PLUGINS_STATS_COMMANDS_RESET_DESC": "reinicia suas estatísticas para uma nova",
+ "PLUGINS_STATS_COMMANDS_RESET_SUCCESS": "Suas estatísticas nesse servidor foram reiniciadas",
+ "PLUGINS_STATS_COMMANDS_RESET_FAIL": "Você deve estar conectado a um servidor para reiniciar as suas estatísticas",
+ "PLUGINS_STATS_COMMANDS_VIEW_DESC": "mostra suas estatísticas",
+ "PLUGINS_STATS_COMMANDS_VIEW_FAIL_INGAME": "o jogador especificado deve estar jogando",
+ "PLUGINS_STATS_COMMANDS_VIEW_FAIL_INGAME_SELF": "Você deve estar no jogo para ver suas estatísticas",
+ "PLUGINS_STATS_COMMANDS_VIEW_FAIL": "Não foi encontrado o jogador que você especificou",
+ "PLUGINS_STATS_COMMANDS_VIEW_SUCCESS": "Estatísticas para",
+ "PLUGINS_STATS_COMMANDS_TOP_DESC": "visualiza os 5 melhores jogadores do servidor",
+ "PLUGINS_STATS_COMMANDS_TOP_TEXT": "Top Jogadores",
+ "PLUGINS_STATS_TEXT_KILLS": "BAIXAS",
+ "PLUGINS_STATS_TEXT_DEATHS": "MORTES",
+ "PLUGINS_STATS_TEXT_SKILL": "HABILIDADE",
+ "GLOBAL_DAYS": "dias",
+ "GLOBAL_HOURS": "horas",
+ "GLOBAL_MINUTES": "minutos",
+ "GLOBAL_REPORT": "Se você está suspeitando alguém de alguma ^5TRAPAÇA ^7use o comando ^5!report",
+ "GLOBAL_ERROR": "Erro",
+ "GLOBAL_WARNING": "AVISO",
+ "GLOBAL_INFO": "Informação",
+ "GLOBAL_VERBOSE": "Verbose",
+
+ "MANAGER_CONSOLE_NOSERV": "Nenhum servidor está sendo monitorado no momento",
+ "SERVER_PLUGIN_ERROR": "Um plugin gerou um erro",
+ "PLUGINS_STATS_TEXT_NOQUALIFY": "Não há ainda jogadores qualificados para as melhores estatísticas"
+ }
+ }
+}
diff --git a/Application/Localization/IW4MAdmin.pt-PT.json b/Application/Localization/IW4MAdmin.pt-PT.json
deleted file mode 100644
index 570c6440..00000000
--- a/Application/Localization/IW4MAdmin.pt-PT.json
+++ /dev/null
@@ -1,197 +0,0 @@
-{
- "LocalizationName": "pt-BR",
- "LocalizationSet": {
- "MANAGER_VERSION_FAIL": "Não foi possível obter a versão mais recente do IW4MAdmin",
- "MANAGER_VERSION_UPDATE": "Há uma atualização disponível. A versão mais recente é",
- "MANAGER_VERSION_CURRENT": "Está é a sua versão",
- "MANAGER_VERSION_SUCCESS": "O IW4MAdmin está atualizado",
- "MANAGER_INIT_FAIL": "Erro fatal durante a inicialização",
- "MANAGER_EXIT": "Pressione qualquer tecla para sair...",
- "MANAGER_SHUTDOWN_SUCCESS": "Desligamento concluído",
- "MANAGER_MONITORING_TEXT": "Agora monitorando",
- "MANAGER_CONNECTION_REST": "A conexão foi reestabelecida com",
- "SETUP_ENABLE_WEBFRONT": "Habilitar o módulo da web do IW4MAdmin",
- "SETUP_ENABLE_MULTIOWN": "Ativar vários proprietários",
- "SETUP_ENABLE_STEPPEDPRIV": "Ativar hierarquia de privilégios escalonada",
- "SETUP_ENABLE_CUSTOMSAY": "Habilitar a customização do nome do comando say",
- "SETUP_SAY_NAME": "Digite o nome customizado do comando say",
- "SETUP_USE_CUSTOMENCODING": "Usar o analisador de codificação customizado",
- "SETUP_ENCODING_STRING": "Digite a string de codificação",
- "SETUP_ENABLE_VPNS": "Habilitar que os usuários usem VPN",
- "SETUP_IPHUB_KEY": "Digite iphub.info api key",
- "SETUP_DISPLAY_DISCORD": "Exibir link do Discord no módulo de web",
- "SETUP_DISCORD_INVITE": "Digitar link do convite do Discord",
- "SETUP_SERVER_USET6M": "Usar Pluto T6 parser",
- "SETUP_SERVER_USEIW5M": "Usar Pluto IW5 Parser",
- "SETUP_SERVER_MANUALLOG": "Insira o caminho do arquivo de log manualmente",
- "SETUP_SERVER_IP": "Digite o endereço IP do servidor",
- "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",
- "SERVER_ERROR_DNE": "não existe",
- "SERVER_ERROR_LOG": "Log do jogo inválido",
- "SERVER_ERROR_COMMAND_INGAME": "Ocorreu um erro interno ao processar seu comando",
- "SERVER_ERROR_COMMAND_LOG": "o comando gerou um erro",
- "SERVER_ERROR_UNFIXABLE": "Não monitorando o servidor devido a erros incorrigíveis",
- "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_PLUGIN": "Ocorreu um erro ao carregar o plug-in",
- "SERVER_ERROR_ADDPLAYER": "Não foi possível adicionar o jogador",
- "SERVER_ERROR_POLLING": "reduzir a taxa de sondagem do server",
- "SERVER_ERROR_COMMUNICATION": "Não foi possível fazer a comunicação com",
- "SERVER_ERROR_EXCEPTION": "Exceção inesperada em",
- "SERVER_KICK_VPNS_NOTALLOWED": "VPNs não são permitidas neste servidor",
- "SERVER_KICK_TEXT": "Você foi expulso",
- "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_GENERICNAME": "Por favor, mude o seu nome usando o comando /name no console",
- "SERVER_KICK_CONTROLCHARS": "Seu nome não pode conter caracteres de controle",
- "SERVER_TB_TEXT": "Você está banido temporariamente",
- "SERVER_TB_REMAIN": "Você está banido temporariamente",
- "SERVER_BAN_TEXT": "Você está banido",
- "SERVER_BAN_PREV": "Banido preventivamente por",
- "SERVER_BAN_APPEAL": "apele em",
- "SERVER_REPORT_COUNT": "Você tem ^5{0} ^7denúncias recentes",
- "SERVER_WARNLIMT_REACHED": "Avisos demais! Leia o chat da próxima vez",
- "SERVER_WARNING": "AVISO",
- "SERVER_WEBSITE_GENERIC": "este é o site do servidor",
- "BROADCAST_ONLINE": "^5IW4MADMIN ^7agora está ^2ONLINE",
- "BROADCAST_OFFLINE": "IW4MAdmin ficou offline",
- "COMMAND_HELP_SYNTAX": "sintaxe:",
- "COMMAND_HELP_OPTIONAL": "opcional",
- "COMMAND_UNKNOWN": "Você digitou um comando desconhecido",
- "COMMAND_NOACCESS": "Você não tem acesso a este comando",
- "COMMAND_NOTAUTHORIZED": "Você não está autorizado a executar este comando",
- "COMMAND_MISSINGARGS": "Não foram oferecidos argumentos suficientes",
- "COMMAND_TARGET_MULTI": "Vários jogadores correspondem a esse nome",
- "COMMAND_TARGET_NOTFOUND": "Não é possível encontrar o jogador especificado",
- "PLUGIN_IMPORTER_NOTFOUND": "Não foram encontrados plugins para carregar",
- "PLUGIN_IMPORTER_REGISTERCMD": "Comando registrado",
- "COMMANDS_OWNER_SUCCESS": "Parabéns, você reivindicou a propriedade deste servidor!",
- "COMMANDS_OWNER_FAIL": "Este servidor já tem um dono",
- "COMMANDS_WARN_FAIL": "Você não tem os privilégios necessários para fazer o Aviso",
- "COMMANDS_WARNCLEAR_SUCCESS": "Todos os avisos foram apagados para",
- "COMMANDS_KICK_SUCCESS": "foi expulso",
- "COMMANDS_KICK_FAIL": "Você não tem os privilégios necessários para expulsar",
- "COMMANDS_TEMPBAN_SUCCESS": "foi banido temporariamente por",
- "COMMANDS_TEMPBAN_FAIL": "Você não pode banir temporariamente",
- "COMMANDS_BAN_SUCCESS": "foi banido permanentemente",
- "COMMANDS_BAN_FAIL": "Você não pode banir de maneira permanente",
- "COMMANDS_UNBAN_SUCCESS": "Foi retirado o banimento com sucesso",
- "COMMANDS_UNBAN_FAIL": "não está banido",
- "COMMANDS_HELP_NOTFOUND": "Não foi possível encontrar esse comando",
- "COMMANDS_HELP_MOREINFO": "Digite !help para saber como usar o comando",
- "COMMANDS_FASTRESTART_UNMASKED": "reiniciou rapidamente o mapa",
- "COMMANDS_FASTRESTART_MASKED": "O mapa foi reiniciado rapidamente",
- "COMMANDS_MAPROTATE": "Rotacionando o mapa em ^55 ^7segundos",
- "COMMANDS_SETLEVEL_SELF": "Você não pode mudar seu próprio nível",
- "COMMANDS_SETLEVEL_OWNER": "Só pode haver 1 dono. Modifique suas configurações se vários proprietários forem necessários",
- "COMMANDS_SETLEVEL_STEPPEDDISABLED": "Este servidor não permite que você promova",
- "COMMANDS_SETLEVEL_LEVELTOOHIGH": "Você só pode promover do ^5{0} ^7para ^5{1} ^7ou um nível menor",
- "COMMANDS_SETLEVEL_SUCCESS_TARGET": "Parabéns! Você foi promovido para",
- "COMMANDS_SETLEVEL_SUCCESS": "foi promovido com sucesso",
- "COMMANDS_SETLEVEL_FAIL": "grupo especificado inválido",
- "COMMANDS_ADMINS_NONE": "Sem administradores visíveis online",
- "COMMANDS_MAP_SUCCESS": "Mudando o mapa para",
- "COMMANDS_MAP_UKN": "Tentando mudar para o mapa desconhecido",
- "COMMANDS_FIND_MIN": "Por favor, insira pelo menos 3 caracteres",
- "COMMANDS_FIND_EMPTY": "Nenhum jogador foi encontrado",
- "COMMANDS_RULES_NONE": "O proprietário do servidor não definiu nenhuma regra, sinta-se livre",
- "COMMANDS_FLAG_SUCCESS": "Você sinalizou",
- "COMMANDS_FLAG_UNFLAG": "Você tirou a sinalização de",
- "COMMANDS_FLAG_FAIL": "Você não pode sinalizar",
- "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 se reportar",
- "COMMANDS_REPORT_FAIL": "Você não pode reportar",
- "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_NONE": "Ninguém foi denunciado ainda",
- "COMMANDS_MASK_ON": "Você foi mascarado",
- "COMMANDS_MASK_OFF": "Você foi desmascarado",
- "COMMANDS_BANINFO_NONE": "Nenhum banimento ativo foi encontrado para esse jogador",
- "COMMANDS_BANINO_SUCCESS": "foi banido por ^5{0} ^7por:",
- "COMMANDS_ALIAS_ALIASES": "Nomes registrados",
- "COMMANDS_ALIAS_IPS": "IPs",
- "COMMANDS_RCON_SUCCESS": "O comando para o RCon foi enviado com sucesso",
- "COMMANDS_PLUGINS_LOADED": "Plugins carregados",
- "COMMANDS_IP_SUCCESS": "Seu endereço IP externo é",
- "COMMANDS_PRUNE_FAIL": "Número inválido de dias ativo",
- "COMMANDS_PRUNE_SUCCESS": "usuários privilegiados inativos foram removidos",
- "COMMANDS_PASSWORD_FAIL": "Sua senha deve ter pelo menos 5 caracteres",
- "COMMANDS_PASSWORD_SUCCESS": "Sua senha foi configurada com sucesso",
- "COMMANDS_PING_TARGET": "latência é",
- "COMMANDS_PING_SELF": "Sua latência é",
- "COMMANDS_QUIT_DESC": "sair do IW4MAdmin",
- "COMMANDS_OWNER_DESC": "reivindicar a propriedade do servidor",
- "COMMANDS_WARN_DESC": "avisa o cliente por infringir regras",
- "COMMANDS_WARNCLEAR_DESC": "remove todos os avisos para um cliente",
- "COMMANDS_KICK_DESC": "expulsa o cliente pelo nome",
- "COMMANDS_SAY_DESC": "transmite mensagem para todos os clientes",
- "COMMANDS_TEMPBAN_DESC": "bane temporariamente um cliente por tempo especificado (o padrão é 1 hora)",
- "COMMANDS_BAN_DESC": "banir permanentemente um cliente do servidor",
- "COMMANDS_UNBAN_DESC": "retira o ban de um jogador pelo seu ID",
- "COMMANDS_WHO_DESC": "dá informações sobre você",
- "COMMANDS_LIST_DESC": "lista os jogadores ativos na partida",
- "COMMANDS_HELP_DESC": "lista todos os comandos disponíveis",
- "COMMANDS_FASTRESTART_DESC": "reinicializa rapidamente o mapa, não recomendável o uso várias vezes seguidas",
- "COMMANDS_MAPROTATE_DESC": "avança para o próximo mapa da rotação",
- "COMMANDS_SETLEVEL_DESC": "define o jogador para o nível de privilégio especificado",
- "COMMANDS_USAGE_DESC": "vê quanto o aplicativo está usando de memória ram do seu computador",
- "COMMANDS_USAGE_TEXT": "está usando",
- "COMMANDS_UPTIME_DESC": "obtém o tempo de execução do aplicativo a quando aberto",
- "COMMANDS_UPTIME_TEXT": "está online por",
- "COMMANDS_ADMINS_DESC": "lista os clientes privilegiados conectados no momento",
- "COMMANDS_MAP_DESC": "muda para o mapa especificado",
- "COMMANDS_FIND_DESC": "acha o jogador na base de dados",
- "COMMANDS_RULES_DESC": "lista as regras do servidor",
- "COMMANDS_PM_DESC": "envia a mensagem para o outro jogador de maneira privada, use /!pm para ter efeito, se possível",
- "COMMANDS_FLAG_DESC": "sinaliza um cliente suspeito e anuncia aos administradores ao entrar no servidor",
- "COMMANDS_REPORT_DESC": "denuncia o jogador por comportamento suspeito",
- "COMMANDS_REPORTS_DESC": "obtém ou limpa as denúncias recentes",
- "COMMANDS_MASK_DESC": "esconda sua presença como um cliente privilegiado",
- "COMMANDS_BANINFO_DESC": "obtém informações sobre um banimento para um jogador",
- "COMMANDS_ALIAS_DESC": "obtém a lista de histórico de nomes que o jogador usou no servidor",
- "COMMANDS_RCON_DESC": "envia o comando Rcon para o servidor",
- "COMMANDS_PLUGINS_DESC": "mostra todos os plugins que estão carregados",
- "COMMANDS_IP_DESC": "mostra o seu endereço IP externo",
- "COMMANDS_PRUNE_DESC": "rebaixa qualquer cliente privilegiado que não tenha se conectado recentemente (o padrão é 30 dias)",
- "COMMANDS_SETPASSWORD_DESC": "define sua senha de autenticação",
- "COMMANDS_PING_DESC": "mostra o quanto de latência tem o jogador",
- "COMMANDS_ARGS_PLAYER": "jogador",
- "COMMANDS_ARGS_REASON": "razão",
- "COMMANDS_ARGS_MESSAGE": "mensagem",
- "COMMANDS_ARGS_DURATION": "duração (minutos|horas|dias|semanas|anos)",
- "COMMANDS_ARGS_CLIENTID": "id do jogador",
- "COMMANDS_ARGS_COMMANDS": "comandos",
- "COMMANDS_ARGS_LEVEL": "nível",
- "COMMANDS_ARGS_MAP": "mapa",
- "COMMANDS_ARGS_CLEAR": "limpar",
- "COMMANDS_ARGS_INACTIVE": "dias inativos",
- "COMMANDS_ARGS_PASSWORD": "senha",
- "PLUGINS_LOGIN_COMMANDS_LOGIN_DESC": "Logar-se usando a senha",
- "PLUGINS_LOGIN_COMMANDS_LOGIN_SUCCESS": "Você agora está logado",
- "PLUGINS_LOGIN_COMMANDS_LOGIN_FAIL": "Sua senha está errada",
- "PLUGINS_STATS_COMMANDS_RESET_DESC": "reinicia suas estatísticas para uma nova",
- "PLUGINS_STATS_COMMANDS_RESET_SUCCESS": "Suas estatísticas nesse servidor foram reiniciadas",
- "PLUGINS_STATS_COMMANDS_RESET_FAIL": "Você deve estar conectado a um servidor para reiniciar as suas estatísticas",
- "PLUGINS_STATS_COMMANDS_VIEW_DESC": "mostra suas estatísticas",
- "PLUGINS_STATS_COMMANDS_VIEW_FAIL_INGAME": "o jogador especificado deve estar jogando",
- "PLUGINS_STATS_COMMANDS_VIEW_FAIL_INGAME_SELF": "Você deve estar no jogo para ver suas estatísticas",
- "PLUGINS_STATS_COMMANDS_VIEW_FAIL": "Não foi encontrado o jogador que você especificou",
- "PLUGINS_STATS_COMMANDS_VIEW_SUCCESS": "Estatísticas para",
- "PLUGINS_STATS_COMMANDS_TOP_DESC": "visualiza os 5 melhores jogadores do servidor",
- "PLUGINS_STATS_COMMANDS_TOP_TEXT": "Top Jogadores",
- "PLUGINS_STATS_TEXT_KILLS": "BAIXAS",
- "PLUGINS_STATS_TEXT_DEATHS": "MORTES",
- "PLUGINS_STATS_TEXT_SKILL": "HABILIDADE",
- "GLOBAL_DAYS": "dias",
- "GLOBAL_HOURS": "horas",
- "GLOBAL_MINUTES": "minutos",
- "GLOBAL_REPORT": "Se você está suspeitando alguém de alguma ^5TRAPAÇA ^7use o comando ^5!report",
- "GLOBAL_ERROR": "Erro",
- "GLOBAL_WARNING": "AVISO",
- "GLOBAL_INFO": "Informação",
- "GLOBAL_VERBOSE": "Verbose"
- }
-}
diff --git a/Application/Localization/IW4MAdmin.ru-RU.json b/Application/Localization/IW4MAdmin.ru-RU.json
index 60d9430a..8b635752 100644
--- a/Application/Localization/IW4MAdmin.ru-RU.json
+++ b/Application/Localization/IW4MAdmin.ru-RU.json
@@ -1,197 +1,203 @@
{
"LocalizationName": "ru-RU",
- "LocalizationSet": {
- "MANAGER_VERSION_FAIL": "Не удалось получить последнюю версию IW4MAdmin",
- "MANAGER_VERSION_UPDATE": "- есть обновление. Последняя версия:",
- "MANAGER_VERSION_CURRENT": "Ваша версия:",
- "MANAGER_VERSION_SUCCESS": "IW4MAdmin обновлен",
- "MANAGER_INIT_FAIL": "Критическая ошибка во время инициализации",
- "MANAGER_EXIT": "Нажмите любую клавишу, чтобы выйти...",
- "SETUP_ENABLE_WEBFRONT": "Включить веб-интерфейс",
- "SETUP_ENABLE_MULTIOWN": "Включить поддержку нескольких владельцев",
- "SETUP_ENABLE_STEPPEDPRIV": "Включить последовательную иерархию прав",
- "SETUP_ENABLE_CUSTOMSAY": "Включить кастомное имя для чата",
- "SETUP_SAY_NAME": "Введите кастомное имя для чата",
- "SETUP_USE_CUSTOMENCODING": "Использовать кастомную кодировку парсера",
- "SETUP_ENCODING_STRING": "Введите кодировку",
- "SETUP_ENABLE_VPNS": "Включить поддержку VPN у игроков",
- "SETUP_IPHUB_KEY": "Введите iphub.info api-ключ",
- "SETUP_DISPLAY_DISCORD": "Отображать ссылку на Discord в веб-интерфейсе",
- "SETUP_DISCORD_INVITE": "Введите ссылку-приглашение в Discord",
- "SETUP_SERVER_USET6M": "Использовать Pluto T6 парсер",
- "SETUP_SERVER_USEIW5M": "Использовать парсер Pluto IW5",
- "SETUP_SERVER_MANUALLOG": "Введите путь для лог-файла",
- "SETUP_SERVER_IP": "Введите IP-адрес сервера",
- "SETUP_SERVER_PORT": "Введите порт сервера",
- "SETUP_SERVER_RCON": "Введите RCon пароль сервера",
- "SETUP_SERVER_SAVE": "Настройки сохранены, добавить",
- "SERVER_KICK_VPNS_NOTALLOWED": "Использование VPN не разрешено на этом сервере",
- "SERVER_KICK_TEXT": "Вы были исключены",
- "SERVER_KICK_MINNAME": "Ваше имя должно содержать хотя бы 3 символа",
- "SERVER_KICK_NAME_INUSE": "Ваше имя используется кем-то другим",
- "SERVER_KICK_GENERICNAME": "Пожалуйста, смените ваше имя, используя /name",
- "SERVER_KICK_CONTROLCHARS": "Ваше имя не должно содержать спецсимволы",
- "SERVER_TB_TEXT": "Вы временно забанены",
- "SERVER_TB_REMAIN": "Вы временно забанены",
- "SERVER_BAN_TEXT": "Вы забанены",
- "SERVER_BAN_PREV": "Ранее забанены за",
- "SERVER_BAN_APPEAL": "оспорить:",
- "SERVER_REPORT_COUNT": "Имеется ^5{0} ^7жалоб за последнее время",
- "SERVER_WARNLIMT_REACHED": "Слишком много предупреждений",
- "SERVER_WARNING": "Предупреждение",
- "SERVER_WEBSITE_GENERIC": "веб-сайт этого сервера",
- "BROADCAST_ONLINE": "^5IW4MADMIN ^7сейчас СЕТИ",
- "BROADCAST_OFFLINE": "IW4MAdmin отключается",
- "COMMAND_HELP_SYNTAX": "синтаксис:",
- "COMMAND_HELP_OPTIONAL": "опционально",
- "COMMAND_UNKNOWN": "Вы ввели неизвестную команду",
- "COMMAND_NOACCESS": "У вас нет доступа к этой команде",
- "COMMAND_NOTAUTHORIZED": "Вы не авторизованы для исполнения этой команды",
- "COMMAND_MISSINGARGS": "Недостаточно аргументов приведено",
- "COMMAND_TARGET_MULTI": "Несколько игроков соответствуют этому имени",
- "COMMAND_TARGET_NOTFOUND": "Невозможно найти указанного игрока",
- "PLUGIN_IMPORTER_NOTFOUND": "Не найдено плагинов для загрузки",
- "PLUGIN_IMPORTER_REGISTERCMD": "Зарегистрированная команда",
- "COMMANDS_OWNER_SUCCESS": "Поздравления, вы утвердили владение этим сервером!",
- "COMMANDS_OWNER_FAIL": "Этот сервер уже имеет владельца",
- "COMMANDS_WARN_FAIL": "У вас недостаточно прав, чтобы выносить предупреждения",
- "COMMANDS_WARNCLEAR_SUCCESS": "Все предупреждения очищены за",
- "COMMANDS_KICK_SUCCESS": "был исключен",
- "COMMANDS_KICK_FAIL": "У вас нет достаточных прав, чтобы исключать",
- "COMMANDS_TEMPBAN_SUCCESS": "был временно забанен за",
- "COMMANDS_TEMPBAN_FAIL": "Вы не можете выдавать временный бан",
- "COMMANDS_BAN_SUCCESS": "был забанен навсегда",
- "COMMANDS_BAN_FAIL": "Вы не можете выдавать бан",
- "COMMANDS_UNBAN_SUCCESS": "Успешно разбанен",
- "COMMANDS_UNBAN_FAIL": "не забанен",
- "COMMANDS_HELP_NOTFOUND": "Не удалось найти эту команду",
- "COMMANDS_HELP_MOREINFO": "Введите !help <имя команды>, чтобы узнать синтаксис для использования команды",
- "COMMANDS_FASTRESTART_UNMASKED": "перезапустил карту",
- "COMMANDS_FASTRESTART_MASKED": "Карта была перезапущена",
- "COMMANDS_MAPROTATE": "Смена карты через ^55 ^7секунд",
- "COMMANDS_SETLEVEL_SELF": "Вы не можете изменить свой уровень",
- "COMMANDS_SETLEVEL_OWNER": "Может быть только 1 владелец. Измените настройки, если требуется несколько владельцов",
- "COMMANDS_SETLEVEL_STEPPEDDISABLED": "Этот сервер не разрешает вам повыситься",
- "COMMANDS_SETLEVEL_LEVELTOOHIGH": "Вы только можете повысить ^5{0} ^7до ^5{1} ^7или понизиться в правах",
- "COMMANDS_SETLEVEL_SUCCESS_TARGET": "Поздравления! Вы были повышены до",
- "COMMANDS_SETLEVEL_SUCCESS": "был успешно повышен",
- "COMMANDS_SETLEVEL_FAIL": "Указана неверная группа",
- "COMMANDS_ADMINS_NONE": "Нет администраторов в сети",
- "COMMANDS_MAP_SUCCESS": "Смена карты на",
- "COMMANDS_MAP_UKN": "Попытка сменить на неизвестную карту",
- "COMMANDS_FIND_MIN": "Пожалуйста, введите хотя бы 3 символа",
- "COMMANDS_FIND_EMPTY": "Не найдено игроков",
- "COMMANDS_RULES_NONE": "Владелец сервера не установил никаких правил",
- "COMMANDS_FLAG_SUCCESS": "Вы были отмечены",
- "COMMANDS_FLAG_UNFLAG": "С вас сняли отметку",
- "COMMANDS_FLAG_FAIL": "Вы не можете ставить отметки",
- "COMMANDS_REPORT_FAIL_CAMP": "Вы не можете пожаловаться на игрока за кемперство",
- "COMMANDS_REPORT_FAIL_DUPLICATE": "Вы уже пожаловались на этого игрока",
- "COMMANDS_REPORT_FAIL_SELF": "Вы не можете пожаловаться на самого себя",
- "COMMANDS_REPORT_FAIL": "Вы не можете пожаловаться",
- "COMMANDS_REPORT_SUCCESS": "Спасибо за вашу жалобу, администратор оповещен",
- "COMMANDS_REPORTS_CLEAR_SUCCESS": "Жалобы успешно очищены",
- "COMMANDS_REPORTS_NONE": "Пока нет жалоб на игроков",
- "COMMANDS_MASK_ON": "Вы теперь замаскированы",
- "COMMANDS_MASK_OFF": "Вы теперь демаскированы",
- "COMMANDS_BANINFO_NONE": "Не найдено действующего бана для этого игрока",
- "COMMANDS_BANINO_SUCCESS": "был забанен игроком ^5{0} ^7на:",
- "COMMANDS_ALIAS_ALIASES": "Имена",
- "COMMANDS_ALIAS_IPS": "IP",
- "COMMANDS_RCON_SUCCESS": "Успешно отправлена команда RCon",
- "COMMANDS_PLUGINS_LOADED": "Загруженные плагины",
- "COMMANDS_IP_SUCCESS": "Ваш внешний IP:",
- "COMMANDS_PRUNE_FAIL": "Неверное количество дней бездействия",
- "COMMANDS_PRUNE_SUCCESS": "бездействующих пользователей с правами было сокращено",
- "COMMANDS_PASSWORD_FAIL": "Ваш пароль должен быть хотя бы 5 символов в длину",
- "COMMANDS_PASSWORD_SUCCESS": "Ваш пароль был успешно установлен",
- "COMMANDS_PING_TARGET": "пинг:",
- "COMMANDS_PING_SELF": "Ваш пинг:",
- "MANAGER_SHUTDOWN_SUCCESS": "Выключение завершено",
- "MANAGER_MONITORING_TEXT": "Идет мониторинг",
- "MANAGER_CONNECTION_REST": "Соединение было восстановлено с помощью",
- "SERVER_ERROR_DNE": "не существует",
- "SERVER_ERROR_LOG": "Неверный файл игрового лога",
- "SERVER_ERROR_COMMAND_INGAME": "Произошла внутренняя ошибка при обработке вашей команды",
- "SERVER_ERROR_COMMAND_LOG": "команда сгенерировала ошибку",
- "SERVER_ERROR_UNFIXABLE": "Мониторинг сервера выключен из-за неисправимых ошибок",
- "SERVER_ERROR_DVAR": "Не удалось получить значение dvar:",
- "SERVER_ERROR_DVAR_HELP": "убедитесь, что на сервере загружена карта",
- "SERVER_ERROR_PLUGIN": "Произошла ошибка загрузки плагина",
- "SERVER_ERROR_ADDPLAYER": "Не удалось добавить игрока",
- "SERVER_ERROR_POLLING": "снижение частоты обновления данных",
- "SERVER_ERROR_COMMUNICATION": "Не удалось связаться с",
- "SERVER_ERROR_EXCEPTION": "Неожиданное исключение на",
- "COMMANDS_QUIT_DESC": "покинуть IW4MAdmin",
- "COMMANDS_OWNER_DESC": "утверить владение сервером",
- "COMMANDS_WARN_DESC": "предупредить игрока за нарушение правил",
- "COMMANDS_WARNCLEAR_DESC": "удалить все предупреждения у игрока",
- "COMMANDS_KICK_DESC": "исключить игрока по имени",
- "COMMANDS_SAY_DESC": "транслировать сообщения всем игрокам",
- "COMMANDS_TEMPBAN_DESC": "временно забанить игрока на определенное время (по умолчанию: 1 час)",
- "COMMANDS_BAN_DESC": "навсегда забанить игрока на сервере",
- "COMMANDS_UNBAN_DESC": "разбанить игрока по ID игрока",
- "COMMANDS_WHO_DESC": "предоставить информацию о себе",
- "COMMANDS_LIST_DESC": "перечислить действующих игроков",
- "COMMANDS_HELP_DESC": "перечислить все доступные команды",
- "COMMANDS_FASTRESTART_DESC": "перезапустить нынешнюю карту",
- "COMMANDS_MAPROTATE_DESC": "переключиться на следующую карту в ротации",
- "COMMANDS_SETLEVEL_DESC": "установить особый уровень прав игроку",
- "COMMANDS_USAGE_DESC": "узнать о потреблении памяти приложением",
- "COMMANDS_USAGE_TEXT": "используется",
- "COMMANDS_UPTIME_DESC": "получить время с начала запуска текущего приложения",
- "COMMANDS_UPTIME_TEXT": "был в сети",
- "COMMANDS_ADMINS_DESC": "перечислить присоединенных на данный момент игроков с правами",
- "COMMANDS_MAP_DESC": "сменить на определенную карту",
- "COMMANDS_FIND_DESC": "найти игрока в базе данных",
- "COMMANDS_RULES_DESC": "перечислить правила сервера",
- "COMMANDS_PM_DESC": "отправить сообщение другому игроку",
- "COMMANDS_FLAG_DESC": "отметить подозрительного игрока и сообщить администраторам, чтобы присоединились",
- "COMMANDS_REPORT_DESC": "пожаловаться на игрока за подозрительное поведение",
- "COMMANDS_REPORTS_DESC": "получить или очистить последние жалобы",
- "COMMANDS_MASK_DESC": "скрыть свое присутствие как игрока с правами",
- "COMMANDS_BANINFO_DESC": "получить информацию о бане игрока",
- "COMMANDS_ALIAS_DESC": "получить прошлые имена и IP игрока",
- "COMMANDS_RCON_DESC": "отправить RCon команду на сервер",
- "COMMANDS_PLUGINS_DESC": "просмотреть все загруженные плагины",
- "COMMANDS_IP_DESC": "просмотреть ваш внешний IP-адрес",
- "COMMANDS_PRUNE_DESC": "понизить любых игроков с правами, которые не подключались за последнее время (по умолчанию: 30 дней)",
- "COMMANDS_SETPASSWORD_DESC": "установить свой пароль аутентификации",
- "COMMANDS_PING_DESC": "получить пинг игрока",
- "COMMANDS_ARGS_PLAYER": "игрок",
- "COMMANDS_ARGS_REASON": "причина",
- "COMMANDS_ARGS_MESSAGE": "сообщение",
- "COMMANDS_ARGS_DURATION": "длительность (m|h|d|w|y)",
- "COMMANDS_ARGS_CLIENTID": "ID игрока",
- "COMMANDS_ARGS_COMMANDS": "команды",
- "COMMANDS_ARGS_LEVEL": "уровень",
- "COMMANDS_ARGS_MAP": "карта",
- "COMMANDS_ARGS_CLEAR": "очистить",
- "COMMANDS_ARGS_INACTIVE": "дни бездействия",
- "COMMANDS_ARGS_PASSWORD": "пароль",
- "PLUGINS_LOGIN_COMMANDS_LOGIN_DESC": "войти, используя пароль",
- "PLUGINS_LOGIN_COMMANDS_LOGIN_SUCCESS": "Вы теперь вошли",
- "PLUGINS_LOGIN_COMMANDS_LOGIN_FAIL": "Ваш пароль неверный",
- "PLUGINS_STATS_COMMANDS_RESET_DESC": "сбросить вашу статистику под ноль",
- "PLUGINS_STATS_COMMANDS_RESET_SUCCESS": "Ваша статистика на этом сервере была сброшена",
- "PLUGINS_STATS_COMMANDS_RESET_FAIL": "Вы должны быть подключены к серверу, чтобы сбросить свою статистику",
- "PLUGINS_STATS_COMMANDS_VIEW_DESC": "просмотреть свою статистику",
- "PLUGINS_STATS_COMMANDS_VIEW_FAIL_INGAME": "Указанный игрок должен быть в игре",
- "PLUGINS_STATS_COMMANDS_VIEW_FAIL_INGAME_SELF": "Вы должны быть в игре, чтобы просмотреть свою статистику",
- "PLUGINS_STATS_COMMANDS_VIEW_FAIL": "Не удается найти игрока, которого вы указали.",
- "PLUGINS_STATS_COMMANDS_VIEW_SUCCESS": "Статистика",
- "PLUGINS_STATS_COMMANDS_TOP_DESC": "показать топ-5 лучших игроков на этом сервере",
- "PLUGINS_STATS_COMMANDS_TOP_TEXT": "Лучшие игроки",
- "PLUGINS_STATS_TEXT_KILLS": "УБИЙСТВ",
- "PLUGINS_STATS_TEXT_DEATHS": "СМЕРТЕЙ",
- "PLUGINS_STATS_TEXT_SKILL": "МАСТЕРСТВО",
- "GLOBAL_DAYS": "дней",
- "GLOBAL_HOURS": "часов",
- "GLOBAL_MINUTES": "минут",
- "GLOBAL_REPORT": "Если вы подозреваете кого-то в ^5ЧИТЕРСТВЕ^7, используйте команду ^5!report",
- "GLOBAL_ERROR": "Ошибка",
- "GLOBAL_WARNING": "Предупреждение",
- "GLOBAL_INFO": "Информация",
- "GLOBAL_VERBOSE": "Подробно"
+ "LocalizationIndex": {
+ "Set": {
+ "MANAGER_VERSION_FAIL": "Не удалось получить последнюю версию IW4MAdmin",
+ "MANAGER_VERSION_UPDATE": "- есть обновление. Последняя версия:",
+ "MANAGER_VERSION_CURRENT": "Ваша версия:",
+ "MANAGER_VERSION_SUCCESS": "IW4MAdmin обновлен",
+ "MANAGER_INIT_FAIL": "Критическая ошибка во время инициализации",
+ "MANAGER_EXIT": "Нажмите любую клавишу, чтобы выйти...",
+ "SETUP_ENABLE_WEBFRONT": "Включить веб-интерфейс",
+ "SETUP_ENABLE_MULTIOWN": "Включить поддержку нескольких владельцев",
+ "SETUP_ENABLE_STEPPEDPRIV": "Включить последовательную иерархию прав",
+ "SETUP_ENABLE_CUSTOMSAY": "Включить кастомное имя для чата",
+ "SETUP_SAY_NAME": "Введите кастомное имя для чата",
+ "SETUP_USE_CUSTOMENCODING": "Использовать кастомную кодировку парсера",
+ "SETUP_ENCODING_STRING": "Введите кодировку",
+ "SETUP_ENABLE_VPNS": "Включить поддержку VPN у игроков",
+ "SETUP_IPHUB_KEY": "Введите iphub.info api-ключ",
+ "SETUP_DISPLAY_DISCORD": "Отображать ссылку на Discord в веб-интерфейсе",
+ "SETUP_DISCORD_INVITE": "Введите ссылку-приглашение в Discord",
+ "SETUP_SERVER_USET6M": "Использовать Pluto T6 парсер",
+ "SETUP_SERVER_USEIW5M": "Использовать парсер Pluto IW5",
+ "SETUP_SERVER_MANUALLOG": "Введите путь для лог-файла",
+ "SETUP_SERVER_IP": "Введите IP-адрес сервера",
+ "SETUP_SERVER_PORT": "Введите порт сервера",
+ "SETUP_SERVER_RCON": "Введите RCon пароль сервера",
+ "SETUP_SERVER_SAVE": "Настройки сохранены, добавить",
+ "SERVER_KICK_VPNS_NOTALLOWED": "Использование VPN не разрешено на этом сервере",
+ "SERVER_KICK_TEXT": "Вы были исключены",
+ "SERVER_KICK_MINNAME": "Ваше имя должно содержать хотя бы 3 символа",
+ "SERVER_KICK_NAME_INUSE": "Ваше имя используется кем-то другим",
+ "SERVER_KICK_GENERICNAME": "Пожалуйста, смените ваше имя, используя /name",
+ "SERVER_KICK_CONTROLCHARS": "Ваше имя не должно содержать спецсимволы",
+ "SERVER_TB_TEXT": "Вы временно забанены",
+ "SERVER_TB_REMAIN": "Вы временно забанены",
+ "SERVER_BAN_TEXT": "Вы забанены",
+ "SERVER_BAN_PREV": "Ранее забанены за",
+ "SERVER_BAN_APPEAL": "оспорить:",
+ "SERVER_REPORT_COUNT": "Имеется ^5{0} ^7жалоб за последнее время",
+ "SERVER_WARNLIMT_REACHED": "Слишком много предупреждений",
+ "SERVER_WARNING": "Предупреждение",
+ "SERVER_WEBSITE_GENERIC": "веб-сайт этого сервера",
+ "BROADCAST_ONLINE": "^5IW4MADMIN ^7сейчас СЕТИ",
+ "BROADCAST_OFFLINE": "IW4MAdmin отключается",
+ "COMMAND_HELP_SYNTAX": "синтаксис:",
+ "COMMAND_HELP_OPTIONAL": "опционально",
+ "COMMAND_UNKNOWN": "Вы ввели неизвестную команду",
+ "COMMAND_NOACCESS": "У вас нет доступа к этой команде",
+ "COMMAND_NOTAUTHORIZED": "Вы не авторизованы для исполнения этой команды",
+ "COMMAND_MISSINGARGS": "Недостаточно аргументов приведено",
+ "COMMAND_TARGET_MULTI": "Несколько игроков соответствуют этому имени",
+ "COMMAND_TARGET_NOTFOUND": "Невозможно найти указанного игрока",
+ "PLUGIN_IMPORTER_NOTFOUND": "Не найдено плагинов для загрузки",
+ "PLUGIN_IMPORTER_REGISTERCMD": "Зарегистрированная команда",
+ "COMMANDS_OWNER_SUCCESS": "Поздравления, вы утвердили владение этим сервером!",
+ "COMMANDS_OWNER_FAIL": "Этот сервер уже имеет владельца",
+ "COMMANDS_WARN_FAIL": "У вас недостаточно прав, чтобы выносить предупреждения",
+ "COMMANDS_WARNCLEAR_SUCCESS": "Все предупреждения очищены за",
+ "COMMANDS_KICK_SUCCESS": "был исключен",
+ "COMMANDS_KICK_FAIL": "У вас нет достаточных прав, чтобы исключать",
+ "COMMANDS_TEMPBAN_SUCCESS": "был временно забанен за",
+ "COMMANDS_TEMPBAN_FAIL": "Вы не можете выдавать временный бан",
+ "COMMANDS_BAN_SUCCESS": "был забанен навсегда",
+ "COMMANDS_BAN_FAIL": "Вы не можете выдавать бан",
+ "COMMANDS_UNBAN_SUCCESS": "Успешно разбанен",
+ "COMMANDS_UNBAN_FAIL": "не забанен",
+ "COMMANDS_HELP_NOTFOUND": "Не удалось найти эту команду",
+ "COMMANDS_HELP_MOREINFO": "Введите !help <имя команды>, чтобы узнать синтаксис для использования команды",
+ "COMMANDS_FASTRESTART_UNMASKED": "перезапустил карту",
+ "COMMANDS_FASTRESTART_MASKED": "Карта была перезапущена",
+ "COMMANDS_MAPROTATE": "Смена карты через ^55 ^7секунд",
+ "COMMANDS_SETLEVEL_SELF": "Вы не можете изменить свой уровень",
+ "COMMANDS_SETLEVEL_OWNER": "Может быть только 1 владелец. Измените настройки, если требуется несколько владельцов",
+ "COMMANDS_SETLEVEL_STEPPEDDISABLED": "Этот сервер не разрешает вам повыситься",
+ "COMMANDS_SETLEVEL_LEVELTOOHIGH": "Вы только можете повысить ^5{0} ^7до ^5{1} ^7или понизиться в правах",
+ "COMMANDS_SETLEVEL_SUCCESS_TARGET": "Поздравления! Вы были повышены до",
+ "COMMANDS_SETLEVEL_SUCCESS": "был успешно повышен",
+ "COMMANDS_SETLEVEL_FAIL": "Указана неверная группа",
+ "COMMANDS_ADMINS_NONE": "Нет администраторов в сети",
+ "COMMANDS_MAP_SUCCESS": "Смена карты на",
+ "COMMANDS_MAP_UKN": "Попытка сменить на неизвестную карту",
+ "COMMANDS_FIND_MIN": "Пожалуйста, введите хотя бы 3 символа",
+ "COMMANDS_FIND_EMPTY": "Не найдено игроков",
+ "COMMANDS_RULES_NONE": "Владелец сервера не установил никаких правил",
+ "COMMANDS_FLAG_SUCCESS": "Вы были отмечены",
+ "COMMANDS_FLAG_UNFLAG": "С вас сняли отметку",
+ "COMMANDS_FLAG_FAIL": "Вы не можете ставить отметки",
+ "COMMANDS_REPORT_FAIL_CAMP": "Вы не можете пожаловаться на игрока за кемперство",
+ "COMMANDS_REPORT_FAIL_DUPLICATE": "Вы уже пожаловались на этого игрока",
+ "COMMANDS_REPORT_FAIL_SELF": "Вы не можете пожаловаться на самого себя",
+ "COMMANDS_REPORT_FAIL": "Вы не можете пожаловаться",
+ "COMMANDS_REPORT_SUCCESS": "Спасибо за вашу жалобу, администратор оповещен",
+ "COMMANDS_REPORTS_CLEAR_SUCCESS": "Жалобы успешно очищены",
+ "COMMANDS_REPORTS_NONE": "Пока нет жалоб на игроков",
+ "COMMANDS_MASK_ON": "Вы теперь замаскированы",
+ "COMMANDS_MASK_OFF": "Вы теперь демаскированы",
+ "COMMANDS_BANINFO_NONE": "Не найдено действующего бана для этого игрока",
+ "COMMANDS_BANINO_SUCCESS": "был забанен игроком ^5{0} ^7на:",
+ "COMMANDS_ALIAS_ALIASES": "Имена",
+ "COMMANDS_ALIAS_IPS": "IP",
+ "COMMANDS_RCON_SUCCESS": "Успешно отправлена команда RCon",
+ "COMMANDS_PLUGINS_LOADED": "Загруженные плагины",
+ "COMMANDS_IP_SUCCESS": "Ваш внешний IP:",
+ "COMMANDS_PRUNE_FAIL": "Неверное количество дней бездействия",
+ "COMMANDS_PRUNE_SUCCESS": "бездействующих пользователей с правами было сокращено",
+ "COMMANDS_PASSWORD_FAIL": "Ваш пароль должен быть хотя бы 5 символов в длину",
+ "COMMANDS_PASSWORD_SUCCESS": "Ваш пароль был успешно установлен",
+ "COMMANDS_PING_TARGET": "пинг:",
+ "COMMANDS_PING_SELF": "Ваш пинг:",
+ "MANAGER_SHUTDOWN_SUCCESS": "Выключение завершено",
+ "MANAGER_MONITORING_TEXT": "Идет мониторинг",
+ "MANAGER_CONNECTION_REST": "Соединение было восстановлено с помощью",
+ "SERVER_ERROR_DNE": "не существует",
+ "SERVER_ERROR_LOG": "Неверный файл игрового лога",
+ "SERVER_ERROR_COMMAND_INGAME": "Произошла внутренняя ошибка при обработке вашей команды",
+ "SERVER_ERROR_COMMAND_LOG": "команда сгенерировала ошибку",
+ "SERVER_ERROR_UNFIXABLE": "Мониторинг сервера выключен из-за неисправимых ошибок",
+ "SERVER_ERROR_DVAR": "Не удалось получить значение dvar:",
+ "SERVER_ERROR_DVAR_HELP": "убедитесь, что на сервере загружена карта",
+ "SERVER_ERROR_PLUGIN": "Произошла ошибка загрузки плагина",
+ "SERVER_ERROR_ADDPLAYER": "Не удалось добавить игрока",
+ "SERVER_ERROR_POLLING": "снижение частоты обновления данных",
+ "SERVER_ERROR_COMMUNICATION": "Не удалось связаться с",
+ "SERVER_ERROR_EXCEPTION": "Неожиданное исключение на",
+ "COMMANDS_QUIT_DESC": "покинуть IW4MAdmin",
+ "COMMANDS_OWNER_DESC": "утверить владение сервером",
+ "COMMANDS_WARN_DESC": "предупредить игрока за нарушение правил",
+ "COMMANDS_WARNCLEAR_DESC": "удалить все предупреждения у игрока",
+ "COMMANDS_KICK_DESC": "исключить игрока по имени",
+ "COMMANDS_SAY_DESC": "транслировать сообщения всем игрокам",
+ "COMMANDS_TEMPBAN_DESC": "временно забанить игрока на определенное время (по умолчанию: 1 час)",
+ "COMMANDS_BAN_DESC": "навсегда забанить игрока на сервере",
+ "COMMANDS_UNBAN_DESC": "разбанить игрока по ID игрока",
+ "COMMANDS_WHO_DESC": "предоставить информацию о себе",
+ "COMMANDS_LIST_DESC": "перечислить действующих игроков",
+ "COMMANDS_HELP_DESC": "перечислить все доступные команды",
+ "COMMANDS_FASTRESTART_DESC": "перезапустить нынешнюю карту",
+ "COMMANDS_MAPROTATE_DESC": "переключиться на следующую карту в ротации",
+ "COMMANDS_SETLEVEL_DESC": "установить особый уровень прав игроку",
+ "COMMANDS_USAGE_DESC": "узнать о потреблении памяти приложением",
+ "COMMANDS_USAGE_TEXT": "используется",
+ "COMMANDS_UPTIME_DESC": "получить время с начала запуска текущего приложения",
+ "COMMANDS_UPTIME_TEXT": "был в сети",
+ "COMMANDS_ADMINS_DESC": "перечислить присоединенных на данный момент игроков с правами",
+ "COMMANDS_MAP_DESC": "сменить на определенную карту",
+ "COMMANDS_FIND_DESC": "найти игрока в базе данных",
+ "COMMANDS_RULES_DESC": "перечислить правила сервера",
+ "COMMANDS_PM_DESC": "отправить сообщение другому игроку",
+ "COMMANDS_FLAG_DESC": "отметить подозрительного игрока и сообщить администраторам, чтобы присоединились",
+ "COMMANDS_REPORT_DESC": "пожаловаться на игрока за подозрительное поведение",
+ "COMMANDS_REPORTS_DESC": "получить или очистить последние жалобы",
+ "COMMANDS_MASK_DESC": "скрыть свое присутствие как игрока с правами",
+ "COMMANDS_BANINFO_DESC": "получить информацию о бане игрока",
+ "COMMANDS_ALIAS_DESC": "получить прошлые имена и IP игрока",
+ "COMMANDS_RCON_DESC": "отправить RCon команду на сервер",
+ "COMMANDS_PLUGINS_DESC": "просмотреть все загруженные плагины",
+ "COMMANDS_IP_DESC": "просмотреть ваш внешний IP-адрес",
+ "COMMANDS_PRUNE_DESC": "понизить любых игроков с правами, которые не подключались за последнее время (по умолчанию: 30 дней)",
+ "COMMANDS_SETPASSWORD_DESC": "установить свой пароль аутентификации",
+ "COMMANDS_PING_DESC": "получить пинг игрока",
+ "COMMANDS_ARGS_PLAYER": "игрок",
+ "COMMANDS_ARGS_REASON": "причина",
+ "COMMANDS_ARGS_MESSAGE": "сообщение",
+ "COMMANDS_ARGS_DURATION": "длительность (m|h|d|w|y)",
+ "COMMANDS_ARGS_CLIENTID": "ID игрока",
+ "COMMANDS_ARGS_COMMANDS": "команды",
+ "COMMANDS_ARGS_LEVEL": "уровень",
+ "COMMANDS_ARGS_MAP": "карта",
+ "COMMANDS_ARGS_CLEAR": "очистить",
+ "COMMANDS_ARGS_INACTIVE": "дни бездействия",
+ "COMMANDS_ARGS_PASSWORD": "пароль",
+ "PLUGINS_LOGIN_COMMANDS_LOGIN_DESC": "войти, используя пароль",
+ "PLUGINS_LOGIN_COMMANDS_LOGIN_SUCCESS": "Вы теперь вошли",
+ "PLUGINS_LOGIN_COMMANDS_LOGIN_FAIL": "Ваш пароль неверный",
+ "PLUGINS_STATS_COMMANDS_RESET_DESC": "сбросить вашу статистику под ноль",
+ "PLUGINS_STATS_COMMANDS_RESET_SUCCESS": "Ваша статистика на этом сервере была сброшена",
+ "PLUGINS_STATS_COMMANDS_RESET_FAIL": "Вы должны быть подключены к серверу, чтобы сбросить свою статистику",
+ "PLUGINS_STATS_COMMANDS_VIEW_DESC": "просмотреть свою статистику",
+ "PLUGINS_STATS_COMMANDS_VIEW_FAIL_INGAME": "Указанный игрок должен быть в игре",
+ "PLUGINS_STATS_COMMANDS_VIEW_FAIL_INGAME_SELF": "Вы должны быть в игре, чтобы просмотреть свою статистику",
+ "PLUGINS_STATS_COMMANDS_VIEW_FAIL": "Не удается найти игрока, которого вы указали.",
+ "PLUGINS_STATS_COMMANDS_VIEW_SUCCESS": "Статистика",
+ "PLUGINS_STATS_COMMANDS_TOP_DESC": "показать топ-5 лучших игроков на этом сервере",
+ "PLUGINS_STATS_COMMANDS_TOP_TEXT": "Лучшие игроки",
+ "PLUGINS_STATS_TEXT_KILLS": "УБИЙСТВ",
+ "PLUGINS_STATS_TEXT_DEATHS": "СМЕРТЕЙ",
+ "PLUGINS_STATS_TEXT_SKILL": "МАСТЕРСТВО",
+ "GLOBAL_DAYS": "дней",
+ "GLOBAL_HOURS": "часов",
+ "GLOBAL_MINUTES": "минут",
+ "GLOBAL_REPORT": "Если вы подозреваете кого-то в ^5ЧИТЕРСТВЕ^7, используйте команду ^5!report",
+ "GLOBAL_ERROR": "Ошибка",
+ "GLOBAL_WARNING": "Предупреждение",
+ "GLOBAL_INFO": "Информация",
+ "GLOBAL_VERBOSE": "Подробно",
+
+ "MANAGER_CONSOLE_NOSERV": "На данный момент нет серверов под мониторингом",
+ "SERVER_PLUGIN_ERROR": "Плагин произвел ошибку",
+ "PLUGINS_STATS_TEXT_NOQUALIFY": "Ещё нет совернующихся игроков за лучшую статистику"
+ }
}
}
\ No newline at end of file
diff --git a/Application/Logger.cs b/Application/Logger.cs
index 90a63f0f..ef0c5eaa 100644
--- a/Application/Logger.cs
+++ b/Application/Logger.cs
@@ -8,7 +8,7 @@ namespace IW4MAdmin.Application
class Logger : SharedLibraryCore.Interfaces.ILogger
{
enum LogType
- {
+ {
Verbose,
Info,
Debug,
@@ -30,8 +30,14 @@ namespace IW4MAdmin.Application
void Write(string msg, LogType type)
{
- if (!Utilities.CurrentLocalization.LocalizationSet.TryGetValue($"GLOBAL_{type.ToString().ToUpper()}", out string stringType))
- stringType = type.ToString();
+ string stringType = type.ToString();
+
+ try
+ {
+ stringType = Utilities.CurrentLocalization.LocalizationIndex[$"GLOBAL_{type.ToString().ToUpper()}"];
+ }
+
+ catch (Exception) { }
string LogLine = $"[{DateTime.Now.ToString("HH:mm:ss")}] - {stringType}: {msg}";
lock (ThreadLock)
diff --git a/Application/Main.cs b/Application/Main.cs
index adc55467..b238ba7b 100644
--- a/Application/Main.cs
+++ b/Application/Main.cs
@@ -8,6 +8,8 @@ using SharedLibraryCore.Objects;
using SharedLibraryCore.Database;
using System.Text;
using System.Threading;
+using System.Collections.Generic;
+using SharedLibraryCore.Localization;
namespace IW4MAdmin.Application
{
@@ -21,8 +23,7 @@ namespace IW4MAdmin.Application
{
AppDomain.CurrentDomain.SetData("DataDirectory", OperatingDirectory);
//System.Diagnostics.Process.GetCurrentProcess().PriorityClass = System.Diagnostics.ProcessPriorityClass.BelowNormal;
- Localization.Configure.Initialize();
- var loc = Utilities.CurrentLocalization.LocalizationSet;
+
Console.OutputEncoding = Encoding.UTF8;
Console.ForegroundColor = ConsoleColor.Gray;
@@ -35,11 +36,15 @@ namespace IW4MAdmin.Application
Console.WriteLine($" Version {Version.ToString("0.0")}");
Console.WriteLine("=====================================================");
+ Index loc = null;
+
try
{
CheckDirectories();
ServerManager = ApplicationManager.GetInstance();
+ Localization.Configure.Initialize(ServerManager.GetApplicationSettings().Configuration()?.CustomLocale);
+ loc = Utilities.CurrentLocalization.LocalizationIndex;
using (var db = new DatabaseContext(ServerManager.GetApplicationSettings().Configuration()?.ConnectionString))
new ContextSeed(db).Seed().Wait();
diff --git a/Application/Manager.cs b/Application/Manager.cs
index 81411dcb..28a67f49 100644
--- a/Application/Manager.cs
+++ b/Application/Manager.cs
@@ -132,7 +132,7 @@ namespace IW4MAdmin.Application
catch (Exception E)
{
- Logger.WriteError($"{Utilities.CurrentLocalization.LocalizationSet["SERVER_ERROR_EXCEPTION"]} {sensitiveEvent.Owner}");
+ Logger.WriteError($"{Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_EXCEPTION"]} {sensitiveEvent.Owner}");
Logger.WriteDebug("Error Message: " + E.Message);
Logger.WriteDebug("Error Trace: " + E.StackTrace);
sensitiveEvent.OnProcessed.Set();
@@ -203,7 +203,7 @@ namespace IW4MAdmin.Application
do
{
newConfig.Servers.Add((ServerConfiguration)new ServerConfiguration().Generate());
- } while (Utilities.PromptBool(Utilities.CurrentLocalization.LocalizationSet["SETUP_SERVER_SAVE"]));
+ } while (Utilities.PromptBool(Utilities.CurrentLocalization.LocalizationIndex["SETUP_SERVER_SAVE"]));
config = newConfig;
await ConfigHandler.Save();
@@ -244,7 +244,7 @@ namespace IW4MAdmin.Application
catch (Exception e)
{
- Logger.WriteError($"{Utilities.CurrentLocalization.LocalizationSet["SERVER_ERROR_PLUGIN"]} {Plugin.Name}");
+ Logger.WriteError($"{Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_PLUGIN"]} {Plugin.Name}");
Logger.WriteDebug($"Exception: {e.Message}");
Logger.WriteDebug($"Stack Trace: {e.StackTrace}");
}
@@ -286,7 +286,7 @@ namespace IW4MAdmin.Application
Commands.Add(new CIP());
Commands.Add(new CMask());
Commands.Add(new CPruneAdmins());
- //Commands.Add(new CKillServer());
+ Commands.Add(new CKillServer());
Commands.Add(new CSetPassword());
Commands.Add(new CPing());
@@ -307,16 +307,16 @@ namespace IW4MAdmin.Application
_servers.Add(ServerInstance);
}
- Logger.WriteVerbose($"{Utilities.CurrentLocalization.LocalizationSet["MANAGER_MONITORING_TEXT"]} {ServerInstance.Hostname}");
+ Logger.WriteVerbose($"{Utilities.CurrentLocalization.LocalizationIndex["MANAGER_MONITORING_TEXT"]} {ServerInstance.Hostname}");
// add the start event for this server
Handler.AddEvent(new GameEvent(GameEvent.EventType.Start, "Server started", null, null, ServerInstance));
}
catch (ServerException e)
{
- Logger.WriteError($"{Utilities.CurrentLocalization.LocalizationSet["SERVER_ERROR_UNFIXABLE"]} [{Conf.IPAddress}:{Conf.Port}]");
+ Logger.WriteError($"{Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_UNFIXABLE"]} [{Conf.IPAddress}:{Conf.Port}]");
if (e.GetType() == typeof(DvarException))
- Logger.WriteDebug($"{Utilities.CurrentLocalization.LocalizationSet["SERVER_ERROR_DVAR"]} {(e as DvarException).Data["dvar_name"]} ({Utilities.CurrentLocalization.LocalizationSet["SERVER_ERROR_DVAR_HELP"]})");
+ Logger.WriteDebug($"{Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_DVAR"]} {(e as DvarException).Data["dvar_name"]} ({Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_DVAR_HELP"]})");
else if (e.GetType() == typeof(NetworkException))
{
Logger.WriteDebug(e.Message);
@@ -418,7 +418,7 @@ namespace IW4MAdmin.Application
catch (Exception E)
{
- Logger.WriteError($"{Utilities.CurrentLocalization.LocalizationSet["SERVER_ERROR_EXCEPTION"]} {newEvent.Owner}");
+ Logger.WriteError($"{Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_EXCEPTION"]} {newEvent.Owner}");
Logger.WriteDebug("Error Message: " + E.Message);
Logger.WriteDebug("Error Trace: " + E.StackTrace);
newEvent.OnProcessed.Set();
@@ -435,7 +435,7 @@ namespace IW4MAdmin.Application
HeartbeatTimer.Change(0, Timeout.Infinite);
foreach (var S in Servers)
- S.Broadcast(Utilities.CurrentLocalization.LocalizationSet["BROADCAST_OFFLINE"]).Wait();
+ S.Broadcast("^1" + Utilities.CurrentLocalization.LocalizationIndex["BROADCAST_OFFLINE"]).Wait();
#endif
_servers.Clear();
}
diff --git a/Application/RconParsers/IW4RConParser.cs b/Application/RconParsers/IW4RConParser.cs
index 71ebf6ca..5799d077 100644
--- a/Application/RconParsers/IW4RConParser.cs
+++ b/Application/RconParsers/IW4RConParser.cs
@@ -23,7 +23,7 @@ namespace Application.RconParsers
TempBan = "tempbanclient {0} \"{1}\""
};
- private static string StatusRegex = @"^( *[0-9]+) +([0-9]+) +((?:[A-Z]+|[0-9]+)) +((?:[a-z]|[0-9]){16}|bot[0-9]+) +(.{0,20}) +([0-9]+) +(\d+\.\d+\.\d+.\d+\:-*\d{1,5}|0+.0+:-*\d{1,5}) +(-*[0-9]+) +([0-9]+) *$";
+ private static string StatusRegex = @"^( *[0-9]+) +-*([0-9]+) +((?:[A-Z]+|[0-9]+)) +((?:[a-z]|[0-9]){16}|bot[0-9]+) +(.{0,20}) +([0-9]+) +(\d+\.\d+\.\d+.\d+\:-*\d{1,5}|0+.0+:-*\d{1,5}) +(-*[0-9]+) +([0-9]+) *$";
public async Task ExecuteCommandAsync(Connection connection, string command)
{
@@ -118,7 +118,6 @@ namespace Application.RconParsers
if (P.IsBot)
{
- P.NetworkId = -(P.ClientNumber + 1);
P.IPAddress = P.ClientNumber + 1;
}
@@ -126,6 +125,11 @@ namespace Application.RconParsers
}
}
+ // this happens if status is requested while map is rotating
+ if (Status[1] == "Rotating map...")
+ {
+ throw new ServerException("Server is rotating map");
+ }
if (Status.Length > 5 && validMatches == 0)
{
diff --git a/Application/Server.cs b/Application/Server.cs
index 4b31397b..0359c5bd 100644
--- a/Application/Server.cs
+++ b/Application/Server.cs
@@ -19,13 +19,14 @@ using Application.Misc;
using Application.RconParsers;
using IW4MAdmin.Application.EventParsers;
using IW4MAdmin.Application.IO;
+using SharedLibraryCore.Localization;
namespace IW4MAdmin
{
public class IW4MServer : Server
{
private CancellationToken cts;
- private static Dictionary loc = Utilities.CurrentLocalization.LocalizationSet;
+ private static Index loc = Utilities.CurrentLocalization.LocalizationIndex;
private GameLogEvent LogEvent;
@@ -203,7 +204,7 @@ namespace IW4MAdmin
if (!Manager.GetApplicationSettings().Configuration().EnableClientVPNs &&
await VPNCheck.UsingVPN(player.IPAddressString, Manager.GetApplicationSettings().Configuration().IPHubAPIKey))
{
- await player.Kick(Utilities.CurrentLocalization.LocalizationSet["SERVER_KICK_VPNS_NOTALLOWED"], new Player() { ClientId = 1 });
+ await player.Kick(Utilities.CurrentLocalization.LocalizationIndex["SERVER_KICK_VPNS_NOTALLOWED"], new Player() { ClientId = 1 });
}
return true;
@@ -709,7 +710,11 @@ namespace IW4MAdmin
&& BroadcastMessages.Count > 0
&& ClientNum > 0)
{
- await Broadcast(Utilities.ProcessMessageToken(Manager.GetMessageTokens(), BroadcastMessages[NextMessage]));
+ string[] messages = this.ProcessMessageToken(Manager.GetMessageTokens(), BroadcastMessages[NextMessage]).Split(Environment.NewLine);
+
+ foreach(string message in messages)
+ await Broadcast(message);
+
NextMessage = NextMessage == (BroadcastMessages.Count - 1) ? 0 : NextMessage + 1;
start = DateTime.Now;
}
@@ -821,7 +826,7 @@ namespace IW4MAdmin
CustomCallback = await ScriptLoaded();
string mainPath = EventParser.GetGameDir();
#if DEBUG
- basepath.Value = @"\\192.168.88.253\mw2";
+ basepath.Value = @"\\192.168.88.253\Call of Duty Black Ops II";
#endif
string logPath;
if (GameName == Game.IW5)
@@ -1051,8 +1056,8 @@ namespace IW4MAdmin
override public void InitializeTokens()
{
- Manager.GetMessageTokens().Add(new SharedLibraryCore.Helpers.MessageToken("TOTALPLAYERS", Manager.GetClientService().GetTotalClientsAsync().Result.ToString));
- Manager.GetMessageTokens().Add(new SharedLibraryCore.Helpers.MessageToken("VERSION", Application.Program.Version.ToString));
+ Manager.GetMessageTokens().Add(new SharedLibraryCore.Helpers.MessageToken("TOTALPLAYERS", (Server s) => Manager.GetClientService().GetTotalClientsAsync().Result.ToString()));
+ Manager.GetMessageTokens().Add(new SharedLibraryCore.Helpers.MessageToken("VERSION", (Server s) => Application.Program.Version.ToString()));
}
}
}
diff --git a/Plugins/Login/Commands/CLogin.cs b/Plugins/Login/Commands/CLogin.cs
index c12937eb..31666de6 100644
--- a/Plugins/Login/Commands/CLogin.cs
+++ b/Plugins/Login/Commands/CLogin.cs
@@ -8,7 +8,7 @@ namespace IW4MAdmin.Plugins.Login.Commands
{
public class CLogin : Command
{
- public CLogin() : base("login", Utilities.CurrentLocalization.LocalizationSet["PLUGINS_LOGIN_COMMANDS_LOGIN_DESC"], "li", Player.Permission.Trusted, false, new CommandArgument[]
+ public CLogin() : base("login", Utilities.CurrentLocalization.LocalizationIndex["PLUGINS_LOGIN_COMMANDS_LOGIN_DESC"], "li", Player.Permission.Trusted, false, new CommandArgument[]
{
new CommandArgument()
{
@@ -25,12 +25,12 @@ namespace IW4MAdmin.Plugins.Login.Commands
if (hashedPassword[0] == client.Password)
{
Plugin.AuthorizedClients[E.Origin.ClientId] = true;
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["PLUGINS_LOGIN_COMMANDS_LOGIN_SUCCESS"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["PLUGINS_LOGIN_COMMANDS_LOGIN_SUCCESS"]);
}
else
{
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["PLUGINS_LOGIN_COMMANDS_LOGIN_FAIL"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["PLUGINS_LOGIN_COMMANDS_LOGIN_FAIL"]);
}
}
}
diff --git a/Plugins/Stats/Cheat/Detection.cs b/Plugins/Stats/Cheat/Detection.cs
index 6a248a88..33c2d30a 100644
--- a/Plugins/Stats/Cheat/Detection.cs
+++ b/Plugins/Stats/Cheat/Detection.cs
@@ -18,6 +18,7 @@ namespace IW4MAdmin.Plugins.Stats.Cheat
Dictionary HitLocationCount;
EFClientStatistics ClientStats;
DateTime LastKill;
+ long LastOffset;
ILogger Log;
Strain Strain;
@@ -65,7 +66,6 @@ namespace IW4MAdmin.Plugins.Stats.Cheat
return new DetectionPenaltyResult()
{
ClientPenalty = Penalty.PenaltyType.Any,
- RatioAmount = 0
};
if (LastKill == DateTime.MinValue)
@@ -79,6 +79,7 @@ namespace IW4MAdmin.Plugins.Stats.Cheat
// make sure it's divisible by 2
if (kill.AnglesList.Count % 2 == 0)
{
+ /*
double maxDistance = 0;
for (int i = 0; i < kill.AnglesList.Count - 1; i += 1)
{
@@ -92,7 +93,9 @@ namespace IW4MAdmin.Plugins.Stats.Cheat
{
maxDistance = currDistance;
}
- }
+ if (maxDistance > hitLoc.MaxAngleDistance)
+ hitLoc.MaxAngleDistance = (float)maxDistance;
+ }*/
double realAgainstPredict = Vector3.AbsoluteDistance(kill.ViewAngles, kill.AnglesList[10]);
@@ -102,9 +105,6 @@ namespace IW4MAdmin.Plugins.Stats.Cheat
double newAverage = (previousAverage * (hitLoc.HitCount - 1) + realAgainstPredict) / hitLoc.HitCount;
hitLoc.HitOffsetAverage = (float)newAverage;
- if (maxDistance > hitLoc.MaxAngleDistance)
- hitLoc.MaxAngleDistance = (float)maxDistance;
-
if (double.IsNaN(hitLoc.HitOffsetAverage))
{
Log.WriteWarning("[Detection::ProcessKill] HitOffsetAvgerage NaN");
@@ -116,38 +116,40 @@ namespace IW4MAdmin.Plugins.Stats.Cheat
.Where(hl => new List() { 4, 5, 2, 3, }.Contains((int)hl.Location))
.Where(hl => ClientStats.SessionKills > Thresholds.MediumSampleMinKills + 30);
- double banAverage = hitlocations.Count() > 0 ? hitlocations.Average(c =>c.HitOffsetAverage) : 0;
+ var validOffsets = ClientStats.HitLocations.Where(hl => hl.HitCount > 0);
+ double hitOffsetAverage = validOffsets.Sum(o => o.HitCount * o.HitOffsetAverage) / (double)validOffsets.Sum(o => o.HitCount);
- if (banAverage > Thresholds.MaxOffset)
+ if (hitOffsetAverage > Thresholds.MaxOffset)
{
return new DetectionPenaltyResult()
{
ClientPenalty = Penalty.PenaltyType.Ban,
- RatioAmount = banAverage,
+ RatioAmount = hitOffsetAverage,
KillCount = ClientStats.SessionKills,
};
}
#if DEBUG
- Log.WriteDebug($"MaxDistance={maxDistance}, PredictVsReal={realAgainstPredict}");
+ Log.WriteDebug($"PredictVsReal={realAgainstPredict}");
#endif
}
- var currentStrain = Strain.GetStrain(kill.ViewAngles, (kill.When - LastKill).TotalMilliseconds);
+ var currentStrain = Strain.GetStrain(kill.ViewAngles, kill.TimeOffset - LastOffset);
+ LastOffset = kill.TimeOffset;
if (currentStrain > ClientStats.MaxStrain)
{
ClientStats.MaxStrain = currentStrain;
+ }
- if (ClientStats.MaxStrain > Thresholds.MaxStrain)
+ if (Strain.TimesReachedMaxStrain >= 3)
+ {
+ return new DetectionPenaltyResult()
{
- return new DetectionPenaltyResult()
- {
- ClientPenalty = Penalty.PenaltyType.Ban,
- RatioAmount = ClientStats.MaxStrain,
- KillCount = ClientStats.SessionKills,
- };
- }
+ ClientPenalty = Penalty.PenaltyType.Ban,
+ RatioAmount = ClientStats.MaxStrain,
+ KillCount = ClientStats.SessionKills,
+ };
}
#if DEBUG
diff --git a/Plugins/Stats/Cheat/Strain.cs b/Plugins/Stats/Cheat/Strain.cs
index 046d25a2..22b8f577 100644
--- a/Plugins/Stats/Cheat/Strain.cs
+++ b/Plugins/Stats/Cheat/Strain.cs
@@ -11,6 +11,8 @@ namespace IW4MAdmin.Plugins.Stats.Cheat
private double CurrentStrain;
private Vector3 LastAngle;
+ public int TimesReachedMaxStrain { get; private set; }
+
public double GetStrain(Vector3 newAngle, double deltaTime)
{
if (LastAngle == null)
@@ -30,15 +32,12 @@ namespace IW4MAdmin.Plugins.Stats.Cheat
}
double newStrain = Math.Pow(distance[0] + distance[1], 0.99) / deltaTime;
-
- if (newStrain + CurrentStrain > 0.25)
- {
- Console.WriteLine($"{LastAngle}-{newAngle}-{decayFactor}-{CurrentStrain}-{newStrain}-{distance[0]}-{distance[1]}-{deltaTime}");
- }
-
CurrentStrain += newStrain;
+
+ if (CurrentStrain > Thresholds.MaxStrain)
+ TimesReachedMaxStrain++;
+
LastAngle = newAngle;
-
return CurrentStrain;
}
diff --git a/Plugins/Stats/Cheat/Thresholds.cs b/Plugins/Stats/Cheat/Thresholds.cs
index ead66158..4a80dcf9 100644
--- a/Plugins/Stats/Cheat/Thresholds.cs
+++ b/Plugins/Stats/Cheat/Thresholds.cs
@@ -1,8 +1,4 @@
using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
namespace IW4MAdmin.Plugins.Stats.Cheat
{
diff --git a/Plugins/Stats/Commands/ResetStats.cs b/Plugins/Stats/Commands/ResetStats.cs
index 185233c2..8135ffc6 100644
--- a/Plugins/Stats/Commands/ResetStats.cs
+++ b/Plugins/Stats/Commands/ResetStats.cs
@@ -11,7 +11,7 @@ namespace IW4MAdmin.Plugins.Stats.Commands
{
public class ResetStats : Command
{
- public ResetStats() : base("resetstats", Utilities.CurrentLocalization.LocalizationSet["PLUGINS_STATS_COMMANDS_RESET_DESC"], "rs", Player.Permission.User, false) { }
+ public ResetStats() : base("resetstats", Utilities.CurrentLocalization.LocalizationIndex["PLUGINS_STATS_COMMANDS_RESET_DESC"], "rs", Player.Permission.User, false) { }
public override async Task ExecuteAsync(GameEvent E)
{
@@ -32,12 +32,12 @@ namespace IW4MAdmin.Plugins.Stats.Commands
// fixme: this doesn't work properly when another context exists
await svc.SaveChangesAsync();
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["PLUGINS_STATS_COMMANDS_RESET_SUCCESS"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["PLUGINS_STATS_COMMANDS_RESET_SUCCESS"]);
}
else
{
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["PLUGINS_STATS_COMMANDS_RESET_FAIL"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["PLUGINS_STATS_COMMANDS_RESET_FAIL"]);
}
}
}
diff --git a/Plugins/Stats/Commands/TopStats.cs b/Plugins/Stats/Commands/TopStats.cs
index ef1daf48..e2277b02 100644
--- a/Plugins/Stats/Commands/TopStats.cs
+++ b/Plugins/Stats/Commands/TopStats.cs
@@ -8,53 +8,70 @@ using SharedLibraryCore.Objects;
using SharedLibraryCore.Services;
using IW4MAdmin.Plugins.Stats.Models;
using SharedLibraryCore.Database;
+using System.Collections.Generic;
+
namespace IW4MAdmin.Plugins.Stats.Commands
{
class TopStats : Command
{
- public TopStats() : base("topstats", Utilities.CurrentLocalization.LocalizationSet["PLUGINS_STATS_COMMANDS_TOP_DESC"], "ts", Player.Permission.User, false) { }
- public override async Task ExecuteAsync(GameEvent E)
+ public static async Task> GetTopStats(Server s)
{
- var statsSvc = new GenericRepository();
- int serverId = E.Owner.GetHashCode();
+ int serverId = s.GetHashCode();
+ List topStatsText = new List()
+ {
+ $"^5--{Utilities.CurrentLocalization.LocalizationIndex["PLUGINS_STATS_COMMANDS_TOP_TEXT"]}--"
+ };
using (var db = new DatabaseContext())
{
+ db.ChangeTracker.AutoDetectChangesEnabled = false;
+ db.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
+
var thirtyDaysAgo = DateTime.UtcNow.AddMonths(-1);
- var topStats = await (from stats in db.Set()
- join client in db.Clients
- on stats.ClientId equals client.ClientId
- join alias in db.Aliases
- on client.CurrentAliasId equals alias.AliasId
- where stats.TimePlayed >= 3600
- where client.Level != Player.Permission.Banned
- where client.LastConnection >= thirtyDaysAgo
- orderby stats.Skill descending
- select new
- {
- alias.Name,
- stats.KDR,
- stats.Skill
- })
- .Take(5)
- .ToListAsync();
+ var iqStats = (from stats in db.Set()
+ join client in db.Clients
+ on stats.ClientId equals client.ClientId
+ join alias in db.Aliases
+ on client.CurrentAliasId equals alias.AliasId
+ where stats.ServerId == serverId
+ where stats.TimePlayed >= 3600
+ where client.Level != Player.Permission.Banned
+ where client.LastConnection >= thirtyDaysAgo
+ orderby stats.Skill descending
+ select $"^3{client.Name}^7 - ^5{stats.KDR} ^7KDR | ^5{stats.Skill} ^7{Utilities.CurrentLocalization.LocalizationIndex["PLUGINS_STATS_TEXT_SKILL"]}")
+ .Take(5);
- if (!E.Message.IsBroadcastCommand())
+ topStatsText.AddRange(await iqStats.ToListAsync());
+ }
+
+ // no one qualified
+ if (topStatsText.Count == 0)
+ {
+ topStatsText = new List()
{
- await E.Origin.Tell($"^5--{Utilities.CurrentLocalization.LocalizationSet["PLUGINS_STATS_COMMANDS_TOP_TEXT"]}--");
+ Utilities.CurrentLocalization.LocalizationIndex["PLUGINS_STATS_TEXT_NOQUALIFY"]
+ };
+ }
- foreach (var stat in topStats)
- await E.Origin.Tell($"^3{stat.Name}^7 - ^5{stat.KDR} ^7KDR | ^5{stat.Skill} ^7{Utilities.CurrentLocalization.LocalizationSet["PLUGINS_STATS_TEXT_SKILL"]}");
- }
- else
- {
- await E.Owner.Broadcast($"^5--{Utilities.CurrentLocalization.LocalizationSet["PLUGINS_STATS_COMMANDS_TOP_TEXT"]}--");
+ return topStatsText;
+ }
- foreach (var stat in topStats)
- await E.Owner.Broadcast($"^3{stat.Name}^7 - ^5{stat.KDR} ^7KDR | ^5{stat.Skill} ^7{Utilities.CurrentLocalization.LocalizationSet["PLUGINS_STATS_TEXT_SKILL"]}");
- }
+ public TopStats() : base("topstats", Utilities.CurrentLocalization.LocalizationIndex["PLUGINS_STATS_COMMANDS_TOP_DESC"], "ts", Player.Permission.User, false) { }
+
+ public override async Task ExecuteAsync(GameEvent E)
+ {
+ var topStats = await GetTopStats(E.Owner);
+ if (!E.Message.IsBroadcastCommand())
+ {
+ foreach (var stat in topStats)
+ await E.Origin.Tell(stat);
+ }
+ else
+ {
+ foreach (var stat in topStats)
+ await E.Owner.Broadcast(stat);
}
}
}
diff --git a/Plugins/Stats/Commands/ViewStats.cs b/Plugins/Stats/Commands/ViewStats.cs
index 8053674b..cda1193e 100644
--- a/Plugins/Stats/Commands/ViewStats.cs
+++ b/Plugins/Stats/Commands/ViewStats.cs
@@ -12,7 +12,7 @@ namespace IW4MAdmin.Plugins.Stats.Commands
{
public class CViewStats : Command
{
- public CViewStats() : base("stats", Utilities.CurrentLocalization.LocalizationSet["PLUGINS_STATS_COMMANDS_VIEW_DESC"], "xlrstats", Player.Permission.User, false, new CommandArgument[]
+ public CViewStats() : base("stats", Utilities.CurrentLocalization.LocalizationIndex["PLUGINS_STATS_COMMANDS_VIEW_DESC"], "xlrstats", Player.Permission.User, false, new CommandArgument[]
{
new CommandArgument()
{
@@ -24,7 +24,7 @@ namespace IW4MAdmin.Plugins.Stats.Commands
public override async Task ExecuteAsync(GameEvent E)
{
- var loc = Utilities.CurrentLocalization.LocalizationSet;
+ var loc = Utilities.CurrentLocalization.LocalizationIndex;
if (E.Target?.ClientNumber < 0)
{
diff --git a/Plugins/Stats/Helpers/StatManager.cs b/Plugins/Stats/Helpers/StatManager.cs
index c01b408c..3678f1aa 100644
--- a/Plugins/Stats/Helpers/StatManager.cs
+++ b/Plugins/Stats/Helpers/StatManager.cs
@@ -320,6 +320,10 @@ namespace IW4MAdmin.Plugins.Stats.Helpers
{
async Task executePenalty(Cheat.DetectionPenaltyResult penalty)
{
+#if DEBUG
+ Log.WriteVerbose("Player Banned");
+ return;
+#endif
// prevent multiple bans from occuring
if (attacker.Level == Player.Permission.Banned)
{
diff --git a/Plugins/Stats/Plugin.cs b/Plugins/Stats/Plugin.cs
index 17f48955..0c4971b0 100644
--- a/Plugins/Stats/Plugin.cs
+++ b/Plugins/Stats/Plugin.cs
@@ -170,7 +170,8 @@ namespace IW4MAdmin.Plugins.Stats
(double)clientStats.Where(c => c.HitLocations.Count > 0)
.Sum(c => c.HitLocations.Where(hl => hl.Location != IW4Info.HitLocation.none).Sum(f => f.HitCount)), 2);
- hitOffsetAverage = clientStats.Sum(c => c.AverageHitOffset) / Math.Max(1, clientStats.Where(c => c.AverageHitOffset > 0).Count());
+ var validOffsets = clientStats.Where(c => c.HitLocations.Count(hl => hl.HitCount > 0) > 0).SelectMany(hl => hl.HitLocations);
+ hitOffsetAverage = validOffsets.Sum(o => o.HitCount * o.HitOffsetAverage) / (double)validOffsets.Sum(o => o.HitCount);
}
return new List()
@@ -248,22 +249,28 @@ namespace IW4MAdmin.Plugins.Stats
MetaService.AddMeta(getMessages);
- string totalKills()
+ string totalKills(Server server)
{
var serverStats = new GenericRepository();
return serverStats.Find(s => s.Active)
.Sum(c => c.TotalKills).ToString("#,##0");
}
- string totalPlayTime()
+ string totalPlayTime(Server server)
{
var serverStats = new GenericRepository();
return Math.Ceiling((serverStats.GetQuery(s => s.Active)
.Sum(c => c.TotalPlayTime) / 3600.0)).ToString("#,##0");
}
+ string topStats(Server s)
+ {
+ return String.Join(Environment.NewLine, Commands.TopStats.GetTopStats(s).Result);
+ }
+
manager.GetMessageTokens().Add(new MessageToken("TOTALKILLS", totalKills));
manager.GetMessageTokens().Add(new MessageToken("TOTALPLAYTIME", totalPlayTime));
+ manager.GetMessageTokens().Add(new MessageToken("TOPSTATS", topStats));
ServerManager = manager;
diff --git a/SharedLibraryCore/Command.cs b/SharedLibraryCore/Command.cs
index 4b46d3c8..735594c3 100644
--- a/SharedLibraryCore/Command.cs
+++ b/SharedLibraryCore/Command.cs
@@ -29,7 +29,7 @@ namespace SharedLibraryCore
public String Name { get; private set; }
public String Description { get; private set; }
- public String Syntax => $"{Utilities.CurrentLocalization.LocalizationSet["COMMAND_HELP_SYNTAX"]} !{Alias} {String.Join(" ", Arguments.Select(a => $"<{(a.Required ? "" : Utilities.CurrentLocalization.LocalizationSet["COMMAND_HELP_OPTIONAL"] + " ")}{a.Name}>"))}";
+ public String Syntax => $"{Utilities.CurrentLocalization.LocalizationIndex["COMMAND_HELP_SYNTAX"]} !{Alias} {String.Join(" ", Arguments.Select(a => $"<{(a.Required ? "" : Utilities.CurrentLocalization.LocalizationIndex["COMMAND_HELP_OPTIONAL"] + " ")}{a.Name}>"))}";
public String Alias { get; private set; }
public int RequiredArgumentCount => Arguments.Count(c => c.Required);
public bool RequiresTarget { get; private set; }
diff --git a/SharedLibraryCore/Commands/NativeCommands.cs b/SharedLibraryCore/Commands/NativeCommands.cs
index f49eb96a..af59ba56 100644
--- a/SharedLibraryCore/Commands/NativeCommands.cs
+++ b/SharedLibraryCore/Commands/NativeCommands.cs
@@ -7,6 +7,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
+using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace SharedLibraryCore.Commands
@@ -14,7 +15,7 @@ namespace SharedLibraryCore.Commands
public class CQuit : Command
{
public CQuit() :
- base("quit", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_QUIT_DESC"], "q", Player.Permission.Owner, false)
+ base("quit", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_QUIT_DESC"], "q", Player.Permission.Owner, false)
{ }
public override Task ExecuteAsync(GameEvent E)
@@ -26,7 +27,7 @@ namespace SharedLibraryCore.Commands
public class COwner : Command
{
public COwner() :
- base("owner", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_OWNER_DESC"], "iamgod", Player.Permission.User, false)
+ base("owner", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_OWNER_DESC"], "iamgod", Player.Permission.User, false)
{ }
public override async Task ExecuteAsync(GameEvent E)
@@ -34,29 +35,29 @@ namespace SharedLibraryCore.Commands
if ((await (E.Owner.Manager.GetClientService() as ClientService).GetOwners()).Count == 0)
{
E.Origin.Level = Player.Permission.Owner;
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_OWNER_SUCCESS"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_OWNER_SUCCESS"]);
// so setpassword/login works
E.Owner.Manager.GetPrivilegedClients().Add(E.Origin.ClientId, E.Origin);
await E.Owner.Manager.GetClientService().Update(E.Origin);
}
else
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_OWNER_FAIL"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_OWNER_FAIL"]);
}
}
public class CWarn : Command
{
public CWarn() :
- base("warn", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_WARN_DESC"], "w", Player.Permission.Trusted, true, new CommandArgument[]
+ base("warn", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_WARN_DESC"], "w", Player.Permission.Trusted, true, new CommandArgument[]
{
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true
},
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_REASON"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_REASON"],
Required = true
}
})
@@ -65,7 +66,7 @@ namespace SharedLibraryCore.Commands
public override async Task ExecuteAsync(GameEvent E)
{
if (E.Origin.Level <= E.Target.Level)
- await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_WARN_FAIL"]} {E.Target.Name}");
+ await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_WARN_FAIL"]} {E.Target.Name}");
else
await E.Target.Warn(E.Data, E.Origin);
}
@@ -74,11 +75,11 @@ namespace SharedLibraryCore.Commands
public class CWarnClear : Command
{
public CWarnClear() :
- base("warnclear", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_WARNCLEAR_DESC"], "wc", Player.Permission.Trusted, true, new CommandArgument[]
+ base("warnclear", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_WARNCLEAR_DESC"], "wc", Player.Permission.Trusted, true, new CommandArgument[]
{
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true
}
})
@@ -87,7 +88,7 @@ namespace SharedLibraryCore.Commands
public override async Task ExecuteAsync(GameEvent E)
{
E.Target.Warnings = 0;
- String Message = $"{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_WARNCLEAR_SUCCESS"]} {E.Target.Name}";
+ String Message = $"{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_WARNCLEAR_SUCCESS"]} {E.Target.Name}";
await E.Owner.Broadcast(Message);
}
}
@@ -95,16 +96,16 @@ namespace SharedLibraryCore.Commands
public class CKick : Command
{
public CKick() :
- base("kick", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_KICK_DESC"], "k", Player.Permission.Moderator, true, new CommandArgument[]
+ base("kick", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_KICK_DESC"], "k", Player.Permission.Moderator, true, new CommandArgument[]
{
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true
},
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_REASON"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_REASON"],
Required = true
}
})
@@ -116,21 +117,21 @@ namespace SharedLibraryCore.Commands
{
E.Owner.Manager.GetEventHandler().AddEvent(new GameEvent(GameEvent.EventType.Kick, E.Data, E.Origin, E.Target, E.Owner));
await E.Target.Kick(E.Data, E.Origin);
- await E.Origin.Tell($"^5{E.Target} ^7{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_KICK_SUCCESS"]}");
+ await E.Origin.Tell($"^5{E.Target} ^7{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_KICK_SUCCESS"]}");
}
else
- await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_KICK_FAIL"]} {E.Target.Name}");
+ await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_KICK_FAIL"]} {E.Target.Name}");
}
}
public class CSay : Command
{
public CSay() :
- base("say", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_SAY_DESC"], "s", Player.Permission.Moderator, false, new CommandArgument[]
+ base("say", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_SAY_DESC"], "s", Player.Permission.Moderator, false, new CommandArgument[]
{
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_MESSAGE"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_MESSAGE"],
Required = true
}
})
@@ -145,21 +146,21 @@ namespace SharedLibraryCore.Commands
public class CTempBan : Command
{
public CTempBan() :
- base("tempban", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_TEMPBAN_DESC"], "tb", Player.Permission.Administrator, true, new CommandArgument[]
+ base("tempban", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_TEMPBAN_DESC"], "tb", Player.Permission.Administrator, true, new CommandArgument[]
{
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true
},
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_DURATION"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_DURATION"],
Required = true,
},
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_REASON"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_REASON"],
Required = true
}
})
@@ -175,26 +176,26 @@ namespace SharedLibraryCore.Commands
if (E.Origin.Level > E.Target.Level)
{
await E.Target.TempBan(Message, length, E.Origin);
- await E.Origin.Tell($"^5{E.Target} ^7{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_TEMPBAN_SUCCESS"]} ^5{length.TimeSpanText()}");
+ await E.Origin.Tell($"^5{E.Target} ^7{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_TEMPBAN_SUCCESS"]} ^5{length.TimeSpanText()}");
}
else
- await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_TEMPBAN_FAIL"]} {E.Target.Name}");
+ await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_TEMPBAN_FAIL"]} {E.Target.Name}");
}
}
public class CBan : Command
{
public CBan() :
- base("ban", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_BAN_DESC"], "b", Player.Permission.SeniorAdmin, true, new CommandArgument[]
+ base("ban", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_BAN_DESC"], "b", Player.Permission.SeniorAdmin, true, new CommandArgument[]
{
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true
},
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_REASON"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_REASON"],
Required = true
}
})
@@ -205,26 +206,26 @@ namespace SharedLibraryCore.Commands
if (E.Origin.Level > E.Target.Level)
{
await E.Target.Ban(E.Data, E.Origin);
- await E.Origin.Tell($"^5{E.Target} ^7{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_BAN_SUCCESS"]}");
+ await E.Origin.Tell($"^5{E.Target} ^7{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_BAN_SUCCESS"]}");
}
else
- await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_BAN_FAIL"]} {E.Target.Name}");
+ await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_BAN_FAIL"]} {E.Target.Name}");
}
}
public class CUnban : Command
{
public CUnban() :
- base("unban", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_UNBAN_DESC"], "ub", Player.Permission.SeniorAdmin, true, new CommandArgument[]
+ base("unban", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_UNBAN_DESC"], "ub", Player.Permission.SeniorAdmin, true, new CommandArgument[]
{
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_CLIENTID"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_CLIENTID"],
Required = true,
},
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_REASON"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_REASON"],
Required = true
}
})
@@ -236,11 +237,11 @@ namespace SharedLibraryCore.Commands
if (penalties.Where(p => p.Type == Penalty.PenaltyType.Ban || p.Type == Penalty.PenaltyType.TempBan).FirstOrDefault() != null)
{
await E.Owner.Unban(E.Data, E.Target, E.Origin);
- await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_UNBAN_SUCCESS"]} {E.Target}");
+ await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_UNBAN_SUCCESS"]} {E.Target}");
}
else
{
- await E.Origin.Tell($"{E.Target} {Utilities.CurrentLocalization.LocalizationSet["COMMANDS_UNBAN_FAIL"]}");
+ await E.Origin.Tell($"{E.Target} {Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_UNBAN_FAIL"]}");
}
}
}
@@ -248,7 +249,7 @@ namespace SharedLibraryCore.Commands
public class CWhoAmI : Command
{
public CWhoAmI() :
- base("whoami", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_WHO_DESC"], "who", Player.Permission.User, false)
+ base("whoami", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_WHO_DESC"], "who", Player.Permission.User, false)
{ }
public override async Task ExecuteAsync(GameEvent E)
@@ -261,7 +262,7 @@ namespace SharedLibraryCore.Commands
public class CList : Command
{
public CList() :
- base("list", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_LIST_DESC"], "l", Player.Permission.Moderator, false)
+ base("list", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_LIST_DESC"], "l", Player.Permission.Moderator, false)
{ }
public override async Task ExecuteAsync(GameEvent E)
@@ -296,11 +297,11 @@ namespace SharedLibraryCore.Commands
public class CHelp : Command
{
public CHelp() :
- base("help", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_HELP_DESC"], "h", Player.Permission.User, false, new CommandArgument[]
+ base("help", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_HELP_DESC"], "h", Player.Permission.User, false, new CommandArgument[]
{
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_COMMANDS"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_COMMANDS"],
Required = false
}
})
@@ -325,7 +326,7 @@ namespace SharedLibraryCore.Commands
}
if (!found)
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_HELP_NOTFOUND"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_HELP_NOTFOUND"]);
}
else
@@ -352,7 +353,7 @@ namespace SharedLibraryCore.Commands
}
}
await E.Origin.Tell(helpResponse.ToString());
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_HELP_MOREINFO"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_HELP_MOREINFO"]);
}
}
}
@@ -360,7 +361,7 @@ namespace SharedLibraryCore.Commands
public class CFastRestart : Command
{
public CFastRestart() :
- base("fastrestart", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_FASTRESTART_DESC"], "fr", Player.Permission.Moderator, false)
+ base("fastrestart", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_FASTRESTART_DESC"], "fr", Player.Permission.Moderator, false)
{ }
public override async Task ExecuteAsync(GameEvent E)
@@ -368,24 +369,24 @@ namespace SharedLibraryCore.Commands
await E.Owner.ExecuteCommandAsync("fast_restart");
if (!E.Origin.Masked)
- await E.Owner.Broadcast($"^5{E.Origin.Name} ^7{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_FASTRESTART_UNMASKED"]}");
+ await E.Owner.Broadcast($"^5{E.Origin.Name} ^7{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_FASTRESTART_UNMASKED"]}");
else
- await E.Owner.Broadcast(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_FASTRESTART_MASKED"]);
+ await E.Owner.Broadcast(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_FASTRESTART_MASKED"]);
}
}
public class CMapRotate : Command
{
public CMapRotate() :
- base("maprotate", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_MAPROTATE_DESC"], "mr", Player.Permission.Administrator, false)
+ base("maprotate", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_MAPROTATE_DESC"], "mr", Player.Permission.Administrator, false)
{ }
public override async Task ExecuteAsync(GameEvent E)
{
if (!E.Origin.Masked)
- await E.Owner.Broadcast($"{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_MAPROTATE"]} [^5{E.Origin.Name}^7]");
+ await E.Owner.Broadcast($"{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_MAPROTATE"]} [^5{E.Origin.Name}^7]");
else
- await E.Owner.Broadcast(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_MAPROTATE"]);
+ await E.Owner.Broadcast(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_MAPROTATE"]);
Task.Delay(5000).Wait();
await E.Owner.ExecuteCommandAsync("map_rotate");
}
@@ -394,16 +395,16 @@ namespace SharedLibraryCore.Commands
public class CSetLevel : Command
{
public CSetLevel() :
- base("setlevel", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_SETLEVEL_DESC"], "sl", Player.Permission.Moderator, true, new CommandArgument[]
+ base("setlevel", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_SETLEVEL_DESC"], "sl", Player.Permission.Moderator, true, new CommandArgument[]
{
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true
},
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_LEVEL"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_LEVEL"],
Required = true
}
})
@@ -413,7 +414,7 @@ namespace SharedLibraryCore.Commands
{
if (E.Target == E.Origin)
{
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_SETLEVEL_SELF"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_SETLEVEL_SELF"]);
return;
}
@@ -422,14 +423,14 @@ namespace SharedLibraryCore.Commands
if (newPerm == Player.Permission.Owner &&
!E.Owner.Manager.GetApplicationSettings().Configuration().EnableMultipleOwners)
{
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_SETLEVEL_OWNER"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_SETLEVEL_OWNER"]);
return;
}
if (E.Origin.Level < Player.Permission.Owner &&
!E.Owner.Manager.GetApplicationSettings().Configuration().EnableSteppedHierarchy)
{
- await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_SETLEVEL_STEPPEDDISABLED"]} ^5{E.Target.Name}");
+ await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_SETLEVEL_STEPPEDDISABLED"]} ^5{E.Target.Name}");
return;
}
@@ -437,7 +438,7 @@ namespace SharedLibraryCore.Commands
{
if (E.Origin.Level < Player.Permission.Owner)
{
- await E.Origin.Tell(string.Format(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_SETLEVEL_LEVELTOOHIGH"], E.Target.Name, (E.Origin.Level - 1).ToString()));
+ await E.Origin.Tell(string.Format(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_SETLEVEL_LEVELTOOHIGH"], E.Target.Name, (E.Origin.Level - 1).ToString()));
return;
}
}
@@ -450,7 +451,7 @@ namespace SharedLibraryCore.Commands
if (ActiveClient != null)
{
ActiveClient.Level = newPerm;
- await ActiveClient.Tell($"{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_SETLEVEL_SUCCESS_TARGET"]} {newPerm}");
+ await ActiveClient.Tell($"{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_SETLEVEL_SUCCESS_TARGET"]} {newPerm}");
}
else
@@ -470,36 +471,36 @@ namespace SharedLibraryCore.Commands
E.Owner.Manager.GetPrivilegedClients()[E.Target.ClientId] = E.Target;
}
- await E.Origin.Tell($"{E.Target.Name} {Utilities.CurrentLocalization.LocalizationSet["COMMANDS_SETLEVEL_SUCCESS"]}");
+ await E.Origin.Tell($"{E.Target.Name} {Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_SETLEVEL_SUCCESS"]}");
}
else
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_SETLEVEL_FAIL"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_SETLEVEL_FAIL"]);
}
}
public class CUsage : Command
{
public CUsage() :
- base("usage", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_USAGE_DESC"], "us", Player.Permission.Moderator, false)
+ base("usage", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_USAGE_DESC"], "us", Player.Permission.Moderator, false)
{ }
public override async Task ExecuteAsync(GameEvent E)
{
- await E.Origin.Tell($"IW4MAdmin {Utilities.CurrentLocalization.LocalizationSet["COMMANDS_USAGE_TEXT"]}" + Math.Round(((System.Diagnostics.Process.GetCurrentProcess().PrivateMemorySize64 / 2048f) / 1200f), 1) + "MB");
+ await E.Origin.Tell($"IW4MAdmin {Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_USAGE_TEXT"]}" + Math.Round(((System.Diagnostics.Process.GetCurrentProcess().PrivateMemorySize64 / 2048f) / 1200f), 1) + "MB");
}
}
public class CUptime : Command
{
public CUptime() :
- base("uptime", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_UPTIME_DESC"], "up", Player.Permission.Moderator, false)
+ base("uptime", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_UPTIME_DESC"], "up", Player.Permission.Moderator, false)
{ }
public override async Task ExecuteAsync(GameEvent E)
{
TimeSpan uptime = DateTime.Now - System.Diagnostics.Process.GetCurrentProcess().StartTime;
- var loc = Utilities.CurrentLocalization.LocalizationSet;
+ var loc = Utilities.CurrentLocalization.LocalizationIndex;
await E.Origin.Tell($"IW4M Admin {loc["COMMANDS_UPTIME_TEXT"]} {uptime.Days} {loc["GLOBAL_DAYS"]}, {uptime.Hours} {loc["GLOBAL_HOURS"]}, {uptime.Minutes} {loc["GLOBAL_MINUTES"]}");
}
}
@@ -507,7 +508,7 @@ namespace SharedLibraryCore.Commands
public class CListAdmins : Command
{
public CListAdmins() :
- base("admins", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ADMINS_DESC"], "a", Player.Permission.User, false)
+ base("admins", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ADMINS_DESC"], "a", Player.Permission.User, false)
{ }
public override async Task ExecuteAsync(GameEvent E)
@@ -527,18 +528,18 @@ namespace SharedLibraryCore.Commands
}
if (numOnline == 0)
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ADMINS_NONE"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ADMINS_NONE"]);
}
}
public class CLoadMap : Command
{
public CLoadMap() :
- base("map", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_MAP_DESC"], "m", Player.Permission.Administrator, false, new CommandArgument[]
+ base("map", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_MAP_DESC"], "m", Player.Permission.Administrator, false, new CommandArgument[]
{
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_MAP"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_MAP"],
Required = true
}
})
@@ -551,14 +552,14 @@ namespace SharedLibraryCore.Commands
{
if (m.Name.ToLower() == newMap || m.Alias.ToLower() == newMap)
{
- await E.Owner.Broadcast($"{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_MAP_SUCCESS"]} ^5{m.Alias}");
+ await E.Owner.Broadcast($"{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_MAP_SUCCESS"]} ^5{m.Alias}");
Task.Delay(5000).Wait();
await E.Owner.LoadMap(m.Name);
return;
}
}
- await E.Owner.Broadcast($"{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_MAP_UKN"]} ^5{newMap}");
+ await E.Owner.Broadcast($"{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_MAP_UKN"]} ^5{newMap}");
Task.Delay(5000).Wait();
await E.Owner.LoadMap(newMap);
}
@@ -567,11 +568,11 @@ namespace SharedLibraryCore.Commands
public class CFindPlayer : Command
{
public CFindPlayer() :
- base("find", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_FIND_DESC"], "f", Player.Permission.Administrator, false, new CommandArgument[]
+ base("find", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_FIND_DESC"], "f", Player.Permission.Administrator, false, new CommandArgument[]
{
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true
}
})
@@ -581,7 +582,7 @@ namespace SharedLibraryCore.Commands
{
if (E.Data.Length < 3)
{
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_FIND_MIN"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_FIND_MIN"]);
return;
}
@@ -592,7 +593,7 @@ namespace SharedLibraryCore.Commands
if (db_players.Count == 0)
{
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_FIND_EMPTY"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_FIND_EMPTY"]);
return;
}
@@ -610,7 +611,7 @@ namespace SharedLibraryCore.Commands
public class CListRules : Command
{
public CListRules() :
- base("rules", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_RULES_DESC"], "r", Player.Permission.User, false)
+ base("rules", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_RULES_DESC"], "r", Player.Permission.User, false)
{ }
public override async Task ExecuteAsync(GameEvent E)
@@ -619,9 +620,9 @@ namespace SharedLibraryCore.Commands
E.Owner.ServerConfig.Rules?.Count < 1)
{
if (E.Message.IsBroadcastCommand())
- await E.Owner.Broadcast(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_RULES_NONE"]);
+ await E.Owner.Broadcast(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_RULES_NONE"]);
else
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_RULES_NONE"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_RULES_NONE"]);
}
else
@@ -645,16 +646,16 @@ namespace SharedLibraryCore.Commands
public class CPrivateMessage : Command
{
public CPrivateMessage() :
- base("privatemessage", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_PM_DESC"], "pm", Player.Permission.User, true, new CommandArgument[]
+ base("privatemessage", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_PM_DESC"], "pm", Player.Permission.User, true, new CommandArgument[]
{
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true
},
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_MESSAGE"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_MESSAGE"],
Required = true
}
})
@@ -670,16 +671,16 @@ namespace SharedLibraryCore.Commands
public class CFlag : Command
{
public CFlag() :
- base("flag", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_FLAG_DESC"], "fp", Player.Permission.Moderator, true, new CommandArgument[]
+ base("flag", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_FLAG_DESC"], "fp", Player.Permission.Moderator, true, new CommandArgument[]
{
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true
},
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_REASON"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_REASON"],
Required = true
}
})
@@ -690,7 +691,7 @@ namespace SharedLibraryCore.Commands
// todo: move unflag to seperate command
if (E.Target.Level >= E.Origin.Level)
{
- await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_FLAG_FAIL"]} ^5{E.Target.Name}");
+ await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_FLAG_FAIL"]} ^5{E.Target.Name}");
return;
}
@@ -698,7 +699,7 @@ namespace SharedLibraryCore.Commands
{
E.Target.Level = Player.Permission.User;
await E.Owner.Manager.GetClientService().Update(E.Target);
- await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_FLAG_UNFLAG"]} ^5{E.Target.Name}");
+ await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_FLAG_UNFLAG"]} ^5{E.Target.Name}");
}
else
@@ -719,7 +720,7 @@ namespace SharedLibraryCore.Commands
await E.Owner.Manager.GetPenaltyService().Create(newPenalty);
E.Owner.Manager.GetEventHandler().AddEvent(new GameEvent(GameEvent.EventType.Flag, E.Data, E.Origin, E.Target, E.Owner));
- await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_FLAG_SUCCESS"]} ^5{E.Target.Name}");
+ await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_FLAG_SUCCESS"]} ^5{E.Target.Name}");
}
}
@@ -728,16 +729,16 @@ namespace SharedLibraryCore.Commands
public class CReport : Command
{
public CReport() :
- base("report", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_REPORT_DESC"], "rep", Player.Permission.User, true, new CommandArgument[]
+ base("report", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_REPORT_DESC"], "rep", Player.Permission.User, true, new CommandArgument[]
{
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true
},
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_REASON"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_REASON"],
Required = true
}
})
@@ -747,31 +748,31 @@ namespace SharedLibraryCore.Commands
{
if (E.Data.ToLower().Contains("camp"))
{
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_REPORT_FAIL_CAMP"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_REPORT_FAIL_CAMP"]);
return;
}
if (E.Owner.Reports.Find(x => (x.Origin == E.Origin && x.Target.NetworkId == E.Target.NetworkId)) != null)
{
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_REPORT_FAIL_DUPLICATE"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_REPORT_FAIL_DUPLICATE"]);
return;
}
if (E.Target == E.Origin)
{
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_REPORT_FAIL_SELF"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_REPORT_FAIL_SELF"]);
return;
}
if (E.Target.Level > E.Origin.Level)
{
- await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_REPORT_FAIL"]} {E.Target.Name}");
+ await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_REPORT_FAIL"]} {E.Target.Name}");
return;
}
E.Owner.Reports.Add(new Report(E.Target, E.Origin, E.Data));
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_REPORT_SUCCESS"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_REPORT_SUCCESS"]);
E.Owner.Manager.GetEventHandler().AddEvent(new GameEvent(GameEvent.EventType.Report, E.Data, E.Origin, E.Target, E.Owner));
await E.Owner.ToAdmins(String.Format("^5{0}^7->^1{1}^7: {2}", E.Origin.Name, E.Target.Name, E.Data));
}
@@ -780,11 +781,11 @@ namespace SharedLibraryCore.Commands
public class CListReports : Command
{
public CListReports() :
- base("reports", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_REPORTS_DESC"], "reps", Player.Permission.Moderator, false, new CommandArgument[]
+ base("reports", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_REPORTS_DESC"], "reps", Player.Permission.Moderator, false, new CommandArgument[]
{
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_CLEAR"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_CLEAR"],
Required = false
}
})
@@ -792,16 +793,16 @@ namespace SharedLibraryCore.Commands
public override async Task ExecuteAsync(GameEvent E)
{
- if (E.Data != null && E.Data.ToLower().Contains(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_CLEAR"]))
+ if (E.Data != null && E.Data.ToLower().Contains(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_CLEAR"]))
{
E.Owner.Reports = new List();
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_REPORTS_CLEAR_SUCCESS"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_REPORTS_CLEAR_SUCCESS"]);
return;
}
if (E.Owner.Reports.Count < 1)
{
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_REPORTS_NONE"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_REPORTS_NONE"]);
return;
}
@@ -813,7 +814,7 @@ namespace SharedLibraryCore.Commands
public class CMask : Command
{
public CMask() :
- base("mask", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_MASK_DESC"], "hide", Player.Permission.Moderator, false)
+ base("mask", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_MASK_DESC"], "hide", Player.Permission.Moderator, false)
{ }
public override async Task ExecuteAsync(GameEvent E)
@@ -821,12 +822,12 @@ namespace SharedLibraryCore.Commands
if (E.Origin.Masked)
{
E.Origin.Masked = false;
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_MASK_OFF"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_MASK_OFF"]);
}
else
{
E.Origin.Masked = true;
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_MASK_ON"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_MASK_ON"]);
}
await E.Owner.Manager.GetClientService().Update(E.Origin);
@@ -836,11 +837,11 @@ namespace SharedLibraryCore.Commands
public class CListBanInfo : Command
{
public CListBanInfo() :
- base("baninfo", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_BANINFO_DESC"], "bi", Player.Permission.Moderator, true, new CommandArgument[]
+ base("baninfo", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_BANINFO_DESC"], "bi", Player.Permission.Moderator, true, new CommandArgument[]
{
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true
}
})
@@ -854,12 +855,12 @@ namespace SharedLibraryCore.Commands
if (penalty == null)
{
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_BANINFO_NONE"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_BANINFO_NONE"]);
return;
}
string timeRemaining = penalty.Type == Penalty.PenaltyType.TempBan ? $"({(penalty.Expires - DateTime.UtcNow).TimeSpanText()} remaining)" : "";
- string success = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_BANINO_SUCCESS"];
+ string success = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_BANINO_SUCCESS"];
await E.Origin.Tell($"^1{E.Target.Name} ^7{string.Format(success, penalty.Punisher.Name)} {penalty.Punisher.Name} {timeRemaining}");
}
@@ -869,11 +870,11 @@ namespace SharedLibraryCore.Commands
public class CListAlias : Command
{
public CListAlias() :
- base("alias", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ALIAS_DESC"], "known", Player.Permission.Moderator, true, new CommandArgument[]
+ base("alias", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ALIAS_DESC"], "known", Player.Permission.Moderator, true, new CommandArgument[]
{
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true,
}
})
@@ -887,12 +888,12 @@ namespace SharedLibraryCore.Commands
await E.Target.Tell($"[^3{E.Target}^7]");
- message.Append($"{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ALIAS_ALIASES"]}: ");
+ message.Append($"{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ALIAS_ALIASES"]}: ");
message.Append(String.Join(" | ", names));
await E.Origin.Tell(message.ToString());
message.Clear();
- message.Append($"{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ALIAS_IPS"]}: ");
+ message.Append($"{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ALIAS_IPS"]}: ");
message.Append(String.Join(" | ", IPs));
await E.Origin.Tell(message.ToString());
}
@@ -901,11 +902,11 @@ namespace SharedLibraryCore.Commands
public class CExecuteRCON : Command
{
public CExecuteRCON() :
- base("rcon", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_RCON_DESC"], "rcon", Player.Permission.Owner, false, new CommandArgument[]
+ base("rcon", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_RCON_DESC"], "rcon", Player.Permission.Owner, false, new CommandArgument[]
{
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_COMMANDS"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_COMMANDS"],
Required = true
}
})
@@ -917,19 +918,19 @@ namespace SharedLibraryCore.Commands
foreach (string S in Response)
await E.Origin.Tell(S.StripColors());
if (Response.Length == 0)
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_RCON_SUCCESS"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_RCON_SUCCESS"]);
}
}
public class CPlugins : Command
{
public CPlugins() :
- base("plugins", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_PLUGINS_DESC"], "p", Player.Permission.Administrator, false)
+ base("plugins", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_PLUGINS_DESC"], "p", Player.Permission.Administrator, false)
{ }
public override async Task ExecuteAsync(GameEvent E)
{
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_PLUGINS_LOADED"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_PLUGINS_LOADED"]);
foreach (var P in Plugins.PluginImporter.ActivePlugins)
{
await E.Origin.Tell(String.Format("^3{0} ^7[v^3{1}^7] by ^5{2}^7", P.Name, P.Version, P.Author));
@@ -940,22 +941,22 @@ namespace SharedLibraryCore.Commands
public class CIP : Command
{
public CIP() :
- base("getexternalip", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_IP_DESC"], "ip", Player.Permission.User, false)
+ base("getexternalip", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_IP_DESC"], "ip", Player.Permission.User, false)
{ }
public override async Task ExecuteAsync(GameEvent E)
{
- await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_IP_SUCCESS"]} ^5{E.Origin.IPAddressString}");
+ await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_IP_SUCCESS"]} ^5{E.Origin.IPAddressString}");
}
}
public class CPruneAdmins : Command
{
- public CPruneAdmins() : base("prune", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_PRUNE_DESC"], "pa", Player.Permission.Owner, false, new CommandArgument[]
+ public CPruneAdmins() : base("prune", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_PRUNE_DESC"], "pa", Player.Permission.Owner, false, new CommandArgument[]
{
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_INACTIVE"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_INACTIVE"],
Required = false
}
})
@@ -977,7 +978,7 @@ namespace SharedLibraryCore.Commands
catch (FormatException)
{
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_PRUNE_FAIL"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_PRUNE_FAIL"]);
return;
}
@@ -994,18 +995,18 @@ namespace SharedLibraryCore.Commands
inactiveUsers.ForEach(c => c.Level = Player.Permission.User);
await context.SaveChangesAsync();
}
- await E.Origin.Tell($"^5{inactiveUsers.Count} ^7{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_PRUNE_SUCCESS"]}");
+ await E.Origin.Tell($"^5{inactiveUsers.Count} ^7{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_PRUNE_SUCCESS"]}");
}
}
public class CSetPassword : Command
{
- public CSetPassword() : base("setpassword", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_SETPASSWORD_DESC"], "sp", Player.Permission.Moderator, false, new CommandArgument[]
+ public CSetPassword() : base("setpassword", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_SETPASSWORD_DESC"], "sp", Player.Permission.Moderator, false, new CommandArgument[]
{
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PASSWORD"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PASSWORD"],
Required = true
}
})
@@ -1015,7 +1016,7 @@ namespace SharedLibraryCore.Commands
{
if (E.Data.Length < 5)
{
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_PASSWORD_FAIL"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_PASSWORD_FAIL"]);
return;
}
@@ -1029,11 +1030,10 @@ namespace SharedLibraryCore.Commands
E.Owner.Manager.GetPrivilegedClients()[E.Origin.ClientId].PasswordSalt = hashedPassword[1];
await E.Owner.Manager.GetClientService().Update(E.Origin);
- await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_PASSWORD_SUCCESS"]);
+ await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_PASSWORD_SUCCESS"]);
}
}
- /*
public class CKillServer : Command
{
public CKillServer() : base("killserver", "kill the game server", "kill", Player.Permission.Administrator, false)
@@ -1043,7 +1043,21 @@ namespace SharedLibraryCore.Commands
public override async Task ExecuteAsync(GameEvent E)
{
var gameserverProcesses = System.Diagnostics.Process.GetProcessesByName("iw4x");
- var currentProcess = gameserverProcesses.FirstOrDefault(g => g.MainWindowTitle.Contains(E.Owner.Hostname));
+
+ System.Diagnostics.Process currentProcess = null;
+
+ foreach (var p in gameserverProcesses)
+ {
+ string cmdLine = Utilities.GetCommandLine(p.Id);
+
+ var regex = Regex.Match(cmdLine, @".*((?:\+set|\+) net_port) +([0-9]+).*");
+
+ if (regex.Success && Int32.Parse(regex.Groups[2].Value) == E.Owner.GetPort())
+ {
+ currentProcess = p;
+ }
+ }
+
if (currentProcess == null)
{
@@ -1063,7 +1077,7 @@ namespace SharedLibraryCore.Commands
}
}
- catch (NetworkException)
+ catch (Exceptions.NetworkException)
{
await E.Origin.Tell("Unable to cleanly shutdown server, forcing");
}
@@ -1085,16 +1099,16 @@ namespace SharedLibraryCore.Commands
}
}
}
- }*/
+ }
public class CPing : Command
{
- public CPing() : base("ping", Utilities.CurrentLocalization.LocalizationSet["COMMANDS_PING_DESC"], "pi", Player.Permission.User, false, new CommandArgument[]
+ public CPing() : base("ping", Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_PING_DESC"], "pi", Player.Permission.User, false, new CommandArgument[]
{
new CommandArgument()
{
- Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"],
+ Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = false
}
})
@@ -1105,16 +1119,16 @@ namespace SharedLibraryCore.Commands
if (E.Message.IsBroadcastCommand())
{
if (E.Target == null)
- await E.Owner.Broadcast($"{E.Origin.Name}'s {Utilities.CurrentLocalization.LocalizationSet["COMMANDS_PING_TARGET"]} ^5{E.Origin.Ping}^7ms");
+ await E.Owner.Broadcast($"{E.Origin.Name}'s {Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_PING_TARGET"]} ^5{E.Origin.Ping}^7ms");
else
- await E.Owner.Broadcast($"{E.Target.Name}'s {Utilities.CurrentLocalization.LocalizationSet["COMMANDS_PING_TARGET"]} ^5{E.Target.Ping}^7ms");
+ await E.Owner.Broadcast($"{E.Target.Name}'s {Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_PING_TARGET"]} ^5{E.Target.Ping}^7ms");
}
else
{
if (E.Target == null)
- await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_PING_SELF"]} ^5{E.Origin.Ping}^7ms");
+ await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_PING_SELF"]} ^5{E.Origin.Ping}^7ms");
else
- await E.Origin.Tell($"{E.Target.Name}'s {Utilities.CurrentLocalization.LocalizationSet["COMMANDS_PING_TARGET"]} ^5{E.Target.Ping}^7ms");
+ await E.Origin.Tell($"{E.Target.Name}'s {Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_PING_TARGET"]} ^5{E.Target.Ping}^7ms");
}
}
}
diff --git a/SharedLibraryCore/Configuration/ApplicationConfiguration.cs b/SharedLibraryCore/Configuration/ApplicationConfiguration.cs
index 6c4d2ab5..7454de6a 100644
--- a/SharedLibraryCore/Configuration/ApplicationConfiguration.cs
+++ b/SharedLibraryCore/Configuration/ApplicationConfiguration.cs
@@ -29,7 +29,7 @@ namespace SharedLibraryCore.Configuration
public IBaseConfiguration Generate()
{
- var loc = Utilities.CurrentLocalization.LocalizationSet;
+ var loc = Utilities.CurrentLocalization.LocalizationIndex;
Id = Guid.NewGuid().ToString();
EnableWebFront = Utilities.PromptBool(loc["SETUP_ENABLE_WEBFRONT"]);
diff --git a/SharedLibraryCore/Configuration/ServerConfiguration.cs b/SharedLibraryCore/Configuration/ServerConfiguration.cs
index 83e161f9..fc6cb814 100644
--- a/SharedLibraryCore/Configuration/ServerConfiguration.cs
+++ b/SharedLibraryCore/Configuration/ServerConfiguration.cs
@@ -17,7 +17,7 @@ namespace SharedLibraryCore.Configuration
public IBaseConfiguration Generate()
{
- var loc = Utilities.CurrentLocalization.LocalizationSet;
+ var loc = Utilities.CurrentLocalization.LocalizationIndex;
while (string.IsNullOrEmpty(IPAddress))
{
diff --git a/SharedLibraryCore/Helpers/MessageToken.cs b/SharedLibraryCore/Helpers/MessageToken.cs
index 409d8919..6f2dd65c 100644
--- a/SharedLibraryCore/Helpers/MessageToken.cs
+++ b/SharedLibraryCore/Helpers/MessageToken.cs
@@ -5,16 +5,16 @@ namespace SharedLibraryCore.Helpers
public class MessageToken
{
public string Name { get; private set; }
- Func Value;
- public MessageToken(string Name, Func Value)
+ Func Value;
+ public MessageToken(string Name, Func Value)
{
this.Name = Name;
this.Value = Value;
}
-
- public override string ToString()
+
+ public string Process(Server server)
{
- return Value().ToString();
+ return this.Value(server);
}
}
}
diff --git a/SharedLibraryCore/Localization/Layout.cs b/SharedLibraryCore/Localization/Layout.cs
index 5f6d6580..3cbf4872 100644
--- a/SharedLibraryCore/Localization/Layout.cs
+++ b/SharedLibraryCore/Localization/Layout.cs
@@ -1,4 +1,5 @@
-using System;
+using Newtonsoft.Json;
+using System;
using System.Collections.Generic;
using System.Text;
@@ -7,6 +8,30 @@ namespace SharedLibraryCore.Localization
public class Layout
{
public string LocalizationName { get; set; }
- public Dictionary LocalizationSet { get; set; }
+ public Index LocalizationIndex { get; set; }
+
+ public Layout(Dictionary set)
+ {
+ LocalizationIndex = new Index()
+ {
+ Set = set
+ };
+ }
}
+
+ public class Index
+ {
+ public Dictionary Set { get; set; }
+
+ public string this[string key]
+ {
+ get
+ {
+ if (!Set.TryGetValue(key, out string value))
+ throw new Exception($"Invalid locale key {key}");
+ return value;
+ }
+ }
+ }
+
}
diff --git a/SharedLibraryCore/PluginImporter.cs b/SharedLibraryCore/PluginImporter.cs
index a187b266..0afa0a86 100644
--- a/SharedLibraryCore/PluginImporter.cs
+++ b/SharedLibraryCore/PluginImporter.cs
@@ -17,7 +17,7 @@ namespace SharedLibraryCore.Plugins
if (dllFileNames.Length == 0)
{
- Manager.GetLogger().WriteDebug(Utilities.CurrentLocalization.LocalizationSet["PLUGIN_IMPORTER_NOTFOUND"]);
+ Manager.GetLogger().WriteDebug(Utilities.CurrentLocalization.LocalizationIndex["PLUGIN_IMPORTER_NOTFOUND"]);
return true;
}
@@ -43,7 +43,7 @@ namespace SharedLibraryCore.Plugins
Object commandObject = Activator.CreateInstance(assemblyType);
Command newCommand = (Command)commandObject;
ActiveCommands.Add(newCommand);
- Manager.GetLogger().WriteDebug($"{Utilities.CurrentLocalization.LocalizationSet["PLUGIN_IMPORTER_REGISTERCMD"]} \"{newCommand.Name}\"");
+ Manager.GetLogger().WriteDebug($"{Utilities.CurrentLocalization.LocalizationIndex["PLUGIN_IMPORTER_REGISTERCMD"]} \"{newCommand.Name}\"");
LoadedCommands++;
continue;
}
diff --git a/SharedLibraryCore/RCon/Connection.cs b/SharedLibraryCore/RCon/Connection.cs
index 04cf6561..53eb5564 100644
--- a/SharedLibraryCore/RCon/Connection.cs
+++ b/SharedLibraryCore/RCon/Connection.cs
@@ -144,7 +144,7 @@ namespace SharedLibraryCore.RCon
if (!connectionState.Buffer.Take(4).ToArray().SequenceEqual(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF }))
throw new NetworkException("Unexpected packet received");
- if (serverConnection.Available > 0)
+ if (FailedReceives == 0 && serverConnection.Available > 0)
{
serverConnection.BeginReceive(connectionState.Buffer, 0, connectionState.Buffer.Length, 0,
new AsyncCallback(OnReceivedCallback), connectionState);
@@ -276,7 +276,7 @@ namespace SharedLibraryCore.RCon
if (FailedReceives >= 4)
{
- throw new NetworkException($"Could not receive data from {socketConnection.RemoteEndPoint}");
+ throw new NetworkException($"{Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_COMMUNICATION"]} {socketConnection.RemoteEndPoint}");
}
}
diff --git a/SharedLibraryCore/Server.cs b/SharedLibraryCore/Server.cs
index 44ac3522..fcdd4f84 100644
--- a/SharedLibraryCore/Server.cs
+++ b/SharedLibraryCore/Server.cs
@@ -137,7 +137,6 @@ namespace SharedLibraryCore
};
Manager.GetEventHandler().AddEvent(e);
- await this.ExecuteCommandAsync(formattedMessage);
#else
Logger.WriteVerbose(Message.StripColors());
await Task.CompletedTask;
diff --git a/SharedLibraryCore/Utilities.cs b/SharedLibraryCore/Utilities.cs
index b78d906c..49a0a749 100644
--- a/SharedLibraryCore/Utilities.cs
+++ b/SharedLibraryCore/Utilities.cs
@@ -10,6 +10,7 @@ using System.Reflection;
using System.IO;
using System.Threading.Tasks;
using System.Globalization;
+using System.Diagnostics;
namespace SharedLibraryCore
{
@@ -101,7 +102,7 @@ namespace SharedLibraryCore
}
}
- public static String ProcessMessageToken(IList tokens, String str)
+ public static String ProcessMessageToken(this Server server, IList tokens, String str)
{
MatchCollection RegexMatches = Regex.Matches(str, @"\{\{[A-Z]+\}\}", RegexOptions.IgnoreCase);
foreach (Match M in RegexMatches)
@@ -112,7 +113,7 @@ namespace SharedLibraryCore
var found = tokens.FirstOrDefault(t => t.Name.ToLower() == Identifier.ToLower());
if (found != null)
- str = str.Replace(Match, found.ToString());
+ str = str.Replace(Match, found.Process(server));
}
return str;
@@ -185,7 +186,7 @@ namespace SharedLibraryCore
return id;
var bot = Regex.Match(str, @"bot[0-9]+").Value;
if (!string.IsNullOrEmpty(bot))
- return -Convert.ToInt64(bot.Substring(3));
+ return -Convert.ToInt64(bot.Substring(3)) + 1;
return 0;
}
@@ -378,6 +379,30 @@ namespace SharedLibraryCore
return dict;
}
+ /* https://loune.net/2017/06/running-shell-bash-commands-in-net-core/ */
+ public static string GetCommandLine(int pId)
+ {
+ var cmdProcess = new Process()
+ {
+ StartInfo = new ProcessStartInfo()
+ {
+ FileName = "cmd.exe",
+ Arguments = $"/c wmic process where processid={pId} get CommandLine",
+ RedirectStandardOutput = true,
+ UseShellExecute = false,
+ CreateNoWindow = true,
+ }
+ };
+
+ cmdProcess.Start();
+ cmdProcess.WaitForExit();
+
+ string[] cmdLine = cmdProcess.StandardOutput.ReadToEnd().Split("\r\n", StringSplitOptions.RemoveEmptyEntries);
+
+ return cmdLine.Length > 1 ? cmdLine[1] : cmdLine[0];
+ }
+
+
public static Task> GetDvarAsync(this Server server, string dvarName) => server.RconParser.GetDvarAsync(server.RemoteConnection, dvarName);
public static Task SetDvarAsync(this Server server, string dvarName, object dvarValue) => server.RconParser.SetDvarAsync(server.RemoteConnection, dvarName, dvarValue);
diff --git a/WebfrontCore/Controllers/ActionController.cs b/WebfrontCore/Controllers/ActionController.cs
index 2bfc9abc..ce444834 100644
--- a/WebfrontCore/Controllers/ActionController.cs
+++ b/WebfrontCore/Controllers/ActionController.cs
@@ -14,15 +14,14 @@ namespace WebfrontCore.Controllers
{
var info = new ActionInfo()
{
- ActionButtonLabel = "Ban",
+ ActionButtonLabel = Localization["WEBFRONT_ACTION_BAN_NAME"],
Name = "Ban",
Inputs = new List()
{
new InputInfo()
{
Name = "Reason",
- Label = "Reason",
- Placeholder = ""
+ Label = Localization["WEBFRONT_ACTION_LABEL_REASON"],
}
},
Action = "BanAsync"
@@ -46,15 +45,14 @@ namespace WebfrontCore.Controllers
{
var info = new ActionInfo()
{
- ActionButtonLabel = "Unban",
+ ActionButtonLabel = Localization["WEBFRONT_ACTION_UNBAN_NAME"],
Name = "Unban",
Inputs = new List()
{
new InputInfo()
{
Name = "Reason",
- Label = "Reason",
- Placeholder = ""
+ Label = Localization["WEBFRONT_ACTION_LABEL_REASON"],
}
},
Action = "UnbanAsync"
@@ -78,7 +76,7 @@ namespace WebfrontCore.Controllers
{
var login = new ActionInfo()
{
- ActionButtonLabel = "Login",
+ ActionButtonLabel = Localization["WEBFRONT_ACTION_LOGIN_NAME"],
Name = "Login",
Inputs = new List()
{
diff --git a/WebfrontCore/Controllers/BaseController.cs b/WebfrontCore/Controllers/BaseController.cs
index 3d0951dd..a83b7c2d 100644
--- a/WebfrontCore/Controllers/BaseController.cs
+++ b/WebfrontCore/Controllers/BaseController.cs
@@ -17,6 +17,7 @@ namespace WebfrontCore.Controllers
protected IManager Manager;
protected readonly DatabaseContext Context;
protected bool Authorized { get; private set; }
+ protected SharedLibraryCore.Localization.Index Localization { get; private set; }
protected EFClient Client { get; private set; }
private static byte[] LocalHost = { 127, 0, 0, 1 };
private static string DiscordLink;