Removing unlearn skills when auto skill learning.
This commit is contained in:
@@ -1156,6 +1156,66 @@ public final class SkillTreesData implements IXmlReader
|
|||||||
return sl;
|
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.
|
* Gets the transform skill.
|
||||||
* @param id the transformation skill Id
|
* @param id the transformation skill Id
|
||||||
|
@@ -2619,7 +2619,7 @@ public final class L2PcInstance extends L2Playable
|
|||||||
public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet)
|
public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet)
|
||||||
{
|
{
|
||||||
int skillCounter = 0;
|
int skillCounter = 0;
|
||||||
// Get available skills
|
// Get available skills.
|
||||||
Collection<Skill> skills = SkillTreesData.getInstance().getAllAvailableSkills(this, getClassId(), includedByFs, includeAutoGet);
|
Collection<Skill> skills = SkillTreesData.getInstance().getAllAvailableSkills(this, getClassId(), includedByFs, includeAutoGet);
|
||||||
List<Skill> skillsForStore = new ArrayList<>();
|
List<Skill> skillsForStore = new ArrayList<>();
|
||||||
|
|
||||||
@@ -2635,7 +2635,7 @@ public final class L2PcInstance extends L2Playable
|
|||||||
skillCounter++;
|
skillCounter++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// fix when learning toggle skills
|
// Fix when learning toggle skills.
|
||||||
if (sk.isToggle() && isAffectedBySkill(sk.getId()))
|
if (sk.isToggle() && isAffectedBySkill(sk.getId()))
|
||||||
{
|
{
|
||||||
stopSkillEffects(true, sk.getId());
|
stopSkillEffects(true, sk.getId());
|
||||||
@@ -2645,6 +2645,24 @@ public final class L2PcInstance extends L2Playable
|
|||||||
skillsForStore.add(sk);
|
skillsForStore.add(sk);
|
||||||
}
|
}
|
||||||
storeSkills(skillsForStore, -1);
|
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))
|
if (Config.AUTO_LEARN_SKILLS && (skillCounter > 0))
|
||||||
{
|
{
|
||||||
sendMessage("You have learned " + skillCounter + " new skills.");
|
sendMessage("You have learned " + skillCounter + " new skills.");
|
||||||
@@ -2657,7 +2675,7 @@ public final class L2PcInstance extends L2Playable
|
|||||||
*/
|
*/
|
||||||
public void giveAvailableAutoGetSkills()
|
public void giveAvailableAutoGetSkills()
|
||||||
{
|
{
|
||||||
// Get available skills
|
// Get available skills.
|
||||||
final List<L2SkillLearn> autoGetSkills = SkillTreesData.getInstance().getAvailableAutoGetSkills(this);
|
final List<L2SkillLearn> autoGetSkills = SkillTreesData.getInstance().getAvailableAutoGetSkills(this);
|
||||||
final SkillData st = SkillData.getInstance();
|
final SkillData st = SkillData.getInstance();
|
||||||
Skill skill;
|
Skill skill;
|
||||||
|
Reference in New Issue
Block a user