diff --git a/manage_languages.py b/manage_languages.py index ee7d1a5c1..ddaf73377 100644 --- a/manage_languages.py +++ b/manage_languages.py @@ -90,6 +90,7 @@ class JsonHelpers: class LanguageManager: TRANSLATION_KEY = re.compile(r'[Tt]ranslate.*"(\w+\.[\w\.]+)"') POTENTIAL_KEY = re.compile(r'"(\w+\.[\w\.]+)"') + COMMAND_LABEL = re.compile(r'@Command\s*\([\W\w]*?label\s*=\s*"(\w+)"', re.MULTILINE) # [\W\w] is a cheeky way to match everything including \n def __init__(self): self.load_jsons() @@ -122,6 +123,8 @@ class LanguageManager: used.add(k) for k in self.POTENTIAL_KEY.findall(data): potential.add(k) + for label in self.COMMAND_LABEL.findall(data): + used.add(f'commands.{label}.description') return used | (potential & expected_keys) def _lint_report_language(self, lang: str, keys: set, flattened: dict, primary_language_flattened: dict) -> None: diff --git a/src/main/java/emu/grasscutter/auth/DefaultAuthenticators.java b/src/main/java/emu/grasscutter/auth/DefaultAuthenticators.java index 6ac5f9fbb..cc9080044 100644 --- a/src/main/java/emu/grasscutter/auth/DefaultAuthenticators.java +++ b/src/main/java/emu/grasscutter/auth/DefaultAuthenticators.java @@ -163,7 +163,7 @@ public final class DefaultAuthenticators { } else { successfulLogin = false; loggerMessage = translate("messages.dispatch.account.login_password_storage_error", address); - responseMessage = translate("password_storage_error"); + responseMessage = translate("messages.dispatch.account.password_storage_error"); } } else { loggerMessage = translate("messages.dispatch.account.account_login_exist_error", address); diff --git a/src/main/java/emu/grasscutter/command/CommandHandler.java b/src/main/java/emu/grasscutter/command/CommandHandler.java index c9a690040..aef968558 100644 --- a/src/main/java/emu/grasscutter/command/CommandHandler.java +++ b/src/main/java/emu/grasscutter/command/CommandHandler.java @@ -68,7 +68,6 @@ public interface CommandHandler { default String getDescriptionString(Player player) { Command annotation = this.getClass().getAnnotation(Command.class); String key = "commands.%s.description".formatted(annotation.label()); - // TODO: fallback to "commands.generic.no_description_specified" return translate(player, key); } diff --git a/src/main/java/emu/grasscutter/command/CommandMap.java b/src/main/java/emu/grasscutter/command/CommandMap.java index 5bfeab7d7..91d228f0f 100644 --- a/src/main/java/emu/grasscutter/command/CommandMap.java +++ b/src/main/java/emu/grasscutter/command/CommandMap.java @@ -35,6 +35,7 @@ public final class CommandMap { */ public CommandMap registerCommand(String label, CommandHandler command) { Grasscutter.getLogger().debug("Registered command: " + label); + label = label.toLowerCase(); // Get command data. Command annotation = command.getClass().getAnnotation(Command.class); @@ -203,7 +204,7 @@ public final class CommandMap { // Parse message. String[] split = rawMessage.split(" "); List args = new LinkedList<>(Arrays.asList(split)); - String label = args.remove(0); + String label = args.remove(0).toLowerCase(); String playerId = (player == null) ? consoleId : player.getAccount().getId(); // Check for special cases - currently only target command. diff --git a/src/main/java/emu/grasscutter/command/commands/AccountCommand.java b/src/main/java/emu/grasscutter/command/commands/AccountCommand.java index 15855c4c9..4127a3a2c 100644 --- a/src/main/java/emu/grasscutter/command/commands/AccountCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/AccountCommand.java @@ -30,7 +30,7 @@ public final class AccountCommand implements CommandHandler { } if (args.size() < 2) { - CommandHandler.sendTranslatedMessage(sender, "commands.account.command_usage"); + sendUsageMessage(sender); return; } @@ -39,7 +39,7 @@ public final class AccountCommand implements CommandHandler { switch (action) { default: - CommandHandler.sendTranslatedMessage(sender, "commands.account.command_usage"); + sendUsageMessage(sender); return; case "create": int uid = 0; diff --git a/src/main/java/emu/grasscutter/command/commands/AnnounceCommand.java b/src/main/java/emu/grasscutter/command/commands/AnnounceCommand.java index 90881793b..dbccd43de 100644 --- a/src/main/java/emu/grasscutter/command/commands/AnnounceCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/AnnounceCommand.java @@ -23,14 +23,14 @@ public final class AnnounceCommand implements CommandHandler { public void execute(Player sender, Player targetPlayer, List args) { var manager = Grasscutter.getGameServer().getAnnouncementSystem(); if (args.size() < 1) { - CommandHandler.sendTranslatedMessage(sender, "commands.announce.command_usage"); + sendUsageMessage(sender); return; } switch (args.get(0)) { case "tpl": if (args.size() < 2) { - CommandHandler.sendTranslatedMessage(sender, "commands.announce.command_usage"); + sendUsageMessage(sender); return; } @@ -52,7 +52,7 @@ public final class AnnounceCommand implements CommandHandler { case "revoke": if (args.size() < 2) { - CommandHandler.sendTranslatedMessage(sender, "commands.announce.command_usage"); + sendUsageMessage(sender); return; } diff --git a/src/main/java/emu/grasscutter/command/commands/ClearCommand.java b/src/main/java/emu/grasscutter/command/commands/ClearCommand.java index f31b09476..9792ae54c 100644 --- a/src/main/java/emu/grasscutter/command/commands/ClearCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/ClearCommand.java @@ -83,7 +83,7 @@ public final class ClearCommand implements CommandHandler { } if (args.size() < 1) { - CommandHandler.sendTranslatedMessage(sender, "commands.clear.command_usage"); + sendUsageMessage(sender); return; } diff --git a/src/main/java/emu/grasscutter/command/commands/CoopCommand.java b/src/main/java/emu/grasscutter/command/commands/CoopCommand.java index c9597b141..7735a4246 100644 --- a/src/main/java/emu/grasscutter/command/commands/CoopCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/CoopCommand.java @@ -7,8 +7,6 @@ import emu.grasscutter.game.player.Player; import java.util.List; -import static emu.grasscutter.utils.Language.translate; - @Command(label = "coop", usage = {"[]"}, permission = "server.coop", permissionTargeted = "server.coop.others") public final class CoopCommand implements CommandHandler { @@ -17,25 +15,26 @@ public final class CoopCommand implements CommandHandler { Player host = sender; switch (args.size()) { case 0: // Summon target to self - CommandHandler.sendMessage(sender, translate(sender, "commands.coop.usage")); - if (sender == null) // Console doesn't have a self to summon to + if (sender == null) { // Console doesn't have a self to summon to + sendUsageMessage(sender); return; + } break; case 1: // Summon target to argument try { int hostId = Integer.parseInt(args.get(0)); host = Grasscutter.getGameServer().getPlayerByUid(hostId); if (host == null) { - CommandHandler.sendMessage(sender, translate(sender, "commands.execution.player_offline_error")); + CommandHandler.sendTranslatedMessage(sender, "commands.execution.player_offline_error"); return; } break; } catch (NumberFormatException ignored) { - CommandHandler.sendMessage(sender, translate(sender, "commands.generic.invalid.uid")); + CommandHandler.sendTranslatedMessage(sender, "commands.generic.invalid.uid"); return; } default: - CommandHandler.sendMessage(sender, translate(sender, "commands.coop.usage")); + sendUsageMessage(sender); return; } @@ -45,6 +44,6 @@ public final class CoopCommand implements CommandHandler { } host.getServer().getMultiplayerSystem().applyEnterMp(targetPlayer, host.getUid()); targetPlayer.getServer().getMultiplayerSystem().applyEnterMpReply(host, targetPlayer.getUid(), true); - CommandHandler.sendMessage(sender, translate(sender, "commands.coop.success", targetPlayer.getNickname(), host.getNickname())); + CommandHandler.sendTranslatedMessage(sender, "commands.coop.success", targetPlayer.getNickname(), host.getNickname()); } } diff --git a/src/main/java/emu/grasscutter/command/commands/EnterDungeonCommand.java b/src/main/java/emu/grasscutter/command/commands/EnterDungeonCommand.java index 9ce6004d9..5e961a0b7 100644 --- a/src/main/java/emu/grasscutter/command/commands/EnterDungeonCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/EnterDungeonCommand.java @@ -14,7 +14,7 @@ public final class EnterDungeonCommand implements CommandHandler { @Override public void execute(Player sender, Player targetPlayer, List args) { if (args.size() < 1) { - CommandHandler.sendMessage(sender, translate(sender, "commands.enter_dungeon.usage")); + sendUsageMessage(sender); return; } @@ -33,7 +33,7 @@ public final class EnterDungeonCommand implements CommandHandler { CommandHandler.sendMessage(sender, translate(sender, "commands.enter_dungeon.changed", dungeonId)); } } catch (Exception e) { - CommandHandler.sendMessage(sender, translate(sender, "commands.enter_dungeon.usage")); + sendUsageMessage(sender); } } } diff --git a/src/main/java/emu/grasscutter/command/commands/GiveCommand.java b/src/main/java/emu/grasscutter/command/commands/GiveCommand.java index 1c3817121..98ec0c8ee 100644 --- a/src/main/java/emu/grasscutter/command/commands/GiveCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/GiveCommand.java @@ -67,7 +67,7 @@ public final class GiveCommand implements CommandHandler { public GiveAllType giveAllType = GiveAllType.NONE; }; - private static GiveItemParameters parseArgs(Player sender, List args) throws IllegalArgumentException { + private GiveItemParameters parseArgs(Player sender, List args) throws IllegalArgumentException { GiveItemParameters param = new GiveItemParameters(); // Extract any tagged arguments (e.g. "lv90", "x100", "r5") @@ -99,7 +99,7 @@ public final class GiveCommand implements CommandHandler { // At this point, first remaining argument MUST be itemId/avatarId if (args.size() < 1) { - CommandHandler.sendTranslatedMessage(sender, "commands.give.usage"); // Reachable if someone does `/give lv90` or similar + sendUsageMessage(sender); // Reachable if someone does `/give lv90` or similar throw new IllegalArgumentException(); } String id = args.remove(0); @@ -169,7 +169,7 @@ public final class GiveCommand implements CommandHandler { throw e; } } else { - CommandHandler.sendTranslatedMessage(sender, "commands.give.usage"); + sendUsageMessage(sender); throw new IllegalArgumentException(); } } @@ -180,7 +180,7 @@ public final class GiveCommand implements CommandHandler { @Override public void execute(Player sender, Player targetPlayer, List args) { if (args.size() < 1) { // *No args* - CommandHandler.sendTranslatedMessage(sender, "commands.give.usage"); + sendUsageMessage(sender); return; } try { diff --git a/src/main/java/emu/grasscutter/command/commands/HelpCommand.java b/src/main/java/emu/grasscutter/command/commands/HelpCommand.java index c94b64e0c..c405456e7 100644 --- a/src/main/java/emu/grasscutter/command/commands/HelpCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/HelpCommand.java @@ -59,8 +59,9 @@ public final class HelpCommand implements CommandHandler { commands_no_permission.add(createCommand(player, command, args)); } } + CommandHandler.sendTranslatedMessage(player, "commands.help.available_commands"); } else { - String command_str = args.remove(0); + String command_str = args.remove(0).toLowerCase(); CommandHandler command = handlers.get(command_str); if (command == null) { CommandHandler.sendTranslatedMessage(player, "commands.generic.command_exist_error"); diff --git a/src/main/java/emu/grasscutter/command/commands/KillAllCommand.java b/src/main/java/emu/grasscutter/command/commands/KillAllCommand.java index fd00fad41..dbc688868 100644 --- a/src/main/java/emu/grasscutter/command/commands/KillAllCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/KillAllCommand.java @@ -25,7 +25,7 @@ public final class KillAllCommand implements CommandHandler { scene = targetPlayer.getWorld().getSceneById(Integer.parseInt(args.get(0))); break; default: - CommandHandler.sendMessage(sender, translate(sender, "commands.killall.usage")); + sendUsageMessage(sender); return; } } catch (NumberFormatException ignored) { diff --git a/src/main/java/emu/grasscutter/command/commands/KillCharacterCommand.java b/src/main/java/emu/grasscutter/command/commands/KillCharacterCommand.java index 43fa5d1a3..723639414 100644 --- a/src/main/java/emu/grasscutter/command/commands/KillCharacterCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/KillCharacterCommand.java @@ -18,11 +18,6 @@ public final class KillCharacterCommand implements CommandHandler { @Override public void execute(Player sender, Player targetPlayer, List args) { - if (args.isEmpty()) { - CommandHandler.sendMessage(sender, translate(sender, "commands.killCharacter.usage")); - return; - } - EntityAvatar entity = targetPlayer.getTeamManager().getCurrentAvatarEntity(); entity.setFightProperty(FightProperty.FIGHT_PROP_CUR_HP, 0f); // Packets diff --git a/src/main/java/emu/grasscutter/command/commands/PermissionCommand.java b/src/main/java/emu/grasscutter/command/commands/PermissionCommand.java index 93062ab20..4b779fbea 100644 --- a/src/main/java/emu/grasscutter/command/commands/PermissionCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/PermissionCommand.java @@ -17,7 +17,7 @@ public final class PermissionCommand implements CommandHandler { @Override public void execute(Player sender, Player targetPlayer, List args) { if (args.size() != 2) { - CommandHandler.sendMessage(sender, translate(sender, "commands.permission.usage")); + sendUsageMessage(sender); return; } @@ -37,7 +37,7 @@ public final class PermissionCommand implements CommandHandler { switch (action) { default: - CommandHandler.sendMessage(sender, translate(sender, "commands.permission.usage")); + sendUsageMessage(sender); break; case "add": if (account.addPermission(permission)) { diff --git a/src/main/java/emu/grasscutter/command/commands/QuestCommand.java b/src/main/java/emu/grasscutter/command/commands/QuestCommand.java index bb43d65ff..da0359d87 100644 --- a/src/main/java/emu/grasscutter/command/commands/QuestCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/QuestCommand.java @@ -15,7 +15,7 @@ public final class QuestCommand implements CommandHandler { @Override public void execute(Player sender, Player targetPlayer, List args) { if (args.size() != 2) { - CommandHandler.sendMessage(sender, translate(sender, "commands.quest.usage")); + sendUsageMessage(sender); return; } @@ -53,7 +53,7 @@ public final class QuestCommand implements CommandHandler { CommandHandler.sendMessage(sender, translate(sender, "commands.quest.finished", questId)); } default -> { - CommandHandler.sendMessage(sender, translate(sender, "commands.quest.usage")); + sendUsageMessage(sender); } } } diff --git a/src/main/java/emu/grasscutter/command/commands/ResetShopLimitCommand.java b/src/main/java/emu/grasscutter/command/commands/ResetShopLimitCommand.java index 53afc3024..e9053fc35 100644 --- a/src/main/java/emu/grasscutter/command/commands/ResetShopLimitCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/ResetShopLimitCommand.java @@ -14,11 +14,6 @@ public final class ResetShopLimitCommand implements CommandHandler { @Override public void execute(Player sender, Player targetPlayer, List args) { - if (args.isEmpty()) { - CommandHandler.sendMessage(sender, translate(sender, "commands.resetShopLimit.usage")); - return; - } - targetPlayer.getShopLimit().forEach(x -> x.setNextRefreshTime(0)); targetPlayer.save(); CommandHandler.sendMessage(sender, translate(sender, "commands.resetShopLimit.success")); diff --git a/src/main/java/emu/grasscutter/command/commands/SendMailCommand.java b/src/main/java/emu/grasscutter/command/commands/SendMailCommand.java index a85bccdea..e909a53f6 100644 --- a/src/main/java/emu/grasscutter/command/commands/SendMailCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/SendMailCommand.java @@ -43,7 +43,7 @@ public final class SendMailCommand implements CommandHandler { MailBuilder mailBuilder; switch (args.get(0).toLowerCase()) { case "help" -> { - CommandHandler.sendMessage(sender, translate(sender, "commands.sendMail.usage")); + sendUsageMessage(sender); return; } case "all" -> mailBuilder = new MailBuilder(true, new Mail()); @@ -150,7 +150,7 @@ public final class SendMailCommand implements CommandHandler { } break; default: // *No args* - CommandHandler.sendMessage(sender, translate(sender, "commands.give.usage")); + CommandHandler.sendTranslatedMessage(sender, "commands.sendMail.give_usage"); return; } mailBuilder.mail.itemList.add(new Mail.MailItem(item, amount, lvl)); diff --git a/src/main/java/emu/grasscutter/command/commands/SendMessageCommand.java b/src/main/java/emu/grasscutter/command/commands/SendMessageCommand.java index e0f7a7a31..ffc12d338 100644 --- a/src/main/java/emu/grasscutter/command/commands/SendMessageCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/SendMessageCommand.java @@ -8,8 +8,6 @@ import emu.grasscutter.game.player.Player; import java.util.List; -import static emu.grasscutter.utils.Language.translate; - @Command( label = "sendMessage", aliases = {"say", "sendservmsg", "sendservermessage", "b", "broadcast"}, @@ -22,7 +20,7 @@ public final class SendMessageCommand implements CommandHandler { @Override public void execute(Player sender, Player targetPlayer, List args) { if (args.size() == 0) { - CommandHandler.sendMessage(sender, translate(sender, "commands.sendMessage.usage")); + sendUsageMessage(sender); return; } @@ -35,6 +33,6 @@ public final class SendMessageCommand implements CommandHandler { } else { CommandHandler.sendMessage(targetPlayer, message); } - CommandHandler.sendMessage(sender, translate(sender, "commands.sendMessage.success")); + CommandHandler.sendTranslatedMessage(sender, "commands.sendMessage.success"); } } diff --git a/src/main/java/emu/grasscutter/command/commands/SetFetterLevelCommand.java b/src/main/java/emu/grasscutter/command/commands/SetFetterLevelCommand.java index a1ada989d..43b106c9a 100644 --- a/src/main/java/emu/grasscutter/command/commands/SetFetterLevelCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/SetFetterLevelCommand.java @@ -22,7 +22,7 @@ public final class SetFetterLevelCommand implements CommandHandler { @Override public void execute(Player sender, Player targetPlayer, List args) { if (args.size() != 1) { - CommandHandler.sendMessage(sender, translate(sender, "commands.setFetterLevel.usage")); + sendUsageMessage(sender); return; } diff --git a/src/main/java/emu/grasscutter/command/commands/SetPropCommand.java b/src/main/java/emu/grasscutter/command/commands/SetPropCommand.java index f2580dabb..b4e371aea 100644 --- a/src/main/java/emu/grasscutter/command/commands/SetPropCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/SetPropCommand.java @@ -10,7 +10,7 @@ import emu.grasscutter.game.player.Player; import emu.grasscutter.game.props.PlayerProperty; import emu.grasscutter.game.tower.TowerLevelRecord; -@Command(label = "setProp", aliases = {"prop"}, usage = {" "}, permission = "player.setprop", permissionTargeted = "player.setprop.others") +@Command(label = "setProp", aliases = {"prop"}, usage = {" "}, permission = "player.setprop", permissionTargeted = "player.setprop.others") public final class SetPropCommand implements CommandHandler { static enum PseudoProp { NONE, @@ -95,7 +95,7 @@ public final class SetPropCommand implements CommandHandler { @Override public void execute(Player sender, Player targetPlayer, List args) { if (args.size() != 2) { - CommandHandler.sendTranslatedMessage(sender, "commands.setProp.usage"); + sendUsageMessage(sender); return; } String propStr = args.get(0).toLowerCase(); @@ -103,7 +103,7 @@ public final class SetPropCommand implements CommandHandler { int value; if (!props.containsKey(propStr)) { - CommandHandler.sendTranslatedMessage(sender, "commands.setProp.usage"); + sendUsageMessage(sender); return; } try { diff --git a/src/main/java/emu/grasscutter/command/commands/SetStatsCommand.java b/src/main/java/emu/grasscutter/command/commands/SetStatsCommand.java index 760c33cb6..2d3c092bc 100644 --- a/src/main/java/emu/grasscutter/command/commands/SetStatsCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/SetStatsCommand.java @@ -71,7 +71,7 @@ public final class SetStatsCommand implements CommandHandler { statStr = args.get(0).toLowerCase(); valueStr = args.get(1); } else { - CommandHandler.sendTranslatedMessage(sender, "commands.setStats.usage"); + sendUsageMessage(sender); return; } @@ -105,7 +105,7 @@ public final class SetStatsCommand implements CommandHandler { CommandHandler.sendTranslatedMessage(sender, "commands.generic.set_for_to", stat.name, uidStr, valueStr); } } else { - CommandHandler.sendTranslatedMessage(sender, "commands.setStats.usage"); + sendUsageMessage(sender); } return; } diff --git a/src/main/java/emu/grasscutter/command/commands/SpawnCommand.java b/src/main/java/emu/grasscutter/command/commands/SpawnCommand.java index 893c65e25..177581574 100644 --- a/src/main/java/emu/grasscutter/command/commands/SpawnCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/SpawnCommand.java @@ -60,7 +60,7 @@ public final class SpawnCommand implements CommandHandler { } break; default: - CommandHandler.sendMessage(sender, translate(sender, "commands.spawn.usage")); + sendUsageMessage(sender); return; } diff --git a/src/main/java/emu/grasscutter/command/commands/TalentCommand.java b/src/main/java/emu/grasscutter/command/commands/TalentCommand.java index 59ecfee95..56c3a53b3 100644 --- a/src/main/java/emu/grasscutter/command/commands/TalentCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/TalentCommand.java @@ -49,9 +49,7 @@ public final class TalentCommand implements CommandHandler { @Override public void execute(Player sender, Player targetPlayer, List args) { if (args.size() < 1){ - CommandHandler.sendMessage(sender, translate(sender, "commands.talent.usage_1")); - CommandHandler.sendMessage(sender, translate(sender, "commands.talent.usage_2")); - CommandHandler.sendMessage(sender, translate(sender, "commands.talent.usage_3")); + sendUsageMessage(sender); return; } @@ -60,15 +58,13 @@ public final class TalentCommand implements CommandHandler { String cmdSwitch = args.get(0); switch (cmdSwitch) { default -> { - CommandHandler.sendMessage(sender, translate(sender, "commands.talent.usage_1")); - CommandHandler.sendMessage(sender, translate(sender, "commands.talent.usage_2")); - CommandHandler.sendMessage(sender, translate(sender, "commands.talent.usage_3")); + sendUsageMessage(sender); return; } case "set" -> { if (args.size() < 3) { - CommandHandler.sendMessage(sender, translate(sender, "commands.talent.usage_1")); - CommandHandler.sendMessage(sender, translate(sender, "commands.talent.usage_3")); + sendUsageMessage(sender); + sendUsageMessage(sender); return; } try { @@ -82,7 +78,7 @@ public final class TalentCommand implements CommandHandler { } case "n", "e", "q" -> { if (args.size() < 2) { - CommandHandler.sendMessage(sender, translate(sender, "commands.talent.usage_2")); + sendUsageMessage(sender); return; } AvatarSkillDepotData SkillDepot = avatar.getData().getSkillDepot(); diff --git a/src/main/java/emu/grasscutter/command/commands/TeamCommand.java b/src/main/java/emu/grasscutter/command/commands/TeamCommand.java index 58a7ee6f8..f9ec05d86 100644 --- a/src/main/java/emu/grasscutter/command/commands/TeamCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/TeamCommand.java @@ -12,8 +12,6 @@ import static emu.grasscutter.config.Configuration.*; import java.util.ArrayList; import java.util.HashSet; -import static emu.grasscutter.Configuration.*; - @Command( label = "team", usage = {"add ", "(remove|set) [index|first|last|index-index,...]"}, @@ -25,7 +23,7 @@ public final class TeamCommand implements CommandHandler { @Override public void execute(Player sender, Player targetPlayer, List args) { if (args.isEmpty()) { - CommandHandler.sendTranslatedMessage(sender, "commands.team.usage"); + sendUsageMessage(sender); return; } @@ -44,7 +42,7 @@ public final class TeamCommand implements CommandHandler { default: CommandHandler.sendTranslatedMessage(sender, "commands.team.invalid_usage"); - CommandHandler.sendTranslatedMessage(sender, "commands.team.usage"); + sendUsageMessage(sender); return; } @@ -55,7 +53,7 @@ public final class TeamCommand implements CommandHandler { private boolean addCommand(Player sender, Player targetPlayer, List args) { if (args.size() < 2) { CommandHandler.sendTranslatedMessage(sender, "commands.team.invalid_usage"); - CommandHandler.sendTranslatedMessage(sender, "commands.team.add_usage"); + sendUsageMessage(sender); return false; } @@ -80,7 +78,8 @@ public final class TeamCommand implements CommandHandler { for (var avatarId: avatarIds) { int id = Integer.parseInt(avatarId); - var success = addAvatar(sender, targetPlayer, id, index); + if (!addAvatar(sender, targetPlayer, id, index)) + CommandHandler.sendTranslatedMessage(sender, "commands.team.failed_to_add_avatar", avatarId); if (index > 0) ++index; } return true; @@ -89,7 +88,7 @@ public final class TeamCommand implements CommandHandler { private boolean removeCommand(Player sender, Player targetPlayer, List args) { if (args.size() < 2) { CommandHandler.sendTranslatedMessage(sender, "commands.team.invalid_usage"); - CommandHandler.sendTranslatedMessage(sender, "commands.team.remove_usage"); + sendUsageMessage(sender); return false; } @@ -137,7 +136,7 @@ public final class TeamCommand implements CommandHandler { private boolean setCommand(Player sender, Player targetPlayer, List args) { if (args.size() < 3) { CommandHandler.sendTranslatedMessage(sender, "commands.team.invalid_usage"); - CommandHandler.sendTranslatedMessage(sender, "commands.team.set_usage"); + sendUsageMessage(sender); return false; } diff --git a/src/main/java/emu/grasscutter/command/commands/TeleportCommand.java b/src/main/java/emu/grasscutter/command/commands/TeleportCommand.java index a5af9e5d3..e9864c5a4 100644 --- a/src/main/java/emu/grasscutter/command/commands/TeleportCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/TeleportCommand.java @@ -48,7 +48,7 @@ public final class TeleportCommand implements CommandHandler { } break; default: - CommandHandler.sendMessage(sender, translate(sender, "commands.teleport.usage")); + sendUsageMessage(sender); return; } diff --git a/src/main/java/emu/grasscutter/command/commands/WeatherCommand.java b/src/main/java/emu/grasscutter/command/commands/WeatherCommand.java index 19afff0cd..dd85d32ca 100644 --- a/src/main/java/emu/grasscutter/command/commands/WeatherCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/WeatherCommand.java @@ -30,7 +30,7 @@ public final class WeatherCommand implements CommandHandler { weatherId = Integer.parseInt(arg); } catch (NumberFormatException ignored) { CommandHandler.sendTranslatedMessage(sender, "commands.generic.invalid.id"); - CommandHandler.sendTranslatedMessage(sender, "commands.weather.usage"); + sendUsageMessage(sender); return; } } diff --git a/src/main/resources/languages/en-US.json b/src/main/resources/languages/en-US.json index b1e7f0bb2..1815b5139 100644 --- a/src/main/resources/languages/en-US.json +++ b/src/main/resources/languages/en-US.json @@ -115,7 +115,6 @@ "success": "Success" }, "account": { - "command_usage": "Usage: account [UID]", "invalid": "Invalid UID.", "exists": "An account with this username and/or UID already exists.", "create": "Account created with UID %s.", @@ -124,7 +123,6 @@ "description": "Modify user accounts" }, "announce": { - "command_usage": "Usage: announce|a <\"tpl\" templateId|\"refresh\"|\"revoke\" templateId|content>", "send_success": "Send an announcement successfully, you can revoke it by /a revoke %s.", "refresh_success": "Refresh announcement config file successfully. [Total %s]", "revoke_done": "Try to revoke announcement %s.", @@ -132,7 +130,6 @@ "description": "Send announcement to all online players, or manage server's announcement" }, "clear": { - "command_usage": "Usage: clear [lv] [r] [*]", "weapons": "Cleared weapons for %s.", "artifacts": "Cleared artifacts for %s.", "materials": "Cleared materials for %s.", @@ -143,19 +140,16 @@ "description": "Deletes unequipped unlocked items from your inventory. Defaults to 4* level 1 refinement 1 or lower, but can be set higher." }, "coop": { - "usage": "Usage: coop [host UID]", "success": "Summoned %s to %s's world.", "description": "Forces someone to join the world of others. If no one is targeted, it sends you into co-op mode anyway." }, "enter_dungeon": { - "usage": "Usage: enterdungeon ", "changed": "Changed to dungeon %s.", "not_found_error": "Dungeon does not exist.", "in_dungeon_error": "You are already in that dungeon.", "description": "Enter a dungeon" }, "give": { - "usage": "Usage: give [x] [lv] [r]", "usage_relic": "Usage: give [mainPropID] [[,]]... [lv]", "illegal_relic": "This artifactID belongs to a blacklisted range, it may not be the one you wanted.", "given": "Given %s of %s to %s.", @@ -170,7 +164,6 @@ "description": "Heal all characters in your current team." }, "help": { - "usage": "Usage: ", "aliases": "Aliases: ", "available_commands": "Available commands: ", "tip_need_permission": "Permission: ", @@ -185,13 +178,11 @@ "description": "Kicks the specified player from the server (WIP)" }, "killall": { - "usage": "Usage: killall [playerUID] [sceneID]", "scene_not_found_in_player_world": "Scene not found in player world.", "kill_monsters_in_scene": "Killing %s monsters in scene %s.", "description": "Kill all entities" }, "killCharacter": { - "usage": "Usage: killcharacter [playerID]", "success": "Killed %s's current character.", "description": "Kills the players current character" }, @@ -206,7 +197,6 @@ "description": "List online players" }, "permission": { - "usage": "Usage: permission ", "add": "Permission added.", "has_error": "They already have this permission!", "remove": "Permission removed.", @@ -219,7 +209,6 @@ "description": "Get coordinates" }, "quest": { - "usage": "quest [questID]", "added": "Quest %s added.", "finished": "Finished quest %s.", "not_found": "Quest not found.", @@ -237,12 +226,11 @@ "description": "Resets the constellation level on your current active character, you will need to relog after using the command to see any changes" }, "resetShopLimit": { - "usage": "Usage: resetshop ", "success": "Reset complete.", "description": "Reset target player's shop refresh time" }, "sendMail": { - "usage": "Usage: sendmail [templateID]", + "give_usage": "Usage: give [amount] [level] [refinement]", "user_not_exist": "The user with an ID of '%s' does not exist.", "start_composition": "Starting composition of message.\nPlease use '/sendmail ' to continue.\nYou can use '/sendmail stop' at any time.", "templates": "Mail templates coming soon implemented...", @@ -265,27 +253,22 @@ "description": "Sends mail to the specified user. The usage of this command changes based on its composition state" }, "sendMessage": { - "usage": "Usage: sendmessage <message>", "success": "Message sent.", "description": "Sends a message to a player as the server. If used with no target, sends to all players on the server." }, "setFetterLevel": { - "usage": "Usage: setfetterlevel <level>", "range_error": "Fetter level must be between 0 and 10.", "success": "Fetter level set to %s.", "level_error": "Invalid fetter level.", "description": "Sets your fetter level for your current active character" }, "setProp": { - "usage": "Usage: setprop|prop <prop> <value>\n\tValues for <prop>: godmode | nostamina | unlimitedenergy | abyss | worldlevel | bplevel\n\t(cont.) see PlayerProperty enum for other possible values, of form PROP_MAX_SPRING_VOLUME -> max_spring_volume", - "description": "Sets accountwide properties. Things like godmode can be enabled this way, as well as changing things like unlocked abyss floor and battle pass progress." + "description": "Sets accountwide properties. Things like godmode can be enabled this way, as well as changing things like unlocked abyss floor and battle pass progress.\n\tValues for <prop>: godmode | nostamina | unlimitedenergy | abyss | worldlevel | bplevel\n\t(cont.) see PlayerProperty enum for other possible values, of form PROP_MAX_SPRING_VOLUME -> max_spring_volume" }, "setStats": { - "usage": "Usage: setstats|stats <stat> <value>\n\tValues for <stat>: hp | maxhp | def | atk | em | er | crate | cdmg | cdr | heal | heali | shield | defi\n\t(cont.) Elemental DMG Bonus: epyro | ecryo | ehydro | egeo | edendro | eelectro | ephys\n\t(cont.) Elemental RES: respyro | rescryo | reshydro | resgeo | resdendro | reselectro | resphys\n", - "description": "Sets fight property for your current active character" + "description": "Sets fight property for your current active character\n\tValues for <stat>: hp | maxhp | def | atk | em | er | crate | cdmg | cdr | heal | heali | shield | defi\n\t(cont.) Elemental DMG Bonus: epyro | ecryo | ehydro | egeo | edendro | eelectro | ephys\n\t(cont.) Elemental RES: respyro | rescryo | reshydro | resgeo | resdendro | reselectro | resphys" }, "spawn": { - "usage": "Usage: spawn <entityID> [amount] [level(monster only)] [<x> <y> <z>(monster only, optional)]", "success": "Spawned %s of %s.", "limit_reached": "Scene spawn limit reached. Spawning %s entities instead.", "description": "Spawns an entity near you" @@ -295,16 +278,12 @@ "description": "Stops the server" }, "talent": { - "usage_1": "To set talent level: /talent set <talentID> <value>", - "usage_2": "Another way to set talent level: /talent <n or e or q> <value>", - "usage_3": "To get talent ID: /talent getid", "lower_16": "Invalid talent level. Level should be lower than 16.", "set_id": "Set talent to %s.", "set_atk": "Set talent Normal ATK to %s.", "set_e": "Set talent E to %s.", "set_q": "Set talent Q to %s.", "invalid_skill_id": "Invalid skill ID.", - "set_this": "Set this talent to %s.", "invalid_level": "Invalid talent level.", "normal_attack_id": "Normal Attack ID %s.", "e_skill_id": "E skill ID %s.", @@ -312,17 +291,13 @@ "description": "Set talent level for your current active character" }, "team": { - "usage": "Usage: team <add|remove|set> [avatarID,...] [index|first|last|index-index,...]", "invalid_usage": "Invalid usage.", - "add_usage": "Usage (add): team add <avatarID,...> [index]", "invalid_index": "Index is invalid.", "add_too_much": "The server only allows you to have at most %d avatar(s) in your team.", "failed_to_add_avatar": "Failed to add avatar ID %s.", - "remove_usage": "Usage (remove): team remove <index|first|last|index-index,...>", "failed_to_parse_index": "Failed to parse index: %s", "remove_too_much": "You can't remove all your avatars.", "ignore_index": "Ignored index(es): %s", - "set_usage": "Usage (set): team set <index> <avatarID>", "index_out_of_range": "The index you specified is out of range.", "failed_parse_avatar_id": "Failed to parse avatar ID: %s", "avatar_already_in_team": "Avatar is already in team.", @@ -335,29 +310,23 @@ "description": "Teleports all players in your world to your position" }, "teleport": { - "usage_server": "Usage: tp @<playerID> <x> <y> <z> [sceneID]", - "usage": "Usage: tp [@<playerID>] <x> <y> <z> [sceneID]", - "specify_player_id": "You must specify a player ID.", "invalid_position": "Invalid position.", "exists_error": "The specified scene does not exist.", "success": "Teleported %s to %s, %s, %s in scene %s.", "description": "Change the player's position" }, "weather": { - "usage": "Usage: weather [weatherId] [climateType]\nWeather IDs can be found in WeatherExcelConfigData.json.\nClimate types: sunny, cloudy, rain, thunderstorm, snow, mist", "success": "Set weather ID to %s with climate type %s.", "status": "Current weather ID is %s with climate type %s.", "description": "Changes weather ID and climate type. Weather IDs can be found in WeatherExcelConfigData.json.\nClimate types: sunny, cloudy, rain, thunderstorm, snow, mist" }, "ban": { - "command_usage": "Usage: ban <@playerId> [timestamp] [reason]", "success": "Successful.", "failure": "Failed, player not found.", "invalid_time": "Unable to parse timestamp.", "description": "Ban a player" }, "unban": { - "command_usage": "Usage: unban <@playerId>", "success": "Successful.", "failure": "Failed, player not found.", "description": "Unban a player" diff --git a/src/main/resources/languages/es-ES.json b/src/main/resources/languages/es-ES.json index b4c46e714..71aed478e 100644 --- a/src/main/resources/languages/es-ES.json +++ b/src/main/resources/languages/es-ES.json @@ -94,6 +94,7 @@ } }, "execution": { + "usage_prefix": "Uso: ", "player_exist_error": "Jugador no encontrado.", "player_offline_error": "El jugador no está activo.", "item_player_exist_error": "Objeto o UID inválido.", @@ -114,7 +115,6 @@ "success": "Exitoso" }, "account": { - "command_usage": "Uso: account <create|delete> <nombre de usuario> [UID]", "invalid": "UID inválido.", "exists": "Una cuenta con este nombre de usuario y/o UID ya existe.", "create": "Cuenta creada con UID %s.", @@ -123,7 +123,6 @@ "description": "Modifica las cuentas de usuario" }, "announce": { - "command_usage": "🇺🇸Usage: announce|a <\"tpl\" templateId|\"refresh\"|\"revoke\" templateId|content>", "send_success": "🇺🇸Send an announcement successfully, you can revoke it by /a revoke %s.", "refresh_success": "🇺🇸Refresh announcement config file successfully. [Total %s]", "revoke_done": "🇺🇸Try to revoke announcement %s.", @@ -131,7 +130,6 @@ "description": "🇺🇸Send announcement to all online players, or manage server's announcement" }, "clear": { - "command_usage": "Uso: clear <all|wp|art|mat> [lv<max level>] [r<max refinement>] [<max rarity>*]", "weapons": "Eliminadas las armas para %s.", "artifacts": "Eliminados los artefactos para %s.", "materials": "Eliminados los materiales para %s.", @@ -142,19 +140,16 @@ "description": "Elimina objetos desbloqueados no equipados, incluyendo objetos de rareza dorada, de tu inventario" }, "coop": { - "usage": "Uso: coop [UID del host]", "success": "Invocado %s al mundo de %s.", "description": "Fuerza a alguien a ser invocado al mundo de otro. Si no se establece un objetivo, te envía a ti al modo cooperativo." }, "enter_dungeon": { - "usage": "Uso: enterdungeon <dungeonID>", "changed": "Cambiado a la mazmorra %s.", "not_found_error": "La mazmorra no existe.", "in_dungeon_error": "Ya estás en esa mazmorra.", "description": "Te introduce en una mazmorra" }, "give": { - "usage": "Uso: give <itemID|avatarID|\"all\"|\"weapons\"|\"mats\"|\"avatars\"> [x<cantidad>] [lv<nivel>] [r<refinamiento>]", "usage_relic": "Uso: give <artifactID> [mainPropID] [<appendPropID>[,<veces>]]... [lv<nivel 0-20>]", "illegal_relic": "Este artifactID pertenece a un rango de la lista negra, puede que no sea el que buscas.", "given": "Dado %s de %s a %s.", @@ -169,7 +164,6 @@ "description": "Cura a todos los personajes en tu equipo actual." }, "help": { - "usage": "Uso: ", "aliases": "🇺🇸Aliases: ", "available_commands": "Comandos disponibles: ", "tip_need_permission": "🇺🇸Permission: ", @@ -184,13 +178,11 @@ "description": "Echa al jugador específico del servidor (WIP)" }, "killall": { - "usage": "Uso: killall [playerUID] [sceneID]", "scene_not_found_in_player_world": "Escenario no encontrado en el mundo del jugador.", "kill_monsters_in_scene": "Matando %s monstruos en el escenario %s.", "description": "Mata todas las entidades" }, "killCharacter": { - "usage": "Uso: killcharacter [playerID]", "success": "Se ha matado al personaje actual de %s.", "description": "Mata al personaje actual del jugador" }, @@ -205,7 +197,6 @@ "description": "Lista los jugadores activos" }, "permission": { - "usage": "Uso: permission <add|remove> <nombre de usuario> <permiso>", "add": "Permiso añadido.", "has_error": "¡Ya tiene este permiso!", "remove": "Permiso eliminado.", @@ -218,7 +209,6 @@ "description": "Da las coordenadas en el escenario actual" }, "quest": { - "usage": "🇺🇸quest <add|finish> [questID]", "added": "Misión %s añadida.", "finished": "Misión %s finalizada.", "not_found": "Misión no encontrada.", @@ -236,12 +226,11 @@ "description": "Reinicia el nivel de constelación en tu personaje actual, necesitarás iniciar sesión de nuevo para ver los cambios" }, "resetShopLimit": { - "usage": "Uso: resetshop <playerID>", "success": "Reinicio completado.", "description": "Reinicia el tiempo de refrescado de la tienda del jugador objetivo" }, "sendMail": { - "usage": "Uso: sendmail <userID|all|help> [templateID]", + "give_usage": "🇺🇸Usage: give <player> <itemID|itemName> [amount] [level] [refinement]", "user_not_exist": "El usuario con ID '%s' No existe.", "start_composition": "Empezando la construcción del correo.\nPor favor usa '/sendmail <título>' para continuar.\nPuedes usar '/sendmail stop' en cualquier momento.", "templates": "Las plantillas de correos se implementarán pronto...", @@ -264,27 +253,22 @@ "description": "Envía un mensaje al usuario especificado. El uso de este comando cambia con el estado de la construcción del mensaje" }, "sendMessage": { - "usage": "Uso: sendmessage <mensaje>", "success": "Mensaje enviado.", "description": "Envía un mensaje a un jugador como servidor. Si se usa sin un objetivo fijado, lo envía a todos los jugadores del servidor." }, "setFetterLevel": { - "usage": "Uso: setfetterlevel <nivel>", "range_error": "El nivel de amistad debe estar entre 0 y 10.", "success": "Nivel de amistad establecido a %s.", "level_error": "Nivel de amistad inválido.", "description": "Establece tu nivel de amistad para tu personaje actual" }, "setProp": { - "usage": "Uso: setprop|prop <prop> <valor>\n\tValores para <prop>: godmode | nostamina | unlimitedenergy | abyss | worldlevel | bplevel\n\t(cont.) Observa PlayerProperty enum para ver otros posibles valores, de la forma PROP_MAX_SPRING_VOLUME -> max_spring_volume", - "description": "Establece propiedades de la cuenta. Cosas como el modo Dios pueden ser establecidos con este comando, además de cambiar cosas como desbloquear pisos del abusmo o progreso del pase de batalla." + "description": "Establece propiedades de la cuenta. Cosas como el modo Dios pueden ser establecidos con este comando, además de cambiar cosas como desbloquear pisos del abusmo o progreso del pase de batalla.\n\tValores para <prop>: godmode | nostamina | unlimitedenergy | abyss | worldlevel | bplevel\n\t(cont.) Observa PlayerProperty enum para ver otros posibles valores, de la forma PROP_MAX_SPRING_VOLUME -> max_spring_volume" }, "setStats": { - "usage": "Uso: setstats|stats <estado> <valor>\n\tValores para <estado>: hp | maxhp | def | atk | em | er | crate | cdmg | cdr | heal | heali | shield | defi\n\t(cont.) Bonus de daño elemental: epyro | ecryo | ehydro | egeo | edendro | eelectro | ephys\n\t(cont.) Resistencia elemental: respyro | rescryo | reshydro | resgeo | resdendro | reselectro | resphys\n", - "description": "Establece propiedades de combate para tu personaje actual" + "description": "Establece propiedades de combate para tu personaje actual\n\tValores para <estado>: hp | maxhp | def | atk | em | er | crate | cdmg | cdr | heal | heali | shield | defi\n\t(cont.) Bonus de daño elemental: epyro | ecryo | ehydro | egeo | edendro | eelectro | ephys\n\t(cont.) Resistencia elemental: respyro | rescryo | reshydro | resgeo | resdendro | reselectro | resphys" }, "spawn": { - "usage": "Uso: spawn <entityID> [cantidad] [nivel(solo monstruos)] [<x> <y> <z>(solo monstruos, opcional)]", "success": "Generados %s de %s.", "limit_reached": "Se ha alcanzado el límite de generaciones en el escenario. Generando %s entidades en su lugar.", "description": "Genera una entidad cerca de tí" @@ -294,16 +278,12 @@ "description": "Detiene el servidor" }, "talent": { - "usage_1": "Para establecer el nivel de un talento: /talent set <talentID> <valor>", - "usage_2": "Otra forma de establecer el nuvel de un talento: /talent <n o e o q> <valor>", - "usage_3": "Para obtener el ID de un talento: /talent getid", "lower_16": "Nivel de talento inválido. El nivel debe ser menor que 16.", "set_id": "Establecido el talento a %s.", "set_atk": "Establecido el talento del ataque normal a %s.", "set_e": "Establecido el talento E a %s.", "set_q": "Establecido el talento Q a %s.", "invalid_skill_id": "ID de habilidad inválido.", - "set_this": "Establece este talento a %s.", "invalid_level": "Nivel de talento inválido.", "normal_attack_id": "ID del ataque normal %s.", "e_skill_id": "ID de la habilidad E %s.", @@ -311,17 +291,13 @@ "description": "Establece el nivel de un talento para tu personaje actual" }, "team": { - "usage": "Uso: team <add|remove|set> [avatarID,...] [index|first|last|index-index,...]", "invalid_usage": "Uso inválido.", - "add_usage": "Uso (añadir): team add <avatarID,...> [index]", "invalid_index": "Index inválido.", "add_too_much": "El servidor solo permite tener como máximo %d avatar(es) en tu equipo.", "failed_to_add_avatar": "Error al añadir el avatar con ID %s.", - "remove_usage": "Uso (quitar): team remove <index|first|last|index-index,...>", "failed_to_parse_index": "Error al usar el index: %s", "remove_too_much": "No puedes quitar todos tus avatares.", "ignore_index": "index(es) ignorados: %s", - "set_usage": "Uso (estableces): team set <index> <avatarID>", "index_out_of_range": "El index especificado está fuera de rango.", "failed_parse_avatar_id": "Error al usar el ID del avatar: %s", "avatar_already_in_team": "El avatar ya está en el equipo.", @@ -334,29 +310,23 @@ "description": "Teletransporta a todos los jugadores en tu mundo a tu localización" }, "teleport": { - "usage_server": "Uso: tp @<playerID> <x> <y> <z> [sceneID]", - "usage": "Uso: tp [@<playerID>] <x> <y> <z> [sceneID]", - "specify_player_id": "Debes especificar un ID de jugador.", "invalid_position": "Posición inválida.", "exists_error": "El escenario especificado no existe.", "success": "Teletransportado %s a %s, %s, %s en el escenario %s.", "description": "Cambia la posición del jugador" }, "weather": { - "usage": "Uso: weather [weatherId] [tipo de clima]\nLos IDs de climas pueden ser encontrados en WeatherExcelConfigData.json.\nTipos de clima: sunny, cloudy, rain, thunderstorm, snow, mist", "success": "Establece el ID del clima %s con el tipo de clima %s.", "status": "El ID del clima actual es %s con tipo de clima %s.", "description": "Cambia el ID del clima y el tipo de clima. Los IDs de climas pueden ser encontrados en WeatherExcelConfigData.json.\nTipos de clima: sunny, cloudy, rain, thunderstorm, snow, mist" }, "ban": { - "command_usage": "Uso: ban <@playerId> [marca de tiempo] [razón]", "success": "Exitoso.", "failure": "Error, jugador no encontrado.", "invalid_time": "No se puede establecer la marca de tiempo.", "description": "Beta a un jugador" }, "unban": { - "command_usage": "Uso: unban <@playerId>", "success": "Exitoso.", "failure": "Error, jugador no encontrado.", "description": "Elimina el veto a un jugador" diff --git a/src/main/resources/languages/fr-FR.json b/src/main/resources/languages/fr-FR.json index 36eaf6c9b..f3471c20a 100644 --- a/src/main/resources/languages/fr-FR.json +++ b/src/main/resources/languages/fr-FR.json @@ -94,6 +94,7 @@ } }, "execution": { + "usage_prefix": "🇺🇸Usage: ", "player_exist_error": "Joueur introuvable.", "player_offline_error": "Le joueur n'est pas connecté.", "item_player_exist_error": "UID ou objet invalide.", @@ -114,7 +115,6 @@ "success": "Succès" }, "account": { - "command_usage": "Utilisation: account <create|delete> <nom_d'utilisateur> [UID]", "invalid": "UID invalide.", "exists": "Un compte avec ce nom d'utilisateur et/ou UID existe déjà.", "create": "Compte créé avec l'UID %s.", @@ -123,7 +123,6 @@ "description": "Modifie les comptes utilisateurs" }, "announce": { - "command_usage": "🇺🇸Usage: announce|a <\"tpl\" templateId|\"refresh\"|\"revoke\" templateId|content>", "send_success": "🇺🇸Send an announcement successfully, you can revoke it by /a revoke %s.", "refresh_success": "🇺🇸Refresh announcement config file successfully. [Total %s]", "revoke_done": "🇺🇸Try to revoke announcement %s.", @@ -131,7 +130,6 @@ "description": "🇺🇸Send announcement to all online players, or manage server's announcement" }, "clear": { - "command_usage": "🇺🇸Usage: clear <all|wp|art|mat> [lv<max level>] [r<max refinement>] [<max rarity>*]", "weapons": "Les armes de %s ont été supprimés.", "artifacts": "Les artéfacts de %s ont été supprimés.", "materials": "Les matériaux de %s ont été supprimés.", @@ -142,19 +140,16 @@ "description": "Supprime les objets débloqués et non équipés, y compris ceux de rareté 5* de votre inventaire" }, "coop": { - "usage": "Usage: coop [UID de l'hôte]", "success": "%s est apparu dans de monde de %s.", "description": "Force quelqu'un a rejoindre le monde d'un autre. Si personne n'est ciblé, vous envoie quand même en mode multijoueur." }, "enter_dungeon": { - "usage": "🇺🇸Usage: enterdungeon <dungeonID>", "changed": "Entré dans le donjon %s.", "not_found_error": "Le donjon n'existe pas.", "in_dungeon_error": "Vous êtes déjà dans ce donjon.", "description": "Entrer dans un donjon" }, "give": { - "usage": "Usage: give <joueur> <itemID|avatarID> [quantité] [niveau] [raffinement]", "usage_relic": "🇺🇸Usage: give <artifactID> [mainPropID] [<appendPropID>[,<times>]]... [lv<level 0-20>]", "illegal_relic": "🇺🇸This artifactID belongs to a blacklisted range, it may not be the one you wanted.", "given": "🇺🇸Given %s of %s to %s.", @@ -169,7 +164,6 @@ "description": "Soigne tous les personnages de votre équipe" }, "help": { - "usage": "Utilisation: ", "aliases": "Alias: ", "available_commands": "Commandes disponibles: ", "tip_need_permission": "🇺🇸Permission: ", @@ -184,13 +178,11 @@ "description": "Ejecte le joueur spécifié du serveur (WIP)" }, "killall": { - "usage": "🇺🇸Usage: killall [playerUID] [sceneID]", "scene_not_found_in_player_world": "Scène introuvable dans le monde du joueur.", "kill_monsters_in_scene": "Exécution de %s monstres dans la scène %s...", "description": "Tue toutes les entités" }, "killCharacter": { - "usage": "🇺🇸Usage: killcharacter [playerID]", "success": " Le personnage actuel de %s a été tué.", "description": "Tue le personnage actuel du joueur spécifié" }, @@ -205,7 +197,6 @@ "description": "Liste tous les joueurs connectés" }, "permission": { - "usage": "🇺🇸Usage: permission <add|remove> <username> <permission>", "add": "Permission ajoutée.", "has_error": "Cet utilisateur possède déjà cette permission!", "remove": "Permission retirée.", @@ -218,7 +209,6 @@ "description": "Obtenir vos coordonnées" }, "quest": { - "usage": "🇺🇸quest <add|finish> [questID]", "added": "Quête %s ajoutée.", "finished": "Quête terminée : %s.", "not_found": "Quête introuvable.", @@ -236,12 +226,11 @@ "description": "Réinitialise les constellations d'un avatar. Vous devez vous reconnecter pour voir les modifications." }, "resetShopLimit": { - "usage": "🇺🇸Usage: resetshop <playerID>", "success": "Réinitialisation terminée.", "description": "Réinitialise le temps d'actualisation de la boutique du joueur spécifié" }, "sendMail": { - "usage": "🇺🇸Usage: sendmail <userID|all|help> [templateID]", + "give_usage": "Usage: give <joueur> <itemID|avatarID> [quantité] [niveau] [raffinement]", "user_not_exist": "L'utilisateur avec l'identifiant '%s' n'existe pas.", "start_composition": "Démarrage de la composition du message.\nVeuillez utiliser'/sendmail <titre>' pour continuer.\nVous pouvez utiliser '/sendmail stop' à tout moment.", "templates": "Les modèles de lettres ne sont pas encore disponibles.", @@ -264,27 +253,22 @@ "description": "Envoie un courrier à l'utilisateur spécifié. L'utilisation de la commande change en fonction du stade de la composition du message." }, "sendMessage": { - "usage": "Usage: sendmessage <joueur> <message>", "success": "Message envoyé.", "description": "Envoie un message au joueur spécifié en tant que Serveur" }, "setFetterLevel": { - "usage": "🇺🇸Usage: setfetterlevel <level>", "range_error": "Le niveau d'affinité doit être compris entre 0 et 10.", "success": "Niveau d'affinité défini à %s.", "level_error": "Niveau d'affinité invalide.", "description": "Défini le niveau d'affinité de votre personnage actif" }, "setProp": { - "usage": "🇺🇸Usage: setprop|prop <prop> <value>\n\tValues for <prop>: godmode | nostamina | unlimitedenergy | abyss | worldlevel | bplevel\n\t(cont.) see PlayerProperty enum for other possible values, of form PROP_MAX_SPRING_VOLUME -> max_spring_volume", - "description": "Définit des propriétes pour votre compte. Des choses comme le godemode peuvent être activés avec cette commande, et le déblocage de l'abysse ainsi que l'avancement du PB." + "description": "Définit des propriétes pour votre compte. Des choses comme le godemode peuvent être activés avec cette commande, et le déblocage de l'abysse ainsi que l'avancement du PB.\n\tValues for <prop>: godmode | nostamina | unlimitedenergy | abyss | worldlevel | bplevel\n\t(cont.) see PlayerProperty enum for other possible values, of form PROP_MAX_SPRING_VOLUME -> max_spring_volume" }, "setStats": { - "usage": "Usage: setstats|stats <stat> <valeur>\n\tValeurs pour <stat>: hp | maxhp | def | atk | em | er | crate | cdmg | cdr | heal | heali | shield | defi\n\t(cont.) Bonus de dégât élémentaire: epyro | ecryo | ehydro | egeo | edendro | eelectro | ephys\n\t(cont.) Résistance élémentaire: respyro | rescryo | reshydro | resgeo | resdendro | reselectro | resphys\n", - "description": "Définit les propriétés de combat de votre personnage actif" + "description": "Définit les propriétés de combat de votre personnage actif\n\tValeurs pour <stat>: hp | maxhp | def | atk | em | er | crate | cdmg | cdr | heal | heali | shield | defi\n\t(cont.) Bonus de dégât élémentaire: epyro | ecryo | ehydro | egeo | edendro | eelectro | ephys\n\t(cont.) Résistance élémentaire: respyro | rescryo | reshydro | resgeo | resdendro | reselectro | resphys" }, "spawn": { - "usage": "Usage: spawn <entityID> [quantité] [niveau(monstre uniquement)] [<x> <y> <z>(monstre uniquement, optionnel)]", "success": " %s %s sont apparu.", "limit_reached": "La limite d'apparition de la scène est atteinte. Apparition de %s entités à la place.", "description": "Fait apparaitre une entité à proximité" @@ -294,16 +278,12 @@ "description": "Arrête le serveur" }, "talent": { - "usage_1": "Pour définir le niveau du talent: /talent set <talentID> <value>", - "usage_2": "Une autre façon de définir le niveau d'un talent: /talent <n or e or q> <value>", - "usage_3": "Pour obtenir l'ID d'un talent: /talent getid", "lower_16": "Niveau de talent invalide. Le niveau doit être inférieur a 16.", "set_id": "Talent défini à %s.", "set_atk": "Le talent ATK normale a été défini à %s.", "set_e": "Le talent E a été défini a %s.", "set_q": "Le talent A/Q a été défini à %s.", "invalid_skill_id": "ID de talent invalide.", - "set_this": "Ce talent a été défini a %s.", "invalid_level": "Niveau de talent invalide.", "normal_attack_id": "ID de l'attaque normale ID %s.", "e_skill_id": "ID du E %s.", @@ -311,17 +291,13 @@ "description": "Définit le niveau du talent du personnage actif" }, "team": { - "usage": "🇺🇸Usage: team <add|remove|set> [avatarID,...] [index|first|last|index-index,...]", "invalid_usage": "Utilisation invalide.", - "add_usage": "Utilisation (add): team add <avatarID,...> [index]", "invalid_index": "Index invalide.", "add_too_much": "Ce serveur autorise à avoir au maximum %d avatar(s) dans votre équipe.", "failed_to_add_avatar": "Echec de l'ajout de l'avatar a l'ID %s dans votre équipe.", - "remove_usage": "Utilisation (remove): team remove <index|first|last|index-index,...>", "failed_to_parse_index": "Echec de l'analyse de l'index index: %s", "remove_too_much": "Vous ne pouvez pas retirer tous les avatars.", "ignore_index": "Index(s) ignorés : %s", - "set_usage": "Utilisation : (set): team set <index> <avatarID>", "index_out_of_range": "L'index spécifié est en dehors du champ.", "failed_parse_avatar_id": "Echec de l'analyse de l'ID de l'avatar: %s", "avatar_already_in_team": "L'avatar est déjà dans votre équipe.", @@ -334,29 +310,23 @@ "description": "Téléporte tous les joueurs de votre monde sur votre position" }, "teleport": { - "usage_server": "Utilisation: tp @<playerID> <x> <y> <z> [sceneID]", - "usage": "Utilisation: tp [@<playerID>] <x> <y> <z> [sceneID]", - "specify_player_id": "Vous devez spécifier un ID d'utilisateur.", "invalid_position": "Position invalide.", "exists_error": "La scène spécifié n'existe pas.", "success": "%s a été téléporté à %s, %s, %s dans la scène %s.", "description": "Change la position du joueur" }, "weather": { - "usage": "Utilisation: weather [weatherId] [climateType]\nLes ID de la météo peuvent être trouvés dans WeatherExcelConfigData.json.\nClimate types: sunny, cloudy, rain, thunderstorm, snow, mist.", "success": "L'ID de la météo à été défini a %s avec le type de climat %s.", "status": "L'ID de la météo accutel est %s avec le type de climat %s.", "description": "Change la météo. Les ID de la météo peuvent être trouvés dans WeatherExcelConfigData.json.\nTypes de climatss: sunny, cloudy, rain, thunderstorm, snow, mist." }, "ban": { - "command_usage": "Usage: ban <@playerId> [timestamp] [raison]", "success": "Succès.", "failure": "Échec, joueur introuvable.", "invalid_time": "Impossible d'analyser le timestamp.", "description": "Bannis un joueur" }, "unban": { - "command_usage": "🇺🇸Usage: unban <@playerId>", "success": "Succès.", "failure": "Échec, joueur introuvable.", "description": "Retire le bannissement d'un joueur" diff --git a/src/main/resources/languages/pl-PL.json b/src/main/resources/languages/pl-PL.json index 0aed901f7..99949c0f7 100644 --- a/src/main/resources/languages/pl-PL.json +++ b/src/main/resources/languages/pl-PL.json @@ -94,6 +94,7 @@ } }, "execution": { + "usage_prefix": "Użycie: ", "player_exist_error": "Gracz nie istnieje.", "player_offline_error": "Gracz nie jest online.", "item_player_exist_error": "Błędny przedmiot lub ID.", @@ -114,7 +115,6 @@ "success": "Sukces" }, "account": { - "command_usage": "🇺🇸Usage: account <create|delete> <username> [UID]", "invalid": "Błędne UID gracza.", "exists": "Konto o tej nazwie użytkownika i/lub UID już istnieje.", "create": "Stworzono konto z UID %s.", @@ -123,7 +123,6 @@ "description": "Twórz lub usuń konta." }, "announce": { - "command_usage": "🇺🇸Usage: announce|a <\"tpl\" templateId|\"refresh\"|\"revoke\" templateId|content>", "send_success": "Ogłoszenie zostało pomyślnie wysłane. Możesz je odwołać używając \"announce revoke %s\".", "refresh_success": "Odświeżono konfigurację ogłoszeń (w sumie jest ich %s).", "revoke_done": "Pomyślnie odwołano ogłoszenie %s.", @@ -131,7 +130,6 @@ "description": "Wysyłaj i zarządzaj ogłoszeniami." }, "clear": { - "command_usage": "🇺🇸Usage: clear <all|wp|art|mat> [lv<max level>] [r<max refinement>] [<max rarity>*]", "weapons": "Usunięto bronie gracza %s.", "artifacts": "Usunięto artefakty gracza %s.", "materials": "Usunięto materiały gracza %s.", @@ -142,19 +140,16 @@ "description": "Usuń niewyposażone przedmioty wskazanego gracza." }, "coop": { - "usage": "coop @[ID gracza]", "success": "Pomyślnie dodano gracza %s do świata gracza %s.", "description": "Dodaj wskazanego gracza do swojego świata." }, "enter_dungeon": { - "usage": "enterdungeon <ID lochu>", "changed": "Pomyślnie zmieniono loch na %s.", "not_found_error": "Podane ID lochu jest nieprawidłowe.", "in_dungeon_error": "Wskazany gracz już jest w tym lochu.", "description": "Zmień loch, w którym ma się znajdować wskazany gracz." }, "give": { - "usage": "give <ID przedmiotu|ID awataru|all|weapons|mats|avatars> [x<ilość>] [lv<poziom>] [r<poziom ulepszenia>]", "usage_relic": "give <ID reliktu> [ID pierwszego przedmiotu] [<ID drugiego przedmiotu>[, <ile razy je połączyć>]]... [lv<poziom od 0 do 20>]", "illegal_relic": "Ten ID reliktu znajduje się na czarnej liście i może być nie tym, czego szukasz.", "given": "Dodano %s przedmiotów o ID %s graczowi o ID %s.", @@ -169,7 +164,6 @@ "description": "Ulecz wszystkie postacie w swoim zespole." }, "help": { - "usage": "help [nazwa komendy]", "aliases": "Aliasy: ", "available_commands": "Dostępne komendy: ", "tip_need_permission": "Wymagane uprawnienie: ", @@ -184,13 +178,11 @@ "description": "Wyrzuć wskazanego gracza z gry." }, "killall": { - "usage": "killall @[ID gracza] [ID sceny]", "scene_not_found_in_player_world": "Błędny ID sceny.", "kill_monsters_in_scene": "Zabito %s potworów w scenie %s.", "description": "Zabij wszystkie potwory we wskazanej scenie." }, "killCharacter": { - "usage": "killcharacter @[ID gracza]", "success": "Pomyślnie zabito postać gracza %s.", "description": "Zabij postać wskazanego gracza." }, @@ -205,7 +197,6 @@ "description": "Pokaż ile jest graczy na serwerze." }, "permission": { - "usage": "permission <add|remove> <nazwa gracza> <uprawnienie>", "add": "Pomyślnie dodano uprawnienie.", "has_error": "Ten gracz już ma to uprawnienie.", "remove": "Pomyślnie usunięto uprawnienie.", @@ -218,7 +209,6 @@ "description": "Pokaż gdzie znajduje się dany gracz." }, "quest": { - "usage": "quest <add|finish> [ID zadania]", "added": "Zadanie %s zostało dodane.", "finished": "Zadanie %s zostało zakończone.", "not_found": "Nie ma zadania o podanym ID.", @@ -236,12 +226,11 @@ "description": "Resetuj konstelacje wszystkich lub wybranej postaci." }, "resetShopLimit": { - "usage": "resetshop @<ID gracza>", "success": "Zresetowano czas odświeżania sklepu podanego gracza.", "description": "Resetuj czas odświeżania sklepu podanego gracza." }, "sendMail": { - "usage": "sendmail <@<ID gracza>|all|help> [ID szablonu]", + "give_usage": "Użycie: give <gracz> <id przedmiotu | avatarID> [ilość] [poziom] [refinement]", "user_not_exist": "Gracz o podanym ID %s nie istnieje.", "start_composition": "Tworzenie wiadomości.\nUżyj \"sendmail <tytuł>\", aby kontynuować.\nMożesz użyć \"sendmail stop\" w dowolnym momencie, aby przestać.", "templates": "Szablony nie są jeszcze gotowe do użycia.", @@ -264,27 +253,22 @@ "description": "Wyślij wiadomość wraz z przedmiotami do wybranego lub wszystkich graczy." }, "sendMessage": { - "usage": "sendmessage @<ID gracza> <wiadomość>", "success": "Wiadomość wysłana.", "description": "Wyślij wiadomość do gracza jako serwer. Jeśli nie określono celu, wysyła do wszystkich graczy na serwerze." }, "setFetterLevel": { - "usage": "setfetterlevel <poziom przyjaźni>", "range_error": "Poziom przyjaźni musi być pomiędzy 0 a 10.", "success": "Poziom przyjaźni został pomyślnie ustawiony na %s.", "level_error": "Błędny poziom przyjaźni.", "description": "Ustaw poziom przyjaźni obecnej postaci." }, "setProp": { - "usage": "setprop <nazwa własności> <wartość>\n\tMożliwe nazwy własności: godmode | nostamina | unlimitedenergy | abyss | worldlevel | bplevel | ...\n\tTa komenda ma więcej nazw własności, które może otrzymać. Możesz je wszystkie zobaczyć w pliku \"game/props/PlayerProperty.java\".\n\tW tym pliku, przyjmują one formę \"PROP_XXX_YYY_ZZZ\", ale powinieneś je zapisywać jako \"xxx_yyy_zzz\" jeśli chcesz je użyć w tej komendzie.", - "description": "Ustaw pewne własności konta, takie jak tryb nieśmiertelności (godmode) czy też zmiana postępu Battle Pass." + "description": "Ustaw pewne własności konta, takie jak tryb nieśmiertelności (godmode) czy też zmiana postępu Battle Pass.\n\tMożliwe nazwy własności: godmode | nostamina | unlimitedenergy | abyss | worldlevel | bplevel | ...\n\tTa komenda ma więcej nazw własności, które może otrzymać. Możesz je wszystkie zobaczyć w pliku \"game/props/PlayerProperty.java\".\n\tW tym pliku, przyjmują one formę \"PROP_XXX_YYY_ZZZ\", ale powinieneś je zapisywać jako \"xxx_yyy_zzz\" jeśli chcesz je użyć w tej komendzie." }, "setStats": { - "usage": "setstats <nazwa statystyki> <wartość>\n\tMożliwe nazwy statystyki: hp | maxhp | def | atk | em | er | crate | cdmg | cdr | heal | heali | shield | defi\n\tDodatkowe obrażenia od żywiołu: epyro | ecryo | ehydro | egeo | edendro | eelectro | ephys\n\tOdporność na żywioł: respyro | rescryo | reshydro | resgeo | resdendro | reselectro | resphys", - "description": "Ustaw statystykę walki dla obecnie wybranej postaci wybranego gracza." + "description": "Ustaw statystykę walki dla obecnie wybranej postaci wybranego gracza.\n\tMożliwe nazwy statystyki: hp | maxhp | def | atk | em | er | crate | cdmg | cdr | heal | heali | shield | defi\n\tDodatkowe obrażenia od żywiołu: epyro | ecryo | ehydro | egeo | edendro | eelectro | ephys\n\tOdporność na żywioł: respyro | rescryo | reshydro | resgeo | resdendro | reselectro | resphys" }, "spawn": { - "usage": "spawn <ID obiektu> [ilość] [poziom (tylko potwory)] [<x> <y> <z> (tylko potwory)]", "success": "Stworzono %s obiektów o ID %s.", "limit_reached": "Osiągnięto maksymalną ilość obiektów w scenie. Dodane zostaną tylko %s.", "description": "Dodaj wskazane obiekty do sceny wybranego gracza." @@ -294,16 +278,12 @@ "description": "Zatrzymaj serwer." }, "talent": { - "usage_1": "Aby ustawić poziom talentu, użyj: \"talent set <ID talentu> <wartość>\".", - "usage_2": "Możesz też użyć: \"talent <n lub e lub q> <wartość>\"", - "usage_3": "Aby uzyskać ID talentu, użyj: \"talent getid\"", "lower_16": "Błędny poziom talentu. Poziom ten powinien być mniejszy niż 16.", "set_id": "Ustawiono poziom talentu na %s.", "set_atk": "Ustawiono poziom talentu Atak Podstawowy na %s.", "set_e": "Ustawiono poziom talentu E na %s.", "set_q": "Ustawiono poziom talentu Q na %s.", "invalid_skill_id": "Błędne ID umiejętności.", - "set_this": "Ustawiono obecny talent na poziom %s.", "invalid_level": "Błędny poziom talentu.", "normal_attack_id": "ID podstawowego ataku: %s.", "e_skill_id": "ID umiejętności E: %s.", @@ -311,17 +291,13 @@ "description": "Ustaw poziomu talentu obecnie wybranej postaci wybranego gracza." }, "team": { - "usage": "team <add|remove|set> [ID awatara, ...] [indeks|pierwszy|ostatni|pierwszy_indeks-ostatni_indeks, ...]", "invalid_usage": "Nieprawidłowe użycie komendy.", - "add_usage": "team add <ID awatara, ...> [indeks]", "invalid_index": "Błędny indeks.", "add_too_much": "Można mieć maksymalnie %d postaci w zespole.", "failed_to_add_avatar": "Błąd podczas dodawania awatara o ID \"%s\".", - "remove_usage": "team remove <indeks|pierwszy|ostatni|pierwszy_indeks-ostatni_indeks, ...>", "failed_to_parse_index": "Błąd podczas przetwarzania indeksu \"%s\".", "remove_too_much": "Nie możesz usunąć wszystkich awatarów w zespole.", "ignore_index": "Ignorowanie indeksu/ów %s.", - "set_usage": "team set <indeks> <ID awatara>", "index_out_of_range": "Podany indeks nie mieści się w swoim zakresie.", "failed_parse_avatar_id": "Błędny ID awatara \"%s\".", "avatar_already_in_team": "Podany awatar jest już w zespole wybranego gracza.", @@ -334,29 +310,23 @@ "description": "Przyzwij wszystkich graczy do wybranego gracza." }, "teleport": { - "usage_server": "tp @<ID gracza> <x> <y> <z> [ID sceny]", - "usage": "tp [@<ID gracza>] <x> <y> <z> [ID sceny]", - "specify_player_id": "Musisz podać ID gracza.", "invalid_position": "Błędna pozycja xyz.", "exists_error": "Ta scena nie istenieje.", "success": "Gracz %s został przeniesiony do pozycji (%s, %s, %s) w scenie o ID %s.", "description": "Przemieść wybranego gracza do podanej pozycji w podanej scenie." }, "weather": { - "usage": "weather [ID pogody] [typ klimatu]\n\tID pogody można znaleźć w pliku \"WeatherExcelConfigData.json\".\n\tMożliwe typy klimatu: sunny (słoneczny), cloudy (pochmurny), rain (deszcz), thunderstorm (burza), snow (śnieg), mist (mgła)", "success": "ID pogody został ustawiony na %s, a typ klimatu na %s.", "status": "Bieżące ID pogody to %s, a typ klimatu to %s.", "description": "Zmień ID pogody i typ klimatu." }, "ban": { - "command_usage": "🇺🇸Usage: ban <@playerId> [timestamp] [reason]", "success": "Pomyślnie zbanowano podanego gracza.", "failure": "Gracz o podanym ID nie istnieje.", "invalid_time": "Nieprawidłowy czas bana.", "description": "Zbanuj podanego gracza." }, "unban": { - "command_usage": "🇺🇸Usage: unban <@playerId>", "success": "Pomyślnie odbanowano podanego gracza.", "failure": "Gracz o podanym ID nie istnieje.", "description": "Odbanuj podanego gracza." diff --git a/src/main/resources/languages/ro-RO.json b/src/main/resources/languages/ro-RO.json index 11dff3379..9bcff519e 100644 --- a/src/main/resources/languages/ro-RO.json +++ b/src/main/resources/languages/ro-RO.json @@ -94,6 +94,7 @@ } }, "execution": { + "usage_prefix": "Utilizare: ", "player_exist_error": "Jucătorul nu a fost găsit.", "player_offline_error": "Jucătorul nu este online.", "item_player_exist_error": "Articol sau UID nevalabil.", @@ -114,7 +115,6 @@ "success": "Succes" }, "account": { - "command_usage": "Utilizare: account <create|delete> <nume de utilizator> [UID]", "invalid": "UID invalid.", "exists": "Un cont cu acest nume de utilizator și/sau UID există deja.", "create": "Cont creat cu UID %s.", @@ -123,7 +123,6 @@ "description": "Modificați conturile de utilizator" }, "announce": { - "command_usage": "🇺🇸Usage: announce|a <\"tpl\" templateId|\"refresh\"|\"revoke\" templateId|content>", "send_success": "🇺🇸Send an announcement successfully, you can revoke it by /a revoke %s.", "refresh_success": "🇺🇸Refresh announcement config file successfully. [Total %s]", "revoke_done": "🇺🇸Try to revoke announcement %s.", @@ -131,7 +130,6 @@ "description": "🇺🇸Send announcement to all online players, or manage server's announcement" }, "clear": { - "command_usage": "Utilizare: clear <all|wp|art|mat> [lv<max level>] [r<max refinement>] [<max rarity>*]", "weapons": "Arme șterse pentru %s.", "artifacts": "Artefacte șterse pentru %s.", "materials": "Materiale șterse pentru %s.", @@ -142,19 +140,16 @@ "description": "Șterge obiectele deblocate neechipate, inlusiv cele cu raritate galbenă din inventarul tău." }, "coop": { - "usage": "Utilizare: coop [host UID]", "success": "Invocat %s în lumea lui %s.", "description": "Forțează pe cineva să se alăture lumii celorlalți. Dacă nu este nimeni vizat, te trimite oricum în modul cooperativ." }, "enter_dungeon": { - "usage": "Utilizare: enterdungeon <dungeonID>", "changed": "Schimbat în temnița %s.", "not_found_error": "Temnița nu există.", "in_dungeon_error": "Ești deja în acea temniță.", "description": "Intră într-o temniță." }, "give": { - "usage": "Utilizare: give <itemID|avatarID|\"all\"|\"weapons\"|\"mats\"|\"avatars\"> [x<sumă>] [lv<nivel>] [r<rafinament>]", "usage_relic": "Utilizare: give <artifactID> [mainPropID] [<appendPropID>[,<t>]]... [lv<nivel 0-20>]", "illegal_relic": "Acest ID de artefact aparține unui interval de pe lista neagră, este posibil să nu fie cel pe care l-ați dorit.", "given": "Am dat %s din %s lui %s.", @@ -169,7 +164,6 @@ "description": "Vindecă toate personajele din echipa ta." }, "help": { - "usage": "Utilizare: ", "aliases": "Aliasuri: ", "available_commands": "Comenzi disponibile: ", "tip_need_permission": "Permisiune: ", @@ -184,13 +178,11 @@ "description": "Elimină jucătorul specificat de pe server (WIP)" }, "killall": { - "usage": "Utilizare: killall [playerUID] [sceneID]", "scene_not_found_in_player_world": "Scena nu a fost găsită în lumea jucătorului.", "kill_monsters_in_scene": "Se omoară %s monștri în scena %s.", "description": "Se omoară toate entitățile." }, "killCharacter": { - "usage": "Utilizare: killcharacter [playerID]", "success": "Personajul curent al lui %s a fost omorât.", "description": "Omoară personajul curent al jucătorului." }, @@ -205,7 +197,6 @@ "description": "Enumeră jucătorii online." }, "permission": { - "usage": "Utilizare: permission <add|remove> <username> <permission>", "add": "Permisiune adăugată.", "has_error": "Ei au deja această permisiune!", "remove": "Permisiune revocată.", @@ -218,7 +209,6 @@ "description": "Obțineți coordonatele" }, "quest": { - "usage": "🇺🇸quest <add|finish> [questID]", "added": "Misiunea %s adăugată.", "finished": "Ați terminat misiunea %s.", "not_found": "Misiunea nu a fost găsită.", @@ -236,12 +226,11 @@ "description": "Resetează nivelul de constelație al personajului tău activ curent; va trebui să te reconectezi după ce ai folosit comanda pentru a vedea orice schimbare." }, "resetShopLimit": { - "usage": "Utilizare: resetshop <playerID>", "success": "Reset complet.", "description": "Resetează timpul de reîmprospătare a magazinului jucătorului țintă." }, "sendMail": { - "usage": "Utilizare: sendmail <userID|all|help> [templateID]", + "give_usage": "🇺🇸Usage: give <player> <itemID|itemName> [amount] [level] [refinement]", "user_not_exist": "Utilizatorul cu id-ul '%s' nu există.", "start_composition": "Alcătuirea inițială a mesajului.\nFolosește '/sendmail <title>' ca să continui.\nPoți folosi '/sendmail stop' oricând vrei.", "templates": "Șabloanele de e-mail vor fi implementate în curând...", @@ -264,27 +253,22 @@ "description": "Trimite corespondența către utilizatorul specificat. Utilizarea acestei comenzi se modifică în funcție de starea de compunere a acesteia." }, "sendMessage": { - "usage": "Utilizare: sendmessage <mesaj>", "success": "Mesaj trimis.", "description": "Trimite un mesaj unui jucător în calitate de server. Dacă este utilizat fără țintă, trimite mesajul către toți jucătorii de pe server." }, "setFetterLevel": { - "usage": "Utilizare: setfetterlevel <nivel>", "range_error": "Nivelul Fetter trebuie să fie între 0 și 10.", "success": "Nivelul Fetter setat ca %s.", "level_error": "Nivel Fetter nevalabil.", "description": "Stabilește nivelul Fetter pentru personajul tău activ curent." }, "setProp": { - "usage": "Utilizare: setprop|prop <prop> <value>\n\tValori pentru <prop>: godmode | nostamina | unlimitedenergy | abyss | worldlevel | bplevel\n\t(cont.) see PlayerProperty enum for other possible values, of form PROP_MAX_SPRING_VOLUME -> max_spring_volume", - "description": "Stabilește proprietățile la nivel de cont. Lucruri precum godmode pot fi activate în acest fel, precum și schimbarea unor lucuri precum etajul abisului deblocat și progresul battle pass." + "description": "Stabilește proprietățile la nivel de cont. Lucruri precum godmode pot fi activate în acest fel, precum și schimbarea unor lucuri precum etajul abisului deblocat și progresul battle pass.\n\tValori pentru <prop>: godmode | nostamina | unlimitedenergy | abyss | worldlevel | bplevel\n\t(cont.) see PlayerProperty enum for other possible values, of form PROP_MAX_SPRING_VOLUME -> max_spring_volume" }, "setStats": { - "usage": "Utilizare: setstats|stats <stat> <value>\n\tValori pentru <stat>: hp | maxhp | def | atk | em | er | crate | cdmg | cdr | heal | heali | shield | defi\n\t(cont.) Elemental DMG Bonus: epyro | ecryo | ehydro | egeo | edendro | eelectro | ephys\n\t(cont.) Elemental RES: respyro | rescryo | reshydro | resgeo | resdendro | reselectro | resphys\n", - "description": "Stabilește proprietatea de luptă pentru caracterul activ curent." + "description": "Stabilește proprietatea de luptă pentru caracterul activ curent.\n\tValori pentru <stat>: hp | maxhp | def | atk | em | er | crate | cdmg | cdr | heal | heali | shield | defi\n\t(cont.) Elemental DMG Bonus: epyro | ecryo | ehydro | egeo | edendro | eelectro | ephys\n\t(cont.) Elemental RES: respyro | rescryo | reshydro | resgeo | resdendro | reselectro | resphys" }, "spawn": { - "usage": "Utilizare: spawn <entityID> [sumă] [nivel(doar monstrul)] [<x> <y> <z>(doar monstrul, opțional)]", "success": "A generat %s de %s.", "limit_reached": "Limita de reproducere a scenei a fost atinsă. În schimb, se generează %s de entități.", "description": "Generează o entitate lângă tine" @@ -294,16 +278,12 @@ "description": "Oprește serverul" }, "talent": { - "usage_1": "Pentru a seta nivelul de talent: /talent set <talentID> <sumă>", - "usage_2": "O altă modalitate de a stabili nivelul de talent: /talent <n or e or q> <valoare>", - "usage_3": "Pentru a lua ID-ul talentului: /talent getid", "lower_16": "Nivel de talent nevalabil. Nivelul trebuie să fie mai mic ca 16.", "set_id": "Setat nivelul ca %s.", "set_atk": "Setat talentul Normal Attack ca %s.", "set_e": "Setat talentul E ca %s.", "set_q": "Setat talentul Q ca %s.", "invalid_skill_id": "Skill ID nevalabil.", - "set_this": "Setat acest talent ca %s.", "invalid_level": "Nivel de talent nevalabil.", "normal_attack_id": "🇺🇸Normal Attack ID %s.", "e_skill_id": "🇺🇸E skill ID %s.", @@ -311,17 +291,13 @@ "description": "Stabilește nivelul de talent pentru personajul tău activ actual" }, "team": { - "usage": "Utilizare: team <add|remove|set> [avatarID,...] [index|first|last|index-index,...]", "invalid_usage": "Utilizare invalidă.", - "add_usage": "Utilizare (adaugă): team add <avatarID,...> [index]", "invalid_index": "Indexul nu e valabil.", "add_too_much": "Serverul vă permite doar să aveți cel mult %s avatar(e) în echipa dvs.", "failed_to_add_avatar": "Nu s-a reușit adăugarea ID-ului avatarului %s.", - "remove_usage": "Utilizare (eliminare): team remove <index|first|last|index-index,...>", "failed_to_parse_index": "Nu a reușit să analizeze indexul: %s", "remove_too_much": "Nu poți elimina toate avatarele tale.", "ignore_index": "Index(e) ignorat(e): %s", - "set_usage": "Utilizare (stabilire): team set <index> <avatarID>", "index_out_of_range": "Indexul specificat este în afara intervalului.", "failed_parse_avatar_id": "Nu a reușit să analizeze id-ul avatarului: %s", "avatar_already_in_team": "Avatarul este deja în echipă.", @@ -334,29 +310,23 @@ "description": "Teleportează toți jucătorii din lume în locația ta." }, "teleport": { - "usage_server": "Utilizare: tp @<playerID> <x> <y> <z> [sceneID]", - "usage": "Utilizare: tp [@<playerID>] <x> <y> <z> [sceneID]", - "specify_player_id": "Trebuie să specificați un ID de jucător.", "invalid_position": "Locație invalidă.", "exists_error": "Scena specificată nu există.", "success": "Teleportat %s la %s, %s, %s în scena %s.", "description": "Schimbă poziția jucătorului." }, "weather": { - "usage": "Utilizare: weather [weatherId] [climateType]\nID-urile meteorologice pot fi găsite în WeatherExcelConfigData.json.\nTipuri de climă: sunny, cloudy, rain, thunderstorm, snow, mist", "success": "A setat ID-ul meteo la %s cu tipul de climă %s", "status": "ID-ul actual al vremii este %s cu tipul de climă %s", "description": "Schimbă ID-ul vremii și tipul de climă. ID-urile de vreme pot fi găsite în WeatherExcelConfigData.json.\nTipuri de climă: sunny, cloudy, rain, thunderstorm, snow, mist" }, "ban": { - "command_usage": "Utilizare: ban <@playerId> [durată] [motiv]", "success": "Succes.", "failure": "Eșec. Jucătorul nu a fost găsit.", "invalid_time": "Imposibil de analizat durata.", "description": "Interziceți un jucător" }, "unban": { - "command_usage": "Utilizare: unban <@playerId>", "success": "Succes.", "failure": "Eșec, jucătorul nu a fost găsit.", "description": "Dezbancarea unui jucător" diff --git a/src/main/resources/languages/ru-RU.json b/src/main/resources/languages/ru-RU.json index 667723308..9cd67ac49 100644 --- a/src/main/resources/languages/ru-RU.json +++ b/src/main/resources/languages/ru-RU.json @@ -94,6 +94,7 @@ } }, "execution": { + "usage_prefix": "Применение: ", "player_exist_error": "Игрок не найден.", "player_offline_error": "Игрок не в сети.", "item_player_exist_error": "Некорректный предмет или UID.", @@ -114,7 +115,6 @@ "success": "Успех" }, "account": { - "command_usage": "Применение: account <create|delete> <имя_пользователя> [UID]", "invalid": "Некорректный UID.", "exists": "Аккаунт с таким именем пользователя и/или UID уже существует.", "create": "Аккаунт с UID %s был создан.", @@ -123,7 +123,6 @@ "description": "Вносит изменения в аккаунты пользователей" }, "announce": { - "command_usage": "Применение: announce|a <\"tpl\" templateId|\"refresh\"|\"revoke\" templateId|content>", "send_success": "Объявление было отправлено успешно, вы можете отзвать его с помощью команды /a revoke %s.", "refresh_success": "Конфигурационный файл объявления был успешно обновлён. [Всего %s]", "revoke_done": "Пытаемся отозвать объявление %s.", @@ -131,7 +130,6 @@ "description": "Показывает объявление всем игрокам в сети и позволяет управлять серверными объявлениями" }, "clear": { - "command_usage": "Применение: clear <all|wp|art|mat> [lv<макс_уровень>] [r<макс_пробуждение>] [<макс_редкость>*]", "weapons": "Удалены оружия у %s.", "artifacts": "Удалены артефакты у %s.", "materials": "Удалены материалы у %s.", @@ -142,19 +140,16 @@ "description": "Удаляет все доступные неэкипированные предметы из вашего инвентаря. По умолчанию удаляет 4* предметы 1-го уровня предмета 1-го ранга пробуждения и ниже, однако, возможно задать более высокие параметры." }, "coop": { - "usage": "Применение: coop [UID_хоста]", "success": "Игрок %s был призван в мир %s.", "description": "Принудительно присоединяет к мирам других людей. Если цель не была выбрана, то отправляет в совместный режим." }, "enter_dungeon": { - "usage": "Применение: enterdungeon <ID_подземелья>", "changed": "Произошёл переход в подземелье %s.", "not_found_error": "Подземелье не существует.", "in_dungeon_error": "Вы уже в этом подземелье.", "description": "Позволяет войти в подземелье" }, "give": { - "usage": "Применение: give <ID_предмета|ID_персонажа|\"all\"|\"weapons\"|\"mats\"|\"avatars\"> [x<кол-во>] [lv<уровень>] [r<пробуждение>]", "usage_relic": "Применение: give <ID_артефакта> [ID_глав_хар-ки] [<ID доп_хар-ки>[,<раз>]]... [lv<уровень 0-20>]", "illegal_relic": "Данный ID_артефакта находится в черном списке. Возможно, это не то, что вы хотите получить.", "given": "Выдано %s %s игроку %s.", @@ -169,7 +164,6 @@ "description": "Лечит всех персонажей в вашей команде." }, "help": { - "usage": "Применение: ", "aliases": "Альтернативные названия: ", "available_commands": "Доступные команды: ", "tip_need_permission": "Разрешения: ", @@ -184,13 +178,11 @@ "description": "Выгоняет (\"кикает\") указанного игрока с сервера (WIP)" }, "killall": { - "usage": "Применение: killall [UID_игрока] [ID_сцены]", "scene_not_found_in_player_world": "В мире игрока не была обнаружена эта сцена.", "kill_monsters_in_scene": "Убиваем %s монстров в сцене %s.", "description": "Убивает всех существ в сцене" }, "killCharacter": { - "usage": "Применение: killcharacter [ID_игрока]", "success": "Текущий персонаж игрока %s был убит.", "description": "Убивает текущего персонажа игрока" }, @@ -205,7 +197,6 @@ "description": "Отображает всех игроков, находящихся в сети" }, "permission": { - "usage": "Применение: permission <add|remove> <имя_пользователя> <разрешение>", "add": "Разрешение было добавлено.", "has_error": "У данного пользователя уже имеется это разрешение!", "remove": "Разрешение удалено.", @@ -218,7 +209,6 @@ "description": "Позволяет получить координаты" }, "quest": { - "usage": "Применение: quest <add|finish> [ID_квеста]", "added": "Квест %s был добавлен.", "finished": "Квест %s был завершен.", "not_found": "Квест не найден.", @@ -236,12 +226,11 @@ "description": "Сбрасывает уровень созвездия у активного персонажа. Для вступления изменений в силу, после ввода команды необходимо перезайти в игру" }, "resetShopLimit": { - "usage": "Применение: resetshop <ID_игрока>", "success": "Сброс был выполнен успешно.", "description": "Сбрасывает таймер обновления магазина у выбранного игрока" }, "sendMail": { - "usage": "Применение: sendmail <ID_пользователя|all|help> [ID_шаблона]", + "give_usage": "🇺🇸Usage: give <player> <itemID|itemName> [amount] [level] [refinement]", "user_not_exist": "Пользователь с ID '%s' не найден.", "start_composition": "Начинаем создание письма.\nВведите '/sendmail <заголовок>' для того, чтобы продолжить.\nВ любой момент времени вы можете прекратить писать это письмо путём ввода '/sendmail stop'.", "templates": "Шаблоны писем будут реализованы в будущем...", @@ -264,27 +253,22 @@ "description": "Отправляет сообщение по почте указанному пользователю. Применение данной команды изменяется в зависимости от стадии написания письма" }, "sendMessage": { - "usage": "Применение: sendmessage <сообщение>", "success": "Сообщение было отправлено.", "description": "Отправляет сообщение выбранному игроку от имени сервера. При отсутствии конкретной цели, отправляет сообщение всем игрокам на сервере." }, "setFetterLevel": { - "usage": "Применение: setfetterlevel <уровень>", "range_error": "Значение уровня дружбы должно быть между 0 и 10.", "success": "Уровень дружбы стал равен %s.", "level_error": "Некорректный уровень дружбы.", "description": "Задаёт уровень дружбы для активного персонажа" }, "setProp": { - "usage": "Применение: setprop|prop <св-во> <значение>\n\tВозможные значения <св-во>: godmode | nostamina | unlimitedenergy | abyss | worldlevel | bplevel\n\t(прод.) см. перечисление (enum) PlayerProperty для остальных возможных значений, of form PROP_MAX_SPRING_VOLUME -> max_spring_volume", - "description": "Задаёт свойства аккаунта. С помощью данной команды может быть включен godmode, а также разблокированы этажи Коридора Бездны и изменён прогресс боевого пропуска." + "description": "Задаёт свойства аккаунта. С помощью данной команды может быть включен godmode, а также разблокированы этажи Коридора Бездны и изменён прогресс боевого пропуска.\n\tВозможные значения <св-во>: godmode | nostamina | unlimitedenergy | abyss | worldlevel | bplevel\n\t(прод.) см. перечисление (enum) PlayerProperty для остальных возможных значений, of form PROP_MAX_SPRING_VOLUME -> max_spring_volume" }, "setStats": { - "usage": "Применение: setstats|stats <хар-ка> <значение>\n\tВозможные значения <хар-ка>: hp | maxhp | def | atk | em | er | crate | cdmg | cdr | heal | heali | shield | defi\n\t(прод.) Бонус элементального урона: epyro | ecryo | ehydro | egeo | edendro | eelectro | ephys\n\t(прод.) Элементальное сопротивление: respyro | rescryo | reshydro | resgeo | resdendro | reselectro | resphys\n", - "description": "Задаёт боевые характеристики для активного персонажа" + "description": "Задаёт боевые характеристики для активного персонажа\n\tВозможные значения <хар-ка>: hp | maxhp | def | atk | em | er | crate | cdmg | cdr | heal | heali | shield | defi\n\t(прод.) Бонус элементального урона: epyro | ecryo | ehydro | egeo | edendro | eelectro | ephys\n\t(прод.) Элементальное сопротивление: respyro | rescryo | reshydro | resgeo | resdendro | reselectro | resphys" }, "spawn": { - "usage": "Применение: spawn <ID_существа> [кол-во] [уровень(только для монстров)] [<x> <y> <z>(только для монстров, опционально)]", "success": "Заспавнено %s %s.", "limit_reached": "Лимит существ в сцене был достигнут. Спавним %s существ вместо этого.", "description": "Спавнит существо неподалеку от вас" @@ -294,16 +278,12 @@ "description": "Останавливает работу сервера" }, "talent": { - "usage_1": "Для того, чтобы задать уровень таланта: /talent set <ID_таланта> <значение>", - "usage_2": "Альтернативный способ задать уровень таланта: /talent <n/e/q для стандартной атаки/способности на E/Q> <значение>", - "usage_3": "Для того, чтобы получить ID таланта: /talent getid", "lower_16": "Некорректный уровень таланта. Уровень должен быть ниже 16.", "set_id": "Уровень таланта стал равен %s.", "set_atk": "Уровень таланта стандартной атаки стал равен %s.", "set_e": "Уровень таланта способности на E стал равен %s.", "set_q": "Уровень таланта способности на Q стал равен %s.", "invalid_skill_id": "Некорректный ID способности.", - "set_this": "Этот уровень таланта стал равен %s.", "invalid_level": "Некорректный уровень таланта.", "normal_attack_id": "ID стандартной атаки: %s.", "e_skill_id": "ID способности на E: %s.", @@ -311,17 +291,13 @@ "description": "Устанавливает уровень таланта для вашего активного персонажа" }, "team": { - "usage": "Применение: team <add|remove|set> [ID_персонажа,...] [индекс|first|last|индекс-индекс,...]", "invalid_usage": "Некорректное применение.", - "add_usage": "Применение (для добавления): team add <ID_персонажа,...> [индекс]", "invalid_index": "Некорректный индекс.", "add_too_much": "Сервер позволяет вам иметь максимум %d персонаж(а) в команде.", "failed_to_add_avatar": "Не удалось добавить персонажа с ID %s.", - "remove_usage": "Применение (для удаления): team remove <индекс|first|last|индекс-индекс,...>", "failed_to_parse_index": "Не удалось обработать индекс: %s", "remove_too_much": "Вы не можете удалить всех своих персонажей.", "ignore_index": "Были проигнорированы индекс(ы): %s", - "set_usage": "Применение (для задания): team set <индекс> <ID_персонажа>", "index_out_of_range": "Указанный индекс находится вне границ.", "failed_parse_avatar_id": "Не удалось распознать ID персонажа: %s", "avatar_already_in_team": "Персонаж уже находится в команде.", @@ -334,29 +310,23 @@ "description": "Телепортирует всех игроков в вашем мире к вам" }, "teleport": { - "usage_server": "Применение: tp @<ID_игрока> <x> <y> <z> [ID_сцены]", - "usage": "Применение: tp [@<ID_игрока>] <x> <y> <z> [ID_сцены]", - "specify_player_id": "Нужно указать ID игрока.", "invalid_position": "Некорректная позиция.", "exists_error": "Указанная сцена не существует.", "success": "Игрок %s был телепортирован по координатам %s, %s, %s в сцене %s.", "description": "Изменяет местоположение игрока" }, "weather": { - "usage": "Применение: weather [ID_погоды] [тип_климата]\nДоступные ID погоды можно найти в WeatherExcelConfigData.json.\nТипы климата: sunny (солнечно), cloudy (облачно), rain (дождь), thunderstorm (гроза), snow (снег), mist (туман)", "success": "Установлен ID погоды %s, тип климата: %s.", "status": "Текущий ID погоды: %s, тип климата: %s.", "description": "Изменяет ID погоды и тип климата. ID погоды можно найти в WeatherExcelConfigData.json.\nТипы климата: sunny (солнечно), cloudy (облачно), rain (дождь), thunderstorm (гроза), snow (снег), mist (туман)" }, "ban": { - "command_usage": "Применение: ban <@ID_игрока> [промежуток_времени] [причина]", "success": "Успех.", "failure": "Неудача, игрок не найден.", "invalid_time": "Не удалось определить промежуток времени.", "description": "Запрещает игроку присоединяться к серверу (\"банит\")" }, "unban": { - "command_usage": "Применение: unban <@ID_игрока>", "success": "Успех.", "failure": "Неудача, игрок не найден.", "description": "Разблокировывает доступ к серверу (\"разбанивает\")" @@ -397,4 +367,4 @@ "gacha_mapping": "Мапирование системы гача в JSON" } } -} +} \ No newline at end of file diff --git a/src/main/resources/languages/zh-CN.json b/src/main/resources/languages/zh-CN.json index da7866ffb..7980a06bd 100644 --- a/src/main/resources/languages/zh-CN.json +++ b/src/main/resources/languages/zh-CN.json @@ -94,6 +94,7 @@ } }, "execution": { + "usage_prefix": "用法:", "player_exist_error": "玩家不存在。", "player_offline_error": "玩家已离线。", "item_player_exist_error": "无效的物品/玩家UID。", @@ -114,7 +115,6 @@ "success": "成功" }, "account": { - "command_usage": "用法:account <create|delete> <用户名> [UID]", "invalid": "无效的UID。", "exists": "具有此用户名和/或 UID 的账号已存在。", "create": "已创建 UID 为 %s 的账号。", @@ -123,7 +123,6 @@ "description": "创建或删除账号" }, "announce": { - "command_usage": "用法:announce|a <\"tpl\"(发送) 模板ID|\"refresh\"(刷新)|\"revoke\"(撤销) 模板ID|内容>", "send_success": "成功发送了一则公告,你可以通过 /a revoke %s 撤销。", "refresh_success": "成功刷新了公告配置。[共 %s 个]", "revoke_done": "尝试撤回公告 %s。", @@ -131,7 +130,6 @@ "description": "向所有在线玩家发送公告,或者管理服务器的公告" }, "clear": { - "command_usage": "用法:clear <all|wp|art|mat> [lv<max level>] [r<max refinement>] [<max rarity>*]\nall: 所有, wp: 武器, art: 圣遗物, mat: 材料", "weapons": "已清除 %s 的武器。", "artifacts": "已清除 %s 的圣遗物。", "materials": "已清除 %s 的材料。", @@ -142,19 +140,16 @@ "description": "从你的背包中删除所有未装备且已解锁的物品,包括稀有物品" }, "coop": { - "usage": "用法:coop [指定玩家UID]", "success": "已强制传送 %s 到 %s 的世界。", "description": "强制传送指定玩家到他人的世界。如果没有指定玩家,则会使你进入多人游戏状态" }, "enter_dungeon": { - "usage": "用法:enterdungeon <秘境ID>", "changed": "已进入秘境 %s。", "not_found_error": "秘境不存在。", "in_dungeon_error": "你已经在这个秘境中了。", "description": "进入指定秘境" }, "give": { - "usage": "用法:give <物品ID|角色ID|\"all\"(全部)|\"weapons\"(武器)|\"mats\"(材料)|\"avatars\"(角色)> [x<数量>] [lv<等级>] [r<精炼>]", "usage_relic": "用法:give <圣遗物ID> [主词条ID] [<副词条ID>[,<强化次数>]]... [lv<等级 0-20>]", "illegal_relic": "此圣遗物ID属于黑名单范围,也许不是你想要的。", "given": "已将 %s 个 %s 给予 %s。", @@ -169,7 +164,6 @@ "description": "治疗当前队伍的角色" }, "help": { - "usage": "用法:", "aliases": "别名:", "available_commands": "可用命令:", "tip_need_permission": "所需权限:", @@ -184,13 +178,11 @@ "description": "从服务器内踢出指定玩家" }, "killall": { - "usage": "用法:killall [玩家UID] [场景ID]", "scene_not_found_in_player_world": "未在玩家世界中找到此场景。", "kill_monsters_in_scene": "已杀死场景 %s 中的 %s 个怪物。", "description": "杀死所有怪物" }, "killCharacter": { - "usage": "用法:killcharacter [玩家ID]", "success": "已杀死 %s 当前角色。", "description": "杀死玩家当前角色" }, @@ -205,7 +197,6 @@ "description": "查看所有玩家" }, "permission": { - "usage": "用法:permission <add|remove> <用户名> <权限>", "add": "权限已添加。", "has_error": "此玩家已拥有此权限!", "remove": "权限已移除。", @@ -218,7 +209,6 @@ "description": "获取所在位置" }, "quest": { - "usage": "quest <add|finish> [任务ID]", "added": "已添加任务 %s。", "finished": "已完成任务 %s。", "not_found": "任务不存在。", @@ -236,12 +226,11 @@ "description": "重置当前角色的命之座,执行命令后需重新登录以生效" }, "resetShopLimit": { - "usage": "用法:resetshop <玩家ID>", "success": "重置完成。", "description": "重置指定玩家的商店刷新时间" }, "sendMail": { - "usage": "用法:sendmail <用户ID|all|help> [模板ID]", + "give_usage": "🇺🇸Usage: give <player> <itemID|itemName> [amount] [level] [refinement]", "user_not_exist": "用户 '%s' 不存在。", "start_composition": "开始撰写邮件。\n请使用 '/sendmail <标题>' 继续。\n你可以随时使用 '/sendmail stop' 停止。", "templates": "邮件模板尚未实装...", @@ -264,27 +253,22 @@ "description": "向指定用户发送邮件。此命令的用法会根据撰写阶段而改变" }, "sendMessage": { - "usage": "用法:sendmessage <消息>", "success": "消息已发送。", "description": "向玩家以服务器的身份发送消息。如果没有指定目标,则向服务器的全部玩家发送" }, "setFetterLevel": { - "usage": "用法:setfetterlevel <好感度等级>", "range_error": "好感度等级必须在 0-10 之间。", "success": "好感度已设为 %s 级。", "level_error": "无效的好感度等级。", "description": "设置当前角色的好感度等级" }, "setProp": { - "usage": "用法:setprop|prop <状态> <数值>\n可更改的状态列表:godmode(上帝模式)|nostamina(无限体力)|unlimitedenergy(无限能量)|abyss(深渊)|worldlevel(世界等级)|bplevel(纪行等级)\n查看 PlayerProperty enum 以获得其他数值,格式为 PROP_MAX_SPRING_VOLUME -> max_spring_volume", - "description": "设置账号的状态。比如可以通过此命令启用 godmode,也可以解锁深渊或更改纪行等级" + "description": "设置账号的状态。比如可以通过此命令启用 godmode,也可以解锁深渊或更改纪行等级\n\t可更改的状态列表:godmode(上帝模式)|nostamina(无限体力)|unlimitedenergy(无限能量)|abyss(深渊)|worldlevel(世界等级)|bplevel(纪行等级)\n查看 PlayerProperty enum 以获得其他数值,格式为 PROP_MAX_SPRING_VOLUME -> max_spring_volume" }, "setStats": { - "usage": "用法:setstats|stats <属性> <数值>\n可更改的属性列表:hp(生命值)|maxhp(最大生命值)|def(防御力)|atk(攻击力)|em(元素精通)|er(元素充能效率)|crate(暴击率)|cdmg(暴击伤害)|cdr(冷却缩减)|heal(治疗加成)|heali(受治疗加成)|shield(护盾强效)|defi(无视防御)\n元素增伤:epyro(火)|ecryo(冰)|ehydro(水)|egeo(岩)|edendro(草)|eelectro(雷)|ephys(物理)\n元素抗性:respyro(火)|rescryo(冰)|reshydro(水)|resgeo(岩)|resdendro(草)|reselectro(雷)|resphys(物理)\n", - "description": "设置当前角色的属性" + "description": "设置当前角色的属性\n\t可更改的属性列表:hp(生命值)|maxhp(最大生命值)|def(防御力)|atk(攻击力)|em(元素精通)|er(元素充能效率)|crate(暴击率)|cdmg(暴击伤害)|cdr(冷却缩减)|heal(治疗加成)|heali(受治疗加成)|shield(护盾强效)|defi(无视防御)\n元素增伤:epyro(火)|ecryo(冰)|ehydro(水)|egeo(岩)|edendro(草)|eelectro(雷)|ephys(物理)\n元素抗性:respyro(火)|rescryo(冰)|reshydro(水)|resgeo(岩)|resdendro(草)|reselectro(雷)|resphys(物理)" }, "spawn": { - "usage": "用法:spawn <实体ID> [数量] [等级(仅怪物)] [<x> <y> <z>(仅怪物, 可选)]", "success": "已生成 %s 个 %s。", "limit_reached": "场景中的生成数量已达上限。已替代为生成 %s 个实体。", "description": "在你附近生成实体" @@ -294,16 +278,12 @@ "description": "停止服务器" }, "talent": { - "usage_1": "设置天赋等级:/talent set <天赋ID> <数值>", - "usage_2": "另一种设置天赋等级的方法:/talent <n|e|q> <数值>\nn: 普通攻击, e: 元素战技, q: 元素爆发", - "usage_3": "获取天赋ID:/talent getid", "lower_16": "无效的天赋等级,天赋等级应小于等于15。", "set_id": "将天赋等级设为 %s。", "set_atk": "将普通攻击等级设为 %s。", "set_e": "将元素战技等级设为 %s。", "set_q": "将元素爆发等级设为 %s。", "invalid_skill_id": "无效的技能ID。", - "set_this": "将天赋等级设为 %s。", "invalid_level": "无效的天赋等级。", "normal_attack_id": "普通攻击的 ID 为 %s。", "e_skill_id": "元素战技ID %s。", @@ -311,17 +291,13 @@ "description": "设置当前角色的天赋等级" }, "team": { - "usage": "用法:team <add|remove|set> [角色ID,...] [索引|first|last|索引-索引,...]", "invalid_usage": "无效的用法。", - "add_usage": "用法(add):team add <角色ID,...> [索引]", "invalid_index": "无效的索引。", "add_too_much": "服务端仅允许你队伍里至多有 %d 名角色。", "failed_to_add_avatar": "无法根据ID %s 添加角色。", - "remove_usage": "用法(remove):team remove <索引|first|last|索引-索引,...>", "failed_to_parse_index": "无法解析索引:%s", "remove_too_much": "你不能删除那么多角色,你的队伍列表将会变空。", "ignore_index": "忽略的索引列表:%s", - "set_usage": "用法(set):team set <索引> <角色ID>", "index_out_of_range": "你指定的索引超出了范围。", "failed_parse_avatar_id": "无法解析的角色ID:%s", "avatar_already_in_team": "角色已经在你的队伍中了。", @@ -334,29 +310,23 @@ "description": "将你世界中的所有玩家传送到你所在的位置" }, "teleport": { - "usage_server": "用法:tp @<玩家ID> <x> <y> <z> [场景ID]", - "usage": "用法:tp [@<玩家ID>] <x> <y> <z> [场景ID]", - "specify_player_id": "你必须指定一个玩家ID。", "invalid_position": "无效的位置。", "exists_error": "此场景不存在。", "success": "传送 %s 到坐标 %s, %s, %s,场景为 %s。", "description": "改变指定玩家的位置" }, "weather": { - "usage": "用法:weather [天气ID] [气候类型]\n天气ID可以在 WeatherExcelConfigData.json 中找到。\n气候类型:sunny(晴天), cloudy(多云), rain(雨), thunderstorm(雷雨), snow(雪), mist(雾)", "success": "已设置天气ID 为 %s,气候类型为 %s。", "status": "当前天气ID 为 %s,气候类型为 %s。", "description": "更改天气ID和气候类型。天气ID可以在 WeatherExcelConfigData.json 中找到。\n气候类型:sunny(晴天), cloudy(多云), rain(雨), thunderstorm(雷雨), snow(雪), mist(雾)" }, "ban": { - "command_usage": "用法:ban <@玩家ID> [时间] [原因]", "success": "成功封禁玩家。", "failure": "封禁玩家失败,因为玩家不存在。", "invalid_time": "无法解析时间戳。", "description": "封禁玩家" }, "unban": { - "command_usage": "用法:unban <@玩家ID>", "success": "成功取消玩家的封禁。", "failure": "取消玩家的封禁失败,因为玩家不存在。", "description": "取消玩家的封禁" diff --git a/src/main/resources/languages/zh-TW.json b/src/main/resources/languages/zh-TW.json index dc4b4f224..7abaa56af 100644 --- a/src/main/resources/languages/zh-TW.json +++ b/src/main/resources/languages/zh-TW.json @@ -94,6 +94,7 @@ } }, "execution": { + "usage_prefix": "用法:", "player_exist_error": "用戶不存在。", "player_offline_error": "玩家已離線。", "item_player_exist_error": "無效的物品/玩家UID。", @@ -114,7 +115,6 @@ "success": "成功" }, "account": { - "command_usage": "用法:account <create|delete> <username> [uid]", "invalid": "無效的UID。", "exists": "帳號已存在。", "create": "已建立帳號,UID 為 %s 。", @@ -123,7 +123,6 @@ "description": "建立或刪除帳號。" }, "announce": { - "command_usage": "🇺🇸Usage: announce|a <\"tpl\" templateId|\"refresh\"|\"revoke\" templateId|content>", "send_success": "🇺🇸Send an announcement successfully, you can revoke it by /a revoke %s.", "refresh_success": "🇺🇸Refresh announcement config file successfully. [Total %s]", "revoke_done": "🇺🇸Try to revoke announcement %s.", @@ -131,7 +130,6 @@ "description": "🇺🇸Send announcement to all online players, or manage server's announcement" }, "clear": { - "command_usage": "用法: clear <all|wp|art|mat> [lv<max level>] [r<max refinement>] [<max rarity>*]", "weapons": "已將 %s 的武器清空。", "artifacts": "已將 %s 的聖遺物清空。", "materials": "已將 %s 的材料清空。", @@ -142,19 +140,16 @@ "description": "從你的背包中刪除所有未裝備且未上鎖的物品,包括稀有物品。" }, "coop": { - "usage": "用法:coop <playerId> <target playerId>", "success": "召喚了 %s 到 %s 的世界。", "description": "強制傳送指定用戶到他人的世界。如果未指定玩家,則會將你設為多人遊戲狀態。" }, "enter_dungeon": { - "usage": "用法:enterdungeon <dungeon id>", "changed": "已進入祕境 %s", "not_found_error": "此祕境不存在。", "in_dungeon_error": "你已經在祕境中了。", "description": "進入指定祕境。" }, "give": { - "usage": "用法:give <player> <itemId|avatarId> [amount] [level] [refinement]", "usage_relic": "🇺🇸Usage: give <artifactID> [mainPropID] [<appendPropID>[,<times>]]... [lv<level 0-20>]", "illegal_relic": "🇺🇸This artifactID belongs to a blacklisted range, it may not be the one you wanted.", "given": "已經將 %s 個 %s 給予 %s。", @@ -169,7 +164,6 @@ "description": "治療當前隊伍的角色。" }, "help": { - "usage": "用法:", "aliases": "別名:", "available_commands": "可用指令:", "tip_need_permission": "需要的權限: ", @@ -184,13 +178,11 @@ "description": "從伺服器內踢出指定玩家。" }, "killall": { - "usage": "用法:killall [playerUid] [sceneId]", "scene_not_found_in_player_world": "未在玩家世界中找到此場景", "kill_monsters_in_scene": "已殺死 %s 個怪物。 [場景ID: %s]", "description": "殺死所有怪物。" }, "killCharacter": { - "usage": "用法:killcharacter [playerId]", "success": "已殺死 %s 目前的場上角色。", "description": "殺死玩家目前使用的場上角色。" }, @@ -205,7 +197,6 @@ "description": "查看所有在線玩家" }, "permission": { - "usage": "用法:permission <add|remove> <username> <permission>", "add": "已指派權限。", "has_error": "此玩家已擁有權限!", "remove": "權限已移除。", @@ -218,7 +209,6 @@ "description": "獲取目前所在位置的座標。" }, "quest": { - "usage": "quest <add|finish> [任務ID]", "added": "已添加任務 %s", "finished": "已完成任務 %s", "not_found": "未找到任務", @@ -236,12 +226,11 @@ "description": "重置當前角色的命之座,重新登入後將會生效。" }, "resetShopLimit": { - "usage": "用法:resetshop <playerId>", "success": "重置完成。", "description": "重置所選玩家的商店刷新時間。" }, "sendMail": { - "usage": "用法:sendmail <userId|all|help> [templateId]", + "give_usage": "🇺🇸Usage: give <player> <itemID|itemName> [amount] [level] [refinement]", "user_not_exist": "ID '%s' 的使用者不存在。", "start_composition": "發送郵件流程。\n請使用`/send <郵件標題>`來進到下一步。\n你可以在任何時間使用`/sendmail stop`來停止發送。", "templates": "郵件模板尚未實裝...", @@ -264,27 +253,22 @@ "description": "向指定用戶發送郵件。此指令的用法可根據附加的參數而改變。" }, "sendMessage": { - "usage": "用法:sendmessage <player> <message>", "success": "訊息已發送。", "description": "向指定玩家發送訊息。" }, "setFetterLevel": { - "usage": "用法:setfetterlevel <level>", "range_error": "好感度必須在 0 到 10 之間。", "success": "好感等級已設定為 %s", "level_error": "無效的好感度。", "description": "設定當前角色的好感度等級。" }, "setProp": { - "usage": "🇺🇸Usage: setprop|prop <prop> <value>\n\tValues for <prop>: godmode | nostamina | unlimitedenergy | abyss | worldlevel | bplevel\n\t(cont.) see PlayerProperty enum for other possible values, of form PROP_MAX_SPRING_VOLUME -> max_spring_volume", - "description": "🇺🇸Sets accountwide properties. Things like godmode can be enabled this way, as well as changing things like unlocked abyss floor and battle pass progress." + "description": "🇺🇸Sets accountwide properties. Things like godmode can be enabled this way, as well as changing things like unlocked abyss floor and battle pass progress.\n\tValues for <prop>: godmode | nostamina | unlimitedenergy | abyss | worldlevel | bplevel\n\t(cont.) see PlayerProperty enum for other possible values, of form PROP_MAX_SPRING_VOLUME -> max_spring_volume" }, "setStats": { - "usage": "用法:setstats|stats <stat> <value>\n\t可使用的數據類型:hp (生命值)| maxhp (最大生命值) | def(防禦力) | atk (攻擊力)| em (元素精通) | er (元素充能效率) | crate(暴擊率) | cdmg (暴擊傷害)| cdr (冷卻縮減) | heal(治療加成)| heali (受治療加成)| shield (護盾強效)| defi (無視防禦)\n\t(cont.) 元素增傷類:epyro (火傷) | ecryo (冰傷) | ehydro (水傷) | egeo (岩傷) | edendro (草傷) | eelectro (雷傷) | ephys (物傷)(cont.) 元素減傷類:respyro (火抗) | rescryo (冰抗) | reshydro (水抗) | resgeo (岩抗) | resdendro (草抗) | reselectro (雷抗) | resphys (物抗)\n", - "description": "設定當前角色的數據類型。" + "description": "設定當前角色的數據類型。\n\t可使用的數據類型:hp (生命值)| maxhp (最大生命值) | def(防禦力) | atk (攻擊力)| em (元素精通) | er (元素充能效率) | crate(暴擊率) | cdmg (暴擊傷害)| cdr (冷卻縮減) | heal(治療加成)| heali (受治療加成)| shield (護盾強效)| defi (無視防禦)\n\t(cont.) 元素增傷類:epyro (火傷) | ecryo (冰傷) | ehydro (水傷) | egeo (岩傷) | edendro (草傷) | eelectro (雷傷) | ephys (物傷)(cont.) 元素減傷類:respyro (火抗) | rescryo (冰抗) | reshydro (水抗) | resgeo (岩抗) | resdendro (草抗) | reselectro (雷抗) | resphys (物抗)" }, "spawn": { - "usage": "用法:spawn <entityId> [amount] [level(僅限怪物)]", "success": "已生成 %s 個 %s。", "limit_reached": "🇺🇸Scene spawn limit reached. Spawning %s entities instead.", "description": "在你附近生成一個實體動物。" @@ -294,16 +278,12 @@ "description": "以正常的方式關閉伺服器。" }, "talent": { - "usage_1": "設定天賦等級:talent set <talentID> <value>", - "usage_2": "另一種設定天賦等級的指令使用方法:talent <n or e or q> <value>", - "usage_3": "獲取天賦ID指令用法:talent getid", "lower_16": "無效的天賦等級,技能等級應低於 16。", "set_id": "將天賦等級設為%s。", "set_atk": "將普通攻擊等級設為 %s。", "set_e": "設定元素戰技的天賦等級至 %s。", "set_q": "設定元素爆發的天賦等級至 %s。", "invalid_skill_id": "無效的技能ID。", - "set_this": "將天賦等級設為 %s。", "invalid_level": "無效的天賦等級。", "normal_attack_id": "普通攻擊的 ID 為 %s。", "e_skill_id": "元素戰技技能ID %s。", @@ -311,17 +291,13 @@ "description": "設定當前角色的天賦等級" }, "team": { - "usage": "用法:team <add|remove|set> [角色ID,...] [索引|first|last|索引-索引,...]", "invalid_usage": "無效的用法。", - "add_usage": "新增的用法:team add <角色ID,...> [索引]", "invalid_index": "無效索引。", "add_too_much": "服務端只允許您的隊伍裡最多 %d 名角色。", "failed_to_add_avatar": "無法根據ID %s 添加角色。", - "remove_usage": "移除的用法:team remove <索引|first|last|索引-索引,...>", "failed_to_parse_index": "無法解析的索引:%s", "remove_too_much": "您不能删除那麼多的角色,因為您的隊伍列表角色會全部被刪除。", "ignore_index": "無視的索引列表:%s", - "set_usage": "設定的用法:team set <索引> <角色ID>", "index_out_of_range": "您指定的索引超出了範圍。", "failed_parse_avatar_id": "無法解析的角色ID:%s", "avatar_already_in_team": "該角色已經在您的隊伍當中了。", @@ -334,29 +310,23 @@ "description": "將你世界裡的所有玩家傳送到你目前的所在位置。" }, "teleport": { - "usage_server": "用法:tp @<playerId> <x> <y> <z> [sceneId]", - "usage": "用法:tp [@<playerId>] <x> <y> <z> [sceneId]", - "specify_player_id": "你必須指定一個玩家ID。", "invalid_position": "無效的座標。", "exists_error": "此場景不存在。", "success": "傳送 %s 到座標 %s,%s,%s ,場景為 %s 。", "description": "將玩家的位置傳送到你所指定的座標。" }, "weather": { - "usage": "用法:weather [weatherId] [climateType]\n天氣ID可以在 WeatherExcelConfigData.json 中找到。\n氣候型別:sunny(晴天), cloudy(多雲), rain(雨), thunderstorm(雷雨), snow(雪), mist(霧)", "success": "已設定天氣ID 為 %s,氣候型別為 %s。", "status": "當前天氣ID 為 %s,氣候型別為 %s。", "description": "更改天氣ID和氣候型別。天氣ID可以在 WeatherExcelConfigData.json 中找到。\n氣候型別:sunny(晴天), cloudy(多雲), rain(雨), thunderstorm(雷雨), snow(雪), mist(霧)" }, "ban": { - "command_usage": "用法:ban <@playerId> [timestamp] [reason]", "success": "停權成功。", "failure": "停權失敗,玩家帳號不存在。", "invalid_time": "無效的時間戳。", "description": "停權指定玩家。" }, "unban": { - "command_usage": "用法:unban <@playerId>", "success": "撤銷停權成功。", "failure": "撤銷停權失敗,玩家帳號不存在。", "description": "撤銷停權指定玩家。"