AdminSiege.java 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  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.serverpackets.NpcHtmlMessage;
  31. import net.sf.l2j.gameserver.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 Logger _log = Logger.getLogger(AdminSiege.class.getName());
  41. private static final String[] ADMIN_COMMANDS = {"admin_siege",
  42. "admin_add_attacker", "admin_add_defender", "admin_add_guard",
  43. "admin_list_siege_clans", "admin_clear_siege_list",
  44. "admin_move_defenders", "admin_spawn_doors",
  45. "admin_endsiege", "admin_startsiege",
  46. "admin_setcastle", "admin_removecastle",
  47. "admin_clanhall","admin_clanhallset","admin_clanhalldel",
  48. "admin_clanhallopendoors","admin_clanhallclosedoors",
  49. "admin_clanhallteleportself"
  50. };
  51. public boolean useAdminCommand(String command, L2PcInstance activeChar)
  52. {
  53. StringTokenizer st = new StringTokenizer(command, " ");
  54. command = st.nextToken(); // Get actual command
  55. // Get castle
  56. Castle castle = null;
  57. ClanHall clanhall = null;
  58. if (command.startsWith("admin_clanhall"))
  59. clanhall = ClanHallManager.getInstance().getClanHallById(Integer.parseInt(st.nextToken()));
  60. else if (st.hasMoreTokens())
  61. castle = CastleManager.getInstance().getCastle(st.nextToken());
  62. // Get castle
  63. String val = "";
  64. if (st.hasMoreTokens())
  65. val = st.nextToken();
  66. if ((castle == null || castle.getCastleId() < 0) && clanhall == null)
  67. // No castle specified
  68. showCastleSelectPage(activeChar);
  69. else
  70. {
  71. L2Object target = activeChar.getTarget();
  72. L2PcInstance player = null;
  73. if (target instanceof L2PcInstance)
  74. player = (L2PcInstance)target;
  75. if (command.equalsIgnoreCase("admin_add_attacker"))
  76. {
  77. if (player == null)
  78. activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
  79. else
  80. castle.getSiege().registerAttacker(player,true);
  81. }
  82. else if (command.equalsIgnoreCase("admin_add_defender"))
  83. {
  84. if (player == null)
  85. activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
  86. else
  87. castle.getSiege().registerDefender(player,true);
  88. }
  89. else if (command.equalsIgnoreCase("admin_add_guard"))
  90. {
  91. try
  92. {
  93. int npcId = Integer.parseInt(val);
  94. castle.getSiege().getSiegeGuardManager().addSiegeGuard(activeChar, npcId);
  95. }
  96. catch (Exception e)
  97. {
  98. activeChar.sendMessage("Usage: //add_guard npcId");
  99. }
  100. }
  101. else if (command.equalsIgnoreCase("admin_clear_siege_list"))
  102. {
  103. castle.getSiege().clearSiegeClan();
  104. }
  105. else if (command.equalsIgnoreCase("admin_endsiege"))
  106. {
  107. castle.getSiege().endSiege();
  108. }
  109. else if (command.equalsIgnoreCase("admin_list_siege_clans"))
  110. {
  111. castle.getSiege().listRegisterClan(activeChar);
  112. return true;
  113. }
  114. else if (command.equalsIgnoreCase("admin_move_defenders"))
  115. {
  116. activeChar.sendMessage("Not implemented yet.");
  117. }
  118. else if (command.equalsIgnoreCase("admin_setcastle"))
  119. {
  120. if (player == null || player.getClan() == null)
  121. activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
  122. else
  123. castle.setOwner(player.getClan());
  124. }
  125. else if (command.equalsIgnoreCase("admin_removecastle"))
  126. {
  127. L2Clan clan = ClanTable.getInstance().getClan(castle.getOwnerId());
  128. if (clan != null)
  129. castle.removeOwner(clan);
  130. else
  131. activeChar.sendMessage("Unable to remove castle");
  132. }
  133. else if (command.equalsIgnoreCase("admin_clanhallset"))
  134. {
  135. if (player == null || player.getClan() == null)
  136. activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
  137. else if(!ClanHallManager.getInstance().isFree(clanhall.getId()))
  138. activeChar.sendMessage("This ClanHall isn't free!");
  139. else if(player.getClan().getHasHideout() == 0)
  140. {
  141. ClanHallManager.getInstance().setOwner(clanhall.getId(), player.getClan());
  142. if(AuctionManager.getInstance().getAuction(clanhall.getId()) != null)
  143. AuctionManager.getInstance().getAuction(clanhall.getId()).deleteAuctionFromDB();
  144. }
  145. else
  146. activeChar.sendMessage("You have already a ClanHall!");
  147. }
  148. else if (command.equalsIgnoreCase("admin_clanhalldel"))
  149. {
  150. if(!ClanHallManager.getInstance().isFree(clanhall.getId())){
  151. ClanHallManager.getInstance().setFree(clanhall.getId());
  152. AuctionManager.getInstance().initNPC(clanhall.getId());
  153. }else
  154. activeChar.sendMessage("This ClanHall is already Free!");
  155. }
  156. else if (command.equalsIgnoreCase("admin_clanhallopendoors"))
  157. {
  158. clanhall.openCloseDoors(true);
  159. }
  160. else if (command.equalsIgnoreCase("admin_clanhallclosedoors"))
  161. {
  162. clanhall.openCloseDoors(false);
  163. }
  164. else if (command.equalsIgnoreCase("admin_clanhallteleportself"))
  165. {
  166. L2ClanHallZone zone = clanhall.getZone();
  167. if (zone != null)
  168. {
  169. activeChar.teleToLocation(zone.getSpawn(), true);
  170. }
  171. }
  172. else if (command.equalsIgnoreCase("admin_spawn_doors"))
  173. {
  174. castle.spawnDoor();
  175. }
  176. else if (command.equalsIgnoreCase("admin_startsiege"))
  177. {
  178. castle.getSiege().startSiege();
  179. }
  180. if (clanhall != null)
  181. showClanHallPage(activeChar, clanhall);
  182. else
  183. showSiegePage(activeChar, castle.getName());
  184. }
  185. return true;
  186. }
  187. private void showCastleSelectPage(L2PcInstance activeChar)
  188. {
  189. int i=0;
  190. NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
  191. adminReply.setFile("data/html/admin/castles.htm");
  192. TextBuilder cList = new TextBuilder();
  193. for (Castle castle: CastleManager.getInstance().getCastles())
  194. {
  195. if (castle != null)
  196. {
  197. String name=castle.getName();
  198. cList.append("<td fixwidth=90><a action=\"bypass -h admin_siege "+name+"\">"+name+"</a></td>");
  199. i++;
  200. }
  201. if (i>2)
  202. {
  203. cList.append("</tr><tr>");
  204. i=0;
  205. }
  206. }
  207. adminReply.replace("%castles%", cList.toString());
  208. cList.clear();
  209. i=0;
  210. for (ClanHall clanhall: ClanHallManager.getInstance().getClanHalls().values())
  211. {
  212. if (clanhall != null)
  213. {
  214. cList.append("<td fixwidth=134><a action=\"bypass -h admin_clanhall "+clanhall.getId()+"\">");
  215. cList.append(clanhall.getName()+"</a></td>");
  216. i++;
  217. }
  218. if (i>1)
  219. {
  220. cList.append("</tr><tr>");
  221. i=0;
  222. }
  223. }
  224. adminReply.replace("%clanhalls%", cList.toString());
  225. cList.clear();
  226. i=0;
  227. for (ClanHall clanhall: ClanHallManager.getInstance().getFreeClanHalls().values())
  228. {
  229. if (clanhall != null)
  230. {
  231. cList.append("<td fixwidth=134><a action=\"bypass -h admin_clanhall "+clanhall.getId()+"\">");
  232. cList.append(clanhall.getName()+"</a></td>");
  233. i++;
  234. }
  235. if (i>1)
  236. {
  237. cList.append("</tr><tr>");
  238. i=0;
  239. }
  240. }
  241. adminReply.replace("%freeclanhalls%", cList.toString());
  242. activeChar.sendPacket(adminReply);
  243. }
  244. private void showSiegePage(L2PcInstance activeChar, String castleName)
  245. {
  246. NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
  247. adminReply.setFile("data/html/admin/castle.htm");
  248. adminReply.replace("%castleName%", castleName);
  249. activeChar.sendPacket(adminReply);
  250. }
  251. private void showClanHallPage(L2PcInstance activeChar, ClanHall clanhall)
  252. {
  253. NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
  254. adminReply.setFile("data/html/admin/clanhall.htm");
  255. adminReply.replace("%clanhallName%", clanhall.getName());
  256. adminReply.replace("%clanhallId%", String.valueOf(clanhall.getId()));
  257. L2Clan owner = ClanTable.getInstance().getClan(clanhall.getOwnerId());
  258. if (owner == null)
  259. adminReply.replace("%clanhallOwner%","None");
  260. else
  261. adminReply.replace("%clanhallOwner%",owner.getName());
  262. activeChar.sendPacket(adminReply);
  263. }
  264. public String[] getAdminCommandList() {
  265. return ADMIN_COMMANDS;
  266. }
  267. }