Change class should not remove equipped item skills.

This commit is contained in:
MobiusDevelopment 2020-01-24 13:10:13 +00:00
parent 04d2ed51da
commit c043af33f8
15 changed files with 345 additions and 15 deletions

View File

@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId;
import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.base.SocialClass;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder; import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder; import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.CommonSkill; import org.l2jmobius.gameserver.model.skills.CommonSkill;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
@ -1467,11 +1469,31 @@ public class SkillTreesData implements IXmlReader
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(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel()))
{
// Do not remove equipped item skills.
boolean isItemSkill = false;
SEARCH: for (ItemInstance item : player.getInventory().getItems())
{
final List<ItemSkillHolder> itemSkills = item.getItem().getAllSkills();
if (itemSkills != null)
{
for (ItemSkillHolder itemSkillHolder : itemSkills)
{
if (itemSkillHolder.getSkillId() == skill.getId())
{
isItemSkill = true;
break SEARCH;
}
}
}
}
if (!isItemSkill)
{ {
player.removeSkill(skill, true, true); player.removeSkill(skill, true, true);
} }
} }
} }
}
public boolean isAlchemySkill(int skillId, int skillLevel) public boolean isAlchemySkill(int skillId, int skillLevel)
{ {

View File

@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId;
import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.base.SocialClass;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder; import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder; import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.CommonSkill; import org.l2jmobius.gameserver.model.skills.CommonSkill;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
@ -1467,11 +1469,31 @@ public class SkillTreesData implements IXmlReader
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(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel()))
{
// Do not remove equipped item skills.
boolean isItemSkill = false;
SEARCH: for (ItemInstance item : player.getInventory().getItems())
{
final List<ItemSkillHolder> itemSkills = item.getItem().getAllSkills();
if (itemSkills != null)
{
for (ItemSkillHolder itemSkillHolder : itemSkills)
{
if (itemSkillHolder.getSkillId() == skill.getId())
{
isItemSkill = true;
break SEARCH;
}
}
}
}
if (!isItemSkill)
{ {
player.removeSkill(skill, true, true); player.removeSkill(skill, true, true);
} }
} }
} }
}
public boolean isAlchemySkill(int skillId, int skillLevel) public boolean isAlchemySkill(int skillId, int skillLevel)
{ {

View File

@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId;
import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.base.SocialClass;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder; import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder; import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.CommonSkill; import org.l2jmobius.gameserver.model.skills.CommonSkill;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
@ -1467,11 +1469,31 @@ public class SkillTreesData implements IXmlReader
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(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel()))
{
// Do not remove equipped item skills.
boolean isItemSkill = false;
SEARCH: for (ItemInstance item : player.getInventory().getItems())
{
final List<ItemSkillHolder> itemSkills = item.getItem().getAllSkills();
if (itemSkills != null)
{
for (ItemSkillHolder itemSkillHolder : itemSkills)
{
if (itemSkillHolder.getSkillId() == skill.getId())
{
isItemSkill = true;
break SEARCH;
}
}
}
}
if (!isItemSkill)
{ {
player.removeSkill(skill, true, true); player.removeSkill(skill, true, true);
} }
} }
} }
}
public boolean isAlchemySkill(int skillId, int skillLevel) public boolean isAlchemySkill(int skillId, int skillLevel)
{ {

View File

@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId;
import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.base.SocialClass;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder; import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder; import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.CommonSkill; import org.l2jmobius.gameserver.model.skills.CommonSkill;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
@ -1467,11 +1469,31 @@ public class SkillTreesData implements IXmlReader
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(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel()))
{
// Do not remove equipped item skills.
boolean isItemSkill = false;
SEARCH: for (ItemInstance item : player.getInventory().getItems())
{
final List<ItemSkillHolder> itemSkills = item.getItem().getAllSkills();
if (itemSkills != null)
{
for (ItemSkillHolder itemSkillHolder : itemSkills)
{
if (itemSkillHolder.getSkillId() == skill.getId())
{
isItemSkill = true;
break SEARCH;
}
}
}
}
if (!isItemSkill)
{ {
player.removeSkill(skill, true, true); player.removeSkill(skill, true, true);
} }
} }
} }
}
public boolean isAlchemySkill(int skillId, int skillLevel) public boolean isAlchemySkill(int skillId, int skillLevel)
{ {

View File

@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId;
import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.base.SocialClass;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder; import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder; import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.CommonSkill; import org.l2jmobius.gameserver.model.skills.CommonSkill;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
@ -1467,11 +1469,31 @@ public class SkillTreesData implements IXmlReader
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(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel()))
{
// Do not remove equipped item skills.
boolean isItemSkill = false;
SEARCH: for (ItemInstance item : player.getInventory().getItems())
{
final List<ItemSkillHolder> itemSkills = item.getItem().getAllSkills();
if (itemSkills != null)
{
for (ItemSkillHolder itemSkillHolder : itemSkills)
{
if (itemSkillHolder.getSkillId() == skill.getId())
{
isItemSkill = true;
break SEARCH;
}
}
}
}
if (!isItemSkill)
{ {
player.removeSkill(skill, true, true); player.removeSkill(skill, true, true);
} }
} }
} }
}
public boolean isAlchemySkill(int skillId, int skillLevel) public boolean isAlchemySkill(int skillId, int skillLevel)
{ {

View File

@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId;
import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.base.SocialClass;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder; import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder; import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.CommonSkill; import org.l2jmobius.gameserver.model.skills.CommonSkill;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
@ -1467,11 +1469,31 @@ public class SkillTreesData implements IXmlReader
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(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel()))
{
// Do not remove equipped item skills.
boolean isItemSkill = false;
SEARCH: for (ItemInstance item : player.getInventory().getItems())
{
final List<ItemSkillHolder> itemSkills = item.getItem().getAllSkills();
if (itemSkills != null)
{
for (ItemSkillHolder itemSkillHolder : itemSkills)
{
if (itemSkillHolder.getSkillId() == skill.getId())
{
isItemSkill = true;
break SEARCH;
}
}
}
}
if (!isItemSkill)
{ {
player.removeSkill(skill, true, true); player.removeSkill(skill, true, true);
} }
} }
} }
}
public boolean isAlchemySkill(int skillId, int skillLevel) public boolean isAlchemySkill(int skillId, int skillLevel)
{ {

View File

@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId;
import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.base.SocialClass;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder; import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder; import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.CommonSkill; import org.l2jmobius.gameserver.model.skills.CommonSkill;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
@ -1469,11 +1471,31 @@ public class SkillTreesData implements IXmlReader
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(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel()))
{
// Do not remove equipped item skills.
boolean isItemSkill = false;
SEARCH: for (ItemInstance item : player.getInventory().getItems())
{
final List<ItemSkillHolder> itemSkills = item.getItem().getAllSkills();
if (itemSkills != null)
{
for (ItemSkillHolder itemSkillHolder : itemSkills)
{
if (itemSkillHolder.getSkillId() == skill.getId())
{
isItemSkill = true;
break SEARCH;
}
}
}
}
if (!isItemSkill)
{ {
player.removeSkill(skill, true, true); player.removeSkill(skill, true, true);
} }
} }
} }
}
public boolean isAlchemySkill(int skillId, int skillLevel) public boolean isAlchemySkill(int skillId, int skillLevel)
{ {

View File

@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId;
import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.base.SocialClass;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder; import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder; import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.CommonSkill; import org.l2jmobius.gameserver.model.skills.CommonSkill;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
@ -1471,10 +1473,30 @@ public class SkillTreesData implements IXmlReader
final long hashCode = SkillData.getSkillHashCode(skill.getId(), maxLvl); final long hashCode = SkillData.getSkillHashCode(skill.getId(), maxLvl);
if (!isCurrentClassSkillNoParent(currentClass, hashCode) && !isRemoveSkill(currentClass, skill.getId()) && !isAwakenSaveSkill(currentClass, skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel())) if (!isCurrentClassSkillNoParent(currentClass, hashCode) && !isRemoveSkill(currentClass, skill.getId()) && !isAwakenSaveSkill(currentClass, skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel()))
{
// Do not remove equipped item skills.
boolean isItemSkill = false;
SEARCH: for (ItemInstance item : player.getInventory().getItems())
{
final List<ItemSkillHolder> itemSkills = item.getItem().getAllSkills();
if (itemSkills != null)
{
for (ItemSkillHolder itemSkillHolder : itemSkills)
{
if (itemSkillHolder.getSkillId() == skill.getId())
{
isItemSkill = true;
break SEARCH;
}
}
}
}
if (!isItemSkill)
{ {
player.removeSkill(skill, true, true); player.removeSkill(skill, true, true);
} }
} }
}
// Check previous classes as well, in case classes where skipped. // Check previous classes as well, in case classes where skipped.
while (currentClass.getParent() != null) while (currentClass.getParent() != null)

View File

@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId;
import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.base.SocialClass;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder; import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder; import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.CommonSkill; import org.l2jmobius.gameserver.model.skills.CommonSkill;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
@ -1455,11 +1457,31 @@ public class SkillTreesData implements IXmlReader
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(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel()))
{
// Do not remove equipped item skills.
boolean isItemSkill = false;
SEARCH: for (ItemInstance item : player.getInventory().getItems())
{
final List<ItemSkillHolder> itemSkills = item.getItem().getAllSkills();
if (itemSkills != null)
{
for (ItemSkillHolder itemSkillHolder : itemSkills)
{
if (itemSkillHolder.getSkillId() == skill.getId())
{
isItemSkill = true;
break SEARCH;
}
}
}
}
if (!isItemSkill)
{ {
player.removeSkill(skill, true, true); player.removeSkill(skill, true, true);
} }
} }
} }
}
public boolean isAlchemySkill(int skillId, int skillLevel) public boolean isAlchemySkill(int skillId, int skillLevel)
{ {

View File

@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId;
import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.base.SocialClass;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder; import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder; import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.CommonSkill; import org.l2jmobius.gameserver.model.skills.CommonSkill;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
@ -1455,11 +1457,31 @@ public class SkillTreesData implements IXmlReader
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(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel()))
{
// Do not remove equipped item skills.
boolean isItemSkill = false;
SEARCH: for (ItemInstance item : player.getInventory().getItems())
{
final List<ItemSkillHolder> itemSkills = item.getItem().getAllSkills();
if (itemSkills != null)
{
for (ItemSkillHolder itemSkillHolder : itemSkills)
{
if (itemSkillHolder.getSkillId() == skill.getId())
{
isItemSkill = true;
break SEARCH;
}
}
}
}
if (!isItemSkill)
{ {
player.removeSkill(skill, true, true); player.removeSkill(skill, true, true);
} }
} }
} }
}
public boolean isAlchemySkill(int skillId, int skillLevel) public boolean isAlchemySkill(int skillId, int skillLevel)
{ {

View File

@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId;
import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.base.SocialClass;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder; import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder; import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.CommonSkill; import org.l2jmobius.gameserver.model.skills.CommonSkill;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
@ -1455,11 +1457,31 @@ public class SkillTreesData implements IXmlReader
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(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel()))
{
// Do not remove equipped item skills.
boolean isItemSkill = false;
SEARCH: for (ItemInstance item : player.getInventory().getItems())
{
final List<ItemSkillHolder> itemSkills = item.getItem().getAllSkills();
if (itemSkills != null)
{
for (ItemSkillHolder itemSkillHolder : itemSkills)
{
if (itemSkillHolder.getSkillId() == skill.getId())
{
isItemSkill = true;
break SEARCH;
}
}
}
}
if (!isItemSkill)
{ {
player.removeSkill(skill, true, true); player.removeSkill(skill, true, true);
} }
} }
} }
}
public boolean isAlchemySkill(int skillId, int skillLevel) public boolean isAlchemySkill(int skillId, int skillLevel)
{ {

View File

@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId;
import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.base.SocialClass;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder; import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder; import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.CommonSkill; import org.l2jmobius.gameserver.model.skills.CommonSkill;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
@ -1455,11 +1457,31 @@ public class SkillTreesData implements IXmlReader
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(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel()))
{
// Do not remove equipped item skills.
boolean isItemSkill = false;
SEARCH: for (ItemInstance item : player.getInventory().getItems())
{
final List<ItemSkillHolder> itemSkills = item.getItem().getAllSkills();
if (itemSkills != null)
{
for (ItemSkillHolder itemSkillHolder : itemSkills)
{
if (itemSkillHolder.getSkillId() == skill.getId())
{
isItemSkill = true;
break SEARCH;
}
}
}
}
if (!isItemSkill)
{ {
player.removeSkill(skill, true, true); player.removeSkill(skill, true, true);
} }
} }
} }
}
public boolean isAlchemySkill(int skillId, int skillLevel) public boolean isAlchemySkill(int skillId, int skillLevel)
{ {

View File

@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId;
import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.base.SocialClass;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder; import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder; import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.CommonSkill; import org.l2jmobius.gameserver.model.skills.CommonSkill;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
@ -1455,11 +1457,31 @@ public class SkillTreesData implements IXmlReader
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(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel()))
{
// Do not remove equipped item skills.
boolean isItemSkill = false;
SEARCH: for (ItemInstance item : player.getInventory().getItems())
{
final List<ItemSkillHolder> itemSkills = item.getItem().getAllSkills();
if (itemSkills != null)
{
for (ItemSkillHolder itemSkillHolder : itemSkills)
{
if (itemSkillHolder.getSkillId() == skill.getId())
{
isItemSkill = true;
break SEARCH;
}
}
}
}
if (!isItemSkill)
{ {
player.removeSkill(skill, true, true); player.removeSkill(skill, true, true);
} }
} }
} }
}
public boolean isAlchemySkill(int skillId, int skillLevel) public boolean isAlchemySkill(int skillId, int skillLevel)
{ {

View File

@ -50,9 +50,11 @@ import org.l2jmobius.gameserver.model.base.ClassId;
import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.base.SocialClass;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder; import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder; import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.CommonSkill; import org.l2jmobius.gameserver.model.skills.CommonSkill;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
@ -1457,10 +1459,30 @@ public class SkillTreesData implements IXmlReader
final long hashCode = SkillData.getSkillHashCode(skill.getId(), maxLvl); final long hashCode = SkillData.getSkillHashCode(skill.getId(), maxLvl);
if (!isCurrentClassSkillNoParent(currentClass, hashCode) && !isRemoveSkill(currentClass, skill.getId()) && !isAwakenSaveSkill(currentClass, skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel())) if (!isCurrentClassSkillNoParent(currentClass, hashCode) && !isRemoveSkill(currentClass, skill.getId()) && !isAwakenSaveSkill(currentClass, skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel()))
{
// Do not remove equipped item skills.
boolean isItemSkill = false;
SEARCH: for (ItemInstance item : player.getInventory().getItems())
{
final List<ItemSkillHolder> itemSkills = item.getItem().getAllSkills();
if (itemSkills != null)
{
for (ItemSkillHolder itemSkillHolder : itemSkills)
{
if (itemSkillHolder.getSkillId() == skill.getId())
{
isItemSkill = true;
break SEARCH;
}
}
}
}
if (!isItemSkill)
{ {
player.removeSkill(skill, true, true); player.removeSkill(skill, true, true);
} }
} }
}
// Check previous classes as well, in case classes where skipped. // Check previous classes as well, in case classes where skipped.
while (currentClass.getParent() != null) while (currentClass.getParent() != null)

View File

@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId;
import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.base.SocialClass;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder; import org.l2jmobius.gameserver.model.holders.PlayerSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder; import org.l2jmobius.gameserver.model.interfaces.ISkillsHolder;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.CommonSkill; import org.l2jmobius.gameserver.model.skills.CommonSkill;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
@ -1455,11 +1457,31 @@ public class SkillTreesData implements IXmlReader
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(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel()))
{
// Do not remove equipped item skills.
boolean isItemSkill = false;
SEARCH: for (ItemInstance item : player.getInventory().getItems())
{
final List<ItemSkillHolder> itemSkills = item.getItem().getAllSkills();
if (itemSkills != null)
{
for (ItemSkillHolder itemSkillHolder : itemSkills)
{
if (itemSkillHolder.getSkillId() == skill.getId())
{
isItemSkill = true;
break SEARCH;
}
}
}
}
if (!isItemSkill)
{ {
player.removeSkill(skill, true, true); player.removeSkill(skill, true, true);
} }
} }
} }
}
public boolean isAlchemySkill(int skillId, int skillLevel) public boolean isAlchemySkill(int skillId, int skillLevel)
{ {