Browse Source

Merge pull request #215 from btarb24/master

Player command to reset a skill level (for when cap is enabled)
nossr50 13 years ago
parent
commit
ed6f48b5fe

+ 8 - 2
src/main/java/com/gmail/nossr50/commands/general/McstatsCommand.java

@@ -6,6 +6,7 @@ import org.bukkit.command.CommandSender;
 import org.bukkit.entity.Player;
 
 import com.gmail.nossr50.commands.CommandHelper;
+import com.gmail.nossr50.config.Config;
 import com.gmail.nossr50.locale.LocaleLoader;
 import com.gmail.nossr50.util.Users;
 
@@ -25,8 +26,13 @@ public class McstatsCommand implements CommandExecutor {
         CommandHelper.printGatheringSkills(player);
         CommandHelper.printCombatSkills(player);
         CommandHelper.printMiscSkills(player);
-
-        player.sendMessage(LocaleLoader.getString("Commands.PowerLevel", new Object[] { String.valueOf(Users.getPlayer(player).getPowerLevel()) }));
+
+        int powerLevelCap = Config.getInstance().getPowerLevelCap();
+        
+        if (powerLevelCap > 0)
+        	player.sendMessage(LocaleLoader.getString("Commands.PowerLevel.Capped", new Object[] { String.valueOf(Users.getPlayer(player).getPowerLevel()), String.valueOf(powerLevelCap) }));
+        else
+        	player.sendMessage(LocaleLoader.getString("Commands.PowerLevel", new Object[] { String.valueOf(Users.getPlayer(player).getPowerLevel()) }));        	
 
         return true;
     }

+ 59 - 0
src/main/java/com/gmail/nossr50/commands/general/SkillResetCommand.java

@@ -0,0 +1,59 @@
+package com.gmail.nossr50.commands.general;
+
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.commands.CommandHelper;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.LocaleLoader;
+import com.gmail.nossr50.util.Users;
+
+public class SkillResetCommand implements CommandExecutor {
+
+    @Override
+    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+        if (CommandHelper.noConsoleUsage(sender)) {
+            return true;
+        }
+        
+        //ensure they have the skillreset perm
+        if (CommandHelper.noCommandPermissions(sender, "mcmmo.skillreset")) {
+            return true;
+        }
+        
+        SkillType skillType = null; //simple initialization
+        
+        //make sure there's only one argument.  output at least some kind of error if not
+        if (args.length != 1 && args[0] != null) {
+        	sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid"));
+            return true;
+        }
+        
+        
+        //parse the skilltype that they sent
+        try
+        {
+        	skillType = SkillType.valueOf(args[0].toUpperCase().trim());  //ucase needed to match enum since it's case sensitive. trim to be nice
+        }catch(IllegalArgumentException ex)
+    	{
+        	sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid"));
+            return true;
+    	}
+        
+        //reset the values in the hash table and persist them
+        PlayerProfile profile = Users.getProfile((Player)sender);
+        profile.resetSkill(skillType);
+        profile.save();
+        
+        //display a success message to the user
+        if (skillType == SkillType.ALL)
+        	sender.sendMessage(LocaleLoader.getString("Commands.Reset.All"));
+        else
+        	sender.sendMessage(LocaleLoader.getString("Commands.Reset.Single", new Object[] { args[0] }));    
+        
+        return true;
+    }
+}

+ 1 - 1
src/main/java/com/gmail/nossr50/commands/general/XprateCommand.java

@@ -13,7 +13,7 @@ import com.gmail.nossr50.util.Misc;
 
 public class XprateCommand implements CommandExecutor {
     private final mcMMO plugin;
-    private static int oldRate = Config.getInstance().xpGainMultiplier;
+    private static double oldRate = Config.getInstance().xpGainMultiplier;
     private static boolean xpEvent = false;
 
     public XprateCommand (mcMMO plugin) {

+ 5 - 0
src/main/java/com/gmail/nossr50/commands/mc/MccCommand.java

@@ -7,6 +7,7 @@ import org.bukkit.command.CommandSender;
 import org.bukkit.entity.Player;
 
 import com.gmail.nossr50.commands.CommandHelper;
+import com.gmail.nossr50.config.Config;
 import com.gmail.nossr50.locale.LocaleLoader;
 import com.gmail.nossr50.util.Permissions;
 
@@ -44,6 +45,10 @@ public class MccCommand implements CommandExecutor {
         player.sendMessage("/mcstats " + LocaleLoader.getString("Commands.Stats"));
         player.sendMessage("/mctop " + LocaleLoader.getString("Commands.Leaderboards"));
 
+        if (Config.getInstance().getCommandSkillResetEnabled() && Permissions.getInstance().skillReset(player)) {
+            player.sendMessage("/skillreset <skill|all> " + LocaleLoader.getString("Commands.Reset"));
+        }
+        
         if (Permissions.getInstance().mcAbility(player)) {
             player.sendMessage("/mcability " + LocaleLoader.getString("Commands.ToggleAbility"));
         }

+ 3 - 2
src/main/java/com/gmail/nossr50/config/Config.java

@@ -7,7 +7,7 @@ import org.bukkit.configuration.ConfigurationSection;
 
 public class Config extends ConfigLoader {
     private static Config instance;
-    public int xpGainMultiplier = 1;
+    public double xpGainMultiplier = 1;
 
     private Config() {
         super("config.yml");
@@ -77,6 +77,7 @@ public class Config extends ConfigLoader {
     public boolean getCommandMCCEnabled() { return config.getBoolean("Commands.mcc.Enabled", true); }
     public boolean getCommandMCGodEnabled() { return config.getBoolean("Commands.mcgod.Enabled", true); }
     public boolean getCommandMCStatsEnabled() { return config.getBoolean("Commands.mcstats.Enabled", true); }
+    public boolean getCommandSkillResetEnabled() { return config.getBoolean("Commands.skillreset.Enabled", true); }
     public boolean getCommandMmoeditEnabled() { return config.getBoolean("Commands.mmoedit.Enabled", true); }
     public boolean getCommandMCRemoveEnabled() { return config.getBoolean("Commands.mcremove.Enable", true); }
     public boolean getCommandPTPEnabled() { return config.getBoolean("Commands.ptp.Enabled", true); }
@@ -342,7 +343,7 @@ public class Config extends ConfigLoader {
     /* General Settings */
     public boolean getExperienceGainsMobspawnersEnabled() { return config.getBoolean("Experience.Gains.Mobspawners.Enabled", false); }
     public boolean getExperienceGainsPlayerVersusPlayerEnabled() { return config.getBoolean("Experience.PVP.Rewards", true); }
-    public int getExperienceGainsGlobalMultiplier() { return config.getInt("Experience.Gains.Multiplier.Global", 1); }
+    public double getExperienceGainsGlobalMultiplier() { return config.getDouble("Experience.Gains.Multiplier.Global", 1.0); }
 
     /* Combat XP Multipliers */
     public double getPlayerVersusPlayerXP() { return config.getDouble("Experience.Gains.Multiplier.PVP", 1.0); }

+ 2 - 2
src/main/java/com/gmail/nossr50/datatypes/McMMOPlayer.java

@@ -108,7 +108,7 @@ public class McMMOPlayer {
      * @param newValue The amount of XP to add
      */
     public void addXPOverrideBonus(SkillType skillType, int xp) {
-        int modifiedXp = xp * Config.getInstance().xpGainMultiplier;
+        int modifiedXp = (int)Math.floor(xp * Config.getInstance().xpGainMultiplier);
         addXPOverride(skillType, modifiedXp);
     }
 
@@ -129,7 +129,7 @@ public class McMMOPlayer {
             bonusModifier = calculatePartyXPModifier(skillType);
         }
 
-        int xp = (int) (newValue / skillType.getXpModifier()) * Config.getInstance().xpGainMultiplier;
+        int xp = (int)Math.floor((newValue / skillType.getXpModifier()) * Config.getInstance().xpGainMultiplier);
 
         if (bonusModifier > 0) {
             if (bonusModifier >= 2) {

+ 15 - 0
src/main/java/com/gmail/nossr50/datatypes/PlayerProfile.java

@@ -903,6 +903,21 @@ public class PlayerProfile {
     public void skillUp(SkillType skillType, int newValue) {
         skills.put(skillType, skills.get(skillType) + newValue);
     }
+    
+    public void resetSkill(SkillType skillType)
+    {
+    	//do a single skilltype
+    	if (skillType != SkillType.ALL)
+    		skills.put(skillType, 0);
+    	else //do them all
+    	{
+    		for(SkillType skill : SkillType.values()) //iterate over all items in the enumeration
+    		{
+    			if (skill != SkillType.ALL) // skip the "all" value
+    				skills.put(skill,  0);
+    		}
+    	}
+    }
 
 //    /**
 //     * Adds XP to the player, doesn't calculate for XP Rate

+ 5 - 0
src/main/java/com/gmail/nossr50/mcMMO.java

@@ -21,6 +21,7 @@ import com.gmail.nossr50.commands.general.InspectCommand;
 import com.gmail.nossr50.commands.general.McstatsCommand;
 import com.gmail.nossr50.commands.general.MmoeditCommand;
 import com.gmail.nossr50.commands.general.MmoupdateCommand;
+import com.gmail.nossr50.commands.general.SkillResetCommand;
 import com.gmail.nossr50.commands.general.XprateCommand;
 import com.gmail.nossr50.commands.mc.McabilityCommand;
 import com.gmail.nossr50.commands.mc.MccCommand;
@@ -365,6 +366,10 @@ public class mcMMO extends JavaPlugin {
             getCommand("mcstats").setExecutor(new McstatsCommand());
         }
 
+        if (configInstance.getCommandSkillResetEnabled()) {
+            getCommand("skillreset").setExecutor(new SkillResetCommand());
+        }
+
         //Party commands
         if (configInstance.getCommandAcceptEnabled()) {
             getCommand("accept").setExecutor(new AcceptCommand(this));

+ 5 - 0
src/main/java/com/gmail/nossr50/util/Permissions.java

@@ -383,6 +383,11 @@ public class Permissions {
     public boolean party(Player player) {
         return player.hasPermission("mcmmo.commands.party");
     }
+    
+    public boolean skillReset(Player player) {
+        return player.hasPermission("mcmmo.skillreset");
+    }
+    
 
     /*
      * MCMMO.CHAT.*

+ 2 - 0
src/main/resources/config.yml

@@ -321,6 +321,8 @@ Commands:
         Enabled: true
     mcstats:
         Enabled: true
+    skillreset:
+        Enabled: true
     mcability:
         Enabled: true
     party:

+ 4 - 0
src/main/resources/locale/locale_en_US.properties

@@ -408,7 +408,11 @@ Commands.Party.Teleport=<player> [[RED]]- Teleport to party member
 Commands.Party.Toggle=[[RED]]- Toggle Party Chat
 Commands.Party=<party-name> [[RED]]- Create/Join designated party
 Commands.PowerLevel.Leaderboard=[[YELLOW]]--mcMMO[[BLUE]] Power Level [[YELLOW]]Leaderboard--
+Commands.PowerLevel.Capped=[[DARK_RED]]POWER LEVEL: [[GREEN]]{0} [[DARK_RED]]MAX LEVEL: [[YELLOW]]{1}
 Commands.PowerLevel=[[DARK_RED]]POWER LEVEL: [[GREEN]]{0}
+Commands.Reset.All=[[GREEN]]All of your skill levels have been reset successfully.
+Commands.Reset.Single=[[GREEN]]Your {0} skill level has been reset successfully.
+Commands.Reset=[[RED]]Reset a skill's level to 0
 Commands.Skill.Invalid=[[RED]]That is not a valid skillname!
 Commands.Skill.Leaderboard=[[YELLOW]]--mcMMO [[BLUE]]{0}[[YELLOW]] Leaderboard--
 Commands.SkillInfo=/<skill> [[RED]]- View detailed information about a skill

+ 6 - 1
src/main/resources/plugin.yml

@@ -73,6 +73,9 @@ commands:
     p:
         aliases: [pc]
         description: Toggle Party chat or send party chat messages
+    skillreset:
+        aliases: []
+        description: Reset the level of one or all of your skills
     excavation:
         aliases: []
         description: Detailed skill info
@@ -583,4 +586,6 @@ permissions:
     mcmmo.skills.axes:
         description: Allows access to the Axes skill
     mcmmo.skills.acrobatics:
-        description: Allows access to the Acrobatics skill
+        description: Allows access to the Acrobatics skill
+    mcmmo.skillreset:
+        description: Allow reset of skill levels