From 2adca395c0f662980231053cf8152065b794d130 Mon Sep 17 00:00:00 2001 From: Ka0rX Date: Sat, 29 Oct 2022 06:20:52 +0200 Subject: [PATCH] Little modifications to the chance system. Potential fix of a bug about fishing drop tables. --- .../java/net/Indyuce/mmocore/loot/RandomWeightedRoll.java | 6 +++--- .../Indyuce/mmocore/loot/droptable/dropitem/DropItem.java | 3 ++- .../java/net/Indyuce/mmocore/manager/ConfigManager.java | 3 ++- MMOCore-Dist/src/main/resources/config.yml | 1 + 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/RandomWeightedRoll.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/RandomWeightedRoll.java index 53e3fae2..ffe61326 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/RandomWeightedRoll.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/RandomWeightedRoll.java @@ -17,6 +17,7 @@ public class RandomWeightedRoll { private final T rolled; private static final Random RANDOM = new Random(); + private static final double CHANCE_COEFFICIENT = 7. / 100; public RandomWeightedRoll(PlayerData player, Collection collection, double chanceWeight) { this.collection = collection; @@ -26,13 +27,13 @@ public class RandomWeightedRoll { for (T item : collection) { partialSum += computeRealWeight(item, chance); - if (partialSum > randomCoefficient * sum) { + if (partialSum >= randomCoefficient * sum) { rolled = item; return; } } - throw new RuntimeException("Could not roll item"); + throw new RuntimeException("Could not roll item, the chance is :"+chance); } /** @@ -53,7 +54,6 @@ public class RandomWeightedRoll { return sum; } - private static final double CHANCE_COEFFICIENT = 7. / 100; /** * chance = 0 | tier chances are unchanged diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/droptable/dropitem/DropItem.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/droptable/dropitem/DropItem.java index f46c0554..8559101c 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/droptable/dropitem/DropItem.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/droptable/dropitem/DropItem.java @@ -1,6 +1,7 @@ package net.Indyuce.mmocore.loot.droptable.dropitem; import io.lumine.mythic.lib.api.MMOLineConfig; +import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.util.math.formula.RandomAmount; import net.Indyuce.mmocore.loot.LootBuilder; @@ -46,7 +47,7 @@ public abstract class DropItem { */ public boolean rollChance(PlayerData player) { double value = random.nextDouble(); - return value < Math.pow(chance, 1 / Math.pow(1 + CHANCE_COEFFICIENT * player.getStats().getStat("CHANCE"), 1.0 / 3.0)); + return value < Math.pow(chance, 1 / Math.pow(1 + CHANCE_COEFFICIENT * MMOCore.plugin.configManager.dropItemsChanceWeight* player.getStats().getStat("CHANCE"), 1.0 / 3.0)); } public abstract void collect(LootBuilder builder); diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/ConfigManager.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/ConfigManager.java index 7165a728..3dcb7c23 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/ConfigManager.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/ConfigManager.java @@ -26,7 +26,7 @@ public class ConfigManager { public String partyChatPrefix, noSkillBoundPlaceholder; public ChatColor staminaFull, staminaHalf, staminaEmpty; public long combatLogTimer, lootChestExpireTime, lootChestPlayerCooldown, globalSkillCooldown; - public double lootChestsChanceWeight, fishingDropsChanceWeight, partyMaxExpSplitRange; + public double lootChestsChanceWeight,dropItemsChanceWeight, fishingDropsChanceWeight, partyMaxExpSplitRange; public int maxPartyLevelDifference, maxBoundActiveSkills, maxBoundPassiveSkills, waypointWarpTime; private final FileConfiguration messages; @@ -111,6 +111,7 @@ public class ConfigManager { globalSkillCooldown = MMOCore.plugin.getConfig().getLong("global-skill-cooldown") * 50; noSkillBoundPlaceholder = getSimpleMessage("no-skill-placeholder").message(); lootChestsChanceWeight = MMOCore.plugin.getConfig().getDouble("chance-stat-weight.loot-chests"); + dropItemsChanceWeight = MMOCore.plugin.getConfig().getDouble("chance-stat-weight.drop-items"); fishingDropsChanceWeight = MMOCore.plugin.getConfig().getDouble("chance-stat-weight.fishing-drops"); maxPartyLevelDifference = MMOCore.plugin.getConfig().getInt("party.max-level-difference"); partyMaxExpSplitRange = MMOCore.plugin.getConfig().getDouble("party.max-exp-split-range"); diff --git a/MMOCore-Dist/src/main/resources/config.yml b/MMOCore-Dist/src/main/resources/config.yml index a6d6024c..cbdd6559 100644 --- a/MMOCore-Dist/src/main/resources/config.yml +++ b/MMOCore-Dist/src/main/resources/config.yml @@ -79,6 +79,7 @@ guild-plugin: mmocore chance-stat-weight: loot-chests: 1 fishing-drops: 1 + drop-items: 1 # Whether blocks generated with a "cobblegenerator" should # provide the player with experience points or not