Guest User

Untitled

a guest
May 4th, 2014
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.85 KB | None | 0 0
  1. package server.game.content.skills.impl.hunter;
  2.  
  3. import org.omicron.jagex.runescape.CollisionMap;
  4.  
  5. import server.Server;
  6. import server.game.content.achievements.AchievementType;
  7. import server.game.content.achievements.Achievements;
  8. import server.game.npc.NPC;
  9. import server.game.npc.NPCHandler;
  10. import server.game.objects.Objects;
  11. import server.game.player.Client;
  12. import server.game.player.Player;
  13. import server.game.player.PlayerAssistant;
  14. import server.game.player.PlayerHandler;
  15. import server.game.world.ObjectHandler;
  16. import server.task.ScheduledTask;
  17. import server.util.Misc;
  18.  
  19. public class HunterHandler {
  20. public static final int NPCID = 0, OBJECTID = 1, CATCHID = 2, ANIM = 3,
  21. ITEMID = 4, LAYANIM = 5, XP = 6, LOOT = 7, REQ = 8, BAIT = 9,
  22. ORIG = 10, TREE = 11;
  23. public static int[][] trapData = {
  24. { 5117, 19651, 19675, 5262, -1, -1, 700, 10149, 21, 1939, 19652,
  25. 19662 },
  26. { 5087, 19206, 19216, 5272, -1, -1, 500, 9953, 20, 1739, 19205 },
  27. { 5073, 19175, 19180, 6779, 10006, 5208, 800, 10088, 1 },
  28. { 5072, 19175, 19178, 6779, 10006, 5208, 790, 10087, 1 },
  29. { 5074, 19175, 19182, 6779, 10006, 5208, 900, 10089, 1 },
  30. { 5079, 19187, 19192, 5184, 10008, 5208, 10000, 10033, 53, 1982 },
  31. { 5080, 19187, 19192, 5184, 10008, 5208, 15000, 10034, 64, 1982 } };
  32. public static final int JAR = 1;
  33. public static final int LEVEL_REQ = 2;
  34. public static int[][] implingData = { { 1028, 11238, 1, 100 },
  35. { 5083, 10016, 35, 150 }, { 6064, 11256, 83, 390 },
  36. { 5085, 10020, 15, 325 }, { 5082, 10014, 45, 600 },
  37. { 5084, 10018, 25, 450 }, { 6053, 11254, 74, 1000 },
  38. { 6062, 11252, 65, 700 } };
  39. public static int[][] lootData = {
  40. { 995, 1000, 995, 10000, 995, 500 },
  41. { 10016, 1 },
  42. { 11212, 10, 11212, 20, 9341, 10, 9341, 25, 5699, 3, 1305, 1, 537,
  43. 25, 534, 40 },
  44. { 3385, 1, 3391, 1, 1113, 1, 4097, 1, 4095, 1, 1333, 1, 1347, 1,
  45. 1747, 1, 2363, 1 }, // Ninja implings
  46. { 1681, 1, 2568, 1, 3391, 1, 4097, 1, 4095, 1, 1185, 1, 5541, 1,
  47. 2364, 2, 1747, 1, 1603, 1 } }; // Magpie Implings
  48.  
  49. public static int getData(int[][] from, int data, int inputData,
  50. int returningData) {
  51. for (int[] aFrom : from) {
  52. if (aFrom[inputData] == data) {
  53. return aFrom[returningData];
  54. }
  55. }
  56. return -1;
  57. }
  58.  
  59. public static int getSize(int[][] from, int data, int inputData) {
  60. for (int[] aFrom : from) {
  61. if (aFrom[inputData] == data) {
  62. return aFrom.length;
  63. }
  64. }
  65. return -1;
  66. }
  67.  
  68. public static int[] getLoot(int whose) {
  69. int loot = (int) (java.lang.Math.random() * (lootData[whose].length - 1));
  70. if (loot % 2 == 0) {
  71. return new int[] { lootData[whose][loot], lootData[whose][loot + 1] };
  72. } else {
  73. return new int[] { lootData[whose][loot + 1],
  74. lootData[whose][loot + 2] };
  75. }
  76. }
  77.  
  78. public static int getLootId(int data, int inputData) {
  79. for (int x = 0; x < implingData.length; x++) {
  80. if (implingData[x][inputData] == data) {
  81. return x;
  82. }
  83. }
  84. return -1;
  85. }
  86.  
  87. public static boolean bait(Client c, int id, Objects o) {
  88. if (c == null) {
  89. return false;
  90. }
  91. if (c.getItems().playerHasItem(id)) {
  92. if (id == getData(trapData, o.objectId, OBJECTID, BAIT)
  93. && getData(trapData, o.objectId, OBJECTID, OBJECTID) > 0) {
  94. c.getItems().deleteItem(id, 1);
  95. o.bait = true;
  96. c.turnPlayerTo(o.objectX, o.objectY);
  97. c.startAnimation(5208);
  98. c.sendMessage("You succesfully bait the trap.");
  99. return true;
  100. } else if (getData(trapData, o.objectId, OBJECTID, BAIT) > 0
  101. && id != getData(trapData, o.objectId, OBJECTID, BAIT)) {
  102. c.sendMessage("You're trying to use wrong bait on this trap. Right bait would be "
  103. + c.getItems().getItemName(
  104. getData(trapData, o.objectId, OBJECTID, BAIT))
  105. + ".");
  106. }
  107. }
  108. return false;
  109. }
  110.  
  111. public static boolean netTrap(final Client c, final Objects o) {
  112. if (o == null) {
  113. return false;
  114. }
  115. if (c == null)
  116. return false;
  117. if (o.objectId == 19652) {
  118. if (c.getItems().playerHasItem(954)
  119. && c.getItems().playerHasItem(303)) {
  120. c.turnPlayerTo(o.objectX, o.objectY);
  121. c.startAnimation(5208);
  122. final Objects setObject = new Objects(getData(trapData,
  123. o.objectId, ORIG, TREE), o.objectX, o.objectY, 0, 0,
  124. 10, 0);
  125. final Objects net = new Objects(getData(trapData, o.objectId,
  126. ORIG, OBJECTID), o.objectX, o.objectY + 1, 0, 0, 10, 0);
  127. setObject.owner = c.playerId;
  128. Server.objectHandler.addObject(net);
  129. Server.objectHandler.placeObject(net);
  130. net.owner = c.playerId;
  131. Server.objectHandler.addObject(setObject);
  132. Server.objectHandler.placeObject(setObject);
  133. Server.getTaskScheduler().schedule(
  134. new ScheduledTask(20 * 1000) {
  135.  
  136. @Override
  137. public void execute() {
  138. try {
  139. if (c.disconnected) {
  140. this.stop();
  141. return;
  142. }
  143. if (net.owner == -1) {
  144. return;
  145. }
  146. Server.objectHandler.addObject(o);
  147. Server.objectHandler.placeObject(o);
  148. Server.objectHandler.removeObject(net);
  149. Server.objectHandler
  150. .removeObject(setObject);
  151. setObject.owner = -1;
  152. setObject.objectX = 0;
  153. setObject.objectY = 0;
  154. net.owner = -1;
  155. net.objectX = 0;
  156. net.objectY = 0;
  157. c.sendMessage("Your trap has dissapeared");
  158. } finally {
  159. super.stop();
  160. }
  161. }
  162. });
  163. Server.objectHandler.removeObject(o);
  164. return true;
  165. } else {
  166. c.sendMessage("You need to have small fishing net and rope in order to set-up net trap.");
  167. }
  168. } else if (o.objectId == 19205) {
  169. if (c.getItems().playerHasItem(1511)
  170. && c.getItems().playerHasItem(946)) {
  171. c.turnPlayerTo(o.objectX, o.objectY);
  172. c.getItems().deleteItem(1511, 1);
  173. c.startAnimation(5208);
  174. final Objects setObject = new Objects(19206, o.objectX,
  175. o.objectY, 0, 0, 10, 0);
  176. setObject.owner = c.playerId;
  177. Server.objectHandler.addObject(setObject);
  178. Server.objectHandler.placeObject(setObject);
  179. Server.getTaskScheduler().schedule(
  180. new ScheduledTask(20 * 1000) {
  181.  
  182. @Override
  183. public void execute() {
  184. try {
  185. if (c.disconnected) {
  186. this.stop();
  187. return;
  188. }
  189. if (setObject.owner == -1) {
  190. return;
  191. }
  192. Server.objectHandler.addObject(o);
  193. Server.objectHandler.placeObject(o);
  194. Server.objectHandler
  195. .removeObject(setObject);
  196. final Objects setObject = new Objects(
  197. 19205, o.objectX, o.objectY, 0, 0,
  198. 10, 0);
  199. setObject.owner = -1;
  200. setObject.objectX = 0;
  201. setObject.objectY = 0;
  202. c.sendMessage("2Your trap has dissapeared");
  203. } finally {
  204. super.stop();
  205. }
  206. }
  207. });
  208. Server.objectHandler.removeObject(o);
  209. return true;
  210. } else {
  211. c.sendMessage("You need knife and logs to setup this trap.");
  212. }
  213. }
  214. return false;
  215. }
  216.  
  217. public static boolean tryCatch(Client c, int id) { // DEATHEMOTES
  218. if (c == null)
  219. return false;
  220. if (NPCHandler.npcs[id].isDead)
  221. return true;
  222. int npcId = id;
  223. // c.sendMessage("Catching...");
  224. id = NPCHandler.npcs[id].npcType;
  225. if (getData(implingData, id, NPCID, NPCID) < 0) {
  226. return false;
  227. }
  228. if (c.playerEquipment[Player.playerWeapon] != 10010) {
  229. c.sendMessage("You need a butterfly net to catch this.");
  230. return true;
  231. }
  232. if (c.playerLevel[22] < getData(implingData, id, NPCID, LEVEL_REQ)) {
  233. c.sendMessage("You need hunter level of "
  234. + getData(implingData, id, NPCID, LEVEL_REQ)
  235. + " to catch this.");
  236. return true;
  237. }
  238. if (Misc.random(10) >= ((c.playerLevel[22] - 10) / 10) + 1) {
  239. c.sendMessage("You fail catching it.");
  240. return true;
  241. }
  242. c.turnPlayerTo(NPCHandler.npcs[npcId].getAbsX(),
  243. NPCHandler.npcs[npcId].getAbsY());
  244. c.startAnimation(5209);
  245. NPCHandler.npcs[npcId].isDead = true;
  246. NPCHandler.npcs[npcId].noDeathEmote = true;
  247. NPCHandler.npcs[npcId].updateRequired = true;
  248. c.getItems().addItem(getData(implingData, id, NPCID, JAR), 1);
  249. return true;
  250. }
  251.  
  252. public static boolean lootImp(Client c, int id) {
  253. if (getData(implingData, id, JAR, JAR) < 0) {
  254. return false;
  255. }
  256. if (c.getItems().playerHasItem(id, 1)) {
  257. c.getItems().deleteItem(id, 1);
  258. int[] loot = getLoot(getLootId(id, JAR));
  259. c.getItems().addItem(loot[0], loot[1]);
  260. // c.sendMessage(loot[0]+":"+loot[1]);
  261. c.sendMessage("You loot impling.");
  262. return true;
  263. }
  264. return false;
  265. }
  266.  
  267. public static void checkTrap(final NPC n) { // add only specified NPCs only
  268. if (n == null)
  269. return;
  270. if (getData(trapData, n.npcType, 0, 1) > -1) {
  271. final Objects o = checkClosestObjects(n,
  272. getData(trapData, n.npcType, 0, 1), n.npcId);
  273. if ((o != null && !n.isDead && distSquare(n.getAbsX(), n.getAbsY(),
  274. o.objectX, o.objectY) > 0)
  275. && (((int) (Math.random() * (getData(trapData, n.npcType,
  276. NPCID, REQ) * (o.bait ? 10 : 20) + 50)) < (PlayerHandler.players[o.owner] == null ? 0
  277. : PlayerHandler.players[o.owner].playerLevel[22])
  278. && o.delay < System.currentTimeMillis() && n.delay < System
  279. .currentTimeMillis()) || n.npcId == o.target)) {
  280. if (PlayerHandler.players[o.owner] != null
  281. && PlayerHandler.players[o.owner].playerLevel[22] < getData(
  282. trapData, n.npcType, NPCID, REQ)) {
  283. return;
  284. }
  285. if (o.target != n.npcId)
  286. o.target = n.npcId;
  287. n.moveX = NPCHandler.GetMove(n.getAbsX(), o.getObjectX());
  288. n.moveY = NPCHandler.GetMove(n.getAbsY(), o.getObjectY());
  289. n.getNextNPCMovement(8);
  290. o.delay = System.currentTimeMillis() + 2000;
  291. n.delay = System.currentTimeMillis() + 2000;
  292. } else if (o != null
  293. && distSquare(n.getAbsX(), n.getAbsY(), o.objectX,
  294. o.objectY) <= 0
  295. && o.oDelay < System.currentTimeMillis() && !n.isDead) {
  296. if (PlayerHandler.players[o.owner] != null
  297. && PlayerHandler.players[o.owner].playerLevel[22] < getData(
  298. trapData, n.npcType, NPCID, REQ)) {
  299. return;
  300. }
  301. n.noDeathEmote = true;
  302. n.forceAnim(getData(trapData, n.npcType, NPCID, ANIM));
  303. o.oDelay = System.currentTimeMillis() + 6000;
  304. final Objects catchObject = new Objects(getData(trapData,
  305. n.npcType, NPCID, CATCHID), o.objectX, o.objectY, 0, 0,
  306. 10, 0);
  307. catchObject.owner = o.owner;
  308. if (getSize(trapData, o.objectId, OBJECTID) < 12) {
  309. Server.objectHandler.addObject(catchObject);
  310. Server.objectHandler.placeObject(catchObject);
  311. Server.objectHandler.removeObject(o);
  312. o.owner = -1;
  313. } else {
  314. catchObject.objectY -= 1;
  315. Objects empty = new Objects(100, o.objectX, o.objectY, 0,
  316. 0, 10, 0);
  317. Server.objectHandler.addObject(empty);
  318. Server.objectHandler.placeObject(empty);
  319. Server.objectHandler.removeObject(empty);
  320. empty.owner = -1;
  321. o.owner = -1;
  322. }
  323. Server.objectHandler.addObject(catchObject);
  324. Server.objectHandler.placeObject(catchObject);
  325. Server.objectHandler.removeObject(o);
  326. o.owner = -1;
  327. o.objectX = 0;
  328. o.objectY = 0;
  329. catchObject.item = getData(trapData, n.npcType, NPCID, LOOT);
  330. catchObject.xp = getData(trapData, n.npcType, NPCID, XP);
  331. Server.getTaskScheduler().schedule(
  332. new ScheduledTask(20 * 1000) {
  333.  
  334. @Override
  335. public void execute() {
  336. try {
  337. if (catchObject.owner == -1) {
  338. return;
  339. }
  340. Server.itemHandler
  341. .createGroundItem(
  342. ((Client) PlayerHandler.players[catchObject.owner]),
  343. getData(trapData,
  344. n.npcType, NPCID,
  345. ITEMID),
  346. catchObject.objectX,
  347. catchObject.objectY,
  348. 1,
  349. PlayerHandler.players[catchObject.owner]
  350. .getId(), 0);
  351. Server.objectHandler
  352. .removeObject(catchObject);
  353. Objects empty = new Objects(100,
  354. catchObject.objectX,
  355. catchObject.objectY, 0, 0, 10, 0);
  356. Server.objectHandler.placeObject(empty);
  357. ((Client) PlayerHandler.players[catchObject.owner])
  358. .sendMessage("Your trap has dismantled.");
  359. catchObject.owner = -1;
  360. catchObject.objectX = 0;
  361. catchObject.objectY = 0;
  362. } finally {
  363. super.stop();
  364. }
  365. }
  366. });
  367. n.animUpdateRequired = true;
  368. n.isDead = true;
  369. n.updateRequired = true;
  370. n.delay = System.currentTimeMillis() + 2000;
  371. } else if (o != null && n.npcId == o.target) {
  372. // System.out.println("????");
  373. }
  374. }
  375. }
  376.  
  377. public static boolean layTrap(final Client c, final int id) {
  378. if (c == null)
  379. return false;
  380. if (getData(trapData, id, 4, 1) <= -1) {
  381. return false;
  382. }
  383. if (!canTrap(c)) {
  384. return false;
  385. }
  386. if (c.inProcess) {
  387. c.sendMessage("Already setting up a trap");
  388. return false;
  389. }
  390. c.startAnimation(5208);
  391. c.getItems().deleteItem(id, 1);
  392. c.inProcess = true;
  393. final Objects o = new Objects(getData(trapData, id, 4, 1), c.getAbsX(),
  394. c.getAbsY(), 0, 0, 10, 0);
  395. Server.getTaskScheduler().schedule(new ScheduledTask(4) {
  396. public void execute() {
  397. o.owner = c.playerId;
  398. Server.objectHandler.addObject(o);
  399. Server.objectHandler.placeObject(o);
  400. c.inProcess = false;
  401. Achievements.increase(c, AchievementType.PLANT_GALORE, 1);
  402. super.stop();
  403. }
  404.  
  405. });
  406. if (!CollisionMap.isEastBlocked(c.heightLevel, c.absX - 1, c.absY)) {
  407. c.getPA().walkTo(-1, 0);
  408. } else if (!CollisionMap.isWestBlocked(c.heightLevel, c.absX + 1,
  409. c.absY)) {
  410. c.getPA().walkTo(1, 0);
  411. }
  412. Server.getTaskScheduler().schedule(new ScheduledTask(55) {
  413.  
  414. @Override
  415. public void execute() {
  416. try {
  417. if (o.owner == -1) {
  418. return;
  419. }
  420. if (c.getOutStream() != null) {
  421. Server.itemHandler .createGroundItem(c,getData(trapData, o.objectId, OBJECTID,ITEMID), o.objectX, o.objectY,
  422. o.getObjectHeight(), 1, c.getId());
  423. }
  424. Objects empty = new Objects(
  425. 100, o.objectX, o.objectY, 0, 0, 10, 0);
  426. Server.objectHandler.placeObject(empty);
  427. Server.objectHandler.removeObject(o);
  428. Server.objectHandler.placeObject(empty);
  429. Server.objectHandler.removeObject(o);
  430. o.owner = -1;
  431. o.objectX = 0;
  432. o.objectY = 0;
  433. c.sendMessage("Your trap has dismantled and has broken..");
  434. } finally {
  435. super.stop();
  436. }
  437. }
  438. });
  439. return true;
  440. }
  441.  
  442. public static boolean checkTrap(Client c, Objects o) {
  443. if (c == null || o == null)
  444. return false;
  445. if (o.owner == c.playerId && o.item > 0) {
  446. c.getPA().addSkillXP(o.xp, 22);
  447. c.getItems().addItem(o.item, 1);
  448. if (getData(trapData, o.objectId, CATCHID, ITEMID) > 0) {
  449. c.getItems().addItem(
  450. getData(trapData, o.objectId, CATCHID, ITEMID), 1);
  451. Objects empty = new Objects(100, o.objectX, o.objectY, 0, 0,
  452. 10, 0);
  453. Server.objectHandler.addObject(empty);
  454. Server.objectHandler.placeObject(empty);
  455. Server.objectHandler.removeObject(empty);
  456. } else {
  457. Objects deadfall = new Objects(getData(trapData, o.objectId,
  458. CATCHID, ORIG), o.objectX, o.objectY, 0, 0, 10, 0);
  459. Server.objectHandler.addObject(deadfall);
  460. Server.objectHandler.placeObject(deadfall);
  461. }
  462. c.turnPlayerTo(o.objectX, o.objectY);
  463. c.startAnimation(5208);
  464. o.owner = -1;
  465. o.objectX = 0;
  466. o.objectY = 0;
  467. Achievements.increase(c, AchievementType.HUNTER_GALORE, 1);
  468.  
  469. c.sendMessage("You collect from your trap");
  470. return true;
  471. } else if (o.owner != c.playerId) {
  472. // c.sendMessage("You can only collect from your own trap!");
  473. } else if (o.owner == c.playerId && o.item <= 0) {
  474. if (o.objectId == 19662 || o.objectId == 19651
  475. || o.objectId == 19206) {
  476. return false;
  477. }
  478. c.getItems().addItem(
  479. getData(trapData, o.objectId, OBJECTID, ITEMID), 1);
  480. Objects empty = new Objects(100, o.objectX, o.objectY, 0, 0, 10, 0);
  481. Server.objectHandler.placeObject(empty);
  482. o.owner = -1;
  483. o.objectX = 0;
  484. o.objectY = 0;
  485. c.sendMessage("You pickup your own trap.");
  486. }
  487. return false;
  488. }
  489.  
  490. public static int distSquare(int x, int y, int tx, int ty) {
  491. return (int) Math.sqrt((Math.abs(x - tx) + Math.abs(y - ty)));
  492. }
  493.  
  494. public static Objects checkClosestObjects(NPC n, int objectId, int npcId) {
  495. Objects closest = null;
  496. for (Objects o : ObjectHandler.globalObjects) {
  497. if (distSquare(n.getAbsX(), n.getAbsY(), o.objectX, o.objectY) < 5
  498. && o.objectId == objectId) { // trapcheck
  499. if (closest == null) {
  500. closest = o;
  501. } else if (npcId == o.target) {
  502. return o;
  503. } else if (distSquare(n.getAbsX(), n.getAbsY(),
  504. closest.objectX, closest.objectY) > distSquare(
  505. n.getAbsX(), n.getAbsY(), o.objectX, o.objectY)) {
  506. closest = o;
  507. }
  508. }
  509. }
  510. return closest;
  511. }
  512.  
  513. public static boolean canTrap(Client c) {
  514.  
  515. if (c == null)
  516. return false;
  517. if(!c.inHunterZone()) {
  518. c.sendMessage("You can only lay traps in the hunter area");
  519. return false;
  520. }
  521. int amt = 0;
  522.  
  523. Objects objects[] = new Objects[6];
  524. for (Objects o : ObjectHandler.globalObjects) {
  525. if (o.owner == c.playerId) {
  526. boolean same = false;
  527. for (Objects o2 : objects) {
  528. if (o2 != null && o2.objectX == o.objectX
  529. && o2.objectY == o.objectY) {
  530. same = true;
  531. }
  532. }
  533. if (!same)
  534. objects[amt++] = o;
  535.  
  536. }
  537. if (o.objectId == c.objectId && o.getObjectX() == c.getAbsX()
  538. && o.getObjectY() == c.getAbsY()) {
  539. c.sendMessage("You cannot lay a trap on another trap.");
  540. return false;
  541. }
  542. }
  543.  
  544. if (amt > maxTraps(PlayerAssistant.getLevelForXP(c.playerXP[22]))) {
  545. c.sendMessage("You cannot lay that many traps at your level.");
  546. return false;
  547. }
  548. return true;
  549. }
  550.  
  551. private static int maxTraps(int levelForXP) {
  552. // System.out.println("Max amount is "+(levelForXP/20+1));
  553. return levelForXP / 20 + 1;
  554. }
  555.  
  556. }
Advertisement
Add Comment
Please, Sign In to add comment