|
@@ -30,7 +30,7 @@ import java.util.logging.Logger;
|
|
|
|
|
|
import com.l2jserver.Config;
|
|
|
import com.l2jserver.gameserver.datatables.NpcData;
|
|
|
-import com.l2jserver.gameserver.enums.AISkillType;
|
|
|
+import com.l2jserver.gameserver.enums.AISkillScope;
|
|
|
import com.l2jserver.gameserver.enums.AIType;
|
|
|
import com.l2jserver.gameserver.enums.NpcRace;
|
|
|
import com.l2jserver.gameserver.enums.QuestEventType;
|
|
@@ -41,12 +41,10 @@ import com.l2jserver.gameserver.model.actor.L2Character;
|
|
|
import com.l2jserver.gameserver.model.base.ClassId;
|
|
|
import com.l2jserver.gameserver.model.drops.DropListScope;
|
|
|
import com.l2jserver.gameserver.model.drops.IDropItem;
|
|
|
-import com.l2jserver.gameserver.model.effects.L2EffectType;
|
|
|
import com.l2jserver.gameserver.model.holders.ItemHolder;
|
|
|
import com.l2jserver.gameserver.model.interfaces.IIdentifiable;
|
|
|
import com.l2jserver.gameserver.model.quest.Quest;
|
|
|
import com.l2jserver.gameserver.model.skills.L2Skill;
|
|
|
-import com.l2jserver.gameserver.model.skills.L2SkillType;
|
|
|
|
|
|
/**
|
|
|
* NPC template.
|
|
@@ -103,14 +101,14 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
|
|
|
private int _shortRangeSkillChance;
|
|
|
private int _longRangeSkillId;
|
|
|
private int _longRangeSkillChance;
|
|
|
+ private Map<Integer, L2Skill> _skills;
|
|
|
+ private Map<AISkillScope, List<L2Skill>> _aiSkillLists;
|
|
|
private Set<Integer> _clans;
|
|
|
private Set<Integer> _enemyClans;
|
|
|
private Map<DropListScope, List<IDropItem>> _dropLists;
|
|
|
private double _collisionRadiusGrown;
|
|
|
private double _collisionHeightGrown;
|
|
|
|
|
|
- private final Map<AISkillType, List<L2Skill>> _aiSkills = new ConcurrentHashMap<>();
|
|
|
- private final Map<Integer, L2Skill> _skills = new ConcurrentHashMap<>();
|
|
|
private final List<L2MinionData> _minions = new ArrayList<>();
|
|
|
private final List<ClassId> _teachInfo = new ArrayList<>();
|
|
|
private final Map<QuestEventType, List<Quest>> _questEvents = new ConcurrentHashMap<>();
|
|
@@ -437,6 +435,28 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
|
|
|
return _longRangeSkillChance;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public Map<Integer, L2Skill> getSkills()
|
|
|
+ {
|
|
|
+ return _skills;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setSkills(Map<Integer, L2Skill> skills)
|
|
|
+ {
|
|
|
+ _skills = skills != null ? Collections.unmodifiableMap(skills) : Collections.<Integer, L2Skill> emptyMap();
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<L2Skill> getAISkills(AISkillScope aiSkillScope)
|
|
|
+ {
|
|
|
+ final List<L2Skill> aiSkills = _aiSkillLists.get(aiSkillScope);
|
|
|
+ return aiSkills != null ? aiSkills : Collections.<L2Skill> emptyList();
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setAISkillLists(Map<AISkillScope, List<L2Skill>> aiSkillLists)
|
|
|
+ {
|
|
|
+ _aiSkillLists = aiSkillLists != null ? Collections.unmodifiableMap(aiSkillLists) : Collections.<AISkillScope, List<L2Skill>> emptyMap();
|
|
|
+ }
|
|
|
+
|
|
|
public Set<Integer> getClans()
|
|
|
{
|
|
|
return _clans;
|
|
@@ -653,15 +673,6 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
|
|
|
return _collisionHeightGrown;
|
|
|
}
|
|
|
|
|
|
- public void resetSkills()
|
|
|
- {
|
|
|
- for (AISkillType type : AISkillType.values())
|
|
|
- {
|
|
|
- _aiSkills.put(type, new ArrayList<L2Skill>());
|
|
|
- }
|
|
|
- _skills.clear();
|
|
|
- }
|
|
|
-
|
|
|
public static boolean isAssignableTo(Class<?> sub, Class<?> clazz)
|
|
|
{
|
|
|
// If clazz represents an interface
|
|
@@ -705,46 +716,6 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
|
|
|
return L2NpcTemplate.isAssignableTo(obj.getClass(), clazz);
|
|
|
}
|
|
|
|
|
|
- public void addAtkSkill(L2Skill skill)
|
|
|
- {
|
|
|
- getAtkSkills().add(skill);
|
|
|
- }
|
|
|
-
|
|
|
- public void addBuffSkill(L2Skill skill)
|
|
|
- {
|
|
|
- getBuffSkills().add(skill);
|
|
|
- }
|
|
|
-
|
|
|
- public void addCOTSkill(L2Skill skill)
|
|
|
- {
|
|
|
- getCostOverTimeSkills().add(skill);
|
|
|
- }
|
|
|
-
|
|
|
- public void addDebuffSkill(L2Skill skill)
|
|
|
- {
|
|
|
- getDebuffSkills().add(skill);
|
|
|
- }
|
|
|
-
|
|
|
- public void addGeneralSkill(L2Skill skill)
|
|
|
- {
|
|
|
- getGeneralskills().add(skill);
|
|
|
- }
|
|
|
-
|
|
|
- public void addHealSkill(L2Skill skill)
|
|
|
- {
|
|
|
- getHealSkills().add(skill);
|
|
|
- }
|
|
|
-
|
|
|
- public void addImmobiliseSkill(L2Skill skill)
|
|
|
- {
|
|
|
- getImmobiliseSkills().add(skill);
|
|
|
- }
|
|
|
-
|
|
|
- public void addNegativeSkill(L2Skill skill)
|
|
|
- {
|
|
|
- getNegativeSkills().add(skill);
|
|
|
- }
|
|
|
-
|
|
|
public void addQuestEvent(QuestEventType eventType, Quest q)
|
|
|
{
|
|
|
if (!_questEvents.containsKey(eventType))
|
|
@@ -791,118 +762,6 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
|
|
|
_minions.add(minion);
|
|
|
}
|
|
|
|
|
|
- public void addRangeSkill(L2Skill skill)
|
|
|
- {
|
|
|
- if ((skill.getCastRange() <= 150) && (skill.getCastRange() > 0))
|
|
|
- {
|
|
|
- getShortRangeSkills().add(skill);
|
|
|
- }
|
|
|
- else if (skill.getCastRange() > 150)
|
|
|
- {
|
|
|
- getLongRangeSkills().add(skill);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void addResSkill(L2Skill skill)
|
|
|
- {
|
|
|
- getResSkills().add(skill);
|
|
|
- }
|
|
|
-
|
|
|
- public void addSkill(L2Skill skill)
|
|
|
- {
|
|
|
- if (!skill.isPassive())
|
|
|
- {
|
|
|
- if (skill.isSuicideAttack())
|
|
|
- {
|
|
|
- addSuicideSkill(skill);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- addGeneralSkill(skill);
|
|
|
-
|
|
|
- if (skill.isContinuous())
|
|
|
- {
|
|
|
- if (!skill.isDebuff())
|
|
|
- {
|
|
|
- addBuffSkill(skill);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- addDebuffSkill(skill);
|
|
|
- addCOTSkill(skill);
|
|
|
- addRangeSkill(skill);
|
|
|
- }
|
|
|
- }
|
|
|
- else if (skill.getSkillType() == L2SkillType.DUMMY)
|
|
|
- {
|
|
|
- if (skill.hasEffectType(L2EffectType.DISPEL, L2EffectType.DISPEL_BY_SLOT))
|
|
|
- {
|
|
|
- addNegativeSkill(skill);
|
|
|
- addRangeSkill(skill);
|
|
|
- }
|
|
|
- else if (skill.hasEffectType(L2EffectType.HEAL, L2EffectType.HEAL_PERCENT))
|
|
|
- {
|
|
|
- addHealSkill(skill);
|
|
|
- }
|
|
|
- else if (skill.hasEffectType(L2EffectType.PHYSICAL_ATTACK, L2EffectType.PHYSICAL_ATTACK_HP_LINK, L2EffectType.FATAL_BLOW, L2EffectType.ENERGY_ATTACK, L2EffectType.MAGICAL_ATTACK_MP, L2EffectType.MAGICAL_ATTACK, L2EffectType.DEATH_LINK, L2EffectType.HP_DRAIN))
|
|
|
- {
|
|
|
- addAtkSkill(skill);
|
|
|
- addUniversalSkill(skill);
|
|
|
- addRangeSkill(skill);
|
|
|
- }
|
|
|
- else if (skill.hasEffectType(L2EffectType.SLEEP))
|
|
|
- {
|
|
|
- addImmobiliseSkill(skill);
|
|
|
- }
|
|
|
- else if (skill.hasEffectType(L2EffectType.STUN, L2EffectType.ROOT))
|
|
|
- {
|
|
|
- addImmobiliseSkill(skill);
|
|
|
- addRangeSkill(skill);
|
|
|
- }
|
|
|
- else if (skill.hasEffectType(L2EffectType.MUTE, L2EffectType.FEAR))
|
|
|
- {
|
|
|
- addCOTSkill(skill);
|
|
|
- addRangeSkill(skill);
|
|
|
- }
|
|
|
- else if (skill.hasEffectType(L2EffectType.PARALYZE))
|
|
|
- {
|
|
|
- addImmobiliseSkill(skill);
|
|
|
- addRangeSkill(skill);
|
|
|
- }
|
|
|
- else if (skill.hasEffectType(L2EffectType.DMG_OVER_TIME, L2EffectType.DMG_OVER_TIME_PERCENT))
|
|
|
- {
|
|
|
- addRangeSkill(skill);
|
|
|
- }
|
|
|
- else if (skill.hasEffectType(L2EffectType.RESURRECTION))
|
|
|
- {
|
|
|
- addResSkill(skill);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- addUniversalSkill(skill);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- _skills.put(skill.getId(), skill);
|
|
|
- }
|
|
|
-
|
|
|
- public void addSuicideSkill(L2Skill skill)
|
|
|
- {
|
|
|
- getSuicideSkills().add(skill);
|
|
|
- }
|
|
|
-
|
|
|
- public void addTeachInfo(List<ClassId> teachInfo)
|
|
|
- {
|
|
|
- _teachInfo.addAll(teachInfo);
|
|
|
- }
|
|
|
-
|
|
|
- public void addUniversalSkill(L2Skill skill)
|
|
|
- {
|
|
|
- getUniversalSkills().add(skill);
|
|
|
- }
|
|
|
-
|
|
|
public boolean canTeach(ClassId classId)
|
|
|
{
|
|
|
// If the player is on a third class, fetch the class teacher
|
|
@@ -914,38 +773,6 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
|
|
|
return _teachInfo.contains(classId);
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * @return the attack skills.
|
|
|
- */
|
|
|
- public List<L2Skill> getAtkSkills()
|
|
|
- {
|
|
|
- return _aiSkills.get(AISkillType.ATTACK);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @return the buff skills.
|
|
|
- */
|
|
|
- public List<L2Skill> getBuffSkills()
|
|
|
- {
|
|
|
- return _aiSkills.get(AISkillType.BUFF);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @return the cost over time skills.
|
|
|
- */
|
|
|
- public List<L2Skill> getCostOverTimeSkills()
|
|
|
- {
|
|
|
- return _aiSkills.get(AISkillType.COT);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @return the debuff skills.
|
|
|
- */
|
|
|
- public List<L2Skill> getDebuffSkills()
|
|
|
- {
|
|
|
- return _aiSkills.get(AISkillType.DEBUFF);
|
|
|
- }
|
|
|
-
|
|
|
public Map<QuestEventType, List<Quest>> getEventQuests()
|
|
|
{
|
|
|
return _questEvents;
|
|
@@ -956,38 +783,6 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
|
|
|
return _questEvents.get(EventType);
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * @return the general skills.
|
|
|
- */
|
|
|
- public List<L2Skill> getGeneralskills()
|
|
|
- {
|
|
|
- return _aiSkills.get(AISkillType.GENERAL);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @return the heal skills.
|
|
|
- */
|
|
|
- public List<L2Skill> getHealSkills()
|
|
|
- {
|
|
|
- return _aiSkills.get(AISkillType.HEAL);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @return the immobilize skills.
|
|
|
- */
|
|
|
- public List<L2Skill> getImmobiliseSkills()
|
|
|
- {
|
|
|
- return _aiSkills.get(AISkillType.IMMOBILIZE);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @return the long range skills.
|
|
|
- */
|
|
|
- public List<L2Skill> getLongRangeSkills()
|
|
|
- {
|
|
|
- return _aiSkills.get(AISkillType.LONG_RANGE);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* @return the list of all Minions that must be spawn with the L2NpcInstance using this L2NpcTemplate.
|
|
|
*/
|
|
@@ -996,51 +791,13 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
|
|
|
return _minions;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * @return the negative skills.
|
|
|
- */
|
|
|
- public List<L2Skill> getNegativeSkills()
|
|
|
- {
|
|
|
- return _aiSkills.get(AISkillType.NEGATIVE);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @return the resurrection skills.
|
|
|
- */
|
|
|
- public List<L2Skill> getResSkills()
|
|
|
- {
|
|
|
- return _aiSkills.get(AISkillType.RES);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @return the short range skills.
|
|
|
- */
|
|
|
- public List<L2Skill> getShortRangeSkills()
|
|
|
- {
|
|
|
- return _aiSkills.get(AISkillType.SHORT_RANGE);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @return the universal skills.
|
|
|
- */
|
|
|
- public List<L2Skill> getUniversalSkills()
|
|
|
- {
|
|
|
- return _aiSkills.get(AISkillType.UNIVERSAL);
|
|
|
- }
|
|
|
-
|
|
|
- public List<L2Skill> getSuicideSkills()
|
|
|
- {
|
|
|
- return _aiSkills.get(AISkillType.SUICIDE);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public Map<Integer, L2Skill> getSkills()
|
|
|
+ public List<ClassId> getTeachInfo()
|
|
|
{
|
|
|
- return _skills;
|
|
|
+ return _teachInfo;
|
|
|
}
|
|
|
|
|
|
- public List<ClassId> getTeachInfo()
|
|
|
+ public void addTeachInfo(List<ClassId> teachInfo)
|
|
|
{
|
|
|
- return _teachInfo;
|
|
|
+ _teachInfo.addAll(teachInfo);
|
|
|
}
|
|
|
}
|