TownManager.java 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  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.instancemanager;
  16. import java.util.logging.Logger;
  17. import javolution.util.FastList;
  18. import net.sf.l2j.gameserver.datatables.MapRegionTable;
  19. import net.sf.l2j.gameserver.model.L2Object;
  20. import net.sf.l2j.gameserver.model.entity.Castle;
  21. import net.sf.l2j.gameserver.model.zone.type.L2TownZone;
  22. public class TownManager
  23. {
  24. private static final Logger _log = Logger.getLogger(TownManager.class.getName());
  25. // =========================================================
  26. private static TownManager _instance;
  27. public static final TownManager getInstance()
  28. {
  29. if (_instance == null)
  30. {
  31. _log.info("Initializing TownManager");
  32. _instance = new TownManager();
  33. }
  34. return _instance;
  35. }
  36. // =========================================================
  37. // =========================================================
  38. // Data Field
  39. private FastList<L2TownZone> _towns;
  40. // =========================================================
  41. // Constructor
  42. public TownManager()
  43. {
  44. }
  45. // =========================================================
  46. // Property - Public
  47. public void addTown(L2TownZone arena)
  48. {
  49. if (_towns == null)
  50. _towns = new FastList<L2TownZone>();
  51. _towns.add(arena);
  52. }
  53. public final L2TownZone getClosestTown(L2Object activeObject)
  54. {
  55. switch (MapRegionTable.getInstance().getMapRegion(activeObject.getPosition().getX(), activeObject.getPosition().getY()))
  56. {
  57. case 0:
  58. return getTown(2); // TI
  59. case 1:
  60. return getTown(3); // Elven
  61. case 2:
  62. return getTown(1); // DE
  63. case 3:
  64. return getTown(4); // Orc
  65. case 4:
  66. return getTown(6); // Dwarven
  67. case 5:
  68. return getTown(7); // Gludio
  69. case 6:
  70. return getTown(5); // Gludin
  71. case 7:
  72. return getTown(8); // Dion
  73. case 8:
  74. return getTown(9); // Giran
  75. case 9:
  76. return getTown(10); // Oren
  77. case 10:
  78. return getTown(12); // Aden
  79. case 11:
  80. return getTown(11); // HV
  81. case 12:
  82. return getTown(9); // Giran Harbour
  83. case 13:
  84. return getTown(15); // Heine
  85. case 14:
  86. return getTown(14); // Rune
  87. case 15:
  88. return getTown(13); // Goddard
  89. case 16:
  90. return getTown(17); // Schuttgart
  91. case 17:
  92. return getTown(16); // Floran
  93. case 18:
  94. return getTown(19); //Primeval Isle
  95. case 19:
  96. return getTown(20); //Kamael Village
  97. case 20:
  98. return getTown(21); //South of Wastelands Camp
  99. case 21:
  100. return getTown(22); //Fantasy Island
  101. }
  102. return getTown(16); // Default to floran
  103. }
  104. public final L2TownZone getSecondClosestTown(L2Object activeObject)
  105. {
  106. switch (MapRegionTable.getInstance().getMapRegion(activeObject.getPosition().getX(), activeObject.getPosition().getY()))
  107. {
  108. case 0:
  109. return getTown(5); // TI
  110. case 1:
  111. return getTown(5); // Elven
  112. case 2:
  113. return getTown(5); // DE
  114. case 3:
  115. return getTown(4); // Orc
  116. case 4:
  117. return getTown(6); // Dwarven
  118. case 5:
  119. return getTown(5); // Gludio
  120. case 6:
  121. return getTown(5); // Gludin
  122. case 7:
  123. return getTown(7); // Dion
  124. case 8:
  125. return getTown(11); // Giran
  126. case 9:
  127. return getTown(11); // Oren
  128. case 10:
  129. return getTown(11); // Aden
  130. case 11:
  131. return getTown(11); // HV
  132. case 12:
  133. return getTown(16); // Giran Harbour
  134. case 13:
  135. return getTown(16); // Heine
  136. case 14:
  137. return getTown(13); // Rune
  138. case 15:
  139. return getTown(12); // Goddard
  140. case 16:
  141. return getTown(6); // Schuttgart
  142. case 17:
  143. return getTown(16); // Floran
  144. case 18:
  145. return getTown(19); //Primeval Isle
  146. case 19:
  147. return getTown(20); //Kamael Village
  148. case 20:
  149. return getTown(21); //South of Wastelands Camp
  150. case 21:
  151. return getTown(22); //Fantasy Island
  152. }
  153. return getTown(16); // Default to floran
  154. }
  155. public final boolean townHasCastleInSiege(int townId)
  156. {
  157. //int[] castleidarray = {0,0,0,0,0,0,0,1,2,3,4,0,5,0,0,6,0};
  158. int[] castleidarray = {0,0,0,0,0,0,0,1,2,3,4,0,5,7,8,6,0,9,0,0,0,0,0};
  159. int castleIndex= castleidarray[townId] ;
  160. if ( castleIndex > 0 )
  161. {
  162. Castle castle = CastleManager.getInstance().getCastles().get(CastleManager.getInstance().getCastleIndex(castleIndex));
  163. if (castle != null)
  164. return castle.getSiege().getIsInProgress();
  165. }
  166. return false;
  167. }
  168. public final boolean townHasCastleInSiege(int x, int y)
  169. {
  170. int curtown= (MapRegionTable.getInstance().getMapRegion(x, y));
  171. //int[] castleidarray = {0,0,0,0,0,1,0,2,3,4,5,0,0,6,0,0,0,0};
  172. int[] castleidarray = {0,0,0,0,0,1,0,2,3,4,5,0,0,6,8,7,9,0,0,0,0,0};
  173. //find an instance of the castle for this town.
  174. int castleIndex = castleidarray[curtown];
  175. if ( castleIndex > 0 )
  176. {
  177. Castle castle = CastleManager.getInstance().getCastles().get(CastleManager.getInstance().getCastleIndex(castleIndex));
  178. if (castle != null)
  179. return castle.getSiege().getIsInProgress();
  180. }
  181. return false;
  182. }
  183. public final L2TownZone getTown(int townId)
  184. {
  185. for (L2TownZone temp : _towns)
  186. if (temp.getTownId() == townId) return temp;
  187. return null;
  188. }
  189. /**
  190. * Returns the town at that position (if any)
  191. * @param x
  192. * @param y
  193. * @param z
  194. * @return
  195. */
  196. public final L2TownZone getTown(int x, int y, int z)
  197. {
  198. for (L2TownZone temp : _towns)
  199. if (temp.isInsideZone(x, y, z)) return temp;
  200. return null;
  201. }
  202. }