Thread: 0gp Price = Max cash

Results 1 to 3 of 3
  1. #1 0gp Price = Max cash 
    Registered Member

    Join Date
    May 2013
    Age
    27
    Posts
    414
    Thanks given
    215
    Thanks received
    200
    Rep Power
    137
    So I've been messing with this for about 2 hours now looking though Shop.java and I can't seem to find the problem. Setting the item's price to 1gp doesnt really seem to matter..

    Code:
    package com.rs.game.player.content;

    import java.util.concurrent.CopyOnWriteArrayList;

    import com.rs.cache.loaders.ItemDefinitions;
    import com.rs.game.item.Item;
    import com.rs.game.player.Player;
    import com.rs.utils.ItemExamines;
    import com.rs.utils.ItemSetsKeyGenerator;

    public class Shop {

    private static final int MAIN_STOCK_ITEMS_KEY = ItemSetsKeyGenerator.generateKey();

    private static final int MAX_SHOP_ITEMS = 40;
    public static final int COINS = 995;

    private String name;
    private Item[] mainStock;
    private int[] defaultQuantity;
    private Item[] generalStock;
    private int money;
    private CopyOnWriteArrayList<Player> viewingPlayers;

    public Shop(String name, int money, Item[] mainStock, boolean isGeneralStore) {
    viewingPlayers = new CopyOnWriteArrayList<Player>();
    this.name = name;
    this.money = money;
    this.mainStock = mainStock;
    defaultQuantity = new int[mainStock.length];
    for (int i = 0; i < defaultQuantity.length; i++)
    defaultQuantity[i] = mainStock[i].getAmount();
    if (isGeneralStore && mainStock.length < MAX_SHOP_ITEMS)
    generalStock = new Item[MAX_SHOP_ITEMS - mainStock.length];
    }

    public boolean isGeneralStore() {
    return generalStock != null;
    }

    public void addPlayer(final Player player) {
    viewingPlayers.add(player);
    player.getTemporaryAttributtes().put("Shop", this);
    player.setCloseInterfacesEvent(new Runnable() {
    @Override
    public void run() {
    viewingPlayers.remove(player);
    player.getTemporaryAttributtes().remove("Shop");
    if ((boolean) player.getTemporaryAttributtes().get("shop_buying" ) == false) //if in sell tab
    player.getTemporaryAttributtes().put("update_shop" , false);
    player.getTemporaryAttributtes().remove("amount_sh op");
    }
    });
    player.getPackets().sendConfig(118, MAIN_STOCK_ITEMS_KEY);
    player.getPackets().sendConfig(1496, -1);
    player.getPackets().sendConfig(532, money);
    sendStore(player);
    player.getPackets().sendGlobalConfig(199, -1);
    player.getInterfaceManager().sendInterface(1265);
    for (int i = 0; i < MAX_SHOP_ITEMS; i++)
    player.getPackets().sendGlobalConfig(946 + i, i < defaultQuantity.length ? defaultQuantity[i]: generalStock != null ? 0 : -1);// prices
    player.getPackets().sendGlobalConfig(1241, 16750848);
    player.getPackets().sendGlobalConfig(1242, 15439903);
    player.getPackets().sendGlobalConfig(741, -1);
    player.getPackets().sendGlobalConfig(743, -1);
    player.getPackets().sendGlobalConfig(744, 0);
    if (generalStock != null)
    player.getPackets().sendHideIComponent(1265, 19, false);
    player.getPackets().sendIComponentSettings(1265, 20, 0, getStoreSize() * 6, 1150);
    player.getPackets().sendIComponentSettings(1265, 26, 0, getStoreSize() * 6, 82903066);
    sendInventory(player);
    player.getPackets().sendIComponentText(1265, 85, name);
    if (player.getTemporaryAttributtes().get("update_shop ") == null)
    player.getTemporaryAttributtes().put("shop_buying" , true);
    else
    player.getTemporaryAttributtes().put("shop_buying" , false);
    player.getTemporaryAttributtes().put("amount_shop" , 1);
    }

    public void sendInventory(Player player) {
    player.getInterfaceManager().sendInventoryInterfac e(1266);
    player.getPackets().sendItems(93, player.getInventory().getItems());
    player.getPackets().sendUnlockIComponentOptionSlot s(1266, 0, 0, 27, 0,
    1, 2, 3, 4, 5);
    player.getPackets().sendInterSetItemsOptionsScript (1266, 0, 93, 4, 7,
    "Value", "Sell 1", "Sell 5", "Sell 10", "Sell 50", "Examine");
    }
    //cid 67
    public void buy(Player player, int slotId, int quantity) {
    if (slotId >= getStoreSize())
    return;
    Item item = slotId >= mainStock.length ? generalStock[slotId - mainStock.length] : mainStock[slotId];
    if (item == null)
    return;
    if (item.getAmount() == 0) {
    player.getPackets().sendGameMessage("There is no stock of that item at the moment.");
    return;
    }
    //int dq = slotId >= mainStock.length ? 0 : defaultQuantity[slotId]; not sure what is this
    int price = getBuyPrice(item);
    int amountCoins = player.getInventory().getItems().getNumberOf(money );
    int maxQuantity = amountCoins / price;
    int buyQ = item.getAmount() > quantity ? quantity : item.getAmount();
    boolean enoughCoins = maxQuantity >= buyQ;
    if (!enoughCoins) {
    player.getPackets().sendGameMessage("You don't have enough coins.");
    buyQ = maxQuantity;
    } else if (quantity > buyQ)
    player.getPackets().sendGameMessage(
    "The shop has run out of stock.");
    if (item.getDefinitions().isStackable()) {
    if (player.getInventory().getFreeSlots() < 1) {
    player.getPackets().sendGameMessage(
    "Not enough space in your inventory.");
    return;
    }
    } else {
    int freeSlots = player.getInventory().getFreeSlots();
    if (buyQ > freeSlots) {
    buyQ = freeSlots;
    player.getPackets().sendGameMessage(
    "Not enough space in your inventory.");
    }
    }
    if (buyQ != 0) {
    int totalPrice = price * buyQ;
    player.getInventory().deleteItem(money, totalPrice);
    player.getInventory().addItem(item.getId(), buyQ);
    item.setAmount(item.getAmount() - buyQ);
    if (item.getAmount() <= 0 && slotId >= mainStock.length)
    generalStock[slotId - mainStock.length] = null;
    refreshShop();
    sendInventory(player);
    }
    }

    public void restoreItems() {
    boolean needRefresh = false;
    for (int i = 0; i < mainStock.length; i++) {
    if (mainStock[i].getAmount() < defaultQuantity[i]) {
    mainStock[i].setAmount(mainStock[i].getAmount() + 1);
    needRefresh = true;
    } else if (mainStock[i].getAmount() > defaultQuantity[i]) {
    mainStock[i].setAmount(mainStock[i].getAmount() + -1);
    needRefresh = true;
    }
    }
    if (generalStock != null) {
    for (int i = 0; i < generalStock.length; i++) {
    Item item = generalStock[i];
    if (item == null)
    continue;
    item.setAmount(item.getAmount() - 1);
    if (item.getAmount() <= 0)
    generalStock[i] = null;
    needRefresh = true;
    }
    }
    if (needRefresh)
    refreshShop();
    }

    private boolean addItem(int itemId, int quantity) {
    for (Item item : mainStock) {
    if (item.getId() == itemId) {
    item.setAmount(item.getAmount() + quantity);
    refreshShop();
    return true;
    }
    }
    if (generalStock != null) {
    for (Item item : generalStock) {
    if (item == null)
    continue;
    if (item.getId() == itemId) {
    item.setAmount(item.getAmount() + quantity);
    refreshShop();
    return true;
    }
    }
    for (int i = 0; i < generalStock.length; i++) {
    if (generalStock[i] == null) {
    generalStock[i] = new Item(itemId, quantity);
    refreshShop();
    return true;
    }
    }
    }
    return false;
    }

    public void sell(Player player, int slotId, int quantity) {
    if (player.getInventory().getItemsContainerSize() < slotId)
    return;
    Item item = player.getInventory().getItem(slotId);
    if (item == null)
    return;
    int originalId = item.getId();
    if (item.getDefinitions().isNoted())
    item = new Item(item.getDefinitions().getCertId(), item.getAmount());
    if (item.getDefinitions().isDestroyItem()
    || ItemConstants.getItemDefaultCharges(item.getId()) != -1
    || !ItemConstants.isTradeable(item) || item.getId() == money) {
    player.getPackets().sendGameMessage("You can't sell this item.");
    return;
    }
    int dq = getDefaultQuantity(item.getId());
    if (dq == -1 && generalStock == null) {
    player.getPackets().sendGameMessage(
    "You can't sell this item to this shop.");
    return;
    }
    int price = getSellPrice(item, dq);
    int numberOff = player.getInventory().getItems()
    .getNumberOf(originalId);
    if (quantity > numberOff)
    quantity = numberOff;
    if (!addItem(item.getId(), quantity)) {
    player.getPackets().sendGameMessage("Shop is currently full.");
    return;
    }
    player.getInventory().deleteItem(originalId, quantity);
    player.getInventory().addItem(money, price * quantity);
    }

    public void sendValue(Player player, int slotId) {
    if (player.getInventory().getItemsContainerSize() < slotId)
    return;
    Item item = player.getInventory().getItem(slotId);
    if (item == null)
    return;
    if (item.getDefinitions().isNoted())
    item = new Item(item.getDefinitions().getCertId(), item.getAmount());
    if (item.getDefinitions().isNoted() || !ItemConstants.isTradeable(item)
    || item.getId() == money) {
    player.getPackets().sendGameMessage("You can't sell this item.");
    return;
    }
    int dq = getDefaultQuantity(item.getId());
    if (dq == -1 && generalStock == null) {
    player.getPackets().sendGameMessage(
    "You can't sell this item to this shop.");
    return;
    }
    int price = getSellPrice(item, dq);
    player.getPackets().sendGameMessage(
    item.getDefinitions().getName()
    + ": shop will buy for: "
    + price
    + " "
    + ItemDefinitions.getItemDefinitions(money).getName( )
    .toLowerCase()
    + ". Right-click the item to sell.");
    }

    public int getDefaultQuantity(int itemId) {
    for (int i = 0; i < mainStock.length; i++)
    if (mainStock[i].getId() == itemId)
    return defaultQuantity[i];
    return -1;
    }

    public void sendInfo(Player player, int slotId, boolean isBuying) {
    if (slotId >= getStoreSize())
    return;
    Item[] stock = isBuying ? mainStock : player.getInventory().getItems().getItems();
    Item item = slotId >= stock.length ? generalStock[slotId - stock.length] : stock[slotId];
    if (item == null)
    return;
    int price = getBuyPrice(item);
    player.getPackets().sendGameMessage(item.getDefini tions().getName() + ": shop will " + (isBuying ? "sell" : "buy") +" for " + price + " " + ItemDefinitions.getItemDefinitions(money).getName( ).toLowerCase() + ".");
    }

    public int getBuyPrice(Item item) {
    int price = item.getDefinitions().getValue();
    if (price == 0)
    price = 1;
    return price; // TODO formula
    }

    public int getSellPrice(Item item, int dq) {
    return item.getDefinitions().getValue() / 2; // TODO formula
    }

    public void sendExamine(Player player, int slotId) {
    if (slotId >= getStoreSize())
    return;
    Item item = slotId >= mainStock.length ? generalStock[slotId
    - mainStock.length] : mainStock[slotId];
    if (item == null)
    return;
    player.getPackets().sendGameMessage(ItemExamines.g etExamine(item));
    }

    public void refreshShop() {
    for (Player player : viewingPlayers) {
    sendStore(player);
    player.getPackets().sendIComponentSettings(620, 25, 0,
    getStoreSize() * 6, 1150);
    }
    }

    public int getStoreSize() {
    return mainStock.length
    + (generalStock != null ? generalStock.length : 0);
    }

    public void sendStore(Player player) {
    Item[] stock = new Item[mainStock.length
    + (generalStock != null ? generalStock.length : 0)];
    System.arraycopy(mainStock, 0, stock, 0, mainStock.length);
    if (generalStock != null)
    System.arraycopy(generalStock, 0, stock, mainStock.length,
    generalStock.length);
    player.getPackets().sendItems(MAIN_STOCK_ITEMS_KEY , stock);
    }

    public void sendSellStore(Player player, Item[] inventory) {
    Item[] stock = new Item[inventory.length + (generalStock != null ? generalStock.length : 0)];
    System.arraycopy(inventory, 0, stock, 0, inventory.length);
    if (generalStock != null)
    System.arraycopy(generalStock, 0, stock, inventory.length, generalStock.length);
    player.getPackets().sendItems(MAIN_STOCK_ITEMS_KEY , stock);
    }

    /**
    * Checks if the player is buying an item or selling it.
    * @param player The player
    * @param slotId The slot id
    * @param amount The amount
    */
    public void handleShop(Player player, int slotId, int amount) {
    boolean isBuying = player.getTemporaryAttributtes().get("shop_buying" ) != null;
    if (isBuying)
    buy(player, slotId, amount);
    else
    sell(player, slotId, amount);
    }

    public Item[] getMainStock() {
    return this.mainStock;
    }

    }
    Reply With Quote  
     

  2. #2  
    Registered Member

    Join Date
    May 2013
    Age
    27
    Posts
    414
    Thanks given
    215
    Thanks received
    200
    Rep Power
    137
    Fixed, turns out the item was set for selling for max cash if the value equaled 0 in Item.java
    Reply With Quote  
     

  3. #3  
    Registered Member
    Join Date
    Jun 2013
    Posts
    372
    Thanks given
    8
    Thanks received
    8
    Rep Power
    11
    Quote Originally Posted by Darkforces View Post
    Fixed, turns out the item was set for selling for max cash if the value equaled 0 in Item.java
    its too obv
    Reply With Quote  
     


Thread Information
Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)


User Tag List

Similar Threads

  1. How to Change Max Cash?
    By jukey in forum Help
    Replies: 5
    Last Post: 10-22-2010, 08:31 PM
  2. max cash bug
    By bobetoe in forum Help
    Replies: 2
    Last Post: 06-09-2010, 02:40 PM
  3. Replies: 46
    Last Post: 12-29-2009, 03:07 PM
  4. max cash
    By harmy in forum Help
    Replies: 3
    Last Post: 03-14-2009, 12:07 PM
  5. Changing the max cash [Newbie]
    By A I R Z in forum Tutorials
    Replies: 23
    Last Post: 01-24-2009, 11:15 PM
Posting Permissions
  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •