Atingo should use NPC script value to store pet object id.

This commit is contained in:
MobiusDevelopment
2021-10-10 14:15:41 +00:00
parent 3efecc0249
commit fe3a273230
2 changed files with 40 additions and 32 deletions

View File

@@ -39,7 +39,8 @@ import ai.AbstractNpcAI;
public class Atingo extends AbstractNpcAI public class Atingo extends AbstractNpcAI
{ {
// NPCs // NPCs
private static final int ANTINGO = 25914; private static final int ATINGO = 25914;
private static final int SIN_EATER = 25924;
private static final int[] PETS = new int[] private static final int[] PETS = new int[]
{ {
25923, 25923,
@@ -63,8 +64,8 @@ public class Atingo extends AbstractNpcAI
public Atingo() public Atingo()
{ {
addSpawnId(ANTINGO); addSpawnId(ATINGO);
addKillId(ANTINGO); addKillId(ATINGO);
} }
@Override @Override
@@ -79,9 +80,9 @@ public class Atingo extends AbstractNpcAI
{ {
ThreadPool.schedule(() -> ThreadPool.schedule(() ->
{ {
if (World.getInstance().getVisibleObjects().stream().noneMatch(it -> it.getId() == ANTINGO)) if (World.getInstance().getVisibleObjects().stream().noneMatch(it -> it.getId() == ATINGO))
{ {
addSpawn(ANTINGO, getRandomEntry(SPAWNS)); addSpawn(ATINGO, getRandomEntry(SPAWNS));
} }
}, ATINGO_RESPAWN_DURATION.toMillis()); }, ATINGO_RESPAWN_DURATION.toMillis());
@@ -92,19 +93,19 @@ public class Atingo extends AbstractNpcAI
{ {
final Npc creature = (Npc) hpChangeEvent.getCreature(); final Npc creature = (Npc) hpChangeEvent.getCreature();
final double hp = hpChangeEvent.getNewHp(); final double hp = hpChangeEvent.getNewHp();
if (((creature.getMaxHp() / 2) > hp) && (creature.getVariables().getInt("ATINGO_PET", -1) == -1)) if (((creature.getMaxHp() / 2) > hp) && (creature.getScriptValue() == 0))
{ {
if (Rnd.get(100) <= ATINGO_PET_SPAWN_RATE) if (Rnd.get(100) <= ATINGO_PET_SPAWN_RATE)
{ {
final Npc pet = addSpawn(getRandomEntry(PETS), GeoEngine.getInstance().getValidLocation(creature.getX(), creature.getY(), creature.getZ(), creature.getX() + 50, creature.getY() + 50, creature.getZ(), null)); final Npc pet = addSpawn(getRandomEntry(PETS), GeoEngine.getInstance().getValidLocation(creature.getX(), creature.getY(), creature.getZ(), creature.getX() + 50, creature.getY() + 50, creature.getZ(), null));
creature.getVariables().set("ATINGO_PET", pet.getObjectId()); creature.setScriptValue(pet.getObjectId());
pet.setInvul(true); pet.setInvul(true);
pet.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.H_ULTIMATE_DEFENCE_B_AVE); pet.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.H_ULTIMATE_DEFENCE_B_AVE);
} }
else else
{ {
final Npc pet = addSpawn(25924, GeoEngine.getInstance().getValidLocation(creature.getX(), creature.getY(), creature.getZ(), creature.getX() + 50, creature.getY() + 50, creature.getZ(), null)); final Npc pet = addSpawn(SIN_EATER, GeoEngine.getInstance().getValidLocation(creature.getX(), creature.getY(), creature.getZ(), creature.getX() + 50, creature.getY() + 50, creature.getZ(), null));
creature.getVariables().set("ATINGO_PET", pet.getObjectId()); creature.setScriptValue(pet.getObjectId());
pet.setInvul(true); pet.setInvul(true);
pet.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.H_ULTIMATE_DEFENCE_B_AVE); pet.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.H_ULTIMATE_DEFENCE_B_AVE);
} }
@@ -114,19 +115,22 @@ public class Atingo extends AbstractNpcAI
@Override @Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon) public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{ {
final int petObjId = npc.getVariables().getInt("ATINGO_PET", -1); final int petObjId = npc.getScriptValue();
final Npc pet = (Npc) World.getInstance().findObject(petObjId); if (petObjId > 0)
if ((petObjId > 0) && (pet != null))
{ {
pet.setInvul(false); final Npc pet = (Npc) World.getInstance().findObject(petObjId);
pet.getEffectList().stopAbnormalVisualEffect(AbnormalVisualEffect.H_ULTIMATE_DEFENCE_B_AVE); if (pet != null)
{
pet.setInvul(false);
pet.getEffectList().stopAbnormalVisualEffect(AbnormalVisualEffect.H_ULTIMATE_DEFENCE_B_AVE);
}
} }
ThreadPool.schedule(() -> ThreadPool.schedule(() ->
{ {
if (World.getInstance().getVisibleObjects().stream().noneMatch(it -> it.getId() == ANTINGO)) if (World.getInstance().getVisibleObjects().stream().noneMatch(it -> it.getId() == ATINGO))
{ {
addSpawn(ANTINGO, getRandomEntry(SPAWNS)); addSpawn(ATINGO, getRandomEntry(SPAWNS));
} }
}, ATINGO_RESPAWN_DURATION.toMillis()); }, ATINGO_RESPAWN_DURATION.toMillis());

View File

@@ -39,7 +39,8 @@ import ai.AbstractNpcAI;
public class Atingo extends AbstractNpcAI public class Atingo extends AbstractNpcAI
{ {
// NPCs // NPCs
private static final int ANTINGO = 25914; private static final int ATINGO = 25914;
private static final int SIN_EATER = 25924;
private static final int[] PETS = new int[] private static final int[] PETS = new int[]
{ {
25923, 25923,
@@ -63,8 +64,8 @@ public class Atingo extends AbstractNpcAI
public Atingo() public Atingo()
{ {
addSpawnId(ANTINGO); addSpawnId(ATINGO);
addKillId(ANTINGO); addKillId(ATINGO);
} }
@Override @Override
@@ -79,9 +80,9 @@ public class Atingo extends AbstractNpcAI
{ {
ThreadPool.schedule(() -> ThreadPool.schedule(() ->
{ {
if (World.getInstance().getVisibleObjects().stream().noneMatch(it -> it.getId() == ANTINGO)) if (World.getInstance().getVisibleObjects().stream().noneMatch(it -> it.getId() == ATINGO))
{ {
addSpawn(ANTINGO, getRandomEntry(SPAWNS)); addSpawn(ATINGO, getRandomEntry(SPAWNS));
} }
}, ATINGO_RESPAWN_DURATION.toMillis()); }, ATINGO_RESPAWN_DURATION.toMillis());
@@ -92,19 +93,19 @@ public class Atingo extends AbstractNpcAI
{ {
final Npc creature = (Npc) hpChangeEvent.getCreature(); final Npc creature = (Npc) hpChangeEvent.getCreature();
final double hp = hpChangeEvent.getNewHp(); final double hp = hpChangeEvent.getNewHp();
if (((creature.getMaxHp() / 2) > hp) && (creature.getVariables().getInt("ATINGO_PET", -1) == -1)) if (((creature.getMaxHp() / 2) > hp) && (creature.getScriptValue() == 0))
{ {
if (Rnd.get(100) <= ATINGO_PET_SPAWN_RATE) if (Rnd.get(100) <= ATINGO_PET_SPAWN_RATE)
{ {
final Npc pet = addSpawn(getRandomEntry(PETS), GeoEngine.getInstance().getValidLocation(creature.getX(), creature.getY(), creature.getZ(), creature.getX() + 50, creature.getY() + 50, creature.getZ(), null)); final Npc pet = addSpawn(getRandomEntry(PETS), GeoEngine.getInstance().getValidLocation(creature.getX(), creature.getY(), creature.getZ(), creature.getX() + 50, creature.getY() + 50, creature.getZ(), null));
creature.getVariables().set("ATINGO_PET", pet.getObjectId()); creature.setScriptValue(pet.getObjectId());
pet.setInvul(true); pet.setInvul(true);
pet.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.H_ULTIMATE_DEFENCE_B_AVE); pet.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.H_ULTIMATE_DEFENCE_B_AVE);
} }
else else
{ {
final Npc pet = addSpawn(25924, GeoEngine.getInstance().getValidLocation(creature.getX(), creature.getY(), creature.getZ(), creature.getX() + 50, creature.getY() + 50, creature.getZ(), null)); final Npc pet = addSpawn(SIN_EATER, GeoEngine.getInstance().getValidLocation(creature.getX(), creature.getY(), creature.getZ(), creature.getX() + 50, creature.getY() + 50, creature.getZ(), null));
creature.getVariables().set("ATINGO_PET", pet.getObjectId()); creature.setScriptValue(pet.getObjectId());
pet.setInvul(true); pet.setInvul(true);
pet.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.H_ULTIMATE_DEFENCE_B_AVE); pet.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.H_ULTIMATE_DEFENCE_B_AVE);
} }
@@ -114,19 +115,22 @@ public class Atingo extends AbstractNpcAI
@Override @Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon) public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{ {
final int petObjId = npc.getVariables().getInt("ATINGO_PET", -1); final int petObjId = npc.getScriptValue();
final Npc pet = (Npc) World.getInstance().findObject(petObjId); if (petObjId > 0)
if ((petObjId > 0) && (pet != null))
{ {
pet.setInvul(false); final Npc pet = (Npc) World.getInstance().findObject(petObjId);
pet.getEffectList().stopAbnormalVisualEffect(AbnormalVisualEffect.H_ULTIMATE_DEFENCE_B_AVE); if (pet != null)
{
pet.setInvul(false);
pet.getEffectList().stopAbnormalVisualEffect(AbnormalVisualEffect.H_ULTIMATE_DEFENCE_B_AVE);
}
} }
ThreadPool.schedule(() -> ThreadPool.schedule(() ->
{ {
if (World.getInstance().getVisibleObjects().stream().noneMatch(it -> it.getId() == ANTINGO)) if (World.getInstance().getVisibleObjects().stream().noneMatch(it -> it.getId() == ATINGO))
{ {
addSpawn(ANTINGO, getRandomEntry(SPAWNS)); addSpawn(ATINGO, getRandomEntry(SPAWNS));
} }
}, ATINGO_RESPAWN_DURATION.toMillis()); }, ATINGO_RESPAWN_DURATION.toMillis());