Skip to content
Snippets Groups Projects
Commit 34ea3089 authored by RDsatan's avatar RDsatan Committed by Melledy
Browse files

Optimize the join and remove commands to team

parent 5ddf67d9
No related merge requests found
package emu.grasscutter.command.commands;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.command.Command;
import emu.grasscutter.command.CommandHandler;
import emu.grasscutter.game.avatar.Avatar;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.packet.send.PacketChangeMpTeamAvatarRsp;
import java.util.ArrayList;
import java.util.List;
import static emu.grasscutter.utils.Language.translate;
@Command(label = "join", usage = "join [AvatarIDs] such as\"join 10000038 10000039\"",
description = "commands.join.description", permission = "player.join")
public class JoinCommand implements CommandHandler {
@Override
public void execute(Player sender, Player targetPlayer, List<String> args) {
if (targetPlayer == null) {
CommandHandler.sendMessage(sender, translate(sender, "commands.execution.need_target"));
return;
}
List<Integer> avatarIds = new ArrayList<>();
for (String arg : args) {
try {
int avatarId = Integer.parseInt(arg);
avatarIds.add(avatarId);
} catch (Exception ignored) {
ignored.printStackTrace();
CommandHandler.sendMessage(sender, translate("commands.generic.invalid.avatarId"));
return;
}
}
for (int i = 0; i < args.size(); i++) {
Avatar avatar = targetPlayer.getAvatars().getAvatarById(avatarIds.get(i));
if (avatar == null) {
CommandHandler.sendMessage(sender, translate("commands.generic.invalid.avatarId"));
return;
}
if (targetPlayer.getTeamManager().getCurrentTeamInfo().contains(avatar)){
continue;
}
targetPlayer.getTeamManager().getCurrentTeamInfo().addAvatar(avatar);
}
// Packet
targetPlayer.getTeamManager().updateTeamEntities(new PacketChangeMpTeamAvatarRsp(targetPlayer, targetPlayer.getTeamManager().getCurrentTeamInfo()));
}
}
package emu.grasscutter.command.commands;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.command.Command;
import emu.grasscutter.command.CommandHandler;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.packet.send.PacketChangeMpTeamAvatarRsp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static emu.grasscutter.utils.Language.translate;
@Command(label = "remove", usage = "remove [indexOfYourTeams] index start from 1",
description = "commands.remove.description", permission = "player.remove")
public class RemoveCommand implements CommandHandler {
@Override
public void execute(Player sender, Player targetPlayer, List<String> args) {
if (targetPlayer == null) {
CommandHandler.sendMessage(sender, translate(sender, "commands.execution.need_target"));
return;
}
List<Integer> avatarIndexList = new ArrayList<>();
for (String arg : args) {
try {
int avatarIndex = Integer.parseInt(arg);
if (!avatarIndexList.contains(avatarIndex)) {
avatarIndexList.add(avatarIndex);
}
} catch (Exception ignored) {
ignored.printStackTrace();
CommandHandler.sendMessage(sender, translate("commands.remove.invalid_index"));
return;
}
}
Collections.sort(avatarIndexList, Collections.reverseOrder());
for (int i = 0; i < avatarIndexList.size(); i++) {
if (avatarIndexList.get(i) > targetPlayer.getTeamManager().getCurrentTeamInfo().getAvatars().size() || avatarIndexList.get(i) <= 0) {
CommandHandler.sendMessage(targetPlayer, translate("commands.remove.invalid_index"));
return;
}
targetPlayer.getTeamManager().getCurrentTeamInfo().removeAvatar(avatarIndexList.get(i) - 1);
}
// Packet
targetPlayer.getTeamManager().updateTeamEntities(new PacketChangeMpTeamAvatarRsp(targetPlayer, targetPlayer.getTeamManager().getCurrentTeamInfo()));
}
}
package emu.grasscutter.command.commands;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.command.Command;
import emu.grasscutter.command.CommandHandler;
import emu.grasscutter.game.avatar.Avatar;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.packet.send.PacketChangeMpTeamAvatarRsp;
import java.util.List;
import java.util.ArrayList;
import java.util.HashSet;
import static emu.grasscutter.utils.Language.translate;
import static emu.grasscutter.Configuration.*;
@Command(label = "team", usage = "team <add|remove|set> [avatarId,...] [index|first|last|index-index,...]", permission = "player.team",
permissionTargeted = "player.team.others", description = "commands.team.description")
public final class TeamCommand implements CommandHandler {
private static final int BASE_AVATARID = 10000000;
@Override
public void execute(Player sender, Player targetPlayer, List<String> args) {
if (targetPlayer == null) {
CommandHandler.sendMessage(sender, translate(sender, "commands.execution.need_target"));
return;
}
if (args.isEmpty()) {
CommandHandler.sendMessage(sender, translate(sender, "commands.team.usage"));
return;
}
switch (args.get(0)) {
case "add":
if (!addCommand(sender, targetPlayer, args)) return;
break;
case "remove":
if (!removeCommand(sender, targetPlayer, args)) return;
break;
case "set":
if (!setCommand(sender, targetPlayer, args)) return;
break;
default:
CommandHandler.sendMessage(sender, translate(sender, "commands.team.invalid_usage"));
CommandHandler.sendMessage(sender, translate(sender, "commands.team.usage"));
return;
}
targetPlayer.getTeamManager().updateTeamEntities(new PacketChangeMpTeamAvatarRsp(targetPlayer, targetPlayer.getTeamManager().getCurrentTeamInfo()));
}
private boolean addCommand(Player sender, Player targetPlayer, List<String> args) {
if (args.size() < 2) {
CommandHandler.sendMessage(sender, translate(sender, "commands.team.invalid_usage"));
CommandHandler.sendMessage(sender, translate(sender, "commands.team.add_usage"));
return false;
}
int index = -1;
if (args.size() > 2) {
try {
index = Integer.parseInt(args.get(2)) - 1;
if (index < 0) index = 0;
} catch (Exception e) {
CommandHandler.sendMessage(sender, translate(sender, "commands.team.invalid_index"));
return false;
}
}
var avatarIds = args.get(1).split(",");
var currentTeamAvatars = targetPlayer.getTeamManager().getCurrentTeamInfo().getAvatars();
if (currentTeamAvatars.size() + avatarIds.length > GAME_OPTIONS.avatarLimits.singlePlayerTeam) {
CommandHandler.sendMessage(sender, translate(sender, "commands.team.add_too_much", GAME_OPTIONS.avatarLimits.singlePlayerTeam));
return false;
}
for (var avatarId: avatarIds) {
try {
int id = Integer.parseInt(avatarId);
var ret = addAvatar(sender, targetPlayer, id, index);
if (index > 0) ++index;
if (!ret) continue;
} catch (Exception e) {
CommandHandler.sendMessage(sender, translate(sender, "commands.team.failed_to_add_avatar", avatarId));
continue;
}
}
return true;
}
private boolean removeCommand(Player sender, Player targetPlayer, List<String> args) {
if (args.size() < 2) {
CommandHandler.sendMessage(sender, translate(sender, "commands.team.invalid_usage"));
CommandHandler.sendMessage(sender, translate(sender, "commands.team.remove_usage"));
return false;
}
var currentTeamAvatars = targetPlayer.getTeamManager().getCurrentTeamInfo().getAvatars();
var avatarCount = currentTeamAvatars.size();
var metaIndexList = args.get(1).split(",");
var indexes = new HashSet<Integer>();
var ignoreList = new ArrayList<Integer>();
for (var metaIndex: metaIndexList) {
// step 1: parse metaIndex to indexes
var subIndexes = transformToIndexes(metaIndex, avatarCount);
if (subIndexes == null) {
CommandHandler.sendMessage(sender, translate(sender, "commands.team.failed_to_parse_index", metaIndex));
continue;
}
// step 2: get all of the avatar id through indexes
for (var avatarIndex: subIndexes) {
try {
indexes.add(currentTeamAvatars.get(avatarIndex - 1));
} catch (Exception e) {
ignoreList.add(avatarIndex);
continue;
}
}
}
// step 3: check if user remove all of the avatar
if (indexes.size() >= avatarCount) {
CommandHandler.sendMessage(sender, translate(sender, "commands.team.remove_too_much"));
return false;
}
// step 4: hint user for ignore index
if (!ignoreList.isEmpty()) {
CommandHandler.sendMessage(sender, translate(sender, "commands.team.ignore_index", ignoreList));
}
// step 5: remove
currentTeamAvatars.removeAll(indexes);
return true;
}
private boolean setCommand(Player sender, Player targetPlayer, List<String> args) {
if (args.size() < 3) {
CommandHandler.sendMessage(sender, translate(sender, "commands.team.invalid_usage"));
CommandHandler.sendMessage(sender, translate(sender, "commands.team.set_usage"));
return false;
}
var currentTeamAvatars = targetPlayer.getTeamManager().getCurrentTeamInfo().getAvatars();
int index;
try {
index = Integer.parseInt(args.get(1)) - 1;
if (index < 0) index = 0;
} catch(Exception e) {
CommandHandler.sendMessage(sender, translate(sender, "commands.team.failed_to_parse_index", args.get(1)));
return false;
}
if (index + 1 > currentTeamAvatars.size()) {
CommandHandler.sendMessage(sender, translate(sender, "commands.team.index_out_of_range"));
return false;
}
int avatarId;
try {
avatarId = Integer.parseInt(args.get(2));
} catch(Exception e) {
CommandHandler.sendMessage(sender, translate(sender, "commands.team.failed_parse_avatar_id", args.get(2)));
return false;
}
if (avatarId < BASE_AVATARID) {
avatarId += BASE_AVATARID;
}
if (currentTeamAvatars.contains(avatarId)) {
CommandHandler.sendMessage(sender, translate(sender, "commands.team.avatar_already_in_team", avatarId));
return false;
}
if (!targetPlayer.getAvatars().hasAvatar(avatarId)) {
CommandHandler.sendMessage(sender, translate(sender, "commands.team.avatar_not_found", avatarId));
return false;
}
currentTeamAvatars.set(index, avatarId);
return true;
}
private boolean addAvatar(Player sender, Player targetPlayer, int avatarId, int index) {
if (avatarId < BASE_AVATARID) {
avatarId += BASE_AVATARID;
}
var currentTeamAvatars = targetPlayer.getTeamManager().getCurrentTeamInfo().getAvatars();
if (currentTeamAvatars.contains(avatarId)) {
CommandHandler.sendMessage(sender, translate(sender, "commands.team.avatar_already_in_team", avatarId));
return false;
}
if (!sender.getAvatars().hasAvatar(avatarId)) {
CommandHandler.sendMessage(sender, translate(sender, "commands.team.avatar_not_found", avatarId));
return false;
}
if (index < 0) {
currentTeamAvatars.add(avatarId);
} else {
currentTeamAvatars.add(index, avatarId);
}
return true;
}
private List<Integer> transformToIndexes(String metaIndexes, int listLength) {
// step 1: check if metaIndexes is a special constants
if (metaIndexes.equals("first")) {
return List.of(1);
} else if (metaIndexes.equals("last")) {
return List.of(listLength);
}
// step 2: check if metaIndexes is a range
if (metaIndexes.contains("-")) {
var range = metaIndexes.split("-");
if (range.length < 2) {
return null;
}
int min, max;
try {
min = switch (range[0]) {
case "first" -> 1;
case "last" -> listLength;
default -> Integer.parseInt(range[0]);
};
max = switch (range[1]) {
case "first" -> 1;
case "last" -> listLength;
default -> Integer.parseInt(range[1]);
};
} catch (Exception e) {
return null;
}
if (min > max) {
min ^= max;
max ^= min;
min ^= max;
}
var indexes = new ArrayList<Integer>();
for (int i = min; i <= max; ++i) {
indexes.add(i);
}
return indexes;
}
// step 3: index is a value, simply return
try {
int index = Integer.parseInt(metaIndexes);
return List.of(index);
} catch (Exception e) {
return null;
}
}
}
{ {
"messages": { "messages": {
"game": { "game": {
"port_bind": "Game Server started on port %s", "port_bind": "Game Server started on port %s",
"connect": "Client connected from %s", "connect": "Client connected from %s",
"disconnect": "Client disconnected from %s", "disconnect": "Client disconnected from %s",
"game_update_error": "An error occurred during game update.", "game_update_error": "An error occurred during game update.",
"command_error": "Command error:" "command_error": "Command error:"
}, },
"dispatch": { "dispatch": {
"port_bind": "[Dispatch] Dispatch server started on port %s", "port_bind": "[Dispatch] Dispatch server started on port %s",
"request": "[Dispatch] Client %s %s request: %s", "request": "[Dispatch] Client %s %s request: %s",
"keystore": { "keystore": {
"general_error": "[Dispatch] Error while loading keystore!", "general_error": "[Dispatch] Error while loading keystore!",
"password_error": "[Dispatch] Unable to load keystore. Trying default keystore password...", "password_error": "[Dispatch] Unable to load keystore. Trying default keystore password...",
"no_keystore_error": "[Dispatch] No SSL cert found! Falling back to HTTP server.", "no_keystore_error": "[Dispatch] No SSL cert found! Falling back to HTTP server.",
"default_password": "[Dispatch] The default keystore password was loaded successfully. Please consider setting the password to 123456 in config.json." "default_password": "[Dispatch] The default keystore password was loaded successfully. Please consider setting the password to 123456 in config.json."
}, },
"authentication": { "authentication": {
"default_unable_to_verify": "[Authentication] Something called the verifyUser method which is unavailable in the default authentication handler" "default_unable_to_verify": "[Authentication] Something called the verifyUser method which is unavailable in the default authentication handler"
}, },
"no_commands_error": "Commands are not supported in dispatch only mode.", "no_commands_error": "Commands are not supported in dispatch only mode.",
"unhandled_request_error": "[Dispatch] Potential unhandled %s request: %s", "unhandled_request_error": "[Dispatch] Potential unhandled %s request: %s",
"account": { "account": {
"login_attempt": "[Dispatch] Client %s is trying to log in", "login_attempt": "[Dispatch] Client %s is trying to log in",
"login_success": "[Dispatch] Client %s logged in as %s", "login_success": "[Dispatch] Client %s logged in as %s",
"login_token_attempt": "[Dispatch] Client %s is trying to log in via token", "login_token_attempt": "[Dispatch] Client %s is trying to log in via token",
"login_token_error": "[Dispatch] Client %s failed to log in via token", "login_token_error": "[Dispatch] Client %s failed to log in via token",
"login_token_success": "[Dispatch] Client %s logged in via token as %s", "login_token_success": "[Dispatch] Client %s logged in via token as %s",
"combo_token_success": "[Dispatch] Client %s succeed to exchange combo token", "combo_token_success": "[Dispatch] Client %s succeed to exchange combo token",
"combo_token_error": "[Dispatch] Client %s failed to exchange combo token", "combo_token_error": "[Dispatch] Client %s failed to exchange combo token",
"account_login_create_success": "[Dispatch] Client %s failed to log in: Account %s created", "account_login_create_success": "[Dispatch] Client %s failed to log in: Account %s created",
"account_login_create_error": "[Dispatch] Client %s failed to log in: Account create failed", "account_login_create_error": "[Dispatch] Client %s failed to log in: Account create failed",
"account_login_exist_error": "[Dispatch] Client %s failed to log in: Account no found", "account_login_exist_error": "[Dispatch] Client %s failed to log in: Account no found",
"account_cache_error": "Game account cache information error", "account_cache_error": "Game account cache information error",
"session_key_error": "Wrong session key.", "session_key_error": "Wrong session key.",
"username_error": "Username not found.", "username_error": "Username not found.",
"username_create_error": "Username not found, create failed." "username_create_error": "Username not found, create failed."
}, },
"router_error": "[Dispatch] Unable to attach router." "router_error": "[Dispatch] Unable to attach router."
}, },
"status": { "status": {
"free_software": "Grasscutter is FREE software. If you have paid for this, you may have been scammed. Homepage: https://github.com/Grasscutters/Grasscutter", "free_software": "Grasscutter is FREE software. If you have paid for this, you may have been scammed. Homepage: https://github.com/Grasscutters/Grasscutter",
"starting": "Starting Grasscutter...", "starting": "Starting Grasscutter...",
"shutdown": "Shutting down...", "shutdown": "Shutting down...",
"done": "Done! For help, type \"help\"", "done": "Done! For help, type \"help\"",
"error": "An error occurred.", "error": "An error occurred.",
"welcome": "Welcome to Grasscutter", "welcome": "Welcome to Grasscutter",
"run_mode_error": "Invalid server run mode: %s.", "run_mode_error": "Invalid server run mode: %s.",
"run_mode_help": "Server run mode must be 'HYBRID', 'DISPATCH_ONLY', or 'GAME_ONLY'. Unable to start Grasscutter...", "run_mode_help": "Server run mode must be 'HYBRID', 'DISPATCH_ONLY', or 'GAME_ONLY'. Unable to start Grasscutter...",
"create_resources": "Creating resources folder...", "create_resources": "Creating resources folder...",
"resources_error": "Place a copy of 'BinOutput' and 'ExcelBinOutput' in the resources folder.", "resources_error": "Place a copy of 'BinOutput' and 'ExcelBinOutput' in the resources folder.",
"version": "Grasscutter version: %s-%s" "version": "Grasscutter version: %s-%s"
} }
}, },
"commands": { "commands": {
"generic": { "generic": {
"not_specified": "No command specified.", "not_specified": "No command specified.",
"unknown_command": "Unknown command: %s", "unknown_command": "Unknown command: %s",
"permission_error": "You do not have permission to run this command.", "permission_error": "You do not have permission to run this command.",
"console_execute_error": "This command can only be run from the console.", "console_execute_error": "This command can only be run from the console.",
"player_execute_error": "Run this command in-game.", "player_execute_error": "Run this command in-game.",
"command_exist_error": "No command found.", "command_exist_error": "No command found.",
"no_description_specified": "No description specified", "no_description_specified": "No description specified",
"invalid": { "invalid": {
"amount": "Invalid amount.", "amount": "Invalid amount.",
"artifactId": "Invalid artifactId.", "artifactId": "Invalid artifactId.",
"avatarId": "Invalid avatarId.", "avatarId": "Invalid avatarId.",
"avatarLevel": "Invalid avatarLevel.", "avatarLevel": "Invalid avatarLevel.",
"entityId": "Invalid entityId.", "entityId": "Invalid entityId.",
"itemId": "Invalid itemId.", "itemId": "Invalid itemId.",
"itemLevel": "Invalid itemLevel.", "itemLevel": "Invalid itemLevel.",
"itemRefinement": "Invalid itemRefinement.", "itemRefinement": "Invalid itemRefinement.",
"playerId": "Invalid playerId.", "playerId": "Invalid playerId.",
"uid": "Invalid UID." "uid": "Invalid UID."
} }
}, },
"execution": { "execution": {
"uid_error": "Invalid UID.", "uid_error": "Invalid UID.",
"player_exist_error": "Player not found.", "player_exist_error": "Player not found.",
"player_offline_error": "Player is not online.", "player_offline_error": "Player is not online.",
"item_id_error": "Invalid item ID.", "item_id_error": "Invalid item ID.",
"item_player_exist_error": "Invalid item or UID.", "item_player_exist_error": "Invalid item or UID.",
"entity_id_error": "Invalid entity ID.", "entity_id_error": "Invalid entity ID.",
"player_exist_offline_error": "Player not found or is not online.", "player_exist_offline_error": "Player not found or is not online.",
"argument_error": "Invalid arguments.", "argument_error": "Invalid arguments.",
"clear_target": "Target cleared.", "clear_target": "Target cleared.",
"set_target": "Subsequent commands will target @%s by default.", "set_target": "Subsequent commands will target @%s by default.",
"need_target": "This command requires a target UID. Add a <@UID> argument or set a persistent target with /target @UID." "need_target": "This command requires a target UID. Add a <@UID> argument or set a persistent target with /target @UID."
}, },
"status": { "status": {
"enabled": "Enabled", "enabled": "Enabled",
"disabled": "Disabled", "disabled": "Disabled",
"help": "Help", "help": "Help",
"success": "Success" "success": "Success"
}, },
"account": { "account": {
"modify": "Modify user accounts", "modify": "Modify user accounts",
"invalid": "Invalid UID.", "invalid": "Invalid UID.",
"exists": "Account already exists.", "exists": "Account already exists.",
"create": "Account created with UID %s.", "create": "Account created with UID %s.",
"delete": "Account deleted.", "delete": "Account deleted.",
"no_account": "Account not found.", "no_account": "Account not found.",
"command_usage": "Usage: account <create|delete> <username> [uid]", "command_usage": "Usage: account <create|delete> <username> [uid]",
"description": "Modify user accounts" "description": "Modify user accounts"
}, },
"broadcast": { "broadcast": {
"command_usage": "Usage: broadcast <message>", "command_usage": "Usage: broadcast <message>",
"message_sent": "Message sent.", "message_sent": "Message sent.",
"description": "Sends a message to all the players" "description": "Sends a message to all the players"
}, },
"changescene": { "changescene": {
"usage": "Usage: changescene <sceneId>", "usage": "Usage: changescene <sceneId>",
"already_in_scene": "You are already in that scene.", "already_in_scene": "You are already in that scene.",
"success": "Changed to scene %s.", "success": "Changed to scene %s.",
"exists_error": "The specified scene does not exist.", "exists_error": "The specified scene does not exist.",
"description": "Changes your scene" "description": "Changes your scene"
}, },
"clear": { "clear": {
"command_usage": "Usage: clear <all|wp|art|mat>", "command_usage": "Usage: clear <all|wp|art|mat>",
"weapons": "Cleared weapons for %s.", "weapons": "Cleared weapons for %s.",
"artifacts": "Cleared artifacts for %s.", "artifacts": "Cleared artifacts for %s.",
"materials": "Cleared materials for %s.", "materials": "Cleared materials for %s.",
"furniture": "Cleared furniture for %s.", "furniture": "Cleared furniture for %s.",
"displays": "Cleared displays for %s.", "displays": "Cleared displays for %s.",
"virtuals": "Cleared virtuals for %s.", "virtuals": "Cleared virtuals for %s.",
"everything": "Cleared everything for %s.", "everything": "Cleared everything for %s.",
"description": "Deletes unequipped unlocked items, including yellow rarity ones from your inventory" "description": "Deletes unequipped unlocked items, including yellow rarity ones from your inventory"
}, },
"coop": { "coop": {
"usage": "Usage: coop <playerId> <target playerId>", "usage": "Usage: coop <playerId> <target playerId>",
"success": "Summoned %s to %s's world.", "success": "Summoned %s to %s's world.",
"description": "Forces someone to join the world of others" "description": "Forces someone to join the world of others"
}, },
"enter_dungeon": { "enter_dungeon": {
"usage": "Usage: enterdungeon <dungeon id>", "usage": "Usage: enterdungeon <dungeon id>",
"changed": "Changed to dungeon %s", "changed": "Changed to dungeon %s",
"not_found_error": "Dungeon does not exist", "not_found_error": "Dungeon does not exist",
"in_dungeon_error": "You are already in that dungeon", "in_dungeon_error": "You are already in that dungeon",
"description": "Enter a dungeon" "description": "Enter a dungeon"
}, },
"giveAll": { "giveAll": {
"usage": "Usage: giveall [player] [amount]", "usage": "Usage: giveall [player] [amount]",
"started": "Receiving all items...", "started": "Receiving all items...",
"success": "Successfully gave all items to %s.", "success": "Successfully gave all items to %s.",
"invalid_amount_or_playerId": "Invalid amount or player ID.", "invalid_amount_or_playerId": "Invalid amount or player ID.",
"description": "Gives all items" "description": "Gives all items"
}, },
"giveArtifact": { "giveArtifact": {
"usage": "Usage: giveart|gart [player] <artifactId> <mainPropId> [<appendPropId>[,<times>]]... [level]", "usage": "Usage: giveart|gart [player] <artifactId> <mainPropId> [<appendPropId>[,<times>]]... [level]",
"id_error": "Invalid artifact ID.", "id_error": "Invalid artifact ID.",
"success": "Given %s to %s.", "success": "Given %s to %s.",
"description": "Gives the player a specified artifact" "description": "Gives the player a specified artifact"
}, },
"giveChar": { "giveChar": {
"usage": "Usage: givechar <player> <itemId|itemName> [amount]", "usage": "Usage: givechar <player> <itemId|itemName> [amount]",
"given": "Given %s with level %s to %s.", "given": "Given %s with level %s to %s.",
"invalid_avatar_id": "Invalid avatar id.", "invalid_avatar_id": "Invalid avatar id.",
"invalid_avatar_level": "Invalid avatar level.", "invalid_avatar_level": "Invalid avatar level.",
"invalid_avatar_or_player_id": "Invalid avatar or player ID.", "invalid_avatar_or_player_id": "Invalid avatar or player ID.",
"description": "Gives the player a specified character" "description": "Gives the player a specified character"
}, },
"give": { "give": {
"usage": "Usage: give <player> <itemId|itemName> [amount] [level]", "usage": "Usage: give <player> <itemId|itemName> [amount] [level]",
"refinement_only_applicable_weapons": "Refinement is only applicable to weapons.", "refinement_only_applicable_weapons": "Refinement is only applicable to weapons.",
"refinement_must_between_1_and_5": "Refinement must be between 1 and 5.", "refinement_must_between_1_and_5": "Refinement must be between 1 and 5.",
"given": "Given %s of %s to %s.", "given": "Given %s of %s to %s.",
"given_with_level_and_refinement": "Given %s with level %s, refinement %s %s times to %s", "given_with_level_and_refinement": "Given %s with level %s, refinement %s %s times to %s",
"given_level": "Given %s with level %s %s times to %s", "given_level": "Given %s with level %s %s times to %s",
"description": "Gives an item to you or the specified player" "description": "Gives an item to you or the specified player"
}, },
"godmode": { "godmode": {
"success": "Godmode is now %s for %s.", "success": "Godmode is now %s for %s.",
"description": "Prevents you from taking damage. Defaults to toggle." "description": "Prevents you from taking damage. Defaults to toggle."
}, },
"nostamina": { "nostamina": {
"success": "NoStamina is now %s for %s.", "success": "NoStamina is now %s for %s.",
"description": "Keep your endurance to the maximum." "description": "Keep your endurance to the maximum."
}, },
"heal": { "heal": {
"success": "All characters have been healed.", "success": "All characters have been healed.",
"description": "Heal all characters in your current team." "description": "Heal all characters in your current team."
}, },
"join": { "join": {
"usage": "Usage: join [AvatarIDs] such as\"join 10000038 10000039\"", "usage": "Usage: join [AvatarIDs] such as\"join 10000038 10000039\"",
"description": "force join avatar into your team" "description": "force join avatar into your team"
}, },
"kick": { "kick": {
"player_kick_player": "Player [%s:%s] has kicked player [%s:%s]", "player_kick_player": "Player [%s:%s] has kicked player [%s:%s]",
"server_kick_player": "Kicking player [%s:%s]", "server_kick_player": "Kicking player [%s:%s]",
"description": "Kicks the specified player from the server (WIP)" "description": "Kicks the specified player from the server (WIP)"
}, },
"kill": { "kill": {
"usage": "Usage: killall [playerUid] [sceneId]", "usage": "Usage: killall [playerUid] [sceneId]",
"scene_not_found_in_player_world": "Scene not found in player world", "scene_not_found_in_player_world": "Scene not found in player world",
"kill_monsters_in_scene": "Killing %s monsters in scene %s", "kill_monsters_in_scene": "Killing %s monsters in scene %s",
"description": "Kill all entities" "description": "Kill all entities"
}, },
"killCharacter": { "killCharacter": {
"usage": "Usage: /killcharacter [playerId]", "usage": "Usage: /killcharacter [playerId]",
"success": "Killed %s's current character.", "success": "Killed %s's current character.",
"description": "Kills the players current character" "description": "Kills the players current character"
}, },
"language": { "language": {
"current_language": "current language is %s", "current_language": "current language is %s",
"language_changed": "language changed to %s", "language_changed": "language changed to %s",
"language_not_found": "currently, server does not have that language: %s", "language_not_found": "currently, server does not have that language: %s",
"description": "display or change current language" "description": "display or change current language"
}, },
"list": { "list": {
"success": "There are %s player(s) online:", "success": "There are %s player(s) online:",
"description": "List online players" "description": "List online players"
}, },
"permission": { "permission": {
"usage": "Usage: permission <add|remove> <username> <permission>", "usage": "Usage: permission <add|remove> <username> <permission>",
"add": "Permission added.", "add": "Permission added.",
"has_error": "They already have this permission!", "has_error": "They already have this permission!",
"remove": "Permission removed.", "remove": "Permission removed.",
"not_have_error": "They don't have this permission!", "not_have_error": "They don't have this permission!",
"account_error": "The account cannot be found.", "account_error": "The account cannot be found.",
"description": "Grants or removes a permission for a user" "description": "Grants or removes a permission for a user"
}, },
"position": { "position": {
"success": "Coordinates: %s, %s, %s\nScene id: %s", "success": "Coordinates: %s, %s, %s\nScene id: %s",
"description": "Get coordinates." "description": "Get coordinates."
}, },
"quest": { "quest": {
"description": "Add or finish quests", "description": "Add or finish quests",
"usage": "quest <add|finish> [quest id]", "usage": "quest <add|finish> [quest id]",
"added": "Quest %s added", "added": "Quest %s added",
"finished": "Finished quest %s", "finished": "Finished quest %s",
"not_found": "Quest not found", "not_found": "Quest not found",
"invalid_id": "Invalid quest id" "invalid_id": "Invalid quest id"
}, },
"reload": { "reload": {
"reload_start": "Reloading config.", "reload_start": "Reloading config.",
"reload_done": "Reload complete.", "reload_done": "Reload complete.",
"description": "Reload server config" "description": "Reload server config"
}, },
"remove": { "remove": {
"usage": "Usage: remove [indexOfYourTeam] index start from 1", "usage": "Usage: remove [indexOfYourTeam] index start from 1",
"invalid_index": "The index number is illegal. It starts from 1 and the maximum value is the number of roles in the team", "invalid_index": "The index number is illegal. It starts from 1 and the maximum value is the number of roles in the team",
"description": "force remove avatar into your team. Such as `remove 1 2`." "description": "force remove avatar into your team. Such as `remove 1 2`."
}, },
"resetConst": { "resetConst": {
"reset_all": "Reset all avatars' constellations.", "reset_all": "Reset all avatars' constellations.",
"success": "Constellations for %s have been reset. Please relog to see changes.", "success": "Constellations for %s have been reset. Please relog to see changes.",
"description": "Resets the constellation level on your current active character, will need to relog after using the command to see any changes." "description": "Resets the constellation level on your current active character, will need to relog after using the command to see any changes."
}, },
"resetShopLimit": { "resetShopLimit": {
"usage": "Usage: /resetshop <player id>", "usage": "Usage: /resetshop <player id>",
"description": "Reset target player's shop refresh time." "description": "Reset target player's shop refresh time."
}, },
"sendMail": { "sendMail": {
"usage": "Usage: give [player] <itemId|itemName> [amount]", "usage": "Usage: give [player] <itemId|itemName> [amount]",
"user_not_exist": "The user with an id of '%s' does not exist", "user_not_exist": "The user with an id of '%s' does not exist",
"start_composition": "Starting composition of message.\nPlease use `/sendmail <title>` to continue.\nYou can use `/sendmail stop` at any time", "start_composition": "Starting composition of message.\nPlease use `/sendmail <title>` to continue.\nYou can use `/sendmail stop` at any time",
"templates": "Mail templates coming soon implemented...", "templates": "Mail templates coming soon implemented...",
"invalid_arguments": "Invalid arguments.\nUsage `/sendmail <userId|all|help> [templateId]`", "invalid_arguments": "Invalid arguments.\nUsage `/sendmail <userId|all|help> [templateId]`",
"send_cancel": "Message sending cancelled", "send_cancel": "Message sending cancelled",
"send_done": "Message sent to user %s!", "send_done": "Message sent to user %s!",
"send_all_done": "Message sent to all users!", "send_all_done": "Message sent to all users!",
"not_composition_end": "Message composition not at final stage.\nPlease use `/sendmail %s` or `/sendmail stop` to cancel", "not_composition_end": "Message composition not at final stage.\nPlease use `/sendmail %s` or `/sendmail stop` to cancel",
"please_use": "Please use `/sendmail %s`", "please_use": "Please use `/sendmail %s`",
"set_title": "Message title set as '%s'.\nUse '/sendmail <content>' to continue.", "set_title": "Message title set as '%s'.\nUse '/sendmail <content>' to continue.",
"set_contents": "Message contents set as '%s'.\nUse '/sendmail <sender>' to continue.", "set_contents": "Message contents set as '%s'.\nUse '/sendmail <sender>' to continue.",
"set_message_sender": "Message sender set as '%s'.\nUse '/sendmail <itemId|itemName|finish> [amount] [level]' to continue.", "set_message_sender": "Message sender set as '%s'.\nUse '/sendmail <itemId|itemName|finish> [amount] [level]' to continue.",
"send": "Attached %s of %s (level %s) to the message.\nContinue adding more items or use `/sendmail finish` to send the message.", "send": "Attached %s of %s (level %s) to the message.\nContinue adding more items or use `/sendmail finish` to send the message.",
"invalid_arguments_please_use": "Invalid arguments \n Please use `/sendmail %s`", "invalid_arguments_please_use": "Invalid arguments \n Please use `/sendmail %s`",
"title": "<title>", "title": "<title>",
"message": "<message>", "message": "<message>",
"sender": "<sender>", "sender": "<sender>",
"arguments": "<itemId|itemName|finish> [amount] [level]", "arguments": "<itemId|itemName|finish> [amount] [level]",
"error": "ERROR: invalid construction stage %s. Check console for stacktrace.", "error": "ERROR: invalid construction stage %s. Check console for stacktrace.",
"description": "Sends mail to the specified user. The usage of this command changes based on it's composition state." "description": "Sends mail to the specified user. The usage of this command changes based on it's composition state."
}, },
"sendMessage": { "sendMessage": {
"usage": "Usage: sendmessage <player> <message>", "usage": "Usage: sendmessage <player> <message>",
"success": "Message sent.", "success": "Message sent.",
"description": "Sends a message to a player as the server" "description": "Sends a message to a player as the server"
}, },
"setFetterLevel": { "setFetterLevel": {
"usage": "Usage: setfetterlevel <level>", "usage": "Usage: setfetterlevel <level>",
"range_error": "Fetter level must be between 0 and 10.", "range_error": "Fetter level must be between 0 and 10.",
"success": "Fetter level set to %s", "success": "Fetter level set to %s",
"level_error": "Invalid fetter level.", "level_error": "Invalid fetter level.",
"description": "Sets your fetter level for your current active character" "description": "Sets your fetter level for your current active character"
}, },
"setStats": { "setStats": {
"usage_console": "Usage: setstats|stats @<UID> <stat> <value>", "usage_console": "Usage: setstats|stats @<UID> <stat> <value>",
"usage_ingame": "Usage: setstats|stats [@UID] <stat> <value>", "usage_ingame": "Usage: setstats|stats [@UID] <stat> <value>",
"help_message": "\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", "help_message": "\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",
"value_error": "Invalid stat value.", "value_error": "Invalid stat value.",
"uid_error": "Invalid UID.", "uid_error": "Invalid UID.",
"player_error": "Player not found or offline.", "player_error": "Player not found or offline.",
"set_self": "%s set to %s.", "set_self": "%s set to %s.",
"set_for_uid": "%s for %s set to %s.", "set_for_uid": "%s for %s set to %s.",
"set_max_hp": "MAX HP set to %s.", "set_max_hp": "MAX HP set to %s.",
"description": "Set fight property for your current active character" "description": "Set fight property for your current active character"
}, },
"setWorldLevel": { "setWorldLevel": {
"usage": "Usage: setworldlevel <level>", "usage": "Usage: setworldlevel <level>",
"value_error": "World level must be between 0-8", "value_error": "World level must be between 0-8",
"success": "World level set to %s.", "success": "World level set to %s.",
"invalid_world_level": "Invalid world level.", "invalid_world_level": "Invalid world level.",
"description": "Sets your world level (Relog to see proper effects)" "description": "Sets your world level (Relog to see proper effects)"
}, },
"spawn": { "spawn": {
"usage": "Usage: spawn <entityId> [amount] [level(monster only)]", "usage": "Usage: spawn <entityId> [amount] [level(monster only)]",
"success": "Spawned %s of %s.", "success": "Spawned %s of %s.",
"description": "Spawns an entity near you" "description": "Spawns an entity near you"
}, },
"stop": { "stop": {
"success": "Server shutting down...", "success": "Server shutting down...",
"description": "Stops the server" "description": "Stops the server"
}, },
"talent": { "talent": {
"usage_1": "To set talent level: /talent set <talentID> <value>", "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_2": "Another way to set talent level: /talent <n or e or q> <value>",
"usage_3": "To get talent ID: /talent getid", "usage_3": "To get talent ID: /talent getid",
"lower_16": "Invalid talent level. Level should be lower than 16", "lower_16": "Invalid talent level. Level should be lower than 16",
"set_id": "Set talent to %s.", "set_id": "Set talent to %s.",
"set_atk": "Set talent Normal ATK to %s.", "set_atk": "Set talent Normal ATK to %s.",
"set_e": "Set talent E to %s.", "set_e": "Set talent E to %s.",
"set_q": "Set talent Q to %s.", "set_q": "Set talent Q to %s.",
"invalid_skill_id": "Invalid skill ID.", "invalid_skill_id": "Invalid skill ID.",
"set_this": "Set this talent to %s.", "set_this": "Set this talent to %s.",
"invalid_level": "Invalid talent level.", "invalid_level": "Invalid talent level.",
"normal_attack_id": "Normal Attack ID %s.", "normal_attack_id": "Normal Attack ID %s.",
"e_skill_id": "E skill ID %s.", "e_skill_id": "E skill ID %s.",
"q_skill_id": "Q skill ID %s.", "q_skill_id": "Q skill ID %s.",
"description": "Set talent level for your current active character" "description": "Set talent level for your current active character"
}, },
"teleportAll": { "team": {
"success": "Summoned all players to your location.", "usage": "Usage: team <add|remove|set> [avatarId,...] [index|first|last|index-index,...]",
"error": "You only can use this command in MP mode.", "invalid_usage": "invalid usage",
"description": "Teleports all players in your world to your position" "add_usage": "usage(add): team add <avatarId,...> [index]",
}, "invalid_index": "index is invalid",
"teleport": { "add_too_much": "server is only allow you to add %d avatar(s)",
"usage_server": "Usage: /tp @<player id> <x> <y> <z> [scene id]", "failed_to_add_avatar": "failed to add avatar by id: %s",
"usage": "Usage: /tp [@<player id>] <x> <y> <z> [scene id]", "remove_usage": "usage(remove): team remove <index|first|last|index-index,...>",
"specify_player_id": "You must specify a player id.", "failed_parse_index": "failed to parse index: %s",
"invalid_position": "Invalid position.", "remove_too_much": "you can't remove so much avatars",
"success": "Teleported %s to %s, %s, %s in scene %s", "ignore_index": "ignored index(es): %s",
"description": "Change the player's position." "set_usage": "usage(set): team set <index> <avatarId>",
}, "index_out_of_range": "index your specified is out of range",
"tower": { "failed_parse_avatar_id": "failed to parse avatar id: %s",
"unlock_done": "Abyss Corridor's Floors are all unlocked now." "avatar_already_in_team": "avatar is already in team",
}, "avatar_not_found": "avatar not found: %d",
"weather": { "description": "modify your team manually"
"usage": "Usage: weather <weatherId> [climateId]", },
"success": "Changed weather to %s with climate %s", "teleportAll": {
"invalid_id": "Invalid ID.", "success": "Summoned all players to your location.",
"description": "Changes the weather." "error": "You only can use this command in MP mode.",
}, "description": "Teleports all players in your world to your position"
"drop": { },
"command_usage": "Usage: drop <itemId|itemName> [amount]", "teleport": {
"success": "Dropped %s of %s.", "usage_server": "Usage: /tp @<player id> <x> <y> <z> [scene id]",
"description": "Drops an item near you" "usage": "Usage: /tp [@<player id>] <x> <y> <z> [scene id]",
}, "specify_player_id": "You must specify a player id.",
"help": { "invalid_position": "Invalid position.",
"usage": "Usage: ", "success": "Teleported %s to %s, %s, %s in scene %s",
"aliases": "Aliases: ", "description": "Change the player's position."
"available_commands": "Available commands: ", },
"description": "Sends the help message or shows information about a specified command" "tower": {
}, "unlock_done": "Abyss Corridor's Floors are all unlocked now."
"restart": { },
"description": "Restarts the current session" "weather": {
}, "usage": "Usage: weather <weatherId> [climateId]",
"unlocktower": { "success": "Changed weather to %s with climate %s",
"success": "unlock done", "invalid_id": "Invalid ID.",
"description": "Unlock all levels of tower" "description": "Changes the weather."
}, },
"resetshop": { "drop": {
"description": "reset shop" "command_usage": "Usage: drop <itemId|itemName> [amount]",
} "success": "Dropped %s of %s.",
}, "description": "Drops an item near you"
"gacha": { },
"details": { "help": {
"title": "Banner Details", "usage": "Usage: ",
"available_five_stars": "Available 5-star Items", "aliases": "Aliases: ",
"available_four_stars": "Available 4-star Items", "available_commands": "Available commands: ",
"available_three_stars": "Available 3-star Items", "description": "Sends the help message or shows information about a specified command"
"template_missing": "data/gacha_details.html is missing." },
} "restart": {
} "description": "Restarts the current session"
} },
"unlocktower": {
"success": "unlock done",
"description": "Unlock all levels of tower"
},
"resetshop": {
"description": "reset shop"
}
},
"gacha": {
"details": {
"title": "Banner Details",
"available_five_stars": "Available 5-star Items",
"available_four_stars": "Available 4-star Items",
"available_three_stars": "Available 3-star Items",
"template_missing": "data/gacha_details.html is missing."
}
}
}
{ {
"messages": { "messages": {
"game": { "game": {
"port_bind": "游戏服务器已在端口 %s 上启动", "port_bind": "游戏服务器已在端口 %s 上启动",
"connect": "客户端 %s 已连接", "connect": "客户端 %s 已连接",
"disconnect": "客户端 %s 已断开连接", "disconnect": "客户端 %s 已断开连接",
"game_update_error": "游戏更新时发生错误", "game_update_error": "游戏更新时发生错误",
"command_error": "命令发生错误:" "command_error": "命令发生错误:"
}, },
"dispatch": { "dispatch": {
"port_bind": "[Dispatch] 服务器已在端口 %s 上启动", "port_bind": "[Dispatch] 服务器已在端口 %s 上启动",
"request": "[Dispatch] 客户端 %s 请求:%s %s", "request": "[Dispatch] 客户端 %s 请求:%s %s",
"keystore": { "keystore": {
"general_error": "[Dispatch] 加载 keystore 文件时发生错误!", "general_error": "[Dispatch] 加载 keystore 文件时发生错误!",
"password_error": "[Dispatch] 加载 keystore 失败。正在尝试使用 keystore 默认密码...", "password_error": "[Dispatch] 加载 keystore 失败。正在尝试使用 keystore 默认密码...",
"no_keystore_error": "[Dispatch] 未找到 SSL 证书!已降级到 HTTP 模式", "no_keystore_error": "[Dispatch] 未找到 SSL 证书!已降级到 HTTP 模式",
"default_password": "[Dispatch] 成功加载 keystore 默认密码。请考虑将 config.json 的默认密码设置为 123456" "default_password": "[Dispatch] 成功加载 keystore 默认密码。请考虑将 config.json 的默认密码设置为 123456"
}, },
"authentication": { "authentication": {
"default_unable_to_verify": "[Authentication] 称为 verifyUser 的方法在默认验证程序中不可用" "default_unable_to_verify": "[Authentication] 称为 verifyUser 的方法在默认验证程序中不可用"
}, },
"no_commands_error": "此命令不适用于 Dispatch-only 模式", "no_commands_error": "此命令不适用于 Dispatch-only 模式",
"unhandled_request_error": "[Dispatch] 潜在的未处理请求:%s %s", "unhandled_request_error": "[Dispatch] 潜在的未处理请求:%s %s",
"account": { "account": {
"login_attempt": "[Dispatch] 客户端 %s 正在尝试登录", "login_attempt": "[Dispatch] 客户端 %s 正在尝试登录",
"login_success": "[Dispatch] 客户端 %s 已登录,UID 为 %s", "login_success": "[Dispatch] 客户端 %s 已登录,UID 为 %s",
"login_token_attempt": "[Dispatch] 客户端 %s 正在尝试使用 token 登录", "login_token_attempt": "[Dispatch] 客户端 %s 正在尝试使用 token 登录",
"login_token_error": "[Dispatch] 客户端 %s 使用 token 登录失败", "login_token_error": "[Dispatch] 客户端 %s 使用 token 登录失败",
"login_token_success": "[Dispatch] 客户端 %s 已通过 token 登录,UID 为 %s", "login_token_success": "[Dispatch] 客户端 %s 已通过 token 登录,UID 为 %s",
"combo_token_success": "[Dispatch] 客户端 %s 交换 token 成功", "combo_token_success": "[Dispatch] 客户端 %s 交换 token 成功",
"combo_token_error": "[Dispatch] 客户端 %s 交换 token 失败", "combo_token_error": "[Dispatch] 客户端 %s 交换 token 失败",
"account_login_create_success": "[Dispatch] 客户端 %s 登录失败: 已注册 UID 为 %s 的账号", "account_login_create_success": "[Dispatch] 客户端 %s 登录失败: 已注册 UID 为 %s 的账号",
"account_login_create_error": "[Dispatch] 客户端 %s 登录失败:账号创建失败。", "account_login_create_error": "[Dispatch] 客户端 %s 登录失败:账号创建失败。",
"account_login_exist_error": "[Dispatch] 客户端 %s 登录失败:账号不存在", "account_login_exist_error": "[Dispatch] 客户端 %s 登录失败:账号不存在",
"account_cache_error": "游戏账号缓存信息错误", "account_cache_error": "游戏账号缓存信息错误",
"session_key_error": "会话密钥错误。", "session_key_error": "会话密钥错误。",
"username_error": "未找到此用户名。", "username_error": "未找到此用户名。",
"username_create_error": "未找到用户名,建立连接失败。" "username_create_error": "未找到用户名,建立连接失败。"
} }
}, },
"status": { "status": {
"free_software": "Grasscutter 是免费开源软件,遵循 AGPL-3.0 license。如果你是付费购买的,那你已经被骗了。项目地址:https://github.com/Grasscutters/Grasscutter", "free_software": "Grasscutter 是免费开源软件,遵循 AGPL-3.0 license。如果你是付费购买的,那你已经被骗了。项目地址:https://github.com/Grasscutters/Grasscutter",
"starting": "正在启动 Grasscutter...", "starting": "正在启动 Grasscutter...",
"shutdown": "正在关闭...", "shutdown": "正在关闭...",
"done": "加载完成!输入 \"help\" 查看命令列表", "done": "加载完成!输入 \"help\" 查看命令列表",
"error": "发生了一个错误。", "error": "发生了一个错误。",
"welcome": "欢迎使用 Grasscutter!珍惜这段美妙的旅途吧!", "welcome": "欢迎使用 Grasscutter!珍惜这段美妙的旅途吧!",
"run_mode_error": "无效的服务器运行模式:%s。", "run_mode_error": "无效的服务器运行模式:%s。",
"run_mode_help": "服务器运行模式必须为 HYBRID、DISPATCH_ONLY 或 GAME_ONLY。Grasscutter 启动失败...", "run_mode_help": "服务器运行模式必须为 HYBRID、DISPATCH_ONLY 或 GAME_ONLY。Grasscutter 启动失败...",
"create_resources": "正在创建 resources 目录...", "create_resources": "正在创建 resources 目录...",
"resources_error": "请将 BinOutput 和 ExcelBinOutput 复制到 resources 目录。", "resources_error": "请将 BinOutput 和 ExcelBinOutput 复制到 resources 目录。",
"version": "Grasscutter 版本: %s-%s" "version": "Grasscutter 版本: %s-%s"
} }
}, },
"commands": { "commands": {
"generic": { "generic": {
"not_specified": "没有指定命令。", "not_specified": "没有指定命令。",
"unknown_command": "未知的命令:%s", "unknown_command": "未知的命令:%s",
"permission_error": "哼哼哼!你没有执行此命令的权限!请联系服务器管理员解决!", "permission_error": "哼哼哼!你没有执行此命令的权限!请联系服务器管理员解决!",
"console_execute_error": "此命令只能在服务器控制台执行呐~", "console_execute_error": "此命令只能在服务器控制台执行呐~",
"player_execute_error": "此命令只能在游戏内执行哦~", "player_execute_error": "此命令只能在游戏内执行哦~",
"command_exist_error": "这条命令...好像找不到呢?", "command_exist_error": "这条命令...好像找不到呢?",
"no_description_specified": "没有指定说明", "no_description_specified": "没有指定说明",
"invalid": { "invalid": {
"amount": "无效的数量。", "amount": "无效的数量。",
"artifactId": "无效的圣遗物ID。", "artifactId": "无效的圣遗物ID。",
"avatarId": "无效的角色ID。", "avatarId": "无效的角色ID。",
"avatarLevel": "无效的角色等级。", "avatarLevel": "无效的角色等级。",
"entityId": "无效的实体ID。", "entityId": "无效的实体ID。",
"itemId": "无效的物品ID。", "itemId": "无效的物品ID。",
"itemLevel": "无效的物品等级。", "itemLevel": "无效的物品等级。",
"itemRefinement": "无效的物品精炼等级。", "itemRefinement": "无效的物品精炼等级。",
"playerId": "无效的玩家ID。", "playerId": "无效的玩家ID。",
"uid": "无效的UID。" "uid": "无效的UID。"
} }
}, },
"execution": { "execution": {
"uid_error": "无效的UID。", "uid_error": "无效的UID。",
"player_exist_error": "玩家不存在。", "player_exist_error": "玩家不存在。",
"player_offline_error": "玩家已离线。", "player_offline_error": "玩家已离线。",
"item_id_error": "无效的物品ID。", "item_id_error": "无效的物品ID。",
"item_player_exist_error": "无效的物品/玩家UID。", "item_player_exist_error": "无效的物品/玩家UID。",
"entity_id_error": "无效的实体ID。", "entity_id_error": "无效的实体ID。",
"player_exist_offline_error": "玩家不存在或已离线。", "player_exist_offline_error": "玩家不存在或已离线。",
"argument_error": "无效的参数。", "argument_error": "无效的参数。",
"clear_target": "目标已清除。", "clear_target": "目标已清除。",
"set_target": "随后的的命令都会以 @%s 为预设。", "set_target": "随后的的命令都会以 @%s 为预设。",
"need_target": "此命令需要一个目标 UID。添加 <@UID> 参数或使用 /target @UID 来指定默认目标。" "need_target": "此命令需要一个目标 UID。添加 <@UID> 参数或使用 /target @UID 来指定默认目标。"
}, },
"status": { "status": {
"enabled": "已启用", "enabled": "已启用",
"disabled": "未启用", "disabled": "未启用",
"help": "帮助", "help": "帮助",
"success": "成功" "success": "成功"
}, },
"account": { "account": {
"modify": "修改用户账号", "modify": "修改用户账号",
"invalid": "无效的UID。", "invalid": "无效的UID。",
"exists": "账号已存在。", "exists": "账号已存在。",
"create": "已创建账号,UID 为 %s。", "create": "已创建账号,UID 为 %s。",
"delete": "账号已删除。", "delete": "账号已删除。",
"no_account": "账号不存在。", "no_account": "账号不存在。",
"command_usage": "用法:account <create|delete> <用户名> [UID]", "command_usage": "用法:account <create|delete> <用户名> [UID]",
"description": "创建或删除账号" "description": "创建或删除账号"
}, },
"broadcast": { "broadcast": {
"command_usage": "用法:broadcast <消息>", "command_usage": "用法:broadcast <消息>",
"message_sent": "公告已发送。", "message_sent": "公告已发送。",
"description": "向所有玩家发送公告" "description": "向所有玩家发送公告"
}, },
"changescene": { "changescene": {
"usage": "用法:changescene <场景ID>", "usage": "用法:changescene <场景ID>",
"already_in_scene": "你已经在这个场景中了。", "already_in_scene": "你已经在这个场景中了。",
"success": "已切换至场景 %s。", "success": "已切换至场景 %s。",
"exists_error": "此场景不存在。", "exists_error": "此场景不存在。",
"description": "切换指定场景" "description": "切换指定场景"
}, },
"clear": { "clear": {
"command_usage": "用法:clear <all|wp|art|mat>\nall: 所有, wp: 武器, art: 圣遗物, mat: 材料", "command_usage": "用法:clear <all|wp|art|mat>\nall: 所有, wp: 武器, art: 圣遗物, mat: 材料",
"weapons": "已清除 %s 的武器。", "weapons": "已清除 %s 的武器。",
"artifacts": "已清除 %s 的圣遗物。", "artifacts": "已清除 %s 的圣遗物。",
"materials": "已清除 %s 的材料。", "materials": "已清除 %s 的材料。",
"furniture": "已清除 %s 的尘歌壶家具。", "furniture": "已清除 %s 的尘歌壶家具。",
"displays": "已清空 %s 的屏幕。", "displays": "已清空 %s 的屏幕。",
"virtuals": "已清除 %s 的所有货币和经验值。", "virtuals": "已清除 %s 的所有货币和经验值。",
"everything": "已清除 %s 的所有物品。", "everything": "已清除 %s 的所有物品。",
"description": "从你的背包中删除所有未装备且已解锁的物品,包括稀有物品" "description": "从你的背包中删除所有未装备且已解锁的物品,包括稀有物品"
}, },
"coop": { "coop": {
"usage": "用法:coop <玩家ID> <目标玩家ID>", "usage": "用法:coop <玩家ID> <目标玩家ID>",
"success": "已强制传送 %s 到 %s 的世界。", "success": "已强制传送 %s 到 %s 的世界。",
"description": "强制传送指定用户到他人的世界" "description": "强制传送指定用户到他人的世界"
}, },
"enter_dungeon": { "enter_dungeon": {
"usage": "用法:enterdungeon <秘境ID>", "usage": "用法:enterdungeon <秘境ID>",
"changed": "已进入秘境 %s。", "changed": "已进入秘境 %s。",
"not_found_error": "此秘境不存在。", "not_found_error": "此秘境不存在。",
"in_dungeon_error": "你已经在秘境中了。", "in_dungeon_error": "你已经在秘境中了。",
"description": "进入指定秘境" "description": "进入指定秘境"
}, },
"giveAll": { "giveAll": {
"usage": "用法:giveall [玩家] [数量]", "usage": "用法:giveall [玩家] [数量]",
"started": "正在给予全部物品...", "started": "正在给予全部物品...",
"success": "已给予 %s 全部物品。", "success": "已给予 %s 全部物品。",
"invalid_amount_or_playerId": "无效的数量/玩家ID。", "invalid_amount_or_playerId": "无效的数量/玩家ID。",
"description": "给予所有物品" "description": "给予所有物品"
}, },
"nostamina": { "nostamina": {
"success": "NoStamina %s 对于 %s.", "success": "NoStamina %s 对于 %s.",
"description": "保持你的体力处于最高状态。" "description": "保持你的体力处于最高状态。"
}, },
"giveArtifact": { "giveArtifact": {
"usage": "用法:giveart|gart [玩家] <圣遗物ID> <主词条ID> [<副词条ID>[,<强化次数>]]... [等级]", "usage": "用法:giveart|gart [玩家] <圣遗物ID> <主词条ID> [<副词条ID>[,<强化次数>]]... [等级]",
"id_error": "无效的圣遗物ID。", "id_error": "无效的圣遗物ID。",
"success": "已将 %s 给予 %s。", "success": "已将 %s 给予 %s。",
"description": "给予指定圣遗物" "description": "给予指定圣遗物"
}, },
"giveChar": { "giveChar": {
"usage": "用法:givechar <玩家> <角色ID|角色名> [数量]", "usage": "用法:givechar <玩家> <角色ID|角色名> [数量]",
"given": "已将角色 %s [等级 %s] 给与 %s。", "given": "已将角色 %s [等级 %s] 给与 %s。",
"invalid_avatar_id": "无效的角色ID。", "invalid_avatar_id": "无效的角色ID。",
"invalid_avatar_level": "无效的角色等级。", "invalid_avatar_level": "无效的角色等级。",
"invalid_avatar_or_player_id": "无效的角色ID/玩家ID。", "invalid_avatar_or_player_id": "无效的角色ID/玩家ID。",
"description": "给予指定角色" "description": "给予指定角色"
}, },
"give": { "give": {
"usage": "用法:give <玩家> <物品ID|物品名> [数量] [等级] [精炼等级]", "usage": "用法:give <玩家> <物品ID|物品名> [数量] [等级] [精炼等级]",
"refinement_only_applicable_weapons": "只有武器可以设置精炼等级。", "refinement_only_applicable_weapons": "只有武器可以设置精炼等级。",
"refinement_must_between_1_and_5": "精炼等级必须在 1 到 5 之间。", "refinement_must_between_1_and_5": "精炼等级必须在 1 到 5 之间。",
"given": "已将 %s 个 %s 给予 %s。", "given": "已将 %s 个 %s 给予 %s。",
"given_with_level_and_refinement": "已将 %s [等级 %s, 精炼 %s] %s 个给予 %s。", "given_with_level_and_refinement": "已将 %s [等级 %s, 精炼 %s] %s 个给予 %s。",
"given_level": "已将 %s [等级 %s] %s 个给予 %s。", "given_level": "已将 %s [等级 %s] %s 个给予 %s。",
"description": "给予指定物品" "description": "给予指定物品"
}, },
"godmode": { "godmode": {
"success": "上帝模式已设为 %s。[用户:%s]", "success": "上帝模式已设为 %s。[用户:%s]",
"description": "防止你受到伤害" "description": "防止你受到伤害"
}, },
"heal": { "heal": {
"success": "已治疗所有角色。", "success": "已治疗所有角色。",
"description": "治疗当前队伍的角色" "description": "治疗当前队伍的角色"
}, },
"join": { "join": {
"usage": "用法:join <角色IDs> 例如\"join 10000038 10000039\"空格分开", "usage": "用法:join <角色IDs> 例如\"join 10000038 10000039\"空格分开",
"description": "强制将角色加入到当前队伍中" "description": "强制将角色加入到当前队伍中"
}, },
"kick": { "kick": {
"player_kick_player": "玩家 [%s:%s] 已将 [%s:%s] 踢出。", "player_kick_player": "玩家 [%s:%s] 已将 [%s:%s] 踢出。",
"server_kick_player": "正在踢出玩家 [%s:%s]...", "server_kick_player": "正在踢出玩家 [%s:%s]...",
"description": "从服务器内踢出指定玩家" "description": "从服务器内踢出指定玩家"
}, },
"kill": { "kill": {
"usage": "用法:killall [玩家UID] [场景ID]", "usage": "用法:killall [玩家UID] [场景ID]",
"scene_not_found_in_player_world": "未在玩家世界中找到此场景。", "scene_not_found_in_player_world": "未在玩家世界中找到此场景。",
"kill_monsters_in_scene": "已杀死场景 %s 中的 %s 个怪物。", "kill_monsters_in_scene": "已杀死场景 %s 中的 %s 个怪物。",
"description": "杀死所有怪物" "description": "杀死所有怪物"
}, },
"killCharacter": { "killCharacter": {
"usage": "用法:/killcharacter [玩家ID]", "usage": "用法:/killcharacter [玩家ID]",
"success": "已杀死 %s 当前角色。", "success": "已杀死 %s 当前角色。",
"description": "杀死当前角色" "description": "杀死当前角色"
}, },
"language": { "language": {
"current_language": "当前语言是: %s", "current_language": "当前语言是: %s",
"language_changed": "语言切换至: %s", "language_changed": "语言切换至: %s",
"language_not_found": "目前服务端没有这种语言: %s", "language_not_found": "目前服务端没有这种语言: %s",
"description": "显示或切换当前语言" "description": "显示或切换当前语言"
}, },
"list": { "list": {
"success": "目前在线人数:%s", "success": "目前在线人数:%s",
"description": "查看所有玩家" "description": "查看所有玩家"
}, },
"permission": { "permission": {
"usage": "用法:permission <add|remove> <用户名> <权限>", "usage": "用法:permission <add|remove> <用户名> <权限>",
"add": "权限已添加。", "add": "权限已添加。",
"has_error": "此玩家已拥有此权限!", "has_error": "此玩家已拥有此权限!",
"remove": "权限已移除。", "remove": "权限已移除。",
"not_have_error": "此玩家未拥有权限!", "not_have_error": "此玩家未拥有权限!",
"account_error": "账号不存在。", "account_error": "账号不存在。",
"description": "添加或移除指定玩家的权限" "description": "添加或移除指定玩家的权限"
}, },
"position": { "position": {
"success": "坐标:%s, %s, %s\n场景ID:%s", "success": "坐标:%s, %s, %s\n场景ID:%s",
"description": "获取所在位置" "description": "获取所在位置"
}, },
"quest": { "quest": {
"description": "添加或完成任务", "description": "添加或完成任务",
"usage": "quest <add|finish> [任务ID]", "usage": "quest <add|finish> [任务ID]",
"added": "已添加任务 %s", "added": "已添加任务 %s",
"finished": "已完成任务 %s", "finished": "已完成任务 %s",
"not_found": "未找到任务", "not_found": "未找到任务",
"invalid_id": "无效的任务ID" "invalid_id": "无效的任务ID"
}, },
"reload": { "reload": {
"reload_start": "正在重载配置文件和数据。", "reload_start": "正在重载配置文件和数据。",
"reload_done": "重载完成。", "reload_done": "重载完成。",
"description": "重载配置文件和数据" "description": "重载配置文件和数据"
}, },
"remove": { "remove": {
"usage": "用法: remove [多个角色在队伍中的序号] 序号从1开始", "usage": "用法: remove [多个角色在队伍中的序号] 序号从1开始",
"invalid_index": "序号不合法,从1开始,最大值为队内角色数量", "invalid_index": "序号不合法,从1开始,最大值为队内角色数量",
"description": "强制将某个角色从当前队伍中移除。例如`remove 1 2`表示将1号和2号角色从队伍中移除" "description": "强制将某个角色从当前队伍中移除。例如`remove 1 2`表示将1号和2号角色从队伍中移除"
}, },
"resetConst": { "resetConst": {
"reset_all": "重置所有角色的命座。", "reset_all": "重置所有角色的命座。",
"success": "已重置 %s 的命座,重新登录后生效。", "success": "已重置 %s 的命座,重新登录后生效。",
"description": "重置当前角色的命之座,执行命令后需重新登录以生效" "description": "重置当前角色的命之座,执行命令后需重新登录以生效"
}, },
"resetShopLimit": { "resetShopLimit": {
"usage": "用法:/resetshop <玩家ID>", "usage": "用法:/resetshop <玩家ID>",
"description": "重置所选玩家的商店刷新时间" "description": "重置所选玩家的商店刷新时间"
}, },
"sendMail": { "sendMail": {
"usage": "用法:give [玩家] <物品ID|物品名称> [数量]", "usage": "用法:give [玩家] <物品ID|物品名称> [数量]",
"user_not_exist": "ID '%s' 的用户不存在。", "user_not_exist": "ID '%s' 的用户不存在。",
"start_composition": "发送邮件流程。\n请使用`/sendmail <标题>`前进到下一步。\n你可以在任何时间使用`/sendmail stop`来停止发送。", "start_composition": "发送邮件流程。\n请使用`/sendmail <标题>`前进到下一步。\n你可以在任何时间使用`/sendmail stop`来停止发送。",
"templates": "邮件模板尚未实装...", "templates": "邮件模板尚未实装...",
"invalid_arguments": "无效的参数。\n指令使用方法 `/sendmail <用户ID|all|help> [模板ID]`", "invalid_arguments": "无效的参数。\n指令使用方法 `/sendmail <用户ID|all|help> [模板ID]`",
"send_cancel": "取消发送邮件", "send_cancel": "取消发送邮件",
"send_done": "已将邮件发送给 %s!", "send_done": "已将邮件发送给 %s!",
"send_all_done": "邮件已发送给所有人!", "send_all_done": "邮件已发送给所有人!",
"not_composition_end": "现在邮件发送未到最后阶段。\n请使用 `/sendmail %s` 继续发送邮件,或使用 `/sendmail stop` 来停止发送邮件。", "not_composition_end": "现在邮件发送未到最后阶段。\n请使用 `/sendmail %s` 继续发送邮件,或使用 `/sendmail stop` 来停止发送邮件。",
"please_use": "请使用 `/sendmail %s`", "please_use": "请使用 `/sendmail %s`",
"set_title": "成功将邮件标题设置为 '%s'。\n使用 '/sendmail <正文>' 来设置邮件内容。", "set_title": "成功将邮件标题设置为 '%s'。\n使用 '/sendmail <正文>' 来设置邮件内容。",
"set_contents": "成功将邮件内容设置为 '%s'。\n使用 '/sendmail <发件人>' 来设置发件人。", "set_contents": "成功将邮件内容设置为 '%s'。\n使用 '/sendmail <发件人>' 来设置发件人。",
"set_message_sender": "发件人已设置为 '%s'。\n使用 '/sendmail <物品ID|物品名称|finish> [数量] [等级]' 来添加附件。", "set_message_sender": "发件人已设置为 '%s'。\n使用 '/sendmail <物品ID|物品名称|finish> [数量] [等级]' 来添加附件。",
"send": "已添加 %s 个 %s (等级 %s) 邮件附件。\n如果没有要继续添加的附件请使用 `/sendmail finish` 来发送邮件。", "send": "已添加 %s 个 %s (等级 %s) 邮件附件。\n如果没有要继续添加的附件请使用 `/sendmail finish` 来发送邮件。",
"invalid_arguments_please_use": "错误的参数 \n请使用 `/sendmail %s`", "invalid_arguments_please_use": "错误的参数 \n请使用 `/sendmail %s`",
"title": "<标题>", "title": "<标题>",
"message": "<正文>", "message": "<正文>",
"sender": "<发件人>", "sender": "<发件人>",
"arguments": "<物品ID|物品名称|finish> [数量] [等级]", "arguments": "<物品ID|物品名称|finish> [数量] [等级]",
"error": "错误:无效的编写阶段 %s。需要 StackTrace 请查看服务器控制台。", "error": "错误:无效的编写阶段 %s。需要 StackTrace 请查看服务器控制台。",
"description": "向指定用户发送邮件。此命令的用法可根据附加的参数而变化" "description": "向指定用户发送邮件。此命令的用法可根据附加的参数而变化"
}, },
"sendMessage": { "sendMessage": {
"usage": "用法:sendmessage <玩家> <消息>", "usage": "用法:sendmessage <玩家> <消息>",
"success": "消息已发送。", "success": "消息已发送。",
"description": "向指定玩家发送消息" "description": "向指定玩家发送消息"
}, },
"setFetterLevel": { "setFetterLevel": {
"usage": "用法:setfetterlevel <好感度等级>", "usage": "用法:setfetterlevel <好感度等级>",
"range_error": "好感度等级必须在 0 到 10 之间。", "range_error": "好感度等级必须在 0 到 10 之间。",
"success": "好感度已设为 %s 级。", "success": "好感度已设为 %s 级。",
"level_error": "无效的好感度等级。", "level_error": "无效的好感度等级。",
"description": "设置当前角色的好感度等级" "description": "设置当前角色的好感度等级"
}, },
"setStats": { "setStats": {
"usage_console": "用法:setstats|stats @<UID> <属性> <数值>", "usage_console": "用法:setstats|stats @<UID> <属性> <数值>",
"usage_ingame": "用法:setstats|stats [@UID] <属性> <数值>", "usage_ingame": "用法:setstats|stats [@UID] <属性> <数值>",
"help_message": "\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", "help_message": "\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",
"value_error": "无效的属性值。", "value_error": "无效的属性值。",
"uid_error": "无效的UID。", "uid_error": "无效的UID。",
"player_error": "玩家不存在或已离线。", "player_error": "玩家不存在或已离线。",
"set_self": "%s 已设为 %s。", "set_self": "%s 已设为 %s。",
"set_for_uid": "%s [来自 %s] 已设为 %s。", "set_for_uid": "%s [来自 %s] 已设为 %s。",
"set_max_hp": "最大生命值已设为 %s。", "set_max_hp": "最大生命值已设为 %s。",
"description": "设置当前角色的属性" "description": "设置当前角色的属性"
}, },
"setWorldLevel": { "setWorldLevel": {
"usage": "用法:setworldlevel <等级>", "usage": "用法:setworldlevel <等级>",
"value_error": "世界等级必须设置在0-8之间。", "value_error": "世界等级必须设置在0-8之间。",
"success": "世界等级已设为 %s。", "success": "世界等级已设为 %s。",
"invalid_world_level": "无效的世界等级。", "invalid_world_level": "无效的世界等级。",
"description": "设置世界等级,执行命令后需重新登录以生效" "description": "设置世界等级,执行命令后需重新登录以生效"
}, },
"spawn": { "spawn": {
"usage": "用法:spawn <实体ID> [数量] [等级(仅怪物)]", "usage": "用法:spawn <实体ID> [数量] [等级(仅怪物)]",
"success": "已生成 %s 个 %s。", "success": "已生成 %s 个 %s。",
"description": "在你附近生成一个生物" "description": "在你附近生成一个生物"
}, },
"stop": { "stop": {
"success": "正在关闭服务器...", "success": "正在关闭服务器...",
"description": "停止服务器" "description": "停止服务器"
}, },
"talent": { "talent": {
"usage_1": "设置天赋等级:/talent set <天赋ID> <数值>", "usage_1": "设置天赋等级:/talent set <天赋ID> <数值>",
"usage_2": "另一种设置天赋等级的方法:/talent <n (普通攻击) | e (元素战技) | q (元素爆发)> <数值>", "usage_2": "另一种设置天赋等级的方法:/talent <n (普通攻击) | e (元素战技) | q (元素爆发)> <数值>",
"usage_3": "获取天赋ID:/talent getid", "usage_3": "获取天赋ID:/talent getid",
"lower_16": "无效的天赋等级,天赋等级应小于等于15。", "lower_16": "无效的天赋等级,天赋等级应小于等于15。",
"set_id": "将天赋等级设为 %s。", "set_id": "将天赋等级设为 %s。",
"set_atk": "将普通攻击等级设为 %s。", "set_atk": "将普通攻击等级设为 %s。",
"set_e": "将元素战技等级设为 %s。", "set_e": "将元素战技等级设为 %s。",
"set_q": "将元素爆发等级设为 %s。", "set_q": "将元素爆发等级设为 %s。",
"invalid_skill_id": "无效的技能ID。", "invalid_skill_id": "无效的技能ID。",
"set_this": "将天赋等级设为 %s。", "set_this": "将天赋等级设为 %s。",
"invalid_level": "无效的天赋等级。", "invalid_level": "无效的天赋等级。",
"normal_attack_id": "普通攻击的 ID 为 %s。", "normal_attack_id": "普通攻击的 ID 为 %s。",
"e_skill_id": "元素战技ID %s。", "e_skill_id": "元素战技ID %s。",
"q_skill_id": "元素爆发ID %s。", "q_skill_id": "元素爆发ID %s。",
"description": "设置当前角色的天赋等级" "description": "设置当前角色的天赋等级"
}, },
"teleportAll": { "team": {
"success": "已将所有玩家传送到你的位置。", "usage": "用法: team <add|remove|set> [avatarId,...] [index|first|last|index-index,...]",
"error": "你只能在多人游戏状态下执行此命令。", "invalid_usage": "无效用法",
"description": "将你世界中的所有玩家传送到你所在的位置" "add_usage": "用法(add): team add <avatarId,...> [index]",
}, "invalid_index": "无效索引",
"teleport": { "add_too_much": "服务端仅支持你添加%d个角色",
"usage_server": "用法:/tp @<玩家ID> <x> <y> <z> [场景ID]", "failed_to_add_avatar": "无法根据id %s 添加角色",
"usage": "用法:/tp [@<玩家ID>] <x> <y> <z> [场景ID]", "remove_usage": "用法(remove): team remove <index|first|last|index-index,...>",
"specify_player_id": "你必须指定一个玩家ID。", "failed_parse_index": "无法解析索引: %s",
"invalid_position": "无效的位置。", "remove_too_much": "你不能删除那么多角色",
"success": "传送 %s 到坐标 %s,%s,%s,场景为 %s。", "ignore_index": "忽略的索引列表: %s",
"description": "改变指定玩家的位置" "set_usage": "用法(set): team set <index> <avatarId>",
}, "index_out_of_range": "你指定的索引超出了范围",
"tower": { "failed_parse_avatar_id": "无法解析的角色id: %s",
"unlock_done": "深境回廊的所有层已全部解锁。" "avatar_already_in_team": "角色已经在你的队伍中了",
}, "avatar_not_found": "无法找到该角色: %d",
"weather": { "description": "手动修改你的队伍"
"usage": "用法:weather <天气ID> [气候ID]", },
"success": "已更改天气为 %s,气候为 %s。", "teleportAll": {
"invalid_id": "无效的天气ID。", "success": "已将所有玩家传送到你的位置。",
"description": "更改天气" "error": "你只能在多人游戏状态下执行此命令。",
}, "description": "将你世界中的所有玩家传送到你所在的位置"
"drop": { },
"command_usage": "用法:drop <物品ID|物品名称> [数量]", "teleport": {
"success": "已丢下 %s 个 %s。", "usage_server": "用法:/tp @<玩家ID> <x> <y> <z> [场景ID]",
"description": "在你附近丢下一个物品" "usage": "用法:/tp [@<玩家ID>] <x> <y> <z> [场景ID]",
}, "specify_player_id": "你必须指定一个玩家ID。",
"help": { "invalid_position": "无效的位置。",
"usage": "用法:", "success": "传送 %s 到坐标 %s,%s,%s,场景为 %s。",
"aliases": "别名:", "description": "改变指定玩家的位置"
"available_commands": "可用命令:", },
"description": "发送帮助信息或显示指定命令的信息" "tower": {
}, "unlock_done": "深境回廊的所有层已全部解锁。"
"restart": { },
"description": "重新启动服务器" "weather": {
}, "usage": "用法:weather <天气ID> [气候ID]",
"unlocktower": { "success": "已更改天气为 %s,气候为 %s。",
"success": "解锁完成。", "invalid_id": "无效的天气ID。",
"description": "解锁深境螺旋的所有层" "description": "更改天气"
}, },
"resetshop": { "drop": {
"description": "重置商店刷新时间" "command_usage": "用法:drop <物品ID|物品名称> [数量]",
} "success": "已丢下 %s 个 %s。",
}, "description": "在你附近丢下一个物品"
"gacha": { },
"details": { "help": {
"title": "祈愿详情", "usage": "用法:",
"available_five_stars": "可获得的5星物品", "aliases": "别名:",
"available_four_stars": "可获得的4星物品", "available_commands": "可用命令:",
"available_three_stars": "可获得的3星物品" "description": "发送帮助信息或显示指定命令的信息"
} },
} "restart": {
} "description": "重新启动服务器"
},
"unlocktower": {
"success": "解锁完成。",
"description": "解锁深境螺旋的所有层"
},
"resetshop": {
"description": "重置商店刷新时间"
}
},
"gacha": {
"details": {
"title": "祈愿详情",
"available_five_stars": "可获得的5星物品",
"available_four_stars": "可获得的4星物品",
"available_three_stars": "可获得的3星物品"
}
}
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment