Jump to content

Slakan

Members
  • Posts

    15
  • Joined

  • Last visited

  • Feedback

    0%

Profile Information

  • Gender
    Male

Recent Profile Visitors

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

Slakan's Achievements

Newbie

Newbie (1/10)

4

Reputation

  1. Fixed the bug for now with: Optional<RS2Object> object = api.objects.getAll().stream().filter(i -> i.getName().equals("Range")).findAny();
  2. Good day, Gets the bug in both mirror & stealth mode. I'm having some issues with a bug i'm dealing with (NOTE: re-writing it, so some if..else..if are partly done. I had this bug in the previous version as well). Note that this happens a few times, not always. I have two else..if statements down below. One is for "outside" building where i identity the door, checks it its open/not open. Then it interact with the door, and if range is !null, visable & in position i click the range. Sometimes that failes, so i have failsafe to walk into the rangeArea. Then the next else..if statement takes over. if check that widget is open first, then if its not open it checks if i'm animating. Sometimes when the first else..if fails with finding the interaction with range, it walks into a random position in the area, then it kinda loops as you see down below in the log. Now i have no idea how i'm supposed to deal with this, because all checks (according to my low lvl coding skillz) are valid, but we can't find the interaction cook, even tho we see the range, its in position AND its not null? - Could be i need some random sleep(s) to force it to go a bit slower? All other feedback to how i can improve stuff is also appreciated Short version of the interaction with range from code: if(range !=null && range.isVisible() && range.getPosition().equals(rangePosition)) { if(canReachRange) { //checking that we can reach it from inside. if(range.interact(option) { //clicking range. } else { // here we get, and i dont know how we get here? } } else { // cant reach range. } } [INFO][Bot #1][09/29 02:18:10 PM]: Inventory is full. [INFO][Bot #1][09/29 02:18:10 PM]: Inventory contains raw fish [INFO][Bot #1][09/29 02:18:10 PM]: We are outside building [INFO][Bot #1][09/29 02:18:10 PM]: We can reach behind door. [INFO][Bot #1][09/29 02:18:10 PM]: Door is open, we can get to range as well [INFO][Bot #1][09/29 02:18:10 PM]: Door open, we can reach range and its pretty mutch there [INFO][Bot #1][09/29 02:18:10 PM]: We can't interact cook from outside [INFO][Bot #1][09/29 02:18:12 PM]: We have lvls under 40 in cooking & fishing! [INFO][Bot #1][09/29 02:18:12 PM]: Inventory is full. [INFO][Bot #1][09/29 02:18:12 PM]: Inventory contains raw fish [INFO][Bot #1][09/29 02:18:12 PM]: We are in range area [INFO][Bot #1][09/29 02:18:12 PM]: Widget is closed, we are inside range area! [INFO][Bot #1][09/29 02:18:12 PM]: We are inside, all checks are done. Lets see if we can reach it. [INFO][Bot #1][09/29 02:18:12 PM]: We can get range entity [INFO][Bot #1][09/29 02:18:12 PM]: Cant interact cook else if(outsideBuilding_failsafe.contains(api.myPosition())) { /*We are outside building * Lets see if we can reach mapGet() position behind door. * if we can reach, door is open. Else we have to open door. * */ api.log("We are outside building"); if(api.getMap().canReach(behindDoorPosition)) { /*We can reach behind door. The door is open*/ api.log("We can reach behind door."); /* * Checking if we can reach range entity. * */ if(api.getMap().canReach(range)) { api.log("Door is open, we can get to range as well"); if(range !=null && range.isVisible() && range.getPosition().equals(rangePosition)) { /* * Pretty sure we can get to range * */ api.log("Door open, we can reach range and its pretty mutch there"); if(range.interact("Cook")) { /* * Since we click the range from outside and sleep, * We need to start the else..if in the "in range area" * to check if interface is open first. Since the interface * Will be open when we interact with the range from outside. * */ script.main.sleep(MethodProvider.random(1000,2000)); Sleep.sleepUntil(() -> getMyWidget().isVisible(), 10000); api.log("We can interact from outside"); } else { /*We cant see interaction cook, even tho we can see the range. * We handle it for now with walking inside. * */ api.log("We can't interact cook from outside"); api.walking.walk(rangeArea); } } else { /*We cant get to range*/ api.log("Outside building, we can getMap() to range, but we cant get to it."); } } else { /*Failsafe for opening door and not able to get to range. * We walk in * */ api.log("We cant get to range."); api.walking.walk(rangeArea); } } else { /*We cant reach behind door. Lets handle door.*/ api.log("We cant reach behind door. Handle the door."); } } else if(rangeArea_Failsafe.contains(api.myPosition())) { /*We are inside the range area * NOTE: * We click the range from outside area. We need to * start with checking if the interface is open. * */ api.log("We are in range area"); if(getMyWidget() != null) { /* * Widget is open! * */ api.log("Widget is open"); if(api.getWidgets().interact(270,14,"Cook")) { /* * We can interact with cook, based on id's. Need to remove id's. * */ api.log("Found cook button and pressing"); script.main.sleep(MethodProvider.random(1000,2000)); api.getMouse().moveOutsideScreen(); Sleep.sleepUntil(() -> !api.myPlayer().isAnimating(), 50000); } else { api.log("Couldn't find cook button"); } } else { /* * Widget is closed, we are inside range area.. * */ api.log("Widget is closed, we are inside range area!"); if(!api.myPlayer().isAnimating()) { /* * Just checking if we are not animating. * */ if(range !=null && range.isVisible() && range.getPosition().equals(rangePosition)) { /* * Do all the checks to see if the range is not null, its visble and its the position. * */ api.log("We are inside, all checks are done. Lets see if we can reach it."); if(api.getMap().canReach(range)) { api.log("We can get range entity"); if(range.interact("Cook")) { /* * We are interacting with range * */ api.log("Clicking range"); script.main.sleep(MethodProvider.random(1000,2000)); Sleep.sleepUntil(() -> getMyWidget().isVisible(), 10000); } else { /* * Now i have no idea what is wrong.. * */ api.log("Cant interact cook"); } } else { /* * We are inside, we have checked that the range is there, but we cant reach it. * */ api.log("We can't get range position"); } } else { /* * We cant find it. * */ api.log("We are in range area, not animating and we cant find range"); } } else { /* * We are animating cooking. * */ api.log("Animating cooking"); } } }
  3. Slakan

    APA AIO Miner

    Did you read the whole intro? Setup Guide: Add the script to your collection via the SDN Start up OSBot (or refresh your scripts list), then run the script After the GUI (startup interface) shows up, enable human input by cycling the input button next to the pause/stop buttons Select the rocks that you wish to mine via the game screen: Make sure that the rock is not mined when you select it. Make sure the rock tile is outlined on-screen and the rock data appears on the GUI. You can remove rocks either by deselecting them in-game, or by manually removing them from the GUI. Currently selected rocks are highlighted in cyan. Disable human input once you have selected your desired rocks (Settings>[check] disable input) Configure the settings tab to your liking If banking, be sure to select the closest bank to your mining location. Note that the banking code relies on the OSBot web-walking system, which can sometimes take a few seconds to calculate a route. Start the script with the button at the bottom of the GUI Relax
  4. Worked like a charm If(getMap().canReach(position) { Continue code bla bla } else { Deal with the door. }
  5. @Khaleesii have some questions if you are able to point me in the right direction. There is one thing i need help with, and its checking if door is actually open in conditional sleep. I start by selecting the closest object based on filter and using position to find the correct door. RS2Object isDoorOpen = getObjects().closest(new Filter<RS2Object>() { /* * This RS2Object is filtering door by position and if it has action open. * Return null if door is open * */ @Override public boolean match(RS2Object door) { if (door != null && door.hasAction("Open") && door.getPosition().equals(doorPosition)) return true; return false; } }); I check the to see if the door is null: if(isDoorOpen == null) { Working, i can continue code } But when it comes to the parts where i want to use conditional sleep for when i have interacted with the door the problem comes: else { /*Door is closed * Lets open it? * */ sleep(random(500,850)); if(isDoorOpen.interact("Open")) { new ConditionalSleep(2000) { @Override public boolean condition() { /* * Need better return logic. * This is always false * Will wait x-seconds insted * */ return isDoorOpen ==null; } }.sleep(); } There is probably a smarter way to detect if the door is closed, and how we should interact with it. But this is what i came up with, but i just cant get my head around the conditional sleep. It will sometimes spam click door, even if we have clicked it and it opens. Would be much appreciated for feedback on this part. I have the version 1.01 working pretty smooth now, and I've eliminated tons of bugs, re-written it to be understandable and added more logic for checking.
  6. Thank you for the feedback I will implement some changes for that in the later release, so i don't have to depend on the ID's in case they change.
  7. Lumbridge fishing & cooking [Open source], Version 1.00 Version: 1.00 Description: The script will fish for shrimps & anchovies (depending on level) in Lumbridge fishing area and cook them in the range place in Lumbridge. This is the first script I've made and learning process was from reading tutorials on the forum & googlin' like crazy! Preparations: This is version 1.00 and there isn't any logic for detecting if we should bank all the inventory items yet. Please bank the inventory you want to save, and either start from the bank or at the fishing area. Planning for improvement: Implement detection if inventory is full of stuff(Starting stuff), and bank them in Lumbridge. Re-write code for easier understanding, now its "all-over the place" (Need help with ideas on how to structure the code) Reduce the amount of repetitive coding (like object filtering) Make more functions for things to reduce the amount of code in main loop and make maintenance easier. Implement in future option to select "Progressive" and continue in Barbarian village for fly fishing Maybe implement GE stocking of rod & feathers Else just buy the stuff? Better detection for how to handle the door into building. Make better paint (i know, its horrible). Better detection of widgets (fail safes, null detection etc) Better detection of objects (position where we should use it) Bugs: Few times after clicking door, it will go into house and out and back in. Spam click door if player isn't moving. If enabling g.draw rectangle, i cant get g.draw text above it. Its hidden behind it. Will be more i guess. I do appreciate all constructive feedback to improve my scripting knowledge. You can get access to it: https://pastebin.com/ZYz1szg5 import org.osbot.rs07.api.filter.Filter; import org.osbot.rs07.api.map.Area; import org.osbot.rs07.api.map.Position; import org.osbot.rs07.api.model.NPC; import org.osbot.rs07.api.model.RS2Object; import org.osbot.rs07.api.ui.RS2Widget; 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 java.awt.*; import java.util.concurrent.TimeUnit; @ScriptManifest(author = "Slakan", name = "LumbyFisher", info = "Will fish as stated.", version = 1.00, logo = "") public final class LumbyFisher extends Script { // PAINT VARIABLE DECLARATIONS private long timeBegan; private int FishbeginningLevel; private int CookbeginningLevel; // ONSTART() METHOD public final void onStart() { timeBegan = System.currentTimeMillis(); FishbeginningLevel = skills.getStatic(Skill.FISHING); CookbeginningLevel = skills.getStatic(Skill.COOKING); } private RS2Widget getMyWidget() { //Replace ids with your ids RS2Widget storedWidget = getWidgets().get(270, 14); return storedWidget; } private RS2Object range() { RS2Object range = getObjects().closest("Range"); return range; } @Override public final int onLoop() throws InterruptedException { Area fishingArea = new Area(3250, 3143, 3239, 3157); Area rangeArea = new Area(3233, 3195, 3230, 3198); Area outsideBuilding = new Area(3237, 3202, 3233, 3199); Position doorPosition = new Position(3235, 3198, 0); NPC fishingSpot = getNpcs().closest("Fishing spot"); if (dialogues.isPendingContinuation()) { dialogues.clickContinue(); } else { if (!inventory.isFull()) { // inventory is not full log("Inventory not full"); if (fishingArea.contains(myPlayer().getPosition())) { // We are at fishing area log("We are at fishing area!"); if (myPlayer().isAnimating()) { log("We are animating for fishing!!"); new ConditionalSleep(5000) { @Override public boolean condition() { return inventory.isFull(); } }.sleep(); } else { if (fishingSpot.interact("Net")) { mouse.moveOutsideScreen(); log("Interact with spot!"); new ConditionalSleep(1000) { @Override public boolean condition() { return myPlayer().isAnimating() || dialogues.clickContinue(); } }.sleep(); } } } else { // We arent at fishing area log("We aint at fishing area!"); // can we see the fishing spot? - We should click it, then we are in area. walking.webWalk(fishingArea); } } else { //inventory full if (inventory.contains("Raw anchovies", "Raw shrimps")) { if (rangeArea.contains(myPlayer())) { log("We are in range area"); // We are at range area! if (myPlayer().isAnimating()) { log("We are animating cooking!"); new ConditionalSleep(1000) { @Override public boolean condition() { return !myPlayer().isAnimating() || !inventory.contains("Raw anchovies", "Raw shrimps"); } }.sleep(); } else { log("We are in range area, not animating and ready to cook!"); // We are inside the range area, we are not animating! We should click range and start cook! if (getMyWidget() == null) { // We see menu log("We can't see menu!"); if (range().isVisible() && range() != null) { if (range().interact()) { sleep(random(2000, 3000)); log("We can click range!"); new ConditionalSleep(5000) { @Override public boolean condition() { return getMyWidget().isVisible(); } }.sleep(); } } } else { log("menu open!"); if (getMyWidget().interact("Cook")) { sleep(random(500, 1000)); new ConditionalSleep(5000) { @Override public boolean condition() { return !myPlayer().isAnimating(); } }.sleep(); } } } } else { // We aint at range area! log("We are not in range area!"); if (inventory.isFull() && inventory.contains("Raw shrimps", "Raw anchovies")) { // We are not outside building & We can walk. log("inventory is full and its either shrimps, anchovies or both."); if (!outsideBuilding.contains(myPlayer()) && walking.walk(outsideBuilding)) { log("Walking to outside area!"); new ConditionalSleep(5000) { @Override public boolean condition() { return outsideBuilding.contains(myPlayer()); } }.sleep(); } else { RS2Object isDoorOpen1 = getObjects().closest(new Filter<RS2Object>() { @Override public boolean match(RS2Object o) { if (o != null && o.hasAction("Open") && o.getPosition().equals(doorPosition)) return true; return false; } }); if (isDoorOpen1 == null) { log("Door open!"); if (!rangeArea.contains(myPlayer())) { walking.walk(rangeArea); } } log("We are outside. Now how about the door?"); if (getDoorHandler().canReachOrOpen(doorPosition)) { // We can handle door! log("We can handle the door??"); // Get the door in position RS2Object doorAtPosition = getObjects().closest(new Filter<RS2Object>() { @Override public boolean match(RS2Object o) { if (o != null && o.getName().equals("Door") && o.getPosition().equals(doorPosition)) return true; return false; } }); if (doorAtPosition != null && doorAtPosition.isVisible()) { RS2Object isDoorOpen = getObjects().closest(new Filter<RS2Object>() { @Override public boolean match(RS2Object o) { if (o != null && o.hasAction("Open") && o.getPosition().equals(doorPosition)) return true; return false; } }); if (isDoorOpen != null && outsideBuilding.contains(myPlayer())) { log("We need to open door"); // This really needs to be checked again, works for now.. isDoorOpen.interact("Open"); } else { log("Door is opened!"); } } else { log("Door is most probably opened. Need failsafes!"); } } else { // Cant handle door. } } } else { // We have full inv, but nothing in there is fishes. } } } else { inventory.dropAllExcept("Small fishing net"); } } } return 300; } // ONPAINT() METHOD public void onPaint(Graphics2D g) { //Levels int FishcurrentLevel = skills.getStatic(Skill.FISHING); int CookcurrentLevel = skills.getStatic(Skill.COOKING); int FishlevelsGained = FishcurrentLevel - FishbeginningLevel; int CooklevelsGained = CookcurrentLevel - CookbeginningLevel; long timeRan = System.currentTimeMillis() - this.timeBegan; g.drawString("Version: 1.00", 6, 185); g.drawString("Runtime: " + ft(timeRan), 6, 200); g.drawString("Fishing start lvl: " + FishbeginningLevel + " + " + FishlevelsGained, 6, 215); g.drawString("Cooking start lvl: " + CookbeginningLevel + " + " + CooklevelsGained, 6, 230); //Color rscolor = new Color(200, 180, 150); //g.setColor(rscolor); //g.fillRect(6,344, 506, 130); } // FORMAT TIME METHOD private String ft(long duration) { String res = ""; long days = TimeUnit.MILLISECONDS.toDays(duration); long hours = TimeUnit.MILLISECONDS.toHours(duration) - TimeUnit.DAYS.toHours(TimeUnit.MILLISECONDS.toDays(duration)); long minutes = TimeUnit.MILLISECONDS.toMinutes(duration) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(duration)); long seconds = TimeUnit.MILLISECONDS.toSeconds(duration) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(duration)); if (days == 0) { res = ("Hours: " + hours + " Minutes: " + minutes + " Seconds: " + seconds); } else { res = ("Days: " + days + "Hours: " + hours + "Minutes: " + minutes + "Seconds: " + seconds); } return res; } }
  8. What is the benefit of the different versions? - If i understand my original one i access myPlayer() to get the position of my entity. The deposit.contains(myPlayer()) would just check if my entity is within the spesific area and deposit.contains(myPosition()) would actually check the position of my entity?
  9. Thank you! You are absolute correct there, i didn't see the mistake i did, but i should have used isOpen() as you say. Much appreciated for the help!
  10. God day, Note that i'm currently a complete beginner on scripting, but i have some strange behavior that when we can interact with deposit box it double clicks it every time. I don't know if this is intentional or something i'm doing wrong? log("Invt full and we are at deposit area!"); if(depositbox.isVisible() && deposit.contains(myPlayer().getPosition())) { // Depositbox is visable and we are in the area log("Deposit box visable and we are in area!"); if(!bank.depositBox.isOpen()) { // Deposit box aint open log("Depositbox aint open"); if(depositbox.interact("Deposit")) { log("Clicking deposit box!"); // We can interact with the deposit box new ConditionalSleep(5000) { @Override public boolean condition() { return bank.depositBox.open(); } }.sleep(); } else { // We cant interact with the deposit box! log("We cant interact with deposit box!"); } } else { // Depositbox is open. log("Depositbox is open!"); } } else { // Deposit box not visable or we are not in area. log("Depositbox or area not there."); }
  11. @Khaleesi Tried to reboot my computer, started it up again in 2.6.12 and runescape client and waited for it to start mining rockfall. The mouse went "bananas" and the logger spammed the text down below. Did save the log, but only the parts that were logged you can see under here.
  12. Yes, tried restarting both osbot and mirror multiple times
  13. Hello, Khaleesi. After the update today 13.01.2021 im having issues with the script in mirror mode, with Osbot 2.6.10. 2.6.11 and 2.6.12. The problem is the rockfall when its going from deposit sack to vain and vica versa. It hovers the rockfall, and does nothing else until another player mines it and it gets a path to the deposit sack. I did try to help it along, but the script only moved the camera and didnt recognize the deposit sack, nor could do anything else. Picture: https://ibb.co/5cf41tn Logger: [INFO][01/13 03:53:31 PM]: Welcome to OSBot 2.6.10! [INFO][01/13 03:53:32 PM]: Loaded 2 RS accounts! [INFO][01/13 03:53:33 PM]: Script list refreshed and loaded 27 scripts. [INFO][01/13 03:53:37 PM]: Updated injection hooks for client revision : 193! [DEBUG][Bot #1][01/13 03:53:37 PM]: Initializing mirror client bot... [INFO][01/13 03:53:37 PM]: Started bot #1 [INFO][Bot #1][01/13 03:53:59 PM]: Initializing 39 API modules... [INFO][Bot #1][01/13 03:54:06 PM]: Loaded 4 built-in random solvers! [INFO][Bot #1][01/13 03:54:06 PM]: Mouse settings loaded for: removed. [INFO][Bot #1][01/13 03:54:06 PM]: Loaded font [INFO][Bot #1][01/13 03:54:07 PM]: 1/9 [INFO][Bot #1][01/13 03:54:08 PM]: 2/9 [INFO][Bot #1][01/13 03:54:08 PM]: 3/9 [INFO][Bot #1][01/13 03:54:09 PM]: 4/9 [INFO][Bot #1][01/13 03:54:09 PM]: 5/9 [INFO][Bot #1][01/13 03:54:10 PM]: 6/9 [INFO][Bot #1][01/13 03:54:10 PM]: 7/9 [INFO][Bot #1][01/13 03:54:10 PM]: 8/9 [INFO][Bot #1][01/13 03:54:11 PM]: 9/9 [INFO][Bot #1][01/13 03:54:12 PM]: Saved settings [INFO][Bot #1][01/13 03:54:12 PM]: Breakmanager started! [WARN][Bot #1][01/13 03:54:12 PM]: The current script is overriding the Break Manager! [WARN][Bot #1][01/13 03:54:12 PM]: Use custom breaks at your own risk. [WARN][Bot #1][01/13 03:54:12 PM]: OSBot is not responsible for any issues with breaking. [INFO][Bot #1][01/13 03:56:21 PM]: Walking to next Pos: [x=3737, y=5674, z=0] [INFO][Bot #1][01/13 03:56:30 PM]: Rockfall found [INFO][Bot #1][01/13 03:56:30 PM]: Mining rockfall [INFO][Bot #1][01/13 03:56:35 PM]: Walking to next Pos: [x=3728, y=5652, z=0] [INFO][Bot #1][01/13 03:56:36 PM]: Walking to next Pos: [x=3731, y=5669, z=0] [INFO][Bot #1][01/13 03:56:43 PM]: Walking to next Pos: [x=3743, y=5674, z=0] [INFO][Bot #1][01/13 03:56:48 PM]: Walking to next Pos: [x=3749, y=5672, z=0] [INFO][Bot #1][01/13 03:56:53 PM]: Walking to next Pos: [x=3735, y=5673, z=0] [INFO][Bot #1][01/13 03:56:56 PM]: Walking to next Pos: [x=3731, y=5665, z=0] [INFO][Bot #1][01/13 03:57:45 PM]: Terminating script Khal Motherlode... [INFO][Bot #1][01/13 03:57:45 PM]: Script Khal Motherlode has exited!
  14. Hello Same issue for me with 2.6.10, 2.6.11 and 2.6.12. If you try the "download button" for OSBOT in the homepage, you will get 502: bad gateway so a server is down and i guess we have to wait until someone comes home from work and investigates the issue Edit: Also update coming for runescape now. Its Wednesday my dudes and ladies, OSBOT dont like wednesdays
×
×
  • Create New...