-
Posts
127 -
Joined
-
Last visited
-
Feedback
0%
Everything posted by dubai
-
Dubai's OakBurner [BETA] Chop and Burn any Oak Tree! Start this script next to an Oak Tree with your axe equipped or in your inventory with a tinderbox. The script will chop a full inventory of oak logs, and burn them before returning back to the starting tree. (It might wander off while it's firemaking(It handles "You can't light a fire here" and moves to a new spot to keep lighting fires) But the script will return to the starting tree after burning. Nice and simple Onscreen Paint tracking Runtime and XP/LVLs gained. Need some testers on this, I've ran for over an hour without issues, just moving on to other things. If you encounter bugs/crashes please try and screenshot the issue and provide as much info as you can and I'll return to this project for fixes. I've been running it south/west falador and it works really well over 20k FM xp/hr depending on your axe. The bot seems really smooth, especially firemaking. DOWNLOAD: (EXTRACT TO YOUR "OSBOT/SCRIPTS/" PATH) If anyone could upload some screenshots of nice runtimes, that would be awesome! Source:
-
Hi, i'm currently implementing a custom break handler in my scripts. This can be configured in the scriptGUI. all the logic seems to work apart from getting it to log back in? Can't see anything relevant in the api documentation or I'm not looking in the right places... Any help would be appreciated! In particular: Cannot resolve symbol 'LOGIN' api.getTabs().open(Tab.LOGIN); Here's might BreakHandler class: package extraFeatures; import org.osbot.rs07.api.ui.Tab; import org.osbot.rs07.script.MethodProvider; import java.util.Random; public class BreakHandler { private final MethodProvider api; private final int minBotTime; private final int maxBotTime; private final int minBreakTime; private final int maxBreakTime; private long nextBreakTime; private final Random random; public BreakHandler(MethodProvider api, int minBotTime, int maxBotTime, int minBreakTime, int maxBreakTime) { this.api = api; this.minBotTime = minBotTime; this.maxBotTime = maxBotTime; this.minBreakTime = minBreakTime; this.maxBreakTime = maxBreakTime; this.random = new Random(); scheduleNextBreak(); } private void scheduleNextBreak() { long botTime = random.nextInt(maxBotTime - minBotTime + 1) + minBotTime; nextBreakTime = System.currentTimeMillis() + botTime * 60000L; } public boolean shouldTakeBreak() { return System.currentTimeMillis() >= nextBreakTime; } public void takeBreak() throws InterruptedException { long breakTime = random.nextInt(maxBreakTime - minBreakTime + 1) + minBreakTime; api.log("Taking a break for " + breakTime + " minutes."); api.getTabs().open(Tab.LOGOUT); MethodProvider.sleep(breakTime * 60000L); api.log("Break over, logging back in."); api.getTabs().open(Tab.LOGIN); /// THIS LINE NEEDS TO CHANGE? scheduleNextBreak(); } }
-
Oh... My... God... The gui.. its......... BEAUTIFUL It's like an entire software suite! Can I get a trial so I can have a stalk from a developers point of view :)?
-
Your pure account could've been 'flagged' while botting to 99 str. I have been thinking a lot about bot detection methods lately, it's impossible to say that the agility script got you banned as far as I'm aware. I can imagine the code like, if you're account was automatically flagged as a bot, perhaps theres a 2nd check "JUST TO BE SURE" sorta thing... so if you're acc gets flagged and then a few weeks later or whatever, you start botting again, the flag gets a 'Confirmation' if you will... That's kind of how I imagine the bot detection mechanisms basically anyway.
-
Wow such a detailed response, appreciate it! Honestly don't be too shy of combat scripts! I've only had 1 death since I started and that was coz I was pushing the limits of the eating handlers really. I freakin started making a quest bot lastnight to do restless ghost, thought it would take 30 minutes but It's been about 4 hours and It's ALMOST done... fun stuff I'm thinking for now the looting mechanics on my script are good enough for an aio fighter like this, it's not made to be a looting script so not going to be focusing on that, more aiming for perfect fighting mechanics to push xp/hr rates. Also being made in f2p this bot is more or less for training bot farms, and low level hardcore ironmen etc, not mains. I'll definitely be making more loot focused scripts and I really like your priority looting idea actually, I can see how that would be beneficial if you're killing dragons or something and want to loot the bones over the hide, if theres 1 inventory space left, prioritizing the bones would be more humanlike and better for gp/hr rates etc.
-
Some fire feedback there mate thank you, you're right, it is basic in the sense of, lots can break it, as i'm adding more features i always find this to be true, I don't have enough accounts/time it seems to do enough testing but I am getting there, slowly fixing one thing at a time. Your eating logic sounds a bit complicated, I know my eating method does need some attention, I was thinking of providing a range that it can eat at, say, eat between 20-30hp... for simplicity this seems like it could really work. Bots shouldn't really be risking until 1hit range but you're also right, that a human would I think I'll leave the current world hop feature to instantly world hop if a player comes by for now because I planned to ouse these same methods accross multiple scripts, including some wilderness content scripting. So basically if i player comes in the area it will straight away begin to hop. This feature is pretty smooth so I don't want to change it too much. 100% need attention to the looting, it is flawed at the moment, thats what i'm currently working on amongst gui changes.. I think I got carried away adding features and things started breaking so I'm working backwards currently... Thanks again for the great feedback! Are these features you've implemented in your scripts?
-
With the game update, I can't do anymore testing atm sadly, so I thought it's time to share how my scripts are coming along. I have a few that are working solid and lately I've just been breaking them down and taking methods out into their own individual classes within seperate packages of the project so that I can reuse methods and features throughout my different scripts... I'm very happy with how they're looking too, nice and clean now, easy to read Here's the main class to my fighting bot, has a few nice and simple features with a plan for much more import org.osbot.rs07.api.map.Area; import org.osbot.rs07.api.model.GroundItem; import org.osbot.rs07.api.model.NPC; import org.osbot.rs07.api.ui.Skill; import org.osbot.rs07.script.Script; import org.osbot.rs07.script.ScriptManifest; import org.osbot.rs07.utility.ConditionalSleep; import javax.swing.*; import java.awt.*; import java.time.Instant; import java.util.*; import java.util.List; import antiban.basicAB; import extraFeatures.enableRun; import extraFeatures.WorldHopper; @ScriptManifest(name = "Fighter", author = "Dubai", version = 1.0, info = "Fights mobs", logo = "") public class Fighter extends Script { private enum State { WALK_TO_NPC, CHECK_HEALTH, FIND_TARGET, ATTACK_NPC, FIGHTING, LOOTING_CHECK, LOOTING, WALK_TO_BANK, BANK, HANDLE_BANK_INTERFACE, HOP_WORLD, ENABLE_RUN } private final Object lock = new Object(); private boolean guiDone = false; private NPC currentTargetNPC; private basicAB antiBan; private static Random random = new Random(); private State currentState; private final Area defaultBankArea = new Area(3009, 3355, 3017, 3358); private Area bankArea = defaultBankArea; private Map<String, Area> npcAreas = new HashMap<>(); private boolean enableEating; private String selectedFood; private int eatBelowHealth; private int withdrawFoodAmount; private List<Integer> hopWorlds; private boolean enableRun; private String selectedNPC; private boolean enableLooting; private List<String> itemsToLoot; private enableRun runEnabler; private WorldHopper hopWorld; public void setEnableAutoRetaliate(boolean selected) { System.out.println("Enable Auto-retaliate: " + selected); } public void setBuryBones(boolean selected) { System.out.println("Bury Bones: " + selected); } public void setEnableTalkBack(boolean selected) { System.out.println("Enable Talk-Back: " + selected); } public void setEnablePotion(boolean selected) { System.out.println("Enable Potion: " + selected); } public void setPotions(ArrayList<String> list) { System.out.println("Potions List: " + list); } public void setHopForPlayers(boolean hopForPlayers) { System.out.println("Hop for Players: " + hopForPlayers); } public void setEnableEating(boolean enableEating) { this.enableEating = enableEating; } public void setSelectedFood(String selectedFood) { this.selectedFood = selectedFood; } public void setEatBelowHealth(int eatBelowHealth) { this.eatBelowHealth = eatBelowHealth; } public void setWithdrawFoodAmount(int withdrawFoodAmount) { this.withdrawFoodAmount = withdrawFoodAmount; } public void setEnableRun(boolean enableRun) { this.enableRun = enableRun; } public void setSelectedNPC(String selectedNPC) { this.selectedNPC = selectedNPC; } public void setEnableLooting(boolean enableLooting) { this.enableLooting = enableLooting; } public void setItemsToLoot(List<String> itemsToLoot) { this.itemsToLoot = itemsToLoot; } public void setBankArea(Area bankArea) { this.bankArea = bankArea; } public void setHopWorlds(List<Integer> hopWorlds) { this.hopWorlds = hopWorlds; } public Object getLock() { return lock; } public void guiDone() { synchronized (lock) { guiDone = true; lock.notify(); } } private boolean shouldFindNewTarget() { return currentTargetNPC == null || !currentTargetNPC.exists() || currentTargetNPC.getHealthPercent() == 0; } @Override public void onStart() { antiBan = new basicAB(this); antiBan.setAntiBanChance(0.2); Instant startTime = Instant.now(); runEnabler = new enableRun(this); hopWorld = new WorldHopper(this, hopWorlds); npcAreas.put("Chicken", new Area(3026, 3282, 3037, 3289)); npcAreas.put("Cow", new Area(3022, 3298, 3042, 3312)); npcAreas.put("Monk", new Area(3200, 3400, 3210, 3410)); npcAreas.put("Guard", new Area(2963, 3389, 2968, 3399)); // Show GUI SwingUtilities.invokeLater(() -> new FighterGUI(this).showGUI()); // Wait for GUI to be done synchronized (lock) { while (!guiDone) { try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } log("GUI done. Initializing state."); currentState = State.WALK_TO_NPC; // Set initial state } @Override public int onLoop() throws InterruptedException { if (!guiDone) { return 500; } if (random.nextInt(10) < 1) { antiBan.performAntiBan(); } if (enableRun) { runEnabler.enableRunMode(); } log("Current State: " + currentState); switch (currentState) { case WALK_TO_NPC: walkToNPC(); break; case FIGHTING: killNPC(); break; case LOOTING: pickupLoot(); break; case WALK_TO_BANK: walkToBank(); break; case BANK: handleBanking(); break; case HOP_WORLD: hopWorld.hopWorld(); break; default: log("Invalid state, switching to WALK_TO_NPC."); currentState = State.WALK_TO_NPC; break; } return random(1600, 1800); } private void walkToNPC() { if (!npcAreas.get(selectedNPC).contains(myPosition())) { log("Walking to NPC area..."); getWalking().webWalk(npcAreas.get(selectedNPC)); } else { if (!getCombat().isFighting()) { log("Arrived at NPC area."); currentState = State.FIGHTING; } } } private void killNPC() { if (enableEating && getInventory().getAmount(selectedFood) == 0) { log("Out of food, walking to bank..."); currentState = State.WALK_TO_BANK; return; } if (enableEating && getSkills().getDynamic(Skill.HITPOINTS) <= eatBelowHealth) { if (getInventory().contains(selectedFood)) { log("Eating food..."); getInventory().getItem(selectedFood).interact("Eat"); new ConditionalSleep(5000) { @Override public boolean condition() { return getSkills().getDynamic(Skill.HITPOINTS) > eatBelowHealth || !getInventory().contains(selectedFood); } }.sleep(); } else { log("No food in inventory while trying to eat, walking to bank..."); currentState = State.WALK_TO_BANK; return; } } if (shouldFindNewTarget()) { findAndAttackNewTarget(); } } private void findAndAttackNewTarget() { log("Finding a new target NPC..."); NPC newTarget = getNpcs().closest(npc -> npc.getName().equalsIgnoreCase(selectedNPC) && npcAreas.get(selectedNPC).contains(npc) && !npc.isUnderAttack() && !npc.isMoving()); if (newTarget != null) { currentTargetNPC = newTarget; currentTargetNPC.interact("Attack"); currentState = State.FIGHTING; } else { log("No NPC found in the area."); if (hopWorlds != null && !hopWorlds.isEmpty()) { log("Hopping worlds as no NPC found..."); currentState = State.HOP_WORLD; } else { log("World hopping not enabled. Returning to WALK_TO_NPC state."); currentState = State.WALK_TO_NPC; } } } private void pickupLoot() { if (enableLooting) { GroundItem loot = getGroundItems().closest(item -> itemsToLoot.contains(item.getName()) && npcAreas.get(selectedNPC).contains(item)); if (loot != null && loot.exists()) { log("Picking up loot: " + loot.getName()); loot.interact("Take"); new ConditionalSleep(3000) { @Override public boolean condition() { return !loot.exists(); } }.sleep(); } else { log("No more items to loot."); currentState = State.FIGHTING; } } else { log("Looting disabled, returning to fighting."); currentState = State.FIGHTING; } } private void walkToBank() { if (!bankArea.contains(myPosition())) { log("Walking to bank area..."); getWalking().webWalk(bankArea); } else { log("Arrived at bank."); currentState = State.BANK; } } private void handleBanking() throws InterruptedException { if (getBank().isOpen()) { if (enableEating && getInventory().getAmount(selectedFood) < withdrawFoodAmount) { log("Withdrawing food: " + selectedFood); getBank().withdraw(selectedFood, withdrawFoodAmount); new ConditionalSleep(3000) { @Override public boolean condition() { return getInventory().getAmount(selectedFood) >= withdrawFoodAmount; } }.sleep(); } log("Closing bank."); getBank().close(); currentState = State.WALK_TO_NPC; } else { log("Opening bank..."); getBank().open(); new ConditionalSleep(5000) { @Override public boolean condition() { return getBank().isOpen(); } }.sleep(); } } @Override public void onPaint(Graphics2D g) { g.drawString("Current State: " + currentState, 10, 20); } @Override public void onExit() { log("Script stopped."); } } Still planning to take some stuff out like the banking handling into its own class, also haven't done much for the onpaint for this script yet but the gui is looking nice. Any feedback greatly appreciated!
-
You should like the scripts I've been working on as I've taken all your advice on board! Thanks for the comment! Absolutely agree as it's such a boost in my motivation even if I don't land the job, I'll be more confident on the next one! I've been updating my github and I've shared it with the company aswell so hopefully they check out what I've been working on. I even added some of my osbot scripts to my github for them to look at
-
Had some spare time yesterday so started sending out some job applications for junior dev positions while i finish my CS degree... anyways started working on some osbot scripts and since yesterday went from writing simple script classes to full blown projects with packages and everything is looking awesome and thennnnn BOOM had my first ever tech interview on the phone... went for about 20 minutes and hopefully get an email to schedule a face to face interview later in this week the guy said on the phone! Just a quick rant, very excited, I also plan to share some of the scripts I've been working on later tonight hopefully! Any suggestions for scripts or the interview (fingers crossed i even get one - even if i dont; its a huge motivator) appreciated!
-
I remember using this like 7 years ago or something
-
Ok ok ok... I think I get it now. So are some of the more complex scripts we see on the market here, compiled as whole packages rather than just single class files compiled into a jar?
-
Actually thats a really good idea, got me thinking actually what about going one up? Having generalized Classes rather then just functions you can re-use. For examply my "Tree chopper script" could be re used in a more AIO script by group classes together. Then say for whatever reason you need to re use that class its just a matter of extending its use. This sounds really good in my head but probably is very impracticle and may sound stupid I'm not sure...
-
Sorry I more or less was refferring to the script config window that allows users to change how the script will run on startup. But also yeah I did find a few wierd 1/1000 things like starting my script if the players bank was open would break the script so I added checks for that. Converting it all to cases made things look tidy, not trying to re-invent the wheel though just sorta get the feel of osbot api calls. Fun stuff! Still pretty keen to push the limits though, I'll have more time soon to get back into so will see what I come up with.
-
I'll definitely check them, any particular reasoning behind them or just high demand skills sorta thing? By the way! I used a ton of your scripts back in the day (Has to be nearly 10 years ago?!?!) Good to see you're still around
-
Definitely a high demand skill, I'll take a look at what courses are available, good idea cheers!
-
I have a business subscription to Udemy that expires soon and I'm wondering if anyone has any recommendations for good courses to complete before the subscription ends? I can essentially complete any course for free at the moment. Any suggestions appreciated, thanks! Edit: Some that I've completed are: -Introduction to Java -OOP with Java -Springboot with Java (currently completing) -Ton of cyber security courses -Complete SQL bootcamp
-
Yeah I've essentially done just that, added a SLEEP state in one of my cases for my new and improved oak banker script. The scalability seems to be unlimited this way. I'm also getting comfortable adding errorhandling and crash detection methods and I'm struggling to make my scripts break (thats a good thing obviously), getting some big runtimes on all the scripts I make. Next plans are probably questing and minigame bots that do need to be in a more 'reactive' state. Starting to look into building a GUI for more AIO type bots aswell but I'm just taking a break from osbot scripting to complete a Springboot course so that should improve my comfortability with Java more. My 3rd Java Udemy course and this one is a chunky boy so pretty keen to plow through it.
-
Ton of good info there, thanks for the response. I'll definitely be stealing your v class idea, what an awesome way to keep things clean and I'm kind of anoyed that I didnt think of this lol. Just wondering with multithreading here; I've been avoiding that for scalability reasons as wont this slow the overall performance of the script down? if it's constantly doing something in the background, wouldn't multithreading be an issue when you're scaling to say 100 bots?
-
Awesome reply thanks heaps! Like I mentioned, definitely prefer to code in python and I'm struggling to keep these java classes tidy. One major difference between the 2 languages I've noticed is the ability to keep python much cleaner from the get go. I'll do some research on states and I'll add some conditional sleeps instead of delays. I did run the script overnight for 11 hours and it didn't break. Also in regards to mouse movement. I was unaware that times have changed that much as when I was botting some 10+ years ago, random mouse movements were the first line of defence for antiban in our bots. Apart from all that, do you still think there's money to be made as a developer in the osbot scene?
-
Hi! I'm looking to get some feedback on this script I made today. I'm also wondering if there is still money to be made from a developers point of view for osbot scripts... as it seems the market has almost everything covered already so it would be a game of undercutting other developers with similar scripts. Just looking to earn some extra money really as I complete my Computer Science degree. I'd also likely to note that I consider myself a python developer; I have completed a Java bootcamp and got a certificate for that but I'm still not 100% comfortable with java and only have minimal experience (apart from building bots/private servers for runescape when I was a teenager) Here's a copy of my "Deforest Trees" script: Start near Falador west bank and it will walk to trees, chop a full load of trees and then bank, repeat. I've added some nice and simple yet highly effective antiban including: -Random mouse movement, -Random delay between chopping trees -Picks a random bank booth each time it banks The script also has some checks to detect if the bot gets stuck and I've got over an hour's runtime so far without it crashing and has a nice and simple paint featuring runtime, logs chopped and levels gained. Some ways I've considered monetizing my coding skills via osbot would be either, selling scripts, goldfarming using my own scripts or selling accounts that I've created using my own scripts (trade restriction lifted accounts) . Any feedback at all appreciated!