re-added the kill server command (can only be used if run as admin)

less warns when using a disposed socket
topstats added to tokens as {{TOPSTATS}}
fixed topstats reporting for only a single server
added fix to iw4 regex for negative score
tokens now support multiple lines (using Environment.NewLine to separate)
localization includes culture again
This commit is contained in:
RaidMax 2018-05-05 15:36:26 -05:00
parent 3092a529e9
commit e8dff01c41
36 changed files with 1209 additions and 1063 deletions

View File

@ -46,7 +46,7 @@ namespace IW4MAdmin.Application.API
FlaggedMessageCount = 0; FlaggedMessageCount = 0;
E.Owner.Broadcast(Utilities.CurrentLocalization.LocalizationSet["GLOBAL_REPORT"]).Wait(); E.Owner.Broadcast(Utilities.CurrentLocalization.LocalizationIndex["GLOBAL_REPORT"]).Wait();
Events.Enqueue(new EventInfo( Events.Enqueue(new EventInfo(
EventInfo.EventType.ALERT, EventInfo.EventType.ALERT,
EventInfo.EventVersion.IW4MAdmin, EventInfo.EventVersion.IW4MAdmin,

View File

@ -60,13 +60,13 @@
<None Update="DefaultSettings.json"> <None Update="DefaultSettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None> </None>
<None Update="Localization\IW4MAdmin.en-EN.json"> <None Update="Localization\IW4MAdmin.en-US.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None> </None>
<None Update="Localization\IW4MAdmin.es-ES.json"> <None Update="Localization\IW4MAdmin.es-EC.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None> </None>
<None Update="Localization\IW4MAdmin.pt-PT.json"> <None Update="Localization\IW4MAdmin.pt-BR.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None> </None>
<None Update="Localization\IW4MAdmin.ru-RU.json"> <None Update="Localization\IW4MAdmin.ru-RU.json">

View File

@ -9,33 +9,51 @@ namespace IW4MAdmin.Application.Localization
{ {
public class Configure public class Configure
{ {
public static void Initialize() public static void Initialize(string customLocale)
{ {
string currentLocale = Program.ServerManager.GetApplicationSettings().Configuration()?.CustomLocale ?? string currentLocale = string.IsNullOrEmpty(customLocale) ? CultureInfo.CurrentCulture.Name : customLocale;
CultureInfo.CurrentCulture?.Name?.Substring(0, 2); 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<string, string>();
foreach (string filePath in localizationFiles)
{
var localizationContents = File.ReadAllText(filePath, Encoding.UTF8);
var eachLocalizationFile = Newtonsoft.Json.JsonConvert.DeserializeObject<SharedLibraryCore.Localization.Layout>(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 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); LocalizationName = currentLocale,
} };
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<SharedLibraryCore.Localization.Layout>(localizationContents);
} }
} }
} }

View File

@ -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 <command name> 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"
}
}

View File

@ -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 <command name> 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"
}
}
}

View File

@ -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 <nombre del comando> 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"
}
}
}

View File

@ -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 <nombre del comando> 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"
}
}

View File

@ -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 <comando> 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"
}
}
}

View File

@ -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 <comando> 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"
}
}

View File

@ -1,6 +1,7 @@
{ {
"LocalizationName": "ru-RU", "LocalizationName": "ru-RU",
"LocalizationSet": { "LocalizationIndex": {
"Set": {
"MANAGER_VERSION_FAIL": "Не удалось получить последнюю версию IW4MAdmin", "MANAGER_VERSION_FAIL": "Не удалось получить последнюю версию IW4MAdmin",
"MANAGER_VERSION_UPDATE": "- есть обновление. Последняя версия:", "MANAGER_VERSION_UPDATE": "- есть обновление. Последняя версия:",
"MANAGER_VERSION_CURRENT": "Ваша версия:", "MANAGER_VERSION_CURRENT": "Ваша версия:",
@ -192,6 +193,11 @@
"GLOBAL_ERROR": "Ошибка", "GLOBAL_ERROR": "Ошибка",
"GLOBAL_WARNING": "Предупреждение", "GLOBAL_WARNING": "Предупреждение",
"GLOBAL_INFO": "Информация", "GLOBAL_INFO": "Информация",
"GLOBAL_VERBOSE": "Подробно" "GLOBAL_VERBOSE": "Подробно",
"MANAGER_CONSOLE_NOSERV": "На данный момент нет серверов под мониторингом",
"SERVER_PLUGIN_ERROR": "Плагин произвел ошибку",
"PLUGINS_STATS_TEXT_NOQUALIFY": "Ещё нет совернующихся игроков за лучшую статистику"
}
} }
} }

View File

@ -30,8 +30,14 @@ namespace IW4MAdmin.Application
void Write(string msg, LogType type) void Write(string msg, LogType type)
{ {
if (!Utilities.CurrentLocalization.LocalizationSet.TryGetValue($"GLOBAL_{type.ToString().ToUpper()}", out string stringType)) string stringType = type.ToString();
stringType = type.ToString();
try
{
stringType = Utilities.CurrentLocalization.LocalizationIndex[$"GLOBAL_{type.ToString().ToUpper()}"];
}
catch (Exception) { }
string LogLine = $"[{DateTime.Now.ToString("HH:mm:ss")}] - {stringType}: {msg}"; string LogLine = $"[{DateTime.Now.ToString("HH:mm:ss")}] - {stringType}: {msg}";
lock (ThreadLock) lock (ThreadLock)

View File

@ -8,6 +8,8 @@ using SharedLibraryCore.Objects;
using SharedLibraryCore.Database; using SharedLibraryCore.Database;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Collections.Generic;
using SharedLibraryCore.Localization;
namespace IW4MAdmin.Application namespace IW4MAdmin.Application
{ {
@ -21,8 +23,7 @@ namespace IW4MAdmin.Application
{ {
AppDomain.CurrentDomain.SetData("DataDirectory", OperatingDirectory); AppDomain.CurrentDomain.SetData("DataDirectory", OperatingDirectory);
//System.Diagnostics.Process.GetCurrentProcess().PriorityClass = System.Diagnostics.ProcessPriorityClass.BelowNormal; //System.Diagnostics.Process.GetCurrentProcess().PriorityClass = System.Diagnostics.ProcessPriorityClass.BelowNormal;
Localization.Configure.Initialize();
var loc = Utilities.CurrentLocalization.LocalizationSet;
Console.OutputEncoding = Encoding.UTF8; Console.OutputEncoding = Encoding.UTF8;
Console.ForegroundColor = ConsoleColor.Gray; Console.ForegroundColor = ConsoleColor.Gray;
@ -35,11 +36,15 @@ namespace IW4MAdmin.Application
Console.WriteLine($" Version {Version.ToString("0.0")}"); Console.WriteLine($" Version {Version.ToString("0.0")}");
Console.WriteLine("====================================================="); Console.WriteLine("=====================================================");
Index loc = null;
try try
{ {
CheckDirectories(); CheckDirectories();
ServerManager = ApplicationManager.GetInstance(); ServerManager = ApplicationManager.GetInstance();
Localization.Configure.Initialize(ServerManager.GetApplicationSettings().Configuration()?.CustomLocale);
loc = Utilities.CurrentLocalization.LocalizationIndex;
using (var db = new DatabaseContext(ServerManager.GetApplicationSettings().Configuration()?.ConnectionString)) using (var db = new DatabaseContext(ServerManager.GetApplicationSettings().Configuration()?.ConnectionString))
new ContextSeed(db).Seed().Wait(); new ContextSeed(db).Seed().Wait();

View File

@ -132,7 +132,7 @@ namespace IW4MAdmin.Application
catch (Exception E) 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 Message: " + E.Message);
Logger.WriteDebug("Error Trace: " + E.StackTrace); Logger.WriteDebug("Error Trace: " + E.StackTrace);
sensitiveEvent.OnProcessed.Set(); sensitiveEvent.OnProcessed.Set();
@ -203,7 +203,7 @@ namespace IW4MAdmin.Application
do do
{ {
newConfig.Servers.Add((ServerConfiguration)new ServerConfiguration().Generate()); 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; config = newConfig;
await ConfigHandler.Save(); await ConfigHandler.Save();
@ -244,7 +244,7 @@ namespace IW4MAdmin.Application
catch (Exception e) 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($"Exception: {e.Message}");
Logger.WriteDebug($"Stack Trace: {e.StackTrace}"); Logger.WriteDebug($"Stack Trace: {e.StackTrace}");
} }
@ -286,7 +286,7 @@ namespace IW4MAdmin.Application
Commands.Add(new CIP()); Commands.Add(new CIP());
Commands.Add(new CMask()); Commands.Add(new CMask());
Commands.Add(new CPruneAdmins()); Commands.Add(new CPruneAdmins());
//Commands.Add(new CKillServer()); Commands.Add(new CKillServer());
Commands.Add(new CSetPassword()); Commands.Add(new CSetPassword());
Commands.Add(new CPing()); Commands.Add(new CPing());
@ -307,16 +307,16 @@ namespace IW4MAdmin.Application
_servers.Add(ServerInstance); _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 // add the start event for this server
Handler.AddEvent(new GameEvent(GameEvent.EventType.Start, "Server started", null, null, ServerInstance)); Handler.AddEvent(new GameEvent(GameEvent.EventType.Start, "Server started", null, null, ServerInstance));
} }
catch (ServerException e) 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)) 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)) else if (e.GetType() == typeof(NetworkException))
{ {
Logger.WriteDebug(e.Message); Logger.WriteDebug(e.Message);
@ -418,7 +418,7 @@ namespace IW4MAdmin.Application
catch (Exception E) 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 Message: " + E.Message);
Logger.WriteDebug("Error Trace: " + E.StackTrace); Logger.WriteDebug("Error Trace: " + E.StackTrace);
newEvent.OnProcessed.Set(); newEvent.OnProcessed.Set();
@ -435,7 +435,7 @@ namespace IW4MAdmin.Application
HeartbeatTimer.Change(0, Timeout.Infinite); HeartbeatTimer.Change(0, Timeout.Infinite);
foreach (var S in Servers) foreach (var S in Servers)
S.Broadcast(Utilities.CurrentLocalization.LocalizationSet["BROADCAST_OFFLINE"]).Wait(); S.Broadcast("^1" + Utilities.CurrentLocalization.LocalizationIndex["BROADCAST_OFFLINE"]).Wait();
#endif #endif
_servers.Clear(); _servers.Clear();
} }

View File

@ -23,7 +23,7 @@ namespace Application.RconParsers
TempBan = "tempbanclient {0} \"{1}\"" 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<string[]> ExecuteCommandAsync(Connection connection, string command) public async Task<string[]> ExecuteCommandAsync(Connection connection, string command)
{ {
@ -118,7 +118,6 @@ namespace Application.RconParsers
if (P.IsBot) if (P.IsBot)
{ {
P.NetworkId = -(P.ClientNumber + 1);
P.IPAddress = 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) if (Status.Length > 5 && validMatches == 0)
{ {

View File

@ -19,13 +19,14 @@ using Application.Misc;
using Application.RconParsers; using Application.RconParsers;
using IW4MAdmin.Application.EventParsers; using IW4MAdmin.Application.EventParsers;
using IW4MAdmin.Application.IO; using IW4MAdmin.Application.IO;
using SharedLibraryCore.Localization;
namespace IW4MAdmin namespace IW4MAdmin
{ {
public class IW4MServer : Server public class IW4MServer : Server
{ {
private CancellationToken cts; private CancellationToken cts;
private static Dictionary<string, string> loc = Utilities.CurrentLocalization.LocalizationSet; private static Index loc = Utilities.CurrentLocalization.LocalizationIndex;
private GameLogEvent LogEvent; private GameLogEvent LogEvent;
@ -203,7 +204,7 @@ namespace IW4MAdmin
if (!Manager.GetApplicationSettings().Configuration().EnableClientVPNs && if (!Manager.GetApplicationSettings().Configuration().EnableClientVPNs &&
await VPNCheck.UsingVPN(player.IPAddressString, Manager.GetApplicationSettings().Configuration().IPHubAPIKey)) 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; return true;
@ -709,7 +710,11 @@ namespace IW4MAdmin
&& BroadcastMessages.Count > 0 && BroadcastMessages.Count > 0
&& ClientNum > 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; NextMessage = NextMessage == (BroadcastMessages.Count - 1) ? 0 : NextMessage + 1;
start = DateTime.Now; start = DateTime.Now;
} }
@ -821,7 +826,7 @@ namespace IW4MAdmin
CustomCallback = await ScriptLoaded(); CustomCallback = await ScriptLoaded();
string mainPath = EventParser.GetGameDir(); string mainPath = EventParser.GetGameDir();
#if DEBUG #if DEBUG
basepath.Value = @"\\192.168.88.253\mw2"; basepath.Value = @"\\192.168.88.253\Call of Duty Black Ops II";
#endif #endif
string logPath; string logPath;
if (GameName == Game.IW5) if (GameName == Game.IW5)
@ -1051,8 +1056,8 @@ namespace IW4MAdmin
override public void InitializeTokens() override public void InitializeTokens()
{ {
Manager.GetMessageTokens().Add(new SharedLibraryCore.Helpers.MessageToken("TOTALPLAYERS", Manager.GetClientService().GetTotalClientsAsync().Result.ToString)); Manager.GetMessageTokens().Add(new SharedLibraryCore.Helpers.MessageToken("TOTALPLAYERS", (Server s) => Manager.GetClientService().GetTotalClientsAsync().Result.ToString()));
Manager.GetMessageTokens().Add(new SharedLibraryCore.Helpers.MessageToken("VERSION", Application.Program.Version.ToString)); Manager.GetMessageTokens().Add(new SharedLibraryCore.Helpers.MessageToken("VERSION", (Server s) => Application.Program.Version.ToString()));
} }
} }
} }

View File

@ -8,7 +8,7 @@ namespace IW4MAdmin.Plugins.Login.Commands
{ {
public class CLogin : Command 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() new CommandArgument()
{ {
@ -25,12 +25,12 @@ namespace IW4MAdmin.Plugins.Login.Commands
if (hashedPassword[0] == client.Password) if (hashedPassword[0] == client.Password)
{ {
Plugin.AuthorizedClients[E.Origin.ClientId] = true; 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 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"]);
} }
} }
} }

View File

@ -18,6 +18,7 @@ namespace IW4MAdmin.Plugins.Stats.Cheat
Dictionary<IW4Info.HitLocation, int> HitLocationCount; Dictionary<IW4Info.HitLocation, int> HitLocationCount;
EFClientStatistics ClientStats; EFClientStatistics ClientStats;
DateTime LastKill; DateTime LastKill;
long LastOffset;
ILogger Log; ILogger Log;
Strain Strain; Strain Strain;
@ -65,7 +66,6 @@ namespace IW4MAdmin.Plugins.Stats.Cheat
return new DetectionPenaltyResult() return new DetectionPenaltyResult()
{ {
ClientPenalty = Penalty.PenaltyType.Any, ClientPenalty = Penalty.PenaltyType.Any,
RatioAmount = 0
}; };
if (LastKill == DateTime.MinValue) if (LastKill == DateTime.MinValue)
@ -79,6 +79,7 @@ namespace IW4MAdmin.Plugins.Stats.Cheat
// make sure it's divisible by 2 // make sure it's divisible by 2
if (kill.AnglesList.Count % 2 == 0) if (kill.AnglesList.Count % 2 == 0)
{ {
/*
double maxDistance = 0; double maxDistance = 0;
for (int i = 0; i < kill.AnglesList.Count - 1; i += 1) for (int i = 0; i < kill.AnglesList.Count - 1; i += 1)
{ {
@ -92,7 +93,9 @@ namespace IW4MAdmin.Plugins.Stats.Cheat
{ {
maxDistance = currDistance; maxDistance = currDistance;
} }
} if (maxDistance > hitLoc.MaxAngleDistance)
hitLoc.MaxAngleDistance = (float)maxDistance;
}*/
double realAgainstPredict = Vector3.AbsoluteDistance(kill.ViewAngles, kill.AnglesList[10]); 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; double newAverage = (previousAverage * (hitLoc.HitCount - 1) + realAgainstPredict) / hitLoc.HitCount;
hitLoc.HitOffsetAverage = (float)newAverage; hitLoc.HitOffsetAverage = (float)newAverage;
if (maxDistance > hitLoc.MaxAngleDistance)
hitLoc.MaxAngleDistance = (float)maxDistance;
if (double.IsNaN(hitLoc.HitOffsetAverage)) if (double.IsNaN(hitLoc.HitOffsetAverage))
{ {
Log.WriteWarning("[Detection::ProcessKill] HitOffsetAvgerage NaN"); Log.WriteWarning("[Detection::ProcessKill] HitOffsetAvgerage NaN");
@ -116,30 +116,33 @@ namespace IW4MAdmin.Plugins.Stats.Cheat
.Where(hl => new List<int>() { 4, 5, 2, 3, }.Contains((int)hl.Location)) .Where(hl => new List<int>() { 4, 5, 2, 3, }.Contains((int)hl.Location))
.Where(hl => ClientStats.SessionKills > Thresholds.MediumSampleMinKills + 30); .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() return new DetectionPenaltyResult()
{ {
ClientPenalty = Penalty.PenaltyType.Ban, ClientPenalty = Penalty.PenaltyType.Ban,
RatioAmount = banAverage, RatioAmount = hitOffsetAverage,
KillCount = ClientStats.SessionKills, KillCount = ClientStats.SessionKills,
}; };
} }
#if DEBUG #if DEBUG
Log.WriteDebug($"MaxDistance={maxDistance}, PredictVsReal={realAgainstPredict}"); Log.WriteDebug($"PredictVsReal={realAgainstPredict}");
#endif #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) if (currentStrain > ClientStats.MaxStrain)
{ {
ClientStats.MaxStrain = currentStrain; ClientStats.MaxStrain = currentStrain;
}
if (ClientStats.MaxStrain > Thresholds.MaxStrain) if (Strain.TimesReachedMaxStrain >= 3)
{ {
return new DetectionPenaltyResult() return new DetectionPenaltyResult()
{ {
@ -148,7 +151,6 @@ namespace IW4MAdmin.Plugins.Stats.Cheat
KillCount = ClientStats.SessionKills, KillCount = ClientStats.SessionKills,
}; };
} }
}
#if DEBUG #if DEBUG
Log.WriteDebug($"Current Strain: {currentStrain}"); Log.WriteDebug($"Current Strain: {currentStrain}");

View File

@ -11,6 +11,8 @@ namespace IW4MAdmin.Plugins.Stats.Cheat
private double CurrentStrain; private double CurrentStrain;
private Vector3 LastAngle; private Vector3 LastAngle;
public int TimesReachedMaxStrain { get; private set; }
public double GetStrain(Vector3 newAngle, double deltaTime) public double GetStrain(Vector3 newAngle, double deltaTime)
{ {
if (LastAngle == null) if (LastAngle == null)
@ -30,15 +32,12 @@ namespace IW4MAdmin.Plugins.Stats.Cheat
} }
double newStrain = Math.Pow(distance[0] + distance[1], 0.99) / deltaTime; 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; CurrentStrain += newStrain;
LastAngle = newAngle;
if (CurrentStrain > Thresholds.MaxStrain)
TimesReachedMaxStrain++;
LastAngle = newAngle;
return CurrentStrain; return CurrentStrain;
} }

View File

@ -1,8 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IW4MAdmin.Plugins.Stats.Cheat namespace IW4MAdmin.Plugins.Stats.Cheat
{ {

View File

@ -11,7 +11,7 @@ namespace IW4MAdmin.Plugins.Stats.Commands
{ {
public class ResetStats : Command 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) 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 // fixme: this doesn't work properly when another context exists
await svc.SaveChangesAsync(); 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 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"]);
} }
} }
} }

View File

@ -8,53 +8,70 @@ using SharedLibraryCore.Objects;
using SharedLibraryCore.Services; using SharedLibraryCore.Services;
using IW4MAdmin.Plugins.Stats.Models; using IW4MAdmin.Plugins.Stats.Models;
using SharedLibraryCore.Database; using SharedLibraryCore.Database;
using System.Collections.Generic;
namespace IW4MAdmin.Plugins.Stats.Commands namespace IW4MAdmin.Plugins.Stats.Commands
{ {
class TopStats : Command 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<List<string>> GetTopStats(Server s)
{ {
var statsSvc = new GenericRepository<EFClientStatistics>(); int serverId = s.GetHashCode();
int serverId = E.Owner.GetHashCode(); List<string> topStatsText = new List<string>()
{
$"^5--{Utilities.CurrentLocalization.LocalizationIndex["PLUGINS_STATS_COMMANDS_TOP_TEXT"]}--"
};
using (var db = new DatabaseContext()) using (var db = new DatabaseContext())
{ {
db.ChangeTracker.AutoDetectChangesEnabled = false;
db.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
var thirtyDaysAgo = DateTime.UtcNow.AddMonths(-1); var thirtyDaysAgo = DateTime.UtcNow.AddMonths(-1);
var topStats = await (from stats in db.Set<EFClientStatistics>()
var iqStats = (from stats in db.Set<EFClientStatistics>()
join client in db.Clients join client in db.Clients
on stats.ClientId equals client.ClientId on stats.ClientId equals client.ClientId
join alias in db.Aliases join alias in db.Aliases
on client.CurrentAliasId equals alias.AliasId on client.CurrentAliasId equals alias.AliasId
where stats.ServerId == serverId
where stats.TimePlayed >= 3600 where stats.TimePlayed >= 3600
where client.Level != Player.Permission.Banned where client.Level != Player.Permission.Banned
where client.LastConnection >= thirtyDaysAgo where client.LastConnection >= thirtyDaysAgo
orderby stats.Skill descending orderby stats.Skill descending
select new select $"^3{client.Name}^7 - ^5{stats.KDR} ^7KDR | ^5{stats.Skill} ^7{Utilities.CurrentLocalization.LocalizationIndex["PLUGINS_STATS_TEXT_SKILL"]}")
.Take(5);
topStatsText.AddRange(await iqStats.ToListAsync());
}
// no one qualified
if (topStatsText.Count == 0)
{ {
alias.Name, topStatsText = new List<string>()
stats.KDR, {
stats.Skill Utilities.CurrentLocalization.LocalizationIndex["PLUGINS_STATS_TEXT_NOQUALIFY"]
}) };
.Take(5) }
.ToListAsync();
return topStatsText;
}
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()) if (!E.Message.IsBroadcastCommand())
{ {
await E.Origin.Tell($"^5--{Utilities.CurrentLocalization.LocalizationSet["PLUGINS_STATS_COMMANDS_TOP_TEXT"]}--");
foreach (var stat in topStats) 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"]}"); await E.Origin.Tell(stat);
} }
else else
{ {
await E.Owner.Broadcast($"^5--{Utilities.CurrentLocalization.LocalizationSet["PLUGINS_STATS_COMMANDS_TOP_TEXT"]}--");
foreach (var stat in topStats) 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"]}"); await E.Owner.Broadcast(stat);
}
} }
} }
} }

View File

@ -12,7 +12,7 @@ namespace IW4MAdmin.Plugins.Stats.Commands
{ {
public class CViewStats : Command 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() new CommandArgument()
{ {
@ -24,7 +24,7 @@ namespace IW4MAdmin.Plugins.Stats.Commands
public override async Task ExecuteAsync(GameEvent E) public override async Task ExecuteAsync(GameEvent E)
{ {
var loc = Utilities.CurrentLocalization.LocalizationSet; var loc = Utilities.CurrentLocalization.LocalizationIndex;
if (E.Target?.ClientNumber < 0) if (E.Target?.ClientNumber < 0)
{ {

View File

@ -320,6 +320,10 @@ namespace IW4MAdmin.Plugins.Stats.Helpers
{ {
async Task executePenalty(Cheat.DetectionPenaltyResult penalty) async Task executePenalty(Cheat.DetectionPenaltyResult penalty)
{ {
#if DEBUG
Log.WriteVerbose("Player Banned");
return;
#endif
// prevent multiple bans from occuring // prevent multiple bans from occuring
if (attacker.Level == Player.Permission.Banned) if (attacker.Level == Player.Permission.Banned)
{ {

View File

@ -170,7 +170,8 @@ namespace IW4MAdmin.Plugins.Stats
(double)clientStats.Where(c => c.HitLocations.Count > 0) (double)clientStats.Where(c => c.HitLocations.Count > 0)
.Sum(c => c.HitLocations.Where(hl => hl.Location != IW4Info.HitLocation.none).Sum(f => f.HitCount)), 2); .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<ProfileMeta>() return new List<ProfileMeta>()
@ -248,22 +249,28 @@ namespace IW4MAdmin.Plugins.Stats
MetaService.AddMeta(getMessages); MetaService.AddMeta(getMessages);
string totalKills() string totalKills(Server server)
{ {
var serverStats = new GenericRepository<EFServerStatistics>(); var serverStats = new GenericRepository<EFServerStatistics>();
return serverStats.Find(s => s.Active) return serverStats.Find(s => s.Active)
.Sum(c => c.TotalKills).ToString("#,##0"); .Sum(c => c.TotalKills).ToString("#,##0");
} }
string totalPlayTime() string totalPlayTime(Server server)
{ {
var serverStats = new GenericRepository<EFServerStatistics>(); var serverStats = new GenericRepository<EFServerStatistics>();
return Math.Ceiling((serverStats.GetQuery(s => s.Active) return Math.Ceiling((serverStats.GetQuery(s => s.Active)
.Sum(c => c.TotalPlayTime) / 3600.0)).ToString("#,##0"); .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("TOTALKILLS", totalKills));
manager.GetMessageTokens().Add(new MessageToken("TOTALPLAYTIME", totalPlayTime)); manager.GetMessageTokens().Add(new MessageToken("TOTALPLAYTIME", totalPlayTime));
manager.GetMessageTokens().Add(new MessageToken("TOPSTATS", topStats));
ServerManager = manager; ServerManager = manager;

View File

@ -29,7 +29,7 @@ namespace SharedLibraryCore
public String Name { get; private set; } public String Name { get; private set; }
public String Description { 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 String Alias { get; private set; }
public int RequiredArgumentCount => Arguments.Count(c => c.Required); public int RequiredArgumentCount => Arguments.Count(c => c.Required);
public bool RequiresTarget { get; private set; } public bool RequiresTarget { get; private set; }

View File

@ -7,6 +7,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace SharedLibraryCore.Commands namespace SharedLibraryCore.Commands
@ -14,7 +15,7 @@ namespace SharedLibraryCore.Commands
public class CQuit : Command public class CQuit : Command
{ {
public CQuit() : 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) public override Task ExecuteAsync(GameEvent E)
@ -26,7 +27,7 @@ namespace SharedLibraryCore.Commands
public class COwner : Command public class COwner : Command
{ {
public COwner() : 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) 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) if ((await (E.Owner.Manager.GetClientService() as ClientService).GetOwners()).Count == 0)
{ {
E.Origin.Level = Player.Permission.Owner; 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 // so setpassword/login works
E.Owner.Manager.GetPrivilegedClients().Add(E.Origin.ClientId, E.Origin); E.Owner.Manager.GetPrivilegedClients().Add(E.Origin.ClientId, E.Origin);
await E.Owner.Manager.GetClientService().Update(E.Origin); await E.Owner.Manager.GetClientService().Update(E.Origin);
} }
else 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 class CWarn : Command
{ {
public CWarn() : 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() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true Required = true
}, },
new CommandArgument() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_REASON"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_REASON"],
Required = true Required = true
} }
}) })
@ -65,7 +66,7 @@ namespace SharedLibraryCore.Commands
public override async Task ExecuteAsync(GameEvent E) public override async Task ExecuteAsync(GameEvent E)
{ {
if (E.Origin.Level <= E.Target.Level) 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 else
await E.Target.Warn(E.Data, E.Origin); await E.Target.Warn(E.Data, E.Origin);
} }
@ -74,11 +75,11 @@ namespace SharedLibraryCore.Commands
public class CWarnClear : Command public class CWarnClear : Command
{ {
public CWarnClear() : 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() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true Required = true
} }
}) })
@ -87,7 +88,7 @@ namespace SharedLibraryCore.Commands
public override async Task ExecuteAsync(GameEvent E) public override async Task ExecuteAsync(GameEvent E)
{ {
E.Target.Warnings = 0; 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); await E.Owner.Broadcast(Message);
} }
} }
@ -95,16 +96,16 @@ namespace SharedLibraryCore.Commands
public class CKick : Command public class CKick : Command
{ {
public CKick() : 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() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true Required = true
}, },
new CommandArgument() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_REASON"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_REASON"],
Required = true 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)); 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.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 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 class CSay : Command
{ {
public CSay() : 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() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_MESSAGE"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_MESSAGE"],
Required = true Required = true
} }
}) })
@ -145,21 +146,21 @@ namespace SharedLibraryCore.Commands
public class CTempBan : Command public class CTempBan : Command
{ {
public CTempBan() : 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() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true Required = true
}, },
new CommandArgument() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_DURATION"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_DURATION"],
Required = true, Required = true,
}, },
new CommandArgument() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_REASON"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_REASON"],
Required = true Required = true
} }
}) })
@ -175,26 +176,26 @@ namespace SharedLibraryCore.Commands
if (E.Origin.Level > E.Target.Level) if (E.Origin.Level > E.Target.Level)
{ {
await E.Target.TempBan(Message, length, E.Origin); 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 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 class CBan : Command
{ {
public CBan() : 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() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true Required = true
}, },
new CommandArgument() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_REASON"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_REASON"],
Required = true Required = true
} }
}) })
@ -205,26 +206,26 @@ namespace SharedLibraryCore.Commands
if (E.Origin.Level > E.Target.Level) if (E.Origin.Level > E.Target.Level)
{ {
await E.Target.Ban(E.Data, E.Origin); 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 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 class CUnban : Command
{ {
public CUnban() : 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() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_CLIENTID"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_CLIENTID"],
Required = true, Required = true,
}, },
new CommandArgument() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_REASON"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_REASON"],
Required = true 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) 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.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 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 class CWhoAmI : Command
{ {
public CWhoAmI() : 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) public override async Task ExecuteAsync(GameEvent E)
@ -261,7 +262,7 @@ namespace SharedLibraryCore.Commands
public class CList : Command public class CList : Command
{ {
public CList() : 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) public override async Task ExecuteAsync(GameEvent E)
@ -296,11 +297,11 @@ namespace SharedLibraryCore.Commands
public class CHelp : Command public class CHelp : Command
{ {
public CHelp() : 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() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_COMMANDS"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_COMMANDS"],
Required = false Required = false
} }
}) })
@ -325,7 +326,7 @@ namespace SharedLibraryCore.Commands
} }
if (!found) if (!found)
await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_HELP_NOTFOUND"]); await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_HELP_NOTFOUND"]);
} }
else else
@ -352,7 +353,7 @@ namespace SharedLibraryCore.Commands
} }
} }
await E.Origin.Tell(helpResponse.ToString()); 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 class CFastRestart : Command
{ {
public CFastRestart() : 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) public override async Task ExecuteAsync(GameEvent E)
@ -368,24 +369,24 @@ namespace SharedLibraryCore.Commands
await E.Owner.ExecuteCommandAsync("fast_restart"); await E.Owner.ExecuteCommandAsync("fast_restart");
if (!E.Origin.Masked) 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 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 class CMapRotate : Command
{ {
public CMapRotate() : 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) public override async Task ExecuteAsync(GameEvent E)
{ {
if (!E.Origin.Masked) 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 else
await E.Owner.Broadcast(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_MAPROTATE"]); await E.Owner.Broadcast(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_MAPROTATE"]);
Task.Delay(5000).Wait(); Task.Delay(5000).Wait();
await E.Owner.ExecuteCommandAsync("map_rotate"); await E.Owner.ExecuteCommandAsync("map_rotate");
} }
@ -394,16 +395,16 @@ namespace SharedLibraryCore.Commands
public class CSetLevel : Command public class CSetLevel : Command
{ {
public CSetLevel() : 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() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true Required = true
}, },
new CommandArgument() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_LEVEL"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_LEVEL"],
Required = true Required = true
} }
}) })
@ -413,7 +414,7 @@ namespace SharedLibraryCore.Commands
{ {
if (E.Target == E.Origin) 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; return;
} }
@ -422,14 +423,14 @@ namespace SharedLibraryCore.Commands
if (newPerm == Player.Permission.Owner && if (newPerm == Player.Permission.Owner &&
!E.Owner.Manager.GetApplicationSettings().Configuration().EnableMultipleOwners) !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; return;
} }
if (E.Origin.Level < Player.Permission.Owner && if (E.Origin.Level < Player.Permission.Owner &&
!E.Owner.Manager.GetApplicationSettings().Configuration().EnableSteppedHierarchy) !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; return;
} }
@ -437,7 +438,7 @@ namespace SharedLibraryCore.Commands
{ {
if (E.Origin.Level < Player.Permission.Owner) 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; return;
} }
} }
@ -450,7 +451,7 @@ namespace SharedLibraryCore.Commands
if (ActiveClient != null) if (ActiveClient != null)
{ {
ActiveClient.Level = newPerm; 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 else
@ -470,36 +471,36 @@ namespace SharedLibraryCore.Commands
E.Owner.Manager.GetPrivilegedClients()[E.Target.ClientId] = E.Target; 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 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 class CUsage : Command
{ {
public CUsage() : 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) 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 class CUptime : Command
{ {
public CUptime() : 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) public override async Task ExecuteAsync(GameEvent E)
{ {
TimeSpan uptime = DateTime.Now - System.Diagnostics.Process.GetCurrentProcess().StartTime; 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"]}"); 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 class CListAdmins : Command
{ {
public CListAdmins() : 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) public override async Task ExecuteAsync(GameEvent E)
@ -527,18 +528,18 @@ namespace SharedLibraryCore.Commands
} }
if (numOnline == 0) 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 class CLoadMap : Command
{ {
public CLoadMap() : 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() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_MAP"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_MAP"],
Required = true Required = true
} }
}) })
@ -551,14 +552,14 @@ namespace SharedLibraryCore.Commands
{ {
if (m.Name.ToLower() == newMap || m.Alias.ToLower() == newMap) 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(); Task.Delay(5000).Wait();
await E.Owner.LoadMap(m.Name); await E.Owner.LoadMap(m.Name);
return; 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(); Task.Delay(5000).Wait();
await E.Owner.LoadMap(newMap); await E.Owner.LoadMap(newMap);
} }
@ -567,11 +568,11 @@ namespace SharedLibraryCore.Commands
public class CFindPlayer : Command public class CFindPlayer : Command
{ {
public CFindPlayer() : 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() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true Required = true
} }
}) })
@ -581,7 +582,7 @@ namespace SharedLibraryCore.Commands
{ {
if (E.Data.Length < 3) 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; return;
} }
@ -592,7 +593,7 @@ namespace SharedLibraryCore.Commands
if (db_players.Count == 0) 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; return;
} }
@ -610,7 +611,7 @@ namespace SharedLibraryCore.Commands
public class CListRules : Command public class CListRules : Command
{ {
public CListRules() : 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) public override async Task ExecuteAsync(GameEvent E)
@ -619,9 +620,9 @@ namespace SharedLibraryCore.Commands
E.Owner.ServerConfig.Rules?.Count < 1) E.Owner.ServerConfig.Rules?.Count < 1)
{ {
if (E.Message.IsBroadcastCommand()) 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 else
await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_RULES_NONE"]); await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_RULES_NONE"]);
} }
else else
@ -645,16 +646,16 @@ namespace SharedLibraryCore.Commands
public class CPrivateMessage : Command public class CPrivateMessage : Command
{ {
public CPrivateMessage() : 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() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true Required = true
}, },
new CommandArgument() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_MESSAGE"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_MESSAGE"],
Required = true Required = true
} }
}) })
@ -670,16 +671,16 @@ namespace SharedLibraryCore.Commands
public class CFlag : Command public class CFlag : Command
{ {
public CFlag() : 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() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true Required = true
}, },
new CommandArgument() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_REASON"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_REASON"],
Required = true Required = true
} }
}) })
@ -690,7 +691,7 @@ namespace SharedLibraryCore.Commands
// todo: move unflag to seperate command // todo: move unflag to seperate command
if (E.Target.Level >= E.Origin.Level) 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; return;
} }
@ -698,7 +699,7 @@ namespace SharedLibraryCore.Commands
{ {
E.Target.Level = Player.Permission.User; E.Target.Level = Player.Permission.User;
await E.Owner.Manager.GetClientService().Update(E.Target); 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 else
@ -719,7 +720,7 @@ namespace SharedLibraryCore.Commands
await E.Owner.Manager.GetPenaltyService().Create(newPenalty); 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)); 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 class CReport : Command
{ {
public CReport() : 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() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true Required = true
}, },
new CommandArgument() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_REASON"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_REASON"],
Required = true Required = true
} }
}) })
@ -747,31 +748,31 @@ namespace SharedLibraryCore.Commands
{ {
if (E.Data.ToLower().Contains("camp")) 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; return;
} }
if (E.Owner.Reports.Find(x => (x.Origin == E.Origin && x.Target.NetworkId == E.Target.NetworkId)) != null) 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; return;
} }
if (E.Target == E.Origin) 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; return;
} }
if (E.Target.Level > E.Origin.Level) 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; return;
} }
E.Owner.Reports.Add(new Report(E.Target, E.Origin, E.Data)); 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)); 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)); 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 class CListReports : Command
{ {
public CListReports() : 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() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_CLEAR"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_CLEAR"],
Required = false Required = false
} }
}) })
@ -792,16 +793,16 @@ namespace SharedLibraryCore.Commands
public override async Task ExecuteAsync(GameEvent E) 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<Report>(); E.Owner.Reports = new List<Report>();
await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_REPORTS_CLEAR_SUCCESS"]); await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_REPORTS_CLEAR_SUCCESS"]);
return; return;
} }
if (E.Owner.Reports.Count < 1) 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; return;
} }
@ -813,7 +814,7 @@ namespace SharedLibraryCore.Commands
public class CMask : Command public class CMask : Command
{ {
public CMask() : 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) public override async Task ExecuteAsync(GameEvent E)
@ -821,12 +822,12 @@ namespace SharedLibraryCore.Commands
if (E.Origin.Masked) if (E.Origin.Masked)
{ {
E.Origin.Masked = false; 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 else
{ {
E.Origin.Masked = true; 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); await E.Owner.Manager.GetClientService().Update(E.Origin);
@ -836,11 +837,11 @@ namespace SharedLibraryCore.Commands
public class CListBanInfo : Command public class CListBanInfo : Command
{ {
public CListBanInfo() : 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() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true Required = true
} }
}) })
@ -854,12 +855,12 @@ namespace SharedLibraryCore.Commands
if (penalty == null) if (penalty == null)
{ {
await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_BANINFO_NONE"]); await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_BANINFO_NONE"]);
return; return;
} }
string timeRemaining = penalty.Type == Penalty.PenaltyType.TempBan ? $"({(penalty.Expires - DateTime.UtcNow).TimeSpanText()} remaining)" : ""; 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}"); 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 class CListAlias : Command
{ {
public CListAlias() : 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() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = true, Required = true,
} }
}) })
@ -887,12 +888,12 @@ namespace SharedLibraryCore.Commands
await E.Target.Tell($"[^3{E.Target}^7]"); 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)); message.Append(String.Join(" | ", names));
await E.Origin.Tell(message.ToString()); await E.Origin.Tell(message.ToString());
message.Clear(); message.Clear();
message.Append($"{Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ALIAS_IPS"]}: "); message.Append($"{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ALIAS_IPS"]}: ");
message.Append(String.Join(" | ", IPs)); message.Append(String.Join(" | ", IPs));
await E.Origin.Tell(message.ToString()); await E.Origin.Tell(message.ToString());
} }
@ -901,11 +902,11 @@ namespace SharedLibraryCore.Commands
public class CExecuteRCON : Command public class CExecuteRCON : Command
{ {
public CExecuteRCON() : 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() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_COMMANDS"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_COMMANDS"],
Required = true Required = true
} }
}) })
@ -917,19 +918,19 @@ namespace SharedLibraryCore.Commands
foreach (string S in Response) foreach (string S in Response)
await E.Origin.Tell(S.StripColors()); await E.Origin.Tell(S.StripColors());
if (Response.Length == 0) 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 class CPlugins : Command
{ {
public CPlugins() : 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) 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) 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)); 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 class CIP : Command
{ {
public CIP() : 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) 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 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() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_INACTIVE"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_INACTIVE"],
Required = false Required = false
} }
}) })
@ -977,7 +978,7 @@ namespace SharedLibraryCore.Commands
catch (FormatException) catch (FormatException)
{ {
await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationSet["COMMANDS_PRUNE_FAIL"]); await E.Origin.Tell(Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_PRUNE_FAIL"]);
return; return;
} }
@ -994,18 +995,18 @@ namespace SharedLibraryCore.Commands
inactiveUsers.ForEach(c => c.Level = Player.Permission.User); inactiveUsers.ForEach(c => c.Level = Player.Permission.User);
await context.SaveChangesAsync(); 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 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() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PASSWORD"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PASSWORD"],
Required = true Required = true
} }
}) })
@ -1015,7 +1016,7 @@ namespace SharedLibraryCore.Commands
{ {
if (E.Data.Length < 5) 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; return;
} }
@ -1029,11 +1030,10 @@ namespace SharedLibraryCore.Commands
E.Owner.Manager.GetPrivilegedClients()[E.Origin.ClientId].PasswordSalt = hashedPassword[1]; E.Owner.Manager.GetPrivilegedClients()[E.Origin.ClientId].PasswordSalt = hashedPassword[1];
await E.Owner.Manager.GetClientService().Update(E.Origin); 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 class CKillServer : Command
{ {
public CKillServer() : base("killserver", "kill the game server", "kill", Player.Permission.Administrator, false) 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) public override async Task ExecuteAsync(GameEvent E)
{ {
var gameserverProcesses = System.Diagnostics.Process.GetProcessesByName("iw4x"); 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) 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"); await E.Origin.Tell("Unable to cleanly shutdown server, forcing");
} }
@ -1085,16 +1099,16 @@ namespace SharedLibraryCore.Commands
} }
} }
} }
}*/ }
public class CPing : Command 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() new CommandArgument()
{ {
Name = Utilities.CurrentLocalization.LocalizationSet["COMMANDS_ARGS_PLAYER"], Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PLAYER"],
Required = false Required = false
} }
}) })
@ -1105,16 +1119,16 @@ namespace SharedLibraryCore.Commands
if (E.Message.IsBroadcastCommand()) if (E.Message.IsBroadcastCommand())
{ {
if (E.Target == null) 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 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 else
{ {
if (E.Target == null) 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 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");
} }
} }
} }

View File

@ -29,7 +29,7 @@ namespace SharedLibraryCore.Configuration
public IBaseConfiguration Generate() public IBaseConfiguration Generate()
{ {
var loc = Utilities.CurrentLocalization.LocalizationSet; var loc = Utilities.CurrentLocalization.LocalizationIndex;
Id = Guid.NewGuid().ToString(); Id = Guid.NewGuid().ToString();
EnableWebFront = Utilities.PromptBool(loc["SETUP_ENABLE_WEBFRONT"]); EnableWebFront = Utilities.PromptBool(loc["SETUP_ENABLE_WEBFRONT"]);

View File

@ -17,7 +17,7 @@ namespace SharedLibraryCore.Configuration
public IBaseConfiguration Generate() public IBaseConfiguration Generate()
{ {
var loc = Utilities.CurrentLocalization.LocalizationSet; var loc = Utilities.CurrentLocalization.LocalizationIndex;
while (string.IsNullOrEmpty(IPAddress)) while (string.IsNullOrEmpty(IPAddress))
{ {

View File

@ -5,16 +5,16 @@ namespace SharedLibraryCore.Helpers
public class MessageToken public class MessageToken
{ {
public string Name { get; private set; } public string Name { get; private set; }
Func<string> Value; Func<Server, string> Value;
public MessageToken(string Name, Func<string> Value) public MessageToken(string Name, Func<Server, string> Value)
{ {
this.Name = Name; this.Name = Name;
this.Value = Value; this.Value = Value;
} }
public override string ToString() public string Process(Server server)
{ {
return Value().ToString(); return this.Value(server);
} }
} }
} }

View File

@ -1,4 +1,5 @@
using System; using Newtonsoft.Json;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
@ -7,6 +8,30 @@ namespace SharedLibraryCore.Localization
public class Layout public class Layout
{ {
public string LocalizationName { get; set; } public string LocalizationName { get; set; }
public Dictionary<string, string> LocalizationSet { get; set; } public Index LocalizationIndex { get; set; }
public Layout(Dictionary<string, string> set)
{
LocalizationIndex = new Index()
{
Set = set
};
} }
}
public class Index
{
public Dictionary<string, string> 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;
}
}
}
} }

View File

@ -17,7 +17,7 @@ namespace SharedLibraryCore.Plugins
if (dllFileNames.Length == 0) if (dllFileNames.Length == 0)
{ {
Manager.GetLogger().WriteDebug(Utilities.CurrentLocalization.LocalizationSet["PLUGIN_IMPORTER_NOTFOUND"]); Manager.GetLogger().WriteDebug(Utilities.CurrentLocalization.LocalizationIndex["PLUGIN_IMPORTER_NOTFOUND"]);
return true; return true;
} }
@ -43,7 +43,7 @@ namespace SharedLibraryCore.Plugins
Object commandObject = Activator.CreateInstance(assemblyType); Object commandObject = Activator.CreateInstance(assemblyType);
Command newCommand = (Command)commandObject; Command newCommand = (Command)commandObject;
ActiveCommands.Add(newCommand); 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++; LoadedCommands++;
continue; continue;
} }

View File

@ -144,7 +144,7 @@ namespace SharedLibraryCore.RCon
if (!connectionState.Buffer.Take(4).ToArray().SequenceEqual(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF })) if (!connectionState.Buffer.Take(4).ToArray().SequenceEqual(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF }))
throw new NetworkException("Unexpected packet received"); 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, serverConnection.BeginReceive(connectionState.Buffer, 0, connectionState.Buffer.Length, 0,
new AsyncCallback(OnReceivedCallback), connectionState); new AsyncCallback(OnReceivedCallback), connectionState);
@ -276,7 +276,7 @@ namespace SharedLibraryCore.RCon
if (FailedReceives >= 4) if (FailedReceives >= 4)
{ {
throw new NetworkException($"Could not receive data from {socketConnection.RemoteEndPoint}"); throw new NetworkException($"{Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_COMMUNICATION"]} {socketConnection.RemoteEndPoint}");
} }
} }

View File

@ -137,7 +137,6 @@ namespace SharedLibraryCore
}; };
Manager.GetEventHandler().AddEvent(e); Manager.GetEventHandler().AddEvent(e);
await this.ExecuteCommandAsync(formattedMessage);
#else #else
Logger.WriteVerbose(Message.StripColors()); Logger.WriteVerbose(Message.StripColors());
await Task.CompletedTask; await Task.CompletedTask;

View File

@ -10,6 +10,7 @@ using System.Reflection;
using System.IO; using System.IO;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Globalization; using System.Globalization;
using System.Diagnostics;
namespace SharedLibraryCore namespace SharedLibraryCore
{ {
@ -101,7 +102,7 @@ namespace SharedLibraryCore
} }
} }
public static String ProcessMessageToken(IList<Helpers.MessageToken> tokens, String str) public static String ProcessMessageToken(this Server server, IList<Helpers.MessageToken> tokens, String str)
{ {
MatchCollection RegexMatches = Regex.Matches(str, @"\{\{[A-Z]+\}\}", RegexOptions.IgnoreCase); MatchCollection RegexMatches = Regex.Matches(str, @"\{\{[A-Z]+\}\}", RegexOptions.IgnoreCase);
foreach (Match M in RegexMatches) foreach (Match M in RegexMatches)
@ -112,7 +113,7 @@ namespace SharedLibraryCore
var found = tokens.FirstOrDefault(t => t.Name.ToLower() == Identifier.ToLower()); var found = tokens.FirstOrDefault(t => t.Name.ToLower() == Identifier.ToLower());
if (found != null) if (found != null)
str = str.Replace(Match, found.ToString()); str = str.Replace(Match, found.Process(server));
} }
return str; return str;
@ -185,7 +186,7 @@ namespace SharedLibraryCore
return id; return id;
var bot = Regex.Match(str, @"bot[0-9]+").Value; var bot = Regex.Match(str, @"bot[0-9]+").Value;
if (!string.IsNullOrEmpty(bot)) if (!string.IsNullOrEmpty(bot))
return -Convert.ToInt64(bot.Substring(3)); return -Convert.ToInt64(bot.Substring(3)) + 1;
return 0; return 0;
} }
@ -378,6 +379,30 @@ namespace SharedLibraryCore
return dict; 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<Dvar<T>> GetDvarAsync<T>(this Server server, string dvarName) => server.RconParser.GetDvarAsync<T>(server.RemoteConnection, dvarName); public static Task<Dvar<T>> GetDvarAsync<T>(this Server server, string dvarName) => server.RconParser.GetDvarAsync<T>(server.RemoteConnection, dvarName);
public static Task SetDvarAsync(this Server server, string dvarName, object dvarValue) => server.RconParser.SetDvarAsync(server.RemoteConnection, dvarName, dvarValue); public static Task SetDvarAsync(this Server server, string dvarName, object dvarValue) => server.RconParser.SetDvarAsync(server.RemoteConnection, dvarName, dvarValue);

View File

@ -14,15 +14,14 @@ namespace WebfrontCore.Controllers
{ {
var info = new ActionInfo() var info = new ActionInfo()
{ {
ActionButtonLabel = "Ban", ActionButtonLabel = Localization["WEBFRONT_ACTION_BAN_NAME"],
Name = "Ban", Name = "Ban",
Inputs = new List<InputInfo>() Inputs = new List<InputInfo>()
{ {
new InputInfo() new InputInfo()
{ {
Name = "Reason", Name = "Reason",
Label = "Reason", Label = Localization["WEBFRONT_ACTION_LABEL_REASON"],
Placeholder = ""
} }
}, },
Action = "BanAsync" Action = "BanAsync"
@ -46,15 +45,14 @@ namespace WebfrontCore.Controllers
{ {
var info = new ActionInfo() var info = new ActionInfo()
{ {
ActionButtonLabel = "Unban", ActionButtonLabel = Localization["WEBFRONT_ACTION_UNBAN_NAME"],
Name = "Unban", Name = "Unban",
Inputs = new List<InputInfo>() Inputs = new List<InputInfo>()
{ {
new InputInfo() new InputInfo()
{ {
Name = "Reason", Name = "Reason",
Label = "Reason", Label = Localization["WEBFRONT_ACTION_LABEL_REASON"],
Placeholder = ""
} }
}, },
Action = "UnbanAsync" Action = "UnbanAsync"
@ -78,7 +76,7 @@ namespace WebfrontCore.Controllers
{ {
var login = new ActionInfo() var login = new ActionInfo()
{ {
ActionButtonLabel = "Login", ActionButtonLabel = Localization["WEBFRONT_ACTION_LOGIN_NAME"],
Name = "Login", Name = "Login",
Inputs = new List<InputInfo>() Inputs = new List<InputInfo>()
{ {

View File

@ -17,6 +17,7 @@ namespace WebfrontCore.Controllers
protected IManager Manager; protected IManager Manager;
protected readonly DatabaseContext Context; protected readonly DatabaseContext Context;
protected bool Authorized { get; private set; } protected bool Authorized { get; private set; }
protected SharedLibraryCore.Localization.Index Localization { get; private set; }
protected EFClient Client { get; private set; } protected EFClient Client { get; private set; }
private static byte[] LocalHost = { 127, 0, 0, 1 }; private static byte[] LocalHost = { 127, 0, 0, 1 };
private static string DiscordLink; private static string DiscordLink;