v0.94.4.74 - more ClassLimitManager stuff, needs more work

This commit is contained in:
Brian 2012-06-29 21:36:41 -04:00
parent dd2ec4c157
commit 33199aa05e
4 changed files with 33 additions and 4 deletions

View File

@ -1,7 +1,7 @@
name: MobArena name: MobArena
author: garbagemule author: garbagemule
main: com.garbagemule.MobArena.MobArena main: com.garbagemule.MobArena.MobArena
version: 0.94.4.73 version: 0.94.4.74
softdepend: [Spout,MultiVerse,XcraftGate,Towny,Heroes,MagicSpells,Vault] softdepend: [Spout,MultiVerse,XcraftGate,Towny,Heroes,MagicSpells,Vault]
commands: commands:
ma: ma:

View File

@ -623,6 +623,12 @@ public class ArenaImpl implements Arena
refund(p); refund(p);
} }
if (inLobby(p)) {
if (ap.getArenaClass() != null) {
limitManager.playerLeftClass(ap.getArenaClass());
}
}
movePlayerToEntry(p); movePlayerToEntry(p);
discardPlayer(p); discardPlayer(p);

View File

@ -794,11 +794,14 @@ public class ArenaListener
// If they already had a class, make sure to change the "in use" in the Class Limit Manager // If they already had a class, make sure to change the "in use" in the Class Limit Manager
if (oldAC != null) { if (oldAC != null) {
p.sendMessage("already had a class");
// If they picked the same sign, don't do anything // If they picked the same sign, don't do anything
if (oldAC.equals(newAC)) { if (oldAC.equals(newAC)) {
p.sendMessage("picked the same class");
return; return;
} }
classLimits.playerChangedClass(oldAC); System.out.println("decrementing the classesInUse of " + oldAC.getName());
classLimits.playerLeftClass(oldAC);
} }
// If they can not join the class, deny them // If they can not join the class, deny them
@ -808,6 +811,7 @@ public class ArenaListener
} }
// Increment the "in use" in the Class Limit Manager // Increment the "in use" in the Class Limit Manager
System.out.println("incrementing the classesInUse of " + newAC.getName());
classLimits.playerPickedClass(newAC); classLimits.playerPickedClass(newAC);
// Delay the inventory stuff to ensure that right-clicking works. // Delay the inventory stuff to ensure that right-clicking works.

View File

@ -5,6 +5,7 @@ import java.util.Map;
import com.garbagemule.MobArena.framework.Arena; import com.garbagemule.MobArena.framework.Arena;
import com.garbagemule.MobArena.util.config.ConfigSection; import com.garbagemule.MobArena.util.config.ConfigSection;
import com.garbagemule.MobArena.util.config.ConfigUtils;
public class ClassLimitManager public class ClassLimitManager
{ {
@ -15,7 +16,11 @@ public class ClassLimitManager
public ClassLimitManager(Arena arena, Map<String, ArenaClass> classes) { public ClassLimitManager(Arena arena, Map<String, ArenaClass> classes) {
this.plugin = arena.getPlugin(); this.plugin = arena.getPlugin();
ConfigUtils.addMissingNodes(plugin, plugin.getMAConfig(), "arenas." + arena.configName() + ".class-limits", "class-limits.yml");
this.limits = new ConfigSection(plugin.getMAConfig(), "arenas." + arena.configName() + ".class-limits"); this.limits = new ConfigSection(plugin.getMAConfig(), "arenas." + arena.configName() + ".class-limits");
//TODO figure out why limits is not loading the proper values from the config
//TODO perhaps send along the limits config section from the ArenaImpl class?
//TODO try to use ArenaRegion's config stuff to set up CLM properly
this.classes = classes; this.classes = classes;
this.classLimits = new HashMap<ArenaClass, Integer>(); this.classLimits = new HashMap<ArenaClass, Integer>();
@ -43,14 +48,16 @@ public class ClassLimitManager
*/ */
public void playerPickedClass(ArenaClass ac) { public void playerPickedClass(ArenaClass ac) {
classesInUse.put(ac, classesInUse.get(ac) + 1); classesInUse.put(ac, classesInUse.get(ac) + 1);
debug();
} }
/** /**
* This is the class a player changed from * This is the class a player left
* @param ac the current/old ArenaClass * @param ac the current/old ArenaClass
*/ */
public void playerChangedClass(ArenaClass ac) { public void playerLeftClass(ArenaClass ac) {
classesInUse.put(ac, classesInUse.get(ac) - 1); classesInUse.put(ac, classesInUse.get(ac) - 1);
debug();
} }
/** /**
@ -59,6 +66,7 @@ public class ClassLimitManager
* @return true/false * @return true/false
*/ */
public boolean canPlayerJoinClass(ArenaClass ac) { public boolean canPlayerJoinClass(ArenaClass ac) {
debug();
if (classLimits.get(ac) <= -1) if (classLimits.get(ac) <= -1)
return true; return true;
else if (classesInUse.get(ac) >= classLimits.get(ac)) else if (classesInUse.get(ac) >= classLimits.get(ac))
@ -70,5 +78,16 @@ public class ClassLimitManager
public void clearClassesInUse() { public void clearClassesInUse() {
classesInUse.clear(); classesInUse.clear();
initInUseMap(); initInUseMap();
debug();
}
private void debug() {
System.out.println("classesInUse:");
for (ArenaClass ac : classesInUse.keySet())
System.out.println(ac.getName() + " has " + classesInUse.get(ac).intValue() + " players using it.");
System.out.println();
System.out.println("classLimits:");
for (ArenaClass ac : classLimits.keySet())
System.out.println(ac.getName() + " has a limit of " + classLimits.get(ac).intValue() + " players.");
} }
} }