Hi , bro
I tried this code above usind ScheduleFuture. But sometimes countdown timer don't matches with zone change time. Could you give me some light?
public ZoneRandom()
{
_log.info("ZoneRandom: Loading zones...");
ThreadPoolManager.scheduleAiAtFixedRate(this, 0, REFRESH * 1000);
// ThreadPoolManager.scheduleAiAtFixedRate(new TimerZoneTask(), 0, REFRESH * 1000);
}
@Override
public void run()
{
RANDOM = Rnd.get(ZONES.length - 1);
for (L2PcInstance player : L2World.getInstance().getPlayers())
{
if (player.isInsideZone(ZoneIdType.RANDOM_ZONE))
{
player.teleToLocation(getRandomZone().getX() + Rnd.get(-RANDOM_RANGE, RANDOM_RANGE), getRandomZone().getY() + Rnd.get(-RANDOM_RANGE, RANDOM_RANGE), getRandomZone().getZ(), 20);
final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
final Runnable seconds = () -> player.sendPacket(new ExShowScreenMessage("Time Left: " + getSeconds(), 1000));
final ScheduledFuture<?> timerHandle = scheduler.scheduleAtFixedRate(seconds, 0, 1, TimeUnit.SECONDS);
final Runnable canceler = () -> timerHandle.cancel(false);
if (getSeconds() <= 0)
{
timerHandle.cancel(true);
}
scheduler.schedule(canceler, REFRESH, TimeUnit.SECONDS);
}
}
Broadcast.toAllOnlinePlayers(new CreatureSay(1, Say2.BATTLEFIELD, "Arena Manager: ", "The pvp area was changed to a random."));
Broadcast.toAllOnlinePlayers(new CreatureSay(1, Say2.BATTLEFIELD, "Arena Manager: ", "Next random pvp area will be change after " + REFRESH + " minute(s)."));
Broadcast.toAllOnlinePlayers(new CreatureSay(1, Say2.BATTLEFIELD, "Arena Manager: ", "Use ''.arenajoin'' to enter on pvp zone and ''.arenaleave'' to leave."));
}
public static int getSeconds()
{
return --REFRESH;
}