Queen Ant kite protection.
This commit is contained in:
parent
6bdf036fec
commit
80eabf80e3
@ -18,8 +18,10 @@ package ai.areas.Wasteland;
|
|||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.concurrent.ScheduledFuture;
|
||||||
|
|
||||||
import com.l2jmobius.Config;
|
import com.l2jmobius.Config;
|
||||||
|
import com.l2jmobius.gameserver.ThreadPoolManager;
|
||||||
import com.l2jmobius.gameserver.ai.CtrlIntention;
|
import com.l2jmobius.gameserver.ai.CtrlIntention;
|
||||||
import com.l2jmobius.gameserver.instancemanager.GrandBossManager;
|
import com.l2jmobius.gameserver.instancemanager.GrandBossManager;
|
||||||
import com.l2jmobius.gameserver.instancemanager.ZoneManager;
|
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 HEAL1 = new SkillHolder(4020, 1);
|
||||||
private static SkillHolder HEAL2 = new SkillHolder(4024, 1);
|
private static SkillHolder HEAL2 = new SkillHolder(4024, 1);
|
||||||
|
|
||||||
private L2MonsterInstance _queen = null;
|
L2MonsterInstance _queen = null;
|
||||||
private L2MonsterInstance _larva = null;
|
private L2MonsterInstance _larva = null;
|
||||||
private final Set<L2MonsterInstance> _nurses = ConcurrentHashMap.newKeySet();
|
private final Set<L2MonsterInstance> _nurses = ConcurrentHashMap.newKeySet();
|
||||||
|
ScheduledFuture<?> _task = null;
|
||||||
|
|
||||||
private QueenAnt()
|
private QueenAnt()
|
||||||
{
|
{
|
||||||
@ -230,19 +233,30 @@ public final class QueenAnt extends AbstractNpcAI
|
|||||||
switch (npc.getId())
|
switch (npc.getId())
|
||||||
{
|
{
|
||||||
case LARVA:
|
case LARVA:
|
||||||
|
{
|
||||||
mob.setIsImmobilized(true);
|
mob.setIsImmobilized(true);
|
||||||
mob.setUndying(true);
|
mob.setUndying(true);
|
||||||
mob.setIsRaidMinion(true);
|
mob.setIsRaidMinion(true);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case NURSE:
|
case NURSE:
|
||||||
|
{
|
||||||
mob.disableCoreAI(true);
|
mob.disableCoreAI(true);
|
||||||
mob.setIsRaidMinion(true);
|
mob.setIsRaidMinion(true);
|
||||||
_nurses.add(mob);
|
_nurses.add(mob);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case ROYAL:
|
case ROYAL:
|
||||||
case GUARD:
|
case GUARD:
|
||||||
|
{
|
||||||
mob.setIsRaidMinion(true);
|
mob.setIsRaidMinion(true);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
case QUEEN:
|
||||||
|
{
|
||||||
|
_task = ThreadPoolManager.getInstance().scheduleAiAtFixedRate(new QueenAntTask(), 5 * 1000, 5 * 1000);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.onSpawn(npc);
|
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()));
|
npc.broadcastPacket(new PlaySound(1, "BS02_D", 1, npc.getObjectId(), npc.getX(), npc.getY(), npc.getZ()));
|
||||||
GrandBossManager.getInstance().setBossStatus(QUEEN, DEAD);
|
GrandBossManager.getInstance().setBossStatus(QUEEN, DEAD);
|
||||||
// Calculate Min and Max respawn times randomly.
|
// 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);
|
final long respawnTime = (Config.QUEEN_ANT_SPAWN_INTERVAL + getRandom(-Config.QUEEN_ANT_SPAWN_RANDOM, Config.QUEEN_ANT_SPAWN_RANDOM)) * 3600000;
|
||||||
respawnTime *= 3600000;
|
|
||||||
startQuestTimer("queen_unlock", respawnTime, null, null);
|
startQuestTimer("queen_unlock", respawnTime, null, null);
|
||||||
cancelQuestTimer("action", npc, null);
|
cancelQuestTimer("action", npc, null);
|
||||||
cancelQuestTimer("heal", null, null);
|
cancelQuestTimer("heal", null, null);
|
||||||
@ -346,6 +359,11 @@ public final class QueenAnt extends AbstractNpcAI
|
|||||||
_larva.deleteMe();
|
_larva.deleteMe();
|
||||||
_larva = null;
|
_larva = null;
|
||||||
_queen = null;
|
_queen = null;
|
||||||
|
if (_task != null)
|
||||||
|
{
|
||||||
|
_task.cancel(false);
|
||||||
|
_task = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if ((_queen != null) && !_queen.isAlikeDead())
|
else if ((_queen != null) && !_queen.isAlikeDead())
|
||||||
{
|
{
|
||||||
@ -370,6 +388,29 @@ public final class QueenAnt extends AbstractNpcAI
|
|||||||
return super.onKill(npc, killer, isSummon);
|
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)
|
public static void main(String[] args)
|
||||||
{
|
{
|
||||||
new QueenAnt();
|
new QueenAnt();
|
||||||
|
Loading…
Reference in New Issue
Block a user