Commit 219a8508 authored by Akka's avatar Akka
Browse files

Merge remote-tracking branch 'origin/development' into tower

parents 4b6842f0 65861c3c
package emu.grasscutter.utils;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.time.*;
......@@ -17,6 +18,8 @@ import io.netty.buffer.Unpooled;
import org.slf4j.Logger;
import javax.annotation.Nullable;
import static emu.grasscutter.utils.Language.translate;
@SuppressWarnings({"UnusedReturnValue", "BooleanMethodIsAlwaysInverted"})
......@@ -252,14 +255,18 @@ public final class Utils {
* @param stream The input stream.
* @return The string.
*/
public static String readFromInputStream(InputStream stream) {
public static String readFromInputStream(@Nullable InputStream stream) {
if(stream == null) return "empty";
StringBuilder stringBuilder = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(stream,"UTF-8"))) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8))) {
String line; while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
} stream.close();
} catch (IOException e) {
Grasscutter.getLogger().warn("Failed to read from input stream.");
} catch (NullPointerException ignored) {
return "empty";
} return stringBuilder.toString();
}
......
......@@ -56,6 +56,7 @@
"console_execute_error": "This command can only be run from the console.",
"player_execute_error": "Run this command in-game.",
"command_exist_error": "No command found.",
"no_description_specified": "No description specified",
"invalid": {
"amount": "Invalid amount.",
"artifactId": "Invalid artifactId.",
......@@ -95,17 +96,20 @@
"create": "Account created with UID %s.",
"delete": "Account deleted.",
"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"
},
"broadcast": {
"command_usage": "Usage: broadcast <message>",
"message_sent": "Message sent."
"message_sent": "Message sent.",
"description": "Sends a message to all the players"
},
"changescene": {
"usage": "Usage: changescene <sceneId>",
"already_in_scene": "You are already in that scene.",
"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"
},
"clear": {
"command_usage": "Usage: clear <all|wp|art|mat>",
......@@ -115,35 +119,41 @@
"furniture": "Cleared furniture for %s.",
"displays": "Cleared displays 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"
},
"coop": {
"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"
},
"enter_dungeon": {
"usage": "Usage: enterdungeon <dungeon id>",
"changed": "Changed to dungeon %s",
"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"
},
"giveAll": {
"usage": "Usage: giveall [player] [amount]",
"started": "Receiving all items...",
"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"
},
"giveArtifact": {
"usage": "Usage: giveart|gart [player] <artifactId> <mainPropId> [<appendPropId>[,<times>]]... [level]",
"id_error": "Invalid artifact ID.",
"success": "Given %s to %s."
"success": "Given %s to %s.",
"description": "Gives the player a specified artifact"
},
"giveChar": {
"usage": "Usage: givechar <player> <itemId|itemName> [amount]",
"given": "Given %s with level %s to %s.",
"invalid_avatar_id": "Invalid avatar id.",
"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"
},
"give": {
"usage": "Usage: give <player> <itemId|itemName> [amount] [level]",
......@@ -151,29 +161,36 @@
"refinement_must_between_1_and_5": "Refinement must be between 1 and 5.",
"given": "Given %s of %s 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"
},
"godmode": {
"success": "Godmode is now %s for %s."
"success": "Godmode is now %s for %s.",
"description": "Prevents you from taking damage. Defaults to toggle."
},
"heal": {
"success": "All characters have been healed."
"success": "All characters have been healed.",
"description": "Heal all characters in your current team."
},
"kick": {
"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)"
},
"kill": {
"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"
"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."
"success": "Killed %s's current character.",
"description": "Kills the players current character"
},
"list": {
"success": "There are %s player(s) online:"
"success": "There are %s player(s) online:",
"description": "List online players"
},
"permission": {
"usage": "Usage: permission <add|remove> <username> <permission>",
......@@ -181,21 +198,26 @@
"has_error": "They already have this permission!",
"remove": "Permission removed.",
"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"
},
"position": {
"success": "Coordinates: %.3f, %.3f, %.3f\nScene id: %d"
"success": "Coordinates: %s, %s, %s\nScene id: %s",
"description": "Get coordinates."
},
"reload": {
"reload_start": "Reloading config.",
"reload_done": "Reload complete."
"reload_done": "Reload complete.",
"description": "Reload server config"
},
"resetConst": {
"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."
},
"resetShopLimit": {
"usage": "Usage: /resetshop <player id>"
"usage": "Usage: /resetshop <player id>",
"description": "Reset target player's shop refresh time."
},
"sendMail": {
"usage": "Usage: give [player] <itemId|itemName> [amount]",
......@@ -217,17 +239,20 @@
"message": "<message>",
"sender": "<sender>",
"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."
},
"sendMessage": {
"usage": "Usage: sendmessage <player> <message>",
"success": "Message sent."
"success": "Message sent.",
"description": "Sends a message to a player as 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."
"level_error": "Invalid fetter level.",
"description": "Sets your fetter level for your current active character"
},
"setStats": {
"usage_console": "Usage: setstats|stats @<UID> <stat> <value>",
......@@ -238,20 +263,24 @@
"player_error": "Player not found or offline.",
"set_self": "%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"
},
"setWorldLevel": {
"usage": "Usage: setworldlevel <level>",
"value_error": "World level must be between 0-8",
"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)"
},
"spawn": {
"usage": "Usage: spawn <entityId> [amount] [level(monster only)]",
"success": "Spawned %s of %s."
"success": "Spawned %s of %s.",
"description": "Spawns an entity near you"
},
"stop": {
"success": "Server shutting down..."
"success": "Server shutting down...",
"description": "Stops the server"
},
"talent": {
"usage_1": "To set talent level: /talent set <talentID> <value>",
......@@ -267,18 +296,21 @@
"invalid_level": "Invalid talent level.",
"normal_attack_id": "Normal Attack 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"
},
"teleportAll": {
"success": "Summoned all players to your location.",
"error": "You only can use this command in MP mode."
"error": "You only can use this command in MP mode.",
"description": "Teleports all players in your world to your position"
},
"teleport": {
"usage_server": "Usage: /tp @<player id> <x> <y> <z> [scene id]",
"usage": "Usage: /tp [@<player id>] <x> <y> <z> [scene id]",
"specify_player_id": "You must specify a player id.",
"invalid_position": "Invalid position.",
"success": "Teleported %s to %s, %s, %s in scene %s"
"success": "Teleported %s to %s, %s, %s in scene %s",
"description": "Change the player's position."
},
"tower": {
"unlock_done": "Abyss Corridor's Floors are all unlocked now."
......@@ -286,16 +318,22 @@
"weather": {
"usage": "Usage: weather <weatherId> [climateId]",
"success": "Changed weather to %s with climate %s",
"invalid_id": "Invalid ID."
"invalid_id": "Invalid ID.",
"description": "Changes the weather."
},
"drop": {
"command_usage": "Usage: drop <itemId|itemName> [amount]",
"success": "Dropped %s of %s."
"success": "Dropped %s of %s.",
"description": "Drops an item near you"
},
"help": {
"usage": "Usage: ",
"aliases": "Aliases: ",
"available_commands": "Available commands: "
"available_commands": "Available commands: ",
"description": "Sends the help message or shows information about a specified command"
},
"restart": {
"description": "Restarts the current session"
}
}
}
{
"messages": {
"game": {
"port_bind": "Serwer gry uruchomiony na porcie: %s",
"connect": "Klient połączył się z %s",
"disconnect": "Klient rozłączył się z %s",
"game_update_error": "Wystąpił błąd podczas aktualizacji gry.",
"command_error": "Błąd komendy:"
},
"dispatch": {
"port_bind": "[Dispatch] Serwer dispatch wystartował na porcie %s",
"request": "[Dispatch] Klient %s %s zapytanie: %s",
"keystore": {
"general_error": "[Dispatch] Błąd łądowania keystore!",
"password_error": "[Dispatch] Nie można załadować keystore. Próba z domyślnym hasłem keystore...",
"no_keystore_error": "[Dispatch] Brak certyfikatu SSL! Przejście na serwer HTTP.",
"default_password": "[Dispatch] Domyślne hasło keystore zadziałało. Rozważ ustawienie go na 123456 w pliku config.json."
},
"no_commands_error": "Komendy nie są wspierane w trybie DISPATCH_ONLY.",
"unhandled_request_error": "[Dispatch] Potencjalnie niepodtrzymane %s zapytanie: %s",
"account": {
"login_attempt": "[Dispatch] Klient %s próbuje się zalogować",
"login_success": "[Dispatch] Klient %s zalogował się jako %s",
"login_token_attempt": "[Dispatch] Klient %s próbuje się zalogować poprzez token",
"login_token_error": "[Dispatch] Klient %s nie mógł się zalogować poprzez token",
"login_token_success": "[Dispatch] Klient %s zalogował się poprzez token jako %s",
"combo_token_success": "[Dispatch] Klient %s pomyślnie wymienił combo token",
"combo_token_error": "[Dispatch] Klient %s nie wymienił combo token'u",
"account_login_create_success": "[Dispatch] Klient %s nie mógł się zalogować: Konto %s stworzone",
"account_login_create_error": "[Dispatch] Klient %s nie mógł się zalogować: Tworzenie konta nie powiodło się",
"account_login_exist_error": "[Dispatch] Klient %s nie mógł się zalogować: Nie znaleziono konta",
"account_cache_error": "Błąd pamięci cache konta gry",
"session_key_error": "Błędny klucz sesji.",
"username_error": "Nazwa użytkownika nie znaleziona.",
"username_create_error": "Nazwa użytkownika nie znaleziona, tworzenie nie powiodło się."
}
},
"status": {
"free_software": "Grasscutter to DARMOWE oprogramowanie. Jeżeli ktoś Ci je sprzedał, to zostałeś oscamowany. Strona domowa: https://github.com/Grasscutters/Grasscutter",
"starting": "Uruchamianie Grasscutter...",
"shutdown": "Wyłączanie...",
"done": "Gotowe! Wpisz \"help\" aby uzyskać pomoc",
"error": "Wystąpił błąd.",
"welcome": "Witamy w Grasscutter",
"run_mode_error": "Błędny tryb pracy serwera: %s.",
"run_mode_help": "Tryb pracy serwera musi być ustawiony na 'HYBRID', 'DISPATCH_ONLY', lub 'GAME_ONLY'. Nie można wystartować Grasscutter...",
"create_resources": "Tworzenie folderu resources...",
"resources_error": "Umieść kopię 'BinOutput' i 'ExcelBinOutput' w folderze resources."
}
},
"commands": {
"generic": {
"not_specified": "Nie podano komendy.",
"unknown_command": "Nieznana komenda: %s",
"permission_error": "Nie masz uprawnień do tej komendy.",
"console_execute_error": "Tą komende można wywołać tylko z konsoli.",
"player_execute_error": "Wywołaj tą komendę w grze.",
"command_exist_error": "Nie znaleziono komendy.",
"invalid": {
"amount": "Błędna ilość.",
"artifactId": "Błędne ID artefaktu.",
"avatarId": "Błędne id postaci.",
"avatarLevel": "Błędny poziom postaci.",
"entityId": "Błędne id obiektu.",
"id przedmiotu": "Błędne id przedmiotu.",
"itemLevel": "Błędny poziom przedmiotu.",
"itemRefinement": "Błędne ulepszenie.",
"playerId": "Błędne playerId.",
"uid": "Błędne UID."
}
},
"execution": {
"uid_error": "Błędne UID.",
"player_exist_error": "Gracz nie znaleziony.",
"player_offline_error": "Gracz nie jest online.",
"item_id_error": "Błędne ID przedmiotu.",
"item_player_exist_error": "Błędny przedmiot lub UID.",
"entity_id_error": "Błędne ID obiektu.",
"player_exist_offline_error": "Gracz nie znaleziony lub jest offline.",
"argument_error": "Błędne argumenty.",
"clear_target": "Cel wyczyszczony.",
"set_target": "Następne komendy będą celować w @%s.",
"need_target": "Ta komenda wymaga docelowego UID. Dodaj argument <@UID> lub ustaw stały cel poleceniem /target @UID."
},
"status": {
"enabled": "Włączone",
"disabled": "Wyłączone",
"help": "Pomoc",
"success": "Sukces"
},
"account": {
"modify": "Modyfikuj konta użytkowników",
"invalid": "Błędne UID.",
"exists": "Konto już istnieje.",
"create": "Stworzono konto z UID %s.",
"delete": "Konto usunięte.",
"no_account": "Nie znaleziono konta.",
"command_usage": "Użycie: account <create|delete> <nazwa> [uid]"
},
"broadcast": {
"command_usage": "Użycie: broadcast <wiadomość>",
"message_sent": "Wiadomość wysłana."
},
"changescene": {
"usage": "Użycie: changescene <id sceny>",
"already_in_scene": "Już jesteś na tej scenie.",
"success": "Zmieniono scene na %s.",
"exists_error": "Ta scena nie istenieje."
},
"clear": {
"command_usage": "Użycie: clear <all|wp|art|mat>",
"weapons": "Wyczyszczono bronie dla %s.",
"artifacts": "Wyczyszczono artefakty dla %s.",
"materials": "Wyczyszczono materiały dla %s.",
"furniture": "Wyczyszczono meble dla %s.",
"displays": "Wyczyszczono displays dla %s.",
"virtuals": "Wyczyszczono virtuals dla %s.",
"everything": "Wyczyszczono wszystko dla %s."
},
"coop": {
"usage": "Użycie: coop <id gracza> <id gracza docelowego>",
"success": "Przyzwano %s do świata %s."
},
"enter_dungeon": {
"usage": "Użycie: enterdungeon <ID lochu>",
"changed": "Zmieniono loch na %s",
"not_found_error": "Ten loch nie istnieje",
"in_dungeon_error": "Już jesteś w tym lochu"
},
"giveAll": {
"usage": "Użycie: giveall [gracz] [ilość]",
"started": "Dodawanie wszystkich przedmiotów...",
"success": "Pomyślnie dodano wszystkie przedmioty dla %s.",
"invalid_amount_or_playerId": "Błędna ilość lub ID gracza."
},
"giveArtifact": {
"usage": "Użycie: giveart|gart [gracz] <id artefaktu> <mainPropId> [<appendPropId>[,<razy>]]... [poziom]",
"id_error": "Błędne ID artefaktu.",
"success": "Dano %s dla %s."
},
"giveChar": {
"usage": "Użycie: givechar <gracz> <id przedmiotu | nazwa przedmiotu> [ilość]",
"given": "Dano %s z poziomem %s dla %s.",
"invalid_avatar_id": "Błędne ID postaci.",
"invalid_avatar_level": "Błędny poziom postaci.",
"invalid_avatar_or_player_id": "Błędne ID postaci lub gracza."
},
"give": {
"usage": "Użycie: give <gracz> <id przedmiotu | nazwa przedmiotu> [ilość] [poziom]",
"refinement_only_applicable_weapons": "Ulepszenie można zastosować tylko dla broni.",
"refinement_must_between_1_and_5": "Ulepszenie musi być pomiędzy 1, a 5.",
"given": "Dano %s %s dla %s.",
"given_with_level_and_refinement": "Dano %s z poziomem %s, ulepszeniem %s %s razy dla %s",
"given_level": "Dano %s z poziomem %s %s razy dla %s"
},
"godmode": {
"success": "Godmode jest teraz %s dla %s."
},
"heal": {
"success": "Wszystkie postacie zostały wyleczone."
},
"kick": {
"player_kick_player": "Gracz [%s:%s] wyrzucił gracza [%s:%s]",
"server_kick_player": "Wyrzucono gracza [%s:%s]"
},
"kill": {
"usage": "Użycie: killall [UID gracza] [ID sceny]",
"scene_not_found_in_player_world": "Scena nie znaleziona w świecie gracza",
"kill_monsters_in_scene": "Zabito %s potworów w scenie %s"
},
"killCharacter": {
"usage": "Użycie: /killcharacter [ID gracza]",
"success": "Zabito aktualną postać gracza %s."
},
"list": {
"success": "Teraz jest %s gracz(y) online:"
},
"permission": {
"usage": "Użycie: permission <add|remove> <nazwa gracza> <uprawnienie>",
"add": "Dodano uprawnienie",
"has_error": "To konto już ma to uprawnienie!",
"remove": "Usunięto uprawnienie.",
"not_have_error": "To konto nie ma tych uprawnień!",
"account_error": "Konto nie może zostać znalezione."
},
"position": {
"success": "Koordynaty: %.3f, %.3f, %.3f\nID sceny: %d"
},
"reload": {
"reload_start": "Ponowne ładowanie konfiguracji.",
"reload_done": "Ponowne ładowanie zakończone."
},
"resetConst": {
"reset_all": "Resetuj konstelacje wszystkich postaci.",
"success": "Konstelacje dla %s zostały zresetowane. Proszę zalogować się ponownie aby zobaczyć zmiany."
},
"resetShopLimit": {
"usage": "Użycie: /resetshop <ID gracza>"
},
"sendMail": {
"usage": "Użycie: `/sendmail <ID gracza | all | help> [id szablonu]`",
"user_not_exist": "Gracz o ID '%s' nie istnieje",
"start_composition": "Komponowanie wiadomości.\nProszę użyj `/sendmail <tytuł>` aby kontynuować.\nMożesz użyć `/sendmail stop` w dowolnym momencie",
"templates": "Szablony zostaną zaimplementowane niedługo...",
"invalid_arguments": "Błędne argumenty.\nUżycie `/sendmail <ID gracza | all | help> [id szablonu]`",
"send_cancel": "Anulowano wysyłanie wiadomości",
"send_done": "Wysłano wiadomość do gracza %s!",
"send_all_done": "Wysłano wiadomośc do wszystkich graczy!",
"not_composition_end": "Komponowanie nie jest na ostatnim etapie.\nProszę użyj `/sendmail %s` lub `/sendmail stop` aby anulować",
"please_use": "Proszę użyj `/sendmail %s`",
"set_title": "Tytuł wiadomości to teraz: '%s'.\nUżyj '/sendmail <treść>' aby kontynuować.",
"set_contents": "Treść wiadomości to teraz '%s'.\nUżyj '/sendmail <nadawca>' aby kontynuować.",
"set_message_sender": "Nadawca wiadomości to teraz '%s'.\nUżyj '/sendmail <id przedmiotu | nazwa przedmiotu | zakończ> [ilość] [poziom]' aby kontynuować.",
"send": "Załączono %s %s (poziom %s) do wiadomości.\nDodaj więcej przedmiotów lub użyj `/sendmail finish` aby wysłać wiadomość.",
"invalid_arguments_please_use": "Błędne argumenty \nProszę użyj `/sendmail %s`",
"title": "<tytuł>",
"message": "<wiadomość>",
"sender": "<nadawca>",
"arguments": "<id przedmiotu | nazwa przedmiotu | zakończ> [ilość] [poziom]",
"error": "BŁĄD: niepoprawny etap konstrukcji: %s. Sprawdź konsolę aby dowiedzieć się więcej."
},
"sendMessage": {
"usage": "Użycie: /sendmessage <player> <message>",
"success": "Wiadomość wysłana."
},
"setFetterLevel": {
"usage": "Użycie: setfetterlevel <poziom>",
"range_error": "Poziom przyjaźni musi być pomiędzy 0,a 10.",
"success": "Poziom przyjaźni ustawiono na: %s",
"level_error": "Błędny poziom przyjaźni."
},
"setStats": {
"usage_console": "Użycie: setstats|stats @<UID> <statystyka> <wartość>",
"usage_ingame": "Użycie: setstats|stats [@UID] <statystyka> <wartość>",
"help_message": "\n\tWartości dla Statystyka: hp | maxhp | def | atk | em | er | crate | cdmg | cdr | heal | heali | shield | defi\n\t(cont.) Bonus DMG żywiołu: epyro | ecryo | ehydro | egeo | edendro | eelectro | ephys\n\t(cont.) RES na żywioł: respyro | rescryo | reshydro | resgeo | resdendro | reselectro | resphys\n",
"value_error": "Błędna wartość statystyki.",
"uid_error": "Błędne UID.",
"player_error": "Gracza nie znaleziono lub jest offline.",
"set_self": "%s ustawiono na %s.",
"set_for_uid": "%s dla %s ustawiono na %s.",
"set_max_hp": "Maksymalne HP ustawione na %s."
},
"setWorldLevel": {
"usage": "Użycie: setworldlevel <poziom>",
"value_error": "Poziom świata musi być pomiędzy 0, a 8",
"success": "Ustawiono poziom świata na: %s.",
"invalid_world_level": "Invalid world level."
},
"spawn": {
"usage": "Użycie: /spawn <id obiektu> [ilość] [poziom(tylko potwory)]",
"success": "Stworzono %s %s."
},
"stop": {
"success": "Serwer wyłącza się..."
},
"talent": {
"usage_1": "Aby ustawić poziom talentu: /talent set <ID talentu> <wartość>",
"usage_2": "Inny sposób na ustawienie poziomu talentu: /talent <n lub e lub q> <wartość>",
"usage_3": "Aby uzyskać ID talentu: /talent getid",
"lower_16": "Błędny poziom talentu. Poziom powinien być mniejszy niż 16",
"set_id": "Ustawiono talent na %s.",
"set_atk": "Ustawiono talent Atak Podstawowy na poziom %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 ten 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.",
"q_skill_id": "ID umiejętności Q: %s."
},
"teleportAll": {
"success": "Przyzwano wszystkich graczy do Ciebie.",
"error": "Możesz użyć tej komendy wyłącznie w trybie MP."
},
"teleport": {
"usage_server": "Użycie: /tp @<ID gracza> <x> <y> <z> [ID sceny]",
"usage": "Użycie: /tp [@<ID gracza>] <x> <y> <z> [ID sceny]",
"specify_player_id": "Musisz określić ID gracza.",
"invalid_position": "Błędna pozycja.",
"success": "Przeteleportowano %s do %s, %s, %s w scenie %s"
},
"weather": {
"usage": "Użycie: weather <ID pogody> [ID klimatu]",
"success": "Zmieniono pogodę na %s z klimatem %s",
"invalid_id": "Błędne ID."
},
"drop": {
"command_usage": "Użycie: drop <ID przedmiotu|nazwa przedmiotu> [ilość]",
"success": "Wyrzucono %s of %s."
},
"help": {
"usage": "Użycie: ",
"aliases": "Aliasy: ",
"available_commands": "Dostępne komendy: "
}
}
}
\ No newline at end of file
......@@ -36,12 +36,12 @@
}
},
"status": {
"free_software": "Grasscutter 是免费开源软件。如果是付费购买的,那已经被骗了。Github:https://github.com/Grasscutters/Grasscutter",
"free_software": "Grasscutter 是免费开源软件,遵循Apache-2.0 license。如果是付费购买的,那已经被骗了。项目地址:Github:https://github.com/Grasscutters/Grasscutter",
"starting": "正在启动 Grasscutter...",
"shutdown": "正在关闭...",
"done": "加完成!输入 \"help\" 查看命令列表",
"done": "加完成!输入 \"help\" 查看命令列表",
"error": "发生了一个错误。",
"welcome": "欢迎使用 Grasscutter",
"welcome": "欢迎使用 Grasscutter!珍惜这段美妙的旅途吧!",
"run_mode_error": "无效的服务器运行模式: %s。",
"run_mode_help": "服务器运行模式必须为 HYBRID、DISPATCH_ONLY 或 GAME_ONLY。Grasscutter 启动失败...",
"create_resources": "正在创建 resources 目录...",
......@@ -52,12 +52,12 @@
"generic": {
"not_specified": "没有指定命令。",
"unknown_command": "未知的命令:%s",
"permission_error": "您没有执行此命令的权限",
"console_execute_error": "此命令只能在服务器控制台执行",
"player_execute_error": "此命令只能在游戏内执行",
"command_exist_error": "找不到命令。",
"permission_error": "哼哼哼!您没有执行此命令的权限!请联系服务器管理员解决!",
"console_execute_error": "此命令只能在服务器控制台执行呐~",
"player_execute_error": "此命令只能在游戏内执行哦~",
"command_exist_error": "这条命令……好像找不到呢?。",
"invalid": {
"amount": "无效的 数量.",
"amount": "无效的数量.",
"artifactId": "无效的圣遗物ID。",
"avatarId": "无效的角色ID。",
"avatarLevel": "无效的角色等級。",
......@@ -95,17 +95,20 @@
"create": "已建立账号,UID 为 %s 。",
"delete": "账号已刪除。",
"no_account": "账号不存在。",
"command_usage": "用法:account <create|delete> <username> [uid]"
"command_usage": "用法:account <create|delete> <username> [uid]",
"description": "创建或删除账号。"
},
"broadcast": {
"command_usage": "用法:broadcast <消息>",
"message_sent": "公告已发送。"
"message_sent": "公告已发送。",
"description": "向所有玩家发送公告。"
},
"changescene": {
"usage": "用法:changescene <scene id>",
"already_in_scene": "你已经在这个秘境中了。",
"success": "已切换至秘境 %s.",
"exists_error": "此秘境不存在。"
"exists_error": "此秘境不存在。",
"description": "切换指定秘境。"
},
"clear": {
"command_usage": "用法: clear <all|wp|art|mat>",
......@@ -115,65 +118,78 @@
"furniture": "已将 %s 的尘歌壶家具清空。",
"displays": "已清除 %s 的显示。",
"virtuals": "已将 %s 的所有货币和经验值清空。",
"everything": "已将 %s 的所有物品清空。"
"everything": "已将 %s 的所有物品清空。",
"description": "从您的背包中删除所有未装备且已解锁的物品,包括稀有物品。"
},
"coop": {
"usage": "用法:coop <playerId> <target playerId>",
"success": "已召唤 %s 到 %s的世界"
"success": "已强制召唤 %s 到 %s的世界",
"description": "强制召唤指定用户到他人的世界。"
},
"enter_dungeon": {
"usage": "用法:enterdungeon <dungeon id>",
"changed": "已进入秘境 %s",
"not_found_error": "此秘境不存在。",
"in_dungeon_error": "你已经在秘境中了。"
"in_dungeon_error": "你已经在秘境中了。",
"description": "进入指定秘境。"
},
"giveAll": {
"usage": "用法:giveall [player] [amount]",
"started": "正在给予全部物品...",
"success": "已给予全部物品。",
"invalid_amount_or_playerId": "无效的数量/玩家ID。"
"invalid_amount_or_playerId": "无效的数量/玩家ID。",
"description": "给予所有物品。"
},
"giveArtifact": {
"usage": "用法:giveart|gart [player] <artifactId> <mainPropId> [<appendPropId>[,<times>]]... [level]",
"id_error": "无效的圣遗物ID。",
"success": "已将 %s 给予 %s。"
"success": "已将 %s 给予 %s。",
"description": "给予指定圣遗物。"
},
"giveChar": {
"usage": "用法:givechar <player> <itemId|itemName> [amount]",
"given": "Given %s with level %s to %s.",
"given": "给予角色 %s 等级 %s 向UID %s.",
"invalid_avatar_id": "无效的角色ID。",
"invalid_avatar_level": "无效的角色等級。.",
"invalid_avatar_or_player_id": "无效的角色ID/玩家ID。"
"invalid_avatar_or_player_id": "无效的角色ID/玩家ID。",
"description": "给予指定角色。"
},
"give": {
"usage": "用法:give <player> <itemId|itemName> [amount] [level] [refinement]",
"refinement_only_applicable_weapons": "精炼等参数仅在武器可用",
"refinement_must_between_1_and_5": "精炼等必须在 1 到 5 之间。",
"refinement_only_applicable_weapons": "精炼等参数仅在给予武器可用",
"refinement_must_between_1_and_5": "精炼等必须在 1 到 5 之间。",
"given": "已将 %s 个 %s 给予 %s。",
"given_with_level_and_refinement": "已将 %s [等級%s, 精炼%s] %s个给予 %s",
"given_level": "已将 %s 等级 %s %s 个给予 %s"
"given_level": "已将 %s 等级 %s %s 个给予UID %s",
"description": "给予指定物品。"
},
"godmode": {
"success": "上帝模式被设置为 %s 。 [用户:%s]"
"success": "上帝模式已被设置为 %s 。 [用户:%s]",
"description": "防止你受到伤害。"
},
"heal": {
"success": "所有角色已被治疗。"
"success": "所有角色已被治疗。",
"description": "治疗所选队伍的角色。"
},
"kick": {
"player_kick_player": "玩家 [%s:%s] 已将 [%s:%s] 踢出",
"server_kick_player": "正在踢出玩家 [%s:%s]"
"server_kick_player": "正在踢出玩家 [%s:%s]",
"description": "从服务器内踢出指定玩家。"
},
"kill": {
"usage": "用法:killall [playerUid] [sceneId]",
"scene_not_found_in_player_world": "未在玩家世界中找到此场景",
"kill_monsters_in_scene": "已杀死 %s 个怪物。 [场景ID: %s]"
"kill_monsters_in_scene": "已杀死 %s 个怪物。 [场景ID: %s]",
"description": "杀死所有怪物"
},
"killCharacter": {
"usage": "用法:/killcharacter [playerId]",
"success": "已杀死 %s 目前使用的角色。"
"success": "已杀死 %s 目前使用的角色。",
"description": "杀死目前使用的角色"
},
"list": {
"message": "目前在线人数:%s"
"success": "目前在线人数:%s",
"description": "查看所有玩家"
},
"permission": {
"usage": "用法:permission <add|remove> <username> <permission>",
......@@ -181,21 +197,26 @@
"has_error": "此玩家已拥有此权限!",
"remove": "权限已移除。",
"not_have_error": "此玩家未拥有权限!",
"account_error": "账号不存在!"
"account_error": "账号不存在!",
"description": "给予或移除指定玩家的权限。"
},
"position": {
"success": "坐标:%.3f, %.3f, %.3f\n场景ID:%d"
"success": "坐标:%.3f, %.3f, %.3f\n场景ID:%d",
"description": "获取所在位置。"
},
"reload": {
"reload_start": "正在重载配置文件和数据。",
"reload_done": "重装完毕。"
"reload_done": "重载完毕。",
"description": "重载配置文件和数据。"
},
"resetConst": {
"reset_all": "重置所有角色的命座。",
"success": "已重置 %s 的命座,重新登录后将会生效。"
"success": "已重置 %s 的命座,重新登录后将会生效。",
"description": "重置当前角色的命之座,执行命令后需重新登录以生效。"
},
"resetShopLimit": {
"usage": "用法:/resetshop <player id>"
"usage": "用法:/resetshop <player id>",
"description": "重置所选玩家的商店刷新时间。"
},
"sendMail": {
"usage": "用法:give [player] <itemId|itemName> [amount]",
......@@ -204,7 +225,7 @@
"templates": "邮件模板尚未实装...",
"invalid_arguments": "无效的参数。\n指令使用方法 `/sendmail <userId|all|help> [templateId]`",
"send_cancel": "取消发送邮件",
"send_done": "已将邮件给 %s!",
"send_done": "已将邮件发送给 %s!",
"send_all_done": "邮件已发送给所有人!",
"not_composition_end": "现在邮件发送未到最后阶段。\n请使用 `/sendmail %s` 继续发送邮件,或使用 `/sendmail stop` 来停止发送邮件。",
"please_use": "请使用 `/sendmail %s`",
......@@ -217,17 +238,20 @@
"message": "<正文>",
"sender": "<发件人>",
"arguments": "<itemId|itemName|finish> [数量] [等级]",
"error": "错误:无效的编写阶段 %s。需要 StackTrace 请查看服务器控制台。"
"error": "错误:无效的编写阶段 %s。需要 StackTrace 请查看服务器控制台。",
"description": "向指定用户发送邮件。 此命令的用法可根据附加的参数而变化。"
},
"sendMessage": {
"usage": "用法:sendmessage <player> <message>",
"success": "消息已发送。"
"success": "消息已发送。",
"description": "向指定玩家发送消息"
},
"setFetterLevel": {
"usage": "用法:setfetterlevel <level>",
"range_error": "好感度等级必须在 0 到 10 之间。",
"fetter_set_level": "好感度已设置为 %s 级",
"level_error": "无效的好感度等级。"
"level_error": "无效的好感度等级。",
"description": "设置当前角色的好感度等级。"
},
"setStats": {
"usage_console": "用法:setstats|stats @<UID> <stat> <value>",
......@@ -238,61 +262,74 @@
"player_error": "玩家不存在或已离线。",
"set_self": "%s 已经设置为 %s。",
"set_for_uid": "%s 的使用者 %s 更改为 %s。",
"set_max_hp": "最大生命值更改为 %s。"
"set_max_hp": "最大生命值更改为 %s。",
"description": "设置当前角色的属性。"
},
"setWorldLevel": {
"usage": "用法:setworldlevel <level>",
"value_error": "世界等级必须设置在0-8之间。",
"success": "已将世界等级设为%s。",
"invalid_world_level": "无效的世界等级。"
"invalid_world_level": "无效的世界等级。",
"description": "设置世界等级,执行命令后需重新登录以生效。"
},
"spawn": {
"usage": "用法:spawn <entityId> [amount] [level(仅限怪物]",
"success": "已生成 %s 个 %s。"
"success": "已生成 %s 个 %s。",
"description": "在你附近生成一个生物。"
},
"stop": {
"success": "正在关闭服务器..."
"success": "正在关闭服务器...",
"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。",
"lower_16": "无效的天赋等级,天赋等级应小于等于15。",
"set_id": "将天赋等级设为 %s。",
"set_atk": "将普通攻击等级设为 %s。",
"set_e": "设定天赋E等级为 %s。",
"set_q": "设定天赋Q等级为 %s。",
"set_e": "设定元素战技等级为 %s。",
"set_q": "设定元素爆发等级为 %s。",
"invalid_skill_id": "无效的技能ID。",
"set_this": "将天赋等级设为 %s。",
"invalid_level": "无效的天赋等级。",
"normal_attack_id": "普通攻击的 ID 为 %s。",
"e_skill_id": "E技能ID %s。",
"q_skill_id": "Q技能ID %s。"
"e_skill_id": "元素战技ID %s。",
"q_skill_id": "元素爆发ID %s。",
"description": "设置当前角色的天赋等级。"
},
"teleportAll": {
"success": "已将全部玩家传送到你的位置",
"error": "命令仅限多人游戏使用。"
"error": "命令仅限处于多人游戏状态下使用。",
"description": "将你世界中的所有玩家传送到你所在的位置。"
},
"teleport": {
"usage_server": "用法:/tp @<player id> <x> <y> <z> [scene id]",
"usage": "用法:/tp [@<player id>] <x> <y> <z> [scene id]",
"specify_player_id": "你必须指定一个玩家ID。",
"invalid_position": "无效的位置。",
"success": "传送 %s 到坐标 %s,%s,%s,场景为 %s"
"success": "传送 %s 到坐标 %s,%s,%s,场景为 %s",
"description": "改变指定玩家的位置。"
},
"weather": {
"usage": "用法:weather <weatherId> [climateId]",
"success": "已将当前天气设定为 %s,气候则为 %s。",
"invalid_id": "无效的ID。"
"success": "已将当前天气设定为 %s,气候为 %s。",
"invalid_id": "无效的天气ID。",
"description": "改变天气"
},
"drop": {
"command_usage": "用法:drop <itemId|itemName> [amount]",
"success": "已將 %s x %s 丟在附近。"
"success": "已将 %s x %s 丟在附近。",
"description": "在你附近丢一个物品。"
},
"help": {
"usage": "用法:",
"aliases": "別名:",
"available_commands": "可用指令:"
"available_commands": "可用指令:",
"description": "发送帮助信息或显示指定命令的信息。"
},
"restart": {
"description": "重新启动服务器。"
}
}
}
......@@ -57,7 +57,7 @@
"player_execute_error": "請在遊戲裡使用這條指令。",
"command_exist_error": "找不到指令。",
"invalid": {
"amount": "無效的 數量.",
"amount": "無效的數量",
"artifactId": "無效的聖遺物ID。",
"avatarId": "無效的角色ID。",
"avatarLevel": "無效的角色等級。",
......@@ -119,7 +119,7 @@
},
"coop": {
"usage": "用法:coop <playerId> <target playerId>",
"success": "Summoned %s to %s's world."
"success": "召喚了 %s %s 的世界。"
},
"enter_dungeon": {
"usage": "用法:enterdungeon <dungeon id>",
......@@ -140,7 +140,7 @@
},
"giveChar": {
"usage": "用法:givechar <player> <itemId|itemName> [amount]",
"given": "Given %s with level %s to %s.",
"given": "已將 %s 等級 %s 給予 %s",
"invalid_avatar_id": "無效的角色ID。",
"invalid_avatar_level": "無效的角色等級。.",
"invalid_avatar_or_player_id": "無效的角色ID/玩家ID。"
......@@ -173,7 +173,7 @@
"success": "已殺死 %s 目前的場上角色。"
},
"list": {
"message": "目前總線上人數:%s"
"success": "目前總線上人數:%s"
},
"permission": {
"usage": "用法:permission <add|remove> <username> <permission>",
......@@ -270,7 +270,7 @@
"q_skill_id": "Q技能ID %s。"
},
"teleportAll": {
"success": "Summoned all players to your location.",
"success": "召喚了所有玩家到你的位置上。",
"error": "此指令僅可在多人遊戲下可用。"
},
"teleport": {
......
<Configuration>
<variable name="LOG_LEVEL" value="${LOG_LEVEL:-INFO}" />
<appender name="STDOUT" class="emu.grasscutter.utils.JlineLogbackAppender">
<encoder>
<pattern>[%d{HH:mm:ss}] [%highlight(%level)] %msg%n</pattern>
......@@ -14,7 +16,10 @@
<pattern>%d{yyyy-MM-dd'T'HH:mm:ss'Z'} - %m%n</pattern>
</encoder>
</appender>
<logger name="org.reflections" level="OFF"/>
<logger name="org.reflections" level="OFF" />
<logger name="emu.grasscutter" level="${LOG_LEVEL}" />
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
......
Markdown is supported
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