Added party levels

Parties now have XP and Levels. Party features such as party teleport and party chat have to be unlocked before they can be used by the party members
This commit is contained in:
TfT_02 2013-11-11 17:42:57 +01:00
parent c729297615
commit 818962e668
34 changed files with 561 additions and 89 deletions

View File

@ -32,6 +32,7 @@ Version 1.4.08-dev
= Fixed bug which made it possible to gain XP by taming the same horse multiple times, if a player "untamed" that horse = Fixed bug which made it possible to gain XP by taming the same horse multiple times, if a player "untamed" that horse
= Fixed bug where the /ptp request expiration time was checked wrongly - preventing players from using the command = Fixed bug where the /ptp request expiration time was checked wrongly - preventing players from using the command
= Fixed bug where Hylian Luck was broken = Fixed bug where Hylian Luck was broken
! Changed party system. Parties now have XP and Levels. Party features such as party teleport and party chat have to be unlocked before they can be used by the party members
! Updated localization files ! Updated localization files
! Changed the appearance of /mcmmo commands ! Changed the appearance of /mcmmo commands
! Changed AxesCritical to CriticalHit in config file ! Changed AxesCritical to CriticalHit in config file

View File

@ -9,6 +9,8 @@ import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil; import org.bukkit.util.StringUtil;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.party.PartyFeature;
import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.chat.ChatManager; import com.gmail.nossr50.chat.ChatManager;
import com.gmail.nossr50.chat.ChatManagerFactory; import com.gmail.nossr50.chat.ChatManagerFactory;
@ -111,6 +113,11 @@ public abstract class ChatCommand implements TabExecutor {
return; return;
} }
if (chatMode == ChatMode.PARTY && (mcMMOPlayer.getParty().getLevel() < Config.getInstance().getPartyFeatureUnlockLevel(PartyFeature.CHAT))) {
sender.sendMessage(LocaleLoader.getString("Party.Feature.Disabled.1"));
return;
}
mcMMOPlayer.enableChat(chatMode); mcMMOPlayer.enableChat(chatMode);
sender.sendMessage(chatMode.getEnabledMessage()); sender.sendMessage(chatMode.getEnabledMessage());
} }

View File

@ -26,7 +26,7 @@ import com.google.common.collect.ImmutableList;
public class PartyCommand implements TabExecutor { public class PartyCommand implements TabExecutor {
private static final List<String> PARTY_SUBCOMMANDS; private static final List<String> PARTY_SUBCOMMANDS;
private static final List<String> EXPSHARE_COMPLETIONS = ImmutableList.of("none", "equal"); private static final List<String> XPSHARE_COMPLETIONS = ImmutableList.of("none", "equal");
private static final List<String> ITEMSHARE_COMPLETIONS = ImmutableList.of("none", "equal", "random", "loot", "mining", "herbalism", "woodcutting", "misc"); private static final List<String> ITEMSHARE_COMPLETIONS = ImmutableList.of("none", "equal", "random", "loot", "mining", "herbalism", "woodcutting", "misc");
static { static {
@ -44,7 +44,7 @@ public class PartyCommand implements TabExecutor {
private CommandExecutor partyAcceptCommand = new PartyAcceptCommand(); private CommandExecutor partyAcceptCommand = new PartyAcceptCommand();
private CommandExecutor partyCreateCommand = new PartyCreateCommand(); private CommandExecutor partyCreateCommand = new PartyCreateCommand();
private CommandExecutor partyQuitCommand = new PartyQuitCommand(); private CommandExecutor partyQuitCommand = new PartyQuitCommand();
private CommandExecutor partyExpShareCommand = new PartyExpShareCommand(); private CommandExecutor partyXpShareCommand = new PartyXpShareCommand();
private CommandExecutor partyItemShareCommand = new PartyItemShareCommand(); private CommandExecutor partyItemShareCommand = new PartyItemShareCommand();
private CommandExecutor partyInviteCommand = new PartyInviteCommand(); private CommandExecutor partyInviteCommand = new PartyInviteCommand();
private CommandExecutor partyKickCommand = new PartyKickCommand(); private CommandExecutor partyKickCommand = new PartyKickCommand();
@ -135,8 +135,8 @@ public class PartyCommand implements TabExecutor {
} }
switch (subcommand) { switch (subcommand) {
case EXPSHARE: case XPSHARE:
return partyExpShareCommand.onCommand(sender, command, label, args); return partyXpShareCommand.onCommand(sender, command, label, args);
case ITEMSHARE: case ITEMSHARE:
return partyItemShareCommand.onCommand(sender, command, label, args); return partyItemShareCommand.onCommand(sender, command, label, args);
case KICK: case KICK:
@ -180,8 +180,8 @@ public class PartyCommand implements TabExecutor {
case OWNER: case OWNER:
Set<String> playerNames = UserManager.getPlayerNames(); Set<String> playerNames = UserManager.getPlayerNames();
return StringUtil.copyPartialMatches(args[1], playerNames, new ArrayList<String>(playerNames.size())); return StringUtil.copyPartialMatches(args[1], playerNames, new ArrayList<String>(playerNames.size()));
case EXPSHARE: case XPSHARE:
return StringUtil.copyPartialMatches(args[1], EXPSHARE_COMPLETIONS, new ArrayList<String>(EXPSHARE_COMPLETIONS.size())); return StringUtil.copyPartialMatches(args[1], XPSHARE_COMPLETIONS, new ArrayList<String>(XPSHARE_COMPLETIONS.size()));
case ITEMSHARE: case ITEMSHARE:
return StringUtil.copyPartialMatches(args[1], ITEMSHARE_COMPLETIONS, new ArrayList<String>(ITEMSHARE_COMPLETIONS.size())); return StringUtil.copyPartialMatches(args[1], ITEMSHARE_COMPLETIONS, new ArrayList<String>(ITEMSHARE_COMPLETIONS.size()));
case LOCK: case LOCK:

View File

@ -1,5 +1,8 @@
package com.gmail.nossr50.commands.party; package com.gmail.nossr50.commands.party;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
@ -9,6 +12,7 @@ import org.bukkit.entity.Player;
import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.config.Config; import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.party.Party; import com.gmail.nossr50.datatypes.party.Party;
import com.gmail.nossr50.datatypes.party.PartyFeature;
import com.gmail.nossr50.datatypes.party.ShareMode; import com.gmail.nossr50.datatypes.party.ShareMode;
import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.locale.LocaleLoader;
@ -26,7 +30,8 @@ public class PartyInfoCommand implements CommandExecutor {
Party party = mcMMOPlayer.getParty(); Party party = mcMMOPlayer.getParty();
displayPartyHeader(player, party); displayPartyHeader(player, party);
displayShareModeInfo(party, player); displayShareModeInfo(player, party);
displayPartyFeatures(player, party);
displayMemberInfo(player, mcMMOPlayer, party); displayMemberInfo(player, mcMMOPlayer, party);
return true; return true;
@ -36,31 +41,56 @@ public class PartyInfoCommand implements CommandExecutor {
} }
} }
private String createMembersList(Party party) { private void displayPartyHeader(Player player, Party party) {
StringBuilder memberList = new StringBuilder(); player.sendMessage(LocaleLoader.getString("Commands.Party.Header"));
for (String memberName : party.getMembers()) { StringBuilder status = new StringBuilder();
Player member = mcMMO.p.getServer().getPlayerExact(memberName); status.append(LocaleLoader.getString("Commands.Party.Status", party.getName(), LocaleLoader.getString("Party.Status." + (party.isLocked() ? "Locked" : "Unlocked")), party.getLevel()));
if (party.getLeader().equalsIgnoreCase(memberName)) { if (!party.hasReachedLevelCap()) {
memberList.append(ChatColor.GOLD); status.append(" (" + party.getXpToLevelPercentage() + ")");
}
else if (member != null) {
memberList.append(ChatColor.WHITE);
}
else {
memberList.append(ChatColor.GRAY);
}
memberList.append(memberName).append(" ");
} }
return memberList.toString(); player.sendMessage(status.toString());
} }
private void displayShareModeInfo(Party party, Player player) { private void displayPartyFeatures(Player player, Party party) {
boolean xpShareEnabled = Config.getInstance().getExpShareEnabled(); player.sendMessage(LocaleLoader.getString("Commands.Party.Features.Header"));
boolean itemShareEnabled = Config.getInstance().getItemShareEnabled();
List<String> unlockedPartyFeatures = new ArrayList<String>();
List<String> lockedPartyFeatures = new ArrayList<String>();
for (PartyFeature partyFeature : PartyFeature.values()) {
if (!partyFeature.hasPermission(player)) {
continue;
}
if (isUnlockedFeature(party, partyFeature)) {
unlockedPartyFeatures.add(partyFeature.getLocaleString());
}
else {
lockedPartyFeatures.add(partyFeature.getFeatureLockedLocaleString());
}
}
player.sendMessage(LocaleLoader.getString("Commands.Party.UnlockedFeatures", unlockedPartyFeatures.isEmpty() ? "None" : unlockedPartyFeatures));
for (String message : lockedPartyFeatures) {
player.sendMessage(message);
}
}
private boolean isUnlockedFeature(Party party, PartyFeature partyFeature) {
if (party.getLevel() < Config.getInstance().getPartyFeatureUnlockLevel(partyFeature)) {
return false;
}
return true;
}
private void displayShareModeInfo(Player player, Party party) {
boolean xpShareEnabled = isUnlockedFeature(party, PartyFeature.XP_SHARE);
boolean itemShareEnabled = isUnlockedFeature(party, PartyFeature.ITEM_SHARE);
boolean itemSharingActive = (party.getItemShareMode() != ShareMode.NONE); boolean itemSharingActive = (party.getItemShareMode() != ShareMode.NONE);
if (!xpShareEnabled && !itemShareEnabled) { if (!xpShareEnabled && !itemShareEnabled) {
@ -90,21 +120,38 @@ public class PartyInfoCommand implements CommandExecutor {
} }
} }
private void displayPartyHeader(Player player, Party party) {
player.sendMessage(LocaleLoader.getString("Commands.Party.Header"));
player.sendMessage(LocaleLoader.getString("Commands.Party.Status", party.getName(), LocaleLoader.getString("Party.Status." + (party.isLocked() ? "Locked" : "Unlocked"))));
if (party.getAlly() != null) {
player.sendMessage(LocaleLoader.getString("Commands.Party.Status.Alliance", party.getAlly().getName()));
}
}
private void displayMemberInfo(Player player, McMMOPlayer mcMMOPlayer, Party party) { private void displayMemberInfo(Player player, McMMOPlayer mcMMOPlayer, Party party) {
int membersNear = PartyManager.getNearMembers(mcMMOPlayer).size(); List<Player> nearMembers = PartyManager.getNearMembers(mcMMOPlayer);
int membersOnline = party.getOnlineMembers().size() - 1; int membersOnline = party.getOnlineMembers().size() - 1;
player.sendMessage(LocaleLoader.getString("Commands.Party.Members.Header")); player.sendMessage(LocaleLoader.getString("Commands.Party.Members.Header"));
player.sendMessage(LocaleLoader.getString("Commands.Party.MembersNear", membersNear, membersOnline)); player.sendMessage(LocaleLoader.getString("Commands.Party.MembersNear", nearMembers.size(), membersOnline));
player.sendMessage(createMembersList(party)); player.sendMessage(createMembersList(party, nearMembers));
}
private String createMembersList(Party party, List<Player> nearMembers) {
StringBuilder memberList = new StringBuilder();
for (String memberName : party.getMembers()) {
Player member = mcMMO.p.getServer().getPlayerExact(memberName);
if (!nearMembers.contains(member)) {
memberList.append(ChatColor.ITALIC);
}
if (party.getLeader().equalsIgnoreCase(memberName)) {
memberList.append(ChatColor.GOLD);
}
else if (member != null) {
memberList.append(ChatColor.WHITE);
}
else {
memberList.append(ChatColor.GRAY);
}
memberList.append(memberName).append(ChatColor.RESET).append(" ");
}
return memberList.toString();
} }
} }

View File

@ -8,6 +8,7 @@ import org.bukkit.entity.Player;
import com.gmail.nossr50.config.Config; import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.party.ItemShareType; import com.gmail.nossr50.datatypes.party.ItemShareType;
import com.gmail.nossr50.datatypes.party.Party; import com.gmail.nossr50.datatypes.party.Party;
import com.gmail.nossr50.datatypes.party.PartyFeature;
import com.gmail.nossr50.datatypes.party.ShareMode; import com.gmail.nossr50.datatypes.party.ShareMode;
import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.StringUtils; import com.gmail.nossr50.util.StringUtils;
@ -17,13 +18,13 @@ import com.gmail.nossr50.util.player.UserManager;
public class PartyItemShareCommand implements CommandExecutor { public class PartyItemShareCommand implements CommandExecutor {
@Override @Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!Config.getInstance().getItemShareEnabled()) { Party party = UserManager.getPlayer((Player) sender).getParty();
sender.sendMessage(LocaleLoader.getString("Party.ItemShare.Disabled"));
if (party.getLevel() < Config.getInstance().getPartyFeatureUnlockLevel(PartyFeature.ITEM_SHARE)) {
sender.sendMessage(LocaleLoader.getString("Party.Feature.Disabled.4"));
return true; return true;
} }
Party party = UserManager.getPlayer((Player) sender).getParty();
switch (args.length) { switch (args.length) {
case 2: case 2:
ShareMode mode = ShareMode.getShareMode(args[1].toUpperCase()); ShareMode mode = ShareMode.getShareMode(args[1].toUpperCase());

View File

@ -7,7 +7,7 @@ public enum PartySubcommandType {
HELP, HELP,
INFO, INFO,
QUIT, QUIT,
EXPSHARE, XPSHARE,
ITEMSHARE, ITEMSHARE,
INVITE, INVITE,
KICK, KICK,
@ -38,7 +38,7 @@ public enum PartySubcommandType {
return OWNER; return OWNER;
} }
else if (commandName.equalsIgnoreCase("xpshare") || commandName.equalsIgnoreCase("shareexp") || commandName.equalsIgnoreCase("sharexp")) { else if (commandName.equalsIgnoreCase("xpshare") || commandName.equalsIgnoreCase("shareexp") || commandName.equalsIgnoreCase("sharexp")) {
return EXPSHARE; return XPSHARE;
} }
else if (commandName.equalsIgnoreCase("shareitem") || commandName.equalsIgnoreCase("shareitems")) { else if (commandName.equalsIgnoreCase("shareitem") || commandName.equalsIgnoreCase("shareitems")) {
return ITEMSHARE; return ITEMSHARE;

View File

@ -7,24 +7,25 @@ import org.bukkit.entity.Player;
import com.gmail.nossr50.config.Config; import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.party.Party; import com.gmail.nossr50.datatypes.party.Party;
import com.gmail.nossr50.datatypes.party.PartyFeature;
import com.gmail.nossr50.datatypes.party.ShareMode; import com.gmail.nossr50.datatypes.party.ShareMode;
import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.StringUtils; import com.gmail.nossr50.util.StringUtils;
import com.gmail.nossr50.util.commands.CommandUtils; import com.gmail.nossr50.util.commands.CommandUtils;
import com.gmail.nossr50.util.player.UserManager; import com.gmail.nossr50.util.player.UserManager;
public class PartyExpShareCommand implements CommandExecutor { public class PartyXpShareCommand implements CommandExecutor {
@Override @Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!Config.getInstance().getExpShareEnabled()) { Party party = UserManager.getPlayer((Player) sender).getParty();
sender.sendMessage(LocaleLoader.getString("Party.ExpShare.Disabled"));
if (party.getLevel() < Config.getInstance().getPartyFeatureUnlockLevel(PartyFeature.XP_SHARE)) {
sender.sendMessage(LocaleLoader.getString("Party.Feature.Disabled.5"));
return true; return true;
} }
switch (args.length) { switch (args.length) {
case 2: case 2:
Party party = UserManager.getPlayer((Player) sender).getParty();
if (args[1].equalsIgnoreCase("none") || CommandUtils.shouldDisableToggle(args[1])) { if (args[1].equalsIgnoreCase("none") || CommandUtils.shouldDisableToggle(args[1])) {
handleChangingShareMode(party, ShareMode.NONE); handleChangingShareMode(party, ShareMode.NONE);
} }
@ -32,13 +33,13 @@ public class PartyExpShareCommand implements CommandExecutor {
handleChangingShareMode(party, ShareMode.EQUAL); handleChangingShareMode(party, ShareMode.EQUAL);
} }
else { else {
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "expshare", "<NONE | EQUAL>")); sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "xpshare", "<NONE | EQUAL>"));
} }
return true; return true;
default: default:
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "expshare", "<NONE | EQUAL>")); sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "xpshare", "<NONE | EQUAL>"));
return true; return true;
} }
} }
@ -46,7 +47,7 @@ public class PartyExpShareCommand implements CommandExecutor {
private void handleChangingShareMode(Party party, ShareMode mode) { private void handleChangingShareMode(Party party, ShareMode mode) {
party.setXpShareMode(mode); party.setXpShareMode(mode);
String changeModeMessage = LocaleLoader.getString("Commands.Party.SetSharing", LocaleLoader.getString("Party.ShareType.Exp"), LocaleLoader.getString("Party.ShareMode." + StringUtils.getCapitalized(mode.toString()))); String changeModeMessage = LocaleLoader.getString("Commands.Party.SetSharing", LocaleLoader.getString("Party.ShareType.Xp"), LocaleLoader.getString("Party.ShareMode." + StringUtils.getCapitalized(mode.toString())));
for (Player member : party.getOnlineMembers()) { for (Player member : party.getOnlineMembers()) {
member.sendMessage(changeModeMessage); member.sendMessage(changeModeMessage);

View File

@ -12,6 +12,8 @@ import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil; import org.bukkit.util.StringUtil;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.party.PartyFeature;
import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.config.Config; import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.party.Party; import com.gmail.nossr50.datatypes.party.Party;

View File

@ -9,7 +9,6 @@ import com.gmail.nossr50.datatypes.party.Party;
import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.party.PartyManager; import com.gmail.nossr50.party.PartyManager;
import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.commands.CommandUtils; import com.gmail.nossr50.util.commands.CommandUtils;
import com.gmail.nossr50.util.player.UserManager; import com.gmail.nossr50.util.player.UserManager;

View File

@ -11,6 +11,8 @@ import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil; import org.bukkit.util.StringUtil;
import com.gmail.nossr50.datatypes.party.Party;
import com.gmail.nossr50.datatypes.party.PartyFeature;
import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.config.Config; import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.party.PartyTeleportRecord; import com.gmail.nossr50.datatypes.party.PartyTeleportRecord;
@ -40,6 +42,15 @@ public class PtpCommand implements TabExecutor {
return true; return true;
} }
Player player = (Player) sender;
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
Party party = mcMMOPlayer.getParty();
if (party.getLevel() < Config.getInstance().getPartyFeatureUnlockLevel(PartyFeature.TELEPORT)) {
sender.sendMessage(LocaleLoader.getString("Party.Feature.Disabled.2"));
return true;
}
switch (args.length) { switch (args.length) {
case 1: case 1:
if (args[0].equalsIgnoreCase("toggle")) { if (args[0].equalsIgnoreCase("toggle")) {
@ -50,9 +61,6 @@ public class PtpCommand implements TabExecutor {
return ptpAcceptAnyCommand.onCommand(sender, command, label, args); return ptpAcceptAnyCommand.onCommand(sender, command, label, args);
} }
Player player = (Player) sender;
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
long recentlyHurt = mcMMOPlayer.getRecentlyHurt(); long recentlyHurt = mcMMOPlayer.getRecentlyHurt();
int hurtCooldown = Config.getInstance().getPTPCommandRecentlyHurtCooldown(); int hurtCooldown = Config.getInstance().getPTPCommandRecentlyHurtCooldown();

View File

@ -9,6 +9,7 @@ import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import com.gmail.nossr50.datatypes.MobHealthbarType; import com.gmail.nossr50.datatypes.MobHealthbarType;
import com.gmail.nossr50.datatypes.party.PartyFeature;
import com.gmail.nossr50.datatypes.skills.AbilityType; import com.gmail.nossr50.datatypes.skills.AbilityType;
import com.gmail.nossr50.datatypes.skills.SkillType; import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.util.StringUtils; import com.gmail.nossr50.util.StringUtils;
@ -146,6 +147,16 @@ public class Config extends AutoUpdateConfigLoader {
reason.add("Party.Sharing.Range should be greater than 0!"); reason.add("Party.Sharing.Range should be greater than 0!");
} }
if (getPartyXpCurveMultiplier() < 1) {
reason.add("Party.Leveling.Xp_Curve_Modifier should be at least 1!");
}
for (PartyFeature partyFeature : PartyFeature.values()) {
if (getPartyFeatureUnlockLevel(partyFeature) < 0) {
reason.add("Party.Leveling." + StringUtils.getPrettyPartyFeatureString(partyFeature).replace(" ", "") + "_UnlockLevel should be at least 0!");
}
}
/* Inspect command distance */ /* Inspect command distance */
if (getInspectDistance() <= 0) { if (getInspectDistance() <= 0) {
reason.add("Commands.inspect.Max_Distance should be greater than 0!"); reason.add("Commands.inspect.Max_Distance should be greater than 0!");
@ -343,13 +354,23 @@ public class Config extends AutoUpdateConfigLoader {
/* PARTY SETTINGS */ /* PARTY SETTINGS */
public int getAutoPartyKickInterval() { return config.getInt("Party.AutoKick_Interval", 12); } public int getAutoPartyKickInterval() { return config.getInt("Party.AutoKick_Interval", 12); }
public int getAutoPartyKickTime() { return config.getInt("Party.Old_Party_Member_Cutoff", 7); } public int getAutoPartyKickTime() { return config.getInt("Party.Old_Party_Member_Cutoff", 7); }
public boolean getExpShareEnabled() { return config.getBoolean("Party.Sharing.ExpShare_enabled", true); }
public double getPartyShareBonusBase() { return config.getDouble("Party.Sharing.ExpShare_bonus_base", 1.1D); } public double getPartyShareBonusBase() { return config.getDouble("Party.Sharing.ExpShare_bonus_base", 1.1D); }
public double getPartyShareBonusIncrease() { return config.getDouble("Party.Sharing.ExpShare_bonus_increase", 0.05D); } public double getPartyShareBonusIncrease() { return config.getDouble("Party.Sharing.ExpShare_bonus_increase", 0.05D); }
public double getPartyShareBonusCap() { return config.getDouble("Party.Sharing.ExpShare_bonus_cap", 1.5D); } public double getPartyShareBonusCap() { return config.getDouble("Party.Sharing.ExpShare_bonus_cap", 1.5D); }
public boolean getItemShareEnabled() { return config.getBoolean("Party.Sharing.ItemShare_enabled", true); }
public double getPartyShareRange() { return config.getDouble("Party.Sharing.Range", 75.0D); } public double getPartyShareRange() { return config.getDouble("Party.Sharing.Range", 75.0D); }
public int getPartyLevelCap() {
int cap = config.getInt("Party.Leveling.Level_Cap", 10);
return (cap <= 0) ? Integer.MAX_VALUE : cap;
}
public int getPartyXpCurveMultiplier() { return config.getInt("Party.Leveling.Xp_Curve_Modifier", 3); }
public boolean getPartyXpNearMembersNeeded() { return config.getBoolean("Party.Leveling.Near_Members_Needed", false); }
public boolean getPartyInformAllMembers() { return config.getBoolean("Party.Leveling.Inform_All_Party_Members_On_LevelUp", false); }
public int getPartyFeatureUnlockLevel(PartyFeature partyFeature) { return config.getInt("Party.Leveling." + StringUtils.getPrettyPartyFeatureString(partyFeature).replace(" ", "") + "_UnlockLevel", 0); }
/* Party Teleport Settings */ /* Party Teleport Settings */
public int getPTPCommandCooldown() { return config.getInt("Commands.ptp.Cooldown", 120); } public int getPTPCommandCooldown() { return config.getInt("Commands.ptp.Cooldown", 120); }
public int getPTPCommandWarmup() { return config.getInt("Commands.ptp.Warmup", 5); } public int getPTPCommandWarmup() { return config.getInt("Commands.ptp.Warmup", 5); }

View File

@ -1,12 +1,21 @@
package com.gmail.nossr50.datatypes.party; package com.gmail.nossr50.datatypes.party;
import java.text.DecimalFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import org.bukkit.Sound;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.config.experience.ExperienceConfig;
import com.gmail.nossr50.datatypes.experience.FormulaType;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.party.PartyManager;
import com.gmail.nossr50.util.EventUtils;
import com.gmail.nossr50.util.Misc;
public class Party { public class Party {
private final LinkedHashSet<String> members = new LinkedHashSet<String>(); private final LinkedHashSet<String> members = new LinkedHashSet<String>();
@ -16,6 +25,8 @@ public class Party {
private String password; private String password;
private boolean locked; private boolean locked;
private Party ally; private Party ally;
private int level;
private float xp;
private ShareMode xpShareMode = ShareMode.NONE; private ShareMode xpShareMode = ShareMode.NONE;
private ShareMode itemShareMode = ShareMode.NONE; private ShareMode itemShareMode = ShareMode.NONE;
@ -34,6 +45,7 @@ public class Party {
this.leader = leader; this.leader = leader;
this.name = name; this.name = name;
this.locked = true; this.locked = true;
this.level = 0;
} }
public Party(String leader, String name, String password) { public Party(String leader, String name, String password) {
@ -41,6 +53,7 @@ public class Party {
this.name = name; this.name = name;
this.password = password; this.password = password;
this.locked = true; this.locked = true;
this.level = 0;
} }
public Party(String leader, String name, String password, boolean locked) { public Party(String leader, String name, String password, boolean locked) {
@ -48,6 +61,7 @@ public class Party {
this.name = name; this.name = name;
this.password = password; this.password = password;
this.locked = locked; this.locked = locked;
this.level = 0;
} }
public LinkedHashSet<String> getMembers() { public LinkedHashSet<String> getMembers() {
@ -120,6 +134,93 @@ public class Party {
this.ally = ally; this.ally = ally;
} }
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public float getXp() {
return xp;
}
public void setXp(float xp) {
this.xp = xp;
}
public void addXp(float xp) {
setXp(getXp() + xp);
}
protected float levelUp() {
float xpRemoved = getXpToLevel();
setLevel(getLevel() + 1);
setXp(getXp() - xpRemoved);
return xpRemoved;
}
public int getXpToLevel() {
FormulaType formulaType = ExperienceConfig.getInstance().getFormulaType();
return (mcMMO.getFormulaManager().getCachedXpToLevel(level, formulaType)) * (getOnlineMembers().size() + Config.getInstance().getPartyXpCurveMultiplier());
}
public String getXpToLevelPercentage() {
DecimalFormat percent = new DecimalFormat("##0.00%");
return percent.format( this.getXp() / getXpToLevel());
}
/**
* Applies an experience gain
*
* @param xp Experience amount to add
*/
public void applyXpGain(float xp) {
if (!EventUtils.handlePartyXpGainEvent(this, xp)) {
return;
}
if (getXp() < getXpToLevel()) {
return;
}
int levelsGained = 0;
float xpRemoved = 0;
while (getXp() >= getXpToLevel()) {
if (hasReachedLevelCap()) {
setXp(0);
return;
}
xpRemoved += levelUp();
levelsGained++;
}
if (!EventUtils.handlePartyLevelChangeEvent(this, levelsGained, xpRemoved)) {
return;
}
if (!Config.getInstance().getPartyInformAllMembers()) {
Player leader = mcMMO.p.getServer().getPlayer(this.leader);
leader.sendMessage(LocaleLoader.getString("Party.LevelUp", levelsGained, getLevel()));
if (Config.getInstance().getLevelUpSoundsEnabled()) {
leader.playSound(leader.getLocation(), Sound.LEVEL_UP, Misc.LEVELUP_VOLUME, Misc.LEVELUP_PITCH);
}
return;
}
PartyManager.informPartyMembersLevelUp(this, levelsGained, getLevel());
}
public boolean hasReachedLevelCap() {
return Config.getInstance().getPartyLevelCap() < getLevel() + 1;
}
public void setXpShareMode(ShareMode xpShareMode) { public void setXpShareMode(ShareMode xpShareMode) {
this.xpShareMode = xpShareMode; this.xpShareMode = xpShareMode;
} }

View File

@ -0,0 +1,54 @@
package com.gmail.nossr50.datatypes.party;
import org.bukkit.entity.Player;
import com.gmail.nossr50.commands.party.PartySubcommandType;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.StringUtils;
public enum PartyFeature {
CHAT,
TELEPORT,
ALLIANCE,
ITEM_SHARE,
XP_SHARE;
public String getLocaleString() {
return LocaleLoader.getString("Party.Feature." + StringUtils.getPrettyPartyFeatureString(this).replace(" ", ""));
}
public String getFeatureLockedLocaleString() {
return LocaleLoader.getString("Ability.Generic.Template.Lock", LocaleLoader.getString("Party.Feature.Locked." + StringUtils.getPrettyPartyFeatureString(this).replace(" ", ""), Config.getInstance().getPartyFeatureUnlockLevel(this)));
}
public boolean hasPermission(Player player) {
PartySubcommandType partySubCommandType;
switch (this) {
case CHAT:
partySubCommandType = PartySubcommandType.CHAT;
break;
case TELEPORT:
partySubCommandType = PartySubcommandType.TELEPORT;
break;
case ALLIANCE:
partySubCommandType = PartySubcommandType.ALLIANCE;
break;
case ITEM_SHARE:
partySubCommandType = PartySubcommandType.ITEMSHARE;
break;
case XP_SHARE:
partySubCommandType = PartySubcommandType.XPSHARE;
break;
default:
return false;
}
if (Permissions.partySubcommand(player, partySubCommandType)) {
return true;
}
return false;
}
}

View File

@ -514,6 +514,14 @@ public class McMMOPlayer {
*/ */
public void beginUnsharedXpGain(SkillType skill, float xp) { public void beginUnsharedXpGain(SkillType skill, float xp) {
applyXpGain(skill, modifyXpGain(skill, xp)); applyXpGain(skill, modifyXpGain(skill, xp));
if (party == null) {
return;
}
if (!Config.getInstance().getPartyXpNearMembersNeeded() || !PartyManager.getNearMembers(this).isEmpty()) {
party.applyXpGain(modifyXpGain(skill, xp));
}
} }
/** /**

View File

@ -0,0 +1,54 @@
package com.gmail.nossr50.events.party;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import com.gmail.nossr50.datatypes.party.Party;
public class McMMOPartyLevelUpEvent extends Event implements Cancellable {
private Party party;
private int levelsChanged;
private boolean cancelled;
public McMMOPartyLevelUpEvent(Party party, int levelsChanged) {
this.party = party;
this.levelsChanged = levelsChanged;
this.cancelled = false;
}
public Party getParty() {
return party;
}
public int getLevelsChanged() {
return levelsChanged;
}
public void setLevelsChanged(int levelsChanged) {
this.levelsChanged = levelsChanged;
}
/** Following are required for Cancellable **/
@Override
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean cancelled) {
this.cancelled = cancelled;
}
/** Rest of file is required boilerplate for custom events **/
private static final HandlerList handlers = new HandlerList();
@Override
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}

View File

@ -0,0 +1,76 @@
package com.gmail.nossr50.events.party;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import com.gmail.nossr50.datatypes.party.Party;
public class McMMOPartyXpGainEvent extends Event implements Cancellable {
private Party party;
private float xpGained;
private boolean cancelled;
public McMMOPartyXpGainEvent(Party party, float xpGained) {
this.party = party;
this.xpGained = xpGained;
this.cancelled = false;
}
public Party getParty() {
return party;
}
/**
* @return The amount of experience gained in this event
*/
public float getRawXpGained() {
return xpGained;
}
/**
* @return int amount of experience gained in this event
*/
@Deprecated
public int getXpGained() {
return (int) xpGained;
}
/**
* @param xpGained set amount of experience gained in this event
*/
public void setRawXpGained(float xpGained) {
this.xpGained = xpGained;
}
/**
* @param xpGained set int amount of experience gained in this event
*/
@Deprecated
public void setXpGained(int xpGained) {
this.xpGained = xpGained;
}
/** Following are required for Cancellable **/
@Override
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean cancelled) {
this.cancelled = cancelled;
}
/** Rest of file is required boilerplate for custom events **/
private static final HandlerList handlers = new HandlerList();
@Override
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}

View File

@ -6,6 +6,7 @@ import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.Sound;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -486,6 +487,8 @@ public final class PartyManager {
party.setLeader(partiesFile.getString(partyName + ".Leader")); party.setLeader(partiesFile.getString(partyName + ".Leader"));
party.setPassword(partiesFile.getString(partyName + ".Password")); party.setPassword(partiesFile.getString(partyName + ".Password"));
party.setLocked(partiesFile.getBoolean(partyName + ".Locked")); party.setLocked(partiesFile.getBoolean(partyName + ".Locked"));
party.setLevel(partiesFile.getInt(partyName + ".Level"));
party.setXp(partiesFile.getInt(partyName + ".Xp"));
if (partiesFile.getString(partyName + ".Ally") != null) { if (partiesFile.getString(partyName + ".Ally") != null) {
hasAlly.add(party); hasAlly.add(party);
@ -529,6 +532,8 @@ public final class PartyManager {
partiesFile.set(partyName + ".Leader", party.getLeader()); partiesFile.set(partyName + ".Leader", party.getLeader());
partiesFile.set(partyName + ".Password", party.getPassword()); partiesFile.set(partyName + ".Password", party.getPassword());
partiesFile.set(partyName + ".Locked", party.isLocked()); partiesFile.set(partyName + ".Locked", party.isLocked());
partiesFile.set(partyName + ".Level", party.getLevel());
partiesFile.set(partyName + ".Xp", (int) party.getXp());
partiesFile.set(partyName + ".Ally", (party.getAlly() != null) ? party.getAlly().getName() : ""); partiesFile.set(partyName + ".Ally", (party.getAlly() != null) ? party.getAlly().getName() : "");
partiesFile.set(partyName + ".ExpShareMode", party.getXpShareMode().toString()); partiesFile.set(partyName + ".ExpShareMode", party.getXpShareMode().toString());
partiesFile.set(partyName + ".ItemShareMode", party.getItemShareMode().toString()); partiesFile.set(partyName + ".ItemShareMode", party.getItemShareMode().toString());
@ -599,6 +604,24 @@ public final class PartyManager {
mcMMOPlayer.setItemShareModifier(10); mcMMOPlayer.setItemShareModifier(10);
} }
/**
* Notify party members when the party levels up.
*
* @param party The concerned party
* @param levelsGained The amount of levels gained
* @param level The current party level
*/
public static void informPartyMembersLevelUp(Party party, int levelsGained, int level) {
boolean levelUpSoundsEnabled = Config.getInstance().getLevelUpSoundsEnabled();
for (Player member : party.getOnlineMembers()) {
member.sendMessage(LocaleLoader.getString("Party.LevelUp", levelsGained, level));
if (levelUpSoundsEnabled) {
member.playSound(member.getLocation(), Sound.LEVEL_UP, Misc.LEVELUP_VOLUME, Misc.LEVELUP_PITCH);
}
}
}
/** /**
* Notify party members when a player joins. * Notify party members when a player joins.
* *

View File

@ -11,6 +11,7 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.datatypes.party.Party;
import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.player.PlayerProfile; import com.gmail.nossr50.datatypes.player.PlayerProfile;
import com.gmail.nossr50.datatypes.skills.AbilityType; import com.gmail.nossr50.datatypes.skills.AbilityType;
@ -24,7 +25,9 @@ import com.gmail.nossr50.events.fake.FakeBlockDamageEvent;
import com.gmail.nossr50.events.fake.FakePlayerAnimationEvent; import com.gmail.nossr50.events.fake.FakePlayerAnimationEvent;
import com.gmail.nossr50.events.fake.FakePlayerFishEvent; import com.gmail.nossr50.events.fake.FakePlayerFishEvent;
import com.gmail.nossr50.events.hardcore.McMMOPlayerDeathPenaltyEvent; import com.gmail.nossr50.events.hardcore.McMMOPlayerDeathPenaltyEvent;
import com.gmail.nossr50.events.party.McMMOPartyLevelUpEvent;
import com.gmail.nossr50.events.party.McMMOPartyTeleportEvent; import com.gmail.nossr50.events.party.McMMOPartyTeleportEvent;
import com.gmail.nossr50.events.party.McMMOPartyXpGainEvent;
import com.gmail.nossr50.events.skills.abilities.McMMOPlayerAbilityActivateEvent; import com.gmail.nossr50.events.skills.abilities.McMMOPlayerAbilityActivateEvent;
import com.gmail.nossr50.events.skills.abilities.McMMOPlayerAbilityDeactivateEvent; import com.gmail.nossr50.events.skills.abilities.McMMOPlayerAbilityDeactivateEvent;
import com.gmail.nossr50.events.skills.fishing.McMMOPlayerFishingTreasureEvent; import com.gmail.nossr50.events.skills.fishing.McMMOPlayerFishingTreasureEvent;
@ -108,6 +111,34 @@ public class EventUtils {
mcMMOPlayer.getPartyTeleportRecord().actualizeLastUse(); mcMMOPlayer.getPartyTeleportRecord().actualizeLastUse();
} }
public static boolean handlePartyXpGainEvent(Party party, float xpGained) {
McMMOPartyXpGainEvent event = new McMMOPartyXpGainEvent(party, xpGained);
mcMMO.p.getServer().getPluginManager().callEvent(event);
boolean isCancelled = event.isCancelled();
if (!isCancelled) {
party.addXp(event.getRawXpGained());
}
return !isCancelled;
}
public static boolean handlePartyLevelChangeEvent(Party party, int levelsChanged, float xpRemoved) {
McMMOPartyLevelUpEvent event = new McMMOPartyLevelUpEvent(party, levelsChanged);
mcMMO.p.getServer().getPluginManager().callEvent(event);
boolean isCancelled = event.isCancelled();
if (isCancelled) {
party.setLevel(party.getLevel() + levelsChanged);
party.addXp(xpRemoved);
}
return !isCancelled;
}
public static boolean handleXpGainEvent(Player player, SkillType skill, float xpGained) { public static boolean handleXpGainEvent(Player player, SkillType skill, float xpGained) {
McMMOPlayerXpGainEvent event = new McMMOPlayerXpGainEvent(player, skill, xpGained); McMMOPlayerXpGainEvent event = new McMMOPlayerXpGainEvent(player, skill, xpGained);
mcMMO.p.getServer().getPluginManager().callEvent(event); mcMMO.p.getServer().getPluginManager().callEvent(event);

View File

@ -3,6 +3,7 @@ package com.gmail.nossr50.util;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import com.gmail.nossr50.datatypes.party.PartyFeature;
import com.gmail.nossr50.datatypes.skills.AbilityType; import com.gmail.nossr50.datatypes.skills.AbilityType;
import com.gmail.nossr50.datatypes.skills.SecondaryAbility; import com.gmail.nossr50.datatypes.skills.SecondaryAbility;
@ -30,7 +31,7 @@ public class StringUtils {
} }
public static String getPrettySecondaryAbilityString(SecondaryAbility secondaryAbility) { public static String getPrettySecondaryAbilityString(SecondaryAbility secondaryAbility) {
switch(secondaryAbility) { switch (secondaryAbility) {
case HERBALISM_DOUBLE_DROPS: case HERBALISM_DOUBLE_DROPS:
case MINING_DOUBLE_DROPS: case MINING_DOUBLE_DROPS:
case WOODCUTTING_DOUBLE_DROPS: case WOODCUTTING_DOUBLE_DROPS:
@ -46,6 +47,10 @@ public class StringUtils {
} }
} }
public static String getPrettyPartyFeatureString(PartyFeature partyFeature) {
return createPrettyEnumString(partyFeature.toString());
}
private static String createPrettyEnumString(String baseString) { private static String createPrettyEnumString(String baseString) {
String[] substrings = baseString.split("_"); String[] substrings = baseString.split("_");
String prettyString = ""; String prettyString = "";
@ -125,4 +130,5 @@ public class StringUtils {
return false; return false;
} }
} }
} }

View File

@ -330,7 +330,7 @@ public final class CommandRegistrationManager {
PluginCommand command = mcMMO.p.getCommand("party"); PluginCommand command = mcMMO.p.getCommand("party");
command.setDescription(LocaleLoader.getString("Commands.Description.party")); command.setDescription(LocaleLoader.getString("Commands.Description.party"));
command.setPermission("mcmmo.commands.party;mcmmo.commands.party.accept;mcmmo.commands.party.create;mcmmo.commands.party.disband;" + command.setPermission("mcmmo.commands.party;mcmmo.commands.party.accept;mcmmo.commands.party.create;mcmmo.commands.party.disband;" +
"mcmmo.commands.party.expshare;mcmmo.commands.party.invite;mcmmo.commands.party.itemshare;mcmmo.commands.party.join;" + "mcmmo.commands.party.xpshare;mcmmo.commands.party.invite;mcmmo.commands.party.itemshare;mcmmo.commands.party.join;" +
"mcmmo.commands.party.kick;mcmmo.commands.party.lock;mcmmo.commands.party.owner;mcmmo.commands.party.password;" + "mcmmo.commands.party.kick;mcmmo.commands.party.lock;mcmmo.commands.party.owner;mcmmo.commands.party.password;" +
"mcmmo.commands.party.quit;mcmmo.commands.party.rename;mcmmo.commands.party.unlock"); "mcmmo.commands.party.quit;mcmmo.commands.party.rename;mcmmo.commands.party.unlock");
command.setPermissionMessage(permissionsMessage); command.setPermissionMessage(permissionsMessage);

View File

@ -199,15 +199,31 @@ Party:
AutoKick_Interval: 12 AutoKick_Interval: 12
# Any user who hasn't connected in this many days will get kicked from their party # Any user who hasn't connected in this many days will get kicked from their party
Old_Party_Member_Cutoff: 7 Old_Party_Member_Cutoff: 7
# Settings for party share modes # Settings for party share modes
Sharing: Sharing:
ExpShare_enabled: true
ExpShare_bonus_base: 1.1 ExpShare_bonus_base: 1.1
ExpShare_bonus_increase: 1.05 ExpShare_bonus_increase: 1.05
ExpShare_bonus_cap: 1.5 ExpShare_bonus_cap: 1.5
ItemShare_enabled: true
Range: 75.0 Range: 75.0
# Party members level up their party by earning individual experience
# Newly created parties will not immediately have access to all the party features
# and have to level up the party a bit before they can use them.
Leveling:
Level_Cap: 10
# Uses the regular XP formula but is multiplied by <amount of party members> + <Xp_Curve_Modifier>
Xp_Curve_Modifier: 3
Near_Members_Needed: false
Inform_All_Party_Members_On_LevelUp: false
Chat_UnlockLevel: 1
Teleport_UnlockLevel: 2
Alliance_UnlockLevel: 5
ItemShare_UnlockLevel: 8
XpShare_UnlockLevel: 10
# #
# Settings for Abilities # Settings for Abilities
### ###

View File

@ -504,12 +504,12 @@ Party.Unlocked=[[GRAY]]Party je odemknuta
Party.Disband=[[GRAY]]Parta se rozpadla Party.Disband=[[GRAY]]Parta se rozpadla
Party.Status.Locked=[[DARK_RED]](POUZE POZV\u00c1NKY) Party.Status.Locked=[[DARK_RED]](POUZE POZV\u00c1NKY)
Party.Status.Unlocked=[[DARK_GREEN]](OTEV\u0158\u00cdT) Party.Status.Unlocked=[[DARK_GREEN]](OTEV\u0158\u00cdT)
Party.ShareType.Exp=EXP Party.ShareType.Xp=EXP
Party.ShareType.Item=P\u0158EDM\u011aT Party.ShareType.Item=P\u0158EDM\u011aT
Party.ShareMode.None=\u017d\u00c1DN\u00dd Party.ShareMode.None=\u017d\u00c1DN\u00dd
Party.ShareMode.Equal=STEJN\u00dd Party.ShareMode.Equal=STEJN\u00dd
Party.ShareMode.Random=N\u00c1HODN\u00dd Party.ShareMode.Random=N\u00c1HODN\u00dd
Party.ExpShare.Disabled=[[RED]]Sd\u00edlen\u00ed party zku\u0161enost\u00ed je vypnuto. Party.XpShare.Disabled=[[RED]]Sd\u00edlen\u00ed party zku\u0161enost\u00ed je vypnuto.
Party.ItemShare.Disabled=[[RED]]Sd\u00edlen\u00ed item\u016f v part\u011b je zak\u00e1zan\u00e9. Party.ItemShare.Disabled=[[RED]]Sd\u00edlen\u00ed item\u016f v part\u011b je zak\u00e1zan\u00e9.
Party.ItemShare.Category.Loot=Ko\u0159ist Party.ItemShare.Category.Loot=Ko\u0159ist
Party.ItemShare.Category.Mining=T\u011b\u017een\u00ed Party.ItemShare.Category.Mining=T\u011b\u017een\u00ed

View File

@ -415,7 +415,7 @@ Party.Teleport.Self=[[RED]]You can\'t teleport to yourself!
Party.Teleport.Target=[[GREEN]]{0} hat sich zu dir teleportiert. Party.Teleport.Target=[[GREEN]]{0} hat sich zu dir teleportiert.
Party.Unlocked=[[AQUA]]Gruppe entsperrt Party.Unlocked=[[AQUA]]Gruppe entsperrt
Party.Disband=[[GRAY]]Deine Gruppe wurde aufgel\u00f6st Party.Disband=[[GRAY]]Deine Gruppe wurde aufgel\u00f6st
Party.ShareType.Exp=Exp Party.ShareType.Xp=Exp
Party.ShareType.Item=Item Party.ShareType.Item=Item
Party.ShareMode.None=Nicht Party.ShareMode.None=Nicht
Party.ShareMode.Random=Zuf\u00e4llig Party.ShareMode.Random=Zuf\u00e4llig

View File

@ -484,8 +484,10 @@ Commands.Notifications.On=Ability notifications toggled [[GREEN]]on
Commands.Offline=[[RED]]This command does not work for offline players. Commands.Offline=[[RED]]This command does not work for offline players.
Commands.Other=[[RED]]---[][[GREEN]]OTHER COMMANDS[[RED]][]--- Commands.Other=[[RED]]---[][[GREEN]]OTHER COMMANDS[[RED]][]---
Commands.Party.Header=[[RED]]-----[][[GREEN]]PARTY[[RED]][]----- Commands.Party.Header=[[RED]]-----[][[GREEN]]PARTY[[RED]][]-----
Commands.Party.Status=[[DARK_GRAY]]NAME: [[WHITE]]{0} {1} Commands.Party.Features.Header=[[RED]]-----[][[GREEN]]FEATURES[[RED]][]-----
Commands.Party.Status=[[DARK_GRAY]]NAME: [[WHITE]]{0} {1} [[DARK_GRAY]]LEVEL: [[DARK_AQUA]]{2}
Commands.Party.Status.Alliance=[[DARK_GRAY]]ALLY: [[WHITE]]{0} Commands.Party.Status.Alliance=[[DARK_GRAY]]ALLY: [[WHITE]]{0}
Commands.Party.UnlockedFeatures=[[DARK_GRAY]]Unlocked Features: [[GRAY]][[ITALIC]]{0}
Commands.Party.ShareMode=[[DARK_GRAY]]SHARE MODE: Commands.Party.ShareMode=[[DARK_GRAY]]SHARE MODE:
Commands.Party.ItemShare=[[GRAY]]ITEM [[DARK_AQUA]]({0}) Commands.Party.ItemShare=[[GRAY]]ITEM [[DARK_AQUA]]({0})
Commands.Party.ExpShare=[[GRAY]]EXP [[DARK_AQUA]]({0}) Commands.Party.ExpShare=[[GRAY]]EXP [[DARK_AQUA]]({0})
@ -623,13 +625,27 @@ Party.Alliance.Formed=[[GRAY]]Your party is now allies with [[GREEN]]{0}
Party.Alliance.Disband=[[GRAY]]Your party is no longer allies with [[RED]]{0} Party.Alliance.Disband=[[GRAY]]Your party is no longer allies with [[RED]]{0}
Party.Status.Locked=[[DARK_RED]](INVITE-ONLY) Party.Status.Locked=[[DARK_RED]](INVITE-ONLY)
Party.Status.Unlocked=[[DARK_GREEN]](OPEN) Party.Status.Unlocked=[[DARK_GREEN]](OPEN)
Party.ShareType.Exp=EXP Party.LevelUp=[[YELLOW]]Party level increased by {0}. Total ({1})
Party.Feature.Chat=Party Chat
Party.Feature.Teleport=Party Teleport
Party.Feature.Alliance=Alliances
Party.Feature.ItemShare=Item Sharing
Party.Feature.XpShare=XP Sharing
Party.Feature.Locked.Chat=LOCKED UNTIL {0}+ (PARTY CHAT)
Party.Feature.Locked.Teleport=LOCKED UNTIL {0}+ (PARTY TELEPORT)
Party.Feature.Locked.Alliance=LOCKED UNTIL {0}+ (ALLIANCES)
Party.Feature.Locked.ItemShare=LOCKED UNTIL {0}+ (ITEM SHARING)
Party.Feature.Locked.XpShare=LOCKED UNTIL {0}+ (XP SHARING)
Party.Feature.Disabled.1=[[RED]]Party chat is not unlocked yet.
Party.Feature.Disabled.2=[[RED]]Party teleport is not unlocked yet.
Party.Feature.Disabled.3=[[RED]]Party alliances are not unlocked yet.
Party.Feature.Disabled.4=[[RED]]Party item sharing is not unlocked yet.
Party.Feature.Disabled.5=[[RED]]Party XP sharing is not unlocked yet.
Party.ShareType.Xp=XP
Party.ShareType.Item=ITEM Party.ShareType.Item=ITEM
Party.ShareMode.None=NONE Party.ShareMode.None=NONE
Party.ShareMode.Equal=EQUAL Party.ShareMode.Equal=EQUAL
Party.ShareMode.Random=RANDOM Party.ShareMode.Random=RANDOM
Party.ExpShare.Disabled=[[RED]]Party experience sharing is disabled.
Party.ItemShare.Disabled=[[RED]]Party item sharing is disabled.
Party.ItemShare.Category.Loot=Loot Party.ItemShare.Category.Loot=Loot
Party.ItemShare.Category.Mining=Mining Party.ItemShare.Category.Mining=Mining
Party.ItemShare.Category.Herbalism=Herbalism Party.ItemShare.Category.Herbalism=Herbalism

View File

@ -517,12 +517,12 @@ Party.Unlocked=[[GRAY]]El grupo est\u00e1 desbloqueado
Party.Disband=[[GRAY]]El grupo ha sido eliminado Party.Disband=[[GRAY]]El grupo ha sido eliminado
Party.Status.Locked=[[DARK_RED]](Solo para invitados) Party.Status.Locked=[[DARK_RED]](Solo para invitados)
Party.Status.Unlocked=[[DARK_GREEN]](Abierto) Party.Status.Unlocked=[[DARK_GREEN]](Abierto)
Party.ShareType.Exp=EXP Party.ShareType.Xp=EXP
Party.ShareType.Item=OBJETO Party.ShareType.Item=OBJETO
Party.ShareMode.None=NINGUNO Party.ShareMode.None=NINGUNO
Party.ShareMode.Equal=IGUAL Party.ShareMode.Equal=IGUAL
Party.ShareMode.Random=ALEATORIO Party.ShareMode.Random=ALEATORIO
Party.ExpShare.Disabled=[[RED]]El grupo no comparte la experiencia. Party.XpShare.Disabled=[[RED]]El grupo no comparte la experiencia.
Party.ItemShare.Disabled=[[RED]]El grupo no comparte los objetos. Party.ItemShare.Disabled=[[RED]]El grupo no comparte los objetos.
Party.ItemShare.Category.Loot=Saquear Party.ItemShare.Category.Loot=Saquear
Party.ItemShare.Category.Mining=Mineria Party.ItemShare.Category.Mining=Mineria

View File

@ -504,12 +504,12 @@ Party.Unlocked=[[GRAY]]Party sbloccato.
Party.Disband=[[GRAY]]La compagnia \u00e8 stata sciolta Party.Disband=[[GRAY]]La compagnia \u00e8 stata sciolta
Party.Status.Locked=[[DARK_RED]](SOLO SU INVITO) Party.Status.Locked=[[DARK_RED]](SOLO SU INVITO)
Party.Status.Unlocked=[[DARK_GREEN]](APERTA) Party.Status.Unlocked=[[DARK_GREEN]](APERTA)
Party.ShareType.Exp=ESPERIENZA Party.ShareType.Xp=ESPERIENZA
Party.ShareType.Item=OGGETTI Party.ShareType.Item=OGGETTI
Party.ShareMode.None=NESSUNA Party.ShareMode.None=NESSUNA
Party.ShareMode.Equal=EQUA Party.ShareMode.Equal=EQUA
Party.ShareMode.Random=CASUALE Party.ShareMode.Random=CASUALE
Party.ExpShare.Disabled=[[RED]]La condivisione di esperienza di compagnia \u00e8 disabilitata. Party.XpShare.Disabled=[[RED]]La condivisione di esperienza di compagnia \u00e8 disabilitata.
Party.ItemShare.Disabled=[[RED]]La condivisione di oggetti di compagnia \u00e8 disabilitata. Party.ItemShare.Disabled=[[RED]]La condivisione di oggetti di compagnia \u00e8 disabilitata.
Party.ItemShare.Category.Loot=Bottino Party.ItemShare.Category.Loot=Bottino
Party.ItemShare.Category.Mining=Estrazione Party.ItemShare.Category.Mining=Estrazione

View File

@ -540,12 +540,12 @@ Party.Unlocked=[[GRAY]]\ud30c\ud2f0\uac00 \uc7a0\uae08\ud574\uc81c \ub418\uc5c8\
Party.Disband=[[GRAY]]\uadf8 \ud30c\ud2f0\uac00 \ud574\uccb4\ub418\uc5c8\uc2b5\ub2c8\ub2e4 Party.Disband=[[GRAY]]\uadf8 \ud30c\ud2f0\uac00 \ud574\uccb4\ub418\uc5c8\uc2b5\ub2c8\ub2e4
Party.Status.Locked=[[DARK_RED]](\uc624\uc9c1-\ucd08\ub300\ub9cc) Party.Status.Locked=[[DARK_RED]](\uc624\uc9c1-\ucd08\ub300\ub9cc)
Party.Status.Unlocked=[[DARK_GREEN]](\uc5f4\ub9bc) Party.Status.Unlocked=[[DARK_GREEN]](\uc5f4\ub9bc)
Party.ShareType.Exp=EXP Party.ShareType.Xp=EXP
Party.ShareType.Item=\uc544\uc774\ud15c Party.ShareType.Item=\uc544\uc774\ud15c
Party.ShareMode.None=\uc5c6\uc74c Party.ShareMode.None=\uc5c6\uc74c
Party.ShareMode.Equal=\uade0\ub4f1 Party.ShareMode.Equal=\uade0\ub4f1
Party.ShareMode.Random=\ubb34\uc791\uc704 Party.ShareMode.Random=\ubb34\uc791\uc704
Party.ExpShare.Disabled=[[RED]]\ud30c\ud2f0 \uacbd\ud5d8\uce58 \uacf5\uc720\uac00 \ube44\ud65c\uc131\ud654 \ub418\uc5c8\uc2b5\ub2c8\ub2e4. Party.XpShare.Disabled=[[RED]]\ud30c\ud2f0 \uacbd\ud5d8\uce58 \uacf5\uc720\uac00 \ube44\ud65c\uc131\ud654 \ub418\uc5c8\uc2b5\ub2c8\ub2e4.
Party.ItemShare.Disabled=[[RED]]\ud30c\ud2f0 \uc544\uc774\ud15c \uacf5\uc720\uac00 \ube44\ud65c\uc131\ud654 \ub418\uc5c8\uc2b5\ub2c8\ub2e4. Party.ItemShare.Disabled=[[RED]]\ud30c\ud2f0 \uc544\uc774\ud15c \uacf5\uc720\uac00 \ube44\ud65c\uc131\ud654 \ub418\uc5c8\uc2b5\ub2c8\ub2e4.
Party.ItemShare.Category.Loot=\uac15\ud0c8 Party.ItemShare.Category.Loot=\uac15\ud0c8
Party.ItemShare.Category.Mining=\ucc44\uad11 Party.ItemShare.Category.Mining=\ucc44\uad11

View File

@ -348,12 +348,12 @@ Party.Unlocked=[[GRAY]]Groep is ontgrendeld
Party.Disband=[[GRAY]] De partij werd ontbonden Party.Disband=[[GRAY]] De partij werd ontbonden
Party.Status.Locked=[[DARK_RED]](ALLEEN-UITNODIGING) Party.Status.Locked=[[DARK_RED]](ALLEEN-UITNODIGING)
Party.Status.Unlocked=[[DARK_GREEN]](OPEN) Party.Status.Unlocked=[[DARK_GREEN]](OPEN)
Party.ShareType.Exp=EXP Party.ShareType.Xp=EXP
Party.ShareType.Item=ITEM Party.ShareType.Item=ITEM
Party.ShareMode.None=NIKS Party.ShareMode.None=NIKS
Party.ShareMode.Equal=GELIJK Party.ShareMode.Equal=GELIJK
Party.ShareMode.Random=WILLEKEURIG Party.ShareMode.Random=WILLEKEURIG
Party.ExpShare.Disabled=[[RED]]Groep experience delen in uitgeschakeld. Party.XpShare.Disabled=[[RED]]Groep experience delen in uitgeschakeld.
Party.ItemShare.Disabled=[[RED]]Groeps item delen is uitgezet. Party.ItemShare.Disabled=[[RED]]Groeps item delen is uitgezet.
Party.ItemShare.Category.Loot=Buit Party.ItemShare.Category.Loot=Buit
Party.ItemShare.Category.Mining=Mijnbouw Party.ItemShare.Category.Mining=Mijnbouw

View File

@ -470,7 +470,7 @@ Party.Join.Self=[[RED]]Nie mozesz dolaczyc do samego siebie!
Party.Unlocked=[[GRAY]]Grupa jest otwarta dla wszystkich. Party.Unlocked=[[GRAY]]Grupa jest otwarta dla wszystkich.
Party.Disband=[[GRAY]]Druzyna zostala rozwiazana Party.Disband=[[GRAY]]Druzyna zostala rozwiazana
Party.Status.Locked=[[DARK_RED]](TYLKO NA ZAPROSZENIE) Party.Status.Locked=[[DARK_RED]](TYLKO NA ZAPROSZENIE)
Party.ShareType.Exp=EXP Party.ShareType.Xp=EXP
Party.ShareType.Item=PRZEDMIOTOWY Party.ShareType.Item=PRZEDMIOTOWY
Party.ShareMode.Equal=R\u00d3WNY Party.ShareMode.Equal=R\u00d3WNY
Party.ShareMode.Random=LOSOWY Party.ShareMode.Random=LOSOWY

View File

@ -541,12 +541,12 @@ Party.Unlocked=[[GRAY]]\u0413\u0440\u0443\u043f\u043f\u0430 \u0440\u0430\u0437\u
Party.Disband=[[GRAY]\u0413\u0440\u0443\u043f\u043f\u0430 \u0431\u044b\u043b\u0430 \u0440\u0430\u0441\u043f\u0443\u0449\u0435\u043d\u0430 Party.Disband=[[GRAY]\u0413\u0440\u0443\u043f\u043f\u0430 \u0431\u044b\u043b\u0430 \u0440\u0430\u0441\u043f\u0443\u0449\u0435\u043d\u0430
Party.Status.Locked=[[DARK_RED]](\u0422\u041e\u041b\u042c\u041a\u041e \u041f\u041e \u041f\u0420\u0418\u0413\u041b\u0410\u0428\u0415\u041d\u0418\u042e) Party.Status.Locked=[[DARK_RED]](\u0422\u041e\u041b\u042c\u041a\u041e \u041f\u041e \u041f\u0420\u0418\u0413\u041b\u0410\u0428\u0415\u041d\u0418\u042e)
Party.Status.Unlocked=[[DARK_GREEN]](\u041e\u0422\u041a\u0420\u042b\u0422\u041e) Party.Status.Unlocked=[[DARK_GREEN]](\u041e\u0422\u041a\u0420\u042b\u0422\u041e)
Party.ShareType.Exp=\u041e\u041f\u042b\u0422 Party.ShareType.Xp=\u041e\u041f\u042b\u0422
Party.ShareType.Item=\u041f\u0420\u0415\u0414\u041c\u0415\u0422 Party.ShareType.Item=\u041f\u0420\u0415\u0414\u041c\u0415\u0422
Party.ShareMode.None=\u041d\u0418\u0427\u0415\u0413\u041e Party.ShareMode.None=\u041d\u0418\u0427\u0415\u0413\u041e
Party.ShareMode.Equal=\u0420\u0410\u0412\u041d\u042b\u0419 Party.ShareMode.Equal=\u0420\u0410\u0412\u041d\u042b\u0419
Party.ShareMode.Random=\u0421\u041b\u0423\u0427\u0410\u0419\u041d\u041e Party.ShareMode.Random=\u0421\u041b\u0423\u0427\u0410\u0419\u041d\u041e
Party.ExpShare.Disabled=[[RED]]\u0414\u0435\u043b\u0435\u0436 \u043e\u043f\u044b\u0442\u0430 \u0432 \u0433\u0440\u0443\u043f\u043f\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d. Party.XpShare.Disabled=[[RED]]\u0414\u0435\u043b\u0435\u0436 \u043e\u043f\u044b\u0442\u0430 \u0432 \u0433\u0440\u0443\u043f\u043f\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d.
Party.ItemShare.Disabled=[[RED]]\u0414\u0435\u043b\u0435\u0436 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432 \u0432 \u0433\u0440\u0443\u043f\u043f\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d. Party.ItemShare.Disabled=[[RED]]\u0414\u0435\u043b\u0435\u0436 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432 \u0432 \u0433\u0440\u0443\u043f\u043f\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d.
Party.ItemShare.Category.Loot=\u0414\u043e\u0431\u044b\u0447\u0430 Party.ItemShare.Category.Loot=\u0414\u043e\u0431\u044b\u0447\u0430
Party.ItemShare.Category.Mining=\u0428\u0430\u0445\u0442\u0451\u0440\u0441\u0442\u0432\u043e Party.ItemShare.Category.Mining=\u0428\u0430\u0445\u0442\u0451\u0440\u0441\u0442\u0432\u043e

View File

@ -501,12 +501,12 @@ Party.Unlocked=[[GRAY]]Party \u0e16\u0e39\u0e01\u0e1b\u0e25\u0e14\u0e25\u0e47\u0
Party.Disband=[[GRAY]]Party \u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14\u0e44\u0e27\u0e49 Party.Disband=[[GRAY]]Party \u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14\u0e44\u0e27\u0e49
Party.Status.Locked=[[DARK_RED]](\u0e40\u0e0a\u0e34\u0e0d\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e40\u0e14\u0e35\u0e22\u0e27) Party.Status.Locked=[[DARK_RED]](\u0e40\u0e0a\u0e34\u0e0d\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e40\u0e14\u0e35\u0e22\u0e27)
Party.Status.Unlocked=[[DARK_GREEN]](\u0e40\u0e1b\u0e34\u0e14) Party.Status.Unlocked=[[DARK_GREEN]](\u0e40\u0e1b\u0e34\u0e14)
Party.ShareType.Exp=EXP Party.ShareType.Xp=EXP
Party.ShareType.Item=\u0e2a\u0e34\u0e48\u0e07\u0e02\u0e2d\u0e07 Party.ShareType.Item=\u0e2a\u0e34\u0e48\u0e07\u0e02\u0e2d\u0e07
Party.ShareMode.None=NONE Party.ShareMode.None=NONE
Party.ShareMode.Equal=\u0e40\u0e17\u0e48\u0e32\u0e01\u0e31\u0e19 Party.ShareMode.Equal=\u0e40\u0e17\u0e48\u0e32\u0e01\u0e31\u0e19
Party.ShareMode.Random=\u0e2a\u0e38\u0e48\u0e21 Party.ShareMode.Random=\u0e2a\u0e38\u0e48\u0e21
Party.ExpShare.Disabled=[[RED]]Party \u0e41\u0e1a\u0e48\u0e07\u0e1b\u0e31\u0e19\u0e1b\u0e23\u0e30\u0e2a\u0e1a\u0e01\u0e32\u0e23\u0e13\u0e4c\u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14. Party.XpShare.Disabled=[[RED]]Party \u0e41\u0e1a\u0e48\u0e07\u0e1b\u0e31\u0e19\u0e1b\u0e23\u0e30\u0e2a\u0e1a\u0e01\u0e32\u0e23\u0e13\u0e4c\u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14.
Party.ItemShare.Disabled=[[RED]]Party \u0e41\u0e1a\u0e48\u0e07\u0e1b\u0e31\u0e19\u0e2a\u0e34\u0e48\u0e07\u0e02\u0e2d\u0e07\u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14. Party.ItemShare.Disabled=[[RED]]Party \u0e41\u0e1a\u0e48\u0e07\u0e1b\u0e31\u0e19\u0e2a\u0e34\u0e48\u0e07\u0e02\u0e2d\u0e07\u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14.
Party.ItemShare.Category.Loot=Loot Party.ItemShare.Category.Loot=Loot
Party.ItemShare.Category.Mining=Mining Party.ItemShare.Category.Mining=Mining

View File

@ -528,12 +528,12 @@ Party.Unlocked=[[GRAY]]\u961f\u4f0d\u5df2\u89e3\u9501
Party.Disband=[[GRAY]]\u961f\u4f0d\u5df2\u89e3\u6563 Party.Disband=[[GRAY]]\u961f\u4f0d\u5df2\u89e3\u6563
Party.Status.Locked=[[DARK_RED]](\u4ec5\u9080\u8bf7) Party.Status.Locked=[[DARK_RED]](\u4ec5\u9080\u8bf7)
Party.Status.Unlocked=[[DARK_GREEN]](\u5f00\u542f) Party.Status.Unlocked=[[DARK_GREEN]](\u5f00\u542f)
Party.ShareType.Exp=\u7ecf\u9a8c Party.ShareType.Xp=\u7ecf\u9a8c
Party.ShareType.Item=\u7269\u54c1 Party.ShareType.Item=\u7269\u54c1
Party.ShareMode.None=\u65e0 Party.ShareMode.None=\u65e0
Party.ShareMode.Equal=\u5747\u5206 Party.ShareMode.Equal=\u5747\u5206
Party.ShareMode.Random=\u968f\u673a Party.ShareMode.Random=\u968f\u673a
Party.ExpShare.Disabled=[[RED]]\u961f\u4f0d\u7ecf\u9a8c\u5171\u4eab\u5df2\u7981\u7528 Party.XpShare.Disabled=[[RED]]\u961f\u4f0d\u7ecf\u9a8c\u5171\u4eab\u5df2\u7981\u7528
Party.ItemShare.Disabled=[[RED]]\u961f\u4f0d\u7269\u54c1\u5206\u914d\u5df2\u5173\u95ed Party.ItemShare.Disabled=[[RED]]\u961f\u4f0d\u7269\u54c1\u5206\u914d\u5df2\u5173\u95ed
Party.ItemShare.Category.Loot=\u63a0\u593a Party.ItemShare.Category.Loot=\u63a0\u593a
Party.ItemShare.Category.Mining=\u6316\u77ff Party.ItemShare.Category.Mining=\u6316\u77ff

View File

@ -541,12 +541,12 @@ Party.Unlocked=[[GRAY]]\u968a\u4f0d\u5df2\u89e3\u9396!
Party.Disband=[[GRAY]]\u968a\u4f0d\u5df2\u89e3\u6563 Party.Disband=[[GRAY]]\u968a\u4f0d\u5df2\u89e3\u6563
Party.Status.Locked=[[DARK_RED]](\u53ea\u53ef\u9080\u8acb) Party.Status.Locked=[[DARK_RED]](\u53ea\u53ef\u9080\u8acb)
Party.Status.Unlocked=[[DARK_GREEN]](\u958b\u555f) Party.Status.Unlocked=[[DARK_GREEN]](\u958b\u555f)
Party.ShareType.Exp=\u7d93\u9a57\u503c Party.ShareType.Xp=\u7d93\u9a57\u503c
Party.ShareType.Item=\u7269\u54c1 Party.ShareType.Item=\u7269\u54c1
Party.ShareMode.None=\u7121 Party.ShareMode.None=\u7121
Party.ShareMode.Equal=\u5e73\u5206 Party.ShareMode.Equal=\u5e73\u5206
Party.ShareMode.Random=\u96a8\u6a5f Party.ShareMode.Random=\u96a8\u6a5f
Party.ExpShare.Disabled=[[RED]]\u968a\u4f0d\u7d93\u9a57\u5171\u4eab\u5df2\u505c\u7528. Party.XpShare.Disabled=[[RED]]\u968a\u4f0d\u7d93\u9a57\u5171\u4eab\u5df2\u505c\u7528.
Party.ItemShare.Disabled=[[RED]]\u968a\u4f0d\u7684\u7269\u54c1\u5206\u4eab\u95dc\u9589. Party.ItemShare.Disabled=[[RED]]\u968a\u4f0d\u7684\u7269\u54c1\u5206\u4eab\u95dc\u9589.
Party.ItemShare.Category.Loot=\u62fe\u53d6 Party.ItemShare.Category.Loot=\u62fe\u53d6
Party.ItemShare.Category.Mining=\u6316\u7926 Party.ItemShare.Category.Mining=\u6316\u7926

View File

@ -924,7 +924,7 @@ permissions:
mcmmo.commands.party.chat: true mcmmo.commands.party.chat: true
mcmmo.commands.party.create: true mcmmo.commands.party.create: true
mcmmo.commands.party.disband: true mcmmo.commands.party.disband: true
mcmmo.commands.party.expshare: true mcmmo.commands.party.xpshare: true
mcmmo.commands.party.help: true mcmmo.commands.party.help: true
mcmmo.commands.party.info: true mcmmo.commands.party.info: true
mcmmo.commands.party.invite: true mcmmo.commands.party.invite: true
@ -951,8 +951,8 @@ permissions:
description: Allows access to the party create command description: Allows access to the party create command
mcmmo.commands.party.disband: mcmmo.commands.party.disband:
description: Allows access to the party disband command description: Allows access to the party disband command
mcmmo.commands.party.expshare: mcmmo.commands.party.xpshare:
description: Allows access to the party expshare command description: Allows access to the party xpshare command
mcmmo.commands.party.help: mcmmo.commands.party.help:
description: Allows access to the party help command description: Allows access to the party help command
mcmmo.commands.party.info: mcmmo.commands.party.info: