Advertisement
Guest User

Untitled

a guest
May 30th, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 30.46 KB | None | 0 0
  1. package client;
  2.  
  3. import constants.GameConstants;
  4. import java.util.ArrayList;
  5. import java.util.Comparator;
  6. import java.util.List;
  7. import provider.MapleData;
  8. import provider.MapleDataTool;
  9. import server.MapleStatEffect;
  10. import server.Randomizer;
  11. import server.life.Element;
  12. import tools.Pair;
  13.  
  14. public class Skill implements Comparator<Skill> {
  15.  
  16. private String name = "", psdDamR = "", targetPlus = "";
  17. private final List<MapleStatEffect> effects = new ArrayList<>();
  18. private List<MapleStatEffect> pvpEffects = null;
  19. private List<Integer> animation = null;
  20. private final List<Pair<String, Integer>> requiredSkill = new ArrayList<>();
  21. private Element element = Element.NEUTRAL;
  22. private int id, animationTime = 0, masterLevel = 0, maxLevel = 0, delay = 0, trueMax = 0, eventTamingMob = 0, skillTamingMob = 0, skillType = 0, psd = 0, psdSkill = 0; //4 is alert
  23. private boolean invisible = false, chargeskill = false, timeLimited = false, combatOrders = false, pvpDisabled = false, magic = false, casterMove = false, pushTarget = false, pullTarget = false;
  24. private int hyper = 0;
  25.  
  26. public Skill(final int id) {
  27. super();
  28. this.id = id;
  29. }
  30.  
  31. public void setName(final String name) {
  32. this.name = name;
  33. }
  34.  
  35. public int getId() {
  36. return id;
  37. }
  38.  
  39. public String getName() {
  40. return name;
  41. }
  42.  
  43. public static Skill loadFromData(final int id, final MapleData data, final MapleData delayData) {
  44. Skill ret = new Skill(id);
  45.  
  46. boolean isBuff;
  47. final int skillType = MapleDataTool.getInt("skillType", data, -1);
  48. final String elem = MapleDataTool.getString("elemAttr", data, null);
  49. if (elem != null) {
  50. ret.element = Element.getFromChar(elem.charAt(0));
  51. }
  52. ret.skillType = skillType;
  53. ret.invisible = MapleDataTool.getInt("invisible", data, 0) > 0;
  54. ret.timeLimited = MapleDataTool.getInt("timeLimited", data, 0) > 0;
  55. ret.combatOrders = MapleDataTool.getInt("combatOrders", data, 0) > 0;
  56. ret.hyper = MapleDataTool.getInt("hyper", data, 0);
  57. ret.masterLevel = MapleDataTool.getInt("masterLevel", data, 0);
  58. ret.psd = MapleDataTool.getInt("psd", data, 0);
  59. if(ret.psd == 1){
  60. final MapleData psdskill = data.getChildByPath("psdSkill");
  61. if (psdskill != null)
  62. {
  63. ret.psdSkill = Integer.parseInt(data.getChildByPath("psdSkill").getChildren().get(0).getName());
  64. }
  65. }
  66. if ((id == 22111001 || id == 22140000 || id == 22141002)) {
  67. ret.masterLevel = 5; //hack
  68. }
  69. ret.eventTamingMob = MapleDataTool.getInt("eventTamingMob", data, 0);
  70. ret.skillTamingMob = MapleDataTool.getInt("skillTamingMob", data, 0);
  71. final MapleData inf = data.getChildByPath("info");
  72. if (inf != null) {
  73. ret.pvpDisabled = MapleDataTool.getInt("pvp", inf, 1) <= 0;
  74. ret.magic = MapleDataTool.getInt("magicDamage", inf, 0) > 0;
  75. ret.casterMove = MapleDataTool.getInt("casterMove", inf, 0) > 0;
  76. ret.pushTarget = MapleDataTool.getInt("pushTarget", inf, 0) > 0;
  77. ret.pullTarget = MapleDataTool.getInt("pullTarget", inf, 0) > 0;
  78. }
  79. final MapleData effect = data.getChildByPath("effect");
  80. if (skillType == 2) {
  81. isBuff = true;
  82. } else if (skillType == 3) { //final attack
  83. ret.animation = new ArrayList<>();
  84. ret.animation.add(0);
  85. isBuff = effect != null;
  86. } else {
  87. MapleData action_ = data.getChildByPath("action");
  88. final MapleData hit = data.getChildByPath("hit");
  89. final MapleData ball = data.getChildByPath("ball");
  90.  
  91. boolean action = false;
  92. if (action_ == null) {
  93. if (data.getChildByPath("prepare/action") != null) {
  94. action_ = data.getChildByPath("prepare/action");
  95. action = true;
  96. }
  97. }
  98. isBuff = effect != null && hit == null && ball == null;
  99. if (action_ != null) {
  100. String d;
  101. if (action) { //prepare
  102. d = MapleDataTool.getString(action_, null);
  103. } else {
  104. d = MapleDataTool.getString("0", action_, null);
  105. }
  106. if (d != null) {
  107. isBuff |= d.equals("alert2");
  108. final MapleData dd = delayData.getChildByPath(d);
  109. if (dd != null) {
  110. for (MapleData del : dd) {
  111. ret.delay += Math.abs(MapleDataTool.getInt("delay", del, 0));
  112. }
  113. if (ret.delay > 30) {
  114. ret.delay = (int) Math.round(ret.delay * 11.0 / 16.0);
  115. ret.delay -= (ret.delay % 30);
  116. }
  117. }
  118. if (SkillFactory.getDelay(d) != null) { //this should return true always
  119. ret.animation = new ArrayList<>();
  120. ret.animation.add(SkillFactory.getDelay(d));
  121. if (!action) {
  122. for (MapleData ddc : action_) {
  123. if (!MapleDataTool.getString(ddc, d).equals(d)) {
  124. String c = MapleDataTool.getString(ddc);
  125. if (SkillFactory.getDelay(c) != null) {
  126. ret.animation.add(SkillFactory.getDelay(c));
  127. }
  128. }
  129. }
  130. }
  131. }
  132. }
  133. }
  134. switch (id) {
  135. case 1076:
  136. case 11076:
  137. case 2111002:
  138. case 2111003:
  139. case 2121001:
  140. case 2221001:
  141. case 2301002:
  142. case 2321001:
  143. case 4211001:
  144. case 12111005:
  145. case 22161003:
  146. isBuff = false;
  147. break;
  148. case 93:
  149. case 1004:
  150. case 4121054:
  151. case 1026:
  152. case 1111002:
  153. //case 65111100:
  154. case 1111007:
  155. case 1211009:
  156. case 4341054:
  157. case 1220013:
  158. case 5321054:
  159. case 1311007:
  160. case 1310016:
  161. case 2120010:
  162. case 2121009:
  163. case 4341052:
  164. case 31201002:
  165. case 31001001:
  166. case 2220010:
  167. case 2221009:
  168. case 2311006:
  169. case 2320011:
  170. case 2321010:
  171. case 3120006:
  172. case 3121002:
  173. case 3220005:
  174. case 3221002:
  175. case 4111001:
  176. case 4111009:
  177. case 4211003:
  178. case 4221013:
  179. case 4321000:
  180. case 4331003:
  181. case 4341002:
  182. case 5110001:
  183. case 5111005:
  184. case 5111007:
  185. case 5120011:
  186. case 5120012:
  187. case 5121003:
  188. case 5121009:
  189. case 5121015:
  190. case 5211001:
  191. case 5211002:
  192. case 5211006:
  193. case 5211007:
  194. case 5211009:
  195. case 5220002:
  196. case 5220011:
  197. case 5220012:
  198. case 5311004:
  199. case 5311005:
  200. case 5320007:
  201. case 5321003:
  202. case 5321004:
  203. case 5701005:
  204. case 5711001:
  205. case 5711011:
  206. case 5720005:
  207. case 5721002:
  208. case 9001004:
  209. case 9101004:
  210. case 10000093:
  211. case 10001004:
  212. case 10001026:
  213. case 13111005:
  214. case 14111007:
  215. case 15100004:
  216. case 15101006:
  217. case 15111002:
  218. case 15111005:
  219. case 15111006:
  220. case 15111011:
  221. case 20000093:
  222. case 20001004:
  223. case 20001026:
  224. case 20010093:
  225. case 20011004:
  226. case 20011026:
  227. case 20020093:
  228. case 20021026:
  229. case 20031209:
  230. case 20031210:
  231. case 21000000:
  232. case 21101003:
  233. case 22121001:
  234. case 22131001:
  235. case 22131002:
  236. case 22141002:
  237. case 22151002:
  238. case 22151003:
  239. case 22161002:
  240. case 22161004:
  241. case 22171000:
  242. case 22171004:
  243. case 22181000:
  244. case 22181003:
  245. case 22181004:
  246. case 24101005:
  247. case 24111002:
  248. case 24121008:
  249. case 24121009:
  250. case 27101202:
  251. case 27110007:
  252. case 30000093:
  253. case 30001026:
  254. case 30010093:
  255. case 30011026:
  256. case 31121005:
  257. case 32001003:
  258. case 32101003:
  259. case 32110000:
  260. case 32110007:
  261. case 32110008:
  262. case 32110009:
  263. case 32111005:
  264. case 32111006:
  265. case 32111012:
  266. case 32120000:
  267. case 32120001:
  268. case 32121003:
  269. case 33101006:
  270. case 33111003:
  271. case 35001001:
  272. case 35001002:
  273. case 35101005:
  274. case 35101007:
  275. case 35101009:
  276. case 35111001:
  277. case 35111002:
  278. case 35111004:
  279. case 35111005:
  280. case 35111009:
  281. case 35111010:
  282. case 35111011:
  283. case 35111013:
  284. case 35120000:
  285. case 35120014:
  286. case 35121003:
  287. case 35121005:
  288. case 35121006:
  289. case 35121009:
  290. case 35121010:
  291. case 35121013:
  292. case 36111006:
  293. case 41001001:
  294. case 41121003:
  295. case 42100010:
  296. case 42101002:
  297. case 42101004:
  298. case 42111006:
  299. case 42121008:
  300. case 50001214:
  301. case 51101003:
  302. case 51111003:
  303. case 51111004:
  304. case 51121004:
  305. case 51121005:
  306. case 60001216:
  307. case 61100005:
  308. case 60001217:
  309. case 61101002:
  310. case 61111008://Kaiser mode
  311. case 61120007:
  312. case 61120008://Kaiser mode
  313. case 61121053://Kaiser Hyper Mode
  314. case 61121054://Kaiser's Majesty
  315. case 61120011:
  316. case 80001000:
  317. case 80001089:
  318. case 31211003:
  319. case 31221004:
  320. case 32121054:
  321. case 2121054:
  322. case 11101021:
  323. case 13111024:
  324. case 2321054:
  325. case 11101022: //polling moon
  326. case 11111022:
  327. case 36121054:
  328. case 31011001:
  329. case 31211004:
  330. case 32121006:
  331. case 3101004:
  332. case 3201004:
  333. case 5001005:
  334. case 5220014://dice2 cosair
  335. case 15001003:
  336. case 5111010:
  337. case 80001079:
  338. case 80001080:
  339. case 80001081:
  340. // case 33001001:
  341. case 1101013:
  342. case 36121003:
  343. case 33111006:
  344. case 35111016:
  345. case 33111007:
  346. case 61111004:
  347. case 24121054:
  348. case 80001155:
  349. case 31221054:
  350. case 5721054:
  351. case 5721052:
  352. // case 27121005:
  353. case 27001004: // 익스텐드 마나
  354. case 27100003: // 블레스 오브 다크니스
  355. // case 27101202: // 보이드 프레셔
  356. case 27111004: // 안티 매직쉘
  357. case 27111005: // 라이트쉐도우 가드
  358. case 27111006: // 포틱 메디테이션
  359. // case 27110007: // 라이프 타이달
  360. case 27121006: // 다크니스 소서리
  361. case 27111202: // 녹스피어
  362. case 27121202: // 아포칼립스
  363. case 27101100: // 실피드 랜서
  364. case 27111100: // 스펙트럴 라이트
  365. case 27121100: // 라이트 리플렉션
  366. case 27111303: // 데스 사이드
  367. case 27121303: // 앱솔루트 킬
  368. case 27121054: // 메모라이즈
  369. case 42101020:
  370. case 42101021:
  371. case 42101022:
  372. case 42101023:
  373. case 36121013:
  374. case 36121014:
  375. case 36121002:
  376. case 15001022:
  377. // case 1301013:
  378. case 1321015:
  379. case 20041239:
  380. case 112111000:
  381. case 1211014://parashock guard
  382. case 100001263:
  383. case 100001264:
  384. case 2201009:
  385. case 4330009:
  386. case 3111011: //reckless hunts
  387. case 3211012:
  388. case 3210013:
  389. case 80001040:
  390.  
  391. isBuff = true;
  392. break;
  393. }
  394. if (GameConstants.isAngel(id)/* || GameConstants.isSummon(id)*/) {
  395. isBuff = false;
  396. }
  397. }
  398. ret.chargeskill = data.getChildByPath("keydown") != null;
  399.  
  400. final MapleData level = data.getChildByPath("common");
  401. if (level != null) {
  402. ret.maxLevel = MapleDataTool.getInt("maxLevel", level, 1); //10 just a failsafe, shouldn't actually happens
  403. ret.psdDamR = MapleDataTool.getString("damR", level, ""); //for the psdSkill tag
  404. ret.targetPlus = MapleDataTool.getString("targetPlus", level, "");
  405. ret.trueMax = ret.maxLevel + (ret.combatOrders ? 2 : 0);
  406. for (int i = 1; i <= ret.trueMax; i++) {
  407. ret.effects.add(MapleStatEffect.loadSkillEffectFromData(level, id, isBuff, i, "x"));
  408. }
  409.  
  410. } else {
  411. for (final MapleData leve : data.getChildByPath("level")) {
  412. ret.effects.add(MapleStatEffect.loadSkillEffectFromData(leve, id, isBuff, Byte.parseByte(leve.getName()), null));
  413. }
  414. ret.maxLevel = ret.effects.size();
  415. ret.trueMax = ret.effects.size();
  416. }
  417. final MapleData level2 = data.getChildByPath("PVPcommon");
  418. if (level2 != null) {
  419. ret.pvpEffects = new ArrayList<>();
  420. for (int i = 1; i <= ret.trueMax; i++) {
  421. ret.pvpEffects.add(MapleStatEffect.loadSkillEffectFromData(level2, id, isBuff, i, "x"));
  422. }
  423. }
  424. final MapleData reqDataRoot = data.getChildByPath("req");
  425. if (reqDataRoot != null) {
  426. for (final MapleData reqData : reqDataRoot.getChildren()) {
  427. ret.requiredSkill.add(new Pair<>(reqData.getName(), MapleDataTool.getInt(reqData, 1)));
  428. }
  429. }
  430. ret.animationTime = 0;
  431. if (effect != null) {
  432. for (final MapleData effectEntry : effect) {
  433. ret.animationTime += MapleDataTool.getIntConvert("delay", effectEntry, 0);
  434. }
  435. }
  436. return ret;
  437. }
  438.  
  439. public MapleStatEffect getEffect(final int level) {
  440. if (effects.size() < level) {
  441. if (effects.size() > 0) { //incAllskill
  442. return effects.get(effects.size() - 1);
  443. }
  444. return null;
  445. } else if (level <= 0) {
  446. return effects.get(0);
  447. }
  448. return effects.get(level - 1);
  449. }
  450.  
  451. public MapleStatEffect getPVPEffect(final int level) {
  452. if (pvpEffects == null) {
  453. return getEffect(level);
  454. }
  455. if (pvpEffects.size() < level) {
  456. if (pvpEffects.size() > 0) { //incAllskill
  457. return pvpEffects.get(pvpEffects.size() - 1);
  458. }
  459. return null;
  460. } else if (level <= 0) {
  461. return pvpEffects.get(0);
  462. }
  463. return pvpEffects.get(level - 1);
  464. }
  465.  
  466. public int getSkillType() {
  467. return skillType;
  468. }
  469.  
  470. public List<Integer> getAllAnimation() {
  471. return animation;
  472. }
  473.  
  474. public int getAnimation() {
  475. if (animation == null) {
  476. return -1;
  477. }
  478. return (animation.get(Randomizer.nextInt(animation.size()))).intValue();
  479. }
  480.  
  481. public boolean isPVPDisabled() {
  482. return pvpDisabled;
  483. }
  484.  
  485. public boolean isChargeSkill() {
  486. return chargeskill;
  487. }
  488.  
  489. public boolean isInvisible() {
  490. return invisible;
  491. }
  492.  
  493. public boolean hasRequiredSkill() {
  494. return requiredSkill.size() > 0;
  495. }
  496.  
  497. public int getPsdSkill(){
  498. return psdSkill;
  499. }
  500. public int getPsd(){
  501. return psd;
  502. }
  503. public String getPsdDamR(){
  504. return psdDamR;
  505. }
  506.  
  507. public String getPsdtarget() {
  508. return targetPlus;
  509. }
  510.  
  511. public List<Pair<String, Integer>> getRequiredSkills() {
  512. return requiredSkill;
  513. }
  514.  
  515. public int getMaxLevel() {
  516. return maxLevel;
  517. }
  518.  
  519. public int getTrueMax() {
  520. return trueMax;
  521. }
  522.  
  523. public boolean combatOrders() {
  524. return combatOrders;
  525. }
  526.  
  527. public boolean canBeLearnedBy(int job) { //test
  528. // if (GameConstants.getBeginnerJob((short) (id / 10000)) == GameConstants.getBeginnerJob((short) job))
  529. // return true;
  530. int jid = job;
  531. int skillForJob = id / 10000;
  532. if (skillForJob == 2001) {
  533. return GameConstants.isEvan(job); //special exception for beginner -.-
  534. } else if (skillForJob == 0) {
  535. return GameConstants.isAdventurer(job); //special exception for beginner
  536. } else if (skillForJob == 1000) {
  537. return GameConstants.isKOC(job); //special exception for beginner
  538. } else if (skillForJob == 2000) {
  539. return GameConstants.isAran(job); //special exception for beginner
  540. } else if (skillForJob == 3000) {
  541. return GameConstants.isResistance(job); //special exception for beginner
  542. } else if (skillForJob == 1) {
  543. return GameConstants.isCannon(job); //special exception for beginner
  544. } else if (skillForJob == 3001) {
  545. return GameConstants.isDemonSlayer(job) || GameConstants.isDemonAvenger(job); //special exception for beginner
  546. } else if (skillForJob == 2002) {
  547. return GameConstants.isMercedes(job); //special exception for beginner
  548. } else if (skillForJob == 508) {
  549. return GameConstants.isJett(job); //special exception for beginner
  550. } else if (skillForJob == 2003) {
  551. return GameConstants.isPhantom(job); //special exception for beginner
  552. } else if (skillForJob == 5000) {
  553. return GameConstants.isMihile(job); //special exception for beginner
  554. } else if (skillForJob == 2004) {
  555. return GameConstants.isLuminous(job); //special exception for beginner
  556. } else if (skillForJob == 6000) {
  557. return GameConstants.isKaiser(job); //special exception for beginner
  558. } else if (skillForJob == 6001) {
  559. return GameConstants.isAngelicBuster(job); //special exception for beginner
  560. } else if (skillForJob == 3002) {
  561. return GameConstants.isXenon(job); //special exception for beginner
  562. }else if (skillForJob == 10000) {
  563. return GameConstants.isZero(job); //special exception for beginner
  564. } else if (jid / 100 != skillForJob / 100) { // wrong job
  565. return false;
  566. } else if (jid / 1000 != skillForJob / 1000) { // wrong job
  567. return false;
  568. } else if (GameConstants.isDemonAvenger(skillForJob) && !GameConstants.isDemonAvenger(job)) {
  569. return false;
  570. } else if (GameConstants.isXenon(skillForJob) && !GameConstants.isXenon(job)) {
  571. return false;
  572. } else if (GameConstants.isZero(skillForJob) && !GameConstants.isZero(job)) {
  573. return false;
  574. } else if (GameConstants.isBeastTamer(skillForJob) && !GameConstants.isBeastTamer(job)) {
  575. return false;
  576. } else if (GameConstants.isAngelicBuster(skillForJob) && !GameConstants.isAngelicBuster(job)) {
  577. return false;
  578. } else if (GameConstants.isKaiser(skillForJob) && !GameConstants.isKaiser(job)) {
  579. return false;
  580. } else if (GameConstants.isMihile(skillForJob) && !GameConstants.isMihile(job)) {
  581. return false;
  582. } else if (GameConstants.isLuminous(skillForJob) && !GameConstants.isLuminous(job)) {
  583. return false;
  584. } else if (GameConstants.isPhantom(skillForJob) && !GameConstants.isPhantom(job)) {
  585. return false;
  586. } else if (GameConstants.isJett(skillForJob) && !GameConstants.isJett(job)) {
  587. return false;
  588. } else if (GameConstants.isCannon(skillForJob) && !GameConstants.isCannon(job)) {
  589. return false;
  590. } else if (GameConstants.isDemonSlayer(skillForJob) && !GameConstants.isDemonSlayer(job)) {
  591. return false;
  592. } else if (GameConstants.isAdventurer(skillForJob) && !GameConstants.isAdventurer(job)) {
  593. return false;
  594. } else if (GameConstants.isKOC(skillForJob) && !GameConstants.isKOC(job)) {
  595. return false;
  596. } else if (GameConstants.isAran(skillForJob) && !GameConstants.isAran(job)) {
  597. return false;
  598. } else if (GameConstants.isEvan(skillForJob) && !GameConstants.isEvan(job)) {
  599. return false;
  600. } else if (GameConstants.isMercedes(skillForJob) && !GameConstants.isMercedes(job)) {
  601. return false;
  602. } else if (GameConstants.isResistance(skillForJob) && !GameConstants.isResistance(job)) {
  603. return false;
  604. } else if ((job / 10) % 10 == 0 && (skillForJob / 10) % 10 > (job / 10) % 10) { // wrong 2nd job
  605. return false;
  606. } else if ((skillForJob / 10) % 10 != 0 && (skillForJob / 10) % 10 != (job / 10) % 10) { //wrong 2nd job
  607. return false;
  608. } else if (skillForJob % 10 > job % 10) { // wrong 3rd/4th job
  609. return false;
  610. }
  611. return true;
  612. }
  613.  
  614. public boolean isTimeLimited() {
  615. return timeLimited;
  616. }
  617.  
  618. public boolean isFourthJobSkill(int skillid) {
  619. switch (skillid / 10000) {
  620. case 112:
  621. case 122:
  622. case 132:
  623. case 212:
  624. case 222:
  625. case 232:
  626. case 312:
  627. case 322:
  628. case 412:
  629. case 422:
  630. case 512:
  631. case 522:
  632. return true;
  633. }
  634. return false;
  635. }
  636.  
  637. public boolean isThirdJobSkill(int skillid) {
  638. switch (skillid / 10000) {
  639. case 111:
  640. case 121:
  641. case 131:
  642. case 211:
  643. case 221:
  644. case 231:
  645. case 311:
  646. case 321:
  647. case 411:
  648. case 421:
  649. case 511:
  650. case 521:
  651. return true;
  652. }
  653. return false;
  654. }
  655.  
  656. public boolean isSecondJobSkill(int skillid) {
  657. switch (skillid / 10000) {
  658. case 110:
  659. case 120:
  660. case 130:
  661. case 210:
  662. case 220:
  663. case 230:
  664. case 310:
  665. case 320:
  666. case 410:
  667. case 420:
  668. case 510:
  669. case 520:
  670. return true;
  671. }
  672. return false;
  673. }
  674. public int getV7(int jobid) {
  675. boolean beginner = isBeginnerSkill();
  676. int result;
  677. if (beginner || jobid % 100 == 0 || jobid == 501 || jobid == 3101 || jobid == 508) {
  678. result = 1;
  679. } else {
  680. int v4 = jobid / 10 == 43 ? jobid % 10 / 2 : jobid % 10;
  681. int v5 = v4 + 2;
  682. result = v5 >= 2 && (v5 <= 4 || v5 <= 10 && GameConstants.isEvan(jobid)) ? v5 : 0;
  683. }
  684. return result;
  685. }
  686. public boolean isFourthJob() {
  687. if (NoMasterLevel() || id / 1000000 == 92 && (id % 10000 == 0) || NoMasterLevel2() || (id / 10000 == 8000 || id / 10000 == 8001)) {
  688. return false;
  689. }
  690. int jobid = id / 10000;
  691. boolean beginner = isBeginnerSkill();
  692.  
  693. if (beginner || dafqNexon() || id == 42120024 || (jobid / 100 == 112 || jobid == 11000)) {
  694. return false;
  695. }
  696. int v7 = getV7(jobid);
  697. if (GameConstants.isEvan(jobid)) {
  698. if (id == 22171004 || v7 != 9 && v7 != 10 && id != 22111001 && id != 22141002 && id != 22140000)
  699. return false;
  700. } else {
  701. if (!NoMasterLevel3()) {
  702. if (v7 != 4 || GameConstants.isZero(jobid))
  703. return false;
  704. }
  705. }
  706. return true;
  707. }
  708. public boolean NoMasterLevel() {
  709. boolean v1; // zf@9
  710. if (id > 5220014) {
  711. if (id > 23120011) {
  712. if (id > 33120010) {
  713. if (id == 35120014)
  714. return true;
  715. v1 = id == 51120000;
  716. } else {
  717. if (id == 33120010 || id == 23120013)
  718. return true;
  719. v1 = id == 23121008;
  720. }
  721. } else {
  722. if (id == 23120011)
  723. return true;
  724. if (id > 21120011) {
  725. if (id == 21120014)
  726. return true;
  727. v1 = id == 22181004;
  728. } else {
  729. if (id == 21120011 || id == 5320007 || id - 5320007 == 997)
  730. return true;
  731. v1 = id - 5320007 == 999;
  732. }
  733. }
  734. return v1;
  735. }
  736. if (id == 5220014)
  737. return true;
  738.  
  739. if (id <= 4110012) {
  740. if (id == 4110012)
  741. return true;
  742. if (id > 2221009) {
  743. if (id == 2321010)
  744. return true;
  745. v1 = id == 3210015;
  746. } else {
  747. if ( id == 2221009 || id == 1120012 || id == 1320011 )
  748. return true;
  749. v1 = id == 2121009;
  750. }
  751. return v1;
  752. }
  753.  
  754. if (id <= 4340012) {
  755. if (id == 4340012 || id == 4210012)
  756. return true;
  757. v1 = id == 4340010;
  758. return v1;
  759. }
  760. if (id < 5120012)
  761. return false;
  762. if ( id > 5120012) {
  763. v1 = id == 5220012;
  764. if ( !v1 )
  765. return false;
  766. }
  767. return true;
  768. }
  769.  
  770. public boolean NoMasterLevel2() { // dafq ?
  771. return (id / 1000000 != 92 || id % 10000 == 1) && (id / 1000000 == 92) && (id % 10000 == 0); // got this from ida :/
  772. }
  773.  
  774. public boolean NoMasterLevel3() {
  775. boolean v1; // zf@7
  776. if (id > 101100101) {
  777. if (id > 101110203) {
  778. if (id == 101120104)
  779. return true;
  780. v1 = id == 101120204;
  781. } else {
  782. if (id == 101110203 || id == 101100201 || id == 101110102)
  783. return true;
  784. v1 = id == 101110200;
  785. }
  786. } else {
  787. if (id == 101100101)
  788. return true;
  789. if (id > 4331002) {
  790. if (id == 4341004 || id - 4341004 == 3)
  791. return true;
  792. v1 = id - 4341004 == 96659097;
  793. } else {
  794. if (id == 4331002 || id == 4311003 || id == 4321006)
  795. return true;
  796. v1 = id == 4330009;
  797. }
  798. }
  799. return v1;
  800. }
  801.  
  802. public boolean dafqNexon() {
  803. boolean result; // al@3
  804. if (id >= 0 )
  805. result = id / 10000 == 9500;
  806. else
  807. result = false;
  808. return result;
  809. }
  810. public Element getElement() {
  811. return element;
  812. }
  813.  
  814. public int getAnimationTime() {
  815. return animationTime;
  816. }
  817.  
  818. public int getMasterLevel() {
  819. return masterLevel;
  820. }
  821.  
  822. public int getDelay() {
  823. return delay;
  824. }
  825.  
  826. public int getTamingMob() {
  827. return eventTamingMob;
  828. }
  829.  
  830. public int getSkillTamingMob() {
  831. return eventTamingMob;
  832. }
  833.  
  834. public boolean isBeginnerSkill() {
  835. int jobId = id / 10000;
  836. return GameConstants.isBeginnerJob(jobId);
  837. }
  838.  
  839. public boolean isMagic() {
  840. return magic;
  841. }
  842.  
  843. public boolean isHyper() {
  844. return hyper > 0;
  845. }
  846.  
  847. public int getHyper() {
  848. return hyper;
  849. }
  850.  
  851. public boolean isMovement() {
  852. return casterMove;
  853. }
  854.  
  855. public boolean isPush() {
  856. return pushTarget;
  857. }
  858.  
  859. public boolean isPull() {
  860. return pullTarget;
  861. }
  862.  
  863. public boolean isSpecialSkill() {
  864. int jobId = id / 10000;
  865. return jobId == 900 || jobId == 800 || jobId == 9000 || jobId == 9200 || jobId == 9201 || jobId == 9202 || jobId == 9203 || jobId == 9204;
  866. }
  867.  
  868. @Override
  869. public int compare(Skill o1, Skill o2) {
  870. return (Integer.valueOf(o1.getId()).compareTo(Integer.valueOf(o2.getId())));
  871. }
  872. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement