Skip to content

"RevKiller" FIX #271

Description

@stackz55

Il keep it short iv gone through 5 accounts trying this rev script due to me thinking it was user error & since you guys kept saying it works fine well no it didnt work fine, it could barley withdraw items from bank & barley even get to the rev caves , i tryed every single way to try and get it to just run to the caves..

Found 5 reasons why it wouldn't bank & why it would be in a world hop loop!! I am no scripter so idk were to post this but this is the fix & iv been running it fine for about 5 hours now with no issues at all

package net.runelite.client.plugins.microbot.revkiller;

import com.google.inject.Provides;
import net.runelite.api.*;
import net.runelite.api.Point;
import net.runelite.api.coords.LocalPoint;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.kit.KitType;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.microbot.Microbot;
import net.runelite.client.plugins.microbot.Script;
import net.runelite.client.plugins.microbot.breakhandler.BreakHandlerScript;
import net.runelite.client.plugins.microbot.util.Rs2InventorySetup;
import net.runelite.client.plugins.microbot.util.bank.Rs2Bank;
import net.runelite.client.plugins.microbot.util.bank.enums.BankLocation;
import net.runelite.client.plugins.microbot.util.camera.Rs2Camera;
import net.runelite.client.plugins.microbot.util.combat.Rs2Combat;
import net.runelite.client.plugins.microbot.util.dialogues.Rs2Dialogue;
import net.runelite.client.plugins.microbot.util.equipment.Rs2Equipment;
import net.runelite.client.plugins.microbot.util.gameobject.Rs2GameObject;
import net.runelite.client.plugins.microbot.util.grounditem.LootingParameters;
import net.runelite.client.plugins.microbot.util.grounditem.Rs2GroundItem;
import net.runelite.client.plugins.microbot.util.inventory.Rs2Inventory;
import net.runelite.client.plugins.microbot.util.inventory.Rs2ItemModel;
import net.runelite.client.plugins.microbot.util.math.Rs2Random;
import net.runelite.client.plugins.microbot.util.npc.Rs2Npc;
import net.runelite.client.plugins.microbot.util.npc.Rs2NpcModel;
import net.runelite.client.plugins.microbot.util.player.Rs2Player;
import net.runelite.client.plugins.microbot.util.player.Rs2PlayerModel;
import net.runelite.client.plugins.microbot.util.player.Rs2Pvp;
import net.runelite.client.plugins.microbot.util.prayer.Rs2Prayer;
import net.runelite.client.plugins.microbot.util.prayer.Rs2PrayerEnum;
import net.runelite.client.plugins.microbot.util.security.Login;
import net.runelite.client.plugins.microbot.util.walker.Rs2Walker;
import net.runelite.client.plugins.microbot.util.widget.Rs2Widget;
import net.runelite.http.api.worlds.World;

import java.awt.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;

public class revkillerscript extends Script {
private revKillerConfig config;
@provides
revKillerConfig provideConfig(ConfigManager configManager) {
return configManager.getConfig(revKillerConfig.class);
}
private ItemManager itemManager;
int potthresh = generateRandomNumber(3,6);
int potsUntilSwap = 0;
private boolean hoppedWorld = false;

WorldPoint cave = new WorldPoint(3076, 3652, 0);

WorldPoint caveBeginning = new WorldPoint(3201, 10058, 0);

public static boolean test = false;
public WorldPoint selectedWP;
public volatile String selectedRev;
public int selectedArrow;
int LowOnArrowsCount = generateRandomNumber(30,60);
long randomdelay = generateRandomNumber(350,1000);
protected ScheduledFuture<?> checkForPKerFuture;
protected ScheduledFuture<?> healthCheckFuture;
public volatile boolean weDied = false;
private boolean useTimedWorldHopper = false;
private long howLongUntilHop = 0;
public volatile boolean shouldFlee = false;
private long startTime = System.currentTimeMillis();
public volatile boolean firstRun = false;


public boolean run(revKillerConfig config) {
    this.config = config;
    Microbot.enableAutoRunOn = false;
    mainScheduledFuture = scheduledExecutorService.scheduleWithFixedDelay(() -> {
        try {

            if (!Microbot.isLoggedIn()){
                if(!timeToBreak()){
                    if(selectedRev.contains("knight")) {
                        logBackIn();
                    }
                }
                return;
            }

            if (!super.run()) return;
            long startTime = System.currentTimeMillis();

            useTimedWorldHopper = config.shouldUseTimedWorldHopper();
            randomdelay = generateRandomNumber(400,900);
            if(howLongUntilHop == 0){
                if(useTimedWorldHopper) {
                    howLongUntilHop = config.hopInMinutes();
                }
            }

            if(shouldFlee){
                if(weDied){
                    shouldFlee = false;
                    Rs2Walker.setTarget(null);
                }
                return;
            }

            var inventorySetup = new Rs2InventorySetup(config.inventorySetup().getName(), mainScheduledFuture);

            if(firstRun || weDied) {
                Microbot.log("It's our first run or we died!");
                sleep(10000,20000); //Allow us some time to fully die so we properly match that equipment is missing. replace with a sleepUntil
                if (inventorySetup.doesEquipmentMatch()) {
                } else {
                    if(!Rs2Bank.isOpen()){
                        Rs2Bank.walkToBankAndUseBank();
                    }
                    if(Rs2Bank.isOpen()) inventorySetup.loadEquipment();
                }

                if(inventorySetup.doesEquipmentMatch()){
                    weDied = false;
                    firstRun = false;
                }
                return;
            }

            if(BreakHandlerScript.lockState.get()){
                BreakHandlerScript.lockState.set(false);
            }

            if(areWeEquipped()){

                if(Rs2Player.getWorldLocation().distanceTo(selectedWP)>12){

                    WalkToRevs();

                } else {

                    equipArrows();

                    drinkPotion();

                    loot();

                    specialAttack();

                    if(selectedRev.contains("knight")){
                        kiteTheKnight();
                    } else {
                        fightrev(config);
                    }

                    specialAttack();

                    loot();

                }
            }

            if(!areWeEquipped()||isItTimeToGo()){
                Bankfortrip();
            }
            
            long endTime = System.currentTimeMillis();
            long totalTime = endTime - startTime;
            System.out.println("Total time for loop " + totalTime);

        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }, 0, randomdelay, TimeUnit.MILLISECONDS);
    return true;
}

@Override
public void shutdown() {
    super.shutdown();
}

public void EatFood(){
    drinkStamPotion();

    if(Rs2Player.getHealthPercentage() <= generateRandomNumber(70,80)){
        if(Rs2Inventory.contains(ItemID.SHARK)){
            if(Rs2Inventory.interact(ItemID.SHARK, "Eat")){
                sleepUntil(()-> isPkerAround(),generateRandomNumber(2500,3500));
            }
        }
    }
}

public boolean playerCheck(){
    List<Rs2PlayerModel> playerlist = new ArrayList<Rs2PlayerModel>();
    playerlist.addAll(Rs2Player.getPlayers(it->it!=null&&it.getWorldLocation().distanceTo(Rs2Player.getWorldLocation())<= 8&&!it.equals(Rs2Player.getLocalPlayer())).collect(Collectors.toList()));

    if(!playerlist.isEmpty()){
        if(!Rs2Player.isInCombat()) {
            Microbot.log("There's another player here hopping.");
            hopToNewWorld();
        }
        return true;
    }
    return false;
}

public boolean weAreInCombat(){

    if(Rs2Player.isAnimating()){
        return true;
    }

    if(!Rs2Player.isAnimating()){
        Microbot.log("Checking if we're in combat");
        sleepUntil(()-> Rs2Player.isAnimating()||isPkerAround(), generateRandomNumber(2000,2300));
        if(Rs2Player.isAnimating()){
            return true;
        }
    }

    return false;
}

public void kiteTheKnight(){
    WorldPoint startTile = new WorldPoint(3237,10225,0);
    WorldPoint secondTile = new WorldPoint(3244,10225,0);
    WorldPoint thirdTile = new WorldPoint(3242,10225,0);
    WorldPoint fourthTile = new WorldPoint(3244,10222,0);
    WorldPoint fifthTile = new WorldPoint(3248,10225,0);

    WorldPoint jammedTile = new WorldPoint(3244,10224,0);

    Rs2Walker.setTarget(null);

    if(shouldFlee){
        return;
    }

    if(Rs2Player.getWorldLocation().equals(fifthTile)){
        if(weAreInCombat()) {
            Microbot.log("We've all ready jammed the knight");
            return;
        } else {
            Microbot.log("We need to click the rev.");
            if(Rs2Npc.getNpc("Revenant knight")!=null && Rs2Npc.getNpc("Revenant knight").getWorldLocation().distanceTo(jammedTile)<=2) {
                if (Rs2Npc.interact(Rs2Npc.getNpc("Revenant knight"), "Attack")) {
                    Microbot.log("We attacked the knight");
                    return;
                }
            } else {
                Microbot.log("We need to re-jam the knight");
            }
        }
    } else {
        //if we come back from the bank and the rev is all ready jammed.
        if(Rs2Npc.getNpc("Revenant knight")!=null && Rs2Npc.getNpc("Revenant knight").getWorldLocation().distanceTo(jammedTile)<=2){
            if(!weAreInCombat()){
                if(playerCheck()){return;}
                if(!Rs2Player.getWorldLocation().equals(fifthTile)){
                    Rs2Walker.walkCanvas(fifthTile);
                    sleepUntil(() -> Rs2Player.isMoving(), Rs2Random.between(1000, 3000));
                    sleepUntil(() -> !Rs2Player.isMoving(), Rs2Random.between(2000, 3000));
                }
                if (Rs2Npc.interact(Rs2Npc.getNpc("Revenant knight"), "Attack")) {
                    Microbot.log("We attacked the knight");
                    return;
                }
            }
        }
    }

    if(playerCheck()){return;}

    if(Rs2GroundItem.isItemBasedOnValueOnGround(500,10)){
        return;
    }

    if(!areWeEquipped()||isItTimeToGo()){
        return;
    }

    if(!Rs2Player.getWorldLocation().equals(startTile)){
        while(!Rs2Player.getWorldLocation().equals(startTile)){
            if(!super.isRunning()){break;}
            if(isPkerAround()){break;}
            if(!WeAreInTheCaves()){break;}
            if(!Microbot.isLoggedIn()){return;}

            moveCameraToTile(startTile);

            Rs2Walker.walkCanvas(startTile);
            sleepUntil(()-> Rs2Player.isMoving(), Rs2Random.between(1000,3000));
            sleepUntil(()-> !Rs2Player.isMoving()||Rs2Player.getWorldLocation().equals(startTile), Rs2Random.between(3000,6000));
        }
    }

    if(Rs2Player.getWorldLocation().equals(startTile)){
        if(playerCheck()){return;}
        if(Rs2Npc.getNpc("Revenant knight") == null) return;

        if(Rs2Npc.attack("Revenant knight")){
            Microbot.log("We attacked the knight");
            sleepUntil(()-> Rs2Player.isMoving(), Rs2Random.between(1000,3000));
            sleepUntil(()-> !Rs2Player.isMoving(), Rs2Random.between(2000,3000));
        }
    }

    if(!Rs2Player.getWorldLocation().equals(secondTile)){
        while(!Rs2Player.getWorldLocation().equals(secondTile)){
            if(!super.isRunning()){break;}
            if(isPkerAround()){break;}
            if(!WeAreInTheCaves()){break;}
            if(!Microbot.isLoggedIn()){return;}

            moveCameraToTile(secondTile);

            Rs2Walker.walkCanvas(secondTile);
            sleepUntil(()-> Rs2Player.isMoving(), Rs2Random.between(1000,3000));
            sleepUntil(()-> !Rs2Player.isMoving()||Rs2Player.getWorldLocation().equals(secondTile), Rs2Random.between(3000,6000));
        }
    }

    if(Rs2Player.getWorldLocation().equals(secondTile)){
        if(Rs2Npc.getNpc("Revenant knight")!=null){
            if(!Rs2Npc.getNpc("Revenant knight").getWorldLocation().equals(thirdTile)){
                int io = 0;
                int tries = Rs2Random.between(40,80);
                while(!Rs2Npc.getNpc("Revenant knight").getWorldLocation().equals(thirdTile)){
                    if(!super.isRunning()){break;}
                    if(isPkerAround()){break;}
                    if(!WeAreInTheCaves()){break;}
                    if(io > tries){break;}
                    if(!Microbot.isLoggedIn()){return;}
                    if(Rs2Npc.getNpc("Revenant knight").getWorldLocation().distanceTo(Rs2Player.getWorldLocation())<=1 && !Rs2Npc.getNpc("Revenant knight").getWorldLocation().equals(thirdTile)){
                        Microbot.log("Rev is on a bad tile breaking loop");
                        return;
                    }
                    if(!Rs2Player.getWorldLocation().equals(secondTile)){
                        moveCameraToTile(secondTile);
                        Rs2Walker.walkCanvas(secondTile);
                        sleepUntil(()-> Rs2Player.getWorldLocation().equals(secondTile), Rs2Random.between(3000,6000));
                    }
                    sleepUntil(()-> Rs2Npc.getNpc("Revenant knight").getWorldLocation().equals(thirdTile), Rs2Random.between(250,500));
                    io++;
                }
            }
        }
    }

    if(Rs2Npc.getNpc("Revenant knight").getWorldLocation().equals(thirdTile)){
        moveCameraToTile(fourthTile);
        Rs2Walker.walkCanvas(fourthTile);
        sleepUntil(()-> Rs2Player.isMoving(), Rs2Random.between(1000,3000));
        sleepUntil(()-> !Rs2Player.isMoving(), Rs2Random.between(2000,3000));
        if(!Rs2Player.getWorldLocation().equals(fifthTile)){
            while(!Rs2Player.getWorldLocation().equals(fifthTile)) {
                if(!super.isRunning()){break;}
                if(isPkerAround()){break;}
                if(!WeAreInTheCaves()){break;}
                if(!Microbot.isLoggedIn()){return;}
                moveCameraToTile(fifthTile);
                Rs2Walker.walkCanvas(fifthTile);
                sleepUntil(() -> Rs2Player.isMoving(), Rs2Random.between(1000, 3000));
                sleepUntil(() -> !Rs2Player.isMoving(), Rs2Random.between(2000, 3000));
            }
        }
    }

    if(Rs2Player.getWorldLocation().equals(fifthTile)) {
        if (Rs2Npc.attack("Revenant knight")) {
            Microbot.log("We attacked the knight");
            Microbot.log("Rev should be locked");
        }
    }

}

public void moveCameraToTile(WorldPoint wp){
    LocalPoint lp = LocalPoint.fromWorld(Microbot.getClient().getWorldView(Microbot.getClient().getTopLevelWorldView().getId()), wp);
    Rectangle chatBox = null;
    Point canvasPoint = null;

    if(lp != null) {
        canvasPoint = Perspective.localToCanvas(Microbot.getClient(), lp, wp.getPlane());
        if(canvasPoint != null) {
            chatBox = Rs2Widget.getWidget(162,0).getBounds();
        }
    }

    if(canvasPoint != null && chatBox != null) {
        if (!Rs2Camera.isTileOnScreen(lp) || chatBox.contains(canvasPoint.getX(), canvasPoint.getY())) {
            Rs2Camera.turnTo(lp);
            sleep(0, 250);
        }
    }
}

public boolean WeAreInTheCaves(){
    return Rs2Player.getWorldLocation().getY() > 9000;
}

public boolean timeToBreak(){
    return BreakHandlerScript.breakIn <= 300 && BreakHandlerScript.breakIn != -1;
}

public void handleBreaks() {
    if (timeToBreak()) {
        if(Rs2Bank.isOpen()){
            if(Rs2Bank.closeBank()){
                sleepUntil(()-> !Rs2Bank.isOpen(), generateRandomNumber(2000,5000));
            }
        }
        if(!Rs2Bank.isOpen()) {
            sleepUntil(() -> BreakHandlerScript.isBreakActive(), 600000);
        }
    }
}

public void stopTeleSpam(){
    if(BankLocation.EDGEVILLE.getWorldPoint().distanceTo(Rs2Player.getWorldLocation()) < 30){
        teleToFerox();
    }
}

public void openBankCheck(){
    if(Rs2Bank.isOpen()){
        if(Rs2Bank.closeBank()){
            sleepUntil(()-> Rs2Bank.isOpen(), Rs2Random.between(2000,4000));
        }
    }
}

public void WalkToRevs(){
    if(!WeAreInTheCaves()){
        //we must walk to the cave entrence
        if(Rs2Player.getWorldLocation().distanceTo(cave) > 6){
            reJfount();
            stopTeleSpam();
            if(selectedRev.contains("knight")){
                openBankCheck();
                if(Rs2Walker.walkTo(selectedWP)){
                    Microbot.log("Teleporting to level 40 rev cave.");
                }
            } else {
                if(Rs2Walker.walkTo(cave)){
                    Microbot.log("Walking to cave. with new method.");
                }
            }
        } else {
            if(!Rs2Dialogue.isInDialogue()){
                Microbot.log("At the cave, clicking.");
                if(Rs2GameObject.interact(31555, "Enter")){
                    sleepUntil(()-> Rs2Dialogue.isInDialogue(), generateRandomNumber(1000,3000));
                }
            }
            if(Rs2Dialogue.isInDialogue()){
                if(Rs2Dialogue.hasContinue()){
                    Rs2Dialogue.clickContinue();
                    sleep(500,1000);
                }
                if(Rs2Dialogue.getDialogueOption("Yes, don't", false)!=null){
                    Rs2Dialogue.clickOption("Yes, don't", false);
                    sleep(500,1000);
                }
                if(Rs2Dialogue.getDialogueOption("Accept", false)!=null){
                    Rs2Dialogue.clickOption("Accept", false);
                    sleep(500,1000);
                }
            }
        }
    } else {
        if(WeAreInTheCaves()){
            if(Rs2Walker.walkTo(selectedWP)){
                Microbot.log("Walking to Revs. with new method.");
            }
        }
    }
}

public boolean TeleTimerIsThere(){

    if(!Rs2Widget.isWidgetVisible(162, 558)){
        return true;
    }

    return false;
}

public void hopWorldsBasedOnTimer(){
    if(useTimedWorldHopper) {
        long currentTime = System.currentTimeMillis();
        if (currentTime - startTime >= howLongUntilHop * 60 * 1000) {
            Microbot.log("Hopping to a new world, it's been "+howLongUntilHop+" minutes");
            if(Rs2Player.isInCombat()){
                sleepUntil(()-> isPkerAround() || !Rs2Player.isInCombat(), generateRandomNumber(10000,20000));
                if(isPkerAround()){
                    return;
                }
            }
            hopToNewWorld();
            startTime = currentTime;
            howLongUntilHop = config.hopInMinutes();
            int mixUp = Rs2Random.between(5,10);
            int io = 0;
            while (io < mixUp){
                if(!super.isRunning()){
                    break;
                }
                if(Rs2Random.between(0,100) < 50) {
                    if (howLongUntilHop > 8 * 60 * 1000) {
                        howLongUntilHop -= 2 * 60 * 1000;
                    }
                }
                if(Rs2Random.between(0,100) < 50) {
                    if (howLongUntilHop < 30 * 60 * 1000) {
                        howLongUntilHop += 2 * 60 * 1000;
                    }
                }
                if(howLongUntilHop < 8 || howLongUntilHop > 30){
                    howLongUntilHop = config.hopInMinutes();
                }
                io++;
            }
            Microbot.log("We'll hop to a new world in "+howLongUntilHop+" minutes");
        }
    }
}
public void getAwayFromPkerKnight(){
    Microbot.log("Attempting to logout");
    Rs2Walker.setTarget(null);
    int io = 0;
    int tries = 10;
    if (Microbot.isLoggedIn()) {
        while (Microbot.isLoggedIn()) {
            if (!super.isRunning()) {
                break;
            }
            if (!Microbot.isLoggedIn()) {
                break;
            }
            Rs2Player.logout();
            sleepUntil(() -> !Microbot.isLoggedIn() || Rs2Player.isInCombat(), Rs2Random.between(1500, 3000));
            if(Rs2Player.isInCombat() && Microbot.isLoggedIn() || io>=tries){
                Microbot.log("We can't log out, running away instead.");
                break;
            }
            io++;
        }
    }

    if (!Microbot.isLoggedIn()) {
        logBackIn();
        shouldFlee = false;
        return;
    }

    if (isPkerAround() && Microbot.isLoggedIn()) {
        getAwayFromPker();
        shouldFlee = false;
        return;
    }

    shouldFlee = false;
    Rs2Walker.setTarget(null);
}

public void logBackIn(){
    if (!Microbot.isLoggedIn()) {
        while (!Microbot.isLoggedIn()) {
            if (!super.isRunning()) {
                break;
            }
            if (Microbot.isLoggedIn()) {
                break;
            }
            sleep(1000, 3000);
            if (!Microbot.isLoggedIn()) {
                new Login(Login.getRandomWorld(true));
                sleepUntil(() -> Microbot.isLoggedIn(), Rs2Random.between(10000, 20000));
            }
        }
        shouldFlee = false;
    }
}

public void getAwayFromPker(){
    // code to run or teleport from pker
    Microbot.log("Attemping to get away from the PKer.");
    //kill the walker incase we were walking.
    Rs2Walker.setTarget(null);

    if(!Rs2Player.isTeleBlocked()){
        Microbot.log("At least we're not teleblocked.");
        enablePrayer();
        if(Rs2Pvp.getWildernessLevelFrom(Rs2Player.getWorldLocation()) > 30) {
            while (Rs2Pvp.getWildernessLevelFrom(Rs2Player.getWorldLocation()) > 30) {
                if (!super.isRunning()) break;
                if(!shouldFlee) break;
                if(weDied){
                    shouldFlee = false;
                    return;
                }

                Microbot.log("Walking to below");
                WorldPoint safe1 = (new WorldPoint(3199, 10071, 0));
                WorldPoint safe2 = (new WorldPoint(3226, 10067, 0));

                if(Rs2Player.getWorldLocation().distanceTo(safe1) <= Rs2Player.getWorldLocation().distanceTo(safe2)){
                    Rs2Walker.walkTo(safe1, Rs2Player.getWorldLocation().distanceTo(safe1) - (generateRandomNumber(2,5)));
                }

                if(Rs2Player.getWorldLocation().distanceTo(safe1) > Rs2Player.getWorldLocation().distanceTo(safe2)){
                    Rs2Walker.walkTo(safe2, Rs2Player.getWorldLocation().distanceTo(safe2) - (generateRandomNumber(2,5)));
                }

                if (Rs2Pvp.getWildernessLevelFrom(Rs2Player.getWorldLocation()) <= 30) {
                    break;
                }
            }
        }
        if(Rs2Pvp.getWildernessLevelFrom(Rs2Player.getWorldLocation()) >= 20 && Rs2Pvp.getWildernessLevelFrom(Rs2Player.getWorldLocation()) <= 30) {
            while (Rs2Pvp.getWildernessLevelFrom(Rs2Player.getWorldLocation()) >= 20 && Rs2Pvp.getWildernessLevelFrom(Rs2Player.getWorldLocation()) <= 30) {
                Microbot.log("Attempting to teleport via glory");
                if (!super.isRunning()) break;
                if(!shouldFlee) break;
                if(weDied){
                    shouldFlee = false;
                    return;
                }

                if (Rs2Equipment.interact(EquipmentInventorySlot.AMULET, "Edgeville")) {
                    sleepUntil(()-> TeleTimerIsThere() || Rs2Player.getAnimation() == 714,generateRandomNumber(250,500));
                    sleepUntil(()-> !TeleTimerIsThere() || Rs2Player.getAnimation() == 714,generateRandomNumber(1300,1500));
                    if(Rs2Player.getAnimation() == 714){
                        //we successfully teleported out
                        sleepUntil(()-> !Rs2Player.isAnimating() && !WeAreInTheCaves(),generateRandomNumber(4000,6000));
                    }
                }
                if (!WeAreInTheCaves()) {
                    sleep(10000,15000);
                    hopToNewWorld();
                    break;
                }
                if (Rs2Player.isTeleBlocked()) {
                    break;
                }
            }
            Rs2Prayer.disableAllPrayers();
            shouldFlee = false;
            return;
        }
        if(Rs2Pvp.getWildernessLevelFrom(Rs2Player.getWorldLocation()) <= 20) {
            while (Rs2Pvp.getWildernessLevelFrom(Rs2Player.getWorldLocation()) <= 20) {
                Microbot.log("Attempting to teleport via dueling");
                if (!super.isRunning()) break;
                if(weDied){
                    shouldFlee = false;
                    return;
                }
                if(!shouldFlee) break;

                if (Rs2Equipment.interact(EquipmentInventorySlot.RING, "Ferox Enclave")) {
                    sleepUntil(()-> TeleTimerIsThere() || Rs2Player.getAnimation() == 714,generateRandomNumber(250,500));
                    sleepUntil(()-> !TeleTimerIsThere() || Rs2Player.getAnimation() == 714,generateRandomNumber(1300,1500));
                    if(Rs2Player.getAnimation() == 714){
                        //we successfully teleported out
                        sleepUntil(()-> !Rs2Player.isAnimating() && !WeAreInTheCaves(),generateRandomNumber(4000,6000));
                    }
                }
                if (!WeAreInTheCaves()) {
                    sleep(10000,15000);
                    hopToNewWorld();
                    break;
                }
                if (Rs2Player.isTeleBlocked()) {
                    break;
                }
            }
        }
        Rs2Prayer.disableAllPrayers();
        shouldFlee = false;
    } else {
        Microbot.log("We're teleblocked! Attempting to run to the bank");
        enablePrayer();
        Rs2Walker.walkTo(BankLocation.FEROX_ENCLAVE.getWorldPoint());
        Rs2Prayer.disableAllPrayers();
        shouldFlee = false;
        Rs2Walker.setTarget(null);
    }
}

public void enablePrayer(){
    if(!Rs2Prayer.isPrayerActive(Rs2PrayerEnum.PROTECT_MAGIC)) {
        if (Rs2Player.getRealSkillLevel(Skill.PRAYER) >= 37) {
            if (Rs2Player.getBoostedSkillLevel(Skill.PRAYER) > 0) {
                Rs2Prayer.toggle(Rs2PrayerEnum.PROTECT_MAGIC);
            }
        }
    }
}

public void fightrev(revKillerConfig config){
    Rs2NpcModel Rev = (Rs2Npc.getNpc(config.selectedRev().getName()));
    if(Rev!=null){

        if(playerCheck()){return;}

        if(!Rev.isInteracting() && !Rs2Player.isInteracting() && !Rev.isDead()) {
            if(useTimedWorldHopper){
                hopWorldsBasedOnTimer();
            }

            if(Rev==null){return;}

            Microbot.log("Attacking Rev");
            if (Rs2Npc.interact(Rev, "Attack")) {
                sleepUntil(() -> Rev.isDead() || !Rs2Player.isInCombat() || Rs2GroundItem.isItemBasedOnValueOnGround(500,12) || isItTimeToGo() || Rs2Player.getHealthPercentage() <= generateRandomNumber(70, 80), generateRandomNumber(60000, 120000));
                hoppedWorld=false;
            }
        }

        if(Rev.isInteracting()) {
            if(hoppedWorld) {
                Microbot.log("Rev is attacking us attacking back.");
                if (Rs2Npc.interact(Rev, "Attack")) {
                    hoppedWorld=false;
                    sleepUntil(() -> Rev.isDead() || !Rs2Player.isInCombat() || Rs2GroundItem.isItemBasedOnValueOnGround(500, 12) || isItTimeToGo() || Rs2Player.getHealthPercentage() <= generateRandomNumber(70, 80), generateRandomNumber(60000, 120000));
                }
            }
        }

    } else {
        if(selectedRev.equals("Revenant goblin") || selectedRev.contains("imp")){
            if(selectedRev.contains("goblin")){
                selectedWP = new WorldPoint(3199, 10071, 0);
                selectedRev = "Revenant imp";
                return;
            }
            if(selectedRev.contains("imp")){
                selectedWP = new WorldPoint(3226, 10067, 0);
                selectedRev = "Revenant goblin";
                return;
            }
        }
        if(!Rs2Player.isInCombat()) {
            Microbot.log("No revs found, hopping");
            sleepUntil(()-> isPkerAround(), generateRandomNumber(0,1200));
            hopToNewWorld();
        }
    }
}

public void startHealthCheck() {
    Microbot.log("Health detection started");
    healthCheckFuture = scheduledExecutorService.scheduleWithFixedDelay(
            this::futureEatFood,
            0,
            1000,
            TimeUnit.MILLISECONDS
    );
}

public void futureEatFood(){
    if(!Microbot.isLoggedIn()){
        return;
    }

    EatFood();
}

public void startPkerDetection() {
    Microbot.log("PKer detection started");
    checkForPKerFuture = scheduledExecutorService.scheduleWithFixedDelay(
            this::futurePKCheck,
            0,
            250,
            TimeUnit.MILLISECONDS
    );
}

public void stopFutures() {
    if(checkForPKerFuture!=null){
        checkForPKerFuture.cancel(true);
    }
    if(healthCheckFuture!=null) {
        healthCheckFuture.cancel(true);
    }
}

public void futurePKCheck(){
    try {
        if(!selectedRev.contains("knight")) {
            if (isPkerAround() && !shouldFlee) {
                shouldFlee = true;
                getAwayFromPker();
            }
        } else {
            if (isPkerAround() && !shouldFlee) {
                shouldFlee = true;
                getAwayFromPkerKnight();
            }
        }
    } catch (Exception e) {
        Microbot.log("Error during PK check: " + e.getMessage());
        e.printStackTrace();
    }
}

public void reJfount(){
    int rejat = Rs2Random.between(10,30);
    int runener = Rs2Random.between(50,65);
    while(Rs2Player.getBoostedSkillLevel(Skill.PRAYER) < rejat || Rs2Player.getRunEnergy() <= runener){
        if (!super.isRunning()) {
            break;
        }
        if(Rs2Bank.isOpen()){
            if(Rs2Bank.closeBank()){
                sleepUntil(()-> !Rs2Bank.isOpen(), Rs2Random.between(2000,4000));
            }
        } else {
            GameObject rej = Rs2GameObject.get("Pool of Refreshment", true);
            if(rej == null){
                return;
            }
            Microbot.log("Drinking");
            if(Rs2GameObject.interact(rej, "Drink")){
                sleepUntil(()-> Rs2Player.isMoving(), Rs2Random.between(1000,3000));
                sleepUntil(()-> !Rs2Player.isMoving(), Rs2Random.between(5000,10000));
                sleepUntil(()-> Rs2Player.isAnimating(), Rs2Random.between(1000,4000));
                sleepUntil(()-> !Rs2Player.isAnimating(), Rs2Random.between(1000,4000));
            }
        }
        if(Rs2Player.getRealSkillLevel(Skill.PRAYER) <= rejat){
            break;
        }
        if(Rs2Player.getBoostedSkillLevel(Skill.PRAYER) >= rejat || Rs2Player.getRunEnergy() >= runener){
            break;
        }

    }
}

public void hopToNewWorld(){
    // Thank you george!

    World currentWorld = Microbot.getWorldService().getWorlds().findWorld(Microbot.getClient().getWorld());

    if(currentWorld == null){
        Microbot.log("Couldn't find our world");
        return;
    }

    int newRandomWorld = Login.getRandomWorld(true, currentWorld.getRegion());

    if(newRandomWorld == 0){
        Microbot.log("Couldn't find a new random world");
        return;
    }

    Microbot.log("We're going to world " + newRandomWorld);
    int attempts = 0;
    int tries = generateRandomNumber(2,6);
    while(Rs2Player.getWorld() != newRandomWorld){
        if (!super.isRunning()) {
            break;
        }
        if(Microbot.hopToWorld(newRandomWorld)){
            sleepUntil(() -> !Microbot.isHopping() || isPkerAround() || Rs2Player.getWorld() == newRandomWorld, generateRandomNumber(5000, 10000));
        }
        if(Rs2Player.getWorld() == newRandomWorld){
            break;
        }
        if(attempts>=tries){
            break;
        }
        sleep(500,700);
        attempts++;
    }
    hoppedWorld = true;
}

public void equipArrows(){
    if(Rs2Inventory.contains(selectedArrow)){
        if(Rs2Inventory.interact(selectedArrow, "Wield")){
            sleepUntil(()-> !Rs2Inventory.contains(selectedArrow), generateRandomNumber(5000,15000));
        }
    }
}

public void specialAttack(){
    if(50>generateRandomNumber(0,100)) {
        if (Rs2Combat.getSpecEnergy() >= generateRandomNumber(600,1000)) {
            if(!Rs2Combat.getSpecState()) {
                if (Rs2Combat.setSpecState(true)) {
                    sleepUntil(() -> isPkerAround(), generateRandomNumber(350, 600));
                }
            }
        }
    }
}

public void drinkPotion(){
    if(!Rs2Player.hasRangingPotionActive(potthresh)){
        Microbot.log("Drinking ranging potion");
        if(potsUntilSwap>=generateRandomNumber(2,10)){
            potthresh = generateRandomNumber(3,6);
            potsUntilSwap=0;
        }
        if(Rs2Inventory.get(it->it!=null&&it.getName().contains("Ranging"))!=null){
            if(Rs2Inventory.interact(Rs2Inventory.get(it->it!=null&&it.getName().contains("Ranging")),"Drink")){
                sleepUntil(()-> isPkerAround(), generateRandomNumber(2500,3500));
                potsUntilSwap++;
            }
        }
    }
}

public void drinkStamPotion(){
    if(!Rs2Player.hasStaminaActive()){
        if(Rs2Player.getRunEnergy() <= generateRandomNumber(20,40)) {
            Microbot.log("Drinking stamina potion");
            if (Rs2Inventory.get(it -> it != null && it.getName().contains("Stamina")) != null) {
                if (Rs2Inventory.interact(Rs2Inventory.get(it -> it != null && it.getName().contains("Stamina")), "Drink")) {
                    sleepUntil(() -> Rs2Player.hasStaminaActive(), generateRandomNumber(500, 1000));
                }
            }
        }
    }
}

public void loot(){
    if(Rs2GroundItem.isItemBasedOnValueOnGround(500,10)){
        while(Rs2GroundItem.isItemBasedOnValueOnGround(500,10)){
            if(!super.isRunning()){
                break;
            }
            if(Rs2Inventory.isFull()){
                if(Rs2Inventory.contains(ItemID.SHARK)){
                    if(Rs2Inventory.interact(ItemID.SHARK, "Eat")){
                        sleepUntil(()-> !Rs2Player.isAnimating(),generateRandomNumber(2000,3500));
                    }
                } else {
                    break;
                }
            }
            String[] arr1={"Rune arrow","Amethyst arrow"};
            //Rs2GroundItem.lootItemBasedOnValue(new LootingParameters(500,50000000, 10,1,1,false,false))
            if(Rs2GroundItem.lootItemBasedOnValue(new LootingParameters(500,50000000,10,1,1,false,false,arr1))){
                sleepUntil(()-> Rs2Player.isMoving(), Rs2Random.between(750,1500));
                if(Rs2Player.isMoving()){
                    sleepUntil(()-> !Rs2Player.isMoving(), Rs2Random.between(3000,6000));
                }
            } else {
                break;
            }
        }
    }
}

public void OpenTheInv(){
    if(!Rs2Inventory.isOpen()) {
        if (!Rs2Bank.isOpen()) {
            if(Rs2Inventory.open()){
                sleepUntil(()-> Rs2Inventory.isOpen(), generateRandomNumber(500,1000));
            }
        }
    }
}

public void stuckAtEnclave(){
    WorldPoint stuckSpot = new WorldPoint(3124,3636,0);
    if(Rs2Player.getWorldLocation().equals(stuckSpot)){
        Microbot.log("We're stuck outside of the enclave");
        if(Rs2GameObject.exists(39653)){
            if(Rs2GameObject.interact(39653, "Pass-Through")){
                sleepUntil(()-> Rs2Player.isMoving(), Rs2Random.between(2000,4000));
                sleepUntil(()-> !Rs2Player.isMoving(), Rs2Random.between(4000,8000));
            }
        }
    }
}

private void teleToFerox(){
    if (Rs2Equipment.interact(EquipmentInventorySlot.RING, "Ferox Enclave")) {
        sleepUntil(()-> Rs2Player.isAnimating(), generateRandomNumber(2000,4000));
        sleepUntil(()-> !Rs2Player.isAnimating(), generateRandomNumber(6000,10000));
        Microbot.log("Teleing");
    }
}

public void Bankfortrip(){
    if(weDied) return;

    if(!Rs2Bank.isOpen()){
        if(WeAreInTheCaves()){
            Microbot.log("Teleing to bank");
            WorldPoint safe1 = (new WorldPoint(3199, 10071, 0));
            WorldPoint safe2 = (new WorldPoint(3226, 10067, 0));
            if(Rs2Pvp.getWildernessLevelFrom(Rs2Player.getWorldLocation()) > 20){
                if(Rs2Player.getWorldLocation().distanceTo(safe1) <= Rs2Player.getWorldLocation().distanceTo(safe2)){
                    Rs2Walker.walkTo(safe1, Rs2Player.getWorldLocation().distanceTo(safe1) - (generateRandomNumber(2,5)));
                } else {
                    Rs2Walker.walkTo(safe2, Rs2Player.getWorldLocation().distanceTo(safe2) - (generateRandomNumber(2,5)));
                }
            }
            if(Rs2Pvp.getWildernessLevelFrom(Rs2Player.getWorldLocation()) <= 20) {
                teleToFerox();
            }
        }
        if(!WeAreInTheCaves()) {
            Microbot.log("Walking and using bank");
            OpenTheInv();
            stuckAtEnclave();
            stopTeleSpam();
            Rs2Bank.walkToBankAndUseBank(BankLocation.FEROX_ENCLAVE);
        }
    } else {
        // Bank is open - do ALL steps, no random skipping
        shouldFlee = false;
        handleBreaks();

        // Step 1: Deposit loot if we have any
        if(isItTimeToGo() || weHaveLoot()){
            Microbot.log("Depositing all loot");
            Rs2Bank.depositAll();
            sleepUntil(()-> Rs2Inventory.isEmpty(), 5000);
        }

        // Step 2: Ring of dueling
        if(Rs2Equipment.get(EquipmentInventorySlot.RING) == null ||
                !Rs2Equipment.get(EquipmentInventorySlot.RING).getName().contains("dueling")){
            Microbot.log("Getting ring of dueling");
            if(Rs2Bank.count(ItemID.RING_OF_DUELING8) > 0){
                Rs2Bank.withdrawOne(ItemID.RING_OF_DUELING8);
                sleepUntil(()-> Rs2Inventory.contains(ItemID.RING_OF_DUELING8), 3000);
                if(Rs2Inventory.contains(ItemID.RING_OF_DUELING8)){
                    Rs2Inventory.interact(ItemID.RING_OF_DUELING8, "Wear");
                    sleepUntil(()-> Rs2Equipment.get(EquipmentInventorySlot.RING) != null, 3000);
                }
            } else {
                Microbot.log("Out of rings of dueling!");
                super.shutdown();
                return;
            }
        }

        // Step 3: Amulet of glory
        if(Rs2Equipment.get(EquipmentInventorySlot.AMULET) == null ||
                !Rs2Equipment.get(EquipmentInventorySlot.AMULET).getName().contains("Amulet of glory(")){
            Microbot.log("Getting amulet of glory");
            // Deposit empty glory first
            if(Rs2Inventory.contains(ItemID.AMULET_OF_GLORY)){
                Rs2Bank.depositOne(ItemID.AMULET_OF_GLORY);
                sleep(300, 600);
            }
            if(Rs2Bank.hasItem("Amulet of glory(6)") || Rs2Bank.hasItem("Amulet of glory(5)") ||
                    Rs2Bank.hasItem("Amulet of glory(4)") || Rs2Bank.hasItem("Amulet of glory(3)")){
                if(Rs2Bank.hasItem("Amulet of glory(6)")){
                    Rs2Bank.withdrawOne("Amulet of glory(6)");
                } else if(Rs2Bank.hasItem("Amulet of glory(5)")){
                    Rs2Bank.withdrawOne("Amulet of glory(5)");
                } else if(Rs2Bank.hasItem("Amulet of glory(4)")){
                    Rs2Bank.withdrawOne("Amulet of glory(4)");
                } else if(Rs2Bank.hasItem("Amulet of glory(3)")){
                    Rs2Bank.withdrawOne("Amulet of glory(3)");
                }
                sleepUntil(()-> Rs2Inventory.contains("Amulet of glory"), 3000);
                if(Rs2Inventory.contains("Amulet of glory")){
                    Rs2Inventory.interact("Amulet of glory", "Wear");
                    sleepUntil(()-> Rs2Equipment.get(EquipmentInventorySlot.AMULET) != null, 3000);
                }
            }
            } else {
                Microbot.log("Out of amulets of glory!");
                super.shutdown();
                return;
            }
        }

        // Step 4: Bracelet of ethereum
        if(Rs2Equipment.get(EquipmentInventorySlot.GLOVES) != null &&
                Rs2Equipment.get(EquipmentInventorySlot.GLOVES).getId() == ItemID.BRACELET_OF_ETHEREUM_UNCHARGED){
            Microbot.log("Recharging bracelet");
            if(Rs2Bank.count("Revenant ether") >= 100){
                Rs2Bank.withdrawX("Revenant ether", Rs2Random.between(150, 250));
                sleepUntil(()-> Rs2Inventory.contains("Revenant ether"), 3000);
                if(Rs2Inventory.contains("Revenant ether")){
                    Rs2Bank.closeBank();
                    sleepUntil(()-> !Rs2Bank.isOpen(), 2000);
                    Rs2Equipment.unEquip(EquipmentInventorySlot.GLOVES);
                    sleep(600, 1000);
                    Rs2Inventory.combine(ItemID.REVENANT_ETHER, ItemID.BRACELET_OF_ETHEREUM_UNCHARGED);
                    sleepUntil(()-> !Rs2Inventory.contains("Revenant ether"), 3000);
                    Rs2Inventory.interact(ItemID.BRACELET_OF_ETHEREUM, "Wear");
                    sleep(600, 1000);
                    Rs2Bank.openBank();
                    sleepUntil(()-> Rs2Bank.isOpen(), 5000);
                }
            } else {
                Microbot.log("Out of ether!");
                super.shutdown();
                return;
            }
        }

        // Step 5: Ammo
        if(Rs2Equipment.get(EquipmentInventorySlot.AMMO) == null ||
                Rs2Equipment.get(EquipmentInventorySlot.AMMO).getQuantity() < LowOnArrowsCount){
            Microbot.log("Getting ammo");
            if(Rs2Bank.count(selectedArrow) > 100){
                int min = 250, max = 300;
                if(selectedArrow == ItemID.BOLT_RACK){
                    min = 600; max = 700;
                    if(Rs2Equipment.get(EquipmentInventorySlot.WEAPON) != null &&
                            Rs2Equipment.get(EquipmentInventorySlot.WEAPON).getId() == ItemID.KARILS_CROSSBOW_25){
                        Microbot.log("Karil's crossbow is degraded!");
                        super.shutdown();
                        return;
                    }
                }
                Rs2Bank.withdrawX(selectedArrow, generateRandomNumber(min, max));
                sleepUntil(()-> Rs2Inventory.contains(selectedArrow), 3000);
                if(Rs2Inventory.contains(selectedArrow)){
                    Rs2Inventory.interact(selectedArrow, "Wield");
                    sleepUntil(()-> !Rs2Inventory.contains(selectedArrow), 3000);
                }
            } else {
                Microbot.log("Out of arrows!");
                super.shutdown();
                return;
            }
        }

        // Step 6: Rev cave teleports (for knight)
        if(selectedRev.contains("knight") && !Rs2Inventory.contains("Revenant cave teleport")){
            Microbot.log("Getting rev cave teleports");
            if(Rs2Bank.count("Revenant cave teleport") >= 5){
                Rs2Bank.withdrawX("Revenant cave teleport", Rs2Random.between(2, 5));
                sleepUntil(()-> Rs2Inventory.contains("Revenant cave teleport"), 3000);
            } else {
                Microbot.log("Need at least 5 rev cave teleports!");
                super.shutdown();
                return;
            }
        }

        // Step 7: Stamina potion
    if(Rs2Bank.hasItem("Stamina potion(4)") || Rs2Bank.hasItem("Stamina potion(3)") || Rs2Bank.hasItem("Stamina potion(2)")){
        if(Rs2Bank.hasItem("Stamina potion(4)")){
            Rs2Bank.withdrawOne("Stamina potion(4)");
        } else if(Rs2Bank.hasItem("Stamina potion(3)")){
            Rs2Bank.withdrawOne("Stamina potion(3)");
        } else if(Rs2Bank.hasItem("Stamina potion(2)")){
            Rs2Bank.withdrawOne("Stamina potion(2)");

            } else {
                Microbot.log("Out of stamina potions!");
                super.shutdown();
                return;
            }
        }

        // Step 8: Ranging potions
        if(!Rs2Inventory.contains(it->it!=null&&it.getName().contains("Ranging"))){
            Microbot.log("Getting ranging potions");
            if(Rs2Bank.count("Ranging potion(4)") > 0){
                Rs2Bank.withdrawX("Ranging potion(4)", 2);
                sleepUntil(()-> Rs2Inventory.contains(it->it!=null&&it.getName().contains("Ranging")), 3000);
            } else {
                Microbot.log("Out of ranging potions!");
                super.shutdown();
                return;
            }
        }

        // Step 9: Sharks
        int currentSharks = Rs2Inventory.count(ItemID.SHARK);
        if(currentSharks < 10){
            Microbot.log("Getting sharks");
            if(Rs2Bank.count(ItemID.SHARK) >= (10 - currentSharks)){
                Rs2Bank.withdrawX(ItemID.SHARK, 10 - currentSharks);
                sleepUntil(()-> Rs2Inventory.count(ItemID.SHARK) >= 10, 3000);
            } else {
                Microbot.log("Out of sharks!");
                super.shutdown();
                return;
            }
        }

        // Done banking, close
        if(Rs2Bank.isOpen()){
            Rs2Bank.closeBank();
            sleepUntil(()-> !Rs2Bank.isOpen(), 2000);
        }
    }

public int generateRandomNumber(int min, int max) {
    return Rs2Random.nextInt(min, max, 1000, true);
}

private boolean weHaveLoot(){

    if(Rs2Inventory.contains(it->it!=null&&it.getName().contains("Blighted"))){
        return true;
    }

    if(Rs2Inventory.contains(it->it!=null&&it.getName().toLowerCase().contains("rune"))){
        return true;
    }

    if(Rs2Inventory.contains(it->it!=null&&it.getName().toLowerCase().contains("seed"))){
        return true;
    }

    if(Rs2Inventory.contains(it->it!=null&&it.getName().toLowerCase().contains("dragon"))){
        return true;
    }

    if(Rs2Inventory.contains(it->it!=null&&it.getName().toLowerCase().contains("logs"))){
        return true;
    }

    if(Rs2Inventory.contains(it->it!=null&&it.getName().toLowerCase().contains("bar"))){
        return true;
    }

    if(Rs2Inventory.contains(it->it!=null&&it.getName().toLowerCase().contains("runite"))){
        return true;
    }

    if(Rs2Inventory.contains(it->it!=null&&it.getName().toLowerCase().contains("bolt tips"))){
        return true;
    }

    if(Rs2Inventory.contains(it->it!=null&&it.getName().toLowerCase().contains("battlestaff"))){
        return true;
    }

    return false;
}

public boolean isItTimeToGo(){
    int value = 0; //set to 0 so list doesn't compound with each run
    List<Rs2ItemModel> ItemsInInventory = Rs2Inventory.items().collect(Collectors.toList());
    int io = 0;

    for (Rs2ItemModel item : ItemsInInventory) {
        io++;
        if(io > 50) break;

        if(item!=null){
            value+=item.getPrice();
        }
    }

    if(value>=config.leaveAtValue()){
        Microbot.log("We have enough loot");
        return true;
    }
    if(Rs2Inventory.isFull()){
        Microbot.log("We have enough loot");
        return true;
    }
    if(timeToBreak()){
        Microbot.log("It's time to break");
        return true;
    }
    Microbot.log("We have "+value+" worth of loot");
    return false;
}

public boolean areWeEquipped() {

if (Rs2Equipment.get(EquipmentInventorySlot.AMMO) == null) {
    Microbot.log("We have no ammo!");
    return false;
}

if (Rs2Equipment.get(EquipmentInventorySlot.AMMO).getQuantity() < LowOnArrowsCount) {
    Microbot.log("We don't have enough ammo!");
    return false;
}

if (!Rs2Inventory.contains(it -> it != null && it.getName().contains("Stamina"))) {
    Microbot.log("We have no stam!");
    return false;
}

if (!Rs2Inventory.contains(it -> it != null && it.getName().contains("Ranging"))) {
    Microbot.log("We have no Ranging potion!");
    return false;
}

if (!Rs2Inventory.contains(ItemID.SHARK)) {
    Microbot.log("We're out of sharks!");
    return false;
}

if (Rs2Inventory.count(ItemID.SHARK) < 2) {
    Microbot.log("We have less than 2 sharks!");
    return false;
}

if (Rs2Equipment.get(EquipmentInventorySlot.RING) == null) {
    Microbot.log("ring is null");
    return false;
}

if (!Rs2Equipment.get(EquipmentInventorySlot.RING).getName().contains("dueling")) {
    Microbot.log("We don't have our ring of dueling");
    return false;
}

if(timeToBreak()){
    Microbot.log("It's time to break");
    return false;
}

if (isItTimeToGo()) {
    Microbot.log("We have too much loot! Banking");
    return false;
}

if (Rs2Equipment.get(EquipmentInventorySlot.AMULET) == null) {
    Microbot.log("amulet is null");
    return false;
}

if (!Rs2Equipment.get(EquipmentInventorySlot.AMULET).getName().contains("Amulet of glory(")) {
    Microbot.log("amulet is not charged");
    return false;
}

if(Rs2Equipment.get(EquipmentInventorySlot.GLOVES)!=null) {
    if (Rs2Equipment.get(EquipmentInventorySlot.GLOVES).getName().contains("ethereum")) {
        if (Rs2Equipment.get(EquipmentInventorySlot.GLOVES).getId() == ItemID.BRACELET_OF_ETHEREUM_UNCHARGED) {
            Microbot.log("Our bracelet doesn't have enough charges.");
            return false;
        }
    }
}

Microbot.log("We're fully equipped and ready to go.");
return true;

}

public boolean isPkerAround(){

    if(!Microbot.isLoggedIn()){
        return false;
    }

    if(!Rs2Pvp.isInWilderness()){
        return false;
    }

    if(Microbot.getClient().getLocalPlayer() == null){
        return false;
    }

    List<Rs2PlayerModel> playerlist = new ArrayList<Rs2PlayerModel>();
    playerlist.addAll(Rs2Player.getPlayersInCombatLevelRange());
    if(playerlist.isEmpty()) return false;

    List<String> weapons = Arrays.asList(
            "staff", "shadow", "wand", "sceptre", "ballista", "eye of ayak",
            "dragon dagger", "dragon claws", "burning claws", "dragon knife", "eclipse atlatl", "dark bow"
    );

    List<String> chestArmors = Arrays.asList(
            "xerician", "mystic robe top", "infinity top", "enchanted top", "dagon'hai", "ahrim's robetop", "blue moon chestplate",
            "ancestral robe top", "virtus robe top", "zamorak monk top", "ghostly robe", "elder chaos top"
    );

    for (Rs2PlayerModel player : playerlist) {
        Microbot.log("There may be a pker around us "+player.getName());

        String NameOfPlayersWeapon = "Unknown";
        String nameOfPlayersChestPiece = "Unknown";

        if(Rs2Player.getPlayerEquipmentNames(player).get(KitType.WEAPON) != null) {
            NameOfPlayersWeapon = Rs2Player.getPlayerEquipmentNames(player).get(KitType.WEAPON);
        }

        if(Rs2Player.getPlayerEquipmentNames(player).get(KitType.TORSO) != null){
            nameOfPlayersChestPiece = Rs2Player.getPlayerEquipmentNames(player).get(KitType.TORSO);
        }

        if(NameOfPlayersWeapon.equals("Unknown") && nameOfPlayersChestPiece.equals("Unknown")){
            continue;
        }

        String lowercaseWeapon = NameOfPlayersWeapon.toLowerCase();
        String lowercaseChestPiece = nameOfPlayersChestPiece.toLowerCase();

        Microbot.log("They have a "+NameOfPlayersWeapon);
        Microbot.log("They're wearing a' "+nameOfPlayersChestPiece);

        for (String weapon : weapons) {
            if (lowercaseWeapon.contains(weapon) || lowercaseWeapon.equals(weapon)) {
                Microbot.log("This player is wielding a " + NameOfPlayersWeapon + " which is used to pk so we're outy.");
                return true;
            }
        }

        for (String chestArmor : chestArmors) {
            if (lowercaseChestPiece.contains(chestArmor) || lowercaseChestPiece.equals(chestArmor)) {
                Microbot.log("This player is wielding a " + nameOfPlayersChestPiece + " which is used to pk so we're outy.");
                return true;
            }
        }


        if ((player.getInteracting() != null) && (player.getInteracting().equals(Rs2Player.getLocalPlayer()))) {
            Microbot.log(player.getName() + " is attacking us");
            return true;
        }

        if((player.getInteracting() != null && player.getInteracting().getName() != null) && player.getInteracting().getName().equals(Rs2Player.getLocalPlayer().getName())){
            Microbot.log(player.getName() + " is attacking us");
            return true;
        }

    }
    return false;
}

}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions