From 2543c68c09f41c960e0f0b03861292c54cb374e9 Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sat, 25 Apr 2015 00:50:27 +0000 Subject: [PATCH] Reverting Premium System drop calculations. --- .../handlers/bypasshandlers/NpcViewMod.java | 4 +-- .../model/drops/GeneralDropItem.java | 33 +++++++++++-------- .../model/drops/GroupedGeneralDropItem.java | 4 +-- .../strategy/IAmountMultiplierStrategy.java | 26 +++------------ .../strategy/IChanceMultiplierStrategy.java | 28 ++++------------ .../strategy/IDropCalculationStrategy.java | 2 +- .../IGroupedItemDropCalculationStrategy.java | 2 +- .../IKillerChanceModifierStrategy.java | 3 +- 8 files changed, 39 insertions(+), 63 deletions(-) diff --git a/trunk/dist/game/data/scripts/handlers/bypasshandlers/NpcViewMod.java b/trunk/dist/game/data/scripts/handlers/bypasshandlers/NpcViewMod.java index 0d27c514c8..62a7eb8a8e 100644 --- a/trunk/dist/game/data/scripts/handlers/bypasshandlers/NpcViewMod.java +++ b/trunk/dist/game/data/scripts/handlers/bypasshandlers/NpcViewMod.java @@ -322,7 +322,7 @@ public class NpcViewMod implements IBypassHandler sb.append(item.getName()); sb.append(""); sb.append("
Amount:"); - MinMax minMax = getPreciseMinMax(normalized.getChance(), generalDropItem.getMin(npc, null), generalDropItem.getMax(npc, null), generalDropItem.isPreciseCalculated()); + MinMax minMax = getPreciseMinMax(normalized.getChance(), generalDropItem.getMin(npc), generalDropItem.getMax(npc), generalDropItem.isPreciseCalculated()); final long min = minMax.min; final long max = minMax.max; if (min == max) @@ -401,7 +401,7 @@ public class NpcViewMod implements IBypassHandler sb.append("
"); sb.append(""); sb.append("
Amount:"); - MinMax minMax = getPreciseMinMax(dropItem.getChance(npc, activeChar), dropItem.getMin(npc, null), dropItem.getMax(npc, null), dropItem.isPreciseCalculated()); + MinMax minMax = getPreciseMinMax(dropItem.getChance(npc, activeChar), dropItem.getMin(npc), dropItem.getMax(npc), dropItem.isPreciseCalculated()); final long min = minMax.min; final long max = minMax.max; diff --git a/trunk/java/com/l2jserver/gameserver/model/drops/GeneralDropItem.java b/trunk/java/com/l2jserver/gameserver/model/drops/GeneralDropItem.java index df0e6ec035..3673033691 100644 --- a/trunk/java/com/l2jserver/gameserver/model/drops/GeneralDropItem.java +++ b/trunk/java/com/l2jserver/gameserver/model/drops/GeneralDropItem.java @@ -146,12 +146,11 @@ public final class GeneralDropItem implements IDropItem /** * Gets the min drop count modified by server rates * @param victim the victim who drops the item - * @param killer * @return the min modified by any rates. */ - public final long getMin(L2Character victim, L2Character killer) + public final long getMin(L2Character victim) { - return (long) (getMin() * getAmountMultiplier(victim, killer)); + return (long) (getMin() * getAmountMultiplier(victim)); } /** @@ -166,12 +165,11 @@ public final class GeneralDropItem implements IDropItem /** * Gets the max drop count modified by server rates * @param victim the victim who drops the item - * @param killer * @return the max modified by any rates. */ - public final long getMax(L2Character victim, L2Character killer) + public final long getMax(L2Character victim) { - return (long) (getMax() * getAmountMultiplier(victim, killer)); + return (long) (getMax() * getAmountMultiplier(victim)); } /** @@ -183,6 +181,17 @@ public final class GeneralDropItem implements IDropItem return _chance; } + /** + * Gets the general chance to drop this item modified by rates.
+ * This shall be used in calculating chance within drop groups. + * @param victim the victim who drops the item + * @return the chance modified by any rates. + */ + public final double getChance(L2Character victim) + { + return getChance() * getChanceMultiplier(victim); + } + /** * Gets the chance of dropping this item for current killer and victim (modified by server rates and another rules based on killer)
* This shall be used to calculate chance outside of drop groups. @@ -192,7 +201,7 @@ public final class GeneralDropItem implements IDropItem */ public final double getChance(L2Character victim, L2Character killer) { - return (getKillerChanceModifier(victim, killer) * getChance()); + return (getKillerChanceModifier(victim, killer) * getChance(victim)); } @Override @@ -223,22 +232,20 @@ public final class GeneralDropItem implements IDropItem /** * This gets standard server rates for this item * @param victim who drops the item - * @param killer * @return */ - protected final double getAmountMultiplier(L2Character victim, L2Character killer) + protected final double getAmountMultiplier(L2Character victim) { - return _amountStrategy.getAmountMultiplier(this, victim, killer); + return _amountStrategy.getAmountMultiplier(this, victim); } /** * This gets standard server rates for this item * @param victim who drops the item - * @param killer * @return */ - protected final double getChanceMultiplier(L2Character victim, L2Character killer) + protected final double getChanceMultiplier(L2Character victim) { - return _chanceStrategy.getChanceMultiplier(this, victim, killer); + return _chanceStrategy.getChanceMultiplier(this, victim); } } diff --git a/trunk/java/com/l2jserver/gameserver/model/drops/GroupedGeneralDropItem.java b/trunk/java/com/l2jserver/gameserver/model/drops/GroupedGeneralDropItem.java index 74b63982d6..183b5d242b 100644 --- a/trunk/java/com/l2jserver/gameserver/model/drops/GroupedGeneralDropItem.java +++ b/trunk/java/com/l2jserver/gameserver/model/drops/GroupedGeneralDropItem.java @@ -214,14 +214,14 @@ public final class GroupedGeneralDropItem implements IDropItem double sumchance = 0; for (GeneralDropItem item : getItems()) { - sumchance += (item.getChance(victim, killer) * getChance() * chanceModifier) / 100; + sumchance += (item.getChance(victim) * getChance() * chanceModifier) / 100; } GroupedGeneralDropItem group = new GroupedGeneralDropItem(sumchance, getDropCalculationStrategy(), IKillerChanceModifierStrategy.NO_RULES, getPreciseStrategy()); // to discard further deep blue calculations List items = new ArrayList<>(); for (GeneralDropItem item : getItems()) { // the item is made almost "static" - items.add(new GeneralDropItem(item.getItemId(), item.getMin(victim, killer), item.getMax(victim, killer), (item.getChance(victim, killer) * getChance() * chanceModifier) / sumchance, IAmountMultiplierStrategy.STATIC, IChanceMultiplierStrategy.STATIC, getPreciseStrategy(), IKillerChanceModifierStrategy.NO_RULES, item.getDropCalculationStrategy())); + items.add(new GeneralDropItem(item.getItemId(), item.getMin(victim), item.getMax(victim), (item.getChance(victim) * getChance() * chanceModifier) / sumchance, IAmountMultiplierStrategy.STATIC, IChanceMultiplierStrategy.STATIC, getPreciseStrategy(), IKillerChanceModifierStrategy.NO_RULES, item.getDropCalculationStrategy())); } group.setItems(items); return group; diff --git a/trunk/java/com/l2jserver/gameserver/model/drops/strategy/IAmountMultiplierStrategy.java b/trunk/java/com/l2jserver/gameserver/model/drops/strategy/IAmountMultiplierStrategy.java index 9e8a25fc39..a3b2f5b794 100644 --- a/trunk/java/com/l2jserver/gameserver/model/drops/strategy/IAmountMultiplierStrategy.java +++ b/trunk/java/com/l2jserver/gameserver/model/drops/strategy/IAmountMultiplierStrategy.java @@ -30,21 +30,16 @@ public interface IAmountMultiplierStrategy { public static final IAmountMultiplierStrategy DROP = DEFAULT_STRATEGY(Config.RATE_DEATH_DROP_AMOUNT_MULTIPLIER); public static final IAmountMultiplierStrategy SPOIL = DEFAULT_STRATEGY(Config.RATE_CORPSE_DROP_AMOUNT_MULTIPLIER); - public static final IAmountMultiplierStrategy STATIC = (item, victim, killer) -> 1; + public static final IAmountMultiplierStrategy STATIC = (item, victim) -> 1; public static IAmountMultiplierStrategy DEFAULT_STRATEGY(final double defaultMultiplier) { - return (item, victim, killer) -> + return (item, victim) -> { double multiplier = 1; - final Float dropChanceMultiplier = Config.RATE_DROP_AMOUNT_MULTIPLIER.get(item.getItemId()); - final Float premiumAmountMultiplier = Config.PREMIUM_RATE_DROP_AMOUNT_MULTIPLIER.get(item.getItemId()); - if (Config.PREMIUM_SYSTEM_ENABLED && (premiumAmountMultiplier != null) && (killer != null) && killer.isPlayer() && killer.getActingPlayer().hasPremiumStatus()) - { - multiplier *= premiumAmountMultiplier; - } - else if (dropChanceMultiplier != null) + Float dropChanceMultiplier = Config.RATE_DROP_AMOUNT_MULTIPLIER.get(item.getItemId()); + if (dropChanceMultiplier != null) { multiplier *= dropChanceMultiplier; } @@ -56,17 +51,6 @@ public interface IAmountMultiplierStrategy { multiplier *= Config.RATE_RAID_DROP_AMOUNT_MULTIPLIER; } - else if (Config.PREMIUM_SYSTEM_ENABLED && (killer != null) && killer.isPlayer() && killer.getActingPlayer().hasPremiumStatus()) - { - if ((defaultMultiplier == Config.RATE_DEATH_DROP_AMOUNT_MULTIPLIER) && (defaultMultiplier != Config.RATE_CORPSE_DROP_AMOUNT_MULTIPLIER)) - { - multiplier *= Config.PREMIUM_RATE_DROP_AMOUNT; - } - else - { - multiplier *= Config.PREMIUM_RATE_SPOIL_AMOUNT; - } - } else { multiplier *= defaultMultiplier; @@ -75,5 +59,5 @@ public interface IAmountMultiplierStrategy }; } - public double getAmountMultiplier(GeneralDropItem item, L2Character victim, L2Character killer); + public double getAmountMultiplier(GeneralDropItem item, L2Character victim); } diff --git a/trunk/java/com/l2jserver/gameserver/model/drops/strategy/IChanceMultiplierStrategy.java b/trunk/java/com/l2jserver/gameserver/model/drops/strategy/IChanceMultiplierStrategy.java index 9a342c72db..37a74d21f1 100644 --- a/trunk/java/com/l2jserver/gameserver/model/drops/strategy/IChanceMultiplierStrategy.java +++ b/trunk/java/com/l2jserver/gameserver/model/drops/strategy/IChanceMultiplierStrategy.java @@ -31,9 +31,9 @@ public interface IChanceMultiplierStrategy { public static final IChanceMultiplierStrategy DROP = DEFAULT_STRATEGY(Config.RATE_DEATH_DROP_CHANCE_MULTIPLIER); public static final IChanceMultiplierStrategy SPOIL = DEFAULT_STRATEGY(Config.RATE_CORPSE_DROP_CHANCE_MULTIPLIER); - public static final IChanceMultiplierStrategy STATIC = (item, victim, killer) -> 1; + public static final IChanceMultiplierStrategy STATIC = (item, victim) -> 1; - public static final IChanceMultiplierStrategy QUEST = (item, victim, killer) -> + public static final IChanceMultiplierStrategy QUEST = (item, victim) -> { double championmult; if ((item.getItemId() == Inventory.ADENA_ID) || (item.getItemId() == Inventory.ANCIENT_ADENA_ID)) @@ -50,20 +50,15 @@ public interface IChanceMultiplierStrategy public static IChanceMultiplierStrategy DEFAULT_STRATEGY(final double defaultMultiplier) { - return (item, victim, killer) -> + return (item, victim) -> { float multiplier = 1; if (victim.isChampion()) { multiplier *= item.getItemId() != Inventory.ADENA_ID ? Config.L2JMOD_CHAMPION_REWARDS : Config.L2JMOD_CHAMPION_ADENAS_REWARDS; } - final Float dropChanceMultiplier = Config.RATE_DROP_CHANCE_MULTIPLIER.get(item.getItemId()); - final Float premiumChanceMultiplier = Config.PREMIUM_RATE_DROP_CHANCE_MULTIPLIER.get(item.getItemId()); - if (Config.PREMIUM_SYSTEM_ENABLED && (premiumChanceMultiplier != null) && (killer != null) && killer.isPlayer() && killer.getActingPlayer().hasPremiumStatus()) - { - multiplier *= premiumChanceMultiplier; - } - else if (dropChanceMultiplier != null) + Float dropChanceMultiplier = Config.RATE_DROP_CHANCE_MULTIPLIER.get(item.getItemId()); + if (dropChanceMultiplier != null) { multiplier *= dropChanceMultiplier; } @@ -75,17 +70,6 @@ public interface IChanceMultiplierStrategy { multiplier *= Config.RATE_RAID_DROP_CHANCE_MULTIPLIER; } - else if (Config.PREMIUM_SYSTEM_ENABLED && (killer != null) && killer.isPlayer() && killer.getActingPlayer().hasPremiumStatus()) - { - if ((defaultMultiplier == Config.RATE_DEATH_DROP_CHANCE_MULTIPLIER) && (defaultMultiplier != Config.RATE_CORPSE_DROP_CHANCE_MULTIPLIER)) - { - multiplier *= Config.PREMIUM_RATE_DROP_CHANCE; - } - else - { - multiplier *= Config.PREMIUM_RATE_SPOIL_CHANCE; - } - } else { multiplier *= defaultMultiplier; @@ -94,5 +78,5 @@ public interface IChanceMultiplierStrategy }; } - public double getChanceMultiplier(GeneralDropItem item, L2Character victim, L2Character killer); + public double getChanceMultiplier(GeneralDropItem item, L2Character victim); } diff --git a/trunk/java/com/l2jserver/gameserver/model/drops/strategy/IDropCalculationStrategy.java b/trunk/java/com/l2jserver/gameserver/model/drops/strategy/IDropCalculationStrategy.java index 878286f4f2..f719c2e63c 100644 --- a/trunk/java/com/l2jserver/gameserver/model/drops/strategy/IDropCalculationStrategy.java +++ b/trunk/java/com/l2jserver/gameserver/model/drops/strategy/IDropCalculationStrategy.java @@ -46,7 +46,7 @@ public interface IDropCalculationStrategy } } - return Collections.singletonList(new ItemHolder(item.getItemId(), Rnd.get(item.getMin(victim, killer), item.getMax(victim, killer)) * amountMultiply)); + return Collections.singletonList(new ItemHolder(item.getItemId(), Rnd.get(item.getMin(victim), item.getMax(victim)) * amountMultiply)); } return null; diff --git a/trunk/java/com/l2jserver/gameserver/model/drops/strategy/IGroupedItemDropCalculationStrategy.java b/trunk/java/com/l2jserver/gameserver/model/drops/strategy/IGroupedItemDropCalculationStrategy.java index a0460bde74..614da66741 100644 --- a/trunk/java/com/l2jserver/gameserver/model/drops/strategy/IGroupedItemDropCalculationStrategy.java +++ b/trunk/java/com/l2jserver/gameserver/model/drops/strategy/IGroupedItemDropCalculationStrategy.java @@ -79,7 +79,7 @@ public interface IGroupedItemDropCalculationStrategy } } - return Collections.singletonList(new ItemHolder(item2.getItemId(), Rnd.get(item2.getMin(victim, killer), item2.getMax(victim, killer)) * amountMultiply)); + return Collections.singletonList(new ItemHolder(item2.getItemId(), Rnd.get(item2.getMin(victim), item2.getMax(victim)) * amountMultiply)); } } } diff --git a/trunk/java/com/l2jserver/gameserver/model/drops/strategy/IKillerChanceModifierStrategy.java b/trunk/java/com/l2jserver/gameserver/model/drops/strategy/IKillerChanceModifierStrategy.java index 4d1de7f8e3..023e46245f 100644 --- a/trunk/java/com/l2jserver/gameserver/model/drops/strategy/IKillerChanceModifierStrategy.java +++ b/trunk/java/com/l2jserver/gameserver/model/drops/strategy/IKillerChanceModifierStrategy.java @@ -40,11 +40,11 @@ public interface IKillerChanceModifierStrategy extends INonGroupedKillerChanceMo } else if (Config.DEEPBLUE_DROP_RULES) { + return Util.map(levelDifference, -Config.DROP_ITEM_MAX_LEVEL_DIFFERENCE, -Config.DROP_ITEM_MIN_LEVEL_DIFFERENCE, Config.DROP_ITEM_MIN_LEVEL_GAP_CHANCE, 100.0) / 100; } return 1; }; - public static final INonGroupedKillerChanceModifierStrategy DEFAULT_NONGROUP_STRATEGY = (item, victim, killer) -> { if (((!(victim.isRaid())) && Config.DEEPBLUE_DROP_RULES) || ((victim.isRaid()) && Config.DEEPBLUE_DROP_RULES_RAID)) @@ -52,6 +52,7 @@ public interface IKillerChanceModifierStrategy extends INonGroupedKillerChanceMo int levelDifference = victim.getLevel() - killer.getLevel(); if (item.getItemId() == Inventory.ADENA_ID) { + return Util.map(levelDifference, -Config.DROP_ADENA_MAX_LEVEL_DIFFERENCE, -Config.DROP_ADENA_MIN_LEVEL_DIFFERENCE, Config.DROP_ADENA_MIN_LEVEL_GAP_CHANCE, 100.0) / 100; } return Util.map(levelDifference, -Config.DROP_ITEM_MAX_LEVEL_DIFFERENCE, -Config.DROP_ITEM_MIN_LEVEL_DIFFERENCE, Config.DROP_ITEM_MIN_LEVEL_GAP_CHANCE, 100.0) / 100;