JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an
alternative browser .
Продам Скрипт для Instances (Таймер На Экране).
Подробности в ЛС
ScheduledFuture и ExShowScreenMessage ?
или по другому реализация?
### Eclipse Workspace Patch 1.0
#P
Index: java/net/sf/l2j/gameserver/model/zone/type/TownZone.java
===================================================================
--- java/net/sf/l2j/gameserver/model/zone/type/TownZone.java (revision 3)
+++ java/net/sf/l2j/gameserver/model/zone/type/TownZone.java (working copy)
@@ -1,10 +1,18 @@
package net.sf.l2j.gameserver.model.zone.type;
+import java.util.Collection;
+import java.util.concurrent.ScheduledFuture;
+import java.util.stream.Collectors;
+
+import net.sf.l2j.commons.concurrent.ThreadPool;
+
import net.sf.l2j.Config;
import net.sf.l2j.gameserver.model.actor.Creature;
import net.sf.l2j.gameserver.model.actor.instance.Player;
import net.sf.l2j.gameserver.model.zone.SpawnZoneType;
import net.sf.l2j.gameserver.model.zone.ZoneId;
+import net.sf.l2j.gameserver.network.serverpackets.ExShowScreenMessage;
+import net.sf.l2j.gameserver.network.serverpackets.ExShowScreenMessage.SMPOS;
/**
* A zone extending {@link SpawnZoneType}, used by towns. A town zone is generally associated to a castle for taxes.
@@ -13,6 +21,8 @@
{
private int _townId;
private int _castleId;
+ protected ScheduledFuture<?> _counterTask = null;
+ protected int _timer = 5 * 60;
private boolean _isPeaceZone = true;
@@ -37,6 +47,9 @@
@Override
protected void onEnter(Creature character)
{
+ if (character instanceof Player && _counterTask == null)
+ _counterTask = startCounter();
+
if (Config.ZONE_TOWN == 1 && character instanceof Player && ((Player) character).getSiegeState() != 0)
return;
@@ -46,6 +59,11 @@
character.setInsideZone(ZoneId.TOWN, true);
}
+ private ScheduledFuture<?> startCounter()
+ {
+ return ThreadPool.scheduleAtFixedRate(new Counter(), 1000, 1000);
+ }
+
@Override
protected void onExit(Creature character)
{
@@ -53,6 +71,9 @@
character.setInsideZone(ZoneId.PEACE, false);
character.setInsideZone(ZoneId.TOWN, false);
+
+ if (getPlayers().size() < 1)
+ resetCounter();
}
@Override
@@ -75,8 +96,49 @@
return _castleId;
}
+ public Collection<Player> getPlayers()
+ {
+ return getCharacters().stream().filter(pl -> pl instanceof Player).map(cr -> (Player) cr).collect(Collectors.toList());
+ }
+
public final boolean isPeaceZone()
{
return _isPeaceZone;
}
+
+ protected void resetCounter()
+ {
+ if (_counterTask != null)
+ {
+ _counterTask.cancel(true);
+ _counterTask = null;
+ }
+ _timer = 5 * 60;
+ }
+
+ class Counter implements Runnable
+ {
+
+ protected Counter()
+ {
+ }
+
+ @Override
+ public void run()
+ {
+ if (_timer < 1)
+ {
+ resetCounter();
+ return;
+ }
+ for (Player player : getPlayers())
+ {
+ int minutes = _timer / 60;
+ int second = _timer % 60;
+ String timing = ((minutes < 10) ? ("0" + minutes) : minutes) + ":" + ((second < 10) ? ("0" + second) : second);
+ player.sendPacket(new ExShowScreenMessage("Next town at : " + timing, 1100, SMPOS.TOP_CENTER, false));
+ }
+ _timer--;
+ }
+ }
}
\ No newline at end of file
### Eclipse Workspace Patch 1.0
#P
Index: java/net/sf/l2j/gameserver/model/zone/type/TownZone.java
===================================================================
--- java/net/sf/l2j/gameserver/model/zone/type/TownZone.java (revision 3)
+++ java/net/sf/l2j/gameserver/model/zone/type/TownZone.java (working copy)
@@ -1,10 +1,18 @@
package net.sf.l2j.gameserver.model.zone.type;
+import java.util.Collection;
+import java.util.concurrent.ScheduledFuture;
+import java.util.stream.Collectors;
+
+import net.sf.l2j.commons.concurrent.ThreadPool;
+
import net.sf.l2j.Config;
import net.sf.l2j.gameserver.model.actor.Creature;
import net.sf.l2j.gameserver.model.actor.instance.Player;
import net.sf.l2j.gameserver.model.zone.SpawnZoneType;
import net.sf.l2j.gameserver.model.zone.ZoneId;
+import net.sf.l2j.gameserver.network.serverpackets.ExShowScreenMessage;
+import net.sf.l2j.gameserver.network.serverpackets.ExShowScreenMessage.SMPOS;
/**
* A zone extending {@link SpawnZoneType}, used by towns. A town zone is generally associated to a castle for taxes.
@@ -13,6 +21,8 @@
{
private int _townId;
private int _castleId;
+ protected ScheduledFuture<?> _counterTask = null;
+ protected int _timer = 5 * 60;
private boolean _isPeaceZone = true;
@@ -37,6 +47,9 @@
@Override
protected void onEnter(Creature character)
{
+ if (character instanceof Player && _counterTask == null)
+ _counterTask = startCounter();
+
if (Config.ZONE_TOWN == 1 && character instanceof Player && ((Player) character).getSiegeState() != 0)
return;
@@ -46,6 +59,11 @@
character.setInsideZone(ZoneId.TOWN, true);
}
+ private ScheduledFuture<?> startCounter()
+ {
+ return ThreadPool.scheduleAtFixedRate(new Counter(), 1000, 1000);
+ }
+
@Override
protected void onExit(Creature character)
{
@@ -53,6 +71,9 @@
character.setInsideZone(ZoneId.PEACE, false);
character.setInsideZone(ZoneId.TOWN, false);
+
+ if (getPlayers().size() < 1)
+ resetCounter();
}
@Override
@@ -75,8 +96,49 @@
return _castleId;
}
+ public Collection<Player> getPlayers()
+ {
+ return getCharacters().stream().filter(pl -> pl instanceof Player).map(cr -> (Player) cr).collect(Collectors.toList());
+ }
+
public final boolean isPeaceZone()
{
return _isPeaceZone;
}
+
+ protected void resetCounter()
+ {
+ if (_counterTask != null)
+ {
+ _counterTask.cancel(true);
+ _counterTask = null;
+ }
+ _timer = 5 * 60;
+ }
+
+ class Counter implements Runnable
+ {
+
+ protected Counter()
+ {
+ }
+
+ @Override
+ public void run()
+ {
+ if (_timer < 1)
+ {
+ resetCounter();
+ return;
+ }
+ for (Player player : getPlayers())
+ {
+ int minutes = _timer / 60;
+ int second = _timer % 60;
+ String timing = ((minutes < 10) ? ("0" + minutes) : minutes) + ":" + ((second < 10) ? ("0" + second) : second);
+ player.sendPacket(new ExShowScreenMessage("Next town at : " + timing, 1100, SMPOS.TOP_CENTER, false));
+ }
+ _timer--;
+ }
+ }
}
\ No newline at end of file
Если уж взял с ммодева хоть бы указал ссылкой)
И под тег код запихнул)