Fixing a bug where Lucky perk wasn't adding to success

This commit is contained in:
nossr50
2019-01-27 18:53:10 -08:00
parent 7b38658310
commit 5f39a7cb80
4 changed files with 41 additions and 2 deletions

View File

@ -41,7 +41,7 @@ public class ExcavationManager extends SkillManager {
for (ExcavationTreasure treasure : treasures) {
if (skillLevel >= treasure.getDropLevel()
&& RandomChanceUtil.checkRandomChanceExecutionSuccess(treasure.getDropChance())) {
&& RandomChanceUtil.checkRandomChanceExecutionSuccess(getPlayer(), PrimarySkillType.EXCAVATION, treasure.getDropChance())) {
xp += treasure.getXp();
Misc.dropItem(location, treasure.getDrop());
}

View File

@ -3,6 +3,7 @@ package com.gmail.nossr50.util.random;
import com.gmail.nossr50.config.AdvancedConfig;
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
import com.gmail.nossr50.datatypes.skills.SubSkillType;
import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.player.UserManager;
import org.bukkit.entity.Player;
@ -11,6 +12,7 @@ public class RandomChanceSkill implements RandomChanceExecution {
protected final PrimarySkillType primarySkillType;
protected final SubSkillType subSkillType;
protected final double probabilityCap;
protected final boolean isLucky;
private int skillLevel;
public RandomChanceSkill(Player player, SubSkillType subSkillType)
@ -23,6 +25,11 @@ public class RandomChanceSkill implements RandomChanceExecution {
this.skillLevel = UserManager.getPlayer(player).getSkillLevel(primarySkillType);
else
this.skillLevel = 0;
if(player != null)
isLucky = Permissions.lucky(player, primarySkillType);
else
isLucky = false;
}
public RandomChanceSkill(Player player, SubSkillType subSkillType, boolean hasCap)
@ -39,6 +46,11 @@ public class RandomChanceSkill implements RandomChanceExecution {
this.skillLevel = UserManager.getPlayer(player).getSkillLevel(primarySkillType);
else
this.skillLevel = 0;
if(player != null)
isLucky = Permissions.lucky(player, primarySkillType);
else
isLucky = false;
}
/**
@ -97,4 +109,8 @@ public class RandomChanceSkill implements RandomChanceExecution {
public double getProbabilityCap() {
return probabilityCap;
}
public boolean isLucky() {
return isLucky;
}
}

View File

@ -63,11 +63,13 @@ public class RandomChanceUtil
* Checks whether or not the random chance succeeds
* @return true if the random chance succeeds
*/
public static boolean checkRandomChanceExecutionSuccess(double chance)
public static boolean checkRandomChanceExecutionSuccess(Player player, PrimarySkillType primarySkillType, double chance)
{
//Check the odds
chance *= 100;
chance = addLuck(player, primarySkillType, chance);
/*
* Stuff like treasures can specify a drop chance from 0.05 to 100
* Because of that we need to use a large int bound and multiply the chance by 100
@ -143,6 +145,10 @@ public class RandomChanceUtil
//Get chance of success
chanceOfSuccess = getChanceOfSuccess(randomChance.getXPos(), maximumProbability, maximumBonusLevel);
}
//Add Luck
chanceOfSuccess = addLuck(randomChance.isLucky(), chanceOfSuccess);
return chanceOfSuccess;
}
@ -281,4 +287,20 @@ public class RandomChanceUtil
return displayValues;
}
public static double addLuck(Player player, PrimarySkillType primarySkillType, double chance)
{
if(Permissions.lucky(player, primarySkillType))
return chance * 1.333D;
else
return chance;
}
public static double addLuck(boolean isLucky, double chance)
{
if(isLucky)
return chance * 1.333D;
else
return chance;
}
}