From be9141dd7b1c8fe300f2b485810fb4e2a27622d8 Mon Sep 17 00:00:00 2001 From: HexedHero <6012891+HexedHero@users.noreply.github.com> Date: Sun, 22 Sep 2019 22:29:23 +0100 Subject: [PATCH 1/3] Updated config --- src/main/resources/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 1a1fd3f..66340ba 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -156,7 +156,7 @@ NumberDisplay: SellAllPlaceholderShowFinalReward: false # # -# ExpUseLevels: If enabled rewards of type 'Exp' stand for "Exp level". Set this to false if you want to sell plain exp. This affects rewards only. +# ExpUseLevels: If enabled rewards of type 'Exp' stand for "Exp level". Set this to false if you want to use plain exp. ExpUseLevels: true # # @@ -247,4 +247,4 @@ Sound: ChangePage: 'UI_BUTTON_CLICK:0.2:1' ChangeShop: 'BLOCK_CHEST_OPEN:0.2:1' Open: 'ENTITY_ELDER_GUARDIAN_CURSE:1:1.8' - Close: '' \ No newline at end of file + Close: '' From 78fd085ba10286d8fa1b51479a86a864898935ea Mon Sep 17 00:00:00 2001 From: HexedHero <6012891+HexedHero@users.noreply.github.com> Date: Sun, 22 Sep 2019 22:32:58 +0100 Subject: [PATCH 2/3] Made the EXP price type work with EXP points not just the reward type --- .../bossshop/core/prices/BSPriceTypeExp.java | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/black_ixx/bossshop/core/prices/BSPriceTypeExp.java b/src/main/java/org/black_ixx/bossshop/core/prices/BSPriceTypeExp.java index 3d8bdcc..974a4c7 100644 --- a/src/main/java/org/black_ixx/bossshop/core/prices/BSPriceTypeExp.java +++ b/src/main/java/org/black_ixx/bossshop/core/prices/BSPriceTypeExp.java @@ -30,20 +30,32 @@ public void enableType() { @Override public boolean hasPrice(Player p, BSBuy buy, Object price, ClickType clickType, int multiplier, boolean messageOnFailure) { - int exp = (int) ClassManager.manager.getMultiplierHandler().calculatePriceWithMultiplier(p, buy, clickType, (Integer) price) * multiplier; - if ((p.getLevel() < (Integer) exp)) { - if (messageOnFailure) { - ClassManager.manager.getMessageHandler().sendMessage("NotEnough.Exp", p); - } - return false; - } - return true; + int exp = (int) ClassManager.manager.getMultiplierHandler().calculatePriceWithMultiplier(p, buy, clickType, (Integer) price) * multiplier; + if (ClassManager.manager.getSettings().getExpUseLevel()) { + if ((p.getLevel() < (Integer) exp)) { + if (messageOnFailure) { + ClassManager.manager.getMessageHandler().sendMessage("NotEnough.Exp", p); + } + return false; + } + } + else if ((p.getTotalExperience() < (Integer) exp)) { + if (messageOnFailure) { + ClassManager.manager.getMessageHandler().sendMessage("NotEnough.Exp", p); + } + return false; + } + return true; } @Override public String takePrice(Player p, BSBuy buy, Object price, ClickType clickType, int multiplier) { - int exp = (int) ClassManager.manager.getMultiplierHandler().calculatePriceWithMultiplier(p, buy, clickType, (Integer) price) * multiplier; - p.setLevel(p.getLevel() - exp); + int exp = (int) ClassManager.manager.getMultiplierHandler().calculatePriceWithMultiplier(p, buy, clickType, (Integer) price) * multiplier; + if (ClassManager.manager.getSettings().getExpUseLevel()) { + p.setLevel(p.getLevel() - exp); + } else { + p.giveExp(-exp); + } return getDisplayBalance(p, buy, price, clickType); } From 20ee3e6ce5c0c410194e8fa424a3362c3fa6c78b Mon Sep 17 00:00:00 2001 From: HexedHero <6012891+HexedHero@users.noreply.github.com> Date: Mon, 30 Sep 2019 04:20:46 +0100 Subject: [PATCH 3/3] Fixed EXP calculation --- .../bossshop/core/prices/BSPriceTypeExp.java | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/black_ixx/bossshop/core/prices/BSPriceTypeExp.java b/src/main/java/org/black_ixx/bossshop/core/prices/BSPriceTypeExp.java index 974a4c7..b1c65f9 100644 --- a/src/main/java/org/black_ixx/bossshop/core/prices/BSPriceTypeExp.java +++ b/src/main/java/org/black_ixx/bossshop/core/prices/BSPriceTypeExp.java @@ -1,6 +1,5 @@ package org.black_ixx.bossshop.core.prices; - import org.black_ixx.bossshop.core.BSBuy; import org.black_ixx.bossshop.managers.ClassManager; import org.black_ixx.bossshop.managers.misc.InputReader; @@ -39,7 +38,7 @@ public boolean hasPrice(Player p, BSBuy buy, Object price, ClickType clickType, return false; } } - else if ((p.getTotalExperience() < (Integer) exp)) { + else if (getTotalExperience(p) < (Integer) exp) { if (messageOnFailure) { ClassManager.manager.getMessageHandler().sendMessage("NotEnough.Exp", p); } @@ -88,5 +87,31 @@ public boolean isIntegerValue() { return true; } + private int getExperienceAtLevel(Player player) { + return this.getExperienceAtLevel(player.getLevel()); + } + + private int getExperienceAtLevel(int level) { + if (level <= 15) { + return (level << 1) + 7; + } + if (level >= 16 && level <= 30) { + return (level * 5) - 38; + } + return (level * 9) - 158; + } + + private int getTotalExperience(Player player) { + int experience = Math.round(this.getExperienceAtLevel(player) * player.getExp()); + int currentLevel = player.getLevel(); + while (currentLevel > 0) { + currentLevel--; + experience += this.getExperienceAtLevel(currentLevel); + } + if (experience < 0) { + experience = Integer.MAX_VALUE; + } + return experience; + } }