FortressOfResistance.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. /**
  2. *
  3. */
  4. package conquerablehalls.FortressOfResistance;
  5. import gnu.trove.TIntLongHashMap;
  6. import com.l2jserver.gameserver.cache.HtmCache;
  7. import com.l2jserver.gameserver.datatables.ClanTable;
  8. import com.l2jserver.gameserver.datatables.NpcTable;
  9. import com.l2jserver.gameserver.model.L2Clan;
  10. import com.l2jserver.gameserver.model.L2Spawn;
  11. import com.l2jserver.gameserver.model.actor.L2Npc;
  12. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  13. import com.l2jserver.gameserver.model.entity.clanhall.ClanHallSiegeEngine;
  14. import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
  15. /**
  16. * @author BiggBoss
  17. * Fortress of Resistance clan hall siege Script
  18. */
  19. public final class FortressOfResistance extends ClanHallSiegeEngine
  20. {
  21. private static final String qn = "FortressOfResistance";
  22. private final int MESSENGER = 35382;
  23. private final int BLOODY_LORD_NURKA = 35375;
  24. private final int[][] NURKA_COORDS =
  25. {
  26. {45109,112124,-1900}, // 30%
  27. {47653,110816,-2110}, // 40%
  28. {47247,109396,-2000} // 30%
  29. };
  30. private L2Spawn _nurka;
  31. private TIntLongHashMap _damageToNurka = new TIntLongHashMap();
  32. private NpcHtmlMessage _messengerMsg;
  33. /**
  34. * @param questId
  35. * @param name
  36. * @param descr
  37. */
  38. public FortressOfResistance(int questId, String name, String descr, final int hallId)
  39. {
  40. super(questId, name, descr, hallId);
  41. addFirstTalkId(MESSENGER);
  42. addKillId(BLOODY_LORD_NURKA);
  43. addAttackId(BLOODY_LORD_NURKA);
  44. buildMessengerMessage();
  45. try
  46. {
  47. _nurka = new L2Spawn(NpcTable.getInstance().getTemplate(BLOODY_LORD_NURKA));
  48. _nurka.setAmount(1);
  49. _nurka.setRespawnDelay(10800);
  50. int[] coords = NURKA_COORDS[0];
  51. /*
  52. int chance = Rnd.get(100) + 1;
  53. if(chance <= 30)
  54. coords = NURKA_COORDS[0];
  55. else if(chance > 30 && chance <= 70)
  56. coords = NURKA_COORDS[1];
  57. else
  58. coords = NURKA_COORDS[2];
  59. */
  60. _nurka.setLocx(coords[0]);
  61. _nurka.setLocy(coords[1]);
  62. _nurka.setLocz(coords[2]);
  63. }
  64. catch(Exception e)
  65. {
  66. _log.warning(getName()+": Couldnt set the Bloody Lord Nurka spawn");
  67. e.printStackTrace();
  68. }
  69. }
  70. private final void buildMessengerMessage()
  71. {
  72. String html = HtmCache.getInstance().getHtm(null, "data/scripts/conquerablehalls/FortressOfResistance/partisan_ordery_brakel001.htm");
  73. if(html != null)
  74. {
  75. _messengerMsg = new NpcHtmlMessage(5);
  76. _messengerMsg.setHtml(html);
  77. _messengerMsg.replace("%nextSiege%", _hall.getSiegeDate().getTime().toString());
  78. }
  79. }
  80. @Override
  81. public String onFirstTalk(L2Npc npc, L2PcInstance player)
  82. {
  83. player.sendPacket(_messengerMsg);
  84. return null;
  85. }
  86. @Override
  87. public String onAttack(L2Npc npc, L2PcInstance player, int damage, boolean isPet)
  88. {
  89. if(!_hall.isInSiege())
  90. return null;
  91. int clanId = player.getClanId();
  92. if(clanId > 0)
  93. {
  94. long clanDmg = _damageToNurka.get(clanId) + damage;
  95. _damageToNurka.put(clanId, clanDmg);
  96. }
  97. return null;
  98. }
  99. @Override
  100. public String onKill(L2Npc npc, L2PcInstance killer, boolean isPet)
  101. {
  102. if(!_hall.isInSiege())
  103. return null;
  104. _missionAccomplished = true;
  105. synchronized(this)
  106. {
  107. npc.getSpawn().stopRespawn();
  108. npc.deleteMe();
  109. cancelSiegeTask();
  110. endSiege();
  111. }
  112. return null;
  113. }
  114. @Override
  115. public L2Clan getWinner()
  116. {
  117. int winnerId = 0;
  118. long counter = 0;
  119. for(int i : _damageToNurka.keys())
  120. {
  121. long dam = _damageToNurka.get(i);
  122. if(dam > counter)
  123. {
  124. winnerId = i;
  125. counter = dam;
  126. }
  127. }
  128. return ClanTable.getInstance().getClan(winnerId);
  129. }
  130. @Override
  131. public void onSiegeStarts()
  132. {
  133. _nurka.init();
  134. }
  135. @Override
  136. public void onSiegeEnds()
  137. {
  138. buildMessengerMessage();
  139. }
  140. public static void main(String[] args)
  141. {
  142. new FortressOfResistance(-1, qn, "conquerablehalls", FORTRESS_RESSISTANCE);
  143. }
  144. }