FortressOfTheDead.java 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. package conquerablehalls.FortressOfTheDead;
  2. import gnu.trove.TIntIntHashMap;
  3. import com.l2jserver.gameserver.GameTimeController;
  4. import com.l2jserver.gameserver.ThreadPoolManager;
  5. import com.l2jserver.gameserver.datatables.ClanTable;
  6. import com.l2jserver.gameserver.model.L2Clan;
  7. import com.l2jserver.gameserver.model.actor.L2Npc;
  8. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  9. import com.l2jserver.gameserver.model.entity.clanhall.ClanHallSiegeEngine;
  10. import com.l2jserver.gameserver.network.clientpackets.Say2;
  11. /**
  12. * @author BiggBoss
  13. * Fortress of the Dead clan hall siege script
  14. */
  15. public final class FortressOfTheDead extends ClanHallSiegeEngine
  16. {
  17. private static final String qn = "FortressOfTheDead";
  18. private static final int LIDIA = 35629;
  19. private static final int ALFRED = 35630;
  20. private static final int GISELLE = 35631;
  21. private static TIntIntHashMap _damageToLidia = new TIntIntHashMap();
  22. /**
  23. * @param questId
  24. * @param name
  25. * @param descr
  26. */
  27. public FortressOfTheDead(int questId, String name, String descr, final int hallId)
  28. {
  29. super(questId, name, descr, hallId);
  30. addKillId(LIDIA);
  31. addKillId(ALFRED);
  32. addKillId(GISELLE);
  33. addSpawnId(LIDIA);
  34. addSpawnId(ALFRED);
  35. addSpawnId(GISELLE);
  36. addAttackId(LIDIA);
  37. }
  38. @Override
  39. public String onSpawn(L2Npc npc)
  40. {
  41. if(npc.getNpcId() == LIDIA)
  42. broadcastNpcSay(npc, Say2.SHOUT, 1010624);
  43. else if(npc.getNpcId() == ALFRED)
  44. broadcastNpcSay(npc, Say2.SHOUT, 1010636);
  45. else if(npc.getNpcId() == GISELLE)
  46. broadcastNpcSay(npc, Say2.SHOUT, 1010637);
  47. return null;
  48. }
  49. @Override
  50. public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isPet)
  51. {
  52. if(!_hall.isInSiege())
  53. return null;
  54. synchronized(this)
  55. {
  56. final L2Clan clan = attacker.getClan();
  57. if(clan != null && checkIsAttacker(clan))
  58. {
  59. final int id = clan.getClanId();
  60. if(id > 0 && _damageToLidia.containsKey(id))
  61. {
  62. int newDamage = _damageToLidia.get(id);
  63. newDamage += damage;
  64. _damageToLidia.put(id, newDamage);
  65. }
  66. else
  67. _damageToLidia.put(id, damage);
  68. }
  69. }
  70. return null;
  71. }
  72. @Override
  73. public String onKill(L2Npc npc, L2PcInstance killer, boolean isPet)
  74. {
  75. if(!_hall.isInSiege()) return null;
  76. final int npcId = npc.getNpcId();
  77. if(npcId == ALFRED || npcId == GISELLE)
  78. broadcastNpcSay(npc, Say2.SHOUT, 1010625);
  79. if(npcId == LIDIA)
  80. {
  81. broadcastNpcSay(npc, Say2.SHOUT, 1010639);
  82. _missionAccomplished = true;
  83. synchronized(this)
  84. {
  85. cancelSiegeTask();
  86. endSiege();
  87. }
  88. }
  89. return null;
  90. }
  91. @Override
  92. public L2Clan getWinner()
  93. {
  94. int counter = 0;
  95. int damagest = 0;
  96. for(int clan : _damageToLidia.keys())
  97. {
  98. final int damage = _damageToLidia.get(clan);
  99. if(damage > counter)
  100. {
  101. counter = damage;
  102. damagest = clan;
  103. }
  104. }
  105. return ClanTable.getInstance().getClan(damagest);
  106. }
  107. @Override
  108. public void startSiege()
  109. {
  110. /*
  111. * Siege must start at night
  112. */
  113. int hoursLeft = (GameTimeController.getInstance().getGameTime() / 60) % 24;
  114. if(hoursLeft < 0 || hoursLeft > 6)
  115. {
  116. cancelSiegeTask();
  117. long scheduleTime = (24 - hoursLeft) * 10 * 60000;
  118. _siegeTask = ThreadPoolManager.getInstance().scheduleGeneral(new SiegeStarts(), scheduleTime);
  119. }
  120. else
  121. super.startSiege();
  122. }
  123. public static void main(String[] args)
  124. {
  125. new FortressOfTheDead(-1, qn, "conquerablehalls", FORTRESS_OF_DEAD);
  126. }
  127. }