Guest User

Untitled

a guest
Oct 15th, 2017
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 499.25 KB | None | 0 0
  1.  
  2.  
  3. import java.io.*;
  4. import java.util.StringTokenizer;
  5. import java.util.Calendar;
  6. import java.util.GregorianCalendar;
  7. import java.util.*;
  8. import java.text.*;
  9. import java.util.concurrent.*;
  10.  
  11. //2400,4446
  12.  
  13. public class client extends Player implements Runnable {
  14. public int currentButton = 0, currentStatus = 0;
  15. public boolean runStream = true;
  16. public boolean inroom = false, ingame = false;
  17. public long actionInterval = 0;
  18. public boolean cooking = false;
  19. public int gauntless = 775, chefshat = 0, cookie = 0, cookAmount = -1;
  20. public long fishspeed = 0;
  21. public int NPCSlot;
  22. public int NPCID;
  23. public int interfaceId = 0;
  24. public int npcSlot = 0;
  25. public int itemId = 0;
  26.  
  27.  
  28.  
  29.  
  30.  
  31. public int clickCount = 0;
  32. public int apickupid = -1,apickupx = -1,apickupy = -1;
  33. public boolean spamButton = false;
  34. public int[] herbs = {249,253,257,259,263,265,267};
  35. public int[]duelButtons = {
  36. 26069, 26070, 26071, 30136, 2158, 26065, 26072, 26073, 26074, 26066, 26076
  37. };
  38. public String[]duelNames = {
  39. "No Ranged", "No Melee", "No Magic", "No Gear Change", "Fun Weapons", "No Retreat", "No Drinks", "No Food", "No prayer", "No Movement", "Obstacles"
  40. };
  41. public boolean[]duelRule = {
  42. false, false, false, false, false, true, false, true, false, true, false
  43. };
  44. public int[]duelLine = {
  45. 6698, 6699, 6697, 7817, 669, 6696, 6701, 6702, 6703, 6704, 6731
  46. };
  47. public boolean duelRequested = false, inDuel = false, duelConfirmed = false, duelConfirmed2 = false, duelResetNeeded = false, duelFight = false;
  48. public int duel_with = 0;
  49. public boolean tradeRequested = false, inTrade = false, canOffer = true, tradeConfirmed = false, tradeConfirmed2 = false, tradeResetNeeded = false;
  50. public int trade_reqId = 0, trade_other;
  51. public CopyOnWriteArrayList<GameItem> offeredItems = new CopyOnWriteArrayList<GameItem>();
  52. public CopyOnWriteArrayList<GameItem> otherOfferedItems = new CopyOnWriteArrayList<GameItem>();
  53. public boolean adding = false, emoting = false;
  54. String[]lastMessage = new String[3];
  55. long animationReset = 0, lastButton = 0;
  56. //Devolution: fishing
  57. int fishTries, fishId;
  58. boolean fishing = false;
  59. //Devolution: teleports
  60. int tX = 0, tY = 0, tStage = 0, tH = 1;
  61. long tTime = 0;
  62. //Devolution: crafting
  63. boolean crafting = false;
  64. int cItem = -1;
  65. int cAmount = 0;
  66. int cLevel = 1;
  67. int cExp = 0;
  68. int cSelected = -1, cIndex = -1;
  69. public boolean wonDuel = false;
  70. public boolean thieving = false;
  71.  
  72. public String tradestatus = "";
  73.  
  74. public String dMsg = "";
  75. public int angle = 250;
  76.  
  77. boolean dialog = true, spinning = false;
  78. int dialogInterface = 2459, dialogId = 1;
  79. public boolean fletching = false;
  80. public int fletchId = -1, fletchAmount = -1, fletchLog = -1, originalW = -1, originalS = -1, fletchExp = 0;
  81. public boolean smelting = false;
  82. public int smelt_id, smeltCount;
  83.  
  84. public boolean shafting = false;
  85. public int random_skill = -1, npcId = -1;
  86. public long lastProcess = 0;
  87. public int clickIndex = 0;
  88. public int autocast_spellIndex = -1;
  89. public int[]clicks = new int[50];
  90. public int loginDelay = 1;
  91. public boolean validClient = true, muted = false, attackedNpc = false;
  92. public int attackedNpcId = -1;
  93. /* --------MOD BOT-----------
  94. // MB = MOD BOT
  95. // -TC = Text Censor
  96. // -BC = Bad Command
  97. // -HT = Help Text
  98. // -ID = Item Duping*/
  99. public String MBTC;
  100. public boolean member = false;
  101. public String MBBC;
  102. public String MBHT;
  103. public String MBID;
  104. public boolean ani = false;
  105. public int anim = 0;
  106. public boolean anima = false;
  107. public int animat = 0;
  108. public boolean re = false;
  109. public int teleReq = 0;
  110. public String teleLoc = "";
  111. public boolean teleOtherScreen = false;
  112. public boolean saveNeeded = true;
  113. public boolean lookNeeded = false;
  114. public int[]requiredLevel = {
  115. 1, 52, 56, 58, 62, 64, 68, 70, 74, 76, 80, 82, 86, 88, 92, 94
  116. };
  117.  
  118. public int[]rune1 = {
  119. 556, 558, 554, 555, 556, 558, 554, 555, 556, 558, 554, 555, 556, 558, 554, 555
  120. };
  121.  
  122. public int[]rune1a = {
  123. 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 5, 5, 5, 5
  124. };
  125.  
  126. public int[]rune2 = {
  127. -1, -1, -1, -1, 562, 562, 560, 563, 562, 562, 560, 563, 562, 562, 560, 563
  128. };
  129.  
  130. public int[]rune2a = {
  131. 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 3, 3, 2, 2
  132. };
  133.  
  134. public int[]rune3 = {
  135. -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 565, 566, -1, -1, 565, 566
  136. };
  137.  
  138. public int[]rune3a = {
  139. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1
  140. };
  141.  
  142. public int[]baseDamage = {
  143. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
  144. };
  145. public int[]ancientId = {
  146. 12939, 12987, 12901, 12861, 12963, 13011, 12919, 12881, 12951, 12999, 12911, 12871, 12975, 13023, 12929, 12891
  147. };
  148. public int[]ancientType = {
  149. 0, 0, 2, 3, 0, 0, 2, 3, 0, 0, 2, 3, 0, 0, 2, 3
  150. };
  151. public int[]ancientButton = {
  152. 51133, 51185, 51091, 24018, 51159, 51211, 51111, 51069, 51146, 51198, 51102, 51058, 51172, 51224, 51122, 51080
  153. };
  154. public int[]noTrade = {
  155. 1543, 1544, 1545, 1546, 1635, 1636, 4171
  156. };
  157. public int[]casketItems = {
  158. 4724, 4726, 4728, 4730, 1050, 1053, 1055, 1057, 1037, 3107, 4708, 4710, 4712, 4714, 2904, 777, 2414
  159. };
  160. public long[]coolDown = {
  161. 2500, 3000, 2600, 5000,
  162. 2400, 2900, 2400, 4800,
  163. 2300, 2800, 2200, 4600,
  164. 2200, 2700, 2000, 4400
  165. };
  166. public int[]effects = new int[10];
  167. public boolean friendUpdate = false, lookUpdate = false;
  168. //public int[] killers = new int[server.playerHandler.maxPlayers];
  169. public String properName = "";
  170. public int barTimer = 0, saveTimer = 0;
  171. public int actionButtonId = 0;
  172. public int enemyId = -1, enemyX = -1, enemyY = -1, attackTimer = 0;
  173. public int thiefdelay = 0;
  174. public long thieflol = 0;
  175. public long lastAttack = 0;
  176. public boolean oddDeath = false;
  177. public boolean officialClient = false;
  178. public long[]globalCooldown = new long[10];
  179. public boolean validLogin = false;
  180. //public int[] restrictedItem = { 4716, 4718, 4720, 4722, 4724, 4726, 4728, 4730};
  181.  
  182. public void teleOtherRequest(String teleLocation, int player) {
  183. String telePlayer = server.playerHandler.players[player].playerName;
  184.  
  185. sendQuest(telePlayer, 12558);
  186. sendQuest(teleLocation, 12560);
  187. showInterface(12468);
  188. teleReq = player;
  189. teleLoc = teleLocation;
  190. teleOtherScreen = true;
  191. }
  192.  
  193. public void test(int[][]item, double[]chance){
  194. double roll = Math.random() * 100;
  195. int r = misc.random(item.length-1);
  196. if(roll <= chance[r]) {
  197. addItem(item[r][0],item[r][1]);
  198. sendMessage("You recive "+item[r][1]+" "+GetItemName(item[r][0])+"");
  199. } else {
  200. sendMessage("it's all empty.");
  201. }
  202. }
  203.  
  204. public void resetAgility(){
  205. logbalance = false;
  206. }
  207. public boolean logbalance = false;
  208.  
  209.  
  210. public int EntangleDelay = 0;
  211.  
  212. public void entangle() {
  213. EntangleDelay = 20;
  214. }
  215. public void uberentangle() {
  216. EntangleDelay = 40;
  217. }
  218. public void spawn(int id, int x, int y, int hl) {
  219. server.npcHandler.newSummonedNPC(id, x, y-1, hl, x-1, y-1, x+1, y-1, 1, 0, false, playerId);
  220. }
  221. //different message type!//
  222. public void item1(boolean send, String t, int i, String a){
  223. sendFrame200(4883, 591);
  224. sendFrame126(t, 4884);
  225. sendFrame126(a, 4885);
  226. sendFrame126("Click here to continue", 4886);
  227. sendFrame246(4883, 250, i);
  228. sendFrame164(4882);
  229. NpcDialogueSend = send;
  230. }
  231. public void item1t(boolean send, String t, int i, int b, String a){
  232. sendFrame200(4883, 591);
  233. sendFrame126(t, 4884);
  234. sendFrame126(a, 4885);
  235. sendFrame126("Click here to continue", 4886);
  236. sendFrame246(4883, b, i);
  237. sendFrame164(4882);
  238. NpcDialogueSend = send;
  239. }
  240. public void item2(boolean send, String t, int i, String a, String b){
  241. sendFrame200(4888, 591);
  242. sendFrame126(t, 4889);
  243. sendFrame126(a, 4890);
  244. sendFrame126(b, 4891);
  245. sendFrame126("Click here to continue", 4892);
  246. sendFrame246(4888, 250, i);
  247. sendFrame164(4887);
  248. NpcDialogueSend = send;
  249. }
  250. public void item3(boolean send, String t, int i, String a, String b, String c){
  251. sendFrame200(4894, 591);
  252. sendFrame126(t, 4895);
  253. sendFrame126(a, 4896);
  254. sendFrame126(b, 4897);
  255. sendFrame126(c, 4898);
  256. sendFrame126("Click here to continue", 4899);
  257. sendFrame246(4894, 250, i);
  258. sendFrame164(4893);
  259. NpcDialogueSend = send;
  260. }
  261. public void item4(boolean send, String t, int i, String a, String b, String c, String d){
  262. sendFrame200(4901, 591);
  263. sendFrame126(t, 4902);
  264. sendFrame126(a, 4903);
  265. sendFrame126(b, 4904);
  266. sendFrame126(c, 4905);
  267. sendFrame126(d, 4906);
  268. sendFrame126("Click here to continue", 4907);
  269. sendFrame246(4901, 250, i);
  270. sendFrame164(4900);
  271. NpcDialogueSend = send;
  272. }
  273. public void text1(boolean send, String s)
  274. {
  275. changeText126(s, 357);
  276. changeText126("Click here to continue", 358);
  277. sendFrame164(356);
  278. NpcDialogueSend = send;
  279. }
  280. public void text2(boolean send, String s, String t)
  281. {
  282. changeText126(s, 360);
  283. changeText126(t, 361);
  284. changeText126("Click here to continue", 362);
  285. sendFrame164(359);
  286. NpcDialogueSend = send;
  287. }
  288. public void text3(boolean send, String s, String t, String m)
  289. {
  290. changeText126(s, 364);
  291. changeText126(t, 365);
  292. changeText126(m, 366);
  293. changeText126("Click here to continue", 367);
  294. sendFrame164(363);
  295. NpcDialogueSend = send;
  296. }
  297. public void text4(boolean send, String s, String t, String m, String b)
  298. {
  299. changeText126(s, 369);
  300. changeText126(t, 370);
  301. changeText126(m, 371);
  302. changeText126(b, 372);
  303. changeText126("Click here to continue", 373);
  304. sendFrame164(368);
  305. NpcDialogueSend = send;
  306. }
  307. public void text5(boolean send, String s, String t, String m, String b, String v)
  308. {
  309. changeText126(s, 375);
  310. changeText126(t, 376);
  311. changeText126(m, 377);
  312. changeText126(b, 378);
  313. changeText126(v, 379);
  314. changeText126("Click here to continue", 380);
  315. sendFrame164(374);
  316. NpcDialogueSend = send;
  317. }
  318. public void changeText126(String string, int i) {
  319. if (server.playerHandler != null) {
  320. /* empty */
  321. }
  322. if (PlayerHandler.players[playerId] == null || disconnected
  323. || in == null || out == null) {
  324.  
  325. } else {
  326. outStream.createFrameVarSizeWord(126);
  327. outStream.writeString(string);
  328. outStream.writeWordA(i);
  329. outStream.endFrameVarSizeWord();
  330. }
  331. }
  332. //Ending!//
  333.  
  334. public void command(String playerCommand) {
  335. String[] c = playerCommand.split(" ");
  336. String[] modcommand = {"teleto","teletome","duel","trade","tele"};
  337. String[] admincommand = {"pking","mod","tele","goup","godown","bank","restart"};
  338. for(int i = 0; i < modcommand.length; i++){
  339. if(c[0].equals(""+modcommand[i]+"") && playerRights < 1){
  340. sendMessage("This command is for Player Moderators and Admins only!");
  341. }}
  342. for(int i = 0; i < admincommand.length; i++){
  343. if(c[0].equals(""+admincommand[i]+"") && playerRights < 2){
  344. sendMessage("This command is for Admins only!");
  345. }}
  346. if(c[0].equals("tele") && playerRights >= 2){
  347. teleportToX = Integer.parseInt(c[1]);
  348. teleportToY = Integer.parseInt(c[2]);
  349. sendMessage("You teleported to "+Integer.parseInt(c[1])+", "+Integer.parseInt(c[2])+"");
  350. }
  351. if(c[0].equals("bank") && playerRights > 2){
  352. openUpBank();
  353. }
  354. if(c[0].equals("suggest")){
  355. sendMessage("Suggestion Succesfully Sent To The Owner!");
  356. BufferedWriter bw = null;
  357. try {
  358. bw = new BufferedWriter(new FileWriter("suggestions.txt", true));
  359. bw.write(playerName+": "+c[1]);
  360. bw.newLine();
  361. bw.flush();
  362. } catch(Exception e) {
  363. sendMessage("Use as ::suggest text");
  364. }
  365. }
  366.  
  367. if(c[0].equals("players")){
  368. players();
  369. }
  370.  
  371. if(c[0].equals("stat") && playerRights > 2) {
  372. playerLevel[6] = getLevelForXP(playerXP[6]) + 4;
  373. sendQuest("" + playerLevel[6] + "", 4014);
  374. if (playerLevel[6] > playerLevel[playerMagic]) {
  375. playerLevel[6] = playerLevel[6] += 4;
  376. sendQuest("" + playerLevel[6] + "", 4014);
  377. }}
  378. if(c[0].equals("mypos") && playerRights > 2) {
  379. sendMessage("You are standing on X=" + absX + " Y=" + absY
  380. + " Your Height=" + heightLevel);
  381. sendMessage("MapRegionX=" + mapRegionX + " MapRegionY="
  382. + mapRegionY);
  383. sendMessage("CurrentX=" + currentX + " CurrentY=" + currentY);
  384. }
  385. if(c[0].equals("restart") && playerRights == 3) {
  386. PlayerHandler.updateSeconds = Integer.parseInt(c[1]);
  387. PlayerHandler.updateAnnounced = false;
  388. PlayerHandler.updateRunning = true;
  389. PlayerHandler.updateStartTime = System.currentTimeMillis();
  390. }
  391. if(c[0].equals("agi") && playerRights == 3) {
  392. int ticket = playerItemsN[getItemSlot(2996)];
  393. if(playerHasItem(2996)) {
  394. int Guam = (int)(double)(ticket*0.12), Marrentill = (int)(double)(ticket*0.09), Tarromin = (int)(double)(ticket*0.06), agixp = (int)(double)(ticket*700);
  395. deleteItem(2996, ticket);
  396. addItem(200,Guam);
  397. addItem(202,Marrentill);
  398. addItem(204,Tarromin);
  399. addSkillXP(agixp,16);
  400. sendMessage("You turned in "+ticket+" agility tickets and recived..");
  401. sendMessage(""+agixp+" Agility experience, "+Guam+" Guams, "+Marrentill+" Marrentills and "+Tarromin+" Tarromins.");
  402. } else sendMessage("You need to have some agility tickets to turn in."); {
  403. }}
  404. if(c[0].equals("bet") && playerRights > 2) {
  405. int win = Integer.parseInt(c[1]);
  406. int dice1 = 1+misc.random(5);
  407. int dice2 = 1+misc.random(5);
  408. int cash = Integer.parseInt(c[2]);
  409. if(cash <= 1000000) {
  410. if(playerHasItem(995,cash)) {
  411. if(win == 0) {
  412. sendMessage("you betted for low total");
  413. } else
  414. sendMessage("you betted for high total");
  415. sendMessage("You roll a "+dice1+" and a "+dice2+" you get total of: "+(dice1+dice2));
  416. if((dice1+dice2) < 8 && win == 0 || (dice1+dice2) > 7 && win == 1) {
  417. sendMessage("You won "+(cash*2)+" coins!");
  418. addItem(995, cash*2);
  419. } else
  420. sendMessage("You Lost "+cash+" coins!");
  421. deleteItem(995, cash);
  422. }
  423. } else
  424. sendMessage("Maximum bet is 1 million coins!");
  425. }
  426. if(c[0].equals("pickup") && playerRights > 2) {
  427. addItem(Integer.parseInt(c[1]), Integer.parseInt(c[2]));
  428. if(Item.itemIsNote[Integer.parseInt(c[1])] || Item.itemStackable[Integer.parseInt(c[1])]) {
  429. sendMessage("You picked up "+Integer.parseInt(c[2])+" of "+GetItemName(Integer.parseInt(c[1]))+"");
  430. } else
  431. sendMessage("You picked up 1 of "+GetItemName(Integer.parseInt(c[1]))+"");
  432. }
  433. if(c[0].equals("npc") && playerRights > 2){
  434. if(Integer.parseInt(c[1]) <= 3900) {
  435. spawn(Integer.parseInt(c[1]), absX, absY, heightLevel);
  436. }}
  437. if(c[0].equals("o") && playerRights > 2){
  438. if(Integer.parseInt(c[1]) <= 14974) {
  439. ReplaceObject(absX, absY, Integer.parseInt(c[1]), 0, 10);
  440. sendMessage("You spawned objectÍd: "+Integer.parseInt(c[1]));
  441. } else
  442. sendMessage("Not existing object!");
  443. }
  444. if(c[0].equals("goup") && playerRights > 2){
  445. sendMessage(""+heightLevel);
  446. heightLevel += 1;
  447. }
  448. if(c[0].equals("godown") && playerRights > 2){
  449. sendMessage(""+heightLevel);
  450. heightLevel -= 1;
  451. }
  452. if(c[0].equals("teletome") && playerRights > 0){
  453. int d = PlayerHandler.getPlayerID(c[1]);
  454. if (d != -1) {
  455. client p = (client)server.playerHandler.players[d];
  456. p.teleportToX = absX;
  457. p.teleportToY = absY;
  458. p.heightLevel = heightLevel;
  459. p.sendMessage("You have been teleported to " + playerName);
  460. } else {
  461. sendMessage("Player is not online!");
  462. }}
  463.  
  464. if(c[0].equals("skill") && playerRights > 2){
  465. int d = PlayerHandler.getPlayerID(c[1]);
  466. if (d != -1) {
  467. client p = (client)server.playerHandler.players[d];
  468. p.addSkillXP(Integer.parseInt(c[3]), Integer.parseInt(c[2]));
  469. p.sendMessage("You have recived "+Integer.parseInt(c[3])+" in "+statName[Integer.parseInt(c[2])]+" from " + playerName);
  470. sendMessage(p.playerName+" is now level "+playerLevel[Integer.parseInt(c[2])]+" "+statName[Integer.parseInt(c[2])]+"");
  471. } else {
  472. sendMessage("Player is not online!");
  473. }}
  474. if(c[0].equals("redesign")){
  475. showInterface(3559);
  476. }
  477. if(c[0].equals("char")){
  478. showInterface(3559);
  479. }
  480. if(c[0].equals("teleto") && playerRights > 0){
  481. int d = PlayerHandler.getPlayerID(c[1]);
  482. if (d != -1) {
  483. client p = (client)server.playerHandler.players[d];
  484. teleportToX = p.absX;
  485. teleportToY = p.absY;
  486. heightLevel = p.heightLevel;
  487. sendMessage("You teleported to " + p.playerName);
  488. } else {
  489. sendMessage("Player is not online!");
  490. }}
  491. if(c[0].equals("trade") && playerRights > 0) {
  492. if(!server.trading) {
  493. server.trading = true;
  494. sendMessage("You turned trade back to on.");
  495. } else {
  496. server.trading = false;
  497. sendMessage("You turned trade to off");
  498. }}
  499. if(c[0].equals("duel") && playerRights > 0) {
  500. if(!server.dueling) {
  501. server.dueling = true;
  502. sendMessage("You turned dueling to on.");
  503. } else {
  504. server.dueling = false;
  505. sendMessage("You turned dueling to off");
  506. }}
  507. if(c[0].equals("if") && playerRights > 2){
  508. try {
  509. sendMessage("interface: "+Integer.parseInt(c[1])+"");
  510. showInterface(Integer.parseInt(c[1]));
  511. } catch(Exception e) {
  512. sendMessage("Use ::if interfaceid");
  513. }}
  514. }
  515.  
  516. public void runecraft(int level, int experience, int rune, int a2, int a3, int a4, int a5) {
  517. int essence = amountOfItem(1436);
  518. int essinv = amountOfItem(1436);
  519. if(playerHasItem(1436)) {
  520. if (playerLevel[playerRunecrafting] >= level) {
  521. if (playerLevel[playerRunecrafting] >= a2 && playerLevel[playerRunecrafting] < a3)
  522. essence = amountOfItem(1436) * 2;
  523. if (playerLevel[playerRunecrafting] >= a3 && playerLevel[playerRunecrafting] < a4)
  524. essence = amountOfItem(1436) * 3;
  525. if (playerLevel[playerRunecrafting] >= a4 && playerLevel[playerRunecrafting] < a5)
  526. essence = amountOfItem(1436) * 4;
  527. if (playerLevel[playerRunecrafting] >= a5)
  528. essence = amountOfItem(1436) * 5;
  529. stillgfx(186, absY, absX);
  530. pEmote = 791;
  531. animationReset = System.currentTimeMillis()+1500;
  532. for (int i = 0; i < 29; i++) {
  533. deleteItem(1436, i);
  534. }
  535. addItem(rune, essence);
  536. addSkillXP(experience*essinv, playerRunecrafting);
  537. sendMessage("You bind the temple's power into "+essence+" "+GetItemName(rune)+"s.");
  538. } else {
  539. sendMessage("You need at least "+level+" to runecraft this.");
  540. }
  541. } else {
  542. sendMessage("You do not have any rune essence to craft.");
  543. }
  544. }
  545.  
  546. public void openUpDepBox() {
  547. sendFrame126("The Bank of Zernix - Deposit Box", 7421);
  548. sendFrame248(4465, 197);//197 just because you can't see it =\
  549. resetItems(7423);
  550. IsBanking = true;
  551. }
  552.  
  553. public void scanPickup() {
  554. if(absX == apickupx && absY == apickupy) {
  555. if(ItemHandler.itemExists(apickupid, absX, absY)) {
  556. int itemAmount = ItemHandler.itemAmount(apickupid, apickupx, apickupy);
  557. if(Item.itemStackable[apickupid] && (playerHasItem(apickupid) || playerHasItem(-1))) {
  558. addItem(apickupid, itemAmount);
  559. ItemHandler.removeItem(apickupid, apickupx, apickupy, itemAmount);
  560. removeGroundItem(apickupx, apickupy, apickupid);
  561. } else if(!Item.itemStackable[apickupid] && playerHasItem(-1)) {
  562. ItemHandler.removeItem(apickupid, apickupx, apickupy, 1);
  563. addItem(apickupid, 1);
  564. }
  565. apickupid = -1;
  566. apickupx = -1;
  567. apickupy = -1;
  568. } else if(!ItemHandler.itemExists(apickupid, apickupx, apickupy)) {
  569. apickupid = -1;
  570. apickupx = -1;
  571. apickupy = -1;
  572. }
  573. }
  574. }
  575.  
  576.  
  577. public boolean roomcord() {
  578. if (absX >= 3107 && absX <= 3111 && absY >= 3163 && absY <= 3166) {
  579. return true;
  580. } else {
  581. return false;
  582. }}
  583.  
  584. public void room() // From The GodsFantasy Server
  585. {
  586. if(roomcord() && re && inroom) {
  587. server.playersinroom += 1;
  588. re = false;
  589. }
  590. }
  591.  
  592. public void games() // From The GodsFantasy Server
  593. {
  594. for (Player p : server.playerHandler.players)
  595. {
  596. if(p != null)
  597. {
  598. client person = (client)p;
  599. if(person.playerName != null)
  600. {
  601. if(person.roomcord() && person.inroom)
  602. {
  603. person.sendMessage("Prepair to fight!");
  604. server.jizz = System.currentTimeMillis();
  605. person.teleportToX = 3137;
  606. person.teleportToY = 3168;
  607. person.heightLevel = 0;
  608. person.ingame = true;
  609. person.inroom = false;
  610. server.playersinroom = 0;
  611. }
  612. }
  613. }
  614. }
  615. }
  616.  
  617. public void end() // From The GodsFantasy Server
  618. {
  619. for (Player p : server.playerHandler.players)
  620. {
  621. if(p != null)
  622. {
  623. client person = (client)p;
  624. if(person.playerName != null)
  625. {
  626. if(person.ingame)
  627. {
  628. person.sendMessage("W00t!!!!");
  629. person.teleportToX = 3109;
  630. person.teleportToY = 3169;
  631. person.heightLevel = 0;
  632. person.ingame = false;
  633. }
  634. }
  635. }
  636. }
  637. }
  638.  
  639. public void checkmember(String name, int time) {
  640. name = Character.toUpperCase(name.charAt(0))+name.substring(1, name.length());
  641. String line = "";
  642. String token = "";
  643. String token2 = "";
  644. String[]token3 = new String[3];
  645. boolean EndOfFile = false;
  646. int ReadMode = 0;
  647. BufferedReader characterfile = null;
  648. boolean charFileFound = false;
  649.  
  650. try {
  651. characterfile = new BufferedReader(new FileReader("./characters/"+name+".txt"));
  652. charFileFound = true;
  653. } catch (FileNotFoundException fileex1) {
  654. }
  655. if (charFileFound == false) {
  656. sendMessage("Character file "+name+" does not exist.");
  657. sendMessage(":O:O:O:O");
  658. }
  659. if (charFileFound == true) {
  660. playerIsMember = time;
  661. sendMessage("worked:O");
  662. }
  663. }
  664.  
  665. public void skill() {
  666. skillX = server.OC.objectX;
  667. skillY = server.OC.objectY;
  668. }
  669. public int getbattleTimer() {
  670. switch(playerEquipment[playerWeapon]) {
  671. case -1: // unarmed
  672. return 9000;
  673. case 4151: // unarmed
  674. return 1000;
  675. }
  676. return 5000;
  677. }
  678. public int GetWepAnim(int id)
  679. {
  680. switch(playerEquipment[playerWeapon]) {
  681. case -1: // unarmed
  682. if(FightType == 2) {
  683. return 423;
  684. } else {
  685. return 422;
  686. }
  687. case 837:
  688. return 1084;
  689. case 3190: // Halbers
  690. case 3192:
  691. case 3194:
  692. case 3196:
  693. case 3198:
  694. case 3200:
  695. case 3202:
  696. case 3204:
  697. return 440;
  698. case 4170: // staffs
  699. case 4675:
  700. return 414;
  701. case 4151: //Whip
  702. return 1658;
  703. case 6528: //obsidian maul
  704. return 2661;
  705. }
  706. if(id == 4827)
  707. {
  708. return 426;
  709. }
  710. if(id == 6522)
  711. {
  712. return 3353;
  713. }
  714. 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)
  715. // scimitars
  716. {
  717. return 451;
  718. }
  719. if((id == 1277 || id == 1279 || id == 1281 || id == 1283 || id == 1285 || id == 1287 || id == 1289) && FightType == 3)
  720. // Short Swords
  721. {
  722. return 412;
  723. }
  724. if((id == 1291 || id == 1293 || id == 1295 || id == 1297 || id == 1299 || id == 1301 || id == 1303 || id == 1305) && FightType == 3)
  725. // Long Swords
  726. {
  727. return 412;
  728. }
  729. if(id == 841 || id == 843 || id == 845 ||id == 849 ||id == 847 ||id == 853 || id == 851 || id == 859 || id == 861 || id ==4214)
  730. //Short Bows
  731. {
  732. return 426;
  733. }
  734. if(id == 837)
  735. {
  736. return 427;
  737. }
  738. if(id == 4153) // maul
  739. {
  740. return 1665;
  741. }
  742. if(id == 1363 || id == 1365 || id == 1367 || id == 1369 || id == 1371 || id == 1373 || id == 1375 || id == 1377)
  743. // Battle Axes
  744. {
  745. return 1833;
  746. }
  747. if(id == 4718 && FightType != 3) // dharoks axe
  748. {
  749. return 2067;
  750. }
  751. if(id == 4718 && FightType == 3) // dharoks axe
  752. {
  753. return 2066;
  754. }
  755. if(id == 4726) // guthans spear
  756. {
  757. return 2080;
  758. }
  759. if(id == 4747) // torags hammers
  760. {
  761. return 2068;
  762. }
  763. if(id == 4755) // veracs flail
  764. {
  765. return 2062;
  766. }
  767. if(id == 4734) // karils x bow
  768. {
  769. return 2075;
  770. }
  771. if((id == 1215 || id == 1231 || id == 5680 || id == 5698) && FightType != 3) // dragon daggers
  772. {
  773. return 402;
  774. }
  775. if((id == 1215 || id == 1231 || id == 5680 || id == 5698) && FightType == 3) // dragon daggers
  776. {
  777. return 395;
  778. }
  779. if(id == 7158)
  780. // 2 handers
  781. {
  782. return 3496;
  783. }
  784. if(id == 6609 || id == 1307 || id == 1309 || id == 1311 || id == 1313 || id == 1315 || id == 1317 || id == 1319)
  785. // 2 handers
  786. {
  787. return 407;
  788. }
  789. else
  790. {
  791. return 451;
  792. }
  793. }
  794. public int GetRunAnim(int id)
  795. {
  796. if(id == 837)
  797. {
  798. return 2251;
  799. }
  800. if(id == 4565) // basket of eggs :)
  801. {
  802. return 1836;
  803. }
  804. if(id == 4084)
  805. {
  806. return 1468;
  807. }
  808. if(id == 4151) // whip
  809. {
  810. return 1661;
  811. }
  812. if(id == 6818)
  813. {
  814. return 1765;
  815. }
  816. if(id == 7158 || id == 1319 || id == 6609)
  817. {
  818. return 2563;
  819. }
  820. if(id == 4734) // karils x bow
  821. {
  822. return 2077;
  823. }
  824. if(id == 6528) // maul
  825. {
  826. return 1664;
  827. }
  828. if(id == 4153) // maul
  829. {
  830. return 1664;
  831. }
  832. else
  833. {
  834. return 0x338;
  835. }
  836. }
  837.  
  838. public int GetWalkAnim(int id)
  839. {
  840. if(id == 837)
  841. {
  842. return 2258;
  843. }
  844. if(id == 4084)
  845. {
  846. return 1468;
  847. }
  848. if(id == 6528) // dharoks axe
  849. {
  850. return 2064;
  851. }
  852. if(id == 746 || id == 667 || id == 35 || id == 2402 || id == 8100)
  853. {
  854. return 2064;
  855. }
  856. if(id == 4718) // dharoks axe
  857. {
  858. return 2064;
  859. }
  860. if(id == 4565) // basket of eggs :)
  861. {
  862. return 1836;
  863. }
  864. 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
  865. {
  866. return 1146;
  867. }
  868. if(id == 7158 || id == 1319 || id == 6609)
  869. {
  870. return 2562;
  871. }
  872. if(id == 4755) // veracs flail
  873. {
  874. return 2060;
  875. }
  876. if(id == 4734) // karils x bow
  877. {
  878. return 2076;
  879. }
  880. if(id == 4153) // maul
  881. {
  882. return 1663;
  883. }
  884. if(id == 4718) // 2h + gr8 axe
  885. {
  886. return 1662;
  887. }
  888. if(id == 4151) // whip
  889. {
  890. return 1660;
  891. }
  892. else
  893. {
  894. return 0x333;
  895. }
  896. }
  897.  
  898. public int GetStandAnim(int id)
  899. {
  900. if(id == 837)
  901. {
  902. return 2257;
  903. }
  904. if(id == 4084)
  905. {
  906. return 1462;
  907. }
  908. if(id == 4718) // dharoks axe
  909. {
  910. return 2065;
  911. }
  912. if(id == 746 || id == 667 || id == 35 || id == 2402 || id == 8100)
  913. {
  914. return 2065;
  915. }
  916. if(id == 7158 || id == 1319 || id == 6609)
  917. {
  918. return 2561;
  919. }
  920. if(id == 4755) // veracs flail
  921. {
  922. return 2061;
  923. }
  924. if(id == 4734) // karils x bow
  925. {
  926. return 2074;
  927. }
  928. if(id == 4153) // maul
  929. {
  930. return 1662;
  931. }
  932. if(id == 6528)//Obby Maul
  933. {
  934. return 0x811;
  935. }
  936. 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
  937. {
  938. return 809;
  939. }
  940. else
  941. {
  942. return 0x328;
  943. }
  944. }
  945. public int GetBlockAnim()
  946. {
  947. 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)
  948. {
  949. return 0x484;
  950. }
  951. 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)
  952. {
  953. return 404;
  954. }
  955. if(playerEquipment[playerWeapon] == 4755) // veracs flail
  956. {
  957. return 2063;
  958. }
  959. if(playerEquipment[playerWeapon] == 6528) // obby maul
  960. {
  961. return 1666;
  962. }
  963. if(playerEquipment[playerWeapon] == 6818) // veracs flail
  964. {
  965. return 1125;
  966. }
  967. if(playerEquipment[playerWeapon] == 5698)
  968. {
  969. return 403;
  970. }
  971. if(playerEquipment[playerWeapon] == 4151) // whip
  972. {
  973. return 1659;
  974. }
  975. 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)
  976. {
  977. return 424;
  978. }
  979. if(playerEquipment[playerWeapon] == 4718)
  980. {
  981. return 424;
  982. }
  983. if(playerEquipment[playerWeapon] == 4153) // maul
  984. {
  985. return 1666;
  986. }
  987. else
  988. {
  989. return 424;
  990. }
  991. }
  992. public void CreateObject(int objectX, int objectY, int NewObjectID, int Face, int Ori, int height) {
  993. if (server.playerHandler.players[playerId] == null || disconnected || in == null || out == null) {
  994. return;
  995. }
  996. if (heightLevel != height)
  997. return;
  998. if (GoodDistance(objectX, objectY, absX, absY, 60)) {
  999. outStream.createFrame(85);
  1000. outStream.writeByteC(objectY - (mapRegionY * 8));
  1001. outStream.writeByteC(objectX - (mapRegionX * 8));
  1002. outStream.createFrame(151);
  1003. outStream.writeByteA(0);
  1004. outStream.writeWordBigEndian(NewObjectID);
  1005. outStream.writeByteS((Face<<2) + (Ori&3));
  1006. }
  1007. }
  1008.  
  1009. public void stopMovement()
  1010. {
  1011. newWalkCmdSteps = 0;
  1012. newWalkCmdX[0] = newWalkCmdY[0] = tmpNWCX[0] = tmpNWCY[0] = 0;
  1013. getNextPlayerMovement();
  1014. }
  1015.  
  1016. public void wildLevel(){
  1017. if (isInWilderness(absX, absY, 1))
  1018. {
  1019. outStream.createFrame(208);
  1020. outStream.writeWordBigEndian_dup(197);
  1021. int wildLvl = (((absY - 3520) / 8) + 1);
  1022. sendFrame126("Level: " + wildLvl, 199);
  1023.  
  1024. }
  1025. }
  1026.  
  1027. public void makeGlobalObject(int x, int y, int typeID, int orientation, int tileObjectType){ //Makes Global objects
  1028. for (Player p : server.playerHandler.players){
  1029. if(p != null){
  1030. client person = (client)p;
  1031. if((person.playerName != null || person.playerName != "null")){
  1032. if(person.distanceToPoint(x, y) <= 60){
  1033. person.createNewTileObject(x, y, typeID, orientation, tileObjectType);
  1034. }
  1035. }
  1036. }
  1037. }
  1038. }
  1039. public void NewObjects()
  1040. {
  1041. if (heightLevel == 0) {
  1042. //draynor//
  1043. makeGlobalObject(3419, 2935, 823, -3, 10);
  1044. makeGlobalObject(3420, 2935, 823, -3, 10);
  1045. //end//
  1046. makeGlobalObject(2594, 3103, 1530, -1, 10);
  1047. //makeGlobalObject(3112, 9689, 2783, -1, 10);
  1048. //makeGlobalObject(3112, 9689, -1, -1, 10);
  1049. //makeGlobalObject(3110, 9691, -1, -1, 10);
  1050. //makeGlobalObject(3113, 9692, -1, -1, 10);
  1051. //makeGlobalObject(3114, 9691, -1, -1, 10);
  1052. //makeGlobalObject(3113, 9688, -1, -1, 10);
  1053. //makeGlobalObject(3110, 9689, -1, -1, 10);
  1054. makeGlobalObject(2869, 3430, 4024, -1, 10);
  1055. makeGlobalObject(2870, 3430, 4024, -1, 10);
  1056. makeGlobalObject(2871, 3430, 4024, -1, 10);
  1057. makeGlobalObject(2872, 3430, 4024, -1, 10);
  1058. makeGlobalObject(2873, 3430, 4024, -1, 10);
  1059. makeGlobalObject(2874, 3430, 4024, -1, 10);
  1060. makeGlobalObject(2615, 3102, 4023, -1, 10);
  1061. makeGlobalObject(2615, 3103, 4023, -1, 10);
  1062. makeGlobalObject(2615, 3104, 4023, -1, 10);
  1063. makeGlobalObject(2615, 3105, 4023, -1, 10);
  1064. makeGlobalObject(2615, 3106, 4023, -1, 10);
  1065. makeGlobalObject(2742, 3487, 9010, -1, 10);
  1066. makeGlobalObject(2742, 3488, 9010, -1, 10);
  1067. makeGlobalObject(3084, 3462, 9020, -1, 10);
  1068. makeGlobalObject(3083, 3462, 9020, -1, 10);
  1069. makeGlobalObject(3062, 3453, 2452, -1, 10);
  1070. }
  1071. }
  1072. public void removeDoor() {
  1073. makeGlobalObject(2650, 3305, 6951, -1, 0);
  1074. makeGlobalObject(2650, 3297, 6951, -1, 11);
  1075. makeGlobalObject(2648, 3299, 6951, -1, 0);
  1076. makeGlobalObject(2678, 3324, 6951, -1, 0);
  1077. makeGlobalObject(2678, 3325, 6951, -1, 0);
  1078. makeGlobalObject(2635, 3307, 6951, -1, 0);
  1079. makeGlobalObject(2636, 3307, 6951, -1, 0);
  1080. makeGlobalObject(2610, 3316, 6951, -1, 0);
  1081. makeGlobalObject(2757, 3482, 6951, -1, 0);
  1082. makeGlobalObject(2758, 3482, 6951, -1, 0);
  1083. makeGlobalObject(2713, 3483, 6951, -1, 0);
  1084. makeGlobalObject(2716, 3472, 6951, -1, 0);
  1085. makeGlobalObject(2656, 3161, 6951, -1, 0);
  1086. makeGlobalObject(3079, 3501, 6951, -1, 0);
  1087. makeGlobalObject(3080, 3501, 6951, -1, 0);
  1088. makeGlobalObject(3079, 3497, 6951, -1, 0);
  1089. //makeGlobalObject(x, y, 0, -1, 0);
  1090. }
  1091. public void deleteObject() {
  1092. makeGlobalObject(3078, 3258, 6951, 0, 0);
  1093. makeGlobalObject(3077, 3258, 6951, 0, 0);
  1094. makeGlobalObject(3076, 3258, 6951, 0, 0);
  1095. makeGlobalObject(2755, 3440, 6951, 0, 0);
  1096. makeGlobalObject(2758, 3440, 6951, 0, 0);
  1097. makeGlobalObject(2762, 3440, 6951, 0, 0);
  1098. makeGlobalObject(2755, 3443, 6951, 0, 0);
  1099. makeGlobalObject(2759, 3444, 6951, 0, 0);
  1100. makeGlobalObject(2762, 3443, 6951, 0, 0);
  1101. makeGlobalObject(2755, 3447, 6951, 0, 0);
  1102. makeGlobalObject(2758, 3447, 6951, 0, 0);
  1103. makeGlobalObject(2762, 3447, 6951, 0, 0);
  1104. }
  1105. public void objects() {//change all the x's, y's, id's, etc
  1106. removeDoor();
  1107. NewObjects();
  1108. deleteObject();
  1109. }
  1110.  
  1111. public void players() {
  1112. sendQuest("@dre@Zernix - Online Players", 8144); clearQuestInterface(); int line = 8147;
  1113. for (int i = 1; i < PlayerHandler.maxPlayers; i++) {
  1114. client playa = getClient(i);
  1115. if (!validClient(i))
  1116. continue;
  1117. if (playa.playerName != null) {
  1118. String title = "";
  1119. if (playa.playerRights == 0 && playa.premium == false) {
  1120. title = "Player, ";
  1121. } else if (playa.playerRights == 0 && playa.premium == true) {
  1122. title = "Premium, ";
  1123. } else if (playa.playerRights == 1) {
  1124. title = "Mod, ";
  1125. } else if (playa.playerRights == 2) {
  1126. title = "Admin, ";
  1127. } else if (playa.playerRights == 3) {
  1128. title = "Owner, ";}
  1129. title += "level-" + playa.combatLevel; String extra = "";
  1130. if (playerRights > 0) {
  1131. extra = "(" + playa.playerId + ") ";} sendQuest("@dre@" + extra + playa.playerName + "@dbl@ ("+ title +") is at " + playa.absX + ", "+ playa.absY, line);
  1132. line++;}}
  1133. sendQuestSomething(8143); showInterface(8134); flushOutStream();}
  1134.  
  1135. public void commitobj() {
  1136. createNewTileObject(GObjX, GObjY, GObjId);
  1137. GObjChange = 0;
  1138. }
  1139.  
  1140. public void globobj(int bjx, int bjy, int obj) {
  1141. int x = PlayerHandler.getPlayerCount();
  1142.  
  1143. for (int r = 0; r < x; r++) {
  1144. if (PlayerHandler.players[r] != null) {
  1145. PlayerHandler.players[r].GObjId = obj;
  1146. PlayerHandler.players[r].GObjX = bjx;
  1147. PlayerHandler.players[r].GObjY = bjy;
  1148. PlayerHandler.players[r].GObjChange = 1;
  1149. PlayerHandler.players[r].GObjSet = 1;
  1150. }
  1151. }
  1152. }
  1153.  
  1154. public void createNewTileObject(int x, int y, int typeID) {
  1155. boolean a = true;
  1156. if (a)
  1157. return;
  1158. outStream.createFrame(85);
  1159. outStream.writeByteC(y-(mapRegionY*8));
  1160. outStream.writeByteC(x-(mapRegionX*8));
  1161. outStream.createFrame(151);
  1162. // outStream.writeByteA(((x&7) << 4) + (y&7));
  1163. outStream.writeByteA(0);
  1164. outStream.writeWordBigEndian(typeID);
  1165. }
  1166.  
  1167. public void closeInterface() {
  1168. IsBanking = false;
  1169. outStream.createFrame(219);
  1170. }
  1171.  
  1172. /* WALKING TO OBJECT BEFORE DOING ACTION*/
  1173.  
  1174. public void DoAction() {
  1175.  
  1176. viewTo(destinationX, destinationY);
  1177. switch (ActionType) {
  1178. default: // error
  1179. println_debug("Error - unknown ActionType found");
  1180. break;
  1181. }
  1182. }
  1183.  
  1184. /* DUELING*/
  1185.  
  1186. public int duelpartner = 0;
  1187.  
  1188.  
  1189.  
  1190.  
  1191. public void ResetWalkTo() {
  1192. ActionType = -1;
  1193. destinationX = -1;
  1194. destinationY = -1;
  1195. destinationID = -1;
  1196. destinationRange = 1;
  1197. WalkingTo = false;
  1198. }
  1199.  
  1200.  
  1201. public void ReplaceObject2(int objectX, int objectY, int NewObjectID, int Face, int ObjectType) {
  1202. outStream.createFrame(85);
  1203. outStream.writeByteC(objectY-(mapRegionY*8));
  1204. outStream.writeByteC(objectX-(mapRegionX*8));
  1205.  
  1206. outStream.createFrame(101);
  1207. outStream.writeByteC((ObjectType << 2)+(Face & 3));
  1208. outStream.writeByte(0);
  1209.  
  1210. if (NewObjectID != -1) {
  1211. outStream.createFrame(151);
  1212. outStream.writeByteS(0);
  1213. outStream.writeWordBigEndian(NewObjectID);
  1214. outStream.writeByteS((ObjectType << 2)+(Face & 3));
  1215. // FACE: 0= WEST | -1 = NORTH | -2 = EAST | -3 = SOUTH
  1216. // ObjectType: 0-3 wall objects, 4-8 wall decoration, 9: diag. walls, 10-11 world objects, 12-21: roofs, 22: floor decoration
  1217. }
  1218. }
  1219.  
  1220. public void AddGlobalObj(int objectX, int objectY, int NewObjectID, int Face, int ObjectType) {
  1221. //for (Player p : server.playerHandler.players) {
  1222. //Linux (java 1.4.2-compatible) change - Devolution
  1223. for (int i = 0; i < server.playerHandler.players.length; i++) {
  1224. //changed
  1225. Player p = server.playerHandler.players[i]; //changed
  1226. if (p != null) {
  1227. client person = (client)p;
  1228.  
  1229. if (person.playerName != null) {
  1230. if (person.distanceToPoint(objectX, objectY) <= 60) {
  1231. person.ReplaceObject2(objectX, objectY, NewObjectID, Face, ObjectType);
  1232. }
  1233. }
  1234. }
  1235. }
  1236. }
  1237.  
  1238. public void attackNPCSWithin(int gfx, int maxDamage, int range) {
  1239. for (int i = 0; i <= server.npcHandler.maxNPCSpawns; i++) {
  1240. if (server.npcHandler.npcs[i] != null) {
  1241. if (distanceToPoint(server.npcHandler.npcs[i].absX, server.npcHandler.npcs[i].absY) <= range && ! server.npcHandler.npcs[i].IsDead) {
  1242. int damage = misc.random(maxDamage);
  1243.  
  1244. animation(gfx, server.npcHandler.npcs[i].absY, server.npcHandler.npcs[i].absX);
  1245. if (server.npcHandler.npcs[i].HP-hitDiff < 0) {
  1246. damage = server.npcHandler.npcs[i].HP;
  1247. }
  1248. server.npcHandler.npcs[i].StartKilling = playerId;
  1249. server.npcHandler.npcs[i].RandomWalk = false;
  1250. server.npcHandler.npcs[i].hitDiff = damage;
  1251. server.npcHandler.npcs[i].updateRequired = true;
  1252. server.npcHandler.npcs[i].hitUpdateRequired = true;
  1253. server.npcHandler.npcs[i].hit = true;
  1254. }
  1255. }
  1256. }
  1257. }
  1258.  
  1259. public void attackPlayersWithin(int gfx, int maxDamage, int range) {
  1260. //for (Player p : server.playerHandler.players) {
  1261. //Linux (java 1.4.2-compatible) change - Devolution
  1262. for (int i = 0; i < server.playerHandler.players.length; i++) {
  1263. //changed
  1264. Player p = server.playerHandler.players[i]; //changed
  1265. if (p != null) {
  1266. client person = (client)p;
  1267.  
  1268. if (person.playerName != null) {
  1269. if (person.distanceToPoint(absX, absY) <= range && person.playerId != playerId) {
  1270. int damage = misc.random(maxDamage);
  1271.  
  1272. person.animation(gfx, person.absY, person.absX);
  1273. if (person.playerLevel[3]-hitDiff < 0) {
  1274. damage = person.playerLevel[3];
  1275. }
  1276. person.hitDiff = damage;
  1277. person.KillerId = playerId;
  1278. person.updateRequired = true;
  1279. person.hitUpdateRequired = true;
  1280. }
  1281. }
  1282. }
  1283. }
  1284. }
  1285.  
  1286. /* PRAYER */
  1287. public boolean Retribution = false;
  1288.  
  1289. public void attackPlayersPrayer(int maxDamage, int range) {
  1290. //for (Player p : server.playerHandler.players) {
  1291. //Linux (java 1.4.2-compatible) change - Devolution
  1292. for (int i = 0; i < server.playerHandler.players.length; i++) {
  1293. //changed
  1294. Player p = server.playerHandler.players[i]; //changed
  1295. if (p != null) {
  1296. client person = (client)p;
  1297.  
  1298. if (person.playerName != null) {
  1299. if (person.distanceToPoint(absX, absY) <= range && person.playerId != playerId) {
  1300. int damage = misc.random(maxDamage);
  1301.  
  1302. if (person.playerLevel[3]-hitDiff < 0) {
  1303. damage = person.playerLevel[3];
  1304. }
  1305. person.hitDiff = damage;
  1306. person.KillerId = playerId;
  1307. person.updateRequired = true;
  1308. person.hitUpdateRequired = true;
  1309. }
  1310. }
  1311. }
  1312. }
  1313. }
  1314.  
  1315. /* END OF PRAYER */
  1316. public void viewTo(int coordX, int coordY) {
  1317. viewToX = ((2*coordX)+1);
  1318. viewToY = ((2*coordY)+1);
  1319. dirUpdate2Required = true;
  1320. updateRequired = true;
  1321. }
  1322.  
  1323. public boolean wearing = false;
  1324. public int summonLevel = 250;
  1325. public int summonXP = 9999999;
  1326.  
  1327. /* SUMMONING*/
  1328.  
  1329. public static boolean AutoSave = false;
  1330. public int savecounter = 0;
  1331. public boolean spellSet = false;
  1332. public boolean iceBarrage = false;
  1333. public int iceTimer = 1000;
  1334. public void iceBarrage() {
  1335. iceBarrage = true;
  1336. iceTimer = 1000;
  1337. }
  1338.  
  1339. /* MISC*/
  1340. public int hasset = 0;
  1341. public int oldclick = 0;
  1342. public int sameclick = 0;
  1343.  
  1344. /* RANGE*/
  1345. public boolean HasArrows = true;
  1346.  
  1347. public void CheckArrows() {
  1348. for (int k = 880; k < 893; k++) {
  1349.  
  1350. if (playerEquipment[playerArrows] == k) {
  1351. HasArrows = true;
  1352. } else {
  1353. HasArrows = false;
  1354. }
  1355. }
  1356. }
  1357.  
  1358. public void createEnemyItem(int newItemID) {
  1359. int EnemyX = PlayerHandler.players[AttackingOn].absX;
  1360. int EnemyY = PlayerHandler.players[AttackingOn].absY;
  1361. int Maxi = server.itemHandler.DropItemCount;
  1362.  
  1363. for (int i = 0; i <= Maxi; i++) {
  1364. if (server.itemHandler.DroppedItemsID[i] < 1) {
  1365. server.itemHandler.DroppedItemsID[i] = newItemID;
  1366. server.itemHandler.DroppedItemsX[i] = (EnemyX);
  1367. server.itemHandler.DroppedItemsY[i] = (EnemyY);
  1368. server.itemHandler.DroppedItemsN[i] = 1;
  1369. server.itemHandler.DroppedItemsH[i] = heightLevel;
  1370. server.itemHandler.DroppedItemsDDelay[i] = (server.itemHandler.MaxDropShowDelay+1); // this way the item can NEVER be showed to another client
  1371. server.itemHandler.DroppedItemsDropper[i] = playerId;
  1372. if (i == Maxi) {
  1373. server.itemHandler.DropItemCount++;
  1374. if (server.itemHandler.DropItemCount >= (server.itemHandler.MaxDropItems+1)) {
  1375. server.itemHandler.DropItemCount = 0;
  1376. misc.println("! Notify item resterting !");
  1377. }
  1378. }
  1379. break;
  1380. }
  1381. }
  1382. }
  1383.  
  1384. public void CalculateRange() {
  1385. double MaxHit = 0;
  1386. int RangeBonus = playerBonus[3]; // Range Bonus
  1387. int Range = playerLevel[4];
  1388. {
  1389. // Range
  1390. MaxHit += (double)(1.05+(double)((double)(RangeBonus*Range)*0.00175));
  1391. }
  1392. MaxHit += (double)(Range*0.2);
  1393. playerMaxHit = (int)Math.floor(MaxHit);
  1394. }
  1395.  
  1396. public void restorePot() {
  1397.  
  1398. playerLevel[0] = getLevelForXP(playerXP[0]);
  1399. sendFrame126(""+playerLevel[0]+"", 4004);
  1400. playerLevel[1] = getLevelForXP(playerXP[1]);
  1401. sendFrame126(""+playerLevel[1]+"", 4008);
  1402. playerLevel[2] = getLevelForXP(playerXP[2]);
  1403. sendFrame126(""+playerLevel[2]+"", 4006);
  1404. playerLevel[4] = getLevelForXP(playerXP[4]);
  1405. sendFrame126(""+playerLevel[4]+"", 4010);
  1406. playerLevel[6] = getLevelForXP(playerXP[6]);
  1407. sendFrame126(""+playerLevel[6]+"", 4014);
  1408. playerLevel[7] = getLevelForXP(playerXP[7]);
  1409. sendFrame126(""+playerLevel[7]+"", 4034);
  1410. playerLevel[8] = getLevelForXP(playerXP[8]);
  1411. sendFrame126(""+playerLevel[8]+"", 4038);
  1412. playerLevel[9] = getLevelForXP(playerXP[9]);
  1413. sendFrame126(""+playerLevel[9]+"", 4026);
  1414. playerLevel[10] = getLevelForXP(playerXP[10]);
  1415. sendFrame126(""+playerLevel[10]+"", 4032);
  1416. playerLevel[11] = getLevelForXP(playerXP[11]);
  1417. sendFrame126(""+playerLevel[11]+"", 4036);
  1418. playerLevel[12] = getLevelForXP(playerXP[12]);
  1419. sendFrame126(""+playerLevel[12]+"", 4024);
  1420. playerLevel[13] = getLevelForXP(playerXP[13]);
  1421. sendFrame126(""+playerLevel[13]+"", 4030);
  1422. playerLevel[14] = getLevelForXP(playerXP[14]);
  1423. sendFrame126(""+playerLevel[14]+"", 4028);
  1424. playerLevel[15] = getLevelForXP(playerXP[15]);
  1425. sendFrame126(""+playerLevel[15]+"", 4020);
  1426. playerLevel[16] = getLevelForXP(playerXP[16]);
  1427. sendFrame126(""+playerLevel[16]+"", 4018);
  1428. playerLevel[17] = getLevelForXP(playerXP[17]);
  1429. sendFrame126(""+playerLevel[17]+"", 4022);
  1430. playerLevel[20] = getLevelForXP(playerXP[20]);
  1431. sendFrame126(""+playerLevel[20]+"", 4152);
  1432. }
  1433. public void createNewTileObject(int x, int y, int typeID, int orientation, int tileObjectType) {
  1434. outStream.createFrame(85);
  1435. outStream.writeByteC(y-(mapRegionY*8));
  1436. outStream.writeByteC(x-(mapRegionX*8));
  1437.  
  1438. outStream.createFrame(151);
  1439. //outStream.writeByteA(((x&7) << 4) + (y&7));
  1440. outStream.writeByteA(0);
  1441. outStream.writeWordBigEndian(typeID);
  1442. outStream.writeByteS((tileObjectType << 2)+(orientation & 3));
  1443. }
  1444.  
  1445. public int duelWho = 0;
  1446. public boolean duelReq = false;
  1447. public int[]duelItems = new int[28];
  1448. public boolean[]duelItemsNoted = new boolean[28];
  1449. public int[]duelItemsN = new int[28];
  1450. public boolean duelAccept1 = false;
  1451. public boolean duelAccept2 = false;
  1452. public void duelPlayer(int pIndex) {
  1453. try {
  1454. if (!(pIndex >= 2047) /* && canDuel()*/) {
  1455. client duelPlayer = (client)server.playerHandler.players[pIndex];
  1456.  
  1457. sendMessage("Mage on player unlocked");
  1458. //duelPlayer.sendMessage(playerName+":duelreq:");
  1459. } else {
  1460. sendMessage("Dueling is currently disabled");
  1461. }
  1462. } catch (Exception e) {
  1463. sendMessage("attackPlayer: Invalid player index");
  1464. }
  1465. }
  1466. public int abc;
  1467. public int cba;
  1468. public int aaa;
  1469. public int abc2;
  1470.  
  1471. public int resetanim = 8;
  1472. public int KillerId = playerId;
  1473. public void levelup(int skill) {
  1474. switch (skill) {
  1475. case 0:
  1476. // Attack levelup
  1477. sendFrame164(6247);
  1478. sendFrame126("Congratulations, you just advanced an attack level!", 6248);
  1479. sendFrame126("Your attack level is now "+playerLevel[0]+".", 6249);
  1480. sendMessage("Congratulations, you just advanced an attack level.");
  1481. NpcDialogueSend = true;
  1482. break;
  1483.  
  1484. case 1:
  1485. // Strength
  1486. sendFrame164(6206);
  1487. sendFrame126("Congratulations, you just advanced a strength level!", 6207);
  1488. sendFrame126("Your strength level is now "+playerLevel[2]+".", 6208);
  1489. sendMessage("Congratulations, you just advanced a strength level.");
  1490. NpcDialogueSend = true;
  1491. break;
  1492.  
  1493. case 2:
  1494. // Defence
  1495. sendFrame164(6253);
  1496. sendFrame126("Congratulations, you just advanced a defence level!", 6254);
  1497. sendFrame126("Your defence level is now "+playerLevel[1]+".", 6255);
  1498. sendMessage("Congratulations, you just advanced a defence level.");
  1499. NpcDialogueSend = true;
  1500. break;
  1501.  
  1502. case 3:
  1503. // Hitpoints
  1504. sendFrame164(6216);
  1505. sendFrame126("Congratulations, you just advanced a hitpoints level!", 6217);
  1506. sendFrame126("Your hitpoints level is now "+playerLevel[3]+".", 6218);
  1507. sendMessage("Congratulations, you just advanced a hitpoints level.");
  1508. NpcDialogueSend = true;
  1509. break;
  1510.  
  1511. case 4:
  1512. // Ranging
  1513. sendFrame164(4443);
  1514. sendFrame126("Congratulations, you just advanced a ranged level!", 4444);
  1515. sendFrame126("Your ranged level is now "+playerLevel[4]+".", 4445);
  1516. sendMessage("Congratulations, you just advanced a ranging level.");
  1517. NpcDialogueSend = true;
  1518. break;
  1519.  
  1520. case 5:
  1521. // Prayer
  1522. sendFrame164(6242);
  1523. sendFrame126("Congratulations, you just advanced a prayer level!", 6243);
  1524. sendFrame126("Your prayer level is now "+playerLevel[5]+".", 6244);
  1525. sendMessage("Congratulations, you just advanced a prayer level.");
  1526. NpcDialogueSend = true;
  1527. break;
  1528.  
  1529. case 6:
  1530. // Magic
  1531. sendFrame164(6211);
  1532. sendFrame126("Congratulations, you just advanced a magic level!", 6212);
  1533. sendFrame126("Your magic level is now "+playerLevel[6]+".", 6213);
  1534. sendMessage("Congratulations, you just advanced a magic level.");
  1535. NpcDialogueSend = true;
  1536. break;
  1537.  
  1538. case 7:
  1539. // Cooking
  1540. sendFrame164(6226);
  1541. sendFrame126("Congratulations, you just advanced a cooking level!", 6227);
  1542. sendFrame126("Your cooking level is now "+playerLevel[7]+".", 6228);
  1543. sendMessage("Congratulations, you just advanced a cooking level.");
  1544. NpcDialogueSend = true;
  1545. break;
  1546.  
  1547. case 8:
  1548. // Woodcutting
  1549. sendFrame164(4272);
  1550. sendFrame126("Congratulations, you just advanced a woodcutting level!", 4273);
  1551. sendFrame126("Your woodcutting level is now "+playerLevel[8]+".", 4274);
  1552. sendMessage("Congratulations, you just advanced a woodcutting level.");
  1553. NpcDialogueSend = true;
  1554. break;
  1555.  
  1556. case 9:
  1557. // Fletching
  1558. sendFrame164(6231);
  1559. sendFrame126("Congratulations, you just advanced a fletching level!", 6232);
  1560. sendFrame126("Your fletching level is now "+playerLevel[9]+".", 6233);
  1561. sendMessage("Congratulations, you just advanced a fletching level.");
  1562. NpcDialogueSend = true;
  1563. break;
  1564.  
  1565. case 10:
  1566. // fishing
  1567. sendFrame164(6258);
  1568. sendFrame126("Congratulations, you just advanced a fishing level!", 6259);
  1569. sendFrame126("Your fishing level is now "+playerLevel[10]+".", 6260);
  1570. sendMessage("Congratulations, you just advanced a fishing level.");
  1571. NpcDialogueSend = true;
  1572. break;
  1573.  
  1574. case 11:
  1575. // firemaking
  1576. sendFrame164(4282);
  1577. sendFrame126("Congratulations, you just advanced a fire making level!", 4283);
  1578. sendFrame126("Your firemaking level is now "+playerLevel[11]+".", 4284);
  1579. sendMessage("Congratulations, you just advanced a fire making level.");
  1580. NpcDialogueSend = true;
  1581. break;
  1582.  
  1583. case 12:
  1584. // crafting
  1585. sendFrame164(6263);
  1586. sendFrame126("Congratulations, you just advanced a crafting level!", 6264);
  1587. sendFrame126("Your crafting level is now "+playerLevel[12]+".", 6265);
  1588. sendMessage("Congratulations, you just advanced a crafting level.");
  1589. NpcDialogueSend = true;
  1590. break;
  1591.  
  1592. case 13:
  1593. // Smithing
  1594. sendFrame164(6221);
  1595. sendFrame126("Congratulations, you just advanced a smithing level!", 6222);
  1596. sendFrame126("Your smithing level is now "+playerLevel[13]+".", 6223);
  1597. sendMessage("Congratulations, you just advanced a smithing level.");
  1598. NpcDialogueSend = true;
  1599. break;
  1600.  
  1601. case 14:
  1602. // Mining
  1603. sendFrame164(4416);
  1604. sendFrame126("Congratulations, you just advanced a mining level!", 4417);
  1605. sendFrame126("Your mining level is now "+playerLevel[14]+".", 4418);
  1606. sendMessage("Congratulations, you just advanced a mining level.");
  1607. NpcDialogueSend = true;
  1608. break;
  1609.  
  1610. case 15:
  1611. // Herblore
  1612. sendFrame164(6237);
  1613. sendFrame126("Congratulations, you just advanced a herblore level!", 6238);
  1614. sendFrame126("Your herblore level is now "+playerLevel[15]+".", 6239);
  1615. sendMessage("Congratulations, you just advanced a herblore level.");
  1616. NpcDialogueSend = true;
  1617. break;
  1618.  
  1619. case 16:
  1620. // Agility
  1621. sendFrame164(4277);
  1622. sendFrame126("Congratulations, you just advanced a agility level!", 4278);
  1623. sendFrame126("Your agility level is now "+playerLevel[16]+".", 4279);
  1624. sendMessage("Congratulations, you just advanced an agility level.");
  1625. NpcDialogueSend = true;
  1626. break;
  1627.  
  1628. case 17:
  1629. // Thieving
  1630. sendFrame164(4261);
  1631. sendFrame126("Congratulations, you just advanced a thieving level!", 6262);
  1632. sendFrame126("Your theiving level is now "+playerLevel[17]+".", 6263);
  1633. sendMessage("Congratulations, you just advanced a thieving level.");
  1634. NpcDialogueSend = true;
  1635. break;
  1636.  
  1637. case 18:
  1638. // Slayer
  1639. sendFrame164(12123);
  1640. sendFrame126("Congratulations, you just advanced a slayer level!", 6207);
  1641. sendFrame126("Your slayer level is now "+playerLevel[18]+".", 6208);
  1642. sendMessage("Congratulations, you just advanced a slayer level.");
  1643. NpcDialogueSend = true;
  1644. break;
  1645.  
  1646. case 19:
  1647. // Farming
  1648. // sendFrame164(4261);
  1649. // sendFrame126("Congratulations, you just advanced a thieving level!", 6207);
  1650. // sendFrame126("Your farming level is now "+playerLevel[19]+" .", 6208);
  1651. sendMessage("Congratulations, you just advanced a farming level.");
  1652. NpcDialogueSend = true;
  1653. break;
  1654.  
  1655. case 20:
  1656. // Runecrafting
  1657. sendFrame164(4267);
  1658. sendFrame126("Congratulations, you just advanced a runecrafting level!", 4268);
  1659. sendFrame126("Your runecrafting level is now "+playerLevel[20]+".", 4269);
  1660. sendMessage("Congratulations, you just advanced a runecrafting level.");
  1661. NpcDialogueSend = true;
  1662. break;
  1663.  
  1664. }
  1665. }
  1666.  
  1667. public void refreshSkills() {
  1668.  
  1669. sendQuest(""+playerLevel[0]+"", 4004);
  1670. sendQuest(""+playerLevel[2]+"", 4006);
  1671. sendQuest(""+playerLevel[1]+"", 4008);
  1672. sendQuest(""+playerLevel[4]+"", 4010);
  1673. sendQuest(""+playerLevel[5]+"", 4012);
  1674. sendQuest(""+playerLevel[6]+"", 4014);
  1675. sendQuest(""+currentHealth+"", 4016);
  1676. sendQuest(""+playerLevel[16]+"", 4018);
  1677. sendQuest(""+playerLevel[15]+"", 4020);
  1678. sendQuest(""+playerLevel[17]+"", 4022);
  1679. sendQuest(""+playerLevel[12]+"", 4024);
  1680. sendQuest(""+playerLevel[9]+"", 4026);
  1681. sendQuest(""+playerLevel[14]+"", 4028);
  1682. sendQuest(""+playerLevel[13]+"", 4030);
  1683. sendQuest(""+playerLevel[10]+"", 4032);
  1684. sendQuest(""+playerLevel[7]+"", 4034);
  1685. sendQuest(""+playerLevel[11]+"", 4036);
  1686. sendQuest(""+playerLevel[8]+"", 4038);
  1687. sendQuest(""+playerLevel[20]+"", 4152);
  1688. sendQuest(""+playerLevel[18]+"", 12166);
  1689. sendQuest(""+playerLevel[19]+"", 13926);
  1690.  
  1691. sendQuest(""+getLevelForXP(playerXP[0])+"", 4005);
  1692. sendQuest(""+getLevelForXP(playerXP[2])+"", 4007);
  1693. sendQuest(""+getLevelForXP(playerXP[1])+"", 4009);
  1694. sendQuest(""+getLevelForXP(playerXP[4])+"", 4011);
  1695. sendQuest(""+getLevelForXP(playerXP[5])+"", 4013);
  1696. sendQuest(""+getLevelForXP(playerXP[6])+"", 4015);
  1697. sendQuest(""+getLevelForXP(playerXP[3])+"", 4017);
  1698. sendQuest(""+getLevelForXP(playerXP[16])+"", 4019);
  1699. sendQuest(""+getLevelForXP(playerXP[15])+"", 4021);
  1700. sendQuest(""+getLevelForXP(playerXP[17])+"", 4023);
  1701. sendQuest(""+getLevelForXP(playerXP[12])+"", 4025);
  1702. sendQuest(""+getLevelForXP(playerXP[9])+"", 4027);
  1703. sendQuest(""+getLevelForXP(playerXP[14])+"", 4029);
  1704. sendQuest(""+getLevelForXP(playerXP[13])+"", 4031);
  1705. sendQuest(""+getLevelForXP(playerXP[10])+"", 4033);
  1706. sendQuest(""+getLevelForXP(playerXP[7])+"", 4035);
  1707. sendQuest(""+getLevelForXP(playerXP[11])+"", 4037);
  1708. sendQuest(""+getLevelForXP(playerXP[8])+"", 4039);
  1709. sendQuest(""+getLevelForXP(playerXP[20])+"", 4153);
  1710. sendQuest(""+getLevelForXP(playerXP[18])+"", 12167);
  1711. sendQuest(""+getLevelForXP(playerXP[19])+"", 13927);
  1712.  
  1713. sendQuest(""+playerXP[0]+"", 4044);
  1714. sendQuest(""+playerXP[2]+"", 4050);
  1715. sendQuest(""+playerXP[1]+"", 4056);
  1716. sendQuest(""+playerXP[4]+"", 4062);
  1717. sendQuest(""+playerXP[5]+"", 4068);
  1718. sendQuest(""+playerXP[6]+"", 4074);
  1719. sendQuest(""+playerXP[3]+"", 4080);
  1720. sendQuest(""+playerXP[16]+"", 4086);
  1721. sendQuest(""+playerXP[15]+"", 4092);
  1722. sendQuest(""+playerXP[17]+"", 4098);
  1723. sendQuest(""+playerXP[12]+"", 4104);
  1724. sendQuest(""+playerXP[9]+"", 4110);
  1725. sendQuest(""+playerXP[14]+"", 4116);
  1726. sendQuest(""+playerXP[13]+"", 4122);
  1727. sendQuest(""+playerXP[10]+"", 4128);
  1728. sendQuest(""+playerXP[7]+"", 4134);
  1729. sendQuest(""+playerXP[11]+"", 4140);
  1730. sendQuest(""+playerXP[8]+"", 4146);
  1731. sendQuest(""+playerXP[20]+"", 4157);
  1732. sendQuest(""+playerXP[18]+"", 12171);
  1733. sendQuest(""+playerXP[19]+"", 13921);
  1734.  
  1735. sendQuest(""+getXPForLevel(playerLevel[0]+1)+"", 4045);
  1736. sendQuest(""+getXPForLevel(playerLevel[2]+1)+"", 4051);
  1737. sendQuest(""+getXPForLevel(playerLevel[1]+1)+"", 4057);
  1738. sendQuest(""+getXPForLevel(playerLevel[4]+1)+"", 4063);
  1739. sendQuest(""+getXPForLevel(playerLevel[5]+1)+"", 4069);
  1740. sendQuest(""+getXPForLevel(playerLevel[6]+1)+"", 4075);
  1741. sendQuest(""+getXPForLevel(playerLevel[3]+1)+"", 4081);
  1742. sendQuest(""+getXPForLevel(playerLevel[16]+1)+"", 4087);
  1743. sendQuest(""+getXPForLevel(playerLevel[15]+1)+"", 4093);
  1744. sendQuest(""+getXPForLevel(playerLevel[17]+1)+"", 4099);
  1745. sendQuest(""+getXPForLevel(playerLevel[12]+1)+"", 4105);
  1746. sendQuest(""+getXPForLevel(playerLevel[9]+1)+"", 4111);
  1747. sendQuest(""+getXPForLevel(playerLevel[14]+1)+"", 4117);
  1748. sendQuest(""+getXPForLevel(playerLevel[13]+1)+"", 4123);
  1749. sendQuest(""+getXPForLevel(playerLevel[10]+1)+"", 4129);
  1750. sendQuest(""+getXPForLevel(playerLevel[7]+1)+"", 4135);
  1751. sendQuest(""+getXPForLevel(playerLevel[11]+1)+"", 4141);
  1752. sendQuest(""+getXPForLevel(playerLevel[8]+1)+"", 4147);
  1753. sendQuest(""+getXPForLevel(playerLevel[20]+1)+"", 4158);
  1754. sendQuest(""+getXPForLevel(playerLevel[18]+1)+"", 12172);
  1755. sendQuest(""+getXPForLevel(playerLevel[19]+1)+"", 13922);
  1756. }
  1757.  
  1758. public int distanceToPoint(int pointX, int pointY) {
  1759. return (int)Math.sqrt(Math.pow(absX-pointX, 2)+Math.pow(absY-pointY, 2));
  1760. }
  1761.  
  1762. public void teleblock() {
  1763. // stops from teleing anywhere
  1764. AntiTeleDelay = 1000;
  1765. }
  1766.  
  1767. public int AntiTeleDelay;
  1768.  
  1769. public int amountOfItem(int itemID) {
  1770. int i1 = 0;
  1771.  
  1772. for (int i = 0; i < 28; i++) {
  1773. if (playerItems[i] == (itemID+1)) {
  1774. i1++;
  1775. }
  1776. }
  1777. return i1;
  1778. }
  1779.  
  1780. public boolean ResetAttackPlayer(int NPCID) {
  1781. server.npcHandler.npcs[NPCID].IsUnderAttack = false;
  1782. server.npcHandler.npcs[NPCID].StartKilling = 0;
  1783. server.npcHandler.npcs[NPCID].RandomWalk = true;
  1784. server.npcHandler.npcs[NPCID].animNumber = 0x328;
  1785. server.npcHandler.npcs[NPCID].animUpdateRequired = true;
  1786. server.npcHandler.npcs[NPCID].updateRequired = true;
  1787. return true;
  1788. }
  1789. public String converse;
  1790. public static boolean threats;
  1791. public int restart = 0;
  1792.  
  1793. /* ALLIGNMENT(Good - Evil - Creds to Runite)*/
  1794. public int allignment = 0;
  1795. public boolean alreadyChose = false;
  1796. public String playerstatus = "";
  1797. public static boolean comeback = false;
  1798. public int stealtimer;
  1799.  
  1800. public void robman() {
  1801. sendMessage("You pickpocket the man.");
  1802. addItem(995, 100);
  1803. addSkillXP(200, 17);
  1804. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1805. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1806.  
  1807. TurnPlayerTo(EnemyX2, EnemyY2);
  1808.  
  1809. }
  1810.  
  1811. public void robfarmer() {
  1812. long now = System.currentTimeMillis();
  1813. if (now-lastAction < 1500)
  1814. return;
  1815. lastAction = now;
  1816. sendMessage("You pickpocket the farmer.");
  1817. addItem(995, misc.random(300));
  1818. addSkillXP(320, 17);
  1819. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1820. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1821.  
  1822. TurnPlayerTo(EnemyX2, EnemyY2);
  1823. updateRequired = true;
  1824. appearanceUpdateRequired = true;
  1825.  
  1826. }
  1827.  
  1828. public void robwarrior() {
  1829. sendMessage("You pickpocket the warrior.");
  1830. addItem(995, misc.random(1000));
  1831. addSkillXP(4600, 1000);
  1832. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1833. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1834.  
  1835. TurnPlayerTo(EnemyX2, EnemyY2);
  1836. updateRequired = true;
  1837. appearanceUpdateRequired = true;
  1838. }
  1839.  
  1840. public void robrogue() {
  1841. if (premium) {
  1842. sendMessage("You pickpocket the rogue.");
  1843. addItem(995, misc.random(600));
  1844. addSkillXP(450, 17);
  1845. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1846. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1847.  
  1848. TurnPlayerTo(EnemyX2, EnemyY2);
  1849. updateRequired = true;
  1850. appearanceUpdateRequired = true;
  1851. }
  1852. }
  1853.  
  1854. public void robmasterfarmer() {
  1855. sendMessage("You pickpocket the master farmer.");
  1856. addItem(995, 40);
  1857. addSkillXP(43, 17);
  1858. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1859. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1860.  
  1861. TurnPlayerTo(EnemyX2, EnemyY2);
  1862. updateRequired = true;
  1863. appearanceUpdateRequired = true;
  1864. }
  1865.  
  1866. public void robguard() {
  1867. sendMessage("You pickpocket the gaurd.");
  1868. addItem(995, 30);
  1869. addSkillXP(47, 17);
  1870. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1871. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1872.  
  1873. TurnPlayerTo(EnemyX2, EnemyY2);
  1874. updateRequired = true;
  1875. appearanceUpdateRequired = true;
  1876. }
  1877.  
  1878. public void robknight() {
  1879. sendMessage("You pickpocket the knight.");
  1880. addItem(995, 50);
  1881. addSkillXP(85, 17);
  1882. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1883. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1884.  
  1885. TurnPlayerTo(EnemyX2, EnemyY2);
  1886. updateRequired = true;
  1887. appearanceUpdateRequired = true;
  1888. }
  1889.  
  1890. public void robwatchman() {
  1891. sendMessage("You pickpocket the watchman.");
  1892. addItem(995, 60);
  1893. addSkillXP(138, 17);
  1894. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1895. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1896.  
  1897. TurnPlayerTo(EnemyX2, EnemyY2);
  1898. updateRequired = true;
  1899. appearanceUpdateRequired = true;
  1900. }
  1901.  
  1902. public void robpaladin() {
  1903. sendMessage("You pickpocket the paladin.");
  1904. addItem(995, 80);
  1905. addSkillXP(152, 17);
  1906. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1907. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1908.  
  1909. TurnPlayerTo(EnemyX2, EnemyY2);
  1910. updateRequired = true;
  1911. appearanceUpdateRequired = true;
  1912. }
  1913.  
  1914. public void robgnome() {
  1915. sendMessage("You pickpocket the gnome.");
  1916. addItem(995, misc.random(2500));
  1917. addSkillXP(680, 17);
  1918. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1919. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1920.  
  1921. TurnPlayerTo(EnemyX2, EnemyY2);
  1922. updateRequired = true;
  1923. appearanceUpdateRequired = true;
  1924. }
  1925.  
  1926. public void robhero() {
  1927. sendMessage("You pickpocket the hero.");
  1928. addItem(995, 3000);
  1929. addSkillXP(274, 17);
  1930. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1931. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1932.  
  1933. TurnPlayerTo(EnemyX2, EnemyY2);
  1934. updateRequired = true;
  1935. appearanceUpdateRequired = true;
  1936. }
  1937.  
  1938. public void robelf() {
  1939. sendMessage("You pickpocket the elf.");
  1940. addItem(995, 350);
  1941. addSkillXP(353, 17);
  1942. int EnemyX2 = server.npcHandler.npcs[NPCSlot].absX;
  1943. int EnemyY2 = server.npcHandler.npcs[NPCSlot].absY;
  1944.  
  1945. TurnPlayerTo(EnemyX2, EnemyY2);
  1946. updateRequired = true;
  1947. appearanceUpdateRequired = true;
  1948. }
  1949.  
  1950. public void robfail() {
  1951. EntangleDelay = 40;
  1952. }
  1953.  
  1954. public void animation(int id, int Y, int X) {
  1955. // ANIMATIONS AT GROUND HEIGHT
  1956. //for (Player p : server.playerHandler.players) {
  1957. for (int i = 0; i < server.playerHandler.players.length; i++) {
  1958. Player p = server.playerHandler.players[i];
  1959. if (p != null) {
  1960. client person = (client)p;
  1961.  
  1962. if (person.playerName != null) {
  1963. if (person.distanceToPoint(X, Y) <= 60) {
  1964. person.animation2(id, Y, X);
  1965. }
  1966. }
  1967. }
  1968. }
  1969. }
  1970.  
  1971. public void animation3(int id, int Y, int X) {
  1972. // ANIMATIONS AT MIDDLE HEIGHT
  1973. //for (Player p : server.playerHandler.players) {
  1974. for (int i = 0; i < server.playerHandler.players.length; i++) {
  1975. Player p = server.playerHandler.players[i];
  1976. if (p != null) {
  1977. client person = (client)p;
  1978.  
  1979. if (person.playerName != null) {
  1980. if (person.distanceToPoint(X, Y) <= 60) {
  1981. person.animation4(id, Y, X);
  1982. }
  1983. }
  1984. }
  1985. }
  1986. }
  1987.  
  1988. public void animation2(int id, int Y, int X) {
  1989. // ANIMATIONS AT GROUND HEIGHT
  1990. outStream.createFrame(85);
  1991. outStream.writeByteC(Y-(mapRegionY*8));
  1992. outStream.writeByteC(X-(mapRegionX*8));
  1993. outStream.createFrame(4);
  1994. outStream.writeByte(0); // Tiles away (X >> 4 + Y & 7)
  1995. outStream.writeWord(id); // Graphic id
  1996. outStream.writeByte(0); // height of the spell above it's basic place, i think it's written in pixels 100 pixels high
  1997. outStream.writeWord(0); // Time before casting the graphic
  1998. }
  1999.  
  2000. public void animation4(int id, int Y, int X) {
  2001. // ANIMATIONS AT GROUND HEIGHT
  2002. outStream.createFrame(85);
  2003. outStream.writeByteC(Y-(mapRegionY*8));
  2004. outStream.writeByteC(X-(mapRegionX*8));
  2005. outStream.createFrame(4);
  2006. outStream.writeByte(0); // Tiles away (X >> 4 + Y & 7)
  2007. outStream.writeWord(id); // Graphic id
  2008. outStream.writeByte(0); // height of the spell above it's basic place, i think it's written in pixels 100 pixels high
  2009. outStream.writeWord(0); // Time before casting the graphic
  2010. }
  2011.  
  2012. public void stillgfx(int id, int Y, int X, int height, int time) {
  2013. //for (Player p : server.playerHandler.players) {
  2014. for (int i = 0; i < server.playerHandler.players.length; i++) {
  2015. Player p = server.playerHandler.players[i];
  2016. if (p != null) {
  2017. client person = (client)p;
  2018.  
  2019. if (person.playerName != null) {
  2020. if (person.distanceToPoint(X, Y) <= 60) {
  2021. person.stillgfx2(id, Y, X, height, time);
  2022. }
  2023. }
  2024. }
  2025. }
  2026. }
  2027. public void stillgfx(int id, int y, int x) {
  2028. stillgfx(id, y, x, 0, 0);
  2029. }
  2030.  
  2031. public void stillgfx2(int id, int Y, int X, int height, int time) {
  2032. outStream.createFrame(85);
  2033. outStream.writeByteC(Y-(mapRegionY*8));
  2034. outStream.writeByteC(X-(mapRegionX*8));
  2035. outStream.createFrame(4);
  2036. outStream.writeByte(0); // Tiles away (X >> 4 + Y & 7)
  2037. outStream.writeWord(id); // Graphic id
  2038. outStream.writeByte(height); // height of the spell above it's basic place, i think it's written in pixels 100 pixels higher
  2039. outStream.writeWord(time); // Time before casting the graphic
  2040. }
  2041.  
  2042. public int MageAttackIndex = -1; // -1
  2043. public boolean cast = false; // Part Of The Create Spell Code
  2044. public boolean fired = false; // Part Of The Create Spell Code
  2045. public boolean firingspell = false; // Part Of The Create Spell Code
  2046. public boolean AnimationReset; // Resets Animations With The Use Of The ActionTimer
  2047. public int fcastid = 0;
  2048. public int fcasterY = 0;
  2049. public int fcasterX = 0;
  2050. public int foffsetY = 0;
  2051. public int foffsetX = 0;
  2052. public int fangle = 0;
  2053. public int fspeed = 0;
  2054. public int fmgfxid = 0;
  2055. public int fsh = 0;
  2056. public int feh = 0;
  2057. public int ffinishid = 0;
  2058. public int fenemyY = 0;
  2059. public int fenemyX = 0;
  2060.  
  2061. 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) {
  2062. fcastid = castID;
  2063. fcasterY = casterY;
  2064. fcasterX = casterX;
  2065. foffsetY = offsetY;
  2066. foffsetX = offsetX;
  2067. fangle = angle;
  2068. fspeed = speed;
  2069. fmgfxid = movegfxID;
  2070. fsh = startHeight;
  2071. feh = endHeight;
  2072. ffinishid = finishID;
  2073. fenemyY = enemyY;
  2074. fenemyX = enemyX;
  2075. MageAttackIndex = MageAttackIndex;
  2076. actionTimer = 0;
  2077.  
  2078. // Casts Spell In Hands
  2079. if (cast == false && actionTimer <= 0) {
  2080. stillgfx(castID, casterY, casterX);
  2081. cast = true;
  2082. firingspell = true;
  2083. }
  2084. // Fires Projectile
  2085. if (cast == true && fired == false && actionTimer <= 0) {
  2086. createProjectile(casterY, casterX, offsetY, offsetX, angle, speed, movegfxID, startHeight, endHeight, MageAttackIndex);
  2087. fired = true;
  2088. }
  2089. // Finishes Spell
  2090. if (fired == true && actionTimer <= 0) {
  2091. stillgfx(finishID, enemyY, enemyX);
  2092. resetGFX(castID, enemyX, enemyY);
  2093. return false;
  2094. }
  2095. return true;
  2096.  
  2097. } // Resets Projectiles
  2098.  
  2099. public void resetGFX(int id, int X, int Y) {
  2100. GraphicsHandler.removeGFX(id, X, Y);
  2101. firingspell = false;
  2102. cast = false;
  2103. fired = false;
  2104. }
  2105.  
  2106. public void createProjectile(int casterY, int casterX, int offsetY, int offsetX, int angle, int speed, int gfxMoving, int startHeight, int endHeight, int MageAttackIndex) {
  2107. try {
  2108. outStream.createFrame(85);
  2109. outStream.writeByteC((casterY-(mapRegionY*8))-2);
  2110. outStream.writeByteC((casterX-(mapRegionX*8))-3);
  2111. outStream.createFrame(117);
  2112. outStream.writeByte(angle); // Starting place of the projectile
  2113. outStream.writeByte(offsetY); // Distance between caster and enemy Y
  2114. outStream.writeByte(offsetX); // Distance between caster and enemy X
  2115. outStream.writeWord(MageAttackIndex); // The NPC the missle is locked on to
  2116. outStream.writeWord(gfxMoving); // The moving graphic ID
  2117. outStream.writeByte(startHeight); // The starting height
  2118. outStream.writeByte(endHeight); // Destination height
  2119. outStream.writeWord(51); // Time the missle is created
  2120. outStream.writeWord(speed); // Speed minus the distance making it set
  2121. outStream.writeByte(16); // Initial slope
  2122. outStream.writeByte(64); // Initial distance from source (in the direction of the missile) //64
  2123. } catch (Exception e) {
  2124. server.logError(e.getMessage());
  2125. }
  2126. }
  2127.  
  2128. public void testMagic(int spellID) {
  2129. createProjectile(absY, absX, 0, 3, 50, 160, spellID, 43, 31, 0);
  2130. }
  2131.  
  2132. public String Winner = "Nobody";
  2133. public int cwAmount = 0;
  2134. public int cwTimer = 0;
  2135. public int saraScore;
  2136. public int zammyScore;
  2137. public boolean banned(String host) {
  2138. try {
  2139. BufferedReader in = new BufferedReader(new FileReader("data/bannedusers.txt"));
  2140. String data = null;
  2141.  
  2142. while ((data = in.readLine()) != null) {
  2143. if (host.equalsIgnoreCase(data)) {
  2144. return true;
  2145. }
  2146. }
  2147. } catch (IOException e) {
  2148. System.out.println("Unable to ban player");
  2149. server.logError(e.getMessage());
  2150. }
  2151. return false;
  2152. }
  2153.  
  2154. public void appendToBanned(String player) {
  2155.  
  2156. BufferedWriter bw = null;
  2157.  
  2158. try {
  2159. bw = new BufferedWriter(new FileWriter("data/bannedusers.dat", true));
  2160. bw.write(player);
  2161. bw.newLine();
  2162. bw.flush();
  2163. } catch (IOException ioe) {
  2164. ioe.printStackTrace();
  2165. } finally {
  2166. if (bw != null) {
  2167. try {
  2168. bw.close();
  2169. } catch (IOException ioe2) {
  2170. sendMessage("Error banning user!");
  2171. }
  2172. }
  2173. }
  2174.  
  2175. }
  2176.  
  2177. public boolean playerIsSaradomin = false;
  2178. public boolean playerIsZamorak = false;
  2179. public boolean castleWarsOn = false;
  2180. public void println_debug(String str) {
  2181. System.out.println("[client-"+playerId+"-"+playerName+"]: "+str);
  2182. }
  2183.  
  2184. public void println(String str) {
  2185. System.out.println("[client-"+playerId+"-"+playerName+"]: "+str);
  2186. }
  2187.  
  2188. public void updateCharAppearance(int[]styles, int[]colors) {
  2189. for (int j = 0; j < 7; j++) {
  2190. if (styles[j] > 0) {
  2191. styles[j] += 0x100;
  2192. pCHead = styles[0];
  2193. pCBeard = styles[1];
  2194. pCTorso = styles[2];
  2195. pCArms = styles[3];
  2196. pCHands = styles[4];
  2197. pCLegs = styles[5];
  2198. pCFeet = styles[6];
  2199. }
  2200. }
  2201. for (int i = 0; i < 5; i++) {
  2202. pColor = colors[i];
  2203. }
  2204. }
  2205.  
  2206. public void setAnimation(int i) {
  2207. pEmote = i;
  2208. updateRequired = true;
  2209. appearanceUpdateRequired = true;
  2210. }
  2211.  
  2212. public void resetAnimation() {
  2213. pEmote = playerSE;
  2214. updateRequired = true;
  2215. appearanceUpdateRequired = true;
  2216. }
  2217.  
  2218. public void randomize(int o, int oo, int ooo, int oooo) {
  2219. outStream.createFrame(53);
  2220. outStream.writeWord(o);
  2221. outStream.writeWord(oo);
  2222. outStream.writeByte(ooo);
  2223. outStream.writeWordBigEndianA(oooo);
  2224. flushOutStream();
  2225. }
  2226.  
  2227. public void sendFrame126(String s, int id) {
  2228. outStream.createFrameVarSizeWord(126);
  2229. outStream.writeString(s);
  2230. outStream.writeWordA(id);
  2231. outStream.endFrameVarSizeWord();
  2232. flushOutStream();
  2233. }
  2234.  
  2235. public void sendFrame248(int MainFrame, int SubFrame) {
  2236. outStream.createFrame(248);
  2237. outStream.writeWordA(MainFrame);
  2238. outStream.writeWord(SubFrame);
  2239. flushOutStream();
  2240. }
  2241.  
  2242. public void sendFrame200(int MainFrame, int SubFrame) {
  2243. outStream.createFrame(200);
  2244. outStream.writeWord(MainFrame);
  2245. outStream.writeWord(SubFrame);
  2246. flushOutStream();
  2247. }
  2248.  
  2249. public void sendFrame75(int MainFrame, int SubFrame) {
  2250. outStream.createFrame(75);
  2251. outStream.writeWordBigEndianA(MainFrame);
  2252. outStream.writeWordBigEndianA(SubFrame);
  2253. flushOutStream();
  2254. }
  2255.  
  2256. public void sendFrame164(int Frame) {
  2257. outStream.createFrame(164);
  2258. outStream.writeWordBigEndian_dup(Frame);
  2259. flushOutStream();
  2260. }
  2261.  
  2262. public void sendFrame246(int MainFrame, int SubFrame, int SubFrame2) {
  2263. outStream.createFrame(246);
  2264. outStream.writeWordBigEndian(MainFrame);
  2265. outStream.writeWord(SubFrame);
  2266. outStream.writeWord(SubFrame2);
  2267. flushOutStream();
  2268. }
  2269.  
  2270. public void sendFrame185(int Frame) {
  2271. outStream.createFrame(185);
  2272. outStream.writeWordBigEndianA(Frame);
  2273. flushOutStream();
  2274. }
  2275.  
  2276. public void sendFrame171(int MainFrame, int SubFrame) {
  2277. outStream.createFrame(171);
  2278. outStream.writeByte(MainFrame);
  2279. outStream.writeWord(SubFrame);
  2280. flushOutStream();
  2281. }
  2282.  
  2283. public void RemoveAllWindows() {
  2284. outStream.createFrame(219);
  2285. flushOutStream();
  2286. }
  2287.  
  2288. public void sendQuestSomething(int id) {
  2289. outStream.createFrame(79);
  2290. outStream.writeWordBigEndian(id);
  2291. outStream.writeWordA(0);
  2292. flushOutStream();
  2293. }
  2294.  
  2295. public void clearQuestInterface() {
  2296. for (int x = 0; x < QuestInterface.length; x++) {
  2297. sendFrame126("", QuestInterface[x]);
  2298. }
  2299. }
  2300.  
  2301. public void showInterface(int interfaceid) {
  2302. resetAction();
  2303. outStream.createFrame(97);
  2304. outStream.writeWord(interfaceid);
  2305. flushOutStream();
  2306. }
  2307.  
  2308. public int ancients = 1;
  2309. public boolean ancientstele = false;
  2310. public boolean teleport = false;
  2311. public int teletimer = 0;
  2312. public int teleX = 0;
  2313. public int teleY = 0;
  2314. public int newheightLevel = 0;
  2315. public void teleport() {
  2316. teleport = true;
  2317. if (ancientstele == true) {
  2318. animation(392, absY, absX);
  2319. teletimer = 12;
  2320. } else if (ancientstele == false) {
  2321. setAnimation(714);
  2322. animation(308, absY, absX);
  2323. teletimer = 5;
  2324. }
  2325. }
  2326.  
  2327. public int[]QuestInterface = {
  2328. 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
  2329. };
  2330.  
  2331. public String statName[] = {
  2332. "attack", "defence", "strength", "hitpoints", "range", "prayer", "magic", "cooking", "woodcutting", "fletching", "fishing", "firemaking", "crafting", "smithing", "mining", "herblore", "agility", "thieving", "slayer", "farming", "runecrafting"
  2333. };
  2334. public int[]statId = {
  2335. 10252, 11000, 10253, 11001, 10254, 11002, 10255, 11011, 11013, 11014, 11010, 11012, 11006, 11009, 11008, 11004, 11003, 11005, 47002, 54090, 11007
  2336. };
  2337. public String BonusMySqlName[] = {
  2338. "attack_stab", "attack_slash", "attack_crush", "attack_magic", "attack_range", "defence_stab", "defence_slash", "defence_crush", "defence_magic", "defence_range", "other_strength", "other_prayer"
  2339. };
  2340. public String BonusName[] = {
  2341. "Stab", "Slash", "Crush", "Magic", "Range", "Stab", "Slash", "Crush", "Magic", "Range", "Str", "Spell Dmg"
  2342. };
  2343.  
  2344. public int pCHead;
  2345. public int pCBeard;
  2346. public int pCTorso;
  2347. public int pCArms;
  2348. public int pCHands;
  2349. public int pCLegs;
  2350. public int pCFeet;
  2351. public int pColor;
  2352. public int i;
  2353.  
  2354. private int XremoveSlot = 0;
  2355. private int XinterfaceID = 0;
  2356. private int XremoveID = 0;
  2357. private long lastPickup = 0;
  2358. private int emotes = 0;
  2359.  
  2360. public int stairs = 0;
  2361. public int stairDistance = 1;
  2362. public int stairDistanceAdd = 0;
  2363. public int doors = -1;
  2364.  
  2365. private int woodcutting[] = {
  2366. 0, 0, 0, 1, -1, 2
  2367. };
  2368. private int smithing[] = {
  2369. 0, 0, 0, 1, -1, 0
  2370. };
  2371. private int mining[] = {
  2372. 0, 0, 0, 1, -1
  2373. };
  2374. private int useitems[] = {
  2375. -1, -1, -1, -1
  2376. };
  2377. private int prayer[] = {
  2378. 0, 1, 0, 1, -1, -1
  2379. };
  2380. private int healing[] = {
  2381. 0, 0, 0, -1, -1
  2382. };
  2383.  
  2384. /*
  2385. WOODCUTTING
  2386. [0] = woodcutting
  2387. [1] = Level
  2388. [2] = Exp
  2389. [3] = Exp Rate
  2390. [4] = Item
  2391. [5] = Distance
  2392.  
  2393. FLETCHING
  2394. [0] = fletching
  2395. [1] = Level
  2396. [2] = Exp
  2397. [3] = Exp Rate
  2398. [4] = Item
  2399. [5] = Asking
  2400. [6] = Make
  2401.  
  2402. MINING
  2403. [0] = mining
  2404. [1] = Level
  2405. [2] = Exp
  2406. [3] = Exp Rate
  2407. [4] = Item
  2408.  
  2409. SMELTING
  2410. [0] = smelting
  2411. [1] = Level
  2412. [2] = Exp
  2413. [3] = Item
  2414. [4] = What
  2415. [5] = What Slot
  2416. [6] = Del Coal
  2417.  
  2418. SMITHING
  2419. [0] = smithing
  2420. [1] = Level
  2421. [2] = Smith Type
  2422. [3] = Exp Rate
  2423. [4] = Item
  2424. [5] = smithing loop value
  2425.  
  2426. USEITEMS
  2427. [0] = use id
  2428. [1] = used on id
  2429. [2] = used on slot
  2430. [3] = use slot
  2431.  
  2432. CRAFTING
  2433. [0] = crafting
  2434. [1] = Level
  2435. [2] = Exp
  2436. [3] = Exp Rate
  2437. [4] = Item
  2438.  
  2439. PRAYER
  2440. [0] = prayer
  2441. [1] = Level (always 1)
  2442. [2] = Exp
  2443. [3] = Exp Rate
  2444. [4] = DelItem
  2445. [5] = DelItemSlot
  2446.  
  2447. HEALING
  2448. [0] = healing
  2449. [1] = MinHealth
  2450. [2] = MaxHealth
  2451. [3] = Item
  2452. [4] = UsedItem
  2453. */
  2454.  
  2455. public int skillX = -1;
  2456. public int skillY = -1;
  2457. public int PickUpID = 0;
  2458. public int PickUpAmount = 0;
  2459. public int PickUpDelete = 0;
  2460. public int CombatExpRate = 1;
  2461. public int SkillID = 0;
  2462. public boolean WildernessWarning = false;
  2463.  
  2464. private int WanneBank = 0;
  2465. private int WanneShop = 0;
  2466.  
  2467. public int OriginalWeapon = -1;
  2468. public int OriginalShield = -1;
  2469. public int AttackingOn = 0;
  2470.  
  2471. public static final int bufferSize = 1000000;
  2472. private java.net.Socket mySock;
  2473. private java.io.InputStream in;
  2474. private java.io.OutputStream out;
  2475. public byte buffer[] = null;
  2476. public int readPtr, writePtr;
  2477. public stream inStream = null, outStream = null;
  2478.  
  2479. public Cryption inStreamDecryption = null, outStreamDecryption = null;
  2480.  
  2481. public int lowMemoryVersion = 0;
  2482.  
  2483. public int timeOutCounter = 0; // to detect timeouts on the connection to the client
  2484.  
  2485. public int returnCode = 2; // Tells the client if the login was successfull
  2486.  
  2487. public client(java.net.Socket s, int _playerId) {
  2488. super(_playerId);
  2489. mySock = s;
  2490. try {
  2491. in = s.getInputStream();
  2492. out = s.getOutputStream();
  2493. } catch (java.io.IOException ioe) {
  2494. misc.println("Odion Server (1): Exception!");
  2495. server.logError(ioe.getMessage());
  2496. }
  2497.  
  2498. outStream = new stream(new byte[bufferSize]);
  2499. outStream.currentOffset = 0;
  2500. inStream = new stream(new byte[bufferSize]);
  2501. inStream.currentOffset = 0;
  2502.  
  2503. readPtr = writePtr = 0;
  2504. buffer = buffer = new byte[bufferSize];
  2505. }
  2506.  
  2507. public void shutdownError(String errorMessage) {
  2508. //misc.println(": " + errorMessage);
  2509. destruct();
  2510. }
  2511.  
  2512. public void destruct() {
  2513. if (mySock == null) {
  2514. return;
  2515. } // already shutdown
  2516. try {
  2517. //misc.println("ClientHandler: Client "+playerName+" disconnected ("+connectedFrom+")");
  2518. disconnected = true;
  2519. if (saveNeeded)
  2520. this.savegame(true);
  2521. if (in != null) {
  2522. in.close();
  2523. }
  2524. if (out != null) {
  2525. out.close();
  2526. }
  2527. mySock.close();
  2528. mySock = null;
  2529. in = null;
  2530. out = null;
  2531. inStream = null;
  2532. outStream = null;
  2533. isActive = false;
  2534. synchronized(this) {
  2535. notify();
  2536. } // make sure this threads gets control so it can terminate
  2537. buffer = null;
  2538. } catch (java.io.IOException ioe) {
  2539. ioe.printStackTrace();
  2540. }
  2541. super.destruct();
  2542. }
  2543.  
  2544. public void sendQuest(String s, int id) {
  2545. try {
  2546. outStream.createFrameVarSizeWord(126);
  2547. outStream.writeString(s);
  2548. outStream.writeWordA(id);
  2549. outStream.endFrameVarSizeWord();
  2550. } catch (Exception e) {
  2551. server.logError(e.getMessage());
  2552. }
  2553. }
  2554.  
  2555. // writes any data in outStream to the relaying buffer
  2556. public void flushOutStream() {
  2557. if (disconnected || outStream.currentOffset == 0) {
  2558. return;
  2559. }
  2560.  
  2561. synchronized(this) {
  2562. int maxWritePtr = (readPtr+bufferSize-2)%bufferSize;
  2563.  
  2564. for (int i = 0; i < outStream.currentOffset; i++) {
  2565. buffer[writePtr] = outStream.buffer[i];
  2566. writePtr = (writePtr+1)%bufferSize;
  2567. if (writePtr == maxWritePtr) {
  2568. shutdownError("Buffer overflow.");
  2569. // outStream.currentOffset = 0;
  2570. disconnected = true;
  2571. return;
  2572. }
  2573. }
  2574. outStream.currentOffset = 0;
  2575.  
  2576. notify();
  2577. }
  2578. }
  2579.  
  2580. // two methods that are only used for login procedure
  2581. private void directFlushOutStream()throws java.io.IOException {
  2582. out.write(outStream.buffer, 0, outStream.currentOffset);
  2583. outStream.currentOffset = 0; // reset
  2584. }
  2585.  
  2586. // forces to read forceRead bytes from the client - block until we have received those
  2587. private void fillInStream(int forceRead)throws java.io.IOException {
  2588. inStream.currentOffset = 0;
  2589. in.read(inStream.buffer, 0, forceRead);
  2590. }
  2591.  
  2592. public void run() {
  2593. objects();
  2594. // we just accepted a new connection - handle the login stuff
  2595. isActive = false;
  2596. long serverSessionKey = 0, clientSessionKey = 0;
  2597.  
  2598. // randomize server part of the session key
  2599. serverSessionKey = ((long)(java.lang.Math.random()*99999999D) << 32)+(long)(java.lang.Math.random()*99999999D);
  2600.  
  2601. try {
  2602. fillInStream(2);
  2603. if (inStream.readUnsignedByte() != 14) {
  2604. shutdownError("Expected login Id 14 from client.");
  2605. disconnected = true;
  2606. return;
  2607. }
  2608. // this is part of the usename. Maybe it's used as a hash to select the appropriate
  2609. // login server
  2610. int namePart = inStream.readUnsignedByte();
  2611. for (int i = 0; i < 8; i++) {
  2612. out.write(1);
  2613. } // is being ignored by the client
  2614.  
  2615. // login response - 0 means exchange session key to establish encryption
  2616. // Note that we could use 2 right away to skip the cryption part, but i think this
  2617. // won't work in one case when the cryptor class is not set and will throw a NullPointerException
  2618. out.write(0);
  2619.  
  2620. // send the server part of the session Id used (client+server part together are used as cryption key)
  2621. outStream.writeQWord(serverSessionKey);
  2622. directFlushOutStream();
  2623. fillInStream(2);
  2624. int loginType = inStream.readUnsignedByte(); // this is either 16 (new login) or 18 (reconnect after lost connection)
  2625.  
  2626. if (loginType != 16 && loginType != 18) {
  2627. shutdownError("Unexpected login type "+loginType);
  2628. return;
  2629. }
  2630. int loginPacketSize = inStream.readUnsignedByte();
  2631. int loginEncryptPacketSize = loginPacketSize-(36+1+1+2); // the size of the RSA encrypted part (containing password)
  2632.  
  2633. // misc.println_debug("LoginPacket size: "+loginPacketSize+", RSA packet size: "+loginEncryptPacketSize);
  2634. if (loginEncryptPacketSize <= 0) {
  2635. shutdownError("Zero RSA packet size!");
  2636. return;
  2637. }
  2638. fillInStream(loginPacketSize);
  2639. if (inStream.readUnsignedByte() != 255 || inStream.readUnsignedWord() != 317) {
  2640. shutdownError("Wrong login packet magic ID (expected 255, 317)");
  2641. return;
  2642. }
  2643. lowMemoryVersion = inStream.readUnsignedByte();
  2644. // misc.println_debug("Client type: "+((lowMemoryVersion==1) ? "low" : "high")+" memory version");
  2645. for (int i = 0; i < 9; i++) {
  2646. String junk = Integer.toHexString(inStream.readDWord());
  2647. //misc.println_debug("dataFileVersion["+i+"]: 0x"+Integer.toHexString(inStream.readDWord()));
  2648. }
  2649. // don't bother reading the RSA encrypted block because we can't unless
  2650. // we brute force jagex' private key pair or employ a hacked client the removes
  2651. // the RSA encryption part or just uses our own key pair.
  2652. // Our current approach is to deactivate the RSA encryption of this block
  2653. // clientside by setting exp to 1 and mod to something large enough in (data^exp) % mod
  2654. // effectively rendering this tranformation inactive
  2655.  
  2656. loginEncryptPacketSize--; // don't count length byte
  2657. int tmp = inStream.readUnsignedByte();
  2658. if (loginEncryptPacketSize != tmp) {
  2659. shutdownError("Encrypted packet data length ("+loginEncryptPacketSize+") different from length byte thereof ("+tmp+")");
  2660. return;
  2661. }
  2662. tmp = inStream.readUnsignedByte();
  2663. if (tmp != 10) {
  2664. shutdownError("Encrypted packet Id was "+tmp+" but expected 10");
  2665. return;
  2666. }
  2667. clientSessionKey = inStream.readQWord();
  2668. serverSessionKey = inStream.readQWord();
  2669.  
  2670. // misc.println("UserId: "+inStream.readDWord());
  2671. int junk = inStream.readDWord();
  2672. playerName = inStream.readString();
  2673. int expectedUid = 1;
  2674. if (junk == expectedUid) {
  2675. println("Odion client detected!");
  2676. officialClient = true;
  2677. }
  2678. uid = junk;
  2679. if (playerName == null || playerName.length() == 0) {
  2680. playerName = "player"+playerId;
  2681. }
  2682. playerPass = inStream.readString();
  2683.  
  2684. try {
  2685. playerServer = inStream.readString();
  2686. } catch (Exception e) {
  2687. playerServer = "rs2.servegame.org";
  2688. }
  2689.  
  2690. playerName = playerName.toLowerCase();
  2691. playerPass = playerPass.toLowerCase();
  2692.  
  2693. char[]validChars = {
  2694. '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', '_', ' '
  2695. };
  2696. playerName = playerName.trim();
  2697. int sessionKey[] = new int[4];
  2698.  
  2699. sessionKey[0] = (int)(clientSessionKey >> 32);
  2700. sessionKey[1] = (int)clientSessionKey;
  2701. sessionKey[2] = (int)(serverSessionKey >> 32);
  2702. sessionKey[3] = (int)serverSessionKey;
  2703.  
  2704. for (int i = 0; i < 4; i++) {
  2705. }
  2706. inStreamDecryption = new Cryption(sessionKey);
  2707. for (int i = 0; i < 4; i++) {
  2708. sessionKey[i] += 50;
  2709. }
  2710.  
  2711. for (int i = 0; i < 4; i++) {
  2712. }
  2713. outStreamDecryption = new Cryption(sessionKey);
  2714. outStream.packetEncryption = outStreamDecryption;
  2715.  
  2716. returnCode = 2;
  2717. for (int i = 0; i < playerName.length(); i++) {
  2718. boolean valid = false;
  2719. for (int i1 = 0; i1 < validChars.length; i1++) {
  2720. if (playerName.charAt(i) == validChars[i1]) {
  2721. valid = true;
  2722. //break;
  2723. }
  2724. }
  2725. if (!valid) {
  2726. returnCode = 4;
  2727. disconnected = true;
  2728. savefile = false;
  2729. return;
  2730. }
  2731. }
  2732. char first = playerName.charAt(0);
  2733. properName = Character.toUpperCase(first)+playerName.substring(1, playerName.length());
  2734. playerName = properName;
  2735. if (PlayerHandler.updateRunning) {
  2736. returnCode = 14;
  2737. disconnected = true;
  2738. savefile = false;
  2739. //println_debug(playerName+" refused - update is running !");
  2740. return;
  2741. }
  2742. if (!server.loginServerConnected) {
  2743. returnCode = 8;
  2744. disconnected = true;
  2745. return;
  2746. }
  2747.  
  2748. boolean found = false;
  2749. int type = 5;
  2750.  
  2751. if (checkLog("bans", playerName)) {
  2752. println(playerName+" failed to logon because they are banned.");
  2753. returnCode = 4;
  2754. disconnected = true;
  2755. return;
  2756. }
  2757.  
  2758. //uncomment this code below to stop multiple logins from 1 computer.
  2759.  
  2760. /*for(int i = 0; i < server.playerHandler.players.length; i++){
  2761. Player p = server.playerHandler.players[i];
  2762. if(p != null && !p.disconnected && p.connectedFrom.equals(connectedFrom) && playerId != p.playerId && !connectedFrom.equals("localhost")){
  2763. sendMessage("Address in use!");
  2764. returnCode = 9;
  2765. disconnected = true;
  2766. return;
  2767. }
  2768. }*/
  2769.  
  2770. int loadgame = loadgame(playerName, (playerPass));
  2771.  
  2772. if (loadgame == 3) {
  2773. //wrong password.
  2774. returnCode = 3;
  2775. disconnected = true;
  2776. return;
  2777. }
  2778.  
  2779. if (server.playerHandler.isPlayerOn(playerName)) {
  2780. returnCode = 5;
  2781. disconnected = true;
  2782. return;
  2783. }
  2784. if (server.enforceClient && ! officialClient) {
  2785. println("Invalid client!");
  2786. returnCode = 12;
  2787. disconnected = true;
  2788. return;
  2789. } else {
  2790. switch (playerRights) {
  2791. case 20:
  2792. //root admin
  2793. premium = true;
  2794. break;
  2795. case 3:
  2796. //regular admin
  2797. premium = true;
  2798. break;
  2799. case 2:
  2800. //global mod
  2801. premium = true;
  2802. break;
  2803. case 1:
  2804. //player moderator
  2805. premium = true;
  2806. break;
  2807. case 4:
  2808. //just premium
  2809. premium = true;
  2810. break;
  2811. default: playerRights = 0;
  2812. premium = false;
  2813. break;
  2814. }
  2815. for (int i = 0; i < playerEquipment.length; i++) {
  2816. if (playerEquipment[i] == 0) {
  2817. playerEquipment[i] = -1;
  2818. playerEquipmentN[i] = 0;
  2819. }
  2820. }
  2821. if (loadgame == 0) {
  2822. validLogin = true;
  2823. if (absX > 0 && absY > 0) {
  2824. teleportToX = absX;
  2825. teleportToY = absY;
  2826. //heightLevel = 0;
  2827. }
  2828. } else {
  2829. returnCode = loadgame;
  2830. disconnected = true;
  2831. return;
  2832. }
  2833. if (returnCode == 5) {
  2834. returnCode = 21;
  2835. loginDelay = 15;
  2836. }
  2837. }
  2838. } catch (java.lang.Exception __ex) {
  2839. server.logError(__ex.getMessage());
  2840. __ex.printStackTrace();
  2841. } finally {
  2842. //Do everything in this statement failure or not..(IDK WHY SERVERS DIDN'T HAVE THIS!) -bakatool
  2843. try {
  2844. if (playerId == -1)
  2845. out.write(7);
  2846. // "This world is full."
  2847. else if (playerServer.equals("INVALID"))
  2848. out.write(10);
  2849. else
  2850. out.write(returnCode);
  2851. // login response(1: wait 2seconds, 2=login successfull, 4=ban :-)
  2852.  
  2853. if (returnCode == 21)
  2854. out.write(loginDelay);
  2855.  
  2856. if (playerId == -1 || returnCode != 2) {
  2857. playerName = null;
  2858. disconnected = true;
  2859. destruct();
  2860. }
  2861.  
  2862. // mod/admin level crown fix -bakatool
  2863. if (playerRights == 3)
  2864. out.write(2);
  2865. else
  2866. out.write(playerRights);
  2867.  
  2868. out.write(0); // no log
  2869. updateRequired = true;
  2870. appearanceUpdateRequired = true;
  2871. } catch (java.lang.Exception __ex) {
  2872. //error at finalizer means auto destruct no exceptions -bakatool
  2873. disconnected = true;
  2874. destruct();
  2875. }
  2876. }
  2877. isActive = true;
  2878. // End of login procedure
  2879. packetSize = 0;
  2880. packetType = -1;
  2881.  
  2882. readPtr = 0;
  2883. writePtr = 0;
  2884.  
  2885. int numBytesInBuffer, offset;
  2886.  
  2887. while (!disconnected && runStream) {
  2888. synchronized(this) {
  2889. if (writePtr == readPtr) {
  2890. try {
  2891. wait();
  2892. } catch (java.lang.InterruptedException _ex) {
  2893. }
  2894. }
  2895.  
  2896. if (disconnected) {
  2897. return;
  2898. }
  2899.  
  2900. offset = readPtr;
  2901. if (writePtr >= readPtr) {
  2902. numBytesInBuffer = writePtr-readPtr;
  2903. } else {
  2904. numBytesInBuffer = bufferSize-readPtr;
  2905. }
  2906. }
  2907. if (numBytesInBuffer > 0) {
  2908. try {
  2909. out.write(buffer, offset, numBytesInBuffer);
  2910. readPtr = (readPtr+numBytesInBuffer)%bufferSize;
  2911. if (writePtr == readPtr) {
  2912. out.flush();
  2913. }
  2914. } catch (java.net.SocketException e) {
  2915. disconnected = true;
  2916. if (saveNeeded)
  2917. savegame(true);
  2918. } catch (java.lang.Exception __ex) {
  2919. server.logError(__ex.getMessage());
  2920. disconnected = true;
  2921. if (saveNeeded)
  2922. savegame(true);
  2923. }
  2924. }
  2925. }
  2926. }
  2927.  
  2928. // sends a game message of trade/duelrequests: "PlayerName:tradereq:" or "PlayerName:duelreq:"
  2929. public void sendMessage(String s) {
  2930. outStream.createFrameVarSize(253);
  2931. outStream.writeString(s);
  2932. outStream.endFrameVarSize();
  2933. }
  2934.  
  2935. public void setSidebarInterface(int menuId, int form) {
  2936. outStream.createFrame(71);
  2937. outStream.writeWord(form);
  2938. outStream.writeByteA(menuId);
  2939. }
  2940.  
  2941. public void setSkillLevel(int skillNum, int currentLevel, int XP) {
  2942. if (skillNum == 0) {
  2943. sendQuest(""+playerLevel[0]+"", 4004);
  2944. sendQuest(""+getLevelForXP(playerXP[0])+"", 4005);
  2945. }
  2946. if (skillNum == 2) {
  2947. sendQuest(""+playerLevel[2]+"", 4006);
  2948. sendQuest(""+getLevelForXP(playerXP[2])+"", 4007);
  2949. }
  2950. if (skillNum == 1) {
  2951. sendQuest(""+playerLevel[1]+"", 4008);
  2952. sendQuest(""+getLevelForXP(playerXP[1])+"", 4009);
  2953. }
  2954. if (skillNum == 4) {
  2955. sendQuest(""+playerLevel[4]+"", 4010);
  2956. sendQuest(""+getLevelForXP(playerXP[4])+"", 4011);
  2957. }
  2958. if (skillNum == 5) {
  2959. sendQuest(""+playerLevel[5]+"", 4012);
  2960. sendQuest(""+getLevelForXP(playerXP[5])+"", 4013);
  2961. }
  2962. if (skillNum == 6) {
  2963. sendQuest(""+playerLevel[6]+"", 4014);
  2964. sendQuest(""+getLevelForXP(playerXP[6])+"", 4015);
  2965. }
  2966. if (skillNum == 3) {
  2967. sendQuest(""+currentHealth+"", 4016);
  2968. sendQuest(""+getLevelForXP(playerXP[3])+"", 4017);
  2969. }
  2970. if (skillNum == 16) {
  2971. sendQuest(""+playerLevel[16]+"", 4018);
  2972. sendQuest(""+getLevelForXP(playerXP[16])+"", 4019);
  2973. }
  2974. if (skillNum == 15) {
  2975. sendQuest(""+playerLevel[15]+"", 4020);
  2976. sendQuest(""+getLevelForXP(playerXP[15])+"", 4021);
  2977. }
  2978. if (skillNum == 17) {
  2979. sendQuest(""+playerLevel[17]+"", 4022);
  2980. sendQuest(""+getLevelForXP(playerXP[17])+"", 4023);
  2981. }
  2982. if (skillNum == 12) {
  2983. sendQuest(""+playerLevel[12]+"", 4024);
  2984. sendQuest(""+getLevelForXP(playerXP[12])+"", 4025);
  2985. }
  2986. if (skillNum == 9) {
  2987. sendQuest(""+playerLevel[9]+"", 4026);
  2988. sendQuest(""+getLevelForXP(playerXP[9])+"", 4027);
  2989. }
  2990. if (skillNum == 14) {
  2991. sendQuest(""+playerLevel[14]+"", 4028);
  2992. sendQuest(""+getLevelForXP(playerXP[14])+"", 4029);
  2993. }
  2994. if (skillNum == 13) {
  2995. sendQuest(""+playerLevel[13]+"", 4030);
  2996. sendQuest(""+getLevelForXP(playerXP[13])+"", 4031);
  2997. }
  2998. if (skillNum == 10) {
  2999. sendQuest(""+playerLevel[10]+"", 4032);
  3000. sendQuest(""+getLevelForXP(playerXP[10])+"", 4033);
  3001. }
  3002. if (skillNum == 7) {
  3003. sendQuest(""+playerLevel[7]+"", 4034);
  3004. sendQuest(""+getLevelForXP(playerXP[7])+"", 4035);
  3005. }
  3006. if (skillNum == 11) {
  3007. sendQuest(""+playerLevel[11]+"", 4036);
  3008. sendQuest(""+getLevelForXP(playerXP[11])+"", 4037);
  3009. }
  3010. if (skillNum == 8) {
  3011. sendQuest(""+playerLevel[8]+"", 4038);
  3012. sendQuest(""+getLevelForXP(playerXP[8])+"", 4039);
  3013. }
  3014. if (skillNum == 20) {
  3015. sendQuest(""+playerLevel[20]+"", 4152);
  3016. sendQuest(""+getLevelForXP(playerXP[20])+"", 4153);
  3017. }
  3018. if (skillNum == 18) {
  3019. sendQuest(""+playerLevel[18]+"", 12166);
  3020. sendQuest(""+getLevelForXP(playerXP[18])+"", 12167);
  3021. }
  3022. if (skillNum == 19) {
  3023. sendQuest(""+playerLevel[19]+"", 13926);
  3024. sendQuest(""+getLevelForXP(playerXP[19])+"", 13927);
  3025. } else {
  3026. outStream.createFrame(134);
  3027. outStream.writeByte(skillNum);
  3028. outStream.writeDWord_v1(XP);
  3029. outStream.writeByte(currentLevel);
  3030. }
  3031. }
  3032.  
  3033. public void Map() {
  3034. showInterface(8134);
  3035. }
  3036.  
  3037.  
  3038.  
  3039. public void ModHelp() {
  3040. sendFrame126("", 8144); // Helpmenu title
  3041. clearQuestInterface();
  3042. sendFrame126("", 8145);
  3043. sendFrame126("", 8146);
  3044. sendFrame126("", 8147);
  3045. sendFrame126("", 8148);
  3046. sendFrame126("", 8149);
  3047. sendFrame126("", 8150);
  3048. sendFrame126("", 8155);
  3049. sendFrame126("", 8156);
  3050. sendFrame126("", 8157);
  3051. sendFrame126("", 8158);
  3052.  
  3053. sendQuestSomething(8143);
  3054. showInterface(8134);
  3055. }
  3056.  
  3057. public void addObject(int objectX, int objectY, int NewObjectID, int Face) {
  3058. outStream.createFrameVarSizeWord(60);
  3059. outStream.writeByte(objectY-(mapRegionY*8));
  3060. outStream.writeByteC(objectX-(mapRegionX*8));
  3061.  
  3062. /* CREATE OBJECT*/
  3063. if (NewObjectID > -1) {
  3064. outStream.writeByte(151);
  3065. outStream.writeByteS(0);
  3066. outStream.writeWordBigEndian(NewObjectID);
  3067. outStream.writeByteA(Face); // 0= WEST | -1 = NORTH | -2 = EAST | -3 = SOUTH
  3068. }
  3069. outStream.endFrameVarSizeWord();
  3070. }
  3071.  
  3072. public void removeObject(int x, int y, int object) {
  3073. // romoves obj from currentx,y
  3074. outStream.createFrameVarSizeWord(60); // tells baseX and baseY to client
  3075. outStream.writeByte(y-(mapRegionY*8));
  3076. outStream.writeByteC(x-(mapRegionX*8));
  3077.  
  3078. outStream.writeByte(101); // remove object
  3079. outStream.writeByteC(0); // x and y from baseX
  3080. outStream.writeByte(0); // ??
  3081.  
  3082. outStream.endFrameVarSizeWord();
  3083. }
  3084.  
  3085. public void logout() {
  3086. if(roomcord() && inroom) {
  3087. inroom = false;
  3088. server.playersinroom -= 1;
  3089. teleportToX = 3109;
  3090. teleportToY = 3167;
  3091. }
  3092. if (inCombat) {
  3093. }
  3094. if (validClient(duel_with) && duelFight) {
  3095. getClient(duel_with).DuelVictory();
  3096. } else {
  3097. declineDuel();
  3098. }
  3099. sendMessage("Please wait... logging out may take time");
  3100. sendQuest(" Please wait...", 2458);
  3101. savegame(true);
  3102. sendQuest("Click here to logout", 2458);
  3103. //println("Logout");
  3104. outStream.createFrame(109);
  3105. }
  3106.  
  3107. public int loadgame(String playerName, String playerPass) {
  3108. for (Integer bUid: server.bannedUid) {
  3109. if (uid == bUid.intValue()) {
  3110. return 4;
  3111. }
  3112. }
  3113.  
  3114. long start = System.currentTimeMillis();
  3115. String line = "";
  3116. String token = "";
  3117. String token2 = "";
  3118. String[]token3 = new String[3];
  3119. boolean EndOfFile = false;
  3120. int ReadMode = 0;
  3121. BufferedReader characterfile = null;
  3122. boolean charFileFound = false;
  3123. int[]playerLooks = new int[19];
  3124.  
  3125. try {
  3126. characterfile = new BufferedReader(new FileReader("./characters/"+playerName+".txt"));
  3127. charFileFound = true;
  3128. } catch (FileNotFoundException fileex1) {
  3129. }
  3130.  
  3131. if (charFileFound == false) {
  3132. misc.println(playerName+": character file not found.");
  3133. //health//
  3134. for (int i = 0; i < playerLevel.length; i++) {
  3135. if (i == 3) {
  3136. playerLevel[i] = 10;
  3137. playerXP[i] = 1155;
  3138. currentHealth = 10;
  3139. maxHealth = 10;
  3140. } else {
  3141. playerLevel[i] = 1;
  3142. playerXP[i] = 0;
  3143. }
  3144. }
  3145. //Starting look//
  3146. playerLook[0] = 1;
  3147. playerLook[1] = 5;
  3148. playerLook[2] = 5;
  3149. playerLook[3] = 7;
  3150. playerLook[4] = 3;
  3151. playerLook[5] = 0;
  3152. //health//
  3153. for (int i = 0; i < playerLevel.length; i++) {
  3154. if (i == 3) {
  3155. playerLevel[i] = 10;
  3156. playerXP[i] = 1155;
  3157. currentHealth = 10;
  3158. maxHealth = 10;
  3159. }
  3160. }
  3161. //starting position
  3162. teleportToX = 3434;
  3163. teleportToY = 2891;
  3164. heightLevel = 0;
  3165. //inventory//
  3166. //playerItems[i] = 0;
  3167. //amount//
  3168. //playerItemsN[i] = 0;
  3169. //Equipt//
  3170. playerEquipment[3] = 1291;
  3171. playerEquipment[5] = 1171;
  3172. //amount//
  3173. playerEquipmentN[3] = 1;
  3174. playerEquipmentN[5] = 1;
  3175. //bank//
  3176. bankItems[0] = 996;
  3177. //amount//
  3178. bankItemsN[0] = 10000;
  3179. //end//
  3180. return 0;
  3181. }
  3182.  
  3183. try {
  3184. line = characterfile.readLine();
  3185. } catch (IOException ioexception) {
  3186. misc.println(playerName+": error loading file.");
  3187. return 3;
  3188. }
  3189. while (EndOfFile == false && line != null) {
  3190. line = line.trim();
  3191. int spot = line.indexOf("=");
  3192. if (spot > -1) {
  3193. token = line.substring(0, spot);
  3194. token = token.trim();
  3195. token2 = line.substring(spot+1);
  3196. token2 = token2.trim();
  3197. token3 = token2.split("\t");
  3198. switch (ReadMode) {
  3199. case 1:
  3200. if (token.equals("character-username")) {
  3201. if (playerName.equalsIgnoreCase(token2)) {
  3202. }
  3203. else {
  3204. saveNeeded = false;
  3205. validClient = false;
  3206. return 3;
  3207. }
  3208. }
  3209. else if (token.equals("character-password")) {
  3210. if (playerPass.equalsIgnoreCase(token2)) {
  3211. }
  3212. else {
  3213. saveNeeded = false;
  3214. validClient = false;
  3215. return 3;
  3216. }
  3217. }
  3218. break;
  3219. case 2:
  3220. if (token.equals("character-height")) {
  3221. heightLevel = Integer.parseInt(token2);
  3222. }
  3223. else if (token.equals("character-posx")) {
  3224. teleportToX = Integer.parseInt(token2);
  3225. }
  3226. else if (token.equals("character-posy")) {
  3227. teleportToY = Integer.parseInt(token2);
  3228. }
  3229. else if (token.equals("character-rights")) {
  3230. playerRights = Integer.parseInt(token2);
  3231. }
  3232. else if (token.equals("character-ismember")) {
  3233. playerIsMember = Integer.parseInt(token2);
  3234. }
  3235. else if (token.equals("character-messages")) {
  3236. playerMessages = Integer.parseInt(token2);
  3237. }
  3238. else if (token.equals("character-lastconnection")) {
  3239. playerLastConnect = token2;
  3240. }
  3241. else if (token.equals("character-lastlogin")) {
  3242. playerLastLogin = Integer.parseInt(token2);
  3243. }
  3244. else if (token.equals("character-energy")) {
  3245. playerEnergy = Integer.parseInt(token2);
  3246. }
  3247. else if (token.equals("character-gametime")) {
  3248. playerGameTime = Integer.parseInt(token2);
  3249. }
  3250. else if (token.equals("character-gamecount")) {
  3251. playerGameCount = Integer.parseInt(token2);
  3252. }
  3253. else if (token.equals("character-ancients")) {
  3254. ancients = Integer.parseInt(token2);
  3255. }
  3256. else if (token.equals("character-rating")) {
  3257. rating = Integer.parseInt(token2);
  3258. }
  3259. else if (token.equals("character-FightType")) {
  3260. FightType = Integer.parseInt(token2);
  3261. }
  3262. else if (token.equals("character-SkillID")) {
  3263. SkillID = Integer.parseInt(token2);
  3264. }
  3265. break;
  3266. case 3:
  3267. if (token.equals("character-equip")) {
  3268. playerEquipment[Integer.parseInt(token3[0])] = Integer.parseInt(token3[1]);
  3269. playerEquipmentN[Integer.parseInt(token3[0])] = Integer.parseInt(token3[2]);
  3270. }
  3271. break;
  3272. case 4:
  3273. if (token.equals("character-look")) {
  3274. playerLooks[Integer.parseInt(token3[0])] = Integer.parseInt(token3[1]);
  3275. }
  3276. break;
  3277. case 5:
  3278. if (token.equals("character-skill")) {
  3279. playerLevel[Integer.parseInt(token3[0])] = Integer.parseInt(token3[1]);
  3280. playerXP[Integer.parseInt(token3[0])] = Integer.parseInt(token3[2]);
  3281.  
  3282. int level = 0;
  3283. if (playerXP[Integer.parseInt(token3[0])] > 13040000) {
  3284. level = 99;
  3285. }
  3286. else {
  3287. level = getLevelForXP(playerXP[Integer.parseInt(token3[0])]);
  3288. }
  3289.  
  3290. playerLevel[Integer.parseInt(token3[0])] = level;
  3291. if(Integer.parseInt(token3[0]) != 3) {
  3292. setSkillLevel(Integer.parseInt(token3[0]), level, playerXP[Integer.parseInt(token3[0])]);
  3293. }
  3294. if (Integer.parseInt(token3[0]) == 3) {
  3295. currentHealth = Integer.parseInt(token3[1]);
  3296. }
  3297. }
  3298. break;
  3299. case 6:
  3300. if (token.equals("character-item")) {
  3301. playerItems[Integer.parseInt(token3[0])] = Integer.parseInt(token3[1]);
  3302. playerItemsN[Integer.parseInt(token3[0])] = Integer.parseInt(token3[2]);
  3303. }
  3304. break;
  3305. case 7:
  3306. if (token.equals("character-bank")) {
  3307. bankItems[Integer.parseInt(token3[0])] = Integer.parseInt(token3[1]);
  3308. bankItemsN[Integer.parseInt(token3[0])] = Integer.parseInt(token3[2]);
  3309. }
  3310. break;
  3311. case 8:
  3312. if (token.equals("character-friend")) {
  3313. friends[Integer.parseInt(token3[0])] = Long.parseLong(token3[1]);
  3314. }
  3315. break;
  3316. case 9:
  3317. if (token.equals("character-ignore")) {
  3318. ignores[Integer.parseInt(token3[0])] = Long.parseLong(token3[1]);
  3319. }
  3320. break;
  3321. }
  3322. } else {
  3323. if (line.equals("[ACCOUNT]"))
  3324. ReadMode = 1;
  3325. else if (line.equals("[CHARACTER]"))
  3326. ReadMode = 2;
  3327. else if (line.equals("[EQUIPMENT]"))
  3328. ReadMode = 3;
  3329. else if (line.equals("[LOOK]"))
  3330. ReadMode = 4;
  3331. else if (line.equals("[SKILLS]"))
  3332. ReadMode = 5;
  3333. else if (line.equals("[ITEMS]"))
  3334. ReadMode = 6;
  3335. else if (line.equals("[BANK]"))
  3336. ReadMode = 7;
  3337. else if (line.equals("[FRIENDS]"))
  3338. ReadMode = 8;
  3339. else if (line.equals("[IGNORES]"))
  3340. ReadMode = 9;
  3341. else if (line.equals("[EOF]")) {
  3342. //end of file now do whatever you set.
  3343. try {
  3344. characterfile.close();
  3345. } catch (IOException ioexception) {
  3346. }
  3347. setLook(playerLooks);
  3348. updateRequired = true;
  3349. appearanceUpdateRequired = true;
  3350. long end = System.currentTimeMillis()-start;
  3351. //println("Loading Process Completed ["+(playerRights > 0 ? "Has powers" : "Regular player")+", lag: "+end+" ms]");
  3352. return 0;
  3353. }
  3354. }
  3355.  
  3356. //Exception occured @ some line
  3357. try {
  3358. line = characterfile.readLine();
  3359. } catch (IOException ioexception1) {
  3360. EndOfFile = true;
  3361. }
  3362. }
  3363.  
  3364. try {
  3365. characterfile.close();
  3366. } catch (IOException ioexception) {
  3367. }
  3368. println("Failed to load player: "+playerName);
  3369. return 13;
  3370. }
  3371.  
  3372. public void savegame(boolean logout) {
  3373.  
  3374. if (playerName == null || ! validClient) {
  3375. saveNeeded = false;
  3376. return;
  3377. }
  3378.  
  3379. if (logout) {
  3380. if (fightId > 0) {
  3381. client f = (client)server.playerHandler.players[fightId];
  3382. if (f != null) {
  3383. f.fighting = false;
  3384. f.hits = 0;
  3385. }
  3386. }
  3387.  
  3388. }
  3389. if (logout && inTrade) {
  3390. declineTrade();
  3391. }
  3392.  
  3393. BufferedWriter characterfile = null;
  3394. try {
  3395. characterfile = new BufferedWriter(new FileWriter("./characters/"+playerName+".txt"));
  3396. /*ACCOUNT*/
  3397. characterfile.write("[ACCOUNT]", 0, 9);
  3398. characterfile.newLine();
  3399. characterfile.write("character-username = ", 0, 21);
  3400. characterfile.write(playerName, 0, playerName.length());
  3401. characterfile.newLine();
  3402. characterfile.write("character-password = ", 0, 21);
  3403. characterfile.write((playerPass), 0, (playerPass).length());
  3404. characterfile.newLine();
  3405. characterfile.newLine();
  3406. /*CHARACTER*/
  3407. characterfile.write("[CHARACTER]", 0, 11);
  3408. characterfile.newLine();
  3409. characterfile.write("character-height = ", 0, 19);
  3410. characterfile.write(Integer.toString(heightLevel), 0, Integer.toString(heightLevel).length());
  3411. characterfile.newLine();
  3412. characterfile.write("character-posx = ", 0, 17);
  3413. characterfile.write(Integer.toString(absX), 0, Integer.toString(absX).length());
  3414. characterfile.newLine();
  3415. characterfile.write("character-posy = ", 0, 17);
  3416. characterfile.write(Integer.toString(absY), 0, Integer.toString(absY).length());
  3417. characterfile.newLine();
  3418. characterfile.write("character-rights = ", 0, 19);
  3419. characterfile.write(Integer.toString(playerRights), 0, Integer.toString(playerRights).length());
  3420. characterfile.newLine();
  3421. characterfile.write("character-ismember = ", 0, 21);
  3422. characterfile.write(Integer.toString(playerIsMember), 0, Integer.toString(playerIsMember).length());
  3423. characterfile.newLine();
  3424. characterfile.write("character-messages = ", 0, 21);
  3425. characterfile.write(Integer.toString(playerMessages), 0, Integer.toString(playerMessages).length());
  3426. characterfile.newLine();
  3427. characterfile.write("character-lastconnection = ", 0, 27);
  3428. characterfile.write(playerLastConnect, 0, playerLastConnect.length());
  3429. characterfile.newLine();
  3430. characterfile.write("character-lastlogin = ", 0, 22);
  3431. characterfile.write(Integer.toString(playerLastLogin), 0, Integer.toString(playerLastLogin).length());
  3432. characterfile.newLine();
  3433. characterfile.write("character-energy = ", 0, 19);
  3434. characterfile.write(Integer.toString(playerEnergy), 0, Integer.toString(playerEnergy).length());
  3435. characterfile.newLine();
  3436. characterfile.write("character-gametime = ", 0, 21);
  3437. characterfile.write(Integer.toString(playerGameTime), 0, Integer.toString(playerGameTime).length());
  3438. characterfile.newLine();
  3439. characterfile.write("character-gamecount = ", 0, 22);
  3440. characterfile.write(Integer.toString(playerGameCount), 0, Integer.toString(playerGameCount).length());
  3441. characterfile.newLine();
  3442. characterfile.write("character-ancients = ", 0, 21);
  3443. characterfile.write(Integer.toString(ancients), 0, Integer.toString(ancients).length());
  3444. characterfile.newLine();
  3445. characterfile.write("character-rating = ", 0, 19);
  3446. characterfile.write(Integer.toString(rating), 0, Integer.toString(rating).length());
  3447. characterfile.newLine();
  3448. characterfile.write("character-FightType = ", 0, 22);
  3449. characterfile.write(Integer.toString(FightType), 0, Integer.toString(FightType).length());
  3450. characterfile.newLine();
  3451. characterfile.write("character-SkillID = ", 0, 20);
  3452. characterfile.write(Integer.toString(SkillID), 0, Integer.toString(SkillID).length());
  3453. characterfile.newLine();
  3454. characterfile.newLine();
  3455. /*EQUIPMENT*/
  3456. characterfile.write("[EQUIPMENT]", 0, 11);
  3457. characterfile.newLine();
  3458. for (int i = 0; i < playerEquipment.length; i++) {
  3459. characterfile.write("character-equip = ", 0, 18);
  3460. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  3461. characterfile.write(" ", 0, 1);
  3462. characterfile.write(Integer.toString(playerEquipment[i]), 0, Integer.toString(playerEquipment[i]).length());
  3463. characterfile.write(" ", 0, 1);
  3464. characterfile.write(Integer.toString(playerEquipmentN[i]), 0, Integer.toString(playerEquipmentN[i]).length());
  3465. characterfile.write(" ", 0, 1);
  3466. characterfile.newLine();
  3467. }
  3468. characterfile.newLine();
  3469. /*LOOK*/
  3470. characterfile.write("[LOOK]", 0, 6);
  3471. characterfile.newLine();
  3472. int[]Looks = getLook();
  3473. for (int i = 0; i < Looks.length; i++) {
  3474. characterfile.write("character-look = ", 0, 17);
  3475. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  3476. characterfile.write(" ", 0, 1);
  3477. characterfile.write(Integer.toString(Looks[i]), 0, Integer.toString(Looks[i]).length());
  3478. characterfile.newLine();
  3479. }
  3480. characterfile.newLine();
  3481. /*SKILLS*/
  3482. characterfile.write("[SKILLS]", 0, 8);
  3483. characterfile.newLine();
  3484. for (int i = 0; i < playerLevel.length; i++) {
  3485. characterfile.write("character-skill = ", 0, 18);
  3486. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  3487. characterfile.write(" ", 0, 1);
  3488. if(i == 3) {
  3489. characterfile.write(Integer.toString(currentHealth), 0, Integer.toString(currentHealth).length());
  3490. } else {
  3491. characterfile.write(Integer.toString(playerLevel[i]), 0, Integer.toString(playerLevel[i]).length());
  3492. }
  3493. characterfile.write(" ", 0, 1);
  3494. characterfile.write(Integer.toString(playerXP[i]), 0, Integer.toString(playerXP[i]).length());
  3495. characterfile.newLine();
  3496. }
  3497. characterfile.newLine();
  3498. /*ITEMS*/
  3499. characterfile.write("[ITEMS]", 0, 7);
  3500. characterfile.newLine();
  3501. for (int i = 0; i < playerItems.length; i++) {
  3502. if (playerItems[i] > 0) {
  3503. characterfile.write("character-item = ", 0, 17);
  3504. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  3505. characterfile.write(" ", 0, 1);
  3506. characterfile.write(Integer.toString(playerItems[i]), 0, Integer.toString(playerItems[i]).length());
  3507. characterfile.write(" ", 0, 1);
  3508. characterfile.write(Integer.toString(playerItemsN[i]), 0, Integer.toString(playerItemsN[i]).length());
  3509. characterfile.newLine();
  3510. }
  3511. }
  3512. characterfile.newLine();
  3513. /*BANK*/
  3514. characterfile.write("[BANK]", 0, 6);
  3515. characterfile.newLine();
  3516. for (int i = 0; i < bankItems.length; i++) {
  3517. if (bankItems[i] > 0) {
  3518. characterfile.write("character-bank = ", 0, 17);
  3519. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  3520. characterfile.write(" ", 0, 1);
  3521. characterfile.write(Integer.toString(bankItems[i]), 0, Integer.toString(bankItems[i]).length());
  3522. characterfile.write(" ", 0, 1);
  3523. characterfile.write(Integer.toString(bankItemsN[i]), 0, Integer.toString(bankItemsN[i]).length());
  3524. characterfile.newLine();
  3525. }
  3526. }
  3527. characterfile.newLine();
  3528. /*FRIENDS*/
  3529. characterfile.write("[FRIENDS]", 0, 9);
  3530. characterfile.newLine();
  3531. for (int i = 0; i < friends.length; i++) {
  3532. if (friends[i] > 0) {
  3533. characterfile.write("character-friend = ", 0, 19);
  3534. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  3535. characterfile.write(" ", 0, 1);
  3536. characterfile.write(Long.toString(friends[i]), 0, Long.toString(friends[i]).length());
  3537. characterfile.newLine();
  3538. }
  3539. }
  3540. characterfile.newLine();
  3541. /*IGNORES*/
  3542. characterfile.write("[IGNORES]", 0, 9);
  3543. characterfile.newLine();
  3544. for (int i = 0; i < ignores.length; i++) {
  3545. if (ignores[i] > 0) {
  3546. characterfile.write("character-ignore = ", 0, 19);
  3547. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  3548. characterfile.write(" ", 0, 1);
  3549. characterfile.write(Long.toString(ignores[i]), 0, Long.toString(ignores[i]).length());
  3550. characterfile.newLine();
  3551. }
  3552. }
  3553. characterfile.newLine();
  3554. /*EOF*/
  3555. characterfile.write("[EOF]", 0, 5);
  3556. characterfile.newLine();
  3557. characterfile.newLine();
  3558. characterfile.close();
  3559. } catch (IOException ioexception) {
  3560. misc.println(playerName+": error writing file.");
  3561. }
  3562. saveNeeded = false;
  3563. }
  3564.  
  3565. public void saveStats(boolean logout) {
  3566.  
  3567. String[]parts = new String[] {
  3568. "pGender", "pHead", "pTorso", "pArms", "pHands", "pLegs", "pFeet", "pBeard", "pHairC", "pTorsoC", "pLegsC", "pFeetC", "pSkinC"
  3569. };
  3570.  
  3571. try {
  3572. int[]look = {
  3573. 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]
  3574. };
  3575. boolean DoInsert = true;
  3576. int ID = -1;
  3577. int ID2 = -1;
  3578. int test1 = -1;
  3579. int test2 = -1;
  3580. //mysql_connect();
  3581. long allxp = 0;
  3582. for (int i = 0; i < 21; i++) {
  3583. if (i != 18) {
  3584. allxp += playerXP[i];
  3585. }
  3586. }
  3587. 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];
  3588. 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);
  3589.  
  3590. String online = "online = 0";
  3591. if (!logout)
  3592. online = "online = "+server.world;
  3593. else
  3594. saveNeeded = false;
  3595.  
  3596.  
  3597. } catch (Exception e) {
  3598. }
  3599. }
  3600.  
  3601.  
  3602. public void fsBar(int id1, int id2, int id3) {
  3603. outStream.createFrame(70);
  3604. outStream.writeWord(id1);
  3605. outStream.writeWordBigEndian(id2);
  3606. outStream.writeWordBigEndian(id3);
  3607. }
  3608. public void l33thax(int id) {
  3609. outStream.createFrame(171);
  3610. outStream.writeByte(0);
  3611. outStream.writeWord(id);
  3612. flushOutStream();
  3613. }
  3614.  
  3615. public void writeLog(String data, String file) {
  3616. //used for bans/mutes/chatlogs etc. -bakatool
  3617. BufferedWriter bw = null;
  3618.  
  3619. try {
  3620. bw = new BufferedWriter(new FileWriter("config//"+file+".txt", true));
  3621. bw.write(data);
  3622. bw.newLine();
  3623. bw.flush();
  3624. } catch (IOException ioe) {
  3625. ioe.printStackTrace();
  3626. } finally {
  3627. if (bw != null)
  3628. try {
  3629. bw.close();
  3630. } catch (IOException ioe2) {
  3631. System.out.println("Error writing system log.");
  3632. ioe2.printStackTrace();
  3633. }
  3634. }
  3635. }
  3636.  
  3637. public boolean checkLog(String file, String playerName) {
  3638. //check bans/mutes/chatlogs etc.. -bakatool
  3639. try {
  3640. BufferedReader in = new BufferedReader(new FileReader("config//"+file+".txt"));
  3641. String data = null;
  3642. while ((data = in.readLine()) != null) {
  3643. if (playerName.equalsIgnoreCase(data)) {
  3644. return true;
  3645. }
  3646. }
  3647. } catch (IOException e) {
  3648. System.out.println("Critical error while checking for data!");
  3649. System.out.println(file+":"+playerName);
  3650. e.printStackTrace();
  3651. }
  3652. return false;
  3653. }
  3654.  
  3655. public void fromBank(int itemID, int fromSlot, int amount) {
  3656. if (!IsBanking) {
  3657. closeInterface();
  3658. return;
  3659. }
  3660. if (amount > 0) {
  3661. if (bankItems[fromSlot] > 0) {
  3662. if (!takeAsNote) {
  3663. if (Item.itemStackable[bankItems[fromSlot]-1]) {
  3664. if (bankItemsN[fromSlot] > amount) {
  3665. if (addItem((bankItems[fromSlot]-1), amount)) {
  3666. bankItemsN[fromSlot] -= amount;
  3667. resetBank();
  3668. resetItems(5064);
  3669. }
  3670. } else {
  3671. if (addItem((bankItems[fromSlot]-1), bankItemsN[fromSlot])) {
  3672. bankItems[fromSlot] = 0;
  3673. bankItemsN[fromSlot] = 0;
  3674. resetBank();
  3675. resetItems(5064);
  3676. }
  3677. }
  3678. } else {
  3679. while (amount > 0) {
  3680. if (bankItemsN[fromSlot] > 0) {
  3681. if (addItem((bankItems[fromSlot]-1), 1)) {
  3682. bankItemsN[fromSlot] += -1;
  3683. amount--;
  3684. } else {
  3685. amount = 0;
  3686. }
  3687. } else {
  3688. amount = 0;
  3689. }
  3690. }
  3691. resetBank();
  3692. resetItems(5064);
  3693. }
  3694. } else if (takeAsNote && Item.itemIsNote[bankItems[fromSlot]]) {
  3695. // if (Item.itemStackable[bankItems[fromSlot]+1])
  3696. // {
  3697. if (bankItemsN[fromSlot] > amount) {
  3698. if (addItem(bankItems[fromSlot], amount)) {
  3699. bankItemsN[fromSlot] -= amount;
  3700. resetBank();
  3701. resetItems(5064);
  3702. }
  3703. } else {
  3704. if (addItem(bankItems[fromSlot], bankItemsN[fromSlot])) {
  3705. bankItems[fromSlot] = 0;
  3706. bankItemsN[fromSlot] = 0;
  3707. resetBank();
  3708. resetItems(5064);
  3709. }
  3710. }
  3711. } else {
  3712. sendMessage("Item can't be drawn as note.");
  3713. if (Item.itemStackable[bankItems[fromSlot]-1]) {
  3714. if (bankItemsN[fromSlot] > amount) {
  3715. if (addItem((bankItems[fromSlot]-1), amount)) {
  3716. bankItemsN[fromSlot] -= amount;
  3717. resetBank();
  3718. resetItems(5064);
  3719. }
  3720. } else {
  3721. if (addItem((bankItems[fromSlot]-1), bankItemsN[fromSlot])) {
  3722. bankItems[fromSlot] = 0;
  3723. bankItemsN[fromSlot] = 0;
  3724. resetBank();
  3725. resetItems(5064);
  3726. }
  3727. }
  3728. } else {
  3729. while (amount > 0) {
  3730. if (bankItemsN[fromSlot] > 0) {
  3731. if (addItem((bankItems[fromSlot]-1), 1)) {
  3732. bankItemsN[fromSlot] += -1;
  3733. amount--;
  3734. } else {
  3735. amount = 0;
  3736. }
  3737. } else {
  3738. amount = 0;
  3739. }
  3740. }
  3741. resetBank();
  3742. resetItems(5064);
  3743. }
  3744. }
  3745. }
  3746. }
  3747. }
  3748.  
  3749. public int getItemSlot(int itemID) {
  3750. for (int slot = 0; slot < playerItems.length; slot++) {
  3751. if (playerItems[slot] == (itemID+1)) {
  3752. return slot;
  3753. }
  3754. }
  3755. return -1;
  3756. }
  3757.  
  3758. public boolean addSkillXP(int amount, int skill) {
  3759. if (randomed) {
  3760. sendMessage("You must answer the genie before you can gain experience!");
  3761. return false;
  3762. }
  3763. if ((amount + playerXP[skill]) < 0 || amount + playerXP[skill] > 200000000 || playerXP[skill] >= 200000000) {
  3764. playerXP[skill] = 200000000;
  3765. refreshSkills();
  3766. return false;
  3767. }
  3768. int oldLevel = getLevelForXP(playerXP[skill]);
  3769. //int[] statId = {4004, 4008, 4006, 4016, 4010, 4012, 4014, 4034, 4038, 4026, 4032, 4036, 4024, 4030, 4028, 4020, 4018, 4022, 4152};
  3770. playerXP[skill] += amount;
  3771. if (oldLevel < getLevelForXP(playerXP[skill])) {
  3772. //if(oldLevel >= 85)
  3773. animation(199, absY, absX);
  3774. playerLevel[skill] = getLevelForXP(playerXP[skill]);
  3775. //stillgfx(623, absY, absX);
  3776. //levelup(skill);
  3777. updateRequired = true;
  3778. appearanceUpdateRequired = true;
  3779. sendMessage("Congratulations, you just advanced a "+statName[skill]+" level.");
  3780. if(skill == 3 || skill == playerLevel[playerHitpoints]) {
  3781. currentHealth += 1;
  3782. if(currentHealth >= playerLevel[3]) {
  3783. currentHealth = playerLevel[3];
  3784. }
  3785. }
  3786. if (playerLevel[skill] > 84)
  3787. yell(playerName+"'s "+statName[skill]+" level is now "+playerLevel[skill]+"!");
  3788. //sendFrame126(playerName + " (" + combatLevel + ")", 6572);
  3789. setSkillLevel(skill, playerLevel[skill], playerXP[skill]);
  3790. }
  3791. //setSkillLevel(skill, playerLevel[skill], playerXP[skill]);
  3792. refreshSkills();
  3793. if (skill == 2) {
  3794. CalculateMaxHit();
  3795. }
  3796. return true;
  3797.  
  3798. }
  3799.  
  3800. public int getXPForLevel(int level) {
  3801. int points = 0;
  3802. int output = 0;
  3803.  
  3804. for (int lvl = 1; lvl <= level; lvl++) {
  3805. points += Math.floor((double)lvl+300.0*Math.pow(2.0, (double)lvl/7.0));
  3806. if (lvl >= level) {
  3807. return output;
  3808. }
  3809. output = (int)Math.floor(points/4);
  3810. }
  3811. return 0;
  3812. }
  3813.  
  3814. public int getLevelForXP(int exp) {
  3815. int points = 0;
  3816. int output = 0;
  3817. if (exp > 13034430)
  3818. return 99;
  3819. for (int lvl = 1; lvl <= 99; lvl++) {
  3820. points += Math.floor((double)lvl+300.0*Math.pow(2.0, (double)lvl/7.0));
  3821. output = (int)Math.floor(points/4);
  3822. if (output >= exp) {
  3823. return lvl;
  3824. }
  3825. }
  3826. return 0;
  3827. }
  3828.  
  3829. public boolean bankItem(int itemID, int fromSlot, int amount) {
  3830. if(!IsBanking)
  3831. return false;
  3832. if (playerItemsN[fromSlot] <= 0) {
  3833. return false;
  3834. }
  3835. if (!Item.itemIsNote[playerItems[fromSlot] - 1]) {
  3836. if (playerItems[fromSlot] <= 0) {
  3837. return false;
  3838. }
  3839. if (Item.itemStackable[playerItems[fromSlot] - 1]
  3840. || playerItemsN[fromSlot] > 1) {
  3841. int toBankSlot = 0;
  3842. boolean alreadyInBank = false;
  3843.  
  3844. for (int i = 0; i < playerBankSize; i++) {
  3845. if (bankItems[i] == playerItems[fromSlot]) {
  3846. if (playerItemsN[fromSlot] < amount) {
  3847. amount = playerItemsN[fromSlot];
  3848. }
  3849. alreadyInBank = true;
  3850. toBankSlot = i;
  3851. i = playerBankSize + 1;
  3852. }
  3853. }
  3854.  
  3855. if (!alreadyInBank && freeBankSlots() > 0) {
  3856. for (int i = 0; i < playerBankSize; i++) {
  3857. if (bankItems[i] <= 0) {
  3858. toBankSlot = i;
  3859. i = playerBankSize + 1;
  3860. }
  3861. }
  3862. bankItems[toBankSlot] = playerItems[fromSlot];
  3863. if (playerItemsN[fromSlot] < amount) {
  3864. amount = playerItemsN[fromSlot];
  3865. }
  3866. if ((bankItemsN[toBankSlot] + amount) <= maxItemAmount
  3867. && (bankItemsN[toBankSlot] + amount) > -1) {
  3868. bankItemsN[toBankSlot] += amount;
  3869. } else {
  3870. sendMessage("Bank full!");
  3871. return false;
  3872. }
  3873. deleteItem((playerItems[fromSlot] - 1), fromSlot, amount);
  3874. resetItems(5064);
  3875. resetBank();
  3876. return true;
  3877. } else if (alreadyInBank) {
  3878. if ((bankItemsN[toBankSlot] + amount) <= maxItemAmount
  3879. && (bankItemsN[toBankSlot] + amount) > -1) {
  3880. bankItemsN[toBankSlot] += amount;
  3881. } else {
  3882. sendMessage("Bank full!");
  3883. return false;
  3884. }
  3885. deleteItem((playerItems[fromSlot] - 1), fromSlot, amount);
  3886. resetItems(5064);
  3887. resetBank();
  3888. return true;
  3889. } else {
  3890. sendMessage("Bank full!");
  3891. return false;
  3892. }
  3893. } else {
  3894. itemID = playerItems[fromSlot];
  3895. int toBankSlot = 0;
  3896. boolean alreadyInBank = false;
  3897.  
  3898. for (int i = 0; i < playerBankSize; i++) {
  3899. if (bankItems[i] == playerItems[fromSlot]) {
  3900. alreadyInBank = true;
  3901. toBankSlot = i;
  3902. i = playerBankSize + 1;
  3903. }
  3904. }
  3905. if (!alreadyInBank && freeBankSlots() > 0) {
  3906. for (int i = 0; i < playerBankSize; i++) {
  3907. if (bankItems[i] <= 0) {
  3908. toBankSlot = i;
  3909. i = playerBankSize + 1;
  3910. }
  3911. }
  3912. int firstPossibleSlot = 0;
  3913. boolean itemExists = false;
  3914.  
  3915. while (amount > 0) {
  3916. itemExists = false;
  3917. for (int i = firstPossibleSlot; i < playerItems.length; i++) {
  3918. if ((playerItems[i]) == itemID) {
  3919. firstPossibleSlot = i;
  3920. itemExists = true;
  3921. i = 30;
  3922. }
  3923. }
  3924. if (itemExists) {
  3925. bankItems[toBankSlot] = playerItems[firstPossibleSlot];
  3926. bankItemsN[toBankSlot] += 1;
  3927. deleteItem((playerItems[firstPossibleSlot] - 1),
  3928. firstPossibleSlot, 1);
  3929. amount--;
  3930. } else {
  3931. amount = 0;
  3932. }
  3933. }
  3934. resetItems(5064);
  3935. resetBank();
  3936. return true;
  3937. } else if (alreadyInBank) {
  3938. int firstPossibleSlot = 0;
  3939. boolean itemExists = false;
  3940.  
  3941. while (amount > 0) {
  3942. itemExists = false;
  3943. for (int i = firstPossibleSlot; i < playerItems.length; i++) {
  3944. if ((playerItems[i]) == itemID) {
  3945. firstPossibleSlot = i;
  3946. itemExists = true;
  3947. i = 30;
  3948. }
  3949. }
  3950. if (itemExists) {
  3951. bankItemsN[toBankSlot] += 1;
  3952. deleteItem((playerItems[firstPossibleSlot] - 1),
  3953. firstPossibleSlot, 1);
  3954. amount--;
  3955. } else {
  3956. amount = 0;
  3957. }
  3958. }
  3959. resetItems(5064);
  3960. resetBank();
  3961. return true;
  3962. } else {
  3963. sendMessage("Bank full!");
  3964. return false;
  3965. }
  3966. }
  3967. } else if (Item.itemIsNote[playerItems[fromSlot] - 1]
  3968. && !Item.itemIsNote[playerItems[fromSlot] - 2]) {
  3969. if (playerItems[fromSlot] <= 0) {
  3970. return false;
  3971. }
  3972. if (Item.itemStackable[playerItems[fromSlot] - 1]
  3973. || playerItemsN[fromSlot] > 1) {
  3974. int toBankSlot = 0;
  3975. boolean alreadyInBank = false;
  3976.  
  3977. for (int i = 0; i < playerBankSize; i++) {
  3978. if (bankItems[i] == (playerItems[fromSlot] - 1)) {
  3979. if (playerItemsN[fromSlot] < amount) {
  3980. amount = playerItemsN[fromSlot];
  3981. }
  3982. alreadyInBank = true;
  3983. toBankSlot = i;
  3984. i = playerBankSize + 1;
  3985. }
  3986. }
  3987.  
  3988. if (!alreadyInBank && freeBankSlots() > 0) {
  3989. for (int i = 0; i < playerBankSize; i++) {
  3990. if (bankItems[i] <= 0) {
  3991. toBankSlot = i;
  3992. i = playerBankSize + 1;
  3993. }
  3994. }
  3995. bankItems[toBankSlot] = (playerItems[fromSlot] - 1);
  3996. if (playerItemsN[fromSlot] < amount) {
  3997. amount = playerItemsN[fromSlot];
  3998. }
  3999. if ((bankItemsN[toBankSlot] + amount) <= maxItemAmount
  4000. && (bankItemsN[toBankSlot] + amount) > -1) {
  4001. bankItemsN[toBankSlot] += amount;
  4002. } else {
  4003. return false;
  4004. }
  4005. deleteItem((playerItems[fromSlot] - 1), fromSlot, amount);
  4006. resetItems(5064);
  4007. resetBank();
  4008. return true;
  4009. } else if (alreadyInBank) {
  4010. if ((bankItemsN[toBankSlot] + amount) <= maxItemAmount
  4011. && (bankItemsN[toBankSlot] + amount) > -1) {
  4012. bankItemsN[toBankSlot] += amount;
  4013. } else {
  4014. return false;
  4015. }
  4016. deleteItem((playerItems[fromSlot] - 1), fromSlot, amount);
  4017. resetItems(5064);
  4018. resetBank();
  4019. return true;
  4020. } else {
  4021. sendMessage("Bank full!");
  4022. return false;
  4023. }
  4024. } else {
  4025. itemID = playerItems[fromSlot];
  4026. int toBankSlot = 0;
  4027. boolean alreadyInBank = false;
  4028.  
  4029. for (int i = 0; i < playerBankSize; i++) {
  4030. if (bankItems[i] == (playerItems[fromSlot] - 1)) {
  4031. alreadyInBank = true;
  4032. toBankSlot = i;
  4033. i = playerBankSize + 1;
  4034. }
  4035. }
  4036. if (!alreadyInBank && freeBankSlots() > 0) {
  4037. for (int i = 0; i < playerBankSize; i++) {
  4038. if (bankItems[i] <= 0) {
  4039. toBankSlot = i;
  4040. i = playerBankSize + 1;
  4041. }
  4042. }
  4043. int firstPossibleSlot = 0;
  4044. boolean itemExists = false;
  4045.  
  4046. while (amount > 0) {
  4047. itemExists = false;
  4048. for (int i = firstPossibleSlot; i < playerItems.length; i++) {
  4049. if ((playerItems[i]) == itemID) {
  4050. firstPossibleSlot = i;
  4051. itemExists = true;
  4052. i = 30;
  4053. }
  4054. }
  4055. if (itemExists) {
  4056. bankItems[toBankSlot] = (playerItems[firstPossibleSlot]
  4057. - 1);
  4058. bankItemsN[toBankSlot] += 1;
  4059. deleteItem((playerItems[firstPossibleSlot] - 1),
  4060. firstPossibleSlot, 1);
  4061. amount--;
  4062. } else {
  4063. amount = 0;
  4064. }
  4065. }
  4066. resetItems(5064);
  4067. resetBank();
  4068. return true;
  4069. } else if (alreadyInBank) {
  4070. int firstPossibleSlot = 0;
  4071. boolean itemExists = false;
  4072.  
  4073. while (amount > 0) {
  4074. itemExists = false;
  4075. for (int i = firstPossibleSlot; i < playerItems.length; i++) {
  4076. if ((playerItems[i]) == itemID) {
  4077. firstPossibleSlot = i;
  4078. itemExists = true;
  4079. i = 30;
  4080. }
  4081. }
  4082. if (itemExists) {
  4083. bankItemsN[toBankSlot] += 1;
  4084. deleteItem((playerItems[firstPossibleSlot] - 1),
  4085. firstPossibleSlot, 1);
  4086. amount--;
  4087. } else {
  4088. amount = 0;
  4089. }
  4090. }
  4091. resetItems(5064);
  4092. resetBank();
  4093. return true;
  4094. } else {
  4095. sendMessage("Bank full!");
  4096. return false;
  4097. }
  4098. }
  4099. } else {
  4100. sendMessage("Item not supported " + (playerItems[fromSlot] - 1));
  4101. return false;
  4102. }
  4103. }
  4104.  
  4105. public void createItem(int newItemID) {
  4106. int Maxi = server.itemHandler.DropItemCount;
  4107.  
  4108. for (int i = 0; i <= Maxi; i++) {
  4109. if (server.itemHandler.DroppedItemsID[i] < 1) {
  4110. server.itemHandler.DroppedItemsID[i] = newItemID;
  4111. server.itemHandler.DroppedItemsX[i] = (absX);
  4112. server.itemHandler.DroppedItemsY[i] = (absY);
  4113. server.itemHandler.DroppedItemsN[i] = 1;
  4114. server.itemHandler.DroppedItemsH[i] = heightLevel;
  4115. server.itemHandler.DroppedItemsDDelay[i] = (server.itemHandler.MaxDropShowDelay+1); // this way the item can NEVER be showed to another client
  4116. server.itemHandler.DroppedItemsDropper[i] = playerId;
  4117. if (i == Maxi) {
  4118. server.itemHandler.DropItemCount++;
  4119. if (server.itemHandler.DropItemCount >= (server.itemHandler.MaxDropItems+1)) {
  4120. server.itemHandler.DropItemCount = 0;
  4121. misc.println("! Notify item resterting !");
  4122. }
  4123. }
  4124. break;
  4125. }
  4126. }
  4127. }
  4128. public void createItem(int newItemID, int amount) {
  4129. int Maxi = server.itemHandler.DropItemCount;
  4130.  
  4131. for (int i = 0; i <= Maxi; i++) {
  4132. if (server.itemHandler.DroppedItemsID[i] < 1) {
  4133. server.itemHandler.DroppedItemsID[i] = newItemID;
  4134. server.itemHandler.DroppedItemsX[i] = (absX);
  4135. server.itemHandler.DroppedItemsY[i] = (absY);
  4136. server.itemHandler.DroppedItemsN[i] = amount;
  4137. server.itemHandler.DroppedItemsH[i] = heightLevel;
  4138. server.itemHandler.DroppedItemsDDelay[i] = (server.itemHandler.MaxDropShowDelay+1); // this way the item can NEVER be showed to another client
  4139. server.itemHandler.DroppedItemsDropper[i] = playerId;
  4140. if (i == Maxi) {
  4141. server.itemHandler.DropItemCount++;
  4142. if (server.itemHandler.DropItemCount >= (server.itemHandler.MaxDropItems+1)) {
  4143. server.itemHandler.DropItemCount = 0;
  4144. misc.println("! Notify item resterting !");
  4145. }
  4146. }
  4147. break;
  4148. }
  4149. }
  4150. }
  4151.  
  4152. public void createItemForAll(int newItemID, int amount, int X, int Y) {
  4153. int Maxi = server.itemHandler.DropItemCount;
  4154.  
  4155. for (int i = 0; i <= Maxi; i++) {
  4156. if (server.itemHandler.DroppedItemsID[i] < 1) {
  4157. server.itemHandler.DroppedItemsID[i] = newItemID;
  4158. server.itemHandler.DroppedItemsX[i] = X;
  4159. server.itemHandler.DroppedItemsY[i] = Y;
  4160. server.itemHandler.DroppedItemsN[i] = amount;
  4161. server.itemHandler.DroppedItemsH[i] = heightLevel;
  4162. server.itemHandler.DroppedItemsDDelay[i] = (server.itemHandler.MaxDropShowDelay+1); // this way the item can NEVER be showed to another client
  4163. server.itemHandler.DroppedItemsDropper[i] = playerId;
  4164. if (i == Maxi) {
  4165. server.itemHandler.DropItemCount++;
  4166. if (server.itemHandler.DropItemCount >= (server.itemHandler.MaxDropItems+1)) {
  4167. server.itemHandler.DropItemCount = 0;
  4168. misc.println("! Notify item resterting !");
  4169. }
  4170. }
  4171. break;
  4172. }
  4173. }
  4174. }
  4175.  
  4176. public void removeAllItems() {
  4177. for (int i = 0; i < playerItems.length; i++) {
  4178. playerItems[i] = 0;
  4179. }
  4180. for (int i = 0; i < playerItemsN.length; i++) {
  4181. playerItemsN[i] = 0;
  4182. }
  4183. resetItems(3214);
  4184. }
  4185.  
  4186. public void resetItems(int WriteFrame) {
  4187. outStream.createFrameVarSizeWord(53);
  4188. outStream.writeWord(WriteFrame);
  4189. outStream.writeWord(playerItems.length);
  4190. for (int i = 0; i < playerItems.length; i++) {
  4191. if (playerItemsN[i] > 254) {
  4192. outStream.writeByte(255); // item's stack count. if over 254, write byte 255
  4193. outStream.writeDWord_v2(playerItemsN[i]); // and then the real value with writeDWord_v2
  4194. } else {
  4195. outStream.writeByte(playerItemsN[i]);
  4196. }
  4197. if (playerItems[i] > 20000 || playerItems[i] < 0) {
  4198. playerItems[i] = 20000;
  4199. }
  4200. outStream.writeWordBigEndianA(playerItems[i]); // item id
  4201. }
  4202. outStream.endFrameVarSizeWord();
  4203. }
  4204.  
  4205. public void SendWeapon(int Weapon, String WeaponName) {
  4206. String WeaponName2 = WeaponName.replaceAll("Bronze", "");
  4207.  
  4208. WeaponName2 = WeaponName2.replaceAll("Iron", "");
  4209. WeaponName2 = WeaponName2.replaceAll("Steel", "");
  4210. WeaponName2 = WeaponName2.replaceAll("Scythe", "");
  4211. WeaponName2 = WeaponName2.replaceAll("Black", "");
  4212. WeaponName2 = WeaponName2.replaceAll("Mithril", "");
  4213. WeaponName2 = WeaponName2.replaceAll("Adamant", "");
  4214. WeaponName2 = WeaponName2.replaceAll("Rune", "");
  4215. WeaponName2 = WeaponName2.replaceAll("Granite", "");
  4216. WeaponName2 = WeaponName2.replaceAll("Dragon", "");
  4217. WeaponName2 = WeaponName2.replaceAll("Crystal", "");
  4218. WeaponName2 = WeaponName2.trim();
  4219. if (WeaponName.equals("Unarmed")) {
  4220. setSidebarInterface(0, 5855); // punch, kick, block
  4221. sendFrame126(WeaponName, 5857);
  4222. } else if (WeaponName.endsWith("whip")) {
  4223. setSidebarInterface(0, 12290); // flick, lash, deflect
  4224. sendFrame246(12291, 200, Weapon);
  4225. sendFrame126(WeaponName, 12293);
  4226. } else if (WeaponName.endsWith("Scythe")) {
  4227. setSidebarInterface(0, 776); // flick, lash, deflect
  4228. sendFrame246(12291, 200, Weapon);
  4229. sendFrame126(WeaponName, 778);
  4230. } else if (WeaponName.endsWith("bow")) {
  4231. setSidebarInterface(0, 1764); // accurate, rapid, longrange
  4232. sendFrame246(1765, 200, Weapon);
  4233. sendFrame126(WeaponName, 1767);
  4234. } else if (WeaponName.endsWith("bow full")) {
  4235. setSidebarInterface(0, 1764); // accurate, rapid, longrange
  4236. sendFrame246(1765, 200, Weapon);
  4237. sendFrame126(WeaponName, 1767);
  4238. } else if (WeaponName.startsWith("Staff") || WeaponName.endsWith("staff")) {
  4239. setSidebarInterface(0, 328); // spike, impale, smash, block
  4240. sendFrame246(329, 200, Weapon);
  4241. sendFrame126(WeaponName, 331);
  4242. } else if (WeaponName2.startsWith("dart")) {
  4243. setSidebarInterface(0, 4446); // accurate, rapid, longrange
  4244. sendFrame246(4447, 200, Weapon);
  4245. sendFrame126(WeaponName, 4449);
  4246. } else if (WeaponName2.startsWith("dagger")) {
  4247. setSidebarInterface(0, 2276); // stab, lunge, slash, block
  4248. sendFrame246(2277, 200, Weapon);
  4249. sendFrame126(WeaponName, 2279);
  4250. } else if (WeaponName2.startsWith("pickaxe")) {
  4251. setSidebarInterface(0, 5570); // spike, impale, smash, block
  4252. sendFrame246(5571, 200, Weapon);
  4253. sendFrame126(WeaponName, 5573);
  4254. } else if (WeaponName2.startsWith("axe") || WeaponName2.startsWith("battleaxe")) {
  4255. setSidebarInterface(0, 1698); // chop, hack, smash, block
  4256. sendFrame246(1699, 200, Weapon);
  4257. sendFrame126(WeaponName, 1701);
  4258. } else if (WeaponName2.startsWith("Axe") || WeaponName2.startsWith("Battleaxe")) {
  4259. setSidebarInterface(0, 1698); // chop, hack, smash, block
  4260. sendFrame246(1699, 200, Weapon);
  4261. sendFrame126(WeaponName, 1701);
  4262. } else if (WeaponName2.startsWith("halberd")) {
  4263. setSidebarInterface(0, 8460); // jab, swipe, fend
  4264. sendFrame246(8461, 200, Weapon);
  4265. sendFrame126(WeaponName, 8463);
  4266. } else if (WeaponName2.startsWith("spear")) {
  4267. setSidebarInterface(0, 4679); // lunge, swipe, pound, block
  4268. sendFrame246(4680, 200, Weapon);
  4269. sendFrame126(WeaponName, 4682);
  4270. } else {
  4271. setSidebarInterface(0, 2423); // chop, slash, lunge, block
  4272. sendFrame246(2424, 200, Weapon);
  4273. sendFrame126(WeaponName, 2426);
  4274. }
  4275. }
  4276.  
  4277. public void resetOTItems(int WriteFrame) {
  4278. client other = getClient(trade_reqId);
  4279. if (!validClient(trade_reqId))
  4280. return;
  4281. outStream.createFrameVarSizeWord(53);
  4282. outStream.writeWord(WriteFrame);
  4283. int len = other.offeredItems.toArray().length;
  4284. int current = 0;
  4285. outStream.writeWord(len);
  4286. for (GameItem item: other.offeredItems) {
  4287. if (item.amount > 254) {
  4288. outStream.writeByte(255); // item's stack count. if over 254, write byte 255
  4289. outStream.writeDWord_v2(item.amount); // and then the real value with writeDWord_v2
  4290. } else {
  4291. outStream.writeByte(item.amount);
  4292. }
  4293. outStream.writeWordBigEndianA(item.id+1); // item id
  4294. current++;
  4295. }
  4296. if (current < 27) {
  4297. for (int i = current; i < 28; i++) {
  4298. outStream.writeByte(1);
  4299. outStream.writeWordBigEndianA(-1);
  4300. }
  4301. }
  4302. outStream.endFrameVarSizeWord();
  4303. }
  4304.  
  4305. public void resetTItems(int WriteFrame) {
  4306. outStream.createFrameVarSizeWord(53);
  4307. outStream.writeWord(WriteFrame);
  4308. int len = offeredItems.toArray().length;
  4309. int current = 0;
  4310. outStream.writeWord(len);
  4311. for (GameItem item: offeredItems) {
  4312. if (item.amount > 254) {
  4313. outStream.writeByte(255); // item's stack count. if over 254, write byte 255
  4314. outStream.writeDWord_v2(item.amount); // and then the real value with writeDWord_v2
  4315. } else {
  4316. outStream.writeByte(item.amount);
  4317. }
  4318. outStream.writeWordBigEndianA(item.id+1); // item id
  4319. current++;
  4320. }
  4321. if (current < 27) {
  4322. for (int i = current; i < 28; i++) {
  4323. outStream.writeByte(1);
  4324. outStream.writeWordBigEndianA(-1);
  4325. }
  4326. }
  4327. outStream.endFrameVarSizeWord();
  4328. }
  4329.  
  4330. public void resetShop(int ShopID) {
  4331. int TotalItems = 0;
  4332.  
  4333. for (int i = 0; i < server.shopHandler.MaxShopItems; i++) {
  4334. if (server.shopHandler.ShopItems[ShopID][i] > 0) {
  4335. TotalItems++;
  4336. }
  4337. }
  4338. if (TotalItems > server.shopHandler.MaxShopItems) {
  4339. TotalItems = server.shopHandler.MaxShopItems;
  4340. }
  4341. outStream.createFrameVarSizeWord(53);
  4342. outStream.writeWord(3900);
  4343. outStream.writeWord(TotalItems);
  4344. int TotalCount = 0;
  4345.  
  4346. for (int i = 0; i < server.shopHandler.ShopItems.length; i++) {
  4347. if (server.shopHandler.ShopItems[ShopID][i] > 0 || i <= server.shopHandler.ShopItemsStandard[ShopID]) {
  4348. if (server.shopHandler.ShopItemsN[ShopID][i] > 254) {
  4349. outStream.writeByte(255); // item's stack count. if over 254, write byte 255
  4350. outStream.writeDWord_v2(server.shopHandler.ShopItemsN[ShopID][i]); // and then the real value with writeDWord_v2
  4351. } else {
  4352. outStream.writeByte(server.shopHandler.ShopItemsN[ShopID][i]);
  4353. }
  4354. if (server.shopHandler.ShopItems[ShopID][i] > 20000 || server.shopHandler.ShopItems[ShopID][i] < 0) {
  4355. server.shopHandler.ShopItems[ShopID][i] = 20000;
  4356. }
  4357. outStream.writeWordBigEndianA(server.shopHandler.ShopItems[ShopID][i]); // item id
  4358. TotalCount++;
  4359. }
  4360. if (TotalCount > TotalItems) {
  4361. break;
  4362. }
  4363. }
  4364. outStream.endFrameVarSizeWord();
  4365. }
  4366.  
  4367. public void resetBank() {
  4368. outStream.createFrameVarSizeWord(53);
  4369. outStream.writeWord(5382); // bank
  4370. outStream.writeWord(playerBankSize); // number of items
  4371. for (int i = 0; i < playerBankSize; i++) {
  4372. if (bankItemsN[i] > 254) {
  4373. outStream.writeByte(255);
  4374. outStream.writeDWord_v2(bankItemsN[i]);
  4375. } else {
  4376. outStream.writeByte(bankItemsN[i]); // amount
  4377. }
  4378. if (bankItemsN[i] < 1) {
  4379. bankItems[i] = 0;
  4380. }
  4381. if (bankItems[i] > 20000 || bankItems[i] < 0) {
  4382. bankItems[i] = 20000;
  4383. }
  4384. outStream.writeWordBigEndianA(bankItems[i]); // itemID
  4385. }
  4386. outStream.endFrameVarSizeWord();
  4387. }
  4388.  
  4389. public void moveItems(int from, int to, int moveWindow) {
  4390. if (moveWindow == 3724) {
  4391. int tempI;
  4392. int tempN;
  4393.  
  4394. tempI = playerItems[from];
  4395. tempN = playerItemsN[from];
  4396.  
  4397. playerItems[from] = playerItems[to];
  4398. playerItemsN[from] = playerItemsN[to];
  4399. playerItems[to] = tempI;
  4400. playerItemsN[to] = tempN;
  4401. }
  4402.  
  4403. if (moveWindow == 34453 && from >= 0 && to >= 0 && from < playerBankSize && to < playerBankSize) {
  4404. int tempI;
  4405. int tempN;
  4406.  
  4407. tempI = bankItems[from];
  4408. tempN = bankItemsN[from];
  4409.  
  4410. bankItems[from] = bankItems[to];
  4411. bankItemsN[from] = bankItemsN[to];
  4412. bankItems[to] = tempI;
  4413. bankItemsN[to] = tempN;
  4414. }
  4415.  
  4416. if (moveWindow == 34453) {
  4417. resetBank();
  4418. } else if (moveWindow == 18579) {
  4419. resetItems(5064);
  4420. } else if (moveWindow == 3724) {
  4421. resetItems(3214);
  4422. }
  4423. }
  4424.  
  4425. public int itemAmount(int itemID) {
  4426. int tempAmount = 0;
  4427.  
  4428. for (int i = 0; i < playerItems.length; i++) {
  4429. if (playerItems[i] == itemID) {
  4430. tempAmount += playerItemsN[i];
  4431. }
  4432. }
  4433. return tempAmount;
  4434. }
  4435.  
  4436. public int freeBankSlots() {
  4437. int freeS = 0;
  4438.  
  4439. for (int i = 0; i < playerBankSize; i++) {
  4440. if (bankItems[i] <= 0) {
  4441. freeS++;
  4442. }
  4443. }
  4444. return freeS;
  4445. }
  4446.  
  4447. public int freeSlots() {
  4448. int freeS = 0;
  4449.  
  4450. for (int i = 0; i < playerItems.length; i++) {
  4451. if (playerItems[i] <= 0) {
  4452. freeS++;
  4453. }
  4454. }
  4455. return freeS;
  4456. }
  4457.  
  4458.  
  4459. public boolean pickUpItem(int item, int amount) {
  4460.  
  4461. if (!Item.itemStackable[item] || amount < 1) {
  4462. amount = 1;
  4463. }
  4464. if (!canUse(item)) {
  4465. sendMessage("You must be a premium member to pickup this item");
  4466. return false;
  4467. }
  4468.  
  4469. if (freeSlots() > 0 && poimiY == currentY && poimiX == currentX)
  4470. // actionAmount++;
  4471. // if (actionTimer == 0)
  4472. {
  4473. // The following 6 rows delete the item from the ground
  4474. /* outStream.createFrame(85); //setting the location
  4475. outStream.writeByteC(currentY);
  4476. outStream.writeByteC(currentX);
  4477. outStream.createFrame(156); //remove item frame
  4478. outStream.writeByteS(0); //x(4 MSB) y(LSB) coords
  4479. outStream.writeWord(item); // itemid*/
  4480. // actionTimer = 20;
  4481. for (int i = 0; i < playerItems.length; i++) {
  4482. if (playerItems[i] == (item+1) && Item.itemStackable[item] && playerItems[i] > 0) {
  4483. playerItems[i] = item+1;
  4484. if ((playerItemsN[i]+amount) < maxItemAmount && (playerItemsN[i]+amount) > 0) {
  4485. playerItemsN[i] += amount;
  4486. } else {
  4487. return false;
  4488. }
  4489. outStream.createFrameVarSizeWord(34);
  4490. outStream.writeWord(3214);
  4491. outStream.writeByte(i);
  4492. outStream.writeWord(playerItems[i]);
  4493. if (playerItemsN[i] > 254) {
  4494. outStream.writeByte(255);
  4495. outStream.writeDWord(playerItemsN[i]);
  4496. } else {
  4497. outStream.writeByte(playerItemsN[i]); // amount
  4498. }
  4499. outStream.endFrameVarSizeWord();
  4500. i = 30;
  4501. return true;
  4502. }
  4503. }
  4504. for (int i = 0; i < playerItems.length; i++) {
  4505. if (playerItems[i] <= 0) {
  4506. playerItems[i] = item+1;
  4507. if (amount < maxItemAmount) {
  4508. playerItemsN[i] = amount;
  4509. } else {
  4510. return false;
  4511. }
  4512. outStream.createFrameVarSizeWord(34);
  4513. outStream.writeWord(3214);
  4514. outStream.writeByte(i);
  4515. outStream.writeWord(playerItems[i]);
  4516. if (playerItemsN[i] > 254) {
  4517. outStream.writeByte(255);
  4518. outStream.writeDWord_v2(playerItemsN[i]);
  4519. } else {
  4520. outStream.writeByte(playerItemsN[i]); // amount
  4521. }
  4522. outStream.endFrameVarSizeWord();
  4523. i = 30;
  4524. return true;
  4525. }
  4526. }
  4527. return true;
  4528. } else {
  4529. return false;
  4530. }
  4531. }
  4532.  
  4533. public void openUpBank() {
  4534. sendFrame248(5292, 5063);
  4535. resetItems(5064);
  4536. IsBanking = true;
  4537. }
  4538.  
  4539. public void openUpShop(int ShopID) {
  4540. sendFrame126(server.shopHandler.ShopName[ShopID], 3901);
  4541. sendFrame248(3824, 3822);
  4542. resetItems(3823);
  4543. resetShop(ShopID);
  4544. IsShopping = true;
  4545. MyShopID = ShopID;
  4546. }
  4547.  
  4548. public void openUpPinSettings() {
  4549. sendFrame126("Customers are reminded", 15038);
  4550. sendFrame126("that they should NEVER", 15039);
  4551. sendFrame126("tell anyone their Bank", 15040);
  4552. sendFrame126("PINs or passwords, nor", 15041);
  4553. sendFrame126("should they ever enter", 15042);
  4554. sendFrame126("their PINs on any website", 15043);
  4555. sendFrame126("from.", 14044);
  4556. sendFrame126("", 15045);
  4557. sendFrame126("Have you read the PIN", 15046);
  4558. sendFrame126("Frequently Asked", 15047);
  4559. sendFrame126("Questions on the", 15048);
  4560. sendFrame126("Website?", 15049);
  4561. sendFrame126("No PIN set", 15105);
  4562. sendFrame126("3 days", 15107);
  4563. sendFrame171(0, 15074);
  4564. sendFrame171(1, 15077);
  4565. sendFrame171(1, 15081);
  4566. sendFrame171(1, 15108);
  4567. showInterface(14924);
  4568. }
  4569.  
  4570. public boolean addItem(int item, int amount) {
  4571. if (item >= Item.itemStackable.length) {
  4572. return false;
  4573. }
  4574. if (item < 0 || amount < 1) {
  4575. return true;
  4576. }
  4577. if (!Item.itemStackable[item] || amount < 1) {
  4578. amount = 1;
  4579. }
  4580.  
  4581. if ((freeSlots() >= amount && ! Item.itemStackable[item]) || freeSlots() > 0) {
  4582. for (int i = 0; i < playerItems.length; i++) {
  4583. if (playerItems[i] == (item+1) && Item.itemStackable[item] && playerItems[i] > 0) {
  4584. playerItems[i] = (item+1);
  4585. if ((playerItemsN[i]+amount) < maxItemAmount && (playerItemsN[i]+amount) > -1) {
  4586. playerItemsN[i] += amount;
  4587. } else {
  4588. playerItemsN[i] = maxItemAmount;
  4589. }
  4590. outStream.createFrameVarSizeWord(34);
  4591. outStream.writeWord(3214);
  4592. outStream.writeByte(i);
  4593. outStream.writeWord(playerItems[i]);
  4594. if (playerItemsN[i] > 254) {
  4595. outStream.writeByte(255);
  4596. outStream.writeDWord(playerItemsN[i]);
  4597. } else {
  4598. outStream.writeByte(playerItemsN[i]); // amount
  4599. }
  4600. outStream.endFrameVarSizeWord();
  4601. i = 30;
  4602. return true;
  4603. }
  4604. }
  4605. for (int i = 0; i < playerItems.length; i++) {
  4606. if (playerItems[i] <= 0) {
  4607. playerItems[i] = item+1;
  4608. if (amount < maxItemAmount && amount > -1) {
  4609. playerItemsN[i] = amount;
  4610. } else {
  4611. playerItemsN[i] = maxItemAmount;
  4612. }
  4613. outStream.createFrameVarSizeWord(34);
  4614. outStream.writeWord(3214);
  4615. outStream.writeByte(i);
  4616. outStream.writeWord(playerItems[i]);
  4617. if (playerItemsN[i] > 254) {
  4618. outStream.writeByte(255);
  4619. outStream.writeDWord(playerItemsN[i]);
  4620. } else {
  4621. outStream.writeByte(playerItemsN[i]); // amount
  4622. }
  4623. outStream.endFrameVarSizeWord();
  4624. i = 30;
  4625. return true;
  4626. }
  4627. }
  4628. return false;
  4629. } else {
  4630. sendMessage("Not enough space in your inventory.");
  4631. return false;
  4632. }
  4633. }
  4634.  
  4635. public void dropItem(int droppedItem, int slot) {
  4636. // misc.printlnTag("droppeditem ["+playerItems[slot]+"] which is ["+(droppedItem+1)+"]");
  4637. boolean a = true;
  4638.  
  4639. if (!canUse(droppedItem)) {
  4640. sendMessage("You must be a premium member to drop this item");
  4641. return;
  4642. }
  4643. if (playerItemsN[slot] != 0 && droppedItem != -1 && playerItems[slot] == droppedItem+1) {
  4644. for (int i = 0; i < noTrade.length; i++) {
  4645. if (droppedItem == noTrade[i]) {
  4646. sendMessage("You can't drop this item");
  4647. return;
  4648. }
  4649. }
  4650. ItemHandler.addItem(playerItems[slot]-1, absX, absY, playerItemsN[slot], playerId, false);
  4651. // createGroundItem(droppedItem, absX, absY, c);
  4652. deleteItem(droppedItem, slot, playerItemsN[slot]);
  4653. updateRequired = true;
  4654. }
  4655. }
  4656.  
  4657. public void createGroundItem(int itemID, int itemX, int itemY, int itemAmount) {
  4658. // Phate: Omg fucking sexy! creates item at absolute X and Y
  4659. outStream.createFrame(85); // Phate: Spawn ground item
  4660. outStream.writeByteC((itemY-8*mapRegionY));
  4661. outStream.writeByteC((itemX-8*mapRegionX));
  4662. outStream.createFrame(44);
  4663. outStream.writeWordBigEndianA(itemID);
  4664. outStream.writeWord(itemAmount);
  4665. outStream.writeByte(0); // x(4 MSB) y(LSB) coords
  4666. // System.out.println("CreateGroundItem "+itemID+" "+(itemX - 8 * mapRegionX)+","+(itemY - 8 * mapRegionY)+" "+itemAmount);
  4667. }
  4668.  
  4669. public void removeGroundItem(int itemX, int itemY, int itemID) {
  4670. // Phate: Omg fucking sexy! remoevs an item from absolute X and Y
  4671. outStream.createFrame(85); // Phate: Item Position Frame
  4672. outStream.writeByteC((itemY-8*mapRegionY));
  4673. outStream.writeByteC((itemX-8*mapRegionX));
  4674. outStream.createFrame(156); // Phate: Item Action: Delete
  4675. outStream.writeByteS(0); // x(4 MSB) y(LSB) coords
  4676. outStream.writeWord(itemID); // Phate: Item ID
  4677. // misc.printlnTag("RemoveGroundItem "+itemID+" "+(itemX - 8 * mapRegionX)+","+(itemY - 8 * mapRegionY));
  4678. }
  4679. public void deleteItem(int id, int amount) {
  4680. deleteItem(id, GetItemSlot(id), amount);
  4681. }
  4682. public void deleteItem(int id, int slot, int amount) {
  4683. if (slot > -1 && slot < playerItems.length) {
  4684. if ((playerItems[slot]-1) == id) {
  4685. if (playerItemsN[slot] > amount) {
  4686. playerItemsN[slot] -= amount;
  4687. } else {
  4688. playerItemsN[slot] = 0;
  4689. playerItems[slot] = 0;
  4690. }
  4691. resetItems(3214);
  4692. }
  4693. } else {
  4694. //sendMessage("Item Alched");
  4695. }
  4696. }
  4697.  
  4698. public void setEquipment(int wearID, int amount, int targetSlot) {
  4699. int Stat = playerDefence;
  4700.  
  4701. if (targetSlot == playerWeapon) {
  4702. Stat = playerAttack;
  4703. }
  4704. if(wearID == 4151 && FightType == 2){
  4705. FightType = 3;
  4706. SkillID = 3;
  4707. }
  4708. outStream.createFrameVarSizeWord(34);
  4709. outStream.writeWord(1688);
  4710. outStream.writeByte(targetSlot);
  4711. outStream.writeWord((wearID+1));
  4712. if (amount > 254) {
  4713. outStream.writeByte(255);
  4714. outStream.writeDWord(amount);
  4715. } else {
  4716. outStream.writeByte(amount); // amount
  4717. }
  4718. outStream.endFrameVarSizeWord();
  4719.  
  4720. if ((targetSlot == playerWeapon) && (wearID >= 0)) {
  4721. SendWeapon(wearID, GetItemName(wearID));
  4722. playerSE = GetStandAnim(wearID);
  4723. playerSEW = GetWalkAnim(wearID);
  4724. playerSER = GetRunAnim(wearID);
  4725. playerSEA = 0x326;
  4726. }
  4727. pEmote = playerSE;
  4728. updateRequired = true;
  4729. appearanceUpdateRequired = true;
  4730. }
  4731.  
  4732. public boolean wear(int wearID, int slot) {
  4733. if (duelFight && duelRule[3]) {
  4734. sendMessage("Equipment changing has been disabled in this duel");
  4735. return false;
  4736. }
  4737. if(wearID == 4151 && FightType == 2){
  4738. FightType = 3;
  4739. SkillID = 3;
  4740. }
  4741. int targetSlot = 0;
  4742. targetSlot = itemType(wearID);
  4743. int[]two_hand = {
  4744. 1319, 4718, 4726, 1409, 4710, 7158
  4745. };
  4746. for (int a = 0; a < two_hand.length; a++) {
  4747. if (wearID == two_hand[a] && playerEquipment[playerShield] > 0) {
  4748. if (playerHasItem(-1)) {
  4749. addItem(playerEquipment[playerShield], 1);
  4750. playerEquipment[playerShield] = -1;
  4751. } else {
  4752. sendMessage("You can't wear this weapon with a shield");
  4753. return false;
  4754. }
  4755. }
  4756. if (itemType(wearID) == playerShield && playerEquipment[playerWeapon] == two_hand[a]) {
  4757. if (playerHasItem(-1)) {
  4758. addItem(playerEquipment[playerWeapon], 1);
  4759. playerEquipment[playerWeapon] = -1;
  4760. } else {
  4761. sendMessage("You can't wear a shield with this weapon");
  4762. return false;
  4763. }
  4764. }
  4765. if (!canUse(wearID)) {
  4766. sendMessage("You must be a premium member to use this item");
  4767. return false;
  4768. }
  4769. }
  4770.  
  4771.  
  4772. if ((playerItems[slot]-1) == wearID) {
  4773. targetSlot = itemType(wearID);
  4774. int CLAttack = GetCLAttack(wearID);
  4775. int CLDefence = GetCLDefence(wearID);
  4776. int CLStrength = GetCLStrength(wearID);
  4777. int CLMagic = GetCLMagic(wearID);
  4778. int CLRanged = GetCLRanged(wearID);
  4779. boolean GoFalse = false;
  4780.  
  4781. if (CLAttack > playerLevel[playerAttack]) {
  4782. sendMessage("You need "+CLAttack+" "+statName[playerAttack]+" to equip this item.");
  4783. GoFalse = true;
  4784. }
  4785. if (CLDefence > playerLevel[playerDefence]) {
  4786. sendMessage("You need "+CLDefence+" "+statName[playerDefence]+" to equip this item.");
  4787. GoFalse = true;
  4788. }
  4789. if (CLStrength > playerLevel[playerStrength]) {
  4790. sendMessage("You need "+CLStrength+" "+statName[playerStrength]+" to equip this item.");
  4791. GoFalse = true;
  4792. }
  4793. if (CLMagic > playerLevel[playerMagic]) {
  4794. sendMessage("You need "+CLMagic+" "+statName[playerMagic]+" to equip this item.");
  4795. GoFalse = true;
  4796. }
  4797. if (CLRanged > playerLevel[playerRanged]) {
  4798. sendMessage("You need "+CLRanged+" "+statName[playerRanged]+" to equip this item.");
  4799. GoFalse = true;
  4800. }
  4801. if (GoFalse == true) {
  4802. return false;
  4803. }
  4804. int wearAmount = playerItemsN[slot];
  4805.  
  4806. if (wearAmount < 1) {
  4807. return false;
  4808. }
  4809. if (slot >= 0 && wearID >= 0) {
  4810. deleteItem(wearID, slot, wearAmount);
  4811. if (playerEquipment[targetSlot] != wearID && playerEquipment[targetSlot] >= 0) {
  4812. addItem(playerEquipment[targetSlot], playerEquipmentN[targetSlot]);
  4813. } else if (Item.itemStackable[wearID] && playerEquipment[targetSlot] == wearID) {
  4814. wearAmount = playerEquipmentN[targetSlot]+wearAmount;
  4815. } else if (playerEquipment[targetSlot] >= 0) {
  4816. addItem(playerEquipment[targetSlot], playerEquipmentN[targetSlot]);
  4817. }
  4818. }
  4819. outStream.createFrameVarSizeWord(34);
  4820. outStream.writeWord(1688);
  4821. outStream.writeByte(targetSlot);
  4822. outStream.writeWord(wearID+1);
  4823. if (wearAmount > 254) {
  4824. outStream.writeByte(255);
  4825. outStream.writeDWord(wearAmount);
  4826. } else {
  4827. outStream.writeByte(wearAmount); // amount
  4828. }
  4829. outStream.endFrameVarSizeWord();
  4830. playerEquipment[targetSlot] = wearID;
  4831. playerEquipmentN[targetSlot] = wearAmount;
  4832. if (targetSlot == playerWeapon && playerEquipment[playerShield] != -1 && Item.itemTwoHanded[wearID] == true) {
  4833. remove(playerEquipment[playerShield], playerShield);
  4834. }
  4835. if (targetSlot == playerWeapon) {
  4836. SendWeapon(wearID, GetItemName(wearID));
  4837. playerSE = GetStandAnim(wearID);
  4838. playerSEW = GetWalkAnim(wearID);
  4839. playerSER = GetRunAnim(wearID);
  4840. playerSEA = 0x326;
  4841. pEmote = playerSE;
  4842. }
  4843. ResetBonus();
  4844. GetBonus();
  4845. wearing = false;
  4846. WriteBonus();
  4847. updateRequired = true;
  4848. appearanceUpdateRequired = true;
  4849. return true;
  4850. }
  4851. return false;
  4852. }
  4853.  
  4854. public int itemType(int item) {
  4855. for (int i = 0; i < Item.capes.length; i++) {
  4856. if (item == Item.capes[i]) {
  4857. return playerCape;
  4858. }
  4859. }
  4860. for (int i = 0; i < Item.hats.length; i++) {
  4861. if (item == Item.hats[i]) {
  4862. return playerHat;
  4863. }
  4864. }
  4865. for (int i = 0; i < Item.boots.length; i++) {
  4866. if (item == Item.boots[i]) {
  4867. return playerFeet;
  4868. }
  4869. }
  4870. for (int i = 0; i < Item.gloves.length; i++) {
  4871. if (item == Item.gloves[i]) {
  4872. return playerHands;
  4873. }
  4874. }
  4875. for (int i = 0; i < Item.shields.length; i++) {
  4876. if (item == Item.shields[i]) {
  4877. return playerShield;
  4878. }
  4879. }
  4880. for (int i = 0; i < Item.amulets.length; i++) {
  4881. if (item == Item.amulets[i]) {
  4882. return playerAmulet;
  4883. }
  4884. }
  4885. for (int i = 0; i < Item.arrows.length; i++) {
  4886. if (item == Item.arrows[i]) {
  4887. return playerArrows;
  4888. }
  4889. }
  4890. for (int i = 0; i < Item.rings.length; i++) {
  4891. if (item == Item.rings[i]) {
  4892. return playerRing;
  4893. }
  4894. }
  4895. for (int i = 0; i < Item.body.length; i++) {
  4896. if (item == Item.body[i]) {
  4897. return playerChest;
  4898. }
  4899. }
  4900. for (int i = 0; i < Item.legs.length; i++) {
  4901. if (item == Item.legs[i]) {
  4902. return playerLegs;
  4903. }
  4904. }
  4905.  
  4906. // Default
  4907. return playerWeapon;
  4908. }
  4909.  
  4910. public void remove(int wearID, int slot) {
  4911. if (duelFight && duelRule[3]) {
  4912. sendMessage("Equipment changing has been disabled in this duel!");
  4913. return;
  4914. }
  4915. if (addItem(playerEquipment[slot], playerEquipmentN[slot])) {
  4916. playerEquipment[slot] = -1;
  4917. playerEquipmentN[slot] = 0;
  4918. outStream.createFrame(34);
  4919. outStream.writeWord(6);
  4920. outStream.writeWord(1688);
  4921. outStream.writeByte(slot);
  4922. outStream.writeWord(0);
  4923. outStream.writeByte(0);
  4924. ResetBonus();
  4925. GetBonus();
  4926. WriteBonus();
  4927. if (slot == playerWeapon) {
  4928. SendWeapon(-1, "Unarmed");
  4929. }
  4930. updateRequired = true;
  4931. appearanceUpdateRequired = true;
  4932. }
  4933. }
  4934.  
  4935. public void deleteequiment(int wearID, int slot) {
  4936. playerEquipment[slot] = -1;
  4937. playerEquipmentN[slot] = 0;
  4938. outStream.createFrame(34);
  4939. outStream.writeWord(6);
  4940. outStream.writeWord(1688);
  4941. outStream.writeByte(slot);
  4942. outStream.writeWord(0);
  4943. outStream.writeByte(0);
  4944. ResetBonus();
  4945. GetBonus();
  4946. WriteBonus();
  4947. updateRequired = true;
  4948. appearanceUpdateRequired = true;
  4949. }
  4950.  
  4951. public void TeleTo(String s, int level) {
  4952. if (duelStatus == 3) {
  4953. sendMessage("You can't move during a duel!");
  4954. return;
  4955. }
  4956. if (actionTimer == 0) {
  4957. teleX = absX;
  4958. teleY = absY;
  4959. newheightLevel = heightLevel;
  4960.  
  4961. closeInterface();
  4962. teleport();
  4963. actionTimer = 10;
  4964. updateRequired = true;
  4965. appearanceUpdateRequired = true;
  4966. }
  4967. }
  4968.  
  4969. public void setChatOptions(int publicChat, int privateChat, int tradeBlock) {
  4970. outStream.createFrame(206);
  4971. outStream.writeByte(publicChat); // On = 0, Friends = 1, Off = 2, Hide = 3
  4972. outStream.writeByte(privateChat); // On = 0, Friends = 1, Off = 2
  4973. outStream.writeByte(tradeBlock); // On = 0, Friends = 1, Off = 2
  4974. }
  4975.  
  4976. public void openWelcomeScreen(int recoveryChange, boolean memberWarning, int messages, int lastLoginIP, int lastLogin) {
  4977. outStream.createFrame(176);
  4978. // days since last recovery change 200 for not yet set 201 for members server,
  4979. // otherwise, how many days ago recoveries have been changed.
  4980. outStream.writeByteC(recoveryChange);
  4981. outStream.writeWordA(messages); // # of unread messages
  4982. outStream.writeByte(memberWarning ? 1 : 0); // 1 for member on non-members world warning
  4983. outStream.writeDWord_v2(lastLoginIP); // ip of last login
  4984. outStream.writeWord(lastLogin); // days
  4985. }
  4986.  
  4987. public void setClientConfig(int id, int state) {
  4988. outStream.createFrame(36);
  4989. outStream.writeWordBigEndian(id);
  4990. outStream.writeByte(state);
  4991. }
  4992.  
  4993. public void initializeClientConfiguration() {
  4994. // TODO: this is sniffed from a session (?), yet have to figure out what each of these does.
  4995. setClientConfig(18, 1);
  4996. setClientConfig(19, 0);
  4997. setClientConfig(25, 0);
  4998. setClientConfig(43, 0);
  4999. setClientConfig(44, 0);
  5000. setClientConfig(75, 0);
  5001. setClientConfig(83, 0);
  5002. setClientConfig(84, 0);
  5003. setClientConfig(85, 0);
  5004. setClientConfig(86, 0);
  5005. setClientConfig(87, 0);
  5006. setClientConfig(88, 0);
  5007. setClientConfig(89, 0);
  5008. setClientConfig(90, 0);
  5009. setClientConfig(91, 0);
  5010. setClientConfig(92, 0);
  5011. setClientConfig(93, 0);
  5012. setClientConfig(94, 0);
  5013. setClientConfig(95, 0);
  5014. setClientConfig(96, 0);
  5015. setClientConfig(97, 0);
  5016. setClientConfig(98, 0);
  5017. setClientConfig(99, 0);
  5018. setClientConfig(100, 0);
  5019. setClientConfig(101, 0);
  5020. setClientConfig(104, 0);
  5021. setClientConfig(106, 0);
  5022. setClientConfig(108, 0);
  5023. setClientConfig(115, 0);
  5024. setClientConfig(143, 0);
  5025. setClientConfig(153, 0);
  5026. setClientConfig(156, 0);
  5027. setClientConfig(157, 0);
  5028. setClientConfig(158, 0);
  5029. setClientConfig(166, 0);
  5030. setClientConfig(167, 0);
  5031. setClientConfig(168, 0);
  5032. setClientConfig(169, 0);
  5033. setClientConfig(170, 0);
  5034. setClientConfig(171, 0);
  5035. setClientConfig(172, 0);
  5036. setClientConfig(173, 0);
  5037. setClientConfig(174, 0);
  5038. setClientConfig(203, 0);
  5039. setClientConfig(210, 0);
  5040. setClientConfig(211, 0);
  5041. setClientConfig(261, 0);
  5042. setClientConfig(262, 0);
  5043. setClientConfig(263, 0);
  5044. setClientConfig(264, 0);
  5045. setClientConfig(265, 0);
  5046. setClientConfig(266, 0);
  5047. setClientConfig(268, 0);
  5048. setClientConfig(269, 0);
  5049. setClientConfig(270, 0);
  5050. setClientConfig(271, 0);
  5051. setClientConfig(280, 0);
  5052. setClientConfig(286, 0);
  5053. setClientConfig(287, 0);
  5054. setClientConfig(297, 0);
  5055. setClientConfig(298, 0);
  5056. setClientConfig(301, 01);
  5057. setClientConfig(304, 01);
  5058. setClientConfig(309, 01);
  5059. setClientConfig(311, 01);
  5060. setClientConfig(312, 01);
  5061. setClientConfig(313, 01);
  5062. setClientConfig(330, 01);
  5063. setClientConfig(331, 01);
  5064. setClientConfig(342, 01);
  5065. setClientConfig(343, 01);
  5066. setClientConfig(344, 01);
  5067. setClientConfig(345, 01);
  5068. setClientConfig(346, 01);
  5069. setClientConfig(353, 01);
  5070. setClientConfig(354, 01);
  5071. setClientConfig(355, 01);
  5072. setClientConfig(356, 01);
  5073. setClientConfig(361, 01);
  5074. setClientConfig(362, 01);
  5075. setClientConfig(363, 01);
  5076. setClientConfig(377, 01);
  5077. setClientConfig(378, 01);
  5078. setClientConfig(379, 01);
  5079. setClientConfig(380, 01);
  5080. setClientConfig(383, 01);
  5081. setClientConfig(388, 01);
  5082. setClientConfig(391, 01);
  5083. setClientConfig(393, 01);
  5084. setClientConfig(399, 01);
  5085. setClientConfig(400, 01);
  5086. setClientConfig(406, 01);
  5087. setClientConfig(408, 01);
  5088. setClientConfig(414, 01);
  5089. setClientConfig(417, 01);
  5090. setClientConfig(423, 01);
  5091. setClientConfig(425, 01);
  5092. setClientConfig(427, 01);
  5093. setClientConfig(433, 01);
  5094. setClientConfig(435, 01);
  5095. setClientConfig(436, 01);
  5096. setClientConfig(437, 01);
  5097. setClientConfig(439, 01);
  5098. setClientConfig(440, 01);
  5099. setClientConfig(441, 01);
  5100. setClientConfig(442, 01);
  5101. setClientConfig(443, 01);
  5102. setClientConfig(445, 01);
  5103. setClientConfig(446, 01);
  5104. setClientConfig(449, 01);
  5105. setClientConfig(452, 01);
  5106. setClientConfig(453, 01);
  5107. setClientConfig(455, 01);
  5108. setClientConfig(464, 01);
  5109. setClientConfig(465, 01);
  5110. setClientConfig(470, 01);
  5111. setClientConfig(482, 01);
  5112. setClientConfig(486, 01);
  5113. setClientConfig(491, 01);
  5114. setClientConfig(492, 01);
  5115. setClientConfig(493, 01);
  5116. setClientConfig(496, 01);
  5117. setClientConfig(497, 01);
  5118. setClientConfig(498, 01);
  5119. setClientConfig(499, 01);
  5120. setClientConfig(502, 01);
  5121. setClientConfig(503, 01);
  5122. setClientConfig(504, 01);
  5123. setClientConfig(505, 01);
  5124. setClientConfig(506, 01);
  5125. setClientConfig(507, 01);
  5126. setClientConfig(508, 01);
  5127. setClientConfig(509, 01);
  5128. setClientConfig(510, 01);
  5129. setClientConfig(511, 01);
  5130. setClientConfig(512, 01);
  5131. setClientConfig(515, 01);
  5132. setClientConfig(518, 01);
  5133. setClientConfig(520, 01);
  5134. setClientConfig(521, 01);
  5135. setClientConfig(524, 01);
  5136. setClientConfig(525, 01);
  5137. setClientConfig(531, 01);
  5138. }
  5139.  
  5140. public int GetLastLogin(int Date) {
  5141. Calendar cal = new GregorianCalendar();
  5142. int day = cal.get(Calendar.DAY_OF_MONTH);
  5143. int month = cal.get(Calendar.MONTH);
  5144. int year = cal.get(Calendar.YEAR);
  5145. int calc = ((year*10000)+(month*100)+day);
  5146.  
  5147. return (calc-Date);
  5148. }
  5149.  
  5150. // upon connection of a new client all the info has to be sent to client prior to starting the regular communication
  5151. public void initialize() {
  5152. objects();
  5153. // first packet sent
  5154. outStream.createFrame(249);
  5155. outStream.writeByteA(playerIsMember); // 1 for members, zero for free
  5156. outStream.writeWordBigEndianA(playerId);
  5157.  
  5158. // here is the place for seting up the UI, stats, etc...
  5159. setChatOptions(0, 0, 0);
  5160. for (int i = 0; i < 25; i++) {
  5161. setSkillLevel(i, playerLevel[i], playerXP[i]);
  5162. }
  5163. refreshSkills();
  5164.  
  5165. outStream.createFrame(107); // resets something in the client
  5166.  
  5167. setSidebarInterface(0, 2423); // attack tab
  5168. setSidebarInterface(1, 3917); // skills tab
  5169. setSidebarInterface(2, 638); // quest tab
  5170. setSidebarInterface(3, 3213); // backpack tab
  5171. setSidebarInterface(4, 1644); // items wearing tab
  5172. setSidebarInterface(5, 5608); // pray tab
  5173. setSidebarInterface(6, 12855); // magic tab (ancient = 12855)
  5174. setSidebarInterface(7, -1); // ancient magicks
  5175. setSidebarInterface(8, 5065); // friend
  5176. setSidebarInterface(9, 5715); // ignore
  5177. setSidebarInterface(10, 2449); // logout tab
  5178. setSidebarInterface(11, 4445); // wrench tab
  5179. setSidebarInterface(12, 147); // run tab
  5180. setSidebarInterface(13, 1); // harp tab
  5181.  
  5182. // add player commands...
  5183.  
  5184. int dots = 0;
  5185. int start[] = {
  5186. 0, 0, 0, 0
  5187. };
  5188. int IPPart1 = 127;
  5189. int IPPart2 = 0;
  5190. int IPPart3 = 0;
  5191. int IPPart4 = 1;
  5192.  
  5193. if (playerLastConnect.length() < 7) {
  5194. playerLastConnect = connectedFrom;
  5195. }
  5196. if (playerLastConnect.length() <= 15) {
  5197. for (int j = 0; j <= playerLastConnect.length(); j++) {
  5198. if ((j+1) <= playerLastConnect.length()) {
  5199. if (playerLastConnect.substring(j, (j+1)).equals(".")) {
  5200. start[dots] = j;
  5201. dots++;
  5202. }
  5203. if (dots == 3) {
  5204. break;
  5205. }
  5206. }
  5207. }
  5208. if (dots == 3) {
  5209. IPPart1 = Integer.parseInt(playerLastConnect.substring(0, start[0]));
  5210. IPPart2 = Integer.parseInt(playerLastConnect.substring((start[0]+1), start[1]));
  5211. IPPart3 = Integer.parseInt(playerLastConnect.substring((start[1]+1), start[2]));
  5212. IPPart4 = Integer.parseInt(playerLastConnect.substring((start[2]+1)));
  5213. }
  5214. } else {
  5215. for (int j = 0; j <= playerLastConnect.length(); j++) {
  5216. if ((j+1) <= playerLastConnect.length()) {
  5217. if (playerLastConnect.substring(j, (j+1)).equals("-")) {
  5218. start[dots] = j;
  5219. dots++;
  5220. }
  5221. if (dots == 4) {
  5222. break;
  5223. }
  5224. }
  5225. }
  5226. if (dots == 4) {
  5227. try {
  5228. IPPart1 = Integer.parseInt(playerLastConnect.substring(0, start[0]));
  5229. IPPart2 = Integer.parseInt(playerLastConnect.substring((start[0]+1), start[1]));
  5230. IPPart3 = Integer.parseInt(playerLastConnect.substring((start[1]+1), start[2]));
  5231. IPPart4 = Integer.parseInt(playerLastConnect.substring((start[2]+1), (start[3])));
  5232. } catch (NumberFormatException e) {
  5233. }
  5234. }
  5235. }
  5236. setClientConfig(108, 0);
  5237. sendMessage("Welcome to Zernix!");
  5238. if (premium) {
  5239. sendMessage("Your account has premium member status");
  5240. } else {
  5241. sendMessage("You are not a premium member.");
  5242. }
  5243. if (playerMessages > 0)
  5244. sendMessage("You have "+playerMessages+" new messages. Check your inbox at Odion.com to view them.");
  5245. // FACE: 0= WEST | -1 = NORTH | -2 = EAST | -3 = SOUTH
  5246. updateRating();
  5247. //setSidebarInterface(6, 1151);
  5248. sendFrame126(""+playerLevel[0]+"", 4004);
  5249. sendFrame126(""+getLevelForXP(playerXP[0])+"", 4005);
  5250. sendFrame126(""+playerLevel[1]+"", 4008);
  5251. sendFrame126(""+getLevelForXP(playerXP[1])+"", 4009);
  5252. sendFrame126(""+playerLevel[2]+"", 4006);
  5253. sendFrame126(""+getLevelForXP(playerXP[2])+"", 4007);
  5254. sendFrame126(""+currentHealth+"", 4016);
  5255. sendFrame126(""+getLevelForXP(playerXP[3])+"", 4017);
  5256. sendFrame126(""+playerLevel[4]+"", 4010);
  5257. sendFrame126(""+getLevelForXP(playerXP[4])+"", 4011);
  5258. sendFrame126(""+playerLevel[5]+"", 4012);
  5259. sendFrame126(""+getLevelForXP(playerXP[5])+"", 4013);
  5260. sendFrame126(""+playerLevel[6]+"", 4014);
  5261. sendFrame126(""+getLevelForXP(playerXP[6])+"", 4015);
  5262. sendFrame126(""+playerLevel[7]+"", 4034);
  5263. sendFrame126(""+getLevelForXP(playerXP[7])+"", 4035);
  5264. sendFrame126(""+playerLevel[8]+"", 4038);
  5265. sendFrame126(""+getLevelForXP(playerXP[8])+"", 4039);
  5266. sendFrame126(""+playerLevel[9]+"", 4026);
  5267. sendFrame126(""+getLevelForXP(playerXP[9])+"", 4027);
  5268. sendFrame126(""+playerLevel[10]+"", 4032);
  5269. sendFrame126(""+getLevelForXP(playerXP[10])+"", 4033);
  5270. sendFrame126(""+playerLevel[11]+"", 4036);
  5271. sendFrame126(""+getLevelForXP(playerXP[11])+"", 4037);
  5272. sendFrame126(""+playerLevel[12]+"", 4024);
  5273. sendFrame126(""+getLevelForXP(playerXP[12])+"", 4025);
  5274. sendFrame126(""+playerLevel[13]+"", 4030);
  5275. sendFrame126(""+getLevelForXP(playerXP[13])+"", 4031);
  5276. sendFrame126(""+playerLevel[14]+"", 4028);
  5277. sendFrame126(""+getLevelForXP(playerXP[14])+"", 4029);
  5278. sendFrame126(""+playerLevel[15]+"", 4020);
  5279. sendFrame126(""+getLevelForXP(playerXP[15])+"", 4021);
  5280. sendFrame126(""+playerLevel[16], 4018);
  5281. sendFrame126(""+getLevelForXP(playerXP[16]), 4019);
  5282. sendFrame126(""+playerLevel[17], 4022);
  5283. sendFrame126(""+getLevelForXP(playerXP[17]), 4023);
  5284. sendFrame126(""+playerLevel[20], 4152);
  5285. sendFrame126(""+getLevelForXP(playerXP[20]), 4153);
  5286. if (playerPass.equals("")) {
  5287. sendMessage("No password set! Use ::pass [PASSWORD] to set one.");
  5288. }
  5289.  
  5290. WriteEnergy();
  5291. //sendFrame126("Project16", 2451);
  5292. sendFrame126("", 6067);
  5293. sendFrame126("", 6071);
  5294. SendWeapon(-1, "Unarmed");
  5295.  
  5296. handler.updatePlayer(this, outStream);
  5297. handler.updateNPC(this, outStream);
  5298. setEquipment(playerEquipment[playerHat], playerEquipmentN[playerHat], playerHat);
  5299. setEquipment(playerEquipment[playerCape], playerEquipmentN[playerCape], playerCape);
  5300. setEquipment(playerEquipment[playerAmulet], playerEquipmentN[playerAmulet], playerAmulet);
  5301. setEquipment(playerEquipment[playerArrows], playerEquipmentN[playerArrows], playerArrows);
  5302. setEquipment(playerEquipment[playerChest], playerEquipmentN[playerChest], playerChest);
  5303. setEquipment(playerEquipment[playerShield], playerEquipmentN[playerShield], playerShield);
  5304. setEquipment(playerEquipment[playerLegs], playerEquipmentN[playerLegs], playerLegs);
  5305. setEquipment(playerEquipment[playerHands], playerEquipmentN[playerHands], playerHands);
  5306. setEquipment(playerEquipment[playerFeet], playerEquipmentN[playerFeet], playerFeet);
  5307. setEquipment(playerEquipment[playerRing], playerEquipmentN[playerRing], playerRing);
  5308. setEquipment(playerEquipment[playerWeapon], playerEquipmentN[playerWeapon], playerWeapon);
  5309. resetItems(3214);
  5310. resetBank();
  5311.  
  5312. ResetBonus();
  5313. GetBonus();
  5314. WriteBonus();
  5315. //objects
  5316. /*ReplaceObject(2090, 3267, 3430, 0, 22);
  5317. ReplaceObject(2094, 3268, 3431, 0, 22);
  5318. ReplaceObject(2092, 3269, 3431, 0, 22);
  5319. removeObject(2735, 3449, 8173);
  5320. removeObject(2723, 3454, 8173);
  5321. removeObject(2783, 2613, 3081);
  5322. removeObject(2613, 3078, 2783);
  5323. removeObject(2721, 3459, 8173);*/
  5324. for (int c = 0; c < server.objectHandler.ObjectID.length; c++) {
  5325. if (server.objectHandler.ObjectID[c] == -1)
  5326. continue;
  5327. addObject(server.objectHandler.ObjectX[c], server.objectHandler.ObjectY[c], server.objectHandler.ObjectID[c], server.objectHandler.ObjectFace[c]);
  5328. }
  5329.  
  5330. pmstatus(2);
  5331. boolean pmloaded = false;
  5332.  
  5333. for (int i = 0; i < friends.length; i++) {
  5334. if (friends[i] != 0) {
  5335. for (int i2 = 1; i2 < handler.maxPlayers; i2++) {
  5336. if (handler.players[i2] != null && handler.players[i2].isActive && misc.playerNameToInt64(handler.players[i2].playerName) == friends[i]) {
  5337. if (playerRights >= 2 || handler.players[i2].Privatechat == 0 || (handler.players[i2].Privatechat == 1 && handler.players[i2].isinpm(misc.playerNameToInt64(playerName)))) {
  5338. loadpm(friends[i], GetWorld(i2));
  5339. pmloaded = true;
  5340. }
  5341. break;
  5342. }
  5343. }
  5344. if (!pmloaded) {
  5345. loadpm(friends[i], 0);
  5346. }
  5347. pmloaded = false;
  5348. }
  5349. }
  5350. for (int i1 = 1; i1 < handler.maxPlayers; i1++) {
  5351. if (handler.players[i1] != null && handler.players[i1].isActive == true) {
  5352. handler.players[i1].pmupdate(playerId, GetWorld(playerId));
  5353. }
  5354. }
  5355. // Objects
  5356. for (int i = 0; i < server.objectHandler.MaxObjects; i++) {
  5357. if (server.objectHandler.ObjectID[i] > -1) {
  5358. if (server.objectHandler.ObjectOpen[i] != server.objectHandler.ObjectOriOpen[i]) {
  5359. ChangeDoor(i);
  5360. }
  5361. }
  5362. }
  5363. //start of free quests
  5364. sendQuest("Zernix Quests", 640);
  5365. sendQuest("", 663);
  5366. sendQuest("", 7332);
  5367. sendQuest("", 7331);
  5368. sendQuest("", 7332);
  5369. sendQuest("", 7333);
  5370. sendQuest("", 7334);
  5371. sendQuest("", 7336);
  5372. sendQuest("", 7383);
  5373. sendQuest("", 7339);
  5374. sendQuest("", 7338);
  5375. sendQuest("", 7340);
  5376. sendQuest("", 7346);
  5377. sendQuest("", 7341);
  5378. sendQuest("", 7342);
  5379. sendQuest("", 7337);
  5380. sendQuest("", 7343);
  5381. sendQuest("", 7335);
  5382. sendQuest("", 7344);
  5383. sendQuest("", 7345);
  5384. sendQuest("", 7346);
  5385. sendQuest("", 7347);
  5386. sendQuest("", 7348);
  5387. sendQuest("", 12772);
  5388. sendQuest("", 673);
  5389. sendQuest("", 7352);
  5390. sendQuest("", 17510);
  5391. sendQuest("", 7353);
  5392. sendQuest("", 12129);
  5393. sendQuest("", 8438);
  5394. sendQuest("", 12852);
  5395. sendQuest("", 15841);
  5396. sendQuest("", 7354);
  5397. sendQuest("", 7355);
  5398. sendQuest("", 7356);
  5399. sendQuest("", 8679);
  5400. sendQuest("", 7459);
  5401. sendQuest("", 16149);
  5402. sendQuest("", 6987);
  5403. sendQuest("", 7357);
  5404. sendQuest("", 12836);
  5405. sendQuest("", 7358);
  5406. sendQuest("", 7359);
  5407. sendQuest("", 14169);
  5408. sendQuest("", 10115);
  5409. sendQuest("", 14604);
  5410. sendQuest("", 7360);
  5411. sendQuest("", 12282);
  5412. sendQuest("", 13577);
  5413. sendQuest("", 12839);
  5414. sendQuest("", 7361);
  5415. sendQuest("", 16128);
  5416. sendQuest("", 11857);
  5417. sendQuest("", 7362);
  5418. sendQuest("", 7363);
  5419. sendQuest("", 7364);
  5420. sendQuest("", 10135);
  5421. sendQuest("", 4508);
  5422. sendQuest("", 18517);
  5423. sendQuest("", 11907);
  5424. sendQuest("", 7365);
  5425. sendQuest("", 7366);
  5426. sendQuest("", 7367);
  5427. sendQuest("", 13389);
  5428. sendQuest("", 15487);
  5429. sendQuest("", 7368);
  5430. sendQuest("", 11132);
  5431. sendQuest("", 7369);
  5432. sendQuest("", 12389);
  5433. sendQuest("", 13974);
  5434. sendQuest("", 6027);
  5435. sendQuest("", 7370);
  5436. sendQuest("", 8137);
  5437. sendQuest("", 7371);
  5438. sendQuest("", 12345);
  5439. sendQuest("", 7372);
  5440. sendQuest("", 8115);
  5441. sendQuest("", 18684);
  5442. sendQuest("", 15499);
  5443. sendQuest("", 18306);
  5444. sendQuest("", 668);
  5445. sendQuest("", 8576);
  5446. sendQuest("", 12139);
  5447. sendQuest("", 14912);
  5448. sendQuest("", 7373);
  5449. sendQuest("", 7374);
  5450. sendQuest("", 8969);
  5451. sendQuest("", 15352);
  5452. sendQuest("", 7375);
  5453. sendQuest("", 7376);
  5454. sendQuest("", 15098);
  5455. sendQuest("", 15592);
  5456. sendQuest("", 249);
  5457. sendQuest("", 1740);
  5458. sendQuest("", 15235);
  5459. sendQuest("", 3278);
  5460. sendQuest("", 7378);
  5461. sendQuest("", 6518);
  5462. sendQuest("", 7379);
  5463. sendQuest("", 7380);
  5464. sendQuest("", 7381);
  5465. sendQuest("", 11858);
  5466. sendQuest("", 191);
  5467. sendQuest("", 9927);
  5468. sendQuest("", 6024);
  5469. sendQuest("", 7349);
  5470. sendQuest("", 7351);
  5471. sendQuest("", 7350);
  5472. sendQuest("", 13356);
  5473. sendQuest("Accept Aid", 12585);
  5474. sendQuest("Zernix, always use the", 2451);
  5475. sendQuest("", 682);
  5476. sendQuest("", 6294);
  5477. sendQuest("", 6295);
  5478. sendQuest("", 6296);
  5479. sendQuest("", 6300);
  5480. sendQuest("", 6301);
  5481. sendQuest("", 6302);
  5482. sendQuest("", 6303);
  5483. sendQuest("", 6304);
  5484. sendQuest("", 6305);
  5485. sendQuest("", 6306);
  5486. sendQuest("", 6307);
  5487. //End of quests
  5488.  
  5489. sendQuest("Nardan Teleport", 13037);
  5490. sendQuest("Teleport back home", 13038);
  5491. sendQuest("@gre@0/0", 13042);
  5492. sendQuest("@gre@0/0", 13043);
  5493. sendQuest("@gre@0/0", 13044);
  5494. sendQuest("Ardourgne Teleport", 13047);
  5495. sendQuest("Ardourgne", 13048);
  5496. sendQuest("@gre@0/0", 13051);
  5497. sendQuest("@gre@0/0", 13052);
  5498. sendQuest("Camelot Teleport", 13055);
  5499. sendQuest("Camelot", 13056);
  5500. sendQuest("@gre@0/0", 13059);
  5501. sendQuest("@gre@0/0", 13060);
  5502. sendQuest("Port Khazard Teleport", 13063);
  5503. sendQuest("Port Khazard", 13064);
  5504. sendQuest("@gre@0/0", 13067);
  5505. sendQuest("@gre@0/0", 13068);
  5506. sendQuest("Lletya Teleport", 13071);
  5507. sendQuest("Lletya", 13072);
  5508. sendQuest("@gre@0/0", 13076);
  5509. sendQuest("@gre@0/0", 13077);
  5510. sendQuest("@gre@0/0", 13078);
  5511. sendQuest("Grand Tree Teleport", 13081);
  5512. sendQuest("Grand Tree", 13082);
  5513. sendQuest("@gre@0/0", 13085);
  5514. sendQuest("@gre@0/0", 13086);
  5515. sendQuest("Crandor Teleport", 13089);
  5516. sendQuest("Crandor", 13090);
  5517. sendQuest("@gre@0/0", 13093);
  5518. sendQuest("@gre@0/0", 13094);
  5519. sendQuest("Monastery Teleport", 13097);
  5520. sendQuest("Monastery", 13098);
  5521. sendQuest("@gre@0/0", 13101);
  5522. sendQuest("@gre@0/0", 13102);
  5523. sendQuest("@gre@0/0", 12947); //smoke rush
  5524. sendQuest("@gre@0/0", 12948); //smoke rush
  5525. sendQuest("@gre@0/0", 12949); //smoke rush
  5526. sendQuest("@gre@0/0", 12950); //smoke rush
  5527. sendQuest("@gre@0/0", 12998); //shadow rush
  5528. sendQuest("@gre@0/0", 12997); //shadow rush
  5529. sendQuest("@gre@0/0", 12996); //shadow rush
  5530. sendQuest("@gre@0/0", 12995); //shadow rush
  5531. sendQuest("@gre@0/0", 12908); //blood rush
  5532. sendQuest("@gre@0/0", 12909); //blood rush
  5533. sendQuest("@gre@0/0", 12910); //blood rush
  5534. sendQuest("@gre@0/0", 12868); //ice rush
  5535. sendQuest("@gre@0/0", 12869); //ice rush
  5536. sendQuest("@gre@0/0", 12870); //ice rush
  5537. sendQuest("@gre@0/0", 12974); //smoke burst
  5538. sendQuest("@gre@0/0", 12973); //smoke burst
  5539. sendQuest("@gre@0/0", 12971); //smoke burst
  5540. sendQuest("@gre@0/0", 12972); //smoke burst
  5541. sendQuest("@gre@0/0", 13022); //shadow burst
  5542. sendQuest("@gre@0/0", 13021); //shadow burst
  5543. sendQuest("@gre@0/0", 13019); //shadow burst
  5544. sendQuest("@gre@0/0", 13020); //shadow burst
  5545. sendQuest("@gre@0/0", 12927); //blood burst
  5546. sendQuest("@gre@0/0", 12928); //blood burst
  5547. sendQuest("@gre@0/0", 12926); //blood burst
  5548. sendQuest("@gre@0/0", 12889); //ice burst
  5549. sendQuest("@gre@0/0", 12890); //ice burst
  5550. sendQuest("@gre@0/0", 12888); //ice burst
  5551. sendQuest("@gre@0/0", 12959); //smoke blitz
  5552. sendQuest("@gre@0/0", 12960); //smoke blitz
  5553. sendQuest("@gre@0/0", 12961); //smoke blitz
  5554. sendQuest("@gre@0/0", 12962); //smoke blitz
  5555. sendQuest("@gre@0/0", 13007); //shadow blitz
  5556. sendQuest("@gre@0/0", 13008); //shadow blitz
  5557. sendQuest("@gre@0/0", 13009); //shadow blitz
  5558. sendQuest("@gre@0/0", 13010); //shadow blitz
  5559. sendQuest("@gre@0/0", 12917); //blood blitz
  5560. sendQuest("@gre@0/0", 12918); //blood blitz
  5561. sendQuest("@gre@0/0", 12879); //ice blitz
  5562. sendQuest("@gre@0/0", 12880); //ice blitz
  5563. sendQuest("@gre@0/0", 12878); //ice blitz
  5564. sendQuest("@gre@0/0", 12986); //smoke barrage
  5565. sendQuest("@gre@0/0", 12985); //smoke barrage
  5566. sendQuest("@gre@0/0", 12983); //smoke barrage
  5567. sendQuest("@gre@0/0", 12984); //smoke barrage
  5568. sendQuest("@gre@0/0", 13031); //shadow barrage
  5569. sendQuest("@gre@0/0", 13032); //shadow barrage
  5570. sendQuest("@gre@0/0", 13033); //shadow barrage
  5571. sendQuest("@gre@0/0", 13034); //shadow barrage
  5572. sendQuest("@gre@0/0", 12937); //blood barrage
  5573. sendQuest("@gre@0/0", 12938); //blood barrage
  5574. sendQuest("@gre@0/0", 12936); //blood barrage
  5575. sendQuest("@gre@0/0", 12899); //ice barrage
  5576. sendQuest("@gre@0/0", 12898); //ice barrage
  5577. sendQuest("@gre@0/0", 12900); //ice barrage
  5578. int[] lol = {
  5579. 13199, 13200, 13201,
  5580. 13250, 13251, 13252, 13253,
  5581. 13155, 13156, 13157,
  5582. //missing line//
  5583. 13224, 13225, 13226, 13227,
  5584. 13276, 13277, 13278, 13279,
  5585. 13175, 13176, 13177,
  5586. 13133, 13134, 13135,
  5587. 13211, 13212, 13213, 13214,
  5588. 13263, 13264, 13265, 13266,
  5589. 13165, 13166,
  5590. 13122, 13123, 13124,
  5591. 13237, 13238, 13239, 13240,
  5592. 13289, 13290, 13291, 13292,
  5593. 13186, 13187, 13188,
  5594. 13144, 13145, 13146
  5595. };
  5596. for(int auto = 0; auto < lol.length; auto++) {
  5597. sendQuest("@gre@0/0", lol[auto]);
  5598. }
  5599.  
  5600. //main
  5601. playerLastConnect = connectedFrom;
  5602. sendQuest("Using this will send a notification to all online mods", 5967);
  5603. sendQuest("@yel@Then click below to indicate which of our rules is being broken.", 5969);
  5604. sendQuest("4: Bug abuse (includes noclip)", 5974);
  5605. sendQuest("5: Odion staff impersonation", 5975);
  5606. sendQuest("6: Monster luring or abuse", 5976);
  5607. sendQuest("8: Item Duplication", 5978);
  5608. sendQuest("10: Misuse of yell channel", 5980);
  5609. sendQuest("12: Possible duped items", 5982);
  5610. /*openWelcomeScreen(201, true, playerMessages,
  5611. ((IPPart1 << 24) + (IPPart2 << 16) + (IPPart3 << 8)
  5612. + IPPart4),
  5613. GetLastLogin(playerLastLogin));*/
  5614. }
  5615.  
  5616. public void update() {
  5617. handler.updatePlayer(this, outStream);
  5618. handler.updateNPC(this, outStream);
  5619.  
  5620. flushOutStream();
  5621. }
  5622.  
  5623. public static final int packetSizes[] = {
  5624. 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, // 0
  5625. 0, 0, 0, 0, 8, 0, 6, 2, 2, 0, // 10
  5626. 0, 2, 0, 6, 0, 12, 0, 0, 0, 0, // 20
  5627. 0, 0, 0, 0, 0, 8, 4, 0, 0, 2, // 30
  5628. 2, 6, 0, 6, 0, -1, 0, 0, 0, 0, // 40
  5629. 0, 0, 0, 12, 0, 0, 0, 8, 0, 0, // 50
  5630. 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, // 60
  5631. 6, 0, 2, 2, 8, 6, 0, -1, 0, 6, // 70
  5632. 0, 0, 0, 0, 0, 1, 4, 6, 0, 0, // 80
  5633. 0, 0, 0, 0, 0, 3, 0, 0, -1, 0, // 90
  5634. 0, 13, 0, -1, 0, 0, 0, 0, 0, 0, // 100
  5635. 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, // 110
  5636. 1, 0, 6, 0, 0, 0, -1, 0, 2, 6, // 120
  5637. 0, 4, 6, 8, 0, 6, 0, 0, 0, 2, // 130
  5638. 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, // 140
  5639. 0, 0, 1, 2, 0, 2, 6, 0, 0, 0, // 150
  5640. 0, 0, 0, 0, -1, -1, 0, 0, 0, 0, // 160
  5641. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 170
  5642. 0, 8, 0, 3, 0, 2, 0, 0, 8, 1, // 180
  5643. 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, // 190
  5644. 2, 0, 0, 0, 0, 0, 0, 0, 4, 0, // 200
  5645. 4, 0, 0, 0, 7, 8, 0, 0, 10, 0, // 210
  5646. 0, 0, 0, 0, 0, 0, -1, 0, 6, 0, // 220
  5647. 1, 0, 0, 0, 6, 0, 6, 8, 1, 0, // 230
  5648. 0, 4, 0, 0, 0, 0, -1, 0, -1, 4, // 240
  5649. 0, 0, 6, 6, 0, 0, 0 // 250
  5650. };
  5651.  
  5652. public int packetSize = 0, packetType = -1;
  5653. public boolean process() {
  5654.  
  5655. objects();
  5656. scanPickup();
  5657. if (inroom && System.currentTimeMillis()-server.fuck >= 80000) {
  5658. server.fuck = System.currentTimeMillis();
  5659. games();
  5660. }
  5661. if (ingame && System.currentTimeMillis()-server.jizz >= 50000) {
  5662. end();
  5663. }
  5664.  
  5665. room();
  5666. wildLevel();
  5667. thiefdelay--;
  5668. clickCount--;
  5669. if(ani == true) {
  5670. anim ++;
  5671. setClientConfig(anim, 1);
  5672. sendMessage("config: "+anim+"");
  5673. }
  5674. if(anima == true) {
  5675. animat ++;
  5676. setClientConfig(animat, 0);
  5677. sendMessage("config: "+animat+"");
  5678. }
  5679. if(currentHealth >= playerLevel[3]) {
  5680. currentHealth = playerLevel[3];
  5681. }
  5682. if (clickCount > 0) {
  5683. runStream = false;
  5684. sendMessage("no try!");
  5685. }
  5686. //if(IsCutting) {
  5687. //sendMessage(""+(System.currentTimeMillis() - lastAction)+"");
  5688. //}
  5689. // is being called regularily every 500ms
  5690. /*for(int i = 0; i < server.npcHandler.npcs.length; i++){
  5691. if(server.npcHandler.npcs[i] != null){
  5692. int xDiff = Math.abs(absX - server.npcHandler.npcs[i].absX);
  5693. int yDiff = Math.abs(absY - server.npcHandler.npcs[i].absY);
  5694. if(xDiff >= server.npcHandler.npcs[i].aggroRadius || yDiff >= server.npcHandler.npcs[i].aggroRadius){
  5695. IsAttackingNPC = true;
  5696. attacknpc = i;
  5697. }
  5698. }
  5699. }*/
  5700. if (spamButton && System.currentTimeMillis()-lastButton > 1100) {
  5701. lastButton = System.currentTimeMillis();
  5702. if (currentButton >= 700) {
  5703. currentButton = 1;
  5704. currentStatus++;
  5705. }
  5706. if (currentStatus >= 255) {
  5707. spamButton = false;
  5708. }
  5709. println("sending button "+currentButton+", "+currentStatus);
  5710. frame36(currentButton, currentStatus);
  5711. currentButton++;
  5712. }
  5713. if (animationReset > 0 && System.currentTimeMillis() >= animationReset) {
  5714. animationReset = 0;
  5715. resetAnimation();
  5716. if (originalS > 0) {
  5717. wear(originalS, playerShield);
  5718. }
  5719. }
  5720. if (emoting && System.currentTimeMillis()-lastAction > 300) {
  5721. lastAction = System.currentTimeMillis();
  5722. pEmote++;
  5723. updateRequired = true;
  5724. appearanceUpdateRequired = true;
  5725. sendMessage("Trying emote "+pEmote+"... ");
  5726. }
  5727. if(ingame) {
  5728. long tits = ((50000-(System.currentTimeMillis()-server.jizz))/1000);
  5729. sendFrame126("Time left: "+tits+" Seconds", 6570);
  5730. setInterfaceWalkable(6673);
  5731. } else if(inroom) {
  5732. long tits = ((80000-(System.currentTimeMillis()-server.fuck))/1000);
  5733. sendFrame126("Time left: "+tits+" Seconds", 6570);
  5734. //sendFrame126("Players In room: "+server.playersinroom, 6572);
  5735. setInterfaceWalkable(6673);
  5736. } else {
  5737. sendFrame126("Zernix ("+PlayerHandler.getPlayerCount()+" online)", 6570);
  5738. sendFrame126("", 6572);
  5739. sendFrame126("", 6664);
  5740. setInterfaceWalkable(6673);
  5741. }
  5742. if (hitDiff > 0) {
  5743. sendQuest(""+currentHealth, 4016);
  5744. }
  5745. if (inTrade && tradeResetNeeded) {
  5746. client o = getClient(trade_reqId);
  5747. if (o.tradeResetNeeded) {
  5748. resetTrade();
  5749. o.resetTrade();
  5750. }
  5751. }
  5752. if (tStage == 1 && tTime == 0) {
  5753. pEmote = 1816;
  5754. //stillgfx(308, absY, absX, 0, 15);
  5755. updateRequired = true;
  5756. appearanceUpdateRequired = true;
  5757. tTime = System.currentTimeMillis();
  5758. tStage = 2;
  5759. }
  5760. if (tStage == 2 && System.currentTimeMillis()-tTime >= 900) {
  5761. teleportToX = tX;
  5762. teleportToY = tY;
  5763. heightLevel = tH;
  5764. updateRequired = true;
  5765. appearanceUpdateRequired = true;
  5766. tStage = 0;
  5767. tTime = 0;
  5768. resetAnimation();
  5769. }
  5770. /*long now = System.currentTimeMillis();
  5771. if(now - lastProcess <= 490){
  5772. for(int i = 0; i < ancientId.length; i++){
  5773. if(coolDown[i] > 0){
  5774. coolDown[i]--;
  5775. }
  5776. }
  5777. for(int i = 0; i < effects.length; i++){
  5778. if(effects[i] > 0){
  5779. effects[i]--;
  5780. }
  5781. }
  5782. }
  5783. lastProcess = now;*/
  5784. long current = System.currentTimeMillis();
  5785. if (inCombat && current-lastCombat >= 20000) {
  5786. inCombat = false;
  5787. }
  5788. if((playerEquipment[playerCape] == 9747) && playerLevel[playerAttack] <= 98) {
  5789. remove(playerEquipment[playerCape], playerCape);
  5790. sendMessage("You must have 99 Attack to weild this cape");
  5791. }
  5792. if((playerEquipment[playerCape] == 9798) && playerLevel[playerFishing] <= 98) {
  5793. remove(playerEquipment[playerCape], playerCape);
  5794. sendMessage("You must have 99 Fishing to weild this cape");
  5795. }
  5796. if((playerEquipment[playerCape] == 9756) && playerLevel[playerRanged] <= 98) {
  5797. remove(playerEquipment[playerCape], playerCape);
  5798. sendMessage("You must have 99 Range to weild this cape");
  5799. }
  5800. if((playerEquipment[playerCape] == 9759) && playerLevel[playerPrayer] <= 98) {
  5801. remove(playerEquipment[playerCape], playerCape);
  5802. sendMessage("You must have 99 prayer to weild this cape");
  5803. }
  5804. if((playerEquipment[playerCape] == 9771) && playerLevel[playerAgility] <= 98) {
  5805. remove(playerEquipment[playerCape], playerCape);
  5806. sendMessage("You must have 99 agility to weild this cape");
  5807. }
  5808. if((playerEquipment[playerCape] == 9774) && playerLevel[playerHerblore] <= 98) {
  5809. remove(playerEquipment[playerCape], playerCape);
  5810. sendMessage("You must have 99 herblore to weild this cape");
  5811. }
  5812. if((playerEquipment[playerCape] == 9753) && playerLevel[playerDefence] <= 98) {
  5813. remove(playerEquipment[playerCape], playerCape);
  5814. sendMessage("You must have 99 defence to weild this cape");
  5815. }
  5816. if((playerEquipment[playerCape] == 9795) && playerLevel[playerSmithing] <= 98) {
  5817. remove(playerEquipment[playerCape], playerCape);
  5818. sendMessage("You must have 99 smithing to weild this cape");
  5819. }
  5820. if((playerEquipment[playerCape] == 9786) && playerLevel[playerSlayer] <= 98) {
  5821. remove(playerEquipment[playerCape], playerCape);
  5822. sendMessage("You must have 99 slayer to weild this cape");
  5823. }
  5824. if((playerEquipment[playerCape] == 9807) && playerLevel[playerWoodcutting] <= 98) {
  5825. remove(playerEquipment[playerCape], playerCape);
  5826. sendMessage("You must have 99 woodcutting to weild this cape");
  5827. }
  5828. if((playerEquipment[playerCape] == 9750) && playerLevel[playerStrength] <= 98) {
  5829. remove(playerEquipment[playerCape], playerCape);
  5830. sendMessage("You must have 99 strength to weild this cape");
  5831. }
  5832. if((playerEquipment[playerCape] == 9762) && playerLevel[playerMagic] <= 98) {
  5833. remove(playerEquipment[playerCape], playerCape);
  5834. sendMessage("You must have 99 magic to weild this cape");
  5835. }
  5836. if((playerEquipment[playerCape] == 9810) && playerLevel[playerFarming] <= 98) {
  5837. remove(playerEquipment[playerCape], playerCape);
  5838. sendMessage("You must have 99 farming to weild this cape");
  5839. }
  5840. if((playerEquipment[playerCape] == 9792) && playerLevel[playerMining] <= 98) {
  5841. remove(playerEquipment[playerCape], playerCape);
  5842. sendMessage("You must have 99 mining to weild this cape");
  5843. }
  5844. if((playerEquipment[playerCape] == 9780) && playerLevel[playerCrafting] <= 98) {
  5845. remove(playerEquipment[playerCape], playerCape);
  5846. sendMessage("You must have 99 crafting to weild this cape");
  5847. }
  5848. if((playerEquipment[playerCape] == 9768) && playerLevel[playerHitpoints] <= 98) {
  5849. remove(playerEquipment[playerCape], playerCape);
  5850. sendMessage("You must have 99 hitpoints to weild this cape");
  5851. }
  5852. if((playerEquipment[playerCape] == 9804) && playerLevel[playerFiremaking] <= 98) {
  5853. remove(playerEquipment[playerCape], playerCape);
  5854. sendMessage("You must have 99 firemaking to weild this cape");
  5855. }
  5856. if((playerEquipment[playerCape] == 9801) && playerLevel[playerCooking] <= 98) {
  5857. remove(playerEquipment[playerCape], playerCape);
  5858. sendMessage("You must have 99 cooking to weild this cape");
  5859. }
  5860. if((playerEquipment[playerCape] == 9765) && playerLevel[playerRunecrafting] <= 98) {
  5861. remove(playerEquipment[playerCape], playerCape);
  5862. sendMessage("You must have 99 runecrafting to weild this cape");
  5863. }
  5864. if((playerEquipment[playerCape] == 9783) && playerLevel[playerFletching] <= 98) {
  5865. remove(playerEquipment[playerCape], playerCape);
  5866. sendMessage("You must have 99 fletching to weild this cape");
  5867. }
  5868. if((playerEquipment[playerCape] == 9777) && playerLevel[playerThieving] <= 98) {
  5869. remove(playerEquipment[playerCape], playerCape);
  5870. sendMessage("You must have 99 Thieving to weild this cape");
  5871. }
  5872.  
  5873. barTimer++;
  5874. if (barTimer >= 100) {
  5875. barTimer = 0;
  5876. }
  5877. if (server.ShutDown && System.currentTimeMillis() - PlayerHandler.updateStartTime > (PlayerHandler.updateSeconds*1000 + 20000)) {
  5878. savegame(true);
  5879. }
  5880. if (startDuel && duelChatTimer <= 0) {
  5881. startDuel = false;
  5882. }
  5883. if (GObjChange == 1 && GObjSet == 1) {
  5884. commitobj();
  5885. GObjChange = 0;
  5886. }
  5887. EntangleDelay -= 1;
  5888. teletimer -= 1;
  5889. if (teleport == true && teletimer >= 0) {
  5890. teleportToX = absX;
  5891. teleportToY = absY;
  5892. }
  5893.  
  5894. if (teleport == true && teletimer <= 0) {
  5895. if (ancientstele == false) {
  5896. setAnimation(715);
  5897. }
  5898. teleportToX = teleX;
  5899. teleportToY = teleY;
  5900. heightLevel = newheightLevel;
  5901. teleport = false;
  5902. teleX = 0;
  5903. teleY = 0;
  5904. newheightLevel = 0;
  5905. pEmote = playerSE;
  5906. updateRequired = true;
  5907. appearanceUpdateRequired = true;
  5908. }
  5909.  
  5910. iceTimer -= 1;
  5911. if (iceBarrage == true && iceTimer <= 0) {
  5912. iceBarrage = false;
  5913. }
  5914. if (iceBarrage == true) {
  5915. teleportToX = absX;
  5916. teleportToY = absY;
  5917. }
  5918.  
  5919. if (resetanim <= 0) {
  5920. resetAnimation();
  5921. resetanim = 8;
  5922. }
  5923.  
  5924. EntangleDelay -= 1;
  5925. stealtimer -= 1;
  5926. if (AnimationReset == true && actionTimer <= 0) {
  5927. resetAnimation();
  5928. AnimationReset = false;
  5929. emotes = 0;
  5930. pEmote = playerSE;
  5931. updateRequired = true;
  5932. appearanceUpdateRequired = true;
  5933. }
  5934. if (actionAmount < 0) {
  5935. actionAmount = 0;
  5936. }
  5937. if (actionTimer > 0) {
  5938. actionTimer -= 1;
  5939. }
  5940. if (attackTimer > 0) {
  5941. attackTimer -= 1;
  5942. }
  5943. if (actionAmount > 4) {
  5944. }
  5945. AddDroppedItems();
  5946. // GameTime
  5947. // Shop
  5948. if (UpdateShop == true) {
  5949. resetItems(3823);
  5950. resetShop(MyShopID);
  5951. }
  5952. // Energy
  5953. if (playerEnergy < 100) {
  5954. if (playerEnergyGian >= server.EnergyRegian) {
  5955. playerEnergy += 1;
  5956. playerEnergyGian = 0;
  5957. }
  5958. playerEnergyGian++;
  5959. if (playerEnergy >= 0) {
  5960. WriteEnergy();
  5961. }
  5962. }
  5963.  
  5964. //cooking check
  5965. if (cooking && System.currentTimeMillis()-lastAction >= 2000) {
  5966. lastAction = System.currentTimeMillis();
  5967. startCooking();
  5968. }
  5969. // wilderness check
  5970. if(!inDuel) {
  5971. outStream.createFrameVarSize(104);
  5972. outStream.writeByteC(3);
  5973. outStream.writeByteA(0);
  5974. outStream.writeString("null");
  5975. outStream.endFrameVarSize();
  5976. outStream.createFrameVarSize(104);
  5977. outStream.writeByteC(2); // command slot (does it matter which one?)
  5978. outStream.writeByteA(0); // 0 or 1; 0 if command should be placed on top in context menu
  5979. outStream.writeString("Duel");
  5980. outStream.endFrameVarSize();
  5981. outStream.createFrameVarSize(104);
  5982. outStream.writeByteC(1); // command slot
  5983. outStream.writeByteA(0); // 0 or 1; 1 if command should be placed on top in context menu
  5984. outStream.writeString("Trade with");
  5985. outStream.endFrameVarSize();
  5986. }
  5987. if(inDuel) {
  5988. outStream.createFrameVarSize(104);
  5989. outStream.writeByteC(3);
  5990. outStream.writeByteA(1);
  5991. outStream.writeString("Attack");
  5992. outStream.endFrameVarSize();
  5993. outStream.createFrameVarSize(104);
  5994. outStream.writeByteC(2); // command slot (does it matter which one?)
  5995. outStream.writeByteA(0); // 0 or 1; 0 if command should be placed on top in context menu
  5996. outStream.writeString("null");
  5997. outStream.endFrameVarSize();
  5998. outStream.createFrameVarSize(104);
  5999. outStream.writeByteC(1); // command slot
  6000. outStream.writeByteA(0); // 0 or 1; 1 if command should be placed on top in context menu
  6001. outStream.writeString("null");
  6002. outStream.endFrameVarSize();
  6003. }
  6004. // Crackers
  6005. if (CrackerMsg == true) {
  6006. crackCracker();
  6007. }
  6008. // check stairs
  6009. if (stairs > 0) {
  6010. if (GoodDistance(skillX, skillY, absX, absY, stairDistance) == true) {
  6011. stairs(stairs, absX, absY);
  6012. }
  6013. }
  6014. // objects
  6015. if (doors > -1) {
  6016. if (GoodDistance2(skillX, skillY, absX, absY, 1) == true) {
  6017. ChangeDoor(doors);
  6018. doors = -1;
  6019. }
  6020. }
  6021. // check banking
  6022. if (WanneBank > 0) {
  6023. if (GoodDistance(skillX, skillY, absX, absY, WanneBank) == true) {
  6024. openUpBank();
  6025. WanneBank = 0;
  6026. }
  6027. }
  6028. // check shopping
  6029. if (WanneShop > 0) {
  6030. if (GoodDistance(skillX, skillY, absX, absY, 1) == true) {
  6031. openUpShop(WanneShop);
  6032. WanneShop = 0;
  6033. }
  6034. }
  6035. // woodcutting check
  6036. if (woodcutting[0] > 0) {
  6037. if (GoodDistance(skillX, skillY, absX, absY, woodcutting[5]) == true) {
  6038. closeInterface();
  6039. woodcutting();
  6040. }
  6041. }
  6042.  
  6043. // Pick Up Item Check
  6044. if (WannePickUp == true && IsUsingSkill == false) {
  6045. if (pickUpItem(PickUpID, PickUpAmount) == true) {
  6046. PickUpID = 0;
  6047. PickUpAmount = 0;
  6048. PickUpDelete = 0;
  6049. WannePickUp = false;
  6050. }
  6051. }
  6052. // Attacking in wilderness
  6053. long thisTime = System.currentTimeMillis();
  6054. if (IsAttacking == true && deathStage == 0 && (thisTime-lastAttack >= 2000)) {
  6055. if (PlayerHandler.players[AttackingOn] != null) {
  6056. if (PlayerHandler.players[AttackingOn].currentHealth > 0) {
  6057. Attack();
  6058. } else {
  6059.  
  6060. ResetAttack();
  6061. //if(duelStatus == 3)
  6062. //DuelVictory(p.absX, p.absY);
  6063.  
  6064. }
  6065. } else {
  6066. ResetAttack();
  6067. }
  6068. }
  6069. // Attacking range in wilderness
  6070. /*
  6071. if (IsAttacking == true && IsDead == false && (thisTime - lastAttack >= 2000)) {
  6072. if (PlayerHandler.players[AttackingOn] != null) {
  6073. if (PlayerHandler.players[AttackingOn].IsDead == false) {
  6074. if ((playerEquipment[playerWeapon] == 859)
  6075. || (playerEquipment[playerWeapon] == 839)
  6076. || (playerEquipment[playerWeapon] == 841)
  6077. || (playerEquipment[playerWeapon] == 843)
  6078. || (playerEquipment[playerWeapon] == 845)
  6079. || (playerEquipment[playerWeapon] == 847)
  6080. || (playerEquipment[playerWeapon] == 849)
  6081. || (playerEquipment[playerWeapon] == 851)
  6082. || (playerEquipment[playerWeapon] == 853)
  6083. || (playerEquipment[playerWeapon] == 855)
  6084. || (playerEquipment[playerWeapon] == 857)
  6085. || (playerEquipment[playerWeapon] == 861)
  6086. || (playerEquipment[playerWeapon] == 4214)
  6087. || (playerEquipment[playerWeapon] == 4734)
  6088. && (playerEquipmentN[playerArrows] == 0)) {
  6089. Attackrange();
  6090. }
  6091. } else {
  6092. ResetAttack();
  6093. sendMessage("You only need a bow to train range, no arrows needed");
  6094. }
  6095. } else {
  6096. ResetAttack();
  6097. }
  6098. }*/
  6099. if (currentHealth == 0) {
  6100. deathStage = 1;
  6101. }
  6102. // Attacking an NPC
  6103. if (IsAttackingNPC == true && deathStage == 0) {
  6104. if (server.npcHandler.npcs[attacknpc] != null) {
  6105. if (server.npcHandler.npcs[attacknpc].IsDead == false && server.npcHandler.npcs[attacknpc].MaxHP > 0) {
  6106. AttackNPC();
  6107. } else {
  6108. ResetAttackNPC();
  6109. }
  6110. } else {
  6111. ResetAttackNPC();
  6112. }
  6113. }
  6114. // If killed apply dead
  6115. if (deathStage == 1) {
  6116. if (attacknpc > 0) { //was killed by a npc -bakatool
  6117. server.npcHandler.ResetAttackPlayer(attacknpc);
  6118. }
  6119. ResetAttack();
  6120. ResetAttackNPC();
  6121.  
  6122. deathStage = 2;
  6123. client p = getClient(duel_with);
  6124. if (duel_with > 0 && validClient(duel_with) && inDuel && duelFight) {
  6125. //p.killedPlayer(p.playerName, p.combatLevel);
  6126. //p.ResetAttack();
  6127. p.DuelVictory();
  6128. //duelStatus = 4;
  6129. //p.duelStatus = 4;
  6130. }
  6131. if (fightId > 0) {
  6132. client f = (client)server.playerHandler.players[fightId];
  6133. if (f != null) {
  6134. f.fighting = false;
  6135. f.hits = 0;
  6136. }
  6137. }
  6138. fighting = false;
  6139. hits = 0;
  6140. sendMessage("Oh dear, you have died!");
  6141. pEmote = 2820;
  6142. updateRequired = true;
  6143. appearanceUpdateRequired = true;
  6144. deathTimer = System.currentTimeMillis();
  6145. currentHealth = playerLevel[playerHitpoints];
  6146. }
  6147. if (deathStage == 2 && System.currentTimeMillis()-deathTimer >= 2500) {
  6148. teleportToX = 3430;
  6149. teleportToY = 2917;
  6150. heightLevel = 0;
  6151. currentHealth = playerLevel[playerHitpoints];
  6152. deathStage = 0;
  6153. resetAnimation();
  6154. }
  6155. // mining check
  6156. if (mining[0] > 0) {
  6157. if (GoodDistance(skillX, skillY, absX, absY, 1) == true) {
  6158. mining();
  6159. }
  6160. }
  6161. // smithing check
  6162. if (smithing[0] > 0) {
  6163. updateRequired = true;
  6164. appearanceUpdateRequired = true;
  6165. resetAnimation();
  6166. resetSM();
  6167. RemoveAllWindows();
  6168. }
  6169. // prayer check
  6170. if (prayer[0] > 0) {
  6171. prayer();
  6172. }
  6173. // healing check
  6174. if (healing[0] > 0) {
  6175. healing();
  6176. }
  6177. //Devolution: smelting
  6178. if (smelting && System.currentTimeMillis()-lastAction >= 1500) {
  6179. lastAction = System.currentTimeMillis();
  6180. smelt(smelt_id);
  6181. } else if (shafting && System.currentTimeMillis()-lastAction >= 1500) {
  6182. lastAction = System.currentTimeMillis();
  6183. shaft();
  6184. } else if (fletching && System.currentTimeMillis()-lastAction >= 1900) {
  6185. lastAction = System.currentTimeMillis();
  6186. fletchBow();
  6187. } else if (spinning && System.currentTimeMillis()-lastAction >= 2100) {
  6188. lastAction = System.currentTimeMillis();
  6189. spinflax();
  6190. } else if (spinning && System.currentTimeMillis()-lastAction >= 1900) {
  6191. lastAction = System.currentTimeMillis();
  6192. spinwool();
  6193. } else if (crafting && System.currentTimeMillis()-lastAction >= 1500) {
  6194. lastAction = System.currentTimeMillis();
  6195. craft();
  6196. } else if (fishing && System.currentTimeMillis()-lastAction >= fishspeed) {
  6197. lastAction = System.currentTimeMillis();
  6198. startfishing(fishId);
  6199. }
  6200. // Snowing
  6201. if (IsSnowing == 1) {
  6202. outStream.createFrame(208);
  6203. outStream.writeWordBigEndian_dup(11877);
  6204. IsSnowing = 2;
  6205. } else if (IsSnowing == 3) {
  6206. outStream.createFrame(208);
  6207. outStream.writeWordBigEndian_dup(65535);
  6208. IsSnowing = 0;
  6209. }
  6210. // Npc Talking
  6211. if (NpcWanneTalk == 2) {
  6212. // Bank Booth
  6213. if (GoodDistance2(absX, absY, skillX, skillY, 1) == true) {
  6214. NpcDialogue = 1;
  6215. NpcTalkTo = GetNPCID(skillX, (skillY-1));
  6216. NpcWanneTalk = 0;
  6217. }
  6218. } else if (NpcWanneTalk > 0) {
  6219. if (GoodDistance2(absX, absY, skillX, skillY, 2) == true) {
  6220. NpcDialogue = NpcWanneTalk;
  6221. NpcTalkTo = GetNPCID(skillX, skillY);
  6222. NpcWanneTalk = 0;
  6223. }
  6224. }
  6225. if (NpcDialogue > 0 && NpcDialogueSend == false) {
  6226. UpdateNPCChat();
  6227. }
  6228.  
  6229. if (isKicked) {
  6230. disconnected = true;
  6231. if (saveNeeded)
  6232. savegame(true);
  6233. outStream.createFrame(109);
  6234. }
  6235.  
  6236. if (globalMessage.length() > 0) {
  6237. sendMessage(globalMessage);
  6238. globalMessage = "";
  6239. }
  6240. if (disconnected) {
  6241. return false;
  6242. }
  6243. try {
  6244. if (timeOutCounter++ > 20) {
  6245. misc.println("Client lost connection: timeout");
  6246. disconnected = true;
  6247. if (saveNeeded)
  6248. savegame(true);
  6249. return false;
  6250. }
  6251. if (in == null) {
  6252. return false;
  6253. }
  6254.  
  6255. int avail = in.available();
  6256.  
  6257. if (avail == 0) {
  6258. return false;
  6259. }
  6260.  
  6261. if (packetType == -1) {
  6262. packetType = in.read() & 0xff;
  6263. if (inStreamDecryption != null) {
  6264. packetType = packetType-inStreamDecryption.getNextKey() & 0xff;
  6265. }
  6266. packetSize = packetSizes[packetType];
  6267. avail--;
  6268. }
  6269. if (packetSize == -1) {
  6270. if (avail > 0) {
  6271. // this is a variable size packet, the next byte containing the length of said
  6272. packetSize = in.read() & 0xff;
  6273. avail--;
  6274. } else {
  6275. return false;
  6276. }
  6277. }
  6278. if (avail < packetSize) {
  6279. return false;
  6280. } // packet not completely arrived here yet
  6281.  
  6282. fillInStream(packetSize);
  6283. timeOutCounter = 0; // reset
  6284.  
  6285. parseIncomingPackets(); // method that does actually interprete these packets
  6286.  
  6287. packetType = -1;
  6288. } catch (java.lang.Exception __ex) {
  6289. __ex.printStackTrace();
  6290. System.out.println("Odion [fatal] - exception");
  6291. savegame(true);
  6292. disconnected = true;
  6293. }
  6294. return true;
  6295. }
  6296.  
  6297. public void AddDroppedItems() {
  6298. if (IsDropping == true) {
  6299. IsDropping = true;
  6300. int tmpX = 0;
  6301. int tmpY = 0;
  6302. int calcX = 0;
  6303. int calcY = 0;
  6304.  
  6305. for (int i = 0; i < server.itemHandler.DropItemCount; i++) {
  6306. if (server.itemHandler.DroppedItemsID[i] > -1) {
  6307. tmpX = server.itemHandler.DroppedItemsX[i];
  6308. tmpY = server.itemHandler.DroppedItemsY[i];
  6309. calcX = tmpX-absX;
  6310. calcY = tmpY-absY;
  6311. if (calcX >= -16 && calcX <= 15 && calcY >= -16 && calcY <= 15 && MustDelete[i] == false && server.itemHandler.DroppedItemsH[i] == heightLevel) {
  6312. if (IsDropped[i] == false && (server.itemHandler.DroppedItemsDDelay[i] <= 0 || server.itemHandler.DroppedItemsDropper[i] == playerId)) {
  6313. IsDropped[i] = true;
  6314. outStream.createFrame(85);
  6315. outStream.writeByteC((server.itemHandler.DroppedItemsY[i]-8*mapRegionY));
  6316. outStream.writeByteC((server.itemHandler.DroppedItemsX[i]-8*mapRegionX));
  6317. outStream.createFrame(44); // create item frame
  6318. outStream.writeWordBigEndianA(server.itemHandler.DroppedItemsID[i]);
  6319. outStream.writeWord(server.itemHandler.DroppedItemsN[i]); // amount
  6320. outStream.writeByte(0); // x(4 MSB) y(LSB) coords
  6321. }
  6322. } else if (IsDropped[i] == true || MustDelete[i] == true) {
  6323. outStream.createFrame(85);
  6324. outStream.writeByteC((server.itemHandler.DroppedItemsY[i]-8*mapRegionY));
  6325. outStream.writeByteC((server.itemHandler.DroppedItemsX[i]-8*mapRegionX));
  6326. outStream.createFrame(156); // remove item frame
  6327. outStream.writeByteS(0); // x(4 MSB) y(LSB) coords
  6328. outStream.writeWord(server.itemHandler.DroppedItemsID[i]);
  6329. int LastPlayerInList = -1;
  6330. int TotalPlayers = 0;
  6331.  
  6332. for (int j = 1; j < PlayerHandler.maxPlayers; j++) {
  6333. if (PlayerHandler.players[j] != null) {
  6334. LastPlayerInList = j;
  6335. TotalPlayers++;
  6336. }
  6337. }
  6338. if (MustDelete[i] == true) {
  6339. MustDelete[i] = false;
  6340. server.itemHandler.DroppedItemsDeletecount[i]++;
  6341. if ((LastPlayerInList == playerId || LastPlayerInList == -1) && server.itemHandler.DroppedItemsDeletecount[i] == TotalPlayers) {
  6342. if (server.itemHandler.DroppedItemsAlwaysDrop[i] == true) {
  6343. server.itemHandler.DroppedItemsDropper[i] = -1;
  6344. server.itemHandler.DroppedItemsDDelay[i] = server.itemHandler.SDID;
  6345. } else {
  6346. server.itemHandler.ResetItem(i);
  6347. }
  6348. for (int j = 1; j < PlayerHandler.maxPlayers; j++) {
  6349. if (PlayerHandler.players[j] != null) {
  6350. PlayerHandler.players[j].IsDropped[i] = false;
  6351. }
  6352. }
  6353. }
  6354. } else {
  6355. IsDropped[i] = false;
  6356. }
  6357. }
  6358. }
  6359. }
  6360. IsDropping = false;
  6361. }
  6362. }
  6363.  
  6364. private boolean packetProcess() {
  6365. if (disconnected) {
  6366. return false;
  6367. }
  6368. try {
  6369. if (timeOutCounter++ > 20) {
  6370. actionReset();
  6371. disconnected = true;
  6372. runStream = false;
  6373. if (saveNeeded)
  6374. savegame(true);
  6375. return false;
  6376. }
  6377.  
  6378. if (in == null) {
  6379. return false;
  6380. }
  6381.  
  6382. int avail = in.available();
  6383.  
  6384. if (avail == 0) {
  6385. return false;
  6386. }
  6387. if (packetType == -1) {
  6388. packetType = in.read() & 0xff;
  6389. if (inStreamDecryption != null) {
  6390. packetType = packetType-inStreamDecryption.getNextKey() & 0xff;
  6391. }
  6392. packetSize = packetSizes[packetType];
  6393. avail--;
  6394. }
  6395. if (packetSize == -1) {
  6396. if (avail > 0) {
  6397. packetSize = in.read() & 0xff;
  6398. avail--;
  6399. } else {
  6400. return false;
  6401. }
  6402. }
  6403. if (avail < packetSize) {
  6404. return false;
  6405. }
  6406. fillInStream(packetSize);
  6407. timeOutCounter = 0;
  6408.  
  6409. parseIncomingPackets();
  6410. packetType = -1;
  6411. } catch (java.lang.Exception __ex) {
  6412. server.logError(__ex.getMessage());
  6413. disconnected = true;
  6414. System.out.println("Odion [fatal] - exception");
  6415. savegame(true);
  6416. }
  6417. return true;
  6418. }
  6419.  
  6420. public void actionReset() {
  6421. actionName = "";
  6422. }
  6423.  
  6424. public void parseIncomingPackets() {
  6425. objects();
  6426. int i;
  6427. int junk;
  6428. int junk2;
  6429. int junk3;
  6430. lastPacket = System.currentTimeMillis();
  6431. //if(packetType != 0) println("" + packetType);
  6432. switch (packetType) {
  6433. case 25:
  6434. // item in inventory used with item on floor
  6435. int unknown1 = inStream.readSignedWordBigEndian(); // interface id of item
  6436. int unknown2 = inStream.readUnsignedWordA(); // item in bag id
  6437. int floorID = inStream.readUnsignedByte();
  6438. int floorY = inStream.readUnsignedWordA();
  6439. int unknown3 = inStream.readUnsignedWordBigEndianA();
  6440. int floorX = inStream.readUnsignedByte();
  6441. System.out.println("Unknown1 = "+unknown1);
  6442. System.out.println("Unknown2 = "+unknown2);
  6443. System.out.println("FloorID = "+floorID);
  6444. System.out.println("FloorY = "+floorY);
  6445. System.out.println("Unknown3 = "+unknown3);
  6446. System.out.println("FloorX = "+floorX);
  6447. break;
  6448. case 57:
  6449. itemId = inStream.readUnsignedWordA();
  6450. npcSlot = inStream.readUnsignedWordA();
  6451. int unknown = inStream.readUnsignedWordA();
  6452. interfaceId = inStream.readUnsignedWordA();
  6453. NPC npc = server.npcHandler.npcs[npcSlot];
  6454. if (interfaceId == 3214 && GoodDistance(absX, absY, npc.absX, npc.absY, 3)){
  6455.  
  6456. switch(npc.npcType) {
  6457.  
  6458. case 43:
  6459. if (itemId == 1735){
  6460. setAnimation(883);
  6461. if (misc.random(10) >= 5){
  6462. sendMessage("You shear the wool off the sheep.");
  6463. addItem(1737, 1);
  6464. npc.sheepDelay = 10;
  6465. } else {
  6466. sendMessage("The sheep smacks you off.");
  6467. }
  6468. }
  6469. break;
  6470. default:
  6471. sendMessage("Nothing Interesting Happens");
  6472. }
  6473. }
  6474. break;
  6475.  
  6476. case 0:
  6477. break; // idle packet - keeps on reseting timeOutCounter
  6478.  
  6479. case 202:
  6480. // idle logout packet - ignore for now
  6481. //logout();
  6482. break;
  6483. case 45:
  6484. //flagged account data
  6485. // inStream.readBytes(pmchatText, pmchatTextSize, 0);
  6486. int blah = inStream.readUnsignedByte();
  6487. int part2 = -1, part3 = -1, part4 = -1;
  6488. try {
  6489. part2 = inStream.readUnsignedWord();
  6490. }
  6491. catch (Exception e) {
  6492. println("part2 not sent");
  6493. }
  6494. //if(part2 == -1){ //exect input (client if/else)
  6495. try {
  6496. part3 = inStream.readDWord_v1();
  6497. }
  6498. catch (Exception e) {
  6499. println("part3 not sent");
  6500. }
  6501. try {
  6502. part4 = inStream.readDWord();
  6503. }
  6504. catch (Exception e) {
  6505. println("part4 not sent");
  6506. }
  6507. //}
  6508. println("blah="+blah+", "+"part2="+part2+", part3="+part3+", part4="+part4);
  6509. break;
  6510.  
  6511. case 210:
  6512. // loads new area
  6513. break;
  6514.  
  6515. case 40:
  6516. if(NpcDialogueSend) {
  6517. NpcDialogue += 1;
  6518. NpcDialogueSend = false;
  6519. } else {
  6520. closeInterface();
  6521. NpcDialogue = -1;
  6522. }
  6523. //println_debug("Unhandled packet ["+packetType+", InterFaceId: "+inStream.readUnsignedWordA()+", size="+packetSize+"]: ]"+misc.Hex(inStream.buffer, 1, packetSize)+"[");
  6524. //println_debug("Action Button: "+misc.HexToInt(inStream.buffer, 0, packetSize));
  6525. break;
  6526.  
  6527. case 192:
  6528. // Use an item on an object
  6529. junk = inStream.readSignedWordBigEndianA();
  6530. int UsedOnObjectID = inStream.readUnsignedWordBigEndian();
  6531. int UsedOnY = inStream.readSignedWordBigEndianA();
  6532. int ItemSlot = (inStream.readSignedWordBigEndianA()-128);
  6533. int UsedOnX = inStream.readUnsignedWordBigEndianA();
  6534. int ItemID = inStream.readUnsignedWord();
  6535. //if (!playerHasItem(ItemID))
  6536. server.OC.useobject(playerId, UsedOnObjectID, UsedOnY, UsedOnX, ItemID);
  6537.  
  6538.  
  6539. break;
  6540.  
  6541. case 218:
  6542. String abuser = misc.longToPlayerName(inStream.readQWord());
  6543. int rule = inStream.readUnsignedByte();
  6544. int mute = inStream.readUnsignedByte();
  6545. reportAbuse(abuser, rule, mute);
  6546. break;
  6547. case 130:
  6548. // Clicking some stuff in game
  6549. int interfaceID = inStream.readSignedByte();
  6550. //if(actionButtonId == 26018) {
  6551. if (inDuel && !duelFight) {
  6552. declineDuel();
  6553. }
  6554. if (duelFight && wonDuel == true) {
  6555. if (System.currentTimeMillis() - lastButton < 1000) {
  6556. lastButton = System.currentTimeMillis();
  6557. break;
  6558. } else {
  6559. lastButton = System.currentTimeMillis();
  6560. }
  6561. //println("Valid click..");
  6562. client other = getClient(duel_with);
  6563. for (GameItem item : otherOfferedItems) {
  6564. //println("otherDuelItems = " + item.id);
  6565. if ((item.id > 0) && (item.amount > 0)) {
  6566. if (Item.itemStackable[item.id]) {
  6567. if (!addItem(item.id, item.amount))
  6568. ItemHandler.addItem(item.id, enemyX, enemyY,
  6569. item.amount, playerId, false);
  6570. } else {
  6571. int amount = item.amount;
  6572. //for (int a = 1; a <= amount; a++) {
  6573. if (!addItem(item.id, 1))
  6574. ItemHandler.addItem(item.id, enemyX,
  6575. enemyY, 1, playerId, false);
  6576. }
  6577. }
  6578.  
  6579.  
  6580. }
  6581. for (GameItem item : offeredItems) {
  6582. if ((item.id > 0) && (item.amount > 0))
  6583. addItem(item.id, item.amount);
  6584. }
  6585. resetDuel();
  6586. savegame(false);
  6587. if (validClient(duel_with)) {
  6588. other.resetDuel();
  6589. other.savegame(false);
  6590. }
  6591. } else {
  6592. // sM("You didn't win the duel!");
  6593. }
  6594. if (inTrade && System.currentTimeMillis()-lastButton > 1000) {
  6595. lastButton = System.currentTimeMillis();
  6596. declineTrade();
  6597. }
  6598. if (IsShopping == true) {
  6599. IsShopping = false;
  6600. MyShopID = 0;
  6601. UpdateShop = false;
  6602. }
  6603. if (IsBanking == true) {
  6604. IsBanking = false;
  6605. }
  6606.  
  6607. if (misc.HexToInt(inStream.buffer, 0, packetSize) != 63363 && misc.HexToInt(inStream.buffer, 0, packetSize) != 0) {
  6608. println_debug("handled packet ["+packetType+", InterFaceId: "+interfaceID+", size="+packetSize+"]: ]"+misc.Hex(inStream.buffer, 1, packetSize)+"[");
  6609. println_debug("Action Button: "+misc.HexToInt(inStream.buffer, 0, packetSize));
  6610. }
  6611. break;
  6612.  
  6613. case 155:
  6614. // first Click npc
  6615. NPCSlot = (misc.HexToInt(inStream.buffer, 0, packetSize) / 1000);
  6616. NPCID = server.npcHandler.npcs[NPCSlot].npcType;
  6617. int NX = server.npcHandler.npcs[NPCSlot].absX;
  6618. int NY = server.npcHandler.npcs[NPCSlot].absY;
  6619. boolean PutNPCCoords = false;
  6620. NPCSlot = inStream.readSignedWordBigEndian();
  6621. if (GoodDistance(NX, NY, absX, absY, 3) == true) {
  6622. server.npcHandler.npcs[NPCSlot].TurnNPCTo(absX, absY);
  6623. server.npcHandler.npcs[NPCSlot].FocusUpdateRequired = true;
  6624. server.npcHandler.npcs[NPCSlot].updateRequired = true;
  6625. }
  6626. if (GoodDistance(NX, NY, absX, absY, 1) == true) {
  6627. TurnPlayerTo(NX,NY);
  6628. switch(NPCID) {
  6629. case 944:
  6630. nt4(false, NPCID, 605, "Try hit the dummy for experience! Maximum level is 15","Punch - Attack Experience","Kick - Strength Experience","Block - Defence Experience");
  6631. break;
  6632. }
  6633. }
  6634.  
  6635. if (NPCID == 804) {
  6636. openTan();
  6637. }
  6638. if (NPCID == 1596) {
  6639. nt1(false, 1596, 617, "Slayer is gay!");
  6640. }
  6641. if (NPCID == 70) {
  6642. nt1(false, 70, 616, "Slayer is gay!");
  6643. }
  6644. if (NPCID == 316) {
  6645. if(System.currentTimeMillis()-lastAction >= 2000) {
  6646. lastAction = System.currentTimeMillis();
  6647. startfishing(316);
  6648. }
  6649. }
  6650. if (NPCID == 312) {
  6651. if(System.currentTimeMillis()-lastAction >= 2000) {
  6652. lastAction = System.currentTimeMillis();
  6653. startfishing(312);
  6654. }
  6655. }
  6656. if (NPCID == 1177) {
  6657. if(System.currentTimeMillis()-lastAction >= 2000) {
  6658. lastAction = System.currentTimeMillis();
  6659. startfishing(1177);
  6660. }
  6661. }
  6662. if (NPCID == 1176) {
  6663. if(System.currentTimeMillis()-lastAction >= 2000) {
  6664. lastAction = System.currentTimeMillis();
  6665. startfishing(1176);
  6666. }
  6667. }
  6668. //if (NPCID == 321) {
  6669. // startfishing(321);
  6670. //}
  6671. else if (NPCID == 494 || NPCID == 495 || NPCID == 496 || NPCID == 497 || NPCID == 2354 || NPCID == 2355 || NPCID == 2619 || NPCID == 3198) {
  6672. /* Banking*/
  6673. skillX = server.npcHandler.npcs[NPCSlot].absX;
  6674. skillY = server.npcHandler.npcs[NPCSlot].absY;
  6675. NpcWanneTalk = 1;
  6676. }
  6677. else if (NPCID == 599) {
  6678. /*Make-Over Mage*/
  6679. showInterface(3559);
  6680. }
  6681. else if (NPCID == 553) {
  6682. /* Aubury*/
  6683. NpcWanneTalk = 3;
  6684. NpcDialogue = 3;
  6685. }
  6686. else if (NPCID == 2291) {
  6687. NpcWanneTalk = 10;
  6688. NpcDialogue = 10;
  6689. }
  6690. if (NPCID == 2) {
  6691. //skillX = server.npcHandler.npcs[NPCSlot].absX;
  6692. //skillY = server.npcHandler.npcs[NPCSlot].absY;
  6693. NpcDialogue = 7;
  6694. //NpcWanneTalk = 7;
  6695. }
  6696. else if (NPCID == 1597) {
  6697. skillX = server.npcHandler.npcs[NPCSlot].absX;
  6698. skillY = server.npcHandler.npcs[NPCSlot].absY;
  6699. NpcWanneTalk = 9;
  6700. }
  6701. else if (NPCID == 398) {
  6702. skillX = server.npcHandler.npcs[NPCSlot].absX;
  6703. skillY = server.npcHandler.npcs[NPCSlot].absY;
  6704. NpcWanneTalk = 398;
  6705. sendFrame200(4883, 398);
  6706. sendFrame126(GetNpcName(398), 4884);
  6707. if (premium) {
  6708. sendFrame126("Welcome to the Guild of Legends", 4885);
  6709. }
  6710. else {
  6711. sendFrame126("You must be a premium member to enter", 4885);
  6712. sendFrame126("Visit Odion.com to subscribe", 4886);
  6713. }
  6714. sendFrame75(398, 4883);
  6715. sendFrame164(4882);
  6716. NpcDialogueSend = true;
  6717. if (premium) {
  6718. ReplaceObject(2728, 3349, 2391, 0, 0);
  6719. ReplaceObject(2729, 3349, 2392, -2, 0);
  6720. }
  6721.  
  6722. }
  6723. else {
  6724. println_debug("atNPC 1: "+NPCID);
  6725. }
  6726. if (PutNPCCoords == true) {
  6727. skillX = server.npcHandler.npcs[NPCSlot].absX;
  6728. skillY = server.npcHandler.npcs[NPCSlot].absY;
  6729. }
  6730. break;
  6731.  
  6732. case 17:
  6733. // second Click npc
  6734. NPCSlot = inStream.readUnsignedWordBigEndianA();
  6735. if (NPCSlot < 0 || NPCSlot >= server.npcHandler.npcs.length || server.npcHandler.npcs[NPCSlot] == null)
  6736. break;
  6737. NPCID = server.npcHandler.npcs[NPCSlot].npcType;
  6738. long time = System.currentTimeMillis();
  6739. if (time-globalCooldown[0] <= 50) {
  6740. sendMessage("Action throttled... please wait longer before acting!");
  6741. break;
  6742. }
  6743.  
  6744. globalCooldown[0] = time;
  6745. int npcX = server.npcHandler.npcs[NPCSlot].absX;
  6746. int npcY = server.npcHandler.npcs[NPCSlot].absY;
  6747. if (Math.abs(absX-npcX) > 50 || Math.abs(absY-npcY) > 50) {
  6748. sendMessage("Client hack detected!");
  6749. break;
  6750. }
  6751. if (server.npcHandler.npcs[NPCSlot].IsDead) {
  6752. sendMessage("That monster has been killed!");
  6753. break;
  6754. }
  6755. PutNPCCoords = false;
  6756. if (NPCID == 494 || NPCID == 495 || NPCID == 496 || NPCID == 497 || NPCID == 2354 || NPCID == 2355 || NPCID == 2619 || NPCID == 3198) {
  6757. /* Banking*/
  6758. WanneBank = 2;
  6759. }
  6760. if (NPCID == 1780) {
  6761. // Nardan Weapon Shop
  6762. PutNPCCoords = true;
  6763. WanneShop = 5;
  6764. }
  6765. if (NPCID == 577) {
  6766. // Crafting shop
  6767. PutNPCCoords = true;
  6768. WanneShop = 4;
  6769. }
  6770. if (NPCID == 553) {
  6771. // Aubury
  6772. PutNPCCoords = true;
  6773. WanneShop = 1;
  6774. }
  6775. else if (NPCID == 520 || NPCID == 521) {
  6776. // Nardan general
  6777. PutNPCCoords = true;
  6778. WanneShop = 2; // Lumbridge General Store
  6779. }
  6780. else if (NPCID == 682) {
  6781. // Nardan Archery
  6782. PutNPCCoords = true;
  6783. WanneShop = 3; // Aaron's Archery Appendages
  6784. }
  6785. else if (NPCID == 1 || NPCID ==2 || NPCID == 3 || NPCID == 4 || NPCID == 5 || NPCID == 6) {
  6786. // THEIVING MAN & WOMEN
  6787. if (stealtimer < 0 && EntangleDelay < 0) {
  6788. robman();
  6789. EntangleDelay = 6;
  6790. stealtimer = 5;
  6791. // snaretimer = 5;
  6792. actionTimer = 4;
  6793. setAnimation(881);
  6794.  
  6795. AnimationReset = true;
  6796. updateRequired = true;
  6797. appearanceUpdateRequired = true;
  6798. }
  6799. }
  6800. else if (NPCID == 7) {
  6801. // THEIVING farmer
  6802. if (playerLevel[17] < 10) {
  6803. sendMessage("You need 10 theiving to pickpocket farmers.");
  6804. }
  6805. else {
  6806. if (stealtimer < 0 && EntangleDelay < 0) {
  6807. robfarmer();
  6808. EntangleDelay = 6;
  6809. stealtimer = 5;
  6810. // snaretimer = 5;
  6811. actionTimer = 4;
  6812. setAnimation(881);
  6813.  
  6814. AnimationReset = true;
  6815. updateRequired = true;
  6816. appearanceUpdateRequired = true;
  6817. }
  6818. }
  6819. }
  6820. else if (NPCID == 15 || NPCID == 18 || NPCID == 1318) {
  6821. // THEIVING warrior
  6822. if (playerLevel[17] < 25) {
  6823. sendMessage("You need 25 theiving to pickpocket warriors.");
  6824. }
  6825. else {
  6826.  
  6827. if (stealtimer < 0 && EntangleDelay < 0) {
  6828. robwarrior();
  6829. EntangleDelay = 6;
  6830. stealtimer = 15;
  6831. // snaretimer = 5;
  6832. actionTimer = 4;
  6833. setAnimation(881);
  6834.  
  6835. AnimationReset = true;
  6836. updateRequired = true;
  6837. appearanceUpdateRequired = true;
  6838. }
  6839. }
  6840. }
  6841. else if (NPCID == 187) {
  6842. // THEIVING rogue
  6843. if (playerLevel[17] < 32) {
  6844. sendMessage("You need 32 theiving to pickpocket rogues.");
  6845. }
  6846. else {
  6847.  
  6848. if (stealtimer < 0 && EntangleDelay < 0) {
  6849. robrogue();
  6850. EntangleDelay = 6;
  6851. stealtimer = 15;
  6852. // snaretimer = 5;
  6853. actionTimer = 4;
  6854. setAnimation(881);
  6855.  
  6856. AnimationReset = true;
  6857. updateRequired = true;
  6858. appearanceUpdateRequired = true;
  6859. }
  6860. }
  6861. }
  6862. else if (NPCID == 2234 || NPCID == 2235) {
  6863. // THEIVING master farmer
  6864. if (playerLevel[17] < 38) {
  6865. sendMessage("You need 38 theiving to pickpocket master farmers.");
  6866. }
  6867. else {
  6868.  
  6869. if (stealtimer < 0 && EntangleDelay < 0) {
  6870. robmasterfarmer();
  6871. EntangleDelay = 6;
  6872. stealtimer = 15;
  6873. // snaretimer = 5;
  6874. actionTimer = 4;
  6875. setAnimation(881);
  6876.  
  6877. AnimationReset = true;
  6878. updateRequired = true;
  6879. appearanceUpdateRequired = true;
  6880. }
  6881. }
  6882. }
  6883. else if (NPCID == 9 || NPCID == 10 || NPCID == 32 || NPCID == 334 || NPCID == 335 || NPCID == 336 || NPCID == 368 || NPCID == 678 || NPCID == 812 || NPCID == 887) {
  6884. // THEIVING guard
  6885. if (playerLevel[17] < 40) {
  6886. sendMessage("You need 40 theiving to pickpocket gaurds.");
  6887. }
  6888. else {
  6889. if (stealtimer < 0 && EntangleDelay < 0) {
  6890. robguard();
  6891. EntangleDelay = 6;
  6892. stealtimer = 15;
  6893. // snaretimer = 5;
  6894. actionTimer = 4;
  6895. setAnimation(881);
  6896.  
  6897. AnimationReset = true;
  6898. updateRequired = true;
  6899. appearanceUpdateRequired = true;
  6900. }
  6901. }
  6902. }
  6903. else if (NPCID == 23) {
  6904. // THEIVING knight
  6905. if (playerLevel[17] < 55) {
  6906. sendMessage("You need 55 theiving to pickpocket knights.");
  6907. }
  6908. else {
  6909.  
  6910. if (stealtimer < 0 && EntangleDelay < 0) {
  6911. robknight();
  6912. EntangleDelay = 6;
  6913. stealtimer = 15;
  6914. // snaretimer = 5;
  6915. actionTimer = 4;
  6916. setAnimation(881);
  6917.  
  6918. AnimationReset = true;
  6919. updateRequired = true;
  6920. appearanceUpdateRequired = true;
  6921. }
  6922. }
  6923. }
  6924. else if (NPCID == 34) {
  6925. // THEIVING watchmen
  6926. if (playerLevel[17] < 65) {
  6927. sendMessage("You need 65 theiving to pickpocket watchmen.");
  6928. }
  6929. else {
  6930.  
  6931. if (stealtimer < 0 && EntangleDelay < 0) {
  6932. robwatchman();
  6933. EntangleDelay = 6;
  6934. stealtimer = 15;
  6935. // snaretimer = 5;
  6936. actionTimer = 4;
  6937. setAnimation(881);
  6938.  
  6939. AnimationReset = true;
  6940. updateRequired = true;
  6941. appearanceUpdateRequired = true;
  6942. }
  6943. }
  6944. }
  6945. else if (NPCID == 20) {
  6946. // THEIVING paladin
  6947. if (playerLevel[17] < 70) {
  6948. sendMessage("You need 70 theiving to pickpocket paladins.");
  6949. }
  6950. else {
  6951.  
  6952. if (stealtimer < 0 && EntangleDelay < 0) {
  6953. robpaladin();
  6954. EntangleDelay = 6;
  6955. stealtimer = 15;
  6956. // snaretimer = 5;
  6957. actionTimer = 4;
  6958. setAnimation(881);
  6959.  
  6960. AnimationReset = true;
  6961. updateRequired = true;
  6962. appearanceUpdateRequired = true;
  6963. }
  6964. }
  6965. }
  6966. else if (NPCID == 66 || NPCID == 67 || NPCID == 68) {
  6967. // THEIVING gnome
  6968. if (playerLevel[17] < 75) {
  6969. sendMessage("You need 75 theiving to pickpocket gnomes.");
  6970. }
  6971. else {
  6972.  
  6973. if (stealtimer < 0 && EntangleDelay < 0) {
  6974. robgnome();
  6975. EntangleDelay = 6;
  6976. stealtimer = 15;
  6977. // snaretimer = 5;
  6978. actionTimer = 4;
  6979. setAnimation(881);
  6980.  
  6981. AnimationReset = true;
  6982. updateRequired = true;
  6983. appearanceUpdateRequired = true;
  6984. }
  6985. }
  6986. }
  6987. else if (NPCID == 21) {
  6988. // THEIVING hero
  6989. if (playerLevel[17] < 80) {
  6990. sendMessage("You need 80 theiving to pickpocket heros.");
  6991. }
  6992. else {
  6993.  
  6994. if (stealtimer < 0 && EntangleDelay < 0) {
  6995. robhero();
  6996. EntangleDelay = 6;
  6997. stealtimer = 15;
  6998. // snaretimer = 5;
  6999. actionTimer = 4;
  7000. setAnimation(881);
  7001.  
  7002. AnimationReset = true;
  7003. updateRequired = true;
  7004. appearanceUpdateRequired = true;
  7005. }
  7006. }
  7007. }
  7008. else if (NPCID == 2359 || NPCID == 2360 || NPCID == 2361 || NPCID == 2362) {
  7009. // THEIVING elf
  7010. if (playerLevel[17] < 85) {
  7011. sendMessage("You need 85 theiving to pickpocket elves.");
  7012. }
  7013. else {
  7014.  
  7015. if (stealtimer < 0 && EntangleDelay < 0) {
  7016. robelf();
  7017. EntangleDelay = 6;
  7018. stealtimer = 15;
  7019. // snaretimer = 5;
  7020. actionTimer = 4;
  7021. setAnimation(881);
  7022.  
  7023. AnimationReset = true;
  7024. updateRequired = true;
  7025. appearanceUpdateRequired = true;
  7026. }
  7027. }
  7028.  
  7029. }
  7030. else if (stealtimer > 0 && EntangleDelay < 0) {
  7031. // snaretimer = 3;
  7032. robfail();
  7033. animation(348, absY, absX);
  7034. actionTimer = 4;
  7035. setAnimation(424);
  7036. AnimationReset = true;
  7037. updateRequired = true;
  7038. appearanceUpdateRequired = true;
  7039. sendMessage("Pickpocket attempt Failed!");
  7040.  
  7041. }
  7042. else {
  7043. println_debug("atNPC 2: "+NPCID);
  7044. }
  7045. if (PutNPCCoords == true) {
  7046. skillX = server.npcHandler.npcs[NPCSlot].absX;
  7047. skillY = server.npcHandler.npcs[NPCSlot].absY;
  7048. }
  7049.  
  7050. break;
  7051.  
  7052. case 21:
  7053. // Thirth Click npc
  7054. NPCSlot = inStream.readSignedWord();
  7055.  
  7056. NPCID = server.npcHandler.npcs[NPCSlot].npcType;
  7057. if (NPCID < server.npcHandler.npcs.length && NPCID > 0) {
  7058. if (NPCID == 553) {
  7059. /* Air Altar Tele */
  7060. triggerTele(2910+misc.random(1), 4831+misc.random(1), 0, false);
  7061. }
  7062. } else {
  7063. println_debug("atNPC 3: "+NPCID);
  7064. }
  7065. break;
  7066.  
  7067. case 72:
  7068. // Click to attack
  7069. if (System.currentTimeMillis()-lastAttack > 1500 && deathStage < 1) {
  7070. attacknpc = inStream.readUnsignedWordA();
  7071. if (attacknpc >= 0 && attacknpc < server.npcHandler.maxNPCSpawns) {
  7072. IsAttackingNPC = true;
  7073.  
  7074. if (server.npcHandler.npcs[attacknpc].StartKilling == 0) {
  7075. server.npcHandler.npcs[attacknpc].StartKilling = playerId;
  7076. }
  7077. server.npcHandler.npcs[attacknpc].RandomWalk = false;
  7078. server.npcHandler.npcs[attacknpc].IsUnderAttack = true;
  7079. actionTimer = 5;
  7080. }
  7081. else {
  7082. sendMessage("Exception catched, npc id was invalid.");
  7083. ResetAttackNPC();
  7084. }
  7085. }
  7086. break;
  7087.  
  7088. case 121:
  7089. objects();
  7090. break;
  7091.  
  7092. case 122:
  7093. // Call for burying bones
  7094. junk = inStream.readSignedWordBigEndianA();
  7095. ItemSlot = inStream.readUnsignedWordA();
  7096. ItemID = inStream.readUnsignedWordBigEndian();
  7097. if (System.currentTimeMillis()-lastAction >= 850) {
  7098. buryItem(ItemID, ItemSlot);
  7099. lastAction = System.currentTimeMillis();
  7100. actionTimer = 10;
  7101. }
  7102. break;
  7103.  
  7104. case 253:
  7105. // call for burning fires
  7106. skillX = inStream.readSignedWordBigEndian();
  7107. skillY = inStream.readSignedWordBigEndianA();
  7108. ItemID = inStream.readUnsignedWordA();
  7109. println("packet 253: skillX="+skillX+", skillY="+skillY);
  7110. if (IsUsingSkill == false && CheckForSkillUse4(ItemID) == true) {
  7111. IsUsingSkill = true;
  7112. }
  7113. break;
  7114.  
  7115. case 53:
  7116. // Use item on item
  7117. int usedWithSlot = inStream.readUnsignedWord();
  7118. int itemUsedSlot = inStream.readUnsignedWordA();
  7119. //int useWith = inStream.readUnsignedWordBigEndianA();
  7120. int interface1284 = inStream.readUnsignedWord();
  7121. //int itemUsed = inStream.readSignedWordBigEndian();
  7122. int interfacek = inStream.readUnsignedWord();
  7123. //usedWithSlot += 1;
  7124. //itemUsedSlot += 1;
  7125. int useWith = playerItems[usedWithSlot]-1;
  7126. int itemUsed = playerItems[itemUsedSlot]-1;
  7127. if (!playerHasItem(itemUsed) || ! playerHasItem(useWith)) {
  7128. break;
  7129. }
  7130. int otherItem = playerItems[usedWithSlot]-1;
  7131. //println("itemUsed=" + itemUsed + ", usedWithSlot=" + usedWithSlot + ", otherItem=" + otherItem);
  7132.  
  7133. if ((itemUsed == 1733 || otherItem == 1733) && (itemUsed == 1741 || otherItem == 1741)) {
  7134. showInterface(2311);
  7135. break;
  7136. }
  7137.  
  7138. int[][] Gems = {{1623,1607,20, 460}, {1621, 1605, 27, 690}, {1619, 1603, 34, 920}, { 1617, 1601, 43, 1150}};
  7139. for(int gem = 0; gem < Gems.length; gem++) {
  7140. if ((itemUsed == 1755 || otherItem == 1755) && (itemUsed == Gems[gem][0] || otherItem == Gems[gem][0])) {
  7141. if(playerLevel[playerCrafting] < Gems[gem][2]) {
  7142. sendMessage("You need +Gems[gem][2]+ crafting to cut this gem.");
  7143. return;
  7144. }
  7145. setAnimation(885);
  7146. deleteItem(Gems[gem][0], 1);
  7147. addItem(Gems[gem][1], 1);
  7148. addSkillXP(Gems[gem][3], 12);
  7149. sendMessage("You cut the gem.");
  7150. }
  7151. }
  7152.  
  7153.  
  7154. if (playerHasItem(314, 15) && playerHasItem(52, 15) && (itemUsed == 314 || otherItem == 314) && (itemUsed == 52 || otherItem == 52)) {
  7155. if (playerHasItem(-1)) {
  7156. deleteItem(314, 15);
  7157. deleteItem(52, 15);
  7158. addItem(53, 15);
  7159. }
  7160. else {
  7161. sendMessage("Inventory is full!");
  7162. }
  7163. }
  7164. for(int herb = 0; herb < herbs.length; herb++) {
  7165. int[] herbxp = {10, 20, 30, 40, 50, 60, 70};
  7166. int[] herblv = {1, 12, 30, 45, 55, 66, 72};
  7167. if ((itemUsed == herbs[herb] || otherItem == herbs[herb]) && (itemUsed == 227 || otherItem == 227)) {
  7168. if(playerLevel[playerHerblore] >= herblv[herb]) {
  7169. deleteItem(herbs[herb], 1);
  7170. deleteItem(227, 1);
  7171. addItem(herbs[herb]-158,1);
  7172. addSkillXP(herbxp[herb],playerHerblore);
  7173. } else {
  7174. sendMessage("You need level "+herblv[herb]+" herblore to mix this potion!");
  7175. }
  7176. }
  7177.  
  7178. int[] herbxpnd = {100, 200, 300, 400, 500, 600, 700};
  7179. int[] herblvnd = {1, 12, 30, 45, 55, 66, 72};
  7180. int[] secondIng = {221, 225, 239, 221, 225, 239, 221};
  7181. int[] finishPot = {2428, 113, 2432, 2436, 2440, 2442, 2444};
  7182. if ((itemUsed == (herbs[herb]-158) || otherItem == (herbs[herb]-158)) && (itemUsed == secondIng[herb] || otherItem == secondIng[herb])) {
  7183. if(playerLevel[playerHerblore] >= herblvnd[herb]) {
  7184. deleteItem((herbs[herb]-158), 1);
  7185. deleteItem(secondIng[herb], 1);
  7186. addItem(finishPot[herb],1);
  7187. addSkillXP(herbxpnd[herb],playerHerblore);
  7188. } else {
  7189. sendMessage("You need level "+herblvnd[herb]+" herblore to mix this potion!");
  7190. }
  7191. }
  7192. }
  7193.  
  7194.  
  7195. if ((itemUsed == 5605 || otherItem == 5605) && (itemUsed == 1511 || otherItem == 1511)) {
  7196. shaft();
  7197. }
  7198. int[]heads = {
  7199. 39, 40, 41, 42, 43, 44
  7200. }
  7201. ;
  7202. int[]arrows = {
  7203. -1
  7204. }
  7205. ;
  7206. int[]required = {
  7207. 1, 5, 25, 50, 75, 99
  7208. }
  7209. ;
  7210. for (int h = 0; h < heads.length; h++) {
  7211. if (playerHasItem(heads[h], 15) && playerHasItem(53, 15) && (itemUsed == heads[h] || otherItem == heads[h]) && (itemUsed == 53 || otherItem == 53)) {
  7212. if (playerLevel[playerFletching] < required[h]) {
  7213. sendMessage("Requires level "+required[h]+" fletching");
  7214. break;
  7215. }
  7216. deleteItem(heads[h], 15);
  7217. deleteItem(53, 15);
  7218. addItem(arrows[h], 15);
  7219. addSkillXP(200, playerFletching);
  7220. break;
  7221. }
  7222. }
  7223. //regular, oak, maple, willow, yew, magic?
  7224. for (int id = 0; id < logs.length; id++) {
  7225. if ((itemUsed == logs[id] || otherItem == logs[id]) && (itemUsed == 5605 || otherItem == 5605)) {
  7226. //emote 885 (funny=3129)
  7227. dialog = true;
  7228. dialogInterface = 2459;
  7229. dialogId = 1;
  7230. fletchLog = id;
  7231. sendFrame126("Select a bow", 8879);
  7232. sendFrame246(8870, 250, longbows[id]); // right picture
  7233. sendFrame246(8869, 250, shortbows[id]); //left picture
  7234. sendFrame126(GetItemName(shortbows[id]), 8871);
  7235. sendFrame126(GetItemName(shortbows[id]), 8874);
  7236. sendFrame126(GetItemName(longbows[id]), 8878);
  7237. sendFrame126(GetItemName(longbows[id]), 8875);
  7238. sendFrame164(8866);
  7239. break;
  7240. }
  7241. }
  7242. int[] log = {1511,1521,1519,1517,1515,1513}; //{1521,1519,1517,1515,1513};
  7243. int[][] fire = {{1,50},{15,100},{30,200},{45,300},{60,400},{75,500}};
  7244. for(int fires = 0; fires < log.length; fires++) {
  7245. if ((itemUsed == log[fires] || otherItem == log[fires]) && (itemUsed == 590 || otherItem == 590)) {
  7246. if(playerLevel[playerFiremaking] >= fire[fires][0]) {
  7247. deleteItem(log[fires], 1);
  7248. addSkillXP(fire[fires][1], playerFiremaking);
  7249. } else {
  7250. sendMessage("You need a firemaking level of "+fire[fires][0]+" to light this log!");
  7251. }
  7252. }
  7253. }
  7254. for (int id1 = 0; id1 < shortbow.length; id1++) {
  7255. if ((itemUsed == shortbows[id1] || otherItem == shortbows[id1]) && (itemUsed == 1777 || otherItem == 1777)) {
  7256. deleteItem(shortbows[id1], 1);
  7257. deleteItem(1777, 1);
  7258. addItem(shortbow[id1], 1);
  7259. }
  7260. }
  7261. for (int b2 = 0; b2 < shortbow.length; b2++) {
  7262. if ((itemUsed == longbows[b2] || otherItem == longbows[b2]) && (itemUsed == 1777 || otherItem == 1777)) {
  7263. deleteItem(longbows[b2], 1);
  7264. deleteItem(1777, 1);
  7265. addItem(longbow[b2], 1);
  7266. }
  7267. }
  7268. for (int h = 0; h < leathers.length; h++) {
  7269. if ((itemUsed == 1733 || otherItem == 1733) && (itemUsed == leathers[h] || otherItem == leathers[h])) {
  7270. craftMenu(h);
  7271. cIndex = h;
  7272. }
  7273. }
  7274. if (itemUsed == 233 && useWith == 237) {
  7275. deleteItem(237, getItemSlot(237), 1);
  7276. addItem(235, 1);
  7277. }
  7278.  
  7279. break;
  7280.  
  7281. // walkTo commands
  7282. case 248:
  7283. // map walk (has additional 14 bytes added to the end with some junk data)
  7284. packetSize -= 14; // ignore the junk
  7285. case 164:
  7286. // regular walk
  7287. case 98:
  7288. // walk on command
  7289. if (randomed)
  7290. break;
  7291. if (inTrade)
  7292. break;
  7293. resetAction();
  7294. if (!validClient) {
  7295. sendMessage("You can't move on this account");
  7296. break;
  7297. }
  7298. if(cooking || fishing) {
  7299. cooking = false;
  7300. fishing = false;
  7301. }
  7302. if (duelFight && (duelRule[5] || duelRule[9])) {
  7303. sendMessage("You cannot retreat during this duel!");
  7304. break;
  7305. }
  7306. if (fighting) {
  7307. client enemy = (client)handler.players[fightId];
  7308. //sendMessage("attack=" + fightId + ", hits=" + hits + ", fighting=" + fighting);
  7309. if (fightId > 0 && enemy != null && hits < 3 && enemy.hits < 3 && inRange(enemy.absX, enemy.absY)) {
  7310. sendMessage("You cannot retreat during the first 3 rounds of combat!");
  7311. break;
  7312. }
  7313. else if ((fightId > 0 && enemy != null && fighting) || (!inRange(enemy.absX, enemy.absY))) {
  7314. fighting = false;
  7315. enemy.fighting = false;
  7316. hits = 0;
  7317. enemy.hits = 0;
  7318. }
  7319. else {
  7320. fighting = false;
  7321. hits = 0;
  7322. }
  7323. }
  7324. IsAttackingNPC = false;
  7325. attacknpc = -1;
  7326. closeInterface();
  7327. resetAnimation();
  7328. if (deathStage == 0) {
  7329. newWalkCmdSteps = packetSize-5;
  7330. if (newWalkCmdSteps%2 != 0) {
  7331. println_debug("Warning: walkTo("+packetType+") command malformed: "+misc.Hex(inStream.buffer, 0, packetSize));
  7332. }
  7333. newWalkCmdSteps /= 2;
  7334. if (++newWalkCmdSteps > walkingQueueSize) {
  7335. println_debug("Warning: walkTo("+packetType+") command contains too many steps ("+newWalkCmdSteps+").");
  7336. newWalkCmdSteps = 0;
  7337. break;
  7338. }
  7339. int firstStepX = inStream.readSignedWordBigEndianA();
  7340. int tmpFSX = firstStepX;
  7341.  
  7342. firstStepX -= mapRegionX*8;
  7343. for (i = 1; i < newWalkCmdSteps; i++) {
  7344. newWalkCmdX[i] = inStream.readSignedByte();
  7345. newWalkCmdY[i] = inStream.readSignedByte();
  7346. tmpNWCX[i] = newWalkCmdX[i];
  7347. tmpNWCY[i] = newWalkCmdY[i];
  7348. }
  7349. newWalkCmdX[0] = newWalkCmdY[0] = tmpNWCX[0] = tmpNWCY[0] = 0;
  7350. int firstStepY = inStream.readSignedWordBigEndian();
  7351. int tmpFSY = firstStepY;
  7352.  
  7353. firstStepY -= mapRegionY*8;
  7354. newWalkCmdIsRunning = inStream.readSignedByteC() == 1;
  7355. if (isInWilderness(absX, absY, 1))
  7356. newWalkCmdIsRunning = false;
  7357. for (i = 0; i < newWalkCmdSteps; i++) {
  7358. newWalkCmdX[i] += firstStepX;
  7359. newWalkCmdY[i] += firstStepY;
  7360. }
  7361. poimiY = firstStepY;
  7362. poimiX = firstStepX;
  7363.  
  7364. // stairs check
  7365. if (stairs > 0) {
  7366. resetStairs();
  7367. }
  7368. // woodcutting check
  7369. if (woodcutting[0] > 0) {
  7370. //playerEquipment[playerWeapon] = OriginalWeapon;
  7371. //OriginalWeapon = -1;
  7372. resetAnimation();
  7373. resetWC();
  7374. }
  7375. // pick up item check
  7376. if (WannePickUp == true) {
  7377. PickUpID = 0;
  7378. PickUpAmount = 0;
  7379. PickUpDelete = 0;
  7380. WannePickUp = false;
  7381. }
  7382. // attack check
  7383. if (IsAttacking == true) {
  7384. ResetAttack();
  7385. }
  7386. // attack NPC check
  7387. if (IsAttackingNPC == true) {
  7388. ResetAttackNPC();
  7389. }
  7390. // mining check
  7391. if (mining[0] > 0) {
  7392. resetAnimation();
  7393. resetMI();
  7394. }
  7395. // Npc Talking
  7396. if (NpcDialogue > 0) {
  7397. NpcDialogue = 0;
  7398. NpcTalkTo = 0;
  7399. NpcDialogueSend = false;
  7400. RemoveAllWindows();
  7401. }
  7402. // banking
  7403. if (IsBanking == true) {
  7404. RemoveAllWindows();
  7405. }
  7406. // shopping
  7407. if (IsShopping == true) {
  7408. IsShopping = false;
  7409. MyShopID = 0;
  7410. UpdateShop = false;
  7411. RemoveAllWindows();
  7412. }
  7413. // trading
  7414. }
  7415. break;
  7416.  
  7417. case 4: // regular chat
  7418. if (!validClient) {
  7419. sendMessage("Please use another client");
  7420. break;
  7421. }
  7422. if (muted)
  7423. break;
  7424. chatTextEffects = inStream.readUnsignedByteS();
  7425. chatTextColor = inStream.readUnsignedByteS();
  7426. chatTextSize = (byte)(packetSize-2);
  7427. inStream.readBytes_reverseA(chatText, chatTextSize, 0);
  7428. chatTextUpdateRequired = true;
  7429. String playerchat = "["+playerName+"]: "+misc.textUnpack(chatText, packetSize-2)+"";
  7430. //println_debug("Text ["+chatTextEffects+","+chatTextColor+"]: "+misc.textUnpack(chatText, packetSize-2));
  7431. BufferedWriter bw = null;
  7432.  
  7433. try {
  7434. bw = new BufferedWriter(new FileWriter("logs/chatlogs.txt", true));
  7435. bw.write("["+playerName+"]: Text ["+chatTextEffects+","+chatTextColor+"]: "+misc.textUnpack(chatText, packetSize-2));
  7436. bw.newLine();
  7437. bw.flush();
  7438. } catch (IOException ioe) {
  7439. ioe.printStackTrace();
  7440. } finally {
  7441. if (bw != null) try {
  7442. bw.close();
  7443. } catch (IOException ioe2) {
  7444. sendMessage("Error logging chat!");
  7445. }
  7446. }
  7447. break;
  7448.  
  7449. case 14:
  7450. // Use something on another player
  7451. junk2 = inStream.readSignedWordBigEndianA(); // only needed to get the cracker slot ! (remove = server crash !)
  7452. junk = inStream.readSignedWordBigEndian(); // only needed to get the cracker slot ! (remove = server crash !)
  7453. junk3 = inStream.readUnsignedWordA(); // only needed to get the cracker slot ! (remove = server crash !)
  7454. int CrackerSlot = inStream.readSignedWordBigEndian();
  7455. //if(CrackerSlot >= playerItems.length){
  7456. // break;
  7457. //}
  7458. int CrackerID = playerItems[CrackerSlot];
  7459.  
  7460. CrackerID -= 1; // Only to fix the ID !
  7461. if (CrackerID == 962 && playerHasItem(962)) {
  7462. sendMessage("You crack the cracker...");
  7463. int UsedOn = (int)(misc.HexToInt(inStream.buffer, 3, 1)/1000);
  7464.  
  7465. PlayerHandler.players[UsedOn].CrackerMsg = true;
  7466. deleteItem(CrackerID, CrackerSlot, playerItemsN[CrackerSlot]);
  7467. if (misc.random(2) == 1) {
  7468. addItem(Item.randomPHat(), 1);
  7469. sendMessage("And you get the crackers item.");
  7470. }
  7471. else {
  7472. sendMessage("but you didn't get the crackers item.");
  7473. PlayerHandler.players[UsedOn].CrackerForMe = true;
  7474. }
  7475. }
  7476. break;
  7477.  
  7478. // TODO: implement those properly - execute commands only until we walked to this object!
  7479. // atObject commands
  7480.  
  7481. /* <Dungeon>
  7482. Trapdoors: ID 1568, 1569, 1570, 1571
  7483. Ladders: ID 1759, 2113
  7484. Climb rope: 1762, 1763, 1764
  7485. */
  7486.  
  7487. case 101:
  7488. int[] input = new int[13];
  7489. int highest = -1,
  7490. numZero = -1,
  7491. num44 = 0;
  7492. for (int b = 0; b < 13; b++) {
  7493. input[b] = inStream.readSignedByte();
  7494. if (input[b] > highest)
  7495. highest = input[b];
  7496. if (input[b] < 1)
  7497. numZero++;
  7498. if (input[b] < 0) // bakatool female fix.
  7499. input[b] = 0;
  7500. if (input[b] == 44)
  7501. num44++;
  7502. }
  7503. if ((highest < 1) || (num44 == 7)) {
  7504. if (uid > 1)
  7505. server.bannedUid.add(new Integer(uid));
  7506. isKicked = true;
  7507. break;
  7508. }
  7509. pGender = input[0];
  7510. pHead = input[1];
  7511. pBeard = input[2]; // aka Jaw :S -bakatool
  7512. pTorso = input[3];
  7513. pArms = input[4];
  7514. pHands = input[5];
  7515. pLegs = input[6];
  7516. pFeet = input[7];
  7517. pHairC = input[8];
  7518. pTorsoC = input[9];
  7519. pLegsC = input[10];
  7520. pFeetC = input[11];
  7521. pSkinC = input[12];
  7522. playerLook[0] = input[0]; // pGender -bakatool
  7523. playerLook[1] = input[8]; // hairC -bakatool
  7524. playerLook[2] = input[9]; // torsoC -bakatool
  7525. playerLook[3] = input[10]; // legsC -bakatool
  7526. playerLook[4] = input[11]; // feetC -bakatool
  7527. playerLook[5] = input[12]; // skinC -bakatool
  7528. apset = true;
  7529. appearanceUpdateRequired = true;
  7530. lookUpdate = true;
  7531. break;
  7532.  
  7533. case 132:
  7534. server.OC.object1(playerId);
  7535. break;
  7536.  
  7537. case 252:
  7538. // atObject2
  7539. server.OC.object2(playerId);
  7540. break;
  7541.  
  7542. case 70: //third click object
  7543. break;
  7544.  
  7545. case 95:
  7546. // update chat
  7547. Tradecompete = inStream.readUnsignedByte();
  7548. Privatechat = inStream.readUnsignedByte();
  7549. Publicchat = inStream.readUnsignedByte();
  7550. for (int i1 = 1; i1 < handler.maxPlayers; i1++) {
  7551. if (handler.players[i1] != null && handler.players[i1].isActive == true) {
  7552. handler.players[i1].pmupdate(playerId, GetWorld(playerId));
  7553. }
  7554. }
  7555. break;
  7556.  
  7557. case 188:
  7558. // add friend
  7559. friendUpdate = true;
  7560. long friendtoadd = inStream.readQWord();
  7561. boolean CanAdd = true;
  7562.  
  7563. for (int i1 = 0; i1 < friends.length; i1++) {
  7564. if (friends[i1] != 0 && friends[i1] == friendtoadd) {
  7565. CanAdd = false;
  7566. sendMessage(friendtoadd+" is already in your friendlist.");
  7567. }
  7568. }
  7569. if (CanAdd == true) {
  7570. for (int i1 = 0; i1 < friends.length; i1++) {
  7571. if (friends[i1] == 0) {
  7572. friends[i1] = friendtoadd;
  7573. for (int i2 = 1; i2 < handler.maxPlayers; i2++) {
  7574. if (handler.players[i2] != null && handler.players[i2].isActive && misc.playerNameToInt64(handler.players[i2].playerName) == friendtoadd) {
  7575. if (playerRights >= 2 || handler.players[i2].Privatechat == 0 || (handler.players[i2].Privatechat == 1 && handler.players[i2].isinpm(misc.playerNameToInt64(playerName)))) {
  7576. loadpm(friendtoadd, GetWorld(i2));
  7577. break;
  7578. }
  7579. }
  7580. }
  7581. break;
  7582. }
  7583. }
  7584. }
  7585. break;
  7586.  
  7587. case 215:
  7588. // remove friend
  7589. friendUpdate = true;
  7590. long friendtorem = inStream.readQWord();
  7591.  
  7592. for (int i1 = 0; i1 < friends.length; i1++) {
  7593. if (friends[i1] == friendtorem) {
  7594. friends[i1] = 0;
  7595. break;
  7596. }
  7597. }
  7598. break;
  7599.  
  7600. case 133:
  7601. // add ignore
  7602. friendUpdate = true;
  7603. long igtoadd = inStream.readQWord();
  7604.  
  7605. for (int i10 = 0; i10 < ignores.length; i10++) {
  7606. if (ignores[i10] == 0) {
  7607. ignores[i10] = igtoadd;
  7608. break;
  7609. }
  7610. }
  7611. break;
  7612.  
  7613. case 74:
  7614. // remove ignore
  7615. friendUpdate = true;
  7616. long igtorem = inStream.readQWord();
  7617.  
  7618. for (int i11 = 0; i11 < ignores.length; i11++) {
  7619. if (ignores[i11] == igtorem) {
  7620. ignores[i11] = 0;
  7621. break;
  7622. }
  7623. }
  7624. break;
  7625.  
  7626. case 126:
  7627. // pm message
  7628. long friendtosend = inStream.readQWord();
  7629. byte pmchatText[] = new byte[100];
  7630. int pmchatTextSize = (byte)(packetSize-8);
  7631.  
  7632. inStream.readBytes(pmchatText, pmchatTextSize, 0);
  7633. for (int i1 = 0; i1 < friends.length; i1++) {
  7634. if (friends[i1] == friendtosend) {
  7635. boolean pmsent = false;
  7636.  
  7637. for (int i2 = 1; i2 < handler.maxPlayers; i2++) {
  7638. if (handler.players[i2] != null && handler.players[i2].isActive && misc.playerNameToInt64(handler.players[i2].playerName) == friendtosend) {
  7639. if (playerRights >= 2 || handler.players[i2].Privatechat == 0 || (handler.players[i2].Privatechat == 1 && handler.players[i2].isinpm(misc.playerNameToInt64(playerName)))) {
  7640. handler.players[i2].sendpm(misc.playerNameToInt64(playerName), playerRights, pmchatText, pmchatTextSize);
  7641. pmsent = true;
  7642. }
  7643. break;
  7644. }
  7645. }
  7646. if (!pmsent) {
  7647. sendMessage("Player currently not available");
  7648. break;
  7649. }
  7650. }
  7651. }
  7652. break;
  7653.  
  7654. case 236:
  7655. // pickup item
  7656. int itemY = inStream.readSignedWordBigEndian();
  7657. int itemID = inStream.readUnsignedWord();
  7658. int itemX = inStream.readSignedWordBigEndian();
  7659. int offsetX = itemX-absX;
  7660. int offsetY = itemY-absY;
  7661. if(offsetX < 0) {
  7662. offsetX = offsetX*-1;
  7663. }
  7664. if(offsetY < 0) {
  7665. offsetY = offsetY*-1;
  7666. }
  7667. if(offsetX > 5 || offsetY > 5) {
  7668. break;
  7669. }
  7670. if(hasSpace()) {
  7671. apickupid = itemID;
  7672. apickupx = itemX;
  7673. apickupy = itemY;
  7674. } else {
  7675. sendMessage("Not enough space in your inventory");
  7676. }
  7677. break;
  7678.  
  7679. case 73:
  7680. // Attack (Wilderness)
  7681. if (actionTimer == 0) {
  7682. AttackingOn = inStream.readSignedWordBigEndian();
  7683. if (AttackingOn >= handler.players.length || AttackingOn < 1) {
  7684. AttackingOn = -1;
  7685. IsAttacking = false;
  7686. break;
  7687. }
  7688. IsAttacking = true;
  7689. actionTimer = 6;
  7690. }
  7691. break;
  7692.  
  7693. case 75:
  7694. // Phate: attackPlayer
  7695. int pIndex = inStream.readUnsignedWordBigEndian();
  7696. if (pIndex >= handler.players.length || pIndex < 1) {
  7697. break;
  7698. }
  7699. duelPlayer(pIndex);
  7700. break;
  7701.  
  7702. case 128:
  7703. // Trade Request
  7704. int temp = inStream.readUnsignedWord();
  7705. if (!inTrade) {
  7706. trade_reqId = temp;
  7707. tradeReq(trade_reqId);
  7708. }
  7709. break;
  7710.  
  7711. /*case 153: // Duel req
  7712. int PID = (misc.HexToInt(inStream.buffer, 0, packetSize) / 1000);
  7713. client plyr = (client) server.playerHandler.players[PID];
  7714. if(!inDuel && validClient(PID) && !plyr.inDuel && !plyr.inTrade && !inDuel && !inTrade){
  7715. duel_with = PID;
  7716. duelReq(PID);
  7717. break;
  7718. }
  7719.  
  7720. break;*/
  7721. case 153:
  7722. // Duel req
  7723. int PID = (misc.HexToInt(inStream.buffer, 0, packetSize)/1000);
  7724. client plyr = getClient(PID);
  7725. if (!validClient(PID))
  7726. break;
  7727. duelReq(PID);
  7728.  
  7729. break;
  7730. case 139:
  7731. // Trade answer
  7732. //WanneTradeWith = inStream.readSignedWordBigEndian();
  7733. //WanneTrade = 2;
  7734. trade_reqId = inStream.readSignedWordBigEndian();
  7735. tradeReq(trade_reqId);
  7736.  
  7737. break;
  7738. case 199:
  7739. // fags using xero's client
  7740. sendMessage("Please use another client to play.");
  7741. validClient = false;
  7742. disconnected = true;
  7743. break;
  7744.  
  7745. //break;
  7746.  
  7747. case 234:
  7748. //Jungle Cutting
  7749. sendMessage("This feature is not yet available");
  7750. break;
  7751.  
  7752. case 237:
  7753. // Magic on Items
  7754. int castOnSlot = inStream.readSignedWord();
  7755. int castOnItem = inStream.readSignedWordA();
  7756. int e3 = inStream.readSignedWord();
  7757. int castSpell = inStream.readSignedWordA();
  7758. if (playerName.equalsIgnoreCase("wolf")) {
  7759. println_debug("castOnSlot: "+castOnSlot+" castOnItem: "+castOnItem+" e3: "+e3+" castSpell: "+castSpell);
  7760. }
  7761. int alchvaluez = (int)Math.floor(GetItemShopValue(castOnItem, 0, castOnSlot));
  7762. if (!playerHasItem(castOnItem)) {
  7763. sendMessage("You don't have that item!");
  7764. break;
  7765. }
  7766. /*
  7767. if (castSpell == 1162) // Low Alch
  7768. {
  7769. deleteItem(castOnItem, castOnSlot, 1);
  7770. addItem(995, alchvaluez);
  7771. addSkillXP((100 * playerLevel[6]), 6);
  7772. setAnimation(712);
  7773. animation(112, absY, absX);
  7774. resetanim = 12;
  7775. deleteItem(561, getItemSlot(561), 5);
  7776. actionTimer = 4;
  7777. AnimationReset = true;
  7778. updateRequired = true;
  7779. appearanceUpdateRequired = true;
  7780. } else if (castSpell == 1178) // High Alch
  7781. {
  7782. deleteItem(castOnItem, castOnSlot, 1);
  7783. addItem(995, alchvaluez);
  7784. addSkillXP((200 * playerLevel[6]), 6);
  7785. setAnimation(712);
  7786. animation3(113, absY, absX);
  7787. resetanim = 12;
  7788. deleteItem(561, getItemSlot(561), 10);
  7789. actionTimer = 9;
  7790. AnimationReset = true;
  7791. updateRequired = true;
  7792. appearanceUpdateRequired = true;
  7793. } else*/
  7794.  
  7795. break;
  7796.  
  7797. case 181:
  7798. int magicOnItemY = inStream.readSignedWordBigEndian();
  7799. int magicOnItemId = inStream.readUnsignedWord();
  7800. int magicOnItemX = inStream.readSignedWordBigEndian();
  7801. int magicOnItemSpellId = inStream.readUnsignedWordA();
  7802. int itemAmount = ItemHandler.itemAmount(magicOnItemId, magicOnItemX, magicOnItemY);
  7803.  
  7804. if (magicOnItemSpellId == 1168) {
  7805. if (playerLevel[6] >= 33 && playerHasItem(563))
  7806. {
  7807. stopMovement();
  7808. deleteItem(563, GetItemSlot(563), 1);
  7809. ItemHandler.removeItem(magicOnItemId, magicOnItemX, magicOnItemY, itemAmount);
  7810. addItem(magicOnItemId, itemAmount);
  7811.  
  7812. //stillgfx2(144, magicOnItemY, magicOnItemX, 0, 40);
  7813. //animation(144, magicOnItemY, magicOnItemX);
  7814. //setAnimation(729);
  7815. //stillgfx2(144, 0, magicOnItemY, magicOnItemX, 95);
  7816. //stillgfx(142, absX, absY);
  7817. //int offsetX = (absX - magicOnItemX) * -1;
  7818. //int offsetY = (absY - magicOnItemY) * -1;
  7819. //createProjectile(absY, absX, int offsetY, int offsetX, 90, 45, 142, 0, 0, magicOnItemId);
  7820. //createProjectile(absY, absX, 0, 3, 50, 160, 142, 43, 31, 0);
  7821. }}
  7822. break;
  7823.  
  7824. case 249:
  7825. // Magic on Players
  7826. int playerIndexx = inStream.readSignedWordA();
  7827. if (!(playerIndexx >= 0 && playerIndexx < server.playerHandler.players.length)) {
  7828. break;
  7829. }
  7830. int EnemyX3 = server.playerHandler.players[playerIndexx].absX;
  7831. int EnemyY3 = server.playerHandler.players[playerIndexx].absY;
  7832. int pcombat = server.playerHandler.players[playerIndexx].combat;
  7833. Player pl2 = server.playerHandler.players[playerIndexx];
  7834. client castOnPlayer = (client)server.playerHandler.players[playerIndexx];
  7835.  
  7836. if (pl2 == null) {
  7837. return;
  7838. }
  7839. int spellID = inStream.readSignedWordBigEndian();
  7840. int castterX = absX;
  7841. int castterY = absY;
  7842. int casterX = absX;
  7843. int casterY = absY;
  7844. int offsetY2 = (absX-EnemyX3)*-1;
  7845. int offsetX2 = (absY-EnemyY3)*-1;
  7846. int EnemyHP = server.playerHandler.players[playerIndexx].playerLevel[playerHitpoints];
  7847. int heal = 0;
  7848. int myHP = playerLevel[playerHitpoints];
  7849. hitDiff = 0;
  7850. if (duelFight && duelRule[2]) {
  7851. sendMessage("Magic has been disabled for this duel!");
  7852. break;
  7853. }
  7854. long thisAttack = System.currentTimeMillis();
  7855. //if(thisAttack - lastAttack >= 1500){
  7856. /*castOnPlayer.hitDiff = hitDiff;
  7857. castOnPlayer.KillerId = playerId;
  7858. castOnPlayer.updateRequired = true;
  7859. castOnPlayer.hitUpdateRequired = true;*/
  7860. MageAttackIndex = playerIndexx;
  7861. if (playerIndexx == duel_with || isInWilderness(EnemyX3, EnemyY3, 1) == true || IsInCW(EnemyX3, EnemyY3) == true || IsInTz(EnemyX3, EnemyY3) == true || (matchId == handler.players[playerIndexx].matchId && matchId >= 0)) {
  7862.  
  7863. for (int i2 = 0; i2 < ancientId.length; i2++) {
  7864. if (spellID == ancientId[i2]) {
  7865. if (System.currentTimeMillis()-lastAttack < coolDown[i2]) {
  7866. //sendMessage("You must wait before casting this kind of spell again");
  7867. break;
  7868. }
  7869. inCombat = true;
  7870. lastCombat = System.currentTimeMillis();
  7871. if (playerLevel[6] >= requiredLevel[i2]) {
  7872. TurnPlayerTo(EnemyX3, EnemyY3);
  7873. int roll = misc.random(100);
  7874. int hit = misc.random(baseDamage[i2]+playerBonus[11]);
  7875. castOnPlayer.hitDiff = hit;
  7876. setAnimation(1979);
  7877. AnimationReset = true;
  7878. lastAttack = System.currentTimeMillis();
  7879. teleportToX = absX;
  7880. teleportToY = absY;
  7881. int EnemyX = castOnPlayer.absX;
  7882. int EnemyY = castOnPlayer.absY;
  7883. if (ancientType[i2] == 3) {
  7884. //coolDown[coolDownGroup[i2]] = 35;
  7885. castOnPlayer.effects[0] = 15;
  7886. stillgfx(369, EnemyY, EnemyX);//ice spell
  7887. }
  7888. else if (ancientType[i2] == 2) {
  7889. //coolDown[coolDownGroup[i2]] = 12;
  7890. stillgfx(377, EnemyY, EnemyX);//blood
  7891. currentHealth += (int)(hit/2);
  7892. if (currentHealth > playerLevel[playerHitpoints])
  7893. currentHealth = playerLevel[playerHitpoints];
  7894. }
  7895. else
  7896. animation(78, EnemyY, EnemyX);
  7897. //castOnPlayer.sendMessage(playerName+" is shooting you!");
  7898. castOnPlayer.KillerId = playerId;
  7899. castOnPlayer.updateRequired = true;
  7900. castOnPlayer.hitUpdateRequired = true;
  7901. MageAttackIndex = playerIndexx;
  7902. castOnPlayer.dealDamage(hit);
  7903. break;
  7904. }
  7905. else {
  7906. sendMessage("You need a magic level of "+requiredLevel[i2]);
  7907. }
  7908. }
  7909. }
  7910. //actionTimer = 7;
  7911. } else {
  7912. sendMessage("You can't attack here!");
  7913. }
  7914. break;
  7915.  
  7916. case 131:
  7917. // Magic on NPCs //offsets switched op
  7918. int npcIndex = inStream.readSignedWordBigEndianA();
  7919. if (!(npcIndex >= 0 && npcIndex < server.npcHandler.npcs.length)) {
  7920. break;
  7921. }
  7922. int magicID = inStream.readSignedWordA();
  7923. int EnemyX2 = server.npcHandler.npcs[npcIndex].absX;
  7924. int EnemyY2 = server.npcHandler.npcs[npcIndex].absY;
  7925. int EnemyHP2 = server.npcHandler.npcs[npcIndex].HP;
  7926. int hitDiff = 0;
  7927. int magicDef = MageAttackIndex = npcIndex;
  7928. {
  7929. try {
  7930. if (EnemyHP2 < 1) {
  7931. sendMessage("That monster has already been killed!");
  7932. break;
  7933. }
  7934. if (server.npcHandler.npcs[npcIndex].MaxHP < 1) {
  7935. sendMessage("You can't attack that");
  7936. }
  7937. int type = server.npcHandler.npcs[npcIndex].npcType;
  7938. if (type == 1125) {
  7939. if (combatLevel < 70) {
  7940. sendMessage("You must be level 70 or higher to attack Dad");
  7941. break;
  7942. }
  7943. }
  7944. if (type == 1220) {
  7945. if (combatLevel < 50 ) {
  7946. sendMessage("You must be level 50 or higher to attack the Vampire.");
  7947. break;
  7948. }
  7949. }
  7950. if (type == 221 || type == 1961) {
  7951. if (!playerHasItem(1544)) {
  7952. resetPos();
  7953. break;
  7954. }
  7955. }
  7956. if (type == 910) {
  7957. if (!playerHasItem(1545)) {
  7958. resetPos();
  7959. break;
  7960. }
  7961. }
  7962. if (type == 1095) {
  7963. if (!playerHasItem(1546)) {
  7964. resetPos();
  7965. break;
  7966. }
  7967. }
  7968. int[]prem = {
  7969. 1643, 158, 49, 1613
  7970. }
  7971. ;
  7972. for (int p = 0; p < prem.length; p++) {
  7973. if (prem[p] == type && ! premium) {
  7974. resetPos();
  7975. break;
  7976. }
  7977. }
  7978. boolean valid = false;
  7979. for (int i2 = 0; i2 < ancientId.length; i2++) {
  7980. if (magicID == ancientId[i2]) {
  7981. if (System.currentTimeMillis()-lastAttack < coolDown[i2]) {
  7982. //sendMessage("You must wait before casting this kind of spell again");
  7983. break;
  7984. }
  7985. if(!playerHasItem(rune1[i2], rune1a[i2]) || !playerHasItem(rune2[i2], rune2a[i2]) || !playerHasItem(rune3[i2], rune3a[i2])) {
  7986. if(rune1[i2] > 0 && rune2[i2] < 1 && rune3[i2] < 1) {
  7987. sendMessage("You need "+rune1a[i2]+" "+GetItemName(rune1[i2])+" to cast this spell");
  7988. }
  7989. if(rune1[i2] > 0 && rune2[i2] > 0 && rune3[i2] < 1) {
  7990. sendMessage("You need "+rune1a[i2]+" "+GetItemName(rune1[i2])+" and "+rune2a[i2]+" "+GetItemName(rune2[i2])+" to cast this spell");
  7991. }
  7992. if(rune1[i2] > 0 && rune2[i2] > 0 && rune3[i2] > 0) {
  7993. sendMessage("You need "+rune1a[i2]+" "+GetItemName(rune1[i2])+" and "+rune2a[i2]+" "+GetItemName(rune2[i2])+" and "+rune3a[i2]+" "+GetItemName(rune3[i2])+" to cast this spell");
  7994. }
  7995. break;
  7996. }
  7997. inCombat = true;
  7998. lastCombat = System.currentTimeMillis();
  7999. lastAttack = lastCombat;
  8000. valid = true;
  8001. if (playerLevel[6] >= requiredLevel[i2]) {
  8002. if(playerHasItem(rune1[i2], rune1a[i2]) && playerHasItem(rune2[i2], rune2a[i2]) && playerHasItem(rune3[i2], rune3a[i2])) {
  8003. deleteItem(rune1[i2], rune1a[i2]);
  8004. deleteItem(rune2[i2], rune2a[i2]);
  8005. deleteItem(rune3[i2], rune3a[i2]);
  8006. }
  8007. int roll = misc.random(100);
  8008. int hit = misc.random(baseDamage[i2]+(playerBonus[11]));
  8009. hitDiff = hit;
  8010. setAnimation(1979);
  8011. updateRequired = true;
  8012. //attackTimer = 4;
  8013. teleportToX = absX;
  8014. teleportToY = absY;
  8015. if (ancientType[i2] == 3) {
  8016. //coolDown[coolDownGroup[i2]] = 35;
  8017. server.npcHandler.npcs[npcIndex].effects[0] = 15;
  8018. stillgfx(369, EnemyY2, EnemyX2);
  8019. }
  8020. else if (ancientType[i2] == 2) {
  8021. stillgfx(377, EnemyY2, EnemyX2);
  8022. //coolDown[coolDownGroup[i2]] = 12;
  8023. currentHealth += (int)(hit/5-((playerLevel[6]-50)*0.042));
  8024. if (currentHealth > playerLevel[playerHitpoints])
  8025. currentHealth = playerLevel[playerHitpoints];
  8026. }
  8027. else
  8028. animation(78, EnemyY2, EnemyX2);
  8029. }
  8030. else {
  8031. sendMessage("You need a magic level of "+requiredLevel[i2]);
  8032. //coolDown[coolDownGroup[i2]] = 12;
  8033. }
  8034. }
  8035. }
  8036. /*
  8037. if (magicID == 13023) // Shadow Barrage
  8038. {
  8039. hitDiff = 20 + misc.random(15);
  8040. actionTimer = 4;
  8041. setAnimation(1979);
  8042. AnimationReset = true;
  8043. teleportToX = absX;
  8044. teleportToY = absY;
  8045. // server.npcHandler.npcs[npcIndex].currentHealth -= server.npcHandler.npcs[npcIndex].hitDiff;
  8046. TurnPlayerTo(EnemyX2, EnemyY2);
  8047. attackNPCSWithin(383, 67, 5);
  8048. }
  8049.  
  8050. if (magicID == 12891) // Ice Barrage
  8051. {
  8052. TurnPlayerTo(EnemyX2, EnemyY2);
  8053. hitDiff = 20 + misc.random(15);
  8054. actionTimer = 4;
  8055. setAnimation(1979);
  8056. AnimationReset = true;
  8057. teleportToX = absX;
  8058. teleportToY = absY;
  8059. // server.npcHandler.npcs[npcIndex].currentHealth -= server.npcHandler.npcs[npcIndex].hitDiff;
  8060. attackNPCSWithin(369, 67, 5);
  8061. }
  8062. // server.npcHandler.npcs[npcIndex].currentHealth -= server.npcHandler.npcs[npcIndex].hitDiff;
  8063. if ((EnemyHP2 - hitDiff) <= 0) {
  8064. hitDiff = EnemyHP2;
  8065. }*/
  8066. TurnPlayerTo(EnemyX2, EnemyY2);
  8067. addSkillXP(50*hitDiff, playerMagic);
  8068. addSkillXP(hitDiff*CombatExpRate, playerHitpoints);
  8069. teleportToX = absX;
  8070. teleportToY = absY;
  8071. server.npcHandler.npcs[npcIndex].StartKilling = localId;
  8072. server.npcHandler.npcs[npcIndex].RandomWalk = false;
  8073. server.npcHandler.npcs[npcIndex].IsUnderAttack = true;
  8074. server.npcHandler.npcs[npcIndex].hitDiff = hitDiff;
  8075. server.npcHandler.npcs[npcIndex].Killing[playerId] += hitDiff;
  8076. server.npcHandler.npcs[npcIndex].updateRequired = true;
  8077. server.npcHandler.npcs[npcIndex].hitUpdateRequired = true;
  8078. server.npcHandler.npcs[npcIndex].hit = true;
  8079. //attacknpc = npcIndex;
  8080. //IsAttackingNPC = true;
  8081. }
  8082. catch (Exception e) {
  8083. e.printStackTrace();
  8084. }
  8085. }
  8086. break;
  8087.  
  8088. case 3:
  8089. // focus change
  8090. break;
  8091.  
  8092. case 39:
  8093. // Rightclick Bann
  8094. println_debug("case 39");
  8095. sendMessage("Case 39");
  8096. break;
  8097.  
  8098. case 86:
  8099. // camera angle
  8100. int a = inStream.readSignedWord();
  8101. int a1 = inStream.readSignedWordA();
  8102. break;
  8103.  
  8104. case 241:
  8105. // mouse clicks
  8106. int mouseClick = inStream.readDWord();
  8107. clickCount++;
  8108. break;
  8109.  
  8110. case 103:
  8111. // Custom player command, the ::words
  8112. String playerCommand = inStream.readString();
  8113. command(playerCommand);
  8114. break;
  8115.  
  8116. case 214:
  8117. // change item places
  8118. somejunk = inStream.readUnsignedWordA(); // junk
  8119. int itemFrom = inStream.readUnsignedWordA(); // slot1
  8120. int itemTo = (inStream.readUnsignedWordA()-128); // slot2
  8121.  
  8122. // println_debug(somejunk+" moveitems: From:"+itemFrom+" To:"+itemTo);
  8123. moveItems(itemFrom, itemTo, somejunk);
  8124.  
  8125. break;
  8126.  
  8127. case 41:
  8128. // wear item
  8129. int wearID = inStream.readUnsignedWord();
  8130. int wearSlot = inStream.readUnsignedWordA();
  8131.  
  8132. interfaceID = inStream.readUnsignedWordA();
  8133. // println_debug("WearItem: "+wearID+" slot: "+wearSlot);
  8134. wear(wearID, wearSlot);
  8135. break;
  8136.  
  8137. case 145:
  8138. // remove item (opposite for wearing) - bank 1 item - value of item
  8139. interfaceID = inStream.readUnsignedWordA();
  8140. int removeSlot = inStream.readUnsignedWordA();
  8141. int removeID = inStream.readUnsignedWordA();
  8142. if (playerRights == 2)
  8143. println_debug("RemoveItem: "+removeID+" InterID: "+interfaceID+" slot: "+removeSlot);
  8144. if(interfaceID == 7423) {
  8145. bankItem(removeID, removeSlot, 1); openUpDepBox();
  8146. }
  8147. if (interfaceID == 3322 && inDuel) {
  8148. //remove from bag to duel window
  8149. stakeItem(removeID, removeSlot, 1);
  8150. }
  8151. else if (interfaceID == 6669 && inDuel) {
  8152. //remove from duel window
  8153. fromDuel(removeID, removeSlot, 1);
  8154. }
  8155. else if (interfaceID == 1688) {
  8156. if (playerEquipment[removeSlot] > 0) {
  8157. remove(removeID, removeSlot);
  8158. }
  8159. }
  8160. else if (interfaceID == 5064) {
  8161. // remove from bag to bank
  8162. bankItem(removeID, removeSlot, 1);
  8163. }
  8164. else if (interfaceID == 5382) {
  8165. // remove from bank
  8166. fromBank(removeID, removeSlot, 1);
  8167. }
  8168. else if (interfaceID == 3322) {
  8169. // remove from bag to trade window
  8170. tradeItem(removeID, removeSlot, 1);
  8171. }
  8172. else if (interfaceID == 3415) {
  8173. // remove from trade window
  8174. fromTrade(removeID, removeSlot, 1);
  8175. }
  8176. else if (interfaceID == 3823) {
  8177. // Show value to sell items
  8178. if (Item.itemSellable[removeID] == false) {
  8179. sendMessage("I cannot sell "+GetItemName(removeID)+".");
  8180. }
  8181. else {
  8182. boolean IsIn = false;
  8183.  
  8184. if (server.shopHandler.ShopSModifier[MyShopID] > 1) {
  8185. for (int j = 0; j <= server.shopHandler.ShopItemsStandard[MyShopID]; j++) {
  8186. if (removeID == (server.shopHandler.ShopItems[MyShopID][j]-1)) {
  8187. IsIn = true;
  8188. break;
  8189. }
  8190. }
  8191. }
  8192. else {
  8193. IsIn = true;
  8194. }
  8195. if (IsIn == false) {
  8196. sendMessage("You cannot sell "+GetItemName(removeID)+" in this store.");
  8197. }
  8198. else {
  8199. int ShopValue = (int)Math.floor(GetItemShopValue(removeID, 1, removeSlot));
  8200. String ShopAdd = "";
  8201.  
  8202. if (ShopValue >= 1000 && ShopValue < 1000000) {
  8203. ShopAdd = " ("+(ShopValue/1000)+"K)";
  8204. }
  8205. else if (ShopValue >= 1000000) {
  8206. ShopAdd = " ("+(ShopValue/1000000)+" million)";
  8207. }
  8208. sendMessage(GetItemName(removeID)+": shop will buy for "+ShopValue+" coins"+ShopAdd);
  8209. }
  8210. }
  8211. }
  8212. else if (interfaceID == 3900) {
  8213. // Show value to buy items
  8214. int ShopValue = (int)Math.floor(GetItemShopValue(removeID, 0, removeSlot));
  8215. String ShopAdd = "";
  8216.  
  8217. if (ShopValue >= 1000 && ShopValue < 1000000) {
  8218. ShopAdd = " ("+(ShopValue/1000)+"K)";
  8219. }
  8220. else if (ShopValue >= 1000000) {
  8221. ShopAdd = " ("+(ShopValue/1000000)+" million)";
  8222. }
  8223. sendMessage(GetItemName(removeID)+": currently costs "+ShopValue+" coins"+ShopAdd);
  8224. } else if (interfaceID == 1119) // Smith Column 1
  8225. {
  8226. try {
  8227.  
  8228. if (barsNeeded(removeSlot, interfaceID)
  8229. <= amountOfItem(removeBar(removeID))) {
  8230. if (playerHasItem(2347) == true) {
  8231. if (canSmith(removeID)) {
  8232. RemoveAllWindows();
  8233. setAnimation(0x382);
  8234. addSkillXP(
  8235. smithXP(removeBar(removeID),
  8236. barsNeeded(removeSlot, interfaceID)),
  8237. 13);
  8238. ReplaceItems(removeID, removeBar(removeID), 1,
  8239. barsNeeded(removeSlot, interfaceID));
  8240.  
  8241. } else {
  8242. sendMessage(
  8243. "You need a higher smithing level to smith "
  8244. + GetItemName(removeID) + "");
  8245. }
  8246. } else {
  8247. sendMessage("You need a hammer to smith this item.");
  8248. }
  8249. } else {
  8250. sendMessage("You dont have enough bars to make this");
  8251. }
  8252. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8253. }
  8254. } else if (interfaceID == 1120) // Smith Column 2
  8255. {
  8256. try {
  8257.  
  8258. if (barsNeeded(removeSlot, interfaceID)
  8259. <= amountOfItem(removeBar(removeID))) {
  8260. if (playerHasItem(2347) == true) {
  8261. if (canSmith(removeID)) {
  8262. RemoveAllWindows();
  8263. setAnimation(0x382);
  8264. addSkillXP(
  8265. smithXP(removeBar(removeID),
  8266. barsNeeded(removeSlot, interfaceID)),
  8267. 13);
  8268. ReplaceItems(removeID, removeBar(removeID), 1,
  8269. barsNeeded(removeSlot, interfaceID));
  8270. } else {
  8271. sendMessage(
  8272. "You need a higher smithing level to smith "
  8273. + GetItemName(removeID) + "");
  8274. }
  8275. } else {
  8276. sendMessage("You need a hammer to smith this item.");
  8277. }
  8278. } else {
  8279. sendMessage("You dont have enough bars to make this");
  8280. }
  8281. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8282. }
  8283. } else if (interfaceID == 1121) {
  8284. try {
  8285.  
  8286. if (barsNeeded(removeSlot, interfaceID)
  8287. <= amountOfItem(removeBar(removeID))) {
  8288. if (playerHasItem(2347) == true) {
  8289. if (canSmith(removeID)) {
  8290. RemoveAllWindows();
  8291. setAnimation(0x382);
  8292. addSkillXP(
  8293. smithXP(removeBar(removeID),
  8294. barsNeeded(removeSlot, interfaceID)),
  8295. 13);
  8296. ReplaceItems(removeID, removeBar(removeID), 1,
  8297. barsNeeded(removeSlot, interfaceID));
  8298. } else {
  8299. sendMessage(
  8300. "You need a higher smithing level to smith "
  8301. + GetItemName(removeID) + "");
  8302. }
  8303. } else {
  8304. sendMessage("You need a hammer to smith this item.");
  8305. }
  8306. } else {
  8307. sendMessage("You dont have enough bars to make this");
  8308. }
  8309. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8310. }
  8311. } else if (interfaceID == 1122) {
  8312. try {
  8313.  
  8314. if (barsNeeded(removeSlot, interfaceID)
  8315. <= amountOfItem(removeBar(removeID))) {
  8316. if (playerHasItem(2347) == true) {
  8317. if (canSmith(removeID)) {
  8318. RemoveAllWindows();
  8319. setAnimation(0x382);
  8320. addSkillXP(
  8321. smithXP(removeBar(removeID),
  8322. barsNeeded(removeSlot, interfaceID)),
  8323. 13);
  8324. ReplaceItems(removeID, removeBar(removeID), 1,
  8325. barsNeeded(removeSlot, interfaceID));
  8326. } else {
  8327. sendMessage(
  8328. "You need a higher smithing level to smith "
  8329. + GetItemName(removeID) + "");
  8330. }
  8331. } else {
  8332. sendMessage("You need a hammer to smith this item.");
  8333. }
  8334. } else {
  8335. sendMessage("You dont have enough bars to make this");
  8336. }
  8337. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8338. }
  8339. } else if (interfaceID == 1123) {
  8340. try {
  8341.  
  8342. if (barsNeeded(removeSlot, interfaceID)
  8343. <= amountOfItem(removeBar(removeID))) {
  8344. if (playerHasItem(2347) == true) {
  8345. if (canSmith(removeID)) {
  8346. RemoveAllWindows();
  8347. setAnimation(0x382);
  8348. addSkillXP(
  8349. smithXP(removeBar(removeID),
  8350. barsNeeded(removeSlot, interfaceID)),
  8351. 13);
  8352. if (removeSlot == 0) {
  8353. ReplaceItems(removeID, removeBar(removeID),
  8354. 10,
  8355. barsNeeded(removeSlot, interfaceID));
  8356. }
  8357. if (removeSlot == 1) {
  8358. ReplaceItems(removeID, removeBar(removeID),
  8359. 15,
  8360. barsNeeded(removeSlot, interfaceID));
  8361. }
  8362. if (removeSlot == 2) {
  8363. ReplaceItems(removeID, removeBar(removeID),
  8364. 5,
  8365. barsNeeded(removeSlot, interfaceID));
  8366. } else {
  8367. ReplaceItems(removeID, removeBar(removeID),
  8368. 1,
  8369. barsNeeded(removeSlot, interfaceID));
  8370. }
  8371.  
  8372. } else {
  8373. sendMessage(
  8374. "You need a higher smithing level to smith "
  8375. + GetItemName(removeID) + "");
  8376. }
  8377. } else {
  8378. sendMessage("You need a hammer to smith this item.");
  8379. }
  8380. } else {
  8381. sendMessage("You dont have enough bars to make this");
  8382. }
  8383. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8384. }
  8385. }
  8386.  
  8387. break;
  8388.  
  8389. case 117:
  8390. // bank 5 items - sell 1 item
  8391. interfaceID = inStream.readSignedWordBigEndianA();
  8392. removeID = inStream.readSignedWordBigEndianA();
  8393. removeSlot = inStream.readSignedWordBigEndian();
  8394. println_debug("RemoveItem 5: "+removeID+" InterID: "+interfaceID+" slot: "+removeSlot);
  8395. if(interfaceID == 7423) {
  8396. bankItem(removeID, removeSlot, 5); openUpDepBox();
  8397. }
  8398. if (interfaceID == 3322 && inDuel) {
  8399. //remove from bag to duel window
  8400. stakeItem(removeID, removeSlot, 5);
  8401. }
  8402. else if (interfaceID == 6669) {
  8403. //remove from duel window
  8404. fromDuel(removeID, removeSlot, 5);
  8405. }
  8406. else if (interfaceID == 5064) {
  8407. // remove from bag to bank
  8408. bankItem(removeID, removeSlot, 5);
  8409. }
  8410. else if (interfaceID == 5382) {
  8411. // remove from bank
  8412. fromBank(removeID, removeSlot, 5);
  8413. }
  8414. else if (interfaceID == 3322) {
  8415. // remove from bag to trade window
  8416. tradeItem(removeID, removeSlot, 5);
  8417. }
  8418. else if (interfaceID == 3415) {
  8419. // remove from trade window
  8420. fromTrade(removeID, removeSlot, 5);
  8421. }
  8422. else if (interfaceID == 3823) {
  8423. // Show value to sell items
  8424. sellItem(removeID, removeSlot, 1);
  8425. }
  8426. else if (interfaceID == 3900) {
  8427. // Show value to buy items
  8428. buyItem(removeID, removeSlot, 1);
  8429. } else if (interfaceID == 1119) // Smith Column 1
  8430. {
  8431. try {
  8432.  
  8433. if (barsNeeded(removeSlot, interfaceID)
  8434. <= amountOfItem(removeBar(removeID)) && playerHasItem(removeBar(removeID),barsNeeded(removeSlot, interfaceID)*5)) {
  8435. if (playerHasItem(2347) == true) {
  8436. if (canSmith(removeID)) {
  8437. for (int e = 0; e < 5; e++) {
  8438. RemoveAllWindows();
  8439. setAnimation(0x382);
  8440. addSkillXP(
  8441. smithXP(removeBar(removeID),
  8442. barsNeeded(removeSlot, interfaceID)),
  8443. 13);
  8444. ReplaceItems(removeID, removeBar(removeID),
  8445. 1,
  8446. barsNeeded(removeSlot, interfaceID));
  8447. }
  8448. } else {
  8449. sendMessage(
  8450. "You need a higher smithing level to smith "
  8451. + GetItemName(removeID) + "s");
  8452. }
  8453. } else {
  8454. sendMessage("You need a hammer to smith this item");
  8455. }
  8456. } else {
  8457. sendMessage("You dont have enough bars to make this");
  8458. }
  8459. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8460. }
  8461. } else if (interfaceID == 1120) // Smith Column 2
  8462. {
  8463. try {
  8464.  
  8465. if (barsNeeded(removeSlot, interfaceID)
  8466. <= amountOfItem(removeBar(removeID)) && playerHasItem(removeBar(removeID),barsNeeded(removeSlot, interfaceID)*5)) {
  8467. if (playerHasItem(2347) == true) {
  8468. if (canSmith(removeID)) {
  8469. for (int e = 0; e < 5; e++) {
  8470. RemoveAllWindows();
  8471. setAnimation(0x382);
  8472. addSkillXP(
  8473. smithXP(removeBar(removeID),
  8474. barsNeeded(removeSlot, interfaceID)),
  8475. 13);
  8476. ReplaceItems(removeID, removeBar(removeID),
  8477. 1,
  8478. barsNeeded(removeSlot, interfaceID));
  8479. }
  8480. } else {
  8481. sendMessage(
  8482. "You need a higher smithing level to smith "
  8483. + GetItemName(removeID) + "s");
  8484. }
  8485. } else {
  8486. sendMessage("You need a hammer to smith this item");
  8487. }
  8488. } else {
  8489. sendMessage("You dont have enough bars to make this");
  8490. }
  8491. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8492. }
  8493. } else if (interfaceID == 1121) {
  8494. try {
  8495.  
  8496. if (barsNeeded(removeSlot, interfaceID)
  8497. <= amountOfItem(removeBar(removeID)) && playerHasItem(removeBar(removeID),barsNeeded(removeSlot, interfaceID)*5)) {
  8498. if (playerHasItem(2347) == true) {
  8499. if (canSmith(removeID)) {
  8500. for (int e = 0; e < 5; e++) {
  8501. RemoveAllWindows();
  8502. setAnimation(0x382);
  8503. addSkillXP(
  8504. smithXP(removeBar(removeID),
  8505. barsNeeded(removeSlot, interfaceID)),
  8506. 13);
  8507. ReplaceItems(removeID, removeBar(removeID),
  8508. 1,
  8509. barsNeeded(removeSlot, interfaceID));
  8510.  
  8511. }
  8512. } else {
  8513. sendMessage(
  8514. "You need a higher smithing level to smith "
  8515. + GetItemName(removeID) + "s");
  8516. }
  8517. } else {
  8518. sendMessage("You need a hammer to smith this item");
  8519. }
  8520. } else {
  8521. sendMessage("You dont have enough bars to make this");
  8522. }
  8523. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8524. }
  8525. } else if (interfaceID == 1122) {
  8526. try {
  8527.  
  8528. if (barsNeeded(removeSlot, interfaceID)
  8529. <= amountOfItem(removeBar(removeID)) && playerHasItem(removeBar(removeID),barsNeeded(removeSlot, interfaceID)*5)) {
  8530. if (playerHasItem(2347) == true) {
  8531. if (canSmith(removeID)) {
  8532. for (int e = 0; e < 5; e++) {
  8533. RemoveAllWindows();
  8534. setAnimation(0x382);
  8535. addSkillXP(
  8536. smithXP(removeBar(removeID),
  8537. barsNeeded(removeSlot, interfaceID)),
  8538. 13);
  8539. ReplaceItems(removeID, removeBar(removeID),
  8540. 1,
  8541. barsNeeded(removeSlot, interfaceID));
  8542. }
  8543. } else {
  8544. sendMessage(
  8545. "You need a higher smithing level to smith "
  8546. + GetItemName(removeID) + "s");
  8547. }
  8548. } else {
  8549. sendMessage("You need a hammer to smith this item");
  8550. }
  8551. } else {
  8552. sendMessage("You dont have enough bars to make this");
  8553. }
  8554. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8555. }
  8556. } else if (interfaceID == 1123) {
  8557. try {
  8558.  
  8559. if (barsNeeded(removeSlot, interfaceID)
  8560. <= amountOfItem(removeBar(removeID)) && playerHasItem(removeBar(removeID),barsNeeded(removeSlot, interfaceID)*5)) {
  8561. if (playerHasItem(2347) == true) {
  8562. if (canSmith(removeID)) {
  8563. for (int e = 0; e < 5; e++) {
  8564. RemoveAllWindows();
  8565. setAnimation(0x382);
  8566. addSkillXP(
  8567. smithXP(removeBar(removeID),
  8568. barsNeeded(removeSlot, interfaceID)),
  8569. 13);
  8570. if (removeSlot == 0) {
  8571. ReplaceItems(removeID,
  8572. removeBar(removeID), 10,
  8573. barsNeeded(removeSlot,
  8574. interfaceID));
  8575. }
  8576. if (removeSlot == 1) {
  8577. ReplaceItems(removeID,
  8578. removeBar(removeID), 15,
  8579. barsNeeded(removeSlot,
  8580. interfaceID));
  8581. }
  8582. if (removeSlot == 2) {
  8583. ReplaceItems(removeID,
  8584. removeBar(removeID), 5,
  8585. barsNeeded(removeSlot,
  8586. interfaceID));
  8587. } else {
  8588. ReplaceItems(removeID,
  8589. removeBar(removeID), 1,
  8590. barsNeeded(removeSlot,
  8591. interfaceID));
  8592. }
  8593. }
  8594. } else {
  8595. sendMessage(
  8596. "You need a higher smithing level to smith "
  8597. + GetItemName(removeID) + "s");
  8598. }
  8599. } else {
  8600. sendMessage("You need a hammer to smith this item");
  8601. }
  8602. } else {
  8603. sendMessage("You dont have enough bars to make this");
  8604. }
  8605. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8606. }
  8607. }
  8608. break;
  8609.  
  8610. case 43:
  8611. // bank 10 items - sell 5 items
  8612. interfaceID = inStream.readUnsignedWordBigEndian();
  8613. removeID = inStream.readUnsignedWordA();
  8614. removeSlot = inStream.readUnsignedWordA();
  8615.  
  8616. println_debug("RemoveItem 10: "+removeID+" InterID: "+interfaceID+" slot: "+removeSlot);
  8617. if(interfaceID == 7423) {
  8618. bankItem(removeID, removeSlot, 10); openUpDepBox();
  8619. }
  8620. if (interfaceID == 3322 && inDuel) {
  8621. //remove from bag to duel window
  8622. stakeItem(removeID, removeSlot, 10);
  8623. }
  8624. else if (interfaceID == 6669 && inDuel) {
  8625. //remove from duel window
  8626. fromDuel(removeID, removeSlot, 10);
  8627. }
  8628. else if (interfaceID == 5064) {
  8629. // remove from bag to bank
  8630. bankItem(removeID, removeSlot, 10);
  8631. }
  8632. else if (interfaceID == 5382) {
  8633. // remove from bank
  8634. fromBank(removeID, removeSlot, 10);
  8635. }
  8636. else if (interfaceID == 3322) {
  8637. // remove from bag to trade window
  8638. tradeItem(removeID, removeSlot, 10);
  8639. }
  8640. else if (interfaceID == 3415) {
  8641. // remove from trade window
  8642. fromTrade(removeID, removeSlot, 10);
  8643. }
  8644. else if (interfaceID == 3823) {
  8645. // Show value to sell items
  8646. sellItem(removeID, removeSlot, 5);
  8647. }
  8648. else if (interfaceID == 3900) {
  8649. // Show value to buy items
  8650. buyItem(removeID, removeSlot, 5);
  8651. } else if (interfaceID == 1119) // Smith Column 1
  8652. {
  8653. try {
  8654.  
  8655. if (barsNeeded(removeSlot, interfaceID)
  8656. <= amountOfItem(removeBar(removeID)) && playerHasItem(removeBar(removeID),barsNeeded(removeSlot, interfaceID)*10)) {
  8657. if (playerHasItem(2347) == true) {
  8658. if (canSmith(removeID)) {
  8659. for (int w = 0; w < 10; w++) {
  8660. RemoveAllWindows();
  8661. setAnimation(0x382);
  8662. addSkillXP(
  8663. smithXP(removeBar(removeID),
  8664. barsNeeded(removeSlot, interfaceID)),
  8665. 13);
  8666. ReplaceItems(removeID, removeBar(removeID),
  8667. 1,
  8668. barsNeeded(removeSlot, interfaceID));
  8669. }
  8670. } else {
  8671. sendMessage(
  8672. "You need a higher smithing level to smith "
  8673. + GetItemName(removeID) + "s");
  8674. }
  8675. } else {
  8676. sendMessage("You need a hammer to smith this item");
  8677. }
  8678. } else {
  8679. sendMessage("You dont have enough bars to make this");
  8680. }
  8681. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8682. }
  8683. } else if (interfaceID == 1120) // Smith Column 2
  8684. {
  8685. try {
  8686.  
  8687. if (barsNeeded(removeSlot, interfaceID)
  8688. <= amountOfItem(removeBar(removeID)) && playerHasItem(removeBar(removeID),barsNeeded(removeSlot, interfaceID)*10)) {
  8689. if (playerHasItem(2347) == true) {
  8690. if (canSmith(removeID)) {
  8691. for (int w = 0; w < 10; w++) {
  8692. RemoveAllWindows();
  8693. setAnimation(0x382);
  8694. addSkillXP(
  8695. smithXP(removeBar(removeID),
  8696. barsNeeded(removeSlot, interfaceID)),
  8697. 13);
  8698. ReplaceItems(removeID, removeBar(removeID),
  8699. 1,
  8700. barsNeeded(removeSlot, interfaceID));
  8701. }
  8702. } else {
  8703. sendMessage(
  8704. "You need a higher smithing level to smith "
  8705. + GetItemName(removeID) + "s");
  8706. }
  8707. } else {
  8708. sendMessage("You need a hammer to smith this item");
  8709. }
  8710. } else {
  8711. sendMessage("You dont have enough bars to make this");
  8712. }
  8713. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8714. }
  8715. } else if (interfaceID == 1121) {
  8716. try {
  8717.  
  8718. if (barsNeeded(removeSlot, interfaceID)
  8719. <= amountOfItem(removeBar(removeID)) && playerHasItem(removeBar(removeID),barsNeeded(removeSlot, interfaceID)*10)) {
  8720. if (playerHasItem(2347) == true) {
  8721. if (canSmith(removeID)) {
  8722. for (int w = 0; w < 10; w++) {
  8723. RemoveAllWindows();
  8724. setAnimation(0x382);
  8725. addSkillXP(
  8726. smithXP(removeBar(removeID),
  8727. barsNeeded(removeSlot, interfaceID)),
  8728. 13);
  8729. ReplaceItems(removeID, removeBar(removeID),
  8730. 1,
  8731. barsNeeded(removeSlot, interfaceID));
  8732. }
  8733. } else {
  8734. sendMessage(
  8735. "You need a higher smithing level to smith "
  8736. + GetItemName(removeID) + "s");
  8737. }
  8738. } else {
  8739. sendMessage("You need a hammer to smith this item");
  8740. }
  8741. } else {
  8742. sendMessage("You dont have enough bars to make this");
  8743. }
  8744. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8745. }
  8746. } else if (interfaceID == 1122) {
  8747. try {
  8748.  
  8749. if (barsNeeded(removeSlot, interfaceID)
  8750. <= amountOfItem(removeBar(removeID)) && playerHasItem(removeBar(removeID),barsNeeded(removeSlot, interfaceID)*10)) {
  8751. if (playerHasItem(2347) == true) {
  8752. if (canSmith(removeID)) {
  8753. for (int w = 0; w < 10; w++) {
  8754. RemoveAllWindows();
  8755. setAnimation(0x382);
  8756. addSkillXP(
  8757. smithXP(removeBar(removeID),
  8758. barsNeeded(removeSlot, interfaceID)),
  8759. 13);
  8760. ReplaceItems(removeID, removeBar(removeID),
  8761. 1,
  8762. barsNeeded(removeSlot, interfaceID));
  8763. }
  8764. } else {
  8765. sendMessage(
  8766. "You need a higher smithing level to smith "
  8767. + GetItemName(removeID) + "s");
  8768. }
  8769. } else {
  8770. sendMessage("You need a hammer to smith this item");
  8771. }
  8772. } else {
  8773. sendMessage("You dont have enough bars to make this");
  8774. }
  8775. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8776. }
  8777. } else if (interfaceID == 1123) {
  8778. try {
  8779. System.out.println(
  8780. "Bars Needed = "
  8781. + barsNeeded(removeSlot, interfaceID)
  8782. + " Amount of item = "
  8783. + amountOfItem(removeBar(removeID))
  8784. + " Item ID " + removeID);
  8785. if (barsNeeded(removeSlot, interfaceID)
  8786. <= amountOfItem(removeBar(removeID)) && playerHasItem(removeBar(removeID),barsNeeded(removeSlot, interfaceID)*10)) {
  8787. if (playerHasItem(2347) == true) {
  8788. if (canSmith(removeID)) {
  8789. for (int w = 0; w < 10; w++) {
  8790. RemoveAllWindows();
  8791. setAnimation(0x382);
  8792. addSkillXP(
  8793. smithXP(removeBar(removeID),
  8794. barsNeeded(removeSlot, interfaceID)),
  8795. 13);
  8796. if (removeSlot == 0) {
  8797. ReplaceItems(removeID,
  8798. removeBar(removeID), 10,
  8799. barsNeeded(removeSlot,
  8800. interfaceID));
  8801. }
  8802. if (removeSlot == 1) {
  8803. ReplaceItems(removeID,
  8804. removeBar(removeID), 15,
  8805. barsNeeded(removeSlot,
  8806. interfaceID));
  8807. }
  8808. if (removeSlot == 2) {
  8809. ReplaceItems(removeID,
  8810. removeBar(removeID), 5,
  8811. barsNeeded(removeSlot,
  8812. interfaceID));
  8813. } else {
  8814. ReplaceItems(removeID,
  8815. removeBar(removeID), 1,
  8816. barsNeeded(removeSlot,
  8817. interfaceID));
  8818. }
  8819. }
  8820. } else {
  8821. sendMessage(
  8822. "You need a higher smithing level to smith "
  8823. + GetItemName(removeID) + "s");
  8824. }
  8825. } else {
  8826. sendMessage("You need a hammer to smith this item");
  8827. }
  8828. } else {
  8829. sendMessage("You dont have enough bars to make this");
  8830. }
  8831. } catch (Exception e) {// sendMessage("You dont have enough bars to make this");
  8832. }
  8833. }
  8834. break;
  8835.  
  8836. case 129:
  8837. // bank all items - sell 10 items
  8838. removeSlot = inStream.readUnsignedWordA();
  8839. interfaceID = inStream.readUnsignedWord();
  8840. removeID = inStream.readUnsignedWordA();
  8841. /*println_debug(
  8842. "RemoveItem all: " + removeID + " InterID: " + interfaceID
  8843. + " slot: " + removeSlot);*/
  8844. if (interfaceID == 7423) { // remove from dep box to bank
  8845. if (Item.itemStackable[removeID] == true) {
  8846. bankItem(playerItems[removeSlot], removeSlot,
  8847. playerItemsN[removeSlot]); openUpDepBox();
  8848. } else {
  8849. bankItem(playerItems[removeSlot], removeSlot,
  8850. itemAmount(playerItems[removeSlot])); openUpDepBox();
  8851. }
  8852. }
  8853. if (interfaceID == 5064) {
  8854. // remove from bag to bank
  8855. if (Item.itemStackable[removeID] == true) {
  8856. bankItem(playerItems[removeSlot], removeSlot, playerItemsN[removeSlot]);
  8857. }
  8858. else {
  8859. bankItem(playerItems[removeSlot], removeSlot, itemAmount(playerItems[removeSlot]));
  8860. }
  8861. }
  8862. else if (interfaceID == 5382) {
  8863. // remove from bank
  8864. fromBank(bankItems[removeSlot], removeSlot, bankItemsN[removeSlot]);
  8865. }
  8866. else if (interfaceID == 3322 && ! inDuel) {
  8867. //remove from bag to trade window
  8868. if (Item.itemStackable[removeID])
  8869. tradeItem(removeID, removeSlot, playerItemsN[removeSlot]);
  8870. else
  8871. tradeItem(removeID, removeSlot, 28);
  8872. }
  8873. else if (interfaceID == 3322 && inDuel) {
  8874. //remove from bag to duel window
  8875. if (Item.itemStackable[removeID] || Item.itemIsNote[removeID])
  8876. stakeItem(removeID, removeSlot, playerItemsN[removeSlot]);
  8877. else
  8878. stakeItem(removeID, removeSlot, 28);
  8879. }
  8880. else if (interfaceID == 6669 && inDuel) {
  8881. //remove from duel window
  8882. fromDuel(removeID, removeSlot, offeredItems.get(removeSlot).amount);
  8883. }
  8884. else if (interfaceID == 3415) {
  8885. // remove from trade window
  8886. if (Item.itemStackable[removeID])
  8887. fromTrade(removeID, removeSlot, offeredItems.get(removeSlot).amount);
  8888. else
  8889. fromTrade(removeID, removeSlot, 28);
  8890. }
  8891. else if (interfaceID == 3823) {
  8892. // Show value to sell items
  8893. sellItem(removeID, removeSlot, 10);
  8894. }
  8895. else if (interfaceID == 3900) {
  8896. // Show value to buy items
  8897. buyItem(removeID, removeSlot, 10);
  8898. }
  8899.  
  8900. break;
  8901.  
  8902. case 135:
  8903. // bank X items
  8904. outStream.createFrame(27);
  8905. XremoveSlot = inStream.readSignedWordBigEndian();
  8906. XinterfaceID = inStream.readUnsignedWordA();
  8907. XremoveID = inStream.readSignedWordBigEndian();
  8908.  
  8909. println_debug("RemoveItem X: "+XremoveID+" InterID: "+XinterfaceID+" slot: "+XremoveSlot);
  8910.  
  8911. break;
  8912.  
  8913. case 208:
  8914. // Enter Amounth Part 2
  8915. int EnteredAmount = inStream.readDWord();
  8916. if (EnteredAmount < 1)
  8917. break;
  8918. if (XinterfaceID == 7423) {//remove from dep box to bank
  8919. bankItem(playerItems[XremoveSlot], XremoveSlot, EnteredAmount); openUpDepBox();
  8920. }
  8921. if (XinterfaceID == 5064) {
  8922. // remove from bag to bank
  8923. bankItem(playerItems[XremoveSlot], XremoveSlot, EnteredAmount);
  8924. }
  8925. else if (XinterfaceID == 5382) {
  8926. // remove from bank
  8927. fromBank(bankItems[XremoveSlot], XremoveSlot, EnteredAmount);
  8928. }
  8929. else if (XinterfaceID == 3322 && inDuel) {
  8930. //remove from bag to duel window
  8931. stakeItem(XremoveID, XremoveSlot, EnteredAmount);
  8932. }
  8933. else if (XinterfaceID == 6669 && inDuel) {
  8934. //remove from duel window
  8935. fromDuel(XremoveID, XremoveSlot, EnteredAmount);
  8936. }
  8937. else if (XinterfaceID == 3322) {
  8938. // remove from bag to trade window
  8939. if (XremoveID == 1543)
  8940. break;
  8941. tradeItem(XremoveID, XremoveSlot, EnteredAmount);
  8942. }
  8943. else if (XinterfaceID == 3415) {
  8944. // remove from trade window
  8945. fromTrade(XremoveID, XremoveSlot, EnteredAmount);
  8946. }
  8947. break;
  8948.  
  8949. case 87:
  8950. // drop item
  8951. int droppedItem = inStream.readUnsignedWordA();
  8952.  
  8953. somejunk = inStream.readUnsignedByte()+inStream.readUnsignedByte();
  8954. int slot = inStream.readUnsignedWordA();
  8955.  
  8956. // println_debug("dropItem: "+droppedItem+" Slot: "+slot);
  8957. if (wearing == false) {
  8958. dropItem(droppedItem, slot);
  8959. }
  8960. break;
  8961.  
  8962. case 185:
  8963. // clicking most buttons
  8964. actionButtonId = misc.HexToInt(inStream.buffer, 0, packetSize);
  8965. if (!validClient)
  8966. break;
  8967. resetAction();
  8968. println("ab="+actionButtonId);
  8969. if (duelButton(actionButtonId)) {
  8970. break;
  8971. }
  8972. switch (actionButtonId) {
  8973. case 26076:
  8974. //frame36(6575, 1);
  8975. break;
  8976. case 53202:
  8977. tradestatus = "BUYING";
  8978. sendMessage("Now type ::send *the name of your item*");
  8979. sendMessage("Example: ::send dharoks greataxe");
  8980. closeInterface();
  8981. break;
  8982. case 53203:
  8983. tradestatus = "SELLING";
  8984. sendMessage("Now type ::send *the name of your item*");
  8985. sendMessage("Example: ::send dharoks greataxe");
  8986. closeInterface();
  8987. break;
  8988. case 53204:
  8989. closeInterface();
  8990. break;
  8991. case 53245:
  8992. //frame36(13813, 1);
  8993. break;
  8994. case 25120:
  8995. if (System.currentTimeMillis()-lastButton < 1000) {
  8996. lastButton = System.currentTimeMillis();
  8997. break;
  8998. }
  8999. else {
  9000. lastButton = System.currentTimeMillis();
  9001. }
  9002. client dw = getClient(duel_with);
  9003. if (!validClient(duel_with))
  9004. declineDuel();
  9005. duelConfirmed2 = true;
  9006. if (dw.duelConfirmed2) {
  9007. startDuel();
  9008. dw.startDuel();
  9009. }
  9010. else {
  9011. sendQuest("Waiting for other player...", 6571);
  9012. dw.sendQuest("Other player has accepted", 6571);
  9013. }
  9014. break;
  9015. case 15147:
  9016. //bronze
  9017. case 15146:
  9018. case 10247:
  9019. case 9110:
  9020. case 15151:
  9021. //iron
  9022. case 15150:
  9023. case 15149:
  9024. case 15148:
  9025. case 15155:
  9026. //silver
  9027. case 15154:
  9028. case 15153:
  9029. case 15152:
  9030. case 15159:
  9031. //steel
  9032. case 15158:
  9033. case 15157:
  9034. case 15156:
  9035. case 15163:
  9036. //gold
  9037. case 15162:
  9038. case 15161:
  9039. case 15160:
  9040. case 29017:
  9041. //mithril
  9042. case 29016:
  9043. case 24253:
  9044. case 16062:
  9045. case 29022:
  9046. //addy
  9047. case 29020:
  9048. case 29019:
  9049. case 29018:
  9050. case 29026:
  9051. //rune
  9052. case 29025:
  9053. case 29024:
  9054. case 29023:
  9055. startSmelt(actionButtonId);
  9056. break;
  9057. case 50235: //home teleport
  9058. triggerTele(3430+misc.random(2), 2917+misc.random(2), 0, false);
  9059. break;
  9060. case 50245: //ardourgne teleport
  9061. triggerTele(2662+misc.random(3), 3306+misc.random(3), 0, false);
  9062. break;
  9063. case 50253: //camelot teleport
  9064. triggerTele(2750+misc.random(2), 3477+misc.random(2), 0, false);
  9065. break;
  9066. case 51005: //port khazard teleport
  9067. triggerTele(2656+misc.random(2), 3158+misc.random(2), 0, false);
  9068. break;
  9069. case 51013: //lletya teleport
  9070. triggerTele(2341+misc.random(1), 3171+misc.random(1), 0, false);
  9071. break;
  9072. case 51023: // grand tree teleport
  9073. triggerTele(2461+misc.random(3), 3456+misc.random(3), 0, false);
  9074. break;
  9075. case 51031: // crandor teleport
  9076. triggerTele(2850+misc.random(1), 3241+misc.random(1), 0, true);
  9077. break;
  9078. case 51039: // monastry teleport
  9079. triggerTele(3052+misc.random(1), 3500+misc.random(1), 0, false);
  9080. break;
  9081. case 34185:
  9082. case 34184:
  9083. //vamps
  9084. case 34183:
  9085. case 34182:
  9086. case 34189:
  9087. //chaps
  9088. case 34188:
  9089. case 34187:
  9090. case 34186:
  9091. case 34193:
  9092. case 34192:
  9093. case 34191:
  9094. case 34190:
  9095. startCraft(actionButtonId);
  9096. break;
  9097. case 33187:
  9098. //armor
  9099. case 33186:
  9100. case 33185:
  9101. case 33190:
  9102. //gloves
  9103. case 33189:
  9104. case 33188:
  9105. case 33193:
  9106. //boots
  9107. case 33192:
  9108. case 33191:
  9109. case 33196:
  9110. //vamps
  9111. case 33195:
  9112. case 33194:
  9113. case 33199:
  9114. //chaps
  9115. case 33198:
  9116. case 33197:
  9117. case 33202:
  9118. //coif
  9119. case 33201:
  9120. case 33200:
  9121. case 33205:
  9122. //cowl
  9123. case 33204:
  9124. case 33203:
  9125. startCraft(actionButtonId);
  9126. break;
  9127. case 9118:
  9128. case 19022:
  9129. closeInterface();
  9130. break;
  9131. case 57225:
  9132. startTan(1, 0);
  9133. break;
  9134. case 57217:
  9135. startTan(5, 0);
  9136. break;
  9137. case 57209:
  9138. startTan(27, 0);
  9139. break;
  9140. case 57201:
  9141. startTan(27, 0);
  9142. break;
  9143. case 57229:
  9144. startTan(1, 1);
  9145. break;
  9146. case 57221:
  9147. startTan(5, 1);
  9148. break;
  9149. case 57213:
  9150. startTan(27, 1);
  9151. break;
  9152. case 57205:
  9153. startTan(27, 1);
  9154. break;
  9155. case 57227:
  9156. startTan(1, 2);
  9157. break;
  9158. case 57219:
  9159. startTan(5, 2);
  9160. break;
  9161. case 57211:
  9162. case 57203:
  9163. startTan(27, 2);
  9164. break;
  9165. case 57228:
  9166. startTan(1, 3);
  9167. break;
  9168. case 57220:
  9169. startTan(5, 3);
  9170. break;
  9171. case 57212:
  9172. case 57204:
  9173. startTan(27, 3);
  9174. break;
  9175. case 57231:
  9176. startTan(1, 4);
  9177. break;
  9178. case 57223:
  9179. startTan(5, 4);
  9180. break;
  9181. case 57215:
  9182. case 57207:
  9183. startTan(27, 4);
  9184. break;
  9185. case 57232:
  9186. startTan(1, 5);
  9187. break;
  9188. case 57224:
  9189. startTan(5, 5);
  9190. break;
  9191. case 57216:
  9192. case 57208:
  9193. startTan(27, 5);
  9194. break;
  9195. case 34170:
  9196. fletchBow(true, 1);
  9197. break;
  9198. case 34169:
  9199. fletchBow(true, 5);
  9200. break;
  9201. case 34168:
  9202. fletchBow(true, 10);
  9203. break;
  9204. case 34167:
  9205. fletchBow(true, 27);
  9206. break;
  9207. case 34174:
  9208. //1
  9209. fletchBow(false, 1);
  9210. break;
  9211. case 34173:
  9212. //5
  9213. fletchBow(false, 5);
  9214. break;
  9215. case 34172:
  9216. //10
  9217. fletchBow(false, 10);
  9218. break;
  9219. case 34171:
  9220. fletchBow(false, 27);
  9221. break;
  9222. case 10252:
  9223. case 11000:
  9224. case 10253:
  9225. case 11001:
  9226. case 10254:
  9227. case 10255:
  9228. case 11002:
  9229. case 11011:
  9230. case 11013:
  9231. case 11014:
  9232. case 11010:
  9233. case 11012:
  9234. case 11006:
  9235. case 11009:
  9236. case 11008:
  9237. case 11004:
  9238. case 11003:
  9239. case 11005:
  9240. case 47002:
  9241. case 54090:
  9242. case 11007:
  9243. if (randomed && actionButtonId == statId[random_skill]) {
  9244. randomed = false;
  9245. closeInterface();
  9246. addItem(995, misc.random(1200));
  9247. }
  9248. case 1097:
  9249. if(premium) {
  9250. setSidebarInterface(0, 1689);
  9251. } else {
  9252. sendMessage("You need to be premium to autocast.");
  9253. }
  9254. break;
  9255. case 51133:
  9256. case 51185:
  9257. case 51091:
  9258. case 24018:
  9259. case 51159:
  9260. case 51211:
  9261. case 51111:
  9262. case 51069:
  9263. case 51146:
  9264. case 51198:
  9265. case 51102:
  9266. case 51058:
  9267. case 51172:
  9268. case 51224:
  9269. case 51122:
  9270. case 51080:
  9271. for (int index = 0; index < ancientButton.length; index++) {
  9272. if (actionButtonId == ancientButton[index]) {
  9273. autocast_spellIndex = index;
  9274. setClientConfig(108, 1);
  9275. SendWeapon(
  9276. playerEquipment[playerWeapon],
  9277. ItemHandler.ItemList[playerEquipment[playerWeapon] - 1].itemName);
  9278. debug("autocast_spellIndex=" + autocast_spellIndex);
  9279. }}
  9280. break;
  9281. case 1093:
  9282. if(autocast_spellIndex > -1) {
  9283. sendMessage("You turn Off the autocast.");
  9284. autocast_spellIndex = -1;
  9285. setClientConfig(108, 0);
  9286. } else {
  9287. sendMessage("Please select a spell before try turn it off.");
  9288. }
  9289. break;
  9290. case 24017:
  9291. SendWeapon(playerEquipment[playerWeapon], ItemHandler.ItemList[playerEquipment[playerWeapon]-1].itemName);
  9292. break;
  9293.  
  9294. case 2171:
  9295. // Retribution
  9296. if (Retribution == false) {
  9297. Retribution = true;
  9298. }
  9299. else if (Retribution == true) {
  9300. Retribution = false;
  9301. }
  9302. break;
  9303.  
  9304. case 14067:
  9305. appearanceUpdateRequired = true;
  9306. updateRequired = true;
  9307. closeInterface();
  9308. RemoveAllWindows();
  9309. break;
  9310.  
  9311. case 153:
  9312. if (playerEnergy > 0) {
  9313. isRunning2 = true;
  9314. }
  9315. break;
  9316.  
  9317. case 152:
  9318. isRunning2 = false;
  9319. break;
  9320.  
  9321. case 130:
  9322. // close interface
  9323. //println_debug("Closing Interface");
  9324. break;
  9325.  
  9326. case 168:
  9327. // yes emote
  9328. if (emotes == 0) {
  9329. emotes = 1;
  9330. pEmote = 0x357;
  9331. updateRequired = true;
  9332. appearanceUpdateRequired = true;
  9333. }
  9334. else {
  9335. emotes = 0;
  9336. pEmote = playerSE;
  9337. updateRequired = true;
  9338. appearanceUpdateRequired = true;
  9339. }
  9340. break;
  9341.  
  9342. case 169:
  9343. // no emote
  9344. if (emotes == 0) {
  9345. emotes = 1;
  9346. pEmote = 0x358;
  9347. updateRequired = true;
  9348. appearanceUpdateRequired = true;
  9349. }
  9350. else {
  9351. emotes = 0;
  9352. pEmote = playerSE;
  9353. updateRequired = true;
  9354. appearanceUpdateRequired = true;
  9355. }
  9356. break;
  9357.  
  9358. case 162:
  9359. // think emote
  9360. if (emotes == 0) {
  9361. emotes = 1;
  9362. pEmote = 0x359;
  9363. updateRequired = true;
  9364. appearanceUpdateRequired = true;
  9365. }
  9366. else {
  9367. emotes = 0;
  9368. pEmote = playerSE;
  9369. updateRequired = true;
  9370. appearanceUpdateRequired = true;
  9371. }
  9372. break;
  9373.  
  9374. case 164:
  9375. // bow emote
  9376. if (emotes == 0) {
  9377. emotes = 1;
  9378. pEmote = 0x35A;
  9379. updateRequired = true;
  9380. appearanceUpdateRequired = true;
  9381. }
  9382. else {
  9383. emotes = 0;
  9384. pEmote = playerSE;
  9385. updateRequired = true;
  9386. appearanceUpdateRequired = true;
  9387. }
  9388. break;
  9389.  
  9390. case 165:
  9391. // angry emote
  9392. if (emotes == 0) {
  9393. emotes = 1;
  9394. pEmote = 0x35B;
  9395. updateRequired = true;
  9396. appearanceUpdateRequired = true;
  9397. }
  9398. else {
  9399. emotes = 0;
  9400. pEmote = playerSE;
  9401. updateRequired = true;
  9402. appearanceUpdateRequired = true;
  9403. }
  9404. break;
  9405.  
  9406. case 161:
  9407. // cry emote
  9408. if (emotes == 0) {
  9409. emotes = 1;
  9410. pEmote = 0x35C;
  9411. updateRequired = true;
  9412. appearanceUpdateRequired = true;
  9413. }
  9414. else {
  9415. emotes = 0;
  9416. pEmote = playerSE;
  9417. updateRequired = true;
  9418. appearanceUpdateRequired = true;
  9419. }
  9420. break;
  9421.  
  9422. case 170:
  9423. // laugh emote
  9424. if (emotes == 0) {
  9425. emotes = 1;
  9426. pEmote = 0x35D;
  9427. updateRequired = true;
  9428. appearanceUpdateRequired = true;
  9429. }
  9430. else {
  9431. emotes = 0;
  9432. pEmote = playerSE;
  9433. updateRequired = true;
  9434. appearanceUpdateRequired = true;
  9435. }
  9436. break;
  9437.  
  9438. case 171:
  9439. // cheer emote
  9440. if (emotes == 0) {
  9441. emotes = 1;
  9442. pEmote = 0x35E;
  9443. updateRequired = true;
  9444. appearanceUpdateRequired = true;
  9445. }
  9446. else {
  9447. emotes = 0;
  9448. pEmote = playerSE;
  9449. updateRequired = true;
  9450. appearanceUpdateRequired = true;
  9451. }
  9452. break;
  9453.  
  9454. case 163:
  9455. // wave emote
  9456. if (emotes == 0) {
  9457. emotes = 1;
  9458. pEmote = 0x35F;
  9459. updateRequired = true;
  9460. appearanceUpdateRequired = true;
  9461. }
  9462. else {
  9463. emotes = 0;
  9464. pEmote = playerSE;
  9465. updateRequired = true;
  9466. appearanceUpdateRequired = true;
  9467. }
  9468. break;
  9469.  
  9470. case 167:
  9471. // beckon emote
  9472. if (emotes == 0) {
  9473. emotes = 1;
  9474. pEmote = 0x360;
  9475. updateRequired = true;
  9476. appearanceUpdateRequired = true;
  9477. }
  9478. else {
  9479. emotes = 0;
  9480. pEmote = playerSE;
  9481. updateRequired = true;
  9482. appearanceUpdateRequired = true;
  9483. }
  9484. break;
  9485.  
  9486. case 172:
  9487. // clap emote
  9488. if (emotes == 0) {
  9489. emotes = 1;
  9490. pEmote = 0x361;
  9491. updateRequired = true;
  9492. appearanceUpdateRequired = true;
  9493. }
  9494. else {
  9495. emotes = 0;
  9496. pEmote = playerSE;
  9497. updateRequired = true;
  9498. appearanceUpdateRequired = true;
  9499. }
  9500. break;
  9501.  
  9502. case 166:
  9503. // dance emote
  9504. if (emotes == 0) {
  9505. emotes = 1;
  9506. pEmote = 920;
  9507. updateRequired = true;
  9508. appearanceUpdateRequired = true;
  9509. }
  9510. else {
  9511. emotes = 0;
  9512. pEmote = playerSE;
  9513. updateRequired = true;
  9514. appearanceUpdateRequired = true;
  9515. }
  9516. break;
  9517.  
  9518. case 52050:
  9519. // panic emote
  9520. if (emotes == 0) {
  9521. emotes = 1;
  9522. pEmote = 0x839;
  9523. updateRequired = true;
  9524. appearanceUpdateRequired = true;
  9525. }
  9526. else {
  9527. emotes = 0;
  9528. pEmote = playerSE;
  9529. updateRequired = true;
  9530. appearanceUpdateRequired = true;
  9531. }
  9532. break;
  9533.  
  9534. case 52051:
  9535. // jig emote
  9536. if (emotes == 0) {
  9537. emotes = 1;
  9538. pEmote = 0x83A;
  9539. updateRequired = true;
  9540. appearanceUpdateRequired = true;
  9541. }
  9542. else {
  9543. emotes = 0;
  9544. pEmote = playerSE;
  9545. updateRequired = true;
  9546. appearanceUpdateRequired = true;
  9547. }
  9548. break;
  9549.  
  9550. case 52052:
  9551. // spin emote
  9552. if (emotes == 0) {
  9553. emotes = 1;
  9554. pEmote = 0x83B;
  9555. updateRequired = true;
  9556. appearanceUpdateRequired = true;
  9557. }
  9558. else {
  9559. emotes = 0;
  9560. pEmote = playerSE;
  9561. updateRequired = true;
  9562. appearanceUpdateRequired = true;
  9563. }
  9564. break;
  9565.  
  9566. case 52053:
  9567. // headbang emote
  9568. if (emotes == 0) {
  9569. emotes = 1;
  9570. pEmote = 0x83C;
  9571. updateRequired = true;
  9572. appearanceUpdateRequired = true;
  9573. }
  9574. else {
  9575. emotes = 0;
  9576. pEmote = playerSE;
  9577. updateRequired = true;
  9578. appearanceUpdateRequired = true;
  9579. }
  9580. break;
  9581.  
  9582. case 52054:
  9583. // joy jump emote
  9584. if (emotes == 0) {
  9585. emotes = 1;
  9586. pEmote = 0x83D;
  9587. updateRequired = true;
  9588. appearanceUpdateRequired = true;
  9589. }
  9590. else {
  9591. emotes = 0;
  9592. pEmote = playerSE;
  9593. updateRequired = true;
  9594. appearanceUpdateRequired = true;
  9595. }
  9596. break;
  9597.  
  9598. case 52055:
  9599. // rasp' berry emote
  9600. if (emotes == 0) {
  9601. emotes = 1;
  9602. pEmote = 0x83E;
  9603. updateRequired = true;
  9604. appearanceUpdateRequired = true;
  9605. }
  9606. else {
  9607. emotes = 0;
  9608. pEmote = playerSE;
  9609. updateRequired = true;
  9610. appearanceUpdateRequired = true;
  9611. }
  9612. break;
  9613.  
  9614. case 52056:
  9615. // yawn emote
  9616. if (emotes == 0) {
  9617. emotes = 1;
  9618. pEmote = 0x83F;
  9619. updateRequired = true;
  9620. appearanceUpdateRequired = true;
  9621. }
  9622. else {
  9623. emotes = 0;
  9624. pEmote = playerSE;
  9625. updateRequired = true;
  9626. appearanceUpdateRequired = true;
  9627. }
  9628. break;
  9629.  
  9630. case 52057:
  9631. // salute emote
  9632. if (emotes == 0) {
  9633. emotes = 1;
  9634. pEmote = 0x840;
  9635. updateRequired = true;
  9636. appearanceUpdateRequired = true;
  9637. }
  9638. else {
  9639. emotes = 0;
  9640. pEmote = playerSE;
  9641. updateRequired = true;
  9642. appearanceUpdateRequired = true;
  9643. }
  9644. break;
  9645.  
  9646. case 52058:
  9647. // shrug emote
  9648. if (emotes == 0) {
  9649. emotes = 1;
  9650. pEmote = 0x841;
  9651. updateRequired = true;
  9652. appearanceUpdateRequired = true;
  9653. }
  9654. else {
  9655. emotes = 0;
  9656. pEmote = playerSE;
  9657. updateRequired = true;
  9658. appearanceUpdateRequired = true;
  9659. }
  9660. break;
  9661.  
  9662. case 43092:
  9663. // blow kiss emote
  9664. if (emotes == 0) {
  9665. emotes = 1;
  9666. pEmote = 0x558;
  9667. updateRequired = true;
  9668. appearanceUpdateRequired = true;
  9669. }
  9670. else {
  9671. emotes = 0;
  9672. pEmote = playerSE;
  9673. updateRequired = true;
  9674. appearanceUpdateRequired = true;
  9675. }
  9676. break;
  9677.  
  9678. case 2155:
  9679. // glass box emote
  9680. if (emotes == 0) {
  9681. emotes = 1;
  9682. pEmote = 0x46B;
  9683. updateRequired = true;
  9684. appearanceUpdateRequired = true;
  9685. }
  9686. else {
  9687. emotes = 0;
  9688. pEmote = playerSE;
  9689. updateRequired = true;
  9690. appearanceUpdateRequired = true;
  9691. }
  9692. break;
  9693.  
  9694. case 25103:
  9695. // climb rope emote
  9696. if (emotes == 0) {
  9697. emotes = 1;
  9698. pEmote = 0x46A;
  9699. updateRequired = true;
  9700. appearanceUpdateRequired = true;
  9701. }
  9702. else {
  9703. emotes = 0;
  9704. pEmote = playerSE;
  9705. updateRequired = true;
  9706. appearanceUpdateRequired = true;
  9707. }
  9708. break;
  9709.  
  9710. case 25106:
  9711. // lean emote
  9712. if (emotes == 0) {
  9713. emotes = 1;
  9714. pEmote = 0x469;
  9715. updateRequired = true;
  9716. appearanceUpdateRequired = true;
  9717. }
  9718. else {
  9719. emotes = 0;
  9720. pEmote = playerSE;
  9721. updateRequired = true;
  9722. appearanceUpdateRequired = true;
  9723. }
  9724. break;
  9725.  
  9726. case 2154:
  9727. // glass wall emote
  9728. if (emotes == 0) {
  9729. emotes = 1;
  9730. pEmote = 0x468;
  9731. updateRequired = true;
  9732. appearanceUpdateRequired = true;
  9733. }
  9734. else {
  9735. emotes = 0;
  9736. pEmote = playerSE;
  9737. updateRequired = true;
  9738. appearanceUpdateRequired = true;
  9739. }
  9740. break;
  9741.  
  9742. case 52071:
  9743. // goblin bow emote
  9744. if (emotes == 0) {
  9745. emotes = 1;
  9746. pEmote = 0x84F;
  9747. updateRequired = true;
  9748. appearanceUpdateRequired = true;
  9749. }
  9750. else {
  9751. emotes = 0;
  9752. pEmote = playerSE;
  9753. updateRequired = true;
  9754. appearanceUpdateRequired = true;
  9755. }
  9756. break;
  9757.  
  9758. case 52072:
  9759. // goblin dance emote
  9760. if (emotes == 0) {
  9761. emotes = 1;
  9762. pEmote = 0x850;
  9763. updateRequired = true;
  9764. appearanceUpdateRequired = true;
  9765. }
  9766. else {
  9767. emotes = 0;
  9768. pEmote = playerSE;
  9769. updateRequired = true;
  9770. appearanceUpdateRequired = true;
  9771. }
  9772. break;
  9773. case 52073:
  9774. // zombie emote
  9775. if (emotes == 0) {
  9776. emotes = 1;
  9777. pEmote = 0x3544;
  9778. updateRequired = true;
  9779. appearanceUpdateRequired = true;
  9780. }
  9781. else {
  9782. emotes = 0;
  9783. pEmote = playerSE;
  9784. updateRequired = true;
  9785. appearanceUpdateRequired = true;
  9786. }
  9787. break;
  9788.  
  9789.  
  9790. case 22228:
  9791. // punch (unarmed)
  9792. case 9125:
  9793. // Accurate
  9794. case 48010:
  9795. // flick (whip)
  9796. case 21200:
  9797. // spike (pickaxe)
  9798. case 1080:
  9799. // bash (staff)
  9800. case 6168:
  9801. // chop (axe)
  9802. case 6236:
  9803. // accurate (long bow)
  9804. case 17102:
  9805. // accurate (darts)
  9806. case 8234:
  9807. // stab (dagger)
  9808. FightType = 1;
  9809. SkillID = 0;
  9810. break;
  9811.  
  9812. case 22229:
  9813. // block (unarmed)
  9814. case 9126:
  9815. // Defensive
  9816. case 48008:
  9817. // deflect (whip)
  9818. case 21201:
  9819. // block (pickaxe)
  9820. case 1078:
  9821. // focus - block (staff)
  9822. case 6169:
  9823. // block (axe)
  9824. case 33019:
  9825. // fend (hally)
  9826. case 18078:
  9827. // block (spear)
  9828. case 8235:
  9829. // block (dagger)
  9830. FightType = 4;
  9831. SkillID = 1;
  9832. break;
  9833.  
  9834. case 9127:
  9835. // Controlled
  9836. case 48009:
  9837. // lash (whip)
  9838. case 33018:
  9839. // jab (hally)
  9840. case 6234:
  9841. // longrange (long bow)
  9842. case 18077:
  9843. // lunge (spear)
  9844. case 18080:
  9845. // swipe (spear)
  9846. case 18079:
  9847. // pound (spear)
  9848. case 17100:
  9849. // longrange (darts)
  9850. FightType = 3;
  9851. SkillID = 3;
  9852. break;
  9853.  
  9854. case 22230:
  9855. // kick (unarmed)
  9856. case 9128:
  9857. // Aggressive
  9858. case 21203:
  9859. // impale (pickaxe)
  9860. case 21202:
  9861. // smash (pickaxe)
  9862. case 1079:
  9863. // pound (staff)
  9864. case 6171:
  9865. // hack (axe)
  9866. case 6170:
  9867. // smash (axe)
  9868. case 33020:
  9869. // swipe (hally)
  9870. case 6235:
  9871. // rapid (long bow)
  9872. case 17101:
  9873. // repid (darts)
  9874. case 8237:
  9875. // lunge (dagger)
  9876. case 8236:
  9877. // slash (dagger)
  9878. FightType = 2;
  9879. SkillID = 2;
  9880. break;
  9881.  
  9882. case 9154:
  9883. // Log out
  9884. //if(currentHealth > 0)
  9885. logout();
  9886. break;
  9887.  
  9888. case 21011:
  9889. takeAsNote = false;
  9890. break;
  9891.  
  9892. case 21010:
  9893. takeAsNote = true;
  9894. break;
  9895.  
  9896. case 13092:
  9897. if (System.currentTimeMillis()-lastButton < 1000) {
  9898. lastButton = System.currentTimeMillis();
  9899. break;
  9900. }
  9901. else {
  9902. lastButton = System.currentTimeMillis();
  9903. }
  9904. if (inTrade && ! tradeConfirmed) {
  9905. lastButton = System.currentTimeMillis();
  9906. client other = getClient(trade_reqId);
  9907. tradeConfirmed = true;
  9908. if (other.tradeConfirmed) {
  9909. confirmScreen();
  9910. other.confirmScreen();
  9911. break;
  9912. }
  9913. sendFrame126("Waiting for other player...", 3431);
  9914. if (validClient(trade_reqId)) {
  9915. other.sendFrame126("Other player has accepted", 3431);
  9916. }
  9917. }
  9918. break;
  9919.  
  9920. case 13218:
  9921. client other = getClient(trade_reqId);
  9922. if (!validClient(trade_reqId))
  9923. break;
  9924. if (System.currentTimeMillis()-lastButton < 1000) {
  9925. lastButton = System.currentTimeMillis();
  9926. break;
  9927. }
  9928. else {
  9929. lastButton = System.currentTimeMillis();
  9930. }
  9931. lastButton = System.currentTimeMillis();
  9932. if (inTrade && tradeConfirmed && other.tradeConfirmed && ! tradeConfirmed2) {
  9933. lastButton = System.currentTimeMillis();
  9934. tradeConfirmed2 = true;
  9935. if (other.tradeConfirmed2) {
  9936. giveItems();
  9937. other.giveItems();
  9938. break;
  9939. }
  9940. other.sendQuest("Other player has accepted.", 3535);
  9941. sendQuest("Waiting for other player...", 3535);
  9942. }
  9943. break;
  9944.  
  9945. case 9157:
  9946. if (dialog) {
  9947. switch (dialogId) {
  9948. case 1:
  9949.  
  9950. break;
  9951. }
  9952. }
  9953. if (NpcDialogue == 2) {
  9954. NpcDialogue = 0;
  9955. NpcDialogueSend = false;
  9956. openUpBank();
  9957. }
  9958. else if (NpcDialogue == 4) {
  9959. // Aubury
  9960. openUpShop(1);
  9961. }
  9962. else if (NpcDialogue == 11) {
  9963. if(playerHasItem(995, 2500)) {
  9964. // Rug Merchant
  9965. triggerTele(3299+misc.random(2), 3023+misc.random(2), 0, false);
  9966. deleteItem(995, 2500);
  9967. closeInterface();
  9968. sendMessage("You have been taken to the desert mining camp");
  9969. } else {
  9970. closeInterface();
  9971. sendMessage("You need 2500gp to go here");
  9972. }
  9973. }
  9974. break;
  9975.  
  9976. case 9158:
  9977. if (NpcDialogue == 2) {
  9978. NpcDialogue = 0;
  9979. NpcDialogueSend = false;
  9980. openUpPinSettings();
  9981. }
  9982. else if (NpcDialogue == 4) {
  9983. NpcDialogue = 5;
  9984. NpcDialogueSend = false;
  9985. }
  9986. else if (NpcDialogue == 11) {
  9987. // Rug Merchant
  9988. closeInterface();
  9989. }
  9990. else if (NpcDialogue == 14) {
  9991. //Runescape Guide
  9992. closeInterface();
  9993. }
  9994. break;
  9995.  
  9996. case 7212:
  9997. setSidebarInterface(0, 328);
  9998. break;
  9999. case 26018:
  10000. if (!inDuel || ! validClient(duel_with))
  10001. break;
  10002. client o = getClient(duel_with);
  10003. if (System.currentTimeMillis()-lastButton < 1000) {
  10004. lastButton = System.currentTimeMillis();
  10005. break;
  10006. }
  10007. else {
  10008. lastButton = System.currentTimeMillis();
  10009. }
  10010. duelConfirmed = true;
  10011. if (duelConfirmed && o.duelConfirmed) {
  10012. canOffer = false;
  10013. confirmDuel();
  10014. o.confirmDuel();
  10015. }
  10016. else {
  10017. sendFrame126("Waiting for other player...", 6684);
  10018. o.sendFrame126("Other player has accepted.", 6684);
  10019. }
  10020.  
  10021. break;
  10022.  
  10023. default:
  10024. // System.out.println("Player stands in: X="+absX+" Y="+absY);
  10025. println_debug("Case 185: Action Button: "+actionButtonId);
  10026. break;
  10027. }
  10028. break;
  10029.  
  10030. // the following Ids are the reason why AR-type cheats are hopeless to make...
  10031. // basically they're just there to make reversing harder
  10032. case 226:
  10033. case 78:
  10034. case 148:
  10035. case 183:
  10036. case 230:
  10037. case 136:
  10038. case 189:
  10039. case 152:
  10040. case 200:
  10041. case 85:
  10042. case 165:
  10043. case 238:
  10044. case 150:
  10045. case 36:
  10046. case 246:
  10047. case 77:
  10048. break;
  10049.  
  10050. // any packets we might have missed
  10051. default: interfaceID = inStream.readUnsignedWordA();
  10052. int actionButtonId1 = misc.HexToInt(inStream.buffer, 0, packetSize);
  10053.  
  10054. println_debug("Unhandled packet ["+packetType+", InterFaceId: "+interfaceID+", size="+packetSize+"]: ]"+misc.Hex(inStream.buffer, 1, packetSize)+"[");
  10055. println_debug("Action Button: "+actionButtonId1);
  10056. break;
  10057. }
  10058. }
  10059. private int somejunk;
  10060.  
  10061. public void yell(String message) {
  10062. for (Player p: handler.players) {
  10063. if (message.indexOf("tradereq") > 0 || message.indexOf("duelreq") > 0)
  10064. return;
  10065. if (p == null || ! p.isActive)
  10066. continue;
  10067. client temp = (client)p;
  10068. if (temp.absX > 0 && temp.absY > 0)
  10069. if (temp != null && ! temp.disconnected && p.isActive)
  10070. temp.sendMessage(message);
  10071. }
  10072. }
  10073.  
  10074. /*
  10075. [0] Varrock
  10076. [1] Wizard Tower
  10077. [2] Ardougne
  10078. [3] Magic Guild
  10079. */
  10080. public boolean stairs(int stairs, int teleX, int teleY) {
  10081. if (IsStair == false) {
  10082. IsStair = true;
  10083. if (stairs == 1) {
  10084. heightLevel += 1;
  10085. } else if (stairs == 2) {
  10086. heightLevel -= 1;
  10087. } else if (stairs == 21) {
  10088. heightLevel += 1;
  10089. } else if (stairs == 22) {
  10090. heightLevel -= 1;
  10091. }
  10092. teleportToX = teleX;
  10093. teleportToY = teleY;
  10094. if (stairs == 3 || stairs == 5 || stairs == 9) {
  10095. teleportToY += 6400;
  10096. } else if (stairs == 4 || stairs == 6 || stairs == 10) {
  10097. teleportToY -= 6400;
  10098. } else if (stairs == 7) {
  10099. teleportToX = 3104;
  10100. teleportToY = 9576;
  10101. } else if (stairs == 8) {
  10102. teleportToX = 3105;
  10103. teleportToY = 3162;
  10104. } else if (stairs == 11) {
  10105. teleportToX = 2856;
  10106. teleportToY = 9570;
  10107. } else if (stairs == 12) {
  10108. teleportToX = 2857;
  10109. teleportToY = 3167;
  10110. } else if (stairs == 13) {
  10111. heightLevel += 3;
  10112. teleportToX = skillX;
  10113. teleportToY = skillY;
  10114. } else if (stairs == 15) {
  10115. teleportToY += (6400-(stairDistance+stairDistanceAdd));
  10116. } else if (stairs == 14) {
  10117. teleportToY -= (6400-(stairDistance+stairDistanceAdd));
  10118. } else if (stairs == 16) {
  10119. teleportToX = 2828;
  10120. teleportToY = 9772;
  10121. } else if (stairs == 17) {
  10122. teleportToX = 3494;
  10123. teleportToY = 3465;
  10124. } else if (stairs == 18) {
  10125. teleportToX = 3477;
  10126. teleportToY = 9845;
  10127. } else if (stairs == 19) {
  10128. teleportToX = 3543;
  10129. teleportToY = 3463;
  10130. } else if (stairs == 20) {
  10131. teleportToX = 3549;
  10132. teleportToY = 9865;
  10133. } else if (stairs == 21) {
  10134. teleportToY += (stairDistance+stairDistanceAdd);
  10135. } else if (stairs == 22) {
  10136. teleportToY -= (stairDistance+stairDistanceAdd);
  10137. } else if (stairs == 23) {
  10138. teleportToX = 2480;
  10139. teleportToY = 5175;
  10140. } else if (stairs == 24) {
  10141. teleportToX = 2862;
  10142. teleportToY = 9572;
  10143. } else if (stairs == 27) {
  10144. teleportToX = 2453;
  10145. teleportToY = 4468;
  10146. } else if (stairs == 28) {
  10147. teleportToX = 3201;
  10148. teleportToY = 3169;
  10149. }
  10150. if (stairs == 5 || stairs == 10) {
  10151. teleportToX += (stairDistance+stairDistanceAdd);
  10152. }
  10153. if (stairs == 6 || stairs == 9) {
  10154. teleportToX -= (stairDistance-stairDistanceAdd);
  10155. }
  10156. }
  10157. resetStairs();
  10158. return true;
  10159. }
  10160.  
  10161. public boolean resetStairs() {
  10162. stairs = 0;
  10163. skillX = -1;
  10164. skillY = -1;
  10165. stairDistance = 1;
  10166. stairDistanceAdd = 0;
  10167. IsUsingSkill = false;
  10168. return true;
  10169. }
  10170.  
  10171. public boolean crackCracker() {
  10172. sendMessage("Somone used a crackers on you...");
  10173. CrackerMsg = false;
  10174. if (CrackerForMe == true) {
  10175. if (freeSlots() > 0) {
  10176. addItem(Item.randomPHat(), 1);
  10177. sendMessage("And you get the crackers item.");
  10178. } else {
  10179. sendMessage("but you don't have enough space in your inventory.");
  10180. }
  10181. CrackerForMe = false;
  10182. } else {
  10183. sendMessage("but you didn't get the crackers item.");
  10184. }
  10185. return true;
  10186. }
  10187.  
  10188. public boolean IsInCW(int coordX, int coordY) {
  10189. if (coordY >= 3068 && coordY <= 3143 && coordX <= 2436 && coordX >= 2365) {
  10190. return true;
  10191.  
  10192. } else {
  10193. return false;
  10194. }
  10195. }
  10196.  
  10197. public boolean IsInTz(int coordX, int coordY) {
  10198. if (coordY >= 5129 && coordY <= 5167 && coordX <= 2418 && coordX >= 2375) {
  10199. return true;
  10200.  
  10201. } else {
  10202. return false;
  10203. }
  10204. }
  10205.  
  10206. public boolean isInWilderness(int coordX, int coordY, int Type) {
  10207. if (Type == 1) {
  10208. if (coordY >= 3520 && coordY <= 3967 && coordX <= 3392 && coordX >= 2942) {
  10209. return true;
  10210. }
  10211. } else if (Type == 2) {
  10212. if (coordY >= 3512 && coordY <= 3967 && coordX <= 3392 && coordX >= 2942) {
  10213. return true;
  10214. }
  10215. }
  10216. return false;
  10217. }
  10218.  
  10219. public boolean checkWildRange(int pcombat)
  10220. {
  10221. int wildLvl = (((absY - 3520) / 8) + 1);
  10222. return (pcombat >= combatLevel && combatLevel + wildLvl >= pcombat || pcombat < combatLevel && combatLevel - wildLvl <= pcombat || pcombat == combatLevel);
  10223. }
  10224.  
  10225. //pk: 2726 9193
  10226. public boolean Attack() {
  10227. if (!(AttackingOn > 0) || ! (AttackingOn < server.playerHandler.players.length)) {
  10228. ResetAttack();
  10229. return false;
  10230. }
  10231. if (playerId < 1) {
  10232. sendMessage("Error: Your player id is invalid. Please try again or logout and back in");
  10233. }
  10234.  
  10235. if (AttackingOn > 0 && !server.pking) {
  10236. sendMessage("Pking has been disabled ask Bman11293 to type ::enablepk");
  10237. ResetAttack();
  10238. return false;
  10239. }
  10240.  
  10241. boolean UseBow = false;
  10242. if (playerEquipment[playerWeapon] == 4212) {
  10243. UseBow = true;
  10244. }
  10245. if (playerEquipment[playerWeapon] == 2883) {
  10246. UseBow = true;
  10247. }
  10248. if (playerEquipment[playerWeapon] == 6082) {
  10249. UseBow = true;
  10250. }
  10251. if (playerEquipment[playerWeapon] == 4214) {
  10252. UseBow = true;
  10253. }
  10254. if (playerEquipment[playerWeapon] == 767) {
  10255. UseBow = true;
  10256. }
  10257. if (playerEquipment[playerWeapon] == 837) {
  10258. UseBow = true;
  10259. }
  10260. if (playerEquipment[playerWeapon] == 841) {
  10261. UseBow = true;
  10262. }
  10263. if (playerEquipment[playerWeapon] == 843) {
  10264. UseBow = true;
  10265. }
  10266. if (playerEquipment[playerWeapon] == 849) {
  10267. UseBow = true;
  10268. }
  10269. if (playerEquipment[playerWeapon] == 853) {
  10270. UseBow = true;
  10271. }
  10272. if (playerEquipment[playerWeapon] == 857) {
  10273. UseBow = true;
  10274. }
  10275. if (playerEquipment[playerWeapon] == 861) {
  10276. UseBow = true;
  10277. }
  10278. if (playerEquipment[playerWeapon] == 839) {
  10279. UseBow = true;
  10280. }
  10281. if (playerEquipment[playerWeapon] == 845) {
  10282. UseBow = true;
  10283. }
  10284. if (playerEquipment[playerWeapon] == 847) {
  10285. UseBow = true;
  10286. }
  10287. if (playerEquipment[playerWeapon] == 851) {
  10288. UseBow = true;
  10289. }
  10290. if (playerEquipment[playerWeapon] == 855) {
  10291. UseBow = true;
  10292. }
  10293. if (playerEquipment[playerWeapon] == 859) {
  10294. UseBow = true;
  10295. }
  10296. if (playerEquipment[playerWeapon] == 4734) {
  10297. UseBow = true;
  10298. }
  10299. if (playerEquipment[playerWeapon] == 4214) {
  10300. UseBow = true;
  10301. }
  10302. if (playerEquipment[playerWeapon] == 859) {
  10303. UseBow = true;
  10304. }
  10305.  
  10306. if (UseBow) {
  10307. if (!duelRule[0]) {
  10308. teleportToX = absX;
  10309. teleportToY = absY;
  10310. CheckArrows();
  10311. CalculateRange();
  10312. hitDiff = misc.random(playerMaxHit);
  10313. } else {
  10314. sendMessage("You can't range in this duel!");
  10315. return false;
  10316. }
  10317. }
  10318.  
  10319. if (!UseBow && duelRule[1]) {
  10320. sendMessage("You can't melee in this duel!");
  10321. ResetAttack();
  10322. return false;
  10323. }
  10324.  
  10325. int EnemyX = PlayerHandler.players[AttackingOn].absX;
  10326. int EnemyY = PlayerHandler.players[AttackingOn].absY;
  10327. int EnemyHP = PlayerHandler.players[AttackingOn].playerLevel[playerHitpoints];
  10328. int EnemyHPExp = PlayerHandler.players[AttackingOn].playerXP[playerHitpoints];
  10329. client AttackingOn2 = (client)server.playerHandler.players[AttackingOn];
  10330. TurnPlayerTo(EnemyX, EnemyY);
  10331. updateRequired = true;
  10332. appearanceUpdateRequired = true;
  10333. if (PlayerHandler.players[AttackingOn].playerEquipment[playerRing] == 2570) {
  10334. //RingOfLife = true;
  10335. }
  10336. int hitDiff = 0;
  10337. int aBonus = 0;
  10338. int rand_att = misc.random(playerLevel[0]);
  10339. int rand_def = (int)(0.65*misc.random(AttackingOn2.playerLevel[1]));
  10340. if (FightType == 1)
  10341. aBonus += (int)(playerBonus[1]/20);
  10342. int random_u = misc.random(playerBonus[1]+aBonus)*2;
  10343. int dBonus = 0;
  10344. if (AttackingOn2.FightType == 4)
  10345. dBonus += (int)(AttackingOn2.playerBonus[6]/20);
  10346. int random_def = misc.random(AttackingOn2.playerBonus[6]+dBonus);
  10347. if (random_u >= random_def && rand_att > rand_def) {
  10348. hitDiff = misc.random(playerMaxHit);
  10349. } else {
  10350. hitDiff = 0;
  10351. }
  10352. if (FightType == 2)
  10353. hitDiff = (int)(hitDiff*1.20);
  10354. long thisAttack = System.currentTimeMillis();
  10355. if (GoodDistance(EnemyX, EnemyY, absX, absY, 1) == true) {
  10356. inCombat = true;
  10357. lastCombat = System.currentTimeMillis();
  10358. if (isInWilderness(EnemyX, EnemyY, 1) || (duelFight && AttackingOn == duel_with) || (matchId == handler.players[AttackingOn].matchId && matchId >= 0)) {
  10359. if (duelFight && AttackingOn == duel_with) {
  10360. enemyX = PlayerHandler.players[AttackingOn].absX;
  10361. enemyY = PlayerHandler.players[AttackingOn].absY;
  10362. }
  10363. if (PlayerHandler.players[AttackingOn].deathStage > 0) {
  10364. ResetAttack();
  10365. sendMessage("That player is dead!");
  10366. } else {
  10367. if (!duelFight && inRange(EnemyX, EnemyY)) {
  10368. if (thisAttack-lastAttack >= 5000)
  10369. ((client)PlayerHandler.players[AttackingOn]).sendMessage("You are under attack!");
  10370. PlayerHandler.players[AttackingOn].resetWalkingQueue();
  10371. PlayerHandler.players[AttackingOn].hits++;
  10372. PlayerHandler.players[AttackingOn].fighting = true;
  10373. PlayerHandler.players[AttackingOn].fightId = localId;
  10374. PlayerHandler.players[AttackingOn].IsAttacking = true;
  10375. ((client)PlayerHandler.players[AttackingOn]).Attack();
  10376. fightId = AttackingOn;
  10377. fighting = true;
  10378. resetWalkingQueue();
  10379. }
  10380. if (playerEquipment[playerWeapon] == 4151) {
  10381. animation(341, EnemyY, EnemyX);
  10382. }
  10383. actionAmount++;
  10384. setAnimation(GetWepAnim(playerEquipment[playerWeapon]));
  10385. PlayerHandler.players[AttackingOn].hitUpdateRequired = true;
  10386. PlayerHandler.players[AttackingOn].updateRequired = true;
  10387. PlayerHandler.players[AttackingOn].appearanceUpdateRequired = true;
  10388. if ((EnemyHP-hitDiff) < 0) {
  10389. hitDiff = EnemyHP;
  10390. }
  10391. PlayerHandler.players[AttackingOn].dealDamage(hitDiff);
  10392. PlayerHandler.players[AttackingOn].hitDiff = hitDiff;
  10393. PlayerHandler.players[AttackingOn].killers[localId] += hitDiff;
  10394. attackTimer = 7;
  10395. lastAttack = System.currentTimeMillis();
  10396. //sendMessage("You hit " + hitDiff + ", time=" + lastAttack);
  10397. }
  10398. return true;
  10399. } else {
  10400. sendMessage("This player is not in a Pking Zone!");
  10401. ResetAttack();
  10402. }
  10403. }
  10404.  
  10405. if (GoodDistance(EnemyX, EnemyY, absX, absY, 1) == false) {
  10406. if (thisAttack-lastAttack >= 2000) {
  10407. if (isInWilderness(EnemyX, EnemyY, 1) == true || IsInCW(EnemyX, EnemyY) == true || IsInTz(EnemyX, EnemyY) == true) {
  10408. if (PlayerHandler.players[AttackingOn].deathStage > 0) {
  10409. ResetAttack();
  10410. } else if (playerEquipment[playerWeapon] == 4675) {
  10411. TurnPlayerTo(EnemyX, EnemyY);
  10412. PlayerHandler.players[AttackingOn].hitDiff = 0+misc.random(22);
  10413. animation(369, EnemyY, EnemyX);
  10414. AnimationReset = true;
  10415. updateRequired = true;
  10416. appearanceUpdateRequired = true;
  10417. actionAmount++;
  10418. teleportToX = absX;
  10419. teleportToY = absY;
  10420. actionTimer = 15;
  10421. setAnimation(1979);
  10422. AnimationReset = true;
  10423. PlayerHandler.players[AttackingOn].hitUpdateRequired = true;
  10424. PlayerHandler.players[AttackingOn].updateRequired = true;
  10425. PlayerHandler.players[AttackingOn].appearanceUpdateRequired = true;
  10426. if ((EnemyHP-hitDiff) <= 0) {
  10427. hitDiff = EnemyHP;
  10428. //animation(437, absY, absX);
  10429. attackPlayersPrayer(15, 2);
  10430. }
  10431. } else if (UseBow) {
  10432. actionAmount++;
  10433. setAnimation(GetWepAnim(playerEquipment[playerWeapon]));
  10434. PlayerHandler.players[AttackingOn].hitUpdateRequired = true;
  10435. PlayerHandler.players[AttackingOn].updateRequired = true;
  10436. PlayerHandler.players[AttackingOn].appearanceUpdateRequired = true;
  10437. if ((EnemyHP-hitDiff) < 0) {
  10438. hitDiff = EnemyHP;
  10439. }
  10440. PlayerHandler.players[AttackingOn].dealDamage(hitDiff);
  10441. PlayerHandler.players[AttackingOn].hitDiff = hitDiff;
  10442. attackTimer = 7;
  10443. lastAttack = System.currentTimeMillis();
  10444. }
  10445. return true;
  10446. } else {
  10447. sendMessage("This player is not in a Pking Area/Match.");
  10448. ResetAttack();
  10449. }
  10450. }
  10451. }
  10452. return false;
  10453. }
  10454. public boolean Attackrange() {
  10455. client q = (client)server.playerHandler.players[AttackingOn];
  10456. int EnemyX = PlayerHandler.players[AttackingOn].absX;
  10457. int EnemyY = PlayerHandler.players[AttackingOn].absY;
  10458. int EnemyHP = PlayerHandler.players[AttackingOn].playerLevel[playerHitpoints];
  10459. int EnemyHPExp = PlayerHandler.players[AttackingOn].playerXP[playerHitpoints];
  10460. boolean RingOfLife = false;
  10461.  
  10462. if (PlayerHandler.players[AttackingOn].playerEquipment[playerRing] == 2570) {
  10463. RingOfLife = true;
  10464. }
  10465. int hitDiff = 0;
  10466.  
  10467. hitDiff = misc.random(playerMaxHit);
  10468.  
  10469. if (GoodDistance(EnemyX, EnemyY, absX, absY, 20) == true) {
  10470. teleportToX = absX;
  10471. teleportToY = absY;
  10472. if (actionTimer == 0) {
  10473. if (isInWilderness(EnemyX, EnemyY, 1) == true) {
  10474. if (false) {
  10475. } else {
  10476. if (PlayerHandler.players[AttackingOn].deathStage > 0) {
  10477. ResetAttack();
  10478. } else {
  10479. actionAmount++;
  10480. setAnimation(GetWepAnim(playerEquipment[playerWeapon]));
  10481. PlayerHandler.players[AttackingOn].hitUpdateRequired = true;
  10482. PlayerHandler.players[AttackingOn].updateRequired = true;
  10483. PlayerHandler.players[AttackingOn].appearanceUpdateRequired = true;
  10484. hitDiff = EnemyHP;
  10485.  
  10486. PlayerHandler.players[AttackingOn].hitDiff = hitDiff;
  10487. actionTimer = 7;
  10488. }
  10489. }
  10490. return true;
  10491. } else {
  10492. sendMessage("This player is not in the Wilderness.");
  10493. ResetAttack();
  10494. }
  10495. }
  10496. }
  10497. return false;
  10498. }
  10499.  
  10500. public boolean ResetAttack() {
  10501. IsAttacking = false;
  10502. AttackingOn = 0;
  10503. resetAnimation();
  10504. IsUsingSkill = false;
  10505. return true;
  10506. }
  10507.  
  10508.  
  10509. public boolean CheckForSkillUse4(int Item) {
  10510. boolean GoOn = true;
  10511.  
  10512. switch (Item) {
  10513. case 99999:
  10514. break;
  10515. default: sendMessage("Nothing interesting happens.");
  10516. println_debug("Firemaking Usage - ItemID: "+Item);
  10517. break;
  10518. }
  10519. if (prayer[0] > 0) {
  10520. prayer();
  10521. }
  10522. return true;
  10523. }
  10524.  
  10525. public boolean IsItemInBag(int ItemID) {
  10526. for (int i = 0; i < playerItems.length; i++) {
  10527. if ((playerItems[i]-1) == ItemID) {
  10528. return true;
  10529. }
  10530. }
  10531. return false;
  10532. }
  10533.  
  10534. public boolean AreXItemsInBag(int ItemID, int Amount) {
  10535. int ItemCount = 0;
  10536.  
  10537. for (int i = 0; i < playerItems.length; i++) {
  10538. if ((playerItems[i]-1) == ItemID) {
  10539. ItemCount++;
  10540. }
  10541. if (ItemCount == Amount) {
  10542. return true;
  10543. }
  10544. }
  10545. return false;
  10546. }
  10547.  
  10548. public int GetItemSlot(int ItemID) {
  10549. for (int i = 0; i < playerItems.length; i++) {
  10550. if ((playerItems[i]-1) == ItemID) {
  10551. return i;
  10552. }
  10553. }
  10554. return -1;
  10555. }
  10556.  
  10557. public int GetXItemsInBag(int ItemID) {
  10558. int ItemCount = 0;
  10559.  
  10560. for (int i = 0; i < playerItems.length; i++) {
  10561. if ((playerItems[i]-1) == ItemID) {
  10562. ItemCount++;
  10563. }
  10564. }
  10565. return ItemCount;
  10566. }
  10567.  
  10568. public void castleWarsScore() {
  10569. String zammyColor;
  10570. String saraColor;
  10571.  
  10572. if (zammyScore > saraScore) {
  10573. zammyColor = "@gre@";
  10574. saraColor = "@red@";
  10575. } else if (zammyScore < saraScore) {
  10576. zammyColor = "@red@";
  10577. saraColor = "@gre@";
  10578. } else {
  10579. zammyColor = "@yel@";
  10580. saraColor = "@yel@";
  10581. }
  10582. sendQuest("@bla@.................Mage Wars Scores.............", 8144);
  10583. clearQuestInterface();
  10584. sendQuest("@or3@Zamorak: "+zammyColor+zammyScore, 8147);
  10585. sendQuest("@or3@Saradomin: "+saraColor+saraScore, 8148);
  10586. sendQuestSomething(8143);
  10587. showInterface(8134);
  10588. flushOutStream();
  10589. }
  10590.  
  10591. public int Tradecompete = 0;
  10592. public int Publicchat = 0;
  10593.  
  10594. public void pmstatus(int status) {
  10595. // status: loading = 0 connecting = 1 fine = 2
  10596. outStream.createFrame(221);
  10597. outStream.writeByte(status);
  10598. }
  10599.  
  10600. public boolean playerHasItem(int itemID) {
  10601. itemID++;
  10602. for (int i = 0; i < playerItems.length; i++) {
  10603. if (playerItems[i] == itemID) {
  10604. return true;
  10605. }
  10606. }
  10607. return false;
  10608.  
  10609. }
  10610. public boolean playerHasItem(int itemID, int amt) {
  10611. itemID++;
  10612. int found = 0;
  10613. for (int i = 0; i < playerItems.length; i++) {
  10614. if (playerItems[i] == itemID) {
  10615. if (playerItemsN[i] >= amt)
  10616. return true;
  10617. else
  10618. found++;
  10619. }
  10620. }
  10621. if (found >= amt)
  10622. return true;
  10623. return false;
  10624.  
  10625. }
  10626.  
  10627.  
  10628. public boolean isinpm(long l) {
  10629. for (int i = 0; i < friends.length; i++) {
  10630. if (friends[i] != 0) {
  10631. if (l == friends[i]) {
  10632. return true;
  10633. }
  10634. }
  10635. }
  10636. return false;
  10637. }
  10638.  
  10639. public void pmupdate(int pmid, int world) {
  10640. if (handler.players[pmid] == null || handler.players[pmid].playerName == null) {
  10641. return;
  10642. }
  10643. long l = misc.playerNameToInt64(handler.players[pmid].playerName);
  10644.  
  10645. if (handler.players[pmid].Privatechat == 0) {
  10646. for (int i = 0; i < friends.length; i++) {
  10647. if (friends[i] != 0) {
  10648. if (l == friends[i]) {
  10649. loadpm(l, world);
  10650. return;
  10651. }
  10652. }
  10653. }
  10654. } else if (handler.players[pmid].Privatechat == 1) {
  10655. for (int i1 = 0; i1 < friends.length; i1++) {
  10656. if (friends[i] != 0) {
  10657. if (l == friends[i1]) {
  10658. if (handler.players[pmid].isinpm(misc.playerNameToInt64(playerName)) && playerRights > 2) {
  10659. loadpm(l, world);
  10660. return;
  10661. } else {
  10662. loadpm(l, 0);
  10663. return;
  10664. }
  10665. }
  10666. }
  10667. }
  10668. } else if (handler.players[pmid].Privatechat == 2) {
  10669. for (int i2 = 0; i2 < friends.length; i2++) {
  10670. if (friends[i] != 0) {
  10671. if (l == friends[i2] && playerRights < 2) {
  10672. loadpm(l, 0);
  10673. return;
  10674. }
  10675. }
  10676. }
  10677. }
  10678. }
  10679.  
  10680. public void sendpm(long name, int rights, byte[]chatmessage, int messagesize) {
  10681. outStream.createFrameVarSize(196);
  10682. outStream.writeQWord(name);
  10683. outStream.writeDWord(handler.lastchatid++); // must be different for each message
  10684. outStream.writeByte(rights);
  10685. outStream.writeBytes(chatmessage, messagesize, 0);
  10686. outStream.endFrameVarSize();
  10687. }
  10688.  
  10689. public void loadpm(long name, int world) {
  10690. if (world != 0) {
  10691. world += 9;
  10692. } else if (world == 0) {
  10693. world += 1;
  10694. }
  10695. outStream.createFrame(50);
  10696. outStream.writeQWord(name);
  10697. outStream.writeByte(world);
  10698. }
  10699.  
  10700.  
  10701.  
  10702. public boolean AttackNPC() {
  10703.  
  10704. int EnemyX = server.npcHandler.npcs[attacknpc].absX;
  10705. int EnemyY = server.npcHandler.npcs[attacknpc].absY;
  10706. int EnemyHP = server.npcHandler.npcs[attacknpc].HP;
  10707. int hitDiff = 0;
  10708. if (EnemyHP < 1) {
  10709. sendMessage("You can't attack that monster!");
  10710. return false;
  10711. }
  10712. int type = server.npcHandler.npcs[attacknpc].npcType;
  10713. int[]staffs = {
  10714. 2415,2416,2417,4170,4675
  10715. };
  10716. int[]arrowIds = {
  10717. 882, 884, 886, 888, 890, 892
  10718. };
  10719. int[]arrowGfx = {
  10720. 10, 9, 11, 12, 13, 15
  10721. };
  10722. int[]prem = {
  10723. 1643, 158, 49, 1613
  10724. };
  10725. for (int i = 0; i < prem.length; i++) {
  10726. if (prem[i] == type && ! premium) {
  10727. resetPos();
  10728. return false;
  10729. }
  10730. }
  10731. if (type == 1125) {
  10732. if (combatLevel < 70) {
  10733. sendMessage("You must be level 70 or higher to attack Dad");
  10734. resetPos();
  10735. ResetAttackNPC();
  10736. return false;
  10737. }
  10738. }
  10739. if (type == 84) {
  10740. if (combatLevel < 100) {
  10741. sendMessage("You must be level 100 or higher to attack Barrows monsters.");
  10742. resetPos();
  10743. ResetAttackNPC();
  10744. return false;
  10745. }
  10746. }
  10747. if (type == 2060) {
  10748. if (combatLevel < 100) {
  10749. sendMessage("You must be level 100 or higher to attack Barrows monsters.");
  10750. resetPos();
  10751. ResetAttackNPC();
  10752. return false;
  10753. }
  10754. }
  10755. if (type == 3200) {
  10756. if (combatLevel < 100) {
  10757. sendMessage("You must be level 100 or higher to attack Barrows monsters.");
  10758. resetPos();
  10759. ResetAttackNPC();
  10760. return false;
  10761. }
  10762. }
  10763. if (type == 258) {
  10764. if (combatLevel < 100) {
  10765. sendMessage("You must be level 100 or higher to attack General Khazard.");
  10766. resetPos();
  10767. ResetAttackNPC();
  10768. return false;
  10769. }
  10770. }
  10771. if (type == 795) {
  10772. if (combatLevel < 50) {
  10773. sendMessage("You must be level 50 or higher to attack the Ice Queen.");
  10774. resetPos();
  10775. ResetAttackNPC();
  10776. return false;
  10777. }
  10778. }
  10779. if (type == 1220) {
  10780. if (combatLevel < 50 ) {
  10781. sendMessage("You must be level 50 or higher to attack the Vampire.");
  10782. resetPos();
  10783. ResetAttackNPC();
  10784. return false;
  10785. }
  10786. }
  10787. if (type == 110 || type == 936) {
  10788. if (!playerHasItem(1543)) {
  10789. resetPos();
  10790. ResetAttackNPC();
  10791. return false;
  10792. }
  10793. }
  10794. if (type == 221 || type == 1961) {
  10795. if (!playerHasItem(1544)) {
  10796. resetPos();
  10797. ResetAttackNPC();
  10798. return false;
  10799. }
  10800. }
  10801. if (type == 910) {
  10802. if (!playerHasItem(1545)) {
  10803. resetPos();
  10804. ResetAttackNPC();
  10805. return false;
  10806. }
  10807. }
  10808. if (type == 1095) {
  10809. if (!playerHasItem(1546)) {
  10810. resetPos();
  10811. ResetAttackNPC();
  10812. return false;
  10813. }
  10814. }
  10815. if ((type == 941 || type == 55) && ! premium) {
  10816. resetPos();
  10817. return false;
  10818. }
  10819. for (int element : staffs) {
  10820. if ((playerEquipment[playerWeapon] == element)
  10821. && (autocast_spellIndex >= 0)) {
  10822. if (System.currentTimeMillis() - lastAttack < coolDown[autocast_spellIndex]) {
  10823. return false;
  10824. }
  10825. inCombat = true;
  10826. lastCombat = System.currentTimeMillis();
  10827. lastAttack = System.currentTimeMillis();
  10828. if (playerLevel[6] >= requiredLevel[autocast_spellIndex]) {
  10829. if(!playerHasItem(rune1[autocast_spellIndex], rune1a[autocast_spellIndex]) || !playerHasItem(rune2[autocast_spellIndex], rune2a[autocast_spellIndex]) || !playerHasItem(rune3[autocast_spellIndex], rune3a[autocast_spellIndex])) {
  10830. if(rune1[autocast_spellIndex] > 0 && rune2[autocast_spellIndex] < 1 && rune3[autocast_spellIndex] < 1) {
  10831. sendMessage("You need "+rune1a[autocast_spellIndex]+" "+GetItemName(rune1[autocast_spellIndex])+" to cast this spell");
  10832. }
  10833. if(rune1[autocast_spellIndex] > 0 && rune2[autocast_spellIndex] > 0 && rune3[autocast_spellIndex] < 1) {
  10834. sendMessage("You need "+rune1a[autocast_spellIndex]+" "+GetItemName(rune1[autocast_spellIndex])+" and "+rune2a[autocast_spellIndex]+" "+GetItemName(rune2[autocast_spellIndex])+" to cast this spell");
  10835. }
  10836. if(rune1[autocast_spellIndex] > 0 && rune2[autocast_spellIndex] > 0 && rune3[autocast_spellIndex] > 0) {
  10837. 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");
  10838. }
  10839. break;
  10840. }
  10841. int roll = misc.random(100);
  10842. int hit = misc.random(baseDamage[autocast_spellIndex]
  10843. + playerBonus[11]);
  10844. hitDiff = hit;
  10845. setAnimation(1979);
  10846. updateRequired = true;
  10847. // AnimationReset = true;
  10848. // teleportToX = absX;
  10849. // teleportToY = absY;
  10850. resetWalkingQueue();
  10851. if (ancientType[autocast_spellIndex] == 3) {
  10852. // coolDown[coolDownGroup[autocast_spellIndex]] = 35;
  10853. server.npcHandler.npcs[attacknpc].effects[0] = 15;
  10854. stillgfx(369, EnemyY, EnemyX);
  10855. } else if (ancientType[autocast_spellIndex] == 2) {
  10856. stillgfx(377, EnemyY, EnemyX);
  10857. // coolDown[coolDownGroup[autocast_spellIndex]] = 12;
  10858. currentHealth += (int) (hit / 4);
  10859. if (currentHealth > playerLevel[playerHitpoints])
  10860. currentHealth = playerLevel[playerHitpoints];
  10861. } else
  10862. animation(78, EnemyY, EnemyX);
  10863. } else {
  10864. sendMessage("You need a magic level of "
  10865. + requiredLevel[autocast_spellIndex]+" Or you don't have enough runes.");
  10866. }
  10867. // coolDown[coolDownGroup[autocast_spellIndex]] = 12;
  10868. TurnPlayerTo(EnemyX, EnemyY);
  10869. addSkillXP(50*hitDiff, playerMagic);
  10870. addSkillXP(hitDiff * CombatExpRate, playerHitpoints);
  10871. teleportToX = absX;
  10872. teleportToY = absY;
  10873. server.npcHandler.npcs[attacknpc].StartKilling = localId;
  10874. server.npcHandler.npcs[attacknpc].RandomWalk = false;
  10875. server.npcHandler.npcs[attacknpc].IsUnderAttack = true;
  10876. server.npcHandler.npcs[attacknpc].hitDiff = hitDiff;
  10877. server.npcHandler.npcs[attacknpc].Killing[playerId] += hitDiff;
  10878. server.npcHandler.npcs[attacknpc].updateRequired = true;
  10879. server.npcHandler.npcs[attacknpc].hitUpdateRequired = true;
  10880. server.npcHandler.npcs[attacknpc].hit = true;
  10881. // server.npcHandler.npcs[attacknpc].TurnNPCTo(absX,absY);
  10882. // server.npcHandler.npcs[attacknpc].FocusUpdateRequired = true;
  10883. if(playerHasItem(rune1[autocast_spellIndex], rune1a[autocast_spellIndex]) && playerHasItem(rune2[autocast_spellIndex], rune2a[autocast_spellIndex]) && playerHasItem(rune3[autocast_spellIndex], rune3a[autocast_spellIndex])) {
  10884. deleteItem(rune1[autocast_spellIndex], rune1a[autocast_spellIndex]);
  10885. deleteItem(rune2[autocast_spellIndex], rune2a[autocast_spellIndex]);
  10886. deleteItem(rune3[autocast_spellIndex], rune3a[autocast_spellIndex]);
  10887. return false;}}}
  10888.  
  10889. long thisTime = System.currentTimeMillis();
  10890.  
  10891.  
  10892.  
  10893.  
  10894. hitDiff = misc.random(playerMaxHit);
  10895. if (FightType == 2)
  10896. hitDiff = (int)(hitDiff*1.20);
  10897. boolean UseBow = false;
  10898.  
  10899. for (int i = 0; i < bows.length; i++) {
  10900. if (playerEquipment[playerWeapon] == bows[i]) {
  10901. UseBow = true;
  10902. break;
  10903. }
  10904. }
  10905. int arrowgfx = 10;
  10906. for (int i1 = 0; i1 < arrowIds.length; i1++) {
  10907. if (playerEquipment[playerArrows] == arrowIds[i1]) {
  10908. arrowgfx = arrowGfx[i1];
  10909. }
  10910. }
  10911.  
  10912. if (UseBow && thisTime-lastAttack >= getbattleTimer()) {
  10913. teleportToX = absX;
  10914. teleportToY = absY;
  10915. CalculateRange();
  10916. hitDiff = misc.random(maxRangeHit());
  10917. if (DeleteArrow()) {
  10918. int offsetX = (absY-EnemyY)*-1;
  10919. int offsetY = (absX-EnemyX)*-1;
  10920. for (int a = 0; a < handler.maxPlayers; a++) {
  10921. client temp = (client)handler.players[a];
  10922. if (temp != null && temp.absX > 0 && ! temp.disconnected && Math.abs(absX-temp.absX) < 60 && Math.abs(absY-temp.absY) < 60) {
  10923. temp.createProjectile(absY, absX, offsetY, offsetX, 50, 90, arrowgfx, 43, 35, attacknpc+1);
  10924. }
  10925. }
  10926. server.npcHandler.npcs[attacknpc].hitDiff = hitDiff;
  10927. server.npcHandler.npcs[attacknpc].Killing[playerId] += hitDiff;
  10928. server.npcHandler.npcs[attacknpc].updateRequired = true;
  10929. server.npcHandler.npcs[attacknpc].hitUpdateRequired = true;
  10930. server.npcHandler.npcs[attacknpc].hit = true;
  10931. if (hitDiff == 0 && server.npcHandler.npcs[attacknpc].npcType == 941) {
  10932. server.npcHandler.npcs[attacknpc].animNumber = 89;
  10933. server.npcHandler.npcs[attacknpc].animUpdateRequired = true;
  10934. server.npcHandler.npcs[attacknpc].updateRequired = true;
  10935. }
  10936. updateRequired = true;
  10937. appearanceUpdateRequired = true;
  10938. } else {
  10939. ResetAttackNPC();
  10940. sendMessage("You're out of arrows!");
  10941. return false;
  10942. }
  10943. }
  10944. if (thisTime-lastAttack >= getbattleTimer()) {
  10945. inCombat = true;
  10946. lastCombat = System.currentTimeMillis();
  10947. } else if (thisTime-lastAttack >= 5000) {
  10948. inCombat = true;
  10949. lastCombat = System.currentTimeMillis();
  10950. } else {
  10951. return false;
  10952. }
  10953. if (UseBow || GoodDistance(EnemyX, EnemyY, absX, absY, 1) == true) {
  10954. if (server.npcHandler.npcs[attacknpc].IsDead == true) {
  10955. ResetAttackNPC();
  10956. } else {
  10957. if (playerEquipment[playerWeapon] == 4151) {
  10958. animation(341, EnemyY, EnemyX);
  10959. }
  10960. TurnPlayerTo(EnemyX, EnemyY);
  10961. updateRequired = true;
  10962. appearanceUpdateRequired = true;
  10963. actionAmount++;
  10964. setAnimation(GetWepAnim(playerEquipment[playerWeapon]));
  10965. if ((EnemyHP-hitDiff) <= 0) {
  10966. hitDiff = EnemyHP;
  10967. }
  10968. server.npcHandler.npcs[attacknpc].hitDiff = hitDiff;
  10969. server.npcHandler.npcs[attacknpc].Killing[playerId] += hitDiff;
  10970. server.npcHandler.npcs[attacknpc].updateRequired = true;
  10971. server.npcHandler.npcs[attacknpc].hitUpdateRequired = true;
  10972. server.npcHandler.npcs[attacknpc].hit = true;
  10973. if (hitDiff == 0 && server.npcHandler.npcs[attacknpc].npcType == 941) {
  10974. server.npcHandler.npcs[attacknpc].animNumber = 89;
  10975. server.npcHandler.npcs[attacknpc].animUpdateRequired = true;
  10976. server.npcHandler.npcs[attacknpc].updateRequired = true;
  10977. }
  10978. attackedNpc = true;
  10979. attackedNpcId = attacknpc;
  10980. double TotalExp = 0;
  10981. if (!UseBow)
  10982. animationReset = System.currentTimeMillis()+1200;
  10983. if (server.npcHandler.npcs[attacknpc].npcType != 1472) {
  10984. if (UseBow) {
  10985. TotalExp = (double)(50*hitDiff); //range
  10986. TotalExp = (double)(TotalExp*CombatExpRate);
  10987. addSkillXP((int)(TotalExp), 4);
  10988. } else if (FightType != 3) {
  10989. TotalExp = (double)(60*hitDiff); //Combat
  10990. TotalExp = (double)(TotalExp*CombatExpRate);
  10991. addSkillXP((int)(TotalExp), SkillID);
  10992. } else {
  10993. TotalExp = (double)(50*hitDiff); //Whip
  10994. TotalExp = (double)(TotalExp*CombatExpRate);
  10995. addSkillXP((int)(TotalExp), playerAttack);
  10996. addSkillXP((int)(TotalExp), playerDefence);
  10997. addSkillXP((int)(TotalExp), playerStrength);
  10998. }
  10999. TotalExp = (double)(25*hitDiff); //Hitpoints
  11000. TotalExp = (double)(TotalExp*CombatExpRate);
  11001. addSkillXP((int)(TotalExp), playerHitpoints);
  11002. attackTimer = 7;
  11003. if (debug)
  11004. sendMessage("hitDiff="+hitDiff+", elapsed="+(thisTime-lastAttack));
  11005. lastAttack = System.currentTimeMillis();
  11006. }
  11007. return true;
  11008.  
  11009. }
  11010. }
  11011. return false;
  11012. }
  11013. public boolean DeleteArrow() {
  11014. if (playerEquipmentN[playerArrows] == 0) {
  11015. deleteequiment(playerEquipment[playerArrows], playerArrows);
  11016. return false;
  11017. }
  11018. if (playerEquipment[playerWeapon] != 4214 && playerEquipmentN[playerArrows] > 0) {
  11019. outStream.createFrameVarSizeWord(34);
  11020. outStream.writeWord(1688);
  11021. outStream.writeByte(playerArrows);
  11022. outStream.writeWord(playerEquipment[playerArrows]+1);
  11023. if (playerEquipmentN[playerArrows]-1 > 254) {
  11024. outStream.writeByte(255);
  11025. outStream.writeDWord(playerEquipmentN[playerArrows]-1);
  11026. } else {
  11027. outStream.writeByte(playerEquipmentN[playerArrows]-1); //amount
  11028. }
  11029. outStream.endFrameVarSizeWord();
  11030. playerEquipmentN[playerArrows] -= 1;
  11031. }
  11032. updateRequired = true;
  11033. appearanceUpdateRequired = true;
  11034. return true;
  11035. }
  11036.  
  11037.  
  11038.  
  11039. public boolean ResetAttackNPC() {
  11040. if (attacknpc > -1 && attacknpc < server.npcHandler.maxNPCSpawns) {
  11041. server.npcHandler.npcs[attacknpc].IsUnderAttack = false;
  11042. server.npcHandler.npcs[attacknpc].IsUnderAttack = false;
  11043. server.npcHandler.npcs[attacknpc].StartKilling = 0;
  11044. }
  11045. //server.npcHandler.npcs[attacknpc].TurnNPCTo(server.npcHandler.npcs[attacknpc].absX, server.npcHandler.npcs[attacknpc].absY);
  11046. //server.npcHandler.npcs[attacknpc].FocusUpdateRequired = true;
  11047. IsAttackingNPC = false;
  11048. attacknpc = -1;
  11049. resetAnimation();
  11050. return true;
  11051. }
  11052.  
  11053. public void ManipulateDirection() {
  11054. // playerMD = misc.direction(absX, absY, skillX, skillY);
  11055. if (playerMD != -1) {
  11056. // playerMD >>= 1;
  11057. updateRequired = true;
  11058. dirUpdateRequired = true;
  11059. }
  11060. }
  11061.  
  11062. public void ReplaceObject(int objectX, int objectY, int NewObjectID, int Face, int ObjectType) {
  11063. outStream.createFrame(85);
  11064. outStream.writeByteC(objectY-(mapRegionY*8));
  11065. outStream.writeByteC(objectX-(mapRegionX*8));
  11066.  
  11067. outStream.createFrame(101);
  11068. outStream.writeByteC((ObjectType << 2)+(Face & 3));
  11069. outStream.writeByte(0);
  11070.  
  11071. if (NewObjectID != -1) {
  11072. outStream.createFrame(151);
  11073. outStream.writeByteS(0);
  11074. outStream.writeWordBigEndian(NewObjectID);
  11075. outStream.writeByteS((ObjectType << 2)+(Face & 3));
  11076. // FACE: 0= WEST | -1 = NORTH | -2 = EAST | -3 = SOUTH
  11077. // ObjectType: 0-3 wall objects, 4-8 wall decoration, 9: diag. walls, 10-11 world objects, 12-21: roofs, 22: floor decoration
  11078. }
  11079. }
  11080.  
  11081. public int GetNPCID(int coordX, int coordY) {
  11082. for (int i = 0; i < server.npcHandler.maxNPCSpawns; i++) {
  11083. if (server.npcHandler.npcs[i] != null) {
  11084. if (server.npcHandler.npcs[i].absX == coordX && server.npcHandler.npcs[i].absY == coordY) {
  11085. return server.npcHandler.npcs[i].npcType;
  11086. }
  11087. }
  11088. }
  11089. return 1;
  11090. }
  11091.  
  11092. public String GetNpcName(int NpcID) {
  11093. for (int i = 0; i < server.npcHandler.maxListedNPCs; i++) {
  11094. if (server.npcHandler.NpcList[i] != null) {
  11095. if (server.npcHandler.NpcList[i].npcId == NpcID) {
  11096. return server.npcHandler.NpcList[i].npcName;
  11097. }
  11098. }
  11099. }
  11100. return "!! NOT EXISTING NPC !!! - ID:"+NpcID;
  11101. }
  11102.  
  11103. public String GetItemName(int ItemID) {
  11104. for (int i = 0; i < server.itemHandler.MaxListedItems; i++) {
  11105. if (server.itemHandler.ItemList[i] != null) {
  11106. if (server.itemHandler.ItemList[i].itemId == ItemID) {
  11107. return server.itemHandler.ItemList[i].itemName;
  11108. }
  11109. }
  11110. }
  11111. return "!! NOT EXISTING ITEM !!! - ID:"+ItemID;
  11112. }
  11113.  
  11114. public double GetItemShopValue(int ItemID, int Type, int fromSlot) {
  11115. double ShopValue = 1;
  11116. double Overstock = 0;
  11117. double TotPrice = 0;
  11118.  
  11119. for (int i = 0; i < server.itemHandler.MaxListedItems; i++) {
  11120. if (server.itemHandler.ItemList[i] != null) {
  11121. if (server.itemHandler.ItemList[i].itemId == ItemID) {
  11122. ShopValue = server.itemHandler.ItemList[i].ShopValue;
  11123. }
  11124. }
  11125. }
  11126. /*Overstock = server.shopHandler.ShopItemsN[MyShopID][fromSlot]
  11127. - server.shopHandler.ShopItemsSN[MyShopID][fromSlot];*/
  11128. TotPrice = (ShopValue*1.26875); // Calculates price for 1 item, in db is stored for 0 items (strange but true)
  11129. /*if (Overstock > 0) { // more then default -> cheaper
  11130. TotPrice -= ((ShopValue / 100) * (1.26875 * Overstock));
  11131. } else if (Overstock < 0) { // less then default -> exspensive
  11132. TotPrice += ((ShopValue / 100) * (1.26875 * Overstock));
  11133. }*/
  11134. if (server.shopHandler.ShopBModifier[MyShopID] == 1) {
  11135. TotPrice *= 1.25; // 25% more expensive (general stores only)
  11136. if (Type == 1) {
  11137. TotPrice *= 0.4; // general store buys item at 40% of its own selling value
  11138. }
  11139. } else if (Type == 1) {
  11140. TotPrice *= 0.6; // other stores buy item at 60% of their own selling value
  11141. }
  11142. return TotPrice;
  11143. }
  11144.  
  11145. public int GetUnnotedItem(int ItemID) {
  11146. int NewID = 0;
  11147. String NotedName = "";
  11148.  
  11149. for (int i = 0; i < server.itemHandler.MaxListedItems; i++) {
  11150. if (server.itemHandler.ItemList[i] != null) {
  11151. if (server.itemHandler.ItemList[i].itemId == ItemID) {
  11152. NotedName = server.itemHandler.ItemList[i].itemName;
  11153. }
  11154. }
  11155. }
  11156. for (int i = 0; i < server.itemHandler.MaxListedItems; i++) {
  11157. if (server.itemHandler.ItemList[i] != null) {
  11158. if (server.itemHandler.ItemList[i].itemName == NotedName) {
  11159. if (server.itemHandler.ItemList[i].itemDescription.startsWith("Swap this note at any bank for a") == false) {
  11160. NewID = server.itemHandler.ItemList[i].itemId;
  11161. break;
  11162. }
  11163. }
  11164. }
  11165. }
  11166. return NewID;
  11167. }
  11168.  
  11169. public void WriteEnergy() {
  11170. //if (playerRights < 3) {
  11171. playerEnergy = 100;
  11172. //}
  11173. sendFrame126(playerEnergy+"%", 149);
  11174. }
  11175.  
  11176. public void ResetBonus() {
  11177. for (int i = 0; i < playerBonus.length; i++) {
  11178. playerBonus[i] = 0;
  11179. }
  11180. }
  11181. public void GetBonus() {
  11182. for (int i = 0; i < playerEquipment.length; i++) {
  11183. if (playerEquipment[i] > -1) {
  11184. for (int j = 0; j < 9999; j++) {
  11185. if (server.itemHandler.ItemList[j] != null) {
  11186. if (server.itemHandler.ItemList[j].itemId == playerEquipment[i]) {
  11187. for (int k = 0; k < playerBonus.length; k++) {
  11188. playerBonus[k] += server.itemHandler.ItemList[j].Bonuses[k];
  11189. }
  11190. break;
  11191. }
  11192. }
  11193. }
  11194. }
  11195. }
  11196. for (int i = 0; i < 5; i++) {
  11197. playerBonus[i] += (int)(playerLevel[0]/10);
  11198. }
  11199. /*
  11200. public String BonusName[] = {
  11201. "Stab", "Slash", "Crush", "Magic", "Range",
  11202. "Stab", "Slash", "Crush", "Magic", "Range", "Strength", "Prayer"
  11203. };
  11204. */
  11205. playerBonus[5] += (int)(playerLevel[1]/5);
  11206. playerBonus[6] += (int)(playerLevel[1]/5);
  11207. playerBonus[7] += (int)(playerLevel[1]/5);
  11208. playerBonus[8] += (int)(playerLevel[1]/5);
  11209. playerBonus[9] += (int)(playerLevel[1]/5);
  11210.  
  11211. playerBonus[10] += (int)(playerLevel[2]/5);
  11212. //maxHealth = playerLevel[3];
  11213. }
  11214. public void GetBonus_old() {
  11215. for (int i = 0; i < playerEquipment.length; i++) {
  11216. if (playerEquipment[i] > -1) {
  11217. for (int j = 0; j < server.itemHandler.MaxListedItems; j++) {
  11218. if (server.itemHandler.ItemList[i] != null) {
  11219. if (server.itemHandler.ItemList[j] == null)
  11220. println("It's null");
  11221. if (server.itemHandler.ItemList[j].itemId == playerEquipment[i]) {
  11222. for (int k = 0; k < playerBonus.length; k++) {
  11223. playerBonus[k] += server.itemHandler.ItemList[j].Bonuses[k];
  11224. }
  11225. break;
  11226. }
  11227. } else {
  11228. println("Error: ItemList = null");
  11229. }
  11230. }
  11231. }
  11232. }
  11233. }
  11234.  
  11235. public void WriteBonus() {
  11236. int offset = 0;
  11237. String send = "";
  11238.  
  11239. for (int i = 0; i < playerBonus.length; i++) {
  11240. if (playerBonus[i] >= 0) {
  11241. send = BonusName[i]+": +"+playerBonus[i];
  11242. } else {
  11243. send = BonusName[i]+": -"+java.lang.Math.abs(playerBonus[i]);
  11244. }
  11245.  
  11246. if (i == 10) {
  11247. offset = 1;
  11248. }
  11249. if (i == 11) {
  11250. send = "Spell Dmg: +"+playerBonus[i]+"";
  11251. }
  11252. sendFrame126(send, (1675+i+offset));
  11253. }
  11254. CalculateMaxHit();
  11255.  
  11256. /* for (int i = 4000; i <= 7000; i++) {
  11257. sendFrame126("T"+i, i);
  11258. println_debug("Sended: Test"+i);
  11259. }*/ // USED FOR TESTING INTERFACE NUMBERS !
  11260. }
  11261.  
  11262. public void CalculateMaxHit() {
  11263. double MaxHit = 0;
  11264. int StrBonus = playerBonus[10]; // Strength Bonus
  11265. int Strength = playerLevel[playerStrength]; // Strength
  11266. int RngBonus = playerBonus[4]; // Ranged Bonus
  11267. int Range = playerLevel[playerRanged]; // Ranged
  11268.  
  11269. if (FightType == 1 || FightType == 4) {
  11270. // Accurate & Defensive
  11271. MaxHit += (double)(1.05+(double)((double)(StrBonus*Strength)*0.00175));
  11272. } else if (FightType == 2) {
  11273. // Aggresive
  11274. MaxHit += (double)(1.35+(double)((double)(StrBonus*Strength)*0.00175));
  11275. } else if (FightType == 3) {
  11276. // Controlled
  11277. MaxHit += (double)(1.15+(double)((double)(StrBonus*Strength)*0.00175));
  11278. }
  11279. MaxHit += (double)(Strength*0.1);
  11280. /*
  11281. if (StrPotion == 1) { // Strength Potion
  11282. MaxHit += (double) (Strength * 0.0014);
  11283. } else if (StrPotion == 2) { // Super Strength Potion
  11284. MaxHit += (double) (Strength * 0.0205);
  11285. }*/
  11286. if (StrPrayer == 1) {
  11287. // Burst Of Strength
  11288. MaxHit += (double)(Strength*0.005);
  11289. } else if (StrPrayer == 2) {
  11290. // Super Human Strength
  11291. MaxHit += (double)(Strength*0.01);
  11292. } else if (StrPrayer == 3) {
  11293. // Ultimate Strength
  11294. MaxHit += (double)(Strength*0.015);
  11295. }
  11296. if (FightType == 5 || FightType == 6) {
  11297. // Accurate and Longranged
  11298. MaxHit += (double)(1.05+(double)((double)(RngBonus*Range)*0.00075));
  11299. } else if (FightType == 7) {
  11300. // Rapid
  11301. MaxHit += (double)(1.35+(double)((double)(RngBonus)*0.00025));
  11302. }
  11303. //MaxHit += (double) (Range * 0.03);
  11304. playerMaxHit = (int)Math.floor(MaxHit);
  11305. }
  11306.  
  11307. public boolean GoodDistance(int objectX, int objectY, int playerX, int playerY, int distance) {
  11308. for (int i = 0; i <= distance; i++) {
  11309. for (int j = 0; j <= distance; j++) {
  11310. if ((objectX+i) == playerX && ((objectY+j) == playerY || (objectY-j) == playerY || objectY == playerY)) {
  11311. return true;
  11312. } else if ((objectX-i) == playerX && ((objectY+j) == playerY || (objectY-j) == playerY || objectY == playerY)) {
  11313. return true;
  11314. } else if (objectX == playerX && ((objectY+j) == playerY || (objectY-j) == playerY || objectY == playerY)) {
  11315. return true;
  11316. }
  11317. }
  11318. }
  11319. return false;
  11320. }
  11321.  
  11322. public boolean GoodDistance2(int objectX, int objectY, int playerX, int playerY, int distance) {
  11323. for (int i = 0; i <= distance; i++) {
  11324. for (int j = 0; j <= distance; j++) {
  11325. if (objectX == playerX && ((objectY+j) == playerY || (objectY-j) == playerY || objectY == playerY)) {
  11326. return true;
  11327. } else if (objectY == playerY && ((objectX+j) == playerX || (objectX-j) == playerX || objectX == playerX)) {
  11328. return true;
  11329. }
  11330. }
  11331. }
  11332. return false;
  11333. }
  11334.  
  11335. public void wc(int speed, int level, int xp, int item, int chance) {
  11336. woodcutting[0] = speed;
  11337. woodcutting[1] = level;
  11338. woodcutting[2] = xp;
  11339. woodcutting[4] = item;
  11340. woodcutting[5] = chance;
  11341. IsUsingSkill = true;
  11342. skillX = server.OC.objectX;
  11343. skillY = server.OC.objectY;
  11344. }
  11345.  
  11346. public void mine(int speed, int level, int xp, int item) {
  11347. mining[0] = speed;
  11348. mining[1] = level;
  11349. mining[2] = xp;
  11350. mining[4] = item;
  11351. IsUsingSkill = true;
  11352. skillX = server.OC.objectX;
  11353. skillY = server.OC.objectY;
  11354. }
  11355.  
  11356. public void cookFish(int amount) {
  11357. closeInterface();
  11358. cooking = true;
  11359. cookAmount = amount;
  11360. }
  11361. public void startCooking() {
  11362. int[] fish = {317};
  11363. String[] fishtext = {"Shrimp"};
  11364. int[][] cooked = {{315,323}};//{cooked fish, burnt fish}
  11365. int[][] cook = {{1,55,14,10,70}}; //{level,burnrate,level stop burning,level stop burning with gauntless,experience}
  11366. for(int i = 0; i < fish.length; i++)
  11367. {
  11368. int cookie = (cook[i][1])+(playerLevel[playerCooking]/2);
  11369. if (cookAmount < 1)
  11370. {
  11371. resetAction();
  11372. return;
  11373. }
  11374. if(cookie > 100)
  11375. {
  11376. cookie = 100;
  11377. }
  11378. cookAmount--;
  11379. //pEmote = 883;
  11380. updateRequired = true;
  11381. appearanceUpdateRequired = true;
  11382. if (playerHasItem(fish[i]) && playerLevel[playerCooking] >= cook[i][0])
  11383. {
  11384. deleteItem(fish[i], 1);
  11385. if(misc.random(100) <= cookie || playerLevel[playerCooking] >= cook[i][2] ||
  11386. playerLevel[playerCooking] >= cook[i][3] && playerEquipment[playerHands] == gauntless ||
  11387. playerEquipment[playerHands] == gauntless && misc.random(100) <= cookie+(cookie*0.2))
  11388. {
  11389. addItem(cooked[i][0], 1);
  11390. addSkillXP(cook[i][4], playerCooking);
  11391. sendMessage("You success to cook the "+fishtext[i]+".");
  11392. }
  11393. else
  11394. {
  11395. addItem(cooked[i][1], 1);
  11396. sendMessage("Oh dear you burnt the "+fishtext[i]+"!");
  11397. }
  11398. }
  11399. }
  11400. }
  11401.  
  11402. /* HEALING*/
  11403. public boolean healing() {
  11404. if (actionTimer == 0 && healing[0] == 1) {
  11405. actionAmount++;
  11406. actionTimer = 4;
  11407. OriginalShield = playerEquipment[playerShield];
  11408. OriginalWeapon = playerEquipment[playerWeapon];
  11409. playerEquipment[playerShield] = -1;
  11410. playerEquipment[playerWeapon] = -1;
  11411. setAnimation(0x33D);
  11412. healing[0] = 2;
  11413. }
  11414. if (actionTimer == 0 && healing[0] == 2) {
  11415. deleteItem(healing[4], GetItemSlot(healing[4]), 1);
  11416. int Heal = healing[1];
  11417. int HealDiff = (healing[2]-healing[1]);
  11418.  
  11419. if (HealDiff > 0) {
  11420. Heal += misc.random(HealDiff);
  11421. }
  11422. if (healing[3] != -1) {
  11423. addItem(healing[3], 1);
  11424. }
  11425. NewHP = (playerLevel[playerHitpoints]+Heal);
  11426. if (NewHP > getLevelForXP(playerXP[playerHitpoints])) {
  11427. NewHP = getLevelForXP(playerXP[playerHitpoints]);
  11428. }
  11429. sendMessage("You eat the "+GetItemName(healing[4])+".");
  11430. playerEquipment[playerWeapon] = OriginalWeapon;
  11431. playerEquipment[playerShield] = OriginalShield;
  11432. OriginalWeapon = -1;
  11433. OriginalShield = -1;
  11434. resetAnimation();
  11435. resetHE();
  11436. }
  11437. return true;
  11438. }
  11439.  
  11440. public boolean resetHE() {
  11441. healing[0] = 0;
  11442. healing[1] = 0;
  11443. healing[2] = 0;
  11444. healing[3] = -1;
  11445. healing[4] = -1;
  11446. IsUsingSkill = false;
  11447. return true;
  11448. }
  11449.  
  11450. /* MINING*/
  11451. public boolean mining() {
  11452. int MIPickAxe = 0;
  11453. if (IsMining == true) {
  11454. 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.
  11455. } else {
  11456. MIPickAxe = MICheckPickAxe();
  11457. }
  11458. if (MIPickAxe > 0) {
  11459. if (playerLevel[playerMining] >= mining[1]) {
  11460. if (freeSlots() > 0) {
  11461. if (System.currentTimeMillis()-lastAction >= 1000 && IsMining == false) {
  11462. lastAction = System.currentTimeMillis();
  11463. sendMessage("You swing your pick axe at the rock...");
  11464. setAnimation(0x554);
  11465. IsMining = true;
  11466. }
  11467. if (System.currentTimeMillis()-lastAction >= mining[0] && IsMining == true) {
  11468. lastAction = System.currentTimeMillis();
  11469. addSkillXP((mining[2]*mining[3]*2), playerMining);
  11470. if (freeSlots() > 0) {
  11471. sendMessage("You get some ore.");
  11472. addItem(mining[4], 1);
  11473. } else {
  11474. playerEquipment[playerWeapon] = OriginalWeapon;
  11475. OriginalWeapon = -1;
  11476. resetAnimation();
  11477. IsMining = false;
  11478. resetMI();
  11479. }
  11480. }
  11481. } else {
  11482. sendMessage("Not enough space in your inventory.");
  11483. resetMI();
  11484. return false;
  11485. }
  11486. } else {
  11487. sendMessage("You need "+mining[1]+" "+statName[playerMining]+" to mine those ores.");
  11488. resetMI();
  11489. return false;
  11490. }
  11491. } else {
  11492. sendMessage("You need a pick axe to mine ores.");
  11493. resetMI();
  11494. return false;
  11495. }
  11496. return true;
  11497. }
  11498.  
  11499. public boolean resetMI() {
  11500. mining[0] = 0;
  11501. mining[1] = 0;
  11502. mining[2] = 0;
  11503. mining[4] = 0;
  11504. skillX = -1;
  11505. skillY = -1;
  11506. IsMining = false;
  11507. IsUsingSkill = false;
  11508. return true;
  11509. }
  11510.  
  11511. public int MICheckPickAxe() {
  11512. int Hand;
  11513. int Shield;
  11514. int Bag;
  11515. int PickAxe;
  11516.  
  11517. Hand = playerEquipment[playerWeapon];
  11518. Shield = playerEquipment[playerShield];
  11519. PickAxe = 0;
  11520. switch (Hand) {
  11521. case 1265:
  11522. // Bronze Pick Axe
  11523. PickAxe = 1;
  11524. break;
  11525.  
  11526. case 1267:
  11527. // Iron Pick Axe
  11528. PickAxe = 2;
  11529. break;
  11530.  
  11531. case 1269:
  11532. // Steel Pick Axe
  11533. PickAxe = 3;
  11534. break;
  11535.  
  11536. case 1273:
  11537. // Mithril Pick Axe
  11538. PickAxe = 4;
  11539. break;
  11540.  
  11541. case 1271:
  11542. // Adamant Pick Axe
  11543. PickAxe = 5;
  11544. break;
  11545.  
  11546. case 1275:
  11547. // Rune Pick Axe
  11548. PickAxe = 6;
  11549. break;
  11550. }
  11551. if (PickAxe > 0) {
  11552. return PickAxe;
  11553. }
  11554. return 0;
  11555. }
  11556.  
  11557. /* PRAYER*/
  11558. public boolean prayer() {
  11559. if (actionTimer != 0)
  11560. return false;
  11561. if (playerLevel[playerPrayer] >= prayer[1]) {
  11562. if (actionTimer == 0 && prayer[0] == 1) {
  11563. //actionAmount++;
  11564. actionTimer = 4;
  11565. OriginalShield = playerEquipment[playerShield];
  11566. OriginalWeapon = playerEquipment[playerWeapon];
  11567. //playerEquipment[playerShield] = -1;
  11568. //playerEquipment[playerWeapon] = -1;
  11569. setAnimation(0x33B);
  11570. prayer[0] = 2;
  11571. }
  11572. if (actionTimer == 0 && prayer[0] == 2 /* && playerHasItem(prayer[4])*/) {
  11573. deleteItem(prayer[4], prayer[5], playerItemsN[prayer[5]]);
  11574. addSkillXP((prayer[2]*prayer[3]), playerPrayer);
  11575. sendMessage("You bury the bones");
  11576. playerEquipment[playerWeapon] = OriginalWeapon;
  11577. playerEquipment[playerShield] = OriginalShield;
  11578. //OriginalWeapon = -1;
  11579. //OriginalShield = -1;
  11580. resetAnimation();
  11581. resetPR();
  11582. //actionAmount++;
  11583. actionTimer = 4;
  11584. }
  11585. }
  11586. return true;
  11587. }
  11588.  
  11589. public boolean resetPR() {
  11590. prayer[0] = 0;
  11591. prayer[1] = 0;
  11592. prayer[2] = 0;
  11593. prayer[4] = -1;
  11594. prayer[5] = -1;
  11595. IsUsingSkill = false;
  11596. return true;
  11597. }
  11598.  
  11599.  
  11600.  
  11601.  
  11602.  
  11603.  
  11604. public boolean resetSM() {
  11605. if (OriginalWeapon > -1) {
  11606. playerEquipment[playerWeapon] = OriginalWeapon;
  11607. OriginalWeapon = -1;
  11608. playerEquipment[playerShield] = OriginalShield;
  11609. OriginalShield = -1;
  11610. }
  11611. return true;
  11612. }
  11613.  
  11614. /* SMITHING*/
  11615.  
  11616. public void ReplaceItems(int newID, int oldID, int newAmount, int oldAmount) {
  11617. for (int i = 0; i < playerItems.length; i++) {
  11618. if (playerItems[i] == oldID + 1 && oldAmount > 0) {
  11619. playerItems[i] = 0;
  11620. oldAmount--;
  11621. resetItems(3214);
  11622. }
  11623. }
  11624. if (oldAmount == 0) {
  11625. addItem(newID, newAmount);
  11626. }
  11627. }
  11628. public int removeBar(int removeID) {
  11629. int[] smithitem = {
  11630. 1205,1351,1422,1139,1277,4819,819,1321,39,1291,1155,864,1173,1337,1375,1103,1189,3095,1307,1087,1075,1117 //bronze
  11631. //iron
  11632. //steel
  11633. //mithril
  11634. //adamant
  11635. //rune
  11636. };
  11637. int[] bar = {
  11638. 2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349,2349 //bronze
  11639. //iron
  11640. //steel
  11641. //mithril
  11642. //adamant
  11643. //rune
  11644. };
  11645. for(int i = 0; i < smithitem.length; i++)
  11646. if (removeID == smithitem[i]) {
  11647. return bar[i];
  11648. }
  11649. return 0;
  11650. }
  11651.  
  11652. public int barsNeeded(int slot, int column) {
  11653. if (column == 1119) {
  11654. if (slot == 0 || slot == 1) {
  11655. return 1;
  11656. }
  11657. if (slot == 2 || slot == 3) {
  11658. return 2;
  11659. }
  11660. if (slot == 4) {
  11661. return 3;
  11662. }
  11663. }
  11664. if (column == 1120) {
  11665. if (slot == 0 || slot == 1) {
  11666. return 1;
  11667. }
  11668. if (slot == 2 || slot == 3) {
  11669. return 3;
  11670. }
  11671. if (slot == 4) {
  11672. return 2;
  11673. }
  11674. }
  11675. if (column == 1121) {
  11676. if (slot == 0 || slot == 1 || slot == 2) {
  11677. return 3;
  11678. }
  11679. if (slot == 3) {
  11680. return 5;
  11681. }
  11682. if (slot == 4) {
  11683. return 1;
  11684. }
  11685. }
  11686. if (column == 1122) {
  11687. if (slot == 0 || slot == 4) {
  11688. return 1;
  11689. }
  11690. if (slot == 1 || slot == 2) {
  11691. return 2;
  11692. }
  11693. if (slot == 3) {
  11694. return 3;
  11695. }
  11696. }
  11697. if (column == 1123) {
  11698. if (slot == 0 || slot == 1 || slot == 2 || slot == 3 || slot == 4) {
  11699. return 1;
  11700. }
  11701. }
  11702. return 0;
  11703. }
  11704.  
  11705. public int barsNeeded2(int slot, int column) {
  11706. if (column == 1119) {
  11707. if (slot == 0 || slot == 1) {
  11708. return 5;
  11709. }
  11710. if (slot == 2 || slot == 3) {
  11711. return 10;
  11712. }
  11713. if (slot == 4) {
  11714. return 15;
  11715. }
  11716. }
  11717. if (column == 1120) {
  11718. if (slot == 0 || slot == 1) {
  11719. return 5;
  11720. }
  11721. if (slot == 2 || slot == 3) {
  11722. return 15;
  11723. }
  11724. if (slot == 4) {
  11725. return 10;
  11726. }
  11727. }
  11728. if (column == 1121) {
  11729. if (slot == 0 || slot == 1 || slot == 2) {
  11730. return 15;
  11731. }
  11732. if (slot == 3) {
  11733. return 25;
  11734. }
  11735. if (slot == 4) {
  11736. return 5;
  11737. }
  11738. }
  11739. if (column == 1122) {
  11740. if (slot == 0 || slot == 4) {
  11741. return 5;
  11742. }
  11743. if (slot == 1 || slot == 2) {
  11744. return 10;
  11745. }
  11746. if (slot == 3) {
  11747. return 15;
  11748. }
  11749. }
  11750. if (column == 1123) {
  11751. if (slot == 0 || slot == 1 || slot == 2 || slot == 3 || slot == 4) {
  11752. return 5;
  11753. }
  11754. }
  11755. return 0;
  11756. }
  11757.  
  11758. public int barsNeeded3(int slot, int column) {
  11759. if (column == 1119) {
  11760. if (slot == 0 || slot == 1) {
  11761. return 10;
  11762. }
  11763. if (slot == 2 || slot == 3) {
  11764. return 20;
  11765. }
  11766. if (slot == 4) {
  11767. return 30;
  11768. }
  11769. }
  11770. if (column == 1120) {
  11771. if (slot == 0 || slot == 1) {
  11772. return 10;
  11773. }
  11774. if (slot == 2 || slot == 3) {
  11775. return 30;
  11776. }
  11777. if (slot == 4) {
  11778. return 20;
  11779. }
  11780. }
  11781. if (column == 1121) {
  11782. if (slot == 0 || slot == 1 || slot == 2) {
  11783. return 30;
  11784. }
  11785. if (slot == 3) {
  11786. return 50;
  11787. }
  11788. if (slot == 4) {
  11789. return 10;
  11790. }
  11791. }
  11792. if (column == 1122) {
  11793. if (slot == 0 || slot == 4) {
  11794. return 10;
  11795. }
  11796. if (slot == 1 || slot == 2) {
  11797. return 20;
  11798. }
  11799. if (slot == 3) {
  11800. return 30;
  11801. }
  11802. }
  11803. if (column == 1123) {
  11804. if (slot == 0 || slot == 1 || slot == 2 || slot == 3 || slot == 4) {
  11805. return 10;
  11806. }
  11807. }
  11808. return 0;
  11809. }
  11810.  
  11811. public int smithXP(int barType, int barAmount) {
  11812. int[] bar = {2349,2351,2353,2359,2361,2363};
  11813. int[] xp = {50,100,200,400,800,1400};
  11814. for(int i = 0; i < bar.length; i++) {
  11815. if (barType == bar[i]) {
  11816. return barAmount * xp[i];
  11817. }
  11818. setAnimation(898);
  11819. return 0;
  11820. }
  11821. return -1;
  11822. }
  11823.  
  11824. public boolean canSmith(int item) {
  11825. int[] smithitem = {
  11826. 1205,1351,1422,1139,1277,4819,819,1321,39,1291,1155,864,1173,1337,1375,1103,1189,3095,1307,1087,1075,1117 //bronze
  11827. //iron
  11828. //steel
  11829. //mithril
  11830. //adamant
  11831. //rune
  11832. };
  11833. int[] smithlevel = {
  11834. 1,1,2,3,4,4,4,5,5,6,7,7,8,9,10,11,12,13,14,16,16,18 //bronze
  11835. //iron
  11836. //steel
  11837. //mithril
  11838. //adamant
  11839. //rune
  11840. };
  11841. for(int i = 0; i < smithitem.length; i++)
  11842. if (item == smithitem[i] && playerLevel[13] >= smithlevel[i]) {
  11843. return true;
  11844. }
  11845. return false;
  11846. }
  11847.  
  11848. public void addItemToSmith(int id, int slot, int column, int amount) {
  11849. outStream.createFrameVarSizeWord(34); // init item to smith screen
  11850. outStream.writeWord(column); // Column Across Smith Screen
  11851. outStream.writeByte(4); // Total Rows?
  11852. outStream.writeDWord(slot); // Row Down The Smith Screen
  11853. outStream.writeWord(id + 1); // item
  11854. outStream.writeByte(amount); // how many there are?
  11855. outStream.endFrameVarSizeWord();
  11856.  
  11857. }
  11858.  
  11859.  
  11860. public void initSmithing(int barType) {
  11861. outStream.createFrame(97);
  11862. outStream.writeWord(994);
  11863. if (amountOfItem(barType) < 5) {
  11864. sendQuest("@red@5bars@red@", 1112);
  11865. } else {
  11866. sendQuest("@gre@5bars@gre@", 1112);
  11867. }
  11868. if (amountOfItem(barType) < 3) {
  11869. sendQuest("@red@3bars@red@", 1109);
  11870. sendQuest("@red@3bars@red@", 1110);
  11871. sendQuest("@red@3bars@red@", 1118);
  11872. sendQuest("@red@3bars@red@", 1111);
  11873. sendQuest("@red@3bars@red@", 1095);
  11874. sendQuest("@red@3bars@red@", 1115);
  11875. sendQuest("@red@3bars@red@", 1090);
  11876. } else {
  11877. sendQuest("@gre@3bars@gre@", 1109);
  11878. sendQuest("@gre@3bars@gre@", 1110);
  11879. sendQuest("@gre@3bars@gre@", 1118);
  11880. sendQuest("@gre@3bars@gre@", 1111);
  11881. sendQuest("@gre@3bars@gre@", 1095);
  11882. sendQuest("@gre@3bars@gre@", 1115);
  11883. sendQuest("@gre@3bars@gre@", 1090);
  11884. }
  11885. if (amountOfItem(barType) < 2) {
  11886. sendQuest("@red@2bars@red@", 1113);
  11887. sendQuest("@red@2bars@red@", 1116);
  11888. sendQuest("@red@2bars@red@", 1114);
  11889. sendQuest("@red@2bars@red@", 1089);
  11890. sendQuest("@red@2bars@red@", 8428);
  11891. } else {
  11892. sendQuest("@gre@2bars@gre@", 1113);
  11893. sendQuest("@gre@2bars@gre@", 1116);
  11894. sendQuest("@gre@2bars@gre@", 1114);
  11895. sendQuest("@gre@2bars@gre@", 1089);
  11896. sendQuest("@gre@2bars@gre@", 8428);
  11897. }
  11898. if (amountOfItem(barType) < 1) {
  11899. sendQuest("@red@1bar@red@", 1125);
  11900. sendQuest("@red@1bar@red@", 1126);
  11901. sendQuest("@red@1bar@red@", 1127);
  11902. sendQuest("@red@1bar@red@", 1124);
  11903. sendQuest("@red@1bar@red@", 1128);
  11904. sendQuest("@red@1bar@red@", 1129);
  11905. sendQuest("@red@1bar@red@", 1130);
  11906. sendQuest("@red@1bar@red@", 13357);
  11907. sendQuest("@red@1bar@red@", 1131);
  11908. sendQuest("@red@1bar@red@", 11459);
  11909. } else {
  11910. sendQuest("@gre@1bar@gre@", 1125);
  11911. sendQuest("@gre@1bar@gre@", 1126);
  11912. sendQuest("@gre@1bar@gre@", 1127);
  11913. sendQuest("@gre@1bar@gre@", 1124);
  11914. sendQuest("@gre@1bar@gre@", 1128);
  11915. sendQuest("@gre@1bar@gre@", 1129);
  11916. sendQuest("@gre@1bar@gre@", 1130);
  11917. sendQuest("@gre@1bar@gre@", 13357);
  11918. sendQuest("@gre@1bar@gre@", 1131);
  11919. sendQuest("@gre@1bar@gre@", 11459);
  11920. }
  11921. if (barType == 2349) { // Bronze
  11922. if (playerLevel[13] < 18) {
  11923. sendQuest("@bla@Plate body@bla@", 1101);
  11924. } else {
  11925. sendQuest("@whi@Plate body@whi@", 1101);
  11926. }
  11927. if (playerLevel[13] < 16) {
  11928. sendQuest("@bla@Plate legs@bla@", 1099);
  11929. sendQuest("@bla@Plate skirt@bla@", 1100);
  11930. } else {
  11931. sendQuest("@whi@Plate legs@whi@", 1099);
  11932. sendQuest("@whi@Plate skirt@whi@", 1100);
  11933. }
  11934. if (playerLevel[13] < 14) {
  11935. sendQuest("@bla@2 hand sword@bla@", 1088);
  11936. } else {
  11937. sendQuest("@whi@2 hand sword@whi@", 1088);
  11938. }
  11939. if (playerLevel[13] < 13) {
  11940. sendQuest("@bla@Claws@bla@", 8429);
  11941. } else {
  11942. sendQuest("@whi@Claws@whi@", 8429);
  11943. }
  11944. if (playerLevel[13] < 12) {
  11945. sendQuest("@bla@Kite shield@bla@", 1105);
  11946. } else {
  11947. sendQuest("@whi@Kite shield@whi@", 1105);
  11948. }
  11949. if (playerLevel[13] < 11) {
  11950. sendQuest("@bla@Chain body@bla@", 1098);
  11951. } else {
  11952. sendQuest("@whi@Chain body@whi@", 1098);
  11953. }
  11954. if (playerLevel[13] < 10) {
  11955. sendQuest("@bla@Battle axe@bla@", 1092);
  11956. } else {
  11957. sendQuest("@whi@Battle axe@whi@", 1092);
  11958. }
  11959. if (playerLevel[13] < 9) {
  11960. sendQuest("@bla@Warhammer@bla@", 1083);
  11961. } else {
  11962. sendQuest("@whi@Warhammer@whi@", 1083);
  11963. }
  11964. if (playerLevel[13] < 8) {
  11965. sendQuest("@bla@Square shield@bla@", 1104);
  11966. } else {
  11967. sendQuest("@whi@Square shield@whi@", 1104);
  11968. }
  11969. if (playerLevel[13] < 7) {
  11970. sendQuest("@bla@Full helm@bla@", 1103);
  11971. sendQuest("@bla@Throwing knives@bla@", 1106);
  11972. } else {
  11973. sendQuest("@whi@Full helm@whi@", 1103);
  11974. sendQuest("@whi@Throwing knives@whi@", 1106);
  11975. }
  11976. if (playerLevel[13] < 6) {
  11977. sendQuest("@bla@Long sword@bla@", 1086);
  11978. } else {
  11979. sendQuest("@whi@Long sword@whi@", 1086);
  11980. }
  11981. if (playerLevel[13] < 5) {
  11982. sendQuest("@bla@Scimitar@bla@", 1087);
  11983. sendQuest("@bla@Arrowtips@bla@", 1108);
  11984. } else {
  11985. sendQuest("@whi@Scimitar@whi@", 1087);
  11986. sendQuest("@whi@Arrowtips@whi@", 1108);
  11987. }
  11988. if (playerLevel[13] < 4) {
  11989. sendQuest("@bla@Sword@bla@", 1085);
  11990. sendQuest("@bla@Dart tips@bla@", 1107);
  11991. sendQuest("@bla@Nails@bla@", 13358);
  11992. } else {
  11993. sendQuest("@whi@Sword@whi@", 1085);
  11994. sendQuest("@whi@Dart tips@whi@", 1107);
  11995. sendQuest("@whi@Nails@whi@", 13358);
  11996. }
  11997. if (playerLevel[13] < 3) {
  11998. sendQuest("@bla@Medium helm@bla@", 1102);
  11999. } else {
  12000. sendQuest("@whi@Medium helm@whi@", 1102);
  12001. }
  12002. if (playerLevel[13] < 2) {
  12003. sendQuest("@bla@Mace@bla@", 1093);
  12004. } else {
  12005. sendQuest("@whi@Mace@whi@", 1093);
  12006. }
  12007. if (playerLevel[13] < 1) {
  12008. sendQuest("@bla@Dagger@bla@", 1094);
  12009. sendQuest("@bla@Axe@bla@", 1091);
  12010. } else {
  12011. sendQuest("@whi@Dagger@whi@", 1094);
  12012. sendQuest("@whi@Axe@whi@", 1091);
  12013. }
  12014. addItemToSmith(1205, 0, 1119, 1);
  12015. addItemToSmith(1351, 0, 1120, 1);
  12016. addItemToSmith(1103, 0, 1121, 1);
  12017. addItemToSmith(1139, 0, 1122, 1);
  12018. addItemToSmith(819, 0, 1123, 10);
  12019. addItemToSmith(1277, 1, 1119, 1);
  12020. addItemToSmith(1422, 1, 1120, 1);
  12021. addItemToSmith(1075, 1, 1121, 1);
  12022. addItemToSmith(1155, 1, 1122, 1);
  12023. addItemToSmith(39, 1, 1123, 15);
  12024. addItemToSmith(1321, 2, 1119, 1);
  12025. addItemToSmith(1337, 2, 1120, 1);
  12026. addItemToSmith(1087, 2, 1121, 1);
  12027. addItemToSmith(1173, 2, 1122, 1);
  12028. addItemToSmith(864, 2, 1123, 5);
  12029. addItemToSmith(1291, 3, 1119, 1);
  12030. addItemToSmith(1375, 3, 1120, 1);
  12031. addItemToSmith(1117, 3, 1121, 1);
  12032. addItemToSmith(1189, 3, 1122, 1);
  12033. // addItemToSmith(0,3,1123);
  12034. sendQuest("", 1132);
  12035. sendQuest("", 1096);
  12036. addItemToSmith(1307, 4, 1119, 1);
  12037. addItemToSmith(3095, 4, 1120, 1);
  12038. // addItemToSmith(1307,4,1121);
  12039. sendQuest("", 11459);
  12040. sendQuest("", 11461);
  12041. addItemToSmith(4819, 4, 1122, 1);
  12042. // addItemToSmith(1307,4,1123);
  12043. sendQuest("", 1135);
  12044. sendQuest("", 1134);
  12045. }
  12046. if (barType == 2351) { // Iron
  12047. if (playerLevel[13] < 33) {
  12048. sendQuest("@bla@Plate body@bla@", 1101);
  12049. } else {
  12050. sendQuest("@whi@Plate body@whi@", 1101);
  12051. }
  12052. if (playerLevel[13] < 31) {
  12053. sendQuest("@bla@Plate legs@bla@", 1099);
  12054. sendQuest("@bla@Plate skirt@bla@", 1100);
  12055. } else {
  12056. sendQuest("@whi@Plate legs@whi@", 1099);
  12057. sendQuest("@whi@Plate skirt@whi@", 1100);
  12058. }
  12059. if (playerLevel[13] < 29) {
  12060. sendQuest("@bla@2 hand sword@bla@", 1088);
  12061. } else {
  12062. sendQuest("@whi@2 hand sword@whi@", 1088);
  12063. }
  12064. if (playerLevel[13] < 28) {
  12065. sendQuest("@bla@Claws@bla@", 8429);
  12066. } else {
  12067. sendQuest("@whi@Claws@whi@", 8429);
  12068. }
  12069. if (playerLevel[13] < 27) {
  12070. sendQuest("@bla@Kite shield@bla@", 1105);
  12071. } else {
  12072. sendQuest("@whi@Kite shield@whi@", 1105);
  12073. }
  12074. if (playerLevel[13] < 26) {
  12075. sendQuest("@bla@Chain body@bla@", 1098);
  12076. sendQuest("@bla@Oil lantern frame@bla@", 11461);
  12077. } else {
  12078. sendQuest("@whi@Chain body@whi@", 1098);
  12079. sendQuest("@whi@Oil lantern frame@whi@", 11461);
  12080. }
  12081. if (playerLevel[13] < 25) {
  12082. sendQuest("@bla@Battle axe@bla@", 1092);
  12083. } else {
  12084. sendQuest("@whi@Battle axe@whi@", 1092);
  12085. }
  12086. if (playerLevel[13] < 24) {
  12087. sendQuest("@bla@Warhammer@bla@", 1083);
  12088. } else {
  12089. sendQuest("@whi@Warhammer@whi@", 1083);
  12090. }
  12091. if (playerLevel[13] < 23) {
  12092. sendQuest("@bla@Square shield@bla@", 1104);
  12093. } else {
  12094. sendQuest("@whi@Square shield@whi@", 1104);
  12095. }
  12096. if (playerLevel[13] < 22) {
  12097. sendQuest("@bla@Full helm@bla@", 1103);
  12098. sendQuest("@bla@Throwing knives@bla@", 1106);
  12099. } else {
  12100. sendQuest("@whi@Full helm@whi@", 1103);
  12101. sendQuest("@whi@Throwing knives@whi@", 1106);
  12102. }
  12103. if (playerLevel[13] < 21) {
  12104. sendQuest("@bla@Long sword@bla@", 1086);
  12105. } else {
  12106. sendQuest("@whi@Long sword@whi@", 1086);
  12107. }
  12108. if (playerLevel[13] < 20) {
  12109. sendQuest("@bla@Scimitar@bla@", 1087);
  12110. sendQuest("@bla@Arrowtips@bla@", 1108);
  12111. } else {
  12112. sendQuest("@whi@Scimitar@whi@", 1087);
  12113. sendQuest("@whi@Arrowtips@whi@", 1108);
  12114. }
  12115. if (playerLevel[13] < 19) {
  12116. sendQuest("@bla@Sword@bla@", 1085);
  12117. sendQuest("@bla@Dart tips@bla@", 1107);
  12118. sendQuest("@bla@Nails@bla@", 13358);
  12119. } else {
  12120. sendQuest("@whi@Sword@whi@", 1085);
  12121. sendQuest("@whi@Dart tips@whi@", 1107);
  12122. sendQuest("@whi@Nails@whi@", 13358);
  12123. }
  12124. if (playerLevel[13] < 18) {
  12125. sendQuest("@bla@Medium helm@bla@", 1102);
  12126. } else {
  12127. sendQuest("@whi@Medium helm@whi@", 1102);
  12128. }
  12129. if (playerLevel[13] < 17) {
  12130. sendQuest("@bla@Mace@bla@", 1093);
  12131. } else {
  12132. sendQuest("@whi@Mace@whi@", 1093);
  12133. }
  12134. if (playerLevel[13] < 16) {
  12135. sendQuest("@bla@Axe@bla@", 1091);
  12136. } else {
  12137. sendQuest("@whi@Axe@whi@", 1091);
  12138. }
  12139. if (playerLevel[13] < 15) {
  12140. sendQuest("@bla@Dagger@bla@", 1094);
  12141. } else {
  12142. sendQuest("@whi@Dagger@whi@", 1094);
  12143. }
  12144. addItemToSmith(1203, 0, 1119, 1);
  12145. addItemToSmith(1349, 0, 1120, 1);
  12146. addItemToSmith(1101, 0, 1121, 1);
  12147. addItemToSmith(1137, 0, 1122, 1);
  12148. addItemToSmith(820, 0, 1123, 10);
  12149. addItemToSmith(1279, 1, 1119, 1);
  12150. addItemToSmith(1420, 1, 1120, 1);
  12151. addItemToSmith(1067, 1, 1121, 1);
  12152. addItemToSmith(1153, 1, 1122, 1);
  12153. addItemToSmith(40, 1, 1123, 15);
  12154. addItemToSmith(1323, 2, 1119, 1);
  12155. addItemToSmith(1335, 2, 1120, 1);
  12156. addItemToSmith(1081, 2, 1121, 1);
  12157. addItemToSmith(1175, 2, 1122, 1);
  12158. addItemToSmith(863, 2, 1123, 5);
  12159. addItemToSmith(1293, 3, 1119, 1);
  12160. addItemToSmith(1363, 3, 1120, 1);
  12161. addItemToSmith(1115, 3, 1121, 1);
  12162. addItemToSmith(1191, 3, 1122, 1);
  12163. // addItemToSmith(0,3,1123);
  12164. sendQuest("", 1132);
  12165. sendQuest("", 1096);
  12166. addItemToSmith(1309, 4, 1119, 1);
  12167. addItemToSmith(3096, 4, 1120, 1);
  12168. addItemToSmith(4540, 4, 1121, 1);
  12169. addItemToSmith(4820, 4, 1122, 1);
  12170. // addItemToSmith(1307,4,1123);
  12171. sendQuest("", 1135);
  12172. sendQuest("", 1134);
  12173. }
  12174. if (barType == 2353) { // Steel
  12175. if (playerLevel[13] < 49) {
  12176. sendQuest("@bla@Bullseye lantern@bla@", 11461);
  12177. } else {
  12178. sendQuest("@whi@Bullseye lantern@whi@", 11461);
  12179. }
  12180. if (playerLevel[13] < 48) {
  12181. sendQuest("@bla@Plate body@bla@", 1101);
  12182. } else {
  12183. sendQuest("@whi@Plate body@whi@", 1101);
  12184. }
  12185. if (playerLevel[13] < 46) {
  12186. sendQuest("@bla@Plate legs@bla@", 1099);
  12187. sendQuest("@bla@Plate skirt@bla@", 1100);
  12188. } else {
  12189. sendQuest("@whi@Plate legs@whi@", 1099);
  12190. sendQuest("@whi@Plate skirt@whi@", 1100);
  12191. }
  12192. if (playerLevel[13] < 44) {
  12193. sendQuest("@bla@2 hand sword@bla@", 1088);
  12194. } else {
  12195. sendQuest("@whi@2 hand sword@whi@", 1088);
  12196. }
  12197. if (playerLevel[13] < 43) {
  12198. sendQuest("@bla@Claws@bla@", 8429);
  12199. } else {
  12200. sendQuest("@whi@Claws@whi@", 8429);
  12201. }
  12202. if (playerLevel[13] < 42) {
  12203. sendQuest("@bla@Kite shield@bla@", 1105);
  12204. } else {
  12205. sendQuest("@whi@Kite shield@whi@", 1105);
  12206. }
  12207. if (playerLevel[13] < 41) {
  12208. sendQuest("@bla@Chain body@bla@", 1098);
  12209. } else {
  12210. sendQuest("@whi@Chain body@whi@", 1098);
  12211. }
  12212. if (playerLevel[13] < 40) {
  12213. sendQuest("@bla@Battle axe@bla@", 1092);
  12214. } else {
  12215. sendQuest("@whi@Battle axe@whi@", 1092);
  12216. }
  12217. if (playerLevel[13] < 39) {
  12218. sendQuest("@bla@Warhammer@bla@", 1083);
  12219. } else {
  12220. sendQuest("@whi@Warhammer@whi@", 1083);
  12221. }
  12222. if (playerLevel[13] < 38) {
  12223. sendQuest("@bla@Square shield@bla@", 1104);
  12224. } else {
  12225. sendQuest("@whi@Square shield@whi@", 1104);
  12226. }
  12227. if (playerLevel[13] < 37) {
  12228. sendQuest("@bla@Full helm@bla@", 1103);
  12229. sendQuest("@bla@Throwing knives@bla@", 1106);
  12230. } else {
  12231. sendQuest("@whi@Full helm@whi@", 1103);
  12232. sendQuest("@whi@Throwing knives@whi@", 1106);
  12233. }
  12234. if (playerLevel[13] < 36) {
  12235. sendQuest("@bla@Long sword@bla@", 1086);
  12236. sendQuest("@bla@Studs@bla@", 1134);
  12237. } else {
  12238. sendQuest("@whi@Long sword@whi@", 1086);
  12239. sendQuest("@whi@Studs@whi@", 1134);
  12240. }
  12241. if (playerLevel[13] < 35) {
  12242. sendQuest("@bla@Scimitar@bla@", 1087);
  12243. sendQuest("@bla@Arrowtips@bla@", 1108);
  12244. } else {
  12245. sendQuest("@whi@Scimitar@whi@", 1087);
  12246. sendQuest("@whi@Arrowtips@whi@", 1108);
  12247. }
  12248. if (playerLevel[13] < 34) {
  12249. sendQuest("@bla@Sword@bla@", 1085);
  12250. sendQuest("@bla@Dart tips@bla@", 1107);
  12251. sendQuest("@bla@Nails@bla@", 13358);
  12252. } else {
  12253. sendQuest("@whi@Sword@whi@", 1085);
  12254. sendQuest("@whi@Dart tips@whi@", 1107);
  12255. sendQuest("@whi@Nails@whi@", 13358);
  12256. }
  12257. if (playerLevel[13] < 33) {
  12258. sendQuest("@bla@Medium helm@bla@", 1102);
  12259. } else {
  12260. sendQuest("@whi@Medium helm@whi@", 1102);
  12261. }
  12262. if (playerLevel[13] < 32) {
  12263. sendQuest("@bla@Mace@bla@", 1093);
  12264. } else {
  12265. sendQuest("@whi@Mace@whi@", 1093);
  12266. }
  12267. if (playerLevel[13] < 31) {
  12268. sendQuest("@bla@Axe@bla@", 1091);
  12269. } else {
  12270. sendQuest("@whi@Axe@whi@", 1091);
  12271. }
  12272. if (playerLevel[13] < 30) {
  12273. sendQuest("@bla@Dagger@bla@", 1094);
  12274. } else {
  12275. sendQuest("@whi@Dagger@whi@", 1094);
  12276. }
  12277. addItemToSmith(1207, 0, 1119, 1);
  12278. addItemToSmith(1353, 0, 1120, 1);
  12279. addItemToSmith(1105, 0, 1121, 1);
  12280. addItemToSmith(1141, 0, 1122, 1);
  12281. addItemToSmith(821, 0, 1123, 10);
  12282. addItemToSmith(1281, 1, 1119, 1);
  12283. addItemToSmith(1424, 1, 1120, 1);
  12284. addItemToSmith(1069, 1, 1121, 1);
  12285. addItemToSmith(1157, 1, 1122, 1);
  12286. addItemToSmith(41, 1, 1123, 15);
  12287. addItemToSmith(1325, 2, 1119, 1);
  12288. addItemToSmith(1339, 2, 1120, 1);
  12289. addItemToSmith(1083, 2, 1121, 1);
  12290. addItemToSmith(1177, 2, 1122, 1);
  12291. addItemToSmith(865, 2, 1123, 5);
  12292. addItemToSmith(1295, 3, 1119, 1);
  12293. addItemToSmith(1365, 3, 1120, 1);
  12294. addItemToSmith(1119, 3, 1121, 1);
  12295. addItemToSmith(1193, 3, 1122, 1);
  12296. sendQuest("", 1132);
  12297. sendQuest("", 1096);
  12298. addItemToSmith(1311, 4, 1119, 1);
  12299. addItemToSmith(3097, 4, 1120, 1);
  12300. addItemToSmith(4544, 4, 1121, 1);
  12301. addItemToSmith(1539, 4, 1122, 1);
  12302. addItemToSmith(2370, 4, 1123, 1);
  12303. if (amountOfItem(barType) < 1) {
  12304. sendQuest("@red@1bar@red@", 1135);
  12305. } else {
  12306. sendQuest("@gre@1bar@gre@", 1135);
  12307. }
  12308. }
  12309. if (barType == 2359) { // Mith
  12310. if (playerLevel[13] < 68) {
  12311. sendQuest("@bla@Plate body@bla@", 1101);
  12312. } else {
  12313. sendQuest("@whi@Plate body@whi@", 1101);
  12314. }
  12315. if (playerLevel[13] < 66) {
  12316. sendQuest("@bla@Plate legs@bla@", 1099);
  12317. sendQuest("@bla@Plate skirt@bla@", 1100);
  12318. } else {
  12319. sendQuest("@whi@Plate legs@whi@", 1099);
  12320. sendQuest("@whi@Plate skirt@whi@", 1100);
  12321. }
  12322. if (playerLevel[13] < 64) {
  12323. sendQuest("@bla@2 hand sword@bla@", 1088);
  12324. } else {
  12325. sendQuest("@whi@2 hand sword@whi@", 1088);
  12326. }
  12327. if (playerLevel[13] < 63) {
  12328. sendQuest("@bla@Claws@bla@", 8429);
  12329. } else {
  12330. sendQuest("@whi@Claws@whi@", 8429);
  12331. }
  12332. if (playerLevel[13] < 62) {
  12333. sendQuest("@bla@Kite shield@bla@", 1105);
  12334. } else {
  12335. sendQuest("@whi@Kite shield@whi@", 1105);
  12336. }
  12337. if (playerLevel[13] < 61) {
  12338. sendQuest("@bla@Chain body@bla@", 1098);
  12339. } else {
  12340. sendQuest("@whi@Chain body@whi@", 1098);
  12341. }
  12342. if (playerLevel[13] < 60) {
  12343. sendQuest("@bla@Battle axe@bla@", 1092);
  12344. } else {
  12345. sendQuest("@whi@Battle axe@whi@", 1092);
  12346. }
  12347. if (playerLevel[13] < 59) {
  12348. sendQuest("@bla@Warhammer@bla@", 1083);
  12349. } else {
  12350. sendQuest("@whi@Warhammer@whi@", 1083);
  12351. }
  12352. if (playerLevel[13] < 58) {
  12353. sendQuest("@bla@Square shield@bla@", 1104);
  12354. } else {
  12355. sendQuest("@whi@Square shield@whi@", 1104);
  12356. }
  12357. if (playerLevel[13] < 57) {
  12358. sendQuest("@bla@Full helm@bla@", 1103);
  12359. sendQuest("@bla@Throwing knives@bla@", 1106);
  12360. } else {
  12361. sendQuest("@whi@Full helm@whi@", 1103);
  12362. sendQuest("@whi@Throwing knives@whi@", 1106);
  12363. }
  12364. if (playerLevel[13] < 56) {
  12365. sendQuest("@bla@Long sword@bla@", 1086);
  12366. } else {
  12367. sendQuest("@whi@Long sword@whi@", 1086);
  12368. }
  12369. if (playerLevel[13] < 55) {
  12370. sendQuest("@bla@Scimitar@bla@", 1087);
  12371. sendQuest("@bla@Arrowtips@bla@", 1108);
  12372. } else {
  12373. sendQuest("@whi@Scimitar@whi@", 1087);
  12374. sendQuest("@whi@Arrowtips@whi@", 1108);
  12375. }
  12376. if (playerLevel[13] < 54) {
  12377. sendQuest("@bla@Sword@bla@", 1085);
  12378. sendQuest("@bla@Dart tips@bla@", 1107);
  12379. sendQuest("@bla@Nails@bla@", 13358);
  12380. } else {
  12381. sendQuest("@whi@Sword@whi@", 1085);
  12382. sendQuest("@whi@Dart tips@whi@", 1107);
  12383. sendQuest("@whi@Nails@whi@", 13358);
  12384. }
  12385. if (playerLevel[13] < 53) {
  12386. sendQuest("@bla@Medium helm@bla@", 1102);
  12387. } else {
  12388. sendQuest("@whi@Medium helm@whi@", 1102);
  12389. }
  12390. if (playerLevel[13] < 52) {
  12391. sendQuest("@bla@Mace@bla@", 1093);
  12392. } else {
  12393. sendQuest("@whi@Mace@whi@", 1093);
  12394. }
  12395. if (playerLevel[13] < 51) {
  12396. sendQuest("@bla@Axe@bla@", 1091);
  12397. } else {
  12398. sendQuest("@whi@Axe@whi@", 1091);
  12399. }
  12400. if (playerLevel[13] < 50) {
  12401. sendQuest("@bla@Dagger@bla@", 1094);
  12402. } else {
  12403. sendQuest("@whi@Dagger@whi@", 1094);
  12404. }
  12405. addItemToSmith(1209, 0, 1119, 1);
  12406. addItemToSmith(1355, 0, 1120, 1);
  12407. addItemToSmith(1109, 0, 1121, 1);
  12408. addItemToSmith(1143, 0, 1122, 1);
  12409. addItemToSmith(822, 0, 1123, 10);
  12410. addItemToSmith(1285, 1, 1119, 1);
  12411. addItemToSmith(1355, 1, 1120, 1);
  12412. addItemToSmith(1071, 1, 1121, 1);
  12413. addItemToSmith(1159, 1, 1122, 1);
  12414. addItemToSmith(42, 1, 1123, 15);
  12415. addItemToSmith(1329, 2, 1119, 1);
  12416. addItemToSmith(1343, 2, 1120, 1);
  12417. addItemToSmith(1085, 2, 1121, 1);
  12418. addItemToSmith(1181, 2, 1122, 1);
  12419. addItemToSmith(866, 2, 1123, 5);
  12420. addItemToSmith(1299, 3, 1119, 1);
  12421. addItemToSmith(1369, 3, 1120, 1);
  12422. addItemToSmith(1121, 3, 1121, 1);
  12423. addItemToSmith(1197, 3, 1122, 1);
  12424. sendQuest("", 1132);
  12425. sendQuest("", 1096);
  12426. addItemToSmith(1315, 4, 1119, 1);
  12427. addItemToSmith(3099, 4, 1120, 1);
  12428. addItemToSmith(4822, 4, 1122, 1);
  12429. sendQuest("", 1135);
  12430. sendQuest("", 1134);
  12431. sendQuest("", 11461);
  12432. sendQuest("", 11459);
  12433. }
  12434. if (barType == 2361) { // Addy
  12435. if (playerLevel[13] < 88) {
  12436. sendQuest("@bla@Plate body@bla@", 1101);
  12437. } else {
  12438. sendQuest("@whi@Plate body@whi@", 1101);
  12439. }
  12440. if (playerLevel[13] < 86) {
  12441. sendQuest("@bla@Plate legs@bla@", 1099);
  12442. sendQuest("@bla@Plate skirt@bla@", 1100);
  12443. } else {
  12444. sendQuest("@whi@Plate legs@whi@", 1099);
  12445. sendQuest("@whi@Plate skirt@whi@", 1100);
  12446. }
  12447. if (playerLevel[13] < 84) {
  12448. sendQuest("@bla@2 hand sword@bla@", 1088);
  12449. } else {
  12450. sendQuest("@whi@2 hand sword@whi@", 1088);
  12451. }
  12452. if (playerLevel[13] < 83) {
  12453. sendQuest("@bla@Claws@bla@", 8429);
  12454. } else {
  12455. sendQuest("@whi@Claws@whi@", 8429);
  12456. }
  12457. if (playerLevel[13] < 82) {
  12458. sendQuest("@bla@Kite shield@bla@", 1105);
  12459. } else {
  12460. sendQuest("@whi@Kite shield@whi@", 1105);
  12461. }
  12462. if (playerLevel[13] < 81) {
  12463. sendQuest("@bla@Chain body@bla@", 1098);
  12464. } else {
  12465. sendQuest("@whi@Chain body@whi@", 1098);
  12466. }
  12467. if (playerLevel[13] < 80) {
  12468. sendQuest("@bla@Battle axe@bla@", 1092);
  12469. } else {
  12470. sendQuest("@whi@Battle axe@whi@", 1092);
  12471. }
  12472. if (playerLevel[13] < 79) {
  12473. sendQuest("@bla@Warhammer@bla@", 1083);
  12474. } else {
  12475. sendQuest("@whi@Warhammer@whi@", 1083);
  12476. }
  12477. if (playerLevel[13] < 78) {
  12478. sendQuest("@bla@Square shield@bla@", 1104);
  12479. } else {
  12480. sendQuest("@whi@Square shield@whi@", 1104);
  12481. }
  12482. if (playerLevel[13] < 77) {
  12483. sendQuest("@bla@Full helm@bla@", 1103);
  12484. sendQuest("@bla@Throwing knives@bla@", 1106);
  12485. } else {
  12486. sendQuest("@whi@Full helm@whi@", 1103);
  12487. sendQuest("@whi@Throwing knives@whi@", 1106);
  12488. }
  12489. if (playerLevel[13] < 76) {
  12490. sendQuest("@bla@Long sword@bla@", 1086);
  12491. } else {
  12492. sendQuest("@whi@Long sword@whi@", 1086);
  12493. }
  12494. if (playerLevel[13] < 75) {
  12495. sendQuest("@bla@Scimitar@bla@", 1087);
  12496. sendQuest("@bla@Arrowtips@bla@", 1108);
  12497. } else {
  12498. sendQuest("@whi@Scimitar@whi@", 1087);
  12499. sendQuest("@whi@Arrowtips@whi@", 1108);
  12500. }
  12501. if (playerLevel[13] < 74) {
  12502. sendQuest("@bla@Sword@bla@", 1085);
  12503. sendQuest("@bla@Dart tips@bla@", 1107);
  12504. sendQuest("@bla@Nails@bla@", 13358);
  12505. } else {
  12506. sendQuest("@whi@Sword@whi@", 1085);
  12507. sendQuest("@whi@Dart tips@whi@", 1107);
  12508. sendQuest("@whi@Nails@whi@", 13358);
  12509. }
  12510. if (playerLevel[13] < 73) {
  12511. sendQuest("@bla@Medium helm@bla@", 1102);
  12512. } else {
  12513. sendQuest("@whi@Medium helm@whi@", 1102);
  12514. }
  12515. if (playerLevel[13] < 72) {
  12516. sendQuest("@bla@Mace@bla@", 1093);
  12517. } else {
  12518. sendQuest("@whi@Mace@whi@", 1093);
  12519. }
  12520. if (playerLevel[13] < 71) {
  12521. sendQuest("@bla@Axe@bla@", 1091);
  12522. } else {
  12523. sendQuest("@whi@Axe@whi@", 1091);
  12524. }
  12525. if (playerLevel[13] < 70) {
  12526. sendQuest("@bla@Dagger@bla@", 1094);
  12527. } else {
  12528. sendQuest("@whi@Dagger@whi@", 1094);
  12529. }
  12530. addItemToSmith(1211, 0, 1119, 1);
  12531. addItemToSmith(1357, 0, 1120, 1);
  12532. addItemToSmith(1111, 0, 1121, 1);
  12533. addItemToSmith(1145, 0, 1122, 1);
  12534. addItemToSmith(823, 0, 1123, 10);
  12535. addItemToSmith(1287, 1, 1119, 1);
  12536. addItemToSmith(1430, 1, 1120, 1);
  12537. addItemToSmith(1073, 1, 1121, 1);
  12538. addItemToSmith(1161, 1, 1122, 1);
  12539. addItemToSmith(43, 1, 1123, 15);
  12540. addItemToSmith(1331, 2, 1119, 1);
  12541. addItemToSmith(1345, 2, 1120, 1);
  12542. addItemToSmith(1091, 2, 1121, 1);
  12543. addItemToSmith(1183, 2, 1122, 1);
  12544. addItemToSmith(867, 2, 1123, 5);
  12545. addItemToSmith(1301, 3, 1119, 1);
  12546. addItemToSmith(1371, 3, 1120, 1);
  12547. addItemToSmith(1123, 3, 1121, 1);
  12548. addItemToSmith(1199, 3, 1122, 1);
  12549. // addItemToSmith(0,3,1123);
  12550. sendQuest("", 1132);
  12551. sendQuest("", 1096);
  12552. addItemToSmith(1317, 4, 1119, 1);
  12553. addItemToSmith(3100, 4, 1120, 1);
  12554. // addItemToSmith(4540,4,1121,1);
  12555. addItemToSmith(4823, 4, 1122, 1);
  12556. // addItemToSmith(1307,4,1123);
  12557. sendQuest("", 1135);
  12558. sendQuest("", 1134);
  12559. sendQuest("", 11461);
  12560. sendQuest("", 11459);
  12561. }
  12562. if (barType == 2363) { // Rune
  12563. if (playerLevel[13] < 99) {
  12564. sendQuest("@bla@Plate body@bla@", 1101);
  12565. sendQuest("@bla@Plate legs@bla@", 1099);
  12566. sendQuest("@bla@Plate skirt@bla@", 1100);
  12567. sendQuest("@bla@2 hand sword@bla@", 1088);
  12568. } else {
  12569. sendQuest("@whi@Plate body@whi@", 1101);
  12570. sendQuest("@whi@Plate legs@whi@", 1099);
  12571. sendQuest("@whi@Plate skirt@whi@", 1100);
  12572. sendQuest("@whi@2 hand sword@whi@", 1088);
  12573. }
  12574. if (playerLevel[13] < 98) {
  12575. sendQuest("@bla@Claws@bla@", 8429);
  12576. } else {
  12577. sendQuest("@whi@Claws@whi@", 8429);
  12578. }
  12579. if (playerLevel[13] < 97) {
  12580. sendQuest("@bla@Kite shield@bla@", 1105);
  12581. } else {
  12582. sendQuest("@whi@Kite shield@whi@", 1105);
  12583. }
  12584. if (playerLevel[13] < 96) {
  12585. sendQuest("@bla@Chain body@bla@", 1098);
  12586. } else {
  12587. sendQuest("@whi@Chain body@whi@", 1098);
  12588. }
  12589. if (playerLevel[13] < 95) {
  12590. sendQuest("@bla@Battle axe@bla@", 1092);
  12591. } else {
  12592. sendQuest("@whi@Battle axe@whi@", 1092);
  12593. }
  12594. if (playerLevel[13] < 94) {
  12595. sendQuest("@bla@Warhammer@bla@", 1083);
  12596. } else {
  12597. sendQuest("@whi@Warhammer@whi@", 1083);
  12598. }
  12599. if (playerLevel[13] < 93) {
  12600. sendQuest("@bla@Square shield@bla@", 1104);
  12601. } else {
  12602. sendQuest("@whi@Square shield@whi@", 1104);
  12603. }
  12604. if (playerLevel[13] < 92) {
  12605. sendQuest("@bla@Full helm@bla@", 1103);
  12606. sendQuest("@bla@Throwing knives@bla@", 1106);
  12607. } else {
  12608. sendQuest("@whi@Full helm@whi@", 1103);
  12609. sendQuest("@whi@Throwing knives@whi@", 1106);
  12610. }
  12611. if (playerLevel[13] < 91) {
  12612. sendQuest("@bla@Long sword@bla@", 1086);
  12613. } else {
  12614. sendQuest("@whi@Long sword@whi@", 1086);
  12615. }
  12616. if (playerLevel[13] < 90) {
  12617. sendQuest("@bla@Scimitar@bla@", 1087);
  12618. sendQuest("@bla@Arrowtips@bla@", 1108);
  12619. } else {
  12620. sendQuest("@whi@Scimitar@whi@", 1087);
  12621. sendQuest("@whi@Arrowtips@whi@", 1108);
  12622. }
  12623. if (playerLevel[13] < 89) {
  12624. sendQuest("@bla@Sword@bla@", 1085);
  12625. sendQuest("@bla@Dart tips@bla@", 1107);
  12626. sendQuest("@bla@Nails@bla@", 13358);
  12627. } else {
  12628. sendQuest("@whi@Sword@whi@", 1085);
  12629. sendQuest("@whi@Dart tips@whi@", 1107);
  12630. sendQuest("@whi@Nails@whi@", 13358);
  12631. }
  12632. if (playerLevel[13] < 88) {
  12633. sendQuest("@bla@Medium helm@bla@", 1102);
  12634. } else {
  12635. sendQuest("@whi@Medium helm@whi@", 1102);
  12636. }
  12637. if (playerLevel[13] < 87) {
  12638. sendQuest("@bla@Mace@bla@", 1093);
  12639. } else {
  12640. sendQuest("@whi@Mace@whi@", 1093);
  12641. }
  12642. if (playerLevel[13] < 86) {
  12643. sendQuest("@bla@Axe@bla@", 1091);
  12644. } else {
  12645. sendQuest("@whi@Axe@whi@", 1091);
  12646. }
  12647. if (playerLevel[13] < 85) {
  12648. sendQuest("@bla@Dagger@bla@", 1094);
  12649. } else {
  12650. sendQuest("@whi@Dagger@whi@", 1094);
  12651. }
  12652. addItemToSmith(1213, 0, 1119, 1);
  12653. addItemToSmith(1359, 0, 1120, 1);
  12654. addItemToSmith(1113, 0, 1121, 1);
  12655. addItemToSmith(1147, 0, 1122, 1);
  12656. addItemToSmith(824, 0, 1123, 10);
  12657. addItemToSmith(1289, 1, 1119, 1);
  12658. addItemToSmith(1432, 1, 1120, 1);
  12659. addItemToSmith(1079, 1, 1121, 1);
  12660. addItemToSmith(1163, 1, 1122, 1);
  12661. addItemToSmith(44, 1, 1123, 15);
  12662. addItemToSmith(1333, 2, 1119, 1);
  12663. addItemToSmith(1347, 2, 1120, 1);
  12664. addItemToSmith(1093, 2, 1121, 1);
  12665. addItemToSmith(1185, 2, 1122, 1);
  12666. addItemToSmith(868, 2, 1123, 5);
  12667. addItemToSmith(1303, 3, 1119, 1);
  12668. addItemToSmith(1373, 3, 1120, 1);
  12669. addItemToSmith(1127, 3, 1121, 1);
  12670. addItemToSmith(1201, 3, 1122, 1);
  12671. sendQuest("", 1132);
  12672. sendQuest("", 1096);
  12673. addItemToSmith(1319, 4, 1119, 1);
  12674. addItemToSmith(3101, 4, 1120, 1);
  12675. addItemToSmith(4824, 4, 1122, 1);
  12676. sendQuest("", 1135);
  12677. sendQuest("", 1134);
  12678. sendQuest("", 11461);
  12679. sendQuest("", 11459);
  12680. }
  12681. }
  12682.  
  12683.  
  12684. /* END OF SMITHING*/
  12685.  
  12686. /* WOODCUTTING*/
  12687. public boolean woodcutting() {
  12688.  
  12689. int WCAxe = 0;
  12690.  
  12691. if (IsCutting == true) {
  12692. 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.
  12693. } else {
  12694. WCAxe = WCCheckAxe();
  12695. }
  12696. if (WCAxe > 0) {
  12697. if (playerLevel[playerWoodcutting] >= woodcutting[1]) {
  12698. if (freeSlots() > 0) {
  12699. if (System.currentTimeMillis()-lastAction >= 1000 && IsCutting == false) {
  12700. lastAction = System.currentTimeMillis();
  12701. sendMessage("You swing your axe at the tree...");
  12702. setAnimation(0x284);
  12703. IsCutting = true;
  12704. }
  12705. if (System.currentTimeMillis()-lastAction >= woodcutting[0] && IsCutting == true) {
  12706. lastAction = System.currentTimeMillis();
  12707. addSkillXP((woodcutting[2]*woodcutting[3]*2), playerWoodcutting);
  12708. if (freeSlots() > 0) {
  12709. sendMessage("You get some logs.");
  12710. addItem(woodcutting[4], 1);
  12711. if (misc.random(1000) <= woodcutting[5]){
  12712. addItem(5074, 1);
  12713. sendMessage("You get a bird nest");
  12714. }
  12715. } else {
  12716. playerEquipment[playerWeapon] = OriginalWeapon;
  12717. OriginalWeapon = -1;
  12718. resetAnimation();
  12719. IsCutting = false;
  12720. resetWC();
  12721. }
  12722. }
  12723. } else {
  12724. //createEnemyItem(woodcutting[4]);
  12725. sendMessage("Not enough space in your inventory.");
  12726. woodcutting[0] = -1;
  12727. resetWC();
  12728. return false;
  12729. }
  12730. } else {
  12731. sendMessage("You need "+woodcutting[1]+" "+statName[playerWoodcutting]+" to cut those logs.");
  12732. resetWC();
  12733. return false;
  12734. }
  12735. } else {
  12736. sendMessage("Equip your axe before cutting trees!");
  12737. resetWC();
  12738. return false;
  12739. }
  12740. return true;
  12741. }
  12742.  
  12743. public boolean resetWC() {
  12744. woodcutting[0] = 0;
  12745. woodcutting[1] = 0;
  12746. woodcutting[2] = 0;
  12747. woodcutting[4] = 0;
  12748. woodcutting[5] = 2;
  12749. skillX = -1;
  12750. skillY = -1;
  12751. IsCutting = false;
  12752. IsUsingSkill = false;
  12753. resetAnimation();
  12754. return true;
  12755. }
  12756.  
  12757. public int WCCheckAxe() {
  12758. int Hand;
  12759. int Shield;
  12760. int Bag;
  12761. int Axe;
  12762.  
  12763. Hand = playerEquipment[playerWeapon];
  12764. Shield = playerEquipment[playerShield];
  12765. Axe = 0;
  12766. switch (Hand) {
  12767. case 1351:
  12768. // Bronze Axe
  12769. Axe = 1;
  12770. break;
  12771.  
  12772. case 1349:
  12773. // Iron Axe
  12774. Axe = 2;
  12775. break;
  12776.  
  12777. case 1353:
  12778. // Steel Axe
  12779. Axe = 3;
  12780. break;
  12781.  
  12782. case 1361:
  12783. // Black Axe
  12784. Axe = 4;
  12785. break;
  12786.  
  12787. case 1355:
  12788. // Mithril Axe
  12789. Axe = 5;
  12790. break;
  12791.  
  12792. case 1357:
  12793. // Adamant Axe
  12794. Axe = 6;
  12795. break;
  12796.  
  12797. case 1359:
  12798. // Rune Axe
  12799. Axe = 7;
  12800. break;
  12801.  
  12802. /* case X: //Dragon Axe
  12803. Axe = 8; break;*/
  12804. }
  12805. /*
  12806. if (Axe > 0) {
  12807. OriginalWeapon = Hand;
  12808. OriginalShield = Shield;
  12809. playerEquipment[playerShield] = -1;
  12810. return Axe;
  12811. }*/
  12812. if (Axe > 0) {
  12813. //OriginalWeapon = Hand;
  12814. //OriginalShield = Shield;
  12815. //playerEquipment[playerShield] = -1;
  12816. //playerEquipment[playerWeapon] = Bag;
  12817. }
  12818. return Axe;
  12819. }
  12820.  
  12821.  
  12822.  
  12823. public boolean fromTrade(int itemID, int fromSlot, int amount) {
  12824. if (System.currentTimeMillis()-lastButton > 800) {
  12825. lastButton = System.currentTimeMillis();
  12826. } else {
  12827. return false;
  12828. }
  12829. try {
  12830. client other = getClient(trade_reqId);
  12831. if (!inTrade || ! validClient(trade_reqId) || ! canOffer) {
  12832. declineTrade();
  12833. return false;
  12834. }
  12835. if (!Item.itemStackable[itemID] && amount > 1) {
  12836. for (int a = 1; a <= amount; a++) {
  12837. int slot = findItem(itemID, playerItems, playerItemsN);
  12838. if (slot >= 0) {
  12839. fromTrade(itemID, 0, 1);
  12840. }
  12841. }
  12842. }
  12843. boolean found = false;
  12844. for (GameItem item: offeredItems) {
  12845. if (item.id == itemID) {
  12846. if (!item.stackable) {
  12847. offeredItems.remove(item);
  12848. found = true;
  12849. } else {
  12850. if (item.amount > amount) {
  12851. item.amount -= amount;
  12852. found = true;
  12853. } else {
  12854. amount = item.amount;
  12855. found = true;
  12856. offeredItems.remove(item);
  12857. }
  12858. }
  12859. break;
  12860. }
  12861. }
  12862. if (found)
  12863. addItem(itemID, amount);
  12864. tradeConfirmed = false;
  12865. other.tradeConfirmed = false;
  12866. resetItems(3322);
  12867. resetTItems(3415);
  12868. other.resetOTItems(3416);
  12869. sendFrame126("", 3431);
  12870. other.sendFrame126("", 3431);
  12871. } catch (Exception e) {
  12872. e.printStackTrace();
  12873. }
  12874. return true;
  12875. }
  12876.  
  12877. public boolean tradeItem(int itemID, int fromSlot, int amount) {
  12878. if (System.currentTimeMillis()-lastButton > 800) {
  12879. lastButton = System.currentTimeMillis();
  12880. } else {
  12881. return false;
  12882. }
  12883. if (!Item.itemStackable[itemID] && amount > 1) {
  12884. for (int a = 1; a <= amount; a++) {
  12885. int slot = findItem(itemID, playerItems, playerItemsN);
  12886. if (slot >= 0) {
  12887. tradeItem(itemID, slot, 1);
  12888. }
  12889. }
  12890. }
  12891. for (int i = 0; i < noTrade.length; i++) {
  12892. if (itemID == noTrade[i] || itemID == noTrade[i]+1 || premiumItem(itemID)) {
  12893. sendMessage("You can't trade that item");
  12894. declineTrade();
  12895. return false;
  12896. }
  12897. }
  12898. client other = getClient(trade_reqId);
  12899. if (!inTrade || ! validClient(trade_reqId) || ! canOffer) {
  12900. declineTrade();
  12901. return false;
  12902. }
  12903. if (!playerHasItem(itemID, amount)) {
  12904. return false;
  12905. }
  12906. if (Item.itemStackable[itemID] || Item.itemIsNote[itemID]) {
  12907. boolean inTrade = false;
  12908. for (GameItem item: offeredItems) {
  12909. if (item.id == itemID) {
  12910. inTrade = true;
  12911. item.amount += amount;
  12912. break;
  12913. }
  12914. }
  12915. if (!inTrade) {
  12916. offeredItems.add(new GameItem(itemID, amount));
  12917. }
  12918. } else {
  12919. offeredItems.add(new GameItem(itemID, 1));
  12920. }
  12921. deleteItem(itemID, fromSlot, amount);
  12922. resetItems(3322);
  12923. resetTItems(3415);
  12924. other.resetOTItems(3416);
  12925. sendFrame126("", 3431);
  12926. other.sendFrame126("", 3431);
  12927. return true;
  12928. }
  12929.  
  12930. /* Shops*/
  12931. public boolean sellItem(int itemID, int fromSlot, int amount) {
  12932. if (amount > 0 && itemID == (playerItems[fromSlot]-1)) {
  12933. if (server.shopHandler.ShopSModifier[MyShopID] > 1) {
  12934. boolean IsIn = false;
  12935.  
  12936. for (int i = 0; i <= server.shopHandler.ShopItemsStandard[MyShopID]; i++) {
  12937. if (itemID == (server.shopHandler.ShopItems[MyShopID][i]-1)) {
  12938. IsIn = true;
  12939. break;
  12940. }
  12941. }
  12942. if (IsIn == false) {
  12943. sendMessage("You cannot sell "+GetItemName(itemID)+" in this store.");
  12944. return false;
  12945. }
  12946. }
  12947. if (Item.itemSellable[(playerItems[fromSlot]-1)] == false) {
  12948. sendMessage("I cannot sell "+GetItemName(itemID)+".");
  12949. return false;
  12950. }
  12951. if (amount > playerItemsN[fromSlot] && (Item.itemIsNote[(playerItems[fromSlot]-1)] == true || Item.itemStackable[(playerItems[fromSlot]-1)] == true)) {
  12952. amount = playerItemsN[fromSlot];
  12953. } else if (amount > GetXItemsInBag(itemID) && Item.itemIsNote[(playerItems[fromSlot]-1)] == false && Item.itemStackable[(playerItems[fromSlot]-1)] == false) {
  12954. amount = GetXItemsInBag(itemID);
  12955. }
  12956. double ShopValue;
  12957. double TotPrice;
  12958. int TotPrice2;
  12959. int Overstock;
  12960.  
  12961. for (int i = amount; i > 0; i--) {
  12962. TotPrice2 = (int)Math.floor(GetItemShopValue(itemID, 1, fromSlot));
  12963. if (freeSlots() >= 0 && playerHasItem(995) || freeSlots() > 0) {
  12964. if (Item.itemIsNote[itemID] == false) {
  12965. deleteItem(itemID, GetItemSlot(itemID), 1);
  12966. } else {
  12967. deleteItem(itemID, fromSlot, 1);
  12968. }
  12969. addItem(995, TotPrice2);
  12970. addShopItem(itemID, 1);
  12971. } else {
  12972. sendMessage("Not enough space in your inventory.");
  12973. break;
  12974. }
  12975. }
  12976. resetItems(3823);
  12977. resetShop(MyShopID);
  12978. UpdatePlayerShop();
  12979. return true;
  12980. }
  12981. return true;
  12982. }
  12983.  
  12984. public boolean buyItem(int itemID, int fromSlot, int amount) {
  12985. if (amount > 0 && itemID == (server.shopHandler.ShopItems[MyShopID][fromSlot]-1)) {
  12986. if (amount > server.shopHandler.ShopItemsN[MyShopID][fromSlot]) {
  12987. amount = server.shopHandler.ShopItemsN[MyShopID][fromSlot];
  12988. }
  12989. double ShopValue;
  12990. double TotPrice;
  12991. int TotPrice2;
  12992. int Overstock;
  12993. int Slot = 0;
  12994. if (!canUse(itemID)) {
  12995. sendMessage("You must be a premium member to buy this item");
  12996. sendMessage("Visit zernix.com to subscribe");
  12997. return false;
  12998. }
  12999. for (int i = amount; i > 0; i--) {
  13000. TotPrice2 = (int)Math.floor(GetItemShopValue(itemID, 0, fromSlot));
  13001. Slot = GetItemSlot(995);
  13002. if (Slot == -1) {
  13003. sendMessage("You don't have enough coins.");
  13004. break;
  13005. }
  13006. if (playerItemsN[Slot] >= TotPrice2) {
  13007. if (freeSlots() > 0) {
  13008. deleteItem(995, GetItemSlot(995), TotPrice2);
  13009. addItem(itemID, 1);
  13010. server.shopHandler.ShopItemsN[MyShopID][fromSlot] -= 1;
  13011. server.shopHandler.ShopItemsDelay[MyShopID][fromSlot] = 0;
  13012. if ((fromSlot+1) > server.shopHandler.ShopItemsStandard[MyShopID]) {
  13013. server.shopHandler.ShopItems[MyShopID][fromSlot] = 0;
  13014. }
  13015. } else {
  13016. sendMessage("Not enough space in your inventory.");
  13017. break;
  13018. }
  13019. } else {
  13020. sendMessage("You don't have enough coins.");
  13021. break;
  13022. }
  13023. }
  13024. resetItems(3823);
  13025. resetShop(MyShopID);
  13026. UpdatePlayerShop();
  13027. return true;
  13028. }
  13029. return false;
  13030. }
  13031.  
  13032. public void UpdatePlayerShop() {
  13033. for (int i = 1; i < PlayerHandler.maxPlayers; i++) {
  13034. if (PlayerHandler.players[i] != null) {
  13035. if (PlayerHandler.players[i].IsShopping == true && PlayerHandler.players[i].MyShopID == MyShopID && i != playerId) {
  13036. PlayerHandler.players[i].UpdateShop = true;
  13037. }
  13038. }
  13039. }
  13040. }
  13041.  
  13042. public boolean addShopItem(int itemID, int amount) {
  13043. boolean Added = false;
  13044.  
  13045. if (amount <= 0) {
  13046. return false;
  13047. }
  13048. if (Item.itemIsNote[itemID] == true) {
  13049. itemID = GetUnnotedItem(itemID);
  13050. }
  13051. for (int i = 0; i < server.shopHandler.ShopItems.length; i++) {
  13052. if ((server.shopHandler.ShopItems[MyShopID][i]-1) == itemID) {
  13053. server.shopHandler.ShopItemsN[MyShopID][i] += amount;
  13054. Added = true;
  13055. }
  13056. }
  13057. if (Added == false) {
  13058. for (int i = 0; i < server.shopHandler.ShopItems.length; i++) {
  13059. if (server.shopHandler.ShopItems[MyShopID][i] == 0) {
  13060. server.shopHandler.ShopItems[MyShopID][i] = (itemID+1);
  13061. server.shopHandler.ShopItemsN[MyShopID][i] = amount;
  13062. server.shopHandler.ShopItemsDelay[MyShopID][i] = 0;
  13063. break;
  13064. }
  13065. }
  13066. }
  13067. return true;
  13068. }
  13069. //options talk
  13070. public void o2(boolean send, String option, String option1, String option2)
  13071. {
  13072. sendFrame171(1, 2465);
  13073. sendFrame171(0, 2468);
  13074. sendFrame126(option, 2460);
  13075. sendFrame126(option1, 2461);
  13076. sendFrame126(option2, 2462);
  13077. sendFrame164(2459);
  13078. NpcDialogueSend = send;
  13079. }
  13080. public void o3(boolean send, String option, String option1, String option2, String option3)
  13081. {
  13082. sendFrame171(1, 2476);
  13083. sendFrame171(0, 2479);
  13084. sendFrame126(option, 2470);
  13085. sendFrame126(option1, 2471);
  13086. sendFrame126(option2, 2472);
  13087. sendFrame126(option3, 2473);
  13088. sendFrame164(2469);
  13089. NpcDialogueSend = send;
  13090. }
  13091. public void o4(boolean send, String option, String option1, String option2, String option3, String option4)
  13092. {
  13093. sendFrame171(1, 2488);
  13094. sendFrame171(0, 2491);
  13095. sendFrame126(option, 2481);
  13096. sendFrame126(option1, 2481);
  13097. sendFrame126(option2, 2482);
  13098. sendFrame126(option3, 2483);
  13099. sendFrame126(option4, 2484);
  13100. sendFrame164(2480);
  13101. NpcDialogueSend = send;
  13102. }
  13103. public void o5(boolean send, String option, String option1, String option2, String option3, String option4, String option5)
  13104. {
  13105. sendFrame171(1, 2501);
  13106. sendFrame171(0, 2504);
  13107. sendFrame126(option, 2493);
  13108. sendFrame126(option1, 2494);
  13109. sendFrame126(option2, 2495);
  13110. sendFrame126(option3, 2496);
  13111. sendFrame126(option4, 2497);
  13112. sendFrame126(option5, 2498);
  13113. sendFrame164(2492);
  13114. NpcDialogueSend = send;
  13115. }
  13116. public void nt1(boolean send, int npc, int emote, String text)
  13117. {
  13118. sendFrame200(4883, emote);
  13119. sendFrame126(GetNpcName(npc), 4884);
  13120. sendFrame126(text, 4885);
  13121. sendFrame126("Click here to continue", 4886);
  13122. sendFrame75(npc, 4883);
  13123. sendFrame164(4882);
  13124. NpcDialogueSend = send;
  13125. }
  13126. public void nt2(boolean send, int npc, int emote, String text, String text2)
  13127. {
  13128. sendFrame200(4888, emote);
  13129. sendFrame126(GetNpcName(npc), 4889);
  13130. sendFrame126(text, 4890);
  13131. sendFrame126(text2, 4891);
  13132. sendFrame126("Click here to continue", 4892);
  13133. sendFrame75(npc, 4888);
  13134. sendFrame164(4887);
  13135. NpcDialogueSend = send;
  13136. }
  13137. public void nt3(boolean send, int npc, int emote, String text, String text2, String text3)
  13138. {
  13139. sendFrame200(4894, emote);
  13140. sendFrame126(GetNpcName(npc), 4895);
  13141. sendFrame126(text, 4896);
  13142. sendFrame126(text2, 4897);
  13143. sendFrame126(text3, 4898);
  13144. sendFrame126("Click here to continue", 4899);
  13145. sendFrame75(npc, 4894);
  13146. sendFrame164(4893);
  13147. NpcDialogueSend = send;
  13148. }
  13149. public void nt4(boolean send, int npc, int emote, String text, String text2, String text3, String text4)
  13150. {
  13151. sendFrame200(4901, emote);
  13152. sendFrame126(GetNpcName(npc), 4902);
  13153. sendFrame126(text, 4903);
  13154. sendFrame126(text2, 4904);
  13155. sendFrame126(text3, 4905);
  13156. sendFrame126(text4, 4906);
  13157. sendFrame126("Click here to continue", 4907);
  13158. sendFrame75(npc, 4901);
  13159. sendFrame164(4900);
  13160. NpcDialogueSend = send;
  13161. }
  13162. public void pt1(boolean send, int emote, String text)
  13163. {
  13164. sendFrame200(969, emote);
  13165. sendFrame126(playerName, 970);
  13166. sendFrame126(text, 971);
  13167. sendFrame126("Click here to continue", 972);
  13168. sendFrame185(969);
  13169. sendFrame164(968);
  13170. NpcDialogueSend = send;
  13171. }
  13172. public void pt2(boolean send, int emote, String text, String text2)
  13173. {
  13174. sendFrame200(974, emote);
  13175. sendFrame126(playerName, 975);
  13176. sendFrame126(text, 976);
  13177. sendFrame126(text2, 977);
  13178. sendFrame126("Click here to continue", 978);
  13179. sendFrame185(974);
  13180. sendFrame164(973);
  13181. NpcDialogueSend = send;
  13182. }
  13183. public void pt3(boolean send, int emote, String text, String text2, String text3)
  13184. {
  13185. sendFrame200(980, emote);
  13186. sendFrame126(playerName, 981);
  13187. sendFrame126(text, 982);
  13188. sendFrame126(text2, 983);
  13189. sendFrame126(text3, 984);
  13190. sendFrame126("Click here to continue", 985);
  13191. sendFrame185(980);
  13192. sendFrame164(979);
  13193. NpcDialogueSend = send;
  13194. }
  13195. public void pt4(boolean send, int emote, String text, String text2, String text3, String text4)
  13196. {
  13197. sendFrame200(987, emote);
  13198. sendFrame126(playerName, 988);
  13199. sendFrame126(text, 989);
  13200. sendFrame126(text2, 990);
  13201. sendFrame126(text3, 991);
  13202. sendFrame126(text4, 992);
  13203. sendFrame126("Click here to continue", 993);
  13204. sendFrame185(987);
  13205. sendFrame164(986);
  13206. NpcDialogueSend = send;
  13207. }
  13208.  
  13209. //end options talk
  13210.  
  13211.  
  13212. /* NPC Talking*/
  13213. public void UpdateNPCChat() {
  13214.  
  13215. /* sendFrame126("", 4902);
  13216. sendFrame126("", 4903);
  13217. sendFrame126("", 4904);
  13218. sendFrame126("", 4905);
  13219. sendFrame126("", 4906);*/
  13220. sendFrame126("", 976);
  13221. switch (NpcDialogue) {
  13222.  
  13223. case 3:
  13224. nt1(true, 553, 600, "Do you want to buy some runes?");
  13225. break;
  13226.  
  13227. case 4:
  13228. o2(true, "Want to see the shop?", "Yes please!", "No thank you!");
  13229. break;
  13230.  
  13231. case 5:
  13232. pt1(true, 600, "Oh it's a rune shop. No thank you, then.");
  13233. break;
  13234.  
  13235. case 6:
  13236. nt2(false, 553, 593, "Well, if you find somone who want some runes", "Could you please send them here.");
  13237. break;
  13238. case 7:
  13239. nt2(true, 2, 597, "Well, if this was a banana,", "then I'm god.");
  13240. break;
  13241. case 8:
  13242. pt1(true, 600, "Eh.. You dress stupid and I can see why now.");
  13243. break;
  13244. case 9:
  13245. nt2(false, 2, 592, "Don't be mean!", "");
  13246. break;
  13247.  
  13248.  
  13249. case 10:
  13250. nt1(true, 2291, 600, "Would you like to go to the Desert Mining Camp?");
  13251. break;
  13252.  
  13253. case 11:
  13254. o2(true, "Want to fly to the Desert Camp?", "Yes please! (2500gp)", "No thank you!");
  13255. break;
  13256.  
  13257. case 12:
  13258. pt1(true, 600, "Oh not right now thank-you. ");
  13259. break;
  13260. }
  13261. }
  13262.  
  13263. /* OBJECTS*/
  13264. public int GetObject(int X, int Y, int ObjectID) {
  13265. for (int i = 0; i < server.objectHandler.MaxObjects; i++) {
  13266. if (server.objectHandler.ObjectID[i] > -1) {
  13267. if (X == server.objectHandler.ObjectX[i] && Y == server.objectHandler.ObjectY[i]) {
  13268. if (ObjectID != -1) {
  13269. if (ObjectID == server.objectHandler.ObjectID[i]) {
  13270. return i;
  13271. }
  13272. } else {
  13273. return i;
  13274. }
  13275. }
  13276. }
  13277. }
  13278. return -1;
  13279. }
  13280.  
  13281. public void ChangeDoor(int ArrayID) {
  13282. int objectID = server.objectHandler.ObjectOriID[ArrayID];
  13283. int objectX = server.objectHandler.ObjectX[ArrayID];
  13284. int objectY = server.objectHandler.ObjectY[ArrayID];
  13285. int Face = server.objectHandler.ObjectFace[ArrayID];
  13286. int Type = server.objectHandler.ObjectType[ArrayID];
  13287.  
  13288. ReplaceObject(objectX, objectY, -1, -1, 0);
  13289. switch (Type) {
  13290. case 1:
  13291. ReplaceObject(objectX, (objectY+1), objectID, Face, 0);
  13292. server.objectHandler.ObjectType[ArrayID] = 2;
  13293. break;
  13294.  
  13295. case 2:
  13296. ReplaceObject(objectX, (objectY-1), objectID, Face, 0);
  13297. server.objectHandler.ObjectType[ArrayID] = 1;
  13298. break;
  13299.  
  13300. case 3:
  13301. ReplaceObject((objectX+1), objectY, objectID, Face, 0);
  13302. server.objectHandler.ObjectType[ArrayID] = 4;
  13303. break;
  13304.  
  13305. case 4:
  13306. ReplaceObject((objectX-1), objectY, objectID, Face, 0);
  13307. server.objectHandler.ObjectType[ArrayID] = 3;
  13308. break;
  13309. }
  13310. }
  13311.  
  13312. /* ITEMS*/
  13313. public int GetGroundItemID(int ItemID, int ItemX, int ItemY, int ItemH) {
  13314. for (int i = 0; i < server.itemHandler.DropItemCount; i++) {
  13315. if (server.itemHandler.DroppedItemsID[i] > -1) {
  13316. 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) {
  13317. return i;
  13318. }
  13319. }
  13320. }
  13321. return -1;
  13322. }
  13323.  
  13324. /* Equipment level checking*/
  13325. public int GetCLAttack(int ItemID) {
  13326. if (ItemID == -1) {
  13327. return 1;
  13328. }
  13329. String ItemName = GetItemName(ItemID);
  13330. String ItemName2 = ItemName.replaceAll("Bronze", "");
  13331.  
  13332. ItemName2 = ItemName2.replaceAll("Iron", "");
  13333. ItemName2 = ItemName2.replaceAll("Steel", "");
  13334. ItemName2 = ItemName2.replaceAll("Black", "");
  13335. ItemName2 = ItemName2.replaceAll("Mithril", "");
  13336. ItemName2 = ItemName2.replaceAll("Adamant", "");
  13337. ItemName2 = ItemName2.replaceAll("Rune", "");
  13338. ItemName2 = ItemName2.replaceAll("Granite", "");
  13339. ItemName2 = ItemName2.replaceAll("Dragon", "");
  13340. ItemName2 = ItemName2.replaceAll("Crystal", "");
  13341. ItemName2 = ItemName2.trim();
  13342. 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")) {
  13343. if (ItemName.startsWith("Bronze")) {
  13344. return 1;
  13345. } else if (ItemName.startsWith("Iron")) {
  13346. return 1;
  13347. } else if (ItemName.startsWith("Steel")) {
  13348. return 1;
  13349. } else if (ItemName.startsWith("Black")) {
  13350. return 10;
  13351. } else if (ItemName.startsWith("Mithril")) {
  13352. return 20;
  13353. } else if (ItemName.startsWith("Adamant")) {
  13354. return 30;
  13355. } else if (ItemName.startsWith("Rune")) {
  13356. return 40;
  13357. } else if (ItemName.startsWith("Dragon")) {
  13358. return 60;
  13359. }
  13360. } else if (ItemName.startsWith("Granite")) {
  13361. return 80;
  13362. } 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")) {
  13363. return 1;
  13364. }
  13365. return 1;
  13366. }
  13367.  
  13368. public int GetCLDefence(int ItemID) {
  13369. if (ItemID == -1) {
  13370. return 1;
  13371. }
  13372. String ItemName = GetItemName(ItemID);
  13373. String ItemName2 = ItemName.replaceAll("Bronze", "");
  13374.  
  13375. ItemName2 = ItemName2.replaceAll("Iron", "");
  13376. ItemName2 = ItemName2.replaceAll("Steel", "");
  13377. ItemName2 = ItemName2.replaceAll("Black", "");
  13378. ItemName2 = ItemName2.replaceAll("Mithril", "");
  13379. ItemName2 = ItemName2.replaceAll("Adamant", "");
  13380. ItemName2 = ItemName2.replaceAll("Rune", "");
  13381. ItemName2 = ItemName2.replaceAll("Granite", "");
  13382. ItemName2 = ItemName2.replaceAll("Dragon", "");
  13383. ItemName2 = ItemName2.replaceAll("Crystal", "");
  13384. ItemName2 = ItemName2.trim();
  13385. 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")) {
  13386. // It's a weapon, weapons don't required defence !
  13387. } else if (ItemName.startsWith("Ahrims") || ItemName.startsWith("Karil") || ItemName.startsWith("Torag") || ItemName.startsWith("Verac") || ItemName.endsWith("Guthan") || ItemName.endsWith("Dharok")) {
  13388. if (ItemName.endsWith("staff") || ItemName.endsWith("crossbow") || ItemName.endsWith("hammers") || ItemName.endsWith("flail") || ItemName.endsWith("warspear") || ItemName.endsWith("greataxe")) {
  13389. // No defence for the barrow weapons
  13390. } else {
  13391. return 1;
  13392. }
  13393. } else {
  13394. if (ItemName.startsWith("Bronze")) {
  13395. return 1;
  13396. } else if (ItemName.startsWith("Iron")) {
  13397. return 1;
  13398. } else if (ItemName.startsWith("Steel")) {
  13399. return 1;
  13400. } else if (ItemName.startsWith("Black")) {
  13401. return 1;
  13402. } else if (ItemName.startsWith("Mithril")) {
  13403. return 1;
  13404. } else if (ItemName.startsWith("Adamant")) {
  13405. return 1;
  13406. } else if (ItemName.startsWith("Rune")) {
  13407. return 1;
  13408. } else if (ItemName.startsWith("Dragon")) {
  13409. return 1;
  13410. }
  13411. }
  13412. return 1;
  13413. }
  13414.  
  13415. public int GetCLStrength(int ItemID) {
  13416. if (ItemID == -1) {
  13417. return 1;
  13418. }
  13419. String ItemName = GetItemName(ItemID);
  13420.  
  13421. if (ItemName.startsWith("Granite")) {
  13422. return 80;
  13423. } else if (ItemName.startsWith("Torags hammers") || ItemName.endsWith("Dharoks greataxe")) {
  13424. return 1;
  13425. }
  13426. return 1;
  13427. }
  13428.  
  13429. public int GetCLMagic(int ItemID) {
  13430. if (ItemID == -1) {
  13431. return 1;
  13432. }
  13433. String ItemName = GetItemName(ItemID);
  13434.  
  13435. if (ItemName.startsWith("Ahrim")) {
  13436. return 1;
  13437. }
  13438. return 1;
  13439. }
  13440.  
  13441. public int GetCLRanged(int ItemID) {
  13442. if (ItemID == -1) {
  13443. return 1;
  13444. }
  13445. String ItemName = GetItemName(ItemID);
  13446.  
  13447. if (ItemName.startsWith("Karil")) {
  13448. return 1;
  13449. }
  13450. return 1;
  13451. }
  13452.  
  13453. public int GetWorld(int PlayerID) {
  13454. String Server = PlayerHandler.players[PlayerID].playerServer;
  13455.  
  13456. if (Server.equals("rs2.servegame.org") || Server.equals("localhost")) {
  13457. return 1;
  13458. } else if (Server.equals("dodian.com")) {
  13459. return 2;
  13460. } else {
  13461. println_debug("Invalid Server: "+Server);
  13462. return 1; //0; friendlist fix-bakatool
  13463. }
  13464. }
  13465. public void killedPlayer(String name, int combat) {
  13466. int diff = Math.abs(combatLevel-combat);
  13467. String diffString = "";
  13468. if (combatLevel > combat) {
  13469. diffString = "-"+diff;
  13470. } else {
  13471. diffString = "+"+diff;
  13472. }
  13473. sendMessage("You have defeated "+name+"("+diffString+")"+"!");
  13474. if (diff > 7 && combat > combatLevel) {
  13475. sendMessage("You gain double experience!");
  13476. addSkillXP(20000, 18);
  13477. }
  13478. if (diff <= 7 && diff >= 0) {
  13479. sendMessage("You gain regular experience");
  13480. addSkillXP(10000, 18);
  13481. }
  13482. if (diff > 7 && combatLevel > combat) {
  13483. sendMessage("You gain half experience");
  13484. addSkillXP(5000, 18);
  13485. }
  13486. }
  13487. public int freeSpace(int itemid, boolean stackable) {
  13488. for (int i = 0; i < playerItems.length; i++) {
  13489. if (playerItems[i] == itemid && stackable) {
  13490. return i;
  13491. }
  13492. if (playerItems[i] == -1 || playerItems[i] == 0) {
  13493. return i;
  13494. }
  13495. }
  13496. return -1;
  13497. }
  13498. public void setInterfaceWalkable(int ID) {
  13499. outStream.createFrame(208);
  13500. outStream.writeWordBigEndian_dup(ID);
  13501. flushOutStream();
  13502. }
  13503. public void RefreshDuelRules() {
  13504. for (int i = 0; i < duelLine.length; i++) {
  13505. if (duelRule[i]) {
  13506. sendQuest("@red@"+duelNames[i], duelLine[i]);
  13507. } else {
  13508. sendQuest("@cya@"+duelNames[i], duelLine[i]);
  13509. }
  13510. }
  13511. }
  13512.  
  13513. public void LogDuel(String otherName) {
  13514. for (int i = 0; i < otherDuelItems.length; i++) {
  13515. BufferedWriter bw = null;
  13516.  
  13517. try {
  13518. bw = new BufferedWriter(new FileWriter("logs/duels.txt", true));
  13519. bw.write(playerName+" wins item: "+(otherDuelItems[i]-1)+" amount: "+otherDuelItemsN[i]+" from "+otherName);
  13520. bw.newLine();
  13521. bw.flush();
  13522. } catch (IOException ioe) {
  13523. ioe.printStackTrace();
  13524. } finally {
  13525. if (bw != null)
  13526. try {
  13527. bw.close();
  13528. } catch (IOException ioe2) {
  13529. sendMessage("Error logging duel!");
  13530. }
  13531. }
  13532. }
  13533. }
  13534. public void DuelVictory() {
  13535. client other = getClient(duel_with);
  13536. if (validClient(duel_with)) {
  13537. sendMessage("You have defeated "+other.playerName+"!");
  13538. sendQuest(""+other.combat, 6839);
  13539. sendQuest(other.playerName, 6840);
  13540. wonDuel = true;
  13541. }
  13542. boolean stake = false;
  13543. for (GameItem item: offeredItems) {
  13544. if (item.id > 0 && item.amount > 0) {
  13545. stake = true;
  13546. }
  13547. }
  13548. for (GameItem item: otherOfferedItems) {
  13549. if (item.id > 0 && item.amount > 0) {
  13550. stake = true;
  13551. }
  13552. }
  13553. if (stake) {
  13554. itemsToVScreen_old();
  13555. other.resetDuel();
  13556. showInterface(6733);
  13557. } else {
  13558. resetDuel();
  13559. other.resetDuel();
  13560. // duelStatus = -1;
  13561. }
  13562. }
  13563.  
  13564. public boolean DeclineDuel() {
  13565. declineDuel();
  13566. return true;
  13567. }
  13568.  
  13569. public void RemoveAllDuelItems() {
  13570. for (int i = 0; i < duelItems.length; i++) {
  13571. if (duelItems[i] > 0) {
  13572. fromDuel((duelItems[i]-1), i, duelItemsN[i]);
  13573. }
  13574. }
  13575. }
  13576.  
  13577.  
  13578. public int GetDuelItemSlots() {
  13579. int Slots = 0;
  13580. for (int i = 0; i < duelItems.length; i++) {
  13581. if (duelItems[i] > 0) {
  13582. Slots++;
  13583. }
  13584. }
  13585. for (int i = 0; i < otherDuelItems.length; i++) {
  13586. if (otherDuelItems[i] > 0) {
  13587. Slots++;
  13588. }
  13589. }
  13590. return Slots;
  13591. }
  13592. public void itemsToVScreen_old() {
  13593. outStream.createFrameVarSizeWord(53);
  13594. outStream.writeWord(6822);
  13595. outStream.writeWord(otherOfferedItems.toArray().length);
  13596. for (GameItem item: otherOfferedItems) {
  13597. if (item.amount > 254) {
  13598. outStream.writeByte(255); // item's stack count. if over 254, write byte 255
  13599. outStream.writeDWord_v2(item.amount); // and then the real value with writeDWord_v2
  13600. } else {
  13601. outStream.writeByte(item.amount);
  13602. }
  13603. if (item.id > 20000 || item.id < 0) {
  13604. item.id = 20000;
  13605. }
  13606. outStream.writeWordBigEndianA(item.id+1); //item id
  13607. }
  13608. outStream.endFrameVarSizeWord();
  13609. }
  13610. public void itemsToVScreen(int x, int y) {
  13611. Player p = handler.players[duelWith];
  13612. if (p != null && p.playerId == playerId)
  13613. return;
  13614. for (int i = 0; i < otherDuelItems.length; i++) {
  13615. if (otherDuelItems[i] > 0 && otherDuelItemsN[i] > 0) {
  13616. if (Item.itemStackable[otherDuelItems[i]-1]) {
  13617. ItemHandler.addItem(otherDuelItems[i]-1, enemyX, enemyY, otherDuelItemsN[i], playerId, false);
  13618. } else {
  13619. int amount = otherDuelItemsN[i];
  13620. for (int a = 1; a <= amount; a++) {
  13621. ItemHandler.addItem(otherDuelItems[i]-1, enemyX, enemyY, 1, playerId, false);
  13622. }
  13623. }
  13624. }
  13625.  
  13626. }
  13627. for (int i1 = 0; i1 < duelItems.length; i1++) {
  13628. if (duelItems[i] > 0 && duelItemsN[i] > 0)
  13629. addItem(duelItems[i1]-1, duelItemsN[i1]);
  13630. }
  13631. //resetDuel();
  13632. }
  13633.  
  13634. public void refreshDuelScreen() {
  13635. client other = getClient(duel_with);
  13636. if (!validClient(duel_with))
  13637. return;
  13638. outStream.createFrameVarSizeWord(53);
  13639. outStream.writeWord(6669);
  13640. outStream.writeWord(offeredItems.toArray().length);
  13641. int current = 0;
  13642. for (GameItem item: offeredItems) {
  13643. if (item.amount > 254) {
  13644. outStream.writeByte(255); // item's stack count. if over 254, write byte 255
  13645. outStream.writeDWord_v2(item.amount); // and then the real value with writeDWord_v2
  13646. } else {
  13647. outStream.writeByte(item.amount);
  13648. }
  13649. if (item.id > 20000 || item.id < 0) {
  13650. item.id = 20000;
  13651. }
  13652. outStream.writeWordBigEndianA(item.id+1); //item id
  13653. current++;
  13654. }
  13655. if (current < 27) {
  13656. for (int i = current; i < 28; i++) {
  13657. outStream.writeByte(1);
  13658. outStream.writeWordBigEndianA(-1);
  13659. }
  13660. }
  13661. outStream.endFrameVarSizeWord();
  13662. outStream.createFrameVarSizeWord(53);
  13663. outStream.writeWord(6670);
  13664. outStream.writeWord(other.offeredItems.toArray().length);
  13665. current = 0;
  13666. for (GameItem item: other.offeredItems) {
  13667. if (item.amount > 254) {
  13668. outStream.writeByte(255); // item's stack count. if over 254, write byte 255
  13669. outStream.writeDWord_v2(item.amount); // and then the real value with writeDWord_v2
  13670. } else {
  13671. outStream.writeByte(item.amount);
  13672. }
  13673. if (item.id > 20000 || item.id < 0) {
  13674. item.id = 20000;
  13675. }
  13676. outStream.writeWordBigEndianA(item.id+1); //item id
  13677. current++;
  13678. }
  13679. if (current < 27) {
  13680. for (int i = current; i < 28; i++) {
  13681. outStream.writeByte(1);
  13682. outStream.writeWordBigEndianA(-1);
  13683. }
  13684. }
  13685. outStream.endFrameVarSizeWord();
  13686. }
  13687. public boolean stakeItem(int itemID, int fromSlot, int amount) {
  13688. if (playerRights == 0 || playerRights <= 1) {
  13689. if (System.currentTimeMillis() - lastButton < 2000) {
  13690. return false;
  13691. }
  13692. }
  13693. lastButton = System.currentTimeMillis();
  13694. if (!Item.itemStackable[itemID] && !Item.itemIsNote[itemID]
  13695. && (amount > 1)) {
  13696. for (int a = 1; a <= amount; a++) {
  13697. int slot = findItem(itemID, playerItems, playerItemsN);
  13698. if (slot >= 0) {
  13699. stakeItem(itemID, slot, 1);
  13700. }
  13701. }
  13702. }
  13703. for (int element : noTrade) {
  13704. if ((itemID == element) || (itemID == element + 1)) {
  13705. sendMessage("You can't trade that item");
  13706. // declineDuel();
  13707. return false;
  13708. }
  13709. }
  13710. client other = getClient(duel_with);
  13711. if (!inDuel || !validClient(duel_with)) {
  13712. declineDuel();
  13713. return false;
  13714. }
  13715. if (!canOffer) {
  13716. return false;
  13717. }
  13718. if (!playerHasItem(itemID, amount)) {
  13719. return false;
  13720. }
  13721. if (Item.itemStackable[itemID] || Item.itemIsNote[itemID]) {
  13722. boolean inTrade = false;
  13723. for (GameItem item : offeredItems) {
  13724. if (item.id == itemID) {
  13725. inTrade = true;
  13726. item.amount += amount;
  13727. break;
  13728. }
  13729. }
  13730. if (!inTrade) {
  13731. offeredItems.add(new GameItem(itemID, amount));
  13732. }
  13733. } else {
  13734. offeredItems.add(new GameItem(itemID, 1));
  13735. }
  13736. deleteItem(itemID, fromSlot, amount);
  13737. resetItems(3214);
  13738. resetItems(3322);
  13739. other.resetItems(3214);
  13740. other.resetItems(3322);
  13741. refreshDuelScreen();
  13742. other.refreshDuelScreen();
  13743. sendFrame126("", 6684);
  13744. other.sendFrame126("", 6684);
  13745. return true;
  13746. }
  13747.  
  13748. /*public boolean stakeItem2(int itemID, int fromSlot, int amount) {
  13749. if(!Item.itemStackable[itemID] && amount > 1){
  13750. for(int a = 1; a <= amount; a++){
  13751. int slot = findItem(itemID, playerItems, playerItemsN);
  13752. if(slot >= 0){
  13753. tradeItem(itemID, slot, 1);
  13754. }
  13755. }
  13756. }
  13757. for(int i = 0; i < noTrade.length; i++){
  13758. if(itemID == noTrade[i] || itemID == noTrade[i] + 1 || premiumItem(itemID)){
  13759. sendMessage("You can't trade that item");
  13760. declineTrade();
  13761. return false;
  13762. }
  13763. }
  13764. client other = getClient(duel_with);
  13765. if (!inDuel || !validClient(duel_with) || !canOffer){
  13766. declineDuel();
  13767. return false;
  13768. }
  13769. if(!playerHasItem(itemID, amount)){
  13770. return false;
  13771. }
  13772. if(Item.itemStackable[itemID])
  13773. offeredItems.add(new GameItem(itemID, amount));
  13774. else
  13775. offeredItems.add(new GameItem(itemID, 1));
  13776. deleteItem(itemID, fromSlot, amount);
  13777. resetItems(3214);
  13778. duelz.resetItems(3214);
  13779. resetItems(3322);
  13780. refreshDuelScreen();
  13781. duelz.resetItems(3322);
  13782. duelz.refreshDuelScreen();
  13783. duelz.sendFrame126("", 6684);
  13784. return false;
  13785. }*/
  13786.  
  13787. public boolean fromDuel(int itemID, int fromSlot, int amount) {
  13788. if (System.currentTimeMillis()-lastButton < 800) {
  13789. return false;
  13790. }
  13791. lastButton = System.currentTimeMillis();
  13792. client other = getClient(duel_with);
  13793. if (!inDuel || ! validClient(duel_with) || ! canOffer) {
  13794. declineDuel();
  13795. return false;
  13796. }
  13797. if (!Item.itemStackable[itemID] && amount > 1) {
  13798. for (int a = 1; a <= amount; a++) {
  13799. int slot = findItem(itemID, playerItems, playerItemsN);
  13800. if (slot >= 0) {
  13801. fromDuel(itemID, 0, 1);
  13802. }
  13803. }
  13804. }
  13805. boolean found = false;
  13806. for (GameItem item: offeredItems) {
  13807. if (item.id == itemID) {
  13808. if (!item.stackable) {
  13809. offeredItems.remove(item);
  13810. found = true;
  13811. } else {
  13812. if (item.amount > amount) {
  13813. item.amount -= amount;
  13814. found = true;
  13815. } else {
  13816. amount = item.amount;
  13817. found = true;
  13818. offeredItems.remove(item);
  13819. }
  13820. }
  13821. break;
  13822. }
  13823. }
  13824. if (found)
  13825. addItem(itemID, amount);
  13826. duelConfirmed = false;
  13827. other.duelConfirmed = false;
  13828. resetItems(3214);
  13829. other.resetItems(3214);
  13830. resetItems(3322);
  13831. other.resetItems(3322);
  13832. refreshDuelScreen();
  13833. other.refreshDuelScreen();
  13834. other.sendFrame126("", 6684);
  13835.  
  13836. return true;
  13837. }
  13838.  
  13839. public void frame1() {
  13840. // cancels all player and npc emotes within area!
  13841. outStream.createFrame(1);
  13842. updateRequired = true;
  13843. appearanceUpdateRequired = true;
  13844. }
  13845. public void resetKeepItem() {
  13846. }
  13847. public int randomItem(int[]array) {
  13848. int len = array.length;
  13849. int ran = misc.random(len);
  13850. return array[ran];
  13851. }
  13852. public void walkTo_old(int X, int Y) {
  13853. int firstStepX = inStream.readSignedWordBigEndianA();
  13854. int tmpFSX = X;
  13855. X -= mapRegionX*8;
  13856. for (i = 1; i < newWalkCmdSteps; i++) {
  13857. newWalkCmdX[i] = inStream.readSignedByte();
  13858. newWalkCmdY[i] = inStream.readSignedByte();
  13859. tmpNWCX[i] = newWalkCmdX[i];
  13860. tmpNWCY[i] = newWalkCmdY[i];
  13861. }
  13862. newWalkCmdX[0] = newWalkCmdY[0] = tmpNWCX[0] = tmpNWCY[0] = 0;
  13863. int firstStepY = inStream.readSignedWordBigEndian();
  13864. int tmpFSY = Y;
  13865. Y -= mapRegionY*8;
  13866. newWalkCmdIsRunning = inStream.readSignedByteC() == 1;
  13867. for (i = 0; i < newWalkCmdSteps; i++) {
  13868. newWalkCmdX[i] += X;
  13869. newWalkCmdY[i] += Y;
  13870. }
  13871. println_debug("Walking to X:"+X+" Y:"+Y);
  13872. }
  13873. public void walkTo(int x, int y) {
  13874. newWalkCmdX[1] += x;
  13875. newWalkCmdY[1] += y;
  13876. tmpNWCX[1] = newWalkCmdX[i];
  13877. tmpNWCY[1] = newWalkCmdY[i];
  13878. newWalkCmdIsRunning = true;
  13879. }
  13880. public int[]getLook() {
  13881. return new int[] {
  13882. 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]
  13883. };
  13884. }
  13885. public void setLook(int[]parts) {
  13886. if (parts.length != 19) {
  13887. println("setLook: Invalid array length!");
  13888. return;
  13889. }
  13890. pGender = parts[0];
  13891. pHead = parts[1];
  13892. pBeard = parts[2];
  13893. pTorso = parts[3];
  13894. pArms = parts[4];
  13895. pHands = parts[5];
  13896. pLegs = parts[6];
  13897. pFeet = parts[7];
  13898. pHairC = parts[8];
  13899. pTorsoC = parts[9];
  13900. pLegsC = parts[10];
  13901. pFeetC = parts[11];
  13902. pSkinC = parts[12];
  13903. playerLook[0] = parts[13];
  13904. playerLook[1] = parts[14];
  13905. playerLook[2] = parts[15];
  13906. playerLook[3] = parts[16];
  13907. playerLook[4] = parts[17];
  13908. playerLook[5] = parts[18];
  13909. apset = true;
  13910. appearanceUpdateRequired = true;
  13911. lookUpdate = true;
  13912. updateRequired = true;
  13913. }
  13914. public int maxRangeHit() {
  13915. int hit = (int)((playerBonus[4]+playerLevel[playerRanged])/12);
  13916. return hit;
  13917. }
  13918. public void buryItem(int item, int slot) {
  13919. if (duelRule[7] && inDuel && duelFight) {
  13920. sendMessage("Food has been disabled for this duel");
  13921. return;
  13922. }
  13923. boolean used = true;
  13924. if (playerHasItem(item)) {
  13925. int[] grimherb = {199,201,203,205,207,209,211,213,215,217,219};
  13926. int[] grimxp = {10,20,30,40,50,60,70,80,90,100,110};
  13927. int[] herblv = {1,15,25,35,45,55,65,75,80,85,90};
  13928. for(int grim = 0; grim < grimherb.length; grim++) {
  13929. if(item == grimherb[grim]) {
  13930. if(playerLevel[playerHerblore] >= herblv[grim]) {
  13931. if(freeSlots() > 0) {
  13932. addItem(grimherb[grim]+50,1);
  13933. deleteItem(grimherb[grim], 1);
  13934. addSkillXP(grimxp[grim], playerHerblore);
  13935. } else {
  13936. ItemHandler.addItem(grimherb[grim]+50, absX, absY, 1, playerId, false);
  13937. sendMessage("Your herb landed on the ground!");
  13938. deleteItem(grimherb[grim], 1);
  13939. addSkillXP(grimxp[grim], playerHerblore);
  13940. }
  13941. } else {
  13942. sendMessage("You need level "+herblv[grim]+" herblore to identify this herb!");
  13943. }
  13944. }
  13945. }
  13946. switch (item) {
  13947. case 526:
  13948. prayerMessage(70);
  13949. break;
  13950. case 532:
  13951. prayerMessage(115);
  13952. break;
  13953. case 3125:
  13954. prayerMessage(300);
  13955. break;
  13956. case 536:
  13957. prayerMessage(450);
  13958. break;
  13959. case 4834:
  13960. prayerMessage(800);
  13961. break;
  13962. case 315:
  13963. setAnimation(0x33D);
  13964. animationReset = System.currentTimeMillis()+750;
  13965. currentHealth += 5;
  13966. if (currentHealth > playerLevel[playerHitpoints])
  13967. currentHealth = playerLevel[playerHitpoints];
  13968. sendMessage("You eat the Shrimps");
  13969. break;
  13970. case 361:
  13971. setAnimation(0x33D);
  13972. animationReset = System.currentTimeMillis()+750;
  13973. currentHealth += 8;
  13974. if (currentHealth > playerLevel[playerHitpoints])
  13975. currentHealth = playerLevel[playerHitpoints];
  13976. sendMessage("You eat the Tuna");
  13977. break;
  13978. case 379:
  13979. setAnimation(0x33D);
  13980. animationReset = System.currentTimeMillis()+750;
  13981. currentHealth += 12;
  13982. if (currentHealth > playerLevel[playerHitpoints])
  13983. currentHealth = playerLevel[playerHitpoints];
  13984. sendMessage("You eat the Lobster");
  13985. break;
  13986. case 373:
  13987. setAnimation(0x33D);
  13988. animationReset = System.currentTimeMillis()+750;
  13989. currentHealth += 16;
  13990. if (currentHealth > playerLevel[playerHitpoints])
  13991. currentHealth = playerLevel[playerHitpoints];
  13992. sendMessage("You eat the Swordfish");
  13993. break;
  13994. case 385:
  13995. setAnimation(0x33D);
  13996. animationReset = System.currentTimeMillis()+750;
  13997. currentHealth += 20;
  13998. if (currentHealth > playerLevel[playerHitpoints])
  13999. currentHealth = playerLevel[playerHitpoints];
  14000. sendMessage("You eat the Shark");
  14001. break;
  14002. default: used = true;
  14003. break;
  14004. case 5074:
  14005. deleteItem(5074, 1);
  14006. addItem(1635, 1);
  14007. break;
  14008. }
  14009. }
  14010. if (used)
  14011. if(item != 4155) {
  14012. deleteItem(item, slot, 1);
  14013. }
  14014. }
  14015. public void prayerMessage(int exp) {
  14016. setAnimation(827);
  14017. animationReset = System.currentTimeMillis()+1000;
  14018. addSkillXP(exp, 5);
  14019. sendMessage("You bury the bones");
  14020. }
  14021. public void updateRating() {
  14022. sendQuest("Pk: "+rating, 3985);
  14023. }
  14024. public void resetPos() {
  14025. teleportToX = 2606;
  14026. teleportToY = 3102;
  14027. sendMessage("You have been teleported back to Yanille");
  14028. }
  14029. public void addClick(int ms) {
  14030. println("adding click "+ms+" (clickindex = "+clickIndex+" )");
  14031. if (clickIndex <= clicks.length-1) {
  14032. clicks[clickIndex] = ms;
  14033. clickIndex++;
  14034. } else {
  14035. int[]precision = new int[50];
  14036. int average = average(clicks);
  14037. for (int i = 0; i < precision.length; i++) {
  14038. precision[i] = Math.abs(clicks[i]-average);
  14039. println("precision["+i+"]="+precision[i]);
  14040. }
  14041. resetArray(clicks);
  14042. clickIndex = 0;
  14043. }
  14044. }
  14045. public int average(int[]array) {
  14046. int total = 0;
  14047. for (int i = 0; i < array.length; i++) {
  14048. total += array[i];
  14049. }
  14050. int average = (int)(total/array.length);
  14051. println("total="+total+", average="+average);
  14052. return average;
  14053. }
  14054. public void resetArray(int[]array) {
  14055. for (int i = 0; i < array.length; i++) {
  14056. array[i] = 0;
  14057. }
  14058. }
  14059. public boolean canUse(int id) {
  14060. if (!premium && premiumItem(id)) {
  14061. return false;
  14062. }
  14063. return true;
  14064. }
  14065. public boolean premiumItem(int id) {
  14066. if (id >= 2583 && id <= 2630 || id == 1037 || id == 1419 || id == 4676) {
  14067. return true;
  14068. }
  14069. return false;
  14070. }
  14071. public void debug(String text) {
  14072. if (debug)
  14073. sendMessage(text);
  14074. }
  14075. public void triggerRandom() {
  14076. if (!randomed) {
  14077. random_skill = misc.random(statName.length)-1;
  14078. if (random_skill < 0)
  14079. random_skill = 0;
  14080. sendQuest("Click the @or1@"+statName[random_skill]+" @yel@button", 2810);
  14081. sendQuest("", 2811);
  14082. sendQuest("", 2831);
  14083. randomed = true;
  14084. showInterface(2808);
  14085. }
  14086. }
  14087. public int findItem(int id, int[]items, int[]amounts) {
  14088. for (int i = 0; i < playerItems.length; i++) {
  14089. if ((items[i]-1) == id && amounts[i] > 0) {
  14090. return i;
  14091. }
  14092. }
  14093. return -1;
  14094. }
  14095. public boolean hasSpace() {
  14096. for (int i = 0; i < playerItems.length; i++) {
  14097. if (playerItems[i] == -1 || playerItems[i] == 0) {
  14098. return true;
  14099. }
  14100. }
  14101. return false;
  14102. }
  14103. public void smelt(int id) {
  14104. setAnimation(0x383);
  14105. smelt_id = id;
  14106. smelting = true;
  14107. int smelt_barId = -1;
  14108. ArrayList < Integer > removed = new ArrayList < Integer > ();
  14109. if (smeltCount < 1) {
  14110. resetAction(true);
  14111. return;
  14112. }
  14113. smeltCount--;
  14114. switch (id) {
  14115. case 2349:
  14116. //bronze
  14117. if (playerHasItem(436) && playerHasItem(438)) {
  14118. smelt_barId = 2349;
  14119. removed.add(436);
  14120. removed.add(438);
  14121. }
  14122. break;
  14123. case 2351:
  14124. //iron ore
  14125. if (playerHasItem(440)) {
  14126. int ran = misc.random(3);
  14127. if (ran == 1 || ran == 2) {
  14128. smelt_barId = 2351;
  14129. removed.add(440);
  14130. }
  14131. else {
  14132. smelt_barId = 0;
  14133. removed.add(440);
  14134. sendMessage("You fail to refine the iron");
  14135. }
  14136. }
  14137. break;
  14138. case 2353:
  14139. if (playerHasItem(440) && playerHasItem(453, 2)) {
  14140. smelt_barId = 2353;
  14141. removed.add(440);
  14142. removed.add(453);
  14143. removed.add(453);
  14144. }
  14145. break;
  14146. case 2359:
  14147. if (playerHasItem(447) && playerHasItem(453, 3)) {
  14148. smelt_barId = 2359;
  14149. removed.add(447);
  14150. removed.add(453);
  14151. removed.add(453);
  14152. removed.add(453);
  14153. }
  14154. break;
  14155. case 2361:
  14156. if (playerHasItem(449) && playerHasItem(453, 4)) {
  14157. smelt_barId = 2361;
  14158. removed.add(449);
  14159. removed.add(453);
  14160. removed.add(453);
  14161. removed.add(453);
  14162. removed.add(453);
  14163. }
  14164. break;
  14165. }
  14166. if (smelt_barId == -1) {
  14167. resetAction();
  14168. return;
  14169. }
  14170. if (true) {
  14171. for (Integer intId: removed) {
  14172. int removeId = intId.intValue();
  14173. deleteItem(removeId, 1);
  14174. }
  14175. if (smelt_barId > 0)
  14176. addItem(smelt_barId, 1);
  14177. } else {
  14178. sendMessage("Your inventory is full!");
  14179. resetAction();
  14180. }
  14181. }
  14182.  
  14183. public void startfishing(int obj) {
  14184. int[] object = {316, 312, 312, 1177, 1176};
  14185. 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}
  14186. long[] fishitime = {6000, 10000, 14000, 18000, 26000};
  14187. String[] fishtext = {"Shrimp", "Tuna", "Lobster", "Swordfish", "Shark"};
  14188. for(int i = 0; i < object.length; i++) {
  14189. if(obj == object[i]) {
  14190. if (playerLevel[playerFishing] >= fish[i][1]) {
  14191. if(playerHasItem(fish[i][2])) {
  14192. if(freeSlots() > 0) {
  14193. if(misc.random(100) <= (fish[i][4])+(playerLevel[playerFishing]/2)) {
  14194. addItem(fish[i][0], 1);
  14195. pEmote = fish[i][5];
  14196. fishing = true;
  14197. addSkillXP(fish[i][6], playerFishing);
  14198. fishspeed = (fishitime[i]);
  14199. sendMessage("You catch a "+fishtext[i]+"");
  14200. fishId = obj;
  14201. } else {
  14202. fishing = true;
  14203. fishspeed = (fishitime[i]);
  14204. pEmote = fish[i][5];
  14205. if(playerRights > 2) {
  14206. sendMessage("You fail to catch a "+fishtext[i]+"");
  14207. }
  14208. }
  14209. } else {
  14210. sendMessage("No space to catch the fish");
  14211. fishId = -1;
  14212. fishing = false;
  14213. resetAnimation();
  14214. }
  14215. } else {
  14216. sendMessage("You need a "+GetItemName(fish[i][2])+" to fish here!");
  14217. fishId = -1;
  14218. }
  14219. } else {
  14220. sendMessage("You need to have level "+fish[i][1]+" fishing to fish here!");
  14221. fishId = -1;
  14222. }}}}
  14223.  
  14224. public void resetAction(boolean full) {
  14225. smelting = false;
  14226. smelt_id = -1;
  14227. shafting = false;
  14228. spinning = false;
  14229. crafting = false;
  14230. fishing = false;
  14231. if (fletching) {
  14232. //playerEquipment[playerWeapon] = originalW;
  14233. //playerEquipment[playerWeapon] = originalS;
  14234. updateRequired = true;
  14235. appearanceUpdateRequired = true;
  14236. }
  14237. fletching = false;
  14238. if (full)
  14239. resetAnimation();
  14240. }
  14241. public void resetAction() {
  14242. resetAction(true);
  14243. }
  14244. public void shaft() {
  14245. closeInterface();
  14246. if (playerHasItem(1511)) {
  14247. if (playerHasItem(-1)) {
  14248. deleteItem(1511, 1);
  14249. addItem(52, 15);
  14250. addSkillXP(30, playerFletching);
  14251. } else {
  14252. sendMessage("Your inventory is full!");
  14253. resetAction();
  14254. }
  14255. } else {
  14256. resetAction();
  14257. }
  14258. }
  14259. public void fletchBow(boolean shortBow, int amount) {
  14260. closeInterface();
  14261. if (shortBow) {
  14262. if (playerLevel[playerFletching] >= shortreq[fletchLog]) {
  14263. fletchId = shortbows[fletchLog];
  14264. fletchExp = shortexp[fletchLog];
  14265. } else {
  14266. sendMessage("Requires fletching "+shortreq[fletchLog]+"!");
  14267. resetAction();
  14268. }
  14269. } else {
  14270. if (playerLevel[playerFletching] >= longreq[fletchLog]) {
  14271. fletchId = longbows[fletchLog];
  14272. fletchExp = longexp[fletchLog];
  14273. } else {
  14274. sendMessage("Requires fletching "+longreq[fletchLog]+"!");
  14275. resetAction();
  14276. }
  14277. }
  14278. fletching = true;
  14279. fletchAmount = amount;
  14280. }
  14281. public void fletchBow() {
  14282. if (fletchAmount < 1) {
  14283. resetAction();
  14284. return;
  14285. }
  14286. fletchAmount--;
  14287. closeInterface();
  14288. IsBanking = false;
  14289. pEmote = 885;
  14290. updateRequired = true;
  14291. appearanceUpdateRequired = true;
  14292. if(playerLevel[playerFletching] >= longreq[fletchLog]) {
  14293. if (playerHasItem(logs[fletchLog])) {
  14294. deleteItem(logs[fletchLog], 1);
  14295. addItem(fletchId, 1);
  14296. addSkillXP(fletchExp, playerFletching);
  14297. }
  14298. } else {
  14299. resetAction();
  14300. }
  14301. }
  14302.  
  14303.  
  14304. public void spinflax() {
  14305. if (playerHasItem(1779)) {
  14306. deleteItem(1779, 1);
  14307. addItem(1777, 1);
  14308. lastAction = System.currentTimeMillis();
  14309. addSkillXP(115, playerCrafting);
  14310. spinflax();
  14311. } else {
  14312. resetAction(true);
  14313. }
  14314. }
  14315. public void spinwool() {
  14316. if (playerHasItem(1737)) {
  14317. deleteItem(1737, 1);
  14318. addItem(1759, 1);
  14319. lastAction = System.currentTimeMillis();
  14320. addSkillXP(55, playerCrafting);
  14321. spinwool();
  14322. } else {
  14323. resetAction(true);
  14324. }
  14325. }
  14326. public void openTan() {
  14327. sendQuest("Regular Leather", 14777);
  14328. sendQuest("50gp", 14785);
  14329. sendQuest("Hard Leather", 14781);
  14330. sendQuest("100gp", 14789);
  14331. sendQuest("", 14778);
  14332. sendQuest("", 14786);
  14333. sendQuest("", 14782);
  14334. sendQuest("", 14790);
  14335. int[]soon = {
  14336. 14779, 14787, 14783, 14791, 14780, 14788, 14784, 14792
  14337. };
  14338. String[]dhide = {
  14339. "Green", "Red", "Blue", "Black"
  14340. };
  14341. String[]cost = {
  14342. "1,000gp", "5,000gp", "2,000gp", "10,000gp"
  14343. };
  14344. int type = 0, i2 = 0;
  14345. for (int i = 0; i < soon.length; i++) {
  14346. if (type == 0) {
  14347. sendQuest(dhide[(int)(i/2)], soon[i]);
  14348. type = 1;
  14349. } else {
  14350. sendQuest(cost[(int)(i/2)], soon[i]);
  14351. type = 0;
  14352. }
  14353. }
  14354. sendFrame246(14769, 250, 1741);
  14355. sendFrame246(14773, 250, 1743);
  14356. sendFrame246(14771, 250, 1753);
  14357. sendFrame246(14772, 250, 1751);
  14358. sendFrame246(14775, 250, 1749);
  14359. sendFrame246(14776, 250, 1747);
  14360. showInterface(14670);
  14361.  
  14362. }
  14363. public void startTan(int amount, int type) {
  14364. int done = 0;
  14365. int[]hide = {
  14366. 1739, 1739, 1753, 1751, 1749, 1747
  14367. };
  14368. int[]leather = {
  14369. 1741, 1743, 1745, 2505, 2507, 2509
  14370. };
  14371. int[]charge = {
  14372. 50, 100, 1000, 2000, 5000, 10000
  14373. };
  14374. while (done < amount && playerHasItem(hide[type]) && playerHasItem(995, charge[type])) {
  14375. deleteItem(hide[type], 1);
  14376. deleteItem(995, charge[type]);
  14377. addItem(leather[type], 1);
  14378. done++;
  14379. }
  14380. int total = done*charge[type];
  14381. /*dMsg = "That's " + total + "gp for " + done + " hides";
  14382. NpcWanneTalk = 10;
  14383. skillX = absX;
  14384. skillY = absY;
  14385. NpcTalkTo = 804;*/
  14386. }
  14387. public void startCraft(int actionbutton) {
  14388. closeInterface();
  14389. int[]buttons = {
  14390. 33187, 33186, 33185, 33190, 33189, 33188, 33193, 33192, 33191, 33196, 33195, 33194, 33199, 33198, 33197, 33202, 33201, 33200, 33205, 33204, 33203
  14391. };
  14392. int[]amounts = {
  14393. 1, 5, 10, 1, 5, 10, 1, 5, 10, 1, 5, 10, 1, 5, 10, 1, 5, 10, 1, 5, 10
  14394. };
  14395. int[]ids = {
  14396. 1129, 1129, 1129, 1059, 1059, 1059, 1061, 1061, 1061, 1063, 1063, 1063, 1095, 1095, 1095, 1169, 1169, 1169, 1167, 1167, 1167
  14397. };
  14398. int[]levels = {
  14399. 14, 14, 14, 1, 1, 1, 7, 7, 7, 11, 11, 11, 18, 18, 18, 38, 38, 38, 9, 9, 9
  14400. };
  14401. int[]exp = {
  14402. 27, 27, 27, 14, 14, 14, 16, 16, 16, 22, 22, 22, 27, 27, 27, 37, 37, 37, 19, 19, 19
  14403. };
  14404. int amount = 0, id = -1;
  14405. int index = 0;
  14406. for (int i = 0; i < buttons.length; i++) {
  14407. if (actionbutton == buttons[i]) {
  14408. amount = amounts[i];
  14409. id = ids[i];
  14410. index = i;
  14411. }
  14412. }
  14413.  
  14414. if (playerLevel[playerCrafting] >= levels[index]) {
  14415. crafting = true;
  14416. cItem = id;
  14417. cAmount = amount;
  14418. cLevel = levels[index];
  14419. cExp = Math.round(exp[index]*9);
  14420. cSelected = 1741;
  14421. } else {
  14422. sendMessage("Requires level "+levels[index]);
  14423. }
  14424. }
  14425. public void craft() {
  14426. if (playerLevel[playerCrafting] < cLevel) {
  14427. sendMessage("You need "+cLevel+" crafting to make a "+GetItemName(cItem));
  14428. resetAction(true);
  14429. return;
  14430. }
  14431. pEmote = 885;
  14432. updateRequired = true;
  14433. appearanceUpdateRequired = true;
  14434. if (playerHasItem(cSelected, 1) && playerHasItem(1734) && cAmount > 0) {
  14435. deleteItem(cSelected, 1);
  14436. deleteItem(1734, 1);
  14437. sendMessage("You make some "+GetItemName(cItem));
  14438. addItem(cItem, 1);
  14439. addSkillXP(cExp, playerCrafting);
  14440. cAmount--;
  14441. if (cAmount < 1)
  14442. resetAction(true);
  14443. } else {
  14444. resetAction(true);
  14445. }
  14446. }
  14447. public void craftMenu(int i) {
  14448. sendQuest("What would you like to make?", 8898);
  14449. sendQuest("Vambraces", 8889);
  14450. sendQuest("Chaps", 8893);
  14451. sendQuest("Body", 8897);
  14452. sendFrame246(8883, 250, gloves[i]);
  14453. sendFrame246(8884, 250, legs[i]);
  14454. sendFrame246(8885, 250, chests[i]);
  14455. sendFrame164(8880);
  14456. }
  14457. public void startHideCraft(int b) {
  14458. int[]buttons = {
  14459. 34185, 34184, 34183, 34182, 34189, 34188, 34187, 34186, 34193, 34192, 34191, 34190
  14460. };
  14461. int[]amounts = {
  14462. 1, 5, 10, 27
  14463. };
  14464. int index = 0;
  14465. int index2 = 0;
  14466. for (int i = 0; i < buttons.length; i++) {
  14467. if (buttons[i] == b) {
  14468. index = i%4;
  14469. index2 = (int)(i/4);
  14470. break;
  14471. }
  14472. }
  14473. cAmount = amounts[index];
  14474. cSelected = leathers[cIndex];
  14475. int required = 99;
  14476. if (index2 == 0) {
  14477. required = gloveLevels[cIndex];
  14478. cItem = gloves[cIndex];
  14479. cExp = gloveExp[cIndex];
  14480. } else if (index2 == 1) {
  14481. required = legLevels[cIndex];
  14482. cItem = legs[cIndex];
  14483. cExp = legExp[cIndex];
  14484. } else {
  14485. required = chestLevels[cIndex];
  14486. cItem = chests[cIndex];
  14487. cExp = chestExp[cIndex];
  14488. }
  14489. if (playerLevel[playerCrafting] >= required) {
  14490. cExp = (int)(cExp*8);
  14491. crafting = true;
  14492. closeInterface();
  14493. } else {
  14494. sendMessage("Requires level "+required);
  14495. }
  14496. }
  14497. public void reportAbuse(String abuser, int rule, int muted) {
  14498. if(playerRights == 0){
  14499. writeLog("abuser = "+abuser+" for rule "+rule+" muted? "+(muted > 0 ? "yes" : "no"), "reports");
  14500. sendMessage("Your report has been stored and online moderators have also been notified");
  14501. } else {
  14502. boolean online = true;
  14503. //int duration = misc.times[rule];
  14504. for(int i = 0; i < handler.players.length; i++){
  14505. client other = getClient(i);
  14506. if(!validClient(i)) continue;
  14507. if(other.playerName.equalsIgnoreCase(abuser)){
  14508. online = true;
  14509. other.kick();
  14510. break;
  14511. }
  14512. }
  14513.  
  14514. if(online){
  14515. sendMessage("Player kicked off server");
  14516. } else {
  14517. sendMessage("Player was not online");
  14518. }
  14519.  
  14520. }
  14521.  
  14522. if(playerRights < 1)
  14523. modYell("[Abuse] " + abuser + " reported by " + playerName + " for rule " + rule + " (" + misc.rules[rule] + ")");
  14524. else
  14525. modYell("[Mod Chat] " + playerName + " reported " + abuser + " (" + misc.rules[rule] + ")");
  14526. }
  14527. public void modYell(String msg) {
  14528. for (int i = 0; i < handler.players.length; i++) {
  14529. client p = (client)handler.players[i];
  14530. if (p != null && ! p.disconnected && p.absX > 0 && p.playerRights > 0) {
  14531. p.sendMessage(msg);
  14532. }
  14533. }
  14534. }
  14535. public void triggerTele(int x, int y, int height, boolean prem) {
  14536. if (System.currentTimeMillis()-lastAction > 5000) {
  14537. lastAction = System.currentTimeMillis();
  14538. resetWalkingQueue();
  14539. if (prem && !premium) {
  14540. sendMessage("This spell is only available to premium members, visit zernix.com for info");
  14541. return;
  14542. }
  14543. if (duelStatus == 3)
  14544. return;
  14545. tX = x;
  14546. tY = y;
  14547. tH = height;
  14548. tStage = 1;
  14549. tTime = 0;
  14550. }
  14551. }
  14552. public void startSmelt(int id) {
  14553. int[]amounts = {
  14554. 1, 5, 10, 27
  14555. };
  14556. int index = 0, index2 = 0;
  14557. for (int i = 0; i < misc.buttons_smelting.length; i++) {
  14558. if (id == misc.buttons_smelting[i]) {
  14559. index = i%4;
  14560. index2 = (int)(i/4);
  14561. }
  14562. }
  14563. smelt_id = misc.smelt_bars[index2];
  14564. smeltCount = amounts[index];
  14565. smelting = true;
  14566. closeInterface();
  14567. }
  14568. public boolean inRange(int x, int y) {
  14569. if (localId > 0)
  14570. return false;
  14571. if (Math.abs(absX-x) < 4 && Math.abs(absY-y) < 4) {
  14572. return true;
  14573. }
  14574. return false;
  14575. }
  14576.  
  14577. public void openTrade() {
  14578. inTrade = true;
  14579. tradeRequested = false;
  14580. sendFrame248(3323, 3321); // trading window + bag
  14581. resetItems(3322);
  14582. resetTItems(3415);
  14583. resetOTItems(3416);
  14584. String out = PlayerHandler.players[trade_reqId].playerName;
  14585. if (PlayerHandler.players[trade_reqId].playerRights == 1) {
  14586. out = "@cr1@"+out;
  14587. } else if (PlayerHandler.players[trade_reqId].playerRights == 2) {
  14588. out = "@cr2@"+out;
  14589. }
  14590. sendFrame126("Trading With: "+PlayerHandler.players[trade_reqId].playerName, 3417);
  14591. sendFrame126("", 3431);
  14592. sendQuest("Are you sure you want to make this trade?", 3535);
  14593. }
  14594. public void declineTrade() {
  14595. declineTrade(true);
  14596. }
  14597. public void declineTrade(boolean tellOther) {
  14598. closeInterface();
  14599. client other = getClient(trade_reqId);
  14600. if (tellOther && validClient(trade_reqId)) {
  14601. //other.sendMessage(playerName + " declined the trade");
  14602. other.declineTrade(false);
  14603. }
  14604.  
  14605. for (GameItem item: offeredItems) {
  14606. if (item.amount < 1)
  14607. continue;
  14608. if (item.stackable) {
  14609. addItem(item.id, item.amount);
  14610. } else {
  14611. for (int i = 0; i < item.amount; i++) {
  14612. addItem(item.id, 1);
  14613. }
  14614. }
  14615. }
  14616. canOffer = true;
  14617. tradeConfirmed = false;
  14618. tradeConfirmed2 = false;
  14619. offeredItems.clear();
  14620. inTrade = false;
  14621. trade_reqId = 0;
  14622. }
  14623. public boolean validClient(int index) {
  14624. client p = (client)handler.players[index];
  14625. if (p != null && ! p.disconnected) {
  14626. return true;
  14627. }
  14628. return false;
  14629. }
  14630. public client getClient(int index) {
  14631. return ((client)handler.players[index]);
  14632. }
  14633.  
  14634. public void tradeReq(int id) {
  14635. if (!server.trading) {
  14636. sendMessage("Trading has been temporarily disabled");
  14637. return;
  14638. }
  14639. client other = (client)handler.players[id];
  14640. if (validClient(trade_reqId)) {
  14641. if (other.inTrade || other.inDuel) {
  14642. sendMessage("That player is busy at the moment");
  14643. trade_reqId = 0;
  14644. return;
  14645. }
  14646. }
  14647. if (other.connectedFrom.equals(connectedFrom)) {
  14648. tradeRequested = false;
  14649. return;
  14650. }
  14651. if (validClient(trade_reqId) && ! inTrade && other.tradeRequested && other.trade_reqId == playerId) {
  14652. openTrade();
  14653. other.openTrade();
  14654. } else if (validClient(trade_reqId) && ! inTrade && System.currentTimeMillis()-lastButton > 1000) {
  14655. lastButton = System.currentTimeMillis();
  14656. tradeRequested = true;
  14657. trade_reqId = id;
  14658. sendMessage("Sending trade request...");
  14659. other.sendMessage(playerName+":tradereq:");
  14660. }
  14661. }
  14662. public void confirmScreen() {
  14663. canOffer = false;
  14664. sendFrame248(3443, 3213); // trade confirm + normal bag
  14665. resetItems(3214);
  14666. String SendTrade = "Absolutely nothing!";
  14667. String SendAmount = "";
  14668. int Count = 0;
  14669. client other = getClient(trade_reqId);
  14670. for (GameItem item: offeredItems) {
  14671. if (item.id > 0) {
  14672. if (item.amount >= 1000 && item.amount < 1000000) {
  14673. SendAmount = "@cya@"+(item.amount/1000)+"K @whi@("+misc.format(item.amount)+")";
  14674. } else if (item.amount >= 1000000) {
  14675. SendAmount = "@gre@"+(item.amount/1000000)+" million @whi@("+misc.format(item.amount)+")";
  14676. } else {
  14677. SendAmount = ""+misc.format(item.amount);
  14678. }
  14679. if (Count == 0) {
  14680. SendTrade = GetItemName(item.id);
  14681. } else {
  14682. SendTrade = SendTrade+"\\n"+GetItemName(item.id);
  14683. }
  14684. if (item.stackable) {
  14685. SendTrade = SendTrade+" x "+SendAmount;
  14686. }
  14687. Count++;
  14688. }
  14689. }
  14690. sendFrame126(SendTrade, 3557);
  14691. SendTrade = "Absolutely nothing!";
  14692. SendAmount = "";
  14693. Count = 0;
  14694. for (GameItem item: other.offeredItems) {
  14695. if (item.id > 0) {
  14696. if (item.amount >= 1000 && item.amount < 1000000) {
  14697. SendAmount = "@cya@"+(item.amount/1000)+"K @whi@("+misc.format(item.amount)+")";
  14698. } else if (item.amount >= 1000000) {
  14699. SendAmount = "@gre@"+(item.amount/1000000)+" million @whi@("+misc.format(item.amount)+")";
  14700. } else {
  14701. SendAmount = ""+misc.format(item.amount);
  14702. }
  14703. SendAmount = SendAmount;
  14704. if (Count == 0) {
  14705. SendTrade = GetItemName(item.id);
  14706. } else {
  14707. SendTrade = SendTrade+"\\n"+GetItemName(item.id);
  14708. }
  14709. if (item.stackable) {
  14710. SendTrade = SendTrade+" x "+SendAmount;
  14711. }
  14712. Count++;
  14713. }
  14714. }
  14715. sendFrame126(SendTrade, 3558);
  14716. }
  14717. public void giveItems() {
  14718. client other = getClient(trade_reqId);
  14719. if (validClient(trade_reqId)) {
  14720. try {
  14721. logTrade(playerId, other.playerId, offeredItems, other.offeredItems);
  14722. for (GameItem item: other.offeredItems) {
  14723. if (item.id > 0) {
  14724. addItem(item.id, item.amount);
  14725. println("TradeConfirmed, item="+item.id);
  14726. BufferedWriter bw = null;
  14727.  
  14728. try {
  14729. bw = new BufferedWriter(new FileWriter("logs/trade logs.txt", true));
  14730. bw.write(other.playerName + " trades item: " + item.id + " with " + playerName);
  14731. bw.newLine();
  14732. bw.flush();
  14733. } catch (IOException ioe) {
  14734. ioe.printStackTrace();
  14735. } finally {
  14736. if (bw != null) try {
  14737. bw.close();
  14738. } catch (IOException ioe2) {
  14739. sendMessage("Error logging trade!");
  14740. }
  14741. }
  14742. }
  14743. }
  14744. closeInterface();
  14745. tradeResetNeeded = true;
  14746. } catch (Exception e) {
  14747. e.printStackTrace();
  14748. }
  14749. }
  14750. }
  14751. public void logTrade(int id, int id2, CopyOnWriteArrayList < GameItem > offeredItems, CopyOnWriteArrayList < GameItem > offeredItems2) {
  14752. try {
  14753. //results = statement.executeQuery("SELECT id from uber3_trades ORDER BY id DESC");
  14754. //results.next();
  14755. //int tId = results.getInt("id") + 1;
  14756. //statement.executeUpdate("INSERT INTO uber3_trades SET id = " + tId + ", type=0, p1=" + id + ", p2=" + id2);
  14757. for (GameItem item: offeredItems) {
  14758. // statement.executeUpdate("INSERT INTO uber3_logs SET id = " + tId + ", pid=" + id + ", item=" + item.id + ", amount=" + item.amount);
  14759. }
  14760. for (GameItem item: offeredItems2) {
  14761. // statement.executeUpdate("INSERT INTO uber3_logs SET id = " + tId + ", pid=" + id2 + ", item=" + item.id + ", amount=" + item.amount);
  14762. }
  14763. //statement.close();
  14764. } catch (Exception e) {
  14765. e.printStackTrace();
  14766. }
  14767. }
  14768. public void resetTrade() {
  14769. offeredItems.clear();
  14770. inTrade = false;
  14771. trade_reqId = 0;
  14772. canOffer = true;
  14773. tradeConfirmed = false;
  14774. tradeConfirmed2 = false;
  14775. closeInterface();
  14776. tradeResetNeeded = false;
  14777. sendQuest("Are you sure you want to make this trade?", 3535);
  14778. }
  14779. public void duelReq(int pid) {
  14780. if (!server.dueling) {
  14781. sendMessage("Dueling has been temporarily disabled");
  14782. return;
  14783. }
  14784. duel_with = pid;
  14785. duelRequested = true;
  14786. if (!validClient(duel_with))
  14787. return;
  14788. client other = getClient(duel_with);
  14789. if (inTrade || inDuel || other.inDuel || other.inTrade || other.duelFight || other.duelConfirmed || other.duelConfirmed2) {
  14790. sendMessage("Other player is busy at the moment");
  14791. duelRequested = false;
  14792. return;
  14793. }
  14794. // if (other.connectedFrom.equals(connectedFrom)) {
  14795. // duelRequested = false;
  14796. // return;
  14797. //}
  14798. if (duelRequested && other.duelRequested && duel_with == other.playerId && other.duel_with == playerId) {
  14799. openDuel();
  14800. other.openDuel();
  14801. } else {
  14802. //sendMessage("Mage on player unlocked");
  14803. other.sendMessage(playerName+":duelreq:");
  14804. }
  14805. }
  14806. public void openDuel() {
  14807. RefreshDuelRules();
  14808. refreshDuelScreen();
  14809. inDuel = true;
  14810. client other = getClient(duel_with);
  14811. sendQuest("Dueling with: "+other.playerName+" (level-"+other.combat+")", 6671);
  14812. sendQuest("", 6684);
  14813. sendFrame248(6575, 3321);
  14814. resetItems(3322);
  14815. }
  14816. public void declineDuel() {
  14817. client other = getClient(duel_with);
  14818. inDuel = false;
  14819. if (validClient(duel_with) && other.inDuel) {
  14820. other.declineDuel();
  14821. }
  14822. closeInterface();
  14823. canOffer = true;
  14824. duel_with = 0;
  14825. duelRequested = false;
  14826. duelConfirmed = false;
  14827. duelConfirmed2 = false;
  14828. duelFight = false;
  14829. for (GameItem item: offeredItems) {
  14830. if (item.amount < 1)
  14831. continue;
  14832. if (Item.itemStackable[item.id] || Item.itemIsNote[item.id]) {
  14833. addItem(item.id, item.amount);
  14834. } else {
  14835. addItem(item.id, 1);
  14836. }
  14837. }
  14838. offeredItems.clear();
  14839. }
  14840. public void confirmDuel() {
  14841. client other = getClient(duel_with);
  14842. if (!validClient(duel_with))
  14843. declineDuel();
  14844. String out = "";
  14845. for (GameItem item: offeredItems) {
  14846. if (Item.itemStackable[item.id] || Item.itemIsNote[item.id]) {
  14847. out += GetItemName(item.id)+" x "+misc.format(item.amount)+", ";
  14848. } else {
  14849. out += GetItemName(item.id)+", ";
  14850. }
  14851. }
  14852. sendQuest(out, 6516);
  14853. out = "";
  14854. for (GameItem item: other.offeredItems) {
  14855. if (Item.itemStackable[item.id] || Item.itemIsNote[item.id]) {
  14856. out += GetItemName(item.id)+" x "+misc.format(item.amount)+", ";
  14857. } else {
  14858. out += GetItemName(item.id)+", ";
  14859. }
  14860. }
  14861. sendQuest(out, 6517);
  14862. sendQuest("Movement will be disabled", 8242);
  14863. for (int i = 8243; i <= 8253; i++) {
  14864. sendQuest("", i);
  14865. }
  14866. sendQuest("Hitpoints will be restored", 8250);
  14867. sendQuest("", 6571);
  14868. showInterface(6412);
  14869. }
  14870. public void startDuel() {
  14871. closeInterface();
  14872. duelFight = true;
  14873. client other = getClient(duel_with);
  14874. for (GameItem item : other.offeredItems) {
  14875. otherOfferedItems.add(new GameItem(item.id, item.amount));
  14876. }
  14877. }
  14878. public void resetDuel() {
  14879. println("duel reset");
  14880. closeInterface();
  14881. canOffer = true;
  14882. duel_with = 0;
  14883. duelRequested = false;
  14884. duelConfirmed = false;
  14885. duelConfirmed2 = false;
  14886. offeredItems.clear();
  14887. otherOfferedItems.clear();
  14888. duelFight = false;
  14889. inDuel = false;
  14890. duelRule = new boolean[] {
  14891. false, false, false, false, false, true, false, true, false, true, false
  14892. };
  14893. }
  14894. public void frame36(int Interface, int Status) {
  14895. outStream.createFrame(36);
  14896. outStream.writeWordBigEndian(Interface); //The button
  14897. outStream.writeByte(Status); //The Status of the button
  14898. }
  14899. public void frame87(int Interface, int Status) {
  14900. outStream.createFrame(87);
  14901. outStream.writeWordBigEndian(Interface); //The button
  14902. outStream.writeDWord_v1(Status); //The Status of the button
  14903. }
  14904. public boolean duelButton(int button) {
  14905. client other = getClient(duel_with);
  14906. boolean found = false;
  14907. if (System.currentTimeMillis()-lastButton < 800) {
  14908. return false;
  14909. }
  14910. if (inDuel && ! duelFight && ! duelConfirmed2 && ! other.duelConfirmed2) {
  14911. for (int i = 0; i < duelButtons.length; i++) {
  14912. if (button == duelButtons[i]) {
  14913. found = true;
  14914. if (duelRule[i]) {
  14915. duelRule[i] = false;
  14916. other.duelRule[i] = false;
  14917. } else {
  14918. duelRule[i] = true;
  14919. other.duelRule[i] = true;
  14920. }
  14921. }
  14922. }
  14923. if (found) {
  14924. lastButton = System.currentTimeMillis();
  14925. duelConfirmed = false;
  14926. other.duelConfirmed = false;
  14927. sendQuest("", 6684);
  14928. other.sendQuest("", 6684);
  14929. other.duelRule[i] = duelRule[i];
  14930. RefreshDuelRules();
  14931. other.RefreshDuelRules();
  14932. }
  14933. }
  14934. return found;
  14935. }
  14936.  
  14937.  
  14938. }
Add Comment
Please, Sign In to add comment