ClassId.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. /*
  2. * Copyright (C) 2004-2014 L2J Server
  3. *
  4. * This file is part of L2J Server.
  5. *
  6. * L2J Server 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 Server 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 com.l2jserver.gameserver.model.base;
  20. import com.l2jserver.gameserver.enums.PcRace;
  21. import com.l2jserver.gameserver.model.interfaces.IIdentifiable;
  22. /**
  23. * This class defines all classes (ex : human fighter, darkFighter...) that a player can chose.<br>
  24. * Data:
  25. * <ul>
  26. * <li>id : The Identifier of the class</li>
  27. * <li>isMage : True if the class is a mage class</li>
  28. * <li>race : The race of this class</li>
  29. * <li>parent : The parent ClassId or null if this class is the root</li>
  30. * </ul>
  31. * @version $Revision: 1.4.4.4 $ $Date: 2005/03/27 15:29:33 $
  32. */
  33. public enum ClassId implements IIdentifiable
  34. {
  35. fighter(0x00, false, PcRace.HUMAN, null),
  36. warrior(0x01, false, PcRace.HUMAN, fighter),
  37. gladiator(0x02, false, PcRace.HUMAN, warrior),
  38. warlord(0x03, false, PcRace.HUMAN, warrior),
  39. knight(0x04, false, PcRace.HUMAN, fighter),
  40. paladin(0x05, false, PcRace.HUMAN, knight),
  41. darkAvenger(0x06, false, PcRace.HUMAN, knight),
  42. rogue(0x07, false, PcRace.HUMAN, fighter),
  43. treasureHunter(0x08, false, PcRace.HUMAN, rogue),
  44. hawkeye(0x09, false, PcRace.HUMAN, rogue),
  45. mage(0x0a, true, PcRace.HUMAN, null),
  46. wizard(0x0b, true, PcRace.HUMAN, mage),
  47. sorceror(0x0c, true, PcRace.HUMAN, wizard),
  48. necromancer(0x0d, true, PcRace.HUMAN, wizard),
  49. warlock(0x0e, true, true, PcRace.HUMAN, wizard),
  50. cleric(0x0f, true, PcRace.HUMAN, mage),
  51. bishop(0x10, true, PcRace.HUMAN, cleric),
  52. prophet(0x11, true, PcRace.HUMAN, cleric),
  53. elvenFighter(0x12, false, PcRace.ELF, null),
  54. elvenKnight(0x13, false, PcRace.ELF, elvenFighter),
  55. templeKnight(0x14, false, PcRace.ELF, elvenKnight),
  56. swordSinger(0x15, false, PcRace.ELF, elvenKnight),
  57. elvenScout(0x16, false, PcRace.ELF, elvenFighter),
  58. plainsWalker(0x17, false, PcRace.ELF, elvenScout),
  59. silverRanger(0x18, false, PcRace.ELF, elvenScout),
  60. elvenMage(0x19, true, PcRace.ELF, null),
  61. elvenWizard(0x1a, true, PcRace.ELF, elvenMage),
  62. spellsinger(0x1b, true, PcRace.ELF, elvenWizard),
  63. elementalSummoner(0x1c, true, true, PcRace.ELF, elvenWizard),
  64. oracle(0x1d, true, PcRace.ELF, elvenMage),
  65. elder(0x1e, true, PcRace.ELF, oracle),
  66. darkFighter(0x1f, false, PcRace.DARK_ELF, null),
  67. palusKnight(0x20, false, PcRace.DARK_ELF, darkFighter),
  68. shillienKnight(0x21, false, PcRace.DARK_ELF, palusKnight),
  69. bladedancer(0x22, false, PcRace.DARK_ELF, palusKnight),
  70. assassin(0x23, false, PcRace.DARK_ELF, darkFighter),
  71. abyssWalker(0x24, false, PcRace.DARK_ELF, assassin),
  72. phantomRanger(0x25, false, PcRace.DARK_ELF, assassin),
  73. darkMage(0x26, true, PcRace.DARK_ELF, null),
  74. darkWizard(0x27, true, PcRace.DARK_ELF, darkMage),
  75. spellhowler(0x28, true, PcRace.DARK_ELF, darkWizard),
  76. phantomSummoner(0x29, true, true, PcRace.DARK_ELF, darkWizard),
  77. shillienOracle(0x2a, true, PcRace.DARK_ELF, darkMage),
  78. shillenElder(0x2b, true, PcRace.DARK_ELF, shillienOracle),
  79. orcFighter(0x2c, false, PcRace.ORC, null),
  80. orcRaider(0x2d, false, PcRace.ORC, orcFighter),
  81. destroyer(0x2e, false, PcRace.ORC, orcRaider),
  82. orcMonk(0x2f, false, PcRace.ORC, orcFighter),
  83. tyrant(0x30, false, PcRace.ORC, orcMonk),
  84. orcMage(0x31, false, PcRace.ORC, null),
  85. orcShaman(0x32, true, PcRace.ORC, orcMage),
  86. overlord(0x33, true, PcRace.ORC, orcShaman),
  87. warcryer(0x34, true, PcRace.ORC, orcShaman),
  88. dwarvenFighter(0x35, false, PcRace.DWARF, null),
  89. scavenger(0x36, false, PcRace.DWARF, dwarvenFighter),
  90. bountyHunter(0x37, false, PcRace.DWARF, scavenger),
  91. artisan(0x38, false, PcRace.DWARF, dwarvenFighter),
  92. warsmith(0x39, false, PcRace.DWARF, artisan),
  93. /*
  94. * Dummy Entries (id's already in decimal format) btw FU NCSoft for the amount of work you put me through to do this!! <START>
  95. */
  96. dummyEntry1(58, false, null, null),
  97. dummyEntry2(59, false, null, null),
  98. dummyEntry3(60, false, null, null),
  99. dummyEntry4(61, false, null, null),
  100. dummyEntry5(62, false, null, null),
  101. dummyEntry6(63, false, null, null),
  102. dummyEntry7(64, false, null, null),
  103. dummyEntry8(65, false, null, null),
  104. dummyEntry9(66, false, null, null),
  105. dummyEntry10(67, false, null, null),
  106. dummyEntry11(68, false, null, null),
  107. dummyEntry12(69, false, null, null),
  108. dummyEntry13(70, false, null, null),
  109. dummyEntry14(71, false, null, null),
  110. dummyEntry15(72, false, null, null),
  111. dummyEntry16(73, false, null, null),
  112. dummyEntry17(74, false, null, null),
  113. dummyEntry18(75, false, null, null),
  114. dummyEntry19(76, false, null, null),
  115. dummyEntry20(77, false, null, null),
  116. dummyEntry21(78, false, null, null),
  117. dummyEntry22(79, false, null, null),
  118. dummyEntry23(80, false, null, null),
  119. dummyEntry24(81, false, null, null),
  120. dummyEntry25(82, false, null, null),
  121. dummyEntry26(83, false, null, null),
  122. dummyEntry27(84, false, null, null),
  123. dummyEntry28(85, false, null, null),
  124. dummyEntry29(86, false, null, null),
  125. dummyEntry30(87, false, null, null),
  126. /*
  127. * <END> Of Dummy entries
  128. */
  129. /*
  130. * Now the bad boys! new class ids :)) (3rd classes)
  131. */
  132. duelist(0x58, false, PcRace.HUMAN, gladiator),
  133. dreadnought(0x59, false, PcRace.HUMAN, warlord),
  134. phoenixKnight(0x5a, false, PcRace.HUMAN, paladin),
  135. hellKnight(0x5b, false, PcRace.HUMAN, darkAvenger),
  136. sagittarius(0x5c, false, PcRace.HUMAN, hawkeye),
  137. adventurer(0x5d, false, PcRace.HUMAN, treasureHunter),
  138. archmage(0x5e, true, PcRace.HUMAN, sorceror),
  139. soultaker(0x5f, true, PcRace.HUMAN, necromancer),
  140. arcanaLord(0x60, true, true, PcRace.HUMAN, warlock),
  141. cardinal(0x61, true, PcRace.HUMAN, bishop),
  142. hierophant(0x62, true, PcRace.HUMAN, prophet),
  143. evaTemplar(0x63, false, PcRace.ELF, templeKnight),
  144. swordMuse(0x64, false, PcRace.ELF, swordSinger),
  145. windRider(0x65, false, PcRace.ELF, plainsWalker),
  146. moonlightSentinel(0x66, false, PcRace.ELF, silverRanger),
  147. mysticMuse(0x67, true, PcRace.ELF, spellsinger),
  148. elementalMaster(0x68, true, true, PcRace.ELF, elementalSummoner),
  149. evaSaint(0x69, true, PcRace.ELF, elder),
  150. shillienTemplar(0x6a, false, PcRace.DARK_ELF, shillienKnight),
  151. spectralDancer(0x6b, false, PcRace.DARK_ELF, bladedancer),
  152. ghostHunter(0x6c, false, PcRace.DARK_ELF, abyssWalker),
  153. ghostSentinel(0x6d, false, PcRace.DARK_ELF, phantomRanger),
  154. stormScreamer(0x6e, true, PcRace.DARK_ELF, spellhowler),
  155. spectralMaster(0x6f, true, true, PcRace.DARK_ELF, phantomSummoner),
  156. shillienSaint(0x70, true, PcRace.DARK_ELF, shillenElder),
  157. titan(0x71, false, PcRace.ORC, destroyer),
  158. grandKhavatari(0x72, false, PcRace.ORC, tyrant),
  159. dominator(0x73, true, PcRace.ORC, overlord),
  160. doomcryer(0x74, true, PcRace.ORC, warcryer),
  161. fortuneSeeker(0x75, false, PcRace.DWARF, bountyHunter),
  162. maestro(0x76, false, PcRace.DWARF, warsmith),
  163. dummyEntry31(0x77, false, null, null),
  164. dummyEntry32(0x78, false, null, null),
  165. dummyEntry33(0x79, false, null, null),
  166. dummyEntry34(0x7a, false, null, null),
  167. maleSoldier(0x7b, false, PcRace.KAMAEL, null),
  168. femaleSoldier(0x7C, false, PcRace.KAMAEL, null),
  169. trooper(0x7D, false, PcRace.KAMAEL, maleSoldier),
  170. warder(0x7E, false, PcRace.KAMAEL, femaleSoldier),
  171. berserker(0x7F, false, PcRace.KAMAEL, trooper),
  172. maleSoulbreaker(0x80, false, PcRace.KAMAEL, trooper),
  173. femaleSoulbreaker(0x81, false, PcRace.KAMAEL, warder),
  174. arbalester(0x82, false, PcRace.KAMAEL, warder),
  175. doombringer(0x83, false, PcRace.KAMAEL, berserker),
  176. maleSoulhound(0x84, false, PcRace.KAMAEL, maleSoulbreaker),
  177. femaleSoulhound(0x85, false, PcRace.KAMAEL, femaleSoulbreaker),
  178. trickster(0x86, false, PcRace.KAMAEL, arbalester),
  179. inspector(0x87, false, PcRace.KAMAEL, warder), // DS: yes, both male/female inspectors use skills from warder
  180. judicator(0x88, false, PcRace.KAMAEL, inspector);
  181. /** The Identifier of the Class */
  182. private final int _id;
  183. /** True if the class is a mage class */
  184. private final boolean _isMage;
  185. /** True if the class is a summoner class */
  186. private final boolean _isSummoner;
  187. /** The Race object of the class */
  188. private final PcRace _race;
  189. /** The parent ClassId or null if this class is a root */
  190. private final ClassId _parent;
  191. /**
  192. * Class constructor.
  193. * @param pId the class Id.
  194. * @param pIsMage {code true} if the class is mage class.
  195. * @param pRace the race related to the class.
  196. * @param pParent the parent class Id.
  197. */
  198. private ClassId(int pId, boolean pIsMage, PcRace pRace, ClassId pParent)
  199. {
  200. _id = pId;
  201. _isMage = pIsMage;
  202. _isSummoner = false;
  203. _race = pRace;
  204. _parent = pParent;
  205. }
  206. /**
  207. * Class constructor.
  208. * @param pId the class Id.
  209. * @param pIsMage {code true} if the class is mage class.
  210. * @param pIsSummoner {code true} if the class is summoner class.
  211. * @param pRace the race related to the class.
  212. * @param pParent the parent class Id.
  213. */
  214. private ClassId(int pId, boolean pIsMage, boolean pIsSummoner, PcRace pRace, ClassId pParent)
  215. {
  216. _id = pId;
  217. _isMage = pIsMage;
  218. _isSummoner = pIsSummoner;
  219. _race = pRace;
  220. _parent = pParent;
  221. }
  222. /**
  223. * Gets the ID of the class.
  224. * @return the ID of the class
  225. */
  226. @Override
  227. public final int getId()
  228. {
  229. return _id;
  230. }
  231. /**
  232. * @return {code true} if the class is a mage class.
  233. */
  234. public final boolean isMage()
  235. {
  236. return _isMage;
  237. }
  238. /**
  239. * @return {code true} if the class is a summoner class.
  240. */
  241. public final boolean isSummoner()
  242. {
  243. return _isSummoner;
  244. }
  245. /**
  246. * @return the Race object of the class.
  247. */
  248. public final PcRace getRace()
  249. {
  250. return _race;
  251. }
  252. /**
  253. * @param cid the parent ClassId to check.
  254. * @return {code true} if this Class is a child of the selected ClassId.
  255. */
  256. public final boolean childOf(ClassId cid)
  257. {
  258. if (_parent == null)
  259. {
  260. return false;
  261. }
  262. if (_parent == cid)
  263. {
  264. return true;
  265. }
  266. return _parent.childOf(cid);
  267. }
  268. /**
  269. * @param cid the parent ClassId to check.
  270. * @return {code true} if this Class is equal to the selected ClassId or a child of the selected ClassId.
  271. */
  272. public final boolean equalsOrChildOf(ClassId cid)
  273. {
  274. return (this == cid) || childOf(cid);
  275. }
  276. /**
  277. * @return the child level of this Class (0=root, 1=child leve 1...)
  278. */
  279. public final int level()
  280. {
  281. if (_parent == null)
  282. {
  283. return 0;
  284. }
  285. return 1 + _parent.level();
  286. }
  287. /**
  288. * @return its parent Class Id
  289. */
  290. public final ClassId getParent()
  291. {
  292. return _parent;
  293. }
  294. public static ClassId getClassId(int cId)
  295. {
  296. try
  297. {
  298. return ClassId.values()[cId];
  299. }
  300. catch (Exception e)
  301. {
  302. return null;
  303. }
  304. }
  305. }