Advertisement
tobaJK

Timer

Oct 1st, 2018
409
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.10 KB | None | 0 0
  1. ### Eclipse Workspace Patch 1.0
  2. #P
  3. Index: java/net/sf/l2j/gameserver/model/zone/type/TownZone.java
  4. ===================================================================
  5. --- java/net/sf/l2j/gameserver/model/zone/type/TownZone.java    (revision 3)
  6. +++ java/net/sf/l2j/gameserver/model/zone/type/TownZone.java    (working copy)
  7. @@ -1,10 +1,18 @@
  8.  package net.sf.l2j.gameserver.model.zone.type;
  9.  
  10. +import java.util.Collection;
  11. +import java.util.concurrent.ScheduledFuture;
  12. +import java.util.stream.Collectors;
  13. +
  14. +import net.sf.l2j.commons.concurrent.ThreadPool;
  15. +
  16.  import net.sf.l2j.Config;
  17.  import net.sf.l2j.gameserver.model.actor.Creature;
  18.  import net.sf.l2j.gameserver.model.actor.instance.Player;
  19.  import net.sf.l2j.gameserver.model.zone.SpawnZoneType;
  20.  import net.sf.l2j.gameserver.model.zone.ZoneId;
  21. +import net.sf.l2j.gameserver.network.serverpackets.ExShowScreenMessage;
  22. +import net.sf.l2j.gameserver.network.serverpackets.ExShowScreenMessage.SMPOS;
  23.  
  24.  /**
  25.   * A zone extending {@link SpawnZoneType}, used by towns. A town zone is generally associated to a castle for taxes.
  26. @@ -13,6 +21,8 @@
  27.  {
  28.     private int _townId;
  29.     private int _castleId;
  30. +   protected ScheduledFuture<?> _counterTask = null;
  31. +   protected int _timer = 5 * 60;
  32.    
  33.     private boolean _isPeaceZone = true;
  34.    
  35. @@ -37,6 +47,9 @@
  36.     @Override
  37.     protected void onEnter(Creature character)
  38.     {
  39. +       if (character instanceof Player && _counterTask == null)
  40. +           _counterTask = startCounter();
  41. +      
  42.         if (Config.ZONE_TOWN == 1 && character instanceof Player && ((Player) character).getSiegeState() != 0)
  43.             return;
  44.        
  45. @@ -46,6 +59,11 @@
  46.         character.setInsideZone(ZoneId.TOWN, true);
  47.     }
  48.    
  49. +   private ScheduledFuture<?> startCounter()
  50. +   {
  51. +       return ThreadPool.scheduleAtFixedRate(new Counter(), 1000, 1000);
  52. +   }
  53. +  
  54.     @Override
  55.     protected void onExit(Creature character)
  56.     {
  57. @@ -53,6 +71,9 @@
  58.             character.setInsideZone(ZoneId.PEACE, false);
  59.        
  60.         character.setInsideZone(ZoneId.TOWN, false);
  61. +      
  62. +       if (getPlayers().size() < 1)
  63. +           resetCounter();
  64.     }
  65.    
  66.     @Override
  67. @@ -75,8 +96,49 @@
  68.         return _castleId;
  69.     }
  70.    
  71. +   public Collection<Player> getPlayers()
  72. +   {
  73. +       return getCharacters().stream().filter(pl -> pl instanceof Player).map(cr -> (Player) cr).collect(Collectors.toList());
  74. +   }
  75. +  
  76.     public final boolean isPeaceZone()
  77.     {
  78.         return _isPeaceZone;
  79.     }
  80. +  
  81. +   protected void resetCounter()
  82. +   {
  83. +       if (_counterTask != null)
  84. +       {
  85. +           _counterTask.cancel(true);
  86. +           _counterTask = null;
  87. +       }
  88. +       _timer = 5 * 60;
  89. +   }
  90. +  
  91. +   class Counter implements Runnable
  92. +   {
  93. +      
  94. +       protected Counter()
  95. +       {
  96. +       }
  97. +      
  98. +       @Override
  99. +       public void run()
  100. +       {
  101. +           if (_timer < 1)
  102. +           {
  103. +               resetCounter();
  104. +               return;
  105. +           }
  106. +           for (Player player : getPlayers())
  107. +           {
  108. +               int minutes = _timer / 60;
  109. +               int second = _timer % 60;
  110. +               String timing = ((minutes < 10) ? ("0" + minutes) : minutes) + ":" + ((second < 10) ? ("0" + second) : second);
  111. +               player.sendPacket(new ExShowScreenMessage("Next town at : " + timing, 1100, SMPOS.TOP_CENTER, false));
  112. +           }
  113. +           _timer--;
  114. +       }
  115. +   }
  116.  }
  117. \ No newline at end of file
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement