Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
flamekiller999

[SNIPPET] Fairy Ring Handler

Recommended Posts

The aim of this class is increase the ease of interacting with Fairy rings. I created it while making a script earlier today.

This class allows you to firstly check if the fairy ring interface is open, then select each letter of the fairy ring, and finally it allows the conformation of the teleport location.

Admittedly I could have simplified it slightly, however, this works perfectly fine for me. Hope some others find it helpful!

An example of how it can be used is as follows:

if (FairyRingHelper.get().fairyRingInterfaceIsOpen()) { 
    FairyRingHelper.get().setFirstFairyRingLetterB();
    FairyRingHelper.get().setSecondFairyRingLetterK();
    FairyRingHelper.get().setThirdFairyRingLetterR();
    FairyRingHelper.get().confirmFairyRingTeleport();
}

 

fairyRingHelper.java class:

package scripts.fairyRingHelper;

import org.tribot.api.General;
import org.tribot.api.Timing;
import org.tribot.api2007.Interfaces;
import org.tribot.api2007.Player;
import org.tribot.api2007.types.RSInterface;
import org.tribot.api2007.types.RSInterfaceChild;
import org.tribot.api2007.types.RSVarBit;

public class FairyRingHelper {

    // Created by Elliott 12/02/2020

    private FairyRingHelper() {}
    private static FairyRingHelper fairyRingHelper = new FairyRingHelper();
    public static FairyRingHelper get() {
        return fairyRingHelper;
    }
    public RSInterface fairyRingInterfaceIsValid() {
        return Interfaces.get(398);
    }

    public RSInterfaceChild firstFairyRingLetterClockwise() {
        return Interfaces.get(398, 19);
    }
    public RSInterfaceChild firstFairyRingLetterAntiClockwise() {
        return Interfaces.get(398, 20);
    }
    public RSInterfaceChild secondFairyRingLetterClockwise() {
        return Interfaces.get(398, 21);
    }
    public RSInterfaceChild secondFairyRingLetterAntiClockwise() {
        return Interfaces.get(398, 22);
    }
    public RSInterfaceChild thirdFairyRingLetterClockwise() {
        return Interfaces.get(398, 23);
    }
    public RSInterfaceChild thirdFairyRingLetterAntiClockwise() {
        return Interfaces.get(398, 24);
    }
    public RSInterfaceChild confirmFairyRingTeleportButton() {
        return Interfaces.get(398, 26);
    } 

    public RSVarBit firstFairyRingLetterVarbit = RSVarBit.get(3985); // 0 = a 1 = d 2 = c 3 = b
    public RSVarBit secondFairyRingLetterVarbit = RSVarBit.get(3986); // 0 = i 1 = l 2 = k 3 = j
    public RSVarBit thirdFairyRingLetterVarbit = RSVarBit.get(3987); // 0 = p 1 = s 2 = r 3 = q

    /** Call this to check that the fairy ring interface is open before selecting letters. **/
    public  boolean fairyRingInterfaceIsOpen(){
        return Interfaces.get(398) != null;
    }
    
    /** sets the first fairy ring letter to A **/
    public boolean setFirstFairyRingLetterA() {
            if (firstFairyRingLetterVarbit.getValue() != 0) {
                if (firstFairyRingLetterVarbit.getValue() == 1) {
                    final RSInterfaceChild firstFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                    firstFairyRingLetterClockwise.click();
                    General.sleep(General.randomSD(750, 75));
                }
                if (firstFairyRingLetterVarbit.getValue() == 2) {
                    final RSInterfaceChild firstFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                    firstFairyRingLetterClockwise.click();
                    General.sleep(General.randomSD(750, 75));
                    firstFairyRingLetterClockwise.click();
                    General.sleep(General.randomSD(750, 75));
                } else if (firstFairyRingLetterVarbit.getValue() == 3) {
                    final RSInterfaceChild firstFairyRingLetterAntiClockwise = firstFairyRingLetterAntiClockwise();
                    firstFairyRingLetterAntiClockwise.click();
                    General.sleep(General.randomSD(750, 75));
                }
            }
            General.println("[FAIRY RING NAVIGATION]: First letter 'A' is set");
            return firstFairyRingLetterVarbit.getValue() == 0;
    }

    /** sets the first fairy ring letter to D **/
    public boolean setFirstFairyRingLetterD() {

        if (firstFairyRingLetterVarbit.getValue() != 1) {
            if (firstFairyRingLetterVarbit.getValue() == 0) {
                final RSInterfaceChild firstFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                firstFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
            if (firstFairyRingLetterVarbit.getValue() == 3) {
                final RSInterfaceChild firstFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                firstFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
                firstFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
           else if (firstFairyRingLetterVarbit.getValue() == 2 ) {
                final RSInterfaceChild firstFairyRingLetterAntiClockwise = firstFairyRingLetterAntiClockwise();
                firstFairyRingLetterAntiClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
        }
        General.println("[FAIRY RING NAVIGATION]: First letter 'D' is set");
        return firstFairyRingLetterVarbit.getValue() == 1;
    }

    /** sets the first fairy ring letter to C **/
    public boolean setFirstFairyRingLetterC() {

        if (firstFairyRingLetterVarbit.getValue() != 2) {
            if (firstFairyRingLetterVarbit.getValue() == 0) {
                final RSInterfaceChild firstFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                firstFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
                firstFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
            if (firstFairyRingLetterVarbit.getValue() == 1) {
                final RSInterfaceChild firstFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                firstFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
            else if (firstFairyRingLetterVarbit.getValue() == 3 ) {
                final RSInterfaceChild firstFairyRingLetterAntiClockwise = firstFairyRingLetterAntiClockwise();
                firstFairyRingLetterAntiClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
        }
        General.println("[FAIRY RING NAVIGATION]: First letter 'C' is set");
        return firstFairyRingLetterVarbit.getValue() == 2;
    }

    /** sets the first fairy ring letter to B **/
    public boolean setFirstFairyRingLetterB() {

        if (firstFairyRingLetterVarbit.getValue() != 3) {

            if (firstFairyRingLetterVarbit.getValue() == 1) {
                final RSInterfaceChild firstFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                firstFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
                firstFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
            if (firstFairyRingLetterVarbit.getValue() == 2) {
                final RSInterfaceChild firstFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                firstFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
            else if (firstFairyRingLetterVarbit.getValue() == 0 ) {
                final RSInterfaceChild firstFairyRingLetterAntiClockwise = firstFairyRingLetterAntiClockwise();
                firstFairyRingLetterAntiClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
        }
        General.println("[FAIRY RING NAVIGATION]: First letter 'B' is set");
        return firstFairyRingLetterVarbit.getValue() == 3;
    }

    /** sets the second fairy ring letter to I **/
    public boolean setSecondFairyRingLetterI() {

        if (secondFairyRingLetterVarbit.getValue() != 0) {
            if (secondFairyRingLetterVarbit.getValue() == 1) {
                final RSInterfaceChild secondFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                secondFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
            if (secondFairyRingLetterVarbit.getValue() == 2) {
                final RSInterfaceChild secondFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                secondFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
                secondFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
            else if (secondFairyRingLetterVarbit.getValue() == 3) {
                final RSInterfaceChild secondFairyRingLetterAntiClockwise = firstFairyRingLetterClockwise();
                secondFairyRingLetterAntiClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
        }
        General.println("[FAIRY RING NAVIGATION]: Second letter 'I' is set");
        return secondFairyRingLetterVarbit.getValue() == 0;
    }

    /** sets the second fairy ring letter to L **/
    public boolean setSecondFairyRingLetterL() {

        if (secondFairyRingLetterVarbit.getValue() != 1) {
            if (secondFairyRingLetterVarbit.getValue() == 0) {
                final RSInterfaceChild secondFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                secondFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
            if (secondFairyRingLetterVarbit.getValue() == 3) {
                final RSInterfaceChild secondFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                secondFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
                secondFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
            else if (secondFairyRingLetterVarbit.getValue() == 2) {
                final RSInterfaceChild secondFairyRingLetterAntiClockwise = firstFairyRingLetterClockwise();
                secondFairyRingLetterAntiClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
        }
        General.println("[FAIRY RING NAVIGATION]: Second letter 'L' is set");
        return secondFairyRingLetterVarbit.getValue() == 1;
    }

    /** sets the second fairy ring letter to K **/
    public boolean setSecondFairyRingLetterK() {

        if (secondFairyRingLetterVarbit.getValue() != 2) {
            if (secondFairyRingLetterVarbit.getValue() == 1) {
                final RSInterfaceChild secondFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                secondFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
            if (secondFairyRingLetterVarbit.getValue() == 0) {
                final RSInterfaceChild secondFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                secondFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
                secondFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
            else if (secondFairyRingLetterVarbit.getValue() == 3) {
                final RSInterfaceChild secondFairyRingLetterAntiClockwise = firstFairyRingLetterClockwise();
                secondFairyRingLetterAntiClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
        }
        General.println("[FAIRY RING NAVIGATION]: Second letter 'K' is set");
        return secondFairyRingLetterVarbit.getValue() == 2;
    }

    /** sets the second fairy ring letter to J **/
    public boolean setSecondFairyRingLetterJ() {

        if (secondFairyRingLetterVarbit.getValue() != 3) {
            if (secondFairyRingLetterVarbit.getValue() == 2) {
                final RSInterfaceChild secondFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                secondFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
            if (secondFairyRingLetterVarbit.getValue() == 1) {
                final RSInterfaceChild secondFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                secondFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
                secondFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
            else if (secondFairyRingLetterVarbit.getValue() == 0) {
                final RSInterfaceChild secondFairyRingLetterAntiClockwise = firstFairyRingLetterClockwise();
                secondFairyRingLetterAntiClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
        }
        General.println("[FAIRY RING NAVIGATION]: Second letter 'J' is set");
        return secondFairyRingLetterVarbit.getValue() == 3;
    }

    /** sets the second fairy ring letter to P **/
    public boolean setThirdFairyRingLetterP() {

        if (thirdFairyRingLetterVarbit.getValue() != 0) {
            if (thirdFairyRingLetterVarbit.getValue() == 1) {
                final RSInterfaceChild thirdFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                thirdFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
            if (thirdFairyRingLetterVarbit.getValue() == 2) {
                final RSInterfaceChild thirdFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                thirdFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
                thirdFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
            else if (thirdFairyRingLetterVarbit.getValue() == 3) {
                final RSInterfaceChild thirdFairyRingLetterAntiClockwise = firstFairyRingLetterClockwise();
                thirdFairyRingLetterAntiClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
        }
        General.println("[FAIRY RING NAVIGATION]: Third letter 'P' is set");
        return thirdFairyRingLetterVarbit.getValue() == 0;
    }

    /** sets the second fairy ring letter to S **/
    public boolean setThirdFairyRingLetterS() {

        if (thirdFairyRingLetterVarbit.getValue() != 1) {
            if (thirdFairyRingLetterVarbit.getValue() == 0) {
                final RSInterfaceChild thirdFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                thirdFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
            if (thirdFairyRingLetterVarbit.getValue() == 3) {
                final RSInterfaceChild thirdFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                thirdFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
                thirdFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
            else if (thirdFairyRingLetterVarbit.getValue() == 2) {
                final RSInterfaceChild thirdFairyRingLetterAntiClockwise = firstFairyRingLetterClockwise();
                thirdFairyRingLetterAntiClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
        }
        General.println("[FAIRY RING NAVIGATION]: Third letter 'S' is set");
        return thirdFairyRingLetterVarbit.getValue() == 1;
    }

    /** sets the second fairy ring letter to R **/
    public boolean setThirdFairyRingLetterR() {

        if (thirdFairyRingLetterVarbit.getValue() != 2) {
            if (thirdFairyRingLetterVarbit.getValue() == 1) {
                final RSInterfaceChild thirdFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                thirdFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
            if (thirdFairyRingLetterVarbit.getValue() == 0) {
                final RSInterfaceChild thirdFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                thirdFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
                thirdFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
            else if (thirdFairyRingLetterVarbit.getValue() == 3) {
                final RSInterfaceChild thirdFairyRingLetterAntiClockwise = firstFairyRingLetterClockwise();
                thirdFairyRingLetterAntiClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
        }
        General.println("[FAIRY RING NAVIGATION]: Third letter 'R' is set");
        return thirdFairyRingLetterVarbit.getValue() == 2;
    }

    /** sets the second fairy ring letter to Q **/
    public boolean setThirdFairyRingLetterQ() {

        if (thirdFairyRingLetterVarbit.getValue() != 3) {
            if (thirdFairyRingLetterVarbit.getValue() == 2) {
                final RSInterfaceChild thirdFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                thirdFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
            if (thirdFairyRingLetterVarbit.getValue() == 1) {
                final RSInterfaceChild thirdFairyRingLetterClockwise = firstFairyRingLetterClockwise();
                thirdFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
                thirdFairyRingLetterClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
            else if (thirdFairyRingLetterVarbit.getValue() == 0) {
                final RSInterfaceChild thirdFairyRingLetterAntiClockwise = firstFairyRingLetterClockwise();
                thirdFairyRingLetterAntiClockwise.click();
                General.sleep(General.randomSD(750, 75));
            }
        }
        General.println("[FAIRY RING NAVIGATION]: Third letter 'Q' is set");
        return thirdFairyRingLetterVarbit.getValue() == 3;
    }

    /** confirms fairy rings and initiates the teleport **/
    public boolean confirmFairyRingTeleport() {

        if (fairyRingInterfaceIsOpen()) {
            final RSInterfaceChild confirmFairyRingTeleport = confirmFairyRingTeleportButton();
            confirmFairyRingTeleport.click();
            General.sleep(General.randomSD(2000, 75));
            General.println("[FAIRY RING NAVIGATION]: Confirming fairy ring location.");
            Timing.waitCondition(() -> {
                while (Player.getAnimation() == 3265 || Player.getAnimation() == 3266) {
                    General.println("[FAIRY RING NAVIGATION]: Player is interacting with fairy rings, sleeping until finished.");
                    General.sleep(General.randomSD(1700, 100)); }
                return Player.getAnimation() == -1;
                }, General.randomSD(1500, 100));
        }
        return !fairyRingInterfaceIsOpen();
    }

}

 

Edited by flamekiller999
Updated fairyRingHelper.java class
  • Like 3

Share this post


Link to post
Share on other sites
9 minutes ago, bbuu20 said:

Wow, nice work! One suggestion, you could make a method setFairyRingLetter(int column, char letter). I realize this would be difficult due to the nature of interfaces, but I'm sure you could find some way to do it.

Yeah funnily enough I though about that as I was finishing this up. Then it would make it nicer to print the location into the Debug too. That's definitely one of my ideas for developing this into the future and cleaning up the code. :) Also congratulations on Scripter rank!

Edited by flamekiller999

Share this post


Link to post
Share on other sites
12 minutes ago, flamekiller999 said:

Yeah funnily enough I though about that as I was finishing this up. Then it would make it nicer to print the location into the Debug too. That's definitely one of my ideas for developing this into the future and cleaning up the code. :) Also congratulations on Scripter rank!

Thanks!

Share this post


Link to post
Share on other sites

The way you use interfaces for the buttons (clockwise, etc) is going to lead to issues in several instances:

  1. If FairyRingHelper.get() is called without the interface open, all of them will be null and that will never change.
  2. If the character logs out (probably other causes too, not sure), the interfaces will no longer be valid/substantiated.

I would recommend creating methods for turning the dials instead and checking if the interface is substantiated before interacting with it.  If it is not, try reloading the interface.

 

I suggest you create an enum for all of the codes based upon the destination name (so it's easier to use without knowing the specific code for the destination), and provide methods to use the fairy ring to a target destination by enum.  It an be optimized it to take the "last destination" option if matching, and so on.

Share this post


Link to post
Share on other sites

A better way to handle choosing the letter might be to do a while loop (with a fail-safe!) to click until the correct letter is chosen. Your method of of using the if statements looks a bit messy.

You could put it in Github and let people contribute to it. I know I would.

Share this post


Link to post
Share on other sites
21 minutes ago, FALSkills said:

The way you use interfaces for the buttons (clockwise, etc) is going to lead to issues in several instances:

  1. If FairyRingHelper.get() is called without the interface open, all of them will be null and that will never change.
  2. If the character logs out (probably other causes too, not sure), the interfaces will no longer be valid/substantiated.

I would recommend creating methods for turning the dials instead and checking if the interface is substantiated before interacting with it.  If it is not, try reloading the interface.

 

I suggest you create an enum for all of the codes based upon the destination name (so it's easier to use without knowing the specific code for the destination), and provide methods to use the fairy ring to a target destination by enum.  It an be optimized it to take the "last destination" option if matching, and so on.

Thank you for the feedback, its always really appreciated! I agree that the interface needs to be open. The first part of this will always be to call the following part to make sure the interface is open.

    public  boolean fairyRingInterfaceIsOpen(){
        return Interfaces.get(398) != null;
    }

But I agree with you on the enum front, I will be looking to optimise it more to make this easier to use in the future. I also am looking at building upon this to add the saved searches so that interaction with the dials doesn't even need to be used.

Share this post


Link to post
Share on other sites
19 minutes ago, Trent said:

A better way to handle choosing the letter might be to do a while loop (with a fail-safe!) to click until the correct letter is chosen. Your method of of using the if statements looks a bit messy.

You could put it in Github and let people contribute to it. I know I would.

https://github.com/FlameK/src/blob/master/api/fairyRingHandler/fairyRingHandler.java

Thanks for the suggestion! Feel free to make and contributions you would like! I will also be looking to optimise this over the coming weeks :)

Share this post


Link to post
Share on other sites
1 minute ago, flamekiller999 said:

Thank you for the feedback, its always really appreciated! I agree that the interface needs to be open. The first part of this will always be to call the following part to make sure the interface is open.

    public  boolean fairyRingInterfaceIsOpen(){
        return Interfaces.get(398) != null;
    }

But I agree with you on the enum front, I will be looking to optimise it more to make this easier to use in the future. I also am looking at building upon this to add the saved searches so that interaction with the dials doesn't even need to be used.

The problem that I'm pointing out, though, is that the interfaces are instantiated as class variables the first time that the get() method is called.  If the fairy ring interface is not open when the get() method is called, then those interfaces are all null and there is never a spot that they are null checked or updated.

Share this post


Link to post
Share on other sites
12 minutes ago, FALSkills said:

The problem that I'm pointing out, though, is that the interfaces are instantiated as class variables the first time that the get() method is called.  If the fairy ring interface is not open when the get() method is called, then those interfaces are all null and there is never a spot that they are null checked or updated.

Oh good point! Yeah that was stupid of me! Thanks for pointing that out. I will add more check into to make sure that interface is open and null checked Thanks for pointing that out :)

Share this post


Link to post
Share on other sites
1 hour ago, Einstein said:

I haven't read the snippet thoroughly, but at a first glance I can tell that there's a huge amount of duplicate code.

If you create stronger abstractions, you could cut 80% of the lines.

 

Agreed, part of my plan for this it to increase its efficiency and also increase it's functionality in the coming weeks. (I'm having to fit it in around my thesis and work at the moment)

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.

Sign in to follow this  

  • Our picks

    • [CONTEST ANNOUNCEMENT] 2019 Botter's Choice Awards
      2019 Botter’s Choice Awards

      To celebrate the launch of our TRiBot Official RuneScape Bot Blog,

      we’re doing a giveaway! 

      The TRiBot Official RuneScape Bot Blog: 

      Teaching you how to do more advanced botting, faster.
      Contest Details

      Prize: 3 winners will be selected to win 25 TRiBot credits.

      How to enter:

      Respond to this forum post by November 12th tagging the thread for: 

      Your favorite script

      Provide a brief explanation (1-2 sentences) why you think that script should be put in the top 5. 

      Who can enter?

      Botter’s who are not currently scripters. Sorry scripters, the people are going to vote. Your contest is here.

      The top 5 in each category will be showcased on our TRiBot Official RuneScape Bot Blog in a “People’s Choice” section and promoted across the TRiBot website. 

      -- Credits will be awarded based on thoughtfulness and humor -- 

      Bonus points

      Use a meme in your explanation. Because we all love memes.

      *no purchase necessary. Winners will be announced on Friday, November 15, 2019 at 4:00 p.m. on our News and Announcements forum. 

      -- Vote Below -- 
      • 28 replies
    • [READ TO THE END FOR A TEASER]

      I've noticed some new TRiBotters have had some troubles finding out sources of how to do certain things, such as using advanced scripts and often get lost in the forums.

      We are still getting posts asking where to start, what to do, recommended scripts, etc. 

      As many of you know, I am new to the team, and had troubles myself learning how to bot, let alone script. 

      So, what our team decided to do was make it easier to learn how to bot, how to script, and just become an overall better botter and scripter faster. 

      As some of you might have seen, I've posted 3 new blogs, you can check it out by clicking on the following picture or here.


      These first 3 blogs are the first of many blogs that will be TRiBot official. They are encouraged to be challenged, improved upon and act as A Best Practices Guide for Botters.

      What information would you like to see in the blogs?

      👇 [TEASER] 👇

      .

      .

      .

      We are going to be hosting a  CONTEST  this  OCTOBER.

      Its scary to think how soon you'll find out.👻

      Stay tuned.


      - RileyZ
      • 8 replies
    • Today marks a big day for TRiBot! To make it easier for users to use TRiBot, we've created installers available for every platform! These installers are all bundled with the latest version of OpenJDK 1.8 (Java 😎, which is LG compatible.

      Using TRiBot is now easy. Simply download the installer for your platform, install TRiBot, and run it. The TRiBot Loader will correctly identify the bundled JDK so there's no need to change the Java selection.

      Windows

      EXE installer: TRiBot-windows-x64-4.0.3.exe


      MSI installer: TRiBot-windows-x64-4.0.3.msi


      Portable version: TRiBot-windows-x64-4.0.3.zip


      Mac OS

      Installer: TRiBot-macos-4.0.3.dmg


      Portable version: TRiBot-macos-4.0.3.tgz


      Unix/Linux

      Installer: TRiBot-unix-4.0.3.sh


      RPM installer (CentOS/Fedora): TRiBot-linux-4.0.3.rpm


      DEB installer (Debian): TRiBot-linux-4.0.3.deb


      Portable version: TRiBot-unix-4.0.3.tar.gz


      Platform Independent

      JAR file: tribot-loader-4.0.3.jar


      Note that this jar file does not include the bundled JDK.



      Windows and Mac OS users may notice a warning message stating that the installer/application is un-recognized or un-trusted. Please ignore this message and proceed with running the installer/application. We need to acquire a code signing certificate so that we can sign the installers letting the operating system know that these files can be trusted. It will take a week or more to acquire one, so please hold tight.

      Other notable changes to the TRiBot Loader:

      Support getting the version from OpenJDK distributions


      Add check for bundled JDK


      Copy OpenJDK tools.jar to the bundled JDK if not present


      Set the current java as the first available list entry


      Ignore Java versions which are symbolic links


      Make the bundled JDK the preferred Java version


      Update icon images


      Reduce the number of HTTP calls
      • 25 replies
    • TRiBot is looking to improve a lot of its customer relationship management, customer on boarding process, customer experience, design elements, community engagement and pretty much everything else you can imagine when it comes to marketing.

      Our goal: To ensure that the marketing done TRULY reflects the experience and does not shine an inaccurate light on what TRiBot is lacking in.

      So I ask, what do you love about TRiBot and what do you hate about TRiBot? What does O S Bot, Rune M8, PowR Bot and Dre amBot do better? (yes I purposely didn't spell it right 😂).

      Love, 

      RileyZ
      • 18 replies
    • Hello TRiBot,

      Today we have a significant release that has been in the works for the last month addressing several key issues, features and bugs in the backlog.

      With these changes, we are also including a new TRiBot Loader which will allow you to select any version that is released. This adds the flexibility of allowing you to revert to a previous version should an issue arise, run development only builds, view an accurate change log between versions etc. we are very proud to offer this feature and think it will add a lot more functionality down the road as we continue to release new versions.

      These changes include 80+ commits by our development team, a list of them is summarized below and also available for your viewing pleasure in the new TRiBot Loader.

      In addition, we have taken additional steps to improve as a development team by adding continuous integration and deployment into our workflow to assist in delivering timely releases such as bug fixes as well as new features on a weekly basis depending on our development cycle.
      • 39 replies
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...