Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ### 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement