Changed option data to directly use skills.

This commit is contained in:
MobiusDevelopment
2022-03-18 23:07:01 +00:00
parent ca95c046e7
commit 4d12be9964
226 changed files with 4252 additions and 4677 deletions

View File

@ -28,10 +28,10 @@ import org.w3c.dom.Document;
import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.handler.EffectHandler;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.options.Options;
import org.l2jmobius.gameserver.model.options.OptionsSkillHolder;
import org.l2jmobius.gameserver.model.options.OptionsSkillType;
import org.l2jmobius.gameserver.model.options.OptionSkillHolder;
import org.l2jmobius.gameserver.model.options.OptionSkillType;
import org.l2jmobius.gameserver.model.skill.Skill;
/**
* @author UnAfraid
@ -88,27 +88,77 @@ public class OptionData implements IXmlReader
}
case "active_skill":
{
option.addActiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level")));
final int skillId = parseInteger(innerNode.getAttributes(), "id");
final int skillLevel = parseInteger(innerNode.getAttributes(), "level");
final Skill skill = SkillData.getInstance().getSkill(skillId, skillLevel);
if (skill != null)
{
option.addActiveSkill(skill);
}
else
{
LOGGER.info(getClass().getSimpleName() + ": Could not find skill " + skillId + "(" + skillLevel + ") used by option " + id + ".");
}
break;
}
case "passive_skill":
{
option.addPassiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level")));
final int skillId = parseInteger(innerNode.getAttributes(), "id");
final int skillLevel = parseInteger(innerNode.getAttributes(), "level");
final Skill skill = SkillData.getInstance().getSkill(skillId, skillLevel);
if (skill != null)
{
option.addPassiveSkill(skill);
}
else
{
LOGGER.info(getClass().getSimpleName() + ": Could not find skill " + skillId + "(" + skillLevel + ") used by option " + id + ".");
}
break;
}
case "attack_skill":
{
option.addActivationSkill(new OptionsSkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"), parseDouble(innerNode.getAttributes(), "chance"), OptionsSkillType.ATTACK));
final int skillId = parseInteger(innerNode.getAttributes(), "id");
final int skillLevel = parseInteger(innerNode.getAttributes(), "level");
final Skill skill = SkillData.getInstance().getSkill(skillId, skillLevel);
if (skill != null)
{
option.addActivationSkill(new OptionSkillHolder(skill, parseDouble(innerNode.getAttributes(), "chance"), OptionSkillType.ATTACK));
}
else
{
LOGGER.info(getClass().getSimpleName() + ": Could not find skill " + skillId + "(" + skillLevel + ") used by option " + id + ".");
}
break;
}
case "magic_skill":
{
option.addActivationSkill(new OptionsSkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"), parseDouble(innerNode.getAttributes(), "chance"), OptionsSkillType.MAGIC));
final int skillId = parseInteger(innerNode.getAttributes(), "id");
final int skillLevel = parseInteger(innerNode.getAttributes(), "level");
final Skill skill = SkillData.getInstance().getSkill(skillId, skillLevel);
if (skill != null)
{
option.addActivationSkill(new OptionSkillHolder(skill, parseDouble(innerNode.getAttributes(), "chance"), OptionSkillType.MAGIC));
}
else
{
LOGGER.info(getClass().getSimpleName() + ": Could not find skill " + skillId + "(" + skillLevel + ") used by option " + id + ".");
}
break;
}
case "critical_skill":
{
option.addActivationSkill(new OptionsSkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"), parseDouble(innerNode.getAttributes(), "chance"), OptionsSkillType.CRITICAL));
final int skillId = parseInteger(innerNode.getAttributes(), "id");
final int skillLevel = parseInteger(innerNode.getAttributes(), "level");
final Skill skill = SkillData.getInstance().getSkill(skillId, skillLevel);
if (skill != null)
{
option.addActivationSkill(new OptionSkillHolder(skill, parseDouble(innerNode.getAttributes(), "chance"), OptionSkillType.CRITICAL));
}
else
{
LOGGER.info(getClass().getSimpleName() + ": Could not find skill " + skillId + "(" + skillLevel + ") used by option " + id + ".");
}
break;
}
}

View File

@ -121,8 +121,8 @@ import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.item.type.EtcItemType;
import org.l2jmobius.gameserver.model.item.type.WeaponType;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.options.OptionsSkillHolder;
import org.l2jmobius.gameserver.model.options.OptionsSkillType;
import org.l2jmobius.gameserver.model.options.OptionSkillHolder;
import org.l2jmobius.gameserver.model.options.OptionSkillType;
import org.l2jmobius.gameserver.model.skill.AbnormalType;
import org.l2jmobius.gameserver.model.skill.BuffFinishTask;
import org.l2jmobius.gameserver.model.skill.BuffInfo;
@ -236,7 +236,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
private boolean _lethalable = true;
private Map<Integer, OptionsSkillHolder> _triggerSkills;
private Map<Integer, OptionSkillHolder> _triggerSkills;
private Map<Integer, IgnoreSkillHolder> _ignoreSkillEffects;
/** Creatures effect list. */
@ -3903,9 +3903,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
if (_triggerSkills != null)
{
for (OptionsSkillHolder holder : _triggerSkills.values())
for (OptionSkillHolder holder : _triggerSkills.values())
{
if (((!hit.isCritical() && (holder.getSkillType() == OptionsSkillType.ATTACK)) || ((holder.getSkillType() == OptionsSkillType.CRITICAL) && hit.isCritical())) && (Rnd.get(100) < holder.getChance()))
if (((!hit.isCritical() && (holder.getSkillType() == OptionSkillType.ATTACK)) || ((holder.getSkillType() == OptionSkillType.CRITICAL) && hit.isCritical())) && (Rnd.get(100) < holder.getChance()))
{
SkillCaster.triggerCast(this, target, holder.getSkill(), null, false);
}
@ -4934,7 +4934,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
return (_triggerSkills != null) && !_triggerSkills.isEmpty();
}
public Map<Integer, OptionsSkillHolder> getTriggerSkills()
public Map<Integer, OptionSkillHolder> getTriggerSkills()
{
if (_triggerSkills == null)
{
@ -4942,21 +4942,21 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
{
if (_triggerSkills == null)
{
_triggerSkills = new ConcurrentHashMap<>();
_triggerSkills = new ConcurrentHashMap<>(1);
}
}
}
return _triggerSkills;
}
public void addTriggerSkill(OptionsSkillHolder holder)
public void addTriggerSkill(OptionSkillHolder holder)
{
getTriggerSkills().put(holder.getSkillId(), holder);
getTriggerSkills().put(holder.getSkill().getId(), holder);
}
public void removeTriggerSkill(OptionsSkillHolder holder)
public void removeTriggerSkill(OptionSkillHolder holder)
{
getTriggerSkills().remove(holder.getSkillId());
getTriggerSkills().remove(holder.getSkill().getId());
}
/**

View File

@ -16,36 +16,41 @@
*/
package org.l2jmobius.gameserver.model.options;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.skill.Skill;
/**
* @author UnAfraid
* @author UnAfraid, Mobius
*/
public class OptionsSkillHolder extends SkillHolder
public class OptionSkillHolder
{
private final OptionsSkillType _type;
private final Skill _skill;
private final double _chance;
private final OptionSkillType _type;
/**
* @param skillId
* @param skillLevel
* @param skill
* @param type
* @param chance
*/
public OptionsSkillHolder(int skillId, int skillLevel, double chance, OptionsSkillType type)
public OptionSkillHolder(Skill skill, double chance, OptionSkillType type)
{
super(skillId, skillLevel);
_skill = skill;
_chance = chance;
_type = type;
}
public OptionsSkillType getSkillType()
public Skill getSkill()
{
return _type;
return _skill;
}
public double getChance()
{
return _chance;
}
public OptionSkillType getSkillType()
{
return _type;
}
}

View File

@ -19,7 +19,7 @@ package org.l2jmobius.gameserver.model.options;
/**
* @author UnAfraid
*/
public enum OptionsSkillType
public enum OptionSkillType
{
ATTACK,
MAGIC,

View File

@ -22,7 +22,6 @@ import java.util.List;
import org.l2jmobius.gameserver.enums.SkillFinishType;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.network.serverpackets.SkillCoolTime;
@ -34,9 +33,9 @@ public class Options
{
private final int _id;
private List<AbstractEffect> _effects = null;
private List<SkillHolder> _activeSkill = null;
private List<SkillHolder> _passiveSkill = null;
private List<OptionsSkillHolder> _activationSkills = null;
private List<Skill> _activeSkill = null;
private List<Skill> _passiveSkill = null;
private List<OptionSkillHolder> _activationSkills = null;
/**
* @param id
@ -75,12 +74,12 @@ public class Options
return _activeSkill != null;
}
public List<SkillHolder> getActiveSkills()
public List<Skill> getActiveSkills()
{
return _activeSkill;
}
public void addActiveSkill(SkillHolder holder)
public void addActiveSkill(Skill holder)
{
if (_activeSkill == null)
{
@ -94,12 +93,12 @@ public class Options
return _passiveSkill != null;
}
public List<SkillHolder> getPassiveSkills()
public List<Skill> getPassiveSkills()
{
return _passiveSkill;
}
public void addPassiveSkill(SkillHolder holder)
public void addPassiveSkill(Skill holder)
{
if (_passiveSkill == null)
{
@ -113,11 +112,11 @@ public class Options
return _activationSkills != null;
}
public boolean hasActivationSkills(OptionsSkillType type)
public boolean hasActivationSkills(OptionSkillType type)
{
if (_activationSkills != null)
{
for (OptionsSkillHolder holder : _activationSkills)
for (OptionSkillHolder holder : _activationSkills)
{
if (holder.getSkillType() == type)
{
@ -128,17 +127,17 @@ public class Options
return false;
}
public List<OptionsSkillHolder> getActivationsSkills()
public List<OptionSkillHolder> getActivationSkills()
{
return _activationSkills;
}
public List<OptionsSkillHolder> getActivationsSkills(OptionsSkillType type)
public List<OptionSkillHolder> getActivationSkills(OptionSkillType type)
{
final List<OptionsSkillHolder> temp = new ArrayList<>();
final List<OptionSkillHolder> temp = new ArrayList<>();
if (_activationSkills != null)
{
for (OptionsSkillHolder holder : _activationSkills)
for (OptionSkillHolder holder : _activationSkills)
{
if (holder.getSkillType() == type)
{
@ -149,7 +148,7 @@ public class Options
return temp;
}
public void addActivationSkill(OptionsSkillHolder holder)
public void addActivationSkill(OptionSkillHolder holder)
{
if (_activationSkills == null)
{
@ -189,21 +188,21 @@ public class Options
}
if (hasActiveSkills())
{
for (SkillHolder holder : _activeSkill)
for (Skill skill : _activeSkill)
{
addSkill(player, holder.getSkill());
addSkill(player, skill);
}
}
if (hasPassiveSkills())
{
for (SkillHolder holder : _passiveSkill)
for (Skill skill : _passiveSkill)
{
addSkill(player, holder.getSkill());
addSkill(player, skill);
}
}
if (hasActivationSkills())
{
for (OptionsSkillHolder holder : _activationSkills)
for (OptionSkillHolder holder : _activationSkills)
{
player.addTriggerSkill(holder);
}
@ -227,21 +226,21 @@ public class Options
}
if (hasActiveSkills())
{
for (SkillHolder holder : _activeSkill)
for (Skill skill : _activeSkill)
{
player.removeSkill(holder.getSkill(), false, false);
player.removeSkill(skill, false, false);
}
}
if (hasPassiveSkills())
{
for (SkillHolder holder : _passiveSkill)
for (Skill skill : _passiveSkill)
{
player.removeSkill(holder.getSkill(), false, true);
player.removeSkill(skill, false, true);
}
}
if (hasActivationSkills())
{
for (OptionsSkillHolder holder : _activationSkills)
for (OptionSkillHolder holder : _activationSkills)
{
player.removeTriggerSkill(holder);
}

View File

@ -62,8 +62,8 @@ import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.Weapon;
import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.item.type.ActionType;
import org.l2jmobius.gameserver.model.options.OptionsSkillHolder;
import org.l2jmobius.gameserver.model.options.OptionsSkillType;
import org.l2jmobius.gameserver.model.options.OptionSkillHolder;
import org.l2jmobius.gameserver.model.options.OptionSkillType;
import org.l2jmobius.gameserver.model.skill.targets.TargetType;
import org.l2jmobius.gameserver.model.stats.Formulas;
import org.l2jmobius.gameserver.model.zone.ZoneId;
@ -602,9 +602,9 @@ public class SkillCaster implements Runnable
if (caster.hasTriggerSkills())
{
for (OptionsSkillHolder holder : caster.getTriggerSkills().values())
for (OptionSkillHolder holder : caster.getTriggerSkills().values())
{
if (((skill.isMagic() && (holder.getSkillType() == OptionsSkillType.MAGIC)) || (skill.isPhysical() && (holder.getSkillType() == OptionsSkillType.ATTACK))) && (Rnd.get(100) < holder.getChance()))
if (((skill.isMagic() && (holder.getSkillType() == OptionSkillType.MAGIC)) || (skill.isPhysical() && (holder.getSkillType() == OptionSkillType.ATTACK))) && (Rnd.get(100) < holder.getChance()))
{
triggerCast(caster, creature, holder.getSkill(), null, false);
}