From 80eabf80e3349c3f6077fdc10e2a91a5d471d57f Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sun, 12 Jun 2016 12:11:50 +0000 Subject: [PATCH] Queen Ant kite protection. --- .../scripts/ai/areas/Wasteland/QueenAnt.java | 47 +++++++++++++++++-- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/trunk/dist/game/data/scripts/ai/areas/Wasteland/QueenAnt.java b/trunk/dist/game/data/scripts/ai/areas/Wasteland/QueenAnt.java index 2ca59fae4d..832f2aaa5f 100644 --- a/trunk/dist/game/data/scripts/ai/areas/Wasteland/QueenAnt.java +++ b/trunk/dist/game/data/scripts/ai/areas/Wasteland/QueenAnt.java @@ -18,8 +18,10 @@ package ai.areas.Wasteland; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ScheduledFuture; import com.l2jmobius.Config; +import com.l2jmobius.gameserver.ThreadPoolManager; import com.l2jmobius.gameserver.ai.CtrlIntention; import com.l2jmobius.gameserver.instancemanager.GrandBossManager; import com.l2jmobius.gameserver.instancemanager.ZoneManager; @@ -79,9 +81,10 @@ public final class QueenAnt extends AbstractNpcAI private static SkillHolder HEAL1 = new SkillHolder(4020, 1); private static SkillHolder HEAL2 = new SkillHolder(4024, 1); - private L2MonsterInstance _queen = null; + L2MonsterInstance _queen = null; private L2MonsterInstance _larva = null; private final Set _nurses = ConcurrentHashMap.newKeySet(); + ScheduledFuture _task = null; private QueenAnt() { @@ -230,19 +233,30 @@ public final class QueenAnt extends AbstractNpcAI switch (npc.getId()) { case LARVA: + { mob.setIsImmobilized(true); mob.setUndying(true); mob.setIsRaidMinion(true); break; + } case NURSE: + { mob.disableCoreAI(true); mob.setIsRaidMinion(true); _nurses.add(mob); break; + } case ROYAL: case GUARD: + { mob.setIsRaidMinion(true); break; + } + case QUEEN: + { + _task = ThreadPoolManager.getInstance().scheduleAiAtFixedRate(new QueenAntTask(), 5 * 1000, 5 * 1000); + break; + } } return super.onSpawn(npc); @@ -333,8 +347,7 @@ public final class QueenAnt extends AbstractNpcAI npc.broadcastPacket(new PlaySound(1, "BS02_D", 1, npc.getObjectId(), npc.getX(), npc.getY(), npc.getZ())); GrandBossManager.getInstance().setBossStatus(QUEEN, DEAD); // Calculate Min and Max respawn times randomly. - long respawnTime = Config.QUEEN_ANT_SPAWN_INTERVAL + getRandom(-Config.QUEEN_ANT_SPAWN_RANDOM, Config.QUEEN_ANT_SPAWN_RANDOM); - respawnTime *= 3600000; + final long respawnTime = (Config.QUEEN_ANT_SPAWN_INTERVAL + getRandom(-Config.QUEEN_ANT_SPAWN_RANDOM, Config.QUEEN_ANT_SPAWN_RANDOM)) * 3600000; startQuestTimer("queen_unlock", respawnTime, null, null); cancelQuestTimer("action", npc, null); cancelQuestTimer("heal", null, null); @@ -346,6 +359,11 @@ public final class QueenAnt extends AbstractNpcAI _larva.deleteMe(); _larva = null; _queen = null; + if (_task != null) + { + _task.cancel(false); + _task = null; + } } else if ((_queen != null) && !_queen.isAlikeDead()) { @@ -370,6 +388,29 @@ public final class QueenAnt extends AbstractNpcAI return super.onKill(npc, killer, isSummon); } + private class QueenAntTask implements Runnable + { + public QueenAntTask() + { + // Constructor stub + } + + @Override + public void run() + { + if ((_queen == null) || _queen.isDead()) + { + _task.cancel(false); + _task = null; + } + else if (_queen.calculateDistance(QUEEN_X, QUEEN_Y, QUEEN_Z, false, false) > 2000.) + { + _queen.clearAggroList(); + _queen.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(QUEEN_X, QUEEN_Y, QUEEN_Z, 0)); + } + } + } + public static void main(String[] args) { new QueenAnt();