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
    16
    Points
    23654
    Posts
  2. Alek

    Ex-Staff
    13
    Points
    7878
    Posts
  3. liverare

    Java Lifetime Sponsor
    6
    Points
    1300
    Posts
  4. Khaleesi

    Developer
    5
    Points
    27816
    Posts

Popular Content

Showing content with the highest reputation on 09/24/17 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. NEW! Added Gemstone Crab! 81 Hours at Cows Brutal Black Dragon support Sulphur Nagua support Blue Dragon 99 ranged 99 Ranged at Gemstone Crab 81 Range F2p Safespotting Hill Giants Hotkey List // F1 = set cannon tile // F2 = hide paint // F3 = Set afk tile // F4 = reset afk tile // F6 = Set safespot tile // F7 = activate tile selector // F8 = Reset tile selector // F9 and F10 used by the client, EDIT: will re-assign as they are no longer used by client // F11 = Set breaks tile // F12 = Reset breaks tile User Interface Banking Tab Demo (handles everything with banking) You can copy inventory (to avoid adding individual items...), you can insert item names which have Auto-Fill (for you lazy folk!) and you can choose whether to block an item and avoid depositing it in bank, ideal for runes and ammo. Looting Tab Demo (From looting to alchemy, noted/stackable items too) You can choose whether to alch an item after looting it simply by enabling a checkbox, with a visual representation. All items are saved upon exiting the bot, for your convenience! Tasking Demo (Not to be confused with sequence mode, this is an individual task for leveling) You can set stop conditions, for example to stop the bot after looting a visage, you can have a leveling streak by changing attack styles and training all combat stats, you can have windows alert bubbles when an event occurs and an expansive layout for misc. options! Prayer Flick Demo (Just example, I made it faster after recording this GIF) There are two settings: Safe mode and efficient mode, this is safe mode: Fight Bounds Demo Allows you to setup the fight bounds easily! Simplified NPC chooser Either choose nearby (local) NPCs or enter an NPC name to find the nearest fight location! Simple interface, just click! Level Task Switch Demo (Switching to attack combat style after getting 5 defence) You can choose how often to keep levels together! e.g. switch styles every 3 levels Cannon Demo (Cannon is still experimental, beta mode!) Choose to kill npcs with a cannon, recharges at a random revolution after around 20-24 hits to make sure the cannon never goes empty too! Results Caged Ogres: How does this bot know where to find NPCs? This bot will find far-away npcs by simply typing the NPC name. All NPCs in the game, including their spawn points have been documented, the bot knows where they are. You can type 'Hill giant' while your account is in Lumbridge, and the bot will find it's way to the edgeville dungeon Hill giants area! Here is a visual representation of the spawn system in action (this is just a visual tool, map mode is not added due to it requiring too much CPU) Fight Area Example (How the bot searches for the npc 'Wolf') Walking System The script has 2 main walking options which have distinctive effects on the script. The walking system is basically a map with points and connections linking each point. It tells the script where to go, and decides the routes to take when walking to fightzones. Walking system 1 This uses a custom walking API written by myself and is constantly being updated as new fightzones are added. Pros: - Updates are instant, no waiting times - More fightzones are supported Cons: - Sometimes if an object is altered, the changes are not instant - Restarting the script too many times requires loading this webwalker each time which adds unnecessary memory (there is no way to make it only load at client startup since I don't control the client) Walking system 2 This is the default OSBot webwalking API - it is relatively new and very stable since the developers have built it, but is currently lacking certain fightzones (e.g. stronghold) and other high level requirement zones. It is perfect for normal walking (no object interactions or stairs, entrances etc) and never fails. Pros: - Stable, works perfect for normal walking - All scripters are giving code to improve the client webwalker - More efficient when restarting the script since it is loaded upon client start Cons: - No stronghold support yet - Some new/rare fightzones not supported yet - If there is a game-breaking update or an unsupported fightzone, it may take some time to add/repair (less than 24 hours usually) So which system should I choose? Whichever one suits your chosen fightzone best! There really shouldn't be any problems - the sole purpose of these options are for backup and emergency purposes, if the script ever messes up there is always the next option to select. Note: If the script ever fails, there will be immediate updates to fix the walking systems! Script Queue/Bot Manager: Script ID is 758, and the parameters will be the profile name that you saved in the fighter setup! Bug Report templates: New feature request - What is the new feature - Basic description of what the script should do - Basic actions for the script: 'Use item on item' etc. For when the script gets stuck on a tile (or continuous loop): - Which exact tile does the script get stuck on? (exact tile, not 'near the draynor village') - Plugin or normal script? - Did you try all 3 walking options? Script has a logic bug (e.g. dies while safespotting) or (cannon mode doesn't pickup arrows) - What is the bug - How did you make the bug happen - (optional) recommendation for the bug, e.g. 'make the script walk back' or something - Tried client restart? - Normal script or a plugin? - Which exact setup options are enabled? Afk mode, cannon mode, etc etc.
  3. 3 points
    Changelog: -Improved bit logic behind Bank methods withdraw/swap modes -Removed index identifier from Spells -Updated Magic API, not reliant on static ids --Zach patched getSpellName() hook
  4. โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 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.
  5. Note: No additional quests or PoH interiors are required anymore. Please take the time to read through the following information, they may answer your questions If not, feel free to ask in this thread Barrows Barrows is a dangerous combat minigame, located in the southern parts of Morytania. The purpose of the minigame is to kill all 6 barrow brothers and finally claim their treasure, providing a chance to receive the unique and valuable barrows equipment, as well as other precious loot. Feature Guide Starting the script Proggies (Post your own in this thread to have them added) Change Log Troubleshooting FAQ Dynamic Signatures Bug report template http://frostbug.dk/dynsig_barrows.png?username=All
  6. 2 points
    Let's work to make Wilderness bots great again! Example code: import java.util.List; import org.osbot.rs07.api.model.Player; import org.osbot.rs07.script.Script; import org.osbot.rs07.script.ScriptManifest; import com.liverare.api.WildernessAPI; @ScriptManifest(author = "", info = "", logo = "", name = "Test", version = 0) public class Test extends Script { WildernessAPI wilderness; @Override public void onStart() throws InterruptedException { wilderness = new WildernessAPI(); wilderness.exchangeContext(bot); } @Override public int onLoop() throws InterruptedException { Player workerBot = players.closest("W0rk3r B0t 5001"); handleRealThreats(); handlePotentialThreats(); saveWorkerBot(workerBot); return 100; } private void handleRealThreats() { List<Player> realThreats = wilderness.findRealThreats(); if (realThreats != null && !realThreats.isEmpty()) { // oh shit they can attack us // better check what they're wearing and what they're doing } } private void handlePotentialThreats() { List<Player> potentialThreats = wilderness.findPotentialThreats(); if (potentialThreats != null && !potentialThreats.isEmpty()) { // oh dear, we may be in trouble // we'd better not go deeper into the Wilderness, they may be // waiting for us to do exactly that! } } private void saveWorkerBot(Player workerBot) { List<Player> realThreatsToWorkerBot = wilderness.findRealThreats(workerBot); if (realThreatsToWorkerBot != null && !realThreatsToWorkerBot.isEmpty()) { // worker bot may be in trouble // perhaps we should attack baddie? lure them away? etc. } } } Methods: public int getSafeWildernessLevel(Player player) public int getSafeWildernessLevel(Player playerA, Player playerB) public List<Player> findPotentialThreats() public List<Player> findPotentialThreats(Player victim) public List<Player> findRealThreats() public List<Player> findRealThreats(Player victim) public static boolean canPlayerAFighterPlayerB(Player playerA, Player playerB) public static int calculateYCoordinate(Vector3D vector3d, boolean upperBound) public static int calculateYCoordinate(int wildernessLevel, boolean upperBound) public static int calculateWildernessLevel(Vector3D vector3d) public static int calculateWildernessLevel(int yCoordinate) Source:
  7. 2 points
    Find people wearing stuff. Note: doesn't work with ammo and rings. Example code: import java.util.List; import org.osbot.rs07.api.def.ItemDefinition; import org.osbot.rs07.api.model.Player; import org.osbot.rs07.script.Script; import org.osbot.rs07.script.ScriptManifest; import com.liverare.api.AppearanceAPI; @ScriptManifest(author = "", info = "", logo = "", name = "Test", version = 0) public class Test extends Script { AppearanceAPI appearance; @Override public void onStart() throws InterruptedException { appearance = new AppearanceAPI(); appearance.exchangeContext(bot); } @Override public int onLoop() throws InterruptedException { pesterRichPeopleForFreeStuff(); return 100; } private void pesterRichPeopleForFreeStuff() { List<Player> richPeople = appearance.findPlayersWielding(Test::isExpensiveItem); if (richPeople != null && !richPeople.isEmpty()) { // rich people spotted! // prepare for pestering // in 3... } } private static boolean isExpensiveItem(ItemDefinition itemDefinition) { String itemName = itemDefinition.getName(); return itemName.equals("Twisted bow") || itemName.equals("3rd age longsword") || itemName.equals("3rd age pickaxe") || itemName.equals("3rd age axe") || itemName.equals("3rd age cloak") || itemName.equals("Elysian spirit shield") || itemName.equals("3rd age bow"); } } Methods: public List<Player> findPlayersWielding(List<Player> players, Predicate<ItemDefinition> itemDefinitionFilter) public List<Player> findPlayersWielding(Predicate<ItemDefinition> itemDefinitionFilter) public Player findPlayerWielding(List<Player> players, Predicate<ItemDefinition> itemDefinitionFilter) public Player findPlayerWielding(Predicate<ItemDefinition> itemDefinitionFilter) public static boolean isDefined(Player player, Predicate<ItemDefinition> itemDefinitionFilter) private static boolean isDefined(int[] appearance, Predicate<ItemDefinition> itemDefinitionFilter) Source:
  8. 24 hour progress report!! Setup Window Highly intuitive and visual, and easy to use! Portal Prediction knows which portals are going to drop - prioritises them! Full Void in <24 hours It takes only 850 points for full void, go go go! Screenshots & Results
  9. 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!
  10. 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
  11. 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:
  12. 1 point
    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
  13. 1 point
    Bob Ross would be so proud! Example code: import java.awt.Color; import java.awt.Graphics2D; import java.util.List; import org.osbot.rs07.api.map.Area; import org.osbot.rs07.api.model.NPC; import org.osbot.rs07.script.Script; import org.osbot.rs07.script.ScriptManifest; import com.liverare.api.PaintAPI; @ScriptManifest(author = "", info = "", logo = "", name = "Test", version = 0) public class Test extends Script { PaintAPI paint; Area safeSpace; List<NPC> guards; @Override public void onStart() throws InterruptedException { paint = new PaintAPI(); paint.exchangeContext(bot); safeSpace = myPlayer().getArea(5); } @Override public int onLoop() throws InterruptedException { guards = npcs.filter(Test::isGuard); return 100; } private static boolean isGuard(NPC npc) { return npc.getName().equals("Guard"); } @Override public void onPaint(Graphics2D g) { g.setColor(Color.BLACK); g.setBackground(Color.PINK); // dont worry bout checks fam, i do dat paint.drawMinimapArea(g, safeSpace); paint.drawEntities(g, guards, Test::guardToString, true, false, false, false, false, false, true); } private static String guardToString(NPC npc) { return "Health: " + npc.getHealthPercent() + ", xyz: " + npc.getPosition().toString(); } } Functions: public void drawLink(Graphics2D g, Entity entity1, Entity entity2) public void drawMinimapArea(Graphics2D g, org.osbot.rs07.api.map.Area area) public <T extends Position> void drawString(Graphics2D g, Function<T, String> toString, T position) public void drawString(Graphics2D g, String aString, Position position) public void drawString(Graphics2D g, String aString, Entity entity) public void drawEntity(Graphics2D g, Entity entity, String aString, boolean labelTile, boolean click, boolean cube, boolean minimap, boolean tile, boolean box, boolean wireframe) public void drawEntity(Graphics2D g, Entity entity, Function<T, String> getDescription, boolean labelTile, boolean click, boolean cube, boolean minimap, boolean tile, boolean box, boolean wireframe) public <T extends Entity> void drawEntities(Graphics2D g, Collection<T> entities, Function<T, String> getDescription, boolean labelTile, boolean click, boolean cube, boolean minimap, boolean tile, boolean tileCube, boolean wireframe) private void drawBox(Graphics2D g, Entity entity) private void drawBox(Graphics2D g, Position bottomTile, Position topTile) private void drawWireframe(Graphics2D g, Entity entity) private void drawClickBounds(Graphics2D g, Entity entity) private void drawCube(Graphics2D g, Entity entity) public void drawMinimapPoint(Graphics2D g, Vector3D v) public void drawMinimapLink(Graphics2D g, Vector3D a, Vector3D b) public void drawTile(Graphics2D g, Entity entity) public void drawTile(Graphics2D g, Position position) public static void drawPoint(Graphics2D g, Point point, int size) public static void drawPoint(Graphics2D g, int x, int y, int size) public static void drawShape(Graphics2D g, Shape shape) public static void drawString(Graphics2D g, String aString, int x, int y) public static void drawString(Graphics2D g, String aString, Point point) public static void drawString(Graphics2D g, String aString, Rectangle rectangle) Source:
  14. 1 point
    well this is cringe.
  15. 1 point
    @Sysm your "girlfriend" is here
  16. All true statements, if you really need money you're better off getting a minimum wage job. If you know programming very well, then you can save on some costs. If you don't know any programming, you're very likely to lose out.
  17. Welcome! The update would have been out sooner, but I was hit really hard from the hurricane and lost power for a week, then got backed up on school because everything got shifted around.
  18. can you please do an update on this ??? it randomly stops or mistakenly withdraws full inventory of jug of water or grapes after like 20 - 40 min and bot doesnt know how to rebank or even just randomy stops and doesnt know how to bank the wins -.0-" happened at west bank and g.e
  19. Used while I'm sleeping, 45 minutes on and 30 min break, got me from 50-99 very quick.
  20. 1 point
    Thanks, BTW worked flawlessly Tell if bird nests needs any testing
  21. 1 point
    Proxys?
  22. Does this support telegrabbing loot in cage spots like the king's ogres?
  23. "The Hills Have Eyes" is a good one
  24. Have to say brilliant script! I left the bot running or progressive hunter from level 9, woke up the next day and it was 68 hunter with already 1k red chins and the pet!! Love the script and well worth the money! Looking forward to the black chins advanced pker support when it comes out ??
  25. Insidious (all of them) are really scary with a decent story.
  26. Annabelle was pretty good too https://fmovies.is/film/annabelle.or7j/m44l6x
  27. Could I get a trial please? Interested in this script
  28. Does this script work? Can I get a trial please?
  29. can i get an auth? liked it ;)
  30. How do I get the 24 hour trial
  31. Big fan here, posting here because I trust your scripting to not get my accounts banned. Is there any chance you can look into making a script for Lizardman Shaman? The script would alch, use bank, return, and avoid attacks, I don't think there is a safespot anymore. Thanks anyways if it can't be done!
  32. Hey When i use Agression level 3 and activity level 1.And someone crashes you and the cabs agro on them 1st you never click on the crabs, can you fix it. So easy to crash
  33. I have been using this script every day for hours for about 5 days now. If you are we could we call or something and I can explain in details what problems there are. (I know of many small ones) and some small features to add. Should only take 10-15min of explaining.
  34. you should use the good ol' gmail exploit example - ImGay@gmail.com - I.mgay@gmail.com im.gay@gmail.com img.ay@gmail.com If you send an email to any of these emails it will go to the same place.
  35. @Czar hi, pretty please can you make it so when youre in AFK mode you can still spec, it would be good for my sgs or is it possible just to support sgs heals in general
  36. Script randomly freezes after an hour and will say "Waiting" and won't bank jugs of wine or retrieve more from bank?
  37. The bot works fine for me (running it right now). On that topic I think i've found a bug to report. Currently when it's on its last food item and an item drops it wants to pick up it will eat the last food, it appears to detect it's out of food, and starts the banking process without picking up the last item from the floor. This may be a bug or just a random occurrence thought I would point it out though since it should be easy to spot in the code if that's happening. Thanks.
  38. Currently only supports the normal spellbook. Examples package org.botre.magic; import org.osbot.rs07.api.ui.MagicSpell; import org.osbot.rs07.api.ui.Skill; import org.osbot.rs07.script.Script; //Script manifest... public class ExampleScript extends Script { private Autocast auto = new Autocast(this); @Override public int onLoop() throws InterruptedException { /* * These are radom non-dependant examples. */ // Autocasts the fireblast spell in non-defensive mode auto.autocast(AutocastSpell.FIRE_BLAST, false); // Autocast the wind bolt spell in defensive mode auto.autocast(AutocastSpell.WIND_BOLT, true); // Stop the script immediately if in defensive mode. if(auto.isDefensiveMode()) { stop(); } // Get the difference between the level required to autocast the... // spell you are autocasting and your static magic level (a bit arbitrary). MagicSpell spell = auto.getAutocastSpell(); if(spell != null) { int difference = Math.abs(spell.getRequiredLevel() - getSkills().getStatic(Skill.MAGIC)); } return 500; } } Autocast package org.botre.magic; import java.awt.Point; import org.botre.tab.TabHotkey; import org.osbot.rs07.api.ui.MagicSpell; import org.osbot.rs07.api.ui.RS2Widget; import org.osbot.rs07.input.mouse.WidgetDestination; import org.osbot.rs07.script.MethodProvider; import org.osbot.rs07.utility.ConditionalLoop; import org.osbot.rs07.utility.ConditionalSleep; public class Autocast { public static final int AUTOCAST_SPELL_CONFIG = 108; public static final int AUTOCAST_MODE_CONFIG = 439; // 0 = regular, 256 = defensive public static final Point DEFENSIVE_AUTOCAST_BUTTON_POSITION = new Point(650, 280); public static final Point REGULAR_AUTOCAST_BUTTON_POSITION = new Point(651, 333); private MethodProvider ctx; public Autocast(MethodProvider ctx) { this.ctx = ctx; } public boolean isAutocasting() { return ctx.getConfigs().get(AUTOCAST_SPELL_CONFIG) != 0; } public boolean isAutocasting(AutocastSpell auto) { return ctx.getConfigs().get(AUTOCAST_SPELL_CONFIG) == auto.getConfigValue(); } public boolean isAutocasting(AutocastSpell auto, boolean defensive) { return ctx.getConfigs().get(AUTOCAST_SPELL_CONFIG) == auto.getConfigValue() && defensive == isDefensiveMode(); } public boolean isRegularMode() { return ctx.getConfigs().get(AUTOCAST_MODE_CONFIG) == 0; } public boolean isDefensiveMode() { return ctx.getConfigs().get(AUTOCAST_MODE_CONFIG) == 256; } public MagicSpell getAutocastSpell() { AutocastSpell auto = AutocastSpell.forConfigValue(ctx.getConfigs().get(AUTOCAST_SPELL_CONFIG)); if(auto == null) return null; return auto.getSpell(); } public boolean isAutocastPanelOpen() { RS2Widget panel = ctx.getWidgets().get(201, 0); return panel != null && panel.isVisible(); } @SuppressWarnings("unchecked") public boolean openAutocastPanel(boolean defensive) { new ConditionalLoop(ctx.getBot(), 10) { @Override public boolean condition() { return !isAutocastPanelOpen(); }; @Override public int loop() { if(TabHotkey.COMBAT.openTab(ctx)) { RS2Widget button = ctx.getWidgets().singleFilter(ctx.getWidgets().getAll(), w -> { return w != null && w.isVisible() && w.getMessage() != null && w.getMessage().equals("Spell") && w.getPosition().equals(defensive ? DEFENSIVE_AUTOCAST_BUTTON_POSITION : REGULAR_AUTOCAST_BUTTON_POSITION); }); if(button != null) { WidgetDestination destination = new WidgetDestination(ctx.getBot(), button); if(ctx.getMouse().click(destination)) { new ConditionalSleep(2400, 200) { @Override public boolean condition() throws InterruptedException { return !button.isVisible(); } }.sleep(); } } } return MethodProvider.random(50, 150); } }.start(); return isAutocastPanelOpen(); } @SuppressWarnings("unchecked") public boolean closeAutocastPanel() { new ConditionalLoop(ctx.getBot(), 10) { @Override public boolean condition() { return isAutocastPanelOpen(); }; @Override public int loop() { RS2Widget cancel = ctx.getWidgets().singleFilter(ctx.getWidgets().getAll(), w -> { return w != null && w.isVisible() && w.getMessage() != null && w.getMessage().equals("Cancel"); }); if(cancel != null) { WidgetDestination destination = new WidgetDestination(ctx.getBot(), cancel); if(ctx.getMouse().click(destination)) { new ConditionalSleep(2400, 200) { @Override public boolean condition() throws InterruptedException { return !cancel.isVisible(); } }.sleep(); } } return MethodProvider.random(50, 150); } }.start(); return !isAutocastPanelOpen(); } public boolean autocast(AutocastSpell spell, boolean defensive) { new ConditionalLoop(ctx.getBot(), 10) { @Override public boolean condition() { return spell != null ? !isAutocasting(spell) : isAutocasting(); }; @SuppressWarnings("unchecked") @Override public int loop() { if(isAutocastPanelOpen()) { if(spell == null) { closeAutocastPanel(); } else { if(defensive != isDefensiveMode()) { closeAutocastPanel(); } else { RS2Widget button = ctx.getWidgets().singleFilter(ctx.getWidgets().getAll(), w -> { if(w != null && w.isVisible() && w.getInteractActions() != null) { String name = spell.getSpell().toString().replace("_", " "); for (String action : w.getInteractActions()) if(action != null && action.equalsIgnoreCase(name)) return true; } return false; }); if(button != null) { WidgetDestination destination = new WidgetDestination(ctx.getBot(), button); if(ctx.getMouse().click(destination)) { new ConditionalSleep(2400, 200) { @Override public boolean condition() throws InterruptedException { return !button.isVisible(); } }.sleep(); } } } } } else { openAutocastPanel(defensive); } return MethodProvider.random(50, 150); } }.start(); return spell != null ? isAutocasting(spell) : !isAutocasting(); } } AutocastSpell This is a MagicSpell wrapper storing the config value for a MagicSpell. package org.botre.magic; import org.osbot.rs07.api.ui.MagicSpell; import org.osbot.rs07.api.ui.Spells.NormalSpells; public enum AutocastSpell { WIND_STRIKE(NormalSpells.WIND_STRIKE, 3), WATER_STRIKE(NormalSpells.WATER_STRIKE, 5), EARTH_STRIKE(NormalSpells.EARTH_STRIKE, 7), FIRE_STRIKE(NormalSpells.FIRE_STRIKE, 9), WIND_BOLT(NormalSpells.WIND_BOLT, 11), WATER_BOLT(NormalSpells.WATER_BOLT, 13), EARTH_BOLT(NormalSpells.EARTH_BOLT, 15), FIRE_BOLT(NormalSpells.FIRE_BOLT, 17), WIND_BLAST(NormalSpells.WIND_BLAST, 19), WATER_BLAST(NormalSpells.WATER_BLAST, 21), EARTH_BLAST(NormalSpells.EARTH_BLAST, 23), FIRE_BLAST(NormalSpells.FIRE_BLAST, 25), WIND_WAVE(NormalSpells.WIND_WAVE, 27), WATER_WAVE(NormalSpells.WATER_WAVE, 29), EARTH_WAVE(NormalSpells.EARTH_WAVE, 31), FIRE_WAVE(NormalSpells.FIRE_WAVE, 33); private MagicSpell spell; private int configValue; private AutocastSpell(MagicSpell spell, int configValue) { this.spell = spell; this.configValue = configValue; } public MagicSpell getSpell() { return spell; } public int getConfigValue() { return configValue; } public static AutocastSpell forSpell(MagicSpell spell) { for (AutocastSpell a : values()) { if(a.spell == spell) return a; } return null; } public static AutocastSpell forConfigValue(int configValue) { for (AutocastSpell a : values()) { if(a.configValue == configValue) return a; } return null; } }

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.