From 25c71b68177f84c8dcc8c5aee9327640e84977c8 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Thu, 23 Jan 2020 00:11:34 +0000 Subject: [PATCH] Check previous classes as well, in case classes where skipped. --- .../data/xml/impl/SkillTreesData.java | 22 ++++++++++++++++++- .../data/xml/impl/SkillTreesData.java | 22 ++++++++++++++++++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java index da286bdc3b..25ae34789c 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java @@ -1463,7 +1463,8 @@ public class SkillTreesData implements IXmlReader public void cleanSkillUponChangeClass(PlayerInstance player) { - final ClassId currentClass = player.getClassId(); + ClassId currentClass = player.getClassId(); + for (Skill skill : player.getAllSkills()) { final int maxLvl = SkillData.getInstance().getMaxLevel(skill.getId()); @@ -1474,6 +1475,25 @@ public class SkillTreesData implements IXmlReader player.removeSkill(skill, true, true); } } + + // Check previous classes as well, in case classes where skipped. + while (currentClass.getParent() != null) + { + currentClass = currentClass.getParent(); + + final Set removedList = _removeSkillCache.get(currentClass); + if (removedList != null) + { + for (Integer skillId : removedList) + { + final int currentLevel = player.getSkillLevel(skillId); + if (currentLevel > 0) + { + player.removeSkill(SkillData.getInstance().getSkill(skillId, currentLevel)); + } + } + } + } } public boolean isAlchemySkill(int skillId, int skillLevel) diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java index adc2ddf1de..8797804c06 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java @@ -1449,7 +1449,8 @@ public class SkillTreesData implements IXmlReader public void cleanSkillUponChangeClass(PlayerInstance player) { - final ClassId currentClass = player.getClassId(); + ClassId currentClass = player.getClassId(); + for (Skill skill : player.getAllSkills()) { final int maxLvl = SkillData.getInstance().getMaxLevel(skill.getId()); @@ -1460,6 +1461,25 @@ public class SkillTreesData implements IXmlReader player.removeSkill(skill, true, true); } } + + // Check previous classes as well, in case classes where skipped. + while (currentClass.getParent() != null) + { + currentClass = currentClass.getParent(); + + final Set removedList = _removeSkillCache.get(currentClass); + if (removedList != null) + { + for (Integer skillId : removedList) + { + final int currentLevel = player.getSkillLevel(skillId); + if (currentLevel > 0) + { + player.removeSkill(SkillData.getInstance().getSkill(skillId, currentLevel)); + } + } + } + } } public boolean isAlchemySkill(int skillId, int skillLevel)