Jump to content
Reminiscence

[Fletchy] Auto-leveling from 1-99

Recommended Posts

Automatically levels you up from 1-99. No need to configure, goes based off of skill level.

YJrUdDT.jpg

http://www.mediafire.com/file/cxrff1log2cz9d4/fletchy.jar

import org.osbot.rs07.api.ui.Skill;
import org.osbot.rs07.script.Script;

import org.osbot.rs07.script.ScriptManifest;
import org.osbot.rs07.utility.ConditionalSleep;

import java.awt.*;

@ScriptManifest(name = "Fletchy", author = "Sonysi", version = 1.0, info = "", logo = "") 

public class Fletchy extends Script {
	long timeElapsed, startTime;
	String currentToDo, state = "", knife = "Knife", requiredLogs;

	@Override
	public void onStart() {
		experienceTracker.start(Skill.FLETCHING);
		startTime = System.currentTimeMillis();
	}

	@Override
	public void onExit() {
		log("Exp gained: " + experienceTracker.getGainedXP(Skill.FLETCHING));
		log("Levels gained: " + experienceTracker.getGainedLevels(Skill.FLETCHING));
	}

	void whatToCut() {
		if (skills.getDynamic(Skill.FLETCHING) < 10) {
			requiredLogs = "Logs";
			currentToDo = "Arrow shafts";
		}

		if (skills.getDynamic(Skill.FLETCHING) >= 10 && skills.getDynamic(Skill.FLETCHING) < 20) {
			requiredLogs = "Logs";
			currentToDo = "Longbows";
		}

		if (skills.getDynamic(Skill.FLETCHING) >= 20 && skills.getDynamic(Skill.FLETCHING) < 25) {
			requiredLogs = "Oak logs";
			currentToDo = "Oak shortbows";
		}

		if (skills.getDynamic(Skill.FLETCHING) >= 25 && skills.getDynamic(Skill.FLETCHING) < 35) {
			requiredLogs = "Oak logs";
			currentToDo = "Oak longbows";
		}

		if (skills.getDynamic(Skill.FLETCHING) >= 35 && skills.getDynamic(Skill.FLETCHING) < 40) {
			requiredLogs = "Willow logs";
			currentToDo = "Willow shortbows";
		}

		if (skills.getDynamic(Skill.FLETCHING) >= 40 && skills.getDynamic(Skill.FLETCHING) < 50) {
			requiredLogs = "Willow logs";
			currentToDo = "Willow longbows";
		}

		if (skills.getDynamic(Skill.FLETCHING) >= 50 && skills.getDynamic(Skill.FLETCHING) < 55) {
			requiredLogs = "Maple logs";
			currentToDo = "Maple shortbows";
		}

		if (skills.getDynamic(Skill.FLETCHING) >= 55 && skills.getDynamic(Skill.FLETCHING) < 70) {
			requiredLogs = "Maple logs";
			currentToDo = "Maple longbows";
		}

		if (skills.getDynamic(Skill.FLETCHING) >= 70 && skills.getDynamic(Skill.FLETCHING) < 99) {
			requiredLogs = "Yew logs";
			currentToDo = "Yew longbows";
		}
		state = "Checking stats";
	}

	@Override

	public int onLoop() throws InterruptedException {

		if (grandExchange.isOpen()) {
			grandExchange.close();
			new ConditionalSleep(5000) {

				@Override
				public boolean condition() throws InterruptedException {

					return !grandExchange.isOpen();
				}
			}.sleep();
		}

		if (requiredLogs == null) {
			whatToCut();
		}

		if (dialogues.isPendingContinuation()) {
			//Utilities.takeScreenshot();
			dialogues.clickContinue();
		}

		if (!inventory.contains(requiredLogs) || !inventory.contains(knife)) {
			if (!bank.isOpen()) {
				state = "opening bank";
				bank.open();
				new ConditionalSleep(5000) {

					@Override
					public boolean condition() throws InterruptedException {
						return bank.isOpen();
					}
				}.sleep();
			}

			if (bank.isOpen()) {
				if ((!inventory.contains(knife) || !inventory.contains(requiredLogs)) && !inventory.isEmpty()) {
					state = "Depositing";
					bank.depositAllExcept(knife);
					new ConditionalSleep(5000) {

						@Override
						public boolean condition() throws InterruptedException {
							return inventory.onlyContains(knife);
						}
					}.sleep();
				}

				if (!inventory.contains(knife)) {
					state = "Withdrawing knife";
					bank.withdraw(knife, 1);
					new ConditionalSleep(5000) {

						@Override
						public boolean condition() throws InterruptedException {
							return inventory.contains(knife);
						}
					}.sleep();
				}

				if (!inventory.contains(requiredLogs)) {
					whatToCut();
					log(requiredLogs);
					state = "Withdrawing " + requiredLogs;
					bank.withdraw(requiredLogs, 27);
					new ConditionalSleep(5000) {

						@Override
						public boolean condition() throws InterruptedException {
							return inventory.contains(requiredLogs);
						}
					}.sleep();
				}

			}
		}

		if (bank.isOpen() && !bank.contains(requiredLogs)) {
			logoutTab.logOut();
			stop();
		}

		if (bank.isOpen()) {
			if (inventory.contains(knife) && inventory.contains(requiredLogs)) {
				state = "Closing bank";
				bank.close();
				new ConditionalSleep(5000) {

					@Override
					public boolean condition() throws InterruptedException {
						return !bank.isOpen();
					}
				}.sleep();
			}
		}


		if (inventory.contains(knife) && inventory.contains(requiredLogs) && !bank.isOpen()) {
			if (!isAnimating()) {

				if (widgets.get(270, 16, 38) == null) {
					state = "Interacting";
					inventory.interact("Use", knife);
					new ConditionalSleep(5000) {

						@Override
						public boolean condition() throws InterruptedException {

							return inventory.isItemSelected();
						}
					}.sleep();
					state = "Cutting";
					inventory.interact("Use", requiredLogs);

					new ConditionalSleep(5000) {

						@Override
						public boolean condition() throws InterruptedException {

							return widgets.get(270, 16, 38) != null;
						}
					}.sleep();
				}

				if (widgets.get(270, 16, 38) != null) {
					if (currentToDo == "Arrow shafts") {
						widgets.get(270,  14, 38).interact();
					}

					if (currentToDo == "Longbows") {
						widgets.get(270,  17, 38).interact();
					}

					if (currentToDo == "Oak shortbows" || currentToDo == "Willow shortbows" || currentToDo == "Maple shortbows") {
						widgets.get(270,  15, 38).interact();
					}

					if (currentToDo == "Oak longbows" || currentToDo == "Willow longbows" || currentToDo == "Maple longbows" || currentToDo == "Yew longbows") {
						widgets.get(270,  16, 38).interact();
					}
					sleep();
				}

			}
		}

		return 100;

	}

	void sleep() throws InterruptedException {
		new ConditionalSleep(5000) {

			@Override
			public boolean condition() throws InterruptedException {

				return !isAnimating() && !inventory.contains(requiredLogs);
			}
		}.sleep();
	}

	boolean isAnimating() {
		for (int i = 0; i < 300; i++) {
			if (players.myPlayer().isAnimating()) {
				return true;
			}
		}
		return false;
	}

	private final RenderingHints antialiasing = new RenderingHints(
			RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

	private final Color color1 = new Color(0, 0, 0, 205);
	private final Color color2 = new Color(0, 0, 0);
	private final Color color3 = new Color(255, 255, 255);
	private final BasicStroke stroke1 = new BasicStroke(1);
	private final Font font1 = new Font("Arial", 0, 12);

	public String formatTime(final long time) {
		final int sec = (int) (time / 1000), h = sec / 3600, m = sec / 60 % 60, s = sec % 60;
		return (h < 10 ? "0" + h : h) + ":" + (m < 10 ? "0" + m : m) + ":" + (s < 10 ? "0" + s : s);
	}

	public void onPaint(Graphics2D g) {
		timeElapsed = System.currentTimeMillis() - startTime;
		g.setRenderingHints(antialiasing);

		g.setColor(color1);
		g.fillRect(330, 260, 185, 78);
		g.setColor(color2);
		g.setStroke(stroke1);
		g.drawRect(330, 260, 185, 78);
		g.setFont(font1);
		g.setColor(color3);
		g.drawString("EXP: " + experienceTracker.getGainedXP(Skill.FLETCHING), 333, 275);
		g.drawString("EXP/Hour: " + experienceTracker.getGainedXPPerHour(Skill.FLETCHING), 333, 290);
		g.drawString("Levels: " + experienceTracker.getGainedLevels(Skill.FLETCHING), 333, 305);
		g.drawString("State: " + state, 333, 320);
		g.drawString("Runtime: " + formatTime(timeElapsed), 333, 335);

	}

}

Edited by Sonysi
  • Like 4
Link to comment
Share on other sites

f8d.jpg

 

format your data into enums so it's easier to manage/update

    private enum Product {
        ARROW_SHAFT("Logs", 270, 14, 38);

        private final String log;
        private final int[] widget;

        Product(String log, int... widget) {
            this.log = log;
            this.widget = widget;
        }
    }

    private RS2Widget getWidget(Product product) {
        return getWidgets().get(product.widget[0], product.widget[1], product.widget[2]);
    }

then you can simplify that ugly if else method a bit

        int level = skills.getDynamic(Skill.FLETCHING);
        if (level >= 70) {
        } else if (level >= 55) {
        } else if (level >= 50) {
        } else if (level >= 40) {
        } else if (level >= 35) {
        } else if (level >= 25) {
        } else if (level >= 10) {
        } else {
          return ARROW_SHAFT;
        }

 

do yourself a favor and simplify those nasty ConditionalSleeps

    public boolean sleep(int ms, BooleanSupplier supplier) {
        return new ConditionalSleep(ms) {

            @Override
            public boolean condition() throws InterruptedException {
                return supplier.getAsBoolean();
            }
        }.sleep();
    }

    sleep(5000, () -> bank.isOpen());

 

  • Like 2
Link to comment
Share on other sites

On 14-2-2018 at 12:18 AM, H0rn said:

boolean isAnimating() {
		for (int i = 0; i < 300; i++) {
			if (players.myPlayer().isAnimating()) {
				return true;
			}
		}
		return false;
	}

 

Please? What is that even for :feels:

I don't understand that one either.

No need for that for loop + no need to create your own isAnimating method.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...