Prankpatrol
Members-
Posts
2 -
Joined
-
Last visited
Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
Prankpatrol's Achievements
-
Also its start location is set to canafis but might be able to do other courses
-
It uses obstacle actions, selects the next usable obstacle and once its gained exp adds the obstacle to a list of obstacles to not try to click.. first time with Java if you cant tell lmao import org.dreambot.api.Client; import org.dreambot.api.input.Mouse; import org.dreambot.api.methods.container.impl.bank.BankLocation; import org.dreambot.api.methods.event.CameraEvent; import org.dreambot.api.methods.event.CameraEvent$CameraType; import org.dreambot.api.methods.input.Camera; import org.dreambot.api.methods.input.CameraMode; import org.dreambot.api.methods.item.GroundItems; import org.dreambot.api.methods.map.Area; import org.dreambot.api.methods.map.Tile; import org.dreambot.api.methods.skills.Skill; import org.dreambot.api.methods.skills.Skills; 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.wrappers.widgets.Menu; import org.dreambot.api.methods.interactive.Players; import org.dreambot.api.utilities.Logger; import org.dreambot.api.wrappers.interactive.GameObject; import org.dreambot.api.wrappers.interactive.Locatable; import org.dreambot.api.methods.interactive.GameObjects; import org.dreambot.api.wrappers.interactive.GameObject; import org.dreambot.api.wrappers.items.GroundItem; import javax.imageio.ImageIO; import javax.swing.*; import java.io.IOException; import java.net.URL; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.ArrayList; import java.awt.*; import java.awt.Graphics; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.locks.Condition; import java.util.concurrent.TimeUnit; import static org.dreambot.api.methods.input.Camera.*; import static org.dreambot.api.methods.map.Map.*; import static org.dreambot.api.methods.skills.Skills.getExperience; import static org.dreambot.api.methods.walking.impl.Walking.*; @ScriptManifest(name = "KnobbiesAgility", description = "Runs the agility courses", author = "Knob Twister", version = 1.0, category = Category.AGILITY, image = "Ra7CRyp.jpg") public class Agility extends AbstractScript { private long timeBegan; private long timeRan; int beginningXP = 0; int currentXp; private int xpGained; private int currentLevel; private int beginningLevel; private int levelsGained; final Image bg = getImage("https://i.imgur.com/3iEmCnR.png"); private LinkedList<Integer> PreviousObstacles = new LinkedList<Integer>(); int EXP = 0; int animation; GameObject gameObject; State currentState; Area vStart = new Area(new Tile(3497,3492, 0), new Tile(3510, 3476, 0)); public enum State { ON_ROOF, ON_GROUND, AT_STARTZONE, USING_OBSTACLE } public void onStart() { timeBegan = System.currentTimeMillis(); beginningXP = Skills.getExperience(Skill.AGILITY); Logger.log(Skills.getExperience(Skill.AGILITY)); beginningLevel = Skills.getRealLevel(Skill.AGILITY); int playerZ = Players.getLocal().getZ(); if (playerZ==0) { State currentState = State.ON_GROUND; Logger.log("Walking to Start"); } else { State currentState = State.ON_ROOF; } } public void onExit() { } private Image getImage(String url) { try { return ImageIO.read(new URL(url)); } catch (IOException e) { Logger.log("no image downloaded:" + e); } return null; } public void RandomInteract(GameObject obstacle, String Action){ Logger.log("Zoom LeveL"+ getZoom()); int randomNum = ThreadLocalRandom.current().nextInt(1, 3 + 1); Logger.log("random number" + randomNum); if(randomNum==1){ if(!Menu.isVisible() && obstacle.isOnScreen()){ Mouse.click(obstacle.getClickablePoint()); Menu.mouseOverAction(Action); sleep(50,200); Menu.clickAction(Action); } else { mouseRotateToTile(obstacle.getTile()); if(!Menu.isVisible() && obstacle.isOnScreen()) { Mouse.click(obstacle.getClickablePoint()); Menu.mouseOverAction(Action); sleep(50, 200); Menu.clickAction(Action); } else { obstacle.interact(Action); } } } if(randomNum==2) { obstacle.interact(Action); } if(randomNum==3) { while(Players.getLocal().distance(getWalkable(obstacle.getTile()))>=3) { mouseRotateToTile(obstacle.getTile()); Walking.walk(obstacle.getTile()); sleep(500, 700); } obstacle.interact(Action); } } private boolean isPlayerNotMoving() { return !Players.getLocal().isMoving(); } 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 + ":" + minutes + ":" + seconds); } else { res = (days + ":" + hours + ":" + minutes + ":" + seconds); } return res; } public void getNextObstacle() { String[] actions = {"Climb", "Cross", "Leap", "Balance", "Hurdle", "Jump-off", "Jump", "Vault"}; gameObject = GameObjects.closest(go -> go != null && (Arrays.stream(actions).anyMatch(go::hasAction)) && go.canReach() && !PreviousObstacles.contains(go.getID())); Logger.log(gameObject.getActions()[0]); } public void useObstacle() { if (gameObject != null && !Players.getLocal().isMoving() && currentState != State.USING_OBSTACLE) { Logger.log(gameObject.getActions()[0] + gameObject.getID()); switch (gameObject.getActions()[0]) { case "Climb": RandomInteract(gameObject, "Climb"); sleepUntil(() -> animation!=-1, 2000,20); break; case "Cross": RandomInteract(gameObject, "Cross"); sleepUntil(() -> animation!=-1, 2000,20); break; case "Leap": RandomInteract(gameObject, "Leap"); sleepUntil(() -> animation!=-1, 2000,20); break; case "Balance": RandomInteract(gameObject, "Balance"); sleepUntil(() -> animation!=-1, 2000,20); break; case "Hurdle": RandomInteract(gameObject, "Hurdle"); sleepUntil(() -> animation!=-1, 2000,20); break; case "Jump-off": RandomInteract(gameObject, "Jump-off"); sleepUntil(() -> animation!=-1, 2000,20); break; case "Jump": Logger.log("is it on screen:" + gameObject.isOnScreen()); RandomInteract(gameObject, "Jump"); sleepUntil(() -> animation!=-1, 2000,50); break; case "Vault": int randomZoomIn = ThreadLocalRandom.current().nextInt(280, 320); setZoom(randomZoomIn); RandomInteract(gameObject, "Vault"); sleepUntil(() -> animation!=-1, 200,50); break; default: Logger.log("Action not found.." + gameObject.getActions()[0]); // This should never happen if we've already checked for the actions break; } } if( gameObject == null ){ getNextObstacle(); } } @Override public void onPaint(Graphics g) { g.drawImage(bg, 0, 250, null); currentXp = Skills.getExperience(Skill.AGILITY); xpGained = currentXp - beginningXP; timeRan = System.currentTimeMillis() - this.timeBegan; currentLevel = Skills.getRealLevel(Skill.AGILITY); levelsGained = currentLevel - beginningLevel; Color purple = new Color(50, 14, 41); g.setColor(purple); int XPPerHour = (int)(xpGained / ((System.currentTimeMillis() - timeBegan) / 3600000.0D)); g.drawString("Time Spent Rubbing: " + ft(timeRan), 200, 375); g.drawString("XP Splooged: " + xpGained, 200, 390); g.drawString("Splooges Per Hour: " + XPPerHour, 200, 405); g.drawString("Initial Size: " + beginningLevel, 200,420); g.drawString("Current Hardness: " + currentLevel, 200,435); g.drawString("Girth Obtained: " + levelsGained, 200, 450); try{ if (gameObject != null) { Tile tile = gameObject.getTile(); Polygon tilePolygon = tile.getPolygon(); g.setColor(Color.RED); g.drawPolygon(tilePolygon); } } catch (NullPointerException e) { e.printStackTrace(); } } @Override public int onLoop() { if(!isRunEnabled() && (getRunEnergy()>15)){ toggleRun(); } if(gameObject==null){ getNextObstacle(); } GroundItem item = GroundItems.closest(i -> i != null && i.getName().toLowerCase().contains("grace") && i.canReach()); try{ if((item != null) && (item.exists())) { if (item.interact("Take")) { sleepUntil(() -> !item.exists(), 200, 50); } } } catch (NullPointerException e) { e.printStackTrace(); } Logger.log(Skills.getExperience(Skill.AGILITY) + " " + EXP); if (PreviousObstacles.size() > 3) { PreviousObstacles.removeLast(); } Tile playerPosition = Players.getLocal().getTile(); int playerZ = Players.getLocal().getZ(); animation = Players.getLocal().getAnimation(); if (playerZ==0) { if (vStart.contains(playerPosition)) { currentState = State.AT_STARTZONE; } else { currentState = State.ON_GROUND; } } else { if (animation != -1){ currentState = State.USING_OBSTACLE; } else { currentState = State.ON_ROOF; } } switch (currentState) { case ON_GROUND: if(getZoom()>200){ int randomZoomOut = ThreadLocalRandom.current().nextInt(181, 195); setZoom(randomZoomOut); rotateToPitch(383); } Logger.log("On the ground.."); Tile randomTile = vStart.getRandomTile(); mouseRotateToTile(randomTile); Walking.walk(randomTile); break; case AT_STARTZONE: Logger.log("At the start..."); getNextObstacle(); useObstacle(); case USING_OBSTACLE: sleep(150,300); case ON_ROOF: if(EXP != Skills.getExperience(Skill.AGILITY)){ ///Logger.log("GameID:" + gameObject.getID()); // PreviousObstacles.addFirst(gameObject.getID()); EXP = Skills.getExperience(Skill.AGILITY); Logger.log("EXP GAINED, GETTING NEXT OBSTACLE"); for (Integer obstacle : PreviousObstacles) { Logger.log("Obstacle ID: " + obstacle); } getNextObstacle(); } Logger.log("Using next obstacle.." + gameObject.getID()); useObstacle(); break; } sleepUntil(() -> isPlayerNotMoving(), 1000, 50); return 20; } }