Fixed restoration of dualclass skills.
This commit is contained in:
+1
@@ -171,6 +171,7 @@ public class Hardin extends AbstractNpcAI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
player.restoreDualSkills();
|
||||||
player.store(false);
|
player.store(false);
|
||||||
player.broadcastUserInfo();
|
player.broadcastUserInfo();
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
|
|||||||
+2
@@ -609,6 +609,7 @@ public class Raina extends AbstractNpcAI
|
|||||||
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"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
giveItems(player, getCloakId(player), 1);
|
giveItems(player, getCloakId(player), 1);
|
||||||
@@ -644,6 +645,7 @@ public class Raina extends AbstractNpcAI
|
|||||||
player.sendPacket(SystemMessageId.THE_NEW_SUBCLASS_HAS_BEEN_ADDED);
|
player.sendPacket(SystemMessageId.THE_NEW_SUBCLASS_HAS_BEEN_ADDED);
|
||||||
player.sendPacket(getNpcHtmlMessage(player, npc, "addSuccess.html"));
|
player.sendPacket(getNpcHtmlMessage(player, npc, "addSuccess.html"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
giveItems(player, getPowerItemId(player), 1);
|
giveItems(player, getPowerItemId(player), 1);
|
||||||
|
|||||||
+34
-9
@@ -7393,18 +7393,19 @@ public class PlayerInstance extends Playable
|
|||||||
storeSkill(newSkill, oldSkill, -1);
|
storeSkill(newSkill, oldSkill, -1);
|
||||||
if (CommonUtil.contains(DUAL_CLASS_SKILLS, newSkill.getId()))
|
if (CommonUtil.contains(DUAL_CLASS_SKILLS, newSkill.getId()))
|
||||||
{
|
{
|
||||||
final List<Skill> dualClassSkills = getVariables().getList(KNOWN_DUAL_SKILLS_VAR, Skill.class, new ArrayList<>());
|
// Old system compatibility.
|
||||||
for (Skill dualSkill : dualClassSkills)
|
if (getVariables().getString(KNOWN_DUAL_SKILLS_VAR, "").contains("("))
|
||||||
{
|
{
|
||||||
if (dualSkill.getId() == newSkill.getId())
|
getVariables().set(KNOWN_DUAL_SKILLS_VAR, "");
|
||||||
|
for (int skillId : DUAL_CLASS_SKILLS)
|
||||||
{
|
{
|
||||||
dualClassSkills.remove(dualSkill);
|
removeSkill(skillId);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dualClassSkills.add(newSkill);
|
|
||||||
getVariables().set(KNOWN_DUAL_SKILLS_VAR, dualClassSkills);
|
|
||||||
|
|
||||||
|
final Map<Integer, Integer> knownSkills = getVariables().getIntegerMap(KNOWN_DUAL_SKILLS_VAR);
|
||||||
|
knownSkills.put(newSkill.getId(), newSkill.getLevel());
|
||||||
|
getVariables().setIntegerMap(KNOWN_DUAL_SKILLS_VAR, knownSkills);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return oldSkill;
|
return oldSkill;
|
||||||
@@ -7599,11 +7600,35 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Learn known dualclass skills.
|
// Learn known dualclass skills.
|
||||||
|
restoreDualSkills();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Learn known dualclass skills.
|
||||||
|
*/
|
||||||
|
public void restoreDualSkills()
|
||||||
|
{
|
||||||
if (isDualClassActive() || !isSubClassActive())
|
if (isDualClassActive() || !isSubClassActive())
|
||||||
{
|
{
|
||||||
final List<Skill> dualClassSkills = new ArrayList<>(getVariables().getList(KNOWN_DUAL_SKILLS_VAR, Skill.class, Collections.emptyList()));
|
// Old system compatibility.
|
||||||
for (Skill skill : dualClassSkills)
|
if (getVariables().getString(KNOWN_DUAL_SKILLS_VAR, "").contains("("))
|
||||||
{
|
{
|
||||||
|
getVariables().set(KNOWN_DUAL_SKILLS_VAR, "");
|
||||||
|
for (int skillId : DUAL_CLASS_SKILLS)
|
||||||
|
{
|
||||||
|
removeSkill(skillId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final Map<Integer, Integer> knownSkills = getVariables().getIntegerMap(KNOWN_DUAL_SKILLS_VAR);
|
||||||
|
if (knownSkills.isEmpty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Entry<Integer, Integer> entry : knownSkills.entrySet())
|
||||||
|
{
|
||||||
|
final Skill skill = SkillData.getInstance().getSkill(entry.getKey(), entry.getValue());
|
||||||
removeSkill(skill);
|
removeSkill(skill);
|
||||||
addSkill(skill, true);
|
addSkill(skill, true);
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+1
@@ -171,6 +171,7 @@ public class Hardin extends AbstractNpcAI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
player.restoreDualSkills();
|
||||||
player.store(false);
|
player.store(false);
|
||||||
player.broadcastUserInfo();
|
player.broadcastUserInfo();
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
|
|||||||
+2
@@ -609,6 +609,7 @@ public class Raina extends AbstractNpcAI
|
|||||||
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"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
giveItems(player, getCloakId(player), 1);
|
giveItems(player, getCloakId(player), 1);
|
||||||
@@ -644,6 +645,7 @@ public class Raina extends AbstractNpcAI
|
|||||||
player.sendPacket(SystemMessageId.THE_NEW_SUBCLASS_HAS_BEEN_ADDED);
|
player.sendPacket(SystemMessageId.THE_NEW_SUBCLASS_HAS_BEEN_ADDED);
|
||||||
player.sendPacket(getNpcHtmlMessage(player, npc, "addSuccess.html"));
|
player.sendPacket(getNpcHtmlMessage(player, npc, "addSuccess.html"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
giveItems(player, getPowerItemId(player), 1);
|
giveItems(player, getPowerItemId(player), 1);
|
||||||
|
|||||||
+34
-9
@@ -7396,18 +7396,19 @@ public class PlayerInstance extends Playable
|
|||||||
storeSkill(newSkill, oldSkill, -1);
|
storeSkill(newSkill, oldSkill, -1);
|
||||||
if (CommonUtil.contains(DUAL_CLASS_SKILLS, newSkill.getId()))
|
if (CommonUtil.contains(DUAL_CLASS_SKILLS, newSkill.getId()))
|
||||||
{
|
{
|
||||||
final List<Skill> dualClassSkills = getVariables().getList(KNOWN_DUAL_SKILLS_VAR, Skill.class, new ArrayList<>());
|
// Old system compatibility.
|
||||||
for (Skill dualSkill : dualClassSkills)
|
if (getVariables().getString(KNOWN_DUAL_SKILLS_VAR, "").contains("("))
|
||||||
{
|
{
|
||||||
if (dualSkill.getId() == newSkill.getId())
|
getVariables().set(KNOWN_DUAL_SKILLS_VAR, "");
|
||||||
|
for (int skillId : DUAL_CLASS_SKILLS)
|
||||||
{
|
{
|
||||||
dualClassSkills.remove(dualSkill);
|
removeSkill(skillId);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dualClassSkills.add(newSkill);
|
|
||||||
getVariables().set(KNOWN_DUAL_SKILLS_VAR, dualClassSkills);
|
|
||||||
|
|
||||||
|
final Map<Integer, Integer> knownSkills = getVariables().getIntegerMap(KNOWN_DUAL_SKILLS_VAR);
|
||||||
|
knownSkills.put(newSkill.getId(), newSkill.getLevel());
|
||||||
|
getVariables().setIntegerMap(KNOWN_DUAL_SKILLS_VAR, knownSkills);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return oldSkill;
|
return oldSkill;
|
||||||
@@ -7602,11 +7603,35 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Learn known dualclass skills.
|
// Learn known dualclass skills.
|
||||||
|
restoreDualSkills();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Learn known dualclass skills.
|
||||||
|
*/
|
||||||
|
public void restoreDualSkills()
|
||||||
|
{
|
||||||
if (isDualClassActive() || !isSubClassActive())
|
if (isDualClassActive() || !isSubClassActive())
|
||||||
{
|
{
|
||||||
final List<Skill> dualClassSkills = new ArrayList<>(getVariables().getList(KNOWN_DUAL_SKILLS_VAR, Skill.class, Collections.emptyList()));
|
// Old system compatibility.
|
||||||
for (Skill skill : dualClassSkills)
|
if (getVariables().getString(KNOWN_DUAL_SKILLS_VAR, "").contains("("))
|
||||||
{
|
{
|
||||||
|
getVariables().set(KNOWN_DUAL_SKILLS_VAR, "");
|
||||||
|
for (int skillId : DUAL_CLASS_SKILLS)
|
||||||
|
{
|
||||||
|
removeSkill(skillId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final Map<Integer, Integer> knownSkills = getVariables().getIntegerMap(KNOWN_DUAL_SKILLS_VAR);
|
||||||
|
if (knownSkills.isEmpty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Entry<Integer, Integer> entry : knownSkills.entrySet())
|
||||||
|
{
|
||||||
|
final Skill skill = SkillData.getInstance().getSkill(entry.getKey(), entry.getValue());
|
||||||
removeSkill(skill);
|
removeSkill(skill);
|
||||||
addSkill(skill, true);
|
addSkill(skill, true);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
@@ -171,6 +171,7 @@ public class Hardin extends AbstractNpcAI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
player.restoreDualSkills();
|
||||||
player.store(false);
|
player.store(false);
|
||||||
player.broadcastUserInfo();
|
player.broadcastUserInfo();
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
|
|||||||
+2
@@ -609,6 +609,7 @@ public class Raina extends AbstractNpcAI
|
|||||||
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"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
giveItems(player, getCloakId(player), 1);
|
giveItems(player, getCloakId(player), 1);
|
||||||
@@ -644,6 +645,7 @@ public class Raina extends AbstractNpcAI
|
|||||||
player.sendPacket(SystemMessageId.THE_NEW_SUBCLASS_HAS_BEEN_ADDED);
|
player.sendPacket(SystemMessageId.THE_NEW_SUBCLASS_HAS_BEEN_ADDED);
|
||||||
player.sendPacket(getNpcHtmlMessage(player, npc, "addSuccess.html"));
|
player.sendPacket(getNpcHtmlMessage(player, npc, "addSuccess.html"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
giveItems(player, getPowerItemId(player), 1);
|
giveItems(player, getPowerItemId(player), 1);
|
||||||
|
|||||||
+34
-9
@@ -7398,18 +7398,19 @@ public class PlayerInstance extends Playable
|
|||||||
storeSkill(newSkill, oldSkill, -1);
|
storeSkill(newSkill, oldSkill, -1);
|
||||||
if (CommonUtil.contains(DUAL_CLASS_SKILLS, newSkill.getId()))
|
if (CommonUtil.contains(DUAL_CLASS_SKILLS, newSkill.getId()))
|
||||||
{
|
{
|
||||||
final List<Skill> dualClassSkills = getVariables().getList(KNOWN_DUAL_SKILLS_VAR, Skill.class, new ArrayList<>());
|
// Old system compatibility.
|
||||||
for (Skill dualSkill : dualClassSkills)
|
if (getVariables().getString(KNOWN_DUAL_SKILLS_VAR, "").contains("("))
|
||||||
{
|
{
|
||||||
if (dualSkill.getId() == newSkill.getId())
|
getVariables().set(KNOWN_DUAL_SKILLS_VAR, "");
|
||||||
|
for (int skillId : DUAL_CLASS_SKILLS)
|
||||||
{
|
{
|
||||||
dualClassSkills.remove(dualSkill);
|
removeSkill(skillId);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dualClassSkills.add(newSkill);
|
|
||||||
getVariables().set(KNOWN_DUAL_SKILLS_VAR, dualClassSkills);
|
|
||||||
|
|
||||||
|
final Map<Integer, Integer> knownSkills = getVariables().getIntegerMap(KNOWN_DUAL_SKILLS_VAR);
|
||||||
|
knownSkills.put(newSkill.getId(), newSkill.getLevel());
|
||||||
|
getVariables().setIntegerMap(KNOWN_DUAL_SKILLS_VAR, knownSkills);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return oldSkill;
|
return oldSkill;
|
||||||
@@ -7604,11 +7605,35 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Learn known dualclass skills.
|
// Learn known dualclass skills.
|
||||||
|
restoreDualSkills();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Learn known dualclass skills.
|
||||||
|
*/
|
||||||
|
public void restoreDualSkills()
|
||||||
|
{
|
||||||
if (isDualClassActive() || !isSubClassActive())
|
if (isDualClassActive() || !isSubClassActive())
|
||||||
{
|
{
|
||||||
final List<Skill> dualClassSkills = new ArrayList<>(getVariables().getList(KNOWN_DUAL_SKILLS_VAR, Skill.class, Collections.emptyList()));
|
// Old system compatibility.
|
||||||
for (Skill skill : dualClassSkills)
|
if (getVariables().getString(KNOWN_DUAL_SKILLS_VAR, "").contains("("))
|
||||||
{
|
{
|
||||||
|
getVariables().set(KNOWN_DUAL_SKILLS_VAR, "");
|
||||||
|
for (int skillId : DUAL_CLASS_SKILLS)
|
||||||
|
{
|
||||||
|
removeSkill(skillId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final Map<Integer, Integer> knownSkills = getVariables().getIntegerMap(KNOWN_DUAL_SKILLS_VAR);
|
||||||
|
if (knownSkills.isEmpty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Entry<Integer, Integer> entry : knownSkills.entrySet())
|
||||||
|
{
|
||||||
|
final Skill skill = SkillData.getInstance().getSkill(entry.getKey(), entry.getValue());
|
||||||
removeSkill(skill);
|
removeSkill(skill);
|
||||||
addSkill(skill, true);
|
addSkill(skill, true);
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+1
@@ -171,6 +171,7 @@ public class Hardin extends AbstractNpcAI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
player.restoreDualSkills();
|
||||||
player.store(false);
|
player.store(false);
|
||||||
player.broadcastUserInfo();
|
player.broadcastUserInfo();
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
|
|||||||
Vendored
+2
@@ -609,6 +609,7 @@ public class Raina extends AbstractNpcAI
|
|||||||
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"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
giveItems(player, getCloakId(player), 1);
|
giveItems(player, getCloakId(player), 1);
|
||||||
@@ -644,6 +645,7 @@ public class Raina extends AbstractNpcAI
|
|||||||
player.sendPacket(SystemMessageId.THE_NEW_SUBCLASS_HAS_BEEN_ADDED);
|
player.sendPacket(SystemMessageId.THE_NEW_SUBCLASS_HAS_BEEN_ADDED);
|
||||||
player.sendPacket(getNpcHtmlMessage(player, npc, "addSuccess.html"));
|
player.sendPacket(getNpcHtmlMessage(player, npc, "addSuccess.html"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
giveItems(player, getPowerItemId(player), 1);
|
giveItems(player, getPowerItemId(player), 1);
|
||||||
|
|||||||
+34
-9
@@ -7393,18 +7393,19 @@ public class PlayerInstance extends Playable
|
|||||||
storeSkill(newSkill, oldSkill, -1);
|
storeSkill(newSkill, oldSkill, -1);
|
||||||
if (CommonUtil.contains(DUAL_CLASS_SKILLS, newSkill.getId()))
|
if (CommonUtil.contains(DUAL_CLASS_SKILLS, newSkill.getId()))
|
||||||
{
|
{
|
||||||
final List<Skill> dualClassSkills = getVariables().getList(KNOWN_DUAL_SKILLS_VAR, Skill.class, new ArrayList<>());
|
// Old system compatibility.
|
||||||
for (Skill dualSkill : dualClassSkills)
|
if (getVariables().getString(KNOWN_DUAL_SKILLS_VAR, "").contains("("))
|
||||||
{
|
{
|
||||||
if (dualSkill.getId() == newSkill.getId())
|
getVariables().set(KNOWN_DUAL_SKILLS_VAR, "");
|
||||||
|
for (int skillId : DUAL_CLASS_SKILLS)
|
||||||
{
|
{
|
||||||
dualClassSkills.remove(dualSkill);
|
removeSkill(skillId);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dualClassSkills.add(newSkill);
|
|
||||||
getVariables().set(KNOWN_DUAL_SKILLS_VAR, dualClassSkills);
|
|
||||||
|
|
||||||
|
final Map<Integer, Integer> knownSkills = getVariables().getIntegerMap(KNOWN_DUAL_SKILLS_VAR);
|
||||||
|
knownSkills.put(newSkill.getId(), newSkill.getLevel());
|
||||||
|
getVariables().setIntegerMap(KNOWN_DUAL_SKILLS_VAR, knownSkills);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return oldSkill;
|
return oldSkill;
|
||||||
@@ -7599,11 +7600,35 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Learn known dualclass skills.
|
// Learn known dualclass skills.
|
||||||
|
restoreDualSkills();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Learn known dualclass skills.
|
||||||
|
*/
|
||||||
|
public void restoreDualSkills()
|
||||||
|
{
|
||||||
if (isDualClassActive() || !isSubClassActive())
|
if (isDualClassActive() || !isSubClassActive())
|
||||||
{
|
{
|
||||||
final List<Skill> dualClassSkills = new ArrayList<>(getVariables().getList(KNOWN_DUAL_SKILLS_VAR, Skill.class, Collections.emptyList()));
|
// Old system compatibility.
|
||||||
for (Skill skill : dualClassSkills)
|
if (getVariables().getString(KNOWN_DUAL_SKILLS_VAR, "").contains("("))
|
||||||
{
|
{
|
||||||
|
getVariables().set(KNOWN_DUAL_SKILLS_VAR, "");
|
||||||
|
for (int skillId : DUAL_CLASS_SKILLS)
|
||||||
|
{
|
||||||
|
removeSkill(skillId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final Map<Integer, Integer> knownSkills = getVariables().getIntegerMap(KNOWN_DUAL_SKILLS_VAR);
|
||||||
|
if (knownSkills.isEmpty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Entry<Integer, Integer> entry : knownSkills.entrySet())
|
||||||
|
{
|
||||||
|
final Skill skill = SkillData.getInstance().getSkill(entry.getKey(), entry.getValue());
|
||||||
removeSkill(skill);
|
removeSkill(skill);
|
||||||
addSkill(skill, true);
|
addSkill(skill, true);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
@@ -171,6 +171,7 @@ public class Hardin extends AbstractNpcAI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
player.restoreDualSkills();
|
||||||
player.store(false);
|
player.store(false);
|
||||||
player.broadcastUserInfo();
|
player.broadcastUserInfo();
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
|
|||||||
+2
@@ -609,6 +609,7 @@ public class Raina extends AbstractNpcAI
|
|||||||
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"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
giveItems(player, getCloakId(player), 1);
|
giveItems(player, getCloakId(player), 1);
|
||||||
@@ -644,6 +645,7 @@ public class Raina extends AbstractNpcAI
|
|||||||
player.sendPacket(SystemMessageId.THE_NEW_SUBCLASS_HAS_BEEN_ADDED);
|
player.sendPacket(SystemMessageId.THE_NEW_SUBCLASS_HAS_BEEN_ADDED);
|
||||||
player.sendPacket(getNpcHtmlMessage(player, npc, "addSuccess.html"));
|
player.sendPacket(getNpcHtmlMessage(player, npc, "addSuccess.html"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
giveItems(player, getPowerItemId(player), 1);
|
giveItems(player, getPowerItemId(player), 1);
|
||||||
|
|||||||
+34
-9
@@ -7375,18 +7375,19 @@ public class PlayerInstance extends Playable
|
|||||||
storeSkill(newSkill, oldSkill, -1);
|
storeSkill(newSkill, oldSkill, -1);
|
||||||
if (CommonUtil.contains(DUAL_CLASS_SKILLS, newSkill.getId()))
|
if (CommonUtil.contains(DUAL_CLASS_SKILLS, newSkill.getId()))
|
||||||
{
|
{
|
||||||
final List<Skill> dualClassSkills = getVariables().getList(KNOWN_DUAL_SKILLS_VAR, Skill.class, new ArrayList<>());
|
// Old system compatibility.
|
||||||
for (Skill dualSkill : dualClassSkills)
|
if (getVariables().getString(KNOWN_DUAL_SKILLS_VAR, "").contains("("))
|
||||||
{
|
{
|
||||||
if (dualSkill.getId() == newSkill.getId())
|
getVariables().set(KNOWN_DUAL_SKILLS_VAR, "");
|
||||||
|
for (int skillId : DUAL_CLASS_SKILLS)
|
||||||
{
|
{
|
||||||
dualClassSkills.remove(dualSkill);
|
removeSkill(skillId);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dualClassSkills.add(newSkill);
|
|
||||||
getVariables().set(KNOWN_DUAL_SKILLS_VAR, dualClassSkills);
|
|
||||||
|
|
||||||
|
final Map<Integer, Integer> knownSkills = getVariables().getIntegerMap(KNOWN_DUAL_SKILLS_VAR);
|
||||||
|
knownSkills.put(newSkill.getId(), newSkill.getLevel());
|
||||||
|
getVariables().setIntegerMap(KNOWN_DUAL_SKILLS_VAR, knownSkills);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return oldSkill;
|
return oldSkill;
|
||||||
@@ -7581,11 +7582,35 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Learn known dualclass skills.
|
// Learn known dualclass skills.
|
||||||
|
restoreDualSkills();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Learn known dualclass skills.
|
||||||
|
*/
|
||||||
|
public void restoreDualSkills()
|
||||||
|
{
|
||||||
if (isDualClassActive() || !isSubClassActive())
|
if (isDualClassActive() || !isSubClassActive())
|
||||||
{
|
{
|
||||||
final List<Skill> dualClassSkills = new ArrayList<>(getVariables().getList(KNOWN_DUAL_SKILLS_VAR, Skill.class, Collections.emptyList()));
|
// Old system compatibility.
|
||||||
for (Skill skill : dualClassSkills)
|
if (getVariables().getString(KNOWN_DUAL_SKILLS_VAR, "").contains("("))
|
||||||
{
|
{
|
||||||
|
getVariables().set(KNOWN_DUAL_SKILLS_VAR, "");
|
||||||
|
for (int skillId : DUAL_CLASS_SKILLS)
|
||||||
|
{
|
||||||
|
removeSkill(skillId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final Map<Integer, Integer> knownSkills = getVariables().getIntegerMap(KNOWN_DUAL_SKILLS_VAR);
|
||||||
|
if (knownSkills.isEmpty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Entry<Integer, Integer> entry : knownSkills.entrySet())
|
||||||
|
{
|
||||||
|
final Skill skill = SkillData.getInstance().getSkill(entry.getKey(), entry.getValue());
|
||||||
removeSkill(skill);
|
removeSkill(skill);
|
||||||
addSkill(skill, true);
|
addSkill(skill, true);
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+1
@@ -171,6 +171,7 @@ public class Hardin extends AbstractNpcAI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
player.restoreDualSkills();
|
||||||
player.store(false);
|
player.store(false);
|
||||||
player.broadcastUserInfo();
|
player.broadcastUserInfo();
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
|
|||||||
+2
@@ -609,6 +609,7 @@ public class Raina extends AbstractNpcAI
|
|||||||
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"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
giveItems(player, getCloakId(player), 1);
|
giveItems(player, getCloakId(player), 1);
|
||||||
@@ -644,6 +645,7 @@ public class Raina extends AbstractNpcAI
|
|||||||
player.sendPacket(SystemMessageId.THE_NEW_SUBCLASS_HAS_BEEN_ADDED);
|
player.sendPacket(SystemMessageId.THE_NEW_SUBCLASS_HAS_BEEN_ADDED);
|
||||||
player.sendPacket(getNpcHtmlMessage(player, npc, "addSuccess.html"));
|
player.sendPacket(getNpcHtmlMessage(player, npc, "addSuccess.html"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
giveItems(player, getPowerItemId(player), 1);
|
giveItems(player, getPowerItemId(player), 1);
|
||||||
|
|||||||
+34
-9
@@ -7375,18 +7375,19 @@ public class PlayerInstance extends Playable
|
|||||||
storeSkill(newSkill, oldSkill, -1);
|
storeSkill(newSkill, oldSkill, -1);
|
||||||
if (CommonUtil.contains(DUAL_CLASS_SKILLS, newSkill.getId()))
|
if (CommonUtil.contains(DUAL_CLASS_SKILLS, newSkill.getId()))
|
||||||
{
|
{
|
||||||
final List<Skill> dualClassSkills = getVariables().getList(KNOWN_DUAL_SKILLS_VAR, Skill.class, new ArrayList<>());
|
// Old system compatibility.
|
||||||
for (Skill dualSkill : dualClassSkills)
|
if (getVariables().getString(KNOWN_DUAL_SKILLS_VAR, "").contains("("))
|
||||||
{
|
{
|
||||||
if (dualSkill.getId() == newSkill.getId())
|
getVariables().set(KNOWN_DUAL_SKILLS_VAR, "");
|
||||||
|
for (int skillId : DUAL_CLASS_SKILLS)
|
||||||
{
|
{
|
||||||
dualClassSkills.remove(dualSkill);
|
removeSkill(skillId);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dualClassSkills.add(newSkill);
|
|
||||||
getVariables().set(KNOWN_DUAL_SKILLS_VAR, dualClassSkills);
|
|
||||||
|
|
||||||
|
final Map<Integer, Integer> knownSkills = getVariables().getIntegerMap(KNOWN_DUAL_SKILLS_VAR);
|
||||||
|
knownSkills.put(newSkill.getId(), newSkill.getLevel());
|
||||||
|
getVariables().setIntegerMap(KNOWN_DUAL_SKILLS_VAR, knownSkills);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return oldSkill;
|
return oldSkill;
|
||||||
@@ -7581,11 +7582,35 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Learn known dualclass skills.
|
// Learn known dualclass skills.
|
||||||
|
restoreDualSkills();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Learn known dualclass skills.
|
||||||
|
*/
|
||||||
|
public void restoreDualSkills()
|
||||||
|
{
|
||||||
if (isDualClassActive() || !isSubClassActive())
|
if (isDualClassActive() || !isSubClassActive())
|
||||||
{
|
{
|
||||||
final List<Skill> dualClassSkills = new ArrayList<>(getVariables().getList(KNOWN_DUAL_SKILLS_VAR, Skill.class, Collections.emptyList()));
|
// Old system compatibility.
|
||||||
for (Skill skill : dualClassSkills)
|
if (getVariables().getString(KNOWN_DUAL_SKILLS_VAR, "").contains("("))
|
||||||
{
|
{
|
||||||
|
getVariables().set(KNOWN_DUAL_SKILLS_VAR, "");
|
||||||
|
for (int skillId : DUAL_CLASS_SKILLS)
|
||||||
|
{
|
||||||
|
removeSkill(skillId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final Map<Integer, Integer> knownSkills = getVariables().getIntegerMap(KNOWN_DUAL_SKILLS_VAR);
|
||||||
|
if (knownSkills.isEmpty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Entry<Integer, Integer> entry : knownSkills.entrySet())
|
||||||
|
{
|
||||||
|
final Skill skill = SkillData.getInstance().getSkill(entry.getKey(), entry.getValue());
|
||||||
removeSkill(skill);
|
removeSkill(skill);
|
||||||
addSkill(skill, true);
|
addSkill(skill, true);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
@@ -171,6 +171,7 @@ public class Hardin extends AbstractNpcAI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
player.restoreDualSkills();
|
||||||
player.store(false);
|
player.store(false);
|
||||||
player.broadcastUserInfo();
|
player.broadcastUserInfo();
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
|
|||||||
+2
@@ -609,6 +609,7 @@ public class Raina extends AbstractNpcAI
|
|||||||
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"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
giveItems(player, getCloakId(player), 1);
|
giveItems(player, getCloakId(player), 1);
|
||||||
@@ -644,6 +645,7 @@ public class Raina extends AbstractNpcAI
|
|||||||
player.sendPacket(SystemMessageId.THE_NEW_SUBCLASS_HAS_BEEN_ADDED);
|
player.sendPacket(SystemMessageId.THE_NEW_SUBCLASS_HAS_BEEN_ADDED);
|
||||||
player.sendPacket(getNpcHtmlMessage(player, npc, "addSuccess.html"));
|
player.sendPacket(getNpcHtmlMessage(player, npc, "addSuccess.html"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
SkillTreeData.getInstance().cleanSkillUponAwakening(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
giveItems(player, getPowerItemId(player), 1);
|
giveItems(player, getPowerItemId(player), 1);
|
||||||
|
|||||||
+34
-9
@@ -7376,18 +7376,19 @@ public class PlayerInstance extends Playable
|
|||||||
storeSkill(newSkill, oldSkill, -1);
|
storeSkill(newSkill, oldSkill, -1);
|
||||||
if (CommonUtil.contains(DUAL_CLASS_SKILLS, newSkill.getId()))
|
if (CommonUtil.contains(DUAL_CLASS_SKILLS, newSkill.getId()))
|
||||||
{
|
{
|
||||||
final List<Skill> dualClassSkills = getVariables().getList(KNOWN_DUAL_SKILLS_VAR, Skill.class, new ArrayList<>());
|
// Old system compatibility.
|
||||||
for (Skill dualSkill : dualClassSkills)
|
if (getVariables().getString(KNOWN_DUAL_SKILLS_VAR, "").contains("("))
|
||||||
{
|
{
|
||||||
if (dualSkill.getId() == newSkill.getId())
|
getVariables().set(KNOWN_DUAL_SKILLS_VAR, "");
|
||||||
|
for (int skillId : DUAL_CLASS_SKILLS)
|
||||||
{
|
{
|
||||||
dualClassSkills.remove(dualSkill);
|
removeSkill(skillId);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dualClassSkills.add(newSkill);
|
|
||||||
getVariables().set(KNOWN_DUAL_SKILLS_VAR, dualClassSkills);
|
|
||||||
|
|
||||||
|
final Map<Integer, Integer> knownSkills = getVariables().getIntegerMap(KNOWN_DUAL_SKILLS_VAR);
|
||||||
|
knownSkills.put(newSkill.getId(), newSkill.getLevel());
|
||||||
|
getVariables().setIntegerMap(KNOWN_DUAL_SKILLS_VAR, knownSkills);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return oldSkill;
|
return oldSkill;
|
||||||
@@ -7582,11 +7583,35 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Learn known dualclass skills.
|
// Learn known dualclass skills.
|
||||||
|
restoreDualSkills();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Learn known dualclass skills.
|
||||||
|
*/
|
||||||
|
public void restoreDualSkills()
|
||||||
|
{
|
||||||
if (isDualClassActive() || !isSubClassActive())
|
if (isDualClassActive() || !isSubClassActive())
|
||||||
{
|
{
|
||||||
final List<Skill> dualClassSkills = new ArrayList<>(getVariables().getList(KNOWN_DUAL_SKILLS_VAR, Skill.class, Collections.emptyList()));
|
// Old system compatibility.
|
||||||
for (Skill skill : dualClassSkills)
|
if (getVariables().getString(KNOWN_DUAL_SKILLS_VAR, "").contains("("))
|
||||||
{
|
{
|
||||||
|
getVariables().set(KNOWN_DUAL_SKILLS_VAR, "");
|
||||||
|
for (int skillId : DUAL_CLASS_SKILLS)
|
||||||
|
{
|
||||||
|
removeSkill(skillId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final Map<Integer, Integer> knownSkills = getVariables().getIntegerMap(KNOWN_DUAL_SKILLS_VAR);
|
||||||
|
if (knownSkills.isEmpty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Entry<Integer, Integer> entry : knownSkills.entrySet())
|
||||||
|
{
|
||||||
|
final Skill skill = SkillData.getInstance().getSkill(entry.getKey(), entry.getValue());
|
||||||
removeSkill(skill);
|
removeSkill(skill);
|
||||||
addSkill(skill, true);
|
addSkill(skill, true);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
@@ -217,6 +217,7 @@ public class Joachim extends AbstractNpcAI
|
|||||||
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"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponChangeClass(player);
|
SkillTreeData.getInstance().cleanSkillUponChangeClass(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
player.broadcastUserInfo();
|
player.broadcastUserInfo();
|
||||||
|
|||||||
Vendored
+1
@@ -169,6 +169,7 @@ public class Hardin extends AbstractNpcAI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
player.restoreDualSkills();
|
||||||
player.store(false);
|
player.store(false);
|
||||||
player.broadcastUserInfo();
|
player.broadcastUserInfo();
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
|
|||||||
Vendored
+2
@@ -594,6 +594,7 @@ public class Raina extends AbstractNpcAI
|
|||||||
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"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponChangeClass(player);
|
SkillTreeData.getInstance().cleanSkillUponChangeClass(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
giveItems(player, getCloakId(player), 1);
|
giveItems(player, getCloakId(player), 1);
|
||||||
@@ -633,6 +634,7 @@ public class Raina extends AbstractNpcAI
|
|||||||
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"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponChangeClass(player);
|
SkillTreeData.getInstance().cleanSkillUponChangeClass(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
giveItems(player, getPowerItemId(player), 1);
|
giveItems(player, getPowerItemId(player), 1);
|
||||||
|
|||||||
+34
-9
@@ -7390,18 +7390,19 @@ public class PlayerInstance extends Playable
|
|||||||
storeSkill(newSkill, oldSkill, -1);
|
storeSkill(newSkill, oldSkill, -1);
|
||||||
if (CommonUtil.contains(DUAL_CLASS_SKILLS, newSkill.getId()))
|
if (CommonUtil.contains(DUAL_CLASS_SKILLS, newSkill.getId()))
|
||||||
{
|
{
|
||||||
final List<Skill> dualClassSkills = getVariables().getList(KNOWN_DUAL_SKILLS_VAR, Skill.class, new ArrayList<>());
|
// Old system compatibility.
|
||||||
for (Skill dualSkill : dualClassSkills)
|
if (getVariables().getString(KNOWN_DUAL_SKILLS_VAR, "").contains("("))
|
||||||
{
|
{
|
||||||
if (dualSkill.getId() == newSkill.getId())
|
getVariables().set(KNOWN_DUAL_SKILLS_VAR, "");
|
||||||
|
for (int skillId : DUAL_CLASS_SKILLS)
|
||||||
{
|
{
|
||||||
dualClassSkills.remove(dualSkill);
|
removeSkill(skillId);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dualClassSkills.add(newSkill);
|
|
||||||
getVariables().set(KNOWN_DUAL_SKILLS_VAR, dualClassSkills);
|
|
||||||
|
|
||||||
|
final Map<Integer, Integer> knownSkills = getVariables().getIntegerMap(KNOWN_DUAL_SKILLS_VAR);
|
||||||
|
knownSkills.put(newSkill.getId(), newSkill.getLevel());
|
||||||
|
getVariables().setIntegerMap(KNOWN_DUAL_SKILLS_VAR, knownSkills);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return oldSkill;
|
return oldSkill;
|
||||||
@@ -7596,11 +7597,35 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Learn known dualclass skills.
|
// Learn known dualclass skills.
|
||||||
|
restoreDualSkills();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Learn known dualclass skills.
|
||||||
|
*/
|
||||||
|
public void restoreDualSkills()
|
||||||
|
{
|
||||||
if (isDualClassActive() || !isSubClassActive())
|
if (isDualClassActive() || !isSubClassActive())
|
||||||
{
|
{
|
||||||
final List<Skill> dualClassSkills = new ArrayList<>(getVariables().getList(KNOWN_DUAL_SKILLS_VAR, Skill.class, Collections.emptyList()));
|
// Old system compatibility.
|
||||||
for (Skill skill : dualClassSkills)
|
if (getVariables().getString(KNOWN_DUAL_SKILLS_VAR, "").contains("("))
|
||||||
{
|
{
|
||||||
|
getVariables().set(KNOWN_DUAL_SKILLS_VAR, "");
|
||||||
|
for (int skillId : DUAL_CLASS_SKILLS)
|
||||||
|
{
|
||||||
|
removeSkill(skillId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final Map<Integer, Integer> knownSkills = getVariables().getIntegerMap(KNOWN_DUAL_SKILLS_VAR);
|
||||||
|
if (knownSkills.isEmpty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Entry<Integer, Integer> entry : knownSkills.entrySet())
|
||||||
|
{
|
||||||
|
final Skill skill = SkillData.getInstance().getSkill(entry.getKey(), entry.getValue());
|
||||||
removeSkill(skill);
|
removeSkill(skill);
|
||||||
addSkill(skill, true);
|
addSkill(skill, true);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
@@ -217,6 +217,7 @@ public class Joachim extends AbstractNpcAI
|
|||||||
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"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponChangeClass(player);
|
SkillTreeData.getInstance().cleanSkillUponChangeClass(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
player.broadcastUserInfo();
|
player.broadcastUserInfo();
|
||||||
|
|||||||
Vendored
+1
@@ -169,6 +169,7 @@ public class Hardin extends AbstractNpcAI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
player.restoreDualSkills();
|
||||||
player.store(false);
|
player.store(false);
|
||||||
player.broadcastUserInfo();
|
player.broadcastUserInfo();
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
|
|||||||
+2
@@ -594,6 +594,7 @@ public class Raina extends AbstractNpcAI
|
|||||||
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"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponChangeClass(player);
|
SkillTreeData.getInstance().cleanSkillUponChangeClass(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
giveItems(player, getCloakId(player), 1);
|
giveItems(player, getCloakId(player), 1);
|
||||||
@@ -633,6 +634,7 @@ public class Raina extends AbstractNpcAI
|
|||||||
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"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponChangeClass(player);
|
SkillTreeData.getInstance().cleanSkillUponChangeClass(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
giveItems(player, getPowerItemId(player), 1);
|
giveItems(player, getPowerItemId(player), 1);
|
||||||
|
|||||||
+34
-9
@@ -7492,18 +7492,19 @@ public class PlayerInstance extends Playable
|
|||||||
storeSkill(newSkill, oldSkill, -1);
|
storeSkill(newSkill, oldSkill, -1);
|
||||||
if (CommonUtil.contains(DUAL_CLASS_SKILLS, newSkill.getId()))
|
if (CommonUtil.contains(DUAL_CLASS_SKILLS, newSkill.getId()))
|
||||||
{
|
{
|
||||||
final List<Skill> dualClassSkills = getVariables().getList(KNOWN_DUAL_SKILLS_VAR, Skill.class, new ArrayList<>());
|
// Old system compatibility.
|
||||||
for (Skill dualSkill : dualClassSkills)
|
if (getVariables().getString(KNOWN_DUAL_SKILLS_VAR, "").contains("("))
|
||||||
{
|
{
|
||||||
if (dualSkill.getId() == newSkill.getId())
|
getVariables().set(KNOWN_DUAL_SKILLS_VAR, "");
|
||||||
|
for (int skillId : DUAL_CLASS_SKILLS)
|
||||||
{
|
{
|
||||||
dualClassSkills.remove(dualSkill);
|
removeSkill(skillId);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dualClassSkills.add(newSkill);
|
|
||||||
getVariables().set(KNOWN_DUAL_SKILLS_VAR, dualClassSkills);
|
|
||||||
|
|
||||||
|
final Map<Integer, Integer> knownSkills = getVariables().getIntegerMap(KNOWN_DUAL_SKILLS_VAR);
|
||||||
|
knownSkills.put(newSkill.getId(), newSkill.getLevel());
|
||||||
|
getVariables().setIntegerMap(KNOWN_DUAL_SKILLS_VAR, knownSkills);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return oldSkill;
|
return oldSkill;
|
||||||
@@ -7698,11 +7699,35 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Learn known dualclass skills.
|
// Learn known dualclass skills.
|
||||||
|
restoreDualSkills();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Learn known dualclass skills.
|
||||||
|
*/
|
||||||
|
public void restoreDualSkills()
|
||||||
|
{
|
||||||
if (isDualClassActive() || !isSubClassActive())
|
if (isDualClassActive() || !isSubClassActive())
|
||||||
{
|
{
|
||||||
final List<Skill> dualClassSkills = new ArrayList<>(getVariables().getList(KNOWN_DUAL_SKILLS_VAR, Skill.class, Collections.emptyList()));
|
// Old system compatibility.
|
||||||
for (Skill skill : dualClassSkills)
|
if (getVariables().getString(KNOWN_DUAL_SKILLS_VAR, "").contains("("))
|
||||||
{
|
{
|
||||||
|
getVariables().set(KNOWN_DUAL_SKILLS_VAR, "");
|
||||||
|
for (int skillId : DUAL_CLASS_SKILLS)
|
||||||
|
{
|
||||||
|
removeSkill(skillId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final Map<Integer, Integer> knownSkills = getVariables().getIntegerMap(KNOWN_DUAL_SKILLS_VAR);
|
||||||
|
if (knownSkills.isEmpty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Entry<Integer, Integer> entry : knownSkills.entrySet())
|
||||||
|
{
|
||||||
|
final Skill skill = SkillData.getInstance().getSkill(entry.getKey(), entry.getValue());
|
||||||
removeSkill(skill);
|
removeSkill(skill);
|
||||||
addSkill(skill, true);
|
addSkill(skill, true);
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+1
@@ -217,6 +217,7 @@ public class Joachim extends AbstractNpcAI
|
|||||||
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"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponChangeClass(player);
|
SkillTreeData.getInstance().cleanSkillUponChangeClass(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
player.broadcastUserInfo();
|
player.broadcastUserInfo();
|
||||||
|
|||||||
L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/ai/areas/TalkingIsland/Hardin/Hardin.java
Vendored
+1
@@ -169,6 +169,7 @@ public class Hardin extends AbstractNpcAI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
player.restoreDualSkills();
|
||||||
player.store(false);
|
player.store(false);
|
||||||
player.broadcastUserInfo();
|
player.broadcastUserInfo();
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
|
|||||||
Vendored
+2
@@ -594,6 +594,7 @@ public class Raina extends AbstractNpcAI
|
|||||||
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"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponChangeClass(player);
|
SkillTreeData.getInstance().cleanSkillUponChangeClass(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
giveItems(player, getCloakId(player), 1);
|
giveItems(player, getCloakId(player), 1);
|
||||||
@@ -633,6 +634,7 @@ public class Raina extends AbstractNpcAI
|
|||||||
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"));
|
||||||
SkillTreeData.getInstance().cleanSkillUponChangeClass(player);
|
SkillTreeData.getInstance().cleanSkillUponChangeClass(player);
|
||||||
|
player.restoreDualSkills();
|
||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
giveItems(player, getPowerItemId(player), 1);
|
giveItems(player, getPowerItemId(player), 1);
|
||||||
|
|||||||
+34
-9
@@ -7518,18 +7518,19 @@ public class PlayerInstance extends Playable
|
|||||||
storeSkill(newSkill, oldSkill, -1);
|
storeSkill(newSkill, oldSkill, -1);
|
||||||
if (CommonUtil.contains(DUAL_CLASS_SKILLS, newSkill.getId()))
|
if (CommonUtil.contains(DUAL_CLASS_SKILLS, newSkill.getId()))
|
||||||
{
|
{
|
||||||
final List<Skill> dualClassSkills = getVariables().getList(KNOWN_DUAL_SKILLS_VAR, Skill.class, new ArrayList<>());
|
// Old system compatibility.
|
||||||
for (Skill dualSkill : dualClassSkills)
|
if (getVariables().getString(KNOWN_DUAL_SKILLS_VAR, "").contains("("))
|
||||||
{
|
{
|
||||||
if (dualSkill.getId() == newSkill.getId())
|
getVariables().set(KNOWN_DUAL_SKILLS_VAR, "");
|
||||||
|
for (int skillId : DUAL_CLASS_SKILLS)
|
||||||
{
|
{
|
||||||
dualClassSkills.remove(dualSkill);
|
removeSkill(skillId);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dualClassSkills.add(newSkill);
|
|
||||||
getVariables().set(KNOWN_DUAL_SKILLS_VAR, dualClassSkills);
|
|
||||||
|
|
||||||
|
final Map<Integer, Integer> knownSkills = getVariables().getIntegerMap(KNOWN_DUAL_SKILLS_VAR);
|
||||||
|
knownSkills.put(newSkill.getId(), newSkill.getLevel());
|
||||||
|
getVariables().setIntegerMap(KNOWN_DUAL_SKILLS_VAR, knownSkills);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return oldSkill;
|
return oldSkill;
|
||||||
@@ -7724,11 +7725,35 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Learn known dualclass skills.
|
// Learn known dualclass skills.
|
||||||
|
restoreDualSkills();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Learn known dualclass skills.
|
||||||
|
*/
|
||||||
|
public void restoreDualSkills()
|
||||||
|
{
|
||||||
if (isDualClassActive() || !isSubClassActive())
|
if (isDualClassActive() || !isSubClassActive())
|
||||||
{
|
{
|
||||||
final List<Skill> dualClassSkills = new ArrayList<>(getVariables().getList(KNOWN_DUAL_SKILLS_VAR, Skill.class, Collections.emptyList()));
|
// Old system compatibility.
|
||||||
for (Skill skill : dualClassSkills)
|
if (getVariables().getString(KNOWN_DUAL_SKILLS_VAR, "").contains("("))
|
||||||
{
|
{
|
||||||
|
getVariables().set(KNOWN_DUAL_SKILLS_VAR, "");
|
||||||
|
for (int skillId : DUAL_CLASS_SKILLS)
|
||||||
|
{
|
||||||
|
removeSkill(skillId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final Map<Integer, Integer> knownSkills = getVariables().getIntegerMap(KNOWN_DUAL_SKILLS_VAR);
|
||||||
|
if (knownSkills.isEmpty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Entry<Integer, Integer> entry : knownSkills.entrySet())
|
||||||
|
{
|
||||||
|
final Skill skill = SkillData.getInstance().getSkill(entry.getKey(), entry.getValue());
|
||||||
removeSkill(skill);
|
removeSkill(skill);
|
||||||
addSkill(skill, true);
|
addSkill(skill, true);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user