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

Sell OSRS Gold
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

    • 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
      • 31 replies
    • Come give us feedback on the next version of TRiBot!
        • Thanks
        • Like
      • 74 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
        • Like
      • 23 replies
    • Over the last three weeks, I've been working on upgrading our server infrastructure. It's finally ready and is now live!

      Why?

      Increased reliability - less server errors


      Increased availability - less downtime


      Increased security - keeping us and you secure


      Increased capacity - ability to serve you better


      Increased speed - less waiting for things to load


      Faster development - server and service updates will come faster


      What are the changes?

      Move from a single AWS EC2 instance to AWS ECS (Elastic Container Service)


      Distributed computing


      Load balancing


      Git management of server files and filesystem


      Redis caching


      How?

      AWS ECS (with 10 EC2 instances)


      AWS ElastiCache (Redis)


      AWS Load Balancing


      AWS EFS (Elastic file system)


      Please bare with us as I continue to tune the server for maximum performance. Slow loading speeds may occur temporarily. I thank everyone for their patience.

      Please post on this thread if you experience any issues other than slow loading times.
        • Like
      • 51 replies
    • This release will:

      Fix prayers and world hopper API (Thanks @JoeDezzy1 and @erickho123)


      Improve banking API (Thanks @Encoded)


      Adds methods for returning and using Java Lists, rather than arrays


      Slightly randomizes some hardcoded behaviour


      Removes sleeps from waitConditions; the efficiency saving potential is negligible in these use-cases, therefore cleaner code is preferable


      Other back-end improvements





      Note: If you are using LG, please restart both the RS client and TRiBot.
        • Sad
        • Haha
        • Thanks
        • Like
      • 90 replies
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...