Advertisement
Guest User

s

a guest
Dec 21st, 2015
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 129.21 KB | None | 0 0
  1. package ab.model.players;
  2.  
  3. import java.io.FileInputStream;
  4. import java.util.Objects;
  5. import java.util.Optional;
  6. import java.util.Properties;
  7. import java.util.Random;
  8.  
  9. import org.apache.commons.lang3.text.WordUtils;
  10.  
  11. import ab.Config;
  12. import ab.Connection;
  13. import ab.Server;
  14. import ab.clip.Region;
  15. import ab.event.CycleEventHandler;
  16. import ab.model.content.achievement.AchievementType;
  17. import ab.model.content.achievement.Achievements;
  18. import ab.model.content.instances.InstancedArea;
  19. import ab.model.content.instances.InstancedAreaManager;
  20. import ab.model.content.kill_streaks.Killstreak;
  21. import ab.model.content.teleport.Position;
  22. import ab.model.content.teleport.TeleportExecutor;
  23. import ab.model.content.zulrah.Zulrah;
  24. import ab.model.holiday.HolidayController;
  25. import ab.model.holiday.halloween.HalloweenDeathCycleEvent;
  26. import ab.model.items.Item;
  27. import ab.model.items.ItemAssistant;
  28. import ab.model.items.bank.BankTab;
  29. import ab.model.minigames.bounty_hunter.TargetState;
  30. import ab.model.minigames.pest_control.PestControl;
  31. import ab.model.multiplayer_session.MultiplayerSessionFinalizeType;
  32. import ab.model.multiplayer_session.MultiplayerSessionStage;
  33. import ab.model.multiplayer_session.MultiplayerSessionType;
  34. import ab.model.multiplayer_session.clan_wars.ClanWarsMap;
  35. import ab.model.multiplayer_session.duel.DuelSession;
  36. import ab.model.multiplayer_session.duel.DuelSessionRules.Rule;
  37. import ab.model.npcs.NPC;
  38. import ab.model.npcs.NPCHandler;
  39. import ab.model.players.combat.Damage;
  40. import ab.model.players.combat.Degrade;
  41. import ab.model.players.combat.Degrade.DegradableItem;
  42. import ab.model.players.combat.effects.DragonfireShieldEffect;
  43. import ab.model.players.skills.CraftingData;
  44. import ab.model.players.skills.Skill;
  45. import ab.model.players.skills.SkillHandler;
  46. import ab.net.outgoing.messages.ComponentVisibility;
  47. import ab.util.Misc;
  48. import ab.util.Stream;
  49. import ab.world.Clan;
  50.  
  51. public class PlayerAssistant {
  52.  
  53. private Player c;
  54.  
  55. public PlayerAssistant(Player Client) {
  56. this.c = Client;
  57. }
  58.  
  59. public int CraftInt, Dcolor, FletchInt;
  60.  
  61. public void destroyItem(int itemId) {
  62. itemId = c.droppedItem;
  63. String itemName = ItemAssistant.getItemName(itemId);
  64. c.getItems().deleteItem(itemId, c.getItems().getItemSlot(itemId), c.playerItemsN[c.getItems().getItemSlot(itemId)]);
  65. c.sendMessage("Your " + itemName + " vanishes as you drop it on the ground.");
  66. removeAllWindows();
  67. }
  68.  
  69. public void destroyInterface(int itemId) {// Destroy item created by Remco
  70. itemId = c.droppedItem;// The item u are dropping
  71. String itemName = ItemAssistant.getItemName(c.droppedItem);
  72. String[][] info = {// The info the dialogue gives
  73. { "Are you sure you want to drop this item?", "14174" }, { "Yes.", "14175" }, { "No.", "14176" }, { "", "14177" },
  74. { "This item is valuable, you will not", "14182" }, { "get it back once clicked yes.", "14183" }, { itemName, "14184" } };
  75. sendFrame34(itemId, 0, 14171, 1);
  76. for (int i = 0; i < info.length; i++)
  77. sendFrame126(info[i][0], Integer.parseInt(info[i][1]));
  78. sendFrame164(14170);
  79. }
  80. public void assembleSlayerHelmet() {
  81. if (c.slayerRecipe == false) {
  82. c.sendMessage("@blu@You must purchase the recipe from the slayer shop");
  83. c.sendMessage("@blu@before assembling a slayer helmet.");
  84. return;
  85. }
  86. if (c.playerLevel[c.playerCrafting] < 55) {
  87. c.sendMessage("@blu@You need a crafting level of 55 to assemble a slayer helmet.");
  88. return;
  89. }
  90. if (c.getItems().playerHasItem(4166) && c.getItems().playerHasItem(4168) && c.getItems().playerHasItem(4164) && c.getItems().playerHasItem(4551) && c.getItems().playerHasItem(8901)) {
  91. c.sendMessage("@blu@You assemble the pieces and create a full slayer helmet!");
  92. c.getItems().deleteItem(4166, 1);
  93. c.getItems().deleteItem(4164, 1);
  94. c.getItems().deleteItem(4168, 1);
  95. c.getItems().deleteItem(4551, 1);
  96. c.getItems().deleteItem(8901, 1);
  97. c.getItems().addItem(11864, 1);
  98. } else {
  99. c.sendMessage("You need a @blu@Facemask@bla@, @blu@Nose peg@bla@, @blu@Spiny helmet@bla@ and @blu@Earmuffs");
  100. c.sendMessage("@bla@in order to assemble a slayer helmet.");
  101. }
  102. }
  103. public long lastReward = System.currentTimeMillis();
  104.  
  105. Properties p = new Properties();
  106.  
  107. public void loadAnnouncements() {
  108. try {
  109. loadIni();
  110. if (p.getProperty("announcement1").length() > 0) {
  111. c.sendMessage(p.getProperty("announcement1"));
  112. }
  113. if (p.getProperty("announcement2").length() > 0) {
  114. c.sendMessage(p.getProperty("announcement2"));
  115. }
  116. if (p.getProperty("announcement3").length() > 0) {
  117. c.sendMessage(p.getProperty("announcement3"));
  118. }
  119. } catch (Exception e) {
  120. }
  121. }
  122.  
  123. private void loadIni() {
  124. try {
  125. p.load(new FileInputStream("./Announcements.ini"));
  126. } catch (Exception e) {
  127. }
  128. }
  129.  
  130. public boolean wearingCape(int cape) {
  131. int capes[] = { 9747, 9748, 9750, 9751, 9753, 9754, 9756, 9757, 9759, 9760, 9762, 9763, 9765, 9766, 9768, 9769, 9771, 9772, 9774, 9775, 9777,
  132. 9778, 9780, 9781, 9783, 9784, 9786, 9787, 9789, 9790, 9792, 9793, 9795, 9796, 9798, 9799, 9801, 9802, 9804, 9805, 9807, 9808, 9810,
  133. 9811, 10662 };
  134. for (int i = 0; i < capes.length; i++) {
  135. if (capes[i] == cape) {
  136. return true;
  137. }
  138. }
  139. return false;
  140. }
  141.  
  142. public int skillcapeGfx(int cape) {
  143. int capeGfx[][] = { { 9747, 823 }, { 9748, 823 }, { 9750, 828 }, { 9751, 828 }, { 9753, 824 }, { 9754, 824 }, { 9756, 832 }, { 9757, 832 },
  144. { 9759, 829 }, { 9760, 829 }, { 9762, 813 }, { 9763, 813 }, { 9765, 817 }, { 9766, 817 }, { 9768, 833 }, { 9769, 833 },
  145. { 9771, 830 }, { 9772, 830 }, { 9774, 835 }, { 9775, 835 }, { 9777, 826 }, { 9778, 826 }, { 9780, 818 }, { 9781, 818 },
  146. { 9783, 812 }, { 9784, 812 }, { 9786, 827 }, { 9787, 827 }, { 9789, 820 }, { 9790, 820 }, { 9792, 814 }, { 9793, 814 },
  147. { 9795, 815 }, { 9796, 815 }, { 9798, 819 }, { 9799, 819 }, { 9801, 821 }, { 9802, 821 }, { 9804, 831 }, { 9805, 831 },
  148. { 9807, 822 }, { 9808, 822 }, { 9810, 825 }, { 9811, 825 }, { 10662, 816 } };
  149. for (int i = 0; i < capeGfx.length; i++) {
  150. if (capeGfx[i][0] == cape) {
  151. return capeGfx[i][1];
  152. }
  153. }
  154. return -1;
  155. }
  156.  
  157. public int skillcapeEmote(int cape) {
  158. int capeEmote[][] = { { 9747, 4959 }, { 9748, 4959 }, { 9750, 4981 }, { 9751, 4981 }, { 9753, 4961 }, { 9754, 4961 }, { 9756, 4973 },
  159. { 9757, 4973 }, { 9759, 4979 }, { 9760, 4979 }, { 9762, 4939 }, { 9763, 4939 }, { 9765, 4947 }, { 9766, 4947 }, { 9768, 4971 },
  160. { 9769, 4971 }, { 9771, 4977 }, { 9772, 4977 }, { 9774, 4969 }, { 9775, 4969 }, { 9777, 4965 }, { 9778, 4965 }, { 9780, 4949 },
  161. { 9781, 4949 }, { 9783, 4937 }, { 9784, 4937 }, { 9786, 4967 }, { 9787, 4967 }, { 9789, 4953 }, { 9790, 4953 }, { 9792, 4941 },
  162. { 9793, 4941 }, { 9795, 4943 }, { 9796, 4943 }, { 9798, 4951 }, { 9799, 4951 }, { 9801, 4955 }, { 9802, 4955 }, { 9804, 4975 },
  163. { 9805, 4975 }, { 9807, 4957 }, { 9808, 4957 }, { 9810, 4963 }, { 9811, 4963 }, { 10662, 4945 } };
  164. for (int i = 0; i < capeEmote.length; i++) {
  165. if (capeEmote[i][0] == cape) {
  166. return capeEmote[i][1];
  167. }
  168. }
  169. return -1;
  170. }
  171.  
  172. public void otherInv(Player c, Player o) {
  173. if (o == c || o == null || c == null)
  174. return;
  175. int[] backupItems = c.playerItems;
  176. int[] backupItemsN = c.playerItemsN;
  177. c.playerItems = o.playerItems;
  178. c.playerItemsN = o.playerItemsN;
  179. c.getItems().resetItems(3214);
  180. c.playerItems = backupItems;
  181. c.playerItemsN = backupItemsN;
  182. }
  183.  
  184. public void multiWay(int i1) {
  185. // synchronized(c) {
  186. c.outStream.createFrame(61);
  187. c.outStream.writeByte(i1);
  188. c.updateRequired = true;
  189. c.setAppearanceUpdateRequired(true);
  190.  
  191. }
  192.  
  193. public boolean salveAmulet() {
  194. return (c.playerEquipment[c.playerAmulet] == 4081);
  195. }
  196.  
  197. public int backupItems[] = new int[Config.BANK_SIZE];
  198. public int backupItemsN[] = new int[Config.BANK_SIZE];
  199.  
  200. public void otherBank(Player c, Player o) {
  201. if (o == c || o == null || c == null) {
  202. return;
  203. }
  204.  
  205. for (int i = 0; i < o.bankItems.length; i++) {
  206. backupItems[i] = c.bankItems[i];
  207. backupItemsN[i] = c.bankItemsN[i];
  208. c.bankItemsN[i] = o.bankItemsN[i];
  209. c.bankItems[i] = o.bankItems[i];
  210. }
  211. openUpBank();
  212.  
  213. for (int i = 0; i < o.bankItems.length; i++) {
  214. c.bankItemsN[i] = backupItemsN[i];
  215. c.bankItems[i] = backupItems[i];
  216. }
  217. }
  218. public void sendString(final String s, final int id) {
  219. if (c.getOutStream() != null && c != null) {
  220. c.getOutStream().createFrameVarSizeWord(126);
  221. c.getOutStream().writeString(s);
  222. c.getOutStream().writeWordA(id);
  223. c.getOutStream().endFrameVarSizeWord();
  224. c.flushOutStream();
  225. }
  226.  
  227. }
  228.  
  229. /**
  230. * Changes the main displaying sprite on an interface. The index represents
  231. * the location of the new sprite in the index of the sprite array.
  232. *
  233. * @param componentId the interface
  234. * @param index the index in the array
  235. */
  236. public void sendChangeSprite(int componentId, byte index) {
  237. if (c == null || c.getOutStream() == null) {
  238. return;
  239. }
  240. Stream stream = c.getOutStream();
  241. stream.createFrame(7);
  242. stream.writeDWord(componentId);
  243. stream.writeByte(index);
  244. c.flushOutStream();
  245. }
  246.  
  247. /* Treasure */
  248. public static int lowLevelReward[] = {
  249. 1077, 1107, 1089, 1168, 1165, 1179, 1195, 1283, 1297, 1313, 1327, 1341, 1361,
  250. 1367, 1426, 2633, 7362, 7368, 7366, 2583, 2585, 2587, 2589, 2591, 2593,
  251. 2595, 2597, 7332, 7338, 7350, 2635, 2637, 7388, 7386, 7392, 7390, 7396, 7394,
  252. 2631, 7364, 7356
  253. };
  254. public static int mediemLevelReward[] = {
  255. 2599, 2601, 2603, 2605, 2607, 2609, 2611, 2613,
  256. 7334, 7340, 7346, 7352, 7358, 7319, 7321, 7323, 7325, 7327, 7372,
  257. 7370, 7380, 7378, 2645, 2647, 2649, 2577, 2579, 1073, 1091, 1099,
  258. 1111, 1135, 1124, 1145, 1161, 1169, 1183, 1199, 1211, 1245, 1271,
  259. 1287, 1301, 1317, 1332, 1357, 1371, 1430, 6916, 6918, 6920, 6922,
  260. 6924, 10400, 10402, 10416, 10418, 10420, 10422, 10436, 10438,
  261. 10446, 10448, 10450, 10452, 10454, 10456, 6889
  262. };
  263. public static int highLevelReward[] = {
  264. 1079, 1093, 1113, 1127, 1147, 1163, 1185, 1201,
  265. 1275, 1303, 1319, 1333, 1359, 1373, 2491, 2497, 2503, 861, 859,
  266. 2581, 2577, 2651, 1079, 1093, 1113, 1127, 1147, 1163, 1185, 1201, 1275,
  267. 1303, 1333, 1359, 1373, 2491, 2497, 2503, 861, 859, 2581, 2577,
  268. 2651, 2615, 2617, 2619, 2621, 2623, 2625, 2627, 2629, 2639, 2641,
  269. 2643, 2651, 2653, 2655, 2657, 2659, 2661, 2663, 2665, 2667, 2669,
  270. 2671, 2673, 2675, 7342, 7348, 7374, 7376, 7382,
  271. 10330, 10338, 10348, 10332, 10340, 10346, 10334, 10342, 10350,
  272. 10336, 10344, 10352, 10368, 10376, 10384, 10370, 10378, 10386,
  273. 10372, 10380, 10388, 10374, 10382, 10390, 10470, 10472, 10474,
  274. 10440, 10442, 10444, 6914,
  275. 7384, 7398, 7399, 7400, 3481, 3483, 3485, 3486, 3488, 1079, 1093,
  276. 1113, 1127, 1148, 1164, 1185, 1201, 1213, 1247, 1275, 1289, 1303,
  277. 1359, 1374, 1432, 2615, 2617, 2619, 2621, 2623, 1319, 1333, 1347,
  278. };
  279.  
  280. public static int lowLevelStacks[] = {
  281. 995, 380, 561, 886,
  282. };
  283. public static int mediumLevelStacks[] = {
  284. 995, 374, 561, 563, 890,
  285. };
  286. public static int highLevelStacks[] = {
  287. 995, 386, 561, 563, 560, 892
  288. };
  289.  
  290. public static void addClueReward(Player c, int clueLevel) {
  291. int chanceReward = Misc.random(2);
  292. if(clueLevel == 0) {
  293. switch (chanceReward) {
  294. case 0:
  295. displayReward(c, lowLevelReward[Misc.random(40)], 1, lowLevelReward[Misc.random(16)], 1, lowLevelStacks[Misc.random(3)], 1 + Misc.random(150));
  296. break;
  297. case 1:
  298. displayReward(c, lowLevelReward[Misc.random(26)], 1, lowLevelStacks[Misc.random(3)], 1 + Misc.random(150), -1, 1);
  299. break;
  300. case 2:
  301. displayReward(c, lowLevelReward[Misc.random(40)], 1, lowLevelReward[Misc.random(16)], 1, -1, 1);
  302. break;
  303. }
  304. } else if(clueLevel == 1) {
  305. switch (chanceReward) {
  306. case 0:
  307. displayReward(c, mediemLevelReward[Misc.random(68)], 1, mediemLevelReward[Misc.random(13)], 1, mediumLevelStacks[Misc.random(4)], 1 + Misc.random(200));
  308. break;
  309. case 1:
  310. displayReward(c, mediemLevelReward[Misc.random(46)], 1, mediumLevelStacks[Misc.random(4)], 1 + Misc.random(200), -1, 1);
  311. break;
  312. case 2:
  313. displayReward(c, mediemLevelReward[Misc.random(68)], 1, mediemLevelReward[Misc.random(13)], 1, -1, 1);
  314. break;
  315. }
  316. } else if(clueLevel == 2) {
  317. switch (chanceReward) {
  318. case 0:
  319. displayReward(c, highLevelReward[Misc.random(135)], 1, highLevelReward[Misc.random(60)], 1, highLevelStacks[Misc.random(5)], 1 + Misc.random(350));
  320. break;
  321. case 1:
  322. displayReward(c, highLevelReward[Misc.random(52)], 1, highLevelStacks[Misc.random(5)], 1 + Misc.random(350), -1, 1);
  323. break;
  324. case 2:
  325. displayReward(c, highLevelReward[Misc.random(135)], 1, highLevelReward[Misc.random(60)], 1, -1, 1);
  326. break;
  327. }
  328. }
  329. }
  330.  
  331. public static void displayReward(Player c, int item, int amount, int item2, int amount2, int item3, int amount3) {
  332. int[] items = {
  333. item, item2, item3
  334. };
  335. int[] amounts = {
  336. amount, amount2, amount3
  337. };
  338. c.outStream.createFrameVarSizeWord(53);
  339. c.outStream.writeWord(6963);
  340. c.outStream.writeWord(items.length);
  341. for(int i = 0; i < items.length; i++) {
  342. if(c.playerItemsN[i] > 254) {
  343. c.outStream.writeByte(255);
  344. c.outStream.writeDWord_v2(amounts[i]);
  345. } else {
  346. c.outStream.writeByte(amounts[i]);
  347. }
  348. if(items[i] > 0) {
  349. c.outStream.writeWordBigEndianA(items[i] + 1);
  350. } else {
  351. c.outStream.writeWordBigEndianA(0);
  352. }
  353. }
  354. c.outStream.endFrameVarSizeWord();
  355. c.flushOutStream();
  356. c.getItems().addItem(item, amount);
  357. c.getItems().addItem(item2, amount2);
  358. c.getItems().addItem(item3, amount3);
  359. c.getPA().showInterface(6960);
  360. }
  361.  
  362.  
  363. public void removeAllItems() {
  364. for (int i = 0; i < c.playerItems.length; i++) {
  365. c.playerItems[i] = 0;
  366. }
  367. for (int i = 0; i < c.playerItemsN.length; i++) {
  368. c.playerItemsN[i] = 0;
  369. }
  370. c.getItems().resetItems(3214);
  371. }
  372.  
  373. public void setConfig(int id, int state) {
  374. // synchronized (c) {
  375. if (c.getOutStream() != null && c != null) {
  376. c.getOutStream().createFrame(36);
  377. c.getOutStream().writeWordBigEndian(id);
  378. c.getOutStream().writeByte(state);
  379. c.flushOutStream();
  380. }
  381. // }
  382. }
  383.  
  384. public double getAgilityRunRestore(Player c) {
  385. return 2260 - (c.playerLevel[16] * 10);
  386. }
  387.  
  388. public Player getClient(String playerName) {
  389. for (Player p : PlayerHandler.players) {
  390. if (p != null) {
  391. if (p.playerName.equalsIgnoreCase(playerName)) {
  392. return p;
  393. }
  394. }
  395. }
  396. return null;
  397. }
  398.  
  399. public void normYell(String Message) {
  400. for (int j = 0; j < PlayerHandler.players.length; j++) {
  401. if (PlayerHandler.players[j] != null) {
  402. Player c2 = PlayerHandler.players[j];
  403. c2.sendClan(Misc.optimizeText(c.playerName), Message, "OS PvP", c.getRights().getValue());
  404. }
  405. }
  406. }
  407.  
  408. public void admYell(String Message) {
  409. for (int j = 0; j < PlayerHandler.players.length; j++) {
  410. if (PlayerHandler.players[j] != null) {
  411. Player c2 = PlayerHandler.players[j];
  412. c2.sendClan(Misc.optimizeText(c.playerName), Message, "Developer", c.getRights().getValue());
  413. }
  414. }
  415. }
  416.  
  417. public void itemOnInterface(int interfaceChild, int zoom, int itemId) {
  418. if (c.getOutStream() != null && c != null) {
  419. c.getOutStream().createFrame(246);
  420. c.getOutStream().writeWordBigEndian(interfaceChild);
  421. c.getOutStream().writeWord(zoom);
  422. c.getOutStream().writeWord(itemId);
  423. c.flushOutStream();
  424. }
  425. }
  426.  
  427. public void playerWalk(int x, int y) {
  428. PathFinder.getPathFinder().findRoute(c, x, y, true, 1, 1);
  429. }
  430.  
  431. /**
  432. * If the player is using melee and is standing diagonal from the opponent,
  433. * then move towards opponent.
  434. */
  435.  
  436. public void movePlayerDiagonal(int i) {
  437. Player c2 = PlayerHandler.players[i];
  438. boolean hasMoved = false;
  439. int c2X = c2.getX();
  440. int c2Y = c2.getY();
  441. if (c.goodDistance(c2X, c2Y, c.getX(), c.getY(), 1)) {
  442. if (c.getX() != c2.getX() && c.getY() != c2.getY()) {
  443. if (c.getX() > c2.getX() && !hasMoved) {
  444. if (Region.getClipping(c.getX() - 1, c.getY(), c.heightLevel, -1, 0)) {
  445. hasMoved = true;
  446. walkTo(-1, 0);
  447. }
  448. } else if (c.getX() < c2.getX() && !hasMoved) {
  449. if (Region.getClipping(c.getX() + 1, c.getY(), c.heightLevel, 1, 0)) {
  450. hasMoved = true;
  451. walkTo(1, 0);
  452. }
  453. }
  454.  
  455. if (c.getY() > c2.getY() && !hasMoved) {
  456. if (Region.getClipping(c.getX(), c.getY() - 1, c.heightLevel, 0, -1)) {
  457. hasMoved = true;
  458. walkTo(0, -1);
  459. }
  460. } else if (c.getY() < c2.getY() && !hasMoved) {
  461. if (Region.getClipping(c.getX(), c.getY() + 1, c.heightLevel, 0, 1)) {
  462. hasMoved = true;
  463. walkTo(0, 1);
  464. }
  465. }
  466. }
  467. }
  468. hasMoved = false;
  469. }
  470.  
  471. public Clan getClan() {
  472. if (Server.clanManager.clanExists(c.playerName)) {
  473. return Server.clanManager.getClan(c.playerName);
  474. }
  475. return null;
  476. }
  477.  
  478. public void sendClan(String name, String message, String clan, int rights) {
  479. if (rights >= 3)
  480. rights--;
  481. c.outStream.createFrameVarSizeWord(217);
  482. c.outStream.writeString(name);
  483. c.outStream.writeString(Misc.formatPlayerName(message));
  484. c.outStream.writeString(clan);
  485. c.outStream.writeWord(rights);
  486. c.outStream.endFrameVarSize();
  487. }
  488.  
  489. public void clearClanChat() {
  490. c.clanId = -1;
  491. c.getPA().sendString("Talking in: ", 18139);
  492. c.getPA().sendString("Owner: ", 18140);
  493. for (int j = 18144; j < 18244; j++) {
  494. c.getPA().sendString("", j);
  495. }
  496. }
  497.  
  498. public void setClanData() {
  499. boolean exists = Server.clanManager.clanExists(c.playerName);
  500. if (!exists || c.clan == null) {
  501. sendString("Join chat", 18135);
  502. sendString("Talking in: Not in chat", 18139);
  503. sendString("Owner: None", 18140);
  504. }
  505. if (!exists) {
  506. sendString("Chat Disabled", 18306);
  507. String title = "";
  508. for (int id = 18307; id < 18317; id += 3) {
  509. if (id == 18307) {
  510. title = "Anyone";
  511. } else if (id == 18310) {
  512. title = "Anyone";
  513. } else if (id == 18313) {
  514. title = "General+";
  515. } else if (id == 18316) {
  516. title = "Only Me";
  517. }
  518. sendString(title, id + 2);
  519. }
  520. for (int index = 0; index < 100; index++) {
  521. sendString("", 18323 + index);
  522. }
  523. for (int index = 0; index < 100; index++) {
  524. sendString("", 18424 + index);
  525. }
  526. return;
  527. }
  528. Clan clan = Server.clanManager.getClan(c.playerName);
  529. sendString(clan.getTitle(), 18306);
  530. String title = "";
  531. for (int id = 18307; id < 18317; id += 3) {
  532. if (id == 18307) {
  533. title = clan.getRankTitle(clan.whoCanJoin) + (clan.whoCanJoin > Clan.Rank.ANYONE && clan.whoCanJoin < Clan.Rank.OWNER ? "+" : "");
  534. } else if (id == 18310) {
  535. title = clan.getRankTitle(clan.whoCanTalk) + (clan.whoCanTalk > Clan.Rank.ANYONE && clan.whoCanTalk < Clan.Rank.OWNER ? "+" : "");
  536. } else if (id == 18313) {
  537. title = clan.getRankTitle(clan.whoCanKick) + (clan.whoCanKick > Clan.Rank.ANYONE && clan.whoCanKick < Clan.Rank.OWNER ? "+" : "");
  538. } else if (id == 18316) {
  539. title = clan.getRankTitle(clan.whoCanBan) + (clan.whoCanBan > Clan.Rank.ANYONE && clan.whoCanBan < Clan.Rank.OWNER ? "+" : "");
  540. }
  541. sendString(title, id + 2);
  542. }
  543. if (clan.rankedMembers != null) {
  544. for (int index = 0; index < 100; index++) {
  545. if (index < clan.rankedMembers.size()) {
  546. sendString("<clan=" + clan.ranks.get(index) + ">" + clan.rankedMembers.get(index), 18323 + index);
  547. } else {
  548. sendString("", 18323 + index);
  549. }
  550. }
  551. }
  552. if (clan.bannedMembers != null) {
  553. for (int index = 0; index < 100; index++) {
  554. if (index < clan.bannedMembers.size()) {
  555. sendString(clan.bannedMembers.get(index), 18424 + index);
  556. } else {
  557. sendString("", 18424 + index);
  558. }
  559. }
  560. }
  561. }
  562.  
  563. public void resetAutocast() {
  564. c.autocastId = -1;
  565. c.autocasting = false;
  566. c.setSidebarInterface(0, 328);
  567. c.getPA().sendFrame36(108, 0);
  568. c.getItems().sendWeapon(c.playerEquipment[c.playerWeapon], ItemAssistant.getItemName(c.playerEquipment[c.playerWeapon]));
  569. }
  570.  
  571. public int getItemSlot(int itemID) {
  572. for (int i = 0; i < c.playerItems.length; i++) {
  573. if ((c.playerItems[i] - 1) == itemID) {
  574. return i;
  575. }
  576. }
  577. return -1;
  578. }
  579.  
  580. public boolean isItemInBag(int itemID) {
  581. for (int i = 0; i < c.playerItems.length; i++) {
  582. if ((c.playerItems[i] - 1) == itemID) {
  583. return true;
  584. }
  585. }
  586. return false;
  587. }
  588.  
  589. public int freeSlots() {
  590. int freeS = 0;
  591. for (int i = 0; i < c.playerItems.length; i++) {
  592. if (c.playerItems[i] <= 0) {
  593. freeS++;
  594. }
  595. }
  596. return freeS;
  597. }
  598.  
  599. public void turnTo(int pointX, int pointY) {
  600. c.focusPointX = 2 * pointX + 1;
  601. c.focusPointY = 2 * pointY + 1;
  602. c.updateRequired = true;
  603. }
  604.  
  605. public void movePlayer(int x, int y, int h) {
  606. if (c.inDuelArena() || Server.getMultiplayerSessionListener().inAnySession(c)) {
  607. if (!c.getRights().isStaff()) {
  608. return;
  609. }
  610. }
  611. if (!c.lastSpear.elapsed(4000)) {
  612. c.sendMessage("You're trying to move too fast.");
  613. return;
  614. }
  615. c.resetWalkingQueue();
  616. c.teleportToX = x;
  617. c.teleportToY = y;
  618. c.heightLevel = h;
  619. requestUpdates();
  620. c.lastMove = System.currentTimeMillis();
  621. }
  622.  
  623. public void movePlayerDuel(int x, int y, int h) {
  624. DuelSession session = (DuelSession) Server.getMultiplayerSessionListener().getMultiplayerSession(c, MultiplayerSessionType.DUEL);
  625. if (Objects.nonNull(session) && session.getStage().getStage() == MultiplayerSessionStage.FURTHER_INTERACTION
  626. && Boundary.isIn(c, Boundary.DUEL_ARENAS)) {
  627. // c.getPA().removeAllWindows();
  628. return;
  629. }
  630. c.resetWalkingQueue();
  631. c.teleportToX = x;
  632. c.teleportToY = y;
  633. c.heightLevel = h;
  634. requestUpdates();
  635. }
  636.  
  637. public int getX() {
  638. return absX;
  639. }
  640.  
  641. public int getY() {
  642. return absY;
  643. }
  644.  
  645. public int absX, absY;
  646. public int heightLevel;
  647.  
  648. public static void QuestReward(Player c, String questName, int PointsGain, String Line1, String Line2, String Line3, String Line4, String Line5,
  649. String Line6, int itemID) {
  650. c.getPA().sendFrame126("You have completed " + questName + "!", 12144);
  651. sendQuest(c, "" + (c.QuestPoints), 12147);
  652. // c.QuestPoints += PointsGain;
  653. sendQuest(c, Line1, 12150);
  654. sendQuest(c, Line2, 12151);
  655. sendQuest(c, Line3, 12152);
  656. sendQuest(c, Line4, 12153);
  657. sendQuest(c, Line5, 12154);
  658. sendQuest(c, Line6, 12155);
  659. c.getPlayerAssistant().sendFrame246(12145, 250, itemID);
  660. c.getPA().showInterface(12140);
  661. Server.getStillGraphicsManager().stillGraphics(c, c.getX(), c.getY(), c.getHeightLevel(), 199, 0);
  662. }
  663.  
  664. public static void sendQuest(Player client, String s, int i) {
  665. client.getOutStream().createFrameVarSizeWord(126);
  666. client.getOutStream().writeString(s);
  667. client.getOutStream().writeWordA(i);
  668. client.getOutStream().endFrameVarSizeWord();
  669. client.flushOutStream();
  670. }
  671.  
  672. public void sendStillGraphics(int id, int heightS, int y, int x, int timeBCS) {
  673. c.getOutStream().createFrame(85);
  674. c.getOutStream().writeByteC(y - (c.mapRegionY * 8));
  675. c.getOutStream().writeByteC(x - (c.mapRegionX * 8));
  676. c.getOutStream().createFrame(4);
  677. c.getOutStream().writeByte(0);// Tiles away (X >> 4 + Y & 7)
  678. // //Tiles away from
  679. // absX and absY.
  680. c.getOutStream().writeWord(id); // Graphic ID.
  681. c.getOutStream().writeByte(heightS); // Height of the graphic when
  682. // cast.
  683. c.getOutStream().writeWord(timeBCS); // Time before the graphic
  684. // plays.
  685. c.flushOutStream();
  686. }
  687.  
  688. public void createArrow(int type, int id) {
  689. if (c != null) {
  690. c.getOutStream().createFrame(254); // The packet ID
  691. c.getOutStream().writeByte(type); // 1=NPC, 10=Player
  692. c.getOutStream().writeWord(id); // NPC/Player ID
  693. c.getOutStream().write3Byte(0); // Junk
  694. }
  695. }
  696.  
  697. public void createArrow(int x, int y, int height, int pos) {
  698. if (c != null) {
  699. c.getOutStream().createFrame(254); // The packet ID
  700. c.getOutStream().writeByte(pos); // Position on Square(2 = middle, 3
  701. // = west, 4 = east, 5 = south,
  702. // 6 = north)
  703. c.getOutStream().writeWord(x); // X-Coord of Object
  704. c.getOutStream().writeWord(y); // Y-Coord of Object
  705. c.getOutStream().writeByte(height); // Height off Ground
  706. }
  707. }
  708.  
  709. public void loadQuests() {
  710. sendFrame126("Players Online: @gre@"+ PlayerHandler.getPlayerCount() +"", 29155);
  711. sendFrame126("@gre@ My Statistics:", 29161);
  712. if (c.getRights().getValue() == 0)
  713. sendFrame126("@or1@Rank: Player", 29162);
  714. if (c.getRights().getValue() == 1)
  715. sendFrame126("@or1@Rank: <col=148200>Moderator @cr1@", 29162);
  716. if (c.getRights().getValue() == 2 || c.getRights().getValue() == 3)
  717. sendFrame126("@or1@Rank: <col=A67711>Owner @cr2@", 29162);
  718. if (c.getRights().getValue() == 5)
  719. sendFrame126("@or1@Rank: @red@Donator@cr4@", 29162);
  720. if (c.getRights().getValue() == 6)
  721. sendFrame126("@or1@Rank: @blu@Sponsor@cr5@", 29162);
  722. if (c.getRights().getValue() == 7)
  723. sendFrame126("@or1@Rank: <col=FF00CD>V.I.P @cr6@", 29162);
  724. sendFrame126("@or1@PK Points: @gre@"+c.pkp, 29163);
  725. sendFrame126("@or1@Kills/Deaths: @gre@"+ c.KC +"@or1@/@gre@" + c.DC, 29164);
  726. sendFrame126("@or1@Current Killstreak: @gre@"+ c.killStreak, 29165);
  727. sendFrame126("@or1@Account Info", 29166);
  728. /*sendFrame126("@or1@Pk Points: @gre@" + c.pkp, 29162);
  729. if (c.KC == 0 && c.DC == 0) {
  730. sendFrame126("@or1@KDR:@red@ " + c.KC + "@or1@/@red@" + c.DC, 29163);
  731. } else {
  732. sendFrame126("@or1@KDR:@gre@ " + c.KC + "@yel@/@gre@" + c.DC, 29163);
  733. }
  734. sendFrame126("@or1@Donator Points: @gre@" + c.donPoints, 29164);
  735. if (c.achievementsCompleted == 0) {
  736. sendFrame126("@or1@Achievements Completed: @red@0", 29165);
  737. } else {
  738. sendFrame126("@or1@Achievements Completed: @gre@"+c.achievementsCompleted, 29165);
  739. }
  740. if (c.pcPoints == 0) {
  741. sendFrame126("@or1@Pest-Control Points: @red@" + c.pcPoints + "",
  742. 29166);
  743. } else {
  744. sendFrame126("@or1@Pest-Control Points: @gre@" + c.pcPoints + "",
  745. 29166);
  746. }*/
  747. sendFrame126("@gre@ Useful links:", 663);
  748. /*sendFrame126("@or1@Slayer Points: @gre@" + c.slayerPoints + " ", 29167);
  749. if (c.slayerTask <= 0) {
  750. c.getPA().sendFrame126("@or1@Task: @gre@Empty ", 29168);
  751. } else {
  752. c.getPA().sendFrame126(
  753. "@or1@Task: @gre@" + c.taskAmount + " "
  754. + Server.npcHandler.getNpcListName(c.slayerTask)
  755. + " ", 29168);
  756. }*/
  757.  
  758. }
  759.  
  760. public void sendFrame126(String s, int id) {
  761. if (!c.checkPacket126Update(s, id)) {
  762. return;
  763. }
  764. if (c.getOutStream() != null && c != null) {
  765. c.getOutStream().createFrameVarSizeWord(126);
  766. c.getOutStream().writeString(s);
  767. c.getOutStream().writeWordA(id);
  768. c.getOutStream().endFrameVarSizeWord();
  769. c.flushOutStream();
  770. }
  771.  
  772. }
  773.  
  774. public void sendLink(String s) {
  775. if (c.getOutStream() != null && c != null) {
  776. c.getOutStream().createFrameVarSizeWord(187);
  777. c.getOutStream().writeString(s);
  778. }
  779. }
  780.  
  781. public void setSkillLevel(int skillNum, int currentLevel, int XP) {
  782. if (c.getOutStream() != null && c != null) {
  783. c.getOutStream().createFrame(134);
  784. c.getOutStream().writeByte(skillNum);
  785. c.getOutStream().writeDWord_v1(XP);
  786. c.getOutStream().writeByte(currentLevel);
  787. c.flushOutStream();
  788. }
  789. }
  790.  
  791. public void sendFrame106(int sideIcon) {
  792. // synchronized(c) {
  793. if (c.getOutStream() != null && c != null) {
  794. c.getOutStream().createFrame(106);
  795. c.getOutStream().writeByteC(sideIcon);
  796. c.flushOutStream();
  797. requestUpdates();
  798. }
  799. }
  800.  
  801. public void sendFrame107() {
  802. // synchronized(c) {
  803. if (c.getOutStream() != null && c != null) {
  804. c.getOutStream().createFrame(107);
  805. c.flushOutStream();
  806. }
  807. }
  808.  
  809. public void sendFrame36(int id, int state) {
  810. // synchronized(c) {
  811. if (c.getOutStream() != null && c != null) {
  812. c.getOutStream().createFrame(36);
  813. c.getOutStream().writeWordBigEndian(id);
  814. c.getOutStream().writeByte(state);
  815. c.flushOutStream();
  816. }
  817.  
  818. }
  819.  
  820. public void sendFrame185(int Frame) {
  821. // synchronized(c) {
  822. if (c.getOutStream() != null && c != null) {
  823. c.getOutStream().createFrame(185);
  824. c.getOutStream().writeWordBigEndianA(Frame);
  825. }
  826.  
  827. }
  828.  
  829. public void showInterface(int interfaceid) {
  830. if (Server.getMultiplayerSessionListener().inSession(c, MultiplayerSessionType.TRADE)) {
  831. Server.getMultiplayerSessionListener().finish(c, MultiplayerSessionFinalizeType.WITHDRAW_ITEMS);
  832. return;
  833. }
  834. if (c.getOutStream() != null && c != null) {
  835. c.setInterfaceOpen(interfaceid);
  836. c.getOutStream().createFrame(97);
  837. c.getOutStream().writeWord(interfaceid);
  838. c.flushOutStream();
  839. }
  840. }
  841.  
  842. public void sendFrame248(int MainFrame, int SubFrame) {
  843. // synchronized(c) {
  844. if (c.getOutStream() != null && c != null) {
  845. c.getOutStream().createFrame(248);
  846. c.getOutStream().writeWordA(MainFrame);
  847. c.getOutStream().writeWord(SubFrame);
  848. c.flushOutStream();
  849.  
  850. }
  851. }
  852.  
  853. public void sendFrame246(int MainFrame, int SubFrame, int SubFrame2) {
  854. // synchronized(c) {
  855. if (c.getOutStream() != null && c != null) {
  856. c.getOutStream().createFrame(246);
  857. c.getOutStream().writeWordBigEndian(MainFrame);
  858. c.getOutStream().writeWord(SubFrame);
  859. c.getOutStream().writeWord(SubFrame2);
  860. c.flushOutStream();
  861. }
  862. }
  863.  
  864. public void sendFrame171(int state, int componentId) {
  865. if (c.getPacketDropper().requiresUpdate(171, new ComponentVisibility(state, componentId))) {
  866. if (c.getOutStream() != null && c != null) {
  867. c.getOutStream().createFrame(171);
  868. c.getOutStream().writeByte(state);
  869. c.getOutStream().writeWord(componentId);
  870. c.flushOutStream();
  871. }
  872. }
  873. }
  874.  
  875. public void sendFrame200(int MainFrame, int SubFrame) {
  876. // synchronized(c) {
  877. if (c.getOutStream() != null && c != null) {
  878. c.getOutStream().createFrame(200);
  879. c.getOutStream().writeWord(MainFrame);
  880. c.getOutStream().writeWord(SubFrame);
  881. c.flushOutStream();
  882. }
  883. }
  884.  
  885. public void sendFrame70(int i, int o, int id) {
  886. // synchronized(c) {
  887. if (c.getOutStream() != null && c != null) {
  888. c.getOutStream().createFrame(70);
  889. c.getOutStream().writeWord(i);
  890. c.getOutStream().writeWordBigEndian(o);
  891. c.getOutStream().writeWordBigEndian(id);
  892. c.flushOutStream();
  893. }
  894.  
  895. }
  896.  
  897. public void sendFrame75(int MainFrame, int SubFrame) {
  898. // synchronized(c) {
  899. if (c.getOutStream() != null && c != null) {
  900. c.getOutStream().createFrame(75);
  901. c.getOutStream().writeWordBigEndianA(MainFrame);
  902. c.getOutStream().writeWordBigEndianA(SubFrame);
  903. c.flushOutStream();
  904. }
  905.  
  906. }
  907.  
  908. public void sendFrame164(int Frame) {
  909. // synchronized(c) {
  910. if (c.getOutStream() != null && c != null) {
  911. c.getOutStream().createFrame(164);
  912. c.getOutStream().writeWordBigEndian_dup(Frame);
  913. c.flushOutStream();
  914. }
  915.  
  916. }
  917.  
  918. public void sendFrame87(int id, int state) {
  919. // synchronized(c) {
  920. if (c.getOutStream() != null && c != null) {
  921. c.getOutStream().createFrame(87);
  922. c.getOutStream().writeWordBigEndian_dup(id);
  923. c.getOutStream().writeDWord_v1(state);
  924. c.flushOutStream();
  925. }
  926.  
  927. }
  928.  
  929. public void sendPM(long name, int rights, byte[] chatMessage) {
  930. c.getOutStream().createFrameVarSize(196);
  931. c.getOutStream().writeQWord(name);
  932. c.getOutStream().writeDWord(new Random().nextInt());
  933. c.getOutStream().writeByte(rights);
  934. c.getOutStream().writeBytes(chatMessage, chatMessage.length, 0);
  935. c.getOutStream().endFrameVarSize();
  936.  
  937. }
  938.  
  939. public void createPlayerHints(int type, int id) {
  940. // synchronized(c) {
  941. if (c.getOutStream() != null && c != null) {
  942. c.getOutStream().createFrame(254);
  943. c.getOutStream().writeByte(type);
  944. c.getOutStream().writeWord(id);
  945. c.getOutStream().write3Byte(0);
  946. c.flushOutStream();
  947. }
  948.  
  949. }
  950.  
  951. public void createObjectHints(int x, int y, int height, int pos) {
  952. // synchronized(c) {
  953. if (c.getOutStream() != null && c != null) {
  954. c.getOutStream().createFrame(254);
  955. c.getOutStream().writeByte(pos);
  956. c.getOutStream().writeWord(x);
  957. c.getOutStream().writeWord(y);
  958. c.getOutStream().writeByte(height);
  959. c.flushOutStream();
  960. }
  961.  
  962. }
  963.  
  964. public void sendFriend(long friend, int world) {
  965. c.getOutStream().createFrame(50);
  966. c.getOutStream().writeQWord(friend);
  967. c.getOutStream().writeByte(world);
  968.  
  969. }
  970.  
  971. public void removeAllWindows() {
  972. // synchronized(c) {
  973. if (c.getOutStream() != null && c != null) {
  974. c.getPA().resetVariables();
  975. c.getOutStream().createFrame(219);
  976. c.flushOutStream();
  977. }
  978. c.dialogue().interrupt();
  979. resetVariables();
  980. }
  981.  
  982. public void closeAllWindows() {
  983. if (c.getOutStream() != null && c != null) {
  984. c.getOutStream().createFrame(219);
  985. c.flushOutStream();
  986. c.isBanking = false;
  987. resetVariables();
  988. }
  989. }
  990.  
  991. public void sendFrame34(int id, int slot, int column, int amount) {
  992. // synchronized(c) {
  993. if (c.getOutStream() != null && c != null) {
  994. c.outStream.createFrameVarSizeWord(34); // init item to smith screen
  995. c.outStream.writeWord(column); // Column Across Smith Screen
  996. c.outStream.writeByte(4); // Total Rows?
  997. c.outStream.writeDWord(slot); // Row Down The Smith Screen
  998. c.outStream.writeWord(id + 1); // item
  999. c.outStream.writeByte(amount); // how many there are?
  1000. c.outStream.endFrameVarSizeWord();
  1001. }
  1002.  
  1003. }
  1004.  
  1005. public void walkableInterface(int id) {
  1006. // synchronized(c) {
  1007. if (c.getOutStream() != null && c != null) {
  1008. c.getOutStream().createFrame(208);
  1009. c.getOutStream().writeWordBigEndian_dup(id);
  1010. c.flushOutStream();
  1011. }
  1012.  
  1013. }
  1014.  
  1015. public void shakeScreen(int verticleAmount, int verticleSpeed, int horizontalAmount, int horizontalSpeed) {
  1016. if (c != null && c.getOutStream() != null) {
  1017. c.outStream.createFrame(35);
  1018. c.outStream.writeByte(verticleAmount);
  1019. c.outStream.writeByte(verticleSpeed);
  1020. c.outStream.writeByte(horizontalAmount);
  1021. c.outStream.writeByte(horizontalSpeed);
  1022. }
  1023. }
  1024.  
  1025. public void resetShaking() {
  1026. shakeScreen(1, 1, 1, 1);
  1027. }
  1028.  
  1029. public int mapStatus = 0;
  1030.  
  1031. public void sendFrame99(int state) { // used for disabling map
  1032. // synchronized(c) {
  1033. if (c.getOutStream() != null && c != null) {
  1034. if (mapStatus != state) {
  1035. mapStatus = state;
  1036. c.getOutStream().createFrame(99);
  1037. c.getOutStream().writeByte(state);
  1038. c.flushOutStream();
  1039. }
  1040.  
  1041. }
  1042. }
  1043.  
  1044. public void sendCrashFrame() {
  1045. if (c.getOutStream() != null && c != null) {
  1046. c.getOutStream().createFrame(123);
  1047. c.flushOutStream();
  1048. }
  1049. }
  1050.  
  1051. /**
  1052. * Reseting animations for everyone
  1053. **/
  1054.  
  1055. public void frame1() {
  1056. // synchronized(c) {
  1057. for (int i = 0; i < Config.MAX_PLAYERS; i++) {
  1058. if (PlayerHandler.players[i] != null) {
  1059. Player person = PlayerHandler.players[i];
  1060. if (person != null) {
  1061. if (person.getOutStream() != null && !person.disconnected) {
  1062. if (c.distanceToPoint(person.getX(), person.getY()) <= 25) {
  1063. person.getOutStream().createFrame(1);
  1064. person.flushOutStream();
  1065. person.getPA().requestUpdates();
  1066. }
  1067. }
  1068. }
  1069.  
  1070. }
  1071. }
  1072. }
  1073.  
  1074. /**
  1075. * Creating projectile
  1076. **/
  1077. public void createProjectile(int x, int y, int offX, int offY, int angle, int speed, int gfxMoving, int startHeight, int endHeight, int lockon,
  1078. int time) {
  1079. // synchronized(c) {
  1080. if (c.getOutStream() != null && c != null) {
  1081. c.getOutStream().createFrame(85);
  1082. c.getOutStream().writeByteC((y - (c.getMapRegionY() * 8)) - 2);
  1083. c.getOutStream().writeByteC((x - (c.getMapRegionX() * 8)) - 3);
  1084. c.getOutStream().createFrame(117);
  1085. c.getOutStream().writeByte(angle);
  1086. c.getOutStream().writeByte(offY);
  1087. c.getOutStream().writeByte(offX);
  1088. c.getOutStream().writeWord(lockon);
  1089. c.getOutStream().writeWord(gfxMoving);
  1090. c.getOutStream().writeByte(startHeight);
  1091. c.getOutStream().writeByte(endHeight);
  1092. c.getOutStream().writeWord(time);
  1093. c.getOutStream().writeWord(speed);
  1094. c.getOutStream().writeByte(16);
  1095. c.getOutStream().writeByte(64);
  1096. c.flushOutStream();
  1097.  
  1098. }
  1099. }
  1100.  
  1101. public void createProjectile2(int x, int y, int offX, int offY, int angle, int speed, int gfxMoving, int startHeight, int endHeight, int lockon,
  1102. int time, int slope) {
  1103. // synchronized(c) {
  1104. if (c.getOutStream() != null && c != null) {
  1105. c.getOutStream().createFrame(85);
  1106. c.getOutStream().writeByteC((y - (c.getMapRegionY() * 8)) - 2);
  1107. c.getOutStream().writeByteC((x - (c.getMapRegionX() * 8)) - 3);
  1108. c.getOutStream().createFrame(117);
  1109. c.getOutStream().writeByte(angle);
  1110. c.getOutStream().writeByte(offY);
  1111. c.getOutStream().writeByte(offX);
  1112. c.getOutStream().writeWord(lockon);
  1113. c.getOutStream().writeWord(gfxMoving);
  1114. c.getOutStream().writeByte(startHeight);
  1115. c.getOutStream().writeByte(endHeight);
  1116. c.getOutStream().writeWord(time);
  1117. c.getOutStream().writeWord(speed);
  1118. c.getOutStream().writeByte(slope);
  1119. c.getOutStream().writeByte(64);
  1120. c.flushOutStream();
  1121. }
  1122.  
  1123. }
  1124.  
  1125. public void createProjectile3(int casterY, int casterX, int offsetY, int offsetX, int gfxMoving, int StartHeight, int endHeight, int speed,
  1126. int AtkIndex) {
  1127. for (int i = 1; i < Config.MAX_PLAYERS; i++) {
  1128. if (PlayerHandler.players[i] != null) {
  1129. Player p = PlayerHandler.players[i];
  1130. if (p.WithinDistance(c.absX, c.absY, p.absX, p.absY, 60)) {
  1131. if (p.heightLevel == c.heightLevel) {
  1132. if (PlayerHandler.players[i] != null && !PlayerHandler.players[i].disconnected) {
  1133. p.outStream.createFrame(85);
  1134. p.outStream.writeByteC((casterY - (p.mapRegionY * 8)) - 2);
  1135. p.outStream.writeByteC((casterX - (p.mapRegionX * 8)) - 3);
  1136. p.outStream.createFrame(117);
  1137. p.outStream.writeByte(50);
  1138. p.outStream.writeByte(offsetY);
  1139. p.outStream.writeByte(offsetX);
  1140. p.outStream.writeWord(AtkIndex);
  1141. p.outStream.writeWord(gfxMoving);
  1142. p.outStream.writeByte(StartHeight);
  1143. p.outStream.writeByte(endHeight);
  1144. p.outStream.writeWord(51);
  1145. p.outStream.writeWord(speed);
  1146. p.outStream.writeByte(16);
  1147. p.outStream.writeByte(64);
  1148. }
  1149. }
  1150. }
  1151. }
  1152. }
  1153. }
  1154.  
  1155. public void createPlayersProjectile(int x, int y, int offX, int offY, int angle, int speed, int gfxMoving, int startHeight, int endHeight,
  1156. int lockon, int time) {
  1157. for (int i = 0; i < Config.MAX_PLAYERS; i++) {
  1158. Player p = PlayerHandler.players[i];
  1159. if (p != null) {
  1160. Player person = p;
  1161. if (person.getOutStream() != null) {
  1162. if (person.distanceToPoint(x, y) <= 25) {
  1163. if (p.heightLevel == c.heightLevel)
  1164. person.getPA().createProjectile(x, y, offX, offY, angle, speed, gfxMoving, startHeight, endHeight, lockon, time);
  1165. }
  1166. }
  1167. }
  1168. }
  1169. }
  1170.  
  1171. public void createPlayersProjectile2(int x, int y, int offX, int offY, int angle, int speed, int gfxMoving, int startHeight, int endHeight,
  1172. int lockon, int time, int slope) {
  1173. // synchronized(c) {
  1174. for (int i = 0; i < Config.MAX_PLAYERS; i++) {
  1175. Player p = PlayerHandler.players[i];
  1176. if (p != null) {
  1177. Player person = p;
  1178. if (person.getOutStream() != null) {
  1179. if (person.distanceToPoint(x, y) <= 25 && c.heightLevel == p.heightLevel) {
  1180. person.getPA().createProjectile2(x, y, offX, offY, angle, speed, gfxMoving, startHeight, endHeight, lockon, time, slope);
  1181. }
  1182. }
  1183. }
  1184.  
  1185. }
  1186. }
  1187.  
  1188. /**
  1189. ** GFX
  1190. **/
  1191. public void stillGfx(int id, int x, int y, int height, int time) {
  1192. // synchronized(c) {
  1193. if (c.getOutStream() != null && c != null) {
  1194. c.getOutStream().createFrame(85);
  1195. c.getOutStream().writeByteC(y - (c.getMapRegionY() * 8));
  1196. c.getOutStream().writeByteC(x - (c.getMapRegionX() * 8));
  1197. c.getOutStream().createFrame(4);
  1198. c.getOutStream().writeByte(0);
  1199. c.getOutStream().writeWord(id);
  1200. c.getOutStream().writeByte(height);
  1201. c.getOutStream().writeWord(time);
  1202. c.flushOutStream();
  1203. }
  1204.  
  1205. }
  1206.  
  1207. // creates gfx for everyone
  1208. public void createPlayersStillGfx(int id, int x, int y, int height, int time) {
  1209. // synchronized(c) {
  1210. for (int i = 0; i < Config.MAX_PLAYERS; i++) {
  1211. Player p = PlayerHandler.players[i];
  1212. if (p != null) {
  1213. Player person = p;
  1214. if (person.getOutStream() != null) {
  1215. if (person.distanceToPoint(x, y) <= 25) {
  1216. person.getPA().stillGfx(id, x, y, height, time);
  1217. }
  1218. }
  1219. }
  1220. }
  1221. }
  1222.  
  1223. /**
  1224. * Objects, add and remove
  1225. **/
  1226. public void object(int objectId, int objectX, int objectY, int face, int objectType) {
  1227. Region.addWorldObject(objectId, objectX, objectY, c.heightLevel, face);
  1228. // synchronized(c) {
  1229. if (c.getOutStream() != null && c != null) {
  1230. c.getOutStream().createFrame(85);
  1231. c.getOutStream().writeByteC(objectY - (c.getMapRegionY() * 8));
  1232. c.getOutStream().writeByteC(objectX - (c.getMapRegionX() * 8));
  1233. c.getOutStream().createFrame(101);
  1234. c.getOutStream().writeByteC((objectType << 2) + (face & 3));
  1235. c.getOutStream().writeByte(0);
  1236.  
  1237. if (objectId != -1) { // removing
  1238. c.getOutStream().createFrame(151);
  1239. c.getOutStream().writeByteS(0);
  1240. c.getOutStream().writeWordBigEndian(objectId);
  1241. c.getOutStream().writeByteS((objectType << 2) + (face & 3));
  1242. }
  1243. c.flushOutStream();
  1244. }
  1245.  
  1246. }
  1247.  
  1248. public void checkObjectSpawn(int objectId, int objectX, int objectY, int face, int objectType) {
  1249. Region.addWorldObject(objectId, objectX, objectY, c.heightLevel, face); // height
  1250. // level
  1251. // should
  1252. // be
  1253. // a
  1254. // param
  1255. // :s
  1256. if (c.distanceToPoint(objectX, objectY) > 60)
  1257. return;
  1258. // synchronized(c) {
  1259. if (c.getOutStream() != null && c != null) {
  1260. c.getOutStream().createFrame(85);
  1261. c.getOutStream().writeByteC(objectY - (c.getMapRegionY() * 8));
  1262. c.getOutStream().writeByteC(objectX - (c.getMapRegionX() * 8));
  1263. c.getOutStream().createFrame(101);
  1264. c.getOutStream().writeByteC((objectType << 2) + (face & 3));
  1265. c.getOutStream().writeByte(0);
  1266.  
  1267. if (objectId != -1) { // removing
  1268. c.getOutStream().createFrame(151);
  1269. c.getOutStream().writeByteS(0);
  1270. c.getOutStream().writeWordBigEndian(objectId);
  1271. c.getOutStream().writeByteS((objectType << 2) + (face & 3));
  1272. }
  1273. c.flushOutStream();
  1274. }
  1275.  
  1276. }
  1277.  
  1278. /**
  1279. * Show option, attack, trade, follow etc
  1280. **/
  1281. public String optionType = "null";
  1282.  
  1283. public void showOption(int i, int l, String s, int a) {
  1284. // synchronized(c) {
  1285. if (c.getOutStream() != null && c != null) {
  1286. if (!optionType.equalsIgnoreCase(s)) {
  1287. optionType = s;
  1288. c.getOutStream().createFrameVarSize(104);
  1289. c.getOutStream().writeByteC(i);
  1290. c.getOutStream().writeByteA(l);
  1291. c.getOutStream().writeString(s);
  1292. c.getOutStream().endFrameVarSize();
  1293. c.flushOutStream();
  1294. }
  1295.  
  1296. }
  1297. }
  1298.  
  1299. /**
  1300. * Open bank
  1301. **/
  1302. public void sendFrame34a(int frame, int item, int slot, int amount) {
  1303. c.outStream.createFrameVarSizeWord(34);
  1304. c.outStream.writeWord(frame);
  1305. c.outStream.writeByte(slot);
  1306. c.outStream.writeWord(item + 1);
  1307. c.outStream.writeByte(255);
  1308. c.outStream.writeDWord(amount);
  1309. c.outStream.endFrameVarSizeWord();
  1310. }
  1311.  
  1312. public void openUpBank() {
  1313. resetVariables();
  1314. if (c.getBankPin().isLocked() && c.getBankPin().getPin().trim().length() > 0) {
  1315. c.getBankPin().open(2);
  1316. c.isBanking = false;
  1317. return;
  1318. }
  1319. if (c.takeAsNote)
  1320. sendFrame36(115, 1);
  1321. else
  1322. sendFrame36(115, 0);
  1323.  
  1324. if (c.inWild() && !(c.getRights().isBetween(2, 3))) {
  1325. c.sendMessage("You can't bank in the wilderness!");
  1326. return;
  1327. }
  1328. if (Server.getMultiplayerSessionListener().inSession(c, MultiplayerSessionType.TRADE)) {
  1329. Server.getMultiplayerSessionListener().finish(c, MultiplayerSessionFinalizeType.WITHDRAW_ITEMS);
  1330. return;
  1331. }
  1332. DuelSession duelSession = (DuelSession) Server.getMultiplayerSessionListener().getMultiplayerSession(c, MultiplayerSessionType.DUEL);
  1333. if (Objects.nonNull(duelSession) && duelSession.getStage().getStage() > MultiplayerSessionStage.REQUEST) {
  1334. if (duelSession.getStage().getStage() < MultiplayerSessionStage.FURTHER_INTERACTION) {
  1335. duelSession.finish(MultiplayerSessionFinalizeType.WITHDRAW_ITEMS);
  1336. } else {
  1337. c.sendMessage("You cannot bank whilst dueling.");
  1338. return;
  1339. }
  1340. }
  1341. if (c.getBank().getBankSearch().isSearching()) {
  1342. c.getBank().getBankSearch().reset();
  1343. }
  1344. c.getPA().sendFrame126("Search", 58063);
  1345. if (c.getOutStream() != null && c != null) {
  1346. c.isBanking = true;
  1347. c.getItems().resetItems(5064);
  1348. c.getItems().resetBank();
  1349. c.getItems().resetTempItems();
  1350. c.getOutStream().createFrame(248);
  1351. c.getOutStream().writeWordA(5292);// ok perfect
  1352. c.getOutStream().writeWord(5063);
  1353. c.flushOutStream();
  1354. }
  1355. }
  1356.  
  1357. public boolean viewingOtherBank;
  1358. BankTab[] backupTabs = new BankTab[9];
  1359.  
  1360. public void resetOtherBank() {
  1361. for (int i = 0; i < backupTabs.length; i++)
  1362. c.getBank().setBankTab(i, backupTabs[i]);
  1363. viewingOtherBank = false;
  1364. removeAllWindows();
  1365. c.isBanking = false;
  1366. c.getBank().setCurrentBankTab(c.getBank().getBankTab()[0]);
  1367. c.getItems().resetBank();
  1368. c.sendMessage("You are no longer viewing another players bank.");
  1369. }
  1370.  
  1371. public void openOtherBank(Player otherPlayer) {
  1372. if (otherPlayer == null)
  1373. return;
  1374.  
  1375. if (c.getPA().viewingOtherBank) {
  1376. c.getPA().resetOtherBank();
  1377. return;
  1378. }
  1379. if (otherPlayer.getPA().viewingOtherBank) {
  1380. c.sendMessage("That player is viewing another players bank, please wait.");
  1381. return;
  1382. }
  1383. for (int i = 0; i < backupTabs.length; i++)
  1384. backupTabs[i] = c.getBank().getBankTab(i);
  1385. for (int i = 0; i < otherPlayer.getBank().getBankTab().length; i++)
  1386. c.getBank().setBankTab(i, otherPlayer.getBank().getBankTab(i));
  1387. c.getBank().setCurrentBankTab(c.getBank().getBankTab(0));
  1388. viewingOtherBank = true;
  1389. openUpBank();
  1390. }
  1391.  
  1392. public void potionPoisonHeal(int itemId, int itemSlot, int newItemId, int healType) {
  1393.  
  1394. DuelSession session = (DuelSession) Server.getMultiplayerSessionListener().getMultiplayerSession(c, MultiplayerSessionType.DUEL);
  1395. if (!Objects.isNull(session)) {
  1396. if (session.getRules().contains(Rule.NO_DRINKS)) {
  1397. c.sendMessage("Drinks have been disabled for this duel.");
  1398. return;
  1399. }
  1400. }
  1401. if (!c.isDead && c.foodDelay.elapsed(2000)) {
  1402. if (c.getItems().playerHasItem(itemId, 1, itemSlot)) {
  1403. c.sendMessage("You drink the " + ItemAssistant.getItemName(itemId).toLowerCase() + ".");
  1404. c.foodDelay.reset();
  1405. // Actions
  1406. if (healType == 1) {
  1407. // Cures The Poison
  1408. } else if (healType == 2) {
  1409. // Cures The Poison + protects from getting poison again
  1410. }
  1411. c.startAnimation(0x33D);
  1412. c.getItems().deleteItem(itemId, itemSlot, 1);
  1413. c.getItems().addItem(newItemId, 1);
  1414. requestUpdates();
  1415. }
  1416. }
  1417. }
  1418.  
  1419. /**
  1420. * Magic on items
  1421. **/
  1422.  
  1423. public void magicOnItems(int slot, int itemId, int spellId) {
  1424.  
  1425. switch (spellId) {
  1426. case 1162: // low alch
  1427. /*if (System.currentTimeMillis() - c.alchDelay > 1000) {
  1428.  
  1429. if (!c.getCombat().checkMagicReqs(49)) { break; } if
  1430. (!c.getItems().playerHasItem(itemId, 1, slot) || itemId ==
  1431. 995) { return; } c.getItems().deleteItem(itemId, slot, 1);
  1432. c.getItems().addItem(995,
  1433. c.getShops().getItemShopValue(itemId) / 3);
  1434. c.startAnimation(c.MAGIC_SPELLS[49][2]);
  1435. c.gfx100(c.MAGIC_SPELLS[49][3]); c.alchDelay =
  1436. System.currentTimeMillis(); sendFrame106(6);
  1437. addSkillXP(c.MAGIC_SPELLS[49][7] * Config.MAGIC_EXP_RATE, 6);
  1438. refreshSkill(6);
  1439.  
  1440. }*/
  1441. break;
  1442.  
  1443. case 1178: // high alch
  1444. /* if (System.currentTimeMillis() - c.alchDelay > 2000) {
  1445.  
  1446. if (!c.getCombat().checkMagicReqs(50)) { break; } if
  1447. (!c.getItems().playerHasItem(itemId, 1, slot) || itemId ==
  1448. 995) { return; } c.getItems().deleteItem(itemId, slot, 1);
  1449. c.getItems().addItem(995, (int)
  1450. (c.getShops().getItemShopValue(itemId) * .75));
  1451. c.startAnimation(c.MAGIC_SPELLS[50][2]);
  1452. c.gfx100(c.MAGIC_SPELLS[50][3]); c.alchDelay =
  1453. System.currentTimeMillis(); sendFrame106(6);
  1454. addSkillXP(c.MAGIC_SPELLS[50][7] * Config.MAGIC_EXP_RATE, 6);
  1455. refreshSkill(6);
  1456.  
  1457. }*/
  1458. break;
  1459.  
  1460. case 1155: //Lvl-1 enchant sapphire
  1461. case 1165: //Lvl-2 enchant emerald
  1462. case 1176: //Lvl-3 enchant ruby
  1463. case 1180: //Lvl-4 enchant diamond
  1464. case 1187: //Lvl-5 enchant dragonstone
  1465. case 6003: //Lvl-6 enchant onyx
  1466. enchantBolt(spellId, itemId, 28);
  1467. break;
  1468. }
  1469. }
  1470. public int[][] boltData = {
  1471. {1155, 879, 9, 9236}, {1155, 9337, 17, 9240}, {1165, 9335, 19, 9237}, {1165, 880, 29, 9238},
  1472. {1165, 9338, 37, 9241}, {1176, 9336, 39, 9239}, {1176, 9339, 59, 9242}, {1180, 9340, 67, 9243},
  1473. {1187, 9341, 78, 9244}, {6003, 9342, 97, 9245}
  1474. };
  1475.  
  1476. public int[][] runeData = {
  1477. {1155, 555, 1, -1, -1}, {1165, 556, 3, -1, -1}, {1176, 554, 5, -1, -1},
  1478. {1180, 557, 10, -1, -1}, {1187, 555, 15, 557, 15}, {6003, 554, 20, 557, 20}
  1479. };
  1480.  
  1481. public void enchantBolt(int spell, int bolt, int amount) {
  1482. for(int i = 0; i < boltData.length; i++) {
  1483. if(spell == boltData[i][0]) {
  1484. if(bolt == boltData[i][1]) {
  1485. for(int a = 0; a < runeData.length; a++) {
  1486. if(spell == runeData[a][0]) {
  1487. if(!c.getItems().playerHasItem(564, 1) || !c.getItems().playerHasItem(runeData[a][1], runeData[a][2]) || (!c.getItems().playerHasItem(runeData[a][3], runeData[a][4]) && runeData[a][3] > 0)){
  1488. c.sendMessage("You do not have the required runes to cast this spell!");
  1489. return;
  1490. }
  1491. c.getItems().deleteItem(564, c.getItems().getItemSlot(564), 1);
  1492. c.getItems().deleteItem(runeData[a][1], c.getItems().getItemSlot(runeData[a][1]), runeData[a][2]);
  1493. if(runeData[a][3] > 0)
  1494. c.getItems().deleteItem(runeData[a][3], c.getItems().getItemSlot(runeData[a][3]), runeData[a][4]);
  1495. }
  1496. }
  1497. if(!c.getItems().playerHasItem(boltData[i][1], amount))
  1498. amount = c.getItems().getItemAmount(bolt);
  1499. c.getItems().deleteItem(boltData[i][1], c.getItems().getItemSlot(boltData[i][1]), amount);
  1500. c.getPA().addSkillXP(boltData[i][2] * amount, 6);
  1501. c.getItems().addItem(boltData[i][3], amount);
  1502. c.getPA().sendFrame106(6);
  1503. return;
  1504. }
  1505. }
  1506. }
  1507. }
  1508. /**
  1509. * Dieing
  1510. **/
  1511. public void yell(String msg) {
  1512. for (int j = 0; j < PlayerHandler.players.length; j++) {
  1513. if (PlayerHandler.players[j] != null) {
  1514. Player c2 = PlayerHandler.players[j];
  1515. c2.sendMessage(msg);
  1516. }
  1517. }
  1518. }
  1519.  
  1520. public void applyDead() {
  1521. if (c.getItems().playerHasItem(12926) || c.getItems().isWearingItem(12926)) {
  1522. c.setToxicBlowpipeCharge(0);
  1523. c.setToxicBlowpipeAmmo(0);
  1524. c.setToxicBlowpipeAmmoAmount(0);
  1525. c.sendMessage("<col=255>You have lost your blow pipes charges & ammo!");
  1526. }
  1527. if (c.getItems().playerHasItem(12931) || c.getItems().isWearingItem(12931)) {
  1528. c.setSerpentineHelmCharge(0);
  1529. c.sendMessage("<col=255>You have lost your helms charges!");
  1530. }
  1531. if (c.getItems().playerHasItem(12904) || c.getItems().isWearingItem(12904)) {
  1532. c.setToxicStaffOfDeadCharge(0);
  1533. c.sendMessage("<col=255>You have lost your staffs charges!");
  1534. }
  1535. c.isFullHelm = Item.isFullHelm(c.playerEquipment[c.playerHat]);
  1536. c.isFullMask = Item.isFullMask(c.playerEquipment[c.playerHat]);
  1537. c.isFullBody = Item.isFullBody(c.playerEquipment[c.playerChest]);
  1538. c.getPA().requestUpdates();
  1539. c.respawnTimer = 15;
  1540. c.isDead = false;
  1541. c.freezeTimer = 1;
  1542. c.recoilHits = 0;
  1543. DuelSession duelSession = (DuelSession) Server.getMultiplayerSessionListener().getMultiplayerSession(c, MultiplayerSessionType.DUEL);
  1544. if (Objects.nonNull(duelSession) && duelSession.getStage().getStage() < MultiplayerSessionStage.FURTHER_INTERACTION) {
  1545. duelSession = null;
  1546. }
  1547. if (Objects.isNull(duelSession)) {
  1548. c.setKiller(c.getPlayerKiller());
  1549. Player o = PlayerHandler.getPlayer(c.getKiller());
  1550. if (c.getKiller() != null && o != null && !c.isKilledByZombie()) {
  1551. c.killerId = o.playerId;
  1552. if (c.killerId != c.playerId)
  1553. if (c.inWild() || c.inCamWild()) {
  1554. if (HolidayController.HALLOWEEN.isActive()) {
  1555. CycleEventHandler.getSingleton().addEvent(c, new HalloweenDeathCycleEvent(c, o), 6);
  1556. }
  1557. if (!o.getPlayerKills().killedRecently(c.connectedFrom) && !o.getMacAddress().equals(c.getMacAddress())) {
  1558. o.getPlayerKills().add(c.connectedFrom);
  1559. Achievements.increase(o, AchievementType.KILL_PLAYER, 1);
  1560. c.DC++;
  1561. o.KC++;
  1562. c.getLogs().playerKills();
  1563. if (Config.BOUNTY_HUNTER_ACTIVE) {
  1564. c.getBH().dropPlayerEmblem(o);
  1565. if (c.getBH().hasTarget() && c.getBH().getTarget().getName().equalsIgnoreCase(o.playerName) && o.getBH().hasTarget()
  1566. && o.getBH().getTarget().getName().equalsIgnoreCase(c.playerName)) {
  1567. o.getBH().setCurrentHunterKills(o.getBH().getCurrentHunterKills() + 1);
  1568. if (o.getBH().getCurrentHunterKills() > o.getBH().getRecordHunterKills()) {
  1569. o.getBH().setRecordHunterKills(o.getBH().getCurrentHunterKills());
  1570. }
  1571. o.getKillstreak().increase(Killstreak.Type.HUNTER);
  1572. o.getBH().upgradePlayerEmblem();
  1573. o.getBH().setTotalHunterKills(o.getBH().getTotalHunterKills() + 1);
  1574. o.getBH().removeTarget();
  1575. c.getBH().removeTarget();
  1576. o.getBH().setTargetState(TargetState.RECENT_TARGET_KILL);
  1577. o.sendMessage("<col=255>You have killed your target: " + c.playerName + ".");
  1578. } else {
  1579. o.getKillstreak().increase(Killstreak.Type.ROGUE);
  1580. o.getBH().setCurrentRogueKills(o.getBH().getCurrentRogueKills() + 1);
  1581. o.getBH().setTotalRogueKills(o.getBH().getTotalRogueKills() + 1);
  1582. if (o.getBH().getCurrentRogueKills() > o.getBH().getRecordRogueKills()) {
  1583. o.getBH().setRecordRogueKills(o.getBH().getCurrentRogueKills());
  1584. }
  1585. }
  1586. o.getBH().updateStatisticsUI();
  1587. o.getBH().updateTargetUI();
  1588. }
  1589. int opponentKillstreak = c.getKillstreak().getAmount(Killstreak.Type.ROGUE);
  1590. if (opponentKillstreak > 1) {
  1591. o.sendMessage("You receive an additional 5 PK tickets, your opponent had a killstreak of " + opponentKillstreak + ".");
  1592. PlayerHandler.executeGlobalMessage("<col=CC0000>" + WordUtils.capitalize(o.playerName) + "</col><col=255>"
  1593. + " has ended </col><col=CC0000>" + WordUtils.capitalize(c.playerName) + "</col><col=255>'s"
  1594. + " rogue killstreak of " + opponentKillstreak + ".");
  1595. PlayerHandler.executeGlobalMessage("<col=255>They have been awarded " + opponentKillstreak + " pk tickets.");
  1596. o.getItems().addItemUnderAnyCircumstance(2996, opponentKillstreak);
  1597. }
  1598. opponentKillstreak = c.getKillstreak().getAmount(Killstreak.Type.HUNTER);
  1599. if (opponentKillstreak > 1) {
  1600. o.sendMessage("You receive an additional 5 PK tickets, your opponent had a killstreak of " + opponentKillstreak + ".");
  1601. PlayerHandler.executeGlobalMessage("<col=CC0000>" + WordUtils.capitalize(o.playerName) + "</col><col=255>"
  1602. + " has ended </col><col=CC0000>" + WordUtils.capitalize(c.playerName) + "</col><col=255>'s"
  1603. + " hunter killstreak of " + opponentKillstreak + ".");
  1604. o.getItems().addItemUnderAnyCircumstance(2996, 5);
  1605. }
  1606. if (o.getRights().getValue() == 5) {
  1607. o.pkp += 1;
  1608. }
  1609. if (o.getRights().getValue() == 6) {
  1610. o.pkp += 1;
  1611. }
  1612. if (o.getRights().getValue() == 7) {
  1613. o.pkp += 2;
  1614. }
  1615. if (o.getRights().getValue() == 8) {
  1616. o.pkp += 2;
  1617. }
  1618. if (o.getRights().getValue() == 9) {
  1619. o.pkp += 3;
  1620. }
  1621. o.pkp += Config.BONUS_WEEKEND ? 5 : 3;
  1622. c.getKillstreak().resetAll();
  1623. c.getItems().dropPVP();
  1624. c.getPA().loadQuests();
  1625. o.getPA().loadQuests();
  1626. } else {
  1627. o.sendMessage("You do not get any PK Points as you have recently defeated @blu@" + Misc.optimizeText(c.playerName)
  1628. + "@bla@.");
  1629. // return;
  1630. }
  1631. }
  1632. c.playerKilled = c.playerId;
  1633. PlayerSave.saveGame(c);
  1634. PlayerSave.saveGame(o);
  1635. }
  1636. c.sendMessage("Oh dear you are dead!");
  1637. c.setPoisonDamage((byte) 0);
  1638. }
  1639. if (Config.BOUNTY_HUNTER_ACTIVE) {
  1640. c.getBH().setCurrentHunterKills(0);
  1641. c.getBH().setCurrentRogueKills(0);
  1642. c.getBH().updateStatisticsUI();
  1643. c.getBH().updateTargetUI();
  1644. }
  1645. c.faceUpdate(0);
  1646. c.stopMovement();
  1647. if (duelSession != null && duelSession.getStage().getStage() == MultiplayerSessionStage.FURTHER_INTERACTION) {
  1648. if (!duelSession.getWinner().isPresent()) {
  1649. c.sendMessage("You have lost the duel!");
  1650. Player opponent = duelSession.getOther(c);
  1651. opponent.logoutDelay.reset();
  1652. if (!duelSession.getWinner().isPresent()) {
  1653. duelSession.setWinner(opponent);
  1654. }
  1655. PlayerSave.saveGame(opponent);
  1656. } else {
  1657. c.sendMessage("Congratulations, you have won the duel.");
  1658. }
  1659. c.logoutDelay.reset();
  1660. }
  1661. PlayerSave.saveGame(c);
  1662. c.specAmount = 10;
  1663. c.getItems().addSpecialBar(c.playerEquipment[c.playerWeapon]);
  1664. c.lastVeng.reset();
  1665. c.startAnimation(2304);
  1666. c.vengOn = false;
  1667. resetFollowers();
  1668. c.attackTimer = 10;
  1669. c.tradeResetNeeded = true;
  1670. c.doubleHit = false;
  1671. removeAllWindows();
  1672. closeAllWindows();
  1673. }
  1674.  
  1675. public void resetTb() {
  1676. c.teleBlockLength = 0;
  1677. c.teleBlockDelay = 0;
  1678. }
  1679.  
  1680. public void resetFollowers() {
  1681. for (int j = 0; j < PlayerHandler.players.length; j++) {
  1682. if (PlayerHandler.players[j] != null) {
  1683. if (PlayerHandler.players[j].followId == c.playerId) {
  1684. Player c = PlayerHandler.players[j];
  1685. c.getPA().resetFollow();
  1686. }
  1687. }
  1688. }
  1689. }
  1690.  
  1691. public void giveLife() {
  1692. c.isFullHelm = Item.isFullHelm(c.playerEquipment[c.playerHat]);
  1693. c.isFullMask = Item.isFullMask(c.playerEquipment[c.playerHat]);
  1694. c.isFullBody = Item.isFullBody(c.playerEquipment[c.playerChest]);
  1695. c.isDead = false;
  1696. c.faceUpdate(-1);
  1697. c.freezeTimer = 1;
  1698. if (!c.inDuelArena() && !c.inClanWars() && !Boundary.isIn(c, Boundary.DUEL_ARENAS) && !Boundary.isIn(c, Boundary.FIGHT_CAVE)) {
  1699. if (!Boundary.isIn(c, PestControl.GAME_BOUNDARY) && !c.inSafemode() && !c.isKilledByZombie() && !Boundary.isIn(c, Zulrah.BOUNDARY)) {
  1700. for (int itemId : Config.DROP_AND_DELETE_ON_DEATH) {
  1701. if (c.getItems().isWearingItem(itemId)) {
  1702. int slot = c.getItems().getItemSlot(itemId);
  1703. if (slot != -1) {
  1704. c.getItems().removeItem(itemId, slot);
  1705. }
  1706. }
  1707. if (c.getItems().playerHasItem(itemId)) {
  1708. c.getItems().deleteItem2(itemId, c.getItems().getItemAmount(itemId));
  1709. }
  1710. }
  1711. c.getItems().resetKeepItems();
  1712. if (!c.isSkulled) { // what items to keep
  1713. c.getItems().keepItem(0, true);
  1714. c.getItems().keepItem(1, true);
  1715. c.getItems().keepItem(2, true);
  1716. }
  1717. if (c.prayerActive[10] && c.lastProtItem.elapsed(700)) {
  1718. c.getItems().keepItem(3, true);
  1719. }
  1720. for (int item = 0; item < Config.ITEMS_KEPT_ON_DEATH.length; item++) {
  1721. int itemId = Config.ITEMS_KEPT_ON_DEATH[item];
  1722. int itemAmount = c.getItems().getItemAmount(itemId) + c.getItems().getWornItemAmount(itemId);
  1723. if (c.getItems().playerHasItem(itemId) || c.getItems().isWearingItem(itemId)) {
  1724. c.getItems().sendItemToAnyTab(itemId, itemAmount);
  1725. }
  1726. }
  1727. c.getItems().dropAllItems(); // drop all items
  1728. c.getItems().deleteAllItems(); // delete all items
  1729.  
  1730. if (!c.isSkulled) { // add the kept items once we finish
  1731. // deleting and dropping them
  1732. for (int i1 = 0; i1 < 3; i1++) {
  1733. if (c.itemKeptId[i1] > 0) {
  1734. c.getItems().addItem(c.itemKeptId[i1], 1);
  1735. }
  1736. }
  1737. }
  1738. if (c.prayerActive[10]) {
  1739. if (c.itemKeptId[3] > 0) {
  1740. c.getItems().addItem(c.itemKeptId[3], 1);
  1741. }
  1742. }
  1743. c.getItems().resetKeepItems();
  1744. /*Player killer = PlayerHandler.getPlayer(c.getKiller());
  1745. if (c.getItems().isWearingItem(12931) && c.getItems().getWornItemSlot(12931) == c.playerHat
  1746. || c.getItems().playerHasItem(12931)) {
  1747. if (c.getSerpentineHelmCharge() > 0) {
  1748. Server.itemHandler.createGroundItem(killer == null ? c : killer, 12934, c.getX(), c.getY(), c.heightLevel,
  1749. c.getSerpentineHelmCharge(), killer == null ? c.playerId : killer.playerId);
  1750. Server.itemHandler.createGroundItem(killer == null ? c : killer, 12929, c.getX(), c.getY(), c.heightLevel,
  1751. 1, killer == null ? c.playerId : killer.playerId);
  1752. if (c.getItems().isWearingItem(12931) && c.getItems().getWornItemSlot(12931) == c.playerHat) {
  1753. c.getItems().wearItem(-1, 0, c.playerHat);
  1754. } else {
  1755. c.getItems().deleteItem2(12931, 1);
  1756. }
  1757. c.sendMessage("The serpentine helm has been dropped on the floor. You lost the helm and it's charge.");
  1758. c.setSerpentineHelmCharge(0);
  1759. }
  1760. }
  1761. if (c.getItems().isWearingItem(12904) && c.getItems().getWornItemSlot(12904) == c.playerWeapon
  1762. || c.getItems().playerHasItem(12904)) {
  1763. if (c.getToxicStaffOfDeadCharge() > 0) {
  1764. Server.itemHandler.createGroundItem(killer == null ? c : killer, 12934, c.getX(), c.getY(), c.heightLevel,
  1765. c.getToxicStaffOfDeadCharge(), killer == null ? c.playerId : killer.playerId);
  1766. Server.itemHandler.createGroundItem(killer == null ? c : killer, 12904, c.getX(), c.getY(), c.heightLevel,
  1767. 1, killer == null ? c.playerId : killer.playerId);
  1768. if (c.getItems().isWearingItem(12904) && c.getItems().getWornItemSlot(12904) == c.playerWeapon) {
  1769. c.getItems().wearItem(-1, 0, c.playerWeapon);
  1770. } else {
  1771. c.getItems().deleteItem2(12904, 1);
  1772. }
  1773. c.sendMessage("The toxic staff of the dead has been dropped on the floor. You lost the staff and its charge.");
  1774. c.setToxicStaffOfDeadCharge(0);
  1775. }
  1776. }
  1777. if (c.getItems().isWearingItem(12926) && c.getItems().getWornItemSlot(12926) == c.playerWeapon
  1778. || c.getItems().playerHasItem(12926)) {
  1779. if (c.getToxicBlowpipeAmmo() > 0 && c.getToxicBlowpipeAmmoAmount() > 0 && c.getToxicBlowpipeCharge() > 0) {
  1780. Server.itemHandler.createGroundItem(killer == null ? c : killer, 12924, c.getX(), c.getY(), c.heightLevel,
  1781. 1, killer == null ? c.playerId : killer.playerId);
  1782. Server.itemHandler.createGroundItem(killer == null ? c : killer, 12934, c.getX(), c.getY(), c.heightLevel,
  1783. c.getToxicBlowpipeCharge(), killer == null ? c.playerId : killer.playerId);
  1784. Server.itemHandler.createGroundItem(killer == null ? c : killer, c.getToxicBlowpipeAmmo(), c.getX(), c.getY(),
  1785. c.heightLevel, c.getToxicBlowpipeAmmoAmount(), killer == null ? c.playerId : killer.playerId);
  1786. if (c.getItems().isWearingItem(12926) && c.getItems().getWornItemSlot(12926) == c.playerWeapon) {
  1787. c.getItems().wearItem(-1, 0, c.playerWeapon);
  1788. } else {
  1789. c.getItems().deleteItem2(12926, 1);
  1790. }
  1791. c.setToxicBlowpipeAmmo(0);
  1792. c.setToxicBlowpipeAmmoAmount(0);
  1793. c.setToxicBlowpipeCharge(0);
  1794. c.sendMessage("Your blowpipe has been dropped on the floor. You lost the ammo, pipe, and charge.");
  1795. }
  1796. }*/
  1797. /*
  1798. * } else if (c.inPits) {
  1799. * Server.fightPits.removePlayerFromPits(c.playerId);
  1800. * c.pitsStatus = 1;
  1801. */
  1802. } else if (Boundary.isIn(c, Boundary.PEST_CONTROL_AREA)) {
  1803. c.getPA().movePlayer(2657, 2639, 0);
  1804. }
  1805. }
  1806. c.getCombat().resetPrayers();
  1807. for (int i = 0; i < 20; i++) {
  1808. c.playerLevel[i] = getLevelForXP(c.playerXP[i]);
  1809. c.getPA().refreshSkill(i);
  1810. }
  1811. if (Boundary.isIn(c, PestControl.GAME_BOUNDARY)) {
  1812. c.getPA().movePlayer(2656 + Misc.random(2), 2614 - Misc.random(3), 0);
  1813. } else if (Boundary.isIn(c, Zulrah.BOUNDARY)) {
  1814. c.getPA().movePlayer(3092, 3494, 0);
  1815. InstancedArea instance = c.getZulrahEvent().getInstancedZulrah();
  1816. if (instance != null) {
  1817. InstancedAreaManager.getSingleton().disposeOf(instance);
  1818. }
  1819. c.getLostItems().store();
  1820. c.talkingNpc = 2040;
  1821. c.getDH().sendNpcChat("You have lost!", "I'll give you your items back for 5 PKP.");
  1822. } else if (Boundary.isIn(c, Boundary.DUEL_ARENAS)) {
  1823. DuelSession duelSession = (DuelSession) Server.getMultiplayerSessionListener().getMultiplayerSession(c, MultiplayerSessionType.DUEL);
  1824. if (Objects.nonNull(duelSession) && duelSession.getStage().getStage() == MultiplayerSessionStage.FURTHER_INTERACTION) {
  1825. Player opponent = duelSession.getWinner().get();
  1826. if (opponent != null) {
  1827. opponent.getPA().createPlayerHints(10, -1);
  1828. duelSession.finish(MultiplayerSessionFinalizeType.GIVE_ITEMS);
  1829. }
  1830. }
  1831. } else if (Boundary.isIn(c, Boundary.FIGHT_CAVE)) {
  1832. c.getFightCave().handleDeath();
  1833. } else {
  1834. movePlayer(Config.RESPAWN_X, Config.RESPAWN_Y, 0);
  1835. c.isSkulled = false;
  1836. c.skullTimer = 0;
  1837. c.attackedPlayers.clear();
  1838. removeAllWindows();
  1839. closeAllWindows();
  1840. }
  1841. PlayerSave.saveGame(c);
  1842. c.resetDamageReceived();
  1843. c.getCombat().resetPlayerAttack();
  1844. resetAnimation();
  1845. c.startAnimation(65535);
  1846. frame1();
  1847. resetTb();
  1848. c.isSkulled = false;
  1849. c.attackedPlayers.clear();
  1850. c.headIconPk = -1;
  1851. c.skullTimer = -1;
  1852. requestUpdates();
  1853. c.tradeResetNeeded = true;
  1854. c.setKiller(null);
  1855. c.setKilledByZombie(false);
  1856. }
  1857.  
  1858. /**
  1859. * Location change for digging, levers etc
  1860. **/
  1861.  
  1862. public void changeLocation() {
  1863. switch (c.newLocation) {
  1864. case 1:
  1865. sendFrame99(2);
  1866. movePlayer(3578, 9706, -1);
  1867. break;
  1868. case 2:
  1869. sendFrame99(2);
  1870. movePlayer(3568, 9683, -1);
  1871. break;
  1872. case 3:
  1873. sendFrame99(2);
  1874. movePlayer(3557, 9703, -1);
  1875. break;
  1876. case 4:
  1877. sendFrame99(2);
  1878. movePlayer(3556, 9718, -1);
  1879. break;
  1880. case 5:
  1881. sendFrame99(2);
  1882. movePlayer(3534, 9704, -1);
  1883. break;
  1884. case 6:
  1885. sendFrame99(2);
  1886. movePlayer(3546, 9684, -1);
  1887. break;
  1888. }
  1889. c.newLocation = 0;
  1890. }
  1891.  
  1892. /**
  1893. * Teleporting
  1894. **/
  1895.  
  1896. public void startLeverTeleport(int x, int y, int height, String teleportType) {
  1897. if (System.currentTimeMillis() - c.teleBlockDelay < c.teleBlockLength) {
  1898. c.sendMessage("You are teleblocked and can't teleport.");
  1899. return;
  1900. }
  1901.  
  1902. if (!c.isDead && c.teleTimer == 0 && c.respawnTimer == -6) {
  1903. if (c.playerIndex > 0 || c.npcIndex > 0)
  1904. c.getCombat().resetPlayerAttack();
  1905. c.stopMovement();
  1906. removeAllWindows();
  1907. c.teleX = x;
  1908. c.teleY = y;
  1909. c.npcIndex = 0;
  1910. c.playerIndex = 0;
  1911. c.faceUpdate(0);
  1912. c.teleHeight = height;
  1913. if (teleportType.equalsIgnoreCase("lever")) {
  1914. c.startAnimation(2140);
  1915. c.teleTimer = 8;
  1916. c.sendMessage("You pull the lever..");
  1917. }
  1918. }
  1919. c.getSkilling().stop();
  1920. if (Server.getMultiplayerSessionListener().inAnySession(c)) {
  1921. Server.getMultiplayerSessionListener().finish(c, MultiplayerSessionFinalizeType.WITHDRAW_ITEMS);
  1922. }
  1923. }
  1924.  
  1925. public boolean canTeleport(String type) {
  1926. if (!c.lastSpear.elapsed(4000)) {
  1927. c.sendMessage("You are stunned and can not teleport!");
  1928. return false;
  1929. }
  1930. if (Boundary.isIn(c, Boundary.DUEL_ARENAS)) {
  1931. DuelSession session = (DuelSession) Server.getMultiplayerSessionListener().getMultiplayerSession(c, MultiplayerSessionType.DUEL);
  1932. if (Objects.nonNull(session)) {
  1933. c.sendMessage("You cannot teleport whilst in a duel.");
  1934. return false;
  1935. }
  1936. }
  1937. if (Boundary.isIn(c, Boundary.FIGHT_CAVE)) {
  1938. c.sendMessage("You cannot teleport out of fight caves.");
  1939. return false;
  1940. }
  1941. if (Server.getMultiplayerSessionListener().inAnySession(c)) {
  1942. c.sendMessage("You must finish what you're doing before you can teleport.");
  1943. return false;
  1944. }
  1945. if (c.isInJail() && !(c.getRights().isBetween(1, 3))) {
  1946. c.sendMessage("You cannot teleport out of jail.");
  1947. return false;
  1948. }
  1949. if (c.inWild()) {
  1950. if (!type.equals("glory")) {
  1951. if (c.wildLevel > Config.NO_TELEPORT_WILD_LEVEL) {
  1952. c.sendMessage("You can't teleport above level " + Config.NO_TELEPORT_WILD_LEVEL + " in the wilderness.");
  1953. c.getPA().closeAllWindows();
  1954. return false;
  1955. }
  1956. } else {
  1957. if (c.wildLevel > 30) {
  1958. c.sendMessage("You can't teleport above level 30 in the wilderness.");
  1959. c.getPA().closeAllWindows();
  1960. return false;
  1961. }
  1962. }
  1963. }
  1964. if (System.currentTimeMillis() - c.teleBlockDelay < c.teleBlockLength) {
  1965. c.sendMessage("You are teleblocked and can't teleport.");
  1966. return false;
  1967. }
  1968. return true;
  1969. }
  1970.  
  1971. public void teleTabTeleport(int x, int y, int height, String teleportType) {
  1972. /*
  1973. * if (c.inPits) {
  1974. * c.sendMessage("You can't teleport during Fight Pits."); return; }
  1975. */
  1976. /*
  1977. * if (!c.startPack) { c.sendMessage(
  1978. * "You must select your starter package before doing any action.");
  1979. * return; }
  1980. */
  1981. /*
  1982. * if (c.getPA().inPitsWait()) {
  1983. * c.sendMessage("You can't teleport during Fight Pits."); return; }
  1984. */
  1985. if (Server.getMultiplayerSessionListener().inAnySession(c)) {
  1986. c.sendMessage("You cannot teleport until you finish what you're doing.");
  1987. return;
  1988. }
  1989. if (c.inWild() && c.wildLevel > Config.NO_TELEPORT_WILD_LEVEL) {
  1990. c.sendMessage("You can't teleport above level " + Config.NO_TELEPORT_WILD_LEVEL + " in the wilderness.");
  1991. return;
  1992. }
  1993. if (System.currentTimeMillis() - c.teleBlockDelay < c.teleBlockLength) {
  1994. c.sendMessage("You are teleblocked and can't teleport.");
  1995. return;
  1996. }
  1997. if (Boundary.isIn(c, Boundary.FIGHT_CAVE)) {
  1998. c.sendMessage("You cannot teleport out of fight caves.");
  1999. return;
  2000. }
  2001. if (!c.isDead && c.teleTimer == 0 && c.respawnTimer == -6) {
  2002. if (c.playerIndex > 0 || c.npcIndex > 0)
  2003. c.getCombat().resetPlayerAttack();
  2004. c.stopMovement();
  2005. removeAllWindows();
  2006. c.teleX = x;
  2007. c.teleY = y;
  2008. c.npcIndex = 0;
  2009. c.playerIndex = 0;
  2010. c.faceUpdate(0);
  2011. c.teleHeight = height;
  2012. c.getSkilling().stop();
  2013. if (teleportType.equalsIgnoreCase("teleTab")) {
  2014. c.startAnimation(4731);
  2015. c.teleEndAnimation = 0;
  2016. c.teleTimer = 8;
  2017. c.gfx0(678);
  2018. }
  2019. }
  2020. }
  2021.  
  2022. public void startTeleport2(int x, int y, int height) {
  2023. if (Server.getMultiplayerSessionListener().inAnySession(c)) {
  2024. c.sendMessage("You cannot teleport until you finish what you're doing.");
  2025. return;
  2026. }
  2027. if (!c.lastSpear.elapsed(4000)) {
  2028. c.sendMessage("You are stunned and can not teleport!");
  2029. return;
  2030. }
  2031. if (System.currentTimeMillis() - c.teleBlockDelay < c.teleBlockLength) {
  2032. c.sendMessage("You are teleblocked and can't teleport.");
  2033. return;
  2034. }
  2035. if (Boundary.isIn(c, Boundary.FIGHT_CAVE)) {
  2036. c.sendMessage("You cannot teleport out of fight caves.");
  2037. return;
  2038. }
  2039. if (!c.isDead && c.teleTimer == 0) {
  2040. c.stopMovement();
  2041. removeAllWindows();
  2042. c.teleX = x;
  2043. c.teleY = y;
  2044. c.npcIndex = 0;
  2045. c.playerIndex = 0;
  2046. c.faceUpdate(0);
  2047. c.teleHeight = height;
  2048. c.startAnimation(714);
  2049. c.teleTimer = 11;
  2050. c.teleGfx = 308;
  2051. c.teleEndAnimation = 715;
  2052. c.getSkilling().stop();
  2053. }
  2054. }
  2055.  
  2056. public void processTeleport() {
  2057. c.teleportToX = c.teleX;
  2058. c.teleportToY = c.teleY;
  2059. c.heightLevel = c.teleHeight;
  2060. if (c.teleEndAnimation > 0) {
  2061. c.startAnimation(c.teleEndAnimation);
  2062. }
  2063. }
  2064.  
  2065. public void followNpc() {
  2066. if (NPCHandler.npcs[c.followId] == null || NPCHandler.npcs[c.followId].isDead) {
  2067. c.followId = 0;
  2068. return;
  2069. }
  2070. if (c.freezeTimer > 0) {
  2071. return;
  2072. }
  2073. if (c.isDead || c.playerLevel[3] <= 0)
  2074. return;
  2075. int otherX = NPCHandler.npcs[c.followId2].getX();
  2076. int otherY = NPCHandler.npcs[c.followId2].getY();
  2077. boolean withinDistance = c.goodDistance(otherX, otherY, c.getX(), c.getY(), 2);
  2078. // boolean goodDistance = c.goodDistance(otherX, otherY, c.getX(), c.getY(), 1);
  2079. boolean hallyDistance = c.goodDistance(otherX, otherY, c.getX(), c.getY(), 2);
  2080. boolean bowDistance = c.goodDistance(otherX, otherY, c.getX(), c.getY(), 8);
  2081. boolean rangeWeaponDistance = c.goodDistance(otherX, otherY, c.getX(), c.getY(), 4);
  2082. boolean sameSpot = c.absX == otherX && c.absY == otherY;
  2083. if (!c.goodDistance(otherX, otherY, c.getX(), c.getY(), 25)) {
  2084. c.followId2 = 0;
  2085. return;
  2086. }
  2087. if (c.goodDistance(otherX, otherY, c.getX(), c.getY(), 1)) {
  2088. if (otherX != c.getX() && otherY != c.getY()) {
  2089. stopDiagonal(otherX, otherY);
  2090. return;
  2091. }
  2092. }
  2093. if ((c.usingBow || c.mageFollow || (c.npcIndex > 0 && c.autocastId > 0)) && bowDistance && !sameSpot/* && !Region.pathBlocked(c, NPCHandler.npcs[c.followId])*/) {
  2094. return;
  2095. }
  2096. if (c.getCombat().usingHally() && hallyDistance && !sameSpot) {
  2097. return;
  2098. }
  2099.  
  2100. if (c.usingRangeWeapon && rangeWeaponDistance && !sameSpot) {
  2101. return;
  2102. }
  2103.  
  2104. c.faceUpdate(c.followId);
  2105. if (otherX == c.absX && otherY == c.absY) {
  2106. int r = Misc.random(3);
  2107. switch (r) {
  2108. case 0:
  2109. walkTo(0, -1);
  2110. break;
  2111. case 1:
  2112. walkTo(0, 1);
  2113. break;
  2114. case 2:
  2115. walkTo(1, 0);
  2116. break;
  2117. case 3:
  2118. walkTo(-1, 0);
  2119. break;
  2120. }
  2121. } else if (c.isRunning2 && !withinDistance) {
  2122. if (otherY > c.getY() && otherX == c.getX()) {
  2123. // walkTo(0, getMove(c.getY(), otherY - 1) + getMove(c.getY(),
  2124. // otherY - 1));
  2125. playerWalk(otherX, otherY - 1);
  2126. } else if (otherY < c.getY() && otherX == c.getX()) {
  2127. // walkTo(0, getMove(c.getY(), otherY + 1) + getMove(c.getY(),
  2128. // otherY + 1));
  2129. playerWalk(otherX, otherY + 1);
  2130. } else if (otherX > c.getX() && otherY == c.getY()) {
  2131. // walkTo(getMove(c.getX(), otherX - 1) + getMove(c.getX(),
  2132. // otherX - 1), 0);
  2133. playerWalk(otherX - 1, otherY);
  2134. } else if (otherX < c.getX() && otherY == c.getY()) {
  2135. // walkTo(getMove(c.getX(), otherX + 1) + getMove(c.getX(),
  2136. // otherX + 1), 0);
  2137. playerWalk(otherX + 1, otherY);
  2138. } else if (otherX < c.getX() && otherY < c.getY()) {
  2139. // walkTo(getMove(c.getX(), otherX + 1) + getMove(c.getX(),
  2140. // otherX + 1), getMove(c.getY(), otherY + 1) +
  2141. // getMove(c.getY(), otherY + 1));
  2142. playerWalk(otherX + 1, otherY + 1);
  2143. } else if (otherX > c.getX() && otherY > c.getY()) {
  2144. // walkTo(getMove(c.getX(), otherX - 1) + getMove(c.getX(),
  2145. // otherX - 1), getMove(c.getY(), otherY - 1) +
  2146. // getMove(c.getY(), otherY - 1));
  2147. playerWalk(otherX - 1, otherY - 1);
  2148. } else if (otherX < c.getX() && otherY > c.getY()) {
  2149. // walkTo(getMove(c.getX(), otherX + 1) + getMove(c.getX(),
  2150. // otherX + 1), getMove(c.getY(), otherY - 1) +
  2151. // getMove(c.getY(), otherY - 1));
  2152. playerWalk(otherX + 1, otherY - 1);
  2153. } else if (otherX > c.getX() && otherY < c.getY()) {
  2154. // walkTo(getMove(c.getX(), otherX + 1) + getMove(c.getX(),
  2155. // otherX + 1), getMove(c.getY(), otherY - 1) +
  2156. // getMove(c.getY(), otherY - 1));
  2157. playerWalk(otherX + 1, otherY - 1);
  2158. }
  2159. } else {
  2160. if (otherY > c.getY() && otherX == c.getX()) {
  2161. // walkTo(0, getMove(c.getY(), otherY - 1));
  2162. playerWalk(otherX, otherY - 1);
  2163. } else if (otherY < c.getY() && otherX == c.getX()) {
  2164. // walkTo(0, getMove(c.getY(), otherY + 1));
  2165. playerWalk(otherX, otherY + 1);
  2166. } else if (otherX > c.getX() && otherY == c.getY()) {
  2167. // walkTo(getMove(c.getX(), otherX - 1), 0);
  2168. playerWalk(otherX - 1, otherY);
  2169. } else if (otherX < c.getX() && otherY == c.getY()) {
  2170. // walkTo(getMove(c.getX(), otherX + 1), 0);
  2171. playerWalk(otherX + 1, otherY);
  2172. } else if (otherX < c.getX() && otherY < c.getY()) {
  2173. // walkTo(getMove(c.getX(), otherX + 1), getMove(c.getY(),
  2174. // otherY + 1));
  2175. playerWalk(otherX + 1, otherY + 1);
  2176. } else if (otherX > c.getX() && otherY > c.getY()) {
  2177. // walkTo(getMove(c.getX(), otherX - 1), getMove(c.getY(),
  2178. // otherY - 1));
  2179. playerWalk(otherX - 1, otherY - 1);
  2180. } else if (otherX < c.getX() && otherY > c.getY()) {
  2181. // walkTo(getMove(c.getX(), otherX + 1), getMove(c.getY(),
  2182. // otherY - 1));
  2183. playerWalk(otherX + 1, otherY - 1);
  2184. } else if (otherX > c.getX() && otherY < c.getY()) {
  2185. // walkTo(getMove(c.getX(), otherX - 1), getMove(c.getY(),
  2186. // otherY + 1));
  2187. playerWalk(otherX - 1, otherY + 1);
  2188. }
  2189. }
  2190. c.faceUpdate(c.followId);
  2191. }
  2192.  
  2193. /**
  2194. * Following
  2195. **/
  2196.  
  2197. public void followPlayer() {
  2198. if (PlayerHandler.players[c.followId] == null || PlayerHandler.players[c.followId].isDead) {
  2199. c.followId = 0;
  2200. return;
  2201. }
  2202. if (c.freezeTimer > 0) {
  2203. return;
  2204. }
  2205. if (Boundary.isIn(c, Boundary.DUEL_ARENAS)) {
  2206. DuelSession session = (DuelSession) Server.getMultiplayerSessionListener().getMultiplayerSession(c, MultiplayerSessionType.DUEL);
  2207. if (!Objects.isNull(session)) {
  2208. if (session.getRules().contains(Rule.NO_MOVEMENT)) {
  2209. c.followId = 0;
  2210. return;
  2211. }
  2212. }
  2213. }
  2214. if (inPitsWait()) {
  2215. c.followId = 0;
  2216. }
  2217.  
  2218. if (c.isDead || c.playerLevel[3] <= 0)
  2219. return;
  2220. if (!c.lastSpear.elapsed(4000)) {
  2221. c.sendMessage("You are stunned, you cannot move.");
  2222. c.followId = 0;
  2223. return;
  2224. }
  2225. int otherX = PlayerHandler.players[c.followId].getX();
  2226. int otherY = PlayerHandler.players[c.followId].getY();
  2227.  
  2228. boolean sameSpot = (c.absX == otherX && c.absY == otherY);
  2229.  
  2230. boolean hallyDistance = c.goodDistance(otherX, otherY, c.getX(), c.getY(), 2);
  2231. boolean withinDistance = c.goodDistance(otherX, otherY, c.getX(), c.getY(), 2);
  2232. boolean rangeWeaponDistance = c.goodDistance(otherX, otherY, c.getX(), c.getY(), 4);
  2233. boolean bowDistance = c.goodDistance(otherX, otherY, c.getX(), c.getY(), 6);
  2234.  
  2235. if (!c.goodDistance(otherX, otherY, c.getX(), c.getY(), 25)) {
  2236. c.followId = 0;
  2237. return;
  2238. }
  2239. if (c.goodDistance(otherX, otherY, c.getX(), c.getY(), 1)) {
  2240. if (otherX != c.getX() && otherY != c.getY()) {
  2241. stopDiagonal(otherX, otherY);
  2242. return;
  2243. }
  2244. }
  2245.  
  2246. if ((c.usingBow || c.mageFollow || (c.playerIndex > 0 && c.autocastId > 0)) && bowDistance && !sameSpot) {
  2247. return;
  2248. }
  2249.  
  2250. if (c.getCombat().usingHally() && hallyDistance && !sameSpot) {
  2251. return;
  2252. }
  2253.  
  2254. if (c.usingRangeWeapon && rangeWeaponDistance && !sameSpot) {
  2255. return;
  2256. }
  2257.  
  2258. c.faceUpdate(c.followId + 32768);
  2259. if (otherX == c.absX && otherY == c.absY) {
  2260. int r = Misc.random(3);
  2261. switch (r) {
  2262. case 0:
  2263. if (Region.canMove(c.absX, c.absY, c.absX, c.absY - 1, c.heightLevel, 1, 1))
  2264. walkTo(0, -1);
  2265. break;
  2266. case 1:
  2267. if (Region.canMove(c.absX, c.absY, c.absX, c.absY + 1, c.heightLevel, 1, 1))
  2268. walkTo(0, 1);
  2269. break;
  2270. case 2:
  2271. if (Region.canMove(c.absX, c.absY, c.absX + 1, c.absY, c.heightLevel, 1, 1))
  2272. walkTo(1, 0);
  2273. break;
  2274. case 3:
  2275. if (Region.canMove(c.absX, c.absY, c.absX - 1, c.absY, c.heightLevel, 1, 1))
  2276. walkTo(-1, 0);
  2277. break;
  2278. }
  2279. } else if (c.isRunning2 && !withinDistance) {
  2280. if (otherY > c.getY() && otherX == c.getX()) {
  2281. playerWalk(otherX, otherY - 1);
  2282. } else if (otherY < c.getY() && otherX == c.getX()) {
  2283. playerWalk(otherX, otherY + 1);
  2284. } else if (otherX > c.getX() && otherY == c.getY()) {
  2285. playerWalk(otherX - 1, otherY);
  2286. } else if (otherX < c.getX() && otherY == c.getY()) {
  2287. playerWalk(otherX + 1, otherY);
  2288. } else if (otherX < c.getX() && otherY < c.getY()) {
  2289. playerWalk(otherX + 1, otherY + 1);
  2290. } else if (otherX > c.getX() && otherY > c.getY()) {
  2291. playerWalk(otherX - 1, otherY - 1);
  2292. } else if (otherX < c.getX() && otherY > c.getY()) {
  2293. playerWalk(otherX + 1, otherY - 1);
  2294. } else if (otherX > c.getX() && otherY < c.getY()) {
  2295. playerWalk(otherX + 1, otherY - 1);
  2296. }
  2297. } else {
  2298. if (otherY > c.getY() && otherX == c.getX()) {
  2299. playerWalk(otherX, otherY - 1);
  2300. } else if (otherY < c.getY() && otherX == c.getX()) {
  2301. playerWalk(otherX, otherY + 1);
  2302. } else if (otherX > c.getX() && otherY == c.getY()) {
  2303. playerWalk(otherX - 1, otherY);
  2304. } else if (otherX < c.getX() && otherY == c.getY()) {
  2305. playerWalk(otherX + 1, otherY);
  2306. } else if (otherX < c.getX() && otherY < c.getY()) {
  2307. playerWalk(otherX + 1, otherY + 1);
  2308. } else if (otherX > c.getX() && otherY > c.getY()) {
  2309. playerWalk(otherX - 1, otherY - 1);
  2310. } else if (otherX < c.getX() && otherY > c.getY()) {
  2311. playerWalk(otherX + 1, otherY - 1);
  2312. } else if (otherX > c.getX() && otherY < c.getY()) {
  2313. playerWalk(otherX - 1, otherY + 1);
  2314. }
  2315. }
  2316. c.faceUpdate(c.followId + 32768);
  2317. }
  2318.  
  2319. public int getRunningMove(int i, int j) {
  2320. if (j - i > 2)
  2321. return 2;
  2322. else if (j - i < -2)
  2323. return -2;
  2324. else
  2325. return j - i;
  2326. }
  2327.  
  2328. public void sendStatement(String s) {
  2329. sendFrame126(s, 357);
  2330. sendFrame126("Click here to continue", 358);
  2331. sendFrame164(356);
  2332. }
  2333.  
  2334. public void resetFollow() {
  2335. c.followId = 0;
  2336. c.followId2 = 0;
  2337. c.mageFollow = false;
  2338. if (c.outStream != null) {
  2339. c.outStream.createFrame(174);
  2340. c.outStream.writeWord(0);
  2341. c.outStream.writeByte(0);
  2342. c.outStream.writeWord(1);
  2343. }
  2344. }
  2345.  
  2346. public void stepAway(NPC npc) {
  2347. if (npc == null) {
  2348. return;
  2349. }
  2350. int size = npc.getSize();
  2351. int xOffset = 0;
  2352. int yOffset = 0;
  2353. if (npc.getX() > c.getX()) {
  2354. if (npc.getY() > c.getY()) {
  2355.  
  2356. } else if (npc.getY() < c.getY()) {
  2357.  
  2358. }
  2359. }
  2360. }
  2361.  
  2362. public void walkTo3(int i, int j) {
  2363. c.newWalkCmdSteps = 0;
  2364. if (++c.newWalkCmdSteps > 50)
  2365. c.newWalkCmdSteps = 0;
  2366. int k = c.absX + i;
  2367. k -= c.mapRegionX * 8;
  2368. c.getNewWalkCmdX()[0] = c.getNewWalkCmdY()[0] = tmpNWCX[0] = tmpNWCY[0] = 0;
  2369. int l = c.absY + j;
  2370. l -= c.mapRegionY * 8;
  2371. c.isRunning2 = false;
  2372. c.isRunning = false;
  2373. c.getNewWalkCmdX()[0] += k;
  2374. c.getNewWalkCmdY()[0] += l;
  2375. c.poimiY = l;
  2376. c.poimiX = k;
  2377. }
  2378.  
  2379. int tmpNWCX[] = new int[50];
  2380. int tmpNWCY[] = new int[50];
  2381.  
  2382. public void walkTo(int i, int j) {
  2383. c.newWalkCmdSteps = 0;
  2384. if (++c.newWalkCmdSteps > 50)
  2385. c.newWalkCmdSteps = 0;
  2386. int k = c.getX() + i;
  2387. k -= c.mapRegionX * 8;
  2388. c.getNewWalkCmdX()[0] = c.getNewWalkCmdY()[0] = 0;
  2389. int l = c.getY() + j;
  2390. l -= c.mapRegionY * 8;
  2391.  
  2392. for (int n = 0; n < c.newWalkCmdSteps; n++) {
  2393. c.getNewWalkCmdX()[n] += k;
  2394. c.getNewWalkCmdY()[n] += l;
  2395. }
  2396. }
  2397.  
  2398. public void walkTo2(int i, int j) {
  2399. if (c.freezeDelay > 0)
  2400. return;
  2401. c.newWalkCmdSteps = 0;
  2402. if (++c.newWalkCmdSteps > 50)
  2403. c.newWalkCmdSteps = 0;
  2404. int k = c.getX() + i;
  2405. k -= c.mapRegionX * 8;
  2406. c.getNewWalkCmdX()[0] = c.getNewWalkCmdY()[0] = 0;
  2407. int l = c.getY() + j;
  2408. l -= c.mapRegionY * 8;
  2409.  
  2410. for (int n = 0; n < c.newWalkCmdSteps; n++) {
  2411. c.getNewWalkCmdX()[n] += k;
  2412. c.getNewWalkCmdY()[n] += l;
  2413. }
  2414. }
  2415.  
  2416. public void stopDiagonal(int otherX, int otherY) {
  2417. if (c.freezeDelay > 0)
  2418. return;
  2419. if (c.freezeTimer > 0) // player can't move
  2420. return;
  2421. c.newWalkCmdSteps = 1;
  2422. int xMove = otherX - c.getX();
  2423. int yMove = 0;
  2424. if (xMove == 0)
  2425. yMove = otherY - c.getY();
  2426. /*
  2427. * if (!clipHor) { yMove = 0; } else if (!clipVer) { xMove = 0; }
  2428. */
  2429.  
  2430. int k = c.getX() + xMove;
  2431. k -= c.mapRegionX * 8;
  2432. c.getNewWalkCmdX()[0] = c.getNewWalkCmdY()[0] = 0;
  2433. int l = c.getY() + yMove;
  2434. l -= c.mapRegionY * 8;
  2435.  
  2436. for (int n = 0; n < c.newWalkCmdSteps; n++) {
  2437. c.getNewWalkCmdX()[n] += k;
  2438. c.getNewWalkCmdY()[n] += l;
  2439. }
  2440.  
  2441. }
  2442.  
  2443. public void walkToCheck(int i, int j) {
  2444. if (c.freezeDelay > 0)
  2445. return;
  2446. c.newWalkCmdSteps = 0;
  2447. if (++c.newWalkCmdSteps > 50)
  2448. c.newWalkCmdSteps = 0;
  2449. int k = c.getX() + i;
  2450. k -= c.mapRegionX * 8;
  2451. c.getNewWalkCmdX()[0] = c.getNewWalkCmdY()[0] = 0;
  2452. int l = c.getY() + j;
  2453. l -= c.mapRegionY * 8;
  2454.  
  2455. for (int n = 0; n < c.newWalkCmdSteps; n++) {
  2456. c.getNewWalkCmdX()[n] += k;
  2457. c.getNewWalkCmdY()[n] += l;
  2458. }
  2459. }
  2460.  
  2461. public int getMove(int place1, int place2) {
  2462. if (!c.lastSpear.elapsed(4000))
  2463. return 0;
  2464. if ((place1 - place2) == 0) {
  2465. return 0;
  2466. } else if ((place1 - place2) < 0) {
  2467. return 1;
  2468. } else if ((place1 - place2) > 0) {
  2469. return -1;
  2470. }
  2471. return 0;
  2472. }
  2473.  
  2474. public boolean fullVeracs() {
  2475. return c.playerEquipment[c.playerHat] == 4753 && c.playerEquipment[c.playerChest] == 4757 && c.playerEquipment[c.playerLegs] == 4759
  2476. && c.playerEquipment[c.playerWeapon] == 4755;
  2477. }
  2478.  
  2479. public boolean fullGuthans() {
  2480. return c.playerEquipment[c.playerHat] == 4724 && c.playerEquipment[c.playerChest] == 4728 && c.playerEquipment[c.playerLegs] == 4730
  2481. && c.playerEquipment[c.playerWeapon] == 4726;
  2482. }
  2483.  
  2484. /**
  2485. * reseting animation
  2486. **/
  2487. public void resetAnimation() {
  2488. c.getCombat().getPlayerAnimIndex(ItemAssistant.getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  2489. c.startAnimation(c.playerStandIndex);
  2490. requestUpdates();
  2491. }
  2492.  
  2493. public void requestUpdates() {
  2494. c.updateRequired = true;
  2495. c.setAppearanceUpdateRequired(true);
  2496. }
  2497.  
  2498. /*
  2499. * public void Obelisks(int id) { if (!c.getItems().playerHasItem(id)) {
  2500. * c.getItems().addItem(id, 1); } }
  2501. */
  2502.  
  2503. public void levelUp(int skill) {
  2504. int totalLevel = (getLevelForXP(c.playerXP[0]) + getLevelForXP(c.playerXP[1]) + getLevelForXP(c.playerXP[2]) + getLevelForXP(c.playerXP[3])
  2505. + getLevelForXP(c.playerXP[4]) + getLevelForXP(c.playerXP[5]) + getLevelForXP(c.playerXP[6]) + getLevelForXP(c.playerXP[7])
  2506. + getLevelForXP(c.playerXP[8]) + getLevelForXP(c.playerXP[9]) + getLevelForXP(c.playerXP[10]) + getLevelForXP(c.playerXP[11])
  2507. + getLevelForXP(c.playerXP[12]) + getLevelForXP(c.playerXP[13]) + getLevelForXP(c.playerXP[14]) + getLevelForXP(c.playerXP[15])
  2508. + getLevelForXP(c.playerXP[16]) + getLevelForXP(c.playerXP[17]) + getLevelForXP(c.playerXP[18]) + getLevelForXP(c.playerXP[19]) + getLevelForXP(c.playerXP[20]));
  2509. sendFrame126("Total Lvl: " + totalLevel, 3984);
  2510. switch (skill) {
  2511. case 0:
  2512. sendFrame126("Congratulations, you just advanced an attack level!", 6248);
  2513. sendFrame126("Your attack level is now " + getLevelForXP(c.playerXP[skill]) + ".", 6249);
  2514. c.sendMessage("Congratulations, you just advanced an attack level.");
  2515. sendFrame164(6247);
  2516. break;
  2517.  
  2518. case 1:
  2519. sendFrame126("Congratulations, you just advanced a defence level!", 6254);
  2520. sendFrame126("Your defence level is now " + getLevelForXP(c.playerXP[skill]) + ".", 6255);
  2521. c.sendMessage("Congratulations, you just advanced a defence level.");
  2522. sendFrame164(6253);
  2523. break;
  2524.  
  2525. case 2:
  2526. sendFrame126("Congratulations, you just advanced a strength level!", 6207);
  2527. sendFrame126("Your strength level is now " + getLevelForXP(c.playerXP[skill]) + ".", 6208);
  2528. c.sendMessage("Congratulations, you just advanced a strength level.");
  2529. sendFrame164(6206);
  2530. break;
  2531.  
  2532. case 3:
  2533. sendFrame126("Congratulations, you just advanced a hitpoints level!", 6217);
  2534. sendFrame126("Your hitpoints level is now " + getLevelForXP(c.playerXP[skill]) + ".", 6218);
  2535. c.sendMessage("Congratulations, you just advanced a hitpoints level.");
  2536. sendFrame164(6216);
  2537. break;
  2538.  
  2539. case 4:
  2540. c.sendMessage("Congratulations, you just advanced a ranging level.");
  2541. break;
  2542.  
  2543. case 5:
  2544. sendFrame126("Congratulations, you just advanced a prayer level!", 6243);
  2545. sendFrame126("Your prayer level is now " + getLevelForXP(c.playerXP[skill]) + ".", 6244);
  2546. c.sendMessage("Congratulations, you just advanced a prayer level.");
  2547. sendFrame164(6242);
  2548. break;
  2549.  
  2550. case 6:
  2551. sendFrame126("Congratulations, you just advanced a magic level!", 6212);
  2552. sendFrame126("Your magic level is now " + getLevelForXP(c.playerXP[skill]) + ".", 6213);
  2553. c.sendMessage("Congratulations, you just advanced a magic level.");
  2554. sendFrame164(6211);
  2555. break;
  2556.  
  2557. case 7:
  2558. sendFrame126("Congratulations, you just advanced a cooking level!", 6227);
  2559. sendFrame126("Your cooking level is now " + getLevelForXP(c.playerXP[skill]) + ".", 6228);
  2560. c.sendMessage("Congratulations, you just advanced a cooking level.");
  2561. sendFrame164(6226);
  2562. break;
  2563.  
  2564. case 8:
  2565. sendFrame126("Congratulations, you just advanced a woodcutting level!", 4273);
  2566. sendFrame126("Your woodcutting level is now " + getLevelForXP(c.playerXP[skill]) + ".", 4274);
  2567. c.sendMessage("Congratulations, you just advanced a woodcutting level.");
  2568. sendFrame164(4272);
  2569. break;
  2570.  
  2571. case 9:
  2572. sendFrame126("Congratulations, you just advanced a fletching level!", 6232);
  2573. sendFrame126("Your fletching level is now " + getLevelForXP(c.playerXP[skill]) + ".", 6233);
  2574. c.sendMessage("Congratulations, you just advanced a fletching level.");
  2575. sendFrame164(6231);
  2576. break;
  2577.  
  2578. case 10:
  2579. sendFrame126("Congratulations, you just advanced a fishing level!", 6259);
  2580. sendFrame126("Your fishing level is now " + getLevelForXP(c.playerXP[skill]) + ".", 6260);
  2581. c.sendMessage("Congratulations, you just advanced a fishing level.");
  2582. sendFrame164(6258);
  2583. break;
  2584.  
  2585. case 11:
  2586. sendFrame126("Congratulations, you just advanced a fire making level!", 4283);
  2587. sendFrame126("Your firemaking level is now " + getLevelForXP(c.playerXP[skill]) + ".", 4284);
  2588. c.sendMessage("Congratulations, you just advanced a fire making level.");
  2589. sendFrame164(4282);
  2590. break;
  2591.  
  2592. case 12:
  2593. sendFrame126("Congratulations, you just advanced a crafting level!", 6264);
  2594. sendFrame126("Your crafting level is now " + getLevelForXP(c.playerXP[skill]) + ".", 6265);
  2595. c.sendMessage("Congratulations, you just advanced a crafting level.");
  2596. sendFrame164(6263);
  2597. break;
  2598.  
  2599. case 13:
  2600. sendFrame126("Congratulations, you just advanced a smithing level!", 6222);
  2601. sendFrame126("Your smithing level is now " + getLevelForXP(c.playerXP[skill]) + ".", 6223);
  2602. c.sendMessage("Congratulations, you just advanced a smithing level.");
  2603. sendFrame164(6221);
  2604. break;
  2605.  
  2606. case 14:
  2607. sendFrame126("Congratulations, you just advanced a mining level!", 4417);
  2608. sendFrame126("Your mining level is now " + getLevelForXP(c.playerXP[skill]) + ".", 4438);
  2609. c.sendMessage("Congratulations, you just advanced a mining level.");
  2610. sendFrame164(4416);
  2611. break;
  2612.  
  2613. case 15:
  2614. sendFrame126("Congratulations, you just advanced a herblore level!", 6238);
  2615. sendFrame126("Your herblore level is now " + getLevelForXP(c.playerXP[skill]) + ".", 6239);
  2616. c.sendMessage("Congratulations, you just advanced a herblore level.");
  2617. sendFrame164(6237);
  2618. break;
  2619.  
  2620. case 16:
  2621. sendFrame126("Congratulations, you just advanced a agility level!", 4278);
  2622. sendFrame126("Your agility level is now " + getLevelForXP(c.playerXP[skill]) + ".", 4279);
  2623. c.sendMessage("Congratulations, you just advanced an agility level.");
  2624. sendFrame164(4277);
  2625. break;
  2626.  
  2627. case 17:
  2628. sendFrame126("Congratulations, you just advanced a thieving level!", 4263);
  2629. sendFrame126("Your theiving level is now " + getLevelForXP(c.playerXP[skill]) + ".", 4264);
  2630. c.sendMessage("Congratulations, you just advanced a thieving level.");
  2631. sendFrame164(4261);
  2632. break;
  2633.  
  2634. case 18:
  2635. sendFrame126("Congratulations, you just advanced a slayer level!", 12123);
  2636. sendFrame126("Your slayer level is now " + getLevelForXP(c.playerXP[skill]) + ".", 12124);
  2637. c.sendMessage("Congratulations, you just advanced a slayer level.");
  2638. sendFrame164(12122);
  2639. break;
  2640.  
  2641. case 19:
  2642. c.sendMessage("Congratulations! You've just advanced a Farming level.");
  2643. break;
  2644.  
  2645. case 20:
  2646. sendFrame126("Congratulations, you just advanced a runecrafting level!", 4268);
  2647. sendFrame126("Your runecrafting level is now " + getLevelForXP(c.playerXP[skill]) + ".", 4269);
  2648. c.sendMessage("Congratulations, you just advanced a runecrafting level.");
  2649. sendFrame164(4267);
  2650. break;
  2651. }
  2652. if (getLevelForXP(c.playerXP[skill]) == 99) {
  2653. Skill s = Skill.forId(skill);
  2654. PlayerHandler.executeGlobalMessage("<img=10></img>[<col=255>News</col>] <col=CC0000>" + Misc.capitalize(c.playerName) +
  2655. "</col> has reached level 99 <col=CC0000>" + s.toString() + "</col>, congratulations.");
  2656. }
  2657. c.dialogueAction = 0;
  2658. c.nextChat = 0;
  2659. }
  2660.  
  2661. public void refreshSkill(int i) {
  2662. c.combatLevel = c.calculateCombatLevel();
  2663. switch (i) {
  2664. case 0:
  2665. sendFrame126("" + c.playerLevel[0] + "", 4004);
  2666. sendFrame126("" + getLevelForXP(c.playerXP[0]) + "", 4005);
  2667. sendFrame126("" + c.playerXP[0] + "", 4044);
  2668. sendFrame126("" + getXPForLevel(getLevelForXP(c.playerXP[0]) + 1) + "", 4045);
  2669. requestUpdates();
  2670. break;
  2671.  
  2672. case 1:
  2673. sendFrame126("" + c.playerLevel[1] + "", 4008);
  2674. sendFrame126("" + getLevelForXP(c.playerXP[1]) + "", 4009);
  2675. sendFrame126("" + c.playerXP[1] + "", 4056);
  2676. sendFrame126("" + getXPForLevel(getLevelForXP(c.playerXP[1]) + 1) + "", 4057);
  2677. break;
  2678.  
  2679. case 2:
  2680. sendFrame126("" + c.playerLevel[2] + "", 4006);
  2681. sendFrame126("" + getLevelForXP(c.playerXP[2]) + "", 4007);
  2682. sendFrame126("" + c.playerXP[2] + "", 4050);
  2683. sendFrame126("" + getXPForLevel(getLevelForXP(c.playerXP[2]) + 1) + "", 4051);
  2684. break;
  2685.  
  2686. case 3:
  2687. sendFrame126("" + c.playerLevel[3] + "", 4016);
  2688. sendFrame126("" + getLevelForXP(c.playerXP[3]) + "", 4017);
  2689. sendFrame126("" + c.playerXP[3] + "", 4080);
  2690. sendFrame126("" + getXPForLevel(getLevelForXP(c.playerXP[3]) + 1) + "", 4081);
  2691. break;
  2692.  
  2693. case 4:
  2694. sendFrame126("" + c.playerLevel[4] + "", 4010);
  2695. sendFrame126("" + getLevelForXP(c.playerXP[4]) + "", 4011);
  2696. sendFrame126("" + c.playerXP[4] + "", 4062);
  2697. sendFrame126("" + getXPForLevel(getLevelForXP(c.playerXP[4]) + 1) + "", 4063);
  2698. break;
  2699.  
  2700. case 5:
  2701. sendFrame126("" + c.playerLevel[5] + "", 4012);
  2702. sendFrame126("" + getLevelForXP(c.playerXP[5]) + "", 4013);
  2703. sendFrame126("" + c.playerXP[5] + "", 4068);
  2704. sendFrame126("" + getXPForLevel(getLevelForXP(c.playerXP[5]) + 1) + "", 4069);
  2705. sendFrame126("" + c.playerLevel[5] + "/" + getLevelForXP(c.playerXP[5]) + "", 687);// Prayer
  2706. // frame
  2707. break;
  2708.  
  2709. case 6:
  2710. sendFrame126("" + c.playerLevel[6] + "", 4014);
  2711. sendFrame126("" + getLevelForXP(c.playerXP[6]) + "", 4015);
  2712. sendFrame126("" + c.playerXP[6] + "", 4074);
  2713. sendFrame126("" + getXPForLevel(getLevelForXP(c.playerXP[6]) + 1) + "", 4075);
  2714. break;
  2715.  
  2716. case 7:
  2717. sendFrame126("" + c.playerLevel[7] + "", 4034);
  2718. sendFrame126("" + getLevelForXP(c.playerXP[7]) + "", 4035);
  2719. sendFrame126("" + c.playerXP[7] + "", 4134);
  2720. sendFrame126("" + getXPForLevel(getLevelForXP(c.playerXP[7]) + 1) + "", 4135);
  2721. break;
  2722.  
  2723. case 8:
  2724. sendFrame126("" + c.playerLevel[8] + "", 4038);
  2725. sendFrame126("" + getLevelForXP(c.playerXP[8]) + "", 4039);
  2726. sendFrame126("" + c.playerXP[8] + "", 4146);
  2727. sendFrame126("" + getXPForLevel(getLevelForXP(c.playerXP[8]) + 1) + "", 4147);
  2728. break;
  2729.  
  2730. case 9:
  2731. sendFrame126("" + c.playerLevel[9] + "", 4026);
  2732. sendFrame126("" + getLevelForXP(c.playerXP[9]) + "", 4027);
  2733. sendFrame126("" + c.playerXP[9] + "", 4110);
  2734. sendFrame126("" + getXPForLevel(getLevelForXP(c.playerXP[9]) + 1) + "", 4111);
  2735. break;
  2736.  
  2737. case 10:
  2738. sendFrame126("" + c.playerLevel[10] + "", 4032);
  2739. sendFrame126("" + getLevelForXP(c.playerXP[10]) + "", 4033);
  2740. sendFrame126("" + c.playerXP[10] + "", 4128);
  2741. sendFrame126("" + getXPForLevel(getLevelForXP(c.playerXP[10]) + 1) + "", 4129);
  2742. break;
  2743.  
  2744. case 11:
  2745. sendFrame126("" + c.playerLevel[11] + "", 4036);
  2746. sendFrame126("" + getLevelForXP(c.playerXP[11]) + "", 4037);
  2747. sendFrame126("" + c.playerXP[11] + "", 4140);
  2748. sendFrame126("" + getXPForLevel(getLevelForXP(c.playerXP[11]) + 1) + "", 4141);
  2749. break;
  2750.  
  2751. case 12:
  2752. sendFrame126("" + c.playerLevel[12] + "", 4024);
  2753. sendFrame126("" + getLevelForXP(c.playerXP[12]) + "", 4025);
  2754. sendFrame126("" + c.playerXP[12] + "", 4104);
  2755. sendFrame126("" + getXPForLevel(getLevelForXP(c.playerXP[12]) + 1) + "", 4105);
  2756. break;
  2757.  
  2758. case 13:
  2759. sendFrame126("" + c.playerLevel[13] + "", 4030);
  2760. sendFrame126("" + getLevelForXP(c.playerXP[13]) + "", 4031);
  2761. sendFrame126("" + c.playerXP[13] + "", 4122);
  2762. sendFrame126("" + getXPForLevel(getLevelForXP(c.playerXP[13]) + 1) + "", 4123);
  2763. break;
  2764.  
  2765. case 14:
  2766. sendFrame126("" + c.playerLevel[14] + "", 4028);
  2767. sendFrame126("" + getLevelForXP(c.playerXP[14]) + "", 4029);
  2768. sendFrame126("" + c.playerXP[14] + "", 4116);
  2769. sendFrame126("" + getXPForLevel(getLevelForXP(c.playerXP[14]) + 1) + "", 4117);
  2770. break;
  2771.  
  2772. case 15:
  2773. sendFrame126("" + c.playerLevel[15] + "", 4020);
  2774. sendFrame126("" + getLevelForXP(c.playerXP[15]) + "", 4021);
  2775. sendFrame126("" + c.playerXP[15] + "", 4092);
  2776. sendFrame126("" + getXPForLevel(getLevelForXP(c.playerXP[15]) + 1) + "", 4093);
  2777. break;
  2778.  
  2779. case 16:
  2780. sendFrame126("" + c.playerLevel[16] + "", 4018);
  2781. sendFrame126("" + getLevelForXP(c.playerXP[16]) + "", 4019);
  2782. sendFrame126("" + c.playerXP[16] + "", 4086);
  2783. sendFrame126("" + getXPForLevel(getLevelForXP(c.playerXP[16]) + 1) + "", 4087);
  2784. break;
  2785.  
  2786. case 17:
  2787. sendFrame126("" + c.playerLevel[17] + "", 4022);
  2788. sendFrame126("" + getLevelForXP(c.playerXP[17]) + "", 4023);
  2789. sendFrame126("" + c.playerXP[17] + "", 4098);
  2790. sendFrame126("" + getXPForLevel(getLevelForXP(c.playerXP[17]) + 1) + "", 4099);
  2791. break;
  2792.  
  2793. case 18:
  2794. sendFrame126("" + c.playerLevel[18] + "", 12166);
  2795. sendFrame126("" + getLevelForXP(c.playerXP[18]) + "", 12167);
  2796. sendFrame126("" + c.playerXP[18] + "", 12171);
  2797. sendFrame126("" + getXPForLevel(getLevelForXP(c.playerXP[18]) + 1) + "", 12172);
  2798. break;
  2799.  
  2800. case 19:
  2801. sendFrame126("" + c.playerLevel[19] + "", 13926);
  2802. sendFrame126("" + getLevelForXP(c.playerXP[19]) + "", 13927);
  2803. sendFrame126("" + c.playerXP[19] + "", 13921);
  2804. sendFrame126("" + getXPForLevel(getLevelForXP(c.playerXP[19]) + 1) + "", 13922);
  2805. break;
  2806.  
  2807. case 20:
  2808. sendFrame126("" + c.playerLevel[20] + "", 4152);
  2809. sendFrame126("" + getLevelForXP(c.playerXP[20]) + "", 4153);
  2810. sendFrame126("" + c.playerXP[20] + "", 4157);
  2811. sendFrame126("" + getXPForLevel(getLevelForXP(c.playerXP[20]) + 1) + "", 4159);
  2812. break;
  2813. }
  2814. }
  2815.  
  2816. public int getXPForLevel(int level) {
  2817. int points = 0;
  2818. int output = 0;
  2819.  
  2820. for (int lvl = 1; lvl <= level; lvl++) {
  2821. points += Math.floor(lvl + 300.0 * Math.pow(2.0, lvl / 7.0));
  2822. if (lvl >= level)
  2823. return output;
  2824. output = (int) Math.floor(points / 4);
  2825. }
  2826. return 0;
  2827. }
  2828.  
  2829. public int getLevelForXP(int exp) {
  2830. int points = 0;
  2831. int output = 0;
  2832. if (exp > 13034430)
  2833. return 99;
  2834. for (int lvl = 1; lvl <= 99; lvl++) {
  2835. points += Math.floor(lvl + 300.0 * Math.pow(2.0, lvl / 7.0));
  2836. output = (int) Math.floor(points / 4);
  2837. if (output >= exp) {
  2838. return lvl;
  2839. }
  2840. }
  2841. return 0;
  2842. }
  2843.  
  2844. public boolean addSkillXP(double amount, int skill) {
  2845. if (amount + c.playerXP[skill] < 0) {
  2846. return false;
  2847. }
  2848. if (Config.BONUS_WEEKEND && c.bonusXpTime == 0) {
  2849. amount *= Config.SERVER_EXP_BONUS_WEEKEND;
  2850. } else if (Config.BONUS_WEEKEND && c.bonusXpTime > 0) {
  2851. amount *= Config.SERVER_EXP_BONUS_WEEKEND_BOOSTED;
  2852. } else if (!Config.BONUS_WEEKEND && c.bonusXpTime > 0) {
  2853. amount *= Config.SERVER_EXP_BONUS_BOOSTED;
  2854. } else {
  2855. amount *= Config.SERVER_EXP_BONUS;
  2856. }
  2857. if (Boundary.isIn(c, Boundary.RESOURCE_AREA) && skill > 6) {
  2858. amount *= 1.10;
  2859. }
  2860. int oldLevel = getLevelForXP(c.playerXP[skill]);
  2861. if (c.playerXP[skill] + amount > 200000000) {
  2862. c.playerXP[skill] = 200000000;
  2863. } else {
  2864. c.playerXP[skill] += amount;
  2865. }
  2866. if (oldLevel < getLevelForXP(c.playerXP[skill])) {
  2867. if (c.playerLevel[skill] < c.getLevelForXP(c.playerXP[skill]) && skill != 3 && skill != 5)
  2868. c.playerLevel[skill] = c.getLevelForXP(c.playerXP[skill]);
  2869. c.combatLevel = c.calculateCombatLevel();
  2870. levelUp(skill);
  2871. c.gfx100(199);
  2872. requestUpdates();
  2873. }
  2874. setSkillLevel(skill, c.playerLevel[skill], c.playerXP[skill]);
  2875. refreshSkill(skill);
  2876. return true;
  2877. }
  2878.  
  2879. public boolean addSkillXP(int amount, int skill) {
  2880. if (c.expLock == true) {
  2881. return false;
  2882. }
  2883. if (amount + c.playerXP[skill] < 0) {
  2884. return false;
  2885. }
  2886. if (Config.BONUS_WEEKEND && c.bonusXpTime == 0) {
  2887. amount *= Config.SERVER_EXP_BONUS_WEEKEND;
  2888. } else if (Config.BONUS_WEEKEND && c.bonusXpTime > 0) {
  2889. amount *= Config.SERVER_EXP_BONUS_WEEKEND_BOOSTED;
  2890. } else if (!Config.BONUS_WEEKEND && c.bonusXpTime > 0) {
  2891. amount *= Config.SERVER_EXP_BONUS_BOOSTED;
  2892. } else {
  2893. amount *= Config.SERVER_EXP_BONUS;
  2894. }
  2895. int oldLevel = getLevelForXP(c.playerXP[skill]);
  2896. if (c.playerXP[skill] + amount > 200000000) {
  2897. c.playerXP[skill] = 200000000;
  2898. } else {
  2899. c.playerXP[skill] += amount;
  2900. }
  2901. if (oldLevel < getLevelForXP(c.playerXP[skill])) {
  2902. if (c.playerLevel[skill] < c.getLevelForXP(c.playerXP[skill]) && skill != 3 && skill != 5)
  2903. c.playerLevel[skill] = c.getLevelForXP(c.playerXP[skill]);
  2904. c.combatLevel = c.calculateCombatLevel();
  2905. levelUp(skill);
  2906. c.gfx100(199);
  2907. requestUpdates();
  2908. }
  2909. setSkillLevel(skill, c.playerLevel[skill], c.playerXP[skill]);
  2910. refreshSkill(skill);
  2911. return true;
  2912. }
  2913.  
  2914. public void resetBarrows() {
  2915. c.barrowsNpcs[0][1] = 0;
  2916. c.barrowsNpcs[1][1] = 0;
  2917. c.barrowsNpcs[2][1] = 0;
  2918. c.barrowsNpcs[3][1] = 0;
  2919. c.barrowsNpcs[4][1] = 0;
  2920. c.barrowsNpcs[5][1] = 0;
  2921. c.barrowsKillCount = 0;
  2922. c.randomCoffin = Misc.random(3) + 1;
  2923. }
  2924.  
  2925. // public static int Barrows[] = {4708, 4710, 4712, 4714, 4716, 4718, 4720,
  2926. // 4722, 4724, 4726, 4728, 4730, 4732, 4734, 4736, 4738, 4745, 4747, 4749,
  2927. // 4751, 4753, 4755, 4757, 4759};
  2928. public static int Runes[] = { 4740, 558, 560, 565 };
  2929. public static int Pots[] = {};
  2930.  
  2931. /*
  2932. * public int randomBarrows() { return
  2933. * Barrows[(int)(Math.random()*Barrows.length)]; }
  2934. */
  2935.  
  2936. public int randomRunes() {
  2937. return Runes[(int) (Math.random() * Runes.length)];
  2938. }
  2939.  
  2940. public int randomPots() {
  2941. return Pots[(int) (Math.random() * Pots.length)];
  2942. }
  2943.  
  2944. /**
  2945. * Show an arrow icon on the selected player.
  2946. *
  2947. * @Param i - Either 0 or 1; 1 is arrow, 0 is none.
  2948. * @Param j - The player/Npc that the arrow will be displayed above.
  2949. * @Param k - Keep this set as 0
  2950. * @Param l - Keep this set as 0
  2951. */
  2952. public void drawHeadicon(int i, int j, int k, int l) {
  2953. // synchronized(c) {
  2954. c.outStream.createFrame(254);
  2955. c.outStream.writeByte(i);
  2956.  
  2957. if (i == 1 || i == 10) {
  2958. c.outStream.writeWord(j);
  2959. c.outStream.writeWord(k);
  2960. c.outStream.writeByte(l);
  2961. } else {
  2962. c.outStream.writeWord(k);
  2963. c.outStream.writeWord(l);
  2964. c.outStream.writeByte(j);
  2965. }
  2966.  
  2967. }
  2968.  
  2969. public int getNpcId(int id) {
  2970. for (int i = 0; i < NPCHandler.maxNPCs; i++) {
  2971. if (NPCHandler.npcs[i] != null) {
  2972. if (NPCHandler.npcs[i].npcId == id) {
  2973. return i;
  2974. }
  2975. }
  2976. }
  2977. return -1;
  2978. }
  2979.  
  2980. public void removeObject(int x, int y) {
  2981. object(-1, x, y, 10, 10);
  2982. }
  2983.  
  2984. private void objectToRemove(int X, int Y) {
  2985. object(-1, X, Y, 10, 10);
  2986. }
  2987.  
  2988. private void objectToRemove2(int X, int Y) {
  2989. object(-1, X, Y, -1, 0);
  2990. }
  2991.  
  2992. public void removeObjects() {
  2993. objectToRemove(2638, 4688);
  2994. objectToRemove2(2635, 4693);
  2995. objectToRemove2(2634, 4693);
  2996. }
  2997.  
  2998. public void handleGlory(int gloryId) {
  2999. if (Server.getMultiplayerSessionListener().inAnySession(c)) {
  3000. c.sendMessage("You cannot do that right now.");
  3001. return;
  3002. }
  3003. c.getDH().sendOption4("Edgeville", "Al Kharid", "Karamja", "Mage Bank");
  3004. c.sendMessage("You rub the amulet...");
  3005. c.usingGlory = true;
  3006. }
  3007.  
  3008. public void resetVariables() {
  3009. if (c.playerIsCrafting) {
  3010. CraftingData.resetCrafting(c);
  3011. }
  3012. if (c.playerSkilling[9]) {
  3013. c.playerSkilling[9] = false;
  3014. }
  3015. if (c.isBanking) {
  3016. c.isBanking = false;
  3017. }
  3018. c.usingGlory = false;
  3019. c.smeltInterface = false;
  3020. // c.smeltAmount = 0;
  3021. if (c.dialogueAction > -1) {
  3022. c.dialogueAction = -1;
  3023. }
  3024. if (c.teleAction > -1) {
  3025. c.teleAction = -1;
  3026. }
  3027. if (c.craftDialogue) {
  3028. c.craftDialogue = false;
  3029. }
  3030. c.setInterfaceOpen(-1);
  3031. CycleEventHandler.getSingleton().stopEvents(c, CycleEventHandler.Event.BONE_ON_ALTAR);
  3032. }
  3033.  
  3034. public boolean inPitsWait() {
  3035. return c.getX() <= 2404 && c.getX() >= 2394 && c.getY() <= 5175 && c.getY() >= 5169;
  3036. }
  3037.  
  3038. public void castleWarsObjects() {
  3039. object(-1, 2373, 3119, -3, 10);
  3040. object(-1, 2372, 3119, -3, 10);
  3041. }
  3042. public double getAgilityRunRestore() {
  3043. return 2260 - (c.playerLevel[16] * 10);
  3044. }
  3045.  
  3046. public boolean checkForFlags() {
  3047. int[][] itemsToCheck = { { 995, 100000000 }, { 35, 5 }, { 667, 5 }, { 2402, 5 }, { 746, 5 }, { 4151, 150 }, { 565, 100000 }, { 560, 100000 },
  3048. { 555, 300000 }, { 11235, 10 } };
  3049. for (int j = 0; j < itemsToCheck.length; j++) {
  3050. if (itemsToCheck[j][1] < c.getItems().getTotalCount(itemsToCheck[j][0]))
  3051. return true;
  3052. }
  3053. return false;
  3054. }
  3055.  
  3056. /*
  3057. * Vengeance
  3058. */
  3059. public void castVeng() {
  3060. if (c.playerLevel[6] < 94) {
  3061. c.sendMessage("You need a magic level of 94 to cast this spell.");
  3062. return;
  3063. }
  3064. if (c.playerLevel[1] < 40) {
  3065. c.sendMessage("You need a defence level of 40 to cast this spell.");
  3066. return;
  3067. }
  3068. if (!c.getItems().playerHasItem(9075, 4) || !c.getItems().playerHasItem(557, 10) || !c.getItems().playerHasItem(560, 2)) {
  3069. c.sendMessage("You don't have the required runes to cast this spell.");
  3070. return;
  3071. }
  3072. if (System.currentTimeMillis() - c.lastCast < 30000) {
  3073. c.sendMessage("You can only cast vengeance every 30 seconds.");
  3074. return;
  3075. }
  3076. if (c.vengOn) {
  3077. c.sendMessage("You already have vengeance casted.");
  3078. return;
  3079. }
  3080. DuelSession session = (DuelSession) Server.getMultiplayerSessionListener().getMultiplayerSession(c, MultiplayerSessionType.DUEL);
  3081. if (!Objects.isNull(session)) {
  3082. if (session.getRules().contains(Rule.NO_MAGE)) {
  3083. c.sendMessage("You can't cast this spell because magic has been disabled.");
  3084. return;
  3085. }
  3086. }
  3087. c.startAnimation(4410);
  3088. c.gfx100(726);
  3089. c.getItems().deleteItem2(9075, 4);
  3090. c.getItems().deleteItem2(557, 10);
  3091. c.getItems().deleteItem2(560, 2);
  3092. addSkillXP(10000, 6);
  3093. refreshSkill(6);
  3094. c.vengOn = true;
  3095. c.lastCast = System.currentTimeMillis();
  3096. }
  3097.  
  3098. public void vengMe() {
  3099. if (c.lastVeng.elapsed(30000)) {
  3100. if (c.getItems().playerHasItem(557, 10) && c.getItems().playerHasItem(9075, 4) && c.getItems().playerHasItem(560, 2)) {
  3101. c.vengOn = true;
  3102. c.lastVeng.reset();
  3103. c.startAnimation(4410);
  3104. c.gfx100(726);
  3105. c.getItems().deleteItem(557, c.getItems().getItemSlot(557), 10);
  3106. c.getItems().deleteItem(560, c.getItems().getItemSlot(560), 2);
  3107. c.getItems().deleteItem(9075, c.getItems().getItemSlot(9075), 4);
  3108. } else {
  3109. c.sendMessage("You do not have the required runes to cast this spell. (9075 for astrals)");
  3110. }
  3111. } else {
  3112. c.sendMessage("You must wait 30 seconds before casting this again.");
  3113. }
  3114. }
  3115.  
  3116. public int totalLevel() {
  3117. int total = 0;
  3118. for (int i = 0; i <= 20; i++) {
  3119. total += getLevelForXP(c.playerXP[i]);
  3120. }
  3121. return total;
  3122. }
  3123.  
  3124. public int xpTotal() {
  3125. int xp = 0;
  3126. for (int i = 0; i <= 20; i++) {
  3127. xp += c.playerXP[i];
  3128. }
  3129. return xp;
  3130. }
  3131.  
  3132. public void addStarter() {
  3133. if (!Connection.hasRecieved1stStarter(PlayerHandler.players[c.playerId].connectedFrom)) {
  3134. for (int j = 0; j < PlayerHandler.players.length; j++) {
  3135. if (PlayerHandler.players[j] != null) {
  3136. Player c2 = (Player) PlayerHandler.players[j];
  3137. c2.sendMessage("[@blu@<img=10>New Player@bla@] "
  3138. + Misc.ucFirst(c.playerName) + " @bla@has logged in! Welcome!");
  3139. }
  3140. }
  3141.  
  3142. c.getDH().sendDialogues(2299, 0);
  3143. c.getItems().addItem(995, 2000000);
  3144. c.getItems().addItem(386, 1000);
  3145. c.getItems().addItem(6686, 1000);
  3146. c.getItems().addItem(3025, 1000);
  3147. c.getItems().addItem(2437, 1000);
  3148. c.getItems().addItem(2441, 1000);
  3149. c.getItems().addItem(3041, 1000);
  3150. c.getItems().addItem(2445, 1000);
  3151. c.getItems().addItem(560, 1000);
  3152. c.getItems().addItem(557, 1000);
  3153. c.getItems().addItem(9075, 1000);
  3154. c.getItems().addItem(555, 1000);
  3155. c.getItems().addItem(565, 1000);
  3156. Connection.addIpToStarterList1(PlayerHandler.players[c.playerId].connectedFrom);
  3157. Connection.addIpToStarter1(PlayerHandler.players[c.playerId].connectedFrom);
  3158. } else if (Connection.hasRecieved1stStarter(PlayerHandler.players[c.playerId].connectedFrom)
  3159. && !Connection
  3160. .hasRecieved2ndStarter(PlayerHandler.players[c.playerId].connectedFrom)) {
  3161. for (int j = 0; j < PlayerHandler.players.length; j++) {
  3162. if (PlayerHandler.players[j] != null) {
  3163. Player c2 = (Player) PlayerHandler.players[j];
  3164. c2.sendMessage("[@blu@<img=10>New Player@bla@] "
  3165. + Misc.ucFirst(c.playerName) + " @bla@has logged in! Welcome!");
  3166. }
  3167. }
  3168. c.getDH().sendDialogues(2299, 0);
  3169. c.getItems().addItem(995, 2000000);
  3170. c.getItems().addItem(386, 1000);
  3171. c.getItems().addItem(6686, 1000);
  3172. c.getItems().addItem(3025, 1000);
  3173. c.getItems().addItem(2437, 1000);
  3174. c.getItems().addItem(2441, 1000);
  3175. c.getItems().addItem(3041, 1000);
  3176. c.getItems().addItem(2445, 1000);
  3177. c.getItems().addItem(560, 1000);
  3178. c.getItems().addItem(557, 1000);
  3179. c.getItems().addItem(9075, 1000);
  3180. c.getItems().addItem(555, 1000);
  3181. c.getItems().addItem(565, 1000);
  3182. c.sendMessage("You have recieved 2 out of 2 starter packages.");
  3183. Connection
  3184. .addIpToStarterList2(PlayerHandler.players[c.playerId].connectedFrom);
  3185. Connection
  3186. .addIpToStarter2(PlayerHandler.players[c.playerId].connectedFrom);
  3187. } else if (Connection
  3188. .hasRecieved1stStarter(PlayerHandler.players[c.playerId].connectedFrom)
  3189. && Connection
  3190. .hasRecieved2ndStarter(PlayerHandler.players[c.playerId].connectedFrom)) {
  3191. for (int j = 0; j < PlayerHandler.players.length; j++) {
  3192. if (PlayerHandler.players[j] != null) {
  3193. Player c2 = (Player) PlayerHandler.players[j];
  3194. c2.sendMessage("[@blu@<img=10>New Player@bla@] "
  3195. + Misc.ucFirst(c.playerName) + " @bla@has logged in! Welcome!");
  3196. }
  3197. }
  3198. c.sendMessage("You have already recieved 2 starters!");
  3199. }
  3200. }
  3201.  
  3202. public void addStarterEco() {
  3203. if (!Connection.hasRecieved1stStarterEco(PlayerHandler.players[c.playerId].connectedFrom)) {
  3204. for (int j = 0; j < PlayerHandler.players.length; j++) {
  3205. if (PlayerHandler.players[j] != null) {
  3206. Player c2 = PlayerHandler.players[j];
  3207. c2.sendMessage("[@blu@<img=10>New Player@bla@] " + Misc.ucFirst(c.playerName) + " @bla@has logged in! Welcome!");
  3208. }
  3209. }
  3210. c.sendMessage("<img=11> Did you know? You can type @blu@::help@bla@ to request help from our staff members!");
  3211. c.getDH().sendDialogues(2299, 0);
  3212. c.getItems().addItem(995, 1000000);
  3213. c.getItems().addItem(386, 1000);
  3214. c.getItems().addItem(6686, 1000);
  3215. c.getItems().addItem(3025, 1000);
  3216. c.getItems().addItem(2437, 1000);
  3217. c.getItems().addItem(2441, 1000);
  3218. c.getItems().addItem(3041, 1000);
  3219. c.getItems().addItem(2445, 1000);
  3220. c.getItems().addItem(560, 1000);
  3221. c.getItems().addItem(557, 1000);
  3222. c.getItems().addItem(9075, 1000);
  3223. c.getItems().addItem(555, 1000);
  3224. c.getItems().addItem(565, 1000);
  3225. Connection.addIpToStarterListEco1(PlayerHandler.players[c.playerId].connectedFrom);
  3226. Connection.addIpToStarterEco1(PlayerHandler.players[c.playerId].connectedFrom);
  3227. } else if (Connection.hasRecieved1stStarterEco(PlayerHandler.players[c.playerId].connectedFrom)
  3228. && !Connection.hasRecieved2ndStarterEco(PlayerHandler.players[c.playerId].connectedFrom)) {
  3229. for (int j = 0; j < PlayerHandler.players.length; j++) {
  3230. if (PlayerHandler.players[j] != null) {
  3231. Player c2 = PlayerHandler.players[j];
  3232. c2.sendMessage("[@blu@<img=10>New Player@bla@] " + Misc.ucFirst(c.playerName) + " @bla@has logged in! Welcome!");
  3233. }
  3234. }
  3235. c.getDH().sendDialogues(2299, 0);
  3236. c.getItems().addItem(995, 2000000);
  3237. c.getItems().addItem(386, 1000);
  3238. c.getItems().addItem(6686, 1000);
  3239. c.getItems().addItem(3025, 1000);
  3240. c.getItems().addItem(2437, 1000);
  3241. c.getItems().addItem(2441, 1000);
  3242. c.getItems().addItem(3041, 1000);
  3243. c.getItems().addItem(2445, 1000);
  3244. c.getItems().addItem(560, 1000);
  3245. c.getItems().addItem(557, 1000);
  3246. c.getItems().addItem(9075, 1000);
  3247. c.getItems().addItem(555, 1000);
  3248. c.getItems().addItem(565, 1000);
  3249. c.sendMessage("You have recieved 2 out of 2 starter packages.");
  3250. c.sendMessage("<img=11> Did you know? You can type @blu@::help@bla@ to request help from our staff members!");
  3251. Connection.addIpToStarterListEco2(PlayerHandler.players[c.playerId].connectedFrom);
  3252. Connection.addIpToStarterEco2(PlayerHandler.players[c.playerId].connectedFrom);
  3253. } else if (Connection.hasRecieved1stStarterEco(PlayerHandler.players[c.playerId].connectedFrom)
  3254. && Connection.hasRecieved2ndStarterEco(PlayerHandler.players[c.playerId].connectedFrom)) {
  3255. for (int j = 0; j < PlayerHandler.players.length; j++) {
  3256. if (PlayerHandler.players[j] != null) {
  3257. Player c2 = PlayerHandler.players[j];
  3258. c2.sendMessage("[@blu@<img=10>New Player@bla@] " + Misc.ucFirst(c.playerName) + " @bla@has logged in! Welcome!");
  3259. }
  3260. }
  3261. c.sendMessage("You have already recieved 2 starters!");
  3262. c.sendMessage("<img=11> Did you know? You can type @blu@::help@bla@ to request help from our staff members!");
  3263. }
  3264. }
  3265.  
  3266. public void sendFrame34P2(int item, int slot, int frame, int amount) {
  3267. c.outStream.createFrameVarSizeWord(34);
  3268. c.outStream.writeWord(frame);
  3269. c.outStream.writeByte(slot);
  3270. c.outStream.writeWord(item + 1);
  3271. c.outStream.writeByte(255);
  3272. c.outStream.writeDWord(amount);
  3273. c.outStream.endFrameVarSizeWord();
  3274. }
  3275.  
  3276. public int getWearingAmount() {
  3277. int count = 0;
  3278. for (int j = 0; j < c.playerEquipment.length; j++) {
  3279. if (c.playerEquipment[j] > 0)
  3280. count++;
  3281. }
  3282. return count;
  3283. }
  3284. public void startSlayerTeleport() {
  3285. if (c.inWild()) {
  3286. c.sendMessage("You can not teleport to your task whilst in the wilderness.");
  3287. return;
  3288. }
  3289. if (Server.getMultiplayerSessionListener().inAnySession(c)) {
  3290. c.sendMessage("Finish what you are doing before teleporting to your task.");
  3291. return;
  3292. }
  3293. switch(c.slayerTask){
  3294. case 273:
  3295. TeleportExecutor.teleport(c, new Position(2706, 9450, 0));
  3296. break;
  3297. case 270:
  3298. TeleportExecutor.teleport(c, new Position(2731, 9484, 0));
  3299. break;
  3300. case 85:
  3301. TeleportExecutor.teleport(c, new Position(2903, 9849, 0));
  3302. break;
  3303. case 448:
  3304. TeleportExecutor.teleport(c, new Position(3416,3536,0));
  3305. break;
  3306. case 2834:
  3307. TeleportExecutor.teleport(c, new Position(2913, 9832, 0));
  3308. break;
  3309. case 437:
  3310. TeleportExecutor.teleport(c, new Position(2705, 10028, 0));
  3311. break;
  3312. case 419:
  3313. TeleportExecutor.teleport(c, new Position(2802, 10034, 0));
  3314. break;
  3315. case 417:
  3316. TeleportExecutor.teleport(c, new Position(2745, 10005, 0));
  3317. break;
  3318. case 435:
  3319. TeleportExecutor.teleport(c, new Position(2761, 10011, 0));
  3320. break;
  3321. case 2840:
  3322. TeleportExecutor.teleport(c, new Position(3121, 9970, 0));
  3323. break;
  3324. case 2025:
  3325. TeleportExecutor.teleport(c, new Position(2635, 9505, 2));
  3326. break;
  3327. case 2098:
  3328. TeleportExecutor.teleport(c, new Position(3118, 9838, 0));
  3329. break;
  3330. case 2084:
  3331. TeleportExecutor.teleport(c, new Position(2645, 9491, 0));
  3332. break;
  3333. case 411:
  3334. TeleportExecutor.teleport(c, new Position(2701, 9997, 0));
  3335. break;
  3336. case 119:
  3337. TeleportExecutor.teleport(c, new Position(2895, 9769, 0));
  3338. break;
  3339. case 18:
  3340. TeleportExecutor.teleport(c, new Position(3293, 3171, 0));
  3341. break;
  3342. case 181:
  3343. TeleportExecutor.teleport(c, new Position(2932, 9847, 0));
  3344. break;
  3345. case 446:
  3346. TeleportExecutor.teleport(c, new Position(3436, 3560, 1));
  3347. break;
  3348. case 484:
  3349. TeleportExecutor.teleport(c, new Position(3418, 3563, 1));
  3350. break;
  3351. case 264:
  3352. TeleportExecutor.teleport(c, new Position(2988, 3597, 0));
  3353. break;
  3354. case 2005:
  3355. TeleportExecutor.teleport(c, new Position(2932, 9800, 0));
  3356. break;
  3357. case 52:
  3358. TeleportExecutor.teleport(c, new Position(2916, 9801, 0));
  3359. break;
  3360. case 1612:
  3361. TeleportExecutor.teleport(c, new Position(3438, 3560, 0));
  3362. break;
  3363. case 891:
  3364. TeleportExecutor.teleport(c, new Position(2675, 9549, 0));
  3365. break;
  3366. case 125:
  3367. TeleportExecutor.teleport(c, new Position(2954, 3892, 0));
  3368. break;
  3369. case 1341:
  3370. TeleportExecutor.teleport(c, new Position(2452, 10152, 0));
  3371. break;
  3372. case 424:
  3373. TeleportExecutor.teleport(c, new Position(3422, 3541, 1));
  3374. break;
  3375. case 1543:
  3376. TeleportExecutor.teleport(c, new Position(3442, 3554, 2));
  3377. break;
  3378. case 11:
  3379. TeleportExecutor.teleport(c, new Position(3440, 3566, 2));
  3380. break;
  3381. case 2919:
  3382. TeleportExecutor.teleport(c, new Position(1748, 5328, 0));
  3383. break;
  3384. case 415:
  3385. TeleportExecutor.teleport(c, new Position(3419, 3568, 2));
  3386. break;
  3387. case 268:
  3388. TeleportExecutor.teleport(c, new Position(2897, 9800, 0));
  3389. break;
  3390. case 259:
  3391. TeleportExecutor.teleport(c, new Position(2833, 9824, 0));
  3392. break;
  3393. case 1432:
  3394. TeleportExecutor.teleport(c, new Position(2864, 9775, 0));
  3395. break;
  3396. case 135:
  3397. TeleportExecutor.teleport(c, new Position(2857, 9840, 0));
  3398. break;
  3399. case 4005:
  3400. TeleportExecutor.teleport(c, new Position(2907, 9692, 0));
  3401. break;
  3402. case 247:
  3403. TeleportExecutor.teleport(c, new Position(2698, 9512, 0));
  3404. break;
  3405. case 924:
  3406. TeleportExecutor.teleport(c, new Position(3105, 9949, 0));
  3407. break;
  3408. case 274:
  3409. TeleportExecutor.teleport(c, new Position(2712, 9432, 0));
  3410. break;
  3411. case 50:
  3412. case 3200:
  3413. c.sendMessage("Use the boss teleports for this task.");
  3414. break;
  3415. case 2745:
  3416. case 2167:
  3417. c.sendMessage("Use the minigames teleports for this task.");
  3418. break;
  3419. case 9467:
  3420. TeleportExecutor.teleport(c, new Position(2521, 4646, 0));
  3421. break;
  3422. case 9465:
  3423. TeleportExecutor.teleport(c, new Position(2521, 4646, 0));
  3424. break;
  3425. case 9463:
  3426. TeleportExecutor.teleport(c, new Position(2521, 4646, 0));
  3427. break;
  3428. default:
  3429. c.sendMessage("Could not find a teleportation location.");
  3430. break;
  3431. }
  3432.  
  3433. }
  3434. public void useOperate(int itemId) {
  3435. Optional<DegradableItem> d = DegradableItem.forId(itemId);
  3436. if (d.isPresent()) {
  3437. Degrade.checkPercentage(c, itemId);
  3438. return;
  3439. }
  3440. switch (itemId) {
  3441. case 4202:
  3442. startSlayerTeleport();
  3443. break;
  3444. case 11283:
  3445. DragonfireShieldEffect dfsEffect = new DragonfireShieldEffect();
  3446. if (c.npcIndex <= 0 && c.playerIndex <= 0) {
  3447. return;
  3448. }
  3449. if (dfsEffect.isExecutable(c)) {
  3450. Damage damage = new Damage(Misc.random(25));
  3451. if (c.playerIndex > 0) {
  3452. Player target = PlayerHandler.players[c.playerIndex];
  3453. if (Objects.isNull(target)) {
  3454. return;
  3455. }
  3456. c.attackTimer = 7;
  3457. dfsEffect.execute(c, target, damage);
  3458. c.setLastDragonfireShieldAttack(System.currentTimeMillis());
  3459. } else if (c.npcIndex > 0) {
  3460. NPC target = NPCHandler.npcs[c.npcIndex];
  3461. if (Objects.isNull(target)) {
  3462. return;
  3463. }
  3464. c.attackTimer = 7;
  3465. dfsEffect.execute(c, target, damage);
  3466. c.setLastDragonfireShieldAttack(System.currentTimeMillis());
  3467. }
  3468. }
  3469. break;
  3470.  
  3471. case 1712:
  3472. case 1710:
  3473. case 1708:
  3474. case 1706:
  3475. c.getPA().handleGlory(itemId);
  3476. c.itemUsing = itemId;
  3477. c.isOperate = true;
  3478. break;
  3479. case 2552:
  3480. case 2554:
  3481. case 2556:
  3482. case 2558:
  3483. case 2560:
  3484. case 2562:
  3485. case 2564:
  3486. case 2566:
  3487. TeleportExecutor.teleport(c, new Position(3362, 3263, 0));
  3488. break;
  3489. }
  3490. }
  3491.  
  3492. public void getSpeared(int otherX, int otherY, int distance) {
  3493. int x = c.absX - otherX;
  3494. int y = c.absY - otherY;
  3495. int xOffset = 0;
  3496. int yOffset = 0;
  3497. DuelSession session = (DuelSession) Server.getMultiplayerSessionListener().getMultiplayerSession(c, MultiplayerSessionType.DUEL);
  3498. if (Objects.nonNull(session) && session.getStage().getStage() == MultiplayerSessionStage.FURTHER_INTERACTION) {
  3499. c.sendMessage("You cannot use this special whilst in the duel arena.");
  3500. return;
  3501. }
  3502. if (x > 0) {
  3503. if (Region.getClipping(c.getX() + distance, c.getY(), c.heightLevel, 1, 0)) {
  3504. xOffset = distance;
  3505. }
  3506. } else if (x < 0) {
  3507. if (Region.getClipping(c.getX() - distance, c.getY(), c.heightLevel, -1, 0)) {
  3508. xOffset = -distance;
  3509. }
  3510. }
  3511. if (y > 0) {
  3512. if (Region.getClipping(c.getX(), c.getY() + distance, c.heightLevel, 0, 1)) {
  3513. yOffset = distance;
  3514. }
  3515. } else if (y < 0) {
  3516. if (Region.getClipping(c.getX(), c.getY() - distance, c.heightLevel, 0, -1)) {
  3517. yOffset = -distance;
  3518. }
  3519. }
  3520. moveCheck(xOffset, yOffset, distance);
  3521. c.lastSpear.reset();
  3522. }
  3523.  
  3524. public void moveCheck(int x, int y, int distance) {
  3525. PathFinder.getPathFinder().findRoute(c, c.getX() + x, c.getY() + y, true, 1, 1);
  3526. }
  3527.  
  3528. public void resetTzhaar() {
  3529. c.waveId = -1;
  3530. c.tzhaarToKill = -1;
  3531. c.tzhaarKilled = -1;
  3532. }
  3533.  
  3534. public boolean checkForPlayer(int x, int y) {
  3535. for (Player p : PlayerHandler.players) {
  3536. if (p != null) {
  3537. if (p.getX() == x && p.getY() == y)
  3538. return true;
  3539. }
  3540. }
  3541. return false;
  3542. }
  3543.  
  3544. public void checkPouch(int i) {
  3545. if (i < 0)
  3546. return;
  3547. c.sendMessage("This pouch has " + c.pouches[i] + " rune ess in it.");
  3548. }
  3549.  
  3550. public void fillPouch(int i) {
  3551. if (i < 0)
  3552. return;
  3553. int toAdd = c.POUCH_SIZE[i] - c.pouches[i];
  3554. if (toAdd > c.getItems().getItemAmount(1436)) {
  3555. toAdd = c.getItems().getItemAmount(1436);
  3556. }
  3557. if (toAdd > c.POUCH_SIZE[i] - c.pouches[i])
  3558. toAdd = c.POUCH_SIZE[i] - c.pouches[i];
  3559. if (toAdd > 0) {
  3560. c.getItems().deleteItem(1436, toAdd);
  3561. c.pouches[i] += toAdd;
  3562. }
  3563. }
  3564.  
  3565. public void emptyPouch(int i) {
  3566. if (i < 0)
  3567. return;
  3568. int toAdd = c.pouches[i];
  3569. if (toAdd > c.getItems().freeSlots()) {
  3570. toAdd = c.getItems().freeSlots();
  3571. }
  3572. if (toAdd > 0) {
  3573. c.getItems().addItem(1436, toAdd);
  3574. c.pouches[i] -= toAdd;
  3575. }
  3576. }
  3577.  
  3578. /*
  3579. * public void fixAllBarrows() { int totalCost = 0; int cashAmount =
  3580. * c.getItems().getItemAmount(995); for (int j = 0; j <
  3581. * c.playerItems.length; j++) { boolean breakOut = false; for (int i = 0; i
  3582. * < c.getItems().brokenBarrows.length; i++) { if (c.playerItems[j]-1 ==
  3583. * c.getItems().brokenBarrows[i][1]) { if (totalCost + 80000 > cashAmount) {
  3584. * breakOut = true; c.sendMessage("You have run out of money."); break; }
  3585. * else { totalCost += 80000; } c.playerItems[j] =
  3586. * c.getItems().brokenBarrows[i][0]+1; } } if (breakOut) break; } if
  3587. * (totalCost > 0) c.getItems().deleteItem(995,
  3588. * c.getItems().getItemSlot(995), totalCost); }
  3589. */
  3590.  
  3591. public void handleLoginText() {
  3592. c.getPA().sendFrame126("PK Hotspots", 1300);
  3593. c.getPA().sendFrame126("Teleport to a PK hotspot", 1301);
  3594. c.getPA().sendFrame126("Minigame Teleports", 1325);
  3595. c.getPA().sendFrame126("Teleport to a minigame", 1326);
  3596. c.getPA().sendFrame126("Boss Teleports", 1350);
  3597. c.getPA().sendFrame126("Teleport to a boss", 1351);
  3598. c.getPA().sendFrame126("Skilling Area", 1382);
  3599. c.getPA().sendFrame126("Teleport to skilling areas", 1383);
  3600. c.getPA().sendFrame126("Monster Teleports", 1415);
  3601. c.getPA().sendFrame126("Teleports you to various monsters", 1416);
  3602. c.getPA().sendFrame126("Training Teleport", 1454);
  3603. c.getPA().sendFrame126("Teleports you to Rock Crabs", 1455);
  3604. c.getPA().sendFrame126("PK Hotspots", 13037);
  3605. c.getPA().sendFrame126("Teleport to a PK hotspot", 13038);
  3606. c.getPA().sendFrame126("Minigame Teleports", 13047);
  3607. c.getPA().sendFrame126("Teleport to a minigame", 13048);
  3608. c.getPA().sendFrame126("Boss Teleports", 13055);
  3609. c.getPA().sendFrame126("Teleport to a boss", 13056);
  3610. c.getPA().sendFrame126("Skilling Area", 13063);
  3611. c.getPA().sendFrame126("Teleport to skilling areas", 13064);
  3612. c.getPA().sendFrame126("Monster Teleports", 13071);
  3613. c.getPA().sendFrame126("Teleports you to various monsters", 13072);
  3614. c.getPA().sendFrame126("Training Teleport", 13081);
  3615. c.getPA().sendFrame126("Teleports you to Rock Crabs", 13082);
  3616.  
  3617.  
  3618. /*
  3619. * c.getPA().sendFrame126("Ardougne Teleport", 1415);
  3620. * c.getPA().sendFrame126("", 1416);
  3621. * c.getPA().sendFrame126("Watchtower Teleport", 1454);
  3622. * c.getPA().sendFrame126("", 1455);
  3623. * c.getPA().sendFrame126("Dareevak Teleport", 13071);
  3624. * c.getPA().sendFrame126("", 13072);
  3625. * c.getPA().sendFrame126("Trollheim Teleport", 7457);
  3626. * c.getPA().sendFrame126("", 7458);
  3627. * c.getPA().sendFrame126("Ghorrock Teleport", 13097);
  3628. * c.getPA().sendFrame126("", 13098);
  3629. * c.getPA().sendFrame126("Annakarl Teleport", 13089);
  3630. * c.getPA().sendFrame126("", 13090);
  3631. * c.getPA().sendFrame126("Carrallanger Teleport", 13081);
  3632. * c.getPA().sendFrame126("", 13082); * //modern
  3633. * c.getPA().sendFrame126("Teleport name", 1300); //varrock
  3634. * c.getPA().sendFrame126("Description", 1301); //varrock description
  3635. * c.getPA().sendFrame126("Teleport name", 1325); //lumbridge
  3636. * c.getPA().sendFrame126("Description", 1326); //lumbridge description
  3637. * c.getPA().sendFrame126("Teleport name", 1350); //falador
  3638. * c.getPA().sendFrame126("Description", 1351); //falador description
  3639. * c.getPA().sendFrame126("Teleport name", 1382); //camelot
  3640. * c.getPA().sendFrame126("Description", 1383); //camelot description
  3641. * c.getPA().sendFrame126("Teleport name", 1415); //ardougne
  3642. * c.getPA().sendFrame126("Description", 1416); //ardougne description
  3643. * c.getPA().sendFrame126("Teleport name", 1454); //watchtower
  3644. * c.getPA().sendFrame126("Description", 1455); //watchtower description
  3645. * c.getPA().sendFrame126("Teleport name", 7457); //trollheim
  3646. * c.getPA().sendFrame126("Description", 7458); //trollheim description
  3647. * c.getPA().sendFrame126("Teleport name", 18472); //ape atoll
  3648. * c.getPA().sendFrame126("Description", 18473); //ape atoll description
  3649. *
  3650. * //ancients c.getPA().sendFrame126("Teleport name", 13037); //paddewwa
  3651. * c.getPA().sendFrame126("Monster Teleport", 13038); //paddewwa
  3652. * description c.getPA().sendFrame126("Teleport name", 13047);
  3653. * //senntisten c.getPA().sendFrame126("Description", 13048);
  3654. * //senntisten description c.getPA().sendFrame126("Teleport name",
  3655. * 13055); //kharyll c.getPA().sendFrame126("Description", 13056);
  3656. * //kharyll description c.getPA().sendFrame126("Teleport name", 13063);
  3657. * //lassar c.getPA().sendFrame126("Description", 13064); //lassar
  3658. * description c.getPA().sendFrame126("Teleport name", 13071);
  3659. * //dareeyak c.getPA().sendFrame126("Description", 13072); //dareeyak
  3660. * description c.getPA().sendFrame126("Teleport name", 13081);
  3661. * //carrallanger c.getPA().sendFrame126("Description", 13082);
  3662. * //carralanger description c.getPA().sendFrame126("Teleport name",
  3663. * 13089); //annakarl c.getPA().sendFrame126("Description", 13090);
  3664. * //annakarl description c.getPA().sendFrame126("Teleport name",
  3665. * 13097); //ghorrock c.getPA().sendFrame126("Description", 13098);
  3666. * //ghorrock description
  3667. */
  3668. }
  3669.  
  3670. /*
  3671. * public void handleLoginText() {
  3672. * c.getPA().sendFrame126("Training Teleport", 13037);
  3673. * c.getPA().sendFrame126("Duel Arena", 13047);
  3674. * c.getPA().sendFrame126("Boss Teleport", 13055);
  3675. * c.getPA().sendFrame126("Wilderness Teleport", 13063);
  3676. * c.getPA().sendFrame126("Ardougne Teleport", 13071);
  3677. * c.getPA().sendFrame126("Training Teleport", 1300);
  3678. * c.getPA().sendFrame126("Duel Arena", 1325);
  3679. * c.getPA().sendFrame126("Boss Teleport", 1350);
  3680. * c.getPA().sendFrame126("Wilderness Teleport", 1382);
  3681. * c.getPA().sendFrame126("Cities Teleport", 1415); }
  3682. */
  3683.  
  3684. public void handleWeaponStyle() {
  3685. if (c.fightMode == 0) {
  3686. c.getPA().sendFrame36(43, c.fightMode);
  3687. } else if (c.fightMode == 1) {
  3688. c.getPA().sendFrame36(43, 3);
  3689. } else if (c.fightMode == 2) {
  3690. c.getPA().sendFrame36(43, 1);
  3691. } else if (c.fightMode == 3) {
  3692. c.getPA().sendFrame36(43, 2);
  3693. }
  3694. }
  3695.  
  3696. /**
  3697. *
  3698. * @author Jason MacKeigan (http://www.rune-server.org/members/jason)
  3699. * @date Sep 26, 2014, 12:57:42 PM
  3700. */
  3701. public enum PointExchange {
  3702. PK_POINTS, VOTE_POINTS;
  3703. }
  3704.  
  3705. /**
  3706. * Exchanges all items in the player owners inventory to a specific to
  3707. * whatever the exchange specifies. Its up to the switch statement to make
  3708. * the conversion.
  3709. *
  3710. * @param pointVar
  3711. * the point exchange we're trying to make
  3712. * @param itemId
  3713. * the item id being exchanged
  3714. * @param exchangeRate
  3715. * the exchange rate for each item
  3716. */
  3717. public void exchangeItems(PointExchange pointVar, int itemId, int exchangeRate) {
  3718. try {
  3719. int amount = c.getItems().getItemAmount(itemId);
  3720. String pointAlias = Misc.ucFirst(pointVar.name().toLowerCase().replaceAll("_", " "));
  3721. if (exchangeRate <= 0 || itemId < 0) {
  3722. throw new IllegalStateException();
  3723. }
  3724. if (amount <= 0) {
  3725. c.getDH().sendStatement("You do not have the items required to exchange", "for " + pointAlias + ".");
  3726. c.nextChat = -1;
  3727. return;
  3728. }
  3729. int exchange = amount * exchangeRate;
  3730. c.getItems().deleteItem2(itemId, amount);
  3731. switch (pointVar) {
  3732. case PK_POINTS:
  3733. c.pkp += exchange;
  3734. break;
  3735.  
  3736. case VOTE_POINTS:
  3737. c.votePoints += exchange;
  3738. break;
  3739. }
  3740. c.getDH().sendStatement("You exchange " + amount + " tickets for " + exchange + " " + pointAlias + ".");
  3741. c.nextChat = -1;
  3742. } catch (IllegalStateException exception) {
  3743. Misc.println("WARNING: Illegal state has been reached.");
  3744. exception.printStackTrace();
  3745. }
  3746. }
  3747.  
  3748. /**
  3749. * Sends some information to the client about screen fading.
  3750. * @param text the text that will be displayed in the center of the screen
  3751. * @param state the state should be either 0, -1, or 1.
  3752. * @param seconds the amount of time in seconds it takes for the fade
  3753. * to transition.
  3754. * <p>
  3755. * If the state is -1 then the screen fades from black to transparent.
  3756. * When the state is +1 the screen fades from transparent to black. If
  3757. * the state is 0 all drawing is stopped.
  3758. */
  3759. public void sendScreenFade(String text, int state, int seconds) {
  3760. if (c == null || c.getOutStream() == null) {
  3761. return;
  3762. }
  3763. if (seconds < 1 && state != 0) {
  3764. throw new IllegalArgumentException("The amount of seconds cannot be less than one.");
  3765. }
  3766. c.getOutStream().createFrameVarSize(9);
  3767. c.getOutStream().writeString(text);
  3768. c.getOutStream().writeByte(state);
  3769. c.getOutStream().writeByte(seconds);
  3770. c.getOutStream().endFrameVarSize();
  3771. }
  3772.  
  3773. public void stillCamera(int x, int y, int height, int speed, int angle) {
  3774. c.outStream.createFrame(177);
  3775. c.outStream.writeByte(x / 64);
  3776. c.outStream.writeByte(y / 64);
  3777. c.outStream.writeWord(height);
  3778. c.outStream.writeByte(speed);
  3779. c.outStream.writeByte(angle);
  3780. }
  3781.  
  3782. public void spinCamera(int i1, int i2, int i3, int i4, int i5) {
  3783. c.outStream.createFrame(166);
  3784. c.outStream.writeByte(i1);
  3785. c.outStream.writeByte(i2);
  3786. c.outStream.writeWord(i3);
  3787. c.outStream.writeByte(i4);
  3788. c.outStream.writeByte(i5);
  3789. }
  3790.  
  3791. public void resetCamera() {
  3792. c.outStream.createFrame(107);
  3793. c.updateRequired = true;
  3794. c.appearanceUpdateRequired = true;
  3795. }
  3796. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement