Addition of cleanSkillUponChangeClass checkPreviousClasses parameter.

This commit is contained in:
MobiusDevelopment
2020-01-24 15:25:27 +00:00
parent c043af33f8
commit 44f5fbdcef
12 changed files with 37 additions and 33 deletions

View File

@@ -199,7 +199,7 @@ public class Joachim extends AbstractNpcAI
player.setActiveClass(1); player.setActiveClass(1);
player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED));
player.sendPacket(getNpcHtmlMessage(player, npc, "34513-07.html")); player.sendPacket(getNpcHtmlMessage(player, npc, "34513-07.html"));
SkillTreesData.getInstance().cleanSkillUponChangeClass(player); SkillTreesData.getInstance().cleanSkillUponChangeClass(player, false);
player.sendPacket(new AcquireSkillList(player)); player.sendPacket(new AcquireSkillList(player));
player.sendSkillList(); player.sendSkillList();
player.broadcastUserInfo(); player.broadcastUserInfo();

View File

@@ -305,7 +305,7 @@ public class AwakeningMaster extends AbstractNpcAI
} }
giveItems(player, player.isDualClassActive() ? CHAOS_POMANDER_DUAL_CLASS : CHAOS_POMANDER, 2); giveItems(player, player.isDualClassActive() ? CHAOS_POMANDER_DUAL_CLASS : CHAOS_POMANDER, 2);
SkillTreesData.getInstance().cleanSkillUponChangeClass(player); SkillTreesData.getInstance().cleanSkillUponChangeClass(player, false);
for (SkillLearn skill : SkillTreesData.getInstance().getRaceSkillTree(player.getRace())) for (SkillLearn skill : SkillTreesData.getInstance().getRaceSkillTree(player.getRace()))
{ {
player.addSkill(SkillData.getInstance().getSkill(skill.getSkillId(), skill.getSkillLevel()), true); player.addSkill(SkillData.getInstance().getSkill(skill.getSkillId(), skill.getSkillLevel()), true);

View File

@@ -149,7 +149,7 @@ public class Hardin extends AbstractNpcAI
player.setBaseClass(player.getActiveClass()); player.setBaseClass(player.getActiveClass());
} }
// Adjustments // Adjustments
SkillTreesData.getInstance().cleanSkillUponChangeClass(player); SkillTreesData.getInstance().cleanSkillUponChangeClass(player, false);
for (SkillLearn skill : SkillTreesData.getInstance().getRaceSkillTree(player.getRace())) for (SkillLearn skill : SkillTreesData.getInstance().getRaceSkillTree(player.getRace()))
{ {
player.addSkill(SkillData.getInstance().getSkill(skill.getSkillId(), skill.getSkillLevel()), true); player.addSkill(SkillData.getInstance().getSkill(skill.getSkillId(), skill.getSkillLevel()), true);

View File

@@ -601,7 +601,7 @@ public class Raina extends AbstractNpcAI
player.setActiveClass(classIndex); player.setActiveClass(classIndex);
player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED));
player.sendPacket(getNpcHtmlMessage(player, npc, "reawakenSuccess.html")); player.sendPacket(getNpcHtmlMessage(player, npc, "reawakenSuccess.html"));
SkillTreesData.getInstance().cleanSkillUponChangeClass(player); SkillTreesData.getInstance().cleanSkillUponChangeClass(player, false);
player.sendPacket(new AcquireSkillList(player)); player.sendPacket(new AcquireSkillList(player));
player.sendSkillList(); player.sendSkillList();
giveItems(player, getCloakId(player), 1); giveItems(player, getCloakId(player), 1);
@@ -640,7 +640,7 @@ public class Raina extends AbstractNpcAI
player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.NEW_SLOT_USED)); player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.NEW_SLOT_USED));
player.sendPacket(SystemMessageId.THE_NEW_SUBCLASS_S1_HAS_BEEN_ADDED_CONGRATS); player.sendPacket(SystemMessageId.THE_NEW_SUBCLASS_S1_HAS_BEEN_ADDED_CONGRATS);
player.sendPacket(getNpcHtmlMessage(player, npc, "addSuccess.html")); player.sendPacket(getNpcHtmlMessage(player, npc, "addSuccess.html"));
SkillTreesData.getInstance().cleanSkillUponChangeClass(player); SkillTreesData.getInstance().cleanSkillUponChangeClass(player, false);
player.sendPacket(new AcquireSkillList(player)); player.sendPacket(new AcquireSkillList(player));
player.sendSkillList(); player.sendSkillList();
giveItems(player, getPowerItemId(player), 1); giveItems(player, getPowerItemId(player), 1);

View File

@@ -421,7 +421,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader
{ {
player.setBaseClass(player.getActiveClass()); player.setBaseClass(player.getActiveClass());
} }
SkillTreesData.getInstance().cleanSkillUponChangeClass(player); SkillTreesData.getInstance().cleanSkillUponChangeClass(player, false);
if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP)) if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP))
{ {
for (SkillLearn skill : SkillTreesData.getInstance().getRaceSkillTree(player.getRace())) for (SkillLearn skill : SkillTreesData.getInstance().getRaceSkillTree(player.getRace()))
@@ -852,7 +852,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader
{ {
player.setBaseClass(player.getActiveClass()); player.setBaseClass(player.getActiveClass());
} }
SkillTreesData.getInstance().cleanSkillUponChangeClass(player); SkillTreesData.getInstance().cleanSkillUponChangeClass(player, false);
if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP)) if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP))
{ {
for (SkillLearn skill : SkillTreesData.getInstance().getRaceSkillTree(player.getRace())) for (SkillLearn skill : SkillTreesData.getInstance().getRaceSkillTree(player.getRace()))

View File

@@ -421,7 +421,7 @@ public class AdminEditChar implements IAdminCommandHandler
} }
final String newclass = ClassListData.getInstance().getClass(player.getClassId()).getClassName(); final String newclass = ClassListData.getInstance().getClass(player.getClassId()).getClassName();
SkillTreesData.getInstance().cleanSkillUponChangeClass(player); SkillTreesData.getInstance().cleanSkillUponChangeClass(player, true);
if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP)) if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP))
{ {
for (SkillLearn skill : SkillTreesData.getInstance().getRaceSkillTree(player.getRace())) for (SkillLearn skill : SkillTreesData.getInstance().getRaceSkillTree(player.getRace()))

View File

@@ -1463,7 +1463,7 @@ public class SkillTreesData implements IXmlReader
return result; return result;
} }
public void cleanSkillUponChangeClass(PlayerInstance player) public void cleanSkillUponChangeClass(PlayerInstance player, boolean checkPreviousClasses)
{ {
ClassId currentClass = player.getClassId(); ClassId currentClass = player.getClassId();
@@ -1499,21 +1499,23 @@ public class SkillTreesData implements IXmlReader
} }
// Check previous classes as well, in case classes where skipped. // Check previous classes as well, in case classes where skipped.
while (currentClass.getParent() != null) if (checkPreviousClasses)
{ {
currentClass = currentClass.getParent(); while (currentClass.getParent() != null)
final Set<Integer> removedList = _removeSkillCache.get(currentClass);
if (removedList != null)
{ {
for (Integer skillId : removedList) final Set<Integer> removedList = _removeSkillCache.get(currentClass);
if (removedList != null)
{ {
final int currentLevel = player.getSkillLevel(skillId); for (Integer skillId : removedList)
if (currentLevel > 0)
{ {
player.removeSkill(SkillData.getInstance().getSkill(skillId, currentLevel)); final int currentLevel = player.getSkillLevel(skillId);
if (currentLevel > 0)
{
player.removeSkill(SkillData.getInstance().getSkill(skillId, currentLevel));
}
} }
} }
currentClass = currentClass.getParent();
} }
} }
} }

View File

@@ -101,7 +101,7 @@ public class ExRequestClassChange implements IClientIncomingPacket
{ {
player.setBaseClass(player.getActiveClass()); player.setBaseClass(player.getActiveClass());
} }
SkillTreesData.getInstance().cleanSkillUponChangeClass(player); SkillTreesData.getInstance().cleanSkillUponChangeClass(player, false);
if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP)) if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP))
{ {
for (SkillLearn skill : SkillTreesData.getInstance().getRaceSkillTree(player.getRace())) for (SkillLearn skill : SkillTreesData.getInstance().getRaceSkillTree(player.getRace()))

View File

@@ -387,7 +387,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader
{ {
player.setBaseClass(player.getActiveClass()); player.setBaseClass(player.getActiveClass());
} }
SkillTreesData.getInstance().cleanSkillUponChangeClass(player); SkillTreesData.getInstance().cleanSkillUponChangeClass(player, false);
// if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP)) // if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP))
// { // {
// for (SkillLearn skill : SkillTreesData.getInstance().getRaceSkillTree(player.getRace())) // for (SkillLearn skill : SkillTreesData.getInstance().getRaceSkillTree(player.getRace()))
@@ -788,7 +788,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader
{ {
player.setBaseClass(player.getActiveClass()); player.setBaseClass(player.getActiveClass());
} }
SkillTreesData.getInstance().cleanSkillUponChangeClass(player); SkillTreesData.getInstance().cleanSkillUponChangeClass(player, false);
// if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP)) // if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP))
// { // {
// for (SkillLearn skill : SkillTreesData.getInstance().getRaceSkillTree(player.getRace())) // for (SkillLearn skill : SkillTreesData.getInstance().getRaceSkillTree(player.getRace()))

View File

@@ -414,7 +414,7 @@ public class AdminEditChar implements IAdminCommandHandler
} }
final String newclass = ClassListData.getInstance().getClass(player.getClassId()).getClassName(); final String newclass = ClassListData.getInstance().getClass(player.getClassId()).getClassName();
SkillTreesData.getInstance().cleanSkillUponChangeClass(player); SkillTreesData.getInstance().cleanSkillUponChangeClass(player, true);
player.store(false); player.store(false);
player.broadcastUserInfo(); player.broadcastUserInfo();
player.sendSkillList(); player.sendSkillList();

View File

@@ -1449,7 +1449,7 @@ public class SkillTreesData implements IXmlReader
return result; return result;
} }
public void cleanSkillUponChangeClass(PlayerInstance player) public void cleanSkillUponChangeClass(PlayerInstance player, boolean checkPreviousClasses)
{ {
ClassId currentClass = player.getClassId(); ClassId currentClass = player.getClassId();
@@ -1485,21 +1485,23 @@ public class SkillTreesData implements IXmlReader
} }
// Check previous classes as well, in case classes where skipped. // Check previous classes as well, in case classes where skipped.
while (currentClass.getParent() != null) if (checkPreviousClasses)
{ {
currentClass = currentClass.getParent(); while (currentClass.getParent() != null)
final Set<Integer> removedList = _removeSkillCache.get(currentClass);
if (removedList != null)
{ {
for (Integer skillId : removedList) final Set<Integer> removedList = _removeSkillCache.get(currentClass);
if (removedList != null)
{ {
final int currentLevel = player.getSkillLevel(skillId); for (Integer skillId : removedList)
if (currentLevel > 0)
{ {
player.removeSkill(SkillData.getInstance().getSkill(skillId, currentLevel)); final int currentLevel = player.getSkillLevel(skillId);
if (currentLevel > 0)
{
player.removeSkill(SkillData.getInstance().getSkill(skillId, currentLevel));
}
} }
} }
currentClass = currentClass.getParent();
} }
} }
} }

View File

@@ -94,7 +94,7 @@ public class ExRequestClassChange implements IClientIncomingPacket
{ {
player.setBaseClass(player.getActiveClass()); player.setBaseClass(player.getActiveClass());
} }
SkillTreesData.getInstance().cleanSkillUponChangeClass(player); SkillTreesData.getInstance().cleanSkillUponChangeClass(player, false);
if (Config.AUTO_LEARN_SKILLS) if (Config.AUTO_LEARN_SKILLS)
{ {
player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true); player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true);