Jump to content

[Fletchy] Auto-leveling from 1-99


Reminiscence

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

  • 1 month later...
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

  • 1 month later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

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...