From 01cc9a9e1761ebac1627f8e8811d32bda6c78c76 Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Thu, 5 Nov 2015 13:26:36 +0000 Subject: [PATCH] Removing unlearn skills when auto skill learning. --- .../data/xml/impl/SkillTreesData.java | 60 +++++++++++++++++++ .../model/actor/instance/L2PcInstance.java | 24 +++++++- 2 files changed, 81 insertions(+), 3 deletions(-) diff --git a/trunk/java/com/l2jserver/gameserver/data/xml/impl/SkillTreesData.java b/trunk/java/com/l2jserver/gameserver/data/xml/impl/SkillTreesData.java index 4170c52040..c29b4639f5 100644 --- a/trunk/java/com/l2jserver/gameserver/data/xml/impl/SkillTreesData.java +++ b/trunk/java/com/l2jserver/gameserver/data/xml/impl/SkillTreesData.java @@ -1156,6 +1156,66 @@ public final class SkillTreesData implements IXmlReader return sl; } + /** + * Crude method that returns SkillLearn without client skillType info. + * @param id the skill Id + * @param lvl the skill level + * @param player the player learning the skill + * @return the skill learn for the specified parameters + */ + public L2SkillLearn getSkillLearn(int id, int lvl, L2PcInstance player) + { + if (getClassSkill(id, lvl, player.getLearningClass()) != null) + { + return getClassSkill(id, lvl, player.getLearningClass()); + } + else if (getTransformSkill(id, lvl) != null) + { + return getTransformSkill(id, lvl); + } + else if (getFishingSkill(id, lvl) != null) + { + return getFishingSkill(id, lvl); + } + else if (getPledgeSkill(id, lvl) != null) + { + return getPledgeSkill(id, lvl); + } + else if (getSubPledgeSkill(id, lvl) != null) + { + return getSubPledgeSkill(id, lvl); + } + else if (getTransferSkill(id, lvl, player.getClassId()) != null) + { + return getTransferSkill(id, lvl, player.getClassId()); + } + else if (getSubClassSkill(id, lvl) != null) + { + return getSubClassSkill(id, lvl); + } + else if (getCollectSkill(id, lvl) != null) + { + return getCollectSkill(id, lvl); + } + else if (getRevelationSkill(SubclassType.BASECLASS, id, lvl) != null) + { + return getRevelationSkill(SubclassType.BASECLASS, id, lvl); + } + else if (getRevelationSkill(SubclassType.DUALCLASS, id, lvl) != null) + { + return getRevelationSkill(SubclassType.DUALCLASS, id, lvl); + } + else if (getAlchemySkill(id, lvl) != null) + { + return getAlchemySkill(id, lvl); + } + else if (getDualClassSkill(id, lvl) != null) + { + return getDualClassSkill(id, lvl); + } + return null; + } + /** * Gets the transform skill. * @param id the transformation skill Id diff --git a/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java b/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java index fa23ca6227..0d7b7c9b26 100644 --- a/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java +++ b/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java @@ -2619,7 +2619,7 @@ public final class L2PcInstance extends L2Playable public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet) { int skillCounter = 0; - // Get available skills + // Get available skills. Collection skills = SkillTreesData.getInstance().getAllAvailableSkills(this, getClassId(), includedByFs, includeAutoGet); List skillsForStore = new ArrayList<>(); @@ -2635,7 +2635,7 @@ public final class L2PcInstance extends L2Playable skillCounter++; } - // fix when learning toggle skills + // Fix when learning toggle skills. if (sk.isToggle() && isAffectedBySkill(sk.getId())) { stopSkillEffects(true, sk.getId()); @@ -2645,6 +2645,24 @@ public final class L2PcInstance extends L2Playable skillsForStore.add(sk); } storeSkills(skillsForStore, -1); + + // Remove skills if required. + for (Skill sk : getSkills().values()) + { + final L2SkillLearn s = SkillTreesData.getInstance().getSkillLearn(sk.getId(), sk.getLevel(), this); + if ((s != null) && !s.getRemoveSkills().isEmpty()) + { + s.getRemoveSkills().forEach(skillId -> + { + final Skill skillToRemove = getKnownSkill(skillId); + if (skillToRemove != null) + { + removeSkill(skillToRemove); + } + }); + } + } + if (Config.AUTO_LEARN_SKILLS && (skillCounter > 0)) { sendMessage("You have learned " + skillCounter + " new skills."); @@ -2657,7 +2675,7 @@ public final class L2PcInstance extends L2Playable */ public void giveAvailableAutoGetSkills() { - // Get available skills + // Get available skills. final List autoGetSkills = SkillTreesData.getInstance().getAvailableAutoGetSkills(this); final SkillData st = SkillData.getInstance(); Skill skill;