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

View File

@@ -29,7 +29,7 @@ import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.data.ItemTable;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.holders.AgathionSkillHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.skill.Skill;
/**
* @author Mobius
@@ -69,49 +69,53 @@ public class AgathionData implements IXmlReader
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 List<SkillHolder> mainSkillList = new ArrayList<>();
final Map<Integer, List<Skill>> mainSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getMainSkills() : new HashMap<>();
final List<Skill> mainSkillList = new ArrayList<>();
final String main = set.getString("mainSkill", "");
for (String skill : main.split(";"))
for (String ids : main.split(";"))
{
if (skill.isEmpty())
if (ids.isEmpty())
{
continue;
}
final String[] split = skill.split(",");
final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]);
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 + ".");
return;
}
mainSkillList.add(new SkillHolder(skillId, level));
mainSkillList.add(skill);
}
mainSkills.put(enchant, mainSkillList);
final Map<Integer, List<SkillHolder>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>();
final List<SkillHolder> subSkillList = new ArrayList<>();
final Map<Integer, List<Skill>> subSkills = AGATHION_SKILLS.containsKey(id) ? AGATHION_SKILLS.get(id).getSubSkills() : new HashMap<>();
final List<Skill> subSkillList = new ArrayList<>();
final String sub = set.getString("subSkill", "");
for (String skill : sub.split(";"))
for (String ids : sub.split(";"))
{
if (skill.isEmpty())
if (ids.isEmpty())
{
continue;
}
final String[] split = skill.split(",");
final String[] split = ids.split(",");
final int skillId = Integer.parseInt(split[0]);
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 + ".");
return;
}
subSkillList.add(new SkillHolder(skillId, level));
subSkillList.add(skill);
}
subSkills.put(enchant, subSkillList);

View File

@@ -20,31 +20,33 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.l2jmobius.gameserver.model.skill.Skill;
/**
* @author Mobius
*/
public class AgathionSkillHolder
{
private final Map<Integer, List<SkillHolder>> _mainSkill;
private final Map<Integer, List<SkillHolder>> _subSkill;
private final Map<Integer, List<Skill>> _mainSkill;
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;
_subSkill = subSkill;
}
public Map<Integer, List<SkillHolder>> getMainSkills()
public Map<Integer, List<Skill>> getMainSkills()
{
return _mainSkill;
}
public Map<Integer, List<SkillHolder>> getSubSkills()
public Map<Integer, List<Skill>> getSubSkills()
{
return _subSkill;
}
public List<SkillHolder> getMainSkills(int enchantLevel)
public List<Skill> getMainSkills(int enchantLevel)
{
if (!_mainSkill.containsKey(enchantLevel))
{
@@ -53,7 +55,7 @@ public class AgathionSkillHolder
return _mainSkill.get(enchantLevel);
}
public List<SkillHolder> getSubSkills(int enchantLevel)
public List<Skill> getSubSkills(int enchantLevel)
{
if (!_subSkill.containsKey(enchantLevel))
{

View File

@@ -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.OnItemTalk;
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.item.Armor;
import org.l2jmobius.gameserver.model.item.EtcItem;
@@ -947,36 +946,36 @@ public class Item extends WorldObject
{
boolean update = false;
// 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;
}
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;
}
// Add new skills.
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;
}
getActingPlayer().addSkill(holder.getSkill(), false);
getActingPlayer().addSkill(skill, false);
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;
}
getActingPlayer().addSkill(holder.getSkill(), false);
getActingPlayer().addSkill(skill, false);
update = true;
}
if (update)

View File

@@ -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.ArmorsetSkillHolder;
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.ItemTemplate;
import org.l2jmobius.gameserver.model.item.appearance.AppearanceStone;
@@ -1412,14 +1411,14 @@ public abstract class Inventory extends ItemContainer
if (agathionSkills != null)
{
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;
}
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;
}
if (update)
@@ -1459,23 +1458,23 @@ public abstract class Inventory extends ItemContainer
boolean update = false;
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;
}
getOwner().getActingPlayer().addSkill(holder.getSkill(), false);
getOwner().getActingPlayer().addSkill(skill, false);
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;
}
getOwner().getActingPlayer().addSkill(holder.getSkill(), false);
getOwner().getActingPlayer().addSkill(skill, false);
update = true;
}
if (update)

View File

@@ -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.OnPlayerItemTransfer;
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.instance.Item;
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.variables.ItemVariables;
import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -1019,33 +1019,33 @@ public class PlayerInventory extends Inventory
if (agathionSkills != null)
{
// 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.
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;
}
_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;
}
_owner.addSkill(holder.getSkill(), false);
_owner.addSkill(skill, false);
}
}
}