AgathionSkillHolder stores directly skills instead of holders.

This commit is contained in:
MobiusDevelopment
2022-01-11 02:51:54 +00:00
parent b228e6d6c8
commit b053d27196
70 changed files with 826 additions and 770 deletions
@@ -29,7 +29,7 @@ import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.ItemTable;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
@@ -69,49 +69,53 @@ public class AgathionData implements IXmlReader
final int enchant = set.getInt("enchant", 0); final int enchant = set.getInt("enchant", 0);
final Map<Integer, List<SkillHolder>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>(); final Map<Integer, List<Skill>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>();
final List<SkillHolder> mainSkillList = new ArrayList<>(); final List<Skill> mainSkillList = new ArrayList<>();
final String main = set.getString("mainSkill", ""); final String main = set.getString("mainSkill", "");
for (String skill : main.split(";")) for (String ids : main.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
mainSkillList.add(new SkillHolder(skillId, level)); mainSkillList.add(skill);
} }
mainSkills.put(enchant, mainSkillList); mainSkills.put(enchant, mainSkillList);
final Map<Integer, List<SkillHolder>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>(); final Map<Integer, List<Skill>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>();
final List<SkillHolder> subSkillList = new ArrayList<>(); final List<Skill> subSkillList = new ArrayList<>();
final String sub = set.getString("subSkill", ""); final String sub = set.getString("subSkill", "");
for (String skill : sub.split(";")) for (String ids : sub.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
subSkillList.add(new SkillHolder(skillId, level)); subSkillList.add(skill);
} }
subSkills.put(enchant, subSkillList); subSkills.put(enchant, subSkillList);
@@ -20,31 +20,33 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
*/ */
public class AgathionSkillHolder public class AgathionSkillHolder
{ {
private final Map<Integer, List<SkillHolder>> _mainSkill; private final Map<Integer, List<Skill>> _mainSkill;
private final Map<Integer, List<SkillHolder>> _subSkill; private final Map<Integer, List<Skill>> _subSkill;
public AgathionSkillHolder(Map<Integer, List<SkillHolder>> mainSkill, Map<Integer, List<SkillHolder>> subSkill) public AgathionSkillHolder(Map<Integer, List<Skill>> mainSkill, Map<Integer, List<Skill>> subSkill)
{ {
_mainSkill = mainSkill; _mainSkill = mainSkill;
_subSkill = subSkill; _subSkill = subSkill;
} }
public Map<Integer, List<SkillHolder>> getMainSkills() public Map<Integer, List<Skill>> getMainSkills()
{ {
return _mainSkill; return _mainSkill;
} }
public Map<Integer, List<SkillHolder>> getSubSkills() public Map<Integer, List<Skill>> getSubSkills()
{ {
return _subSkill; return _subSkill;
} }
public List<SkillHolder> getMainSkills(int enchantLevel) public List<Skill> getMainSkills(int enchantLevel)
{ {
if (!_mainSkill.containsKey(enchantLevel)) if (!_mainSkill.containsKey(enchantLevel))
{ {
@@ -53,7 +55,7 @@ public class AgathionSkillHolder
return _mainSkill.get(enchantLevel); return _mainSkill.get(enchantLevel);
} }
public List<SkillHolder> getSubSkills(int enchantLevel) public List<Skill> getSubSkills(int enchantLevel)
{ {
if (!_subSkill.containsKey(enchantLevel)) if (!_subSkill.containsKey(enchantLevel))
{ {
@@ -73,7 +73,6 @@ import org.l2jmobius.gameserver.model.events.impl.item.OnItemEnchantAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd; import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk; import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.item.Armor; import org.l2jmobius.gameserver.model.item.Armor;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
@@ -947,36 +946,36 @@ public class Item extends WorldObject
{ {
boolean update = false; boolean update = false;
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(_enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(_enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
// Add new skills. // Add new skills.
if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -54,7 +54,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUn
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone; import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone;
@@ -1412,14 +1411,14 @@ public abstract class Inventory extends ItemContainer
if (agathionSkills != null) if (agathionSkills != null)
{ {
boolean update = false; boolean update = false;
for (SkillHolder holder : agathionSkills.getMainSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
if (update) if (update)
@@ -1459,23 +1458,23 @@ public abstract class Inventory extends ItemContainer
boolean update = false; boolean update = false;
if (slot == PAPERDOLL_AGATHION1) if (slot == PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -42,10 +42,10 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDe
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.item.type.EtcItemType; import org.l2jmobius.gameserver.model.item.type.EtcItemType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillConditionScope; import org.l2jmobius.gameserver.model.skill.SkillConditionScope;
import org.l2jmobius.gameserver.model.variables.ItemVariables; import org.l2jmobius.gameserver.model.variables.ItemVariables;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -1019,33 +1019,33 @@ public class PlayerInventory extends Inventory
if (agathionSkills != null) if (agathionSkills != null)
{ {
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
// Add new skills. // Add new skills.
if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
} }
@@ -29,7 +29,7 @@ import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.ItemTable;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
@@ -69,49 +69,53 @@ public class AgathionData implements IXmlReader
final int enchant = set.getInt("enchant", 0); final int enchant = set.getInt("enchant", 0);
final Map<Integer, List<SkillHolder>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>(); final Map<Integer, List<Skill>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>();
final List<SkillHolder> mainSkillList = new ArrayList<>(); final List<Skill> mainSkillList = new ArrayList<>();
final String main = set.getString("mainSkill", ""); final String main = set.getString("mainSkill", "");
for (String skill : main.split(";")) for (String ids : main.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
mainSkillList.add(new SkillHolder(skillId, level)); mainSkillList.add(skill);
} }
mainSkills.put(enchant, mainSkillList); mainSkills.put(enchant, mainSkillList);
final Map<Integer, List<SkillHolder>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>(); final Map<Integer, List<Skill>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>();
final List<SkillHolder> subSkillList = new ArrayList<>(); final List<Skill> subSkillList = new ArrayList<>();
final String sub = set.getString("subSkill", ""); final String sub = set.getString("subSkill", "");
for (String skill : sub.split(";")) for (String ids : sub.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
subSkillList.add(new SkillHolder(skillId, level)); subSkillList.add(skill);
} }
subSkills.put(enchant, subSkillList); subSkills.put(enchant, subSkillList);
@@ -20,31 +20,33 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
*/ */
public class AgathionSkillHolder public class AgathionSkillHolder
{ {
private final Map<Integer, List<SkillHolder>> _mainSkill; private final Map<Integer, List<Skill>> _mainSkill;
private final Map<Integer, List<SkillHolder>> _subSkill; private final Map<Integer, List<Skill>> _subSkill;
public AgathionSkillHolder(Map<Integer, List<SkillHolder>> mainSkill, Map<Integer, List<SkillHolder>> subSkill) public AgathionSkillHolder(Map<Integer, List<Skill>> mainSkill, Map<Integer, List<Skill>> subSkill)
{ {
_mainSkill = mainSkill; _mainSkill = mainSkill;
_subSkill = subSkill; _subSkill = subSkill;
} }
public Map<Integer, List<SkillHolder>> getMainSkills() public Map<Integer, List<Skill>> getMainSkills()
{ {
return _mainSkill; return _mainSkill;
} }
public Map<Integer, List<SkillHolder>> getSubSkills() public Map<Integer, List<Skill>> getSubSkills()
{ {
return _subSkill; return _subSkill;
} }
public List<SkillHolder> getMainSkills(int enchantLevel) public List<Skill> getMainSkills(int enchantLevel)
{ {
if (!_mainSkill.containsKey(enchantLevel)) if (!_mainSkill.containsKey(enchantLevel))
{ {
@@ -53,7 +55,7 @@ public class AgathionSkillHolder
return _mainSkill.get(enchantLevel); return _mainSkill.get(enchantLevel);
} }
public List<SkillHolder> getSubSkills(int enchantLevel) public List<Skill> getSubSkills(int enchantLevel)
{ {
if (!_subSkill.containsKey(enchantLevel)) if (!_subSkill.containsKey(enchantLevel))
{ {
@@ -73,7 +73,6 @@ import org.l2jmobius.gameserver.model.events.impl.item.OnItemEnchantAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd; import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk; import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.item.Armor; import org.l2jmobius.gameserver.model.item.Armor;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
@@ -947,36 +946,36 @@ public class Item extends WorldObject
{ {
boolean update = false; boolean update = false;
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(_enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(_enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
// Add new skills. // Add new skills.
if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -54,7 +54,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUn
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone; import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone;
@@ -1494,14 +1493,14 @@ public abstract class Inventory extends ItemContainer
if (agathionSkills != null) if (agathionSkills != null)
{ {
boolean update = false; boolean update = false;
for (SkillHolder holder : agathionSkills.getMainSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
if (update) if (update)
@@ -1541,23 +1540,23 @@ public abstract class Inventory extends ItemContainer
boolean update = false; boolean update = false;
if (slot == PAPERDOLL_AGATHION1) if (slot == PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -42,10 +42,10 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDe
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.item.type.EtcItemType; import org.l2jmobius.gameserver.model.item.type.EtcItemType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillConditionScope; import org.l2jmobius.gameserver.model.skill.SkillConditionScope;
import org.l2jmobius.gameserver.model.variables.ItemVariables; import org.l2jmobius.gameserver.model.variables.ItemVariables;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -1019,33 +1019,33 @@ public class PlayerInventory extends Inventory
if (agathionSkills != null) if (agathionSkills != null)
{ {
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
// Add new skills. // Add new skills.
if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
} }
@@ -29,7 +29,7 @@ import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.ItemTable;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
@@ -69,49 +69,53 @@ public class AgathionData implements IXmlReader
final int enchant = set.getInt("enchant", 0); final int enchant = set.getInt("enchant", 0);
final Map<Integer, List<SkillHolder>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>(); final Map<Integer, List<Skill>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>();
final List<SkillHolder> mainSkillList = new ArrayList<>(); final List<Skill> mainSkillList = new ArrayList<>();
final String main = set.getString("mainSkill", ""); final String main = set.getString("mainSkill", "");
for (String skill : main.split(";")) for (String ids : main.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
mainSkillList.add(new SkillHolder(skillId, level)); mainSkillList.add(skill);
} }
mainSkills.put(enchant, mainSkillList); mainSkills.put(enchant, mainSkillList);
final Map<Integer, List<SkillHolder>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>(); final Map<Integer, List<Skill>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>();
final List<SkillHolder> subSkillList = new ArrayList<>(); final List<Skill> subSkillList = new ArrayList<>();
final String sub = set.getString("subSkill", ""); final String sub = set.getString("subSkill", "");
for (String skill : sub.split(";")) for (String ids : sub.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
subSkillList.add(new SkillHolder(skillId, level)); subSkillList.add(skill);
} }
subSkills.put(enchant, subSkillList); subSkills.put(enchant, subSkillList);
@@ -20,31 +20,33 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
*/ */
public class AgathionSkillHolder public class AgathionSkillHolder
{ {
private final Map<Integer, List<SkillHolder>> _mainSkill; private final Map<Integer, List<Skill>> _mainSkill;
private final Map<Integer, List<SkillHolder>> _subSkill; private final Map<Integer, List<Skill>> _subSkill;
public AgathionSkillHolder(Map<Integer, List<SkillHolder>> mainSkill, Map<Integer, List<SkillHolder>> subSkill) public AgathionSkillHolder(Map<Integer, List<Skill>> mainSkill, Map<Integer, List<Skill>> subSkill)
{ {
_mainSkill = mainSkill; _mainSkill = mainSkill;
_subSkill = subSkill; _subSkill = subSkill;
} }
public Map<Integer, List<SkillHolder>> getMainSkills() public Map<Integer, List<Skill>> getMainSkills()
{ {
return _mainSkill; return _mainSkill;
} }
public Map<Integer, List<SkillHolder>> getSubSkills() public Map<Integer, List<Skill>> getSubSkills()
{ {
return _subSkill; return _subSkill;
} }
public List<SkillHolder> getMainSkills(int enchantLevel) public List<Skill> getMainSkills(int enchantLevel)
{ {
if (!_mainSkill.containsKey(enchantLevel)) if (!_mainSkill.containsKey(enchantLevel))
{ {
@@ -53,7 +55,7 @@ public class AgathionSkillHolder
return _mainSkill.get(enchantLevel); return _mainSkill.get(enchantLevel);
} }
public List<SkillHolder> getSubSkills(int enchantLevel) public List<Skill> getSubSkills(int enchantLevel)
{ {
if (!_subSkill.containsKey(enchantLevel)) if (!_subSkill.containsKey(enchantLevel))
{ {
@@ -73,7 +73,6 @@ import org.l2jmobius.gameserver.model.events.impl.item.OnItemEnchantAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd; import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk; import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.item.Armor; import org.l2jmobius.gameserver.model.item.Armor;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
@@ -947,36 +946,36 @@ public class Item extends WorldObject
{ {
boolean update = false; boolean update = false;
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(_enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(_enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
// Add new skills. // Add new skills.
if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -54,7 +54,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUn
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone; import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone;
@@ -1494,14 +1493,14 @@ public abstract class Inventory extends ItemContainer
if (agathionSkills != null) if (agathionSkills != null)
{ {
boolean update = false; boolean update = false;
for (SkillHolder holder : agathionSkills.getMainSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
if (update) if (update)
@@ -1541,23 +1540,23 @@ public abstract class Inventory extends ItemContainer
boolean update = false; boolean update = false;
if (slot == PAPERDOLL_AGATHION1) if (slot == PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -42,10 +42,10 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDe
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.item.type.EtcItemType; import org.l2jmobius.gameserver.model.item.type.EtcItemType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillConditionScope; import org.l2jmobius.gameserver.model.skill.SkillConditionScope;
import org.l2jmobius.gameserver.model.variables.ItemVariables; import org.l2jmobius.gameserver.model.variables.ItemVariables;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -1019,33 +1019,33 @@ public class PlayerInventory extends Inventory
if (agathionSkills != null) if (agathionSkills != null)
{ {
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
// Add new skills. // Add new skills.
if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
} }
@@ -29,7 +29,7 @@ import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.ItemTable;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
@@ -69,49 +69,53 @@ public class AgathionData implements IXmlReader
final int enchant = set.getInt("enchant", 0); final int enchant = set.getInt("enchant", 0);
final Map<Integer, List<SkillHolder>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>(); final Map<Integer, List<Skill>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>();
final List<SkillHolder> mainSkillList = new ArrayList<>(); final List<Skill> mainSkillList = new ArrayList<>();
final String main = set.getString("mainSkill", ""); final String main = set.getString("mainSkill", "");
for (String skill : main.split(";")) for (String ids : main.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
mainSkillList.add(new SkillHolder(skillId, level)); mainSkillList.add(skill);
} }
mainSkills.put(enchant, mainSkillList); mainSkills.put(enchant, mainSkillList);
final Map<Integer, List<SkillHolder>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>(); final Map<Integer, List<Skill>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>();
final List<SkillHolder> subSkillList = new ArrayList<>(); final List<Skill> subSkillList = new ArrayList<>();
final String sub = set.getString("subSkill", ""); final String sub = set.getString("subSkill", "");
for (String skill : sub.split(";")) for (String ids : sub.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
subSkillList.add(new SkillHolder(skillId, level)); subSkillList.add(skill);
} }
subSkills.put(enchant, subSkillList); subSkills.put(enchant, subSkillList);
@@ -20,31 +20,33 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
*/ */
public class AgathionSkillHolder public class AgathionSkillHolder
{ {
private final Map<Integer, List<SkillHolder>> _mainSkill; private final Map<Integer, List<Skill>> _mainSkill;
private final Map<Integer, List<SkillHolder>> _subSkill; private final Map<Integer, List<Skill>> _subSkill;
public AgathionSkillHolder(Map<Integer, List<SkillHolder>> mainSkill, Map<Integer, List<SkillHolder>> subSkill) public AgathionSkillHolder(Map<Integer, List<Skill>> mainSkill, Map<Integer, List<Skill>> subSkill)
{ {
_mainSkill = mainSkill; _mainSkill = mainSkill;
_subSkill = subSkill; _subSkill = subSkill;
} }
public Map<Integer, List<SkillHolder>> getMainSkills() public Map<Integer, List<Skill>> getMainSkills()
{ {
return _mainSkill; return _mainSkill;
} }
public Map<Integer, List<SkillHolder>> getSubSkills() public Map<Integer, List<Skill>> getSubSkills()
{ {
return _subSkill; return _subSkill;
} }
public List<SkillHolder> getMainSkills(int enchantLevel) public List<Skill> getMainSkills(int enchantLevel)
{ {
if (!_mainSkill.containsKey(enchantLevel)) if (!_mainSkill.containsKey(enchantLevel))
{ {
@@ -53,7 +55,7 @@ public class AgathionSkillHolder
return _mainSkill.get(enchantLevel); return _mainSkill.get(enchantLevel);
} }
public List<SkillHolder> getSubSkills(int enchantLevel) public List<Skill> getSubSkills(int enchantLevel)
{ {
if (!_subSkill.containsKey(enchantLevel)) if (!_subSkill.containsKey(enchantLevel))
{ {
@@ -73,7 +73,6 @@ import org.l2jmobius.gameserver.model.events.impl.item.OnItemEnchantAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd; import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk; import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.item.Armor; import org.l2jmobius.gameserver.model.item.Armor;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
@@ -947,36 +946,36 @@ public class Item extends WorldObject
{ {
boolean update = false; boolean update = false;
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(_enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(_enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
// Add new skills. // Add new skills.
if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -54,7 +54,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUn
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone; import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone;
@@ -1488,14 +1487,14 @@ public abstract class Inventory extends ItemContainer
if (agathionSkills != null) if (agathionSkills != null)
{ {
boolean update = false; boolean update = false;
for (SkillHolder holder : agathionSkills.getMainSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
if (update) if (update)
@@ -1535,23 +1534,23 @@ public abstract class Inventory extends ItemContainer
boolean update = false; boolean update = false;
if (slot == PAPERDOLL_AGATHION1) if (slot == PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -42,10 +42,10 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDe
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.item.type.EtcItemType; import org.l2jmobius.gameserver.model.item.type.EtcItemType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillConditionScope; import org.l2jmobius.gameserver.model.skill.SkillConditionScope;
import org.l2jmobius.gameserver.model.variables.ItemVariables; import org.l2jmobius.gameserver.model.variables.ItemVariables;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -1019,33 +1019,33 @@ public class PlayerInventory extends Inventory
if (agathionSkills != null) if (agathionSkills != null)
{ {
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
// Add new skills. // Add new skills.
if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
} }
@@ -29,7 +29,7 @@ import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.ItemTable;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
@@ -69,49 +69,53 @@ public class AgathionData implements IXmlReader
final int enchant = set.getInt("enchant", 0); final int enchant = set.getInt("enchant", 0);
final Map<Integer, List<SkillHolder>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>(); final Map<Integer, List<Skill>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>();
final List<SkillHolder> mainSkillList = new ArrayList<>(); final List<Skill> mainSkillList = new ArrayList<>();
final String main = set.getString("mainSkill", ""); final String main = set.getString("mainSkill", "");
for (String skill : main.split(";")) for (String ids : main.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
mainSkillList.add(new SkillHolder(skillId, level)); mainSkillList.add(skill);
} }
mainSkills.put(enchant, mainSkillList); mainSkills.put(enchant, mainSkillList);
final Map<Integer, List<SkillHolder>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>(); final Map<Integer, List<Skill>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>();
final List<SkillHolder> subSkillList = new ArrayList<>(); final List<Skill> subSkillList = new ArrayList<>();
final String sub = set.getString("subSkill", ""); final String sub = set.getString("subSkill", "");
for (String skill : sub.split(";")) for (String ids : sub.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
subSkillList.add(new SkillHolder(skillId, level)); subSkillList.add(skill);
} }
subSkills.put(enchant, subSkillList); subSkills.put(enchant, subSkillList);
@@ -20,31 +20,33 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
*/ */
public class AgathionSkillHolder public class AgathionSkillHolder
{ {
private final Map<Integer, List<SkillHolder>> _mainSkill; private final Map<Integer, List<Skill>> _mainSkill;
private final Map<Integer, List<SkillHolder>> _subSkill; private final Map<Integer, List<Skill>> _subSkill;
public AgathionSkillHolder(Map<Integer, List<SkillHolder>> mainSkill, Map<Integer, List<SkillHolder>> subSkill) public AgathionSkillHolder(Map<Integer, List<Skill>> mainSkill, Map<Integer, List<Skill>> subSkill)
{ {
_mainSkill = mainSkill; _mainSkill = mainSkill;
_subSkill = subSkill; _subSkill = subSkill;
} }
public Map<Integer, List<SkillHolder>> getMainSkills() public Map<Integer, List<Skill>> getMainSkills()
{ {
return _mainSkill; return _mainSkill;
} }
public Map<Integer, List<SkillHolder>> getSubSkills() public Map<Integer, List<Skill>> getSubSkills()
{ {
return _subSkill; return _subSkill;
} }
public List<SkillHolder> getMainSkills(int enchantLevel) public List<Skill> getMainSkills(int enchantLevel)
{ {
if (!_mainSkill.containsKey(enchantLevel)) if (!_mainSkill.containsKey(enchantLevel))
{ {
@@ -53,7 +55,7 @@ public class AgathionSkillHolder
return _mainSkill.get(enchantLevel); return _mainSkill.get(enchantLevel);
} }
public List<SkillHolder> getSubSkills(int enchantLevel) public List<Skill> getSubSkills(int enchantLevel)
{ {
if (!_subSkill.containsKey(enchantLevel)) if (!_subSkill.containsKey(enchantLevel))
{ {
@@ -73,7 +73,6 @@ import org.l2jmobius.gameserver.model.events.impl.item.OnItemEnchantAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd; import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk; import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.item.Armor; import org.l2jmobius.gameserver.model.item.Armor;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
@@ -947,36 +946,36 @@ public class Item extends WorldObject
{ {
boolean update = false; boolean update = false;
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(_enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(_enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
// Add new skills. // Add new skills.
if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -54,7 +54,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUn
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone; import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone;
import org.l2jmobius.gameserver.model.item.appearance.AppearanceType; import org.l2jmobius.gameserver.model.item.appearance.AppearanceType;
@@ -1470,14 +1469,14 @@ public abstract class Inventory extends ItemContainer
if (agathionSkills != null) if (agathionSkills != null)
{ {
boolean update = false; boolean update = false;
for (SkillHolder holder : agathionSkills.getMainSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
if (update) if (update)
@@ -1517,23 +1516,23 @@ public abstract class Inventory extends ItemContainer
boolean update = false; boolean update = false;
if (slot == PAPERDOLL_AGATHION1) if (slot == PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -42,11 +42,11 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDe
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.Weapon; import org.l2jmobius.gameserver.model.item.Weapon;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.item.type.EtcItemType; import org.l2jmobius.gameserver.model.item.type.EtcItemType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillConditionScope; import org.l2jmobius.gameserver.model.skill.SkillConditionScope;
import org.l2jmobius.gameserver.model.variables.ItemVariables; import org.l2jmobius.gameserver.model.variables.ItemVariables;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -1020,33 +1020,33 @@ public class PlayerInventory extends Inventory
if (agathionSkills != null) if (agathionSkills != null)
{ {
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
// Add new skills. // Add new skills.
if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
} }
@@ -29,7 +29,7 @@ import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.ItemTable;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
@@ -69,49 +69,53 @@ public class AgathionData implements IXmlReader
final int enchant = set.getInt("enchant", 0); final int enchant = set.getInt("enchant", 0);
final Map<Integer, List<SkillHolder>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>(); final Map<Integer, List<Skill>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>();
final List<SkillHolder> mainSkillList = new ArrayList<>(); final List<Skill> mainSkillList = new ArrayList<>();
final String main = set.getString("mainSkill", ""); final String main = set.getString("mainSkill", "");
for (String skill : main.split(";")) for (String ids : main.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
mainSkillList.add(new SkillHolder(skillId, level)); mainSkillList.add(skill);
} }
mainSkills.put(enchant, mainSkillList); mainSkills.put(enchant, mainSkillList);
final Map<Integer, List<SkillHolder>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>(); final Map<Integer, List<Skill>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>();
final List<SkillHolder> subSkillList = new ArrayList<>(); final List<Skill> subSkillList = new ArrayList<>();
final String sub = set.getString("subSkill", ""); final String sub = set.getString("subSkill", "");
for (String skill : sub.split(";")) for (String ids : sub.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
subSkillList.add(new SkillHolder(skillId, level)); subSkillList.add(skill);
} }
subSkills.put(enchant, subSkillList); subSkills.put(enchant, subSkillList);
@@ -20,31 +20,33 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
*/ */
public class AgathionSkillHolder public class AgathionSkillHolder
{ {
private final Map<Integer, List<SkillHolder>> _mainSkill; private final Map<Integer, List<Skill>> _mainSkill;
private final Map<Integer, List<SkillHolder>> _subSkill; private final Map<Integer, List<Skill>> _subSkill;
public AgathionSkillHolder(Map<Integer, List<SkillHolder>> mainSkill, Map<Integer, List<SkillHolder>> subSkill) public AgathionSkillHolder(Map<Integer, List<Skill>> mainSkill, Map<Integer, List<Skill>> subSkill)
{ {
_mainSkill = mainSkill; _mainSkill = mainSkill;
_subSkill = subSkill; _subSkill = subSkill;
} }
public Map<Integer, List<SkillHolder>> getMainSkills() public Map<Integer, List<Skill>> getMainSkills()
{ {
return _mainSkill; return _mainSkill;
} }
public Map<Integer, List<SkillHolder>> getSubSkills() public Map<Integer, List<Skill>> getSubSkills()
{ {
return _subSkill; return _subSkill;
} }
public List<SkillHolder> getMainSkills(int enchantLevel) public List<Skill> getMainSkills(int enchantLevel)
{ {
if (!_mainSkill.containsKey(enchantLevel)) if (!_mainSkill.containsKey(enchantLevel))
{ {
@@ -53,7 +55,7 @@ public class AgathionSkillHolder
return _mainSkill.get(enchantLevel); return _mainSkill.get(enchantLevel);
} }
public List<SkillHolder> getSubSkills(int enchantLevel) public List<Skill> getSubSkills(int enchantLevel)
{ {
if (!_subSkill.containsKey(enchantLevel)) if (!_subSkill.containsKey(enchantLevel))
{ {
@@ -73,7 +73,6 @@ import org.l2jmobius.gameserver.model.events.impl.item.OnItemEnchantAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd; import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk; import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.item.Armor; import org.l2jmobius.gameserver.model.item.Armor;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
@@ -947,36 +946,36 @@ public class Item extends WorldObject
{ {
boolean update = false; boolean update = false;
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(_enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(_enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
// Add new skills. // Add new skills.
if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -54,7 +54,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUn
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone; import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone;
import org.l2jmobius.gameserver.model.item.appearance.AppearanceType; import org.l2jmobius.gameserver.model.item.appearance.AppearanceType;
@@ -1470,14 +1469,14 @@ public abstract class Inventory extends ItemContainer
if (agathionSkills != null) if (agathionSkills != null)
{ {
boolean update = false; boolean update = false;
for (SkillHolder holder : agathionSkills.getMainSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
if (update) if (update)
@@ -1517,23 +1516,23 @@ public abstract class Inventory extends ItemContainer
boolean update = false; boolean update = false;
if (slot == PAPERDOLL_AGATHION1) if (slot == PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -42,11 +42,11 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDe
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.Weapon; import org.l2jmobius.gameserver.model.item.Weapon;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.item.type.EtcItemType; import org.l2jmobius.gameserver.model.item.type.EtcItemType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillConditionScope; import org.l2jmobius.gameserver.model.skill.SkillConditionScope;
import org.l2jmobius.gameserver.model.variables.ItemVariables; import org.l2jmobius.gameserver.model.variables.ItemVariables;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -1020,33 +1020,33 @@ public class PlayerInventory extends Inventory
if (agathionSkills != null) if (agathionSkills != null)
{ {
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
// Add new skills. // Add new skills.
if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
} }
@@ -29,7 +29,7 @@ import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.ItemTable;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
@@ -69,49 +69,53 @@ public class AgathionData implements IXmlReader
final int enchant = set.getInt("enchant", 0); final int enchant = set.getInt("enchant", 0);
final Map<Integer, List<SkillHolder>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>(); final Map<Integer, List<Skill>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>();
final List<SkillHolder> mainSkillList = new ArrayList<>(); final List<Skill> mainSkillList = new ArrayList<>();
final String main = set.getString("mainSkill", ""); final String main = set.getString("mainSkill", "");
for (String skill : main.split(";")) for (String ids : main.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
mainSkillList.add(new SkillHolder(skillId, level)); mainSkillList.add(skill);
} }
mainSkills.put(enchant, mainSkillList); mainSkills.put(enchant, mainSkillList);
final Map<Integer, List<SkillHolder>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>(); final Map<Integer, List<Skill>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>();
final List<SkillHolder> subSkillList = new ArrayList<>(); final List<Skill> subSkillList = new ArrayList<>();
final String sub = set.getString("subSkill", ""); final String sub = set.getString("subSkill", "");
for (String skill : sub.split(";")) for (String ids : sub.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
subSkillList.add(new SkillHolder(skillId, level)); subSkillList.add(skill);
} }
subSkills.put(enchant, subSkillList); subSkills.put(enchant, subSkillList);
@@ -20,31 +20,33 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
*/ */
public class AgathionSkillHolder public class AgathionSkillHolder
{ {
private final Map<Integer, List<SkillHolder>> _mainSkill; private final Map<Integer, List<Skill>> _mainSkill;
private final Map<Integer, List<SkillHolder>> _subSkill; private final Map<Integer, List<Skill>> _subSkill;
public AgathionSkillHolder(Map<Integer, List<SkillHolder>> mainSkill, Map<Integer, List<SkillHolder>> subSkill) public AgathionSkillHolder(Map<Integer, List<Skill>> mainSkill, Map<Integer, List<Skill>> subSkill)
{ {
_mainSkill = mainSkill; _mainSkill = mainSkill;
_subSkill = subSkill; _subSkill = subSkill;
} }
public Map<Integer, List<SkillHolder>> getMainSkills() public Map<Integer, List<Skill>> getMainSkills()
{ {
return _mainSkill; return _mainSkill;
} }
public Map<Integer, List<SkillHolder>> getSubSkills() public Map<Integer, List<Skill>> getSubSkills()
{ {
return _subSkill; return _subSkill;
} }
public List<SkillHolder> getMainSkills(int enchantLevel) public List<Skill> getMainSkills(int enchantLevel)
{ {
if (!_mainSkill.containsKey(enchantLevel)) if (!_mainSkill.containsKey(enchantLevel))
{ {
@@ -53,7 +55,7 @@ public class AgathionSkillHolder
return _mainSkill.get(enchantLevel); return _mainSkill.get(enchantLevel);
} }
public List<SkillHolder> getSubSkills(int enchantLevel) public List<Skill> getSubSkills(int enchantLevel)
{ {
if (!_subSkill.containsKey(enchantLevel)) if (!_subSkill.containsKey(enchantLevel))
{ {
@@ -73,7 +73,6 @@ import org.l2jmobius.gameserver.model.events.impl.item.OnItemEnchantAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd; import org.l2jmobius.gameserver.model.events.impl.item.OnItemSoulCrystalAdd;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk; import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.item.Armor; import org.l2jmobius.gameserver.model.item.Armor;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
@@ -947,36 +946,36 @@ public class Item extends WorldObject
{ {
boolean update = false; boolean update = false;
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(_enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(_enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
// Add new skills. // Add new skills.
if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -55,7 +55,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUn
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone; import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone;
import org.l2jmobius.gameserver.model.item.appearance.AppearanceType; import org.l2jmobius.gameserver.model.item.appearance.AppearanceType;
@@ -1481,14 +1480,14 @@ public abstract class Inventory extends ItemContainer
if (agathionSkills != null) if (agathionSkills != null)
{ {
boolean update = false; boolean update = false;
for (SkillHolder holder : agathionSkills.getMainSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
if (update) if (update)
@@ -1528,23 +1527,23 @@ public abstract class Inventory extends ItemContainer
boolean update = false; boolean update = false;
if (slot == PAPERDOLL_AGATHION1) if (slot == PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -42,11 +42,11 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDe
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.Weapon; import org.l2jmobius.gameserver.model.item.Weapon;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.item.type.EtcItemType; import org.l2jmobius.gameserver.model.item.type.EtcItemType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillConditionScope; import org.l2jmobius.gameserver.model.skill.SkillConditionScope;
import org.l2jmobius.gameserver.model.variables.ItemVariables; import org.l2jmobius.gameserver.model.variables.ItemVariables;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -1020,33 +1020,33 @@ public class PlayerInventory extends Inventory
if (agathionSkills != null) if (agathionSkills != null)
{ {
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
// Add new skills. // Add new skills.
if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
} }
@@ -29,7 +29,7 @@ import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.ItemTable;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
@@ -69,49 +69,53 @@ public class AgathionData implements IXmlReader
final int enchant = set.getInt("enchant", 0); final int enchant = set.getInt("enchant", 0);
final Map<Integer, List<SkillHolder>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>(); final Map<Integer, List<Skill>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>();
final List<SkillHolder> mainSkillList = new ArrayList<>(); final List<Skill> mainSkillList = new ArrayList<>();
final String main = set.getString("mainSkill", ""); final String main = set.getString("mainSkill", "");
for (String skill : main.split(";")) for (String ids : main.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
mainSkillList.add(new SkillHolder(skillId, level)); mainSkillList.add(skill);
} }
mainSkills.put(enchant, mainSkillList); mainSkills.put(enchant, mainSkillList);
final Map<Integer, List<SkillHolder>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>(); final Map<Integer, List<Skill>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>();
final List<SkillHolder> subSkillList = new ArrayList<>(); final List<Skill> subSkillList = new ArrayList<>();
final String sub = set.getString("subSkill", ""); final String sub = set.getString("subSkill", "");
for (String skill : sub.split(";")) for (String ids : sub.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
subSkillList.add(new SkillHolder(skillId, level)); subSkillList.add(skill);
} }
subSkills.put(enchant, subSkillList); subSkills.put(enchant, subSkillList);
@@ -20,31 +20,33 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
*/ */
public class AgathionSkillHolder public class AgathionSkillHolder
{ {
private final Map<Integer, List<SkillHolder>> _mainSkill; private final Map<Integer, List<Skill>> _mainSkill;
private final Map<Integer, List<SkillHolder>> _subSkill; private final Map<Integer, List<Skill>> _subSkill;
public AgathionSkillHolder(Map<Integer, List<SkillHolder>> mainSkill, Map<Integer, List<SkillHolder>> subSkill) public AgathionSkillHolder(Map<Integer, List<Skill>> mainSkill, Map<Integer, List<Skill>> subSkill)
{ {
_mainSkill = mainSkill; _mainSkill = mainSkill;
_subSkill = subSkill; _subSkill = subSkill;
} }
public Map<Integer, List<SkillHolder>> getMainSkills() public Map<Integer, List<Skill>> getMainSkills()
{ {
return _mainSkill; return _mainSkill;
} }
public Map<Integer, List<SkillHolder>> getSubSkills() public Map<Integer, List<Skill>> getSubSkills()
{ {
return _subSkill; return _subSkill;
} }
public List<SkillHolder> getMainSkills(int enchantLevel) public List<Skill> getMainSkills(int enchantLevel)
{ {
if (!_mainSkill.containsKey(enchantLevel)) if (!_mainSkill.containsKey(enchantLevel))
{ {
@@ -53,7 +55,7 @@ public class AgathionSkillHolder
return _mainSkill.get(enchantLevel); return _mainSkill.get(enchantLevel);
} }
public List<SkillHolder> getSubSkills(int enchantLevel) public List<Skill> getSubSkills(int enchantLevel)
{ {
if (!_subSkill.containsKey(enchantLevel)) if (!_subSkill.containsKey(enchantLevel))
{ {
@@ -70,7 +70,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemPi
import org.l2jmobius.gameserver.model.events.impl.item.OnItemBypassEvent; import org.l2jmobius.gameserver.model.events.impl.item.OnItemBypassEvent;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk; import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.item.Armor; import org.l2jmobius.gameserver.model.item.Armor;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
@@ -944,36 +943,36 @@ public class Item extends WorldObject
{ {
boolean update = false; boolean update = false;
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(_enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(_enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
// Add new skills. // Add new skills.
if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -54,7 +54,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUn
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone; import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone;
@@ -1414,14 +1413,14 @@ public abstract class Inventory extends ItemContainer
if (agathionSkills != null) if (agathionSkills != null)
{ {
boolean update = false; boolean update = false;
for (SkillHolder holder : agathionSkills.getMainSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
if (update) if (update)
@@ -1461,23 +1460,23 @@ public abstract class Inventory extends ItemContainer
boolean update = false; boolean update = false;
if (slot == PAPERDOLL_AGATHION1) if (slot == PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -42,10 +42,10 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDe
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.item.type.EtcItemType; import org.l2jmobius.gameserver.model.item.type.EtcItemType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillConditionScope; import org.l2jmobius.gameserver.model.skill.SkillConditionScope;
import org.l2jmobius.gameserver.model.variables.ItemVariables; import org.l2jmobius.gameserver.model.variables.ItemVariables;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -1095,33 +1095,33 @@ public class PlayerInventory extends Inventory
if (agathionSkills != null) if (agathionSkills != null)
{ {
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
// Add new skills. // Add new skills.
if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
} }
@@ -29,7 +29,7 @@ import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.ItemTable;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
@@ -69,49 +69,53 @@ public class AgathionData implements IXmlReader
final int enchant = set.getInt("enchant", 0); final int enchant = set.getInt("enchant", 0);
final Map<Integer, List<SkillHolder>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>(); final Map<Integer, List<Skill>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>();
final List<SkillHolder> mainSkillList = new ArrayList<>(); final List<Skill> mainSkillList = new ArrayList<>();
final String main = set.getString("mainSkill", ""); final String main = set.getString("mainSkill", "");
for (String skill : main.split(";")) for (String ids : main.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
mainSkillList.add(new SkillHolder(skillId, level)); mainSkillList.add(skill);
} }
mainSkills.put(enchant, mainSkillList); mainSkills.put(enchant, mainSkillList);
final Map<Integer, List<SkillHolder>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>(); final Map<Integer, List<Skill>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>();
final List<SkillHolder> subSkillList = new ArrayList<>(); final List<Skill> subSkillList = new ArrayList<>();
final String sub = set.getString("subSkill", ""); final String sub = set.getString("subSkill", "");
for (String skill : sub.split(";")) for (String ids : sub.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
subSkillList.add(new SkillHolder(skillId, level)); subSkillList.add(skill);
} }
subSkills.put(enchant, subSkillList); subSkills.put(enchant, subSkillList);
@@ -20,31 +20,33 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
*/ */
public class AgathionSkillHolder public class AgathionSkillHolder
{ {
private final Map<Integer, List<SkillHolder>> _mainSkill; private final Map<Integer, List<Skill>> _mainSkill;
private final Map<Integer, List<SkillHolder>> _subSkill; private final Map<Integer, List<Skill>> _subSkill;
public AgathionSkillHolder(Map<Integer, List<SkillHolder>> mainSkill, Map<Integer, List<SkillHolder>> subSkill) public AgathionSkillHolder(Map<Integer, List<Skill>> mainSkill, Map<Integer, List<Skill>> subSkill)
{ {
_mainSkill = mainSkill; _mainSkill = mainSkill;
_subSkill = subSkill; _subSkill = subSkill;
} }
public Map<Integer, List<SkillHolder>> getMainSkills() public Map<Integer, List<Skill>> getMainSkills()
{ {
return _mainSkill; return _mainSkill;
} }
public Map<Integer, List<SkillHolder>> getSubSkills() public Map<Integer, List<Skill>> getSubSkills()
{ {
return _subSkill; return _subSkill;
} }
public List<SkillHolder> getMainSkills(int enchantLevel) public List<Skill> getMainSkills(int enchantLevel)
{ {
if (!_mainSkill.containsKey(enchantLevel)) if (!_mainSkill.containsKey(enchantLevel))
{ {
@@ -53,7 +55,7 @@ public class AgathionSkillHolder
return _mainSkill.get(enchantLevel); return _mainSkill.get(enchantLevel);
} }
public List<SkillHolder> getSubSkills(int enchantLevel) public List<Skill> getSubSkills(int enchantLevel)
{ {
if (!_subSkill.containsKey(enchantLevel)) if (!_subSkill.containsKey(enchantLevel))
{ {
@@ -70,7 +70,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemPi
import org.l2jmobius.gameserver.model.events.impl.item.OnItemBypassEvent; import org.l2jmobius.gameserver.model.events.impl.item.OnItemBypassEvent;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk; import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.item.Armor; import org.l2jmobius.gameserver.model.item.Armor;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
@@ -944,36 +943,36 @@ public class Item extends WorldObject
{ {
boolean update = false; boolean update = false;
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(_enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(_enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
// Add new skills. // Add new skills.
if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -54,7 +54,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUn
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone; import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone;
@@ -1496,14 +1495,14 @@ public abstract class Inventory extends ItemContainer
if (agathionSkills != null) if (agathionSkills != null)
{ {
boolean update = false; boolean update = false;
for (SkillHolder holder : agathionSkills.getMainSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
if (update) if (update)
@@ -1543,23 +1542,23 @@ public abstract class Inventory extends ItemContainer
boolean update = false; boolean update = false;
if (slot == PAPERDOLL_AGATHION1) if (slot == PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -42,10 +42,10 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDe
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.item.type.EtcItemType; import org.l2jmobius.gameserver.model.item.type.EtcItemType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillConditionScope; import org.l2jmobius.gameserver.model.skill.SkillConditionScope;
import org.l2jmobius.gameserver.model.variables.ItemVariables; import org.l2jmobius.gameserver.model.variables.ItemVariables;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -1095,33 +1095,33 @@ public class PlayerInventory extends Inventory
if (agathionSkills != null) if (agathionSkills != null)
{ {
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
// Add new skills. // Add new skills.
if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
} }
@@ -29,7 +29,7 @@ import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.ItemTable;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
@@ -69,49 +69,53 @@ public class AgathionData implements IXmlReader
final int enchant = set.getInt("enchant", 0); final int enchant = set.getInt("enchant", 0);
final Map<Integer, List<SkillHolder>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>(); final Map<Integer, List<Skill>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>();
final List<SkillHolder> mainSkillList = new ArrayList<>(); final List<Skill> mainSkillList = new ArrayList<>();
final String main = set.getString("mainSkill", ""); final String main = set.getString("mainSkill", "");
for (String skill : main.split(";")) for (String ids : main.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
mainSkillList.add(new SkillHolder(skillId, level)); mainSkillList.add(skill);
} }
mainSkills.put(enchant, mainSkillList); mainSkills.put(enchant, mainSkillList);
final Map<Integer, List<SkillHolder>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>(); final Map<Integer, List<Skill>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>();
final List<SkillHolder> subSkillList = new ArrayList<>(); final List<Skill> subSkillList = new ArrayList<>();
final String sub = set.getString("subSkill", ""); final String sub = set.getString("subSkill", "");
for (String skill : sub.split(";")) for (String ids : sub.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
subSkillList.add(new SkillHolder(skillId, level)); subSkillList.add(skill);
} }
subSkills.put(enchant, subSkillList); subSkills.put(enchant, subSkillList);
@@ -20,31 +20,33 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
*/ */
public class AgathionSkillHolder public class AgathionSkillHolder
{ {
private final Map<Integer, List<SkillHolder>> _mainSkill; private final Map<Integer, List<Skill>> _mainSkill;
private final Map<Integer, List<SkillHolder>> _subSkill; private final Map<Integer, List<Skill>> _subSkill;
public AgathionSkillHolder(Map<Integer, List<SkillHolder>> mainSkill, Map<Integer, List<SkillHolder>> subSkill) public AgathionSkillHolder(Map<Integer, List<Skill>> mainSkill, Map<Integer, List<Skill>> subSkill)
{ {
_mainSkill = mainSkill; _mainSkill = mainSkill;
_subSkill = subSkill; _subSkill = subSkill;
} }
public Map<Integer, List<SkillHolder>> getMainSkills() public Map<Integer, List<Skill>> getMainSkills()
{ {
return _mainSkill; return _mainSkill;
} }
public Map<Integer, List<SkillHolder>> getSubSkills() public Map<Integer, List<Skill>> getSubSkills()
{ {
return _subSkill; return _subSkill;
} }
public List<SkillHolder> getMainSkills(int enchantLevel) public List<Skill> getMainSkills(int enchantLevel)
{ {
if (!_mainSkill.containsKey(enchantLevel)) if (!_mainSkill.containsKey(enchantLevel))
{ {
@@ -53,7 +55,7 @@ public class AgathionSkillHolder
return _mainSkill.get(enchantLevel); return _mainSkill.get(enchantLevel);
} }
public List<SkillHolder> getSubSkills(int enchantLevel) public List<Skill> getSubSkills(int enchantLevel)
{ {
if (!_subSkill.containsKey(enchantLevel)) if (!_subSkill.containsKey(enchantLevel))
{ {
@@ -70,7 +70,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemPi
import org.l2jmobius.gameserver.model.events.impl.item.OnItemBypassEvent; import org.l2jmobius.gameserver.model.events.impl.item.OnItemBypassEvent;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk; import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.item.Armor; import org.l2jmobius.gameserver.model.item.Armor;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
@@ -944,36 +943,36 @@ public class Item extends WorldObject
{ {
boolean update = false; boolean update = false;
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(_enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(_enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
// Add new skills. // Add new skills.
if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -54,7 +54,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUn
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone; import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone;
@@ -1496,14 +1495,14 @@ public abstract class Inventory extends ItemContainer
if (agathionSkills != null) if (agathionSkills != null)
{ {
boolean update = false; boolean update = false;
for (SkillHolder holder : agathionSkills.getMainSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
if (update) if (update)
@@ -1543,23 +1542,23 @@ public abstract class Inventory extends ItemContainer
boolean update = false; boolean update = false;
if (slot == PAPERDOLL_AGATHION1) if (slot == PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -42,10 +42,10 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDe
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.item.type.EtcItemType; import org.l2jmobius.gameserver.model.item.type.EtcItemType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillConditionScope; import org.l2jmobius.gameserver.model.skill.SkillConditionScope;
import org.l2jmobius.gameserver.model.variables.ItemVariables; import org.l2jmobius.gameserver.model.variables.ItemVariables;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -1095,33 +1095,33 @@ public class PlayerInventory extends Inventory
if (agathionSkills != null) if (agathionSkills != null)
{ {
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
// Add new skills. // Add new skills.
if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
} }
@@ -29,7 +29,7 @@ import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.ItemTable;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
@@ -69,49 +69,53 @@ public class AgathionData implements IXmlReader
final int enchant = set.getInt("enchant", 0); final int enchant = set.getInt("enchant", 0);
final Map<Integer, List<SkillHolder>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>(); final Map<Integer, List<Skill>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>();
final List<SkillHolder> mainSkillList = new ArrayList<>(); final List<Skill> mainSkillList = new ArrayList<>();
final String main = set.getString("mainSkill", ""); final String main = set.getString("mainSkill", "");
for (String skill : main.split(";")) for (String ids : main.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
mainSkillList.add(new SkillHolder(skillId, level)); mainSkillList.add(skill);
} }
mainSkills.put(enchant, mainSkillList); mainSkills.put(enchant, mainSkillList);
final Map<Integer, List<SkillHolder>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>(); final Map<Integer, List<Skill>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>();
final List<SkillHolder> subSkillList = new ArrayList<>(); final List<Skill> subSkillList = new ArrayList<>();
final String sub = set.getString("subSkill", ""); final String sub = set.getString("subSkill", "");
for (String skill : sub.split(";")) for (String ids : sub.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
subSkillList.add(new SkillHolder(skillId, level)); subSkillList.add(skill);
} }
subSkills.put(enchant, subSkillList); subSkills.put(enchant, subSkillList);
@@ -20,31 +20,33 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
*/ */
public class AgathionSkillHolder public class AgathionSkillHolder
{ {
private final Map<Integer, List<SkillHolder>> _mainSkill; private final Map<Integer, List<Skill>> _mainSkill;
private final Map<Integer, List<SkillHolder>> _subSkill; private final Map<Integer, List<Skill>> _subSkill;
public AgathionSkillHolder(Map<Integer, List<SkillHolder>> mainSkill, Map<Integer, List<SkillHolder>> subSkill) public AgathionSkillHolder(Map<Integer, List<Skill>> mainSkill, Map<Integer, List<Skill>> subSkill)
{ {
_mainSkill = mainSkill; _mainSkill = mainSkill;
_subSkill = subSkill; _subSkill = subSkill;
} }
public Map<Integer, List<SkillHolder>> getMainSkills() public Map<Integer, List<Skill>> getMainSkills()
{ {
return _mainSkill; return _mainSkill;
} }
public Map<Integer, List<SkillHolder>> getSubSkills() public Map<Integer, List<Skill>> getSubSkills()
{ {
return _subSkill; return _subSkill;
} }
public List<SkillHolder> getMainSkills(int enchantLevel) public List<Skill> getMainSkills(int enchantLevel)
{ {
if (!_mainSkill.containsKey(enchantLevel)) if (!_mainSkill.containsKey(enchantLevel))
{ {
@@ -53,7 +55,7 @@ public class AgathionSkillHolder
return _mainSkill.get(enchantLevel); return _mainSkill.get(enchantLevel);
} }
public List<SkillHolder> getSubSkills(int enchantLevel) public List<Skill> getSubSkills(int enchantLevel)
{ {
if (!_subSkill.containsKey(enchantLevel)) if (!_subSkill.containsKey(enchantLevel))
{ {
@@ -70,7 +70,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemPi
import org.l2jmobius.gameserver.model.events.impl.item.OnItemBypassEvent; import org.l2jmobius.gameserver.model.events.impl.item.OnItemBypassEvent;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk; import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.item.Armor; import org.l2jmobius.gameserver.model.item.Armor;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
@@ -944,36 +943,36 @@ public class Item extends WorldObject
{ {
boolean update = false; boolean update = false;
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(_enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(_enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
// Add new skills. // Add new skills.
if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -54,7 +54,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUn
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone; import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone;
@@ -1490,14 +1489,14 @@ public abstract class Inventory extends ItemContainer
if (agathionSkills != null) if (agathionSkills != null)
{ {
boolean update = false; boolean update = false;
for (SkillHolder holder : agathionSkills.getMainSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
if (update) if (update)
@@ -1537,23 +1536,23 @@ public abstract class Inventory extends ItemContainer
boolean update = false; boolean update = false;
if (slot == PAPERDOLL_AGATHION1) if (slot == PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -42,10 +42,10 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDe
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.item.type.EtcItemType; import org.l2jmobius.gameserver.model.item.type.EtcItemType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillConditionScope; import org.l2jmobius.gameserver.model.skill.SkillConditionScope;
import org.l2jmobius.gameserver.model.variables.ItemVariables; import org.l2jmobius.gameserver.model.variables.ItemVariables;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -1095,33 +1095,33 @@ public class PlayerInventory extends Inventory
if (agathionSkills != null) if (agathionSkills != null)
{ {
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
// Add new skills. // Add new skills.
if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
} }
@@ -29,7 +29,7 @@ import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.ItemTable;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
@@ -69,49 +69,53 @@ public class AgathionData implements IXmlReader
final int enchant = set.getInt("enchant", 0); final int enchant = set.getInt("enchant", 0);
final Map<Integer, List<SkillHolder>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>(); final Map<Integer, List<Skill>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>();
final List<SkillHolder> mainSkillList = new ArrayList<>(); final List<Skill> mainSkillList = new ArrayList<>();
final String main = set.getString("mainSkill", ""); final String main = set.getString("mainSkill", "");
for (String skill : main.split(";")) for (String ids : main.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
mainSkillList.add(new SkillHolder(skillId, level)); mainSkillList.add(skill);
} }
mainSkills.put(enchant, mainSkillList); mainSkills.put(enchant, mainSkillList);
final Map<Integer, List<SkillHolder>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>(); final Map<Integer, List<Skill>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>();
final List<SkillHolder> subSkillList = new ArrayList<>(); final List<Skill> subSkillList = new ArrayList<>();
final String sub = set.getString("subSkill", ""); final String sub = set.getString("subSkill", "");
for (String skill : sub.split(";")) for (String ids : sub.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
subSkillList.add(new SkillHolder(skillId, level)); subSkillList.add(skill);
} }
subSkills.put(enchant, subSkillList); subSkills.put(enchant, subSkillList);
@@ -20,31 +20,33 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
*/ */
public class AgathionSkillHolder public class AgathionSkillHolder
{ {
private final Map<Integer, List<SkillHolder>> _mainSkill; private final Map<Integer, List<Skill>> _mainSkill;
private final Map<Integer, List<SkillHolder>> _subSkill; private final Map<Integer, List<Skill>> _subSkill;
public AgathionSkillHolder(Map<Integer, List<SkillHolder>> mainSkill, Map<Integer, List<SkillHolder>> subSkill) public AgathionSkillHolder(Map<Integer, List<Skill>> mainSkill, Map<Integer, List<Skill>> subSkill)
{ {
_mainSkill = mainSkill; _mainSkill = mainSkill;
_subSkill = subSkill; _subSkill = subSkill;
} }
public Map<Integer, List<SkillHolder>> getMainSkills() public Map<Integer, List<Skill>> getMainSkills()
{ {
return _mainSkill; return _mainSkill;
} }
public Map<Integer, List<SkillHolder>> getSubSkills() public Map<Integer, List<Skill>> getSubSkills()
{ {
return _subSkill; return _subSkill;
} }
public List<SkillHolder> getMainSkills(int enchantLevel) public List<Skill> getMainSkills(int enchantLevel)
{ {
if (!_mainSkill.containsKey(enchantLevel)) if (!_mainSkill.containsKey(enchantLevel))
{ {
@@ -53,7 +55,7 @@ public class AgathionSkillHolder
return _mainSkill.get(enchantLevel); return _mainSkill.get(enchantLevel);
} }
public List<SkillHolder> getSubSkills(int enchantLevel) public List<Skill> getSubSkills(int enchantLevel)
{ {
if (!_subSkill.containsKey(enchantLevel)) if (!_subSkill.containsKey(enchantLevel))
{ {
@@ -70,7 +70,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemPi
import org.l2jmobius.gameserver.model.events.impl.item.OnItemBypassEvent; import org.l2jmobius.gameserver.model.events.impl.item.OnItemBypassEvent;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk; import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.item.Armor; import org.l2jmobius.gameserver.model.item.Armor;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
@@ -947,36 +946,36 @@ public class Item extends WorldObject
{ {
boolean update = false; boolean update = false;
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(_enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(_enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
// Add new skills. // Add new skills.
if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -54,7 +54,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUn
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone; import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone;
import org.l2jmobius.gameserver.model.item.appearance.AppearanceType; import org.l2jmobius.gameserver.model.item.appearance.AppearanceType;
@@ -1598,14 +1597,14 @@ public abstract class Inventory extends ItemContainer
if (agathionSkills != null) if (agathionSkills != null)
{ {
boolean update = false; boolean update = false;
for (SkillHolder holder : agathionSkills.getMainSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
if (update) if (update)
@@ -1645,23 +1644,23 @@ public abstract class Inventory extends ItemContainer
boolean update = false; boolean update = false;
if (slot == PAPERDOLL_AGATHION1) if (slot == PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -42,11 +42,11 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDe
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.Weapon; import org.l2jmobius.gameserver.model.item.Weapon;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.item.type.EtcItemType; import org.l2jmobius.gameserver.model.item.type.EtcItemType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillConditionScope; import org.l2jmobius.gameserver.model.skill.SkillConditionScope;
import org.l2jmobius.gameserver.model.variables.ItemVariables; import org.l2jmobius.gameserver.model.variables.ItemVariables;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -1027,33 +1027,33 @@ public class PlayerInventory extends Inventory
if (agathionSkills != null) if (agathionSkills != null)
{ {
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
// Add new skills. // Add new skills.
if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
} }
@@ -29,7 +29,7 @@ import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.ItemTable;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
@@ -69,49 +69,53 @@ public class AgathionData implements IXmlReader
final int enchant = set.getInt("enchant", 0); final int enchant = set.getInt("enchant", 0);
final Map<Integer, List<SkillHolder>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>(); final Map<Integer, List<Skill>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>();
final List<SkillHolder> mainSkillList = new ArrayList<>(); final List<Skill> mainSkillList = new ArrayList<>();
final String main = set.getString("mainSkill", ""); final String main = set.getString("mainSkill", "");
for (String skill : main.split(";")) for (String ids : main.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
mainSkillList.add(new SkillHolder(skillId, level)); mainSkillList.add(skill);
} }
mainSkills.put(enchant, mainSkillList); mainSkills.put(enchant, mainSkillList);
final Map<Integer, List<SkillHolder>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>(); final Map<Integer, List<Skill>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>();
final List<SkillHolder> subSkillList = new ArrayList<>(); final List<Skill> subSkillList = new ArrayList<>();
final String sub = set.getString("subSkill", ""); final String sub = set.getString("subSkill", "");
for (String skill : sub.split(";")) for (String ids : sub.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
subSkillList.add(new SkillHolder(skillId, level)); subSkillList.add(skill);
} }
subSkills.put(enchant, subSkillList); subSkills.put(enchant, subSkillList);
@@ -20,31 +20,33 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
*/ */
public class AgathionSkillHolder public class AgathionSkillHolder
{ {
private final Map<Integer, List<SkillHolder>> _mainSkill; private final Map<Integer, List<Skill>> _mainSkill;
private final Map<Integer, List<SkillHolder>> _subSkill; private final Map<Integer, List<Skill>> _subSkill;
public AgathionSkillHolder(Map<Integer, List<SkillHolder>> mainSkill, Map<Integer, List<SkillHolder>> subSkill) public AgathionSkillHolder(Map<Integer, List<Skill>> mainSkill, Map<Integer, List<Skill>> subSkill)
{ {
_mainSkill = mainSkill; _mainSkill = mainSkill;
_subSkill = subSkill; _subSkill = subSkill;
} }
public Map<Integer, List<SkillHolder>> getMainSkills() public Map<Integer, List<Skill>> getMainSkills()
{ {
return _mainSkill; return _mainSkill;
} }
public Map<Integer, List<SkillHolder>> getSubSkills() public Map<Integer, List<Skill>> getSubSkills()
{ {
return _subSkill; return _subSkill;
} }
public List<SkillHolder> getMainSkills(int enchantLevel) public List<Skill> getMainSkills(int enchantLevel)
{ {
if (!_mainSkill.containsKey(enchantLevel)) if (!_mainSkill.containsKey(enchantLevel))
{ {
@@ -53,7 +55,7 @@ public class AgathionSkillHolder
return _mainSkill.get(enchantLevel); return _mainSkill.get(enchantLevel);
} }
public List<SkillHolder> getSubSkills(int enchantLevel) public List<Skill> getSubSkills(int enchantLevel)
{ {
if (!_subSkill.containsKey(enchantLevel)) if (!_subSkill.containsKey(enchantLevel))
{ {
@@ -70,7 +70,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemPi
import org.l2jmobius.gameserver.model.events.impl.item.OnItemBypassEvent; import org.l2jmobius.gameserver.model.events.impl.item.OnItemBypassEvent;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk; import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.item.Armor; import org.l2jmobius.gameserver.model.item.Armor;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
@@ -947,36 +946,36 @@ public class Item extends WorldObject
{ {
boolean update = false; boolean update = false;
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(_enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(_enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
// Add new skills. // Add new skills.
if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -54,7 +54,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUn
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone; import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone;
import org.l2jmobius.gameserver.model.item.appearance.AppearanceType; import org.l2jmobius.gameserver.model.item.appearance.AppearanceType;
@@ -1607,14 +1606,14 @@ public abstract class Inventory extends ItemContainer
if (agathionSkills != null) if (agathionSkills != null)
{ {
boolean update = false; boolean update = false;
for (SkillHolder holder : agathionSkills.getMainSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
if (update) if (update)
@@ -1654,23 +1653,23 @@ public abstract class Inventory extends ItemContainer
boolean update = false; boolean update = false;
if (slot == PAPERDOLL_AGATHION1) if (slot == PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -42,11 +42,11 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDe
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.Weapon; import org.l2jmobius.gameserver.model.item.Weapon;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.item.type.EtcItemType; import org.l2jmobius.gameserver.model.item.type.EtcItemType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillConditionScope; import org.l2jmobius.gameserver.model.skill.SkillConditionScope;
import org.l2jmobius.gameserver.model.variables.ItemVariables; import org.l2jmobius.gameserver.model.variables.ItemVariables;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -1027,33 +1027,33 @@ public class PlayerInventory extends Inventory
if (agathionSkills != null) if (agathionSkills != null)
{ {
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
// Add new skills. // Add new skills.
if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
} }
@@ -29,7 +29,7 @@ import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.ItemTable;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
@@ -69,49 +69,53 @@ public class AgathionData implements IXmlReader
final int enchant = set.getInt("enchant", 0); final int enchant = set.getInt("enchant", 0);
final Map<Integer, List<SkillHolder>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>(); final Map<Integer, List<Skill>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>();
final List<SkillHolder> mainSkillList = new ArrayList<>(); final List<Skill> mainSkillList = new ArrayList<>();
final String main = set.getString("mainSkill", ""); final String main = set.getString("mainSkill", "");
for (String skill : main.split(";")) for (String ids : main.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
mainSkillList.add(new SkillHolder(skillId, level)); mainSkillList.add(skill);
} }
mainSkills.put(enchant, mainSkillList); mainSkills.put(enchant, mainSkillList);
final Map<Integer, List<SkillHolder>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>(); final Map<Integer, List<Skill>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>();
final List<SkillHolder> subSkillList = new ArrayList<>(); final List<Skill> subSkillList = new ArrayList<>();
final String sub = set.getString("subSkill", ""); final String sub = set.getString("subSkill", "");
for (String skill : sub.split(";")) for (String ids : sub.split(";"))
{ {
if (skill.isEmpty()) if (ids.isEmpty())
{ {
continue; continue;
} }
final String[] split = skill.split(","); final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]); final int skillId = Integer.parseInt(split[0]);
final int level = Integer.parseInt(split[1]); final int level = Integer.parseInt(split[1]);
if (SkillData.getInstance().getSkill(skillId, level) == null)
final Skill skill = SkillData.getInstance().getSkill(skillId, level);
if (skill == null)
{ {
LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + "."); LOGGER.info(getClass().getSimpleName() + ": Could not find agathion skill id " + skillId + ".");
return; return;
} }
subSkillList.add(new SkillHolder(skillId, level)); subSkillList.add(skill);
} }
subSkills.put(enchant, subSkillList); subSkills.put(enchant, subSkillList);
@@ -20,31 +20,33 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.l2jmobius.gameserver.model.skill.Skill;
/** /**
* @author Mobius * @author Mobius
*/ */
public class AgathionSkillHolder public class AgathionSkillHolder
{ {
private final Map<Integer, List<SkillHolder>> _mainSkill; private final Map<Integer, List<Skill>> _mainSkill;
private final Map<Integer, List<SkillHolder>> _subSkill; private final Map<Integer, List<Skill>> _subSkill;
public AgathionSkillHolder(Map<Integer, List<SkillHolder>> mainSkill, Map<Integer, List<SkillHolder>> subSkill) public AgathionSkillHolder(Map<Integer, List<Skill>> mainSkill, Map<Integer, List<Skill>> subSkill)
{ {
_mainSkill = mainSkill; _mainSkill = mainSkill;
_subSkill = subSkill; _subSkill = subSkill;
} }
public Map<Integer, List<SkillHolder>> getMainSkills() public Map<Integer, List<Skill>> getMainSkills()
{ {
return _mainSkill; return _mainSkill;
} }
public Map<Integer, List<SkillHolder>> getSubSkills() public Map<Integer, List<Skill>> getSubSkills()
{ {
return _subSkill; return _subSkill;
} }
public List<SkillHolder> getMainSkills(int enchantLevel) public List<Skill> getMainSkills(int enchantLevel)
{ {
if (!_mainSkill.containsKey(enchantLevel)) if (!_mainSkill.containsKey(enchantLevel))
{ {
@@ -53,7 +55,7 @@ public class AgathionSkillHolder
return _mainSkill.get(enchantLevel); return _mainSkill.get(enchantLevel);
} }
public List<SkillHolder> getSubSkills(int enchantLevel) public List<Skill> getSubSkills(int enchantLevel)
{ {
if (!_subSkill.containsKey(enchantLevel)) if (!_subSkill.containsKey(enchantLevel))
{ {
@@ -70,7 +70,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemPi
import org.l2jmobius.gameserver.model.events.impl.item.OnItemBypassEvent; import org.l2jmobius.gameserver.model.events.impl.item.OnItemBypassEvent;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk; import org.l2jmobius.gameserver.model.events.impl.item.OnItemTalk;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.item.Armor; import org.l2jmobius.gameserver.model.item.Armor;
import org.l2jmobius.gameserver.model.item.EtcItem; import org.l2jmobius.gameserver.model.item.EtcItem;
@@ -947,36 +946,36 @@ public class Item extends WorldObject
{ {
boolean update = false; boolean update = false;
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(_enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(_enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(_enchantLevel))
{ {
getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
// Add new skills. // Add new skills.
if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(enchantLevel)) for (Skill skill : agathionSkills.getMainSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(enchantLevel)) for (Skill skill : agathionSkills.getSubSkills(enchantLevel))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getActingPlayer(), getActingPlayer()))
{ {
continue; continue;
} }
getActingPlayer().addSkill(holder.getSkill(), false); getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -54,7 +54,6 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUn
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder;
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone; import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone;
import org.l2jmobius.gameserver.model.item.appearance.AppearanceType; import org.l2jmobius.gameserver.model.item.appearance.AppearanceType;
@@ -1607,14 +1606,14 @@ public abstract class Inventory extends ItemContainer
if (agathionSkills != null) if (agathionSkills != null)
{ {
boolean update = false; boolean update = false;
for (SkillHolder holder : agathionSkills.getMainSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
for (SkillHolder holder : agathionSkills.getSubSkills(old.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(old.getEnchantLevel()))
{ {
getOwner().getActingPlayer().removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); getOwner().getActingPlayer().removeSkill(skill, false, skill.isPassive());
update = true; update = true;
} }
if (update) if (update)
@@ -1654,23 +1653,23 @@ public abstract class Inventory extends ItemContainer
boolean update = false; boolean update = false;
if (slot == PAPERDOLL_AGATHION1) if (slot == PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer())) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, getOwner().getActingPlayer(), getOwner().getActingPlayer()))
{ {
continue; continue;
} }
getOwner().getActingPlayer().addSkill(holder.getSkill(), false); getOwner().getActingPlayer().addSkill(skill, false);
update = true; update = true;
} }
if (update) if (update)
@@ -42,11 +42,11 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDe
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemDrop;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer; import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder; import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.Weapon; import org.l2jmobius.gameserver.model.item.Weapon;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.item.type.EtcItemType; import org.l2jmobius.gameserver.model.item.type.EtcItemType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillConditionScope; import org.l2jmobius.gameserver.model.skill.SkillConditionScope;
import org.l2jmobius.gameserver.model.variables.ItemVariables; import org.l2jmobius.gameserver.model.variables.ItemVariables;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -1027,33 +1027,33 @@ public class PlayerInventory extends Inventory
if (agathionSkills != null) if (agathionSkills != null)
{ {
// Remove old skills. // Remove old skills.
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
_owner.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); _owner.removeSkill(skill, false, skill.isPassive());
} }
// Add new skills. // Add new skills.
if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1) if (item.getLocationSlot() == Inventory.PAPERDOLL_AGATHION1)
{ {
for (SkillHolder holder : agathionSkills.getMainSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getMainSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
for (SkillHolder holder : agathionSkills.getSubSkills(item.getEnchantLevel())) for (Skill skill : agathionSkills.getSubSkills(item.getEnchantLevel()))
{ {
if (holder.getSkill().isPassive() && !holder.getSkill().checkConditions(SkillConditionScope.PASSIVE, _owner, _owner)) if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, _owner, _owner))
{ {
continue; continue;
} }
_owner.addSkill(holder.getSkill(), false); _owner.addSkill(skill, false);
} }
} }
} }