From 1d6ffcea7eab6e73852f9feb0972438fa7dd790b Mon Sep 17 00:00:00 2001 From: cmastudios Date: Sat, 22 Feb 2014 01:12:11 -0600 Subject: [PATCH 01/36] Bump version to 1.9-SNAPSHOT for development @taoneill @grinning we need a new name for War 1.9. Maybe Bob can have his chance again after all? @taoneill also please update main war branch to 'develop'. --- war/pom.xml | 3 ++- war/src/main/resources/plugin.yml | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/war/pom.xml b/war/pom.xml index 53f49f2..20d20d9 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -3,10 +3,11 @@ 4.0.0 com.tommytony war - 1.8 + 1.9-SNAPSHOT jar War http://war.tommytony.com + Minecraft PVP arenas (called warzones) for a fast-paced and structured PVP experience with TDM, CTF and more! 2.2.1 diff --git a/war/src/main/resources/plugin.yml b/war/src/main/resources/plugin.yml index a5ff275..d516993 100644 --- a/war/src/main/resources/plugin.yml +++ b/war/src/main/resources/plugin.yml @@ -1,8 +1,8 @@ -name: War -version: 1.8 (Nimitz) -description: Minecraft PVP arenas (called warzones) for a fast-paced and structured PVP experience with TDM, CTF & more! +name: ${project.name} +version: ${project.version} +description: ${project.description} author: tommytony -website: http://war.tommytony.com +website: ${project.url} main: com.tommytony.war.War softdepend: [Spout, TagAPI, WorldEdit] permissions: From 4106dd887fc67169004d777e09c8c2bb0f3cb483 Mon Sep 17 00:00:00 2001 From: cmastudios Date: Sat, 22 Feb 2014 01:17:20 -0600 Subject: [PATCH 02/36] Autojoin zone on connect Closes #698. #733. @taoneill please test. --- war/src/main/java/com/tommytony/war/War.java | 1 + .../main/java/com/tommytony/war/Warzone.java | 7 +++++ .../com/tommytony/war/config/WarConfig.java | 3 +- .../war/event/WarPlayerListener.java | 29 +++++++++++++++++++ 4 files changed, 39 insertions(+), 1 deletion(-) diff --git a/war/src/main/java/com/tommytony/war/War.java b/war/src/main/java/com/tommytony/war/War.java index 89c5f0f..112e6ba 100644 --- a/war/src/main/java/com/tommytony/war/War.java +++ b/war/src/main/java/com/tommytony/war/War.java @@ -180,6 +180,7 @@ public class War extends JavaPlugin { warConfig.put(WarConfig.RESETSPEED, 5000); warConfig.put(WarConfig.MAXSIZE, 750); warConfig.put(WarConfig.LANGUAGE, Locale.getDefault().toString()); + warConfig.put(WarConfig.AUTOJOIN, ""); warzoneDefaultConfig.put(WarzoneConfig.AUTOASSIGN, false); warzoneDefaultConfig.put(WarzoneConfig.BLOCKHEADS, true); diff --git a/war/src/main/java/com/tommytony/war/Warzone.java b/war/src/main/java/com/tommytony/war/Warzone.java index 700fb41..92337b2 100644 --- a/war/src/main/java/com/tommytony/war/Warzone.java +++ b/war/src/main/java/com/tommytony/war/Warzone.java @@ -153,6 +153,13 @@ public class Warzone { return bestGuess; } + public static Warzone getZoneByNameExact(String name) { + for (Warzone zone : War.war.getWarzones()) { + if (zone.getName().equalsIgnoreCase(name)) return zone; + } + return null; + } + public static Warzone getZoneByLocation(Location location) { for (Warzone warzone : War.war.getWarzones()) { if (location.getWorld().getName().equals(warzone.getWorld().getName()) && warzone.getVolume() != null && warzone.getVolume().contains(location)) { diff --git a/war/src/main/java/com/tommytony/war/config/WarConfig.java b/war/src/main/java/com/tommytony/war/config/WarConfig.java index 36846ea..3fbc454 100644 --- a/war/src/main/java/com/tommytony/war/config/WarConfig.java +++ b/war/src/main/java/com/tommytony/war/config/WarConfig.java @@ -11,7 +11,8 @@ public enum WarConfig { TNTINZONESONLY (Boolean.class), RESETSPEED (Integer.class), MAXSIZE (Integer.class), - LANGUAGE (String.class); + LANGUAGE (String.class), + AUTOJOIN (String.class); private final Class configType; diff --git a/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java b/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java index ff61434..295eca5 100644 --- a/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java +++ b/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java @@ -3,6 +3,7 @@ package com.tommytony.war.event; import java.util.HashMap; import java.util.List; +import com.tommytony.war.config.WarConfig; import org.bukkit.ChatColor; import org.bukkit.Effect; import org.bukkit.Location; @@ -73,6 +74,34 @@ public class WarPlayerListener implements Listener { } } + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onPlayerJoin(final PlayerJoinEvent event) { + String autojoinName = War.war.getWarConfig().getString(WarConfig.AUTOJOIN); + boolean autojoinEnabled = autojoinName.isEmpty(); + if (autojoinEnabled) { // Won't be able to find warzone if unset + Warzone autojoinWarzone = Warzone.getZoneByNameExact(autojoinName); + if (autojoinWarzone == null) { + War.war.getLogger().log(Level.WARNING, "Failed to find autojoin warzone ''{0}''.", new Object[] {autojoinName}); + return; + } + if (autojoinWarzone.getWarzoneConfig().getBoolean(WarzoneConfig.DISABLED) || autojoinWarzone.isReinitializing()) { + War.war.badMsg(event.getPlayer(), "join.disabled"); + event.getPlayer().teleport(autojoinWarzone.getTeleport()); + } else if (!autojoinWarzone.getWarzoneConfig().getBoolean(WarzoneConfig.JOINMIDBATTLE) && autojoinWarzone.isEnoughPlayers()) { + War.war.badMsg(event.getPlayer(), "join.progress"); + event.getPlayer().teleport(autojoinWarzone.getTeleport()); + } else if (autojoinWarzone.isFull()) { + War.war.badMsg(event.getPlayer(), "join.full.all"); + event.getPlayer().teleport(autojoinWarzone.getTeleport()); + } else if (autojoinWarzone.isFull(event.getPlayer())) { + War.war.badMsg(event.getPlayer(), "join.permission.all"); + event.getPlayer().teleport(autojoinWarzone.getTeleport()); + } else { // Player will only ever be autoassigned to a team + autojoinWarzone.autoAssign(event.getPlayer()); + } + } + } + @EventHandler public void onPlayerDropItem(final PlayerDropItemEvent event) { if (War.war.isLoaded()) { From 72a2f08d70352970cba5230d82c3744c055d0532 Mon Sep 17 00:00:00 2001 From: cmastudios Date: Sat, 22 Feb 2014 18:12:11 -0600 Subject: [PATCH 03/36] Config to apply potions on spawn. Closes #615. The new APPLYPOTION configuration option allows warzone makers to give potion effects ot players every time they spawn. Use case: Resistance 5 for a few seconds on player spawn to prevent them from being "spawn camped" - killed when they step out by other players waiting nearby. Format of APPLYPOTION: effect_type:duration:amplification effect_type: For a valid list of values that can be used for this type param, please see http://jd.bukkit.org/rb/apidocs/org/bukkit/potion/PotionEffectType.html duration: Time in ticks (1/20 sec) that the potion will apply for. amplification: Amplifier to the potion's power. @taoneill @cmastudios documentate how to tune this option before 1.9 release on the wiki. Also please test use of this option in game (pulling a @grinning here). --- war/src/main/java/com/tommytony/war/War.java | 22 +++++++++++++++++++ .../main/java/com/tommytony/war/Warzone.java | 8 +++++++ .../com/tommytony/war/config/TeamConfig.java | 3 ++- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/war/src/main/java/com/tommytony/war/War.java b/war/src/main/java/com/tommytony/war/War.java index 112e6ba..17ad4fa 100644 --- a/war/src/main/java/com/tommytony/war/War.java +++ b/war/src/main/java/com/tommytony/war/War.java @@ -57,6 +57,8 @@ import com.tommytony.war.utility.PlayerState; import com.tommytony.war.utility.SizeCounter; import com.tommytony.war.utility.WarLogFormatter; import com.tommytony.war.volume.Volume; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; /** * Main class of War @@ -225,6 +227,7 @@ public class War extends JavaPlugin { teamDefaultConfig.put(TeamConfig.KILLSTREAK, false); teamDefaultConfig.put(TeamConfig.BLOCKWHITELIST, "all"); teamDefaultConfig.put(TeamConfig.PLACEBLOCK, true); + teamDefaultConfig.put(TeamConfig.APPLYPOTION, ""); this.getDefaultInventories().clearLoadouts(); HashMap defaultLoadout = new HashMap(); @@ -1318,4 +1321,23 @@ public class War extends JavaPlugin { public Locale getLoadedLocale() { return messages.getLocale(); } + + /** + * Convert serialized effect to actual effect. + * @param serializedEffect String stored in configuration. + * Format: TYPE:DURATION:AMPLIFY + * @return Potion effect or null otherwise + */ + public PotionEffect getPotionEffect(String serializedEffect) { + String[] arr = serializedEffect.split(":"); + if (arr.length != 3) return null; + try { + PotionEffectType type = PotionEffectType.getByName(arr[0]); + int duration = Integer.parseInt(arr[1]); + int amplification = Integer.parseInt(arr[2]); + return new PotionEffect(type, duration, amplification); + } catch (RuntimeException ex) { + return null; + } + } } diff --git a/war/src/main/java/com/tommytony/war/Warzone.java b/war/src/main/java/com/tommytony/war/Warzone.java index 92337b2..5287c6b 100644 --- a/war/src/main/java/com/tommytony/war/Warzone.java +++ b/war/src/main/java/com/tommytony/war/Warzone.java @@ -36,6 +36,7 @@ import org.bukkit.inventory.InventoryView; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; import org.bukkit.permissions.Permissible; +import org.bukkit.potion.PotionEffect; import org.bukkit.scoreboard.DisplaySlot; import org.bukkit.scoreboard.Objective; import org.bukkit.scoreboard.Scoreboard; @@ -451,6 +452,13 @@ public class Warzone { // clear potion effects PotionEffectHelper.clearPotionEffects(player); + + if (!team.getTeamConfig().getString(TeamConfig.APPLYPOTION).isEmpty()) { + PotionEffect effect = War.war.getPotionEffect(team.getTeamConfig().getString(TeamConfig.APPLYPOTION)); + if (effect != null) { + player.addPotionEffect(effect); + } + } boolean isFirstRespawn = false; if (!this.getLoadoutSelections().keySet().contains(player.getName())) { diff --git a/war/src/main/java/com/tommytony/war/config/TeamConfig.java b/war/src/main/java/com/tommytony/war/config/TeamConfig.java index 222c0d5..807e2de 100644 --- a/war/src/main/java/com/tommytony/war/config/TeamConfig.java +++ b/war/src/main/java/com/tommytony/war/config/TeamConfig.java @@ -17,7 +17,8 @@ public enum TeamConfig { XPKILLMETER (Boolean.class), KILLSTREAK (Boolean.class), BLOCKWHITELIST (String.class), - PLACEBLOCK (Boolean.class); + PLACEBLOCK (Boolean.class), + APPLYPOTION(String.class); private final Class configType; From 64ae4c617f58f61d1ea46e045f9b760bd3fbd2dc Mon Sep 17 00:00:00 2001 From: cmastudios Date: Sat, 22 Feb 2014 19:46:53 -0600 Subject: [PATCH 04/36] Teleport 'warmup' time - delay before teleport Closes #507. War now includes a configuration option "TPWARMUP" to add delays before teleporting players to a war. This can be used on full-world PvP servers to prevent players from running away from a fight. The configuration option is specified in ticks - 20/sec. The delay is activated for /zone and /warhub. @taoneill @cmastudios documentate for 1.9 release. --- war/src/main/java/com/tommytony/war/War.java | 1 + .../tommytony/war/command/WarhubCommand.java | 12 +++- .../tommytony/war/command/WarzoneCommand.java | 8 +++ .../com/tommytony/war/config/WarConfig.java | 3 +- .../tommytony/war/job/TeleportPlayerJob.java | 51 +++++++++++++ war/src/main/resources/messages.properties | 4 ++ .../war/job/TeleportPlayerJobTest.java | 71 +++++++++++++++++++ 7 files changed, 148 insertions(+), 2 deletions(-) create mode 100644 war/src/main/java/com/tommytony/war/job/TeleportPlayerJob.java create mode 100644 war/src/test/java/com/tommytony/war/job/TeleportPlayerJobTest.java diff --git a/war/src/main/java/com/tommytony/war/War.java b/war/src/main/java/com/tommytony/war/War.java index 17ad4fa..7cc80b6 100644 --- a/war/src/main/java/com/tommytony/war/War.java +++ b/war/src/main/java/com/tommytony/war/War.java @@ -183,6 +183,7 @@ public class War extends JavaPlugin { warConfig.put(WarConfig.MAXSIZE, 750); warConfig.put(WarConfig.LANGUAGE, Locale.getDefault().toString()); warConfig.put(WarConfig.AUTOJOIN, ""); + warConfig.put(WarConfig.TPWARMUP, 0); warzoneDefaultConfig.put(WarzoneConfig.AUTOASSIGN, false); warzoneDefaultConfig.put(WarzoneConfig.BLOCKHEADS, true); diff --git a/war/src/main/java/com/tommytony/war/command/WarhubCommand.java b/war/src/main/java/com/tommytony/war/command/WarhubCommand.java index 609de85..c31a730 100644 --- a/war/src/main/java/com/tommytony/war/command/WarhubCommand.java +++ b/war/src/main/java/com/tommytony/war/command/WarhubCommand.java @@ -1,5 +1,7 @@ package com.tommytony.war.command; +import com.tommytony.war.config.WarConfig; +import com.tommytony.war.job.TeleportPlayerJob; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -36,7 +38,15 @@ public class WarhubCommand extends AbstractWarCommand { if (playerWarzone != null) { // was in zone playerWarzone.handlePlayerLeave(player, War.war.getWarHub().getLocation(), true); } - player.teleport(War.war.getWarHub().getLocation()); + int warmup = War.war.getWarConfig().getInt(WarConfig.TPWARMUP); + if (warmup > 0) { + final int TICKS_PER_SECOND = 20; + TeleportPlayerJob job = new TeleportPlayerJob(player, War.war.getWarHub().getLocation()); + job.runTaskLater(War.war, warmup); + this.msg("command.tp.init", warmup / TICKS_PER_SECOND); + } else { + player.teleport(War.war.getWarHub().getLocation()); + } } return true; } diff --git a/war/src/main/java/com/tommytony/war/command/WarzoneCommand.java b/war/src/main/java/com/tommytony/war/command/WarzoneCommand.java index 2b20d9e..2cc5196 100644 --- a/war/src/main/java/com/tommytony/war/command/WarzoneCommand.java +++ b/war/src/main/java/com/tommytony/war/command/WarzoneCommand.java @@ -1,5 +1,7 @@ package com.tommytony.war.command; +import com.tommytony.war.config.WarConfig; +import com.tommytony.war.job.TeleportPlayerJob; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -30,8 +32,14 @@ public class WarzoneCommand extends AbstractWarCommand { Warzone warzone = Warzone.getZoneByName(args[0]); if (warzone != null && warzone.getTeleport() != null) { Warzone playerWarzone = Warzone.getZoneByPlayerName(player.getName()); + int warmup = War.war.getWarConfig().getInt(WarConfig.TPWARMUP); if (playerWarzone != null) { playerWarzone.handlePlayerLeave(player, warzone.getTeleport(), true); + } else if (warmup > 0) { + final int TICKS_PER_SECOND = 20; + TeleportPlayerJob job = new TeleportPlayerJob(player, warzone.getTeleport()); + job.runTaskLater(War.war, warmup); + this.msg("command.tp.init", warmup / TICKS_PER_SECOND); } else { player.teleport(warzone.getTeleport()); } diff --git a/war/src/main/java/com/tommytony/war/config/WarConfig.java b/war/src/main/java/com/tommytony/war/config/WarConfig.java index 3fbc454..e78e469 100644 --- a/war/src/main/java/com/tommytony/war/config/WarConfig.java +++ b/war/src/main/java/com/tommytony/war/config/WarConfig.java @@ -12,7 +12,8 @@ public enum WarConfig { RESETSPEED (Integer.class), MAXSIZE (Integer.class), LANGUAGE (String.class), - AUTOJOIN (String.class); + AUTOJOIN (String.class), + TPWARMUP(Integer.class); private final Class configType; diff --git a/war/src/main/java/com/tommytony/war/job/TeleportPlayerJob.java b/war/src/main/java/com/tommytony/war/job/TeleportPlayerJob.java new file mode 100644 index 0000000..280f198 --- /dev/null +++ b/war/src/main/java/com/tommytony/war/job/TeleportPlayerJob.java @@ -0,0 +1,51 @@ +package com.tommytony.war.job; + +import com.tommytony.war.War; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.scheduler.BukkitRunnable; + +public class TeleportPlayerJob extends BukkitRunnable { + private final Player player; + private final Location location; + private final Location originalLocation; + private final double originalHealth; + + public TeleportPlayerJob(Player player, Location location) { + this.player = player; + this.location = location; + this.originalLocation = player.getLocation().clone(); + this.originalHealth = player.getHealth(); + } + + @Override + public void run() { + if (!player.isOnline()) { + } else if (hasPlayerMoved()) { + War.war.badMsg(player, "command.tp.moved"); + } else if (hasPlayerTakenDamage()) { + War.war.badMsg(player, "command.tp.damaged"); + } else { + player.teleport(location, PlayerTeleportEvent.TeleportCause.COMMAND); + War.war.msg(player, "command.tp.success"); + } + } + + boolean hasPlayerMoved() { + final double MAX_MOVE_TOLERANCE = 1.5; + return distance3D(player.getLocation(), originalLocation) > MAX_MOVE_TOLERANCE; + } + + boolean hasPlayerTakenDamage() { + final double MAX_DAMAGE_TOLERANCE = 2; + return Math.abs(originalHealth - player.getHealth()) > MAX_DAMAGE_TOLERANCE; + } + + double distance3D(Location pos1, Location pos2) { + double distX = pos2.getX() - pos1.getX(); + double distY = pos2.getY() - pos1.getY(); + double distZ = pos2.getZ() - pos1.getZ(); + return Math.sqrt(Math.pow(distX, 2) + Math.pow(distY, 2) + Math.pow(distZ, 2)); + } +} diff --git a/war/src/main/resources/messages.properties b/war/src/main/resources/messages.properties index 1519c23..0b4f853 100644 --- a/war/src/main/resources/messages.properties +++ b/war/src/main/resources/messages.properties @@ -9,6 +9,10 @@ build.denied.zone.place = You cannot place blocks in this warzone. build.denied.zone.type = You cannot modify this type of block. command.console = You can't do this if you are not in game. command.disabled = You can only use War commands (e.g. /leave) while playing. +command.tp.init = Please wait for {0} seconds before teleportation. Movement or damage will cancel the timer. +command.tp.moved = Teleportation cancelled due to movement. +command.tp.damaged = Teleportation cancelled due to damage. +command.tp.success = You have been teleported. Thanks for your patience. drop.bomb.broadcast = {0} dropped the {1} bomb! drop.bomb.disabled = You can't drop items while stealing bomb. What are you doing?! Run for your enemy's spawn! drop.cake.broadcast = {0} dropped the {1} cake! diff --git a/war/src/test/java/com/tommytony/war/job/TeleportPlayerJobTest.java b/war/src/test/java/com/tommytony/war/job/TeleportPlayerJobTest.java new file mode 100644 index 0000000..2829e08 --- /dev/null +++ b/war/src/test/java/com/tommytony/war/job/TeleportPlayerJobTest.java @@ -0,0 +1,71 @@ +package com.tommytony.war.job; + +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + + +public class TeleportPlayerJobTest { + World world; + Player player; + TeleportPlayerJob job; + + @Before + public void setUp() throws Exception { + player = mock(Player.class); + world = mock(World.class); + when(world.getName()).thenReturn("world"); + when(player.getHealth()).thenReturn(20.0); + when(player.getLocation()).thenReturn(new Location(world, 0, 0, 0)); + job = new TeleportPlayerJob(player, new Location(world, 0, 0, 0)); + } + + @Test + public void testPlayerMove_noMovement_false() { + when(player.getLocation()).thenReturn(new Location(world, 0, 0, 0)); + + assertFalse(job.hasPlayerMoved()); + } + + @Test + public void testPlayerMove_smallMovement_false() { + when(player.getLocation()).thenReturn(new Location(world, 0.5, 0.5, 0.5)); + + assertFalse(job.hasPlayerMoved()); + } + + @Test + public void testPlayerMove_largeMovement_true() { + when(player.getLocation()).thenReturn(new Location(world, 5, 1, 3)); + + assertTrue(job.hasPlayerMoved()); + } + + @Test + public void testPlayerDamage_noDamage_false() { + when(player.getHealth()).thenReturn(20.0); + + assertFalse(job.hasPlayerTakenDamage()); + } + + @Test + public void testPlayerDamage_slightDamage_false() { + when(player.getHealth()).thenReturn(19.5); + + assertFalse(job.hasPlayerTakenDamage()); + } + + @Test + public void testPlayerDamage_largeDamage_true() { + when(player.getHealth()).thenReturn(14.0); + + assertTrue(job.hasPlayerTakenDamage()); + } +} From 43bbb24dd52ed67dbe8ec8cd366c2a7d0a48c73c Mon Sep 17 00:00:00 2001 From: cmastudios Date: Wed, 26 Feb 2014 17:07:44 -0600 Subject: [PATCH 05/36] Initial Vault support for economy I personally dislike forcing our users to use a separate plugin just to abstract different economy plugins, but sadly we live in a hell world where there are 20 competing economy plugins and counting so I don't want to deal with that. --- war/pom.xml | 9 +++++++++ war/src/main/java/com/tommytony/war/War.java | 19 +++++++++++++++++-- war/src/main/resources/plugin.yml | 2 +- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/war/pom.xml b/war/pom.xml index 20d20d9..81f9e1e 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -35,6 +35,10 @@ mcstats.releases http://repo.mcstats.org/content/repositories/releases/ + + vault-repo + http://nexus.theyeticave.net/content/repositories/pub_releases + Github issues @@ -140,5 +144,10 @@ R7 compile + + net.milkbowl.vault + Vault + 1.2.32 + diff --git a/war/src/main/java/com/tommytony/war/War.java b/war/src/main/java/com/tommytony/war/War.java index 7cc80b6..151ff0e 100644 --- a/war/src/main/java/com/tommytony/war/War.java +++ b/war/src/main/java/com/tommytony/war/War.java @@ -8,6 +8,8 @@ import java.util.logging.FileHandler; import java.util.logging.Formatter; import java.util.logging.Level; +import net.milkbowl.vault.economy.Economy; + import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; @@ -20,7 +22,10 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; import com.tommytony.war.command.WarCommandHandler; import com.tommytony.war.config.FlagReturn; @@ -57,8 +62,6 @@ import com.tommytony.war.utility.PlayerState; import com.tommytony.war.utility.SizeCounter; import com.tommytony.war.utility.WarLogFormatter; import com.tommytony.war.volume.Volume; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; /** * Main class of War @@ -99,6 +102,7 @@ public class War extends JavaPlugin { private final InventoryBag defaultInventories = new InventoryBag(); private KillstreakReward killstreakReward; private MySQLConfig mysqlConfig; + private Economy econ = null; private final WarConfigBag warConfig = new WarConfigBag(); private final WarzoneConfigBag warzoneDefaultConfig = new WarzoneConfigBag(); @@ -292,6 +296,13 @@ public class War extends JavaPlugin { this.getServer().getPluginManager().disablePlugin(this); } } + if (this.getServer().getPluginManager().isPluginEnabled("Vault")) { + RegisteredServiceProvider rsp = this.getServer().getServicesManager() + .getRegistration(Economy.class); + if (rsp != null) { + this.econ = rsp.getProvider(); + } + } War.reloadLanguage(); @@ -1341,4 +1352,8 @@ public class War extends JavaPlugin { return null; } } + + public Economy getEconomy() { + return econ; + } } diff --git a/war/src/main/resources/plugin.yml b/war/src/main/resources/plugin.yml index d516993..b6229d3 100644 --- a/war/src/main/resources/plugin.yml +++ b/war/src/main/resources/plugin.yml @@ -4,7 +4,7 @@ description: ${project.description} author: tommytony website: ${project.url} main: com.tommytony.war.War -softdepend: [Spout, TagAPI, WorldEdit] +softdepend: [Spout, TagAPI, WorldEdit, Vault] permissions: war.*: description: Full War permissions. Create and destroy warzones. Change War configuration. From f00ed85c4b3cd5c9d967266800b77367fd2c1b2c Mon Sep 17 00:00:00 2001 From: cmastudios Date: Wed, 26 Feb 2014 18:51:39 -0600 Subject: [PATCH 06/36] Add economy reward for winning team --- war/src/main/java/com/tommytony/war/War.java | 1 + .../main/java/com/tommytony/war/Warzone.java | 17 ++++++++++++ .../com/tommytony/war/config/TeamConfig.java | 3 ++- .../tommytony/war/config/TeamConfigBag.java | 27 ++++++++++++++++++- 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/war/src/main/java/com/tommytony/war/War.java b/war/src/main/java/com/tommytony/war/War.java index 151ff0e..c1dd1a7 100644 --- a/war/src/main/java/com/tommytony/war/War.java +++ b/war/src/main/java/com/tommytony/war/War.java @@ -233,6 +233,7 @@ public class War extends JavaPlugin { teamDefaultConfig.put(TeamConfig.BLOCKWHITELIST, "all"); teamDefaultConfig.put(TeamConfig.PLACEBLOCK, true); teamDefaultConfig.put(TeamConfig.APPLYPOTION, ""); + teamDefaultConfig.put(TeamConfig.ECOREWARD, 0.0); this.getDefaultInventories().clearLoadouts(); HashMap defaultLoadout = new HashMap(); diff --git a/war/src/main/java/com/tommytony/war/Warzone.java b/war/src/main/java/com/tommytony/war/Warzone.java index 5287c6b..13747a0 100644 --- a/war/src/main/java/com/tommytony/war/Warzone.java +++ b/war/src/main/java/com/tommytony/war/Warzone.java @@ -14,6 +14,8 @@ import java.util.List; import java.util.Map; import java.util.logging.Level; +import net.milkbowl.vault.economy.EconomyResponse; + import com.tommytony.war.mapper.VolumeMapper; import com.tommytony.war.mapper.ZoneVolumeMapper; import org.apache.commons.lang.StringUtils; @@ -1362,6 +1364,8 @@ public class Warzone { String winnersStrAndExtra = "Score cap reached. Game is over! Winning team(s): " + winnersStr; winnersStrAndExtra += ". Resetting warzone and your inventory..."; t.teamcast(winnersStrAndExtra); + double ecoReward = t.getTeamConfig().resolveDouble(TeamConfig.ECOREWARD); + boolean doEcoReward = ecoReward != 0 && War.war.getEconomy() != null; for (Iterator it = t.getPlayers().iterator(); it.hasNext();) { Player tp = it.next(); it.remove(); // Remove player from team first to prevent anti-tp @@ -1370,6 +1374,19 @@ public class Warzone { if (winnersStr.contains(t.getName())) { // give reward rewardPlayer(tp, t.getInventories().resolveReward()); + if (doEcoReward) { + EconomyResponse r; + if (ecoReward > 0) { + r = War.war.getEconomy().depositPlayer(tp.getName(), ecoReward); + } else { + r = War.war.getEconomy().withdrawPlayer(tp.getName(), ecoReward); + } + if (!r.transactionSuccess()) { + War.war.getLogger().log(Level.WARNING, + "Failed to reward player {0} ${1}. Error: {2}", + new Object[] {tp.getName(), ecoReward, r.errorMessage}); + } + } } } t.resetPoints(); diff --git a/war/src/main/java/com/tommytony/war/config/TeamConfig.java b/war/src/main/java/com/tommytony/war/config/TeamConfig.java index 807e2de..314acc1 100644 --- a/war/src/main/java/com/tommytony/war/config/TeamConfig.java +++ b/war/src/main/java/com/tommytony/war/config/TeamConfig.java @@ -18,7 +18,8 @@ public enum TeamConfig { KILLSTREAK (Boolean.class), BLOCKWHITELIST (String.class), PLACEBLOCK (Boolean.class), - APPLYPOTION(String.class); + APPLYPOTION(String.class), + ECOREWARD(Double.class); private final Class configType; diff --git a/war/src/main/java/com/tommytony/war/config/TeamConfigBag.java b/war/src/main/java/com/tommytony/war/config/TeamConfigBag.java index cadbed5..ddd7712 100644 --- a/war/src/main/java/com/tommytony/war/config/TeamConfigBag.java +++ b/war/src/main/java/com/tommytony/war/config/TeamConfigBag.java @@ -54,6 +54,25 @@ public class TeamConfigBag { } } + public Double getDouble(TeamConfig config) { + if (this.contains(config)) { + return (Double)this.bag.get(config); + } + return null; + } + + public Double resolveDouble(TeamConfig config) { + if (this.contains(config)) { + return (Double)this.bag.get(config); + } else if (this.warzone != null && this.warzone.getTeamDefaultConfig().contains(config)){ + // use Warzone default config + return this.warzone.getTeamDefaultConfig().resolveDouble(config); + } else { + // use War default config + return War.war.getTeamDefaultConfig().resolveDouble(config); + } + } + public Integer getInt(TeamConfig config) { if (this.contains(config)) { return (Integer)this.bag.get(config); @@ -157,6 +176,8 @@ public class TeamConfigBag { this.put(config, teamConfigSection.getBoolean(config.toString())); } else if (config.getConfigType().equals(String.class)) { this.put(config, teamConfigSection.getString(config.toString())); + } else if (config.getConfigType().equals(Double.class)) { + this.put(config, teamConfigSection.getDouble(config.toString())); } else if (config.getConfigType().equals(FlagReturn.class)) { String flagReturnStr = teamConfigSection.getString(config.toString()); FlagReturn returnMode = FlagReturn.getFromString(flagReturnStr); @@ -178,7 +199,8 @@ public class TeamConfigBag { for (TeamConfig config : TeamConfig.values()) { if (this.contains(config)) { if (config.getConfigType().equals(Integer.class) - || config.getConfigType().equals(Boolean.class)) { + || config.getConfigType().equals(Boolean.class) + || config.getConfigType().equals(Double.class)) { teamConfigSection.set(config.toString(), this.bag.get(config)); } else { teamConfigSection.set(config.toString(), this.bag.get(config).toString()); @@ -195,6 +217,9 @@ public class TeamConfigBag { if (teamConfig.getConfigType().equals(Integer.class)) { int intValue = Integer.parseInt(namedParams.get(namedParam)); this.bag.put(teamConfig, intValue); + } else if (teamConfig.getConfigType().equals(Double.class)) { + double doubleValue = Double.parseDouble(namedParams.get(namedParam)); + this.bag.put(teamConfig, doubleValue); } else if (teamConfig.getConfigType().equals(Boolean.class)) { String onOff = namedParams.get(namedParam); this.bag.put(teamConfig, onOff.equals("on") || onOff.equals("true")); From 8bf6d6047daa54f1c754db3c16a5d213872f9f75 Mon Sep 17 00:00:00 2001 From: cmastudios Date: Wed, 26 Feb 2014 19:02:32 -0600 Subject: [PATCH 07/36] Literally none of those new features worked I better test before commit next time :) --- war/src/main/java/com/tommytony/war/War.java | 4 ++-- war/src/main/java/com/tommytony/war/Warzone.java | 9 +++++++-- .../java/com/tommytony/war/event/WarPlayerListener.java | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/war/src/main/java/com/tommytony/war/War.java b/war/src/main/java/com/tommytony/war/War.java index 7cc80b6..a0d8bc0 100644 --- a/war/src/main/java/com/tommytony/war/War.java +++ b/war/src/main/java/com/tommytony/war/War.java @@ -1326,11 +1326,11 @@ public class War extends JavaPlugin { /** * Convert serialized effect to actual effect. * @param serializedEffect String stored in configuration. - * Format: TYPE:DURATION:AMPLIFY + * Format: TYPE;DURATION;AMPLIFY * @return Potion effect or null otherwise */ public PotionEffect getPotionEffect(String serializedEffect) { - String[] arr = serializedEffect.split(":"); + String[] arr = serializedEffect.split(";"); if (arr.length != 3) return null; try { PotionEffectType type = PotionEffectType.getByName(arr[0]); diff --git a/war/src/main/java/com/tommytony/war/Warzone.java b/war/src/main/java/com/tommytony/war/Warzone.java index 5287c6b..9b18813 100644 --- a/war/src/main/java/com/tommytony/war/Warzone.java +++ b/war/src/main/java/com/tommytony/war/Warzone.java @@ -453,10 +453,15 @@ public class Warzone { // clear potion effects PotionEffectHelper.clearPotionEffects(player); - if (!team.getTeamConfig().getString(TeamConfig.APPLYPOTION).isEmpty()) { - PotionEffect effect = War.war.getPotionEffect(team.getTeamConfig().getString(TeamConfig.APPLYPOTION)); + String potionEffect = team.getTeamConfig().resolveString(TeamConfig.APPLYPOTION); + if (!potionEffect.isEmpty()) { + PotionEffect effect = War.war.getPotionEffect(potionEffect); if (effect != null) { player.addPotionEffect(effect); + } else { + War.war.getLogger().log(Level.WARNING, + "Failed to apply potion effect {0} in warzone {1}.", + new Object[] {potionEffect, name}); } } diff --git a/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java b/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java index 295eca5..902420c 100644 --- a/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java +++ b/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java @@ -77,7 +77,7 @@ public class WarPlayerListener implements Listener { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerJoin(final PlayerJoinEvent event) { String autojoinName = War.war.getWarConfig().getString(WarConfig.AUTOJOIN); - boolean autojoinEnabled = autojoinName.isEmpty(); + boolean autojoinEnabled = !autojoinName.isEmpty(); if (autojoinEnabled) { // Won't be able to find warzone if unset Warzone autojoinWarzone = Warzone.getZoneByNameExact(autojoinName); if (autojoinWarzone == null) { From 09e091904211a9aafa8defe85b82da281942732f Mon Sep 17 00:00:00 2001 From: cmastudios Date: Wed, 26 Feb 2014 19:07:00 -0600 Subject: [PATCH 08/36] Exemption by-permission for command warm-up Permission node: war.warmupexempt --- war/src/main/java/com/tommytony/war/command/WarhubCommand.java | 2 +- .../main/java/com/tommytony/war/command/WarzoneCommand.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/war/src/main/java/com/tommytony/war/command/WarhubCommand.java b/war/src/main/java/com/tommytony/war/command/WarhubCommand.java index c31a730..0f2252f 100644 --- a/war/src/main/java/com/tommytony/war/command/WarhubCommand.java +++ b/war/src/main/java/com/tommytony/war/command/WarhubCommand.java @@ -39,7 +39,7 @@ public class WarhubCommand extends AbstractWarCommand { playerWarzone.handlePlayerLeave(player, War.war.getWarHub().getLocation(), true); } int warmup = War.war.getWarConfig().getInt(WarConfig.TPWARMUP); - if (warmup > 0) { + if (warmup > 0 && !player.hasPermission("war.warmupexempt")) { final int TICKS_PER_SECOND = 20; TeleportPlayerJob job = new TeleportPlayerJob(player, War.war.getWarHub().getLocation()); job.runTaskLater(War.war, warmup); diff --git a/war/src/main/java/com/tommytony/war/command/WarzoneCommand.java b/war/src/main/java/com/tommytony/war/command/WarzoneCommand.java index 2cc5196..86f9d32 100644 --- a/war/src/main/java/com/tommytony/war/command/WarzoneCommand.java +++ b/war/src/main/java/com/tommytony/war/command/WarzoneCommand.java @@ -35,7 +35,8 @@ public class WarzoneCommand extends AbstractWarCommand { int warmup = War.war.getWarConfig().getInt(WarConfig.TPWARMUP); if (playerWarzone != null) { playerWarzone.handlePlayerLeave(player, warzone.getTeleport(), true); - } else if (warmup > 0) { + } + if (warmup > 0 && !player.hasPermission("war.warmupexempt")) { final int TICKS_PER_SECOND = 20; TeleportPlayerJob job = new TeleportPlayerJob(player, warzone.getTeleport()); job.runTaskLater(War.war, warmup); From a529e0c1fe234e978a9dcca2ab0a961d0eb6f406 Mon Sep 17 00:00:00 2001 From: cmastudios Date: Thu, 10 Apr 2014 18:40:58 -0500 Subject: [PATCH 09/36] Reset player fall damage when respawned Potentially fixes #757. --- war/src/main/java/com/tommytony/war/Warzone.java | 1 + 1 file changed, 1 insertion(+) diff --git a/war/src/main/java/com/tommytony/war/Warzone.java b/war/src/main/java/com/tommytony/war/Warzone.java index 16d034a..4a91522 100644 --- a/war/src/main/java/com/tommytony/war/Warzone.java +++ b/war/src/main/java/com/tommytony/war/Warzone.java @@ -435,6 +435,7 @@ public class Warzone { player.setSaturation(team.getTeamConfig().resolveInt(TeamConfig.SATURATION)); player.setExhaustion(0); player.setFireTicks(0); //this works fine here, why put it in LoudoutResetJob...? I'll keep it over there though + player.setFallDistance(0); this.preventItemHackingThroughOpenedInventory(player); From 7ed33e8965992724bd3098895088d1b9410e9445 Mon Sep 17 00:00:00 2001 From: cmastudios Date: Thu, 10 Apr 2014 18:58:21 -0500 Subject: [PATCH 10/36] Don't send blank messages to the client Closes #742 --- war/src/main/java/com/tommytony/war/War.java | 53 +++++++------------- 1 file changed, 18 insertions(+), 35 deletions(-) diff --git a/war/src/main/java/com/tommytony/war/War.java b/war/src/main/java/com/tommytony/war/War.java index b1cac8d..1259d52 100644 --- a/war/src/main/java/com/tommytony/war/War.java +++ b/war/src/main/java/com/tommytony/war/War.java @@ -948,79 +948,62 @@ public class War extends JavaPlugin { return activeZones; } + static final boolean HIDE_BLANK_MESSAGES = true; + public void msg(CommandSender sender, String str) { + if (messages.containsKey(str)) str = this.getString(str); + if (HIDE_BLANK_MESSAGES && (str == null || str.isEmpty())) return; if (sender instanceof Player) { StringBuilder output = new StringBuilder(ChatColor.GRAY.toString()) .append(this.getString("war.prefix")).append(ChatColor.WHITE).append(' '); - if (messages.containsKey(str)) { - output.append(this.colorKnownTokens(this.getString(str), - ChatColor.WHITE)); - } else { - output.append(this.colorKnownTokens(str, ChatColor.WHITE)); - } + output.append(this.colorKnownTokens(str, ChatColor.WHITE)); sender.sendMessage(output.toString()); } else { - sender.sendMessage(messages.containsKey(str) ? messages.getString(str) : str); + sender.sendMessage(str); } } public void badMsg(CommandSender sender, String str) { + if (messages.containsKey(str)) str = this.getString(str); + if (HIDE_BLANK_MESSAGES && (str == null || str.isEmpty())) return; if (sender instanceof Player) { StringBuilder output = new StringBuilder(ChatColor.GRAY.toString()) .append(this.getString("war.prefix")).append(ChatColor.RED).append(' '); - if (messages.containsKey(str)) { - output.append(this.colorKnownTokens(this.getString(str), ChatColor.RED)); - } else { - output.append(this.colorKnownTokens(str, ChatColor.RED)); - } + output.append(this.colorKnownTokens(str, ChatColor.RED)); sender.sendMessage(output.toString()); } else { - sender.sendMessage(messages.containsKey(str) ? messages.getString(str) : str); + sender.sendMessage(str); } } public void msg(CommandSender sender, String str, Object... obj) { + if (messages.containsKey(str)) str = this.getString(str); + if (HIDE_BLANK_MESSAGES && (str == null || str.isEmpty())) return; if (sender instanceof Player) { StringBuilder output = new StringBuilder(ChatColor.GRAY.toString()) .append(this.getString("war.prefix")).append(ChatColor.WHITE).append(' '); - if (messages.containsKey(str)) { - output.append(MessageFormat.format(this.colorKnownTokens( - this.getString(str), ChatColor.WHITE), obj)); - } else { - output.append(MessageFormat.format( + output.append(MessageFormat.format( this.colorKnownTokens(str, ChatColor.WHITE), obj)); - } sender.sendMessage(output.toString()); } else { StringBuilder output = new StringBuilder(); - if (messages.containsKey(str)) { - output.append(MessageFormat.format(this.getString(str), obj)); - } else { - output.append(MessageFormat.format(str, obj)); - } + output.append(MessageFormat.format(str, obj)); sender.sendMessage(output.toString()); } } public void badMsg(CommandSender sender, String str, Object... obj) { + if (messages.containsKey(str)) str = this.getString(str); + if (HIDE_BLANK_MESSAGES && (str == null || str.isEmpty())) return; if (sender instanceof Player) { StringBuilder output = new StringBuilder(ChatColor.GRAY.toString()) .append(this.getString("war.prefix")).append(ChatColor.RED).append(' '); - if (messages.containsKey(str)) { - output.append(MessageFormat.format(this.colorKnownTokens( - this.getString(str), ChatColor.RED), obj)); - } else { - output.append(MessageFormat.format( + output.append(MessageFormat.format( this.colorKnownTokens(str, ChatColor.RED), obj)); - } sender.sendMessage(output.toString()); } else { StringBuilder output = new StringBuilder(); - if (messages.containsKey(str)) { - output.append(MessageFormat.format(this.getString(str), obj)); - } else { - output.append(MessageFormat.format(str, obj)); - } + output.append(MessageFormat.format(str, obj)); sender.sendMessage(output.toString()); } } From 181fb64c503e227f33a3ddaef5bfb1ce247d46e7 Mon Sep 17 00:00:00 2001 From: cmastudios Date: Sun, 20 Apr 2014 14:56:45 -0500 Subject: [PATCH 11/36] break Statement referenced the wrong loop At least I think. Any comments @taoneill ? Closes #773 --- .../main/java/com/tommytony/war/event/WarPlayerListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java b/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java index 902420c..fd43ddd 100644 --- a/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java +++ b/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java @@ -883,7 +883,7 @@ public class WarPlayerListener implements Listener { if (team.getPlayers().contains(event.getPlayer())) { event.setRespawnLocation(team.getRandomSpawn()); zone.respawnPlayer(team, event.getPlayer()); - break; + return; } } From 14054454af6de66436104cc7624aa21366e76d69 Mon Sep 17 00:00:00 2001 From: cmastudios Date: Wed, 23 Apr 2014 21:45:23 -0500 Subject: [PATCH 12/36] Prevent emptying buckets on important blocks Closes #775 --- war/.classpath | 32 +++---------------- .../war/event/WarPlayerListener.java | 13 ++++++++ 2 files changed, 18 insertions(+), 27 deletions(-) diff --git a/war/.classpath b/war/.classpath index 5c0a51d..20357a8 100644 --- a/war/.classpath +++ b/war/.classpath @@ -1,33 +1,11 @@ - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - diff --git a/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java b/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java index fd43ddd..e22181c 100644 --- a/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java +++ b/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java @@ -961,4 +961,17 @@ public class WarPlayerListener implements Listener { public void purgeLatestPositions() { this.latestLocations.clear(); } + + @EventHandler + public void onBucketEmpty(PlayerBucketEmptyEvent event) { + Player player = (Player) event.getPlayer(); + Warzone zone = Warzone.getZoneByPlayerName(player.getName()); + if (zone == null) { + return; + } + if (zone.isImportantBlock(event.getBlockClicked())) { + event.setCancelled(true); + player.playSound(player.getLocation(), Sound.FIZZ, 10, 10); + } + } } From 9bd9f76b9ea166aea2ec20c45850fbd0e64df22d Mon Sep 17 00:00:00 2001 From: cmastudios Date: Wed, 23 Apr 2014 21:59:42 -0500 Subject: [PATCH 13/36] Some skulls don't have owners Bukkit 1.7.9 functionality change now throws an exception rather than returning null. Closes #768 --- .../main/java/com/tommytony/war/mapper/ZoneVolumeMapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/war/src/main/java/com/tommytony/war/mapper/ZoneVolumeMapper.java b/war/src/main/java/com/tommytony/war/mapper/ZoneVolumeMapper.java index e8389a7..78e71d8 100644 --- a/war/src/main/java/com/tommytony/war/mapper/ZoneVolumeMapper.java +++ b/war/src/main/java/com/tommytony/war/mapper/ZoneVolumeMapper.java @@ -370,7 +370,7 @@ public class ZoneVolumeMapper { dataStmt.setString(6, ((Jukebox) block.getState()).getPlaying().toString()); } else if (state instanceof Skull) { dataStmt.setString(6, String.format("%s\n%s\n%s", - ((Skull) block.getState()).getOwner(), + ((Skull) block.getState()).hasOwner() ? ((Skull) block.getState()).getOwner() : "", ((Skull) block.getState()).getSkullType().toString(), ((Skull) block.getState()).getRotation().toString())); } else if (state instanceof CommandBlock) { From aeda124c1c399b121ca13e723726f19051bd0b7c Mon Sep 17 00:00:00 2001 From: cmastudios Date: Wed, 23 Apr 2014 22:08:49 -0500 Subject: [PATCH 14/36] Max health can be changed somehow Give the player the maximum amount of health on respawn. Closes #766 --- war/src/main/java/com/tommytony/war/Warzone.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/war/src/main/java/com/tommytony/war/Warzone.java b/war/src/main/java/com/tommytony/war/Warzone.java index 4a91522..db82afe 100644 --- a/war/src/main/java/com/tommytony/war/Warzone.java +++ b/war/src/main/java/com/tommytony/war/Warzone.java @@ -429,8 +429,8 @@ public class Warzone { private void handleRespawn(final Team team, final Player player) { // Fill hp - player.setRemainingAir(300); - player.setHealth(20); + player.setRemainingAir(player.getMaximumAir()); + player.setHealth(player.getMaxHealth()); player.setFoodLevel(20); player.setSaturation(team.getTeamConfig().resolveInt(TeamConfig.SATURATION)); player.setExhaustion(0); From 463d51d41b30439683b13a38af6e7291b2296ede Mon Sep 17 00:00:00 2001 From: cmastudios Date: Mon, 28 Apr 2014 19:03:05 -0500 Subject: [PATCH 15/36] Print error if the world was deleted Warzones created in worlds that are then deleted can cause a stack trace to dump in the error log. This replaces the stack trace with an informative error message. Closes #774 --- war/src/main/java/com/tommytony/war/mapper/ZoneVolumeMapper.java | 1 + 1 file changed, 1 insertion(+) diff --git a/war/src/main/java/com/tommytony/war/mapper/ZoneVolumeMapper.java b/war/src/main/java/com/tommytony/war/mapper/ZoneVolumeMapper.java index 78e71d8..50b79d7 100644 --- a/war/src/main/java/com/tommytony/war/mapper/ZoneVolumeMapper.java +++ b/war/src/main/java/com/tommytony/war/mapper/ZoneVolumeMapper.java @@ -262,6 +262,7 @@ public class ZoneVolumeMapper { public static void loadStructure(Volume volume, Connection databaseConnection) throws SQLException { String prefix = String.format("structure_%d", volume.getName().hashCode() & Integer.MAX_VALUE); World world = volume.getWorld(); + Validate.notNull(world, String.format("Cannot find the warzone for %s", prefix)); Statement stmt = databaseConnection.createStatement(); ResultSet cornerQuery = stmt.executeQuery("SELECT * FROM " + prefix + "_corners"); cornerQuery.next(); From 92002a06a213dbb446b1b00cb6a4ca7b52ef38b0 Mon Sep 17 00:00:00 2001 From: cmastudios Date: Mon, 19 May 2014 19:31:21 -0500 Subject: [PATCH 16/36] Rewrote Warzone#handleDeath NEEDS TESTING --- war/.classpath | 32 ++- war/src/main/java/com/tommytony/war/Team.java | 22 ++ .../main/java/com/tommytony/war/Warzone.java | 266 +++++------------- 3 files changed, 126 insertions(+), 194 deletions(-) diff --git a/war/.classpath b/war/.classpath index 20357a8..ae48900 100644 --- a/war/.classpath +++ b/war/.classpath @@ -1,10 +1,32 @@ - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/war/src/main/java/com/tommytony/war/Team.java b/war/src/main/java/com/tommytony/war/Team.java index 194af9b..e8892da 100644 --- a/war/src/main/java/com/tommytony/war/Team.java +++ b/war/src/main/java/com/tommytony/war/Team.java @@ -34,6 +34,7 @@ import com.tommytony.war.config.TeamConfig; import com.tommytony.war.config.TeamConfigBag; import com.tommytony.war.config.TeamKind; import com.tommytony.war.config.TeamSpawnStyle; +import com.tommytony.war.spout.SpoutDisplayer; import com.tommytony.war.utility.Direction; import com.tommytony.war.volume.Volume; @@ -442,6 +443,27 @@ public class Team { } } + /** + * Send an achievement to all players on the team. + * Currently implemented using SpoutCraft. + * @param line1 Achievement first line + * @param line2 Achievement second line + * @param icon Item to display in the achievement + * @param ticks Duration the achievement should be displayed + */ + public void sendAchievement(String line1, String line2, ItemStack icon, int ticks) { + if (!War.war.isSpoutServer()) + return; + line1 = SpoutDisplayer.cleanForNotification(line1); + line2 = SpoutDisplayer.cleanForNotification(line2); + for (Player player : this.players) { + SpoutPlayer spoutPlayer = SpoutManager.getPlayer(player); + if (!spoutPlayer.isSpoutCraftEnabled()) + continue; + spoutPlayer.sendNotification(line1, line2, icon, ticks); + } + } + public void setName(String name) { this.name = name; } diff --git a/war/src/main/java/com/tommytony/war/Warzone.java b/war/src/main/java/com/tommytony/war/Warzone.java index db82afe..d37d370 100644 --- a/war/src/main/java/com/tommytony/war/Warzone.java +++ b/war/src/main/java/com/tommytony/war/Warzone.java @@ -968,196 +968,84 @@ public class Warzone { return true; } - public void handleDeath(Player player) { - // THIS ISN'T THREAD SAFE - // Every death and player movement should ideally occur in sequence because - // 1) a death can cause the end of the game by emptying a lifepool causing the max score to be reached - // 2) a player movement from one block to the next (getting a flag home or causing a bomb to go off perhaps) could win the game - // - // Concurrent execution of these events could cause the inventory reset of the last players to die to fail as - // they get tp'ed back to the lobby, or perhaps kills to bleed into the next round. - - Team playerTeam = Team.getTeamByPlayerName(player.getName()); - - // Make sure the player that died is still part of a team, game may have ended while waiting. - // Ignore dying players that essentially just got tp'ed to lobby and got their state restored. - // Gotta take care of restoring ReallyDeadFighters' game-end state when in onRespawn as well. - if (playerTeam != null) { - // teleport to team spawn upon fast respawn death, but not for real deaths - if (!this.getWarzoneConfig().getBoolean(WarzoneConfig.REALDEATHS)) { - this.respawnPlayer(playerTeam, player); - } else { - // onPlayerRespawn takes care of real deaths - //player.setHealth(0); - this.getReallyDeadFighters().add(player.getName()); - } - - int remaining = playerTeam.getRemainingLifes(); - if (remaining == 0) { // your death caused your team to lose - if (this.isReinitializing()) { - // Prevent duplicate battle end. You died just after the battle ending death. - this.respawnPlayer(playerTeam, player); - } else { - // Handle team loss - List teams = this.getTeams(); - String scores = ""; - for (Team t : teams) { - if (War.war.isSpoutServer()) { - for (Player p : t.getPlayers()) { - SpoutPlayer sp = SpoutManager.getPlayer(p); - if (sp.isSpoutCraftEnabled()) { - sp.sendNotification( - SpoutDisplayer.cleanForNotification("Round over! " + playerTeam.getKind().getColor() + playerTeam.getName()), - SpoutDisplayer.cleanForNotification("ran out of lives."), - playerTeam.getKind().getBlockHead(), - 10000); - } - } - } - - t.teamcast("zone.battle.end", playerTeam.getName(), player.getName()); - - if (t.getPlayers().size() != 0 && !t.getTeamConfig().resolveBoolean(TeamConfig.FLAGPOINTSONLY)) { - if (!t.getName().equals(playerTeam.getName())) { - // all other teams get a point - t.addPoint(); - t.resetSign(); - } - scores += '\n' + t.getName() + "(" + t.getPoints() + "/" + t.getTeamConfig().resolveInt(TeamConfig.MAXSCORE) + ") "; - - } - } - - // whoever didn't lose, reward them - // - List winningTeams = new ArrayList(teams.size()); - for( Team t : teams ) { - if( !t.getPlayers().contains(player)) { - winningTeams.add(t); - } - } - WarBattleWinEvent event1 = new WarBattleWinEvent(this, winningTeams); - War.war.getServer().getPluginManager().callEvent(event1); - - if (!scores.equals("")) { - this.broadcast("zone.battle.newscores", scores); - } - if (War.war.getMysqlConfig().isEnabled() && War.war.getMysqlConfig().isLoggingEnabled()) { - LogKillsDeathsJob logKillsDeathsJob = new LogKillsDeathsJob(ImmutableList.copyOf(this.getKillsDeathsTracker())); - War.war.getServer().getScheduler().runTaskAsynchronously(War.war, logKillsDeathsJob); - } - this.getKillsDeathsTracker().clear(); - // detect score cap - List scoreCapTeams = new ArrayList(); - for (Team t : teams) { - if (t.getPoints() == t.getTeamConfig().resolveInt(TeamConfig.MAXSCORE)) { - scoreCapTeams.add(t); - } - } - if (!scoreCapTeams.isEmpty()) { - String winnersStr = ""; - for (Team winner : scoreCapTeams) { - if (winner.getPlayers().size() != 0) { - winnersStr += winner.getName() + " "; - } - } - this.handleScoreCapReached(winnersStr); - } else { - // A new battle starts. Reset the zone but not the teams. - this.broadcast("zone.battle.reset"); - if (this.getWarzoneConfig().getBoolean(WarzoneConfig.RESETBLOCKS)) { - this.reinitialize(); - } else { - this.initializeZone(); - } - } - } - } else { - // player died without causing his team's demise - if (this.isFlagThief(player.getName())) { - // died while carrying flag.. dropped it - Team victim = this.getVictimTeamForFlagThief(player.getName()); - victim.getFlagVolume().resetBlocks(); - victim.initializeTeamFlag(); - this.removeFlagThief(player.getName()); - - if (War.war.isSpoutServer()) { - for (Player p : victim.getPlayers()) { - SpoutPlayer sp = SpoutManager.getPlayer(p); - if (sp.isSpoutCraftEnabled()) { - sp.sendNotification( - SpoutDisplayer.cleanForNotification(playerTeam.getKind().getColor() + player.getName() + ChatColor.YELLOW + " dropped"), - SpoutDisplayer.cleanForNotification(ChatColor.YELLOW + "your flag."), - playerTeam.getKind().getBlockHead(), - 5000); - } - } - } - - this.broadcast("drop.flag.broadcast", player.getName(), victim.getName()); - } - - // Bomb thieves - if (this.isBombThief(player.getName())) { - // died while carrying bomb.. dropped it - Bomb bomb = this.getBombForThief(player.getName()); - bomb.getVolume().resetBlocks(); - bomb.addBombBlocks(); - this.removeBombThief(player.getName()); - - for (Team t : this.getTeams()) { - t.teamcast("drop.bomb.broadcast", player.getName(), ChatColor.GREEN + bomb.getName() + ChatColor.WHITE); - if (War.war.isSpoutServer()) { - for (Player p : t.getPlayers()) { - SpoutPlayer sp = SpoutManager.getPlayer(p); - if (sp.isSpoutCraftEnabled()) { - sp.sendNotification( - SpoutDisplayer.cleanForNotification(playerTeam.getKind().getColor() + player.getName() + ChatColor.YELLOW + " dropped"), - SpoutDisplayer.cleanForNotification(ChatColor.YELLOW + "bomb " + ChatColor.GREEN + bomb.getName() + ChatColor.YELLOW + "."), - Material.TNT, - (short)0, - 5000); - } - } - } - } - } - - if (this.isCakeThief(player.getName())) { - // died while carrying cake.. dropped it - Cake cake = this.getCakeForThief(player.getName()); - cake.getVolume().resetBlocks(); - cake.addCakeBlocks(); - this.removeCakeThief(player.getName()); - - for (Team t : this.getTeams()) { - t.teamcast("drop.cake.broadcast", player.getName(), ChatColor.GREEN + cake.getName() + ChatColor.WHITE); - if (War.war.isSpoutServer()) { - for (Player p : t.getPlayers()) { - SpoutPlayer sp = SpoutManager.getPlayer(p); - if (sp.isSpoutCraftEnabled()) { - sp.sendNotification( - SpoutDisplayer.cleanForNotification(playerTeam.getKind().getColor() + player.getName() + ChatColor.YELLOW + " dropped"), - SpoutDisplayer.cleanForNotification(ChatColor.YELLOW + "cake " + ChatColor.GREEN + cake.getName() + ChatColor.YELLOW + "."), - Material.CAKE, - (short)0, - 5000); - } - } - } - } - } - - // Decrement lifepool - playerTeam.setRemainingLives(remaining - 1); - - // Lifepool empty warning - if (remaining - 1 == 0) { - this.broadcast("zone.lifepool.empty", playerTeam.getName()); - } - } - playerTeam.resetSign(); + /** + * Cleanup after a player who has died. This decrements the team's + * remaining lifepool, drops stolen flags, and respawns the player. + * It also handles team lose and score cap conditions. + * This method is synchronized to prevent concurrent battle resets. + * @param player Player who died + */ + public synchronized void handleDeath(Player player) { + Team playerTeam = this.getPlayerTeam(player.getName()); + Validate.notNull(playerTeam, "Can't find team for dead player " + player.getName()); + if (this.getWarzoneConfig().getBoolean(WarzoneConfig.REALDEATHS)) { + this.getReallyDeadFighters().add(player.getName()); + player.setHealth(0D); + } else { + this.respawnPlayer(playerTeam, player); } + if (playerTeam.getRemainingLifes() <= 0) { + handleTeamLoss(playerTeam, player); + } else { + this.dropAllStolenObjects(player, false); + playerTeam.setRemainingLives(playerTeam.getRemainingLifes() - 1); + // Lifepool empty warning + if (playerTeam.getRemainingLifes() - 1 == 0) { + this.broadcast("zone.lifepool.empty", playerTeam.getName()); + } + } + playerTeam.resetSign(); + } + + private void handleTeamLoss(Team losingTeam, Player player) { + StringBuilder teamScores = new StringBuilder(); + List winningTeams = new ArrayList(teams.size()); + for (Team team : this.teams) { + if (team.getPlayers().isEmpty()) + continue; + if (team != losingTeam) { + team.addPoint(); + team.resetSign(); + winningTeams.add(team); + } + teamScores.append(String.format("\n%s (%d/%d) ", team.getName(), team.getPoints(), team.getTeamConfig().resolveInt(TeamConfig.MAXSCORE))); + team.sendAchievement("Round over! " + losingTeam.getKind().getFormattedName(), "ran out of lives.", losingTeam.getKind().getBlockHead(), 10000); + } + this.broadcast("zone.battle.end", losingTeam.getName(), player.getName()); + WarBattleWinEvent event1 = new WarBattleWinEvent(this, winningTeams); + War.war.getServer().getPluginManager().callEvent(event1); + if (!teamScores.toString().isEmpty()) { + this.broadcast("zone.battle.newscores", teamScores.toString()); + } + if (War.war.getMysqlConfig().isEnabled() && War.war.getMysqlConfig().isLoggingEnabled()) { + LogKillsDeathsJob logKillsDeathsJob = new LogKillsDeathsJob(ImmutableList.copyOf(this.getKillsDeathsTracker())); + War.war.getServer().getScheduler().runTaskAsynchronously(War.war, logKillsDeathsJob); + } + this.getKillsDeathsTracker().clear(); + if (!detectScoreCap()) { + this.broadcast("zone.battle.reset"); + if (this.getWarzoneConfig().getBoolean(WarzoneConfig.RESETBLOCKS)) { + this.reinitialize(); + } else { + this.initializeZone(); + } + } + } + + /** + * Check if a team has achieved max score "score cap". + * @return true if team has achieved max score, false otherwise. + */ + public boolean detectScoreCap() { + StringBuilder winnersStr = new StringBuilder(); + for (Team team : this.teams) { + if (team.getPoints() >= team.getTeamConfig().resolveInt(TeamConfig.MAXSCORE)) { + winnersStr.append(team.getName()).append(' '); + } + } + if (!winnersStr.toString().isEmpty()) + this.handleScoreCapReached(winnersStr.toString()); + return !winnersStr.toString().isEmpty(); } public void reinitialize() { From d4976ecbb4255f122866ab13b598077ebada040b Mon Sep 17 00:00:00 2001 From: cmastudios Date: Sat, 7 Jun 2014 12:23:57 -0500 Subject: [PATCH 17/36] #790 Add top kills scoreboard This new scoreboard displays each person's total amount of kills for the battle in the warzone. --- .../tommytony/war/config/ScoreboardType.java | 3 ++- .../war/event/WarEntityListener.java | 20 ++++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/war/src/main/java/com/tommytony/war/config/ScoreboardType.java b/war/src/main/java/com/tommytony/war/config/ScoreboardType.java index 4c233e5..40de160 100644 --- a/war/src/main/java/com/tommytony/war/config/ScoreboardType.java +++ b/war/src/main/java/com/tommytony/war/config/ScoreboardType.java @@ -4,7 +4,8 @@ public enum ScoreboardType { NONE(null), POINTS("Points"), - LIFEPOOL("Lifepool"); + LIFEPOOL("Lifepool"), + TOPKILLS("Top kills"); private final String displayName; private ScoreboardType(String displayName) { diff --git a/war/src/main/java/com/tommytony/war/event/WarEntityListener.java b/war/src/main/java/com/tommytony/war/event/WarEntityListener.java index 09f82f3..b75ebc1 100644 --- a/war/src/main/java/com/tommytony/war/event/WarEntityListener.java +++ b/war/src/main/java/com/tommytony/war/event/WarEntityListener.java @@ -3,7 +3,6 @@ package com.tommytony.war.event; import java.util.ArrayList; import java.util.List; import java.util.Random; -import java.util.logging.Level; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -12,6 +11,8 @@ import org.bukkit.block.Block; import org.bukkit.block.BlockState; import org.bukkit.entity.Arrow; import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; import org.bukkit.entity.TNTPrimed; @@ -29,12 +30,18 @@ import org.bukkit.event.entity.EntityRegainHealthEvent; import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason; import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.event.entity.FoodLevelChangeEvent; +import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.scoreboard.Objective; +import org.bukkit.util.Vector; import org.getspout.spoutapi.SpoutManager; import org.getspout.spoutapi.player.SpoutPlayer; import com.tommytony.war.Team; import com.tommytony.war.War; import com.tommytony.war.Warzone; +import com.tommytony.war.config.ScoreboardType; import com.tommytony.war.config.TeamConfig; import com.tommytony.war.config.WarConfig; import com.tommytony.war.config.WarzoneConfig; @@ -42,12 +49,6 @@ import com.tommytony.war.job.DeferredBlockResetsJob; import com.tommytony.war.spout.SpoutDisplayer; import com.tommytony.war.structure.Bomb; import com.tommytony.war.utility.LoadoutSelection; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.ProjectileHitEvent; -import org.bukkit.event.entity.ProjectileLaunchEvent; -import org.bukkit.metadata.FixedMetadataValue; -import org.bukkit.util.Vector; /** * Handles Entity-Events @@ -167,6 +168,11 @@ public class WarEntityListener implements Listener { if (attackerTeam.getTeamConfig().resolveBoolean(TeamConfig.KILLSTREAK)) { War.war.getKillstreakReward().rewardPlayer(a, defenderWarzone.getKillCount(a.getName())); } + if (defenderWarzone.getScoreboard() != null && + defenderWarzone.getScoreboardType() == ScoreboardType.TOPKILLS) { + Objective obj = attackerWarzone.getScoreboard().getObjective("Top kills"); + obj.getScore(a).setScore(defenderWarzone.getKillCount(a.getName())); + } } WarPlayerDeathEvent event1 = new WarPlayerDeathEvent(defenderWarzone, d, a, event.getCause()); War.war.getServer().getPluginManager().callEvent(event1); From 382261eb83a513783bce336ddb0cbfc6a349972e Mon Sep 17 00:00:00 2001 From: cmastudios Date: Sat, 7 Jun 2014 12:38:51 -0500 Subject: [PATCH 18/36] Killstreak effects Closes #776 Customizable effects on killstreak --- .../java/com/tommytony/war/config/KillstreakReward.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/war/src/main/java/com/tommytony/war/config/KillstreakReward.java b/war/src/main/java/com/tommytony/war/config/KillstreakReward.java index 526c295..de5918c 100644 --- a/war/src/main/java/com/tommytony/war/config/KillstreakReward.java +++ b/war/src/main/java/com/tommytony/war/config/KillstreakReward.java @@ -4,12 +4,15 @@ import com.google.common.collect.ImmutableList; import com.tommytony.war.Team; import com.tommytony.war.War; import com.tommytony.war.Warzone; + import java.text.MessageFormat; import java.util.HashSet; import java.util.Map; import java.util.Set; + import org.apache.commons.lang.Validate; import org.bukkit.ChatColor; +import org.bukkit.Effect; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.MemoryConfiguration; @@ -41,6 +44,7 @@ public class KillstreakReward { section.set("5.reward.points", 1); section.set("5.reward.airstrike", true); section.set("5.reward.items", ImmutableList.of(new ItemStack(Material.ARROW, 15), new ItemStack(Material.EGG))); + section.set("5.reward.effect", Effect.GHAST_SHRIEK.name()); ItemStack sword = new ItemStack(Material.WOOD_SWORD); sword.addEnchantment(Enchantment.DAMAGE_ALL, 2); sword.addEnchantment(Enchantment.KNOCKBACK, 1); @@ -131,6 +135,10 @@ public class KillstreakReward { if (killSection.getBoolean("reward.airstrike")) { this.airstrikePlayers.add(player.getName()); } + if (killSection.contains("reward.effect")) { + Effect effect = Effect.valueOf(killSection.getString("reward.effect")); + player.getWorld().playEffect(player.getLocation(), effect, null); + } } } From bdc961c7e1bde180d237db835c7c25d0ff1ff88c Mon Sep 17 00:00:00 2001 From: cmastudios Date: Thu, 12 Jun 2014 19:12:42 -0500 Subject: [PATCH 19/36] Prevent trees from extending out of warzone Closes #799 --- .../com/tommytony/war/event/WarBlockListener.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/war/src/main/java/com/tommytony/war/event/WarBlockListener.java b/war/src/main/java/com/tommytony/war/event/WarBlockListener.java index 385703d..931cda4 100644 --- a/war/src/main/java/com/tommytony/war/event/WarBlockListener.java +++ b/war/src/main/java/com/tommytony/war/event/WarBlockListener.java @@ -4,9 +4,11 @@ import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.block.BlockState; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBurnEvent; @@ -14,6 +16,7 @@ import org.bukkit.event.block.BlockDamageEvent; import org.bukkit.event.block.BlockPistonExtendEvent; import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.world.StructureGrowEvent; import org.bukkit.inventory.ItemStack; import org.getspout.spoutapi.SpoutManager; import org.getspout.spoutapi.player.SpoutPlayer; @@ -460,4 +463,16 @@ public class WarBlockListener implements Listener { return; } } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onStructureGrowth(final StructureGrowEvent event) { + Warzone zone = Warzone.getZoneByLocation(event.getLocation()); + if (zone != null) { + for (BlockState state : event.getBlocks()) { + if (!zone.getVolume().contains(state.getLocation())) { + state.setType(Material.AIR); + } + } + } + } } From df1e5a56dfd11eda6308e36a09c10badb84a2d9e Mon Sep 17 00:00:00 2001 From: cmastudios Date: Thu, 12 Jun 2014 20:59:01 -0500 Subject: [PATCH 20/36] Fix respawn after game end with realdeaths Closes #793 Please note this is not a simple fix and applies it through a large series of changes that may need to be noted in case of further troubles in the future. To accomplish this correctly, if a player is a really dead fighter, his state and position will not be updated in a number of places. This is all handled by the respawn hook for really dead fighters, which by the way I rewrote because yolo. It makes a (potentially incorrect) assumption that there is no reason a zone should hold a previous player state when they join, so it is deleted for safety purposes. If not, and the player leaves the zone, they may lose items. This may fix other related inventory reset issues. --- war/src/main/java/com/tommytony/war/Team.java | 4 +- .../main/java/com/tommytony/war/Warzone.java | 30 +++++++++---- .../war/command/ResetZoneCommand.java | 4 +- .../war/event/WarPlayerListener.java | 44 +++++++++++-------- 4 files changed, 53 insertions(+), 29 deletions(-) diff --git a/war/src/main/java/com/tommytony/war/Team.java b/war/src/main/java/com/tommytony/war/Team.java index 194af9b..4dd2031 100644 --- a/war/src/main/java/com/tommytony/war/Team.java +++ b/war/src/main/java/com/tommytony/war/Team.java @@ -464,7 +464,9 @@ public class Team { } thePlayer.setFireTicks(0); thePlayer.setRemainingAir(300); - this.warzone.restorePlayerState(thePlayer); + if (!this.warzone.getReallyDeadFighters().contains(thePlayer.getName())) { + this.warzone.restorePlayerState(thePlayer); + } this.warzone.getLoadoutSelections().remove(thePlayer); } diff --git a/war/src/main/java/com/tommytony/war/Warzone.java b/war/src/main/java/com/tommytony/war/Warzone.java index db82afe..629c3a1 100644 --- a/war/src/main/java/com/tommytony/war/Warzone.java +++ b/war/src/main/java/com/tommytony/war/Warzone.java @@ -186,6 +186,15 @@ public class Warzone { return null; } + public static Warzone getZoneForDeadPlayer(Player player) { + for (Warzone warzone : War.war.getWarzones()) { + if (warzone.getReallyDeadFighters().contains(player.getName())) { + return warzone; + } + } + return null; + } + public boolean ready() { if (this.volume.hasTwoCorners() && !this.volume.tooSmall() && !this.volume.tooBig()) { return true; @@ -305,11 +314,13 @@ public class Warzone { // everyone back to team spawn with full health for (Team team : this.teams) { for (Player player : team.getPlayers()) { - if (respawnExempted == null - || (respawnExempted != null - && !player.getName().equals(respawnExempted.getName()))) { - this.respawnPlayer(team, player); + if (player.equals(respawnExempted)) { + continue; } + if (this.getReallyDeadFighters().contains(player.getName())) { + continue; + } + this.respawnPlayer(team, player); } team.setRemainingLives(team.getTeamConfig().resolveInt(TeamConfig.LIFEPOOL)); team.initializeTeamSpawns(); @@ -370,7 +381,6 @@ public class Warzone { this.flagThieves.clear(); this.bombThieves.clear(); this.cakeThieves.clear(); - this.reallyDeadFighters.clear(); if (this.getScoreboardType() != ScoreboardType.NONE) { this.scoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); scoreboard.registerNewObjective(this.getScoreboardType().getDisplayName(), "dummy"); @@ -959,10 +969,14 @@ public class Warzone { } team.addPlayer(player); team.resetSign(); - if (!this.hasPlayerState(player.getName())) { - this.keepPlayerState(player); - War.war.msg(player, "join.inventorystored"); + if (this.hasPlayerState(player.getName())) { + War.war.getLogger().log(Level.WARNING, "Player {0} in warzone {1} already has a stored state - they may have lost items", + new Object[] {player.getName(), this.getName()}); + this.playerStates.remove(player.getName()); } + this.getReallyDeadFighters().remove(player.getName()); + this.keepPlayerState(player); + War.war.msg(player, "join.inventorystored"); this.respawnPlayer(team, player); this.broadcast("join.broadcast", player.getName(), team.getKind().getFormattedName()); return true; diff --git a/war/src/main/java/com/tommytony/war/command/ResetZoneCommand.java b/war/src/main/java/com/tommytony/war/command/ResetZoneCommand.java index 986891a..107d020 100644 --- a/war/src/main/java/com/tommytony/war/command/ResetZoneCommand.java +++ b/war/src/main/java/com/tommytony/war/command/ResetZoneCommand.java @@ -53,7 +53,9 @@ public class ResetZoneCommand extends AbstractZoneMakerCommand { Player p = it.next(); it.remove(); team.removePlayer(p); - p.teleport(zone.getEndTeleport(LeaveCause.RESET)); + if (!zone.getReallyDeadFighters().contains(p.getName())) { + p.teleport(zone.getEndTeleport(LeaveCause.RESET)); + } } team.resetPoints(); team.getPlayers().clear(); diff --git a/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java b/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java index e22181c..321ddff 100644 --- a/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java +++ b/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java @@ -4,6 +4,8 @@ import java.util.HashMap; import java.util.List; import com.tommytony.war.config.WarConfig; + +import org.apache.commons.lang.Validate; import org.bukkit.ChatColor; import org.bukkit.Effect; import org.bukkit.Location; @@ -43,6 +45,7 @@ import com.tommytony.war.utility.Direction; import com.tommytony.war.utility.Loadout; import com.tommytony.war.utility.LoadoutSelection; import com.tommytony.war.volume.Volume; + import java.util.ArrayList; import java.util.Iterator; import java.util.logging.Level; @@ -874,27 +877,30 @@ public class WarPlayerListener implements Listener { @EventHandler(priority = EventPriority.HIGHEST) public void onPlayerRespawn(PlayerRespawnEvent event) { - if (War.war.isLoaded()) { - // Anyone who died in warzones needs to go back there pronto! - for (Warzone zone : War.war.getWarzones()) { - if (zone.getReallyDeadFighters().contains(event.getPlayer().getName())) { - zone.getReallyDeadFighters().remove(event.getPlayer().getName()); - for (Team team : zone.getTeams()) { - if (team.getPlayers().contains(event.getPlayer())) { - event.setRespawnLocation(team.getRandomSpawn()); - zone.respawnPlayer(team, event.getPlayer()); - return; - } - } - - if (zone.hasPlayerState(event.getPlayer().getName())) { - // If not member of a team and zone has your state, then game ended while you were dead - War.war.log("Failed to restore game state to dead player.", Level.WARNING); - } - break; - } + Warzone playingZone = Warzone.getZoneByPlayerName(event.getPlayer().getName()); + Warzone deadZone = Warzone.getZoneForDeadPlayer(event.getPlayer()); + if (playingZone == null && deadZone != null) { + // Game ended while player was dead, so restore state + deadZone.getReallyDeadFighters().remove(event.getPlayer().getName()); + if (deadZone.hasPlayerState(event.getPlayer().getName())) { + deadZone.restorePlayerState(event.getPlayer()); } + event.setRespawnLocation(deadZone.getEndTeleport(LeaveCause.DISCONNECT)); + return; + } else if (playingZone == null) { + // Player not playing war + return; + } else if (deadZone == null) { + // Player is not a 'really' dead player, nothing to do here + return; } + Team team = playingZone.getPlayerTeam(event.getPlayer().getName()); + Validate.notNull(team, String.format( + "Failed to find a team for player %s in warzone %s on respawn.", + event.getPlayer().getName(), playingZone.getName())); + playingZone.getReallyDeadFighters().remove(event.getPlayer().getName()); + event.setRespawnLocation(team.getRandomSpawn()); + playingZone.respawnPlayer(team, event.getPlayer()); } @EventHandler From 9281ad5c4dec40f76711f63deb1a72f1c1636aa5 Mon Sep 17 00:00:00 2001 From: cmastudios Date: Thu, 12 Jun 2014 21:09:58 -0500 Subject: [PATCH 21/36] Don't set a skull owner if empty Closes #781 Another bug due to Mojang's new stupid username changing "feature". Setting the owner requires a web lookup or cache hit for the name in order to target the correct player. It apparently doesn't like looking up a blank name. --- .../main/java/com/tommytony/war/mapper/ZoneVolumeMapper.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/war/src/main/java/com/tommytony/war/mapper/ZoneVolumeMapper.java b/war/src/main/java/com/tommytony/war/mapper/ZoneVolumeMapper.java index 50b79d7..7018410 100644 --- a/war/src/main/java/com/tommytony/war/mapper/ZoneVolumeMapper.java +++ b/war/src/main/java/com/tommytony/war/mapper/ZoneVolumeMapper.java @@ -184,7 +184,9 @@ public class ZoneVolumeMapper { // Skulls if (modify instanceof Skull) { String[] opts = query.getString("metadata").split("\n"); - ((Skull) modify).setOwner(opts[0]); + if (!opts[0].isEmpty()) { + ((Skull) modify).setOwner(opts[0]); + } ((Skull) modify).setSkullType(SkullType.valueOf(opts[1])); ((Skull) modify).setRotation(BlockFace.valueOf(opts[2])); modify.update(true, false); From 33add7df0d9de36c9d7c91b97a02bc1c52d80257 Mon Sep 17 00:00:00 2001 From: cmastudios Date: Thu, 12 Jun 2014 22:20:20 -0500 Subject: [PATCH 22/36] Option to drop inventory on kill Closes #711, closes #13, closes #11. Items only drop on kill to prevent players from farming items. Warzone makers must design their warzone items to fit with this feature if they choose to enable it. E.g. a warzone might include items that must be found and then can be stolen on kill. Thanks to @dylanhansch for testing. --- war/src/main/java/com/tommytony/war/War.java | 1 + .../java/com/tommytony/war/config/TeamConfig.java | 3 ++- .../com/tommytony/war/event/WarEntityListener.java | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/war/src/main/java/com/tommytony/war/War.java b/war/src/main/java/com/tommytony/war/War.java index 1259d52..29d19f7 100644 --- a/war/src/main/java/com/tommytony/war/War.java +++ b/war/src/main/java/com/tommytony/war/War.java @@ -234,6 +234,7 @@ public class War extends JavaPlugin { teamDefaultConfig.put(TeamConfig.PLACEBLOCK, true); teamDefaultConfig.put(TeamConfig.APPLYPOTION, ""); teamDefaultConfig.put(TeamConfig.ECOREWARD, 0.0); + teamDefaultConfig.put(TeamConfig.INVENTORYDROP, false); this.getDefaultInventories().clearLoadouts(); HashMap defaultLoadout = new HashMap(); diff --git a/war/src/main/java/com/tommytony/war/config/TeamConfig.java b/war/src/main/java/com/tommytony/war/config/TeamConfig.java index 314acc1..25b4f86 100644 --- a/war/src/main/java/com/tommytony/war/config/TeamConfig.java +++ b/war/src/main/java/com/tommytony/war/config/TeamConfig.java @@ -19,7 +19,8 @@ public enum TeamConfig { BLOCKWHITELIST (String.class), PLACEBLOCK (Boolean.class), APPLYPOTION(String.class), - ECOREWARD(Double.class); + ECOREWARD(Double.class), + INVENTORYDROP(Boolean.class); private final Class configType; diff --git a/war/src/main/java/com/tommytony/war/event/WarEntityListener.java b/war/src/main/java/com/tommytony/war/event/WarEntityListener.java index b75ebc1..7768be4 100644 --- a/war/src/main/java/com/tommytony/war/event/WarEntityListener.java +++ b/war/src/main/java/com/tommytony/war/event/WarEntityListener.java @@ -32,6 +32,7 @@ import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.scoreboard.Objective; import org.bukkit.util.Vector; @@ -59,6 +60,15 @@ import com.tommytony.war.utility.LoadoutSelection; public class WarEntityListener implements Listener { private final Random killSeed = new Random(); + + private void dropItems(Location location, ItemStack[] items) { + for (ItemStack item : items) { + if (item == null || item.getType() == Material.AIR) { + continue; + } + location.getWorld().dropItem(location, item); + } + } /** * Handles PVP-Damage @@ -173,6 +183,10 @@ public class WarEntityListener implements Listener { Objective obj = attackerWarzone.getScoreboard().getObjective("Top kills"); obj.getScore(a).setScore(defenderWarzone.getKillCount(a.getName())); } + if (defenderTeam.getTeamConfig().resolveBoolean(TeamConfig.INVENTORYDROP)) { + dropItems(d.getLocation(), d.getInventory().getContents()); + dropItems(d.getLocation(), d.getInventory().getArmorContents()); + } } WarPlayerDeathEvent event1 = new WarPlayerDeathEvent(defenderWarzone, d, a, event.getCause()); War.war.getServer().getPluginManager().callEvent(event1); From 7561fd8ffb765564591861c3b351d0bc7b644ddf Mon Sep 17 00:00:00 2001 From: cmastudios Date: Fri, 13 Jun 2014 23:28:08 -0500 Subject: [PATCH 23/36] Moved death message handling to warzone class The more interesting change I made here was the removal of the so-called 're-killing' statements - e.g. setting the health of really dead players to 0 to ensure they are dead. Who knows, it might affect #796 and #778, because I have zero idea what is causing them. --- .../main/java/com/tommytony/war/Warzone.java | 118 +++++++++++++- .../war/event/WarEntityListener.java | 153 +++--------------- 2 files changed, 133 insertions(+), 138 deletions(-) diff --git a/war/src/main/java/com/tommytony/war/Warzone.java b/war/src/main/java/com/tommytony/war/Warzone.java index 4f258a8..b1025b8 100644 --- a/war/src/main/java/com/tommytony/war/Warzone.java +++ b/war/src/main/java/com/tommytony/war/Warzone.java @@ -12,12 +12,11 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Random; import java.util.logging.Level; import net.milkbowl.vault.economy.EconomyResponse; -import com.tommytony.war.mapper.VolumeMapper; -import com.tommytony.war.mapper.ZoneVolumeMapper; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.Validate; import org.bukkit.Bukkit; @@ -29,9 +28,15 @@ import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; +import org.bukkit.entity.Arrow; import org.bukkit.entity.Entity; import org.bukkit.entity.Item; import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.entity.TNTPrimed; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.inventory.InventoryView; @@ -62,6 +67,8 @@ import com.tommytony.war.job.LoadoutResetJob; import com.tommytony.war.job.LogKillsDeathsJob; import com.tommytony.war.job.LogKillsDeathsJob.KillsDeathsRecord; import com.tommytony.war.mapper.LoadoutYmlMapper; +import com.tommytony.war.mapper.VolumeMapper; +import com.tommytony.war.mapper.ZoneVolumeMapper; import com.tommytony.war.spout.SpoutDisplayer; import com.tommytony.war.structure.Bomb; import com.tommytony.war.structure.Cake; @@ -981,6 +988,112 @@ public class Warzone { this.broadcast("join.broadcast", player.getName(), team.getKind().getFormattedName()); return true; } + + private void dropItems(Location location, ItemStack[] items) { + for (ItemStack item : items) { + if (item == null || item.getType() == Material.AIR) { + continue; + } + location.getWorld().dropItem(location, item); + } + } + + private Random killSeed = new Random(); + + /** + * Send death messages and process other records before passing off the + * death to the {@link #handleDeath(Player)} method. + * @param attacker Player who killed the defender + * @param defender Player who was killed + * @param damager Entity who caused the damage. Usually an arrow. Used for + * specific death messages. Can be null. + */ + public void handleKill(Player attacker, Player defender, Entity damager) { + Team attackerTeam = this.getPlayerTeam(attacker.getName()); + Team defenderTeam = this.getPlayerTeam(defender.getName()); + if (this.getWarzoneConfig().getBoolean(WarzoneConfig.DEATHMESSAGES)) { + String attackerString = attackerTeam.getKind().getColor() + attacker.getName(); + String defenderString = defenderTeam.getKind().getColor() + defender.getName(); + Material killerWeapon = attacker.getItemInHand().getType(); + String weaponString = killerWeapon.toString(); + if (attacker.getItemInHand().hasItemMeta() && attacker.getItemInHand().getItemMeta().hasDisplayName()) { + weaponString = attacker.getItemInHand().getItemMeta().getDisplayName() + ChatColor.WHITE; + } + if (killerWeapon == Material.AIR) { + weaponString = War.war.getString("pvp.kill.weapon.hand"); + } else if (killerWeapon == Material.BOW || damager instanceof Arrow) { + int rand = killSeed.nextInt(3); + if (rand == 0) { + weaponString = War.war.getString("pvp.kill.weapon.bow"); + } else { + weaponString = War.war.getString("pvp.kill.weapon.aim"); + } + } else if (damager instanceof Projectile) { + weaponString = War.war.getString("pvp.kill.weapon.aim"); + } + String adjectiveString = War.war.getDeadlyAdjectives().isEmpty() ? "" : War.war.getDeadlyAdjectives().get(this.killSeed.nextInt(War.war.getDeadlyAdjectives().size())); + String verbString = War.war.getKillerVerbs().isEmpty() ? "" : War.war.getKillerVerbs().get(this.killSeed.nextInt(War.war.getKillerVerbs().size())); + this.broadcast("pvp.kill.format", attackerString + ChatColor.WHITE, adjectiveString, + weaponString.toLowerCase().replace('_', ' '), verbString, defenderString); + } + this.addKillCount(attacker.getName(), 1); + this.addKillDeathRecord(attacker, 1, 0); + this.addKillDeathRecord(defender, 0, 1); + if (attackerTeam.getTeamConfig().resolveBoolean(TeamConfig.XPKILLMETER)) { + attacker.setLevel(this.getKillCount(attacker.getName())); + } + if (attackerTeam.getTeamConfig().resolveBoolean(TeamConfig.KILLSTREAK)) { + War.war.getKillstreakReward().rewardPlayer(attacker, this.getKillCount(attacker.getName())); + } + if (this.getScoreboard() != null && this.getScoreboardType() == ScoreboardType.TOPKILLS) { + Objective obj = this.getScoreboard().getObjective("Top kills"); + obj.getScore(attacker).setScore(this.getKillCount(attacker.getName())); + } + if (defenderTeam.getTeamConfig().resolveBoolean(TeamConfig.INVENTORYDROP)) { + dropItems(defender.getLocation(), defender.getInventory().getContents()); + dropItems(defender.getLocation(), defender.getInventory().getArmorContents()); + } + this.handleDeath(defender); + } + + /** + * Handle death messages before passing to {@link #handleDeath(Player)} + * for post-processing. It's like + * {@link #handleKill(Player, Player, Entity)}, but only for suicides. + * @param player Player who killed himself + */ + public void handleSuicide(Player player) { + if (this.getWarzoneConfig().getBoolean(WarzoneConfig.DEATHMESSAGES)) { + String defenderString = this.getPlayerTeam(player.getName()).getKind().getColor() + player.getName() + ChatColor.WHITE; + this.broadcast("pvp.kill.self", defenderString); + } + this.handleDeath(player); + } + + /** + * Handle a player killed naturally (like by a dispenser or explosion). + * @param player Player killed + * @param event Event causing damage + */ + public void handleNaturalKill(Player player, EntityDamageEvent event) { + if (this.getWarzoneConfig().getBoolean(WarzoneConfig.DEATHMESSAGES)) { + String defenderString = this.getPlayerTeam(player.getName()).getKind().getColor() + player.getName() + ChatColor.WHITE; + if (event instanceof EntityDamageByEntityEvent + && ((EntityDamageByEntityEvent) event).getDamager() instanceof TNTPrimed) { + this.broadcast("pvp.death.explosion", defenderString + ChatColor.WHITE); + } else if (event.getCause() == DamageCause.FIRE || event.getCause() == DamageCause.FIRE_TICK + || event.getCause() == DamageCause.LAVA || event.getCause() == DamageCause.LIGHTNING) { + this.broadcast("pvp.death.fire", defenderString); + } else if (event.getCause() == DamageCause.DROWNING) { + this.broadcast("pvp.death.drown", defenderString); + } else if (event.getCause() == DamageCause.FALL) { + this.broadcast("pvp.death.fall", defenderString); + } else { + this.broadcast("pvp.death.other", defenderString); + } + } + this.handleDeath(player); + } /** * Cleanup after a player who has died. This decrements the team's @@ -994,7 +1107,6 @@ public class Warzone { Validate.notNull(playerTeam, "Can't find team for dead player " + player.getName()); if (this.getWarzoneConfig().getBoolean(WarzoneConfig.REALDEATHS)) { this.getReallyDeadFighters().add(player.getName()); - player.setHealth(0D); } else { this.respawnPlayer(playerTeam, player); } diff --git a/war/src/main/java/com/tommytony/war/event/WarEntityListener.java b/war/src/main/java/com/tommytony/war/event/WarEntityListener.java index 7768be4..6992872 100644 --- a/war/src/main/java/com/tommytony/war/event/WarEntityListener.java +++ b/war/src/main/java/com/tommytony/war/event/WarEntityListener.java @@ -2,14 +2,13 @@ package com.tommytony.war.event; import java.util.ArrayList; import java.util.List; -import java.util.Random; +import java.util.logging.Level; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockState; -import org.bukkit.entity.Arrow; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; @@ -20,34 +19,27 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.CreatureSpawnEvent; -import org.bukkit.event.entity.EntityCombustEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityRegainHealthEvent; import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason; import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.event.entity.FoodLevelChangeEvent; +import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; -import org.bukkit.scoreboard.Objective; import org.bukkit.util.Vector; -import org.getspout.spoutapi.SpoutManager; -import org.getspout.spoutapi.player.SpoutPlayer; import com.tommytony.war.Team; import com.tommytony.war.War; import com.tommytony.war.Warzone; -import com.tommytony.war.config.ScoreboardType; import com.tommytony.war.config.TeamConfig; import com.tommytony.war.config.WarConfig; import com.tommytony.war.config.WarzoneConfig; import com.tommytony.war.job.DeferredBlockResetsJob; -import com.tommytony.war.spout.SpoutDisplayer; import com.tommytony.war.structure.Bomb; import com.tommytony.war.utility.LoadoutSelection; @@ -59,17 +51,6 @@ import com.tommytony.war.utility.LoadoutSelection; */ public class WarEntityListener implements Listener { - private final Random killSeed = new Random(); - - private void dropItems(Location location, ItemStack[] items) { - for (ItemStack item : items) { - if (item == null || item.getType() == Material.AIR) { - continue; - } - location.getWorld().dropItem(location, item); - } - } - /** * Handles PVP-Damage * @@ -131,72 +112,20 @@ public class WarEntityListener implements Listener { // Detect death, prevent it and respawn the player if (event.getDamage() >= d.getHealth()) { if (defenderWarzone.getReallyDeadFighters().contains(d.getName())) { - // don't re-kill a dead person - if (d.getHealth() != 0) { - d.setHealth(0); - } - + // don't re-kill a dead person return; } - - if (attackerWarzone.getWarzoneConfig().getBoolean(WarzoneConfig.DEATHMESSAGES)) { - String attackerString = attackerTeam.getKind().getColor() + a.getName(); - String defenderString = defenderTeam.getKind().getColor() + d.getName(); - if (attacker.getEntityId() != defender.getEntityId()) { - Material killerWeapon = a.getItemInHand().getType(); - String weaponString = killerWeapon.toString(); - if (a.getItemInHand().hasItemMeta() && a.getItemInHand().getItemMeta().hasDisplayName()) { - weaponString = a.getItemInHand().getItemMeta().getDisplayName() + ChatColor.WHITE; - } - if (killerWeapon == Material.AIR) { - weaponString = War.war.getString("pvp.kill.weapon.hand"); - } else if (killerWeapon == Material.BOW || event.getDamager() instanceof Arrow) { - int rand = killSeed.nextInt(3); - if (rand == 0) { - weaponString = War.war.getString("pvp.kill.weapon.bow"); - } else { - weaponString = War.war.getString("pvp.kill.weapon.aim"); - } - } else if (event.getDamager() instanceof Projectile) { - weaponString = War.war.getString("pvp.kill.weapon.aim"); - } - String adjectiveString = War.war.getDeadlyAdjectives().isEmpty() ? "" : War.war.getDeadlyAdjectives().get(this.killSeed.nextInt(War.war.getDeadlyAdjectives().size())); - String verbString = War.war.getKillerVerbs().isEmpty() ? "" : War.war.getKillerVerbs().get(this.killSeed.nextInt(War.war.getKillerVerbs().size())); - defenderWarzone.broadcast("pvp.kill.format", attackerString + ChatColor.WHITE, adjectiveString, - weaponString.toLowerCase().replace('_', ' '), verbString, defenderString); - } else { - defenderWarzone.broadcast("pvp.kill.self", defenderString + ChatColor.WHITE); - } - } - if (attacker.getEntityId() != defender.getEntityId()) { - defenderWarzone.addKillCount(a.getName(), 1); - defenderWarzone.addKillDeathRecord(a, 1, 0); - defenderWarzone.addKillDeathRecord(d, 0, 1); - if (attackerTeam.getTeamConfig().resolveBoolean(TeamConfig.XPKILLMETER)) { - a.setLevel(defenderWarzone.getKillCount(a.getName())); - } - if (attackerTeam.getTeamConfig().resolveBoolean(TeamConfig.KILLSTREAK)) { - War.war.getKillstreakReward().rewardPlayer(a, defenderWarzone.getKillCount(a.getName())); - } - if (defenderWarzone.getScoreboard() != null && - defenderWarzone.getScoreboardType() == ScoreboardType.TOPKILLS) { - Objective obj = attackerWarzone.getScoreboard().getObjective("Top kills"); - obj.getScore(a).setScore(defenderWarzone.getKillCount(a.getName())); - } - if (defenderTeam.getTeamConfig().resolveBoolean(TeamConfig.INVENTORYDROP)) { - dropItems(d.getLocation(), d.getInventory().getContents()); - dropItems(d.getLocation(), d.getInventory().getArmorContents()); - } - } WarPlayerDeathEvent event1 = new WarPlayerDeathEvent(defenderWarzone, d, a, event.getCause()); War.war.getServer().getPluginManager().callEvent(event1); - defenderWarzone.handleDeath(d); if (!defenderWarzone.getWarzoneConfig().getBoolean(WarzoneConfig.REALDEATHS)) { // fast respawn, don't really die event.setCancelled(true); - return; } - + if (d == a) { + defenderWarzone.handleSuicide(d); + } else { + defenderWarzone.handleKill(a, d, event.getDamager()); + } } else if (defenderWarzone.isBombThief(d.getName()) && d.getLocation().distance(a.getLocation()) < 2) { // Close combat, close enough to detonate Bomb bomb = defenderWarzone.getBombForThief(d.getName()); @@ -223,24 +152,11 @@ public class WarEntityListener implements Listener { // Notify everyone for (Team t : defenderWarzone.getTeams()) { - if (War.war.isSpoutServer()) { - for (Player p : t.getPlayers()) { - SpoutPlayer sp = SpoutManager.getPlayer(p); - if (sp.isSpoutCraftEnabled()) { - sp.sendNotification( - SpoutDisplayer.cleanForNotification(attackerTeam.getKind().getColor() + a.getName() + ChatColor.YELLOW + " made "), - SpoutDisplayer.cleanForNotification(defenderTeam.getKind().getColor() + d.getName() + ChatColor.YELLOW + " blow up!"), - Material.TNT, - (short)0, - 10000); - } - } - } - + t.sendAchievement(attackerTeam.getKind().getColor() + a.getName() + ChatColor.YELLOW + " made ", + defenderTeam.getKind().getColor() + d.getName() + ChatColor.YELLOW + " blow up!", new ItemStack(Material.TNT), 10000); t.teamcast("pvp.kill.bomb", attackerTeam.getKind().getColor() + a.getName() + ChatColor.WHITE, defenderTeam.getKind().getColor() + d.getName() + ChatColor.WHITE); } - } } else if (attackerTeam != null && defenderTeam != null && attackerTeam == defenderTeam && attackerWarzone == defenderWarzone && attacker.getEntityId() != defender.getEntityId()) { // same team, but not same person @@ -286,30 +202,16 @@ public class WarEntityListener implements Listener { } if (defenderWarzone.getReallyDeadFighters().contains(d.getName())) { // don't re-kill a dead person - if (d.getHealth() != 0) { - d.setHealth(0); - } - return; } - if (defenderWarzone.getWarzoneConfig().getBoolean(WarzoneConfig.DEATHMESSAGES)) { - String defenderString = Team.getTeamByPlayerName(d.getName()).getKind().getColor() + d.getName(); - if (event.getDamager() instanceof TNTPrimed) { - defenderWarzone.broadcast("pvp.death.explosion", defenderString + ChatColor.WHITE); - } else { - defenderWarzone.broadcast("pvp.death.other", defenderString + ChatColor.WHITE); - } - } WarPlayerDeathEvent event1 = new WarPlayerDeathEvent(defenderWarzone, d, null, event.getCause()); War.war.getServer().getPluginManager().callEvent(event1); - defenderWarzone.handleDeath(d); - if (!defenderWarzone.getWarzoneConfig().getBoolean(WarzoneConfig.REALDEATHS)) { // fast respawn, don't really die event.setCancelled(true); - return; } + defenderWarzone.handleNaturalKill(d, event); } } } @@ -432,36 +334,18 @@ public class WarEntityListener implements Listener { event.setCancelled(true); } else if (event.getDamage() >= player.getHealth()) { if (zone.getReallyDeadFighters().contains(player.getName())) { - // don't re-count the death points of an already dead person, make sure they are dead though - // (reason for this is that onEntityDamage sometimes fires more than once for one death) - if (player.getHealth() != 0) { - player.setHealth(0); - } + // don't re-count the death points of an already dead person return; } // Detect death, prevent it and respawn the player - if (zone.getWarzoneConfig().getBoolean(WarzoneConfig.DEATHMESSAGES)) { - String playerName = Team.getTeamByPlayerName(player.getName()).getKind().getColor() + player.getName() + ChatColor.WHITE; - if (event.getCause() == DamageCause.FIRE || event.getCause() == DamageCause.FIRE_TICK - || event.getCause() == DamageCause.LAVA || event.getCause() == DamageCause.LIGHTNING) { - zone.broadcast("pvp.death.fire", playerName); - } else if (event.getCause() == DamageCause.DROWNING) { - zone.broadcast("pvp.death.drown", playerName); - } else if (event.getCause() == DamageCause.FALL) { - zone.broadcast("pvp.death.fall", playerName); - } else { - zone.broadcast("pvp.death.other", playerName); - } - } WarPlayerDeathEvent event1 = new WarPlayerDeathEvent(zone, player, null, event.getCause()); War.war.getServer().getPluginManager().callEvent(event1); - zone.handleDeath(player); - if (!zone.getWarzoneConfig().getBoolean(WarzoneConfig.REALDEATHS)) { // fast respawn, don't really die event.setCancelled(true); } + zone.handleNaturalKill(player, event); } } } @@ -565,12 +449,8 @@ public class WarEntityListener implements Listener { } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onEntityDeath(final EntityDeathEvent event) { - if (!War.war.isLoaded() || !(event.getEntity() instanceof Player)) { - return; - } - - Player player = (Player) event.getEntity(); + public void onPlayerDeath(final PlayerDeathEvent event) { + Player player = event.getEntity(); Warzone zone = Warzone.getZoneByPlayerName(player.getName()); if (zone != null) { event.getDrops().clear(); @@ -581,6 +461,9 @@ public class WarEntityListener implements Listener { if (zone.getWarzoneConfig().getBoolean(WarzoneConfig.DEATHMESSAGES)) { zone.broadcast("pvp.death.other", team.getKind().getColor() + player.getName()); } + War.war.getLogger().log(Level.WARNING, "We missed the death of player {0} - something went wrong.", player.getName()); + } else { + event.setDeathMessage(""); } } } From 2c529f764715ac87f7e6afdca72e252f25c7c163 Mon Sep 17 00:00:00 2001 From: cmastudios Date: Fri, 13 Jun 2014 23:30:59 -0500 Subject: [PATCH 24/36] Fix fire burning after respawn Whoever wrote the note in LoadoutResetJob about stopping fire knew what he was talking about. Sadly `git blame` shows nothing due to a refactor. However, this job was still being run in sync, therefore doing nothing. So I added a new job that is ran a tick later to clean up. --- .../main/java/com/tommytony/war/Warzone.java | 10 ++++++- .../war/event/WarEntityListener.java | 30 ------------------- .../tommytony/war/job/LoadoutResetJob.java | 3 -- .../war/utility/PotionEffectHelper.java | 10 +++---- 4 files changed, 14 insertions(+), 39 deletions(-) diff --git a/war/src/main/java/com/tommytony/war/Warzone.java b/war/src/main/java/com/tommytony/war/Warzone.java index b1025b8..bd138e2 100644 --- a/war/src/main/java/com/tommytony/war/Warzone.java +++ b/war/src/main/java/com/tommytony/war/Warzone.java @@ -451,8 +451,16 @@ public class Warzone { player.setFoodLevel(20); player.setSaturation(team.getTeamConfig().resolveInt(TeamConfig.SATURATION)); player.setExhaustion(0); - player.setFireTicks(0); //this works fine here, why put it in LoudoutResetJob...? I'll keep it over there though player.setFallDistance(0); + War.war.getServer().getScheduler().runTaskLater(War.war, new Runnable() { + + @Override + public void run() { + // Stop fire here, since doing it in the same tick as death doesn't extinguish it + player.setFireTicks(0); + } + + }, 1L); this.preventItemHackingThroughOpenedInventory(player); diff --git a/war/src/main/java/com/tommytony/war/event/WarEntityListener.java b/war/src/main/java/com/tommytony/war/event/WarEntityListener.java index 6992872..bd078a5 100644 --- a/war/src/main/java/com/tommytony/war/event/WarEntityListener.java +++ b/war/src/main/java/com/tommytony/war/event/WarEntityListener.java @@ -351,36 +351,6 @@ public class WarEntityListener implements Listener { } } - @EventHandler - public void onEntityCombust(final EntityCombustEvent event) { - if (!War.war.isLoaded()) { - return; - } - - Entity entity = event.getEntity(); - if (entity instanceof Player) { - Player player = (Player) entity; - Team team = Team.getTeamByPlayerName(player.getName()); - Warzone zone = Warzone.getZoneByPlayerName(player.getName()); - LoadoutSelection playerLoadoutState = null; - - if (zone != null) { - playerLoadoutState = zone.getLoadoutSelections().get(player.getName()); - } - - if (team != null - && zone != null - && team.isSpawnLocation(player.getLocation()) - && playerLoadoutState != null - && playerLoadoutState.isStillInSpawn()) { - // smother out the fire that didn't burn out when you respawned - // Stop fire (but not if you came back to spawn after leaving it a first time) - player.setFireTicks(0); - event.setCancelled(true); - } - } - } - /** * Prevents creatures from spawning in warzones if no creatures is active * diff --git a/war/src/main/java/com/tommytony/war/job/LoadoutResetJob.java b/war/src/main/java/com/tommytony/war/job/LoadoutResetJob.java index 2f35324..5a0c070 100644 --- a/war/src/main/java/com/tommytony/war/job/LoadoutResetJob.java +++ b/war/src/main/java/com/tommytony/war/job/LoadoutResetJob.java @@ -23,9 +23,6 @@ public class LoadoutResetJob implements Runnable { public void run() { this.zone.equipPlayerLoadoutSelection(player, team, isFirstRespawn, isToggle); - - // Stop fire here, since doing it in the same tick as death doesn't extinguish it - this.player.setFireTicks(0); } } diff --git a/war/src/main/java/com/tommytony/war/utility/PotionEffectHelper.java b/war/src/main/java/com/tommytony/war/utility/PotionEffectHelper.java index 67ff373..cc62016 100644 --- a/war/src/main/java/com/tommytony/war/utility/PotionEffectHelper.java +++ b/war/src/main/java/com/tommytony/war/utility/PotionEffectHelper.java @@ -6,8 +6,9 @@ import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffect; public class PotionEffectHelper { - - public static void restorePotionEffects(Player player, Collection potionEffects) { + + public static void restorePotionEffects(Player player, + Collection potionEffects) { clearPotionEffects(player); for (PotionEffect effect : potionEffects) { player.addPotionEffect(effect, true); @@ -15,9 +16,8 @@ public class PotionEffectHelper { } public static void clearPotionEffects(Player player) { - for(PotionEffect effect : player.getActivePotionEffects()) - { - player.addPotionEffect(new PotionEffect(effect.getType(), 0, 0), true); + for (PotionEffect effect : player.getActivePotionEffects()) { + player.removePotionEffect(effect.getType()); } } } From e786c09bd0caabbecf40df1d352c49da264747d2 Mon Sep 17 00:00:00 2001 From: cmastudios Date: Fri, 13 Jun 2014 23:39:48 -0500 Subject: [PATCH 25/36] Fix flag drop team color Closes #798 --- war/src/main/java/com/tommytony/war/Warzone.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/war/src/main/java/com/tommytony/war/Warzone.java b/war/src/main/java/com/tommytony/war/Warzone.java index bd138e2..a85530f 100644 --- a/war/src/main/java/com/tommytony/war/Warzone.java +++ b/war/src/main/java/com/tommytony/war/Warzone.java @@ -1857,7 +1857,7 @@ public class Warzone { victimTeam.initializeTeamFlag(); if (!quiet) { - this.broadcast("drop.flag.broadcast", player.getName(), ChatColor.GREEN + victimTeam.getName() + ChatColor.WHITE); + this.broadcast("drop.flag.broadcast", player.getName(), victimTeam.getKind().getColor() + victimTeam.getName() + ChatColor.WHITE); } } else if (this.isCakeThief(player.getName())) { Cake cake = this.getCakeForThief(player.getName()); From 2b5190434db6cc76c721700e6301cb607dc0555f Mon Sep 17 00:00:00 2001 From: Fikry Abdullah Aziz Date: Tue, 18 Aug 2015 22:58:17 +0700 Subject: [PATCH 26/36] Remove torch from WarHub Gate There is a bug when the the gate is filled with players. the torch is droping instead of stick to the redstone block --- war/.classpath | 2 ++ war/.gitignore | 1 + war/src/main/java/com/tommytony/war/structure/WarHub.java | 4 ++-- 3 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 war/.gitignore diff --git a/war/.classpath b/war/.classpath index ae48900..d4997c3 100644 --- a/war/.classpath +++ b/war/.classpath @@ -29,5 +29,7 @@ + + diff --git a/war/.gitignore b/war/.gitignore new file mode 100644 index 0000000..b83d222 --- /dev/null +++ b/war/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/war/src/main/java/com/tommytony/war/structure/WarHub.java b/war/src/main/java/com/tommytony/war/structure/WarHub.java index c8d2e79..b1d15d1 100644 --- a/war/src/main/java/com/tommytony/war/structure/WarHub.java +++ b/war/src/main/java/com/tommytony/war/structure/WarHub.java @@ -282,8 +282,8 @@ public class WarHub { // add redstone blocks and torches to gate if there are players in it (to highlight active zones) zoneGate.getRelative(BlockFace.UP, 2).getRelative(left).setType(Material.REDSTONE_BLOCK); zoneGate.getRelative(BlockFace.UP, 2).getRelative(left.getOppositeFace()).setType(Material.REDSTONE_BLOCK); - zoneGate.getRelative(BlockFace.UP, 2).getRelative(left).getRelative(back, 1).setType(Material.TORCH); - zoneGate.getRelative(BlockFace.UP, 2).getRelative(left.getOppositeFace()).getRelative(back, 1).setType(Material.TORCH); + zoneGate.getRelative(BlockFace.UP, 2).getRelative(left).getRelative(back, 1).setType(Material.AIR); + zoneGate.getRelative(BlockFace.UP, 2).getRelative(left.getOppositeFace()).getRelative(back, 1).setType(Material.AIR); } else { zoneGate.getRelative(BlockFace.UP, 2).getRelative(left).getRelative(back, 1).setType(Material.AIR); zoneGate.getRelative(BlockFace.UP, 2).getRelative(left.getOppositeFace()).getRelative(back, 1).setType(Material.AIR); From f7aa952fb662c23edf17f72e4ca6a004234faba6 Mon Sep 17 00:00:00 2001 From: Connor Monahan Date: Tue, 18 Aug 2015 20:58:50 -0500 Subject: [PATCH 27/36] Remove project files Use maven importer --- .gitignore | 4 ++-- war/.classpath | 35 ----------------------------------- war/.gitignore | 1 - war/.project | 35 ----------------------------------- 4 files changed, 2 insertions(+), 73 deletions(-) delete mode 100644 war/.classpath delete mode 100644 war/.gitignore delete mode 100644 war/.project diff --git a/.gitignore b/.gitignore index 265861f..1fc5c34 100644 --- a/.gitignore +++ b/.gitignore @@ -2,8 +2,8 @@ .* # except for .gitignore !.gitignore -!.classpath -!.project +.classpath +.project # Ignore all classfiles *.class diff --git a/war/.classpath b/war/.classpath deleted file mode 100644 index d4997c3..0000000 --- a/war/.classpath +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/war/.gitignore b/war/.gitignore deleted file mode 100644 index b83d222..0000000 --- a/war/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target/ diff --git a/war/.project b/war/.project deleted file mode 100644 index 374f0cf..0000000 --- a/war/.project +++ /dev/null @@ -1,35 +0,0 @@ - - - war - - - - - - org.eclipse.jdt.core.javabuilder - - - - - net.sourceforge.metrics.builder - - - - - org.maven.ide.eclipse.maven2Builder - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - org.eclipse.m2e.core.maven2Nature - org.eclipse.jdt.core.javanature - org.maven.ide.eclipse.maven2Nature - net.sourceforge.metrics.nature - - From c1ad45e5554a67967724688022304e2f01858793 Mon Sep 17 00:00:00 2001 From: Connor Monahan Date: Mon, 6 Jun 2016 18:13:09 -0400 Subject: [PATCH 28/36] Fix #833, fix #832 --- war/pom.xml | 8 ++++---- .../java/com/tommytony/war/event/WarEntityListener.java | 3 ++- .../java/com/tommytony/war/event/WarPlayerListener.java | 6 +++--- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/war/pom.xml b/war/pom.xml index 81f9e1e..2182c83 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -16,12 +16,12 @@ - bukkit-repo - http://repo.bukkit.org/content/groups/public + spigot-repo + https://hub.spigotmc.org/nexus/content/groups/public/ cma-repo - http://maven.cmastudios.me/archiva/repository/internal + http://ftp.cmastudios.me/maven/ tagapi-repo @@ -117,7 +117,7 @@ org.bukkit bukkit - 1.7.2-R0.2 + 1.9.4-R0.1-SNAPSHOT org.kitteh diff --git a/war/src/main/java/com/tommytony/war/event/WarEntityListener.java b/war/src/main/java/com/tommytony/war/event/WarEntityListener.java index bd078a5..6cf4fe7 100644 --- a/war/src/main/java/com/tommytony/war/event/WarEntityListener.java +++ b/war/src/main/java/com/tommytony/war/event/WarEntityListener.java @@ -31,6 +31,7 @@ import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.projectiles.ProjectileSource; import org.bukkit.util.Vector; import com.tommytony.war.Team; @@ -483,7 +484,7 @@ public class WarEntityListener implements Listener { return; } if (event.getEntityType() == EntityType.EGG) { - LivingEntity shooter = event.getEntity().getShooter(); + ProjectileSource shooter = event.getEntity().getShooter(); if (shooter instanceof Player) { Player player = (Player) shooter; Warzone zone = Warzone.getZoneByPlayerName(player.getName()); diff --git a/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java b/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java index 321ddff..2cfd290 100644 --- a/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java +++ b/war/src/main/java/com/tommytony/war/event/WarPlayerListener.java @@ -260,7 +260,7 @@ public class WarPlayerListener implements Listener { // Whenever a player dies in the middle of conflict they will // likely respawn still trying to use their items to attack // another player. - player.playSound(player.getLocation(), Sound.ITEM_BREAK, 1, 0); + player.playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 0); } if (zone != null && event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock().getType() == Material.ENDER_CHEST && !zone.getWarzoneConfig().getBoolean(WarzoneConfig.ALLOWENDER)) { @@ -953,7 +953,7 @@ public class WarPlayerListener implements Listener { // Prevent thieves from taking their bomb/wool/cake into a chest, etc. if (zone.isThief(player.getName())) { event.setCancelled(true); - player.playSound(player.getLocation(), Sound.FIZZ, 10, 10); + player.playSound(player.getLocation(), Sound.BLOCK_LAVA_EXTINGUISH, 10, 10); } else // Magically give player a wool block when they click their helmet if (event.getSlotType() == InventoryType.SlotType.ARMOR && event.getSlot() == 39 && zone.getWarzoneConfig().getBoolean(WarzoneConfig.BLOCKHEADS)) { @@ -977,7 +977,7 @@ public class WarPlayerListener implements Listener { } if (zone.isImportantBlock(event.getBlockClicked())) { event.setCancelled(true); - player.playSound(player.getLocation(), Sound.FIZZ, 10, 10); + player.playSound(player.getLocation(), Sound.BLOCK_LAVA_EXTINGUISH, 10, 10); } } } From 624f278734715b2a47b18de986da60855d4aa721 Mon Sep 17 00:00:00 2001 From: Connor Monahan Date: Mon, 6 Jun 2016 18:49:35 -0400 Subject: [PATCH 29/36] Ignore errors from outdated PluginMetrics --- .../main/java/com/tommytony/war/job/RestoreYmlWarzonesJob.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/war/src/main/java/com/tommytony/war/job/RestoreYmlWarzonesJob.java b/war/src/main/java/com/tommytony/war/job/RestoreYmlWarzonesJob.java index 7f1cf6e..7848976 100644 --- a/war/src/main/java/com/tommytony/war/job/RestoreYmlWarzonesJob.java +++ b/war/src/main/java/com/tommytony/war/job/RestoreYmlWarzonesJob.java @@ -74,7 +74,7 @@ public class RestoreYmlWarzonesJob implements Runnable { } plugins.addPlotter(new PlotterEnabled("War")); // of course metrics.start(); - } catch (IOException ignored) { + } catch (RuntimeException ignored) { } } } From 5b4accb70785715399b39d3ad8514fd30c3a8b17 Mon Sep 17 00:00:00 2001 From: Connor Monahan Date: Mon, 6 Jun 2016 21:41:04 -0400 Subject: [PATCH 30/36] Fix build error --- .../main/java/com/tommytony/war/job/RestoreYmlWarzonesJob.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/war/src/main/java/com/tommytony/war/job/RestoreYmlWarzonesJob.java b/war/src/main/java/com/tommytony/war/job/RestoreYmlWarzonesJob.java index 7848976..ef8fd07 100644 --- a/war/src/main/java/com/tommytony/war/job/RestoreYmlWarzonesJob.java +++ b/war/src/main/java/com/tommytony/war/job/RestoreYmlWarzonesJob.java @@ -74,7 +74,7 @@ public class RestoreYmlWarzonesJob implements Runnable { } plugins.addPlotter(new PlotterEnabled("War")); // of course metrics.start(); - } catch (RuntimeException ignored) { + } catch (Exception ignored) { } } } From 82741751cfc0de460f5433ef3b7359cc220bde2d Mon Sep 17 00:00:00 2001 From: Connor Monahan Date: Mon, 6 Jun 2016 23:42:24 -0400 Subject: [PATCH 31/36] Update mcstats version Fixes errors finally --- war/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/war/pom.xml b/war/pom.xml index 2182c83..acb0459 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -32,8 +32,8 @@ http://maven.sk89q.com/repo/ - mcstats.releases - http://repo.mcstats.org/content/repositories/releases/ + mcstats + http://repo.mcstats.org/content/repositories/public/ vault-repo @@ -141,7 +141,7 @@ org.mcstats.bukkit metrics - R7 + R8-SNAPSHOT compile From dc4de5f6a572eb4c099968f80c46c556c9e6357a Mon Sep 17 00:00:00 2001 From: Connor Monahan Date: Wed, 8 Jun 2016 00:25:36 -0400 Subject: [PATCH 32/36] Fix lifepool message at incorrect times --- war/src/main/java/com/tommytony/war/Warzone.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/war/src/main/java/com/tommytony/war/Warzone.java b/war/src/main/java/com/tommytony/war/Warzone.java index a85530f..43758c7 100644 --- a/war/src/main/java/com/tommytony/war/Warzone.java +++ b/war/src/main/java/com/tommytony/war/Warzone.java @@ -1124,7 +1124,7 @@ public class Warzone { this.dropAllStolenObjects(player, false); playerTeam.setRemainingLives(playerTeam.getRemainingLifes() - 1); // Lifepool empty warning - if (playerTeam.getRemainingLifes() - 1 == 0) { + if (playerTeam.getRemainingLifes() == 0) { this.broadcast("zone.lifepool.empty", playerTeam.getName()); } } From aa41a11dafe8458876c99674c8ca47f917a0434d Mon Sep 17 00:00:00 2001 From: Connor Monahan Date: Wed, 8 Jun 2016 02:27:35 -0400 Subject: [PATCH 33/36] Update localizations --- .../main/resources/messages_ar_SA.properties | 133 ++++++++++++ .../main/resources/messages_cs_CZ.properties | 19 ++ war/src/main/resources/messages_da.properties | 133 ++++++++++++ war/src/main/resources/messages_de.properties | 12 +- war/src/main/resources/messages_es.properties | 26 ++- .../main/resources/messages_et_EE.properties | 133 ++++++++++++ war/src/main/resources/messages_fi.properties | 133 ++++++++++++ war/src/main/resources/messages_fr.properties | 192 +++++++++--------- war/src/main/resources/messages_fy.properties | 65 ++++++ war/src/main/resources/messages_he.properties | 3 + war/src/main/resources/messages_hu.properties | 129 +++++++++++- .../main/resources/messages_id_ID.properties | 133 ++++++++++++ war/src/main/resources/messages_it.properties | 114 +++++++++++ .../main/resources/messages_ko_KR.properties | 106 +++++----- .../main/resources/messages_lv_LV.properties | 11 + war/src/main/resources/messages_nl.properties | 133 ++++++++++++ war/src/main/resources/messages_no.properties | 12 +- war/src/main/resources/messages_pl.properties | 10 +- .../main/resources/messages_pt_BR.properties | 107 +++++++++- war/src/main/resources/messages_ru.properties | 34 ++-- .../main/resources/messages_sk_SK.properties | 4 + .../main/resources/messages_sv_SE.properties | 83 ++++++++ .../main/resources/messages_th_TH.properties | 133 ++++++++++++ .../main/resources/messages_tr_TR.properties | 6 + war/src/main/resources/messages_uk.properties | 13 ++ .../main/resources/messages_zh_HK.properties | 3 + 26 files changed, 1685 insertions(+), 195 deletions(-) create mode 100644 war/src/main/resources/messages_ar_SA.properties create mode 100644 war/src/main/resources/messages_cs_CZ.properties create mode 100644 war/src/main/resources/messages_da.properties create mode 100644 war/src/main/resources/messages_et_EE.properties create mode 100644 war/src/main/resources/messages_fi.properties create mode 100644 war/src/main/resources/messages_fy.properties create mode 100644 war/src/main/resources/messages_he.properties create mode 100644 war/src/main/resources/messages_id_ID.properties create mode 100644 war/src/main/resources/messages_it.properties create mode 100644 war/src/main/resources/messages_lv_LV.properties create mode 100644 war/src/main/resources/messages_nl.properties create mode 100644 war/src/main/resources/messages_sk_SK.properties create mode 100644 war/src/main/resources/messages_sv_SE.properties create mode 100644 war/src/main/resources/messages_th_TH.properties create mode 100644 war/src/main/resources/messages_tr_TR.properties create mode 100644 war/src/main/resources/messages_uk.properties create mode 100644 war/src/main/resources/messages_zh_HK.properties diff --git a/war/src/main/resources/messages_ar_SA.properties b/war/src/main/resources/messages_ar_SA.properties new file mode 100644 index 0000000..e36248d --- /dev/null +++ b/war/src/main/resources/messages_ar_SA.properties @@ -0,0 +1,133 @@ +# Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) +build.denied.location = Ma T8dr Tbny Hna +build.denied.outside = Bs T8dr Tbny Gwa WarZones +build.denied.teamblock = Ymknk F86 Ast3mal Blockat Fre8k l2lt8a6 Almouments +build.denied.zone.break = Blockat Warzone Ma Ttksr +build.denied.zone.multteam = A9ln 3ndk {0} Block +build.denied.zone.outside = Ma T8dr Tksr 3shan Ant Ma Tl3b +build.denied.zone.place = Ma T8dr T76 Blockat Fe WarZone +build.denied.zone.type = Ma T8dr T3dl 3la H4a Al No3 +command.console = Ma T8dr Tswe H4a 3shank Mo Fe Al Game +command.disabled = Ma T8dr Tktb Alla (/Leave) w Ant Tl3b +command.tp.init = Alrja2 Ant9''ar {0} Thwany 8bl Ant8al. A4a Mshet Aw 9''rbk A7d By36l Ant8al. +command.tp.moved = Al Ant8al M36l 3shank Tmshy. +command.tp.damaged = Al Ant8al M36l 3shan Al 9''rb +command.tp.success = L8d Tm N8lk. Shkrn l 9brk +drop.bomb.broadcast = \u200e{0}\u200e 6a7t, \u200e{1}\u200e Al 8nblh! +drop.bomb.disabled = Ma T8dr Trmy Shy w Ant Ma54 8nblh. Wsh 8a3d Tswe?! Ahrb l Spawn Al3do! +drop.cake.broadcast = {0} 6a7t , {1} Al Cake! +drop.cake.disabled = Ma T8dr Trmy Shy w Ant Ma54 Al Cake. Wsh 8a3d Tswe?! Ahrb! +drop.flag.broadcast = {0} 6a7 , {1} Al 3lm! +drop.flag.disabled = Ma T8dr Trmy Items w Ant Ma54 Al 3lm. Wsh 8a3d Tswe?! Ahrb! +drop.item.border = ant mat8dr trmy items fe alzone +drop.item.disabled = Ma T8dr Trmy H4a Fe WarZone. +drop.item.spawn = Ant Ma T8dr Trmy w Ant Fe Spawn. +drop.team = Ant Ma T8dr Trmy {0} Blocks. +drop.wand = Ant Rmet Al Zone {0} Al 39a +join.aarequired = Al Warzone Y6lb Mnk D5ol Tl8a2y l Fre8\nAlrja2 Ad5l Ay Bwabh +join.broadcast = {0} D5l Team {1} +join.disabled = H4a Al WarZone M36l +join.full.all = Kl Al Teams Full +join.full.single = Fre8 {0} H4a Full. +join.inventorystored = .Al Inventory 78k Fe Al M5zn 7ta T6l3 /War Leave. +join.permission.all = Ma 3ndk 9la7yat l Ay Teams Fe H4e WarZone. +join.permission.single = Ma 3ndk 9la7yat Td5l Team {0} +join.progress = Ma T8dr Td5l Al7rb Bd2t Fe H4e Zone. +join.selfteam = mat8dr td5l alteam 78k +join.team404 = alteam 3''er mojod jrb aktb/ teams tshof 8a2mh alteams +leave.broadcast = {0} 6l3 mn alzone. +leave.inventoryrestore = 78ybtk tm astrja3ha +pvp.death.drown = {0} 3''r8 +pvp.death.explosion = {0} tfjr +pvp.death.fall = {0}s86 wmat fj2h +pvp.death.fire = \u200e{0}\u200e a7tr8 llshwa2 +pvp.death.other = {0} mat +pvp.ff.disabled = hjomk fashl! hdfk m3k fe alfre8 +pvp.ff.enabled = alnyran al9de8h msh3''lh! alrja2 la to24e fre8k +pvp.kill.adjectives = ;;al8wy;al8atl;b5er;d8e8;alw7shy;6a8h +pvp.kill.bomb = \u200e{0}\u200eada ela \u200e{1}\u200e tfjer! +pvp.kill.format = {0}''s{1}{2}{3}{4} +pvp.kill.self = {0} ant7r +pvp.kill.verbs = An8tl;An8tl;An8tl;Antha;Abed;8tl;Ams7;Abed +pvp.kill.weapon.aim = Hdf +pvp.kill.weapon.bow = 8os +pvp.kill.weapon.hand = Yd +pvp.outside.permission = Mat8dr Thajm Ala3ben 5arj Alwarzones. +pvp.self.notplaying = Lazm Tkon Tl3b 3shan Thjm +pvp.self.respawn = Mat8dr Thjm W Ant Trsbn +pvp.self.spawn = Ma t8dr Thjm W Ant Fe Spawn +pvp.target.notplaying = Hdfk Ma Yl3b Fe Alwarzone +pvp.target.otherzone = Hdfk Y3b Fe Warzone Thany. +pvp.target.respawn = Hdfk 7alya Yrsbn! +pvp.target.spawn = Hdfk Fe Alspawn! +sign.lobby.autoassign = Warzone\u00a0\n{0}\u00a0\nD5ol Tl8a2y -\u00a0\nAssign Gate. +sign.lobby.pick = Warzone\u00a0\n{0}\u00a0\n\u00a0 +sign.lobby.warhub = \n\n\nTo War hub\n +sign.team.limited = Fre8 \u200e{0}\u200e\n\u200e{1}\u200e/\u200e{2}\u200e La3ben\n\u200e{3}\u200e/\u200e{4}\u200e N8a6\n\u200e{5}\u200e 7yah +sign.team.unlimited = fre8 {0}\u00a0\n{1}/{2} la3ben\n{3}/{4} n8a6\n7yah la nha2yh +sign.warhub = War hub\u00a0\n(/warhub)\u00a0\na5tar al3bh +sign.warzone = Warzone\u00a0\n{0}\u00a0\n{1}/{2} la3ben\n{3} afr8h +team.chat.enable = Chat Al Fre8 Msh3''l. Byst8bl Rsayl Team 78k Bs. +team.chat.disable = Chat Al Fre8 M36l +use.anvil = mat8dr tst3ml anvil fe h4a alwarzone! +use.enchant = ma t8dr tst3ml 6awlh alt6wer fe h4a alwarzone! +use.ender = mat8dr tst3ml enderchst w ant tl3b fe warzone! +use.item.spawn = mat8dr tst3ml items w ant fe spawn +use.xpkillmeter = h4a al xpkillmeter ymkn a5tyar tsh3''elh +wand.toofar = hdf alblockh b3ed jda. +war.notadmin = mat8dr tswe h4a e4a ant mo admin fe war (permission war.admin). +war.notzm = mat8dr tswe h4a e4a ant mo warzone maker ( permssion war.zonemaker). +war.prefix = War> +war.title = War +warhub.none = mafyh warhub fe h4a alserver. jrb /zone aw /zone. +warhub.permission = ma3ndk 9la7yh al2nt8al ela war hub. +warhub.teleport = ahla bk fe WarHub. a5tr l3btk +zone.airstrike = {0} d3a fy 9''rbh jwyh ! +zone.battle.end = alm3krh antht. fre8 {0} 5sr: {1} mat w lm ykn 7yah trkt lhm +zone.battle.newscores = n8a6 jdedh - {0} +zone.battle.next = al7rb antht . a3adh alwarzone {0} ... +zone.battle.reset = stbda alm3rh aljdedh 8rabn. a3adh alwarzone... +zone.battle.resetprogress = al23adh fe t8dm: {0}%,{1}thwany... +zone.battle.resetcomplete = Al WarZone Bt3ed B3d {0} Thwany. Mbarat Gdedh Btbd2. +zone.bomb.broadcast = \u200e{0}\u200e fjr bdayh fre8 {1}. fre8 {2} n86h wa7dh. +zone.cake.broadcast = \u200e{0}\u200e cake astwlt \u200e{1}\u200e. fre8 \u200e{2}\u200e n86h wa7dh w 7yah jdedh +zone.flagcapture.broadcast = \u200e{0}\u200e fjr bdayh fre8 {1}. fre8 {2} n86h wa7dh. +zone.flagreturn.deadlock = mat8dr tstwle 3lm al3do 7ta ytm arja3 3lm fre8k +zone.flagreturn.flag = yjb an tstwle 3la 3lm 3dok ela 3lm fre8k. +zone.flagreturn.spawn = yjb 3lek an tstwle 3la 3lm 3dok ela bdayh fre8k +zone.leavenotice = ast3ml /war leave 3shan t6l3 mn alzone +zone.lifepool.empty = 7yat alfre8 \u200e{0}\u200e 5l9t . moth w7dh w y5sron al7rb +zone.loadout.equip = mjhz \u200e{0}\u200e loadout ( tsll lld5ol ) +zone.loadout.reenter = mat8dr t3''er alloadout b3d 5rojk mn albdayh. +zone.monument.badblock = yjb 3lek alt8a6 al monument m3 block al9of 78 fre8k\n54 wa7d mn bdayh fre8k +zone.monument.capture = Monument {0} tm alt8a6ha mn alfre8 {1}. +zone.monument.lose = fre8 \u200e{0}\u200e f8d alsy6rh 3la monument {1} +zone.monument.voodoo = ant tr89 tr9''e al monument''''s voodoo. ant ksbt {0} 8lob! +zone.noteamnotice = mat8dr tkon da5l alwarzone bdon fre8. +zone.score.board404 = alwarzone mo mf3l alscoreboard. +zone.score.empty = ant mat8dr ta54 score 7ta yd5l a7d alfre8 althany. +zone.spawn.minplayers = mat8dr ttrk alspawn 7ta hna al7d al2dna mn {0} ala3ben ma y8l 3n {1} fre8. +zone.spawn.timer = mat8dr ttrk alspawn 7ta {0} thanyh b3d alrespawn! +zone.steal.bomb.broadcast = {0} ldeh 8nblh {1}. +zone.steal.bomb.notice = ldyk 8nblh {0}. t9l ela spawn alfre8 althany lln8a6 . la tnlms mn a7d wla ant btnfjr! +zone.steal.bomb.prevent = mn3 {0} mn alw9wl ela alspawn 78k m3 al8nblh! +zone.steal.cake.broadcast = {0} ldyh cake {1}. +zone.steal.cake.notice = ldyk cake {0}.aw9l lfre8k lln8a6 wtjded 7yatk. +zone.steal.cake.prevent = mn3 {0} mn alw9l ela alspawn m3 alcake! +zone.steal.flag.broadcast = {0} sr8 3lm fre8 {1}. +zone.steal.flag.empty = mat8dr tsr8 3lm alfre8 {0} l2n mafy a7d da5l alfre8. +zone.steal.flag.notice = ldyk 3lm alfre8 {0} . aw9l llspawn fre8k aw al3lm 3shan tlt86h! +zone.steal.flag.prevent = mn3 {0} mn alw9l ela spawn alfre8 {1} aw al3lm +zone.stealextra.bomb = ant t8dr bs tsr8 8nblh w7dh fe w8t wa7d! +zone.stealextra.cake = ant t8dr bs tsr8 cake wa7d fe w8t wa7d! +zone.stealextra.flag = ant bs t8dr tsr8 3lm wa7d fe w8t wa7d! +zone.stealextra.other = ant bs t8dr tsr8 shy wa7d fe w8t wa7d! +zone.teaminfo.format = {0}: {1} n8a6, {2}\\{3} 7yah mtb8yh. {4} +zone.teaminfo.none = La Shy2 +zone.teaminfo.prefix = Al2fr8h: +zone.teleport = Ahln Bk Fe WarZone {0}. +zone.warp.permission = Ma 3ndk 9la7yat L Ant8al l WarZone +zone.zone404 = WarZone Mo Mwgodh. +zone.zoneinfo.format = {0}: {1} Afr8h, {2} L3ebh +zone.zoneinfo.prefix = Warzones: +zone.zoneinfo.teleport = Ast3ml /Zone 3shan Tro7 l WarZone diff --git a/war/src/main/resources/messages_cs_CZ.properties b/war/src/main/resources/messages_cs_CZ.properties new file mode 100644 index 0000000..37ed81c --- /dev/null +++ b/war/src/main/resources/messages_cs_CZ.properties @@ -0,0 +1,19 @@ +# Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) +build.denied.location = Zde nem\u016f\u017ee\u0161 stav\u011bt. +build.denied.outside = M\u016f\u017ee\u0161 stav\u011bt pouze v bitevn\u00edch z\u00f3n\u00e1ch. +build.denied.teamblock = M\u016f\u017ee\u0161 pou\u017e\u00edvat pouze bloky tv\u00e9ho t\u00fdmu k zabr\u00e1n\u00ed monument\u016f. +build.denied.zone.break = Bloky v bitevn\u00ed z\u00f3n\u011b jsou nezni\u010diteln\u00e9! +build.denied.zone.multteam = Blok {0} u\u017e m\u00e1\u0161. +build.denied.zone.outside = Nem\u016f\u017ee\u0161 zni\u010dit bitevn\u00ed z\u00f3nu,ve kter\u00e9 nehraje\u0161. +build.denied.zone.place = Nem\u016f\u017ee\u0161 pokl\u00e1dat bloky v t\u00e9to bitevn\u00ed z\u00f3n\u011b. +build.denied.zone.type = Nem\u016f\u017ee\u0161 upravovat tento typ blok\u016f! +command.console = Toto nem\u016f\u017ee\u0161 pokud nejsi ve h\u0159e. +command.disabled = M\u016f\u017ee\u0161 pou\u017e\u00edvat pouze War p\u0159\u00edkazy (nap\u0159. /leave) kdy\u017e hraje\u0161. +drop.bomb.broadcast = {0} ztratil {1} bombu! +drop.bomb.disabled = Nem\u016f\u017ee\u0161 pokl\u00e1dat p\u0159edm\u011bty kdy\u017e krade\u0161 bombu! Co d\u011bl\u00e1\u0161?! B\u011b\u017e na nep\u0159\u00e1telsk\u00fd spawn! +drop.cake.broadcast = {0} ztratil {1} dort! +drop.cake.disabled = Nem\u016f\u017ee\u0161 pokl\u00e1dat p\u0159edm\u011bty kdy\u017e krade\u0161 dort! Co d\u011bl\u00e1\u0161?! B\u011b\u017e! +drop.flag.broadcast = {0} ztratil {1} vlajku! +drop.flag.disabled = Nem\u016f\u017ee\u0161 pokl\u00e1dat p\u0159edm\u011bty kdy\u017e krade\u0161 vlajku. Co d\u011bl\u00e1\u0161?! B\u011b\u017e! +drop.item.border = Nem\u016f\u017ee\u0161 pokl\u00e1dat p\u0159edm\u011bty bl\u00edzko hranice z\u00f3ny. +drop.item.disabled = Nem\u016f\u017ee\u0161 pokl\u00e1dat p\u0159edm\u011bty v t\u00e9to bitevn\u00ed z\u00f3n\u011b. diff --git a/war/src/main/resources/messages_da.properties b/war/src/main/resources/messages_da.properties new file mode 100644 index 0000000..615ebe9 --- /dev/null +++ b/war/src/main/resources/messages_da.properties @@ -0,0 +1,133 @@ +# Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) +build.denied.location = Du kan ikke bygge her. +build.denied.outside = Du kan kun bygge inde i krigszoner. +build.denied.teamblock = Du kan kun bruge dit holds blokke til at overtage monumenter. +build.denied.zone.break = Blokkenede i denne krigszone er ubrydelige! +build.denied.zone.multteam = You har allerede en {0} blok. +build.denied.zone.outside = Du kan ikke \u00f8del\u00e6gge en krigszone du ikke spiller i. +build.denied.zone.place = Du kan ikke placere bloks i denne krigszone. +build.denied.zone.type = Du kan ikke \u00e6ndre denne type blok. +command.console = Du kan ikke g\u00f8re dette hvis du ikke er inde i et spil. +command.disabled = Du kan kun bruge War kommandoer (f.eks. /leave) n\u00e5r du spiller. +command.tp.init = V\u00e6r venlig at vente {0} sekunder f\u00f8r teleportation. Bev\u00e6gelse eller skade vil afbryde timeren. +command.tp.moved = Teleportation afbrudt pga. bev\u00e6gelse. +command.tp.damaged = Teleportation afbrudt pga. skade. +command.tp.success = Du er blevet teleporteret. Tak for din t\u00e5lmodighed. +drop.bomb.broadcast = {0} tabte den {1} bombe! +drop.bomb.disabled = Du kan ikke smide ting n\u00e5r du er ved at stj\u00e6le en bombe. Hvad laver du?! L\u00f8b mod din fjendes spawn! +drop.cake.broadcast = {0} tabte den {1} kage! +drop.cake.disabled = Du kan ikke smide ting n\u00e5r du er ved at stj\u00e6le en kage. Hvad laver du?! L\u00f8b! +drop.flag.broadcast = {0} tabte den {1} flag! +drop.flag.disabled = Du kan ikke smide ting n\u00e5r du er ved at stj\u00e6le et flag. Hvad laver du?! L\u00f8b! +drop.item.border = Du kan ikke smide ting n\u00e6r zone gr\u00e6nsen. +drop.item.disabled = Du kan ikke smide ting i denne krigszone. +drop.item.spawn = Du kan ikke smide ting mens du stadig er i spawn. +drop.team = Du kan ikke smide {0} blokke. +drop.wand = Du kan tabte zone {0} stav. +join.aarequired = Denne krigszone kr\u00e6ver at du automatisk bliver tildelt et hold.\nV\u00e6r venlig og g\u00e5 ind i autotildelings indgangen istedet. +join.broadcast = {0} sluttede sig til hold {1}. +join.disabled = Denne krigszone er deaktiveret. +join.full.all = Alle hold er fulde. +join.full.single = Hold {0} er fuld. +join.inventorystored = Din beholdning er i et lager indtil du forlader spillet med /war leave. +join.permission.all = Du har ikke tilladelse til nogen af de tilg\u00e6ngelige hold i denne krigszone. +join.permission.single = Du har ikke tilladelse til at tilslutte dig til team {0}. +join.progress = Du kan ikke tilslutte dig en kamp der er i gang i denne zone. +join.selfteam = Du kan ikke tilslutte dig dit eget hold. +join.team404 = Det hold blev ikke fundet. Pr\u00f8v at bruge /teams for en liste. +leave.broadcast = {0} forladte zonen. +leave.inventoryrestore = Din beholdning er i gang med at blive genoprettet. +pvp.death.drown = {0} druknede. +pvp.death.explosion = {0} eksploderede. +pvp.death.fall = {0} faldt til en alt for tidlige d\u00f8d. +pvp.death.fire = {0} br\u00e6ndte til aske. +pvp.death.other = {0} d\u00f8de. +pvp.ff.disabled = Dit angreb missede! Dit m\u00e5l er p\u00e5 dit eget hold. +pvp.ff.enabled = Egenbeskydning er aktiveret! V\u00e6r venlig ikke at dr\u00e6be dine holdkammerater. +pvp.kill.adjectives = ;;m\u00e6gtige;d\u00f8dbringende;kvalitets;pr\u00e6cise;brutale;kraftfulde +pvp.kill.bomb = {0} fik {1} til at springe i luften! +pvp.kill.format = {0}s {1} {2} {3} {4} +pvp.kill.self = {0} begik selvmord +pvp.kill.verbs = dr\u00e6bte;aflivede;dr\u00e6bte;f\u00e6rdigjorde;tilintetgjorde,myrdede;udslettede;udryddede +pvp.kill.weapon.aim = sigt +pvp.kill.weapon.bow = bue +pvp.kill.weapon.hand = h\u00e5nd +pvp.outside.permission = Du kan ikke angribe spillere udenfor kriszoner. +pvp.self.notplaying = Du bliver n\u00f8d til at spille inde i krigszonen for at kunne angribe. +pvp.self.respawn = Du kan ikke angribe spillere mens du genopst\u00e5r! +pvp.self.spawn = Du kan ikke angribe mens du stadig er i spawn! +pvp.target.notplaying = Dit m\u00e5l spiller ikke i krigszonen. +pvp.target.otherzone = Dit m\u00e5l spiller i en anden krigszone. +pvp.target.respawn = Dit m\u00e5l er i gang med at genopst\u00e5! +pvp.target.spawn = Dit m\u00e5l er stadig i spawn! +sign.lobby.autoassign = Krigszone\n{0}\nG\u00e5 ind i til-\ndelingsporten. +sign.lobby.pick = Krigszone\n{0}\n\nV\u00e6lg dit hold. +sign.lobby.warhub = \nTil War samlingspunkt\n +sign.team.limited = Hold {0}\n{1}/{2} spillere\n{3}/{4} pts\n{5} liv tilbage +sign.team.unlimited = Hold {0}\n{1}/{2} spillere\n{3}/{4} pts\nuendelig liv +sign.warhub = War samlingspunkt\n(/warhub)\nV\u00e6lg din\nkamp! +sign.warzone = Krigszone\n{0}\n{1}/{2} spillere\n{3} hold +team.chat.enable = Hold chat sl\u00e5et til. Dine normale chat beskeder vil kun blive modtaget af folk fra dit hold. +team.chat.disable = Hold chat sl\u00e5et fra. +use.anvil = Du kan ikke bruge ambolte i denne krigszone! +use.enchant = Du kan ikke bruge fortrylleses borde i denne krigszone! +use.ender = Du kan ikke bruge ender kister n\u00e5r du spiller i en krigszone! +use.item.spawn = Du kan ikke bruge ting mens du stadig er i spawn. +use.xpkillmeter = Dette skyldes, at xpkillmetereret punktet er aktiveret. +wand.toofar = Din valgte blok er for langt v\u00e6k. +war.notadmin = Du kan g\u00f8re dette hvis du ikke er en War admin (permission war.admin). +war.notzm = Du kan ikke g\u00f8re dette hvis du ikke er en krigszone bygger (permission war.zonemaker). +war.prefix = War> +war.title = War +warhub.none = Intet war samlingssted p\u00e5 denne War server. Pr\u00f8v /zones og /zone. +warhub.permission = Du har ikke tilladelse til at teleportere til War samlingstedet. +warhub.teleport = Velkommen til War samlingsstedet. V\u00e6lg din kamp! +zone.airstrike = {0} kaldte ind et luftangreb! +zone.battle.end = Kampen er ovre. Hold {0} tabte: {1} d\u00f8de og der var ikke flere live tilbage i deres livs p\u00f8l. +zone.battle.newscores = Nye scorer - {0} +zone.battle.next = Kampen blev afbrudt. Nulstiller krigszone {0}... +zone.battle.reset = En ny kamp vil begynde snart. Nulstiller krigszone... +zone.battle.resetprogress = Nulstillings fremskridt: {0}%, {1} sekunder... +zone.battle.resetcomplete = Krigszone nulstillet p\u00e5 {0} sekunder. En ny kamp begynder. +zone.bomb.broadcast = {0} spr\u00e6ngte hold {1}s spawn i luften. Hold {2} scorer \u00e9t point. +zone.cake.broadcast = {0} erobrede kage {1}. Hold {2} scorer \u00e9t point og f\u00e5r en fuld livs p\u00f8l. +zone.flagcapture.broadcast = {0} erobrede hold {1}s flag. Hold {2} scorer \u00e9t point. +zone.flagreturn.deadlock = Du kan ikke erobre fjendens flag f\u00f8r dit eget flag er returneret. +zone.flagreturn.flag = Du bliver n\u00f8d til at erobre fjendes flag p\u00e5 dit holds flag. +zone.flagreturn.spawn = Du bliver n\u00f8d til at erobre fjendes flag p\u00e5 dit holds spawn. +zone.leavenotice = Brug /war leave til at forlade zonen. +zone.lifepool.empty = Hold {0}s livs p\u00f8l et tom. \u00c9t til d\u00f8dsfald og de taber kampen! +zone.loadout.equip = Rustet med {0} udstyret (snig for at skifte). +zone.loadout.reenter = Kan ikke \u00e6ndre udstyr efter at have forladt spawn. +zone.monument.badblock = Du bliver n\u00f8d til at erobre et monument med en blok af dit holds uld farve. F\u00e5 en fra dit holds spawn. +zone.monument.capture = Monument {0} blev erobret af hold {1}. +zone.monument.lose = Hold {0} tabte kontrollen af monument {1}. +zone.monument.voodoo = Din dans tilfredsstiller monuments voodoo. Du f\u00e5r {0} hjerte(r)! +zone.noteamnotice = Du kan ikke v\u00e6re inde i en krigszone uden et hold. +zone.score.board404 = Denne krigszone har ikke en resultattavle. +zone.score.empty = Du kan ikke score indtil mindst \u00e9n spiller tilslutter sig et andet hold. +zone.spawn.minplayers = Du kan ikke forlade spawn indtil der er et minimum af {0} spiller(e) p\u00e5 mindst {1} hold. +zone.spawn.timer = Du kan ikke forlade spawn for {0} sekund(er) efter genopstandelse! +zone.steal.bomb.broadcast = {0} har bombe {1}. +zone.steal.bomb.notice = Du har bombe {0}. N\u00e5 et andet holds spawn for at score. Lad v\u00e6re med at r\u00f8re andre ellers eksplodere du! +zone.steal.bomb.prevent = Forhindre {0} i at n\u00e5 dit spawn med bomben! +zone.steal.cake.broadcast = {0} har kage {1}. +zone.steal.cake.notice = You har kage {0}. N\u00e5 dit holds spawn for at score og genopfylde din livs p\u00f8l. +zone.steal.cake.prevent = Forhindre {0} i at n\u00e5 sit spawn med kagen! +zone.steal.flag.broadcast = {0} stjal hold {1}s flag. +zone.steal.flag.empty = Du kan ikke stj\u00e6le hold {0}s flag siden ingen spillere er p\u00e5 det hold. +zone.steal.flag.notice = Du har hold {0}s flag. N\u00e5 dit holds spawn eller flag for at erobre det! +zone.steal.flag.prevent = Forhindre {0} i at n\u00e5 hold{1}s spawn eller flag. +zone.stealextra.bomb = Du kan kun stj\u00e6le \u00e9n bombe af gangen! +zone.stealextra.cake = Du kan kun stj\u00e6le \u00e9n kage af gangen! +zone.stealextra.flag = Du kan kun stj\u00e6le \u00e9t flag af gangen! +zone.stealextra.other = Du kan kun stj\u00e6le \u00e9n ting af gangen! +zone.teaminfo.format = {0}: {1} point, {2}/{3} liv tilbage. {4} +zone.teaminfo.none = intet +zone.teaminfo.prefix = Hold: +zone.teleport = Velkommen til krigszone {0}. +zone.warp.permission = Du har ikke tilladelse til at teleportere til krigszonen. +zone.zone404 = Krigszonen blev ikke fundet. +zone.zoneinfo.format = {0}: {1} hold, {2} spillere +zone.zoneinfo.prefix = Krigszoner: +zone.zoneinfo.teleport = Brug /zone for at teleportere til en krigszone. diff --git a/war/src/main/resources/messages_de.properties b/war/src/main/resources/messages_de.properties index 22cd69e..dd80c03 100644 --- a/war/src/main/resources/messages_de.properties +++ b/war/src/main/resources/messages_de.properties @@ -1,14 +1,18 @@ # Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) build.denied.location = Du kannst hier nicht bauen. -build.denied.outside = Du kannst nur inerhalb einer Warzone bauen. -build.denied.teamblock = Du kannst nur dein Team-Block nehmen, um ein Monument einzunehmen. +build.denied.outside = Du kannst nur innerhalb einer Warzone Arena bauen. +build.denied.teamblock = Du kannst nur dein Team-Block nehmen, um ein Monument zu \u00fcbernehmen. build.denied.zone.break = Die Bl\u00f6cke in dieser Warzone sind unzerst\u00f6rbar. build.denied.zone.multteam = Du hast schon einen {0} Block. -build.denied.zone.outside = Du kannst nichts in einer Warzone zerst\u00f6ren,wenn du dich nicht in ihr befindest. +build.denied.zone.outside = Du kannst nichts in einer Warzone zerst\u00f6ren, wenn du dich nicht in ihr befindest. build.denied.zone.place = Du kannst in dieser Warzone keine Bl\u00f6cke setzen. build.denied.zone.type = Du kannst keine Bl\u00f6cke dieses Typs zerst\u00f6ren. command.console = Dieser Command ist leider nicht von der Konsole aus nutzbar -command.disabled = Du kannst nur War Kommandos (Z.Bsp. /leave) ausf\u00fchren, w\u00e4hrend du spielst! +command.disabled = Du kannst nur War Kommandos (bsp /leave) ausf\u00fchren, w\u00e4hrend du spielst! +command.tp.init = Bitte warte {0} Sekunden. Schaden oder Bewegung bricht die Teleportierung ab. +command.tp.moved = Teleportation wegen Bewegung abgebrochen. +command.tp.damaged = Bewegung wegen Schaden abgebrochen +command.tp.success = Du wirst teleportiert. Vielen Dank f\u00fcr deine Geduld. drop.bomb.broadcast = {0} hat die {1} Bombe fallen gelassen. drop.bomb.disabled = Du kannst keine Items droppen w\u00e4hrend du die Bombe stielst.\nWas machst du?! Renne zu dem Spawn von deinen Feinden! drop.cake.broadcast = {0} hat den {1} Kuchen fallen gelassen. diff --git a/war/src/main/resources/messages_es.properties b/war/src/main/resources/messages_es.properties index df7fdb6..101f3ad 100644 --- a/war/src/main/resources/messages_es.properties +++ b/war/src/main/resources/messages_es.properties @@ -1,14 +1,18 @@ # Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) -build.denied.location = No puedes construir aqui! -build.denied.outside = Solo puedes contruir en la arena. +build.denied.location = No puedes construir aqui. +build.denied.outside = Solo puedes construir dentro de las arenas. build.denied.teamblock = Solo puedes usar los bloques de tu equipo para capturar los monumentos! -build.denied.zone.break = Estos bloques tienen las propiedades de la Bedrock! -build.denied.zone.multteam = Tienes {0} bloques +build.denied.zone.break = No puedes romper bloques en esta arena. +build.denied.zone.multteam = Ya tienes {0} bloques build.denied.zone.outside = No puedes destruir arenas en las que no estas jugando. -build.denied.zone.place = No puedes modificar estos bloques! +build.denied.zone.place = No puedes poner bloques dentro de esta arena. build.denied.zone.type = No puedes modificar estos bloques! command.console = No puedes usar este comando si no estas en partida. command.disabled = Solo puedes usar comandos de guerra si estas jugando (Ej: /leave). +command.tp.init = Por favor espera {0} segundos antes de la teletransportaci\u00f3n. Cualquier movimiento o da\u00f1o cancelar\u00e1 la cuenta atr\u00e1s +command.tp.moved = Teletransportaci\u00f3n cancelada debido a que te has movido. +command.tp.damaged = Teletransportaci\u00f3n cancelada debido a que has sido atacado. +command.tp.success = Te has teletransportado. Gracias por tu paciencia. drop.bomb.broadcast = {0} ha soltado la {1} bomba! drop.bomb.disabled = No puedes tirar objetos mientras tienes la bomba! drop.cake.broadcast = {0} ha soltado la {1} tarta! @@ -73,12 +77,12 @@ use.xpkillmeter = La opcion xpkillmeter esta habilitado. wand.toofar = Tu bloque objetivo esta muy lejos. war.notadmin = No puedes hacer esto si no eres un War Admin (permiso: war.admin). war.notzm = No puedes hacer esto si no eres un editor de la zona de batalla (permiso: war.zonemaker). -war.prefix = PvP> -war.title = PvP -warhub.none = No hay war central en este servidor War. Fijate las zonas con /zones o /zone. -warhub.permission = No tienes permisos para teletransportarte para el War central. -warhub.teleport = Bienvenido a la War central. Elige tu batalla! -zone.airstrike = {0} fue llamada en un ataque aereo! +war.prefix = Guerra> +war.title = Guerra +warhub.none = No hay un War Hub en este servidor War. Fijate las zonas con /zones o /zone. +warhub.permission = No tienes permisos para teletransportarte hacia el War Hub.. +warhub.teleport = Bienvenido al War Hub. Elige tu batalla! +zone.airstrike = {0} ha llamado un ataque aereo! zone.battle.end = La batalla se ha acabado. El equipo {0} perdio: {1} murio y no quedan mas vidas restantes en su equipo. zone.battle.newscores = Nuevas puntuaciones - {0} zone.battle.next = La batalla ha sido interrumpida. Reiniciando zona de batalla {0}. diff --git a/war/src/main/resources/messages_et_EE.properties b/war/src/main/resources/messages_et_EE.properties new file mode 100644 index 0000000..1bc7f2e --- /dev/null +++ b/war/src/main/resources/messages_et_EE.properties @@ -0,0 +1,133 @@ +# Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) +build.denied.location = Sa ei saa ehitada siin. +build.denied.outside = Sa saad ehitada ainult s\u00f5jatsooni sees. +build.denied.teamblock = Sa saad kasutada ainult oma tiimi plokke, et p\u00fc\u00fcda monumente. +build.denied.zone.break = Plokid selles s\u00f5jatsoonis on purunematud! +build.denied.zone.multteam = Sul juba on {0} plokk. +build.denied.zone.outside = Sa ei saa l\u00f5hkuda s\u00f5jatsoonis kuna sa ei m\u00e4ngi selles. +build.denied.zone.place = Sa ei saa asetada plokke selles s\u00f5jatsoonis. +build.denied.zone.type = Sa ei saa muuta seda t\u00fc\u00fcpi plokki. +command.console = Sa ei saa teha seda kui sa pole m\u00e4ngus. +command.disabled = Sa saad kasutada ainult War k\u00e4sklusi (Nt /leave) kui sa m\u00e4ngid. +command.tp.init = Palun oota {0} sekundit ennem teleporteerumist. Liikumine v\u00f5i kahjustuse saamine peatab taimeri. +command.tp.moved = Teleporteertumine peatati liikumise t\u00f5ttu. +command.tp.damaged = Teleporteerumine peatati kahjustuse saamise t\u00f5ttu. +command.tp.success = Sa oled teleporteeritud. T\u00e4nan sinu kannatlikkuse eest. +drop.bomb.broadcast = {0} kukutas {1} pommi! +drop.bomb.disabled = Sa ei saa kukutada esemeid kui sa varastasid pommi. Mida sa teed?! Jookse oma vastase baasi! +drop.cake.broadcast = {0} kukutas {1} koogi! +drop.cake.disabled = Sa ei saa kukutada esemeid kui varastasid koogi. Mida sa teed?! Jookse! +drop.flag.broadcast = {0} kukutas {1} lipu! +drop.flag.disabled = Sa ei saa kukutada esemeid kui varastasid lipu. Mida sa teed?! Jookse! +drop.item.border = Sa ei saa kukutada esemeid tsooni piiri l\u00e4hedal. +drop.item.disabled = Sa ei saa kukutada esemeid selles s\u00f5jatsoonis. +drop.item.spawn = Sa ei saa kukutada esemeid kui sa oled veel alguspunktis. +drop.team = Sa ei saa kukutada {0} plokki. +drop.wand = Sa kukutasid tsooni {0} v\u00f5lukepi. +join.aarequired = See s\u00f5jatsoon n\u00f5uab, et sind saadetaks automaatselt meeskonda.\nPalun sisene automaatse suunaja v\u00e4ravasse. +join.broadcast = {0} liitus tiimiga {1}. +join.disabled = See s\u00f5jatsoon on keelatud. +join.full.all = K\u00f5ik tiimid on t\u00e4is. +join.full.single = Tiim {0} on t\u00e4is. +join.inventorystored = Sinu seljakott s\u00e4ilitati kuni sa lahkud /war leave. +join.permission.all = Sul ei ole \u00f5iguseid \u00fchelegi saadaval olevale tiimile selles s\u00f5jatsoonis. +join.permission.single = Sul ei ole \u00f5igusi, et liituda {0} tiimiga. +join.progress = Sa ei saa liituda kui s\u00f5da on pooleli. +join.selfteam = Sa ei saa liituda oma enda tiimiga. +join.team404 = Seda tiimi ei leitud. Proovi kasutada /teams ,et saada kogu nimekiri. +leave.broadcast = {0} lahkus tsoonist. +leave.inventoryrestore = Sinu seljakott taastati. +pvp.death.drown = {0} uppus +pvp.death.explosion = {0} plahvatas +pvp.death.fall = {0} kukkus surnuks +pvp.death.fire = {0} p\u00f5les \u00e4ra +pvp.death.other = {0} suri +pvp.ff.disabled = Sinu r\u00fcnnak kadus! Sihtm\u00e4rk on sinu tiimis. +pvp.ff.enabled = S\u00f5bra tapmine on lubatud! Palun, \u00e4ra tapa oma tiimi liikmeid. +pvp.kill.adjectives = ;;v\u00e4gev;surmav;korras;t\u00e4pne;j\u00f5hker;v\u00f5imas +pvp.kill.bomb = {0} tegi {1} plahvatuse. +pvp.kill.format = {0} {1} {2} {3} {4} +pvp.kill.self = {0} tegi enesetapu +pvp.kill.verbs = tapetud;tapetud;tapetud;l\u00f5petatud;h\u00e4vitatud;m\u00f5rvatud;h\u00e4vitatud;h\u00e4vitatud +pvp.kill.weapon.aim = siht +pvp.kill.weapon.bow = vibu +pvp.kill.weapon.hand = k\u00e4si +pvp.outside.permission = Sa ei saa r\u00fcnnata m\u00e4ngijaid v\u00e4ljaspool s\u00f5jatsooni. +pvp.self.notplaying = Sa pead m\u00e4ngima s\u00f5jatsoonisl, et r\u00fcnnata. +pvp.self.respawn = Sa ei saa r\u00fcnnata taass\u00fcndides! +pvp.self.spawn = Sa ei saa r\u00fcnnata kui oled endiselt alguspunktis! +pvp.target.notplaying = Sinu vastane ei m\u00e4ngi s\u00f5jatsoonis. +pvp.target.otherzone = Sinu vastane m\u00e4ngib teises s\u00f5jatsoonis. +pvp.target.respawn = Sinu vastane taass\u00fcnnib hetkel! +pvp.target.spawn = Sinu vastane on endiselt alguspunktis! +sign.lobby.autoassign = S\u00f5jatsoon\n{0}\nSisene autom.\nv\u00e4ravasse +sign.lobby.pick = S\u00f5jatsoon\n{0}\n\nVali tiim +sign.lobby.warhub = \nWar alguspunkt\n +sign.team.limited = Tiim {0}\n{1}/{2} m\u00e4ngijat\n{3}/{4} punkti\n{5} elu j\u00e4rel +sign.team.unlimited = Tiim {0}\n{1}/{2} m\u00e4ngijat\n{3}/{4} punkti\nL\u00f5pmatult elusi +sign.warhub = War alguspunkt\n(warhub)\nVali enda\ns\u00f5da! +sign.warzone = S\u00f5jatsoon\n{0}\n{1}/{2} m\u00e4ngijat\n{3} tiimi +team.chat.enable = Tiimi jutukas l\u00fclitati sisse. Sinu regulaarsed jutuka s\u00f5numeid n\u00e4eb ainult sinu tiim. +team.chat.disable = Tiimi jutukas l\u00fclitati v\u00e4lja. +use.anvil = Sa ei saa kasutada alaseid sellel s\u00f5jatsoonil! +use.enchant = Sa ei saa kasutada loitsumislauda sellel s\u00f5jatsoonil! +use.ender = Sa ei saa kasutada m\u00e4ngimise ajal l\u00f5pukirstu s\u00f5jatsoonis! +use.item.spawn = Sa ei saa kasutada esemeid kui oled alguspunktis. +use.xpkillmeter = See on seet\u00f5ttu, et kogemustasemete surmaindikaatori valik on lubatud. +wand.toofar = Sinu vastase plokk on liiga kaugel. +war.notadmin = Sa ei saa teha seda kui sa ei ole War administraator (\u00f5igus war.admin). +war.notzm = Sa ei saa teha seda kui sa ei ole s\u00f5jatsooni tegija (\u00f5igus war.zonemaker) +war.prefix = War> +war.title = War +warhub.none = Puuduvad War alguspunktid serveris. Proovi /zones ja /zone. +warhub.permission = Sul puuduvad \u00f5igused teleporteerumiseks War alguspuntki. +warhub.teleport = Tere tulemast War alguspunkti. Vali enda tiim! +zone.airstrike = {0} kutsus \u00f5hur\u00fcnnaku! +zone.battle.end = S\u00f5da on l\u00e4bi. Tiim {0} kaotas: {1} suri ja tema tiimil polnud enam elusi. +zone.battle.newscores = Uued skoorid - {0} +zone.battle.next = S\u00f5da on katkestatud. Taastatakse s\u00f5jatsoon {0}... +zone.battle.reset = Uus s\u00f5da algab varsti. Taastatakse s\u00f5jatsooni... +zone.battle.resetprogress = Taastamine k\u00e4ib: {0}%, {1} sekundit... +zone.battle.resetcomplete = Warzone l\u00e4hestatakse {0} sekundi p\u00e4rast. Uus v\u00f5itlus algab. +zone.bomb.broadcast = {0} lasi \u00f5hku tiimi {1} alguspunkti. Tiim {2} sai juurde \u00fche punkti. +zone.cake.broadcast = {0} varastas koogi {1}. Tiim {2} sai endale juurde \u00fche punkti ning nende k\u00f5ik elud taastati. +zone.flagcapture.broadcast = {0} varastas tiimi {1} lipu. Tiim {2} sai juurde \u00fche punkti. +zone.flagreturn.deadlock = Sa ei saa varastada vastase lippu ennem kui sinu tiimi lipp on tagastatud. +zone.flagreturn.flag = Sa pead tooma vastaste lipu oma lipu juurde. +zone.flagreturn.spawn = Sa pead tooma vastaste lipu oma alguskoha juurde. +zone.leavenotice = Kasuta /war leave ,et lahkuda tsoonist. +zone.lifepool.empty = Tiimi {0} elud on t\u00fchjad. 1 lisa surm ja nad kaotavad s\u00f5ja! +zone.loadout.equip = K\u00e4tte v\u00f5etud {0} v\u00e4ljalaadimine (hiili, et vahetada). +zone.loadout.reenter = V\u00e4ljalaadimist ei saa vahetada p\u00e4rast alguskohast v\u00e4ljumist. +zone.monument.badblock = Sa pead hankima kuju oma meeskonna v\u00e4rvi villaga +zone.monument.capture = Monument {0} varastati tiimi {1} poolt. +zone.monument.lose = Tiim {0} kaotas kontrolli monumendis {1}. +zone.monument.voodoo = Sinu tants rahuldab kuju voodoo''d. Sa said {0} s\u00fcdant! +zone.noteamnotice = Sa ei saa olla s\u00f5jatsooni sees kui sa ei ole \u00fcheski tiimis. +zone.score.board404 = Selles s\u00f5jatsoonis ei ole lubatud skooritabel. +zone.score.empty = Sa ei saa punkte kuni teise tiimi liitub m\u00f5ni m\u00e4ngija. +zone.spawn.minplayers = Sa ei saa lahkuda spawnist kuni on saavutatud miinumum arv {0} m\u00e4ngija(id) {1} tiimis(des) +zone.spawn.timer = Sa ei saa lahkuda spawnist {0} sekundit peale taass\u00fcndimist. +zone.steal.bomb.broadcast = {0} omab pommi {1}. +zone.steal.bomb.notice = Sul on pomm {0}. Proovi minna vastase tiimi alguspunkti. \u00c4ra puutu kedagi v\u00f5i sa plahvatad! +zone.steal.bomb.prevent = V\u00e4ldi {0} sattumist pommiga sinu tiimi alguspunkti. +zone.steal.cake.broadcast = {0} omab kooki {1}. +zone.steal.cake.notice = Sul on kook {0}. Mine oma tiimi alguspunkti, et saada \u00fcks punkt ja taastada oma elud. +zone.steal.cake.prevent = Vaata, et {0} ei j\u00f5uaks enda alguspunkti koogiga! +zone.steal.flag.broadcast = {0} varastas tiimi {1} lipu. +zone.steal.flag.empty = Sa ei saa varastada tiimi {0} lippu kuni pole \u00fchtegi m\u00e4ngijat selles tiimis. +zone.steal.flag.notice = Sul on tiimi {0} lipp. Mine oma tiimi alguspunkti v\u00f5i lipu varastamis punkti. +zone.steal.flag.prevent = Vaata, et {0} ei j\u00f5uaks meeskonna {1} alguspunkti v\u00f5i lipuni. +zone.stealextra.bomb = Sa saad varastada ainult \u00fche pommi korraga! +zone.stealextra.cake = Sa saad varastada ainult \u00fche koogi korraga! +zone.stealextra.flag = Sa saad varastada ainult \u00fche lipu korraga! +zone.stealextra.other = Sa saad varastada ainult \u00fche asja korraga! +zone.teaminfo.format = {0}: {1} punktid, {2}/{3} elu j\u00e4rgi. {4} +zone.teaminfo.none = puudub +zone.teaminfo.prefix = Tiimid: +zone.teleport = Tere tulemast s\u00f5jatsooni {0}. +zone.warp.permission = Sul ei ole \u00f5igusi, et teleporteeruda s\u00f5jatsooni. +zone.zone404 = S\u00f5jatsooni ei leitud. +zone.zoneinfo.format = {0}: {1} tiimid, {2} m\u00e4ngijad +zone.zoneinfo.prefix = S\u00f5jatsoonid: +zone.zoneinfo.teleport = Kasuta /zone ,et teleporteeruda s\u00f5jatsooni. diff --git a/war/src/main/resources/messages_fi.properties b/war/src/main/resources/messages_fi.properties new file mode 100644 index 0000000..841a29d --- /dev/null +++ b/war/src/main/resources/messages_fi.properties @@ -0,0 +1,133 @@ +# Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) +build.denied.location = Et voi rakentaa t\u00e4h\u00e4n. +build.denied.outside = Voit rakentaa vain Sotatantereen sis\u00e4ll\u00e4. +build.denied.teamblock = Voit k\u00e4ytt\u00e4\u00e4 vain joukkueesi kuutioita monumentin valloittamiseen. +build.denied.zone.break = T\u00e4m\u00e4n Sotatantereen kuutiot ovat tuhoutumattomia. +build.denied.zone.multteam = Sinulla on jo {0} kuutio. +build.denied.zone.outside = Et voi tuhota Sotatannerta, jos et pelaa siin\u00e4. +build.denied.zone.place = Et voi asettaa kuutioita t\u00e4ss\u00e4 Sotatantereessa. +build.denied.zone.type = Et voi muokata t\u00e4m\u00e4ntyyppisi\u00e4 kuutioita. +command.console = Et voi suorittaa t\u00e4t\u00e4 toimintoa ellet ole mukana peliss\u00e4. +command.disabled = Voit k\u00e4ytt\u00e4\u00e4 vain War-lis\u00e4osan komentoja (esim. /leave) pelatessasi. +command.tp.init = Odota {0} sekuntia ennen siirtoa. Liikkuminen tai vaurioituminen peruvat siirron. +command.tp.moved = Teleportaatio peruttu liikkumisen takia. +command.tp.damaged = Teleportaatio peruttu vaurioitumisen takia. +command.tp.success = Sinut on siirretty. Kiitos k\u00e4rsiv\u00e4llisyydest\u00e4si. +drop.bomb.broadcast = {0} menetti {1} pommin! +drop.bomb.disabled = Et voi pudottaa tavaroita varastaessasi pommia. Mit\u00e4 ihmett\u00e4 olet tekem\u00e4ss\u00e4?! Juokse vihollisjoukkueen tukikohtaan! +drop.cake.broadcast = {0} pudotti {1} kakun! +drop.cake.disabled = Et voi pudottaa tavaroita varastaessasi kakkua. Mit\u00e4 ihmett\u00e4 olet tekem\u00e4ss\u00e4?! Juokse! +drop.flag.broadcast = {0} pudotti {1} lipun! +drop.flag.disabled = Et voi pudottaa tavaroita ry\u00f6st\u00e4ess\u00e4si lippua. Mit\u00e4 ihmett\u00e4 olet tekem\u00e4ss\u00e4?! Juokse! +drop.item.border = Et voi pudottaa tavaroita Sotatantereen rajojen l\u00e4heisyydess\u00e4. +drop.item.disabled = Et voi pudottaa tavaroita t\u00e4ss\u00e4 Sotatantereessa. +drop.item.spawn = Et voi pudottaa tavaroita ollessasi tukikohdassa. +drop.team = Et voi pudottaa {0} kuutioita. +drop.wand = Pudotit {0} sauvan. +join.aarequired = T\u00e4m\u00e4 Sotatanner k\u00e4ytt\u00e4\u00e4 automaattijakajaa. Astu automaattijakajan l\u00e4pi. +join.broadcast = {0} liittyi {1} joukkueeseen. +join.disabled = T\u00e4m\u00e4 Sotatanner ei ole k\u00e4yt\u00f6ss\u00e4. +join.full.all = Kaikki joukkueet ovat t\u00e4ynn\u00e4. +join.full.single = {0} joukkue on t\u00e4ynn\u00e4. +join.inventorystored = Tavaraluettelosi on varastossa siihen asti kun poistut k\u00e4ytt\u00e4m\u00e4ll\u00e4 /war leave. +join.permission.all = Sinulla ei ole valtuuksia mihink\u00e4\u00e4n joukkueeseen t\u00e4ss\u00e4 Sotatantereessa. +join.permission.single = Sinulla ei ole valtuuksia liitty\u00e4 joukkueeseen {0}. +join.progress = Et voi liitty\u00e4 t\u00e4ll\u00e4 Sotatantereella meneill\u00e4\u00e4n olevaan taisteluun. +join.selfteam = Et voi liitty\u00e4 omaan joukkueeseesi. +join.team404 = Tuota joukkuetta ei l\u00f6ydetty. Yrit\u00e4 k\u00e4ytt\u00e4\u00e4 /teams komentoa n\u00e4hd\u00e4ksesi listan. +leave.broadcast = {0} poistui Sotatantereelta. +leave.inventoryrestore = Tavaraluetteloasi palautetaan. +pvp.death.drown = {0} hukkui. +pvp.death.explosion = {0} r\u00e4j\u00e4hti. +pvp.death.fall = {0} putosi ennenaikaiseen kuolemaan. +pvp.death.fire = {0} paloi poroksi. +pvp.death.other = {0} kuoli. +pvp.ff.disabled = Hy\u00f6kk\u00e4yksesi ep\u00e4onnistui! Kohteesi on joukkueessasi. +pvp.ff.enabled = Oma tuli on sallittu. \u00c4l\u00e4 satuta joukkuetovereitasi. +pvp.kill.adjectives = ;;mahtava;kuolettava;upea;tarkka;brutaali;voimakas +pvp.kill.bomb = {1} r\u00e4j\u00e4ytettiin {0} toimesta. +pvp.kill.format = {0}''''s {1} {2} {3} {4} +pvp.kill.self = {0} teki itsemurhan. +pvp.kill.verbs = tappoi;tappoi;tappoi;viimeisteli;tuhosi;murhasi;h\u00e4vitti;tuhosi +pvp.kill.weapon.aim = nuoli +pvp.kill.weapon.bow = jousi +pvp.kill.weapon.hand = k\u00e4si +pvp.outside.permission = Et voi hy\u00f6k\u00e4t\u00e4 Sotatantereen ulkopuolisia pelaajia vastaan. +pvp.self.notplaying = Sinun t\u00e4ytyy olla mukana pelaamassa Sotatantereella hy\u00f6k\u00e4t\u00e4ksesi. +pvp.self.respawn = Et voi hy\u00f6k\u00e4t\u00e4 sill\u00e4 aikaa kun olet uudelleensyntym\u00e4ss\u00e4! +pvp.self.spawn = Et voi hy\u00f6k\u00e4t\u00e4 ollessasi viel\u00e4 tukikohdassa! +pvp.target.notplaying = Kohteesi ei pelaa Sotatantereella. +pvp.target.otherzone = Kohteesi pelaa toisella Sotatantereella. +pvp.target.respawn = Kohde on juuri uudelleensyntym\u00e4ss\u00e4! +pvp.target.spawn = Kohde on viel\u00e4 tukikohdassa! +sign.lobby.autoassign = Sotatanner\n{0}\nAstu automaatti-\njakajaan. +sign.lobby.pick = Sotanner\n{0}\n\nValitse joukkue. +sign.lobby.warhub = \nSotakeskukseen\n\n +sign.team.limited = {0} joukkue\n{1}/{2} pelaajaa\n{3}/{4} pistett\u00e4\n{5} el\u00e4m\u00e4\u00e4 j\u00e4ljell\u00e4 +sign.team.unlimited = {0} joukkue\n{1}/{2} pelaajaa\n{3}/{4} pistett\u00e4\nehtym\u00e4tt\u00f6m\u00e4t el\u00e4m\u00e4t +sign.warhub = Sotakeskus\n(/warhub)\nValitse \nottelu! +sign.warzone = Sotatanner\n{0}\n{1}/{2} pelaajaa\n{3} joukkuetta +team.chat.enable = Joukkueviestittely p\u00e4\u00e4ll\u00e4. Vain joukkueesi saa normaalit viestisi. +team.chat.disable = Joukkueviestittely pois p\u00e4\u00e4lt\u00e4. +use.anvil = Et voi k\u00e4ytt\u00e4\u00e4 alasimia t\u00e4ll\u00e4 Sotatantereella! +use.enchant = Et voi k\u00e4ytt\u00e4\u00e4 lumousp\u00f6yti\u00e4 t\u00e4ll\u00e4 Sotatantereella! +use.ender = Et voi k\u00e4ytt\u00e4\u00e4 \u00e4\u00e4riarkkuja pelatessasi Sotatantereella! +use.item.spawn = Et voi k\u00e4ytt\u00e4\u00e4 tavaroita ollessasi tukikohdassa. +use.xpkillmeter = T\u00e4m\u00e4 johtuu xpkillmeter ominaisuuden p\u00e4\u00e4ll\u00e4 olemisesta. +wand.toofar = Kohdekuutio on liian kaukana. +war.notadmin = Et voi tehd\u00e4 tuota ellet ole War:in yll\u00e4pit\u00e4j\u00e4 (lupa war.admin). +war.notzm = Et voi tehd\u00e4 tuota ellet ole Sotatantereen tekij\u00e4 (lupa war.zonemaker). +war.prefix = War> +war.title = War +warhub.none = T\u00e4ss\u00e4 serveriss\u00e4 ei ole Sotakeskusta. Yrit\u00e4 komentoja /zones ja /zone. +warhub.permission = Sinulla ei ole valtuuksia siirty\u00e4 Sotakeskukseen. +warhub.teleport = Tervetuloa Sotakeskukseen! Valitse ottelusi! +zone.airstrike = {0} kutsui ilmaiskun! +zone.battle.end = Taistelu on p\u00e4\u00e4ttynyt. {0} joukkue h\u00e4visi: {1} kuoli ja joukkueella ei ollut en\u00e4\u00e4 j\u00e4ljell\u00e4 el\u00e4mi\u00e4. +zone.battle.newscores = Uudet pisteet - {0} +zone.battle.next = Taistelu keskeytettiin. Palautetaan Sotatanner {0}... +zone.battle.reset = Uusi taistelu alkaa pian. Palautetaan Sotatannerta... +zone.battle.resetprogress = Palautusprosessi: {0}%, {1} sekuntia... +zone.battle.resetcomplete = Sotatanner palautettu {0} sekunnissa. Uusi taistelu alkaa. +zone.bomb.broadcast = {0} r\u00e4j\u00e4ytti {1} joukkueen tukikohdan. {2} joukkue saa yhden pisteen. +zone.cake.broadcast = {0} valloitti {1} kakun. {2} joukkue saa yhden pisteen ja t\u00e4ydet el\u00e4m\u00e4t. +zone.flagcapture.broadcast = {0} joukkue valloitti {1} joukkueen lipun. {2} joukkue saa yhden pisteen. +zone.flagreturn.deadlock = Et voi vallata vihollisen lippua ennen kuin oman joukkueesi lippu on palautettu. +zone.flagreturn.flag = Sinun t\u00e4ytyy vallata vihollisen lippu joukkueesi lipun luona. +zone.flagreturn.spawn = Sinun t\u00e4ytyy vallata vihollisen lippu joukkueesi tukikohdassa. +zone.leavenotice = K\u00e4yt\u00e4 komentoa /war leave poistuaksesi Sotatantereelta. +zone.lifepool.empty = {0} joukkueen el\u00e4m\u00e4t ovat ehtyneet. Viel\u00e4 yksi kuolema ja he h\u00e4vi\u00e4v\u00e4t ottelun! +zone.loadout.equip = {0} varustus otettu k\u00e4ytt\u00f6\u00f6n (paina shift vaihtaaksesi). +zone.loadout.reenter = Et voi vaihtaa varustusta poistuttuasi tukikohdasta. +zone.monument.badblock = Voit vallata monumentin joukkueesi v\u00e4risell\u00e4 villakuutiolla. Hae yksi joukkueesi tukikohdasta. +zone.monument.capture = {0} monumentti on valloitettu {1} joukkueen toimesta. +zone.monument.lose = {0} joukkue menetti {1} monumentin hallinnan. +zone.monument.voodoo = Tanssisi miellytt\u00e4\u00e4 monumentin henke\u00e4. Saat {0} syd\u00e4nt\u00e4! +zone.noteamnotice = Et voi olla Sotatantereen sis\u00e4ll\u00e4 ilman joukkuetta. +zone.score.board404 = T\u00e4ss\u00e4 Sotatantereessa ei ole k\u00e4yt\u00f6ss\u00e4 pistetaulukkoa. +zone.score.empty = Et saa pistett\u00e4 ennen kuin v\u00e4hint\u00e4\u00e4n yksi pelaaja liittyy toiseen joukkueeseen. +zone.spawn.minplayers = Et voi poistua tukikohdasta ennen kuin v\u00e4hint\u00e4\u00e4n {0} pelaaja(a) on v\u00e4hint\u00e4\u00e4n {1} joukkueessa. +zone.spawn.timer = Et voi poistua tukikohdasta {0} sekuntiin uudelleensyntymisen j\u00e4lkeen. +zone.steal.bomb.broadcast = Pelaajalla {0} on {1} pommi. +zone.steal.bomb.notice = Sinulla on {0} pommi. P\u00e4\u00e4se toisen joukkueen tukikohtaan saadaksesi pisteen. \u00c4l\u00e4 osu kehenk\u00e4\u00e4n tai muuten r\u00e4j\u00e4hd\u00e4t! +zone.steal.bomb.prevent = Est\u00e4 pelaajaa {0} p\u00e4\u00e4sem\u00e4st\u00e4 tukikohtaanne pommin kanssa! +zone.steal.cake.broadcast = Pelaajalla {0} on {1} kakku. +zone.steal.cake.notice = Sinulla on {0} kakku. P\u00e4\u00e4se joukkueesi tukikohtaan saadaksesi pisteen ja t\u00e4ydent\u00e4\u00e4ksesi el\u00e4mi\u00e4nne. +zone.steal.cake.prevent = Est\u00e4 pelaajaa {0} p\u00e4\u00e4sem\u00e4st\u00e4 heid\u00e4n tukikohtaansa kakun kanssa! +zone.steal.flag.broadcast = {0} ry\u00f6sti {1} joukkueen lipun. +zone.steal.flag.empty = Et voi ry\u00f6st\u00e4\u00e4 {0} joukkueen lippua, sill\u00e4 siin\u00e4 joukkueessa ei ole yht\u00e4\u00e4n pelaajaa. +zone.steal.flag.notice = Sinulla on {0} joukkueen lippu. P\u00e4\u00e4se joukkueesi tukikohtaan tai lipulle valloittaaksesi sen! +zone.steal.flag.prevent = Est\u00e4 pelaajaa {0} p\u00e4\u00e4sem\u00e4st\u00e4 {1} joukkueen tukikohtaan tai lipulle. +zone.stealextra.bomb = Voit ry\u00f6st\u00e4\u00e4 vain yhden pommin kerrallaan! +zone.stealextra.cake = Voit ry\u00f6st\u00e4\u00e4 vain yhden kakun kerrallaan! +zone.stealextra.flag = Voit ry\u00f6st\u00e4\u00e4 vain yhden lipun kerrallaan! +zone.stealextra.other = Voit ry\u00f6st\u00e4\u00e4 vain yhden asian kerrallaan! +zone.teaminfo.format = {0}: {1} pistett\u00e4, {2}/{3} el\u00e4m\u00e4\u00e4 j\u00e4ljell\u00e4. {4} +zone.teaminfo.none = ei yht\u00e4\u00e4n +zone.teaminfo.prefix = Joukkueet: +zone.teleport = Tervetuloa {0} Sotatantereelle. +zone.warp.permission = Sinulla ei ole valtuuksia siirty\u00e4 Sotatantereelle. +zone.zone404 = Sotatannerta ei l\u00f6ydetty. +zone.zoneinfo.format = {0}: {1} joukkuetta, {2} pelaajaa +zone.zoneinfo.prefix = Sotatantereet: +zone.zoneinfo.teleport = K\u00e4yt\u00e4 komentoa /zone siirty\u00e4ksesi Sotatantereelle. diff --git a/war/src/main/resources/messages_fr.properties b/war/src/main/resources/messages_fr.properties index 92bda2d..58a1405 100644 --- a/war/src/main/resources/messages_fr.properties +++ b/war/src/main/resources/messages_fr.properties @@ -1,129 +1,133 @@ # Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) build.denied.location = Vous ne pouvez pas construire ici. -build.denied.outside = Vous pouvez construire uniquement dans les zones de combat. -build.denied.teamblock = Vous devez utiliser les blocs de l'\u00e9quipe pour vous emparer des monuments. -build.denied.zone.break = Vous ne pouvez pas casser de bloc ! +build.denied.outside = Vous ne pouvez construire qu''\u00e0 l''int\u00e9rieur de la WarZone +build.denied.teamblock = Vous pouvez seulement utiliser les blocs de votre team pour prendre un monument. +build.denied.zone.break = Les blocs de la zone sont incassables ! build.denied.zone.multteam = Vous avez d\u00e9j\u00e0 le bloc {0}. -build.denied.zone.outside = Vous ne pouvez pas d\u00e9truire le terrain si vous n'\u00eates pas dans la partie. -build.denied.zone.place = Vous ne pouvez pas placer de bloc ici. +build.denied.zone.outside = Impossible de d\u00e9truire les blocs d''une zone sans jouer. +build.denied.zone.place = Vous ne pouvez pas placer de bloc dans cette zone. build.denied.zone.type = Vous ne pouvez pas modifier ce type de bloc. -command.console = Vous ne pouvez pas effectuer cette action si vous n'\u00eates pas dans une partie. -command.disabled = Vous ne pouvez utiliser que les commandes de combat quand vous jouez. +command.console = Vous ne pouvez pas effectuer cette action si vous n''''\u00eates pas dans la partie. +command.disabled = Vous pouvez seulement utiliser les commandes de War en jeu (ex: /war leave) +command.tp.init = Attendez {0} seconde(s) pour \u00eatre t\u00e9l\u00e9porter. Ne bougez pas. +command.tp.moved = T\u00e9l\u00e9portation annul\u00e9 \u00e0 cause de mouvement. +command.tp.damaged = T\u00e9l\u00e9portation annul\u00e9e. Vous recevez des coups ! +command.tp.success = Vous avez \u00e9t\u00e9 t\u00e9l\u00e9port\u00e9. Merci pour votre patience. drop.bomb.broadcast = {0} a perdu la bombe {1} ! -drop.bomb.disabled = Vous ne pouvez pas jeter des objets quand vous avez la bombe, Que faites vous ?!... Foncez au Spawn de l'ennemi ! +drop.bomb.disabled = Vous ne pouvez pas jeter d''objet quand vous avez la bombe ! Atteignez rapidement la base ennemie ! drop.cake.broadcast = {0} a perdu le g\u00e2teau {1} ! -drop.cake.disabled = Vous ne pouvez pas jeter des objets tout en volant un g\u00e2teau. Que faites vous ?! Courez ! +drop.cake.disabled = Vous ne pouvez pas jeter d''objet quand vous avez le g\u00e2teau ! Atteignez vite votre base ! drop.flag.broadcast = {0} a perdu le drapeau {1} ! -drop.flag.disabled = Vous ne pouvez pas jeter d'objets quand vous avez le drapeau. Que faites vous ?! Courez ! -drop.item.border = Vous ne pouvez pas jeter d'objets pr\u00e8s des fronti\u00e8res de la zone. -drop.item.disabled = Vous ne pouvez rien jeter sur ce champs de bataille. Soyez \u00e9colo ! -drop.item.spawn = Vous ne pouvez pas jeter d'objets en \u00e9tant \u00e0 votre base. -drop.team = Vous ne pouvez pas jeter de blocs {0}. -drop.wand = Vous jetez l''outil de zone {0}. +drop.flag.disabled = Vous ne pouvez pas lancer d''objet quand vous avez le drapeau ! Atteignez vite votre base ! +drop.item.border = Vous ne pouvez pas lancer d''objet pr\u00e8s des limites de la zone. +drop.item.disabled = Vous ne pouvez rien jeter sur le champ de bataille. +drop.item.spawn = Vous ne pouvez pas jeter d''objet lorsque vous \u00eates \u00e0 votre base. +drop.team = Vous ne pouvez pas jeter les blocs de l''\u00e9quipe {0}. +drop.wand = Vous jetez l''''outil de zone {0}. join.aarequired = Vous serez automatiquement int\u00e9gr\u00e9 \u00e0 une \u00e9quipe en passant le portail. -join.broadcast = {0} a rejoint l''\u00e9quipe {1}. +join.broadcast = {0} a rejoint l''''\u00e9quipe {1}. join.disabled = Cette ar\u00e8ne est d\u00e9sactiv\u00e9e. -join.full.all = Toutes les \u00e9quipes sont au complet. -join.full.single = Il n'y a plus de place dans l''\u00e9quipe {0}. -join.inventorystored = Votre inventaire est conserv\u00e9 jusqu'\u00e0 ce que vous quittiez le champs de bataille (via '/war leave'). -join.permission.all = Vous n'avez pas les permissions suffisantes pour rejoindre une \u00e9quipe. -join.permission.single = Vous n''avez pas la permission de rejoindre l''\u00e9quipe {0}. -join.progress = Les combats ont d\u00e9j\u00e0 d\u00e9marr\u00e9, vous ne pouvez pas rejoindre cette ar\u00e8ne. +join.full.all = Tous les \u00e9quipes sont pleine. +join.full.single = Il n''y a plus de place dans l''''\u00e9quipe {0}. +join.inventorystored = Votre inventaire est conserv\u00e9 jusqu''\u00e0 ce que vous quittiez le champs de bataille (via ''/war leave''). +join.permission.all = Vous n''avez pas les permissions suffisantes pour rejoindre une \u00e9quipe. +join.permission.single = Vous n''''avez pas la permission de rejoindre l''''\u00e9quipe {0}. +join.progress = Impossible de rejoindre une zone en jeu. join.selfteam = Vous ne pouvez pas rejoindre votre propre \u00e9quipe. -join.team404 = Cette \u00e9quipe n'existe pas. Utilisez '/teams' pour obtenir la liste des \u00e9quipes existantes. +join.team404 = Cette \u00e9quipe n''existe pas. Utilisez ''/teams'' pour obtenir la liste des \u00e9quipes existantes. leave.broadcast = {0} a quitt\u00e9 la bataille. -leave.inventoryrestore = Votre inventaire vient d'\u00eatre restaur\u00e9. -pvp.death.drown = {0} ne sait pas nager, et vient de se noyer ! -pvp.death.explosion = Boom ! {0} vient d''exploser ! -pvp.death.fall = {0} s''est cass\u00e9 le doigt de pied en tombant... Et il en est mort ! -pvp.death.fire = {0} vient de p\u00e9rir dans les flammes... Paix \u00e0 son \u00e2me ! +leave.inventoryrestore = Votre inventaire vient d''\u00eatre restaur\u00e9. +pvp.death.drown = {0} vient de se noyer. +pvp.death.explosion = {0} vient d''''exploser ! +pvp.death.fall = {0} est mort en tombant. +pvp.death.fire = {0} vient de p\u00e9rir dans les flammes. pvp.death.other = {0} est mort ! -pvp.ff.disabled = Rat\u00e9 ! Il est dans ton \u00e9quipe celui-l\u00e0 ! -pvp.ff.enabled = Tir ami activ\u00e9 ! Faites attention quand vous tapez ;) +pvp.ff.disabled = Il est dans ton \u00e9quipe celui-l\u00e0 ! +pvp.ff.enabled = PvP entre \u00e9quipe activ\u00e9, attention ! pvp.kill.adjectives = ;;puissant;mortel;bien;pr\u00e9cis;brutal;puissant -pvp.kill.bomb = Bien jou\u00e9 {0} ! Le souffle de l''explosion a tu\u00e9 {1} ! +pvp.kill.bomb = Bien jou\u00e9 {0} ! L''explostion a tu\u00e9 {1} ! pvp.kill.format = {1} {2} de {0} {3} {4} -pvp.kill.self = {0} s''est suicid\u00e9 ! +pvp.kill.self = {0} s''''est suicid\u00e9 ! pvp.kill.verbs = tu\u00e9;tu\u00e9;tu\u00e9;termin\u00e9;an\u00e9anti;assassin\u00e9;effac\u00e9;extermin\u00e9 pvp.kill.weapon.aim = cible pvp.kill.weapon.bow = arc pvp.kill.weapon.hand = main -pvp.outside.permission = Vous ne pouvez pas attaquer les joueurs en dehors de l'ar\u00e8ne. -pvp.self.notplaying = Vous devez rejoindre l'ar\u00e8ne pour attaquer. Allez, viens, on est bien ! -pvp.self.respawn = Attendez qu'il soit pr\u00eat pour attaquer ! -pvp.self.spawn = Vous ne pouvez pas attaquer depuis votre base. -pvp.target.notplaying = Votre cible est en dehors de l'ar\u00e8ne. -pvp.target.otherzone = Votre cible est dans une autre ar\u00e8ne... Bien tent\u00e9 ! +pvp.outside.permission = Impossible d''''attaquer les joueurs en dehors de la zone. +pvp.self.notplaying = Vous devez rejoindre l''ar\u00e8ne pour attaquer. +pvp.self.respawn = Attendez qu''il r\u00e9apparaisse pour l''attaquer ! +pvp.self.spawn = Vous ne pouvez pas attaquer depuis votre base ! +pvp.target.notplaying = Votre cible est en dehors de l''ar\u00e8ne. +pvp.target.otherzone = Votre cible est dans une autre zone... pvp.target.respawn = La cible est actuellement \u00e0 sa base ! -pvp.target.spawn = La cible est d\u00e9j\u00e0 au point d'apparition ! -sign.lobby.autoassign = Warzone\n{0}\nEntrez dans un\nportail. -sign.lobby.pick = Ar\u00e8ne\n{0}\nChoisissez\nvotre \u00e9quipe -sign.lobby.warhub = \nVers la zone de\nchoix d'ar\u00e8ne\n +pvp.target.spawn = La cible est d\u00e9j\u00e0 au point d''apparition ! +sign.lobby.autoassign = Zone\n{0}\nEntrez dans un\nportail. +sign.lobby.pick = Carte\n{0}\nChoisissez\nvotre \u00e9quipe +sign.lobby.warhub = \nVers la zone\nwarhub\n sign.team.limited = Equipe {0}\n{1}/{2} joueurs\n{3}/{4} points\n{5} vies sign.team.unlimited = Equipe {0}\n{1}/{2} joueurs\n{3}/{4} points\nVies illimit\u00e9es -sign.warhub = War hub\n( /warhub )\nChoisissez votre\nbataille ! -sign.warzone = Champs de bataille\n{0}\n{1}/{2} joueurs\n{3} \u00e9quipes -team.chat.enable = Chat d'\u00e9quipe activ\u00e9. Seule votre \u00e9quipe pourra lire vos messages. -team.chat.disable = Chat d'\u00e9quipe d\u00e9sactiv\u00e9. -use.anvil = Vous ne pouvez pas utiliser l'enclume sur ce champs de bataille ! -use.enchant = Vous ne pouvez pas utiliser la table d'enchantement sur ce champs de bataille ! -use.ender = Vous ne pouvez pas utiliser les coffres de l'end en pleine bataille ! -use.item.spawn = Vous ne pouvez pas utiliser d'objet \u00e0 votre base. -use.xpkillmeter = L'option 'xpkillmeter' doit \u00eatre activ\u00e9e. +sign.warhub = Zone \n( /warhub )\nChoisissez votre\nzone ! +sign.warzone = Zone\n{0}\n{1}/{2} joueurs\n{3} \u00e9quipes +team.chat.enable = Chat d''\u00e9quipe activ\u00e9. Seule votre \u00e9quipe pourra lire vos messages. +team.chat.disable = Chat d''\u00e9quipe d\u00e9sactiv\u00e9. +use.anvil = Vous ne pouvez pas utiliser l''enclume sur cette zone. +use.enchant = Vous ne pouvez pas utiliser la table d''enchantement sur cette zone. +use.ender = Vous ne pouvez pas utiliser les coffres de l''end en pleine bataille ! +use.item.spawn = Vous ne pouvez pas utiliser d''objet \u00e0 votre base. +use.xpkillmeter = L''option ''xpkillmeter'' doit \u00eatre activ\u00e9e. wand.toofar = Le bloc cible est trop \u00e9loign\u00e9. -war.notadmin = Vous n'avez pas la permission. -war.notzm = Vous n'avez pas la permission requise. +war.notadmin = Vous n''avez pas la permission. +war.notzm = Vous n''avez pas la permission requise. war.prefix = War > war.title = War -warhub.none = Il n'y a pas de "warhub". Utilisez '/zones' et '/zone'. -warhub.permission = Vous n'avez pas la permission de vous t\u00e9l\u00e9porter. -warhub.teleport = Bienvenue ! Choisissez un champs de bataille. +warhub.none = Il n''y a pas de "warhub". Utilisez ''/zones'' et ''/zone''. +warhub.permission = Vous n''avez pas la permission de vous t\u00e9l\u00e9porter \u00e0 la zone warhub. +warhub.teleport = Bienvenue ! Choisissez une zone pour combattre. zone.airstrike = {0} a fait un raid a\u00e9rien ! -zone.battle.end = La partie est termin\u00e9e ! L''\u00e9quipe {0} a perdu : {1} morts et plus aucune de vie. +zone.battle.end = La partie est termin\u00e9e ! L''''\u00e9quipe {0} a perdu : L''\u00e9quipe {1} est morte et n''a plus aucune de vie. zone.battle.newscores = Nouveaux scores - {0} -zone.battle.next = Le combat a \u00e9t\u00e9 interrompu... Remise \u00e0 z\u00e9ro de la zone {0}... -zone.battle.reset = Une nouvelle bataille va bient\u00f4t d\u00e9marrer. Pr\u00e9paration de l'ar\u00e8ne... -zone.battle.resetprogress = Progression: {0}%, {1} secondes... -zone.battle.resetcomplete = L''ar\u00e8ne va \u00eatre r\u00e9initialis\u00e9e dans {0} secondes. Une nouvelle bataille va commencer ! -zone.bomb.broadcast = {0} a explos\u00e9 la base de l''\u00e9quipe {1}. L''\u00e9quipe {2} gagne un point. -zone.cake.broadcast = {0} a ramen\u00e9 le g\u00e2teau {1} \u00e0 sa base. L''\u00e9quipe {2} gagne un point et r\u00e9cup\u00e8re toutes ses vies. -zone.flagcapture.broadcast = {0} a ramen\u00e9 le drapeau de l''\u00e9quipe {1} dans son camp ! L''\u00e9quipe {2} gagne un point. +zone.battle.next = Le combat a \u00e9t\u00e9 interrompu... Regen\u00e9ration de la zone {0}... +zone.battle.reset = Une nouvelle bataille va bient\u00f4t d\u00e9marrer. Regen de la zone.. +zone.battle.resetprogress = Progression: {0}%, {1} secondes pass\u00e9... +zone.battle.resetcomplete = Carte r\u00e9initialis\u00e9e en {0} secondes. Une nouvelle bataille va commencer ! +zone.bomb.broadcast = {0} a explos\u00e9 la base de l''''\u00e9quipe {1}. L''''\u00e9quipe {2} gagne 1 point. +zone.cake.broadcast = {0} a ramen\u00e9 le g\u00e2teau {1} \u00e0 sa base. L''''\u00e9quipe {2} gagne un point et r\u00e9cup\u00e8re toutes ses vies. +zone.flagcapture.broadcast = {0} a ramen\u00e9 le drapeau de l''''\u00e9quipe {1} \u00e0 sa base ! L''''\u00e9quipe {2} gagne 1 point. zone.flagreturn.deadlock = Vous ne pouvez pas rapporter un drapeau ennemi alors que votre propre drapeau a \u00e9t\u00e9 vol\u00e9 ! -zone.flagreturn.flag = Vous devez rapporter le drapeau ennemi \u00e0 votre propre drapeau. +zone.flagreturn.flag = Vous devez captuer le drapeau enemie \u00e0 votre drapeau d''\u00e9quipe. zone.flagreturn.spawn = Vous devez rapporter le drapeau ennemi \u00e0 votre base. -zone.leavenotice = Utilisez '/war leave' pour quitter le champs de bataille. -zone.lifepool.empty = L''\u00e9quipe {0} n''a plus de vie. Encore un d\u00e9c\u00e8s, et elle perd la bataille ! -zone.loadout.equip = Voici l''\u00e9quipement {0} (accroupissez-vous pour changer). +zone.leavenotice = Utilisez ''/war leave'' pour quitter la zone. +zone.lifepool.empty = L''''\u00e9quipe {0} n''''a plus de vie. Encore une mort, et elle perd la bataille ! +zone.loadout.equip = Voici votre \u00e9quipement {0} (Utiliser la touche sneak pour changer). zone.loadout.reenter = Vous ne pouvez pas changer votre \u00e9quipement apr\u00e8s avoir quitt\u00e9 votre base. -zone.monument.badblock = Vous devez vous emparer d'un monument avec une laine \u00e0 la couleur de votre \u00e9quipe. Obtenez en une \u00e0 votre base. -zone.monument.capture = L''\u00e9quipe {1} s''est empar\u00e9e du monument {0}. -zone.monument.lose = L''\u00e9quipe {0} a perdu le contr\u00f4le du monument {1}. -zone.monument.voodoo = Votre danse a plu au monument. Vous gagnez {0} coeur(s) ! -zone.noteamnotice = Vous ne pouvez pas \u00eatre dans l'ar\u00e8ne sans \u00eatre dans une \u00e9quipe. -zone.score.board404 = Le tableau des scores n'est pas activ\u00e9 dans cette ar\u00e8ne. -zone.score.empty = Vous ne pourrez pas marquer de point tant qu'aucun joueur n'aura rejoint une autre \u00e9quipe. -zone.spawn.minplayers = Vous ne pouvez pas quitter votre base s''il n''y a pas au moins {0} joueurs dans au moins {1} \u00e9quipes. -zone.spawn.timer = Vous ne pouvez pas quitter votre base pendant {0} apr\u00e8s votre apparition. -zone.steal.bomb.broadcast = {0} s''est empar\u00e9 de la bombe {1}. -zone.steal.bomb.notice = Vous avez la bombe {0}. Atteignez la base d''une \u00e9quipe ennemie pour gagner des points. Si vous vous faites toucher, vous exploserez ! -zone.steal.bomb.prevent = Emp\u00eachez {0} d''atteindre votre base avec la bombe ! +zone.monument.badblock = Vous devez vous emparer d''un monument avec une laine \u00e0 la couleur de votre \u00e9quipe. +zone.monument.capture = L''''\u00e9quipe {1} s''''est empar\u00e9e du monument {0}. +zone.monument.lose = L''''\u00e9quipe {0} a perdu le contr\u00f4le du monument {1}. +zone.monument.voodoo = Votre dance plait au monument voodoo ! Vous gagnez {0} coeur(s) ! +zone.noteamnotice = Vous ne pouvez pas \u00eatre dans la zone sans \u00eatre dans une \u00e9quipe. +zone.score.board404 = Le tableau des scores n''est pas activ\u00e9 dans cette zone. +zone.score.empty = Vous ne pourrez pas marquer de point tant qu''aucun joueur n''aura rejoint une autre \u00e9quipe. +zone.spawn.minplayers = Vous ne pouvez pas quitter votre base s''''il n''''y a pas au moins {0} joueurs dans au moins {1} \u00e9quipes. +zone.spawn.timer = Vous devez attendre {0} secondes pour quitter votre base ! +zone.steal.bomb.broadcast = {0} s''''est empar\u00e9 de la bombe {1} ! +zone.steal.bomb.notice = Vous avez la bombe {0}. Atteignez la base d''''une \u00e9quipe ennemie pour gagner des points. Si vous vous faites toucher, vous exploserez ! +zone.steal.bomb.prevent = Emp\u00eachez {0} d''''atteindre votre base avec la bombe ! zone.steal.cake.broadcast = {0} a vol\u00e9 le g\u00e2teau {1}. zone.steal.cake.notice = Vous avez le g\u00e2teau {0}. Atteignez votre base pour gagner des points et obtenir des vies ! -zone.steal.cake.prevent = Emp\u00eachez {0} d''atteindre sa base avec le g\u00e2teau ! -zone.steal.flag.broadcast = {0} a vol\u00e9 le drapeau de l''\u00e9quipe {1} ! -zone.steal.flag.empty = Vous ne pouvez pas voler le drapeau de l''\u00e9quipe {0} si aucun joueur n''a rejoint cette \u00e9quipe. -zone.steal.flag.notice = Vous avez le drapeau de l''\u00e9quipe {0}. Atteigez votre base ou votre propre drapeau, et vite ! -zone.steal.flag.prevent = Emp\u00eachez {0} d''atteindre la base ou le drapeau de l''\u00e9quipe {1} ! -zone.stealextra.bomb = Vous ne pouvez voler qu'une seule bombe \u00e0 la fois ! -zone.stealextra.cake = Vous ne pouvez voler qu'un seul g\u00e2teau \u00e0 la fois ! -zone.stealextra.flag = Vous ne pouvez voler qu'un seul drapeau \u00e0 la fois ! -zone.stealextra.other = Vous ne pouvez voler qu'une seule chose \u00e0 la fois ! +zone.steal.cake.prevent = Emp\u00eachez {0} d''''atteindre sa base avec le g\u00e2teau ! +zone.steal.flag.broadcast = {0} a vol\u00e9 le drapeau de l''''\u00e9quipe {1} ! +zone.steal.flag.empty = Vous ne pouvez pas voler le drapeau de l''''\u00e9quipe {0} si aucun joueur n''''a rejoint cette \u00e9quipe. +zone.steal.flag.notice = Vous avez le drapeau de l''''\u00e9quipe {0}. Atteignez vite votre base ! +zone.steal.flag.prevent = Emp\u00eachez {0} d''''atteindre la base de l''''\u00e9quipe {1} ! +zone.stealextra.bomb = Vous ne pouvez voler qu''une seule bombe \u00e0 la fois ! +zone.stealextra.cake = Vous ne pouvez voler qu''un seul g\u00e2teau \u00e0 la fois ! +zone.stealextra.flag = Vous ne pouvez voler qu''un seul drapeau \u00e0 la fois ! +zone.stealextra.other = Vous ne pouvez voler qu''une seule chose \u00e0 la fois ! zone.teaminfo.format = {0} : {1} points, {2}/{3} vies restantes. {4} zone.teaminfo.none = aucun(e) zone.teaminfo.prefix = Equipes : -zone.teleport = Bienvenue sur le champs de bataille {0} ! -zone.warp.permission = Vous n'avez pas la permission de vous t\u00e9l\u00e9porter \u00e0 cette ar\u00e8ne. -zone.zone404 = Ar\u00e8ne non trouv\u00e9e. +zone.teleport = Bienvenue sur la zone {0} ! +zone.warp.permission = Vous n''avez pas la permission de vous t\u00e9l\u00e9porter \u00e0 cette zone. +zone.zone404 = Zone non trouv\u00e9e. zone.zoneinfo.format = {0} : {1} \u00e9quipes, {2} joueurs -zone.zoneinfo.prefix = Liste des ar\u00e8nes : -zone.zoneinfo.teleport = Utilisez '/zone ' pour vous y t\u00e9l\u00e9porter. +zone.zoneinfo.prefix = Liste des zones: +zone.zoneinfo.teleport = Utilisez ''/zone '' pour vous y t\u00e9l\u00e9porter. diff --git a/war/src/main/resources/messages_fy.properties b/war/src/main/resources/messages_fy.properties new file mode 100644 index 0000000..052961b --- /dev/null +++ b/war/src/main/resources/messages_fy.properties @@ -0,0 +1,65 @@ +# Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) +build.denied.location = Do kinst hjir net bouwe. +build.denied.outside = Do kinst allinnich yn oarlochsgebieten bouwe. +build.denied.teamblock = Do kinst allinnich de blokken fan dyn tiim br\u00fbke om monuminten te feroverjen. +build.denied.zone.break = Do blokken dy''t yn dit oarlochsgebiet boud binne, binne unbrekber! +build.denied.zone.multteam = Do hast al in {0} blok. +build.denied.zone.outside = Do kinst in oarlochsgebiet w\u00ear''tsto net yn spilest net ferneatigje. +build.denied.zone.place = Do kinst gjin blokken pleatsen yn dit oarlochsgebiet. +build.denied.zone.type = Do kinst blokken fan dit type net oanpasse. +command.console = Do kinst dit net dwaan at''sto net yn-spiel bist. +command.disabled = Do kinst allinnich Oarlochkommando''s (lykas /leave) br\u00fbke at''sto oan it spilen bist. +drop.bomb.broadcast = {0} hat de {1} bom fallen litten! +drop.bomb.disabled = Do kinst gjin foarwerpen fallen litten at''sto de bom oan it stelle bist. Wat dochsto?! Rin nei de spawn fan dyn fij\u00e2n! +drop.cake.broadcast = {0} hat de {1} cake fallen listen! +drop.cake.disabled = Do kinst gjin foarwerpen fallen litten at''sto de cake oan it stelle bist. Wat dochsto?! Rin! +drop.flag.broadcast = {0} hat de {1} flagge fallen litten! +drop.flag.disabled = Do kinst gjin foarwerpen fallen litten at''sto de flag oan it stelle bist. Wat dochsto?! Rin! +drop.item.border = Do kinst gjin foarwerpen fallen litten yn ''e buert fan de s\u00f4negrins. +drop.item.disabled = Do kinst gjin foarwerpen fallen litten yn dit oarlochsgebiet. +drop.item.spawn = Do kinst gjin foarwerpen fallen litten at''sto noch yn ''e spawn bist. +drop.team = Do kinst gjin {0} blokken fallen litten. +drop.wand = Do hast de s\u00f4ne {0} st\u00eaf fallen litten. +join.aarequired = Dit oarlochsgebiet ferplichtet dy om automatysk tawiisd te wurden oan in tiim. Gean asjebleaft nei de auto-tawiispoarte. +join.broadcast = {0} wie taheakke oan tiim {1} +join.disabled = Dit oarlochsgebiet is \u00fatskeakele. +join.full.all = Alle tiims binne fol. +join.full.single = Tiim {0} is fol. +join.inventorystored = Dyn ynventaris stiet yn ''e opslach oant datsto fuort geast mei /war leave. +join.permission.all = Do hast gjin tastimming foar elts fan ''e beskikbere tiims yn dit oarlochsgebiet. +join.permission.single = Do hast gjin tastimming om dysels ta te heakje oan team {0}. +join.progress = Do kinst dysels net taheakje oan in dwaande striid yn dizze s\u00f4ne. +join.selfteam = Do kinst dysels net taheakje oan dyn eigen tiim. +join.team404 = It team waard net f\u00fbn. Probearje /teams te br\u00fbken foar in list. +leave.broadcast = {0} hat de s\u00f4ne ferlitten. +leave.inventoryrestore = Dyn ynventaris wurdt wer ynoarder. +pvp.death.drown = {0} fersopen +pvp.death.explosion = {0} eksplodearre +pvp.death.fall = {0} is betiid dea gongen troch in fal +pvp.death.fire = {0} wie knapperich opbaarnd +pvp.death.other = {0} is dea gongen +pvp.ff.disabled = Dyn oanfal miste! Dyn wyt is yn dyn tiim. +pvp.ff.enabled = Freonlike fjoer stiet oan! Alsjebleaft, blessearje dyn tiimgenoaten net. +pvp.kill.adjectives = ;;machtich;deadlik;fijn;presys;br\u00fat;kr\u00eaftich +pvp.kill.bomb = {0} hat {1} opblaasd! +pvp.kill.format = {0}''''s {1} {2} {3} {4} +pvp.kill.self = {0} hat selsmoard plege +pvp.kill.weapon.aim = rjochtsje +pvp.kill.weapon.bow = b\u00f4ge +pvp.kill.weapon.hand = h\u00e2n +pvp.outside.permission = Do kinst gjin spilers oanfalle b\u00fbten de oarlochsgebieten. +pvp.self.notplaying = Do moatst yn it oarlochsgebiet w\u00eaze asto aanfalle wolst. +pvp.self.respawn = Do kinst net oanfalle asto oan it respawnen bist! +pvp.self.spawn = Do kinst net oanfalle asto noch yn ''e spawn bist! +pvp.target.notplaying = Dyn wyt spilet net yn it oarlochsgebiet. +pvp.target.otherzone = Dyn wyt spilet yn in oar oarlochsgebiet. +pvp.target.respawn = It wyt is dwaande mei respawnen! +pvp.target.spawn = Dyn wyt is noch hyltyd yn ''e spawn. +sign.lobby.autoassign = Oarlochsgebiet\n{0}\nGean nei auto-\ntawiispoarte. +sign.lobby.pick = Oarlochsgebiet\n{0} \n \nIn tiim \u00fatkieze. +sign.lobby.warhub = \nNei Oarlochshub\n\n +sign.team.limited = Tiim {0}\n{1}/{2} spilers\n{3}/{4} pnt\n{5} libbens oer +sign.team.unlimited = Tiim {0}\n{1}/{2} spilers\n{3}/{4} pnt\nlibbens unbeheind +sign.warhub = Oarlochshub\n(/warhub)\nKies dyn\nstriid! +sign.warzone = Oarlochsgebiet\n{0}\n{1}/{2} spilers\n{3} tiims +use.anvil = Do kinst gjin ambylden br\u00fbke yn dit oarlochsgebiet! diff --git a/war/src/main/resources/messages_he.properties b/war/src/main/resources/messages_he.properties new file mode 100644 index 0000000..6c3a7b0 --- /dev/null +++ b/war/src/main/resources/messages_he.properties @@ -0,0 +1,3 @@ +# Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) +build.denied.location = \u05d0\u05e1\u05d5\u05e8 \u05dc\u05d1\u05e0\u05d5\u05ea \u05db\u05d0\u05df +build.denied.outside = \u05d0\u05e4\u05e9\u05e8 \u05dc\u05d1\u05e0\u05d5\u05ea \u05e8\u05e7 \u05d1\u05ea\u05d5\u05da \u05d0\u05d6\u05d5\u05e8\u05d9 \u05de\u05dc\u05d7\u05de\u05d4 diff --git a/war/src/main/resources/messages_hu.properties b/war/src/main/resources/messages_hu.properties index abe1ad2..abfd339 100644 --- a/war/src/main/resources/messages_hu.properties +++ b/war/src/main/resources/messages_hu.properties @@ -1,10 +1,133 @@ # Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) build.denied.location = Itt nem \u00e9p\u00edthetsz. build.denied.outside = Csak a j\u00e1t\u00e9kteren bel\u00fcl \u00e9p\u00edthetsz. +build.denied.teamblock = Csak arra haszn\u00e1lhatod a csapatod blokkjait, hogy elfoglald a szobrokat. +build.denied.zone.break = Ez egy t\u00f6rhetelen blokk! +build.denied.zone.multteam = Neked m\u00e1r van {0} blokkod. +build.denied.zone.outside = Nem t\u00f6rhetsz blokkokat az ar\u00e9n\u00e1ban, ha nem j\u00e1tszol +build.denied.zone.place = Nem rakhatsz le blokkokat ebben az ar\u00e9n\u00e1ban. +build.denied.zone.type = Nem m\u00f3dos\u00edthatod a blokk t\u00edpus\u00e1t. +command.console = Ezt nem csin\u00e1lhatod, ha nem j\u00e1tszol. +command.disabled = Csak a War parancsait haszn\u00e1lhatod, amikor j\u00e1tszol. (pl.: /leave) +command.tp.init = V\u00e1rj {0} m\u00e1sodpercet a teleport\u00e1l\u00e1sig. Ha mozogsz, vagy sebz\u0151dsz, az megszak\u00edtja a teleport\u00e1l\u00e1st. +command.tp.moved = Nem tudt\u00e1l teleport\u00e1l\u00f3dni, mert mozogt\u00e1l. +command.tp.damaged = Nem tudt\u00e1l teleport\u00e1l\u00f3dni, mert sebz\u0151dt\u00e9l. +command.tp.success = Elteleport\u00e1l\u00f3dt\u00e1l. K\u00f6sz\u00f6nj\u00fck a t\u00fcrelmet. +drop.bomb.broadcast = {0} eldobta a(z) {1} bomb\u00e1t! +drop.bomb.disabled = Nem dobhatsz el t\u00e1rgyakat, amikor n\u00e1lad van a bomba. Mit csin\u00e1lsz?! Fuss az ellens\u00e9ged spawnj\u00e1ra! +drop.cake.broadcast = {0} eldobta a(z) {1} tort\u00e1t! +drop.cake.disabled = Nem dobhatsz el t\u00e1rgyakat, amikor n\u00e1lad van a torta. Mit csin\u00e1lsz?! Fuss! +drop.flag.broadcast = {0} eldobta a(z) {1} csapat z\u00e1szl\u00f3j\u00e1t. +drop.flag.disabled = Nem dobhatod el a z\u00e1szl\u00f3t. Mit csin\u00e1lsz?! Fuss! +drop.item.border = Nem dobhatsz el t\u00e1rgyakat az ar\u00e9na fal\u00e1nak k\u00f6zel\u00e9ben. +drop.item.disabled = Nem dobhatsz el t\u00e1rgyakat az ar\u00e9n\u00e1ban. +drop.item.spawn = Nem dobhatsz el t\u00e1rgyakat, am\u00edg a spawnon vagy. +drop.team = Nem dobhatsz el {0} blokkot. +drop.wand = Eldobtad a(z) {0} ar\u00e9na kijel\u00f6l\u0151 eszk\u00f6z\u00e9t. +join.aarequired = Ez az ar\u00e9na megk\u00f6veteli az aut\u00f3matikus eloszt\u00e1st.\nL\u00e9pj be az eloszt\u00f3 kapun. +join.broadcast = {0} csatlakozott a(z) {1} csapatba. join.disabled = Ez az ar\u00e9na le van tiltva. -join.full.all = A csapatok tele vannak. -join.inventorystored = Az eszk\u00f6zt\u00e1rad vissza\u00e1ll, ha kil\u00e9psz a /warp leave paranccsal. -join.permission.single = Nincs jogod, hogy csatlakozz a(z) {0} csapathoz. +join.full.all = A \u00f6sszes csapat tele van. +join.full.single = A(z) {0} csapat tele van. +join.inventorystored = Az eszk\u00f6zt\u00e1rad vissza\u00e1ll, ha kil\u00e9psz a /war leave, vagy a /leave paranccsal. +join.permission.all = Egyik csapatban sem lehetsz, mivel nincs enged\u00e9lyed hozz\u00e1. +join.permission.single = Nincs jogod ahhoz, hogy csatlakozz a(z) {0} csapathoz. +join.progress = nem csatlakozhatsz, am\u00edg a jelenlegi j\u00e1t\u00e9k be nem fejez\u0151dik. +join.selfteam = Nem csatlakozhatsz a saj\u00e1t csapatodba. +join.team404 = Nincs ilyen csapat. Pr\u00f3b\u00e1ld ki a /teams parancsot. leave.broadcast = {0} kil\u00e9pett az ar\u00e9n\u00e1b\u00f3l. leave.inventoryrestore = Az eszk\u00f6zt\u00e1rad vissza\u00e1llt. +pvp.death.drown = {0} megfulladt +pvp.death.explosion = {0} felrobbant +pvp.death.fall = {0} kiesett az ar\u00e9n\u00e1b\u00f3l +pvp.death.fire = {0} porr\u00e1 \u00e9gett +pvp.death.other = {0} meghalt pvp.ff.disabled = Rossz helyre c\u00e9lozt\u00e1l! A csapat t\u00e1rsadat tal\u00e1ltad el. +pvp.ff.enabled = A Friendly fire be van kapcsolva. Ne s\u00e9rtsd meg a csapatt\u00e1rsaidat. +pvp.kill.adjectives = ;;hatalmas;hal\u00e1los;v\u00e9gs\u0151;pontos;brut\u00e1lis;er\u0151teljes +pvp.kill.bomb = {0} felrobbantotta {1}-t +pvp.kill.format = {0} {1} {2} {3} {4} +pvp.kill.self = {0} \u00f6ngyilkoss\u00e1gban meghalt +pvp.kill.verbs = meg\u00f6lte;meg\u00f6lte;meg\u00f6lte;kiv\u00e9gezte;megsemmis\u00edtette;meggyilkolta;els\u00f6p\u00f6rte;kiirtotta +pvp.kill.weapon.aim = ny\u00edlvessz\u0151 +pvp.kill.weapon.bow = \u00edj +pvp.kill.weapon.hand = k\u00e9z +pvp.outside.permission = Nem \u00fctheded meg azt, aki nem j\u00e1tszik. +pvp.self.notplaying = J\u00e1tszanod kell ahhoz, hogy megt\u00e1madhass valakit. +pvp.self.respawn = Nem t\u00e1madhatod meg azt, aki most \u00e9led \u00fajra. +pvp.self.spawn = Nem t\u00e1madhatsz, am\u00edg a spawnon \u00e1llsz. +pvp.target.notplaying = Az, akit meg akarsz \u00f6lni, nem j\u00e1tszik. +pvp.target.otherzone = Az, akit meg akarsz \u00f6lni, egy m\u00e1sik ar\u00e9n\u00e1ban j\u00e1tszik, +pvp.target.respawn = Az, akit meg akarsz \u00f6lni, jelenleg \u00fajra\u00e9led! +pvp.target.spawn = Az, akit meg akarsz \u00f6lni a kezd\u0151 ponton van! +sign.lobby.autoassign = Warzone\n{0}\nL\u00e9pj be az\neloszt\u00f3n. +sign.lobby.pick = Warzone\n{0}\nV\u00e1lassz\ncsapatot. +sign.lobby.warhub = \nA WarHub-ba\u00a0\n\n +sign.team.limited = {0} csapat\n{1}/{2} j\u00e1t\u00e9kos\n{3}/{4} pont\n{5} \u00e9let h\u00e1tra +sign.team.unlimited = {0} csapat\n{1}/{2} j\u00e1t\u00e9kos\n{3}/{4} pont\nv\u00e9gtelen \u00e9let +sign.warhub = War hub\n(/warhub)\nV\u00e1lassz\nar\u00e9n\u00e1t! +sign.warzone = Warzone\n{0}\n{1}/{2} j\u00e1t\u00e9kos\n{3} csapat +team.chat.enable = A csapat besz\u00e9lget\u00e9s bekapcsolva. Az \u00fczeneteket, amit k\u00fcldesz, csak a csapatt\u00e1rsaid l\u00e1tj\u00e1k. +team.chat.disable = A csapat besz\u00e9lget\u00e9s kikapcsolva. +use.anvil = Nem haszn\u00e1lhatsz \u00fcll\u0151t, mik\u00f6zben j\u00e1tszol! +use.enchant = Nem haszn\u00e1lhatsz enchant asztalt, mik\u00f6zben j\u00e1tszol! +use.ender = Nem haszn\u00e1lhatsz v\u00e9gzetl\u00e1d\u00e1t, mik\u00f6zben j\u00e1tszol! +use.item.spawn = Nem haszn\u00e1lhatsz t\u00e1rgyakat, am\u00edg a spawnon vagy +use.xpkillmeter = Ez az\u00e9rt van, mert az xpkillmeter be\u00e1ll\u00edt\u00e1s be van kapcsolva. +wand.toofar = A megc\u00e9lzott blokk t\u00fal messze van. +war.notadmin = Ezt nem csin\u00e1lhatod, ha nem vagy War admin (jog: war.admin) +war.notzm = Ezt nem csin\u00e1lhatod, ha nem vagy Z.M. (jog: war.zonemaker) +war.prefix = War> +war.title = War +warhub.none = Nincs warhub a szerveren. Pr\u00f3b\u00e1ld: /zones \u00e9s a /zone parancsot. +warhub.permission = Nincs jogod, hogy a Warhubba teleport\u00e1lj. +warhub.teleport = \u00dcdv a Warhubban. V\u00e1lassz ar\u00e9n\u00e1t! +zone.airstrike = {0} egy l\u00e9git\u00e1mad\u00e1st h\u00edvott! +zone.battle.end = A j\u00e1t\u00e9knak v\u00e9ge. A(z) {0} csapat vesztett: {1} meghalt, \u00e9s nem volt t\u00f6bb \u00e9lete a csapatnak. +zone.battle.newscores = \u00daj pontok - {0} +zone.battle.next = A j\u00e1t\u00e9k megszakadt. Ar\u00e9na \u00fajra\u00e9p\u00edt\u00e9se {0}... +zone.battle.reset = Hamarosan \u00faj j\u00e1t\u00e9k kezd\u0151dik. Ar\u00e9na \u00fajra\u00e9p\u00edt\u00e9se... +zone.battle.resetprogress = \u00dajra\u00e9p\u00edt\u00e9s folyamatban: {0}%, {1} m\u00e1sodperc alatt... +zone.battle.resetcomplete = Az ar\u00e9na \u00fajra\u00e9p\u00fcl {0} m\u00e1sodperc m\u00falva. \u00daj csata kezd\u0151dik. +zone.bomb.broadcast = {0} felrobbantotta a(z) {1} csapat spawnj\u00e1t. A(z) {2} csapat pontja 1 pont. +zone.cake.broadcast = {0} elfoglalta a(z) {1} tort\u00e1t. A(z) {2} csapat \u00f6sszes tagj\u00e1nak felt\u00f6lt\u0151d\u00f6tt az \u00e9lete. +zone.flagcapture.broadcast = {0} megszerezte a(z) {1} csapat z\u00e1szl\u00f3j\u00e1t. A(z) {2} csapatnak 1 pontja van. +zone.flagreturn.deadlock = Nem teheted le a z\u00e1szl\u00f3t, am\u00edg a csapatod z\u00e1szl\u00f3ja nincs a hely\u00e9n. +zone.flagreturn.flag = El kell vinned az ellens\u00e9g z\u00e1szl\u00f3j\u00e1t a csapatod z\u00e1szl\u00f3j\u00e1hoz. +zone.flagreturn.spawn = El kell vinned az ellens\u00e9g z\u00e1szl\u00f3j\u00e1t a csapatod indul\u00f3hely\u00e9hez. +zone.leavenotice = /war leave vagy /leave a kil\u00e9p\u00e9shez. +zone.lifepool.empty = A(z) {0} csapatnak nincs t\u00f6bb \u00e9lete. M\u00e9g egy hal\u00e1l \u00e9s elvesztik a j\u00e1t\u00e9kot. +zone.loadout.equip = Lek\u00e9rted a(z) {0} csomagot (guggolj a v\u00e1lt\u00e1shoz). +zone.loadout.reenter = Nem tudod v\u00e1ltoztatni a csomagot, miut\u00e1n kiment\u00e9l a kezd\u0151 helyr\u0151l. +zone.monument.badblock = A szobrokat a csapatod blokkj\u00e1val kell elfoglalnod. Szerezz egyet a csapatod kezd\u0151 pontj\u00e1r\u00f3l. +zone.monument.capture = A(z) {0} szobrot elfoglalta a(z) {1} csapat. +zone.monument.lose = A(z) {0} csapat elvesz\u00edtette az uralmat a(z) {1} szobor felett. +zone.monument.voodoo = A t\u00e1ncod tetszik a szobor szellem\u00e9nek. Szerezt\u00e9l {0} \u00e9letet! +zone.noteamnotice = Nem lehetsz egy ar\u00e9n\u00e1ban csapat n\u00e9lk\u00fcl. +zone.score.board404 = Enn\u00e9l az ar\u00e9n\u00e1n\u00e1l nem enged\u00e9lyezt\u00e9k az eredm\u00e9nyjelz\u0151t. +zone.score.empty = Nem kaphatsz pontot, am\u00edg egy j\u00e1t\u00e9kos be nem sz\u00e1ll egy m\u00e1sik csapatba. +zone.spawn.minplayers = Nem hagyhatod el a kezd\u0151 helyet, am\u00edg nem lesz minimum {0} j\u00e1t\u00e9kos {1} csapatban. +zone.spawn.timer = Nem hagyhatod el a spawn {0} m\u00e1sodpercig, az \u00fajra \u00e9led\u00e9s ut\u00e1n! +zone.steal.bomb.broadcast = {0} megszerezte a(z) {1} bomb\u00e1t. +zone.steal.bomb.notice = Megszerezted a(z) {0} bomb\u00e1t. Menj a m\u00e1sik csapat kezd\u0151 hely\u00e9hez. Vigy\u00e1zz, hogy ne \u00e9rintkezz senkivel, vagy felrobbansz! +zone.steal.bomb.prevent = Akad\u00e1lyozd meg, hogy {0} el\u00e9rje a kezd\u0151 helyedet a bomb\u00e1val. +zone.steal.cake.broadcast = {0} megszerezte a(z) {1} tort\u00e1t. +zone.steal.cake.notice = Megszerezted a(z) {0} tort\u00e1t. Menj a csapatod kezd\u0151 hely\u00e9hez, hogy pontot kapj \u00e9s felt\u00f6lt\u0151dj\u00f6n az \u00e9leted. +zone.steal.cake.prevent = Akad\u00e1lyozd meg, hogy {0} el\u00e9rje a kezd\u0151hely\u00e9t a tort\u00e1val! +zone.steal.flag.broadcast = {0} megszerezte a(z) {1} csapat z\u00e1szl\u00f3j\u00e1t. +zone.steal.flag.empty = Nem foglalhatod el a(z) {0} csapat z\u00e1szl\u00f3j\u00e1t, mert nincs senki a csapatban. +zone.steal.flag.notice = Megszerezted a(z) {0} csapat z\u00e1szl\u00f3j\u00e1t. Fuss a spawnodra, vagy a z\u00e1szl\u00f3dhoz, hogy a csapatod megkapja a pontot \u00e9rte. +zone.steal.flag.prevent = Akad\u00e1lyozd meg, hogy {0} el\u00e9rje a(z) {1} csapat z\u00e1szl\u00f3j\u00e1t. +zone.stealextra.bomb = Egyszerre csak egy bomb\u00e1t lophatsz! +zone.stealextra.cake = Egyszerre csak egy tort\u00e1t lophatsz! +zone.stealextra.flag = Egyszerre csak egy z\u00e1szl\u00f3t lophatsz! +zone.stealextra.other = Egyszerre csak egy dolgot lophatsz! +zone.teaminfo.format = {0}: {1} pont, {2}/{3} \u00e9let van h\u00e1tra. {4} +zone.teaminfo.none = semmi +zone.teaminfo.prefix = Csapatok: +zone.teleport = \u00dcdv a(z) {0} ar\u00e9n\u00e1ban. +zone.warp.permission = Nincs enged\u00e9lyed, hogy ebbe az ar\u00e9n\u00e1ba teleport\u00e1lj. +zone.zone404 = Nincs ilyen ar\u00e9na. +zone.zoneinfo.format = {0}:\n{1} csapat\n{2} j\u00e1t\u00e9kos +zone.zoneinfo.prefix = Ar\u00e9n\u00e1k: +zone.zoneinfo.teleport = Haszn\u00e1ld a /zone parancsot, hogy bel\u00e9pj egy ar\u00e9n\u00e1ba. diff --git a/war/src/main/resources/messages_id_ID.properties b/war/src/main/resources/messages_id_ID.properties new file mode 100644 index 0000000..3f792cc --- /dev/null +++ b/war/src/main/resources/messages_id_ID.properties @@ -0,0 +1,133 @@ +# Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) +build.denied.location = Anda tidak boleh membangun disini. +build.denied.outside = Anda hanya boleh membangun dalam sebuah warzone. +build.denied.teamblock = Anda hanya bisa menggunakan balok tim anda untuk merebut sebuah monumen. +build.denied.zone.break = Balok-balok dalam warzone ini tidak bisa dirusak ! +build.denied.zone.multteam = Anda telah memiliki sebuah balok {0}. +build.denied.zone.outside = Anda tidak bisa merusak sebuah warzone yang tidak anda mainkan. +build.denied.zone.place = Anda tidak bisa menaruh balok dalam warzone ini. +build.denied.zone.type = Anda tidak bisa mengubah tipe balok ini. +command.console = Anda tidak bisa melakukan ini jika anda tidak sedang bermain. +command.disabled = Anda hanya boleh menggunakan perintah War (contoh : /leave) jika anda sedang bermain. +command.tp.init = Tunggu untuk {0} detik sebelum anda akan diteleportasi. Gerakan yang dilakukan atau cedera yang anda alami akan membatalkan timer +command.tp.moved = Teleportasi telah dibatalkan karena anda telah bergerak. +command.tp.damaged = Teleportasi telah dibatalkan karena anda telah dicederai. +command.tp.success = Anda telah diteleportasi. Terima kasih untuk kesabaran anda. +drop.bomb.broadcast = {0} menjatuhkan bom {1} ! +drop.bomb.disabled = Anda tidak bisa menjatuhkan barang saat mencuri bom. Apa yang anda sedang lakukan ?! Larilah menuju ke spawn musuhmu ! +drop.cake.broadcast = {0} menjatuhkan kue {1} ! +drop.cake.disabled = Anda tidak bisa menjatuhkan barang saat mencuri kue. Apa yang anda sedang lakukan ?! Larilah ! +drop.flag.broadcast = {0} menjatuhkan bendera {1} ! +drop.flag.disabled = Anda tidak bisa menjatuhkan barang saat mencuri bendera. Apa yang anda sedang lakukan ?! Larilah ! +drop.item.border = Anda tidak bisa menjatuhkan barang saat berada didekat perbatasan warzone. +drop.item.disabled = Anda tidak bisa menjatuhkan barang dalam warzone ini. +drop.item.spawn = Anda tidak bisa menjatuhkan barang saat anda masih didalam spawn. +drop.team = Anda tidak bisa menjatuhkan balok {0}. +drop.wand = Anda menjatuhkan tongkat zona {0}. +join.aarequired = Warzone ini memerlukan anda untuk dimasukkan ke sebuah tim secara otomatis. Anda dimohon untuk memasuki gerbang autoassign. +join.broadcast = {0} memasuki tim {1} +join.disabled = Warzone ini sedang ditutup. +join.full.all = Semua tim sudah penuh. +join.full.single = Tim {0} sudah penuh. +join.inventorystored = Barang-barang anda akan disimpan sampai anda keluar dengan /war leave. +join.permission.all = Anda tidak memiliki izin untuk semua tim yang ada dalam warzone ini. +join.permission.single = Anda tidak memiliki izin untuk memasuki tim {0}. +join.progress = Anda tidak bisa memasuki sebuah pertempuran yang sedang berlangsung dalam zona ini. +join.selfteam = Anda tidak bisa memasuki tim anda sendiri. +join.team404 = Tim itu tidak dapat ditemukan. Cobalah menggunakan /teams untuk sebuah daftar. +leave.broadcast = {0} meninggalkan zona ini. +leave.inventoryrestore = Barang-barang anda sedang dipulihkan. +pvp.death.drown = {0} tenggelam +pvp.death.explosion = {0} meledak +pvp.death.fall = {0} jatuh kedalam kematian +pvp.death.fire = {0} terbakar menjadi abu +pvp.death.other = {0} meninggal +pvp.ff.disabled = Serangan anda meleset ! Target anda adalah rekan setim anda ! +pvp.ff.enabled = Anda bisa menyerang rekan setim anda ! Tapi, dimohon untuk tidak membunuh mereka. +pvp.kill.adjectives = ;;hebat;mematikan;bagus;tepat;brutal;sangat kuat +pvp.kill.bomb = {0} telah meledakkan {1} ! +pvp.kill.format = {1} {2} {3} {4} yang dimiliki {0} +pvp.kill.self = {0} membunuh dirinya sendiri +pvp.kill.verbs = membunuh;membunuh;membunuh;menyelesaikan;menumpaskan;membunuh;mengoyak;membinasakan +pvp.kill.weapon.aim = bidikan +pvp.kill.weapon.bow = bow +pvp.kill.weapon.hand = tangan +pvp.outside.permission = Anda tidak bisa menyerang pemain diluar warzone. +pvp.self.notplaying = Anda harus bermain di warzone untuk menyerang. +pvp.self.respawn = Anda tidak bisa menyerang saat sedang respawn ! +pvp.self.spawn = Anda tidak bisa menyerang saat sedang dalam spawn ! +pvp.target.notplaying = Target anda sedang tidak bermain dalam warzone ini. +pvp.target.otherzone = Target anda sedang bermain dalam warzone lain. +pvp.target.respawn = Target anda sedang bermain dalam warzone lain. +pvp.target.spawn = Target anda masih berada dalam spawn mereka ! +sign.lobby.autoassign = Warzone\n{0}\nMasuklah ke\ngerbang autoassign +sign.lobby.pick = Warzone\n{0}\nPilihlah tim\nanda +sign.lobby.warhub = \nKe pusat War\n +sign.team.limited = Tim {0}\n{1}/{2} pemain\n{3}/{4} poin\n{5} jiwa tersisa +sign.team.unlimited = Team {0}\n{1}/{2} pemain \n{3}/{4} poin \nJiwa tak terbatas +sign.warhub = Pusat War\n(/warhub)\nPilihlah perang\nanda ! +sign.warzone = Warzone\n{0}\n{1}/{2} pemain\n{3} tim +team.chat.enable = Mode chat tim telah dinyalakan. Pesan chat biasa anda akan diterima oleh anggota tim anda saja. +team.chat.disable = Mode chat tim telah dimatikan. +use.anvil = Anda tidak bisa menggunakan anvil dalam warzone ini ! +use.enchant = Anda tidak bisa menggunakan enchantment table dalam warzone ini ! +use.ender = Anda tidak bisa menggunakan ender chest saat bermain dalam sebuah warzone ! +use.item.spawn = Anda tidak bisa menggunakan barang apapun saat berada dalam spawn. +use.xpkillmeter = Ini terjadi karena pilihan xpkillmeter yang dinyalakan. +wand.toofar = Balok target anda terlalu jauh. +war.notadmin = Anda tidak bisa melakukan ini jika anda bukan seorang admin War (izin : war.admin). +war.notzm = Anda tidak bisa melakukan ini jika anda bukan seorang pembuat warzone (izin : war.zonemaker) +war.prefix = War> +war.title = War +warhub.none = Tidak ada pusat War dalam server War ini. Cobalah /zones dan /zone. +warhub.permission = Anda tidak mempunyai izin untuk menggunakan teleportasi untuk pergi ke pusat War. +warhub.teleport = Selamat datang di pusat War. Pilihlah perang anda ! +zone.airstrike = {0} telah meluncurkan serangan udara ! +zone.battle.end = Perang ini telah selesai. Tim {0} telah kalah : {1} meninggal dan tidak ada jiwa yang tersisa dalam kumpulan jiwa-jiwa mereka. +zone.battle.newscores = Skor baru - {0} +zone.battle.next = Perang terganggu. Warzone {0} sedang di-reset... +zone.battle.reset = Perang baru akan segera dimulai. Warzone sedang di-reset... +zone.battle.resetprogress = Kemajuan reset : {0}%, {1} detik... +zone.battle.resetcomplete = Warzone akan di-reset dalam {0} detik. Sebuah perang baru dimulai. +zone.bomb.broadcast = {0} meledakkan spawn tim {1}. Tim {2} mencetak satu poin. +zone.cake.broadcast = {0} telah merebut kue {1}. Tim {2} mencetak satu poin dan mendapat kumpulan jiwa-jiwa yang penuh. +zone.flagcapture.broadcast = {0} telah merebut bendera tim {1}. Tim {2} mencetak satu poin. +zone.flagreturn.deadlock = Anda tidak bisa merebut bendera musuh anda sampai bendera tim anda kembali. +zone.flagreturn.flag = Anda harus merebut bendera musuh anda dalam tempat bendera tim anda. +zone.flagreturn.spawn = Anda harus merebut bendera musuh anda dalam spawn tim anda. +zone.leavenotice = Gunakan /war leave untuk meninggalkan zona ini. +zone.lifepool.empty = Kumpulan jiwa-jiwa tim {0} sudah kosong. Mereka akan kalah jika seseorang dalam tim mereka meninggal ! +zone.loadout.equip = Loadout {0} telah diperalati (Tekan SHIFT untuk mengganti) +zone.loadout.reenter = Tidak bisa mengganti loadout setelah meninggalkan spawn. +zone.monument.badblock = Anda harus merebut monumen dengan balok wol yang memiliki warna yang sama dengan warna tim anda. Ambil satu dari spawn anda. +zone.monument.capture = Monumen {0} telah direbut oleh tim {1}. +zone.monument.lose = Tim {0} kehilangan kendali monumen {1}. +zone.monument.voodoo = Tarian anda menyenangkan voodoo monumen. Anda mendapat {0} hati ! +zone.noteamnotice = Anda tidak bisa memasuki warzone tanpa sebuah tim. +zone.score.board404 = Warzone ini tidak menyediakan sebuah papan skor. +zone.score.empty = Anda tidak bisa mencetak skor sampai seseorang memasuki sebuah tim lain. +zone.spawn.minplayers = Anda tidak bisa meninggalkan spawn sampai ada minimum {0} pemain dalam setidaknya {1} tim. +zone.spawn.timer = Anda tidak bisa meninggalkan spawn untuk {0} detik setelah respawn ! +zone.steal.bomb.broadcast = {0} memiliki bom {1}. +zone.steal.bomb.notice = Anda memiliki bom {0}. Pergilah ke spawn tim lain untuk mencetak skor. Hindari kontak dari orang lain, atau anda akan meledak ! +zone.steal.bomb.prevent = Halangi {0} yang bertujuan untuk mencapai spawn anda dengan bomnya ! +zone.steal.cake.broadcast = {0} memiliki kue {1}. +zone.steal.cake.notice = Anda memiliki kue {0}. Pergilah ke spawn tim anda untuk mencetak skor dan mengisi kembali kumpulan jiwa-jiwa tim anda. +zone.steal.cake.prevent = Halangi {0} yang bertujuan untuk mencapai spawnnya dengan kuenya ! +zone.steal.flag.broadcast = {0} mencuri bendera tim {1}. +zone.steal.flag.empty = Anda tidak bisa mencuri bendera tim {0} karena tidak ada pemain dalam tim itu. +zone.steal.flag.notice = Anda memiliki bendera tim {0}. Pergilah ke spawn tim anda atau tempat bendera tim anda untuk merebutnya ! +zone.steal.flag.prevent = Halangi {0} yang bertujuan untuk mencapai spawn tim {1} atau bendera mereka ! +zone.stealextra.bomb = Anda hanya boleh mencuri satu bom pada waktu yang sama ! +zone.stealextra.cake = Anda hanya boleh mencuri satu kue pada waktu yang sama ! +zone.stealextra.flag = Anda hanya boleh mencuri satu bendera pada waktu yang sama ! +zone.stealextra.other = Anda hanya boleh mencuri satu barang pada waktu yang sama ! +zone.teaminfo.format = {0} : {1} poin, {2}/{3} jiwa tersisa. {4} +zone.teaminfo.none = tidak ada +zone.teaminfo.prefix = Daftar tim : +zone.teleport = Selamat datang di warzone {0}. +zone.warp.permission = Anda tidak memiliki izin untuk menggunakan teleportasi untuk pergi ke warzone itu. +zone.zone404 = Warzone itu tidak dapat ditemukan. +zone.zoneinfo.format = {0} : {1} tim, {2} pemain +zone.zoneinfo.prefix = Daftar warzone : +zone.zoneinfo.teleport = Gunakan /zone untuk menggunakan teleportasi untuk pergi ke sebuah warzone. diff --git a/war/src/main/resources/messages_it.properties b/war/src/main/resources/messages_it.properties new file mode 100644 index 0000000..2917e6e --- /dev/null +++ b/war/src/main/resources/messages_it.properties @@ -0,0 +1,114 @@ +# Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) +build.denied.location = Non puoi costruire qui. +build.denied.outside = Puoi costruire solo dentro le Warzones. +build.denied.teamblock = Puoi usare solamente i blocchi del tuo team per catturare i monumenti. +build.denied.zone.break = I blocchi in questa warzone non sono distruttibili. +build.denied.zone.multteam = hai gi\u00e0 un blocco {0} +build.denied.zone.outside = Non puoi distruggere in una warzone se non ci stai giocando. +build.denied.zone.place = Non puoi piazzare blocchi in questa warzone. +build.denied.zone.type = Non puoi modificare questo tipo di blocco. +command.console = Non puoi fare questo se non sei in una partita. +command.disabled = Puoi usare solamente i comandi del War ( es. /leave ) mentre giochi. +command.tp.moved = Il teletrasporto \u00e8 stato cancellato poich\u00e8 ti sei mosso. +command.tp.damaged = Il teletrasporto \u00e8 stato cancellato poich\u00e8 hai subito danno. +command.tp.success = Sei stato teletrasportato. Grazie per la pazienza. +drop.bomb.broadcast = {0} ha lanciato la {1} bomba! +drop.bomb.disabled = Non puoi lanciare oggetti mentre stai portando una bomba. Che diavolo stai facendo?! Corri allo spawn del tuo nemico! +drop.cake.broadcast = {0} ha lanciato la {1} torta! +drop.cake.disabled = Non puoi lanciare oggetti mentre stai portando una torta. Che diavolo stai facendo?! Corri! +drop.flag.broadcast = {0} Ha perso la bandiera {1} +drop.flag.disabled = Non puoi lanciare oggetti mentre stai portando una bandiera. Che diavolo stai facendo?! Corri! +drop.item.border = Non puoi droppare oggetti vicino il bordo dell'arena +drop.item.disabled = Non puoi lanciare oggetti in questa warzone. +drop.item.spawn = Non puoi lanciare oggetti mentre sei ancora nello spawn. +drop.team = Non puoi lanciare i blocchi {0} +drop.wand = Hai lanciato l'ascia per l'arena {0} +join.aarequired = Quest'area richiede che tu sia assegnato automaticamente ad un team. Per favore entra dal portale automatico. +join.broadcast = {0} \u00e8 entrato nel team {1} +join.disabled = Questa warzone \u00e8 stata disabilitata. +join.full.all = Tutti i team sono pieni. +join.full.single = Il team {0} \u00e8 pieno. +join.inventorystored = Il tuo inventario \u00e8 stato salvato, ti verr\u00e0 restituito non appena uscirai dall'arena usando /war leave. +join.permission.all = Non hai il permesso per entrare in alcun team disponibile di questa zona. +join.permission.single = Non hai il permesso per entrare nel team {0}. +join.progress = Non puoi entrare in quest'arena, c'\u00e8 una battaglia in corso. +join.selfteam = Non puoi entrare nel tuo stesso team. +join.team404 = Non ho trovato questo team. Prova usando /teams per visualizzare la lista. +leave.broadcast = {0} \u00e8 uscito dall'arena. +leave.inventoryrestore = Ti stiamo ridando il tuo inventario. +pvp.death.drown = {0} \u00e8 affogato +pvp.death.explosion = {0} \u00e8 esploso +pvp.death.fall = {0} ha fatto una morte molto umiliante +pvp.death.fire = {0} ha bruciato fino a diventare croccante +pvp.death.other = {0} \u00e8 morto +pvp.ff.disabled = Hai sbagliato ad attaccare! Hai colpito un tuo compagno. +pvp.ff.enabled = Il fuoco amico \u00e8 acceso! Per favore, non far del male ai tuoi compagni. +pvp.kill.adjectives = ;;potente;mortale;fine;precisa;brutale;potente +pvp.kill.bomb = {0} ha fatto esplodere {1} +pvp.kill.self = {0} ha commesso un suicidio +pvp.kill.verbs = ucciso;ucciso;ucciso;finito;ammutilato;assassinato;obliterato;sterminato +pvp.kill.weapon.aim = scopo +pvp.kill.weapon.bow = arco +pvp.kill.weapon.hand = mano +pvp.outside.permission = Non puoi attaccare utenti fuori dalle warzone. +pvp.self.notplaying = Hai bisogno di essere in una warzone per attaccare. +pvp.self.respawn = Non puoi attaccare mentre stai respawnando! +pvp.self.spawn = Non puoi attaccare mentre sei nello spawn! +pvp.target.notplaying = Il tuo obbiettivo non \u00e8 attualmente nella warzone +pvp.target.otherzone = Il tuo obbiettivo sta giocando in un altra arena. +pvp.target.respawn = L'obbiettivo sta respawnando! +pvp.target.spawn = L'obbiettivo \u00e8 ancora all'interno dello spawn! +sign.lobby.autoassign = Warzone\n{0}\nEntra nel por-\ntale automatico +sign.lobby.pick = Warzone\n{0}\n\nScegli il team +sign.lobby.warhub = \nAlla War hub\n +sign.team.limited = Team {0}\n{1}/{2} giocatori\n{3}/{4} pts\n{5} vite rimaste +sign.team.unlimited = Team {0}\n{1}/{2} giocatori\n{3}/{4} pts\nvite illimitate +sign.warhub = War hub\n(/warhub)\nScegli la\ntua battaglia +sign.warzone = Warzone\n{0}\n{1}/{2} giocatori\n{3} team +team.chat.enable = chat del team abilitata. I tuoi messaggi verranno ricevuti solo dal tuo team. +team.chat.disable = Chat del team disabilitata. +use.anvil = Non puoi usare le anvil in quest'arena! +use.enchant = Non puoi usare i tavoli dell'incantamento in quest'arena! +use.ender = Non puoi usare le ender chest mentre stai giocando in un'arena +use.item.spawn = Non puoi usare gli oggetti mentre sei ancora nello spawn. +use.xpkillmeter = l'opzione xpkillmeter \u00e8 stata abilitata. +wand.toofar = Il tuo obbiettivo \u00e8 troppo lontano. +war.notadmin = Non puoi eseguire quest'azione se non sei un admin (permesso: war.admin). +war.notzm = Non puoi eseguire questa azione se non sei un creatore (permesso: war.zonemaker). +war.prefix = War> +war.title = War> +warhub.none = Non sono presenti warhub su questo server. Prova con /zones e/o /zone +warhub.permission = Non hai il permesso per teletrasportarti alla warhub +warhub.teleport = Benvenuto alla WarHub. Scegli la tua battaglia! +zone.airstrike = {0} ha chiamato un bombardamento! +zone.battle.end = La battaglia \u00e8 terminata. Team {0} ha perso: {1} morti e non hanno pi\u00f9 vite. +zone.battle.newscores = Nuovi punteggi - {0} +zone.battle.next = La battaglia \u00e8 stata interrotta. Resettando la WarZone {0}... +zone.battle.reset = Una nuova battaglia inizier\u00e0 presto. Resettando la WarZone... +zone.battle.resetprogress = Progresso di reset: {0}%, {1} secondi +zone.bomb.broadcast = {0} ha fatto esplodere lo spawn del team {1}. Il Team {2} riceve un punto. +zone.cake.broadcast = {0} ha catturato la torta {1}. Il team {2} riceve un punto e riceve nuovamente tutte le vite. +zone.flagcapture.broadcast = {0} ha catturato la bandiera del team {1}. Il Team {2} riceve un punto. +zone.flagreturn.deadlock = Non puoi catturare la bandiera del nemico finch\u00e8 la vostra non torna al piedistallo. +zone.flagreturn.flag = Per catturare la bandiera nemica devi portarla a quella del tuo team. +zone.flagreturn.spawn = Hai bisogno di andare allo spawn del tuo team per catturare la bandiera nemica. +zone.leavenotice = Usa /war leave per uscire dalla zona +zone.lifepool.empty = Il team {0} non ha pi\u00f9 vite, un ultima morte e perderanno la battaglia! +zone.loadout.equip = Equipaggiato l'equipaggiamento {0} (accovacciati per cambiare). +zone.loadout.reenter = Non sar\u00e0 pi\u00f9 possibile modificare l'equipaggiamento dopo esser usciti dallo spawn. +zone.monument.badblock = Devi catturare il monumento con un blocco della lana del tuo team, prendine uno allo spawn del tuo team. +zone.monument.capture = Il monumento {0} \u00e8 stato catturato dal team {1} +zone.monument.lose = Team {0} ha perso il controllo del monumento {1} +zone.monument.voodoo = La tua danza ha commosso il modumento voodo, hai ricevuto {0} cuore/i! +zone.noteamnotice = Non puoi stare dentro ad una warzone senza essere in un team. +zone.score.empty = Non puoi eseguire alcun punteggio finch\u00e8 almeno un giocatore non entra nel team nemico. +zone.spawn.minplayers = Non puoi lasciare lo spawn finch\u00e8 non c'\u00e8 almeno un minimo di {0} giocatori nel team {1} +zone.steal.bomb.broadcast = {0} ha la bomba {1}. +zone.steal.cake.broadcast = {0} ha la torta {1}. +zone.teaminfo.none = nulla +zone.teleport = Benvenuto alla warzone {0}. +zone.warp.permission = Non hai il permesso per teletrasportarti alla Warzone. +zone.zone404 = Warzone non trovata. +zone.zoneinfo.format = {0}: {1} team, {2} giocatori +zone.zoneinfo.prefix = Warzones: +zone.zoneinfo.teleport = Usa /zone per teletrasportarti ad una warzone. diff --git a/war/src/main/resources/messages_ko_KR.properties b/war/src/main/resources/messages_ko_KR.properties index 3229ca8..5ff567b 100644 --- a/war/src/main/resources/messages_ko_KR.properties +++ b/war/src/main/resources/messages_ko_KR.properties @@ -1,70 +1,74 @@ # Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) -build.denied.location = \uc774\uacf3\uc5d0\uc11c \ube14\ub7ed\uc744 \uc124\uce58\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +build.denied.location = \uc5ec\uae30\uc11c \ube14\ub7ed\uc744 \uc124\uce58\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. build.denied.outside = \uc804\uc7c1\uad6c\uc5ed \ub0b4\uc5d0\uc11c\ub9cc \ube14\ub7ed\uc744 \uc124\uce58\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. -build.denied.teamblock = \uc790\uc2e0\uc758 \ud300 \ube14\ub7ed\ub9cc\uc744 \uc774\uc6a9\ud574 \uc804\uc7c1\uad6c\uc5ed \uc911\uc2ec\uc5d0 \uc788\ub294 \uae43\ubc1c\ub85c \uaf42\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. +build.denied.teamblock = \ub2f9\uc2e0\uc758 \ud300 \ube14\ub7ed\ub9cc\uc744 \uc774\uc6a9\ud574 \uae43\ubc1c\ub85c \uaf42\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. build.denied.zone.break = \uc774 \uc804\uc7c1\uc5d0\uc11c \ube14\ub7ed\uc744 \ud30c\uad34\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. build.denied.zone.multteam = \uc774\ubbf8 {0} \ube14\ub7ed\uc744 \uac00\uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4. build.denied.zone.outside = \uc804\uc7c1\uc5d0 \ucc38\uc5ec\ud558\uc9c0 \uc54a\uace0 \uc804\uc7c1\uad6c\uc5ed\uc5d0\uc11c \ube14\ub7ed\uc744 \ud30c\uad34\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. build.denied.zone.place = \uc774 \uc804\uc7c1\uc5d0\uc11c \ube14\ub7ed\uc744 \uc124\uce58\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. build.denied.zone.type = \uc804\uc7c1\uc5d0\uc11c \uc774 \ube14\ub7ed\uc744 \uc124\uce58 \ub610\ub294 \ud30c\uad34\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. command.console = \ucf58\uc194\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4. -command.disabled = \uac8c\uc784\ub3c4\uc911\uc5d0\ub294 \uc804\uc7c1\uac8c\uc784 \ucee4\ub9e8\ub4dc (\uc608\uc2dc: /leave) \uc774\uc678\uc5d0\ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. -drop.bomb.broadcast = {0} \uc774(\uac00) {1} \uc5d0\uac8c \ud3ed\ud0c4\uc744 \ud22c\ud558\ud588\uc2b5\ub2c8\ub2e4! -drop.bomb.disabled = \ud3ed\ud0c4\uc744 \ud6d4\uce58\uba74 \uc544\uc774\ud15c\uc744 \ub5a8\uc5b4\ub728\ub9b4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc9c0\uae08 \ub2f9\uc7a5 \uc801\uad70 \uae30\uc9c0\uc758 \uc2a4\ud3f0\uc73c\ub85c \uac00\uc2ed\uc2dc\uc624! -drop.cake.broadcast = {0} \uc774(\uac00) {1} \uc5d0\uac8c \ud3ed\ud0c4\uc744 \ud22c\ud558\ud588\uc2b5\ub2c8\ub2e4! -drop.cake.disabled = \ucf00\uc774\ud06c\ub97c \ud6d4\uce60 \ub54c \uc544\uc774\ud15c\uc744 \ub5a8\uc5b4\ub728\ub9b4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ube68\ub9ac \ub6f0\uc2ed\uc2dc\uc624! -drop.flag.broadcast = {0} \uc774(\uac00) {1} \uc5d0\uac8c \uae43\ubc1c\uc744 \ub5a8\uc5b4\ub728\ub838\uc2b5\ub2c8\ub2e4! -drop.flag.disabled = \uae43\ubc1c\uc744 \ud6d4\uce60 \ub54c \uc544\uc774\ud15c\uc744 \ub5a8\uc5b4\ub728\ub9b4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ube68\ub9ac \ub6f0\uc2ed\uc2dc\uc624! +command.disabled = \uac8c\uc784\ub3c4\uc911\uc5d0\ub294 \uc804\uc7c1\uac8c\uc784 \ucee4\ub9e8\ub4dc (\uc608: /leave) \uc678\uc5d0\ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +command.tp.init = \ud154\ub808\ud3ec\ud2b8\uac00 {0} \ucd08 \ud6c4 \uc2e4\ud589\ub418\ubbc0\ub85c \uc7a0\uc2dc\ub9cc \uae30\ub2e4\ub824\uc8fc\uc138\uc694. \uc6c0\uc9c1\uc774\uac70\ub098 \ub370\ubbf8\uc9c0\ub97c \ubc1b\uc73c\uba74 \ud154\ub808\ud3ec\ud2b8\uac00 \ucde8\uc18c\ub429\ub2c8\ub2e4. +command.tp.moved = \uc6c0\uc9c1\uc5ec\uc11c \ud154\ub808\ud3ec\ud2b8\uac00 \ucde8\uc18c\ub418\uc5c8\uc2b5\ub2c8\ub2e4. +command.tp.damaged = \ub370\ubbf8\uc9c0\ub97c \ubc1b\uc544\uc11c \ud154\ub808\ud3ec\ud2b8\uac00 \ucde8\uc18c\ub418\uc5c8\uc2b5\ub2c8\ub2e4. +command.tp.success = \ud154\ub808\ud3ec\ud2b8 \ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uae30\ub2e4\ub824 \uc8fc\uc154\uc11c \uac10\uc0ac\ud569\ub2c8\ub2e4. +drop.bomb.broadcast = {0} \uc774/\uac00 {1} \ud3ed\ud0c4\uc744 \ud22c\ud558\ud588\uc2b5\ub2c8\ub2e4! +drop.bomb.disabled = \ud3ed\ud0c4\uc744 \uac00\uc9c0\uace0 \uc788\ub294 \ub3d9\uc548, \ub2f9\uc2e0\uc740 \uc544\uc774\ud15c\uc744 \ub5a8\uc5b4\ub728\ub9b4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc9c0\uae08 \ub2f9\uc7a5 \uc801\uad70 \uae30\uc9c0\uc758 \uc2a4\ud3f0\uc73c\ub85c \uac00\uc2ed\uc2dc\uc624! +drop.cake.broadcast = {0} \uc774/\uac00 {1} \ucf00\uc774\ud06c\ub97c \ud22c\ud558\ud588\uc2b5\ub2c8\ub2e4! +drop.cake.disabled = \ucf00\uc774\ud06c\ub97c \uac00\uc9c0\uace0 \uc788\ub294 \ub3d9\uc548, \ub2f9\uc2e0\uc740 \uc544\uc774\ud15c\uc744 \ub5a8\uc5b4\ub728\ub9b4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ube68\ub9ac \ub6f0\uc2ed\uc2dc\uc624! +drop.flag.broadcast = {0} \uc774/\uac00 {1} \uae43\ubc1c\uc744 \ub5a8\uc5b4\ub728\ub838\uc2b5\ub2c8\ub2e4! +drop.flag.disabled = \uae43\ubc1c\uc744 \uac00\uc9c0\uace0 \uc788\ub294 \ub3d9\uc548, \ub2f9\uc2e0\uc740 \uc544\uc774\ud15c\uc744 \ub5a8\uc5b4\ub728\ub9b4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ube68\ub9ac \ub6f0\uc2ed\uc2dc\uc624! drop.item.border = \uc804\uc7c1\uad6c\uc5ed \uacbd\uacc4\uc120 \uadfc\ucc98\uc5d0\uc11c \uc544\uc774\ud15c\uc744 \ub5a8\uc5b4\ub728\ub9b4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. -drop.item.disabled = \uc774 \uc804\uc7c1\uc5d0\uc11c \uc544\uc774\ud15c\uc744 \ub5a8\uc5b4\ub728\ub9b4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +drop.item.disabled = \uc774 \uc804\uc7c1\uad6c\uc5ed\uc5d0\uc11c\ub294 \uc544\uc774\ud15c\uc744 \ub5a8\uc5b4\ub728\ub9b4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. drop.item.spawn = \uae30\uc9c0 \uc2a4\ud3f0\uad6c\uc5ed\uc5d0\uc11c\ub294 \uc544\uc774\ud15c\uc744 \ub5a8\uc5b4\ub728\ub9b4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. drop.team = {0} \ube14\ub7ed\uc744 \ub5a8\uc5b4\ub728\ub9b4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. drop.wand = \uc804\uc7c1\uad6c\uc5ed\uc5d0 {0} wand \ub97c \ub5a8\uc5b4\ub728\ub838\uc2b5\ub2c8\ub2e4. join.aarequired = \uc804\uc7c1\uc744 \ucc38\uac00\ud558\ub824\uba74 \ud300\uc5d0 \uac00\uc785\ub418\uc5b4\uc57c\ub429\ub2c8\ub2e4. \uc804\uc7c1\ucc38\uac00 \uac8c\uc774\ud2b8\ub97c \ud1b5\uacfc\ud558\uc2ed\uc2dc\uc624. -join.broadcast = {0} \uc774(\uac00) {1} \ud300\uc73c\ub85c \uc804\uc7c1\uc5d0 \ucc38\uac00\ud588\uc2b5\ub2c8\ub2e4. +join.broadcast = {0} \uc774/\uac00 {1} \ud300\uc5d0 \ucc38\uc5ec\ud588\uc2b5\ub2c8\ub2e4. join.disabled = \uc774 \uc804\uc7c1\uc740 \ud604\uc7ac \ube44\ud65c\uc131\ud654 \ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. join.full.all = \uc774 \uc804\uc7c1\uc758 \ubaa8\ub4e0 \ud300 \uc778\uc6d0\uc218\uac00 \ucc3c\uc2b5\ub2c8\ub2e4. join.full.single = {0} \ud300 \uc778\uc6d0\uc218\uac00 \ucc3c\uc2b5\ub2c8\ub2e4. join.inventorystored = \ub2f9\uc2e0\uc758 \uc778\ubca4\ud1a0\ub9ac\uac00 \ube44\uc6cc\uc84c\uc9c0\ub9cc \uc800\uc7a5\ub418\uc5b4 \uc804\uc7c1\uc774 \ub05d\ub098\uac70\ub098 /war leave \ub97c \uc785\ub825\ud558\uba74 \ub2e4\uc2dc \ubcf5\uad6c\ub429\ub2c8\ub2e4. join.permission.all = \uc774 \uc804\uc7c1\uc758 \uc5b4\ub5a4 \ud300\uc5d0\ub3c4 \ucc38\uac00\ud560 \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. -join.permission.single = {0} \ud300\uc5d0 \ucc38\uac00\ud560 \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. -join.progress = \uc774 \uc804\uc7c1\uc740 \ud604\uc7ac \uc9c4\ud589\uc911\uc774\uc5ec\uc11c \ucc38\uac00\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. -join.selfteam = \uc774\ubbf8 \uc790\uc2e0\uc758 \uc804\uc7c1 \ud300\uc5d0 \uc18c\uc18d\ub41c \ud300\uc73c\ub85c \ucc38\uac00\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. -join.team404 = \uc785\ub825\ud55c \ud300\uc744 \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. /teams \ub97c \uc785\ub825\ud574 \ud300 \ubaa9\ub85d\uc744 \ubcf4\uc2ed\uc2dc\uc624. -leave.broadcast = {0} \uc774(\uac00) \uc804\uc7c1\uc5d0\uc11c \ub098\uac14\uc2b5\ub2c8\ub2e4. -leave.inventoryrestore = \ub2f9\uc2e0\uc758 \uc778\ubca4\ud1a0\ub9ac\uac00 \ub2e4\uc2dc \ubcf5\uad6c\ub418\uc5c8\uc2b5\ub2c8\ub2e4. -pvp.death.drown = {0} \uc774(\uac00) \ubb3c\uc5d0 \ube60\uc838 \uc8fd\uc5c8\uc2b5\ub2c8\ub2e4 -pvp.death.explosion = {0} \uc774(\uac00) \ud3ed\ubc1c\ub85c \uc8fd\uc5c8\uc2b5\ub2c8\ub2e4 -pvp.death.fall = {0} \uc774(\uac00) \ub099\uc0ac\ud574\uc11c \uc8fd\uc5c8\uc2b5\ub2c8\ub2e4 -pvp.death.fire = {0} \uc774(\uac00) \ubd88\uc5d0 \ud0c0\uc11c \uc8fd\uc5c8\uc2b5\ub2c8\ub2e4 -pvp.death.other = {0} \uc774(\uac00) \uc8fd\uc5c8\uc2b5\ub2c8\ub2e4 -pvp.ff.disabled = \uc790\uc2e0\uc758 \ud300\uc6d0\uc744 \uacf5\uaca9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc801\uc744 \uacf5\uaca9\ud558\uc2ed\uc2dc\uc624 -pvp.ff.enabled = \ud300\ub3d9\ub8cc\ub97c \uacf5\uaca9\ud558\uc9c0 \uc54a\ub294\uac8c \uc88b\uaca0\uc2b5\ub2c8\ub2e4. -pvp.kill.adjectives = ;;\uac15\ub825\ud55c;\uc8fd\uc74c\uc758;\ud6cc\ub96d\ud55c;\uc815\ud655\ud55c;\uc794\uc778\ud55c;\ub9e4\uc6b0\uac15\ub825\ud55c -pvp.kill.bomb = {0} \uc774(\uac00) {1} \uc744(\ub97c) \ud130\ub728\ub838\uc2b5\ub2c8\ub2e4! +join.permission.single = \ub2f9\uc2e0\uc740 {0} \ud300\uc5d0 \ucc38\uc5ec\ud560 \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. +join.progress = \uc774 \uad6c\uc5ed\uc740 \uc774\ubbf8 \uac8c\uc784\uc774 \uc9c4\ud589\uc911\uc774\uc5ec\uc11c \ucc38\uc5ec\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +join.selfteam = \uc774\ubbf8 \uc774 \ud300\uc5d0 \ucc38\uc5ec\ud574 \uc788\uc2b5\ub2c8\ub2e4. +join.team404 = \uc785\ub825\ud55c \ud300\uc744 \ucc3e\uc744 \uc218 \uc5c6\uc5c8\uc2b5\ub2c8\ub2e4. \ud300 \ubaa9\ub85d\uc744 \ubcf4\ub824\uba74: /teams +leave.broadcast = {0} \uc774/\uac00 \uad6c\uc5ed\uc744 \ub098\uac14\uc2b5\ub2c8\ub2e4. +leave.inventoryrestore = \ub2f9\uc2e0\uc758 \uc778\ubca4\ud1a0\ub9ac\uac00 \uc774\uc804 \uc0c1\ud0dc\ub85c \ubcf5\uad6c\ub418\uc5c8\uc2b5\ub2c8\ub2e4. +pvp.death.drown = {0} \uc774/\uac00 \ubb3c\uc5d0 \ube60\uc838 \uc8fd\uc5c8\uc2b5\ub2c8\ub2e4 +pvp.death.explosion = {0} \uc774/\uac00 \ud3ed\ubc1c\ub85c \uc8fd\uc5c8\uc2b5\ub2c8\ub2e4 +pvp.death.fall = {0} \uc774/\uac00 \ub099\uc0ac\ub85c \uc8fd\uc5c8\uc2b5\ub2c8\ub2e4 +pvp.death.fire = {0} \uc774/\uac00 \ubd88\uc5d0 \ubc14\uc0ad\ud558\uac8c \ud0c0\uc11c \uc8fd\uc5c8\uc2b5\ub2c8\ub2e4 +pvp.death.other = {0} \uc774/\uac00 \uc8fd\uc5c8\uc2b5\ub2c8\ub2e4 +pvp.ff.disabled = \uc798\ubabb\ub41c \uc0ac\ub78c\uc744 \ub54c\ub838\uc2b5\ub2c8\ub2e4! \uc774 \uc0ac\ub78c\uc740 \ub2f9\uc2e0\uc758 \ud300\uc785\ub2c8\ub2e4. +pvp.ff.enabled = \ud300 \ub3d9\ub8cc\ub97c \uacf5\uaca9\ud558\uc9c0 \uc54a\ub294\uac8c \uc88b\uaca0\uc2b5\ub2c8\ub2e4. +pvp.kill.adjectives = ;;\uac15\ud55c;\uc8fd\uc74c\uc758;\ud6cc\ub96d\ud55c;\uc815\ud655\ud55c;\uc794\uc778\ud55c;\uac15\ub825\ud55c +pvp.kill.bomb = {0} \uc774/\uac00 {1} \uc744/\ub97c \ud130\ub728\ub838\uc2b5\ub2c8\ub2e4! pvp.kill.format = {0} \uc758 {1} {2} {3} {4} -pvp.kill.self = {0} \uc774(\uac00) \uc790\uc0b4\ud588\uc2b5\ub2c8\ub2e4 +pvp.kill.self = {0} \uc774/\uac00 \uc790\uc0b4\ud588\uc2b5\ub2c8\ub2e4 pvp.kill.verbs = \uc5d0 \uc8fd\uc740;\uc5d0 \uc8fd\uc740;\uc5d0 \uc8fd\uc740;\uc5d0 \uc8fd\uc740;\uc5d0 \uc8fd\uc740;\uc5d0 \uc8fd\uc740;\uc5d0 \uc8fd\uc740;\uc5d0 \uc8fd\uc740 -pvp.kill.weapon.aim = \ubaa9\ud45c +pvp.kill.weapon.aim = \ubaa9\uc801 pvp.kill.weapon.bow = \ud65c pvp.kill.weapon.hand = \uc190 pvp.outside.permission = \uc804\uc7c1\uad6c\uc5ed \ubc16\uc5d0 \uc788\ub294 \ud50c\ub808\uc774\uc5b4\ub97c \uacf5\uaca9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. -pvp.self.notplaying = \uc804\uc7c1\uc911\uc5d0\ub9cc \uacf5\uaca9\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4. -pvp.self.respawn = \ub9ac\uc2a4\ud3f0 \ub3c4\uc911 \uacf5\uaca9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4! -pvp.self.spawn = \uc2a4\ud3f0\uad6c\uc5ed \uc548\uc5d0 \uc788\uc744 \ub54c \uacf5\uaca9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4! +pvp.self.notplaying = \uc804\uc7c1\uad6c\uc5ed \uc548\uc5d0\uc11c \uac8c\uc784 \uc911\uc5d0\ub9cc \uacf5\uaca9\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4. +pvp.self.respawn = \ub9ac\uc2a4\ud3f0 \uc911 \uacf5\uaca9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4! +pvp.self.spawn = \uc2a4\ud3f0\uad6c\uc5ed \uc548\uc5d0\uc11c \uacf5\uaca9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4! pvp.target.notplaying = \uc804\uc7c1\uc5d0 \ucc38\uac00\ud558\uc9c0 \uc54a\uc740 \ud50c\ub808\uc774\uc5b4\ub97c \uacf5\uaca9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. pvp.target.otherzone = \ub2e4\ub978 \uc804\uc7c1\uac8c\uc784\uc5d0 \ucc38\uac00\ud55c \ud50c\ub808\uc774\uc5b4\ub97c \uacf5\uaca9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. pvp.target.respawn = \ub9ac\uc2a4\ud3f0\uc911\uc778 \ud50c\ub808\uc774\uc5b4\ub97c \uacf5\uaca9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4! pvp.target.spawn = \uc2a4\ud3f0\uc9c0\uc5ed\uc5d0 \uc788\ub294 \ud50c\ub808\uc774\uc5b4\ub97c \uacf5\uaca9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4! -sign.lobby.autoassign = {0}\n\uc804\uc7c1\n\uac8c\uc774\ud2b8\ub97c\n\ud1b5\uacfc\ud558\uc2ed\uc2dc\uc624. -sign.lobby.pick = \uc804\uc7c1\uad6c\uc5ed\n{0} \n \n\ud300\uc744 \uc120\ud0dd\ud558\uc2ed\uc2dc\uc624. -sign.lobby.warhub = \n\uc804\uc7c1\ub85c\ube44\ub85c \uac00\uae30\n\n -sign.team.limited = {0} \ud300\n\uc778\uc6d0\uc218: {1}/{2}\n\ud3ec\uc778\ud2b8: {3}/{4}\n\ub0a8\uc740 \ubaa9\uc228: {5} -sign.team.unlimited = {0} \ud300\n\uc778\uc6d0\uc218: {1}/{2}\n\ud3ec\uc778\ud2b8: {3}/{4}\n\ubaa9\uc228 \ubb34\uc81c\ud55c -sign.warhub = \uc804\uc7c1\ub85c\ube44\n(/warhub)\n\uc6d0\ud558\ub294 \uc804\uc7c1\uc885\ub958\n\ub97c \uc120\ud0dd\ud558\uc2ed\uc2dc\uc624! -sign.warzone = \uc804\uc7c1\uad6c\uc5ed\n{0}\n\uc778\uc6d0\uc218: {1}/{2}\n\ud300: {3} \uac1c +sign.lobby.autoassign = \uc804\uc7c1\uad6c\uc5ed\n{0}\n\uac8c\uc784\ucc38\uc5ec \uac8c\uc774\ud2b8\ub97c\n\ud1b5\uacfc\ud558\uc2ed\uc2dc\uc624. +sign.lobby.pick = \uc804\uc7c1\uad6c\uc5ed\n{0} \n \n\ud300\uc744 \uc120\ud0dd\ud558\uc138\uc694. +sign.lobby.warhub = \n\uc804\uc7c1 \ub85c\ube44\ub85c \uac00\uae30\n +sign.team.limited = {0} \ud300\n\uc720\uc800: {1}/{2}\n\ud3ec\uc778\ud2b8: {3}/{4}\n\ub0a8\uc740 \ubaa9\uc228: {5} +sign.team.unlimited = {0} \ud300\n\uc720\uc800: {1}/{2}\n\ud3ec\uc778\ud2b8: {3}/{4}\n\ubaa9\uc228 \ubb34\uc81c\ud55c +sign.warhub = \uc804\uc7c1\ub85c\ube44\n(/warhub)\n\uc804\uc7c1 \uc885\ub958\ub97c\n\uc120\ud0dd\ud558\uc138\uc694! +sign.warzone = \uc804\uc7c1\uad6c\uc5ed\n{0}\n\uc720\uc800: {1}/{2}\n\ud300: {3} team.chat.enable = \ud300\ub07c\ub9ac \ucc44\ud305\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2f9\uc2e0\uc758 \uc77c\ubc18\ucc44\ud305 \uba54\uc2dc\uc9c0\uac00 \ub2f9\uc2e0\uc758 \ud300\uc5d0\uac8c\ub9cc \ubcf4\uc77c \uac83\uc785\ub2c8\ub2e4. -team.chat.disable = \ud300\ub07c\ub9ac \ucc44\ud305\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +team.chat.disable = \ud300\ub07c\ub9ac \ucc44\ud305\ud560 \uc218 \uc5c6\ub3c4\ub85d \uc124\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4. use.anvil = \uc774 \uc804\uc7c1\uc5d0\uc11c \ubaa8\ub8e8\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4! use.enchant = \uc774 \uc804\uc7c1\uc5d0\uc11c \ub3c4\uad6c\ub97c \uc778\ucc48\ud2b8\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4! use.ender = \uc5d4\ub354\uc0c1\uc790\ub97c \uc804\uc7c1 \uc911 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4! @@ -78,13 +82,13 @@ war.title = \uc804\uc7c1 warhub.none = \uc774 \uc11c\ubc84\uc5d0 \uc804\uc7c1\ub85c\ube44\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. /zones \ub97c \uc785\ub825\ud574 \ucc38\uc5ec\uac00\ub2a5\ud55c \uc804\uc7c1\uad6c\uc5ed\uc744 \uc54c\uc544\ubcf4\uc2ed\uc2dc\uc624. warhub.permission = \uc804\uc7c1\ub85c\ube44\ub85c \ud154\ub808\ud3ec\ud2b8\ud560 \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. warhub.teleport = \uc804\uc7c1\ub85c\ube44\uc5d0 \uc624\uc2e0\uac83\uc744 \ud658\uc601\ud569\ub2c8\ub2e4! \uc6d0\ud558\ub294 \uc804\uc7c1\uc744 \uc120\ud0dd\ud558\uc2ed\uc2dc\uc624. -zone.airstrike = {0} \uc774(\uac00) \uc5d0\uc5b4\uc2a4\ud2b8\ub77c\uc774\ucee4\uac00 \ub418\uc5c8\uc2b5\ub2c8\ub2e4. +zone.airstrike = {0} \uc774/\uac00 \uc5d0\uc5b4\uc2a4\ud2b8\ub77c\uc774\ucee4\uac00 \ub418\uc5c8\uc2b5\ub2c8\ub2e4. zone.battle.end = \uc804\uc7c1\uc774 \uc885\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. {1} \uba85\uc774 \uc8fd\uace0 \ubaa9\uc228\uc774 \ub354 \uc774\uc0c1 \uc5c6\uc5b4 {0} \ud300\uc774 \uc84c\uc2b5\ub2c8\ub2e4. zone.battle.newscores = \uc2e0\uaddc \uc810\uc218 - {0} -zone.battle.next = {0} \uc804\uc7c1\uad6c\uc5ed\uc744 \uc7ac\uc2dc\uc791\ud558\uba74\uc11c \uc804\uc7c1\uc774 \uc911\ub2e8\ub418\uc5c8\uc2b5\ub2c8\ub2e4.. +zone.battle.next = {0} \uc804\uc7c1\uad6c\uc5ed\uc744 \uc911\ub2e8\ud558\uace0 \uc7ac\uc2dc\uc791\ud569\ub2c8\ub2e4.. zone.battle.reset = \uace7 \uc0c8\ub85c\uc6b4 \uc804\uc7c1\uc774 \uc2dc\uc791\ub429\ub2c8\ub2e4. \uc804\uc7c1\uad6c\uc5ed\uc774 \uc7ac\uc2dc\uc791\uc911\uc785\ub2c8\ub2e4.. zone.battle.resetprogress = {0}% \uc7ac\uc2dc\uc791\uc911, {1}\ucd08.. -zone.battle.resetcomplete = \uc804\uc7c1\uc774 \uc7ac\uc2dc\uc791\ub418\ub294\ub370 {0} \ucd08\uac00 \uac78\ub838\uc2b5\ub2c8\ub2e4. \uc0c8\ub85c\uc6b4 \uc804\uc7c1\uc774 \uc2dc\uc791\ub429\ub2c8\ub2e4. +zone.battle.resetcomplete = \uc804\uc7c1\uc774 {0} \ucd08 \uc548\uc5d0 \uc7ac\uc2dc\uc791\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc0c8\ub85c\uc6b4 \uc804\uc7c1\uc774 \uc2dc\uc791\ub429\ub2c8\ub2e4. zone.bomb.broadcast = {0} \ud300\uc774 {1} \ud300\uc758 \uc2a4\ud3f0\uc7a5\uc18c\ub97c \ud3ed\ubc1c\uc2dc\ucf30\uc2b5\ub2c8\ub2e4. {2} \ud300\uc774 1\uc810\uc744 \ud68d\ub4dd\ud588\uc2b5\ub2c8\ub2e4. zone.cake.broadcast = {0} \ud300\uc774 {1} \ud300\uc758 \ucf00\uc774\ud06c\ub97c \uc7a1\uc558\uc2b5\ub2c8\ub2e4. {2} \ud300\uc774 1\uc810\uc744 \ud68d\ub4dd\ud558\uace0 \ubaa9\uc228\uc774 \ubaa8\ub450 \ucc44\uc6cc\uc9d1\ub2c8\ub2e4. zone.flagcapture.broadcast = {0} \ud300\uc774 {1} \ud300\uc758 \uae43\ubc1c\uc744 \uc7a1\uc558\uc2b5\ub2c8\ub2e4. {2} \ud300\uc774 1\uc810\uc744 \ud68d\ub4dd\ud588\uc2b5\ub2c8\ub2e4. @@ -101,19 +105,19 @@ zone.monument.lose = {0} \ud300\uc774 {1} \uc911\uc559\ud0d1\uc744 \uc783\uc5c8\ zone.monument.voodoo = \uc911\uc559\ud0d1\uc744 \uc5bb\uc5b4 {0} \uac1c\uc758 \ubaa9\uc228\uc744 \uc5bb\uc5c8\uc2b5\ub2c8\ub2e4! zone.noteamnotice = \uc804\uc7c1\uac8c\uc784\uc758 \ud300\uc5d0 \uc18c\uc18d\ub418\uc9c0 \uc54a\uc73c\uba74 \uc804\uc7c1\uad6c\uc5ed\uc5d0 \ub4e4\uc5b4\uac08 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. zone.score.board404 = \uc774 \uc804\uc7c1\uad6c\uc5ed\uc740 \uc2a4\ucf54\uc5b4\ubcf4\ub4dc\uac00 \uc0ac\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. -zone.score.empty = \ub2f9\uc2e0\uc740 \uc801\ud300\uc5d0 \ucd5c\uc18c \ud55c\uba85\uc774\uc0c1\uc774 \ub4e4\uc5b4\uc624\uc9c0 \uc54a\ub294 \ud55c, \uc810\uc218\ub97c \ub0bc \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +zone.score.empty = \uc801\ud300\uc758 \uc778\uc6d0\uc218\uac00 \ucd5c\uc18c \ud55c\uba85\uc774\uc0c1\uc774\uc5ec\uc57c\ub9cc \uacf5\uaca9\ud574 \uc810\uc218\ub97c \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. zone.spawn.minplayers = \ucd5c\uc18c {1} \uac1c\uc758 \ud300\uc5d0\uc11c {0} \uba85\uc774\uc0c1\uc758 \ud50c\ub808\uc774\uc5b4\uac00 \uc788\uc5b4\uc57c\ub9cc \uc2a4\ud3f0\uc9c0\uc5ed\uc5d0\uc11c \ub098\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4. zone.spawn.timer = \ub9ac\uc2a4\ud3f0 \ud6c4 {0} \ucd08 \ub3d9\uc548 \uc2a4\ud3f0\uc9c0\uc5ed\uc5d0\uc11c \ub098\uc62c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4! -zone.steal.bomb.broadcast = {0} \uc774(\uac00) {1} \ud3ed\ud0c4\uc744 \uac00\uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4. +zone.steal.bomb.broadcast = {0} \uc774/\uac00 {1} \ud3ed\ud0c4\uc744 \uac00\uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4. zone.steal.bomb.notice = \ub2f9\uc2e0\uc740 {0} \ud3ed\ud0c4\uc744 \uac00\uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc801\ud300\uc758 \uc2a4\ud3f0\uc9c0\uc5ed\uae4c\uc9c0 \uac00\uba74 \uc810\uc218\ub97c \uc5bb\uc2b5\ub2c8\ub2e4. \ub9cc\uc57d \ub2e4\ub978\uc0ac\ub78c\uc774 \ub2f9\uc2e0\uc744 \ub54c\ub9ac\uba74 \ubaa8\ub450 \ud3ed\ubc1c\ud560\uac83\uc785\ub2c8\ub2e4! zone.steal.bomb.prevent = {0} \ub85c\ubd80\ud130 \ub2f9\uc2e0\uc758 \uc2a4\ud3f0\uc9c0\uc5ed\uc5d0 \ud3ed\ud0c4\uc744 \uac00\uc838\uc624\ub294\uac83\uc744 \ub9c9\uc73c\uc2ed\uc2dc\uc624! -zone.steal.cake.broadcast = {0} \uc774(\uac00) {1} \ucf00\uc78c\uc744 \uac00\uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4. -zone.steal.cake.notice = \ub2f9\uc2e0\uc740 {0} \ucf00\uc78c\uc744 \uac00\uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ucf00\uc78c\uc744 \ub4e4\uace0 \ub2f9\uc2e0\uc758 \ud300 \uc2a4\ud3f0\uc9c0\uc5ed\uc73c\ub85c \uac00\uba74 1\uc810\uc744 \uc5bb\uace0 \ub2f9\uc2e0\uc758 \ubaa9\uc228\uc744 \ucc44\uc6b8 \uc218 \uc788\uc2b5\ub2c8\ub2e4! -zone.steal.cake.prevent = {0} \ub85c\ubd80\ud130 \uadf8\ub4e4\uc758 \ud300 \uc2a4\ud3f0\uc9c0\uc5ed\uc5d0 \ucf00\uc78c\uc744 \uac00\uc838\uac00\ub294\uac83\uc744 \ub9c9\uc73c\uc2ed\uc2dc\uc624! -zone.steal.flag.broadcast = {0} \uc774(\uac00) {1} \ud300\uc758 \uae43\ubc1c\uc744 \ud6d4\ucce4\uc2b5\ub2c8\ub2e4! +zone.steal.cake.broadcast = {0} \uc774/\uac00 {1} \ucf00\uc774\ud06c\uc744 \uac00\uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4. +zone.steal.cake.notice = {0} \ucf00\uc774\ud06c\ub97c \uac00\uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uc81c \uc8fd\uc9c0 \uc54a\uace0 \ub2f9\uc2e0\uc758 \ud300 \uc2a4\ud3f0\uc5d0 \ub3c4\ub2ec\ud558\uba74 1\uc810\uc744 \uc5bb\uace0 \ub2f9\uc2e0\uc758 \ubaa9\uc228\uc744 \ucc44\uc6b8 \uc218 \uc788\uc2b5\ub2c8\ub2e4! +zone.steal.cake.prevent = {0} \uc774/\uac00 \uadf8\uc758 \ud300 \uc2a4\ud3f0\uc5d0 \ucf00\uc774\ud06c\ub97c \uac00\uc9c0\uace0 \uac00\ub294\uac83\uc744 \ub9c9\uc73c\uc2ed\uc2dc\uc624! +zone.steal.flag.broadcast = {0} \uc774/\uac00 {1} \ud300\uc758 \uae43\ubc1c\uc744 \ud6d4\ucce4\uc2b5\ub2c8\ub2e4. zone.steal.flag.empty = \ub2f9\uc2e0\uc740 {0} \ud300\uc5d0 \ud50c\ub808\uc774\uc5b4\uac00 \uc5c6\uae30 \ub54c\ubb38\uc5d0 \uc774 \ud300\uc758 \uae43\ubc1c\uc744 \ud6d4\uce60 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. zone.steal.flag.notice = \ub2f9\uc2e0\uc740 {0} \ud300\uc758 \uae43\ubc1c\uc744 \uac00\uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ub2f9\uc2e0\uc758 \ud300 \uc2a4\ud3f0\uc9c0\uc5ed\uc73c\ub85c \uac00\uc838\uac00\uc2ed\uc2dc\uc624! -zone.steal.flag.prevent = {0} \ub85c\ubd80\ud130 \uae43\ubc1c\uc744 {1} \ud300\uc758 \uc2a4\ud3f0\uc9c0\uc5ed\uc73c\ub85c \uac00\uc838\uac00\ub294\uac83\uc744 \ub9c9\uc73c\uc2ed\uc2dc\uc624! +zone.steal.flag.prevent = {0} \uc774/\uac00 {1} \ud300\uc758 \uc2a4\ud3f0 \ub610\ub294 \uae43\ubc1c\uc5d0 \ub3c4\ub2ec\ud558\uc9c0 \ubabb\ud558\ub3c4\ub85d \ub9c9\uc73c\uc2ed\uc2dc\uc624. zone.stealextra.bomb = \ud3ed\ud0c4\uc740 \ud55c\ubc88\uc5d0 \ud55c\uac1c\uc529\ub9cc \ud6d4\uce60 \uc218 \uc788\uc2b5\ub2c8\ub2e4. zone.stealextra.cake = \ucf00\uc774\ud06c\ub294 \ud55c\ubc88\uc5d0 \ud55c\uac1c\uc529\ub9cc \ud6d4\uce60 \uc218 \uc788\uc2b5\ub2c8\ub2e4. zone.stealextra.flag = \uae43\ubc1c\uc740 \ud55c\ubc88\uc5d0 \ud55c\uac1c\uc529\ub9cc \ud6d4\uce60 \uc218 \uc788\uc2b5\ub2c8\ub2e4. @@ -121,9 +125,9 @@ zone.stealextra.other = \ud55c\ubc88\uc5d0 \ud55c \uc885\ub958(\ud3ed\ud0c4, \uc zone.teaminfo.format = {0}: {1} \uc810, {2}/{3} \uac1c\uc758 \ubaa9\uc228, {4} zone.teaminfo.none = \uc5c6\uc74c zone.teaminfo.prefix = \ud300: -zone.teleport = {0} \uc804\uc7c1\uc5d0 \uc624\uc2e0\uac83\uc744 \ud658\uc601\ud569\ub2c8\ub2e4 +zone.teleport = \uc804\uc7c1\uad6c\uc5ed {0} \uc5d0 \uc624\uc2e0\uac83\uc744 \ud658\uc601\ud569\ub2c8\ub2e4. zone.warp.permission = \uc804\uc7c1\uac8c\uc784\uc73c\ub85c \ud154\ub808\ud3ec\ud2b8\ud560 \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. zone.zone404 = \ub2f9\uc2e0\uc774 \uc785\ub825\ud55c \uc804\uc7c1\uad6c\uc5ed\uc744 \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. zone.zoneinfo.format = {0}: {1} \uac1c\uc758 \ud300, {2} \uba85\uc758 \ud50c\ub808\uc774\uc5b4 zone.zoneinfo.prefix = \uc804\uc7c1\uad6c\uc5ed: -zone.zoneinfo.teleport = \uc6d0\ud558\ub294 \uc804\uc7c1\uac8c\uc784\uc73c\ub85c \ud154\ub808\ud3ec\ud2b8\ud558\ub824\uba74 /zone <\uc804\uc7c1\uad6c\uc5ed-\uc774\ub984> \uc744 \uc785\ub825\ud558\uc2ed\uc2dc\uc624. \ No newline at end of file +zone.zoneinfo.teleport = \ud2b9\uc815 \uc804\uc7c1\uad6c\uc5ed\uc73c\ub85c \ud154\ub808\ud3ec\ud2b8\ud558\ub824\uba74 /zone <\uad6c\uc5ed-\uc774\ub984> \uc744 \uc785\ub825\ud558\uc2ed\uc2dc\uc624. diff --git a/war/src/main/resources/messages_lv_LV.properties b/war/src/main/resources/messages_lv_LV.properties new file mode 100644 index 0000000..84552cf --- /dev/null +++ b/war/src/main/resources/messages_lv_LV.properties @@ -0,0 +1,11 @@ +build.denied.outside = J\u016bs varat celt tikai ar\u0113n\u0101. +build.denied.zone.break = Taj\u0101 ar\u0113n\u0101 nevar lauzt blokus! +build.denied.zone.multteam = Jums jau ir {0} bloks. +build.denied.zone.outside = J\u016bs nevarat lauzt blokus ar\u0113n\u0101, kam\u0113r neesat iek\u0161\u0101. +build.denied.zone.place = J\u016bs nevarat celt \u0161aj\u0101 ar\u0113n\u0101! +build.denied.zone.type = J\u016bs nevarat main\u012bt tadus blokus. +command.console = Komandu lieto\u0161ana ir at\u013cauta tikai sp\u0113l\u0113. +command.disabled = J\u016bs varat lietot tikai War komandas (piem. /leave), kam\u0113r sp\u0113lejat. +drop.bomb.broadcast = {0} pazaud\u0113ja bumbu "{1}"! +drop.bomb.disabled = J\u016bs nevarat izmest lietas, kam\u0113r nesat bumbu. Skrien uz pretejo b\u0101zi! +join.broadcast = {0} piesl\u0113dz\u0101s pie {1}. diff --git a/war/src/main/resources/messages_nl.properties b/war/src/main/resources/messages_nl.properties new file mode 100644 index 0000000..5b608a9 --- /dev/null +++ b/war/src/main/resources/messages_nl.properties @@ -0,0 +1,133 @@ +# Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) +build.denied.location = Je kan hier niet bouwen. +build.denied.outside = Je kan alleen in warzones bouwen. +build.denied.teamblock = Je kan alleen je team blokken gebruiken om de monumenten te veroveren. +build.denied.zone.break = Deze blokken zijn onbreekbaar in de warzone! +build.denied.zone.multteam = Je hebt al een {0} blok. +build.denied.zone.outside = Je kan geen blokken slopen in de warzone waar je niet in het spelen bent. +build.denied.zone.place = Je kan geen blokken plaatsen in de warzone. +build.denied.zone.type = Je kan dit type blok niet veranderen. +command.console = Je kan dit niet doen als je niet in de game bent. +command.disabled = Je kan alleen war commands (bv. /leave) gebruiken tijdens het spel. +command.tp.init = Wacht {0} seconden voor teleporteren. Bewegen of beschadiging zal de timer annuleren. +command.tp.moved = Teleportatie geannuleerd door beweging. +command.tp.damaged = Teleportatie geannuleerd door beschadiging. +command.tp.success = Je bent geteleporteerd. Bedankt voor je geduld. +drop.bomb.broadcast = {0} heeft de {1} bom laten vallen! +drop.bomb.disabled = Je kan geen items droppen terwijl je de bom steelt. Wat doe je?! REN! +drop.cake.broadcast = {0} heeft de {1} cake laten vallen! +drop.cake.disabled = Je kan geen blokken droppen terwijl je de cake steelt! Wat doe je? REN! +drop.flag.broadcast = {0} Heeft de {1} vlag laten vallen! +drop.flag.disabled = Je kan geen blokken droppen terwijl je de vlag steelt. Wat doe je?! REN! +drop.item.border = Je kan geen items droppen bij de zone grens. +drop.item.disabled = Je kan geen items droppen in deze warzone. +drop.item.spawn = Je kan geen items droppen als je nog in spawn bent. +drop.team = Je kan geen {0} blokken droppen. +drop.wand = Je hebt de zone {0} wand gedropt. +join.aarequired = Dit oorlogsgebied vereist jou om automatisch toegewezen te worden aan een team. In plaats daarvan, betreed de auto assign poort. +join.broadcast = {0} Heeft team {1} toegetreden. +join.disabled = De warzone is uitgeschakeld. +join.full.all = Alle teams zijn vol. +join.full.single = Team {0} is vol. +join.inventorystored = Je inventory is opgeslagen totdat je de warzone verlaat met /war leave. +join.permission.all = Je hebt geen toestemming om de teams in deze warzone te joinen. +join.permission.single = Je hebt geen toestemming om het team {0} te joinen. +join.progress = Je kunt geen gevecht dat al bezig is betreden in deze zone. +join.selfteam = Je kunt niet je eigen team joinen. +join.team404 = Dit team is niet gevonden. Probeer /teams voor de lijst met teams. +leave.broadcast = {0} heeft de zone verlaten. +leave.inventoryrestore = Je inventory is herstelt. +pvp.death.drown = {0} is verdronken! +pvp.death.explosion = {0} is ontploft. +pvp.death.fall = {0} is dood gevallen. +pvp.death.fire = {0} is levend verbrand. +pvp.death.other = {0} is gestorven. +pvp.ff.disabled = Je aanval ging niet raak! Je doelwit is op je eigen team. +pvp.ff.enabled = Vriendenvuur is aan, doe je teamleden geen pijn! +pvp.kill.adjectives = ;;machtig;dodelijk;fijn;precies;brutaal;krachtig +pvp.kill.bomb = {0} heeft {1} laten exploderen! +pvp.kill.format = {0}''s {1} {2} {3} {4} +pvp.kill.self = {0} heeft zelfmoord gepleegt. +pvp.kill.verbs = vermoord;vermoord;vermoord;vermoord;vermoord;vermoord;vermoord;vermoord +pvp.kill.weapon.aim = richten +pvp.kill.weapon.bow = boog +pvp.kill.weapon.hand = hand +pvp.outside.permission = Je kunt geen spelers aanvallen buiten de warzones. +pvp.self.notplaying = Je moet in een warzone spelen wil je spelers aanvallen. +pvp.self.respawn = Je kunt niet aanvallen als je aan het respawnen bent! +pvp.self.spawn = Je kunt niet aanvallen als je nog in de spawn bent! +pvp.target.notplaying = Je doelwit is niet in deze warzone aan het spelen! +pvp.target.otherzone = Je doelwit is in een andere warzone aan het spelen! +pvp.target.respawn = Je doelwit is nog aan het respawnen! +pvp.target.spawn = Je doelwit is nog in spawn! +sign.lobby.autoassign = Oorlogsgebied\n{0}\nBetreed de auto-\nGeef aan als deur. +sign.lobby.pick = Warzone\n{0}\n\nKies jouw team. +sign.lobby.warhub = \nNaar War hub\n\n +sign.team.limited = Team {0}\n{1}/{2} spelers\n{3}/{4} ptn\n{5} levens over +sign.team.unlimited = Team {0}\n{1}/{2} spelers\n{3}/{4} ptn\noneindig levens +sign.warhub = War hun\n(/warhub)\nKies jouw\ngevecht! +sign.warzone = Oorlogsgebied\n{0}\n{1}/{2} spelers\n{3} teams +team.chat.enable = Team chat ingeschakeld. Jouw reguliere berichten worden alleen ontvangen door jouw teamgenoten. +team.chat.disable = Team chat uitgeschakeld. +use.anvil = Je kan geen aambeelden gebruiken in dit oorlogsgebied! +use.enchant = Je kan geen betovering tafels gebruiken in dit oorlogsgebied! +use.ender = Je kan geen ender kisten gebruiken tijdens het spelen in een oorlogsgebied! +use.item.spawn = Je kan geen items gebruiken wanneer je in de spawn bent. +use.xpkillmeter = Dit is vanwege de xpkillmeter optie die is uitgeschakeld. +wand.toofar = Het doelwit blok is te ver weg. +war.notadmin = Je kan dit niet doen als je geen War admin bent (permissie war.admin). +war.notzm = Je kan dit niet doen als je geen warzone maker bent (permissie war.zonemaker). +war.prefix = War> +war.title = War +warhub.none = Geen warhub op deze War server. Probeer /zones en /zone. +warhub.permission = Je hebt geen toegang om naar de War hub te teleporteren. +warhub.teleport = Welkom bij de War hub. Kies jouw gevecht. +zone.airstrike = {0} heeft een luchtaanval opgeroepen! +zone.battle.end = Het gevecht is over. Team {0} heeft verloren: {1} gingen dood en er waren geen levens over in hun levenspot. +zone.battle.newscores = Nieuwe scores - {0} +zone.battle.next = Het gevecht was onderbroken. Warzone {0} resetten... +zone.battle.reset = Een nieuw gevecht zal snel beginnen. Warzone resetten... +zone.battle.resetprogress = Reset vooruitgang: {0}%, {1} seconden... +zone.battle.resetcomplete = Reset oorlogsgebied in {0} seconden. Een nieuw gevecht begint. +zone.bomb.broadcast = {0} blies team {1}''s spawn op. Team {2} scoort \u00e9\u00e9n punt. +zone.cake.broadcast = {0} veroverde taart {1}. Team {2} scoort \u00e9\u00e9n punt en krijg een volle levenspot. +zone.flagcapture.broadcast = {0} veroverde team {1}''s vlag. Team {2} scoort \u00e9\u00e9n punt. +zone.flagreturn.deadlock = Je kan de tegenstander's flag niet veroveren totdat jouw team's vlag is teruggekeerd. +zone.flagreturn.flag = Je moet de tegenstander's vlag veroveren bij jouw team's vlag. +zone.flagreturn.spawn = Je moet de tegenstander's vlag veroveren bij jouw team's spawn. +zone.leavenotice = Gebruik /war leave om de zone te verlaten. +zone.lifepool.empty = Team {0}''s levenspot is leeg. Nog \u00e9\u00e9n keer dood gaan en ze verliezen het gevecht. +zone.loadout.equip = Voorzien van loadout {0} (sluipen om over te schakelen). +zone.loadout.reenter = Kan loadout niet omwisselen na het verlaten van de spawn. +zone.monument.badblock = Je moet een monument veroveren met een blok van jouw team's wol kleur. Haal een van jouw team spawn. +zone.monument.capture = Monument {0} is veroverd door team {1}. +zone.monument.lose = Team {0} verloor controle over monument {1}. +zone.monument.voodoo = Jouw dans bevalt het monument''s voodoo. Je krijgt {0} hart(en)! +zone.noteamnotice = Je kan niet in een oorlogsgebied zijn zonder een team. +zone.score.board404 = Dit oorlogsgebied heeft scorebord niet ingeschakeld. +zone.score.empty = Je kan niet scoren totdat tenminste \u00e9\u00e9n speler zich bij het andere team heeft aangesloten. +zone.spawn.minplayers = Je kan de spawn niet verlaten totdat er een minimum van {0} speler(s) op tenminste {1} team(s) zijn. +zone.spawn.timer = Je kan de spawn niet verlaten voor {0} seconde(n) na respawnen. +zone.steal.bomb.broadcast = {0} heeft bom {1}. +zone.steal.bomb.notice = Je hebt bom {0}. Bereik het andere team's spawn om te scoren. Wordt niet aangeraakt door anderen, anders blaas je op! +zone.steal.bomb.prevent = Voorkom {0} van het bereiken van jouw spawn met de bom. +zone.steal.cake.broadcast = {0} heeft taart {1}. +zone.steal.cake.notice = Je hebt taart {0}. Bereik jouw team's spawn om te scoren en je team's levenspot te hervullen. +zone.steal.cake.prevent = Voorkom {0} van het bereiken van hun spawn met de taart! +zone.steal.flag.broadcast = {0} stal team {1}''s vlag. +zone.steal.flag.empty = Je kan team {0}''s vlag niet stelen sinds er geen spelers zijn in dat team. +zone.steal.flag.notice = Je hebt team {0}''s flag. Bereik jouw team's spawn of flag om hem te veroveren. +zone.steal.flag.prevent = Voorkom {0} van het bereiken van team {1}''s spawn of flag. +zone.stealextra.bomb = Je kan maar \u00e9\u00e9n bom tegelijk stelen! +zone.stealextra.cake = Je kan maar \u00e9\u00e9n taart tegelijk stelen! +zone.stealextra.flag = Je kan maar \u00e9\u00e9n vlag tegelijk stelen! +zone.stealextra.other = Je kan maar \u00e9\u00e9n ding tegelijk stelen! +zone.teaminfo.format = {0}: {1} punten. {2}/{3} levens over. {4} +zone.teaminfo.none = geen +zone.teaminfo.prefix = Teams: +zone.teleport = Welkom bij oorlogsgebied {0}. +zone.warp.permission = Je hebt geen toegang om te teleporteren naar het oorlogsgebied. +zone.zone404 = Het oorlogsgebied kon niet gevonden worden. +zone.zoneinfo.format = {0}: {1} teams, {2} spelers. +zone.zoneinfo.prefix = Oorlogsgebieden: +zone.zoneinfo.teleport = Gebruik /zone om te teleporteren naar een oorlogsgebied. \ No newline at end of file diff --git a/war/src/main/resources/messages_no.properties b/war/src/main/resources/messages_no.properties index 8fc88ee..b6e9bc6 100644 --- a/war/src/main/resources/messages_no.properties +++ b/war/src/main/resources/messages_no.properties @@ -6,17 +6,17 @@ build.denied.zone.break = Blokkene i denne krigssonen er uknuselige! build.denied.zone.multteam = Du har allerede en {0}-blokk build.denied.zone.outside = Du kan ikke \u00f8delegge en krigssone du ikke spiller i build.denied.zone.place = Du kan ikke sette ut blokker i denne krigssonen -build.denied.zone.type = Du kan ikke endre slike blokker +build.denied.zone.type = Du kan ikke endre denne type blokker command.console = Du m\u00e5 v\u00e6re i et spill for \u00e5 gj\u00f8re det command.disabled = Du kan bare bruke War-kommandoer (som /leave) n\u00e5r du spiller drop.bomb.broadcast = {0} mistet {1}-bomben! -drop.bomb.disabled = Du kan ikke droppe ting mens du stjeler bomber. Hva gj\u00f8r du?! L\u00f8p til fiendens spawn! +drop.bomb.disabled = Du kan ikke droppe ting mens du stjeler bomber. Hva gj\u00f8r du?! L\u00f8p til fiendens spaw!n drop.cake.broadcast = {0} mistet {1}-kaken -drop.cake.disabled = Du kan ikke droppe ting mens du stjeler kaker. Hva gj\u00f8r du?! L\u00f8p til fiendens spawn! +drop.cake.disabled = Du kan ikke droppe ting mens du stjeler kaker. Hva gj\u00f8r du?! L\u00f8p! drop.flag.broadcast = {0} mistet {1}-flagget -drop.flag.disabled = Du kan ikke droppe ting mens du stjeler flagget. Hva gj\u00f8r du?! L\u00f8p!! +drop.flag.disabled = Du kan ikke droppe ting mens du stjeler flagget. Hva gj\u00f8r du?! L\u00f8p! drop.item.border = Du kan ikke droppe ting s\u00e5 n\u00e6r sone-grensen -drop.item.disabled = Du kan ikke droppe ting i denne sonen +drop.item.disabled = Du kan ikke droppe ting i denne krigssonen drop.item.spawn = Du kan ikke droppe ting i spawn drop.team = Du kan ikke droppe {0} blokker drop.wand = Du droppet wand til sone {0} @@ -126,4 +126,4 @@ zone.warp.permission = Du har ikke lov til \u00e5 teleportere til sonen zone.zone404 = Fant ikke krigssonen zone.zoneinfo.format = {0}: {1} lag, {2} spillere zone.zoneinfo.prefix = Krigssoner: -zone.zoneinfo.teleport = Bruk /zone for \u00e5 teleportere til en sone \ No newline at end of file +zone.zoneinfo.teleport = Bruk /zone for \u00e5 teleportere til en sone diff --git a/war/src/main/resources/messages_pl.properties b/war/src/main/resources/messages_pl.properties index 1a992e4..52c438a 100644 --- a/war/src/main/resources/messages_pl.properties +++ b/war/src/main/resources/messages_pl.properties @@ -9,6 +9,10 @@ build.denied.zone.place = Nie mo\u017cesz k\u0142a\u015b\u0107 blok\u00f3w na te build.denied.zone.type = Nie mo\u017cesz modyfikowa\u0107 tego typu blok\u00f3w. command.console = Nie mo\u017cesz tego robi\u0107, je\u015bli nie jeste\u015b w grze. command.disabled = Mo\u017cesz u\u017cy\u0107 tylko komend z War (np. /leave) podczas gry. +command.tp.init = Poczekaj {0} sekund na teleportacj\u0119. Ruch b\u0105d\u017a obra\u017cenia zatrzymaj\u0105 odliczanie. +command.tp.moved = Teleportacja zatrzymana z powodu ruchu. +command.tp.damaged = Teleportacja zatrzymana z powodu obra\u017ce\u0144. +command.tp.success = Zosta\u0142e\u015b teleportowany. Dzi\u0119kujemy za cierpliwo\u015b\u0107. drop.bomb.broadcast = {0} pod\u0142o\u017cy\u0142 {1} bomb\u0119! drop.bomb.disabled = Nie mo\u017cesz wyrzuca\u0107 przedmiot\u00f3w gdy ukrad\u0142e\u015b bomb\u0119. Co ty robisz?!Biegnij do wrogiej bazy! drop.cake.broadcast = {0} Upu\u015bci\u0142 {1} ciasto! @@ -71,7 +75,7 @@ use.ender = Nie mo\u017cesz korzysta\u0107 ze skrzyni kresu podczas gry na areni use.item.spawn = Nie mo\u017cesz korzysta\u0107 z przedmiot\u00f3w gdy jeste\u015b na spawn. use.xpkillmeter = Jest to spowodowane w\u0142\u0105czon\u0105 opcj\u0105 "XPKillMeter". wand.toofar = Blok na kt\u00f3ry celujesz jest za daleko. -war.notadmin = Nie mo\u017cesz tego robi\u0107 je\u015bli nie jeste\u015b War admin'em ( permission war.admin). +war.notadmin = Nie mo\u017cesz tego robi\u0107 je\u015bli nie jeste\u015b War admin''em ( permission war.admin). war.notzm = Nie mo\u017cesz tego robi\u0107 je\u015bli nie jeste\u015b tw\u00f3rc\u0105 aren (permission war.zonemaker). war.prefix = War> war.title = War @@ -95,7 +99,7 @@ zone.leavenotice = Wpisz /war leave aby opu\u015bci\u0107 aren\u0119. zone.lifepool.empty = Dru\u017cyna {0} nie posiada wi\u0119cej \u017cy\u0107.Jedna \u015bmier\u0107 wi\u0119cej i przegraj\u0105 oni bitw\u0119! zone.loadout.equip = Wyposa\u017cenie {0} za\u0142adowane (kucnij aby zmieni\u0107) zone.loadout.reenter = Nie mo\u017cesz zmieni\u0107 wyposa\u017cenia po opuszczeniu spawn. -zone.monument.badblock = Musisz przej\u0105\u0107 pomnik blokiem we\u0142ny koloru twojej dru\u017cyny.\nMo\u017cesz go zdoby\u0107 ze spawn'u swojej dru\u017cyny. +zone.monument.badblock = Musisz przej\u0105\u0107 pomnik blokiem we\u0142ny koloru twojej dru\u017cyny.\nMo\u017cesz go zdoby\u0107 ze spawn''u swojej dru\u017cyny. zone.monument.capture = Pomnik {0} zosta\u0142 przej\u0119ty przez dru\u017cyn\u0119 {1}. zone.monument.lose = Dru\u017cyna {0} straci\u0142a kontrol\u0119 nad pomnikiem {1}. zone.monument.voodoo = Tw\u00f3j taniec zadowoli\u0142 pomnik boga voodoo. Zdobywasz {0} serduszko/a \u017cycia. @@ -126,4 +130,4 @@ zone.warp.permission = Nie masz uprawnie\u0144 do teleportacji do areny. zone.zone404 = Nie mo\u017cna znale\u017a\u0107 areny. zone.zoneinfo.format = {0}:{1} zespo\u0142\u00f3w, {2} graczy zone.zoneinfo.prefix = Areny: -zone.zoneinfo.teleport = U\u017cyj /zone aby teleportowa\u0107 si\u0119 do areny. \ No newline at end of file +zone.zoneinfo.teleport = U\u017cyj /zone aby teleportowa\u0107 si\u0119 do areny. diff --git a/war/src/main/resources/messages_pt_BR.properties b/war/src/main/resources/messages_pt_BR.properties index d338769..deffdf2 100644 --- a/war/src/main/resources/messages_pt_BR.properties +++ b/war/src/main/resources/messages_pt_BR.properties @@ -1,23 +1,40 @@ # Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) build.denied.location = Voc\u00ea n\u00e3o pode construir aqui. -build.denied.outside = Voc\u00ea s\u00f3 pode construir nos campos de batalha. +build.denied.outside = Voc\u00ea s\u00f3 pode construir nas partidas. build.denied.teamblock = Voc\u00ea s\u00f3 pode usar blocos do seu time para capturar monumentos. build.denied.zone.break = Os blocos nessa \u00e1rea s\u00e3o indestrut\u00edveis. +build.denied.zone.multteam = Voc\u00ea j\u00e1 tem um {0}. build.denied.zone.outside = Voc\u00ea n\u00e3o pode destruir numa partida que voc\u00ea n\u00e3o est\u00e1 jogando. build.denied.zone.place = Voc\u00ea n\u00e3o pode construir aqui. build.denied.zone.type = Voc\u00ea n\u00e3o pode modificar este tipo de bloco. command.console = Voc\u00ea n\u00e3o pode fazer isto enquanto n\u00e3o estiver na partida. command.disabled = Voc\u00ea s\u00f3 pode usar comandos espec\u00edficos (ex: /leave) enquanto joga. +command.tp.init = Por favor aguarde {0} segundos para teleportar. Qualquer movimento cancelar\u00e1 o teleporte. +command.tp.moved = Teleporte cancelado por movimento. +command.tp.damaged = Teleporte cancelado por receber dano. +command.tp.success = Voc\u00ea foi teleportado. drop.bomb.broadcast = {0} derrubou a bomba {1}! +drop.bomb.disabled = Voc\u00ea n\u00e3o pode dropar itens enquanto tiver a bomba. O que voc\u00ea est\u00e1 fazendo? Corra para a base inimiga! drop.cake.broadcast = {0} derrubou o bolo {1}! +drop.cake.disabled = Voc\u00ea n\u00e3o pode dropar itens enquanto tiver o bolo. O que voc\u00ea est\u00e1 fazendo? Corra! drop.flag.broadcast = {0} derrubou a bandeira de {1}! -drop.item.disabled = Voc\u00ea n\u00e3o pode dropar itens nesta zona. +drop.flag.disabled = Voc\u00ea n\u00e3o pode dropar itens enquanto tiver a bandeira. O que voc\u00ea est\u00e1 fazendo? Corra! +drop.item.border = Voc\u00ea n\u00e3o pode dropar itens para fora da partida. +drop.item.disabled = Voc\u00ea n\u00e3o pode dropar itens nesta partida. +drop.item.spawn = Voc\u00ea n\u00e3o pode dropar itens enquanto estiver na base. +drop.team = Voc\u00ea n\u00e3o pode dropar {0}. +drop.wand = Voc\u00ea dropou a varinha da zona {0}. +join.aarequired = Esta partida requer que voc\u00ea seja automaticamente atribu\u00eddo a uma equipe. Por favor entre no portal. join.broadcast = {0} entrou no time {1}. -join.disabled = Este campo de batalha est\u00e1 desativado. +join.disabled = Esta partida est\u00e1 desativada. join.full.all = Todos os times est\u00e3o lotados. join.full.single = Time {0} lotado. -join.permission.single = Voc\u00ea n\u00e3o tem permiss\u00f5es para se ingressar no time {0}. +join.inventorystored = Seu invent\u00e1rio ser\u00e1 guardado at\u00e9 que voc\u00ea saia com /war leave. +join.permission.all = Voc\u00ea n\u00e3o tem permiss\u00e3o para entrar em algum time dispon\u00edvel nesta partida. +join.permission.single = Voc\u00ea n\u00e3o tem permiss\u00f5es para ingressar no time {0}. +join.progress = Voc\u00ea n\u00e3o pode entrar em uma partida em progresso nesta zona. join.selfteam = Voc\u00ea n\u00e3o pode entrar no seu pr\u00f3prio time. +join.team404 = Time n\u00e3o encontrado. Digite /team para ver a lista. leave.broadcast = {0} saiu da partida. leave.inventoryrestore = Invent\u00e1rio restaurado. pvp.death.drown = {0} afogou-se. @@ -25,7 +42,11 @@ pvp.death.explosion = {0} explodiu. pvp.death.fall = {0} caiu e morreu. pvp.death.fire = {0} morreu queimado. pvp.death.other = {0} morreu. +pvp.ff.disabled = Voc\u00ea errou o ataque por tentar atacar um aliado! +pvp.ff.enabled = Fogo amigo ativado! Por favor, n\u00e3o prejudique sua equipe. +pvp.kill.adjectives = ;;poderoso,mortal;excelente;preciso;brutal;poderoso pvp.kill.bomb = {0} fez {1} explodir! +pvp.kill.format = {0} usou {1} para {2} {3} {4} pvp.kill.self = {0} cometeu suic\u00eddio. pvp.kill.verbs = matou;matou;matou;aniquilou;assassinou;eliminou;exterminou pvp.kill.weapon.aim = mira @@ -34,9 +55,79 @@ pvp.kill.weapon.hand = m\u00e3o pvp.outside.permission = Voc\u00ea n\u00e3o pode atacar jogadores que est\u00e3o fora da partida. pvp.self.notplaying = Voc\u00ea precisa estar na partida para atacar. pvp.self.respawn = Voc\u00ea n\u00e3o pode atacar enquanto renasce! +pvp.self.spawn = Voc\u00ea n\u00e3o pode atacar na base! +pvp.target.notplaying = Seu alvo n\u00e3o est\u00e1 na partida. +pvp.target.otherzone = Seu alvo est\u00e1 em outra partida. +pvp.target.respawn = Seu alvo est\u00e1 renascendo! +pvp.target.spawn = Seu alvo est\u00e1 na base! +sign.lobby.autoassign = Partida\n{0}\nEntre no\nportal. sign.lobby.pick = Partida\n{0}\n\nEscolha seu time. -sign.team.limited = Time {0}\n{1}/{2} jogadores\n{3}/{4} pontos\n{5} mortes restantes -sign.team.unlimited = Time {0}\n{1}/{2} jogadores\n{3}/{4} pontos\nvidas ilimitadas -use.anvil = Voc\u00ea n\u00e3o pode usar bigornas nesta zona! -use.enchant = Voc\u00ea n\u00e3o pode usar mesas de encantamento nesta zona! +sign.lobby.warhub = \nPara o salao \nde portais.\n +sign.team.limited = Time {0}\n{1}/{2} jogadores\n{3}/{4} pontos\n{5} vidas +sign.team.unlimited = Time {0}\n{1}/{2} jogadores\n{3}/{4} pontos\nvidas infinitas +sign.warhub = Saguao\n(/warhub)\nEscolha sua\npartida! +sign.warzone = Partida\n{0}\n{1}/{2} jogadores\n{3} times +team.chat.enable = Chat do time ligado. Agora voc\u00ea s\u00f3 receber\u00e1 mensagens do seu time. +team.chat.disable = Chat do time desligado. +use.anvil = Voc\u00ea n\u00e3o pode usar bigornas nesta partida! +use.enchant = Voc\u00ea n\u00e3o pode usar mesas de encantamento nesta partida! use.ender = Voc\u00ea n\u00e3o pode usar ba\u00fas do fim enquanto joga na partida! +use.item.spawn = Voc\u00ea nao pode usar itens na base. +use.xpkillmeter = Isto \u00e9 devido \u00e0 op\u00e7\u00e3o xpkillmeter sendo ativado. +wand.toofar = Seu destino \u00e9 muito longe! +war.notadmin = Voc\u00ea n\u00e3o \u00e9 um administrador para poder fazer isto. +war.notzm = Voc\u00ea n\u00e3o pode fazer isto se voc\u00ea n\u00e3o \u00e9 um criador de partidas. +war.prefix = War> +war.title = War +warhub.none = N\u00e3o h\u00e1 sagu\u00f5es neste servidor. Tente /zones e /zone. +warhub.permission = Voc\u00ea n\u00e3o tem permiss\u00f5es para ir ao sagu\u00e3o. +warhub.teleport = Bem-vindo ao sagu\u00e3o de batalhas. Escolha sua partida! +zone.airstrike = {0} iniciou um ataque a\u00e9reo! +zone.battle.end = A partida terminou. O time {0} perdeu: {1} morreu e n\u00e3o restaram mais vidas sobrando. +zone.battle.newscores = Nova pontua\u00e7\u00e3o - {0} +zone.battle.next = Partida interrompida. Reiniciando campo {0}... +zone.battle.reset = Uma nova batalha come\u00e7ar\u00e1 em breve. Reiniciando partida... +zone.battle.resetprogress = Progresso da reinicializa\u00e7\u00e3o: {0}%, {1} segundos... +zone.battle.resetcomplete = A partida reinicia em {0} segundos. Uma nova batalha come\u00e7ar\u00e1. +zone.bomb.broadcast = {0} explodiu a base de {1}. O time {2} ganhou um ponto. +zone.cake.broadcast = {0} capturou o bolo {1}. O time {2} ganhou um ponto e restauraram suas vidas por completo. +zone.flagcapture.broadcast = {0} capturou a bandeira {1}. O time {2} ganhou um ponto. +zone.flagreturn.deadlock = Voc\u00ea n\u00e3o pode capturar a bandeira inimiga enquanto a sua n\u00e3o estiver segura. +zone.flagreturn.flag = Voc\u00ea deve levar a bandeira inimiga at\u00e9 a sua bandeira. +zone.flagreturn.spawn = Voc\u00ea deve levar a bandeira inimiga at\u00e9 sua base. +zone.leavenotice = Use /war para sair da partida. +zone.lifepool.empty = O time {0} est\u00e1 sem vida. Mais uma morte e eles perdem! +zone.loadout.equip = Equipou {0} (shift para trocar). +zone.loadout.reenter = N\u00e3o pode trocar depois de sair da base. +zone.monument.badblock = Voc\u00ea deve capturar um monumento com um bloco de l\u00e3 da cor da sua equipe. Consiga uma na sua base. +zone.monument.capture = Monumento {0} capturado pelo time {1}. +zone.monument.lose = O time {0} perdeu o controle do monumento {1}. +zone.monument.voodoo = Sua dan\u00e7a agradou o monumento. Voc\u00ea restaurou {0} de vida! +zone.noteamnotice = Voc\u00ea n\u00e3o pode entrar no campo de batalha sem uma equipe. +zone.score.board404 = Esta partida n\u00e3o tem scoreboard. +zone.score.empty = Voc\u00ea n\u00e3o pode pontuar enquanto outro jogador entrar em outro time. +zone.spawn.minplayers = Voc\u00ea n\u00e3o pode sair da base enquanto n\u00e3o haja pelo menos um m\u00ednimo de {0} jogador(es) em pelo menos {1} time(s). +zone.spawn.timer = Voc\u00ea n\u00e3o pode sair da base por {0} segundos depois de renascer. +zone.steal.bomb.broadcast = {0} pegou a bomba {1}. +zone.steal.bomb.notice = Voc\u00ea pegou a bomba {0}. V\u00e1 para a base inimiga para pontuar. N\u00e3o toque em ningu\u00e9m ou voc\u00ea explodir\u00e1! +zone.steal.bomb.prevent = Impe\u00e7a {0} de explodir sua base! +zone.steal.cake.broadcast = {0} pegou o bolo {1}. +zone.steal.cake.notice = Voc\u00ea tem o bolo {0}. V\u00e1 para sua base para pontuar e restauras sua vida. +zone.steal.cake.prevent = Impe\u00e7a {0} de chegar na base com o bolo! +zone.steal.flag.broadcast = {0} roubou a bandeira do time {1}. +zone.steal.flag.empty = Voc\u00ea n\u00e3o pode roubar a bandeira do time {0} se n\u00e3o h\u00e1 ningu\u00e9m nele. +zone.steal.flag.notice = Voc\u00ea pegou a bandeira do time {0}. V\u00e1 para sua base ou para a bandeira e a capture! +zone.steal.flag.prevent = Impe\u00e7a {0} de capturar a bandeira do time {1}! +zone.stealextra.bomb = Voc\u00ea s\u00f3 pode roubar uma bomba de cada vez! +zone.stealextra.cake = Voc\u00ea s\u00f3 pode roubar um bolo de cada vez! +zone.stealextra.flag = Voc\u00ea s\u00f3 pode roubar uma bandeira de cada vez! +zone.stealextra.other = Voc\u00ea s\u00f3 pode roubar uma coisa de cada vez! +zone.teaminfo.format = {0}: {1} pontos, {2}/{3} vidas restantes. {4} +zone.teaminfo.none = nada +zone.teaminfo.prefix = Times: +zone.teleport = Bem-vindo \u00e0 partida {0}. +zone.warp.permission = Voc\u00ea n\u00e3o tem permiss\u00f5es para se teleportar para a partida. +zone.zone404 = Partida n\u00e3o encontrada. +zone.zoneinfo.format = {0}: {1} times, {2} jogadores. +zone.zoneinfo.prefix = Partidas: +zone.zoneinfo.teleport = Use /zone para teleportar para uma partida. \ No newline at end of file diff --git a/war/src/main/resources/messages_ru.properties b/war/src/main/resources/messages_ru.properties index 69383a2..6d2caa6 100644 --- a/war/src/main/resources/messages_ru.properties +++ b/war/src/main/resources/messages_ru.properties @@ -7,8 +7,12 @@ build.denied.zone.multteam = \u0423 \u0412\u0430\u0441 \u0443\u0436\u0435 \u0435 build.denied.zone.outside = \u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043b\u043e\u043c\u0430\u0442\u044c \u0430\u0440\u0435\u043d\u0443, \u0435\u0441\u043b\u0438 \u0412\u044b \u043d\u0435 \u0438\u0433\u0440\u0430\u0435\u0442\u0435 \u043d\u0430 \u043d\u0435\u0439. build.denied.zone.place = \u041d\u0430 \u044d\u0442\u043e\u0439 \u0430\u0440\u0435\u043d\u0435 \u0431\u043b\u043e\u043a\u0438 \u043d\u0435\u0440\u0430\u0437\u0440\u0443\u0448\u0438\u043c\u044b - \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u043e\u0436\u0435 \u043d\u0435\u043b\u044c\u0437\u044f! build.denied.zone.type = \u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u044d\u0442\u043e\u0442 \u0442\u0438\u043f \u0431\u043b\u043e\u043a\u0430 -command.console = \u0412\u0432\u043e\u0434 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0438\u0433\u0440\u044b. -command.disabled = \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e /leave, \u043a\u043e\u0433\u0434\u0430 \u0438\u0433\u0440\u0430\u0435\u0442\u0435. +command.console = \u0412\u0432\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0432 \u0438\u0433\u0440\u0435. +command.disabled = \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u044b War (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 /leave), \u043a\u043e\u0433\u0434\u0430 \u0438\u0433\u0440\u0430\u0435\u0442\u0435. +command.tp.init = \u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435 {0} \u0441\u0435\u043a. \u0434\u043b\u044f \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0430\u0446\u0438\u0438. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043d\u0435 \u0434\u0432\u0438\u0433\u0430\u0439\u0442\u0435\u0441\u044c +command.tp.moved = \u0422\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0430\u0446\u0438\u044f \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u0430: \u0412\u044b \u0441\u0434\u0432\u0438\u043d\u0443\u043b\u0438\u0441\u044c \u0441 \u043c\u0435\u0441\u0442\u0430 +command.tp.damaged = \u0422\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0430\u0446\u0438\u044f \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u0430: \u0412\u0430\u0441 \u0440\u0430\u043d\u0438\u043b\u0438 +command.tp.success = \u0412\u044b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c drop.bomb.broadcast = {0} \u043f\u043e\u0442\u0435\u0440\u044f\u043b \u0431\u043e\u043c\u0431\u0443 "{1}"! drop.bomb.disabled = \u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0442\u044c \u0432\u0435\u0449\u0438, \u043f\u043e\u043a\u0430 \u043d\u0435\u0441\u0435\u0442\u0435 \u0431\u043e\u043c\u0431\u0443. \u0411\u0435\u0433\u0438\u0442\u0435 \u043a \u0432\u0440\u0430\u0436\u0435\u0441\u043a\u043e\u0439 \u0431\u0430\u0437\u0435! drop.cake.broadcast = {0} \u043f\u043e\u0442\u0435\u0440\u044f\u043b \u0442\u043e\u0440\u0442 "{1}"! @@ -19,7 +23,7 @@ drop.item.border = \u0417\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e \u0432 drop.item.disabled = \u0417\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0435\u0449\u0438 \u043d\u0430 \u0430\u0440\u0435\u043d\u0435. drop.item.spawn = \u0417\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0435\u0449\u0438 \u043d\u0430 \u0441\u043f\u0430\u0443\u043d\u0435. drop.team = \u0417\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c {0} \u0431\u043b\u043e\u043a\u0438. -drop.wand = \u0412\u044b \u0432\u044b\u043a\u0438\u043d\u0443\u043b\u0438 \u0432\u044b\u0434\u0435\u043b\u044f\u043b\u043a\u0443 \u0430\u0440\u0435\u043d\u044b {0}. +drop.wand = \u0412\u044b \u0432\u044b\u043a\u0438\u043d\u0443\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0430\u0440\u0435\u043d\u044b {0}. join.aarequired = \u042d\u0442\u0430 \u0430\u0440\u0435\u043d\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u0445\u043e\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 \u0430\u0432\u0442\u043e-\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c! join.broadcast = {0} \u0437\u0430\u0448\u0435\u043b \u0437\u0430 {1}. join.disabled = \u042d\u0442\u0430 \u0430\u0440\u0435\u043d\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430. @@ -30,7 +34,7 @@ join.permission.all = \u0423 \u0432\u0430\u0441 \u043d\u0435\u0442 \u043f\u0440\ join.permission.single = \u0423 \u0412\u0430\u0441 \u043d\u0435\u0442 \u043f\u0440\u0430\u0432 \u0437\u0430\u0439\u0442\u0438 \u0437\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 {0}. join.progress = \u0411\u043e\u0439 \u0443\u0436\u0435 \u043d\u0430\u0447\u0430\u043b\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u0439 \u0430\u0440\u0435\u043d\u0435!\u0414\u043e\u0436\u0434\u0438\u0442\u0435\u0441\u044c \u0435\u0433\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f. join.selfteam = \u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0439\u0442\u0438 \u0437\u0430 \u0441\u0432\u043e\u044e-\u0436\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443. -join.team404 = \u0422\u0430\u043a\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430. \u0412\u0441\u0435 \u0434\u043e\u0443\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b - /teams +join.team404 = \u0422\u0430\u043a\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430. \u041d\u0430\u0431\u0435\u0440\u0438\u0442\u0435 /teams \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434. leave.broadcast = {0} \u0432\u044b\u0448\u0435\u043b \u0441 \u0431\u043e\u044f. leave.inventoryrestore = \u0412\u0430\u0448 \u0438\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d. pvp.death.drown = {0} \u0443\u0442\u043e\u043d\u0443\u043b @@ -40,7 +44,7 @@ pvp.death.fire = {0} \u0441\u0433\u043e\u0440\u0435\u043b pvp.death.other = {0} \u0443\u043c\u0435\u0440 pvp.ff.disabled = \u042d\u0442\u043e\u0442 \u0438\u0433\u0440\u043e\u043a \u0437\u0430 \u0412\u0430\u0441. pvp.ff.enabled = \u041e\u0433\u043e\u043d\u044c \u043f\u043e \u0441\u0432\u043e\u0438\u043c \u0432\u043a\u043b\u044e\u0447\u0435\u043d. \u0411\u0443\u0434\u044c\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b! -pvp.kill.adjectives = ;;;;;;; +pvp.kill.adjectives = ;;\u043c\u043e\u0449\u043d\u043e;\u0441\u043c\u0435\u0440\u0442\u0435\u043b\u044c\u043d\u043e;\u0438\u0437\u044f\u0449\u043d\u043e;\u0442\u043e\u0447\u043d\u043e;\u0436\u0435\u0441\u0442\u043e\u043a\u043e;\u043c\u043e\u0433\u0443\u0447\u0435 pvp.kill.bomb = {0} \u043f\u043e\u0434\u043e\u0440\u0432\u0430\u043b {1}! pvp.kill.format = {0} {1} {2} {3} {4} pvp.kill.self = {0} \u0443\u0431\u0438\u043b \u0441\u0430\u043c \u0441\u0435\u0431\u044f @@ -50,7 +54,7 @@ pvp.kill.weapon.bow = \u043b\u0443\u043a\u043e\u043c pvp.kill.weapon.hand = \u0440\u0443\u043a\u043e\u0439 pvp.outside.permission = \u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0430\u0442\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0438\u0433\u0440\u043e\u043a\u043e\u0432 \u0437\u0430 \u0430\u0440\u0435\u043d\u043e\u0439. pvp.self.notplaying = \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0433\u0440\u0430\u0442\u044c \u043d\u0430 \u0430\u0440\u0435\u043d\u0435 \u0447\u0442\u043e\u0431\u044b \u0430\u0442\u0430\u043a\u043e\u0432\u0430\u0442\u044c! -pvp.self.respawn = \u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0430\u0442\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0441\u043f\u0430\u0443\u043d\u044f\u0441\u044c! +pvp.self.respawn = \u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0430\u0442\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0435\u0441\u043f\u0430\u0443\u043d\u0430! pvp.self.spawn = \u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0430\u0442\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u043e\u044f \u043d\u0430 \u0441\u043f\u0430\u0443\u043d\u0435! pvp.target.notplaying = \u042d\u0442\u043e\u0442 \u0438\u0433\u0440\u043e\u043a \u043d\u0435 \u0438\u0433\u0440\u0430\u0435\u0442 \u043d\u0430 \u0430\u0440\u0435\u043d\u0435! pvp.target.otherzone = \u042d\u0442\u043e\u0442 \u0438\u0433\u0440\u043e\u043a \u0438\u0433\u0440\u0430\u0435\u0442 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0430\u0440\u0435\u043d\u0435! @@ -58,7 +62,7 @@ pvp.target.respawn = \u042d\u0442\u043e\u0442 \u0438\u0433\u0440\u043e\u043a \u0 pvp.target.spawn = \u042d\u0442\u043e\u0442 \u0438\u0433\u0440\u043e\u043a \u0441\u0442\u043e\u0438\u0442 \u043d\u0430 \u0441\u043f\u0430\u0443\u043d\u0435! sign.lobby.autoassign = \u0410\u0440\u0435\u043d\u0430\n{0}\n\u0412\u043e\u0439\u0434\u0438\u0442\u0435 \u0432 \u0430\u0432\u0442\u043e-\n\u043f\u043e\u0440\u0442\u0430\u043b. sign.lobby.pick = \u0410\u0440\u0435\u043d\u0430\n{0}\n\n\u0412\u044b\u0431\u0435\u0440\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0443. -sign.lobby.warhub = \n\u041d\u0430 \u0425\u0430\u0431\n\u0430\u0440\u0435\u043d\n +sign.lobby.warhub = \n\u041d\u0430 \u0425\u0430\u0431 \u0430\u0440\u0435\u043d\n\n sign.team.limited = \u041a\u043e\u043c\u0430\u043d\u0434\u0430 {0}\n{1}/{2} \u0438\u0433\u0440\u043e\u043a\u043e\u0432\n{3}/{4} \u043e\u0447\u043a\u043e\u0432\n{5} \u0436\u0438\u0437\u043d\u0435\u0439 sign.team.unlimited = \u041a\u043e\u043c\u0430\u043d\u0434\u0430 {0}\n{1}/{2} \u0438\u0433\u0440\u043e\u043a\u043e\u0432\n{3}/{4} \u043e\u0447\u043a\u043e\u0432\n\u0431\u0435\u0441\u043a.\u0436\u0438\u0437\u043d\u0435\u0439 sign.warhub = \u0425\u0430\u0431 \u0430\u0440\u0435\u043d\n(/warhub)\n\u0412\u044b\u0431\u0435\u0440\u0438\n\u0430\u0440\u0435\u043d\u0443! @@ -77,13 +81,13 @@ war.prefix = War> war.title = War warhub.none = \u0425\u0430\u0431 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043d. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 /zones \u0438 /zone. warhub.permission = \u0423 \u0412\u0430\u0441 \u043d\u0435\u0442 \u043f\u0440\u0430\u0432 \u0434\u043b\u044f \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0430 \u043d\u0430 \u0425\u0430\u0431. -warhub.teleport = \u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0425\u0430\u0431!\u0412\u044b\u0431\u0435\u0440\u0438 \u0430\u0440\u0435\u043d\u0443! +warhub.teleport = \u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0425\u0430\u0431! \u0412\u044b\u0431\u0435\u0440\u0438 \u0430\u0440\u0435\u043d\u0443! zone.airstrike = {0} called in an airstrike! -zone.battle.end = \u0411\u043e\u0439 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 {0} \u043f\u0440\u043e\u0438\u0433\u0440\u0430\u043b\u0430: {1} \u0443\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0430\u0441 \u0436\u0438\u0437\u043d\u0435\u0439 \u0438\u0441\u0441\u044f\u043a. +zone.battle.end = \u0411\u043e\u0439 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 {0} \u043f\u0440\u043e\u0438\u0433\u0440\u0430\u043b\u0430: {1} \u0443\u043c\u0435\u0440, \u0438 \u0438\u0445 \u0436\u0438\u0437\u043d\u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438\u0441\u044c. zone.battle.newscores = \u0421\u0447\u0435\u0442 - {0} zone.battle.next = \u0411\u043e\u0439 \u0431\u044b\u043b \u043f\u0440\u0435\u0440\u0432\u0430\u043d. \u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0430\u0440\u0435\u043d\u044b {0}... zone.battle.reset = \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0431\u043e\u0439. \u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0430\u0440\u0435\u043d\u044b... -zone.battle.resetprogress = \u0421\u0431\u0440\u043e\u0441 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430: {0}%, {1} \u0441\u0435\u043a. +zone.battle.resetprogress = \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438: {0}%, {1} \u0441\u0435\u043a. zone.battle.resetcomplete = \u0410\u0440\u0435\u043d\u0430 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 {0} \u0441\u0435\u043a. \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0431\u043e\u0439... zone.bomb.broadcast = {0} \u043f\u043e\u0434\u043e\u0440\u0432\u0430\u043b \u0441\u043f\u0430\u0443\u043d {1}. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 {2} \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 1 \u043e\u0447\u043a\u043e. zone.cake.broadcast = {0} \u043f\u0440\u0438\u043d\u0435\u0441 \u0442\u043e\u0440\u0442 "{1}". \u041a\u043e\u043c\u0430\u043d\u0434\u0430 {2} \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 1 \u043e\u0447\u043a\u043e \u0438 \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0436\u0438\u0437\u043d\u0435\u0439. @@ -100,12 +104,12 @@ zone.monument.capture = \u041c\u043e\u043d\u0443\u043c\u0435\u043d\u0442 "{0}" \ zone.monument.lose = \u041a\u043e\u043c\u0430\u043d\u0434\u0430 {0} \u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u043c\u043e\u043d\u0443\u043c\u0435\u043d\u0442\u043e\u043c "{1}" zone.monument.voodoo = \u0412\u0430\u0448 \u0442\u0430\u043d\u0435\u0446 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u043c\u043e\u043d\u0443\u043c\u0435\u043d\u0442\u0443. \u0412\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 {0} \u0441\u0435\u0440\u0434\u0435\u0447\u0435\u043a! zone.noteamnotice = \u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0431\u044b\u0442\u044c \u043d\u0430 \u0430\u0440\u0435\u043d\u0435 \u0431\u0435\u0437 \u0432\u044b\u0431\u043e\u0440\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. -zone.score.board404 = \u042d\u0442\u0430 \u0430\u0440\u0435\u043d\u0430 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0430 \u0434\u043e\u0441\u043a\u0443 \u0441\u043e \u0441\u0447\u0435\u0442\u043e\u043c. -zone.score.empty = \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0447\u0435\u0442, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0442\u044c \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0433\u0440\u043e\u043a\u0438 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435. -zone.spawn.minplayers = \u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043a\u0438\u0434\u0430\u0442\u044c \u0441\u043f\u0430\u0443\u043d \u043f\u043e\u043a\u0430 \u043d\u0435 \u043d\u0430\u0431\u0435\u0440\u0435\u0442\u0441\u044f \u043c\u0438\u043d\u0438\u043c\u0443\u043c {0} \u0438\u0433\u0440\u043e\u043a\u043e\u0432 \u0432 {1} \u043a\u043e\u043c\u0430\u043d\u0434\u0435. +zone.score.board404 = \u041d\u0430 \u044d\u0442\u043e\u0439 \u0430\u0440\u0435\u043d\u0435 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u043f\u043e\u043a\u0430\u0437 \u043e\u0447\u043a\u043e\u0432. +zone.score.empty = \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0447\u0435\u0442, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0442\u044c \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0433\u0440\u043e\u043a\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435. +zone.spawn.minplayers = \u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043a\u0438\u0434\u0430\u0442\u044c \u0441\u043f\u0430\u0443\u043d, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043d\u0430\u0431\u0435\u0440\u0435\u0442\u0441\u044f \u043c\u0438\u043d\u0438\u043c\u0443\u043c {0} \u0438\u0433\u0440\u043e\u043a\u043e\u0432 \u0432 {1} \u043a\u043e\u043c\u0430\u043d\u0434\u0435. zone.spawn.timer = \u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043a\u0430\u0438\u0434\u0430\u0442\u044c \u0441\u043f\u0430\u0443\u043d \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 {0} \u0441\u0435\u043a. \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u0441\u043f\u0430\u0432\u043d\u0430! zone.steal.bomb.broadcast = {0} \u043d\u0430\u0448\u0435\u043b \u0431\u043e\u043c\u0431\u0443 "{1}". -zone.steal.bomb.notice = \u0412\u044b \u0438\u043c\u0435\u0435\u0442\u0435 \u0431\u043e\u043c\u0431\u0443 "{0}". \u041f\u0440\u0438\u043d\u0435\u0441\u0438\u0442\u0435 \u0435\u0435 \u043a \u0432\u0440\u0430\u0436\u0435\u0441\u043a\u043e\u0439 \u0431\u0430\u0437\u0435. \u041d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0439\u0442\u0435 \u0443\u0440\u043e\u043d\u0435, \u0438\u043d\u0430\u0447\u0435 \u0412\u044b \u0432\u0437\u043e\u0440\u0432\u0435\u0442\u0435\u0441\u044c! +zone.steal.bomb.notice = \u0412\u044b \u043d\u0435\u0441\u0435\u0442\u0435 \u0431\u043e\u043c\u0431\u0443 "{0}". \u041f\u0440\u0438\u043d\u0435\u0441\u0438\u0442\u0435 \u0435\u0435 \u043a \u0432\u0440\u0430\u0436\u0435\u0441\u043a\u043e\u0439 \u0431\u0430\u0437\u0435. \u041d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0439\u0442\u0435 \u0443\u0440\u043e\u043d, \u0438\u043d\u0430\u0447\u0435 \u0412\u044b \u0432\u0437\u043e\u0440\u0432\u0435\u0442\u0435\u0441\u044c! zone.steal.bomb.prevent = \u041d\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u0435 {0} \u043f\u0440\u0438\u043d\u0435\u0441\u0442\u0438 \u0431\u043e\u043c\u0431\u0443 \u043a \u0412\u0430\u0448\u0435\u043c\u0443 \u0441\u043f\u0430\u0443\u043d\u0443! zone.steal.cake.broadcast = {0} \u043d\u0430\u0448\u0435\u043b \u0442\u043e\u0440\u0442 "{1}". zone.steal.cake.notice = \u0412\u044b \u0438\u043c\u0435\u0435\u0442\u0435 \u0442\u043e\u0440\u0442 "{0}". \u041f\u0440\u0438\u043d\u0435\u0441\u0438\u0442\u0435 \u0435\u0433\u043e \u043a \u0441\u043f\u0430\u0443\u043d\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u043e\u0447\u043a\u043e \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0432\u0441\u0435 \u0436\u0438\u0437\u043d\u0438! @@ -113,7 +117,7 @@ zone.steal.cake.prevent = \u041d\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u043 zone.steal.flag.broadcast = {0} \u0443\u043a\u0440\u0430\u043b \u0444\u043b\u0430\u0433 {1}. zone.steal.flag.empty = \u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u043a\u0440\u0430\u0441\u0442\u044c \u0444\u043b\u0430\u0433 \u043a\u043e\u043c\u0430\u043d\u0434\u044b {0}, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0442 \u0438\u0433\u0440\u043e\u043a\u043e\u0432 \u0432 \u043d\u0435\u0439. zone.steal.flag.notice = \u0412\u044b \u0438\u043c\u0435\u0435\u0442\u0435 \u0444\u043b\u0430\u0433 \u043a\u043e\u043c\u0430\u043d\u0434\u044b {0}. \u041f\u0440\u0438\u043d\u0435\u0441\u0438\u0442\u0435 \u0435\u0433\u043e \u043a \u0441\u0432\u043e\u0435\u043c\u0443 \u0444\u043b\u0430\u0433\u0443 \u0438\u043b\u0438 \u0431\u0430\u0437\u0435 \u0434\u043b\u044f \u0437\u0430\u0445\u0432\u0430\u0442\u0430! -zone.steal.flag.prevent = \u0412\u0435\u0440\u043d\u0443\u043b {0} from reaching team {1}''s spawn or flag. +zone.steal.flag.prevent = \u0412\u0435\u0440\u043d\u0443\u043b {0} from reaching team {1}''''s spawn or flag. zone.stealextra.bomb = \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u043c\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e 1 \u0431\u043e\u043c\u0431\u0443! zone.stealextra.cake = \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u043c\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e 1 \u0442\u043e\u0440\u0442! zone.stealextra.flag = \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u043c\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e 1 \u0444\u043b\u0430\u0433! diff --git a/war/src/main/resources/messages_sk_SK.properties b/war/src/main/resources/messages_sk_SK.properties new file mode 100644 index 0000000..f129dcc --- /dev/null +++ b/war/src/main/resources/messages_sk_SK.properties @@ -0,0 +1,4 @@ +# Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) +build.denied.location = Tu nemozes stavat +build.denied.outside = Mozes stavat iba v warzone +build.denied.zone.break = Kocky v warzone su neznicitelne diff --git a/war/src/main/resources/messages_sv_SE.properties b/war/src/main/resources/messages_sv_SE.properties new file mode 100644 index 0000000..d4093a3 --- /dev/null +++ b/war/src/main/resources/messages_sv_SE.properties @@ -0,0 +1,83 @@ +# Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) +build.denied.location = Du kan inte bygga h\u00e4r. +build.denied.outside = Du kan bara bygga innanf\u00f6r krigszoner. +build.denied.zone.break = Blocket i denna krigszon \u00e4r of\u00f6rst\u00f6rbar. +build.denied.zone.multteam = Du har redan ett {0} block. +build.denied.zone.outside = Du kan inte f\u00f6rst\u00f6ra en krigszon du spelar inte i den. +build.denied.zone.place = Du kan inte placera blocks i denna krigszon +build.denied.zone.type = Du kan inte \u00e4ndra denna typ av block. +command.console = Du kan inte g\u00f6ra detta om du inte \u00e4r i ett spel. +command.disabled = Du kan bara anv\u00e4nda krigs kommandon (t.ex /leave) medans du spelar. +drop.bomb.broadcast = {0} tappade den {1} bomben! +drop.cake.broadcast = {0} tappade den {1} kakan! +drop.cake.disabled = Du kan inte kasta ut saker medans du stj\u00e4ler kakan. Vad h\u00e5ller du p\u00e5 med?! Spring! +drop.flag.broadcast = {0} tappade den {1} flaggan! +drop.flag.disabled = Du kan inte kasta ut saker medans du har stj\u00e4lt flaggan. Vad h\u00e5ller du p\u00e5 med?! Spring! +drop.item.border = Du kan inte kasta saker n\u00e4r du \u00e4r n\u00e4ra zon kanten. +drop.item.disabled = Du kan inte kasta saker i denna krigs zon. +drop.item.spawn = Du kan inte kasta ut saker n\u00e4r du st\u00e5r still vid spawn. +drop.team = Du kan inte kasta ut {0} blocks. +join.broadcast = {0} gick med i lag {1} +join.disabled = Denna krigszon \u00e4r avst\u00e4ngd. +join.full.all = Alla lag \u00e4r fulla. +join.full.single = Lag {0} \u00e4r fullt. +join.inventorystored = Ditt inventory \u00e4r sparat tills du l\u00e4mnar med /war leave. +join.permission.all = Du har inte tillst\u00e5nd till n\u00e5gra av dessa lag i denna krigszonen. +join.permission.single = Du har inte tillst\u00e5nd att g\u00e5 med i lag {0}. +join.progress = Du kan inte g\u00e5 med i detta krig som redan p\u00e5g\u00e5r i denna zonen. +join.selfteam = Du kan inte g\u00e5 med i ditt egna lag. +join.team404 = Det d\u00e4r laget kunde inte hittas. Anv\u00e4nd /teams f\u00f6r att f\u00e5 upp en lista +leave.broadcast = {0} har l\u00e4mmnat zonen. +leave.inventoryrestore = Ditt inventory har blivit \u00e5terst\u00e4lld. +pvp.death.drown = {0} har drunknat +pvp.death.explosion = {0} har exploderat +pvp.death.fall = {0} f\u00f6ll till en f\u00f6r tidig d\u00f6d +pvp.death.fire = {0} br\u00e4ndes upp +pvp.death.other = {0} dog +pvp.ff.disabled = Din attack missade! Ditt m\u00e5l \u00e4r i ditt lag. +pvp.ff.enabled = Friendly fire \u00e4r p\u00e5! Sn\u00e4lla, skada inte dina lagkamrater. +pvp.kill.adjectives = ;;m\u00e4ktig;d\u00f6dlig;fin;precise;exakt;brutal;kraftfull +pvp.kill.bomb = {0} gjorde {1} spr\u00e4ngdes upp! +pvp.kill.format = {0} s {1} {2} {3} {4} +pvp.kill.self = {0} begick sj\u00e4lvmord +pvp.kill.weapon.aim = sikte +pvp.kill.weapon.bow = pilb\u00e5ge +pvp.kill.weapon.hand = hand +pvp.outside.permission = Du kan inte attackera spelare utanf\u00f6r krigszoner. +pvp.self.notplaying = Du beh\u00f6ver vara med i denna krigszon f\u00f6r att kunna sl\u00e5ss. +pvp.self.respawn = Du kan inte attackera medans du \u00e5terupplivas! +pvp.self.spawn = Du kan inte attackera medans du \u00e4r kvar i spawn. +pvp.target.notplaying = Ditt m\u00e5l spelar inte i krigszonen. +pvp.target.otherzone = Ditt m\u00e5l spelar i en annan krigszon. +pvp.target.respawn = Ditt m\u00e5l h\u00e5ller p\u00e5 att \u00e5terupplivas! +pvp.target.spawn = Ditt m\u00e5l \u00e4r fortfarande i spawnet! +sign.lobby.pick = Krigszon\n{0}\n\nV\u00e4lj ett lag. +sign.lobby.warhub = \nTill krigs hub\n +sign.team.limited = Lag {0}\n{1}/{2} spelare\n{3}/{4} Po\u00e4ng\n{5} Liv kvar +sign.team.unlimited = Lag {0}\n{1}/{2} spelare\n{3}/{4} po\u00e4ng\nobegr\u00e4nsat med liv +sign.warhub = Krigs hub\n(/warhub)\nV\u00e4lj din strid! +sign.warzone = Krigszon\n{0}\n{1}/{2} spelare\n{3} lag +use.anvil = Du kan inte anv\u00e4nda st\u00e4d i denna krigszon! +use.enchant = Du kan inte anv\u00e4nda f\u00f6rtrollnings bord i denna krigszon. +use.ender = Du kan inte anv\u00e4nda ender kistor medans du spelar i en krigszon. +use.item.spawn = Du kan inte anv\u00e4nda saker medans du \u00e4r fortfarande i spawn. +wand.toofar = Ditt m\u00e5lblock \u00e4r f\u00f6r l\u00e5ngt iv\u00e4g. +war.notadmin = Du kan inte g\u00f6ra detta om du inte \u00e4r Krigs admin (du beh\u00f6ver tillst\u00e5ndet war.admin) +war.prefix = Krig> +war.title = Krig +warhub.none = Ingen krigs hub p\u00e5 denna server. F\u00f6rs\u00f6k /zones eller /zone +warhub.permission = Du har inte tillst\u00e5nd till att teleportera till krig hub. +warhub.teleport = V\u00e4lkommen till krigsHuben. V\u00e4lj ditt krig! +zone.airstrike = {0} kallade in ett flyganfall! +zone.battle.newscores = Nya po\u00e4ng - {0} +zone.leavenotice = Anv\u00e4nd /war leave f\u00f6r att l\u00e4mna zonen. +zone.steal.flag.broadcast = {0} tog lag {1} flagga. +zone.stealextra.bomb = Du kan bara stj\u00e4la en bomb \u00e5t g\u00e5ngen. +zone.stealextra.cake = Du kan bara stj\u00e4la en kaka \u00e5t g\u00e5ngen. +zone.stealextra.flag = Du kan bara stj\u00e4la en flagga \u00e5t g\u00e5ngen. +zone.stealextra.other = Du kan bara stj\u00e4la en sak \u00e5t g\u00e5ngen. +zone.teaminfo.none = ingen +zone.teaminfo.prefix = Lag: +zone.zone404 = Den krigszonen kunde inte hittas. +zone.zoneinfo.prefix = Krigszoner: +zone.zoneinfo.teleport = Anv\u00e4nd /zone f\u00f6r att teleportera till en krigszon. diff --git a/war/src/main/resources/messages_th_TH.properties b/war/src/main/resources/messages_th_TH.properties new file mode 100644 index 0000000..8e36580 --- /dev/null +++ b/war/src/main/resources/messages_th_TH.properties @@ -0,0 +1,133 @@ +# Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) +build.denied.location = \u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e44\u0e14\u0e49\u0e15\u0e23\u0e07\u0e19\u0e35\u0e49 +build.denied.outside = \u0e04\u0e38\u0e13\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e44\u0e14\u0e49\u0e40\u0e09\u0e1e\u0e32\u0e30\u0e43\u0e19\u0e42\u0e0b\u0e19\u0e2a\u0e07\u0e04\u0e23\u0e32\u0e21\u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19 +build.denied.teamblock = \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e43\u0e0a\u0e49\u0e1a\u0e25\u0e47\u0e2d\u0e01\u0e02\u0e2d\u0e07\u0e17\u0e35\u0e21\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e40\u0e01\u0e47\u0e1a\u0e41\u0e15\u0e49\u0e21\u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19 +build.denied.zone.break = \u0e1a\u0e25\u0e47\u0e2d\u0e01\u0e43\u0e19\u0e42\u0e0b\u0e19\u0e2a\u0e07\u0e04\u0e23\u0e32\u0e21\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e17\u0e33\u0e25\u0e32\u0e22\u0e44\u0e14\u0e49 +build.denied.zone.multteam = \u0e04\u0e38\u0e13\u0e21\u0e35\u0e1a\u0e25\u0e47\u0e2d\u0e01\u0e2d\u0e22\u0e39\u0e48\u0e41\u0e25\u0e49\u0e27 {0} \u0e1a\u0e25\u0e47\u0e2d\u0e01 +build.denied.zone.outside = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e17\u0e33\u0e25\u0e32\u0e22\u0e42\u0e0b\u0e19\u0e2a\u0e07\u0e04\u0e23\u0e32\u0e21\u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e40\u0e25\u0e48\u0e19\u0e2d\u0e22\u0e39\u0e48\u0e44\u0e14\u0e49 +build.denied.zone.place = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e27\u0e32\u0e07\u0e1a\u0e25\u0e47\u0e2d\u0e01\u0e43\u0e19\u0e42\u0e0b\u0e19\u0e2a\u0e07\u0e04\u0e23\u0e32\u0e21\u0e44\u0e14\u0e49 +build.denied.zone.type = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e1b\u0e23\u0e31\u0e1a\u0e41\u0e15\u0e48\u0e07\u0e1a\u0e25\u0e47\u0e2d\u0e01\u0e19\u0e35\u0e49\u0e44\u0e14\u0e49 +command.console = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e17\u0e33\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e19\u0e35\u0e49\u0e44\u0e14\u0e49\u0e16\u0e49\u0e32\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19\u0e40\u0e01\u0e21 +command.disabled = \u0e04\u0e38\u0e13\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e0a\u0e49\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e02\u0e2d\u0e07\u0e2a\u0e07\u0e04\u0e23\u0e32\u0e21\u0e44\u0e14\u0e49\u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19 \u0e40\u0e0a\u0e48\u0e19 /leave \u0e02\u0e13\u0e30\u0e01\u0e33\u0e25\u0e31\u0e07\u0e40\u0e25\u0e48\u0e19\u0e01\u0e31\u0e19 +command.tp.init = \u0e01\u0e23\u0e38\u0e13\u0e32\u0e23\u0e2d {0} \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35 \u0e01\u0e48\u0e2d\u0e19\u0e17\u0e33\u0e01\u0e32\u0e23\u0e40\u0e04\u0e25\u0e37\u0e48\u0e2d\u0e19\u0e22\u0e49\u0e32\u0e22 \u0e2b\u0e32\u0e01\u0e21\u0e35\u0e01\u0e32\u0e23\u0e02\u0e22\u0e31\u0e1a\u0e08\u0e30\u0e40\u0e1b\u0e47\u0e19\u0e01\u0e32\u0e23\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01\u0e17\u0e31\u0e19\u0e17\u0e35 +command.tp.moved = \u0e01\u0e32\u0e23\u0e40\u0e04\u0e25\u0e37\u0e48\u0e2d\u0e19\u0e22\u0e49\u0e32\u0e22\u0e16\u0e39\u0e01\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01\u0e42\u0e14\u0e22\u0e01\u0e32\u0e23\u0e02\u0e22\u0e31\u0e1a\u0e15\u0e31\u0e27 +command.tp.damaged = \u0e01\u0e32\u0e23\u0e40\u0e04\u0e25\u0e37\u0e48\u0e2d\u0e19\u0e22\u0e49\u0e32\u0e22\u0e16\u0e39\u0e01\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01\u0e42\u0e14\u0e22\u0e01\u0e32\u0e23\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2a\u0e35\u0e22\u0e2b\u0e32\u0e22 +command.tp.success = \u0e04\u0e38\u0e13\u0e16\u0e39\u0e01\u0e40\u0e04\u0e25\u0e37\u0e48\u0e2d\u0e19\u0e22\u0e49\u0e32\u0e22\u0e41\u0e25\u0e49\u0e27 \u0e02\u0e2d\u0e43\u0e2b\u0e49\u0e42\u0e0a\u0e04\u0e14\u0e35 +drop.bomb.broadcast = {0} \u0e27\u0e32\u0e07\u0e23\u0e30\u0e40\u0e1a\u0e34\u0e14 {1} \u0e25\u0e39\u0e01 \u0e41\u0e25\u0e49\u0e27\u0e19\u0e30\u0e08\u0e49\u0e30! +drop.bomb.disabled = \u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e17\u0e34\u0e49\u0e07\u0e02\u0e2d\u0e07\u0e44\u0e14\u0e49\u0e02\u0e13\u0e30\u0e16\u0e37\u0e2d\u0e23\u0e30\u0e40\u0e1a\u0e34\u0e14\u0e44\u0e14\u0e49 \u0e17\u0e33\u0e44\u0e07\u0e44\u0e14\u0e49\u0e25\u0e48\u0e30 \u0e40\u0e01\u0e35\u0e22\u0e23\u0e4c\u0e2b\u0e21\u0e32\u0e44\u0e1b\u0e08\u0e38\u0e14\u0e40\u0e01\u0e34\u0e14\u0e28\u0e31\u0e15\u0e23\u0e39\u0e2a\u0e34! +drop.cake.broadcast = {0} \u0e27\u0e32\u0e07\u0e40\u0e04\u0e49\u0e01 {1} \u0e01\u0e49\u0e2d\u0e19 \u0e41\u0e25\u0e49\u0e27\u0e19\u0e30\u0e08\u0e49\u0e30! +drop.cake.disabled = \u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e17\u0e34\u0e49\u0e07\u0e02\u0e2d\u0e07\u0e44\u0e14\u0e49\u0e02\u0e13\u0e30\u0e16\u0e37\u0e2d\u0e40\u0e04\u0e49\u0e01\u0e44\u0e14\u0e49 \u0e17\u0e33\u0e44\u0e07\u0e44\u0e14\u0e49\u0e25\u0e48\u0e30 \u0e40\u0e01\u0e35\u0e22\u0e23\u0e4c\u0e2b\u0e21\u0e32\u0e2a\u0e34! +drop.flag.broadcast = {0} \u0e1b\u0e31\u0e01\u0e18\u0e07 {1} \u0e2d\u0e31\u0e19 \u0e41\u0e25\u0e49\u0e27\u0e19\u0e30\u0e08\u0e49\u0e30! +drop.flag.disabled = \u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e17\u0e34\u0e49\u0e07\u0e02\u0e2d\u0e07\u0e44\u0e14\u0e49\u0e02\u0e13\u0e30\u0e16\u0e37\u0e2d\u0e18\u0e07\u0e44\u0e14\u0e49 \u0e17\u0e33\u0e44\u0e07\u0e44\u0e14\u0e49\u0e25\u0e48\u0e30 \u0e40\u0e01\u0e35\u0e22\u0e23\u0e4c\u0e2b\u0e21\u0e32\u0e2a\u0e34! +drop.item.border = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e17\u0e34\u0e49\u0e07\u0e02\u0e2d\u0e07\u0e15\u0e23\u0e07\u0e02\u0e2d\u0e1a\u0e02\u0e2d\u0e07\u0e42\u0e0b\u0e19\u0e44\u0e14\u0e49 +drop.item.disabled = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e17\u0e34\u0e49\u0e07\u0e02\u0e2d\u0e07\u0e43\u0e19\u0e42\u0e0b\u0e19\u0e44\u0e14\u0e49 +drop.item.spawn = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e23\u0e17\u0e34\u0e49\u0e07\u0e02\u0e2d\u0e07\u0e02\u0e13\u0e30\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19\u0e08\u0e38\u0e14\u0e40\u0e01\u0e34\u0e14 +drop.team = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e27\u0e32\u0e07 {0} \u0e1a\u0e25\u0e47\u0e2d\u0e01 +drop.wand = \u0e04\u0e38\u0e13\u0e17\u0e34\u0e49\u0e07\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e17\u0e33\u0e42\u0e0b\u0e19\u0e41\u0e25\u0e49\u0e27 {0} \u0e2d\u0e31\u0e19 +join.aarequired = \u0e42\u0e0b\u0e19\u0e2a\u0e07\u0e04\u0e23\u0e32\u0e21\u0e19\u0e35\u0e49\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e43\u0e2b\u0e49\u0e40\u0e02\u0e49\u0e32\u0e17\u0e35\u0e21\u0e41\u0e1a\u0e1a\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34\n\u0e01\u0e23\u0e38\u0e13\u0e32\u0e40\u0e02\u0e49\u0e32\u0e1b\u0e23\u0e30\u0e15\u0e39\u0e40\u0e02\u0e49\u0e32\u0e17\u0e35\u0e21\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34\u0e41\u0e17\u0e19 +join.broadcast = {0} \u0e44\u0e14\u0e49\u0e40\u0e02\u0e49\u0e32\u0e23\u0e48\u0e27\u0e21 \u0e17\u0e35\u0e21 {1} +join.disabled = \u0e42\u0e0b\u0e19\u0e2a\u0e07\u0e04\u0e23\u0e32\u0e21\u0e19\u0e35\u0e49\u0e1b\u0e34\u0e14\u0e2d\u0e22\u0e39\u0e48 +join.full.all = \u0e17\u0e38\u0e01\u0e17\u0e35\u0e21\u0e40\u0e15\u0e47\u0e21\u0e41\u0e25\u0e49\u0e27 +join.full.single = \u0e17\u0e35\u0e21 {0} \u0e40\u0e15\u0e47\u0e21\u0e41\u0e25\u0e49\u0e27 +join.inventorystored = \u0e02\u0e2d\u0e07\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e08\u0e30\u0e16\u0e39\u0e01\u0e40\u0e01\u0e47\u0e1a\u0e44\u0e27\u0e49\u0e08\u0e19\u0e01\u0e27\u0e48\u0e32\u0e08\u0e30\u0e2d\u0e2d\u0e01 (/war leave) +join.permission.all = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e21\u0e35\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e01\u0e31\u0e1a\u0e17\u0e35\u0e21\u0e43\u0e14\u0e46\u0e40\u0e25\u0e22\u0e43\u0e19\u0e42\u0e0b\u0e19\u0e19\u0e35\u0e49 +join.permission.single = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e21\u0e35\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e40\u0e02\u0e49\u0e32\u0e23\u0e48\u0e27\u0e21\u0e17\u0e35\u0e21 {0} +join.progress = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e02\u0e49\u0e32\u0e23\u0e48\u0e27\u0e21\u0e42\u0e0b\u0e19\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19\u0e2a\u0e16\u0e32\u0e19\u0e30 "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e2a\u0e39\u0e49" \u0e44\u0e14\u0e49 +join.selfteam = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e02\u0e49\u0e32\u0e17\u0e35\u0e21\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e44\u0e14\u0e49 +join.team404 = \u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e17\u0e35\u0e21\u0e17\u0e35\u0e48\u0e23\u0e30\u0e1a\u0e38\u0e21\u0e32 \u0e01\u0e23\u0e38\u0e13\u0e32\u0e25\u0e2d\u0e07\u0e43\u0e0a\u0e49 /teams \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e14\u0e39\u0e0a\u0e37\u0e48\u0e2d\u0e17\u0e35\u0e21 +leave.broadcast = {0} \u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19\u0e2d\u0e2d\u0e01\u0e08\u0e32\u0e01\u0e42\u0e0b\u0e19 +leave.inventoryrestore = \u0e02\u0e2d\u0e07\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e16\u0e39\u0e01\u0e04\u0e37\u0e19\u0e41\u0e25\u0e49\u0e27\u0e40\u0e23\u0e35\u0e22\u0e1a\u0e23\u0e49\u0e2d\u0e22 +pvp.death.drown = {0} \u0e08\u0e21\u0e19\u0e49\u0e33 +pvp.death.explosion = {0} \u0e16\u0e39\u0e01\u0e23\u0e30\u0e40\u0e1a\u0e34\u0e14 +pvp.death.fall = {0} \u0e15\u0e01\u0e08\u0e32\u0e01\u0e2a\u0e19\u0e32\u0e21 +pvp.death.fire = {0} \u0e44\u0e1f\u0e44\u0e2b\u0e21\u0e49\u0e15\u0e31\u0e27\u0e15\u0e32\u0e22 +pvp.death.other = {0} \u0e15\u0e32\u0e22 +pvp.ff.disabled = \u0e42\u0e08\u0e21\u0e15\u0e35\u0e1e\u0e25\u0e32\u0e14! \u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22\u0e19\u0e31\u0e49\u0e19\u0e41\u0e25\u0e49\u0e27\u0e41\u0e15\u0e48\u0e04\u0e38\u0e13 +pvp.ff.enabled = \u0e2d\u0e22\u0e48\u0e32\u0e17\u0e33\u0e23\u0e49\u0e32\u0e22\u0e1e\u0e27\u0e01\u0e40\u0e14\u0e35\u0e22\u0e27\u0e01\u0e31\u0e19\u0e2a\u0e34 +pvp.kill.adjectives = ;;\u0e2a\u0e38\u0e14\u0e22\u0e2d\u0e14;\u0e21\u0e24\u0e15\u0e22\u0e39;\u0e04\u0e21;\u0e17\u0e35\u0e48\u0e41\u0e21\u0e48\u0e19\u0e22\u0e33;\u0e2d\u0e31\u0e19\u0e42\u0e2b\u0e14\u0e23\u0e49\u0e32\u0e22;\u0e1e\u0e25\u0e31\u0e07\u0e21\u0e2b\u0e32\u0e28\u0e32\u0e25 +pvp.kill.bomb = {0} \u0e23\u0e30\u0e40\u0e1a\u0e34\u0e14\u0e43\u0e2a\u0e48 {1} +pvp.kill.format = {0} \u0e44\u0e14\u0e49\u0e43\u0e0a\u0e49 {2}{1}{3}{4} +pvp.kill.self = {0} \u0e06\u0e48\u0e32\u0e15\u0e31\u0e27\u0e15\u0e32\u0e22 +pvp.kill.verbs = \u0e16\u0e39\u0e01\u0e06\u0e48\u0e32;\u0e16\u0e39\u0e01\u0e06\u0e48\u0e32;\u0e16\u0e39\u0e01\u0e06\u0e48\u0e32;\u0e40\u0e23\u0e35\u0e22\u0e1a\u0e23\u0e49\u0e2d\u0e22;\u0e16\u0e39\u0e01\u0e17\u0e33\u0e25\u0e32\u0e22;\u0e16\u0e39\u0e01\u0e06\u0e32\u0e15\u0e01\u0e23\u0e23\u0e21;\u0e2b\u0e32\u0e22\u0e15\u0e31\u0e27\u0e44\u0e1b;\u0e16\u0e39\u0e01\u0e01\u0e33\u0e08\u0e31\u0e14 +pvp.kill.weapon.aim = \u0e40\u0e25\u0e47\u0e07 +pvp.kill.weapon.bow = \u0e25\u0e39\u0e01\u0e28\u0e23 +pvp.kill.weapon.hand = \u0e21\u0e37\u0e2d +pvp.outside.permission = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e15\u0e35\u0e1c\u0e39\u0e49\u0e2d\u0e37\u0e48\u0e19\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e19\u0e2d\u0e01\u0e42\u0e0b\u0e19\u0e44\u0e14\u0e49 +pvp.self.notplaying = \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e40\u0e02\u0e49\u0e32\u0e23\u0e48\u0e27\u0e21\u0e42\u0e0b\u0e19\u0e2a\u0e07\u0e04\u0e23\u0e32\u0e21\u0e19\u0e35\u0e49\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e42\u0e08\u0e21\u0e15\u0e35 +pvp.self.respawn = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e42\u0e08\u0e21\u0e15\u0e35\u0e02\u0e13\u0e30\u0e01\u0e33\u0e25\u0e31\u0e07\u0e40\u0e01\u0e34\u0e14\u0e43\u0e2b\u0e21\u0e48 +pvp.self.spawn = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e42\u0e08\u0e21\u0e15\u0e35\u0e02\u0e13\u0e30\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19\u0e08\u0e38\u0e14\u0e40\u0e01\u0e34\u0e14 +pvp.target.notplaying = \u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e17\u0e35\u0e48\u0e19\u0e35\u0e49 +pvp.target.otherzone = \u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e2d\u0e22\u0e39\u0e48\u0e42\u0e0b\u0e19\u0e2d\u0e37\u0e48\u0e19 +pvp.target.respawn = \u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22\u0e01\u0e33\u0e25\u0e31\u0e07\u0e40\u0e01\u0e34\u0e14\u0e43\u0e2b\u0e21\u0e48 +pvp.target.spawn = \u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22\u0e22\u0e31\u0e07\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19\u0e08\u0e38\u0e14\u0e40\u0e01\u0e34\u0e14 +sign.lobby.autoassign = \u0e42\u0e0b\u0e19\u0e2a\u0e07\u0e04\u0e23\u0e32\u0e21\n{0}\n\u0e40\u0e02\u0e49\u0e32\u0e2a\u0e39\u0e48\u0e1b\u0e23\u0e30\u0e15\u0e39\n\u0e40\u0e02\u0e49\u0e32\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34 +sign.lobby.pick = \u0e42\u0e0b\u0e19\u0e2a\u0e07\u0e04\u0e23\u0e32\u0e21\n{0}\n\n\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e17\u0e35\u0e21\u0e2a\u0e34 +sign.lobby.warhub = \n\u0e44\u0e1b\u0e08\u0e38\u0e14\u0e23\u0e27\u0e21\u0e42\u0e0b\u0e19\n +sign.team.limited = \u0e17\u0e35\u0e21 {0}\n\u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19 {1}/{2} \u0e04\u0e19\n{3}/{4} \u0e41\u0e15\u0e49\u0e21\n{5} \u0e0a\u0e35\u0e27\u0e34\u0e15\u0e17\u0e35\u0e48\u0e40\u0e2b\u0e25\u0e37\u0e2d +sign.team.unlimited = \u0e17\u0e35\u0e21 {0}\n\u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19 {1}/{2} \u0e04\u0e19\n{3}/{4} \u0e41\u0e15\u0e49\u0e21\n\u0e44\u0e21\u0e48\u0e08\u0e33\u0e01\u0e31\u0e14\u0e0a\u0e35\u0e27\u0e34\u0e15 +sign.warhub = \u0e08\u0e38\u0e14\u0e23\u0e27\u0e21\u0e42\u0e0b\u0e19\n(/warhub)\n\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e44\u0e1b\n1 \u0e1b\u0e23\u0e30\u0e15\u0e39 +sign.warzone = \u0e42\u0e0b\u0e19\u0e2a\u0e07\u0e04\u0e23\u0e32\u0e21\n{0}\n\u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19 {1}/{2} \u0e04\u0e19\n\u0e21\u0e35 {3} \u0e17\u0e35\u0e21 +team.chat.enable = \u0e01\u0e32\u0e23\u0e2a\u0e19\u0e17\u0e19\u0e32\u0e43\u0e19\u0e17\u0e35\u0e21\u0e16\u0e39\u0e01\u0e40\u0e1b\u0e34\u0e14 \u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e08\u0e30\u0e16\u0e39\u0e01\u0e2a\u0e48\u0e07\u0e43\u0e2b\u0e49\u0e40\u0e09\u0e1e\u0e32\u0e30\u0e04\u0e19\u0e43\u0e19\u0e17\u0e35\u0e21 +team.chat.disable = \u0e01\u0e32\u0e23\u0e2a\u0e19\u0e17\u0e19\u0e32\u0e43\u0e19\u0e17\u0e35\u0e21\u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14 +use.anvil = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e48\u0e07\u0e40\u0e2b\u0e25\u0e47\u0e01\u0e43\u0e19\u0e19\u0e35\u0e49\u0e44\u0e14\u0e49 +use.enchant = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e0a\u0e49\u0e42\u0e15\u0e4a\u0e30\u0e40\u0e2a\u0e23\u0e34\u0e21\u0e1e\u0e25\u0e31\u0e07\u0e43\u0e19\u0e19\u0e35\u0e49\u0e44\u0e14\u0e49 +use.ender = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e0a\u0e49\u0e01\u0e25\u0e48\u0e2d\u0e07\u0e40\u0e2d\u0e19\u0e40\u0e14\u0e2d\u0e23\u0e4c\u0e43\u0e19\u0e19\u0e35\u0e49\u0e44\u0e14\u0e49 +use.item.spawn = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e0a\u0e49\u0e02\u0e2d\u0e07\u0e02\u0e13\u0e30\u0e2d\u0e22\u0e39\u0e48\u0e08\u0e38\u0e14\u0e40\u0e01\u0e34\u0e14\u0e44\u0e14\u0e49 +use.xpkillmeter = \u0e23\u0e30\u0e1a\u0e1a xpkillmeter \u0e44\u0e14\u0e49\u0e40\u0e27\u0e25\u0e32\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e41\u0e25\u0e49\u0e27 +wand.toofar = \u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22\u0e2d\u0e22\u0e39\u0e48\u0e44\u0e01\u0e25\u0e40\u0e01\u0e34\u0e19 +war.notadmin = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e17\u0e33\u0e44\u0e14\u0e49\u0e40\u0e1e\u0e23\u0e32\u0e30\u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e43\u0e0a\u0e49\u0e1c\u0e39\u0e49\u0e14\u0e39\u0e41\u0e25\u0e23\u0e30\u0e1a\u0e1a (war.admin) +war.notzm = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e17\u0e33\u0e44\u0e14\u0e49\u0e40\u0e1e\u0e23\u0e32\u0e30\u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e43\u0e0a\u0e49\u0e1c\u0e39\u0e49\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e42\u0e0b\u0e19 (war.zonemaker) +war.prefix = \u0e2a\u0e07\u0e04\u0e23\u0e32\u0e21 > +war.title = \u0e2a\u0e07\u0e04\u0e23\u0e32\u0e21 +warhub.none = \u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e08\u0e38\u0e14\u0e23\u0e27\u0e21\u0e42\u0e0b\u0e19\u0e1a\u0e19\u0e40\u0e0b\u0e34\u0e1f\u0e40\u0e27\u0e2d\u0e23\u0e4c \u0e25\u0e2d\u0e07\u0e43\u0e0a\u0e49 /zones \u0e2b\u0e23\u0e37\u0e2d /zone +warhub.permission = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e21\u0e35\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e43\u0e0a\u0e49\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e44\u0e1b\u0e08\u0e38\u0e14\u0e23\u0e27\u0e21\u0e42\u0e0b\u0e19\u0e2a\u0e07\u0e04\u0e23\u0e32\u0e21 +warhub.teleport = \u0e22\u0e34\u0e19\u0e14\u0e35\u0e15\u0e49\u0e2d\u0e07\u0e23\u0e31\u0e1a\u0e2a\u0e39\u0e48\u0e08\u0e38\u0e14\u0e23\u0e27\u0e21\u0e42\u0e0b\u0e19 \u0e40\u0e25\u0e37\u0e2d\u0e01\u0e40\u0e02\u0e49\u0e32\u0e40\u0e25\u0e22! +zone.airstrike = {0} \u0e40\u0e23\u0e35\u0e22\u0e01\u0e01\u0e32\u0e23\u0e42\u0e08\u0e21\u0e15\u0e35\u0e08\u0e32\u0e01\u0e17\u0e32\u0e07\u0e2d\u0e32\u0e01\u0e32\u0e28 +zone.battle.end = \u0e2a\u0e07\u0e04\u0e23\u0e32\u0e21\u0e08\u0e1a\u0e41\u0e25\u0e49\u0e27 \u0e17\u0e35\u0e21 {0} \u0e41\u0e1e\u0e49 \u0e15\u0e32\u0e22 {1} \u0e04\u0e19 \u0e41\u0e25\u0e30\u0e44\u0e21\u0e48\u0e40\u0e2b\u0e25\u0e37\u0e2d\u0e43\u0e04\u0e23\u0e2d\u0e35\u0e01\u0e40\u0e25\u0e22 +zone.battle.newscores = \u0e41\u0e15\u0e49\u0e21\u0e43\u0e2b\u0e21\u0e48 - {0} +zone.battle.next = \u0e01\u0e32\u0e23\u0e2a\u0e39\u0e49\u0e23\u0e1a\u0e40\u0e01\u0e34\u0e14\u0e01\u0e32\u0e23\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14 \u0e01\u0e33\u0e25\u0e31\u0e07\u0e23\u0e35\u0e40\u0e0b\u0e47\u0e15\u0e42\u0e0b\u0e19 {0} +zone.battle.reset = \u0e01\u0e32\u0e23\u0e2a\u0e39\u0e49\u0e23\u0e1a\u0e01\u0e33\u0e25\u0e31\u0e07\u0e40\u0e23\u0e34\u0e48\u0e21\u0e43\u0e19\u0e2d\u0e35\u0e01\u0e44\u0e21\u0e48\u0e0a\u0e49\u0e32\u0e41\u0e25\u0e30\u0e01\u0e33\u0e25\u0e31\u0e07\u0e23\u0e35\u0e40\u0e0b\u0e47\u0e15\u0e42\u0e0b\u0e19 +zone.battle.resetprogress = \u0e01\u0e33\u0e25\u0e31\u0e07\u0e23\u0e35\u0e40\u0e0b\u0e47\u0e15\u0e42\u0e0b\u0e19 {0}% \u0e1c\u0e48\u0e32\u0e19\u0e44\u0e1b {1} \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35 +zone.battle.resetcomplete = \u0e42\u0e0b\u0e19\u0e2a\u0e07\u0e04\u0e23\u0e32\u0e21\u0e08\u0e30\u0e40\u0e23\u0e34\u0e48\u0e21\u0e43\u0e2b\u0e21\u0e48\u0e43\u0e19 {0} \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35 +zone.bomb.broadcast = {0} \u0e23\u0e30\u0e40\u0e1a\u0e34\u0e14\u0e43\u0e2a\u0e48\u0e17\u0e35\u0e48\u0e08\u0e38\u0e14\u0e40\u0e01\u0e34\u0e14\u0e02\u0e2d\u0e07\u0e17\u0e35\u0e21 {1} \u0e17\u0e35\u0e21 {2} \u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a 1 \u0e41\u0e15\u0e49\u0e21 +zone.cake.broadcast = {0} \u0e40\u0e2d\u0e32\u0e40\u0e04\u0e49\u0e01 {1} \u0e44\u0e1b \u0e17\u0e35\u0e21 {2} \u0e23\u0e31\u0e1a\u0e41\u0e15\u0e49\u0e21 1 \u0e41\u0e15\u0e49\u0e21\u0e41\u0e25\u0e30\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e1e\u0e25\u0e31\u0e07\u0e0a\u0e35\u0e27\u0e34\u0e15\u0e14\u0e49\u0e27\u0e22 +zone.flagcapture.broadcast = {0} \u0e40\u0e2d\u0e32\u0e18\u0e07\u0e02\u0e2d\u0e07\u0e17\u0e35\u0e21 {1} \u0e44\u0e1b \u0e17\u0e35\u0e21 {2} \u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e41\u0e15\u0e49\u0e21 1 \u0e41\u0e15\u0e49\u0e21 +zone.flagreturn.deadlock = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e2d\u0e32\u0e18\u0e07\u0e02\u0e2d\u0e07\u0e1d\u0e48\u0e32\u0e22\u0e15\u0e23\u0e07\u0e02\u0e49\u0e32\u0e21\u0e44\u0e14\u0e49 \u0e08\u0e19\u0e27\u0e48\u0e32\u0e18\u0e07\u0e02\u0e2d\u0e07\u0e17\u0e35\u0e21\u0e04\u0e38\u0e13\u0e08\u0e30\u0e44\u0e21\u0e48\u0e16\u0e39\u0e01\u0e40\u0e2d\u0e32\u0e44\u0e1b +zone.flagreturn.flag = \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e40\u0e2d\u0e32\u0e18\u0e07\u0e02\u0e2d\u0e07\u0e1d\u0e48\u0e32\u0e22\u0e15\u0e23\u0e07\u0e02\u0e49\u0e32\u0e21\u0e21\u0e32\u0e17\u0e35\u0e48\u0e18\u0e07\u0e02\u0e2d\u0e07\u0e17\u0e35\u0e21\u0e04\u0e38\u0e13 +zone.flagreturn.spawn = \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e40\u0e2d\u0e32\u0e18\u0e07\u0e02\u0e2d\u0e07\u0e1d\u0e48\u0e32\u0e22\u0e15\u0e23\u0e07\u0e02\u0e49\u0e32\u0e21\u0e21\u0e32\u0e17\u0e35\u0e48\u0e08\u0e38\u0e14\u0e40\u0e01\u0e34\u0e14\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 +zone.leavenotice = \u0e43\u0e0a\u0e49 /war leave \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e2d\u0e2d\u0e01\u0e08\u0e32\u0e01\u0e42\u0e0b\u0e19 +zone.lifepool.empty = \u0e0a\u0e35\u0e27\u0e34\u0e15\u0e02\u0e2d\u0e07\u0e17\u0e35\u0e21 {0} \u0e2b\u0e21\u0e14\u0e41\u0e25\u0e49\u0e27 \u0e16\u0e49\u0e32\u0e15\u0e32\u0e22\u0e2d\u0e35\u0e01\u0e01\u0e47\u0e40\u0e1b\u0e47\u0e19\u0e2d\u0e31\u0e19\u0e08\u0e1a\u0e40\u0e01\u0e21\u0e41\u0e25\u0e30\u0e41\u0e1e\u0e49 +zone.loadout.equip = \u0e43\u0e2a\u0e48 {0} \u0e42\u0e2b\u0e25\u0e14\u0e40\u0e2d\u0e4a\u0e32\u0e41\u0e25\u0e49\u0e27 (\u0e01\u0e14\u0e22\u0e48\u0e2d\u0e07\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e43\u0e0a\u0e49) +zone.loadout.reenter = \u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e41\u0e1b\u0e25\u0e07\u0e42\u0e2b\u0e25\u0e14\u0e40\u0e2d\u0e4a\u0e32\u0e2b\u0e25\u0e31\u0e07\u0e08\u0e32\u0e01\u0e2d\u0e2d\u0e01\u0e08\u0e32\u0e01\u0e08\u0e38\u0e14\u0e40\u0e01\u0e34\u0e14 +zone.monument.badblock = \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e40\u0e01\u0e47\u0e1a\u0e2b\u0e38\u0e48\u0e19\u0e01\u0e31\u0e1a\u0e1a\u0e25\u0e47\u0e2d\u0e01\u0e02\u0e19\u0e41\u0e01\u0e30\u0e2a\u0e35\u0e17\u0e35\u0e21\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 \u0e40\u0e2d\u0e32\u0e44\u0e14\u0e49\u0e08\u0e32\u0e01\u0e08\u0e38\u0e14\u0e40\u0e01\u0e34\u0e14\u0e02\u0e2d\u0e07\u0e17\u0e35\u0e21\u0e04\u0e38\u0e13 +zone.monument.capture = \u0e2b\u0e38\u0e48\u0e19 {0} \u0e42\u0e14\u0e19\u0e40\u0e01\u0e47\u0e1a\u0e42\u0e14\u0e22\u0e17\u0e35\u0e21 {1} +zone.monument.lose = \u0e17\u0e35\u0e21 {0} \u0e40\u0e2a\u0e35\u0e22\u0e01\u0e32\u0e23\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\u0e2b\u0e38\u0e48\u0e19 {1} +zone.monument.voodoo = \u0e01\u0e32\u0e23\u0e40\u0e15\u0e49\u0e19\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e2b\u0e38\u0e48\u0e19\u0e02\u0e2d\u0e07\u0e02\u0e36\u0e48\u0e19! \u0e04\u0e38\u0e13\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e0a\u0e35\u0e27\u0e34\u0e15 {0} \u0e0a\u0e35\u0e27\u0e34\u0e15 +zone.noteamnotice = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e02\u0e49\u0e32\u0e44\u0e1b\u0e43\u0e19\u0e42\u0e0b\u0e19\u0e44\u0e14\u0e49\u0e42\u0e14\u0e22\u0e44\u0e21\u0e48\u0e21\u0e35\u0e17\u0e35\u0e21 +zone.score.board404 = \u0e42\u0e0b\u0e19\u0e2a\u0e07\u0e04\u0e23\u0e32\u0e21\u0e19\u0e35\u0e49 \u0e23\u0e30\u0e1a\u0e1a\u0e04\u0e30\u0e41\u0e19\u0e19\u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14\u0e2d\u0e22\u0e39\u0e48 +zone.score.empty = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e2d\u0e32\u0e41\u0e15\u0e49\u0e21\u0e44\u0e14\u0e49\u0e08\u0e19\u0e01\u0e27\u0e48\u0e32\u0e08\u0e30\u0e21\u0e35\u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19\u0e2d\u0e35\u0e01\u0e04\u0e19\u0e40\u0e02\u0e49\u0e32\u0e21\u0e32\u0e43\u0e19\u0e17\u0e35\u0e21\u0e2d\u0e37\u0e48\u0e19 +zone.spawn.minplayers = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e2d\u0e2d\u0e01\u0e08\u0e32\u0e01\u0e08\u0e38\u0e14\u0e40\u0e01\u0e34\u0e14\u0e44\u0e14\u0e49\u0e08\u0e19\u0e01\u0e27\u0e48\u0e32\u0e08\u0e30\u0e21\u0e35\u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e19\u0e49\u0e2d\u0e22 {0} \u0e04\u0e19 \u0e15\u0e48\u0e2d {1} \u0e17\u0e35\u0e21 +zone.spawn.timer = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e2d\u0e2d\u0e01\u0e08\u0e32\u0e01\u0e08\u0e38\u0e14\u0e40\u0e01\u0e34\u0e14\u0e40\u0e1b\u0e47\u0e19\u0e40\u0e27\u0e25\u0e32 {0} \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e01\u0e34\u0e14\u0e43\u0e2b\u0e21\u0e48 +zone.steal.bomb.broadcast = {0} \u0e21\u0e35\u0e23\u0e30\u0e40\u0e1a\u0e34\u0e14 {1} +zone.steal.bomb.notice = \u0e04\u0e38\u0e13\u0e21\u0e35\u0e23\u0e30\u0e40\u0e1a\u0e34\u0e14 {0} \u0e44\u0e1b\u0e22\u0e31\u0e07\u0e08\u0e38\u0e14\u0e40\u0e01\u0e34\u0e14\u0e02\u0e2d\u0e07\u0e17\u0e35\u0e21\u0e2d\u0e37\u0e48\u0e19\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e23\u0e30\u0e40\u0e1a\u0e34\u0e14 \u0e2d\u0e22\u0e48\u0e32\u0e44\u0e1b\u0e42\u0e14\u0e19\u0e43\u0e04\u0e23\u0e25\u0e30 \u0e40\u0e14\u0e35\u0e48\u0e22\u0e27\u0e21\u0e31\u0e19\u0e08\u0e30\u0e23\u0e30\u0e40\u0e1a\u0e34\u0e14\u0e43\u0e2a\u0e48\u0e2b\u0e19\u0e49\u0e32 +zone.steal.bomb.prevent = \u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19 {0} \u0e44\u0e21\u0e48\u0e43\u0e2b\u0e49\u0e44\u0e1b\u0e17\u0e35\u0e48\u0e08\u0e38\u0e14\u0e40\u0e01\u0e34\u0e14\u0e14\u0e49\u0e27\u0e22\u0e23\u0e30\u0e40\u0e1a\u0e34\u0e14 +zone.steal.cake.broadcast = {0} \u0e21\u0e35\u0e40\u0e04\u0e49\u0e01 {1} +zone.steal.cake.notice = \u0e04\u0e38\u0e13\u0e21\u0e35\u0e40\u0e04\u0e49\u0e01 {0} \u0e44\u0e1b\u0e17\u0e35\u0e48\u0e08\u0e38\u0e14\u0e40\u0e01\u0e34\u0e14\u0e02\u0e2d\u0e07\u0e17\u0e35\u0e21\u0e04\u0e38\u0e13\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e0a\u0e35\u0e27\u0e34\u0e15 +zone.steal.cake.prevent = \u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19 {0} \u0e44\u0e21\u0e48\u0e43\u0e2b\u0e49\u0e44\u0e1b\u0e17\u0e35\u0e48\u0e08\u0e38\u0e14\u0e40\u0e01\u0e34\u0e14\u0e14\u0e49\u0e27\u0e22\u0e40\u0e04\u0e49\u0e01 +zone.steal.flag.broadcast = {0} \u0e02\u0e42\u0e21\u0e22\u0e18\u0e07\u0e02\u0e2d\u0e07\u0e17\u0e35\u0e21 {1} \u0e44\u0e1b! +zone.steal.flag.empty = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e02\u0e42\u0e21\u0e22\u0e18\u0e07\u0e02\u0e2d\u0e07\u0e17\u0e35\u0e21 {0} \u0e44\u0e14\u0e49\u0e40\u0e1e\u0e23\u0e32\u0e30\u0e44\u0e21\u0e48\u0e21\u0e35\u0e43\u0e04\u0e23\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19\u0e17\u0e35\u0e21 +zone.steal.flag.notice = \u0e04\u0e38\u0e13\u0e21\u0e35\u0e18\u0e07\u0e02\u0e2d\u0e07\u0e17\u0e35\u0e21 {0} \u0e44\u0e1b\u0e17\u0e35\u0e48\u0e08\u0e38\u0e14\u0e40\u0e01\u0e34\u0e14\u0e02\u0e2d\u0e07\u0e17\u0e35\u0e21\u0e04\u0e38\u0e13\u0e0b\u0e30\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e23\u0e31\u0e1a\u0e41\u0e15\u0e49\u0e21 +zone.steal.flag.prevent = \u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19 {0} \u0e08\u0e32\u0e01\u0e01\u0e32\u0e23\u0e40\u0e02\u0e49\u0e32\u0e16\u0e36\u0e07\u0e08\u0e38\u0e14\u0e40\u0e01\u0e34\u0e14\u0e2b\u0e23\u0e37\u0e2d\u0e18\u0e07\u0e02\u0e2d\u0e07\u0e17\u0e35\u0e21 {1} +zone.stealextra.bomb = \u0e04\u0e38\u0e13\u0e40\u0e2d\u0e32\u0e23\u0e30\u0e40\u0e1a\u0e34\u0e14\u0e44\u0e14\u0e49 1 \u0e2d\u0e31\u0e19\u0e15\u0e48\u0e2d\u0e04\u0e23\u0e31\u0e49\u0e07\u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19 +zone.stealextra.cake = \u0e04\u0e38\u0e13\u0e40\u0e2d\u0e32\u0e40\u0e04\u0e49\u0e01\u0e44\u0e14\u0e49\u0e41\u0e04\u0e48 1 \u0e01\u0e49\u0e2d\u0e19\u0e15\u0e48\u0e2d\u0e04\u0e23\u0e31\u0e49\u0e07\u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19 +zone.stealextra.flag = \u0e04\u0e38\u0e13\u0e40\u0e2d\u0e32\u0e18\u0e07\u0e44\u0e14\u0e49\u0e41\u0e04\u0e48 1 \u0e18\u0e07\u0e15\u0e48\u0e2d\u0e04\u0e23\u0e31\u0e49\u0e07\u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19 +zone.stealextra.other = \u0e04\u0e38\u0e13\u0e40\u0e2d\u0e32\u0e02\u0e2d\u0e07\u0e44\u0e14\u0e49\u0e41\u0e04\u0e48 1 \u0e2d\u0e22\u0e48\u0e32\u0e07\u0e15\u0e48\u0e2d\u0e04\u0e23\u0e31\u0e49\u0e07\u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19 +zone.teaminfo.format = \u0e17\u0e35\u0e21 {0} : \u0e21\u0e35 {1} \u0e41\u0e15\u0e49\u0e21 \u0e21\u0e35 {2}/{3} \u0e0a\u0e35\u0e27\u0e34\u0e15\u0e17\u0e35\u0e48\u0e40\u0e2b\u0e25\u0e37\u0e2d {4} +zone.teaminfo.none = \u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25 +zone.teaminfo.prefix = \u0e17\u0e35\u0e21: +zone.teleport = \u0e22\u0e34\u0e19\u0e14\u0e35\u0e15\u0e49\u0e2d\u0e19\u0e23\u0e31\u0e1a\u0e2a\u0e39\u0e48\u0e42\u0e0b\u0e19 {0} +zone.warp.permission = \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e21\u0e35\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e17\u0e35\u0e48\u0e08\u0e30\u0e44\u0e1b\u0e42\u0e0b\u0e19\u0e2a\u0e07\u0e04\u0e23\u0e32\u0e21 +zone.zone404 = \u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e42\u0e0b\u0e19\u0e14\u0e31\u0e07\u0e01\u0e25\u0e48\u0e32\u0e27 +zone.zoneinfo.format = \u0e17\u0e35\u0e21 {0} : \u0e21\u0e35 {1} \u0e17\u0e35\u0e21 \u0e21\u0e35 {2} \u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19 +zone.zoneinfo.prefix = \u0e42\u0e0b\u0e19\u0e2a\u0e07\u0e04\u0e23\u0e32\u0e21 +zone.zoneinfo.teleport = \u0e43\u0e0a\u0e49 /zone <\u0e0a\u0e37\u0e48\u0e2d\u0e42\u0e0b\u0e19> \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e44\u0e1b\u0e22\u0e31\u0e07\u0e42\u0e0b\u0e19\u0e19\u0e31\u0e49\u0e19 diff --git a/war/src/main/resources/messages_tr_TR.properties b/war/src/main/resources/messages_tr_TR.properties new file mode 100644 index 0000000..9a74eab --- /dev/null +++ b/war/src/main/resources/messages_tr_TR.properties @@ -0,0 +1,6 @@ +# Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) +build.denied.location = Burada yap\u0131 yapamazs\u0131n\u0131z. +build.denied.outside = Sadece sava\u015f alan\u0131 i\u00e7inde yap\u0131 yapabilirsiniz +build.denied.zone.break = Bu sava\u015f alan\u0131ndaki bloklar k\u0131r\u0131lamaz. +build.denied.zone.multteam = Zaten {0} blo\u011funa sahipsiniz. +zone.teaminfo.prefix = Tak\u0131mlar: diff --git a/war/src/main/resources/messages_uk.properties b/war/src/main/resources/messages_uk.properties new file mode 100644 index 0000000..e48e951 --- /dev/null +++ b/war/src/main/resources/messages_uk.properties @@ -0,0 +1,13 @@ +# Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) +build.denied.location = \u0412\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0431\u0443\u0434\u0443\u0432\u0430\u0442\u0438 \u0442\u0443\u0442 +build.denied.outside = \u0412\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0431\u0443\u0434\u0443\u0432\u0430\u0442\u0438 \u0442\u0456\u043b\u044c\u043a\u0438 \u0432\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0456 WAR-\u0437\u043e\u043d\u044b. +build.denied.teamblock = \u0412\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0442\u0456\u043b\u044c\u043a\u0438 \u0431\u043b\u043e\u043a\u0438 \u0432\u0430\u0448\u043e\u0457 \u043a\u043e\u043c\u0430\u043d\u0434\u0438, \u0430\u0431\u0438 \u0437\u0430\u0445\u043e\u043f\u0438\u0442\u0438 \u043c\u043e\u043d\u0443\u043c\u0435\u043d\u0442\u0438. +build.denied.zone.break = \u0411\u043b\u043e\u043a\u0438 \u0432 \u0446\u0456\u0439 WAR-\u0437\u043e\u043d\u0456 \u043d\u0435\u043c\u043e\u0436\u043b\u0438\u0432\u043e \u0437\u0440\u0443\u0439\u043d\u0443\u0432\u0430\u0442\u0438! +build.denied.zone.multteam = \u0412\u0438 \u043c\u0430\u0454\u0442\u0435 {0} \u0431\u043b\u043e\u043a\u0456\u0432. +build.denied.zone.outside = \u0412\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0440\u0443\u0439\u043d\u0443\u0432\u0430\u0442\u0438 WAR-\u0437\u043e\u043d\u0443, \u0442\u043e\u043c\u0443 \u0449\u043e \u043d\u0435 \u0433\u0440\u0430\u0454\u0442\u0435 \u0432 \u043d\u0456\u0439. +build.denied.zone.place = \u0412\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0431\u043b\u043e\u043a\u0438 \u0432 \u0446\u0456\u0439 WAR-\u0437\u043e\u043d\u0456. +build.denied.zone.type = \u0412\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0446\u0435\u0439 \u0442\u0438\u043f \u0431\u043b\u043e\u043a\u0443. +command.console = \u0412\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0440\u043e\u0431\u0438\u0442\u0438 \u0446\u0435, \u044f\u043a\u0449\u043e \u043d\u0435 \u0437\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0435\u0441\u044c \u0443 \u0433\u0440\u0456. +command.disabled = \u0412\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0442\u0456\u043b\u044c\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0438 WAR (\u043d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, /leave), \u043a\u043e\u043b\u0438 \u0412\u0438 \u0443 \u0433\u0440\u0456. +drop.bomb.broadcast = {0} \u043a\u0438\u043d\u0443\u0432 {1} \u0431\u043e\u043c\u0431\u0443! +drop.bomb.disabled = \u0412\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043a\u0438\u0434\u0430\u0442\u0438 \u0440\u0435\u0447\u0456 \u0432 \u0442\u043e\u0439 \u0447\u0430\u0441, \u043a\u043e\u043b\u0438 \u0432\u0438\u043a\u0440\u0430\u0434\u0430\u0454\u0442\u044c\u0441\u044f \u0431\u043e\u043c\u0431\u0430. \u0429\u043e \u0412\u0438 \u0440\u043e\u0431\u0438\u0442\u0435?! \u0411\u0456\u0436\u0456\u0442\u044c \u0434\u043e \u0441\u043f\u0430\u0432\u043d\u0430 \u0432\u0430\u0448\u043e\u0433\u043e \u0432\u043e\u0440\u043e\u0433\u0430! diff --git a/war/src/main/resources/messages_zh_HK.properties b/war/src/main/resources/messages_zh_HK.properties new file mode 100644 index 0000000..25ba044 --- /dev/null +++ b/war/src/main/resources/messages_zh_HK.properties @@ -0,0 +1,3 @@ +# Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) +build.denied.location = \u4f60\u4e0d\u53ef\u4ee5\u5728\u9019\u88e1\u5efa\u7bc9\uff01 +build.denied.outside = \u4f60\u53ea\u53ef\u4ee5\u5728\u6230\u5340\u5167\u5efa\u7bc9\u3002 From f6175451eeff8e15b5ead0c2222249ece46f86f0 Mon Sep 17 00:00:00 2001 From: Connor Monahan Date: Wed, 8 Jun 2016 17:59:45 -0400 Subject: [PATCH 34/36] Fix nohunger under 1.9 Closes #829 --- .../war/event/WarEntityListener.java | 85 +++++++++---------- 1 file changed, 41 insertions(+), 44 deletions(-) diff --git a/war/src/main/java/com/tommytony/war/event/WarEntityListener.java b/war/src/main/java/com/tommytony/war/event/WarEntityListener.java index 6cf4fe7..182293e 100644 --- a/war/src/main/java/com/tommytony/war/event/WarEntityListener.java +++ b/war/src/main/java/com/tommytony/war/event/WarEntityListener.java @@ -3,6 +3,7 @@ package com.tommytony.war.event; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; +import java.text.MessageFormat; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -61,7 +62,7 @@ public class WarEntityListener implements Listener { private void handlerAttackDefend(EntityDamageByEntityEvent event) { Entity attacker = event.getDamager(); Entity defender = event.getEntity(); - + // Maybe an arrow was thrown if (attacker != null && event.getDamager() instanceof Projectile && ((Projectile)event.getDamager()).getShooter() instanceof Player){ attacker = ((Player)((Projectile)event.getDamager()).getShooter()); @@ -75,24 +76,24 @@ public class WarEntityListener implements Listener { Team attackerTeam = Team.getTeamByPlayerName(a.getName()); Warzone defenderWarzone = Warzone.getZoneByPlayerName(d.getName()); Team defenderTeam = Team.getTeamByPlayerName(d.getName()); - + if ((attackerTeam != null && defenderTeam != null && attackerTeam != defenderTeam && attackerWarzone == defenderWarzone) || (attackerTeam != null && defenderTeam != null && attacker.getEntityId() == defender.getEntityId())) { - + LoadoutSelection defenderLoadoutState = defenderWarzone.getLoadoutSelections().get(d.getName()); if (defenderLoadoutState != null && defenderLoadoutState.isStillInSpawn()) { War.war.badMsg(a, "pvp.target.spawn"); event.setCancelled(true); return; } - + LoadoutSelection attackerLoadoutState = attackerWarzone.getLoadoutSelections().get(a.getName()); if (attackerLoadoutState != null && attackerLoadoutState.isStillInSpawn()) { War.war.badMsg(a, "pvp.self.spawn"); event.setCancelled(true); return; } - + // Make sure none of them are locked in by respawn timer if (defenderWarzone.isRespawning(d)) { War.war.badMsg(a, "pvp.target.respawn"); @@ -103,7 +104,7 @@ public class WarEntityListener implements Listener { event.setCancelled(true); return; } - + if (!attackerWarzone.getWarzoneConfig().getBoolean(WarzoneConfig.PVPINZONE)) { // spleef-like, non-pvp, zone event.setCancelled(true); @@ -113,7 +114,7 @@ public class WarEntityListener implements Listener { // Detect death, prevent it and respawn the player if (event.getDamage() >= d.getHealth()) { if (defenderWarzone.getReallyDeadFighters().contains(d.getName())) { - // don't re-kill a dead person + // don't re-kill a dead person return; } WarPlayerDeathEvent event1 = new WarPlayerDeathEvent(defenderWarzone, d, a, event.getCause()); @@ -128,20 +129,20 @@ public class WarEntityListener implements Listener { defenderWarzone.handleKill(a, d, event.getDamager()); } } else if (defenderWarzone.isBombThief(d.getName()) && d.getLocation().distance(a.getLocation()) < 2) { - // Close combat, close enough to detonate + // Close combat, close enough to detonate Bomb bomb = defenderWarzone.getBombForThief(d.getName()); - - // Kill the bomber + + // Kill the bomber WarPlayerDeathEvent event1 = new WarPlayerDeathEvent(defenderWarzone, d, null, event.getCause()); War.war.getServer().getPluginManager().callEvent(event1); defenderWarzone.handleDeath(d); - + if (defenderWarzone.getWarzoneConfig().getBoolean(WarzoneConfig.REALDEATHS)) { // and respawn him and remove from deadmen (cause realdeath + handleDeath means no respawn and getting queued up for onPlayerRespawn) defenderWarzone.getReallyDeadFighters().remove(d.getName()); defenderWarzone.respawnPlayer(defenderTeam, d); } - + // Blow up bomb if (!defenderWarzone.getWarzoneConfig().getBoolean(WarzoneConfig.UNBREAKABLE)) { defenderWarzone.getWorld().createExplosion(a.getLocation(), 2F); @@ -150,7 +151,7 @@ public class WarEntityListener implements Listener { // bring back tnt bomb.getVolume().resetBlocks(); bomb.addBombBlocks(); - + // Notify everyone for (Team t : defenderWarzone.getTeams()) { t.sendAchievement(attackerTeam.getKind().getColor() + a.getName() + ChatColor.YELLOW + " made ", @@ -173,7 +174,7 @@ public class WarEntityListener implements Listener { if (!War.war.getWarConfig().getBoolean(WarConfig.DISABLEPVPMESSAGE)) { War.war.badMsg(a, "pvp.outside.permission"); } - + event.setCancelled(true); // global pvp is off } else { if (attackerTeam == null) { @@ -202,10 +203,10 @@ public class WarEntityListener implements Listener { return; } if (defenderWarzone.getReallyDeadFighters().contains(d.getName())) { - // don't re-kill a dead person + // don't re-kill a dead person return; } - + WarPlayerDeathEvent event1 = new WarPlayerDeathEvent(defenderWarzone, d, null, event.getCause()); War.war.getServer().getPluginManager().callEvent(event1); if (!defenderWarzone.getWarzoneConfig().getBoolean(WarzoneConfig.REALDEATHS)) { @@ -230,15 +231,15 @@ public class WarEntityListener implements Listener { // protect zones elements, lobbies and warhub from creepers and tnt List explodedBlocks = event.blockList(); List dontExplode = new ArrayList(); - + boolean explosionInAWarzone = event.getEntity() != null && Warzone.getZoneByLocation(event.getEntity().getLocation()) != null; - + if (!explosionInAWarzone && War.war.getWarConfig().getBoolean(WarConfig.TNTINZONESONLY) && event.getEntity() instanceof TNTPrimed) { // if tntinzonesonly:true, no tnt blows up outside zones event.setCancelled(true); return; } - + for (Block block : explodedBlocks) { if (block.getType() == Material.TNT) { continue; // don't restore TNT (failed to track down regression cause) @@ -269,28 +270,28 @@ public class WarEntityListener implements Listener { inOneZone = true; } } - + if (!inOneZone && explosionInAWarzone) { // if the explosion originated in warzone, always rollback dontExplode.add(block); } } } - + int dontExplodeSize = dontExplode.size(); if (dontExplode.size() > 0) { - // Reset the exploded blocks that shouldn't have exploded (some of these are zone artifacts, if rollbackexplosion some may be outside-of-zone blocks + // Reset the exploded blocks that shouldn't have exploded (some of these are zone artifacts, if rollbackexplosion some may be outside-of-zone blocks DeferredBlockResetsJob job = new DeferredBlockResetsJob(); for (Block dont : dontExplode) { job.add(dont.getState()); } War.war.getServer().getScheduler().scheduleSyncDelayedTask(War.war, job); - - // Changed explosion yield following proportion of explosion prevention (makes drops less buggy too) + + // Changed explosion yield following proportion of explosion prevention (makes drops less buggy too) int explodedSize = explodedBlocks.size(); float middleYeild = (float)(explodedSize - dontExplodeSize) / (float)explodedSize; float newYeild = middleYeild * event.getYield(); - + event.setYield(newYeild); } } @@ -303,14 +304,14 @@ public class WarEntityListener implements Listener { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onEntityDamage(final EntityDamageEvent event) { - - if (!War.war.isLoaded()) { + + if (!War.war.isLoaded()) { return; } Entity entity = event.getEntity(); if (!(entity instanceof Player)) { - + return; } Player player = (Player) entity; @@ -322,13 +323,13 @@ public class WarEntityListener implements Listener { } // pass pvp-damage - if (event instanceof EntityDamageByEntityEvent) { + if (event instanceof EntityDamageByEntityEvent) { this.handlerAttackDefend((EntityDamageByEntityEvent) event); } else { Team team = Team.getTeamByPlayerName(player.getName()); - + if (zone != null && team != null) { - LoadoutSelection playerLoadoutState = zone.getLoadoutSelections().get(player.getName()); + LoadoutSelection playerLoadoutState = zone.getLoadoutSelections().get(player.getName()); if (team.isSpawnLocation(player.getLocation()) && playerLoadoutState != null && playerLoadoutState.isStillInSpawn()) { // don't let a player still in spawn get damaged @@ -338,7 +339,7 @@ public class WarEntityListener implements Listener { // don't re-count the death points of an already dead person return; } - + // Detect death, prevent it and respawn the player WarPlayerDeathEvent event1 = new WarPlayerDeathEvent(zone, player, null, event.getCause()); War.war.getServer().getPluginManager().callEvent(event1); @@ -377,10 +378,7 @@ public class WarEntityListener implements Listener { */ @EventHandler public void onEntityRegainHealth(final EntityRegainHealthEvent event) { - if (!War.war.isLoaded() || - (event.getRegainReason() != RegainReason.REGEN - && event.getRegainReason() != RegainReason.EATING - && event.getRegainReason() != RegainReason.SATIATED)) { + if (!War.war.isLoaded()) { return; } @@ -393,8 +391,7 @@ public class WarEntityListener implements Listener { Warzone zone = Warzone.getZoneByPlayerName(player.getName()); if (zone != null) { Team team = Team.getTeamByPlayerName(player.getName()); - if ((event.getRegainReason() == RegainReason.EATING - || event.getRegainReason() != RegainReason.SATIATED ) + if (event.getRegainReason() == RegainReason.SATIATED && team.getTeamConfig().resolveBoolean(TeamConfig.NOHUNGER)) { // noHunger setting means you can't auto-heal with full hunger bar (use saturation instead to control how fast you get hungry) event.setCancelled(true); @@ -404,13 +401,13 @@ public class WarEntityListener implements Listener { } } } - + @EventHandler public void onFoodLevelChange(final FoodLevelChangeEvent event) { if (!War.war.isLoaded() || !(event.getEntity() instanceof Player)) { return; } - + Player player = (Player) event.getEntity(); Warzone zone = Warzone.getZoneByPlayerName(player.getName()); Team team = Team.getTeamByPlayerName(player.getName()); @@ -418,7 +415,7 @@ public class WarEntityListener implements Listener { event.setCancelled(true); } } - + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPlayerDeath(final PlayerDeathEvent event) { Player player = event.getEntity(); @@ -438,15 +435,15 @@ public class WarEntityListener implements Listener { } } } - + @EventHandler public void onExplosionPrime(final ExplosionPrimeEvent event) { if (!War.war.isLoaded()) { return; } - + Location eventLocation = event.getEntity().getLocation(); - + for (Warzone zone : War.war.getWarzones()) { if (zone.isBombBlock(eventLocation.getBlock())) { // prevent the Bomb from exploding on its pedestral From e3c154ba7a1cdc7e0044ec30b66d2451a6f42084 Mon Sep 17 00:00:00 2001 From: Connor Monahan Date: Wed, 8 Jun 2016 18:23:30 -0400 Subject: [PATCH 35/36] Prevent breaking paintings in unbreakable zones Closes #815 --- .../war/event/WarEntityListener.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/war/src/main/java/com/tommytony/war/event/WarEntityListener.java b/war/src/main/java/com/tommytony/war/event/WarEntityListener.java index 182293e..4d39a66 100644 --- a/war/src/main/java/com/tommytony/war/event/WarEntityListener.java +++ b/war/src/main/java/com/tommytony/war/event/WarEntityListener.java @@ -30,6 +30,8 @@ import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.event.hanging.HangingPlaceEvent; +import org.bukkit.event.hanging.HangingBreakByEntityEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.projectiles.ProjectileSource; @@ -496,4 +498,43 @@ public class WarEntityListener implements Listener { } } + @EventHandler + public void onPaintingBreakByEntity(final HangingBreakByEntityEvent event) { + if (!War.war.isLoaded()) { + return; + } + if (!(event.getRemover() instanceof Player)) { + return; + } + Player player = (Player) event.getRemover(); + Warzone zone = Warzone.getZoneByLocation(event.getEntity().getLocation()); + Team team = Team.getTeamByPlayerName(player.getName()); + boolean isZoneMaker = War.war.isZoneMaker(player); + if (team == null && isZoneMaker) { + return; + } + if (zone != null && zone.getWarzoneConfig().getBoolean(WarzoneConfig.UNBREAKABLE)) { + event.setCancelled(true); + War.war.badMsg(player, "build.denied.zone.break"); + } + } + + @EventHandler + public void onPaintingPlaceByEntity(final HangingPlaceEvent event) { + if (!War.war.isLoaded()) { + return; + } + Player player = event.getPlayer(); + Warzone zone = Warzone.getZoneByLocation(event.getBlock().getLocation()); + Team team = Team.getTeamByPlayerName(player.getName()); + boolean isZoneMaker = War.war.isZoneMaker(player); + if (team == null && isZoneMaker) { + return; + } + if (zone != null && (zone.getWarzoneConfig().getBoolean(WarzoneConfig.UNBREAKABLE) + || (team != null && !team.getTeamConfig().resolveBoolean(TeamConfig.PLACEBLOCK)))) { + event.setCancelled(true); + War.war.badMsg(player, "build.denied.zone.place"); + } + } } From 8ad26d51fe1a3f77cc69801b7931dcb9895da03d Mon Sep 17 00:00:00 2001 From: Connor Monahan Date: Wed, 8 Jun 2016 18:55:49 -0400 Subject: [PATCH 36/36] Bumped version to 1.9 for release --- war/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/war/pom.xml b/war/pom.xml index acb0459..68a9bd7 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.tommytony war - 1.9-SNAPSHOT + 1.9 jar War http://war.tommytony.com