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("Amount: | ");
sb.append("");
- 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;
| | |