Boss related script cleanups.
This commit is contained in:
@@ -76,10 +76,8 @@ public class Core extends AbstractNpcAI
|
||||
// Misc
|
||||
private static final byte ALIVE = 0;
|
||||
private static final byte DEAD = 1;
|
||||
|
||||
private static boolean _firstAttacked;
|
||||
|
||||
private static final Collection<Attackable> _minions = ConcurrentHashMap.newKeySet();
|
||||
private static boolean _firstAttacked;
|
||||
|
||||
private Core()
|
||||
{
|
||||
|
@@ -825,12 +825,13 @@ public class LastImperialTomb extends AbstractInstance
|
||||
|
||||
private void playRandomSong(Instance world)
|
||||
{
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
final boolean isPlayingSong = world.getParameters().getBoolean("isPlayingSong");
|
||||
if (isPlayingSong)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
world.setParameter("isPlayingSong", true);
|
||||
final int random = getRandom(1, 5);
|
||||
final SkillHolder skill = new SkillHolder(5007, random);
|
||||
|
@@ -26,11 +26,9 @@ import java.util.List;
|
||||
import org.l2jmobius.commons.util.Chronos;
|
||||
import org.l2jmobius.gameserver.data.xml.SkillData;
|
||||
import org.l2jmobius.gameserver.geoengine.GeoEngine;
|
||||
import org.l2jmobius.gameserver.model.WorldObject;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.Decoy;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
import org.l2jmobius.gameserver.util.Util;
|
||||
|
||||
@@ -51,10 +49,10 @@ public class ScarletVanHalisha extends AbstractNpcAI
|
||||
private static final int FRINTEZZA_DAEMON_MORPH = 5018;
|
||||
private static final int FRINTEZZA_DAEMON_FIELD = 5019;
|
||||
// Misc
|
||||
private static final int RANGED_SKILL_MIN_COOLTIME = 60000; // 1 minute
|
||||
private Creature _target;
|
||||
private Skill _skill;
|
||||
private long _lastRangedSkillTime;
|
||||
private final int _rangedSkillMinCoolTime = 60000; // 1 minute
|
||||
|
||||
public ScarletVanHalisha()
|
||||
{
|
||||
@@ -69,7 +67,7 @@ public class ScarletVanHalisha extends AbstractNpcAI
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "attack":
|
||||
case "ATTACK":
|
||||
{
|
||||
if (npc != null)
|
||||
{
|
||||
@@ -77,7 +75,7 @@ public class ScarletVanHalisha extends AbstractNpcAI
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "random_target":
|
||||
case "RANDOM_TARGET":
|
||||
{
|
||||
_target = getRandomTarget(npc, null);
|
||||
break;
|
||||
@@ -96,16 +94,16 @@ public class ScarletVanHalisha extends AbstractNpcAI
|
||||
@Override
|
||||
public String onAttack(Npc npc, Player attacker, int damage, boolean isSummon)
|
||||
{
|
||||
startQuestTimer("random_Target", 5000, npc, null, true);
|
||||
startQuestTimer("attack", 500, npc, null, true);
|
||||
startQuestTimer("RANDOM_TARGET", 5000, npc, null, true);
|
||||
startQuestTimer("ATTACK", 500, npc, null, true);
|
||||
return super.onAttack(npc, attacker, damage, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, Player killer, boolean isSummon)
|
||||
{
|
||||
cancelQuestTimers("attack");
|
||||
cancelQuestTimers("random_Target");
|
||||
cancelQuestTimers("ATTACK");
|
||||
cancelQuestTimers("RANDOM_TARGET");
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
@@ -146,11 +144,11 @@ public class ScarletVanHalisha extends AbstractNpcAI
|
||||
{
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_CHARGE, 2);
|
||||
}
|
||||
else if (((_lastRangedSkillTime + _rangedSkillMinCoolTime) < Chronos.currentTimeMillis()) && (getRandom(100) < 10))
|
||||
else if (((_lastRangedSkillTime + RANGED_SKILL_MIN_COOLTIME) < Chronos.currentTimeMillis()) && (getRandom(100) < 10))
|
||||
{
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_FIELD, 1);
|
||||
}
|
||||
else if (((_lastRangedSkillTime + _rangedSkillMinCoolTime) < Chronos.currentTimeMillis()) && (getRandom(100) < 10))
|
||||
else if (((_lastRangedSkillTime + RANGED_SKILL_MIN_COOLTIME) < Chronos.currentTimeMillis()) && (getRandom(100) < 10))
|
||||
{
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_MORPH, 1);
|
||||
}
|
||||
@@ -173,12 +171,12 @@ public class ScarletVanHalisha extends AbstractNpcAI
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ((getRandom(100) < 30) || (_target == null) || _target.isDead())
|
||||
{
|
||||
_skill = getRndSkills(npc);
|
||||
_target = getRandomTarget(npc, _skill);
|
||||
}
|
||||
final Creature target = _target;
|
||||
Skill skill = _skill;
|
||||
if (skill == null)
|
||||
{
|
||||
@@ -190,6 +188,7 @@ public class ScarletVanHalisha extends AbstractNpcAI
|
||||
return;
|
||||
}
|
||||
|
||||
final Creature target = _target;
|
||||
if ((target == null) || target.isDead())
|
||||
{
|
||||
// npc.setCastingNow(false);
|
||||
@@ -215,65 +214,54 @@ public class ScarletVanHalisha extends AbstractNpcAI
|
||||
private Creature getRandomTarget(Npc npc, Skill skill)
|
||||
{
|
||||
final List<Creature> result = new ArrayList<>();
|
||||
for (Player obj : npc.getInstanceWorld().getPlayers())
|
||||
{
|
||||
for (WorldObject obj : npc.getInstanceWorld().getPlayers())
|
||||
if (obj.isPlayer() && obj.getActingPlayer().isInvisible())
|
||||
{
|
||||
if (obj.isPlayable() || (obj instanceof Decoy))
|
||||
continue;
|
||||
}
|
||||
|
||||
if (((obj.getZ() < (npc.getZ() - 100)) && (obj.getZ() > (npc.getZ() + 100))) || !GeoEngine.getInstance().canSeeTarget(obj, npc))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
int skillRange = 150;
|
||||
if (skill != null)
|
||||
{
|
||||
switch (skill.getId())
|
||||
{
|
||||
if (obj.isPlayer() && obj.getActingPlayer().isInvisible())
|
||||
case FRINTEZZA_DAEMON_ATTACK:
|
||||
{
|
||||
continue;
|
||||
skillRange = 150;
|
||||
break;
|
||||
}
|
||||
|
||||
if (((((Creature) obj).getZ() < (npc.getZ() - 100)) && (((Creature) obj).getZ() > (npc.getZ() + 100))) || !GeoEngine.getInstance().canSeeTarget(obj, npc))
|
||||
case FRINTEZZA_DAEMON_CHARGE:
|
||||
{
|
||||
continue;
|
||||
skillRange = 400;
|
||||
break;
|
||||
}
|
||||
case YOKE_OF_SCARLET:
|
||||
{
|
||||
skillRange = 200;
|
||||
break;
|
||||
}
|
||||
case FRINTEZZA_DAEMON_MORPH:
|
||||
case FRINTEZZA_DAEMON_FIELD:
|
||||
{
|
||||
_lastRangedSkillTime = Chronos.currentTimeMillis();
|
||||
skillRange = 550;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (obj.isPlayable() || (obj instanceof Decoy))
|
||||
|
||||
if (Util.checkIfInRange(skillRange, npc, obj, true) && !((Creature) obj).isDead())
|
||||
{
|
||||
int skillRange = 150;
|
||||
if (skill != null)
|
||||
{
|
||||
switch (skill.getId())
|
||||
{
|
||||
case FRINTEZZA_DAEMON_ATTACK:
|
||||
{
|
||||
skillRange = 150;
|
||||
break;
|
||||
}
|
||||
case FRINTEZZA_DAEMON_CHARGE:
|
||||
{
|
||||
skillRange = 400;
|
||||
break;
|
||||
}
|
||||
case YOKE_OF_SCARLET:
|
||||
{
|
||||
skillRange = 200;
|
||||
break;
|
||||
}
|
||||
case FRINTEZZA_DAEMON_MORPH:
|
||||
case FRINTEZZA_DAEMON_FIELD:
|
||||
{
|
||||
_lastRangedSkillTime = Chronos.currentTimeMillis();
|
||||
skillRange = 550;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (Util.checkIfInRange(skillRange, npc, obj, true) && !((Creature) obj).isDead())
|
||||
{
|
||||
result.add((Creature) obj);
|
||||
}
|
||||
result.add(obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!result.isEmpty() && (result.size() != 0))
|
||||
{
|
||||
final Object[] characters = result.toArray();
|
||||
return (Creature) characters[getRandom(characters.length)];
|
||||
}
|
||||
return null;
|
||||
return getRandomEntry(result);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
|
@@ -71,10 +71,6 @@ public class Orfen extends AbstractNpcAI
|
||||
// private static final int RIBA = 29017;
|
||||
private static final int RIBA_IREN = 29018;
|
||||
|
||||
private static boolean _IsTeleported;
|
||||
private static Set<Attackable> _minions = ConcurrentHashMap.newKeySet();
|
||||
private static ZoneType ZONE;
|
||||
|
||||
private static final byte ALIVE = 0;
|
||||
private static final byte DEAD = 1;
|
||||
|
||||
@@ -82,6 +78,10 @@ public class Orfen extends AbstractNpcAI
|
||||
private static final SkillHolder BLOW = new SkillHolder(4067, 4);
|
||||
private static final SkillHolder ORFEN_HEAL = new SkillHolder(4516, 1);
|
||||
|
||||
private static boolean _isTeleported;
|
||||
private static Set<Attackable> _minions = ConcurrentHashMap.newKeySet();
|
||||
private static ZoneType _zone;
|
||||
|
||||
private Orfen()
|
||||
{
|
||||
final int[] mobs =
|
||||
@@ -91,8 +91,8 @@ public class Orfen extends AbstractNpcAI
|
||||
RIBA_IREN
|
||||
};
|
||||
registerMobs(mobs);
|
||||
_IsTeleported = false;
|
||||
ZONE = ZoneManager.getInstance().getZoneById(12013);
|
||||
_isTeleported = false;
|
||||
_zone = ZoneManager.getInstance().getZoneById(12013);
|
||||
final StatSet info = GrandBossManager.getInstance().getStatSet(ORFEN);
|
||||
final int status = GrandBossManager.getInstance().getBossStatus(ORFEN);
|
||||
if (status == DEAD)
|
||||
@@ -199,12 +199,12 @@ public class Orfen extends AbstractNpcAI
|
||||
}
|
||||
else if (event.equalsIgnoreCase("check_orfen_pos"))
|
||||
{
|
||||
if ((_IsTeleported && (npc.getCurrentHp() > (npc.getMaxHp() * 0.95))) || (!ZONE.isInsideZone(npc) && !_IsTeleported))
|
||||
if ((_isTeleported && (npc.getCurrentHp() > (npc.getMaxHp() * 0.95))) || (!_zone.isInsideZone(npc) && !_isTeleported))
|
||||
{
|
||||
setSpawnPoint(npc, getRandom(3) + 1);
|
||||
_IsTeleported = false;
|
||||
_isTeleported = false;
|
||||
}
|
||||
else if (_IsTeleported && !ZONE.isInsideZone(npc))
|
||||
else if (_isTeleported && !_zone.isInsideZone(npc))
|
||||
{
|
||||
setSpawnPoint(npc, 0);
|
||||
}
|
||||
@@ -292,9 +292,9 @@ public class Orfen extends AbstractNpcAI
|
||||
final int npcId = npc.getId();
|
||||
if (npcId == ORFEN)
|
||||
{
|
||||
if (!_IsTeleported && ((npc.getCurrentHp() - damage) < (npc.getMaxHp() / 2)))
|
||||
if (!_isTeleported && ((npc.getCurrentHp() - damage) < (npc.getMaxHp() / 2)))
|
||||
{
|
||||
_IsTeleported = true;
|
||||
_isTeleported = true;
|
||||
setSpawnPoint(npc, 0);
|
||||
}
|
||||
else if (npc.isInsideRadius2D(attacker, 1000) && !npc.isInsideRadius2D(attacker, 300) && (getRandom(10) == 0))
|
||||
|
Reference in New Issue
Block a user