Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 07/13/18 in Posts

  1. Create a class called Breaker and add this in: import org.osbot.rs07.script.RandomEvent; import org.osbot.rs07.script.RandomSolver; import org.osbot.rs07.script.ScriptManifest; public class Breaker extends RandomSolver { public Breaker() { super(RandomEvent.BREAK_MANAGER); } @Override public boolean shouldActivate() { //Condition for the break manager to be activated return false; } @Override public int onLoop() throws InterruptedException { //Code which should be executed while the break manager is activated //example log("hi"); return 0; } } Add this to your scripts onStart() Breaker breaker = new Breaker(); breaker.exchangeContext(getBot()); bot.getRandomExecutor().overrideOSBotRandom(breaker);
    8 points
  2. β™”CzarScripts #1 Bots β™” Proven the #1 selling, most users, most replies Script Series on the market. Big THANK YOU to all our wonderful users and supporters over the 8 years, we couldn't have done it without you. Czar Bots have always been the Best and the most Feature-rich bots available with the most total sales in OSBot history. Come and find out why everyone is choosing Czar Bots today. β™” LATEST BOTS β™” If you want a trial - just post the script name and it will be activated after I hit 'like' on your post Requirements: hit 'like' on this thread
    7 points
  3. ────────────── 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.
    3 points
  4. yeah but now i can be this
    3 points
  5. One day whilst running another zulrah bot through underground pass, I began to wonder how fast it is possible to get a quest cape on a fresh lvl 3. So yeah, if people care I'll do updates, if they don't, fuck it, I'll still do updates. Mostly doing this for me. STARTING BANK:
    2 points
  6. check that negative feedback out fam EDIT: nvm i seen it myself, will hit you up
    2 points
  7. There's a lot of things wrong lol but here's something I see a lot of people doing: interact method() // boolean New Conditional sleep... Your conditional sleep should only execute if the interact method is true. The way you have it written, the conditional sleep always runs regardless if the interact actually happened. It should always be like this: if (druid.interact("attack")){ insert conditiona sleep here... } It might be hard to get your head to wrap around it. You would think interacts should be a void right(void methods are usually actions and return nothing). Well if you interact, you want to know if it was successful. So that's why the action returns a boolean.
    2 points
  8. Upcoming NPCs: Green Dragons NOT SUPPORTED!, ROCK CRABS, SAND CRABS, AMMONITE CRABS Added! RUNE DRAGONS JUST ADDED, GET IN THAT SWEET 2-3m/hr! Want to buy with OSRS GP? Buy a store voucher here! And this sweet drop while testing the script for update v254.0... 52 HOUR RESULT! 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.
    1 point
  9. Want to buy with OSGP? Contact me on Discord! Detailed feature list: - Account builder mode to level your firemaking to level 50 or even higher. - Equips pyromancer gear option - Chopping and burning logs (base Option) - Relights brazier - Fletch option - Fix brazier option - Make potion and heal pyromancer when down option - Tons of food supported - Brazier swicthing when pyromancer is down - Advanced game settings to skip games, smart caluclate points, afk at certain points, ... - Bank or Open crates - Dragon axe special attack - Fletch at brazier option - Chop in safespot option - Worldhopping - 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 909:ScriptFile.BreakFile.DiscordFile SAVEFILE = Saved Filename BREAKFILE = Breakmanager 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 managers you do not need to specify -script 909): -script 909:TaskList1.4515breaks (With breaks) -script 909:TaskList1.4515breaks.discord1 (With breaks & discord) -script 909:TaskList1..discord1 (NO breaks & discord) Proggies:
    1 point
  10. All accounts come with the original email (you get the email aswell), recovery information such as account creation date, ISP used, previous passwords. Only bonds have been used for membership. I will only be accepting OSGP as payment. You will go first, we use a MM. I go first if you're trusted. Account 1 - A/W - 45M 84/84/84 - 92 Woodcutting - Client of Kourend - 100% Hosidius Favour 1. Pictures of the account stats - http://prntscr.com/k615af 2. Pictures of the account banns - http://prntscr.com/k6149w 3. membership left (if there is any) - expires 29th of July 4. Original/previous owners AND Original Email Address - Yes Account 3 - A/W - 35M 77/77/77 - 84 Woodcutting - Client of Kourend - 100% Hosidius Favour 1. Pictures of the account stats - http://prntscr.com/k619pi 2. Pictures of the account banns - http://prntscr.com/k618z2 3. membership left (if there is any) - expires 24th of July 4. Original/previous owners AND Original Email Address - Yes Account 4 - A/W - 35M 77/77/77 - 84 Woodcutting - Client of Kourend - 100% Hosidius Favour 1. Pictures of the account stats - http://prntscr.com/k61b7r 2. Pictures of the account banns - http://prntscr.com/k61amz 3. membership left (if there is any) - expires 27th of July 4. Original/previous owners AND Original Email Address - Yes Sold Accounts; Account 2 - A/W - 40M 81/80/81 - 86 Woodcutting - Client of Kourend - 100% Hosidius Favour 1. Pictures of the account stats - http://prntscr.com/k617ft 2. Pictures of the account banns - http://prntscr.com/k616ll 3. membership left (if there is any) - expires 27th of July 4. Original/previous owners AND Original Email Address - Yes
    1 point
  11. You can add my Discord at HeyImLit#3244. I no longer hold the Scripter rank due to University Commitments, but I have done previously.
    1 point
  12. @siilentalk if he's available
    1 point
  13. i didnt know you had to have no planks and have him already set up to withdraw 24 for the mahog table. working good, now at 81, going for 83+ wish me luck risking my life here
    1 point
  14. Hello people, So after buying 2 accounts that got recovered. I’m willing to buy an account one last time. I prefer a pure/pk account. Im not buying any accounts if not trusted so don’t even post here. Post you’re discord below and I’ll add you.
    1 point
  15. @Juggles Talk to him, he does private scripts
    1 point
  16. Plank make! I guess I did word incorrectly. I am mostly looking for what I can improve on rather than why I got banned. Sorry for that. I know I would eventually get banned. I am just hoping to bot again at some point and do it better.
    1 point
  17. Wrong section. If u want to open a service thread make 1 here: https://osbot.org/forum/forum/31-services/
    1 point
  18. I'm Done pointing fingers at Panda, its over and done with it happened and with his positive feedback I want to apologize and take back my statements I cant accuse someone if I don't have enough proof I'm sorry everyone. I raged and was upset ive never been hacked/keylogged/etc. I'm sorry Panda and I'm Sorry Debuffed plz remove my posts.
    1 point
  19. http://osrsbanrates.com/
    1 point
  20. He has been given 12 hours to work things out.
    1 point
  21. as a person who lost already 2 accounts and willing to spend 100-200$ again... You got the balls man ?
    1 point
  22. Did some service for me. awesome guy!
    1 point
  23. Knew the AI and machine learning memes were on the way.
    1 point
  24. Here's how you go about doing it: If you're confused about how it looks, search up anonymous classes.
    1 point
  25. https://gyazo.com/e5303c4b4da4f571b2e79c2503c596b9 ya'll are fuckin slackin man get to sellin me my shrimp
    1 point
  26. Sure, you have one now.
    1 point
  27. Thanks dude for the help, ill implement this.
    1 point
  28. 1 point
  29. who the fuck gold farms shrimp lmao
    1 point
  30. did 3 quests for me on a high level main A++
    1 point
  31. will try this tomorrow, keep working on scripting G ?
    1 point
  32. Could I get a trial for this please?
    1 point
  33. Oh my bad, I could have sworn it was cheaper than that. Relax no need for name-calling, plus as far as I'm concerned everyone on this site is autistic to some extent ;).
    1 point
  34. Got my pure questing service done very quickly! (Mithril gloves and avas accumulator + skills leveled from level 1 in order to meet the requirements) Very good pricing as well! This guy is definitely the shit. Thanks again.
    1 point
  35. Edit: Fixed my issue by using custom setting.
    1 point
  36. delete this please - all sorted
    1 point
  37. Vouch, did some questing for me easy, thank you!!
    1 point
  38. Hello I'm new to osbot. I wrote a tutorial island script following this https://github.com/Explv/Tutorial-Island/tree/master/src as a rough example to try and learn. I'm looking for advice/help/trips on what I can improve upon since I want to get script writer. TutorialIsland.java import org.osbot.rs07.api.map.Area; import org.osbot.rs07.api.map.Position; import org.osbot.rs07.api.model.Entity; import org.osbot.rs07.api.model.NPC; import org.osbot.rs07.api.model.RS2Object; import org.osbot.rs07.api.ui.EquipmentSlot; import org.osbot.rs07.api.ui.RS2Widget; import org.osbot.rs07.api.ui.Spells; import org.osbot.rs07.api.ui.Tab; import org.osbot.rs07.event.InteractionEvent; import org.osbot.rs07.event.WalkingEvent; import org.osbot.rs07.script.Script; import org.osbot.rs07.script.ScriptManifest; import java.awt.*; import java.util.Arrays; import java.util.List; import java.util.Random; @ScriptManifest(name = "TutorialIsland", version = 1.0, author = "lebotman", logo = "", info = "Does tutorial island.") public class TutorialIsland extends Script{ private final Position COOK_EXIT_DOOR = new Position(3071,3090,0); private final Position SMITH_EXIT_DOOR = new Position(3096, 9503, 0); private final Position RAT_RANGE_SPOT = new Position(3111,9518,0); private final Position FINANCIAL_ADVISOR_ENTRANCE_DOOR = new Position(3125, 3124, 0); private final Position FINANCIAL_ADVISOR_EXIT_DOOR = new Position(3130, 3124, 0); private final Position CHURCH_EXIT_DOOR = new Position(3122, 3101, 0); private final Area COOK_BUILDING = new Area(3073,3083,3078,3086); private final Area QUEST_BUILDING = new Area(3083,3119,3089,3125); private final Area SMITH_AREA = new Area(3076,9497,3082,9504); private final Area LADDER_AREA = new Area(3108,9523,3114,9529); private final Area INSIDE_RAT_CAGE_AREA = new Area(3107,9517,3110,9520); private final Area OUTSIDE_RAT_CAGE_AREA = new Area(3111,9516,3113,9521); private final Area BANK_AREA = new Area(new int[][]{{3125, 3121}, {3126, 3121}, {3126, 3119}, {3118, 3119}, {3118, 3121}, {3119, 3121}, {3119, 3123}, {3115, 3123}, {3115, 3128}, {3118, 3128}, {3118, 3126}, {3122, 3126}, {3122, 3130}, {3126, 3130}, {3126, 3128}, {3128, 3128}, {3128, 3126}, {3130, 3126}, {3130, 3123}, {3125, 3123}, {3125, 3121}}); private final Area CHURCH_AREA = new Area(3120, 3103, 3128, 3110); private final Area WIZARD_BUILDING = new Area(new int[][]{{3140, 3085}, {3143, 3088}, {3140, 3083}, {3141, 3084}, {3140, 3089}, {3143, 3089}, {3137, 3091}, {3141, 3091}, {3138, 3090}, {3142, 3090}, {3139, 3089}, {3140, 3089}, {3141, 3084}, {3143, 3084}, {3141, 3083}, {3142, 3083}, {3138, 3082}, {3141, 3082}, {3138, 3083}, {3140, 3083}, {3139, 3084}, {3141, 3084}}); private final Area CHICKEN_AREA = new Area(3139, 3091, 3140, 3090); private final List<Position> PATH_TO_GATE = Arrays.asList(new Position(3098,3092,0), new Position(3092,3091,0)); private final List<Position> PATH_TO_COOK_BUILDING = Arrays.asList(new Position(3087,3091,0), new Position(3083,3086,0), new Position(3080,3083,0)); private final List<Position> PATH_TO_QUEST_BUILDING = Arrays.asList(new Position(3071, 3090, 0), new Position(3071, 3094, 0), new Position(3071, 3099, 0), new Position(3072, 3103, 0), new Position(3074, 3108, 0), new Position(3076, 3111, 0), new Position(3077, 3115, 0), new Position(3076, 3118, 0), new Position(3076, 3122, 0), new Position(3079, 3125, 0), new Position(3083, 3127, 0), new Position(3086, 3126, 0)); private final List<Position> PATH_TO_SMITH_AREA = Arrays.asList(new Position(3080, 9518, 0), new Position(3080, 9511, 0), new Position(3080, 9505, 0)); private final List<Position> PATH_TO_CAVES_GATE = Arrays.asList(new Position(3086, 9505, 0), new Position(3091, 9503, 0)); private final List<Position> PATH_TO_BANK = Arrays.asList(new Position(3111, 3123, 0), new Position(3114, 3119, 0), new Position(3118, 3116, 0), new Position(3121, 3118, 0)); private final List<Position> PATH_TO_CHURCH = Arrays.asList(new Position(3131, 3124, 0), new Position(3134, 3121, 0), new Position(3134, 3117, 0), new Position(3132, 3114, 0), new Position(3130, 3111, 0), new Position(3130, 3108, 0), new Position(3129, 3106, 0), new Position(3124,3106,0)); private final List<Position> PATH_TO_WIZARD_BUILDING = Arrays.asList(new Position(3122, 3101, 0), new Position(3125, 3097, 0), new Position(3127, 3093, 0), new Position(3129, 3088, 0), new Position(3135, 3087, 0), new Position(3141, 3086, 0)); @Override public int onLoop() throws InterruptedException { RS2Widget continueWidget = getWidgets().singleFilter(getWidgets().getAll(),widget->widget.isVisible() && (widget.getMessage().contains("Click here to continue") || widget.getMessage().contains("Click to continue"))); if(continueWidget != null){ log("pending continue"); continueWidget.interact(); Sleep.sleepUntil(()->!continueWidget.isVisible(),1000,500); return 0; } log(getConfigs().get(281)); switch(getConfigs().get(281)){ case 0: //character creation final RS2Widget baseScreenWidget = getWidgets().getWidgetContainingText("Welcome to Runescape"); if(baseScreenWidget != null){ log("create random character"); if(new Random().nextBoolean()) { //new Random().nextBoolean() getWidgets().getWidgetContainingText("Female").interact(); sleep(500); } final RS2Widget[] designButtons = getWidgets().getWidgets(baseScreenWidget.getRootId()); for(final RS2Widget childWidget : designButtons){ if(childWidget != null && (childWidget.getToolTip().contains("Change") || childWidget.getToolTip().contains("Recolour"))){ for(int i = 0; i < random(4); i++){ childWidget.interact(); sleep(500); } } } if(getWidgets().getWidgetContainingText("Accept").interact()){ sleep(1000); } }else if(getDialogues().isPendingOption()){ log("select second option"); getDialogues().selectOption(2); sleep(200); }else{ log("talk to guide"); talkToInstructor("RuneScape Guide"); sleep(200); } break; case 3: //open settings tab log("open settings tab"); getTabs().open(Tab.SETTINGS); sleep(200); break; case 7: //talk to guide log("talk to guide"); talkToInstructor("RuneScape Guide"); sleep(200); break; case 10: //disable audio log("disable audio"); if(getConfigs().get(168) != 4 || getConfigs().get(169) != 4 || getConfigs().get(872) != 4){ final RS2Widget soundSettingsWidget = getWidgets().get(261,1,2); //action: Audio final RS2Widget musicVolumeWidget = getWidgets().get(261,24); //action: Adjust Music Volume final RS2Widget soundEffectVolumeWidget = getWidgets().get(261,30); //action: Adjust Sound Effect Volume final RS2Widget areaSoundEffectVolumeWidget = getWidgets().get(261,36); //action: Adjust Area Sound Effect Volume if(getTabs().open(Tab.SETTINGS)){ log("settings tab open"); if(soundSettingsWidget != null && soundSettingsWidget.isVisible() && musicVolumeWidget != null && !musicVolumeWidget.isVisible()){ log("Click Audio"); soundSettingsWidget.interact(); }else if(getConfigs().get(168) != 4 && musicVolumeWidget != null){ log("Click music volume"); musicVolumeWidget.interact(); }else if(getConfigs().get(169) != 4 && soundEffectVolumeWidget != null){ log("Click sound effect"); soundEffectVolumeWidget.interact(); }else if(getConfigs().get(872) != 4 && areaSoundEffectVolumeWidget != null){ log("click area sound effect"); areaSoundEffectVolumeWidget.interact(); } sleep(200); } }else if(!getSettings().areRoofsEnabled()){ log("toggle roofs"); final RS2Widget advancedOptionsWidget = getWidgets().getWidgetContainingText("Advanced Options"); final RS2Widget displaySettingsWidget = getWidgets().get(261,1,0); //action: Display final RS2Widget toggleRoofHiddenWidget = getWidgets().get(60,14); //action: Roof-removal if(getTabs().open(Tab.SETTINGS)){ log("settings tab open"); if(displaySettingsWidget != null && displaySettingsWidget.isVisible() && advancedOptionsWidget == null){ log("open display settings"); displaySettingsWidget.interact(); }else if(advancedOptionsWidget != null && advancedOptionsWidget.isVisible() && toggleRoofHiddenWidget == null){ log("click advanced options"); advancedOptionsWidget.interact(); }else if(toggleRoofHiddenWidget != null && toggleRoofHiddenWidget.isVisible()){ log("toggle roofs"); toggleRoofHiddenWidget.interact(); } sleep(200); } }else if(getObjects().closest("Door").interact("Open")){ log("interacting with door"); sleep(200); } break; case 20: //talk to survival expert log("talk to guide"); talkToInstructor("Survival Expert"); break; case 30: //open inventory log("open inventory"); getTabs().open(Tab.INVENTORY); break; case 40: //chop tree log("chop tree"); chopClosestTree(); sleep(200); break; case 50: //make fire log("make fire"); lightFire(); sleep(200); break; case 60: getTabs().open(Tab.SKILLS); break; case 70: log("talk to guide"); talkToInstructor("Survival Expert"); break; case 80: case 90: case 100: case 110: log("fish"); if(getTabs().open(Tab.INVENTORY)){ if((getInventory().getAmount("Raw shrimps")+getInventory().getAmount("Burnt shrimp")) < 2){ fish(); }else if(getObjects().closest("Fire") == null){ if(!getInventory().contains("Logs")){ chopClosestTree(); }else{ lightFire(); } }else{ cookWithFire(); } } sleep(200); break; case 120: log("open gate"); RS2Object gate = getObjects().closest("Gate"); if(gate != null){ gate.interact("Open"); }else{ getWalking().walkPath(PATH_TO_GATE); } sleep(200); break; case 130: log("enter cooking building"); if(getWalking().walkPath(PATH_TO_COOK_BUILDING)){ getDoorHandler().handleNextObstacle(COOK_BUILDING); } break; case 140: log("talk to guide"); talkToInstructor("Master Chef"); break; case 150: log("make dough"); makeDough(); sleep(500); break; case 160: log("bake dough"); bakeDoughOnRange(); sleep(500); break; case 170: log("click music tab"); getTabs().open(Tab.MUSIC); break; case 180: log("leave cooking area"); getDoorHandler().handleNextObstacle(COOK_EXIT_DOOR); break; case 183: case 187: log("open emotes tab"); if(getTabs().open(Tab.EMOTES)){ log("click random emote"); RS2Widget emoteWidget = getWidgets().get(216,1,new Random().nextInt(20)); if(emoteWidget != null){ emoteWidget.interact(); sleep(200); } } break; case 190: log("open settings tab"); getTabs().open(Tab.SETTINGS); break; case 200: log("set run on"); if(!getSettings().isRunning()){ getSettings().setRunning(true); sleep(200); } break; case 210: log("walk to quest building"); if(getWalking().walkPath(PATH_TO_QUEST_BUILDING)){ getDoorHandler().handleNextObstacle(QUEST_BUILDING); } sleep(200); break; case 220: log("talk to guide"); talkToInstructor("Quest Guide"); break; case 230: log("open quest tab"); getTabs().open(Tab.QUEST); break; case 240: log("talk to guide"); talkToInstructor("Quest Guide"); break; case 250: log("climb down ladder"); RS2Object ladder = getObjects().closest("Ladder"); if(ladder != null && getCamera().toEntity(ladder)){ ladder.interact(); } sleep(200); break; case 260: log("talk to guide"); if(getWalking().walkPath(PATH_TO_SMITH_AREA)){ talkToInstructor("Mining Instructor"); } break; case 270: log("prospect tin"); prospect(10080); sleep(1000); break; case 280: log("prospect copper"); prospect(10079); sleep(1000); break; case 290: log("talk to guide"); talkToInstructor("Mining Instructor"); break; case 300: log("mine tin rock"); mine(10080); sleep(200); break; case 310: log("mine copper rock"); mine(10079); sleep(200); break; case 320: log("smelt at furnace"); if(getTabs().open(Tab.INVENTORY)){ smelt(); } break; case 330: log("talk to instructor"); talkToInstructor("Mining Instructor"); break; case 340: case 350: log("smith bronze dagger"); if(getTabs().open(Tab.INVENTORY)){ smith(); } break; case 360: log("walk through gate"); if(getWalking().walkPath(PATH_TO_CAVES_GATE)){ getDoorHandler().handleNextObstacle(SMITH_EXIT_DOOR); } break; case 370: log("talk to instructor"); talkToInstructor("Combat Instructor"); break; case 390: log("open equipment tab"); getTabs().open(Tab.EQUIPMENT); break; case 400: log("open equipment stats"); RS2Widget equipmentStats = getWidgets().singleFilter(387,new WidgetActionFilter("View equipment stats")); if(equipmentStats != null && equipmentStats.isVisible()){ equipmentStats.interact(); } sleep(200); break; case 405: log("wield bronze dagger"); getInventory().getItem("Bronze dagger").interact(); sleep(200); break; case 410: talkToInstructor("Combat Instructor"); break; case 420: if(!getEquipment().isWearingItem(EquipmentSlot.WEAPON,"Bronze sword")){ getInventory().getItem("Bronze sword").interact(); }else if(!getEquipment().isWearingItem(EquipmentSlot.SHIELD,"Wooden shield")){ getInventory().getItem("Wooden shield").interact(); } sleep(200); break; case 430: getTabs().open(Tab.ATTACK); break; case 440: case 450: case 460: if(!inRatCage()){ enterRatCage(); }else if(!isAttackingRat()){ attackRat(); } sleep(200); break; case 470: if(inRatCage()){ leaveRatCage(); }else{ talkToInstructor("Combat Instructor"); } sleep(200); break; case 480: case 490: if (!getEquipment().isWearingItem(EquipmentSlot.WEAPON, "Shortbow")) { getInventory().getItem("Shortbow").interact(); } else if (!getEquipment().isWearingItem(EquipmentSlot.ARROWS, "Bronze arrow")) { getInventory().getItem("Bronze arrow").interact(); } else if (!isAttackingRat()) { if(!RAT_RANGE_SPOT.equals(myPosition())){ WalkingEvent walkingEvent = new WalkingEvent(RAT_RANGE_SPOT); walkingEvent.setMinDistanceThreshold(0); execute(walkingEvent); }else{ attackRat(); } } sleep(200); break; case 500: if(!LADDER_AREA.contains(myPosition())){ getWalking().walk(LADDER_AREA); }else if(!myPlayer().isAnimating()){ getObjects().closest("Ladder").interact("Climb-up"); } sleep(200); break; case 510: if(!BANK_AREA.contains(myPosition())){ if(getWalking().walkPath(PATH_TO_BANK)){ getDoorHandler().handleNextObstacle(BANK_AREA); } }else if(getDialogues().isPendingOption()){ getDialogues().selectOption("Yes."); }else if(getObjects().closest("Bank booth").interact("Use")){ sleep(1000); } break; case 520: if(getBank().isOpen()){ getBank().close(); }else if(getObjects().closest("Poll booth").interact("Use")){ sleep(1000); } break; case 525: if (getWidgets().closeOpenInterface() && openDoorAtPosition(FINANCIAL_ADVISOR_ENTRANCE_DOOR)) { sleep(1000); } break; case 530: talkToInstructor("Financial Advisor"); break; case 540: if(openDoorAtPosition(FINANCIAL_ADVISOR_EXIT_DOOR)){ sleep(1000); } break; case 550: NPC instructor = getNpcs().closest("Brother Brace"); if(instructor == null){ getWalking().walkPath(PATH_TO_CHURCH); }else if(!getMap().canReach(instructor)){ getDoorHandler().handleNextObstacle(CHURCH_AREA); }else if(!CHURCH_AREA.contains(myPosition())){ getWalking().walkPath(PATH_TO_CHURCH); }else{ talkToInstructor("Brother Brace"); } /*if(!CHURCH_AREA.contains(myPosition()) && getWalking().walkPath(PATH_TO_CHURCH)){ getDoorHandler().handleNextObstacle(CHURCH_AREA); }else{ talkToInstructor("Brother Brace"); }*/ break; case 560: getTabs().open(Tab.PRAYER); break; case 570: talkToInstructor("Brother Brace"); break; case 580: getTabs().open(Tab.FRIENDS); break; case 590: getTabs().open(Tab.IGNORES); break; case 600: talkToInstructor("Brother Brace"); break; case 610: getDoorHandler().handleNextObstacle(CHURCH_EXIT_DOOR); break; case 620: if(!WIZARD_BUILDING.contains(myPosition())){ getWalking().walkPath(PATH_TO_WIZARD_BUILDING); }else{ talkToInstructor("Magic Instructor"); } break; case 630: getTabs().open(Tab.MAGIC); break; case 640: talkToInstructor("Magic Instructor"); break; case 650: if(!CHICKEN_AREA.contains(myPosition())){ WalkingEvent walkingEvent = new WalkingEvent(CHICKEN_AREA); walkingEvent.setMinDistanceThreshold(0); execute(walkingEvent); }else{ attackChicken(); } break; case 670: if (getDialogues().isPendingOption()) { getDialogues().selectOption("Yes.", "I'm fine, thanks.","No, I'm not planning to do that."); sleep(200); } else { talkToInstructor("Magic Instructor"); sleep(200); } break; } if(getConfigs().get(281) > 670){ getBot().getScriptExecutor().stop(); } return 0; } @Override public void onPaint(Graphics2D g) { } public boolean talkToInstructor(String name){ return execute(new InteractionEvent(getNpcs().closest(name),"Talk-to")).hasFinished(); } public boolean chopClosestTree(){ Entity tree = getObjects().closest("Tree"); return tree != null && !myPlayer().isAnimating() && tree.interact("Chop down"); } public boolean lightFire(){ Object meme = getObjects().singleFilter(getObjects().getAll(),obj->obj.getPosition().equals(myPosition()) && obj.getName().equals("Fire")); if(meme != null){ log("move away from fire"); return execute(new WalkingEvent(myPlayer().getArea(4).getRandomPosition())).hasFinished(); }else{ log("make fire"); if(getInventory().getSelectedItemName() == null && getInventory().contains("Tinderbox")){ return getInventory().getItem("Tinderbox").interact(); }else if(!getInventory().getSelectedItemName().equals("Tinderbox")){ return getInventory().deselectItem(); }else if(getInventory().getSelectedItemName().equals("Tinderbox") && getInventory().contains("Logs") && !myPlayer().isAnimating()){ return getInventory().getItem("Logs").interact(); } } return myPlayer().isAnimating(); } public boolean fish(){ NPC fishingSpot = getNpcs().closest("Fishing spot"); return fishingSpot != null && !myPlayer().isAnimating() && fishingSpot.interact("Net"); } public boolean cookWithFire(){ if(getInventory().getSelectedItemName() == null || !getInventory().getSelectedItemName().equals("Raw shrimps")){ return getInventory().getItem("Raw shrimps").interact(); }else{ RS2Object fire = getObjects().closest("fire"); return fire != null && fire.interact(); } } public boolean makeDough(){ if(getInventory().getSelectedItemName() == null && getInventory().contains("Pot of flour")){ return getInventory().getItem("Pot of flour").interact(); }else if(!getInventory().getSelectedItemName().equals("Pot of flour")){ return getInventory().deselectItem(); }else if(getInventory().contains("Bucket of water")){ return getInventory().getItem("Bucket of water").interact(); } return false; } public boolean bakeDoughOnRange(){ if(getInventory().getSelectedItemName() == null && getInventory().contains("Bread dough")){ return getInventory().getItem("Bread dough").interact(); }else if(!getInventory().getSelectedItemName().equals("Bread dough")){ return getInventory().deselectItem(); }else if(getObjects().closest("Range") != null){ return getObjects().closest("Range").interact(); } return true; } public boolean prospect(final int id){ RS2Object rock = getObjects().closest(id); return rock != null && getMap().canReach(rock) && rock.interact("Prospect"); } public boolean mine(final int id){ RS2Object rock = getObjects().closest(id); return rock != null && getMap().canReach(rock) && !myPlayer().isAnimating() && rock.interact("Mine"); } public boolean smelt(){ if(getInventory().getSelectedItemName() == null){ if(getInventory().contains("Tin ore")){ return getInventory().getItem("Tin ore").interact(); } }else if(getInventory().getSelectedItemName() != null && !getInventory().getSelectedItemName().equals("Tin ore")){ return getInventory().deselectItem(); }else if(getObjects().closest("Furnace") != null && !myPlayer().isAnimating()){ return getObjects().closest("Furnace").interact("Use"); } return false; } public boolean smith(){ RS2Widget daggerWidget = getWidgets().getWidgetContainingText(312,"Dagger"); if(daggerWidget != null && daggerWidget.isVisible() && daggerWidget.interact()){ return Sleep.sleepUntil(()->getInventory().contains("Bronze dagger"),6000); }else{ if(!SMITH_AREA.contains(myPosition())){ return getWalking().walk(SMITH_AREA); }else if(!"Bronze bar".equals(getInventory().getSelectedItemName())){ return getInventory().getItem("Bronze bar").interact(); }else if(getObjects().closest("Anvil").interact()){ return true; } } return false; } public boolean inRatCage(){ return !getMap().canReach(getNpcs().closest("Combat Instructor")); } public boolean enterRatCage(){ if(!OUTSIDE_RAT_CAGE_AREA.contains(myPosition())){ return getWalking().walk(OUTSIDE_RAT_CAGE_AREA); }else{ return getObjects().closest("Gate").interact(); } } public boolean leaveRatCage(){ if(!INSIDE_RAT_CAGE_AREA.contains(myPosition())){ return getWalking().walk(INSIDE_RAT_CAGE_AREA); }else{ return getObjects().closest("Gate").interact(); } } public boolean isAttackingRat(){ return myPlayer().getInteracting() != null && myPlayer().getInteracting().getName().equals("Giant rat"); } public boolean attackRat(){ NPC giantRat = getNpcs().closest(npc -> npc.getName().equals("Giant rat") && npc.isAttackable()); return giantRat != null && giantRat.interact(); } public boolean openDoorAtPosition(final Position position) { RS2Object door = getObjects().closest(obj -> obj.getName().equals("Door") && obj.getPosition().equals(position)); return door != null && door.interact("Open"); } public boolean attackChicken(){ NPC chicken = getNpcs().closest("Chicken"); if(chicken != null && !myPlayer().isAnimating()){ return getMagic().castSpellOnEntity(Spells.NormalSpells.WIND_STRIKE,chicken); } return false; } } Sleep.java import org.osbot.rs07.utility.ConditionalSleep; import java.util.function.BooleanSupplier; public final class Sleep extends ConditionalSleep { private final BooleanSupplier condition; public Sleep(final BooleanSupplier condition, final int timeout) { super(timeout); this.condition = condition; } public Sleep(final BooleanSupplier condition, final int timeout, final int interval) { super(timeout, interval); this.condition = condition; } @Override public final boolean condition() throws InterruptedException { return condition.getAsBoolean(); } public static boolean sleepUntil(final BooleanSupplier condition, final int timeout) { return new Sleep(condition, timeout).sleep(); } public static boolean sleepUntil(final BooleanSupplier condition, final int timeout, final int interval) { return new Sleep(condition, timeout, interval).sleep(); } } WidgetActionFilter.java import org.osbot.rs07.api.filter.Filter; import org.osbot.rs07.api.ui.RS2Widget; public class WidgetActionFilter implements Filter<RS2Widget> { private final String[] actions; public WidgetActionFilter(final String... actions){ this.actions = actions; } @Override public boolean match(final RS2Widget rs2Widget) { if(rs2Widget == null || !rs2Widget.isVisible() || rs2Widget.getInteractActions() == null){ return false; } for(final String widgetAction : rs2Widget.getInteractActions()){ for(final String matchAction : actions){ if(widgetAction.equals(matchAction)){ return true; } } } return false; } } Thanks in advance.
    1 point
  39. GP/XP? I don't want to do the math but man, if I have to I guess.
    0 points
  40. 0 points
Γ—
Γ—
  • Create New...