diff options
Diffstat (limited to 'mod/src/main')
6 files changed, 1271 insertions, 115 deletions
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatProcessor.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatProcessor.java index 206aed96..6a2295d9 100644 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatProcessor.java +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatProcessor.java @@ -75,7 +75,7 @@ public class ChatProcessor { Minecraft.getMinecraft().thePlayer.sendChatMessage(tuple.getFirst()); if (tuple.getSecond() != null) tuple.getSecond().run(); - minimumNext = System.currentTimeMillis() + 200; + minimumNext = System.currentTimeMillis() + 700; ChatTransmitter.sendDebugChat(new ChatComponentText("Sending " + tuple.getFirst() + " Secretly")); } diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatRoutine.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatRoutine.java new file mode 100644 index 00000000..5339cb2f --- /dev/null +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatRoutine.java @@ -0,0 +1,209 @@ +/* + * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod + * Copyright (C) 2023 cyoung06 (syeyoung) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +package kr.syeyoung.dungeonsguide.mod.chat; + +import kr.syeyoung.dungeonsguide.mod.DungeonsGuide; +import kr.syeyoung.dungeonsguide.mod.chat.ChatProcessResult; +import kr.syeyoung.dungeonsguide.mod.chat.ChatProcessor; +import kr.syeyoung.dungeonsguide.mod.chat.ChatSubscriber; +import kr.syeyoung.dungeonsguide.mod.chat.ChatTransmitter; +import kr.syeyoung.dungeonsguide.mod.events.annotations.EventHandlerRegistry; +import lombok.AllArgsConstructor; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiMainMenu; +import net.minecraft.client.gui.GuiMultiplayer; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.realms.RealmsBridge; + +import java.net.HttpURLConnection; +import java.net.ProtocolException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; +import java.util.function.Predicate; + +public class ChatRoutine { + List<Action> actions = new ArrayList<>(); + + public static interface Action { + void execute(Runnable next); + } + @AllArgsConstructor + public static class ActionSay implements Action { + String str; + + @Override + public void execute(Runnable next) { + ChatProcessor.INSTANCE.addToChatQueue(str, next, false); + } + } + @AllArgsConstructor + public static class ActionOtherSay implements Action { + String str; + + @Override + public void execute(Runnable next) { + try { + HttpURLConnection huc = (HttpURLConnection) new URL("http://localhost:3000/").openConnection(); + huc.setDoOutput(true); + huc.setRequestMethod("POST"); + huc.getOutputStream().write(str.getBytes()); + huc.connect(); + huc.getResponseCode(); + } catch (Exception e) { + e.printStackTrace(); + } + next.run(); + } + } + + @AllArgsConstructor + public static class ActionListen implements Action{ + Consumer<List<String>> callback; + + @Override + public void execute(Runnable next) { + ChatProcessor.INSTANCE.subscribe(new ChatSubscriber() { + int state = 0; + List<String> lol = new ArrayList<>(); + @Override + public ChatProcessResult process(String txt, Map<String, Object> context) { + if (txt.startsWith("§9§m----------")) { + state++; + } + if (state > 0) { + lol.add(txt); + } + if (state == 2){ + callback.accept(lol); + Minecraft.getMinecraft().addScheduledTask(next); + return ChatProcessResult.REMOVE_LISTENER; + } + return ChatProcessResult.NONE; + } + }); + } + } + + @AllArgsConstructor + public static class ActionListen2 implements Action{ + Predicate<String> starting; + Consumer<String> callback; + + @Override + public void execute(Runnable next) { + ChatProcessor.INSTANCE.subscribe(new ChatSubscriber() { + @Override + public ChatProcessResult process(String txt, Map<String, Object> context) { + if (starting.test(txt)) { + callback.accept(txt); + Minecraft.getMinecraft().addScheduledTask(next); + return ChatProcessResult.REMOVE_LISTENER; + } + return ChatProcessResult.NONE; + } + }); + } + } + private static final ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor(DungeonsGuide.THREAD_FACTORY); + + public static class ActionRejoinHypickle implements Action { + + @Override + public void execute(Runnable next) { + Minecraft.getMinecraft().theWorld.sendQuittingDisconnectingPacket(); + Minecraft.getMinecraft().loadWorld((WorldClient)null); + GuiMultiplayer guiMultiplayer; + Minecraft.getMinecraft().displayGuiScreen(guiMultiplayer = new GuiMultiplayer(new GuiMainMenu())); + ses.schedule(() -> { + Minecraft.getMinecraft().addScheduledTask(() -> { + guiMultiplayer.selectServer(0); + guiMultiplayer.connectToSelected(); + + ses.schedule(() -> { + Minecraft.getMinecraft().addScheduledTask(next::run); + }, 10, TimeUnit.SECONDS); + }); + }, 3, TimeUnit.SECONDS); + } + } + + @AllArgsConstructor + public static class ActionRun implements Action { + private Runnable runnable; + @Override + public void execute(Runnable next) { + runnable.run(); + next.run(); + } + } + @AllArgsConstructor + public static class ActionWait implements Action { + private int ms; + + @Override + public void execute(Runnable next) { + ses.schedule(() -> { + Minecraft.getMinecraft().addScheduledTask(next); + }, ms, TimeUnit.MILLISECONDS); + } + } + + public void run() { + + } + + public void say(String a) { + actions.add(new ActionSay(a)); + } + public void otherSay(String a) { + actions.add(new ActionOtherSay(a)); + } + public void justRun(Runnable runnable) { + actions.add(new ActionRun(runnable)); + } + public void waitForPartyMessage(Consumer<List<String>> callback) { + actions.add(new ActionListen(callback)); + } + public void waitForSingleMessageMatching(Predicate<String> matcher, Consumer<String> callback) { + actions.add(new ActionListen2(matcher, callback)); + } + public void justWait(int ms) { + actions.add(new ActionWait(ms)); + } + + public void rejoinHypickle() { + actions.add(new ActionRejoinHypickle()); + } + Iterator<Action> iterator; + private void next() { + iterator.next().execute(this::next); + } + public void execute() { + run(); + iterator = actions.iterator(); + next(); + } +} diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDgDebug.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDgDebug.java index ad917532..28a702d3 100644 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDgDebug.java +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDgDebug.java @@ -25,6 +25,7 @@ import kr.syeyoung.dungeonsguide.dungeon.mechanics.dunegonmechanic.DungeonMechan import kr.syeyoung.dungeonsguide.launcher.Main; import kr.syeyoung.dungeonsguide.mod.DungeonsGuide; import kr.syeyoung.dungeonsguide.mod.SkyblockStatus; +import kr.syeyoung.dungeonsguide.mod.chat.ChatRoutine; import kr.syeyoung.dungeonsguide.mod.chat.ChatTransmitter; import kr.syeyoung.dungeonsguide.mod.dungeon.DungeonContext; import kr.syeyoung.dungeonsguide.mod.dungeon.events.DungeonEventHolder; @@ -67,6 +68,7 @@ import java.security.*; import java.security.cert.CertificateException; import java.util.List; import java.util.*; +import java.util.function.Consumer; public class CommandDgDebug extends CommandBase { @Override @@ -106,7 +108,8 @@ public class CommandDgDebug extends CommandBase { "clearprofile", "fullbright", "gimmebright", - "pfall" + "pfall", + "partycollection" }; @Override @@ -202,6 +205,9 @@ public class CommandDgDebug extends CommandBase { case "reloadshader": ShaderManager.onResourceReload(); break; + case "partycollection": + partyCollectionCommand(args[1], args[2], args[3]); + break; default: ChatTransmitter.addToQueue(new ChatComponentText("ain't gonna find much anything here")); ChatTransmitter.addToQueue(new ChatComponentText("§eDungeons Guide §7:: §e/dg loadrooms §7-§f Reloads dungeon roomdata.")); @@ -685,4 +691,191 @@ public class CommandDgDebug extends CommandBase { t.printStackTrace(); } } + + private void partyCollectionCommand(String otherPlayerName, String fragbot, String offline) { + + String sourcePlayer = Minecraft.getMinecraft().thePlayer.getName(); + String targetPlayer = otherPlayerName; + String thirdPlayer = fragbot; + String offlinePlayer = offline; + StringBuilder sb = new StringBuilder(); + Consumer writer = (obj) -> { + sb.append("\n***************************\n"); + if (obj instanceof List) { + for (Object obj2: (List) obj) { + sb.append("\n> "); + sb.append(obj2); + } + } else { + sb.append("\n> "); + sb.append(obj); + } + sb.append("\n"); + }; + + new ChatRoutine() { + @Override + public void run() { + String langs = "ENGLISH, GERMAN, FRENCH, DUTCH, SPANISH, ITALIAN, CHINESE_SIMPLIFIED, CHINESE_TRADITIONAL, PORTUGUESE_BR, RUSSIAN, KOREAN, POLISH, JAPANESE, PIRATE, NORWEGIAN, PORTUGUESE_PT, SWEDISH, TURKISH, DANISH, CZECH, FINNISH, GREEK, UKRAINIAN, ROMANIAN, HUNGARIAN"; + for (String s : langs.split(",")) { + say("/lang "+s.trim()); + waitForSingleMessageMatching(a -> a.startsWith("§r§a"), (a) -> {}); + justWait(500); + justRun(() -> writer.accept("\n\n$$LANGUAGE$$: "+s+"\n\n")); + rejoinHypickle(); + + say("/p leave"); + say("/chat a"); + + otherSay("/p "+sourcePlayer); + waitForSingleMessageMatching(a -> a.startsWith("§9§m-----------------------------------------------------§r§9"), (a) -> {}); + say("/p accept "+targetPlayer); + waitForPartyMessage((a) -> {}); + + otherSay("/p promote "+sourcePlayer); + waitForPartyMessage((a) -> {}); + otherSay("/p "+thirdPlayer); + waitForPartyMessage((a) -> {}); + waitForPartyMessage((a) -> {}); + + otherSay("/p leave"); + waitForPartyMessage(writer); + + say("/p disband"); + //~ §ehas disbanded the party!§r + waitForPartyMessage(writer); + + + say("/p settings allinvite"); + // §cYou are not currently in a party.§r + waitForPartyMessage(writer); + say("/p mute"); + // §cYou are not in a party!§r + waitForPartyMessage(writer); + say("/p disband"); + // §cYou are not in a party right now.§r + waitForPartyMessage(writer); + say("/chat p"); + // §cYou must be in a party to join the party channel!§r + waitForPartyMessage(writer); + + + + say("/p "+targetPlayer); + // §b[MVP§r§a+§r§b] syeyoung §r§einvited §r§b[MVP§r§0+§r§b] Azael_Nya §r§eto the party! They have §r§c60 §r§eseconds to accept.§r + waitForPartyMessage(writer); + justWait(500); + + otherSay("/p accept syeyoung"); + // §b[MVP§r§0+§r§b] Azael_Nya §r§ejoined the party.§r + waitForPartyMessage(writer); + + say("/chat p"); + // §aYou are now in the §r§6PARTY§r§a channel§r + waitForSingleMessageMatching((a) -> a.startsWith("§a") || a.startsWith("§6"), writer); + + + say("/p settings allinvite"); + // §b[MVP§r§a+§r§b] syeyoung §r§aenabled All Invite§r + waitForPartyMessage(writer); + say("/p settings allinvite"); + // §b[MVP§r§a+§r§b] syeyoung §r§cdisabled All Invite§r + waitForPartyMessage(writer); + + say("/p 99999999999999999"); + // §cCouldn't find a player with that name!§r + waitForPartyMessage(writer); + say("/p "+offlinePlayer); + // §cYou cannot invite that player since they're not online. + waitForPartyMessage(writer); + + + say("/p promote "+targetPlayer); + // §b[MVP§r§f+§r§b] apotato321§r§e has promoted §r§a[VIP§r§6+§r§a] syeyoung §r§eto Party Moderator§r + waitForPartyMessage(writer); + say("/p promote "+targetPlayer); + // §a[VIP§r§6+§r§a] syeyoung§r§e has promoted §r§b[MVP§r§f+§r§b] apotato321 §r§eto Party Leader§r + waitForPartyMessage(writer); + otherSay("/p demote "+sourcePlayer); + // §b[MVP§r§a+§r§b] syeyoung§r§e has demoted §r§b[MVP§r§0+§r§b] Azael_Nya §r§eto Party Member§r + waitForPartyMessage(writer); + otherSay("/p transfer "+sourcePlayer); + // §eThe party was transferred to §r§b[MVP§r§f+§r§b] apotato321 §r§eby §r§a[VIP§r§6+§r§a] syeyoung§r + waitForPartyMessage(writer); + + // leaves + otherSay("/p leave"); + // §b[MVP§r§0+§r§b] Azael_Nya §r§ehas left the party.§r + waitForPartyMessage(writer); + + otherSay("/p "+thirdPlayer); + // §cThe party was disbanded because all invites expired and the party was empty.§r + waitForPartyMessage(writer); + + say("smth"); + // §cYou are not in a party and were moved to the ALL channel.§r + waitForPartyMessage(writer); + + otherSay("/p "+sourcePlayer); + // §r§b[MVP§r§0+§r§b] Azael_Nya §r§ehas invited you to join their party! + // §r§eYou have §r§c60 §r§eseconds to accept. §r§6Click here to join!§r§9 + waitForSingleMessageMatching(a -> a.startsWith("§9§m-----------------------------------------------------§r§9"), writer); + + justWait(1000); + + say("/p "+targetPlayer); + // §eYou have joined §r§b[MVP§r§0+§r§b] Azael_Nya's §r§eparty!§r + waitForPartyMessage(writer); + + say("/p "+offlinePlayer); + // §cYou are not allowed to invite players.§r + waitForPartyMessage(writer); + + otherSay("/p kick "+thirdPlayer); + // §ehas been removed from the party.§r + waitForPartyMessage(writer); + otherSay("/p kick "+sourcePlayer); + // §eYou have been kicked from the party by + waitForPartyMessage(writer); + + // invite + say("/p "+targetPlayer); + waitForPartyMessage((a) -> {}); + justWait(500); + otherSay("/p accept "+sourcePlayer); + waitForPartyMessage((a) -> {}); + + say("/pl"); + // §6Party Members + waitForPartyMessage(writer); + say("/p leave"); + // §eYou left the party.§r + waitForPartyMessage(writer); + // --disbanded-- + waitForPartyMessage((a) -> {}); + + justRun(() -> { + + try { + String total = sb.toString(); + FileOutputStream fos = new FileOutputStream("partymessages.txt"); + fos.write(total.getBytes()); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + + }); + + } + + say("/lang ENGLISH"); + + } + }.execute(); + + + + } } diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/party/MessageMatcher.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/party/MessageMatcher.java new file mode 100644 index 00000000..822af607 --- /dev/null +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/party/MessageMatcher.java @@ -0,0 +1,73 @@ +/* + * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod + * Copyright (C) 2023 cyoung06 (syeyoung) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +package kr.syeyoung.dungeonsguide.mod.party; + +import lombok.AllArgsConstructor; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class MessageMatcher { + List<String> simpleEquals = new ArrayList<>(); + List<PatternData> regexPatterns = new ArrayList<>(); + + @AllArgsConstructor + public static class PatternData { + Pattern pattern; + int flags; + } + + public MessageMatcher(List<String> patterns) { + for (String pattern : patterns) { + if (pattern.startsWith("=")) simpleEquals.add(pattern.substring(1)); + else regexPatterns.add(new PatternData(Pattern.compile(pattern.substring(1), Pattern.DOTALL | Pattern.MULTILINE), + (pattern.contains("<p0>") ? 1 : 0) | + (pattern.contains("<p1>") ? 2 : 0) | + (pattern.contains("<p2>") ? 4 : 0) + )); + } + } + + public boolean match(String str, Map<String, String> matchGroups) { + if (matchGroups != null) + matchGroups.clear(); + for (String simpleEqual : simpleEquals) { + if (simpleEqual.equals(str)) return true; + } + + for (PatternData regexPattern : regexPatterns) { + Matcher m = regexPattern.pattern.matcher(str); + if (m.matches()) { + if (matchGroups != null) { + if ((regexPattern.flags & 4) > 0) + matchGroups.put("2", m.group("p2")); + if ((regexPattern.flags & 2) > 0) + matchGroups.put("1", m.group("p1")); + if ((regexPattern.flags & 1) > 0) + matchGroups.put("0", m.group("p0")); + } + return true; + } + } + return false; + } +} diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/party/PartyManager.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/party/PartyManager.java index 3a5d1f58..51d374d3 100644 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/party/PartyManager.java +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/party/PartyManager.java @@ -18,6 +18,7 @@ package kr.syeyoung.dungeonsguide.mod.party; +import kr.syeyoung.dungeonsguide.mod.DungeonsGuide; import kr.syeyoung.dungeonsguide.mod.chat.ChatProcessResult; import kr.syeyoung.dungeonsguide.mod.chat.ChatProcessor; import kr.syeyoung.dungeonsguide.mod.chat.ChatSubscriber; @@ -34,12 +35,15 @@ import lombok.Setter; import net.minecraft.client.Minecraft; import net.minecraft.util.ChatComponentText; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import org.apache.commons.io.IOUtils; import org.json.JSONArray; import org.json.JSONObject; +import java.io.IOException; import java.security.SecureRandom; import java.util.*; import java.util.function.Consumer; +import java.util.stream.Collectors; public class PartyManager { public static final PartyManager INSTANCE = new PartyManager(); @@ -65,21 +69,69 @@ public class PartyManager { private Set<Consumer<PartyContext>> partyBuiltCallback = new HashSet<>(); + + private final MessageMatcher NOT_IN_PARTY; + private final MessageMatcher PARTY_CHANNEL; + private final MessageMatcher TRANSFER_LEFT; + private final MessageMatcher ALL_INVITE_ON; + private final MessageMatcher ALL_INVITE_OFF; + private final MessageMatcher PARTY_JOIN; + private final MessageMatcher PARTY_LEAVE; + private final MessageMatcher INVITED; + private final MessageMatcher INVITE_PERM; + private final MessageMatcher TRANSFER; + private final MessageMatcher PROMOTE_LEADER; + private final MessageMatcher PROMOTE_MODERATOR; + private final MessageMatcher MEMBER; + private final MessageMatcher ACCEPT_INVITE_LEADER; + private final MessageMatcher ACCEPT_INVITE_MEMBERS; + + private MessageMatcher createMatcher(JSONObject object, String key) { + return new MessageMatcher(object.getJSONArray(key).toList().stream() + .filter(a -> a instanceof String) + .map(a -> (String) a) + .collect(Collectors.toList())); + } + + private String processName(String name) { + String username = null; + for (String s : TextUtils.stripColor(name).split(" ")) { + if (s.startsWith("[")) continue; + username = s; + break; + } + return username; + } + public PartyManager() { + try { + JSONObject jsonObject = new JSONObject(IOUtils.toString(Objects.requireNonNull(DungeonsGuide.class.getResourceAsStream("/party_languages.json")))); + NOT_IN_PARTY = createMatcher(jsonObject, "not_in_party"); + PARTY_CHANNEL = createMatcher(jsonObject, "party_channel"); + ALL_INVITE_ON = createMatcher(jsonObject, "all_invite_on"); + ALL_INVITE_OFF = createMatcher(jsonObject, "all_invite_off"); + PARTY_JOIN = createMatcher(jsonObject, "party_join"); + PARTY_LEAVE = createMatcher(jsonObject, "party_leave"); + INVITED = createMatcher(jsonObject, "invited"); + INVITE_PERM = createMatcher(jsonObject, "invite_perm"); + TRANSFER = createMatcher(jsonObject, "transfer"); + TRANSFER_LEFT = createMatcher(jsonObject, "transfer_left"); + PROMOTE_LEADER = createMatcher(jsonObject, "promote_leader"); + PROMOTE_MODERATOR = createMatcher(jsonObject, "promote_moderator"); + MEMBER = createMatcher(jsonObject, "member"); + ACCEPT_INVITE_LEADER = createMatcher(jsonObject, "accept_invite_leader"); + ACCEPT_INVITE_MEMBERS = createMatcher(jsonObject, "accept_invite_members"); + } catch (IOException e) { + throw new RuntimeException(e); + } + + ChatProcessor cp = ChatProcessor.INSTANCE; // Not in Party cp.subscribe(new ChatSubscriber() { @Override public ChatProcessResult process(String str, Map<String, Object> a) { - if (str.equals("§cYou are not currently in a party.§r") - || str.equals("§eYou left the party.§r") - || str.equals("§cYou must be in a party to join the party channel!§r") - || str.equals("§cThe party was disbanded because all invites expired and the party was empty§r") - || str.equals("§cYou are not in a party and were moved to the ALL channel.§r") - || str.startsWith("§cThe party was disbanded") - || str.endsWith("§ehas disbanded the party!§r") - || str.startsWith("§cYou are not in a party") - || str.startsWith("§eYou have been kicked from the party by ")) { + if (NOT_IN_PARTY.match(str, null)) { PartyManager.this.leaveParty(); for (Consumer<PartyContext> partyContextConsumer : partyBuiltCallback) { @@ -99,11 +151,10 @@ public class PartyManager { cp.subscribe(new ChatSubscriber() { @Override public ChatProcessResult process(String str, Map<String, Object> a) { - if (str.endsWith("§aenabled All Invite§r")) { + if (ALL_INVITE_ON.match(str, null)) { PartyManager.this.getPartyContext(true).setAllInvite(true); a.put("type", "allinvite_on"); - } else if (str.endsWith("§cdisabled All Invite§r") - || str.equals("§cYou are not allowed to invite players.§r")) { + } else if (ALL_INVITE_OFF.match(str, null)) { PartyManager.this.getPartyContext(true).setAllInvite(false); a.put("type", "allinvite_off"); PartyManager.this.potentialInvitenessChange(); @@ -183,39 +234,23 @@ public class PartyManager { }); // Player party join / leave cp.subscribe(new ChatSubscriber() { + Map<String, String> matches = new HashMap<>(); @Override public ChatProcessResult process(String str, Map<String, Object> a) { - if (str.endsWith("§ejoined the party.§r")) { - String username = null; - for (String s : TextUtils.stripColor(str).split(" ")) { - if (s.startsWith("[")) continue; - username = s; - break; - } + if (PARTY_JOIN.match(str, matches)) { + String username = processName(matches.get("1")); if (username != null) { PartyManager.this.getPartyContext(true).addPartyMember(username); } a.put("type", "party_join"); - } else if (str.endsWith("§ehas been removed from the party.§r") - || str.endsWith("§ehas left the party.§r")) { - String username = null; - for (String s : TextUtils.stripColor(str).split(" ")) { - if (s.startsWith("[")) continue; - username = s; - break; - } + } else if (PARTY_LEAVE.match(str, matches)) { + String username = processName(matches.getOrDefault("1", matches.get("2"))); if (username != null && partyContext != null) { PartyManager.this.getPartyContext().removeFromParty(username); } a.put("type", "party_leave"); - } else if (str.endsWith(" They have §r§c60 §r§eseconds to accept.§r")) { - String[] messageSplit = TextUtils.stripColor(str).split(" "); - String inviter = null; - for (String s : messageSplit) { - if (s.startsWith("[")) continue; - inviter = s; - break; - } + } else if (INVITED.match(str, matches)) { + String inviter = processName(matches.get("0")); if (inviter != null && partyContext != null) { if (PartyManager.this.getPartyContext().hasMember(inviter)) { PartyManager.this.getPartyContext().setAllInvite(true); @@ -223,7 +258,7 @@ public class PartyManager { } PartyManager.this.getPartyContext(true).setPartyExistHypixel(true); a.put("type", "party_invite_exist"); - } else if (str.equals("§cCouldn't find a player with that name!§r") || str.equals("§cYou cannot invite that player since they're not online.")) { + } else if (INVITE_PERM.match(str, null)) { a.put("type", "party_invite_noexist"); String username = Minecraft.getMinecraft().getSession().getUsername(); if (partyContext != null && PartyManager.this.getPartyContext().hasMember(username)) { @@ -235,51 +270,32 @@ public class PartyManager { }); // Promotion cp.subscribe(new ChatSubscriber() { + Map<String, String> matches = new HashMap<>(); @Override public ChatProcessResult process(String str, Map<String, Object> a) { - if (str.startsWith("§eThe party was transferred to ")) { - // §eThe party was transferred to §r§b[MVP§r§f+§r§b] apotato321 §r§eby §r§a[VIP§r§6+§r§a] syeyoung§r - String[] messageSplit = TextUtils.stripColor(str.substring(31)).split(" "); - String newLeader = null; - for (String s : messageSplit) { - if (s.startsWith("[")) continue; - newLeader = s; - break; - } - String oldLeader; - boolean left = false; - if (str.endsWith("§r§eleft§r")) { - oldLeader = messageSplit[messageSplit.length - 2]; - left = true; - } else { - oldLeader = messageSplit[messageSplit.length - 1]; - } + if (TRANSFER.match(str, matches)) { + String newLeader = processName(matches.get("0")); + String oldLeader = processName(matches.get("1")); if (oldLeader != null && newLeader != null) { PartyManager.this.getPartyContext(true).setPartyOwner(newLeader); - if (left) - PartyManager.this.getPartyContext(true).removeFromParty(oldLeader); - else - PartyManager.this.getPartyContext(true).addPartyModerator(oldLeader); + PartyManager.this.getPartyContext(true).addPartyModerator(oldLeader); } a.put("type", "party_transfer"); PartyManager.this.potentialInvitenessChange(); - } else if (str.endsWith("§eto Party Leader§r")) { - // §a[VIP§r§6+§r§a] syeyoung§r§e has promoted §r§b[MVP§r§f+§r§b] apotato321 §r§eto Party Leader§r - String[] messageSplit = TextUtils.stripColor(str).split(" "); - String oldLeader = null; - for (String s : messageSplit) { - if (s.startsWith("[")) continue; - oldLeader = s; - break; - } - messageSplit = TextUtils.stripColor(str.substring(str.indexOf("has promoted") + 13)).split(" "); - String newLeader = null; - for (String s : messageSplit) { - if (s.startsWith("[")) continue; - newLeader = s; - break; + } else if (TRANSFER_LEFT.match(str, matches)) { + String newLeader = processName(matches.get("0")); + String oldLeader = processName(matches.get("1")); + + if (oldLeader != null && newLeader != null) { + PartyManager.this.getPartyContext(true).setPartyOwner(newLeader); + PartyManager.this.getPartyContext(true).removeFromParty(oldLeader); } + a.put("type", "party_transfer"); + PartyManager.this.potentialInvitenessChange(); + } else if (PROMOTE_LEADER.match(str, matches)) { + String oldLeader = processName(matches.get("0")); + String newLeader = processName(matches.get("1")); if (oldLeader != null && newLeader != null) { PartyManager.this.getPartyContext(true).setPartyOwner(newLeader); @@ -287,22 +303,9 @@ public class PartyManager { } a.put("type", "party_transfer"); PartyManager.this.potentialInvitenessChange(); - } else if (str.endsWith("§r§eto Party Moderator§r")) { - // §b[MVP§r§f+§r§b] apotato321§r§e has promoted §r§a[VIP§r§6+§r§a] syeyoung §r§eto Party Moderator§r - String[] messageSplit = TextUtils.stripColor(str).split(" "); - String oldLeader = null; - for (String s : messageSplit) { - if (s.startsWith("[")) continue; - oldLeader = s; - break; - } - messageSplit = TextUtils.stripColor(str.substring(str.indexOf("has promoted") + 13)).split(" "); - String newModerator = null; - for (String s : messageSplit) { - if (s.startsWith("[")) continue; - newModerator = s; - break; - } + } else if (PROMOTE_MODERATOR.match(str, matches)) { + String oldLeader = processName(matches.get("0")); + String newModerator = processName(matches.get("1")); if (oldLeader != null && newModerator != null) { PartyManager.this.getPartyContext(true).setPartyOwner(oldLeader); @@ -310,21 +313,9 @@ public class PartyManager { } a.put("type", "party_promotion"); PartyManager.this.potentialInvitenessChange(); - } else if (str.endsWith("§r§eto Party Member§r")) { - String[] messageSplit = TextUtils.stripColor(str).split(" "); - String oldLeader = null; - for (String s : messageSplit) { - if (s.startsWith("[")) continue; - oldLeader = s; - break; - } - messageSplit = TextUtils.stripColor(str.substring(str.indexOf("has demoted") + 12)).split(" "); - String newMember = null; - for (String s : messageSplit) { - if (s.startsWith("[")) continue; - newMember = s; - break; - } + } else if (MEMBER.match(str, matches)) { + String oldLeader = processName(matches.get("1")); + String newMember = processName(matches.get("0")); if (oldLeader != null && newMember != null) { PartyManager.this.getPartyContext(true).setPartyOwner(oldLeader); @@ -339,24 +330,20 @@ public class PartyManager { // Player Join cp.subscribe(new ChatSubscriber() { boolean joined; + Map<String, String> matches = new HashMap<>(); @Override public ChatProcessResult process(String str, Map<String, Object> context) { - if (str.startsWith("§eYou have joined ")) { - String[] messageSplit = TextUtils.stripColor(str.substring(18)).split(" "); - String leader = null; - for (String s : messageSplit) { - if (s.startsWith("[")) continue; - leader = s; - break; - } + if (ACCEPT_INVITE_LEADER.match(str, matches)) { + String leader = processName(matches.get("1")); + leader = leader.substring(0, leader.length()-2); // remove 's partyContext = new PartyContext(); getPartyContext().setPartyOwner(leader); getPartyContext().addPartyMember(Minecraft.getMinecraft().getSession().getUsername()); context.put("type", "party_selfjoin_leader"); joined= true; - } else if (str.startsWith("§eYou'll be partying with: ")) { - String[] players = TextUtils.stripColor(str.substring(27)).split(" "); + } else if (ACCEPT_INVITE_MEMBERS.match(str, matches)) { + String[] players = TextUtils.stripColor(matches.get("2")).split(" "); for (String player : players) { if (player.startsWith("[")) continue; getPartyContext().addRawMember(player); diff --git a/mod/src/main/resources/party_languages.json b/mod/src/main/resources/party_languages.json new file mode 100644 index 00000000..a3fd97d3 --- /dev/null +++ b/mod/src/main/resources/party_languages.json @@ -0,0 +1,694 @@ +{ + "not_in_party": [ + "R(?<p0>.+)\\ §r§ehas\\ disbanded\\ the\\ party!§r", + "=§cYou are not currently in a party.§r", + "=§cYou are not in a party!§r", + "=§cYou are not in a party right now.§r", + "=§cYou must be in a party to join the party channel!§r", + "=§cThe party was disbanded because all invites expired and the party was empty.§r", + "=§cYou are not in a party and were moved to the ALL channel.§r", + "R§eYou\\ have\\ been\\ kicked\\ from\\ the\\ party\\ by\\ §r(?<p1>.+)\\ §r§e§r", + "=§eYou left the party.§r", + "R(?<p0>.+)\\ §r§ehat\\ die\\ Party\\ aufgelöst!§r", + "=§cDu bist aktuell in keiner Party.§r", + "=§cYou are not in a party!§r", + "=§cDu bist im Moment in keiner Party.§r", + "=§cDu musst in einer Party sein um den Party-Chat betreten zu können!§r", + "=§cDie Party wurde aufgelöst, weil alle Einladungen abgelaufen sind und die Party leer war.§r", + "=§cDu befindest dich nicht in einer Party und wurdest in den ALL-Kanal verschoben.§r", + "R§eDu\\ wurdest\\ von\\ §r(?<p1>.+)\\ §r§eaus\\ der\\ Party\\ gekickt§r", + "=§eDu hast die Party verlassen.§r", + "R(?<p0>.+)\\ §r§ea\\ dissout\\ la\\ party!§r", + "=§cVous n'êtes pas actuellement dans une party.§r", + "=§cYou are not in a party!§r", + "=§cVous n'êtes pas actuellement dans une party.§r", + "=§cVous devez être dans une party pour rejoindre le canal de party!§r", + "=§cLa party a été dissoute car toutes les invitations ont expirées et la party était vide.§r", + "=§cVous n'êtes pas dans une party et avez été déplacé dans le canal PUBLIC.§r", + "R§eVous\\ avez\\ été\\ expulsé\\ de\\ la\\ party\\ par\\ §r(?<p1>.+)\\ §r§e§r", + "=§eVous avez quitté la party.§r", + "R(?<p0>.+)\\ §r§eheeft\\ de\\ party\\ ontbonden!§r", + "=§cJe bent momenteel niet in een party.§r", + "=§cYou are not in a party!§r", + "=§cJe zit nu niet in een party.§r", + "=§cJe moet in een party zitten om het partykanaal te kunnen betreden!§r", + "R(?<p1>.+)\\ §r§everliet\\ de\\ party\\.§r", + "=§cJe zit niet in een party en bent verplaatst naar het openbare kanaal.§r", + "R§eJe\\ bent\\ door\\ §r(?<p1>.+)\\ §r§euit\\ de\\ party\\ verwijderd§r", + "=§eJe verliet de party.§r", + "R§e¡§r(?<p0>.+)\\ §r§eha\\ disuelto\\ la\\ party!§r", + "=§cActualmente no estás en una party.§r", + "=§cYou are not in a party!§r", + "=§cNo estás en una party ahora mismo.§r", + "=§c¡Debes estar en una party para usar el canal de party!§r", + "=§cLa party fue disuelta porque todas las invitaciones expiraron y la party estaba vacía.§r", + "=§cNo estás en una party y fuiste movido al canal TODO.§r", + "R§eHas\\ sido\\ expulsado\\ de\\ la\\ party\\ por\\ §r(?<p1>.+)\\ §r§e§r", + "=§eHas abandonado la party.§r", + "R(?<p0>.+)\\ §r§eha\\ sciolto\\ il\\ party!§r", + "=§cNon sei in un party al momento.§r", + "=§cYou are not in a party!§r", + "=§cNon sei in un party al momento.§r", + "=§cDevi essere in un party per entrare nel canale party!§r", + "=§cIl party è stato sciolto perché tutti gli inviti sono scaduti e il party era vuoto.§r", + "=§cNon sei in un party e sei stato spostato nel canale TUTTI.§r", + "R§eSei\\ stato\\ cacciato\\ dal\\ party\\ da\\ §r(?<p1>.+)\\ §r§e§r", + "=§eHai lasciato il party.§r", + "R(?<p0>.+)§r§e解散了组队!§r", + "=§c你当前不在组队中。§r", + "=§cYou are not in a party!§r", + "=§c你当前不在组队中。§r", + "=§c你必须加入一个组队才能使用组队频道!§r", + "R(?<p1>.+)§r§e离开了组队。§r", + "=§c你不在任何组队中,故被移至公共频道。§r", + "R§e你已被§r(?<p1>.+)§r§e踢出组队§r", + "=§e你离开了组队。§r", + "R(?<p0>.+)§r§e\\ 解散了組隊!§r", + "=§c你目前不在組隊裡。§r", + "=§cYou are not in a party!§r", + "=§c你目前不在組隊裡。§r", + "=§c你必須在組隊裡才能使用組隊頻道!§r", + "=§c組隊因所有邀請均已過期且沒有沒有成員而解散。§r", + "=§c你並不在任何組隊裡,故將你移至公頻。§r", + "R§e你已被\\ §r(?<p1>.+)§r§e\\ 踢出組隊§r", + "=§e你離開了組隊。§r", + "R(?<p0>.+)\\ §r§edesfez\\ a\\ party!§r", + "=§cVocê não está em uma party.§r", + "=§cYou are not in a party!§r", + "=§cVocê não está em uma party.§r", + "=§cVocê precisa estar em uma party para usar este canal!§r", + "=§cA party foi desfeita pois todos os convites expiraram e a party estava vazia.§r", + "=§cVocê não está em uma party e foi movido para o canal PÚBLICO§r", + "R§eVocê\\ foi\\ expulso\\ da\\ party\\ por\\ §r(?<p1>.+)\\ §r§e§r", + "=§eVocê saiu da party.§r", + "R(?<p0>.+)\\ §r§eраспустил\\ компанию!§r", + "=§cВы не состоите в компании.§r", + "=§cYou are not in a party!§r", + "=§cВы не в компании.§r", + "=§cВы должны быть в компании, чтобы выбрать данный канал!§r", + "=§cКомпания была распущена, потому что все приглашения истекли и компания пуста.§r", + "=§cВы не в компании и были перемещены в ОБЩИЙ канал.§r", + "R§eВы\\ были\\ выгнаны\\ из\\ компании\\ игроком\\ §r(?<p1>.+)\\ §r§e§r", + "=§eВы покинули компанию.§r", + "R(?<p0>.+)§r§e이\\(가\\)\\ Party를\\ 해산했습니다!§r", + "=§c현재 Party에 있지 않습니다.§r", + "=§cYou are not in a party!§r", + "=§c지금은 Party에 있지 않습니다.§r", + "=§c참여한 Party가 있어야 Party 채널에 입장할 수 있습니다!§r", + "=§c모든 초대가 만료되고 Party가 비었기 때문에 Party가 해산되었습니다.§r", + "=§cParty에 있지 않아 전체 채널로 이동되었습니다.§r", + "R(?<p1>.+)§r§e에\\ 의해\\ Party에서\\ 추방되었습니다§r", + "=§eParty를 떠났습니다.§r", + "R(?<p0>.+)\\ §r§erozwiązuje\\ party!§r", + "=§cNie jesteś obecnie w party.§r", + "=§cYou are not in a party!§r", + "=§cNie jesteś teraz w party.§r", + "=§cMusisz być w party, żeby dołączyć do kanału party!§r", + "=§cThe party was disbanded because all invites expired and the party was empty.§r", + "=§cNie jesteś w party i został(a)sz przeniesiony(-a) do kanału WSZYSTKIE.§r", + "R§eZostałeś\\(\\-aś\\)\\ wyrzucony\\(\\-a\\)\\ z\\ party\\ przez\\ §r(?<p1>.+)\\ §r§e§r", + "=§eOpuszczono party.§r", + "R(?<p0>.+)\\ §r§eが\\ Party\\ を解散させました!§r", + "=§c現在あなたは Party に参加していません。§r", + "=§cYou are not in a party!§r", + "=§cあなたは現在 Party に参加していません。§r", + "=§cParty チャンネルに参加するには Party に参加している必要があります!§r", + "=§cすべての招待の有効期限が切れ、誰もいなくなったため、Partyは解散されました。§r", + "=§cParty から退出したため、全体チャンネルに移動しました。§r", + "R§eあなたは\\ §r(?<p1>.+)§r§e\\ によって\\ Party\\ から退出させられました§r", + "=§eParty から退出しました。§r", + "R(?<p0>.+)\\ §r§ehas\\ disbanded\\ th'\\ party!§r", + "=§cYe nah be in a party.§r", + "=§cYou are not in a party!§r", + "=§cYe nah be in a party right now.§r", + "=§cYe must be in a party t' join th' party channel!§r", + "=§cTh' party be disbanded because all invites expired an' th' party be empty.§r", + "=§cYe no longer be in a party! Ye be moved t' th' ALL channel.§r", + "R§eYe\\ be\\ kicked\\ from\\ th'\\ party\\ by\\ §r(?<p1>.+)\\ §r§e§r", + "=§eYe abandoned ship.§r", + "R(?<p0>.+)\\ §r§ehar\\ oppløst\\ partyet!§r", + "=§cDu er ikke i et party for øyeblikket.§r", + "=§cYou are not in a party!§r", + "=§cDu er ikke i et party akkurat nå.§r", + "=§cDu må være i et party for å bli med i partykanalen!§r", + "=§cPartyet ble oppløst fordi alle invitasjonene utløpte og partyet var tomt.§r", + "=§cDu er ikke i et party og ble flyttet til ALLE-kanalen.§r", + "R§eDu\\ ble\\ kastet\\ ut\\ av\\ partyet\\ av\\ §r(?<p1>.+)\\ §r§e§r", + "=§eDu forlot partyet.§r", + "R(?<p0>.+)\\ §r§edesfez\\ a\\ party!§r", + "=§cNão estás numa party.§r", + "=§cYou are not in a party!§r", + "=§cNão estás numa party.§r", + "=§cTens de estar numa party para acederes ao canal da party!§r", + "=§cA party foi desfeita porque estava vazia e todos os convites expiraram.§r", + "=§cNão estás numa party, logo foste movido para o canal GERAL.§r", + "R§eFoste\\ expulso\\ da\\ party\\ por\\ §r(?<p1>.+)\\ §r§e§r", + "=§eSaíste da party.§r", + "R(?<p0>.+)\\ §r§ehar\\ upplöst\\ partyt!§r", + "=§cDur är för närvarande inte med i ett party.§r", + "=§cYou are not in a party!§r", + "=§cDu är inte med i ett party just nu.§r", + "=§cDu måste vara i ett party att gå med i partykanalen!§r", + "=§cPartyt upplöstes eftersom alla inbjudningar gick ut och partyt var tomt.§r", + "=§cDu är inte med i ett party och flyttades till ALLA-kanalen.§r", + "R§eDu\\ har\\ sparkades\\ från\\ partyt\\ av\\ §r(?<p1>.+)\\ §r§e§r", + "=§eDu lämnade partyt.§r", + "R(?<p0>.+)\\ §r§epartiyi\\ dağıttı!§r", + "=§cŞu anda bir partide değilsin.§r", + "=§cYou are not in a party!§r", + "=§cŞu an herhangi bir partide değilsin.§r", + "=§cParti kanalına girmek için bir partide olmalısın!§r", + "=§cParti dağıtıldı çünkü tüm davetlerin süresi doldu ve parti boş.§r", + "=§cBir partide değilsiniz ve GENEL kanala taşındınız.§r", + "R(?<p1>.+)§r§e\\ tarafından\\ partiden\\ atıldınız\\.§r", + "=§ePartiden ayrıldın.§r", + "R(?<p0>.+)\\ §r§ehar\\ opløst\\ partyet!§r", + "=§cDu er i øjeblikket ikke i et party.§r", + "=§cYou are not in a party!§r", + "=§cDu er ikke i et party lige nu.§r", + "=§cDu skal være i et party for at tilmelde dig party kanalen!§r", + "=§cPartyet blev opløst fordi alle invitationer udløb, og partyet var tomt.§r", + "=§cDu er ikke i et party og blev flyttet til ALLE kanalen.§r", + "R§eDu\\ er\\ blevet\\ smidt\\ ud\\ af\\ partyet\\ af\\ §r(?<p1>.+)\\ §r§e§r", + "=§eDu har forladt partyet§r", + "R(?<p0>.+)\\ §r§erozpustil\\ party!§r", + "=§cMomentálně nejsi v party.§r", + "=§cYou are not in a party!§r", + "=§cMomentálně nejsi v party.§r", + "=§cYou must be in a party to join the party channel!§r", + "=§cThe party was disbanded because all invites expired and the party was empty.§r", + "=§cNejsi v party, takže jsi byl přesunut do chatu „ALL“.§r", + "R§eByl\\ jsi\\ vyhozen\\ z\\ party\\ hráčem\\ §r(?<p1>.+)\\ §r§e§r", + "=§eOpustil jsi party.§r", + "R(?<p0>.+)\\ §r§ehajotti\\ partyn!§r", + "=§cEt ole partyssa juuri nyt.§r", + "=§cYou are not in a party!§r", + "=§cEt ole partyssa juuri nyt.§r", + "=§cSinun tulee olla partyssa voidaksesi liittyä partyn kanavalle!§r", + "=§cParty hajotettiin, koska kaikki kutsut vanhentuivat ja party on tyhjä.§r", + "=§cEt ole partyssa, joten sinut siirrettiin kanavalle ALL.§r", + "R(?<p1>.+)§r§e\\ potki\\ sinut\\ partysta§r", + "=§ePoistuit partysta.§r", + "R§eΟ\\ §r(?<p0>.+)\\ §r§eδιέλυσε\\ το\\ party!§r", + "=§cΔεν είσαι προσωρινά σε party.§r", + "=§cYou are not in a party!§r", + "=§cΔεν είσαι σε κάποιο party αυτή τη στιγμή.§r", + "=§cΠρέπει να είσαι σε party για να συμμετέχεις στο κανάλι του party!§r", + "R§eΟ\\ §r(?<p1>.+)\\ §r§eβγήκε\\ από\\ το\\ party\\.§r", + "=§cΔεν είσαι σε party οπότε μετακινήθηκες στο κανάλι ΟΛΑ.§r", + "R§eέχεις\\ διωχθεί\\ από\\ το\\ party\\ από\\ τον\\ §r(?<p1>.+)\\ §r§e§r", + "=§eΈφυγες από το party.§r", + "R(?<p0>.+)\\ §r§eрозпустив\\ групу!§r", + "=§cВи не є членом групи.§r", + "=§cYou are not in a party!§r", + "=§cВи не в групі.§r", + "=§cВи повинні бути в групі, щоб вступити в канал групи!§r", + "R(?<p1>.+)\\ §r§eзалишив\\ групу\\.§r", + "=§cВи не в групі і були переміщені до ЗАГАЛЬНОГО каналу.§r", + "R§eВи\\ були\\ вигнані\\ з\\ групи\\ гравцем\\ §r(?<p1>.+)\\ §r§e§r", + "=§eВи покинули групу.§r", + "R(?<p0>.+)\\ §r§ea\\ destrămat\\ party\\-ul!§r", + "=§cÎn acest moment nu te afli în vreun party.§r", + "=§cYou are not in a party!§r", + "=§cNu te afli într-un party în acest moment.§r", + "=§cTrebuie să fii într-un party pentru a te alătura canalului de party!§r", + "=§cParty-ul a fost destrămat deoarece toate invitațiile au expirat iar party-ul a fost gol.§r", + "=§cNu ești într-un party așa că ai fost mutat în canalul ALL.§r", + "R§eAi\\ fost\\ dat\\ afară\\ din\\ party\\ de\\ către\\ §r(?<p1>.+)\\ §r§e§r", + "=§eAi ieșit din party.§r", + "R(?<p0>.+)\\ §r§efeloszlatta\\ a\\ partyt!§r", + "=§cJelenleg nem vagy egy party tagja.§r", + "=§cYou are not in a party!§r", + "=§cJelenleg nem vagy partyban.§r", + "=§cEgy partyban kell lenned hogy csatlakozhass a party csatornához!§r", + "=§cA party fel lett oszlatva mert az összes meghívás lejárt és a party üres volt.§r", + "=§cNem vagy egy party tagja se, ezért átraktunk az ALL csatornába.§r", + "R§eKi\\ lettél\\ rúgva\\ a\\ partyból\\ §r(?<p1>.+)\\ §r§eáltal§r", + "=§eKiléptél a partyból.§r" + ], + "party_channel": [ + "=§aYou are now in the §r§6PARTY§r§a channel§r", + "=§aDu bist nun im §r§6PARTY§r§a Channel§r", + "=§aVous êtes maintenant dans le canal §r§6PARTY§r", + "=§aJe bent naar het §r§6partykanaal §r§averplaatst§r", + "=§aAhora estás en el canal de §r§6PARTY§r", + "=§aTi trovi nel canale: §r§6PARTY§r", + "=§aYou are now in the §r§6组队§r§a channel§r", + "=§aYou are now in the §r§6組隊§r§a channel§r", + "=§aYou are now in the §r§6КОМПАНИЯ§r§a channel§r", + "=§aYou are now in the §r§6PARTݧr§a channel§r", + "=§aYou are now in the §r§6ГРУПА§r§a channel§r", + + "=§aYou are now in the §r§6PARTY§r§a channel§r", + "=§aDu bist nun im §r§6PARTY§r§a Channel§r", + "=§aVous êtes maintenant dans le canal §r§6PARTY§r", + "=§aJe bent naar het §r§6partykanaal §r§averplaatst§r", + "=§aAhora estás en el canal de §r§6PARTY§r", + "=§aTi trovi nel canale: §r§6PARTY§r", + "=§a你正处于§r§6组队§r§a频道中§r", + "=§a已切換聊天頻道至§r§6組隊§r§a頻道§r", + "=§aVocê está no canal §r§6PARTY§r§a§r", + "=§aТеперь вы находитесь в канале \"§r§6КОМПАНИЯ§r§a\"§r", + "=§6PARTY§r§a 채널에 입장했습니다§r", + "=§aJesteś teraz na kanale „§r§6PARTY§r§a”§r", + "=§aあなたは現在 §r§6PARTY§r§a チャンネルにいます§r", + "=§aYe now be in th' §r§6PARTY§r§a channel§r", + "=§aDu er nå i §r§6PARTY§r§a-kanalen§r", + "=§aFoste para o canal §r§6PARTY§r§a§r", + "=§aDu är nu i §r§6PARTY§r§a-kanalen§r", + "=§aŞimdi §r§6PARTݧr§a kanalındasın§r", + "=§aDu er nu i §r§6PARTY§r§a kanalen§r", + "=§aNyní jsi v kanálu §r§6PARTY§r§a§r", + "=§aOlet nyt kanavalla §r§6PARTY§r", + "=§aΕίσαι τώρα στο §r§6PARTY§r§a κανάλι§r", + "=§aYou are now in the §r§6ГРУПА§r§a channel§r", + "=§aAcum ești în canalul §r§6PARTY§r§a§r", + "=§aMost már a(z) §r§6PARTY§r§a csatornában vagy§r" + ], + "all_invite_on": [ + "R(?<p0>.+)\\ §r§aenabled\\ All\\ Invite§r", + "R(?<p0>.+)\\ §r§ahat\\ die\\ Option\\ All\\ Invite\\ aktiviert§r", + "R(?<p0>.+)\\ §r§aa\\ activé\\ All\\ Invite§r", + "R(?<p0>.+)\\ §r§aheeft\\ All\\ Invite\\ §r§ageactiveerd§r", + "R(?<p0>.+)\\ §r§aha\\ activado\\ All\\ Invite§r", + "R(?<p0>.+)\\ §r§aha\\ abilitato\\ All\\ Invite§r", + "R(?<p0>.+)§r§a启用了All\\ Invite§r", + "R(?<p0>.+)\\ §r§a啟用了\\ All\\ Invite§r", + "R(?<p0>.+)\\ §r§aativou\\ a\\ opção\\ All\\ Invite§r", + "R(?<p0>.+)\\ §r§aвключил\\ All\\ Invite§r", + "R(?<p0>.+)§r§a\\ 님이\\ All\\ Invite§r§a을\\(를\\)\\ 활성화했습니다§r", + "R(?<p0>.+)\\ §r§awłącza\\ All\\ Invite§r", + "R(?<p0>.+)§r§a\\ が\\ All\\ Invite\\ を有効にしました§r", + "R(?<p0>.+)\\ §r§aenabled\\ All\\ Invite§r", + "R(?<p0>.+)\\ §r§aaktiverte\\ All\\ Invite§r", + "R(?<p0>.+)\\ §r§aativou\\ All\\ Invite§r", + "R(?<p0>.+)\\ §r§aaktiverade\\ All\\ Invite§r", + "R(?<p0>.+)§r§a,\\ All\\ Invite\\ ayarını\\ aktifleştirdi§r", + "R(?<p0>.+)\\ §r§aaktiverede\\ All\\ Invite§r", + "R§aHráč\\ §r(?<p0>.+)\\ §r§apovolil\\ All\\ Invite§r", + "R(?<p0>.+)\\ §r§aasetti\\ vaihtoehdon\\ All\\ Invite\\ päälle\\.§r", + "R§aΟ\\ §r(?<p0>.+)\\ §r§aενεργοποίησε\\ All\\ Invite§r", + "R(?<p0>.+)\\ §r§aувімкнув\\ All\\ Invite§r", + "R(?<p0>.+)\\ §r§aa\\ activat\\ All\\ Invite§r", + "R(?<p0>.+)\\ §r§abekapcsolta\\ ezt:\\ All\\ Invite§r" + ], + "all_invite_off": [ + "R(?<p0>.+)\\ §r§cdisabled\\ All\\ Invite§r", + "=§cYou are not allowed to invite players.§r", + "R(?<p0>.+)\\ §r§chat\\ All\\ Invite\\ deaktiviert§r", + "=§cDu bist nicht berechtigt andere Spieler in die Party einzuladen.§r", + "R(?<p0>.+)\\ §r§ca\\ désactivé\\ All\\ Invite§r", + "=§cVous n'êtes pas autorisé à inviter des joueurs.§r", + "R(?<p0>.+)\\ §r§cheeft\\ All\\ Invite\\ §r§cuitgeschakeld§r", + "=§cJe bent niet toegestaan om spelers uit te nodigen.§r", + "R(?<p0>.+)\\ §r§cha\\ desactivado\\ All\\ Invite§r", + "=§cNo tienes permitido invitar jugadores.§r", + "R(?<p0>.+)\\ §r§cha\\ disabilitato\\ All\\ Invite§r", + "=§cNon sei autorizzato ad invitare giocatori.§r", + "R(?<p0>.+)\\ §r§c禁用了All\\ Invite§r", + "=§c你无权邀请其他玩家。§r", + "R(?<p0>.+)\\ §r§c停用了\\ All\\ Invite§r", + "=§c你沒有邀請其他玩家的權限。§r", + "R(?<p0>.+)\\ §r§cdesativou\\ a\\ opção\\ All\\ Invite§r", + "=§cVocê não possui permissão para convidar jogadores.§r", + "R(?<p0>.+)\\ §r§cотключил\\ All\\ Invite§r", + "=§cУ вас нет прав на приглашение игроков.§r", + "R(?<p0>.+)§r§c이\\(가\\)\\ All\\ Invite을\\(를\\)\\ 비활성화했습니다§r", + "=§c플레이어를 초대할 수 없습니다.§r", + "R(?<p0>.+)\\ §r§cwyłącza\\ All\\ Invite§r", + "=§cNie masz pozwolenia, aby zapraszać graczy.§r", + "R(?<p0>.+)\\ §r§cが\\ All\\ Invite\\ を無効化しました§r", + "=§cプレイヤーを招待する権限がありません。§r", + "R(?<p0>.+)\\ §r§cdisabled\\ All\\ Invite§r", + "=§cYe nah be allowed t' invite pirates.§r", + "R(?<p0>.+)\\ §r§cdeaktiverte\\ All\\ Invite§r", + "=§cDu har ikke lov til å invitere spillere.§r", + "R(?<p0>.+)\\ §r§cdesativou\\ All\\ Invite§r", + "=§cNão tens permissão para convidar jogadores.§r", + "R(?<p0>.+)\\ §r§cinaktiverade\\ All\\ Invite§r", + "=§cDu har inte tillåtelse att bjuda in spelare.§r", + "R(?<p0>.+)\\ All\\ Invite\\ §r§cayarını\\ devre\\ dışı\\ bıraktı§r", + "=§cOyuncu davet etme izniniz yok.§r", + "R(?<p0>.+)\\ §r§cdeaktiverede\\ All\\ Invite§r", + "=§cDu har ikke tilladelse til at invitere spillere.§r", + "R§cHráč\\ §r(?<p0>.+)\\ §r§czakázal\\ All\\ Invite§r", + "=§cNemáš povolení zvát hráče.§r", + "R(?<p0>.+)\\ §r§cotti\\ pois\\ päältä\\ asetuksen\\ All\\ Invite§r", + "=§cEt voi kutsua pelaajia.§r", + "R§cΟ\\ §r(?<p0>.+)\\ §r§cαπενεργοποίησε\\ All\\ Invite§r", + "=§cΔεν επιτρέπεται να προσκαλέσεις παίκτες.§r", + "R(?<p0>.+)\\ §r§cвимкнув\\ All\\ Invite§r", + "=§cУ вас немає прав на запрошення гравців.§r", + "R(?<p0>.+)\\ §r§ca\\ dezactivat\\ All\\ Invite§r", + "=§cNu ai permisiunea de a invita jucători în party.§r", + "R(?<p0>.+)\\ §r§ckikapcsolta\\ ezt\\ All\\ Invite§r", + "=§cTe nem hívhatsz meg játékosokat.§r" + ], + "party_join": [ + "R(?<p1>.+)\\ §r§ejoined\\ the\\ party\\.§r", + "R(?<p1>.+)\\ §r§eist\\ der\\ Party\\ beigetreten\\.§r", + "R(?<p1>.+)\\ §r§ea\\ rejoint\\ la\\ party\\.§r", + "R(?<p1>.+)\\ §r§ejoined\\ the\\ party\\.§r", + "R(?<p1>.+)\\ §r§ese\\ unió\\ a\\ la\\ party\\.§r", + "R(?<p1>.+)\\ §r§eè\\ entrato\\ nel\\ party\\.§r", + "R(?<p1>.+)§r§e加入了组队。§r", + "R(?<p1>.+)\\ §r§e加入了組隊。§r", + "R(?<p1>.+)\\ §r§eentrou\\ na\\ party\\.§r", + "R(?<p1>.+)\\ §r§eприсоединился\\ к\\ компании\\.§r", + "R(?<p1>.+)§r§e\\ 님이\\ Party에\\ 참여했습니다\\.§r", + "R(?<p1>.+)\\ §r§edołącza\\ do\\ party\\.§r", + "R(?<p1>.+)\\ §r§ejoined\\ the\\ party\\.§r", + "R(?<p1>.+)\\ §r§eboarded\\ th'\\ party\\.§r", + "R(?<p1>.+)\\ §r§eble\\ med\\ i\\ partyet\\.§r", + "R(?<p1>.+)\\ §r§eentrou\\ na\\ party\\.§r", + "R(?<p1>.+)\\ §r§egick\\ med\\ i\\ party\\.§r", + "R(?<p1>.+)\\ §r§epartiye\\ katıldı\\.§r", + "R(?<p1>.+)\\ §r§etilsluttede\\ sig\\ partyet\\.§r", + "R§eHráč\\ §r(?<p1>.+)\\ §r§ese\\ připojil\\ do\\ party\\.§r", + "R(?<p1>.+)\\ §r§eliittyi\\ partyyn\\.§r", + "R§eΟ\\ §r(?<p1>.+)\\ §r§eμπήκε\\ στο\\ party\\.§r", + "R(?<p1>.+)\\ §r§eприєднався\\ до\\ групи\\.§r", + "R(?<p1>.+)\\ §r§es\\-a\\ alăturat\\ party\\-ului\\.§r", + "R(?<p1>.+)\\ §r§ecsatlakozott\\ a\\ partyhoz\\.§r" + ], + "party_leave": [ + "R(?<p1>.+)\\ §r§ehas\\ left\\ the\\ party\\.§r", + "R(?<p2>.+)\\ §r§ehas\\ been\\ removed\\ from\\ the\\ party\\.§r", + "R(?<p1>.+)\\ §r§ehat\\ die\\ Party\\ verlassen\\.§r", + "R(?<p2>.+)\\ §r§ewurde\\ aus\\ der\\ Party\\ entfernt\\.§r", + "R(?<p1>.+)\\ §r§ea\\ quitté\\ la\\ party\\.§r", + "R(?<p2>.+)\\ §r§ea\\ été\\ retiré\\ de\\ la\\ party\\.§r", + "=§cThe party was disbanded because all invites expired and the party was empty.§r", + "R(?<p2>.+)\\ §r§eis\\ uit\\ de\\ party\\ verwijderd\\.§r", + "R(?<p1>.+)\\ §r§eabandonó\\ la\\ party\\.§r", + "R(?<p2>.+)\\ §r§eha\\ sido\\ expulsado\\ de\\ la\\ party\\.§r", + "R(?<p1>.+)\\ §r§eha\\ lasciato\\ il\\ party\\.§r", + "R(?<p2>.+)\\ §r§eè\\ stato\\ rimosso\\ dal\\ party\\.§r", + "=§c因组队中没有成员, 且所有邀请均已过期, 组队已被解散。§r", + "R(?<p2>.+)§r§e已被移出组队。§r", + "R(?<p1>.+)\\ §r§e離開了組隊。§r", + "R(?<p2>.+)\\ §r§e已被移出組隊。§r", + "R(?<p1>.+)\\ §r§esaiu\\ da\\ party\\.§r", + "R(?<p2>.+)\\ §r§efoi\\ removido\\ da\\ party\\.§r", + "R(?<p1>.+)\\ §r§eпокинул\\ компанию\\.§r", + "R(?<p2>.+)\\ §r§eбыл\\ выгнан\\ из\\ компании\\.§r", + "R(?<p1>.+)§r§e\\ 님이\\ Party에서\\ 나갔습니다\\.§r", + "R(?<p2>.+)§r§e\\ 님이\\ Party에서\\ 추방되었습니다\\.§r", + "R(?<p1>.+)\\ §r§eopuszcza\\ party\\.§r", + "R(?<p2>.+)\\ §r§ezostał\\(a\\)\\ usunięty\\(\\-a\\)\\ z\\ party\\.§r", + "R(?<p1>.+)\\ §r§eが\\ Party\\ から退出しました。§r", + "R(?<p2>.+)\\ §r§eが\\ Party\\ から削除されました。§r", + "R(?<p1>.+)\\ §r§eabandoned\\ ship\\.§r", + "R(?<p2>.+)\\ §r§ebe\\ kicked\\ out\\ from\\ th'\\ party\\.§r", + "R(?<p1>.+)\\ §r§eforlot\\ partyet\\.§r", + "R(?<p2>.+)\\ §r§ehar\\ blitt\\ fjernet\\ fra\\ partyet\\.§r", + "R(?<p1>.+)\\ §r§esaiu\\ da\\ party\\.§r", + "R(?<p2>.+)\\ §r§efoi\\ removido\\ da\\ party\\.§r", + "R(?<p1>.+)\\ §r§elämnade\\ partyt\\.§r", + "R(?<p2>.+)\\ §r§ehar\\ tagits\\ bort\\ från\\ partyt\\.§r", + "R(?<p1>.+)§r§epartiden\\ ayrıldı\\.§r", + "R(?<p2>.+)§r§epartiden\\ çıkarıldı\\.§r", + "R(?<p1>.+)\\ §r§eforlod\\ partyet\\.§r", + "R(?<p2>.+)\\ §r§eer\\ blevet\\ fjernet\\ fra\\ partyet\\.§r", + "R§eHráč\\ §r(?<p1>.+)\\ §r§eopustil\\ party\\.§r", + "R§eHráč\\ §r(?<p2>.+)\\ §r§ebyl\\ vyhozen\\ z\\ party\\.§r", + "R(?<p1>.+)\\ §r§epoistui\\ partysta\\.§r", + "R(?<p2>.+)\\ §r§epoistettiin\\ partysta§r", + "=§cΤο party διαλύθηκε επειδή όλες οι προσκλήσεις έληξαν και το party ήταν άδειο.§r", + "R§eΟ\\ §r(?<p2>.+)\\ §r§eέχει\\ αφαιρεθεί\\ από\\ το\\ party\\.§r", + "=§cThe party was disbanded because all invites expired and the party was empty.§r", + "R(?<p2>.+)\\ §r§eбув\\ вигнаний\\ з\\ групи\\.§r", + "R(?<p1>.+)\\ §r§ea\\ părăsit\\ party\\-ul\\.§r", + "R(?<p2>.+)\\ §r§ea\\ fost\\ înlăturat\\(ă\\)\\ din\\ party\\.§r", + "R(?<p1>.+)\\ §r§ekilépett\\ a\\ partyból\\.§r", + "R(?<p2>.+)\\ §r§eki\\ lett\\ rúgva\\ a\\ partyból\\.§r" + ], + "invited": [ + "R(?<p0>.+)\\ §r§einvited\\ §r(?<p1>.+)\\ §r§eto\\ the\\ party!\\ They\\ have\\ §r§c60\\ §r§eseconds\\ to\\ accept\\.§r", + "R(?<p0>.+)\\ §r§ehat\\ §r(?<p1>.+)\\ §r§ein\\ die\\ Party\\ eingeladen!\\ §r\\k<p1>§r§e\\ hat\\ §r§c60\\ §r§eSekunden,\\ um\\ zu\\ akzeptieren\\.§r", + "R(?<p0>.+)\\ §r§ea\\ invité\\ §r(?<p1>.+)\\ §r§edans\\ la\\ party!\\ Cette\\ personne\\ a\\ §r§c60\\ §r§esecondes\\ pour\\ accepter\\.§r", + "R(?<p0>.+)\\ §r§eheeft\\ §r(?<p1>.+)\\ §r§euitgenodigd\\ voor\\ de\\ party!\\ Deze\\ speler\\ heeft\\ §r§c60\\ §r§eseconden\\ om\\ te\\ accepteren\\.§r", + "R§e¡§r(?<p0>.+)\\ §r§einvitó\\ a\\ §r(?<p1>.+)\\ §r§ea\\ la\\ party!\\ Tiene\\ §r§c60\\ §r§esegundos\\ para\\ aceptar\\.§r", + "R(?<p0>.+)\\ §r§eha\\ invitato\\ §r(?<p1>.+)\\ §r§enel\\ party!\\ Ha\\ §r§c60\\ §r§esecondi\\ per\\ accettare\\.§r", + "R(?<p0>.+)§r§e已邀请§r(?<p1>.+)§r§e到组队中!他们有§r§c60§r§e秒时间接受邀请。§r", + "R(?<p0>.+)§r§e\\ 邀請了\\ §r(?<p1>.+)§r§e\\ 到組隊裡!他們有\\ §r§c60§r§e\\ 秒的時間答覆。§r", + "R(?<p0>.+)\\ §r§econvidou\\ §r(?<p1>.+)\\ §r§epara\\ entrar\\ na\\ party!\\ Este\\ convite\\ expira\\ em\\ §r§c60\\ §r§esegundos\\.§r", + "R(?<p0>.+)\\ §r§eпригласил\\ §r(?<p1>.+)\\ §r§eв\\ компанию!\\ У\\ него\\ есть\\ §r§c60\\ §r§eсекунд,\\ чтобы\\ принять\\ приглашение\\.§r", + "R(?<p0>.+)§r§e\\ 님이\\ §r(?<p1>.+)§r§e\\ 님을\\ Party로\\ 초대했습니다!\\ §r§c60§r§e초\\ 내로\\ 수락하면\\ Party에\\ 참가합니다\\.§r", + "R(?<p0>.+)\\ §r§ezaprasza\\ §r(?<p1>.+)\\ §r§e\\ do\\ party!\\ Ma\\ §r§c60\\ §r§esekund\\ na\\ przyjęcie\\.§r", + "R(?<p0>.+)\\ §r§eが\\ §r(?<p1>.+)\\ §r§eを\\ Party\\ に招待しました!\\ 承認の有効時間は\\ §r§c60\\ §r§e秒です。§r", + "R(?<p0>.+)\\ §r§einvited\\ §r(?<p1>.+)\\ §r§et'\\ board\\ th'\\ party!\\ They\\ 'ave\\ §r§c60\\ §r§eseconds\\ t'\\ accept\\.§r", + "R(?<p0>.+)\\ §r§einviterte\\ §r(?<p1>.+)\\ §r§etil\\ partyet!\\ De\\ har\\ §r§c60\\ §r§esekunder\\ på\\ å\\ akseptere\\.§r", + "R(?<p0>.+)\\ §r§econvidou\\ §r(?<p1>.+)\\ §r§epara\\ a\\ party!\\ Ele\\ tem\\ §r§c60\\ §r§esegundos\\ para\\ aceitar\\.§r", + "R(?<p0>.+)\\ §r§ebjöd\\ in\\ §r(?<p1>.+)\\ §r§etill\\ partyt!\\ Hen\\ har\\ §r§c60\\ §r§esekunder\\ att\\ acceptera\\.§r", + "R(?<p0>.+)§r§e,\\ §r(?<p1>.+)§r§e\\ kişisini\\ partiye\\ davet\\ etti!\\ Kabul\\ etmeleri\\ için\\ §r§c60\\ §r§esaniyeleri\\ var\\.§r", + "R(?<p0>.+)\\ §r§einviterede\\ §r(?<p1>.+)\\ §r§etil\\ partyet!\\ De\\ har\\ §r§c60\\ §r§esekunder\\ til\\ at\\ acceptere\\.§r", + "R§eHráč\\ §r(?<p0>.+)\\ §r§epozval\\ hráče\\ §r(?<p1>.+)\\ §r§edo\\ party!\\ Nyní\\ má\\ §r§c60\\ §r§esekund\\ na\\ přijetí\\.§r", + "R(?<p0>.+)\\ §r§ekutsui\\ pelaajan\\ §r(?<p1>.+)\\ §r§epartyyn!\\ Hänellä\\ on\\ §r§c60\\ §r§esekuntia\\ aikaa\\ hyväksyä\\.§r", + "R§eΟ\\ §r(?<p0>.+)\\ §r§eπροσκάλεσε\\ τον\\ §r(?<p1>.+)\\ §r§eστο\\ party!\\ Έχει\\ §r§c60\\ §r§eδευτερόλεπτα\\ να\\ αποδεχτεί\\.§r", + "R(?<p0>.+)\\ §r§einvited\\ §r(?<p1>.+)\\ §r§eto\\ the\\ party!\\ They\\ have\\ §r§c60\\ §r§eseconds\\ to\\ accept\\.§r", + "R(?<p0>.+)\\ §r§ea\\ invitat\\ pe\\ §r(?<p1>.+)\\ §r§eîn\\ party!\\ Ei\\ au\\ §r§c60\\ §r§ede\\ secunde\\ să\\ accepte\\.§r", + "R(?<p0>.+)\\ §r§emeghívta\\ §r(?<p1>.+)§r§e\\-t\\ a\\ partyba!\\ §r§c60§r§e\\ másodperce\\ van\\ elfogadni\\.§r" + ], + "invite_perm": [ + "=§cCouldn't find a player with that name!§r", + "=§cYou cannot invite that player since they're not online.§r", + "=§cKeinen Spieler mit diesem Namen gefunden!§r", + "=§cDu kannst diesen Spieler nicht einladen, da er nicht online ist.§r", + "=§cImpossible de trouver un joueur avec ce nom!§r", + "=§cVous ne pouvez pas inviter ce joueur puisqu'il n'est pas en ligne.§r", + "=§cKon geen speler vinden met die naam!§r", + "=§cJe kunt die speler niet uitnodigen, omdat deze niet online is.§r", + "=§c¡No se pudo encontrar un jugador con ese nombre!§r", + "=§cNo puedes invitar a ese jugador porque no está en línea.§r", + "=§cNon è stato possibile trovare un giocatore con quel nome!§r", + "=§cNon puoi invitare quel giocatore perché non è online.§r", + "=§c无法找到叫这个名字的玩家!§r", + "=§c你不能邀请离线的玩家。§r", + "=§c找不到叫做該名稱的玩家!§r", + "=§c你不能邀請不在線上的玩家。§r", + "=§cNão foi possível encontrar este jogador!§r", + "=§cVocê não pode convidar um jogador que não está online.§r", + "=§cНе получается найти игрока с этим именем!§r", + "=§cВы не можете пригласить этого игрока, потому что он не в сети.§r", + "=§c그 이름을 가진 플레이어를 찾을 수 없습니다!§r", + "=§c해당 플레이어는 접속 중이 아니기 때문에 초대할 수 없습니다.§r", + "=§cNie znaleziono gracza z tą nazwą!§r", + "=§cNie możesz zaprosić tego gracza, gdyż jest niedostępny.§r", + "=§c入力された名前のプレイヤーが見つかりませんでした!§r", + "=§cオンラインではないため、このプレイヤーを招待できません。§r", + "=§cCould nah find a pirate wit' that name!§r", + "=§cYe can nah invite that pirate since they be offline.§r", + "=§cKunne ikke finne en spiller med det navnet!§r", + "=§cDu kan ikke invitere den spilleren siden de ikke er pålogget.§r", + "=§cNão foi possível encontrar este jogador!§r", + "=§cNão podes convidar um jogador offline!§r", + "=§cKunde inte hitta en spelare med det namnet!§r", + "=§cDu kan inte bjuda in denna spelare eftersom hen inte är online.§r", + "=§cBu isimde bir oyuncu bulunamadı!§r", + "=§cBu kişiyi aktif olmadığı için davet edemezsin.§r", + "=§cKunne ikke finde en spiller med det navn!§r", + "=§cDu kan ikke invitere den spiller, da de ikke er online.§r", + "=§cNepodařilo se nám najít hráče s tímto jménem!§r", + "=§cTohoto hráče nemůžeš pozvat, protože není online.§r", + "=§cEi löydetty pelaajaa tuolla nimellä!§r", + "=§cEt voi kutsua tätä pelaajaa, sillä hän ei ole paikalla.§r", + "=§cΔεν μπόρεσε να βρεθεί παίκτης με αυτό το όνομα!§r", + "=§cΔεν μπορείς να προσκαλέσεις αυτό τον παίκτη εφόσον είναι εκτός σύνδεσης.§r", + "=§cНеможливо знайти гравця з цим ім’ям!§r", + "=§cВи не можете запросити цього гравця, тому що він не в мережі.§r", + "=§cNu s-a putut găsi un jucător cu acel nume!§r", + "=§cNu poți invita acel jucător deoarece ei nu sunt online.§r", + "=§cNem találtunk játékost ezzel a névvel!§r", + "=§cNem hívhatod meg ezt a játékost mert nem elérhető.§r" + ], + "transfer": [ + "R§eThe\\ party\\ was\\ transferred\\ to\\ §r(?<p0>.+)\\ §r§eby\\ §r(?<p1>.+)§r", + "R§eDie\\ Party\\ wurde\\ von\\ §r(?<p1>.+)§r§e\\ an\\ §r(?<p0>.+)\\ §r§eübertragen\\.§r", + "R§eLa\\ party\\ a\\ été\\ transférée\\ à\\ §r(?<p0>.+)\\ §r§epar\\ §r(?<p1>.+)§r", + "R§eDe\\ party\\ is\\ overgebracht\\ naar\\ §r(?<p0>.+)\\ §r§edoor\\ §r(?<p1>.+)§r", + "R§eLa\\ party\\ fue\\ transferida\\ a\\ §r(?<p0>.+)\\ §r§epor\\ §r(?<p1>.+)§r", + "R§eIl\\ party\\ è\\ stato\\ trasferito\\ a\\ §r(?<p0>.+)\\ §r§eda\\ §r(?<p1>.+)§r", + "R(?<p1>.+)§r§e将组队移交给了§r(?<p0>.+)§r", + "R(?<p1>.+)\\ 將組隊轉移給了\\ §r(?<p0>.+)§r", + "R§eA\\ party\\ foi\\ transferida\\ para\\ §r(?<p0>.+)\\ §r§epor\\ §r(?<p1>.+)§r", + "R§eКомпания\\ была\\ передана\\ пользователю\\ §r(?<p0>.+)\\ §r§eигроком\\ §r(?<p1>.+)§r", + "R§eParty가\\ §r(?<p1>.+)§r§e에\\ 의해\\ §r(?<p0>.+)§r§e에게\\ 양도되었습니다§r", + "R§eParty\\ zostało\\ przeniesione\\ do\\ §r(?<p0>.+)\\ §r§eprzez\\ §r(?<p1>.+)§r", + "R§eParty\\ は\\ §r(?<p1>.+)\\ §r§eによって\\ §r(?<p0>.+)\\ §r§eへ譲渡されました§r", + "R§eTh'\\ party\\ be\\ given\\ t'\\ §r(?<p0>.+)\\ §r§eby\\ §r(?<p1>.+)§r", + "R§ePartyet\\ ble\\ overført\\ til\\ §r(?<p0>.+)\\ §r§eav\\ §r(?<p1>.+)§r", + "R§eA\\ party\\ foi\\ transferida\\ de\\ §r(?<p1>.+)\\ §r§epara\\ §r(?<p0>.+)§r", + "R§ePartyt\\ överfördes\\ till\\ §r(?<p0>.+)\\ §r§eav\\ §r(?<p1>.+)§r", + "R§eParti\\ §r(?<p1>.+)\\ §r§etarafından\\ §r(?<p0>.+)\\ §r§eoyuncusuna\\ transfer\\ edildi\\.§r", + "R§ePartyet\\ blev\\ overført\\ til\\ §r(?<p0>.+)\\ §r§eaf\\ §r(?<p1>.+)§r", + "R§eParty\\ byla\\ předána\\ hráči\\ §r(?<p0>.+)\\ §r§ehráčem\\ §r(?<p1>.+)§r", + "R(?<p1>.+)§r§e\\ siirsi\\ partyn\\ pelaajalle\\ §r(?<p0>.+)§r", + "R§eΤο\\ party\\ μεταφέρθηκε\\ στον\\ §r(?<p0>.+)\\ §r§eαπό\\ τον\\ §r(?<p1>.+)§r", + "R§eГрупу\\ було\\ передано\\ користувачу\\ §r(?<p0>.+)\\ §r§eгравцем\\ §r(?<p1>.+)§r", + "R§eParty\\-ul\\ a\\ fost\\ transferat\\ către\\ §r(?<p0>.+)\\ §r§ede\\ către\\ §r(?<p1>.+)§r", + "R§eA\\ party\\ át\\ lett\\ adva\\ §r(?<p0>.+)\\-nak/nek\\ §r(?<p1>.+)\\ által§r" + ], + "transfer_left": [ + "R§eThe\\ party\\ was\\ transferred\\ to\\ §r(?<p0>.+)\\ §r§ebecause\\ §r(?<p1>.+)\\ §r§eleft§r", + "R§eDie\\ Party\\ wurde\\ §r(?<p0>.+)§r§e\\ übergeben,\\ weil\\ §r(?<p1>.+)\\ §r§egegangen\\ ist§r", + "R§eLa\\ party\\ a\\ été\\ transférée\\ à\\ §r(?<p0>.+)\\ §r§ecar\\ §r(?<p1>.+)\\ §r§eest\\ parti§r", + "R§eDe\\ party\\ is\\ overgezet\\ naar\\ §r(?<p0>.+)\\ §r§eomdat\\ §r(?<p1>.+)\\ §r§eis\\ weggegaan§r", + "R§eLa\\ party\\ fue\\ transferida\\ a\\ §r(?<p0>.+)\\ §r§eporque\\ §r(?<p1>.+)\\ §r§ese\\ fue§r", + "R§eIl\\ party\\ è\\ stato\\ trasferito\\ a\\ §r(?<p0>.+)\\ §r§eperché\\ §r(?<p1>.+)\\ §r§eè\\ uscito§r", + "R§e由于§r(?<p1>.+)§r§e离开了组队,组队被移交给了§r(?<p0>.+)§r", + "R§e由於\\ §r(?<p1>.+)§r§e\\ 離開了組隊,組隊隊長一職移交給了\\ §r(?<p0>.+)§r", + "R§eA\\ party\\ foi\\ transferida\\ para\\ §r(?<p0>.+)\\ §r§epois\\ §r(?<p1>.+)\\ §r§edesconectou§r", + "R§eКомпания\\ была\\ передана\\ игроку\\ §r(?<p0>.+)§r§e,\\ потому\\ что\\ §r(?<p1>.+)§r§e\\ покинул\\ ее§r", + "R(?<p1>.+)§r§e\\ 님이\\ 떠났기\\ 때문에\\ Party가\\ §r(?<p0>.+)§r§e에게\\ 양도되었습니다§r", + "R§eParty\\ zostało\\ przeniesione\\ do\\ §r(?<p0>.+)§r§e,\\ ponieważ\\ §r(?<p1>.+)\\ §r§ewyszedł§r", + "R(?<p1>.+)\\ §r§eが退出したため、この\\ Party\\ は\\ §r(?<p0>.+)\\ §r§eに譲渡されました§r", + "R§eTh'\\ party\\ be\\ transferred\\ t'\\ §r(?<p0>.+)\\ §r§ebecause\\ §r(?<p1>.+)\\ §r§ebe\\ gone§r", + "R§ePartyet\\ ble\\ overført\\ til\\ §r(?<p0>.+)\\ §r§efordi\\ §r(?<p1>.+)\\ §r§eforlot\\ det§r", + "R§eA\\ party\\ foi\\ transferida\\ para\\ §r(?<p0>.+)\\ §r§eporque\\ §r(?<p1>.+)\\ §r§esaiu\\ do\\ servidor§r", + "R§ePartyt\\ överfördes\\ till\\ §r(?<p0>.+)\\ §r§eeftersom\\ §r(?<p1>.+)\\ §r§elämnade§r", + "R§eParti\\ §r(?<p0>.+)oyuncusuna\\ §r§etransfer\\ edildi\\ çünkü\\ §r(?<p1>.+)\\ §r§e\\ ayrıldı\\.§r", + "R§ePartyet\\ blev\\ givet\\ til\\ §r(?<p0>.+)\\ §r§efordi\\ §r(?<p1>.+)\\ §r§egik§r", + "R§eParty\\ byla\\ předána\\ hráči\\ §r(?<p0>.+)§r§e,\\ protože\\ hráč\\ §r(?<p1>.+)\\ §r§eodešel§r", + "R§eParty\\ siirrettiin\\ pelaajalle\\ §r(?<p0>.+)\\ §r§ekoska\\ §r(?<p1>.+)\\ §r§epoistui§r", + "R§eΤο\\ party\\ μεταφέρθηκε\\ στον\\ §r(?<p0>.+)\\ §r§eεπειδή\\ ο\\ §r(?<p1>.+)\\ §r§eέφυγε§r", + "R§eГрупа\\ була\\ передана\\ гравцю\\ §r(?<p0>.+)\\ §r§e,\\ тому\\ що\\ §r(?<p1>.+)\\ §r§eзалишив\\ її§r", + "R§eParty\\-ul\\ a\\ fost\\ transferat\\ către\\ §r(?<p0>.+)\\ §r§edeoarece\\ §r(?<p1>.+)\\ §r§ea\\ ieșit§r", + "R§eA\\ party\\ át\\ lett\\ adva\\ §r(?<p0>.+)§r§e\\-nak/nek\\ mert\\ §r(?<p1>.+)\\ §r§ekilépett§r" + ], + "promote_leader": [ + "R(?<p0>.+)§r§e\\ has\\ promoted\\ §r(?<p1>.+)\\ §r§eto\\ Party\\ Leader§r", + "R(?<p0>.+)§r§e\\ hat\\ §r(?<p1>.+)\\ §r§ezum\\ Leiter\\ der\\ Party\\ befördert§r", + "R(?<p0>.+)§r§e\\ a\\ promu\\ §r(?<p1>.+)\\ §r§een\\ tant\\ que\\ Chef\\ de\\ la\\ party§r", + "R(?<p0>.+)§r§e\\ heeft\\ §r(?<p1>.+)\\ §r§etot\\ partyleider\\ gepromoveerd§r", + "R(?<p0>.+)§r§e\\ ha\\ promovido\\ a\\ §r(?<p1>.+)\\ §r§ea\\ Líder\\ de\\ Party§r", + "R(?<p0>.+)§r§e\\ ha\\ promosso\\ §r(?<p1>.+)\\ §r§ea\\ Capo\\ del\\ Party§r", + "R(?<p0>.+)§r§e已将§r(?<p1>.+)§r§e提拔为组队队长,§r\\k<p0>§r§e现在为组队管理员§r", + "R(?<p0>.+)\\ §r§e已將\\ §r(?<p1>.+)§r§e\\ 提拔為組隊隊長§r", + "R(?<p0>.+)§r§e\\ promoveu\\ §r(?<p1>.+)\\ §r§epara\\ líder\\ da\\ party§r", + "R(?<p0>.+)§r§e\\ повысил\\ §r(?<p1>.+)\\ §r§eдо\\ лидера\\ компании§r", + "R(?<p0>.+)§r§e이\\(가\\)\\ §r(?<p1>.+)§r§e을\\(를\\)\\ Party\\ 리더로\\ 승급시켰습니다§r", + "R(?<p0>.+)§r§e\\ awansuje\\ rangą\\ §r(?<p1>.+)\\ §r§e\\ do\\ lidera\\ party§r", + "R(?<p0>.+)§r§e\\ が\\ §r(?<p1>.+)§r§e\\ を\\ Party\\ リーダーに昇格させました§r", + "R(?<p0>.+)§r§e\\ has\\ promoted\\ §r(?<p1>.+)\\ §r§et'\\ Party\\ Captain§r", + "R(?<p0>.+)§r§e\\ har\\ forfremmet\\ §r(?<p1>.+)\\ §r§etil\\ partyleder§r", + "R(?<p0>.+)§r§e\\ promoveu\\ §r(?<p1>.+)§r§e\\ a\\ líder\\ da\\ party§r", + "R(?<p0>.+)§r§e\\ har\\ befordrat\\ §r(?<p1>.+)\\ §r§etill\\ partyledare§r", + "R(?<p0>.+)§r§e,\\ §r(?<p1>.+)§r§e\\ kişisini\\ Parti\\ Liderliğine\\ terfi\\ etti§r", + "R(?<p0>.+)§r§e\\ har\\ forfremmet\\ §r(?<p1>.+)\\ §r§etil\\ Party\\ Leder§r", + "R§eHráč\\ §r(?<p0>.+)§r§e\\ povýšil\\ hráče\\ §r(?<p1>.+)\\ §r§ena\\ vedoucího\\ party\\.§r", + "R(?<p0>.+)§r§e\\ ylensi\\ pelaajan\\ §r(?<p1>.+)\\ §r§ePartyn\\ johtajaksi§r", + "R§eΟ\\ §r(?<p0>.+)§r§e\\ έχει\\ προάγει\\ τον\\ §r(?<p1>.+)\\ §r§eσε\\ Αρχηγό\\ Party§r", + "R(?<p0>.+)§r§e\\ підвищив\\ §r(?<p1>.+)\\ §r§eдо\\ лідера\\ групи§r", + "R(?<p0>.+)§r§e\\ a\\ promovat\\ pe\\ §r(?<p1>.+)\\ §r§eîn\\ Lider\\ de\\ Party§r", + "R(?<p0>.+)\\ §r§eelőléptette\\ §r(?<p1>.+)§r§e\\-t\\ Party\\ Vezetővé§r" + ], + "promote_moderator": [ + "R(?<p0>.+)§r§e\\ has\\ promoted\\ §r(?<p1>.+)\\ §r§eto\\ Party\\ Moderator§r", + "R(?<p0>.+)§r§e\\ hat\\ §r(?<p1>.+)\\ §r§ezum\\ Party\\-Moderator\\ befördert§r", + "R(?<p0>.+)§r§e\\ a\\ promu\\ §r(?<p1>.+)\\ §r§een\\ tant\\ que\\ Modérateur\\ de\\ la\\ party§r", + "R(?<p0>.+)§r§e\\ heeft\\ §r(?<p1>.+)\\ §r§egepromoveerd\\ tot\\ partymoderator§r", + "R(?<p0>.+)§r§e\\ ha\\ promovido\\ a\\ §r(?<p1>.+)\\ §r§ea\\ Moderador\\ de\\ la\\ Party§r", + "R(?<p0>.+)§r§e\\ ha\\ promosso\\ §r(?<p1>.+)\\ §r§ea\\ Moderatore\\ del\\ Party§r", + "R(?<p0>.+)§r§e已将§r(?<p1>.+)§r§e提拔为组队管理员§r", + "R(?<p0>.+)\\ §r§e已將\\ §r(?<p1>.+)§r§e\\ 提拔為組隊管理員§r", + "R(?<p0>.+)§r§e\\ promoveu\\ §r(?<p1>.+)\\ §r§epara\\ moderador\\ da\\ party§r", + "R(?<p0>.+)§r§e\\ повысил\\ §r(?<p1>.+)\\ §r§eдо\\ модератора\\ компании§r", + "R(?<p0>.+)§r§e이\\(가\\)\\ §r(?<p1>.+)§r§e\\(을\\)를\\ Party\\ 관리자로\\ 승급시켰습니다§r", + "R(?<p0>.+)§r§e\\ awansuje\\ rangą\\ §r(?<p1>.+)\\ §r§edo\\ moderatora\\ party§r", + "R(?<p0>.+)§r§e\\ が\\ §r(?<p1>.+)§r§e\\ を\\ Party\\ モデレーターに昇格させました§r", + "R(?<p0>.+)§r§e\\ has\\ promoted\\ §r(?<p1>.+)\\ §r§et'\\ Party\\ Moderator§r", + "R(?<p0>.+)§r§e\\ har\\ forfremmet\\ §r(?<p1>.+)\\ §r§etil\\ party\\-moderator§r", + "R(?<p0>.+)§r§e\\ promoveu\\ §r(?<p1>.+)\\ §r§ea\\ moderador\\ da\\ party§r", + "R(?<p0>.+)§r§e\\ har\\ befordrat\\ §r(?<p1>.+)\\ §r§etill\\ partymoderator§r", + "R(?<p0>.+)§r§e,\\ §r(?<p1>.+)§r§e\\ kişisini\\ Parti\\ Moderatörlüğüne\\ terfi\\ etti!\\-§r", + "R(?<p0>.+)§r§e\\ har\\ forfremmet\\ §r(?<p1>.+)\\ §r§etil\\ Party\\ Moderator§r", + "R§eHráč\\ §r(?<p0>.+)§r§e\\ povýšil\\ hráče\\ §r(?<p1>.+)\\ §r§ena\\ moderátora\\ party§r", + "R(?<p0>.+)§r§e\\ ylensi\\ pelaajan\\ §r(?<p1>.+)\\ §r§ePartyn\\ moderaattoriksi§r", + "R§eΟ\\ §r(?<p0>.+)§r§e\\ έχει\\ προάγει\\ τον\\ §r(?<p1>.+)\\ §r§eσε\\ Συντονιστή\\ Party§r", + "R(?<p0>.+)§r§e\\ підвищив\\ §r(?<p1>.+)\\ §r§eдо\\ модератора\\ групи§r", + "R(?<p0>.+)§r§e\\ a\\ promovat\\ pe\\ §r(?<p1>.+)\\ §r§eîn\\ Moderator\\ de\\ Party§r", + "R(?<p0>.+)§r§e\\ előléptette\\ §r(?<p1>.+)§r§e\\-t\\ Party\\ Moderátornak§r" + ], + "member": [ + "R(?<p1>.+)§r§e\\ has\\ demoted\\ §r(?<p0>.+)\\ §r§eto\\ Party\\ Member§r", + "R(?<p1>.+)§r§e\\ hat\\ §r(?<p0>.+)\\ §r§ezum\\ Partymitglied\\ degradiert§r", + "R(?<p1>.+)\\ §r§e\\ a\\ rétrogradé\\ §r(?<p0>.+)§r§e\\ en\\ tant\\ que\\ Membre\\ de\\ la\\ party!§r", + "R(?<p1>.+)§r§e\\ heeft\\ §r(?<p0>.+)\\ §r§egedegradeerd\\ tot\\ partylid§r", + "R(?<p1>.+)§r§e\\ ha\\ rebajado\\ a\\ §r(?<p0>.+)\\ §r§ea\\ Miembro\\ de\\ la\\ Party§r", + "R(?<p1>.+)§r§e\\ ha\\ degradato\\ §r(?<p0>.+)\\ §r§ea\\ Membro\\ del\\ Party§r", + "R(?<p1>.+)§r§e已将§r(?<p0>.+)§r§e降职为普通成员§r", + "R(?<p1>.+)§r§e\\ 已將\\ §r(?<p0>.+)§r§e\\ 降級為組隊隊員§r", + "R(?<p1>.+)§r§e\\ rebaixou\\ §r(?<p0>.+)\\ §r§epara\\ membro\\ da\\ party§r", + "R(?<p1>.+)§r§e\\ понизил\\ §r(?<p0>.+)\\ §r§eдо\\ участника\\ компании§r", + "R(?<p1>.+)§r§e이\\(가\\)\\ §r(?<p0>.+)§r§e을\\(를\\)\\ Party\\ 멤버로\\ 강등시켰습니다§r", + "R(?<p1>.+)§r§e\\ został\\(a\\)\\ zdegradowany\\(\\-a\\)\\ §r(?<p0>.+)\\ §r§edo\\ członka\\ party§r", + "R(?<p1>.+)§r§e\\ が\\ §r(?<p0>.+)§r§e\\ を\\ Party\\ メンバーに降格させました§r", + "R(?<p1>.+)§r§e\\ has\\ demoted\\ §r(?<p0>.+)\\ §r§et'\\ Party\\ Member§r", + "R(?<p1>.+)§r§e\\ har\\ nedgradert\\ §r(?<p0>.+)\\ §r§etil\\ party\\-medlem§r", + "R(?<p1>.+)§r§e\\ rebaixou\\ §r(?<p0>.+)\\ §r§epara\\ membro\\ da\\ party§r", + "R(?<p1>.+)§r§e\\ degraderade\\ §r(?<p0>.+)\\ §r§etill\\ Partymedlem§r", + "R(?<p1>.+)§r§e,\\ §r(?<p0>.+)§r§e\\ oyuncusunu\\ Parti\\ Üyesi\\ rütbesine\\ düşürdü§r", + "R(?<p1>.+)§r§e\\ har\\ degraderet\\ §r(?<p0>.+)\\ §r§etil\\ party\\ medlem§r", + "R§eHráč\\ §r(?<p1>.+)§r§e\\ degradoval\\ hráče\\ §r(?<p0>.+)\\ §r§ena\\ člena\\ party§r", + "R(?<p1>.+)§r§e\\ alensi\\ pelaajan\\ §r(?<p0>.+)\\ §r§ePartyn\\ jäseneksi§r", + "R§eΟ\\ §r(?<p1>.+)§r§e\\ έχει\\ υποβιβάσει\\ τον\\ §r(?<p0>.+)\\ §r§eσε\\ Μέλος\\ Party§r", + "R(?<p1>.+)§r§e\\ понизив\\ §r(?<p0>.+)\\ §r§eдо\\ учасника\\ Party§r", + "R(?<p1>.+)§r§e\\ a\\ retrogradat\\ pe\\ §r(?<p0>.+)\\ §r§eîn\\ Membru\\ de\\ Party§r", + "R(?<p1>.+)§r§e\\ lefokozta\\ §r(?<p0>.+)\\-t\\ §r§eParty\\ Taggá§r" + ], + "accept_invite_leader": [ + "R§eYou\\ have\\ joined\\ §r(?<p1>.+)'s\\ §r§eparty!§r", + "R§eDu\\ bist\\ der\\ Party\\ von\\ §r(?<p1>.+)\\ §r§ebeigetreten!§r", + "R§eVous\\ avez\\ rejoint\\ la\\ party\\ de\\ §r(?<p1>.+)§r§e!§r", + "R§eJe\\ trad\\ toe\\ tot\\ de\\ party\\ van\\ §r(?<p1>.+)§r§e!§r", + "R§e¡Te\\ has\\ unido\\ a\\ la\\ party\\ de\\ §r(?<p1>.+)§r§e!§r", + "R§eTi\\ sei\\ unito\\ al\\ party\\ di\\ §r(?<p1>.+)§r§e!§r", + "R§e你加入了§r(?<p1>.+)§r§e的组队!§r", + "R§e你已加入\\ §r(?<p1>.+)\\ §r§e的組隊!§r", + "R§eVocê\\ entrou\\ na\\ party\\ de\\ §r(?<p1>.+)§r§e!§r", + "R§eВы\\ присоединились\\ к\\ компании\\ игрока\\ §r(?<p1>.+)§r§e!§r", + "R(?<p1>.+)§r§e\\ 님의\\ Party에\\ 참여했습니다!§r", + "R§eDołączono\\ do\\ party\\ gracza\\ §r(?<p1>.+)§r§e!§r", + "R(?<p1>.+)\\ §r§eの\\ Party\\ に参加しました!§r", + "R§eYe\\ 'ave\\ boarded\\ §r(?<p1>.+)'s\\ §r§eparty!§r", + "R§eDu\\ har\\ blitt\\ med\\ i\\ §r(?<p1>.+)\\ sitt\\ §r§eparty!§r", + "R§eEntraste\\ na\\ party\\ de\\ §r(?<p1>.+)§r§e!§r", + "R§eDu\\ har\\ gått\\ med\\ i\\ §r(?<p1>.+)s\\ §r§eparty!§r", + "R§f\\ §r(?<p1>.+)'§r§eın\\ partysine\\ katıldın!§r", + "R§eDu\\ har\\ tilsluttet\\ dig\\ §r(?<p1>.+)'s\\ §r§eparty!§r", + "R§ePřipojil\\ ses\\ do\\ party\\ hráče\\ §r(?<p1>.+)§r§e!§r", + "R§eLiityit\\ pelaajan\\ §r(?<p1>.+)\\ §r§epartyyn!§r", + "R§eΈχεις\\ ενταχθεί\\ στο\\ party\\ του\\ §r(?<p1>.+)§r§e!§r", + "R§eYou\\ have\\ joined\\ §r(?<p1>.+)'s\\ §r§eparty!§r", + "R§eTe\\-ai\\ alăturat\\ în\\ party\\-ul\\ lui\\ §r(?<p1>.+)\\ §r§e!§r", + "R§eCsatlakoztál\\ §r(?<p1>.+)\\ §r§epartyjához!§r" + ], + "accept_invite_members": [ + "R§eYou'll\\ be\\ partying\\ with:\\ §r(?<p2>.+)§r", + "R§eDu\\ bist\\ in\\ einer\\ Party\\ mit:\\ §r(?<p2>.+)§r", + "R§eVous\\ serez\\ en\\ party\\ avec:\\ §r(?<p2>.+)§r", + "R§eJe\\ zit\\ in\\ een\\ party\\ met:\\ §r(?<p2>.+)§r", + "R§eEstarás\\ jugando\\ con:\\ §r(?<p2>.+)§r", + "R§eSarai\\ in\\ un\\ party\\ con:\\ §r(?<p2>.+)§r", + "R§e组队成员:§r(?<p2>.+)§r", + "R§e組隊隊員:§r(?<p2>.+)§r", + "R§eJogando\\ com:\\ §r(?<p2>.+)§r", + "R§eВы\\ будете\\ в\\ компании\\ с:\\ §r(?<p2>.+)§r", + "R§e같이\\ Party에\\ 있는\\ 사람:\\ §r(?<p2>.+)§r", + "R§eJesteś\\ w\\ party\\ z:\\ §r(?<p2>.+)§r", + "R§e以下の人とPartyを組みます:§r(?<p2>.+)§r", + "R§eYe\\ will\\ be\\ partyin'\\ wit':\\ §r(?<p2>.+)§r", + "R§eDu\\ kommer\\ til\\ å\\ være\\ i\\ party\\ med:\\ §r(?<p2>.+)§r", + "R§eVais\\ jogar\\ com:\\ §r(?<p2>.+)§r", + "R§eDu\\ kommer\\ att\\ party\\ upp\\ med:\\ §r(?<p2>.+)§r", + "R§eBunlarla\\ partide\\ olacaksın:§r(?<p2>.+)§r", + "R§eDu\\ kommer\\ til\\ at\\ være\\ i\\ party\\ med:\\ §r(?<p2>.+)§r", + "R§eBudeš\\ v\\ party\\ s\\ těmito\\ hráči:\\ §r(?<p2>.+)§r", + "R§eKanssasi\\ partyssa:\\ §r(?<p2>.+)§r", + "R§eΘα\\ είσαι\\ στο\\ party\\ με:\\ §r(?<p2>.+)§r", + "R§eВи\\ будете\\ в\\ групі\\ з:\\ §r(?<p2>.+)§r", + "R§eVei\\ fi\\ în\\ party\\ cu:\\ §r(?<p2>.+)§r", + "R§eVelük\\ leszel\\ egy\\ partyban:\\ §r(?<p2>.+)§r" + ] +}
\ No newline at end of file |