Guest User

Untitled

a guest
Oct 15th, 2017
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 498.80 KB | None | 0 0
  1.  
  2. import java.io.*;
  3. import java.util.StringTokenizer;
  4. import java.util.Calendar;
  5. import java.util.GregorianCalendar;
  6. import java.util.*;
  7. import java.text.*;
  8. import java.util.concurrent.*;
  9.  
  10. //2400,4446
  11.  
  12. public class client extends Player implements Runnable {
  13. public int currentButton = 0, currentStatus = 0;
  14. public boolean runStream = true;
  15. public boolean inroom = false, ingame = false;
  16. public long actionInterval = 0;
  17. public boolean cooking = false;
  18. public int gauntless = 775, chefshat = 0, cookie = 0, cookAmount = -1;
  19. public long fishspeed = 0;
  20. public int NPCSlot;
  21. public int NPCID;
  22. public int interfaceId = 0;
  23. public int npcSlot = 0;
  24. public int itemId = 0;
  25.  
  26.  
  27.  
  28.  
  29. public int clickCount = 0;
  30. public int apickupid = -1,apickupx = -1,apickupy = -1;
  31. public boolean spamButton = false;
  32. public int[] herbs = {249,253,257,259,263,265,267};
  33. public int[]duelButtons = {
  34. 26069, 26070, 26071, 30136, 2158, 26065, 26072, 26073, 26074, 26066, 26076
  35. };
  36. public String[]duelNames = {
  37. "No Ranged", "No Melee", "No Magic", "No Gear Change", "Fun Weapons", "No Retreat", "No Drinks", "No Food", "No prayer", "No Movement", "Obstacles"
  38. };
  39. public boolean[]duelRule = {
  40. false, false, false, false, false, true, false, true, false, true, false
  41. };
  42. public int[]duelLine = {
  43. 6698, 6699, 6697, 7817, 669, 6696, 6701, 6702, 6703, 6704, 6731
  44. };
  45. public boolean duelRequested = false, inDuel = false, duelConfirmed = false, duelConfirmed2 = false, duelResetNeeded = false, duelFight = false;
  46. public int duel_with = 0;
  47. public boolean tradeRequested = false, inTrade = false, canOffer = true, tradeConfirmed = false, tradeConfirmed2 = false, tradeResetNeeded = false;
  48. public int trade_reqId = 0, trade_other;
  49. public CopyOnWriteArrayList<GameItem> offeredItems = new CopyOnWriteArrayList<GameItem>();
  50. public CopyOnWriteArrayList<GameItem> otherOfferedItems = new CopyOnWriteArrayList<GameItem>();
  51. public boolean adding = false, emoting = false;
  52. String[]lastMessage = new String[3];
  53. long animationReset = 0, lastButton = 0;
  54. //Devolution: fishing
  55. int fishTries, fishId;
  56. boolean fishing = false;
  57. //Devolution: teleports
  58. int tX = 0, tY = 0, tStage = 0, tH = 1;
  59. long tTime = 0;
  60. //Devolution: crafting
  61. boolean crafting = false;
  62. int cItem = -1;
  63. int cAmount = 0;
  64. int cLevel = 1;
  65. int cExp = 0;
  66. int cSelected = -1, cIndex = -1;
  67. public boolean wonDuel = false;
  68. public boolean thieving = false;
  69.  
  70. public String tradestatus = "";
  71.  
  72. public String dMsg = "";
  73. public int angle = 250;
  74.  
  75. boolean dialog = true, spinning = false;
  76. int dialogInterface = 2459, dialogId = 1;
  77. public boolean fletching = false;
  78. public int fletchId = -1, fletchAmount = -1, fletchLog = -1, originalW = -1, originalS = -1, fletchExp = 0;
  79. public boolean smelting = false;
  80. public int smelt_id, smeltCount;
  81.  
  82. public boolean shafting = false;
  83. public int random_skill = -1, npcId = -1;
  84. public long lastProcess = 0;
  85. public int clickIndex = 0;
  86. public int autocast_spellIndex = -1;
  87. public int[]clicks = new int[50];
  88. public int loginDelay = 1;
  89. public boolean validClient = true, muted = false, attackedNpc = false;
  90. public int attackedNpcId = -1;
  91. /* --------MOD BOT-----------
  92. // MB = MOD BOT
  93. // -TC = Text Censor
  94. // -BC = Bad Command
  95. // -HT = Help Text
  96. // -ID = Item Duping*/
  97. public String MBTC;
  98. public boolean member = false;
  99. public String MBBC;
  100. public String MBHT;
  101. public String MBID;
  102. public boolean ani = false;
  103. public int anim = 0;
  104. public boolean anima = false;
  105. public int animat = 0;
  106. public boolean re = false;
  107. public int teleReq = 0;
  108. public String teleLoc = "";
  109. public boolean teleOtherScreen = false;
  110. public boolean saveNeeded = true;
  111. public boolean lookNeeded = false;
  112. public int[]requiredLevel = {
  113. 1, 52, 56, 58, 62, 64, 68, 70, 74, 76, 80, 82, 86, 88, 92, 94
  114. };
  115.  
  116. public int[]rune1 = {
  117. 556, 558, 554, 555, 556, 558, 554, 555, 556, 558, 554, 555, 556, 558, 554, 555
  118. };
  119.  
  120. public int[]rune1a = {
  121. 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 5, 5, 5, 5
  122. };
  123.  
  124. public int[]rune2 = {
  125. -1, -1, -1, -1, 562, 562, 560, 563, 562, 562, 560, 563, 562, 562, 560, 563
  126. };
  127.  
  128. public int[]rune2a = {
  129. 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 3, 3, 2, 2
  130. };
  131.  
  132. public int[]rune3 = {
  133. -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 565, 566, -1, -1, 565, 566
  134. };
  135.  
  136. public int[]rune3a = {
  137. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1
  138. };
  139.  
  140. public int[]baseDamage = {
  141. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
  142. };
  143. public int[]ancientId = {
  144. 12939, 12987, 12901, 12861, 12963, 13011, 12919, 12881, 12951, 12999, 12911, 12871, 12975, 13023, 12929, 12891
  145. };
  146. public int[]ancientType = {
  147. 0, 0, 2, 3, 0, 0, 2, 3, 0, 0, 2, 3, 0, 0, 2, 3
  148. };
  149. public int[]ancientButton = {
  150. 51133, 51185, 51091, 24018, 51159, 51211, 51111, 51069, 51146, 51198, 51102, 51058, 51172, 51224, 51122, 51080
  151. };
  152. public int[]noTrade = {
  153. 1543, 1544, 1545, 1546, 1635, 1636, 4171
  154. };
  155. public int[]casketItems = {
  156. 4724, 4726, 4728, 4730, 1050, 1053, 1055, 1057, 1037, 3107, 4708, 4710, 4712, 4714, 2904, 777, 2414
  157. };
  158. public long[]coolDown = {
  159. 2500, 3000, 2600, 5000,
  160. 2400, 2900, 2400, 4800,
  161. 2300, 2800, 2200, 4600,
  162. 2200, 2700, 2000, 4400
  163. };
  164. public int[]effects = new int[10];
  165. public boolean friendUpdate = false, lookUpdate = false;
  166. //public int[] killers = new int[server.playerHandler.maxPlayers];
  167. public String properName = "";
  168. public int barTimer = 0, saveTimer = 0;
  169. public int actionButtonId = 0;
  170. public int enemyId = -1, enemyX = -1, enemyY = -1, attackTimer = 0;
  171. public int thiefdelay = 0;
  172. public long thieflol = 0;
  173. public long lastAttack = 0;
  174. public boolean oddDeath = false;
  175. public boolean officialClient = false;
  176. public long[]globalCooldown = new long[10];
  177. public boolean validLogin = false;
  178. //public int[] restrictedItem = { 4716, 4718, 4720, 4722, 4724, 4726, 4728, 4730};
  179.  
  180. public void teleOtherRequest(String teleLocation, int player) {
  181. String telePlayer = server.playerHandler.players[player].playerName;
  182.  
  183. sendQuest(telePlayer, 12558);
  184. sendQuest(teleLocation, 12560);
  185. showInterface(12468);
  186. teleReq = player;
  187. teleLoc = teleLocation;
  188. teleOtherScreen = true;
  189. }
  190.  
  191. public void test(int[][]item, double[]chance){
  192. double roll = Math.random() * 100;
  193. int r = misc.random(item.length-1);
  194. if(roll <= chance[r]) {
  195. addItem(item[r][0],item[r][1]);
  196. sendMessage("You recive "+item[r][1]+" "+GetItemName(item[r][0])+"");
  197. } else {
  198. sendMessage("it's all empty.");
  199. }
  200. }
  201.  
  202.  
  203.  
  204. public int EntangleDelay = 0;
  205.  
  206. public void entangle() {
  207. EntangleDelay = 20;
  208. }
  209. public void uberentangle() {
  210. EntangleDelay = 40;
  211. }
  212. public void spawn(int id, int x, int y, int hl) {
  213. server.npcHandler.newSummonedNPC(id, x, y-1, hl, x-1, y-1, x+1, y-1, 1, 0, false, playerId);
  214. }
  215. //different message type!//
  216. public void item1(boolean send, String t, int i, String a){
  217. sendFrame200(4883, 591);
  218. sendFrame126(t, 4884);
  219. sendFrame126(a, 4885);
  220. sendFrame126("Click here to continue", 4886);
  221. sendFrame246(4883, 250, i);
  222. sendFrame164(4882);
  223. NpcDialogueSend = send;
  224. }
  225. public void item1t(boolean send, String t, int i, int b, String a){
  226. sendFrame200(4883, 591);
  227. sendFrame126(t, 4884);
  228. sendFrame126(a, 4885);
  229. sendFrame126("Click here to continue", 4886);
  230. sendFrame246(4883, b, i);
  231. sendFrame164(4882);
  232. NpcDialogueSend = send;
  233. }
  234. public void item2(boolean send, String t, int i, String a, String b){
  235. sendFrame200(4888, 591);
  236. sendFrame126(t, 4889);
  237. sendFrame126(a, 4890);
  238. sendFrame126(b, 4891);
  239. sendFrame126("Click here to continue", 4892);
  240. sendFrame246(4888, 250, i);
  241. sendFrame164(4887);
  242. NpcDialogueSend = send;
  243. }
  244. public void item3(boolean send, String t, int i, String a, String b, String c){
  245. sendFrame200(4894, 591);
  246. sendFrame126(t, 4895);
  247. sendFrame126(a, 4896);
  248. sendFrame126(b, 4897);
  249. sendFrame126(c, 4898);
  250. sendFrame126("Click here to continue", 4899);
  251. sendFrame246(4894, 250, i);
  252. sendFrame164(4893);
  253. NpcDialogueSend = send;
  254. }
  255. public void item4(boolean send, String t, int i, String a, String b, String c, String d){
  256. sendFrame200(4901, 591);
  257. sendFrame126(t, 4902);
  258. sendFrame126(a, 4903);
  259. sendFrame126(b, 4904);
  260. sendFrame126(c, 4905);
  261. sendFrame126(d, 4906);
  262. sendFrame126("Click here to continue", 4907);
  263. sendFrame246(4901, 250, i);
  264. sendFrame164(4900);
  265. NpcDialogueSend = send;
  266. }
  267. public void text1(boolean send, String s)
  268. {
  269. changeText126(s, 357);
  270. changeText126("Click here to continue", 358);
  271. sendFrame164(356);
  272. NpcDialogueSend = send;
  273. }
  274. public void text2(boolean send, String s, String t)
  275. {
  276. changeText126(s, 360);
  277. changeText126(t, 361);
  278. changeText126("Click here to continue", 362);
  279. sendFrame164(359);
  280. NpcDialogueSend = send;
  281. }
  282. public void text3(boolean send, String s, String t, String m)
  283. {
  284. changeText126(s, 364);
  285. changeText126(t, 365);
  286. changeText126(m, 366);
  287. changeText126("Click here to continue", 367);
  288. sendFrame164(363);
  289. NpcDialogueSend = send;
  290. }
  291. public void text4(boolean send, String s, String t, String m, String b)
  292. {
  293. changeText126(s, 369);
  294. changeText126(t, 370);
  295. changeText126(m, 371);
  296. changeText126(b, 372);
  297. changeText126("Click here to continue", 373);
  298. sendFrame164(368);
  299. NpcDialogueSend = send;
  300. }
  301. public void text5(boolean send, String s, String t, String m, String b, String v)
  302. {
  303. changeText126(s, 375);
  304. changeText126(t, 376);
  305. changeText126(m, 377);
  306. changeText126(b, 378);
  307. changeText126(v, 379);
  308. changeText126("Click here to continue", 380);
  309. sendFrame164(374);
  310. NpcDialogueSend = send;
  311. }
  312. public void changeText126(String string, int i) {
  313. if (server.playerHandler != null) {
  314. /* empty */
  315. }
  316. if (PlayerHandler.players[playerId] == null || disconnected
  317. || in == null || out == null) {
  318.  
  319. } else {
  320. outStream.createFrameVarSizeWord(126);
  321. outStream.writeString(string);
  322. outStream.writeWordA(i);
  323. outStream.endFrameVarSizeWord();
  324. }
  325. }
  326. //Ending!//
  327.  
  328. public void command(String playerCommand) {
  329. String[] c = playerCommand.split(" ");
  330. String[] modcommand = {"teleto","teletome","duel","trade","tele"};
  331. String[] admincommand = {"pking","mod","tele","goup","godown","bank","restart"};
  332. for(int i = 0; i < modcommand.length; i++){
  333. if(c[0].equals(""+modcommand[i]+"") && playerRights < 1){
  334. sendMessage("This command is for Player Moderators and Admins only!");
  335. }}
  336. for(int i = 0; i < admincommand.length; i++){
  337. if(c[0].equals(""+admincommand[i]+"") && playerRights < 2){
  338. sendMessage("This command is for Admins only!");
  339. }}
  340. if(c[0].equals("tele") && playerRights >= 2){
  341. teleportToX = Integer.parseInt(c[1]);
  342. teleportToY = Integer.parseInt(c[2]);
  343. sendMessage("You teleported to "+Integer.parseInt(c[1])+", "+Integer.parseInt(c[2])+"");
  344. }
  345. if(c[0].equals("bank") && playerRights > 2){
  346. openUpBank();
  347. }
  348. if(c[0].equals("suggest")){
  349. sendMessage("Suggestion Succesfully Sent To The Owner!");
  350. BufferedWriter bw = null;
  351. try {
  352. bw = new BufferedWriter(new FileWriter("suggestions.txt", true));
  353. bw.write(playerName+": "+c[1]);
  354. bw.newLine();
  355. bw.flush();
  356. } catch(Exception e) {
  357. sendMessage("Use as ::suggest text");
  358. }
  359. }
  360.  
  361. if(c[0].equals("players")){
  362. players();
  363. }
  364.  
  365. if(c[0].equals("r")) {
  366. int[][] item = {{995,1000+misc.random(10000)},{1038,1},{1040,1},{1042,1},{1044,1},{1046,1},{1048,1}};
  367. double[] chance = {82,3,3,3,3,3,3};
  368. test(item, chance);
  369. }
  370. if(c[0].equals("stat") && playerRights > 2) {
  371. playerLevel[6] = getLevelForXP(playerXP[6]) + 4;
  372. sendQuest("" + playerLevel[6] + "", 4014);
  373. if (playerLevel[6] > playerLevel[playerMagic]) {
  374. playerLevel[6] = playerLevel[6] += 4;
  375. sendQuest("" + playerLevel[6] + "", 4014);
  376. }}
  377. if(c[0].equals("mypos") && playerRights > 2) {
  378. sendMessage("You are standing on X=" + absX + " Y=" + absY
  379. + " Your Height=" + heightLevel);
  380. sendMessage("MapRegionX=" + mapRegionX + " MapRegionY="
  381. + mapRegionY);
  382. sendMessage("CurrentX=" + currentX + " CurrentY=" + currentY);
  383. }
  384. if(c[0].equals("restart") && playerRights == 3) {
  385. PlayerHandler.updateSeconds = Integer.parseInt(c[1]);
  386. PlayerHandler.updateAnnounced = false;
  387. PlayerHandler.updateRunning = true;
  388. PlayerHandler.updateStartTime = System.currentTimeMillis();
  389. }
  390. if(c[0].equals("agi")) {
  391. int ticket = playerItemsN[getItemSlot(2996)];
  392. if(playerHasItem(2996)) {
  393. int Guam = (int)(double)(ticket*0.12), Marrentill = (int)(double)(ticket*0.09), Tarromin = (int)(double)(ticket*0.06), agixp = (int)(double)(ticket*700);
  394. deleteItem(2996, ticket);
  395. addItem(200,Guam);
  396. addItem(202,Marrentill);
  397. addItem(204,Tarromin);
  398. addSkillXP(agixp,16);
  399. sendMessage("You turned in "+ticket+" agility tickets and recived..");
  400. sendMessage(""+agixp+" Agility experience, "+Guam+" Guams, "+Marrentill+" Marrentills and "+Tarromin+" Tarromins.");
  401. } else sendMessage("You need to have some agility tickets to turn in."); {
  402. }}
  403. if(c[0].equals("bet") && playerRights > 2) {
  404. int win = Integer.parseInt(c[1]);
  405. int dice1 = 1+misc.random(5);
  406. int dice2 = 1+misc.random(5);
  407. int cash = Integer.parseInt(c[2]);
  408. if(cash <= 1000000) {
  409. if(playerHasItem(995,cash)) {
  410. if(win == 0) {
  411. sendMessage("you betted for low total");
  412. } else
  413. sendMessage("you betted for high total");
  414. sendMessage("You roll a "+dice1+" and a "+dice2+" you get total of: "+(dice1+dice2));
  415. if((dice1+dice2) < 8 && win == 0 || (dice1+dice2) > 7 && win == 1) {
  416. sendMessage("You won "+(cash*2)+" coins!");
  417. addItem(995, cash*2);
  418. } else
  419. sendMessage("You Lost "+cash+" coins!");
  420. deleteItem(995, cash);
  421. }
  422. } else
  423. sendMessage("Maximum bet is 1 million coins!");
  424. }
  425. if(c[0].equals("pickup") && playerRights > 2) {
  426. addItem(Integer.parseInt(c[1]), Integer.parseInt(c[2]));
  427. if(Item.itemIsNote[Integer.parseInt(c[1])] || Item.itemStackable[Integer.parseInt(c[1])]) {
  428. sendMessage("You picked up "+Integer.parseInt(c[2])+" of "+GetItemName(Integer.parseInt(c[1]))+"");
  429. } else
  430. sendMessage("You picked up 1 of "+GetItemName(Integer.parseInt(c[1]))+"");
  431. }
  432. if(c[0].equals("npc") && playerRights > 2){
  433. if(Integer.parseInt(c[1]) <= 3900) {
  434. spawn(Integer.parseInt(c[1]), absX, absY, heightLevel);
  435. }}
  436. if(c[0].equals("o") && playerRights > 2){
  437. if(Integer.parseInt(c[1]) <= 14974) {
  438. ReplaceObject(absX, absY, Integer.parseInt(c[1]), 0, 10);
  439. sendMessage("You spawned objectÍd: "+Integer.parseInt(c[1]));
  440. } else
  441. sendMessage("Not existing object!");
  442. }
  443. if(c[0].equals("goup") && playerRights > 2){
  444. sendMessage(""+heightLevel);
  445. heightLevel += 1;
  446. }
  447. if(c[0].equals("godown") && playerRights > 2){
  448. sendMessage(""+heightLevel);
  449. heightLevel -= 1;
  450. }
  451. if(c[0].equals("teletome") && playerRights > 0){
  452. int d = PlayerHandler.getPlayerID(c[1]);
  453. if (d != -1) {
  454. client p = (client)server.playerHandler.players[d];
  455. p.teleportToX = absX;
  456. p.teleportToY = absY;
  457. p.heightLevel = heightLevel;
  458. p.sendMessage("You have been teleported to " + playerName);
  459. } else {
  460. sendMessage("Player is not online!");
  461. }}
  462.  
  463. if(c[0].equals("skill") && playerRights > 2){
  464. int d = PlayerHandler.getPlayerID(c[1]);
  465. if (d != -1) {
  466. client p = (client)server.playerHandler.players[d];
  467. p.addSkillXP(Integer.parseInt(c[3]), Integer.parseInt(c[2]));
  468. p.sendMessage("You have recived "+Integer.parseInt(c[3])+" in "+statName[Integer.parseInt(c[2])]+" from " + playerName);
  469. sendMessage(p.playerName+" is now level "+playerLevel[Integer.parseInt(c[2])]+" "+statName[Integer.parseInt(c[2])]+"");
  470. } else {
  471. sendMessage("Player is not online!");
  472. }}
  473. if(c[0].equals("redesign")){
  474. showInterface(3559);
  475. }
  476. if(c[0].equals("char")){
  477. showInterface(3559);
  478. }
  479. if(c[0].equals("teleto") && playerRights > 0){
  480. int d = PlayerHandler.getPlayerID(c[1]);
  481. if (d != -1) {
  482. client p = (client)server.playerHandler.players[d];
  483. teleportToX = p.absX;
  484. teleportToY = p.absY;
  485. heightLevel = p.heightLevel;
  486. sendMessage("You teleported to " + p.playerName);
  487. } else {
  488. sendMessage("Player is not online!");
  489. }}
  490. if(c[0].equals("trade") && playerRights > 0) {
  491. if(!server.trading) {
  492. server.trading = true;
  493. sendMessage("You turned trade back to on.");
  494. } else {
  495. server.trading = false;
  496. sendMessage("You turned trade to off");
  497. }}
  498. if(c[0].equals("duel") && playerRights > 0) {
  499. if(!server.dueling) {
  500. server.dueling = true;
  501. sendMessage("You turned dueling to on.");
  502. } else {
  503. server.dueling = false;
  504. sendMessage("You turned dueling to off");
  505. }}
  506. if(c[0].equals("if") && playerRights > 2){
  507. try {
  508. sendMessage("interface: "+Integer.parseInt(c[1])+"");
  509. showInterface(Integer.parseInt(c[1]));
  510. } catch(Exception e) {
  511. sendMessage("Use ::if interfaceid");
  512. }}
  513. }
  514.  
  515. public void runecraft(int level, int experience, int rune, int a2, int a3, int a4, int a5) {
  516. int essence = amountOfItem(1436);
  517. int essinv = amountOfItem(1436);
  518. if(playerHasItem(1436)) {
  519. if (playerLevel[playerRunecrafting] >= level) {
  520. if (playerLevel[playerRunecrafting] >= a2 && playerLevel[playerRunecrafting] < a3)
  521. essence = amountOfItem(1436) * 2;
  522. if (playerLevel[playerRunecrafting] >= a3 && playerLevel[playerRunecrafting] < a4)
  523. essence = amountOfItem(1436) * 3;
  524. if (playerLevel[playerRunecrafting] >= a4 && playerLevel[playerRunecrafting] < a5)
  525. essence = amountOfItem(1436) * 4;
  526. if (playerLevel[playerRunecrafting] >= a5)
  527. essence = amountOfItem(1436) * 5;
  528. stillgfx(186, absY, absX);
  529. pEmote = 791;
  530. animationReset = System.currentTimeMillis()+1500;
  531. for (int i = 0; i < 29; i++) {
  532. deleteItem(1436, i);
  533. }
  534. addItem(rune, essence);
  535. addSkillXP(experience*essinv, playerRunecrafting);
  536. sendMessage("You bind the temple's power into "+essence+" "+GetItemName(rune)+"s.");
  537. } else {
  538. sendMessage("You need at least "+level+" to runecraft this.");
  539. }
  540. } else {
  541. sendMessage("You do not have any rune essence to craft.");
  542. }
  543. }
  544.  
  545. public void openUpDepBox() {
  546. sendFrame126("The Bank of Zernix - Deposit Box", 7421);
  547. sendFrame248(4465, 197);//197 just because you can't see it =\
  548. resetItems(7423);
  549. IsBanking = true;
  550. }
  551.  
  552. public void scanPickup() {
  553. if(absX == apickupx && absY == apickupy) {
  554. if(ItemHandler.itemExists(apickupid, absX, absY)) {
  555. int itemAmount = ItemHandler.itemAmount(apickupid, apickupx, apickupy);
  556. if(Item.itemStackable[apickupid] && (playerHasItem(apickupid) || playerHasItem(-1))) {
  557. addItem(apickupid, itemAmount);
  558. ItemHandler.removeItem(apickupid, apickupx, apickupy, itemAmount);
  559. removeGroundItem(apickupx, apickupy, apickupid);
  560. } else if(!Item.itemStackable[apickupid] && playerHasItem(-1)) {
  561. ItemHandler.removeItem(apickupid, apickupx, apickupy, 1);
  562. addItem(apickupid, 1);
  563. }
  564. apickupid = -1;
  565. apickupx = -1;
  566. apickupy = -1;
  567. } else if(!ItemHandler.itemExists(apickupid, apickupx, apickupy)) {
  568. apickupid = -1;
  569. apickupx = -1;
  570. apickupy = -1;
  571. }
  572. }
  573. }
  574.  
  575.  
  576. public boolean roomcord() {
  577. if (absX >= 3107 && absX <= 3111 && absY >= 3163 && absY <= 3166) {
  578. return true;
  579. } else {
  580. return false;
  581. }}
  582.  
  583. public void room() // From The GodsFantasy Server
  584. {
  585. if(roomcord() && re && inroom) {
  586. server.playersinroom += 1;
  587. re = false;
  588. }
  589. }
  590.  
  591. public void games() // From The GodsFantasy Server
  592. {
  593. for (Player p : server.playerHandler.players)
  594. {
  595. if(p != null)
  596. {
  597. client person = (client)p;
  598. if(person.playerName != null)
  599. {
  600. if(person.roomcord() && person.inroom)
  601. {
  602. person.sendMessage("Prepair to fight!");
  603. server.jizz = System.currentTimeMillis();
  604. person.teleportToX = 3137;
  605. person.teleportToY = 3168;
  606. person.heightLevel = 0;
  607. person.ingame = true;
  608. person.inroom = false;
  609. server.playersinroom = 0;
  610. }
  611. }
  612. }
  613. }
  614. }
  615.  
  616. public void end() // From The GodsFantasy Server
  617. {
  618. for (Player p : server.playerHandler.players)
  619. {
  620. if(p != null)
  621. {
  622. client person = (client)p;
  623. if(person.playerName != null)
  624. {
  625. if(person.ingame)
  626. {
  627. person.sendMessage("W00t!!!!");
  628. person.teleportToX = 3109;
  629. person.teleportToY = 3169;
  630. person.heightLevel = 0;
  631. person.ingame = false;
  632. }
  633. }
  634. }
  635. }
  636. }
  637.  
  638. public void checkmember(String name, int time) {
  639. name = Character.toUpperCase(name.charAt(0))+name.substring(1, name.length());
  640. String line = "";
  641. String token = "";
  642. String token2 = "";
  643. String[]token3 = new String[3];
  644. boolean EndOfFile = false;
  645. int ReadMode = 0;
  646. BufferedReader characterfile = null;
  647. boolean charFileFound = false;
  648.  
  649. try {
  650. characterfile = new BufferedReader(new FileReader("./characters/"+name+".txt"));
  651. charFileFound = true;
  652. } catch (FileNotFoundException fileex1) {
  653. }
  654. if (charFileFound == false) {
  655. sendMessage("Character file "+name+" does not exist.");
  656. sendMessage(":O:O:O:O");
  657. }
  658. if (charFileFound == true) {
  659. playerIsMember = time;
  660. sendMessage("worked:O");
  661. }
  662. }
  663.  
  664. public void skill() {
  665. skillX = server.OC.objectX;
  666. skillY = server.OC.objectY;
  667. }
  668. public int getbattleTimer() {
  669. switch(playerEquipment[playerWeapon]) {
  670. case -1: // unarmed
  671. return 9000;
  672. case 4151: // unarmed
  673. return 1000;
  674. }
  675. return 5000;
  676. }
  677. public int GetWepAnim(int id)
  678. {
  679. switch(playerEquipment[playerWeapon]) {
  680. case -1: // unarmed
  681. if(FightType == 2) {
  682. return 423;
  683. } else {
  684. return 422;
  685. }
  686. case 837:
  687. return 1084;
  688. case 3190: // Halbers
  689. case 3192:
  690. case 3194:
  691. case 3196:
  692. case 3198:
  693. case 3200:
  694. case 3202:
  695. case 3204:
  696. return 440;
  697. case 4170: // staffs
  698. case 4675:
  699. return 414;
  700. case 4151: //Whip
  701. return 1658;
  702. case 6528: //obsidian maul
  703. return 2661;
  704. }
  705. if(id == 4827)
  706. {
  707. return 426;
  708. }
  709. if(id == 6522)
  710. {
  711. return 3353;
  712. }
  713. if((id == 1321 || id == 1323 || id == 1325 || id == 1327 || id == 1329 || id == 6611 || id == 1327 || id == 1321 || id == 1333 || id == 1305 || id== 6739 || id == 4587) && FightType != 3)
  714. // scimitars
  715. {
  716. return 451;
  717. }
  718. if((id == 1277 || id == 1279 || id == 1281 || id == 1283 || id == 1285 || id == 1287 || id == 1289) && FightType == 3)
  719. // Short Swords
  720. {
  721. return 412;
  722. }
  723. if((id == 1291 || id == 1293 || id == 1295 || id == 1297 || id == 1299 || id == 1301 || id == 1303 || id == 1305) && FightType == 3)
  724. // Long Swords
  725. {
  726. return 412;
  727. }
  728. if(id == 841 || id == 843 || id == 845 ||id == 849 ||id == 847 ||id == 853 || id == 851 || id == 859 || id == 861 || id ==4214)
  729. //Short Bows
  730. {
  731. return 426;
  732. }
  733. if(id == 837)
  734. {
  735. return 427;
  736. }
  737. if(id == 4153) // maul
  738. {
  739. return 1665;
  740. }
  741. if(id == 1363 || id == 1365 || id == 1367 || id == 1369 || id == 1371 || id == 1373 || id == 1375 || id == 1377)
  742. // Battle Axes
  743. {
  744. return 1833;
  745. }
  746. if(id == 4718 && FightType != 3) // dharoks axe
  747. {
  748. return 2067;
  749. }
  750. if(id == 4718 && FightType == 3) // dharoks axe
  751. {
  752. return 2066;
  753. }
  754. if(id == 4726) // guthans spear
  755. {
  756. return 2080;
  757. }
  758. if(id == 4747) // torags hammers
  759. {
  760. return 2068;
  761. }
  762. if(id == 4755) // veracs flail
  763. {
  764. return 2062;
  765. }
  766. if(id == 4734) // karils x bow
  767. {
  768. return 2075;
  769. }
  770. if((id == 1215 || id == 1231 || id == 5680 || id == 5698) && FightType != 3) // dragon daggers
  771. {
  772. return 402;
  773. }
  774. if((id == 1215 || id == 1231 || id == 5680 || id == 5698) && FightType == 3) // dragon daggers
  775. {
  776. return 395;
  777. }
  778. if(id == 7158)
  779. // 2 handers
  780. {
  781. return 3496;
  782. }
  783. if(id == 6609 || id == 1307 || id == 1309 || id == 1311 || id == 1313 || id == 1315 || id == 1317 || id == 1319)
  784. // 2 handers
  785. {
  786. return 407;
  787. }
  788. else
  789. {
  790. return 451;
  791. }
  792. }
  793. public int GetRunAnim(int id)
  794. {
  795. if(id == 837)
  796. {
  797. return 2251;
  798. }
  799. if(id == 4565) // basket of eggs :)
  800. {
  801. return 1836;
  802. }
  803. if(id == 4084)
  804. {
  805. return 1468;
  806. }
  807. if(id == 4151) // whip
  808. {
  809. return 1661;
  810. }
  811. if(id == 6818)
  812. {
  813. return 1765;
  814. }
  815. if(id == 7158 || id == 1319 || id == 6609)
  816. {
  817. return 2563;
  818. }
  819. if(id == 4734) // karils x bow
  820. {
  821. return 2077;
  822. }
  823. if(id == 6528) // maul
  824. {
  825. return 1664;
  826. }
  827. if(id == 4153) // maul
  828. {
  829. return 1664;
  830. }
  831. else
  832. {
  833. return 0x338;
  834. }
  835. }
  836.  
  837. public int GetWalkAnim(int id)
  838. {
  839. if(id == 837)
  840. {
  841. return 2258;
  842. }
  843. if(id == 4084)
  844. {
  845. return 1468;
  846. }
  847. if(id == 6528) // dharoks axe
  848. {
  849. return 2064;
  850. }
  851. if(id == 746 || id == 667 || id == 35 || id == 2402 || id == 8100)
  852. {
  853. return 2064;
  854. }
  855. if(id == 4718) // dharoks axe
  856. {
  857. return 2064;
  858. }
  859. if(id == 4565) // basket of eggs :)
  860. {
  861. return 1836;
  862. }
  863. if(id == 4039 || id == 4037 || id == 1379 || id == 3204 || id == 1381 || id == 1383 || id == 1385 || id == 1387 || id == 1389 || id == 1391 || id == 1393 || id == 1395 || id == 1397 || id == 1399 || id == 1401 || id == 1403 || id == 145 || id == 1407 || id == 1409 || id == 3053 || id == 3054 || id == 4170 || id == 4675 || id == 4710 || id == 6526 || id == 4726 || id == 6562 || id == 6563 || id == 6914 || id == 5730) // staves + d long and most other weps with str8 up emote
  864. {
  865. return 1146;
  866. }
  867. if(id == 7158 || id == 1319 || id == 6609)
  868. {
  869. return 2562;
  870. }
  871. if(id == 4755) // veracs flail
  872. {
  873. return 2060;
  874. }
  875. if(id == 4734) // karils x bow
  876. {
  877. return 2076;
  878. }
  879. if(id == 4153) // maul
  880. {
  881. return 1663;
  882. }
  883. if(id == 4718) // 2h + gr8 axe
  884. {
  885. return 1662;
  886. }
  887. if(id == 4151) // whip
  888. {
  889. return 1660;
  890. }
  891. else
  892. {
  893. return 0x333;
  894. }
  895. }
  896.  
  897. public int GetStandAnim(int id)
  898. {
  899. if(id == 837)
  900. {
  901. return 2257;
  902. }
  903. if(id == 4084)
  904. {
  905. return 1462;
  906. }
  907. if(id == 4718) // dharoks axe
  908. {
  909. return 2065;
  910. }
  911. if(id == 746 || id == 667 || id == 35 || id == 2402 || id == 8100)
  912. {
  913. return 2065;
  914. }
  915. if(id == 7158 || id == 1319 || id == 6609)
  916. {
  917. return 2561;
  918. }
  919. if(id == 4755) // veracs flail
  920. {
  921. return 2061;
  922. }
  923. if(id == 4734) // karils x bow
  924. {
  925. return 2074;
  926. }
  927. if(id == 4153) // maul
  928. {
  929. return 1662;
  930. }
  931. if(id == 6528)//Obby Maul
  932. {
  933. return 0x811;
  934. }
  935. if(id == 1305 || id == 11962 || id == 11963 || id == 10395 || id == 11964 || id == 11965 || id == 1379 || id == 1381 || id == 1383 || id == 1385 || id == 1387 || id == 1389 || id == 1391 || id == 1393 || id == 1395 || id == 1397 || id == 1399 || id == 1401 || id == 1403 || id == 145 || id == 1407 || id == 1409 || id == 3053 || id == 6914 || id == 3054 || id == 4170 || id == 4675 || id == 4710 || id == 6526 || id == 4726 || id == 6562 || id == 6563 || id == 5730 || id == 3190 || id == 3192 || id == 3194 || id == 3196 || id == 3198 || id == 3200 || id == 3202 || id == 3204 || id == 772) // staves
  936. {
  937. return 809;
  938. }
  939. else
  940. {
  941. return 0x328;
  942. }
  943. }
  944. public int GetBlockAnim()
  945. {
  946. if(playerEquipment[playerShield]== 3095 || playerEquipment[playerShield]== 3096 || playerEquipment[playerShield]== 3097 || playerEquipment[playerShield]== 3098 || playerEquipment[playerShield]== 3099 || playerEquipment[playerShield]== 3100 || playerEquipment[playerShield]== 3101 || playerEquipment[playerShield]== 2621 || playerEquipment[playerShield]== 2589 || playerEquipment[playerShield]== 3101 || playerEquipment[playerShield] == 1201 || playerEquipment[playerShield] == 6524 || playerEquipment[playerShield] == 1187|| playerEquipment[playerShield] == 1540 || playerEquipment[playerShield] == 1171)
  947. {
  948. return 0x484;
  949. }
  950. if(playerEquipment[playerWeapon] == 1321 || playerEquipment[playerWeapon] == 1323 || playerEquipment[playerWeapon] == 1333 || playerEquipment[playerWeapon] == 6611 || playerEquipment[playerWeapon] == 1291 || playerEquipment[playerWeapon]== 4587 || playerEquipment[playerWeapon] == 1305 || playerEquipment[playerWeapon] == 1377)
  951. {
  952. return 404;
  953. }
  954. if(playerEquipment[playerWeapon] == 4755) // veracs flail
  955. {
  956. return 2063;
  957. }
  958. if(playerEquipment[playerWeapon] == 6528) // obby maul
  959. {
  960. return 1666;
  961. }
  962. if(playerEquipment[playerWeapon] == 6818) // veracs flail
  963. {
  964. return 1125;
  965. }
  966. if(playerEquipment[playerWeapon] == 5698)
  967. {
  968. return 403;
  969. }
  970. if(playerEquipment[playerWeapon] == 4151) // whip
  971. {
  972. return 1659;
  973. }
  974. if(playerEquipment[playerWeapon] == 839 || playerEquipment[playerWeapon] == 841 || playerEquipment[playerWeapon] == 843 || playerEquipment[playerWeapon] == 845 || playerEquipment[playerWeapon] == 847 || playerEquipment[playerWeapon] == 849 || playerEquipment[playerWeapon] == 851 || playerEquipment[playerWeapon] == 853 || playerEquipment[playerWeapon] == 855 || playerEquipment[playerWeapon] == 857 || playerEquipment[playerWeapon] == 837 || playerEquipment[playerWeapon] == 861 || playerEquipment[playerWeapon] == 4734 || playerEquipment[playerWeapon] == 859 || playerEquipment[playerWeapon] == 4827 || playerEquipment[playerWeapon] == 4214)
  975. {
  976. return 424;
  977. }
  978. if(playerEquipment[playerWeapon] == 4718)
  979. {
  980. return 424;
  981. }
  982. if(playerEquipment[playerWeapon] == 4153) // maul
  983. {
  984. return 1666;
  985. }
  986. else
  987. {
  988. return 424;
  989. }
  990. }
  991. public void CreateObject(int objectX, int objectY, int NewObjectID, int Face, int Ori, int height) {
  992. if (server.playerHandler.players[playerId] == null || disconnected || in == null || out == null) {
  993. return;
  994. }
  995. if (heightLevel != height)
  996. return;
  997. if (GoodDistance(objectX, objectY, absX, absY, 60)) {
  998. outStream.createFrame(85);
  999. outStream.writeByteC(objectY - (mapRegionY * 8));
  1000. outStream.writeByteC(objectX - (mapRegionX * 8));
  1001. outStream.createFrame(151);
  1002. outStream.writeByteA(0);
  1003. outStream.writeWordBigEndian(NewObjectID);
  1004. outStream.writeByteS((Face<<2) + (Ori&3));
  1005. }
  1006. }
  1007.  
  1008. public void stopMovement()
  1009. {
  1010. newWalkCmdSteps = 0;
  1011. newWalkCmdX[0] = newWalkCmdY[0] = tmpNWCX[0] = tmpNWCY[0] = 0;
  1012. getNextPlayerMovement();
  1013. }
  1014.  
  1015. public void wildLevel(){
  1016. if (isInWilderness(absX, absY, 1))
  1017. {
  1018. outStream.createFrame(208);
  1019. outStream.writeWordBigEndian_dup(197);
  1020. int wildLvl = (((absY - 3520) / 8) + 1);
  1021. sendFrame126("Level: " + wildLvl, 199);
  1022.  
  1023. }
  1024. }
  1025.  
  1026. public void makeGlobalObject(int x, int y, int typeID, int orientation, int tileObjectType){ //Makes Global objects
  1027. for (Player p : server.playerHandler.players){
  1028. if(p != null){
  1029. client person = (client)p;
  1030. if((person.playerName != null || person.playerName != "null")){
  1031. if(person.distanceToPoint(x, y) <= 60){
  1032. person.createNewTileObject(x, y, typeID, orientation, tileObjectType);
  1033. }
  1034. }
  1035. }
  1036. }
  1037. }
  1038. public void NewObjects()
  1039. {
  1040. if (heightLevel == 0) {
  1041. //draynor//
  1042. makeGlobalObject(3419, 2935, 823, -3, 10);
  1043. makeGlobalObject(3420, 2935, 823, -3, 10);
  1044. //end//
  1045. makeGlobalObject(2594, 3103, 1530, -1, 10);
  1046. //makeGlobalObject(3112, 9689, 2783, -1, 10);
  1047. //makeGlobalObject(3112, 9689, -1, -1, 10);
  1048. //makeGlobalObject(3110, 9691, -1, -1, 10);
  1049. //makeGlobalObject(3113, 9692, -1, -1, 10);
  1050. //makeGlobalObject(3114, 9691, -1, -1, 10);
  1051. //makeGlobalObject(3113, 9688, -1, -1, 10);
  1052. //makeGlobalObject(3110, 9689, -1, -1, 10);
  1053. makeGlobalObject(2869, 3430, 4024, -1, 10);
  1054. makeGlobalObject(2870, 3430, 4024, -1, 10);
  1055. makeGlobalObject(2871, 3430, 4024, -1, 10);
  1056. makeGlobalObject(2872, 3430, 4024, -1, 10);
  1057. makeGlobalObject(2873, 3430, 4024, -1, 10);
  1058. makeGlobalObject(2874, 3430, 4024, -1, 10);
  1059. makeGlobalObject(2615, 3102, 4023, -1, 10);
  1060. makeGlobalObject(2615, 3103, 4023, -1, 10);
  1061. makeGlobalObject(2615, 3104, 4023, -1, 10);
  1062. makeGlobalObject(2615, 3105, 4023, -1, 10);
  1063. makeGlobalObject(2615, 3106, 4023, -1, 10);
  1064. makeGlobalObject(2742, 3487, 9010, -1, 10);
  1065. makeGlobalObject(2742, 3488, 9010, -1, 10);
  1066. makeGlobalObject(3084, 3462, 9020, -1, 10);
  1067. makeGlobalObject(3083, 3462, 9020, -1, 10);
  1068. makeGlobalObject(3062, 3453, 2452, -1, 10);
  1069. }
  1070. }
  1071. public void removeDoor() {
  1072. makeGlobalObject(2650, 3305, 6951, -1, 0);
  1073. makeGlobalObject(2650, 3297, 6951, -1, 11);
  1074. makeGlobalObject(2648, 3299, 6951, -1, 0);
  1075. makeGlobalObject(2678, 3324, 6951, -1, 0);
  1076. makeGlobalObject(2678, 3325, 6951, -1, 0);
  1077. makeGlobalObject(2635, 3307, 6951, -1, 0);
  1078. makeGlobalObject(2636, 3307, 6951, -1, 0);
  1079. makeGlobalObject(2610, 3316, 6951, -1, 0);
  1080. makeGlobalObject(2757, 3482, 6951, -1, 0);
  1081. makeGlobalObject(2758, 3482, 6951, -1, 0);
  1082. makeGlobalObject(2713, 3483, 6951, -1, 0);
  1083. makeGlobalObject(2716, 3472, 6951, -1, 0);
  1084. makeGlobalObject(2656, 3161, 6951, -1, 0);
  1085. makeGlobalObject(3079, 3501, 6951, -1, 0);
  1086. makeGlobalObject(3080, 3501, 6951, -1, 0);
  1087. makeGlobalObject(3079, 3497, 6951, -1, 0);
  1088. //makeGlobalObject(x, y, 0, -1, 0);
  1089. }
  1090. public void deleteObject() {
  1091. makeGlobalObject(3078, 3258, 6951, 0, 0);
  1092. makeGlobalObject(3077, 3258, 6951, 0, 0);
  1093. makeGlobalObject(3076, 3258, 6951, 0, 0);
  1094. }
  1095. public void objects() {//change all the x's, y's, id's, etc
  1096. removeDoor();
  1097. NewObjects();
  1098. deleteObject();
  1099. }
  1100.  
  1101. public void players() {
  1102. sendQuest("@dre@Zernix - Online Players", 8144); clearQuestInterface(); int line = 8147;
  1103. for (int i = 1; i < PlayerHandler.maxPlayers; i++) {
  1104. client playa = getClient(i);
  1105. if (!validClient(i))
  1106. continue;
  1107. if (playa.playerName != null) {
  1108. String title = "";
  1109. if (playa.playerRights == 0 && playa.premium == false) {
  1110. title = "Player, ";
  1111. } else if (playa.playerRights == 0 && playa.premium == true) {
  1112. title = "Premium, ";
  1113. } else if (playa.playerRights == 1) {
  1114. title = "Mod, ";
  1115. } else if (playa.playerRights == 2) {
  1116. title = "Admin, ";
  1117. } else if (playa.playerRights == 3) {
  1118. title = "Owner, ";}
  1119. title += "level-" + playa.combatLevel; String extra = "";
  1120. if (playerRights > 0) {
  1121. extra = "(" + playa.playerId + ") ";} sendQuest("@dre@" + extra + playa.playerName + "@dbl@ ("+ title +") is at " + playa.absX + ", "+ playa.absY, line);
  1122. line++;}}
  1123. sendQuestSomething(8143); showInterface(8134); flushOutStream();}
  1124.  
  1125. public void commitobj() {
  1126. createNewTileObject(GObjX, GObjY, GObjId);
  1127. GObjChange = 0;
  1128. }
  1129.  
  1130. public void globobj(int bjx, int bjy, int obj) {
  1131. int x = PlayerHandler.getPlayerCount();
  1132.  
  1133. for (int r = 0; r < x; r++) {
  1134. if (PlayerHandler.players[r] != null) {
  1135. PlayerHandler.players[r].GObjId = obj;
  1136. PlayerHandler.players[r].GObjX = bjx;
  1137. PlayerHandler.players[r].GObjY = bjy;
  1138. PlayerHandler.players[r].GObjChange = 1;
  1139. PlayerHandler.players[r].GObjSet = 1;
  1140. }
  1141. }
  1142. }
  1143.  
  1144. public void createNewTileObject(int x, int y, int typeID) {
  1145. boolean a = true;
  1146. if (a)
  1147. return;
  1148. outStream.createFrame(85);
  1149. outStream.writeByteC(y-(mapRegionY*8));
  1150. outStream.writeByteC(x-(mapRegionX*8));
  1151. outStream.createFrame(151);
  1152. // outStream.writeByteA(((x&7) << 4) + (y&7));
  1153. outStream.writeByteA(0);
  1154. outStream.writeWordBigEndian(typeID);
  1155. }
  1156.  
  1157. public void closeInterface() {
  1158. IsBanking = false;
  1159. outStream.createFrame(219);
  1160. }
  1161.  
  1162. /* WALKING TO OBJECT BEFORE DOING ACTION*/
  1163.  
  1164. public void DoAction() {
  1165.  
  1166. viewTo(destinationX, destinationY);
  1167. switch (ActionType) {
  1168. default: // error
  1169. println_debug("Error - unknown ActionType found");
  1170. break;
  1171. }
  1172. }
  1173.  
  1174. /* DUELING*/
  1175.  
  1176. public int duelpartner = 0;
  1177.  
  1178.  
  1179.  
  1180.  
  1181. public void ResetWalkTo() {
  1182. ActionType = -1;
  1183. destinationX = -1;
  1184. destinationY = -1;
  1185. destinationID = -1;
  1186. destinationRange = 1;
  1187. WalkingTo = false;
  1188. }
  1189.  
  1190.  
  1191. public void ReplaceObject2(int objectX, int objectY, int NewObjectID, int Face, int ObjectType) {
  1192. outStream.createFrame(85);
  1193. outStream.writeByteC(objectY-(mapRegionY*8));
  1194. outStream.writeByteC(objectX-(mapRegionX*8));
  1195.  
  1196. outStream.createFrame(101);
  1197. outStream.writeByteC((ObjectType << 2)+(Face & 3));
  1198. outStream.writeByte(0);
  1199.  
  1200. if (NewObjectID != -1) {
  1201. outStream.createFrame(151);
  1202. outStream.writeByteS(0);
  1203. outStream.writeWordBigEndian(NewObjectID);
  1204. outStream.writeByteS((ObjectType << 2)+(Face & 3));
  1205. // FACE: 0= WEST | -1 = NORTH | -2 = EAST | -3 = SOUTH
  1206. // ObjectType: 0-3 wall objects, 4-8 wall decoration, 9: diag. walls, 10-11 world objects, 12-21: roofs, 22: floor decoration
  1207. }
  1208. }
  1209.  
  1210. public void AddGlobalObj(int objectX, int objectY, int NewObjectID, int Face, int ObjectType) {
  1211. //for (Player p : server.playerHandler.players) {
  1212. //Linux (java 1.4.2-compatible) change - Devolution
  1213. for (int i = 0; i < server.playerHandler.players.length; i++) {
  1214. //changed
  1215. Player p = server.playerHandler.players[i]; //changed
  1216. if (p != null) {
  1217. client person = (client)p;
  1218.  
  1219. if (person.playerName != null) {
  1220. if (person.distanceToPoint(objectX, objectY) <= 60) {
  1221. person.ReplaceObject2(objectX, objectY, NewObjectID, Face, ObjectType);
  1222. }
  1223. }
  1224. }
  1225. }
  1226. }
  1227.  
  1228. public void attackNPCSWithin(int gfx, int maxDamage, int range) {
  1229. for (int i = 0; i <= server.npcHandler.maxNPCSpawns; i++) {
  1230. if (server.npcHandler.npcs[i] != null) {
  1231. if (distanceToPoint(server.npcHandler.npcs[i].absX, server.npcHandler.npcs[i].absY) <= range && ! server.npcHandler.npcs[i].IsDead) {
  1232. int damage = misc.random(maxDamage);
  1233.  
  1234. animation(gfx, server.npcHandler.npcs[i].absY, server.npcHandler.npcs[i].absX);
  1235. if (server.npcHandler.npcs[i].HP-hitDiff < 0) {
  1236. damage = server.npcHandler.npcs[i].HP;
  1237. }
  1238. server.npcHandler.npcs[i].StartKilling = playerId;
  1239. server.npcHandler.npcs[i].RandomWalk = false;
  1240. server.npcHandler.npcs[i].hitDiff = damage;
  1241. server.npcHandler.npcs[i].updateRequired = true;
  1242. server.npcHandler.npcs[i].hitUpdateRequired = true;
  1243. server.npcHandler.npcs[i].hit = true;
  1244. }
  1245. }
  1246. }
  1247. }
  1248.  
  1249. public void attackPlayersWithin(int gfx, int maxDamage, int range) {
  1250. //for (Player p : server.playerHandler.players) {
  1251. //Linux (java 1.4.2-compatible) change - Devolution
  1252. for (int i = 0; i < server.playerHandler.players.length; i++) {
  1253. //changed
  1254. Player p = server.playerHandler.players[i]; //changed
  1255. if (p != null) {
  1256. client person = (client)p;
  1257.  
  1258. if (person.playerName != null) {
  1259. if (person.distanceToPoint(absX, absY) <= range && person.playerId != playerId) {
  1260. int damage = misc.random(maxDamage);
  1261.  
  1262. person.animation(gfx, person.absY, person.absX);
  1263. if (person.playerLevel[3]-hitDiff < 0) {
  1264. damage = person.playerLevel[3];
  1265. }
  1266. person.hitDiff = damage;
  1267. person.KillerId = playerId;
  1268. person.updateRequired = true;
  1269. person.hitUpdateRequired = true;
  1270. }
  1271. }
  1272. }
  1273. }
  1274. }
  1275.  
  1276. /* PRAYER */
  1277. public boolean Retribution = false;
  1278.  
  1279. public void attackPlayersPrayer(int maxDamage, int range) {
  1280. //for (Player p : server.playerHandler.players) {
  1281. //Linux (java 1.4.2-compatible) change - Devolution
  1282. for (int i = 0; i < server.playerHandler.players.length; i++) {
  1283. //changed
  1284. Player p = server.playerHandler.players[i]; //changed
  1285. if (p != null) {
  1286. client person = (client)p;
  1287.  
  1288. if (person.playerName != null) {
  1289. if (person.distanceToPoint(absX, absY) <= range && person.playerId != playerId) {
  1290. int damage = misc.random(maxDamage);
  1291.  
  1292. if (person.playerLevel[3]-hitDiff < 0) {
  1293. damage = person.playerLevel[3];
  1294. }
  1295. person.hitDiff = damage;
  1296. person.KillerId = playerId;
  1297. person.updateRequired = true;
  1298. person.hitUpdateRequired = true;
  1299. }
  1300. }
  1301. }
  1302. }
  1303. }
  1304.  
  1305. /* END OF PRAYER */
  1306. public void viewTo(int coordX, int coordY) {
  1307. viewToX = ((2*coordX)+1);
  1308. viewToY = ((2*coordY)+1);
  1309. dirUpdate2Required = true;
  1310. updateRequired = true;
  1311. }
  1312.  
  1313. public boolean wearing = false;
  1314. public int summonLevel = 250;
  1315. public int summonXP = 9999999;
  1316.  
  1317. /* SUMMONING*/
  1318.  
  1319. public static boolean AutoSave = false;
  1320. public int savecounter = 0;
  1321. public boolean spellSet = false;
  1322. public boolean iceBarrage = false;
  1323. public int iceTimer = 1000;
  1324. public void iceBarrage() {
  1325. iceBarrage = true;
  1326. iceTimer = 1000;
  1327. }
  1328.  
  1329. /* MISC*/
  1330. public int hasset = 0;
  1331. public int oldclick = 0;
  1332. public int sameclick = 0;
  1333.  
  1334. /* RANGE*/
  1335. public boolean HasArrows = true;
  1336.  
  1337. public void CheckArrows() {
  1338. for (int k = 880; k < 893; k++) {
  1339.  
  1340. if (playerEquipment[playerArrows] == k) {
  1341. HasArrows = true;
  1342. } else {
  1343. HasArrows = false;
  1344. }
  1345. }
  1346. }
  1347.  
  1348. public void createEnemyItem(int newItemID) {
  1349. int EnemyX = PlayerHandler.players[AttackingOn].absX;
  1350. int EnemyY = PlayerHandler.players[AttackingOn].absY;
  1351. int Maxi = server.itemHandler.DropItemCount;
  1352.  
  1353. for (int i = 0; i <= Maxi; i++) {
  1354. if (server.itemHandler.DroppedItemsID[i] < 1) {
  1355. server.itemHandler.DroppedItemsID[i] = newItemID;
  1356. server.itemHandler.DroppedItemsX[i] = (EnemyX);
  1357. server.itemHandler.DroppedItemsY[i] = (EnemyY);
  1358. server.itemHandler.DroppedItemsN[i] = 1;
  1359. server.itemHandler.DroppedItemsH[i] = heightLevel;
  1360. server.itemHandler.DroppedItemsDDelay[i] = (server.itemHandler.MaxDropShowDelay+1); // this way the item can NEVER be showed to another client
  1361. server.itemHandler.DroppedItemsDropper[i] = playerId;
  1362. if (i == Maxi) {
  1363. server.itemHandler.DropItemCount++;
  1364. if (server.itemHandler.DropItemCount >= (server.itemHandler.MaxDropItems+1)) {
  1365. server.itemHandler.DropItemCount = 0;
  1366. misc.println("! Notify item resterting !");
  1367. }
  1368. }
  1369. break;
  1370. }
  1371. }
  1372. }
  1373.  
  1374. public void CalculateRange() {
  1375. double MaxHit = 0;
  1376. int RangeBonus = playerBonus[3]; // Range Bonus
  1377. int Range = playerLevel[4];
  1378. {
  1379. // Range
  1380. MaxHit += (double)(1.05+(double)((double)(RangeBonus*Range)*0.00175));
  1381. }
  1382. MaxHit += (double)(Range*0.2);
  1383. playerMaxHit = (int)Math.floor(MaxHit);
  1384. }
  1385.  
  1386. public void restorePot() {
  1387.  
  1388. playerLevel[0] = getLevelForXP(playerXP[0]);
  1389. sendFrame126(""+playerLevel[0]+"", 4004);
  1390. playerLevel[1] = getLevelForXP(playerXP[1]);
  1391. sendFrame126(""+playerLevel[1]+"", 4008);
  1392. playerLevel[2] = getLevelForXP(playerXP[2]);
  1393. sendFrame126(""+playerLevel[2]+"", 4006);
  1394. playerLevel[4] = getLevelForXP(playerXP[4]);
  1395. sendFrame126(""+playerLevel[4]+"", 4010);
  1396. playerLevel[6] = getLevelForXP(playerXP[6]);
  1397. sendFrame126(""+playerLevel[6]+"", 4014);
  1398. playerLevel[7] = getLevelForXP(playerXP[7]);
  1399. sendFrame126(""+playerLevel[7]+"", 4034);
  1400. playerLevel[8] = getLevelForXP(playerXP[8]);
  1401. sendFrame126(""+playerLevel[8]+"", 4038);
  1402. playerLevel[9] = getLevelForXP(playerXP[9]);
  1403. sendFrame126(""+playerLevel[9]+"", 4026);
  1404. playerLevel[10] = getLevelForXP(playerXP[10]);
  1405. sendFrame126(""+playerLevel[10]+"", 4032);
  1406. playerLevel[11] = getLevelForXP(playerXP[11]);
  1407. sendFrame126(""+playerLevel[11]+"", 4036);
  1408. playerLevel[12] = getLevelForXP(playerXP[12]);
  1409. sendFrame126(""+playerLevel[12]+"", 4024);
  1410. playerLevel[13] = getLevelForXP(playerXP[13]);
  1411. sendFrame126(""+playerLevel[13]+"", 4030);
  1412. playerLevel[14] = getLevelForXP(playerXP[14]);
  1413. sendFrame126(""+playerLevel[14]+"", 4028);
  1414. playerLevel[15] = getLevelForXP(playerXP[15]);
  1415. sendFrame126(""+playerLevel[15]+"", 4020);
  1416. playerLevel[16] = getLevelForXP(playerXP[16]);
  1417. sendFrame126(""+playerLevel[16]+"", 4018);
  1418. playerLevel[17] = getLevelForXP(playerXP[17]);
  1419. sendFrame126(""+playerLevel[17]+"", 4022);
  1420. playerLevel[20] = getLevelForXP(playerXP[20]);
  1421. sendFrame126(""+playerLevel[20]+"", 4152);
  1422. }
  1423. public void createNewTileObject(int x, int y, int typeID, int orientation, int tileObjectType) {
  1424. outStream.createFrame(85);
  1425. outStream.writeByteC(y-(mapRegionY*8));
  1426. outStream.writeByteC(x-(mapRegionX*8));
  1427.  
  1428. outStream.createFrame(151);
  1429. //outStream.writeByteA(((x&7) << 4) + (y&7));
  1430. outStream.writeByteA(0);
  1431. outStream.writeWordBigEndian(typeID);
  1432. outStream.writeByteS((tileObjectType << 2)+(orientation & 3));
  1433. }
  1434.  
  1435. public int duelWho = 0;
  1436. public boolean duelReq = false;
  1437. public int[]duelItems = new int[28];
  1438. public boolean[]duelItemsNoted = new boolean[28];
  1439. public int[]duelItemsN = new int[28];
  1440. public boolean duelAccept1 = false;
  1441. public boolean duelAccept2 = false;
  1442. public void duelPlayer(int pIndex) {
  1443. try {
  1444. if (!(pIndex >= 2047) /* && canDuel()*/) {
  1445. client duelPlayer = (client)server.playerHandler.players[pIndex];
  1446.  
  1447. sendMessage("Mage on player unlocked");
  1448. //duelPlayer.sendMessage(playerName+":duelreq:");
  1449. } else {
  1450. sendMessage("Dueling is currently disabled");
  1451. }
  1452. } catch (Exception e) {
  1453. sendMessage("attackPlayer: Invalid player index");
  1454. }
  1455. }
  1456. public int abc;
  1457. public int cba;
  1458. public int aaa;
  1459. public int abc2;
  1460.  
  1461. public int resetanim = 8;
  1462. public int KillerId = playerId;
  1463. public void levelup(int skill) {
  1464. switch (skill) {
  1465. case 0:
  1466. // Attack levelup
  1467. sendFrame164(6247);
  1468. sendFrame126("Congratulations, you just advanced an attack level!", 6248);
  1469. sendFrame126("Your attack level is now "+playerLevel[0]+".", 6249);
  1470. sendMessage("Congratulations, you just advanced an attack level.");
  1471. NpcDialogueSend = true;
  1472. break;
  1473.  
  1474. case 1:
  1475. // Strength
  1476. sendFrame164(6206);
  1477. sendFrame126("Congratulations, you just advanced a strength level!", 6207);
  1478. sendFrame126("Your strength level is now "+playerLevel[2]+".", 6208);
  1479. sendMessage("Congratulations, you just advanced a strength level.");
  1480. NpcDialogueSend = true;
  1481. break;
  1482.  
  1483. case 2:
  1484. // Defence
  1485. sendFrame164(6253);
  1486. sendFrame126("Congratulations, you just advanced a defence level!", 6254);
  1487. sendFrame126("Your defence level is now "+playerLevel[1]+".", 6255);
  1488. sendMessage("Congratulations, you just advanced a defence level.");
  1489. NpcDialogueSend = true;
  1490. break;
  1491.  
  1492. case 3:
  1493. // Hitpoints
  1494. sendFrame164(6216);
  1495. sendFrame126("Congratulations, you just advanced a hitpoints level!", 6217);
  1496. sendFrame126("Your hitpoints level is now "+playerLevel[3]+".", 6218);
  1497. sendMessage("Congratulations, you just advanced a hitpoints level.");
  1498. NpcDialogueSend = true;
  1499. break;
  1500.  
  1501. case 4:
  1502. // Ranging
  1503. sendFrame164(4443);
  1504. sendFrame126("Congratulations, you just advanced a ranged level!", 4444);
  1505. sendFrame126("Your ranged level is now "+playerLevel[4]+".", 4445);
  1506. sendMessage("Congratulations, you just advanced a ranging level.");
  1507. NpcDialogueSend = true;
  1508. break;
  1509.  
  1510. case 5:
  1511. // Prayer
  1512. sendFrame164(6242);
  1513. sendFrame126("Congratulations, you just advanced a prayer level!", 6243);
  1514. sendFrame126("Your prayer level is now "+playerLevel[5]+".", 6244);
  1515. sendMessage("Congratulations, you just advanced a prayer level.");
  1516. NpcDialogueSend = true;
  1517. break;
  1518.  
  1519. case 6:
  1520. // Magic
  1521. sendFrame164(6211);
  1522. sendFrame126("Congratulations, you just advanced a magic level!", 6212);
  1523. sendFrame126("Your magic level is now "+playerLevel[6]+".", 6213);
  1524. sendMessage("Congratulations, you just advanced a magic level.");
  1525. NpcDialogueSend = true;
  1526. break;
  1527.  
  1528. case 7:
  1529. // Cooking
  1530. sendFrame164(6226);
  1531. sendFrame126("Congratulations, you just advanced a cooking level!", 6227);
  1532. sendFrame126("Your cooking level is now "+playerLevel[7]+".", 6228);
  1533. sendMessage("Congratulations, you just advanced a cooking level.");
  1534. NpcDialogueSend = true;
  1535. break;
  1536.  
  1537. case 8:
  1538. // Woodcutting
  1539. sendFrame164(4272);
  1540. sendFrame126("Congratulations, you just advanced a woodcutting level!", 4273);
  1541. sendFrame126("Your woodcutting level is now "+playerLevel[8]+".", 4274);
  1542. sendMessage("Congratulations, you just advanced a woodcutting level.");
  1543. NpcDialogueSend = true;
  1544. break;
  1545.  
  1546. case 9:
  1547. // Fletching
  1548. sendFrame164(6231);
  1549. sendFrame126("Congratulations, you just advanced a fletching level!", 6232);
  1550. sendFrame126("Your fletching level is now "+playerLevel[9]+".", 6233);
  1551. sendMessage("Congratulations, you just advanced a fletching level.");
  1552. NpcDialogueSend = true;
  1553. break;
  1554.  
  1555. case 10:
  1556. // fishing
  1557. sendFrame164(6258);
  1558. sendFrame126("Congratulations, you just advanced a fishing level!", 6259);
  1559. sendFrame126("Your fishing level is now "+playerLevel[10]+".", 6260);
  1560. sendMessage("Congratulations, you just advanced a fishing level.");
  1561. NpcDialogueSend = true;
  1562. break;
  1563.  
  1564. case 11:
  1565. // firemaking
  1566. sendFrame164(4282);
  1567. sendFrame126("Congratulations, you just advanced a fire making level!", 4283);
  1568. sendFrame126("Your firemaking level is now "+playerLevel[11]+".", 4284);
  1569. sendMessage("Congratulations, you just advanced a fire making level.");
  1570. NpcDialogueSend = true;
  1571. break;
  1572.  
  1573. case 12:
  1574. // crafting
  1575. sendFrame164(6263);
  1576. sendFrame126("Congratulations, you just advanced a crafting level!", 6264);
  1577. sendFrame126("Your crafting level is now "+playerLevel[12]+".", 6265);
  1578. sendMessage("Congratulations, you just advanced a crafting level.");
  1579. NpcDialogueSend = true;
  1580. break;
  1581.  
  1582. case 13:
  1583. // Smithing
  1584. sendFrame164(6221);
  1585. sendFrame126("Congratulations, you just advanced a smithing level!", 6222);
  1586. sendFrame126("Your smithing level is now "+playerLevel[13]+".", 6223);
  1587. sendMessage("Congratulations, you just advanced a smithing level.");
  1588. NpcDialogueSend = true;
  1589. break;
  1590.  
  1591. case 14:
  1592. // Mining
  1593. sendFrame164(4416);
  1594. sendFrame126("Congratulations, you just advanced a mining level!", 4417);
  1595. sendFrame126("Your mining level is now "+playerLevel[14]+".", 4418);
  1596. sendMessage("Congratulations, you just advanced a mining level.");
  1597. NpcDialogueSend = true;
  1598. break;
  1599.  
  1600. case 15:
  1601. // Herblore
  1602. sendFrame164(6237);
  1603. sendFrame126("Congratulations, you just advanced a herblore level!", 6238);
  1604. sendFrame126("Your herblore level is now "+playerLevel[15]+".", 6239);
  1605. sendMessage("Congratulations, you just advanced a herblore level.");
  1606. NpcDialogueSend = true;
  1607. break;
  1608.  
  1609. case 16:
  1610. // Agility
  1611. sendFrame164(4277);
  1612. sendFrame126("Congratulations, you just advanced a agility level!", 4278);
  1613. sendFrame126("Your agility level is now "+playerLevel[16]+".", 4279);
  1614. sendMessage("Congratulations, you just advanced an agility level.");
  1615. NpcDialogueSend = true;
  1616. break;
  1617.  
  1618. case 17:
  1619. // Thieving
  1620. sendFrame164(4261);
  1621. sendFrame126("Congratulations, you just advanced a thieving level!", 6262);
  1622. sendFrame126("Your theiving level is now "+playerLevel[17]+".", 6263);
  1623. sendMessage("Congratulations, you just advanced a thieving level.");
  1624. NpcDialogueSend = true;
  1625. break;
  1626.  
  1627. case 18:
  1628. // Slayer
  1629. sendFrame164(12123);
  1630. sendFrame126("Congratulations, you just advanced a slayer level!", 6207);
  1631. sendFrame126("Your slayer level is now "+playerLevel[18]+".", 6208);
  1632. sendMessage("Congratulations, you just advanced a slayer level.");
  1633. NpcDialogueSend = true;
  1634. break;
  1635.  
  1636. case 19:
  1637. // Farming
  1638. // sendFrame164(4261);
  1639. // sendFrame126("Congratulations, you just advanced a thieving level!", 6207);
  1640. // sendFrame126("Your farming level is now "+playerLevel[19]+" .", 6208);
  1641. sendMessage("Congratulations, you just advanced a farming level.");
  1642. NpcDialogueSend = true;
  1643. break;
  1644.  
  1645. case 20:
  1646. // Runecrafting
  1647. sendFrame164(4267);
  1648. sendFrame126("Congratulations, you just advanced a runecrafting level!", 4268);
  1649. sendFrame126("Your runecrafting level is now "+playerLevel[20]+".", 4269);
  1650. sendMessage("Congratulations, you just advanced a runecrafting level.");
  1651. NpcDialogueSend = true;
  1652. break;
  1653.  
  1654. }
  1655. }
  1656.  
  1657. public void refreshSkills() {
  1658.  
  1659. sendQuest(""+playerLevel[0]+"", 4004);
  1660. sendQuest(""+playerLevel[2]+"", 4006);
  1661. sendQuest(""+playerLevel[1]+"", 4008);
  1662. sendQuest(""+playerLevel[4]+"", 4010);
  1663. sendQuest(""+playerLevel[5]+"", 4012);
  1664. sendQuest(""+playerLevel[6]+"", 4014);
  1665. sendQuest(""+currentHealth+"", 4016);
  1666. sendQuest(""+playerLevel[16]+"", 4018);
  1667. sendQuest(""+playerLevel[15]+"", 4020);
  1668. sendQuest(""+playerLevel[17]+"", 4022);
  1669. sendQuest(""+playerLevel[12]+"", 4024);
  1670. sendQuest(""+playerLevel[9]+"", 4026);
  1671. sendQuest(""+playerLevel[14]+"", 4028);
  1672. sendQuest(""+playerLevel[13]+"", 4030);
  1673. sendQuest(""+playerLevel[10]+"", 4032);
  1674. sendQuest(""+playerLevel[7]+"", 4034);
  1675. sendQuest(""+playerLevel[11]+"", 4036);
  1676. sendQuest(""+playerLevel[8]+"", 4038);
  1677. sendQuest(""+playerLevel[20]+"", 4152);
  1678. sendQuest(""+playerLevel[18]+"", 12166);
  1679. sendQuest(""+playerLevel[19]+"", 13926);
  1680.  
  1681. sendQuest(""+getLevelForXP(playerXP[0])+"", 4005);
  1682. sendQuest(""+getLevelForXP(playerXP[2])+"", 4007);
  1683. sendQuest(""+getLevelForXP(playerXP[1])+"", 4009);
  1684. sendQuest(""+getLevelForXP(playerXP[4])+"", 4011);
  1685. sendQuest(""+getLevelForXP(playerXP[5])+"", 4013);
  1686. sendQuest(""+getLevelForXP(playerXP[6])+"", 4015);
  1687. sendQuest(""+getLevelForXP(playerXP[3])+"", 4017);
  1688. sendQuest(""+getLevelForXP(playerXP[16])+"", 4019);
  1689. sendQuest(""+getLevelForXP(playerXP[15])+"", 4021);
  1690. sendQuest(""+getLevelForXP(playerXP[17])+"", 4023);
  1691. sendQuest(""+getLevelForXP(playerXP[12])+"", 4025);
  1692. sendQuest(""+getLevelForXP(playerXP[9])+"", 4027);
  1693. sendQuest(""+getLevelForXP(playerXP[14])+"", 4029);
  1694. sendQuest(""+getLevelForXP(playerXP[13])+"", 4031);
  1695. sendQuest(""+getLevelForXP(playerXP[10])+"", 4033);
  1696. sendQuest(""+getLevelForXP(playerXP[7])+"", 4035);
  1697. sendQuest(""+getLevelForXP(playerXP[11])+"", 4037);
  1698. sendQuest(""+getLevelForXP(playerXP[8])+"", 4039);
  1699. sendQuest(""+getLevelForXP(playerXP[20])+"", 4153);
  1700. sendQuest(""+getLevelForXP(playerXP[18])+"", 12167);
  1701. sendQuest(""+getLevelForXP(playerXP[19])+"", 13927);
  1702.  
  1703. sendQuest(""+playerXP[0]+"", 4044);
  1704. sendQuest(""+playerXP[2]+"", 4050);
  1705. sendQuest(""+playerXP[1]+"", 4056);
  1706. sendQuest(""+playerXP[4]+"", 4062);
  1707. sendQuest(""+playerXP[5]+"", 4068);
  1708. sendQuest(""+playerXP[6]+"", 4074);
  1709. sendQuest(""+playerXP[3]+"", 4080);
  1710. sendQuest(""+playerXP[16]+"", 4086);
  1711. sendQuest(""+playerXP[15]+"", 4092);
  1712. sendQuest(""+playerXP[17]+"", 4098);
  1713. sendQuest(""+playerXP[12]+"", 4104);
  1714. sendQuest(""+playerXP[9]+"", 4110);
  1715. sendQuest(""+playerXP[14]+"", 4116);
  1716. sendQuest(""+playerXP[13]+"", 4122);
  1717. sendQuest(""+playerXP[10]+"", 4128);
  1718. sendQuest(""+playerXP[7]+"", 4134);
  1719. sendQuest(""+playerXP[11]+"", 4140);
  1720. sendQuest(""+playerXP[8]+"", 4146);
  1721. sendQuest(""+playerXP[20]+"", 4157);
  1722. sendQuest(""+playerXP[18]+"", 12171);
  1723. sendQuest(""+playerXP[19]+"", 13921);
  1724.  
  1725. sendQuest(""+getXPForLevel(playerLevel[0]+1)+"", 4045);
  1726. sendQuest(""+getXPForLevel(playerLevel[2]+1)+"", 4051);
  1727. sendQuest(""+getXPForLevel(playerLevel[1]+1)+"", 4057);
  1728. sendQuest(""+getXPForLevel(playerLevel[4]+1)+"", 4063);
  1729. sendQuest(""+getXPForLevel(playerLevel[5]+1)+"", 4069);
  1730. sendQuest(""+getXPForLevel(playerLevel[6]+1)+"", 4075);
  1731. sendQuest(""+getXPForLevel(playerLevel[3]+1)+"", 4081);
  1732. sendQuest(""+getXPForLevel(playerLevel[16]+1)+"", 4087);
  1733. sendQuest(""+getXPForLevel(playerLevel[15]+1)+"", 4093);
  1734. sendQuest(""+getXPForLevel(playerLevel[17]+1)+"", 4099);
  1735. sendQuest(""+getXPForLevel(playerLevel[12]+1)+"", 4105);
  1736. sendQuest(""+getXPForLevel(playerLevel[9]+1)+"", 4111);
  1737. sendQuest(""+getXPForLevel(playerLevel[14]+1)+"", 4117);
  1738. sendQuest(""+getXPForLevel(playerLevel[13]+1)+"", 4123);
  1739. sendQuest(""+getXPForLevel(playerLevel[10]+1)+"", 4129);
  1740. sendQuest(""+getXPForLevel(playerLevel[7]+1)+"", 4135);
  1741. sendQuest(""+getXPForLevel(playerLevel[11]+1)+"", 4141);
  1742. sendQuest(""+getXPForLevel(playerLevel[8]+1)+"", 4147);
  1743. sendQuest(""+getXPForLevel(playerLevel[20]+1)+"", 4158);
  1744. sendQuest(""+getXPForLevel(playerLevel[18]+1)+"", 12172);
  1745. sendQuest(""+getXPForLevel(playerLevel[19]+1)+"", 13922);
  1746. }
  1747.  
  1748. public int distanceToPoint(int pointX, int pointY) {
  1749. return (int)Math.sqrt(Math.pow(absX-pointX, 2)+Math.pow(absY-pointY, 2));
  1750. }
  1751.  
  1752. public void teleblock() {
  1753. // stops from teleing anywhere
  1754. AntiTeleDelay = 1000;
  1755. }
  1756.  
  1757. public int AntiTeleDelay;
  1758.  
  1759. public int amountOfItem(int itemID) {
  1760. int i1 = 0;
  1761.  
  1762. for (int i = 0; i < 28; i++) {
  1763. if (playerItems[i] == (itemID+1)) {
  1764. i1++;
  1765. }
  1766. }
  1767. return i1;
  1768. }
  1769.  
  1770. public boolean ResetAttackPlayer(int NPCID) {
  1771. server.npcHandler.npcs[NPCID].IsUnderAttack = false;
  1772. server.npcHandler.npcs[NPCID].StartKilling = 0;
  1773. server.npcHandler.npcs[NPCID].RandomWalk = true;
  1774. server.npcHandler.npcs[NPCID].animNumber = 0x328;
  1775. server.npcHandler.npcs[NPCID].animUpdateRequired = true;
  1776. server.npcHandler.npcs[NPCID].updateRequired = true;
  1777. return true;
  1778. }
  1779. public String converse;
  1780. public static boolean threats;
  1781. public int restart = 0;
  1782.  
  1783. /* ALLIGNMENT(Good - Evil - Creds to Runite)*/
  1784. public int allignment = 0;
  1785. public boolean alreadyChose = false;
  1786. public String playerstatus = "";
  1787. public static boolean comeback = false;
  1788. public int stealtimer;
  1789.  
  1790. public void robman() {
  1791. sendMessage("You pickpocket the man.");
  1792. addItem(995, 100);
  1793. addSkillXP(200, 17);
  1794. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1795. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1796.  
  1797. TurnPlayerTo(EnemyX2, EnemyY2);
  1798.  
  1799. }
  1800.  
  1801. public void robfarmer() {
  1802. long now = System.currentTimeMillis();
  1803. if (now-lastAction < 1500)
  1804. return;
  1805. lastAction = now;
  1806. sendMessage("You pickpocket the farmer.");
  1807. addItem(995, misc.random(300));
  1808. addSkillXP(320, 17);
  1809. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1810. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1811.  
  1812. TurnPlayerTo(EnemyX2, EnemyY2);
  1813. updateRequired = true;
  1814. appearanceUpdateRequired = true;
  1815.  
  1816. }
  1817.  
  1818. public void robwarrior() {
  1819. sendMessage("You pickpocket the warrior.");
  1820. addItem(995, misc.random(1000));
  1821. addSkillXP(4600, 1000);
  1822. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1823. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1824.  
  1825. TurnPlayerTo(EnemyX2, EnemyY2);
  1826. updateRequired = true;
  1827. appearanceUpdateRequired = true;
  1828. }
  1829.  
  1830. public void robrogue() {
  1831. if (premium) {
  1832. sendMessage("You pickpocket the rogue.");
  1833. addItem(995, misc.random(600));
  1834. addSkillXP(450, 17);
  1835. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1836. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1837.  
  1838. TurnPlayerTo(EnemyX2, EnemyY2);
  1839. updateRequired = true;
  1840. appearanceUpdateRequired = true;
  1841. }
  1842. }
  1843.  
  1844. public void robmasterfarmer() {
  1845. sendMessage("You pickpocket the master farmer.");
  1846. addItem(995, 40);
  1847. addSkillXP(43, 17);
  1848. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1849. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1850.  
  1851. TurnPlayerTo(EnemyX2, EnemyY2);
  1852. updateRequired = true;
  1853. appearanceUpdateRequired = true;
  1854. }
  1855.  
  1856. public void robguard() {
  1857. sendMessage("You pickpocket the gaurd.");
  1858. addItem(995, 30);
  1859. addSkillXP(47, 17);
  1860. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1861. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1862.  
  1863. TurnPlayerTo(EnemyX2, EnemyY2);
  1864. updateRequired = true;
  1865. appearanceUpdateRequired = true;
  1866. }
  1867.  
  1868. public void robknight() {
  1869. sendMessage("You pickpocket the knight.");
  1870. addItem(995, 50);
  1871. addSkillXP(85, 17);
  1872. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1873. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1874.  
  1875. TurnPlayerTo(EnemyX2, EnemyY2);
  1876. updateRequired = true;
  1877. appearanceUpdateRequired = true;
  1878. }
  1879.  
  1880. public void robwatchman() {
  1881. sendMessage("You pickpocket the watchman.");
  1882. addItem(995, 60);
  1883. addSkillXP(138, 17);
  1884. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1885. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1886.  
  1887. TurnPlayerTo(EnemyX2, EnemyY2);
  1888. updateRequired = true;
  1889. appearanceUpdateRequired = true;
  1890. }
  1891.  
  1892. public void robpaladin() {
  1893. sendMessage("You pickpocket the paladin.");
  1894. addItem(995, 80);
  1895. addSkillXP(152, 17);
  1896. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1897. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1898.  
  1899. TurnPlayerTo(EnemyX2, EnemyY2);
  1900. updateRequired = true;
  1901. appearanceUpdateRequired = true;
  1902. }
  1903.  
  1904. public void robgnome() {
  1905. sendMessage("You pickpocket the gnome.");
  1906. addItem(995, misc.random(2500));
  1907. addSkillXP(680, 17);
  1908. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1909. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1910.  
  1911. TurnPlayerTo(EnemyX2, EnemyY2);
  1912. updateRequired = true;
  1913. appearanceUpdateRequired = true;
  1914. }
  1915.  
  1916. public void robhero() {
  1917. sendMessage("You pickpocket the hero.");
  1918. addItem(995, 3000);
  1919. addSkillXP(274, 17);
  1920. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1921. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1922.  
  1923. TurnPlayerTo(EnemyX2, EnemyY2);
  1924. updateRequired = true;
  1925. appearanceUpdateRequired = true;
  1926. }
  1927.  
  1928. public void robelf() {
  1929. sendMessage("You pickpocket the elf.");
  1930. addItem(995, 350);
  1931. addSkillXP(353, 17);
  1932. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1933. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1934.  
  1935. TurnPlayerTo(EnemyX2, EnemyY2);
  1936. updateRequired = true;
  1937. appearanceUpdateRequired = true;
  1938. }
  1939.  
  1940. public void robfail() {
  1941. EntangleDelay = 40;
  1942. }
  1943.  
  1944. public void animation(int id, int Y, int X) {
  1945. // ANIMATIONS AT GROUND HEIGHT
  1946. //for (Player p : server.playerHandler.players) {
  1947. for (int i = 0; i < server.playerHandler.players.length; i++) {
  1948. Player p = server.playerHandler.players[i];
  1949. if (p != null) {
  1950. client person = (client)p;
  1951.  
  1952. if (person.playerName != null) {
  1953. if (person.distanceToPoint(X, Y) <= 60) {
  1954. person.animation2(id, Y, X);
  1955. }
  1956. }
  1957. }
  1958. }
  1959. }
  1960.  
  1961. public void animation3(int id, int Y, int X) {
  1962. // ANIMATIONS AT MIDDLE HEIGHT
  1963. //for (Player p : server.playerHandler.players) {
  1964. for (int i = 0; i < server.playerHandler.players.length; i++) {
  1965. Player p = server.playerHandler.players[i];
  1966. if (p != null) {
  1967. client person = (client)p;
  1968.  
  1969. if (person.playerName != null) {
  1970. if (person.distanceToPoint(X, Y) <= 60) {
  1971. person.animation4(id, Y, X);
  1972. }
  1973. }
  1974. }
  1975. }
  1976. }
  1977.  
  1978. public void animation2(int id, int Y, int X) {
  1979. // ANIMATIONS AT GROUND HEIGHT
  1980. outStream.createFrame(85);
  1981. outStream.writeByteC(Y-(mapRegionY*8));
  1982. outStream.writeByteC(X-(mapRegionX*8));
  1983. outStream.createFrame(4);
  1984. outStream.writeByte(0); // Tiles away (X >> 4 + Y & 7)
  1985. outStream.writeWord(id); // Graphic id
  1986. outStream.writeByte(0); // height of the spell above it's basic place, i think it's written in pixels 100 pixels high
  1987. outStream.writeWord(0); // Time before casting the graphic
  1988. }
  1989.  
  1990. public void animation4(int id, int Y, int X) {
  1991. // ANIMATIONS AT GROUND HEIGHT
  1992. outStream.createFrame(85);
  1993. outStream.writeByteC(Y-(mapRegionY*8));
  1994. outStream.writeByteC(X-(mapRegionX*8));
  1995. outStream.createFrame(4);
  1996. outStream.writeByte(0); // Tiles away (X >> 4 + Y & 7)
  1997. outStream.writeWord(id); // Graphic id
  1998. outStream.writeByte(0); // height of the spell above it's basic place, i think it's written in pixels 100 pixels high
  1999. outStream.writeWord(0); // Time before casting the graphic
  2000. }
  2001.  
  2002. public void stillgfx(int id, int Y, int X, int height, int time) {
  2003. //for (Player p : server.playerHandler.players) {
  2004. for (int i = 0; i < server.playerHandler.players.length; i++) {
  2005. Player p = server.playerHandler.players[i];
  2006. if (p != null) {
  2007. client person = (client)p;
  2008.  
  2009. if (person.playerName != null) {
  2010. if (person.distanceToPoint(X, Y) <= 60) {
  2011. person.stillgfx2(id, Y, X, height, time);
  2012. }
  2013. }
  2014. }
  2015. }
  2016. }
  2017. public void stillgfx(int id, int y, int x) {
  2018. stillgfx(id, y, x, 0, 0);
  2019. }
  2020.  
  2021. public void stillgfx2(int id, int Y, int X, int height, int time) {
  2022. outStream.createFrame(85);
  2023. outStream.writeByteC(Y-(mapRegionY*8));
  2024. outStream.writeByteC(X-(mapRegionX*8));
  2025. outStream.createFrame(4);
  2026. outStream.writeByte(0); // Tiles away (X >> 4 + Y & 7)
  2027. outStream.writeWord(id); // Graphic id
  2028. outStream.writeByte(height); // height of the spell above it's basic place, i think it's written in pixels 100 pixels higher
  2029. outStream.writeWord(time); // Time before casting the graphic
  2030. }
  2031.  
  2032. public int MageAttackIndex = -1; // -1
  2033. public boolean cast = false; // Part Of The Create Spell Code
  2034. public boolean fired = false; // Part Of The Create Spell Code
  2035. public boolean firingspell = false; // Part Of The Create Spell Code
  2036. public boolean AnimationReset; // Resets Animations With The Use Of The ActionTimer
  2037. public int fcastid = 0;
  2038. public int fcasterY = 0;
  2039. public int fcasterX = 0;
  2040. public int foffsetY = 0;
  2041. public int foffsetX = 0;
  2042. public int fangle = 0;
  2043. public int fspeed = 0;
  2044. public int fmgfxid = 0;
  2045. public int fsh = 0;
  2046. public int feh = 0;
  2047. public int ffinishid = 0;
  2048. public int fenemyY = 0;
  2049. public int fenemyX = 0;
  2050.  
  2051. public boolean firespell(int castID, int casterY, int casterX, int offsetY, int offsetX, int angle, int speed, int movegfxID, int startHeight, int endHeight, int MageAttackIndex, int finishID, int enemyY, int enemyX) {
  2052. fcastid = castID;
  2053. fcasterY = casterY;
  2054. fcasterX = casterX;
  2055. foffsetY = offsetY;
  2056. foffsetX = offsetX;
  2057. fangle = angle;
  2058. fspeed = speed;
  2059. fmgfxid = movegfxID;
  2060. fsh = startHeight;
  2061. feh = endHeight;
  2062. ffinishid = finishID;
  2063. fenemyY = enemyY;
  2064. fenemyX = enemyX;
  2065. MageAttackIndex = MageAttackIndex;
  2066. actionTimer = 0;
  2067.  
  2068. // Casts Spell In Hands
  2069. if (cast == false && actionTimer <= 0) {
  2070. stillgfx(castID, casterY, casterX);
  2071. cast = true;
  2072. firingspell = true;
  2073. }
  2074. // Fires Projectile
  2075. if (cast == true && fired == false && actionTimer <= 0) {
  2076. createProjectile(casterY, casterX, offsetY, offsetX, angle, speed, movegfxID, startHeight, endHeight, MageAttackIndex);
  2077. fired = true;
  2078. }
  2079. // Finishes Spell
  2080. if (fired == true && actionTimer <= 0) {
  2081. stillgfx(finishID, enemyY, enemyX);
  2082. resetGFX(castID, enemyX, enemyY);
  2083. return false;
  2084. }
  2085. return true;
  2086.  
  2087. } // Resets Projectiles
  2088.  
  2089. public void resetGFX(int id, int X, int Y) {
  2090. GraphicsHandler.removeGFX(id, X, Y);
  2091. firingspell = false;
  2092. cast = false;
  2093. fired = false;
  2094. }
  2095.  
  2096. public void createProjectile(int casterY, int casterX, int offsetY, int offsetX, int angle, int speed, int gfxMoving, int startHeight, int endHeight, int MageAttackIndex) {
  2097. try {
  2098. outStream.createFrame(85);
  2099. outStream.writeByteC((casterY-(mapRegionY*8))-2);
  2100. outStream.writeByteC((casterX-(mapRegionX*8))-3);
  2101. outStream.createFrame(117);
  2102. outStream.writeByte(angle); // Starting place of the projectile
  2103. outStream.writeByte(offsetY); // Distance between caster and enemy Y
  2104. outStream.writeByte(offsetX); // Distance between caster and enemy X
  2105. outStream.writeWord(MageAttackIndex); // The NPC the missle is locked on to
  2106. outStream.writeWord(gfxMoving); // The moving graphic ID
  2107. outStream.writeByte(startHeight); // The starting height
  2108. outStream.writeByte(endHeight); // Destination height
  2109. outStream.writeWord(51); // Time the missle is created
  2110. outStream.writeWord(speed); // Speed minus the distance making it set
  2111. outStream.writeByte(16); // Initial slope
  2112. outStream.writeByte(64); // Initial distance from source (in the direction of the missile) //64
  2113. } catch (Exception e) {
  2114. server.logError(e.getMessage());
  2115. }
  2116. }
  2117.  
  2118. public void testMagic(int spellID) {
  2119. createProjectile(absY, absX, 0, 3, 50, 160, spellID, 43, 31, 0);
  2120. }
  2121.  
  2122. public String Winner = "Nobody";
  2123. public int cwAmount = 0;
  2124. public int cwTimer = 0;
  2125. public int saraScore;
  2126. public int zammyScore;
  2127. public boolean banned(String host) {
  2128. try {
  2129. BufferedReader in = new BufferedReader(new FileReader("data/bannedusers.txt"));
  2130. String data = null;
  2131.  
  2132. while ((data = in.readLine()) != null) {
  2133. if (host.equalsIgnoreCase(data)) {
  2134. return true;
  2135. }
  2136. }
  2137. } catch (IOException e) {
  2138. System.out.println("Unable to ban player");
  2139. server.logError(e.getMessage());
  2140. }
  2141. return false;
  2142. }
  2143.  
  2144. public void appendToBanned(String player) {
  2145.  
  2146. BufferedWriter bw = null;
  2147.  
  2148. try {
  2149. bw = new BufferedWriter(new FileWriter("data/bannedusers.dat", true));
  2150. bw.write(player);
  2151. bw.newLine();
  2152. bw.flush();
  2153. } catch (IOException ioe) {
  2154. ioe.printStackTrace();
  2155. } finally {
  2156. if (bw != null) {
  2157. try {
  2158. bw.close();
  2159. } catch (IOException ioe2) {
  2160. sendMessage("Error banning user!");
  2161. }
  2162. }
  2163. }
  2164.  
  2165. }
  2166.  
  2167. public boolean playerIsSaradomin = false;
  2168. public boolean playerIsZamorak = false;
  2169. public boolean castleWarsOn = false;
  2170. public void println_debug(String str) {
  2171. System.out.println("[client-"+playerId+"-"+playerName+"]: "+str);
  2172. }
  2173.  
  2174. public void println(String str) {
  2175. System.out.println("[client-"+playerId+"-"+playerName+"]: "+str);
  2176. }
  2177.  
  2178. public void updateCharAppearance(int[]styles, int[]colors) {
  2179. for (int j = 0; j < 7; j++) {
  2180. if (styles[j] > 0) {
  2181. styles[j] += 0x100;
  2182. pCHead = styles[0];
  2183. pCBeard = styles[1];
  2184. pCTorso = styles[2];
  2185. pCArms = styles[3];
  2186. pCHands = styles[4];
  2187. pCLegs = styles[5];
  2188. pCFeet = styles[6];
  2189. }
  2190. }
  2191. for (int i = 0; i < 5; i++) {
  2192. pColor = colors[i];
  2193. }
  2194. }
  2195.  
  2196. public void setAnimation(int i) {
  2197. pEmote = i;
  2198. updateRequired = true;
  2199. appearanceUpdateRequired = true;
  2200. }
  2201.  
  2202. public void resetAnimation() {
  2203. pEmote = playerSE;
  2204. updateRequired = true;
  2205. appearanceUpdateRequired = true;
  2206. }
  2207.  
  2208. public void randomize(int o, int oo, int ooo, int oooo) {
  2209. outStream.createFrame(53);
  2210. outStream.writeWord(o);
  2211. outStream.writeWord(oo);
  2212. outStream.writeByte(ooo);
  2213. outStream.writeWordBigEndianA(oooo);
  2214. flushOutStream();
  2215. }
  2216.  
  2217. public void sendFrame126(String s, int id) {
  2218. outStream.createFrameVarSizeWord(126);
  2219. outStream.writeString(s);
  2220. outStream.writeWordA(id);
  2221. outStream.endFrameVarSizeWord();
  2222. flushOutStream();
  2223. }
  2224.  
  2225. public void sendFrame248(int MainFrame, int SubFrame) {
  2226. outStream.createFrame(248);
  2227. outStream.writeWordA(MainFrame);
  2228. outStream.writeWord(SubFrame);
  2229. flushOutStream();
  2230. }
  2231.  
  2232. public void sendFrame200(int MainFrame, int SubFrame) {
  2233. outStream.createFrame(200);
  2234. outStream.writeWord(MainFrame);
  2235. outStream.writeWord(SubFrame);
  2236. flushOutStream();
  2237. }
  2238.  
  2239. public void sendFrame75(int MainFrame, int SubFrame) {
  2240. outStream.createFrame(75);
  2241. outStream.writeWordBigEndianA(MainFrame);
  2242. outStream.writeWordBigEndianA(SubFrame);
  2243. flushOutStream();
  2244. }
  2245.  
  2246. public void sendFrame164(int Frame) {
  2247. outStream.createFrame(164);
  2248. outStream.writeWordBigEndian_dup(Frame);
  2249. flushOutStream();
  2250. }
  2251.  
  2252. public void sendFrame246(int MainFrame, int SubFrame, int SubFrame2) {
  2253. outStream.createFrame(246);
  2254. outStream.writeWordBigEndian(MainFrame);
  2255. outStream.writeWord(SubFrame);
  2256. outStream.writeWord(SubFrame2);
  2257. flushOutStream();
  2258. }
  2259.  
  2260. public void sendFrame185(int Frame) {
  2261. outStream.createFrame(185);
  2262. outStream.writeWordBigEndianA(Frame);
  2263. flushOutStream();
  2264. }
  2265.  
  2266. public void sendFrame171(int MainFrame, int SubFrame) {
  2267. outStream.createFrame(171);
  2268. outStream.writeByte(MainFrame);
  2269. outStream.writeWord(SubFrame);
  2270. flushOutStream();
  2271. }
  2272.  
  2273. public void RemoveAllWindows() {
  2274. outStream.createFrame(219);
  2275. flushOutStream();
  2276. }
  2277.  
  2278. public void sendQuestSomething(int id) {
  2279. outStream.createFrame(79);
  2280. outStream.writeWordBigEndian(id);
  2281. outStream.writeWordA(0);
  2282. flushOutStream();
  2283. }
  2284.  
  2285. public void clearQuestInterface() {
  2286. for (int x = 0; x < QuestInterface.length; x++) {
  2287. sendFrame126("", QuestInterface[x]);
  2288. }
  2289. }
  2290.  
  2291. public void showInterface(int interfaceid) {
  2292. resetAction();
  2293. outStream.createFrame(97);
  2294. outStream.writeWord(interfaceid);
  2295. flushOutStream();
  2296. }
  2297.  
  2298. public int ancients = 1;
  2299. public boolean ancientstele = false;
  2300. public boolean teleport = false;
  2301. public int teletimer = 0;
  2302. public int teleX = 0;
  2303. public int teleY = 0;
  2304. public int newheightLevel = 0;
  2305. public void teleport() {
  2306. teleport = true;
  2307. if (ancientstele == true) {
  2308. animation(392, absY, absX);
  2309. teletimer = 12;
  2310. } else if (ancientstele == false) {
  2311. setAnimation(714);
  2312. animation(308, absY, absX);
  2313. teletimer = 5;
  2314. }
  2315. }
  2316.  
  2317. public int[]QuestInterface = {
  2318. 8145, 8147, 8148, 8149, 8150, 8151, 8152, 8153, 8154, 8155, 8156, 8157, 8158, 8159, 8160, 8161, 8162, 8163, 8164, 8165, 8166, 8167, 8168, 8169, 8170, 8171, 8172, 8173, 8174, 8175, 8176, 8177, 8178, 8179, 8180, 8181, 8182, 8183, 8184, 8185, 8186, 8187, 8188, 8189, 8190, 8191, 8192, 8193, 8194, 8195, 12174, 12175, 12176, 12177, 12178, 12179, 12180, 12181, 12182, 12183, 12184, 12185, 12186, 12187, 12188, 12189, 12190, 12191, 12192, 12193, 12194, 12195, 12196, 12197, 12198, 12199, 12200, 12201, 12202, 12203, 12204, 12205, 12206, 12207, 12208, 12209, 12210, 12211, 12212, 12213, 12214, 12215, 12216, 12217, 12218, 12219, 12220, 12221, 12222, 12223
  2319. };
  2320.  
  2321. public String statName[] = {
  2322. "attack", "defence", "strength", "hitpoints", "range", "prayer", "magic", "cooking", "woodcutting", "fletching", "fishing", "firemaking", "crafting", "smithing", "mining", "herblore", "agility", "thieving", "slayer", "farming", "runecrafting"
  2323. };
  2324. public int[]statId = {
  2325. 10252, 11000, 10253, 11001, 10254, 11002, 10255, 11011, 11013, 11014, 11010, 11012, 11006, 11009, 11008, 11004, 11003, 11005, 47002, 54090, 11007
  2326. };
  2327. public String BonusMySqlName[] = {
  2328. "attack_stab", "attack_slash", "attack_crush", "attack_magic", "attack_range", "defence_stab", "defence_slash", "defence_crush", "defence_magic", "defence_range", "other_strength", "other_prayer"
  2329. };
  2330. public String BonusName[] = {
  2331. "Stab", "Slash", "Crush", "Magic", "Range", "Stab", "Slash", "Crush", "Magic", "Range", "Str", "Spell Dmg"
  2332. };
  2333.  
  2334. public int pCHead;
  2335. public int pCBeard;
  2336. public int pCTorso;
  2337. public int pCArms;
  2338. public int pCHands;
  2339. public int pCLegs;
  2340. public int pCFeet;
  2341. public int pColor;
  2342. public int i;
  2343.  
  2344. private int XremoveSlot = 0;
  2345. private int XinterfaceID = 0;
  2346. private int XremoveID = 0;
  2347. private long lastPickup = 0;
  2348. private int emotes = 0;
  2349.  
  2350. public int stairs = 0;
  2351. public int stairDistance = 1;
  2352. public int stairDistanceAdd = 0;
  2353. public int doors = -1;
  2354.  
  2355. private int woodcutting[] = {
  2356. 0, 0, 0, 1, -1, 2
  2357. };
  2358. private int smithing[] = {
  2359. 0, 0, 0, 1, -1, 0
  2360. };
  2361. private int mining[] = {
  2362. 0, 0, 0, 1, -1
  2363. };
  2364. private int useitems[] = {
  2365. -1, -1, -1, -1
  2366. };
  2367. private int prayer[] = {
  2368. 0, 1, 0, 1, -1, -1
  2369. };
  2370. private int healing[] = {
  2371. 0, 0, 0, -1, -1
  2372. };
  2373.  
  2374. /*
  2375. WOODCUTTING
  2376. [0] = woodcutting
  2377. [1] = Level
  2378. [2] = Exp
  2379. [3] = Exp Rate
  2380. [4] = Item
  2381. [5] = Distance
  2382.  
  2383. FLETCHING
  2384. [0] = fletching
  2385. [1] = Level
  2386. [2] = Exp
  2387. [3] = Exp Rate
  2388. [4] = Item
  2389. [5] = Asking
  2390. [6] = Make
  2391.  
  2392. MINING
  2393. [0] = mining
  2394. [1] = Level
  2395. [2] = Exp
  2396. [3] = Exp Rate
  2397. [4] = Item
  2398.  
  2399. SMELTING
  2400. [0] = smelting
  2401. [1] = Level
  2402. [2] = Exp
  2403. [3] = Item
  2404. [4] = What
  2405. [5] = What Slot
  2406. [6] = Del Coal
  2407.  
  2408. SMITHING
  2409. [0] = smithing
  2410. [1] = Level
  2411. [2] = Smith Type
  2412. [3] = Exp Rate
  2413. [4] = Item
  2414. [5] = smithing loop value
  2415.  
  2416. USEITEMS
  2417. [0] = use id
  2418. [1] = used on id
  2419. [2] = used on slot
  2420. [3] = use slot
  2421.  
  2422. CRAFTING
  2423. [0] = crafting
  2424. [1] = Level
  2425. [2] = Exp
  2426. [3] = Exp Rate
  2427. [4] = Item
  2428.  
  2429. PRAYER
  2430. [0] = prayer
  2431. [1] = Level (always 1)
  2432. [2] = Exp
  2433. [3] = Exp Rate
  2434. [4] = DelItem
  2435. [5] = DelItemSlot
  2436.  
  2437. HEALING
  2438. [0] = healing
  2439. [1] = MinHealth
  2440. [2] = MaxHealth
  2441. [3] = Item
  2442. [4] = UsedItem
  2443. */
  2444.  
  2445. public int skillX = -1;
  2446. public int skillY = -1;
  2447. public int PickUpID = 0;
  2448. public int PickUpAmount = 0;
  2449. public int PickUpDelete = 0;
  2450. public int CombatExpRate = 1;
  2451. public int SkillID = 0;
  2452. public boolean WildernessWarning = false;
  2453.  
  2454. private int WanneBank = 0;
  2455. private int WanneShop = 0;
  2456.  
  2457. public int OriginalWeapon = -1;
  2458. public int OriginalShield = -1;
  2459. public int AttackingOn = 0;
  2460.  
  2461. public static final int bufferSize = 1000000;
  2462. private java.net.Socket mySock;
  2463. private java.io.InputStream in;
  2464. private java.io.OutputStream out;
  2465. public byte buffer[] = null;
  2466. public int readPtr, writePtr;
  2467. public stream inStream = null, outStream = null;
  2468.  
  2469. public Cryption inStreamDecryption = null, outStreamDecryption = null;
  2470.  
  2471. public int lowMemoryVersion = 0;
  2472.  
  2473. public int timeOutCounter = 0; // to detect timeouts on the connection to the client
  2474.  
  2475. public int returnCode = 2; // Tells the client if the login was successfull
  2476.  
  2477. public client(java.net.Socket s, int _playerId) {
  2478. super(_playerId);
  2479. mySock = s;
  2480. try {
  2481. in = s.getInputStream();
  2482. out = s.getOutputStream();
  2483. } catch (java.io.IOException ioe) {
  2484. misc.println("Odion Server (1): Exception!");
  2485. server.logError(ioe.getMessage());
  2486. }
  2487.  
  2488. outStream = new stream(new byte[bufferSize]);
  2489. outStream.currentOffset = 0;
  2490. inStream = new stream(new byte[bufferSize]);
  2491. inStream.currentOffset = 0;
  2492.  
  2493. readPtr = writePtr = 0;
  2494. buffer = buffer = new byte[bufferSize];
  2495. }
  2496.  
  2497. public void shutdownError(String errorMessage) {
  2498. //misc.println(": " + errorMessage);
  2499. destruct();
  2500. }
  2501.  
  2502. public void destruct() {
  2503. if (mySock == null) {
  2504. return;
  2505. } // already shutdown
  2506. try {
  2507. //misc.println("ClientHandler: Client "+playerName+" disconnected ("+connectedFrom+")");
  2508. disconnected = true;
  2509. if (saveNeeded)
  2510. this.savegame(true);
  2511. if (in != null) {
  2512. in.close();
  2513. }
  2514. if (out != null) {
  2515. out.close();
  2516. }
  2517. mySock.close();
  2518. mySock = null;
  2519. in = null;
  2520. out = null;
  2521. inStream = null;
  2522. outStream = null;
  2523. isActive = false;
  2524. synchronized(this) {
  2525. notify();
  2526. } // make sure this threads gets control so it can terminate
  2527. buffer = null;
  2528. } catch (java.io.IOException ioe) {
  2529. ioe.printStackTrace();
  2530. }
  2531. super.destruct();
  2532. }
  2533.  
  2534. public void sendQuest(String s, int id) {
  2535. try {
  2536. outStream.createFrameVarSizeWord(126);
  2537. outStream.writeString(s);
  2538. outStream.writeWordA(id);
  2539. outStream.endFrameVarSizeWord();
  2540. } catch (Exception e) {
  2541. server.logError(e.getMessage());
  2542. }
  2543. }
  2544.  
  2545. // writes any data in outStream to the relaying buffer
  2546. public void flushOutStream() {
  2547. if (disconnected || outStream.currentOffset == 0) {
  2548. return;
  2549. }
  2550.  
  2551. synchronized(this) {
  2552. int maxWritePtr = (readPtr+bufferSize-2)%bufferSize;
  2553.  
  2554. for (int i = 0; i < outStream.currentOffset; i++) {
  2555. buffer[writePtr] = outStream.buffer[i];
  2556. writePtr = (writePtr+1)%bufferSize;
  2557. if (writePtr == maxWritePtr) {
  2558. shutdownError("Buffer overflow.");
  2559. // outStream.currentOffset = 0;
  2560. disconnected = true;
  2561. return;
  2562. }
  2563. }
  2564. outStream.currentOffset = 0;
  2565.  
  2566. notify();
  2567. }
  2568. }
  2569.  
  2570. // two methods that are only used for login procedure
  2571. private void directFlushOutStream()throws java.io.IOException {
  2572. out.write(outStream.buffer, 0, outStream.currentOffset);
  2573. outStream.currentOffset = 0; // reset
  2574. }
  2575.  
  2576. // forces to read forceRead bytes from the client - block until we have received those
  2577. private void fillInStream(int forceRead)throws java.io.IOException {
  2578. inStream.currentOffset = 0;
  2579. in.read(inStream.buffer, 0, forceRead);
  2580. }
  2581.  
  2582. public void run() {
  2583. objects();
  2584. // we just accepted a new connection - handle the login stuff
  2585. isActive = false;
  2586. long serverSessionKey = 0, clientSessionKey = 0;
  2587.  
  2588. // randomize server part of the session key
  2589. serverSessionKey = ((long)(java.lang.Math.random()*99999999D) << 32)+(long)(java.lang.Math.random()*99999999D);
  2590.  
  2591. try {
  2592. fillInStream(2);
  2593. if (inStream.readUnsignedByte() != 14) {
  2594. shutdownError("Expected login Id 14 from client.");
  2595. disconnected = true;
  2596. return;
  2597. }
  2598. // this is part of the usename. Maybe it's used as a hash to select the appropriate
  2599. // login server
  2600. int namePart = inStream.readUnsignedByte();
  2601. for (int i = 0; i < 8; i++) {
  2602. out.write(1);
  2603. } // is being ignored by the client
  2604.  
  2605. // login response - 0 means exchange session key to establish encryption
  2606. // Note that we could use 2 right away to skip the cryption part, but i think this
  2607. // won't work in one case when the cryptor class is not set and will throw a NullPointerException
  2608. out.write(0);
  2609.  
  2610. // send the server part of the session Id used (client+server part together are used as cryption key)
  2611. outStream.writeQWord(serverSessionKey);
  2612. directFlushOutStream();
  2613. fillInStream(2);
  2614. int loginType = inStream.readUnsignedByte(); // this is either 16 (new login) or 18 (reconnect after lost connection)
  2615.  
  2616. if (loginType != 16 && loginType != 18) {
  2617. shutdownError("Unexpected login type "+loginType);
  2618. return;
  2619. }
  2620. int loginPacketSize = inStream.readUnsignedByte();
  2621. int loginEncryptPacketSize = loginPacketSize-(36+1+1+2); // the size of the RSA encrypted part (containing password)
  2622.  
  2623. // misc.println_debug("LoginPacket size: "+loginPacketSize+", RSA packet size: "+loginEncryptPacketSize);
  2624. if (loginEncryptPacketSize <= 0) {
  2625. shutdownError("Zero RSA packet size!");
  2626. return;
  2627. }
  2628. fillInStream(loginPacketSize);
  2629. if (inStream.readUnsignedByte() != 255 || inStream.readUnsignedWord() != 317) {
  2630. shutdownError("Wrong login packet magic ID (expected 255, 317)");
  2631. return;
  2632. }
  2633. lowMemoryVersion = inStream.readUnsignedByte();
  2634. // misc.println_debug("Client type: "+((lowMemoryVersion==1) ? "low" : "high")+" memory version");
  2635. for (int i = 0; i < 9; i++) {
  2636. String junk = Integer.toHexString(inStream.readDWord());
  2637. //misc.println_debug("dataFileVersion["+i+"]: 0x"+Integer.toHexString(inStream.readDWord()));
  2638. }
  2639. // don't bother reading the RSA encrypted block because we can't unless
  2640. // we brute force jagex' private key pair or employ a hacked client the removes
  2641. // the RSA encryption part or just uses our own key pair.
  2642. // Our current approach is to deactivate the RSA encryption of this block
  2643. // clientside by setting exp to 1 and mod to something large enough in (data^exp) % mod
  2644. // effectively rendering this tranformation inactive
  2645.  
  2646. loginEncryptPacketSize--; // don't count length byte
  2647. int tmp = inStream.readUnsignedByte();
  2648. if (loginEncryptPacketSize != tmp) {
  2649. shutdownError("Encrypted packet data length ("+loginEncryptPacketSize+") different from length byte thereof ("+tmp+")");
  2650. return;
  2651. }
  2652. tmp = inStream.readUnsignedByte();
  2653. if (tmp != 10) {
  2654. shutdownError("Encrypted packet Id was "+tmp+" but expected 10");
  2655. return;
  2656. }
  2657. clientSessionKey = inStream.readQWord();
  2658. serverSessionKey = inStream.readQWord();
  2659.  
  2660. // misc.println("UserId: "+inStream.readDWord());
  2661. int junk = inStream.readDWord();
  2662. playerName = inStream.readString();
  2663. int expectedUid = 1;
  2664. if (junk == expectedUid) {
  2665. println("Odion client detected!");
  2666. officialClient = true;
  2667. }
  2668. uid = junk;
  2669. if (playerName == null || playerName.length() == 0) {
  2670. playerName = "player"+playerId;
  2671. }
  2672. playerPass = inStream.readString();
  2673.  
  2674. try {
  2675. playerServer = inStream.readString();
  2676. } catch (Exception e) {
  2677. playerServer = "rs2.servegame.org";
  2678. }
  2679.  
  2680. playerName = playerName.toLowerCase();
  2681. playerPass = playerPass.toLowerCase();
  2682.  
  2683. char[]validChars = {
  2684. 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '_', ' '
  2685. };
  2686. playerName = playerName.trim();
  2687. int sessionKey[] = new int[4];
  2688.  
  2689. sessionKey[0] = (int)(clientSessionKey >> 32);
  2690. sessionKey[1] = (int)clientSessionKey;
  2691. sessionKey[2] = (int)(serverSessionKey >> 32);
  2692. sessionKey[3] = (int)serverSessionKey;
  2693.  
  2694. for (int i = 0; i < 4; i++) {
  2695. }
  2696. inStreamDecryption = new Cryption(sessionKey);
  2697. for (int i = 0; i < 4; i++) {
  2698. sessionKey[i] += 50;
  2699. }
  2700.  
  2701. for (int i = 0; i < 4; i++) {
  2702. }
  2703. outStreamDecryption = new Cryption(sessionKey);
  2704. outStream.packetEncryption = outStreamDecryption;
  2705.  
  2706. returnCode = 2;
  2707. for (int i = 0; i < playerName.length(); i++) {
  2708. boolean valid = false;
  2709. for (int i1 = 0; i1 < validChars.length; i1++) {
  2710. if (playerName.charAt(i) == validChars[i1]) {
  2711. valid = true;
  2712. //break;
  2713. }
  2714. }
  2715. if (!valid) {
  2716. returnCode = 4;
  2717. disconnected = true;
  2718. savefile = false;
  2719. return;
  2720. }
  2721. }
  2722. char first = playerName.charAt(0);
  2723. properName = Character.toUpperCase(first)+playerName.substring(1, playerName.length());
  2724. playerName = properName;
  2725. if (PlayerHandler.updateRunning) {
  2726. returnCode = 14;
  2727. disconnected = true;
  2728. savefile = false;
  2729. //println_debug(playerName+" refused - update is running !");
  2730. return;
  2731. }
  2732. if (!server.loginServerConnected) {
  2733. returnCode = 8;
  2734. disconnected = true;
  2735. return;
  2736. }
  2737.  
  2738. boolean found = false;
  2739. int type = 5;
  2740.  
  2741. if (checkLog("bans", playerName)) {
  2742. println(playerName+" failed to logon because they are banned.");
  2743. returnCode = 4;
  2744. disconnected = true;
  2745. return;
  2746. }
  2747.  
  2748. //uncomment this code below to stop multiple logins from 1 computer.
  2749.  
  2750. /*for(int i = 0; i < server.playerHandler.players.length; i++){
  2751. Player p = server.playerHandler.players[i];
  2752. if(p != null && !p.disconnected && p.connectedFrom.equals(connectedFrom) && playerId != p.playerId && !connectedFrom.equals("localhost")){
  2753. sendMessage("Address in use!");
  2754. returnCode = 9;
  2755. disconnected = true;
  2756. return;
  2757. }
  2758. }*/
  2759.  
  2760. int loadgame = loadgame(playerName, (playerPass));
  2761.  
  2762. if (loadgame == 3) {
  2763. //wrong password.
  2764. returnCode = 3;
  2765. disconnected = true;
  2766. return;
  2767. }
  2768.  
  2769. if (server.playerHandler.isPlayerOn(playerName)) {
  2770. returnCode = 5;
  2771. disconnected = true;
  2772. return;
  2773. }
  2774. if (server.enforceClient && ! officialClient) {
  2775. println("Invalid client!");
  2776. returnCode = 12;
  2777. disconnected = true;
  2778. return;
  2779. } else {
  2780. switch (playerRights) {
  2781. case 20:
  2782. //root admin
  2783. premium = true;
  2784. break;
  2785. case 3:
  2786. //regular admin
  2787. premium = true;
  2788. break;
  2789. case 2:
  2790. //global mod
  2791. premium = true;
  2792. break;
  2793. case 1:
  2794. //player moderator
  2795. premium = true;
  2796. break;
  2797. case 4:
  2798. //just premium
  2799. premium = true;
  2800. break;
  2801. default: playerRights = 0;
  2802. premium = false;
  2803. break;
  2804. }
  2805. for (int i = 0; i < playerEquipment.length; i++) {
  2806. if (playerEquipment[i] == 0) {
  2807. playerEquipment[i] = -1;
  2808. playerEquipmentN[i] = 0;
  2809. }
  2810. }
  2811. if (loadgame == 0) {
  2812. validLogin = true;
  2813. if (absX > 0 && absY > 0) {
  2814. teleportToX = absX;
  2815. teleportToY = absY;
  2816. //heightLevel = 0;
  2817. }
  2818. } else {
  2819. returnCode = loadgame;
  2820. disconnected = true;
  2821. return;
  2822. }
  2823. if (returnCode == 5) {
  2824. returnCode = 21;
  2825. loginDelay = 15;
  2826. }
  2827. }
  2828. } catch (java.lang.Exception __ex) {
  2829. server.logError(__ex.getMessage());
  2830. __ex.printStackTrace();
  2831. } finally {
  2832. //Do everything in this statement failure or not..(IDK WHY SERVERS DIDN'T HAVE THIS!) -bakatool
  2833. try {
  2834. if (playerId == -1)
  2835. out.write(7);
  2836. // "This world is full."
  2837. else if (playerServer.equals("INVALID"))
  2838. out.write(10);
  2839. else
  2840. out.write(returnCode);
  2841. // login response(1: wait 2seconds, 2=login successfull, 4=ban :-)
  2842.  
  2843. if (returnCode == 21)
  2844. out.write(loginDelay);
  2845.  
  2846. if (playerId == -1 || returnCode != 2) {
  2847. playerName = null;
  2848. disconnected = true;
  2849. destruct();
  2850. }
  2851.  
  2852. // mod/admin level crown fix -bakatool
  2853. if (playerRights == 3)
  2854. out.write(2);
  2855. else
  2856. out.write(playerRights);
  2857.  
  2858. out.write(0); // no log
  2859. updateRequired = true;
  2860. appearanceUpdateRequired = true;
  2861. } catch (java.lang.Exception __ex) {
  2862. //error at finalizer means auto destruct no exceptions -bakatool
  2863. disconnected = true;
  2864. destruct();
  2865. }
  2866. }
  2867. isActive = true;
  2868. // End of login procedure
  2869. packetSize = 0;
  2870. packetType = -1;
  2871.  
  2872. readPtr = 0;
  2873. writePtr = 0;
  2874.  
  2875. int numBytesInBuffer, offset;
  2876.  
  2877. while (!disconnected && runStream) {
  2878. synchronized(this) {
  2879. if (writePtr == readPtr) {
  2880. try {
  2881. wait();
  2882. } catch (java.lang.InterruptedException _ex) {
  2883. }
  2884. }
  2885.  
  2886. if (disconnected) {
  2887. return;
  2888. }
  2889.  
  2890. offset = readPtr;
  2891. if (writePtr >= readPtr) {
  2892. numBytesInBuffer = writePtr-readPtr;
  2893. } else {
  2894. numBytesInBuffer = bufferSize-readPtr;
  2895. }
  2896. }
  2897. if (numBytesInBuffer > 0) {
  2898. try {
  2899. out.write(buffer, offset, numBytesInBuffer);
  2900. readPtr = (readPtr+numBytesInBuffer)%bufferSize;
  2901. if (writePtr == readPtr) {
  2902. out.flush();
  2903. }
  2904. } catch (java.net.SocketException e) {
  2905. disconnected = true;
  2906. if (saveNeeded)
  2907. savegame(true);
  2908. } catch (java.lang.Exception __ex) {
  2909. server.logError(__ex.getMessage());
  2910. disconnected = true;
  2911. if (saveNeeded)
  2912. savegame(true);
  2913. }
  2914. }
  2915. }
  2916. }
  2917.  
  2918. // sends a game message of trade/duelrequests: "PlayerName:tradereq:" or "PlayerName:duelreq:"
  2919. public void sendMessage(String s) {
  2920. outStream.createFrameVarSize(253);
  2921. outStream.writeString(s);
  2922. outStream.endFrameVarSize();
  2923. }
  2924.  
  2925. public void setSidebarInterface(int menuId, int form) {
  2926. outStream.createFrame(71);
  2927. outStream.writeWord(form);
  2928. outStream.writeByteA(menuId);
  2929. }
  2930.  
  2931. public void setSkillLevel(int skillNum, int currentLevel, int XP) {
  2932. if (skillNum == 0) {
  2933. sendQuest(""+playerLevel[0]+"", 4004);
  2934. sendQuest(""+getLevelForXP(playerXP[0])+"", 4005);
  2935. }
  2936. if (skillNum == 2) {
  2937. sendQuest(""+playerLevel[2]+"", 4006);
  2938. sendQuest(""+getLevelForXP(playerXP[2])+"", 4007);
  2939. }
  2940. if (skillNum == 1) {
  2941. sendQuest(""+playerLevel[1]+"", 4008);
  2942. sendQuest(""+getLevelForXP(playerXP[1])+"", 4009);
  2943. }
  2944. if (skillNum == 4) {
  2945. sendQuest(""+playerLevel[4]+"", 4010);
  2946. sendQuest(""+getLevelForXP(playerXP[4])+"", 4011);
  2947. }
  2948. if (skillNum == 5) {
  2949. sendQuest(""+playerLevel[5]+"", 4012);
  2950. sendQuest(""+getLevelForXP(playerXP[5])+"", 4013);
  2951. }
  2952. if (skillNum == 6) {
  2953. sendQuest(""+playerLevel[6]+"", 4014);
  2954. sendQuest(""+getLevelForXP(playerXP[6])+"", 4015);
  2955. }
  2956. if (skillNum == 3) {
  2957. sendQuest(""+currentHealth+"", 4016);
  2958. sendQuest(""+getLevelForXP(playerXP[3])+"", 4017);
  2959. }
  2960. if (skillNum == 16) {
  2961. sendQuest(""+playerLevel[16]+"", 4018);
  2962. sendQuest(""+getLevelForXP(playerXP[16])+"", 4019);
  2963. }
  2964. if (skillNum == 15) {
  2965. sendQuest(""+playerLevel[15]+"", 4020);
  2966. sendQuest(""+getLevelForXP(playerXP[15])+"", 4021);
  2967. }
  2968. if (skillNum == 17) {
  2969. sendQuest(""+playerLevel[17]+"", 4022);
  2970. sendQuest(""+getLevelForXP(playerXP[17])+"", 4023);
  2971. }
  2972. if (skillNum == 12) {
  2973. sendQuest(""+playerLevel[12]+"", 4024);
  2974. sendQuest(""+getLevelForXP(playerXP[12])+"", 4025);
  2975. }
  2976. if (skillNum == 9) {
  2977. sendQuest(""+playerLevel[9]+"", 4026);
  2978. sendQuest(""+getLevelForXP(playerXP[9])+"", 4027);
  2979. }
  2980. if (skillNum == 14) {
  2981. sendQuest(""+playerLevel[14]+"", 4028);
  2982. sendQuest(""+getLevelForXP(playerXP[14])+"", 4029);
  2983. }
  2984. if (skillNum == 13) {
  2985. sendQuest(""+playerLevel[13]+"", 4030);
  2986. sendQuest(""+getLevelForXP(playerXP[13])+"", 4031);
  2987. }
  2988. if (skillNum == 10) {
  2989. sendQuest(""+playerLevel[10]+"", 4032);
  2990. sendQuest(""+getLevelForXP(playerXP[10])+"", 4033);
  2991. }
  2992. if (skillNum == 7) {
  2993. sendQuest(""+playerLevel[7]+"", 4034);
  2994. sendQuest(""+getLevelForXP(playerXP[7])+"", 4035);
  2995. }
  2996. if (skillNum == 11) {
  2997. sendQuest(""+playerLevel[11]+"", 4036);
  2998. sendQuest(""+getLevelForXP(playerXP[11])+"", 4037);
  2999. }
  3000. if (skillNum == 8) {
  3001. sendQuest(""+playerLevel[8]+"", 4038);
  3002. sendQuest(""+getLevelForXP(playerXP[8])+"", 4039);
  3003. }
  3004. if (skillNum == 20) {
  3005. sendQuest(""+playerLevel[20]+"", 4152);
  3006. sendQuest(""+getLevelForXP(playerXP[20])+"", 4153);
  3007. }
  3008. if (skillNum == 18) {
  3009. sendQuest(""+playerLevel[18]+"", 12166);
  3010. sendQuest(""+getLevelForXP(playerXP[18])+"", 12167);
  3011. }
  3012. if (skillNum == 19) {
  3013. sendQuest(""+playerLevel[19]+"", 13926);
  3014. sendQuest(""+getLevelForXP(playerXP[19])+"", 13927);
  3015. } else {
  3016. outStream.createFrame(134);
  3017. outStream.writeByte(skillNum);
  3018. outStream.writeDWord_v1(XP);
  3019. outStream.writeByte(currentLevel);
  3020. }
  3021. }
  3022.  
  3023. public void Map() {
  3024. showInterface(8134);
  3025. }
  3026.  
  3027.  
  3028.  
  3029. public void ModHelp() {
  3030. sendFrame126("", 8144); // Helpmenu title
  3031. clearQuestInterface();
  3032. sendFrame126("", 8145);
  3033. sendFrame126("", 8146);
  3034. sendFrame126("", 8147);
  3035. sendFrame126("", 8148);
  3036. sendFrame126("", 8149);
  3037. sendFrame126("", 8150);
  3038. sendFrame126("", 8155);
  3039. sendFrame126("", 8156);
  3040. sendFrame126("", 8157);
  3041. sendFrame126("", 8158);
  3042.  
  3043. sendQuestSomething(8143);
  3044. showInterface(8134);
  3045. }
  3046.  
  3047. public void addObject(int objectX, int objectY, int NewObjectID, int Face) {
  3048. outStream.createFrameVarSizeWord(60);
  3049. outStream.writeByte(objectY-(mapRegionY*8));
  3050. outStream.writeByteC(objectX-(mapRegionX*8));
  3051.  
  3052. /* CREATE OBJECT*/
  3053. if (NewObjectID > -1) {
  3054. outStream.writeByte(151);
  3055. outStream.writeByteS(0);
  3056. outStream.writeWordBigEndian(NewObjectID);
  3057. outStream.writeByteA(Face); // 0= WEST | -1 = NORTH | -2 = EAST | -3 = SOUTH
  3058. }
  3059. outStream.endFrameVarSizeWord();
  3060. }
  3061.  
  3062. public void removeObject(int x, int y, int object) {
  3063. // romoves obj from currentx,y
  3064. outStream.createFrameVarSizeWord(60); // tells baseX and baseY to client
  3065. outStream.writeByte(y-(mapRegionY*8));
  3066. outStream.writeByteC(x-(mapRegionX*8));
  3067.  
  3068. outStream.writeByte(101); // remove object
  3069. outStream.writeByteC(0); // x and y from baseX
  3070. outStream.writeByte(0); // ??
  3071.  
  3072. outStream.endFrameVarSizeWord();
  3073. }
  3074.  
  3075. public void logout() {
  3076. if(roomcord() && inroom) {
  3077. inroom = false;
  3078. server.playersinroom -= 1;
  3079. teleportToX = 3109;
  3080. teleportToY = 3167;
  3081. }
  3082. if (inCombat) {
  3083. }
  3084. if (validClient(duel_with) && duelFight) {
  3085. getClient(duel_with).DuelVictory();
  3086. } else {
  3087. declineDuel();
  3088. }
  3089. sendMessage("Please wait... logging out may take time");
  3090. sendQuest(" Please wait...", 2458);
  3091. savegame(true);
  3092. sendQuest("Click here to logout", 2458);
  3093. //println("Logout");
  3094. outStream.createFrame(109);
  3095. }
  3096.  
  3097. public int loadgame(String playerName, String playerPass) {
  3098. for (Integer bUid: server.bannedUid) {
  3099. if (uid == bUid.intValue()) {
  3100. return 4;
  3101. }
  3102. }
  3103.  
  3104. long start = System.currentTimeMillis();
  3105. String line = "";
  3106. String token = "";
  3107. String token2 = "";
  3108. String[]token3 = new String[3];
  3109. boolean EndOfFile = false;
  3110. int ReadMode = 0;
  3111. BufferedReader characterfile = null;
  3112. boolean charFileFound = false;
  3113. int[]playerLooks = new int[19];
  3114.  
  3115. try {
  3116. characterfile = new BufferedReader(new FileReader("./characters/"+playerName+".txt"));
  3117. charFileFound = true;
  3118. } catch (FileNotFoundException fileex1) {
  3119. }
  3120.  
  3121. if (charFileFound == false) {
  3122. misc.println(playerName+": character file not found.");
  3123. //health//
  3124. for (int i = 0; i < playerLevel.length; i++) {
  3125. if (i == 3) {
  3126. playerLevel[i] = 10;
  3127. playerXP[i] = 1155;
  3128. currentHealth = 10;
  3129. maxHealth = 10;
  3130. } else {
  3131. playerLevel[i] = 1;
  3132. playerXP[i] = 0;
  3133. }
  3134. }
  3135. //Starting look//
  3136. playerLook[0] = 1;
  3137. playerLook[1] = 5;
  3138. playerLook[2] = 5;
  3139. playerLook[3] = 7;
  3140. playerLook[4] = 3;
  3141. playerLook[5] = 0;
  3142. //health//
  3143. for (int i = 0; i < playerLevel.length; i++) {
  3144. if (i == 3) {
  3145. playerLevel[i] = 10;
  3146. playerXP[i] = 1155;
  3147. currentHealth = 10;
  3148. maxHealth = 10;
  3149. }
  3150. }
  3151. //starting position
  3152. teleportToX = 3434;
  3153. teleportToY = 2891;
  3154. heightLevel = 0;
  3155. //inventory//
  3156. //playerItems[i] = 0;
  3157. //amount//
  3158. //playerItemsN[i] = 0;
  3159. //Equipt//
  3160. playerEquipment[3] = 1291;
  3161. playerEquipment[5] = 1171;
  3162. //amount//
  3163. playerEquipmentN[3] = 1;
  3164. playerEquipmentN[5] = 1;
  3165. //bank//
  3166. bankItems[0] = 996;
  3167. //amount//
  3168. bankItemsN[0] = 10000;
  3169. //end//
  3170. return 0;
  3171. }
  3172.  
  3173. try {
  3174. line = characterfile.readLine();
  3175. } catch (IOException ioexception) {
  3176. misc.println(playerName+": error loading file.");
  3177. return 3;
  3178. }
  3179. while (EndOfFile == false && line != null) {
  3180. line = line.trim();
  3181. int spot = line.indexOf("=");
  3182. if (spot > -1) {
  3183. token = line.substring(0, spot);
  3184. token = token.trim();
  3185. token2 = line.substring(spot+1);
  3186. token2 = token2.trim();
  3187. token3 = token2.split("\t");
  3188. switch (ReadMode) {
  3189. case 1:
  3190. if (token.equals("character-username")) {
  3191. if (playerName.equalsIgnoreCase(token2)) {
  3192. }
  3193. else {
  3194. saveNeeded = false;
  3195. validClient = false;
  3196. return 3;
  3197. }
  3198. }
  3199. else if (token.equals("character-password")) {
  3200. if (playerPass.equalsIgnoreCase(token2)) {
  3201. }
  3202. else {
  3203. saveNeeded = false;
  3204. validClient = false;
  3205. return 3;
  3206. }
  3207. }
  3208. break;
  3209. case 2:
  3210. if (token.equals("character-height")) {
  3211. heightLevel = Integer.parseInt(token2);
  3212. }
  3213. else if (token.equals("character-posx")) {
  3214. teleportToX = Integer.parseInt(token2);
  3215. }
  3216. else if (token.equals("character-posy")) {
  3217. teleportToY = Integer.parseInt(token2);
  3218. }
  3219. else if (token.equals("character-rights")) {
  3220. playerRights = Integer.parseInt(token2);
  3221. }
  3222. else if (token.equals("character-ismember")) {
  3223. playerIsMember = Integer.parseInt(token2);
  3224. }
  3225. else if (token.equals("character-messages")) {
  3226. playerMessages = Integer.parseInt(token2);
  3227. }
  3228. else if (token.equals("character-lastconnection")) {
  3229. playerLastConnect = token2;
  3230. }
  3231. else if (token.equals("character-lastlogin")) {
  3232. playerLastLogin = Integer.parseInt(token2);
  3233. }
  3234. else if (token.equals("character-energy")) {
  3235. playerEnergy = Integer.parseInt(token2);
  3236. }
  3237. else if (token.equals("character-gametime")) {
  3238. playerGameTime = Integer.parseInt(token2);
  3239. }
  3240. else if (token.equals("character-gamecount")) {
  3241. playerGameCount = Integer.parseInt(token2);
  3242. }
  3243. else if (token.equals("character-ancients")) {
  3244. ancients = Integer.parseInt(token2);
  3245. }
  3246. else if (token.equals("character-rating")) {
  3247. rating = Integer.parseInt(token2);
  3248. }
  3249. else if (token.equals("character-FightType")) {
  3250. FightType = Integer.parseInt(token2);
  3251. }
  3252. else if (token.equals("character-SkillID")) {
  3253. SkillID = Integer.parseInt(token2);
  3254. }
  3255. break;
  3256. case 3:
  3257. if (token.equals("character-equip")) {
  3258. playerEquipment[Integer.parseInt(token3[0])] = Integer.parseInt(token3[1]);
  3259. playerEquipmentN[Integer.parseInt(token3[0])] = Integer.parseInt(token3[2]);
  3260. }
  3261. break;
  3262. case 4:
  3263. if (token.equals("character-look")) {
  3264. playerLooks[Integer.parseInt(token3[0])] = Integer.parseInt(token3[1]);
  3265. }
  3266. break;
  3267. case 5:
  3268. if (token.equals("character-skill")) {
  3269. playerLevel[Integer.parseInt(token3[0])] = Integer.parseInt(token3[1]);
  3270. playerXP[Integer.parseInt(token3[0])] = Integer.parseInt(token3[2]);
  3271.  
  3272. int level = 0;
  3273. if (playerXP[Integer.parseInt(token3[0])] > 13040000) {
  3274. level = 99;
  3275. }
  3276. else {
  3277. level = getLevelForXP(playerXP[Integer.parseInt(token3[0])]);
  3278. }
  3279.  
  3280. playerLevel[Integer.parseInt(token3[0])] = level;
  3281. if(Integer.parseInt(token3[0]) != 3) {
  3282. setSkillLevel(Integer.parseInt(token3[0]), level, playerXP[Integer.parseInt(token3[0])]);
  3283. }
  3284. if (Integer.parseInt(token3[0]) == 3) {
  3285. currentHealth = Integer.parseInt(token3[1]);
  3286. }
  3287. }
  3288. break;
  3289. case 6:
  3290. if (token.equals("character-item")) {
  3291. playerItems[Integer.parseInt(token3[0])] = Integer.parseInt(token3[1]);
  3292. playerItemsN[Integer.parseInt(token3[0])] = Integer.parseInt(token3[2]);
  3293. }
  3294. break;
  3295. case 7:
  3296. if (token.equals("character-bank")) {
  3297. bankItems[Integer.parseInt(token3[0])] = Integer.parseInt(token3[1]);
  3298. bankItemsN[Integer.parseInt(token3[0])] = Integer.parseInt(token3[2]);
  3299. }
  3300. break;
  3301. case 8:
  3302. if (token.equals("character-friend")) {
  3303. friends[Integer.parseInt(token3[0])] = Long.parseLong(token3[1]);
  3304. }
  3305. break;
  3306. case 9:
  3307. if (token.equals("character-ignore")) {
  3308. ignores[Integer.parseInt(token3[0])] = Long.parseLong(token3[1]);
  3309. }
  3310. break;
  3311. }
  3312. } else {
  3313. if (line.equals("[ACCOUNT]"))
  3314. ReadMode = 1;
  3315. else if (line.equals("[CHARACTER]"))
  3316. ReadMode = 2;
  3317. else if (line.equals("[EQUIPMENT]"))
  3318. ReadMode = 3;
  3319. else if (line.equals("[LOOK]"))
  3320. ReadMode = 4;
  3321. else if (line.equals("[SKILLS]"))
  3322. ReadMode = 5;
  3323. else if (line.equals("[ITEMS]"))
  3324. ReadMode = 6;
  3325. else if (line.equals("[BANK]"))
  3326. ReadMode = 7;
  3327. else if (line.equals("[FRIENDS]"))
  3328. ReadMode = 8;
  3329. else if (line.equals("[IGNORES]"))
  3330. ReadMode = 9;
  3331. else if (line.equals("[EOF]")) {
  3332. //end of file now do whatever you set.
  3333. try {
  3334. characterfile.close();
  3335. } catch (IOException ioexception) {
  3336. }
  3337. setLook(playerLooks);
  3338. updateRequired = true;
  3339. appearanceUpdateRequired = true;
  3340. long end = System.currentTimeMillis()-start;
  3341. //println("Loading Process Completed ["+(playerRights > 0 ? "Has powers" : "Regular player")+", lag: "+end+" ms]");
  3342. return 0;
  3343. }
  3344. }
  3345.  
  3346. //Exception occured @ some line
  3347. try {
  3348. line = characterfile.readLine();
  3349. } catch (IOException ioexception1) {
  3350. EndOfFile = true;
  3351. }
  3352. }
  3353.  
  3354. try {
  3355. characterfile.close();
  3356. } catch (IOException ioexception) {
  3357. }
  3358. println("Failed to load player: "+playerName);
  3359. return 13;
  3360. }
  3361.  
  3362. public void savegame(boolean logout) {
  3363.  
  3364. if (playerName == null || ! validClient) {
  3365. saveNeeded = false;
  3366. return;
  3367. }
  3368.  
  3369. if (logout) {
  3370. if (fightId > 0) {
  3371. client f = (client)server.playerHandler.players[fightId];
  3372. if (f != null) {
  3373. f.fighting = false;
  3374. f.hits = 0;
  3375. }
  3376. }
  3377.  
  3378. }
  3379. if (logout && inTrade) {
  3380. declineTrade();
  3381. }
  3382.  
  3383. BufferedWriter characterfile = null;
  3384. try {
  3385. characterfile = new BufferedWriter(new FileWriter("./characters/"+playerName+".txt"));
  3386. /*ACCOUNT*/
  3387. characterfile.write("[ACCOUNT]", 0, 9);
  3388. characterfile.newLine();
  3389. characterfile.write("character-username = ", 0, 21);
  3390. characterfile.write(playerName, 0, playerName.length());
  3391. characterfile.newLine();
  3392. characterfile.write("character-password = ", 0, 21);
  3393. characterfile.write((playerPass), 0, (playerPass).length());
  3394. characterfile.newLine();
  3395. characterfile.newLine();
  3396. /*CHARACTER*/
  3397. characterfile.write("[CHARACTER]", 0, 11);
  3398. characterfile.newLine();
  3399. characterfile.write("character-height = ", 0, 19);
  3400. characterfile.write(Integer.toString(heightLevel), 0, Integer.toString(heightLevel).length());
  3401. characterfile.newLine();
  3402. characterfile.write("character-posx = ", 0, 17);
  3403. characterfile.write(Integer.toString(absX), 0, Integer.toString(absX).length());
  3404. characterfile.newLine();
  3405. characterfile.write("character-posy = ", 0, 17);
  3406. characterfile.write(Integer.toString(absY), 0, Integer.toString(absY).length());
  3407. characterfile.newLine();
  3408. characterfile.write("character-rights = ", 0, 19);
  3409. characterfile.write(Integer.toString(playerRights), 0, Integer.toString(playerRights).length());
  3410. characterfile.newLine();
  3411. characterfile.write("character-ismember = ", 0, 21);
  3412. characterfile.write(Integer.toString(playerIsMember), 0, Integer.toString(playerIsMember).length());
  3413. characterfile.newLine();
  3414. characterfile.write("character-messages = ", 0, 21);
  3415. characterfile.write(Integer.toString(playerMessages), 0, Integer.toString(playerMessages).length());
  3416. characterfile.newLine();
  3417. characterfile.write("character-lastconnection = ", 0, 27);
  3418. characterfile.write(playerLastConnect, 0, playerLastConnect.length());
  3419. characterfile.newLine();
  3420. characterfile.write("character-lastlogin = ", 0, 22);
  3421. characterfile.write(Integer.toString(playerLastLogin), 0, Integer.toString(playerLastLogin).length());
  3422. characterfile.newLine();
  3423. characterfile.write("character-energy = ", 0, 19);
  3424. characterfile.write(Integer.toString(playerEnergy), 0, Integer.toString(playerEnergy).length());
  3425. characterfile.newLine();
  3426. characterfile.write("character-gametime = ", 0, 21);
  3427. characterfile.write(Integer.toString(playerGameTime), 0, Integer.toString(playerGameTime).length());
  3428. characterfile.newLine();
  3429. characterfile.write("character-gamecount = ", 0, 22);
  3430. characterfile.write(Integer.toString(playerGameCount), 0, Integer.toString(playerGameCount).length());
  3431. characterfile.newLine();
  3432. characterfile.write("character-ancients = ", 0, 21);
  3433. characterfile.write(Integer.toString(ancients), 0, Integer.toString(ancients).length());
  3434. characterfile.newLine();
  3435. characterfile.write("character-rating = ", 0, 19);
  3436. characterfile.write(Integer.toString(rating), 0, Integer.toString(rating).length());
  3437. characterfile.newLine();
  3438. characterfile.write("character-FightType = ", 0, 22);
  3439. characterfile.write(Integer.toString(FightType), 0, Integer.toString(FightType).length());
  3440. characterfile.newLine();
  3441. characterfile.write("character-SkillID = ", 0, 20);
  3442. characterfile.write(Integer.toString(SkillID), 0, Integer.toString(SkillID).length());
  3443. characterfile.newLine();
  3444. characterfile.newLine();
  3445. /*EQUIPMENT*/
  3446. characterfile.write("[EQUIPMENT]", 0, 11);
  3447. characterfile.newLine();
  3448. for (int i = 0; i < playerEquipment.length; i++) {
  3449. characterfile.write("character-equip = ", 0, 18);
  3450. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  3451. characterfile.write(" ", 0, 1);
  3452. characterfile.write(Integer.toString(playerEquipment[i]), 0, Integer.toString(playerEquipment[i]).length());
  3453. characterfile.write(" ", 0, 1);
  3454. characterfile.write(Integer.toString(playerEquipmentN[i]), 0, Integer.toString(playerEquipmentN[i]).length());
  3455. characterfile.write(" ", 0, 1);
  3456. characterfile.newLine();
  3457. }
  3458. characterfile.newLine();
  3459. /*LOOK*/
  3460. characterfile.write("[LOOK]", 0, 6);
  3461. characterfile.newLine();
  3462. int[]Looks = getLook();
  3463. for (int i = 0; i < Looks.length; i++) {
  3464. characterfile.write("character-look = ", 0, 17);
  3465. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  3466. characterfile.write(" ", 0, 1);
  3467. characterfile.write(Integer.toString(Looks[i]), 0, Integer.toString(Looks[i]).length());
  3468. characterfile.newLine();
  3469. }
  3470. characterfile.newLine();
  3471. /*SKILLS*/
  3472. characterfile.write("[SKILLS]", 0, 8);
  3473. characterfile.newLine();
  3474. for (int i = 0; i < playerLevel.length; i++) {
  3475. characterfile.write("character-skill = ", 0, 18);
  3476. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  3477. characterfile.write(" ", 0, 1);
  3478. if(i == 3) {
  3479. characterfile.write(Integer.toString(currentHealth), 0, Integer.toString(currentHealth).length());
  3480. } else {
  3481. characterfile.write(Integer.toString(playerLevel[i]), 0, Integer.toString(playerLevel[i]).length());
  3482. }
  3483. characterfile.write(" ", 0, 1);
  3484. characterfile.write(Integer.toString(playerXP[i]), 0, Integer.toString(playerXP[i]).length());
  3485. characterfile.newLine();
  3486. }
  3487. characterfile.newLine();
  3488. /*ITEMS*/
  3489. characterfile.write("[ITEMS]", 0, 7);
  3490. characterfile.newLine();
  3491. for (int i = 0; i < playerItems.length; i++) {
  3492. if (playerItems[i] > 0) {
  3493. characterfile.write("character-item = ", 0, 17);
  3494. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  3495. characterfile.write(" ", 0, 1);
  3496. characterfile.write(Integer.toString(playerItems[i]), 0, Integer.toString(playerItems[i]).length());
  3497. characterfile.write(" ", 0, 1);
  3498. characterfile.write(Integer.toString(playerItemsN[i]), 0, Integer.toString(playerItemsN[i]).length());
  3499. characterfile.newLine();
  3500. }
  3501. }
  3502. characterfile.newLine();
  3503. /*BANK*/
  3504. characterfile.write("[BANK]", 0, 6);
  3505. characterfile.newLine();
  3506. for (int i = 0; i < bankItems.length; i++) {
  3507. if (bankItems[i] > 0) {
  3508. characterfile.write("character-bank = ", 0, 17);
  3509. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  3510. characterfile.write(" ", 0, 1);
  3511. characterfile.write(Integer.toString(bankItems[i]), 0, Integer.toString(bankItems[i]).length());
  3512. characterfile.write(" ", 0, 1);
  3513. characterfile.write(Integer.toString(bankItemsN[i]), 0, Integer.toString(bankItemsN[i]).length());
  3514. characterfile.newLine();
  3515. }
  3516. }
  3517. characterfile.newLine();
  3518. /*FRIENDS*/
  3519. characterfile.write("[FRIENDS]", 0, 9);
  3520. characterfile.newLine();
  3521. for (int i = 0; i < friends.length; i++) {
  3522. if (friends[i] > 0) {
  3523. characterfile.write("character-friend = ", 0, 19);
  3524. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  3525. characterfile.write(" ", 0, 1);
  3526. characterfile.write(Long.toString(friends[i]), 0, Long.toString(friends[i]).length());
  3527. characterfile.newLine();
  3528. }
  3529. }
  3530. characterfile.newLine();
  3531. /*IGNORES*/
  3532. characterfile.write("[IGNORES]", 0, 9);
  3533. characterfile.newLine();
  3534. for (int i = 0; i < ignores.length; i++) {
  3535. if (ignores[i] > 0) {
  3536. characterfile.write("character-ignore = ", 0, 19);
  3537. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  3538. characterfile.write(" ", 0, 1);
  3539. characterfile.write(Long.toString(ignores[i]), 0, Long.toString(ignores[i]).length());
  3540. characterfile.newLine();
  3541. }
  3542. }
  3543. characterfile.newLine();
  3544. /*EOF*/
  3545. characterfile.write("[EOF]", 0, 5);
  3546. characterfile.newLine();
  3547. characterfile.newLine();
  3548. characterfile.close();
  3549. } catch (IOException ioexception) {
  3550. misc.println(playerName+": error writing file.");
  3551. }
  3552. saveNeeded = false;
  3553. }
  3554.  
  3555. public void saveStats(boolean logout) {
  3556.  
  3557. String[]parts = new String[] {
  3558. "pGender", "pHead", "pTorso", "pArms", "pHands", "pLegs", "pFeet", "pBeard", "pHairC", "pTorsoC", "pLegsC", "pFeetC", "pSkinC"
  3559. };
  3560.  
  3561. try {
  3562. int[]look = {
  3563. pGender, pHead, pBeard, pTorso, pArms, pHands, pLegs, pFeet, pHairC, pTorsoC, pLegsC, pFeetC, pSkinC, playerLook[0], playerLook[1], playerLook[2], playerLook[3], playerLook[4], playerLook[5]
  3564. };
  3565. boolean DoInsert = true;
  3566. int ID = -1;
  3567. int ID2 = -1;
  3568. int test1 = -1;
  3569. int test2 = -1;
  3570. //mysql_connect();
  3571. long allxp = 0;
  3572. for (int i = 0; i < 21; i++) {
  3573. if (i != 18) {
  3574. allxp += playerXP[i];
  3575. }
  3576. }
  3577. int totallvl = playerLevel[0]+playerLevel[1]+playerLevel[2]+playerLevel[3]+playerLevel[4]+playerLevel[5]+playerLevel[6]+playerLevel[7]+playerLevel[8]+playerLevel[9]+playerLevel[10]+playerLevel[11]+playerLevel[12]+playerLevel[13]+playerLevel[14]+playerLevel[15]+playerLevel[16]+playerLevel[17]+playerLevel[18]+playerLevel[19]+playerLevel[20];
  3578. int combatLevel = (int)((double)playerLevel[0]*0.32707+(double)playerLevel[1]*0.249+(double)playerLevel[2]*0.324+(double)playerLevel[3]*0.25+(double)playerLevel[5]*0.124);
  3579.  
  3580. String online = "online = 0";
  3581. if (!logout)
  3582. online = "online = "+server.world;
  3583. else
  3584. saveNeeded = false;
  3585.  
  3586.  
  3587. } catch (Exception e) {
  3588. }
  3589. }
  3590.  
  3591.  
  3592. public void fsBar(int id1, int id2, int id3) {
  3593. outStream.createFrame(70);
  3594. outStream.writeWord(id1);
  3595. outStream.writeWordBigEndian(id2);
  3596. outStream.writeWordBigEndian(id3);
  3597. }
  3598. public void l33thax(int id) {
  3599. outStream.createFrame(171);
  3600. outStream.writeByte(0);
  3601. outStream.writeWord(id);
  3602. flushOutStream();
  3603. }
  3604.  
  3605. public void writeLog(String data, String file) {
  3606. //used for bans/mutes/chatlogs etc. -bakatool
  3607. BufferedWriter bw = null;
  3608.  
  3609. try {
  3610. bw = new BufferedWriter(new FileWriter("config//"+file+".txt", true));
  3611. bw.write(data);
  3612. bw.newLine();
  3613. bw.flush();
  3614. } catch (IOException ioe) {
  3615. ioe.printStackTrace();
  3616. } finally {
  3617. if (bw != null)
  3618. try {
  3619. bw.close();
  3620. } catch (IOException ioe2) {
  3621. System.out.println("Error writing system log.");
  3622. ioe2.printStackTrace();
  3623. }
  3624. }
  3625. }
  3626.  
  3627. public boolean checkLog(String file, String playerName) {
  3628. //check bans/mutes/chatlogs etc.. -bakatool
  3629. try {
  3630. BufferedReader in = new BufferedReader(new FileReader("config//"+file+".txt"));
  3631. String data = null;
  3632. while ((data = in.readLine()) != null) {
  3633. if (playerName.equalsIgnoreCase(data)) {
  3634. return true;
  3635. }
  3636. }
  3637. } catch (IOException e) {
  3638. System.out.println("Critical error while checking for data!");
  3639. System.out.println(file+":"+playerName);
  3640. e.printStackTrace();
  3641. }
  3642. return false;
  3643. }
  3644.  
  3645. public void fromBank(int itemID, int fromSlot, int amount) {
  3646. if (!IsBanking) {
  3647. closeInterface();
  3648. return;
  3649. }
  3650. if (amount > 0) {
  3651. if (bankItems[fromSlot] > 0) {
  3652. if (!takeAsNote) {
  3653. if (Item.itemStackable[bankItems[fromSlot]-1]) {
  3654. if (bankItemsN[fromSlot] > amount) {
  3655. if (addItem((bankItems[fromSlot]-1), amount)) {
  3656. bankItemsN[fromSlot] -= amount;
  3657. resetBank();
  3658. resetItems(5064);
  3659. }
  3660. } else {
  3661. if (addItem((bankItems[fromSlot]-1), bankItemsN[fromSlot])) {
  3662. bankItems[fromSlot] = 0;
  3663. bankItemsN[fromSlot] = 0;
  3664. resetBank();
  3665. resetItems(5064);
  3666. }
  3667. }
  3668. } else {
  3669. while (amount > 0) {
  3670. if (bankItemsN[fromSlot] > 0) {
  3671. if (addItem((bankItems[fromSlot]-1), 1)) {
  3672. bankItemsN[fromSlot] += -1;
  3673. amount--;
  3674. } else {
  3675. amount = 0;
  3676. }
  3677. } else {
  3678. amount = 0;
  3679. }
  3680. }
  3681. resetBank();
  3682. resetItems(5064);
  3683. }
  3684. } else if (takeAsNote && Item.itemIsNote[bankItems[fromSlot]]) {
  3685. // if (Item.itemStackable[bankItems[fromSlot]+1])
  3686. // {
  3687. if (bankItemsN[fromSlot] > amount) {
  3688. if (addItem(bankItems[fromSlot], amount)) {
  3689. bankItemsN[fromSlot] -= amount;
  3690. resetBank();
  3691. resetItems(5064);
  3692. }
  3693. } else {
  3694. if (addItem(bankItems[fromSlot], bankItemsN[fromSlot])) {
  3695. bankItems[fromSlot] = 0;
  3696. bankItemsN[fromSlot] = 0;
  3697. resetBank();
  3698. resetItems(5064);
  3699. }
  3700. }
  3701. } else {
  3702. sendMessage("Item can't be drawn as note.");
  3703. if (Item.itemStackable[bankItems[fromSlot]-1]) {
  3704. if (bankItemsN[fromSlot] > amount) {
  3705. if (addItem((bankItems[fromSlot]-1), amount)) {
  3706. bankItemsN[fromSlot] -= amount;
  3707. resetBank();
  3708. resetItems(5064);
  3709. }
  3710. } else {
  3711. if (addItem((bankItems[fromSlot]-1), bankItemsN[fromSlot])) {
  3712. bankItems[fromSlot] = 0;
  3713. bankItemsN[fromSlot] = 0;
  3714. resetBank();
  3715. resetItems(5064);
  3716. }
  3717. }
  3718. } else {
  3719. while (amount > 0) {
  3720. if (bankItemsN[fromSlot] > 0) {
  3721. if (addItem((bankItems[fromSlot]-1), 1)) {
  3722. bankItemsN[fromSlot] += -1;
  3723. amount--;
  3724. } else {
  3725. amount = 0;
  3726. }
  3727. } else {
  3728. amount = 0;
  3729. }
  3730. }
  3731. resetBank();
  3732. resetItems(5064);
  3733. }
  3734. }
  3735. }
  3736. }
  3737. }
  3738.  
  3739. public int getItemSlot(int itemID) {
  3740. for (int slot = 0; slot < playerItems.length; slot++) {
  3741. if (playerItems[slot] == (itemID+1)) {
  3742. return slot;
  3743. }
  3744. }
  3745. return -1;
  3746. }
  3747.  
  3748. public boolean addSkillXP(int amount, int skill) {
  3749. if (randomed) {
  3750. sendMessage("You must answer the genie before you can gain experience!");
  3751. return false;
  3752. }
  3753. if ((amount + playerXP[skill]) < 0 || amount + playerXP[skill] > 200000000 || playerXP[skill] >= 200000000) {
  3754. playerXP[skill] = 200000000;
  3755. refreshSkills();
  3756. return false;
  3757. }
  3758. int oldLevel = getLevelForXP(playerXP[skill]);
  3759. //int[] statId = {4004, 4008, 4006, 4016, 4010, 4012, 4014, 4034, 4038, 4026, 4032, 4036, 4024, 4030, 4028, 4020, 4018, 4022, 4152};
  3760. playerXP[skill] += amount;
  3761. if (oldLevel < getLevelForXP(playerXP[skill])) {
  3762. //if(oldLevel >= 85)
  3763. animation(199, absY, absX);
  3764. playerLevel[skill] = getLevelForXP(playerXP[skill]);
  3765. //stillgfx(623, absY, absX);
  3766. //levelup(skill);
  3767. updateRequired = true;
  3768. appearanceUpdateRequired = true;
  3769. sendMessage("Congratulations, you just advanced a "+statName[skill]+" level.");
  3770. if(skill == 3 || skill == playerLevel[playerHitpoints]) {
  3771. currentHealth += 1;
  3772. if(currentHealth >= playerLevel[3]) {
  3773. currentHealth = playerLevel[3];
  3774. }
  3775. }
  3776. if (playerLevel[skill] > 84)
  3777. yell(playerName+"'s "+statName[skill]+" level is now "+playerLevel[skill]+"!");
  3778. //sendFrame126(playerName + " (" + combatLevel + ")", 6572);
  3779. setSkillLevel(skill, playerLevel[skill], playerXP[skill]);
  3780. }
  3781. //setSkillLevel(skill, playerLevel[skill], playerXP[skill]);
  3782. refreshSkills();
  3783. if (skill == 2) {
  3784. CalculateMaxHit();
  3785. }
  3786. return true;
  3787.  
  3788. }
  3789.  
  3790. public int getXPForLevel(int level) {
  3791. int points = 0;
  3792. int output = 0;
  3793.  
  3794. for (int lvl = 1; lvl <= level; lvl++) {
  3795. points += Math.floor((double)lvl+300.0*Math.pow(2.0, (double)lvl/7.0));
  3796. if (lvl >= level) {
  3797. return output;
  3798. }
  3799. output = (int)Math.floor(points/4);
  3800. }
  3801. return 0;
  3802. }
  3803.  
  3804. public int getLevelForXP(int exp) {
  3805. int points = 0;
  3806. int output = 0;
  3807. if (exp > 13034430)
  3808. return 99;
  3809. for (int lvl = 1; lvl <= 99; lvl++) {
  3810. points += Math.floor((double)lvl+300.0*Math.pow(2.0, (double)lvl/7.0));
  3811. output = (int)Math.floor(points/4);
  3812. if (output >= exp) {
  3813. return lvl;
  3814. }
  3815. }
  3816. return 0;
  3817. }
  3818.  
  3819. public boolean bankItem(int itemID, int fromSlot, int amount) {
  3820. if(!IsBanking)
  3821. return false;
  3822. if (playerItemsN[fromSlot] <= 0) {
  3823. return false;
  3824. }
  3825. if (!Item.itemIsNote[playerItems[fromSlot] - 1]) {
  3826. if (playerItems[fromSlot] <= 0) {
  3827. return false;
  3828. }
  3829. if (Item.itemStackable[playerItems[fromSlot] - 1]
  3830. || playerItemsN[fromSlot] > 1) {
  3831. int toBankSlot = 0;
  3832. boolean alreadyInBank = false;
  3833.  
  3834. for (int i = 0; i < playerBankSize; i++) {
  3835. if (bankItems[i] == playerItems[fromSlot]) {
  3836. if (playerItemsN[fromSlot] < amount) {
  3837. amount = playerItemsN[fromSlot];
  3838. }
  3839. alreadyInBank = true;
  3840. toBankSlot = i;
  3841. i = playerBankSize + 1;
  3842. }
  3843. }
  3844.  
  3845. if (!alreadyInBank && freeBankSlots() > 0) {
  3846. for (int i = 0; i < playerBankSize; i++) {
  3847. if (bankItems[i] <= 0) {
  3848. toBankSlot = i;
  3849. i = playerBankSize + 1;
  3850. }
  3851. }
  3852. bankItems[toBankSlot] = playerItems[fromSlot];
  3853. if (playerItemsN[fromSlot] < amount) {
  3854. amount = playerItemsN[fromSlot];
  3855. }
  3856. if ((bankItemsN[toBankSlot] + amount) <= maxItemAmount
  3857. && (bankItemsN[toBankSlot] + amount) > -1) {
  3858. bankItemsN[toBankSlot] += amount;
  3859. } else {
  3860. sendMessage("Bank full!");
  3861. return false;
  3862. }
  3863. deleteItem((playerItems[fromSlot] - 1), fromSlot, amount);
  3864. resetItems(5064);
  3865. resetBank();
  3866. return true;
  3867. } else if (alreadyInBank) {
  3868. if ((bankItemsN[toBankSlot] + amount) <= maxItemAmount
  3869. && (bankItemsN[toBankSlot] + amount) > -1) {
  3870. bankItemsN[toBankSlot] += amount;
  3871. } else {
  3872. sendMessage("Bank full!");
  3873. return false;
  3874. }
  3875. deleteItem((playerItems[fromSlot] - 1), fromSlot, amount);
  3876. resetItems(5064);
  3877. resetBank();
  3878. return true;
  3879. } else {
  3880. sendMessage("Bank full!");
  3881. return false;
  3882. }
  3883. } else {
  3884. itemID = playerItems[fromSlot];
  3885. int toBankSlot = 0;
  3886. boolean alreadyInBank = false;
  3887.  
  3888. for (int i = 0; i < playerBankSize; i++) {
  3889. if (bankItems[i] == playerItems[fromSlot]) {
  3890. alreadyInBank = true;
  3891. toBankSlot = i;
  3892. i = playerBankSize + 1;
  3893. }
  3894. }
  3895. if (!alreadyInBank && freeBankSlots() > 0) {
  3896. for (int i = 0; i < playerBankSize; i++) {
  3897. if (bankItems[i] <= 0) {
  3898. toBankSlot = i;
  3899. i = playerBankSize + 1;
  3900. }
  3901. }
  3902. int firstPossibleSlot = 0;
  3903. boolean itemExists = false;
  3904.  
  3905. while (amount > 0) {
  3906. itemExists = false;
  3907. for (int i = firstPossibleSlot; i < playerItems.length; i++) {
  3908. if ((playerItems[i]) == itemID) {
  3909. firstPossibleSlot = i;
  3910. itemExists = true;
  3911. i = 30;
  3912. }
  3913. }
  3914. if (itemExists) {
  3915. bankItems[toBankSlot] = playerItems[firstPossibleSlot];
  3916. bankItemsN[toBankSlot] += 1;
  3917. deleteItem((playerItems[firstPossibleSlot] - 1),
  3918. firstPossibleSlot, 1);
  3919. amount--;
  3920. } else {
  3921. amount = 0;
  3922. }
  3923. }
  3924. resetItems(5064);
  3925. resetBank();
  3926. return true;
  3927. } else if (alreadyInBank) {
  3928. int firstPossibleSlot = 0;
  3929. boolean itemExists = false;
  3930.  
  3931. while (amount > 0) {
  3932. itemExists = false;
  3933. for (int i = firstPossibleSlot; i < playerItems.length; i++) {
  3934. if ((playerItems[i]) == itemID) {
  3935. firstPossibleSlot = i;
  3936. itemExists = true;
  3937. i = 30;
  3938. }
  3939. }
  3940. if (itemExists) {
  3941. bankItemsN[toBankSlot] += 1;
  3942. deleteItem((playerItems[firstPossibleSlot] - 1),
  3943. firstPossibleSlot, 1);
  3944. amount--;
  3945. } else {
  3946. amount = 0;
  3947. }
  3948. }
  3949. resetItems(5064);
  3950. resetBank();
  3951. return true;
  3952. } else {
  3953. sendMessage("Bank full!");
  3954. return false;
  3955. }
  3956. }
  3957. } else if (Item.itemIsNote[playerItems[fromSlot] - 1]
  3958. && !Item.itemIsNote[playerItems[fromSlot] - 2]) {
  3959. if (playerItems[fromSlot] <= 0) {
  3960. return false;
  3961. }
  3962. if (Item.itemStackable[playerItems[fromSlot] - 1]
  3963. || playerItemsN[fromSlot] > 1) {
  3964. int toBankSlot = 0;
  3965. boolean alreadyInBank = false;
  3966.  
  3967. for (int i = 0; i < playerBankSize; i++) {
  3968. if (bankItems[i] == (playerItems[fromSlot] - 1)) {
  3969. if (playerItemsN[fromSlot] < amount) {
  3970. amount = playerItemsN[fromSlot];
  3971. }
  3972. alreadyInBank = true;
  3973. toBankSlot = i;
  3974. i = playerBankSize + 1;
  3975. }
  3976. }
  3977.  
  3978. if (!alreadyInBank && freeBankSlots() > 0) {
  3979. for (int i = 0; i < playerBankSize; i++) {
  3980. if (bankItems[i] <= 0) {
  3981. toBankSlot = i;
  3982. i = playerBankSize + 1;
  3983. }
  3984. }
  3985. bankItems[toBankSlot] = (playerItems[fromSlot] - 1);
  3986. if (playerItemsN[fromSlot] < amount) {
  3987. amount = playerItemsN[fromSlot];
  3988. }
  3989. if ((bankItemsN[toBankSlot] + amount) <= maxItemAmount
  3990. && (bankItemsN[toBankSlot] + amount) > -1) {
  3991. bankItemsN[toBankSlot] += amount;
  3992. } else {
  3993. return false;
  3994. }
  3995. deleteItem((playerItems[fromSlot] - 1), fromSlot, amount);
  3996. resetItems(5064);
  3997. resetBank();
  3998. return true;
  3999. } else if (alreadyInBank) {
  4000. if ((bankItemsN[toBankSlot] + amount) <= maxItemAmount
  4001. && (bankItemsN[toBankSlot] + amount) > -1) {
  4002. bankItemsN[toBankSlot] += amount;
  4003. } else {
  4004. return false;
  4005. }
  4006. deleteItem((playerItems[fromSlot] - 1), fromSlot, amount);
  4007. resetItems(5064);
  4008. resetBank();
  4009. return true;
  4010. } else {
  4011. sendMessage("Bank full!");
  4012. return false;
  4013. }
  4014. } else {
  4015. itemID = playerItems[fromSlot];
  4016. int toBankSlot = 0;
  4017. boolean alreadyInBank = false;
  4018.  
  4019. for (int i = 0; i < playerBankSize; i++) {
  4020. if (bankItems[i] == (playerItems[fromSlot] - 1)) {
  4021. alreadyInBank = true;
  4022. toBankSlot = i;
  4023. i = playerBankSize + 1;
  4024. }
  4025. }
  4026. if (!alreadyInBank && freeBankSlots() > 0) {
  4027. for (int i = 0; i < playerBankSize; i++) {
  4028. if (bankItems[i] <= 0) {
  4029. toBankSlot = i;
  4030. i = playerBankSize + 1;
  4031. }
  4032. }
  4033. int firstPossibleSlot = 0;
  4034. boolean itemExists = false;
  4035.  
  4036. while (amount > 0) {
  4037. itemExists = false;
  4038. for (int i = firstPossibleSlot; i < playerItems.length; i++) {
  4039. if ((playerItems[i]) == itemID) {
  4040. firstPossibleSlot = i;
  4041. itemExists = true;
  4042. i = 30;
  4043. }
  4044. }
  4045. if (itemExists) {
  4046. bankItems[toBankSlot] = (playerItems[firstPossibleSlot]
  4047. - 1);
  4048. bankItemsN[toBankSlot] += 1;
  4049. deleteItem((playerItems[firstPossibleSlot] - 1),
  4050. firstPossibleSlot, 1);
  4051. amount--;
  4052. } else {
  4053. amount = 0;
  4054. }
  4055. }
  4056. resetItems(5064);
  4057. resetBank();
  4058. return true;
  4059. } else if (alreadyInBank) {
  4060. int firstPossibleSlot = 0;
  4061. boolean itemExists = false;
  4062.  
  4063. while (amount > 0) {
  4064. itemExists = false;
  4065. for (int i = firstPossibleSlot; i < playerItems.length; i++) {
  4066. if ((playerItems[i]) == itemID) {
  4067. firstPossibleSlot = i;
  4068. itemExists = true;
  4069. i = 30;
  4070. }
  4071. }
  4072. if (itemExists) {
  4073. bankItemsN[toBankSlot] += 1;
  4074. deleteItem((playerItems[firstPossibleSlot] - 1),
  4075. firstPossibleSlot, 1);
  4076. amount--;
  4077. } else {
  4078. amount = 0;
  4079. }
  4080. }
  4081. resetItems(5064);
  4082. resetBank();
  4083. return true;
  4084. } else {
  4085. sendMessage("Bank full!");
  4086. return false;
  4087. }
  4088. }
  4089. } else {
  4090. sendMessage("Item not supported " + (playerItems[fromSlot] - 1));
  4091. return false;
  4092. }
  4093. }
  4094.  
  4095. public void createItem(int newItemID) {
  4096. int Maxi = server.itemHandler.DropItemCount;
  4097.  
  4098. for (int i = 0; i <= Maxi; i++) {
  4099. if (server.itemHandler.DroppedItemsID[i] < 1) {
  4100. server.itemHandler.DroppedItemsID[i] = newItemID;
  4101. server.itemHandler.DroppedItemsX[i] = (absX);
  4102. server.itemHandler.DroppedItemsY[i] = (absY);
  4103. server.itemHandler.DroppedItemsN[i] = 1;
  4104. server.itemHandler.DroppedItemsH[i] = heightLevel;
  4105. server.itemHandler.DroppedItemsDDelay[i] = (server.itemHandler.MaxDropShowDelay+1); // this way the item can NEVER be showed to another client
  4106. server.itemHandler.DroppedItemsDropper[i] = playerId;
  4107. if (i == Maxi) {
  4108. server.itemHandler.DropItemCount++;
  4109. if (server.itemHandler.DropItemCount >= (server.itemHandler.MaxDropItems+1)) {
  4110. server.itemHandler.DropItemCount = 0;
  4111. misc.println("! Notify item resterting !");
  4112. }
  4113. }
  4114. break;
  4115. }
  4116. }
  4117. }
  4118. public void createItem(int newItemID, int amount) {
  4119. int Maxi = server.itemHandler.DropItemCount;
  4120.  
  4121. for (int i = 0; i <= Maxi; i++) {
  4122. if (server.itemHandler.DroppedItemsID[i] < 1) {
  4123. server.itemHandler.DroppedItemsID[i] = newItemID;
  4124. server.itemHandler.DroppedItemsX[i] = (absX);
  4125. server.itemHandler.DroppedItemsY[i] = (absY);
  4126. server.itemHandler.DroppedItemsN[i] = amount;
  4127. server.itemHandler.DroppedItemsH[i] = heightLevel;
  4128. server.itemHandler.DroppedItemsDDelay[i] = (server.itemHandler.MaxDropShowDelay+1); // this way the item can NEVER be showed to another client
  4129. server.itemHandler.DroppedItemsDropper[i] = playerId;
  4130. if (i == Maxi) {
  4131. server.itemHandler.DropItemCount++;
  4132. if (server.itemHandler.DropItemCount >= (server.itemHandler.MaxDropItems+1)) {
  4133. server.itemHandler.DropItemCount = 0;
  4134. misc.println("! Notify item resterting !");
  4135. }
  4136. }
  4137. break;
  4138. }
  4139. }
  4140. }
  4141.  
  4142. public void createItemForAll(int newItemID, int amount, int X, int Y) {
  4143. int Maxi = server.itemHandler.DropItemCount;
  4144.  
  4145. for (int i = 0; i <= Maxi; i++) {
  4146. if (server.itemHandler.DroppedItemsID[i] < 1) {
  4147. server.itemHandler.DroppedItemsID[i] = newItemID;
  4148. server.itemHandler.DroppedItemsX[i] = X;
  4149. server.itemHandler.DroppedItemsY[i] = Y;
  4150. server.itemHandler.DroppedItemsN[i] = amount;
  4151. server.itemHandler.DroppedItemsH[i] = heightLevel;
  4152. server.itemHandler.DroppedItemsDDelay[i] = (server.itemHandler.MaxDropShowDelay+1); // this way the item can NEVER be showed to another client
  4153. server.itemHandler.DroppedItemsDropper[i] = playerId;
  4154. if (i == Maxi) {
  4155. server.itemHandler.DropItemCount++;
  4156. if (server.itemHandler.DropItemCount >= (server.itemHandler.MaxDropItems+1)) {
  4157. server.itemHandler.DropItemCount = 0;
  4158. misc.println("! Notify item resterting !");
  4159. }
  4160. }
  4161. break;
  4162. }
  4163. }
  4164. }
  4165.  
  4166. public void removeAllItems() {
  4167. for (int i = 0; i < playerItems.length; i++) {
  4168. playerItems[i] = 0;
  4169. }
  4170. for (int i = 0; i < playerItemsN.length; i++) {
  4171. playerItemsN[i] = 0;
  4172. }
  4173. resetItems(3214);
  4174. }
  4175.  
  4176. public void resetItems(int WriteFrame) {
  4177. outStream.createFrameVarSizeWord(53);
  4178. outStream.writeWord(WriteFrame);
  4179. outStream.writeWord(playerItems.length);
  4180. for (int i = 0; i < playerItems.length; i++) {
  4181. if (playerItemsN[i] > 254) {
  4182. outStream.writeByte(255); // item's stack count. if over 254, write byte 255
  4183. outStream.writeDWord_v2(playerItemsN[i]); // and then the real value with writeDWord_v2
  4184. } else {
  4185. outStream.writeByte(playerItemsN[i]);
  4186. }
  4187. if (playerItems[i] > 20000 || playerItems[i] < 0) {
  4188. playerItems[i] = 20000;
  4189. }
  4190. outStream.writeWordBigEndianA(playerItems[i]); // item id
  4191. }
  4192. outStream.endFrameVarSizeWord();
  4193. }
  4194.  
  4195. public void SendWeapon(int Weapon, String WeaponName) {
  4196. String WeaponName2 = WeaponName.replaceAll("Bronze", "");
  4197.  
  4198. WeaponName2 = WeaponName2.replaceAll("Iron", "");
  4199. WeaponName2 = WeaponName2.replaceAll("Steel", "");
  4200. WeaponName2 = WeaponName2.replaceAll("Scythe", "");
  4201. WeaponName2 = WeaponName2.replaceAll("Black", "");
  4202. WeaponName2 = WeaponName2.replaceAll("Mithril", "");
  4203. WeaponName2 = WeaponName2.replaceAll("Adamant", "");
  4204. WeaponName2 = WeaponName2.replaceAll("Rune", "");
  4205. WeaponName2 = WeaponName2.replaceAll("Granite", "");
  4206. WeaponName2 = WeaponName2.replaceAll("Dragon", "");
  4207. WeaponName2 = WeaponName2.replaceAll("Crystal", "");
  4208. WeaponName2 = WeaponName2.trim();
  4209. if (WeaponName.equals("Unarmed")) {
  4210. setSidebarInterface(0, 5855); // punch, kick, block
  4211. sendFrame126(WeaponName, 5857);
  4212. } else if (WeaponName.endsWith("whip")) {
  4213. setSidebarInterface(0, 12290); // flick, lash, deflect
  4214. sendFrame246(12291, 200, Weapon);
  4215. sendFrame126(WeaponName, 12293);
  4216. } else if (WeaponName.endsWith("Scythe")) {
  4217. setSidebarInterface(0, 776); // flick, lash, deflect
  4218. sendFrame246(12291, 200, Weapon);
  4219. sendFrame126(WeaponName, 778);
  4220. } else if (WeaponName.endsWith("bow")) {
  4221. setSidebarInterface(0, 1764); // accurate, rapid, longrange
  4222. sendFrame246(1765, 200, Weapon);
  4223. sendFrame126(WeaponName, 1767);
  4224. } else if (WeaponName.endsWith("bow full")) {
  4225. setSidebarInterface(0, 1764); // accurate, rapid, longrange
  4226. sendFrame246(1765, 200, Weapon);
  4227. sendFrame126(WeaponName, 1767);
  4228. } else if (WeaponName.startsWith("Staff") || WeaponName.endsWith("staff")) {
  4229. setSidebarInterface(0, 328); // spike, impale, smash, block
  4230. sendFrame246(329, 200, Weapon);
  4231. sendFrame126(WeaponName, 331);
  4232. } else if (WeaponName2.startsWith("dart")) {
  4233. setSidebarInterface(0, 4446); // accurate, rapid, longrange
  4234. sendFrame246(4447, 200, Weapon);
  4235. sendFrame126(WeaponName, 4449);
  4236. } else if (WeaponName2.startsWith("dagger")) {
  4237. setSidebarInterface(0, 2276); // stab, lunge, slash, block
  4238. sendFrame246(2277, 200, Weapon);
  4239. sendFrame126(WeaponName, 2279);
  4240. } else if (WeaponName2.startsWith("pickaxe")) {
  4241. setSidebarInterface(0, 5570); // spike, impale, smash, block
  4242. sendFrame246(5571, 200, Weapon);
  4243. sendFrame126(WeaponName, 5573);
  4244. } else if (WeaponName2.startsWith("axe") || WeaponName2.startsWith("battleaxe")) {
  4245. setSidebarInterface(0, 1698); // chop, hack, smash, block
  4246. sendFrame246(1699, 200, Weapon);
  4247. sendFrame126(WeaponName, 1701);
  4248. } else if (WeaponName2.startsWith("Axe") || WeaponName2.startsWith("Battleaxe")) {
  4249. setSidebarInterface(0, 1698); // chop, hack, smash, block
  4250. sendFrame246(1699, 200, Weapon);
  4251. sendFrame126(WeaponName, 1701);
  4252. } else if (WeaponName2.startsWith("halberd")) {
  4253. setSidebarInterface(0, 8460); // jab, swipe, fend
  4254. sendFrame246(8461, 200, Weapon);
  4255. sendFrame126(WeaponName, 8463);
  4256. } else if (WeaponName2.startsWith("spear")) {
  4257. setSidebarInterface(0, 4679); // lunge, swipe, pound, block
  4258. sendFrame246(4680, 200, Weapon);
  4259. sendFrame126(WeaponName, 4682);
  4260. } else {
  4261. setSidebarInterface(0, 2423); // chop, slash, lunge, block
  4262. sendFrame246(2424, 200, Weapon);
  4263. sendFrame126(WeaponName, 2426);
  4264. }
  4265. }
  4266.  
  4267. public void resetOTItems(int WriteFrame) {
  4268. client other = getClient(trade_reqId);
  4269. if (!validClient(trade_reqId))
  4270. return;
  4271. outStream.createFrameVarSizeWord(53);
  4272. outStream.writeWord(WriteFrame);
  4273. int len = other.offeredItems.toArray().length;
  4274. int current = 0;
  4275. outStream.writeWord(len);
  4276. for (GameItem item: other.offeredItems) {
  4277. if (item.amount > 254) {
  4278. outStream.writeByte(255); // item's stack count. if over 254, write byte 255
  4279. outStream.writeDWord_v2(item.amount); // and then the real value with writeDWord_v2
  4280. } else {
  4281. outStream.writeByte(item.amount);
  4282. }
  4283. outStream.writeWordBigEndianA(item.id+1); // item id
  4284. current++;
  4285. }
  4286. if (current < 27) {
  4287. for (int i = current; i < 28; i++) {
  4288. outStream.writeByte(1);
  4289. outStream.writeWordBigEndianA(-1);
  4290. }
  4291. }
  4292. outStream.endFrameVarSizeWord();
  4293. }
  4294.  
  4295. public void resetTItems(int WriteFrame) {
  4296. outStream.createFrameVarSizeWord(53);
  4297. outStream.writeWord(WriteFrame);
  4298. int len = offeredItems.toArray().length;
  4299. int current = 0;
  4300. outStream.writeWord(len);
  4301. for (GameItem item: offeredItems) {
  4302. if (item.amount > 254) {
  4303. outStream.writeByte(255); // item's stack count. if over 254, write byte 255
  4304. outStream.writeDWord_v2(item.amount); // and then the real value with writeDWord_v2
  4305. } else {
  4306. outStream.writeByte(item.amount);
  4307. }
  4308. outStream.writeWordBigEndianA(item.id+1); // item id
  4309. current++;
  4310. }
  4311. if (current < 27) {
  4312. for (int i = current; i < 28; i++) {
  4313. outStream.writeByte(1);
  4314. outStream.writeWordBigEndianA(-1);
  4315. }
  4316. }
  4317. outStream.endFrameVarSizeWord();
  4318. }
  4319.  
  4320. public void resetShop(int ShopID) {
  4321. int TotalItems = 0;
  4322.  
  4323. for (int i = 0; i < server.shopHandler.MaxShopItems; i++) {
  4324. if (server.shopHandler.ShopItems[ShopID][i] > 0) {
  4325. TotalItems++;
  4326. }
  4327. }
  4328. if (TotalItems > server.shopHandler.MaxShopItems) {
  4329. TotalItems = server.shopHandler.MaxShopItems;
  4330. }
  4331. outStream.createFrameVarSizeWord(53);
  4332. outStream.writeWord(3900);
  4333. outStream.writeWord(TotalItems);
  4334. int TotalCount = 0;
  4335.  
  4336. for (int i = 0; i < server.shopHandler.ShopItems.length; i++) {
  4337. if (server.shopHandler.ShopItems[ShopID][i] > 0 || i <= server.shopHandler.ShopItemsStandard[ShopID]) {
  4338. if (server.shopHandler.ShopItemsN[ShopID][i] > 254) {
  4339. outStream.writeByte(255); // item's stack count. if over 254, write byte 255
  4340. outStream.writeDWord_v2(server.shopHandler.ShopItemsN[ShopID][i]); // and then the real value with writeDWord_v2
  4341. } else {
  4342. outStream.writeByte(server.shopHandler.ShopItemsN[ShopID][i]);
  4343. }
  4344. if (server.shopHandler.ShopItems[ShopID][i] > 20000 || server.shopHandler.ShopItems[ShopID][i] < 0) {
  4345. server.shopHandler.ShopItems[ShopID][i] = 20000;
  4346. }
  4347. outStream.writeWordBigEndianA(server.shopHandler.ShopItems[ShopID][i]); // item id
  4348. TotalCount++;
  4349. }
  4350. if (TotalCount > TotalItems) {
  4351. break;
  4352. }
  4353. }
  4354. outStream.endFrameVarSizeWord();
  4355. }
  4356.  
  4357. public void resetBank() {
  4358. outStream.createFrameVarSizeWord(53);
  4359. outStream.writeWord(5382); // bank
  4360. outStream.writeWord(playerBankSize); // number of items
  4361. for (int i = 0; i < playerBankSize; i++) {
  4362. if (bankItemsN[i] > 254) {
  4363. outStream.writeByte(255);
  4364. outStream.writeDWord_v2(bankItemsN[i]);
  4365. } else {
  4366. outStream.writeByte(bankItemsN[i]); // amount
  4367. }
  4368. if (bankItemsN[i] < 1) {
  4369. bankItems[i] = 0;
  4370. }
  4371. if (bankItems[i] > 20000 || bankItems[i] < 0) {
  4372. bankItems[i] = 20000;
  4373. }
  4374. outStream.writeWordBigEndianA(bankItems[i]); // itemID
  4375. }
  4376. outStream.endFrameVarSizeWord();
  4377. }
  4378.  
  4379. public void moveItems(int from, int to, int moveWindow) {
  4380. if (moveWindow == 3724) {
  4381. int tempI;
  4382. int tempN;
  4383.  
  4384. tempI = playerItems[from];
  4385. tempN = playerItemsN[from];
  4386.  
  4387. playerItems[from] = playerItems[to];
  4388. playerItemsN[from] = playerItemsN[to];
  4389. playerItems[to] = tempI;
  4390. playerItemsN[to] = tempN;
  4391. }
  4392.  
  4393. if (moveWindow == 34453 && from >= 0 && to >= 0 && from < playerBankSize && to < playerBankSize) {
  4394. int tempI;
  4395. int tempN;
  4396.  
  4397. tempI = bankItems[from];
  4398. tempN = bankItemsN[from];
  4399.  
  4400. bankItems[from] = bankItems[to];
  4401. bankItemsN[from] = bankItemsN[to];
  4402. bankItems[to] = tempI;
  4403. bankItemsN[to] = tempN;
  4404. }
  4405.  
  4406. if (moveWindow == 34453) {
  4407. resetBank();
  4408. } else if (moveWindow == 18579) {
  4409. resetItems(5064);
  4410. } else if (moveWindow == 3724) {
  4411. resetItems(3214);
  4412. }
  4413. }
  4414.  
  4415. public int itemAmount(int itemID) {
  4416. int tempAmount = 0;
  4417.  
  4418. for (int i = 0; i < playerItems.length; i++) {
  4419. if (playerItems[i] == itemID) {
  4420. tempAmount += playerItemsN[i];
  4421. }
  4422. }
  4423. return tempAmount;
  4424. }
  4425.  
  4426. public int freeBankSlots() {
  4427. int freeS = 0;
  4428.  
  4429. for (int i = 0; i < playerBankSize; i++) {
  4430. if (bankItems[i] <= 0) {
  4431. freeS++;
  4432. }
  4433. }
  4434. return freeS;
  4435. }
  4436.  
  4437. public int freeSlots() {
  4438. int freeS = 0;
  4439.  
  4440. for (int i = 0; i < playerItems.length; i++) {
  4441. if (playerItems[i] <= 0) {
  4442. freeS++;
  4443. }
  4444. }
  4445. return freeS;
  4446. }
  4447.  
  4448.  
  4449. public boolean pickUpItem(int item, int amount) {
  4450.  
  4451. if (!Item.itemStackable[item] || amount < 1) {
  4452. amount = 1;
  4453. }
  4454. if (!canUse(item)) {
  4455. sendMessage("You must be a premium member to pickup this item");
  4456. return false;
  4457. }
  4458.  
  4459. if (freeSlots() > 0 && poimiY == currentY && poimiX == currentX)
  4460. // actionAmount++;
  4461. // if (actionTimer == 0)
  4462. {
  4463. // The following 6 rows delete the item from the ground
  4464. /* outStream.createFrame(85); //setting the location
  4465. outStream.writeByteC(currentY);
  4466. outStream.writeByteC(currentX);
  4467. outStream.createFrame(156); //remove item frame
  4468. outStream.writeByteS(0); //x(4 MSB) y(LSB) coords
  4469. outStream.writeWord(item); // itemid*/
  4470. // actionTimer = 20;
  4471. for (int i = 0; i < playerItems.length; i++) {
  4472. if (playerItems[i] == (item+1) && Item.itemStackable[item] && playerItems[i] > 0) {
  4473. playerItems[i] = item+1;
  4474. if ((playerItemsN[i]+amount) < maxItemAmount && (playerItemsN[i]+amount) > 0) {
  4475. playerItemsN[i] += amount;
  4476. } else {
  4477. return false;
  4478. }
  4479. outStream.createFrameVarSizeWord(34);
  4480. outStream.writeWord(3214);
  4481. outStream.writeByte(i);
  4482. outStream.writeWord(playerItems[i]);
  4483. if (playerItemsN[i] > 254) {
  4484. outStream.writeByte(255);
  4485. outStream.writeDWord(playerItemsN[i]);
  4486. } else {
  4487. outStream.writeByte(playerItemsN[i]); // amount
  4488. }
  4489. outStream.endFrameVarSizeWord();
  4490. i = 30;
  4491. return true;
  4492. }
  4493. }
  4494. for (int i = 0; i < playerItems.length; i++) {
  4495. if (playerItems[i] <= 0) {
  4496. playerItems[i] = item+1;
  4497. if (amount < maxItemAmount) {
  4498. playerItemsN[i] = amount;
  4499. } else {
  4500. return false;
  4501. }
  4502. outStream.createFrameVarSizeWord(34);
  4503. outStream.writeWord(3214);
  4504. outStream.writeByte(i);
  4505. outStream.writeWord(playerItems[i]);
  4506. if (playerItemsN[i] > 254) {
  4507. outStream.writeByte(255);
  4508. outStream.writeDWord_v2(playerItemsN[i]);
  4509. } else {
  4510. outStream.writeByte(playerItemsN[i]); // amount
  4511. }
  4512. outStream.endFrameVarSizeWord();
  4513. i = 30;
  4514. return true;
  4515. }
  4516. }
  4517. return true;
  4518. } else {
  4519. return false;
  4520. }
  4521. }
  4522.  
  4523. public void openUpBank() {
  4524. sendFrame248(5292, 5063);
  4525. resetItems(5064);
  4526. IsBanking = true;
  4527. }
  4528.  
  4529. public void openUpShop(int ShopID) {
  4530. sendFrame126(server.shopHandler.ShopName[ShopID], 3901);
  4531. sendFrame248(3824, 3822);
  4532. resetItems(3823);
  4533. resetShop(ShopID);
  4534. IsShopping = true;
  4535. MyShopID = ShopID;
  4536. }
  4537.  
  4538. public void openUpPinSettings() {
  4539. sendFrame126("Customers are reminded", 15038);
  4540. sendFrame126("that they should NEVER", 15039);
  4541. sendFrame126("tell anyone their Bank", 15040);
  4542. sendFrame126("PINs or passwords, nor", 15041);
  4543. sendFrame126("should they ever enter", 15042);
  4544. sendFrame126("their PINs on any website", 15043);
  4545. sendFrame126("from.", 14044);
  4546. sendFrame126("", 15045);
  4547. sendFrame126("Have you read the PIN", 15046);
  4548. sendFrame126("Frequently Asked", 15047);
  4549. sendFrame126("Questions on the", 15048);
  4550. sendFrame126("Website?", 15049);
  4551. sendFrame126("No PIN set", 15105);
  4552. sendFrame126("3 days", 15107);
  4553. sendFrame171(0, 15074);
  4554. sendFrame171(1, 15077);
  4555. sendFrame171(1, 15081);
  4556. sendFrame171(1, 15108);
  4557. showInterface(14924);
  4558. }
  4559.  
  4560. public boolean addItem(int item, int amount) {
  4561. if (item >= Item.itemStackable.length) {
  4562. return false;
  4563. }
  4564. if (item < 0 || amount < 1) {
  4565. return true;
  4566. }
  4567. if (!Item.itemStackable[item] || amount < 1) {
  4568. amount = 1;
  4569. }
  4570.  
  4571. if ((freeSlots() >= amount && ! Item.itemStackable[item]) || freeSlots() > 0) {
  4572. for (int i = 0; i < playerItems.length; i++) {
  4573. if (playerItems[i] == (item+1) && Item.itemStackable[item] && playerItems[i] > 0) {
  4574. playerItems[i] = (item+1);
  4575. if ((playerItemsN[i]+amount) < maxItemAmount && (playerItemsN[i]+amount) > -1) {
  4576. playerItemsN[i] += amount;
  4577. } else {
  4578. playerItemsN[i] = maxItemAmount;
  4579. }
  4580. outStream.createFrameVarSizeWord(34);
  4581. outStream.writeWord(3214);
  4582. outStream.writeByte(i);
  4583. outStream.writeWord(playerItems[i]);
  4584. if (playerItemsN[i] > 254) {
  4585. outStream.writeByte(255);
  4586. outStream.writeDWord(playerItemsN[i]);
  4587. } else {
  4588. outStream.writeByte(playerItemsN[i]); // amount
  4589. }
  4590. outStream.endFrameVarSizeWord();
  4591. i = 30;
  4592. return true;
  4593. }
  4594. }
  4595. for (int i = 0; i < playerItems.length; i++) {
  4596. if (playerItems[i] <= 0) {
  4597. playerItems[i] = item+1;
  4598. if (amount < maxItemAmount && amount > -1) {
  4599. playerItemsN[i] = amount;
  4600. } else {
  4601. playerItemsN[i] = maxItemAmount;
  4602. }
  4603. outStream.createFrameVarSizeWord(34);
  4604. outStream.writeWord(3214);
  4605. outStream.writeByte(i);
  4606. outStream.writeWord(playerItems[i]);
  4607. if (playerItemsN[i] > 254) {
  4608. outStream.writeByte(255);
  4609. outStream.writeDWord(playerItemsN[i]);
  4610. } else {
  4611. outStream.writeByte(playerItemsN[i]); // amount
  4612. }
  4613. outStream.endFrameVarSizeWord();
  4614. i = 30;
  4615. return true;
  4616. }
  4617. }
  4618. return false;
  4619. } else {
  4620. sendMessage("Not enough space in your inventory.");
  4621. return false;
  4622. }
  4623. }
  4624.  
  4625. public void dropItem(int droppedItem, int slot) {
  4626. // misc.printlnTag("droppeditem ["+playerItems[slot]+"] which is ["+(droppedItem+1)+"]");
  4627. boolean a = true;
  4628.  
  4629. if (!canUse(droppedItem)) {
  4630. sendMessage("You must be a premium member to drop this item");
  4631. return;
  4632. }
  4633. if (playerItemsN[slot] != 0 && droppedItem != -1 && playerItems[slot] == droppedItem+1) {
  4634. for (int i = 0; i < noTrade.length; i++) {
  4635. if (droppedItem == noTrade[i]) {
  4636. sendMessage("You can't drop this item");
  4637. return;
  4638. }
  4639. }
  4640. ItemHandler.addItem(playerItems[slot]-1, absX, absY, playerItemsN[slot], playerId, false);
  4641. // createGroundItem(droppedItem, absX, absY, c);
  4642. deleteItem(droppedItem, slot, playerItemsN[slot]);
  4643. updateRequired = true;
  4644. }
  4645. }
  4646.  
  4647. public void createGroundItem(int itemID, int itemX, int itemY, int itemAmount) {
  4648. // Phate: Omg fucking sexy! creates item at absolute X and Y
  4649. outStream.createFrame(85); // Phate: Spawn ground item
  4650. outStream.writeByteC((itemY-8*mapRegionY));
  4651. outStream.writeByteC((itemX-8*mapRegionX));
  4652. outStream.createFrame(44);
  4653. outStream.writeWordBigEndianA(itemID);
  4654. outStream.writeWord(itemAmount);
  4655. outStream.writeByte(0); // x(4 MSB) y(LSB) coords
  4656. // System.out.println("CreateGroundItem "+itemID+" "+(itemX - 8 * mapRegionX)+","+(itemY - 8 * mapRegionY)+" "+itemAmount);
  4657. }
  4658.  
  4659. public void removeGroundItem(int itemX, int itemY, int itemID) {
  4660. // Phate: Omg fucking sexy! remoevs an item from absolute X and Y
  4661. outStream.createFrame(85); // Phate: Item Position Frame
  4662. outStream.writeByteC((itemY-8*mapRegionY));
  4663. outStream.writeByteC((itemX-8*mapRegionX));
  4664. outStream.createFrame(156); // Phate: Item Action: Delete
  4665. outStream.writeByteS(0); // x(4 MSB) y(LSB) coords
  4666. outStream.writeWord(itemID); // Phate: Item ID
  4667. // misc.printlnTag("RemoveGroundItem "+itemID+" "+(itemX - 8 * mapRegionX)+","+(itemY - 8 * mapRegionY));
  4668. }
  4669. public void deleteItem(int id, int amount) {
  4670. deleteItem(id, GetItemSlot(id), amount);
  4671. }
  4672. public void deleteItem(int id, int slot, int amount) {
  4673. if (slot > -1 && slot < playerItems.length) {
  4674. if ((playerItems[slot]-1) == id) {
  4675. if (playerItemsN[slot] > amount) {
  4676. playerItemsN[slot] -= amount;
  4677. } else {
  4678. playerItemsN[slot] = 0;
  4679. playerItems[slot] = 0;
  4680. }
  4681. resetItems(3214);
  4682. }
  4683. } else {
  4684. //sendMessage("Item Alched");
  4685. }
  4686. }
  4687.  
  4688. public void setEquipment(int wearID, int amount, int targetSlot) {
  4689. int Stat = playerDefence;
  4690.  
  4691. if (targetSlot == playerWeapon) {
  4692. Stat = playerAttack;
  4693. }
  4694. if(wearID == 4151 && FightType == 2){
  4695. FightType = 3;
  4696. SkillID = 3;
  4697. }
  4698. outStream.createFrameVarSizeWord(34);
  4699. outStream.writeWord(1688);
  4700. outStream.writeByte(targetSlot);
  4701. outStream.writeWord((wearID+1));
  4702. if (amount > 254) {
  4703. outStream.writeByte(255);
  4704. outStream.writeDWord(amount);
  4705. } else {
  4706. outStream.writeByte(amount); // amount
  4707. }
  4708. outStream.endFrameVarSizeWord();
  4709.  
  4710. if ((targetSlot == playerWeapon) && (wearID >= 0)) {
  4711. SendWeapon(wearID, GetItemName(wearID));
  4712. playerSE = GetStandAnim(wearID);
  4713. playerSEW = GetWalkAnim(wearID);
  4714. playerSER = GetRunAnim(wearID);
  4715. playerSEA = 0x326;
  4716. }
  4717. pEmote = playerSE;
  4718. updateRequired = true;
  4719. appearanceUpdateRequired = true;
  4720. }
  4721.  
  4722. public boolean wear(int wearID, int slot) {
  4723. if (duelFight && duelRule[3]) {
  4724. sendMessage("Equipment changing has been disabled in this duel");
  4725. return false;
  4726. }
  4727. if(wearID == 4151 && FightType == 2){
  4728. FightType = 3;
  4729. SkillID = 3;
  4730. }
  4731. int targetSlot = 0;
  4732. targetSlot = itemType(wearID);
  4733. int[]two_hand = {
  4734. 1319, 4718, 4726, 1409, 4710, 7158
  4735. };
  4736. for (int a = 0; a < two_hand.length; a++) {
  4737. if (wearID == two_hand[a] && playerEquipment[playerShield] > 0) {
  4738. if (playerHasItem(-1)) {
  4739. addItem(playerEquipment[playerShield], 1);
  4740. playerEquipment[playerShield] = -1;
  4741. } else {
  4742. sendMessage("You can't wear this weapon with a shield");
  4743. return false;
  4744. }
  4745. }
  4746. if (itemType(wearID) == playerShield && playerEquipment[playerWeapon] == two_hand[a]) {
  4747. if (playerHasItem(-1)) {
  4748. addItem(playerEquipment[playerWeapon], 1);
  4749. playerEquipment[playerWeapon] = -1;
  4750. } else {
  4751. sendMessage("You can't wear a shield with this weapon");
  4752. return false;
  4753. }
  4754. }
  4755. if (!canUse(wearID)) {
  4756. sendMessage("You must be a premium member to use this item");
  4757. return false;
  4758. }
  4759. }
  4760.  
  4761.  
  4762. if ((playerItems[slot]-1) == wearID) {
  4763. targetSlot = itemType(wearID);
  4764. int CLAttack = GetCLAttack(wearID);
  4765. int CLDefence = GetCLDefence(wearID);
  4766. int CLStrength = GetCLStrength(wearID);
  4767. int CLMagic = GetCLMagic(wearID);
  4768. int CLRanged = GetCLRanged(wearID);
  4769. boolean GoFalse = false;
  4770.  
  4771. if (CLAttack > playerLevel[playerAttack]) {
  4772. sendMessage("You need "+CLAttack+" "+statName[playerAttack]+" to equip this item.");
  4773. GoFalse = true;
  4774. }
  4775. if (CLDefence > playerLevel[playerDefence]) {
  4776. sendMessage("You need "+CLDefence+" "+statName[playerDefence]+" to equip this item.");
  4777. GoFalse = true;
  4778. }
  4779. if (CLStrength > playerLevel[playerStrength]) {
  4780. sendMessage("You need "+CLStrength+" "+statName[playerStrength]+" to equip this item.");
  4781. GoFalse = true;
  4782. }
  4783. if (CLMagic > playerLevel[playerMagic]) {
  4784. sendMessage("You need "+CLMagic+" "+statName[playerMagic]+" to equip this item.");
  4785. GoFalse = true;
  4786. }
  4787. if (CLRanged > playerLevel[playerRanged]) {
  4788. sendMessage("You need "+CLRanged+" "+statName[playerRanged]+" to equip this item.");
  4789. GoFalse = true;
  4790. }
  4791. if (GoFalse == true) {
  4792. return false;
  4793. }
  4794. int wearAmount = playerItemsN[slot];
  4795.  
  4796. if (wearAmount < 1) {
  4797. return false;
  4798. }
  4799. if (slot >= 0 && wearID >= 0) {
  4800. deleteItem(wearID, slot, wearAmount);
  4801. if (playerEquipment[targetSlot] != wearID && playerEquipment[targetSlot] >= 0) {
  4802. addItem(playerEquipment[targetSlot], playerEquipmentN[targetSlot]);
  4803. } else if (Item.itemStackable[wearID] && playerEquipment[targetSlot] == wearID) {
  4804. wearAmount = playerEquipmentN[targetSlot]+wearAmount;
  4805. } else if (playerEquipment[targetSlot] >= 0) {
  4806. addItem(playerEquipment[targetSlot], playerEquipmentN[targetSlot]);
  4807. }
  4808. }
  4809. outStream.createFrameVarSizeWord(34);
  4810. outStream.writeWord(1688);
  4811. outStream.writeByte(targetSlot);
  4812. outStream.writeWord(wearID+1);
  4813. if (wearAmount > 254) {
  4814. outStream.writeByte(255);
  4815. outStream.writeDWord(wearAmount);
  4816. } else {
  4817. outStream.writeByte(wearAmount); // amount
  4818. }
  4819. outStream.endFrameVarSizeWord();
  4820. playerEquipment[targetSlot] = wearID;
  4821. playerEquipmentN[targetSlot] = wearAmount;
  4822. if (targetSlot == playerWeapon && playerEquipment[playerShield] != -1 && Item.itemTwoHanded[wearID] == true) {
  4823. remove(playerEquipment[playerShield], playerShield);
  4824. }
  4825. if (targetSlot == playerWeapon) {
  4826. SendWeapon(wearID, GetItemName(wearID));
  4827. playerSE = GetStandAnim(wearID);
  4828. playerSEW = GetWalkAnim(wearID);
  4829. playerSER = GetRunAnim(wearID);
  4830. playerSEA = 0x326;
  4831. pEmote = playerSE;
  4832. }
  4833. ResetBonus();
  4834. GetBonus();
  4835. wearing = false;
  4836. WriteBonus();
  4837. updateRequired = true;
  4838. appearanceUpdateRequired = true;
  4839. return true;
  4840. }
  4841. return false;
  4842. }
  4843.  
  4844. public int itemType(int item) {
  4845. for (int i = 0; i < Item.capes.length; i++) {
  4846. if (item == Item.capes[i]) {
  4847. return playerCape;
  4848. }
  4849. }
  4850. for (int i = 0; i < Item.hats.length; i++) {
  4851. if (item == Item.hats[i]) {
  4852. return playerHat;
  4853. }
  4854. }
  4855. for (int i = 0; i < Item.boots.length; i++) {
  4856. if (item == Item.boots[i]) {
  4857. return playerFeet;
  4858. }
  4859. }
  4860. for (int i = 0; i < Item.gloves.length; i++) {
  4861. if (item == Item.gloves[i]) {
  4862. return playerHands;
  4863. }
  4864. }
  4865. for (int i = 0; i < Item.shields.length; i++) {
  4866. if (item == Item.shields[i]) {
  4867. return playerShield;
  4868. }
  4869. }
  4870. for (int i = 0; i < Item.amulets.length; i++) {
  4871. if (item == Item.amulets[i]) {
  4872. return playerAmulet;
  4873. }
  4874. }
  4875. for (int i = 0; i < Item.arrows.length; i++) {
  4876. if (item == Item.arrows[i]) {
  4877. return playerArrows;
  4878. }
  4879. }
  4880. for (int i = 0; i < Item.rings.length; i++) {
  4881. if (item == Item.rings[i]) {
  4882. return playerRing;
  4883. }
  4884. }
  4885. for (int i = 0; i < Item.body.length; i++) {
  4886. if (item == Item.body[i]) {
  4887. return playerChest;
  4888. }
  4889. }
  4890. for (int i = 0; i < Item.legs.length; i++) {
  4891. if (item == Item.legs[i]) {
  4892. return playerLegs;
  4893. }
  4894. }
  4895.  
  4896. // Default
  4897. return playerWeapon;
  4898. }
  4899.  
  4900. public void remove(int wearID, int slot) {
  4901. if (duelFight && duelRule[3]) {
  4902. sendMessage("Equipment changing has been disabled in this duel!");
  4903. return;
  4904. }
  4905. if (addItem(playerEquipment[slot], playerEquipmentN[slot])) {
  4906. playerEquipment[slot] = -1;
  4907. playerEquipmentN[slot] = 0;
  4908. outStream.createFrame(34);
  4909. outStream.writeWord(6);
  4910. outStream.writeWord(1688);
  4911. outStream.writeByte(slot);
  4912. outStream.writeWord(0);
  4913. outStream.writeByte(0);
  4914. ResetBonus();
  4915. GetBonus();
  4916. WriteBonus();
  4917. if (slot == playerWeapon) {
  4918. SendWeapon(-1, "Unarmed");
  4919. }
  4920. updateRequired = true;
  4921. appearanceUpdateRequired = true;
  4922. }
  4923. }
  4924.  
  4925. public void deleteequiment(int wearID, int slot) {
  4926. playerEquipment[slot] = -1;
  4927. playerEquipmentN[slot] = 0;
  4928. outStream.createFrame(34);
  4929. outStream.writeWord(6);
  4930. outStream.writeWord(1688);
  4931. outStream.writeByte(slot);
  4932. outStream.writeWord(0);
  4933. outStream.writeByte(0);
  4934. ResetBonus();
  4935. GetBonus();
  4936. WriteBonus();
  4937. updateRequired = true;
  4938. appearanceUpdateRequired = true;
  4939. }
  4940.  
  4941. public void TeleTo(String s, int level) {
  4942. if (duelStatus == 3) {
  4943. sendMessage("You can't move during a duel!");
  4944. return;
  4945. }
  4946. if (actionTimer == 0) {
  4947. teleX = absX;
  4948. teleY = absY;
  4949. newheightLevel = heightLevel;
  4950.  
  4951. closeInterface();
  4952. teleport();
  4953. actionTimer = 10;
  4954. updateRequired = true;
  4955. appearanceUpdateRequired = true;
  4956. }
  4957. }
  4958.  
  4959. public void setChatOptions(int publicChat, int privateChat, int tradeBlock) {
  4960. outStream.createFrame(206);
  4961. outStream.writeByte(publicChat); // On = 0, Friends = 1, Off = 2, Hide = 3
  4962. outStream.writeByte(privateChat); // On = 0, Friends = 1, Off = 2
  4963. outStream.writeByte(tradeBlock); // On = 0, Friends = 1, Off = 2
  4964. }
  4965.  
  4966. public void openWelcomeScreen(int recoveryChange, boolean memberWarning, int messages, int lastLoginIP, int lastLogin) {
  4967. outStream.createFrame(176);
  4968. // days since last recovery change 200 for not yet set 201 for members server,
  4969. // otherwise, how many days ago recoveries have been changed.
  4970. outStream.writeByteC(recoveryChange);
  4971. outStream.writeWordA(messages); // # of unread messages
  4972. outStream.writeByte(memberWarning ? 1 : 0); // 1 for member on non-members world warning
  4973. outStream.writeDWord_v2(lastLoginIP); // ip of last login
  4974. outStream.writeWord(lastLogin); // days
  4975. }
  4976.  
  4977. public void setClientConfig(int id, int state) {
  4978. outStream.createFrame(36);
  4979. outStream.writeWordBigEndian(id);
  4980. outStream.writeByte(state);
  4981. }
  4982.  
  4983. public void initializeClientConfiguration() {
  4984. // TODO: this is sniffed from a session (?), yet have to figure out what each of these does.
  4985. setClientConfig(18, 1);
  4986. setClientConfig(19, 0);
  4987. setClientConfig(25, 0);
  4988. setClientConfig(43, 0);
  4989. setClientConfig(44, 0);
  4990. setClientConfig(75, 0);
  4991. setClientConfig(83, 0);
  4992. setClientConfig(84, 0);
  4993. setClientConfig(85, 0);
  4994. setClientConfig(86, 0);
  4995. setClientConfig(87, 0);
  4996. setClientConfig(88, 0);
  4997. setClientConfig(89, 0);
  4998. setClientConfig(90, 0);
  4999. setClientConfig(91, 0);
  5000. setClientConfig(92, 0);
  5001. setClientConfig(93, 0);
  5002. setClientConfig(94, 0);
  5003. setClientConfig(95, 0);
  5004. setClientConfig(96, 0);
  5005. setClientConfig(97, 0);
  5006. setClientConfig(98, 0);
  5007. setClientConfig(99, 0);
  5008. setClientConfig(100, 0);
  5009. setClientConfig(101, 0);
  5010. setClientConfig(104, 0);
  5011. setClientConfig(106, 0);
  5012. setClientConfig(108, 0);
  5013. setClientConfig(115, 0);
  5014. setClientConfig(143, 0);
  5015. setClientConfig(153, 0);
  5016. setClientConfig(156, 0);
  5017. setClientConfig(157, 0);
  5018. setClientConfig(158, 0);
  5019. setClientConfig(166, 0);
  5020. setClientConfig(167, 0);
  5021. setClientConfig(168, 0);
  5022. setClientConfig(169, 0);
  5023. setClientConfig(170, 0);
  5024. setClientConfig(171, 0);
  5025. setClientConfig(172, 0);
  5026. setClientConfig(173, 0);
  5027. setClientConfig(174, 0);
  5028. setClientConfig(203, 0);
  5029. setClientConfig(210, 0);
  5030. setClientConfig(211, 0);
  5031. setClientConfig(261, 0);
  5032. setClientConfig(262, 0);
  5033. setClientConfig(263, 0);
  5034. setClientConfig(264, 0);
  5035. setClientConfig(265, 0);
  5036. setClientConfig(266, 0);
  5037. setClientConfig(268, 0);
  5038. setClientConfig(269, 0);
  5039. setClientConfig(270, 0);
  5040. setClientConfig(271, 0);
  5041. setClientConfig(280, 0);
  5042. setClientConfig(286, 0);
  5043. setClientConfig(287, 0);
  5044. setClientConfig(297, 0);
  5045. setClientConfig(298, 0);
  5046. setClientConfig(301, 01);
  5047. setClientConfig(304, 01);
  5048. setClientConfig(309, 01);
  5049. setClientConfig(311, 01);
  5050. setClientConfig(312, 01);
  5051. setClientConfig(313, 01);
  5052. setClientConfig(330, 01);
  5053. setClientConfig(331, 01);
  5054. setClientConfig(342, 01);
  5055. setClientConfig(343, 01);
  5056. setClientConfig(344, 01);
  5057. setClientConfig(345, 01);
  5058. setClientConfig(346, 01);
  5059. setClientConfig(353, 01);
  5060. setClientConfig(354, 01);
  5061. setClientConfig(355, 01);
  5062. setClientConfig(356, 01);
  5063. setClientConfig(361, 01);
  5064. setClientConfig(362, 01);
  5065. setClientConfig(363, 01);
  5066. setClientConfig(377, 01);
  5067. setClientConfig(378, 01);
  5068. setClientConfig(379, 01);
  5069. setClientConfig(380, 01);
  5070. setClientConfig(383, 01);
  5071. setClientConfig(388, 01);
  5072. setClientConfig(391, 01);
  5073. setClientConfig(393, 01);
  5074. setClientConfig(399, 01);
  5075. setClientConfig(400, 01);
  5076. setClientConfig(406, 01);
  5077. setClientConfig(408, 01);
  5078. setClientConfig(414, 01);
  5079. setClientConfig(417, 01);
  5080. setClientConfig(423, 01);
  5081. setClientConfig(425, 01);
  5082. setClientConfig(427, 01);
  5083. setClientConfig(433, 01);
  5084. setClientConfig(435, 01);
  5085. setClientConfig(436, 01);
  5086. setClientConfig(437, 01);
  5087. setClientConfig(439, 01);
  5088. setClientConfig(440, 01);
  5089. setClientConfig(441, 01);
  5090. setClientConfig(442, 01);
  5091. setClientConfig(443, 01);
  5092. setClientConfig(445, 01);
  5093. setClientConfig(446, 01);
  5094. setClientConfig(449, 01);
  5095. setClientConfig(452, 01);
  5096. setClientConfig(453, 01);
  5097. setClientConfig(455, 01);
  5098. setClientConfig(464, 01);
  5099. setClientConfig(465, 01);
  5100. setClientConfig(470, 01);
  5101. setClientConfig(482, 01);
  5102. setClientConfig(486, 01);
  5103. setClientConfig(491, 01);
  5104. setClientConfig(492, 01);
  5105. setClientConfig(493, 01);
  5106. setClientConfig(496, 01);
  5107. setClientConfig(497, 01);
  5108. setClientConfig(498, 01);
  5109. setClientConfig(499, 01);
  5110. setClientConfig(502, 01);
  5111. setClientConfig(503, 01);
  5112. setClientConfig(504, 01);
  5113. setClientConfig(505, 01);
  5114. setClientConfig(506, 01);
  5115. setClientConfig(507, 01);
  5116. setClientConfig(508, 01);
  5117. setClientConfig(509, 01);
  5118. setClientConfig(510, 01);
  5119. setClientConfig(511, 01);
  5120. setClientConfig(512, 01);
  5121. setClientConfig(515, 01);
  5122. setClientConfig(518, 01);
  5123. setClientConfig(520, 01);
  5124. setClientConfig(521, 01);
  5125. setClientConfig(524, 01);
  5126. setClientConfig(525, 01);
  5127. setClientConfig(531, 01);
  5128. }
  5129.  
  5130. public int GetLastLogin(int Date) {
  5131. Calendar cal = new GregorianCalendar();
  5132. int day = cal.get(Calendar.DAY_OF_MONTH);
  5133. int month = cal.get(Calendar.MONTH);
  5134. int year = cal.get(Calendar.YEAR);
  5135. int calc = ((year*10000)+(month*100)+day);
  5136.  
  5137. return (calc-Date);
  5138. }
  5139.  
  5140. // upon connection of a new client all the info has to be sent to client prior to starting the regular communication
  5141. public void initialize() {
  5142. objects();
  5143. // first packet sent
  5144. outStream.createFrame(249);
  5145. outStream.writeByteA(playerIsMember); // 1 for members, zero for free
  5146. outStream.writeWordBigEndianA(playerId);
  5147.  
  5148. // here is the place for seting up the UI, stats, etc...
  5149. setChatOptions(0, 0, 0);
  5150. for (int i = 0; i < 25; i++) {
  5151. setSkillLevel(i, playerLevel[i], playerXP[i]);
  5152. }
  5153. refreshSkills();
  5154.  
  5155. outStream.createFrame(107); // resets something in the client
  5156.  
  5157. setSidebarInterface(0, 2423); // attack tab
  5158. setSidebarInterface(1, 3917); // skills tab
  5159. setSidebarInterface(2, 638); // quest tab
  5160. setSidebarInterface(3, 3213); // backpack tab
  5161. setSidebarInterface(4, 1644); // items wearing tab
  5162. setSidebarInterface(5, 5608); // pray tab
  5163. setSidebarInterface(6, 12855); // magic tab (ancient = 12855)
  5164. setSidebarInterface(7, -1); // ancient magicks
  5165. setSidebarInterface(8, 5065); // friend
  5166. setSidebarInterface(9, 5715); // ignore
  5167. setSidebarInterface(10, 2449); // logout tab
  5168. setSidebarInterface(11, 4445); // wrench tab
  5169. setSidebarInterface(12, 147); // run tab
  5170. setSidebarInterface(13, 1); // harp tab
  5171.  
  5172. // add player commands...
  5173.  
  5174. int dots = 0;
  5175. int start[] = {
  5176. 0, 0, 0, 0
  5177. };
  5178. int IPPart1 = 127;
  5179. int IPPart2 = 0;
  5180. int IPPart3 = 0;
  5181. int IPPart4 = 1;
  5182.  
  5183. if (playerLastConnect.length() < 7) {
  5184. playerLastConnect = connectedFrom;
  5185. }
  5186. if (playerLastConnect.length() <= 15) {
  5187. for (int j = 0; j <= playerLastConnect.length(); j++) {
  5188. if ((j+1) <= playerLastConnect.length()) {
  5189. if (playerLastConnect.substring(j, (j+1)).equals(".")) {
  5190. start[dots] = j;
  5191. dots++;
  5192. }
  5193. if (dots == 3) {
  5194. break;
  5195. }
  5196. }
  5197. }
  5198. if (dots == 3) {
  5199. IPPart1 = Integer.parseInt(playerLastConnect.substring(0, start[0]));
  5200. IPPart2 = Integer.parseInt(playerLastConnect.substring((start[0]+1), start[1]));
  5201. IPPart3 = Integer.parseInt(playerLastConnect.substring((start[1]+1), start[2]));
  5202. IPPart4 = Integer.parseInt(playerLastConnect.substring((start[2]+1)));
  5203. }
  5204. } else {
  5205. for (int j = 0; j <= playerLastConnect.length(); j++) {
  5206. if ((j+1) <= playerLastConnect.length()) {
  5207. if (playerLastConnect.substring(j, (j+1)).equals("-")) {
  5208. start[dots] = j;
  5209. dots++;
  5210. }
  5211. if (dots == 4) {
  5212. break;
  5213. }
  5214. }
  5215. }
  5216. if (dots == 4) {
  5217. try {
  5218. IPPart1 = Integer.parseInt(playerLastConnect.substring(0, start[0]));
  5219. IPPart2 = Integer.parseInt(playerLastConnect.substring((start[0]+1), start[1]));
  5220. IPPart3 = Integer.parseInt(playerLastConnect.substring((start[1]+1), start[2]));
  5221. IPPart4 = Integer.parseInt(playerLastConnect.substring((start[2]+1), (start[3])));
  5222. } catch (NumberFormatException e) {
  5223. }
  5224. }
  5225. }
  5226. setClientConfig(108, 0);
  5227. sendMessage("Welcome to Zernix!");
  5228. if (premium) {
  5229. sendMessage("Your account has premium member status");
  5230. } else {
  5231. sendMessage("You are not a premium member.");
  5232. }
  5233. if (playerMessages > 0)
  5234. sendMessage("You have "+playerMessages+" new messages. Check your inbox at Odion.com to view them.");
  5235. // FACE: 0= WEST | -1 = NORTH | -2 = EAST | -3 = SOUTH
  5236. updateRating();
  5237. //setSidebarInterface(6, 1151);
  5238. sendFrame126(""+playerLevel[0]+"", 4004);
  5239. sendFrame126(""+getLevelForXP(playerXP[0])+"", 4005);
  5240. sendFrame126(""+playerLevel[1]+"", 4008);
  5241. sendFrame126(""+getLevelForXP(playerXP[1])+"", 4009);
  5242. sendFrame126(""+playerLevel[2]+"", 4006);
  5243. sendFrame126(""+getLevelForXP(playerXP[2])+"", 4007);
  5244. sendFrame126(""+currentHealth+"", 4016);
  5245. sendFrame126(""+getLevelForXP(playerXP[3])+"", 4017);
  5246. sendFrame126(""+playerLevel[4]+"", 4010);
  5247. sendFrame126(""+getLevelForXP(playerXP[4])+"", 4011);
  5248. sendFrame126(""+playerLevel[5]+"", 4012);
  5249. sendFrame126(""+getLevelForXP(playerXP[5])+"", 4013);
  5250. sendFrame126(""+playerLevel[6]+"", 4014);
  5251. sendFrame126(""+getLevelForXP(playerXP[6])+"", 4015);
  5252. sendFrame126(""+playerLevel[7]+"", 4034);
  5253. sendFrame126(""+getLevelForXP(playerXP[7])+"", 4035);
  5254. sendFrame126(""+playerLevel[8]+"", 4038);
  5255. sendFrame126(""+getLevelForXP(playerXP[8])+"", 4039);
  5256. sendFrame126(""+playerLevel[9]+"", 4026);
  5257. sendFrame126(""+getLevelForXP(playerXP[9])+"", 4027);
  5258. sendFrame126(""+playerLevel[10]+"", 4032);
  5259. sendFrame126(""+getLevelForXP(playerXP[10])+"", 4033);
  5260. sendFrame126(""+playerLevel[11]+"", 4036);
  5261. sendFrame126(""+getLevelForXP(playerXP[11])+"", 4037);
  5262. sendFrame126(""+playerLevel[12]+"", 4024);
  5263. sendFrame126(""+getLevelForXP(playerXP[12])+"", 4025);
  5264. sendFrame126(""+playerLevel[13]+"", 4030);
  5265. sendFrame126(""+getLevelForXP(playerXP[13])+"", 4031);
  5266. sendFrame126(""+playerLevel[14]+"", 4028);
  5267. sendFrame126(""+getLevelForXP(playerXP[14])+"", 4029);
  5268. sendFrame126(""+playerLevel[15]+"", 4020);
  5269. sendFrame126(""+getLevelForXP(playerXP[15])+"", 4021);
  5270. sendFrame126(""+playerLevel[16], 4018);
  5271. sendFrame126(""+getLevelForXP(playerXP[16]), 4019);
  5272. sendFrame126(""+playerLevel[17], 4022);
  5273. sendFrame126(""+getLevelForXP(playerXP[17]), 4023);
  5274. sendFrame126(""+playerLevel[20], 4152);
  5275. sendFrame126(""+getLevelForXP(playerXP[20]), 4153);
  5276. if (playerPass.equals("")) {
  5277. sendMessage("No password set! Use ::pass [PASSWORD] to set one.");
  5278. }
  5279.  
  5280. WriteEnergy();
  5281. //sendFrame126("Project16", 2451);
  5282. sendFrame126("", 6067);
  5283. sendFrame126("", 6071);
  5284. SendWeapon(-1, "Unarmed");
  5285.  
  5286. handler.updatePlayer(this, outStream);
  5287. handler.updateNPC(this, outStream);
  5288. setEquipment(playerEquipment[playerHat], playerEquipmentN[playerHat], playerHat);
  5289. setEquipment(playerEquipment[playerCape], playerEquipmentN[playerCape], playerCape);
  5290. setEquipment(playerEquipment[playerAmulet], playerEquipmentN[playerAmulet], playerAmulet);
  5291. setEquipment(playerEquipment[playerArrows], playerEquipmentN[playerArrows], playerArrows);
  5292. setEquipment(playerEquipment[playerChest], playerEquipmentN[playerChest], playerChest);
  5293. setEquipment(playerEquipment[playerShield], playerEquipmentN[playerShield], playerShield);
  5294. setEquipment(playerEquipment[playerLegs], playerEquipmentN[playerLegs], playerLegs);
  5295. setEquipment(playerEquipment[playerHands], playerEquipmentN[playerHands], playerHands);
  5296. setEquipment(playerEquipment[playerFeet], playerEquipmentN[playerFeet], playerFeet);
  5297. setEquipment(playerEquipment[playerRing], playerEquipmentN[playerRing], playerRing);
  5298. setEquipment(playerEquipment[playerWeapon], playerEquipmentN[playerWeapon], playerWeapon);
  5299. resetItems(3214);
  5300. resetBank();
  5301.  
  5302. ResetBonus();
  5303. GetBonus();
  5304. WriteBonus();
  5305. //objects
  5306. /*ReplaceObject(2090, 3267, 3430, 0, 22);
  5307. ReplaceObject(2094, 3268, 3431, 0, 22);
  5308. ReplaceObject(2092, 3269, 3431, 0, 22);
  5309. removeObject(2735, 3449, 8173);
  5310. removeObject(2723, 3454, 8173);
  5311. removeObject(2783, 2613, 3081);
  5312. removeObject(2613, 3078, 2783);
  5313. removeObject(2721, 3459, 8173);*/
  5314. for (int c = 0; c < server.objectHandler.ObjectID.length; c++) {
  5315. if (server.objectHandler.ObjectID[c] == -1)
  5316. continue;
  5317. addObject(server.objectHandler.ObjectX[c], server.objectHandler.ObjectY[c], server.objectHandler.ObjectID[c], server.objectHandler.ObjectFace[c]);
  5318. }
  5319.  
  5320. pmstatus(2);
  5321. boolean pmloaded = false;
  5322.  
  5323. for (int i = 0; i < friends.length; i++) {
  5324. if (friends[i] != 0) {
  5325. for (int i2 = 1; i2 < handler.maxPlayers; i2++) {
  5326. if (handler.players[i2] != null && handler.players[i2].isActive && misc.playerNameToInt64(handler.players[i2].playerName) == friends[i]) {
  5327. if (playerRights >= 2 || handler.players[i2].Privatechat == 0 || (handler.players[i2].Privatechat == 1 && handler.players[i2].isinpm(misc.playerNameToInt64(playerName)))) {
  5328. loadpm(friends[i], GetWorld(i2));
  5329. pmloaded = true;
  5330. }
  5331. break;
  5332. }
  5333. }
  5334. if (!pmloaded) {
  5335. loadpm(friends[i], 0);
  5336. }
  5337. pmloaded = false;
  5338. }
  5339. }
  5340. for (int i1 = 1; i1 < handler.maxPlayers; i1++) {
  5341. if (handler.players[i1] != null && handler.players[i1].isActive == true) {
  5342. handler.players[i1].pmupdate(playerId, GetWorld(playerId));
  5343. }
  5344. }
  5345. // Objects
  5346. for (int i = 0; i < server.objectHandler.MaxObjects; i++) {
  5347. if (server.objectHandler.ObjectID[i] > -1) {
  5348. if (server.objectHandler.ObjectOpen[i] != server.objectHandler.ObjectOriOpen[i]) {
  5349. ChangeDoor(i);
  5350. }
  5351. }
  5352. }
  5353. //start of free quests
  5354. sendQuest("Zernix Quests", 640);
  5355. sendQuest("", 663);
  5356. sendQuest("", 7332);
  5357. sendQuest("", 7331);
  5358. sendQuest("", 7332);
  5359. sendQuest("", 7333);
  5360. sendQuest("", 7334);
  5361. sendQuest("", 7336);
  5362. sendQuest("", 7383);
  5363. sendQuest("", 7339);
  5364. sendQuest("", 7338);
  5365. sendQuest("", 7340);
  5366. sendQuest("", 7346);
  5367. sendQuest("", 7341);
  5368. sendQuest("", 7342);
  5369. sendQuest("", 7337);
  5370. sendQuest("", 7343);
  5371. sendQuest("", 7335);
  5372. sendQuest("", 7344);
  5373. sendQuest("", 7345);
  5374. sendQuest("", 7346);
  5375. sendQuest("", 7347);
  5376. sendQuest("", 7348);
  5377. sendQuest("", 12772);
  5378. sendQuest("", 673);
  5379. sendQuest("", 7352);
  5380. sendQuest("", 17510);
  5381. sendQuest("", 7353);
  5382. sendQuest("", 12129);
  5383. sendQuest("", 8438);
  5384. sendQuest("", 12852);
  5385. sendQuest("", 15841);
  5386. sendQuest("", 7354);
  5387. sendQuest("", 7355);
  5388. sendQuest("", 7356);
  5389. sendQuest("", 8679);
  5390. sendQuest("", 7459);
  5391. sendQuest("", 16149);
  5392. sendQuest("", 6987);
  5393. sendQuest("", 7357);
  5394. sendQuest("", 12836);
  5395. sendQuest("", 7358);
  5396. sendQuest("", 7359);
  5397. sendQuest("", 14169);
  5398. sendQuest("", 10115);
  5399. sendQuest("", 14604);
  5400. sendQuest("", 7360);
  5401. sendQuest("", 12282);
  5402. sendQuest("", 13577);
  5403. sendQuest("", 12839);
  5404. sendQuest("", 7361);
  5405. sendQuest("", 16128);
  5406. sendQuest("", 11857);
  5407. sendQuest("", 7362);
  5408. sendQuest("", 7363);
  5409. sendQuest("", 7364);
  5410. sendQuest("", 10135);
  5411. sendQuest("", 4508);
  5412. sendQuest("", 18517);
  5413. sendQuest("", 11907);
  5414. sendQuest("", 7365);
  5415. sendQuest("", 7366);
  5416. sendQuest("", 7367);
  5417. sendQuest("", 13389);
  5418. sendQuest("", 15487);
  5419. sendQuest("", 7368);
  5420. sendQuest("", 11132);
  5421. sendQuest("", 7369);
  5422. sendQuest("", 12389);
  5423. sendQuest("", 13974);
  5424. sendQuest("", 6027);
  5425. sendQuest("", 7370);
  5426. sendQuest("", 8137);
  5427. sendQuest("", 7371);
  5428. sendQuest("", 12345);
  5429. sendQuest("", 7372);
  5430. sendQuest("", 8115);
  5431. sendQuest("", 18684);
  5432. sendQuest("", 15499);
  5433. sendQuest("", 18306);
  5434. sendQuest("", 668);
  5435. sendQuest("", 8576);
  5436. sendQuest("", 12139);
  5437. sendQuest("", 14912);
  5438. sendQuest("", 7373);
  5439. sendQuest("", 7374);
  5440. sendQuest("", 8969);
  5441. sendQuest("", 15352);
  5442. sendQuest("", 7375);
  5443. sendQuest("", 7376);
  5444. sendQuest("", 15098);
  5445. sendQuest("", 15592);
  5446. sendQuest("", 249);
  5447. sendQuest("", 1740);
  5448. sendQuest("", 15235);
  5449. sendQuest("", 3278);
  5450. sendQuest("", 7378);
  5451. sendQuest("", 6518);
  5452. sendQuest("", 7379);
  5453. sendQuest("", 7380);
  5454. sendQuest("", 7381);
  5455. sendQuest("", 11858);
  5456. sendQuest("", 191);
  5457. sendQuest("", 9927);
  5458. sendQuest("", 6024);
  5459. sendQuest("", 7349);
  5460. sendQuest("", 7351);
  5461. sendQuest("", 7350);
  5462. sendQuest("", 13356);
  5463. sendQuest("Accept Aid", 12585);
  5464. sendQuest("Zernix, always use the", 2451);
  5465. sendQuest("", 682);
  5466. sendQuest("", 6294);
  5467. sendQuest("", 6295);
  5468. sendQuest("", 6296);
  5469. sendQuest("", 6300);
  5470. sendQuest("", 6301);
  5471. sendQuest("", 6302);
  5472. sendQuest("", 6303);
  5473. sendQuest("", 6304);
  5474. sendQuest("", 6305);
  5475. sendQuest("", 6306);
  5476. sendQuest("", 6307);
  5477. //End of quests
  5478.  
  5479. sendQuest("Nardan Teleport", 13037);
  5480. sendQuest("Teleport back home", 13038);
  5481. sendQuest("@gre@0/0", 13042);
  5482. sendQuest("@gre@0/0", 13043);
  5483. sendQuest("@gre@0/0", 13044);
  5484. sendQuest("Ardourgne Teleport", 13047);
  5485. sendQuest("Ardourgne", 13048);
  5486. sendQuest("@gre@0/0", 13051);
  5487. sendQuest("@gre@0/0", 13052);
  5488. sendQuest("Camelot Teleport", 13055);
  5489. sendQuest("Camelot", 13056);
  5490. sendQuest("@gre@0/0", 13059);
  5491. sendQuest("@gre@0/0", 13060);
  5492. sendQuest("Port Khazard Teleport", 13063);
  5493. sendQuest("Port Khazard", 13064);
  5494. sendQuest("@gre@0/0", 13067);
  5495. sendQuest("@gre@0/0", 13068);
  5496. sendQuest("Lletya Teleport", 13071);
  5497. sendQuest("Lletya", 13072);
  5498. sendQuest("@gre@0/0", 13076);
  5499. sendQuest("@gre@0/0", 13077);
  5500. sendQuest("@gre@0/0", 13078);
  5501. sendQuest("Grand Tree Teleport", 13081);
  5502. sendQuest("Grand Tree", 13082);
  5503. sendQuest("@gre@0/0", 13085);
  5504. sendQuest("@gre@0/0", 13086);
  5505. sendQuest("Crandor Teleport", 13089);
  5506. sendQuest("Crandor", 13090);
  5507. sendQuest("@gre@0/0", 13093);
  5508. sendQuest("@gre@0/0", 13094);
  5509. sendQuest("Monastery Teleport", 13097);
  5510. sendQuest("Monastery", 13098);
  5511. sendQuest("@gre@0/0", 13101);
  5512. sendQuest("@gre@0/0", 13102);
  5513. sendQuest("@gre@0/0", 12947); //smoke rush
  5514. sendQuest("@gre@0/0", 12948); //smoke rush
  5515. sendQuest("@gre@0/0", 12949); //smoke rush
  5516. sendQuest("@gre@0/0", 12950); //smoke rush
  5517. sendQuest("@gre@0/0", 12998); //shadow rush
  5518. sendQuest("@gre@0/0", 12997); //shadow rush
  5519. sendQuest("@gre@0/0", 12996); //shadow rush
  5520. sendQuest("@gre@0/0", 12995); //shadow rush
  5521. sendQuest("@gre@0/0", 12908); //blood rush
  5522. sendQuest("@gre@0/0", 12909); //blood rush
  5523. sendQuest("@gre@0/0", 12910); //blood rush
  5524. sendQuest("@gre@0/0", 12868); //ice rush
  5525. sendQuest("@gre@0/0", 12869); //ice rush
  5526. sendQuest("@gre@0/0", 12870); //ice rush
  5527. sendQuest("@gre@0/0", 12974); //smoke burst
  5528. sendQuest("@gre@0/0", 12973); //smoke burst
  5529. sendQuest("@gre@0/0", 12971); //smoke burst
  5530. sendQuest("@gre@0/0", 12972); //smoke burst
  5531. sendQuest("@gre@0/0", 13022); //shadow burst
  5532. sendQuest("@gre@0/0", 13021); //shadow burst
  5533. sendQuest("@gre@0/0", 13019); //shadow burst
  5534. sendQuest("@gre@0/0", 13020); //shadow burst
  5535. sendQuest("@gre@0/0", 12927); //blood burst
  5536. sendQuest("@gre@0/0", 12928); //blood burst
  5537. sendQuest("@gre@0/0", 12926); //blood burst
  5538. sendQuest("@gre@0/0", 12889); //ice burst
  5539. sendQuest("@gre@0/0", 12890); //ice burst
  5540. sendQuest("@gre@0/0", 12888); //ice burst
  5541. sendQuest("@gre@0/0", 12959); //smoke blitz
  5542. sendQuest("@gre@0/0", 12960); //smoke blitz
  5543. sendQuest("@gre@0/0", 12961); //smoke blitz
  5544. sendQuest("@gre@0/0", 12962); //smoke blitz
  5545. sendQuest("@gre@0/0", 13007); //shadow blitz
  5546. sendQuest("@gre@0/0", 13008); //shadow blitz
  5547. sendQuest("@gre@0/0", 13009); //shadow blitz
  5548. sendQuest("@gre@0/0", 13010); //shadow blitz
  5549. sendQuest("@gre@0/0", 12917); //blood blitz
  5550. sendQuest("@gre@0/0", 12918); //blood blitz
  5551. sendQuest("@gre@0/0", 12879); //ice blitz
  5552. sendQuest("@gre@0/0", 12880); //ice blitz
  5553. sendQuest("@gre@0/0", 12878); //ice blitz
  5554. sendQuest("@gre@0/0", 12986); //smoke barrage
  5555. sendQuest("@gre@0/0", 12985); //smoke barrage
  5556. sendQuest("@gre@0/0", 12983); //smoke barrage
  5557. sendQuest("@gre@0/0", 12984); //smoke barrage
  5558. sendQuest("@gre@0/0", 13031); //shadow barrage
  5559. sendQuest("@gre@0/0", 13032); //shadow barrage
  5560. sendQuest("@gre@0/0", 13033); //shadow barrage
  5561. sendQuest("@gre@0/0", 13034); //shadow barrage
  5562. sendQuest("@gre@0/0", 12937); //blood barrage
  5563. sendQuest("@gre@0/0", 12938); //blood barrage
  5564. sendQuest("@gre@0/0", 12936); //blood barrage
  5565. sendQuest("@gre@0/0", 12899); //ice barrage
  5566. sendQuest("@gre@0/0", 12898); //ice barrage
  5567. sendQuest("@gre@0/0", 12900); //ice barrage
  5568. int[] lol = {
  5569. 13199, 13200, 13201,
  5570. 13250, 13251, 13252, 13253,
  5571. 13155, 13156, 13157,
  5572. //missing line//
  5573. 13224, 13225, 13226, 13227,
  5574. 13276, 13277, 13278, 13279,
  5575. 13175, 13176, 13177,
  5576. 13133, 13134, 13135,
  5577. 13211, 13212, 13213, 13214,
  5578. 13263, 13264, 13265, 13266,
  5579. 13165, 13166,
  5580. 13122, 13123, 13124,
  5581. 13237, 13238, 13239, 13240,
  5582. 13289, 13290, 13291, 13292,
  5583. 13186, 13187, 13188,
  5584. 13144, 13145, 13146
  5585. };
  5586. for(int auto = 0; auto < lol.length; auto++) {
  5587. sendQuest("@gre@0/0", lol[auto]);
  5588. }
  5589.  
  5590. //main
  5591. playerLastConnect = connectedFrom;
  5592. sendQuest("Using this will send a notification to all online mods", 5967);
  5593. sendQuest("@yel@Then click below to indicate which of our rules is being broken.", 5969);
  5594. sendQuest("4: Bug abuse (includes noclip)", 5974);
  5595. sendQuest("5: Odion staff impersonation", 5975);
  5596. sendQuest("6: Monster luring or abuse", 5976);
  5597. sendQuest("8: Item Duplication", 5978);
  5598. sendQuest("10: Misuse of yell channel", 5980);
  5599. sendQuest("12: Possible duped items", 5982);
  5600. /*openWelcomeScreen(201, true, playerMessages,
  5601. ((IPPart1 << 24) + (IPPart2 << 16) + (IPPart3 << 8)
  5602. + IPPart4),
  5603. GetLastLogin(playerLastLogin));*/
  5604. }
  5605.  
  5606. public void update() {
  5607. handler.updatePlayer(this, outStream);
  5608. handler.updateNPC(this, outStream);
  5609.  
  5610. flushOutStream();
  5611. }
  5612.  
  5613. public static final int packetSizes[] = {
  5614. 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, // 0
  5615. 0, 0, 0, 0, 8, 0, 6, 2, 2, 0, // 10
  5616. 0, 2, 0, 6, 0, 12, 0, 0, 0, 0, // 20
  5617. 0, 0, 0, 0, 0, 8, 4, 0, 0, 2, // 30
  5618. 2, 6, 0, 6, 0, -1, 0, 0, 0, 0, // 40
  5619. 0, 0, 0, 12, 0, 0, 0, 8, 0, 0, // 50
  5620. 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, // 60
  5621. 6, 0, 2, 2, 8, 6, 0, -1, 0, 6, // 70
  5622. 0, 0, 0, 0, 0, 1, 4, 6, 0, 0, // 80
  5623. 0, 0, 0, 0, 0, 3, 0, 0, -1, 0, // 90
  5624. 0, 13, 0, -1, 0, 0, 0, 0, 0, 0, // 100
  5625. 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, // 110
  5626. 1, 0, 6, 0, 0, 0, -1, 0, 2, 6, // 120
  5627. 0, 4, 6, 8, 0, 6, 0, 0, 0, 2, // 130
  5628. 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, // 140
  5629. 0, 0, 1, 2, 0, 2, 6, 0, 0, 0, // 150
  5630. 0, 0, 0, 0, -1, -1, 0, 0, 0, 0, // 160
  5631. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 170
  5632. 0, 8, 0, 3, 0, 2, 0, 0, 8, 1, // 180
  5633. 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, // 190
  5634. 2, 0, 0, 0, 0, 0, 0, 0, 4, 0, // 200
  5635. 4, 0, 0, 0, 7, 8, 0, 0, 10, 0, // 210
  5636. 0, 0, 0, 0, 0, 0, -1, 0, 6, 0, // 220
  5637. 1, 0, 0, 0, 6, 0, 6, 8, 1, 0, // 230
  5638. 0, 4, 0, 0, 0, 0, -1, 0, -1, 4, // 240
  5639. 0, 0, 6, 6, 0, 0, 0 // 250
  5640. };
  5641.  
  5642. public int packetSize = 0, packetType = -1;
  5643. public boolean process() {
  5644.  
  5645. objects();
  5646. scanPickup();
  5647. if (inroom && System.currentTimeMillis()-server.fuck >= 80000) {
  5648. server.fuck = System.currentTimeMillis();
  5649. games();
  5650. }
  5651. if (ingame && System.currentTimeMillis()-server.jizz >= 50000) {
  5652. end();
  5653. }
  5654.  
  5655. room();
  5656. wildLevel();
  5657. thiefdelay--;
  5658. clickCount--;
  5659. if(ani == true) {
  5660. anim ++;
  5661. setClientConfig(anim, 1);
  5662. sendMessage("config: "+anim+"");
  5663. }
  5664. if(anima == true) {
  5665. animat ++;
  5666. setClientConfig(animat, 0);
  5667. sendMessage("config: "+animat+"");
  5668. }
  5669. if(currentHealth >= playerLevel[3]) {
  5670. currentHealth = playerLevel[3];
  5671. }
  5672. if (clickCount > 0) {
  5673. runStream = false;
  5674. sendMessage("no try!");
  5675. }
  5676. //if(IsCutting) {
  5677. //sendMessage(""+(System.currentTimeMillis() - lastAction)+"");
  5678. //}
  5679. // is being called regularily every 500ms
  5680. /*for(int i = 0; i < server.npcHandler.npcs.length; i++){
  5681. if(server.npcHandler.npcs[i] != null){
  5682. int xDiff = Math.abs(absX - server.npcHandler.npcs[i].absX);
  5683. int yDiff = Math.abs(absY - server.npcHandler.npcs[i].absY);
  5684. if(xDiff >= server.npcHandler.npcs[i].aggroRadius || yDiff >= server.npcHandler.npcs[i].aggroRadius){
  5685. IsAttackingNPC = true;
  5686. attacknpc = i;
  5687. }
  5688. }
  5689. }*/
  5690. if (spamButton && System.currentTimeMillis()-lastButton > 1100) {
  5691. lastButton = System.currentTimeMillis();
  5692. if (currentButton >= 700) {
  5693. currentButton = 1;
  5694. currentStatus++;
  5695. }
  5696. if (currentStatus >= 255) {
  5697. spamButton = false;
  5698. }
  5699. println("sending button "+currentButton+", "+currentStatus);
  5700. frame36(currentButton, currentStatus);
  5701. currentButton++;
  5702. }
  5703. if (animationReset > 0 && System.currentTimeMillis() >= animationReset) {
  5704. animationReset = 0;
  5705. resetAnimation();
  5706. if (originalS > 0) {
  5707. wear(originalS, playerShield);
  5708. }
  5709. }
  5710. if (emoting && System.currentTimeMillis()-lastAction > 300) {
  5711. lastAction = System.currentTimeMillis();
  5712. pEmote++;
  5713. updateRequired = true;
  5714. appearanceUpdateRequired = true;
  5715. sendMessage("Trying emote "+pEmote+"... ");
  5716. }
  5717. if(ingame) {
  5718. long tits = ((50000-(System.currentTimeMillis()-server.jizz))/1000);
  5719. sendFrame126("Time left: "+tits+" Seconds", 6570);
  5720. setInterfaceWalkable(6673);
  5721. } else if(inroom) {
  5722. long tits = ((80000-(System.currentTimeMillis()-server.fuck))/1000);
  5723. sendFrame126("Time left: "+tits+" Seconds", 6570);
  5724. //sendFrame126("Players In room: "+server.playersinroom, 6572);
  5725. setInterfaceWalkable(6673);
  5726. } else {
  5727. sendFrame126("Zernix ("+PlayerHandler.getPlayerCount()+" online)", 6570);
  5728. sendFrame126("", 6572);
  5729. sendFrame126("", 6664);
  5730. setInterfaceWalkable(6673);
  5731. }
  5732. if (hitDiff > 0) {
  5733. sendQuest(""+currentHealth, 4016);
  5734. }
  5735. if (inTrade && tradeResetNeeded) {
  5736. client o = getClient(trade_reqId);
  5737. if (o.tradeResetNeeded) {
  5738. resetTrade();
  5739. o.resetTrade();
  5740. }
  5741. }
  5742. if (tStage == 1 && tTime == 0) {
  5743. pEmote = 1816;
  5744. //stillgfx(308, absY, absX, 0, 15);
  5745. updateRequired = true;
  5746. appearanceUpdateRequired = true;
  5747. tTime = System.currentTimeMillis();
  5748. tStage = 2;
  5749. }
  5750. if (tStage == 2 && System.currentTimeMillis()-tTime >= 900) {
  5751. teleportToX = tX;
  5752. teleportToY = tY;
  5753. heightLevel = tH;
  5754. updateRequired = true;
  5755. appearanceUpdateRequired = true;
  5756. tStage = 0;
  5757. tTime = 0;
  5758. resetAnimation();
  5759. }
  5760. /*long now = System.currentTimeMillis();
  5761. if(now - lastProcess <= 490){
  5762. for(int i = 0; i < ancientId.length; i++){
  5763. if(coolDown[i] > 0){
  5764. coolDown[i]--;
  5765. }
  5766. }
  5767. for(int i = 0; i < effects.length; i++){
  5768. if(effects[i] > 0){
  5769. effects[i]--;
  5770. }
  5771. }
  5772. }
  5773. lastProcess = now;*/
  5774. long current = System.currentTimeMillis();
  5775. if (inCombat && current-lastCombat >= 20000) {
  5776. inCombat = false;
  5777. }
  5778. if((playerEquipment[playerCape] == 9747) && playerLevel[playerAttack] <= 98) {
  5779. remove(playerEquipment[playerCape], playerCape);
  5780. sendMessage("You must have 99 Attack to weild this cape");
  5781. }
  5782. if((playerEquipment[playerCape] == 9798) && playerLevel[playerFishing] <= 98) {
  5783. remove(playerEquipment[playerCape], playerCape);
  5784. sendMessage("You must have 99 Fishing to weild this cape");
  5785. }
  5786. if((playerEquipment[playerCape] == 9756) && playerLevel[playerRanged] <= 98) {
  5787. remove(playerEquipment[playerCape], playerCape);
  5788. sendMessage("You must have 99 Range to weild this cape");
  5789. }
  5790. if((playerEquipment[playerCape] == 9759) && playerLevel[playerPrayer] <= 98) {
  5791. remove(playerEquipment[playerCape], playerCape);
  5792. sendMessage("You must have 99 prayer to weild this cape");
  5793. }
  5794. if((playerEquipment[playerCape] == 9771) && playerLevel[playerAgility] <= 98) {
  5795. remove(playerEquipment[playerCape], playerCape);
  5796. sendMessage("You must have 99 agility to weild this cape");
  5797. }
  5798. if((playerEquipment[playerCape] == 9774) && playerLevel[playerHerblore] <= 98) {
  5799. remove(playerEquipment[playerCape], playerCape);
  5800. sendMessage("You must have 99 herblore to weild this cape");
  5801. }
  5802. if((playerEquipment[playerCape] == 9753) && playerLevel[playerDefence] <= 98) {
  5803. remove(playerEquipment[playerCape], playerCape);
  5804. sendMessage("You must have 99 defence to weild this cape");
  5805. }
  5806. if((playerEquipment[playerCape] == 9795) && playerLevel[playerSmithing] <= 98) {
  5807. remove(playerEquipment[playerCape], playerCape);
  5808. sendMessage("You must have 99 smithing to weild this cape");
  5809. }
  5810. if((playerEquipment[playerCape] == 9786) && playerLevel[playerSlayer] <= 98) {
  5811. remove(playerEquipment[playerCape], playerCape);
  5812. sendMessage("You must have 99 slayer to weild this cape");
  5813. }
  5814. if((playerEquipment[playerCape] == 9807) && playerLevel[playerWoodcutting] <= 98) {
  5815. remove(playerEquipment[playerCape], playerCape);
  5816. sendMessage("You must have 99 woodcutting to weild this cape");
  5817. }
  5818. if((playerEquipment[playerCape] == 9750) && playerLevel[playerStrength] <= 98) {
  5819. remove(playerEquipment[playerCape], playerCape);
  5820. sendMessage("You must have 99 strength to weild this cape");
  5821. }
  5822. if((playerEquipment[playerCape] == 9762) && playerLevel[playerMagic] <= 98) {
  5823. remove(playerEquipment[playerCape], playerCape);
  5824. sendMessage("You must have 99 magic to weild this cape");
  5825. }
  5826. if((playerEquipment[playerCape] == 9810) && playerLevel[playerFarming] <= 98) {
  5827. remove(playerEquipment[playerCape], playerCape);
  5828. sendMessage("You must have 99 farming to weild this cape");
  5829. }
  5830. if((playerEquipment[playerCape] == 9792) && playerLevel[playerMining] <= 98) {
  5831. remove(playerEquipment[playerCape], playerCape);
  5832. sendMessage("You must have 99 mining to weild this cape");
  5833. }
  5834. if((playerEquipment[playerCape] == 9780) && playerLevel[playerCrafting] <= 98) {
  5835. remove(playerEquipment[playerCape], playerCape);
  5836. sendMessage("You must have 99 crafting to weild this cape");
  5837. }
  5838. if((playerEquipment[playerCape] == 9768) && playerLevel[playerHitpoints] <= 98) {
  5839. remove(playerEquipment[playerCape], playerCape);
  5840. sendMessage("You must have 99 hitpoints to weild this cape");
  5841. }
  5842. if((playerEquipment[playerCape] == 9804) && playerLevel[playerFiremaking] <= 98) {
  5843. remove(playerEquipment[playerCape], playerCape);
  5844. sendMessage("You must have 99 firemaking to weild this cape");
  5845. }
  5846. if((playerEquipment[playerCape] == 9801) && playerLevel[playerCooking] <= 98) {
  5847. remove(playerEquipment[playerCape], playerCape);
  5848. sendMessage("You must have 99 cooking to weild this cape");
  5849. }
  5850. if((playerEquipment[playerCape] == 9765) && playerLevel[playerRunecrafting] <= 98) {
  5851. remove(playerEquipment[playerCape], playerCape);
  5852. sendMessage("You must have 99 runecrafting to weild this cape");
  5853. }
  5854. if((playerEquipment[playerCape] == 9783) && playerLevel[playerFletching] <= 98) {
  5855. remove(playerEquipment[playerCape], playerCape);
  5856. sendMessage("You must have 99 fletching to weild this cape");
  5857. }
  5858. if((playerEquipment[playerCape] == 9777) && playerLevel[playerThieving] <= 98) {
  5859. remove(playerEquipment[playerCape], playerCape);
  5860. sendMessage("You must have 99 Thieving to weild this cape");
  5861. }
  5862.  
  5863. barTimer++;
  5864. if (barTimer >= 100) {
  5865. barTimer = 0;
  5866. }
  5867. if (server.ShutDown && System.currentTimeMillis() - PlayerHandler.updateStartTime > (PlayerHandler.updateSeconds*1000 + 20000)) {
  5868. savegame(true);
  5869. }
  5870. if (startDuel && duelChatTimer <= 0) {
  5871. startDuel = false;
  5872. }
  5873. if (GObjChange == 1 && GObjSet == 1) {
  5874. commitobj();
  5875. GObjChange = 0;
  5876. }
  5877. EntangleDelay -= 1;
  5878. teletimer -= 1;
  5879. if (teleport == true && teletimer >= 0) {
  5880. teleportToX = absX;
  5881. teleportToY = absY;
  5882. }
  5883.  
  5884. if (teleport == true && teletimer <= 0) {
  5885. if (ancientstele == false) {
  5886. setAnimation(715);
  5887. }
  5888. teleportToX = teleX;
  5889. teleportToY = teleY;
  5890. heightLevel = newheightLevel;
  5891. teleport = false;
  5892. teleX = 0;
  5893. teleY = 0;
  5894. newheightLevel = 0;
  5895. pEmote = playerSE;
  5896. updateRequired = true;
  5897. appearanceUpdateRequired = true;
  5898. }
  5899.  
  5900. iceTimer -= 1;
  5901. if (iceBarrage == true && iceTimer <= 0) {
  5902. iceBarrage = false;
  5903. }
  5904. if (iceBarrage == true) {
  5905. teleportToX = absX;
  5906. teleportToY = absY;
  5907. }
  5908.  
  5909. if (resetanim <= 0) {
  5910. resetAnimation();
  5911. resetanim = 8;
  5912. }
  5913.  
  5914. EntangleDelay -= 1;
  5915. stealtimer -= 1;
  5916. if (AnimationReset == true && actionTimer <= 0) {
  5917. resetAnimation();
  5918. AnimationReset = false;
  5919. emotes = 0;
  5920. pEmote = playerSE;
  5921. updateRequired = true;
  5922. appearanceUpdateRequired = true;
  5923. }
  5924. if (actionAmount < 0) {
  5925. actionAmount = 0;
  5926. }
  5927. if (actionTimer > 0) {
  5928. actionTimer -= 1;
  5929. }
  5930. if (attackTimer > 0) {
  5931. attackTimer -= 1;
  5932. }
  5933. if (actionAmount > 4) {
  5934. }
  5935. AddDroppedItems();
  5936. // GameTime
  5937. // Shop
  5938. if (UpdateShop == true) {
  5939. resetItems(3823);
  5940. resetShop(MyShopID);
  5941. }
  5942. // Energy
  5943. if (playerEnergy < 100) {
  5944. if (playerEnergyGian >= server.EnergyRegian) {
  5945. playerEnergy += 1;
  5946. playerEnergyGian = 0;
  5947. }
  5948. playerEnergyGian++;
  5949. if (playerEnergy >= 0) {
  5950. WriteEnergy();
  5951. }
  5952. }
  5953.  
  5954. //cooking check
  5955. if (cooking && System.currentTimeMillis()-lastAction >= 2000) {
  5956. lastAction = System.currentTimeMillis();
  5957. startCooking();
  5958. }
  5959. // wilderness check
  5960. if(!inDuel) {
  5961. outStream.createFrameVarSize(104);
  5962. outStream.writeByteC(3);
  5963. outStream.writeByteA(0);
  5964. outStream.writeString("null");
  5965. outStream.endFrameVarSize();
  5966. outStream.createFrameVarSize(104);
  5967. outStream.writeByteC(2); // command slot (does it matter which one?)
  5968. outStream.writeByteA(0); // 0 or 1; 0 if command should be placed on top in context menu
  5969. outStream.writeString("Duel");
  5970. outStream.endFrameVarSize();
  5971. outStream.createFrameVarSize(104);
  5972. outStream.writeByteC(1); // command slot
  5973. outStream.writeByteA(0); // 0 or 1; 1 if command should be placed on top in context menu
  5974. outStream.writeString("Trade with");
  5975. outStream.endFrameVarSize();
  5976. }
  5977. if(inDuel) {
  5978. outStream.createFrameVarSize(104);
  5979. outStream.writeByteC(3);
  5980. outStream.writeByteA(1);
  5981. outStream.writeString("Attack");
  5982. outStream.endFrameVarSize();
  5983. outStream.createFrameVarSize(104);
  5984. outStream.writeByteC(2); // command slot (does it matter which one?)
  5985. outStream.writeByteA(0); // 0 or 1; 0 if command should be placed on top in context menu
  5986. outStream.writeString("null");
  5987. outStream.endFrameVarSize();
  5988. outStream.createFrameVarSize(104);
  5989. outStream.writeByteC(1); // command slot
  5990. outStream.writeByteA(0); // 0 or 1; 1 if command should be placed on top in context menu
  5991. outStream.writeString("null");
  5992. outStream.endFrameVarSize();
  5993. }
  5994. // Crackers
  5995. if (CrackerMsg == true) {
  5996. crackCracker();
  5997. }
  5998. // check stairs
  5999. if (stairs > 0) {
  6000. if (GoodDistance(skillX, skillY, absX, absY, stairDistance) == true) {
  6001. stairs(stairs, absX, absY);
  6002. }
  6003. }
  6004. // objects
  6005. if (doors > -1) {
  6006. if (GoodDistance2(skillX, skillY, absX, absY, 1) == true) {
  6007. ChangeDoor(doors);
  6008. doors = -1;
  6009. }
  6010. }
  6011. // check banking
  6012. if (WanneBank > 0) {
  6013. if (GoodDistance(skillX, skillY, absX, absY, WanneBank) == true) {
  6014. openUpBank();
  6015. WanneBank = 0;
  6016. }
  6017. }
  6018. // check shopping
  6019. if (WanneShop > 0) {
  6020. if (GoodDistance(skillX, skillY, absX, absY, 1) == true) {
  6021. openUpShop(WanneShop);
  6022. WanneShop = 0;
  6023. }
  6024. }
  6025. // woodcutting check
  6026. if (woodcutting[0] > 0) {
  6027. if (GoodDistance(skillX, skillY, absX, absY, woodcutting[5]) == true) {
  6028. closeInterface();
  6029. woodcutting();
  6030. }
  6031. }
  6032.  
  6033. // Pick Up Item Check
  6034. if (WannePickUp == true && IsUsingSkill == false) {
  6035. if (pickUpItem(PickUpID, PickUpAmount) == true) {
  6036. PickUpID = 0;
  6037. PickUpAmount = 0;
  6038. PickUpDelete = 0;
  6039. WannePickUp = false;
  6040. }
  6041. }
  6042. // Attacking in wilderness
  6043. long thisTime = System.currentTimeMillis();
  6044. if (IsAttacking == true && deathStage == 0 && (thisTime-lastAttack >= 2000)) {
  6045. if (PlayerHandler.players[AttackingOn] != null) {
  6046. if (PlayerHandler.players[AttackingOn].currentHealth > 0) {
  6047. Attack();
  6048. } else {
  6049.  
  6050. ResetAttack();
  6051. //if(duelStatus == 3)
  6052. //DuelVictory(p.absX, p.absY);
  6053.  
  6054. }
  6055. } else {
  6056. ResetAttack();
  6057. }
  6058. }
  6059. // Attacking range in wilderness
  6060. /*
  6061. if (IsAttacking == true && IsDead == false && (thisTime - lastAttack >= 2000)) {
  6062. if (PlayerHandler.players[AttackingOn] != null) {
  6063. if (PlayerHandler.players[AttackingOn].IsDead == false) {
  6064. if ((playerEquipment[playerWeapon] == 859)
  6065. || (playerEquipment[playerWeapon] == 839)
  6066. || (playerEquipment[playerWeapon] == 841)
  6067. || (playerEquipment[playerWeapon] == 843)
  6068. || (playerEquipment[playerWeapon] == 845)
  6069. || (playerEquipment[playerWeapon] == 847)
  6070. || (playerEquipment[playerWeapon] == 849)
  6071. || (playerEquipment[playerWeapon] == 851)
  6072. || (playerEquipment[playerWeapon] == 853)
  6073. || (playerEquipment[playerWeapon] == 855)
  6074. || (playerEquipment[playerWeapon] == 857)
  6075. || (playerEquipment[playerWeapon] == 861)
  6076. || (playerEquipment[playerWeapon] == 4214)
  6077. || (playerEquipment[playerWeapon] == 4734)
  6078. && (playerEquipmentN[playerArrows] == 0)) {
  6079. Attackrange();
  6080. }
  6081. } else {
  6082. ResetAttack();
  6083. sendMessage("You only need a bow to train range, no arrows needed");
  6084. }
  6085. } else {
  6086. ResetAttack();
  6087. }
  6088. }*/
  6089. if (currentHealth == 0) {
  6090. deathStage = 1;
  6091. }
  6092. // Attacking an NPC
  6093. if (IsAttackingNPC == true && deathStage == 0) {
  6094. if (server.npcHandler.npcs[attacknpc] != null) {
  6095. if (server.npcHandler.npcs[attacknpc].IsDead == false && server.npcHandler.npcs[attacknpc].MaxHP > 0) {
  6096. AttackNPC();
  6097. } else {
  6098. ResetAttackNPC();
  6099. }
  6100. } else {
  6101. ResetAttackNPC();
  6102. }
  6103. }
  6104. // If killed apply dead
  6105. if (deathStage == 1) {
  6106. if (attacknpc > 0) { //was killed by a npc -bakatool
  6107. server.npcHandler.ResetAttackPlayer(attacknpc);
  6108. }
  6109. ResetAttack();
  6110. ResetAttackNPC();
  6111.  
  6112. deathStage = 2;
  6113. client p = getClient(duel_with);
  6114. if (duel_with > 0 && validClient(duel_with) && inDuel && duelFight) {
  6115. //p.killedPlayer(p.playerName, p.combatLevel);
  6116. //p.ResetAttack();
  6117. p.DuelVictory();
  6118. //duelStatus = 4;
  6119. //p.duelStatus = 4;
  6120. }
  6121. if (fightId > 0) {
  6122. client f = (client)server.playerHandler.players[fightId];
  6123. if (f != null) {
  6124. f.fighting = false;
  6125. f.hits = 0;
  6126. }
  6127. }
  6128. fighting = false;
  6129. hits = 0;
  6130. sendMessage("Oh dear, you have died!");
  6131. pEmote = 2820;
  6132. updateRequired = true;
  6133. appearanceUpdateRequired = true;
  6134. deathTimer = System.currentTimeMillis();
  6135. currentHealth = playerLevel[playerHitpoints];
  6136. }
  6137. if (deathStage == 2 && System.currentTimeMillis()-deathTimer >= 2500) {
  6138. teleportToX = 3430;
  6139. teleportToY = 2917;
  6140. heightLevel = 0;
  6141. currentHealth = playerLevel[playerHitpoints];
  6142. deathStage = 0;
  6143. resetAnimation();
  6144. }
  6145. // mining check
  6146. if (mining[0] > 0) {
  6147. if (GoodDistance(skillX, skillY, absX, absY, 1) == true) {
  6148. mining();
  6149. }
  6150. }
  6151. // smithing check
  6152. if (smithing[0] > 0) {
  6153. updateRequired = true;
  6154. appearanceUpdateRequired = true;
  6155. resetAnimation();
  6156. resetSM();
  6157. RemoveAllWindows();
  6158. }
  6159. // prayer check
  6160. if (prayer[0] > 0) {
  6161. prayer();
  6162. }
  6163. // healing check
  6164. if (healing[0] > 0) {
  6165. healing();
  6166. }
  6167. //Devolution: smelting
  6168. if (smelting && System.currentTimeMillis()-lastAction >= 1500) {
  6169. lastAction = System.currentTimeMillis();
  6170. smelt(smelt_id);
  6171. } else if (shafting && System.currentTimeMillis()-lastAction >= 1500) {
  6172. lastAction = System.currentTimeMillis();
  6173. shaft();
  6174. } else if (fletching && System.currentTimeMillis()-lastAction >= 1900) {
  6175. lastAction = System.currentTimeMillis();
  6176. fletchBow();
  6177. } else if (spinning && System.currentTimeMillis()-lastAction >= 2100) {
  6178. lastAction = System.currentTimeMillis();
  6179. spinflax();
  6180. } else if (spinning && System.currentTimeMillis()-lastAction >= 1900) {
  6181. lastAction = System.currentTimeMillis();
  6182. spinwool();
  6183. } else if (crafting && System.currentTimeMillis()-lastAction >= 1500) {
  6184. lastAction = System.currentTimeMillis();
  6185. craft();
  6186. } else if (fishing && System.currentTimeMillis()-lastAction >= fishspeed) {
  6187. lastAction = System.currentTimeMillis();
  6188. startfishing(fishId);
  6189. }
  6190. // Snowing
  6191. if (IsSnowing == 1) {
  6192. outStream.createFrame(208);
  6193. outStream.writeWordBigEndian_dup(11877);
  6194. IsSnowing = 2;
  6195. } else if (IsSnowing == 3) {
  6196. outStream.createFrame(208);
  6197. outStream.writeWordBigEndian_dup(65535);
  6198. IsSnowing = 0;
  6199. }
  6200. // Npc Talking
  6201. if (NpcWanneTalk == 2) {
  6202. // Bank Booth
  6203. if (GoodDistance2(absX, absY, skillX, skillY, 1) == true) {
  6204. NpcDialogue = 1;
  6205. NpcTalkTo = GetNPCID(skillX, (skillY-1));
  6206. NpcWanneTalk = 0;
  6207. }
  6208. } else if (NpcWanneTalk > 0) {
  6209. if (GoodDistance2(absX, absY, skillX, skillY, 2) == true) {
  6210. NpcDialogue = NpcWanneTalk;
  6211. NpcTalkTo = GetNPCID(skillX, skillY);
  6212. NpcWanneTalk = 0;
  6213. }
  6214. }
  6215. if (NpcDialogue > 0 && NpcDialogueSend == false) {
  6216. UpdateNPCChat();
  6217. }
  6218.  
  6219. if (isKicked) {
  6220. disconnected = true;
  6221. if (saveNeeded)
  6222. savegame(true);
  6223. outStream.createFrame(109);
  6224. }
  6225.  
  6226. if (globalMessage.length() > 0) {
  6227. sendMessage(globalMessage);
  6228. globalMessage = "";
  6229. }
  6230. if (disconnected) {
  6231. return false;
  6232. }
  6233. try {
  6234. if (timeOutCounter++ > 20) {
  6235. misc.println("Client lost connection: timeout");
  6236. disconnected = true;
  6237. if (saveNeeded)
  6238. savegame(true);
  6239. return false;
  6240. }
  6241. if (in == null) {
  6242. return false;
  6243. }
  6244.  
  6245. int avail = in.available();
  6246.  
  6247. if (avail == 0) {
  6248. return false;
  6249. }
  6250.  
  6251. if (packetType == -1) {
  6252. packetType = in.read() & 0xff;
  6253. if (inStreamDecryption != null) {
  6254. packetType = packetType-inStreamDecryption.getNextKey() & 0xff;
  6255. }
  6256. packetSize = packetSizes[packetType];
  6257. avail--;
  6258. }
  6259. if (packetSize == -1) {
  6260. if (avail > 0) {
  6261. // this is a variable size packet, the next byte containing the length of said
  6262. packetSize = in.read() & 0xff;
  6263. avail--;
  6264. } else {
  6265. return false;
  6266. }
  6267. }
  6268. if (avail < packetSize) {
  6269. return false;
  6270. } // packet not completely arrived here yet
  6271.  
  6272. fillInStream(packetSize);
  6273. timeOutCounter = 0; // reset
  6274.  
  6275. parseIncomingPackets(); // method that does actually interprete these packets
  6276.  
  6277. packetType = -1;
  6278. } catch (java.lang.Exception __ex) {
  6279. __ex.printStackTrace();
  6280. System.out.println("Odion [fatal] - exception");
  6281. savegame(true);
  6282. disconnected = true;
  6283. }
  6284. return true;
  6285. }
  6286.  
  6287. public void AddDroppedItems() {
  6288. if (IsDropping == true) {
  6289. IsDropping = true;
  6290. int tmpX = 0;
  6291. int tmpY = 0;
  6292. int calcX = 0;
  6293. int calcY = 0;
  6294.  
  6295. for (int i = 0; i < server.itemHandler.DropItemCount; i++) {
  6296. if (server.itemHandler.DroppedItemsID[i] > -1) {
  6297. tmpX = server.itemHandler.DroppedItemsX[i];
  6298. tmpY = server.itemHandler.DroppedItemsY[i];
  6299. calcX = tmpX-absX;
  6300. calcY = tmpY-absY;
  6301. if (calcX >= -16 && calcX <= 15 && calcY >= -16 && calcY <= 15 && MustDelete[i] == false && server.itemHandler.DroppedItemsH[i] == heightLevel) {
  6302. if (IsDropped[i] == false && (server.itemHandler.DroppedItemsDDelay[i] <= 0 || server.itemHandler.DroppedItemsDropper[i] == playerId)) {
  6303. IsDropped[i] = true;
  6304. outStream.createFrame(85);
  6305. outStream.writeByteC((server.itemHandler.DroppedItemsY[i]-8*mapRegionY));
  6306. outStream.writeByteC((server.itemHandler.DroppedItemsX[i]-8*mapRegionX));
  6307. outStream.createFrame(44); // create item frame
  6308. outStream.writeWordBigEndianA(server.itemHandler.DroppedItemsID[i]);
  6309. outStream.writeWord(server.itemHandler.DroppedItemsN[i]); // amount
  6310. outStream.writeByte(0); // x(4 MSB) y(LSB) coords
  6311. }
  6312. } else if (IsDropped[i] == true || MustDelete[i] == true) {
  6313. outStream.createFrame(85);
  6314. outStream.writeByteC((server.itemHandler.DroppedItemsY[i]-8*mapRegionY));
  6315. outStream.writeByteC((server.itemHandler.DroppedItemsX[i]-8*mapRegionX));
  6316. outStream.createFrame(156); // remove item frame
  6317. outStream.writeByteS(0); // x(4 MSB) y(LSB) coords
  6318. outStream.writeWord(server.itemHandler.DroppedItemsID[i]);
  6319. int LastPlayerInList = -1;
  6320. int TotalPlayers = 0;
  6321.  
  6322. for (int j = 1; j < PlayerHandler.maxPlayers; j++) {
  6323. if (PlayerHandler.players[j] != null) {
  6324. LastPlayerInList = j;
  6325. TotalPlayers++;
  6326. }
  6327. }
  6328. if (MustDelete[i] == true) {
  6329. MustDelete[i] = false;
  6330. server.itemHandler.DroppedItemsDeletecount[i]++;
  6331. if ((LastPlayerInList == playerId || LastPlayerInList == -1) && server.itemHandler.DroppedItemsDeletecount[i] == TotalPlayers) {
  6332. if (server.itemHandler.DroppedItemsAlwaysDrop[i] == true) {
  6333. server.itemHandler.DroppedItemsDropper[i] = -1;
  6334. server.itemHandler.DroppedItemsDDelay[i] = server.itemHandler.SDID;
  6335. } else {
  6336. server.itemHandler.ResetItem(i);
  6337. }
  6338. for (int j = 1; j < PlayerHandler.maxPlayers; j++) {
  6339. if (PlayerHandler.players[j] != null) {
  6340. PlayerHandler.players[j].IsDropped[i] = false;
  6341. }
  6342. }
  6343. }
  6344. } else {
  6345. IsDropped[i] = false;
  6346. }
  6347. }
  6348. }
  6349. }
  6350. IsDropping = false;
  6351. }
  6352. }
  6353.  
  6354. private boolean packetProcess() {
  6355. if (disconnected) {
  6356. return false;
  6357. }
  6358. try {
  6359. if (timeOutCounter++ > 20) {
  6360. actionReset();
  6361. disconnected = true;
  6362. runStream = false;
  6363. if (saveNeeded)
  6364. savegame(true);
  6365. return false;
  6366. }
  6367.  
  6368. if (in == null) {
  6369. return false;
  6370. }
  6371.  
  6372. int avail = in.available();
  6373.  
  6374. if (avail == 0) {
  6375. return false;
  6376. }
  6377. if (packetType == -1) {
  6378. packetType = in.read() & 0xff;
  6379. if (inStreamDecryption != null) {
  6380. packetType = packetType-inStreamDecryption.getNextKey() & 0xff;
  6381. }
  6382. packetSize = packetSizes[packetType];
  6383. avail--;
  6384. }
  6385. if (packetSize == -1) {
  6386. if (avail > 0) {
  6387. packetSize = in.read() & 0xff;
  6388. avail--;
  6389. } else {
  6390. return false;
  6391. }
  6392. }
  6393. if (avail < packetSize) {
  6394. return false;
  6395. }
  6396. fillInStream(packetSize);
  6397. timeOutCounter = 0;
  6398.  
  6399. parseIncomingPackets();
  6400. packetType = -1;
  6401. } catch (java.lang.Exception __ex) {
  6402. server.logError(__ex.getMessage());
  6403. disconnected = true;
  6404. System.out.println("Odion [fatal] - exception");
  6405. savegame(true);
  6406. }
  6407. return true;
  6408. }
  6409.  
  6410. public void actionReset() {
  6411. actionName = "";
  6412. }
  6413.  
  6414. public void parseIncomingPackets() {
  6415. objects();
  6416. int i;
  6417. int junk;
  6418. int junk2;
  6419. int junk3;
  6420. lastPacket = System.currentTimeMillis();
  6421. //if(packetType != 0) println("" + packetType);
  6422. switch (packetType) {
  6423. case 25:
  6424. // item in inventory used with item on floor
  6425. int unknown1 = inStream.readSignedWordBigEndian(); // interface id of item
  6426. int unknown2 = inStream.readUnsignedWordA(); // item in bag id
  6427. int floorID = inStream.readUnsignedByte();
  6428. int floorY = inStream.readUnsignedWordA();
  6429. int unknown3 = inStream.readUnsignedWordBigEndianA();
  6430. int floorX = inStream.readUnsignedByte();
  6431. System.out.println("Unknown1 = "+unknown1);
  6432. System.out.println("Unknown2 = "+unknown2);
  6433. System.out.println("FloorID = "+floorID);
  6434. System.out.println("FloorY = "+floorY);
  6435. System.out.println("Unknown3 = "+unknown3);
  6436. System.out.println("FloorX = "+floorX);
  6437. break;
  6438. case 57:
  6439. itemId = inStream.readUnsignedWordA();
  6440. npcSlot = inStream.readUnsignedWordA();
  6441. int unknown = inStream.readUnsignedWordA();
  6442. interfaceId = inStream.readUnsignedWordA();
  6443. NPC npc = server.npcHandler.npcs[npcSlot];
  6444. if (interfaceId == 3214 && GoodDistance(absX, absY, npc.absX, npc.absY, 3)){
  6445.  
  6446. switch(npc.npcType) {
  6447.  
  6448. case 43:
  6449. if (itemId == 1735){
  6450. setAnimation(883);
  6451. if (misc.random(10) >= 5){
  6452. sendMessage("You shear the wool off the sheep.");
  6453. addItem(1737, 1);
  6454. npc.sheepDelay = 30;
  6455. } else {
  6456. sendMessage("The sheep smacks you off.");
  6457. }
  6458. }
  6459. break;
  6460. default:
  6461. sendMessage("Nothing Interesting Happens");
  6462. }
  6463. }
  6464. break;
  6465.  
  6466. case 0:
  6467. break; // idle packet - keeps on reseting timeOutCounter
  6468.  
  6469. case 202:
  6470. // idle logout packet - ignore for now
  6471. //logout();
  6472. break;
  6473. case 45:
  6474. //flagged account data
  6475. // inStream.readBytes(pmchatText, pmchatTextSize, 0);
  6476. int blah = inStream.readUnsignedByte();
  6477. int part2 = -1, part3 = -1, part4 = -1;
  6478. try {
  6479. part2 = inStream.readUnsignedWord();
  6480. }
  6481. catch (Exception e) {
  6482. println("part2 not sent");
  6483. }
  6484. //if(part2 == -1){ //exect input (client if/else)
  6485. try {
  6486. part3 = inStream.readDWord_v1();
  6487. }
  6488. catch (Exception e) {
  6489. println("part3 not sent");
  6490. }
  6491. try {
  6492. part4 = inStream.readDWord();
  6493. }
  6494. catch (Exception e) {
  6495. println("part4 not sent");
  6496. }
  6497. //}
  6498. println("blah="+blah+", "+"part2="+part2+", part3="+part3+", part4="+part4);
  6499. break;
  6500.  
  6501. case 210:
  6502. // loads new area
  6503. break;
  6504.  
  6505. case 40:
  6506. if(NpcDialogueSend) {
  6507. NpcDialogue += 1;
  6508. NpcDialogueSend = false;
  6509. } else {
  6510. closeInterface();
  6511. NpcDialogue = -1;
  6512. }
  6513. //println_debug("Unhandled packet ["+packetType+", InterFaceId: "+inStream.readUnsignedWordA()+", size="+packetSize+"]: ]"+misc.Hex(inStream.buffer, 1, packetSize)+"[");
  6514. //println_debug("Action Button: "+misc.HexToInt(inStream.buffer, 0, packetSize));
  6515. break;
  6516.  
  6517. case 192:
  6518. // Use an item on an object
  6519. junk = inStream.readSignedWordBigEndianA();
  6520. int UsedOnObjectID = inStream.readUnsignedWordBigEndian();
  6521. int UsedOnY = inStream.readSignedWordBigEndianA();
  6522. int ItemSlot = (inStream.readSignedWordBigEndianA()-128);
  6523. int UsedOnX = inStream.readUnsignedWordBigEndianA();
  6524. int ItemID = inStream.readUnsignedWord();
  6525. //if (!playerHasItem(ItemID))
  6526. server.OC.useobject(playerId, UsedOnObjectID, UsedOnY, UsedOnX, ItemID);
  6527.  
  6528.  
  6529. break;
  6530.  
  6531. case 218:
  6532. String abuser = misc.longToPlayerName(inStream.readQWord());
  6533. int rule = inStream.readUnsignedByte();
  6534. int mute = inStream.readUnsignedByte();
  6535. reportAbuse(abuser, rule, mute);
  6536. break;
  6537. case 130:
  6538. // Clicking some stuff in game
  6539. int interfaceID = inStream.readSignedByte();
  6540. //if(actionButtonId == 26018) {
  6541. if (inDuel && !duelFight) {
  6542. declineDuel();
  6543. }
  6544. if (duelFight && wonDuel == true) {
  6545. if (System.currentTimeMillis() - lastButton < 1000) {
  6546. lastButton = System.currentTimeMillis();
  6547. break;
  6548. } else {
  6549. lastButton = System.currentTimeMillis();
  6550. }
  6551. //println("Valid click..");
  6552. client other = getClient(duel_with);
  6553. for (GameItem item : otherOfferedItems) {
  6554. //println("otherDuelItems = " + item.id);
  6555. if ((item.id > 0) && (item.amount > 0)) {
  6556. if (Item.itemStackable[item.id]) {
  6557. if (!addItem(item.id, item.amount))
  6558. ItemHandler.addItem(item.id, enemyX, enemyY,
  6559. item.amount, playerId, false);
  6560. } else {
  6561. int amount = item.amount;
  6562. //for (int a = 1; a <= amount; a++) {
  6563. if (!addItem(item.id, 1))
  6564. ItemHandler.addItem(item.id, enemyX,
  6565. enemyY, 1, playerId, false);
  6566. }
  6567. }
  6568.  
  6569.  
  6570. }
  6571. for (GameItem item : offeredItems) {
  6572. if ((item.id > 0) && (item.amount > 0))
  6573. addItem(item.id, item.amount);
  6574. }
  6575. resetDuel();
  6576. savegame(false);
  6577. if (validClient(duel_with)) {
  6578. other.resetDuel();
  6579. other.savegame(false);
  6580. }
  6581. } else {
  6582. // sM("You didn't win the duel!");
  6583. }
  6584. if (inTrade && System.currentTimeMillis()-lastButton > 1000) {
  6585. lastButton = System.currentTimeMillis();
  6586. declineTrade();
  6587. }
  6588. if (IsShopping == true) {
  6589. IsShopping = false;
  6590. MyShopID = 0;
  6591. UpdateShop = false;
  6592. }
  6593. if (IsBanking == true) {
  6594. IsBanking = false;
  6595. }
  6596.  
  6597. if (misc.HexToInt(inStream.buffer, 0, packetSize) != 63363 && misc.HexToInt(inStream.buffer, 0, packetSize) != 0) {
  6598. println_debug("handled packet ["+packetType+", InterFaceId: "+interfaceID+", size="+packetSize+"]: ]"+misc.Hex(inStream.buffer, 1, packetSize)+"[");
  6599. println_debug("Action Button: "+misc.HexToInt(inStream.buffer, 0, packetSize));
  6600. }
  6601. break;
  6602.  
  6603. case 155:
  6604. // first Click npc
  6605. NPCSlot = (misc.HexToInt(inStream.buffer, 0, packetSize) / 1000);
  6606. NPCID = server.npcHandler.npcs[NPCSlot].npcType;
  6607. int NX = server.npcHandler.npcs[NPCSlot].absX;
  6608. int NY = server.npcHandler.npcs[NPCSlot].absY;
  6609. boolean PutNPCCoords = false;
  6610. NPCSlot = inStream.readSignedWordBigEndian();
  6611. if (GoodDistance(NX, NY, absX, absY, 3) == true) {
  6612. server.npcHandler.npcs[NPCSlot].TurnNPCTo(absX, absY);
  6613. server.npcHandler.npcs[NPCSlot].FocusUpdateRequired = true;
  6614. server.npcHandler.npcs[NPCSlot].updateRequired = true;
  6615. }
  6616. if (GoodDistance(NX, NY, absX, absY, 1) == true) {
  6617. TurnPlayerTo(NX,NY);
  6618. switch(NPCID) {
  6619. case 944:
  6620. nt4(false, NPCID, 605, "Try hit the dummy for experience! Maximum level is 15","Punch - Attack Experience","Kick - Strength Experience","Block - Defence Experience");
  6621. break;
  6622. }
  6623. }
  6624.  
  6625. if (NPCID == 804) {
  6626. openTan();
  6627. }
  6628. if (NPCID == 1596) {
  6629. nt1(false, 1596, 617, "Slayer is gay!");
  6630. }
  6631. if (NPCID == 70) {
  6632. nt1(false, 70, 616, "Slayer is gay!");
  6633. }
  6634. if (NPCID == 316) {
  6635. if(System.currentTimeMillis()-lastAction >= 2000) {
  6636. lastAction = System.currentTimeMillis();
  6637. startfishing(316);
  6638. }
  6639. }
  6640. if (NPCID == 312) {
  6641. if(System.currentTimeMillis()-lastAction >= 2000) {
  6642. lastAction = System.currentTimeMillis();
  6643. startfishing(312);
  6644. }
  6645. }
  6646. if (NPCID == 1177) {
  6647. if(System.currentTimeMillis()-lastAction >= 2000) {
  6648. lastAction = System.currentTimeMillis();
  6649. startfishing(1177);
  6650. }
  6651. }
  6652. if (NPCID == 1176) {
  6653. if(System.currentTimeMillis()-lastAction >= 2000) {
  6654. lastAction = System.currentTimeMillis();
  6655. startfishing(1176);
  6656. }
  6657. }
  6658. //if (NPCID == 321) {
  6659. // startfishing(321);
  6660. //}
  6661. else if (NPCID == 494 || NPCID == 495 || NPCID == 496 || NPCID == 497 || NPCID == 2354 || NPCID == 2355 || NPCID == 2619 || NPCID == 3198) {
  6662. /* Banking*/
  6663. skillX = server.npcHandler.npcs[NPCSlot].absX;
  6664. skillY = server.npcHandler.npcs[NPCSlot].absY;
  6665. NpcWanneTalk = 1;
  6666. }
  6667. else if (NPCID == 599) {
  6668. /*Make-Over Mage*/
  6669. showInterface(3559);
  6670. }
  6671. else if (NPCID == 553) {
  6672. /* Aubury*/
  6673. NpcWanneTalk = 3;
  6674. NpcDialogue = 3;
  6675. }
  6676. else if (NPCID == 2291) {
  6677. NpcWanneTalk = 10;
  6678. NpcDialogue = 10;
  6679. }
  6680. if (NPCID == 2) {
  6681. //skillX = server.npcHandler.npcs[NPCSlot].absX;
  6682. //skillY = server.npcHandler.npcs[NPCSlot].absY;
  6683. NpcDialogue = 7;
  6684. //NpcWanneTalk = 7;
  6685. }
  6686. else if (NPCID == 1597) {
  6687. skillX = server.npcHandler.npcs[NPCSlot].absX;
  6688. skillY = server.npcHandler.npcs[NPCSlot].absY;
  6689. NpcWanneTalk = 9;
  6690. }
  6691. else if (NPCID == 398) {
  6692. skillX = server.npcHandler.npcs[NPCSlot].absX;
  6693. skillY = server.npcHandler.npcs[NPCSlot].absY;
  6694. NpcWanneTalk = 398;
  6695. sendFrame200(4883, 398);
  6696. sendFrame126(GetNpcName(398), 4884);
  6697. if (premium) {
  6698. sendFrame126("Welcome to the Guild of Legends", 4885);
  6699. }
  6700. else {
  6701. sendFrame126("You must be a premium member to enter", 4885);
  6702. sendFrame126("Visit Odion.com to subscribe", 4886);
  6703. }
  6704. sendFrame75(398, 4883);
  6705. sendFrame164(4882);
  6706. NpcDialogueSend = true;
  6707. if (premium) {
  6708. ReplaceObject(2728, 3349, 2391, 0, 0);
  6709. ReplaceObject(2729, 3349, 2392, -2, 0);
  6710. }
  6711.  
  6712. }
  6713. else {
  6714. println_debug("atNPC 1: "+NPCID);
  6715. }
  6716. if (PutNPCCoords == true) {
  6717. skillX = server.npcHandler.npcs[NPCSlot].absX;
  6718. skillY = server.npcHandler.npcs[NPCSlot].absY;
  6719. }
  6720. break;
  6721.  
  6722. case 17:
  6723. // second Click npc
  6724. NPCSlot = inStream.readUnsignedWordBigEndianA();
  6725. if (NPCSlot < 0 || NPCSlot >= server.npcHandler.npcs.length || server.npcHandler.npcs[NPCSlot] == null)
  6726. break;
  6727. NPCID = server.npcHandler.npcs[NPCSlot].npcType;
  6728. long time = System.currentTimeMillis();
  6729. if (time-globalCooldown[0] <= 50) {
  6730. sendMessage("Action throttled... please wait longer before acting!");
  6731. break;
  6732. }
  6733.  
  6734. globalCooldown[0] = time;
  6735. int npcX = server.npcHandler.npcs[NPCSlot].absX;
  6736. int npcY = server.npcHandler.npcs[NPCSlot].absY;
  6737. if (Math.abs(absX-npcX) > 50 || Math.abs(absY-npcY) > 50) {
  6738. sendMessage("Client hack detected!");
  6739. break;
  6740. }
  6741. if (server.npcHandler.npcs[NPCSlot].IsDead) {
  6742. sendMessage("That monster has been killed!");
  6743. break;
  6744. }
  6745. PutNPCCoords = false;
  6746. if (NPCID == 494 || NPCID == 495 || NPCID == 496 || NPCID == 497 || NPCID == 2354 || NPCID == 2355 || NPCID == 2619 || NPCID == 3198) {
  6747. /* Banking*/
  6748. WanneBank = 2;
  6749. }
  6750. if (NPCID == 1780) {
  6751. // Nardan Weapon Shop
  6752. PutNPCCoords = true;
  6753. WanneShop = 5;
  6754. }
  6755. if (NPCID == 577) {
  6756. // Crafting shop
  6757. PutNPCCoords = true;
  6758. WanneShop = 4;
  6759. }
  6760. if (NPCID == 553) {
  6761. // Aubury
  6762. PutNPCCoords = true;
  6763. WanneShop = 1;
  6764. }
  6765. else if (NPCID == 520 || NPCID == 521) {
  6766. // Nardan general
  6767. PutNPCCoords = true;
  6768. WanneShop = 2; // Lumbridge General Store
  6769. }
  6770. else if (NPCID == 682) {
  6771. // Nardan Archery
  6772. PutNPCCoords = true;
  6773. WanneShop = 3; // Aaron's Archery Appendages
  6774. }
  6775. else if (NPCID == 1 || NPCID ==2 || NPCID == 3 || NPCID == 4 || NPCID == 5 || NPCID == 6) {
  6776. // THEIVING MAN & WOMEN
  6777. if (stealtimer < 0 && EntangleDelay < 0) {
  6778. robman();
  6779. EntangleDelay = 6;
  6780. stealtimer = 5;
  6781. // snaretimer = 5;
  6782. actionTimer = 4;
  6783. setAnimation(881);
  6784.  
  6785. AnimationReset = true;
  6786. updateRequired = true;
  6787. appearanceUpdateRequired = true;
  6788. }
  6789. }
  6790. else if (NPCID == 7) {
  6791. // THEIVING farmer
  6792. if (playerLevel[17] < 10) {
  6793. sendMessage("You need 10 theiving to pickpocket farmers.");
  6794. }
  6795. else {
  6796. if (stealtimer < 0 && EntangleDelay < 0) {
  6797. robfarmer();
  6798. EntangleDelay = 6;
  6799. stealtimer = 5;
  6800. // snaretimer = 5;
  6801. actionTimer = 4;
  6802. setAnimation(881);
  6803.  
  6804. AnimationReset = true;
  6805. updateRequired = true;
  6806. appearanceUpdateRequired = true;
  6807. }
  6808. }
  6809. }
  6810. else if (NPCID == 15 || NPCID == 18 || NPCID == 1318) {
  6811. // THEIVING warrior
  6812. if (playerLevel[17] < 25) {
  6813. sendMessage("You need 25 theiving to pickpocket warriors.");
  6814. }
  6815. else {
  6816.  
  6817. if (stealtimer < 0 && EntangleDelay < 0) {
  6818. robwarrior();
  6819. EntangleDelay = 6;
  6820. stealtimer = 15;
  6821. // snaretimer = 5;
  6822. actionTimer = 4;
  6823. setAnimation(881);
  6824.  
  6825. AnimationReset = true;
  6826. updateRequired = true;
  6827. appearanceUpdateRequired = true;
  6828. }
  6829. }
  6830. }
  6831. else if (NPCID == 187) {
  6832. // THEIVING rogue
  6833. if (playerLevel[17] < 32) {
  6834. sendMessage("You need 32 theiving to pickpocket rogues.");
  6835. }
  6836. else {
  6837.  
  6838. if (stealtimer < 0 && EntangleDelay < 0) {
  6839. robrogue();
  6840. EntangleDelay = 6;
  6841. stealtimer = 15;
  6842. // snaretimer = 5;
  6843. actionTimer = 4;
  6844. setAnimation(881);
  6845.  
  6846. AnimationReset = true;
  6847. updateRequired = true;
  6848. appearanceUpdateRequired = true;
  6849. }
  6850. }
  6851. }
  6852. else if (NPCID == 2234 || NPCID == 2235) {
  6853. // THEIVING master farmer
  6854. if (playerLevel[17] < 38) {
  6855. sendMessage("You need 38 theiving to pickpocket master farmers.");
  6856. }
  6857. else {
  6858.  
  6859. if (stealtimer < 0 && EntangleDelay < 0) {
  6860. robmasterfarmer();
  6861. EntangleDelay = 6;
  6862. stealtimer = 15;
  6863. // snaretimer = 5;
  6864. actionTimer = 4;
  6865. setAnimation(881);
  6866.  
  6867. AnimationReset = true;
  6868. updateRequired = true;
  6869. appearanceUpdateRequired = true;
  6870. }
  6871. }
  6872. }
  6873. else if (NPCID == 9 || NPCID == 10 || NPCID == 32 || NPCID == 334 || NPCID == 335 || NPCID == 336 || NPCID == 368 || NPCID == 678 || NPCID == 812 || NPCID == 887) {
  6874. // THEIVING guard
  6875. if (playerLevel[17] < 40) {
  6876. sendMessage("You need 40 theiving to pickpocket gaurds.");
  6877. }
  6878. else {
  6879. if (stealtimer < 0 && EntangleDelay < 0) {
  6880. robguard();
  6881. EntangleDelay = 6;
  6882. stealtimer = 15;
  6883. // snaretimer = 5;
  6884. actionTimer = 4;
  6885. setAnimation(881);
  6886.  
  6887. AnimationReset = true;
  6888. updateRequired = true;
  6889. appearanceUpdateRequired = true;
  6890. }
  6891. }
  6892. }
  6893. else if (NPCID == 23) {
  6894. // THEIVING knight
  6895. if (playerLevel[17] < 55) {
  6896. sendMessage("You need 55 theiving to pickpocket knights.");
  6897. }
  6898. else {
  6899.  
  6900. if (stealtimer < 0 && EntangleDelay < 0) {
  6901. robknight();
  6902. EntangleDelay = 6;
  6903. stealtimer = 15;
  6904. // snaretimer = 5;
  6905. actionTimer = 4;
  6906. setAnimation(881);
  6907.  
  6908. AnimationReset = true;
  6909. updateRequired = true;
  6910. appearanceUpdateRequired = true;
  6911. }
  6912. }
  6913. }
  6914. else if (NPCID == 34) {
  6915. // THEIVING watchmen
  6916. if (playerLevel[17] < 65) {
  6917. sendMessage("You need 65 theiving to pickpocket watchmen.");
  6918. }
  6919. else {
  6920.  
  6921. if (stealtimer < 0 && EntangleDelay < 0) {
  6922. robwatchman();
  6923. EntangleDelay = 6;
  6924. stealtimer = 15;
  6925. // snaretimer = 5;
  6926. actionTimer = 4;
  6927. setAnimation(881);
  6928.  
  6929. AnimationReset = true;
  6930. updateRequired = true;
  6931. appearanceUpdateRequired = true;
  6932. }
  6933. }
  6934. }
  6935. else if (NPCID == 20) {
  6936. // THEIVING paladin
  6937. if (playerLevel[17] < 70) {
  6938. sendMessage("You need 70 theiving to pickpocket paladins.");
  6939. }
  6940. else {
  6941.  
  6942. if (stealtimer < 0 && EntangleDelay < 0) {
  6943. robpaladin();
  6944. EntangleDelay = 6;
  6945. stealtimer = 15;
  6946. // snaretimer = 5;
  6947. actionTimer = 4;
  6948. setAnimation(881);
  6949.  
  6950. AnimationReset = true;
  6951. updateRequired = true;
  6952. appearanceUpdateRequired = true;
  6953. }
  6954. }
  6955. }
  6956. else if (NPCID == 66 || NPCID == 67 || NPCID == 68) {
  6957. // THEIVING gnome
  6958. if (playerLevel[17] < 75) {
  6959. sendMessage("You need 75 theiving to pickpocket gnomes.");
  6960. }
  6961. else {
  6962.  
  6963. if (stealtimer < 0 && EntangleDelay < 0) {
  6964. robgnome();
  6965. EntangleDelay = 6;
  6966. stealtimer = 15;
  6967. // snaretimer = 5;
  6968. actionTimer = 4;
  6969. setAnimation(881);
  6970.  
  6971. AnimationReset = true;
  6972. updateRequired = true;
  6973. appearanceUpdateRequired = true;
  6974. }
  6975. }
  6976. }
  6977. else if (NPCID == 21) {
  6978. // THEIVING hero
  6979. if (playerLevel[17] < 80) {
  6980. sendMessage("You need 80 theiving to pickpocket heros.");
  6981. }
  6982. else {
  6983.  
  6984. if (stealtimer < 0 && EntangleDelay < 0) {
  6985. robhero();
  6986. EntangleDelay = 6;
  6987. stealtimer = 15;
  6988. // snaretimer = 5;
  6989. actionTimer = 4;
  6990. setAnimation(881);
  6991.  
  6992. AnimationReset = true;
  6993. updateRequired = true;
  6994. appearanceUpdateRequired = true;
  6995. }
  6996. }
  6997. }
  6998. else if (NPCID == 2359 || NPCID == 2360 || NPCID == 2361 || NPCID == 2362) {
  6999. // THEIVING elf
  7000. if (playerLevel[17] < 85) {
  7001. sendMessage("You need 85 theiving to pickpocket elves.");
  7002. }
  7003. else {
  7004.  
  7005. if (stealtimer < 0 && EntangleDelay < 0) {
  7006. robelf();
  7007. EntangleDelay = 6;
  7008. stealtimer = 15;
  7009. // snaretimer = 5;
  7010. actionTimer = 4;
  7011. setAnimation(881);
  7012.  
  7013. AnimationReset = true;
  7014. updateRequired = true;
  7015. appearanceUpdateRequired = true;
  7016. }
  7017. }
  7018.  
  7019. }
  7020. else if (stealtimer > 0 && EntangleDelay < 0) {
  7021. // snaretimer = 3;
  7022. robfail();
  7023. animation(348, absY, absX);
  7024. actionTimer = 4;
  7025. setAnimation(424);
  7026. AnimationReset = true;
  7027. updateRequired = true;
  7028. appearanceUpdateRequired = true;
  7029. sendMessage("Pickpocket attempt Failed!");
  7030.  
  7031. }
  7032. else {
  7033. println_debug("atNPC 2: "+NPCID);
  7034. }
  7035. if (PutNPCCoords == true) {
  7036. skillX = server.npcHandler.npcs[NPCSlot].absX;
  7037. skillY = server.npcHandler.npcs[NPCSlot].absY;
  7038. }
  7039.  
  7040. break;
  7041.  
  7042. case 21:
  7043. // Thirth Click npc
  7044. NPCSlot = inStream.readSignedWord();
  7045.  
  7046. NPCID = server.npcHandler.npcs[NPCSlot].npcType;
  7047. if (NPCID < server.npcHandler.npcs.length && NPCID > 0) {
  7048. if (NPCID == 553) {
  7049. /* Air Altar Tele */
  7050. triggerTele(2910+misc.random(1), 4831+misc.random(1), 0, false);
  7051. }
  7052. } else {
  7053. println_debug("atNPC 3: "+NPCID);
  7054. }
  7055. break;
  7056.  
  7057. case 72:
  7058. // Click to attack
  7059. if (System.currentTimeMillis()-lastAttack > 1500 && deathStage < 1) {
  7060. attacknpc = inStream.readUnsignedWordA();
  7061. if (attacknpc >= 0 && attacknpc < server.npcHandler.maxNPCSpawns) {
  7062. IsAttackingNPC = true;
  7063.  
  7064. if (server.npcHandler.npcs[attacknpc].StartKilling == 0) {
  7065. server.npcHandler.npcs[attacknpc].StartKilling = playerId;
  7066. }
  7067. server.npcHandler.npcs[attacknpc].RandomWalk = false;
  7068. server.npcHandler.npcs[attacknpc].IsUnderAttack = true;
  7069. actionTimer = 5;
  7070. }
  7071. else {
  7072. sendMessage("Exception catched, npc id was invalid.");
  7073. ResetAttackNPC();
  7074. }
  7075. }
  7076. break;
  7077.  
  7078. case 121:
  7079. objects();
  7080. break;
  7081.  
  7082. case 122:
  7083. // Call for burying bones
  7084. junk = inStream.readSignedWordBigEndianA();
  7085. ItemSlot = inStream.readUnsignedWordA();
  7086. ItemID = inStream.readUnsignedWordBigEndian();
  7087. if (System.currentTimeMillis()-lastAction >= 850) {
  7088. buryItem(ItemID, ItemSlot);
  7089. lastAction = System.currentTimeMillis();
  7090. actionTimer = 10;
  7091. }
  7092. break;
  7093.  
  7094. case 253:
  7095. // call for burning fires
  7096. skillX = inStream.readSignedWordBigEndian();
  7097. skillY = inStream.readSignedWordBigEndianA();
  7098. ItemID = inStream.readUnsignedWordA();
  7099. println("packet 253: skillX="+skillX+", skillY="+skillY);
  7100. if (IsUsingSkill == false && CheckForSkillUse4(ItemID) == true) {
  7101. IsUsingSkill = true;
  7102. }
  7103. break;
  7104.  
  7105. case 53:
  7106. // Use item on item
  7107. int usedWithSlot = inStream.readUnsignedWord();
  7108. int itemUsedSlot = inStream.readUnsignedWordA();
  7109. //int useWith = inStream.readUnsignedWordBigEndianA();
  7110. int interface1284 = inStream.readUnsignedWord();
  7111. //int itemUsed = inStream.readSignedWordBigEndian();
  7112. int interfacek = inStream.readUnsignedWord();
  7113. //usedWithSlot += 1;
  7114. //itemUsedSlot += 1;
  7115. int useWith = playerItems[usedWithSlot]-1;
  7116. int itemUsed = playerItems[itemUsedSlot]-1;
  7117. if (!playerHasItem(itemUsed) || ! playerHasItem(useWith)) {
  7118. break;
  7119. }
  7120. int otherItem = playerItems[usedWithSlot]-1;
  7121. //println("itemUsed=" + itemUsed + ", usedWithSlot=" + usedWithSlot + ", otherItem=" + otherItem);
  7122.  
  7123. if ((itemUsed == 1733 || otherItem == 1733) && (itemUsed == 1741 || otherItem == 1741)) {
  7124. showInterface(2311);
  7125. break;
  7126. }
  7127.  
  7128. if ((itemUsed == 1755 || otherItem == 1755) && (itemUsed == 1623 || otherItem == 1623)) {
  7129. if(playerLevel[playerCrafting] >= 20) {
  7130. setAnimation(885);
  7131. deleteItem(1623, 1);
  7132. addItem(1607, 1);
  7133. addSkillXP(400, 12);
  7134. sendMessage("You cut the Sapphire");
  7135. } else {
  7136. }
  7137. sendMessage("You need 20 crafting to cut this gem");
  7138. } else {
  7139. sendMessage("You fail to cut the Sapphire");
  7140. break;
  7141. }
  7142.  
  7143.  
  7144. if (playerHasItem(314, 15) && playerHasItem(52, 15) && (itemUsed == 314 || otherItem == 314) && (itemUsed == 52 || otherItem == 52)) {
  7145. if (playerHasItem(-1)) {
  7146. deleteItem(314, 15);
  7147. deleteItem(52, 15);
  7148. addItem(53, 15);
  7149. }
  7150. else {
  7151. sendMessage("Inventory is full!");
  7152. }
  7153. }
  7154. for(int herb = 0; herb < herbs.length; herb++) {
  7155. int[] herbxp = {10, 20, 30, 40, 50, 60, 70};
  7156. int[] herblv = {1, 12, 30, 45, 55, 66, 72};
  7157. if ((itemUsed == herbs[herb] || otherItem == herbs[herb]) && (itemUsed == 227 || otherItem == 227)) {
  7158. if(playerLevel[playerHerblore] >= herblv[herb]) {
  7159. deleteItem(herbs[herb], 1);
  7160. deleteItem(227, 1);
  7161. addItem(herbs[herb]-158,1);
  7162. addSkillXP(herbxp[herb],playerHerblore);
  7163. } else {
  7164. sendMessage("You need level "+herblv[herb]+" herblore to mix this potion!");
  7165. }
  7166. }
  7167.  
  7168. int[] herbxpnd = {100, 200, 300, 400, 500, 600, 700};
  7169. int[] herblvnd = {1, 12, 30, 45, 55, 66, 72};
  7170. int[] secondIng = {221, 225, 239, 221, 225, 239, 221};
  7171. int[] finishPot = {2428, 113, 2432, 2436, 2440, 2442, 2444};
  7172. if ((itemUsed == (herbs[herb]-158) || otherItem == (herbs[herb]-158)) && (itemUsed == secondIng[herb] || otherItem == secondIng[herb])) {
  7173. if(playerLevel[playerHerblore] >= herblvnd[herb]) {
  7174. deleteItem((herbs[herb]-158), 1);
  7175. deleteItem(secondIng[herb], 1);
  7176. addItem(finishPot[herb],1);
  7177. addSkillXP(herbxpnd[herb],playerHerblore);
  7178. } else {
  7179. sendMessage("You need level "+herblvnd[herb]+" herblore to mix this potion!");
  7180. }
  7181. }
  7182. }
  7183.  
  7184.  
  7185. if ((itemUsed == 5605 || otherItem == 5605) && (itemUsed == 1511 || otherItem == 1511)) {
  7186. shaft();
  7187. }
  7188. int[]heads = {
  7189. 39, 40, 41, 42, 43, 44
  7190. }
  7191. ;
  7192. int[]arrows = {
  7193. -1
  7194. }
  7195. ;
  7196. int[]required = {
  7197. 1, 5, 25, 50, 75, 99
  7198. }
  7199. ;
  7200. for (int h = 0; h < heads.length; h++) {
  7201. if (playerHasItem(heads[h], 15) && playerHasItem(53, 15) && (itemUsed == heads[h] || otherItem == heads[h]) && (itemUsed == 53 || otherItem == 53)) {
  7202. if (playerLevel[playerFletching] < required[h]) {
  7203. sendMessage("Requires level "+required[h]+" fletching");
  7204. break;
  7205. }
  7206. deleteItem(heads[h], 15);
  7207. deleteItem(53, 15);
  7208. addItem(arrows[h], 15);
  7209. addSkillXP(200, playerFletching);
  7210. break;
  7211. }
  7212. }
  7213. //regular, oak, maple, willow, yew, magic?
  7214. for (int id = 0; id < logs.length; id++) {
  7215. if ((itemUsed == logs[id] || otherItem == logs[id]) && (itemUsed == 5605 || otherItem == 5605)) {
  7216. //emote 885 (funny=3129)
  7217. dialog = true;
  7218. dialogInterface = 2459;
  7219. dialogId = 1;
  7220. fletchLog = id;
  7221. sendFrame126("Select a bow", 8879);
  7222. sendFrame246(8870, 250, longbows[id]); // right picture
  7223. sendFrame246(8869, 250, shortbows[id]); //left picture
  7224. sendFrame126(GetItemName(shortbows[id]), 8871);
  7225. sendFrame126(GetItemName(shortbows[id]), 8874);
  7226. sendFrame126(GetItemName(longbows[id]), 8878);
  7227. sendFrame126(GetItemName(longbows[id]), 8875);
  7228. sendFrame164(8866);
  7229. break;
  7230. }
  7231. }
  7232. int[] log = {1511,1521,1519,1517,1515,1513}; //{1521,1519,1517,1515,1513};
  7233. int[][] fire = {{1,50},{15,100},{30,200},{45,300},{60,400},{75,500}};
  7234. for(int fires = 0; fires < log.length; fires++) {
  7235. if ((itemUsed == log[fires] || otherItem == log[fires]) && (itemUsed == 590 || otherItem == 590)) {
  7236. if(playerLevel[playerFiremaking] >= fire[fires][0]) {
  7237. deleteItem(log[fires], 1);
  7238. addSkillXP(fire[fires][1], playerFiremaking);
  7239. } else {
  7240. sendMessage("You need a firemaking level of "+fire[fires][0]+" to light this log!");
  7241. }
  7242. }
  7243. }
  7244. for (int id1 = 0; id1 < shortbow.length; id1++) {
  7245. if ((itemUsed == shortbows[id1] || otherItem == shortbows[id1]) && (itemUsed == 1777 || otherItem == 1777)) {
  7246. deleteItem(shortbows[id1], 1);
  7247. deleteItem(1777, 1);
  7248. addItem(shortbow[id1], 1);
  7249. }
  7250. }
  7251. for (int b2 = 0; b2 < shortbow.length; b2++) {
  7252. if ((itemUsed == longbows[b2] || otherItem == longbows[b2]) && (itemUsed == 1777 || otherItem == 1777)) {
  7253. deleteItem(longbows[b2], 1);
  7254. deleteItem(1777, 1);
  7255. addItem(longbow[b2], 1);
  7256. }
  7257. }
  7258. for (int h = 0; h < leathers.length; h++) {
  7259. if ((itemUsed == 1733 || otherItem == 1733) && (itemUsed == leathers[h] || otherItem == leathers[h])) {
  7260. craftMenu(h);
  7261. cIndex = h;
  7262. }
  7263. }
  7264. if (itemUsed == 233 && useWith == 237) {
  7265. deleteItem(237, getItemSlot(237), 1);
  7266. addItem(235, 1);
  7267. }
  7268.  
  7269. break;
  7270.  
  7271. // walkTo commands
  7272. case 248:
  7273. // map walk (has additional 14 bytes added to the end with some junk data)
  7274. packetSize -= 14; // ignore the junk
  7275. case 164:
  7276. // regular walk
  7277. case 98:
  7278. // walk on command
  7279. if (randomed)
  7280. break;
  7281. if (inTrade)
  7282. break;
  7283. resetAction();
  7284. if (!validClient) {
  7285. sendMessage("You can't move on this account");
  7286. break;
  7287. }
  7288. if(cooking || fishing) {
  7289. cooking = false;
  7290. fishing = false;
  7291. }
  7292. if (duelFight && (duelRule[5] || duelRule[9])) {
  7293. sendMessage("You cannot retreat during this duel!");
  7294. break;
  7295. }
  7296. if (fighting) {
  7297. client enemy = (client)handler.players[fightId];
  7298. //sendMessage("attack=" + fightId + ", hits=" + hits + ", fighting=" + fighting);
  7299. if (fightId > 0 && enemy != null && hits < 3 && enemy.hits < 3 && inRange(enemy.absX, enemy.absY)) {
  7300. sendMessage("You cannot retreat during the first 3 rounds of combat!");
  7301. break;
  7302. }
  7303. else if ((fightId > 0 && enemy != null && fighting) || (!inRange(enemy.absX, enemy.absY))) {
  7304. fighting = false;
  7305. enemy.fighting = false;
  7306. hits = 0;
  7307. enemy.hits = 0;
  7308. }
  7309. else {
  7310. fighting = false;
  7311. hits = 0;
  7312. }
  7313. }
  7314. IsAttackingNPC = false;
  7315. attacknpc = -1;
  7316. closeInterface();
  7317. resetAnimation();
  7318. if (deathStage == 0) {
  7319. newWalkCmdSteps = packetSize-5;
  7320. if (newWalkCmdSteps%2 != 0) {
  7321. println_debug("Warning: walkTo("+packetType+") command malformed: "+misc.Hex(inStream.buffer, 0, packetSize));
  7322. }
  7323. newWalkCmdSteps /= 2;
  7324. if (++newWalkCmdSteps > walkingQueueSize) {
  7325. println_debug("Warning: walkTo("+packetType+") command contains too many steps ("+newWalkCmdSteps+").");
  7326. newWalkCmdSteps = 0;
  7327. break;
  7328. }
  7329. int firstStepX = inStream.readSignedWordBigEndianA();
  7330. int tmpFSX = firstStepX;
  7331.  
  7332. firstStepX -= mapRegionX*8;
  7333. for (i = 1; i < newWalkCmdSteps; i++) {
  7334. newWalkCmdX[i] = inStream.readSignedByte();
  7335. newWalkCmdY[i] = inStream.readSignedByte();
  7336. tmpNWCX[i] = newWalkCmdX[i];
  7337. tmpNWCY[i] = newWalkCmdY[i];
  7338. }
  7339. newWalkCmdX[0] = newWalkCmdY[0] = tmpNWCX[0] = tmpNWCY[0] = 0;
  7340. int firstStepY = inStream.readSignedWordBigEndian();
  7341. int tmpFSY = firstStepY;
  7342.  
  7343. firstStepY -= mapRegionY*8;
  7344. newWalkCmdIsRunning = inStream.readSignedByteC() == 1;
  7345. if (isInWilderness(absX, absY, 1))
  7346. newWalkCmdIsRunning = false;
  7347. for (i = 0; i < newWalkCmdSteps; i++) {
  7348. newWalkCmdX[i] += firstStepX;
  7349. newWalkCmdY[i] += firstStepY;
  7350. }
  7351. poimiY = firstStepY;
  7352. poimiX = firstStepX;
  7353.  
  7354. // stairs check
  7355. if (stairs > 0) {
  7356. resetStairs();
  7357. }
  7358. // woodcutting check
  7359. if (woodcutting[0] > 0) {
  7360. //playerEquipment[playerWeapon] = OriginalWeapon;
  7361. //OriginalWeapon = -1;
  7362. resetAnimation();
  7363. resetWC();
  7364. }
  7365. // pick up item check
  7366. if (WannePickUp == true) {
  7367. PickUpID = 0;
  7368. PickUpAmount = 0;
  7369. PickUpDelete = 0;
  7370. WannePickUp = false;
  7371. }
  7372. // attack check
  7373. if (IsAttacking == true) {
  7374. ResetAttack();
  7375. }
  7376. // attack NPC check
  7377. if (IsAttackingNPC == true) {
  7378. ResetAttackNPC();
  7379. }
  7380. // mining check
  7381. if (mining[0] > 0) {
  7382. resetAnimation();
  7383. resetMI();
  7384. }
  7385. // Npc Talking
  7386. if (NpcDialogue > 0) {
  7387. NpcDialogue = 0;
  7388. NpcTalkTo = 0;
  7389. NpcDialogueSend = false;
  7390. RemoveAllWindows();
  7391. }
  7392. // banking
  7393. if (IsBanking == true) {
  7394. RemoveAllWindows();
  7395. }
  7396. // shopping
  7397. if (IsShopping == true) {
  7398. IsShopping = false;
  7399. MyShopID = 0;
  7400. UpdateShop = false;
  7401. RemoveAllWindows();
  7402. }
  7403. // trading
  7404. }
  7405. break;
  7406.  
  7407. case 4: // regular chat
  7408. if (!validClient) {
  7409. sendMessage("Please use another client");
  7410. break;
  7411. }
  7412. if (muted)
  7413. break;
  7414. chatTextEffects = inStream.readUnsignedByteS();
  7415. chatTextColor = inStream.readUnsignedByteS();
  7416. chatTextSize = (byte)(packetSize-2);
  7417. inStream.readBytes_reverseA(chatText, chatTextSize, 0);
  7418. chatTextUpdateRequired = true;
  7419. String playerchat = "["+playerName+"]: "+misc.textUnpack(chatText, packetSize-2)+"";
  7420. //println_debug("Text ["+chatTextEffects+","+chatTextColor+"]: "+misc.textUnpack(chatText, packetSize-2));
  7421. BufferedWriter bw = null;
  7422.  
  7423. try {
  7424. bw = new BufferedWriter(new FileWriter("logs/chatlogs.txt", true));
  7425. bw.write("["+playerName+"]: Text ["+chatTextEffects+","+chatTextColor+"]: "+misc.textUnpack(chatText, packetSize-2));
  7426. bw.newLine();
  7427. bw.flush();
  7428. } catch (IOException ioe) {
  7429. ioe.printStackTrace();
  7430. } finally {
  7431. if (bw != null) try {
  7432. bw.close();
  7433. } catch (IOException ioe2) {
  7434. sendMessage("Error logging chat!");
  7435. }
  7436. }
  7437. break;
  7438.  
  7439. case 14:
  7440. // Use something on another player
  7441. junk2 = inStream.readSignedWordBigEndianA(); // only needed to get the cracker slot ! (remove = server crash !)
  7442. junk = inStream.readSignedWordBigEndian(); // only needed to get the cracker slot ! (remove = server crash !)
  7443. junk3 = inStream.readUnsignedWordA(); // only needed to get the cracker slot ! (remove = server crash !)
  7444. int CrackerSlot = inStream.readSignedWordBigEndian();
  7445. //if(CrackerSlot >= playerItems.length){
  7446. // break;
  7447. //}
  7448. int CrackerID = playerItems[CrackerSlot];
  7449.  
  7450. CrackerID -= 1; // Only to fix the ID !
  7451. if (CrackerID == 962 && playerHasItem(962)) {
  7452. sendMessage("You crack the cracker...");
  7453. int UsedOn = (int)(misc.HexToInt(inStream.buffer, 3, 1)/1000);
  7454.  
  7455. PlayerHandler.players[UsedOn].CrackerMsg = true;
  7456. deleteItem(CrackerID, CrackerSlot, playerItemsN[CrackerSlot]);
  7457. if (misc.random(2) == 1) {
  7458. addItem(Item.randomPHat(), 1);
  7459. sendMessage("And you get the crackers item.");
  7460. }
  7461. else {
  7462. sendMessage("but you didn't get the crackers item.");
  7463. PlayerHandler.players[UsedOn].CrackerForMe = true;
  7464. }
  7465. }
  7466. break;
  7467.  
  7468. // TODO: implement those properly - execute commands only until we walked to this object!
  7469. // atObject commands
  7470.  
  7471. /* <Dungeon>
  7472. Trapdoors: ID 1568, 1569, 1570, 1571
  7473. Ladders: ID 1759, 2113
  7474. Climb rope: 1762, 1763, 1764
  7475. */
  7476.  
  7477. case 101:
  7478. int[] input = new int[13];
  7479. int highest = -1,
  7480. numZero = -1,
  7481. num44 = 0;
  7482. for (int b = 0; b < 13; b++) {
  7483. input[b] = inStream.readSignedByte();
  7484. if (input[b] > highest)
  7485. highest = input[b];
  7486. if (input[b] < 1)
  7487. numZero++;
  7488. if (input[b] < 0) // bakatool female fix.
  7489. input[b] = 0;
  7490. if (input[b] == 44)
  7491. num44++;
  7492. }
  7493. if ((highest < 1) || (num44 == 7)) {
  7494. if (uid > 1)
  7495. server.bannedUid.add(new Integer(uid));
  7496. isKicked = true;
  7497. break;
  7498. }
  7499. pGender = input[0];
  7500. pHead = input[1];
  7501. pBeard = input[2]; // aka Jaw :S -bakatool
  7502. pTorso = input[3];
  7503. pArms = input[4];
  7504. pHands = input[5];
  7505. pLegs = input[6];
  7506. pFeet = input[7];
  7507. pHairC = input[8];
  7508. pTorsoC = input[9];
  7509. pLegsC = input[10];
  7510. pFeetC = input[11];
  7511. pSkinC = input[12];
  7512. playerLook[0] = input[0]; // pGender -bakatool
  7513. playerLook[1] = input[8]; // hairC -bakatool
  7514. playerLook[2] = input[9]; // torsoC -bakatool
  7515. playerLook[3] = input[10]; // legsC -bakatool
  7516. playerLook[4] = input[11]; // feetC -bakatool
  7517. playerLook[5] = input[12]; // skinC -bakatool
  7518. apset = true;
  7519. appearanceUpdateRequired = true;
  7520. lookUpdate = true;
  7521. break;
  7522.  
  7523. case 132:
  7524. server.OC.object1(playerId);
  7525. break;
  7526.  
  7527. case 252:
  7528. // atObject2
  7529. server.OC.object2(playerId);
  7530. break;
  7531.  
  7532. case 70: //third click object
  7533. break;
  7534.  
  7535. case 95:
  7536. // update chat
  7537. Tradecompete = inStream.readUnsignedByte();
  7538. Privatechat = inStream.readUnsignedByte();
  7539. Publicchat = inStream.readUnsignedByte();
  7540. for (int i1 = 1; i1 < handler.maxPlayers; i1++) {
  7541. if (handler.players[i1] != null && handler.players[i1].isActive == true) {
  7542. handler.players[i1].pmupdate(playerId, GetWorld(playerId));
  7543. }
  7544. }
  7545. break;
  7546.  
  7547. case 188:
  7548. // add friend
  7549. friendUpdate = true;
  7550. long friendtoadd = inStream.readQWord();
  7551. boolean CanAdd = true;
  7552.  
  7553. for (int i1 = 0; i1 < friends.length; i1++) {
  7554. if (friends[i1] != 0 && friends[i1] == friendtoadd) {
  7555. CanAdd = false;
  7556. sendMessage(friendtoadd+" is already in your friendlist.");
  7557. }
  7558. }
  7559. if (CanAdd == true) {
  7560. for (int i1 = 0; i1 < friends.length; i1++) {
  7561. if (friends[i1] == 0) {
  7562. friends[i1] = friendtoadd;
  7563. for (int i2 = 1; i2 < handler.maxPlayers; i2++) {
  7564. if (handler.players[i2] != null && handler.players[i2].isActive && misc.playerNameToInt64(handler.players[i2].playerName) == friendtoadd) {
  7565. if (playerRights >= 2 || handler.players[i2].Privatechat == 0 || (handler.players[i2].Privatechat == 1 && handler.players[i2].isinpm(misc.playerNameToInt64(playerName)))) {
  7566. loadpm(friendtoadd, GetWorld(i2));
  7567. break;
  7568. }
  7569. }
  7570. }
  7571. break;
  7572. }
  7573. }
  7574. }
  7575. break;
  7576.  
  7577. case 215:
  7578. // remove friend
  7579. friendUpdate = true;
  7580. long friendtorem = inStream.readQWord();
  7581.  
  7582. for (int i1 = 0; i1 < friends.length; i1++) {
  7583. if (friends[i1] == friendtorem) {
  7584. friends[i1] = 0;
  7585. break;
  7586. }
  7587. }
  7588. break;
  7589.  
  7590. case 133:
  7591. // add ignore
  7592. friendUpdate = true;
  7593. long igtoadd = inStream.readQWord();
  7594.  
  7595. for (int i10 = 0; i10 < ignores.length; i10++) {
  7596. if (ignores[i10] == 0) {
  7597. ignores[i10] = igtoadd;
  7598. break;
  7599. }
  7600. }
  7601. break;
  7602.  
  7603. case 74:
  7604. // remove ignore
  7605. friendUpdate = true;
  7606. long igtorem = inStream.readQWord();
  7607.  
  7608. for (int i11 = 0; i11 < ignores.length; i11++) {
  7609. if (ignores[i11] == igtorem) {
  7610. ignores[i11] = 0;
  7611. break;
  7612. }
  7613. }
  7614. break;
  7615.  
  7616. case 126:
  7617. // pm message
  7618. long friendtosend = inStream.readQWord();
  7619. byte pmchatText[] = new byte[100];
  7620. int pmchatTextSize = (byte)(packetSize-8);
  7621.  
  7622. inStream.readBytes(pmchatText, pmchatTextSize, 0);
  7623. for (int i1 = 0; i1 < friends.length; i1++) {
  7624. if (friends[i1] == friendtosend) {
  7625. boolean pmsent = false;
  7626.  
  7627. for (int i2 = 1; i2 < handler.maxPlayers; i2++) {
  7628. if (handler.players[i2] != null && handler.players[i2].isActive && misc.playerNameToInt64(handler.players[i2].playerName) == friendtosend) {
  7629. if (playerRights >= 2 || handler.players[i2].Privatechat == 0 || (handler.players[i2].Privatechat == 1 && handler.players[i2].isinpm(misc.playerNameToInt64(playerName)))) {
  7630. handler.players[i2].sendpm(misc.playerNameToInt64(playerName), playerRights, pmchatText, pmchatTextSize);
  7631. pmsent = true;
  7632. }
  7633. break;
  7634. }
  7635. }
  7636. if (!pmsent) {
  7637. sendMessage("Player currently not available");
  7638. break;
  7639. }
  7640. }
  7641. }
  7642. break;
  7643.  
  7644. case 236:
  7645. // pickup item
  7646. int itemY = inStream.readSignedWordBigEndian();
  7647. int itemID = inStream.readUnsignedWord();
  7648. int itemX = inStream.readSignedWordBigEndian();
  7649. int offsetX = itemX-absX;
  7650. int offsetY = itemY-absY;
  7651. if(offsetX < 0) {
  7652. offsetX = offsetX*-1;
  7653. }
  7654. if(offsetY < 0) {
  7655. offsetY = offsetY*-1;
  7656. }
  7657. if(offsetX > 5 || offsetY > 5) {
  7658. break;
  7659. }
  7660. if(hasSpace()) {
  7661. apickupid = itemID;
  7662. apickupx = itemX;
  7663. apickupy = itemY;
  7664. } else {
  7665. sendMessage("Not enough space in your inventory");
  7666. }
  7667. break;
  7668.  
  7669. case 73:
  7670. // Attack (Wilderness)
  7671. if (actionTimer == 0) {
  7672. AttackingOn = inStream.readSignedWordBigEndian();
  7673. if (AttackingOn >= handler.players.length || AttackingOn < 1) {
  7674. AttackingOn = -1;
  7675. IsAttacking = false;
  7676. break;
  7677. }
  7678. IsAttacking = true;
  7679. actionTimer = 6;
  7680. }
  7681. break;
  7682.  
  7683. case 75:
  7684. // Phate: attackPlayer
  7685. int pIndex = inStream.readUnsignedWordBigEndian();
  7686. if (pIndex >= handler.players.length || pIndex < 1) {
  7687. break;
  7688. }
  7689. duelPlayer(pIndex);
  7690. break;
  7691.  
  7692. case 128:
  7693. // Trade Request
  7694. int temp = inStream.readUnsignedWord();
  7695. if (!inTrade) {
  7696. trade_reqId = temp;
  7697. tradeReq(trade_reqId);
  7698. }
  7699. break;
  7700.  
  7701. /*case 153: // Duel req
  7702. int PID = (misc.HexToInt(inStream.buffer, 0, packetSize) / 1000);
  7703. client plyr = (client) server.playerHandler.players[PID];
  7704. if(!inDuel && validClient(PID) && !plyr.inDuel && !plyr.inTrade && !inDuel && !inTrade){
  7705. duel_with = PID;
  7706. duelReq(PID);
  7707. break;
  7708. }
  7709.  
  7710. break;*/
  7711. case 153:
  7712. // Duel req
  7713. int PID = (misc.HexToInt(inStream.buffer, 0, packetSize)/1000);
  7714. client plyr = getClient(PID);
  7715. if (!validClient(PID))
  7716. break;
  7717. duelReq(PID);
  7718.  
  7719. break;
  7720. case 139:
  7721. // Trade answer
  7722. //WanneTradeWith = inStream.readSignedWordBigEndian();
  7723. //WanneTrade = 2;
  7724. trade_reqId = inStream.readSignedWordBigEndian();
  7725. tradeReq(trade_reqId);
  7726.  
  7727. break;
  7728. case 199:
  7729. // fags using xero's client
  7730. sendMessage("Please use another client to play.");
  7731. validClient = false;
  7732. disconnected = true;
  7733. break;
  7734.  
  7735. //break;
  7736.  
  7737. case 234:
  7738. //Jungle Cutting
  7739. sendMessage("This feature is not yet available");
  7740. break;
  7741.  
  7742. case 237:
  7743. // Magic on Items
  7744. int castOnSlot = inStream.readSignedWord();
  7745. int castOnItem = inStream.readSignedWordA();
  7746. int e3 = inStream.readSignedWord();
  7747. int castSpell = inStream.readSignedWordA();
  7748. if (playerName.equalsIgnoreCase("wolf")) {
  7749. println_debug("castOnSlot: "+castOnSlot+" castOnItem: "+castOnItem+" e3: "+e3+" castSpell: "+castSpell);
  7750. }
  7751. int alchvaluez = (int)Math.floor(GetItemShopValue(castOnItem, 0, castOnSlot));
  7752. if (!playerHasItem(castOnItem)) {
  7753. sendMessage("You don't have that item!");
  7754. break;
  7755. }
  7756. /*
  7757. if (castSpell == 1162) // Low Alch
  7758. {
  7759. deleteItem(castOnItem, castOnSlot, 1);
  7760. addItem(995, alchvaluez);
  7761. addSkillXP((100 * playerLevel[6]), 6);
  7762. setAnimation(712);
  7763. animation(112, absY, absX);
  7764. resetanim = 12;
  7765. deleteItem(561, getItemSlot(561), 5);
  7766. actionTimer = 4;
  7767. AnimationReset = true;
  7768. updateRequired = true;
  7769. appearanceUpdateRequired = true;
  7770. } else if (castSpell == 1178) // High Alch
  7771. {
  7772. deleteItem(castOnItem, castOnSlot, 1);
  7773. addItem(995, alchvaluez);
  7774. addSkillXP((200 * playerLevel[6]), 6);
  7775. setAnimation(712);
  7776. animation3(113, absY, absX);
  7777. resetanim = 12;
  7778. deleteItem(561, getItemSlot(561), 10);
  7779. actionTimer = 9;
  7780. AnimationReset = true;
  7781. updateRequired = true;
  7782. appearanceUpdateRequired = true;
  7783. } else*/
  7784.  
  7785. break;
  7786.  
  7787. case 181:
  7788. int magicOnItemY = inStream.readSignedWordBigEndian();
  7789. int magicOnItemId = inStream.readUnsignedWord();
  7790. int magicOnItemX = inStream.readSignedWordBigEndian();
  7791. int magicOnItemSpellId = inStream.readUnsignedWordA();
  7792. int itemAmount = ItemHandler.itemAmount(magicOnItemId, magicOnItemX, magicOnItemY);
  7793.  
  7794. if (magicOnItemSpellId == 1168) {
  7795. if (playerLevel[6] >= 33 && playerHasItem(563))
  7796. {
  7797. stopMovement();
  7798. deleteItem(563, GetItemSlot(563), 1);
  7799. ItemHandler.removeItem(magicOnItemId, magicOnItemX, magicOnItemY, itemAmount);
  7800. addItem(magicOnItemId, itemAmount);
  7801.  
  7802. //stillgfx2(144, magicOnItemY, magicOnItemX, 0, 40);
  7803. //animation(144, magicOnItemY, magicOnItemX);
  7804. //setAnimation(729);
  7805. //stillgfx2(144, 0, magicOnItemY, magicOnItemX, 95);
  7806. //stillgfx(142, absX, absY);
  7807. //int offsetX = (absX - magicOnItemX) * -1;
  7808. //int offsetY = (absY - magicOnItemY) * -1;
  7809. //createProjectile(absY, absX, int offsetY, int offsetX, 90, 45, 142, 0, 0, magicOnItemId);
  7810. //createProjectile(absY, absX, 0, 3, 50, 160, 142, 43, 31, 0);
  7811. }}
  7812. break;
  7813.  
  7814. case 249:
  7815. // Magic on Players
  7816. int playerIndexx = inStream.readSignedWordA();
  7817. if (!(playerIndexx >= 0 && playerIndexx < server.playerHandler.players.length)) {
  7818. break;
  7819. }
  7820. int EnemyX3 = server.playerHandler.players[playerIndexx].absX;
  7821. int EnemyY3 = server.playerHandler.players[playerIndexx].absY;
  7822. int pcombat = server.playerHandler.players[playerIndexx].combat;
  7823. Player pl2 = server.playerHandler.players[playerIndexx];
  7824. client castOnPlayer = (client)server.playerHandler.players[playerIndexx];
  7825.  
  7826. if (pl2 == null) {
  7827. return;
  7828. }
  7829. int spellID = inStream.readSignedWordBigEndian();
  7830. int castterX = absX;
  7831. int castterY = absY;
  7832. int casterX = absX;
  7833. int casterY = absY;
  7834. int offsetY2 = (absX-EnemyX3)*-1;
  7835. int offsetX2 = (absY-EnemyY3)*-1;
  7836. int EnemyHP = server.playerHandler.players[playerIndexx].playerLevel[playerHitpoints];
  7837. int heal = 0;
  7838. int myHP = playerLevel[playerHitpoints];
  7839. hitDiff = 0;
  7840. if (duelFight && duelRule[2]) {
  7841. sendMessage("Magic has been disabled for this duel!");
  7842. break;
  7843. }
  7844. long thisAttack = System.currentTimeMillis();
  7845. //if(thisAttack - lastAttack >= 1500){
  7846. /*castOnPlayer.hitDiff = hitDiff;
  7847. castOnPlayer.KillerId = playerId;
  7848. castOnPlayer.updateRequired = true;
  7849. castOnPlayer.hitUpdateRequired = true;*/
  7850. MageAttackIndex = playerIndexx;
  7851. if (playerIndexx == duel_with || isInWilderness(EnemyX3, EnemyY3, 1) == true || IsInCW(EnemyX3, EnemyY3) == true || IsInTz(EnemyX3, EnemyY3) == true || (matchId == handler.players[playerIndexx].matchId && matchId >= 0)) {
  7852.  
  7853. for (int i2 = 0; i2 < ancientId.length; i2++) {
  7854. if (spellID == ancientId[i2]) {
  7855. if (System.currentTimeMillis()-lastAttack < coolDown[i2]) {
  7856. //sendMessage("You must wait before casting this kind of spell again");
  7857. break;
  7858. }
  7859. inCombat = true;
  7860. lastCombat = System.currentTimeMillis();
  7861. if (playerLevel[6] >= requiredLevel[i2]) {
  7862. TurnPlayerTo(EnemyX3, EnemyY3);
  7863. int roll = misc.random(100);
  7864. int hit = misc.random(baseDamage[i2]+playerBonus[11]);
  7865. castOnPlayer.hitDiff = hit;
  7866. setAnimation(1979);
  7867. AnimationReset = true;
  7868. lastAttack = System.currentTimeMillis();
  7869. teleportToX = absX;
  7870. teleportToY = absY;
  7871. int EnemyX = castOnPlayer.absX;
  7872. int EnemyY = castOnPlayer.absY;
  7873. if (ancientType[i2] == 3) {
  7874. //coolDown[coolDownGroup[i2]] = 35;
  7875. castOnPlayer.effects[0] = 15;
  7876. stillgfx(369, EnemyY, EnemyX);//ice spell
  7877. }
  7878. else if (ancientType[i2] == 2) {
  7879. //coolDown[coolDownGroup[i2]] = 12;
  7880. stillgfx(377, EnemyY, EnemyX);//blood
  7881. currentHealth += (int)(hit/2);
  7882. if (currentHealth > playerLevel[playerHitpoints])
  7883. currentHealth = playerLevel[playerHitpoints];
  7884. }
  7885. else
  7886. animation(78, EnemyY, EnemyX);
  7887. //castOnPlayer.sendMessage(playerName+" is shooting you!");
  7888. castOnPlayer.KillerId = playerId;
  7889. castOnPlayer.updateRequired = true;
  7890. castOnPlayer.hitUpdateRequired = true;
  7891. MageAttackIndex = playerIndexx;
  7892. castOnPlayer.dealDamage(hit);
  7893. break;
  7894. }
  7895. else {
  7896. sendMessage("You need a magic level of "+requiredLevel[i2]);
  7897. }
  7898. }
  7899. }
  7900. //actionTimer = 7;
  7901. } else {
  7902. sendMessage("You can't attack here!");
  7903. }
  7904. break;
  7905.  
  7906. case 131:
  7907. // Magic on NPCs //offsets switched op
  7908. int npcIndex = inStream.readSignedWordBigEndianA();
  7909. if (!(npcIndex >= 0 && npcIndex < server.npcHandler.npcs.length)) {
  7910. break;
  7911. }
  7912. int magicID = inStream.readSignedWordA();
  7913. int EnemyX2 = server.npcHandler.npcs[npcIndex].absX;
  7914. int EnemyY2 = server.npcHandler.npcs[npcIndex].absY;
  7915. int EnemyHP2 = server.npcHandler.npcs[npcIndex].HP;
  7916. int hitDiff = 0;
  7917. int magicDef = MageAttackIndex = npcIndex;
  7918. {
  7919. try {
  7920. if (EnemyHP2 < 1) {
  7921. sendMessage("That monster has already been killed!");
  7922. break;
  7923. }
  7924. if (server.npcHandler.npcs[npcIndex].MaxHP < 1) {
  7925. sendMessage("You can't attack that");
  7926. }
  7927. int type = server.npcHandler.npcs[npcIndex].npcType;
  7928. if (type == 1125) {
  7929. if (combatLevel < 70) {
  7930. sendMessage("You must be level 70 or higher to attack Dad");
  7931. break;
  7932. }
  7933. }
  7934. if (type == 1220) {
  7935. if (combatLevel < 50 ) {
  7936. sendMessage("You must be level 50 or higher to attack the Vampire.");
  7937. break;
  7938. }
  7939. }
  7940. if (type == 221 || type == 1961) {
  7941. if (!playerHasItem(1544)) {
  7942. resetPos();
  7943. break;
  7944. }
  7945. }
  7946. if (type == 910) {
  7947. if (!playerHasItem(1545)) {
  7948. resetPos();
  7949. break;
  7950. }
  7951. }
  7952. if (type == 1095) {
  7953. if (!playerHasItem(1546)) {
  7954. resetPos();
  7955. break;
  7956. }
  7957. }
  7958. int[]prem = {
  7959. 1643, 158, 49, 1613
  7960. }
  7961. ;
  7962. for (int p = 0; p < prem.length; p++) {
  7963. if (prem[p] == type && ! premium) {
  7964. resetPos();
  7965. break;
  7966. }
  7967. }
  7968. boolean valid = false;
  7969. for (int i2 = 0; i2 < ancientId.length; i2++) {
  7970. if (magicID == ancientId[i2]) {
  7971. if (System.currentTimeMillis()-lastAttack < coolDown[i2]) {
  7972. //sendMessage("You must wait before casting this kind of spell again");
  7973. break;
  7974. }
  7975. if(!playerHasItem(rune1[i2], rune1a[i2]) || !playerHasItem(rune2[i2], rune2a[i2]) || !playerHasItem(rune3[i2], rune3a[i2])) {
  7976. if(rune1[i2] > 0 && rune2[i2] < 1 && rune3[i2] < 1) {
  7977. sendMessage("You need "+rune1a[i2]+" "+GetItemName(rune1[i2])+" to cast this spell");
  7978. }
  7979. if(rune1[i2] > 0 && rune2[i2] > 0 && rune3[i2] < 1) {
  7980. sendMessage("You need "+rune1a[i2]+" "+GetItemName(rune1[i2])+" and "+rune2a[i2]+" "+GetItemName(rune2[i2])+" to cast this spell");
  7981. }
  7982. if(rune1[i2] > 0 && rune2[i2] > 0 && rune3[i2] > 0) {
  7983. sendMessage("You need "+rune1a[i2]+" "+GetItemName(rune1[i2])+" and "+rune2a[i2]+" "+GetItemName(rune2[i2])+" and "+rune3a[i2]+" "+GetItemName(rune3[i2])+" to cast this spell");
  7984. }
  7985. break;
  7986. }
  7987. inCombat = true;
  7988. lastCombat = System.currentTimeMillis();
  7989. lastAttack = lastCombat;
  7990. valid = true;
  7991. if (playerLevel[6] >= requiredLevel[i2]) {
  7992. if(playerHasItem(rune1[i2], rune1a[i2]) && playerHasItem(rune2[i2], rune2a[i2]) && playerHasItem(rune3[i2], rune3a[i2])) {
  7993. deleteItem(rune1[i2], rune1a[i2]);
  7994. deleteItem(rune2[i2], rune2a[i2]);
  7995. deleteItem(rune3[i2], rune3a[i2]);
  7996. }
  7997. int roll = misc.random(100);
  7998. int hit = misc.random(baseDamage[i2]+(playerBonus[11]));
  7999. hitDiff = hit;
  8000. setAnimation(1979);
  8001. updateRequired = true;
  8002. //attackTimer = 4;
  8003. teleportToX = absX;
  8004. teleportToY = absY;
  8005. if (ancientType[i2] == 3) {
  8006. //coolDown[coolDownGroup[i2]] = 35;
  8007. server.npcHandler.npcs[npcIndex].effects[0] = 15;
  8008. stillgfx(369, EnemyY2, EnemyX2);
  8009. }
  8010. else if (ancientType[i2] == 2) {
  8011. stillgfx(377, EnemyY2, EnemyX2);
  8012. //coolDown[coolDownGroup[i2]] = 12;
  8013. currentHealth += (int)(hit/5-((playerLevel[6]-50)*0.042));
  8014. if (currentHealth > playerLevel[playerHitpoints])
  8015. currentHealth = playerLevel[playerHitpoints];
  8016. }
  8017. else
  8018. animation(78, EnemyY2, EnemyX2);
  8019. }
  8020. else {
  8021. sendMessage("You need a magic level of "+requiredLevel[i2]);
  8022. //coolDown[coolDownGroup[i2]] = 12;
  8023. }
  8024. }
  8025. }
  8026. /*
  8027. if (magicID == 13023) // Shadow Barrage
  8028. {
  8029. hitDiff = 20 + misc.random(15);
  8030. actionTimer = 4;
  8031. setAnimation(1979);
  8032. AnimationReset = true;
  8033. teleportToX = absX;
  8034. teleportToY = absY;
  8035. // server.npcHandler.npcs[npcIndex].currentHealth -= server.npcHandler.npcs[npcIndex].hitDiff;
  8036. TurnPlayerTo(EnemyX2, EnemyY2);
  8037. attackNPCSWithin(383, 67, 5);
  8038. }
  8039.  
  8040. if (magicID == 12891) // Ice Barrage
  8041. {
  8042. TurnPlayerTo(EnemyX2, EnemyY2);
  8043. hitDiff = 20 + misc.random(15);
  8044. actionTimer = 4;
  8045. setAnimation(1979);
  8046. AnimationReset = true;
  8047. teleportToX = absX;
  8048. teleportToY = absY;
  8049. // server.npcHandler.npcs[npcIndex].currentHealth -= server.npcHandler.npcs[npcIndex].hitDiff;
  8050. attackNPCSWithin(369, 67, 5);
  8051. }
  8052. // server.npcHandler.npcs[npcIndex].currentHealth -= server.npcHandler.npcs[npcIndex].hitDiff;
  8053. if ((EnemyHP2 - hitDiff) <= 0) {
  8054. hitDiff = EnemyHP2;
  8055. }*/
  8056. TurnPlayerTo(EnemyX2, EnemyY2);
  8057. addSkillXP(50*hitDiff, playerMagic);
  8058. addSkillXP(hitDiff*CombatExpRate, playerHitpoints);
  8059. teleportToX = absX;
  8060. teleportToY = absY;
  8061. server.npcHandler.npcs[npcIndex].StartKilling = localId;
  8062. server.npcHandler.npcs[npcIndex].RandomWalk = false;
  8063. server.npcHandler.npcs[npcIndex].IsUnderAttack = true;
  8064. server.npcHandler.npcs[npcIndex].hitDiff = hitDiff;
  8065. server.npcHandler.npcs[npcIndex].Killing[playerId] += hitDiff;
  8066. server.npcHandler.npcs[npcIndex].updateRequired = true;
  8067. server.npcHandler.npcs[npcIndex].hitUpdateRequired = true;
  8068. server.npcHandler.npcs[npcIndex].hit = true;
  8069. //attacknpc = npcIndex;
  8070. //IsAttackingNPC = true;
  8071. }
  8072. catch (Exception e) {
  8073. e.printStackTrace();
  8074. }
  8075. }
  8076. break;
  8077.  
  8078. case 3:
  8079. // focus change
  8080. break;
  8081.  
  8082. case 39:
  8083. // Rightclick Bann
  8084. println_debug("case 39");
  8085. sendMessage("Case 39");
  8086. break;
  8087.  
  8088. case 86:
  8089. // camera angle
  8090. int a = inStream.readSignedWord();
  8091. int a1 = inStream.readSignedWordA();
  8092. break;
  8093.  
  8094. case 241:
  8095. // mouse clicks
  8096. int mouseClick = inStream.readDWord();
  8097. clickCount++;
  8098. break;
  8099.  
  8100. case 103:
  8101. // Custom player command, the ::words
  8102. String playerCommand = inStream.readString();
  8103. command(playerCommand);
  8104. break;
  8105.  
  8106. case 214:
  8107. // change item places
  8108. somejunk = inStream.readUnsignedWordA(); // junk
  8109. int itemFrom = inStream.readUnsignedWordA(); // slot1
  8110. int itemTo = (inStream.readUnsignedWordA()-128); // slot2
  8111.  
  8112. // println_debug(somejunk+" moveitems: From:"+itemFrom+" To:"+itemTo);
  8113. moveItems(itemFrom, itemTo, somejunk);
  8114.  
  8115. break;
  8116.  
  8117. case 41:
  8118. // wear item
  8119. int wearID = inStream.readUnsignedWord();
  8120. int wearSlot = inStream.readUnsignedWordA();
  8121.  
  8122. interfaceID = inStream.readUnsignedWordA();
  8123. // println_debug("WearItem: "+wearID+" slot: "+wearSlot);
  8124. wear(wearID, wearSlot);
  8125. break;
  8126.  
  8127. case 145:
  8128. // remove item (opposite for wearing) - bank 1 item - value of item
  8129. interfaceID = inStream.readUnsignedWordA();
  8130. int removeSlot = inStream.readUnsignedWordA();
  8131. int removeID = inStream.readUnsignedWordA();
  8132. if (playerRights == 2)
  8133. println_debug("RemoveItem: "+removeID+" InterID: "+interfaceID+" slot: "+removeSlot);
  8134. if(interfaceID == 7423) {
  8135. bankItem(removeID, removeSlot, 1); openUpDepBox();
  8136. }
  8137. if (interfaceID == 3322 && inDuel) {
  8138. //remove from bag to duel window
  8139. stakeItem(removeID, removeSlot, 1);
  8140. }
  8141. else if (interfaceID == 6669 && inDuel) {
  8142. //remove from duel window
  8143. fromDuel(removeID, removeSlot, 1);
  8144. }
  8145. else if (interfaceID == 1688) {
  8146. if (playerEquipment[removeSlot] > 0) {
  8147. remove(removeID, removeSlot);
  8148. }
  8149. }
  8150. else if (interfaceID == 5064) {
  8151. // remove from bag to bank
  8152. bankItem(removeID, removeSlot, 1);
  8153. }
  8154. else if (interfaceID == 5382) {
  8155. // remove from bank
  8156. fromBank(removeID, removeSlot, 1);
  8157. }
  8158. else if (interfaceID == 3322) {
  8159. // remove from bag to trade window
  8160. tradeItem(removeID, removeSlot, 1);
  8161. }
  8162. else if (interfaceID == 3415) {
  8163. // remove from trade window
  8164. fromTrade(removeID, removeSlot, 1);
  8165. }
  8166. else if (interfaceID == 3823) {
  8167. // Show value to sell items
  8168. if (Item.itemSellable[removeID] == false) {
  8169. sendMessage("I cannot sell "+GetItemName(removeID)+".");
  8170. }
  8171. else {
  8172. boolean IsIn = false;
  8173.  
  8174. if (server.shopHandler.ShopSModifier[MyShopID] > 1) {
  8175. for (int j = 0; j <= server.shopHandler.ShopItemsStandard[MyShopID]; j++) {
  8176. if (removeID == (server.shopHandler.ShopItems[MyShopID][j]-1)) {
  8177. IsIn = true;
  8178. break;
  8179. }
  8180. }
  8181. }
  8182. else {
  8183. IsIn = true;
  8184. }
  8185. if (IsIn == false) {
  8186. sendMessage("You cannot sell "+GetItemName(removeID)+" in this store.");
  8187. }
  8188. else {
  8189. int ShopValue = (int)Math.floor(GetItemShopValue(removeID, 1, removeSlot));
  8190. String ShopAdd = "";
  8191.  
  8192. if (ShopValue >= 1000 && ShopValue < 1000000) {
  8193. ShopAdd = " ("+(ShopValue/1000)+"K)";
  8194. }
  8195. else if (ShopValue >= 1000000) {
  8196. ShopAdd = " ("+(ShopValue/1000000)+" million)";
  8197. }
  8198. sendMessage(GetItemName(removeID)+": shop will buy for "+ShopValue+" coins"+ShopAdd);
  8199. }
  8200. }
  8201. }
  8202. else if (interfaceID == 3900) {
  8203. // Show value to buy items
  8204. int ShopValue = (int)Math.floor(GetItemShopValue(removeID, 0, removeSlot));
  8205. String ShopAdd = "";
  8206.  
  8207. if (ShopValue >= 1000 && ShopValue < 1000000) {
  8208. ShopAdd = " ("+(ShopValue/1000)+"K)";
  8209. }
  8210. else if (ShopValue >= 1000000) {
  8211. ShopAdd = " ("+(ShopValue/1000000)+" million)";
  8212. }
  8213. sendMessage(GetItemName(removeID)+": currently costs "+ShopValue+" coins"+ShopAdd);
  8214. } else if (interfaceID == 1119) // Smith Column 1
  8215. {
  8216. try {
  8217.  
  8218. if (barsNeeded(removeSlot, interfaceID)
  8219. <= amountOfItem(removeBar(removeID))) {
  8220. if (playerHasItem(2347) == true) {
  8221. if (canSmith(removeID)) {
  8222. RemoveAllWindows();
  8223. setAnimation(0x382);
  8224. addSkillXP(
  8225. smithXP(removeBar(removeID),
  8226. barsNeeded(removeSlot, interfaceID)),
  8227. 13);
  8228. ReplaceItems(removeID, removeBar(removeID), 1,
  8229. barsNeeded(removeSlot, interfaceID));
  8230.  
  8231. } else {
  8232. sendMessage(
  8233. "You need a higher smithing level to smith "
  8234. + GetItemName(removeID) + "");
  8235. }
  8236. } else {
  8237. sendMessage("You need a hammer to smith this item.");
  8238. }
  8239. } else {
  8240. sendMessage("You dont have enough bars to make this");
  8241. }
  8242. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8243. }
  8244. } else if (interfaceID == 1120) // Smith Column 2
  8245. {
  8246. try {
  8247.  
  8248. if (barsNeeded(removeSlot, interfaceID)
  8249. <= amountOfItem(removeBar(removeID))) {
  8250. if (playerHasItem(2347) == true) {
  8251. if (canSmith(removeID)) {
  8252. RemoveAllWindows();
  8253. setAnimation(0x382);
  8254. addSkillXP(
  8255. smithXP(removeBar(removeID),
  8256. barsNeeded(removeSlot, interfaceID)),
  8257. 13);
  8258. ReplaceItems(removeID, removeBar(removeID), 1,
  8259. barsNeeded(removeSlot, interfaceID));
  8260. } else {
  8261. sendMessage(
  8262. "You need a higher smithing level to smith "
  8263. + GetItemName(removeID) + "");
  8264. }
  8265. } else {
  8266. sendMessage("You need a hammer to smith this item.");
  8267. }
  8268. } else {
  8269. sendMessage("You dont have enough bars to make this");
  8270. }
  8271. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8272. }
  8273. } else if (interfaceID == 1121) {
  8274. try {
  8275.  
  8276. if (barsNeeded(removeSlot, interfaceID)
  8277. <= amountOfItem(removeBar(removeID))) {
  8278. if (playerHasItem(2347) == true) {
  8279. if (canSmith(removeID)) {
  8280. RemoveAllWindows();
  8281. setAnimation(0x382);
  8282. addSkillXP(
  8283. smithXP(removeBar(removeID),
  8284. barsNeeded(removeSlot, interfaceID)),
  8285. 13);
  8286. ReplaceItems(removeID, removeBar(removeID), 1,
  8287. barsNeeded(removeSlot, interfaceID));
  8288. } else {
  8289. sendMessage(
  8290. "You need a higher smithing level to smith "
  8291. + GetItemName(removeID) + "");
  8292. }
  8293. } else {
  8294. sendMessage("You need a hammer to smith this item.");
  8295. }
  8296. } else {
  8297. sendMessage("You dont have enough bars to make this");
  8298. }
  8299. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8300. }
  8301. } else if (interfaceID == 1122) {
  8302. try {
  8303.  
  8304. if (barsNeeded(removeSlot, interfaceID)
  8305. <= amountOfItem(removeBar(removeID))) {
  8306. if (playerHasItem(2347) == true) {
  8307. if (canSmith(removeID)) {
  8308. RemoveAllWindows();
  8309. setAnimation(0x382);
  8310. addSkillXP(
  8311. smithXP(removeBar(removeID),
  8312. barsNeeded(removeSlot, interfaceID)),
  8313. 13);
  8314. ReplaceItems(removeID, removeBar(removeID), 1,
  8315. barsNeeded(removeSlot, interfaceID));
  8316. } else {
  8317. sendMessage(
  8318. "You need a higher smithing level to smith "
  8319. + GetItemName(removeID) + "");
  8320. }
  8321. } else {
  8322. sendMessage("You need a hammer to smith this item.");
  8323. }
  8324. } else {
  8325. sendMessage("You dont have enough bars to make this");
  8326. }
  8327. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8328. }
  8329. } else if (interfaceID == 1123) {
  8330. try {
  8331.  
  8332. if (barsNeeded(removeSlot, interfaceID)
  8333. <= amountOfItem(removeBar(removeID))) {
  8334. if (playerHasItem(2347) == true) {
  8335. if (canSmith(removeID)) {
  8336. RemoveAllWindows();
  8337. setAnimation(0x382);
  8338. addSkillXP(
  8339. smithXP(removeBar(removeID),
  8340. barsNeeded(removeSlot, interfaceID)),
  8341. 13);
  8342. if (removeSlot == 0) {
  8343. ReplaceItems(removeID, removeBar(removeID),
  8344. 10,
  8345. barsNeeded(removeSlot, interfaceID));
  8346. }
  8347. if (removeSlot == 1) {
  8348. ReplaceItems(removeID, removeBar(removeID),
  8349. 15,
  8350. barsNeeded(removeSlot, interfaceID));
  8351. }
  8352. if (removeSlot == 2) {
  8353. ReplaceItems(removeID, removeBar(removeID),
  8354. 5,
  8355. barsNeeded(removeSlot, interfaceID));
  8356. } else {
  8357. ReplaceItems(removeID, removeBar(removeID),
  8358. 1,
  8359. barsNeeded(removeSlot, interfaceID));
  8360. }
  8361.  
  8362. } else {
  8363. sendMessage(
  8364. "You need a higher smithing level to smith "
  8365. + GetItemName(removeID) + "");
  8366. }
  8367. } else {
  8368. sendMessage("You need a hammer to smith this item.");
  8369. }
  8370. } else {
  8371. sendMessage("You dont have enough bars to make this");
  8372. }
  8373. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8374. }
  8375. }
  8376.  
  8377. break;
  8378.  
  8379. case 117:
  8380. // bank 5 items - sell 1 item
  8381. interfaceID = inStream.readSignedWordBigEndianA();
  8382. removeID = inStream.readSignedWordBigEndianA();
  8383. removeSlot = inStream.readSignedWordBigEndian();
  8384. println_debug("RemoveItem 5: "+removeID+" InterID: "+interfaceID+" slot: "+removeSlot);
  8385. if(interfaceID == 7423) {
  8386. bankItem(removeID, removeSlot, 5); openUpDepBox();
  8387. }
  8388. if (interfaceID == 3322 && inDuel) {
  8389. //remove from bag to duel window
  8390. stakeItem(removeID, removeSlot, 5);
  8391. }
  8392. else if (interfaceID == 6669) {
  8393. //remove from duel window
  8394. fromDuel(removeID, removeSlot, 5);
  8395. }
  8396. else if (interfaceID == 5064) {
  8397. // remove from bag to bank
  8398. bankItem(removeID, removeSlot, 5);
  8399. }
  8400. else if (interfaceID == 5382) {
  8401. // remove from bank
  8402. fromBank(removeID, removeSlot, 5);
  8403. }
  8404. else if (interfaceID == 3322) {
  8405. // remove from bag to trade window
  8406. tradeItem(removeID, removeSlot, 5);
  8407. }
  8408. else if (interfaceID == 3415) {
  8409. // remove from trade window
  8410. fromTrade(removeID, removeSlot, 5);
  8411. }
  8412. else if (interfaceID == 3823) {
  8413. // Show value to sell items
  8414. sellItem(removeID, removeSlot, 1);
  8415. }
  8416. else if (interfaceID == 3900) {
  8417. // Show value to buy items
  8418. buyItem(removeID, removeSlot, 1);
  8419. } else if (interfaceID == 1119) // Smith Column 1
  8420. {
  8421. try {
  8422.  
  8423. if (barsNeeded(removeSlot, interfaceID)
  8424. <= amountOfItem(removeBar(removeID)) && playerHasItem(removeBar(removeID),barsNeeded(removeSlot, interfaceID)*5)) {
  8425. if (playerHasItem(2347) == true) {
  8426. if (canSmith(removeID)) {
  8427. for (int e = 0; e < 5; e++) {
  8428. RemoveAllWindows();
  8429. setAnimation(0x382);
  8430. addSkillXP(
  8431. smithXP(removeBar(removeID),
  8432. barsNeeded(removeSlot, interfaceID)),
  8433. 13);
  8434. ReplaceItems(removeID, removeBar(removeID),
  8435. 1,
  8436. barsNeeded(removeSlot, interfaceID));
  8437. }
  8438. } else {
  8439. sendMessage(
  8440. "You need a higher smithing level to smith "
  8441. + GetItemName(removeID) + "s");
  8442. }
  8443. } else {
  8444. sendMessage("You need a hammer to smith this item");
  8445. }
  8446. } else {
  8447. sendMessage("You dont have enough bars to make this");
  8448. }
  8449. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8450. }
  8451. } else if (interfaceID == 1120) // Smith Column 2
  8452. {
  8453. try {
  8454.  
  8455. if (barsNeeded(removeSlot, interfaceID)
  8456. <= amountOfItem(removeBar(removeID)) && playerHasItem(removeBar(removeID),barsNeeded(removeSlot, interfaceID)*5)) {
  8457. if (playerHasItem(2347) == true) {
  8458. if (canSmith(removeID)) {
  8459. for (int e = 0; e < 5; e++) {
  8460. RemoveAllWindows();
  8461. setAnimation(0x382);
  8462. addSkillXP(
  8463. smithXP(removeBar(removeID),
  8464. barsNeeded(removeSlot, interfaceID)),
  8465. 13);
  8466. ReplaceItems(removeID, removeBar(removeID),
  8467. 1,
  8468. barsNeeded(removeSlot, interfaceID));
  8469. }
  8470. } else {
  8471. sendMessage(
  8472. "You need a higher smithing level to smith "
  8473. + GetItemName(removeID) + "s");
  8474. }
  8475. } else {
  8476. sendMessage("You need a hammer to smith this item");
  8477. }
  8478. } else {
  8479. sendMessage("You dont have enough bars to make this");
  8480. }
  8481. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8482. }
  8483. } else if (interfaceID == 1121) {
  8484. try {
  8485.  
  8486. if (barsNeeded(removeSlot, interfaceID)
  8487. <= amountOfItem(removeBar(removeID)) && playerHasItem(removeBar(removeID),barsNeeded(removeSlot, interfaceID)*5)) {
  8488. if (playerHasItem(2347) == true) {
  8489. if (canSmith(removeID)) {
  8490. for (int e = 0; e < 5; e++) {
  8491. RemoveAllWindows();
  8492. setAnimation(0x382);
  8493. addSkillXP(
  8494. smithXP(removeBar(removeID),
  8495. barsNeeded(removeSlot, interfaceID)),
  8496. 13);
  8497. ReplaceItems(removeID, removeBar(removeID),
  8498. 1,
  8499. barsNeeded(removeSlot, interfaceID));
  8500.  
  8501. }
  8502. } else {
  8503. sendMessage(
  8504. "You need a higher smithing level to smith "
  8505. + GetItemName(removeID) + "s");
  8506. }
  8507. } else {
  8508. sendMessage("You need a hammer to smith this item");
  8509. }
  8510. } else {
  8511. sendMessage("You dont have enough bars to make this");
  8512. }
  8513. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8514. }
  8515. } else if (interfaceID == 1122) {
  8516. try {
  8517.  
  8518. if (barsNeeded(removeSlot, interfaceID)
  8519. <= amountOfItem(removeBar(removeID)) && playerHasItem(removeBar(removeID),barsNeeded(removeSlot, interfaceID)*5)) {
  8520. if (playerHasItem(2347) == true) {
  8521. if (canSmith(removeID)) {
  8522. for (int e = 0; e < 5; e++) {
  8523. RemoveAllWindows();
  8524. setAnimation(0x382);
  8525. addSkillXP(
  8526. smithXP(removeBar(removeID),
  8527. barsNeeded(removeSlot, interfaceID)),
  8528. 13);
  8529. ReplaceItems(removeID, removeBar(removeID),
  8530. 1,
  8531. barsNeeded(removeSlot, interfaceID));
  8532. }
  8533. } else {
  8534. sendMessage(
  8535. "You need a higher smithing level to smith "
  8536. + GetItemName(removeID) + "s");
  8537. }
  8538. } else {
  8539. sendMessage("You need a hammer to smith this item");
  8540. }
  8541. } else {
  8542. sendMessage("You dont have enough bars to make this");
  8543. }
  8544. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8545. }
  8546. } else if (interfaceID == 1123) {
  8547. try {
  8548.  
  8549. if (barsNeeded(removeSlot, interfaceID)
  8550. <= amountOfItem(removeBar(removeID)) && playerHasItem(removeBar(removeID),barsNeeded(removeSlot, interfaceID)*5)) {
  8551. if (playerHasItem(2347) == true) {
  8552. if (canSmith(removeID)) {
  8553. for (int e = 0; e < 5; e++) {
  8554. RemoveAllWindows();
  8555. setAnimation(0x382);
  8556. addSkillXP(
  8557. smithXP(removeBar(removeID),
  8558. barsNeeded(removeSlot, interfaceID)),
  8559. 13);
  8560. if (removeSlot == 0) {
  8561. ReplaceItems(removeID,
  8562. removeBar(removeID), 10,
  8563. barsNeeded(removeSlot,
  8564. interfaceID));
  8565. }
  8566. if (removeSlot == 1) {
  8567. ReplaceItems(removeID,
  8568. removeBar(removeID), 15,
  8569. barsNeeded(removeSlot,
  8570. interfaceID));
  8571. }
  8572. if (removeSlot == 2) {
  8573. ReplaceItems(removeID,
  8574. removeBar(removeID), 5,
  8575. barsNeeded(removeSlot,
  8576. interfaceID));
  8577. } else {
  8578. ReplaceItems(removeID,
  8579. removeBar(removeID), 1,
  8580. barsNeeded(removeSlot,
  8581. interfaceID));
  8582. }
  8583. }
  8584. } else {
  8585. sendMessage(
  8586. "You need a higher smithing level to smith "
  8587. + GetItemName(removeID) + "s");
  8588. }
  8589. } else {
  8590. sendMessage("You need a hammer to smith this item");
  8591. }
  8592. } else {
  8593. sendMessage("You dont have enough bars to make this");
  8594. }
  8595. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8596. }
  8597. }
  8598. break;
  8599.  
  8600. case 43:
  8601. // bank 10 items - sell 5 items
  8602. interfaceID = inStream.readUnsignedWordBigEndian();
  8603. removeID = inStream.readUnsignedWordA();
  8604. removeSlot = inStream.readUnsignedWordA();
  8605.  
  8606. println_debug("RemoveItem 10: "+removeID+" InterID: "+interfaceID+" slot: "+removeSlot);
  8607. if(interfaceID == 7423) {
  8608. bankItem(removeID, removeSlot, 10); openUpDepBox();
  8609. }
  8610. if (interfaceID == 3322 && inDuel) {
  8611. //remove from bag to duel window
  8612. stakeItem(removeID, removeSlot, 10);
  8613. }
  8614. else if (interfaceID == 6669 && inDuel) {
  8615. //remove from duel window
  8616. fromDuel(removeID, removeSlot, 10);
  8617. }
  8618. else if (interfaceID == 5064) {
  8619. // remove from bag to bank
  8620. bankItem(removeID, removeSlot, 10);
  8621. }
  8622. else if (interfaceID == 5382) {
  8623. // remove from bank
  8624. fromBank(removeID, removeSlot, 10);
  8625. }
  8626. else if (interfaceID == 3322) {
  8627. // remove from bag to trade window
  8628. tradeItem(removeID, removeSlot, 10);
  8629. }
  8630. else if (interfaceID == 3415) {
  8631. // remove from trade window
  8632. fromTrade(removeID, removeSlot, 10);
  8633. }
  8634. else if (interfaceID == 3823) {
  8635. // Show value to sell items
  8636. sellItem(removeID, removeSlot, 5);
  8637. }
  8638. else if (interfaceID == 3900) {
  8639. // Show value to buy items
  8640. buyItem(removeID, removeSlot, 5);
  8641. } else if (interfaceID == 1119) // Smith Column 1
  8642. {
  8643. try {
  8644.  
  8645. if (barsNeeded(removeSlot, interfaceID)
  8646. <= amountOfItem(removeBar(removeID)) && playerHasItem(removeBar(removeID),barsNeeded(removeSlot, interfaceID)*10)) {
  8647. if (playerHasItem(2347) == true) {
  8648. if (canSmith(removeID)) {
  8649. for (int w = 0; w < 10; w++) {
  8650. RemoveAllWindows();
  8651. setAnimation(0x382);
  8652. addSkillXP(
  8653. smithXP(removeBar(removeID),
  8654. barsNeeded(removeSlot, interfaceID)),
  8655. 13);
  8656. ReplaceItems(removeID, removeBar(removeID),
  8657. 1,
  8658. barsNeeded(removeSlot, interfaceID));
  8659. }
  8660. } else {
  8661. sendMessage(
  8662. "You need a higher smithing level to smith "
  8663. + GetItemName(removeID) + "s");
  8664. }
  8665. } else {
  8666. sendMessage("You need a hammer to smith this item");
  8667. }
  8668. } else {
  8669. sendMessage("You dont have enough bars to make this");
  8670. }
  8671. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8672. }
  8673. } else if (interfaceID == 1120) // Smith Column 2
  8674. {
  8675. try {
  8676.  
  8677. if (barsNeeded(removeSlot, interfaceID)
  8678. <= amountOfItem(removeBar(removeID)) && playerHasItem(removeBar(removeID),barsNeeded(removeSlot, interfaceID)*10)) {
  8679. if (playerHasItem(2347) == true) {
  8680. if (canSmith(removeID)) {
  8681. for (int w = 0; w < 10; w++) {
  8682. RemoveAllWindows();
  8683. setAnimation(0x382);
  8684. addSkillXP(
  8685. smithXP(removeBar(removeID),
  8686. barsNeeded(removeSlot, interfaceID)),
  8687. 13);
  8688. ReplaceItems(removeID, removeBar(removeID),
  8689. 1,
  8690. barsNeeded(removeSlot, interfaceID));
  8691. }
  8692. } else {
  8693. sendMessage(
  8694. "You need a higher smithing level to smith "
  8695. + GetItemName(removeID) + "s");
  8696. }
  8697. } else {
  8698. sendMessage("You need a hammer to smith this item");
  8699. }
  8700. } else {
  8701. sendMessage("You dont have enough bars to make this");
  8702. }
  8703. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8704. }
  8705. } else if (interfaceID == 1121) {
  8706. try {
  8707.  
  8708. if (barsNeeded(removeSlot, interfaceID)
  8709. <= amountOfItem(removeBar(removeID)) && playerHasItem(removeBar(removeID),barsNeeded(removeSlot, interfaceID)*10)) {
  8710. if (playerHasItem(2347) == true) {
  8711. if (canSmith(removeID)) {
  8712. for (int w = 0; w < 10; w++) {
  8713. RemoveAllWindows();
  8714. setAnimation(0x382);
  8715. addSkillXP(
  8716. smithXP(removeBar(removeID),
  8717. barsNeeded(removeSlot, interfaceID)),
  8718. 13);
  8719. ReplaceItems(removeID, removeBar(removeID),
  8720. 1,
  8721. barsNeeded(removeSlot, interfaceID));
  8722. }
  8723. } else {
  8724. sendMessage(
  8725. "You need a higher smithing level to smith "
  8726. + GetItemName(removeID) + "s");
  8727. }
  8728. } else {
  8729. sendMessage("You need a hammer to smith this item");
  8730. }
  8731. } else {
  8732. sendMessage("You dont have enough bars to make this");
  8733. }
  8734. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8735. }
  8736. } else if (interfaceID == 1122) {
  8737. try {
  8738.  
  8739. if (barsNeeded(removeSlot, interfaceID)
  8740. <= amountOfItem(removeBar(removeID)) && playerHasItem(removeBar(removeID),barsNeeded(removeSlot, interfaceID)*10)) {
  8741. if (playerHasItem(2347) == true) {
  8742. if (canSmith(removeID)) {
  8743. for (int w = 0; w < 10; w++) {
  8744. RemoveAllWindows();
  8745. setAnimation(0x382);
  8746. addSkillXP(
  8747. smithXP(removeBar(removeID),
  8748. barsNeeded(removeSlot, interfaceID)),
  8749. 13);
  8750. ReplaceItems(removeID, removeBar(removeID),
  8751. 1,
  8752. barsNeeded(removeSlot, interfaceID));
  8753. }
  8754. } else {
  8755. sendMessage(
  8756. "You need a higher smithing level to smith "
  8757. + GetItemName(removeID) + "s");
  8758. }
  8759. } else {
  8760. sendMessage("You need a hammer to smith this item");
  8761. }
  8762. } else {
  8763. sendMessage("You dont have enough bars to make this");
  8764. }
  8765. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8766. }
  8767. } else if (interfaceID == 1123) {
  8768. try {
  8769. System.out.println(
  8770. "Bars Needed = "
  8771. + barsNeeded(removeSlot, interfaceID)
  8772. + " Amount of item = "
  8773. + amountOfItem(removeBar(removeID))
  8774. + " Item ID " + removeID);
  8775. if (barsNeeded(removeSlot, interfaceID)
  8776. <= amountOfItem(removeBar(removeID)) && playerHasItem(removeBar(removeID),barsNeeded(removeSlot, interfaceID)*10)) {
  8777. if (playerHasItem(2347) == true) {
  8778. if (canSmith(removeID)) {
  8779. for (int w = 0; w < 10; w++) {
  8780. RemoveAllWindows();
  8781. setAnimation(0x382);
  8782. addSkillXP(
  8783. smithXP(removeBar(removeID),
  8784. barsNeeded(removeSlot, interfaceID)),
  8785. 13);
  8786. if (removeSlot == 0) {
  8787. ReplaceItems(removeID,
  8788. removeBar(removeID), 10,
  8789. barsNeeded(removeSlot,
  8790. interfaceID));
  8791. }
  8792. if (removeSlot == 1) {
  8793. ReplaceItems(removeID,
  8794. removeBar(removeID), 15,
  8795. barsNeeded(removeSlot,
  8796. interfaceID));
  8797. }
  8798. if (removeSlot == 2) {
  8799. ReplaceItems(removeID,
  8800. removeBar(removeID), 5,
  8801. barsNeeded(removeSlot,
  8802. interfaceID));
  8803. } else {
  8804. ReplaceItems(removeID,
  8805. removeBar(removeID), 1,
  8806. barsNeeded(removeSlot,
  8807. interfaceID));
  8808. }
  8809. }
  8810. } else {
  8811. sendMessage(
  8812. "You need a higher smithing level to smith "
  8813. + GetItemName(removeID) + "s");
  8814. }
  8815. } else {
  8816. sendMessage("You need a hammer to smith this item");
  8817. }
  8818. } else {
  8819. sendMessage("You dont have enough bars to make this");
  8820. }
  8821. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8822. }
  8823. }
  8824. break;
  8825.  
  8826. case 129:
  8827. // bank all items - sell 10 items
  8828. removeSlot = inStream.readUnsignedWordA();
  8829. interfaceID = inStream.readUnsignedWord();
  8830. removeID = inStream.readUnsignedWordA();
  8831. /*println_debug(
  8832. "RemoveItem all: " + removeID + " InterID: " + interfaceID
  8833. + " slot: " + removeSlot);*/
  8834. if (interfaceID == 7423) { // remove from dep box to bank
  8835. if (Item.itemStackable[removeID] == true) {
  8836. bankItem(playerItems[removeSlot], removeSlot,
  8837. playerItemsN[removeSlot]); openUpDepBox();
  8838. } else {
  8839. bankItem(playerItems[removeSlot], removeSlot,
  8840. itemAmount(playerItems[removeSlot])); openUpDepBox();
  8841. }
  8842. }
  8843. if (interfaceID == 5064) {
  8844. // remove from bag to bank
  8845. if (Item.itemStackable[removeID] == true) {
  8846. bankItem(playerItems[removeSlot], removeSlot, playerItemsN[removeSlot]);
  8847. }
  8848. else {
  8849. bankItem(playerItems[removeSlot], removeSlot, itemAmount(playerItems[removeSlot]));
  8850. }
  8851. }
  8852. else if (interfaceID == 5382) {
  8853. // remove from bank
  8854. fromBank(bankItems[removeSlot], removeSlot, bankItemsN[removeSlot]);
  8855. }
  8856. else if (interfaceID == 3322 && ! inDuel) {
  8857. //remove from bag to trade window
  8858. if (Item.itemStackable[removeID])
  8859. tradeItem(removeID, removeSlot, playerItemsN[removeSlot]);
  8860. else
  8861. tradeItem(removeID, removeSlot, 28);
  8862. }
  8863. else if (interfaceID == 3322 && inDuel) {
  8864. //remove from bag to duel window
  8865. if (Item.itemStackable[removeID] || Item.itemIsNote[removeID])
  8866. stakeItem(removeID, removeSlot, playerItemsN[removeSlot]);
  8867. else
  8868. stakeItem(removeID, removeSlot, 28);
  8869. }
  8870. else if (interfaceID == 6669 && inDuel) {
  8871. //remove from duel window
  8872. fromDuel(removeID, removeSlot, offeredItems.get(removeSlot).amount);
  8873. }
  8874. else if (interfaceID == 3415) {
  8875. // remove from trade window
  8876. if (Item.itemStackable[removeID])
  8877. fromTrade(removeID, removeSlot, offeredItems.get(removeSlot).amount);
  8878. else
  8879. fromTrade(removeID, removeSlot, 28);
  8880. }
  8881. else if (interfaceID == 3823) {
  8882. // Show value to sell items
  8883. sellItem(removeID, removeSlot, 10);
  8884. }
  8885. else if (interfaceID == 3900) {
  8886. // Show value to buy items
  8887. buyItem(removeID, removeSlot, 10);
  8888. }
  8889.  
  8890. break;
  8891.  
  8892. case 135:
  8893. // bank X items
  8894. outStream.createFrame(27);
  8895. XremoveSlot = inStream.readSignedWordBigEndian();
  8896. XinterfaceID = inStream.readUnsignedWordA();
  8897. XremoveID = inStream.readSignedWordBigEndian();
  8898.  
  8899. println_debug("RemoveItem X: "+XremoveID+" InterID: "+XinterfaceID+" slot: "+XremoveSlot);
  8900.  
  8901. break;
  8902.  
  8903. case 208:
  8904. // Enter Amounth Part 2
  8905. int EnteredAmount = inStream.readDWord();
  8906. if (EnteredAmount < 1)
  8907. break;
  8908. if (XinterfaceID == 7423) {//remove from dep box to bank
  8909. bankItem(playerItems[XremoveSlot], XremoveSlot, EnteredAmount); openUpDepBox();
  8910. }
  8911. if (XinterfaceID == 5064) {
  8912. // remove from bag to bank
  8913. bankItem(playerItems[XremoveSlot], XremoveSlot, EnteredAmount);
  8914. }
  8915. else if (XinterfaceID == 5382) {
  8916. // remove from bank
  8917. fromBank(bankItems[XremoveSlot], XremoveSlot, EnteredAmount);
  8918. }
  8919. else if (XinterfaceID == 3322 && inDuel) {
  8920. //remove from bag to duel window
  8921. stakeItem(XremoveID, XremoveSlot, EnteredAmount);
  8922. }
  8923. else if (XinterfaceID == 6669 && inDuel) {
  8924. //remove from duel window
  8925. fromDuel(XremoveID, XremoveSlot, EnteredAmount);
  8926. }
  8927. else if (XinterfaceID == 3322) {
  8928. // remove from bag to trade window
  8929. if (XremoveID == 1543)
  8930. break;
  8931. tradeItem(XremoveID, XremoveSlot, EnteredAmount);
  8932. }
  8933. else if (XinterfaceID == 3415) {
  8934. // remove from trade window
  8935. fromTrade(XremoveID, XremoveSlot, EnteredAmount);
  8936. }
  8937. break;
  8938.  
  8939. case 87:
  8940. // drop item
  8941. int droppedItem = inStream.readUnsignedWordA();
  8942.  
  8943. somejunk = inStream.readUnsignedByte()+inStream.readUnsignedByte();
  8944. int slot = inStream.readUnsignedWordA();
  8945.  
  8946. // println_debug("dropItem: "+droppedItem+" Slot: "+slot);
  8947. if (wearing == false) {
  8948. dropItem(droppedItem, slot);
  8949. }
  8950. break;
  8951.  
  8952. case 185:
  8953. // clicking most buttons
  8954. actionButtonId = misc.HexToInt(inStream.buffer, 0, packetSize);
  8955. if (!validClient)
  8956. break;
  8957. resetAction();
  8958. println("ab="+actionButtonId);
  8959. if (duelButton(actionButtonId)) {
  8960. break;
  8961. }
  8962. switch (actionButtonId) {
  8963. case 26076:
  8964. //frame36(6575, 1);
  8965. break;
  8966. case 53202:
  8967. tradestatus = "BUYING";
  8968. sendMessage("Now type ::send *the name of your item*");
  8969. sendMessage("Example: ::send dharoks greataxe");
  8970. closeInterface();
  8971. break;
  8972. case 53203:
  8973. tradestatus = "SELLING";
  8974. sendMessage("Now type ::send *the name of your item*");
  8975. sendMessage("Example: ::send dharoks greataxe");
  8976. closeInterface();
  8977. break;
  8978. case 53204:
  8979. closeInterface();
  8980. break;
  8981. case 53245:
  8982. //frame36(13813, 1);
  8983. break;
  8984. case 25120:
  8985. if (System.currentTimeMillis()-lastButton < 1000) {
  8986. lastButton = System.currentTimeMillis();
  8987. break;
  8988. }
  8989. else {
  8990. lastButton = System.currentTimeMillis();
  8991. }
  8992. client dw = getClient(duel_with);
  8993. if (!validClient(duel_with))
  8994. declineDuel();
  8995. duelConfirmed2 = true;
  8996. if (dw.duelConfirmed2) {
  8997. startDuel();
  8998. dw.startDuel();
  8999. }
  9000. else {
  9001. sendQuest("Waiting for other player...", 6571);
  9002. dw.sendQuest("Other player has accepted", 6571);
  9003. }
  9004. break;
  9005. case 15147:
  9006. //bronze
  9007. case 15146:
  9008. case 10247:
  9009. case 9110:
  9010. case 15151:
  9011. //iron
  9012. case 15150:
  9013. case 15149:
  9014. case 15148:
  9015. case 15155:
  9016. //silver
  9017. case 15154:
  9018. case 15153:
  9019. case 15152:
  9020. case 15159:
  9021. //steel
  9022. case 15158:
  9023. case 15157:
  9024. case 15156:
  9025. case 15163:
  9026. //gold
  9027. case 15162:
  9028. case 15161:
  9029. case 15160:
  9030. case 29017:
  9031. //mithril
  9032. case 29016:
  9033. case 24253:
  9034. case 16062:
  9035. case 29022:
  9036. //addy
  9037. case 29020:
  9038. case 29019:
  9039. case 29018:
  9040. case 29026:
  9041. //rune
  9042. case 29025:
  9043. case 29024:
  9044. case 29023:
  9045. startSmelt(actionButtonId);
  9046. break;
  9047. case 50235: //home teleport
  9048. triggerTele(3430+misc.random(2), 2917+misc.random(2), 0, false);
  9049. break;
  9050. case 50245: //ardourgne teleport
  9051. triggerTele(2662+misc.random(3), 3306+misc.random(3), 0, false);
  9052. break;
  9053. case 50253: //camelot teleport
  9054. triggerTele(2750+misc.random(2), 3477+misc.random(2), 0, false);
  9055. break;
  9056. case 51005: //port khazard teleport
  9057. triggerTele(2656+misc.random(2), 3158+misc.random(2), 0, false);
  9058. break;
  9059. case 51013: //lletya teleport
  9060. triggerTele(2341+misc.random(1), 3171+misc.random(1), 0, false);
  9061. break;
  9062. case 51023: // grand tree teleport
  9063. triggerTele(2461+misc.random(3), 3456+misc.random(3), 0, false);
  9064. break;
  9065. case 51031: // crandor teleport
  9066. triggerTele(2850+misc.random(1), 3241+misc.random(1), 0, true);
  9067. break;
  9068. case 51039: // monastry teleport
  9069. triggerTele(3052+misc.random(1), 3500+misc.random(1), 0, false);
  9070. break;
  9071. case 34185:
  9072. case 34184:
  9073. //vamps
  9074. case 34183:
  9075. case 34182:
  9076. case 34189:
  9077. //chaps
  9078. case 34188:
  9079. case 34187:
  9080. case 34186:
  9081. case 34193:
  9082. case 34192:
  9083. case 34191:
  9084. case 34190:
  9085. startCraft(actionButtonId);
  9086. break;
  9087. case 33187:
  9088. //armor
  9089. case 33186:
  9090. case 33185:
  9091. case 33190:
  9092. //gloves
  9093. case 33189:
  9094. case 33188:
  9095. case 33193:
  9096. //boots
  9097. case 33192:
  9098. case 33191:
  9099. case 33196:
  9100. //vamps
  9101. case 33195:
  9102. case 33194:
  9103. case 33199:
  9104. //chaps
  9105. case 33198:
  9106. case 33197:
  9107. case 33202:
  9108. //coif
  9109. case 33201:
  9110. case 33200:
  9111. case 33205:
  9112. //cowl
  9113. case 33204:
  9114. case 33203:
  9115. startCraft(actionButtonId);
  9116. break;
  9117. case 9118:
  9118. case 19022:
  9119. closeInterface();
  9120. break;
  9121. case 57225:
  9122. startTan(1, 0);
  9123. break;
  9124. case 57217:
  9125. startTan(5, 0);
  9126. break;
  9127. case 57209:
  9128. startTan(27, 0);
  9129. break;
  9130. case 57201:
  9131. startTan(27, 0);
  9132. break;
  9133. case 57229:
  9134. startTan(1, 1);
  9135. break;
  9136. case 57221:
  9137. startTan(5, 1);
  9138. break;
  9139. case 57213:
  9140. startTan(27, 1);
  9141. break;
  9142. case 57205:
  9143. startTan(27, 1);
  9144. break;
  9145. case 57227:
  9146. startTan(1, 2);
  9147. break;
  9148. case 57219:
  9149. startTan(5, 2);
  9150. break;
  9151. case 57211:
  9152. case 57203:
  9153. startTan(27, 2);
  9154. break;
  9155. case 57228:
  9156. startTan(1, 3);
  9157. break;
  9158. case 57220:
  9159. startTan(5, 3);
  9160. break;
  9161. case 57212:
  9162. case 57204:
  9163. startTan(27, 3);
  9164. break;
  9165. case 57231:
  9166. startTan(1, 4);
  9167. break;
  9168. case 57223:
  9169. startTan(5, 4);
  9170. break;
  9171. case 57215:
  9172. case 57207:
  9173. startTan(27, 4);
  9174. break;
  9175. case 57232:
  9176. startTan(1, 5);
  9177. break;
  9178. case 57224:
  9179. startTan(5, 5);
  9180. break;
  9181. case 57216:
  9182. case 57208:
  9183. startTan(27, 5);
  9184. break;
  9185. case 34170:
  9186. fletchBow(true, 1);
  9187. break;
  9188. case 34169:
  9189. fletchBow(true, 5);
  9190. break;
  9191. case 34168:
  9192. fletchBow(true, 10);
  9193. break;
  9194. case 34167:
  9195. fletchBow(true, 27);
  9196. break;
  9197. case 34174:
  9198. //1
  9199. fletchBow(false, 1);
  9200. break;
  9201. case 34173:
  9202. //5
  9203. fletchBow(false, 5);
  9204. break;
  9205. case 34172:
  9206. //10
  9207. fletchBow(false, 10);
  9208. break;
  9209. case 34171:
  9210. fletchBow(false, 27);
  9211. break;
  9212. case 10252:
  9213. case 11000:
  9214. case 10253:
  9215. case 11001:
  9216. case 10254:
  9217. case 10255:
  9218. case 11002:
  9219. case 11011:
  9220. case 11013:
  9221. case 11014:
  9222. case 11010:
  9223. case 11012:
  9224. case 11006:
  9225. case 11009:
  9226. case 11008:
  9227. case 11004:
  9228. case 11003:
  9229. case 11005:
  9230. case 47002:
  9231. case 54090:
  9232. case 11007:
  9233. if (randomed && actionButtonId == statId[random_skill]) {
  9234. randomed = false;
  9235. closeInterface();
  9236. addItem(995, misc.random(1200));
  9237. }
  9238. case 1097:
  9239. if(premium) {
  9240. setSidebarInterface(0, 1689);
  9241. } else {
  9242. sendMessage("You need to be premium to autocast.");
  9243. }
  9244. break;
  9245. case 51133:
  9246. case 51185:
  9247. case 51091:
  9248. case 24018:
  9249. case 51159:
  9250. case 51211:
  9251. case 51111:
  9252. case 51069:
  9253. case 51146:
  9254. case 51198:
  9255. case 51102:
  9256. case 51058:
  9257. case 51172:
  9258. case 51224:
  9259. case 51122:
  9260. case 51080:
  9261. for (int index = 0; index < ancientButton.length; index++) {
  9262. if (actionButtonId == ancientButton[index]) {
  9263. autocast_spellIndex = index;
  9264. setClientConfig(108, 1);
  9265. SendWeapon(
  9266. playerEquipment[playerWeapon],
  9267. ItemHandler.ItemList[playerEquipment[playerWeapon] - 1].itemName);
  9268. debug("autocast_spellIndex=" + autocast_spellIndex);
  9269. }}
  9270. break;
  9271. case 1093:
  9272. if(autocast_spellIndex > -1) {
  9273. sendMessage("You turn Off the autocast.");
  9274. autocast_spellIndex = -1;
  9275. setClientConfig(108, 0);
  9276. } else {
  9277. sendMessage("Please select a spell before try turn it off.");
  9278. }
  9279. break;
  9280. case 24017:
  9281. SendWeapon(playerEquipment[playerWeapon], ItemHandler.ItemList[playerEquipment[playerWeapon]-1].itemName);
  9282. break;
  9283.  
  9284. case 2171:
  9285. // Retribution
  9286. if (Retribution == false) {
  9287. Retribution = true;
  9288. }
  9289. else if (Retribution == true) {
  9290. Retribution = false;
  9291. }
  9292. break;
  9293.  
  9294. case 14067:
  9295. appearanceUpdateRequired = true;
  9296. updateRequired = true;
  9297. closeInterface();
  9298. RemoveAllWindows();
  9299. break;
  9300.  
  9301. case 153:
  9302. if (playerEnergy > 0) {
  9303. isRunning2 = true;
  9304. }
  9305. break;
  9306.  
  9307. case 152:
  9308. isRunning2 = false;
  9309. break;
  9310.  
  9311. case 130:
  9312. // close interface
  9313. //println_debug("Closing Interface");
  9314. break;
  9315.  
  9316. case 168:
  9317. // yes emote
  9318. if (emotes == 0) {
  9319. emotes = 1;
  9320. pEmote = 0x357;
  9321. updateRequired = true;
  9322. appearanceUpdateRequired = true;
  9323. }
  9324. else {
  9325. emotes = 0;
  9326. pEmote = playerSE;
  9327. updateRequired = true;
  9328. appearanceUpdateRequired = true;
  9329. }
  9330. break;
  9331.  
  9332. case 169:
  9333. // no emote
  9334. if (emotes == 0) {
  9335. emotes = 1;
  9336. pEmote = 0x358;
  9337. updateRequired = true;
  9338. appearanceUpdateRequired = true;
  9339. }
  9340. else {
  9341. emotes = 0;
  9342. pEmote = playerSE;
  9343. updateRequired = true;
  9344. appearanceUpdateRequired = true;
  9345. }
  9346. break;
  9347.  
  9348. case 162:
  9349. // think emote
  9350. if (emotes == 0) {
  9351. emotes = 1;
  9352. pEmote = 0x359;
  9353. updateRequired = true;
  9354. appearanceUpdateRequired = true;
  9355. }
  9356. else {
  9357. emotes = 0;
  9358. pEmote = playerSE;
  9359. updateRequired = true;
  9360. appearanceUpdateRequired = true;
  9361. }
  9362. break;
  9363.  
  9364. case 164:
  9365. // bow emote
  9366. if (emotes == 0) {
  9367. emotes = 1;
  9368. pEmote = 0x35A;
  9369. updateRequired = true;
  9370. appearanceUpdateRequired = true;
  9371. }
  9372. else {
  9373. emotes = 0;
  9374. pEmote = playerSE;
  9375. updateRequired = true;
  9376. appearanceUpdateRequired = true;
  9377. }
  9378. break;
  9379.  
  9380. case 165:
  9381. // angry emote
  9382. if (emotes == 0) {
  9383. emotes = 1;
  9384. pEmote = 0x35B;
  9385. updateRequired = true;
  9386. appearanceUpdateRequired = true;
  9387. }
  9388. else {
  9389. emotes = 0;
  9390. pEmote = playerSE;
  9391. updateRequired = true;
  9392. appearanceUpdateRequired = true;
  9393. }
  9394. break;
  9395.  
  9396. case 161:
  9397. // cry emote
  9398. if (emotes == 0) {
  9399. emotes = 1;
  9400. pEmote = 0x35C;
  9401. updateRequired = true;
  9402. appearanceUpdateRequired = true;
  9403. }
  9404. else {
  9405. emotes = 0;
  9406. pEmote = playerSE;
  9407. updateRequired = true;
  9408. appearanceUpdateRequired = true;
  9409. }
  9410. break;
  9411.  
  9412. case 170:
  9413. // laugh emote
  9414. if (emotes == 0) {
  9415. emotes = 1;
  9416. pEmote = 0x35D;
  9417. updateRequired = true;
  9418. appearanceUpdateRequired = true;
  9419. }
  9420. else {
  9421. emotes = 0;
  9422. pEmote = playerSE;
  9423. updateRequired = true;
  9424. appearanceUpdateRequired = true;
  9425. }
  9426. break;
  9427.  
  9428. case 171:
  9429. // cheer emote
  9430. if (emotes == 0) {
  9431. emotes = 1;
  9432. pEmote = 0x35E;
  9433. updateRequired = true;
  9434. appearanceUpdateRequired = true;
  9435. }
  9436. else {
  9437. emotes = 0;
  9438. pEmote = playerSE;
  9439. updateRequired = true;
  9440. appearanceUpdateRequired = true;
  9441. }
  9442. break;
  9443.  
  9444. case 163:
  9445. // wave emote
  9446. if (emotes == 0) {
  9447. emotes = 1;
  9448. pEmote = 0x35F;
  9449. updateRequired = true;
  9450. appearanceUpdateRequired = true;
  9451. }
  9452. else {
  9453. emotes = 0;
  9454. pEmote = playerSE;
  9455. updateRequired = true;
  9456. appearanceUpdateRequired = true;
  9457. }
  9458. break;
  9459.  
  9460. case 167:
  9461. // beckon emote
  9462. if (emotes == 0) {
  9463. emotes = 1;
  9464. pEmote = 0x360;
  9465. updateRequired = true;
  9466. appearanceUpdateRequired = true;
  9467. }
  9468. else {
  9469. emotes = 0;
  9470. pEmote = playerSE;
  9471. updateRequired = true;
  9472. appearanceUpdateRequired = true;
  9473. }
  9474. break;
  9475.  
  9476. case 172:
  9477. // clap emote
  9478. if (emotes == 0) {
  9479. emotes = 1;
  9480. pEmote = 0x361;
  9481. updateRequired = true;
  9482. appearanceUpdateRequired = true;
  9483. }
  9484. else {
  9485. emotes = 0;
  9486. pEmote = playerSE;
  9487. updateRequired = true;
  9488. appearanceUpdateRequired = true;
  9489. }
  9490. break;
  9491.  
  9492. case 166:
  9493. // dance emote
  9494. if (emotes == 0) {
  9495. emotes = 1;
  9496. pEmote = 920;
  9497. updateRequired = true;
  9498. appearanceUpdateRequired = true;
  9499. }
  9500. else {
  9501. emotes = 0;
  9502. pEmote = playerSE;
  9503. updateRequired = true;
  9504. appearanceUpdateRequired = true;
  9505. }
  9506. break;
  9507.  
  9508. case 52050:
  9509. // panic emote
  9510. if (emotes == 0) {
  9511. emotes = 1;
  9512. pEmote = 0x839;
  9513. updateRequired = true;
  9514. appearanceUpdateRequired = true;
  9515. }
  9516. else {
  9517. emotes = 0;
  9518. pEmote = playerSE;
  9519. updateRequired = true;
  9520. appearanceUpdateRequired = true;
  9521. }
  9522. break;
  9523.  
  9524. case 52051:
  9525. // jig emote
  9526. if (emotes == 0) {
  9527. emotes = 1;
  9528. pEmote = 0x83A;
  9529. updateRequired = true;
  9530. appearanceUpdateRequired = true;
  9531. }
  9532. else {
  9533. emotes = 0;
  9534. pEmote = playerSE;
  9535. updateRequired = true;
  9536. appearanceUpdateRequired = true;
  9537. }
  9538. break;
  9539.  
  9540. case 52052:
  9541. // spin emote
  9542. if (emotes == 0) {
  9543. emotes = 1;
  9544. pEmote = 0x83B;
  9545. updateRequired = true;
  9546. appearanceUpdateRequired = true;
  9547. }
  9548. else {
  9549. emotes = 0;
  9550. pEmote = playerSE;
  9551. updateRequired = true;
  9552. appearanceUpdateRequired = true;
  9553. }
  9554. break;
  9555.  
  9556. case 52053:
  9557. // headbang emote
  9558. if (emotes == 0) {
  9559. emotes = 1;
  9560. pEmote = 0x83C;
  9561. updateRequired = true;
  9562. appearanceUpdateRequired = true;
  9563. }
  9564. else {
  9565. emotes = 0;
  9566. pEmote = playerSE;
  9567. updateRequired = true;
  9568. appearanceUpdateRequired = true;
  9569. }
  9570. break;
  9571.  
  9572. case 52054:
  9573. // joy jump emote
  9574. if (emotes == 0) {
  9575. emotes = 1;
  9576. pEmote = 0x83D;
  9577. updateRequired = true;
  9578. appearanceUpdateRequired = true;
  9579. }
  9580. else {
  9581. emotes = 0;
  9582. pEmote = playerSE;
  9583. updateRequired = true;
  9584. appearanceUpdateRequired = true;
  9585. }
  9586. break;
  9587.  
  9588. case 52055:
  9589. // rasp' berry emote
  9590. if (emotes == 0) {
  9591. emotes = 1;
  9592. pEmote = 0x83E;
  9593. updateRequired = true;
  9594. appearanceUpdateRequired = true;
  9595. }
  9596. else {
  9597. emotes = 0;
  9598. pEmote = playerSE;
  9599. updateRequired = true;
  9600. appearanceUpdateRequired = true;
  9601. }
  9602. break;
  9603.  
  9604. case 52056:
  9605. // yawn emote
  9606. if (emotes == 0) {
  9607. emotes = 1;
  9608. pEmote = 0x83F;
  9609. updateRequired = true;
  9610. appearanceUpdateRequired = true;
  9611. }
  9612. else {
  9613. emotes = 0;
  9614. pEmote = playerSE;
  9615. updateRequired = true;
  9616. appearanceUpdateRequired = true;
  9617. }
  9618. break;
  9619.  
  9620. case 52057:
  9621. // salute emote
  9622. if (emotes == 0) {
  9623. emotes = 1;
  9624. pEmote = 0x840;
  9625. updateRequired = true;
  9626. appearanceUpdateRequired = true;
  9627. }
  9628. else {
  9629. emotes = 0;
  9630. pEmote = playerSE;
  9631. updateRequired = true;
  9632. appearanceUpdateRequired = true;
  9633. }
  9634. break;
  9635.  
  9636. case 52058:
  9637. // shrug emote
  9638. if (emotes == 0) {
  9639. emotes = 1;
  9640. pEmote = 0x841;
  9641. updateRequired = true;
  9642. appearanceUpdateRequired = true;
  9643. }
  9644. else {
  9645. emotes = 0;
  9646. pEmote = playerSE;
  9647. updateRequired = true;
  9648. appearanceUpdateRequired = true;
  9649. }
  9650. break;
  9651.  
  9652. case 43092:
  9653. // blow kiss emote
  9654. if (emotes == 0) {
  9655. emotes = 1;
  9656. pEmote = 0x558;
  9657. updateRequired = true;
  9658. appearanceUpdateRequired = true;
  9659. }
  9660. else {
  9661. emotes = 0;
  9662. pEmote = playerSE;
  9663. updateRequired = true;
  9664. appearanceUpdateRequired = true;
  9665. }
  9666. break;
  9667.  
  9668. case 2155:
  9669. // glass box emote
  9670. if (emotes == 0) {
  9671. emotes = 1;
  9672. pEmote = 0x46B;
  9673. updateRequired = true;
  9674. appearanceUpdateRequired = true;
  9675. }
  9676. else {
  9677. emotes = 0;
  9678. pEmote = playerSE;
  9679. updateRequired = true;
  9680. appearanceUpdateRequired = true;
  9681. }
  9682. break;
  9683.  
  9684. case 25103:
  9685. // climb rope emote
  9686. if (emotes == 0) {
  9687. emotes = 1;
  9688. pEmote = 0x46A;
  9689. updateRequired = true;
  9690. appearanceUpdateRequired = true;
  9691. }
  9692. else {
  9693. emotes = 0;
  9694. pEmote = playerSE;
  9695. updateRequired = true;
  9696. appearanceUpdateRequired = true;
  9697. }
  9698. break;
  9699.  
  9700. case 25106:
  9701. // lean emote
  9702. if (emotes == 0) {
  9703. emotes = 1;
  9704. pEmote = 0x469;
  9705. updateRequired = true;
  9706. appearanceUpdateRequired = true;
  9707. }
  9708. else {
  9709. emotes = 0;
  9710. pEmote = playerSE;
  9711. updateRequired = true;
  9712. appearanceUpdateRequired = true;
  9713. }
  9714. break;
  9715.  
  9716. case 2154:
  9717. // glass wall emote
  9718. if (emotes == 0) {
  9719. emotes = 1;
  9720. pEmote = 0x468;
  9721. updateRequired = true;
  9722. appearanceUpdateRequired = true;
  9723. }
  9724. else {
  9725. emotes = 0;
  9726. pEmote = playerSE;
  9727. updateRequired = true;
  9728. appearanceUpdateRequired = true;
  9729. }
  9730. break;
  9731.  
  9732. case 52071:
  9733. // goblin bow emote
  9734. if (emotes == 0) {
  9735. emotes = 1;
  9736. pEmote = 0x84F;
  9737. updateRequired = true;
  9738. appearanceUpdateRequired = true;
  9739. }
  9740. else {
  9741. emotes = 0;
  9742. pEmote = playerSE;
  9743. updateRequired = true;
  9744. appearanceUpdateRequired = true;
  9745. }
  9746. break;
  9747.  
  9748. case 52072:
  9749. // goblin dance emote
  9750. if (emotes == 0) {
  9751. emotes = 1;
  9752. pEmote = 0x850;
  9753. updateRequired = true;
  9754. appearanceUpdateRequired = true;
  9755. }
  9756. else {
  9757. emotes = 0;
  9758. pEmote = playerSE;
  9759. updateRequired = true;
  9760. appearanceUpdateRequired = true;
  9761. }
  9762. break;
  9763. case 52073:
  9764. // zombie emote
  9765. if (emotes == 0) {
  9766. emotes = 1;
  9767. pEmote = 0x3544;
  9768. updateRequired = true;
  9769. appearanceUpdateRequired = true;
  9770. }
  9771. else {
  9772. emotes = 0;
  9773. pEmote = playerSE;
  9774. updateRequired = true;
  9775. appearanceUpdateRequired = true;
  9776. }
  9777. break;
  9778.  
  9779.  
  9780. case 22228:
  9781. // punch (unarmed)
  9782. case 9125:
  9783. // Accurate
  9784. case 48010:
  9785. // flick (whip)
  9786. case 21200:
  9787. // spike (pickaxe)
  9788. case 1080:
  9789. // bash (staff)
  9790. case 6168:
  9791. // chop (axe)
  9792. case 6236:
  9793. // accurate (long bow)
  9794. case 17102:
  9795. // accurate (darts)
  9796. case 8234:
  9797. // stab (dagger)
  9798. FightType = 1;
  9799. SkillID = 0;
  9800. break;
  9801.  
  9802. case 22229:
  9803. // block (unarmed)
  9804. case 9126:
  9805. // Defensive
  9806. case 48008:
  9807. // deflect (whip)
  9808. case 21201:
  9809. // block (pickaxe)
  9810. case 1078:
  9811. // focus - block (staff)
  9812. case 6169:
  9813. // block (axe)
  9814. case 33019:
  9815. // fend (hally)
  9816. case 18078:
  9817. // block (spear)
  9818. case 8235:
  9819. // block (dagger)
  9820. FightType = 4;
  9821. SkillID = 1;
  9822. break;
  9823.  
  9824. case 9127:
  9825. // Controlled
  9826. case 48009:
  9827. // lash (whip)
  9828. case 33018:
  9829. // jab (hally)
  9830. case 6234:
  9831. // longrange (long bow)
  9832. case 18077:
  9833. // lunge (spear)
  9834. case 18080:
  9835. // swipe (spear)
  9836. case 18079:
  9837. // pound (spear)
  9838. case 17100:
  9839. // longrange (darts)
  9840. FightType = 3;
  9841. SkillID = 3;
  9842. break;
  9843.  
  9844. case 22230:
  9845. // kick (unarmed)
  9846. case 9128:
  9847. // Aggressive
  9848. case 21203:
  9849. // impale (pickaxe)
  9850. case 21202:
  9851. // smash (pickaxe)
  9852. case 1079:
  9853. // pound (staff)
  9854. case 6171:
  9855. // hack (axe)
  9856. case 6170:
  9857. // smash (axe)
  9858. case 33020:
  9859. // swipe (hally)
  9860. case 6235:
  9861. // rapid (long bow)
  9862. case 17101:
  9863. // repid (darts)
  9864. case 8237:
  9865. // lunge (dagger)
  9866. case 8236:
  9867. // slash (dagger)
  9868. FightType = 2;
  9869. SkillID = 2;
  9870. break;
  9871.  
  9872. case 9154:
  9873. // Log out
  9874. //if(currentHealth > 0)
  9875. logout();
  9876. break;
  9877.  
  9878. case 21011:
  9879. takeAsNote = false;
  9880. break;
  9881.  
  9882. case 21010:
  9883. takeAsNote = true;
  9884. break;
  9885.  
  9886. case 13092:
  9887. if (System.currentTimeMillis()-lastButton < 1000) {
  9888. lastButton = System.currentTimeMillis();
  9889. break;
  9890. }
  9891. else {
  9892. lastButton = System.currentTimeMillis();
  9893. }
  9894. if (inTrade && ! tradeConfirmed) {
  9895. lastButton = System.currentTimeMillis();
  9896. client other = getClient(trade_reqId);
  9897. tradeConfirmed = true;
  9898. if (other.tradeConfirmed) {
  9899. confirmScreen();
  9900. other.confirmScreen();
  9901. break;
  9902. }
  9903. sendFrame126("Waiting for other player...", 3431);
  9904. if (validClient(trade_reqId)) {
  9905. other.sendFrame126("Other player has accepted", 3431);
  9906. }
  9907. }
  9908. break;
  9909.  
  9910. case 13218:
  9911. client other = getClient(trade_reqId);
  9912. if (!validClient(trade_reqId))
  9913. break;
  9914. if (System.currentTimeMillis()-lastButton < 1000) {
  9915. lastButton = System.currentTimeMillis();
  9916. break;
  9917. }
  9918. else {
  9919. lastButton = System.currentTimeMillis();
  9920. }
  9921. lastButton = System.currentTimeMillis();
  9922. if (inTrade && tradeConfirmed && other.tradeConfirmed && ! tradeConfirmed2) {
  9923. lastButton = System.currentTimeMillis();
  9924. tradeConfirmed2 = true;
  9925. if (other.tradeConfirmed2) {
  9926. giveItems();
  9927. other.giveItems();
  9928. break;
  9929. }
  9930. other.sendQuest("Other player has accepted.", 3535);
  9931. sendQuest("Waiting for other player...", 3535);
  9932. }
  9933. break;
  9934.  
  9935. case 9157:
  9936. if (dialog) {
  9937. switch (dialogId) {
  9938. case 1:
  9939.  
  9940. break;
  9941. }
  9942. }
  9943. if (NpcDialogue == 2) {
  9944. NpcDialogue = 0;
  9945. NpcDialogueSend = false;
  9946. openUpBank();
  9947. }
  9948. else if (NpcDialogue == 4) {
  9949. // Aubury
  9950. openUpShop(1);
  9951. }
  9952. else if (NpcDialogue == 11) {
  9953. if(playerHasItem(995, 2500)) {
  9954. // Rug Merchant
  9955. triggerTele(3299+misc.random(2), 3023+misc.random(2), 0, false);
  9956. deleteItem(995, 2500);
  9957. closeInterface();
  9958. sendMessage("You have been taken to the desert mining camp");
  9959. } else {
  9960. closeInterface();
  9961. sendMessage("You need 2500gp to go here");
  9962. }
  9963. }
  9964. break;
  9965.  
  9966. case 9158:
  9967. if (NpcDialogue == 2) {
  9968. NpcDialogue = 0;
  9969. NpcDialogueSend = false;
  9970. openUpPinSettings();
  9971. }
  9972. else if (NpcDialogue == 4) {
  9973. NpcDialogue = 5;
  9974. NpcDialogueSend = false;
  9975. }
  9976. else if (NpcDialogue == 11) {
  9977. // Rug Merchant
  9978. closeInterface();
  9979. }
  9980. else if (NpcDialogue == 14) {
  9981. //Runescape Guide
  9982. closeInterface();
  9983. }
  9984. break;
  9985.  
  9986. case 7212:
  9987. setSidebarInterface(0, 328);
  9988. break;
  9989. case 26018:
  9990. if (!inDuel || ! validClient(duel_with))
  9991. break;
  9992. client o = getClient(duel_with);
  9993. if (System.currentTimeMillis()-lastButton < 1000) {
  9994. lastButton = System.currentTimeMillis();
  9995. break;
  9996. }
  9997. else {
  9998. lastButton = System.currentTimeMillis();
  9999. }
  10000. duelConfirmed = true;
  10001. if (duelConfirmed && o.duelConfirmed) {
  10002. canOffer = false;
  10003. confirmDuel();
  10004. o.confirmDuel();
  10005. }
  10006. else {
  10007. sendFrame126("Waiting for other player...", 6684);
  10008. o.sendFrame126("Other player has accepted.", 6684);
  10009. }
  10010.  
  10011. break;
  10012.  
  10013. default:
  10014. // System.out.println("Player stands in: X="+absX+" Y="+absY);
  10015. println_debug("Case 185: Action Button: "+actionButtonId);
  10016. break;
  10017. }
  10018. break;
  10019.  
  10020. // the following Ids are the reason why AR-type cheats are hopeless to make...
  10021. // basically they're just there to make reversing harder
  10022. case 226:
  10023. case 78:
  10024. case 148:
  10025. case 183:
  10026. case 230:
  10027. case 136:
  10028. case 189:
  10029. case 152:
  10030. case 200:
  10031. case 85:
  10032. case 165:
  10033. case 238:
  10034. case 150:
  10035. case 36:
  10036. case 246:
  10037. case 77:
  10038. break;
  10039.  
  10040. // any packets we might have missed
  10041. default: interfaceID = inStream.readUnsignedWordA();
  10042. int actionButtonId1 = misc.HexToInt(inStream.buffer, 0, packetSize);
  10043.  
  10044. println_debug("Unhandled packet ["+packetType+", InterFaceId: "+interfaceID+", size="+packetSize+"]: ]"+misc.Hex(inStream.buffer, 1, packetSize)+"[");
  10045. println_debug("Action Button: "+actionButtonId1);
  10046. break;
  10047. }
  10048. }
  10049. private int somejunk;
  10050.  
  10051. public void yell(String message) {
  10052. for (Player p: handler.players) {
  10053. if (message.indexOf("tradereq") > 0 || message.indexOf("duelreq") > 0)
  10054. return;
  10055. if (p == null || ! p.isActive)
  10056. continue;
  10057. client temp = (client)p;
  10058. if (temp.absX > 0 && temp.absY > 0)
  10059. if (temp != null && ! temp.disconnected && p.isActive)
  10060. temp.sendMessage(message);
  10061. }
  10062. }
  10063.  
  10064. /*
  10065. [0] Varrock
  10066. [1] Wizard Tower
  10067. [2] Ardougne
  10068. [3] Magic Guild
  10069. */
  10070. public boolean stairs(int stairs, int teleX, int teleY) {
  10071. if (IsStair == false) {
  10072. IsStair = true;
  10073. if (stairs == 1) {
  10074. heightLevel += 1;
  10075. } else if (stairs == 2) {
  10076. heightLevel -= 1;
  10077. } else if (stairs == 21) {
  10078. heightLevel += 1;
  10079. } else if (stairs == 22) {
  10080. heightLevel -= 1;
  10081. }
  10082. teleportToX = teleX;
  10083. teleportToY = teleY;
  10084. if (stairs == 3 || stairs == 5 || stairs == 9) {
  10085. teleportToY += 6400;
  10086. } else if (stairs == 4 || stairs == 6 || stairs == 10) {
  10087. teleportToY -= 6400;
  10088. } else if (stairs == 7) {
  10089. teleportToX = 3104;
  10090. teleportToY = 9576;
  10091. } else if (stairs == 8) {
  10092. teleportToX = 3105;
  10093. teleportToY = 3162;
  10094. } else if (stairs == 11) {
  10095. teleportToX = 2856;
  10096. teleportToY = 9570;
  10097. } else if (stairs == 12) {
  10098. teleportToX = 2857;
  10099. teleportToY = 3167;
  10100. } else if (stairs == 13) {
  10101. heightLevel += 3;
  10102. teleportToX = skillX;
  10103. teleportToY = skillY;
  10104. } else if (stairs == 15) {
  10105. teleportToY += (6400-(stairDistance+stairDistanceAdd));
  10106. } else if (stairs == 14) {
  10107. teleportToY -= (6400-(stairDistance+stairDistanceAdd));
  10108. } else if (stairs == 16) {
  10109. teleportToX = 2828;
  10110. teleportToY = 9772;
  10111. } else if (stairs == 17) {
  10112. teleportToX = 3494;
  10113. teleportToY = 3465;
  10114. } else if (stairs == 18) {
  10115. teleportToX = 3477;
  10116. teleportToY = 9845;
  10117. } else if (stairs == 19) {
  10118. teleportToX = 3543;
  10119. teleportToY = 3463;
  10120. } else if (stairs == 20) {
  10121. teleportToX = 3549;
  10122. teleportToY = 9865;
  10123. } else if (stairs == 21) {
  10124. teleportToY += (stairDistance+stairDistanceAdd);
  10125. } else if (stairs == 22) {
  10126. teleportToY -= (stairDistance+stairDistanceAdd);
  10127. } else if (stairs == 23) {
  10128. teleportToX = 2480;
  10129. teleportToY = 5175;
  10130. } else if (stairs == 24) {
  10131. teleportToX = 2862;
  10132. teleportToY = 9572;
  10133. } else if (stairs == 27) {
  10134. teleportToX = 2453;
  10135. teleportToY = 4468;
  10136. } else if (stairs == 28) {
  10137. teleportToX = 3201;
  10138. teleportToY = 3169;
  10139. }
  10140. if (stairs == 5 || stairs == 10) {
  10141. teleportToX += (stairDistance+stairDistanceAdd);
  10142. }
  10143. if (stairs == 6 || stairs == 9) {
  10144. teleportToX -= (stairDistance-stairDistanceAdd);
  10145. }
  10146. }
  10147. resetStairs();
  10148. return true;
  10149. }
  10150.  
  10151. public boolean resetStairs() {
  10152. stairs = 0;
  10153. skillX = -1;
  10154. skillY = -1;
  10155. stairDistance = 1;
  10156. stairDistanceAdd = 0;
  10157. IsUsingSkill = false;
  10158. return true;
  10159. }
  10160.  
  10161. public boolean crackCracker() {
  10162. sendMessage("Somone used a crackers on you...");
  10163. CrackerMsg = false;
  10164. if (CrackerForMe == true) {
  10165. if (freeSlots() > 0) {
  10166. addItem(Item.randomPHat(), 1);
  10167. sendMessage("And you get the crackers item.");
  10168. } else {
  10169. sendMessage("but you don't have enough space in your inventory.");
  10170. }
  10171. CrackerForMe = false;
  10172. } else {
  10173. sendMessage("but you didn't get the crackers item.");
  10174. }
  10175. return true;
  10176. }
  10177.  
  10178. public boolean IsInCW(int coordX, int coordY) {
  10179. if (coordY >= 3068 && coordY <= 3143 && coordX <= 2436 && coordX >= 2365) {
  10180. return true;
  10181.  
  10182. } else {
  10183. return false;
  10184. }
  10185. }
  10186.  
  10187. public boolean IsInTz(int coordX, int coordY) {
  10188. if (coordY >= 5129 && coordY <= 5167 && coordX <= 2418 && coordX >= 2375) {
  10189. return true;
  10190.  
  10191. } else {
  10192. return false;
  10193. }
  10194. }
  10195.  
  10196. public boolean isInWilderness(int coordX, int coordY, int Type) {
  10197. if (Type == 1) {
  10198. if (coordY >= 3520 && coordY <= 3967 && coordX <= 3392 && coordX >= 2942) {
  10199. return true;
  10200. }
  10201. } else if (Type == 2) {
  10202. if (coordY >= 3512 && coordY <= 3967 && coordX <= 3392 && coordX >= 2942) {
  10203. return true;
  10204. }
  10205. }
  10206. return false;
  10207. }
  10208.  
  10209. public boolean checkWildRange(int pcombat)
  10210. {
  10211. int wildLvl = (((absY - 3520) / 8) + 1);
  10212. return (pcombat >= combatLevel && combatLevel + wildLvl >= pcombat || pcombat < combatLevel && combatLevel - wildLvl <= pcombat || pcombat == combatLevel);
  10213. }
  10214.  
  10215. //pk: 2726 9193
  10216. public boolean Attack() {
  10217. if (!(AttackingOn > 0) || ! (AttackingOn < server.playerHandler.players.length)) {
  10218. ResetAttack();
  10219. return false;
  10220. }
  10221. if (playerId < 1) {
  10222. sendMessage("Error: Your player id is invalid. Please try again or logout and back in");
  10223. }
  10224.  
  10225. if (AttackingOn > 0 && !server.pking) {
  10226. sendMessage("Pking has been disabled ask Bman11293 to type ::enablepk");
  10227. ResetAttack();
  10228. return false;
  10229. }
  10230.  
  10231. boolean UseBow = false;
  10232. if (playerEquipment[playerWeapon] == 4212) {
  10233. UseBow = true;
  10234. }
  10235. if (playerEquipment[playerWeapon] == 2883) {
  10236. UseBow = true;
  10237. }
  10238. if (playerEquipment[playerWeapon] == 6082) {
  10239. UseBow = true;
  10240. }
  10241. if (playerEquipment[playerWeapon] == 4214) {
  10242. UseBow = true;
  10243. }
  10244. if (playerEquipment[playerWeapon] == 767) {
  10245. UseBow = true;
  10246. }
  10247. if (playerEquipment[playerWeapon] == 837) {
  10248. UseBow = true;
  10249. }
  10250. if (playerEquipment[playerWeapon] == 841) {
  10251. UseBow = true;
  10252. }
  10253. if (playerEquipment[playerWeapon] == 843) {
  10254. UseBow = true;
  10255. }
  10256. if (playerEquipment[playerWeapon] == 849) {
  10257. UseBow = true;
  10258. }
  10259. if (playerEquipment[playerWeapon] == 853) {
  10260. UseBow = true;
  10261. }
  10262. if (playerEquipment[playerWeapon] == 857) {
  10263. UseBow = true;
  10264. }
  10265. if (playerEquipment[playerWeapon] == 861) {
  10266. UseBow = true;
  10267. }
  10268. if (playerEquipment[playerWeapon] == 839) {
  10269. UseBow = true;
  10270. }
  10271. if (playerEquipment[playerWeapon] == 845) {
  10272. UseBow = true;
  10273. }
  10274. if (playerEquipment[playerWeapon] == 847) {
  10275. UseBow = true;
  10276. }
  10277. if (playerEquipment[playerWeapon] == 851) {
  10278. UseBow = true;
  10279. }
  10280. if (playerEquipment[playerWeapon] == 855) {
  10281. UseBow = true;
  10282. }
  10283. if (playerEquipment[playerWeapon] == 859) {
  10284. UseBow = true;
  10285. }
  10286. if (playerEquipment[playerWeapon] == 4734) {
  10287. UseBow = true;
  10288. }
  10289. if (playerEquipment[playerWeapon] == 4214) {
  10290. UseBow = true;
  10291. }
  10292. if (playerEquipment[playerWeapon] == 859) {
  10293. UseBow = true;
  10294. }
  10295.  
  10296. if (UseBow) {
  10297. if (!duelRule[0]) {
  10298. teleportToX = absX;
  10299. teleportToY = absY;
  10300. CheckArrows();
  10301. CalculateRange();
  10302. hitDiff = misc.random(playerMaxHit);
  10303. } else {
  10304. sendMessage("You can't range in this duel!");
  10305. return false;
  10306. }
  10307. }
  10308.  
  10309. if (!UseBow && duelRule[1]) {
  10310. sendMessage("You can't melee in this duel!");
  10311. ResetAttack();
  10312. return false;
  10313. }
  10314.  
  10315. int EnemyX = PlayerHandler.players[AttackingOn].absX;
  10316. int EnemyY = PlayerHandler.players[AttackingOn].absY;
  10317. int EnemyHP = PlayerHandler.players[AttackingOn].playerLevel[playerHitpoints];
  10318. int EnemyHPExp = PlayerHandler.players[AttackingOn].playerXP[playerHitpoints];
  10319. client AttackingOn2 = (client)server.playerHandler.players[AttackingOn];
  10320. TurnPlayerTo(EnemyX, EnemyY);
  10321. updateRequired = true;
  10322. appearanceUpdateRequired = true;
  10323. if (PlayerHandler.players[AttackingOn].playerEquipment[playerRing] == 2570) {
  10324. //RingOfLife = true;
  10325. }
  10326. int hitDiff = 0;
  10327. int aBonus = 0;
  10328. int rand_att = misc.random(playerLevel[0]);
  10329. int rand_def = (int)(0.65*misc.random(AttackingOn2.playerLevel[1]));
  10330. if (FightType == 1)
  10331. aBonus += (int)(playerBonus[1]/20);
  10332. int random_u = misc.random(playerBonus[1]+aBonus)*2;
  10333. int dBonus = 0;
  10334. if (AttackingOn2.FightType == 4)
  10335. dBonus += (int)(AttackingOn2.playerBonus[6]/20);
  10336. int random_def = misc.random(AttackingOn2.playerBonus[6]+dBonus);
  10337. if (random_u >= random_def && rand_att > rand_def) {
  10338. hitDiff = misc.random(playerMaxHit);
  10339. } else {
  10340. hitDiff = 0;
  10341. }
  10342. if (FightType == 2)
  10343. hitDiff = (int)(hitDiff*1.20);
  10344. long thisAttack = System.currentTimeMillis();
  10345. if (GoodDistance(EnemyX, EnemyY, absX, absY, 1) == true) {
  10346. inCombat = true;
  10347. lastCombat = System.currentTimeMillis();
  10348. if (isInWilderness(EnemyX, EnemyY, 1) || (duelFight && AttackingOn == duel_with) || (matchId == handler.players[AttackingOn].matchId && matchId >= 0)) {
  10349. if (duelFight && AttackingOn == duel_with) {
  10350. enemyX = PlayerHandler.players[AttackingOn].absX;
  10351. enemyY = PlayerHandler.players[AttackingOn].absY;
  10352. }
  10353. if (PlayerHandler.players[AttackingOn].deathStage > 0) {
  10354. ResetAttack();
  10355. sendMessage("That player is dead!");
  10356. } else {
  10357. if (!duelFight && inRange(EnemyX, EnemyY)) {
  10358. if (thisAttack-lastAttack >= 5000)
  10359. ((client)PlayerHandler.players[AttackingOn]).sendMessage("You are under attack!");
  10360. PlayerHandler.players[AttackingOn].resetWalkingQueue();
  10361. PlayerHandler.players[AttackingOn].hits++;
  10362. PlayerHandler.players[AttackingOn].fighting = true;
  10363. PlayerHandler.players[AttackingOn].fightId = localId;
  10364. PlayerHandler.players[AttackingOn].IsAttacking = true;
  10365. ((client)PlayerHandler.players[AttackingOn]).Attack();
  10366. fightId = AttackingOn;
  10367. fighting = true;
  10368. resetWalkingQueue();
  10369. }
  10370. if (playerEquipment[playerWeapon] == 4151) {
  10371. animation(341, EnemyY, EnemyX);
  10372. }
  10373. actionAmount++;
  10374. setAnimation(GetWepAnim(playerEquipment[playerWeapon]));
  10375. PlayerHandler.players[AttackingOn].hitUpdateRequired = true;
  10376. PlayerHandler.players[AttackingOn].updateRequired = true;
  10377. PlayerHandler.players[AttackingOn].appearanceUpdateRequired = true;
  10378. if ((EnemyHP-hitDiff) < 0) {
  10379. hitDiff = EnemyHP;
  10380. }
  10381. PlayerHandler.players[AttackingOn].dealDamage(hitDiff);
  10382. PlayerHandler.players[AttackingOn].hitDiff = hitDiff;
  10383. PlayerHandler.players[AttackingOn].killers[localId] += hitDiff;
  10384. attackTimer = 7;
  10385. lastAttack = System.currentTimeMillis();
  10386. //sendMessage("You hit " + hitDiff + ", time=" + lastAttack);
  10387. }
  10388. return true;
  10389. } else {
  10390. sendMessage("This player is not in a Pking Zone!");
  10391. ResetAttack();
  10392. }
  10393. }
  10394.  
  10395. if (GoodDistance(EnemyX, EnemyY, absX, absY, 1) == false) {
  10396. if (thisAttack-lastAttack >= 2000) {
  10397. if (isInWilderness(EnemyX, EnemyY, 1) == true || IsInCW(EnemyX, EnemyY) == true || IsInTz(EnemyX, EnemyY) == true) {
  10398. if (PlayerHandler.players[AttackingOn].deathStage > 0) {
  10399. ResetAttack();
  10400. } else if (playerEquipment[playerWeapon] == 4675) {
  10401. TurnPlayerTo(EnemyX, EnemyY);
  10402. PlayerHandler.players[AttackingOn].hitDiff = 0+misc.random(22);
  10403. animation(369, EnemyY, EnemyX);
  10404. AnimationReset = true;
  10405. updateRequired = true;
  10406. appearanceUpdateRequired = true;
  10407. actionAmount++;
  10408. teleportToX = absX;
  10409. teleportToY = absY;
  10410. actionTimer = 15;
  10411. setAnimation(1979);
  10412. AnimationReset = true;
  10413. PlayerHandler.players[AttackingOn].hitUpdateRequired = true;
  10414. PlayerHandler.players[AttackingOn].updateRequired = true;
  10415. PlayerHandler.players[AttackingOn].appearanceUpdateRequired = true;
  10416. if ((EnemyHP-hitDiff) <= 0) {
  10417. hitDiff = EnemyHP;
  10418. //animation(437, absY, absX);
  10419. attackPlayersPrayer(15, 2);
  10420. }
  10421. } else if (UseBow) {
  10422. actionAmount++;
  10423. setAnimation(GetWepAnim(playerEquipment[playerWeapon]));
  10424. PlayerHandler.players[AttackingOn].hitUpdateRequired = true;
  10425. PlayerHandler.players[AttackingOn].updateRequired = true;
  10426. PlayerHandler.players[AttackingOn].appearanceUpdateRequired = true;
  10427. if ((EnemyHP-hitDiff) < 0) {
  10428. hitDiff = EnemyHP;
  10429. }
  10430. PlayerHandler.players[AttackingOn].dealDamage(hitDiff);
  10431. PlayerHandler.players[AttackingOn].hitDiff = hitDiff;
  10432. attackTimer = 7;
  10433. lastAttack = System.currentTimeMillis();
  10434. }
  10435. return true;
  10436. } else {
  10437. sendMessage("This player is not in a Pking Area/Match.");
  10438. ResetAttack();
  10439. }
  10440. }
  10441. }
  10442. return false;
  10443. }
  10444. public boolean Attackrange() {
  10445. client q = (client)server.playerHandler.players[AttackingOn];
  10446. int EnemyX = PlayerHandler.players[AttackingOn].absX;
  10447. int EnemyY = PlayerHandler.players[AttackingOn].absY;
  10448. int EnemyHP = PlayerHandler.players[AttackingOn].playerLevel[playerHitpoints];
  10449. int EnemyHPExp = PlayerHandler.players[AttackingOn].playerXP[playerHitpoints];
  10450. boolean RingOfLife = false;
  10451.  
  10452. if (PlayerHandler.players[AttackingOn].playerEquipment[playerRing] == 2570) {
  10453. RingOfLife = true;
  10454. }
  10455. int hitDiff = 0;
  10456.  
  10457. hitDiff = misc.random(playerMaxHit);
  10458.  
  10459. if (GoodDistance(EnemyX, EnemyY, absX, absY, 20) == true) {
  10460. teleportToX = absX;
  10461. teleportToY = absY;
  10462. if (actionTimer == 0) {
  10463. if (isInWilderness(EnemyX, EnemyY, 1) == true) {
  10464. if (false) {
  10465. } else {
  10466. if (PlayerHandler.players[AttackingOn].deathStage > 0) {
  10467. ResetAttack();
  10468. } else {
  10469. actionAmount++;
  10470. setAnimation(GetWepAnim(playerEquipment[playerWeapon]));
  10471. PlayerHandler.players[AttackingOn].hitUpdateRequired = true;
  10472. PlayerHandler.players[AttackingOn].updateRequired = true;
  10473. PlayerHandler.players[AttackingOn].appearanceUpdateRequired = true;
  10474. hitDiff = EnemyHP;
  10475.  
  10476. PlayerHandler.players[AttackingOn].hitDiff = hitDiff;
  10477. actionTimer = 7;
  10478. }
  10479. }
  10480. return true;
  10481. } else {
  10482. sendMessage("This player is not in the Wilderness.");
  10483. ResetAttack();
  10484. }
  10485. }
  10486. }
  10487. return false;
  10488. }
  10489.  
  10490. public boolean ResetAttack() {
  10491. IsAttacking = false;
  10492. AttackingOn = 0;
  10493. resetAnimation();
  10494. IsUsingSkill = false;
  10495. return true;
  10496. }
  10497.  
  10498.  
  10499. public boolean CheckForSkillUse4(int Item) {
  10500. boolean GoOn = true;
  10501.  
  10502. switch (Item) {
  10503. case 99999:
  10504. break;
  10505. default: sendMessage("Nothing interesting happens.");
  10506. println_debug("Firemaking Usage - ItemID: "+Item);
  10507. break;
  10508. }
  10509. if (prayer[0] > 0) {
  10510. prayer();
  10511. }
  10512. return true;
  10513. }
  10514.  
  10515. public boolean IsItemInBag(int ItemID) {
  10516. for (int i = 0; i < playerItems.length; i++) {
  10517. if ((playerItems[i]-1) == ItemID) {
  10518. return true;
  10519. }
  10520. }
  10521. return false;
  10522. }
  10523.  
  10524. public boolean AreXItemsInBag(int ItemID, int Amount) {
  10525. int ItemCount = 0;
  10526.  
  10527. for (int i = 0; i < playerItems.length; i++) {
  10528. if ((playerItems[i]-1) == ItemID) {
  10529. ItemCount++;
  10530. }
  10531. if (ItemCount == Amount) {
  10532. return true;
  10533. }
  10534. }
  10535. return false;
  10536. }
  10537.  
  10538. public int GetItemSlot(int ItemID) {
  10539. for (int i = 0; i < playerItems.length; i++) {
  10540. if ((playerItems[i]-1) == ItemID) {
  10541. return i;
  10542. }
  10543. }
  10544. return -1;
  10545. }
  10546.  
  10547. public int GetXItemsInBag(int ItemID) {
  10548. int ItemCount = 0;
  10549.  
  10550. for (int i = 0; i < playerItems.length; i++) {
  10551. if ((playerItems[i]-1) == ItemID) {
  10552. ItemCount++;
  10553. }
  10554. }
  10555. return ItemCount;
  10556. }
  10557.  
  10558. public void castleWarsScore() {
  10559. String zammyColor;
  10560. String saraColor;
  10561.  
  10562. if (zammyScore > saraScore) {
  10563. zammyColor = "@gre@";
  10564. saraColor = "@red@";
  10565. } else if (zammyScore < saraScore) {
  10566. zammyColor = "@red@";
  10567. saraColor = "@gre@";
  10568. } else {
  10569. zammyColor = "@yel@";
  10570. saraColor = "@yel@";
  10571. }
  10572. sendQuest("@bla@.................Mage Wars Scores.............", 8144);
  10573. clearQuestInterface();
  10574. sendQuest("@or3@Zamorak: "+zammyColor+zammyScore, 8147);
  10575. sendQuest("@or3@Saradomin: "+saraColor+saraScore, 8148);
  10576. sendQuestSomething(8143);
  10577. showInterface(8134);
  10578. flushOutStream();
  10579. }
  10580.  
  10581. public int Tradecompete = 0;
  10582. public int Publicchat = 0;
  10583.  
  10584. public void pmstatus(int status) {
  10585. // status: loading = 0 connecting = 1 fine = 2
  10586. outStream.createFrame(221);
  10587. outStream.writeByte(status);
  10588. }
  10589.  
  10590. public boolean playerHasItem(int itemID) {
  10591. itemID++;
  10592. for (int i = 0; i < playerItems.length; i++) {
  10593. if (playerItems[i] == itemID) {
  10594. return true;
  10595. }
  10596. }
  10597. return false;
  10598.  
  10599. }
  10600. public boolean playerHasItem(int itemID, int amt) {
  10601. itemID++;
  10602. int found = 0;
  10603. for (int i = 0; i < playerItems.length; i++) {
  10604. if (playerItems[i] == itemID) {
  10605. if (playerItemsN[i] >= amt)
  10606. return true;
  10607. else
  10608. found++;
  10609. }
  10610. }
  10611. if (found >= amt)
  10612. return true;
  10613. return false;
  10614.  
  10615. }
  10616.  
  10617.  
  10618. public boolean isinpm(long l) {
  10619. for (int i = 0; i < friends.length; i++) {
  10620. if (friends[i] != 0) {
  10621. if (l == friends[i]) {
  10622. return true;
  10623. }
  10624. }
  10625. }
  10626. return false;
  10627. }
  10628.  
  10629. public void pmupdate(int pmid, int world) {
  10630. if (handler.players[pmid] == null || handler.players[pmid].playerName == null) {
  10631. return;
  10632. }
  10633. long l = misc.playerNameToInt64(handler.players[pmid].playerName);
  10634.  
  10635. if (handler.players[pmid].Privatechat == 0) {
  10636. for (int i = 0; i < friends.length; i++) {
  10637. if (friends[i] != 0) {
  10638. if (l == friends[i]) {
  10639. loadpm(l, world);
  10640. return;
  10641. }
  10642. }
  10643. }
  10644. } else if (handler.players[pmid].Privatechat == 1) {
  10645. for (int i1 = 0; i1 < friends.length; i1++) {
  10646. if (friends[i] != 0) {
  10647. if (l == friends[i1]) {
  10648. if (handler.players[pmid].isinpm(misc.playerNameToInt64(playerName)) && playerRights > 2) {
  10649. loadpm(l, world);
  10650. return;
  10651. } else {
  10652. loadpm(l, 0);
  10653. return;
  10654. }
  10655. }
  10656. }
  10657. }
  10658. } else if (handler.players[pmid].Privatechat == 2) {
  10659. for (int i2 = 0; i2 < friends.length; i2++) {
  10660. if (friends[i] != 0) {
  10661. if (l == friends[i2] && playerRights < 2) {
  10662. loadpm(l, 0);
  10663. return;
  10664. }
  10665. }
  10666. }
  10667. }
  10668. }
  10669.  
  10670. public void sendpm(long name, int rights, byte[]chatmessage, int messagesize) {
  10671. outStream.createFrameVarSize(196);
  10672. outStream.writeQWord(name);
  10673. outStream.writeDWord(handler.lastchatid++); // must be different for each message
  10674. outStream.writeByte(rights);
  10675. outStream.writeBytes(chatmessage, messagesize, 0);
  10676. outStream.endFrameVarSize();
  10677. }
  10678.  
  10679. public void loadpm(long name, int world) {
  10680. if (world != 0) {
  10681. world += 9;
  10682. } else if (world == 0) {
  10683. world += 1;
  10684. }
  10685. outStream.createFrame(50);
  10686. outStream.writeQWord(name);
  10687. outStream.writeByte(world);
  10688. }
  10689.  
  10690.  
  10691.  
  10692. public boolean AttackNPC() {
  10693.  
  10694. int EnemyX = server.npcHandler.npcs[attacknpc].absX;
  10695. int EnemyY = server.npcHandler.npcs[attacknpc].absY;
  10696. int EnemyHP = server.npcHandler.npcs[attacknpc].HP;
  10697. int hitDiff = 0;
  10698. if (EnemyHP < 1) {
  10699. sendMessage("You can't attack that monster!");
  10700. return false;
  10701. }
  10702. int type = server.npcHandler.npcs[attacknpc].npcType;
  10703. int[]staffs = {
  10704. 2415,2416,2417,4170,4675
  10705. };
  10706. int[]arrowIds = {
  10707. 882, 884, 886, 888, 890, 892
  10708. };
  10709. int[]arrowGfx = {
  10710. 10, 9, 11, 12, 13, 15
  10711. };
  10712. int[]prem = {
  10713. 1643, 158, 49, 1613
  10714. };
  10715. for (int i = 0; i < prem.length; i++) {
  10716. if (prem[i] == type && ! premium) {
  10717. resetPos();
  10718. return false;
  10719. }
  10720. }
  10721. if (type == 1125) {
  10722. if (combatLevel < 70) {
  10723. sendMessage("You must be level 70 or higher to attack Dad");
  10724. resetPos();
  10725. ResetAttackNPC();
  10726. return false;
  10727. }
  10728. }
  10729. if (type == 84) {
  10730. if (combatLevel < 100) {
  10731. sendMessage("You must be level 100 or higher to attack Barrows monsters.");
  10732. resetPos();
  10733. ResetAttackNPC();
  10734. return false;
  10735. }
  10736. }
  10737. if (type == 2060) {
  10738. if (combatLevel < 100) {
  10739. sendMessage("You must be level 100 or higher to attack Barrows monsters.");
  10740. resetPos();
  10741. ResetAttackNPC();
  10742. return false;
  10743. }
  10744. }
  10745. if (type == 3200) {
  10746. if (combatLevel < 100) {
  10747. sendMessage("You must be level 100 or higher to attack Barrows monsters.");
  10748. resetPos();
  10749. ResetAttackNPC();
  10750. return false;
  10751. }
  10752. }
  10753. if (type == 258) {
  10754. if (combatLevel < 100) {
  10755. sendMessage("You must be level 100 or higher to attack General Khazard.");
  10756. resetPos();
  10757. ResetAttackNPC();
  10758. return false;
  10759. }
  10760. }
  10761. if (type == 795) {
  10762. if (combatLevel < 50) {
  10763. sendMessage("You must be level 50 or higher to attack the Ice Queen.");
  10764. resetPos();
  10765. ResetAttackNPC();
  10766. return false;
  10767. }
  10768. }
  10769. if (type == 1220) {
  10770. if (combatLevel < 50 ) {
  10771. sendMessage("You must be level 50 or higher to attack the Vampire.");
  10772. resetPos();
  10773. ResetAttackNPC();
  10774. return false;
  10775. }
  10776. }
  10777. if (type == 110 || type == 936) {
  10778. if (!playerHasItem(1543)) {
  10779. resetPos();
  10780. ResetAttackNPC();
  10781. return false;
  10782. }
  10783. }
  10784. if (type == 221 || type == 1961) {
  10785. if (!playerHasItem(1544)) {
  10786. resetPos();
  10787. ResetAttackNPC();
  10788. return false;
  10789. }
  10790. }
  10791. if (type == 910) {
  10792. if (!playerHasItem(1545)) {
  10793. resetPos();
  10794. ResetAttackNPC();
  10795. return false;
  10796. }
  10797. }
  10798. if (type == 1095) {
  10799. if (!playerHasItem(1546)) {
  10800. resetPos();
  10801. ResetAttackNPC();
  10802. return false;
  10803. }
  10804. }
  10805. if ((type == 941 || type == 55) && ! premium) {
  10806. resetPos();
  10807. return false;
  10808. }
  10809. for (int element : staffs) {
  10810. if ((playerEquipment[playerWeapon] == element)
  10811. && (autocast_spellIndex >= 0)) {
  10812. if (System.currentTimeMillis() - lastAttack < coolDown[autocast_spellIndex]) {
  10813. return false;
  10814. }
  10815. inCombat = true;
  10816. lastCombat = System.currentTimeMillis();
  10817. lastAttack = System.currentTimeMillis();
  10818. if (playerLevel[6] >= requiredLevel[autocast_spellIndex]) {
  10819. if(!playerHasItem(rune1[autocast_spellIndex], rune1a[autocast_spellIndex]) || !playerHasItem(rune2[autocast_spellIndex], rune2a[autocast_spellIndex]) || !playerHasItem(rune3[autocast_spellIndex], rune3a[autocast_spellIndex])) {
  10820. if(rune1[autocast_spellIndex] > 0 && rune2[autocast_spellIndex] < 1 && rune3[autocast_spellIndex] < 1) {
  10821. sendMessage("You need "+rune1a[autocast_spellIndex]+" "+GetItemName(rune1[autocast_spellIndex])+" to cast this spell");
  10822. }
  10823. if(rune1[autocast_spellIndex] > 0 && rune2[autocast_spellIndex] > 0 && rune3[autocast_spellIndex] < 1) {
  10824. sendMessage("You need "+rune1a[autocast_spellIndex]+" "+GetItemName(rune1[autocast_spellIndex])+" and "+rune2a[autocast_spellIndex]+" "+GetItemName(rune2[autocast_spellIndex])+" to cast this spell");
  10825. }
  10826. if(rune1[autocast_spellIndex] > 0 && rune2[autocast_spellIndex] > 0 && rune3[autocast_spellIndex] > 0) {
  10827. sendMessage("You need "+rune1a[autocast_spellIndex]+" "+GetItemName(rune1[autocast_spellIndex])+" and "+rune2a[autocast_spellIndex]+" "+GetItemName(rune2[autocast_spellIndex])+" and "+rune3a[autocast_spellIndex]+" "+GetItemName(rune3[autocast_spellIndex])+" to cast this spell");
  10828. }
  10829. break;
  10830. }
  10831. int roll = misc.random(100);
  10832. int hit = misc.random(baseDamage[autocast_spellIndex]
  10833. + playerBonus[11]);
  10834. hitDiff = hit;
  10835. setAnimation(1979);
  10836. updateRequired = true;
  10837. // AnimationReset = true;
  10838. // teleportToX = absX;
  10839. // teleportToY = absY;
  10840. resetWalkingQueue();
  10841. if (ancientType[autocast_spellIndex] == 3) {
  10842. // coolDown[coolDownGroup[autocast_spellIndex]] = 35;
  10843. server.npcHandler.npcs[attacknpc].effects[0] = 15;
  10844. stillgfx(369, EnemyY, EnemyX);
  10845. } else if (ancientType[autocast_spellIndex] == 2) {
  10846. stillgfx(377, EnemyY, EnemyX);
  10847. // coolDown[coolDownGroup[autocast_spellIndex]] = 12;
  10848. currentHealth += (int) (hit / 4);
  10849. if (currentHealth > playerLevel[playerHitpoints])
  10850. currentHealth = playerLevel[playerHitpoints];
  10851. } else
  10852. animation(78, EnemyY, EnemyX);
  10853. } else {
  10854. sendMessage("You need a magic level of "
  10855. + requiredLevel[autocast_spellIndex]+" Or you don't have enough runes.");
  10856. }
  10857. // coolDown[coolDownGroup[autocast_spellIndex]] = 12;
  10858. TurnPlayerTo(EnemyX, EnemyY);
  10859. addSkillXP(50*hitDiff, playerMagic);
  10860. addSkillXP(hitDiff * CombatExpRate, playerHitpoints);
  10861. teleportToX = absX;
  10862. teleportToY = absY;
  10863. server.npcHandler.npcs[attacknpc].StartKilling = localId;
  10864. server.npcHandler.npcs[attacknpc].RandomWalk = false;
  10865. server.npcHandler.npcs[attacknpc].IsUnderAttack = true;
  10866. server.npcHandler.npcs[attacknpc].hitDiff = hitDiff;
  10867. server.npcHandler.npcs[attacknpc].Killing[playerId] += hitDiff;
  10868. server.npcHandler.npcs[attacknpc].updateRequired = true;
  10869. server.npcHandler.npcs[attacknpc].hitUpdateRequired = true;
  10870. server.npcHandler.npcs[attacknpc].hit = true;
  10871. // server.npcHandler.npcs[attacknpc].TurnNPCTo(absX,absY);
  10872. // server.npcHandler.npcs[attacknpc].FocusUpdateRequired = true;
  10873. if(playerHasItem(rune1[autocast_spellIndex], rune1a[autocast_spellIndex]) && playerHasItem(rune2[autocast_spellIndex], rune2a[autocast_spellIndex]) && playerHasItem(rune3[autocast_spellIndex], rune3a[autocast_spellIndex])) {
  10874. deleteItem(rune1[autocast_spellIndex], rune1a[autocast_spellIndex]);
  10875. deleteItem(rune2[autocast_spellIndex], rune2a[autocast_spellIndex]);
  10876. deleteItem(rune3[autocast_spellIndex], rune3a[autocast_spellIndex]);
  10877. return false;}}}
  10878.  
  10879. long thisTime = System.currentTimeMillis();
  10880.  
  10881.  
  10882.  
  10883.  
  10884. hitDiff = misc.random(playerMaxHit);
  10885. if (FightType == 2)
  10886. hitDiff = (int)(hitDiff*1.20);
  10887. boolean UseBow = false;
  10888.  
  10889. for (int i = 0; i < bows.length; i++) {
  10890. if (playerEquipment[playerWeapon] == bows[i]) {
  10891. UseBow = true;
  10892. break;
  10893. }
  10894. }
  10895. int arrowgfx = 10;
  10896. for (int i1 = 0; i1 < arrowIds.length; i1++) {
  10897. if (playerEquipment[playerArrows] == arrowIds[i1]) {
  10898. arrowgfx = arrowGfx[i1];
  10899. }
  10900. }
  10901.  
  10902. if (UseBow && thisTime-lastAttack >= getbattleTimer()) {
  10903. teleportToX = absX;
  10904. teleportToY = absY;
  10905. CalculateRange();
  10906. hitDiff = misc.random(maxRangeHit());
  10907. if (DeleteArrow()) {
  10908. int offsetX = (absY-EnemyY)*-1;
  10909. int offsetY = (absX-EnemyX)*-1;
  10910. for (int a = 0; a < handler.maxPlayers; a++) {
  10911. client temp = (client)handler.players[a];
  10912. if (temp != null && temp.absX > 0 && ! temp.disconnected && Math.abs(absX-temp.absX) < 60 && Math.abs(absY-temp.absY) < 60) {
  10913. temp.createProjectile(absY, absX, offsetY, offsetX, 50, 90, arrowgfx, 43, 35, attacknpc+1);
  10914. }
  10915. }
  10916. server.npcHandler.npcs[attacknpc].hitDiff = hitDiff;
  10917. server.npcHandler.npcs[attacknpc].Killing[playerId] += hitDiff;
  10918. server.npcHandler.npcs[attacknpc].updateRequired = true;
  10919. server.npcHandler.npcs[attacknpc].hitUpdateRequired = true;
  10920. server.npcHandler.npcs[attacknpc].hit = true;
  10921. if (hitDiff == 0 && server.npcHandler.npcs[attacknpc].npcType == 941) {
  10922. server.npcHandler.npcs[attacknpc].animNumber = 89;
  10923. server.npcHandler.npcs[attacknpc].animUpdateRequired = true;
  10924. server.npcHandler.npcs[attacknpc].updateRequired = true;
  10925. }
  10926. updateRequired = true;
  10927. appearanceUpdateRequired = true;
  10928. } else {
  10929. ResetAttackNPC();
  10930. sendMessage("You're out of arrows!");
  10931. return false;
  10932. }
  10933. }
  10934. if (thisTime-lastAttack >= getbattleTimer()) {
  10935. inCombat = true;
  10936. lastCombat = System.currentTimeMillis();
  10937. } else if (thisTime-lastAttack >= 5000) {
  10938. inCombat = true;
  10939. lastCombat = System.currentTimeMillis();
  10940. } else {
  10941. return false;
  10942. }
  10943. if (UseBow || GoodDistance(EnemyX, EnemyY, absX, absY, 1) == true) {
  10944. if (server.npcHandler.npcs[attacknpc].IsDead == true) {
  10945. ResetAttackNPC();
  10946. } else {
  10947. if (playerEquipment[playerWeapon] == 4151) {
  10948. animation(341, EnemyY, EnemyX);
  10949. }
  10950. TurnPlayerTo(EnemyX, EnemyY);
  10951. updateRequired = true;
  10952. appearanceUpdateRequired = true;
  10953. actionAmount++;
  10954. setAnimation(GetWepAnim(playerEquipment[playerWeapon]));
  10955. if ((EnemyHP-hitDiff) <= 0) {
  10956. hitDiff = EnemyHP;
  10957. }
  10958. server.npcHandler.npcs[attacknpc].hitDiff = hitDiff;
  10959. server.npcHandler.npcs[attacknpc].Killing[playerId] += hitDiff;
  10960. server.npcHandler.npcs[attacknpc].updateRequired = true;
  10961. server.npcHandler.npcs[attacknpc].hitUpdateRequired = true;
  10962. server.npcHandler.npcs[attacknpc].hit = true;
  10963. if (hitDiff == 0 && server.npcHandler.npcs[attacknpc].npcType == 941) {
  10964. server.npcHandler.npcs[attacknpc].animNumber = 89;
  10965. server.npcHandler.npcs[attacknpc].animUpdateRequired = true;
  10966. server.npcHandler.npcs[attacknpc].updateRequired = true;
  10967. }
  10968. attackedNpc = true;
  10969. attackedNpcId = attacknpc;
  10970. double TotalExp = 0;
  10971. if (!UseBow)
  10972. animationReset = System.currentTimeMillis()+1200;
  10973. if (server.npcHandler.npcs[attacknpc].npcType != 1472) {
  10974. if (UseBow) {
  10975. TotalExp = (double)(50*hitDiff); //range
  10976. TotalExp = (double)(TotalExp*CombatExpRate);
  10977. addSkillXP((int)(TotalExp), 4);
  10978. } else if (FightType != 3) {
  10979. TotalExp = (double)(60*hitDiff); //Combat
  10980. TotalExp = (double)(TotalExp*CombatExpRate);
  10981. addSkillXP((int)(TotalExp), SkillID);
  10982. } else {
  10983. TotalExp = (double)(50*hitDiff); //Whip
  10984. TotalExp = (double)(TotalExp*CombatExpRate);
  10985. addSkillXP((int)(TotalExp), playerAttack);
  10986. addSkillXP((int)(TotalExp), playerDefence);
  10987. addSkillXP((int)(TotalExp), playerStrength);
  10988. }
  10989. TotalExp = (double)(25*hitDiff); //Hitpoints
  10990. TotalExp = (double)(TotalExp*CombatExpRate);
  10991. addSkillXP((int)(TotalExp), playerHitpoints);
  10992. attackTimer = 7;
  10993. if (debug)
  10994. sendMessage("hitDiff="+hitDiff+", elapsed="+(thisTime-lastAttack));
  10995. lastAttack = System.currentTimeMillis();
  10996. }
  10997. return true;
  10998.  
  10999. }
  11000. }
  11001. return false;
  11002. }
  11003. public boolean DeleteArrow() {
  11004. if (playerEquipmentN[playerArrows] == 0) {
  11005. deleteequiment(playerEquipment[playerArrows], playerArrows);
  11006. return false;
  11007. }
  11008. if (playerEquipment[playerWeapon] != 4214 && playerEquipmentN[playerArrows] > 0) {
  11009. outStream.createFrameVarSizeWord(34);
  11010. outStream.writeWord(1688);
  11011. outStream.writeByte(playerArrows);
  11012. outStream.writeWord(playerEquipment[playerArrows]+1);
  11013. if (playerEquipmentN[playerArrows]-1 > 254) {
  11014. outStream.writeByte(255);
  11015. outStream.writeDWord(playerEquipmentN[playerArrows]-1);
  11016. } else {
  11017. outStream.writeByte(playerEquipmentN[playerArrows]-1); //amount
  11018. }
  11019. outStream.endFrameVarSizeWord();
  11020. playerEquipmentN[playerArrows] -= 1;
  11021. }
  11022. updateRequired = true;
  11023. appearanceUpdateRequired = true;
  11024. return true;
  11025. }
  11026.  
  11027.  
  11028.  
  11029. public boolean ResetAttackNPC() {
  11030. if (attacknpc > -1 && attacknpc < server.npcHandler.maxNPCSpawns) {
  11031. server.npcHandler.npcs[attacknpc].IsUnderAttack = false;
  11032. server.npcHandler.npcs[attacknpc].IsUnderAttack = false;
  11033. server.npcHandler.npcs[attacknpc].StartKilling = 0;
  11034. }
  11035. //server.npcHandler.npcs[attacknpc].TurnNPCTo(server.npcHandler.npcs[attacknpc].absX, server.npcHandler.npcs[attacknpc].absY);
  11036. //server.npcHandler.npcs[attacknpc].FocusUpdateRequired = true;
  11037. IsAttackingNPC = false;
  11038. attacknpc = -1;
  11039. resetAnimation();
  11040. return true;
  11041. }
  11042.  
  11043. public void ManipulateDirection() {
  11044. // playerMD = misc.direction(absX, absY, skillX, skillY);
  11045. if (playerMD != -1) {
  11046. // playerMD >>= 1;
  11047. updateRequired = true;
  11048. dirUpdateRequired = true;
  11049. }
  11050. }
  11051.  
  11052. public void ReplaceObject(int objectX, int objectY, int NewObjectID, int Face, int ObjectType) {
  11053. outStream.createFrame(85);
  11054. outStream.writeByteC(objectY-(mapRegionY*8));
  11055. outStream.writeByteC(objectX-(mapRegionX*8));
  11056.  
  11057. outStream.createFrame(101);
  11058. outStream.writeByteC((ObjectType << 2)+(Face & 3));
  11059. outStream.writeByte(0);
  11060.  
  11061. if (NewObjectID != -1) {
  11062. outStream.createFrame(151);
  11063. outStream.writeByteS(0);
  11064. outStream.writeWordBigEndian(NewObjectID);
  11065. outStream.writeByteS((ObjectType << 2)+(Face & 3));
  11066. // FACE: 0= WEST | -1 = NORTH | -2 = EAST | -3 = SOUTH
  11067. // ObjectType: 0-3 wall objects, 4-8 wall decoration, 9: diag. walls, 10-11 world objects, 12-21: roofs, 22: floor decoration
  11068. }
  11069. }
  11070.  
  11071. public int GetNPCID(int coordX, int coordY) {
  11072. for (int i = 0; i < server.npcHandler.maxNPCSpawns; i++) {
  11073. if (server.npcHandler.npcs[i] != null) {
  11074. if (server.npcHandler.npcs[i].absX == coordX && server.npcHandler.npcs[i].absY == coordY) {
  11075. return server.npcHandler.npcs[i].npcType;
  11076. }
  11077. }
  11078. }
  11079. return 1;
  11080. }
  11081.  
  11082. public String GetNpcName(int NpcID) {
  11083. for (int i = 0; i < server.npcHandler.maxListedNPCs; i++) {
  11084. if (server.npcHandler.NpcList[i] != null) {
  11085. if (server.npcHandler.NpcList[i].npcId == NpcID) {
  11086. return server.npcHandler.NpcList[i].npcName;
  11087. }
  11088. }
  11089. }
  11090. return "!! NOT EXISTING NPC !!! - ID:"+NpcID;
  11091. }
  11092.  
  11093. public String GetItemName(int ItemID) {
  11094. for (int i = 0; i < server.itemHandler.MaxListedItems; i++) {
  11095. if (server.itemHandler.ItemList[i] != null) {
  11096. if (server.itemHandler.ItemList[i].itemId == ItemID) {
  11097. return server.itemHandler.ItemList[i].itemName;
  11098. }
  11099. }
  11100. }
  11101. return "!! NOT EXISTING ITEM !!! - ID:"+ItemID;
  11102. }
  11103.  
  11104. public double GetItemShopValue(int ItemID, int Type, int fromSlot) {
  11105. double ShopValue = 1;
  11106. double Overstock = 0;
  11107. double TotPrice = 0;
  11108.  
  11109. for (int i = 0; i < server.itemHandler.MaxListedItems; i++) {
  11110. if (server.itemHandler.ItemList[i] != null) {
  11111. if (server.itemHandler.ItemList[i].itemId == ItemID) {
  11112. ShopValue = server.itemHandler.ItemList[i].ShopValue;
  11113. }
  11114. }
  11115. }
  11116. /*Overstock = server.shopHandler.ShopItemsN[MyShopID][fromSlot]
  11117. - server.shopHandler.ShopItemsSN[MyShopID][fromSlot];*/
  11118. TotPrice = (ShopValue*1.26875); // Calculates price for 1 item, in db is stored for 0 items (strange but true)
  11119. /*if (Overstock > 0) { // more then default -> cheaper
  11120. TotPrice -= ((ShopValue / 100) * (1.26875 * Overstock));
  11121. } else if (Overstock < 0) { // less then default -> exspensive
  11122. TotPrice += ((ShopValue / 100) * (1.26875 * Overstock));
  11123. }*/
  11124. if (server.shopHandler.ShopBModifier[MyShopID] == 1) {
  11125. TotPrice *= 1.25; // 25% more expensive (general stores only)
  11126. if (Type == 1) {
  11127. TotPrice *= 0.4; // general store buys item at 40% of its own selling value
  11128. }
  11129. } else if (Type == 1) {
  11130. TotPrice *= 0.6; // other stores buy item at 60% of their own selling value
  11131. }
  11132. return TotPrice;
  11133. }
  11134.  
  11135. public int GetUnnotedItem(int ItemID) {
  11136. int NewID = 0;
  11137. String NotedName = "";
  11138.  
  11139. for (int i = 0; i < server.itemHandler.MaxListedItems; i++) {
  11140. if (server.itemHandler.ItemList[i] != null) {
  11141. if (server.itemHandler.ItemList[i].itemId == ItemID) {
  11142. NotedName = server.itemHandler.ItemList[i].itemName;
  11143. }
  11144. }
  11145. }
  11146. for (int i = 0; i < server.itemHandler.MaxListedItems; i++) {
  11147. if (server.itemHandler.ItemList[i] != null) {
  11148. if (server.itemHandler.ItemList[i].itemName == NotedName) {
  11149. if (server.itemHandler.ItemList[i].itemDescription.startsWith("Swap this note at any bank for a") == false) {
  11150. NewID = server.itemHandler.ItemList[i].itemId;
  11151. break;
  11152. }
  11153. }
  11154. }
  11155. }
  11156. return NewID;
  11157. }
  11158.  
  11159. public void WriteEnergy() {
  11160. //if (playerRights < 3) {
  11161. playerEnergy = 100;
  11162. //}
  11163. sendFrame126(playerEnergy+"%", 149);
  11164. }
  11165.  
  11166. public void ResetBonus() {
  11167. for (int i = 0; i < playerBonus.length; i++) {
  11168. playerBonus[i] = 0;
  11169. }
  11170. }
  11171. public void GetBonus() {
  11172. for (int i = 0; i < playerEquipment.length; i++) {
  11173. if (playerEquipment[i] > -1) {
  11174. for (int j = 0; j < 9999; j++) {
  11175. if (server.itemHandler.ItemList[j] != null) {
  11176. if (server.itemHandler.ItemList[j].itemId == playerEquipment[i]) {
  11177. for (int k = 0; k < playerBonus.length; k++) {
  11178. playerBonus[k] += server.itemHandler.ItemList[j].Bonuses[k];
  11179. }
  11180. break;
  11181. }
  11182. }
  11183. }
  11184. }
  11185. }
  11186. for (int i = 0; i < 5; i++) {
  11187. playerBonus[i] += (int)(playerLevel[0]/10);
  11188. }
  11189. /*
  11190. public String BonusName[] = {
  11191. "Stab", "Slash", "Crush", "Magic", "Range",
  11192. "Stab", "Slash", "Crush", "Magic", "Range", "Strength", "Prayer"
  11193. };
  11194. */
  11195. playerBonus[5] += (int)(playerLevel[1]/5);
  11196. playerBonus[6] += (int)(playerLevel[1]/5);
  11197. playerBonus[7] += (int)(playerLevel[1]/5);
  11198. playerBonus[8] += (int)(playerLevel[1]/5);
  11199. playerBonus[9] += (int)(playerLevel[1]/5);
  11200.  
  11201. playerBonus[10] += (int)(playerLevel[2]/5);
  11202. //maxHealth = playerLevel[3];
  11203. }
  11204. public void GetBonus_old() {
  11205. for (int i = 0; i < playerEquipment.length; i++) {
  11206. if (playerEquipment[i] > -1) {
  11207. for (int j = 0; j < server.itemHandler.MaxListedItems; j++) {
  11208. if (server.itemHandler.ItemList[i] != null) {
  11209. if (server.itemHandler.ItemList[j] == null)
  11210. println("It's null");
  11211. if (server.itemHandler.ItemList[j].itemId == playerEquipment[i]) {
  11212. for (int k = 0; k < playerBonus.length; k++) {
  11213. playerBonus[k] += server.itemHandler.ItemList[j].Bonuses[k];
  11214. }
  11215. break;
  11216. }
  11217. } else {
  11218. println("Error: ItemList = null");
  11219. }
  11220. }
  11221. }
  11222. }
  11223. }
  11224.  
  11225. public void WriteBonus() {
  11226. int offset = 0;
  11227. String send = "";
  11228.  
  11229. for (int i = 0; i < playerBonus.length; i++) {
  11230. if (playerBonus[i] >= 0) {
  11231. send = BonusName[i]+": +"+playerBonus[i];
  11232. } else {
  11233. send = BonusName[i]+": -"+java.lang.Math.abs(playerBonus[i]);
  11234. }
  11235.  
  11236. if (i == 10) {
  11237. offset = 1;
  11238. }
  11239. if (i == 11) {
  11240. send = "Spell Dmg: +"+playerBonus[i]+"";
  11241. }
  11242. sendFrame126(send, (1675+i+offset));
  11243. }
  11244. CalculateMaxHit();
  11245.  
  11246. /* for (int i = 4000; i <= 7000; i++) {
  11247. sendFrame126("T"+i, i);
  11248. println_debug("Sended: Test"+i);
  11249. }*/ // USED FOR TESTING INTERFACE NUMBERS !
  11250. }
  11251.  
  11252. public void CalculateMaxHit() {
  11253. double MaxHit = 0;
  11254. int StrBonus = playerBonus[10]; // Strength Bonus
  11255. int Strength = playerLevel[playerStrength]; // Strength
  11256. int RngBonus = playerBonus[4]; // Ranged Bonus
  11257. int Range = playerLevel[playerRanged]; // Ranged
  11258.  
  11259. if (FightType == 1 || FightType == 4) {
  11260. // Accurate & Defensive
  11261. MaxHit += (double)(1.05+(double)((double)(StrBonus*Strength)*0.00175));
  11262. } else if (FightType == 2) {
  11263. // Aggresive
  11264. MaxHit += (double)(1.35+(double)((double)(StrBonus*Strength)*0.00175));
  11265. } else if (FightType == 3) {
  11266. // Controlled
  11267. MaxHit += (double)(1.15+(double)((double)(StrBonus*Strength)*0.00175));
  11268. }
  11269. MaxHit += (double)(Strength*0.1);
  11270. /*
  11271. if (StrPotion == 1) { // Strength Potion
  11272. MaxHit += (double) (Strength * 0.0014);
  11273. } else if (StrPotion == 2) { // Super Strength Potion
  11274. MaxHit += (double) (Strength * 0.0205);
  11275. }*/
  11276. if (StrPrayer == 1) {
  11277. // Burst Of Strength
  11278. MaxHit += (double)(Strength*0.005);
  11279. } else if (StrPrayer == 2) {
  11280. // Super Human Strength
  11281. MaxHit += (double)(Strength*0.01);
  11282. } else if (StrPrayer == 3) {
  11283. // Ultimate Strength
  11284. MaxHit += (double)(Strength*0.015);
  11285. }
  11286. if (FightType == 5 || FightType == 6) {
  11287. // Accurate and Longranged
  11288. MaxHit += (double)(1.05+(double)((double)(RngBonus*Range)*0.00075));
  11289. } else if (FightType == 7) {
  11290. // Rapid
  11291. MaxHit += (double)(1.35+(double)((double)(RngBonus)*0.00025));
  11292. }
  11293. //MaxHit += (double) (Range * 0.03);
  11294. playerMaxHit = (int)Math.floor(MaxHit);
  11295. }
  11296.  
  11297. public boolean GoodDistance(int objectX, int objectY, int playerX, int playerY, int distance) {
  11298. for (int i = 0; i <= distance; i++) {
  11299. for (int j = 0; j <= distance; j++) {
  11300. if ((objectX+i) == playerX && ((objectY+j) == playerY || (objectY-j) == playerY || objectY == playerY)) {
  11301. return true;
  11302. } else if ((objectX-i) == playerX && ((objectY+j) == playerY || (objectY-j) == playerY || objectY == playerY)) {
  11303. return true;
  11304. } else if (objectX == playerX && ((objectY+j) == playerY || (objectY-j) == playerY || objectY == playerY)) {
  11305. return true;
  11306. }
  11307. }
  11308. }
  11309. return false;
  11310. }
  11311.  
  11312. public boolean GoodDistance2(int objectX, int objectY, int playerX, int playerY, int distance) {
  11313. for (int i = 0; i <= distance; i++) {
  11314. for (int j = 0; j <= distance; j++) {
  11315. if (objectX == playerX && ((objectY+j) == playerY || (objectY-j) == playerY || objectY == playerY)) {
  11316. return true;
  11317. } else if (objectY == playerY && ((objectX+j) == playerX || (objectX-j) == playerX || objectX == playerX)) {
  11318. return true;
  11319. }
  11320. }
  11321. }
  11322. return false;
  11323. }
  11324.  
  11325. public void wc(int speed, int level, int xp, int item, int chance) {
  11326. woodcutting[0] = speed;
  11327. woodcutting[1] = level;
  11328. woodcutting[2] = xp;
  11329. woodcutting[4] = item;
  11330. woodcutting[5] = chance;
  11331. IsUsingSkill = true;
  11332. skillX = server.OC.objectX;
  11333. skillY = server.OC.objectY;
  11334. }
  11335.  
  11336. public void mine(int speed, int level, int xp, int item) {
  11337. mining[0] = speed;
  11338. mining[1] = level;
  11339. mining[2] = xp;
  11340. mining[4] = item;
  11341. IsUsingSkill = true;
  11342. skillX = server.OC.objectX;
  11343. skillY = server.OC.objectY;
  11344. }
  11345.  
  11346. public void cookFish(int amount) {
  11347. closeInterface();
  11348. cooking = true;
  11349. cookAmount = amount;
  11350. }
  11351. public void startCooking() {
  11352. int[] fish = {317};
  11353. String[] fishtext = {"Shrimp"};
  11354. int[][] cooked = {{315,323}};//{cooked fish, burnt fish}
  11355. int[][] cook = {{1,55,14,10,70}}; //{level,burnrate,level stop burning,level stop burning with gauntless,experience}
  11356. for(int i = 0; i < fish.length; i++)
  11357. {
  11358. int cookie = (cook[i][1])+(playerLevel[playerCooking]/2);
  11359. if (cookAmount < 1)
  11360. {
  11361. resetAction();
  11362. return;
  11363. }
  11364. if(cookie > 100)
  11365. {
  11366. cookie = 100;
  11367. }
  11368. cookAmount--;
  11369. //pEmote = 883;
  11370. updateRequired = true;
  11371. appearanceUpdateRequired = true;
  11372. if (playerHasItem(fish[i]) && playerLevel[playerCooking] >= cook[i][0])
  11373. {
  11374. deleteItem(fish[i], 1);
  11375. if(misc.random(100) <= cookie || playerLevel[playerCooking] >= cook[i][2] ||
  11376. playerLevel[playerCooking] >= cook[i][3] && playerEquipment[playerHands] == gauntless ||
  11377. playerEquipment[playerHands] == gauntless && misc.random(100) <= cookie+(cookie*0.2))
  11378. {
  11379. addItem(cooked[i][0], 1);
  11380. addSkillXP(cook[i][4], playerCooking);
  11381. sendMessage("You success to cook the "+fishtext[i]+".");
  11382. }
  11383. else
  11384. {
  11385. addItem(cooked[i][1], 1);
  11386. sendMessage("Oh dear you burnt the "+fishtext[i]+"!");
  11387. }
  11388. }
  11389. }
  11390. }
  11391.  
  11392. /* HEALING*/
  11393. public boolean healing() {
  11394. if (actionTimer == 0 && healing[0] == 1) {
  11395. actionAmount++;
  11396. actionTimer = 4;
  11397. OriginalShield = playerEquipment[playerShield];
  11398. OriginalWeapon = playerEquipment[playerWeapon];
  11399. playerEquipment[playerShield] = -1;
  11400. playerEquipment[playerWeapon] = -1;
  11401. setAnimation(0x33D);
  11402. healing[0] = 2;
  11403. }
  11404. if (actionTimer == 0 && healing[0] == 2) {
  11405. deleteItem(healing[4], GetItemSlot(healing[4]), 1);
  11406. int Heal = healing[1];
  11407. int HealDiff = (healing[2]-healing[1]);
  11408.  
  11409. if (HealDiff > 0) {
  11410. Heal += misc.random(HealDiff);
  11411. }
  11412. if (healing[3] != -1) {
  11413. addItem(healing[3], 1);
  11414. }
  11415. NewHP = (playerLevel[playerHitpoints]+Heal);
  11416. if (NewHP > getLevelForXP(playerXP[playerHitpoints])) {
  11417. NewHP = getLevelForXP(playerXP[playerHitpoints]);
  11418. }
  11419. sendMessage("You eat the "+GetItemName(healing[4])+".");
  11420. playerEquipment[playerWeapon] = OriginalWeapon;
  11421. playerEquipment[playerShield] = OriginalShield;
  11422. OriginalWeapon = -1;
  11423. OriginalShield = -1;
  11424. resetAnimation();
  11425. resetHE();
  11426. }
  11427. return true;
  11428. }
  11429.  
  11430. public boolean resetHE() {
  11431. healing[0] = 0;
  11432. healing[1] = 0;
  11433. healing[2] = 0;
  11434. healing[3] = -1;
  11435. healing[4] = -1;
  11436. IsUsingSkill = false;
  11437. return true;
  11438. }
  11439.  
  11440. /* MINING*/
  11441. public boolean mining() {
  11442. int MIPickAxe = 0;
  11443. if (IsMining == true) {
  11444. MIPickAxe = 1; // If Mining -> Go trough loop, passby MICheckPickAxe to prevent originalweapon loss, 1 to tell you got pick axe, no function left for MIPickAxe if mining, so 1 is enough.
  11445. } else {
  11446. MIPickAxe = MICheckPickAxe();
  11447. }
  11448. if (MIPickAxe > 0) {
  11449. if (playerLevel[playerMining] >= mining[1]) {
  11450. if (freeSlots() > 0) {
  11451. if (System.currentTimeMillis()-lastAction >= 1000 && IsMining == false) {
  11452. lastAction = System.currentTimeMillis();
  11453. sendMessage("You swing your pick axe at the rock...");
  11454. setAnimation(0x554);
  11455. IsMining = true;
  11456. }
  11457. if (System.currentTimeMillis()-lastAction >= mining[0] && IsMining == true) {
  11458. lastAction = System.currentTimeMillis();
  11459. addSkillXP((mining[2]*mining[3]*2), playerMining);
  11460. if (freeSlots() > 0) {
  11461. sendMessage("You get some logs.");
  11462. addItem(mining[4], 1);
  11463. } else {
  11464. playerEquipment[playerWeapon] = OriginalWeapon;
  11465. OriginalWeapon = -1;
  11466. resetAnimation();
  11467. IsMining = false;
  11468. resetMI();
  11469. }
  11470. }
  11471. } else {
  11472. sendMessage("Not enough space in your inventory.");
  11473. resetMI();
  11474. return false;
  11475. }
  11476. } else {
  11477. sendMessage("You need "+mining[1]+" "+statName[playerMining]+" to mine those ores.");
  11478. resetMI();
  11479. return false;
  11480. }
  11481. } else {
  11482. sendMessage("You need a pick axe to mine ores.");
  11483. resetMI();
  11484. return false;
  11485. }
  11486. return true;
  11487. }
  11488.  
  11489. public boolean resetMI() {
  11490. mining[0] = 0;
  11491. mining[1] = 0;
  11492. mining[2] = 0;
  11493. mining[4] = 0;
  11494. skillX = -1;
  11495. skillY = -1;
  11496. IsMining = false;
  11497. IsUsingSkill = false;
  11498. return true;
  11499. }
  11500.  
  11501. public int MICheckPickAxe() {
  11502. int Hand;
  11503. int Shield;
  11504. int Bag;
  11505. int PickAxe;
  11506.  
  11507. Hand = playerEquipment[playerWeapon];
  11508. Shield = playerEquipment[playerShield];
  11509. PickAxe = 0;
  11510. switch (Hand) {
  11511. case 1265:
  11512. // Bronze Pick Axe
  11513. PickAxe = 1;
  11514. break;
  11515.  
  11516. case 1267:
  11517. // Iron Pick Axe
  11518. PickAxe = 2;
  11519. break;
  11520.  
  11521. case 1269:
  11522. // Steel Pick Axe
  11523. PickAxe = 3;
  11524. break;
  11525.  
  11526. case 1273:
  11527. // Mithril Pick Axe
  11528. PickAxe = 4;
  11529. break;
  11530.  
  11531. case 1271:
  11532. // Adamant Pick Axe
  11533. PickAxe = 5;
  11534. break;
  11535.  
  11536. case 1275:
  11537. // Rune Pick Axe
  11538. PickAxe = 6;
  11539. break;
  11540. }
  11541. if (PickAxe > 0) {
  11542. return PickAxe;
  11543. }
  11544. return 0;
  11545. }
  11546.  
  11547. /* PRAYER*/
  11548. public boolean prayer() {
  11549. if (actionTimer != 0)
  11550. return false;
  11551. if (playerLevel[playerPrayer] >= prayer[1]) {
  11552. if (actionTimer == 0 && prayer[0] == 1) {
  11553. //actionAmount++;
  11554. actionTimer = 4;
  11555. OriginalShield = playerEquipment[playerShield];
  11556. OriginalWeapon = playerEquipment[playerWeapon];
  11557. //playerEquipment[playerShield] = -1;
  11558. //playerEquipment[playerWeapon] = -1;
  11559. setAnimation(0x33B);
  11560. prayer[0] = 2;
  11561. }
  11562. if (actionTimer == 0 && prayer[0] == 2 /* && playerHasItem(prayer[4])*/) {
  11563. deleteItem(prayer[4], prayer[5], playerItemsN[prayer[5]]);
  11564. addSkillXP((prayer[2]*prayer[3]), playerPrayer);
  11565. sendMessage("You bury the bones");
  11566. playerEquipment[playerWeapon] = OriginalWeapon;
  11567. playerEquipment[playerShield] = OriginalShield;
  11568. //OriginalWeapon = -1;
  11569. //OriginalShield = -1;
  11570. resetAnimation();
  11571. resetPR();
  11572. //actionAmount++;
  11573. actionTimer = 4;
  11574. }
  11575. }
  11576. return true;
  11577. }
  11578.  
  11579. public boolean resetPR() {
  11580. prayer[0] = 0;
  11581. prayer[1] = 0;
  11582. prayer[2] = 0;
  11583. prayer[4] = -1;
  11584. prayer[5] = -1;
  11585. IsUsingSkill = false;
  11586. return true;
  11587. }
  11588.  
  11589.  
  11590.  
  11591.  
  11592.  
  11593.  
  11594. public boolean resetSM() {
  11595. if (OriginalWeapon > -1) {
  11596. playerEquipment[playerWeapon] = OriginalWeapon;
  11597. OriginalWeapon = -1;
  11598. playerEquipment[playerShield] = OriginalShield;
  11599. OriginalShield = -1;
  11600. }
  11601. return true;
  11602. }
  11603.  
  11604. /* SMITHING*/
  11605.  
  11606. public void ReplaceItems(int newID, int oldID, int newAmount, int oldAmount) {
  11607. for (int i = 0; i < playerItems.length; i++) {
  11608. if (playerItems[i] == oldID + 1 && oldAmount > 0) {
  11609. playerItems[i] = 0;
  11610. oldAmount--;
  11611. resetItems(3214);
  11612. }
  11613. }
  11614. if (oldAmount == 0) {
  11615. addItem(newID, newAmount);
  11616. }
  11617. }
  11618. public int removeBar(int removeID) {
  11619. int[] smithitem = {
  11620. 1205,1351,1422,1139,1277,4819,819,1321,39,1291,1155,864,1173,1337,1375,1103,1189,3095,1307,1087,1075,1117 //bronze
  11621. //iron
  11622. //steel
  11623. //mithril
  11624. //adamant
  11625. //rune
  11626. };
  11627. int[] bar = {
  11628. 2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349 //bronze
  11629. //iron
  11630. //steel
  11631. //mithril
  11632. //adamant
  11633. //rune
  11634. };
  11635. for(int i = 0; i < smithitem.length; i++)
  11636. if (removeID == smithitem[i]) {
  11637. return bar[i];
  11638. }
  11639. return 0;
  11640. }
  11641.  
  11642. public int barsNeeded(int slot, int column) {
  11643. if (column == 1119) {
  11644. if (slot == 0 || slot == 1) {
  11645. return 1;
  11646. }
  11647. if (slot == 2 || slot == 3) {
  11648. return 2;
  11649. }
  11650. if (slot == 4) {
  11651. return 3;
  11652. }
  11653. }
  11654. if (column == 1120) {
  11655. if (slot == 0 || slot == 1) {
  11656. return 1;
  11657. }
  11658. if (slot == 2 || slot == 3) {
  11659. return 3;
  11660. }
  11661. if (slot == 4) {
  11662. return 2;
  11663. }
  11664. }
  11665. if (column == 1121) {
  11666. if (slot == 0 || slot == 1 || slot == 2) {
  11667. return 3;
  11668. }
  11669. if (slot == 3) {
  11670. return 5;
  11671. }
  11672. if (slot == 4) {
  11673. return 1;
  11674. }
  11675. }
  11676. if (column == 1122) {
  11677. if (slot == 0 || slot == 4) {
  11678. return 1;
  11679. }
  11680. if (slot == 1 || slot == 2) {
  11681. return 2;
  11682. }
  11683. if (slot == 3) {
  11684. return 3;
  11685. }
  11686. }
  11687. if (column == 1123) {
  11688. if (slot == 0 || slot == 1 || slot == 2 || slot == 3 || slot == 4) {
  11689. return 1;
  11690. }
  11691. }
  11692. return 0;
  11693. }
  11694.  
  11695. public int barsNeeded2(int slot, int column) {
  11696. if (column == 1119) {
  11697. if (slot == 0 || slot == 1) {
  11698. return 5;
  11699. }
  11700. if (slot == 2 || slot == 3) {
  11701. return 10;
  11702. }
  11703. if (slot == 4) {
  11704. return 15;
  11705. }
  11706. }
  11707. if (column == 1120) {
  11708. if (slot == 0 || slot == 1) {
  11709. return 5;
  11710. }
  11711. if (slot == 2 || slot == 3) {
  11712. return 15;
  11713. }
  11714. if (slot == 4) {
  11715. return 10;
  11716. }
  11717. }
  11718. if (column == 1121) {
  11719. if (slot == 0 || slot == 1 || slot == 2) {
  11720. return 15;
  11721. }
  11722. if (slot == 3) {
  11723. return 25;
  11724. }
  11725. if (slot == 4) {
  11726. return 5;
  11727. }
  11728. }
  11729. if (column == 1122) {
  11730. if (slot == 0 || slot == 4) {
  11731. return 5;
  11732. }
  11733. if (slot == 1 || slot == 2) {
  11734. return 10;
  11735. }
  11736. if (slot == 3) {
  11737. return 15;
  11738. }
  11739. }
  11740. if (column == 1123) {
  11741. if (slot == 0 || slot == 1 || slot == 2 || slot == 3 || slot == 4) {
  11742. return 5;
  11743. }
  11744. }
  11745. return 0;
  11746. }
  11747.  
  11748. public int barsNeeded3(int slot, int column) {
  11749. if (column == 1119) {
  11750. if (slot == 0 || slot == 1) {
  11751. return 10;
  11752. }
  11753. if (slot == 2 || slot == 3) {
  11754. return 20;
  11755. }
  11756. if (slot == 4) {
  11757. return 30;
  11758. }
  11759. }
  11760. if (column == 1120) {
  11761. if (slot == 0 || slot == 1) {
  11762. return 10;
  11763. }
  11764. if (slot == 2 || slot == 3) {
  11765. return 30;
  11766. }
  11767. if (slot == 4) {
  11768. return 20;
  11769. }
  11770. }
  11771. if (column == 1121) {
  11772. if (slot == 0 || slot == 1 || slot == 2) {
  11773. return 30;
  11774. }
  11775. if (slot == 3) {
  11776. return 50;
  11777. }
  11778. if (slot == 4) {
  11779. return 10;
  11780. }
  11781. }
  11782. if (column == 1122) {
  11783. if (slot == 0 || slot == 4) {
  11784. return 10;
  11785. }
  11786. if (slot == 1 || slot == 2) {
  11787. return 20;
  11788. }
  11789. if (slot == 3) {
  11790. return 30;
  11791. }
  11792. }
  11793. if (column == 1123) {
  11794. if (slot == 0 || slot == 1 || slot == 2 || slot == 3 || slot == 4) {
  11795. return 10;
  11796. }
  11797. }
  11798. return 0;
  11799. }
  11800.  
  11801. public int smithXP(int barType, int barAmount) {
  11802. int[] bar = {2349,2351,2353,2359,2361,2363};
  11803. int[] xp = {50,100,200,400,800,1400};
  11804. for(int i = 0; i < bar.length; i++) {
  11805. if (barType == bar[i]) {
  11806. return barAmount * xp[i];
  11807. }
  11808. setAnimation(898);
  11809. return 0;
  11810. }
  11811. return -1;
  11812. }
  11813.  
  11814. public boolean canSmith(int item) {
  11815. int[] smithitem = {
  11816. 1205,1351,1422,1139,1277,4819,819,1321,39,1291,1155,864,1173,1337,1375,1103,1189,3095,1307,1087,1075,1117 //bronze
  11817. //iron
  11818. //steel
  11819. //mithril
  11820. //adamant
  11821. //rune
  11822. };
  11823. int[] smithlevel = {
  11824. 1,1,2,3,4,4,4,5,5,6,7,7,8,9,10,11,12,13,14,16,16,18 //bronze
  11825. //iron
  11826. //steel
  11827. //mithril
  11828. //adamant
  11829. //rune
  11830. };
  11831. for(int i = 0; i < smithitem.length; i++)
  11832. if (item == smithitem[i] && playerLevel[13] >= smithlevel[i]) {
  11833. return true;
  11834. }
  11835. return false;
  11836. }
  11837.  
  11838. public void addItemToSmith(int id, int slot, int column, int amount) {
  11839. outStream.createFrameVarSizeWord(34); // init item to smith screen
  11840. outStream.writeWord(column); // Column Across Smith Screen
  11841. outStream.writeByte(4); // Total Rows?
  11842. outStream.writeDWord(slot); // Row Down The Smith Screen
  11843. outStream.writeWord(id + 1); // item
  11844. outStream.writeByte(amount); // how many there are?
  11845. outStream.endFrameVarSizeWord();
  11846.  
  11847. }
  11848.  
  11849.  
  11850. public void initSmithing(int barType) {
  11851. outStream.createFrame(97);
  11852. outStream.writeWord(994);
  11853. if (amountOfItem(barType) < 5) {
  11854. sendQuest("@red@5bars@red@", 1112);
  11855. } else {
  11856. sendQuest("@gre@5bars@gre@", 1112);
  11857. }
  11858. if (amountOfItem(barType) < 3) {
  11859. sendQuest("@red@3bars@red@", 1109);
  11860. sendQuest("@red@3bars@red@", 1110);
  11861. sendQuest("@red@3bars@red@", 1118);
  11862. sendQuest("@red@3bars@red@", 1111);
  11863. sendQuest("@red@3bars@red@", 1095);
  11864. sendQuest("@red@3bars@red@", 1115);
  11865. sendQuest("@red@3bars@red@", 1090);
  11866. } else {
  11867. sendQuest("@gre@3bars@gre@", 1109);
  11868. sendQuest("@gre@3bars@gre@", 1110);
  11869. sendQuest("@gre@3bars@gre@", 1118);
  11870. sendQuest("@gre@3bars@gre@", 1111);
  11871. sendQuest("@gre@3bars@gre@", 1095);
  11872. sendQuest("@gre@3bars@gre@", 1115);
  11873. sendQuest("@gre@3bars@gre@", 1090);
  11874. }
  11875. if (amountOfItem(barType) < 2) {
  11876. sendQuest("@red@2bars@red@", 1113);
  11877. sendQuest("@red@2bars@red@", 1116);
  11878. sendQuest("@red@2bars@red@", 1114);
  11879. sendQuest("@red@2bars@red@", 1089);
  11880. sendQuest("@red@2bars@red@", 8428);
  11881. } else {
  11882. sendQuest("@gre@2bars@gre@", 1113);
  11883. sendQuest("@gre@2bars@gre@", 1116);
  11884. sendQuest("@gre@2bars@gre@", 1114);
  11885. sendQuest("@gre@2bars@gre@", 1089);
  11886. sendQuest("@gre@2bars@gre@", 8428);
  11887. }
  11888. if (amountOfItem(barType) < 1) {
  11889. sendQuest("@red@1bar@red@", 1125);
  11890. sendQuest("@red@1bar@red@", 1126);
  11891. sendQuest("@red@1bar@red@", 1127);
  11892. sendQuest("@red@1bar@red@", 1124);
  11893. sendQuest("@red@1bar@red@", 1128);
  11894. sendQuest("@red@1bar@red@", 1129);
  11895. sendQuest("@red@1bar@red@", 1130);
  11896. sendQuest("@red@1bar@red@", 13357);
  11897. sendQuest("@red@1bar@red@", 1131);
  11898. sendQuest("@red@1bar@red@", 11459);
  11899. } else {
  11900. sendQuest("@gre@1bar@gre@", 1125);
  11901. sendQuest("@gre@1bar@gre@", 1126);
  11902. sendQuest("@gre@1bar@gre@", 1127);
  11903. sendQuest("@gre@1bar@gre@", 1124);
  11904. sendQuest("@gre@1bar@gre@", 1128);
  11905. sendQuest("@gre@1bar@gre@", 1129);
  11906. sendQuest("@gre@1bar@gre@", 1130);
  11907. sendQuest("@gre@1bar@gre@", 13357);
  11908. sendQuest("@gre@1bar@gre@", 1131);
  11909. sendQuest("@gre@1bar@gre@", 11459);
  11910. }
  11911. if (barType == 2349) { // Bronze
  11912. if (playerLevel[13] < 18) {
  11913. sendQuest("@bla@Plate body@bla@", 1101);
  11914. } else {
  11915. sendQuest("@whi@Plate body@whi@", 1101);
  11916. }
  11917. if (playerLevel[13] < 16) {
  11918. sendQuest("@bla@Plate legs@bla@", 1099);
  11919. sendQuest("@bla@Plate skirt@bla@", 1100);
  11920. } else {
  11921. sendQuest("@whi@Plate legs@whi@", 1099);
  11922. sendQuest("@whi@Plate skirt@whi@", 1100);
  11923. }
  11924. if (playerLevel[13] < 14) {
  11925. sendQuest("@bla@2 hand sword@bla@", 1088);
  11926. } else {
  11927. sendQuest("@whi@2 hand sword@whi@", 1088);
  11928. }
  11929. if (playerLevel[13] < 13) {
  11930. sendQuest("@bla@Claws@bla@", 8429);
  11931. } else {
  11932. sendQuest("@whi@Claws@whi@", 8429);
  11933. }
  11934. if (playerLevel[13] < 12) {
  11935. sendQuest("@bla@Kite shield@bla@", 1105);
  11936. } else {
  11937. sendQuest("@whi@Kite shield@whi@", 1105);
  11938. }
  11939. if (playerLevel[13] < 11) {
  11940. sendQuest("@bla@Chain body@bla@", 1098);
  11941. } else {
  11942. sendQuest("@whi@Chain body@whi@", 1098);
  11943. }
  11944. if (playerLevel[13] < 10) {
  11945. sendQuest("@bla@Battle axe@bla@", 1092);
  11946. } else {
  11947. sendQuest("@whi@Battle axe@whi@", 1092);
  11948. }
  11949. if (playerLevel[13] < 9) {
  11950. sendQuest("@bla@Warhammer@bla@", 1083);
  11951. } else {
  11952. sendQuest("@whi@Warhammer@whi@", 1083);
  11953. }
  11954. if (playerLevel[13] < 8) {
  11955. sendQuest("@bla@Square shield@bla@", 1104);
  11956. } else {
  11957. sendQuest("@whi@Square shield@whi@", 1104);
  11958. }
  11959. if (playerLevel[13] < 7) {
  11960. sendQuest("@bla@Full helm@bla@", 1103);
  11961. sendQuest("@bla@Throwing knives@bla@", 1106);
  11962. } else {
  11963. sendQuest("@whi@Full helm@whi@", 1103);
  11964. sendQuest("@whi@Throwing knives@whi@", 1106);
  11965. }
  11966. if (playerLevel[13] < 6) {
  11967. sendQuest("@bla@Long sword@bla@", 1086);
  11968. } else {
  11969. sendQuest("@whi@Long sword@whi@", 1086);
  11970. }
  11971. if (playerLevel[13] < 5) {
  11972. sendQuest("@bla@Scimitar@bla@", 1087);
  11973. sendQuest("@bla@Arrowtips@bla@", 1108);
  11974. } else {
  11975. sendQuest("@whi@Scimitar@whi@", 1087);
  11976. sendQuest("@whi@Arrowtips@whi@", 1108);
  11977. }
  11978. if (playerLevel[13] < 4) {
  11979. sendQuest("@bla@Sword@bla@", 1085);
  11980. sendQuest("@bla@Dart tips@bla@", 1107);
  11981. sendQuest("@bla@Nails@bla@", 13358);
  11982. } else {
  11983. sendQuest("@whi@Sword@whi@", 1085);
  11984. sendQuest("@whi@Dart tips@whi@", 1107);
  11985. sendQuest("@whi@Nails@whi@", 13358);
  11986. }
  11987. if (playerLevel[13] < 3) {
  11988. sendQuest("@bla@Medium helm@bla@", 1102);
  11989. } else {
  11990. sendQuest("@whi@Medium helm@whi@", 1102);
  11991. }
  11992. if (playerLevel[13] < 2) {
  11993. sendQuest("@bla@Mace@bla@", 1093);
  11994. } else {
  11995. sendQuest("@whi@Mace@whi@", 1093);
  11996. }
  11997. if (playerLevel[13] < 1) {
  11998. sendQuest("@bla@Dagger@bla@", 1094);
  11999. sendQuest("@bla@Axe@bla@", 1091);
  12000. } else {
  12001. sendQuest("@whi@Dagger@whi@", 1094);
  12002. sendQuest("@whi@Axe@whi@", 1091);
  12003. }
  12004. addItemToSmith(1205, 0, 1119, 1);
  12005. addItemToSmith(1351, 0, 1120, 1);
  12006. addItemToSmith(1103, 0, 1121, 1);
  12007. addItemToSmith(1139, 0, 1122, 1);
  12008. addItemToSmith(819, 0, 1123, 10);
  12009. addItemToSmith(1277, 1, 1119, 1);
  12010. addItemToSmith(1422, 1, 1120, 1);
  12011. addItemToSmith(1075, 1, 1121, 1);
  12012. addItemToSmith(1155, 1, 1122, 1);
  12013. addItemToSmith(39, 1, 1123, 15);
  12014. addItemToSmith(1321, 2, 1119, 1);
  12015. addItemToSmith(1337, 2, 1120, 1);
  12016. addItemToSmith(1087, 2, 1121, 1);
  12017. addItemToSmith(1173, 2, 1122, 1);
  12018. addItemToSmith(864, 2, 1123, 5);
  12019. addItemToSmith(1291, 3, 1119, 1);
  12020. addItemToSmith(1375, 3, 1120, 1);
  12021. addItemToSmith(1117, 3, 1121, 1);
  12022. addItemToSmith(1189, 3, 1122, 1);
  12023. // addItemToSmith(0,3,1123);
  12024. sendQuest("", 1132);
  12025. sendQuest("", 1096);
  12026. addItemToSmith(1307, 4, 1119, 1);
  12027. addItemToSmith(3095, 4, 1120, 1);
  12028. // addItemToSmith(1307,4,1121);
  12029. sendQuest("", 11459);
  12030. sendQuest("", 11461);
  12031. addItemToSmith(4819, 4, 1122, 1);
  12032. // addItemToSmith(1307,4,1123);
  12033. sendQuest("", 1135);
  12034. sendQuest("", 1134);
  12035. }
  12036. if (barType == 2351) { // Iron
  12037. if (playerLevel[13] < 33) {
  12038. sendQuest("@bla@Plate body@bla@", 1101);
  12039. } else {
  12040. sendQuest("@whi@Plate body@whi@", 1101);
  12041. }
  12042. if (playerLevel[13] < 31) {
  12043. sendQuest("@bla@Plate legs@bla@", 1099);
  12044. sendQuest("@bla@Plate skirt@bla@", 1100);
  12045. } else {
  12046. sendQuest("@whi@Plate legs@whi@", 1099);
  12047. sendQuest("@whi@Plate skirt@whi@", 1100);
  12048. }
  12049. if (playerLevel[13] < 29) {
  12050. sendQuest("@bla@2 hand sword@bla@", 1088);
  12051. } else {
  12052. sendQuest("@whi@2 hand sword@whi@", 1088);
  12053. }
  12054. if (playerLevel[13] < 28) {
  12055. sendQuest("@bla@Claws@bla@", 8429);
  12056. } else {
  12057. sendQuest("@whi@Claws@whi@", 8429);
  12058. }
  12059. if (playerLevel[13] < 27) {
  12060. sendQuest("@bla@Kite shield@bla@", 1105);
  12061. } else {
  12062. sendQuest("@whi@Kite shield@whi@", 1105);
  12063. }
  12064. if (playerLevel[13] < 26) {
  12065. sendQuest("@bla@Chain body@bla@", 1098);
  12066. sendQuest("@bla@Oil lantern frame@bla@", 11461);
  12067. } else {
  12068. sendQuest("@whi@Chain body@whi@", 1098);
  12069. sendQuest("@whi@Oil lantern frame@whi@", 11461);
  12070. }
  12071. if (playerLevel[13] < 25) {
  12072. sendQuest("@bla@Battle axe@bla@", 1092);
  12073. } else {
  12074. sendQuest("@whi@Battle axe@whi@", 1092);
  12075. }
  12076. if (playerLevel[13] < 24) {
  12077. sendQuest("@bla@Warhammer@bla@", 1083);
  12078. } else {
  12079. sendQuest("@whi@Warhammer@whi@", 1083);
  12080. }
  12081. if (playerLevel[13] < 23) {
  12082. sendQuest("@bla@Square shield@bla@", 1104);
  12083. } else {
  12084. sendQuest("@whi@Square shield@whi@", 1104);
  12085. }
  12086. if (playerLevel[13] < 22) {
  12087. sendQuest("@bla@Full helm@bla@", 1103);
  12088. sendQuest("@bla@Throwing knives@bla@", 1106);
  12089. } else {
  12090. sendQuest("@whi@Full helm@whi@", 1103);
  12091. sendQuest("@whi@Throwing knives@whi@", 1106);
  12092. }
  12093. if (playerLevel[13] < 21) {
  12094. sendQuest("@bla@Long sword@bla@", 1086);
  12095. } else {
  12096. sendQuest("@whi@Long sword@whi@", 1086);
  12097. }
  12098. if (playerLevel[13] < 20) {
  12099. sendQuest("@bla@Scimitar@bla@", 1087);
  12100. sendQuest("@bla@Arrowtips@bla@", 1108);
  12101. } else {
  12102. sendQuest("@whi@Scimitar@whi@", 1087);
  12103. sendQuest("@whi@Arrowtips@whi@", 1108);
  12104. }
  12105. if (playerLevel[13] < 19) {
  12106. sendQuest("@bla@Sword@bla@", 1085);
  12107. sendQuest("@bla@Dart tips@bla@", 1107);
  12108. sendQuest("@bla@Nails@bla@", 13358);
  12109. } else {
  12110. sendQuest("@whi@Sword@whi@", 1085);
  12111. sendQuest("@whi@Dart tips@whi@", 1107);
  12112. sendQuest("@whi@Nails@whi@", 13358);
  12113. }
  12114. if (playerLevel[13] < 18) {
  12115. sendQuest("@bla@Medium helm@bla@", 1102);
  12116. } else {
  12117. sendQuest("@whi@Medium helm@whi@", 1102);
  12118. }
  12119. if (playerLevel[13] < 17) {
  12120. sendQuest("@bla@Mace@bla@", 1093);
  12121. } else {
  12122. sendQuest("@whi@Mace@whi@", 1093);
  12123. }
  12124. if (playerLevel[13] < 16) {
  12125. sendQuest("@bla@Axe@bla@", 1091);
  12126. } else {
  12127. sendQuest("@whi@Axe@whi@", 1091);
  12128. }
  12129. if (playerLevel[13] < 15) {
  12130. sendQuest("@bla@Dagger@bla@", 1094);
  12131. } else {
  12132. sendQuest("@whi@Dagger@whi@", 1094);
  12133. }
  12134. addItemToSmith(1203, 0, 1119, 1);
  12135. addItemToSmith(1349, 0, 1120, 1);
  12136. addItemToSmith(1101, 0, 1121, 1);
  12137. addItemToSmith(1137, 0, 1122, 1);
  12138. addItemToSmith(820, 0, 1123, 10);
  12139. addItemToSmith(1279, 1, 1119, 1);
  12140. addItemToSmith(1420, 1, 1120, 1);
  12141. addItemToSmith(1067, 1, 1121, 1);
  12142. addItemToSmith(1153, 1, 1122, 1);
  12143. addItemToSmith(40, 1, 1123, 15);
  12144. addItemToSmith(1323, 2, 1119, 1);
  12145. addItemToSmith(1335, 2, 1120, 1);
  12146. addItemToSmith(1081, 2, 1121, 1);
  12147. addItemToSmith(1175, 2, 1122, 1);
  12148. addItemToSmith(863, 2, 1123, 5);
  12149. addItemToSmith(1293, 3, 1119, 1);
  12150. addItemToSmith(1363, 3, 1120, 1);
  12151. addItemToSmith(1115, 3, 1121, 1);
  12152. addItemToSmith(1191, 3, 1122, 1);
  12153. // addItemToSmith(0,3,1123);
  12154. sendQuest("", 1132);
  12155. sendQuest("", 1096);
  12156. addItemToSmith(1309, 4, 1119, 1);
  12157. addItemToSmith(3096, 4, 1120, 1);
  12158. addItemToSmith(4540, 4, 1121, 1);
  12159. addItemToSmith(4820, 4, 1122, 1);
  12160. // addItemToSmith(1307,4,1123);
  12161. sendQuest("", 1135);
  12162. sendQuest("", 1134);
  12163. }
  12164. if (barType == 2353) { // Steel
  12165. if (playerLevel[13] < 49) {
  12166. sendQuest("@bla@Bullseye lantern@bla@", 11461);
  12167. } else {
  12168. sendQuest("@whi@Bullseye lantern@whi@", 11461);
  12169. }
  12170. if (playerLevel[13] < 48) {
  12171. sendQuest("@bla@Plate body@bla@", 1101);
  12172. } else {
  12173. sendQuest("@whi@Plate body@whi@", 1101);
  12174. }
  12175. if (playerLevel[13] < 46) {
  12176. sendQuest("@bla@Plate legs@bla@", 1099);
  12177. sendQuest("@bla@Plate skirt@bla@", 1100);
  12178. } else {
  12179. sendQuest("@whi@Plate legs@whi@", 1099);
  12180. sendQuest("@whi@Plate skirt@whi@", 1100);
  12181. }
  12182. if (playerLevel[13] < 44) {
  12183. sendQuest("@bla@2 hand sword@bla@", 1088);
  12184. } else {
  12185. sendQuest("@whi@2 hand sword@whi@", 1088);
  12186. }
  12187. if (playerLevel[13] < 43) {
  12188. sendQuest("@bla@Claws@bla@", 8429);
  12189. } else {
  12190. sendQuest("@whi@Claws@whi@", 8429);
  12191. }
  12192. if (playerLevel[13] < 42) {
  12193. sendQuest("@bla@Kite shield@bla@", 1105);
  12194. } else {
  12195. sendQuest("@whi@Kite shield@whi@", 1105);
  12196. }
  12197. if (playerLevel[13] < 41) {
  12198. sendQuest("@bla@Chain body@bla@", 1098);
  12199. } else {
  12200. sendQuest("@whi@Chain body@whi@", 1098);
  12201. }
  12202. if (playerLevel[13] < 40) {
  12203. sendQuest("@bla@Battle axe@bla@", 1092);
  12204. } else {
  12205. sendQuest("@whi@Battle axe@whi@", 1092);
  12206. }
  12207. if (playerLevel[13] < 39) {
  12208. sendQuest("@bla@Warhammer@bla@", 1083);
  12209. } else {
  12210. sendQuest("@whi@Warhammer@whi@", 1083);
  12211. }
  12212. if (playerLevel[13] < 38) {
  12213. sendQuest("@bla@Square shield@bla@", 1104);
  12214. } else {
  12215. sendQuest("@whi@Square shield@whi@", 1104);
  12216. }
  12217. if (playerLevel[13] < 37) {
  12218. sendQuest("@bla@Full helm@bla@", 1103);
  12219. sendQuest("@bla@Throwing knives@bla@", 1106);
  12220. } else {
  12221. sendQuest("@whi@Full helm@whi@", 1103);
  12222. sendQuest("@whi@Throwing knives@whi@", 1106);
  12223. }
  12224. if (playerLevel[13] < 36) {
  12225. sendQuest("@bla@Long sword@bla@", 1086);
  12226. sendQuest("@bla@Studs@bla@", 1134);
  12227. } else {
  12228. sendQuest("@whi@Long sword@whi@", 1086);
  12229. sendQuest("@whi@Studs@whi@", 1134);
  12230. }
  12231. if (playerLevel[13] < 35) {
  12232. sendQuest("@bla@Scimitar@bla@", 1087);
  12233. sendQuest("@bla@Arrowtips@bla@", 1108);
  12234. } else {
  12235. sendQuest("@whi@Scimitar@whi@", 1087);
  12236. sendQuest("@whi@Arrowtips@whi@", 1108);
  12237. }
  12238. if (playerLevel[13] < 34) {
  12239. sendQuest("@bla@Sword@bla@", 1085);
  12240. sendQuest("@bla@Dart tips@bla@", 1107);
  12241. sendQuest("@bla@Nails@bla@", 13358);
  12242. } else {
  12243. sendQuest("@whi@Sword@whi@", 1085);
  12244. sendQuest("@whi@Dart tips@whi@", 1107);
  12245. sendQuest("@whi@Nails@whi@", 13358);
  12246. }
  12247. if (playerLevel[13] < 33) {
  12248. sendQuest("@bla@Medium helm@bla@", 1102);
  12249. } else {
  12250. sendQuest("@whi@Medium helm@whi@", 1102);
  12251. }
  12252. if (playerLevel[13] < 32) {
  12253. sendQuest("@bla@Mace@bla@", 1093);
  12254. } else {
  12255. sendQuest("@whi@Mace@whi@", 1093);
  12256. }
  12257. if (playerLevel[13] < 31) {
  12258. sendQuest("@bla@Axe@bla@", 1091);
  12259. } else {
  12260. sendQuest("@whi@Axe@whi@", 1091);
  12261. }
  12262. if (playerLevel[13] < 30) {
  12263. sendQuest("@bla@Dagger@bla@", 1094);
  12264. } else {
  12265. sendQuest("@whi@Dagger@whi@", 1094);
  12266. }
  12267. addItemToSmith(1207, 0, 1119, 1);
  12268. addItemToSmith(1353, 0, 1120, 1);
  12269. addItemToSmith(1105, 0, 1121, 1);
  12270. addItemToSmith(1141, 0, 1122, 1);
  12271. addItemToSmith(821, 0, 1123, 10);
  12272. addItemToSmith(1281, 1, 1119, 1);
  12273. addItemToSmith(1424, 1, 1120, 1);
  12274. addItemToSmith(1069, 1, 1121, 1);
  12275. addItemToSmith(1157, 1, 1122, 1);
  12276. addItemToSmith(41, 1, 1123, 15);
  12277. addItemToSmith(1325, 2, 1119, 1);
  12278. addItemToSmith(1339, 2, 1120, 1);
  12279. addItemToSmith(1083, 2, 1121, 1);
  12280. addItemToSmith(1177, 2, 1122, 1);
  12281. addItemToSmith(865, 2, 1123, 5);
  12282. addItemToSmith(1295, 3, 1119, 1);
  12283. addItemToSmith(1365, 3, 1120, 1);
  12284. addItemToSmith(1119, 3, 1121, 1);
  12285. addItemToSmith(1193, 3, 1122, 1);
  12286. sendQuest("", 1132);
  12287. sendQuest("", 1096);
  12288. addItemToSmith(1311, 4, 1119, 1);
  12289. addItemToSmith(3097, 4, 1120, 1);
  12290. addItemToSmith(4544, 4, 1121, 1);
  12291. addItemToSmith(1539, 4, 1122, 1);
  12292. addItemToSmith(2370, 4, 1123, 1);
  12293. if (amountOfItem(barType) < 1) {
  12294. sendQuest("@red@1bar@red@", 1135);
  12295. } else {
  12296. sendQuest("@gre@1bar@gre@", 1135);
  12297. }
  12298. }
  12299. if (barType == 2359) { // Mith
  12300. if (playerLevel[13] < 68) {
  12301. sendQuest("@bla@Plate body@bla@", 1101);
  12302. } else {
  12303. sendQuest("@whi@Plate body@whi@", 1101);
  12304. }
  12305. if (playerLevel[13] < 66) {
  12306. sendQuest("@bla@Plate legs@bla@", 1099);
  12307. sendQuest("@bla@Plate skirt@bla@", 1100);
  12308. } else {
  12309. sendQuest("@whi@Plate legs@whi@", 1099);
  12310. sendQuest("@whi@Plate skirt@whi@", 1100);
  12311. }
  12312. if (playerLevel[13] < 64) {
  12313. sendQuest("@bla@2 hand sword@bla@", 1088);
  12314. } else {
  12315. sendQuest("@whi@2 hand sword@whi@", 1088);
  12316. }
  12317. if (playerLevel[13] < 63) {
  12318. sendQuest("@bla@Claws@bla@", 8429);
  12319. } else {
  12320. sendQuest("@whi@Claws@whi@", 8429);
  12321. }
  12322. if (playerLevel[13] < 62) {
  12323. sendQuest("@bla@Kite shield@bla@", 1105);
  12324. } else {
  12325. sendQuest("@whi@Kite shield@whi@", 1105);
  12326. }
  12327. if (playerLevel[13] < 61) {
  12328. sendQuest("@bla@Chain body@bla@", 1098);
  12329. } else {
  12330. sendQuest("@whi@Chain body@whi@", 1098);
  12331. }
  12332. if (playerLevel[13] < 60) {
  12333. sendQuest("@bla@Battle axe@bla@", 1092);
  12334. } else {
  12335. sendQuest("@whi@Battle axe@whi@", 1092);
  12336. }
  12337. if (playerLevel[13] < 59) {
  12338. sendQuest("@bla@Warhammer@bla@", 1083);
  12339. } else {
  12340. sendQuest("@whi@Warhammer@whi@", 1083);
  12341. }
  12342. if (playerLevel[13] < 58) {
  12343. sendQuest("@bla@Square shield@bla@", 1104);
  12344. } else {
  12345. sendQuest("@whi@Square shield@whi@", 1104);
  12346. }
  12347. if (playerLevel[13] < 57) {
  12348. sendQuest("@bla@Full helm@bla@", 1103);
  12349. sendQuest("@bla@Throwing knives@bla@", 1106);
  12350. } else {
  12351. sendQuest("@whi@Full helm@whi@", 1103);
  12352. sendQuest("@whi@Throwing knives@whi@", 1106);
  12353. }
  12354. if (playerLevel[13] < 56) {
  12355. sendQuest("@bla@Long sword@bla@", 1086);
  12356. } else {
  12357. sendQuest("@whi@Long sword@whi@", 1086);
  12358. }
  12359. if (playerLevel[13] < 55) {
  12360. sendQuest("@bla@Scimitar@bla@", 1087);
  12361. sendQuest("@bla@Arrowtips@bla@", 1108);
  12362. } else {
  12363. sendQuest("@whi@Scimitar@whi@", 1087);
  12364. sendQuest("@whi@Arrowtips@whi@", 1108);
  12365. }
  12366. if (playerLevel[13] < 54) {
  12367. sendQuest("@bla@Sword@bla@", 1085);
  12368. sendQuest("@bla@Dart tips@bla@", 1107);
  12369. sendQuest("@bla@Nails@bla@", 13358);
  12370. } else {
  12371. sendQuest("@whi@Sword@whi@", 1085);
  12372. sendQuest("@whi@Dart tips@whi@", 1107);
  12373. sendQuest("@whi@Nails@whi@", 13358);
  12374. }
  12375. if (playerLevel[13] < 53) {
  12376. sendQuest("@bla@Medium helm@bla@", 1102);
  12377. } else {
  12378. sendQuest("@whi@Medium helm@whi@", 1102);
  12379. }
  12380. if (playerLevel[13] < 52) {
  12381. sendQuest("@bla@Mace@bla@", 1093);
  12382. } else {
  12383. sendQuest("@whi@Mace@whi@", 1093);
  12384. }
  12385. if (playerLevel[13] < 51) {
  12386. sendQuest("@bla@Axe@bla@", 1091);
  12387. } else {
  12388. sendQuest("@whi@Axe@whi@", 1091);
  12389. }
  12390. if (playerLevel[13] < 50) {
  12391. sendQuest("@bla@Dagger@bla@", 1094);
  12392. } else {
  12393. sendQuest("@whi@Dagger@whi@", 1094);
  12394. }
  12395. addItemToSmith(1209, 0, 1119, 1);
  12396. addItemToSmith(1355, 0, 1120, 1);
  12397. addItemToSmith(1109, 0, 1121, 1);
  12398. addItemToSmith(1143, 0, 1122, 1);
  12399. addItemToSmith(822, 0, 1123, 10);
  12400. addItemToSmith(1285, 1, 1119, 1);
  12401. addItemToSmith(1355, 1, 1120, 1);
  12402. addItemToSmith(1071, 1, 1121, 1);
  12403. addItemToSmith(1159, 1, 1122, 1);
  12404. addItemToSmith(42, 1, 1123, 15);
  12405. addItemToSmith(1329, 2, 1119, 1);
  12406. addItemToSmith(1343, 2, 1120, 1);
  12407. addItemToSmith(1085, 2, 1121, 1);
  12408. addItemToSmith(1181, 2, 1122, 1);
  12409. addItemToSmith(866, 2, 1123, 5);
  12410. addItemToSmith(1299, 3, 1119, 1);
  12411. addItemToSmith(1369, 3, 1120, 1);
  12412. addItemToSmith(1121, 3, 1121, 1);
  12413. addItemToSmith(1197, 3, 1122, 1);
  12414. sendQuest("", 1132);
  12415. sendQuest("", 1096);
  12416. addItemToSmith(1315, 4, 1119, 1);
  12417. addItemToSmith(3099, 4, 1120, 1);
  12418. addItemToSmith(4822, 4, 1122, 1);
  12419. sendQuest("", 1135);
  12420. sendQuest("", 1134);
  12421. sendQuest("", 11461);
  12422. sendQuest("", 11459);
  12423. }
  12424. if (barType == 2361) { // Addy
  12425. if (playerLevel[13] < 88) {
  12426. sendQuest("@bla@Plate body@bla@", 1101);
  12427. } else {
  12428. sendQuest("@whi@Plate body@whi@", 1101);
  12429. }
  12430. if (playerLevel[13] < 86) {
  12431. sendQuest("@bla@Plate legs@bla@", 1099);
  12432. sendQuest("@bla@Plate skirt@bla@", 1100);
  12433. } else {
  12434. sendQuest("@whi@Plate legs@whi@", 1099);
  12435. sendQuest("@whi@Plate skirt@whi@", 1100);
  12436. }
  12437. if (playerLevel[13] < 84) {
  12438. sendQuest("@bla@2 hand sword@bla@", 1088);
  12439. } else {
  12440. sendQuest("@whi@2 hand sword@whi@", 1088);
  12441. }
  12442. if (playerLevel[13] < 83) {
  12443. sendQuest("@bla@Claws@bla@", 8429);
  12444. } else {
  12445. sendQuest("@whi@Claws@whi@", 8429);
  12446. }
  12447. if (playerLevel[13] < 82) {
  12448. sendQuest("@bla@Kite shield@bla@", 1105);
  12449. } else {
  12450. sendQuest("@whi@Kite shield@whi@", 1105);
  12451. }
  12452. if (playerLevel[13] < 81) {
  12453. sendQuest("@bla@Chain body@bla@", 1098);
  12454. } else {
  12455. sendQuest("@whi@Chain body@whi@", 1098);
  12456. }
  12457. if (playerLevel[13] < 80) {
  12458. sendQuest("@bla@Battle axe@bla@", 1092);
  12459. } else {
  12460. sendQuest("@whi@Battle axe@whi@", 1092);
  12461. }
  12462. if (playerLevel[13] < 79) {
  12463. sendQuest("@bla@Warhammer@bla@", 1083);
  12464. } else {
  12465. sendQuest("@whi@Warhammer@whi@", 1083);
  12466. }
  12467. if (playerLevel[13] < 78) {
  12468. sendQuest("@bla@Square shield@bla@", 1104);
  12469. } else {
  12470. sendQuest("@whi@Square shield@whi@", 1104);
  12471. }
  12472. if (playerLevel[13] < 77) {
  12473. sendQuest("@bla@Full helm@bla@", 1103);
  12474. sendQuest("@bla@Throwing knives@bla@", 1106);
  12475. } else {
  12476. sendQuest("@whi@Full helm@whi@", 1103);
  12477. sendQuest("@whi@Throwing knives@whi@", 1106);
  12478. }
  12479. if (playerLevel[13] < 76) {
  12480. sendQuest("@bla@Long sword@bla@", 1086);
  12481. } else {
  12482. sendQuest("@whi@Long sword@whi@", 1086);
  12483. }
  12484. if (playerLevel[13] < 75) {
  12485. sendQuest("@bla@Scimitar@bla@", 1087);
  12486. sendQuest("@bla@Arrowtips@bla@", 1108);
  12487. } else {
  12488. sendQuest("@whi@Scimitar@whi@", 1087);
  12489. sendQuest("@whi@Arrowtips@whi@", 1108);
  12490. }
  12491. if (playerLevel[13] < 74) {
  12492. sendQuest("@bla@Sword@bla@", 1085);
  12493. sendQuest("@bla@Dart tips@bla@", 1107);
  12494. sendQuest("@bla@Nails@bla@", 13358);
  12495. } else {
  12496. sendQuest("@whi@Sword@whi@", 1085);
  12497. sendQuest("@whi@Dart tips@whi@", 1107);
  12498. sendQuest("@whi@Nails@whi@", 13358);
  12499. }
  12500. if (playerLevel[13] < 73) {
  12501. sendQuest("@bla@Medium helm@bla@", 1102);
  12502. } else {
  12503. sendQuest("@whi@Medium helm@whi@", 1102);
  12504. }
  12505. if (playerLevel[13] < 72) {
  12506. sendQuest("@bla@Mace@bla@", 1093);
  12507. } else {
  12508. sendQuest("@whi@Mace@whi@", 1093);
  12509. }
  12510. if (playerLevel[13] < 71) {
  12511. sendQuest("@bla@Axe@bla@", 1091);
  12512. } else {
  12513. sendQuest("@whi@Axe@whi@", 1091);
  12514. }
  12515. if (playerLevel[13] < 70) {
  12516. sendQuest("@bla@Dagger@bla@", 1094);
  12517. } else {
  12518. sendQuest("@whi@Dagger@whi@", 1094);
  12519. }
  12520. addItemToSmith(1211, 0, 1119, 1);
  12521. addItemToSmith(1357, 0, 1120, 1);
  12522. addItemToSmith(1111, 0, 1121, 1);
  12523. addItemToSmith(1145, 0, 1122, 1);
  12524. addItemToSmith(823, 0, 1123, 10);
  12525. addItemToSmith(1287, 1, 1119, 1);
  12526. addItemToSmith(1430, 1, 1120, 1);
  12527. addItemToSmith(1073, 1, 1121, 1);
  12528. addItemToSmith(1161, 1, 1122, 1);
  12529. addItemToSmith(43, 1, 1123, 15);
  12530. addItemToSmith(1331, 2, 1119, 1);
  12531. addItemToSmith(1345, 2, 1120, 1);
  12532. addItemToSmith(1091, 2, 1121, 1);
  12533. addItemToSmith(1183, 2, 1122, 1);
  12534. addItemToSmith(867, 2, 1123, 5);
  12535. addItemToSmith(1301, 3, 1119, 1);
  12536. addItemToSmith(1371, 3, 1120, 1);
  12537. addItemToSmith(1123, 3, 1121, 1);
  12538. addItemToSmith(1199, 3, 1122, 1);
  12539. // addItemToSmith(0,3,1123);
  12540. sendQuest("", 1132);
  12541. sendQuest("", 1096);
  12542. addItemToSmith(1317, 4, 1119, 1);
  12543. addItemToSmith(3100, 4, 1120, 1);
  12544. // addItemToSmith(4540,4,1121,1);
  12545. addItemToSmith(4823, 4, 1122, 1);
  12546. // addItemToSmith(1307,4,1123);
  12547. sendQuest("", 1135);
  12548. sendQuest("", 1134);
  12549. sendQuest("", 11461);
  12550. sendQuest("", 11459);
  12551. }
  12552. if (barType == 2363) { // Rune
  12553. if (playerLevel[13] < 99) {
  12554. sendQuest("@bla@Plate body@bla@", 1101);
  12555. sendQuest("@bla@Plate legs@bla@", 1099);
  12556. sendQuest("@bla@Plate skirt@bla@", 1100);
  12557. sendQuest("@bla@2 hand sword@bla@", 1088);
  12558. } else {
  12559. sendQuest("@whi@Plate body@whi@", 1101);
  12560. sendQuest("@whi@Plate legs@whi@", 1099);
  12561. sendQuest("@whi@Plate skirt@whi@", 1100);
  12562. sendQuest("@whi@2 hand sword@whi@", 1088);
  12563. }
  12564. if (playerLevel[13] < 98) {
  12565. sendQuest("@bla@Claws@bla@", 8429);
  12566. } else {
  12567. sendQuest("@whi@Claws@whi@", 8429);
  12568. }
  12569. if (playerLevel[13] < 97) {
  12570. sendQuest("@bla@Kite shield@bla@", 1105);
  12571. } else {
  12572. sendQuest("@whi@Kite shield@whi@", 1105);
  12573. }
  12574. if (playerLevel[13] < 96) {
  12575. sendQuest("@bla@Chain body@bla@", 1098);
  12576. } else {
  12577. sendQuest("@whi@Chain body@whi@", 1098);
  12578. }
  12579. if (playerLevel[13] < 95) {
  12580. sendQuest("@bla@Battle axe@bla@", 1092);
  12581. } else {
  12582. sendQuest("@whi@Battle axe@whi@", 1092);
  12583. }
  12584. if (playerLevel[13] < 94) {
  12585. sendQuest("@bla@Warhammer@bla@", 1083);
  12586. } else {
  12587. sendQuest("@whi@Warhammer@whi@", 1083);
  12588. }
  12589. if (playerLevel[13] < 93) {
  12590. sendQuest("@bla@Square shield@bla@", 1104);
  12591. } else {
  12592. sendQuest("@whi@Square shield@whi@", 1104);
  12593. }
  12594. if (playerLevel[13] < 92) {
  12595. sendQuest("@bla@Full helm@bla@", 1103);
  12596. sendQuest("@bla@Throwing knives@bla@", 1106);
  12597. } else {
  12598. sendQuest("@whi@Full helm@whi@", 1103);
  12599. sendQuest("@whi@Throwing knives@whi@", 1106);
  12600. }
  12601. if (playerLevel[13] < 91) {
  12602. sendQuest("@bla@Long sword@bla@", 1086);
  12603. } else {
  12604. sendQuest("@whi@Long sword@whi@", 1086);
  12605. }
  12606. if (playerLevel[13] < 90) {
  12607. sendQuest("@bla@Scimitar@bla@", 1087);
  12608. sendQuest("@bla@Arrowtips@bla@", 1108);
  12609. } else {
  12610. sendQuest("@whi@Scimitar@whi@", 1087);
  12611. sendQuest("@whi@Arrowtips@whi@", 1108);
  12612. }
  12613. if (playerLevel[13] < 89) {
  12614. sendQuest("@bla@Sword@bla@", 1085);
  12615. sendQuest("@bla@Dart tips@bla@", 1107);
  12616. sendQuest("@bla@Nails@bla@", 13358);
  12617. } else {
  12618. sendQuest("@whi@Sword@whi@", 1085);
  12619. sendQuest("@whi@Dart tips@whi@", 1107);
  12620. sendQuest("@whi@Nails@whi@", 13358);
  12621. }
  12622. if (playerLevel[13] < 88) {
  12623. sendQuest("@bla@Medium helm@bla@", 1102);
  12624. } else {
  12625. sendQuest("@whi@Medium helm@whi@", 1102);
  12626. }
  12627. if (playerLevel[13] < 87) {
  12628. sendQuest("@bla@Mace@bla@", 1093);
  12629. } else {
  12630. sendQuest("@whi@Mace@whi@", 1093);
  12631. }
  12632. if (playerLevel[13] < 86) {
  12633. sendQuest("@bla@Axe@bla@", 1091);
  12634. } else {
  12635. sendQuest("@whi@Axe@whi@", 1091);
  12636. }
  12637. if (playerLevel[13] < 85) {
  12638. sendQuest("@bla@Dagger@bla@", 1094);
  12639. } else {
  12640. sendQuest("@whi@Dagger@whi@", 1094);
  12641. }
  12642. addItemToSmith(1213, 0, 1119, 1);
  12643. addItemToSmith(1359, 0, 1120, 1);
  12644. addItemToSmith(1113, 0, 1121, 1);
  12645. addItemToSmith(1147, 0, 1122, 1);
  12646. addItemToSmith(824, 0, 1123, 10);
  12647. addItemToSmith(1289, 1, 1119, 1);
  12648. addItemToSmith(1432, 1, 1120, 1);
  12649. addItemToSmith(1079, 1, 1121, 1);
  12650. addItemToSmith(1163, 1, 1122, 1);
  12651. addItemToSmith(44, 1, 1123, 15);
  12652. addItemToSmith(1333, 2, 1119, 1);
  12653. addItemToSmith(1347, 2, 1120, 1);
  12654. addItemToSmith(1093, 2, 1121, 1);
  12655. addItemToSmith(1185, 2, 1122, 1);
  12656. addItemToSmith(868, 2, 1123, 5);
  12657. addItemToSmith(1303, 3, 1119, 1);
  12658. addItemToSmith(1373, 3, 1120, 1);
  12659. addItemToSmith(1127, 3, 1121, 1);
  12660. addItemToSmith(1201, 3, 1122, 1);
  12661. sendQuest("", 1132);
  12662. sendQuest("", 1096);
  12663. addItemToSmith(1319, 4, 1119, 1);
  12664. addItemToSmith(3101, 4, 1120, 1);
  12665. addItemToSmith(4824, 4, 1122, 1);
  12666. sendQuest("", 1135);
  12667. sendQuest("", 1134);
  12668. sendQuest("", 11461);
  12669. sendQuest("", 11459);
  12670. }
  12671. }
  12672.  
  12673.  
  12674. /* END OF SMITHING*/
  12675.  
  12676. /* WOODCUTTING*/
  12677. public boolean woodcutting() {
  12678.  
  12679. int WCAxe = 0;
  12680.  
  12681. if (IsCutting == true) {
  12682. WCAxe = 1; // If Cutting -> Go trough loop, passby WCCheckAxe to prevent originalweapon loss, 1 to tell you got axe, no function left for WCAxe if cutting, so 1 is enough.
  12683. } else {
  12684. WCAxe = WCCheckAxe();
  12685. }
  12686. if (WCAxe > 0) {
  12687. if (playerLevel[playerWoodcutting] >= woodcutting[1]) {
  12688. if (freeSlots() > 0) {
  12689. if (System.currentTimeMillis()-lastAction >= 1000 && IsCutting == false) {
  12690. lastAction = System.currentTimeMillis();
  12691. sendMessage("You swing your axe at the tree...");
  12692. setAnimation(0x284);
  12693. IsCutting = true;
  12694. }
  12695. if (System.currentTimeMillis()-lastAction >= woodcutting[0] && IsCutting == true) {
  12696. lastAction = System.currentTimeMillis();
  12697. addSkillXP((woodcutting[2]*woodcutting[3]*2), playerWoodcutting);
  12698. if (freeSlots() > 0) {
  12699. sendMessage("You get some logs.");
  12700. addItem(woodcutting[4], 1);
  12701. if (misc.random(1000) <= woodcutting[5]){
  12702. addItem(5074, 1);
  12703. sendMessage("You get a bird nest");
  12704. }
  12705. } else {
  12706. playerEquipment[playerWeapon] = OriginalWeapon;
  12707. OriginalWeapon = -1;
  12708. resetAnimation();
  12709. IsCutting = false;
  12710. resetWC();
  12711. }
  12712. }
  12713. } else {
  12714. //createEnemyItem(woodcutting[4]);
  12715. sendMessage("Not enough space in your inventory.");
  12716. woodcutting[0] = -1;
  12717. resetWC();
  12718. return false;
  12719. }
  12720. } else {
  12721. sendMessage("You need "+woodcutting[1]+" "+statName[playerWoodcutting]+" to cut those logs.");
  12722. resetWC();
  12723. return false;
  12724. }
  12725. } else {
  12726. sendMessage("Equip your axe before cutting trees!");
  12727. resetWC();
  12728. return false;
  12729. }
  12730. return true;
  12731. }
  12732.  
  12733. public boolean resetWC() {
  12734. woodcutting[0] = 0;
  12735. woodcutting[1] = 0;
  12736. woodcutting[2] = 0;
  12737. woodcutting[4] = 0;
  12738. woodcutting[5] = 2;
  12739. skillX = -1;
  12740. skillY = -1;
  12741. IsCutting = false;
  12742. IsUsingSkill = false;
  12743. resetAnimation();
  12744. return true;
  12745. }
  12746.  
  12747. public int WCCheckAxe() {
  12748. int Hand;
  12749. int Shield;
  12750. int Bag;
  12751. int Axe;
  12752.  
  12753. Hand = playerEquipment[playerWeapon];
  12754. Shield = playerEquipment[playerShield];
  12755. Axe = 0;
  12756. switch (Hand) {
  12757. case 1351:
  12758. // Bronze Axe
  12759. Axe = 1;
  12760. break;
  12761.  
  12762. case 1349:
  12763. // Iron Axe
  12764. Axe = 2;
  12765. break;
  12766.  
  12767. case 1353:
  12768. // Steel Axe
  12769. Axe = 3;
  12770. break;
  12771.  
  12772. case 1361:
  12773. // Black Axe
  12774. Axe = 4;
  12775. break;
  12776.  
  12777. case 1355:
  12778. // Mithril Axe
  12779. Axe = 5;
  12780. break;
  12781.  
  12782. case 1357:
  12783. // Adamant Axe
  12784. Axe = 6;
  12785. break;
  12786.  
  12787. case 1359:
  12788. // Rune Axe
  12789. Axe = 7;
  12790. break;
  12791.  
  12792. /* case X: //Dragon Axe
  12793. Axe = 8; break;*/
  12794. }
  12795. /*
  12796. if (Axe > 0) {
  12797. OriginalWeapon = Hand;
  12798. OriginalShield = Shield;
  12799. playerEquipment[playerShield] = -1;
  12800. return Axe;
  12801. }*/
  12802. if (Axe > 0) {
  12803. //OriginalWeapon = Hand;
  12804. //OriginalShield = Shield;
  12805. //playerEquipment[playerShield] = -1;
  12806. //playerEquipment[playerWeapon] = Bag;
  12807. }
  12808. return Axe;
  12809. }
  12810.  
  12811.  
  12812.  
  12813. public boolean fromTrade(int itemID, int fromSlot, int amount) {
  12814. if (System.currentTimeMillis()-lastButton > 800) {
  12815. lastButton = System.currentTimeMillis();
  12816. } else {
  12817. return false;
  12818. }
  12819. try {
  12820. client other = getClient(trade_reqId);
  12821. if (!inTrade || ! validClient(trade_reqId) || ! canOffer) {
  12822. declineTrade();
  12823. return false;
  12824. }
  12825. if (!Item.itemStackable[itemID] && amount > 1) {
  12826. for (int a = 1; a <= amount; a++) {
  12827. int slot = findItem(itemID, playerItems, playerItemsN);
  12828. if (slot >= 0) {
  12829. fromTrade(itemID, 0, 1);
  12830. }
  12831. }
  12832. }
  12833. boolean found = false;
  12834. for (GameItem item: offeredItems) {
  12835. if (item.id == itemID) {
  12836. if (!item.stackable) {
  12837. offeredItems.remove(item);
  12838. found = true;
  12839. } else {
  12840. if (item.amount > amount) {
  12841. item.amount -= amount;
  12842. found = true;
  12843. } else {
  12844. amount = item.amount;
  12845. found = true;
  12846. offeredItems.remove(item);
  12847. }
  12848. }
  12849. break;
  12850. }
  12851. }
  12852. if (found)
  12853. addItem(itemID, amount);
  12854. tradeConfirmed = false;
  12855. other.tradeConfirmed = false;
  12856. resetItems(3322);
  12857. resetTItems(3415);
  12858. other.resetOTItems(3416);
  12859. sendFrame126("", 3431);
  12860. other.sendFrame126("", 3431);
  12861. } catch (Exception e) {
  12862. e.printStackTrace();
  12863. }
  12864. return true;
  12865. }
  12866.  
  12867. public boolean tradeItem(int itemID, int fromSlot, int amount) {
  12868. if (System.currentTimeMillis()-lastButton > 800) {
  12869. lastButton = System.currentTimeMillis();
  12870. } else {
  12871. return false;
  12872. }
  12873. if (!Item.itemStackable[itemID] && amount > 1) {
  12874. for (int a = 1; a <= amount; a++) {
  12875. int slot = findItem(itemID, playerItems, playerItemsN);
  12876. if (slot >= 0) {
  12877. tradeItem(itemID, slot, 1);
  12878. }
  12879. }
  12880. }
  12881. for (int i = 0; i < noTrade.length; i++) {
  12882. if (itemID == noTrade[i] || itemID == noTrade[i]+1 || premiumItem(itemID)) {
  12883. sendMessage("You can't trade that item");
  12884. declineTrade();
  12885. return false;
  12886. }
  12887. }
  12888. client other = getClient(trade_reqId);
  12889. if (!inTrade || ! validClient(trade_reqId) || ! canOffer) {
  12890. declineTrade();
  12891. return false;
  12892. }
  12893. if (!playerHasItem(itemID, amount)) {
  12894. return false;
  12895. }
  12896. if (Item.itemStackable[itemID] || Item.itemIsNote[itemID]) {
  12897. boolean inTrade = false;
  12898. for (GameItem item: offeredItems) {
  12899. if (item.id == itemID) {
  12900. inTrade = true;
  12901. item.amount += amount;
  12902. break;
  12903. }
  12904. }
  12905. if (!inTrade) {
  12906. offeredItems.add(new GameItem(itemID, amount));
  12907. }
  12908. } else {
  12909. offeredItems.add(new GameItem(itemID, 1));
  12910. }
  12911. deleteItem(itemID, fromSlot, amount);
  12912. resetItems(3322);
  12913. resetTItems(3415);
  12914. other.resetOTItems(3416);
  12915. sendFrame126("", 3431);
  12916. other.sendFrame126("", 3431);
  12917. return true;
  12918. }
  12919.  
  12920. /* Shops*/
  12921. public boolean sellItem(int itemID, int fromSlot, int amount) {
  12922. if (amount > 0 && itemID == (playerItems[fromSlot]-1)) {
  12923. if (server.shopHandler.ShopSModifier[MyShopID] > 1) {
  12924. boolean IsIn = false;
  12925.  
  12926. for (int i = 0; i <= server.shopHandler.ShopItemsStandard[MyShopID]; i++) {
  12927. if (itemID == (server.shopHandler.ShopItems[MyShopID][i]-1)) {
  12928. IsIn = true;
  12929. break;
  12930. }
  12931. }
  12932. if (IsIn == false) {
  12933. sendMessage("You cannot sell "+GetItemName(itemID)+" in this store.");
  12934. return false;
  12935. }
  12936. }
  12937. if (Item.itemSellable[(playerItems[fromSlot]-1)] == false) {
  12938. sendMessage("I cannot sell "+GetItemName(itemID)+".");
  12939. return false;
  12940. }
  12941. if (amount > playerItemsN[fromSlot] && (Item.itemIsNote[(playerItems[fromSlot]-1)] == true || Item.itemStackable[(playerItems[fromSlot]-1)] == true)) {
  12942. amount = playerItemsN[fromSlot];
  12943. } else if (amount > GetXItemsInBag(itemID) && Item.itemIsNote[(playerItems[fromSlot]-1)] == false && Item.itemStackable[(playerItems[fromSlot]-1)] == false) {
  12944. amount = GetXItemsInBag(itemID);
  12945. }
  12946. double ShopValue;
  12947. double TotPrice;
  12948. int TotPrice2;
  12949. int Overstock;
  12950.  
  12951. for (int i = amount; i > 0; i--) {
  12952. TotPrice2 = (int)Math.floor(GetItemShopValue(itemID, 1, fromSlot));
  12953. if (freeSlots() >= 0 && playerHasItem(995) || freeSlots() > 0) {
  12954. if (Item.itemIsNote[itemID] == false) {
  12955. deleteItem(itemID, GetItemSlot(itemID), 1);
  12956. } else {
  12957. deleteItem(itemID, fromSlot, 1);
  12958. }
  12959. addItem(995, TotPrice2);
  12960. addShopItem(itemID, 1);
  12961. } else {
  12962. sendMessage("Not enough space in your inventory.");
  12963. break;
  12964. }
  12965. }
  12966. resetItems(3823);
  12967. resetShop(MyShopID);
  12968. UpdatePlayerShop();
  12969. return true;
  12970. }
  12971. return true;
  12972. }
  12973.  
  12974. public boolean buyItem(int itemID, int fromSlot, int amount) {
  12975. if (amount > 0 && itemID == (server.shopHandler.ShopItems[MyShopID][fromSlot]-1)) {
  12976. if (amount > server.shopHandler.ShopItemsN[MyShopID][fromSlot]) {
  12977. amount = server.shopHandler.ShopItemsN[MyShopID][fromSlot];
  12978. }
  12979. double ShopValue;
  12980. double TotPrice;
  12981. int TotPrice2;
  12982. int Overstock;
  12983. int Slot = 0;
  12984. if (!canUse(itemID)) {
  12985. sendMessage("You must be a premium member to buy this item");
  12986. sendMessage("Visit zernix.com to subscribe");
  12987. return false;
  12988. }
  12989. for (int i = amount; i > 0; i--) {
  12990. TotPrice2 = (int)Math.floor(GetItemShopValue(itemID, 0, fromSlot));
  12991. Slot = GetItemSlot(995);
  12992. if (Slot == -1) {
  12993. sendMessage("You don't have enough coins.");
  12994. break;
  12995. }
  12996. if (playerItemsN[Slot] >= TotPrice2) {
  12997. if (freeSlots() > 0) {
  12998. deleteItem(995, GetItemSlot(995), TotPrice2);
  12999. addItem(itemID, 1);
  13000. server.shopHandler.ShopItemsN[MyShopID][fromSlot] -= 1;
  13001. server.shopHandler.ShopItemsDelay[MyShopID][fromSlot] = 0;
  13002. if ((fromSlot+1) > server.shopHandler.ShopItemsStandard[MyShopID]) {
  13003. server.shopHandler.ShopItems[MyShopID][fromSlot] = 0;
  13004. }
  13005. } else {
  13006. sendMessage("Not enough space in your inventory.");
  13007. break;
  13008. }
  13009. } else {
  13010. sendMessage("You don't have enough coins.");
  13011. break;
  13012. }
  13013. }
  13014. resetItems(3823);
  13015. resetShop(MyShopID);
  13016. UpdatePlayerShop();
  13017. return true;
  13018. }
  13019. return false;
  13020. }
  13021.  
  13022. public void UpdatePlayerShop() {
  13023. for (int i = 1; i < PlayerHandler.maxPlayers; i++) {
  13024. if (PlayerHandler.players[i] != null) {
  13025. if (PlayerHandler.players[i].IsShopping == true && PlayerHandler.players[i].MyShopID == MyShopID && i != playerId) {
  13026. PlayerHandler.players[i].UpdateShop = true;
  13027. }
  13028. }
  13029. }
  13030. }
  13031.  
  13032. public boolean addShopItem(int itemID, int amount) {
  13033. boolean Added = false;
  13034.  
  13035. if (amount <= 0) {
  13036. return false;
  13037. }
  13038. if (Item.itemIsNote[itemID] == true) {
  13039. itemID = GetUnnotedItem(itemID);
  13040. }
  13041. for (int i = 0; i < server.shopHandler.ShopItems.length; i++) {
  13042. if ((server.shopHandler.ShopItems[MyShopID][i]-1) == itemID) {
  13043. server.shopHandler.ShopItemsN[MyShopID][i] += amount;
  13044. Added = true;
  13045. }
  13046. }
  13047. if (Added == false) {
  13048. for (int i = 0; i < server.shopHandler.ShopItems.length; i++) {
  13049. if (server.shopHandler.ShopItems[MyShopID][i] == 0) {
  13050. server.shopHandler.ShopItems[MyShopID][i] = (itemID+1);
  13051. server.shopHandler.ShopItemsN[MyShopID][i] = amount;
  13052. server.shopHandler.ShopItemsDelay[MyShopID][i] = 0;
  13053. break;
  13054. }
  13055. }
  13056. }
  13057. return true;
  13058. }
  13059. //options talk
  13060. public void o2(boolean send, String option, String option1, String option2)
  13061. {
  13062. sendFrame171(1, 2465);
  13063. sendFrame171(0, 2468);
  13064. sendFrame126(option, 2460);
  13065. sendFrame126(option1, 2461);
  13066. sendFrame126(option2, 2462);
  13067. sendFrame164(2459);
  13068. NpcDialogueSend = send;
  13069. }
  13070. public void o3(boolean send, String option, String option1, String option2, String option3)
  13071. {
  13072. sendFrame171(1, 2476);
  13073. sendFrame171(0, 2479);
  13074. sendFrame126(option, 2470);
  13075. sendFrame126(option1, 2471);
  13076. sendFrame126(option2, 2472);
  13077. sendFrame126(option3, 2473);
  13078. sendFrame164(2469);
  13079. NpcDialogueSend = send;
  13080. }
  13081. public void o4(boolean send, String option, String option1, String option2, String option3, String option4)
  13082. {
  13083. sendFrame171(1, 2488);
  13084. sendFrame171(0, 2491);
  13085. sendFrame126(option, 2481);
  13086. sendFrame126(option1, 2481);
  13087. sendFrame126(option2, 2482);
  13088. sendFrame126(option3, 2483);
  13089. sendFrame126(option4, 2484);
  13090. sendFrame164(2480);
  13091. NpcDialogueSend = send;
  13092. }
  13093. public void o5(boolean send, String option, String option1, String option2, String option3, String option4, String option5)
  13094. {
  13095. sendFrame171(1, 2501);
  13096. sendFrame171(0, 2504);
  13097. sendFrame126(option, 2493);
  13098. sendFrame126(option1, 2494);
  13099. sendFrame126(option2, 2495);
  13100. sendFrame126(option3, 2496);
  13101. sendFrame126(option4, 2497);
  13102. sendFrame126(option5, 2498);
  13103. sendFrame164(2492);
  13104. NpcDialogueSend = send;
  13105. }
  13106. public void nt1(boolean send, int npc, int emote, String text)
  13107. {
  13108. sendFrame200(4883, emote);
  13109. sendFrame126(GetNpcName(npc), 4884);
  13110. sendFrame126(text, 4885);
  13111. sendFrame126("Click here to continue", 4886);
  13112. sendFrame75(npc, 4883);
  13113. sendFrame164(4882);
  13114. NpcDialogueSend = send;
  13115. }
  13116. public void nt2(boolean send, int npc, int emote, String text, String text2)
  13117. {
  13118. sendFrame200(4888, emote);
  13119. sendFrame126(GetNpcName(npc), 4889);
  13120. sendFrame126(text, 4890);
  13121. sendFrame126(text2, 4891);
  13122. sendFrame126("Click here to continue", 4892);
  13123. sendFrame75(npc, 4888);
  13124. sendFrame164(4887);
  13125. NpcDialogueSend = send;
  13126. }
  13127. public void nt3(boolean send, int npc, int emote, String text, String text2, String text3)
  13128. {
  13129. sendFrame200(4894, emote);
  13130. sendFrame126(GetNpcName(npc), 4895);
  13131. sendFrame126(text, 4896);
  13132. sendFrame126(text2, 4897);
  13133. sendFrame126(text3, 4898);
  13134. sendFrame126("Click here to continue", 4899);
  13135. sendFrame75(npc, 4894);
  13136. sendFrame164(4893);
  13137. NpcDialogueSend = send;
  13138. }
  13139. public void nt4(boolean send, int npc, int emote, String text, String text2, String text3, String text4)
  13140. {
  13141. sendFrame200(4901, emote);
  13142. sendFrame126(GetNpcName(npc), 4902);
  13143. sendFrame126(text, 4903);
  13144. sendFrame126(text2, 4904);
  13145. sendFrame126(text3, 4905);
  13146. sendFrame126(text4, 4906);
  13147. sendFrame126("Click here to continue", 4907);
  13148. sendFrame75(npc, 4901);
  13149. sendFrame164(4900);
  13150. NpcDialogueSend = send;
  13151. }
  13152. public void pt1(boolean send, int emote, String text)
  13153. {
  13154. sendFrame200(969, emote);
  13155. sendFrame126(playerName, 970);
  13156. sendFrame126(text, 971);
  13157. sendFrame126("Click here to continue", 972);
  13158. sendFrame185(969);
  13159. sendFrame164(968);
  13160. NpcDialogueSend = send;
  13161. }
  13162. public void pt2(boolean send, int emote, String text, String text2)
  13163. {
  13164. sendFrame200(974, emote);
  13165. sendFrame126(playerName, 975);
  13166. sendFrame126(text, 976);
  13167. sendFrame126(text2, 977);
  13168. sendFrame126("Click here to continue", 978);
  13169. sendFrame185(974);
  13170. sendFrame164(973);
  13171. NpcDialogueSend = send;
  13172. }
  13173. public void pt3(boolean send, int emote, String text, String text2, String text3)
  13174. {
  13175. sendFrame200(980, emote);
  13176. sendFrame126(playerName, 981);
  13177. sendFrame126(text, 982);
  13178. sendFrame126(text2, 983);
  13179. sendFrame126(text3, 984);
  13180. sendFrame126("Click here to continue", 985);
  13181. sendFrame185(980);
  13182. sendFrame164(979);
  13183. NpcDialogueSend = send;
  13184. }
  13185. public void pt4(boolean send, int emote, String text, String text2, String text3, String text4)
  13186. {
  13187. sendFrame200(987, emote);
  13188. sendFrame126(playerName, 988);
  13189. sendFrame126(text, 989);
  13190. sendFrame126(text2, 990);
  13191. sendFrame126(text3, 991);
  13192. sendFrame126(text4, 992);
  13193. sendFrame126("Click here to continue", 993);
  13194. sendFrame185(987);
  13195. sendFrame164(986);
  13196. NpcDialogueSend = send;
  13197. }
  13198.  
  13199. //end options talk
  13200.  
  13201.  
  13202. /* NPC Talking*/
  13203. public void UpdateNPCChat() {
  13204.  
  13205. /* sendFrame126("", 4902);
  13206. sendFrame126("", 4903);
  13207. sendFrame126("", 4904);
  13208. sendFrame126("", 4905);
  13209. sendFrame126("", 4906);*/
  13210. sendFrame126("", 976);
  13211. switch (NpcDialogue) {
  13212.  
  13213. case 3:
  13214. nt1(true, 553, 600, "Do you want to buy some runes?");
  13215. break;
  13216.  
  13217. case 4:
  13218. o2(true, "Want to see the shop?", "Yes please!", "No thank you!");
  13219. break;
  13220.  
  13221. case 5:
  13222. pt1(true, 600, "Oh it's a rune shop. No thank you, then.");
  13223. break;
  13224.  
  13225. case 6:
  13226. nt2(false, 553, 593, "Well, if you find somone who want some runes", "Could you please send them here.");
  13227. break;
  13228. case 7:
  13229. nt2(true, 2, 597, "Well, if this was a banana,", "then I'm god.");
  13230. break;
  13231. case 8:
  13232. pt1(true, 600, "Eh.. You dress stupid and I can see why now.");
  13233. break;
  13234. case 9:
  13235. nt2(false, 2, 592, "Don't be mean!", "");
  13236. break;
  13237.  
  13238.  
  13239. case 10:
  13240. nt1(true, 2291, 600, "Would you like to go to the Desert Mining Camp?");
  13241. break;
  13242.  
  13243. case 11:
  13244. o2(true, "Want to fly to the Desert Camp?", "Yes please! (2500gp)", "No thank you!");
  13245. break;
  13246.  
  13247. case 12:
  13248. pt1(true, 600, "Oh not right now thank-you. ");
  13249. break;
  13250. }
  13251. }
  13252.  
  13253. /* OBJECTS*/
  13254. public int GetObject(int X, int Y, int ObjectID) {
  13255. for (int i = 0; i < server.objectHandler.MaxObjects; i++) {
  13256. if (server.objectHandler.ObjectID[i] > -1) {
  13257. if (X == server.objectHandler.ObjectX[i] && Y == server.objectHandler.ObjectY[i]) {
  13258. if (ObjectID != -1) {
  13259. if (ObjectID == server.objectHandler.ObjectID[i]) {
  13260. return i;
  13261. }
  13262. } else {
  13263. return i;
  13264. }
  13265. }
  13266. }
  13267. }
  13268. return -1;
  13269. }
  13270.  
  13271. public void ChangeDoor(int ArrayID) {
  13272. int objectID = server.objectHandler.ObjectOriID[ArrayID];
  13273. int objectX = server.objectHandler.ObjectX[ArrayID];
  13274. int objectY = server.objectHandler.ObjectY[ArrayID];
  13275. int Face = server.objectHandler.ObjectFace[ArrayID];
  13276. int Type = server.objectHandler.ObjectType[ArrayID];
  13277.  
  13278. ReplaceObject(objectX, objectY, -1, -1, 0);
  13279. switch (Type) {
  13280. case 1:
  13281. ReplaceObject(objectX, (objectY+1), objectID, Face, 0);
  13282. server.objectHandler.ObjectType[ArrayID] = 2;
  13283. break;
  13284.  
  13285. case 2:
  13286. ReplaceObject(objectX, (objectY-1), objectID, Face, 0);
  13287. server.objectHandler.ObjectType[ArrayID] = 1;
  13288. break;
  13289.  
  13290. case 3:
  13291. ReplaceObject((objectX+1), objectY, objectID, Face, 0);
  13292. server.objectHandler.ObjectType[ArrayID] = 4;
  13293. break;
  13294.  
  13295. case 4:
  13296. ReplaceObject((objectX-1), objectY, objectID, Face, 0);
  13297. server.objectHandler.ObjectType[ArrayID] = 3;
  13298. break;
  13299. }
  13300. }
  13301.  
  13302. /* ITEMS*/
  13303. public int GetGroundItemID(int ItemID, int ItemX, int ItemY, int ItemH) {
  13304. for (int i = 0; i < server.itemHandler.DropItemCount; i++) {
  13305. if (server.itemHandler.DroppedItemsID[i] > -1) {
  13306. if (server.itemHandler.DroppedItemsID[i] == ItemID && server.itemHandler.DroppedItemsX[i] == ItemX && server.itemHandler.DroppedItemsY[i] == ItemY && server.itemHandler.DroppedItemsH[i] == ItemH && server.itemHandler.DroppedItemsN[i] == 1) {
  13307. return i;
  13308. }
  13309. }
  13310. }
  13311. return -1;
  13312. }
  13313.  
  13314. /* Equipment level checking*/
  13315. public int GetCLAttack(int ItemID) {
  13316. if (ItemID == -1) {
  13317. return 1;
  13318. }
  13319. String ItemName = GetItemName(ItemID);
  13320. String ItemName2 = ItemName.replaceAll("Bronze", "");
  13321.  
  13322. ItemName2 = ItemName2.replaceAll("Iron", "");
  13323. ItemName2 = ItemName2.replaceAll("Steel", "");
  13324. ItemName2 = ItemName2.replaceAll("Black", "");
  13325. ItemName2 = ItemName2.replaceAll("Mithril", "");
  13326. ItemName2 = ItemName2.replaceAll("Adamant", "");
  13327. ItemName2 = ItemName2.replaceAll("Rune", "");
  13328. ItemName2 = ItemName2.replaceAll("Granite", "");
  13329. ItemName2 = ItemName2.replaceAll("Dragon", "");
  13330. ItemName2 = ItemName2.replaceAll("Crystal", "");
  13331. ItemName2 = ItemName2.trim();
  13332. if (ItemName2.startsWith("claws") || ItemName2.startsWith("dagger") || ItemName2.startsWith("sword") || ItemName2.startsWith("scimitar") || ItemName2.startsWith("mace") || ItemName2.startsWith("longsword") || ItemName2.startsWith("battleaxe") || ItemName2.startsWith("warhammer") || ItemName2.startsWith("2h sword") || ItemName2.startsWith("harlberd")) {
  13333. if (ItemName.startsWith("Bronze")) {
  13334. return 1;
  13335. } else if (ItemName.startsWith("Iron")) {
  13336. return 1;
  13337. } else if (ItemName.startsWith("Steel")) {
  13338. return 1;
  13339. } else if (ItemName.startsWith("Black")) {
  13340. return 10;
  13341. } else if (ItemName.startsWith("Mithril")) {
  13342. return 20;
  13343. } else if (ItemName.startsWith("Adamant")) {
  13344. return 30;
  13345. } else if (ItemName.startsWith("Rune")) {
  13346. return 40;
  13347. } else if (ItemName.startsWith("Dragon")) {
  13348. return 60;
  13349. }
  13350. } else if (ItemName.startsWith("Granite")) {
  13351. return 80;
  13352. } else if (ItemName.endsWith("whip") || ItemName.endsWith("Ahrims staff") || ItemName.endsWith("Torags hammers") || ItemName.endsWith("Veracs flail") || ItemName.endsWith("Guthans warspear") || ItemName.endsWith("Dharoks greataxe")) {
  13353. return 1;
  13354. }
  13355. return 1;
  13356. }
  13357.  
  13358. public int GetCLDefence(int ItemID) {
  13359. if (ItemID == -1) {
  13360. return 1;
  13361. }
  13362. String ItemName = GetItemName(ItemID);
  13363. String ItemName2 = ItemName.replaceAll("Bronze", "");
  13364.  
  13365. ItemName2 = ItemName2.replaceAll("Iron", "");
  13366. ItemName2 = ItemName2.replaceAll("Steel", "");
  13367. ItemName2 = ItemName2.replaceAll("Black", "");
  13368. ItemName2 = ItemName2.replaceAll("Mithril", "");
  13369. ItemName2 = ItemName2.replaceAll("Adamant", "");
  13370. ItemName2 = ItemName2.replaceAll("Rune", "");
  13371. ItemName2 = ItemName2.replaceAll("Granite", "");
  13372. ItemName2 = ItemName2.replaceAll("Dragon", "");
  13373. ItemName2 = ItemName2.replaceAll("Crystal", "");
  13374. ItemName2 = ItemName2.trim();
  13375. if (ItemName2.startsWith("claws") || ItemName2.startsWith("dagger") || ItemName2.startsWith("sword") || ItemName2.startsWith("scimitar") || ItemName2.startsWith("mace") || ItemName2.startsWith("longsword") || ItemName2.startsWith("battleaxe") || ItemName2.startsWith("warhammer") || ItemName2.startsWith("2h sword") || ItemName2.startsWith("harlberd")) {
  13376. // It's a weapon, weapons don't required defence !
  13377. } else if (ItemName.startsWith("Ahrims") || ItemName.startsWith("Karil") || ItemName.startsWith("Torag") || ItemName.startsWith("Verac") || ItemName.endsWith("Guthan") || ItemName.endsWith("Dharok")) {
  13378. if (ItemName.endsWith("staff") || ItemName.endsWith("crossbow") || ItemName.endsWith("hammers") || ItemName.endsWith("flail") || ItemName.endsWith("warspear") || ItemName.endsWith("greataxe")) {
  13379. // No defence for the barrow weapons
  13380. } else {
  13381. return 1;
  13382. }
  13383. } else {
  13384. if (ItemName.startsWith("Bronze")) {
  13385. return 1;
  13386. } else if (ItemName.startsWith("Iron")) {
  13387. return 1;
  13388. } else if (ItemName.startsWith("Steel")) {
  13389. return 1;
  13390. } else if (ItemName.startsWith("Black")) {
  13391. return 1;
  13392. } else if (ItemName.startsWith("Mithril")) {
  13393. return 1;
  13394. } else if (ItemName.startsWith("Adamant")) {
  13395. return 1;
  13396. } else if (ItemName.startsWith("Rune")) {
  13397. return 1;
  13398. } else if (ItemName.startsWith("Dragon")) {
  13399. return 1;
  13400. }
  13401. }
  13402. return 1;
  13403. }
  13404.  
  13405. public int GetCLStrength(int ItemID) {
  13406. if (ItemID == -1) {
  13407. return 1;
  13408. }
  13409. String ItemName = GetItemName(ItemID);
  13410.  
  13411. if (ItemName.startsWith("Granite")) {
  13412. return 80;
  13413. } else if (ItemName.startsWith("Torags hammers") || ItemName.endsWith("Dharoks greataxe")) {
  13414. return 1;
  13415. }
  13416. return 1;
  13417. }
  13418.  
  13419. public int GetCLMagic(int ItemID) {
  13420. if (ItemID == -1) {
  13421. return 1;
  13422. }
  13423. String ItemName = GetItemName(ItemID);
  13424.  
  13425. if (ItemName.startsWith("Ahrim")) {
  13426. return 1;
  13427. }
  13428. return 1;
  13429. }
  13430.  
  13431. public int GetCLRanged(int ItemID) {
  13432. if (ItemID == -1) {
  13433. return 1;
  13434. }
  13435. String ItemName = GetItemName(ItemID);
  13436.  
  13437. if (ItemName.startsWith("Karil")) {
  13438. return 1;
  13439. }
  13440. return 1;
  13441. }
  13442.  
  13443. public int GetWorld(int PlayerID) {
  13444. String Server = PlayerHandler.players[PlayerID].playerServer;
  13445.  
  13446. if (Server.equals("rs2.servegame.org") || Server.equals("localhost")) {
  13447. return 1;
  13448. } else if (Server.equals("dodian.com")) {
  13449. return 2;
  13450. } else {
  13451. println_debug("Invalid Server: "+Server);
  13452. return 1; //0; friendlist fix-bakatool
  13453. }
  13454. }
  13455. public void killedPlayer(String name, int combat) {
  13456. int diff = Math.abs(combatLevel-combat);
  13457. String diffString = "";
  13458. if (combatLevel > combat) {
  13459. diffString = "-"+diff;
  13460. } else {
  13461. diffString = "+"+diff;
  13462. }
  13463. sendMessage("You have defeated "+name+"("+diffString+")"+"!");
  13464. if (diff > 7 && combat > combatLevel) {
  13465. sendMessage("You gain double experience!");
  13466. addSkillXP(20000, 18);
  13467. }
  13468. if (diff <= 7 && diff >= 0) {
  13469. sendMessage("You gain regular experience");
  13470. addSkillXP(10000, 18);
  13471. }
  13472. if (diff > 7 && combatLevel > combat) {
  13473. sendMessage("You gain half experience");
  13474. addSkillXP(5000, 18);
  13475. }
  13476. }
  13477. public int freeSpace(int itemid, boolean stackable) {
  13478. for (int i = 0; i < playerItems.length; i++) {
  13479. if (playerItems[i] == itemid && stackable) {
  13480. return i;
  13481. }
  13482. if (playerItems[i] == -1 || playerItems[i] == 0) {
  13483. return i;
  13484. }
  13485. }
  13486. return -1;
  13487. }
  13488. public void setInterfaceWalkable(int ID) {
  13489. outStream.createFrame(208);
  13490. outStream.writeWordBigEndian_dup(ID);
  13491. flushOutStream();
  13492. }
  13493. public void RefreshDuelRules() {
  13494. for (int i = 0; i < duelLine.length; i++) {
  13495. if (duelRule[i]) {
  13496. sendQuest("@red@"+duelNames[i], duelLine[i]);
  13497. } else {
  13498. sendQuest("@cya@"+duelNames[i], duelLine[i]);
  13499. }
  13500. }
  13501. }
  13502.  
  13503. public void LogDuel(String otherName) {
  13504. for (int i = 0; i < otherDuelItems.length; i++) {
  13505. BufferedWriter bw = null;
  13506.  
  13507. try {
  13508. bw = new BufferedWriter(new FileWriter("logs/duels.txt", true));
  13509. bw.write(playerName+" wins item: "+(otherDuelItems[i]-1)+" amount: "+otherDuelItemsN[i]+" from "+otherName);
  13510. bw.newLine();
  13511. bw.flush();
  13512. } catch (IOException ioe) {
  13513. ioe.printStackTrace();
  13514. } finally {
  13515. if (bw != null)
  13516. try {
  13517. bw.close();
  13518. } catch (IOException ioe2) {
  13519. sendMessage("Error logging duel!");
  13520. }
  13521. }
  13522. }
  13523. }
  13524. public void DuelVictory() {
  13525. client other = getClient(duel_with);
  13526. if (validClient(duel_with)) {
  13527. sendMessage("You have defeated "+other.playerName+"!");
  13528. sendQuest(""+other.combat, 6839);
  13529. sendQuest(other.playerName, 6840);
  13530. wonDuel = true;
  13531. }
  13532. boolean stake = false;
  13533. for (GameItem item: offeredItems) {
  13534. if (item.id > 0 && item.amount > 0) {
  13535. stake = true;
  13536. }
  13537. }
  13538. for (GameItem item: otherOfferedItems) {
  13539. if (item.id > 0 && item.amount > 0) {
  13540. stake = true;
  13541. }
  13542. }
  13543. if (stake) {
  13544. itemsToVScreen_old();
  13545. other.resetDuel();
  13546. showInterface(6733);
  13547. } else {
  13548. resetDuel();
  13549. other.resetDuel();
  13550. // duelStatus = -1;
  13551. }
  13552. }
  13553.  
  13554. public boolean DeclineDuel() {
  13555. declineDuel();
  13556. return true;
  13557. }
  13558.  
  13559. public void RemoveAllDuelItems() {
  13560. for (int i = 0; i < duelItems.length; i++) {
  13561. if (duelItems[i] > 0) {
  13562. fromDuel((duelItems[i]-1), i, duelItemsN[i]);
  13563. }
  13564. }
  13565. }
  13566.  
  13567.  
  13568. public int GetDuelItemSlots() {
  13569. int Slots = 0;
  13570. for (int i = 0; i < duelItems.length; i++) {
  13571. if (duelItems[i] > 0) {
  13572. Slots++;
  13573. }
  13574. }
  13575. for (int i = 0; i < otherDuelItems.length; i++) {
  13576. if (otherDuelItems[i] > 0) {
  13577. Slots++;
  13578. }
  13579. }
  13580. return Slots;
  13581. }
  13582. public void itemsToVScreen_old() {
  13583. outStream.createFrameVarSizeWord(53);
  13584. outStream.writeWord(6822);
  13585. outStream.writeWord(otherOfferedItems.toArray().length);
  13586. for (GameItem item: otherOfferedItems) {
  13587. if (item.amount > 254) {
  13588. outStream.writeByte(255); // item's stack count. if over 254, write byte 255
  13589. outStream.writeDWord_v2(item.amount); // and then the real value with writeDWord_v2
  13590. } else {
  13591. outStream.writeByte(item.amount);
  13592. }
  13593. if (item.id > 20000 || item.id < 0) {
  13594. item.id = 20000;
  13595. }
  13596. outStream.writeWordBigEndianA(item.id+1); //item id
  13597. }
  13598. outStream.endFrameVarSizeWord();
  13599. }
  13600. public void itemsToVScreen(int x, int y) {
  13601. Player p = handler.players[duelWith];
  13602. if (p != null && p.playerId == playerId)
  13603. return;
  13604. for (int i = 0; i < otherDuelItems.length; i++) {
  13605. if (otherDuelItems[i] > 0 && otherDuelItemsN[i] > 0) {
  13606. if (Item.itemStackable[otherDuelItems[i]-1]) {
  13607. ItemHandler.addItem(otherDuelItems[i]-1, enemyX, enemyY, otherDuelItemsN[i], playerId, false);
  13608. } else {
  13609. int amount = otherDuelItemsN[i];
  13610. for (int a = 1; a <= amount; a++) {
  13611. ItemHandler.addItem(otherDuelItems[i]-1, enemyX, enemyY, 1, playerId, false);
  13612. }
  13613. }
  13614. }
  13615.  
  13616. }
  13617. for (int i1 = 0; i1 < duelItems.length; i1++) {
  13618. if (duelItems[i] > 0 && duelItemsN[i] > 0)
  13619. addItem(duelItems[i1]-1, duelItemsN[i1]);
  13620. }
  13621. //resetDuel();
  13622. }
  13623.  
  13624. public void refreshDuelScreen() {
  13625. client other = getClient(duel_with);
  13626. if (!validClient(duel_with))
  13627. return;
  13628. outStream.createFrameVarSizeWord(53);
  13629. outStream.writeWord(6669);
  13630. outStream.writeWord(offeredItems.toArray().length);
  13631. int current = 0;
  13632. for (GameItem item: offeredItems) {
  13633. if (item.amount > 254) {
  13634. outStream.writeByte(255); // item's stack count. if over 254, write byte 255
  13635. outStream.writeDWord_v2(item.amount); // and then the real value with writeDWord_v2
  13636. } else {
  13637. outStream.writeByte(item.amount);
  13638. }
  13639. if (item.id > 20000 || item.id < 0) {
  13640. item.id = 20000;
  13641. }
  13642. outStream.writeWordBigEndianA(item.id+1); //item id
  13643. current++;
  13644. }
  13645. if (current < 27) {
  13646. for (int i = current; i < 28; i++) {
  13647. outStream.writeByte(1);
  13648. outStream.writeWordBigEndianA(-1);
  13649. }
  13650. }
  13651. outStream.endFrameVarSizeWord();
  13652. outStream.createFrameVarSizeWord(53);
  13653. outStream.writeWord(6670);
  13654. outStream.writeWord(other.offeredItems.toArray().length);
  13655. current = 0;
  13656. for (GameItem item: other.offeredItems) {
  13657. if (item.amount > 254) {
  13658. outStream.writeByte(255); // item's stack count. if over 254, write byte 255
  13659. outStream.writeDWord_v2(item.amount); // and then the real value with writeDWord_v2
  13660. } else {
  13661. outStream.writeByte(item.amount);
  13662. }
  13663. if (item.id > 20000 || item.id < 0) {
  13664. item.id = 20000;
  13665. }
  13666. outStream.writeWordBigEndianA(item.id+1); //item id
  13667. current++;
  13668. }
  13669. if (current < 27) {
  13670. for (int i = current; i < 28; i++) {
  13671. outStream.writeByte(1);
  13672. outStream.writeWordBigEndianA(-1);
  13673. }
  13674. }
  13675. outStream.endFrameVarSizeWord();
  13676. }
  13677. public boolean stakeItem(int itemID, int fromSlot, int amount) {
  13678. if (playerRights == 0 || playerRights <= 1) {
  13679. if (System.currentTimeMillis() - lastButton < 2000) {
  13680. return false;
  13681. }
  13682. }
  13683. lastButton = System.currentTimeMillis();
  13684. if (!Item.itemStackable[itemID] && !Item.itemIsNote[itemID]
  13685. && (amount > 1)) {
  13686. for (int a = 1; a <= amount; a++) {
  13687. int slot = findItem(itemID, playerItems, playerItemsN);
  13688. if (slot >= 0) {
  13689. stakeItem(itemID, slot, 1);
  13690. }
  13691. }
  13692. }
  13693. for (int element : noTrade) {
  13694. if ((itemID == element) || (itemID == element + 1)) {
  13695. sendMessage("You can't trade that item");
  13696. // declineDuel();
  13697. return false;
  13698. }
  13699. }
  13700. client other = getClient(duel_with);
  13701. if (!inDuel || !validClient(duel_with)) {
  13702. declineDuel();
  13703. return false;
  13704. }
  13705. if (!canOffer) {
  13706. return false;
  13707. }
  13708. if (!playerHasItem(itemID, amount)) {
  13709. return false;
  13710. }
  13711. if (Item.itemStackable[itemID] || Item.itemIsNote[itemID]) {
  13712. boolean inTrade = false;
  13713. for (GameItem item : offeredItems) {
  13714. if (item.id == itemID) {
  13715. inTrade = true;
  13716. item.amount += amount;
  13717. break;
  13718. }
  13719. }
  13720. if (!inTrade) {
  13721. offeredItems.add(new GameItem(itemID, amount));
  13722. }
  13723. } else {
  13724. offeredItems.add(new GameItem(itemID, 1));
  13725. }
  13726. deleteItem(itemID, fromSlot, amount);
  13727. resetItems(3214);
  13728. resetItems(3322);
  13729. other.resetItems(3214);
  13730. other.resetItems(3322);
  13731. refreshDuelScreen();
  13732. other.refreshDuelScreen();
  13733. sendFrame126("", 6684);
  13734. other.sendFrame126("", 6684);
  13735. return true;
  13736. }
  13737.  
  13738. /*public boolean stakeItem2(int itemID, int fromSlot, int amount) {
  13739. if(!Item.itemStackable[itemID] && amount > 1){
  13740. for(int a = 1; a <= amount; a++){
  13741. int slot = findItem(itemID, playerItems, playerItemsN);
  13742. if(slot >= 0){
  13743. tradeItem(itemID, slot, 1);
  13744. }
  13745. }
  13746. }
  13747. for(int i = 0; i < noTrade.length; i++){
  13748. if(itemID == noTrade[i] || itemID == noTrade[i] + 1 || premiumItem(itemID)){
  13749. sendMessage("You can't trade that item");
  13750. declineTrade();
  13751. return false;
  13752. }
  13753. }
  13754. client other = getClient(duel_with);
  13755. if (!inDuel || !validClient(duel_with) || !canOffer){
  13756. declineDuel();
  13757. return false;
  13758. }
  13759. if(!playerHasItem(itemID, amount)){
  13760. return false;
  13761. }
  13762. if(Item.itemStackable[itemID])
  13763. offeredItems.add(new GameItem(itemID, amount));
  13764. else
  13765. offeredItems.add(new GameItem(itemID, 1));
  13766. deleteItem(itemID, fromSlot, amount);
  13767. resetItems(3214);
  13768. duelz.resetItems(3214);
  13769. resetItems(3322);
  13770. refreshDuelScreen();
  13771. duelz.resetItems(3322);
  13772. duelz.refreshDuelScreen();
  13773. duelz.sendFrame126("", 6684);
  13774. return false;
  13775. }*/
  13776.  
  13777. public boolean fromDuel(int itemID, int fromSlot, int amount) {
  13778. if (System.currentTimeMillis()-lastButton < 800) {
  13779. return false;
  13780. }
  13781. lastButton = System.currentTimeMillis();
  13782. client other = getClient(duel_with);
  13783. if (!inDuel || ! validClient(duel_with) || ! canOffer) {
  13784. declineDuel();
  13785. return false;
  13786. }
  13787. if (!Item.itemStackable[itemID] && amount > 1) {
  13788. for (int a = 1; a <= amount; a++) {
  13789. int slot = findItem(itemID, playerItems, playerItemsN);
  13790. if (slot >= 0) {
  13791. fromDuel(itemID, 0, 1);
  13792. }
  13793. }
  13794. }
  13795. boolean found = false;
  13796. for (GameItem item: offeredItems) {
  13797. if (item.id == itemID) {
  13798. if (!item.stackable) {
  13799. offeredItems.remove(item);
  13800. found = true;
  13801. } else {
  13802. if (item.amount > amount) {
  13803. item.amount -= amount;
  13804. found = true;
  13805. } else {
  13806. amount = item.amount;
  13807. found = true;
  13808. offeredItems.remove(item);
  13809. }
  13810. }
  13811. break;
  13812. }
  13813. }
  13814. if (found)
  13815. addItem(itemID, amount);
  13816. duelConfirmed = false;
  13817. other.duelConfirmed = false;
  13818. resetItems(3214);
  13819. other.resetItems(3214);
  13820. resetItems(3322);
  13821. other.resetItems(3322);
  13822. refreshDuelScreen();
  13823. other.refreshDuelScreen();
  13824. other.sendFrame126("", 6684);
  13825.  
  13826. return true;
  13827. }
  13828.  
  13829. public void frame1() {
  13830. // cancels all player and npc emotes within area!
  13831. outStream.createFrame(1);
  13832. updateRequired = true;
  13833. appearanceUpdateRequired = true;
  13834. }
  13835. public void resetKeepItem() {
  13836. }
  13837. public int randomItem(int[]array) {
  13838. int len = array.length;
  13839. int ran = misc.random(len);
  13840. return array[ran];
  13841. }
  13842. public void walkTo_old(int X, int Y) {
  13843. int firstStepX = inStream.readSignedWordBigEndianA();
  13844. int tmpFSX = X;
  13845. X -= mapRegionX*8;
  13846. for (i = 1; i < newWalkCmdSteps; i++) {
  13847. newWalkCmdX[i] = inStream.readSignedByte();
  13848. newWalkCmdY[i] = inStream.readSignedByte();
  13849. tmpNWCX[i] = newWalkCmdX[i];
  13850. tmpNWCY[i] = newWalkCmdY[i];
  13851. }
  13852. newWalkCmdX[0] = newWalkCmdY[0] = tmpNWCX[0] = tmpNWCY[0] = 0;
  13853. int firstStepY = inStream.readSignedWordBigEndian();
  13854. int tmpFSY = Y;
  13855. Y -= mapRegionY*8;
  13856. newWalkCmdIsRunning = inStream.readSignedByteC() == 1;
  13857. for (i = 0; i < newWalkCmdSteps; i++) {
  13858. newWalkCmdX[i] += X;
  13859. newWalkCmdY[i] += Y;
  13860. }
  13861. println_debug("Walking to X:"+X+" Y:"+Y);
  13862. }
  13863. public void walkTo(int x, int y) {
  13864. newWalkCmdX[1] += x;
  13865. newWalkCmdY[1] += y;
  13866. tmpNWCX[1] = newWalkCmdX[i];
  13867. tmpNWCY[1] = newWalkCmdY[i];
  13868. newWalkCmdIsRunning = true;
  13869. }
  13870. public int[]getLook() {
  13871. return new int[] {
  13872. pGender, pHead, pBeard, pTorso, pArms, pHands, pLegs, pFeet, pHairC, pTorsoC, pLegsC, pFeetC, pSkinC, playerLook[0], playerLook[1], playerLook[2], playerLook[3], playerLook[4], playerLook[5]
  13873. };
  13874. }
  13875. public void setLook(int[]parts) {
  13876. if (parts.length != 19) {
  13877. println("setLook: Invalid array length!");
  13878. return;
  13879. }
  13880. pGender = parts[0];
  13881. pHead = parts[1];
  13882. pBeard = parts[2];
  13883. pTorso = parts[3];
  13884. pArms = parts[4];
  13885. pHands = parts[5];
  13886. pLegs = parts[6];
  13887. pFeet = parts[7];
  13888. pHairC = parts[8];
  13889. pTorsoC = parts[9];
  13890. pLegsC = parts[10];
  13891. pFeetC = parts[11];
  13892. pSkinC = parts[12];
  13893. playerLook[0] = parts[13];
  13894. playerLook[1] = parts[14];
  13895. playerLook[2] = parts[15];
  13896. playerLook[3] = parts[16];
  13897. playerLook[4] = parts[17];
  13898. playerLook[5] = parts[18];
  13899. apset = true;
  13900. appearanceUpdateRequired = true;
  13901. lookUpdate = true;
  13902. updateRequired = true;
  13903. }
  13904. public int maxRangeHit() {
  13905. int hit = (int)((playerBonus[4]+playerLevel[playerRanged])/12);
  13906. return hit;
  13907. }
  13908. public void buryItem(int item, int slot) {
  13909. if (duelRule[7] && inDuel && duelFight) {
  13910. sendMessage("Food has been disabled for this duel");
  13911. return;
  13912. }
  13913. boolean used = true;
  13914. if (playerHasItem(item)) {
  13915. int[] grimherb = {199,201,203,205,207,209,211,213,215,217,219};
  13916. int[] grimxp = {10,20,30,40,50,60,70,80,90,100,110};
  13917. int[] herblv = {1,15,25,35,45,55,65,75,80,85,90};
  13918. for(int grim = 0; grim < grimherb.length; grim++) {
  13919. if(item == grimherb[grim]) {
  13920. if(playerLevel[playerHerblore] >= herblv[grim]) {
  13921. if(freeSlots() > 0) {
  13922. addItem(grimherb[grim]+50,1);
  13923. deleteItem(grimherb[grim], 1);
  13924. addSkillXP(grimxp[grim], playerHerblore);
  13925. } else {
  13926. ItemHandler.addItem(grimherb[grim]+50, absX, absY, 1, playerId, false);
  13927. sendMessage("Your herb landed on the ground!");
  13928. deleteItem(grimherb[grim], 1);
  13929. addSkillXP(grimxp[grim], playerHerblore);
  13930. }
  13931. } else {
  13932. sendMessage("You need level "+herblv[grim]+" herblore to identify this herb!");
  13933. }
  13934. }
  13935. }
  13936. switch (item) {
  13937. case 526:
  13938. prayerMessage(70);
  13939. break;
  13940. case 532:
  13941. prayerMessage(115);
  13942. break;
  13943. case 3125:
  13944. prayerMessage(300);
  13945. break;
  13946. case 536:
  13947. prayerMessage(450);
  13948. break;
  13949. case 4834:
  13950. prayerMessage(800);
  13951. break;
  13952. case 315:
  13953. setAnimation(0x33D);
  13954. animationReset = System.currentTimeMillis()+750;
  13955. currentHealth += 5;
  13956. if (currentHealth > playerLevel[playerHitpoints])
  13957. currentHealth = playerLevel[playerHitpoints];
  13958. sendMessage("You eat the Shrimps");
  13959. break;
  13960. case 361:
  13961. setAnimation(0x33D);
  13962. animationReset = System.currentTimeMillis()+750;
  13963. currentHealth += 8;
  13964. if (currentHealth > playerLevel[playerHitpoints])
  13965. currentHealth = playerLevel[playerHitpoints];
  13966. sendMessage("You eat the Tuna");
  13967. break;
  13968. case 379:
  13969. setAnimation(0x33D);
  13970. animationReset = System.currentTimeMillis()+750;
  13971. currentHealth += 12;
  13972. if (currentHealth > playerLevel[playerHitpoints])
  13973. currentHealth = playerLevel[playerHitpoints];
  13974. sendMessage("You eat the Lobster");
  13975. break;
  13976. case 373:
  13977. setAnimation(0x33D);
  13978. animationReset = System.currentTimeMillis()+750;
  13979. currentHealth += 16;
  13980. if (currentHealth > playerLevel[playerHitpoints])
  13981. currentHealth = playerLevel[playerHitpoints];
  13982. sendMessage("You eat the Swordfish");
  13983. break;
  13984. case 385:
  13985. setAnimation(0x33D);
  13986. animationReset = System.currentTimeMillis()+750;
  13987. currentHealth += 20;
  13988. if (currentHealth > playerLevel[playerHitpoints])
  13989. currentHealth = playerLevel[playerHitpoints];
  13990. sendMessage("You eat the Shark");
  13991. break;
  13992. default: used = true;
  13993. break;
  13994. case 5074:
  13995. deleteItem(5074, 1);
  13996. addItem(1635, 1);
  13997. break;
  13998. }
  13999. }
  14000. if (used)
  14001. if(item != 4155) {
  14002. deleteItem(item, slot, 1);
  14003. }
  14004. }
  14005. public void prayerMessage(int exp) {
  14006. setAnimation(827);
  14007. animationReset = System.currentTimeMillis()+1000;
  14008. addSkillXP(exp, 5);
  14009. sendMessage("You bury the bones");
  14010. }
  14011. public void updateRating() {
  14012. sendQuest("Pk: "+rating, 3985);
  14013. }
  14014. public void resetPos() {
  14015. teleportToX = 2606;
  14016. teleportToY = 3102;
  14017. sendMessage("You have been teleported back to Yanille");
  14018. }
  14019. public void addClick(int ms) {
  14020. println("adding click "+ms+" (clickindex = "+clickIndex+" )");
  14021. if (clickIndex <= clicks.length-1) {
  14022. clicks[clickIndex] = ms;
  14023. clickIndex++;
  14024. } else {
  14025. int[]precision = new int[50];
  14026. int average = average(clicks);
  14027. for (int i = 0; i < precision.length; i++) {
  14028. precision[i] = Math.abs(clicks[i]-average);
  14029. println("precision["+i+"]="+precision[i]);
  14030. }
  14031. resetArray(clicks);
  14032. clickIndex = 0;
  14033. }
  14034. }
  14035. public int average(int[]array) {
  14036. int total = 0;
  14037. for (int i = 0; i < array.length; i++) {
  14038. total += array[i];
  14039. }
  14040. int average = (int)(total/array.length);
  14041. println("total="+total+", average="+average);
  14042. return average;
  14043. }
  14044. public void resetArray(int[]array) {
  14045. for (int i = 0; i < array.length; i++) {
  14046. array[i] = 0;
  14047. }
  14048. }
  14049. public boolean canUse(int id) {
  14050. if (!premium && premiumItem(id)) {
  14051. return false;
  14052. }
  14053. return true;
  14054. }
  14055. public boolean premiumItem(int id) {
  14056. if (id >= 2583 && id <= 2630 || id == 1037 || id == 1419 || id == 4676) {
  14057. return true;
  14058. }
  14059. return false;
  14060. }
  14061. public void debug(String text) {
  14062. if (debug)
  14063. sendMessage(text);
  14064. }
  14065. public void triggerRandom() {
  14066. if (!randomed) {
  14067. random_skill = misc.random(statName.length)-1;
  14068. if (random_skill < 0)
  14069. random_skill = 0;
  14070. sendQuest("Click the @or1@"+statName[random_skill]+" @yel@button", 2810);
  14071. sendQuest("", 2811);
  14072. sendQuest("", 2831);
  14073. randomed = true;
  14074. showInterface(2808);
  14075. }
  14076. }
  14077. public int findItem(int id, int[]items, int[]amounts) {
  14078. for (int i = 0; i < playerItems.length; i++) {
  14079. if ((items[i]-1) == id && amounts[i] > 0) {
  14080. return i;
  14081. }
  14082. }
  14083. return -1;
  14084. }
  14085. public boolean hasSpace() {
  14086. for (int i = 0; i < playerItems.length; i++) {
  14087. if (playerItems[i] == -1 || playerItems[i] == 0) {
  14088. return true;
  14089. }
  14090. }
  14091. return false;
  14092. }
  14093. public void smelt(int id) {
  14094. setAnimation(0x383);
  14095. smelt_id = id;
  14096. smelting = true;
  14097. int smelt_barId = -1;
  14098. ArrayList < Integer > removed = new ArrayList < Integer > ();
  14099. if (smeltCount < 1) {
  14100. resetAction(true);
  14101. return;
  14102. }
  14103. smeltCount--;
  14104. switch (id) {
  14105. case 2349:
  14106. //bronze
  14107. if (playerHasItem(436) && playerHasItem(438)) {
  14108. smelt_barId = 2349;
  14109. removed.add(436);
  14110. removed.add(438);
  14111. }
  14112. break;
  14113. case 2351:
  14114. //iron ore
  14115. if (playerHasItem(440)) {
  14116. int ran = misc.random(3);
  14117. if (ran == 1 || ran == 2) {
  14118. smelt_barId = 2351;
  14119. removed.add(440);
  14120. }
  14121. else {
  14122. smelt_barId = 0;
  14123. removed.add(440);
  14124. sendMessage("You fail to refine the iron");
  14125. }
  14126. }
  14127. break;
  14128. case 2353:
  14129. if (playerHasItem(440) && playerHasItem(453, 2)) {
  14130. smelt_barId = 2353;
  14131. removed.add(440);
  14132. removed.add(453);
  14133. removed.add(453);
  14134. }
  14135. break;
  14136. case 2359:
  14137. if (playerHasItem(447) && playerHasItem(453, 3)) {
  14138. smelt_barId = 2359;
  14139. removed.add(447);
  14140. removed.add(453);
  14141. removed.add(453);
  14142. removed.add(453);
  14143. }
  14144. break;
  14145. case 2361:
  14146. if (playerHasItem(449) && playerHasItem(453, 4)) {
  14147. smelt_barId = 2361;
  14148. removed.add(449);
  14149. removed.add(453);
  14150. removed.add(453);
  14151. removed.add(453);
  14152. removed.add(453);
  14153. }
  14154. break;
  14155. }
  14156. if (smelt_barId == -1) {
  14157. resetAction();
  14158. return;
  14159. }
  14160. if (true) {
  14161. for (Integer intId: removed) {
  14162. int removeId = intId.intValue();
  14163. deleteItem(removeId, 1);
  14164. }
  14165. if (smelt_barId > 0)
  14166. addItem(smelt_barId, 1);
  14167. } else {
  14168. sendMessage("Your inventory is full!");
  14169. resetAction();
  14170. }
  14171. }
  14172.  
  14173. public void startfishing(int obj) {
  14174. int[] object = {316, 312, 312, 1177, 1176};
  14175. int[][] fish = {{317,1,303,-1,70,621,55}, {359,35,311,-1,55,618,135}, {377,40,301,-1,50,619,180}, {371,50,311,-1,42,618,240}, {383,76,311,-1,35,618,460}};//{fish,fish level,fish item req,fish item req 2,fish fails,fish emote,fishxp}
  14176. long[] fishitime = {6000, 10000, 14000, 18000, 26000};
  14177. String[] fishtext = {"Shrimp", "Tuna", "Lobster", "Swordfish", "Shark"};
  14178. for(int i = 0; i < object.length; i++) {
  14179. if(obj == object[i]) {
  14180. if (playerLevel[playerFishing] >= fish[i][1]) {
  14181. if(playerHasItem(fish[i][2])) {
  14182. if(freeSlots() > 0) {
  14183. if(misc.random(100) <= (fish[i][4])+(playerLevel[playerFishing]/2)) {
  14184. addItem(fish[i][0], 1);
  14185. pEmote = fish[i][5];
  14186. fishing = true;
  14187. addSkillXP(fish[i][6], playerFishing);
  14188. fishspeed = (fishitime[i]);
  14189. sendMessage("You catch a "+fishtext[i]+"");
  14190. fishId = obj;
  14191. } else {
  14192. fishing = true;
  14193. fishspeed = (fishitime[i]);
  14194. pEmote = fish[i][5];
  14195. if(playerRights > 2) {
  14196. sendMessage("You fail to catch a "+fishtext[i]+"");
  14197. }
  14198. }
  14199. } else {
  14200. sendMessage("No space to catch the fish");
  14201. fishId = -1;
  14202. fishing = false;
  14203. resetAnimation();
  14204. }
  14205. } else {
  14206. sendMessage("You need a "+GetItemName(fish[i][2])+" to fish here!");
  14207. fishId = -1;
  14208. }
  14209. } else {
  14210. sendMessage("You need to have level "+fish[i][1]+" fishing to fish here!");
  14211. fishId = -1;
  14212. }}}}
  14213.  
  14214. public void resetAction(boolean full) {
  14215. smelting = false;
  14216. smelt_id = -1;
  14217. shafting = false;
  14218. spinning = false;
  14219. crafting = false;
  14220. fishing = false;
  14221. if (fletching) {
  14222. //playerEquipment[playerWeapon] = originalW;
  14223. //playerEquipment[playerWeapon] = originalS;
  14224. updateRequired = true;
  14225. appearanceUpdateRequired = true;
  14226. }
  14227. fletching = false;
  14228. if (full)
  14229. resetAnimation();
  14230. }
  14231. public void resetAction() {
  14232. resetAction(true);
  14233. }
  14234. public void shaft() {
  14235. closeInterface();
  14236. if (playerHasItem(1511)) {
  14237. if (playerHasItem(-1)) {
  14238. deleteItem(1511, 1);
  14239. addItem(52, 15);
  14240. addSkillXP(30, playerFletching);
  14241. } else {
  14242. sendMessage("Your inventory is full!");
  14243. resetAction();
  14244. }
  14245. } else {
  14246. resetAction();
  14247. }
  14248. }
  14249. public void fletchBow(boolean shortBow, int amount) {
  14250. closeInterface();
  14251. if (shortBow) {
  14252. if (playerLevel[playerFletching] >= shortreq[fletchLog]) {
  14253. fletchId = shortbows[fletchLog];
  14254. fletchExp = shortexp[fletchLog];
  14255. } else {
  14256. sendMessage("Requires fletching "+shortreq[fletchLog]+"!");
  14257. resetAction();
  14258. }
  14259. } else {
  14260. if (playerLevel[playerFletching] >= longreq[fletchLog]) {
  14261. fletchId = longbows[fletchLog];
  14262. fletchExp = longexp[fletchLog];
  14263. } else {
  14264. sendMessage("Requires fletching "+longreq[fletchLog]+"!");
  14265. resetAction();
  14266. }
  14267. }
  14268. fletching = true;
  14269. fletchAmount = amount;
  14270. }
  14271. public void fletchBow() {
  14272. if (fletchAmount < 1) {
  14273. resetAction();
  14274. return;
  14275. }
  14276. fletchAmount--;
  14277. closeInterface();
  14278. IsBanking = false;
  14279. pEmote = 885;
  14280. updateRequired = true;
  14281. appearanceUpdateRequired = true;
  14282. if(playerLevel[playerFletching] >= longreq[fletchLog]) {
  14283. if (playerHasItem(logs[fletchLog])) {
  14284. deleteItem(logs[fletchLog], 1);
  14285. addItem(fletchId, 1);
  14286. addSkillXP(fletchExp, playerFletching);
  14287. }
  14288. } else {
  14289. resetAction();
  14290. }
  14291. }
  14292.  
  14293.  
  14294. public void spinflax() {
  14295. if (playerHasItem(1779)) {
  14296. deleteItem(1779, 1);
  14297. addItem(1777, 1);
  14298. lastAction = System.currentTimeMillis();
  14299. addSkillXP(115, playerCrafting);
  14300. spinflax();
  14301. } else {
  14302. resetAction(true);
  14303. }
  14304. }
  14305. public void spinwool() {
  14306. if (playerHasItem(1737)) {
  14307. deleteItem(1737, 1);
  14308. addItem(1759, 1);
  14309. lastAction = System.currentTimeMillis();
  14310. addSkillXP(55, playerCrafting);
  14311. spinwool();
  14312. } else {
  14313. resetAction(true);
  14314. }
  14315. }
  14316. public void openTan() {
  14317. sendQuest("Regular Leather", 14777);
  14318. sendQuest("50gp", 14785);
  14319. sendQuest("Hard Leather", 14781);
  14320. sendQuest("100gp", 14789);
  14321. sendQuest("", 14778);
  14322. sendQuest("", 14786);
  14323. sendQuest("", 14782);
  14324. sendQuest("", 14790);
  14325. int[]soon = {
  14326. 14779, 14787, 14783, 14791, 14780, 14788, 14784, 14792
  14327. };
  14328. String[]dhide = {
  14329. "Green", "Red", "Blue", "Black"
  14330. };
  14331. String[]cost = {
  14332. "1,000gp", "5,000gp", "2,000gp", "10,000gp"
  14333. };
  14334. int type = 0, i2 = 0;
  14335. for (int i = 0; i < soon.length; i++) {
  14336. if (type == 0) {
  14337. sendQuest(dhide[(int)(i/2)], soon[i]);
  14338. type = 1;
  14339. } else {
  14340. sendQuest(cost[(int)(i/2)], soon[i]);
  14341. type = 0;
  14342. }
  14343. }
  14344. sendFrame246(14769, 250, 1741);
  14345. sendFrame246(14773, 250, 1743);
  14346. sendFrame246(14771, 250, 1753);
  14347. sendFrame246(14772, 250, 1751);
  14348. sendFrame246(14775, 250, 1749);
  14349. sendFrame246(14776, 250, 1747);
  14350. showInterface(14670);
  14351.  
  14352. }
  14353. public void startTan(int amount, int type) {
  14354. int done = 0;
  14355. int[]hide = {
  14356. 1739, 1739, 1753, 1751, 1749, 1747
  14357. };
  14358. int[]leather = {
  14359. 1741, 1743, 1745, 2505, 2507, 2509
  14360. };
  14361. int[]charge = {
  14362. 50, 100, 1000, 2000, 5000, 10000
  14363. };
  14364. while (done < amount && playerHasItem(hide[type]) && playerHasItem(995, charge[type])) {
  14365. deleteItem(hide[type], 1);
  14366. deleteItem(995, charge[type]);
  14367. addItem(leather[type], 1);
  14368. done++;
  14369. }
  14370. int total = done*charge[type];
  14371. /*dMsg = "That's " + total + "gp for " + done + " hides";
  14372. NpcWanneTalk = 10;
  14373. skillX = absX;
  14374. skillY = absY;
  14375. NpcTalkTo = 804;*/
  14376. }
  14377. public void startCraft(int actionbutton) {
  14378. closeInterface();
  14379. int[]buttons = {
  14380. 33187, 33186, 33185, 33190, 33189, 33188, 33193, 33192, 33191, 33196, 33195, 33194, 33199, 33198, 33197, 33202, 33201, 33200, 33205, 33204, 33203
  14381. };
  14382. int[]amounts = {
  14383. 1, 5, 10, 1, 5, 10, 1, 5, 10, 1, 5, 10, 1, 5, 10, 1, 5, 10, 1, 5, 10
  14384. };
  14385. int[]ids = {
  14386. 1129, 1129, 1129, 1059, 1059, 1059, 1061, 1061, 1061, 1063, 1063, 1063, 1095, 1095, 1095, 1169, 1169, 1169, 1167, 1167, 1167
  14387. };
  14388. int[]levels = {
  14389. 14, 14, 14, 1, 1, 1, 7, 7, 7, 11, 11, 11, 18, 18, 18, 38, 38, 38, 9, 9, 9
  14390. };
  14391. int[]exp = {
  14392. 27, 27, 27, 14, 14, 14, 16, 16, 16, 22, 22, 22, 27, 27, 27, 37, 37, 37, 19, 19, 19
  14393. };
  14394. int amount = 0, id = -1;
  14395. int index = 0;
  14396. for (int i = 0; i < buttons.length; i++) {
  14397. if (actionbutton == buttons[i]) {
  14398. amount = amounts[i];
  14399. id = ids[i];
  14400. index = i;
  14401. }
  14402. }
  14403.  
  14404. if (playerLevel[playerCrafting] >= levels[index]) {
  14405. crafting = true;
  14406. cItem = id;
  14407. cAmount = amount;
  14408. cLevel = levels[index];
  14409. cExp = Math.round(exp[index]*9);
  14410. cSelected = 1741;
  14411. } else {
  14412. sendMessage("Requires level "+levels[index]);
  14413. }
  14414. }
  14415. public void craft() {
  14416. if (playerLevel[playerCrafting] < cLevel) {
  14417. sendMessage("You need "+cLevel+" crafting to make a "+GetItemName(cItem));
  14418. resetAction(true);
  14419. return;
  14420. }
  14421. pEmote = 885;
  14422. updateRequired = true;
  14423. appearanceUpdateRequired = true;
  14424. if (playerHasItem(cSelected, 1) && playerHasItem(1734) && cAmount > 0) {
  14425. deleteItem(cSelected, 1);
  14426. deleteItem(1734, 1);
  14427. sendMessage("You make some "+GetItemName(cItem));
  14428. addItem(cItem, 1);
  14429. addSkillXP(cExp, playerCrafting);
  14430. cAmount--;
  14431. if (cAmount < 1)
  14432. resetAction(true);
  14433. } else {
  14434. resetAction(true);
  14435. }
  14436. }
  14437. public void craftMenu(int i) {
  14438. sendQuest("What would you like to make?", 8898);
  14439. sendQuest("Vambraces", 8889);
  14440. sendQuest("Chaps", 8893);
  14441. sendQuest("Body", 8897);
  14442. sendFrame246(8883, 250, gloves[i]);
  14443. sendFrame246(8884, 250, legs[i]);
  14444. sendFrame246(8885, 250, chests[i]);
  14445. sendFrame164(8880);
  14446. }
  14447. public void startHideCraft(int b) {
  14448. int[]buttons = {
  14449. 34185, 34184, 34183, 34182, 34189, 34188, 34187, 34186, 34193, 34192, 34191, 34190
  14450. };
  14451. int[]amounts = {
  14452. 1, 5, 10, 27
  14453. };
  14454. int index = 0;
  14455. int index2 = 0;
  14456. for (int i = 0; i < buttons.length; i++) {
  14457. if (buttons[i] == b) {
  14458. index = i%4;
  14459. index2 = (int)(i/4);
  14460. break;
  14461. }
  14462. }
  14463. cAmount = amounts[index];
  14464. cSelected = leathers[cIndex];
  14465. int required = 99;
  14466. if (index2 == 0) {
  14467. required = gloveLevels[cIndex];
  14468. cItem = gloves[cIndex];
  14469. cExp = gloveExp[cIndex];
  14470. } else if (index2 == 1) {
  14471. required = legLevels[cIndex];
  14472. cItem = legs[cIndex];
  14473. cExp = legExp[cIndex];
  14474. } else {
  14475. required = chestLevels[cIndex];
  14476. cItem = chests[cIndex];
  14477. cExp = chestExp[cIndex];
  14478. }
  14479. if (playerLevel[playerCrafting] >= required) {
  14480. cExp = (int)(cExp*8);
  14481. crafting = true;
  14482. closeInterface();
  14483. } else {
  14484. sendMessage("Requires level "+required);
  14485. }
  14486. }
  14487. public void reportAbuse(String abuser, int rule, int muted) {
  14488. if(playerRights == 0){
  14489. writeLog("abuser = "+abuser+" for rule "+rule+" muted? "+(muted > 0 ? "yes" : "no"), "reports");
  14490. sendMessage("Your report has been stored and online moderators have also been notified");
  14491. } else {
  14492. boolean online = true;
  14493. //int duration = misc.times[rule];
  14494. for(int i = 0; i < handler.players.length; i++){
  14495. client other = getClient(i);
  14496. if(!validClient(i)) continue;
  14497. if(other.playerName.equalsIgnoreCase(abuser)){
  14498. online = true;
  14499. other.kick();
  14500. break;
  14501. }
  14502. }
  14503.  
  14504. if(online){
  14505. sendMessage("Player kicked off server");
  14506. } else {
  14507. sendMessage("Player was not online");
  14508. }
  14509.  
  14510. }
  14511.  
  14512. if(playerRights < 1)
  14513. modYell("[Abuse] " + abuser + " reported by " + playerName + " for rule " + rule + " (" + misc.rules[rule] + ")");
  14514. else
  14515. modYell("[Mod Chat] " + playerName + " reported " + abuser + " (" + misc.rules[rule] + ")");
  14516. }
  14517. public void modYell(String msg) {
  14518. for (int i = 0; i < handler.players.length; i++) {
  14519. client p = (client)handler.players[i];
  14520. if (p != null && ! p.disconnected && p.absX > 0 && p.playerRights > 0) {
  14521. p.sendMessage(msg);
  14522. }
  14523. }
  14524. }
  14525. public void triggerTele(int x, int y, int height, boolean prem) {
  14526. if (System.currentTimeMillis()-lastAction > 5000) {
  14527. lastAction = System.currentTimeMillis();
  14528. resetWalkingQueue();
  14529. if (prem && !premium) {
  14530. sendMessage("This spell is only available to premium members, visit zernix.com for info");
  14531. return;
  14532. }
  14533. if (duelStatus == 3)
  14534. return;
  14535. tX = x;
  14536. tY = y;
  14537. tH = height;
  14538. tStage = 1;
  14539. tTime = 0;
  14540. }
  14541. }
  14542. public void startSmelt(int id) {
  14543. int[]amounts = {
  14544. 1, 5, 10, 27
  14545. };
  14546. int index = 0, index2 = 0;
  14547. for (int i = 0; i < misc.buttons_smelting.length; i++) {
  14548. if (id == misc.buttons_smelting[i]) {
  14549. index = i%4;
  14550. index2 = (int)(i/4);
  14551. }
  14552. }
  14553. smelt_id = misc.smelt_bars[index2];
  14554. smeltCount = amounts[index];
  14555. smelting = true;
  14556. closeInterface();
  14557. }
  14558. public boolean inRange(int x, int y) {
  14559. if (localId > 0)
  14560. return false;
  14561. if (Math.abs(absX-x) < 4 && Math.abs(absY-y) < 4) {
  14562. return true;
  14563. }
  14564. return false;
  14565. }
  14566.  
  14567. public void openTrade() {
  14568. inTrade = true;
  14569. tradeRequested = false;
  14570. sendFrame248(3323, 3321); // trading window + bag
  14571. resetItems(3322);
  14572. resetTItems(3415);
  14573. resetOTItems(3416);
  14574. String out = PlayerHandler.players[trade_reqId].playerName;
  14575. if (PlayerHandler.players[trade_reqId].playerRights == 1) {
  14576. out = "@cr1@"+out;
  14577. } else if (PlayerHandler.players[trade_reqId].playerRights == 2) {
  14578. out = "@cr2@"+out;
  14579. }
  14580. sendFrame126("Trading With: "+PlayerHandler.players[trade_reqId].playerName, 3417);
  14581. sendFrame126("", 3431);
  14582. sendQuest("Are you sure you want to make this trade?", 3535);
  14583. }
  14584. public void declineTrade() {
  14585. declineTrade(true);
  14586. }
  14587. public void declineTrade(boolean tellOther) {
  14588. closeInterface();
  14589. client other = getClient(trade_reqId);
  14590. if (tellOther && validClient(trade_reqId)) {
  14591. //other.sendMessage(playerName + " declined the trade");
  14592. other.declineTrade(false);
  14593. }
  14594.  
  14595. for (GameItem item: offeredItems) {
  14596. if (item.amount < 1)
  14597. continue;
  14598. if (item.stackable) {
  14599. addItem(item.id, item.amount);
  14600. } else {
  14601. for (int i = 0; i < item.amount; i++) {
  14602. addItem(item.id, 1);
  14603. }
  14604. }
  14605. }
  14606. canOffer = true;
  14607. tradeConfirmed = false;
  14608. tradeConfirmed2 = false;
  14609. offeredItems.clear();
  14610. inTrade = false;
  14611. trade_reqId = 0;
  14612. }
  14613. public boolean validClient(int index) {
  14614. client p = (client)handler.players[index];
  14615. if (p != null && ! p.disconnected) {
  14616. return true;
  14617. }
  14618. return false;
  14619. }
  14620. public client getClient(int index) {
  14621. return ((client)handler.players[index]);
  14622. }
  14623.  
  14624. public void tradeReq(int id) {
  14625. if (!server.trading) {
  14626. sendMessage("Trading has been temporarily disabled");
  14627. return;
  14628. }
  14629. client other = (client)handler.players[id];
  14630. if (validClient(trade_reqId)) {
  14631. if (other.inTrade || other.inDuel) {
  14632. sendMessage("That player is busy at the moment");
  14633. trade_reqId = 0;
  14634. return;
  14635. }
  14636. }
  14637. if (other.connectedFrom.equals(connectedFrom)) {
  14638. tradeRequested = false;
  14639. return;
  14640. }
  14641. if (validClient(trade_reqId) && ! inTrade && other.tradeRequested && other.trade_reqId == playerId) {
  14642. openTrade();
  14643. other.openTrade();
  14644. } else if (validClient(trade_reqId) && ! inTrade && System.currentTimeMillis()-lastButton > 1000) {
  14645. lastButton = System.currentTimeMillis();
  14646. tradeRequested = true;
  14647. trade_reqId = id;
  14648. sendMessage("Sending trade request...");
  14649. other.sendMessage(playerName+":tradereq:");
  14650. }
  14651. }
  14652. public void confirmScreen() {
  14653. canOffer = false;
  14654. sendFrame248(3443, 3213); // trade confirm + normal bag
  14655. resetItems(3214);
  14656. String SendTrade = "Absolutely nothing!";
  14657. String SendAmount = "";
  14658. int Count = 0;
  14659. client other = getClient(trade_reqId);
  14660. for (GameItem item: offeredItems) {
  14661. if (item.id > 0) {
  14662. if (item.amount >= 1000 && item.amount < 1000000) {
  14663. SendAmount = "@cya@"+(item.amount/1000)+"K @whi@("+misc.format(item.amount)+")";
  14664. } else if (item.amount >= 1000000) {
  14665. SendAmount = "@gre@"+(item.amount/1000000)+" million @whi@("+misc.format(item.amount)+")";
  14666. } else {
  14667. SendAmount = ""+misc.format(item.amount);
  14668. }
  14669. if (Count == 0) {
  14670. SendTrade = GetItemName(item.id);
  14671. } else {
  14672. SendTrade = SendTrade+"\\n"+GetItemName(item.id);
  14673. }
  14674. if (item.stackable) {
  14675. SendTrade = SendTrade+" x "+SendAmount;
  14676. }
  14677. Count++;
  14678. }
  14679. }
  14680. sendFrame126(SendTrade, 3557);
  14681. SendTrade = "Absolutely nothing!";
  14682. SendAmount = "";
  14683. Count = 0;
  14684. for (GameItem item: other.offeredItems) {
  14685. if (item.id > 0) {
  14686. if (item.amount >= 1000 && item.amount < 1000000) {
  14687. SendAmount = "@cya@"+(item.amount/1000)+"K @whi@("+misc.format(item.amount)+")";
  14688. } else if (item.amount >= 1000000) {
  14689. SendAmount = "@gre@"+(item.amount/1000000)+" million @whi@("+misc.format(item.amount)+")";
  14690. } else {
  14691. SendAmount = ""+misc.format(item.amount);
  14692. }
  14693. SendAmount = SendAmount;
  14694. if (Count == 0) {
  14695. SendTrade = GetItemName(item.id);
  14696. } else {
  14697. SendTrade = SendTrade+"\\n"+GetItemName(item.id);
  14698. }
  14699. if (item.stackable) {
  14700. SendTrade = SendTrade+" x "+SendAmount;
  14701. }
  14702. Count++;
  14703. }
  14704. }
  14705. sendFrame126(SendTrade, 3558);
  14706. }
  14707. public void giveItems() {
  14708. client other = getClient(trade_reqId);
  14709. if (validClient(trade_reqId)) {
  14710. try {
  14711. logTrade(playerId, other.playerId, offeredItems, other.offeredItems);
  14712. for (GameItem item: other.offeredItems) {
  14713. if (item.id > 0) {
  14714. addItem(item.id, item.amount);
  14715. println("TradeConfirmed, item="+item.id);
  14716. BufferedWriter bw = null;
  14717.  
  14718. try {
  14719. bw = new BufferedWriter(new FileWriter("logs/trade logs.txt", true));
  14720. bw.write(other.playerName + " trades item: " + item.id + " with " + playerName);
  14721. bw.newLine();
  14722. bw.flush();
  14723. } catch (IOException ioe) {
  14724. ioe.printStackTrace();
  14725. } finally {
  14726. if (bw != null) try {
  14727. bw.close();
  14728. } catch (IOException ioe2) {
  14729. sendMessage("Error logging trade!");
  14730. }
  14731. }
  14732. }
  14733. }
  14734. closeInterface();
  14735. tradeResetNeeded = true;
  14736. } catch (Exception e) {
  14737. e.printStackTrace();
  14738. }
  14739. }
  14740. }
  14741. public void logTrade(int id, int id2, CopyOnWriteArrayList < GameItem > offeredItems, CopyOnWriteArrayList < GameItem > offeredItems2) {
  14742. try {
  14743. //results = statement.executeQuery("SELECT id from uber3_trades ORDER BY id DESC");
  14744. //results.next();
  14745. //int tId = results.getInt("id") + 1;
  14746. //statement.executeUpdate("INSERT INTO uber3_trades SET id = " + tId + ", type=0, p1=" + id + ", p2=" + id2);
  14747. for (GameItem item: offeredItems) {
  14748. // statement.executeUpdate("INSERT INTO uber3_logs SET id = " + tId + ", pid=" + id + ", item=" + item.id + ", amount=" + item.amount);
  14749. }
  14750. for (GameItem item: offeredItems2) {
  14751. // statement.executeUpdate("INSERT INTO uber3_logs SET id = " + tId + ", pid=" + id2 + ", item=" + item.id + ", amount=" + item.amount);
  14752. }
  14753. //statement.close();
  14754. } catch (Exception e) {
  14755. e.printStackTrace();
  14756. }
  14757. }
  14758. public void resetTrade() {
  14759. offeredItems.clear();
  14760. inTrade = false;
  14761. trade_reqId = 0;
  14762. canOffer = true;
  14763. tradeConfirmed = false;
  14764. tradeConfirmed2 = false;
  14765. closeInterface();
  14766. tradeResetNeeded = false;
  14767. sendQuest("Are you sure you want to make this trade?", 3535);
  14768. }
  14769. public void duelReq(int pid) {
  14770. if (!server.dueling) {
  14771. sendMessage("Dueling has been temporarily disabled");
  14772. return;
  14773. }
  14774. duel_with = pid;
  14775. duelRequested = true;
  14776. if (!validClient(duel_with))
  14777. return;
  14778. client other = getClient(duel_with);
  14779. if (inTrade || inDuel || other.inDuel || other.inTrade || other.duelFight || other.duelConfirmed || other.duelConfirmed2) {
  14780. sendMessage("Other player is busy at the moment");
  14781. duelRequested = false;
  14782. return;
  14783. }
  14784. // if (other.connectedFrom.equals(connectedFrom)) {
  14785. // duelRequested = false;
  14786. // return;
  14787. //}
  14788. if (duelRequested && other.duelRequested && duel_with == other.playerId && other.duel_with == playerId) {
  14789. openDuel();
  14790. other.openDuel();
  14791. } else {
  14792. //sendMessage("Mage on player unlocked");
  14793. other.sendMessage(playerName+":duelreq:");
  14794. }
  14795. }
  14796. public void openDuel() {
  14797. RefreshDuelRules();
  14798. refreshDuelScreen();
  14799. inDuel = true;
  14800. client other = getClient(duel_with);
  14801. sendQuest("Dueling with: "+other.playerName+" (level-"+other.combat+")", 6671);
  14802. sendQuest("", 6684);
  14803. sendFrame248(6575, 3321);
  14804. resetItems(3322);
  14805. }
  14806. public void declineDuel() {
  14807. client other = getClient(duel_with);
  14808. inDuel = false;
  14809. if (validClient(duel_with) && other.inDuel) {
  14810. other.declineDuel();
  14811. }
  14812. closeInterface();
  14813. canOffer = true;
  14814. duel_with = 0;
  14815. duelRequested = false;
  14816. duelConfirmed = false;
  14817. duelConfirmed2 = false;
  14818. duelFight = false;
  14819. for (GameItem item: offeredItems) {
  14820. if (item.amount < 1)
  14821. continue;
  14822. if (Item.itemStackable[item.id] || Item.itemIsNote[item.id]) {
  14823. addItem(item.id, item.amount);
  14824. } else {
  14825. addItem(item.id, 1);
  14826. }
  14827. }
  14828. offeredItems.clear();
  14829. }
  14830. public void confirmDuel() {
  14831. client other = getClient(duel_with);
  14832. if (!validClient(duel_with))
  14833. declineDuel();
  14834. String out = "";
  14835. for (GameItem item: offeredItems) {
  14836. if (Item.itemStackable[item.id] || Item.itemIsNote[item.id]) {
  14837. out += GetItemName(item.id)+" x "+misc.format(item.amount)+", ";
  14838. } else {
  14839. out += GetItemName(item.id)+", ";
  14840. }
  14841. }
  14842. sendQuest(out, 6516);
  14843. out = "";
  14844. for (GameItem item: other.offeredItems) {
  14845. if (Item.itemStackable[item.id] || Item.itemIsNote[item.id]) {
  14846. out += GetItemName(item.id)+" x "+misc.format(item.amount)+", ";
  14847. } else {
  14848. out += GetItemName(item.id)+", ";
  14849. }
  14850. }
  14851. sendQuest(out, 6517);
  14852. sendQuest("Movement will be disabled", 8242);
  14853. for (int i = 8243; i <= 8253; i++) {
  14854. sendQuest("", i);
  14855. }
  14856. sendQuest("Hitpoints will be restored", 8250);
  14857. sendQuest("", 6571);
  14858. showInterface(6412);
  14859. }
  14860. public void startDuel() {
  14861. closeInterface();
  14862. duelFight = true;
  14863. client other = getClient(duel_with);
  14864. for (GameItem item : other.offeredItems) {
  14865. otherOfferedItems.add(new GameItem(item.id, item.amount));
  14866. }
  14867. }
  14868. public void resetDuel() {
  14869. println("duel reset");
  14870. closeInterface();
  14871. canOffer = true;
  14872. duel_with = 0;
  14873. duelRequested = false;
  14874. duelConfirmed = false;
  14875. duelConfirmed2 = false;
  14876. offeredItems.clear();
  14877. otherOfferedItems.clear();
  14878. duelFight = false;
  14879. inDuel = false;
  14880. duelRule = new boolean[] {
  14881. false, false, false, false, false, true, false, true, false, true, false
  14882. };
  14883. }
  14884. public void frame36(int Interface, int Status) {
  14885. outStream.createFrame(36);
  14886. outStream.writeWordBigEndian(Interface); //The button
  14887. outStream.writeByte(Status); //The Status of the button
  14888. }
  14889. public void frame87(int Interface, int Status) {
  14890. outStream.createFrame(87);
  14891. outStream.writeWordBigEndian(Interface); //The button
  14892. outStream.writeDWord_v1(Status); //The Status of the button
  14893. }
  14894. public boolean duelButton(int button) {
  14895. client other = getClient(duel_with);
  14896. boolean found = false;
  14897. if (System.currentTimeMillis()-lastButton < 800) {
  14898. return false;
  14899. }
  14900. if (inDuel && ! duelFight && ! duelConfirmed2 && ! other.duelConfirmed2) {
  14901. for (int i = 0; i < duelButtons.length; i++) {
  14902. if (button == duelButtons[i]) {
  14903. found = true;
  14904. if (duelRule[i]) {
  14905. duelRule[i] = false;
  14906. other.duelRule[i] = false;
  14907. } else {
  14908. duelRule[i] = true;
  14909. other.duelRule[i] = true;
  14910. }
  14911. }
  14912. }
  14913. if (found) {
  14914. lastButton = System.currentTimeMillis();
  14915. duelConfirmed = false;
  14916. other.duelConfirmed = false;
  14917. sendQuest("", 6684);
  14918. other.sendQuest("", 6684);
  14919. other.duelRule[i] = duelRule[i];
  14920. RefreshDuelRules();
  14921. other.RefreshDuelRules();
  14922. }
  14923. }
  14924. return found;
  14925. }
  14926.  
  14927.  
  14928. }
Add Comment
Please, Sign In to add comment