Jump to content
View in the app

A better way to browse. Learn more.

OSBot :: 2007 OSRS Botting

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

TT Birds [Free Hunter Script][All Birds supported!]

Featured Replies

Hey guys, so I still haven't released my NMZ script but I got sidetracked creating a script for Hunter as I saw there are practically none on the SDN. Hopefully the developers will allow this one on the SDN as it only covers birds. Maybe in the future it could cover other hunter methods aswell but its a very simple script and I am just gonna go ahead and give it to you guys because I love you.....no, seriously.....I....I love you....say it back....SAY YOU FUC*ING LOVE ME BACK!

 

joking

anyways have fun and feel free to alter the script for better anti-ban or whatever because if a lot of people use it, they'll build a profile as its a pretty simple script.

TIP: Remember to start the script with your bird of choice nearby. The automatic detection simply works off what bird is detected near you.

 

Things this script can do:

  • Picking up fallen over traps
  • Setting traps
  • Detecting if you're trying to place a trap where there already is one
  • Checking traps
  • Dismantling failed attempts
  • Descriptive paint telling you your progress and if you're a good boy it occasionally tells you so.
  • Handles multiple traps (As many as your level allows)
  • Drops meats, keeps feathers, and buries all the bones (Feel free to alter this, it's in the first lines of the code, just change desired properties to true or false)
  • Automatically detects what birds are near to catch

Things this script can not do:

  • IMPORTANT: This script detects how many traps are laid out and can not be used while other people are in the world catching birds in the same area as you. I'll add a world hopper method soon but i gotta figure out how to make it detect if they're using bird snares because it's cool if they're trapping something else.
  • Intelligently place traps in patterns. It just lays them either randomly in the defined area, or right next to each other.
  • Provide adequate anti-ban....it's just randomized really, but doesn't interact with the client while waiting or any of that good stuff
  • Catch Larupias for you.....BIRDS ONLY. BIRDS.
  • Tell you how long it will take to get 99....well actually it COULD do that but it won't because you're being too needy.
  • Make you tons of money. They're birds, not birds made of solid gold.
  • Cleverly walk you to your preferred location. You gotta start the script NEAR the birds of choice.
  • Get you more matches on Tinder, believe me I tried.

 

Here's a small proggy for you....especially you, Tim..... ;)

TRSETFX4SlK1jDv3dBgn9w.png

Second proggy aswell.

3yui4sU6SHCOMVef9GzG1A.png

 

Here's a copy of the .jar if anyone doesn't know how to create jars in Eclipse: https://www.mediafire.com/file/jwojxc7zlrn768r/TT Birds.jar

Can a more veteran person verify to others that the link is in fact just the script?

Here's the code for you more programming-savvy kids out there: (0 errors, make sure you've put the OSBot jar in your build path)

package pkg;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.text.DecimalFormat;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.osbot.rs07.api.map.Area;
import org.osbot.rs07.api.map.Position;
import org.osbot.rs07.api.model.GroundItem;
import org.osbot.rs07.api.model.RS2Object;
import org.osbot.rs07.api.ui.Skill;
import org.osbot.rs07.script.Script;
import org.osbot.rs07.script.ScriptManifest;
@ScriptManifest(author = "Paradox", info = "TT Birds", name = "TT Birds", version = 1, logo = "")
public class Main extends Script {
	public boolean DROP_BONES = false;//if false, will bury, if true, will drop
	public boolean DROP_FEATHERS = false;
	//WILL DROP MEAT NO MATTER WHAT BITCH
	public boolean make_mommy_love_me = false;
	public long timeStart;
	public int startXP, startLvl;
	public int caught, fails = 0;
	public int timesClicked = 0;
	public int lvl = 0;
	boolean setup1, setup2, setup3, setup4, setup5 = false;
	public int[] snareLocations = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
	String[] birdSpecs = {"Copper longtail", "9379", "2308", "3595"};	
	public Area birdArea = new Area(2308 + 2, 3595 + 2, 2308 - 2, 3595 - 2);
	public void onStart() {
		startLvl = getSkills().getStatic(Skill.HUNTER);
		startXP = getSkills().getExperience(Skill.HUNTER);
		timeStart = System.currentTimeMillis();
		getExperienceTracker().start(Skill.HUNTER);
		lvl = getSkills().getStatic(Skill.HUNTER);
		if (getNpcs().closest("Copper longtail") != null) {
			birdSpecs[0] = "Copper longtail";
			birdSpecs[1] = "9379";
			birdSpecs[2] = "2308";
			birdSpecs[3] = "3595";
		}
		if (getNpcs().closest("Tropical wagtail") != null) {
			birdSpecs[0] = "Tropical wagtail";
			birdSpecs[1] = "9348";
			birdSpecs[2] = "2501";
			birdSpecs[3] = "2891";
		}
		if (getNpcs().closest("Crimson swift") != null) {
			birdSpecs[0] = "Crimson swift";
			birdSpecs[1] = "9373";
			birdSpecs[2] = "2610";
			birdSpecs[3] = "2928";
		}
		if (getNpcs().closest("Cerulean twitch") != null) {
			birdSpecs[0] = "Cerulean twitch";
			birdSpecs[1] = "9375";
			birdSpecs[2] = "2733";
			birdSpecs[3] = "3769";
		}
		if (getNpcs().closest("Golden warbler") != null) {
			birdSpecs[0] = "Golden warbler";
			birdSpecs[1] = "9377";
			birdSpecs[2] = "3406";
			birdSpecs[3] = "3145";
		}
		birdArea = new Area((Integer.parseInt(birdSpecs[2]) + 2), (Integer.parseInt(birdSpecs[3]) + 2), (Integer.parseInt(birdSpecs[2]) - 2), (Integer.parseInt(birdSpecs[3]) - 2));
	}
	@Override
	public int onLoop() throws InterruptedException {
		try {
				List<GroundItem> la = getGroundItems().getAll();
				for (int i = 0; i < la.size(); i++) {
					if (la.get(i).getName().contains("Bird snare")) {
						GroundItem ab = la.get(i);
						while (ab != null && ab.isVisible() && ab.exists()) {
							whileID = 5;
							la.get(i).interact("Take");
							sleep(random(800, 1000));
						}
					}
				}
		} catch (NullPointerException e) {
			log("Nullpointer in taking ground items");
		}
		try {
			if (getObjects().closest(9344) != null) {
				RS2Object snare = getObjects().closest(9344);
				while (snare.exists() && snare.isVisible() && snare != null) {
					whileID = 4;
					getObjects().closest(9344).interact("Dismantle");
					sleep(random(1400, 1700));
				}
				fails++;
				//sleep(random(1500, 2100));
				//layTrap();
			}
		} catch (NullPointerException e) {
			log("Nullpointer in dismantling failed trap");
		}
		try {
			if (getObjects().closest(Integer.parseInt(birdSpecs[1])) != null) {
				RS2Object caughtSnare = getObjects().closest(Integer.parseInt(birdSpecs[1]));
				if (caughtSnare != null) {
					while (caughtSnare != null && caughtSnare.isVisible() && caughtSnare.exists()) {
						whileID = 3;
						caughtSnare.interact("Check");
						sleep(random(900, 1400));
						trapLayed = false;
					}
					caught++;
					//sleep(random(1500, 2200));
					//layTrap();
				}
			}
		} catch (NullPointerException e) {
			log("Nullpointer in Clicking caughtSnare");
		}
		try {
			int trapCount = 0;
			List<RS2Object> tl = getObjects().getAll();
			for (int i = 0; i < tl.size(); i++) {
				if (tl.get(i) != null) {
					RS2Object dis = tl.get(i);
					if (dis != null) {
						if (dis.getName() != null) {
							if (dis.getName().contains("Bird snare") && dis.isVisible() && dis.exists()) {
								trapCount++;
							}
						}

					}
				}
			}
			if (trapCount < getMaxTraps()) {
				trapLayed = false;
				layTrap();
			}
		} catch (NullPointerException e) {
			log("Nullpointer in checking snare count");
		}
		try {
			if (getInventory().getAmount("Bones") > dropAt || getInventory().isFull() || getInventory().getEmptySlotCount() == 1) {
				if (!DROP_BONES) {
				while (getInventory().contains("Bones")) {
					whileID = 2;
					getInventory().getItem("Bones").interact("Bury");
					sleep(random(700, 900));
				}
				} else {
					getInventory().dropAll("Bones");
					sleep(random(700, 900));
				}
				getInventory().dropAll("Raw bird meat");
				if (DROP_FEATHERS) {
					getInventory().dropAll("Stripy feather", "Blue feather", "Red feather", "Orange feather", "Yellow feather");
				}
				dropAt = (getInventory().getEmptySlotCount() / 2) - random(0, 4);
			}
		} catch (NullPointerException e) {
			log("Nullpointer in getting rid of stuff");
		}
		return random(500, 800);
	}
	public int getMaxTraps() {
		int lvl = getSkills().getStatic(Skill.HUNTER);
		if (lvl < 20) {
			return 1;
		}
		if (lvl >= 20 && lvl < 40) {
			return 2;
		}
		if (lvl >= 40 && lvl < 60) {
			return 3;
		}
		if (lvl >= 60 && lvl < 80) {
			return 4;
		}
		return 5;
	}
	public int dropAt = random(2, 5);
	List<Position> badPositions = null;
	public boolean interrupted, trapLayed = false;
	public void layTrap() throws InterruptedException {
		if (!birdArea.contains(myPlayer())) {
			getWalking().walk(birdArea.getRandomPosition());
		}
		RS2Object bs = getObjects().closest("Bird snare");
		if (bs != null) {
		while (bs.getPosition() == myPlayer().getPosition() || (myPlayer().getPosition().getX() == bs.getPosition().getX() && myPlayer().getPosition().getY() == bs.getPosition().getY())) {
			whileID = 8;
			moveRandomly();
		}
	}
		try {
			while (!trapLayed && !interrupted) {
				whileID = 1;
				if (birdArea.contains(myPlayer())) {
					if (getInventory().contains("Bird snare")) {
						int trps = (int)getInventory().getAmount("Bird snare");
						//getWalking().walk(new Position(random(myPlayer().getX() - 4, myPlayer().getX() + 4), random(myPlayer().getY() - 4, myPlayer().getY() + 4), 0));
						if (getInventory().getItem("Bird snare").interact("Lay")) {
							timesClicked++;
							sleep(random(400, 600));
							if (timesClicked >= 1 && ((int)getInventory().getAmount("Bird snare") == trps)) {
								moveRandomly();
							}
							trapLayed = true;
							sleep(random(3000, 3400));
						}
					} else {
						interrupted = true;
						try {
							List<GroundItem> la = getGroundItems().getAll();
							for (int i = 0; i < la.size(); i++) {
								if (la.get(i).getName().contains("Bird snare")) {
									GroundItem ab = la.get(i);
									while (ab != null && ab.isVisible() && ab.exists()) {
										whileID = 5;
										la.get(i).interact("Take");
										sleep(random(800, 1000));
									}
								}
							}
					} catch (NullPointerException e) {
						log("Nullpointer in taking ground items");
					}
					}
				} else {
					getWalking().walk(birdArea.getRandomPosition());
				}
			}
		} catch (NullPointerException e) {
			log("Nullpointer in laying trap");
		}
	}
	public void moveRandomly() {
		getWalking().walk(new Position(random(myPlayer().getX() - 4, myPlayer().getX() + 4), random(myPlayer().getY() - 4, myPlayer().getY() + 4), 0));
	}
	public boolean onBadPosition() {
		boolean ison = false;
		for (int i = 0; i < badPositions.size(); i++) {
			if (myPlayer().getPosition() == badPositions.get(i)) {
				ison = true;
			}
		}
		return ison;
	}
	public int whileID = -1;
	public void onPaint(Graphics2D g) {
		int lvlsGained = getSkills().getStatic(Skill.HUNTER) - startLvl;
		int xpGain = getSkills().getExperience(Skill.HUNTER) - startXP;
		DecimalFormat df = new DecimalFormat("#,###");
		int totalz = caught + fails;
		long ttl = getExperienceTracker().getTimeToLevel(Skill.HUNTER);
		double percent = 0;
		if (totalz > 0) {
			percent = (((float) caught) / totalz) * 100;
		}
		
		long millis = System.currentTimeMillis() - timeStart;
		String ft = String.format("%d min, %d sec", 
				TimeUnit.MILLISECONDS.toMinutes(millis),
				TimeUnit.MILLISECONDS.toSeconds(millis) - 
				TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))
				);
		String tolvl = String.format("%d min, %d sec", 
				TimeUnit.MILLISECONDS.toMinutes(ttl),
				TimeUnit.MILLISECONDS.toSeconds(ttl) - 
				TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(ttl))
				);
		g.setFont(new Font("Trebuchet MS", Font.BOLD, 16));
		g.setColor(Color.WHITE);
		g.drawString("Catching " + birdSpecs[0] + "s", 10, 222);
		g.setFont(new Font("Trebuchet MS", Font.PLAIN, 14));
		g.drawString("Time running: " + ft + " (" + getExperienceTracker().getGainedXPPerHour(Skill.HUNTER) + " XP/hr)", 35, 240);
		g.drawString("XP gained: " + df.format(xpGain) + " (" + tolvl + " to lvl)", 35, 255);
		g.drawString("Current Level: " + getSkills().getStatic(Skill.HUNTER) + " (+" +  lvlsGained + ")", 35, 270);
		if (totalz <= 0) {
			g.drawString("Caught: " + df.format(caught) + ", Failed: " + df.format(fails), 35, 285);
		} else {
			g.drawString("Caught: " + df.format(caught) + ", Failed: " + df.format(fails) + " (" + String.format("%2.02f", percent) + "%)", 35, 285);
		}
		g.drawString("x", getMouse().getPosition().x - 2, getMouse().getPosition().y + 4);
	}
}

 

Edited by TTScripts
Removing empty lines

cool thx. learning to code myself so all the src i can get are useful

Oh god accidently googled the "public boolean make_mommy_love_me = false;" and a lot of pr0n came up lmao

  • Author
2 minutes ago, powtaytow said:

Oh god accidently googled the "public boolean make_mommy_love_me = false;" and a lot of pr0n came up lmao

lol gwat

4 minutes ago, fr0sted said:

cool thx. learning to code myself so all the src i can get are useful

Cool bro. Nice lifetime sponsor rank and good luck in your programming education. My code is kind of sloppy but you could learn some basic methods from it.

6 minutes ago, TTScripts said:

lol gwat

Cool bro. Nice lifetime sponsor rank and good luck in your programming education. My code is kind of sloppy but you could learn some basic methods from it.

._..png

 

Edited by powtaytow

  • Author
10 minutes ago, powtaytow said:

 

 

y u gatta do that in my thread tho lol. put it in a spoiler por favor amigo

Edited by TTScripts

  • Author
1 minute ago, Team Cape said:

dear lord

I'm taking this in a bad way because you are scripter 2 and I automatically have to assume you're a pretentious code/method snob.

If that's the case, ask yourself one thing: Does the code work?

You don't need to rack your brain too hard to come up with an answer because i'll tell you the answer; yes it does. Kindly  take your "dear lord" and gtfo

12 minutes ago, TTScripts said:

y u gatta do that in my thread tho lol. put it in a spoiler por favor amigo

How about you put that in a spoiler too por favor amigo

4 minutes ago, TTScripts said:

I'm taking this in a bad way because you are scripter 2 and I automatically have to assume you're a pretentious code/method snob.

If that's the case, ask yourself one thing: Does the code work?

You don't need to rack your brain too hard to come up with an answer because i'll tell you the answer; yes it does. Kindly  take your "dear lord" and gtfo

Relax bro. Just because a script does work, doesn't mean it's optimal :feels:

Just because you know how to put a chicken in the oven, doesn't mean you know how to season it.

Edited by Viston

  • Author
1 minute ago, Viston said:

How about you put that in a spoiler too por favor amigo

Relax bro. Just because a script work, doesn't mean it's optimal :feels:

Can you put all of this in a spoiler please.

 

and yeah I never boasted about it being optimal. Did I put that somewhere in the tagline, or the header? "MOST OPTIMAL HUNTER SCRIPT ON THE MARKET."

if it was optimal, it wouldn't be free hombre. So him taking his sass in here just because he's butthurt his market might get tapped is unnecessary lol

8 minutes ago, TTScripts said:

I'm taking this in a bad way because you are scripter 2 and I automatically have to assume you're a pretentious code/method snob.

If that's the case, ask yourself one thing: Does the code work?

You don't need to rack your brain too hard to come up with an answer because i'll tell you the answer; yes it does. Kindly  take your "dear lord" and gtfo

Read a few guides before you release something like this to the public. This isn't being a "method snob"; this is having the basic knowledge to, for example, null-check instead of just catching your npe :???: , or have everything initialized in your onStart() based upon NPCs that may or may not be there :???: , or have random while loops in your code that will trap your script until it's complete :???:

Edited by Team Cape

3 minutes ago, Viston said:

Relax bro. Just because a script does work, doesn't mean it's optimal :feels:

Just because you know how to put a chicken in the oven, doesn't mean you know how to season it.

I think he got triggered because instead of giving constructive critiscism he just said "oh god", wich is just disrespectful.

I quote from TT "Its a pretty simple script."

4 minutes ago, TTScripts said:

Can you put all of this in a spoiler please.

 

and yeah I never boasted about it being optimal. Did I put that somewhere in the tagline, or the header? "MOST OPTIMAL HUNTER SCRIPT ON THE MARKET."

if it was optimal, it wouldn't be free hombre. So him taking his sass in here just because he's butthurt his market might get tapped is unnecessary lol

Why you being all salty tho. Yeah, he did say "Oh lord", because the dude might have had a heart attack or something by looking at the code, so you could just ask him what the problem is, instead of snapping on him, you know. You posted your source, expect some critics. Any scripter would point out your mistakes, and make your life miserable. Even the best scripters on here go through that too. It's just part of the coding environment, people aren't lean on you.

Now I can't comment on your code, since I believe some other scripters have got more experience than I. However, I do see some mistakes which "might" be unforgivable for some (programmers aka scripters), but meh.

Edited by Viston

  • Author
3 minutes ago, Team Cape said:

Read a few guides before you release something like this to the public. This isn't being a "method snob"; this is having the basic knowledge to, for example, null-check instead of just catching your npe :???: , or have everything initialized in your onStart() based upon NPCs that may or may not be there :???: , or have random while loops in your code that will trap your script until it's complete :???:

None of those while loops have trapped my script and i've got a 1hr proggy to prove it. I'll let my script run till i hit 42 hunter and if i snag a single while loop i will renounce every thing and bow down to you and metaphorically suck your dick, but before that you need to shut tf up.

 

The onstarts checking for NPCs DO check for null and if none of the specified NPCs are found, the script will just start walking to the copper longtail spot WHICH IS WHY I SPECIFIED 3 TIMES IN THE THREAD to make sure you start it near birds of choice. I did not take a lot of time to optimize this code because I PLANNED ON RELEASE IT FOR FREE  ALSO, catch events work perfectly well for nullExceptions and I don't really give a shit if that's optimal enough for you. If you're butthurt about my code, even though it works perfectly fine, go code your own hunter script and release it for free. I honestly don't care because I lose NOTHING either way. I don't need to read any guides, but you need some friends lol.

Recently Browsing 0

  • No registered users viewing this page.

Account

Navigation

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.