Scarlet Van Halisha AI improvements.

This commit is contained in:
MobiusDev 2015-11-04 10:19:23 +00:00
parent 638916b3ba
commit 39687a745f

View File

@ -45,6 +45,8 @@ public class ScarletVanHalisha extends AbstractNpcAI
{ {
private L2Character _target; private L2Character _target;
private Skill _skill; private Skill _skill;
private long _lastRangedSkillTime;
private final int _rangedSkillMinCoolTime = 60000; // 1 minute
// NPCs // NPCs
private static final int HALISHA2 = 29046; private static final int HALISHA2 = 29046;
@ -74,7 +76,7 @@ public class ScarletVanHalisha extends AbstractNpcAI
} }
case "random_target": case "random_target":
{ {
_target = getRandomTarget(npc); _target = getRandomTarget(npc, null);
break; break;
} }
} }
@ -85,7 +87,6 @@ public class ScarletVanHalisha extends AbstractNpcAI
public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill) public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill)
{ {
getSkillAI(npc); getSkillAI(npc);
return super.onSpellFinished(npc, player, skill); return super.onSpellFinished(npc, player, skill);
} }
@ -94,7 +95,6 @@ public class ScarletVanHalisha extends AbstractNpcAI
{ {
startQuestTimer("random_Target", 5000, npc, null, true); startQuestTimer("random_Target", 5000, npc, null, true);
startQuestTimer("attack", 500, npc, null, true); startQuestTimer("attack", 500, npc, null, true);
return super.onAttack(npc, attacker, damage, isSummon); return super.onAttack(npc, attacker, damage, isSummon);
} }
@ -103,7 +103,6 @@ public class ScarletVanHalisha extends AbstractNpcAI
{ {
cancelQuestTimers("attack"); cancelQuestTimers("attack");
cancelQuestTimers("random_Target"); cancelQuestTimers("random_Target");
return super.onKill(npc, killer, isSummon); return super.onKill(npc, killer, isSummon);
} }
@ -121,10 +120,6 @@ public class ScarletVanHalisha extends AbstractNpcAI
{ {
return SkillData.getInstance().getSkill(5015, 5); return SkillData.getInstance().getSkill(5015, 5);
} }
else if (Rnd.get(100) < 10)
{
return SkillData.getInstance().getSkill(5018, 1);
}
else if (Rnd.get(100) < 2) else if (Rnd.get(100) < 2)
{ {
return SkillData.getInstance().getSkill(5016, 1); return SkillData.getInstance().getSkill(5016, 1);
@ -148,10 +143,14 @@ public class ScarletVanHalisha extends AbstractNpcAI
{ {
return SkillData.getInstance().getSkill(5015, 2); return SkillData.getInstance().getSkill(5015, 2);
} }
else if (Rnd.get(100) < 10) else if (((_lastRangedSkillTime + _rangedSkillMinCoolTime) < System.currentTimeMillis()) && (Rnd.get(100) < 10))
{ {
return SkillData.getInstance().getSkill(5019, 1); return SkillData.getInstance().getSkill(5019, 1);
} }
else if (((_lastRangedSkillTime + _rangedSkillMinCoolTime) < System.currentTimeMillis()) && (Rnd.get(100) < 10))
{
return SkillData.getInstance().getSkill(5018, 1);
}
else if (Rnd.get(100) < 2) else if (Rnd.get(100) < 2)
{ {
return SkillData.getInstance().getSkill(5016, 1); return SkillData.getInstance().getSkill(5016, 1);
@ -174,11 +173,8 @@ public class ScarletVanHalisha extends AbstractNpcAI
} }
if ((Rnd.get(100) < 30) || (_target == null) || _target.isDead()) if ((Rnd.get(100) < 30) || (_target == null) || _target.isDead())
{ {
_target = getRandomTarget(npc); _skill = getRndSkills(npc);
if (_target != null) _target = getRandomTarget(npc, _skill);
{
_skill = getRndSkills(npc);
}
} }
L2Character target = _target; L2Character target = _target;
Skill skill = _skill; Skill skill = _skill;
@ -214,9 +210,9 @@ public class ScarletVanHalisha extends AbstractNpcAI
} }
} }
private L2Character getRandomTarget(L2Npc npc) private L2Character getRandomTarget(L2Npc npc, Skill skill)
{ {
Collection<L2Object> objs = npc.getKnownList().getKnownObjects().values(); final Collection<L2Object> objs = npc.getKnownList().getKnownObjects().values();
ArrayList<L2Character> result = new ArrayList<>(); ArrayList<L2Character> result = new ArrayList<>();
{ {
for (L2Object obj : objs) for (L2Object obj : objs)
@ -235,7 +231,36 @@ public class ScarletVanHalisha extends AbstractNpcAI
} }
if (obj.isPlayable() || (obj instanceof L2DecoyInstance)) if (obj.isPlayable() || (obj instanceof L2DecoyInstance))
{ {
if (Util.checkIfInRange(9000, npc, obj, true) && !((L2Character) obj).isDead()) int skillRange = 150;
if (skill != null)
{
switch (skill.getId())
{
case 5014:
{
skillRange = 150;
break;
}
case 5015:
{
skillRange = 400;
break;
}
case 5016:
{
skillRange = 200;
break;
}
case 5018:
case 5019:
{
_lastRangedSkillTime = System.currentTimeMillis();
skillRange = 550;
break;
}
}
}
if (Util.checkIfInRange(skillRange, npc, obj, true) && !((L2Character) obj).isDead())
{ {
result.add((L2Character) obj); result.add((L2Character) obj);
} }