package NET.worlds.scape; import NET.worlds.console.Console; import NET.worlds.console.Main; import NET.worlds.console.MainCallback; import NET.worlds.console.OkCancelDialog; import NET.worlds.console.PolledDialog; import java.io.IOException; public class TradeAction extends DialogAction { int userItems = 1; String userItem = "A"; int serverItems = 1; String serverItem = "A"; private static Object classCookie = new Object(); @Override public void doIt() { StringBuffer deal = new StringBuffer(); deal.append("&|+deal>TRADE "); if (this.userItems > 0) { deal.append(this.userItem); deal.append(this.userItems); } deal.append(","); if (this.serverItems > 0) { deal.append(this.serverItem); deal.append(this.serverItems); } final String dealStr = deal.toString(); Main.register(new MainCallback() { @Override public void mainCallback() { Pilot.sendText("TRADE", dealStr); Main.unregister(this); } }); } @Override public PolledDialog getDialog() { return InventoryManager.getInventoryManager().checkInventoryFor(this.userItem) >= this.userItems ? new OkCancelDialog( Console.getFrame(), this, "Trade?", "No", "Yes", "Do you want to give " + InventoryManager.getInventoryManager().itemName(this.userItem, this.userItems) + " in return for " + InventoryManager.getInventoryManager().itemName(this.serverItem, this.serverItems) + "?", false ) : new OkCancelDialog( Console.getFrame(), this, "Can't trade!", "Ok", null, "You need " + InventoryManager.getInventoryManager().itemName(this.userItem, this.userItems) + " in order to trade here.", false ); } @Override public Object properties(int index, int offset, int mode, Object value) throws NoSuchPropertyException { Object ret = null; switch (index - offset) { case 0: if (mode == 0) { ret = StringPropertyEditor.make(new Property(this, index, "User Item Type")); } else if (mode == 1) { ret = this.userItem; } else if (mode == 2) { this.userItem = ((String)value).toString().trim(); } break; case 1: if (mode == 0) { ret = IntegerPropertyEditor.make(new Property(this, index, "Number of User Items")); } else if (mode == 1) { ret = new Integer(this.userItems); } else if (mode == 2) { this.userItems = (Integer)value; } break; case 2: if (mode == 0) { ret = StringPropertyEditor.make(new Property(this, index, "Merchant Item Type")); } else if (mode == 1) { ret = this.serverItem; } else if (mode == 2) { this.serverItem = ((String)value).toString().trim(); } break; case 3: if (mode == 0) { ret = IntegerPropertyEditor.make(new Property(this, index, "Number of Merchant Items")); } else if (mode == 1) { ret = new Integer(this.serverItems); } else if (mode == 2) { this.serverItems = (Integer)value; } break; default: ret = super.properties(index, offset + 4, mode, value); } return ret; } @Override public String toString() { return super.toString() + "[give " + InventoryManager.getInventoryManager().itemName(this.userItem, this.userItems) + " for " + InventoryManager.getInventoryManager().itemName(this.serverItem, this.serverItems) + "]"; } @Override public void saveState(Saver s) throws IOException { s.saveVersion(0, classCookie); super.saveState(s); s.saveString(this.userItem); s.saveInt(this.userItems); s.saveString(this.serverItem); s.saveInt(this.serverItems); } @Override public void restoreState(Restorer r) throws IOException, TooNewException { int ver = r.restoreVersion(classCookie); switch (ver) { case 0: super.restoreState(r); this.userItem = r.restoreString(); this.userItems = r.restoreInt(); this.serverItem = r.restoreString(); this.serverItems = r.restoreInt(); return; default: throw new TooNewException(); } } }