Changed option data to directly use skills.
This commit is contained in:
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -19,7 +19,7 @@ package org.l2jmobius.gameserver.model.options;
|
||||
/**
|
||||
* @author UnAfraid
|
||||
*/
|
||||
public enum OptionsSkillType
|
||||
public enum OptionSkillType
|
||||
{
|
||||
ATTACK,
|
||||
MAGIC,
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user