/** * Clicks a tile on the minimap. * * @param mobile The mobile to click (global). * @return <tt>true</tt> if the mobile was clicked; otherwise <tt>false</tt>. */ public static boolean walk(final Locatable mobile) { Tile stepDirection = mobile.getLocation(); if (!stepDirection.isOnMap()) { stepDirection = getClosestOnMap(stepDirection); } final Tile tile = stepDirection; return Mouse.apply( new ViewportEntity() { public Point getCentralPoint() { return Calculations.worldToMap(tile.getX(), tile.getY()); } public Point getNextViewportPoint() { return getCentralPoint(); } public boolean contains(final Point point) { return getCentralPoint().distance(point) <= 2; } public boolean validate() { return tile.isOnMap(); } }, new Filter<Point>() { public boolean accept(final Point point) { Mouse.click(true); return true; } }); }
public static boolean directionPassable(Directions d, Tile t) { final int[][] flags = Walking.getCollisionFlags(Game.getPlane()); final Tile offset = Walking.getCollisionOffset(Game.getPlane()).derive(Game.getBaseX(), Game.getBaseY()); int toCheckFlag = flags[t.getX() - offset.getX()][t.getY() - offset.getY()]; return ((toCheckFlag & ~d.getBlockFlag()) == toCheckFlag); }
public static Tile getClosestOnMap(Tile tile) { if (tile.isOnMap()) { return tile; } final Tile location = Players.getLocal().getLocation(); tile = tile.derive(-location.getX(), -location.getY()); final double angle = Math.atan2(tile.getY(), tile.getX()); return new Tile( location.getX() + (int) (16d * Math.cos(angle)), location.getY() + (int) (16d * Math.sin(angle)), tile.getPlane()); }
public void setCameraRelativeTo(final Locatable reference) { final Tile playerTile = Players.getLocal().getLocation(); final Tile referenceTile = reference.getLocation(); if (playerTile.getX() < referenceTile.getX()) { Camera.setAngle(Random.nextInt(250, 270)); } else if (playerTile.getX() > referenceTile.getX()) { Camera.setAngle(Random.nextInt(80, 100)); } else if (playerTile.getY() > referenceTile.getY()) { Camera.setAngle(Random.nextInt(170, 180)); } else if (playerTile.getY() < referenceTile.getY()) { Camera.setAngle(Random.nextInt(350, 360)); } }
public static void teleportToMine() { while (!below.validate()) { while (!Tabs.EQUIPMENT.open()) Tabs.EQUIPMENT.open(); WidgetChild gloves = Widgets.get(387, 26); if (gloves == null) { karajamaGloves = false; getState(); return; } gloves.interact("Teleport"); Task.sleep(4000, 6000); } getState(); // after we teleport to mine we need to get the state }
@Override public void execute() { if (GlobalConstant.WIELDED_ID != -1 && Settings.get(300) == 1000 && Checks.getLP() < Skills.getRealLevel(Skills.CONSTITUTION) * 10 - 200) { if (Players.getLocal().getAppearance()[GlobalConstant.WEAPON] != GlobalConstant.EXCALIBUR && (Tabs.getCurrent().equals(Tabs.INVENTORY) || Tabs.INVENTORY.open())) { final Item excalibur = Inventory.getItem(GlobalConstant.EXCALIBUR); if (excalibur != null) { excalibur.getWidgetChild().click(true); PauseHandler.pause( new PauseHandler.Condition() { @Override public boolean validate() { return Players.getLocal().getAppearance()[GlobalConstant.WEAPON] == GlobalConstant.EXCALIBUR; } }, (long) Random.nextInt(750, 1500)); } } else if (Tabs.getCurrent().equals(Tabs.ATTACK) || Tabs.ATTACK.open()) { final WidgetChild bar = Widgets.get(884, 4); if (bar.validate()) { bar.click(true); PauseHandler.pause( new PauseHandler.Condition() { @Override public boolean validate() { return Settings.get(300) != 1000; } }, (long) Random.nextInt(400, 800)); } } return; } if (GlobalConstant.KEEP_ALIVE && Checks.getLP() < Skills.getRealLevel(Skills.CONSTITUTION) * 0.4f * 10) { if (Checks.isOutside()) { if (Players.getLocal().getAnimation() == -1) { final WidgetChild[] widgets = {Widgets.get(750, 2), Widgets.get(750, 6)}; if (widgets[0].validate() && widgets[1].validate()) { if (widgets[Random.nextInt(0, widgets.length)].interact("Rest")) PauseHandler.pause( new PauseHandler.Condition() { @Override public boolean validate() { return Players.getLocal().getAnimation() != -1; } }, (long) Random.nextInt(750, 1500)); } } Task.sleep(400, 800); } else { if (Calculations.distanceTo(GlobalConstant.TILE_BANK) > 5) { if (Traverse.walk(GlobalConstant.TILE_BANK)) { PauseHandler.pause( new PauseHandler.Condition() { @Override public boolean validate() { return Walking.getDestination() == null || Calculations.distanceTo(Walking.getDestination()) < 8; } }, (long) Random.nextInt(500, 1000)); } } } } else { if (Checks.isOutside()) { final SceneObject ladder = SceneEntities.getNearest(GlobalConstant.ROPE_DOWN_ID); if (ladder != null && ladder.interact("Climb")) PauseHandler.pause( new PauseHandler.Condition() { @Override public boolean validate() { return !Checks.isOutside(); } }, 750l); else if (ladder != null && Calculations.distanceTo(ladder) > 5) PauseHandler.walk(ladder, (long) Random.nextInt(250, 750)); } else if (inCombat() || Players.getLocal().isInCombat()) { final Tile rockTile = GlobalConstant.TILE_ROCKS[Checks.isGold()][Mine.getCurrent()]; if (true || Calculations.distanceTo(GlobalConstant.TILE_BANK) < Calculations.distanceTo(rockTile)) { if (Calculations.distanceTo(GlobalConstant.TILE_BANK) > 6 && Traverse.walk(GlobalConstant.TILE_BANK)) { PauseHandler.pause( new PauseHandler.Condition() { @Override public boolean validate() { return Walking.getDestination() == null || Calculations.distanceTo(Walking.getDestination()) < 8; } }, (long) Random.nextInt(200, 500)); } } else { final SceneObject rock = SceneEntities.getAt(rockTile); final NPC npc = NPCs.getNearest( new Filter<NPC>() { @Override public boolean accept(final NPC npc) { return npc.getInteracting() != null && npc.getInteracting().equals(Players.getLocal()) && Arrays.binarySearch(GlobalConstant.LRC_NPC, npc.getId()) >= 0; } }); if (rock != null && npc != null) { final Tile hardcodedSafe = GlobalConstant.MINE_GOLD && Mine.getCurrent() == 0 ? GlobalConstant.GOLD_SAFE_SPOT : !GlobalConstant.MINE_GOLD && Mine.getCurrent() == 2 ? GlobalConstant.COAL_SAFE_SPOT : null; if (hardcodedSafe != null) { hardcodedSafe .randomize(0, Mine.getCurrent() == 2 ? 4 : 1, 1, Mine.getCurrent() == 0 ? -4 : 1) .clickOnMap(); } else { final Tile[] bounds = rock.getArea().getBoundingTiles(); Arrays.sort( bounds, new Comparator<Tile>() { @Override public int compare(final Tile t1, final Tile t2) { return Calculations.distance(t1, npc.getLocation()) < Calculations.distance(t2, npc.getLocation()) ? 1 : -1; } }); final int[][] flags = Walking.getCollisionFlags(Game.getPlane()); final Tile colOffset = Walking.getCollisionOffset(Game.getPlane()) .derive(Game.getBaseX(), Game.getBaseY()); Tile toWalk = null; for (final int[] offset : new int[][] {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}) { final Tile derive = bounds[0].derive(offset[0], offset[1]); if (Nodes.walkable(flags, colOffset, derive)) { if (toWalk == null || Calculations.distance(derive, npc) > Calculations.distance(toWalk, npc)) toWalk = derive; } } if (toWalk != null) { if (!toWalk.isOnScreen()) Camera.turnTo(toWalk); toWalk.interact("Walk here"); } } Task.sleep(100, 300); final int lp = Checks.getLP(); final Timer timer = new Timer((long) Random.nextInt(7500, 10000)); while (Players.getLocal().isInCombat() && Checks.getLP() >= lp && !Context.get().getScriptHandler().isPaused() && timer.isRunning()) Task.sleep(200, 800); } } } } }