From c043af33f890ae4b9c351a6263bc244b5899451e Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Fri, 24 Jan 2020 13:10:13 +0000 Subject: [PATCH] Change class should not remove equipped item skills. --- .../data/xml/impl/SkillTreesData.java | 24 ++++++++++++++++++- .../data/xml/impl/SkillTreesData.java | 24 ++++++++++++++++++- .../data/xml/impl/SkillTreesData.java | 24 ++++++++++++++++++- .../data/xml/impl/SkillTreesData.java | 24 ++++++++++++++++++- .../data/xml/impl/SkillTreesData.java | 24 ++++++++++++++++++- .../data/xml/impl/SkillTreesData.java | 24 ++++++++++++++++++- .../data/xml/impl/SkillTreesData.java | 24 ++++++++++++++++++- .../data/xml/impl/SkillTreesData.java | 24 ++++++++++++++++++- .../data/xml/impl/SkillTreesData.java | 24 ++++++++++++++++++- .../data/xml/impl/SkillTreesData.java | 24 ++++++++++++++++++- .../data/xml/impl/SkillTreesData.java | 24 ++++++++++++++++++- .../data/xml/impl/SkillTreesData.java | 24 ++++++++++++++++++- .../data/xml/impl/SkillTreesData.java | 24 ++++++++++++++++++- .../data/xml/impl/SkillTreesData.java | 24 ++++++++++++++++++- .../data/xml/impl/SkillTreesData.java | 24 ++++++++++++++++++- 15 files changed, 345 insertions(+), 15 deletions(-) diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java index a7cd99b0a3..f1fc07cea5 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java @@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId; import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.clan.Clan; 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.SkillHolder; 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.Skill; @@ -1468,7 +1470,27 @@ public class SkillTreesData implements IXmlReader if (!isCurrentClassSkillNoParent(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel())) { - player.removeSkill(skill, true, true); + // Do not remove equipped item skills. + boolean isItemSkill = false; + SEARCH: for (ItemInstance item : player.getInventory().getItems()) + { + final List 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); + } } } } diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java index a7cd99b0a3..f1fc07cea5 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java @@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId; import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.clan.Clan; 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.SkillHolder; 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.Skill; @@ -1468,7 +1470,27 @@ public class SkillTreesData implements IXmlReader if (!isCurrentClassSkillNoParent(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel())) { - player.removeSkill(skill, true, true); + // Do not remove equipped item skills. + boolean isItemSkill = false; + SEARCH: for (ItemInstance item : player.getInventory().getItems()) + { + final List 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); + } } } } diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java index a7cd99b0a3..f1fc07cea5 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java @@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId; import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.clan.Clan; 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.SkillHolder; 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.Skill; @@ -1468,7 +1470,27 @@ public class SkillTreesData implements IXmlReader if (!isCurrentClassSkillNoParent(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel())) { - player.removeSkill(skill, true, true); + // Do not remove equipped item skills. + boolean isItemSkill = false; + SEARCH: for (ItemInstance item : player.getInventory().getItems()) + { + final List 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); + } } } } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java index a7cd99b0a3..f1fc07cea5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java @@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId; import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.clan.Clan; 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.SkillHolder; 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.Skill; @@ -1468,7 +1470,27 @@ public class SkillTreesData implements IXmlReader if (!isCurrentClassSkillNoParent(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel())) { - player.removeSkill(skill, true, true); + // Do not remove equipped item skills. + boolean isItemSkill = false; + SEARCH: for (ItemInstance item : player.getInventory().getItems()) + { + final List 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); + } } } } diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java index a7cd99b0a3..f1fc07cea5 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java @@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId; import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.clan.Clan; 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.SkillHolder; 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.Skill; @@ -1468,7 +1470,27 @@ public class SkillTreesData implements IXmlReader if (!isCurrentClassSkillNoParent(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel())) { - player.removeSkill(skill, true, true); + // Do not remove equipped item skills. + boolean isItemSkill = false; + SEARCH: for (ItemInstance item : player.getInventory().getItems()) + { + final List 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); + } } } } diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java index a7cd99b0a3..f1fc07cea5 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java @@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId; import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.clan.Clan; 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.SkillHolder; 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.Skill; @@ -1468,7 +1470,27 @@ public class SkillTreesData implements IXmlReader if (!isCurrentClassSkillNoParent(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel())) { - player.removeSkill(skill, true, true); + // Do not remove equipped item skills. + boolean isItemSkill = false; + SEARCH: for (ItemInstance item : player.getInventory().getItems()) + { + final List 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); + } } } } diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java index f1f6e5bb0e..fa5823a695 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java @@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId; import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.clan.Clan; 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.SkillHolder; 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.Skill; @@ -1470,7 +1472,27 @@ public class SkillTreesData implements IXmlReader if (!isCurrentClassSkillNoParent(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel())) { - player.removeSkill(skill, true, true); + // Do not remove equipped item skills. + boolean isItemSkill = false; + SEARCH: for (ItemInstance item : player.getInventory().getItems()) + { + final List 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); + } } } } diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java index 25ae34789c..4f068f9acd 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java @@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId; import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.clan.Clan; 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.SkillHolder; 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.Skill; @@ -1472,7 +1474,27 @@ public class SkillTreesData implements IXmlReader if (!isCurrentClassSkillNoParent(currentClass, hashCode) && !isRemoveSkill(currentClass, skill.getId()) && !isAwakenSaveSkill(currentClass, skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel())) { - player.removeSkill(skill, true, true); + // Do not remove equipped item skills. + boolean isItemSkill = false; + SEARCH: for (ItemInstance item : player.getInventory().getItems()) + { + final List 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); + } } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java index 7f65dfb5e7..fdd0012ffe 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java @@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId; import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.clan.Clan; 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.SkillHolder; 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.Skill; @@ -1456,7 +1458,27 @@ public class SkillTreesData implements IXmlReader if (!isCurrentClassSkillNoParent(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel())) { - player.removeSkill(skill, true, true); + // Do not remove equipped item skills. + boolean isItemSkill = false; + SEARCH: for (ItemInstance item : player.getInventory().getItems()) + { + final List 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); + } } } } diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java index 7f65dfb5e7..fdd0012ffe 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java @@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId; import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.clan.Clan; 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.SkillHolder; 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.Skill; @@ -1456,7 +1458,27 @@ public class SkillTreesData implements IXmlReader if (!isCurrentClassSkillNoParent(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel())) { - player.removeSkill(skill, true, true); + // Do not remove equipped item skills. + boolean isItemSkill = false; + SEARCH: for (ItemInstance item : player.getInventory().getItems()) + { + final List 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); + } } } } diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java index 7f65dfb5e7..fdd0012ffe 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java @@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId; import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.clan.Clan; 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.SkillHolder; 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.Skill; @@ -1456,7 +1458,27 @@ public class SkillTreesData implements IXmlReader if (!isCurrentClassSkillNoParent(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel())) { - player.removeSkill(skill, true, true); + // Do not remove equipped item skills. + boolean isItemSkill = false; + SEARCH: for (ItemInstance item : player.getInventory().getItems()) + { + final List 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); + } } } } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java index 7f65dfb5e7..fdd0012ffe 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java @@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId; import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.clan.Clan; 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.SkillHolder; 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.Skill; @@ -1456,7 +1458,27 @@ public class SkillTreesData implements IXmlReader if (!isCurrentClassSkillNoParent(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel())) { - player.removeSkill(skill, true, true); + // Do not remove equipped item skills. + boolean isItemSkill = false; + SEARCH: for (ItemInstance item : player.getInventory().getItems()) + { + final List 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); + } } } } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java index 7f65dfb5e7..fdd0012ffe 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java @@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId; import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.clan.Clan; 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.SkillHolder; 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.Skill; @@ -1456,7 +1458,27 @@ public class SkillTreesData implements IXmlReader if (!isCurrentClassSkillNoParent(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel())) { - player.removeSkill(skill, true, true); + // Do not remove equipped item skills. + boolean isItemSkill = false; + SEARCH: for (ItemInstance item : player.getInventory().getItems()) + { + final List 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); + } } } } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java index 8797804c06..6aaad1a3be 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java @@ -50,9 +50,11 @@ import org.l2jmobius.gameserver.model.base.ClassId; import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.clan.Clan; 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.SkillHolder; 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.Skill; @@ -1458,7 +1460,27 @@ public class SkillTreesData implements IXmlReader if (!isCurrentClassSkillNoParent(currentClass, hashCode) && !isRemoveSkill(currentClass, skill.getId()) && !isAwakenSaveSkill(currentClass, skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel())) { - player.removeSkill(skill, true, true); + // Do not remove equipped item skills. + boolean isItemSkill = false; + SEARCH: for (ItemInstance item : player.getInventory().getItems()) + { + final List 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); + } } } diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java index 7f65dfb5e7..fdd0012ffe 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java @@ -51,9 +51,11 @@ import org.l2jmobius.gameserver.model.base.ClassId; import org.l2jmobius.gameserver.model.base.SocialClass; import org.l2jmobius.gameserver.model.clan.Clan; 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.SkillHolder; 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.Skill; @@ -1456,7 +1458,27 @@ public class SkillTreesData implements IXmlReader if (!isCurrentClassSkillNoParent(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId()) && !isAlchemySkill(skill.getId(), skill.getLevel())) { - player.removeSkill(skill, true, true); + // Do not remove equipped item skills. + boolean isItemSkill = false; + SEARCH: for (ItemInstance item : player.getInventory().getItems()) + { + final List 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); + } } } }