Boss related script cleanups.

This commit is contained in:
MobiusDevelopment
2022-01-31 05:43:13 +00:00
parent 3bf00c88bf
commit f43491f64f
179 changed files with 3171 additions and 3794 deletions

View File

@@ -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()
{

View File

@@ -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);

View File

@@ -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)

View File

@@ -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))