Jump to content

[ABCL10][OpenSource] mfFletcher v1.0 [OpenSource][ABCL10]

Recommended Posts


-Cuts arrow shafts

-Cuts short bows

-Cuts long bows


-Makes headless arrows

-Makes arrows

-Makes bolts

-Makes darts


-Strings long bows

-Strings short bows







Download & Source:

Github source




Aug 16, 2014

-ABCL 10 implemented


Edited by modulusfrank12

Share this post

Link to post
Share on other sites

Nice work! Your missing a lot of the ABCL elements though. Your not ABC Sleeping prior to object interaction.

Also there are a few locations were you could have added ABC methods (perform).



Alright, I'll realyl implement ABCL10, thanks for reading my code! Really do appreciate it.


Edit: ABCL10 Implemented

Edited by modulusfrank12

Share this post

Link to post
Share on other sites

I love all your scripts! I chose this specific fletcher because it has better antiban and reliability then others I've tested.


I'm going to make as long a proggy with this script as I can! I'll update it until I'm out of my 5k logs!



Share this post

Link to post
Share on other sites

Had to stop the bot due to failed drunken dwarf random!


To anybody curious about the stability of this script, It was running for 1:30:00 flawlessly at around 89k an hour doing maple longs.


I'd pay for this script in terms of its performance!

  • Like 1

Share this post

Link to post
Share on other sites
This topic is now closed to further replies.

  • Similar Content

    • By sohilpenguins
      Plank Collector
      Hey guys, so I was just going through my computer cleaning out old stuff and found an old script I had made months ago. It's a Plank collector; it has mule support, glory support, and f2p support. I will be releasing the F2p, non-mule support version. I know the ruling works. However, I know some people don't like to or don't want to bother. 
      EDIT: I recommend you have 30 hp and a little bit of defence because the skeletons in the wilderness will kill you. If you die the bot will just go back to collecting so dying isnt a big deal once in a while, level 3's WILL DIE EVERYTRIP
    • By TheHippy
      Hey everyone! before i begin i have to say big shout-out to everyone that helped me to get better at bot scripting and especially to  @JoeDezzy1  for taking the time to explain to me an improved code structure that really help make my scripts not only more clean, but also more loop-able and safe. 
      So i have 2 new open-source scripts that i released to my Pastebin and they are simple scripts that deal with the Varrock  and Canifis agility courses. Below is only the Canifis course scripts because both of them are almost identical scripts. I would like it if anyone could please give me any pointers about my script that could help improve it, especially in the effectiveness of my moveCamera() function.  Also, in my antiBanCheck() function I found that abc_util 'should' checks execute very rarely and i doubt that its enough to be effective (is it because they need to be checked every, lets say, 50ms or so?).
      Hippy's Canifis Agility Course Script:
      //Works well and needs 'ACamera' class found here: https://bitbucket.org/snippets/FinalCalibur/L8MXK (start script in canafis)(Date Created: Sept 4, 2016) package scripts; import java.awt.Color; import java.awt.Graphics; import org.tribot.api.Clicking; import org.tribot.api.DynamicClicking; import org.tribot.api.General; import org.tribot.api.Timing; import org.tribot.api.input.Mouse; import org.tribot.api.interfaces.Positionable; import org.tribot.api.types.generic.Condition; import org.tribot.api.util.abc.ABCUtil; import org.tribot.api2007.Camera; import org.tribot.api2007.GroundItems; import org.tribot.api2007.Inventory; import org.tribot.api2007.Objects; import org.tribot.api2007.Player; import org.tribot.api2007.Skills; import org.tribot.api2007.WebWalking; import org.tribot.api2007.types.RSArea; import org.tribot.api2007.types.RSGroundItem; import org.tribot.api2007.types.RSItem; import org.tribot.api2007.types.RSObject; import org.tribot.api2007.types.RSTile; import org.tribot.script.Script; import org.tribot.script.ScriptManifest; import org.tribot.script.interfaces.Painting; import scripts.fc.api.viewport.ACamera; @ScriptManifest(authors = { "TheHippy" }, category = "Agility", name = "Hippy's Canafis Agility Course") public class CanafisAgilityCourse extends Script implements Painting { //--------------------------------------------------------VARIABLES & CONSTANTS-------------------------------------------------------- private static final Color Color = null; private static final int AGILITY_COIN_ID = 11849; private static final int AGILITY_COIN_TILE_RADIUS = 6; private static final int LOBSTER_ID = 379; private static final int ACS0 = 10819;//tall tree (start) private static final int ACS1 = 10820;//gap private static final int ACS2 = 10821;//gap private static final int ACS3 = 10828;//gap private static final int ACS4 = 10822;//gap private static final int ACS5 = 10831;//harry potter private static final int ACS6 = 10823;//gap private static final int ACS7 = 10832;//gap private static final RSArea AGILITY_AREA1 = new RSArea(new RSTile(3505, 3497, 2) , new RSTile(3509, 3492, 2) );//first roof private static final RSArea AGILITY_AREA2 = new RSArea(new RSTile(3503, 3506, 2) , new RSTile(3498, 3504, 2) ); private static final RSArea AGILITY_AREA3 = new RSArea(new RSTile(3492, 3504, 2) , new RSTile(3487, 3499, 2) ); private static final RSArea AGILITY_AREA4 = new RSArea(new RSTile(3479, 3499, 3) , new RSTile(3475, 3492, 3) ); private static final RSArea AGILITY_AREA5 = new RSArea(new RSTile(3478, 3486, 2) , new RSTile(3483, 3481, 2) ); private static final RSArea AGILITY_AREA6 = new RSArea(new RSTile(3487, 3469, 3) , new RSTile(3503, 3478, 3) ); private static final RSArea AGILITY_AREA7 = new RSArea(new RSTile(3509, 3475, 2) , new RSTile(3515, 3482, 2) ); private static final RSArea EMPTY_AREA = new RSArea(new RSTile(0, 0, 0) , new RSTile(0, 0, 0) ); private static final RSTile AGILITY_WALK_TILE0 = new RSTile(3506, 3487, 0);//ground start private static final RSTile AGILITY_WALK_TILE1 = new RSTile(3506, 3495, 2); private static final RSTile AGILITY_WALK_TILE2 = new RSTile(3498, 3505, 2); private static final RSTile AGILITY_WALK_TILE3 = new RSTile(3487, 3500, 2); private static final RSTile AGILITY_WALK_TILE4 = new RSTile(3479, 3494, 3); private static final RSTile AGILITY_WALK_TILE5 = new RSTile(3479, 3484, 2); private static final RSTile AGILITY_WALK_TILE6 = new RSTile(3501, 3476, 3); private static final RSTile AGILITY_WALK_TILE7 = new RSTile(3510, 3481, 2); private long scriptStartTime; private long scriptTime; private String time; private RSTile playerPosition; private RSTile newTile; private RSItem[] inventoryIds; private RSObject[] obstacle; private ABCUtil ABC_Util; private int startLvl; private int startXP; private int currentLvl; private int currentXP; private int eatAtHP; private long moveCameraTime; private ACamera aCamera = new ACamera(this);//async camera //--------------------------------------------------------RUN-------------------------------------------------------- @Override public void run() { if(onStart()){ while(true){ switch(checkState()){ case 0://retry course println("Agility Step 0"); newTile = AGILITY_WALK_TILE0; newTile = newTile.translate(General.random(-1,1),General.random(-1,1)); agilityCourseStep(newTile, ACS0, EMPTY_AREA); break; case 1: println("Agility Step 1"); agilityCourseStep(AGILITY_WALK_TILE1, ACS1, AGILITY_AREA1); break; case 2: println("Agility Step 2"); agilityCourseStep(AGILITY_WALK_TILE2, ACS2, AGILITY_AREA2); break; case 3: println("Agility Step 3"); agilityCourseStep(AGILITY_WALK_TILE3, ACS3, AGILITY_AREA3); break; case 4: println("Agility Step 4"); agilityCourseStep(AGILITY_WALK_TILE4, ACS4, AGILITY_AREA4); break; case 5: println("Agility Step 5"); agilityCourseStep(AGILITY_WALK_TILE5, ACS5, AGILITY_AREA5); break; case 6: println("Agility Step 6"); agilityCourseStep(AGILITY_WALK_TILE6, ACS6, AGILITY_AREA6); break; case 7: println("Agility Step 7"); agilityCourseStep(AGILITY_WALK_TILE7, ACS7, AGILITY_AREA7); break; } } } } //--------------------------------------------------------START OF METHODS-------------------------------------------------------- //execute once at beggining private boolean onStart(){ println("CanifisAgilityCourse script has started"); scriptStartTime = Timing.currentTimeMillis(); startLvl = Skills.getActualLevel(Skills.SKILLS.AGILITY); startXP = Skills.getXP(Skills.SKILLS.AGILITY); ABC_Util = new ABCUtil(); General.useAntiBanCompliance(true); Mouse.setSpeed(120); eatAtHP = ABC_Util.generateEatAtHP(); moveCameraTime = Timing.currentTimeMillis() + General.random(7000, 40000); Camera.setRotationMethod(Camera.ROTATION_METHOD.ONLY_KEYS); return true; } //checks what to do based off player area private int checkState(){ playerPosition = Player.getPosition(); if(playerPosition.getPlane() == 0){ return 0; } else if(AGILITY_AREA1.contains(playerPosition)){ return 1; } else if(AGILITY_AREA2.contains(playerPosition)){ return 2; } else if(AGILITY_AREA3.contains(playerPosition)){ return 3; } else if(AGILITY_AREA4.contains(playerPosition)){ return 4; } else if(AGILITY_AREA5.contains(playerPosition)){ return 5; } else if(AGILITY_AREA6.contains(playerPosition)){ return 6; } else if(AGILITY_AREA7.contains(playerPosition)){ return 7; } sleep(50); return 8; } //execute the next obstical private void agilityCourseStep(RSTile walkTile, int obstacleId, RSArea currentArea){ obstacle = Objects.findNearest(8, obstacleId); if(obstacle.length > 0 && obstacle[0].isOnScreen()){//click obstical getAgilityCoins(currentArea); Clicking.click(obstacle[0]); Timing.waitCondition(new Condition() { @Override public boolean active() { if(!currentArea.contains(Player.getPosition())){ return true; } antiBanCheck();//while checking, preform antiban sleep(General.randomSD(200,300)); return false; } }, General.random(2600, 6000));//worked too perfectly so a shorter time out is put sleep(General.random(2000, 3000)); }else{//walk to obstical first getAgilityCoins(currentArea); walkToWaitCondition(walkTile, 4000, 6000); getAgilityCoins(currentArea); sleep(General.random(2500, 3300)); obstacle = Objects.findNearest(8, obstacleId); if(obstacle.length > 0){ Clicking.click(obstacle[0]); antiBanCheck(); } } } //if checkState fails, tele to varrock to reset (disabled) /* private void agilityCourseFailSafe(){ GameTab.open(GameTab.TABS.MAGIC); sleep(General.randomSD(500, 1000)); RSInterfaceChild varrockTele = Interfaces.get(218, 16); if(varrockTele != null){ varrockTele.click(); } } */ //check if agility coins are nearby, if so pick them up private void getAgilityCoins(RSArea currentArea){ RSGroundItem[] agilityCoins = GroundItems.find(7, AGILITY_COIN_ID); if(agilityCoins.length > 0){ RSTile coinPosition = agilityCoins[0].getPosition(); if(currentArea.contains(coinPosition) && Player.getPosition().distanceTo(coinPosition) < AGILITY_COIN_TILE_RADIUS){ println("agility coin found"); walkToWaitCondition(agilityCoins[0].getPosition(), 4000, 6000); Timing.waitCondition(new Condition() {//wait until player at agility coin position @Override public boolean active() { if(Player.getPosition() == agilityCoins[0].getPosition()){ println("at agility coin!"); return true; } antiBanCheck();//while checking, preform antiban sleep(General.randomSD(50, 60)); return false; } }, General.random(3000, 4000)); DynamicClicking.clickRSGroundItem(agilityCoins[0], 1); Timing.waitCondition(new Condition() {//continue if no more agiltiy coin after click @Override public boolean active() { RSGroundItem[] agilityCoins = GroundItems.find(7, AGILITY_COIN_ID); if(agilityCoins.length < 1){ return true; } antiBanCheck();//while checking, preform antiban sleep(General.randomSD(50, 100)); return false; } }, General.random(2000, 3000)); } } } //WebWalking with condition private void walkToWaitCondition(Positionable destination, int waitMin, int waitMax){ WebWalking.walkTo(destination, new Condition() { @Override public boolean active() { if(Player.getPosition() == destination){ return true; } antiBanCheck();//while checking, preform antiban sleep(General.randomSD(50, 100)); return false; } }, General.random(waitMin, waitMax)); } //check if player should preform antiban actions private void antiBanCheck(){ if(Skills.getCurrentLevel(Skills.SKILLS.HITPOINTS) <= eatAtHP){ inventoryIds = Inventory.find(LOBSTER_ID); if(inventoryIds.length > 0){ inventoryIds[0].click(); eatAtHP = ABC_Util.generateEatAtHP(); } } if (ABC_Util.shouldCheckTabs()){ println("antiBan shouldCheckTabs execute"); ABC_Util.checkTabs(); } if (ABC_Util.shouldCheckXP()){ println("antiBan shouldCheckXP execute"); ABC_Util.checkXP(); } if (ABC_Util.shouldExamineEntity()){ println("antiBan shouldExamineEntity execute"); ABC_Util.examineEntity(); } if (ABC_Util.shouldMoveMouse()){ println("antiBan shouldMoveMouse execute"); ABC_Util.moveMouse(); } if (ABC_Util.shouldPickupMouse()){ println("antiBan shouldPickupMouse execute"); ABC_Util.pickupMouse(); } if (ABC_Util.shouldRightClick()){ println("antiBan shouldRightClick execute"); ABC_Util.rightClick(); } if (ABC_Util.shouldRotateCamera()){ println("antiBan shouldRotateCamera execute"); ABC_Util.rotateCamera(); } if (ABC_Util.shouldLeaveGame()){ println("antiBan shouldLeaveGame execute"); ABC_Util.leaveGame(); } if(Timing.currentTimeMillis() > moveCameraTime){ println("antiBan custom moveCamera execute"); moveCamera(); moveCameraTime = Timing.currentTimeMillis() + General.random(9000, 40000); } } //custom move camera function private void moveCamera(){ int randomInt = General.random(0, 100); int signInt = 0; if(randomInt > General.random(40, 60)){ signInt = -1; }else{ signInt = +1; } int setAngle = Camera.getCameraAngle() + (signInt * General.random(23, 124)); randomInt = General.random(0, 100); if(randomInt <= General.random(86, 100)){ //86-100% chance to execute aCamera.setCameraAngle(setAngle); } randomInt = General.random(0, 100); signInt = 0; if(randomInt > General.random(40, 60)){ signInt = -1; }else{ signInt = +1; } int setRotation = Camera.getCameraRotation() + (signInt * General.random(23, 174)); randomInt = General.random(0, 100); if(randomInt <= General.random(92, 100)){//92-100% chance to execute aCamera.setCameraRotation(setRotation); } } //draws GUI @SuppressWarnings("static-access") @Override public void onPaint(Graphics g) { currentLvl = Skills.getActualLevel(Skills.SKILLS.AGILITY) - startLvl; currentXP = Skills.getXP(Skills.SKILLS.AGILITY) - startXP; scriptTime = Timing.currentTimeMillis(); scriptTime = scriptTime - scriptStartTime; time = Timing.msToString(scriptTime); g.setColor(Color.GREEN); g.drawString("Script: CanafisAgilityCourse", 350, 330); g.drawString("Time Running: " + time, 350, 315); g.drawString("Gained XP: " + currentXP + "xp" , 350, 300); g.drawString("Gained Lvl: (+" + currentLvl + ")" , 350, 285); } } Thanks!
  • Our picks

    • This release will:

      Fix key event handling issue

      Fix other event handling issue

      Fix RSServer hook

      Update world hopper to have it use OCR, thanks to Todd

      Use proper disposal of old Graphics objects

      Reformat code

      Rearrange code

      Organize code imports

      Apply around 8000 automated code refactorings

      Make preparations for Java 9

      Fix 11 various bugs

      Add more reliable debugging support

      Fix mouseEntered/Exited event dispatching bug

      Fix minimap walking bug where it opens the map

      Fix broken hooks for today's game update
      • 47 replies
    • This update will:

      Fix GE inventory item positioning bug

      Fix broken object hooks
      • 27 replies
    • This release will:

      Fix some ClosedChannelException bug

      Fix bug in RSObject#getAllTiles

      Add game tab support for "Kourend Favour"
      • 15 replies
    • This release will:

      Fix Settings UI placement bug

      Fix game object location bug

      Fix small layout bug making the client shift up and down

      Fix client crashing bug where loading the client with a small display area will cause the client to crash

      Fix annoying Linux bug relating to painting events and peers

      Fix settings saving bug where settings are saved to disk more often than they should

      Fix RSInterface#isBeingDrawn bug affecting a limited amount of people

      Drop Java 1.7 bytecode version for 1.8

      Important: Since the downloadable RS client uses Java 7, it will no longer be compatible with Looking Glass. To make up for this, we will add support for using other clients such as RuneLite (at a later date).

      This change was necessary to allow us to use Java 8 syntax. It also paves the way for Java 9/10/11 support.
      • 40 replies
    • This update will:

      Fix the RSMenuNode bug which also fixes the bug with bank opening

      Fix the incorrect object positions bug

      Fix and re-enable the LG Objects API Accelerator

      Fix the RSObject#getAllTiles bug
      • 22 replies
  • Recently Browsing   0 members

    No registered users viewing this page.