Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
TRiLeZ

Guide to Implementing ABC2

Recommended Posts

ABC2 is the second version of TRiBot's Anti-Ban Compliance utility, whose aim is to provide scripts with a standardized anti-ban, backed by character profiles. ABC2 has been built upon statistical analysis of human playing data, making our anti-ban the most human-like on the market. Read more about the importance of modeling human playing data here: https://tribot.org/forums/topic/60719-tribot-release-9300-0-abc2/.
 
So now you must be wondering how to implement ABC2 in your script. First, I will link the main utility: https://tribot.org/doc/org/tribot/api/util/abc/ABCUtil.html. Each script should use one instance of ABCUtil, unless the script switches RuneScape accounts during runtime. Since each ABCUtil instance is tied to a single character profile for an account, the script must create a new ABCUtil instance if a new RuneScape account starts to be used throughout the runtime of the script.
 
Upon creating a new ABCUtil instance, a thread will be started which is in charge of tracking XP gains, and making the mouse enter/leave the game screen. For this reason, it is important to call ABCUtil#close when you are finished with a specific ABCUtil instance to stop the background thread from executing, and to clean-up.
 
Now, there are four types of scenarios which ABCUtil oversees:

Timed Actions
 
These are actions which are performed based on internal timers. For each timed action, simply use the should method to check if you should perform the action. If true, call the other corresponding method to perform the action. These actions should only be performed when the player isn't particularly busy at the time. Ex: If the player is woodcutting, these actions should be checked/performed while chopping down the tree.
 
Example on how to use the methods:

// Here our player is idling, so we can check/perform the timed actions.
if (this.abc_util.shouldCheckTabs())
	this.abc_util.checkTabs();

if (this.abc_util.shouldCheckXP())	
	this.abc_util.checkXP();

if (this.abc_util.shouldExamineEntity())
	this.abc_util.examineEntity();

if (this.abc_util.shouldMoveMouse())
	this.abc_util.moveMouse();

if (this.abc_util.shouldPickupMouse())
	this.abc_util.pickupMouse();

if (this.abc_util.shouldRightClick())
	this.abc_util.rightClick();

if (this.abc_util.shouldRotateCamera())
	this.abc_util.rotateCamera();

if (this.abc_util.shouldLeaveGame())
	this.abc_util.leaveGame();

Preferences
 
These are preferred ways of doing things as specified by the player's character profile. Note that the preference generated by each method isn't constant, so we should not store the returned value of the generation method. So when an area covered by ABC preferences comes up, we must call the generation method, and act upon the returned value.
 
Example: Let's say we want to open the bank using custom methods. We then use ABCUtil#generateOpenBankPreference to generate the preferred way to open the bank.

final OpenBankPreference pref = this.abc_util.generateOpenBankPreference();
switch (pref) {
 case BANKER:
  openBankBanker();
  break;

 case BOOTH:
  openBankBooth();
  break;

 default:
  throw new RuntimeException("Unhandled open bank preference.");
}

Note that Banking#openBank, GameTab#open, and web walking all take ABC preferences into account, so we don't have to worry about handling preferences if we use those methods.
 
Next Target Preference
 
ABCUtil#selectNextTarget selects the positionable entity from the given list which should be our next target.  We should store this value until we switch targets (i.e. the entity which we are interacting with), because the output of this method isn't constant. I.e. We call this method to determine which entity to interact with next, and store the returned value so we aren't constantly calling this method. We can re-call this method and re-store the returned value when we move on to a different target entity.
 
If an entity spawns which is closer than the original closest entity, then we can re-call this method to re-select the next target entity. Otherwise, we should stick with the stored value.
 
Note that when we chose an entity which is not the closest, that entity will be within a close distance to the closest, and if the entity implements Clickable07, we will check if it is clickable via Clickable07#isClickable.
 
Example:

final RSObject[] objects = getPossibleTargets();
if (objects == null || objects.length < 1) 
return;

final RSObject next_target = (RSObject) this.abc_util.selectNextTarget(objects);

Action Conditions
 
These are actions which depend on a condition generated by ABCUtil. Note that the conditions generated by each method isn't persistent, and we want a certain level of persistence for each type of action. Therefore, we must store the returned value of the methods for a certain period of time, specified below.
 
HP to Eat At
 
ABCUtil#generateEatAtHP will generate the hitpoints percentage at which we should eat at. We store the generated value and use it until we eat the next food item. At that time, we generate a new value and store it.
 
Example:

int eat_at = this.abc_util.generateEatAtHP(); // Global variable, persistent...
// Inside of a local method
if (getHPPercent() <= this.eat_at) {
 eatFood();
 this.eat_at = this.abc_util.generateEatAtHP(); // Generate a new HP percentage to eat at
}

Energy to Activate Run At
 
ABCUtil#generateRunActivation will generate the run energy at which we should activate run at. We store the generated value and use it until we turn run on. At that time, we generate a new value and store it.
 
Example:

int run_at = this.abc_util.generateRunActivation(); // Global variable, persistent...
// Inside of a local method
if (!Game.isRunOn() && Game.getRunEnergy() >= this.run_at) {
 Options.setRunOn(true);
 this.run_at = this.abc_util.generateRunActivation(); // Generate a new run energy to activate run at
}

Moving to Anticipated Location
 
When we finish interacting with our latest target/resource, there may or may not be a next target/resource available. If there is, then we simply go to that target/resource as usual and ignore this action condition. However, if there is no next target/resource currently available, then we check this action condition.
 
We check ABCUtil#shouldMoveToAnticipated immediately after we finish up with our latest target/resource. If the method returns true, we move to the location in which we anticipate our next target/resource will spawn. If it returns false, we do nothing.
 
Example:

// Here we just finished cutting a yew tree
if (!findNextTarget()) { // If we are here, then there does not exist a next target/resource yet
 if (this.abc_util.shouldMoveToAnticipated()) { // Check if we should move to the anticipated location...	
  performReactionTimeWait(); // Sleep for the generated reaction time		
  moveToAnticipated(); // Move to the anticipated location	
 }
 // Now we simply wait until a new target/resource spawns	
 // Do not keep checking if we should move to the anticipated location	
 // Only perform this check once after each target/resource becomes unavailable
}

Resource Switching Upon High Competition
 
ABCUtil#shouldSwitchResources will decide if we should switch targets/resources based on the amount of competing players. We should check this condition every 20-30 seconds, but only if we are not winning very many resources from the other competing players. This is vague because it depends on the script and individual preferences.
 
Example:

// Here we start mining a rock
long check_time = Timing.currentTimeMillis() + General.random(20000, 30000);
while (isMining()) {
 if (notWinningManyResources() && Timing.currentTimeMillis() >= check_time) { // Check if we should switch resources
  if (this.abc_util.shouldSwitchResources(getCompetitionCount()) {
    switchResources(); //Switch resources			return;
   }
   check_time = Timing.currentTimeMillis() + General.random(20000, 30000); // Generate a new check time	
  }
 }

Next Target Hovering and Menu Opening
 
ABCUtil#shouldHover will decide if we should hover the mouse over our next target. We should use this method to determine if we should hover when we start interacting with each new target entity, and we store the returned value. While interacting with our current target, if the stored value indicates we should hover our next target, then we should do so. Note that we should only employ hovering when the mouse is in the screen boundary.
 
ABCUtil#shouldOpenMenu will decide if we should open the menu for our next target. We should use this method to determine if we should hover when we start interacting with each new target entity, and we store the returned value. While interacting with our current target, if the stored value indicated we should open the menu for our next target, AND if we are hovering the mouse over the next target, then we should open the menu. Menu opening should only be performed if we are also hovering the next target. Note that we should only employ menu opening when the mouse is in the screen boundary.
 
Example:

boolean should_hover = false; // Global variable, persistent
boolean open_menu = false; // Global variable, persistent...
// Inside of a local method
if (the_object.click("Chop down")) {
 this.should_hover = this.abc_util.shouldHover();
 this.open_menu = this.abc_util.shouldOpenMenu(); // Generate other conditions for actions	handleChopping();
}
// Inside of a different local method, 
handleChoppingwhile(isChopping) {
 if (Mouse.isInBounds() && this.is_hovering) {
  hoverNextTarget();
  if (this.open_menu)
   openMenuForNextTarget();
 } // Other code
}

Reaction Times
 
ABC2's reaction time generator relies on about nine different factors, many of which must be specified by the script. There are two different ways to specify these factors: bit flags and properties.
 
With bit flags, you call ABCUtil#generateBitFlags with the necessary options, and that method will generate the bit flags. With properties, you call ABCUtil#getProperties and set the necessary properties with the returned instance of ABCProperties.
 
Generating Reaction Times
 
You must use ABC2 to generate reaction times, instead of using random sleeps. ABC2's reaction time generator was designed to be very generic, allowing it to be used for all things which require a variable response time. However, we are still in need of some human data to allow us to have it totally generic. When generating reaction times for events with a fixed, very low waiting time, the reaction times are often much higher than a human reaction time. Hence, until we collect some more data and adjust our algorithms, ABC2's reaction time generator should be used for the following circumstances:

  • Waiting in response to a condition where we had to wait a variable amount of time typically greater than a second. Examples:
    • Reacting to when our character stops fishing. The response time will be used before we move on to the next fishing spot, or before we walk to the bank.
    • Reacting to when our character stops mining. The response time will be used before we move on to the next rock, or before we walk to the bank.
    • Reacting to when our character kills our target NPC. The response time will be used before we attack our next target, or before we walk to the bank.

We currently will not use ABC2's reaction time generator for the following circumstances, until more data has been collected and we have adjusted our algorithms:

  • Waiting in response to finishing an alchemy spell (the waiting period for casting the spell is fixed, and thus not covered by ABC2 yet)
  • Waiting in response to us finishing our wait for items to be deposited to the bank after clicking the "Deposit All" button (once again, the waiting period is fixed).

These are only limited scenarios which we specified. There are obviously more scenarios than this, but I'm hoping you're able to figure it out based on the examples.
 
Now, to generate reaction times, you have the chose of two methods:

The first method uses properties, and the second uses bit flags, as discussed above.
 
For generating reaction times, there are currently four factors which must be specified by scripts:

  • Waiting Time: The amount of time we were waiting for in order to perform the action we are wanting to do now.
  • Hovering: If we were hovering over the entity we are about to click immediately prior to calling the method.
  • Menu Open: If we have the menu open for the entity we are about to click immediately prior to calling the method.
  • Under Attack: If we are under attack now, or if we were under attack while waiting.
  • Fixed Waiting: Whether the time at which we were waiting can be fixed to a number of client clock cycles or time (currently not used since we lack data for this, but this is here for the future). This will typically not be set because of the reason explained above.

Example using bit flags:

final int waiting_time = getWaitingTime();
final boolean menu_open = this.abc_util.shouldOpenMenu() && this.abc_util.shouldHover();
final boolean hovering = this.abc_util.shouldHover(); // If the condition is met, we specify the relevant flag, otherwise we set the variable to 0
// When we pass 0 into generateReactionTime as a bit flag option, it will not change anything
final long hover_option = hovering ? ABCUtil.OPTION_HOVERING : 0;
final long menu_open_option = menu_open ? ABCUtil.OPTION_MENU_OPEN : 0;
// Generate the reaction time
final int reaction_time = this.abc_util.generateReactionTime(this.abc_util.generateBitFlags(waiting_time, hover_option, menu_open_option));
// Sleep for the reaction time
try {
 this.abc_util.sleep(reaction_time);
} catch (final InterruptedException e) {

}

Example using properties:

final int waiting_time = getWaitingTime();
final boolean menu_open = this.abc_util.shouldOpenMenu() && this.abc_util.shouldHover();
final boolean hovering = this.abc_util.shouldHover();
final ABCProperties props = this.abc_util.getProperties();
props.setWaitingTime(waiting_time);
props.setHovering(hovering);
props.setMenuOpen(menu_open);
props.setUnderAttack(Combat.isUnderAttack() || wasJustUnderAttack());
props.setWaitingFixed(false);
// Generate the reaction time
final int reaction_time = this.abc_util.generateReactionTime();
// Sleep for the reaction time
try {
 this.abc_util.sleep(reaction_time);
} catch (final InterruptedException e) {

}

When using properties, remember to explicitly set all applicable options so that you don't use old data from previous uses.
 
Generating Supporting Tracker Information
 
A core factor in generating reaction times is whether or not the mouse is currently within the game screen boundary, along with other linked factors which I am keeping secret. ABCUtil's background thread will be responsible for manipulating these factors. In order for it to do so, it must know certain information about the activity being performed. We give it this information via ABCUtil#generateTrackers.
 
ABCUtil#generateTrackers generates variables for performing anti-ban while waiting for something. Specifically, variables relating to how often and when to make the mouse leave the game area. This method should be called right after clicking something which requires us to wait a variable amount of time, or a time which we have to try and count off; i.e. where we will produce a variable reaction time. This includes, but is not limited to, clicking a tree, clicking an interface which we have to wai, say, approx. 10 seconds for.
 
This method requires the script to supply two pieces of information:

  • Estimated waiting time: An estimate for the amount of time we will be waiting for, i.e. how long it takes to perform the action at hand. Example: When woodcutting, the estimated waiting time would be an estimate for how long we are going to be chopping the current tree. Typically, using the average waiting time for the specific action is a good estimate.
  • Under Attack: If we think we are going to be under attack for any of the duration of the waiting time.

Like generating reaction times, calling this method can either be done using bit flags or properties.
 
Example using bit flags:

if (successfullyClickedTree()) {
 final int est_waiting;
 if (this.chopping_count > )
  est_waiting = (int)(this.chopping_time / this.chopping_count);
 else
  est_waiting = 3000; // An arbitrary value, only used at the very beginning of the script
 this.abc_util.generateTrackers(this.abc_util.generateBitFlags(est_waiting));
 while (isChopping()) {
  if (this.abc_util.shouldLeaveGame())
   this.abc_util.shouldLeaveGame();
   // Do other things here, such as hovering and menu opening if the mouse is still in the game screen boundary	
 }
}

Example using properties:

if (successfullyClickedTree()) {
 final int est_waiting;
 if (this.chopping_count > )
  est_waiting = (int)(this.chopping_time / this.chopping_count);
 else est_waiting = 3000; // An arbitrary value, only used at the very beginning of the script	
 final ABCProperties props = this.abc_util.getProperties();
 props.setWaitingTime(est_waiting);
 props.setUnderAttack(false);
 props.setWaitingFixed(false);
 this.abc_util.generateTrackers();
 while (isChopping()) {
  if (this.abc_util.shouldLeaveGame())
   this.abc_util.shouldLeaveGame();
  // Do other things here, such as hovering and menu opening if the mouse is still in the game screen boundary	
 }
}

Now you may be wondering where exactly to call this method. Generally, you'd call this after generating a reaction time using ABC2, after we call ABCUtil#sleep for that reaction time, and after we perform the action which we are reacting to.
 
It's important to keep in mind that calling ABCUtil#generateTrackers is very important because it sets up variables which greatly affect reaction times. Also note that we should be calling ABCUtil#shouldLeaveGame and ABCUtil#leaveGame in the period after calling ABCUtil#generateTrackers, as the method is to be used in conjunction with ABCUtil#shouldLeaveGame and ABCUtil#leaveGame. If we do not ever call those two methods, or don't call them often enough, calling ABCUtil#generateTrackers would be essentially useless, and our reaction times wouldn't be the most human-like.
 
Sleeping for the Length of the Reaction Time
 
it is important to use ABCUtil#sleep to perform all of the reaction time sleeps. ABC2's background thread is in charge of making the mouse return to the game screen boundary if the mouse has been outside of the boundary for a certain period of time. Now, the times at which the background thread makes the mouse return has been pre-determined. It's possible that it makes the mouse return while we are sleeping for the duration of the reaction time. If it does this, then why do we have to continue our reaction time sleep if the mouse is moving (i.e. the player is active)? Simply put, when the mouse returns to the game screen, we should stop sleeping the duration of the reaction time because the player is active.
 
When the script calls ABCUtil#sleep, it allows the background thread to interrupt the reaction time sleep immediately after the bot makes the mouse return to the game screen. The method also prevents two mouse movements from happening at the same time, since the background thread doesn't pause the script while moving the mouse back to the game screen.
 
Calculating Anti-Ban Compliance Levels (ABCL)
 
Refer to the first list. Beside each element is an amount of points (Pts). If your script successfully implements the element, then add those points to your score. Scores are out of 100, which determine the ABCL:

  • [99, 100] Points: ABCL 10
  • [90, 99) Points: ABCL 9
  • [80, 90) Points: ABCL 8
  • [70, 80) Points: ABCL 7
  • [60, 70) Points: ABCL 6
  • [50, 60) Points: ABCL 5
  • [40, 50) Points: ABCL 4
  • [30, 40) Points: ABCL 3
  • [20, 30) Points: ABCL 2
  • [10, 20) Points: ABCL 1
  • [0, 10) Points: ABCL 0

Note: "[" is an inclusive boundary, and ")" is an exclusive boundary.
 
Conclusion
 
There you have it, the guide to implementing Anti-Ban Compliance version two. I hope I have made it clear how to implement ABC2. Make sure to read all of the documentation.
 
I am including a persistent extension of ABCUtil, which makes this utility more like the first version, and easier to use:

PersistentABCUtil.java

Edited by erickho123
Forum Software update made all lines one lined. Attempted to fix it.
  • Like 9

Share this post


Link to post
Share on other sites

@Ericho123 & @Tri could you guys please implement this to your scripts? :D

I have a feeling that if it is there they will implement it.   It would be a huge selling point if their scripts had it and others did not.  I thought exShopper and exRunecrafter were already amazing.  I cannot wait to see if after.

Share this post


Link to post
Share on other sites

When generating the reaction time, you are determining if you are hovering or if the menu is open by the values returned by the ABCUtil methods shouldHover and shouldOpenMenu, not if you actually are hovering or have the menu open. Is this intended?

I also found this confusing, and it's worth mentioning that there are many actions in Runescape that humans will spam click, or activities with very little downtime, which humans will react fairly quickly to. What is the ABC2 policy on those? As mentioned in the OP, we're supposed to hold back on implementing any ABC2 reaction time methods for those circumstances until more data is collected? Is there any risk to implementing them now as opposed to short generic random sleeps?

Edited by ineu

Share this post


Link to post
Share on other sites

I've placed the timed actions code inside of a method, antiban(), and I call this method whenever I am idling. Is this ok, because I've been watching the bot for like 30 minutes now and I have yet to see any of the antiban actions happen. Also, does it matter what order I call the timed action checks in? I'm sure it would look suspicious during behavioral analysis if a player always checks xp only before the player cursor leaves the game. Also, if I try to add a System.out.println to happen whenever an antiban action is actually happening, the bot will just spazz out with antiban and do timed actions like crazy

Edited by brainblips

Share this post


Link to post
Share on other sites

I've placed the timed actions code inside of a method, antiban(), and I call this method whenever I am idling. Is this ok, because I've been watching the bot for like 30 minutes now and I have yet to see any of the antiban actions happen. Also, does it matter what order I call the timed action checks in? I'm sure it would look suspicious during behavioral analysis if a player always checks xp only before the player cursor leaves the game. Also, if I try to add a System.out.println to happen whenever an antiban action is actually happening, the bot will just spazz out with antiban and do timed actions like crazy

I have mine print out whenever a check returns true and it does the action, and it does not spazz out. You must have missed a bracket or something.

Share this post


Link to post
Share on other sites

When generating a large reaction time (example, I had one of ~292000 ms) which allowed the bot to get automatically logged out, the Login bot kicks in and logs the bot in even though it should still be sleeping. Are we meant to disable the login bot for the reaction time? Might be worth noting to do so if the reaction time is exceedingly long.

Share this post


Link to post
Share on other sites

Is it normal If I am making tabs in my POH and the only timed action that happens while I do it is mouse leaving the game? I call abcutil.generateTrackers right before the loop of waiting for the tabs to be made begins. My code is arraged this way:

abcUtil.generateTrackers
while ([inventory contains at least one soft clay]) {
  if (abcUtil.shouldRotateCamera) {
    abcUtil.rotateCamera;
  }
  //and so on with the other timed actions
}

Am i doing sth very very wrong or is that meant to be?

Share this post


Link to post
Share on other sites

When tallying up the points to see which threshold you're at as in ABCL 0,1,2, etc. When i come across this

 

Quote

Note that Banking#openBank, GameTab#open, and web walking all take ABC preferences into account, so we don't have to worry about handling preferences if we use those methods.

If i use those Banking#openBank and Web Walking inside my script, would i just count those points aswell?

Share this post


Link to post
Share on other sites
3 hours ago, montreal176 said:

When tallying up the points to see which threshold you're at as in ABCL 0,1,2, etc. When i come across this

 

If i use those Banking#openBank and Web Walking inside my script, would i just count those points aswell?

As examples:

Banking#openBank() will use abc preferences to decide whether it should do Banking#openBankBooth() or Banking#openBankBanker(), for the booth vs the npc.

GameTab#open will use abc preferences to decide whether it clicks the tab or uses the F key shortcuts to open the tab.

So long as you use those methods for those specific actions or implement it via abc if you need to do it in a custom way, you are good.

  • Like 1

Share this post


Link to post
Share on other sites
23 minutes ago, montreal176 said:

Quick question regarding the performTimedActions Method --

I notice mine isnt checking the XP, Is there something special that i have to do to make it check the XP? The reason i ask is because i know you have to use generateTrackers() for the mouse to leave the screen.

Are you gaining xp?  That is an important factor. I also notice that it doesn't check XP very often, although I'm not watching my bots all of the time. I have definitely seen it in the debug, as my scripts print the abc2 action they are doing in the client debug.

  • Like 1

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.


  • Similar Content

    • By ELON
      ELON AIO COMBAT
      abc2 lvl 8
      + Custom antiban
      gui support
      save/load
      SOURCE:https://github.com/Elon333/ELON-Combat-Aio
      LINK TO SCRIPT: https://tribot.org/repository/script/id/3411
       

      Bug Report info:
      bot debug copy paste in pastebin
      client debug copy paste in pastebin
      explanation on bug
      screenshot/video if applicable
      MY DISCORD INFO: Elon#6697
      message my discord for faster reply

      ELON FREE SCRIPTS:
      RESTLESS GHOST: https://tribot.org/repository/script/id/3416
      PRIEST IN PERIL: https://tribot.org/repository/script/id/3407
      COMBAT AIO: https://tribot.org/repository/script/id/3411
       
    • By bbuu20
      Bbuu20's Smart Miner (ABC2 Level 10) (V1.5)
      Hi, and thanks for checking out my second public script! This script features:
      Custom Paint to display the current runtime, xp/hr, and more Full ABC2 Level 10 Implementation to significantly lower the script's ban rate Tile Selection can be used to pick exact rocks to mine Universal Mining and Banking so players can run the bot wherever they want, on whatever ore they want I am very open to any suggestions on how I could improve this script. Please let me know if you experience any issue at all with the script, I will do my best to fix it and reply to you quickly. If you enjoy the script, some positive feedback would be greatly appreciated!
      This is only my second public script, but I have worked very hard on it, and believe it is one of the best mining bots on the repository (and it's free!).
       
      To Do:
      Add world hopping option
      Add “walk to tile” option to gui
       Add save option
      And anything else you may suggest!
       
      Screenshots:

       

      Source Code: https://github.com/zperkins11/Tribot/tree/master/scripts/safeminer
      Get It On The Repository: https://tribot.org/repository/script/id/3417
    • By bbuu20
      Bbuu20's Tutorial Island (ABC2) (V2.0)
      Hi, and thanks for checking out my tutorial island reboot! This script completes tutorial island for free!
      I am very open to any suggestions on how I could improve this script. Please let me know if you experience any issue at all with the script, I will do my best to fix it and reply to you quickly. If you enjoy the script, some positive feedback would be greatly appreciated!
      In the near future, I will be re-implementing the gui and paint, I realize it is rather basic for now.
      Source Code for the old version (not current) : https://github.com/bbuu20/Tribot/tree/master/Bbuu20's%20Tutorial%20Island/src/scripts
      Source Code: https://github.com/zperkins11/Tribot/tree/master/scripts/tutorialIsland
      Get It On The Repository: https://tribot.org/repository/script/id/3296-bbuu20-s-tutorial-island/
    • By bbuu20
      Welcome to Bbuu20's Fire Maker, my newest free script. This script features:
      Custom GUI to select what log/logs to use Full ABC2 Level 10 Implementation to significantly lower the script's ban rate Universal Firemaking and Banking so players can run the bot wherever they want, with whatever log/logs they want I am very open to any suggestions on how I could improve this script. Please let me know if you experience any issue at all with the script, I will do my best to fix it and reply to you quickly. If you enjoy the script, some positive feedback would be greatly appreciated!
       
      To Do:
      Add custom paint to display current log, xp/hr, etc...
      And anything else you may suggest!
       
      Screenshots:

      Source Code: https://github.com/zperkins11/Tribot/tree/master/scripts/firemaker
      Get It On The Repository: https://tribot.org/repository/script/id/3425
    • By Fluffee
      Fluffee's Tutorial Island v4
      TRiBot's best Tutorial Island Script
      • Completes Tutorial Island
      • Supports loading of bulk accounts
      • Script Argument/Queue/Client Starter support
      • Tons of customization options
      • Random account profiling
      • Full ABC2 support
      • Post tutorial island tasks
      • Account Creation
      • Task based, chose the options for every account
      • Resizable mode support
      Get it here!
      GUI

      Script Arguments
      Script arguments must be entered as follows (with the following keys):
      settingsFile:saved_settings_file_name.json; The only argument required now is the name of the settings file to load. If the file specified does not exist, an error will be printed in the debug, and the script will show the GUI instead.
      Source
    • By Optimus
      A little about myself:
      I started working for TRiBot over 6 years ago now, and have been an active premium script developer ever since. I've also had a big part in goldfarming / RS botting scene since well before then, but TRiBot was where I decided to settle as I found it the safest and best platform to use.
      Link to my TRiBot profile: Optimus - TRiBot Forums
      For any new users of the script; here's a brief description of what the script does:
      Optimus AIO Combat & Magic is an AIO (All in one) script for TRiBot that was designed to train your account up from start to finish. Whether you want to train your slayer up while training your combat stats, or train your magic using any spell from air strike to ice barrage, it's all supported. I've poured over 5 years of hard work and development into the script; and the result is a safe & easy to use script that should meet all of your botting needs and expectations.
      The script also implements advanced antiban methods created using thousands of hours of real human playing data, I've managed to make the script out-perform most human players, while also avoiding detection and staying under the radar from Jagex's anti-bot technology.

      Features Overview:
      Supports CLI Launcher & Script arguments:
      Enter the name of your GUI settings as the script argument and you'll be botting in seconds!
      Combat features:
      Kills every monster in the game including but not limited too:
      ~Chickens
      ~Cows
      ~Goblins
      ~Giants
      ~Al-kharid warriors
      ~Chaos druids
      ~Yaks
      ~Experiments
      ~Stronghold of security
      ~All slayer dungeons
      ~All slayer monsters (Also uses finishing items such as Bags of salt, ice coolers, rock hammers, rock thrownhammers etc)
      ~Dragons (Including Brutals, and will keep safe distance if you're using ranged/magic)
      ~Crabs (Sand & Rock crabs + makes them aggressive again)
      ~Wyverns
      ~Kalphites
      ~Dagannoths
      ~Cave Kraken & splashing Kraken boss
      ~Wilderness monsters
      ~Nightmare zone bosses
      And hundreds of different monsters, literally anything else you can think of!
      Ironman mode:
      The script now supports ironman and ultimate ironman mode accounts, and will only attack / loot your own monsters on those accounts.
      Intelligent combat system that supports the following:
      - All food types + bones to peaches
      - Banking for more supplies at every bank in RS
      - All special attacks + weapon switching
      - All potion types (Including NMZ potions)
      - Full prayer support + quick prayers + recharging prayer at altars
      - Dwarf multicannon support + anti decay
      - Guthans for healing
      - Safe spotting
      - Worldhopping when certain conditions are met
      - All magic spells supported + can re-equip staffs and setup autocast for you automatically
      - Progressive training system so the script can automatically switch training methods / equipment when it levels up.
      Intelligent looting system that supports the following:
      - Looting by item name or ID
      - Loot items by item price (E.g loot all items over 500gp)
      Ironman looting - Only loots from monsters you've killed
      - Loot using telekinetic grab
      - Bury bones you loot
      - High alching the loot you pickup
      - Accurate profit calculations & tracking
      - Automatically uses the looting bag & herb sack 
      And much much more...
      Magic features:
      The script is also an AIO Magic script that supports every single combat AND non combat magic spell available on the Regular,Ancient and Lunar spellbooks.
      Including:
      All combat spells
      All cursing spells
      All enchantment spells for jewelry and bolts
      Superheat item
      All teleport spells
      All alchemy spells ( Can combo alch between casts to double your xp )
      Splashing
      The script can also train with the following lunar spells!
      Humidify
      Plank make
      Superglass make
      Tan leather
      Spin flax
      String Jewellery
      and More!
      Purchase info and script trial info:
      Packages:
      Free Trial
      Price: $FREE
      Every month you're allowed a free 10 hour trial with the script, enjoy
      1 month Package
      Price: $10
      VIP is not required to run the script
      The ability to train all of combat and magic effortlessly and safely for 1 month
      Complete customer support via discord and the TRiBot forums

      2 week Package
      Price: $6
      VIP is not required to run the script
      The ability to train all of combat and magic effortlessly and safely for 2 weeks
      Complete customer support via discord and the TRiBot forums
      To purchase the script or activate your free trial, click the image below:
      TRiBot Repository | Optimus Combat & Magic

      Gallery:
       
       
    • By bbuu20
      I've been trying to implement abc2 into my tutorial island script, but I thought it may be easier if I started from scratch. Since then, I've been working on a mining script that mines and banks, and I thought that I did a pretty good job of implementing abc2. Upon running the script however, I noticed that there were a few things off.
      1.) Despite being called whenever the player is animating, the timed actions don't seem to actually do anything.
      2.) Sometimes when mining, the abcutil will decide if the mouse should hover over the next target. This is good and working how it should, but when it's done mining the current rock, it doesn't actually click on the rock that was hovered over.
      I was hoping some of you could look at my code, and help me get to the bottom of these issues. The problem has to either be in Antiban.java, Mine.java, or maybe both.
      Source code: https://github.com/bbuu20/Tribot/tree/master/Bbuu20's%20Dynamic%20Miner/src/scripts
    • By ScriptsForMains
      https://tribot.org/repository/script/id/3257
       
      Straightforward to use, fill in the boxes and watch as your character power trains everything that's simple to power train...  Or opt to bank the items.  Whatever tickles your pecker. Works wherever daxWalker is available.  If this script sees high demand I'll make a GUI and command line arguments... 

      I've tested it on fly fishing, teak trees, iron, and thieving guards...  It should work on just about anything. It's a simple script that left clicks on anything you specify and drops whatever items you tell it to.  Supports coin pouch. If you opt for banking, it will bank once the inventory is full and there are no "drop items" left to drop. It will bank everything in your inventory (for now).   
      Doesn't support food (yet) but works as a simple power leveler. Can be set to run to a bank and end the script if you drop below 20 hp. Can also be set to world hop if there are any players nearby (feature turns off for trip to bank and back).  

      Like all my scripts with a "main" designation, it will periodically pause/afk to mimic a real player and check itself to make sure it isn't stuck somewhere.  Please post any questions/problems/suggestions.  
    • By Red_Spark
      Red_ClayMaster is an open source soft clay making script.It will take empty buckets from Edgeville bank and fill them up with water.After all the buckets have been filled it will withdraw clay from the bank and start making soft clay.It will do this until it runs out of clay .
       
      Red_ClayMaster V2 is here!!!!!!!!!!
      I have re-written the framework, so I can expand on it easier.It also works a lot smoother now and it has passed my overnight test(Ran for 7h:42m made 8,3k soft clay, the only reason it stopped was because it ran out of clay )
       
      Starting the script:
       
      Start the script in Edgeville with and empty inventory.
      Make sure you have the supply in the bank
      Make sure roof are toggle off
         //togglerooftops
       
      GUI Explained:

       
       
      Know Bugs:
      LogIn failing sometimes FIXED(13/01/2016)
       
       
      Features:
      World Hoping
      GUI-Pick what you want to do
      Anti-Ban-Full ABCL10 compliance  (might not work as intended need to test it)
      Fast Dynamic clicking-Accenture and fast clicking
      Dynamic sleep/wait
       
      Have a suggestion?
      Feel free to post it. You can also pm or even contact me through skype. Just click the red Add My Skype button in my signature to add me to your skype
       
      Script Repository Link
       
      TODO:
      Need to implement ABC2 instead of ABC1 Done(will still tweak it a bit)
      If you're interested in the source code please go to this topic:
       
      https://tribot.org/forums/topic/58881-betared-claymasterfirst-script/
       
      UPDATES:
      2.5 Date 11/04/2019
      Updated IDs
      Updated World Hoping
       
      2.5 Date 20/01/2016
      Upgraded to ABC2(new Tribot Anit-Ban)
      2.4 Date 21/12/2015
      Added World Hoping
       
      2.3 Date 19/12/2015
      If the bot ends up outside the bank while making soft clay. It will run back to the bank(even if the bank is off-screen)
       
      2.2 Date 18/12/2015
      FIXED fail-safes in the script
      More info on this topic:https://tribot.org/forums/topic/58881-betared-claymasterfirst-script/
    • By Laniax
      NEW FEATURE
      Track your bots remotely in real-time, monitor chat, inventory, equipment, break & runtime, hitpoints, position and much more!
      All for free, check out the 'Script settings' tab in the GUI.



      Need help?
      Add me on Discord (fastest response): Laniax#2980
      Or PM me the forums
  • 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 -- 
        • Like
      • 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
        • Thanks
        • Like
      • 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
        • Like
      • 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.
        • Thanks
        • Like
      • 39 replies
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...