Merge branch 'refs/heads/master' into release

This commit is contained in:
snowleo 2011-12-14 11:56:09 +01:00
commit 867e66e774
4 changed files with 70 additions and 48 deletions

View file

@ -81,7 +81,7 @@ public class Trade
} }
if (exp != null && exp > 0 if (exp != null && exp > 0
&& user.getTotalExperience() < exp) { && SetExpFix.getTotalExperience(user) < exp) {
throw new ChargeException(_("notEnoughExperience")); throw new ChargeException(_("notEnoughExperience"));
} }
} }
@ -116,7 +116,7 @@ public class Trade
} }
if (getExperience() != null) if (getExperience() != null)
{ {
SetExpFix.setTotalExperience(user, user.getTotalExperience() + getExperience()); SetExpFix.setTotalExperience(user, SetExpFix.getTotalExperience(user) + getExperience());
} }
return success; return success;
} }
@ -155,7 +155,7 @@ public class Trade
} }
if (getExperience() != null) if (getExperience() != null)
{ {
final int experience = user.getTotalExperience(); final int experience = SetExpFix.getTotalExperience(user);
if (experience < getExperience() && getExperience() > 0) if (experience < getExperience() && getExperience() > 0)
{ {
throw new ChargeException(_("notEnoughExperience")); throw new ChargeException(_("notEnoughExperience"));

View file

@ -17,7 +17,7 @@ public class SetExpFix
int amount = exp; int amount = exp;
while (amount > 0) while (amount > 0)
{ {
final int expToLevel = getExpTolevel(player); final int expToLevel = getExpToLevel(player);
amount -= expToLevel; amount -= expToLevel;
if (amount >= 0) if (amount >= 0)
{ {
@ -34,8 +34,25 @@ public class SetExpFix
} }
} }
private static int getExpTolevel(final Player player) private static int getExpToLevel(final Player player)
{
return getExpToLevel(player.getLevel());
}
private static int getExpToLevel(final int level)
{
return 7 + (level * 7 >> 1);
}
public static int getTotalExperience(final Player player)
{ {
return 7 + (player.getLevel() * 7 >> 1); int exp = (int) (getExpToLevel(player) * player.getExp());
int currentLevel = player.getLevel();
while (currentLevel > 0) {
currentLevel--;
exp += getExpToLevel(currentLevel);
}
return exp;
} }
} }

View file

@ -84,4 +84,5 @@ v 1.7:
- GM now supports offline players without having to mantogglevalidate - GM now supports offline players without having to mantogglevalidate
- Offline player checks now support partial name matches. - Offline player checks now support partial name matches.
- Added custom events so plugins can now be notified of changes within GroupManager. - Added custom events so plugins can now be notified of changes within GroupManager.
- GM now registers with Bukkits ServicesManager. - GM now registers with Bukkits ServicesManager.
- deleting the contents of GlobalGroups.yml will no longer thrown a NullPointerException.

View file

@ -107,49 +107,53 @@ public class GlobalGroups {
throw new IllegalArgumentException("The following file couldn't pass on Parser.\n" + GlobalGroupsFile.getPath(), ex); throw new IllegalArgumentException("The following file couldn't pass on Parser.\n" + GlobalGroupsFile.getPath(), ex);
} }
// Read all global groups // Clear out old groups
Map<String, Object> allGroups = (Map<String, Object>) GGroups.getConfigurationSection("groups").getValues(false); resetGlobalGroups();
// Load each groups permissions list. if (!GGroups.getKeys(false).isEmpty()) {
if (allGroups != null) { // Read all global groups
// Clear out old groups Map<String, Object> allGroups = (Map<String, Object>) GGroups.getConfigurationSection("groups").getValues(false);
resetGlobalGroups();
for (String groupName : allGroups.keySet()) { // Load each groups permissions list.
Group newGroup = new Group(groupName.toLowerCase()); if (allGroups != null) {
Object element; for (String groupName : allGroups.keySet()) {
Group newGroup = new Group(groupName.toLowerCase());
// Permission nodes Object element;
element = GGroups.get("groups." + groupName + ".permissions");
// Permission nodes
if (element != null) element = GGroups.get("groups." + groupName + ".permissions");
if (element instanceof List) {
for (String node : (List<String>) element) { if (element != null)
newGroup.addPermission(node); if (element instanceof List) {
} for (String node : (List<String>) element) {
} else if (element instanceof String) { newGroup.addPermission(node);
newGroup.addPermission((String) element); }
} else } else if (element instanceof String) {
throw new IllegalArgumentException("Unknown type of permission node for global group: " + groupName); newGroup.addPermission((String) element);
} else
// Info nodes throw new IllegalArgumentException("Unknown type of permission node for global group: " + groupName);
element = GGroups.get("groups." + groupName + ".info");
// Info nodes
if (element != null) element = GGroups.get("groups." + groupName + ".info");
if (element instanceof MemorySection) {
Map<String, Object> vars = new HashMap<String, Object>(); if (element != null)
for (String key : ((MemorySection) element).getKeys(false)) { if (element instanceof MemorySection) {
vars.put(key, ((MemorySection) element).get(key)); Map<String, Object> vars = new HashMap<String, Object>();
} for (String key : ((MemorySection) element).getKeys(false)) {
newGroup.setVariables(vars); vars.put(key, ((MemorySection) element).get(key));
} else }
throw new IllegalArgumentException("Unknown type of info node for global group: " + groupName); newGroup.setVariables(vars);
} else
// Push a new group throw new IllegalArgumentException("Unknown type of info node for global group: " + groupName);
addGroup(newGroup);
// Push a new group
addGroup(newGroup);
}
} }
removeGroupsChangedFlag();
} }
removeGroupsChangedFlag();
setTimeStampGroups(GlobalGroupsFile.lastModified()); setTimeStampGroups(GlobalGroupsFile.lastModified());
GroupManager.setLoaded(true); GroupManager.setLoaded(true);
//GlobalGroupsFile = null; //GlobalGroupsFile = null;