Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.osbot.picker;
- import org.osbot.rs07.api.map.PositionPolygon;
- import org.osbot.rs07.api.map.Position;
- import org.osbot.rs07.api.model.RS2Object;
- import org.osbot.rs07.api.ui.Message;
- import org.osbot.rs07.script.Script;
- import org.osbot.rs07.script.ScriptManifest;
- import org.osbot.rs07.utility.ConditionalSleep;
- import java.awt.*;
- import java.util.concurrent.TimeUnit;
- @ScriptManifest(name = "Flax Picker", author = "Lazaro", version = 1.0, info = "Picks flax at Catherby/Camelot", logo = "")
- public class FlaxPicker extends Script {
- private static final PositionPolygon bankArea = new PositionPolygon(new int[][] {{2721,3493},{2731,3490},{2724,3490},{2724,3487},{2727,3487},{2727,3490},{2730,3490},{2729,3493}});
- private static final PositionPolygon pickingArea = new PositionPolygon(new int[][] {{2736,3449},{2741,3453},{2745,3451},{2751,3451},{2751,3437},{2746,3437},{2745,3436},{2742,3436},{2740,3437},{2737,3439},{2737,3444},{2736,3446}});
- private static final PositionPolygon bankPath = new PositionPolygon(new int[][] {{2726,3492},{2726,3485},{2728,3476},{2729,3465},{2728,3454},{2733,3443},{2740,3443}}); // ordered from bank heading towards field
- private long startTime = 0;
- private int rewards = 0;
- private int price = 40;
- private State state = State.IDLE;
- public static enum State {
- PICKING, BANKING, IDLE
- }
- @Override
- public int onLoop() throws InterruptedException {
- state = determineState();
- switch (state) {
- case BANKING:
- return onBank();
- case PICKING:
- return onPicking();
- }
- return gRandom(500, 250);
- }
- private int onPicking() {
- int r = onWalk(false);
- if(r != -1) {
- return r;
- }
- RS2Object flax = objects.closest("flax");
- if(flax == null) {
- throw new IllegalStateException("Could not find any flax!");
- }
- if(flax.interact("pick") && startTime == 0) {
- startTime = System.currentTimeMillis();
- }
- return gRandom(300, 200);
- }
- private int onBank() {
- if(bank.isOpen()) {
- if(!inventory.isEmpty()) {
- bank.depositAll();
- } else if(!equipment.isEmpty()) {
- bank.depositEquipment();
- }
- } else {
- int r = onWalk(true);
- if(r != -1) {
- return r;
- }
- RS2Object booth = objects.closest("bank booth");
- if(booth == null) {
- throw new IllegalStateException("Could not find any bank booths!");
- }
- if(booth.interact("bank")) {
- new ConditionalSleep(5000) {
- @Override
- public boolean condition() {
- return bank.isOpen();
- }
- }.sleep();
- }
- }
- return gRandom(800, 400);
- }
- private int onWalk(boolean walkBack) {
- int pi = bankPath.getClosestIndex(myPosition());
- if(pi == -1) {
- return -1;
- }
- if(walkBack && bankArea.contains(myPosition())) {
- return -1;
- } else if(!walkBack && pickingArea.contains(myPosition())) {
- return -1;
- }
- int c = bankPath.getCount();
- int wi = walkBack ? 0 : c - 1;
- if(wi == pi) {
- return -1;
- }
- if(!settings.isRunning() && settings.getRunEnergy() > random(30, 50)) {
- settings.setRunning(true);
- return gRandom(400, 200);
- }
- while(wi >= 0 && wi < c && (walkBack ? wi <= pi : wi >= pi)) {
- Point point = bankPath.get(wi);
- if(localWalker.walk(point.x, point.y)) {
- return 0;
- }
- wi += walkBack ? 1 : -1;
- }
- return -1;
- }
- private State determineState() {
- if(!client.isLoggedIn()) {
- return State.IDLE;
- }
- if((inventory.getEmptySlots() <= 8 && bankPath.isCloserToBeginning(myPosition())) || inventory.isFull() || (bank.isOpen() && !equipment.isEmpty())) {
- return State.BANKING;
- } else {
- return State.PICKING;
- }
- }
- @Override
- public void onMessage(Message message) throws InterruptedException {
- if(message.getType() != Message.MessageType.PLAYER && message.getMessage().toLowerCase().equals("you pick some flax.")) {
- rewards++;
- }
- }
- @Override
- public void onPaint(Graphics2D g) {
- g.setColor(new Color(0, 0, 0, 50));
- g.fillRect(10, 300, 500, 35);
- g.setColor(Color.WHITE);
- long time = System.currentTimeMillis() - startTime;
- g.drawString("Flax/hour : " + (int) (rewards == 0 ? 0 : (3600000D / (time / rewards))), 15, 315);
- int gp = rewards * price;
- g.drawString("GP/hour : " + (int) (gp == 0 ? 0 : (3600000D / (time / gp))), 15, 330);
- g.drawString("Total flax: " + rewards, 195, 315);
- g.drawString("Total GP: " + (gp / 1000) + "K", 195, 330);
- g.drawString("State : " + state.name(), 360, 315);
- if(startTime > 0)
- g.drawString("Time running : " + formatTime(time), 360, 330);
- }
- private String formatTime(final long l) {
- final long days = TimeUnit.MILLISECONDS.toDays(l);
- final long hr = TimeUnit.MILLISECONDS.toHours(l - TimeUnit.DAYS.toMillis(days));
- final long min = TimeUnit.MILLISECONDS.toMinutes(l - TimeUnit.DAYS.toMillis(days) - TimeUnit.HOURS.toMillis(hr));
- final long sec = TimeUnit.MILLISECONDS.toSeconds(l - TimeUnit.DAYS.toMillis(days) - TimeUnit.HOURS.toMillis(hr) - TimeUnit.MINUTES.toMillis(min));
- //final long ms = TimeUnit.MILLISECONDS.toMillis(l - TimeUnit.DAYS.toMillis(days) - TimeUnit.HOURS.toMillis(hr) - TimeUnit.MINUTES.toMillis(min) - TimeUnit.SECONDS.toMillis(sec));
- return String.format("%02d:%02d:%02d:%02d", days, hr, min, sec);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement