AdminSiege.java 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. /*
  2. * This program is free software: you can redistribute it and/or modify it under
  3. * the terms of the GNU General Public License as published by the Free Software
  4. * Foundation, either version 3 of the License, or (at your option) any later
  5. * version.
  6. *
  7. * This program is distributed in the hope that it will be useful, but WITHOUT
  8. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  9. * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  10. * details.
  11. *
  12. * You should have received a copy of the GNU General Public License along with
  13. * this program. If not, see <http://www.gnu.org/licenses/>.
  14. */
  15. package net.sf.l2j.gameserver.handler.admincommandhandlers;
  16. import java.util.StringTokenizer;
  17. import javolution.text.TextBuilder;
  18. import net.sf.l2j.gameserver.datatables.ClanTable;
  19. import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
  20. import net.sf.l2j.gameserver.instancemanager.AuctionManager;
  21. import net.sf.l2j.gameserver.instancemanager.CastleManager;
  22. import net.sf.l2j.gameserver.instancemanager.ClanHallManager;
  23. import net.sf.l2j.gameserver.model.L2Clan;
  24. import net.sf.l2j.gameserver.model.L2Object;
  25. import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  26. import net.sf.l2j.gameserver.model.entity.Castle;
  27. import net.sf.l2j.gameserver.model.entity.ClanHall;
  28. import net.sf.l2j.gameserver.model.zone.type.L2ClanHallZone;
  29. import net.sf.l2j.gameserver.network.SystemMessageId;
  30. import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
  31. import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
  32. /**
  33. * This class handles all siege commands:
  34. * Todo: change the class name, and neaten it up
  35. *
  36. *
  37. */
  38. public class AdminSiege implements IAdminCommandHandler
  39. {
  40. private static final String[] ADMIN_COMMANDS =
  41. {
  42. "admin_siege",
  43. "admin_add_attacker",
  44. "admin_add_defender",
  45. "admin_add_guard",
  46. "admin_list_siege_clans",
  47. "admin_clear_siege_list",
  48. "admin_move_defenders",
  49. "admin_spawn_doors",
  50. "admin_endsiege",
  51. "admin_startsiege",
  52. "admin_setcastle",
  53. "admin_removecastle",
  54. "admin_clanhall",
  55. "admin_clanhallset",
  56. "admin_clanhalldel",
  57. "admin_clanhallopendoors",
  58. "admin_clanhallclosedoors",
  59. "admin_clanhallteleportself"
  60. };
  61. public boolean useAdminCommand(String command, L2PcInstance activeChar)
  62. {
  63. StringTokenizer st = new StringTokenizer(command, " ");
  64. command = st.nextToken(); // Get actual command
  65. // Get castle
  66. Castle castle = null;
  67. ClanHall clanhall = null;
  68. if (command.startsWith("admin_clanhall"))
  69. clanhall = ClanHallManager.getInstance().getClanHallById(Integer.parseInt(st.nextToken()));
  70. else if (st.hasMoreTokens())
  71. castle = CastleManager.getInstance().getCastle(st.nextToken());
  72. // Get castle
  73. String val = "";
  74. if (st.hasMoreTokens())
  75. val = st.nextToken();
  76. if ((castle == null || castle.getCastleId() < 0) && clanhall == null)
  77. // No castle specified
  78. showCastleSelectPage(activeChar);
  79. else
  80. {
  81. L2Object target = activeChar.getTarget();
  82. L2PcInstance player = null;
  83. if (target instanceof L2PcInstance)
  84. player = (L2PcInstance) target;
  85. if (command.equalsIgnoreCase("admin_add_attacker"))
  86. {
  87. if (player == null)
  88. activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
  89. else
  90. castle.getSiege().registerAttacker(player, true);
  91. }
  92. else if (command.equalsIgnoreCase("admin_add_defender"))
  93. {
  94. if (player == null)
  95. activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
  96. else
  97. castle.getSiege().registerDefender(player, true);
  98. }
  99. else if (command.equalsIgnoreCase("admin_add_guard"))
  100. {
  101. try
  102. {
  103. int npcId = Integer.parseInt(val);
  104. castle.getSiege().getSiegeGuardManager().addSiegeGuard(activeChar, npcId);
  105. }
  106. catch (Exception e)
  107. {
  108. activeChar.sendMessage("Usage: //add_guard npcId");
  109. }
  110. }
  111. else if (command.equalsIgnoreCase("admin_clear_siege_list"))
  112. {
  113. castle.getSiege().clearSiegeClan();
  114. }
  115. else if (command.equalsIgnoreCase("admin_endsiege"))
  116. {
  117. castle.getSiege().endSiege();
  118. }
  119. else if (command.equalsIgnoreCase("admin_list_siege_clans"))
  120. {
  121. castle.getSiege().listRegisterClan(activeChar);
  122. return true;
  123. }
  124. else if (command.equalsIgnoreCase("admin_move_defenders"))
  125. {
  126. activeChar.sendMessage("Not implemented yet.");
  127. }
  128. else if (command.equalsIgnoreCase("admin_setcastle"))
  129. {
  130. if (player == null || player.getClan() == null)
  131. activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
  132. else
  133. castle.setOwner(player.getClan());
  134. }
  135. else if (command.equalsIgnoreCase("admin_removecastle"))
  136. {
  137. L2Clan clan = ClanTable.getInstance().getClan(castle.getOwnerId());
  138. if (clan != null)
  139. castle.removeOwner(clan);
  140. else
  141. activeChar.sendMessage("Unable to remove castle");
  142. }
  143. else if (command.equalsIgnoreCase("admin_clanhallset"))
  144. {
  145. if (player == null || player.getClan() == null)
  146. activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
  147. else if (!ClanHallManager.getInstance().isFree(clanhall.getId()))
  148. activeChar.sendMessage("This ClanHall isn't free!");
  149. else if (player.getClan().getHasHideout() == 0)
  150. {
  151. ClanHallManager.getInstance().setOwner(clanhall.getId(), player.getClan());
  152. if (AuctionManager.getInstance().getAuction(clanhall.getId()) != null)
  153. AuctionManager.getInstance().getAuction(clanhall.getId()).deleteAuctionFromDB();
  154. }
  155. else
  156. activeChar.sendMessage("You have already a ClanHall!");
  157. }
  158. else if (command.equalsIgnoreCase("admin_clanhalldel"))
  159. {
  160. if (!ClanHallManager.getInstance().isFree(clanhall.getId()))
  161. {
  162. ClanHallManager.getInstance().setFree(clanhall.getId());
  163. AuctionManager.getInstance().initNPC(clanhall.getId());
  164. }
  165. else
  166. activeChar.sendMessage("This ClanHall is already Free!");
  167. }
  168. else if (command.equalsIgnoreCase("admin_clanhallopendoors"))
  169. {
  170. clanhall.openCloseDoors(true);
  171. }
  172. else if (command.equalsIgnoreCase("admin_clanhallclosedoors"))
  173. {
  174. clanhall.openCloseDoors(false);
  175. }
  176. else if (command.equalsIgnoreCase("admin_clanhallteleportself"))
  177. {
  178. L2ClanHallZone zone = clanhall.getZone();
  179. if (zone != null)
  180. {
  181. activeChar.teleToLocation(zone.getSpawn(), true);
  182. }
  183. }
  184. else if (command.equalsIgnoreCase("admin_spawn_doors"))
  185. {
  186. castle.spawnDoor();
  187. }
  188. else if (command.equalsIgnoreCase("admin_startsiege"))
  189. {
  190. castle.getSiege().startSiege();
  191. }
  192. if (clanhall != null)
  193. showClanHallPage(activeChar, clanhall);
  194. else
  195. showSiegePage(activeChar, castle.getName());
  196. }
  197. return true;
  198. }
  199. private void showCastleSelectPage(L2PcInstance activeChar)
  200. {
  201. int i = 0;
  202. NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
  203. adminReply.setFile("data/html/admin/castles.htm");
  204. TextBuilder cList = new TextBuilder();
  205. for (Castle castle : CastleManager.getInstance().getCastles())
  206. {
  207. if (castle != null)
  208. {
  209. String name = castle.getName();
  210. cList.append("<td fixwidth=90><a action=\"bypass -h admin_siege " + name + "\">" + name + "</a></td>");
  211. i++;
  212. }
  213. if (i > 2)
  214. {
  215. cList.append("</tr><tr>");
  216. i = 0;
  217. }
  218. }
  219. adminReply.replace("%castles%", cList.toString());
  220. cList.clear();
  221. i = 0;
  222. for (ClanHall clanhall : ClanHallManager.getInstance().getClanHalls().values())
  223. {
  224. if (clanhall != null)
  225. {
  226. cList.append("<td fixwidth=134><a action=\"bypass -h admin_clanhall " + clanhall.getId() + "\">");
  227. cList.append(clanhall.getName() + "</a></td>");
  228. i++;
  229. }
  230. if (i > 1)
  231. {
  232. cList.append("</tr><tr>");
  233. i = 0;
  234. }
  235. }
  236. adminReply.replace("%clanhalls%", cList.toString());
  237. cList.clear();
  238. i = 0;
  239. for (ClanHall clanhall : ClanHallManager.getInstance().getFreeClanHalls().values())
  240. {
  241. if (clanhall != null)
  242. {
  243. cList.append("<td fixwidth=134><a action=\"bypass -h admin_clanhall " + clanhall.getId() + "\">");
  244. cList.append(clanhall.getName() + "</a></td>");
  245. i++;
  246. }
  247. if (i > 1)
  248. {
  249. cList.append("</tr><tr>");
  250. i = 0;
  251. }
  252. }
  253. adminReply.replace("%freeclanhalls%", cList.toString());
  254. activeChar.sendPacket(adminReply);
  255. }
  256. private void showSiegePage(L2PcInstance activeChar, String castleName)
  257. {
  258. NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
  259. adminReply.setFile("data/html/admin/castle.htm");
  260. adminReply.replace("%castleName%", castleName);
  261. activeChar.sendPacket(adminReply);
  262. }
  263. private void showClanHallPage(L2PcInstance activeChar, ClanHall clanhall)
  264. {
  265. NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
  266. adminReply.setFile("data/html/admin/clanhall.htm");
  267. adminReply.replace("%clanhallName%", clanhall.getName());
  268. adminReply.replace("%clanhallId%", String.valueOf(clanhall.getId()));
  269. L2Clan owner = ClanTable.getInstance().getClan(clanhall.getOwnerId());
  270. if (owner == null)
  271. adminReply.replace("%clanhallOwner%", "None");
  272. else
  273. adminReply.replace("%clanhallOwner%", owner.getName());
  274. activeChar.sendPacket(adminReply);
  275. }
  276. public String[] getAdminCommandList()
  277. {
  278. return ADMIN_COMMANDS;
  279. }
  280. }