Fixed, turns out the item was set for selling for max cash if the value equaled 0 in Item.java
|
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;
}
}
Fixed, turns out the item was set for selling for max cash if the value equaled 0 in Item.java
« Previous Thread | Next Thread » |
Thread Information |
Users Browsing this ThreadThere are currently 1 users browsing this thread. (0 members and 1 guests) |