Skip 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.

Leaderboard

  1. Czar

    Global Moderator
    13
    Points
    23408
    Posts
  2. jackshow

    $500.00 Donor
    9
    Points
    1449
    Posts
  3. Apaec

    Scripter III
    8
    Points
    11174
    Posts
  4. Khaleesi

    Developer
    4
    Points
    27742
    Posts

Popular Content

Showing content with the highest reputation on 03/26/16 in all areas

  1. ๐Ÿ‘‘CzarScripts #1 Bots ๐Ÿ‘‘ ๐Ÿ‘‘ LATEST BOTS ๐Ÿ‘‘ If you want a trial - just post below with the script name, you can choose multiple too. ๐Ÿ‘‘ Requirements ๐Ÿ‘‘ Hit 'like' ๐Ÿ‘ on this thread
  2. 4 points
    Before buying, please ensure you check-out with the correct script. Swapping scripts is not possible. View in store $4,99 for lifetime use - Link to Sand Crabs script thread (better exp/h!) - Requirements: Camelot tabs / runes in main tab of bank Designated food in main tab of bank ~ 20-30+ combat level Features: CLI Support! (new!) Supports Ranged & Melee Attractive & fully customisable GUI Attractive & Informative paint Supports any food Custom cursor On-screen paint path and position debugging Supports [Str/Super Str/Combat/Super combat/Ranged/Attack/Super attack] Potions Collects ammo if using ranged Stops when out of [ammo/food/potions] or if something goes wrong Supports tabs / runes for banking Option to hop if bot detects cannon Global cannon detection Option to hop if there are more than X players Refreshes rock crab area when required Avoids market guards / hobgoblins (optional) Automatically loots caskets / clues / uncut diamonds Enables auto retaliate if you forgot to turn it on No slack time between combat Flawless path walking Advanced AntiBan (now built into client) Special attack support Screenshot button in paint GUI auto-save feature Dynamic signatures ...and more! How to start from CLI: You need a save file! Make sure you have previously run the script and saved a configuration through the startup interface (gui). Run with false parameters eg "abc" just so the script knows you don't want the gui loaded up and want to work with the save file! Example: java -jar "osbot 2.4.67.jar" -login apaec:password -bot username@[member=RuneScape].com:password:1234 -debug 5005 -script 421:abc Example GUI: Gallery: FAQ: Check out your own progress: http://ramyun.co.uk/rockcrab/YOUR_NAME_HERE.png Credits: @Dex for the amazing animated logo @Bobrocket for php & mysql enlightenment @Botre for inspiration @Baller for older gfx designs @liverare for the automated authing system
  3. This is an AIO (All-in-one) bot that has almost every thieving style except blackjack, ask for a free trial by liking thread or making a post! Vyres and elves are now supported! Both can make solid profit per hour, decent passive income! BIG THANK YOU TO ALL OUR SUPPORTERS! WE ARE THE MOST SOLD THIEVING BOT IN OSBOT HISTORY. MOST REPLIES, MOST USERS, LONGEST PROGGIES #1 Thiever | Most Overall Sales | Most Total Replies | Most Results | 10+ Years Maintained | 'the intelligent choice' by Czar SUPPORTS VYRES 224M made in a single sitting of 77 hours 1.1B made from elves and vyres!! ELVES SUPPORTED TOO! (NEW) 2.1m/hr, 6 crystals in 7 hrs 99 THIEVING MANY MANY TIMES, 35M EXP IN ONE BOTTING RUN!! 99 thieving in ~43k xp (12 minutes remaining)! Just got 99 proggy! Gratz to @iz0n THIEVING PET AT LVL 22 FROM TEA STALLS 11.5 HOURS, WITH PET TOO!! 610k/hr getting 99s on deadman worlds!
  4. NEW CURRENT RECORD: 294 HOURS RUNTIME! Shoutout to @Ruutihattu NEW: Sandstone mining + hopper support Humidify/water circlet/bandit unnote Ardy cloak tele support Setup Screen Preview Results 84 HOURS ON NEW LEVEL 20 ACCOUNT Suicided account with mirror mode near rock crabs, 81 mining! I will probably go for 99 Even supports Ancient Essence Crystal mining! Preview: Mine 1 drop 1 item drop pre-hover feature:
  5. โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ PREMIUM SUITE โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ FREE / VIP+ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โŒ  Sand crabs - $4,99 | Rooftop Agility - $5,99 | AIO Smither - $4,99 | AIO Cooker - $3,99 | Unicow Killer - ยฃ3,99 | Chest Thiever - ยฃ2,99 | Rock crabs - $4,99 | Rune Sudoku - $9,99 โŒก โŒ  AIO Herblore - FREE & OPEN-SOURCE | Auto Alcher - FREE | Den Cooker - FREE | Gilded Altar - FREE | AIO Miner - VIP+ โŒก โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ What is a trial? A trial is a chance for you to give any of my scripts a test run. After following the instructions below, you will receive unrestricted access to the respective script for 24 hours starting when the trial is assigned. Your trial request will be processed when I log in. The trial lasts for 24 hours to cater for time zones, such that no matter when I start the trial, you should still get a chance to use the script. Rules: Only 1 trial per user per script. How to get a trial: 'Like' this thread AND the corresponding script thread using the button at the bottom right of the original post. Reply to this thread with the name of the script you would like a trial for. Your request will be processed as soon as I log in. If i'm taking a while, i'm probably asleep! Check back in the morning Once I process your request, you will have the script in your collection (just like any other SDN script) for 24 hours. Private scripts: Unfortunately I do not currently offer private scripts. ________________________________________ Thanks in advance and enjoy your trial! -Apaec.
  6. Want to buy with OSGP? Contact me on Discord! Detailed feature list: - Supports all rooftops (Draynor, Al-Kharid, Varrock, Canafis, Falador, Seers, Polivneach, Relekka, Ardougne) - Supports most courses (Gnome stronghold, Shayzien basic, Barbarian stronghold, Ape toll, Varlamore basic, Wilderness (Legacy), Varlamore advanced, Werewolf, Priffddinas) - Supports Agility pyramid - All food + option to choose when to eat - (Super) Energy potions + Stamina potions support - Progressive course/rooftop option - Waterskin support - Option to loot and sell pyramid top - CLI support for goldfarmers Custom Breakmanager: - Setup Bot and break times - Randomize your break times - Stop script on certain conditions (Stop on first break, Stop after X amount of minutes, Stop when skill level is reached) - Worldhopping - Crucial part to botting in 2023! Script queueing: - Support queueing multiple script in a row - All Khal scripts support flawless transitions in between scripts - Start creating your acc in a few clicks from scratch to multiple 99's - Flawless CLI support - Learn more here: How to use CLI parameters: - Example Usage: -script 463:ScriptFile.BreakFile.DiscordFile SAVEFILE = Saved Filename BREAKFILE = Breakmanager Filename DISCORDFILE= discordSettings Filename - SAVEFILE: Save file can be created in the GUI. Navigate to the tab you want to run and press "Save As CLI file". Please choose your filename wisely (No special characters) - BREAKFILE (Optional): Breakfile can also be create in the GUI, set the breaksettings you wish to use and press "Save new CLI BreakFile". Please choose your filename wisely (No special characters) - Final form (Note that with some bot manager you do not need to specify '-script 463'): -script 463:TaskList1.4515breaks (With breaks) -script 463:TaskList1.4515breaks.discord1 (With breaks & discord) -script 463:TaskList1..discord1 (NO breaks & discord, leave 2nd parameter empty) Proggies:
  7. by Czar Buy now (only $8.99!) 143 HOURS IN ONE GO!!!!! update: this bot is now featured on the front page of osbot! More reviews than every other fishing bot combined! 100 hour progress report!!! How to use Script Queue: ID is 552, and the parameters will be the profile name that you saved in setup! This process is really simple, just to save you headache
  8. 1 point
    Molly's Planker This script makes planks at Varrock East for gold. Buy HERE Requirements: None for regular method, for balloon method you need rings of dueling, willow logs(1 per run), be under 40KG weight with full inventory of coins + logs(wear graceful items for example) and you must have completed the quest Enlightened Journey. Features: - Hopping out of bot worlds - Stamina potion usage - Regular energy pot usage, this can be used in conjunction with stamina pots to reduce the amount of stamina pots used - Makes normal, oak, and teak planks -Enlightened journey balloon support Setup: Start at Varrock East, have coins and logs in bank and let it do work! CLI Setup: Proggies: Normal planks, no stam pots used:
  9. Molly's Chaos Druids This script fights chaos druids in Taverly dungeon, Edgeville dungeon and Ardougne. Profits can easily exceed 200k p/h and 60k combat exp/ph, this is a great method for training low level accounts and pures. Buy HERE Like this post and then post on this thread requesting a 24hr trial. When I have given you a trial I will like your post so you will receive a notification letting you know you got a trial. Requirements - 46 Thieving for Ardougne -82 Thieving and a Lockpick for Yanille - 5 Agility for Taverly(recommended) - No other requirements! Though I do recommend combat stats of 20+ as a minimum Features: - Supports eating any food - Hopping out of bot worlds - Recovers from deaths(respawn point must be lumbridge), includes re-equipping items on death - Potion support - Automatically detects and withdraws/uses Falador teleport tabs if using Taverly dungeon - Automatically detects and withdraws/equips/uses glories if using Edgeville dungeon - Supports looting bag Setup: Start the script, fill out the GUI, and be in the general area of where you want to run the script. CLI setup: Proggies: In the works: Known bugs: Bug report form, this is a MUST for problems to be resolved quickly: Description of bug(where, what, when, why): Log: Your settings: Mirror mode: Y/N
  10. People are intimidated by Task/Node based scripts because they think its difficult to write and understand. Well you shouldn't be scared, because I'm going to cover everything you need to know. Before going on to the tutorial, I'm expecting from you, To have at least basic knowledge of java To have at least basic knowledge of the OSbots API So what are Task/Node based scripts? Well its simply states but in OOP design. Alright, so we are going to make an abstract class for a Task. We will use this code which I will explain in a bit. import org.osbot.rs07.script.MethodProvider; public abstract class Task { protected MethodProvider api; public Task(MethodProvider api) { this.api = api; } public abstract boolean canProcess(); public abstract void process(); public void run() { if (canProcess()) process(); } } Breaking down this code just comes simply to a few things. A constructor which accepts the MethodProvider class, but why shouldn't it accept the Script class? Well because we only want the task to know about the OSbot api, not the whole methods that the Script class can have, like onLoop(), onStart(), etc. protected MethodProvider api; public Task(MethodProvider api) { this.api = api; } An abstract boolean public abstract boolean canProcess(); An abstract method public abstract void process(); And a run method public void run() { if (canProcess()) process(); } When a class will inherit the methods from the Task class, that class will have a constructor, an abstract method and boolean. The boolean canProcess() will be the condition on which the process() method will execute code. So basically we do the checks and processing with the run() method, we would just check if the condition is true and let the process() method execute code accordingly. Now, we got that abstract class Task, we are going to make it do work for us. We are going to make a drop task, the class will extend the Task class and it will inherit the abstract methods which the Task class has. The drop task will have a condition, the condition will be api.getInventory().isFull(), the condition will return true after the inventory is full and let the process() method execute script accordingly, the code will be api.getInventory().dropAll(); Our class will look something like this import org.osbot.rs07.script.MethodProvider; public class DropTask extends Task { public DropTask(MethodProvider api) { super(api); } @Override public boolean canProcess() { return api.getInventory().isFull(); } @Override public void process() { api.getInventory().dropAll(); } } As you can see we declare a constructor public DropTask(MethodProvider api) { super(api); } Now you might ask why the constructor looks a bit differently from the abstract Task class and what super(api) means? the super() keyword invokes the parents class constructor AKA the Task's class constructor. Now going further we see @Override public boolean canProcess() { return api.getInventory().isFull(); } So that is how our condition is handled, we just return the booleans variable based on what the getInventory().isFull() returns. In term, if the inventory is full the condition will be true, if the inventory is empty the condition will be false. Further on we see @Override public void process() { api.getInventory().dropAll(); } This is basically what our custom task will do after the canProcess() is true, aka when the condition is true. If inventory is full -> we will drop the items. ' After we got our custom task done, we need to let our script execute the tasks, now how we will do it? Simply we will open our main class which extends Script, meaning that the main class is a script. We declare a new ArrayList at the top of our class, to which we will add tasks to. Our main class should look like this import java.util.ArrayList; import org.osbot.rs07.script.Script; public class Main extends Script{ //this is our array list which will contain our tasks ArrayList<Task> tasks = new ArrayList<Task>(); @Override public int onLoop() throws InterruptedException { return 700; } } Now we have our ArrayList which we have a non primitive data type in it (<Task>), in term think of it like the ArrayList is inheriting the methods from Task class. All though its a different topic called https://en.wikipedia.org/wiki/Generics_in_Java you can look into that if you want. Alright, so we have our ArrayList, time to add our tasks to it. In our onStart() method, which only executes once when the script starts we simply add tasks.add(new DropTask(this)); So basically we are adding a new task to the ArrayList, by doing that, to the .add() we add a new object of our DropTask by doing .add(new DropTask(this)); our DropTask has a constructor for MethodProvider which we simply pass by doing DropTask(this) the keyword this references this class that contains the code. Now why does it work by referencing this class, its because the Main class extends Script, the Script class extends MethodProvider as its stated in the OSBots API docs. So we added our tasks to the ArrayList, now we need to check the conditions state and execute the code accordingly. We simply add this to our onLoop() method. tasks.forEach(tasks -> tasks.run()); Which will iterate trough all the tasks in the ArrayList and execute the run() method, as we remember the run() method in our abstract Task script simply checks the condition and executes code if the condition is true. After all this our main class should look like import java.util.ArrayList; import org.osbot.rs07.script.Script; public class Main extends Script{ ArrayList<Task> tasks = new ArrayList<Task>(); @Override public void onStart(){ tasks.add(new DropTask(this)); } @Override public int onLoop() throws InterruptedException { tasks.forEach(tasks -> tasks.run()); return 700; } } Now after all this you can start making your own tasks and adding them to the list. Alright for those who want quick pastes you can find them here in this spoiler: So no need to be scared, you just really need to try and do it, hope this tutorial helped.
  11. โ–บ Configuration saving/loading: - Save your configurations to use them again in the future. Especially handy when you need a lot of accounts of the same type. โ–บ Tutorial Island: - Auto-completes Tutorial Island with appearance customization โ–บ Combat: - Switch attack styles to reach desired combat level quicker - Deadwalk - Choose the combat type (pures, balances etc...) - Supports chickens & goblins based on combat level In development: - Grand exchange support for obtaining better weapons/tools - Currently working for woodcutting Planned: - Quests for 7 QP Media: Release information: - To come. There is still too much work to do to already be bothering about release.
  12. Features: Kills guards in the palace in Varrock Banking Clue scroll looting Eating any food Antiban Logging out when clue is looted โ€‹ Progress reports: Instructions to run: Type the food you want in then start in Varrock somewhere Download: http://s000.tinyupload.com/index.php?file_id=31752714855930029098
  13. 1 point
    So who's getting into DMM again today? my current progress
  14. So I have a lot of old botted accounts that haven't been used for 2-3 years. When I decided to make a few member and bot them, they got banned extremely quick, doing the same exact thing that other accounts were doing on the same IP. Just an observation, since brand new accounts have NO bans compared to 5/6 old accounts being banned. I don't know why this dilemma exists, but just a tip. Sell old botted accounts instead of botting on them again. Also another thing. Two of my accounts that haven't ever been botted or RWT'd on got hit with RWT bans. Funny enough my gold mule remained unbanned.
  15. script seems to work flawlessly until around 20 minutes in then it starts to lag and hog the cpu usage
  16. 1 point
    can i get a trial?
  17. 1 point
    You dont have to do it :P script is amazing nonetheless.
  18. 1 point
    1st real proggy iv gotten with any script haha good work khal
  19. 1 point
    using a public vpn? other people were prolly botting on same ip too which got u chained with 'em
  20. 1 point
    I'm pretty sure all VPN's are flagged af, why would you consider botting on a VPN?
  21. Can i grab a trial of this khal, cheers
  22. Ooh, that's not a bad idea! I'll see what I can do ~apa
  23. Does this script have progressive leveling and/or banking with webwalking?
  24. 1 point
    Hey, I was wondering if I could try a trail please? I liked the thread
  25. Looks awesome but you should add alching support to it. You've already got a very good alch bot but then again I have no idea how coding works. Excited for release either way!
  26. 1 point
    oh god i remember that one LMAO
  27. Request Template: - Script name : Pest Control - trial length : How ever long you can do - Reason for trial : looking to buy - Are you ging to give feedback on the script? : Yes
  28. could i get a trial of this? thanks!
  29. hi khal! may i please have a 6 hour trial? ive used scripts from you before but never a pc script from anyone, trying to see if pc is the right way to train my str without gaining hp or if i should just stick to barb fishing! thanks very much very big fan of your work!!!!
  30. Molly, could you possibly give me another crack at the trial? I bought your Druid script, but wanted to try your Hobgoblin script but I didn't get home till now. Proof I'm not giving you the runaround: https://gyazo.com/e6de13387d89d93dec7a5a7a0f676425
  31. 1 point
    damn son! Just saw this ... Thats an awesome proggy
  32. Why declare a JFrame within the script class? Separate it. public class GUI extends JFrame { public GUI() { setTitle("GUI); ... pack(); setVisible(true); } } Instantiate within the script class public class ShitScript extends Script { private GUI gui; ... @Override public void onStart() { gui = new GUI(); } @Override public void onExit() { if(gui != null) gui.dispose(); } ... } This way, you can manage your GUI without having to trawl through a ton of unrelated code in the script class.
  33. public enum TestEnum { SAPPHIRE("Sapphire", "blue", 1222, false); //here we add the name, color, price and if it's a member item. private String name; private String color; private int price; private boolean isMember; /** * * @param name * @param color * @param price * @param isMember */ TestEnum(String name, String color, int price, boolean isMember){ this.name = name; this.color = color; this.price = price; this.isMember = isMember; } /** * * @return name */ public String getName(){ return name; } /** * * @return color */ public String getColor(){ return color; } /** * * @return price */ public int getPrice(){ return price; } /** * * @return ismember */ public boolean isMember(){ return isMember; } } inventory.getItem(TestEnum.SAPPHIRE.getName()); 2min work.Google how enums work for a better understanding.
  34. 1 point
    Any skills i can pay for
  35. Web walker Hey, I have returned to OSBot and this time I have started a web walking project. I started working on it a little while ago and its soon done. Once its finished I am planning on re-writing my old scripts with this webwalker. Features Walking: - Surface world (95%) - Dungeons (60%) - Stronghold of security (100%) - I just need to add the last floor and its done. This is also the most tedious dungeon to add by far, due to the different paths + all the doors - Nieve slayer dungeon (100%) - Brimhaven dungeon (0%) - Taverly dungeon (100%) - Fremennik slayer dungeon (100%) - Edgeville dungeon (100%) - Kalphite dungeon (0%) - Other locations (100%) - Slayer tower (100%) - The pass to morytania (100%) Shortcut, obstacles & teleports: All of the agility shortcut and special traveling methods has conditions that needs to be met. This means that the script will not travel with gliders if you haven't done grand tree, and will not use agility shortcuts you don't have the level to handle. - Normal obstacles (100%) - Agility shortcuts (50%) - Traveling methods (80%) - Gnome glider (100%) - Spirit trees (100%) - Fairy rings (80%) - Can't add all locations until they have been mapped - Desert carpets (0%) - Charter boats (0%) - Teleports (0%) - Teleports & teletabs (0%) - Minigame teleports (0%) Media: In the video the walker is walking from lumbridge to the bridge in ardougne. Please note that I am going to fix the two way traveling with spirit trees, I just havent gotten around to connect every tree to eachother
  36. Here I will be covering streams. Streams are great ways to essentially sort through lists. Why should we use streams? Since you can do just about anything with them in a single line of code. There are cases where streams probably aren't the most useful, take this: NPC guard = getNpcs().closest("Guard"); This is our bog standard way of grabbing the closest "Guard" npc. What it would actually be doing behind the scenes would be using a stream like so: public NPC closest(String name) { return getNpcs().getAll().stream().filter(npc -> (npc.exists() && npc.getName().equalsIgnoreCase(name))).min(new Comparator<NPC>() { @Override public int compare(NPC one, NPC two) { return Integer.compare(getMap().distance(one), getMap().distance(two)); } }).orElse(null); } Looks complicated, right? Here's what it would look like if it wasn't all one line: public NPC closest(String name) { Stream<NPC> unfilteredStream = getNpcs().getAll().stream(); Stream<NPC> filteredStream = unfilteredStream.filter(npc -> (npc.exists() && npc.getName().equalsIgnoreCase(name))); Optional<NPC> npc = filteredStream.min(new Comparator<NPC>() { @Override public int compare(NPC one, NPC two) { return Integer.compare(getMap().distance(one), getMap().distance(two)); } }); return npc.orElse(null); } Here's a breakdown of all the functions: (more on comparators in a bit) filter() -> This function will filter out our list for the specified properties that we're looking for in an NPC. In our case, we're looking for an NPC that exists and has a name of our variable "name". Every NPC that is in our region that doesn't suit our needs is discarded. min() -> This is a bit of a complicated function, but what it will do is find the NPC which returns the smallest compare() value. In this scenario, it will return the NPC which is closest to us. orElse() -> This is the same as an if (x) y; else z; statement, however basically what we are saying is if we could not find a suitable NPC, we can return the value inside orElse() (in this case, null). Now, this probably still looks like a bunch of wizardry to you. No worries, streams are scary at first, but after you know how to write them they're great! How to write a stream By now, you're probably itching to write a stream. In this example, we're going to find all the players within a 6 tile radius. To start off, we're going to have a function called getPlayersWithinSix(): public List<Player> getPlayersWithinSix() { return null; //We'll change this soon } Now we're going to begin the filter! To start off, we want to grab all the players, and put it in a Stream<Player>. This is what we will be filtering! public List<Player> getPlayersWithinSix() { Stream<Player> ourStream = getPlayers().getAll().stream(); return null; //We'll change this soon } Now that we have our stream, we can finally begin filtering! In this example, we only want to filter to see if the player is within 6 tiles of our own player. We're going to store the filter in another stream like so: public List<Player> getPlayersWithinSix() { Stream<Player> ourStream = getPlayers().getAll().stream(); Stream<Player> ourFilteredStream = ourStream.filter(player -> (player.exists() && getMap().distance(player) <= 6)); return null; //We'll change this soon } In our filter, we're checking these conditions: Does the player exist? Is the distance of the player within 6 tiles? Finally, we want to turn our Stream into a list so we can use it. We do this like so: public List<Player> getPlayersWithinSix() { Stream<Player> ourStream = getPlayers().getAll().stream(); Stream<Player> ourFilteredStream = ourStream.filter(player -> (player.exists() && getMap().distance(player) <= 6)); return ourFilteredStream.collect(Collectors.toList()); } See how we changed our return to ourFilteredStream.collect();? What that will do is put all of these players we found into a list, and return it. Now, this doesn't look like our streams from before, so to put it all in one line it would look like this: public List<Player> getPlayersWithinSix() { return getPlayers().getAll().stream().filter(player -> (player.exists() && getMap().distance(player) <= 6)).collect(Collectors.toList()); } Comparators, what do they do? A comparator is basically a way we compare two objects. Since the Comparator type is abstract (much like our Filter<T> class), we have to make our own compare() method. An example can be seen in our NPC closest function: new Comparator<NPC>() { @Override public int compare(NPC one, NPC two) { return Integer.compare(getMap().distance(one), getMap().distance(two)); } } What this Comparator does, in essence, is compare the distances of both NPCs (relative to the player). Since getMap().distance() returns an integer, we use Integer.compare to compare both of the distances. You'll most likely be using a Comparator to check for distance. More stream examples Here I'll be writing a few more stream examples to show why they're so useful. Find the furthest away NPC that has the name "Man": getNpcs().getAll().stream().filter(npc -> (npc.exists() && npc.getName().equalsIgnoreCase("man"))).max(new Comparator<NPC>() { @Override public int compare(NPC one, NPC two) { return Integer.compare(getMap().distance(one), getMap().distance(two)); } }).orElse(null); Get all the NPCs in a 10 tile radius that you can attack: getNpcs().getAll().stream().filter(npc -> (npc.exists() && npc.hasAction("Attack") && getMap().distance(npc) <= 10)).collect(Collectors.toList()); Get all the fishing spots where you can cage for lobsters: getNpcs().getAll().stream().filter(npc -> (npc.exists() && npc.hasAction("Cage") && npc.hasAction("Harpoon"))).collect(Collectors.toList()); If I missed anything, let me know
  37. Technically we are injecting, but it's about as detectable as reflection. Mirror mode of course removes a bunch of traces which could be used to identify someone as a botter. We use the name "stealth injection" so people don't think we are mindlessly injecting into the game. It's pretty safe, I've been botting on it for about six months with no issues; bare in mind I bot maybe 10 hours a week. Stealth Injection - More detectable, less computer resources Mirror Mode - Less detectable, more computer resources

Account

Navigation

Search

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.