Code:
package com.rs2hd.content.exchange;
import java.util.LinkedList;
import java.util.List;
import com.rs2hd.model.ItemDefinition;
import com.rs2hd.model.Player;
public final class GrandExchange extends GrandExchangeUtils {
private final List<Offer> buy = new LinkedList<Offer>();
private final List<Offer> sell = new LinkedList<Offer>();
public void handleButtons(Player player, int button, int packetId) {
switch(button) {
case 30:
case 46:
case 62:
case 81:
case 100:
case 119:
int buyBox = getExchangeBox(button);
if(buyBox > -1) {
displayBuyInterface(player, buyBox);
player.setTemporaryAttribute("box", buyBox);
player.getActionSender().sendConfig(1112, buyBox);
}
break;
case 31:
case 47:
case 63:
case 82:
case 101:
case 120:
int sellBox = getExchangeBox(button);
if(sellBox > -1) {
displaySellInterface(player, sellBox);
player.setTemporaryAttribute("box", sellBox);
player.getActionSender().sendConfig(1112, sellBox);
}
break;
case 18:
case 34:
case 50:
case 69:
case 88:
case 107:
int myBox = getExchangeBox(button);
if(myBox > -1) {
Offer myOffer = findOffer(player, myBox);
if(myOffer != null) {
boolean aborted = myOffer.isAborted();
if(!aborted) {
int[] items = {-1, -1};
int[] amount = {0, 0};
if(myOffer.getType() == Type.BUY){
items[1] = myOffer.getId();
items[0] = myOffer.getId();
amount[1] = myOffer.coins;
amount[0] = myOffer.getCurrentAmount();
}
}
if(aborted) {
int[] items = {-1, -1};
int[] amount = {0, 0};
if(myOffer.getType() == Type.BUY) {
if(myOffer.coins > 0) {
items[1] = 14484;
items[0] = myOffer.getId();
amount[1] = myOffer.coins;
amount[0] = myOffer.getCurrentAmount();
} else {
items[0] = myOffer.getId();
amount[0] = myOffer.getCurrentAmount();
}
} else if(myOffer.getType() == Type.SELL) {
}
player.getActionSender().setItemSlot(myBox, items, amount);
}
player.getActionSender().sendConfig(1112, myBox);
player.setTemporaryAttribute("box", myBox);
}
}
break;
case 203:
int abortBox = (Integer) player.getTemporaryAttribute("box");
if(abortBox > -1) {
Offer myOffer = findOffer(player, abortBox);
if(myOffer == null) {
return;
}
if(myOffer.isAborted()) {
player.getActionSender().sendMessage("Your offer is currently aborting!");
return;
}
myOffer.setAborted(true);
int [] items = {-1, -1};
int[] amount = {0, 0};
if(myOffer.getType() == Type.SELL) {
player.getActionSender().setGe(abortBox, -3, myOffer.getId(), myOffer.getPrice(), myOffer.getAmount(), myOffer.getAmount() - myOffer.getCurrentAmount());
} else if(myOffer.getType() == Type.BUY) {
player.getActionSender().setGe(abortBox, -3, myOffer.getId(), myOffer.getPrice(), myOffer.getAmount(), myOffer.getAmount() - myOffer.getCurrentAmount());
}
player.getActionSender().setItemSlot(abortBox, items, amount);
}
break;
case 177:
case 183:
case 180:
ItemDefinition def = ItemDefinition.forId((Integer) player.getTemporaryAttribute("geItem"));
if(def == null) {
return;
}
setPrice(player, button == 177 ? 0 : button == 183 ? 1 : 2, def);
break;
case 157:
case 159:
case 162:
case 164:
case 166:
case 168:
case 171:
case 173:
setAmount(player, button);
break;
case 190://Sell Offer
if(player.getTemporaryAttribute("buying") == Boolean.TRUE) {
acceptOffer(player, Type.BUY);
} else {
acceptOffer(player, Type.SELL);
}
break;
case 209:
//216 = first , 211 = second
int box = (Integer) player.getTemporaryAttribute("box");
if(box > -1) {
Offer myOffer = findOffer(player, box);
if(myOffer != null) {
int id = myOffer.getId();
if(!myOffer.isAborted()) {
if(myOffer.getType() == Type.BUY) {
int freeSlots = player.getInventory().getFreeSlots();
if(freeSlots < myOffer.getAmount() && !ItemDefinition.forId(myOffer.getId()).isStackable()) {
player.getInventory().addItem(myOffer.getId()+1, myOffer.getAmount());
player.offers[box].setId(-1);
player.offers[box] = null;
player.getActionSender().resetItemSlot(player, box);
player.getActionSender().setGe(box, 0, -1, -1, -1, 0);
} else if(freeSlots > myOffer.getAmount() || ItemDefinition.forId(myOffer.getId()).isStackable()) {
player.getInventory().addItem(myOffer.getId(), myOffer.getAmount());
player.offers[box].setId(-1);
player.offers[box] = null;
player.getActionSender().resetItemSlot(player, box);
player.getActionSender().setGe(box, 0, -1, -1, -1, 0);
//player.getActionSender().resetGe(box);
}
}
if(myOffer.getType() == Type.SELL) {
player.getInventory().addItem(995, player.tempGESell);
player.offers[box].setId(-1);
player.offers[box] = null;
player.getActionSender().resetItemSlot(player, box);
player.getActionSender().setGe(box, 0, -1, -1, -1, 0);
//player.getActionSender().resetGe(box);
}
}
}
}
break;
case 211:
break;
case 127:
openGE(player);
break;
}
}
public void openGE(final Player player) {
if(player.getRights() != 2) {
return;
}
player.getActionSender().sendConfig2(563, 4194304);
player.getActionSender().sendConfig(1112, -1);
player.getActionSender().sendConfig(1113, -1);
player.getActionSender().sendConfig(1109, -1);
player.getActionSender().sendConfig(1110, 0);
player.getActionSender().sendCloseInventoryInterface();
player.getActionSender().sendInterface(105);
player.getActionSender().sendAccessMask(-1, -1, 105, 209, 0, 6);
player.getActionSender().sendAccessMask(-1, -1, 105, 211, 0, 6);
}
public void acceptOffer(Player player, Type type) {
int amount = (Integer) player.getTemporaryAttribute("geAmount");
int id = (Integer) player.getTemporaryAttribute("geItem");
int price = (Integer) player.getTemporaryAttribute("price");
int box = (Integer) player.getTemporaryAttribute("box");
if(type == Type.BUY) {
if(price > 500000000) {
if(amount > 5) {
player.getActionSender().sendMessage("Your offer is too big!");
return;
}
}
long totalPrice = price * amount;
if(totalPrice >= Integer.MAX_VALUE || totalPrice <= Integer.MIN_VALUE) {
player.getActionSender().sendMessage("Your offer is too big!");
return;
}
if (totalPrice <= player.getInventory().getContainer().getNumberOff(995)) {
player.getInventory().deleteItem(995, (int) totalPrice);
openGE(player);
player.getActionSender().setGe(box, 5, id, price, amount, amount);
player.offers[box] = new Offer(player.getUsername(), Type.BUY, box, id, amount, (int) totalPrice);
int confirmBox = (Integer) player.getTemporaryAttribute("box");
player.getActionSender().setItemSlot(confirmBox, id, amount);
player.sm("One or more of your offers have been completed.");
} else {
player.getActionSender().sendMessage("You don't have enough coins!");
}
} else if(type == Type.SELL) {
long totalPrice = price * amount;
if(totalPrice >= Integer.MAX_VALUE || totalPrice <= Integer.MIN_VALUE) {
player.getActionSender().sendMessage("Your offer is too big!");
return;
}
if (amount <= player.getInventory().getContainer().getNumberOff(id)) {
player.getInventory().deleteItem(id, amount);
openGE(player);
player.getActionSender().setGe(box, 13, id, price, amount, amount);
player.offers[box] = new Offer(player.getUsername(), Type.SELL, box, id, amount, (int) totalPrice);
int confirmBox = (Integer) player.getTemporaryAttribute("box");
player.getActionSender().setItemSlot(confirmBox, 995, price * amount);
player.tempGESell = price*amount;
player.sm("One or more of your offers have been completed.");
} else {
player.getActionSender().sendMessage("You don't have enough items to do that offer!");
}
} else {
player.getActionSender().sendMessage("An error has occured.");
}
}
public void sellItem(Player player, int id, int amount) {
if(!canExchange(id)) {
player.getActionSender().sendMessage(name(id) + " are not exchangeable!");
return;
}
ItemDefinition def = ItemDefinition.forId(id);
if (def == null) {
return;
}
sendPriceConfigs(player, id);
set(player, id, def.getNormalPrice(), amount);
}
/*
* Clicking the item on the Search Interface
*/
public void buyItem(Player player, int id) {
if(!canExchange(id)) {
player.getActionSender().sendMessage(name(id) + " are not exchangeable!");
return;
}
ItemDefinition def = ItemDefinition.forId(id);
if (def == null) {
return;
}
sendPriceConfigs(player, id);
set(player, id, def.getNormalPrice(), 1);
}
public String name(int id) {
return ItemDefinition.forId(id).getName();
}
public Offer findOffer(Player player, int box) {
return player.offers[box];
}
public enum Type {
BUY, SELL
}
}