faruk141 Posted February 21, 2018 Share Posted February 21, 2018 (edited) My second script, so feel free to give ideas to improve my script. Start the script in canifis. Only missinig feature is the looting of the mark of graces. any suggestions? Quote import org.osbot.rs07.api.map.Area; import org.osbot.rs07.api.model.Entity; import org.osbot.rs07.api.ui.Skill; import org.osbot.rs07.script.Script; import org.osbot.rs07.script.ScriptManifest; import java.awt.*; @ScriptManifest(name = "CanifisAgility", author = "faruk141", version = 1.0, info = "", logo = "") public class Main extends Script { private long timeStart; private String state = "Cannifis Rooftop Agility"; @Override public void onStart() { log("Welcome to faruk141 Agility script"); getExperienceTracker().start(Skill.AGILITY); timeStart = System.currentTimeMillis(); } @Override public void onExit() { log("BYE"); // Code here will execute after the script ends } @Override public int onLoop() throws InterruptedException { final Area area7 = new Area(3509, 3474, 3516, 3484); final Area area6 = new Area(3488, 3468, 3504, 3481); final Area area5 = new Area(3477, 3481, 3481, 3487); final Area area4 = new Area(3474, 3491, 3480, 3500); final Area area3 = new Area(3485, 3498, 3493, 3505); final Area area1 = new Area(3508, 3491, 3504, 3498); final Area area2 = new Area(3496, 3503, 3504, 3507); final Area area = new Area(3473, 3461, 3513, 3508); area.setPlane(0); area7.setPlane(2); area6.setPlane(3); area5.setPlane(2); area4.setPlane(3); area3.setPlane(2); area2.setPlane(2); area1.setPlane(2); Entity talltree = objects.closest(10819); Entity gap1 = objects.closest(10820); Entity gap2 = objects.closest(10821); Entity gap3 = objects.closest(10828); Entity gap4 = objects.closest(10822); Entity gap5 = objects.closest(10831); Entity gap6 = objects.closest(10823); Entity gap7 = objects.closest(10832); if (!area.contains(myPosition())) { if (area1.contains(myPlayer())) { if (!myPlayer().isMoving() & !myPlayer().isAnimating()) { gap1.interact("Jump"); sleep(random(2500, 3500)); } } else if (area2.contains(myPlayer())) { if (!myPlayer().isMoving() & !myPlayer().isAnimating()) { gap2.interact("Jump"); sleep(random(2500, 3500)); } } else if (area3.contains(myPlayer())) { if (!myPlayer().isMoving() & !myPlayer().isAnimating()) { gap3.interact("jump"); sleep(random(2500, 3500)); } } else if (area4.contains(myPlayer())) { if (!myPlayer().isMoving() & !myPlayer().isAnimating()) { gap4.interact("jump"); sleep(random(2500, 3500)); } } else if (area5.contains(myPlayer())) { if (!myPlayer().isMoving() & !myPlayer().isAnimating()) { gap5.interact("Vault"); sleep(random(2500, 3500)); } } else if (area6.contains(myPlayer())) { if (!myPlayer().isMoving() & !myPlayer().isAnimating()) { gap6.interact("jump"); sleep(random(2500, 3500)); } }else if (area7.contains(myPlayer())) { if (!myPlayer().isMoving() & !myPlayer().isAnimating()) { gap7.interact("jump"); sleep(random(2500, 3500)); } } } else { getWalking().walk(talltree); if (!myPlayer().isMoving() & !myPlayer().isAnimating()) { talltree.interact("Climb"); sleep(random(2500, 3500)); } } return random(555, 777); } @Override public void onPaint(Graphics2D g) {long timeElapsed = System.currentTimeMillis() - timeStart; long seconds = (timeElapsed / 1000) % 60; long minutes = (timeElapsed / (1000 * 60)) % 60; long hours = (timeElapsed / (1000 * 60 * 60)) % 24; g.setFont(new Font("Trebuchet MS", Font.PLAIN, 14)); g.setColor(Color.white); g.drawString("x", (int)getMouse().getPosition().getX() - 4, (int)getMouse().getPosition().getY() + 5); g.drawString(state, 8, 50); g.drawString("Time Running: " + (hours >= 10 ? "" + hours : "0" + hours) + ":" + (minutes >= 10 ? "" + minutes : "0" + minutes) + ":" + (seconds >= 10 ? "" + seconds : "0" + seconds), 8, 65); g.drawString("XP Gained: " + getExperienceTracker().getGainedXP(Skill.AGILITY) + " (" + getExperienceTracker().getGainedLevels(Skill.AGILITY) + ")", 8, 80); g.drawString("XP per hour: " + getExperienceTracker().getGainedXPPerHour(Skill.AGILITY), 8, 95); } } faruk141_agility.jar Edited February 21, 2018 by faruk141 Quote Link to comment Share on other sites More sharing options...
Butters Posted February 21, 2018 Share Posted February 21, 2018 Great of you for sharing. First things first final Area area7 = new Area(3509, 3474, 3516, 3484); final Area area6 = new Area(3488, 3468, 3504, 3481); final Area area5 = new Area(3477, 3481, 3481, 3487); final Area area4 = new Area(3474, 3491, 3480, 3500); final Area area3 = new Area(3485, 3498, 3493, 3505); final Area area1 = new Area(3508, 3491, 3504, 3498); final Area area2 = new Area(3496, 3503, 3504, 3507); final Area area = new Area(3473, 3461, 3513, 3508); area.setPlane(0); area7.setPlane(2); area6.setPlane(3); area5.setPlane(2); Move all of these outside of onLoop method. There's no need to reinitialize there variables on each loop iteration. Also can do this in one line final Area area = new Area(3473, 3461, 3513, 3508).setPlane(0); Also might want to ditch hardcoded object ids Entity gap1 = objects.closest(10820); Maybe replace with Positions or names Entity gap1 = objects.closest(f -> f.getName().equals("Gap") && f.getPosition().equals(GAP_POSITION)); Also, use conditional sleeps, this is bad if (area1.contains(myPlayer())) { if (!myPlayer().isMoving() & !myPlayer().isAnimating()) { gap1.interact("Jump"); sleep(random(2500, 3500)); } Can't remember the correct syntax, but this would be much better (sleep until you're in the other area) if (area1.contains(myPlayer())) { if (!myPlayer().isMoving() & !myPlayer().isAnimating()) { gap1.interact("Jump"); new ConditionalSleep(5000, 250) { public boolean condition() { return AREA_TO_GO_TO.contains(myPlayer()); } } } 1 Quote Link to comment Share on other sites More sharing options...
faruk141 Posted February 21, 2018 Author Share Posted February 21, 2018 1 hour ago, nosepicker said: Great of you for sharing. First things first final Area area7 = new Area(3509, 3474, 3516, 3484); final Area area6 = new Area(3488, 3468, 3504, 3481); final Area area5 = new Area(3477, 3481, 3481, 3487); final Area area4 = new Area(3474, 3491, 3480, 3500); final Area area3 = new Area(3485, 3498, 3493, 3505); final Area area1 = new Area(3508, 3491, 3504, 3498); final Area area2 = new Area(3496, 3503, 3504, 3507); final Area area = new Area(3473, 3461, 3513, 3508); area.setPlane(0); area7.setPlane(2); area6.setPlane(3); area5.setPlane(2); Move all of these outside of onLoop method. There's no need to reinitialize there variables on each loop iteration. Also can do this in one line final Area area = new Area(3473, 3461, 3513, 3508).setPlane(0); Also might want to ditch hardcoded object ids Entity gap1 = objects.closest(10820); Maybe replace with Positions or names Entity gap1 = objects.closest(f -> f.getName().equals("Gap") && f.getPosition().equals(GAP_POSITION)); Also, use conditional sleeps, this is bad if (area1.contains(myPlayer())) { if (!myPlayer().isMoving() & !myPlayer().isAnimating()) { gap1.interact("Jump"); sleep(random(2500, 3500)); } Can't remember the correct syntax, but this would be much better (sleep until you're in the other area) if (area1.contains(myPlayer())) { if (!myPlayer().isMoving() & !myPlayer().isAnimating()) { gap1.interact("Jump"); new ConditionalSleep(5000, 250) { public boolean condition() { return AREA_TO_GO_TO.contains(myPlayer()); } } } thank you very much for the suggestions. i try to use this in my script. Quote Link to comment Share on other sites More sharing options...
faruk141 Posted February 21, 2018 Author Share Posted February 21, 2018 1 hour ago, nosepicker said: Great of you for sharing. First things first final Area area7 = new Area(3509, 3474, 3516, 3484); final Area area6 = new Area(3488, 3468, 3504, 3481); final Area area5 = new Area(3477, 3481, 3481, 3487); final Area area4 = new Area(3474, 3491, 3480, 3500); final Area area3 = new Area(3485, 3498, 3493, 3505); final Area area1 = new Area(3508, 3491, 3504, 3498); final Area area2 = new Area(3496, 3503, 3504, 3507); final Area area = new Area(3473, 3461, 3513, 3508); area.setPlane(0); area7.setPlane(2); area6.setPlane(3); area5.setPlane(2); Move all of these outside of onLoop method. There's no need to reinitialize there variables on each loop iteration. Also can do this in one line final Area area = new Area(3473, 3461, 3513, 3508).setPlane(0); ok there is a problem. if i move this outside of onLoop then the script stops working..idk why Quote Link to comment Share on other sites More sharing options...
Butters Posted February 21, 2018 Share Posted February 21, 2018 public class Main extends Script { private long timeStart; private String state = "Cannifis Rooftop Agility"; final Area area7 = new Area(3509, 3474, 3516, 3484); final Area area6 = new Area(3488, 3468, 3504, 3481); final Area area5 = new Area(3477, 3481, 3481, 3487); Add those here (class variables). You should get some compiler errors telling you what's wrong if it doesn't work 1 Quote Link to comment Share on other sites More sharing options...
faruk141 Posted February 21, 2018 Author Share Posted February 21, 2018 i dont get errors but the colour from gap1,gap2.... becomes the same and the script doesnt work then Quote Link to comment Share on other sites More sharing options...
scriptersteve Posted February 21, 2018 Share Posted February 21, 2018 here is a snippet from my tzhaars script: private void lootTokkul() { if (getTokkul() != null) { long lastTokkul = getInventory().getAmount("Tokkul"); if (getTokkul().interact("Take")) { new ConditionalSleep(3000, 600) { @Override public boolean condition() throws InterruptedException { return getInventory().getAmount("Tokkul") > lastTokkul; } }.sleep(); } } } then just set getokkul to return true if there is a marks of grace on the floor and chance tokkul to Marks of grace 2 Quote Link to comment Share on other sites More sharing options...
Apaec Posted February 21, 2018 Share Posted February 21, 2018 It might be worth flipping through a few simple java tutorials if you're struggling to understand the errors you're getting ! (: It will be useful in the long run! Apa 1 Quote Link to comment Share on other sites More sharing options...
Butters Posted February 21, 2018 Share Posted February 21, 2018 41 minutes ago, faruk141 said: i dont get errors but the colour from gap1,gap2.... becomes the same and the script doesnt work then Check what Apa said. 10/10 would agree. Anyway if you're still having trouble just throw me a pm with your current code and I'll help out 1 Quote Link to comment Share on other sites More sharing options...
battleguard Posted February 21, 2018 Share Posted February 21, 2018 Instead of calling this line !myPlayer().isMoving() & !myPlayer().isAnimating() On every single area type you should just check the statement at the beginning of your loop and return if either is found to be true. Once you get more java experience you should look into using parallel arrays or creating a class for each area jump action. That way you dont have a long list of if statements. A good way to think of it is what if you had 1000 areas for that course how would you handle it so that you did not have to call 1000 if checks in your main loop. 1 Quote Link to comment Share on other sites More sharing options...
faruk141 Posted February 22, 2018 Author Share Posted February 22, 2018 thank you all, im trying to do my best Quote Link to comment Share on other sites More sharing options...