Addition of cleanSkillUponChangeClass checkPreviousClasses parameter.
This commit is contained in:
@@ -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();
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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()))
|
||||||
|
@@ -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()))
|
||||||
|
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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()))
|
||||||
|
@@ -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()))
|
||||||
|
@@ -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();
|
||||||
|
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user