JailHandler.java 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. /*
  2. * Copyright (C) 2004-2013 L2J DataPack
  3. *
  4. * This file is part of L2J DataPack.
  5. *
  6. * L2J DataPack is free software: you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation, either version 3 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * L2J DataPack is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. */
  19. package handlers.punishmenthandlers;
  20. import com.l2jserver.gameserver.LoginServerThread;
  21. import com.l2jserver.gameserver.ThreadPoolManager;
  22. import com.l2jserver.gameserver.cache.HtmCache;
  23. import com.l2jserver.gameserver.handler.IPunishmentHandler;
  24. import com.l2jserver.gameserver.model.L2World;
  25. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  26. import com.l2jserver.gameserver.model.actor.tasks.player.TeleportTask;
  27. import com.l2jserver.gameserver.model.entity.TvTEvent;
  28. import com.l2jserver.gameserver.model.olympiad.OlympiadManager;
  29. import com.l2jserver.gameserver.model.punishment.PunishmentTask;
  30. import com.l2jserver.gameserver.model.punishment.PunishmentType;
  31. import com.l2jserver.gameserver.model.zone.ZoneId;
  32. import com.l2jserver.gameserver.model.zone.type.L2JailZone;
  33. import com.l2jserver.gameserver.network.L2GameClient;
  34. import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
  35. import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.PlayerSpawnListener;
  36. /**
  37. * This class handles jail punishment.
  38. * @author UnAfraid
  39. */
  40. public class JailHandler extends PlayerSpawnListener implements IPunishmentHandler
  41. {
  42. @Override
  43. public void onPlayerLogin(L2PcInstance activeChar)
  44. {
  45. if (activeChar.isJailed() && !activeChar.isInsideZone(ZoneId.JAIL))
  46. {
  47. applyToPlayer(null, activeChar);
  48. }
  49. else if (!activeChar.isJailed() && activeChar.isInsideZone(ZoneId.JAIL) && !activeChar.isGM())
  50. {
  51. removeFromPlayer(activeChar);
  52. }
  53. }
  54. @Override
  55. public void onStart(PunishmentTask task)
  56. {
  57. switch (task.getAffect())
  58. {
  59. case CHARACTER:
  60. {
  61. int objectId = Integer.parseInt(String.valueOf(task.getKey()));
  62. final L2PcInstance player = L2World.getInstance().getPlayer(objectId);
  63. if (player != null)
  64. {
  65. applyToPlayer(task, player);
  66. }
  67. break;
  68. }
  69. case ACCOUNT:
  70. {
  71. String account = String.valueOf(task.getKey());
  72. final L2GameClient client = LoginServerThread.getInstance().getClient(account);
  73. if (client != null)
  74. {
  75. final L2PcInstance player = client.getActiveChar();
  76. if (player != null)
  77. {
  78. applyToPlayer(task, player);
  79. }
  80. }
  81. break;
  82. }
  83. case IP:
  84. {
  85. String ip = String.valueOf(task.getKey());
  86. for (L2PcInstance player : L2World.getInstance().getAllPlayersArray())
  87. {
  88. if (player.getIPAddress().equals(ip))
  89. {
  90. applyToPlayer(task, player);
  91. }
  92. }
  93. break;
  94. }
  95. }
  96. }
  97. @Override
  98. public void onEnd(PunishmentTask task)
  99. {
  100. switch (task.getAffect())
  101. {
  102. case CHARACTER:
  103. {
  104. int objectId = Integer.parseInt(String.valueOf(task.getKey()));
  105. final L2PcInstance player = L2World.getInstance().getPlayer(objectId);
  106. if (player != null)
  107. {
  108. removeFromPlayer(player);
  109. }
  110. break;
  111. }
  112. case ACCOUNT:
  113. {
  114. String account = String.valueOf(task.getKey());
  115. final L2GameClient client = LoginServerThread.getInstance().getClient(account);
  116. if (client != null)
  117. {
  118. final L2PcInstance player = client.getActiveChar();
  119. if (player != null)
  120. {
  121. removeFromPlayer(player);
  122. }
  123. }
  124. break;
  125. }
  126. case IP:
  127. {
  128. String ip = String.valueOf(task.getKey());
  129. for (L2PcInstance player : L2World.getInstance().getAllPlayersArray())
  130. {
  131. if (player.getIPAddress().equals(ip))
  132. {
  133. removeFromPlayer(player);
  134. }
  135. }
  136. break;
  137. }
  138. }
  139. }
  140. /**
  141. * Applies all punishment effects from the player.
  142. * @param task
  143. * @param player
  144. */
  145. private static void applyToPlayer(PunishmentTask task, L2PcInstance player)
  146. {
  147. player.setInstanceId(0);
  148. player.setIsIn7sDungeon(false);
  149. if (!TvTEvent.isInactive() && TvTEvent.isPlayerParticipant(player.getObjectId()))
  150. {
  151. TvTEvent.removeParticipant(player.getObjectId());
  152. }
  153. if (OlympiadManager.getInstance().isRegisteredInComp(player))
  154. {
  155. OlympiadManager.getInstance().removeDisconnectedCompetitor(player);
  156. }
  157. ThreadPoolManager.getInstance().scheduleGeneral(new TeleportTask(player, L2JailZone.getLocationIn()), 2000);
  158. // Open a Html message to inform the player
  159. final NpcHtmlMessage msg = new NpcHtmlMessage(0);
  160. String content = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), "data/html/jail_in.htm");
  161. if (content != null)
  162. {
  163. content = content.replaceAll("%reason%", task != null ? task.getReason() : "");
  164. content = content.replaceAll("%punishedBy%", task != null ? task.getPunishedBy() : "");
  165. msg.setHtml(content);
  166. }
  167. else
  168. {
  169. msg.setHtml("<html><body>You have been put in jail by an admin.</body></html>");
  170. }
  171. player.sendPacket(msg);
  172. if (task != null)
  173. {
  174. long delay = ((task.getExpirationTime() - System.currentTimeMillis()) / 1000);
  175. if (delay > 0)
  176. {
  177. player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
  178. }
  179. else
  180. {
  181. player.sendMessage("You've been jailed forever.");
  182. }
  183. }
  184. }
  185. /**
  186. * Removes any punishment effects from the player.
  187. * @param player
  188. */
  189. private static void removeFromPlayer(L2PcInstance player)
  190. {
  191. ThreadPoolManager.getInstance().scheduleGeneral(new TeleportTask(player, L2JailZone.getLocationOut()), 2000);
  192. // Open a Html message to inform the player
  193. final NpcHtmlMessage msg = new NpcHtmlMessage(0);
  194. String content = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), "data/html/jail_out.htm");
  195. if (content != null)
  196. {
  197. msg.setHtml(content);
  198. }
  199. else
  200. {
  201. msg.setHtml("<html><body>You are free for now, respect server rules!</body></html>");
  202. }
  203. player.sendPacket(msg);
  204. }
  205. @Override
  206. public PunishmentType getType()
  207. {
  208. return PunishmentType.JAIL;
  209. }
  210. }