From d0a994c019f02e26e5de81a0ef658a03ad3c9f34 Mon Sep 17 00:00:00 2001 From: mobius <8391001+MobiusDevelopment@users.noreply.github.com> Date: Thu, 12 Mar 2015 07:09:45 +0000 Subject: [PATCH] Drop calculation fix for dropping 0 count items. Author yksdtc. Source: http://www.l2jserver.com/forum/viewtopic.php?f=128&t=31068 --- .../model/drops/GeneralDropItem.java | 18 +++------- .../model/drops/GroupedGeneralDropItem.java | 34 ++++++++----------- 2 files changed, 20 insertions(+), 32 deletions(-) diff --git a/trunk/java/com/l2jserver/gameserver/model/drops/GeneralDropItem.java b/trunk/java/com/l2jserver/gameserver/model/drops/GeneralDropItem.java index e9810ea7aa..f2af358a72 100644 --- a/trunk/java/com/l2jserver/gameserver/model/drops/GeneralDropItem.java +++ b/trunk/java/com/l2jserver/gameserver/model/drops/GeneralDropItem.java @@ -264,21 +264,13 @@ public class GeneralDropItem implements IDropItem } final double chance = getChance(victim, killer); - int successes; - if (!Config.L2JMOD_OLD_DROP_BEHAVIOR) - { - successes = chance > (Rnd.nextDouble() * 100) ? 1 : 0; - } - else - { - successes = (int) (chance / 100); - successes += (chance % 100) > (Rnd.nextDouble() * 100) ? 1 : 0; - } - - if (successes > 0) + final boolean successes = chance > (Rnd.nextDouble() * 100); + if (successes) { final Collection items = new ArrayList<>(1); - items.add(new ItemHolder(getItemId(), Rnd.get(getMin(victim, killer), getMax(victim, killer)) * successes)); + final long baseDropCount = Rnd.get(getMin(victim, killer), getMax(victim, killer)); + final long finaldropCount = (long) (Config.L2JMOD_OLD_DROP_BEHAVIOR ? (baseDropCount * Math.max(1, chance / 100)) + (chance > 100 ? (chance % 100) > (Rnd.nextDouble() * 100) ? baseDropCount : 0 : 0) : baseDropCount); + items.add(new ItemHolder(getItemId(), finaldropCount)); return items; } diff --git a/trunk/java/com/l2jserver/gameserver/model/drops/GroupedGeneralDropItem.java b/trunk/java/com/l2jserver/gameserver/model/drops/GroupedGeneralDropItem.java index 79e9f78d3b..43c5a7e77a 100644 --- a/trunk/java/com/l2jserver/gameserver/model/drops/GroupedGeneralDropItem.java +++ b/trunk/java/com/l2jserver/gameserver/model/drops/GroupedGeneralDropItem.java @@ -126,28 +126,24 @@ public class GroupedGeneralDropItem implements IDropItem } final double chance = getChance(victim, killer) * chanceModifier; - int successes; - if (!Config.L2JMOD_OLD_DROP_BEHAVIOR) - { - successes = chance > (Rnd.nextDouble() * 100) ? 1 : 0; - } - else - { - successes = (int) (chance / 100); - successes += (chance % 100) > (Rnd.nextDouble() * 100) ? 1 : 0; - } + final boolean successes = chance > (Rnd.nextDouble() * 100); - double totalChance = 0; - final double random = (Rnd.nextDouble() * 100); - for (GeneralDropItem item : getItems()) + if (successes) { - // Grouped item chance rates should not be modified. - totalChance += item.getChance(); - if (totalChance > random) + double totalChance = 0; + final double random = (Rnd.nextDouble() * 100); + for (GeneralDropItem item : getItems()) { - final Collection items = new ArrayList<>(1); - items.add(new ItemHolder(item.getItemId(), Rnd.get(item.getMin(victim, killer), item.getMax(victim, killer)) * successes)); - return items; + // Grouped item chance rates should not be modified. + totalChance += item.getChance(); + if (totalChance > random) + { + final Collection items = new ArrayList<>(1); + final long baseDropCount = Rnd.get(item.getMin(victim, killer), item.getMax(victim, killer)); + final long finaldropCount = (long) (Config.L2JMOD_OLD_DROP_BEHAVIOR ? (baseDropCount * Math.max(1, chance / 100)) + (chance > 100 ? (chance % 100) > (Rnd.nextDouble() * 100) ? baseDropCount : 0 : 0) : baseDropCount); + items.add(new ItemHolder(item.getItemId(), finaldropCount)); + return items; + } } }