Jump to content
Frequently Asked Questions
  • Are you not able to open the client? Try following our getting started guide
  • Still not working? Try downloading and running JarFix
  • Help! My bot doesn't do anything! Enable fresh start in client settings and restart the client
  • How to purchase with PayPal/OSRS/Crypto gold? You can purchase vouchers from other users
  • Try asking for help in the chatbox
  • Leaderboard

    Popular Content

    Showing content with the highest reputation since 04/23/22 in all areas

    1. Hello everyone. Earlier today a user messaged other users about a link to a download of a local version of an SDN script for free / small payment (Dreamy AIO Skiller Elite in this case, but this applies to ALL scripts). This particular script when ran would decrypt and send your saved game accounts to their servers to steal. All PM's have been deleted, but if you downloaded and ran the script in question, we'd recommend changing your game passwords immediately and delete the script from your PC. NEVER download or run any programs or scripts from someone you don't trust. If something sounds too good to be true, it probably is. The only safe way to run our premium scripts is to purchase them through our store and run them through our SDN. Stay safe, The Dream Team
      14 points
    2. You are paying for the ability to use more than 2 clients, not fooking invincibility
      3 points
    3. Introduction Been botting on and off RS for the last decade and have finally decided to leverage my programming experience to start building scripts for OSRS, but I am also cheap and don't want to scale my bot farm via $ so I have figured out my middle ground, fund it via scripting. I will be posting my Gold Farm Stats and Scripting progress, let me know if you have any script requests and I'll see about making a script for it. Please note currently only running bots in F2P so making a members script might be out of scope for now. Gold Farm May 2022 | Total Accounts: 40 | Total Accounts Banned: 16 | Total Accounts Running: 4 Scripting May 2022 | Released Al Kharid Beer Glass Collector & 1st Attempt at Scripter+ Test June 2022 | Expand Private Scripts More updates to follow, if you want a certain F2P script made post below and I will see about making it. I will also try to update this whenever a notable update comes along
      2 points
    4. Nano Miner has been updated and is now live on the SDN! It's currently at v2.3 and is available in the client! Changes:- fixed: NPE when using a Master- added: Bank conditions from DB default banks- added: Bank conditions for custom banks and deposit boxes- other: changed minimum values for master triggersThanks!
      2 points
    5. Hello everyone! A new version of DreamBot is now live! Changes: Update fixes Fixed NPC Definition loading Fixed small error in other definition loadings Always remember, to be on the latest version of our client you must run DBLauncher.jar! The client does NOT update itself! Thanks, The Dream Team
      2 points
    6. Refunded that to your credit, @Nex please take a look at this script and make sure it's working otherwise we'll need to remove it from the store. Thanks!
      2 points
    7. Ben

      Please be careful everyone

      how about not botting on your main in first place?
      2 points
    8. yes yes Depends on what you want to build. also depends on what you mean by advanced java. but really no, your knowledge becomes "advanced" as a result of practice, finding problems and then solving them. theres no way to learn advanced concepts without building simple things. yup. https://dreambot.org/guides/scripter-guide/script-dev/setting-up-dev-env/ dreambot guides on how to get ur first script going https://dreambot.org/javadocs/allclasses-noframe.html this is a searchable list of all classes and methods you will need to write scripts. https://discord.gg/wvZaH3W this is the dreambot edu discord server, here you can ask questions on how to do stuff and get answers quickly https://github.com/milasoft/looter/blob/master/src/milasoft/looter this is my favourite example script. its old so you dont want to copy the actual methods in it. e.g. getBank().open is using the old dreambot api, now it would be Bank.open(), but the overall way the script is designed gives you a good idea on how to do some more complex things
      2 points
    9. donvlee97

      Dani's Auto NMZ

      Hey everyone, this is my project thread regarding my going-to-be paid script I have been working on my NMZ bot and I am keen to show some features: Personal experience I got my account from 70 attack + defence to 80 attack + defence in 2 days. I just run it for like 3 runs per day. - Start anywhere - Script automatically takes prayer potions when 20 underneath your prayer level (prayer level - 20 -> full prayer every time it takes the potion) - Script automatically takes absorption potions when underneath 950 - Script automatically takes (super) combat potions when boosted level is around +6/+8 - Script automatically attacks NPC's when player is not in combat - Script automatically activates the boosts in NMZ - Script automatically activates prayer when NPC's are around and disables it when they aren't - Script will now bank for combat/prayer potions - Script will now return to the NMZ area and will take absorp potions (10 full potions) - Script will now go to NMZ NPC to setup the dream (It will use your last used option) - Script will now go to the Potion and start the NMZ and continue with Combat process - Added an small GUI to change combat styles used (Attack, Strength, Defence) - GUI will stay on top, you can switch styles between doing your multitasking - Bot will stop input when GUI is editing input - Update to the GUI layout/design - The script will no longer get stuck on starting your dream, because it can't grab the current absorption amount because the widget isn't active yet. The combat process will now only start after first absorption is taken - Put an Abyssal Whip in inventory to do the special attacks when enough energy, it also automatically switches to your old equipment - Shows points received in current run (Starts getting value when in combat) - Automatically takes 22K from bank to deposit to coffin when starting a dream (Every dream it will deposit the 22k needed) I am actually hoping for some community input about what you guys think still have to be added I am currently working on Ranged/Magic attack presets, as for now it's Melee combat only when talking about combat mechanics. Let me know what you guys think! Thanks for reading Dani
      2 points
    10. Pandemic

      DreamBot v3.11.9

      Hello everyone! A new version of DreamBot is now live! Changes: Magic#isSpellSelected fixed Inventory#isItemSelected fixed Always remember, to be on the latest version of our client you must run DBLauncher.jar! The client does NOT update itself! Thanks, The Dream Team
      2 points
    11. I'd like to announce that bonScouter will soon be receiving a huge revamp that includes a free web panel built for the script. The web panel will enable you to view your scouts, manage your leech list (as well as other lists), and adjust the bot's settings on a nice and easy-to-use website. I've posted some early preview images of the site for you below (do note that design and functionality is liable to change). Please stay tuned for more updates!
      1 point
    12. Hey Andre, apologies for getting back to you so late. I wasn't notified that a new post was made on the thread I'm actually building this functionality into the next version of the script and it will be done automatically. You won't need to type in a location, the script will already know where it is at Thank you for the kind words and your support
      1 point
    13. Temporary hotfix is live, it appears to fix that specific object, will need to look deeper into what's causing it.
      1 point
    14. Koschei

      Guide from zero to hero

      Great advice! It would be best if you honed the craft of OSRS. First, you must start from the bottom; many begin with the venture of goblins to train and strive through the early progression levels. However, like a giant brain mastermind, you must be able to think and become efficient, so you shall start with the Wintertodt grind then. Once you get 99 firemaking, you shall begin gaining all the 99s until you finally reach the last valiant 99, runecrafting. You'll want to go to the grand exchange and purchase one rope and a chair at this point of the grind. So you can hand it over to that nerd that started with goblins as you're an almost maxed giga chad while he only has a total level of 1100. And finally, you'll purchase another rope and chair as one cannot truly live while grinding runecrafting.
      1 point
    15. Ah fantastic, I hadn't come across the onExit() and wondered if something like that existed. That's perfect. Agree that the library should have some close down functions, will check it out tomorrow. Thanks again for the help, and appreciate the quick reply @Pandemic!
      1 point
    16. 1 point
    17. Don’t bot, play the game first
      1 point
    18. Nice bot. easy to start and just let it do it's own thing. in the 4 hours I ran it so far I haven't seen a single person do it. 10/10. great job!
      1 point
    19. Pandemic

      Refund Request

      As stated in the store terms you accept when you purchase anything, being banned isn't a valid reason as you're breaking the game's rules by using it so there's always a chance of that happening. If you purchase a knife from a store you couldn't get a refund for being arrested for cutting someone with it. Banned and refunded as fraudulent for threatening an illegitimate chargeback.
      1 point
    20. running it on a different computer and it is working perfectly fine. Thanks for the input.
      1 point
    21. I added it in the next version. It should be fine but I can't guarantee that it works since I don't have any test accounts yet.
      1 point
    22. Haha, spoken like a true RuneScape purist. I've only just realised there is a resizable classic option. Being locked into the tiny box was what put me off and made me use modern. Sounds like a good way to have the "always-open" tabs with a much better view of the game. Will give it a whirl later. Thanks for the code. I haven't looked at the widget class, but I see what the code is aiming to do. Fingers crossed it gives a viable option for those peasants out there choosing to use modern!
      1 point
    23. Both of those would reduce the kills/hr and gp/hr and are only used by beginners that are struggeling to multitask with antivenom potions. Check the items' combat stats
      1 point
    24. This usually happens after the game updates. Our developers usually update the client within couple of hours after the game update. Actually, the client should be working already 🙂
      1 point
    25. what testing? the code you posted has no logging. you said it hangs if i did get out of that loop it wouldnt hang it would start interacting with the priest maybe
      1 point
    26. Ngl, I was a bit nervous paying $20 for a Questing Script when the few others I've used consistently had issues. However, after the trial I was pleased with quality of the script. It feels like the creator invested themselves in the script instead of just making a script. It runs smooth while watching it, the mouse movements and delays are lovely (slightly slower than most scripts / more human-like), and the possibility of bans seem lower with this well-written script. On two accounts, I've done about 6 f2p and 3 p2p quests without logging. No ban on either, which is promising due to poor past experiences with free Questing Scripts where they'd get banned if I did more than ~5 at once. Now, I'm not saying you won't get banned, but I am saying the quality of the script seems superior to the other Questing Scripts I've tried. The script handles breaks, both afk and logout, well. The script utilizes some neat coding, like with Tourist Trap where it takes advantage of safe-spotting the Merc Captain with Magic. It also has handled all the dialogue well, which is a common problem in free and lower quality scripts. ** First Error: While doing Death Plateau, one account threw an error but continued to work fine. While the other account was clicking the same spot on the minimap to move there even though I was already standing on that tile. Although, it continued to work once I: paused it > clicked to move from the spot > started script. It continued onward, finished quest and started on the next one. Overall, I'm very pleased with the quality of this script. It has definitely enticed me to check out the skilling scripts created by Zawy.
      1 point
    27. Thank you so much! I am looking very much forward to diving deeper into this!
      1 point
    28. Then why did you bot in 1st place?
      1 point
    29. Hi, I'm sorry. I realized my error. If rocks are selected closer to the path that goes through the scorpion side entrance of the mining guild, then the script chooses that path for reentry after banking, i.e goes through the scorpion side entrance instead of the mining guild entrance. Guess your script is a little too efficient with finding the shortest path haha thank you for your help/response!
      1 point
    30. I owe you an apology, I do not know why I rushed to advice others to not purchase your script. I received very fast support from you even though I do not have Discord and since correcting my mistakes (not specifying the script to retrieve the food to be eaten + leaving the list of items to loot empty) the bot has worked flawlessly. I am currently using it on two accounts, one uses melee and one ranged. I do not think the script supports ranging, but it still works. I also told the bot to pick up arrows so if I just re-wield them every 10 hours or so it works. I am getting a very good first impression because I have tried it out in difficult scenarios but it still managed to "reset" itself and keep on grinding. However, I did find something that could cause issues if bot is instructed to loot+bury bones. I tried your bot on hobgoblins by the crafting guild and when the bot has banked and is walking back to the hobgoblins, then it will walk near the crafting guild. If a hobgoblin has previously died (if there are bones there) then the bot will get stuck by the crafting guild, adjusting the camera down, trying to rightclick through crafting guild on bones which are too far away to be clicked on. If a player is there killing hobgoblins, then the bot will be stuck until the player leaves/until bones stop appearing. My example with the hobgoblins are true in other cases as well. I am not a developer but I am thinking this could be solved by having the bot first verify if it is close by the bones (or loot) before trying to rightclick on it. I do not know if this is plausible, but I feel like the bot would be perfect as an AIO melee fighter if it just got a bit improved looting system. Thank you for your fast support today and for letting me enjoy your script!
      1 point
    31. Xtra

      rip off

      Can you provide evidence of this 'hybrid analysis report'?
      1 point
    32. thank u i will not be phished now #:3
      1 point
    33. abuseedom3

      Problem with Interact

      I noticed a problem with interact function (from all class, objects, npcs, etc...) If bank (or any other interface) is open, it hovers the mouse to the entity i'm trying to interact with (without clicking ofc), then close the bank (or whatever interface is open) then interacts with the entity. Is it possible to close the interface directly without having it move the mouse first?
      1 point
    34. yeah but i think jagex rate limits you at something like 10 accounts / day, that might not be accurate but something in that ballpark. not normally.
      1 point
    35. donvlee97

      Dani's Auto NMZ

      The Obsidian set + zerk necklace (i) + toktz-xil-ak does a better DPS on my stats then DH. When I'm 92HP it's a different story tho.
      1 point
    36. camalCase

      Dani's Auto NMZ

      what happens if your prayer level is less than 20? support for combat boost prayers like piety would be neat. being able to have custom ratio of potions would be neat. as higher def the less absorps you will need this should be automated imo support for gmaul / dragon claws or other high exp spec weapons would be neat. idk what boss it is but some quest has a boss that you have to attack with all 4 elements to kill it & when you use it in NMZ it gives you free infinite runes no one uses it normally because its too much work to handle, but automating it would make a very cool cheap magic training method normally when you do nmz you will pot to 1k, afk until its like 300 or something and then pot back up, i dont personally think it really matters how to bot does it but people like when scripts behave like humans i also notice you are at max health in your screenshot, NMZ should be done at 1hp, so enemies can only hit you for 1 dmg, making the most of your absorption pots, you need to support rock cake & overload potions GL on ur script.
      1 point
    37. Thanks for letting me know, I've submitted a new version and are now waiting for staff approval.
      1 point
    38. Sub Undead Druids AIO has been updated and is now live on the SDN! It's currently at v14.4 and is available in the client! Changes:Fixed combat style selectionThanks!
      1 point
    39. Elliott1

      3 Accounts Banned

      I'd recommend checking the proxy score on the IPQualityScore website, I'm assuming it's have a very high fraud score. That being said it is highly unusual to see bans that quickly - so I would question the ban speed. I can assure you is that it has nothing to do with Dreambot. I'd also say 1on1proxy are not that great and I'd recommend looking elsewhere for a better provider.
      1 point
    40. Hi All, I am wanting to share my implementation of Utility classes for DreamBot which are not available through the DreamBot API. The first one I am going to share is the MinigameTeleporter class. This class is useful for allowing the local player to use the minigame teleports in the grouping tab. Below is the source code and how to use in your project. ALL AVAILABLE CLASSES CAN BE FOUND AT: https://github.com/HMM7777/DreamBotUtility SOURCE CODE HOW TO USE IN YOUR PROJECT The MinigameTeleporter is easy to use. The MinigameTeleporter class contains the method teleportMinigame(String minigameName). The teleportMinigame method takes a String parameter. This String literal is the name of the minigame you wish to teleport to. Note: the String literal has to be spelt appropriately in accordance with the widget text value in the minigame tab. Below is an example of teleporting to Clan Wars using the minigame teleports via the grouping tab. MinigameTeleporter.teleportMinigame("Clan Wars"); ADDITIONAL NOTES The sleep times used can be changed to your convenience. The sleep times I used were made quickly for my test environment. The MinigameTeleporter does not check if your minigame teleport is available (cooldown 20 minutes). You can wrap the teleportMinigame with a boolean checker to see if the teleport is on cooldown or not. I did play with Varbit 8354 which is the counter for the minigame teleport. Most minigames are made available in the grouping tab and are selectable within the interface however some of these minigames do not have a teleport. Be weary of this. This class will most likely be used for F2P accounts or niche use cases. Please let me know how it goes. Any constructive criticism will be appreciated. Regards, Hmm. MinigameTeleporter.java
      1 point
    41. Visual Scripting for DreamBot 3 Build your own 100% unique scripts with ease Making scripts has never been this easy. No programming knowledge required. Visual Scripting empowers regular users to create OSRS bots they have always wanted to use. You don't have to know anything about programming, the desire to experiment is enough! Don't worry about coding syntax, misspelling keywords or using the wrong brackets. Focus on building your own scripts instead. Visual Scripting allows you to build your 100% customized scripts with ease. Instead of writing line-by-line code you use graphical nodes to make the bot do what you want. In fact, you can create very high quality and unique scripts for your own use without writing a single line of code! Everything running under the hood is designed by Hashtag, the author of DreamBot's reputable # Scripts. Take full control of the scripts you run. The sample scripts provide a lot of information to get you started. Hashtag provides you with multiple high quality sample scripts to learn from, to modify for your needs or for you to use as is! The scripts showcase how you can interact with a variety of OSRS game mechanics. These include interacting with entities and items, handling dialogues, trading with other players, banking, shopping, restocking at Grand Exchange and many more. The library of sample scripts is ever growing. All requests for sample scripts are welcome. Everything in the scripts is 100% customizable by you. Do you want the scripts to be faster or slower? No problem, tweak the script parameters to suit your needs. Do you believe something could be done more efficient? Nothing is stopping you from making changes to the scripts. This degree of freedom will assist your bots to survive longer due to the ability to create fully unique scripts. Think of them as private scripts, except you have access to the source and you won't be dependant on another scripter fullfilling your needs. Your time is not wasted trying to figure out errors. Debugging your scripts is designed to be easy for you. If you have ever tried coding, you might have encountered errors. The description of these is often very confusing and you might end up wasting a lot of time trying to figure them out. Say goodbye to NullPointerException, StackOverflowError, ArrayIndexOutOfBoundsException and others! These won't haunt you in Visual Scripting. When you encounter an error in your script, you are immediately given a human-friendly description of the problem and the node that is causing the error is highlighted in the editor. Testing your script is as easy as clicking a button. Literally, it's a single click of a button in the editor! This is faster than compiling Java code into a JAR file that is fed to the client to execute. Try Visual Scripting free while it's in preview. Start your trial now, pick a plan later. No credit card required. No obligation. No risk. Get Started Join the Discord server. The Discord server is the easiest way to stay in touch. In Hashtag's Discord server you can chat with others, share your ideas or projects and get assistance in using the tool. Join Discord View the user manual. The extensive user manual helps you to get started. Learn more about Visual Scripting by reading the user manual. It contains how-to guides, information about best practises and more. View Manual Feel free to show the project some love by liking this thread!
      1 point
    42. SubCZ

      Botting to Berkeley

      This project will now be released publicly! See here: Introduction I've been writing bots for various games over the years but the covid crisis unfortunately gave me a reason and motivation to start a serious gold farm - my private student loans at UC Berkeley have become unavailable as a result of the pandemic and as an international student there is no alternative. I'll take this as my last shot of staying in the U.S, but I'll spare you the details about me and leave them at the bottom for those who are interested. Goals Structure Custom Framework [07/18/2020] Bot Network Database [07/31/2020] Python Bot Manager [08/01/2020] RAM Upgrade (32 GB) [08/13/2020] Scale to 30 Accounts [09/16/2020] Automated Muling [09/20/2020] Dev Tools Script [10/01/2020] Scale to 60 Accounts [03/20/2021] Scale to 140 Accounts [03/23/2021] Scale to 220 Accounts Scale to 300 Accounts Antiban Implicit Antipattern [07/20/2020] Custom Mouse Algorithm [07/22/2020] Custom Interactions [07/23/2020] Custom Break Algorithm [07/27/2020] Improved Player Evasion [08/04/2020] Multifactor Reaction Timing [08/12/2020] Account Specific Behavioral Patterns [08/13/2020] Gaussian Walking [08/20/2020] Gaussian Entity Interactions [08/21/2020] Multithreaded Action Handling [09/04/2020] Content F2P Training Module (to total level 330) [07/25/2020] Melee Training Module (ATT/STR/DEF to 99) [07/28/2020] Cooking Training Module (to level 99) [07/30/2020] Magic Training Module (to level 99) [08/24/2020] Ranged Training Module (to level 99) [08/25/2020] Prayer Training Module (to level 44) [08/26/2020] 1st Profit Module [09/06/2020] Woodcutting Training Module (to level 70) [09/18/2020] Slayer Training Module (to level 40) [09/28/2020] Crafting Training Module (to level 77) [09/28/2020] 15 Quests Implemented [09/30/2020] Fletching Training Module (to level 30) [10/03/2020] Agility Training Module (to level 60) [10/06/2020] 20 Quests Implemented [10/06/2020] 30 Quests Implemented [10/16/2020] 40 Quests Implemented [10/26/2020] Pest Control Module [10/28/2020] Smithing Training Module (to level 99) [11/02/2020] Herblore Training Module (to level 99) [11/11/2020] Firemaking Training Module (to level 99) [11/12/2020] 2nd Profit Module [12/14/2020] 50 Quests Implemented [12/27/2020] Mining Training Module (to level 99) [12/28/2020] 60 Quests Implemented [01/01/2021] 70 Quests Implemented [01/10/2021] Fishing Training Module (to level 99) [01/11/2021] Thieving Training Module (to level 99) [01/11/2021] 80 Quests Implemented [01/13/2021] Construction Training Module (to level 99) [01/14/2021] 90 Quests Implemented [01/18/2021] Prayer Training Module (to level 99) [01/23/2021] 100 Quests Implemented [01/24/2021] 3rd Profit Module [02/22/2021] 110 Quests Implemented [03/02/2021] Farming Training Module (to level 40) [03/08/2021] 1 Diary Implemented [03/09/2021] 2 Diaries Implemented [03/10/2021] Slayer Training Module (to level 99) ... more soon! Status (03/23/2021) Skill Modules: 24 Quest Modules: 111 Diary Modules: 2 Profit Modules: 3 Active Accounts: 140 Banned Accounts: 6 Total Profit: ??? Lines of Code: 123.2k The Project I'm planning to take a slightly less conventional approach; I've written a custom mouse algorithm for Dreambot (involving Bernstein polynomials for those who are familiar) and a node based framework around the Dreambot API to speed up productivity. The fact that the client collects mouse position data every 50ms and sends it to the server led me to believe that Jagex is utilizing some sort of machine learning algorithm behind the scenes to match the mouse movement of a player to the pattern of a certain public botting client to catch more sophisticated bots (especially considering the people that Jagex has hired over the years), but this is pure speculation. The bots themselves will train a random rotation of all skills and quests, and include certain money making methods into this rotation once the requirements for them are fulfilled. They will buy, sell, and mule items automatically as needed. I'm going to write all scripts (or rather, all modules of the single rotation script) personally to ensure quality and to avoid matching the patterns of public/premium scripts. I will update the status of the farm daily and write a detailed update for major changes. About Me I'm 23 years old, from Germany, and have been studying Engineering for 2 years in California. I have a self-taught background in Computer Science, consisting mostly of C++, Python, Angular, and primitive machine learning, but my dream has always been to work in Aerospace Engineering. A few months ago I got selected for a transfer to UC Berkeley for Aerospace, but I am not eligible for any student loans due to the covid situation and the fact that I am not a US Citizen. I'll be working 12 hours a day on this project for the next month - either I will start generating profit, or I will have to forfeit my U.S visa and return home. My botting projects in the past have been focused on online poker, but unlike OSRS, the challenge in poker bots lies more so in automating the task efficiently rather than avoiding bans so I will have to make some adjustments to my process.
      1 point
    43. I made a nifty little mouse utility for drawing custom cursors and trails that I thought I would pass onto the community. Some of the trails are meh but I think the final product is still great and it's very straightforward to use. Credits: DarkMagican for the original mouse trails & rainbow source ENFILADE for MousePathPoint Setup functions void setCursorColor(Color cursorColor) Manually set the cursor's colour, default white void setCursorStroke(BasicStroke cursorStroke) Manually set the cursor's stroke thickness, default 2 void setTrailColor(Color trailColor) Manually set the trail's colour, default white void setRainbow(boolean RAINBOW) Set the mouse cursor & trail colour to be rainbow void setRandomColor() Set the mouse cursor & trail colour to be random, possibly rainbow Mouse functions void drawRandomMouse(Graphics g) Draws the randomly selected mouse graphic. void drawPlusMouse(Graphics g) Draws a "+" for the mouse, with shadow. void drawCrossMouse(Graphics g) Draws a "x" for the mouse, with shadow. void drawCircleMouse(Graphics g) Draws a circle for the mouse, with shadow. void drawDotMouse(Graphics g) Draws a dot for the mouse, with shadow. void drawRotatingCrossMouse(Graphics g) Draws an "x" for the mouse that rotates, with shadow. void drawRotatingCircleMouse(Graphics g) Draws a circle with rotating pie slices, with shadow. Trail functions void drawTrail(Graphics g) Draws a typical line-based mouse trail, varying size line width void drawZoomTrail(Graphics g) Draws a "ZOOM" for a trail, varying case and size void drawTextTrail(Graphics g, String trail) Draws your specified text for a trail, could work for script status? void drawDotTrail(Graphics g) Draws a series of dots as a trail, varying sizes void drawCircleTrail(Graphics g) Draws a series of circles as a trail, varying sizes void drawPlusTrail(Graphics g) Draws a series of "+" as a trail, varying sizes void drawRotatingSlashTrail(Graphics g) Draws a series of "/" as a trail that rotate, varying sizes void drawRotatingCrossTrail(Graphics g) Draws a series of "x" as a trail that rotate, varying sizes Usage example First, add DrawMouseUtil to your project by copying and pasting it into a file name DrawMouseUtil.java and importing it into your project Second, create a variable for DrawMouseUtil so you have consistency in your setup and calls. private DrawMouseUtil drawMouseUtil = new DrawMouseUtil(); Third, set your desired settings and add it to onStart. For this example we will be setting up the mouse randomly: @Override public void onStart() { drawMouseUtil.setRandomColor(); //Set a random colour and leave the stroke setting at default ..... } Fourth, call your desired mouse cursor and trail in onPaint. For this example we will be using random settings: @Override public void onPaint(Graphics g) { drawMouseUtil.drawRandomMouse(g); drawMouseUtil.drawRandomMouseTrail(g); } My favourite combination currently is either drawMouseUtil.drawRotatingCrossMouse(g) drawMouseUtil.drawRotatingCrossTrail(g) or drawMouseUtil.drawRotatingCircleMouse(g); drawMouseUtil.drawDotTrail(g); DrawMouseUtil.java: /** DrawMouseUtil by holic **/ import org.dreambot.api.Client; import org.dreambot.api.methods.Calculations; import java.awt.*; import java.awt.geom.AffineTransform; import java.awt.geom.Arc2D; import java.awt.geom.Line2D; import java.util.LinkedList; import static org.dreambot.api.methods.MethodProvider.log; public class DrawMouseUtil { LinkedList<MousePathPoint> mousePath = new LinkedList<MousePathPoint>(); private boolean RAINBOW = false; private int STROKE = 2; private int mX, mY; private long angle; private BasicStroke cursorStroke = new BasicStroke(STROKE); private int randomMouse = Calculations.random(5); private int randomMouseTrail = Calculations.random(7); private Color cursorColor = Color.WHITE; private Color trailColor = cursorColor; private Color[] cursorColors = {new Color(78, 216, 255), new Color(90, 222, 98), new Color(215, 182, 77), new Color(232, 134, 124), new Color(215, 120, 124), new Color(183, 138, 215), Color.WHITE}; private AffineTransform oldTransform; private int r = 0, g = 0, b = 0, duration = 650; public DrawMouseUtil() { Client.getInstance().setDrawMouse(false); } public void setRainbow(boolean RAINBOW) { if (RAINBOW) { g = 255; } else { g = 0; } this.RAINBOW = RAINBOW; } public void setRandomColor() { if (Calculations.random(2) != 1) { log("Rainbow mouse!"); setRainbow(true); } else { setRainbow(false); cursorColor = getRandomColour(); trailColor = cursorColor; } } private Color getRandomColour() { return cursorColors[Calculations.random(cursorColors.length - 1)]; } public void setCursorStroke(BasicStroke cursorStroke) { this.cursorStroke = cursorStroke; } public void setCursorColor(Color cursorColor) { this.cursorColor = cursorColor; } public void setTrailColor(Color trailColor) { this.trailColor = trailColor; } public void drawRandomMouse(Graphics g) { switch (randomMouse) { case 0: drawPlusMouse(g); break; case 1: drawCrossMouse(g); break; case 2: drawCircleMouse(g); break; case 3: drawDotMouse(g); break; case 4: drawRotatingCrossMouse(g); break; case 5: drawRotatingCircleMouse(g); break; } } public void drawRandomMouseTrail(Graphics g) { switch (randomMouseTrail) { case 0: drawTrail(g); break; case 1: drawZoomTrail(g); break; case 2: drawPlusTrail(g); break; case 3: drawCircleTrail(g); break; case 4: drawDotTrail(g); break; case 5: drawRotatingSlashTrail(g); break; case 6: drawRotatingCrossTrail(g); break; case 7: drawTextTrail(g, "your text here"); break; } } /** * * ** ** ** ** * Mouse cursor * * ** ** ** ** **/ public void drawPlusMouse(Graphics g) { Graphics2D g2 = (Graphics2D) g; int s = 4; Point cP = Client.getMousePosition(); int cX = (int) cP.getX(); int cY = (int) cP.getY(); g2.setColor(Color.BLACK); g2.setStroke(cursorStroke); /* + Cursor */ g2.drawLine(cX - s + 1, cY + 1, cX + s + 1, cY + 1); g2.drawLine(cX + 1, cY - s + 1, cX + 1, cY + s + 1); g2.setColor(cursorColor); g2.drawLine(cX - s, cY, cX + s, cY); g2.drawLine(cX, cY - s, cX, cY + s); g2.setStroke(new BasicStroke(1)); } public void drawCrossMouse(Graphics g) { Graphics2D g2 = (Graphics2D) g; int s = 3; Point cP = Client.getMousePosition(); int cX = (int) cP.getX(); int cY = (int) cP.getY(); g2.setStroke(cursorStroke); g2.setColor(Color.BLACK); /* X Cursor */ g2.drawLine(cX - s + 1, cY - s + 1, cX + s + 1, cY + s + 1); g2.drawLine(cX - s + 1, cY + s + 1, cX + s + 1, cY - s + 1); g2.setColor(cursorColor); g2.drawLine(cX - s, cY - s, cX + s, cY + s); g2.drawLine(cX - s, cY + s, cX + s, cY - s); g2.setStroke(new BasicStroke(1)); } public void drawCircleMouse(Graphics g) { Graphics2D g2 = (Graphics2D) g; oldTransform = g2.getTransform(); int mX = Client.getMousePosition().x; mY = Client.getMousePosition().y; g2.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)); if (mX != -1) { g2.setStroke(cursorStroke); g2.setColor(Color.BLACK); g2.drawOval(mX - 1, mY - 1, 4, 4); g2.setColor(cursorColor); g2.drawOval(mX - 2, mY - 2, 4, 4); g2.setStroke(new BasicStroke(1)); } } public void drawDotMouse(Graphics g) { Graphics2D g2 = (Graphics2D) g; oldTransform = g2.getTransform(); int mX = Client.getMousePosition().x; mY = Client.getMousePosition().y; g2.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)); if (mX != -1) { g2.setStroke(cursorStroke); g2.setColor(Color.BLACK); g2.drawOval(mX - 1, mY - 1, 4, 4); g2.setColor(cursorColor); g2.drawOval(mX - 2, mY - 2, 4, 4); g2.setStroke(new BasicStroke(1)); } } public void drawRotatingCircleMouse(Graphics g) { Graphics2D g2 = (Graphics2D) g; oldTransform = g2.getTransform(); int mX = Client.getMousePosition().x; mY = Client.getMousePosition().y; g2.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)); if (mX != -1) { g2.setStroke(cursorStroke); g2.drawOval(mX - 2, mY - 2, 4, 4); g2.setColor(cursorColor); g2.rotate(Math.toRadians(angle += 6), mX, mY); g2.draw(new Arc2D.Double(mX - 6, mY - 6, 12, 12, 330, 60, Arc2D.OPEN)); g2.draw(new Arc2D.Double(mX - 6, mY - 6, 12, 12, 151, 60, Arc2D.OPEN)); g2.setTransform(oldTransform); g2.setStroke(new BasicStroke(1)); } } public void drawRotatingCrossMouse(Graphics g) { Graphics2D g2 = (Graphics2D) g; oldTransform = g2.getTransform(); Point cP = Client.getMousePosition(); int cX = (int) cP.getX(); int cY = (int) cP.getY(); int s = 4; g2.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)); if (mX != -1) { g2.setStroke(cursorStroke); g2.setColor(Color.BLACK); //g.rotate(Math.toRadians(angle+=1), mX, mY); Line2D lineShadow = new Line2D.Double(cX - s + 1, cY + 1, cX + s + 1, cY + 1); Line2D lineShadow2 = new Line2D.Double(cX + 1, cY - s + 1, cX + 1, cY + s + 1); AffineTransform atS = AffineTransform.getRotateInstance( Math.toRadians(angle += 4), cX + 1, cY + 1); AffineTransform atS2 = AffineTransform.getRotateInstance( Math.toRadians(angle), cX + 1, cY + 1); g2.draw(atS.createTransformedShape(lineShadow)); g2.draw(atS2.createTransformedShape(lineShadow2)); g2.setColor(nextCursorColor()); Line2D line = new Line2D.Double(cX - s, cY, cX + s, cY); Line2D line2 = new Line2D.Double(cX, cY - s, cX, cY + s); AffineTransform at = AffineTransform.getRotateInstance( Math.toRadians(angle += 4), cX, cY); AffineTransform at2 = AffineTransform.getRotateInstance( Math.toRadians(angle), cX, cY); // Draw the rotated line g2.draw(at.createTransformedShape(line)); g2.draw(at2.createTransformedShape(line2)); g2.setStroke(new BasicStroke(1)); } } /** * * ** ** ** ** * Mouse trails * * ** ** ** ** **/ public void drawTrail(Graphics g) { Graphics2D g2 = (Graphics2D) g; oldTransform = g2.getTransform(); int mX = Client.getMousePosition().x; mY = Client.getMousePosition().y; g2.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)); while (!mousePath.isEmpty() && mousePath.peek().isUp()) mousePath.remove(); Point clientCursor = Client.getMousePosition(); MousePathPoint mpp = new MousePathPoint(clientCursor.x, clientCursor.y, duration); if (mousePath.isEmpty() || !mousePath.getLast().equals(mpp)) mousePath.add(mpp); MousePathPoint lastPoint = null; for (MousePathPoint a : mousePath) { if (lastPoint != null) { Color c = nextTrailColor(); int tmpcursorStroke = STROKE; if (STROKE > 1) tmpcursorStroke = (a.getAlpha() > 175 ? STROKE : STROKE - 1); g2.setStroke(new BasicStroke(tmpcursorStroke)); g2.setColor(new Color(c.getRed(), c.getGreen(), c.getBlue(), a.getAlpha())); //trail color g2.drawLine(a.x, a.y, lastPoint.x, lastPoint.y); g2.setStroke(new BasicStroke(1)); } lastPoint = a; } } public void drawZoomTrail(Graphics g) { String zoom = "zoom zoom "; int zoomIndex = 0, zoomIndexStart = -1; Graphics2D g2 = (Graphics2D) g; oldTransform = g2.getTransform(); g2.setFont(new Font("default", Font.BOLD, 12)); g2.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)); while (!mousePath.isEmpty() && mousePath.peek().isUp()) mousePath.remove(); Point clientCursor = Client.getMousePosition(); MousePathPoint mpp = new MousePathPoint(clientCursor.x, clientCursor.y, duration * 2); if (mousePath.isEmpty() || !mousePath.getLast().equals(mpp)) mousePath.add(mpp); MousePathPoint lastPoint = null; for (MousePathPoint a : mousePath) { if (zoomIndex >= zoom.length()) zoomIndex = 0; String toDraw = String.valueOf(zoom.toCharArray()[zoomIndex]); if (lastPoint != null) { Color c = nextTrailColor(); toDraw = a.getAlpha() > 175 ? toDraw.toUpperCase() : toDraw; g2.setColor(new Color(c.getRed(), c.getGreen(), c.getBlue(), a.getAlpha())); //trail color g2.drawString(toDraw, a.x, a.y + 5); } lastPoint = a; zoomIndex++; } g2.setFont(new Font("default", Font.PLAIN, 12)); } public void drawTextTrail(Graphics g, String trail) { int zoomIndex = 0, zoomIndexStart = -1; Graphics2D g2 = (Graphics2D) g; oldTransform = g2.getTransform(); g2.setFont(new Font("default", Font.BOLD, 12)); g2.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)); while (!mousePath.isEmpty() && mousePath.peek().isUp()) mousePath.remove(); Point clientCursor = Client.getMousePosition(); MousePathPoint mpp = new MousePathPoint(clientCursor.x, clientCursor.y, duration * 2); if (mousePath.isEmpty() || !mousePath.getLast().equals(mpp)) mousePath.add(mpp); MousePathPoint lastPoint = null; for (MousePathPoint a : mousePath) { if (lastPoint != null) { Color c = nextTrailColor(); g2.setColor(new Color(c.getRed(), c.getGreen(), c.getBlue(), a.getAlpha())); //trail color g2.drawString(trail, a.x, a.y); } lastPoint = a; zoomIndex++; } g2.setFont(new Font("default", Font.PLAIN, 12)); } public void drawDotTrail(Graphics g) { Graphics2D g2 = (Graphics2D) g; oldTransform = g2.getTransform(); g2.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)); while (!mousePath.isEmpty() && mousePath.peek().isUp()) mousePath.remove(); Point clientCursor = Client.getMousePosition(); MousePathPoint mpp = new MousePathPoint(clientCursor.x, clientCursor.y, duration * 2); if (mousePath.isEmpty() || !mousePath.getLast().equals(mpp)) mousePath.add(mpp); MousePathPoint lastPoint = null; for (MousePathPoint a : mousePath) { if (lastPoint != null) { Color c = nextTrailColor(); int size = a.getAlpha() > 200 ? 6 : a.getAlpha() > 150 ? 5 : a.getAlpha() > 100 ? 4 : a.getAlpha() > 50 ? 3 : 2; g2.setStroke(cursorStroke); g2.setColor(new Color(c.getRed(), c.getGreen(), c.getBlue(), a.getAlpha())); //trail color g2.fillOval(a.x, a.y, size, size); g2.setStroke(new BasicStroke(1)); } lastPoint = a; } } public void drawCircleTrail(Graphics g) { Graphics2D g2 = (Graphics2D) g; oldTransform = g2.getTransform(); g2.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)); while (!mousePath.isEmpty() && mousePath.peek().isUp()) mousePath.remove(); Point clientCursor = Client.getMousePosition(); MousePathPoint mpp = new MousePathPoint(clientCursor.x, clientCursor.y, duration * 2); if (mousePath.isEmpty() || !mousePath.getLast().equals(mpp)) mousePath.add(mpp); MousePathPoint lastPoint = null; for (MousePathPoint a : mousePath) { if (lastPoint != null) { Color c = nextTrailColor(); int size = a.getAlpha() > 200 ? 6 : a.getAlpha() > 150 ? 5 : a.getAlpha() > 100 ? 4 : a.getAlpha() > 50 ? 3 : 2; g2.setStroke(cursorStroke); g2.setColor(new Color(c.getRed(), c.getGreen(), c.getBlue(), a.getAlpha())); //trail color g2.drawOval(a.x, a.y, size, size); g2.setStroke(new BasicStroke(1)); } lastPoint = a; } } public void drawPlusTrail(Graphics g) { Graphics2D g2 = (Graphics2D) g; oldTransform = g2.getTransform(); g2.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)); while (!mousePath.isEmpty() && mousePath.peek().isUp()) mousePath.remove(); Point clientCursor = Client.getMousePosition(); MousePathPoint mpp = new MousePathPoint(clientCursor.x, clientCursor.y, duration * 2); if (mousePath.isEmpty() || !mousePath.getLast().equals(mpp)) mousePath.add(mpp); MousePathPoint lastPoint = null; for (MousePathPoint a : mousePath) { if (lastPoint != null) { Color c = nextTrailColor(); int size = a.getAlpha() > 200 ? 5 : a.getAlpha() > 150 ? 4 : a.getAlpha() > 100 ? 3 : a.getAlpha() > 50 ? 2 : 1; g2.setStroke(cursorStroke); g2.setColor(new Color(c.getRed(), c.getGreen(), c.getBlue(), a.getAlpha())); //trail color g2.drawLine(a.x - size + 1, a.y + 1, a.x + size + 1, a.y + 1); g2.drawLine(a.x + 1, a.y - size + 1, a.x + 1, a.y + size + 1); g2.setStroke(new BasicStroke(1)); } lastPoint = a; } } public void drawRotatingSlashTrail(Graphics g) { Graphics2D g2 = (Graphics2D) g; oldTransform = g2.getTransform(); g2.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)); while (!mousePath.isEmpty() && mousePath.peek().isUp()) mousePath.remove(); Point clientCursor = Client.getMousePosition(); MousePathPoint mpp = new MousePathPoint(clientCursor.x, clientCursor.y, duration * 2); if (mousePath.isEmpty() || !mousePath.getLast().equals(mpp)) mousePath.add(mpp); MousePathPoint lastPoint = null; for (MousePathPoint a : mousePath) { if (lastPoint != null) { Color c = nextTrailColor(); int size = a.getAlpha() > 200 ? 5 : a.getAlpha() > 150 ? 4 : a.getAlpha() > 100 ? 3 : a.getAlpha() > 50 ? 2 : 1; g2.setStroke(cursorStroke); g2.setColor(new Color(c.getRed(), c.getGreen(), c.getBlue(), a.getAlpha())); //trail color Line2D line = new Line2D.Double(a.x - size, a.y, a.x + size, a.y); Line2D line2 = new Line2D.Double(a.x, a.y - size, a.x, a.y + size); AffineTransform at = AffineTransform.getRotateInstance( Math.toRadians(angle += 4), a.x, a.y); g2.draw(at.createTransformedShape(line)); g2.setStroke(new BasicStroke(1)); } lastPoint = a; } } public void drawRotatingCrossTrail(Graphics g) { Graphics2D g2 = (Graphics2D) g; oldTransform = g2.getTransform(); g2.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)); while (!mousePath.isEmpty() && mousePath.peek().isUp()) mousePath.remove(); Point clientCursor = Client.getMousePosition(); MousePathPoint mpp = new MousePathPoint(clientCursor.x, clientCursor.y, duration * 2); if (mousePath.isEmpty() || !mousePath.getLast().equals(mpp)) mousePath.add(mpp); MousePathPoint lastPoint = null; for (MousePathPoint a : mousePath) { if (lastPoint != null) { Color c = nextTrailColor(); int size = a.getAlpha() > 200 ? 5 : a.getAlpha() > 150 ? 4 : a.getAlpha() > 100 ? 3 : a.getAlpha() > 50 ? 2 : 1; g2.setStroke(cursorStroke); g2.setColor(new Color(c.getRed(), c.getGreen(), c.getBlue(), a.getAlpha())); //trail color Line2D line = new Line2D.Double(a.x - size, a.y, a.x + size, a.y); Line2D line2 = new Line2D.Double(a.x, a.y - size, a.x, a.y + size); AffineTransform at = AffineTransform.getRotateInstance( Math.toRadians(angle += 4), a.x, a.y); g2.draw(at.createTransformedShape(line)); g2.draw(at.createTransformedShape(line2)); g2.setStroke(new BasicStroke(1)); } lastPoint = a; } } public void nextRGB() { if (r == 255 && g < 255 & b == 0) { g++; } if (g == 255 && r > 0 && b == 0) { r--; } if (g == 255 && b < 255 && r == 0) { b++; } if (b == 255 && g > 0 && r == 0) { g--; } if (b == 255 && r < 255 && g == 0) { r++; } if (r == 255 && b > 0 && g == 0) { b--; } } public Color currentCursorColor() { if (!RAINBOW) { return cursorColor; } else { return new Color(r, g, b); } } public Color currentTrailColor() { if (!RAINBOW) { return trailColor; } else { return new Color(r, g, b); } } public Color nextCursorColor() { nextRGB(); return currentCursorColor(); } public Color nextTrailColor() { if (!RAINBOW) //Don't call this if it is set to rainbow so we're not double calling nextRGB() nextRGB(); return currentTrailColor(); } public class MousePathPoint extends Point { private long finishTime; private double lastingTime; private int alpha = 255; public MousePathPoint(int x, int y, int lastingTime) { super(x, y); this.lastingTime = lastingTime; finishTime = System.currentTimeMillis() + lastingTime; } public int getAlpha() { int newAlpha = ((int) ((finishTime - System.currentTimeMillis()) / (lastingTime / alpha))); if (newAlpha > 255) newAlpha = 255; if (newAlpha < 0) newAlpha = 0; return newAlpha; } public boolean isUp() { return System.currentTimeMillis() >= finishTime; } } } Enjoy falsely tricking people into thinking your script is better than it is!
      1 point
    44. A chance to improve that contrast ratio Will defo give the forum ranks a shot, messed around on canva for 5 mins
      1 point
    ×
    ×
    • Create New...

    Important Information

    We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.