Sync with L2jServer HighFive Oct 2nd 2015.
This commit is contained in:
@@ -509,98 +509,100 @@ public class NpcData implements IXmlReader
|
||||
Map<AISkillScope, List<Skill>> aiSkillLists = null;
|
||||
for (Skill skill : skills.values())
|
||||
{
|
||||
if (!skill.isPassive())
|
||||
if (skill.isPassive())
|
||||
{
|
||||
if (aiSkillLists == null)
|
||||
{
|
||||
aiSkillLists = new EnumMap<>(AISkillScope.class);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if (aiSkillLists == null)
|
||||
{
|
||||
aiSkillLists = new EnumMap<>(AISkillScope.class);
|
||||
}
|
||||
|
||||
final List<AISkillScope> aiSkillScopes = new ArrayList<>();
|
||||
final AISkillScope shortOrLongRangeScope = skill.getCastRange() <= 150 ? AISkillScope.SHORT_RANGE : AISkillScope.SHORT_RANGE;
|
||||
if (skill.isSuicideAttack())
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.SUICIDE);
|
||||
}
|
||||
else
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.GENERAL);
|
||||
|
||||
List<AISkillScope> aiSkillScopes = new ArrayList<>();
|
||||
final AISkillScope shortOrLongRangeScope = skill.getCastRange() <= 150 ? AISkillScope.SHORT_RANGE : AISkillScope.SHORT_RANGE;
|
||||
if (skill.isSuicideAttack())
|
||||
if (skill.isContinuous())
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.SUICIDE);
|
||||
}
|
||||
else
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.GENERAL);
|
||||
|
||||
if (skill.isContinuous())
|
||||
if (!skill.isDebuff())
|
||||
{
|
||||
if (!skill.isDebuff())
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.BUFF);
|
||||
}
|
||||
else
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.DEBUFF);
|
||||
aiSkillScopes.add(AISkillScope.COT);
|
||||
aiSkillScopes.add(shortOrLongRangeScope);
|
||||
}
|
||||
aiSkillScopes.add(AISkillScope.BUFF);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (skill.hasEffectType(L2EffectType.DISPEL, L2EffectType.DISPEL_BY_SLOT))
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.NEGATIVE);
|
||||
aiSkillScopes.add(shortOrLongRangeScope);
|
||||
}
|
||||
else if (skill.hasEffectType(L2EffectType.HEAL))
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.HEAL);
|
||||
}
|
||||
else if (skill.hasEffectType(L2EffectType.PHYSICAL_ATTACK, L2EffectType.PHYSICAL_ATTACK_HP_LINK, L2EffectType.MAGICAL_ATTACK, L2EffectType.DEATH_LINK, L2EffectType.HP_DRAIN))
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.ATTACK);
|
||||
aiSkillScopes.add(AISkillScope.UNIVERSAL);
|
||||
aiSkillScopes.add(shortOrLongRangeScope);
|
||||
}
|
||||
else if (skill.hasEffectType(L2EffectType.SLEEP))
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.IMMOBILIZE);
|
||||
}
|
||||
else if (skill.hasEffectType(L2EffectType.STUN, L2EffectType.ROOT))
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.IMMOBILIZE);
|
||||
aiSkillScopes.add(shortOrLongRangeScope);
|
||||
}
|
||||
else if (skill.hasEffectType(L2EffectType.MUTE, L2EffectType.FEAR))
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.COT);
|
||||
aiSkillScopes.add(shortOrLongRangeScope);
|
||||
}
|
||||
else if (skill.hasEffectType(L2EffectType.PARALYZE))
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.IMMOBILIZE);
|
||||
aiSkillScopes.add(shortOrLongRangeScope);
|
||||
}
|
||||
else if (skill.hasEffectType(L2EffectType.DMG_OVER_TIME, L2EffectType.DMG_OVER_TIME_PERCENT))
|
||||
{
|
||||
aiSkillScopes.add(shortOrLongRangeScope);
|
||||
}
|
||||
else if (skill.hasEffectType(L2EffectType.RESURRECTION))
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.RES);
|
||||
}
|
||||
else
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.UNIVERSAL);
|
||||
}
|
||||
aiSkillScopes.add(AISkillScope.DEBUFF);
|
||||
aiSkillScopes.add(AISkillScope.COT);
|
||||
aiSkillScopes.add(shortOrLongRangeScope);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (skill.hasEffectType(L2EffectType.DISPEL, L2EffectType.DISPEL_BY_SLOT))
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.NEGATIVE);
|
||||
aiSkillScopes.add(shortOrLongRangeScope);
|
||||
}
|
||||
else if (skill.hasEffectType(L2EffectType.HEAL))
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.HEAL);
|
||||
}
|
||||
else if (skill.hasEffectType(L2EffectType.PHYSICAL_ATTACK, L2EffectType.PHYSICAL_ATTACK_HP_LINK, L2EffectType.MAGICAL_ATTACK, L2EffectType.DEATH_LINK, L2EffectType.HP_DRAIN))
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.ATTACK);
|
||||
aiSkillScopes.add(AISkillScope.UNIVERSAL);
|
||||
aiSkillScopes.add(shortOrLongRangeScope);
|
||||
}
|
||||
else if (skill.hasEffectType(L2EffectType.SLEEP))
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.IMMOBILIZE);
|
||||
}
|
||||
else if (skill.hasEffectType(L2EffectType.STUN, L2EffectType.ROOT))
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.IMMOBILIZE);
|
||||
aiSkillScopes.add(shortOrLongRangeScope);
|
||||
}
|
||||
else if (skill.hasEffectType(L2EffectType.MUTE, L2EffectType.FEAR))
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.COT);
|
||||
aiSkillScopes.add(shortOrLongRangeScope);
|
||||
}
|
||||
else if (skill.hasEffectType(L2EffectType.PARALYZE))
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.IMMOBILIZE);
|
||||
aiSkillScopes.add(shortOrLongRangeScope);
|
||||
}
|
||||
else if (skill.hasEffectType(L2EffectType.DMG_OVER_TIME, L2EffectType.DMG_OVER_TIME_PERCENT))
|
||||
{
|
||||
aiSkillScopes.add(shortOrLongRangeScope);
|
||||
}
|
||||
else if (skill.hasEffectType(L2EffectType.RESURRECTION))
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.RES);
|
||||
}
|
||||
else
|
||||
{
|
||||
aiSkillScopes.add(AISkillScope.UNIVERSAL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (AISkillScope aiSkillScope : aiSkillScopes)
|
||||
{
|
||||
List<Skill> aiSkills = aiSkillLists.get(aiSkillScope);
|
||||
if (aiSkills == null)
|
||||
{
|
||||
aiSkills = new ArrayList<>();
|
||||
aiSkillLists.put(aiSkillScope, aiSkills);
|
||||
}
|
||||
|
||||
for (AISkillScope aiSkillScope : aiSkillScopes)
|
||||
{
|
||||
List<Skill> aiSkills = aiSkillLists.get(aiSkillScope);
|
||||
if (aiSkills == null)
|
||||
{
|
||||
aiSkills = new ArrayList<>();
|
||||
aiSkillLists.put(aiSkillScope, aiSkills);
|
||||
}
|
||||
|
||||
aiSkills.add(skill);
|
||||
}
|
||||
aiSkills.add(skill);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user