Advertisement
Guest User

Untitled

a guest
Nov 11th, 2012
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.05 KB | None | 0 0
  1. package server.model.shops;
  2.  
  3. import server.Config;
  4. import server.Server;
  5. import server.model.items.Item;
  6. import server.model.players.Client;
  7.  
  8. public class ShopAssistant {
  9.  
  10. private Client c;
  11.  
  12. public ShopAssistant(Client client) {
  13. this.c = client;
  14. }
  15.  
  16. /**
  17. *Shops
  18. **/
  19.  
  20. public boolean shopSellsItem(int itemID) {
  21. for (int i = 0; i < Server.shopHandler.ShopItems.length; i++) {
  22. if(itemID == (Server.shopHandler.ShopItems[c.myShopId][i] - 1)) {
  23. return true;
  24. }
  25. }
  26. return false;
  27. }
  28.  
  29. public void openShop(int ShopID){
  30. c.getItems().resetItems(3823);
  31. resetShop(ShopID);
  32. c.isShopping = true;
  33. c.myShopId = ShopID;
  34. c.getPA().sendFrame248(3824, 3822);
  35. c.getPA().sendFrame126(Server.shopHandler.ShopName[ShopID], 3901);
  36. }
  37.  
  38. public void updatePlayerShop() {
  39. for (int i = 1; i < Config.MAX_PLAYERS; i++) {
  40. if (Server.playerHandler.players[i] != null) {
  41. if (Server.playerHandler.players[i].isShopping == true && Server.playerHandler.players[i].myShopId == c.myShopId && i != c.playerId) {
  42. Server.playerHandler.players[i].updateShop = true;
  43. }
  44. }
  45. }
  46. }
  47.  
  48. public void updateshop(int i){
  49. resetShop(i);
  50. }
  51.  
  52. public void resetShop(int ShopID) {
  53. synchronized(c) {
  54. int TotalItems = 0;
  55. for (int i = 0; i < Server.shopHandler.MaxShopItems; i++) {
  56. if (Server.shopHandler.ShopItems[ShopID][i] > 0) {
  57. TotalItems++;
  58. }
  59. }
  60. if (TotalItems > Server.shopHandler.MaxShopItems) {
  61. TotalItems = Server.shopHandler.MaxShopItems;
  62. }
  63. c.getOutStream().createFrameVarSizeWord(53);
  64. c.getOutStream().writeWord(3900);
  65. c.getOutStream().writeWord(TotalItems);
  66. int TotalCount = 0;
  67. for (int i = 0; i < Server.shopHandler.ShopItems.length; i++) {
  68. if (Server.shopHandler.ShopItems[ShopID][i] > 0 || i <= Server.shopHandler.ShopItemsStandard[ShopID]) {
  69. if (Server.shopHandler.ShopItemsN[ShopID][i] > 254) {
  70. c.getOutStream().writeByte(255);
  71. c.getOutStream().writeDWord_v2(Server.shopHandler.ShopItemsN[ShopID][i]);
  72. } else {
  73. c.getOutStream().writeByte(Server.shopHandler.ShopItemsN[ShopID][i]);
  74. }
  75. if (Server.shopHandler.ShopItems[ShopID][i] > Config.ITEM_LIMIT || Server.shopHandler.ShopItems[ShopID][i] < 0) {
  76. Server.shopHandler.ShopItems[ShopID][i] = Config.ITEM_LIMIT;
  77. }
  78. c.getOutStream().writeWordBigEndianA(Server.shopHandler.ShopItems[ShopID][i]);
  79. TotalCount++;
  80. }
  81. if (TotalCount > TotalItems) {
  82. break;
  83. }
  84. }
  85. c.getOutStream().endFrameVarSizeWord();
  86. c.flushOutStream();
  87. }
  88. }
  89.  
  90. public double getItemShopValue(int ItemID, int Type, int fromSlot) {
  91. double ShopValue = 1;
  92. double Overstock = 0;
  93. double TotPrice = 0;
  94. for (int i = 0; i < Config.ITEM_LIMIT; i++) {
  95. if (Server.itemHandler.ItemList[i] != null) {
  96. if (Server.itemHandler.ItemList[i].itemId == ItemID) {
  97. ShopValue = Server.itemHandler.ItemList[i].ShopValue;
  98. }
  99. }
  100. }
  101.  
  102. TotPrice = ShopValue;
  103.  
  104. if (Server.shopHandler.ShopBModifier[c.myShopId] == 1) {
  105. TotPrice *= 1;
  106. TotPrice *= 1;
  107. if (Type == 1) {
  108. TotPrice *= 1;
  109. }
  110. } else if (Type == 1) {
  111. TotPrice *= 1;
  112. }
  113. return TotPrice;
  114. }
  115.  
  116. public int getItemShopValue(int itemId) {
  117. for (int i = 0; i < Config.ITEM_LIMIT; i++) {
  118. if (Server.itemHandler.ItemList[i] != null) {
  119. if (Server.itemHandler.ItemList[i].itemId == itemId) {
  120. return (int)Server.itemHandler.ItemList[i].ShopValue;
  121. }
  122. }
  123. }
  124. return 0;
  125. }
  126.  
  127. /**
  128. *buy item from shop (Shop Price)
  129. **/
  130.  
  131. public void buyFromShopPrice(int removeId, int removeSlot){
  132. int ShopValue = (int)Math.floor(getItemShopValue(removeId, 0, removeSlot));
  133. ShopValue *= 1.15;
  134. String ShopAdd = "";
  135. if (c.myShopId == 2 || c.myShopId == 3 && c.myShopId == 4 || c.myShopId == 5 || c.myShopId == 6 || c.myShopId == 7) {
  136. c.sendMessage(c.getItems().getItemName(removeId)+": currently costs " + getSpecialItemValue(removeId) + " points.");
  137. return;
  138. }
  139. if (ShopValue >= 1000 && ShopValue < 1000000) {
  140. ShopAdd = " (" + (ShopValue / 1000) + "K)";
  141. } else if (ShopValue >= 1000000) {
  142. ShopAdd = " (" + (ShopValue / 1000000) + " million)";
  143. }
  144. c.sendMessage(c.getItems().getItemName(removeId)+": currently costs "+String.format("%, d",ShopValue)+" coins"+ShopAdd);
  145. }
  146.  
  147. public int getSpecialItemValue(int id) {
  148. switch (id) {
  149. case 8839:
  150. case 8840:
  151. return 40;
  152. case 8842:
  153. return 15;
  154. case 11663:
  155. case 11664:
  156. case 11665:
  157. return 20;
  158. case 6570:
  159. return 15;
  160. case 6914:
  161. return 15;
  162. case 15441:
  163. case 15442:
  164. case 15443:
  165. case 15444:
  166. case 11718:
  167. case 10548:
  168. case 6889:
  169. return 15;
  170. case 10551:
  171. case 15349:
  172. case 20072:
  173. case 15013:
  174. return 20;
  175. case 13736://Blessed Spirit Shield
  176. case 15486://Staff of light
  177. case 18335://Arcane stream neckalace
  178. return 30;
  179. case 13744://Spectral Spirit Shield
  180. return 50;
  181. case 1038: //phats and masks santa
  182. case 1040:
  183. case 1042:
  184. case 1044:
  185. case 1046:
  186. case 1048:
  187. case 1050:
  188. case 1053:
  189. case 1055:
  190. case 1057:
  191. return 500;
  192. case 18349://Chaotic Rapier
  193. case 18351://Chaotic Longsword
  194. case 18353://Chaotic Maul
  195. case 18355://Chaotic Staff
  196. case 18357://Chaotic crossbow
  197. case 18359://Chaotic KiteShield
  198. case 18361://Eagle-eye shield
  199. case 18363://Farseer kiteshield
  200. return 200000;
  201. case 13738://Arcane Spirit Shield
  202. return 150;
  203. case 13742://Elysian Spirit Shield
  204. return 350;
  205. case 13740://Divine Spirit Shield
  206. return 450;
  207. case 6665: //Flippers
  208. case 6666: //Mudskipper hat
  209. case 19335:
  210. case 8950:
  211. return 5;
  212. case 13661:
  213. return 5;
  214. case 1037: //Bunny ears
  215. return 10;
  216. }
  217. return 100;
  218. }
  219.  
  220.  
  221. /**
  222. *Sell item to shop (Shop Price)
  223. **/
  224. public void sellToShopPrice(int removeId, int removeSlot) {
  225. for (int i : Config.ITEM_SELLABLE) {
  226. if (c.playerRights == 2 && Config.ADMIN_CAN_SELL_ITEMS == false) {
  227. c.sendMessage("You can't sell "+c.getItems().getItemName(removeId).toLowerCase()+".");
  228. return;
  229. }
  230. if (i == removeId) {
  231. c.sendMessage("You can't sell "+c.getItems().getItemName(removeId).toLowerCase()+".");
  232. return;
  233. }
  234. }
  235. if (c.myShopId == 2) {
  236. c.sendMessage("You can't sell anything to this store.");
  237. return;
  238. }
  239. if (c.myShopId == 3) {
  240. c.sendMessage("You can't sell anything to this store.");
  241. return;
  242. }
  243. if (c.myShopId == 4) {
  244. c.sendMessage("You can't sell anything to this store.");
  245. return;
  246. }
  247. if (c.myShopId == 5) {
  248. c.sendMessage("You can't sell anything to this store.");
  249. return;
  250. }
  251. if (c.myShopId == 6) {
  252. c.sendMessage("You can't sell anything to this store.");
  253. return;
  254. }
  255. if (c.myShopId == 7) {
  256. c.sendMessage("You can't sell anything to this store.");
  257. return;
  258. }
  259. boolean IsIn = false;
  260. if (Server.shopHandler.ShopSModifier[c.myShopId] > 1) {
  261. for (int j = 0; j <= Server.shopHandler.ShopItemsStandard[c.myShopId]; j++) {
  262. if (removeId == (Server.shopHandler.ShopItems[c.myShopId][j] - 1)) {
  263. IsIn = true;
  264. break;
  265. }
  266. }
  267. } else {
  268. IsIn = true;
  269. }
  270. if (IsIn == false) {
  271. c.sendMessage("You can't sell "+c.getItems().getItemName(removeId).toLowerCase()+" to this store.");
  272. } else {
  273. int ShopValue = (int)Math.floor(getItemShopValue(removeId, 1, removeSlot));
  274. String ShopAdd = "";
  275. if (ShopValue >= 1000 && ShopValue < 1000000) {
  276. ShopAdd = " (" + (ShopValue / 1000) + "K)";
  277. } else if (ShopValue >= 1000000) {
  278. ShopAdd = " (" + (ShopValue / 1000000) + " million)";
  279. }
  280. c.sendMessage(c.getItems().getItemName(removeId)+": shop will buy for "+ShopValue+" coins"+ShopAdd);
  281. }
  282. }
  283.  
  284. public boolean sellItem(int itemID, int fromSlot, int amount) {
  285. if (c.playerRights == 2 && Config.ADMIN_CAN_SELL_ITEMS == false) {
  286. c.sendMessage("You can't sell "+c.getItems().getItemName(itemID).toLowerCase()+".");
  287. return false;
  288. }
  289. if (c.myShopId == 14 || c.myShopId == 3)
  290. return false;
  291. for (int i : Config.ITEM_SELLABLE) {
  292. if (i == itemID) {
  293. c.sendMessage("You can't sell "+c.getItems().getItemName(itemID).toLowerCase()+".");
  294. return false;
  295. }
  296. }
  297. if (c.myShopId == 2) {
  298. c.sendMessage("You can't sell anything to this store.");
  299. return false;
  300. }
  301. if (c.myShopId == 3) {
  302. c.sendMessage("You can't sell anything to this store.");
  303. return false;
  304. }
  305. if (c.myShopId == 4) {
  306. c.sendMessage("You can't sell anything to this store.");
  307. return false;
  308. }
  309. if (c.myShopId == 5) {
  310. c.sendMessage("You can't sell anything to this store.");
  311. return false;
  312. }
  313. if (c.myShopId == 6) {
  314. c.sendMessage("You can't sell anything to this store.");
  315. return false;
  316. }
  317. if (c.myShopId == 7) {
  318. c.sendMessage("You can't sell anything to this store.");
  319. return false;
  320. }
  321. if(c.playerRights == 2 && !Config.ADMIN_CAN_SELL_ITEMS) {
  322. c.sendMessage("Selling items as an admin has been disabled.");
  323. return false;
  324. }
  325.  
  326. if (amount > 0 && itemID == (c.playerItems[fromSlot] - 1)) {
  327. if (Server.shopHandler.ShopSModifier[c.myShopId] > 1) {
  328. boolean IsIn = false;
  329. for (int i = 0; i <= Server.shopHandler.ShopItemsStandard[c.myShopId]; i++) {
  330. if (itemID == (Server.shopHandler.ShopItems[c.myShopId][i] - 1)) {
  331. IsIn = true;
  332. break;
  333. }
  334. }
  335. if (IsIn == false) {
  336. c.sendMessage("You can't sell "+c.getItems().getItemName(itemID).toLowerCase()+" to this store.");
  337. return false;
  338. }
  339. }
  340.  
  341. if (amount > c.playerItemsN[fromSlot] && (Item.itemIsNote[(c.playerItems[fromSlot] - 1)] == true || Item.itemStackable[(c.playerItems[fromSlot] - 1)] == true)) {
  342. amount = c.playerItemsN[fromSlot];
  343. } else if (amount > c.getItems().getItemAmount(itemID) && Item.itemIsNote[(c.playerItems[fromSlot] - 1)] == false && Item.itemStackable[(c.playerItems[fromSlot] - 1)] == false) {
  344. amount = c.getItems().getItemAmount(itemID);
  345. }
  346. //double ShopValue;
  347. //double TotPrice;
  348. int TotPrice2 = 0;
  349. //int Overstock;
  350. for (int i = amount; i > 0; i--) {
  351. TotPrice2 = (int)Math.floor(getItemShopValue(itemID, 1, fromSlot));
  352. if (c.getItems().freeSlots() > 0 || c.getItems().playerHasItem(995)) {
  353. if (Item.itemIsNote[itemID] == false) {
  354. c.getItems().deleteItem(itemID, c.getItems().getItemSlot(itemID), 1);
  355. } else {
  356. c.getItems().deleteItem(itemID, fromSlot, 1);
  357. }
  358. c.getItems().addItem(995, TotPrice2);
  359. addShopItem(itemID, 1);
  360. } else {
  361. c.sendMessage("You don't have enough space in your inventory.");
  362. break;
  363. }
  364. }
  365. c.getItems().resetItems(3823);
  366. resetShop(c.myShopId);
  367. updatePlayerShop();
  368. return true;
  369. }
  370. return true;
  371. }
  372.  
  373. public boolean addShopItem(int itemID, int amount) {
  374. boolean Added = false;
  375. if (amount <= 0) {
  376. return false;
  377. }
  378. if (Item.itemIsNote[itemID] == true) {
  379. itemID = c.getItems().getUnnotedItem(itemID);
  380. }
  381. for (int i = 0; i < Server.shopHandler.ShopItems.length; i++) {
  382. if ((Server.shopHandler.ShopItems[c.myShopId][i] - 1) == itemID) {
  383. Server.shopHandler.ShopItemsN[c.myShopId][i] += amount;
  384. Added = true;
  385. }
  386. }
  387. if (Added == false) {
  388. for (int i = 0; i < Server.shopHandler.ShopItems.length; i++) {
  389. if (Server.shopHandler.ShopItems[c.myShopId][i] == 0) {
  390. Server.shopHandler.ShopItems[c.myShopId][i] = (itemID + 1);
  391. Server.shopHandler.ShopItemsN[c.myShopId][i] = amount;
  392. Server.shopHandler.ShopItemsDelay[c.myShopId][i] = 0;
  393. break;
  394. }
  395. }
  396. }
  397. return true;
  398. }
  399.  
  400. public boolean buyItem(int itemID, int fromSlot, int amount) {
  401. if (itemID != itemID)
  402. return false;
  403. if (Server.shopHandler.ShopItems[c.myShopId][fromSlot]-1 != itemID && c.myShopId != 14) {
  404. return false;
  405. }
  406. if(!shopSellsItem(itemID))
  407. return false;
  408. if (c.myShopId == 15) {
  409. buyVoid(itemID);
  410. return false;
  411. }
  412. if(!shopSellsItem(itemID))
  413. return false;
  414. if (amount > 0) {
  415. if (amount > Server.shopHandler.ShopItemsN[c.myShopId][fromSlot]) {
  416. amount = Server.shopHandler.ShopItemsN[c.myShopId][fromSlot];
  417. }
  418. //double ShopValue;
  419. //double TotPrice;
  420. int TotPrice2 = 0;
  421. //int Overstock;
  422. int Slot = 0;
  423. int Slot1 = 0;//Tokkul
  424. int Slot2 = 0;//Slayer Points
  425. int Slot3 = 0;//Donator Gold\
  426. for (int i = amount; i > 0; i--) {
  427. TotPrice2 = (int)Math.floor(getItemShopValue(itemID, 0, fromSlot));
  428. Slot = c.getItems().getItemSlot(995);
  429. Slot1 = c.getItems().getItemSlot(6529);
  430. if (c.myShopId == 2 || c.myShopId == 3 && c.myShopId == 4 || c.myShopId == 5 || c.myShopId == 6) {
  431. handleOtherShop(itemID);
  432. return false;
  433. }
  434. if (Slot == -1 && c.myShopId != 14 && c.myShopId != 29 && c.myShopId != 30 && c.myShopId != 31 && c.myShopId != 47) {
  435. c.sendMessage("You don't have enough coins.");
  436. break;
  437. }
  438. if(Slot1 == -1 && c.myShopId == 29 || c.myShopId == 30 || c.myShopId == 31) {
  439. c.sendMessage("You don't have enough tokkul.");
  440. break;
  441. }
  442. if(TotPrice2 <= 1) {
  443. TotPrice2 = (int)Math.floor(getItemShopValue(itemID, 0, fromSlot));
  444. TotPrice2 *= 1.66;
  445. }
  446. if(c.myShopId == 29 || c.myShopId == 30 || c.myShopId == 31) {
  447. if (c.playerItemsN[Slot1] >= TotPrice2) {
  448. if (c.getItems().freeSlots() > 0) {
  449. //buyDelay = System.currentTimeMillis();
  450. c.getItems().deleteItem(6529, c.getItems().getItemSlot(6529), TotPrice2);
  451. c.getItems().addItem(itemID, 1);
  452. Server.shopHandler.ShopItemsN[c.myShopId][fromSlot] -= 1;
  453. Server.shopHandler.ShopItemsDelay[c.myShopId][fromSlot] = 0;
  454. if ((fromSlot + 1) > Server.shopHandler.ShopItemsStandard[c.myShopId]) {
  455. Server.shopHandler.ShopItems[c.myShopId][fromSlot] = 0;
  456. }
  457. } else {
  458. c.sendMessage("You don't have enough space in your inventory.");
  459. break;
  460. }
  461. } else {
  462. c.sendMessage("You don't have enough tokkul.");
  463. break;
  464. }
  465. } else if(c.myShopId != 14 && c.myShopId != 29 || c.myShopId != 30 || c.myShopId != 31 || c.myShopId != 47) {
  466. if (c.playerItemsN[Slot] >= TotPrice2) {
  467. if (c.getItems().freeSlots() > 0) {
  468. //buyDelay = System.currentTimeMillis();
  469. c.getItems().deleteItem(995, c.getItems().getItemSlot(995), TotPrice2);
  470. c.getItems().addItem(itemID, 1);
  471. Server.shopHandler.ShopItemsN[c.myShopId][fromSlot] -= 1;
  472. Server.shopHandler.ShopItemsDelay[c.myShopId][fromSlot] = 0;
  473. if ((fromSlot + 1) > Server.shopHandler.ShopItemsStandard[c.myShopId]) {
  474. Server.shopHandler.ShopItems[c.myShopId][fromSlot] = 0;
  475. }
  476. } else {
  477. c.sendMessage("You don't have enough space in your inventory.");
  478. break;
  479. }
  480. } else {
  481. c.sendMessage("You don't have enough coins.");
  482. break;
  483. if(c.myShopId == 14) {
  484. if (c.slayerPoints >= TotPrice2) {
  485. if (c.getItems().freeSlots() > 0) {
  486. c.slayerPoints -= TotPrice2;
  487. c.getItems().addItem(itemID, 1);
  488. Server.shopHandler.ShopItemsN[c.myShopId][fromSlot] -= 1;
  489. Server.shopHandler.ShopItemsDelay[c.myShopId][fromSlot] = 0;
  490. if ((fromSlot + 1) > Server.shopHandler.ShopItemsStandard[c.myShopId]) {
  491. Server.shopHandler.ShopItems[c.myShopId][fromSlot] = 0;
  492. }
  493. } else {
  494. c.sendMessage("You don't have enough space in your inventory.");
  495. break;
  496. }
  497. } else {
  498. c.sendMessage("You don't have enough Slayer Points.");
  499. break;
  500. }
  501. }
  502. }
  503. }
  504. }
  505. c.getItems().resetItems(3823);
  506. resetShop(c.myShopId);
  507. updatePlayerShop();
  508. return true;
  509. }
  510. return false;
  511. }
  512.  
  513. public void handleOtherShop(int itemID) {
  514. if (c.myShopId == 6) {
  515. if (c.magePoints >= getSpecialItemValue(itemID)) {
  516. if (c.getItems().freeSlots() > 0){
  517. c.magePoints -= getSpecialItemValue(itemID);
  518. c.getItems().addItem(itemID,1);
  519. c.getItems().resetItems(3823);
  520. }
  521. } else {
  522. c.sendMessage("You do not have enough mage points to buy this item.");
  523. }
  524. } else if (c.myShopId == 2) { //Vote points shop
  525. if (c.votingPoints >= getSpecialItemValue(itemID)) {
  526. if (c.getItems().freeSlots() > 0){
  527. c.votingPoints -= getSpecialItemValue(itemID);
  528. c.getItems().addItem(itemID,1);
  529. c.getItems().resetItems(3823);
  530. }
  531. } else {
  532. c.sendMessage("You do not have enough Voting points.");
  533. }
  534. } else if (c.myShopId == 3) { // Pk points shop
  535. if (c.pkp >= getSpecialItemValue(itemID)) {
  536. if (c.getItems().freeSlots() > 0){
  537. c.pkp -= getSpecialItemValue(itemID);
  538. c.getItems().addItem(itemID,1);
  539. c.getItems().resetItems(3823);
  540. }
  541. } else {
  542. c.sendMessage("You do not have enough Pk Points.");
  543. }
  544. } else if (c.myShopId == 4) { //Pest points shop
  545. if (c.pcPoints >= getSpecialItemValue(itemID)) {
  546. if (c.getItems().freeSlots() > 0){
  547. c.pcPoints -= getSpecialItemValue(itemID);
  548. c.getItems().addItem(itemID,1);
  549. c.getItems().resetItems(3823);
  550. }
  551. } else {
  552. c.sendMessage("You do not have enough pest points to buy this item.");
  553. }
  554. }
  555. }
  556.  
  557. public void openVoid() {
  558. /*synchronized(c) {
  559. c.getItems().resetItems(3823);
  560. c.isShopping = true;
  561. c.myShopId = 15;
  562. c.getPA().sendFrame248(3824, 3822);
  563. c.getPA().sendFrame126("Void Recovery", 3901);
  564.  
  565. int TotalItems = 5;
  566. c.getOutStream().createFrameVarSizeWord(53);
  567. c.getOutStream().writeWord(3900);
  568. c.getOutStream().writeWord(TotalItems);
  569. for (int i = 0; i < c.voidStatus.length; i++) {
  570. c.getOutStream().writeByte(c.voidStatus[i]);
  571. c.getOutStream().writeWordBigEndianA(2519 + i * 2);
  572. }
  573. c.getOutStream().endFrameVarSizeWord();
  574. c.flushOutStream();
  575. }*/
  576. }
  577.  
  578. public void buyVoid(int item) {
  579. /*if (item > 2527 || item < 2518)
  580. return;
  581. //c.sendMessage("" + item);
  582. if (c.voidStatus[(item-2518)/2] > 0) {
  583. if (c.getItems().freeSlots() >= 1) {
  584. if (c.getItems().playerHasItem(995,c.getItems().getUntradePrice(item))) {
  585. c.voidStatus[(item-2518)/2]--;
  586. c.getItems().deleteItem(995,c.getItems().getItemSlot(995), c.getItems().getUntradePrice(item));
  587. c.getItems().addItem(item,1);
  588. openVoid();
  589. } else {
  590. c.sendMessage("This item costs " + c.getItems().getUntradePrice(item) + " coins to rebuy.");
  591. }
  592. } else {
  593. c.sendMessage("I should have a free inventory space.");
  594. }
  595. } else {
  596. c.sendMessage("I don't need to recover this item from the void knights.");
  597. }*/
  598. }
  599.  
  600.  
  601. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement