From 160004fa7e54dc39fef0110e2be341884a2906d5 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Mon, 21 May 2012 23:56:08 -0700 Subject: [PATCH] Hardcore mode now has some exploit prevention and much more information --- Changelog.txt | 2 ++ .../java/com/gmail/nossr50/util/Hardcore.java | 21 +++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index e12eddeba..b5a4d51d6 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -14,10 +14,12 @@ Version 1.3.08 = Fixed exploit where you could gain tons of Acrobatics XP from spamming Ender Pearls = Fixed normal pistons marking a block as user-placed on retract if it wasn't a sticky piston (thanks turt2live!) = Fixed handling of the Unbreaking enchantment so that tools are actually damaged as they should now + ! Changed Hardcore Vampirism to require the victim to have at least half the skill level of the killer in order for vampirism to proc (this is to avoid exploitation) ! Changed Hardcore Vampirism to steal a minimum of 1 skill level from a player no matter the percentage ! Changed Hardcore & Vampirism to not be executed if percentages were set to zero or below ! Changed Vampirism to actually remove stats from the victim ! Changed Vampirism to inform the victim of their stat loss + ! Added more notifications about Vampirism and Hardcore mode ! Changed Mining to allow Silk Touch to work again since the dupe exploit has been fixed. ! Changed Metrics to also report if the server uses plugin profiling diff --git a/src/main/java/com/gmail/nossr50/util/Hardcore.java b/src/main/java/com/gmail/nossr50/util/Hardcore.java index 301f98945..ffdb4447b 100644 --- a/src/main/java/com/gmail/nossr50/util/Hardcore.java +++ b/src/main/java/com/gmail/nossr50/util/Hardcore.java @@ -14,6 +14,8 @@ public class Hardcore { PlayerProfile PP = Users.getProfile(player); + int totalCount = 0; + for(SkillType st : SkillType.values()) { if(st.equals(SkillType.ALL)) @@ -24,10 +26,12 @@ public class Hardcore { if(newValue < 0) newValue = 0; + totalCount+=PP.getSkillLevel(st)-newValue; + PP.modifySkill(st, newValue); } - player.sendMessage(ChatColor.GOLD+"[mcMMO] "+ChatColor.DARK_RED+"You've suffered a penalty to skills from death."); + player.sendMessage(ChatColor.GOLD+"[mcMMO] "+ChatColor.DARK_RED+"You've lost "+ChatColor.BLUE+totalCount+ChatColor.DARK_RED+" from death."); } public static void invokeVampirism(Player killer, Player defender) { @@ -37,11 +41,13 @@ public class Hardcore { PlayerProfile PPk = Users.getProfile(killer); PlayerProfile PPd = Users.getProfile(defender); + int totalCount = 0; + for(SkillType st : SkillType.values()) { if(st.equals(SkillType.ALL)) continue; - if(PPd.getSkillLevel(st) <= 0) + if(PPd.getSkillLevel(st) <= 0 || PPd.getSkillLevel(st) < (PPk.getSkillLevel(st)/2)) continue; int newValue = (int) (PPd.getSkillLevel(st) * (Config.getInstance().getHardcoreVampirismStatLeechPercentage() * 0.01D)); @@ -49,11 +55,18 @@ public class Hardcore { if(newValue <= 0) newValue = 1; + totalCount+=1; + PPk.modifySkill(st, newValue+PPk.getSkillLevel(st)); PPd.modifySkill(st, PPd.getSkillLevel(st)-newValue); } - killer.sendMessage(ChatColor.GOLD+"[mcMMO] "+ChatColor.DARK_AQUA+"You've stolen knowledge from that player."); - defender.sendMessage(ChatColor.GOLD+"[mcMMO] "+ChatColor.YELLOW+killer.getName()+ChatColor.DARK_AQUA+" has stolen knowledge from you!"); + if(totalCount >= 1) { + killer.sendMessage(ChatColor.GOLD+"[mcMMO] "+ChatColor.DARK_AQUA+"You've stolen "+ChatColor.BLUE+totalCount+ChatColor.DARK_AQUA+" levels from that player."); + defender.sendMessage(ChatColor.GOLD+"[mcMMO] "+ChatColor.YELLOW+killer.getName()+ChatColor.DARK_RED+" has stolen "+ChatColor.BLUE+totalCount+ChatColor.DARK_RED+" levels from you!"); + } else { + killer.sendMessage(ChatColor.GOLD+"[mcMMO] "+ChatColor.GRAY+"That player was too unskilled to grant you any knowledge."); + defender.sendMessage(ChatColor.GOLD+"[mcMMO] "+ChatColor.YELLOW+killer.getName()+ChatColor.GRAY+" was unable to steal knowledge from you!"); + } } } \ No newline at end of file