Clean skills upon change class.

This commit is contained in:
MobiusDevelopment
2020-01-22 23:36:45 +00:00
parent 1d3d1cfac6
commit 4af5183baf
8 changed files with 14 additions and 12 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().cleanSkillUponAwakening(player); SkillTreesData.getInstance().cleanSkillUponChangeClass(player);
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().cleanSkillUponAwakening(player); SkillTreesData.getInstance().cleanSkillUponChangeClass(player);
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().cleanSkillUponAwakening(player); SkillTreesData.getInstance().cleanSkillUponChangeClass(player);
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

@@ -278,7 +278,8 @@ public class Raina extends AbstractNpcAI
} }
case "addDualClass": case "addDualClass":
{ {
if (player.getRace() != Race.ERTHEIA){ if (player.getRace() != Race.ERTHEIA)
{
htmltext = "notImplemented.html"; htmltext = "notImplemented.html";
} }
// TODO: Maybe html is different when you have 85lvl but you haven't completed quest // TODO: Maybe html is different when you have 85lvl but you haven't completed quest
@@ -600,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().cleanSkillUponAwakening(player); SkillTreesData.getInstance().cleanSkillUponChangeClass(player);
player.sendPacket(new AcquireSkillList(player)); player.sendPacket(new AcquireSkillList(player));
player.sendSkillList(); player.sendSkillList();
giveItems(player, getCloakId(player), 1); giveItems(player, getCloakId(player), 1);
@@ -639,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().cleanSkillUponAwakening(player); SkillTreesData.getInstance().cleanSkillUponChangeClass(player);
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,9 +421,9 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader
{ {
player.setBaseClass(player.getActiveClass()); player.setBaseClass(player.getActiveClass());
} }
SkillTreesData.getInstance().cleanSkillUponChangeClass(player);
if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP)) if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP))
{ {
SkillTreesData.getInstance().cleanSkillUponAwakening(player);
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);
@@ -852,9 +852,9 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader
{ {
player.setBaseClass(player.getActiveClass()); player.setBaseClass(player.getActiveClass());
} }
SkillTreesData.getInstance().cleanSkillUponChangeClass(player);
if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP)) if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP))
{ {
SkillTreesData.getInstance().cleanSkillUponAwakening(player);
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

@@ -421,9 +421,9 @@ 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);
if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP)) if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP))
{ {
SkillTreesData.getInstance().cleanSkillUponAwakening(player);
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

@@ -1461,14 +1461,15 @@ public class SkillTreesData implements IXmlReader
return result; return result;
} }
public void cleanSkillUponAwakening(PlayerInstance player) public void cleanSkillUponChangeClass(PlayerInstance player)
{ {
final ClassId currentClass = player.getClassId();
for (Skill skill : player.getAllSkills()) for (Skill skill : player.getAllSkills())
{ {
final int maxLvl = SkillData.getInstance().getMaxLevel(skill.getId()); final int maxLvl = SkillData.getInstance().getMaxLevel(skill.getId());
final long hashCode = SkillData.getSkillHashCode(skill.getId(), maxLvl); final long hashCode = SkillData.getSkillHashCode(skill.getId(), maxLvl);
if (!isCurrentClassSkillNoParent(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel())) if (!isCurrentClassSkillNoParent(currentClass, hashCode) && !isRemoveSkill(currentClass, skill.getId()) && !isAwakenSaveSkill(currentClass, skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel()))
{ {
player.removeSkill(skill, true, true); player.removeSkill(skill, true, true);
} }

View File

@@ -101,9 +101,9 @@ public class ExRequestClassChange implements IClientIncomingPacket
{ {
player.setBaseClass(player.getActiveClass()); player.setBaseClass(player.getActiveClass());
} }
SkillTreesData.getInstance().cleanSkillUponChangeClass(player);
if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP)) if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP))
{ {
SkillTreesData.getInstance().cleanSkillUponAwakening(player);
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);