From a82cb9c71979d3b8f5fc04cfc5a7ec502568d314 Mon Sep 17 00:00:00 2001 From: MedicOP Date: Sun, 3 Feb 2019 13:57:36 +0100 Subject: [PATCH] Don't make skill level lower if they already have it (#385) --- src/scripting/AbstractPlayerInteraction.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/scripting/AbstractPlayerInteraction.java b/src/scripting/AbstractPlayerInteraction.java index 10984129e1..ac00770da4 100644 --- a/src/scripting/AbstractPlayerInteraction.java +++ b/src/scripting/AbstractPlayerInteraction.java @@ -29,6 +29,7 @@ import java.util.Collections; import java.util.LinkedList; import java.util.List; +import client.Skill; import net.server.Server; import net.server.channel.Channel; import net.server.guild.MapleGuild; @@ -843,7 +844,22 @@ public class AbstractPlayerInteraction { } public void teachSkill(int skillid, byte level, byte masterLevel, long expiration) { - getPlayer().changeSkillLevel(SkillFactory.getSkill(skillid), level, masterLevel, expiration); + teachSkill(skillid, level, masterLevel, expiration, false); + } + + public void teachSkill(int skillid, byte level, byte masterLevel, long expiration, boolean force) { + Skill skill = SkillFactory.getSkill(skillid); + + if (!force && level > -1) { + MapleCharacter.SkillEntry skillEntry = getPlayer().getSkills().get(skill); + + if (skillEntry != null) { + getPlayer().changeSkillLevel(skill, (byte) Math.max(skillEntry.skillevel, level), Math.max(skillEntry.masterlevel, masterLevel), expiration == -1 ? -1 : Math.max(skillEntry.expiration, expiration)); + return; + } + } + + getPlayer().changeSkillLevel(skill, level, masterLevel, expiration); } public void removeEquipFromSlot(short slot) {