Guest User

tradeandduel

a guest
May 4th, 2015
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 36.10 KB | None | 0 0
  1. package server.model.players;
  2.  
  3. import java.util.concurrent.CopyOnWriteArrayList;
  4.  
  5. import server.model.players.PlayerSave;
  6. import server.model.players.Client;
  7. import server.model.players.PlayerHandler;
  8. import server.Config;
  9. import server.Server;
  10. import server.model.items.GameItem;
  11. import server.model.items.Item;
  12. import server.util.Misc;
  13. import server.world.ItemHandler;
  14.  
  15.  
  16. public class TradeAndDuel{
  17.  
  18.  
  19. private Client c;
  20. public TradeAndDuel(Client Client) {
  21. this.c = Client;
  22. }
  23.  
  24. /**
  25. * Trading By Ardi, Edited by Arras.
  26. **/
  27.  
  28. public CopyOnWriteArrayList<GameItem> offeredItems = new CopyOnWriteArrayList<GameItem>();
  29.  
  30. public void requestTrade(int id){
  31. Client o = (Client) PlayerHandler.players[id];
  32. if(c.isBanking) {
  33. c.sendMessage("You can't trade while in bank sir, sorry.");
  34. o.sendMessage("The player you tried to trade is banking, tell him to close bank please.");
  35. }
  36. if(c.playerRights == 2) {
  37. c.sendMessage("Administrator can't trade playerrs.");
  38. return;
  39. }
  40. try {
  41. if (o == null)
  42. return;
  43. else if (c.playerIsBusy())
  44. return;
  45. else if (o.playerIsBusy()) {
  46. c.sendMessage("Other player is busy at the moment.");
  47. return;
  48. } else if (System.currentTimeMillis() - c.logoutDelay < 10000) {
  49. c.sendMessage("You cannot trade anyone while incombat!");
  50. return;
  51. } else if (System.currentTimeMillis() - o.logoutDelay < 10000) {
  52. c.sendMessage("Other player is busy at the moment.");
  53. return;
  54. } else if (id == c.playerId)
  55. return;
  56. //else if (c.connectedFrom.equalsIgnoreCase(o.connectedFrom)) {
  57. //c.sendMessage("You cannot trade somebody from your own ip address.");
  58. //return;
  59. //}
  60. else if (c.inTrade) {
  61. c.getTradeAndDuel().declineTrade();
  62. }
  63. c.getTradeAndDuel().resetTrade();
  64. c.turnPlayerTo(o.absX, o.absY);
  65. c.tradeWith = id;
  66. if(!c.inTrade && o.tradeRequested && o.tradeWith == c.playerId) {
  67. c.getTradeAndDuel().openTrade();
  68. o.getTradeAndDuel().openTrade();
  69. } else if(!c.inTrade) {
  70.  
  71. c.tradeRequested = true;
  72. c.sendMessage("@or3@Sending Trade Request To " + Misc.optimizeText(o.playerName) + "...");
  73. o.sendMessage(c.playerName + ":tradereq:");
  74. }
  75. }
  76. catch (Exception e) {
  77. Misc.println("Error requesting trade.");
  78. }
  79. }
  80.  
  81. public void openTrade() {
  82. if(c.playerRights == 2) {
  83. c.sendMessage("Administrator can't trade playerrs.");
  84. return;
  85. }
  86. Client o = (Client) PlayerHandler.players[c.tradeWith];
  87.  
  88. if(o == null) {
  89. return;
  90. }
  91. if (c.isBanking || o.isBanking) {
  92. c.getPA().closeAllWindows();
  93. o.getPA().closeAllWindows();
  94. return;
  95. }
  96. /*if(c.isBanking) {
  97. c.sendMessage("You can't trade while in bank sir, sorry.");
  98. //o.sendMessage("The player you tried to trade is banking, tell him to close bank please.");
  99. }*/
  100. c.inTrade = true;
  101. c.canOffer = true;
  102. c.tradeStatus = 1;
  103. c.tradeRequested = false;
  104. c.getItems().resetItems(3322);
  105. resetTItems(3415);
  106. resetOTItems(3416);
  107. String out = o.playerName;
  108.  
  109. if(o.playerRights == 1) {
  110. out = "@cr1@" + out;
  111. }
  112. else if(o.playerRights == 2) {
  113. out = "@cr2@" + out;
  114. }
  115. c.getPA().sendFrame126("Trading with: " + o.playerName+" who has @gre@"+o.getItems().freeSlots()+"" ,3417);
  116. c.getPA().sendFrame126("", 3431);
  117. c.getPA().sendFrame126("Are you sure you want to make this trade?", 3535);
  118. c.getPA().sendFrame248(3323, 3321);
  119. }
  120.  
  121.  
  122.  
  123. public void resetTItems(int WriteFrame) {
  124. synchronized(c) {
  125. c.getOutStream().createFrameVarSizeWord(53);
  126. c.getOutStream().writeWord(WriteFrame);
  127. int len = offeredItems.toArray().length;
  128. int current = 0;
  129. c.getOutStream().writeWord(len);
  130. for (GameItem item : offeredItems) {
  131. if (item.amount > 254) {
  132. c.getOutStream().writeByte(255);
  133. c.getOutStream().writeDWord_v2(item.amount);
  134. } else {
  135. c.getOutStream().writeByte(item.amount);
  136. }
  137. c.getOutStream().writeWordBigEndianA(item.id + 1);
  138. current++;
  139. }
  140. if(current < 27) {
  141. for(int i = current; i < 28; i++) {
  142. c.getOutStream().writeByte(1);
  143. c.getOutStream().writeWordBigEndianA(-1);
  144. }
  145. }
  146. c.getOutStream().endFrameVarSizeWord();
  147. c.flushOutStream();
  148. }
  149. }
  150.  
  151. private boolean tradeContains(int itemID) {
  152. return tradeContains(itemID, 1);
  153. }
  154.  
  155. private boolean tradeContains(int itemID, int amount) {
  156. int count = 0;
  157. for (GameItem item : offeredItems) {
  158. if (item != null) {
  159. if (item.id == itemID) {
  160. count += item.amount;
  161. }
  162. }
  163. }
  164. return count >= amount;
  165. }
  166.  
  167. public boolean fromTrade(int itemID, int fromSlot, int amount) {
  168. Client o = (Client) PlayerHandler.players[c.tradeWith];
  169. if (o == null) {
  170. return false;
  171. } else if (amount <= 0)
  172. return false;
  173. if (!c.inTrade || !c.canOffer) {
  174. declineTrade();
  175. return false;
  176. }
  177. if (!c.getTradeAndDuel().tradeContains(itemID)) {
  178. return false;
  179. }
  180. if(!c.getItems().playerHasItem(itemID, amount))
  181. return false;
  182.  
  183. if (amount < 0) {
  184. return false;
  185. }
  186. /*
  187. * Else
  188. */
  189.  
  190. try {
  191. c.tradeConfirmed = false;
  192. o.tradeConfirmed = false;
  193. if (!Item.itemStackable[itemID]) {
  194. if (amount > 28) {
  195. amount = 28;
  196. }
  197. for (int a = 0; a < amount; a++) {
  198. for (GameItem item : offeredItems) {
  199. if (item.id == itemID) {
  200. if (!item.stackable) {
  201. offeredItems.remove(item);
  202. c.getItems().addItem(itemID, 1);
  203. } else if (item.amount > amount) {
  204. item.amount -= amount;
  205. c.getItems().addItem(itemID, amount);
  206. } else {
  207. amount = item.amount;
  208. offeredItems.remove(item);
  209. c.getItems().addItem(itemID, amount);
  210. }
  211. break;
  212. }
  213. }
  214. }
  215. }
  216. for (GameItem item : offeredItems) {
  217. if (item.id == itemID) {
  218. if (!item.stackable) {
  219. } else if (item.amount > amount) {
  220. item.amount -= amount;
  221. c.getItems().addItem(itemID, amount);
  222. } else {
  223. amount = item.amount;
  224. offeredItems.remove(item);
  225. c.getItems().addItem(itemID, amount);
  226.  
  227. }
  228. break;
  229. }
  230. }
  231. c.tradeConfirmed = false;
  232. o.tradeConfirmed = false;
  233. c.getItems().resetItems(3322);
  234. resetTItems(3415);
  235. o.getTradeAndDuel().resetOTItems(3416);
  236. //displayWAndI(c);
  237. c.getPA().sendFrame126("", 3431);
  238. o.getPA().sendFrame126("", 3431);
  239. } catch (Exception e) {
  240.  
  241. }
  242. return true;
  243. }
  244.  
  245. public boolean tradeItem(int itemID, int fromSlot, int amount) {
  246. Client o = (Client) PlayerHandler.players[c.tradeWith];
  247. if(o == null) {
  248. return false;
  249. }
  250.  
  251. for (int i : Config.ITEM_TRADEABLE) {
  252. if(i == itemID) {
  253. c.sendMessage("You can't trade this item.");
  254. return false;
  255. }
  256. }
  257.  
  258. if(!((c.playerItems[fromSlot] == itemID+1) && (c.playerItemsN[fromSlot] >= amount)))
  259. {
  260. c.sendMessage("You don't have that amount!");
  261. return false;
  262. }
  263. c.tradeConfirmed = false;
  264. o.tradeConfirmed = false;
  265. if(!Item.itemStackable[itemID] && !Item.itemIsNote[itemID]) {
  266. for(int a = 0; a < amount && a < 28; a++) {
  267. if(c.getItems().playerHasItem(itemID, 1)) {
  268. offeredItems.add(new GameItem(itemID, 1));
  269. c.getItems().deleteItem(itemID, c.getItems().getItemSlot(itemID), 1);
  270. o.getPA().sendFrame126("Trading with: " + c.playerName+" who has @gre@"+c.getItems().freeSlots()+"" ,3417);
  271. }
  272. }
  273. o.getPA().sendFrame126("Trading with: " + c.playerName+" who has @gre@"+c.getItems().freeSlots()+"" ,3417);
  274. c.getItems().resetItems(3322);
  275. resetTItems(3415);
  276. o.getTradeAndDuel().resetOTItems(3416);
  277. c.getPA().sendFrame126("", 3431);
  278. o.getPA().sendFrame126("", 3431);
  279. }
  280. int itemAmount = c.getItems().getItemCount(itemID);
  281. if (itemAmount < amount) {
  282. if (itemAmount <= 0)
  283. return false;
  284. amount = itemAmount;
  285. }
  286.  
  287. if (c.getItems().getItemCount(itemID) < amount) {
  288. amount = c.getItems().getItemCount(itemID);
  289. if (amount == 0)
  290. return false;
  291. }
  292. if(itemID != c.playerItems[fromSlot]-1) {
  293. return false;
  294. }
  295. if (amount > c.playerItemsN[fromSlot]) {
  296. return false;
  297. }
  298. if (!c.inTrade || !c.canOffer) {
  299. declineTrade();
  300. return false;
  301. }
  302. if(!c.getItems().playerHasItem(itemID, amount))
  303. return false;
  304.  
  305. if(Item.itemStackable[itemID] || Item.itemIsNote[itemID]) {
  306. boolean inTrade = false;
  307. for(GameItem item : offeredItems) {
  308. if(item.id == itemID) {
  309. inTrade = true;
  310. item.amount += amount;
  311. c.getItems().deleteItem2(itemID, amount);
  312. o.getPA().sendFrame126("Trading with: " + c.playerName+" who has @gre@"+c.getItems().freeSlots()+"" ,3417);
  313. break;
  314. }
  315. }
  316.  
  317. if(!inTrade) {
  318. offeredItems.add(new GameItem(itemID, amount));
  319. c.getItems().deleteItem2(itemID, amount);
  320. o.getPA().sendFrame126("Trading with: " + c.playerName+" who has @gre@"+c.getItems().freeSlots()+"" ,3417);
  321. }
  322. }
  323. o.getPA().sendFrame126("Trading with: " + c.playerName+" who has @gre@"+c.getItems().freeSlots()+"" ,3417);
  324. c.getItems().resetItems(3322);
  325. c.getItems().updateInventory();
  326. resetTItems(3415);
  327. o.getTradeAndDuel().resetOTItems(3416);
  328. c.getPA().sendFrame126("", 3431);
  329. o.getPA().sendFrame126("", 3431);
  330. return true;
  331. }
  332.  
  333.  
  334. public void resetTrade() {
  335. offeredItems.clear();
  336. c.inTrade = false;
  337. c.tradeWith = 0;
  338. c.canOffer = true;
  339. c.tradeConfirmed = false;
  340. c.tradeConfirmed2 = false;
  341. c.acceptedTrade = false;
  342. c.getPA().removeAllWindows();
  343. c.getPA().resetInterfaceStatus();
  344. c.tradeResetNeeded = false;
  345. c.getPA().sendFrame126("Are you sure you want to make this trade?", 3535);
  346. }
  347. public void declineTrade() {
  348. c.tradeStatus = 0;
  349. declineTrade(true);
  350. c.getItems().updateInventory();
  351. }
  352.  
  353.  
  354. public void declineTrade(boolean tellOther) {
  355. c.inTrade = false;
  356. c.getPA().removeAllWindows();
  357. Client o = (Client) PlayerHandler.players[c.tradeWith];
  358. if (o == null) {
  359. return;
  360. }
  361.  
  362. if(tellOther){
  363. o.getTradeAndDuel().declineTrade(false);
  364. o.getTradeAndDuel().c.getPA().removeAllWindows();
  365. }
  366.  
  367. for(GameItem item : offeredItems) {
  368. if(item.amount < 1) {
  369. continue;
  370. }
  371. if(item.stackable) {
  372. c.getItems().addItem(item.id, item.amount);
  373. } else {
  374. for(int i = 0; i < item.amount; i++) {
  375. c.getItems().addItem(item.id, 1);
  376. }
  377. }
  378. }
  379. c.canOffer = true;
  380. c.tradeConfirmed = false;
  381. c.tradeConfirmed2 = false;
  382. offeredItems.clear();
  383. c.getItems().updateInventory();
  384. c.tradeWith = 0;
  385. }
  386.  
  387.  
  388. public void resetOTItems(int WriteFrame) {
  389. synchronized(c) {
  390. Client o = (Client) PlayerHandler.players[c.tradeWith];
  391. if(o == null) {
  392. return;
  393. }
  394. c.getOutStream().createFrameVarSizeWord(53);
  395. c.getOutStream().writeWord(WriteFrame);
  396. int len = o.getTradeAndDuel().offeredItems.toArray().length;
  397. int current = 0;
  398. c.getOutStream().writeWord(len);
  399. for (GameItem item : o.getTradeAndDuel().offeredItems) {
  400. if (item.amount > 254) {
  401. c.getOutStream().writeByte(255); // item's stack count. if over 254, write byte 255
  402. c.getOutStream().writeDWord_v2(item.amount);
  403. } else {
  404. c.getOutStream().writeByte(item.amount);
  405. }
  406. c.getOutStream().writeWordBigEndianA(item.id + 1); // item id
  407. current++;
  408. }
  409. if(current < 27) {
  410. for(int i = current; i < 28; i++) {
  411. c.getOutStream().writeByte(1);
  412. c.getOutStream().writeWordBigEndianA(-1);
  413. }
  414. }
  415. c.getOutStream().endFrameVarSizeWord();
  416. c.flushOutStream();
  417. }
  418. }
  419.  
  420.  
  421. public void confirmScreen() {
  422. Client o = (Client) PlayerHandler.players[c.tradeWith];
  423. if(o == null) {
  424. return;
  425. }
  426. if (o.tradeWith != c.playerId) {
  427. return;
  428. }
  429. c.canOffer = false;
  430. c.getItems().resetItems(3214);
  431. String SendTrade = "Absolutely nothing!";
  432. String SendAmount = "";
  433. int Count = 0;
  434. for (GameItem item : offeredItems) {
  435. if (item.id > 0) {
  436. if (item.amount >= 1000 && item.amount < 1000000) {
  437. SendAmount = "@cya@" + (item.amount / 1000) + "K @whi@(" + Misc.format(item.amount) + ")";
  438. } else if (item.amount >= 1000000) {
  439. SendAmount = "@gre@" + (item.amount / 1000000) + " million @whi@(" + Misc.format(item.amount) + ")";
  440. } else {
  441. SendAmount = "" + Misc.format(item.amount);
  442. }
  443.  
  444. if(Count == 0) {
  445. SendTrade = c.getItems().getItemName(item.id);
  446. } else {
  447. SendTrade = SendTrade + "\\n" + c.getItems().getItemName(item.id);
  448. }
  449.  
  450. if (item.stackable) {
  451. SendTrade = SendTrade + " x " + SendAmount;
  452. }
  453. Count++;
  454. }
  455. }
  456.  
  457. c.getPA().sendFrame126(SendTrade, 3557);
  458. SendTrade = "Absolutely nothing!";
  459. SendAmount = "";
  460. Count = 0;
  461.  
  462. for (GameItem item : o.getTradeAndDuel().offeredItems) {
  463. if (item.id > 0) {
  464. if (item.amount >= 1000 && item.amount < 1000000) {
  465. SendAmount = "@cya@" + (item.amount / 1000) + "K @whi@(" + Misc.format(item.amount) + ")";
  466. } else if (item.amount >= 1000000) {
  467. SendAmount = "@gre@" + (item.amount / 1000000) + " million @whi@(" + Misc.format(item.amount) + ")";
  468. } else {
  469. SendAmount = "" + Misc.format(item.amount);
  470. }
  471. SendAmount = SendAmount;
  472.  
  473. if (Count == 0) {
  474. SendTrade = c.getItems().getItemName(item.id);
  475. } else {
  476. SendTrade = SendTrade + "\\n" + c.getItems().getItemName(item.id);
  477. }
  478. if (item.stackable) {
  479. SendTrade = SendTrade + " x " + SendAmount;
  480. }
  481. Count++;
  482. }
  483. }
  484. c.getPA().sendFrame126(SendTrade, 3558);
  485. c.getPA().sendFrame248(3443, 197);
  486. }
  487.  
  488.  
  489. public void giveItems() {
  490. Client o = (Client) PlayerHandler.players[c.tradeWith];
  491. if(o == null) {
  492. return;
  493. }
  494. if (o.tradeWith != c.playerId)
  495. return;
  496. try{
  497. for(GameItem item : o.getTradeAndDuel().offeredItems){
  498. if (item.id > 0) {
  499. c.getItems().addItem(item.id, item.amount);
  500. }
  501. }
  502.  
  503. c.getPA().removeAllWindows();
  504. c.tradeResetNeeded = true;
  505. PlayerSave.saveGame(c);
  506. PlayerSave.saveGame(o);
  507. c.getItems().updateInventory();
  508. } catch(Exception e){
  509. }
  510. }
  511.  
  512. /**
  513. * Dueling ~ Ardi
  514. **/
  515.  
  516. public CopyOnWriteArrayList<GameItem> otherStakedItems = new CopyOnWriteArrayList<GameItem>();
  517. public CopyOnWriteArrayList<GameItem> stakedItems = new CopyOnWriteArrayList<GameItem>();
  518.  
  519. public void requestDuel(int id) {
  520. try {
  521. if (id == c.playerId) {
  522. return;
  523. }
  524. if (c.teleTimer > 0) {
  525. return;
  526. }
  527. Client o = (Client) PlayerHandler.players[id];
  528. if(o == null) {
  529. return;
  530. }
  531. if (c.playerIsBusy()) {
  532. c.sendMessage("Other player is busy at the moment.");
  533. return;
  534. }
  535. if (o.playerIsBusy()) {
  536. c.sendMessage("Other player is busy at the moment.");
  537. return;
  538. }
  539. resetDuel();
  540. resetDuelItems();
  541. c.duelingWith = id;
  542. c.duelRequested = true;
  543. if(c.duelStatus == 0 && o.duelStatus == 0 && c.duelRequested && o.duelRequested && c.duelingWith == o.getId() && o.duelingWith == c.getId()) {
  544. if(c.goodDistance(c.getX(), c.getY(), o.getX(), o.getY(), 1)) {
  545. c.getTradeAndDuel().openDuel();
  546. o.getTradeAndDuel().openDuel();
  547. } else {
  548. c.sendMessage("You need to get closer to your opponent to start the duel.");
  549. }
  550.  
  551. } else {
  552. c.sendMessage("Sending duel request...");
  553. o.sendMessage(c.playerName+":duelreq:");
  554. }
  555. } catch (Exception e) {
  556. Misc.println("Error requesting duel.");
  557. }
  558. }
  559.  
  560. public void openDuel() {
  561. Client o = (Client) PlayerHandler.players[c.duelingWith];
  562. if(o == null) {
  563. return;
  564. }
  565. if ((!c.inDuelArena() || !o.inDuelArena())) {
  566. return;
  567. }
  568.  
  569. c.duelStatus = 1;
  570. refreshduelRules();
  571. refreshDuelScreen();
  572. c.canOffer = true;
  573. for (int i = 0; i < c.playerEquipment.length; i++) {
  574. sendDuelEquipment(c.playerEquipment[i], c.playerEquipmentN[i], i);
  575. }
  576. c.getPA().sendFrame126("Dueling with: " + o.playerName + " (level-" + o.combatLevel + ")", 6671);
  577. c.getPA().sendFrame126("", 6684);
  578. c.getPA().sendFrame248(6575, 3321);
  579. c.getItems().resetItems(3322);
  580. }
  581.  
  582. public void sendDuelEquipment(int itemId, int amount, int slot) {
  583. synchronized(c) {
  584. if(itemId != 0) {
  585. c.getOutStream().createFrameVarSizeWord(34);
  586. c.getOutStream().writeWord(13824);
  587. c.getOutStream().writeByte(slot);
  588. c.getOutStream().writeWord(itemId+1);
  589.  
  590. if (amount > 254) {
  591. c.getOutStream().writeByte(255);
  592. c.getOutStream().writeDWord(amount);
  593. } else {
  594. c.getOutStream().writeByte(amount);
  595. }
  596. c.getOutStream().endFrameVarSizeWord();
  597. c.flushOutStream();
  598. }
  599. }
  600. }
  601.  
  602. public void refreshduelRules() {
  603. for(int i = 0; i < c.duelRule.length; i++) {
  604. c.duelRule[i] = false;
  605. }
  606. c.getPA().sendFrame87(286, 0);
  607. c.duelOption = 0;
  608. }
  609.  
  610. public void refreshDuelScreen() {
  611. synchronized(c) {
  612. Client o = (Client) PlayerHandler.players[c.duelingWith];
  613. if(o == null) {
  614. return;
  615. }
  616. c.getOutStream().createFrameVarSizeWord(53);
  617. c.getOutStream().writeWord(6669);
  618. c.getOutStream().writeWord(stakedItems.toArray().length);
  619. int current = 0;
  620. for(GameItem item : stakedItems) {
  621. if (item.amount > 254) {
  622. c.getOutStream().writeByte(255);
  623. c.getOutStream().writeDWord_v2(item.amount);
  624. } else {
  625. c.getOutStream().writeByte(item.amount);
  626. }
  627. if (item.id > Config.ITEM_LIMIT || item.id < 0) {
  628. item.id = Config.ITEM_LIMIT;
  629. }
  630. c.getOutStream().writeWordBigEndianA(item.id + 1);
  631.  
  632. current++;
  633. }
  634.  
  635. if(current < 27) {
  636. for(int i = current; i < 28; i++) {
  637. c.getOutStream().writeByte(1);
  638. c.getOutStream().writeWordBigEndianA(-1);
  639. }
  640. }
  641. c.getOutStream().endFrameVarSizeWord();
  642. c.flushOutStream();
  643.  
  644. c.getOutStream().createFrameVarSizeWord(53);
  645. c.getOutStream().writeWord(6670);
  646. c.getOutStream().writeWord(o.getTradeAndDuel().stakedItems.toArray().length);
  647. current = 0;
  648. for (GameItem item : o.getTradeAndDuel().stakedItems) {
  649. if (item.amount > 254) {
  650. c.getOutStream().writeByte(255);
  651. c.getOutStream().writeDWord_v2(item.amount);
  652. } else {
  653. c.getOutStream().writeByte(item.amount);
  654. }
  655. if (item.id > Config.ITEM_LIMIT || item.id < 0) {
  656. item.id = Config.ITEM_LIMIT;
  657. }
  658. c.getOutStream().writeWordBigEndianA(item.id + 1);
  659. current++;
  660. }
  661.  
  662. if(current < 27) {
  663. for(int i = current; i < 28; i++) {
  664. c.getOutStream().writeByte(1);
  665. c.getOutStream().writeWordBigEndianA(-1);
  666. }
  667. }
  668. c.getOutStream().endFrameVarSizeWord();
  669. c.flushOutStream();
  670. }
  671. }
  672.  
  673.  
  674. public void bothDeclineDuel() {
  675. Client c3 = (Client) PlayerHandler.players[c.duelingWith];
  676. declineDuel(true);
  677. c3.getTradeAndDuel().declineDuel(true);
  678. c.sendMessage("@red@The duel has been declined.");
  679. c3.sendMessage("@red@The duel has been declined.");
  680. }
  681.  
  682. public void declineDuel(boolean notifyOther) {
  683. Client o2 = (Client) PlayerHandler.players[c.duelingWith];
  684. if (c.duelStatus >= 5 || c.duelStatus == 0)
  685. return;
  686. if (notifyOther) {
  687. if (o2 != null && o2.duelingWith == c.playerId)
  688. o2.getTradeAndDuel().declineDuel(false);
  689. }
  690. c.getPA().resetInterfaceStatus();
  691. c.canOffer = true;
  692. c.duelStatus = 0;
  693. c.duelingWith = 0;
  694. c.duelSpaceReq = 0;
  695. c.duelRequested = false;
  696. for (GameItem item : stakedItems) {
  697. if (item.amount < 1)
  698. continue;
  699. if (Item.itemStackable[item.id] || Item.itemIsNote[item.id]) {
  700. c.getItems().forceAddItem(item.id, item.amount);
  701. } else {
  702. c.getItems().forceAddItem(item.id, 1);
  703. }
  704. }
  705. stakedItems.clear();
  706. for (int i = 0; i < c.duelRule.length; i++) {
  707. c.duelRule[i] = false;
  708. }
  709. c.sendMessage("@red@The duel has been declined.");
  710. o2.sendMessage("@red@The duel has been declined.");
  711. }
  712.  
  713.  
  714. public boolean stakeItem(int itemID, int fromSlot, int amount) {
  715.  
  716. for (int i : Config.ITEM_TRADEABLE) {
  717. if(i == itemID) {
  718. c.sendMessage("You can't stake this item.");
  719. return false;
  720. }
  721. }
  722. if(!c.getItems().playerHasItem(itemID, amount))
  723. return false;
  724. if (!c.getItems().playerHasItem(itemID)) {
  725. // valid the player has the item
  726. return false;
  727. }
  728. if (itemID != c.playerItems[fromSlot] - 1) {
  729. // validate that its the proper item
  730. return false;
  731. }
  732. if (itemID != 995 & c.playerItems[fromSlot] == 996) {
  733. return false;
  734. }
  735. int count = c.getItems().getItemAmount(itemID);
  736. if (amount > count) {
  737. amount = count;
  738. }
  739. if (amount <= 0) {
  740. return false;
  741. }
  742. if (itemID == 863 || itemID == 11230 || itemID == 869 || itemID == 868
  743. || itemID == 867 || itemID == 866 || itemID == 4740
  744. || itemID == 9244 || itemID == 11212 || itemID == 892
  745. || itemID == 9194 || itemID == 9243 || itemID == 9242
  746. || itemID == 9241 || itemID == 9240 || itemID == 9239
  747. || itemID == 882 || itemID == 884 || itemID == 886
  748. || itemID == 888 || itemID == 890) {
  749. c.sendMessage("You can't stake bolts, arrows or knifes.");
  750. return false;
  751. }
  752. if(c.playerRights == 2) {
  753. c.sendMessage("Administrator can't stake items in duel arena.");
  754. return false;
  755. }
  756. if(itemID == 4740 || itemID == 9244 || itemID == 11212 || itemID == 892 || itemID == 9194 || itemID == 9243 || itemID == 9242 || itemID == 9241 || itemID == 9240 || itemID == 9239 || itemID == 882 || itemID == 884 || itemID == 886 || itemID == 888 || itemID == 890) {
  757. c.sendMessage("You can't stake bolts or arrows.");
  758. return false;
  759. }
  760. if(!c.getItems().playerHasItem(itemID, amount)) {
  761. return false;
  762. }
  763. if (c.playerItems[fromSlot] - 1 != itemID && c.playerItems[fromSlot] != itemID) { // duel dupe fix by Aleksandr
  764. if (c.playerItems[fromSlot] == 0)
  765. return false;
  766. return false;
  767. }
  768. if (amount <= 0)
  769. return false;
  770. Client o = (Client) PlayerHandler.players[c.duelingWith];
  771. if (o == null ) {
  772. declineDuel();
  773. return false;
  774. }
  775. if (o.duelStatus <= 0 || c.duelStatus <= 0) {
  776. declineDuel();
  777. o.getTradeAndDuel().declineDuel();
  778. return false;
  779. }
  780. if (!c.canOffer) {
  781. return false;
  782. }
  783. if(!c.openDuel && !o.openDuel) {
  784. bothDeclineDuel();
  785. return false;
  786. }
  787. changeDuelStuff();
  788. if(!Item.itemStackable[itemID]) {
  789. for(int a = 0; a < amount; a++) {
  790. if(c.getItems().playerHasItem(itemID, 1)) {
  791. stakedItems.add(new GameItem(itemID, 1));
  792. c.getItems().deleteItem(itemID, c.getItems().getItemSlot(itemID), 1);
  793. }
  794. }
  795. c.getItems().resetItems(3214);
  796. c.getItems().resetItems(3322);
  797. o.getItems().resetItems(3214);
  798. o.getItems().resetItems(3322);
  799. refreshDuelScreen();
  800. o.getTradeAndDuel().refreshDuelScreen();
  801. c.getPA().sendFrame126("", 6684);
  802. o.getPA().sendFrame126("", 6684);
  803. }
  804.  
  805. if(!c.getItems().playerHasItem(itemID, amount)) {
  806. return false;
  807. }
  808. if (Item.itemStackable[itemID] || Item.itemIsNote[itemID]) {
  809. boolean found = false;
  810. for (GameItem item : stakedItems) {
  811. if (item.id == itemID) {
  812. found = true;
  813. item.amount += amount;
  814. c.getItems().deleteItem(itemID, fromSlot, amount);
  815. break;
  816. }
  817. }
  818. if (!found) {
  819. c.getItems().deleteItem(itemID, fromSlot, amount);
  820. stakedItems.add(new GameItem(itemID, amount));
  821. }
  822. }
  823.  
  824. c.getItems().resetItems(3214);
  825. c.getItems().resetItems(3322);
  826. o.getItems().resetItems(3214);
  827. o.getItems().resetItems(3322);
  828. refreshDuelScreen();
  829. o.getTradeAndDuel().refreshDuelScreen();
  830. c.getPA().sendFrame126("", 6684);
  831. o.getPA().sendFrame126("", 6684);
  832. return true;
  833. }
  834.  
  835.  
  836. public boolean fromDuel(int itemID, int fromSlot, int amount) {
  837. Client o = (Client) PlayerHandler.players[c.duelingWith];
  838. if (o == null ) {
  839. declineDuel();
  840. return false;
  841. }
  842. if (o.duelStatus <= 0 || c.duelStatus <= 0) {
  843. declineDuel();
  844. o.getTradeAndDuel().declineDuel();
  845. return false;
  846. }
  847. if(Item.itemStackable[itemID]) {
  848. if(c.getItems().freeSlots() - 1 < (c.duelSpaceReq)) {
  849. c.sendMessage("You have too many rules set to remove that item.");
  850. return false;
  851. }
  852. }
  853.  
  854. if(!c.canOffer){
  855. return false;
  856. }
  857.  
  858. changeDuelStuff();
  859. boolean goodSpace = true;
  860. if(!Item.itemStackable[itemID]) {
  861. for(int a = 0; a < amount; a++) {
  862. for (GameItem item : stakedItems) {
  863. if(item.id == itemID) {
  864. if(!item.stackable) {
  865. if(c.getItems().freeSlots() - 1 < (c.duelSpaceReq)) {
  866. goodSpace = false;
  867. break;
  868. }
  869. stakedItems.remove(item);
  870. c.getItems().addItem(itemID, 1);
  871. } else {
  872. if(c.getItems().freeSlots() - 1 < (c.duelSpaceReq)) {
  873. goodSpace = false;
  874. break;
  875. }
  876. if(item.amount > amount) {
  877. item.amount -= amount;
  878. c.getItems().addItem(itemID, amount);
  879. } else {
  880. if(c.getItems().freeSlots() - 1 < (c.duelSpaceReq)) {
  881. goodSpace = false;
  882. break;
  883. }
  884. amount = item.amount;
  885. stakedItems.remove(item);
  886. c.getItems().addItem(itemID, amount);
  887. }
  888. }
  889. break;
  890. }
  891. o.duelStatus = 1;
  892. c.duelStatus = 1;
  893. c.getItems().resetItems(3214);
  894. c.getItems().resetItems(3322);
  895. o.getItems().resetItems(3214);
  896. o.getItems().resetItems(3322);
  897. c.getTradeAndDuel().refreshDuelScreen();
  898. o.getTradeAndDuel().refreshDuelScreen();
  899. o.getPA().sendFrame126("", 6684);
  900. }
  901. }
  902. }
  903.  
  904. for (GameItem item : stakedItems) {
  905. if(item.id == itemID) {
  906. if(!item.stackable) {
  907. } else {
  908. if(item.amount > amount) {
  909. item.amount -= amount;
  910. c.getItems().addItem(itemID, amount);
  911. } else {
  912. amount = item.amount;
  913. stakedItems.remove(item);
  914. c.getItems().addItem(itemID, amount);
  915. }
  916. }
  917. break;
  918. }
  919. }
  920. o.duelStatus = 1;
  921. c.duelStatus = 1;
  922. c.getItems().resetItems(3214);
  923. c.getItems().resetItems(3322);
  924. o.getItems().resetItems(3214);
  925. o.getItems().resetItems(3322);
  926. c.getTradeAndDuel().refreshDuelScreen();
  927. o.getTradeAndDuel().refreshDuelScreen();
  928. o.getPA().sendFrame126("", 6684);
  929. if(!goodSpace) {
  930. c.sendMessage("You have too many rules set to remove that item.");
  931. return true;
  932. }
  933. return true;
  934. }
  935.  
  936. public void confirmDuel() {
  937. Client o = (Client) PlayerHandler.players[c.duelingWith];
  938. if(o == null) {
  939. declineDuel();
  940. return;
  941. }
  942. String itemId = "";
  943. for(GameItem item : stakedItems) {
  944. if(Item.itemStackable[item.id] || Item.itemIsNote[item.id]) {
  945. itemId += c.getItems().getItemName(item.id) + " x " + Misc.format(item.amount) +"\\n";
  946. } else {
  947. itemId += c.getItems().getItemName(item.id) + "\\n";
  948. }
  949. }
  950. c.getPA().sendFrame126(itemId, 6516);
  951. itemId = "";
  952. for(GameItem item : o.getTradeAndDuel().stakedItems) {
  953. if(Item.itemStackable[item.id] || Item.itemIsNote[item.id]) {
  954. itemId += c.getItems().getItemName(item.id) + " x " + Misc.format(item.amount) +"\\n";
  955. } else {
  956. itemId += c.getItems().getItemName(item.id) +"\\n";
  957. }
  958. }
  959. c.getPA().sendFrame126(itemId, 6517);
  960. c.getPA().sendFrame126("", 8242);
  961. for(int i = 8238; i <= 8253; i++) {
  962. c.getPA().sendFrame126("", i);
  963. }
  964. c.getPA().sendFrame126("Hitpoints will be restored.", 8250);
  965. c.getPA().sendFrame126("Boosted stats will be restored.", 8238);
  966. if(c.duelRule[8]) {
  967. c.getPA().sendFrame126("There will be obstacles in the arena.", 8239);
  968. }
  969. c.getPA().sendFrame126("", 8240);
  970. c.getPA().sendFrame126("", 8241);
  971.  
  972. String[] rulesOption = {"Players cannot forfeit!", "Players cannot move.", "Players cannot use range.", "Players cannot use melee.", "Players cannot use magic.", "Players cannot drink pots.", "Players cannot eat food.", "Players cannot use prayer."};
  973.  
  974. int lineNumber = 8242;
  975. for(int i = 0; i < 8; i++) {
  976. if(c.duelRule[i]) {
  977. c.getPA().sendFrame126(""+rulesOption[i], lineNumber);
  978. lineNumber ++;
  979. }
  980. }
  981. c.getPA().sendFrame126("", 6571);
  982. c.getPA().sendFrame248(6412, 197);
  983. //c.getPA().showInterface(6412);
  984. }
  985.  
  986.  
  987.  
  988. public void startDuel() {
  989. c.freezeTimer = 2;
  990. c.getPA().resetFollow();
  991. Client o = (Client) PlayerHandler.players[c.duelingWith];
  992. if (o.disconnected) {
  993. duelVictory();
  994. }
  995. if(o == null) {
  996. duelVictory();
  997. }
  998. c.headIconHints = 2;
  999. c.vengOn = false;
  1000.  
  1001. if(c.duelRule[7]){
  1002. for(int p = 0; p < c.PRAYER.length; p++) { // reset prayer glows
  1003. c.prayerActive[p] = false;
  1004. c.getPA().sendFrame36(c.PRAYER_GLOW[p], 0);
  1005. }
  1006. c.headIcon = -1;
  1007. c.getPA().requestUpdates();
  1008. }
  1009. if(c.duelRule[11]) {
  1010. c.getItems().removeItem(c.playerEquipment[0], 0);
  1011. }
  1012. if(c.duelRule[12]) {
  1013. c.getItems().removeItem(c.playerEquipment[1], 1);
  1014. }
  1015. if(c.duelRule[13]) {
  1016. c.getItems().removeItem(c.playerEquipment[2], 2);
  1017. }
  1018. if(c.duelRule[14]) {
  1019. c.getItems().removeItem(c.playerEquipment[3], 3);
  1020. }
  1021. if(c.duelRule[15]) {
  1022. c.getItems().removeItem(c.playerEquipment[4], 4);
  1023. }
  1024. if(c.duelRule[16]) {
  1025. c.getItems().removeItem(c.playerEquipment[5], 5);
  1026. }
  1027. if(c.duelRule[17]) {
  1028. c.getItems().removeItem(c.playerEquipment[7], 7);
  1029. }
  1030. if(c.duelRule[18]) {
  1031. c.getItems().removeItem(c.playerEquipment[9], 9);
  1032. }
  1033. if(c.duelRule[19]) {
  1034. c.getItems().removeItem(c.playerEquipment[10], 10);
  1035. }
  1036. if(c.duelRule[20]) {
  1037. c.getItems().removeItem(c.playerEquipment[12], 12);
  1038. }
  1039. if(c.duelRule[21]) {
  1040. c.getItems().removeItem(c.playerEquipment[13], 13);
  1041. }
  1042. c.duelStatus = 5;
  1043. c.getPA().removeAllWindows();
  1044. c.specAmount = 10;
  1045. c.getItems().addSpecialBar(c.playerEquipment[c.playerWeapon]);
  1046.  
  1047. if(c.duelRule[8]){
  1048. if(c.duelRule[1]) {
  1049. c.getPA().movePlayer(c.duelTeleX, c.duelTeleY, 0);
  1050. } else {
  1051. c.getPA().movePlayer(3366 + Misc.random(12), 3246 + Misc.random(6), 0);
  1052. }
  1053. } else {
  1054. if(c.duelRule[1]) {
  1055. c.getPA().movePlayer(c.duelTeleX, c.duelTeleY, 0);
  1056. } else {
  1057. c.getPA().movePlayer(3335 + Misc.random(12), 3246 + Misc.random(6), 0);
  1058. }
  1059. }
  1060.  
  1061. c.getPA().createPlayerHints(10, o.playerId);
  1062. c.getPA().showOption(3, 0, "Attack", 1);
  1063. for (int i = 0; i < 20; i++) {
  1064. c.playerLevel[i] = c.getPA().getLevelForXP(c.playerXP[i]);
  1065. c.getPA().refreshSkill(i);
  1066. }
  1067. for(GameItem item : o.getTradeAndDuel().stakedItems) {
  1068. otherStakedItems.add(new GameItem(item.id, item.amount));
  1069. }
  1070. c.getPA().requestUpdates();
  1071. }
  1072.  
  1073.  
  1074. public void duelVictory() {
  1075. Client o = (Client) PlayerHandler.players[c.duelingWith];
  1076. if(o != null) {
  1077. c.getPA().sendFrame126(""+o.combatLevel, 6839);
  1078. c.getPA().sendFrame126(o.playerName, 6840);
  1079. o.duelStatus = 0;
  1080. c.freezeTimer = 3;
  1081. } else {
  1082. c.getPA().sendFrame126("", 6839);
  1083. c.getPA().sendFrame126("", 6840);
  1084. }
  1085. c.duelStatus = 6;
  1086. c.getCombat().resetPrayers();
  1087. for (int i = 0; i < 20; i++) {
  1088. c.playerLevel[i] = c.getPA().getLevelForXP(c.playerXP[i]);
  1089. c.getPA().refreshSkill(i);
  1090. }
  1091. c.getPA().refreshSkill(3);
  1092. //c.getPA().refreshSkill(i);
  1093. c.specAmount = 10;
  1094. c.getItems().addSpecialBar(c.playerEquipment[c.playerWeapon]);
  1095. duelRewardInterface();
  1096. PlayerSave.saveGame(c);
  1097. c.getPA().showInterface(6733);
  1098. c.getPA().movePlayer(3362, 3263, 0);
  1099. c.getPA().requestUpdates();
  1100. c.getPA().showOption(3, 0, "Challenge", 3);
  1101. c.getPA().createPlayerHints(10, -1);
  1102. c.canOffer = true;
  1103. c.duelSpaceReq = 0;
  1104. c.duelingWith = 0;
  1105. c.freezeTimer = 1;
  1106. c.getPA().resetFollow();
  1107. c.getCombat().resetPlayerAttack();
  1108. c.duelRequested = false;
  1109. PlayerSave.saveGame(c);
  1110. PlayerSave.saveGame(o);
  1111. }
  1112.  
  1113.  
  1114. public void duelRewardInterface() {
  1115. synchronized(c) {
  1116. c.getOutStream().createFrameVarSizeWord(53);
  1117. c.getOutStream().writeWord(6822);
  1118. c.getOutStream().writeWord(otherStakedItems.toArray().length);
  1119. for (GameItem item : otherStakedItems) {
  1120. if (item.amount > 254) {
  1121. c.getOutStream().writeByte(255);
  1122. c.getOutStream().writeDWord_v2(item.amount);
  1123. } else {
  1124. c.getOutStream().writeByte(item.amount);
  1125. }
  1126. if (item.id > Config.ITEM_LIMIT || item.id < 0) {
  1127. item.id = Config.ITEM_LIMIT;
  1128. }
  1129. c.getOutStream().writeWordBigEndianA(item.id + 1);
  1130. }
  1131. c.getOutStream().endFrameVarSizeWord();
  1132. c.flushOutStream();
  1133. }
  1134. }
  1135.  
  1136. public void claimStakedItems() {
  1137. for(GameItem item : otherStakedItems) {
  1138. if(item.id > 0 && item.amount > 0) {
  1139. if(Item.itemStackable[item.id]) {
  1140. if(!c.getItems().addItem(item.id, item.amount)) {
  1141. ItemHandler.createGroundItem(c, item.id, c.getX(), c.getY(), item.amount, c.getId());
  1142. }
  1143. } else {
  1144. int amount = item.amount;
  1145. for(int a = 1; a <= amount; a++) {
  1146. if(!c.getItems().addItem(item.id, 1)) {
  1147. ItemHandler.createGroundItem(c, item.id, c.getX(), c.getY(), 1, c.getId());
  1148. }
  1149. }
  1150. }
  1151. }
  1152. }
  1153. for(GameItem item : stakedItems) {
  1154. if(item.id > 0 && item.amount > 0) {
  1155. if(Item.itemStackable[item.id]) {
  1156. if(!c.getItems().addItem(item.id, item.amount)) {
  1157. ItemHandler.createGroundItem(c, item.id, c.getX(), c.getY(), item.amount, c.getId());
  1158. }
  1159. } else {
  1160. int amount = item.amount;
  1161. for(int a = 1; a <= amount; a++) {
  1162. if(!c.getItems().addItem(item.id, 1)) {
  1163. ItemHandler.createGroundItem(c, item.id, c.getX(), c.getY(), 1, c.getId());
  1164. }
  1165. }
  1166. }
  1167. }
  1168. }
  1169. resetDuel();
  1170. resetDuelItems();
  1171. c.duelStatus = 0;
  1172. }
  1173.  
  1174. public void declineDuel() {
  1175. c.getPA().removeAllWindows();
  1176. c.canOffer = true;
  1177. c.duelStatus = 0;
  1178. c.duelingWith = 0;
  1179. c.duelSpaceReq = 0;
  1180. c.duelRequested = false;
  1181. for(GameItem item : stakedItems) {
  1182. if(item.amount < 1) continue;
  1183. if(Item.itemStackable[item.id] || Item.itemIsNote[item.id]) {
  1184. c.getItems().addItem(item.id, item.amount);
  1185. } else {
  1186. c.getItems().addItem(item.id, 1);
  1187. }
  1188. }
  1189. stakedItems.clear();
  1190. for (int i = 0; i < c.duelRule.length; i++) {
  1191. c.duelRule[i] = false;
  1192. }
  1193. }
  1194.  
  1195. public void resetDuel() {
  1196. c.getPA().showOption(3, 0, "Challenge", 3);
  1197. c.headIconHints = 0;
  1198. for (int i = 0; i < c.duelRule.length; i++) {
  1199. c.duelRule[i] = false;
  1200. }
  1201. c.getPA().createPlayerHints(10, -1);
  1202. c.duelStatus = 0;
  1203. c.canOffer = true;
  1204. c.duelSpaceReq = 0;
  1205. c.duelingWith = 0;
  1206. c.freezeTimer = 1;
  1207. c.getPA().resetFollow();
  1208. c.getPA().requestUpdates();
  1209. c.getCombat().resetPlayerAttack();
  1210. c.duelRequested = false;
  1211. }
  1212.  
  1213. public void resetDuelItems() {
  1214. stakedItems.clear();
  1215. otherStakedItems.clear();
  1216. }
  1217.  
  1218. public void changeDuelStuff() {
  1219. Client o = (Client) PlayerHandler.players[c.duelingWith];
  1220. if(o == null) {
  1221. return;
  1222. }
  1223. o.duelStatus = 1;
  1224. c.duelStatus = 1;
  1225. o.getPA().sendFrame126("", 6684);
  1226. c.getPA().sendFrame126("", 6684);
  1227. }
  1228.  
  1229.  
  1230. public void selectRule(int i) { // rules
  1231. Client o = (Client) PlayerHandler.players[c.duelingWith];
  1232. if(o == null) {
  1233. return;
  1234. }
  1235. if (!c.canOffer)
  1236. return;
  1237. changeDuelStuff();
  1238. o.duelSlot = c.duelSlot;
  1239. if(i >= 11 && c.duelSlot > -1) {
  1240. if(c.playerEquipment[c.duelSlot] > 0) {
  1241. if(!c.duelRule[i]) {
  1242. c.duelSpaceReq++;
  1243. } else {
  1244. c.duelSpaceReq--;
  1245. }
  1246. }
  1247. if(o.playerEquipment[o.duelSlot] > 0) {
  1248. if(!o.duelRule[i]) {
  1249. o.duelSpaceReq++;
  1250. } else {
  1251. o.duelSpaceReq--;
  1252. }
  1253. }
  1254. }
  1255.  
  1256. if(i >= 11) {
  1257. if(c.getItems().freeSlots() < (c.duelSpaceReq ) || o.getItems().freeSlots() < (o.duelSpaceReq)) {
  1258. c.sendMessage("You or your opponent don't have the required space to set this rule.");
  1259. if(c.playerEquipment[c.duelSlot] > 0) {
  1260. c.duelSpaceReq--;
  1261. }
  1262. if(o.playerEquipment[o.duelSlot] > 0) {
  1263. o.duelSpaceReq--;
  1264. }
  1265. return;
  1266. }
  1267. }
  1268.  
  1269. if(!c.duelRule[i]) {
  1270. c.duelRule[i] = true;
  1271. c.duelOption += c.DUEL_RULE_ID[i];
  1272. } else {
  1273. c.duelRule[i] = false;
  1274. c.duelOption -= c.DUEL_RULE_ID[i];
  1275. }
  1276.  
  1277. c.getPA().sendFrame87(286, c.duelOption);
  1278. o.duelOption = c.duelOption;
  1279. o.duelRule[i] = c.duelRule[i];
  1280. o.getPA().sendFrame87(286, o.duelOption);
  1281.  
  1282. if(c.duelRule[8]){
  1283. if(c.duelRule[1]) {
  1284. c.duelTeleX = 3366 + Misc.random(12);
  1285. o.duelTeleX = c.duelTeleX-1;
  1286. c.duelTeleY = 3246 + Misc.random(6);
  1287. o.duelTeleY = c.duelTeleY;
  1288. }
  1289. } else {
  1290. if(c.duelRule[1]) {
  1291. c.duelTeleX = 3335 + Misc.random(12);
  1292. o.duelTeleX = c.duelTeleX-1;
  1293. c.duelTeleY = 3246 + Misc.random(6);
  1294. o.duelTeleY = c.duelTeleY;
  1295. }
  1296. }
  1297.  
  1298. }
  1299.  
  1300. }
Advertisement
Add Comment
Please, Sign In to add comment