Created
June 8, 2012 17:19
-
-
Save agassi/2896967 to your computer and use it in GitHub Desktop.
SoukTanner RSBot Script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import java.awt.Dimension; | |
| import java.awt.Graphics; | |
| import java.awt.Graphics2D; | |
| import java.awt.GridBagConstraints; | |
| import java.awt.GridBagLayout; | |
| import java.awt.Rectangle; | |
| import java.awt.event.ActionEvent; | |
| import java.awt.event.ActionListener; | |
| import java.awt.event.WindowEvent; | |
| import java.awt.event.WindowListener; | |
| import java.awt.image.BufferedImage; | |
| import java.io.BufferedReader; | |
| import java.io.ByteArrayInputStream; | |
| import java.io.IOException; | |
| import java.io.InputStreamReader; | |
| import java.net.URL; | |
| import java.net.URLConnection; | |
| import java.util.LinkedList; | |
| import java.util.regex.Matcher; | |
| import java.util.regex.Pattern; | |
| import javax.imageio.ImageIO; | |
| import javax.swing.JButton; | |
| import javax.swing.JCheckBox; | |
| import javax.swing.JComboBox; | |
| import javax.swing.JFrame; | |
| import javax.swing.JLabel; | |
| import javax.swing.SwingUtilities; | |
| import javax.xml.bind.DatatypeConverter; | |
| import org.powerbot.concurrent.Task; | |
| import org.powerbot.concurrent.strategy.Condition; | |
| import org.powerbot.concurrent.strategy.Strategy; | |
| import org.powerbot.game.api.ActiveScript; | |
| import org.powerbot.game.api.Manifest; | |
| import org.powerbot.game.api.methods.Game; | |
| import org.powerbot.game.api.methods.Tabs; | |
| import org.powerbot.game.api.methods.Walking; | |
| import org.powerbot.game.api.methods.Widgets; | |
| import org.powerbot.game.api.methods.input.Keyboard; | |
| import org.powerbot.game.api.methods.input.Mouse; | |
| import org.powerbot.game.api.methods.interactive.NPCs; | |
| import org.powerbot.game.api.methods.interactive.Players; | |
| import org.powerbot.game.api.methods.node.SceneEntities; | |
| import org.powerbot.game.api.methods.tab.Inventory; | |
| import org.powerbot.game.api.methods.widget.Camera; | |
| import org.powerbot.game.api.util.Filter; | |
| import org.powerbot.game.api.util.Random; | |
| import org.powerbot.game.api.util.Time; | |
| import org.powerbot.game.api.wrappers.Area; | |
| import org.powerbot.game.api.wrappers.Entity; | |
| import org.powerbot.game.api.wrappers.Locatable; | |
| import org.powerbot.game.api.wrappers.Tile; | |
| import org.powerbot.game.api.wrappers.interactive.NPC; | |
| import org.powerbot.game.api.wrappers.node.Item; | |
| import org.powerbot.game.api.wrappers.node.SceneObject; | |
| import org.powerbot.game.api.wrappers.widget.Widget; | |
| import org.powerbot.game.api.wrappers.widget.WidgetChild; | |
| import org.powerbot.game.bot.event.listener.PaintListener; | |
| @Manifest(authors = { "sciencebrainrs" }, name = "SoukTanner", description = "Tans hides at Al-Kharid", version = 1.0) | |
| public class SoukTanner extends ActiveScript implements PaintListener { | |
| public static final int[] HIDE_IDS = { 1739, 1739, 6287, 7801, 1753, 1751, | |
| 1749, 1747, 24372 }; | |
| public static final int[] LEATHER_IDS = { 1741, 1743, 6289, 6289, 1745, | |
| 2505, 2507, 2509, 24374 }; | |
| public static final int[] WIDGET_CHILD_IDS = { 14, 15, 16, 17, 18, 19, 20, | |
| 21, 22 }; | |
| private long start; | |
| private int index = 1; | |
| private String status = ""; | |
| private int tanned = 0; | |
| private boolean rest = false; | |
| private boolean go = false; | |
| private static final String backgroundImage = "iVBORw0KGgoAAAANSUhEUgAAAfsAAACBCAIAAABIJ4SWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExQkQ4OUExQ0RCRjJCNkI0NSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo2REY2MzdCNEE4MjMxMUUxQTZBQTg4RjJGRkREMTM1QiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2REY2MzdCM0E4MjMxMUUxQTZBQTg4RjJGRkREMTM1QiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTFCRDg5QTFDREJGMkI2QjQ1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTFCRDg5QTFDREJGMkI2QjQ1Ii8+IDwvcmRmOkRlc2NyaXB0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"; | |
| private static final String[] leatherImages = { | |
| "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" | |
| }; | |
| private BufferedImage background; | |
| private BufferedImage leather; | |
| private int hidePrice; | |
| private int leatherPrice; | |
| private static final Area souk = new Area(new Tile(3269, 3194, 0), | |
| new Tile(3278, 3188, 0)); | |
| private static final Area bank = new Area(new Tile(3269, 3173, 0), | |
| new Tile(3272, 3162, 0)); | |
| private static final Tile[] pathToSouk = { new Tile(3269, 3166, 0), | |
| new Tile(3272, 3166, 0), new Tile(3278, 3168, 0), | |
| new Tile(3278, 3174, 0), new Tile(3279, 3180, 0), | |
| new Tile(3284, 3184, 0), new Tile(3282, 3190, 0), | |
| new Tile(3276, 3192, 0) }; | |
| @Override | |
| protected void setup() { | |
| submit(new Task() { | |
| @Override | |
| public void run() { | |
| try { | |
| background = base64decode(backgroundImage); | |
| createAndShowUI(); | |
| while (!go) { | |
| Time.sleep(200); | |
| } | |
| leather = base64decode(leatherImages[index]); | |
| hidePrice = getMoney(HIDE_IDS[index]); | |
| leatherPrice = getMoney(LEATHER_IDS[index]); | |
| start = System.currentTimeMillis(); | |
| } catch (Exception e) { | |
| } | |
| } | |
| }); | |
| WalkToSouk walkToSouk = new WalkToSouk(); | |
| TanHides tanHides = new TanHides(); | |
| WalkToBank walkToBank = new WalkToBank(); | |
| CameraFix cameraFix = new CameraFix(); | |
| Rest rest = new Rest(); | |
| AntiBan antiBan = new AntiBan(); | |
| Bank bank = new Bank(); | |
| provide(new Strategy(walkToSouk, walkToSouk)); | |
| provide(new Strategy(tanHides, tanHides)); | |
| provide(new Strategy(walkToBank, walkToBank)); | |
| provide(new Strategy(cameraFix, cameraFix)); | |
| provide(new Strategy(rest, rest)); | |
| provide(new Strategy(antiBan, antiBan)); | |
| provide(new Strategy(bank, bank)); | |
| } | |
| private BufferedImage base64decode(String base64) throws IOException { | |
| return ImageIO.read(new ByteArrayInputStream(DatatypeConverter | |
| .parseBase64Binary(base64))); | |
| } | |
| private boolean isIn(Area area) { | |
| return area.contains(Players.getLocal().getLocation()); | |
| } | |
| private boolean hasHide() { | |
| int count = Inventory.getCount(new Filter<Item>() { | |
| @Override | |
| public boolean accept(Item t) { | |
| return t.getId() == HIDE_IDS[index]; | |
| } | |
| }); | |
| return count == 28; | |
| } | |
| private boolean hasLeather() { | |
| int count = Inventory.getCount(new Filter<Item>() { | |
| @Override | |
| public boolean accept(Item t) { | |
| return t.getId() == LEATHER_IDS[index]; | |
| } | |
| }); | |
| return count == 28; | |
| } | |
| public void walkPath(Tile[] path, boolean reverse) { | |
| if (reverse) { | |
| Walking.newTilePath(path).reverse().traverse(); | |
| return; | |
| } | |
| Walking.newTilePath(path).traverse(); | |
| Time.sleep(1000, 2000); | |
| } | |
| private abstract class CustomCondition implements Condition { | |
| @Override | |
| public boolean validate() { | |
| return go && valid(); | |
| } | |
| public abstract boolean valid(); | |
| } | |
| private class WalkToSouk extends CustomCondition implements Task { | |
| @Override | |
| public void run() { | |
| status = "Walking to souk"; | |
| walkPath(pathToSouk, false); | |
| } | |
| @Override | |
| public boolean valid() { | |
| return hasHide() && !isIn(souk) | |
| && Players.getLocal().getInteracting() == null; | |
| } | |
| } | |
| private class WalkToBank extends CustomCondition implements Task { | |
| @Override | |
| public void run() { | |
| status = "Walking to bank"; | |
| walkPath(pathToSouk, true); | |
| } | |
| @Override | |
| public boolean valid() { | |
| return hasLeather() && !isIn(bank) | |
| && Players.getLocal().getInteracting() == null; | |
| } | |
| } | |
| private class TanHides extends CustomCondition implements Task { | |
| @Override | |
| public void run() { | |
| status = "Tanning hides"; | |
| NPC tanner = NPCs.getNearest("Ellis"); | |
| if (tanner.isOnScreen()) { | |
| tanner.interact("Tan"); | |
| Time.sleep(1000, 2000); | |
| WidgetChild tan = Widgets.get(905, WIDGET_CHILD_IDS[index]); | |
| scroll(Widgets.get(905), tan); | |
| tan.click(true); | |
| Time.sleep(1000, 3000); | |
| if (hasLeather()) { | |
| tanned += 28; | |
| } | |
| } | |
| } | |
| @Override | |
| public boolean valid() { | |
| return hasHide() && isIn(souk); | |
| } | |
| private void scroll(Widget parent, WidgetChild child) { | |
| Rectangle parentRect = parent.getChild(0).getBoundingRectangle(); | |
| Rectangle childRect = child.getBoundingRectangle(); | |
| boolean visible = parentRect.contains(childRect); | |
| if (visible) | |
| return; | |
| int child_id = 12; | |
| if (childRect.x <= 0) | |
| child_id = 11; | |
| while (!parentRect.contains(Widgets.get(parent.getId(), | |
| child.getId()).getBoundingRectangle())) { | |
| parent.getChild(child_id).click(true); | |
| Time.sleep(500, 1500); | |
| } | |
| } | |
| } | |
| private class CameraFix extends CustomCondition implements Task { | |
| public boolean valid() { | |
| return Camera.getPitch() < 80; | |
| } | |
| public void run() { | |
| Camera.setPitch(true); | |
| } | |
| } | |
| private class Rest extends CustomCondition implements Task { | |
| public boolean valid() { | |
| return rest && Walking.getEnergy() <= Random.nextInt(10, 36) | |
| || !Walking.isRunEnabled() | |
| && Walking.getEnergy() >= Random.nextInt(50, 100); | |
| } | |
| public void run() { | |
| if (!Walking.isRunEnabled()) { | |
| Walking.setRun(true); | |
| } else { | |
| status = "Resting"; | |
| while (!isIn(souk) | |
| && Walking.getEnergy() < Random.nextInt(80, 100)) { | |
| if (Players.getLocal().getAnimation() == -1) { | |
| try { | |
| if (Widgets.get(750, 2) != null) { | |
| Widgets.get(750, 2).interact("Rest"); | |
| Time.sleep(1500, 2300); | |
| } | |
| } catch (Exception e) { | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| private class AntiBan extends CustomCondition implements Task { | |
| private long antiBanTime = System.currentTimeMillis() | |
| + Random.nextInt(20000, 100000); | |
| @Override | |
| public void run() { | |
| status = "Antiban"; | |
| antiBanTime = System.currentTimeMillis() | |
| + Random.nextInt(20000, 100000); | |
| int action = Random.nextInt(0, 3); | |
| Dimension game = Game.getDimensions(); | |
| switch (action) { | |
| case 0: | |
| Camera.setAngle(Random.nextInt(0, 360)); | |
| Time.sleep(200, 400); | |
| break; | |
| case 1: | |
| Mouse.move(Random.nextInt(0, game.width), | |
| Random.nextInt(0, game.height)); | |
| Time.sleep(200, 400); | |
| break; | |
| case 2: | |
| moveOffScreen(); | |
| Time.sleep(200, 400); | |
| break; | |
| case 3: | |
| checkFriends(); | |
| Time.sleep(200, 400); | |
| break; | |
| } | |
| } | |
| @Override | |
| public boolean valid() { | |
| return System.currentTimeMillis() >= antiBanTime; | |
| } | |
| private void checkFriends() { | |
| if (isIn(bank)) | |
| return; | |
| Tabs.FRIENDS.open(); | |
| Time.sleep(1000, 3000); | |
| Tabs.INVENTORY.open(); | |
| } | |
| private void moveOffScreen() { | |
| if (Mouse.isPresent()) { | |
| Dimension game = Game.getDimensions(); | |
| switch (Random.nextInt(0, 3)) { | |
| case 0: | |
| Mouse.move(Random.nextInt(-10, game.width + 10), | |
| Random.nextInt(-100, -10)); | |
| break; | |
| case 1: | |
| Mouse.move(Random.nextInt(-10, game.width + 10), | |
| game.height + Random.nextInt(10, 100)); | |
| break; | |
| case 2: | |
| Mouse.move(Random.nextInt(-100, -10), | |
| Random.nextInt(-10, game.height + 10)); | |
| break; | |
| case 3: | |
| Mouse.move(Random.nextInt(10, 100) + game.width, | |
| Random.nextInt(-10, game.height + 10)); | |
| break; | |
| } | |
| } | |
| } | |
| } | |
| private class Bank extends CustomCondition implements Task { | |
| private final int[] BANKERS = { 44, 45, 494, 495, 496, 497, 498, 499, | |
| 553, 909, 958, 1036, 2271, 2354, 2355, 2718, 2759, 3198, 3293, | |
| 3416, 3418, 3824, 4456, 4457, 4458, 4459, 5488, 5901, 5912, | |
| 6200, 6362, 6532, 6533, 6534, 6535, 7605, 8948, 9710, 14367 }; | |
| private final int[] BANK_BOOTHS = { 782, 2213, 2995, 5276, 6084, 10517, | |
| 11402, 12759, 14367, 19230, 20325, 24914, 11338, 11758, 25808, | |
| 26972, 29085, 52589, 34752, 35647, 36786, 2012, 2015, 2019, | |
| 42217, 42377, 42378 }; | |
| private final int[] DEPOSIT_BOXES = { 2045, 9398, 20228, 24995, 25937, | |
| 26969, 32924, 32930, 32931, 34755, 36788, 39830, 45079 }; | |
| private final int[] BANK_CHESTS = { 2693, 4483, 8981, 12308, 21301, | |
| 20607, 21301, 27663, 42192 }; | |
| @Override | |
| public void run() { | |
| status = "Banking"; | |
| open(); | |
| Time.sleep(1000, 1500); | |
| if (Inventory.getCount() > 0) { | |
| depositAll(); | |
| Time.sleep(500, 1000); | |
| } | |
| withdraw(HIDE_IDS[index], 0); | |
| close(); | |
| } | |
| @Override | |
| public boolean valid() { | |
| return !hasHide() && isIn(bank); | |
| } | |
| private boolean depositAll() { | |
| return Widgets.get(isOpen() ? 762 : 11, isOpen() ? 34 : 19) | |
| .interact("Deposit carried items"); | |
| } | |
| private boolean isOpen() { | |
| return Widgets.get(762).validate(); | |
| } | |
| private boolean isDepositOpen() { | |
| return Widgets.get(11).validate(); | |
| } | |
| private Item getItem(int itemID) { | |
| for (final Item item : getItems()) { | |
| if (item.getId() == itemID) { | |
| return item; | |
| } | |
| } | |
| return null; | |
| } | |
| private Item[] getItems() { | |
| final java.util.List<Item> items = new LinkedList<Item>(); | |
| if (Widgets.get(762, 95).validate()) { | |
| for (final WidgetChild item : Widgets.get(762, 95) | |
| .getChildren()) { | |
| if (item != null && item.getChildId() != -1) { | |
| items.add(new Item(item)); | |
| } | |
| } | |
| } | |
| return items.toArray(new Item[items.size()]); | |
| } | |
| private boolean open() { | |
| if (isOpen() || isDepositOpen()) { | |
| return true; | |
| } | |
| final Entity bankEntity = findBankEntity(); | |
| if (bankEntity != null) { | |
| if (bankEntity.isOnScreen()) { | |
| if (bankEntity.interact("Bank", "") | |
| || bankEntity.interact("Use") | |
| || bankEntity.interact("Open") | |
| || bankEntity.interact("Deposit")) { | |
| for (int i = 0; i < 10 | |
| && (!isOpen() && !isDepositOpen()); i++) { | |
| if (Players.getLocal().isMoving()) { | |
| i = 0; | |
| } | |
| Time.sleep(200); | |
| } | |
| } | |
| } else { | |
| final Locatable LBE = (Locatable) bankEntity; | |
| if (Walking.walk(LBE)) { | |
| for (int i = 0; i < 50 && !bankEntity.isOnScreen(); i++) { | |
| if (Players.getLocal().isMoving()) { | |
| i = 0; | |
| } | |
| Time.sleep(50); | |
| } | |
| } | |
| } | |
| } | |
| return isOpen() || isDepositOpen(); | |
| } | |
| private boolean close() { | |
| if (Widgets.get(762, 45).interact("Close") | |
| || Widgets.get(11, 15).interact("Close")) { | |
| for (int i = 0; i < 10 && (isDepositOpen() || isOpen()); i++) { | |
| Time.sleep(150); | |
| } | |
| } | |
| return !isOpen() && !isDepositOpen(); | |
| } | |
| private Entity findBankEntity() { | |
| final SceneObject bankBooth = SceneEntities | |
| .getNearest(new Filter<SceneObject>() { | |
| public boolean accept(SceneObject sceneObject) { | |
| for (final int i : Bank.this.BANK_BOOTHS) { | |
| if (sceneObject != null | |
| && sceneObject.getId() == i | |
| && sceneObject.getLocation().canReach()) { | |
| return true; | |
| } | |
| } | |
| return false; | |
| } | |
| }); | |
| final SceneObject bankChest = SceneEntities | |
| .getNearest(new Filter<SceneObject>() { | |
| public boolean accept(SceneObject sceneObject) { | |
| for (final int i : Bank.this.BANK_CHESTS) { | |
| if (sceneObject != null | |
| && sceneObject.getId() == i | |
| && sceneObject.getLocation().canReach()) { | |
| return true; | |
| } | |
| } | |
| return false; | |
| } | |
| }); | |
| final SceneObject depositBox = SceneEntities | |
| .getNearest(new Filter<SceneObject>() { | |
| public boolean accept(SceneObject sceneObject) { | |
| for (final int i : Bank.this.DEPOSIT_BOXES) { | |
| if (sceneObject != null | |
| && sceneObject.getId() == i | |
| && sceneObject.getLocation().canReach()) { | |
| return true; | |
| } | |
| } | |
| return false; | |
| } | |
| }); | |
| final NPC banker = NPCs.getNearest(new Filter<NPC>() { | |
| public boolean accept(NPC npc) { | |
| for (final int i : Bank.this.BANKERS) { | |
| if (npc != null | |
| && i == npc.getId() | |
| && !npc.getLocation().equals( | |
| new Tile(3180, 3433, 0))) { | |
| return true; | |
| } | |
| } | |
| return false; | |
| } | |
| }); | |
| Entity bankEntity = null; | |
| if (bankBooth != null) { | |
| if (banker != null) { | |
| if (Random.nextInt(1, 11) < 7) { | |
| bankEntity = bankBooth; | |
| } else { | |
| bankEntity = banker; | |
| } | |
| } else { | |
| bankEntity = bankBooth; | |
| } | |
| } else if (banker != null) { | |
| bankEntity = banker; | |
| } else if (bankChest != null) { | |
| bankEntity = bankChest; | |
| } else if (depositBox != null) { | |
| bankEntity = depositBox; | |
| } | |
| return bankEntity; | |
| } | |
| private boolean withdraw(int itemID, int amount) { | |
| if (isOpen()) { | |
| if (amount >= -1) { | |
| final Item item = getItem(itemID); | |
| if (item == null) { | |
| return false; | |
| } | |
| final WidgetChild itemWidget = item.getWidgetChild(); | |
| final int count = Inventory.getCount(true); | |
| Widgets.scroll(itemWidget, Widgets.get(762, 116)); | |
| boolean performedAction; | |
| switch (amount) { | |
| case -1: | |
| performedAction = itemWidget.interact( | |
| "Withdraw-All but one", item.getName()); | |
| break; | |
| case 0: | |
| performedAction = itemWidget.interact("Withdraw-All", | |
| item.getName()); | |
| break; | |
| case 1: | |
| performedAction = itemWidget.click(true); | |
| break; | |
| default: | |
| performedAction = itemWidget.interact("Withdraw-" | |
| + amount, item.getName()); | |
| if (!performedAction) { | |
| performedAction = itemWidget.interact("Withdraw-X", | |
| item.getName()); | |
| if (performedAction) { | |
| Time.sleep(Random.nextInt(1000, 1300)); | |
| Keyboard.sendText(String.valueOf(amount), true); | |
| } | |
| } | |
| break; | |
| } | |
| if (performedAction) { | |
| for (int i = 0; i < 150; i++) { | |
| final int newCount = Inventory.getCount(true); | |
| if (newCount > count || newCount == 28) { | |
| Time.sleep(Random.nextInt(100, 125)); | |
| return true; | |
| } | |
| Time.sleep(20); | |
| } | |
| } | |
| } | |
| } | |
| return false; | |
| } | |
| } | |
| private class UI extends JFrame implements ActionListener, WindowListener { | |
| private static final long serialVersionUID = -135685508949452468L; | |
| private JComboBox choices; | |
| private JCheckBox checkBox; | |
| public UI() { | |
| create(); | |
| } | |
| public void create() { | |
| GridBagLayout layout = new GridBagLayout(); | |
| GridBagConstraints cons; | |
| setLayout(layout); | |
| JLabel label = new JLabel("Leather to make:"); | |
| cons = new GridBagConstraints(); | |
| cons.gridx = 1; | |
| cons.gridy = 1; | |
| cons.gridwidth = GridBagConstraints.REMAINDER; | |
| layout.setConstraints(label, cons); | |
| add(label); | |
| String[] leathers = { "Soft leather", "Hard leather", "Snakeskin", | |
| "Snakeskin (Swamp)", "Green Dragonleather", | |
| "Blue dragonleather", "Red dragonleather", | |
| "Black dragonleather", "Royal dragonleather" }; | |
| choices = new JComboBox(leathers); | |
| cons = new GridBagConstraints(); | |
| cons.gridx = 1; | |
| cons.gridy = 2; | |
| cons.gridwidth = GridBagConstraints.REMAINDER; | |
| layout.setConstraints(choices, cons); | |
| add(choices); | |
| checkBox = new JCheckBox("Rest?"); | |
| cons = new GridBagConstraints(); | |
| cons.gridx = 1; | |
| cons.gridy = 3; | |
| cons.gridwidth = GridBagConstraints.REMAINDER; | |
| layout.setConstraints(checkBox, cons); | |
| add(checkBox); | |
| JButton button = new JButton("Start"); | |
| cons = new GridBagConstraints(); | |
| cons.gridx = 1; | |
| cons.gridy = 4; | |
| cons.gridwidth = GridBagConstraints.REMAINDER; | |
| cons.gridheight = 1; | |
| button.addActionListener(this); | |
| layout.setConstraints(button, cons); | |
| add(button); | |
| addWindowListener(this); | |
| setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); | |
| setAlwaysOnTop(true); | |
| pack(); | |
| setLocationRelativeTo(null); | |
| } | |
| @Override | |
| public void actionPerformed(ActionEvent e) { | |
| index = choices.getSelectedIndex(); | |
| rest = checkBox.isSelected(); | |
| go = true; | |
| dispose(); | |
| } | |
| @Override | |
| public void windowActivated(WindowEvent e) { | |
| } | |
| @Override | |
| public void windowClosed(WindowEvent e) { | |
| if (!go) { | |
| log.severe("Options not set, script stopped."); | |
| stop(); | |
| } | |
| } | |
| @Override | |
| public void windowClosing(WindowEvent e) { | |
| } | |
| @Override | |
| public void windowDeactivated(WindowEvent e) { | |
| } | |
| @Override | |
| public void windowDeiconified(WindowEvent e) { | |
| } | |
| @Override | |
| public void windowIconified(WindowEvent e) { | |
| } | |
| @Override | |
| public void windowOpened(WindowEvent e) { | |
| } | |
| } | |
| public int getMoney(int id) throws Exception { | |
| URL url = new URL( | |
| "http://services.runescape.com/m=itemdb_rs/api/catalogue/detail.json?item=" | |
| + id); | |
| URLConnection spoof = url.openConnection(); | |
| spoof.setRequestProperty( | |
| "User-Agent", | |
| "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"); | |
| BufferedReader in = new BufferedReader(new InputStreamReader( | |
| spoof.getInputStream())); | |
| String line; | |
| line = in.readLine(); | |
| return getPrice(line); | |
| } | |
| public int getPrice(String line) { | |
| String regex = "\"price\":(.*?)},\""; | |
| Pattern p = Pattern.compile(regex); | |
| Matcher m = p.matcher(line); | |
| if (m.find()) { | |
| return new Integer(m.group(1)); | |
| } | |
| return 0; | |
| } | |
| public void createAndShowUI() { | |
| final UI ui = new UI(); | |
| SwingUtilities.invokeLater(new Runnable() { | |
| @Override | |
| public void run() { | |
| ui.setVisible(true); | |
| } | |
| }); | |
| } | |
| @Override | |
| public void onRepaint(Graphics gr) { | |
| Graphics2D g = (Graphics2D) gr; | |
| // 6, 344, 507, 129 | |
| g.drawImage(background, 6, 344, null); | |
| if (!go || leather == null) | |
| return; | |
| g.drawImage(leather, 6, 355, null); | |
| int gap = leather.getWidth() + 6; | |
| int moneyMade = (tanned == 0) ? 0 : (leatherPrice - hidePrice) * tanned; | |
| long running = System.currentTimeMillis() - start; | |
| g.drawString("Time running: " + Time.format(running), gap, 395); | |
| g.drawString("Hide Price: " + hidePrice, gap, 425); | |
| g.drawString("leather Price: " + leatherPrice, gap, 455); | |
| g.drawString("Money made: " + moneyMade, gap + 250, 395); | |
| g.drawString("Money/hour: " + (int) (moneyMade / (running / 3600000D)), | |
| gap + 250, 425); | |
| g.drawString("Status: " + status, gap + 250, 455); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment