mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-25 22:56:45 +01:00
Level Cap bugfixes and tweaks
This commit is contained in:
parent
e17afe31a5
commit
b479d45f14
@ -1,3 +1,12 @@
|
|||||||
|
Version 2.1.87
|
||||||
|
(Level caps are not on by default in mcMMO, this is something you can turn on)
|
||||||
|
|
||||||
|
Players who reach either the power level cap or skill level cap will now be informed that they have done so
|
||||||
|
XP Bars will no longer be sent to players who have reached the power level or skill level cap respectively
|
||||||
|
Level up messages will no longer be sent to players who have reached the power level or skill level cap respectively
|
||||||
|
Fixed a bug where mcMMO would send level up notifications to a player if the custom level up event from mcMMO was cancelled
|
||||||
|
New locale strings 'LevelCap.PowerLevel' & 'LevelCap.Skill'
|
||||||
|
|
||||||
Version 2.1.86
|
Version 2.1.86
|
||||||
Players will no longer be told they got a perfect result when salvaging if they are below max skill level
|
Players will no longer be told they got a perfect result when salvaging if they are below max skill level
|
||||||
Salvage results will now travel towards the player instead of moving in a random direction
|
Salvage results will now travel towards the player instead of moving in a random direction
|
||||||
|
@ -30,7 +30,7 @@ public class AddlevelsCommand extends ExperienceCommand {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
EventUtils.handleLevelChangeEvent(player, skill, value, xpRemoved, true, XPGainReason.COMMAND);
|
EventUtils.tryLevelChangeEvent(player, skill, value, xpRemoved, true, XPGainReason.COMMAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -36,7 +36,7 @@ public class MmoeditCommand extends ExperienceCommand {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
EventUtils.handleLevelChangeEventEdit(player, skill, value, xpRemoved, value > skillLevel, XPGainReason.COMMAND, skillLevel);
|
EventUtils.tryLevelEditEvent(player, skill, value, xpRemoved, value > skillLevel, XPGainReason.COMMAND, skillLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -126,7 +126,7 @@ public class SkillresetCommand implements TabExecutor {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
EventUtils.handleLevelChangeEvent(player, skill, levelsRemoved, xpRemoved, false, XPGainReason.COMMAND);
|
EventUtils.tryLevelChangeEvent(player, skill, levelsRemoved, xpRemoved, false, XPGainReason.COMMAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean permissionsCheckSelf(CommandSender sender) {
|
protected boolean permissionsCheckSelf(CommandSender sender) {
|
||||||
|
@ -41,6 +41,7 @@ import com.gmail.nossr50.skills.woodcutting.WoodcuttingManager;
|
|||||||
import com.gmail.nossr50.util.EventUtils;
|
import com.gmail.nossr50.util.EventUtils;
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
import com.gmail.nossr50.util.experience.ExperienceBarManager;
|
import com.gmail.nossr50.util.experience.ExperienceBarManager;
|
||||||
import com.gmail.nossr50.util.player.NotificationManager;
|
import com.gmail.nossr50.util.player.NotificationManager;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
@ -150,8 +151,15 @@ public class McMMOPlayer {
|
|||||||
experienceBarManager.hideExperienceBar(primarySkillType);
|
experienceBarManager.hideExperienceBar(primarySkillType);
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
public void processPostXpEvent(XPGainReason xpGainReason, PrimarySkillType primarySkillType, Plugin plugin, XPGainSource xpGainSource)
|
public void processPostXpEvent(PrimarySkillType primarySkillType, Plugin plugin, XPGainSource xpGainSource)
|
||||||
{
|
{
|
||||||
|
//Check if they've reached the power level cap just now
|
||||||
|
if(hasReachedPowerLevelCap()) {
|
||||||
|
NotificationManager.sendPlayerInformationChatOnly(player, "LevelCap.PowerLevel", String.valueOf(Config.getInstance().getPowerLevelCap()));
|
||||||
|
} else if(hasReachedLevelCap(primarySkillType)) {
|
||||||
|
NotificationManager.sendPlayerInformationChatOnly(player, "LevelCap.Skill", String.valueOf(Config.getInstance().getPowerLevelCap()), primarySkillType.getName());
|
||||||
|
}
|
||||||
|
|
||||||
//Updates from Party sources
|
//Updates from Party sources
|
||||||
if(xpGainSource == XPGainSource.PARTY_MEMBERS && !ExperienceConfig.getInstance().isPartyExperienceBarsEnabled())
|
if(xpGainSource == XPGainSource.PARTY_MEMBERS && !ExperienceConfig.getInstance().isPartyExperienceBarsEnabled())
|
||||||
return;
|
return;
|
||||||
@ -459,6 +467,31 @@ public class McMMOPlayer {
|
|||||||
return powerLevel;
|
return powerLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether or not a player is level capped
|
||||||
|
* If they are at the power level cap, this will return true, otherwise it checks their skill level
|
||||||
|
* @param primarySkillType
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean hasReachedLevelCap(PrimarySkillType primarySkillType) {
|
||||||
|
if(hasReachedPowerLevelCap())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if(getSkillLevel(primarySkillType) >= Config.getInstance().getLevelCap(primarySkillType))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether or not a player is power level capped
|
||||||
|
* Compares their power level total to the current set limit
|
||||||
|
* @return true if they have reached the power level cap
|
||||||
|
*/
|
||||||
|
public boolean hasReachedPowerLevelCap() {
|
||||||
|
return this.getPowerLevel() >= Config.getInstance().getPowerLevelCap();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Begins an experience gain. The amount will be affected by skill modifiers, global rate, perks, and may be shared with the party
|
* Begins an experience gain. The amount will be affected by skill modifiers, global rate, perks, and may be shared with the party
|
||||||
*
|
*
|
||||||
@ -549,8 +582,11 @@ public class McMMOPlayer {
|
|||||||
* @param primarySkillType The skill to check
|
* @param primarySkillType The skill to check
|
||||||
*/
|
*/
|
||||||
private void checkXp(PrimarySkillType primarySkillType, XPGainReason xpGainReason, XPGainSource xpGainSource) {
|
private void checkXp(PrimarySkillType primarySkillType, XPGainReason xpGainReason, XPGainSource xpGainSource) {
|
||||||
|
if(hasReachedLevelCap(primarySkillType))
|
||||||
|
return;
|
||||||
|
|
||||||
if (getSkillXpLevelRaw(primarySkillType) < getXpToLevel(primarySkillType)) {
|
if (getSkillXpLevelRaw(primarySkillType) < getXpToLevel(primarySkillType)) {
|
||||||
processPostXpEvent(xpGainReason, primarySkillType, mcMMO.p, xpGainSource);
|
processPostXpEvent(primarySkillType, mcMMO.p, xpGainSource);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -567,8 +603,7 @@ public class McMMOPlayer {
|
|||||||
levelsGained++;
|
levelsGained++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!EventUtils.handleLevelChangeEvent(player, primarySkillType, levelsGained, xpRemoved, true, xpGainReason)) {
|
if (EventUtils.tryLevelChangeEvent(player, primarySkillType, levelsGained, xpRemoved, true, xpGainReason)) {
|
||||||
processPostXpEvent(xpGainReason, primarySkillType, mcMMO.p, xpGainSource);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -583,7 +618,7 @@ public class McMMOPlayer {
|
|||||||
NotificationManager.sendPlayerLevelUpNotification(this, primarySkillType, levelsGained, profile.getSkillLevel(primarySkillType));
|
NotificationManager.sendPlayerLevelUpNotification(this, primarySkillType, levelsGained, profile.getSkillLevel(primarySkillType));
|
||||||
|
|
||||||
//UPDATE XP BARS
|
//UPDATE XP BARS
|
||||||
processPostXpEvent(xpGainReason, primarySkillType, mcMMO.p, xpGainSource);
|
processPostXpEvent(primarySkillType, mcMMO.p, xpGainSource);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -934,10 +969,6 @@ public class McMMOPlayer {
|
|||||||
return (int) (((deactivatedTimestamp + (PerksUtils.handleCooldownPerks(player, ability.getCooldown()) * Misc.TIME_CONVERSION_FACTOR)) - System.currentTimeMillis()) / Misc.TIME_CONVERSION_FACTOR);
|
return (int) (((deactivatedTimestamp + (PerksUtils.handleCooldownPerks(player, ability.getCooldown()) * Misc.TIME_CONVERSION_FACTOR)) - System.currentTimeMillis()) / Misc.TIME_CONVERSION_FACTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean hasReachedLevelCap(PrimarySkillType skill) {
|
|
||||||
return (skill.getMaxLevel() < getSkillLevel(skill) + 1) || (Config.getInstance().getPowerLevelCap() < getPowerLevel() + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* These functions are wrapped from PlayerProfile so that we don't always have to store it alongside the McMMOPlayer object.
|
* These functions are wrapped from PlayerProfile so that we don't always have to store it alongside the McMMOPlayer object.
|
||||||
*/
|
*/
|
||||||
|
@ -187,7 +187,7 @@ public class EventUtils {
|
|||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean handleLevelChangeEvent(Player player, PrimarySkillType skill, int levelsChanged, float xpRemoved, boolean isLevelUp, XPGainReason xpGainReason) {
|
public static boolean tryLevelChangeEvent(Player player, PrimarySkillType skill, int levelsChanged, float xpRemoved, boolean isLevelUp, XPGainReason xpGainReason) {
|
||||||
McMMOPlayerLevelChangeEvent event = isLevelUp ? new McMMOPlayerLevelUpEvent(player, skill, levelsChanged, xpGainReason) : new McMMOPlayerLevelDownEvent(player, skill, levelsChanged, xpGainReason);
|
McMMOPlayerLevelChangeEvent event = isLevelUp ? new McMMOPlayerLevelUpEvent(player, skill, levelsChanged, xpGainReason) : new McMMOPlayerLevelDownEvent(player, skill, levelsChanged, xpGainReason);
|
||||||
mcMMO.p.getServer().getPluginManager().callEvent(event);
|
mcMMO.p.getServer().getPluginManager().callEvent(event);
|
||||||
|
|
||||||
@ -200,10 +200,10 @@ public class EventUtils {
|
|||||||
profile.addXp(skill, xpRemoved);
|
profile.addXp(skill, xpRemoved);
|
||||||
}
|
}
|
||||||
|
|
||||||
return !isCancelled;
|
return isCancelled;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean handleLevelChangeEventEdit(Player player, PrimarySkillType skill, int levelsChanged, float xpRemoved, boolean isLevelUp, XPGainReason xpGainReason, int oldLevel) {
|
public static boolean tryLevelEditEvent(Player player, PrimarySkillType skill, int levelsChanged, float xpRemoved, boolean isLevelUp, XPGainReason xpGainReason, int oldLevel) {
|
||||||
McMMOPlayerLevelChangeEvent event = isLevelUp ? new McMMOPlayerLevelUpEvent(player, skill, levelsChanged - oldLevel, xpGainReason) : new McMMOPlayerLevelDownEvent(player, skill, levelsChanged, xpGainReason);
|
McMMOPlayerLevelChangeEvent event = isLevelUp ? new McMMOPlayerLevelUpEvent(player, skill, levelsChanged - oldLevel, xpGainReason) : new McMMOPlayerLevelDownEvent(player, skill, levelsChanged, xpGainReason);
|
||||||
mcMMO.p.getServer().getPluginManager().callEvent(event);
|
mcMMO.p.getServer().getPluginManager().callEvent(event);
|
||||||
|
|
||||||
@ -216,7 +216,7 @@ public class EventUtils {
|
|||||||
profile.addXp(skill, xpRemoved);
|
profile.addXp(skill, xpRemoved);
|
||||||
}
|
}
|
||||||
|
|
||||||
return !isCancelled;
|
return isCancelled;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1095,4 +1095,7 @@ Holiday.Anniversary=[[BLUE]]Happy {0} Year Anniversary!\n[[BLUE]]In honor of all
|
|||||||
#Reminder Messages
|
#Reminder Messages
|
||||||
Reminder.Squelched=[[GRAY]]Reminder: You are currently not receiving notifications from mcMMO, to enable notifications please run the /mcnotify command again. This is an automated hourly reminder.
|
Reminder.Squelched=[[GRAY]]Reminder: You are currently not receiving notifications from mcMMO, to enable notifications please run the /mcnotify command again. This is an automated hourly reminder.
|
||||||
#Locale
|
#Locale
|
||||||
Locale.Reloaded=[[GREEN]]Locale reloaded!
|
Locale.Reloaded=[[GREEN]]Locale reloaded!
|
||||||
|
#Player Leveling Stuff
|
||||||
|
LevelCap.PowerLevel=[[GOLD]]([[GREEN]]mcMMO[[GOLD]]) [[YELLOW]]You have reached the power level cap of [[RED]]{0}[[YELLOW]]. You will cease to level in skills from this point on.
|
||||||
|
LevelCap.Skill=[[GOLD]]([[GREEN]]mcMMO[[GOLD]]) [[YELLOW]]You have reached the level cap of [[RED]]{0}[[YELLOW]] for [[GOLD]]{1}[[YELLOW]]. You will cease to level in this skill from this point on.
|
Loading…
Reference in New Issue
Block a user