Leaderboard
Popular Content
Showing content with the highest reputation on 06/23/17 in Posts
-
Big thanks!
7 pointsToday, for the first time, I was able to watch my farm start itself up mule itself and shut it self down to get ready for tomorrow. 100% automated. I know a lot of people do this, but I took this on as a goal and today I can say I am successful. I own the hardware, I own the proxies, the account creation is automated and I built it, muleing is automated and I wrote all the scripts I am using. I saw 9/10 bots collect almost 10mil gold today and the hardware I have can handle 5 times that so I will be scaling up slowly. I couldn't have done it without this community. You guys and gals have helped me a TON and I want to know I appreciate all of you. To anyone reading this that thinks they can't farm: If you are really committed you can. At the beginning I didn't know any java (still dont know much) and while my career in IT gave me some advantages, it was still a labor of love. If you really want it to happen it will. I know many of you have bigger, better, more efficient farms but I am happy with mine. Thanks again OSbot community!7 points
-
๐ Perfect Czar Free Trials & Demos ๐ MOST POPULAR ๐ HIGHEST QUALITY ๐ MOST TOTAL USERS ๐ LOWEST BAN-RATES ๐ 24/7 SUPPORT ๐ SINCE 2015 ๐ MANY SKILLS ๐ MOST VIEWS ๐ MOST REPLIES ๐
๐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 thread4 points
-
questing services
3 points
-
Keep getting banned.
3 pointsThe road ahead of you is long. They have been detecting and banning those like you for YEARS and you have been learning how to avoid it for a week. Expect to get banned. A lot. And here is the most important thing I have learned on my journey: What you learn on your own is MUCH more valuable than advice you will receive. Most mean well, but much of the help that is offered is full of confirmation bias, old wives tales, and just flat out incorrect information. That's not to say you can't trust any help offered, they usually mean well, but what you learn the hard way is far more useful. good luck3 points
-
Dispute against Santonio
3 pointsI think scamquitting on OSBot is all the rage with this friend group. At least you morons stay in your own groups, wouldn't want your illness spreading.3 points
-
Perfect Agility AIO
2 pointsBrought to you by the #1 most sold script series on the market. Come and see why everyone's choosing Czar Scripts! This is the most advanced Agility bot you will find anywhere. BUY NOW $9.99 NEW! Added Both Wyrm Courses! SCRIPT INSTRUCTIONS Optimal Setup for the bot: Please set the mouse zoom to far away (to the left, like below) so that more obstacles can be seen in the view, and so the script can be more stable and reliable Also, make sure to have roofs toggled off (either go to settings tab or type ::toggleroof) for optimal results2 points
-
Perfect Fighter AIO
2 pointsNEW! 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.2 points
-
Excellent Dragons
2 pointsScript Version: 40.0 | Last Updated: 10/11/2023 [MM/DD/YYYY] LEADERBOARDS: https://cnar.dev/projects/edragons/leaderboard.php Script Progress Pictures Script Development Updates Script Manual GUI Settings (Disable Ad-block to see Images) Gui Saving / Loading: When selecting 'Save settings' a pop up directory will show up. Set a file name under "File name:" then click 'ok' or 'save'. It will save as a .txt file. When selecting 'Load settings' a pop up directory will show up. Simply find your saved .txt file and click it. Once selected, select 'ok' or 'load'. Safe-Spotting Mode: Please start the script at your preferred safe spot when selecting this option and pressing start OR load your saved settings.txt file to auto fill your safe spot! Looting Bag Mode: If toggled, it will use random behavior when adding bones or hides to the Looting Bag! If you happen to die the script will have added it to the lootlist and retrieve it once it spawns on dragon death and continue using it!. Loot distance: Default = 10 Tiles away from your player. Set your custom distance if you prefer. Loot range ammo: Loots the ammo type you have equipped if you are ranging! Default = Stack of 5 Bolts on floor Special Attack: Uses special attack during combat [Main weapon support only!] Deathwalk Mode: Handles death and regears with the equipment set from on start of the script. Current Modes Supported [BETA]: Under production. No guarantee that it is 100%. Green Dragons: West wilderness East wilderness Graveyard wilderness Lava maze wilderness Myth guild [BETA] Blue Dragons: Taverly Watchtower Ogre enclave Heroes' guild Myth guild [BETA] Black Dragons: Taverly Lost city chicken shrine Myth guild [BETA] Metal Dragons: Brimhaven Brutal Dragons: Black dragons in zeah catacombs [BETA] Blue dragons in zeah catacombs [BETA] Red dragons in zeah catacombs [BETA] Mode Help Blue Dragons Supported safespots for taverly mode only. *Other modes can use any spot* Near the agility pipe | Less traffic but with lower profit/hr Inside the Expanded blue dragon room Items | Requirements Anti-dragon shield Ranged/Melee/Magic support! Food Prayer potions *Blowpipe mode taverly mode* Summer Pie *Taverly mode* Falador teleports *Taverly mode* Dusty key *Taverly mode* Dueling rings *Watchtower mode or Heroes guild mode* Games necklaces *Heroes guild mode* Black Dragons Supported safespots Anywhere in the dragon area. Items | Requirements Anti-dragon shield Ranged/Magic support only! Food Anti-poisons *If taverly mode* Falador teleports *If Taverly mode* Dusty key *If Taverly mode* Raw chicken *Lost city mode* Green Dragons Ranged/Melee/Magic support! Supported safespots Graveyard: Anywhere in the myth guild or lava maze dragon area. Items | Requirements East Dragons: Dueling ring *Not optional* Games necklace *Optional* Glory *Optional* Metal Dragons Items | Requirements Select Bury bones option + Dragon bones in loot table to bury bones! Banking is not supported. Please start at the dragon room. It will randomly choose a metal dragon. Range / Magic only support Brutal Dragons Items | Requirements Ranging potions Extended antifire potions Prayer potions Food prayer > 43 rope tunnel route unlocked Start at blast mine bank At this time it will auto grab my set amount of prayer pots. Full GUI customization will come soon. CLI Information Script ID: 898 Create your own file & save under c/users/osbot/data as filename.txt Mode names "Blue dragons(Taverly)", "Blue dragons(Watchtower)", "Blue dragons(Heroes guild)", "Blue dragons(Myth guild)", "Black dragons(Taverly)", "Black dragons(Lost City)", "Black dragons(Myth guild)", "Green dragons(West)", "Green dragons(Graveyard)", "Green dragons(Lava maze)", "Green dragons(Myth guild)", "Metal dragons(Brimhaven)", "[BETA]Brutal dragons(Black)" Food names "Trout", "Salmon", "Tuna", "Potato with cheese", "Lobster", "Swordfish", "Jug of wine", "Monkfish", "Shark", "Manta ray", "Tuna potato", File creation template *See gui for options* *Create your own for validation*: #Dragon GUI Settings #Fri Mar 30 20:14:43 EDT 2018 checkSummerPieActive=false checkEatToFull=true textFoodAmount=1 checkBurningAndGlory=false checkRanarrWeed=true radioWorldHopper=false radioStrengthPotionRegular=false checkRegularWalker=false radioAttackPotionSuper=false radioSpecialAttack=false checkAdamantHelm=true checkWalkToBank=false checkGloryAndGames=false checkLootingBag=false radioMagicPotion=false radioSafeSpot=true radioRangePotion=true radioStrengthPotionSuper=false textWorldHopCount=7 checkRespawnTeleport=false comboDragonsMode=Blue dragons(Watchtower) radioCombatPotion=false checkAutoEatAt=false checkNatureRune=true textEatAt=60 checkAdamaniteOre=true checkBuryBones=false checkGamesAndDueling=false radioAntipoisonPotion=false checkRubyDiamondCombo=false checkSafetyTeleport=false checkRuneDagger=true checkLootAmmo=true radioAttackPotionRegular=false checkBlowpipeActive=false radioAntifirePotion=false checkDragonhide=true checkDragonBones=true checkGloryOnly=false textLootDistance=10 safeSpot=2443,3083,0 checkAntiPK=false checkClueScroll=false checkBurningAndDueling=false comboFoodType=Shark checkDeathwalking=false Bug Report Template Status in the paint(Screenshot): Client Version: "Osbot x.x.x" Client Type(Mirror Mode OR Stealth Injection): Inventory layout: Equipment layout: GUI settings (Screenshot(s)): What is the error that is occurring? How can I replicate this error? Logger output (Screenshot): GRAB YOUR OWN DYNAMIC SIGNATURE HERE https://cnar.dev/projects/edragons/users/All_Users.png //This gives you the all users image (600x200) I encourage you to display your signatures and linked to the thread! Would appreciate that To get your own just do (Case sensitive) https://cnar.dev/projects/edragons/users/YourNameHere.png if your osbot name has spaces (ex. Cool doot 33) https://cnar.dev/projects/edragons/users/Cool doot 33.png PURCHASE HERE2 points
-
Do bans come from Client or Script?
2 pointstbf that was most likely a manual ban because jagex knew he was going to make a video about it2 points
-
MrChocolate ban evading
2 pointsSince you're banned on Sythe you will stay in TWC here. Please sort out your Sythe situation first then you can go ahead and post a TWC appeal.2 points
-
Can one truly quit Osrs?
2 points
-
ใ RuneScapeServices ใโจ Hiring Workers & Managers!โจ โ๏ธ Powerlevelers โ๏ธ โ๏ธ Questers โ๏ธ ๐ฅ Account Builders ๐ฅ
Yeah I can vouch. We used to quest for clan members back at the beginning of osrs. He did an 80m order in 2 days no lifing every pure quest from a level 3.2 points
-
Keep getting banned.
2 points
-
Keep getting banned.
2 points
-
Salty
2 pointsThat's the thing about free scripts; you never hear about how useful it has been and never get a thank you. You only get replies in your inbox when something isn't working.2 points
-
Dispute against Santonio
2 points
-
Do bans come from Client or Script?
2 points
-
Old School Account Creator
2 pointsI'm gonna compile this into a jar and demonstrate the usage later today. It was intended to be source code so other scripters could use, so I didn't spend anytime on user interface. Plan on tonight creating a graphical user interface with the option to specify proxy/no proxy and CLI compatibility so it can create an account and instantly start osbot. Down the line, I'm trying to figure out a way to register actual emails and verify the accounts. You can plan for a more user orientated application of this late tonight or tomorrow.2 points
-
Khal AIO Agility
1 pointWant 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:1 point
-
Perfect Woodcutter
1 pointNEW: Released Chop & Firemake plugin Added 8 Forestry events!!!!!!!! Easy 99, Next! Map Chooser System Progress Results! Help How to use this with Bot Manager? Script ID is 631, and the parameters will be the profile you saved in the setup window, e.g. oak15.txt I want a new feature added? Make a post below and I am always listening, within reason! The bot is doing something I don't like? Make a post below and I will adjust the code to match your play style!1 point
-
Khal AIO Herblore
1 pointWant to buy with OSGP? Contact me on Discord! Detailed feature list: - Task/progressive based setup - Supports cleaning all herbs - Supports making all Unf potions - Supports almost every potion (Attack, antipoison, strength, serum 207, restore, energy, defence, agility, combat, prayer, super atk, superantipoison, fishig, super energy, super strength, weapon poison, super restore, super defence, antidote+, antifire, ranging, magic, zamorak brew, antidote++, bastion, battlemage, saradomin brew, ancient brew) - Creation of super combat potions - Upgrade potions (Stamina, Extended antifire, Extended super antifire, compost, antivenom, divine super attack, divine super strength, divine super defence, divine ran ging, divine magic, divine bastion, divine battlemage, divine super combat) - Tar combining - Item crushing (Unicorn horn, chocolate bar, kebbit teeth, birds' nest, desert goat horn, blue dragon scale, lava scale, superior dragon bones) - Amulet of chemistry support 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 598: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 manager you do not need to specify '-script 598'): -script 598:TaskList1.4515breaks (With breaks) -script 598:TaskList1.4515breaks.discord1 (With breaks & discord) -script 598:TaskList1..discord1 (NO breaks & discord)1 point
-
Molly's Orber
1 pointMolly's Orber This script is designed to make earth orbs and air orbs for over 350k gp/ph with the added benefit of getting over 30k mage exp per hour! Buy HERE Requirements: - 66 mage for air orbs, 60 for earth orbs. - 40+ hp recommended(especially at low def) Features: - Supports using mounted glory in house(requires house teleport tablets) - Supports eating any food at bank, when under a set hp - Hopping out of bot worlds - Recovers from deaths(respawn point must be lumbridge) - Emergency teleporting when under a set hp - Stamina potion usage, the bot will use one dose prior to each run - World hopping in response to being pked to prevent pkers from farming. -Ability to bring one food with you in case you drop below the emergency teleport hp, script will still tele if you drop below it and have already eaten your food. -Enabling run when near black demons to prevent some damage. -Re-equipping armor in inventory on death. Setup: Start at Edge bank, have all supplies next to each other in your bank, preferably in the front tab at the top. You must have the item "Staff of air" for air orbs or "Staff of earth" for earth orbs. Have a fair amount of cosmic runes and unpowered orbs, glories, as well as some food to eat as the bot walks past black demons and will take some damage. FOR EARTH ORBS YOU MUST HAVE ANTIDOTE++. If you are using house mounted glory option set render doors open to "On" under your house options in Runescape. CLI setup: Proggies:1 point
-
[Tutorial][Indepth] A better take on task based scripts
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.1 point
-
Save Script Runtime Data (Java Class + PHP + MySQL Included)
About: This is a Java Class + PHP & MySQL website I wrote in order to save user data to your database for tracking purposes. I'll explain the files first, then you may view them below the explanation. Also, included at the very end is an example SQL file required to complete this project. Usage (OSB Script): First, in order to call the Class, you need to use the code below. I use it in the onExit function log("Saving your runtime data."); String updateUser = SaveUserData.saveUserDataMethod(accessKey, authToken, scriptName, username, startTime, String.valueOf(xpGained), String.valueOf(levelsGained), String.valueOf(fishCaught), String.valueOf(profit)); if (updateUser.equals("success")) { log("We have successfully updated your account statistics online."); } else { log(updateUser); } SaveUserData Class Call Function: I tried converting the values of the String.valueOf variables in the class itself, or ignoring it, but it was failing to execute properly. In any case, you must send the following 4 variables at a minimum in order to know where to send the statistic data. Other than that, the calling script here checks the response of the website to let the user know, via the log, if their data has been saved or not. This is called in my onExit function. Required Data: accessKey A randomly generated and encrypted key used to validate the script (mostly used just to prevent the PHP page from being access from a browser). This is generally a key that you could use for all your scripts. This is a global variable. authToken A randomly generated and encrypted key used to validate the script (mostly used just to prevent the PHP page from being access from a browser). This is a unique authentication token for each script. This is a global variable. scriptName This is the name of your script that will be saved in the database. NOTE: I used this variable in the URL of my Java class, so if you intend of doing that as well, make sure that it is the same value for the actual URL. This is a global variable. username This is the user's account name which will be the unique identified that is used to save the data. This is set in the onStart function. Statistical Data: startTime This is used to calculate the runtime of the script. This is set in the onStart function. xpGained Can be coded in however you like, but it should be a global variable. This is updated in my onPaint function. levelsGained Can be coded in however you like, but it should be a global variable. This is updated in my onPaint function. fishCaught Can be coded in however you like, but it should be a global variable. This is updated in my onPaint function. profit Can be coded in however you like, but it should be a global variable. This is updated in the onMessage function, since this came from a fishing script. SaveUserDataMethod (Java Class): As I previously mentioned, the variable scriptName is utilized in my URL as a means of shortening the amount of things I must change between scripts (since I've only just started scripting and plan on making more). Keep that in mind if you decide to utilize it, and when you're making your file tree if you do. The website returns a JSON response in the format below. Instead of handling the data with a JSON parser, since I know the data has two defined results, I parse it as a regular string instead. I then return to the main function either a value of success or the error message. On Success: success true On Failure: success false message Message based on the event that caused the failure. index.php (PHP File): This file includes the config, database, and encryption files. I have provided these with the exception of the encryption file. You may encrypt your data however you'd like. The file returns a JSON result as described in the SaveUserDataMethod above. Please note that the database file MUST be included after the config file. See the database.php section below. File Handling: The file first checks to insure the accessKey, authToken, scriptName, username, and other required variables are available to read before continuing. After that, we set up our local variables. We then check to make sure the accessKey and authToken sent match the ones defined in the config. Again, I use my own encryption class. You may use your own class to encrypt and decrypt this data. The accessKey validation is setup like this: $encryption->decrypt256Bit($_REQUEST["accessKey"] == $encryption->decrypt256Bit($scriptAccessKey[$scriptName]) NOTE: $scriptAccessKey[$scriptName] scriptAccessKey is an array defined in the config, and its value is grabbed by using the scriptName as the key. The authToken validation is setup like this: $encryption->decrypt256Bit($_REQUEST["accessKey"] == $encryption->decrypt256Bit($scriptAccessKey[$scriptName]) NOTE: $scriptAuthToken[$scriptName] scriptAuthToken is an array defined in the config, and its value is grabbed by using the scriptName as the key. We then just check to make sure the scriptName is the correct one for the data trying to be saved. Again, this is more for preventing users from access the page outside of the client. We then initiate the database class. See below for usage. We then check to see if the user already has data saved under the specified username for the specified script. Required variables scriptName username If the query executes, then we perform another check: Is there one row or two? The query will generally always execute, unless you have a database error, but I always check to insure it executes before I continue. If there is already a user, then we update their information. If the user does not exist, then we insert their information. Both update and insert utilize the same variables. Required variables username Statistical Variables runtime xpGained levelsGained profit If the insert or update query is successful, then we update another table which is used for tracking all of the skill experience gained and levels gained. This is not required, and if you intend on not using this, you should remove the following code: $db->beginTransaction(); $db->endTransaction(); $db->cancelTransaction(); Those lines are not required in updating 1 table, however, if updating multiple tables, like I am, they should be used. Why are they used? Say you have 5 queries that need to be executed, and they're all tied to each other in terms of information. If one of the queries fails, you don't want the other 4 to execute. Well, these functions allow us to roll back the data in a previously executed query should one of the queries fail. Finally, if the second table update is complete, we change the commit variable to true. Commit variable states true We end the database transaction which completes the update. false We cancel the database transaction which un-does any queries that executed successfully. We then return any error message that indicates a failure to update the user's information. The returnArray is then displayed on the page for the SaveUserDataMethod functionto process. database.php (PHP Class File): This file is a class which I utilize in projects to make process database queries much easier. Be it noted that the config file MUST be included before this one in the main PHP handling file because this file sets global variables that are defined in the config file. I'm not going to go into too much detail with this file; you can read up about PHP and PDO methods online if you wish. However, I will make one thing clear. Variable Names: host This is defined as DB_HOST which is defined in the config file. dbhname This is defined as DB_NAME which is defined in the config file. user This is defined as DB_USERNAME which is defined in the config file. pass This is defined as DB_PASSWORD which is defined in the config file. config.php (PHP File): This file is a configuration file I utilize to set up constant and global values. Typically used for things such as the database setup, among other things. Variable Names: DB_HOST This is the hostname used to access your SQL database, typically MySQL if using a website. DB_NAME This is the database name you're trying to connect to which stores the tables for the data to be saved in. DB_USERNAME This is the username that has access rights to DB_NAME. DB_PASSWORD This is the password for DB_USERNAME on DB_NAME. availableScripts This is utilized in my online users function used in my scripts, but it can be used for other purposes as well. It declares the script names available. scriptAccessKey This is an array that holds a key value pair of the access keys authorized. Format as follows: Key The script name Value A randomly generated, encrypted, key utilized to authorize access to the PHP file (index.php in this case). This must match with the value sent from the OSB client. scriptAuthToken This is an array that holds a key value pair of the authorization tokens authorized. Format as follows: Key The script name Value A randomly generated, encrypted, key utilized to authorize access to the PHP file (index.php in this case). This must match with the value sent from the OSB client. Java Class import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; class SaveUserData { public static String saveUserDataMethod(String accessKey, String authToken, String scriptName, String username, long startTime, String xpGained, String levelsGained, String fishCaught, String profit) { String returnedValue = "Saving your data failed. Unknown reason."; try { // open a connection to the site StringBuilder sb = new StringBuilder("https://www.mmaengineer.com/app/osb/" + scriptName + "/index.php?accessKey="); sb.append(accessKey); sb.append("&authToken=" + authToken); sb.append("&scriptName=" + scriptName); sb.append("&username=" + username); sb.append("&runtime=" + (System.currentTimeMillis() - startTime)); sb.append("&xpGained=" + xpGained); sb.append("&levelsGained=" + levelsGained); sb.append("&fishCaught=" + fishCaught); sb.append("&profit=" + profit); InputStream inputStream = new URL(sb.toString()).openStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String line; String newString = null; while ((line = bufferedReader.readLine()) != null) { if (line.contains("{")) { sb = new StringBuilder(line); //Remove { and } sb.deleteCharAt(0); newString = sb.substring(0, sb.length()-1); } } newString = newString.replace("\"", ""); if (newString.equals("success:true")) { returnedValue = "success"; } else { String[] returned = newString.split("message:"); returnedValue = returned[1]; } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return returnedValue; } } index.php <?php require_once "../config.php"; require_once "../database.php"; require_once "../encryption.php"; $encryption = new encryption(); $returnArray["success"] = false; if (isset($_REQUEST["accessKey"], $_REQUEST["authToken"], $_REQUEST["scriptName"], $_REQUEST["username"], $_REQUEST["runtime"], $_REQUEST["xpGained"], $_REQUEST["levelsGained"], $_REQUEST["fishCaught"], $_REQUEST["profit"])) { $scriptName = $_REQUEST["scriptName"]; $username = $_REQUEST["username"]; $runtime = ($_REQUEST["runtime"] / 1000); $xpGained = $_REQUEST["xpGained"]; $levelsGained = $_REQUEST["levelsGained"]; $fishCaught = $_REQUEST["fishCaught"]; $profit = $_REQUEST["profit"]; if (($encryption->decrypt256Bit($_REQUEST["accessKey"]) == $encryption->decrypt256Bit($scriptAccessKey[$scriptName])) && ($encryption->decrypt256Bit($_REQUEST["authToken"]) == $encryption->decrypt256Bit($scriptAuthToken[$scriptName]))) { if ($scriptName == "engineerFishing") { $db = new database(); $commit = false; $db->query("SELECT `id` FROM `engineerFishing` WHERE `username` = :username"); $db->bind(":username", $username); if ($db->execute()) { $rows = $db->rowCount(); $db->beginTransaction(); if ($rows == 1) { $db->query("UPDATE `engineerFishing` SET `runtime` = runtime+:runtime, `xp_gained` = xp_gained+:xp_gained, `levels_gained` = levels_gained+:levels_gained, `fish_caught` = fish_caught+:fish_caught, `profit` = profit+:profit WHERE `username` = :username"); } else { $db->query("INSERT INTO `engineerFishing` (`id`, `username`, `runtime`, `xp_gained`, `levels_gained`, `fish_caught`, `profit`) VALUES(0, :username, :runtime, :xp_gained, :levels_gained, :fish_caught, :profit)"); } $db->bind(":username", $username); $db->bind(":runtime", $runtime); $db->bind(":xp_gained", $xpGained); $db->bind(":levels_gained", $levelsGained); $db->bind(":fish_caught", $fishCaught); $db->bind(":profit", $profit); if ($db->execute()) { $db->query("UPDATE `skills` SET `fishing_xp` = fishing_xp+:fishing_xp, `fishing_levels` = fishing_levels+:fishing_levels WHERE `id` = 1"); $db->bind(":fishing_xp", $xpGained); $db->bind(":fishing_levels", $levelsGained); if ($db->execute()) { $commit = true; } } if ($commit) { $returnArray["success"] = true; $db->endTransaction(); } else { $returnArray["message"] = "Failed to save your data for the Engineer Fishing script."; $db->cancelTransaction(); } } else { $returnArray["message"] = "Failed to access our database to save your data for the Engineer Fishing script."; } } else { $returnArray["message"] = "The script you are trying to save your data to does not match our database."; } } else { $returnArray["message"] = "Bad access key or authorization token for utilizing the online users function."; } } else { $returnArray["access"] = "We did not receive all of the parameters to save your data for the Engineer Fishing script."; } echo json_encode($returnArray); ?> database.php <?php if (count(get_included_files()) <= 1) { exit; } class database { private $host = DB_HOST; private $dbhname = DB_NAME; private $user = DB_USERNAME; private $pass = DB_PASSWORD; private $dbh; private $stmt; private $error; public function __construct() { // Set Connection $con = 'mysql:host=' . $this->host . ';dbname=' . $this->dbhname; // Set options // If you want to display errors, use the following values // true // ERRMODE_EXCEPTION $options = array( PDO::ATTR_PERSISTENT => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT ); // Create a new PDO instanace try { $this->dbh = new PDO($con, $this->user, $this->pass, $options); } catch(PDOException $e) { $this->error = $e->getMessage(); } } public function query($query) { $this->stmt = $this->dbh->prepare($query); } public function bind($param, $value, $type = null) { if (is_null($type)) { switch (true) { case is_int($value): $type = PDO::PARAM_INT; break; case is_bool($value): $type = PDO::PARAM_BOOL; break; case is_null($value): $type = PDO::PARAM_NULL; break; default: $type = PDO::PARAM_STR; } } $this->stmt->bindValue($param, $value, $type); } public function execute() { return $this->stmt->execute(); } public function resultSet() { $this->execute(); return $this->stmt->fetchAll(PDO::FETCH_ASSOC); } public function single() { $this->execute(); return $this->stmt->fetch(PDO::FETCH_ASSOC); } public function rowCount() { return $this->stmt->rowCount(); } public function lastInsertId() { return $this->dbh->lastInsertId(); } public function beginTransaction() { return $this->dbh->beginTransaction(); } public function endTransaction() { return $this->dbh->commit(); } public function cancelTransaction() { return $this->dbh->rollBack(); } public function debugDumpParams() { return $this->stmt->debugDumpParams(); } } ?> config.php <?php define("DB_HOST", "localhost"); define("DB_NAME", "databaseName"); define("DB_USERNAME", "databaseUsername"); define("DB_PASSWORD", "databasePassword"); $availableScripts = array( 1 => "testPlatform", 2 => "engineerFishing", 3 => "engineerPickpocket" ); $scriptAccessKey = array( "testPlatform" => "scriptAccessKey", "engineerFishing" => "scriptAccessKey", "engineerPickpocket" => "scriptAccessKey" ); $scriptAuthToken = array( "testPlatform" => "scriptAuthToken", "engineerFishing" => "scriptAuthToken", "engineerPickpocket" => "scriptAuthToken" ); ?> engineerFishing.sql -- -- Table structure for table `engineerFishing` -- CREATE TABLE `engineerFishing` ( `id` int(8) NOT NULL, `username` varchar(100) NOT NULL, `runtime` bigint(35) NOT NULL, `xp_gained` bigint(35) NOT NULL, `levels_gained` int(8) NOT NULL, `fish_caught` int(8) NOT NULL, `profit` bigint(35) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Indexes for dumped tables -- -- -- Indexes for table `engineerFishing` -- ALTER TABLE `engineerFishing` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `username` (`username`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `engineerFishing` -- ALTER TABLE `engineerFishing` MODIFY `id` int(8) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1; skills.sql -- -- Table structure for table `skills` -- CREATE TABLE `skills` ( `id` int(8) NOT NULL, `agility_xp` bigint(35) NOT NULL, `agility_levels` int(8) NOT NULL, `attack_xp` bigint(35) NOT NULL, `attack_levels` int(8) NOT NULL, `construction_xp` bigint(35) NOT NULL, `construction_levels` int(8) NOT NULL, `cooking_xp` bigint(35) NOT NULL, `cooking_levels` int(8) NOT NULL, `crafting_xp` bigint(35) NOT NULL, `crafting_levels` int(8) NOT NULL, `defense_xp` bigint(35) NOT NULL, `defense_levels` int(8) NOT NULL, `farming_xp` bigint(35) NOT NULL, `farming_levels` int(8) NOT NULL, `firemaking_xp` bigint(35) NOT NULL, `firemaking_levels` int(8) NOT NULL, `fishing_xp` bigint(35) NOT NULL, `fishing_levels` int(8) NOT NULL, `fletching_xp` bigint(35) NOT NULL, `fletching_levels` int(8) NOT NULL, `herblore_xp` bigint(35) NOT NULL, `herblore_levels` int(8) NOT NULL, `hitpoints_xp` bigint(35) NOT NULL, `hitpoints_levels` int(8) NOT NULL, `hunter_xp` bigint(35) NOT NULL, `hunter_levels` int(8) NOT NULL, `magic_xp` bigint(35) NOT NULL, `magic_levels` int(8) NOT NULL, `mining_xp` bigint(35) NOT NULL, `mining_levels` int(8) NOT NULL, `prayer_xp` bigint(35) NOT NULL, `prayer_levels` int(8) NOT NULL, `ranged_xp` bigint(35) NOT NULL, `ranged_levels` int(8) NOT NULL, `slayer_xp` bigint(35) NOT NULL, `slayer_levels` int(8) NOT NULL, `smithing_xp` bigint(35) NOT NULL, `smithing_levels` int(8) NOT NULL, `strength_xp` bigint(35) NOT NULL, `strength_levels` int(8) NOT NULL, `thieving_xp` bigint(35) NOT NULL, `thieving_levels` int(8) NOT NULL, `woodcutting_xp` bigint(35) NOT NULL, `woodcutting_levels` int(8) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Indexes for dumped tables -- -- -- Indexes for table `skills` -- ALTER TABLE `skills` ADD PRIMARY KEY (`id`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `skills` -- ALTER TABLE `skills` MODIFY `id` int(8) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;1 point
-
Booty's AIO BotFarm Bundle
1 pointBooty's AIO BotFarm Bundle Trying to push my limits in scripting so going to be aiming as high as I can. I will be logging all my progress here. Once finished will consider selling. Oh, and also will need 2-5 consistent gold farmers/bot farmer testers once gold farm portion is completed. You will need to test every possible way to break the damn script. Starters = Creates and setup the account to be gold farm or combat ready. Scripts = My personal scripts I will be making for every starter. Utility Scripts = Muling, GE purchasing, Bond Activating/buying Any suggestions to add to the bundle would be great! Not Completed: Completed: Features to be added:1 point
-
The just use onLoop() bro
1 pointWhen someone talks about task based script or enum based scripts there's always that other guy: Just use onloop bro! What does that mean though? Well first off you can think of it as normal scripting--it's not new! For an example take a look at this onloop() /** * Just use onLoop() bro * * @return the loop interval * @throws InterruptedException if something fucks up */ @Override public int onLoop() throws InterruptedException { if (!inventory.isFull() && cows.cowsNearby()) { status = "At work--picking up bones and hides..."; bone.pickupBones(); hide.collectHides(); hideCount = hide.getHideCount(); boneCount = bone.getBonerCount(); } else if (inventory.isFull()) { status = "Time to bank"; goToBank.walkToBank(); } else if (!cows.cowsNearby() && inventory.isEmpty()) { status = "Walking to cows for more loot"; cows.walkToCows(); } return random(200, 300); } It's small and concise. One could read it and understand what is going to be happening. Start from the top and work your way down: Inventory not full and cows nearby? Pickup some shit. Inventory full? Go bank Inventory not full and no cows nearby? FIND DEM COWS! It's easy to read, right? Just use onloop() bro Full project has been uploaded to this thread Bank.java CollectBoners.java CollectHide.java Main.java WalkToCows.java1 point
-
99 STRENGTH!! 1 DEF GMAUL pure FIRECAPE/DT/GODCAPE! 94Magic/80+ range
25m since no one seems interested in 4 months lol1 point
-
Buying 100+M VIA PayPal
1 pointI was gonna sell you gold but everyone above says you're scam quitting so idk anymore1 point
-
Buying bonds
1 pointif (message.getMessage().equals("Grand Exchange offer slots can only hold one Old School bond at a time.")) //click confirm button1 point
-
Service request - Trusted - Hand done
1 point
-
is it weird if
1 point
-
Can anyone help me
1 pointHey guys, I'm trying to learn Java, and script writing. I've been reading some tutorials and I just wrote this SUPER basic first script, however, it does NOTHING. I'm wondering if anyone can tell me where I went wrong, and why it does not attack "Chickens" import org.osbot.rs07.api.model.RS2Object; import org.osbot.rs07.script.Script; import org.osbot.rs07.script.ScriptManifest; import java.awt.*; import java.lang.Thread.State; @ScriptManifest(author = "MySQLi", info = "Basic Chicken Killer", name = "MyChickenKiller", version = 1.0, logo = "") public class Main extends Script { @Override public void onStart() { log("Thank you for using my script, Let's kill chickens!"); } //What are we going to do in our script private enum State{ KILL,WAIT }; //Declare our conditions private State getState(){ RS2Object chicken = getObjects().closest("Chicken"); if(chicken != null) return State.KILL; return State.WAIT; } @Override public int onLoop() throws InterruptedException { switch (getState()){ case KILL: RS2Object chicken = getObjects().closest("Chicken"); if(chicken != null) { chicken.interact("Attack"); } break; case WAIT: sleep(random(500, 700)); break; } return random(200, 300); } @Override public void onExit() { log("Thanks for running my Chicken Killer!"); } @Override public void onPaint(Graphics2D g) { } }1 point
-
Can one truly quit Osrs?
1 point1 point
- paid monthly fee for a script but it doesnt show up
hey I bought your whole selection of scripts, but they aren't showing up in my list and it says they expired pls trial1 point- Can one truly quit Osrs?
1 point- Do you know the person above you? Do you like them? Do you trust them?
Kaarthal was a French military and political leader who rose to prominence during the French Revolution and led several successful campaigns during the French Revolutionary Wars. As Kaarthal I, he was Emperor of the French from 1804 until 1814, and again briefly in 1815 (during the Hundred Days). Kaarthal dominated European and global affairs for more than a decade while leading France against a series of coalitions in the Kaarthalic Wars. He won most of these wars and the vast majority of his battles, building a large empire that ruled over continental Europe before its final collapse in 1815. One of the greatest commanders in history, his wars and campaigns are studied at military schools worldwide. Kaarthal's political and cultural legacy has endured as one of the most celebrated and controversial leaders in human history.1 point- Stealth Quester
1 point- Can't close ads?
1 point- Keep getting banned.
1 point- Keep getting banned.
1 pointthis is the most autistic advice ive seen given in the past 24hrs gratz bro1 point- Need DT and all reqs
1 point- Buying 30-40m
1 point- Salty
1 point- Set a final radius from player position
If you're looking for a simple solution and don't want to go through the hassle of creating your own GUI, and this is the only data you want to input, consider using a JOptionPane. Just remember to check the data that's inputted and ensure that it's valid, and if not pop the option pane up again! -Apa1 point- Fruity Barrows (Frost Barrows)
1 point- PPOSB - AIO Hunter
1 point- PPOSB - AIO Hunter
1 pointCan I get a trial for this? I want to try it out before risking it on my main. So close to 99 :P1 point- 99 STRENGTH!! 1 DEF GMAUL pure FIRECAPE/DT/GODCAPE! 94Magic/80+ range
how can best if max not ?1 point - paid monthly fee for a script but it doesnt show up