FortressSiegeManager.java 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. /*
  2. * Copyright (C) 2004-2015 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 ai.npc.FortressSiegeManager;
  20. import ai.npc.AbstractNpcAI;
  21. import com.l2jserver.gameserver.instancemanager.FortSiegeManager;
  22. import com.l2jserver.gameserver.model.ClanPrivilege;
  23. import com.l2jserver.gameserver.model.L2Clan;
  24. import com.l2jserver.gameserver.model.actor.L2Npc;
  25. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  26. import com.l2jserver.gameserver.model.entity.Castle;
  27. import com.l2jserver.gameserver.model.entity.Fort;
  28. import com.l2jserver.gameserver.network.SystemMessageId;
  29. import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
  30. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  31. /**
  32. * Fortress Siege Manager AI.
  33. * @author St3eT
  34. */
  35. public final class FortressSiegeManager extends AbstractNpcAI
  36. {
  37. // NPCs
  38. private static final int[] MANAGERS =
  39. {
  40. 35659, // Shanty Fortress
  41. 35690, // Southern Fortress
  42. 35728, // Hive Fortress
  43. 35759, // Valley Fortress
  44. 35797, // Ivory Fortress
  45. 35828, // Narsell Fortress
  46. 35859, // Bayou Fortress
  47. 35897, // White Sands Fortress
  48. 35928, // Borderland Fortress
  49. 35966, // Swamp Fortress
  50. 36004, // Archaic Fortress
  51. 36035, // Floran Fortress
  52. 36073, // Cloud Mountain
  53. 36111, // Tanor Fortress
  54. 36142, // Dragonspine Fortress
  55. 36173, // Antharas's Fortress
  56. 36211, // Western Fortress
  57. 36249, // Hunter's Fortress
  58. 36287, // Aaru Fortress
  59. 36318, // Demon Fortress
  60. 36356, // Monastic Fortress
  61. };
  62. private FortressSiegeManager()
  63. {
  64. super(FortressSiegeManager.class.getSimpleName(), "ai/npc");
  65. addStartNpc(MANAGERS);
  66. addTalkId(MANAGERS);
  67. addFirstTalkId(MANAGERS);
  68. }
  69. @Override
  70. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  71. {
  72. String htmltext = null;
  73. switch (event)
  74. {
  75. case "FortressSiegeManager-11.html":
  76. case "FortressSiegeManager-13.html":
  77. case "FortressSiegeManager-14.html":
  78. case "FortressSiegeManager-15.html":
  79. case "FortressSiegeManager-16.html":
  80. {
  81. return htmltext = event;
  82. }
  83. case "register":
  84. {
  85. if (player.getClan() == null)
  86. {
  87. htmltext = "FortressSiegeManager-02.html";
  88. }
  89. else
  90. {
  91. final L2Clan clan = player.getClan();
  92. final Fort fortress = npc.getFort();
  93. final Castle castle = npc.getCastle();
  94. if (clan.getFortId() == fortress.getResidenceId())
  95. {
  96. final NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
  97. html.setHtml(getHtm(player.getHtmlPrefix(), "FortressSiegeManager-12.html"));
  98. html.replace("%clanName%", fortress.getOwnerClan().getName());
  99. return html.getHtml();
  100. }
  101. else if (!player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_SIEGE))
  102. {
  103. htmltext = "FortressSiegeManager-10.html";
  104. }
  105. else if ((clan.getLevel() < FortSiegeManager.getInstance().getSiegeClanMinLevel()))
  106. {
  107. htmltext = "FortressSiegeManager-04.html";
  108. }
  109. else if ((player.getClan().getCastleId() == castle.getResidenceId()) && (fortress.getFortState() == 2))
  110. {
  111. htmltext = "FortressSiegeManager-18.html";
  112. }
  113. else if ((clan.getCastleId() != 0) && (clan.getCastleId() != castle.getResidenceId()) && FortSiegeManager.getInstance().canRegisterJustTerritory())
  114. {
  115. htmltext = "FortressSiegeManager-17.html";
  116. }
  117. else if ((fortress.getTimeTillRebelArmy() > 0) && (fortress.getTimeTillRebelArmy() <= 7200))
  118. {
  119. htmltext = "FortressSiegeManager-19.html";
  120. }
  121. else
  122. {
  123. switch (npc.getFort().getSiege().addAttacker(player, true))
  124. {
  125. case 1:
  126. {
  127. htmltext = "FortressSiegeManager-03.html";
  128. break;
  129. }
  130. case 2:
  131. {
  132. htmltext = "FortressSiegeManager-07.html";
  133. break;
  134. }
  135. case 3:
  136. {
  137. htmltext = "FortressSiegeManager-06.html";
  138. break;
  139. }
  140. case 4:
  141. {
  142. final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.REGISTERED_TO_S1_FORTRESS_BATTLE);
  143. sm.addString(npc.getFort().getName());
  144. player.sendPacket(sm);
  145. htmltext = "FortressSiegeManager-05.html";
  146. break;
  147. }
  148. }
  149. }
  150. }
  151. break;
  152. }
  153. case "cancel":
  154. {
  155. if (player.getClan() == null)
  156. {
  157. htmltext = "FortressSiegeManager-02.html";
  158. }
  159. else
  160. {
  161. final L2Clan clan = player.getClan();
  162. final Fort fortress = npc.getFort();
  163. if (clan.getFortId() == fortress.getResidenceId())
  164. {
  165. final NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
  166. html.setHtml(getHtm(player.getHtmlPrefix(), "FortressSiegeManager-12.html"));
  167. html.replace("%clanName%", fortress.getOwnerClan().getName());
  168. return html.getHtml();
  169. }
  170. else if (!player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_SIEGE))
  171. {
  172. htmltext = "FortressSiegeManager-10.html";
  173. }
  174. else if (!FortSiegeManager.getInstance().checkIsRegistered(clan, fortress.getResidenceId()))
  175. {
  176. htmltext = "FortressSiegeManager-09.html";
  177. }
  178. else
  179. {
  180. fortress.getSiege().removeAttacker(player.getClan());
  181. htmltext = "FortressSiegeManager-08.html";
  182. }
  183. }
  184. break;
  185. }
  186. case "warInfo":
  187. {
  188. htmltext = npc.getFort().getSiege().getAttackerClans().isEmpty() ? "FortressSiegeManager-20.html" : "FortressSiegeManager-21.html";
  189. }
  190. }
  191. return htmltext;
  192. }
  193. @Override
  194. public String onFirstTalk(L2Npc npc, L2PcInstance player)
  195. {
  196. final Fort fortress = npc.getFort();
  197. final int fortOwner = fortress.getOwnerClan() == null ? 0 : fortress.getOwnerClan().getId();
  198. if (fortOwner == 0)
  199. {
  200. return "FortressSiegeManager.html";
  201. }
  202. final NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
  203. html.setHtml(getHtm(player.getHtmlPrefix(), "FortressSiegeManager-01.html"));
  204. html.replace("%clanName%", fortress.getOwnerClan().getName());
  205. html.replace("%objectId%", npc.getObjectId());
  206. return html.getHtml();
  207. }
  208. public static void main(String[] args)
  209. {
  210. new FortressSiegeManager();
  211. }
  212. }