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
  • Deep Slayer

    VIP
    • Posts

      48
    • Joined

    • Last visited

    About Deep Slayer

    Recent Profile Visitors

    The recent visitors block is disabled and is not being shown to other users.

    Deep Slayer's Achievements

    1. Not that I have seen, What are you trying to do
    2. @semanresuYou could try making your own script manager with something like private List<AbstractScript> scripts = new ArrayList<>(); private AbstractScript currentScript = null; and then putting the below in your onstart method scripts.add(new myScriptName()); //this script would be in the same source file currentScript = scripts.getFirst(); //pick a script in the list, we only have one so... and then you can access onLoop, onStart, stop etc from currentScript. technically you can add as many scripts as you like and then assign to currentScript. you'd be making your own script manager essentially and can do whatever you like
    3. Just from looking at your getState() method, it would never get past your MINING ORE STATE as atleast one of these are always true. private State getState() { long currentTime = System.currentTimeMillis(); if (Inventory.isFull() && !bankArea.contains(Players.getLocal().getTile())) { return State.WALKING_TO_BANK; } else if (Inventory.isFull() && bankArea.contains(Players.getLocal().getTile()) && !Bank.isOpen()) { return State.USE_BANK; } else if (Bank.isOpen() && Inventory.isFull()) { return State.BANKING; } else if (!Inventory.contains("Bronze pickaxe")) { return State.TAKE_PICKAXE; } else if (!Inventory.isFull() && !ironOre.contains(Players.getLocal().getTile())) { return State.FINDING_ORE; } else if (!Inventory.isFull() && ironOre.contains(Players.getLocal().getTile())) { return State.MINING_ORE; } this part below will never get executed else if (lastDeliveryTime == 0 ||currentTime - lastDeliveryTime >= 300000) { if (muleIsAtGE()) { return State.DELIVER_TO_MULE; } else { return State.DELIVER_TO_GE; } } return state; } because your always returning before you even get there you need to put it first in the list and make sure your logic is correct
    4. Magic.castSpellOn(Normal.HIGH_LEVEL_ALCHEMY, yourItem);
    5. if(!Bank.isOpen() && Inventory.isFull()){ if(Walking.shouldWalk()){ Bank.open(); } return; } just do this if you want to open the closest bank from anywhere in the game. this will combine your WALKING_TO_BANK and USE_BANK case into one
    6. Go to your settings on the client and enable developer mode. At the top of the client you should now have Entities > Enable Projectile Tool
    7. Do you have Runelite installed? If not, then install it Don't run the patcher in DreamBot client until the Jagex launcher is open & logged into the account you want to play with Runelite selected
    8. Delete your DreamBot .jar file. Download the bot again at the top of this page. open the official Jagex launcher, log in. select your client (obviously Runelite) DONT press play go to your DreamBot client and patch it to Runelite go back to the Jagex launcher now and press play DreamBot client should open with the account you logged in with into the Jagex launcher (consider using something like Proxifier before logging in the Jagex launcher if you want your account to have the same proxy when logging in)
    9. Suicide Botting refers to the practice of running a bot non-stop on an account for as long as possible without regard for the account's longevity. The expectation is that the account will eventually be banned. People engage in suicide botting for various reasons, such as generating in-game currency or resources in a short amount of time. The practice is considered "suicidal" for the account's lifespan because it maximizes short-term gains at the expense of getting the account banned. Muling (transferring resources to another account) frequency varies among botters, often depending on the perceived risk and the amount of in-game currency or items gathered. Yes, it can be tedious, but it's a risk management strategy to avoid losing all accumulated resources upon a ban. If you're considering starting a small bot farm and are contemplating the registration process for your accounts, using legitimate email addresses from reputable providers like Outlook or Gmail can significantly affect your ability to manage and maintain your botting operation over the long term. Generally if the account is quite new and you are caught botting, it will be permanently banned and you would just have to create a new account and move on. The optimal amount of memory to allocate to a bot client depends on the bot's requirements and the capabilities of your computer. Allocating too little memory can indeed limit performance, especially if running multiple bots or if the bot performs memory-intensive operations. (which depends on the script used) However, allocating too much memory that isn't used can also be inefficient. I would experiment and see what works best. while both player reports and auto-detection systems are essential tools in identifying and banning bots, OSRS leans towards a heavier reliance on auto-detection systems for the bulk of detection efforts. It starts right from the account creation process all the way to playing the game. These systems can operate continuously and on a larger scale than player reports can manage. However, player reports add a critical layer of oversight that can catch outliers and contribute to refining the detection algorithms. Covert Mode: While the specific workings of "Covert Mode" in DreamBot are not publicly detailed by the developers to prevent Jagex from countering their methods, it does lower ban rate. The "No Click Walk" feature you mentioned involves injecting code into the game to enable the character to walk without the need for mouse clicks as far as I'm aware Menu Manipulation - Instead of interacting with the entity, mouse will now left click any interaction (if supported) The last two you probably shouldn't worry about them if your new to botting I hope this helps
    10. thanks for feedback, this is what we need assuming doAntiBanStuff() returns false every time Sleep.sleepUntil(() -> doAntiBanStuff() || !Players.getLocal().isAnimating(), () -> Players.getLocal().isAnimating(), 5000, 200, 10); Thank you guys, much more concise and efficient
    11. Thank you for pointing out the overloaded sleepUntil method, Pandemic. I wasn't aware of this particular usage, which indeed seems efficient for handling animation states. The method you've shared definitely streamlines the process, I've tried to tailor the ChatListener approach to allow for additional random behaviours (like adjusting the screen or switching tabs) during the animation state with ChatListener. This was an attempt to mimic a more human-like behaviour pattern during these periods. I appreciate your suggestion, as it offers a solid alternative for simple use cases.
    12. I've put together a small snippet that demonstrates how to effectively detect the end of a smithing animation (or really any animation where you're waiting for the character to return to an idle state) using the AnimationListener interface provided by the Dreambot API. Purpose: The snippet helps to identify when a player has finished smithing by monitoring for when the character has been in the idle state (animation ID: -1) for more than 2 seconds. This can be particularly useful in scripts where the next action depends on whether the current task has been completed. How It Works: Implements AnimationListener to monitor animation changes. Uses a flag, finishedSmelting, which is set to true once the player has been idle for more than 2 seconds, indicating the end of an activity like smelting. Resets finishedSmelting after the desired action is taken, readying it for the next cycle.
    13. import org.dreambot.api.methods.interactive.GameObjects; import org.dreambot.api.methods.interactive.Players; import org.dreambot.api.script.AbstractScript; import org.dreambot.api.script.Category; import org.dreambot.api.script.ScriptManifest; import org.dreambot.api.script.listener.AnimationListener; import org.dreambot.api.wrappers.interactive.GameObject; import org.dreambot.api.wrappers.interactive.Player; @ScriptManifest(author = "Deep Slayer", name = "Testing script", version = 1.0, description = "for testing snippets", category = Category.MISC ) public class TestingPurposes extends AbstractScript implements AnimationListener { private long idleAnimationStartTime = -1; // Time when the idle animation starts private boolean finishedSmelting = false; @Override public void onPlayerAnimation(Player player, int animation, int animationDelay) { // Check if not animating if (Players.getLocal().getAnimation() == -1) { // If not animating record the time if (idleAnimationStartTime == -1) { idleAnimationStartTime = System.currentTimeMillis(); } else { // Check if it has been more than 2 seconds if (System.currentTimeMillis() - idleAnimationStartTime > 2000) { finishedSmelting = true; log("We are finished smelting"); } } } else { // Reset the timer if the player starts a new animation idleAnimationStartTime = -1; finishedSmelting = false; log("We are NOT finished smelting"); } } @Override public int onLoop() { GameObject furnace = GameObjects.closest("Furnace"); if (furnace != null && furnace.isOnScreen() && Players.getLocal().isStandingStill()) { if (finishedSmelting) { furnace.interact("Smelt"); sleep(2000, 2500); // Adjust sleep as necessary finishedSmelting = false; // Reset flag after interaction } } return 500; } }
    14. Quick points: Start with a brass key and a scimitar. Customize food and weapon in global variables. You can define lootable items in the lootItems method. Recommended to have some armor for lower levels. Note: This script has no anti-ban features. You can implement your own in the idle() method. Use at your own risk. Let me know your thoughts or suggestions! Thanks!
    15. import org.dreambot.api.Client; import org.dreambot.api.methods.Calculations; import org.dreambot.api.methods.container.impl.Inventory; import org.dreambot.api.methods.container.impl.bank.Bank; import org.dreambot.api.methods.container.impl.equipment.Equipment; import org.dreambot.api.methods.interactive.NPCs; import org.dreambot.api.methods.interactive.Players; import org.dreambot.api.methods.item.GroundItems; import org.dreambot.api.methods.map.Area; import org.dreambot.api.methods.walking.impl.Walking; import org.dreambot.api.script.AbstractScript; import org.dreambot.api.script.Category; import org.dreambot.api.script.ScriptManifest; import org.dreambot.api.utilities.Sleep; import org.dreambot.api.wrappers.interactive.NPC; import org.dreambot.api.wrappers.items.GroundItem; import org.dreambot.api.wrappers.items.Item; import java.awt.*; import static org.dreambot.api.methods.Calculations.random; @ScriptManifest(author = "Deep Slayer", name = "F2P Hill Giant Killer", version = 1.0, description = "Kills and loots Hill Giants", category = Category.COMBAT) public class GiantBoneCollector extends AbstractScript { private final Area hillGiantArea = new Area(3102, 9823, 3124, 9854, 0); private final Area bankArea = new Area(3159, 3487, 3168, 3484, 0); String food = "Tuna"; int foodAmount = 15; String weapon = "Mithril Scimitar"; private enum State { EATING, CHECK_GEAR, GET_KEY, TRAVEL_TO_HILL_GIANTS, FIGHT_HILL_GIANTS, LOOTING, BANKING, IDLE } private State getState() { if (shouldEat()) { return State.EATING; } if (!hasRequiredGear() || !hasBrassKey()) { return State.CHECK_GEAR; } if (shouldTravelToHillGiants()) { return State.TRAVEL_TO_HILL_GIANTS; } if (shouldFightHillGiants()) { return State.FIGHT_HILL_GIANTS; } if (shouldLoot()) { return State.LOOTING; } if (shouldBank()) { return State.BANKING; } return State.IDLE; } public void onStart() { } @Override public int onLoop() { switch (getState()) { case EATING: eatFood(); break; case CHECK_GEAR: checkGear(); break; case GET_KEY: getKey(); break; case TRAVEL_TO_HILL_GIANTS: travelToHillGiants(); break; case FIGHT_HILL_GIANTS: fightHillGiants(); break; case LOOTING: lootItems(); break; case BANKING: bankItems(); break; case IDLE: idle(); break; } return random(200, 300); } private boolean checkGear() { // Check if the Scimitar is in the player's inventory if (Inventory.contains(weapon)) { log("cimitar is in the inventory."); // Attempt to equip the Scimitar Item scimitar = Inventory.get(weapon); if (scimitar != null && scimitar.interact("Wield")) { log("Equipped Scimitar."); return true; } } // Check if the Scimitar is equipped if (Equipment.contains(weapon)) { log(" Scimitar is already equipped."); return true; } // Check if the Scimitar is in the bank if (Bank.isOpen() || Bank.open()) { if (Bank.contains(weapon)) { log("Scimitar is in the bank. Withdrawing and equipping..."); // Ensure there's enough space in the inventory if (!Inventory.isFull() || Inventory.contains("Coins")) { if (Bank.withdraw(weapon, 1)) { Bank.close(); Sleep.sleepUntil(() -> !Bank.isOpen(), 5000); // Wait for the bank to close Item scimitarInInv = Inventory.get(weapon); if (scimitarInInv != null && scimitarInInv.interact("Wield")) { log("Equipped Scimitar from bank."); return true; } } else { log("Failed to withdraw Scimitar. Ensure inventory space."); } } else { log("Not enough space in inventory to withdraw Scimitar."); } } } // If Scimitar is not found in inventory, equipment, or bank log(" Scimitar not found. Stopping script."); this.stop(); return false; } private void getKey() { String brassKey = "Brass key"; // Check if the Brass Key is in the player's inventory if (Inventory.contains(brassKey)) { log("Brass Key is in the inventory."); return; } // Check if the Brass Key is in the bank if (Bank.isOpen() || Bank.open()) { if (Bank.contains(brassKey)) { log("Brass Key is in the bank. Withdrawing..."); if (Bank.withdraw(brassKey, 1)) { log("Brass Key withdrawn from the bank."); // Optional: Close the bank after withdrawing the key Bank.close(); return; } else { log("Failed to withdraw Brass Key. Ensure inventory space."); this.stop(); return; } } } // If Brass Key is not found in inventory or bank log("Brass Key not found. Stopping script."); this.stop(); } private void travelToHillGiants() { log("Traveling to the Hill Giants location..."); // Check if we are already in the Hill Giants area if (hillGiantArea.contains(Players.getLocal())) { log("Arrived at the Hill Giants area."); return; } // Walking to the Hill Giants area if (Walking.shouldWalk()) { Walking.walk(hillGiantArea.getRandomTile()); } } private void fightHillGiants() { NPC hillGiant = NPCs.closest(giant -> giant != null && giant.getName().equals("Hill Giant") && giant.canAttack()); if (hillGiant != null && !Players.getLocal().isInCombat()) { if (hillGiant.interact("Attack")) { log("Engaging with Hill Giant."); Sleep.sleepUntil(() -> !hillGiant.isHealthBarVisible() || hillGiant.exists(), random(1200, 2000)); } } else { log("No Hill Giants available to attack or already in combat."); sleep(random(600, 800)); } } private void lootItems() { // Define the items you want to loot String[] lootableItems = {"Big bones", "Uncut sapphire", "Limpwurt root", "Cosmic rune", "Chaos rune","Nature rune", "Law rune"}; // Replace with actual items for (String itemName : lootableItems) { GroundItem item = GroundItems.closest(itemName); if (item != null && item.isOnScreen()) { if (Inventory.isFull()) { eatFoodToMakeSpace(); // Call method to eat food to make space } if (item.interact("Take")) { log("Looting: " + itemName); Sleep.sleepUntil(() -> !item.exists(), Calculations.random(5000, 8000)); } } } } private void eatFoodToMakeSpace() { if (Inventory.contains(food)) { Inventory.interact(food, "Eat"); log("Eating food to make space for loot."); Sleep.sleepUntil(() -> !Inventory.isFull(), Calculations.random(800, 1200)); } else { log("No food available to eat for making space."); } } private void bankItems() { log("Banking items..."); // Navigate to the bank if (!bankArea.contains(Players.getLocal())) { log("Traveling to the bank..."); if (Walking.shouldWalk()) { Walking.walk(bankArea.getRandomTile()); } } // Interact with the bank if (bankArea.contains(Players.getLocal())) { if (Bank.open()) { log("Bank opened. Depositing items..."); Bank.depositAllItems(); Sleep.sleepUntil(Inventory::isEmpty, random(1000, 2000)); // Retrieve necessary items like food and gear here, if needed Bank.withdraw("Brass key");; sleep(500,1000); Bank.withdraw(food,foodAmount); } } } private void eatFood() { if (Inventory.contains(food)) { Inventory.interact(food,"Eat"); log("Eating food for health."); Sleep.sleepUntil(() -> Players.getLocal().getHealthPercent() > random(50,60), random(1000, 2000)); } } private void idle() { // Implement idle behavior / antiban stuff } private boolean shouldEat() { // Example condition: eat if health is below 50% return Players.getLocal().getHealthPercent() < 50 && Inventory.contains(food); } private boolean hasRequiredGear() { // Check if the Scimitar is equipped if (Equipment.contains(weapon)) { log("Player has the required gear: " + weapon); return true; } else { log("Player does not have the required gear: "+ weapon); return false; } } private boolean hasBrassKey() { String brassKey = "Brass key"; // Check if the Brass Key is in the player's inventory if (Inventory.contains(brassKey)) { log("Player has the Brass Key."); return true; } else { log("Player does not have the Brass Key."); return false; } } private boolean shouldTravelToHillGiants() { // Check if already in the Hill Giants area if (hillGiantArea.contains(Players.getLocal())) { log("Already in the Hill Giants area."); return false; } // Check if the inventory contains the Brass Key if (!Inventory.contains("Brass key")) { log("Brass key is missing. Cannot travel to Hill Giants."); return false; } // Check if the inventory contains food if (!Inventory.contains(food)) { log("Food is missing. Cannot safely travel to Hill Giants."); return false; } // All conditions met, should travel to Hill Giants return true; } private boolean shouldFightHillGiants() { // Ensure we are in the Hill Giants area if (!hillGiantArea.contains(Players.getLocal())) { log("Not in the Hill Giants area."); return false; } // Check if there are Hill Giants available to fight NPC hillGiant = NPCs.closest(giant -> giant != null && giant.getName().equals("Hill Giant") && giant.canAttack()); if (hillGiant == null) { log("No Hill Giants available to fight."); return false; } // Check if the player is already in combat if (Players.getLocal().isInCombat()) { log("Already in combat."); return false; } // Check if the player has enough health if (Players.getLocal().getHealthPercent() < 50) { log("Health too low to safely engage in combat."); return false; } // Check if the player has enough food if (!Inventory.contains(food)) { // Replace "food" with your actual food item log("Not enough food to continue fighting."); return false; } // All conditions met to fight Hill Giants return true; } private boolean shouldLoot() { // Define the items you consider valuable for looting String[] valuableItems = {"Big bones", "Item2", "Item3"}; // Replace with actual valuable items from Hill Giants // Check if lootable items exist and i have food if(Inventory.contains(food)) { for (String itemName : valuableItems) { GroundItem item = GroundItems.closest(itemName); if (item != null && item.isOnScreen()) { log("Valuable item found on the ground. Time to loot: " + itemName); return true; } } } log("No items to loot"); return false; } private boolean shouldBank() { // Check if the player is out of food if (!Inventory.contains(food)) { log("Out of food, time to bank."); return true; } // Other conditions can be added here if needed, like checking the inventory for loot space return false; } }
    ×
    ×
    • 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.