Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
Buy OSRS Gold

Sell OSRS Gold
im4ever12c

Beyond Bows (Open-Source/Progressive Fletching)

Recommended Posts

Posted (edited)

beyondBowsMarked.png.a8c0773c131c92b427d3a212d19c235d.png

Download BeyondBows (Scripts Page)

Current Version: 1.0

Beyond Bows is a progressive fletching script that will fletch the highest level bow your fletching level will allow. All you have to do is have the logs in your bank, example (Logs, Oak Logs, Willow Logs, Maple Logs) and it will choose which it needs to fletch , and which type of bow (longbow/shortbow) it needs to cut.  This will all be done without having to modify and settings or preferences. The script is still currently under development but currently open-source and ready to use. I plan to go further than just progressive fletching with this, as I want to make this a free/open-source all-around fletching script.

The script will search for all logs that you are able to fletch relative to your level. If you do not have logs relative to your level, the script will search for any other logs that can be fletched into bows. If no logs are found in the bank, the script will stop as it has no supplies to run off of. If you are starting at less than 5 fletching to fletch shortbows, the script will begin to fletch arrowshafts until you reach level 5.

Many fail-safes have been implemented to ensure no EXP will be wasted by a flaw in the script.

Suicide botting complete. Level 99 achieved running 24/7 with no macro bans reported.

progressiveFletch.PNG.fbbc70c1733ea7393c1cb9d18a0af189.PNG

progressFletching.PNG.b5927cc95a92ba3f3183dbd78654c8bd.PNG

Currently Supporting:

Log Types: Logs, Oak Logs, Willow Logs, Maple Logs, Yew Logs, Magic Logs

Cut Types: Arrow Shafts, Shortbow (u), Longbow (u)

 

Future Implementation:

Cuts: Crossbow Stock, Shield (Add with Selective Mode)

Other Stuff: ABC2 Delays and actions, Timed World-Hopping, GUI for selective mode

 

V1.0 Code:

Spoiler

package scripts;

import java.awt.Color;

import java.awt.Font;
import java.awt.Graphics;

import org.tribot.api.Timing;
import org.tribot.api2007.Banking;
import org.tribot.api2007.Game;
import org.tribot.api2007.Interfaces;
import org.tribot.api2007.Inventory;
import org.tribot.api2007.Player;
import org.tribot.api2007.Skills;
import org.tribot.api2007.Skills.SKILLS;
import org.tribot.api2007.types.RSInterfaceChild;
import org.tribot.api2007.types.RSItem;
import org.tribot.script.Script;
import org.tribot.script.ScriptManifest;
import org.tribot.script.interfaces.Painting;

import scripts.FailSafeLogic;

@ScriptManifest(authors = { "IM4EVER12C" }, category = "Fletching", name = "Beyond Bows")
public class beyondBowFletcher extends Script implements Painting {

    private int fletchingLevelBefore;
    private int fletchingExpBefore;
    private int amountCut;
    private int logCounter;
    private int maxAFKTicks = 3;
    private static final long startTime = System.currentTimeMillis();

    @Override
    public void onPaint(Graphics g) {
        long timeRan = System.currentTimeMillis() - startTime;
        int alpha = 127;
        int alpha2 = 186;
        Color myColour = new Color(255, 25, 25, alpha);
        Color myColour2 = new Color(1, 1, 125, alpha2);
        g.setColor(myColour);
        g.fillRect(5, 244, 510, 90);
        g.setColor(myColour2);
        g.setFont(new Font("Calibri", Font.BOLD, 35));
        g.drawString("Beyond Bows V1.0", 140, 268);
        g.drawString("________________", 140, 268);
        g.setFont(new Font("Calibri", Font.BOLD, 19));
        g.setColor(Color.yellow);
        g.drawString("| Bows Fletched: " + amountCut, 10, 300);
        g.drawString("| Current Cut: " + currentCut(), 10, 315);
        g.drawString("| Fletching Level: " + SKILLS.FLETCHING.getActualLevel() + " ("
                + ((SKILLS.FLETCHING.getActualLevel() - fletchingLevelBefore)) + ")", 10, 330);
        g.drawString("| Experience Gained: " + gainedXp(), 245, 300);
        g.setFont(new Font("Calibri", Font.BOLD, 12));
        g.setColor(Color.WHITE);
        g.drawString("Time Elapsed: " + Timing.msToString(timeRan), 215, 284);
        g.drawString(FailSafeLogic.AFKtick + " (" + FailSafeLogic.currentAFKTicks + ")", 5, 25);
    }

    @Override
    public void run() {
        if (fletchingLevelBefore < 1) {
            fletchingLevelBefore = SKILLS.FLETCHING.getActualLevel();
        }
        while ((FailSafeLogic.currentAFKTicks < maxAFKTicks) && (!FailSafeLogic.noLogs) && (!FailSafeLogic.noKnife)) {
            sleep(fletch());
        }
        errorMessage();
    }

    private void logChangeCheck() {
        if (FailSafeLogic.hasChangedLogs() == true) {
            FailSafeLogic.resetfletchingclicks();
            cutting();
        }
    }

    private void getTotalFletched() {
        if (logCounter <= 0) {
            logCounter = Inventory.getCount(logType());
        } else if ((Inventory.getCount(logType()) < logCounter)) {
            amountCut += 1;
            FailSafeLogic.resetAFKticks();
            logCounter = Inventory.getCount(logType());
        }
    }

    private int gainedXp() {
        int xp = 0;
        if (fletchingExpBefore < 1) {
            fletchingExpBefore = SKILLS.FLETCHING.getXP();
        }
        xp = SKILLS.FLETCHING.getXP() - fletchingExpBefore;
        return xp;
    }

    private String bowType() {
        String l = "longbow";
        String s = "shortbow";
        int fletchingLvl = Skills.getActualLevel(SKILLS.FLETCHING);
        String bowType = null;
        if ((fletchingLvl < 5) && fletchingLvl >= 1) {
            bowType = "arrow shafts";
        } else if ((fletchingLvl < 10) && fletchingLvl >= 5) {
            bowType = s;
        } else if ((fletchingLvl < 20) && fletchingLvl >= 10) {
            bowType = l;
        } else if ((fletchingLvl < 25) && fletchingLvl >= 20) {
            bowType = s;
        } else if ((fletchingLvl < 35) && fletchingLvl >= 25) {
            bowType = l;
        } else if ((fletchingLvl < 40) && fletchingLvl >= 35) {
            bowType = s;
        } else if ((fletchingLvl < 50) && fletchingLvl >= 40) {
            bowType = l;
        } else if ((fletchingLvl < 55) && fletchingLvl >= 50) {
            bowType = s;
        } else if ((fletchingLvl < 65) && fletchingLvl >= 55) {
            bowType = l;
        } else if ((fletchingLvl < 70) && fletchingLvl >= 65) {
            bowType = s;
        } else if ((fletchingLvl < 80) && fletchingLvl >= 70) {
            bowType = l;
        } else if ((fletchingLvl < 85) && fletchingLvl >= 80) {
            bowType = s;
        } else if ((fletchingLvl <= 99) && fletchingLvl >= 85) {
            bowType = l;
        }
        return bowType;
    }

    private String logType() {
        int fletchingLvl = Skills.getActualLevel(SKILLS.FLETCHING);
        String log = null;
        if ((FailSafeLogic.logCheck == 1) || ((fletchingLvl < 20) && fletchingLvl >= 1)) {
            log = "Logs";
            FailSafeLogic.logCheck = 1;
        } else if ((FailSafeLogic.logCheck == 2) || ((fletchingLvl < 35) && fletchingLvl >= 20)) {
            log = "Oak logs";
            FailSafeLogic.logCheck = 2;
        } else if ((FailSafeLogic.logCheck == 3) || ((fletchingLvl < 50) && fletchingLvl >= 35)) {
            log = "Willow logs";
            FailSafeLogic.logCheck = 3;
        } else if ((FailSafeLogic.logCheck == 4) || ((fletchingLvl < 65) && fletchingLvl >= 50)) {
            log = "Maple logs";
            FailSafeLogic.logCheck = 4;
        } else if ((FailSafeLogic.logCheck == 5) || ((fletchingLvl < 80) && fletchingLvl >= 65)) {
            log = "Yew logs";
            FailSafeLogic.logCheck = 5;
        } else if ((FailSafeLogic.logCheck == 6) || ((fletchingLvl <= 99) && fletchingLvl >= 80)) {
            log = "Magic logs";
            FailSafeLogic.logCheck = 6;
        }
        return log;
    }

    private String currentCut() {
        String temp = null;
        String tempMod = null;
        if (!(logType() == null)) {
            if (logType() == "Logs") {
                temp = bowType();
            } else if (logType().toLowerCase().contains("logs")
                    && (!(bowType().toLowerCase().contains("arrow shafts")))) {
                tempMod = logType();
                temp = (tempMod.replace("logs", "") + " " + bowType());
            } else if (bowType().toLowerCase().contains("arrow shafts")) {
                temp = ("arrow shafts");
            } else {
                temp = (logType() + bowType());
            }
        }
        if (!(temp.contains("arrow shafts"))) {
            return temp + " (u)";
        } else {
            return temp;
        }
    }

    private void bankProcess() {
        if (Inventory.getCount(logType()) < 1) {
            if (!Banking.isBankLoaded()) {
                Banking.openBankBanker();
            } else {
                Banking.depositAllExcept("Knife");
                if ((!FailSafeLogic.hasClickedLogs) && (Inventory.getCount(logType()) < 1)) {
                    Banking.withdraw(27, logType());
                    FailSafeLogic.hasClickedLogs = true;
                } else if ((!FailSafeLogic.hasClickedKnife) && (Inventory.getCount("Knife") < 1)) {
                    Banking.withdraw(1, "Knife");
                    FailSafeLogic.hasClickedKnife = true;
                }
            }
        } else {
            if (Banking.isBankLoaded() == true) {
                Banking.close();
                FailSafeLogic.resetfletchingclicks();
            }
        }
    }

    private void cutting() {
        if ((Inventory.getCount(logType()) >= 1) && (Inventory.getCount("Knife") >= 1)) {
            if (Banking.isBankLoaded() == true) {
                Banking.close();
                FailSafeLogic.resetfletchingclicks();
            }
            RSItem[] myKnife = Inventory.find("Knife");
            RSItem[] myLogType = Inventory.find(logType());
            if (Player.getAnimation() == -1) {
                if (!FailSafeLogic.hasClickedKnife) {
                    if (!Game.getUptext().contains("Knife ->")) {
                        myKnife[0].click("Use");
                        FailSafeLogic.hasClickedKnife = true;
                    }
                }
                if (!FailSafeLogic.hasClickedLogs) {
                    if (Game.getUptext().contains("Knife ->")) {
                        int amt = 0;
                        int nxt = 0;
                        amt = Inventory.getCount(logType());
                        nxt = (int) (Math.random() * (amt - 0));
                        myLogType[nxt].click();
                        FailSafeLogic.hasClickedLogs = true;
                    }
                }
                if ((Interfaces.isInterfaceValid(270) == true) && Interfaces.isInterfaceSubstantiated(270, 16)) {
                    RSInterfaceChild rsInterfaceChildOption1 = Interfaces.get(270, 14);
                    RSInterfaceChild rsInterfaceChildOption2 = Interfaces.get(270, 15);
                    RSInterfaceChild rsInterfaceChildOption3 = Interfaces.get(270, 16);
                    RSInterfaceChild rsInterfaceChildOption4 = Interfaces.get(270, 17);
                    RSInterfaceChild rsInterfaceChildOption5 = Interfaces.get(270, 18);
                    if (rsInterfaceChildOption1.getComponentName().toLowerCase().contains(bowType())) {
                        rsInterfaceChildOption1.click();
                        FailSafeLogic.resetfletchingclicks();
                    } else if (rsInterfaceChildOption2.getComponentName().toLowerCase().contains(bowType())) {
                        rsInterfaceChildOption2.click();
                        FailSafeLogic.resetfletchingclicks();
                    } else if (rsInterfaceChildOption3.getComponentName().toLowerCase().contains(bowType())) {
                        rsInterfaceChildOption3.click();
                        FailSafeLogic.resetfletchingclicks();
                    } else if (rsInterfaceChildOption4.getComponentName().toLowerCase().contains(bowType())) {
                        rsInterfaceChildOption4.click();
                        FailSafeLogic.resetfletchingclicks();
                    } else if (rsInterfaceChildOption5.getComponentName().toLowerCase().contains(bowType())) {
                        rsInterfaceChildOption5.click();
                        FailSafeLogic.resetfletchingclicks();
                    }
                    sleep(1000);
                }
            }
        } else {
            logChangeCheck();
            bankProcess();
        }
    }

    private void errorMessage() {
        if (FailSafeLogic.noLogs == true) {
            println("No logs to fletch. Stopping script.");
        } else if (FailSafeLogic.noKnife == true) {
            println("No knife found. Stopping script.");
        } else if (FailSafeLogic.currentAFKTicks == maxAFKTicks) {
            println("Max AFK time reached. Stopping script.");
        }
    }

    private int fletch() {
        FailSafeLogic.fletchingfailsafe(logType(), currentCut());
        getTotalFletched();
        cutting();
        FailSafeLogic.AFKtick += 1;
        return 25;
    }
}

 

 

Edited by im4ever12c
Added new features

Share this post


Link to post
Share on other sites
On 6/9/2020 at 4:23 PM, im4ever12c said:

Hope this being open source helps if you script yourself, and hopefully the script treats your account and experience well! :) Let me know if you have any questions, concerns, etc. thanks!

@im4ever12c Hey, im starting to script but iam curious what your failsafe script is about?

Share this post


Link to post
Share on other sites
On 6/13/2020 at 2:15 PM, Zaross said:

@im4ever12c Hey, im starting to script but iam curious what your failsafe script is about?

Hi @Zaross,

My FailSafe script is keeping track of all necessary data to prevent any flaws to cause the script to go off track. Before it gets off, it will correct itself with pre-programmed values for any situation. This prevents the script from doing random activities which raises suspicion of botting activity, but also will make sure that Xp/Hr will remain consistent if ran for a long period of time. If you need examples or information from this script, let me know. I will be more than happy to inform you of any of these blocks of code.

Share this post


Link to post
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.
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.


  • Our picks

    • Hello everyone,

      Last week we tried to roll out Auth0 Login, but we lost that battle. Now it's time to win the war!

      Important changes

      When logging into the client, you'll now have to enter your Auth0 account credentials instead of your forums credentials

      Note: 2FA is still handled through your forums account (for the time being)



      Changes for existing users

      You'll have to link your Auth0 account to your forums account here: https://tribot.org/forums/settings/login/?service=11


      Auth0 accounts have been created for most existing users. Please use your forums email address and password to login.



      Important notes

      Make sure to verify your email address upon creating a new Auth0 account


      When we mention your Auth0 account, we mean your account used for auth.tribot.org as displayed below
      • 69 replies
    • To better support the upcoming changes (TRiBot X, new repository), we're switching our login handler to Auth0. Instead of logging in with the standard form, you'll now be required to login through our Auth0 application.

      All existing accounts which have been used within approximately the past year have been imported into Auth0 using the same email and password combination which has been stored on the forums.

      What does this mean for users?

      Your account credentials are now even more securely stored


      You'll be able to login via Facebook, Google, and others in the future


      Is there anything users have to do differently now?

      Existing users: You'll have to login with the standard login, open your Account Settings, then link your Auth0 account


      New users: You'll be redirected to our Auth0 app (auth.tribot.org) where you'll be able to create an account


      Why was this change made?

      The new apps we are creating (such as the new repository) aren't able to use the forums to handle user logins


      To centralize all user accounts in one area


      To ensure that the client login doesn't go down when the forums are having problems


      To speed up our development


      Other considerations

      There's no documentation or official support for using Invision Community combined with Auth0, so there are still a few kinks we're working out


      We're in the works of creating an account management panel specifically for Auth0 accounts (ETA August)


      It's not possible to change email addresses for the time being (this will be resolved this August)


      Changing passwords is a weird process for the time being. To change your password, you'll have to use the "Don't remember your password" tool on the Auth0 login page
        • Like
      • 11 replies
    • Over the past month, we've been working hard on TRiBot's new repository - a much needed update. This change has been deemed necessary for TRiBot X, and will allow us to really speed up development of all aspects of TRiBot.

      Today we are going to share what we've been working on!


      Now you must be wondering what kind of features the new repository will have.... well, you'll have to be patient for a little while longer. We're still figuring out various technical aspects so we can't provide answers to all possible questions. We're also focusing on development rather than writing about it so that everyone can get access to our latest developments at lightning speed. I will however answer a few users' questions.

      We're planning on a release of this early to mid August, giving users some goodies before TRiBot X's release.

      Thank you all for being patient. I hope everyone is excited as much as I am!
        • Like
      • 17 replies
    • Over the past few months, I’ve been working diligently on a new project - TRiBot X. Everything has been written from the ground up, with all of the best practices of software engineering. Every aspect of TRiBot has been re-imagined to support three main goals: flexibility, useability, and reliability.
        • Like
      • 50 replies
    • Come give us feedback on the next version of TRiBot!
        • Thanks
        • Like
      • 86 replies
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...