armark1ng

Untitled

Apr 11th, 2016
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.23 KB | None | 0 0
  1. package com.rs.game.player;
  2.  
  3. import java.io.Serializable;
  4. import java.util.HashMap;
  5. import java.util.Map;
  6. import java.util.concurrent.CopyOnWriteArrayList;
  7.  
  8. import com.rs.cache.loaders.ItemDefinitions;
  9. import com.rs.game.item.Item;
  10. import com.rs.game.item.ItemsContainer;
  11. import com.rs.game.player.content.ItemConstants;
  12. import com.rs.net.decoders.WorldPacketsDecoder;
  13. import com.rs.utils.ItemExamines;
  14. import com.rs.utils.Utils;
  15.  
  16. public class PlayerOwnedShop implements Serializable {
  17.  
  18. /**
  19. *
  20. */
  21. private static final long serialVersionUID = 3420304334072174474L;
  22.  
  23. public static int MAXIMUM_PLAYER_SHOP_ITEMS = 24;
  24.  
  25. private transient Player player;
  26.  
  27. private Map<Integer, Integer> storeItemsPrices;
  28.  
  29. private ItemsContainer<Item> storeItems;
  30.  
  31. private transient CopyOnWriteArrayList<Player> viewingPlayers;
  32.  
  33. private boolean locked;
  34.  
  35. public PlayerOwnedShop() {
  36. storeItems = new ItemsContainer<>(MAXIMUM_PLAYER_SHOP_ITEMS, true);
  37. storeItemsPrices = new HashMap<Integer, Integer>(
  38. MAXIMUM_PLAYER_SHOP_ITEMS);
  39. }
  40.  
  41. public void openPlayerShop() {
  42. player.getTemporaryAttributtes().put("POS", this);
  43. player.getInterfaceManager().sendInterface(1284);
  44. player.getInterfaceManager().sendInventoryInterface(628);
  45. player.getPackets().sendIComponentText(1284, 28, "My Shop");
  46. player.getPackets().sendIComponentText(1284, 46,
  47. "Shop is " + (locked ? "Locked" : "Unlocked"));
  48. player.getPackets().sendHideIComponent(1284, 8, true);
  49. player.getPackets().sendHideIComponent(1284, 9, true);
  50. player.getPackets().sendInterSetItemsOptionsScript(1284, 7, 100, 8, 3,
  51. "Value", "Edit Price", "Remove 1", "Remove 5", "Remove X",
  52. "Remove All", "Examine");
  53. player.getPackets().sendUnlockIComponentOptionSlots(1284, 7, 0, 10, 0,
  54. 1, 2, 3, 4, 5, 6);
  55. player.getPackets().sendIComponentSettings(628, 0, 0, 27, 1278);
  56. player.getPackets().sendUnlockIComponentOptionSlots(628, 0, 0, 27, 0,
  57. 1, 2, 3, 4, 5);
  58. player.getPackets().sendInterSetItemsOptionsScript(628, 0, 93, 4, 7,
  59. "Add 1", "Add 5", "Add 10", "Add X", "Add All", "Examine");
  60. player.getPackets().sendItems(100, storeItems);
  61. viewingPlayers.add(player);
  62. player.setCloseInterfacesEvent(new Runnable() {
  63. @Override
  64. public void run() {
  65. player.getTemporaryAttributtes().remove("POS");
  66. player.setCloseInterfacesEvent(null);
  67. player.closeInterfaces();
  68. viewingPlayers.remove(player);
  69. }
  70. });
  71. }
  72.  
  73. public void showMyShopToPlayer(final Player customer) {
  74. customer.getTemporaryAttributtes().put("POS", this);
  75. customer.getInterfaceManager().sendInterface(1284);
  76. customer.getPackets().sendIComponentText(1284, 28,
  77. player.getDisplayName() + "'s Shop");
  78. customer.getPackets().sendHideIComponent(1284, 8, true);
  79. customer.getPackets().sendHideIComponent(1284, 9, true);
  80. customer.getPackets().sendHideIComponent(1284, 10, true);
  81. customer.getPackets().sendInterSetItemsOptionsScript(1284, 7, 100, 8,
  82. 3, "Value", "Buy 1", "Buy 5", "Buy X", "Buy All", "Examine");
  83. customer.getPackets().sendUnlockIComponentOptionSlots(1284, 7, 0, 10,
  84. 0, 1, 2, 3, 4, 5);
  85. customer.getPackets().sendItems(100, storeItems);
  86. viewingPlayers.add(customer);
  87. customer.setCloseInterfacesEvent(new Runnable() {
  88. @Override
  89. public void run() {
  90. customer.getTemporaryAttributtes().remove("POS");
  91. customer.setCloseInterfacesEvent(null);
  92. customer.closeInterfaces();
  93. viewingPlayers.remove(customer);
  94. }
  95. });
  96. }
  97.  
  98. public boolean handleButtonClick(Player customer, int interfaceId,
  99. int componentId, int slotId, int slotId2, int packetId) {
  100. if (getPlayer().getUsername().equalsIgnoreCase(customer.getUsername())) {
  101. switch (interfaceId) {
  102. case 628:
  103. switch (packetId) {
  104. case WorldPacketsDecoder.ACTION_BUTTON1_PACKET:
  105. case WorldPacketsDecoder.ACTION_BUTTON2_PACKET:
  106. case WorldPacketsDecoder.ACTION_BUTTON3_PACKET:
  107. case WorldPacketsDecoder.ACTION_BUTTON5_PACKET:
  108. int amount = packetId == WorldPacketsDecoder.ACTION_BUTTON1_PACKET ? 1
  109. : packetId == WorldPacketsDecoder.ACTION_BUTTON2_PACKET ? 5
  110. : packetId == WorldPacketsDecoder.ACTION_BUTTON3_PACKET ? 10
  111. : player.getInventory()
  112. .getAmountOf(slotId2);
  113. if (storeItems.containsOne(new Item(slotId2))) {
  114. addItem(slotId2, amount, storeItemsPrices.get(slotId2));
  115. return true;
  116. }
  117. player.getPackets().sendInputIntegerScript(
  118. "Choose price for the item: ");
  119. player.getTemporaryAttributtes().put("POS_ChoosePrice",
  120. new Object[] { slotId2, amount });
  121. return true;
  122. case WorldPacketsDecoder.ACTION_BUTTON4_PACKET:
  123. player.getPackets().sendInputIntegerScript(
  124. "Choose How many would you like to add: ");
  125. player.getTemporaryAttributtes().put("POS_ChooseAmount",
  126. slotId2);
  127. return true;
  128. case WorldPacketsDecoder.ACTION_BUTTON9_PACKET:
  129. player.getInventory().sendExamine(slotId);
  130. return true;
  131. }
  132. break;
  133. case 1284:
  134. if (componentId == 10) {
  135. toggleLocked();
  136. for (Player p : viewingPlayers) {
  137. if (p == null)
  138. continue;
  139. p.getPackets().sendGameMessage(
  140. "Shop is currently : "
  141. + (isLocked() ? "Locked" : "Unlocked")
  142. + " .");
  143. }
  144. return true;
  145. }
  146. switch (packetId) {
  147. case WorldPacketsDecoder.ACTION_BUTTON1_PACKET:
  148. int price = storeItemsPrices.get(slotId2);
  149. player.getPackets().sendGameMessage(
  150. "Current price for item : "
  151. + ItemDefinitions.getItemDefinitions(
  152. slotId2).getName()
  153. + " is <col=00ffff>"
  154. + Utils.getFormattedNumber(price)
  155. + "</col> coins.");
  156. return true;
  157. case WorldPacketsDecoder.ACTION_BUTTON2_PACKET:
  158. player.getPackets().sendInputIntegerScript(
  159. "Choose new price for the item: ");
  160. player.getTemporaryAttributtes().put("POS_ChooseNewPrice",
  161. slotId2);
  162. return true;
  163. case WorldPacketsDecoder.ACTION_BUTTON3_PACKET:
  164. case WorldPacketsDecoder.ACTION_BUTTON4_PACKET:
  165. case WorldPacketsDecoder.ACTION_BUTTON9_PACKET:
  166. int quantity = packetId == WorldPacketsDecoder.ACTION_BUTTON3_PACKET ? 1
  167. : packetId == WorldPacketsDecoder.ACTION_BUTTON4_PACKET ? 5
  168. : storeItems.getNumberOf(slotId2);
  169. removeItem(slotId, quantity);
  170. return true;
  171. case WorldPacketsDecoder.ACTION_BUTTON5_PACKET:
  172. player.getPackets().sendInputIntegerScript(
  173. "Choose How many would you like to remove: ");
  174. player.getTemporaryAttributtes().put(
  175. "POS_ChooseAmountRemove", slotId);
  176. return true;
  177. case WorldPacketsDecoder.ACTION_BUTTON6_PACKET:
  178. sendExamine(player, slotId);
  179. return true;
  180. }
  181. }
  182. return false;
  183. } else {
  184. if (player == null || player.isDead()) {
  185. customer.getPackets().sendGameMessage(
  186. "Seems like the owner of the shop went offline please try again later.");
  187. return false;
  188. }
  189. switch (packetId) {
  190. case WorldPacketsDecoder.ACTION_BUTTON1_PACKET:
  191. int price = storeItemsPrices.get(slotId2);
  192. customer.getPackets().sendGameMessage(
  193. "Current price for item : "
  194. + ItemDefinitions.getItemDefinitions(slotId2)
  195. .getName() + " is <col=00ffff>"
  196. + Utils.getFormattedNumber(price)
  197. + "</col> coins.");
  198. return true;
  199. case WorldPacketsDecoder.ACTION_BUTTON2_PACKET:
  200. case WorldPacketsDecoder.ACTION_BUTTON3_PACKET:
  201. case WorldPacketsDecoder.ACTION_BUTTON5_PACKET:
  202. if (isLocked()) {
  203. customer.getPackets().sendGameMessage(
  204. "You can't buy items while the shop is locked.");
  205. return true;
  206. }
  207. int quantity = packetId == WorldPacketsDecoder.ACTION_BUTTON2_PACKET ? 1
  208. : packetId == WorldPacketsDecoder.ACTION_BUTTON3_PACKET ? 5
  209. : storeItems.getNumberOf(slotId2);
  210. buy(customer, slotId, quantity);
  211. return true;
  212. case WorldPacketsDecoder.ACTION_BUTTON4_PACKET:
  213. if (isLocked()) {
  214. customer.getPackets().sendGameMessage(
  215. "You can't buy items while the shop is locked.");
  216. return true;
  217. }
  218. customer.getPackets().sendInputIntegerScript(
  219. "Choose How many would you like to buy: ");
  220. customer.getTemporaryAttributtes().put("POS_ChooseAmountBuy",
  221. slotId);
  222. return true;
  223. case WorldPacketsDecoder.ACTION_BUTTON9_PACKET:
  224. sendExamine(customer, slotId);
  225. return true;
  226. }
  227. return false;
  228. }
  229. }
  230.  
  231. public boolean buy(Player customer, int slotId, int quantity) {
  232. Item item = storeItems.get(slotId);
  233. if (item == null)
  234. return false;
  235. if (item.getAmount() == 0) {
  236. customer.getPackets().sendGameMessage(
  237. "There is no stock of that item at the moment.");
  238. return false;
  239. }
  240. int price = storeItemsPrices.get(item.getId());
  241. int amountCoins = customer.getInventory().getAmountOf(995);
  242. int maxQuantity = amountCoins / price;
  243. int buyQ = item.getAmount() > quantity ? quantity : item.getAmount();
  244. boolean enoughCoins = maxQuantity >= buyQ;
  245. if (!enoughCoins) {
  246. customer.getPackets().sendGameMessage(
  247. "You don't have enough "
  248. + ItemDefinitions.getItemDefinitions(995).getName()
  249. .toLowerCase() + ".");
  250. buyQ = maxQuantity;
  251. } else if (quantity > buyQ)
  252. customer.getPackets().sendGameMessage(
  253. "The shop has run out of stock.");
  254. if (item.getDefinitions().isStackable()) {
  255. if (customer.getInventory().getFreeSlots() < 1) {
  256. customer.getPackets().sendGameMessage(
  257. "Not enough space in your inventory.");
  258. return false;
  259. }
  260. } else {
  261. int freeSlots = customer.getInventory().getFreeSlots();
  262. if (buyQ > freeSlots) {
  263. buyQ = freeSlots;
  264. customer.getPackets().sendGameMessage(
  265. "Not enough space in your inventory.");
  266. }
  267. }
  268. if (buyQ != 0) {
  269. int totalPrice = price * buyQ;
  270. if (customer.getInventory().containsItem(995, totalPrice)){
  271. customer.getInventory().deleteItem(995,totalPrice);
  272. customer.getInventory().addItem(item.getId(), buyQ);
  273. player.getBank().addItem(995, totalPrice, true);
  274. player.getPackets()
  275. .sendGameMessage(
  276. customer.getDisplayName()
  277. + " has just bought "
  278. + buyQ
  279. + " X "
  280. + item.getDefinitions().getName()
  281. + " for "
  282. + Utils.getFormattedNumber(totalPrice)
  283. + "</col> coins the money has been added to your bank.");
  284. Item[] itemsBefore = storeItems.getItemsCopy();
  285. storeItems.remove(slotId, new Item(item.getId(), buyQ));
  286. if (!storeItems.containsOne(item))
  287. storeItemsPrices.remove(item.getId());
  288. refreshItems(itemsBefore);
  289. refreshShop();
  290. }
  291. }
  292. return true;
  293. }
  294.  
  295. public static void sendExamine(Player player, int slotId) {
  296. PlayerOwnedShop POS = (PlayerOwnedShop) player
  297. .getTemporaryAttributtes().get("POS");
  298. if (POS == null)
  299. return;
  300. if (slotId >= POS.getStoreItems().getSize())
  301. return;
  302. Item item = POS.getStoreItems().get(slotId);
  303. if (item == null)
  304. return;
  305. player.getPackets().sendGameMessage(ItemExamines.getExamine(item));
  306. }
  307.  
  308. public boolean addItem(int itemId, int amount, int price) {
  309. return addItem(new Item(itemId, amount), price);
  310. }
  311.  
  312. public boolean addItem(Item item, int price) {
  313. if (storeItems.getFreeSlots() == 0) {
  314. player.getPackets().sendGameMessage("Your shop is currently full.");
  315. return false;
  316. }
  317. if (!ItemConstants.isTradeable(item) || item.getId() == 995) {
  318. player.getPackets().sendGameMessage("That item cannot be added!");
  319. return false;
  320. }
  321. Item[] itemsBefore = storeItems.getItemsCopy();
  322. int invAmount = player.getInventory().getAmountOf(item.getId());
  323. int storeAmount = storeItems.getNumberOf(item);
  324. if (item.getAmount() > invAmount)
  325. item.setAmount(invAmount);
  326. if (invAmount != 0 && storeAmount + item.getAmount() <= 0) {
  327. item.setAmount(Integer.MAX_VALUE - storeAmount);
  328. player.getPackets().sendGameMessage(
  329. "Not enough space in your store.");
  330. }
  331. if (item.getAmount() == 0)
  332. return false;
  333. if (!storeItems.add(item)) {
  334. player.getPackets().sendGameMessage("Not enough space in store.");
  335. return false;
  336. }
  337. player.getInventory().deleteItem(item);
  338. storeItemsPrices.put(item.getId(), price);
  339. refreshItems(itemsBefore);
  340. refreshShop();
  341. return true;
  342. }
  343.  
  344. public boolean removeItem(int slotId, int quantity) {
  345. Item item = storeItems.get(slotId);
  346. if (item == null)
  347. return false;
  348. if (quantity == 0)
  349. return false;
  350. Item[] itemsBefore = storeItems.getItemsCopy();
  351. int maxAmount = storeItems.getNumberOf(item);
  352. item = new Item(item.getId(), quantity < maxAmount ? quantity
  353. : maxAmount);
  354. if (!player.getInventory().addItem(item))
  355. return false;
  356. storeItems.remove(slotId, item);
  357. if (!storeItems.containsOne(item))
  358. storeItemsPrices.remove(item.getId());
  359. refreshItems(itemsBefore);
  360. refreshShop();
  361. return true;
  362. }
  363.  
  364. private void refreshItems(Item[] itemsBefore) {
  365. int[] changedSlots = new int[itemsBefore.length];
  366. int count = 0;
  367. for (int index = 0; index < itemsBefore.length; index++) {
  368. Item item = storeItems.getItems()[index];
  369. if (itemsBefore[index] != item) {
  370. changedSlots[count++] = index;
  371. }
  372. }
  373. int[] finalChangedSlots = new int[count];
  374. System.arraycopy(changedSlots, 0, finalChangedSlots, 0, count);
  375. refresh(finalChangedSlots);
  376. }
  377.  
  378. private void refresh(int... slots) {
  379. for (Player player : viewingPlayers) {
  380. if (player == null)
  381. continue;
  382. player.getPackets().sendUpdateItems(100, storeItems, slots);
  383. }
  384. }
  385.  
  386. public void refreshShop() {
  387. for (Player player : viewingPlayers) {
  388. if (player == null)
  389. continue;
  390. player.getPackets().sendItems(100, storeItems);
  391. }
  392. }
  393.  
  394. public Player getPlayer() {
  395. return player;
  396. }
  397.  
  398. public void setPlayer(Player player) {
  399. this.player = player;
  400. viewingPlayers = new CopyOnWriteArrayList<Player>();
  401. }
  402.  
  403. public Map<Integer, Integer> getStoreItemsPrices() {
  404. return storeItemsPrices;
  405. }
  406.  
  407. public ItemsContainer<Item> getStoreItems() {
  408. return storeItems;
  409. }
  410.  
  411. public CopyOnWriteArrayList<Player> getViewingPlayers() {
  412. return viewingPlayers;
  413. }
  414.  
  415. public boolean isLocked() {
  416. return locked || player == null;
  417. }
  418.  
  419. public void toggleLocked() {
  420. this.locked = !locked;
  421. player.getPackets().sendIComponentText(1284, 46,
  422. "Shop is " + (locked ? "Locked" : "Unlocked"));
  423. }
  424. }
Advertisement
Add Comment
Please, Sign In to add comment